[
  {
    "path": ".gitattributes",
    "content": "*.php linguist-language=PHP\n*.js linguist-language=PHP"
  },
  {
    "path": ".gitbook.yaml",
    "content": "root: ./docs/\n\nstructure:\n  readme: ./introduction.md\n  summary: ./summary.md\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [tnylea, fletch3555, emptynick]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/BUG-REPORT.yml",
    "content": "name: Bug Report\ndescription: Create a report to help us improve\nlabels: [possible bug]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for taking the time to fill out this bug report!\n  - type: input\n    id: laravel_version\n    attributes:\n      label: Laravel version\n      description: The full Laravel version including minor and patch version\n      placeholder: ex. 8.2.2\n    validations:\n      required: true\n  - type: input\n    id: php_version\n    attributes:\n      label: PHP version\n      description: Your PHP version\n      placeholder: ex. 7.4.21\n    validations:\n      required: true\n  - type: input\n    id: voyager_version\n    attributes:\n      label: Voyager version\n      description: The full Voyager version including minor and patch version. When using the dev-version please attach the commit-id (1.x-dev#abcdef)\n      placeholder: ex. 1.4.3\n    validations:\n      required: true\n  - type: input\n    id: database_version\n    attributes:\n      label: Database\n      description: Your database type and version\n      placeholder: ex. MySQL 8.0\n    validations:\n      required: true\n  - type: textarea\n    id: description\n    attributes:\n      label: Description\n      description: A clear and concise description of what the bug is.\n    validations:\n      required: true\n  - type: textarea\n    id: steps\n    attributes:\n      label: Steps to reproduce\n      description: Steps to reproduce the behavior\n    validations:\n      required: true\n  - type: textarea\n    id: expected_behaviour\n    attributes:\n      label: Expected behavior\n      description: A clear and concise description of what you expected to happen.\n    validations:\n      required: true\n  - type: textarea\n    id: screenshots\n    attributes:\n      label: Screenshots\n      description: If applicable, add screenshots to help explain your problem.\n    validations:\n      required: false\n  - type: textarea\n    id: additional_context\n    attributes:\n      label: Additional context\n      description: Add any other context about the problem here.\n    validations:\n      required: false"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml",
    "content": "name: Feature request\ndescription: Suggest an idea for Voyager\nlabels: [feature]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for taking the time to fill out this feature request!\n  - type: input\n    id: laravel_version\n    attributes:\n      label: Laravel version\n      description: The full Laravel version including minor and patch version\n      placeholder: ex. 8.2.2\n    validations:\n      required: false\n  - type: input\n    id: php_version\n    attributes:\n      label: PHP version\n      description: Your PHP version\n      placeholder: ex. 7.4.21\n    validations:\n      required: false\n  - type: input\n    id: voyager_version\n    attributes:\n      label: Voyager version\n      description: The full Voyager version including minor and patch version. When using the dev-version please attach the commit-id (1.x-dev#abcdef)\n      placeholder: ex. 1.4.3\n    validations:\n      required: false\n  - type: textarea\n    id: description\n    attributes:\n      label: Description of problem\n      description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n    validations:\n      required: true\n  - type: textarea\n    id: solution\n    attributes:\n      label: Proposed solution\n      description: A clear and concise description of what you want to happen.\n    validations:\n      required: true\n  - type: textarea\n    id: alternatives\n    attributes:\n      label: Alternatives considered\n      description: A clear and concise description of any alternative solutions or features you've considered.\n    validations:\n      required: false\n  - type: textarea\n    id: additional_context\n    attributes:\n      label: Additional context\n      description: Add any other context about the problem here.\n    validations:\n      required: false"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: Ask a question\n    url: https://voyager-slack-invitation.herokuapp.com/\n    about: Please ask and answer questions here"
  },
  {
    "path": ".github/SECURITY.yml",
    "content": "If you have a potential security concern to report, please message @fletch3555 or @emptynick directly in our slack group:\n\nhttps://voyager-slack-invitation.herokuapp.com/\n\nWe request that you do NOT report it publicly until we've had a chance to confirm the issue and provide a fix.\n"
  },
  {
    "path": ".github/workflows/automerge.yml",
    "content": "name: automerge\n\non:\n  push:\n    branches-ignore: '*' # ignore everything\n#  pull_request:\n#    types:\n#      - labeled\n#      - unlabeled\n#      - synchronize\n#      - opened\n#      - edited\n#      - ready_for_review\n#      - reopened\n#      - unlocked\n#  pull_request_review:\n#    types:\n#      - submitted\n#  status: {}\n\njobs:\n  automerge:\n    runs-on: ubuntu-latest\n    steps:\n      - name: 'Wait for status checks'\n        id: waitforstatuschecks\n        uses: \"WyriHaximus/github-action-wait-for-status@f8bbe3bb321919ec6a009bc98121f39874dc8ee0\"\n        with:\n          ignoreActions: automerge\n          checkInterval: 30\n        env:\n          GITHUB_TOKEN: \"${{ secrets.GITHUB_TOKEN }}\"\n      - name: 'Merge'\n        uses: pascalgn/automerge-action@v0.6.1\n        if: steps.waitforstatuschecks.outputs.status == 'success'\n        env:\n          GITHUB_TOKEN: \"${{ secrets.GITHUB_TOKEN }}\"\n          MERGE_LABELS: \"automerge,!wip\"\n          MERGE_METHOD: \"squash\"\n          MERGE_COMMIT_MESSAGE: \"pull-request-description\"\n          MERGE_FORKS: \"false\"\n          MERGE_RETRIES: \"6\"\n          MERGE_RETRY_SLEEP: \"10000\"\n          UPDATE_LABELS: \"\"\n          UPDATE_METHOD: \"rebase\"\n"
  },
  {
    "path": ".github/workflows/compile-assets.yml",
    "content": "name: Compile Assets\n\non:\n  push:\n    branches:\n      - '1.*'\n    paths:\n      - 'resources/assets/**'\n      - 'package.json'\n\njobs:\n  compile-assets:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n\n      - uses: actions/setup-node@v1\n        with:\n          node-version: '16.x'\n\n      - name: Install Dependencies\n        run: npm install\n\n      - name: Compile Assets\n        run: npm run prod\n\n      - name: Create Pull Request\n        uses: peter-evans/create-pull-request@v3\n        id: cpr\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n          title: Compile Assets\n          commit-message: 'Automatic assets compilation'\n          labels: automerge\n"
  },
  {
    "path": ".github/workflows/coverage.yml",
    "content": "name: Coverage\n\non:\n  push:\n    branches:\n      - '1.*'\n  pull_request:\n    types:\n      - synchronize\n      - opened\n      - edited\n      - reopened\n\njobs:\n  coverage:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@master\n\n      # Configure PHP\n      - name: Select PHP version\n        uses: shivammathur/setup-php@master\n        with:\n          php-version: '8.1'\n          extensions: mbstring, pdo_sqlite, fileinfo, gd\n          coverage: pcov\n\n      # Configure NPM\n      - uses: actions/setup-node@v1\n        with:\n          node-version: '16.x'\n\n      # Install PHP dependencies\n      - name: Install Composer dependencies\n        run: composer require \"illuminate/support:9.*\" --no-ansi\n\n      # Install NPM dependencies\n      - name: Install Dependencies\n        run: npm install\n\n      # Build static assets\n      - name: Compile Assets\n        run: npm run prod\n\n      # Run phpunit tests to generate coverage report\n      - name: Run tests for coverage\n        run: php -d pcov.enabled=1 ./vendor/bin/phpunit --coverage-clover=coverage.xml\n\n      # Upload coverage report to codecov.io\n      - name: Upload coverage\n        run: bash <(curl -s https://codecov.io/bash)\n"
  },
  {
    "path": ".github/workflows/lock.yml",
    "content": "name: 'Lock issues'\n\non:\n  schedule:\n    - cron: '0 0 * * *'\n\njobs:\n  lock:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: dessant/lock-threads@v2\n        with:\n          github-token: ${{ github.token }}\n          issue-lock-inactive-days: '180'\n          issue-exclude-created-before: ''\n          issue-exclude-labels: ''\n          issue-lock-labels: ''\n          issue-lock-reason: 'resolved'\n          issue-lock-comment: >\n            This issue has been automatically locked since there has not been\t\n            any recent activity after it was closed.\t\n            If you have further questions please ask in our Slack group.\n          process-only: 'issues'\n"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "name: Tests\n\non:\n  push:\n    branches:\n      - '1.*'\n  pull_request:\n    types:\n      - synchronize\n      - opened\n      - edited\n      - reopened\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n\n    strategy:\n      fail-fast: false\n      matrix:\n        php: [7.3, 7.4, 8.0, 8.1, 8.2]\n        laravel: ['8.*', '9.*', '10.*']\n        exclude:\n          - php: 8.2\n            laravel: 8.*\n          - php: 7.3\n            laravel: 9.*\n          - php: 7.4\n            laravel: 9.*\n          - php: 8.2\n            laravel: 9.*\n          - php: 7.3\n            laravel: 10.*\n          - php: 7.4\n            laravel: 10.*\n          - php: 8.0\n            laravel: 10.*\n\n    name: 'PHP ${{ matrix.php }} / Laravel ${{ matrix.laravel }}'\n\n    steps:\n      - uses: actions/checkout@master\n\n      # Configure PHP\n      - name: Select PHP version\n        uses: shivammathur/setup-php@master\n        with:\n          php-version: '${{ matrix.php }}'\n          extensions: mbstring, pdo_sqlite, fileinfo, gd\n          coverage: none\n\n      # Configure NPM\n      - uses: actions/setup-node@v1\n        with:\n          node-version: '16.x'\n\n      # Install PHP dependencies\n      - name: Install Composer dependencies\n        run: composer require \"illuminate/support:${{ matrix.laravel }}\"\n\n      # Display installed laravel version\n      - name: Show laravel version\n        run: composer show laravel/framework\n\n      # Generate vendor symlink\n      - name: Generate vendor symlink\n        run: ./vendor/bin/testbench\n\n      # Install NPM dependencies\n      - name: Install Dependencies\n        run: npm install\n\n      # Build static assets\n      - name: Compile Assets\n        run: npm run prod\n\n      # Run phpunit tests\n      - name: Run tests\n        run: ./vendor/bin/phpunit --no-coverage\n\n"
  },
  {
    "path": ".gitignore",
    "content": "/node_modules\n.DS_Store\n.idea\nvendor\nbuild\n.lock\ncomposer.lock\n.phpunit.result.cache\n.phpunit.cache\n"
  },
  {
    "path": ".php_cs",
    "content": "<?php\n$excluded_folders = [\n    'node_modules',\n    'storage',\n    'vendor'\n];\n$finder = PhpCsFixer\\Finder::create()\n    ->exclude($excluded_folders)\n    ->in(__DIR__);\n\nreturn PhpCsFixer\\Config::create()\n    ->setRules(array(\n        '@PSR2' => true,\n        'lowercase_constants' => false,\n        'method_argument_space' => false,\n    ))\n    ->setFinder($finder);"
  },
  {
    "path": "ISSUE_TEMPLATE",
    "content": "<!---\nIF YOU'RE POSTING A QUESTION ABOUT HOW TO USE VOYAGER, PLEASE CONSIDER ASKING IN SLACK FIRST\n\nPLEASE CONSIDER USING ONE OF THE DEFINED TEMPLATES INSTEAD\n--->\n## Version information\n<!--- The following information is strongly encouraged --->\n - Laravel: v#.#.#\n - Voyager: v#.#.#\n - PHP: #.#\n - Database: [type] [version] (e.g. MySQL 8.0)\n\n## Description:\nA clear and concise description of what the problem is.  Please also explain why this doesn't fit into the defined issue templates\n\n## Additional context\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\"><a href=\"https://voyager.devdojo.com\" target=\"_blank\"><img width=\"400\" src=\"https://s3.amazonaws.com/thecontrolgroup/voyager.png\"></a></p>\n\n> [!Warning]\n> We have decided to archive Voyager as there are many more modern options available. You may still use Voyager, but it will not be receiving any more updates. Here are some alternatives that we recommend:\n\n- [Wave SaaS Starter Kit](https://devdojo.com/wave)\n- [FilamentPHP Admin Panel & More](https://filamentphp.com)\n- [Genesis Starter Kit](https://github.com/thedevdojo/genesis)\n\nOf course, you may also wish to reach for Laravels admin panel [Nova](https://nova.laravel.com/), or you may want to reach for one of their many [Starter Kits](https://laravel.com/docs/starter-kits).\n\nThanks for all the wonderful times 🕺\n\n> Voyager is built with Vue and Bootstrap. If you are looking for a Laravel Starter Kit built that uses Livewire and Tailwind, you may be interested in checking out [Genesis](https://github.com/thedevdojo/genesis)\n\n<p align=\"center\"><a href=\"https://github.com/thedevdojo/genesis\" target=\"_blank\"><img src=\"https://github.com/thedevdojo/voyager/assets/601261/6ffa6ac4-ea1e-4c8a-8360-b347377b8201\" height=\"auto\" width=\"100%\"></a></p>\n\n<p align=\"center\">\n<a href=\"https://packagist.org/packages/tcg/voyager\"><img src=\"https://poser.pugx.org/tcg/voyager/downloads.svg?format=flat\" alt=\"Total Downloads\"></a>\n<a href=\"https://packagist.org/packages/tcg/voyager\"><img src=\"https://poser.pugx.org/tcg/voyager/v/stable.svg?format=flat\" alt=\"Latest Stable Version\"></a>\n<a href=\"https://packagist.org/packages/tcg/voyager\"><img src=\"https://poser.pugx.org/tcg/voyager/license.svg?format=flat\" alt=\"License\"></a>\n<a href=\"https://github.com/larapack/awesome-voyager\"><img src=\"https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg\" alt=\"Awesome Voyager\"></a>\n</p>\n\n# **V**oyager - The Missing Laravel Admin\nMade with ❤️ by [The Control Group](https://www.thecontrolgroup.com)\n\n![Voyager Screenshot](https://s3.amazonaws.com/thecontrolgroup/voyager-screenshot.png)\n\nWebsite & Documentation: https://voyager.devdojo.com/\n\nVideo Tutorial Here: https://voyager.devdojo.com/academy/\n\nJoin our Slack chat: https://voyager-slack-invitation.herokuapp.com/\n\nView the Voyager Cheat Sheet: https://voyager-cheatsheet.ulties.com/\n\n<hr>\n\nLaravel Admin & BREAD System (Browse, Read, Edit, Add, & Delete), supporting Laravel 8 and newer!\n\n> Want to use Laravel 6 or 7? Use [Voyager 1.5](https://github.com/the-control-group/voyager/tree/1.5)\n\n## Installation Steps\n\n### 1. Require the Package\n\nAfter creating your new Laravel application you can include the Voyager package with the following command:\n\n```bash\ncomposer require tcg/voyager\n```\n\n> If you are installing this on Laravel 10, we are working on getting a permanent release available; however, you can still use this with Larvel 10 by requiring the following:\n\n```bash\ncomposer require tcg/voyager dev-1.6-l10\n```\n\n### 2. Add the DB Credentials & APP_URL\n\nNext make sure to create a new database and add your database credentials to your .env file:\n\n```\nDB_HOST=localhost\nDB_DATABASE=homestead\nDB_USERNAME=homestead\nDB_PASSWORD=secret\n```\n\nYou will also want to update your website URL inside of the `APP_URL` variable inside the .env file:\n\n```\nAPP_URL=http://localhost:8000\n```\n\n### 3. Run The Installer\n\nLastly, we can install voyager. You can do this either with or without dummy data.\nThe dummy data will include 1 admin account (if no users already exists), 1 demo page, 4 demo posts, 2 categories and 7 settings.\n\nTo install Voyager without dummy simply run\n\n```bash\nphp artisan voyager:install\n```\n\nIf you prefer installing it with dummy run\n\n```bash\nphp artisan voyager:install --with-dummy\n```\n\nAnd we're all good to go!\n\nStart up a local development server with `php artisan serve` And, visit [http://localhost:8000/admin](http://localhost:8000/admin).\n\n## Creating an Admin User\n\nIf you did go ahead with the dummy data, a user should have been created for you with the following login credentials:\n\n>**email:** `admin@admin.com`   \n>**password:** `password`\n\nNOTE: Please note that a dummy user is **only** created if there are no current users in your database.\n\nIf you did not go with the dummy user, you may wish to assign admin privileges to an existing user.\nThis can easily be done by running this command:\n\n```bash\nphp artisan voyager:admin your@email.com\n```\n\nIf you did not install the dummy data and you wish to create a new admin user, you can pass the `--create` flag, like so:\n\n```bash\nphp artisan voyager:admin your@email.com --create\n```\n\nAnd you will be prompted for the user's name and password.\n\n## Sponsors\n\nVoyager is proudly supported by our amazing sponsors. A big thank you to:\n\n[![DigitalOcean Referral Badge](https://web-platforms.sfo2.cdn.digitaloceanspaces.com/WWW/Badge%203.svg)](https://www.digitalocean.com/?refcode=dc19b9819d06&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge)\n\n"
  },
  {
    "path": "composer.json",
    "content": "{\n  \"name\": \"tcg/voyager\",\n  \"description\": \"A Laravel Admin Package for The Control Group to make your life easier and steer your project in the right direction\",\n  \"keywords\": [\n    \"laravel\",\n    \"admin\",\n    \"panel\"\n  ],\n  \"license\": \"MIT\",\n  \"homepage\": \"https://voyager.devdojo.com/\",\n  \"support\": {\n    \"issues\": \"https://github.com/the-control-group/voyager/issues\",\n    \"source\": \"https://github.com/the-control-group/voyager\"\n  },\n  \"authors\": [\n    {\n      \"name\": \"Tony Lea\",\n      \"email\": \"tony.lea@thecontrolgroup.com\"\n    }\n  ],\n  \"require\": {\n    \"php\": \"^7.3|^7.4|^8.0|^8.1|^8.2|^8.3\",\n    \"illuminate/support\": \"~8.0|~9.0|~10.0|~11.0\",\n    \"intervention/image\": \"^2.7|^3.0\",\n    \"doctrine/dbal\": \"^3.1|^3.5|^4.0\",\n    \"laravel/ui\": \">=1.0\",\n    \"arrilot/laravel-widgets\": \"^3.7\",\n    \"league/flysystem\": \"~1.1|~2.0|~3.0\",\n    \"ext-json\": \"*\"\n  },\n  \"require-dev\": {\n    \"phpunit/phpcov\": \">=6.0\",\n    \"phpunit/phpunit\": \">=8.0\",\n    \"laravel/framework\": \"~8.0|~9.0|~10.0\",\n    \"orchestra/testbench\": \">=6.0\",\n    \"laravel/browser-kit-testing\": \">=6.1.0\",\n    \"orchestra/testbench-browser-kit\": \">=4.0\"\n  },\n  \"autoload\": {\n    \"psr-4\": {\n      \"TCG\\\\Voyager\\\\\": \"src/\"\n    }\n  },\n  \"autoload-dev\": {\n    \"psr-4\": {\n      \"TCG\\\\Voyager\\\\Tests\\\\\": \"tests/\",\n      \"TCG\\\\Voyager\\\\Tests\\\\Database\\\\Factories\\\\\": \"tests/database/factories/\",\n      \"Database\\\\Seeders\\\\\": \"vendor/orchestra/testbench-core/laravel/database/seeders\"\n    }\n  },\n  \"minimum-stability\": \"stable\",\n  \"extra\": {\n    \"laravel\": {\n      \"providers\": [\n        \"TCG\\\\Voyager\\\\VoyagerServiceProvider\",\n        \"TCG\\\\Voyager\\\\Providers\\\\VoyagerDummyServiceProvider\"\n      ]\n    }\n  },\n  \"scripts\": {\n    \"post-autoload-dump\": [\n      \"@php vendor/bin/testbench package:discover --ansi\"\n    ]\n  }\n}\n"
  },
  {
    "path": "docs/bread/formfields/checkbox.md",
    "content": "# Checkbox\n\n```php\n{\n    \"on\" : \"On Text\",\n    \"off\" : \"Off Text\",\n    \"checked\" : true\n}\n```\n\nIn Voyager a Checkbox is converted into a toggle switch, and as you can see above the `on` key will contain the value when the toggle switch is on, and the `off` will contain the value that is set when the switch is off. If `checked` is set to _true_ the checkbox will be toggle on; otherwise by default it will be off.\n\n# Multiple Checkbox\n\n```php\n{\n    \"checked\" : true,\n    \"options\": {\n        \"checkbox1\": \"Checkbox 1 Text\",\n        \"checkbox2\": \"Checkbox 2 Text\"\n    }\n}\n```\n\nYou can create as many checkboxes as you want.  \n\n# Radio Button\n\n```php\n{\n    \"default\" : \"radio1\",\n    \"options\" : {\n        \"radio1\": \"Radio Button 1 Text\",\n        \"radio2\": \"Radio Button 2 Text\"\n    }\n}\n```\n\nThe Radio button is exactly the same as the dropdown. You can specify a `default` if one has not been set and in the `options` object you will specify the _value_ of the option on the **left** and the _text_ to be displayed on the **right**.\n"
  },
  {
    "path": "docs/bread/formfields/coordinates.md",
    "content": "# Coordinates\n\n## Optional Details\n\nSet these in the Edit BREAD interface\n\n### showLatLngInput / showAutocompleteInput\n\nSet either of these to `false` to not include that input. Both default to `true`.\n\n```json\n{\n  \"showAutocompleteInput\": false,\n  \"showLatLngInput\": false\n}\n```\n\n### onChange\n\n```json\n{\n  \"onChange\": \"myFunction\"\n}\n```\n\nDefines an onChange callback so that you can perform subsequent actions (such as using the Autocomplete Place address to populate another field) after the user changes any of the inputs in this formfield.\n\nonChange callback is debounced at 300ms.\n\nFirst parameter is `eventType` (\"mapDragged\", \"latLngChanged\", or \"placeChanged\"). Second parameter is `data` object containing `lat`, `lng`, and `place` properties.\n\n```javascript\nfunction myFunction(eventType, data) {\n  console.log('eventType', eventType);\n  console.log('data.lat', data.lat);\n  console.log('data.lng', data.lng);\n  console.log('data.place', data.place);\n}\n```\n"
  },
  {
    "path": "docs/bread/formfields/date-time.md",
    "content": "# Date & Timestamp\n\n```php\n{\n    \"format\" : \"%Y-%m-%d\"\n}\n```\n\nThe date & timestamp input field is where you can input a date. In the JSON above you can specify the `format` value of the output of the date. It allows you to display a formatted `date` in browse and read views, using Carbon's `formatLocalized()` method\n"
  },
  {
    "path": "docs/bread/formfields/dropdown.md",
    "content": "# Dropdown\n\n```php\n{\n    \"default\" : \"option1\",\n    \"options\" : {\n        \"option1\": \"Option 1 Text\",\n        \"option2\": \"Option 2 Text\"\n    }\n}\n```\n\nWhen specifying that an input type should be a dropdown you will need to specify the values of that dropdown. In the JSON above you can specify the `default` value of the dropdown if it does not have a value. Additionally, in the `options` object you will specify the _value_ of the option on the **left** and the _text_ to be displayed on the **right**.\n"
  },
  {
    "path": "docs/bread/formfields/images.md",
    "content": "# Images\n\n```php\n{\n    \"resize\": {\n        \"width\": \"1000\",\n        \"height\": null\n    },\n    \"quality\" : \"70%\",\n    \"upsize\" : true,\n    \"thumbnails\": [\n        {\n            \"name\": \"medium\",\n            \"scale\": \"50%\"\n        },\n        {\n            \"name\": \"small\",\n            \"scale\": \"25%\"\n        },\n        {\n            \"name\": \"cropped\",\n            \"crop\": {\n                \"width\": \"300\",\n                \"height\": \"250\"\n            }\n        }\n    ]\n}\n```\n\nThe image input has many options. By default if you do not specify any options no problem... Your image will still be uploaded. But, if you want to resize an image, set the quality of the image, or specify thumbnails for the uploaded image you will need to specify those details.\n\n**resize** If you want to specify a size you will need to include that in the `resize` object. If you set either **height** or **width** to null it will keep the aspect ratio based on the width or height that is set. So, for the example above the `width` is set to `1000` pixels and since the `height` is set to `null` it will resize the image width to 1000 pixels and resize the height based on the current aspect ratio.\n\n**quality** If you wish to compress the image with a percentage quality you can specify that percentage in the `quality` key. Typically between 70 and 100% there is little notice of image quality, but the image size may be dramatically lower.\n\n**upsize** This is only valid if you have set your image to be resized. If you specify your image to resized to 1000 pixels and the image is smaller than 1000 pixels by default it will not upsize that image to the 1000 pixels; however, if you set `upsize` to true. It will upsize all images to your specified resize values.\n\n**thumbnails** Thumbnails takes an array of objects. Each object is a new thumbnail that is created. Each object contains 2 values, the `name` and `scale` percentage. The `name` will be attached to your thumbnail image \\(as an example say the image you uploaded was ABC.jpg a thumbnail with the `name` of `medium` would now be created at ABC-medium.jpg\\). The `scale` is the percentage amount you want that thumbnail to scale. This value will be a percentage of the _resize_ width and height if specified.\n"
  },
  {
    "path": "docs/bread/formfields/introduction.md",
    "content": "# Formfields\n\nFormfields are the hearth of Voyagers BREAD-system.  \nEach formfield represents a field in your database-table and one input (or output) in BREAD.  \nTo tweak your formfields you can insert JSON options which are described in the following pages.  \n\nAll formfields share a handful options:\n\n## Description\n\nAll types can include a description in order to help your future self or other users using your Voyager admin panel to understand exactly what a specific BREAD input field is for, this can be defined in the `Optional Details` JSON input field:\n\n```php\n{\n    \"description\": \"A helpful description text here for your future self.\"\n}\n```\n\n## Display options\n\nThere are also a few options that you can include to change the way your BREAD is displayed. You can add a `display` key to your json object and change the width of the particular field and even specify a custom ID.\n\n```php\n{\n    \"display\": {\n        \"width\": \"3\",\n        \"id\": \"custom_id\"\n    }\n}\n```\n\nThe width is displayed on a 12-grid system. Setting it with a width of 3 will span 25% of the width.\n\nThe **id** will let you specify a custom id wrapper around your element. example:\n\n```markup\n<div id=\"custom_id\">\n    <!-- Your field element -->\n</div>\n```\n\n## Default value\n\nMost formfields allow you to define a default value when adding an entry:\n\n```php\n{\n    \"default\" : \"Default text\"\n}\n```\n\n## Null Values\n\nYou might want to save an input field into the database as a `null` value instead of an empty string.\n\nSimply enough, inside the BREAD you can include the following _Optional Details_ for the field:\n\n```php\n{\n    \"null\": \"\"\n}\n```\n\nThis will turn an empty string into a `null` value. However you might want to be able to add both an empty string and a `null` value to the database for that field. However you have to choose a replacement for the `null` value, but it can be anything you wish. For example, if you want a field to change a string \\(ex. `Nothing`\\) into a `null` value you could include the following _Optional Details_ for that field:\n\n```php\n{\n    \"null\": \"Nothing\"\n}\n```\n\nNow entering `Nothing` into the field will end up as a `null` value in the database.\n\n## Generating Slugs\n\nUsing the bread builder you may wish to automatically generate slugs of a certain input. Lets say you have some posts, which have a title and a slug. If you want to automatically generate the slug from the title attribute, you may include the following _Optional Details_:\n\n```php\n{\n    \"slugify\": {\n        \"origin\": \"title\",\n        \"forceUpdate\": true\n    }\n}\n```\n\nThis will automatically generate the slug from the input of the `title` field. If a slug does already exists, it will only be updated if `forceUpdate` is set enabled, by default this is disabled.\n\n## Custom view\n\nYou can specify a custom view to be used for a formfield.  \nTo do so, you have to specify the `view` attribute for your desired field:\n\n```text\n{\n    \"view\": \"my_view\"\n}\n```\n\nThis will then load `my_view` from `resources/views` instead of the formfield.\n\nYou get plenty of data passed to your view for you to use:\n\n* `$view` can be `browse`, `read`, `edit`, `add` or `order`\n* `$content` the content for this field\n* `$dataType` the DataType\n* `$dataTypeContent` the whole model-instance\n* `$row` the DataRow\n* `$options` the DataRow details\n\nYou can also use a custom field view for a specific action (browse, edit, etc) or for similar actions (browse and read).  \nThe custom views are:\n\n```text\n{\n    \"view_browse\": \"my_browse_view\",\n    \"view_read\": \"my_read_view\",\n    \"view_add\": \"my_add_view\",\n    \"view_edit\": \"my_edit_view\",\n    \"view_order\": \"my_order_view\"\n}\n```\n\nThe same variables as above will be passed to your custom action view.\n\n{% hint style=\"info\" %}\n**Developing a custom formfield?**  \nIf you are developing a custom formfield and want to customize any of the views, you can do so by merging `view` into `$options` in your formfields `createContent()` method.\n{% endhint %}\n"
  },
  {
    "path": "docs/bread/formfields/media-picker.md",
    "content": "# Media Picker\n\nThe media picker formfield allows you to upload/delete/select files directly from the media-manager.  \nYou can customize the behaviour with the following options:\n\n```php\n{\n    \"max\": 10,\n    \"min\": 0,\n    \"expanded\": true,\n    \"show_folders\": true,\n    \"show_toolbar\": true,\n    \"allow_upload\": true,\n    \"allow_move\": true,\n    \"allow_delete\": true,\n    \"allow_create_folder\": true,\n    \"allow_rename\": true,\n    \"allow_crop\": true,\n    \"allowed\": [],\n    \"hide_thumbnails\": false,\n    \"quality\": 90,\n    \"watermark\": {\n        \"source\": \"...\",\n        \"position\": \"top-left\",\n        \"x\": 0,\n        \"y\": 0\n    }\n}\n```\n\n<table>\n  <thead>\n    <tr>\n      <th style=\"text-align:left\">Name</th>\n      <th style=\"text-align:left\">Description</th>\n      <th style=\"text-align:left\">Type</th>\n      <th style=\"text-align:left\">Default</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td style=\"text-align:left\">base_path</td>\n      <td style=\"text-align:left\">The start path relative to the filesystem</td>\n      <td style=\"text-align:left\">String</td>\n      <td style=\"text-align:left\">/bread-slug/</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">rename</td>\n      <td style=\"text-align:left\">Rename uploaded files to a given string/expression</td>\n      <td style=\"text-align:left\">String</td>\n      <td style=\"text-align:left\">Original name</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">delete_files</td>\n      <td style=\"text-align:left\">\n        <p>Delete files if the BREAD entry is deleted.</p>\n        <p>Use with caution!</p>\n      </td>\n      <td style=\"text-align:left\">bool</td>\n      <td style=\"text-align:left\">false</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">show_as_images</td>\n      <td style=\"text-align:left\">Shows stored data as images when browsing</td>\n      <td style=\"text-align:left\">bool</td>\n      <td style=\"text-align:left\">false</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">min</td>\n      <td style=\"text-align:left\">The minimum amount of files that can be selected</td>\n      <td style=\"text-align:left\">int</td>\n      <td style=\"text-align:left\">0</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">max</td>\n      <td style=\"text-align:left\">\n        <p>The maximum amount of files that can be selected.</p>\n        <p>0 means infinite</p>\n      </td>\n      <td style=\"text-align:left\">int</td>\n      <td style=\"text-align:left\">0</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">expanded</td>\n      <td style=\"text-align:left\">If the media-picker should be expanded by default</td>\n      <td style=\"text-align:left\">bool</td>\n      <td style=\"text-align:left\">true</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">show_folders</td>\n      <td style=\"text-align:left\">Show subfolders</td>\n      <td style=\"text-align:left\">bool</td>\n      <td style=\"text-align:left\">true</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">show_toolbar</td>\n      <td style=\"text-align:left\">Shows/hides the whole toolbar</td>\n      <td style=\"text-align:left\">bool</td>\n      <td style=\"text-align:left\">false</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">allow_upload</td>\n      <td style=\"text-align:left\">Allow users to upload new files</td>\n      <td style=\"text-align:left\">bool</td>\n      <td style=\"text-align:left\">true</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">allow_move</td>\n      <td style=\"text-align:left\">Allow users to move files/folders</td>\n      <td style=\"text-align:left\">bool</td>\n      <td style=\"text-align:left\">true</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">allow_delete</td>\n      <td style=\"text-align:left\">Allow users to delete files</td>\n      <td style=\"text-align:left\">bool</td>\n      <td style=\"text-align:left\">true</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">allow_create_folder</td>\n      <td style=\"text-align:left\">Allow users to create new folders</td>\n      <td style=\"text-align:left\">bool</td>\n      <td style=\"text-align:left\">true</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">allow_rename</td>\n      <td style=\"text-align:left\">\n        <p>Allow users to rename files.</p>\n        <p>Use with caution!</p>\n      </td>\n      <td style=\"text-align:left\">bool</td>\n      <td style=\"text-align:left\">true</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">allow_crop</td>\n      <td style=\"text-align:left\">Allow users to crop images</td>\n      <td style=\"text-align:left\">bool</td>\n      <td style=\"text-align:left\">true</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">hide_thumbnails</td>\n      <td style=\"text-align:left\">Hides known thumbnails and shows them as children of the parent image</td>\n      <td style=\"text-align:left\">bool</td>\n      <td style=\"text-align:left\">true</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">quality</td>\n      <td style=\"text-align:left\">Sets the quality of uploaded images and thumbnails</td>\n      <td style=\"text-align:left\">int</td>\n      <td style=\"text-align:left\">90</td>\n    </tr>\n    <tr>\n      <td style=\"text-align:left\">allowed</td>\n      <td style=\"text-align:left\">\n        <p>The allowed types to be uploaded/selected.</p>\n        <p>Empty object means all types.</p>\n        <p>Files with other types won&apos;t be displayed.</p>\n      </td>\n      <td style=\"text-align:left\">Object</td>\n      <td style=\"text-align:left\">[]</td>\n    </tr>\n  </tbody>\n</table>\n\n### Allowed types\n\nIf you want your users to only be able to upload specific file-types you can do so by passing an object with mime-types to the \\`allowed\\` prop, for example:\n\n```text\n[\"image\", \"audio\", \"video\"]\n```\n\nor\n\n```text\n[\"image/jpeg\", \"image/png\", \"image/bmp\"]\n```\n\n### Expressions\n\nThe `base_path` and `rename` can contain the following placeholders:\n\n* `{pk}` the primary-key of the entry \\(only for `base_path`\\)\n* `{uid}` the user-id of the current logged-in user\n* `{date:format}` the current date in the format defined in `format`. For example `{date:d.m.Y}`\n* `{random:10}` random string with N characters\n\nSo a `base_path` can, for example, look like the following:\n\n```text\n{\n    \"base_path\": \"/my-bread/{pk}/{date:Y}/{date:m}/\"\n}\n```\n\n### Watermark\nA watermark can be added to uploaded images. To do so, you need to define a `source` property relative to Voyagers storage-disk.\nThere are a few optional arguments you can use:  \n**position** the position where the watermark is placed. Can be:\n- top-left (default)\n- top\n- top-right\n- left\n- center\n- right\n- bottom-left\n- bottom\n- bottom-right\n\n**x** Relative offset to the position on the x-axis. Defaults to 0\n\n**y** Relative offset to the position on the y-axis. Defaults to 0\n\n**size** the size (in percent) of the watermark relative to the image. Defaults to 15\n\n### Thumbnails\nYou can generate thumbnails for each uploaded image.  \nA thumbnail can be one of three types:\n#### Fit\nFit combines cropping and resizing to find the best way to generate a thumbnail matching your dimensions.  \nYou have to pass `width` and can pass `height` and `position`.  \nAn example for `fit` would be:\n```\n{\n    \"thumbnails\": [\n        {\n            \"type\": \"fit\",\n            \"name\": \"fit-500\",\n            \"width\": 500, // Required\n            \"height\": 500, // Optional\n            \"position\": \"center\" // Optional. Refer to http://image.intervention.io/api/fit\n        }\n    ]\n}\n```\n#### Crop\nCrop an image by given dimensions and position.\nYou have to pass `width` and `height` and can pass `x` and `y`.  \nAn example for `crop` would be:\n```\n{\n    \"thumbnails\": [\n        {\n            \"type\": \"crop\",\n            \"name\": \"crop-500-500\",\n            \"width\": 500, // Required\n            \"height\": 500, // Required\n            \"x\": 50, // Optional. Left offset\n            \"y\": 50, // Optional. Top offset\n        }\n    ]\n}\n```\n\n#### Resize\nResize the image to the given dimensions.\nYou have to pass `width` and/or `height`.  \nSome examples for `resize`:\n```\n{\n    \"thumbnails\": [\n        // Width will be 500px, height will be calculated based on the aspect-ratio\n        {\n            \"type\": \"resize\",\n            \"name\": \"resize-500\",\n            \"width\": 500,\n            \"upsize\": true, // Optional. Set to false to prevent upsizing\n        },\n        // Resizes the image to 500x500px\n        {\n            \"type\": \"resize\",\n            \"name\": \"resize-500-500\",\n            \"width\": 500,\n            \"height\": 500\n        },\n        // Height will be 500px, width will be auto-calculated\n        {\n            \"type\": \"resize\",\n            \"name\": \"resize-500\",\n            \"width\": null,\n            \"height\": 500\n        }\n    ]\n}\n```\n\nA watermark can also be inserted into each thumbnail. Just define the [watermark-options](#watermark) on the parent and set `watermark` to `true` for each thumbnail you want to insert the watermark to.\n"
  },
  {
    "path": "docs/bread/formfields/number.md",
    "content": "# Number\n\n```php\n{\n    \"step\" : 0.1,\n    \"min\" : 0,\n    \"max\" : 10,\n    \"default\": 1,\n}\n```\n\nThese are standard attributes for number input field, default value for step is any if not defined.\n"
  },
  {
    "path": "docs/bread/formfields/tinymce.md",
    "content": "# TinyMCE\n\nIf you want to customize TinyMCE within Voyager, you can do so by adding a [additional JS file](../../customization/additional-css-js.md) to your config.\n\nIn this file you have to define a function like\n\n```javascript\nfunction tinymce_init_callback(editor)\n{\n    //...\n}\n```\n\nIf you need to manipulate TinyMCE **before** it was initialized, you can use\n\n```javascript\nfunction tinymce_setup_callback(editor)\n{\n    //...\n}\n```\n\nIf you want to customize TinyMCE init configuration Options you can merge your custom options in BREAD details as follow:\n\n```php\n{\n    \"tinymceOptions\" : {\n        \"name\": \"value\"\n    }\n}\n```\n\nIf you want to use tinyMCE outside it's default template `rich_text_box` you'll need initialize it with:\n\n```javascript\ntinymce.init(window.voyagerTinyMCE.getConfig());\n```\n\nFor all possible variables, functions and configuration Options please refer to the [TinyMCE documentation](https://www.tinymce.com/docs/api/tinymce/tinymce.editor/).\n"
  },
  {
    "path": "docs/bread/introduction.md",
    "content": "# Introduction\n\nWhen adding or editing the current BREAD for a database table you will first see the BREAD info which allows you to set the Display Names, slug, icon, `Model` and Controller Namespace, Policy Name. You can also choose if you would like to Generate permissions for that BREAD type.\n\n![](../.gitbook/assets/bread_details.png)\n\nWhen you scroll down you will see each of the rows that are associated with that table where you can select where in your views you want to see each of those fields:\n\n* BROWSE \\(field will show up when you browse the current data\\)\n* READ \\(field will show when you click to view the current data\\)\n* EDIT \\(field will be visible and allow you to edit the data\\)\n* ADD \\(field will be visible when you choose to create a new data type\\)\n* DELETE \\(doesn't pertain to delete so this can be checked or unchecked\\)\n\n![](../.gitbook/assets/bread_fields.png)\n\nYou may also choose to specify what form type you want to use for each field. This can be a TextBox, TextArea, Checkbox, Image, and many other types of form elements.\n\nEach field also has additional details or options that can be included. These types are checkbox, dropdown, radio button, and image.\n\n## Validation\n\nInside of the _Optional Details_ section for each row in your BREAD you can also specify validation rules with some simple JSON. Here is an example of how to add a validation rule for _required_ and _max length of 12_\n\n```php\n{\n    \"validation\": {\n        \"rule\": \"required|max:12\"\n    }\n}\n```\n\nAdditionally, you may wish to add some custom error messages which can be accomplished like so:\n\n```php\n{\n    \"validation\": {\n        \"rule\": \"required|max:12\",\n        \"messages\": {\n            \"required\": \"This :attribute field is a must.\",\n            \"max\": \"This :attribute field maximum :max.\"\n        }\n    }\n}\n```\n\nYou can also define multiple rules the following way:\n\n```php\n{\n    \"validation\": {\n        \"rule\": [\n            \"required\",\n            \"max:12\"\n        ]\n    }\n}\n```\n\n### Action specific rules\n\nYou can define separate validation rules for edit and add:\n\n```text\n{\n    \"validation\": {\n        \"rule\": \"min:3\",\n        \"edit\": {\n            \"rule\": \"nullable\"\n        },\n        \"add\": {\n            \"rule\": \"required\"\n        }\n    }\n}\n```\n\nYou can find a list of all available validation rules in the [Laravel docs](https://laravel.com/docs/validation#available-validation-rules).\n\n## Tagging\n\nTagging gives you the possibility to add new items to a Belongs-To-Many relationship directly when editing or adding a BREAD.\n\nTo activate this function, you simply have to enable `Tagging` in the relationship details\n\n![](../.gitbook/assets/tagging.jpg)\n\nAfter that you can enter a free-text into the select and hit enter to save a new relationship.\n\n{% hint style=\"info\" %}\n**Be aware:**\n\nThis only stores the `display-column` so you have to make sure that all other fields are either nullable or have a default value.\n{% endhint %}\n\n## Ordering Bread Items\n\nYou can define the default order for browsing BREADs and order your BREAD items with drag-and-drop.  \nFor this you need to change the settings for your BREAD first:\n\n![](../.gitbook/assets/bread_settings_order.png)\n\n**Order column** is the field in your table where the order is stored as an integer.  \n**Order display column** is the field which is shown in the drag-drop list.  \n**Order direction** the direction in which the field is ordered.\n\nAfter this you can go to your BREAD-browse page and you will see a button **Order.**  \nClicking this button will bring you to the page where you can re-arrange your items:\n\n![](../.gitbook/assets/bread_order.png)\n\n## Scope browse-results\n\nIf you want to filter the browse results for a BREAD you can do so by creating a [Scope](https://laravel.com/docs/eloquent#local-scopes) in your model. For example if you want to only show posts that were created by the current user, define a Scope like the following:\n\n```php\n<?php\npublic function scopeCurrentUser($query)\n{\n    return $query->where('author_id', Auth::user()->id);\n}\n```\n\nNext, go to the BREAD-settings for `posts` and look for the `Scope` input and select `currentUser`:\n\n![](../.gitbook/assets/bread_scope.jpg)\n\nAfter hitting `Submit` you will only see your own posts.\n"
  },
  {
    "path": "docs/bread/relationships.md",
    "content": "# Relationships\n\n## Adding a relationship\n\nUsing the BREAD builder you can easily create Relationships between tables. At the bottom of the page you will see a new button that says 'Create Relationship'\n\n![](../.gitbook/assets/bread_relationship.png)\n\n{% hint style=\"info\" %}\n**Notice**  \nIf you have not yet created the BREAD for the table yet, it will need to be created first and then you can come back after creating the BREAD to add the relationship. Otherwise you'll end up with a notification which looks like the following.\n{% endhint %}\n\n![](../.gitbook/assets/bread_relationship_no_bread.png)\n\nSo, after the BREAD has already been created you will then be able to create a new relationship. After you click on the 'Create a Relationship' button. You will see a new Modal window that looks like the following:\n\n![](../.gitbook/assets/bread_relationship_form.png)\n\nYou will first specify which type of relationship this is going to be, then you will select the table you are referencing and which Namespace that belongs to that table. You will then select which row combines those tables.\n\nYou can also specify which columns you would like to see in the dropdown or the multi-select.\n\nNow, you can easily create `belongsTo`, `belongsToMany`, `hasOne`, and `hasMany` relationships directly in Voyager.\n\n## Advanced options\n\nIf you need to set advanced options for `belongsToMany` relationship you can set, after saving relationship, these parameters in details field:\n\n```php\n{\n    \"foreign_pivot_key\": \"user_id\",\n    \"related_pivot_key\": \"role_id\",\n    \"parent_key\": \"id\"\n}\n```\n\n## Sorting relationships\n\nYou can sort the results of a relationship by setting the `sort` object in the relationship options:\n\n```php\n{\n    \"sort\": {\n        \"field\": \"my_field\",\n        \"direction\": \"asc\"\n    }\n}\n```\n\nOr\n\n```php\n{\n    \"sort\": {\n        \"field\": \"my_field\",\n        \"direction\": \"desc\"\n    }\n}\n```\nTo sort by `my_field` descending.\n\n\n## Scoping relationships\n\nYou can easily filter the shown relationship options by defining a [local scope](https://laravel.com/docs/eloquent#local-scopes) in the foreign model.  \nFor example, if you want to only show active entries, create a scope like:\n\n```php\npublic function scopeActive($query)\n{\n    return $query->where('active', 1);\n}\n```\n\nAnd add the following to the relationship options:\n\n```php\n{\n    \"scope\": \"active\",\n}\n```\n\nThe value is the name of your scope-method without the word `scope`.  \nThe value for `scopeActive()` is `active`. For `scopeSomeUsers()` it is `someUsers`.\n\n{% hint style=\"info\" %}\nIn a BelongsTo relationship the foreign key field decides if value can be saved on add or edit and applies validation rules for everything else, like visibility in browse and edit, the relationship field is used.\n{% endhint %}\n"
  },
  {
    "path": "docs/core-concepts/compass.md",
    "content": "# Compass\n\nThe Compass section is a quick place for you to go for some link references, font references, run some commands or view some logs.\n\nIn the first tab you will see a few link resources and you will see all the fonts that you can use inside of Voyager.\n\n![](../.gitbook/assets/compass_1.png)\n\nIn the Command section you can actually run some artisan commands directly from Voyager.\n\n![](../.gitbook/assets/compass_2.png)\n\nAnd Lastly, under the Logs tab you will be able to view all your application logs.\n\n![](../.gitbook/assets/compass_3.png)\n\n"
  },
  {
    "path": "docs/core-concepts/database-manager.md",
    "content": "# Database Manager\n\nVoyager has some awesome database tools which allow you to Add/Edit/Delete or view current database tables. The other cool part of Voyager is that you can add BREAD or \\(Browse, Read, Edit, Add, & Delete\\) functionality to any of your tables.\n\n![](../.gitbook/assets/database-manager.png)\n\nInside of your admin panel you can visit Tools-&gt;Database and you'll be able to view all your current tables in your database. You may also click on 'Create a New Table' to create a new table in your database. All newly created tables will use the charset defined in your [default database connection](https://laravel.com/docs/database#configuration).\n\n![](../.gitbook/assets/database_new_table.png)\n\nIf you click the table name you can view the current schema. Additionally you can click on the View, Edit, or Delete buttons to perform that action for that table.\n\nYou may also choose to Add BREAD \\(Browse, Read, Edit, Add, & Delete\\) for any of your database tables. Once a table already has BREAD you may choose to edit the current BREAD or Delete the BREAD for that table.\n\nRead on further about the BREAD builder in the next section.\n\n"
  },
  {
    "path": "docs/core-concepts/helper-methods.md",
    "content": "# Helper methods\n\nVoyager has several helper functions that are ready to use. Here you can find the list of available function that may speed up your development.\n\n## Thumbnails URL\n\nVoyager will generate thumbnails for Image field type when you specify the [additional field options](../bread/introduction.md#additional-field-options).\n\nAfter you have your thumbnails generated, you may want to display the thumbnails in your view or get the thumbnail URL. In order to do that you need to add `Resizable` traits to your model.\n\n```php\nuse TCG\\Voyager\\Traits\\Resizable;\n\nclass Post extends Model\n{\n    use Resizable;\n}\n```\n\n### Display a single image\n\n```php\n@foreach($posts as $post)\n    <img src=\"{{Voyager::image($post->thumbnail('small'))}}\" />\n@endforeach\n```\n\nOr you can specify the optional image field name \\(attribute\\), default to `image`\n\n```php\n@foreach($posts as $post)\n    <img src=\"{{Voyager::image($post->thumbnail('small', 'photo'))}}\" />\n@endforeach\n```\n\n### Display multiple images\n\n```php\n@foreach($posts as $post)\n    $images = json_decode($post->images);\n    @foreach($images as $image)\n        <img src=\"{{ Voyager::image($post->getThumbnail($image, 'small')) }}\" />\n    @endforeach\n@endforeach\n```\n\n"
  },
  {
    "path": "docs/core-concepts/media-manager.md",
    "content": "# Media Manager\n\nVoyager has a full-fledged Media Manager which allows you to upload files, re-name files, and delete files. You can also add new folders and move files/folders. Basically anything that you would be able to do in any type of Media Manager you can do so in the Voyager Media Manager.\n\n![](../.gitbook/assets/media_manager.png)\n\nYou may also drag and drop files onto the 'upload' button to upload multiple files.  \nThe media manager allows you to create thumbnails and add watermarks to uploaded images through the configuration file.  \nPlease visit the [media-picker documentation](../bread/formfields/media-picker.md#watermark) to learn about the configuration options.  \n\n{% hint style=\"info\" %}\n**Notice on File Upload Size**  \nIf you are getting an error when trying to upload large files, this may be a setting that needs to be changed in your PHP. Be sure to check `max_file_upload` and `file_upload_size`\n{% endhint %}\n"
  },
  {
    "path": "docs/core-concepts/menus-and-menu-builder.md",
    "content": "# Menus and Menu Builder\n\nWith Voyager you can easily create menus for your application. In fact the Voyager admin is using the menu builder for the navigation you use on the left hand side.\n\nYou can view your current Menus by clicking on the _Tools-&gt;Menu Builder_ button. You can add, edit, or delete any current menu. This means that you can create a new menu for the header, sidebar, or footer of your site. Create as many menus as you would like.\n\nWhen you are ready to add menu items to your menu you can click on the builder button of the corresponding menu:\n\n![](../.gitbook/assets/menu_1.jpg)\n\nThis will take you to the Menu Builder where you can add, edit, and delete menu items.\n\n![](../.gitbook/assets/menu_2.jpg)\n\nAfter creating and configuring your menu, you can easily implement that menu in your application. Say that we have a menu called `main`. Inside of any view file we could now output the menu by using the following code:\n\n```php\nmenu('main');\n```\n\nThis will output your menu in an unstyled unordered list. If you do use bootstrap to stylize your web app you can pass a second argument to the menu display method telling it that you want to stylize the menu with bootstrap styles like so:\n\n```php\nmenu('main', 'bootstrap');\n```\n\nTaking it one more step further you can even specify your own view and stylize your menu however you would like. Say for instance that we had a file located at `resources/views/my_menu.blade.php`, which contained the following code:\n\n```markup\n<ul>\n    @foreach($items as $menu_item)\n        <li><a href=\"{{ $menu_item->link() }}\">{{ $menu_item->title }}</a></li>\n    @endforeach\n</ul>\n```\n\nThen anywhere you wanted to display your menu you can now call:\n\n```php\nmenu('main', 'my_menu');\n```\n\nAnd your custom menu will now be output.\n\n## Menu as JSON\n\nIf you dont want to render your menu but get an array instead, you can pass `_json` as the second parameter. For example:\n\n```php\nmenu('main', '_json')\n```\n\nThis will give you a collection of menu-items.\n\n"
  },
  {
    "path": "docs/core-concepts/multilanguage.md",
    "content": "# Multilanguage\n\nVoyager supports multiple languages for your models.To get started, you need to configure some things first.\n\n## Setup\n\nFirst you need to define some `locales` in your `config/voyager.php` file and `enable` multilanguage:\n\n```php\n'multilingual' => [\n        'enabled' => true,\n        'default' => 'en',\n        'locales' => [\n            'en',\n            'da',\n        ],\n    ],\n```\n\nAfter that you need to include the `Translatable` Trait in your model and define the translatable attributes:\n\n```php\nuse TCG\\Voyager\\Traits\\Translatable;\nclass Post extends Model\n{\n    use Translatable;\n    protected $translatable = ['title', 'body'];\n}\n```\n\nNow you will see a language-selection in your Pages BREAD.\n\n## Usage\n\n### Eager-load translations\n\n```php\n// Loads all translations\n$posts = Post::with('translations')->get();\n\n// Loads all translations\n$posts = Post::all();\n$posts->load('translations');\n\n// Loads all translations\n$posts = Post::withTranslations()->get();\n\n// Loads specific locales translations\n$posts = Post::withTranslations(['en', 'da'])->get();\n\n// Loads specific locale translations\n$posts = Post::withTranslation('da')->get();\n\n// Loads current locale translations\n$posts = Post::withTranslation('da')->get();\n```\n\n### Get default language value\n\n```php\necho $post->title;\n```\n\n### Get translated value\n\n```php\necho $post->getTranslatedAttribute('title', 'locale', 'fallbackLocale');\n```\n\nIf you do not define locale, the current application locale will be used. You can pass in your own locale as a string. If you do not define fallbackLocale, the current application fallback locale will be used. You can pass your own locale as a string. If you want to turn the fallback locale off, pass false. If no values are found for the model for a specific attribute, either for the locale or the fallback, it will set that attribute to null.\n\n### Translate the whole model\n\n```php\n$post = $post->translate('locale', 'fallbackLocale');\necho $post->title;\necho $post->body;\n\n// You can also run the `translate` method on the Eloquent collection\n// to translate all models in the collection.\n$posts = $posts->translate('locale', 'fallbackLocale');\necho $posts[0]->title;\n```\n\nIf you do not define locale, the current application locale will be used. You can pass in your own locale as a string. If you do not define fallbackLocale, the current application fallback locale will be used. You can pass in your own locale as a string. If you want to turn the fallback locale off, pass false. If no values are found for the model for a specific attribute, either for the locale or the fallback, it will set that attribute to null.\n\n### Check if model is translatable\n\n```php\n// with string\nif (Voyager::translatable(Post::class)) {\n    // it's translatable\n}\n\n// with object of Model or Collection\nif (Voyager::translatable($post)) {\n    // it's translatable\n}\n```\n\n### Set attribute translations\n\n```php\n$post = $post->translate('da');\n$post->title = 'foobar';\n$post->save();\n```\n\nThis will update or create the translation for title of the post with the locale da. Please note that if a modified attribute is not translatable, then it will make the changes directly to the model itself. Meaning that it will overwrite the attribute in the language set as default.\n\n### Query translatable Models\n\nTo search for a translated value, you can use the `whereTranslation` method.  \nFor example, to search for the slug of a post, you'd use\n\n```php\n$page = Page::whereTranslation('slug', 'my-translated-slug');\n// Is the same as\n$page = Page::whereTranslation('slug', '=', 'my-translated-slug');\n// Search only locale en, de and the default locale\n$page = Page::whereTranslation('slug', '=', 'my-translated-slug', ['en', 'de']);\n// Search only locale en and de\n$page = Page::whereTranslation('slug', '=', 'my-translated-slug', ['en', 'de'], false);\n```\n\n`whereTranslation` accepts the following parameter:\n\n* `field` the field you want to search in\n* `operator` the operator. Defaults to `=`. Also can be the value \\(Same as [where](https://laravel.com/docs/queries#where-clauses)\\)\n* `value` the value you want to search for\n* `locales` the locales you want to search in as an array. Leave as `null` if you want to search all locales\n* `default` also search in the default value/locale. Defaults to true.\n\n"
  },
  {
    "path": "docs/core-concepts/roles-and-permissions.md",
    "content": "# Roles and Permissions\n\nVoyager comes with Roles and Permissions out of the box. Each _User_ has a _Role_ which has a set of _Permissions_.\n\nInside of the dashboard you can choose to Add, Edit, or delete the current Roles. Additionally when you click to edit a particular role you can specify the BREAD permissions.\n\n![](../.gitbook/assets/role.png)\n\nNew in version 1.0, we've changed Voyager's authorization system to be [more in line with Laravel](https://laravel.com/docs/authorization#authorizing-actions-using-policies)! This means that you can check for permissions in the following ways:\n\n```php\n// via user object\n$canViewPost = $user->can('read', $post);\n$canViewPost = Auth::user()->can('read', $post);\n\n// via controller\n$canViewPost = $this->authorize('read', $post);\n```\n\nOut of the box there are some permissions you can use by default:\n\n* `browse_admin`: Whether or not the user may browse the Voyager admin panel.\n* `browse_database`: Whether or not the user may browse the Voyager database menu section.\n* `browse_bread`: Whether or not the user may browse the Voyager BREAD menu section.\n* `browse_media`: Whether or not the user may browse the Voyager media section.\n* `browse_menu`: Whether or not the user may browse the Voyager menu section.\n* `browse_settings`: Whether or not the user may browse the Voyager settings section.\n* `read_settings`: Whether or not the user can view or see a particular setting.\n* `edit_settings`: Whether or not the user can edit a particular setting.\n* `add_settings`: Whether or not the user can add a new setting.\n* `delete_settings`: Whether or not the user can delete a particular setting.\n\nAdditionally you can `Generate permissions` for every BREAD type you create. This will create the `browse`, `read`, `edit`, `add` and `delete` permission.\n\nAs an example, perhaps we are creating a new BREAD type from a `products` table. If we choose to `Generate permissions` for our `products` table. Our permission keys will be `browse_products`, `read_products`, `edit_products`, `add_products` and `delete_products`.\n\n{% hint style=\"info\" %}\n**Notice**  \nIf a menu item is associated with any kind of BREAD, then it will check for the `browse` permission, for example for the `Posts` BREAD menu item, it will check for the `browse_posts` permission. If the user does not have the required permission, that menu item will be hidden.\n{% endhint %}\n\n## Creating permissions for custom page\n\nIf you create a custom page and you want only allow specific user roles to access it, you may use permissions.\n\nThis only works if your slug comes directly after `/admin/`. So for a custom page of the form `/admin/sub/foo` the menu item will not be hidden from  the menu.\n\n### Create permission\nFirst, create a permission in the permissions table (you could use BREAD for example, model name is `TCG\\Voyager\\Models\\Permission`). The column `table_name` should be set to null. The column `key` should be of the form `browse_slug` where `slug` has to be replaced with  the actual slug of your custom page. For example, to restrict access to your custom page with url `/admin/create_bill` you may create the permission `browse_create_bill`.\n\n### Set role\nCheck the permission for each role that you wish to grant access to the site at `admin/roles`. In the above example you would find a new checkbox called \"Browse Create Bill\". If a user does not have the required permission, the menu item leading to your custom page will be hidden.\n\n### Customize controller\nYou may create your own [gate](https://laravel.com/docs/authorization#gates) \n\n```php\nGate::define('browse_create_bill', function ($user) {\n    return $user->hasPermission(`browse_create_bill`);\n});\n```\n    \nto use `authorize` in your controller:\n\n```php\npublic function index()\n{\n  $this->authorize('browse_create_bill');\n  //..\n```\n\nIf you do so, make sure add the custom guard to your controller:\n\n```php\n  /**\n   * Get the guard to be used during authentication.\n   *\n   * @return \\Illuminate\\Contracts\\Auth\\StatefulGuard\n   */\n  protected function guard()\n  {\n      return Auth::guard(app('VoyagerGuard'));\n  }\n```\n\n\n\n## Using Permissions in your Blade Template files\n\nYou can also check for permissions using blade syntax. Let's say for instance that you want to check if a user can `browse_posts`, simple enough we can use the following syntax:\n\n```php\n@can('browse', $post)\n    I can browse posts\n@endcan\n```\n\nOr perhaps you need to run an else condition for a permission. That's simple enough:\n\n```php\n@can('browse', $post)\n    I can browse posts\n@else\n    I cannot browse posts\n@endcan\n```\n\nCouldn't be easier, right ;\\)\n\n"
  },
  {
    "path": "docs/core-concepts/routing.md",
    "content": "# Routing\n\nAfter running the voyager installer you will see a few new routes that have been added to your `routes/web.php` file which look like the following:\n\n```php\nRoute::group(['prefix' => 'admin'], function () {\n    Voyager::routes();\n});\n```\n\nThis is where the Voyager routes will be rendered. You can change the `admin` prefix if you desire, or set any other route configuration you need, such as `middleware` or `domain`.\n\nWhen creating a new BREAD type and specifying a slug for that BREAD, you can then visit that route from the following link:\n\n```text\nURL/admin/slug-name\n```\n\nAs an example, if we have a `products` table and we specified the slug to be `products`. You will now be able to visit the following URL:\n\n```text\nURL/admin/products\n```\n\n{% hint style=\"info\" %}\n**Notice**  \nYou may not see a link to your newly created routes or BREAD inside your admin menu. To create a new link in your admin menu visit the documentation for the [menu section](menus-and-menu-builder.md).\n{% endhint %}\n\n"
  },
  {
    "path": "docs/core-concepts/settings.md",
    "content": "# Settings\n\nThe Settings section allows you to add any site wide settings you would like. You can add an image upload setting for your site logo or a text box for the main headline on your homepage.\n\n![](../.gitbook/assets/settings.png)\n\nIn this new version you have the ability to add different groups for different settings. So, if you created a new setting inside of the `site` group and it had a key of `title` you would then be able to reference that setting any where on your site by doing the following:\n\n```php\n<?php\necho setting('site.title');\n```\n\nOr inside of any blade template like:\n\n```text\n{{ setting('site.title') }}\n```\n\nSo, now you can add all kinds of settings in Voyager and reference them in your application.\n\n"
  },
  {
    "path": "docs/customization/action-buttons.md",
    "content": "# Action buttons\n\n## Action Buttons\n\nAction buttons are displayed when browsing a BREAD next to each row\n\n![](../.gitbook/assets/action_buttons.jpg)\n\nYou can add your own buttons very easily. First we will create an Action-class which extends Voyagers AbstractAction in app/Actions/MyAction.php\n\n```php\n<?php\n\nnamespace App\\Actions;\n\nuse TCG\\Voyager\\Actions\\AbstractAction;\n\nclass MyAction extends AbstractAction\n{\n    public function getTitle()\n    {\n        return 'My Action';\n    }\n\n    public function getIcon()\n    {\n        return 'voyager-eye';\n    }\n\n    public function getPolicy()\n    {\n        return 'read';\n    }\n\n    public function getAttributes()\n    {\n        return [\n            'class' => 'btn btn-sm btn-primary pull-right',\n        ];\n    }\n\n    public function getDefaultRoute()\n    {\n        return route('my.route');\n    }\n}\n```\n\nNext we need to tell Voyager that we want to use this action. For this open your `app/Providers/AppServiceProvider.php` and search for the `boot()` method\n\n```php\n<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\Events\\Dispatcher;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass AppServiceProvider extends ServiceProvider\n{\n    public function boot()\n    {\n        Voyager::addAction(\\App\\Actions\\MyAction::class);\n    }\n}\n```\n\nAfter that you will see your new button when browsing any BREAD ![](../.gitbook/assets/action_buttons_custom.jpg)\n\n### Showing/hiding actions\n\nIf you only want to show your action for special datatypes you can implement a function `shouldActionDisplayOnDataType()` in your action:\n\n```php\n<?php\n\npublic function shouldActionDisplayOnDataType()\n{\n    return $this->dataType->slug == 'posts';\n}\n```\n\nIf you want to show your action-button on a per-row-base, simply implement a method `shouldActionDisplayOnRow($row)` and add your condition(s)\n\n```php\n<?php\n\npublic function shouldActionDisplayOnRow($row)\n{\n    return $row->id > 10;\n}\n```\n\n## Mass Actions\n\nMass actions are called for multiple instances of a model.  \nIf you want your action to be a mass action, just implement the following method:\n\n```php\n<?php\n\npublic function massAction($ids, $comingFrom)\n{\n    // Do something with the IDs\n    return redirect($comingFrom);\n}\n```\n\n"
  },
  {
    "path": "docs/customization/adding-custom-formfields.md",
    "content": "# Adding custom Formfields\n\nYou can easily add a new Formfield to Voyager. In the example below we will add a number form field \\(which is already included by default in Voyager\\).\n\nFirst we create a new class in our project \\(it doesn't matter where it is placed\\) called `NumberFormField`\n\n```php\n<?php\n\nnamespace App\\FormFields;\n\nuse TCG\\Voyager\\FormFields\\AbstractHandler;\n\nclass NumberFormField extends AbstractHandler\n{\n    protected $codename = 'number';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('formfields.number', [\n            'row' => $row,\n            'options' => $options,\n            'dataType' => $dataType,\n            'dataTypeContent' => $dataTypeContent\n        ]);\n    }\n}\n```\n\nThe `codename` variable is used in the dropdown you see in the BREAD builder. In the `createContent` method we are returning the view that is used to display our form field.\n\nNext, we will create the view specified above.\n\n```markup\n<input type=\"number\"\n       class=\"form-control\"\n       name=\"{{ $row->field }}\"\n       data-name=\"{{ $row->display_name }}\"\n       @if($row->required == 1) required @endif\n             step=\"any\"\n       placeholder=\"{{ isset($options->placeholder)? old($row->field, $options->placeholder): $row->display_name }}\"\n       value=\"@if(isset($dataTypeContent->{$row->field})){{ old($row->field, $dataTypeContent->{$row->field}) }}@else{{old($row->field)}}@endif\">\n```\n\nIn the view we can add whatever logic we want.\n\nWhen we are done with our view, we will tell Voyager that we have a new form field. We will do this in a service provider \\(in the example below we use the `AppServiceProvider`.\n\n```php\n<?php\n\nnamespace App\\Providers;\n\nuse TCG\\Voyager\\Facades\\Voyager;\nuse App\\FormFields\\NumberFormField;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass AppServiceProvider extends ServiceProvider\n{\n    //..\n\n    public function register()\n    {\n        Voyager::addFormField(NumberFormField::class);\n    }\n}\n```\n\n"
  },
  {
    "path": "docs/customization/additional-css-js.md",
    "content": "# Additional CSS and JS\n\nAs of the latest version you can now add additional CSS and JS files to the voyager master blade without having to copy or modify the blade file itself removing potential manual migration headaches later on. The CSS and JS files are added _after_ any Voyager assets so you can override styles and functionality comfortably.\n\nThis is all handled via the `voyager.php` config file:\n\n```php\n// Here you can specify additional assets you would like to be included in the master.blade\n'additional_css' => [\n    //'css/custom.css',\n],\n'additional_js' => [\n   //'js/custom.js',\n],\n```\n\n{% hint style=\"info\" %}\nThe path will be passed to Laravels [asset](https://laravel.com/docs/helpers#method-asset) function.\n{% endhint %}\n\n"
  },
  {
    "path": "docs/customization/bread-accessors.md",
    "content": "# BREAD accessors\n\nSometimes you want to format an attribute only for one \\(or some\\) of the BREAD-actions.  \nFor example if you have a `name` field and on the browse-page you want to display something when the field is empty, you define the following in your model:\n\n```php\n<?php\n\npublic function getNameBrowseAttribute()\n{\n    return $this->name ?? 'Empty';\n}\n```\n\nThis will display \"Empty\" if the actual field is empty, or return the value if not.\n\nLikewise you can do the same for the other BREAD-actions:\n\n```php\n<?php\n\npublic function getNameReadAttribute()\n{\n    //\n}\n\npublic function getNameEditAttribute()\n{\n    //\n}\n\npublic function getNameAddAttribute()\n{\n    //\n}\n```\n\n"
  },
  {
    "path": "docs/customization/coordinates.md",
    "content": "# Coordinates\n\nWith Voyager you are able to store coordinates and select them from a map.  \nTo do so, you first need to make sure that the column in your table is either `GEOMETRY` or `POINT`.\n\nAfter that you have to include the Spatial-Trait in your Model and define the column:\n\n```php\n<?php\n\nnamespace App;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse TCG\\Voyager\\Traits\\Spatial;\n\nclass Category extends Model\n{\n    use Spatial;\n\n    protected $spatial = ['your_column'];\n}\n```\n\nNow you can go to the tables BREAD-settings and set your field to be `Coordinates`.\n\nAfter that you will get a Map where you can select your Coordinates.\n\n{% hint style=\"info\" %}\nMake sure to set the Google Maps API-Key in your [configuration](../getting-started/configurations.md#google-maps).  \nThis is also the place where you can define the default location of your map.\n{% endhint %}\n\n## Getting the coordinates\n\nYou can get the coordinates from your model by calling\n\n```php\n$model->getCoordinates();\n```\n\nThis will return an array of coordinates with `lat` as the latitude and `lng` as the longitude.\n\n"
  },
  {
    "path": "docs/customization/custom-guard.md",
    "content": "# Custom guard\n\nStarting with Voyager 1.2 you can define a \\(custom\\) guard which is used throughout Voyager.  \nTo do so, just bind the name of your auth-guard to `VoyagerGuard`.  \nFirst, make sure you have defined a guard as per the [Laravel documentation](https://laravel.com/docs/authentication#adding-custom-guards).  \nAfter that open your `AuthServiceProvider` and add the following to the register method:\n\n```php\n$this->app->singleton('VoyagerGuard', function () {\n    return 'your-custom-guard-name';\n});\n```\n\nNow this guard is used instead of the default guard.\n\n\n# Example - using a different model and table for Admins\n\nFirst you have to create a new table. Let's call it `admins`:  \n```php\n<?php\nSchema::create('admins', function (Blueprint $table) {\n    $table->bigIncrements('id');\n    $table->bigInteger('role_id')->unsigned()->nullable();\n    $table->string('name');\n    $table->string('email')->unique();\n    $table->string('avatar')->nullable()->default('users/default.png');\n    $table->string('password')->nullable();\n    $table->string('remember_token')->nullable();\n    $table->text('settings')->nullable()->default(null);\n    $table->timestamps();\n    $table->foreign('role_id')->references('id')->on('roles');\n});\n```\n\nand a model which extends Voyagers user-model:\n\n```php\n<?php\n\nnamespace App;\n\nclass Admin extends \\TCG\\Voyager\\Models\\User\n{\n\n}\n```\n\nNext, create a guard named `admin` in your `config/auth.php`:\n```php\n'guards' => [\n    'admin' => [\n        'driver' => 'session',\n        'provider' => 'admins',\n    ],\n\n    // ...\n],\n```\nAnd a user provider called `admins`:\n```php\n'providers' => [\n    'admins' => [\n        'driver' => 'eloquent',\n        'model' => App\\Admin::class,\n    ],\n\n    // ...\n],\n```\n\nNext you have to tell Voyager to use your new guard.  \nOpen you `AppServiceProvider.php` and add the following to the `register` method:\n\n```php\npublic function register()\n{\n    $this->app->singleton('VoyagerGuard', function () {\n        return 'admin';\n    });\n}\n```\n\n{% hint style=\"info\" %}\nPlease note that the user-bread is still responsible to edit users - not admins.  \nCreate a BREAD for the `admins` table if you want to change Admins.\n{% endhint %}"
  },
  {
    "path": "docs/customization/custom-realtionship-attributes.md",
    "content": "# Custom relationship attributes\n\nWith Voyager 1.1 you are able to define additional attributes which you can show in a relationship.\n\nFor example a `Post` has an `Author` and you want to display the `Users` full-name. To do so, we first need to [define an Accessor](https://laravel.com/docs/eloquent-mutators#defining-an-accessor)\n\n```php\npublic function getFullNameAttribute()\n{\n    return \"{$this->first_name} {$this->last_name}\";\n}\n```\n\nAfter that we need to tell Voyager that there is an accessor we want to use:\n\n```php\npublic $additional_attributes = ['full_name'];\n```\n\nThats it! You can now select `full_name` in your Relationship.\n\n"
  },
  {
    "path": "docs/customization/enabling-soft-delete.md",
    "content": "# Enabling Soft-Delete\n\nThis is only to assist with enabling soft-deletion for your models within Voyager. Please refer to the [Laravel documentation](https://laravel.com/docs/eloquent#soft-deleting) for specifics.\n\n## Table Configurations in Voyager\n\nWhen creating a table using the Database Manager you've selected the 'Add Soft Deletes' button and then when adding the BREAD functionality to that table you've added a Model Name, you only have to edit your Model file to fully enable Soft-Delete on that table.\n\n## Editing the Table's Model\n\nA default model will look like this:\n\n```php\n<?php\n\nnamespace App;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\n\nclass YourModelName extends Model\n{\n\n}\n```\n\nJust turn it into:\n\n```php\n<?php\n\nnamespace App;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\n\nclass Documento extends Model\n{\n    use SoftDeletes;\n    protected $dates = ['deleted_at'];\n}\n```\n\nAnd from now on, every time you delete a record from that table, it won't actually be deleted, only the `deleted_at` column will be written with the current timestamp.\n\n"
  },
  {
    "path": "docs/customization/overriding-files.md",
    "content": "# Overriding files\n\n## Overriding BREAD Views\n\nYou can override any of the BREAD views for a **single** BREAD by creating a new folder in `resources/views/vendor/voyager/slug-name` where _slug-name_ is the _slug_ that you have assigned for that table. There are 4 files that you can override:\n\n* browse.blade.php\n* edit-add.blade.php\n* read.blade.php\n* order.blade.php\n\nAlternatively you can override the views for **all** BREADs by creating any of the above files under `resources/views/vendor/voyager/bread`\n\n## Overriding submit button:\nYou can override the submit button without the need to override the whole `edit-add.blade.php` by extending the `submit-buttons` section:  \n```blade\n@extends('voyager::bread.edit-add')\n@section('submit-buttons')\n    @parent\n    <button type=\"submit\" class=\"btn btn-primary save\">Save And Publish</button>\n@endsection\n```\n\n## Using custom Controllers\n\nYou can override the controller for a single BREAD by creating a controller which extends Voyagers controller, for example:\n\n```php\n<?php\n\nnamespace App\\Http\\Controllers;\n\nclass VoyagerCategoriesController extends \\TCG\\Voyager\\Http\\Controllers\\VoyagerBaseController\n{\n    //...\n}\n```\n\nAfter that go to the BREAD-settings and fill in the Controller Name with your fully-qualified class-name:\n\n![](../.gitbook/assets/bread_controller.png)\n\nYou can now override all methods from the [VoyagerBaseController](https://github.com/the-control-group/voyager/blob/1.6/src/Http/Controllers/VoyagerBaseController.php)\n\n## Overriding Voyagers Controllers\n\n{% hint style=\"danger\" %}\n**Only use this method if you know what you are doing**  \nWe don't recommend or support overriding all controllers as you won't get any code-changes made in future updates.\n{% endhint %}\n\nIf you want to override any of Voyagers core controllers you first have to change your config file `config/voyager.php`:\n\n```php\n/*\n|--------------------------------------------------------------------------\n| Controllers config\n|--------------------------------------------------------------------------\n|\n| Here you can specify voyager controller settings\n|\n*/\n\n'controllers' => [\n    'namespace' => 'App\\\\Http\\\\Controllers\\\\Voyager',\n],\n```\n\nThen run `php artisan voyager:controllers`, Voyager will now use the child controllers which will be created at `App/Http/Controllers/Voyager`\n\n## Overriding Voyager-Models\n\nYou are also able to override Voyagers models if you need to.  \nTo do so, you need to add the following to your AppServiceProviders register method:\n\n```php\nVoyager::useModel($name, $object);\n```\n\nWhere **name** is the class-name of the model and **object** the fully-qualified name of your custom model. For example:\n\n```php\n<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\Events\\Dispatcher;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass AppServiceProvider extends ServiceProvider\n{\n    public function boot()\n    {\n        Voyager::useModel('DataRow', \\App\\DataRow::class);\n    }\n    // ...\n}\n```\n\nThe next step is to create your model and make it extend the original model. In case of `DataRow`:\n\n```php\n<?php\n\nnamespace App;\n\nclass DataRow extends \\TCG\\Voyager\\Models\\DataRow\n{\n    // ...\n}\n```\n\nIf the model you are overriding has an associated BREAD, go to the BREAD settings for the model you are overriding\nand replace the Model Name with your fully-qualified class-name. For example, if you are overriding the Voyager `Menu`\nmodel with your own `App\\Menu` model:\n\n![](../.gitbook/assets/bread_override_voyager_models.png)\n\n"
  },
  {
    "path": "docs/customization/overriding-routes.md",
    "content": "# Overriding Routes\n\nYou can override any Voyager routes by writing the routes you want to overwrite below `Voyager::routes()`. For example if you want to override your post LoginController:\n\n```php\nRoute::group(['prefix' => 'admin'], function () {\n   Voyager::routes();\n\n   // Your overwrites here\n   Route::post('login', ['uses' => 'MyAuthController@postLogin', 'as' => 'postlogin']);\n});\n```\n\n"
  },
  {
    "path": "docs/getting-started/configurations.md",
    "content": "# Configurations\n\nWith the installation of Voyager you will find a new configuration file located at `config/voyager.php`.  \nIn this file you can find various options to change the configuration of your Voyager installation.\n\n{% hint style=\"info\" %}\nIf you cache your configuration files please make sure to run `php artisan config:clear` after you changed something.\n{% endhint %}\n\nBelow we will take a deep dive into the configuration file and give a detailed description of each configuration set.\n\n## Users\n\n```php\n<?php\n\n'user' => [\n    'add_default_role_on_register' => true,\n    'default_role'                 => 'user',\n    'admin_permission'             => 'browse_admin',\n    'namespace'                    => App\\User::class,\n    'redirect'                     => '/admin'\n],\n```\n\n**add\\_default\\_role\\_on\\_register:** Specify whether you would like to add the default role to any new user that is created.  \n**default\\_role:** You can also specify what the **default\\_role** is of the user.  \n**admin\\_permission:** The permission needed to view the admin dashboard.  \n**namespace:** The namespace of your apps User Class.  \n**redirect:** Redirect path after the user logged in.\n\n## Controller\n\n```php\n<?php\n\n'controllers' => [\n    'namespace' => 'TCG\\\\Voyager\\\\Http\\\\Controllers',\n],\n```\n\nYou can specify the default `controller` namespace of Voyager. If you ever wish to override any of the core functionality of Voyager you can do so by duplicating the Voyager controllers and specifying the location of your custom controllers.\n\n{% hint style=\"info\" %}\n**Overwrite a single controller**  \nIf you only want to overwrite a single controller, you might consider adding the following piece of code to your `AppServiceProvider` class in the `register` method.  \n`$this->app->bind(VoyagerBreadController::class, MyBreadController::class);`\n{% endhint %}\n\n## Model\n\n```php\n<?php\n\n'models' => [\n    //'namespace' => 'App\\\\',\n],\n```\n\nYou can specify the namespace or location of your models. This is used when creating the Models from the database section of Voyager. If not defined the default application namespace will be used.\n\n## Assets\n\n```php\n<?php\n\n'assets_path' => '/vendor/tcg/voyager/assets',\n```\n\nYou may wish to specify a different asset path. If your site lives in a subfolder you may need to include that directory to the beginning of the path. This may also be used in case you wish to duplicate the published assets and customize your own.\n\n{% hint style=\"info\" %}\nWhen upgrading to new version of voyager the assets located in the `/vendor/tcg/voyager/assets` directory may need to be overwritten, so if you wish to customize any styles you will want to duplicate that directory and specify the new location of your asset\\_path.\n{% endhint %}\n\n## Storage\n\n```php\n<?php\n\n'storage' => [\n    'disk' => 'public',\n],\n```\n\nBy default Voyager is going to use the `public` local storage. You can additionally use any driver inside of your `config/filesystems.php`. This means you can use S3, Google Cloud Storage, or any other file storage system you would like.\n\n## Database\n\n```php\n<?php\n\n'database' => [\n    'tables' => [\n        'hidden' => ['migrations', 'data_rows', 'data_types', 'menu_items', 'password_resets', 'permission_role', 'personal_access_tokens', 'settings'],\n    ],\n    'autoload_migrations' => true,\n],\n```\n\nYou may wish to hide some database tables in the Voyager database section. In the database config you can choose which tables would like to hide.  \n`autoload_migrations` allows you to exclude Voyagers migration-files from loading when running `php artisan migrate`.\n\n## Multilingual\n\n```php\n<?php\n\n'multilingual' => [\n    'enabled' => false,\n    'default' => 'en',\n    'locales' => [\n        'en',\n        //'pt',\n    ],\n],\n```\n\nYou can specify whether or not you want to **enable** mutliple languages. You can then specify your **default** language and all the support languages \\(**locales**\\)\n\nRead more about multilanguage [here](../core-concepts/multilanguage.md).\n\n## Dashboard\n\n```php\n<?php\n\n'dashboard' => [\n    'navbar_items' => [\n        'Profile' => [\n            'route'         => 'voyager.profile',\n            'classes'       => 'class-full-of-rum',\n            'icon_class'    => 'voyager-person',\n        ],\n        'Home' => [\n            'route'         => '/',\n            'icon_class'    => 'voyager-home',\n            'target_blank'  => true,\n        ],\n        'Logout' => [\n            'route'      => 'voyager.logout',\n            'icon_class' => 'voyager-power',\n        ],\n    ],\n    'widgets' => [\n        'TCG\\\\Voyager\\\\Widgets\\\\UserDimmer',\n        'TCG\\\\Voyager\\\\Widgets\\\\PostDimmer',\n        'TCG\\\\Voyager\\\\Widgets\\\\PageDimmer',\n    ],\n],\n```\n\nIn the dashboard config you can add **navbar\\_items**, make the **data\\_tables** responsive, and manage your dashboard **widgets**.\n\n**navbar\\_items** Include a new route in the main user navbar dropdown by including a 'route', 'icon\\_class', and 'target\\_blank'.\n\n**data\\_tables** If you set 'responsive' to true the datatables will be responsive.\n\n**widgets** Here you can manage the widgets that live on your dashboard. You can take a look at an example widget class by viewing the current widgets inside of `tcg/voyager/src/Widgets`.\n\n## Primary color\n\n```php\n<?php\n\n'primary_color' => '#22A7F0',\n```\n\nThe default primary color for the Voyager admin dashboard is a light blue color. You can change that primary color by changing the value of this config.\n\n## Show developer tips\n\n```php\n<?php\n\n'show_dev_tips' => true,\n```\n\nIn the Voyager admin there are developer tips or notifications that will show you how to reference certain values from Voyager. You can choose to hide these notifications by setting this configuration value to false.\n\n## Additional stylesheets\n\n```php\n<?php\n\n'additional_css' => [\n    //'css/custom.css',\n],\n```\n\nYou can add your own custom stylesheets that will be included in the Voyager admin dashboard. This means you could technically create a whole new theme for Voyager by adding your own custom stylesheet.\n\nRead more [here](../customization/additional-css-js.md).\n\n{% hint style=\"info\" %}\nThe path will be passed to Laravels [asset](https://laravel.com/docs/helpers#method-asset) function.\n{% endhint %}\n\n## Additional Javascript\n\n```php\n<?php\n\n'additional_js' => [\n    //'js/custom.js',\n],\n```\n\nThe same goes for this configuration. You can add your own javascript that will be executed in the Voyager admin dashboard. Add as many javascript files as needed.\n\nRead more [here](../customization/additional-css-js.md).\n\n## Google Maps\n\n```php\n<?php\n\n'googlemaps' => [\n    'key'    => env('GOOGLE_MAPS_KEY', ''),\n    'center' => [\n        'lat' => env('GOOGLE_MAPS_DEFAULT_CENTER_LAT', '32.715738'),\n        'lng' => env('GOOGLE_MAPS_DEFAULT_CENTER_LNG', '-117.161084'),\n    ],\n    'zoom' => env('GOOGLE_MAPS_DEFAULT_ZOOM', 11),\n],\n```\n\nThere is a new data type called **coordinates** that allow you to add a google map as a datatype. The user can then drag and drop a pin in the Google Maps to save a longitude and latitude value in the database.\n\nIn this config you can set the default Google Maps Keys and center location. This can also be added to your .env file.\n\n## Allowed Mimetypes\n\nTo allow/disallow mimetypes to be uploaded through the media-manager you can define an array `allowed_mimetypes`:\n\n```php\n<?php\n\n'allowed_mimetypes' => [\n     'image/jpeg',\n     'image/png',\n     'image/gif',\n     'image/bmp',\n     'video/mp4',\n],\n```\n\nThe user can only upload files with the given mimetypes. If you want to allow all types to be uploaded you can use the following:\n\n```php\n<?php\n\n'allowed_mimetypes' => '*',\n```\n\n"
  },
  {
    "path": "docs/getting-started/installation.md",
    "content": "# Installation\n\nVoyager is super easy to install. After creating your new Laravel application you can include the Voyager package with the following command:\n\n```bash\ncomposer require tcg/voyager\n```\n\nNext make sure to create a new database and add your database credentials to your .env file, you will also want to add your application URL in the `APP_URL` variable:\n\n```text\nAPP_URL=http://localhost\nDB_HOST=localhost\nDB_DATABASE=homestead\nDB_USERNAME=homestead\nDB_PASSWORD=secret\n```\n\nFinally, we can install Voyager. You can choose to install Voyager with dummy data or without the dummy data. The dummy data will include 1 admin account \\(if no users already exist\\), 1 demo page, 4 demo posts, 2 categories and 7 settings.\n\nTo install Voyager without dummy data simply run\n\n```bash\nphp artisan voyager:install\n```\n\nIf you prefer installing it with the dummy data run the following command:\n\n```bash\nphp artisan voyager:install --with-dummy\n```\n\n{% hint style=\"danger\" %}\n**Specified key was too long error**  \nIf you see this error message you have an outdated version of MySQL, use the following solution: [https://laravel-news.com/laravel-5-4-key-too-long-error](https://laravel-news.com/laravel-5-4-key-too-long-error)\n{% endhint %}\n\nAnd we're all good to go!\n\nStart up a local development server with `php artisan serve` And, visit the URL [http://localhost:8000/admin](http://localhost:8000/admin) in your browser.\n\nIf you installed with the dummy data, a user has been created for you with the following login credentials:\n\n> **email:** `admin@admin.com`  \n> **password:** `password`\n\n{% hint style=\"info\" %}\n**Quick note**  \nA dummy user is **only** created if there are no current users in your database.\n{% endhint %}\n\nIf you did not go with the dummy user, you may wish to assign admin privileges to an existing user. This can easily be done by running this command:\n\n```bash\nphp artisan voyager:admin your@email.com\n```\n\nIf you wish to create a new admin user you can pass the `--create` flag, like so:\n\n```bash\nphp artisan voyager:admin your@email.com --create\n```\n\nAnd you will be prompted for the users name and password.\n\n## Advanced\n\nThis section is meant for users who are installing Voyager on an already existing Laravel installation or for users who want to perform a manual install. If this is not the case, you should go back to the [installation](installation.md) documentation or skip this section.\n\nThe first thing you should do is publish the assets that come with Voyager. You can do that by running the following commands:\n\n```bash\nphp artisan vendor:publish --provider=\"TCG\\Voyager\\VoyagerServiceProvider\"\nphp artisan vendor:publish --provider=\"Intervention\\Image\\ImageServiceProviderLaravelRecent\"\n```\n\nNext, call `php artisan migrate` to migrate all Voyager table.\n\n{% hint style=\"info\" %}\nIf you want to change migrations, for example to use a different table for users, don't migrate. Instead copy Voyagers migrations to `database/migrations`, make your changes, turn off the config option `database.autoload_migrations` and then migrate.\n{% endhint %}\n\nNow, open your User-Model \\(usually `app/User.php`\\) and make the class extend `\\TCG\\Voyager\\Models\\User` instead of `Authenticatable`.\n\n```php\n<?php\n\nclass User extends \\TCG\\Voyager\\Models\\User\n{\n    // ...\n}\n```\n\nThe next step is to add Voyagers routes to your `routes/web.php` file:\n\n```php\n<?php\n\nRoute::group(['prefix' => 'admin'], function () {\n    Voyager::routes();\n});\n```\n\nNow run  \n`php artisan db:seed --class=VoyagerDatabaseSeeder`  \nto seed some necessary data to your database, and  \n`php artisan storage:link`  \nto create the storage symlink to your public folder.\n\nAfter that, run `composer dump-autoload` to finish your installation!\n\n"
  },
  {
    "path": "docs/getting-started/prerequisites.md",
    "content": "# Prerequisites\n\nBefore installing Voyager make sure you have installed one of the following versions of Laravel:\n- Laravel 8\n- Laravel 9\n\nAdditionally Voyager requires you to use PHP 7.3 or newer. Laravel requires you to use PHP 8 or newer when using Laravel 9."
  },
  {
    "path": "docs/getting-started/upgrading.md",
    "content": "# Upgrading\n\n## Upgrading 1.5 to 1.6\n\n### Update your Composer.json\n\nTo update to the latest version inside of your composer.json file make sure to update the version of Voyager inside the require declaration of your composer.json to:\n\n`tcg/voyager\": \"1.6.*`\n\nAnd then run `composer update`\n\n### Check your TinyMCE configuration\n\nTinyMCE was updated to version 6 and with that, a lot of configurations have changed.  \nIf there are any errors in the console and you changed the TinyMCE configuration, make sure you are using the latest options and values from their docs.\n\n### Troubleshooting\n\nBe sure to ask us on our slack channel if you are experiencing any issues and we will try and assist. Thanks.\n"
  },
  {
    "path": "docs/getting-started/what-is-voyager.md",
    "content": "# What is Voyager\n\nBefore installing Voyager it is very important to take a quick moment to learn _what it is_ & _what it isn't_.\n\n## What it is\n\n* An admin interface for your Laravel app\n* An easy way to add/edit/delete data for your app\n* A menu builder \\(build menus in Voyager for your app\\)\n* A media manager for your files\n* CRUD/BREAD generator \\([learn more about BREAD here](../bread/introduction.md)\\)\n\nVoyager is simply an admin for your Laravel app. Whatever you want your app to do on the front-end is completely up to you. You are in control of your application and you can use Voyager to make your life easier by adding data, editing users, creating menus, and many other administrative tasks.\n\n## What it isn't\n\n* A content management system \\(CMS\\)\n* A blogging platform\n* Wordpress \\(Bleh! 😜\\)\n\nVoyager is not a CMS or a blogging platform. But it can be used to create a CMS or a blogging platform, but out of the box it is neither of those. As stated in the previous section you have full control on what your application will do and how it will function.\n\nWith Laravel & Voyager you can create any kind of application your heart desires. Laravel & Voyager are simply tools to make it easier to build.\n\n"
  },
  {
    "path": "docs/introduction.md",
    "content": "# Introduction\n\nWelcome to the Voyager documentation for version 1.6. This documentation will teach you how to install, configure, and use Voyager so that way you can create some kick ass stuff!\n\nHm Hm \\(cough\\)… I mean… Arrgg! Ye young scallywag! What say we learn how to steer this ship!\n\n![Voyager Screenshot](https://s3.amazonaws.com/thecontrolgroup/voyager-screenshot.png)\n\nBefore installing Voyager you may want to take a quick moment to learn what it is and what it isn't, we'll do that in the next section.\n\n"
  },
  {
    "path": "docs/summary.md",
    "content": "# Table of contents\n\n* [Introduction](introduction.md)\n\n## Getting started\n\n* [What is Voyager](getting-started/what-is-voyager.md)\n* [Prerequisites](getting-started/prerequisites.md)\n* [Installation](getting-started/installation.md)\n* [Upgrading](getting-started/upgrading.md)\n* [Configurations](getting-started/configurations.md)\n\n## BREAD\n\n* [Introduction](bread/introduction.md)\n* [Relationships](bread/relationships.md)\n* [Formfields](bread/formfields/introduction.md)\n  * [Checkbox/Multiple Checkbox/Radio](bread/formfields/checkbox.md)\n  * [Coordinates](bread/formfields/coordinates.md)\n  * [Date & Time](bread/formfields/date-time.md)\n  * [Dropdown](bread/formfields/dropdown.md)\n  * [Images](bread/formfields/images.md)\n  * [Media Picker](bread/formfields/media-picker.md)\n  * [Number](bread/formfields/number.md)\n  * [TinyMCE](bread/formfields/tinymce.md)\n\n## Core concepts\n\n* [Routing](core-concepts/routing.md)\n* [Media Manager](core-concepts/media-manager.md)\n* [Menus and Menu Builder](core-concepts/menus-and-menu-builder.md)\n* [Database Manager](core-concepts/database-manager.md)\n* [Settings](core-concepts/settings.md)\n* [Compass](core-concepts/compass.md)\n* [Roles and Permissions](core-concepts/roles-and-permissions.md)\n* [Helper methods](core-concepts/helper-methods.md)\n* [Multilanguage](core-concepts/multilanguage.md)\n\n## Customization\n\n* [Overriding files](customization/overriding-files.md)\n* [Overriding Routes](customization/overriding-routes.md)\n* [Additional CSS and JS](customization/additional-css-js.md)\n* [Enabling Soft-Delete](customization/enabling-soft-delete.md)\n* [Custom relationship attributes](customization/custom-realtionship-attributes.md)\n* [Adding custom Formfields](customization/adding-custom-formfields.md)\n* [Coordinates](customization/coordinates.md)\n* [BREAD accessors](customization/bread-accessors.md)\n* [Custom guard](customization/custom-guard.md)\n* [Action buttons](customization/action-buttons.md)\n\n## Troubleshooting\n\n* [Using HTTPS on yours site](troubleshooting/using-https.md)\n* [Missing required parameter](troubleshooting/missing-required-parameter.md)\n"
  },
  {
    "path": "docs/troubleshooting/missing-required-parameter.md",
    "content": "# Missing required parameter\n\n**Symptom:** You get an error page saying\n\n```text\nMissing required parameters for [Route...]\n```\n\n**Cause:** There are two possible causes:  \n1. You dont have a primary-key for your table  \n2. You have a primary-key but it's **not** called `id`\n\n**Solution:** As there are two causes, there are also two solutions: 1. Simply create a field `id` for the table  \n2. Tell your model about your primary-key: `protected $primaryKey = 'your_primary_key';`\n\nPlease consider following [Eloquents model conventions](https://laravel.com/docs/eloquent#eloquent-model-conventions)\n\n"
  },
  {
    "path": "docs/troubleshooting/using-https.md",
    "content": "# Using HTTPS on yours site\n\n**Symptom:** When visiting your site with HTTPS, images within Voyager fail to load.\n\n**Cause:** Images urls are generated by Voyager using\n\n```php\nStorage::disk(config('voyager.storage.disk'))->url($file);\n```\n\nIf voyager.storage.disk is set to public, and the public disk is the default from Laravel, then the url property in the disk configuration is set to\n\n```php\n'url' => env('APP_URL').'/storage',\n```\n\nwhich uses the non-HTTPS APP\\_URL value to build an absolute url to the image.\n\n**Solution:** If you remove env\\('APP\\_URL'\\). from the public disk configuration, then it will render a domain-relative url, which will always use the current domain and protocol.\n\nAs an aside, if you need a fully-qualified URL, you could wrap the call to `Voyager::image('...')` with `asset()`, so it would be\n\n```php\nasset(Voyager::image('...'))\n```\n\nThis will return the current protocol, domain, and correct path to that image.\n\n"
  },
  {
    "path": "license",
    "content": "MIT License\n\nCopyright (c) 2016 The Control Group\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "migrations/2016_01_01_000000_add_voyager_user_fields.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass AddVoyagerUserFields extends Migration\n{\n    /**\n     * Run the migrations.\n     */\n    public function up()\n    {\n        Schema::table('users', function ($table) {\n            if (!Schema::hasColumn('users', 'avatar')) {\n                $table->string('avatar')->nullable()->after('email')->default('users/default.png');\n            }\n            $table->bigInteger('role_id')->nullable()->after('id');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     */\n    public function down()\n    {\n        if (Schema::hasColumn('users', 'avatar')) {\n            Schema::table('users', function ($table) {\n                $table->dropColumn('avatar');\n            });\n        }\n        if (Schema::hasColumn('users', 'role_id')) {\n            Schema::table('users', function ($table) {\n                $table->dropColumn('role_id');\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "migrations/2016_01_01_000000_create_data_types_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateDataTypesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        // Create table for storing roles\n        Schema::create('data_types', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name')->unique();\n            $table->string('slug')->unique();\n            $table->string('display_name_singular');\n            $table->string('display_name_plural');\n            $table->string('icon')->nullable();\n            $table->string('model_name')->nullable();\n            $table->string('description')->nullable();\n            $table->boolean('generate_permissions')->default(false);\n            $table->timestamps();\n        });\n\n        // Create table for storing roles\n        Schema::create('data_rows', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('data_type_id')->unsigned();\n            $table->string('field');\n            $table->string('type');\n            $table->string('display_name');\n            $table->boolean('required')->default(false);\n            $table->boolean('browse')->default(true);\n            $table->boolean('read')->default(true);\n            $table->boolean('edit')->default(true);\n            $table->boolean('add')->default(true);\n            $table->boolean('delete')->default(true);\n            $table->text('details')->nullable();\n\n            $table->foreign('data_type_id')->references('id')->on('data_types')\n                ->onUpdate('cascade')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('data_rows');\n        Schema::drop('data_types');\n    }\n}\n"
  },
  {
    "path": "migrations/2016_05_19_173453_create_menu_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateMenuTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('menus', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name')->unique();\n            $table->timestamps();\n        });\n\n        Schema::create('menu_items', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('menu_id')->nullable();\n            $table->string('title');\n            $table->string('url');\n            $table->string('target')->default('_self');\n            $table->string('icon_class')->nullable();\n            $table->string('color')->nullable();\n            $table->integer('parent_id')->nullable();\n            $table->integer('order');\n            $table->timestamps();\n        });\n\n        Schema::table('menu_items', function (Blueprint $table) {\n            $table->foreign('menu_id')->references('id')->on('menus')->onDelete('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('menu_items');\n        Schema::drop('menus');\n    }\n}\n"
  },
  {
    "path": "migrations/2016_10_21_190000_create_roles_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateRolesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('roles', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('name')->unique();\n            $table->string('display_name');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('roles');\n    }\n}\n"
  },
  {
    "path": "migrations/2016_10_21_190000_create_settings_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateSettingsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('settings', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('key')->unique();\n            $table->string('display_name');\n            $table->text('value');\n            $table->text('details')->nullable()->default(null);\n            $table->string('type');\n            $table->integer('order')->default('1');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('settings');\n    }\n}\n"
  },
  {
    "path": "migrations/2016_11_30_135954_create_permission_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreatePermissionTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('permissions', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('key')->index();\n            $table->string('table_name');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('permissions');\n    }\n}\n"
  },
  {
    "path": "migrations/2016_11_30_141208_create_permission_role_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreatePermissionRoleTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('permission_role', function (Blueprint $table) {\n            $table->bigInteger('permission_id')->unsigned()->index();\n            $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');\n            $table->bigInteger('role_id')->unsigned()->index();\n            $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');\n            $table->primary(['permission_id', 'role_id']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('permission_role');\n    }\n}\n"
  },
  {
    "path": "migrations/2016_12_26_201236_data_types__add__server_side.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass DataTypesAddServerSide extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('data_types', function (Blueprint $table) {\n            $table->tinyInteger('server_side')->default(0)->after('generate_permissions');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('data_types', function (Blueprint $table) {\n            $table->dropColumn('server_side');\n        });\n    }\n}\n"
  },
  {
    "path": "migrations/2017_01_13_000000_add_route_to_menu_items_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddRouteToMenuItemsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('menu_items', function (Blueprint $table) {\n            $table->string('route')->nullable()->default(null);\n            $table->text('parameters')->nullable()->default(null);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        if (Schema::hasColumn('menu_items', 'route')) {\n            Schema::table('menu_items', function (Blueprint $table) {\n                $table->dropColumn('route');\n            });\n        }\n\n        if (Schema::hasColumn('menu_items', 'parameters')) {\n            Schema::table('menu_items', function (Blueprint $table) {\n                $table->dropColumn('parameters');\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "migrations/2017_01_14_005015_create_translations_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateTranslationsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('translations', function (Blueprint $table) {\n            $table->increments('id');\n\n            $table->string('table_name');\n            $table->string('column_name');\n            $table->integer('foreign_key')->unsigned();\n            $table->string('locale');\n\n            $table->text('value');\n\n            $table->unique(['table_name', 'column_name', 'foreign_key', 'locale']);\n\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('translations');\n    }\n}\n"
  },
  {
    "path": "migrations/2017_01_15_000000_make_table_name_nullable_in_permissions_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass MakeTableNameNullableInPermissionsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('permissions', function (Blueprint $table) {\n            $table->string('table_name')->nullable()->default(null)->change();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "migrations/2017_03_06_000000_add_controller_to_data_types_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddControllerToDataTypesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('data_types', function (Blueprint $table) {\n            $table->string('controller')->nullable()->after('model_name');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('data_types', function (Blueprint $table) {\n            $table->dropColumn('controller');\n        });\n    }\n}\n"
  },
  {
    "path": "migrations/2017_04_21_000000_add_order_to_data_rows_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddOrderToDataRowsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('data_rows', function (Blueprint $table) {\n            $table->integer('order')->default(1)->after('details');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('data_rows', function (Blueprint $table) {\n            $table->dropColumn('order');\n        });\n    }\n}\n"
  },
  {
    "path": "migrations/2017_07_05_210000_add_policyname_to_data_types_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass AddPolicyNameToDataTypesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('data_types', function (Blueprint $table) {\n            $table->string('policy_name')->nullable()->after('model_name');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('data_types', function (Blueprint $table) {\n            $table->dropColumn('policy_name');\n        });\n    }\n}\n"
  },
  {
    "path": "migrations/2017_08_05_000000_add_group_to_settings_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddGroupToSettingsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('settings', function (Blueprint $table) {\n            $table->string('group')->nullable()->after('order');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('settings', function (Blueprint $table) {\n            $table->dropColumn('group');\n        });\n    }\n}\n"
  },
  {
    "path": "migrations/2017_11_26_013050_add_user_role_relationship.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddUserRoleRelationship extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->bigInteger('role_id')->unsigned()->change();\n            $table->foreign('role_id')->references('id')->on('roles');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->dropForeign(['role_id']);\n        });\n\n        Schema::table('users', function (Blueprint $table) {\n            $table->bigInteger('role_id')->change();\n        });\n    }\n}\n"
  },
  {
    "path": "migrations/2017_11_26_015000_create_user_roles_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateUserRolesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('user_roles', function (Blueprint $table) {\n            $type = DB::connection()->getDoctrineColumn(DB::getTablePrefix().'users', 'id')->getType()->getName();\n            if ($type == 'bigint') {\n                $table->bigInteger('user_id')->unsigned()->index();\n            } else {\n                $table->integer('user_id')->unsigned()->index();\n            }\n\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');\n            $table->bigInteger('role_id')->unsigned()->index();\n            $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');\n            $table->primary(['user_id', 'role_id']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('user_roles');\n    }\n}\n"
  },
  {
    "path": "migrations/2018_03_11_000000_add_user_settings.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddUserSettings extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->text('settings')->nullable()->default(null)->after('remember_token');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->dropColumn('settings');\n        });\n    }\n}\n"
  },
  {
    "path": "migrations/2018_03_14_000000_add_details_to_data_types_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddDetailsToDatatypesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('data_types', function (Blueprint $table) {\n            $table->text('details')->nullable()->after('server_side');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('data_types', function (Blueprint $table) {\n            $table->dropColumn('details');\n        });\n    }\n}\n"
  },
  {
    "path": "migrations/2018_03_16_000000_make_settings_value_nullable.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass MakeSettingsValueNullable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('settings', function (Blueprint $table) {\n            $table->text('value')->nullable()->change();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        DB::table('settings')->whereNull('value')->update(['value' => '']);\n\n        Schema::table('settings', function (Blueprint $table) {\n            $table->text('value')->nullable(false)->change();\n        });\n    }\n}\n"
  },
  {
    "path": "mix-manifest.json",
    "content": "{\n    \"/publishable/assets/js/app.js\": \"/publishable/assets/js/app.js\",\n    \"/publishable/assets/css/app.css\": \"/publishable/assets/css/app.css\",\n    \"/publishable/assets/js/skins/content/dark/content.css\": \"/publishable/assets/js/skins/content/dark/content.css\",\n    \"/publishable/assets/js/skins/content/dark/content.min.css\": \"/publishable/assets/js/skins/content/dark/content.min.css\",\n    \"/publishable/assets/js/skins/content/default/content.css\": \"/publishable/assets/js/skins/content/default/content.css\",\n    \"/publishable/assets/js/skins/content/default/content.min.css\": \"/publishable/assets/js/skins/content/default/content.min.css\",\n    \"/publishable/assets/js/skins/content/document/content.css\": \"/publishable/assets/js/skins/content/document/content.css\",\n    \"/publishable/assets/js/skins/content/document/content.min.css\": \"/publishable/assets/js/skins/content/document/content.min.css\",\n    \"/publishable/assets/js/skins/content/tinymce-5/content.css\": \"/publishable/assets/js/skins/content/tinymce-5/content.css\",\n    \"/publishable/assets/js/skins/content/tinymce-5/content.min.css\": \"/publishable/assets/js/skins/content/tinymce-5/content.min.css\",\n    \"/publishable/assets/js/skins/content/tinymce-5-dark/content.css\": \"/publishable/assets/js/skins/content/tinymce-5-dark/content.css\",\n    \"/publishable/assets/js/skins/content/tinymce-5-dark/content.min.css\": \"/publishable/assets/js/skins/content/tinymce-5-dark/content.min.css\",\n    \"/publishable/assets/js/skins/content/writer/content.css\": \"/publishable/assets/js/skins/content/writer/content.css\",\n    \"/publishable/assets/js/skins/content/writer/content.min.css\": \"/publishable/assets/js/skins/content/writer/content.min.css\",\n    \"/publishable/assets/js/skins/ui/oxide/content.css\": \"/publishable/assets/js/skins/ui/oxide/content.css\",\n    \"/publishable/assets/js/skins/ui/oxide/content.inline.css\": \"/publishable/assets/js/skins/ui/oxide/content.inline.css\",\n    \"/publishable/assets/js/skins/ui/oxide/content.inline.min.css\": \"/publishable/assets/js/skins/ui/oxide/content.inline.min.css\",\n    \"/publishable/assets/js/skins/ui/oxide/content.min.css\": \"/publishable/assets/js/skins/ui/oxide/content.min.css\",\n    \"/publishable/assets/js/skins/ui/oxide/content.mobile.css\": \"/publishable/assets/js/skins/ui/oxide/content.mobile.css\",\n    \"/publishable/assets/js/skins/ui/oxide/content.mobile.min.css\": \"/publishable/assets/js/skins/ui/oxide/content.mobile.min.css\",\n    \"/publishable/assets/js/skins/ui/oxide/fonts/tinymce-mobile.woff\": \"/publishable/assets/js/skins/ui/oxide/fonts/tinymce-mobile.woff\",\n    \"/publishable/assets/js/skins/ui/oxide/skin.css\": \"/publishable/assets/js/skins/ui/oxide/skin.css\",\n    \"/publishable/assets/js/skins/ui/oxide/skin.min.css\": \"/publishable/assets/js/skins/ui/oxide/skin.min.css\",\n    \"/publishable/assets/js/skins/ui/oxide/skin.mobile.css\": \"/publishable/assets/js/skins/ui/oxide/skin.mobile.css\",\n    \"/publishable/assets/js/skins/ui/oxide/skin.mobile.min.css\": \"/publishable/assets/js/skins/ui/oxide/skin.mobile.min.css\",\n    \"/publishable/assets/js/skins/ui/oxide/skin.shadowdom.css\": \"/publishable/assets/js/skins/ui/oxide/skin.shadowdom.css\",\n    \"/publishable/assets/js/skins/ui/oxide/skin.shadowdom.min.css\": \"/publishable/assets/js/skins/ui/oxide/skin.shadowdom.min.css\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/content.css\": \"/publishable/assets/js/skins/ui/oxide-dark/content.css\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/content.inline.css\": \"/publishable/assets/js/skins/ui/oxide-dark/content.inline.css\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/content.inline.min.css\": \"/publishable/assets/js/skins/ui/oxide-dark/content.inline.min.css\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/content.min.css\": \"/publishable/assets/js/skins/ui/oxide-dark/content.min.css\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/content.mobile.css\": \"/publishable/assets/js/skins/ui/oxide-dark/content.mobile.css\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/content.mobile.min.css\": \"/publishable/assets/js/skins/ui/oxide-dark/content.mobile.min.css\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/fonts/tinymce-mobile.woff\": \"/publishable/assets/js/skins/ui/oxide-dark/fonts/tinymce-mobile.woff\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/skin.css\": \"/publishable/assets/js/skins/ui/oxide-dark/skin.css\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/skin.min.css\": \"/publishable/assets/js/skins/ui/oxide-dark/skin.min.css\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/skin.mobile.css\": \"/publishable/assets/js/skins/ui/oxide-dark/skin.mobile.css\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/skin.mobile.min.css\": \"/publishable/assets/js/skins/ui/oxide-dark/skin.mobile.min.css\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/skin.shadowdom.css\": \"/publishable/assets/js/skins/ui/oxide-dark/skin.shadowdom.css\",\n    \"/publishable/assets/js/skins/ui/oxide-dark/skin.shadowdom.min.css\": \"/publishable/assets/js/skins/ui/oxide-dark/skin.shadowdom.min.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5/content.css\": \"/publishable/assets/js/skins/ui/tinymce-5/content.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5/content.inline.css\": \"/publishable/assets/js/skins/ui/tinymce-5/content.inline.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5/content.inline.min.css\": \"/publishable/assets/js/skins/ui/tinymce-5/content.inline.min.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5/content.min.css\": \"/publishable/assets/js/skins/ui/tinymce-5/content.min.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5/skin.css\": \"/publishable/assets/js/skins/ui/tinymce-5/skin.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5/skin.min.css\": \"/publishable/assets/js/skins/ui/tinymce-5/skin.min.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5/skin.shadowdom.css\": \"/publishable/assets/js/skins/ui/tinymce-5/skin.shadowdom.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5/skin.shadowdom.min.css\": \"/publishable/assets/js/skins/ui/tinymce-5/skin.shadowdom.min.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5-dark/content.css\": \"/publishable/assets/js/skins/ui/tinymce-5-dark/content.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5-dark/content.inline.css\": \"/publishable/assets/js/skins/ui/tinymce-5-dark/content.inline.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5-dark/content.inline.min.css\": \"/publishable/assets/js/skins/ui/tinymce-5-dark/content.inline.min.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5-dark/content.min.css\": \"/publishable/assets/js/skins/ui/tinymce-5-dark/content.min.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5-dark/skin.css\": \"/publishable/assets/js/skins/ui/tinymce-5-dark/skin.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5-dark/skin.min.css\": \"/publishable/assets/js/skins/ui/tinymce-5-dark/skin.min.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5-dark/skin.shadowdom.css\": \"/publishable/assets/js/skins/ui/tinymce-5-dark/skin.shadowdom.css\",\n    \"/publishable/assets/js/skins/ui/tinymce-5-dark/skin.shadowdom.min.css\": \"/publishable/assets/js/skins/ui/tinymce-5-dark/skin.shadowdom.min.css\",\n    \"/publishable/assets/js/skins/voyager/Variables.less\": \"/publishable/assets/js/skins/voyager/Variables.less\",\n    \"/publishable/assets/js/skins/voyager/content.inline.min.css\": \"/publishable/assets/js/skins/voyager/content.inline.min.css\",\n    \"/publishable/assets/js/skins/voyager/content.min.css\": \"/publishable/assets/js/skins/voyager/content.min.css\",\n    \"/publishable/assets/js/skins/voyager/fonts/readme.md\": \"/publishable/assets/js/skins/voyager/fonts/readme.md\",\n    \"/publishable/assets/js/skins/voyager/fonts/tinymce-small.eot\": \"/publishable/assets/js/skins/voyager/fonts/tinymce-small.eot\",\n    \"/publishable/assets/js/skins/voyager/fonts/tinymce-small.json\": \"/publishable/assets/js/skins/voyager/fonts/tinymce-small.json\",\n    \"/publishable/assets/js/skins/voyager/fonts/tinymce-small.svg\": \"/publishable/assets/js/skins/voyager/fonts/tinymce-small.svg\",\n    \"/publishable/assets/js/skins/voyager/fonts/tinymce-small.ttf\": \"/publishable/assets/js/skins/voyager/fonts/tinymce-small.ttf\",\n    \"/publishable/assets/js/skins/voyager/fonts/tinymce-small.woff\": \"/publishable/assets/js/skins/voyager/fonts/tinymce-small.woff\",\n    \"/publishable/assets/js/skins/voyager/fonts/tinymce.eot\": \"/publishable/assets/js/skins/voyager/fonts/tinymce.eot\",\n    \"/publishable/assets/js/skins/voyager/fonts/tinymce.json\": \"/publishable/assets/js/skins/voyager/fonts/tinymce.json\",\n    \"/publishable/assets/js/skins/voyager/fonts/tinymce.svg\": \"/publishable/assets/js/skins/voyager/fonts/tinymce.svg\",\n    \"/publishable/assets/js/skins/voyager/fonts/tinymce.ttf\": \"/publishable/assets/js/skins/voyager/fonts/tinymce.ttf\",\n    \"/publishable/assets/js/skins/voyager/fonts/tinymce.woff\": \"/publishable/assets/js/skins/voyager/fonts/tinymce.woff\",\n    \"/publishable/assets/js/skins/voyager/img/anchor.gif\": \"/publishable/assets/js/skins/voyager/img/anchor.gif\",\n    \"/publishable/assets/js/skins/voyager/img/loader.gif\": \"/publishable/assets/js/skins/voyager/img/loader.gif\",\n    \"/publishable/assets/js/skins/voyager/img/object.gif\": \"/publishable/assets/js/skins/voyager/img/object.gif\",\n    \"/publishable/assets/js/skins/voyager/img/trans.gif\": \"/publishable/assets/js/skins/voyager/img/trans.gif\",\n    \"/publishable/assets/js/skins/voyager/skin.ie7.min.css\": \"/publishable/assets/js/skins/voyager/skin.ie7.min.css\",\n    \"/publishable/assets/js/skins/voyager/skin.json\": \"/publishable/assets/js/skins/voyager/skin.json\",\n    \"/publishable/assets/js/skins/voyager/skin.min.css\": \"/publishable/assets/js/skins/voyager/skin.min.css\",\n    \"/publishable/assets/js/themes/silver/index.js\": \"/publishable/assets/js/themes/silver/index.js\",\n    \"/publishable/assets/js/themes/silver/theme.js\": \"/publishable/assets/js/themes/silver/theme.js\",\n    \"/publishable/assets/js/themes/silver/theme.min.js\": \"/publishable/assets/js/themes/silver/theme.min.js\",\n    \"/publishable/assets/js/models/dom/index.js\": \"/publishable/assets/js/models/dom/index.js\",\n    \"/publishable/assets/js/models/dom/model.js\": \"/publishable/assets/js/models/dom/model.js\",\n    \"/publishable/assets/js/models/dom/model.min.js\": \"/publishable/assets/js/models/dom/model.min.js\",\n    \"/publishable/assets/js/icons/default/icons.js\": \"/publishable/assets/js/icons/default/icons.js\",\n    \"/publishable/assets/js/icons/default/icons.min.js\": \"/publishable/assets/js/icons/default/icons.min.js\",\n    \"/publishable/assets/js/icons/default/index.js\": \"/publishable/assets/js/icons/default/index.js\",\n    \"/publishable/assets/js/ace/libs/ace.js\": \"/publishable/assets/js/ace/libs/ace.js\",\n    \"/publishable/assets/js/ace/libs/ext-beautify.js\": \"/publishable/assets/js/ace/libs/ext-beautify.js\",\n    \"/publishable/assets/js/ace/libs/ext-code_lens.js\": \"/publishable/assets/js/ace/libs/ext-code_lens.js\",\n    \"/publishable/assets/js/ace/libs/ext-elastic_tabstops_lite.js\": \"/publishable/assets/js/ace/libs/ext-elastic_tabstops_lite.js\",\n    \"/publishable/assets/js/ace/libs/ext-emmet.js\": \"/publishable/assets/js/ace/libs/ext-emmet.js\",\n    \"/publishable/assets/js/ace/libs/ext-error_marker.js\": \"/publishable/assets/js/ace/libs/ext-error_marker.js\",\n    \"/publishable/assets/js/ace/libs/ext-hardwrap.js\": \"/publishable/assets/js/ace/libs/ext-hardwrap.js\",\n    \"/publishable/assets/js/ace/libs/ext-keybinding_menu.js\": \"/publishable/assets/js/ace/libs/ext-keybinding_menu.js\",\n    \"/publishable/assets/js/ace/libs/ext-language_tools.js\": \"/publishable/assets/js/ace/libs/ext-language_tools.js\",\n    \"/publishable/assets/js/ace/libs/ext-linking.js\": \"/publishable/assets/js/ace/libs/ext-linking.js\",\n    \"/publishable/assets/js/ace/libs/ext-modelist.js\": \"/publishable/assets/js/ace/libs/ext-modelist.js\",\n    \"/publishable/assets/js/ace/libs/ext-options.js\": \"/publishable/assets/js/ace/libs/ext-options.js\",\n    \"/publishable/assets/js/ace/libs/ext-prompt.js\": \"/publishable/assets/js/ace/libs/ext-prompt.js\",\n    \"/publishable/assets/js/ace/libs/ext-rtl.js\": \"/publishable/assets/js/ace/libs/ext-rtl.js\",\n    \"/publishable/assets/js/ace/libs/ext-searchbox.js\": \"/publishable/assets/js/ace/libs/ext-searchbox.js\",\n    \"/publishable/assets/js/ace/libs/ext-settings_menu.js\": \"/publishable/assets/js/ace/libs/ext-settings_menu.js\",\n    \"/publishable/assets/js/ace/libs/ext-spellcheck.js\": \"/publishable/assets/js/ace/libs/ext-spellcheck.js\",\n    \"/publishable/assets/js/ace/libs/ext-split.js\": \"/publishable/assets/js/ace/libs/ext-split.js\",\n    \"/publishable/assets/js/ace/libs/ext-static_highlight.js\": \"/publishable/assets/js/ace/libs/ext-static_highlight.js\",\n    \"/publishable/assets/js/ace/libs/ext-statusbar.js\": \"/publishable/assets/js/ace/libs/ext-statusbar.js\",\n    \"/publishable/assets/js/ace/libs/ext-textarea.js\": \"/publishable/assets/js/ace/libs/ext-textarea.js\",\n    \"/publishable/assets/js/ace/libs/ext-themelist.js\": \"/publishable/assets/js/ace/libs/ext-themelist.js\",\n    \"/publishable/assets/js/ace/libs/ext-whitespace.js\": \"/publishable/assets/js/ace/libs/ext-whitespace.js\",\n    \"/publishable/assets/js/ace/libs/keybinding-emacs.js\": \"/publishable/assets/js/ace/libs/keybinding-emacs.js\",\n    \"/publishable/assets/js/ace/libs/keybinding-sublime.js\": \"/publishable/assets/js/ace/libs/keybinding-sublime.js\",\n    \"/publishable/assets/js/ace/libs/keybinding-vim.js\": \"/publishable/assets/js/ace/libs/keybinding-vim.js\",\n    \"/publishable/assets/js/ace/libs/keybinding-vscode.js\": \"/publishable/assets/js/ace/libs/keybinding-vscode.js\",\n    \"/publishable/assets/js/ace/libs/mode-abap.js\": \"/publishable/assets/js/ace/libs/mode-abap.js\",\n    \"/publishable/assets/js/ace/libs/mode-abc.js\": \"/publishable/assets/js/ace/libs/mode-abc.js\",\n    \"/publishable/assets/js/ace/libs/mode-actionscript.js\": \"/publishable/assets/js/ace/libs/mode-actionscript.js\",\n    \"/publishable/assets/js/ace/libs/mode-ada.js\": \"/publishable/assets/js/ace/libs/mode-ada.js\",\n    \"/publishable/assets/js/ace/libs/mode-alda.js\": \"/publishable/assets/js/ace/libs/mode-alda.js\",\n    \"/publishable/assets/js/ace/libs/mode-apache_conf.js\": \"/publishable/assets/js/ace/libs/mode-apache_conf.js\",\n    \"/publishable/assets/js/ace/libs/mode-apex.js\": \"/publishable/assets/js/ace/libs/mode-apex.js\",\n    \"/publishable/assets/js/ace/libs/mode-applescript.js\": \"/publishable/assets/js/ace/libs/mode-applescript.js\",\n    \"/publishable/assets/js/ace/libs/mode-aql.js\": \"/publishable/assets/js/ace/libs/mode-aql.js\",\n    \"/publishable/assets/js/ace/libs/mode-asciidoc.js\": \"/publishable/assets/js/ace/libs/mode-asciidoc.js\",\n    \"/publishable/assets/js/ace/libs/mode-asl.js\": \"/publishable/assets/js/ace/libs/mode-asl.js\",\n    \"/publishable/assets/js/ace/libs/mode-assembly_x86.js\": \"/publishable/assets/js/ace/libs/mode-assembly_x86.js\",\n    \"/publishable/assets/js/ace/libs/mode-autohotkey.js\": \"/publishable/assets/js/ace/libs/mode-autohotkey.js\",\n    \"/publishable/assets/js/ace/libs/mode-batchfile.js\": \"/publishable/assets/js/ace/libs/mode-batchfile.js\",\n    \"/publishable/assets/js/ace/libs/mode-bibtex.js\": \"/publishable/assets/js/ace/libs/mode-bibtex.js\",\n    \"/publishable/assets/js/ace/libs/mode-c9search.js\": \"/publishable/assets/js/ace/libs/mode-c9search.js\",\n    \"/publishable/assets/js/ace/libs/mode-c_cpp.js\": \"/publishable/assets/js/ace/libs/mode-c_cpp.js\",\n    \"/publishable/assets/js/ace/libs/mode-cirru.js\": \"/publishable/assets/js/ace/libs/mode-cirru.js\",\n    \"/publishable/assets/js/ace/libs/mode-clojure.js\": \"/publishable/assets/js/ace/libs/mode-clojure.js\",\n    \"/publishable/assets/js/ace/libs/mode-cobol.js\": \"/publishable/assets/js/ace/libs/mode-cobol.js\",\n    \"/publishable/assets/js/ace/libs/mode-coffee.js\": \"/publishable/assets/js/ace/libs/mode-coffee.js\",\n    \"/publishable/assets/js/ace/libs/mode-coldfusion.js\": \"/publishable/assets/js/ace/libs/mode-coldfusion.js\",\n    \"/publishable/assets/js/ace/libs/mode-crystal.js\": \"/publishable/assets/js/ace/libs/mode-crystal.js\",\n    \"/publishable/assets/js/ace/libs/mode-csharp.js\": \"/publishable/assets/js/ace/libs/mode-csharp.js\",\n    \"/publishable/assets/js/ace/libs/mode-csound_document.js\": \"/publishable/assets/js/ace/libs/mode-csound_document.js\",\n    \"/publishable/assets/js/ace/libs/mode-csound_orchestra.js\": \"/publishable/assets/js/ace/libs/mode-csound_orchestra.js\",\n    \"/publishable/assets/js/ace/libs/mode-csound_score.js\": \"/publishable/assets/js/ace/libs/mode-csound_score.js\",\n    \"/publishable/assets/js/ace/libs/mode-csp.js\": \"/publishable/assets/js/ace/libs/mode-csp.js\",\n    \"/publishable/assets/js/ace/libs/mode-css.js\": \"/publishable/assets/js/ace/libs/mode-css.js\",\n    \"/publishable/assets/js/ace/libs/mode-curly.js\": \"/publishable/assets/js/ace/libs/mode-curly.js\",\n    \"/publishable/assets/js/ace/libs/mode-d.js\": \"/publishable/assets/js/ace/libs/mode-d.js\",\n    \"/publishable/assets/js/ace/libs/mode-dart.js\": \"/publishable/assets/js/ace/libs/mode-dart.js\",\n    \"/publishable/assets/js/ace/libs/mode-diff.js\": \"/publishable/assets/js/ace/libs/mode-diff.js\",\n    \"/publishable/assets/js/ace/libs/mode-django.js\": \"/publishable/assets/js/ace/libs/mode-django.js\",\n    \"/publishable/assets/js/ace/libs/mode-dockerfile.js\": \"/publishable/assets/js/ace/libs/mode-dockerfile.js\",\n    \"/publishable/assets/js/ace/libs/mode-dot.js\": \"/publishable/assets/js/ace/libs/mode-dot.js\",\n    \"/publishable/assets/js/ace/libs/mode-drools.js\": \"/publishable/assets/js/ace/libs/mode-drools.js\",\n    \"/publishable/assets/js/ace/libs/mode-edifact.js\": \"/publishable/assets/js/ace/libs/mode-edifact.js\",\n    \"/publishable/assets/js/ace/libs/mode-eiffel.js\": \"/publishable/assets/js/ace/libs/mode-eiffel.js\",\n    \"/publishable/assets/js/ace/libs/mode-ejs.js\": \"/publishable/assets/js/ace/libs/mode-ejs.js\",\n    \"/publishable/assets/js/ace/libs/mode-elixir.js\": \"/publishable/assets/js/ace/libs/mode-elixir.js\",\n    \"/publishable/assets/js/ace/libs/mode-elm.js\": \"/publishable/assets/js/ace/libs/mode-elm.js\",\n    \"/publishable/assets/js/ace/libs/mode-erlang.js\": \"/publishable/assets/js/ace/libs/mode-erlang.js\",\n    \"/publishable/assets/js/ace/libs/mode-forth.js\": \"/publishable/assets/js/ace/libs/mode-forth.js\",\n    \"/publishable/assets/js/ace/libs/mode-fortran.js\": \"/publishable/assets/js/ace/libs/mode-fortran.js\",\n    \"/publishable/assets/js/ace/libs/mode-fsharp.js\": \"/publishable/assets/js/ace/libs/mode-fsharp.js\",\n    \"/publishable/assets/js/ace/libs/mode-fsl.js\": \"/publishable/assets/js/ace/libs/mode-fsl.js\",\n    \"/publishable/assets/js/ace/libs/mode-ftl.js\": \"/publishable/assets/js/ace/libs/mode-ftl.js\",\n    \"/publishable/assets/js/ace/libs/mode-gcode.js\": \"/publishable/assets/js/ace/libs/mode-gcode.js\",\n    \"/publishable/assets/js/ace/libs/mode-gherkin.js\": \"/publishable/assets/js/ace/libs/mode-gherkin.js\",\n    \"/publishable/assets/js/ace/libs/mode-gitignore.js\": \"/publishable/assets/js/ace/libs/mode-gitignore.js\",\n    \"/publishable/assets/js/ace/libs/mode-glsl.js\": \"/publishable/assets/js/ace/libs/mode-glsl.js\",\n    \"/publishable/assets/js/ace/libs/mode-gobstones.js\": \"/publishable/assets/js/ace/libs/mode-gobstones.js\",\n    \"/publishable/assets/js/ace/libs/mode-golang.js\": \"/publishable/assets/js/ace/libs/mode-golang.js\",\n    \"/publishable/assets/js/ace/libs/mode-graphqlschema.js\": \"/publishable/assets/js/ace/libs/mode-graphqlschema.js\",\n    \"/publishable/assets/js/ace/libs/mode-groovy.js\": \"/publishable/assets/js/ace/libs/mode-groovy.js\",\n    \"/publishable/assets/js/ace/libs/mode-haml.js\": \"/publishable/assets/js/ace/libs/mode-haml.js\",\n    \"/publishable/assets/js/ace/libs/mode-handlebars.js\": \"/publishable/assets/js/ace/libs/mode-handlebars.js\",\n    \"/publishable/assets/js/ace/libs/mode-haskell.js\": \"/publishable/assets/js/ace/libs/mode-haskell.js\",\n    \"/publishable/assets/js/ace/libs/mode-haskell_cabal.js\": \"/publishable/assets/js/ace/libs/mode-haskell_cabal.js\",\n    \"/publishable/assets/js/ace/libs/mode-haxe.js\": \"/publishable/assets/js/ace/libs/mode-haxe.js\",\n    \"/publishable/assets/js/ace/libs/mode-hjson.js\": \"/publishable/assets/js/ace/libs/mode-hjson.js\",\n    \"/publishable/assets/js/ace/libs/mode-html.js\": \"/publishable/assets/js/ace/libs/mode-html.js\",\n    \"/publishable/assets/js/ace/libs/mode-html_elixir.js\": \"/publishable/assets/js/ace/libs/mode-html_elixir.js\",\n    \"/publishable/assets/js/ace/libs/mode-html_ruby.js\": \"/publishable/assets/js/ace/libs/mode-html_ruby.js\",\n    \"/publishable/assets/js/ace/libs/mode-ini.js\": \"/publishable/assets/js/ace/libs/mode-ini.js\",\n    \"/publishable/assets/js/ace/libs/mode-io.js\": \"/publishable/assets/js/ace/libs/mode-io.js\",\n    \"/publishable/assets/js/ace/libs/mode-ion.js\": \"/publishable/assets/js/ace/libs/mode-ion.js\",\n    \"/publishable/assets/js/ace/libs/mode-jack.js\": \"/publishable/assets/js/ace/libs/mode-jack.js\",\n    \"/publishable/assets/js/ace/libs/mode-jade.js\": \"/publishable/assets/js/ace/libs/mode-jade.js\",\n    \"/publishable/assets/js/ace/libs/mode-java.js\": \"/publishable/assets/js/ace/libs/mode-java.js\",\n    \"/publishable/assets/js/ace/libs/mode-javascript.js\": \"/publishable/assets/js/ace/libs/mode-javascript.js\",\n    \"/publishable/assets/js/ace/libs/mode-json.js\": \"/publishable/assets/js/ace/libs/mode-json.js\",\n    \"/publishable/assets/js/ace/libs/mode-json5.js\": \"/publishable/assets/js/ace/libs/mode-json5.js\",\n    \"/publishable/assets/js/ace/libs/mode-jsoniq.js\": \"/publishable/assets/js/ace/libs/mode-jsoniq.js\",\n    \"/publishable/assets/js/ace/libs/mode-jsp.js\": \"/publishable/assets/js/ace/libs/mode-jsp.js\",\n    \"/publishable/assets/js/ace/libs/mode-jssm.js\": \"/publishable/assets/js/ace/libs/mode-jssm.js\",\n    \"/publishable/assets/js/ace/libs/mode-jsx.js\": \"/publishable/assets/js/ace/libs/mode-jsx.js\",\n    \"/publishable/assets/js/ace/libs/mode-julia.js\": \"/publishable/assets/js/ace/libs/mode-julia.js\",\n    \"/publishable/assets/js/ace/libs/mode-kotlin.js\": \"/publishable/assets/js/ace/libs/mode-kotlin.js\",\n    \"/publishable/assets/js/ace/libs/mode-latex.js\": \"/publishable/assets/js/ace/libs/mode-latex.js\",\n    \"/publishable/assets/js/ace/libs/mode-latte.js\": \"/publishable/assets/js/ace/libs/mode-latte.js\",\n    \"/publishable/assets/js/ace/libs/mode-less.js\": \"/publishable/assets/js/ace/libs/mode-less.js\",\n    \"/publishable/assets/js/ace/libs/mode-liquid.js\": \"/publishable/assets/js/ace/libs/mode-liquid.js\",\n    \"/publishable/assets/js/ace/libs/mode-lisp.js\": \"/publishable/assets/js/ace/libs/mode-lisp.js\",\n    \"/publishable/assets/js/ace/libs/mode-livescript.js\": \"/publishable/assets/js/ace/libs/mode-livescript.js\",\n    \"/publishable/assets/js/ace/libs/mode-logiql.js\": \"/publishable/assets/js/ace/libs/mode-logiql.js\",\n    \"/publishable/assets/js/ace/libs/mode-logtalk.js\": \"/publishable/assets/js/ace/libs/mode-logtalk.js\",\n    \"/publishable/assets/js/ace/libs/mode-lsl.js\": \"/publishable/assets/js/ace/libs/mode-lsl.js\",\n    \"/publishable/assets/js/ace/libs/mode-lua.js\": \"/publishable/assets/js/ace/libs/mode-lua.js\",\n    \"/publishable/assets/js/ace/libs/mode-luapage.js\": \"/publishable/assets/js/ace/libs/mode-luapage.js\",\n    \"/publishable/assets/js/ace/libs/mode-lucene.js\": \"/publishable/assets/js/ace/libs/mode-lucene.js\",\n    \"/publishable/assets/js/ace/libs/mode-makefile.js\": \"/publishable/assets/js/ace/libs/mode-makefile.js\",\n    \"/publishable/assets/js/ace/libs/mode-markdown.js\": \"/publishable/assets/js/ace/libs/mode-markdown.js\",\n    \"/publishable/assets/js/ace/libs/mode-mask.js\": \"/publishable/assets/js/ace/libs/mode-mask.js\",\n    \"/publishable/assets/js/ace/libs/mode-matlab.js\": \"/publishable/assets/js/ace/libs/mode-matlab.js\",\n    \"/publishable/assets/js/ace/libs/mode-maze.js\": \"/publishable/assets/js/ace/libs/mode-maze.js\",\n    \"/publishable/assets/js/ace/libs/mode-mediawiki.js\": \"/publishable/assets/js/ace/libs/mode-mediawiki.js\",\n    \"/publishable/assets/js/ace/libs/mode-mel.js\": \"/publishable/assets/js/ace/libs/mode-mel.js\",\n    \"/publishable/assets/js/ace/libs/mode-mips.js\": \"/publishable/assets/js/ace/libs/mode-mips.js\",\n    \"/publishable/assets/js/ace/libs/mode-mixal.js\": \"/publishable/assets/js/ace/libs/mode-mixal.js\",\n    \"/publishable/assets/js/ace/libs/mode-mushcode.js\": \"/publishable/assets/js/ace/libs/mode-mushcode.js\",\n    \"/publishable/assets/js/ace/libs/mode-mysql.js\": \"/publishable/assets/js/ace/libs/mode-mysql.js\",\n    \"/publishable/assets/js/ace/libs/mode-nginx.js\": \"/publishable/assets/js/ace/libs/mode-nginx.js\",\n    \"/publishable/assets/js/ace/libs/mode-nim.js\": \"/publishable/assets/js/ace/libs/mode-nim.js\",\n    \"/publishable/assets/js/ace/libs/mode-nix.js\": \"/publishable/assets/js/ace/libs/mode-nix.js\",\n    \"/publishable/assets/js/ace/libs/mode-nsis.js\": \"/publishable/assets/js/ace/libs/mode-nsis.js\",\n    \"/publishable/assets/js/ace/libs/mode-nunjucks.js\": \"/publishable/assets/js/ace/libs/mode-nunjucks.js\",\n    \"/publishable/assets/js/ace/libs/mode-objectivec.js\": \"/publishable/assets/js/ace/libs/mode-objectivec.js\",\n    \"/publishable/assets/js/ace/libs/mode-ocaml.js\": \"/publishable/assets/js/ace/libs/mode-ocaml.js\",\n    \"/publishable/assets/js/ace/libs/mode-partiql.js\": \"/publishable/assets/js/ace/libs/mode-partiql.js\",\n    \"/publishable/assets/js/ace/libs/mode-pascal.js\": \"/publishable/assets/js/ace/libs/mode-pascal.js\",\n    \"/publishable/assets/js/ace/libs/mode-perl.js\": \"/publishable/assets/js/ace/libs/mode-perl.js\",\n    \"/publishable/assets/js/ace/libs/mode-pgsql.js\": \"/publishable/assets/js/ace/libs/mode-pgsql.js\",\n    \"/publishable/assets/js/ace/libs/mode-php.js\": \"/publishable/assets/js/ace/libs/mode-php.js\",\n    \"/publishable/assets/js/ace/libs/mode-php_laravel_blade.js\": \"/publishable/assets/js/ace/libs/mode-php_laravel_blade.js\",\n    \"/publishable/assets/js/ace/libs/mode-pig.js\": \"/publishable/assets/js/ace/libs/mode-pig.js\",\n    \"/publishable/assets/js/ace/libs/mode-plain_text.js\": \"/publishable/assets/js/ace/libs/mode-plain_text.js\",\n    \"/publishable/assets/js/ace/libs/mode-powershell.js\": \"/publishable/assets/js/ace/libs/mode-powershell.js\",\n    \"/publishable/assets/js/ace/libs/mode-praat.js\": \"/publishable/assets/js/ace/libs/mode-praat.js\",\n    \"/publishable/assets/js/ace/libs/mode-prisma.js\": \"/publishable/assets/js/ace/libs/mode-prisma.js\",\n    \"/publishable/assets/js/ace/libs/mode-prolog.js\": \"/publishable/assets/js/ace/libs/mode-prolog.js\",\n    \"/publishable/assets/js/ace/libs/mode-properties.js\": \"/publishable/assets/js/ace/libs/mode-properties.js\",\n    \"/publishable/assets/js/ace/libs/mode-protobuf.js\": \"/publishable/assets/js/ace/libs/mode-protobuf.js\",\n    \"/publishable/assets/js/ace/libs/mode-puppet.js\": \"/publishable/assets/js/ace/libs/mode-puppet.js\",\n    \"/publishable/assets/js/ace/libs/mode-python.js\": \"/publishable/assets/js/ace/libs/mode-python.js\",\n    \"/publishable/assets/js/ace/libs/mode-qml.js\": \"/publishable/assets/js/ace/libs/mode-qml.js\",\n    \"/publishable/assets/js/ace/libs/mode-r.js\": \"/publishable/assets/js/ace/libs/mode-r.js\",\n    \"/publishable/assets/js/ace/libs/mode-raku.js\": \"/publishable/assets/js/ace/libs/mode-raku.js\",\n    \"/publishable/assets/js/ace/libs/mode-razor.js\": \"/publishable/assets/js/ace/libs/mode-razor.js\",\n    \"/publishable/assets/js/ace/libs/mode-rdoc.js\": \"/publishable/assets/js/ace/libs/mode-rdoc.js\",\n    \"/publishable/assets/js/ace/libs/mode-red.js\": \"/publishable/assets/js/ace/libs/mode-red.js\",\n    \"/publishable/assets/js/ace/libs/mode-redshift.js\": \"/publishable/assets/js/ace/libs/mode-redshift.js\",\n    \"/publishable/assets/js/ace/libs/mode-rhtml.js\": \"/publishable/assets/js/ace/libs/mode-rhtml.js\",\n    \"/publishable/assets/js/ace/libs/mode-robot.js\": \"/publishable/assets/js/ace/libs/mode-robot.js\",\n    \"/publishable/assets/js/ace/libs/mode-rst.js\": \"/publishable/assets/js/ace/libs/mode-rst.js\",\n    \"/publishable/assets/js/ace/libs/mode-ruby.js\": \"/publishable/assets/js/ace/libs/mode-ruby.js\",\n    \"/publishable/assets/js/ace/libs/mode-rust.js\": \"/publishable/assets/js/ace/libs/mode-rust.js\",\n    \"/publishable/assets/js/ace/libs/mode-sac.js\": \"/publishable/assets/js/ace/libs/mode-sac.js\",\n    \"/publishable/assets/js/ace/libs/mode-sass.js\": \"/publishable/assets/js/ace/libs/mode-sass.js\",\n    \"/publishable/assets/js/ace/libs/mode-scad.js\": \"/publishable/assets/js/ace/libs/mode-scad.js\",\n    \"/publishable/assets/js/ace/libs/mode-scala.js\": \"/publishable/assets/js/ace/libs/mode-scala.js\",\n    \"/publishable/assets/js/ace/libs/mode-scheme.js\": \"/publishable/assets/js/ace/libs/mode-scheme.js\",\n    \"/publishable/assets/js/ace/libs/mode-scrypt.js\": \"/publishable/assets/js/ace/libs/mode-scrypt.js\",\n    \"/publishable/assets/js/ace/libs/mode-scss.js\": \"/publishable/assets/js/ace/libs/mode-scss.js\",\n    \"/publishable/assets/js/ace/libs/mode-sh.js\": \"/publishable/assets/js/ace/libs/mode-sh.js\",\n    \"/publishable/assets/js/ace/libs/mode-sjs.js\": \"/publishable/assets/js/ace/libs/mode-sjs.js\",\n    \"/publishable/assets/js/ace/libs/mode-slim.js\": \"/publishable/assets/js/ace/libs/mode-slim.js\",\n    \"/publishable/assets/js/ace/libs/mode-smarty.js\": \"/publishable/assets/js/ace/libs/mode-smarty.js\",\n    \"/publishable/assets/js/ace/libs/mode-smithy.js\": \"/publishable/assets/js/ace/libs/mode-smithy.js\",\n    \"/publishable/assets/js/ace/libs/mode-snippets.js\": \"/publishable/assets/js/ace/libs/mode-snippets.js\",\n    \"/publishable/assets/js/ace/libs/mode-soy_template.js\": \"/publishable/assets/js/ace/libs/mode-soy_template.js\",\n    \"/publishable/assets/js/ace/libs/mode-space.js\": \"/publishable/assets/js/ace/libs/mode-space.js\",\n    \"/publishable/assets/js/ace/libs/mode-sparql.js\": \"/publishable/assets/js/ace/libs/mode-sparql.js\",\n    \"/publishable/assets/js/ace/libs/mode-sql.js\": \"/publishable/assets/js/ace/libs/mode-sql.js\",\n    \"/publishable/assets/js/ace/libs/mode-sqlserver.js\": \"/publishable/assets/js/ace/libs/mode-sqlserver.js\",\n    \"/publishable/assets/js/ace/libs/mode-stylus.js\": \"/publishable/assets/js/ace/libs/mode-stylus.js\",\n    \"/publishable/assets/js/ace/libs/mode-svg.js\": \"/publishable/assets/js/ace/libs/mode-svg.js\",\n    \"/publishable/assets/js/ace/libs/mode-swift.js\": \"/publishable/assets/js/ace/libs/mode-swift.js\",\n    \"/publishable/assets/js/ace/libs/mode-tcl.js\": \"/publishable/assets/js/ace/libs/mode-tcl.js\",\n    \"/publishable/assets/js/ace/libs/mode-terraform.js\": \"/publishable/assets/js/ace/libs/mode-terraform.js\",\n    \"/publishable/assets/js/ace/libs/mode-tex.js\": \"/publishable/assets/js/ace/libs/mode-tex.js\",\n    \"/publishable/assets/js/ace/libs/mode-text.js\": \"/publishable/assets/js/ace/libs/mode-text.js\",\n    \"/publishable/assets/js/ace/libs/mode-textile.js\": \"/publishable/assets/js/ace/libs/mode-textile.js\",\n    \"/publishable/assets/js/ace/libs/mode-toml.js\": \"/publishable/assets/js/ace/libs/mode-toml.js\",\n    \"/publishable/assets/js/ace/libs/mode-tsx.js\": \"/publishable/assets/js/ace/libs/mode-tsx.js\",\n    \"/publishable/assets/js/ace/libs/mode-turtle.js\": \"/publishable/assets/js/ace/libs/mode-turtle.js\",\n    \"/publishable/assets/js/ace/libs/mode-twig.js\": \"/publishable/assets/js/ace/libs/mode-twig.js\",\n    \"/publishable/assets/js/ace/libs/mode-typescript.js\": \"/publishable/assets/js/ace/libs/mode-typescript.js\",\n    \"/publishable/assets/js/ace/libs/mode-vala.js\": \"/publishable/assets/js/ace/libs/mode-vala.js\",\n    \"/publishable/assets/js/ace/libs/mode-vbscript.js\": \"/publishable/assets/js/ace/libs/mode-vbscript.js\",\n    \"/publishable/assets/js/ace/libs/mode-velocity.js\": \"/publishable/assets/js/ace/libs/mode-velocity.js\",\n    \"/publishable/assets/js/ace/libs/mode-verilog.js\": \"/publishable/assets/js/ace/libs/mode-verilog.js\",\n    \"/publishable/assets/js/ace/libs/mode-vhdl.js\": \"/publishable/assets/js/ace/libs/mode-vhdl.js\",\n    \"/publishable/assets/js/ace/libs/mode-visualforce.js\": \"/publishable/assets/js/ace/libs/mode-visualforce.js\",\n    \"/publishable/assets/js/ace/libs/mode-wollok.js\": \"/publishable/assets/js/ace/libs/mode-wollok.js\",\n    \"/publishable/assets/js/ace/libs/mode-xml.js\": \"/publishable/assets/js/ace/libs/mode-xml.js\",\n    \"/publishable/assets/js/ace/libs/mode-xquery.js\": \"/publishable/assets/js/ace/libs/mode-xquery.js\",\n    \"/publishable/assets/js/ace/libs/mode-yaml.js\": \"/publishable/assets/js/ace/libs/mode-yaml.js\",\n    \"/publishable/assets/js/ace/libs/mode-zeek.js\": \"/publishable/assets/js/ace/libs/mode-zeek.js\",\n    \"/publishable/assets/js/ace/libs/snippets/abap.js\": \"/publishable/assets/js/ace/libs/snippets/abap.js\",\n    \"/publishable/assets/js/ace/libs/snippets/abc.js\": \"/publishable/assets/js/ace/libs/snippets/abc.js\",\n    \"/publishable/assets/js/ace/libs/snippets/actionscript.js\": \"/publishable/assets/js/ace/libs/snippets/actionscript.js\",\n    \"/publishable/assets/js/ace/libs/snippets/ada.js\": \"/publishable/assets/js/ace/libs/snippets/ada.js\",\n    \"/publishable/assets/js/ace/libs/snippets/alda.js\": \"/publishable/assets/js/ace/libs/snippets/alda.js\",\n    \"/publishable/assets/js/ace/libs/snippets/apache_conf.js\": \"/publishable/assets/js/ace/libs/snippets/apache_conf.js\",\n    \"/publishable/assets/js/ace/libs/snippets/apex.js\": \"/publishable/assets/js/ace/libs/snippets/apex.js\",\n    \"/publishable/assets/js/ace/libs/snippets/applescript.js\": \"/publishable/assets/js/ace/libs/snippets/applescript.js\",\n    \"/publishable/assets/js/ace/libs/snippets/aql.js\": \"/publishable/assets/js/ace/libs/snippets/aql.js\",\n    \"/publishable/assets/js/ace/libs/snippets/asciidoc.js\": \"/publishable/assets/js/ace/libs/snippets/asciidoc.js\",\n    \"/publishable/assets/js/ace/libs/snippets/asl.js\": \"/publishable/assets/js/ace/libs/snippets/asl.js\",\n    \"/publishable/assets/js/ace/libs/snippets/assembly_x86.js\": \"/publishable/assets/js/ace/libs/snippets/assembly_x86.js\",\n    \"/publishable/assets/js/ace/libs/snippets/autohotkey.js\": \"/publishable/assets/js/ace/libs/snippets/autohotkey.js\",\n    \"/publishable/assets/js/ace/libs/snippets/batchfile.js\": \"/publishable/assets/js/ace/libs/snippets/batchfile.js\",\n    \"/publishable/assets/js/ace/libs/snippets/bibtex.js\": \"/publishable/assets/js/ace/libs/snippets/bibtex.js\",\n    \"/publishable/assets/js/ace/libs/snippets/c9search.js\": \"/publishable/assets/js/ace/libs/snippets/c9search.js\",\n    \"/publishable/assets/js/ace/libs/snippets/c_cpp.js\": \"/publishable/assets/js/ace/libs/snippets/c_cpp.js\",\n    \"/publishable/assets/js/ace/libs/snippets/cirru.js\": \"/publishable/assets/js/ace/libs/snippets/cirru.js\",\n    \"/publishable/assets/js/ace/libs/snippets/clojure.js\": \"/publishable/assets/js/ace/libs/snippets/clojure.js\",\n    \"/publishable/assets/js/ace/libs/snippets/cobol.js\": \"/publishable/assets/js/ace/libs/snippets/cobol.js\",\n    \"/publishable/assets/js/ace/libs/snippets/coffee.js\": \"/publishable/assets/js/ace/libs/snippets/coffee.js\",\n    \"/publishable/assets/js/ace/libs/snippets/coldfusion.js\": \"/publishable/assets/js/ace/libs/snippets/coldfusion.js\",\n    \"/publishable/assets/js/ace/libs/snippets/crystal.js\": \"/publishable/assets/js/ace/libs/snippets/crystal.js\",\n    \"/publishable/assets/js/ace/libs/snippets/csharp.js\": \"/publishable/assets/js/ace/libs/snippets/csharp.js\",\n    \"/publishable/assets/js/ace/libs/snippets/csound_document.js\": \"/publishable/assets/js/ace/libs/snippets/csound_document.js\",\n    \"/publishable/assets/js/ace/libs/snippets/csound_orchestra.js\": \"/publishable/assets/js/ace/libs/snippets/csound_orchestra.js\",\n    \"/publishable/assets/js/ace/libs/snippets/csound_score.js\": \"/publishable/assets/js/ace/libs/snippets/csound_score.js\",\n    \"/publishable/assets/js/ace/libs/snippets/csp.js\": \"/publishable/assets/js/ace/libs/snippets/csp.js\",\n    \"/publishable/assets/js/ace/libs/snippets/css.js\": \"/publishable/assets/js/ace/libs/snippets/css.js\",\n    \"/publishable/assets/js/ace/libs/snippets/curly.js\": \"/publishable/assets/js/ace/libs/snippets/curly.js\",\n    \"/publishable/assets/js/ace/libs/snippets/d.js\": \"/publishable/assets/js/ace/libs/snippets/d.js\",\n    \"/publishable/assets/js/ace/libs/snippets/dart.js\": \"/publishable/assets/js/ace/libs/snippets/dart.js\",\n    \"/publishable/assets/js/ace/libs/snippets/diff.js\": \"/publishable/assets/js/ace/libs/snippets/diff.js\",\n    \"/publishable/assets/js/ace/libs/snippets/django.js\": \"/publishable/assets/js/ace/libs/snippets/django.js\",\n    \"/publishable/assets/js/ace/libs/snippets/dockerfile.js\": \"/publishable/assets/js/ace/libs/snippets/dockerfile.js\",\n    \"/publishable/assets/js/ace/libs/snippets/dot.js\": \"/publishable/assets/js/ace/libs/snippets/dot.js\",\n    \"/publishable/assets/js/ace/libs/snippets/drools.js\": \"/publishable/assets/js/ace/libs/snippets/drools.js\",\n    \"/publishable/assets/js/ace/libs/snippets/edifact.js\": \"/publishable/assets/js/ace/libs/snippets/edifact.js\",\n    \"/publishable/assets/js/ace/libs/snippets/eiffel.js\": \"/publishable/assets/js/ace/libs/snippets/eiffel.js\",\n    \"/publishable/assets/js/ace/libs/snippets/ejs.js\": \"/publishable/assets/js/ace/libs/snippets/ejs.js\",\n    \"/publishable/assets/js/ace/libs/snippets/elixir.js\": \"/publishable/assets/js/ace/libs/snippets/elixir.js\",\n    \"/publishable/assets/js/ace/libs/snippets/elm.js\": \"/publishable/assets/js/ace/libs/snippets/elm.js\",\n    \"/publishable/assets/js/ace/libs/snippets/erlang.js\": \"/publishable/assets/js/ace/libs/snippets/erlang.js\",\n    \"/publishable/assets/js/ace/libs/snippets/forth.js\": \"/publishable/assets/js/ace/libs/snippets/forth.js\",\n    \"/publishable/assets/js/ace/libs/snippets/fortran.js\": \"/publishable/assets/js/ace/libs/snippets/fortran.js\",\n    \"/publishable/assets/js/ace/libs/snippets/fsharp.js\": \"/publishable/assets/js/ace/libs/snippets/fsharp.js\",\n    \"/publishable/assets/js/ace/libs/snippets/fsl.js\": \"/publishable/assets/js/ace/libs/snippets/fsl.js\",\n    \"/publishable/assets/js/ace/libs/snippets/ftl.js\": \"/publishable/assets/js/ace/libs/snippets/ftl.js\",\n    \"/publishable/assets/js/ace/libs/snippets/gcode.js\": \"/publishable/assets/js/ace/libs/snippets/gcode.js\",\n    \"/publishable/assets/js/ace/libs/snippets/gherkin.js\": \"/publishable/assets/js/ace/libs/snippets/gherkin.js\",\n    \"/publishable/assets/js/ace/libs/snippets/gitignore.js\": \"/publishable/assets/js/ace/libs/snippets/gitignore.js\",\n    \"/publishable/assets/js/ace/libs/snippets/glsl.js\": \"/publishable/assets/js/ace/libs/snippets/glsl.js\",\n    \"/publishable/assets/js/ace/libs/snippets/gobstones.js\": \"/publishable/assets/js/ace/libs/snippets/gobstones.js\",\n    \"/publishable/assets/js/ace/libs/snippets/golang.js\": \"/publishable/assets/js/ace/libs/snippets/golang.js\",\n    \"/publishable/assets/js/ace/libs/snippets/graphqlschema.js\": \"/publishable/assets/js/ace/libs/snippets/graphqlschema.js\",\n    \"/publishable/assets/js/ace/libs/snippets/groovy.js\": \"/publishable/assets/js/ace/libs/snippets/groovy.js\",\n    \"/publishable/assets/js/ace/libs/snippets/haml.js\": \"/publishable/assets/js/ace/libs/snippets/haml.js\",\n    \"/publishable/assets/js/ace/libs/snippets/handlebars.js\": \"/publishable/assets/js/ace/libs/snippets/handlebars.js\",\n    \"/publishable/assets/js/ace/libs/snippets/haskell.js\": \"/publishable/assets/js/ace/libs/snippets/haskell.js\",\n    \"/publishable/assets/js/ace/libs/snippets/haskell_cabal.js\": \"/publishable/assets/js/ace/libs/snippets/haskell_cabal.js\",\n    \"/publishable/assets/js/ace/libs/snippets/haxe.js\": \"/publishable/assets/js/ace/libs/snippets/haxe.js\",\n    \"/publishable/assets/js/ace/libs/snippets/hjson.js\": \"/publishable/assets/js/ace/libs/snippets/hjson.js\",\n    \"/publishable/assets/js/ace/libs/snippets/html.js\": \"/publishable/assets/js/ace/libs/snippets/html.js\",\n    \"/publishable/assets/js/ace/libs/snippets/html_elixir.js\": \"/publishable/assets/js/ace/libs/snippets/html_elixir.js\",\n    \"/publishable/assets/js/ace/libs/snippets/html_ruby.js\": \"/publishable/assets/js/ace/libs/snippets/html_ruby.js\",\n    \"/publishable/assets/js/ace/libs/snippets/ini.js\": \"/publishable/assets/js/ace/libs/snippets/ini.js\",\n    \"/publishable/assets/js/ace/libs/snippets/io.js\": \"/publishable/assets/js/ace/libs/snippets/io.js\",\n    \"/publishable/assets/js/ace/libs/snippets/ion.js\": \"/publishable/assets/js/ace/libs/snippets/ion.js\",\n    \"/publishable/assets/js/ace/libs/snippets/jack.js\": \"/publishable/assets/js/ace/libs/snippets/jack.js\",\n    \"/publishable/assets/js/ace/libs/snippets/jade.js\": \"/publishable/assets/js/ace/libs/snippets/jade.js\",\n    \"/publishable/assets/js/ace/libs/snippets/java.js\": \"/publishable/assets/js/ace/libs/snippets/java.js\",\n    \"/publishable/assets/js/ace/libs/snippets/javascript.js\": \"/publishable/assets/js/ace/libs/snippets/javascript.js\",\n    \"/publishable/assets/js/ace/libs/snippets/json.js\": \"/publishable/assets/js/ace/libs/snippets/json.js\",\n    \"/publishable/assets/js/ace/libs/snippets/json5.js\": \"/publishable/assets/js/ace/libs/snippets/json5.js\",\n    \"/publishable/assets/js/ace/libs/snippets/jsoniq.js\": \"/publishable/assets/js/ace/libs/snippets/jsoniq.js\",\n    \"/publishable/assets/js/ace/libs/snippets/jsp.js\": \"/publishable/assets/js/ace/libs/snippets/jsp.js\",\n    \"/publishable/assets/js/ace/libs/snippets/jssm.js\": \"/publishable/assets/js/ace/libs/snippets/jssm.js\",\n    \"/publishable/assets/js/ace/libs/snippets/jsx.js\": \"/publishable/assets/js/ace/libs/snippets/jsx.js\",\n    \"/publishable/assets/js/ace/libs/snippets/julia.js\": \"/publishable/assets/js/ace/libs/snippets/julia.js\",\n    \"/publishable/assets/js/ace/libs/snippets/kotlin.js\": \"/publishable/assets/js/ace/libs/snippets/kotlin.js\",\n    \"/publishable/assets/js/ace/libs/snippets/latex.js\": \"/publishable/assets/js/ace/libs/snippets/latex.js\",\n    \"/publishable/assets/js/ace/libs/snippets/latte.js\": \"/publishable/assets/js/ace/libs/snippets/latte.js\",\n    \"/publishable/assets/js/ace/libs/snippets/less.js\": \"/publishable/assets/js/ace/libs/snippets/less.js\",\n    \"/publishable/assets/js/ace/libs/snippets/liquid.js\": \"/publishable/assets/js/ace/libs/snippets/liquid.js\",\n    \"/publishable/assets/js/ace/libs/snippets/lisp.js\": \"/publishable/assets/js/ace/libs/snippets/lisp.js\",\n    \"/publishable/assets/js/ace/libs/snippets/livescript.js\": \"/publishable/assets/js/ace/libs/snippets/livescript.js\",\n    \"/publishable/assets/js/ace/libs/snippets/logiql.js\": \"/publishable/assets/js/ace/libs/snippets/logiql.js\",\n    \"/publishable/assets/js/ace/libs/snippets/logtalk.js\": \"/publishable/assets/js/ace/libs/snippets/logtalk.js\",\n    \"/publishable/assets/js/ace/libs/snippets/lsl.js\": \"/publishable/assets/js/ace/libs/snippets/lsl.js\",\n    \"/publishable/assets/js/ace/libs/snippets/lua.js\": \"/publishable/assets/js/ace/libs/snippets/lua.js\",\n    \"/publishable/assets/js/ace/libs/snippets/luapage.js\": \"/publishable/assets/js/ace/libs/snippets/luapage.js\",\n    \"/publishable/assets/js/ace/libs/snippets/lucene.js\": \"/publishable/assets/js/ace/libs/snippets/lucene.js\",\n    \"/publishable/assets/js/ace/libs/snippets/makefile.js\": \"/publishable/assets/js/ace/libs/snippets/makefile.js\",\n    \"/publishable/assets/js/ace/libs/snippets/markdown.js\": \"/publishable/assets/js/ace/libs/snippets/markdown.js\",\n    \"/publishable/assets/js/ace/libs/snippets/mask.js\": \"/publishable/assets/js/ace/libs/snippets/mask.js\",\n    \"/publishable/assets/js/ace/libs/snippets/matlab.js\": \"/publishable/assets/js/ace/libs/snippets/matlab.js\",\n    \"/publishable/assets/js/ace/libs/snippets/maze.js\": \"/publishable/assets/js/ace/libs/snippets/maze.js\",\n    \"/publishable/assets/js/ace/libs/snippets/mediawiki.js\": \"/publishable/assets/js/ace/libs/snippets/mediawiki.js\",\n    \"/publishable/assets/js/ace/libs/snippets/mel.js\": \"/publishable/assets/js/ace/libs/snippets/mel.js\",\n    \"/publishable/assets/js/ace/libs/snippets/mips.js\": \"/publishable/assets/js/ace/libs/snippets/mips.js\",\n    \"/publishable/assets/js/ace/libs/snippets/mixal.js\": \"/publishable/assets/js/ace/libs/snippets/mixal.js\",\n    \"/publishable/assets/js/ace/libs/snippets/mushcode.js\": \"/publishable/assets/js/ace/libs/snippets/mushcode.js\",\n    \"/publishable/assets/js/ace/libs/snippets/mysql.js\": \"/publishable/assets/js/ace/libs/snippets/mysql.js\",\n    \"/publishable/assets/js/ace/libs/snippets/nginx.js\": \"/publishable/assets/js/ace/libs/snippets/nginx.js\",\n    \"/publishable/assets/js/ace/libs/snippets/nim.js\": \"/publishable/assets/js/ace/libs/snippets/nim.js\",\n    \"/publishable/assets/js/ace/libs/snippets/nix.js\": \"/publishable/assets/js/ace/libs/snippets/nix.js\",\n    \"/publishable/assets/js/ace/libs/snippets/nsis.js\": \"/publishable/assets/js/ace/libs/snippets/nsis.js\",\n    \"/publishable/assets/js/ace/libs/snippets/nunjucks.js\": \"/publishable/assets/js/ace/libs/snippets/nunjucks.js\",\n    \"/publishable/assets/js/ace/libs/snippets/objectivec.js\": \"/publishable/assets/js/ace/libs/snippets/objectivec.js\",\n    \"/publishable/assets/js/ace/libs/snippets/ocaml.js\": \"/publishable/assets/js/ace/libs/snippets/ocaml.js\",\n    \"/publishable/assets/js/ace/libs/snippets/partiql.js\": \"/publishable/assets/js/ace/libs/snippets/partiql.js\",\n    \"/publishable/assets/js/ace/libs/snippets/pascal.js\": \"/publishable/assets/js/ace/libs/snippets/pascal.js\",\n    \"/publishable/assets/js/ace/libs/snippets/perl.js\": \"/publishable/assets/js/ace/libs/snippets/perl.js\",\n    \"/publishable/assets/js/ace/libs/snippets/pgsql.js\": \"/publishable/assets/js/ace/libs/snippets/pgsql.js\",\n    \"/publishable/assets/js/ace/libs/snippets/php.js\": \"/publishable/assets/js/ace/libs/snippets/php.js\",\n    \"/publishable/assets/js/ace/libs/snippets/php_laravel_blade.js\": \"/publishable/assets/js/ace/libs/snippets/php_laravel_blade.js\",\n    \"/publishable/assets/js/ace/libs/snippets/pig.js\": \"/publishable/assets/js/ace/libs/snippets/pig.js\",\n    \"/publishable/assets/js/ace/libs/snippets/plain_text.js\": \"/publishable/assets/js/ace/libs/snippets/plain_text.js\",\n    \"/publishable/assets/js/ace/libs/snippets/powershell.js\": \"/publishable/assets/js/ace/libs/snippets/powershell.js\",\n    \"/publishable/assets/js/ace/libs/snippets/praat.js\": \"/publishable/assets/js/ace/libs/snippets/praat.js\",\n    \"/publishable/assets/js/ace/libs/snippets/prisma.js\": \"/publishable/assets/js/ace/libs/snippets/prisma.js\",\n    \"/publishable/assets/js/ace/libs/snippets/prolog.js\": \"/publishable/assets/js/ace/libs/snippets/prolog.js\",\n    \"/publishable/assets/js/ace/libs/snippets/properties.js\": \"/publishable/assets/js/ace/libs/snippets/properties.js\",\n    \"/publishable/assets/js/ace/libs/snippets/protobuf.js\": \"/publishable/assets/js/ace/libs/snippets/protobuf.js\",\n    \"/publishable/assets/js/ace/libs/snippets/puppet.js\": \"/publishable/assets/js/ace/libs/snippets/puppet.js\",\n    \"/publishable/assets/js/ace/libs/snippets/python.js\": \"/publishable/assets/js/ace/libs/snippets/python.js\",\n    \"/publishable/assets/js/ace/libs/snippets/qml.js\": \"/publishable/assets/js/ace/libs/snippets/qml.js\",\n    \"/publishable/assets/js/ace/libs/snippets/r.js\": \"/publishable/assets/js/ace/libs/snippets/r.js\",\n    \"/publishable/assets/js/ace/libs/snippets/raku.js\": \"/publishable/assets/js/ace/libs/snippets/raku.js\",\n    \"/publishable/assets/js/ace/libs/snippets/razor.js\": \"/publishable/assets/js/ace/libs/snippets/razor.js\",\n    \"/publishable/assets/js/ace/libs/snippets/rdoc.js\": \"/publishable/assets/js/ace/libs/snippets/rdoc.js\",\n    \"/publishable/assets/js/ace/libs/snippets/red.js\": \"/publishable/assets/js/ace/libs/snippets/red.js\",\n    \"/publishable/assets/js/ace/libs/snippets/redshift.js\": \"/publishable/assets/js/ace/libs/snippets/redshift.js\",\n    \"/publishable/assets/js/ace/libs/snippets/rhtml.js\": \"/publishable/assets/js/ace/libs/snippets/rhtml.js\",\n    \"/publishable/assets/js/ace/libs/snippets/robot.js\": \"/publishable/assets/js/ace/libs/snippets/robot.js\",\n    \"/publishable/assets/js/ace/libs/snippets/rst.js\": \"/publishable/assets/js/ace/libs/snippets/rst.js\",\n    \"/publishable/assets/js/ace/libs/snippets/ruby.js\": \"/publishable/assets/js/ace/libs/snippets/ruby.js\",\n    \"/publishable/assets/js/ace/libs/snippets/rust.js\": \"/publishable/assets/js/ace/libs/snippets/rust.js\",\n    \"/publishable/assets/js/ace/libs/snippets/sac.js\": \"/publishable/assets/js/ace/libs/snippets/sac.js\",\n    \"/publishable/assets/js/ace/libs/snippets/sass.js\": \"/publishable/assets/js/ace/libs/snippets/sass.js\",\n    \"/publishable/assets/js/ace/libs/snippets/scad.js\": \"/publishable/assets/js/ace/libs/snippets/scad.js\",\n    \"/publishable/assets/js/ace/libs/snippets/scala.js\": \"/publishable/assets/js/ace/libs/snippets/scala.js\",\n    \"/publishable/assets/js/ace/libs/snippets/scheme.js\": \"/publishable/assets/js/ace/libs/snippets/scheme.js\",\n    \"/publishable/assets/js/ace/libs/snippets/scrypt.js\": \"/publishable/assets/js/ace/libs/snippets/scrypt.js\",\n    \"/publishable/assets/js/ace/libs/snippets/scss.js\": \"/publishable/assets/js/ace/libs/snippets/scss.js\",\n    \"/publishable/assets/js/ace/libs/snippets/sh.js\": \"/publishable/assets/js/ace/libs/snippets/sh.js\",\n    \"/publishable/assets/js/ace/libs/snippets/sjs.js\": \"/publishable/assets/js/ace/libs/snippets/sjs.js\",\n    \"/publishable/assets/js/ace/libs/snippets/slim.js\": \"/publishable/assets/js/ace/libs/snippets/slim.js\",\n    \"/publishable/assets/js/ace/libs/snippets/smarty.js\": \"/publishable/assets/js/ace/libs/snippets/smarty.js\",\n    \"/publishable/assets/js/ace/libs/snippets/smithy.js\": \"/publishable/assets/js/ace/libs/snippets/smithy.js\",\n    \"/publishable/assets/js/ace/libs/snippets/snippets.js\": \"/publishable/assets/js/ace/libs/snippets/snippets.js\",\n    \"/publishable/assets/js/ace/libs/snippets/soy_template.js\": \"/publishable/assets/js/ace/libs/snippets/soy_template.js\",\n    \"/publishable/assets/js/ace/libs/snippets/space.js\": \"/publishable/assets/js/ace/libs/snippets/space.js\",\n    \"/publishable/assets/js/ace/libs/snippets/sparql.js\": \"/publishable/assets/js/ace/libs/snippets/sparql.js\",\n    \"/publishable/assets/js/ace/libs/snippets/sql.js\": \"/publishable/assets/js/ace/libs/snippets/sql.js\",\n    \"/publishable/assets/js/ace/libs/snippets/sqlserver.js\": \"/publishable/assets/js/ace/libs/snippets/sqlserver.js\",\n    \"/publishable/assets/js/ace/libs/snippets/stylus.js\": \"/publishable/assets/js/ace/libs/snippets/stylus.js\",\n    \"/publishable/assets/js/ace/libs/snippets/svg.js\": \"/publishable/assets/js/ace/libs/snippets/svg.js\",\n    \"/publishable/assets/js/ace/libs/snippets/swift.js\": \"/publishable/assets/js/ace/libs/snippets/swift.js\",\n    \"/publishable/assets/js/ace/libs/snippets/tcl.js\": \"/publishable/assets/js/ace/libs/snippets/tcl.js\",\n    \"/publishable/assets/js/ace/libs/snippets/terraform.js\": \"/publishable/assets/js/ace/libs/snippets/terraform.js\",\n    \"/publishable/assets/js/ace/libs/snippets/tex.js\": \"/publishable/assets/js/ace/libs/snippets/tex.js\",\n    \"/publishable/assets/js/ace/libs/snippets/text.js\": \"/publishable/assets/js/ace/libs/snippets/text.js\",\n    \"/publishable/assets/js/ace/libs/snippets/textile.js\": \"/publishable/assets/js/ace/libs/snippets/textile.js\",\n    \"/publishable/assets/js/ace/libs/snippets/toml.js\": \"/publishable/assets/js/ace/libs/snippets/toml.js\",\n    \"/publishable/assets/js/ace/libs/snippets/tsx.js\": \"/publishable/assets/js/ace/libs/snippets/tsx.js\",\n    \"/publishable/assets/js/ace/libs/snippets/turtle.js\": \"/publishable/assets/js/ace/libs/snippets/turtle.js\",\n    \"/publishable/assets/js/ace/libs/snippets/twig.js\": \"/publishable/assets/js/ace/libs/snippets/twig.js\",\n    \"/publishable/assets/js/ace/libs/snippets/typescript.js\": \"/publishable/assets/js/ace/libs/snippets/typescript.js\",\n    \"/publishable/assets/js/ace/libs/snippets/vala.js\": \"/publishable/assets/js/ace/libs/snippets/vala.js\",\n    \"/publishable/assets/js/ace/libs/snippets/vbscript.js\": \"/publishable/assets/js/ace/libs/snippets/vbscript.js\",\n    \"/publishable/assets/js/ace/libs/snippets/velocity.js\": \"/publishable/assets/js/ace/libs/snippets/velocity.js\",\n    \"/publishable/assets/js/ace/libs/snippets/verilog.js\": \"/publishable/assets/js/ace/libs/snippets/verilog.js\",\n    \"/publishable/assets/js/ace/libs/snippets/vhdl.js\": \"/publishable/assets/js/ace/libs/snippets/vhdl.js\",\n    \"/publishable/assets/js/ace/libs/snippets/visualforce.js\": \"/publishable/assets/js/ace/libs/snippets/visualforce.js\",\n    \"/publishable/assets/js/ace/libs/snippets/wollok.js\": \"/publishable/assets/js/ace/libs/snippets/wollok.js\",\n    \"/publishable/assets/js/ace/libs/snippets/xml.js\": \"/publishable/assets/js/ace/libs/snippets/xml.js\",\n    \"/publishable/assets/js/ace/libs/snippets/xquery.js\": \"/publishable/assets/js/ace/libs/snippets/xquery.js\",\n    \"/publishable/assets/js/ace/libs/snippets/yaml.js\": \"/publishable/assets/js/ace/libs/snippets/yaml.js\",\n    \"/publishable/assets/js/ace/libs/snippets/zeek.js\": \"/publishable/assets/js/ace/libs/snippets/zeek.js\",\n    \"/publishable/assets/js/ace/libs/theme-ambiance.js\": \"/publishable/assets/js/ace/libs/theme-ambiance.js\",\n    \"/publishable/assets/js/ace/libs/theme-chaos.js\": \"/publishable/assets/js/ace/libs/theme-chaos.js\",\n    \"/publishable/assets/js/ace/libs/theme-chrome.js\": \"/publishable/assets/js/ace/libs/theme-chrome.js\",\n    \"/publishable/assets/js/ace/libs/theme-cloud9_day.js\": \"/publishable/assets/js/ace/libs/theme-cloud9_day.js\",\n    \"/publishable/assets/js/ace/libs/theme-cloud9_night.js\": \"/publishable/assets/js/ace/libs/theme-cloud9_night.js\",\n    \"/publishable/assets/js/ace/libs/theme-cloud9_night_low_color.js\": \"/publishable/assets/js/ace/libs/theme-cloud9_night_low_color.js\",\n    \"/publishable/assets/js/ace/libs/theme-clouds.js\": \"/publishable/assets/js/ace/libs/theme-clouds.js\",\n    \"/publishable/assets/js/ace/libs/theme-clouds_midnight.js\": \"/publishable/assets/js/ace/libs/theme-clouds_midnight.js\",\n    \"/publishable/assets/js/ace/libs/theme-cobalt.js\": \"/publishable/assets/js/ace/libs/theme-cobalt.js\",\n    \"/publishable/assets/js/ace/libs/theme-crimson_editor.js\": \"/publishable/assets/js/ace/libs/theme-crimson_editor.js\",\n    \"/publishable/assets/js/ace/libs/theme-dawn.js\": \"/publishable/assets/js/ace/libs/theme-dawn.js\",\n    \"/publishable/assets/js/ace/libs/theme-dracula.js\": \"/publishable/assets/js/ace/libs/theme-dracula.js\",\n    \"/publishable/assets/js/ace/libs/theme-dreamweaver.js\": \"/publishable/assets/js/ace/libs/theme-dreamweaver.js\",\n    \"/publishable/assets/js/ace/libs/theme-eclipse.js\": \"/publishable/assets/js/ace/libs/theme-eclipse.js\",\n    \"/publishable/assets/js/ace/libs/theme-github.js\": \"/publishable/assets/js/ace/libs/theme-github.js\",\n    \"/publishable/assets/js/ace/libs/theme-gob.js\": \"/publishable/assets/js/ace/libs/theme-gob.js\",\n    \"/publishable/assets/js/ace/libs/theme-gruvbox.js\": \"/publishable/assets/js/ace/libs/theme-gruvbox.js\",\n    \"/publishable/assets/js/ace/libs/theme-gruvbox_dark_hard.js\": \"/publishable/assets/js/ace/libs/theme-gruvbox_dark_hard.js\",\n    \"/publishable/assets/js/ace/libs/theme-gruvbox_light_hard.js\": \"/publishable/assets/js/ace/libs/theme-gruvbox_light_hard.js\",\n    \"/publishable/assets/js/ace/libs/theme-idle_fingers.js\": \"/publishable/assets/js/ace/libs/theme-idle_fingers.js\",\n    \"/publishable/assets/js/ace/libs/theme-iplastic.js\": \"/publishable/assets/js/ace/libs/theme-iplastic.js\",\n    \"/publishable/assets/js/ace/libs/theme-katzenmilch.js\": \"/publishable/assets/js/ace/libs/theme-katzenmilch.js\",\n    \"/publishable/assets/js/ace/libs/theme-kr_theme.js\": \"/publishable/assets/js/ace/libs/theme-kr_theme.js\",\n    \"/publishable/assets/js/ace/libs/theme-kuroir.js\": \"/publishable/assets/js/ace/libs/theme-kuroir.js\",\n    \"/publishable/assets/js/ace/libs/theme-merbivore.js\": \"/publishable/assets/js/ace/libs/theme-merbivore.js\",\n    \"/publishable/assets/js/ace/libs/theme-merbivore_soft.js\": \"/publishable/assets/js/ace/libs/theme-merbivore_soft.js\",\n    \"/publishable/assets/js/ace/libs/theme-mono_industrial.js\": \"/publishable/assets/js/ace/libs/theme-mono_industrial.js\",\n    \"/publishable/assets/js/ace/libs/theme-monokai.js\": \"/publishable/assets/js/ace/libs/theme-monokai.js\",\n    \"/publishable/assets/js/ace/libs/theme-nord_dark.js\": \"/publishable/assets/js/ace/libs/theme-nord_dark.js\",\n    \"/publishable/assets/js/ace/libs/theme-one_dark.js\": \"/publishable/assets/js/ace/libs/theme-one_dark.js\",\n    \"/publishable/assets/js/ace/libs/theme-pastel_on_dark.js\": \"/publishable/assets/js/ace/libs/theme-pastel_on_dark.js\",\n    \"/publishable/assets/js/ace/libs/theme-solarized_dark.js\": \"/publishable/assets/js/ace/libs/theme-solarized_dark.js\",\n    \"/publishable/assets/js/ace/libs/theme-solarized_light.js\": \"/publishable/assets/js/ace/libs/theme-solarized_light.js\",\n    \"/publishable/assets/js/ace/libs/theme-sqlserver.js\": \"/publishable/assets/js/ace/libs/theme-sqlserver.js\",\n    \"/publishable/assets/js/ace/libs/theme-terminal.js\": \"/publishable/assets/js/ace/libs/theme-terminal.js\",\n    \"/publishable/assets/js/ace/libs/theme-textmate.js\": \"/publishable/assets/js/ace/libs/theme-textmate.js\",\n    \"/publishable/assets/js/ace/libs/theme-tomorrow.js\": \"/publishable/assets/js/ace/libs/theme-tomorrow.js\",\n    \"/publishable/assets/js/ace/libs/theme-tomorrow_night.js\": \"/publishable/assets/js/ace/libs/theme-tomorrow_night.js\",\n    \"/publishable/assets/js/ace/libs/theme-tomorrow_night_blue.js\": \"/publishable/assets/js/ace/libs/theme-tomorrow_night_blue.js\",\n    \"/publishable/assets/js/ace/libs/theme-tomorrow_night_bright.js\": \"/publishable/assets/js/ace/libs/theme-tomorrow_night_bright.js\",\n    \"/publishable/assets/js/ace/libs/theme-tomorrow_night_eighties.js\": \"/publishable/assets/js/ace/libs/theme-tomorrow_night_eighties.js\",\n    \"/publishable/assets/js/ace/libs/theme-twilight.js\": \"/publishable/assets/js/ace/libs/theme-twilight.js\",\n    \"/publishable/assets/js/ace/libs/theme-vibrant_ink.js\": \"/publishable/assets/js/ace/libs/theme-vibrant_ink.js\",\n    \"/publishable/assets/js/ace/libs/theme-xcode.js\": \"/publishable/assets/js/ace/libs/theme-xcode.js\",\n    \"/publishable/assets/js/ace/libs/worker-base.js\": \"/publishable/assets/js/ace/libs/worker-base.js\",\n    \"/publishable/assets/js/ace/libs/worker-coffee.js\": \"/publishable/assets/js/ace/libs/worker-coffee.js\",\n    \"/publishable/assets/js/ace/libs/worker-css.js\": \"/publishable/assets/js/ace/libs/worker-css.js\",\n    \"/publishable/assets/js/ace/libs/worker-html.js\": \"/publishable/assets/js/ace/libs/worker-html.js\",\n    \"/publishable/assets/js/ace/libs/worker-javascript.js\": \"/publishable/assets/js/ace/libs/worker-javascript.js\",\n    \"/publishable/assets/js/ace/libs/worker-json.js\": \"/publishable/assets/js/ace/libs/worker-json.js\",\n    \"/publishable/assets/js/ace/libs/worker-lua.js\": \"/publishable/assets/js/ace/libs/worker-lua.js\",\n    \"/publishable/assets/js/ace/libs/worker-php.js\": \"/publishable/assets/js/ace/libs/worker-php.js\",\n    \"/publishable/assets/js/ace/libs/worker-xml.js\": \"/publishable/assets/js/ace/libs/worker-xml.js\",\n    \"/publishable/assets/js/ace/libs/worker-xquery.js\": \"/publishable/assets/js/ace/libs/worker-xquery.js\",\n    \"/publishable/assets/js/ace/libs/worker-yaml.js\": \"/publishable/assets/js/ace/libs/worker-yaml.js\"\n}\n"
  },
  {
    "path": "mix.js",
    "content": "!function(n){function t(e){if(r[e])return r[e].exports;var o=r[e]={i:e,l:!1,exports:{}};return n[e].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};t.m=n,t.c=r,t.i=function(n){return n},t.d=function(n,r,e){t.o(n,r)||Object.defineProperty(n,r,{configurable:!1,enumerable:!0,get:e})},t.n=function(n){var r=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(r,\"a\",r),r},t.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},t.p=\"\",t(t.s=93)}({16:function(n,t){},17:function(n,t){},93:function(n,t,r){r(17),n.exports=r(16)}});"
  },
  {
    "path": "package.json",
    "content": "{\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"npm run development\",\n    \"development\": \"cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js\",\n    \"watch\": \"cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --config=node_modules/laravel-mix/setup/webpack.config.js\",\n    \"watch-poll\": \"npm run watch -- --watch-poll\",\n    \"hot\": \"cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js\",\n    \"prod\": \"npm run production\",\n    \"production\": \"cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js\"\n  },\n  \"devDependencies\": {\n    \"bootstrap-sass\": \"^3.4.3\",\n    \"cross-env\": \"^7.0.3\",\n    \"laravel-mix\": \"^6.0.49\",\n    \"postcss\": \"^8.4.18\",\n    \"sass\": \"^1.55.0\",\n    \"sass-loader\": \"^13.1.0\",\n    \"vue-loader\": \"^15.9.7\",\n    \"vue-template-compiler\": \"^2.7.13\"\n  },\n  \"dependencies\": {\n    \"ace-builds\": \"^1.12.3\",\n    \"animate.css\": \"^4.1.1\",\n    \"bootstrap\": \"^3.4.1\",\n    \"bootstrap-datepicker\": \"^1.9.0\",\n    \"bootstrap-toggle\": \"^2.2.2\",\n    \"brace\": \"^0.11.1\",\n    \"cropperjs\": \"^1.5.12\",\n    \"datatables-bootstrap3-plugin\": \"^0.6.0\",\n    \"datatables.net\": \"^1.12.1\",\n    \"datetimepicker\": \"^0.1.39\",\n    \"dropzone\": \"^5.9.3\",\n    \"easymde\": \"^2.18.0\",\n    \"eonasdan-bootstrap-datetimepicker\": \"^4.17.49\",\n    \"icheck\": \"^1.0.2\",\n    \"jquery\": \"^3.6.1\",\n    \"jquery-match-height\": \"^0.7.2\",\n    \"nestable2\": \"^1.6.0\",\n    \"perfect-scrollbar\": \"^1.5.5\",\n    \"select2\": \"^4.0.13\",\n    \"tinymce\": \"^6.2.0\",\n    \"toastr\": \"^2.1.4\",\n    \"vue\": \"^2.7.13\"\n  }\n}\n"
  },
  {
    "path": "phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" backupGlobals=\"false\" bootstrap=\"tests/bootstrap.php\" colors=\"true\" processIsolation=\"false\" stopOnFailure=\"false\" xsi:noNamespaceSchemaLocation=\"https://schema.phpunit.de/10.4/phpunit.xsd\" cacheDirectory=\".phpunit.cache\" backupStaticProperties=\"false\">\n  <coverage>\n    <report>\n      <html outputDirectory=\"build/coverage\"/>\n      <text outputFile=\"php://stdout\" showUncoveredFiles=\"false\" showOnlySummary=\"true\"/>\n    </report>\n  </coverage>\n  <testsuites>\n    <testsuite name=\"Voyager Test Suite\">\n      <directory>tests</directory>\n    </testsuite>\n  </testsuites>\n  <logging>\n    <junit outputFile=\"build/report.junit.xml\"/>\n  </logging>\n  <php>\n    <env name=\"APP_ENV\" value=\"testing\"/>\n    <env name=\"APP_DEBUG\" value=\"true\"/>\n    <env name=\"APP_URL\" value=\"http://localhost\"/>\n    <env name=\"APP_KEY\" value=\"base64:M1igrxNfAWlVGyxxDholHqvVqvtPjAzCoJ+2/ILAVPw=\"/>\n  </php>\n  <source>\n    <include>\n      <directory suffix=\".php\">./src/</directory>\n    </include>\n  </source>\n</phpunit>\n"
  },
  {
    "path": "publishable/assets/css/app.css",
    "content": "@charset \"UTF-8\";\n/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-family:sans-serif}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{background:transparent!important;box-shadow:none!important;color:#000!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:\" (\" attr(href) \")\"}abbr[title]:after{content:\" (\" attr(title) \")\"}a[href^=\"#\"]:after,a[href^=\"javascript:\"]:after{content:\"\"}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:Glyphicons Halflings;src:url(voyager-assets?path=fonts/bootstrap/glyphicons-halflings-regular.eot);src:url(voyager-assets?path=fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix) format(\"embedded-opentype\"),url(voyager-assets?path=fonts/bootstrap/glyphicons-halflings-regular.woff2) format(\"woff2\"),url(voyager-assets?path=fonts/bootstrap/glyphicons-halflings-regular.woff) format(\"woff\"),url(voyager-assets?path=fonts/bootstrap/glyphicons-halflings-regular.ttf) format(\"truetype\"),url(voyager-assets?path=fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format(\"svg\")}.glyphicon{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Glyphicons Halflings;font-style:normal;font-weight:400;line-height:1;position:relative;top:1px}.glyphicon-asterisk:before{content:\"*\"}.glyphicon-plus:before{content:\"+\"}.glyphicon-eur:before,.glyphicon-euro:before{content:\"€\"}.glyphicon-minus:before{content:\"−\"}.glyphicon-cloud:before{content:\"☁\"}.glyphicon-envelope:before{content:\"✉\"}.glyphicon-pencil:before{content:\"✏\"}.glyphicon-glass:before{content:\"\\e001\"}.glyphicon-music:before{content:\"\\e002\"}.glyphicon-search:before{content:\"\\e003\"}.glyphicon-heart:before{content:\"\\e005\"}.glyphicon-star:before{content:\"\\e006\"}.glyphicon-star-empty:before{content:\"\\e007\"}.glyphicon-user:before{content:\"\\e008\"}.glyphicon-film:before{content:\"\\e009\"}.glyphicon-th-large:before{content:\"\\e010\"}.glyphicon-th:before{content:\"\\e011\"}.glyphicon-th-list:before{content:\"\\e012\"}.glyphicon-ok:before{content:\"\\e013\"}.glyphicon-remove:before{content:\"\\e014\"}.glyphicon-zoom-in:before{content:\"\\e015\"}.glyphicon-zoom-out:before{content:\"\\e016\"}.glyphicon-off:before{content:\"\\e017\"}.glyphicon-signal:before{content:\"\\e018\"}.glyphicon-cog:before{content:\"\\e019\"}.glyphicon-trash:before{content:\"\\e020\"}.glyphicon-home:before{content:\"\\e021\"}.glyphicon-file:before{content:\"\\e022\"}.glyphicon-time:before{content:\"\\e023\"}.glyphicon-road:before{content:\"\\e024\"}.glyphicon-download-alt:before{content:\"\\e025\"}.glyphicon-download:before{content:\"\\e026\"}.glyphicon-upload:before{content:\"\\e027\"}.glyphicon-inbox:before{content:\"\\e028\"}.glyphicon-play-circle:before{content:\"\\e029\"}.glyphicon-repeat:before{content:\"\\e030\"}.glyphicon-refresh:before{content:\"\\e031\"}.glyphicon-list-alt:before{content:\"\\e032\"}.glyphicon-lock:before{content:\"\\e033\"}.glyphicon-flag:before{content:\"\\e034\"}.glyphicon-headphones:before{content:\"\\e035\"}.glyphicon-volume-off:before{content:\"\\e036\"}.glyphicon-volume-down:before{content:\"\\e037\"}.glyphicon-volume-up:before{content:\"\\e038\"}.glyphicon-qrcode:before{content:\"\\e039\"}.glyphicon-barcode:before{content:\"\\e040\"}.glyphicon-tag:before{content:\"\\e041\"}.glyphicon-tags:before{content:\"\\e042\"}.glyphicon-book:before{content:\"\\e043\"}.glyphicon-bookmark:before{content:\"\\e044\"}.glyphicon-print:before{content:\"\\e045\"}.glyphicon-camera:before{content:\"\\e046\"}.glyphicon-font:before{content:\"\\e047\"}.glyphicon-bold:before{content:\"\\e048\"}.glyphicon-italic:before{content:\"\\e049\"}.glyphicon-text-height:before{content:\"\\e050\"}.glyphicon-text-width:before{content:\"\\e051\"}.glyphicon-align-left:before{content:\"\\e052\"}.glyphicon-align-center:before{content:\"\\e053\"}.glyphicon-align-right:before{content:\"\\e054\"}.glyphicon-align-justify:before{content:\"\\e055\"}.glyphicon-list:before{content:\"\\e056\"}.glyphicon-indent-left:before{content:\"\\e057\"}.glyphicon-indent-right:before{content:\"\\e058\"}.glyphicon-facetime-video:before{content:\"\\e059\"}.glyphicon-picture:before{content:\"\\e060\"}.glyphicon-map-marker:before{content:\"\\e062\"}.glyphicon-adjust:before{content:\"\\e063\"}.glyphicon-tint:before{content:\"\\e064\"}.glyphicon-edit:before{content:\"\\e065\"}.glyphicon-share:before{content:\"\\e066\"}.glyphicon-check:before{content:\"\\e067\"}.glyphicon-move:before{content:\"\\e068\"}.glyphicon-step-backward:before{content:\"\\e069\"}.glyphicon-fast-backward:before{content:\"\\e070\"}.glyphicon-backward:before{content:\"\\e071\"}.glyphicon-play:before{content:\"\\e072\"}.glyphicon-pause:before{content:\"\\e073\"}.glyphicon-stop:before{content:\"\\e074\"}.glyphicon-forward:before{content:\"\\e075\"}.glyphicon-fast-forward:before{content:\"\\e076\"}.glyphicon-step-forward:before{content:\"\\e077\"}.glyphicon-eject:before{content:\"\\e078\"}.glyphicon-chevron-left:before{content:\"\\e079\"}.glyphicon-chevron-right:before{content:\"\\e080\"}.glyphicon-plus-sign:before{content:\"\\e081\"}.glyphicon-minus-sign:before{content:\"\\e082\"}.glyphicon-remove-sign:before{content:\"\\e083\"}.glyphicon-ok-sign:before{content:\"\\e084\"}.glyphicon-question-sign:before{content:\"\\e085\"}.glyphicon-info-sign:before{content:\"\\e086\"}.glyphicon-screenshot:before{content:\"\\e087\"}.glyphicon-remove-circle:before{content:\"\\e088\"}.glyphicon-ok-circle:before{content:\"\\e089\"}.glyphicon-ban-circle:before{content:\"\\e090\"}.glyphicon-arrow-left:before{content:\"\\e091\"}.glyphicon-arrow-right:before{content:\"\\e092\"}.glyphicon-arrow-up:before{content:\"\\e093\"}.glyphicon-arrow-down:before{content:\"\\e094\"}.glyphicon-share-alt:before{content:\"\\e095\"}.glyphicon-resize-full:before{content:\"\\e096\"}.glyphicon-resize-small:before{content:\"\\e097\"}.glyphicon-exclamation-sign:before{content:\"\\e101\"}.glyphicon-gift:before{content:\"\\e102\"}.glyphicon-leaf:before{content:\"\\e103\"}.glyphicon-fire:before{content:\"\\e104\"}.glyphicon-eye-open:before{content:\"\\e105\"}.glyphicon-eye-close:before{content:\"\\e106\"}.glyphicon-warning-sign:before{content:\"\\e107\"}.glyphicon-plane:before{content:\"\\e108\"}.glyphicon-calendar:before{content:\"\\e109\"}.glyphicon-random:before{content:\"\\e110\"}.glyphicon-comment:before{content:\"\\e111\"}.glyphicon-magnet:before{content:\"\\e112\"}.glyphicon-chevron-up:before{content:\"\\e113\"}.glyphicon-chevron-down:before{content:\"\\e114\"}.glyphicon-retweet:before{content:\"\\e115\"}.glyphicon-shopping-cart:before{content:\"\\e116\"}.glyphicon-folder-close:before{content:\"\\e117\"}.glyphicon-folder-open:before{content:\"\\e118\"}.glyphicon-resize-vertical:before{content:\"\\e119\"}.glyphicon-resize-horizontal:before{content:\"\\e120\"}.glyphicon-hdd:before{content:\"\\e121\"}.glyphicon-bullhorn:before{content:\"\\e122\"}.glyphicon-bell:before{content:\"\\e123\"}.glyphicon-certificate:before{content:\"\\e124\"}.glyphicon-thumbs-up:before{content:\"\\e125\"}.glyphicon-thumbs-down:before{content:\"\\e126\"}.glyphicon-hand-right:before{content:\"\\e127\"}.glyphicon-hand-left:before{content:\"\\e128\"}.glyphicon-hand-up:before{content:\"\\e129\"}.glyphicon-hand-down:before{content:\"\\e130\"}.glyphicon-circle-arrow-right:before{content:\"\\e131\"}.glyphicon-circle-arrow-left:before{content:\"\\e132\"}.glyphicon-circle-arrow-up:before{content:\"\\e133\"}.glyphicon-circle-arrow-down:before{content:\"\\e134\"}.glyphicon-globe:before{content:\"\\e135\"}.glyphicon-wrench:before{content:\"\\e136\"}.glyphicon-tasks:before{content:\"\\e137\"}.glyphicon-filter:before{content:\"\\e138\"}.glyphicon-briefcase:before{content:\"\\e139\"}.glyphicon-fullscreen:before{content:\"\\e140\"}.glyphicon-dashboard:before{content:\"\\e141\"}.glyphicon-paperclip:before{content:\"\\e142\"}.glyphicon-heart-empty:before{content:\"\\e143\"}.glyphicon-link:before{content:\"\\e144\"}.glyphicon-phone:before{content:\"\\e145\"}.glyphicon-pushpin:before{content:\"\\e146\"}.glyphicon-usd:before{content:\"\\e148\"}.glyphicon-gbp:before{content:\"\\e149\"}.glyphicon-sort:before{content:\"\\e150\"}.glyphicon-sort-by-alphabet:before{content:\"\\e151\"}.glyphicon-sort-by-alphabet-alt:before{content:\"\\e152\"}.glyphicon-sort-by-order:before{content:\"\\e153\"}.glyphicon-sort-by-order-alt:before{content:\"\\e154\"}.glyphicon-sort-by-attributes:before{content:\"\\e155\"}.glyphicon-sort-by-attributes-alt:before{content:\"\\e156\"}.glyphicon-unchecked:before{content:\"\\e157\"}.glyphicon-expand:before{content:\"\\e158\"}.glyphicon-collapse-down:before{content:\"\\e159\"}.glyphicon-collapse-up:before{content:\"\\e160\"}.glyphicon-log-in:before{content:\"\\e161\"}.glyphicon-flash:before{content:\"\\e162\"}.glyphicon-log-out:before{content:\"\\e163\"}.glyphicon-new-window:before{content:\"\\e164\"}.glyphicon-record:before{content:\"\\e165\"}.glyphicon-save:before{content:\"\\e166\"}.glyphicon-open:before{content:\"\\e167\"}.glyphicon-saved:before{content:\"\\e168\"}.glyphicon-import:before{content:\"\\e169\"}.glyphicon-export:before{content:\"\\e170\"}.glyphicon-send:before{content:\"\\e171\"}.glyphicon-floppy-disk:before{content:\"\\e172\"}.glyphicon-floppy-saved:before{content:\"\\e173\"}.glyphicon-floppy-remove:before{content:\"\\e174\"}.glyphicon-floppy-save:before{content:\"\\e175\"}.glyphicon-floppy-open:before{content:\"\\e176\"}.glyphicon-credit-card:before{content:\"\\e177\"}.glyphicon-transfer:before{content:\"\\e178\"}.glyphicon-cutlery:before{content:\"\\e179\"}.glyphicon-header:before{content:\"\\e180\"}.glyphicon-compressed:before{content:\"\\e181\"}.glyphicon-earphone:before{content:\"\\e182\"}.glyphicon-phone-alt:before{content:\"\\e183\"}.glyphicon-tower:before{content:\"\\e184\"}.glyphicon-stats:before{content:\"\\e185\"}.glyphicon-sd-video:before{content:\"\\e186\"}.glyphicon-hd-video:before{content:\"\\e187\"}.glyphicon-subtitles:before{content:\"\\e188\"}.glyphicon-sound-stereo:before{content:\"\\e189\"}.glyphicon-sound-dolby:before{content:\"\\e190\"}.glyphicon-sound-5-1:before{content:\"\\e191\"}.glyphicon-sound-6-1:before{content:\"\\e192\"}.glyphicon-sound-7-1:before{content:\"\\e193\"}.glyphicon-copyright-mark:before{content:\"\\e194\"}.glyphicon-registration-mark:before{content:\"\\e195\"}.glyphicon-cloud-download:before{content:\"\\e197\"}.glyphicon-cloud-upload:before{content:\"\\e198\"}.glyphicon-tree-conifer:before{content:\"\\e199\"}.glyphicon-tree-deciduous:before{content:\"\\e200\"}.glyphicon-cd:before{content:\"\\e201\"}.glyphicon-save-file:before{content:\"\\e202\"}.glyphicon-open-file:before{content:\"\\e203\"}.glyphicon-level-up:before{content:\"\\e204\"}.glyphicon-copy:before{content:\"\\e205\"}.glyphicon-paste:before{content:\"\\e206\"}.glyphicon-alert:before{content:\"\\e209\"}.glyphicon-equalizer:before{content:\"\\e210\"}.glyphicon-king:before{content:\"\\e211\"}.glyphicon-queen:before{content:\"\\e212\"}.glyphicon-pawn:before{content:\"\\e213\"}.glyphicon-bishop:before{content:\"\\e214\"}.glyphicon-knight:before{content:\"\\e215\"}.glyphicon-baby-formula:before{content:\"\\e216\"}.glyphicon-tent:before{content:\"⛺\"}.glyphicon-blackboard:before{content:\"\\e218\"}.glyphicon-bed:before{content:\"\\e219\"}.glyphicon-apple:before{content:\"\\f8ff\"}.glyphicon-erase:before{content:\"\\e221\"}.glyphicon-hourglass:before{content:\"⌛\"}.glyphicon-lamp:before{content:\"\\e223\"}.glyphicon-duplicate:before{content:\"\\e224\"}.glyphicon-piggy-bank:before{content:\"\\e225\"}.glyphicon-scissors:before{content:\"\\e226\"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:\"\\e227\"}.glyphicon-jpy:before,.glyphicon-yen:before{content:\"¥\"}.glyphicon-rub:before,.glyphicon-ruble:before{content:\"₽\"}.glyphicon-scale:before{content:\"\\e230\"}.glyphicon-ice-lolly:before{content:\"\\e231\"}.glyphicon-ice-lolly-tasted:before{content:\"\\e232\"}.glyphicon-education:before{content:\"\\e233\"}.glyphicon-option-horizontal:before{content:\"\\e234\"}.glyphicon-option-vertical:before{content:\"\\e235\"}.glyphicon-menu-hamburger:before{content:\"\\e236\"}.glyphicon-modal-window:before{content:\"\\e237\"}.glyphicon-oil:before{content:\"\\e238\"}.glyphicon-grain:before{content:\"\\e239\"}.glyphicon-sunglasses:before{content:\"\\e240\"}.glyphicon-text-size:before{content:\"\\e241\"}.glyphicon-text-color:before{content:\"\\e242\"}.glyphicon-text-background:before{content:\"\\e243\"}.glyphicon-object-align-top:before{content:\"\\e244\"}.glyphicon-object-align-bottom:before{content:\"\\e245\"}.glyphicon-object-align-horizontal:before{content:\"\\e246\"}.glyphicon-object-align-left:before{content:\"\\e247\"}.glyphicon-object-align-vertical:before{content:\"\\e248\"}.glyphicon-object-align-right:before{content:\"\\e249\"}.glyphicon-triangle-right:before{content:\"\\e250\"}.glyphicon-triangle-left:before{content:\"\\e251\"}.glyphicon-triangle-bottom:before{content:\"\\e252\"}.glyphicon-triangle-top:before{content:\"\\e253\"}.glyphicon-console:before{content:\"\\e254\"}.glyphicon-superscript:before{content:\"\\e255\"}.glyphicon-subscript:before{content:\"\\e256\"}.glyphicon-menu-left:before{content:\"\\e257\"}.glyphicon-menu-right:before{content:\"\\e258\"}.glyphicon-menu-down:before{content:\"\\e259\"}.glyphicon-menu-up:before{content:\"\\e260\"}*,:after,:before{box-sizing:border-box}html{-webkit-tap-highlight-color:rgba(0,0,0,0);font-size:10px}body{background-color:#fff;color:#333;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{background-color:#fff;border:1px solid #ddd;border-radius:4px;display:inline-block;height:auto;line-height:1.428571429;max-width:100%;padding:4px;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{border:0;border-top:1px solid #eee;margin-bottom:20px;margin-top:20px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:inherit;font-family:inherit;font-weight:500;line-height:1.1}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{color:#777;font-weight:400;line-height:1}.h1,.h2,.h3,h1,h2,h3{margin-bottom:10px;margin-top:20px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-bottom:10px;margin-top:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{font-size:16px;font-weight:300;line-height:1.4;margin-bottom:20px}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-lowercase{text-transform:lowercase}.initialism,.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{background-color:#337ab7;color:#fff}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{border-bottom:1px solid #eee;margin:40px 0 20px;padding-bottom:9px}ol,ul{margin-bottom:10px;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-bottom:20px;margin-top:0}dd,dt{line-height:1.428571429}dt{font-weight:700}dd{margin-left:0}.dl-horizontal dd:after,.dl-horizontal dd:before{content:\" \";display:table}.dl-horizontal dd:after{clear:both}@media (min-width:768px){.dl-horizontal dt{clear:left;float:left;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:160px}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help}.initialism{font-size:90%}blockquote{border-left:5px solid #eee;font-size:17.5px;margin:0 0 20px;padding:10px 20px}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{color:#777;display:block;font-size:80%;line-height:1.428571429}blockquote .small:before,blockquote footer:before,blockquote small:before{content:\"— \"}.blockquote-reverse,blockquote.pull-right{border-left:0;border-right:5px solid #eee;padding-left:0;padding-right:15px;text-align:right}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:\"\"}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:\" —\"}address{font-style:normal;line-height:1.428571429;margin-bottom:20px}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Courier New,monospace}code{background-color:#f9f2f4;border-radius:4px;color:#c7254e}code,kbd{font-size:90%;padding:2px 4px}kbd{background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);color:#fff}kbd kbd{box-shadow:none;font-size:100%;font-weight:700;padding:0}pre{word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px;color:#333;display:block;font-size:13px;line-height:1.428571429;margin:0 0 10px;padding:9.5px;word-break:break-all}pre code{background-color:transparent;border-radius:0;color:inherit;font-size:inherit;padding:0;white-space:pre-wrap}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.container:after,.container:before{content:\" \";display:table}.container:after{clear:both}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.container-fluid:after,.container-fluid:before{content:\" \";display:table}.container-fluid:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:after,.row:before{content:\" \";display:table}.row:after{clear:both}.row-no-gutters{margin-left:0;margin-right:0}.row-no-gutters [class*=col-]{padding-left:0;padding-right:0}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{min-height:1px;padding-left:15px;padding-right:15px;position:relative}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}table col[class*=col-]{display:table-column;float:none;position:static}table td[class*=col-],table th[class*=col-]{display:table-cell;float:none;position:static}caption{color:#777;padding-bottom:8px;padding-top:8px}caption,th{text-align:left}.table{margin-bottom:20px;max-width:100%;width:100%}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{border-top:1px solid #ddd;line-height:1.428571429;padding:8px;vertical-align:top}.table>thead>tr>th{border-bottom:2px solid #ddd;vertical-align:bottom}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;margin-bottom:15px;overflow-y:hidden;width:100%}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{margin:0;min-width:0}fieldset,legend{border:0;padding:0}legend{border-bottom:1px solid #e5e5e5;color:#333;display:block;font-size:21px;line-height:inherit;margin-bottom:20px;width:100%}label{display:inline-block;font-weight:700;margin-bottom:5px;max-width:100%}input[type=search]{-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box}input[type=checkbox],input[type=radio]{line-height:normal;margin:4px 0 0;margin-top:1px\\9}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{padding-top:7px}.form-control,output{color:#555;display:block;font-size:14px;line-height:1.428571429}.form-control{border:1px solid #ccc;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);height:34px;padding:6px 12px;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.form-control:focus{border-color:#66afe9;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);outline:0}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>.input-group-btn>input[type=time].btn,input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>.input-group-btn>input[type=time].btn,input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{display:block;margin-bottom:10px;margin-top:10px;position:relative}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.checkbox label,.radio label{cursor:pointer;font-weight:400;margin-bottom:0;min-height:20px;padding-left:20px}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{margin-left:-20px;margin-top:4px\\9;position:absolute}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{cursor:pointer;display:inline-block;font-weight:400;margin-bottom:0;padding-left:20px;position:relative;vertical-align:middle}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-left:10px;margin-top:0}.form-control-static{margin-bottom:0;min-height:34px;padding-bottom:7px;padding-top:7px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{border-radius:3px;height:30px;padding:5px 10px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:30px;line-height:30px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 10px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{font-size:12px;height:30px;line-height:1.5;min-height:32px;padding:6px 10px}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:46px;line-height:46px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 16px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{font-size:18px;height:46px;line-height:1.3333333;min-height:38px;padding:11px 16px}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{display:block;height:34px;line-height:34px;pointer-events:none;position:absolute;right:0;text-align:center;top:0;width:34px;z-index:2}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{height:46px;line-height:46px;width:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{height:30px;line-height:30px;width:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{background-color:#dff0d8;border-color:#3c763d;color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{background-color:#fcf8e3;border-color:#8a6d3b;color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{background-color:#f2dede;border-color:#a94442;color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{color:#737373;display:block;margin-bottom:10px;margin-top:5px}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;vertical-align:middle;width:auto}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{margin-left:0;position:relative}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-bottom:0;margin-top:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after,.form-horizontal .form-group:before{content:\" \";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width:768px){.form-horizontal .control-label{margin-bottom:0;padding-top:7px;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{font-size:18px;padding-top:11px}.form-horizontal .form-group-sm .control-label{font-size:12px;padding-top:6px}}.btn{background-image:none;border:1px solid transparent;border-radius:4px;cursor:pointer;display:inline-block;font-weight:400;line-height:1.428571429;margin-bottom:0;padding:6px 12px;text-align:center;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;box-shadow:inset 0 3px 5px rgba(0,0,0,.125);outline:0}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{box-shadow:none;cursor:not-allowed;filter:alpha(opacity=65);opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{background-color:#fff;border-color:#ccc;color:#333}.btn-default.focus,.btn-default:focus{background-color:#e6e6e6;border-color:#8c8c8c;color:#333}.btn-default:hover{background-color:#e6e6e6;border-color:#adadad;color:#333}.btn-default.active,.btn-default:active,.open>.btn-default.dropdown-toggle{background-color:#e6e6e6;background-image:none;border-color:#adadad;color:#333}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{background-color:#d4d4d4;border-color:#8c8c8c;color:#333}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{background-color:#333;color:#fff}.btn-primary{background-color:#337ab7;border-color:#2e6da4;color:#fff}.btn-primary.focus,.btn-primary:focus{background-color:#286090;border-color:#122b40;color:#fff}.btn-primary:hover{background-color:#286090;border-color:#204d74;color:#fff}.btn-primary.active,.btn-primary:active,.open>.btn-primary.dropdown-toggle{background-color:#286090;background-image:none;border-color:#204d74;color:#fff}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{background-color:#204d74;border-color:#122b40;color:#fff}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{background-color:#fff;color:#337ab7}.btn-success{background-color:#5cb85c;border-color:#4cae4c;color:#fff}.btn-success.focus,.btn-success:focus{background-color:#449d44;border-color:#255625;color:#fff}.btn-success:hover{background-color:#449d44;border-color:#398439;color:#fff}.btn-success.active,.btn-success:active,.open>.btn-success.dropdown-toggle{background-color:#449d44;background-image:none;border-color:#398439;color:#fff}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{background-color:#398439;border-color:#255625;color:#fff}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{background-color:#fff;color:#5cb85c}.btn-info{background-color:#5bc0de;border-color:#46b8da;color:#fff}.btn-info.focus,.btn-info:focus{background-color:#31b0d5;border-color:#1b6d85;color:#fff}.btn-info:hover{background-color:#31b0d5;border-color:#269abc;color:#fff}.btn-info.active,.btn-info:active,.open>.btn-info.dropdown-toggle{background-color:#31b0d5;background-image:none;border-color:#269abc;color:#fff}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{background-color:#269abc;border-color:#1b6d85;color:#fff}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{background-color:#fff;color:#5bc0de}.btn-warning{background-color:#f0ad4e;border-color:#eea236;color:#fff}.btn-warning.focus,.btn-warning:focus{background-color:#ec971f;border-color:#985f0d;color:#fff}.btn-warning:hover{background-color:#ec971f;border-color:#d58512;color:#fff}.btn-warning.active,.btn-warning:active,.open>.btn-warning.dropdown-toggle{background-color:#ec971f;background-image:none;border-color:#d58512;color:#fff}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{background-color:#d58512;border-color:#985f0d;color:#fff}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{background-color:#fff;color:#f0ad4e}.btn-danger{background-color:#d9534f;border-color:#d43f3a;color:#fff}.btn-danger.focus,.btn-danger:focus{background-color:#c9302c;border-color:#761c19;color:#fff}.btn-danger:hover{background-color:#c9302c;border-color:#ac2925;color:#fff}.btn-danger.active,.btn-danger:active,.open>.btn-danger.dropdown-toggle{background-color:#c9302c;background-image:none;border-color:#ac2925;color:#fff}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{background-color:#ac2925;border-color:#761c19;color:#fff}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{background-color:#fff;color:#d9534f}.btn-link{border-radius:0;color:#337ab7;font-weight:400}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{background-color:transparent;color:#23527c;text-decoration:underline}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{border-radius:6px;padding:10px 16px}.btn-group-sm>.btn,.btn-sm{border-radius:3px;padding:5px 10px}.btn-group-xs>.btn,.btn-xs{border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;position:relative;transition-duration:.35s;transition-property:height,visibility;transition-timing-function:ease}.caret{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px dashed;border-top:4px solid\\9;display:inline-block;height:0;margin-left:2px;vertical-align:middle;width:0}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175);display:none;float:left;font-size:14px;left:0;list-style:none;margin:2px 0 0;min-width:160px;padding:5px 0;position:absolute;text-align:left;top:100%;z-index:1000}.dropdown-menu.pull-right{left:auto;right:0}.dropdown-menu .divider{background-color:#e5e5e5;height:1px;margin:9px 0;overflow:hidden}.dropdown-menu>li>a{color:#333;line-height:1.428571429;padding:3px 20px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#f5f5f5;color:#262626;text-decoration:none}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#337ab7;color:#fff;outline:0;text-decoration:none}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{background-color:transparent;background-image:none;cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);text-decoration:none}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{color:#777;display:block;font-size:12px;line-height:1.428571429;padding:3px 20px;white-space:nowrap}.dropdown-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;z-index:990}.pull-right>.dropdown-menu{left:auto;right:0}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-bottom:4px dashed;border-bottom:4px solid\\9;border-top:0;content:\"\"}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{bottom:100%;margin-bottom:2px;top:auto}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{display:inline-block;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{float:left;position:relative}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after,.btn-toolbar:before{content:\" \";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;max-width:100%;width:100%}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before{content:\" \";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-left:0;margin-top:-1px}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:0;border-top-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{border-collapse:separate;display:table;table-layout:fixed;width:100%}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{clip:rect(0,0,0,0);pointer-events:none;position:absolute}.input-group{border-collapse:separate;display:table;position:relative}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{float:left;margin-bottom:0;position:relative;width:100%;z-index:2}.input-group .form-control:focus{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{vertical-align:middle;white-space:nowrap;width:1%}.input-group-addon{background-color:#eee;border:1px solid #ccc;border-radius:4px;color:#555;font-size:14px;font-weight:400;line-height:1;padding:6px 12px;text-align:center}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{border-radius:3px;font-size:12px;padding:5px 10px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{border-radius:6px;font-size:18px;padding:10px 16px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn,.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px;z-index:2}.nav{list-style:none;margin-bottom:0;padding-left:0}.nav:after,.nav:before{content:\" \";display:table}.nav:after{clear:both}.nav>li,.nav>li>a{display:block;position:relative}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{background-color:#eee;text-decoration:none}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{background-color:transparent;color:#777;cursor:not-allowed;text-decoration:none}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{background-color:#e5e5e5;height:1px;margin:9px 0;overflow:hidden}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left}.nav-tabs>li>a{border:1px solid transparent;border-radius:4px 4px 0 0;line-height:1.428571429;margin-right:2px}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{background-color:#fff;border:1px solid;border-color:#ddd #ddd transparent;color:#555;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{background-color:#337ab7;color:#fff}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-left:0;margin-top:2px}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{left:auto;top:auto}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-radius:4px;margin-right:0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px}.navbar{border:1px solid transparent;margin-bottom:20px;min-height:50px;position:relative}.navbar:after,.navbar:before{content:\" \";display:table}.navbar:after{clear:both}@media (min-width:768px){.navbar{border-radius:4px}}.navbar-header:after,.navbar-header:before{content:\" \";display:table}.navbar-header:after{clear:both}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{-webkit-overflow-scrolling:touch;border-top:1px solid transparent;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);overflow-x:visible;padding-left:15px;padding-right:15px}.navbar-collapse:after,.navbar-collapse:before{content:\" \";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{border-top:0;box-shadow:none;width:auto}.navbar-collapse.collapse{display:block!important;height:auto!important;overflow:visible!important;padding-bottom:0}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom,.navbar-fixed-top{left:0;position:fixed;right:0;z-index:1030}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{border-width:0 0 1px;top:0}.navbar-fixed-bottom{border-width:1px 0 0;bottom:0;margin-bottom:0}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:0;margin-right:0}}.navbar-static-top{border-width:0 0 1px;z-index:1000}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;font-size:18px;height:50px;line-height:20px;padding:15px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px;float:right;margin-bottom:8px;margin-right:15px;margin-top:8px;padding:9px 10px;position:relative}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{border-radius:1px;display:block;height:2px;width:22px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{line-height:20px;padding-bottom:10px;padding-top:10px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{background-color:transparent;border:0;box-shadow:none;float:none;margin-top:0;position:static;width:auto}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-bottom:15px;padding-top:15px}}.navbar-form{border-bottom:1px solid transparent;border-top:1px solid transparent;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);margin:8px -15px;padding:10px 15px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;vertical-align:middle;width:auto}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-bottom:0;margin-top:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{margin-left:0;position:relative}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{border:0;box-shadow:none;margin-left:0;margin-right:0;padding-bottom:0;padding-top:0;width:auto}}.navbar-nav>li>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:4px;border-top-right-radius:4px;margin-bottom:0}.navbar-btn{margin-bottom:8px;margin-top:8px}.btn-group-sm>.navbar-btn.btn,.navbar-btn.btn-sm{margin-bottom:10px;margin-top:10px}.btn-group-xs>.navbar-btn.btn,.navbar-btn.btn-xs{margin-bottom:14px;margin-top:14px}.navbar-text{margin-bottom:15px;margin-top:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{background-color:transparent;color:#5e5e5e}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{background-color:transparent;color:#333}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{background-color:#e7e7e7;color:#555}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{background-color:transparent;color:#ccc}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{background-color:transparent;color:#333}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#e7e7e7;color:#555}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:transparent;color:#ccc}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{background-color:transparent;color:#fff}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:transparent;color:#fff}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{background-color:#090909;color:#fff}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{background-color:transparent;color:#444}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#090909;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{background-color:transparent;color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:#090909;color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{background-color:transparent;color:#444}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{background-color:#f5f5f5;border-radius:4px;margin-bottom:20px;padding:8px 15px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{color:#ccc;content:\"/ \";padding:0 5px}.breadcrumb>.active{color:#777}.pagination{border-radius:4px;display:inline-block;margin:20px 0;padding-left:0}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{background-color:#fff;border:1px solid #ddd;color:#337ab7;float:left;line-height:1.428571429;margin-left:-1px;padding:6px 12px;position:relative;text-decoration:none}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{background-color:#eee;border-color:#ddd;color:#23527c;z-index:2}.pagination>li:first-child>a,.pagination>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px;margin-left:0}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{background-color:#337ab7;border-color:#337ab7;color:#fff;cursor:default;z-index:3}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{background-color:#fff;border-color:#ddd;color:#777}.pagination-lg>li>a,.pagination-lg>li>span{font-size:18px;padding:10px 16px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{font-size:12px;padding:5px 10px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{list-style:none;margin:20px 0;padding-left:0;text-align:center}.pager:after,.pager:before{content:\" \";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{background-color:#fff;border:1px solid #ddd;border-radius:15px;display:inline-block;padding:5px 14px}.pager li>a:focus,.pager li>a:hover{background-color:#eee;text-decoration:none}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{background-color:#fff;color:#777;cursor:not-allowed}.label{border-radius:.25em;color:#fff;display:inline;font-size:75%;font-weight:700;line-height:1;padding:.2em .6em .3em;text-align:center;vertical-align:baseline;white-space:nowrap}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:focus,a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{background-color:#777;border-radius:10px;color:#fff;display:inline-block;font-size:12px;font-weight:700;line-height:1;min-width:10px;padding:3px 7px;text-align:center;vertical-align:middle;white-space:nowrap}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{padding:1px 5px;top:0}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{background-color:#fff;color:#337ab7}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:focus,a.badge:hover{color:#fff;cursor:pointer;text-decoration:none}.jumbotron{background-color:#eee;margin-bottom:30px;padding-bottom:30px;padding-top:30px}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{font-size:21px;font-weight:200;margin-bottom:15px}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-bottom:48px;padding-top:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{background-color:#fff;border:1px solid #ddd;border-radius:4px;display:block;line-height:1.428571429;margin-bottom:20px;padding:4px;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{display:block;height:auto;margin-left:auto;margin-right:auto;max-width:100%}.thumbnail .caption{color:#333;padding:9px}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.alert{border:1px solid transparent;border-radius:4px;margin-bottom:20px;padding:15px}.alert h4{color:inherit;margin-top:0}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{color:inherit;position:relative;right:-21px;top:-2px}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{background-color:#f5f5f5;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);height:20px;margin-bottom:20px;overflow:hidden}.progress-bar{background-color:#337ab7;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);color:#fff;float:left;font-size:12px;height:100%;line-height:20px;text-align:center;transition:width .6s ease;width:0}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-bottom:5px;margin-top:0}.media-list{list-style:none;padding-left:0}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{background-color:#fff;border:1px solid #ddd;display:block;margin-bottom:-1px;padding:10px 15px;position:relative}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;margin-bottom:0}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{background-color:#337ab7;border-color:#337ab7;color:#fff;z-index:2}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{background-color:#f5f5f5;color:#555;text-decoration:none}button.list-group-item{text-align:left;width:100%}.list-group-item-success{background-color:#dff0d8;color:#3c763d}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{background-color:#d0e9c6;color:#3c763d}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{background-color:#3c763d;border-color:#3c763d;color:#fff}.list-group-item-info{background-color:#d9edf7;color:#31708f}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{background-color:#c4e3f3;color:#31708f}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{background-color:#31708f;border-color:#31708f;color:#fff}.list-group-item-warning{background-color:#fcf8e3;color:#8a6d3b}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{background-color:#faf2cc;color:#8a6d3b}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{background-color:#8a6d3b;border-color:#8a6d3b;color:#fff}.list-group-item-danger{background-color:#f2dede;color:#a94442}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{background-color:#ebcccc;color:#a94442}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{background-color:#a94442;border-color:#a94442;color:#fff}.list-group-item-heading{margin-bottom:5px;margin-top:0}.list-group-item-text{line-height:1.3;margin-bottom:0}.panel{background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.05);margin-bottom:20px}.panel-body{padding:15px}.panel-body:after,.panel-body:before{content:\" \";display:table}.panel-body:after{clear:both}.panel-heading{border-top-left-radius:3px;border-top-right-radius:3px;padding:10px 15px}.panel-heading>.dropdown .dropdown-toggle,.panel-title{color:inherit}.panel-title{font-size:16px;margin-bottom:0;margin-top:0}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{background-color:#f5f5f5;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:1px solid #ddd;padding:10px 15px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-radius:0;border-width:1px 0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{border-radius:4px;margin-bottom:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{background-color:#f5f5f5;border-color:#ddd;color:#333}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{background-color:#333;color:#f5f5f5}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{background-color:#337ab7;border-color:#337ab7;color:#fff}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{background-color:#fff;color:#337ab7}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{background-color:#3c763d;color:#dff0d8}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{background-color:#31708f;color:#d9edf7}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{background-color:#8a6d3b;color:#fcf8e3}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{background-color:#a94442;color:#f2dede}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{display:block;height:0;overflow:hidden;padding:0;position:relative}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{border:0;bottom:0;height:100%;left:0;position:absolute;top:0;width:100%}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05);margin-bottom:20px;min-height:20px;padding:19px}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{border-radius:6px}.well-sm{border-radius:3px;padding:9px}.close{color:#000;filter:alpha(opacity=20);float:right;font-size:21px;font-weight:700;line-height:1;opacity:.2;text-shadow:0 1px 0 #fff}.close:focus,.close:hover{color:#000;cursor:pointer;filter:alpha(opacity=50);opacity:.5;text-decoration:none}button.close{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;cursor:pointer;padding:0}.modal,.modal-open{overflow:hidden}.modal{-webkit-overflow-scrolling:touch;bottom:0;display:none;left:0;outline:0;position:fixed;right:0;top:0;z-index:1050}.modal.fade .modal-dialog{transform:translateY(-25%);transition:transform .3s ease-out}.modal.in .modal-dialog{transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{margin:10px;position:relative;width:auto}.modal-content{background-clip:padding-box;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0;position:relative}.modal-backdrop{background-color:#000;bottom:0;left:0;position:fixed;right:0;top:0;z-index:1040}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{border-bottom:1px solid #e5e5e5;padding:15px}.modal-header:after,.modal-header:before{content:\" \";display:table}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{line-height:1.428571429;margin:0}.modal-body{padding:15px;position:relative}.modal-footer{border-top:1px solid #e5e5e5;padding:15px;text-align:right}.modal-footer:after,.modal-footer:before{content:\" \";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{height:50px;overflow:scroll;position:absolute;top:-9999px;width:50px}@media (min-width:768px){.modal-dialog{margin:30px auto;width:600px}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{word-wrap:normal;display:block;filter:alpha(opacity=0);font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.428571429;opacity:0;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:1070}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip.top .tooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;left:50%;margin-left:-5px}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{border-top-color:#000;border-width:5px 5px 0;bottom:0;margin-bottom:-5px}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{border-right-color:#000;border-width:5px 5px 5px 0;left:0;margin-top:-5px;top:50%}.tooltip.left .tooltip-arrow{border-left-color:#000;border-width:5px 0 5px 5px;margin-top:-5px;right:0;top:50%}.tooltip.bottom .tooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:50%;margin-left:-5px;top:0}.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;margin-top:-5px;right:5px;top:0}.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#000;border-width:0 5px 5px;left:5px;margin-top:-5px;top:0}.tooltip-inner{background-color:#000;border-radius:4px;color:#fff;max-width:200px;padding:3px 8px;text-align:center}.tooltip-arrow{border-color:transparent;border-style:solid;height:0;position:absolute;width:0}.popover{word-wrap:normal;background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2);display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;left:0;letter-spacing:normal;line-break:auto;line-height:1.428571429;max-width:276px;padding:1px;position:absolute;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;top:0;white-space:normal;word-break:normal;word-spacing:normal;z-index:1060}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{border-color:transparent;border-style:solid;display:block;height:0;position:absolute;width:0}.popover>.arrow:after{border-width:10px;content:\"\"}.popover.top>.arrow{border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px;left:50%;margin-left:-11px}.popover.top>.arrow:after{border-bottom-width:0;border-top-color:#fff;bottom:1px;content:\" \";margin-left:-10px}.popover.right>.arrow{border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25);left:-11px;margin-top:-11px;top:50%}.popover.right>.arrow:after{border-left-width:0;border-right-color:#fff;bottom:-10px;content:\" \";left:1px}.popover.bottom>.arrow{border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);border-top-width:0;left:50%;margin-left:-11px;top:-11px}.popover.bottom>.arrow:after{border-bottom-color:#fff;border-top-width:0;content:\" \";margin-left:-10px;top:1px}.popover.left>.arrow{border-left-color:#999;border-left-color:rgba(0,0,0,.25);border-right-width:0;margin-top:-11px;right:-11px;top:50%}.popover.left>.arrow:after{border-left-color:#fff;border-right-width:0;bottom:-10px;content:\" \";right:1px}.popover-title{background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0;font-size:14px;margin:0;padding:8px 14px}.popover-content{padding:9px 14px}.carousel,.carousel-inner{position:relative}.carousel-inner{overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;transition:left .6s ease-in-out}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;height:auto;line-height:1;max-width:100%}@media (-webkit-transform-3d),(transform-3d){.carousel-inner>.item{-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px;transition:transform .6s ease-in-out}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;transform:translateZ(0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{background-color:transparent;bottom:0;color:#fff;filter:alpha(opacity=50);font-size:20px;left:0;opacity:.5;position:absolute;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);top:0;width:15%}.carousel-control.left{background-image:linear-gradient(90deg,rgba(0,0,0,.5) 0,transparent);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#80000000\",endColorstr=\"#00000000\",GradientType=1)}.carousel-control.right{background-image:linear-gradient(90deg,transparent 0,rgba(0,0,0,.5));background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#00000000\",endColorstr=\"#80000000\",GradientType=1);left:auto;right:0}.carousel-control:focus,.carousel-control:hover{color:#fff;filter:alpha(opacity=90);opacity:.9;outline:0;text-decoration:none}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{display:inline-block;margin-top:-10px;position:absolute;top:50%;z-index:5}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px;right:50%}.carousel-control .icon-next,.carousel-control .icon-prev{font-family:serif;height:20px;line-height:1;width:20px}.carousel-control .icon-prev:before{content:\"‹\"}.carousel-control .icon-next:before{content:\"›\"}.carousel-indicators{bottom:10px;left:50%;list-style:none;margin-left:-30%;padding-left:0;position:absolute;text-align:center;width:60%;z-index:15}.carousel-indicators li{background-color:#000\\9;background-color:transparent;border:1px solid #fff;border-radius:10px;cursor:pointer;display:inline-block;height:10px;margin:1px;text-indent:-999px;width:10px}.carousel-indicators .active{background-color:#fff;height:12px;margin:0;width:12px}.carousel-caption{bottom:20px;color:#fff;left:15%;padding-bottom:20px;padding-top:20px;position:absolute;right:15%;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{font-size:30px;height:30px;margin-top:-10px;width:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;padding-bottom:30px;right:20%}.carousel-indicators{bottom:20px}}.clearfix:after,.clearfix:before{content:\" \";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{background-color:transparent;border:0;color:transparent;font:0/0 a;text-shadow:none}.hidden{display:none!important}.affix{position:fixed}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}\n/*!\n* animate.css - https://animate.style/\n* Version - 4.1.1\n* Licensed under the MIT license - http://opensource.org/licenses/MIT\n*\n* Copyright (c) 2020 Animate.css\n*/:root{--animate-duration:1s;--animate-delay:1s;--animate-repeat:1}.animate__animated{animation-duration:1s;animation-duration:var(--animate-duration);animation-fill-mode:both}.animate__animated.animate__infinite{animation-iteration-count:infinite}.animate__animated.animate__repeat-1{animation-iteration-count:1;animation-iteration-count:var(--animate-repeat)}.animate__animated.animate__repeat-2{animation-iteration-count:2;animation-iteration-count:calc(var(--animate-repeat)*2)}.animate__animated.animate__repeat-3{animation-iteration-count:3;animation-iteration-count:calc(var(--animate-repeat)*3)}.animate__animated.animate__delay-1s{animation-delay:1s;animation-delay:var(--animate-delay)}.animate__animated.animate__delay-2s{animation-delay:2s;animation-delay:calc(var(--animate-delay)*2)}.animate__animated.animate__delay-3s{animation-delay:3s;animation-delay:calc(var(--animate-delay)*3)}.animate__animated.animate__delay-4s{animation-delay:4s;animation-delay:calc(var(--animate-delay)*4)}.animate__animated.animate__delay-5s{animation-delay:5s;animation-delay:calc(var(--animate-delay)*5)}.animate__animated.animate__faster{animation-duration:.5s;animation-duration:calc(var(--animate-duration)/2)}.animate__animated.animate__fast{animation-duration:.8s;animation-duration:calc(var(--animate-duration)*.8)}.animate__animated.animate__slow{animation-duration:2s;animation-duration:calc(var(--animate-duration)*2)}.animate__animated.animate__slower{animation-duration:3s;animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animate__animated{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important}.animate__animated[class*=Out]{opacity:0}}@keyframes bounce{0%,20%,53%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translateZ(0)}40%,43%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{transform:translateZ(0) scaleY(.95);transition-timing-function:cubic-bezier(.215,.61,.355,1)}90%{transform:translate3d(0,-4px,0) scaleY(1.02)}}.animate__bounce{animation-name:bounce;transform-origin:center bottom}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.animate__flash{animation-name:flash}.animate__pulse{animation-name:pulse;animation-timing-function:ease-in-out}@keyframes rubberBand{0%{transform:scaleX(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scaleX(1)}}.animate__rubberBand{animation-name:rubberBand}@keyframes shakeX{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}.animate__shakeX{animation-name:shakeX}@keyframes shakeY{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(0,-10px,0)}20%,40%,60%,80%{transform:translate3d(0,10px,0)}}.animate__shakeY{animation-name:shakeY}@keyframes headShake{0%{transform:translateX(0)}6.5%{transform:translateX(-6px) rotateY(-9deg)}18.5%{transform:translateX(5px) rotateY(7deg)}31.5%{transform:translateX(-3px) rotateY(-5deg)}43.5%{transform:translateX(2px) rotateY(3deg)}50%{transform:translateX(0)}}.animate__headShake{animation-name:headShake;animation-timing-function:ease-in-out}@keyframes swing{20%{transform:rotate(15deg)}40%{transform:rotate(-10deg)}60%{transform:rotate(5deg)}80%{transform:rotate(-5deg)}to{transform:rotate(0deg)}}.animate__swing{animation-name:swing;transform-origin:top center}@keyframes tada{0%{transform:scaleX(1)}10%,20%{transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{transform:scaleX(1)}}.animate__tada{animation-name:tada}@keyframes wobble{0%{transform:translateZ(0)}15%{transform:translate3d(-25%,0,0) rotate(-5deg)}30%{transform:translate3d(20%,0,0) rotate(3deg)}45%{transform:translate3d(-15%,0,0) rotate(-3deg)}60%{transform:translate3d(10%,0,0) rotate(2deg)}75%{transform:translate3d(-5%,0,0) rotate(-1deg)}to{transform:translateZ(0)}}.animate__wobble{animation-name:wobble}@keyframes jello{0%,11.1%,to{transform:translateZ(0)}22.2%{transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{transform:skewX(6.25deg) skewY(6.25deg)}44.4%{transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{transform:skewX(.390625deg) skewY(.390625deg)}88.8%{transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.animate__jello{animation-name:jello;transform-origin:center}@keyframes heartBeat{0%{transform:scale(1)}14%{transform:scale(1.3)}28%{transform:scale(1)}42%{transform:scale(1.3)}70%{transform:scale(1)}}.animate__heartBeat{animation-duration:1.3s;animation-duration:calc(var(--animate-duration)*1.3);animation-name:heartBeat;animation-timing-function:ease-in-out}@keyframes backInDown{0%{opacity:.7;transform:translateY(-1200px) scale(.7)}80%{opacity:.7;transform:translateY(0) scale(.7)}to{opacity:1;transform:scale(1)}}.animate__backInDown{animation-name:backInDown}@keyframes backInLeft{0%{opacity:.7;transform:translateX(-2000px) scale(.7)}80%{opacity:.7;transform:translateX(0) scale(.7)}to{opacity:1;transform:scale(1)}}.animate__backInLeft{animation-name:backInLeft}@keyframes backInRight{0%{opacity:.7;transform:translateX(2000px) scale(.7)}80%{opacity:.7;transform:translateX(0) scale(.7)}to{opacity:1;transform:scale(1)}}.animate__backInRight{animation-name:backInRight}@keyframes backInUp{0%{opacity:.7;transform:translateY(1200px) scale(.7)}80%{opacity:.7;transform:translateY(0) scale(.7)}to{opacity:1;transform:scale(1)}}.animate__backInUp{animation-name:backInUp}@keyframes backOutDown{0%{opacity:1;transform:scale(1)}20%{opacity:.7;transform:translateY(0) scale(.7)}to{opacity:.7;transform:translateY(700px) scale(.7)}}.animate__backOutDown{animation-name:backOutDown}@keyframes backOutLeft{0%{opacity:1;transform:scale(1)}20%{opacity:.7;transform:translateX(0) scale(.7)}to{opacity:.7;transform:translateX(-2000px) scale(.7)}}.animate__backOutLeft{animation-name:backOutLeft}@keyframes backOutRight{0%{opacity:1;transform:scale(1)}20%{opacity:.7;transform:translateX(0) scale(.7)}to{opacity:.7;transform:translateX(2000px) scale(.7)}}.animate__backOutRight{animation-name:backOutRight}@keyframes backOutUp{0%{opacity:1;transform:scale(1)}20%{opacity:.7;transform:translateY(0) scale(.7)}to{opacity:.7;transform:translateY(-700px) scale(.7)}}.animate__backOutUp{animation-name:backOutUp}@keyframes bounceIn{0%,20%,40%,60%,80%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scaleX(1)}}.animate__bounceIn{animation-duration:.75s;animation-duration:calc(var(--animate-duration)*.75);animation-name:bounceIn}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;transform:translate3d(0,25px,0) scaleY(.9)}75%{transform:translate3d(0,-10px,0) scaleY(.95)}90%{transform:translate3d(0,5px,0) scaleY(.985)}to{transform:translateZ(0)}}.animate__bounceInDown{animation-name:bounceInDown}@keyframes bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;transform:translate3d(25px,0,0) scaleX(1)}75%{transform:translate3d(-10px,0,0) scaleX(.98)}90%{transform:translate3d(5px,0,0) scaleX(.995)}to{transform:translateZ(0)}}.animate__bounceInLeft{animation-name:bounceInLeft}@keyframes bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;transform:translate3d(-25px,0,0) scaleX(1)}75%{transform:translate3d(10px,0,0) scaleX(.98)}90%{transform:translate3d(-5px,0,0) scaleX(.995)}to{transform:translateZ(0)}}.animate__bounceInRight{animation-name:bounceInRight}@keyframes bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;transform:translate3d(0,-20px,0) scaleY(.9)}75%{transform:translate3d(0,10px,0) scaleY(.95)}90%{transform:translate3d(0,-5px,0) scaleY(.985)}to{transform:translateZ(0)}}.animate__bounceInUp{animation-name:bounceInUp}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.animate__bounceOut{animation-duration:.75s;animation-duration:calc(var(--animate-duration)*.75);animation-name:bounceOut}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;transform:translate3d(0,2000px,0) scaleY(3)}}.animate__bounceOutDown{animation-name:bounceOutDown}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;transform:translate3d(-2000px,0,0) scaleX(2)}}.animate__bounceOutLeft{animation-name:bounceOutLeft}@keyframes bounceOutRight{20%{opacity:1;transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;transform:translate3d(2000px,0,0) scaleX(2)}}.animate__bounceOutRight{animation-name:bounceOutRight}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;transform:translate3d(0,-2000px,0) scaleY(3)}}.animate__bounceOutUp{animation-name:bounceOutUp}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate__fadeIn{animation-name:fadeIn}@keyframes fadeInDown{0%{opacity:0;transform:translate3d(0,-100%,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInDown{animation-name:fadeInDown}@keyframes fadeInDownBig{0%{opacity:0;transform:translate3d(0,-2000px,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInDownBig{animation-name:fadeInDownBig}@keyframes fadeInLeft{0%{opacity:0;transform:translate3d(-100%,0,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInLeft{animation-name:fadeInLeft}@keyframes fadeInLeftBig{0%{opacity:0;transform:translate3d(-2000px,0,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInLeftBig{animation-name:fadeInLeftBig}@keyframes fadeInRight{0%{opacity:0;transform:translate3d(100%,0,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInRight{animation-name:fadeInRight}@keyframes fadeInRightBig{0%{opacity:0;transform:translate3d(2000px,0,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInRightBig{animation-name:fadeInRightBig}@keyframes fadeInUp{0%{opacity:0;transform:translate3d(0,100%,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInUp{animation-name:fadeInUp}@keyframes fadeInUpBig{0%{opacity:0;transform:translate3d(0,2000px,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInUpBig{animation-name:fadeInUpBig}@keyframes fadeInTopLeft{0%{opacity:0;transform:translate3d(-100%,-100%,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInTopLeft{animation-name:fadeInTopLeft}@keyframes fadeInTopRight{0%{opacity:0;transform:translate3d(100%,-100%,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInTopRight{animation-name:fadeInTopRight}@keyframes fadeInBottomLeft{0%{opacity:0;transform:translate3d(-100%,100%,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInBottomLeft{animation-name:fadeInBottomLeft}@keyframes fadeInBottomRight{0%{opacity:0;transform:translate3d(100%,100%,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInBottomRight{animation-name:fadeInBottomRight}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.animate__fadeOut{animation-name:fadeOut}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}.animate__fadeOutDown{animation-name:fadeOutDown}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;transform:translate3d(0,2000px,0)}}.animate__fadeOutDownBig{animation-name:fadeOutDownBig}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0)}}.animate__fadeOutLeft{animation-name:fadeOutLeft}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;transform:translate3d(-2000px,0,0)}}.animate__fadeOutLeftBig{animation-name:fadeOutLeftBig}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0)}}.animate__fadeOutRight{animation-name:fadeOutRight}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;transform:translate3d(2000px,0,0)}}.animate__fadeOutRightBig{animation-name:fadeOutRightBig}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;transform:translate3d(0,-100%,0)}}.animate__fadeOutUp{animation-name:fadeOutUp}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;transform:translate3d(0,-2000px,0)}}.animate__fadeOutUpBig{animation-name:fadeOutUpBig}@keyframes fadeOutTopLeft{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(-100%,-100%,0)}}.animate__fadeOutTopLeft{animation-name:fadeOutTopLeft}@keyframes fadeOutTopRight{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(100%,-100%,0)}}.animate__fadeOutTopRight{animation-name:fadeOutTopRight}@keyframes fadeOutBottomRight{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(100%,100%,0)}}.animate__fadeOutBottomRight{animation-name:fadeOutBottomRight}@keyframes fadeOutBottomLeft{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(-100%,100%,0)}}.animate__fadeOutBottomLeft{animation-name:fadeOutBottomLeft}@keyframes flip{0%{animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn)}40%{animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg)}50%{animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg)}80%{animation-timing-function:ease-in;transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg)}to{animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg)}}.animate__animated.animate__flip{animation-name:flip;-webkit-backface-visibility:visible;backface-visibility:visible}@keyframes flipInX{0%{animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateX(90deg)}40%{animation-timing-function:ease-in;transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;transform:perspective(400px) rotateX(10deg)}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}.animate__flipInX{animation-name:flipInX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@keyframes flipInY{0%{animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateY(90deg)}40%{animation-timing-function:ease-in;transform:perspective(400px) rotateY(-20deg)}60%{opacity:1;transform:perspective(400px) rotateY(10deg)}80%{transform:perspective(400px) rotateY(-5deg)}to{transform:perspective(400px)}}.animate__flipInY{animation-name:flipInY;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@keyframes flipOutX{0%{transform:perspective(400px)}30%{opacity:1;transform:perspective(400px) rotateX(-20deg)}to{opacity:0;transform:perspective(400px) rotateX(90deg)}}.animate__flipOutX{animation-duration:.75s;animation-duration:calc(var(--animate-duration)*.75);animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@keyframes flipOutY{0%{transform:perspective(400px)}30%{opacity:1;transform:perspective(400px) rotateY(-15deg)}to{opacity:0;transform:perspective(400px) rotateY(90deg)}}.animate__flipOutY{animation-duration:.75s;animation-duration:calc(var(--animate-duration)*.75);animation-name:flipOutY;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@keyframes lightSpeedInRight{0%{opacity:0;transform:translate3d(100%,0,0) skewX(-30deg)}60%{opacity:1;transform:skewX(20deg)}80%{transform:skewX(-5deg)}to{transform:translateZ(0)}}.animate__lightSpeedInRight{animation-name:lightSpeedInRight;animation-timing-function:ease-out}@keyframes lightSpeedInLeft{0%{opacity:0;transform:translate3d(-100%,0,0) skewX(30deg)}60%{opacity:1;transform:skewX(-20deg)}80%{transform:skewX(5deg)}to{transform:translateZ(0)}}.animate__lightSpeedInLeft{animation-name:lightSpeedInLeft;animation-timing-function:ease-out}@keyframes lightSpeedOutRight{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) skewX(30deg)}}.animate__lightSpeedOutRight{animation-name:lightSpeedOutRight;animation-timing-function:ease-in}@keyframes lightSpeedOutLeft{0%{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0) skewX(-30deg)}}.animate__lightSpeedOutLeft{animation-name:lightSpeedOutLeft;animation-timing-function:ease-in}@keyframes rotateIn{0%{opacity:0;transform:rotate(-200deg)}to{opacity:1;transform:translateZ(0)}}.animate__rotateIn{animation-name:rotateIn;transform-origin:center}@keyframes rotateInDownLeft{0%{opacity:0;transform:rotate(-45deg)}to{opacity:1;transform:translateZ(0)}}.animate__rotateInDownLeft{animation-name:rotateInDownLeft;transform-origin:left bottom}@keyframes rotateInDownRight{0%{opacity:0;transform:rotate(45deg)}to{opacity:1;transform:translateZ(0)}}.animate__rotateInDownRight{animation-name:rotateInDownRight;transform-origin:right bottom}@keyframes rotateInUpLeft{0%{opacity:0;transform:rotate(45deg)}to{opacity:1;transform:translateZ(0)}}.animate__rotateInUpLeft{animation-name:rotateInUpLeft;transform-origin:left bottom}@keyframes rotateInUpRight{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:translateZ(0)}}.animate__rotateInUpRight{animation-name:rotateInUpRight;transform-origin:right bottom}@keyframes rotateOut{0%{opacity:1}to{opacity:0;transform:rotate(200deg)}}.animate__rotateOut{animation-name:rotateOut;transform-origin:center}@keyframes rotateOutDownLeft{0%{opacity:1}to{opacity:0;transform:rotate(45deg)}}.animate__rotateOutDownLeft{animation-name:rotateOutDownLeft;transform-origin:left bottom}@keyframes rotateOutDownRight{0%{opacity:1}to{opacity:0;transform:rotate(-45deg)}}.animate__rotateOutDownRight{animation-name:rotateOutDownRight;transform-origin:right bottom}@keyframes rotateOutUpLeft{0%{opacity:1}to{opacity:0;transform:rotate(-45deg)}}.animate__rotateOutUpLeft{animation-name:rotateOutUpLeft;transform-origin:left bottom}@keyframes rotateOutUpRight{0%{opacity:1}to{opacity:0;transform:rotate(90deg)}}.animate__rotateOutUpRight{animation-name:rotateOutUpRight;transform-origin:right bottom}@keyframes hinge{0%{animation-timing-function:ease-in-out}20%,60%{animation-timing-function:ease-in-out;transform:rotate(80deg)}40%,80%{animation-timing-function:ease-in-out;opacity:1;transform:rotate(60deg)}to{opacity:0;transform:translate3d(0,700px,0)}}.animate__hinge{animation-duration:2s;animation-duration:calc(var(--animate-duration)*2);animation-name:hinge;transform-origin:top left}@keyframes jackInTheBox{0%{opacity:0;transform:scale(.1) rotate(30deg);transform-origin:center bottom}50%{transform:rotate(-10deg)}70%{transform:rotate(3deg)}to{opacity:1;transform:scale(1)}}.animate__jackInTheBox{animation-name:jackInTheBox}@keyframes rollIn{0%{opacity:0;transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;transform:translateZ(0)}}.animate__rollIn{animation-name:rollIn}@keyframes rollOut{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) rotate(120deg)}}.animate__rollOut{animation-name:rollOut}@keyframes zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}.animate__zoomIn{animation-name:zoomIn}@keyframes zoomInDown{0%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0)}60%{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}}.animate__zoomInDown{animation-name:zoomInDown}@keyframes zoomInLeft{0%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0)}60%{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0)}}.animate__zoomInLeft{animation-name:zoomInLeft}@keyframes zoomInRight{0%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0)}60%{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0)}}.animate__zoomInRight{animation-name:zoomInRight}@keyframes zoomInUp{0%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0)}60%{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}}.animate__zoomInUp{animation-name:zoomInUp}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.animate__zoomOut{animation-name:zoomOut}@keyframes zoomOutDown{40%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}to{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0)}}.animate__zoomOutDown{animation-name:zoomOutDown;transform-origin:center bottom}@keyframes zoomOutLeft{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(-2000px,0,0)}}.animate__zoomOutLeft{animation-name:zoomOutLeft;transform-origin:left center}@keyframes zoomOutRight{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(2000px,0,0)}}.animate__zoomOutRight{animation-name:zoomOutRight;transform-origin:right center}@keyframes zoomOutUp{40%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}to{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0)}}.animate__zoomOutUp{animation-name:zoomOutUp;transform-origin:center bottom}@keyframes slideInDown{0%{transform:translate3d(0,-100%,0);visibility:visible}to{transform:translateZ(0)}}.animate__slideInDown{animation-name:slideInDown}@keyframes slideInLeft{0%{transform:translate3d(-100%,0,0);visibility:visible}to{transform:translateZ(0)}}.animate__slideInLeft{animation-name:slideInLeft}@keyframes slideInRight{0%{transform:translate3d(100%,0,0);visibility:visible}to{transform:translateZ(0)}}.animate__slideInRight{animation-name:slideInRight}@keyframes slideInUp{0%{transform:translate3d(0,100%,0);visibility:visible}to{transform:translateZ(0)}}.animate__slideInUp{animation-name:slideInUp}@keyframes slideOutDown{0%{transform:translateZ(0)}to{transform:translate3d(0,100%,0);visibility:hidden}}.animate__slideOutDown{animation-name:slideOutDown}@keyframes slideOutLeft{0%{transform:translateZ(0)}to{transform:translate3d(-100%,0,0);visibility:hidden}}.animate__slideOutLeft{animation-name:slideOutLeft}@keyframes slideOutRight{0%{transform:translateZ(0)}to{transform:translate3d(100%,0,0);visibility:hidden}}.animate__slideOutRight{animation-name:slideOutRight}@keyframes slideOutUp{0%{transform:translateZ(0)}to{transform:translate3d(0,-100%,0);visibility:hidden}}.animate__slideOutUp{animation-name:slideOutUp}table.dataTable{border-collapse:separate;border-spacing:0;margin:0 auto;width:100%}table.dataTable tfoot th,table.dataTable thead th{font-weight:700}table.dataTable thead td,table.dataTable thead th{border-bottom:1px solid #111;padding:10px 18px}table.dataTable thead td:active,table.dataTable thead th:active{outline:none}table.dataTable tfoot td,table.dataTable tfoot th{border-top:1px solid #111;padding:10px 18px 6px}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{background-position:100%;background-repeat:no-repeat;*cursor:hand}table.dataTable thead .sorting{background-image:url(../images/sort_both.png)}table.dataTable thead .sorting_asc{background-image:url(../images/sort_asc.png)}table.dataTable thead .sorting_desc{background-image:url(../images/sort_desc.png)}table.dataTable thead .sorting_asc_disabled{background-image:url(../images/sort_asc_disabled.png)}table.dataTable thead .sorting_desc_disabled{background-image:url(../images/sort_desc_disabled.png)}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#b0bed9}table.dataTable tbody td,table.dataTable tbody th{padding:8px 10px}table.dataTable.display tbody td,table.dataTable.display tbody th,table.dataTable.row-border tbody td,table.dataTable.row-border tbody th{border-top:1px solid #ddd}table.dataTable.display tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.row-border tbody tr:first-child th{border-top:none}table.dataTable.cell-border tbody td,table.dataTable.cell-border tbody th{border-right:1px solid #ddd;border-top:1px solid #ddd}table.dataTable.cell-border tbody tr td:first-child,table.dataTable.cell-border tbody tr th:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child td,table.dataTable.cell-border tbody tr:first-child th{border-top:none}table.dataTable.display tbody tr.odd,table.dataTable.stripe tbody tr.odd{background-color:#f9f9f9}table.dataTable.display tbody tr.odd.selected,table.dataTable.stripe tbody tr.odd.selected{background-color:#acbad4}table.dataTable.display tbody tr:hover,table.dataTable.hover tbody tr:hover{background-color:#f6f6f6}table.dataTable.display tbody tr:hover.selected,table.dataTable.hover tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3,table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3,table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap td,table.dataTable.nowrap th{white-space:nowrap}table.dataTable.compact thead td,table.dataTable.compact thead th{padding:4px 17px 4px 4px}table.dataTable.compact tbody td,table.dataTable.compact tbody th,table.dataTable.compact tfoot td,table.dataTable.compact tfoot th{padding:4px}table.dataTable td.dt-left,table.dataTable th.dt-left{text-align:left}table.dataTable td.dataTables_empty,table.dataTable td.dt-center,table.dataTable th.dt-center{text-align:center}table.dataTable td.dt-right,table.dataTable th.dt-right{text-align:right}table.dataTable td.dt-justify,table.dataTable th.dt-justify{text-align:justify}table.dataTable td.dt-nowrap,table.dataTable th.dt-nowrap{white-space:nowrap}table.dataTable tfoot td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable thead th.dt-head-left{text-align:left}table.dataTable tfoot td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable thead th.dt-head-center{text-align:center}table.dataTable tfoot td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable thead th.dt-head-right{text-align:right}table.dataTable tfoot td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable thead th.dt-head-justify{text-align:justify}table.dataTable tfoot td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable thead th.dt-head-nowrap{white-space:nowrap}table.dataTable tbody td.dt-body-left,table.dataTable tbody th.dt-body-left{text-align:left}table.dataTable tbody td.dt-body-center,table.dataTable tbody th.dt-body-center{text-align:center}table.dataTable tbody td.dt-body-right,table.dataTable tbody th.dt-body-right{text-align:right}table.dataTable tbody td.dt-body-justify,table.dataTable tbody th.dt-body-justify{text-align:justify}table.dataTable tbody td.dt-body-nowrap,table.dataTable tbody th.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable td,table.dataTable th{box-sizing:content-box}.dataTables_wrapper{*zoom:1;zoom:1;clear:both;position:relative}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;padding-top:.25em;text-align:right}.dataTables_wrapper .dataTables_paginate .paginate_button{border:1px solid transparent;border-radius:2px;box-sizing:border-box;color:#333!important;cursor:pointer;*cursor:hand;display:inline-block;margin-left:2px;min-width:1.5em;padding:.5em 1em;text-align:center;text-decoration:none!important}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{background-color:#fff;background:linear-gradient(180deg,#fff 0,#dcdcdc);border:1px solid #979797;color:#333!important}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover{background:transparent;border:1px solid transparent;box-shadow:none;color:#666!important;cursor:default}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{background-color:#585858;background:linear-gradient(180deg,#585858 0,#111);border:1px solid #111;color:#fff!important}.dataTables_wrapper .dataTables_paginate .paginate_button:active{background-color:#2b2b2b;background:linear-gradient(180deg,#2b2b2b 0,#0c0c0c);box-shadow:inset 0 0 3px #111;outline:none}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{background-color:#fff;background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,.9) 25%,hsla(0,0%,100%,.9) 75%,hsla(0,0%,100%,0));font-size:1.2em;height:40px;left:50%;margin-left:-50%;margin-top:-25px;padding-top:20px;position:absolute;text-align:center;top:50%;width:100%}.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_paginate,.dataTables_wrapper .dataTables_processing{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{-webkit-overflow-scrolling:touch;*margin-top:-1px}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing{height:0;margin:0!important;overflow:hidden;padding:0!important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollBody>table,.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable{border-bottom:none}.dataTables_wrapper:after{clear:both;content:\"\";display:block;height:0;visibility:hidden}@media screen and (max-width:767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width:640px){.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_length{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}div.dataTables_length label{font-weight:400;text-align:left;white-space:nowrap}div.dataTables_length select{display:inline-block;width:75px}div.dataTables_filter{text-align:right}div.dataTables_filter label{font-weight:400;text-align:left;white-space:nowrap}div.dataTables_filter input{display:inline-block;margin-left:.5em}div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_paginate{margin:0;text-align:right;white-space:nowrap}div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_paginate li.first>a,div.dataTables_paginate li.previous>a{padding-left:24px;position:relative}div.dataTables_paginate li.last>a,div.dataTables_paginate li.next>a{padding-right:24px;position:relative}div.dataTables_paginate li.first a:before,div.dataTables_paginate li.previous a:before{display:block;font-family:FontAwesome;left:10px;position:absolute;top:6px}div.dataTables_paginate li.last a:after,div.dataTables_paginate li.next a:after{display:block;font-family:FontAwesome;position:absolute;right:10px;top:6px}div.dataTables_paginate li.first a:before{content:\"\\f100\"}div.dataTables_paginate li.previous a:before{content:\"\\f104\"}div.dataTables_paginate li.next a:after{content:\"\\f105\"}div.dataTables_paginate li.last a:after{content:\"\\f101\"}@media screen and (max-width:767px){div.dataTables_filter,div.dataTables_info,div.dataTables_length,div.dataTables_paginate{text-align:center}}table.dataTable td,table.dataTable th{box-sizing:content-box}table.dataTable thead th{background-image:none!important;position:relative}table.dataTable{clear:both;margin-bottom:6px!important;margin-top:6px!important;max-width:none!important}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{cursor:pointer}table.dataTable thead th.sorting:after,table.dataTable thead th.sorting_asc:after,table.dataTable thead th.sorting_desc:after{display:block;font-family:FontAwesome;position:absolute;right:8px;top:12px}table.dataTable thead th.sorting:after{color:#ddd;content:\"\\f0dc\";font-size:.8em;padding-top:.12em}table.dataTable thead th.sorting_asc:after{content:\"\\f0de\"}table.dataTable thead th.sorting_desc:after{content:\"\\f0dd\"}div.dataTables_scrollBody table.dataTable thead th.sorting:after,div.dataTables_scrollBody table.dataTable thead th.sorting_asc:after,div.dataTables_scrollBody table.dataTable thead th.sorting_desc:after{content:\"\"}table.table thead th.sorting:after,table.table thead th.sorting_asc:after,table.table thead th.sorting_desc:after{top:8px}table.dataTable thead>tr>th{padding-left:18px;padding-right:18px}table.dataTable th:active{outline:none}div.dataTables_scrollHead table{border-bottom-left-radius:0;border-bottom-right-radius:0;margin-bottom:0!important}div.dataTables_scrollHead table thead tr:last-child td:first-child,div.dataTables_scrollHead table thead tr:last-child th:first-child{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}div.dataTables_scrollBody table{border-top:none;margin-bottom:0!important;margin-top:0!important}div.dataTables_scrollBody tbody tr:first-child td,div.dataTables_scrollBody tbody tr:first-child th{border-top:none}div.dataTables_scrollFoot table{border-top:none;margin-top:0!important}table.table-bordered.dataTable{border-collapse:separate!important}table.table-bordered thead td,table.table-bordered thead th{border-left-width:0;border-top-width:0}table.table-bordered tbody td,table.table-bordered tbody th{border-bottom-width:0;border-left-width:0}table.table-bordered td:last-child,table.table-bordered th:last-child{border-right-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}.table.dataTable tbody tr.active td,.table.dataTable tbody tr.active th{background-color:#08c;color:#fff}.table.dataTable tbody tr.active:hover td,.table.dataTable tbody tr.active:hover th{background-color:#0075b0!important}.table.dataTable tbody tr.active td>a,.table.dataTable tbody tr.active th>a{color:#fff}.table-striped.dataTable tbody tr.active:nth-child(odd) td,.table-striped.dataTable tbody tr.active:nth-child(odd) th{background-color:#017ebc}table.DTTT_selectable tbody tr{cursor:pointer}div.DTTT .btn:hover{text-decoration:none!important}ul.DTTT_dropdown.dropdown-menu{z-index:2003}ul.DTTT_dropdown.dropdown-menu a{color:#333!important}ul.DTTT_dropdown.dropdown-menu li{position:relative}ul.DTTT_dropdown.dropdown-menu li:hover a{background-color:#08c;color:#fff!important}div.DTTT_collection_background{z-index:2002}div.DTTT_print_info{background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 7px rgba(0,0,0,.5);color:#333;height:150px;left:50%;margin-left:-200px;margin-top:-75px;opacity:.95;padding:10px 30px;position:fixed;text-align:center;top:50%;width:400px}div.DTTT_print_info h6{font-size:28px;font-weight:400;line-height:28px;margin:1em}div.DTTT_print_info p{font-size:14px;line-height:20px}div.dataTables_processing{background-color:#fff;background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,.9) 25%,hsla(0,0%,100%,.9) 75%,hsla(0,0%,100%,0));font-size:1.2em;height:60px;left:50%;margin-left:-50%;margin-top:-25px;padding-bottom:20px;padding-top:20px;position:absolute;text-align:center;top:50%;width:100%}div.DTFC_LeftFootWrapper table,div.DTFC_LeftHeadWrapper table,div.DTFC_RightFootWrapper table,div.DTFC_RightHeadWrapper table,table.DTFC_Cloned tr.even{background-color:#fff;margin-bottom:0}div.DTFC_LeftHeadWrapper table,div.DTFC_RightHeadWrapper table{border-bottom:none!important;border-top-right-radius:0!important;margin-bottom:0!important}div.DTFC_LeftHeadWrapper table,div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child,div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,div.DTFC_RightHeadWrapper table,div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child,div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}div.DTFC_LeftBodyWrapper table,div.DTFC_RightBodyWrapper table{border-top:none;margin:0!important}div.DTFC_LeftBodyWrapper tbody tr:first-child td,div.DTFC_LeftBodyWrapper tbody tr:first-child th,div.DTFC_RightBodyWrapper tbody tr:first-child td,div.DTFC_RightBodyWrapper tbody tr:first-child th{border-top:none}div.DTFC_LeftFootWrapper table,div.DTFC_RightFootWrapper table{border-top:none;margin-top:0!important}div.FixedHeader_Cloned table{margin:0!important}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;-moz-user-select:none;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;overflow:hidden;padding-left:8px;padding-right:20px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-left:20px;padding-right:8px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;-moz-user-select:none;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{border:none;box-sizing:border-box;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;left:-100000px;position:absolute;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;-moz-user-select:none;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{box-sizing:border-box;padding:4px;width:100%}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{background-color:#fff;border:0;display:block;filter:alpha(opacity=0);height:auto;left:0;margin:0;min-height:100%;min-width:100%;opacity:0;padding:0;position:fixed;top:0;width:auto;z-index:99}.select2-hidden-accessible{clip:rect(0 0 0 0)!important;border:0!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;height:1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;right:1px;top:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-right:10px;margin-top:5px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #000;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{-webkit-appearance:textfield;background:transparent;border:none;box-shadow:none;outline:0}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:#fff}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;background-image:linear-gradient(180deg,#fff 50%,#eee);background-repeat:repeat-x;border:1px solid #aaa;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#FFFFFFFF\",endColorstr=\"#FFEEEEEE\",GradientType=0);outline:0}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;background-image:linear-gradient(180deg,#eee 50%,#ccc);background-repeat:repeat-x;border:none;border-bottom-right-radius:4px;border-left:1px solid #aaa;border-top-right-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#FFEEEEEE\",endColorstr=\"#FFCCCCCC\",GradientType=0);height:26px;position:absolute;right:1px;top:1px;width:20px}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{border:none;border-radius:0;border-bottom-left-radius:4px;border-right:1px solid #aaa;border-top-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{background-image:linear-gradient(180deg,#fff 0,#eee 50%);background-repeat:repeat-x;border-top:none;border-top-left-radius:0;border-top-right-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#FFFFFFFF\",endColorstr=\"#FFEEEEEE\",GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{background-image:linear-gradient(180deg,#eee 50%,#fff);background-repeat:repeat-x;border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#FFEEEEEE\",endColorstr=\"#FFFFFFFF\",GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{box-shadow:none;outline:0}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{color:#fff;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);float:right;font-size:20px;font-weight:700;line-height:1;opacity:.8;position:relative;right:-.3em;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;top:-.3em}.toast-close-button:focus,.toast-close-button:hover{color:#000;cursor:pointer;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40);opacity:.4;text-decoration:none}.rtl .toast-close-button{float:left;left:-.3em;right:.3em}button.toast-close-button{-webkit-appearance:none;background:transparent;border:0;cursor:pointer;padding:0}.toast-top-center{right:0;top:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{right:0;top:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{left:12px;top:12px}.toast-top-right{right:12px;top:12px}.toast-bottom-right{bottom:12px;right:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{pointer-events:none;position:fixed;z-index:999999}#toast-container *{box-sizing:border-box}#toast-container>div{background-position:15px;background-repeat:no-repeat;border-radius:3px 3px 3px 3px;box-shadow:0 0 12px #999;color:#fff;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);margin:0 0 6px;opacity:.8;overflow:hidden;padding:15px 15px 15px 50px;pointer-events:auto;position:relative;width:300px}#toast-container>div.rtl{background-position:right 15px center;direction:rtl;padding:15px 50px 15px 15px}#toast-container>div:hover{box-shadow:0 0 12px #000;cursor:pointer;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);opacity:1}#toast-container>.toast-info{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=\")!important}#toast-container>.toast-error{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=\")!important}#toast-container>.toast-success{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==\")!important}#toast-container>.toast-warning{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=\")!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{margin-left:auto;margin-right:auto;width:300px}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{margin-left:auto;margin-right:auto;width:96%}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{background-color:#000;bottom:0;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40);height:4px;left:0;opacity:.4;position:absolute}@media (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{right:-.2em;top:-.2em}#toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container>div.rtl{padding:8px 50px 8px 8px}#toast-container .toast-close-button{right:-.2em;top:-.2em}#toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}#toast-container>div.rtl{padding:15px 50px 15px 15px}}.ps{-ms-overflow-style:none;overflow:hidden!important;overflow-anchor:none;touch-action:auto;-ms-touch-action:auto}.ps__rail-x{bottom:0;height:15px}.ps__rail-x,.ps__rail-y{display:none;opacity:0;position:absolute;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear}.ps__rail-y{right:0;width:15px}.ps--active-x>.ps__rail-x,.ps--active-y>.ps__rail-y{background-color:transparent;display:block}.ps--focus>.ps__rail-x,.ps--focus>.ps__rail-y,.ps--scrolling-x>.ps__rail-x,.ps--scrolling-y>.ps__rail-y,.ps:hover>.ps__rail-x,.ps:hover>.ps__rail-y{opacity:.6}.ps .ps__rail-x.ps--clicking,.ps .ps__rail-x:focus,.ps .ps__rail-x:hover,.ps .ps__rail-y.ps--clicking,.ps .ps__rail-y:focus,.ps .ps__rail-y:hover{background-color:#eee;opacity:.9}.ps__thumb-x{bottom:2px;height:6px;transition:background-color .2s linear,height .2s ease-in-out;-webkit-transition:background-color .2s linear,height .2s ease-in-out}.ps__thumb-x,.ps__thumb-y{background-color:#aaa;border-radius:6px;position:absolute}.ps__thumb-y{right:2px;transition:background-color .2s linear,width .2s ease-in-out;-webkit-transition:background-color .2s linear,width .2s ease-in-out;width:6px}.ps__rail-x.ps--clicking .ps__thumb-x,.ps__rail-x:focus>.ps__thumb-x,.ps__rail-x:hover>.ps__thumb-x{background-color:#999;height:11px}.ps__rail-y.ps--clicking .ps__thumb-y,.ps__rail-y:focus>.ps__thumb-y,.ps__rail-y:hover>.ps__thumb-y{background-color:#999;width:11px}@supports (-ms-overflow-style:none){.ps{overflow:auto!important}}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.ps{overflow:auto!important}}\n/*! ========================================================================\n * Bootstrap Toggle: bootstrap-toggle.css v2.2.0\n * http://www.bootstraptoggle.com\n * ========================================================================\n * Copyright 2014 Min Hur, The New York Times Company\n * Licensed under MIT\n * ======================================================================== */.checkbox label .toggle,.checkbox-inline .toggle{margin-left:-20px;margin-right:5px}.toggle{overflow:hidden;position:relative}.toggle input[type=checkbox]{display:none}.toggle-group{bottom:0;left:0;position:absolute;top:0;transition:left .35s;-webkit-transition:left .35s;-moz-user-select:none;-webkit-user-select:none;width:200%}.toggle.off .toggle-group{left:-100%}.toggle-on{left:0;right:50%}.toggle-off,.toggle-on{border:0;border-radius:0;bottom:0;margin:0;position:absolute;top:0}.toggle-off{left:50%;right:0}.toggle-handle{border-width:0 1px;height:100%;margin:0 auto;padding-bottom:0;padding-top:0;position:relative;width:0}.toggle.btn{min-height:34px;min-width:59px}.toggle-on.btn{padding-right:24px}.toggle-off.btn{padding-left:24px}.btn-group-lg>.toggle.btn,.toggle.btn-lg{min-height:45px;min-width:79px}.btn-group-lg>.toggle-on.btn,.toggle-on.btn-lg{padding-right:31px}.btn-group-lg>.toggle-off.btn,.toggle-off.btn-lg{padding-left:31px}.btn-group-lg>.toggle-handle.btn,.toggle-handle.btn-lg{width:40px}.btn-group-sm>.toggle.btn,.toggle.btn-sm{min-height:30px;min-width:50px}.btn-group-sm>.toggle-on.btn,.toggle-on.btn-sm{padding-right:20px}.btn-group-sm>.toggle-off.btn,.toggle-off.btn-sm{padding-left:20px}.btn-group-xs>.toggle.btn,.toggle.btn-xs{min-height:22px;min-width:35px}.btn-group-xs>.toggle-on.btn,.toggle-on.btn-xs{padding-right:12px}.btn-group-xs>.toggle-off.btn,.toggle-off.btn-xs{padding-left:12px}.icheckbox_flat,.iradio_flat{background:url(flat.png) no-repeat;border:none;cursor:pointer;display:inline-block;*display:inline;height:20px;margin:0;padding:0;vertical-align:middle;width:20px}.icheckbox_flat{background-position:0 0}.icheckbox_flat.checked{background-position:-22px 0}.icheckbox_flat.disabled{background-position:-44px 0;cursor:default}.icheckbox_flat.checked.disabled{background-position:-66px 0}.iradio_flat{background-position:-88px 0}.iradio_flat.checked{background-position:-110px 0}.iradio_flat.disabled{background-position:-132px 0;cursor:default}.iradio_flat.checked.disabled{background-position:-154px 0}@media (-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.icheckbox_flat,.iradio_flat{background-image:url(flat@2x.png);background-size:176px 22px}}\n/*!\n * Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)\n *\n * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n */.datepicker{border-radius:4px;direction:ltr;padding:4px}.datepicker-inline{width:220px}.datepicker-rtl{direction:rtl}.datepicker-rtl.dropdown-menu{left:auto}.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{left:0;top:0}.datepicker-dropdown:before{border-bottom:7px solid rgba(0,0,0,.2);border-left:7px solid transparent;border-right:7px solid transparent}.datepicker-dropdown:after,.datepicker-dropdown:before{border-top:0;content:\"\";display:inline-block;position:absolute}.datepicker-dropdown:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent}.datepicker-dropdown.datepicker-orient-left:before{left:6px}.datepicker-dropdown.datepicker-orient-left:after{left:7px}.datepicker-dropdown.datepicker-orient-right:before{right:6px}.datepicker-dropdown.datepicker-orient-right:after{right:7px}.datepicker-dropdown.datepicker-orient-bottom:before{top:-7px}.datepicker-dropdown.datepicker-orient-bottom:after{top:-6px}.datepicker-dropdown.datepicker-orient-top:before{border-bottom:0;border-top:7px solid #999;bottom:-7px}.datepicker-dropdown.datepicker-orient-top:after{border-bottom:0;border-top:6px solid #fff;bottom:-6px}.datepicker table{-webkit-touch-callout:none;margin:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.datepicker td,.datepicker th{border:none;border-radius:4px;height:20px;text-align:center;width:20px}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.day.focused,.datepicker table tr td.day:hover{background:#eee;cursor:pointer}.datepicker table tr td.new,.datepicker table tr td.old{color:#999}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:none;color:#999;cursor:default}.datepicker table tr td.highlighted{background:#d9edf7;border-radius:0}.datepicker table tr td.today,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today:hover{background-color:#fde19a;background-image:linear-gradient(180deg,#fdd49a,#fdf59a);background-repeat:repeat-x;border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#000;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#fdd49a\",endColorstr=\"#fdf59a\",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled.disabled,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover.disabled,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today.disabled:hover:hover,.datepicker table tr td.today.disabled:hover[disabled],.datepicker table tr td.today.disabled[disabled],.datepicker table tr td.today:active,.datepicker table tr td.today:hover,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover.disabled,.datepicker table tr td.today:hover:active,.datepicker table tr td.today:hover:hover,.datepicker table tr td.today:hover[disabled],.datepicker table tr td.today[disabled]{background-color:#fdf59a}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today:active,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover:active{background-color:#fbf069\\9}.datepicker table tr td.today:hover:hover{color:#000}.datepicker table tr td.today.active:hover{color:#fff}.datepicker table tr td.range,.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:hover,.datepicker table tr td.range:hover{background:#eee;border-radius:0}.datepicker table tr td.range.today,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today:hover{background-color:#f3d17a;background-image:linear-gradient(180deg,#f3c17a,#f3e97a);background-repeat:repeat-x;border-color:#f3e97a #f3e97a #edde34;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);border-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f3c17a\",endColorstr=\"#f3e97a\",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled.disabled,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover.disabled,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today.disabled:hover:hover,.datepicker table tr td.range.today.disabled:hover[disabled],.datepicker table tr td.range.today.disabled[disabled],.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover.disabled,.datepicker table tr td.range.today:hover:active,.datepicker table tr td.range.today:hover:hover,.datepicker table tr td.range.today:hover[disabled],.datepicker table tr td.range.today[disabled]{background-color:#f3e97a}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover:active{background-color:#efe24b\\9}.datepicker table tr td.selected,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected:hover{background-color:#9e9e9e;background-image:linear-gradient(180deg,#b3b3b3,grey);background-repeat:repeat-x;border-color:grey grey #595959;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#fff;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#b3b3b3\",endColorstr=\"#808080\",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled.disabled,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover.disabled,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected.disabled:hover:hover,.datepicker table tr td.selected.disabled:hover[disabled],.datepicker table tr td.selected.disabled[disabled],.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover.disabled,.datepicker table tr td.selected:hover:active,.datepicker table tr td.selected:hover:hover,.datepicker table tr td.selected:hover[disabled],.datepicker table tr td.selected[disabled]{background-color:grey}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover:active{background-color:#666\\9}.datepicker table tr td.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active:hover{background-color:#006dcc;background-image:linear-gradient(180deg,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#fff;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#08c\",endColorstr=\"#0044cc\",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled.disabled,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover.disabled,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active.disabled:hover:hover,.datepicker table tr td.active.disabled:hover[disabled],.datepicker table tr td.active.disabled[disabled],.datepicker table tr td.active:active,.datepicker table tr td.active:hover,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover.disabled,.datepicker table tr td.active:hover:active,.datepicker table tr td.active:hover:hover,.datepicker table tr td.active:hover[disabled],.datepicker table tr td.active[disabled]{background-color:#04c}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active:active,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover:active{background-color:#039\\9}.datepicker table tr td span{border-radius:4px;cursor:pointer;display:block;float:left;height:54px;line-height:54px;margin:1%;width:23%}.datepicker table tr td span.focused,.datepicker table tr td span:hover{background:#eee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:none;color:#999;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{background-color:#006dcc;background-image:linear-gradient(180deg,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#fff;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#08c\",endColorstr=\"#0044cc\",GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled.disabled,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover.disabled,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active.disabled:hover[disabled],.datepicker table tr td span.active.disabled[disabled],.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover.disabled,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active:hover:hover,.datepicker table tr td span.active:hover[disabled],.datepicker table tr td span.active[disabled]{background-color:#04c}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active{background-color:#039\\9}.datepicker table tr td span.new,.datepicker table tr td span.old{color:#999}.datepicker .datepicker-switch{width:145px}.datepicker .datepicker-switch,.datepicker .next,.datepicker .prev,.datepicker tfoot tr th{cursor:pointer}.datepicker .datepicker-switch:hover,.datepicker .next:hover,.datepicker .prev:hover,.datepicker tfoot tr th:hover{background:#eee}.datepicker .next.disabled,.datepicker .prev.disabled{visibility:hidden}.datepicker .cw{font-size:10px;padding:0 2px 0 5px;vertical-align:middle;width:12px}.input-append.date .add-on,.input-prepend.date .add-on{cursor:pointer}.input-append.date .add-on i,.input-prepend.date .add-on i{margin-top:3px}.input-daterange input{text-align:center}.input-daterange input:first-child{border-radius:3px 0 0 3px}.input-daterange input:last-child{border-radius:0 3px 3px 0}.input-daterange .add-on{background-color:#eee;border:1px solid #ccc;display:inline-block;font-weight:400;height:18px;line-height:18px;margin-left:-5px;margin-right:-5px;min-width:16px;padding:4px 5px;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;width:auto}.CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:-50px}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:0;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:0;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:0 0!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:0 0;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{bottom:0;left:0;position:absolute;right:0;top:0;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:\"\"}span.CodeMirror-selectedtext{background:0 0}.EasyMDEContainer{display:block}.CodeMirror-rtl pre{direction:rtl}.EasyMDEContainer.sided--no-fullscreen{display:flex;flex-direction:row;flex-wrap:wrap}.EasyMDEContainer .CodeMirror{word-wrap:break-word;border:1px solid #ced4da;border-bottom-left-radius:4px;border-bottom-right-radius:4px;box-sizing:border-box;font:inherit;height:auto;padding:10px;z-index:0}.EasyMDEContainer .CodeMirror-scroll{cursor:text}.EasyMDEContainer .CodeMirror-fullscreen{background:#fff;border-bottom-right-radius:0!important;border-right:none!important;bottom:0;height:auto;left:0;position:fixed!important;right:0;top:50px;z-index:8}.EasyMDEContainer .CodeMirror-sided{width:50%!important}.EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-bottom-right-radius:0;border-right:none!important;flex:1 1 auto;position:relative}.EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-top:1px solid #ced4da;border-top-left-radius:4px;border-top-right-radius:4px;padding:9px 10px;position:relative;-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none}.editor-toolbar.fullscreen{background:#fff;border:0;box-sizing:border-box;height:50px;left:0;opacity:1;padding-bottom:10px;padding-top:10px;position:fixed;top:0;width:100%;z-index:9}.editor-toolbar.fullscreen:before{background:linear-gradient(90deg,#fff 0,hsla(0,0%,100%,0));height:50px;left:0;margin:0;padding:0;position:fixed;top:0;width:20px}.editor-toolbar.fullscreen:after{background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,#fff);height:50px;margin:0;padding:0;position:fixed;right:0;top:0;width:20px}.EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.editor-toolbar .easymde-dropdown,.editor-toolbar button{background:0 0;border:1px solid transparent;border-radius:3px;cursor:pointer;display:inline-block;height:30px;margin:0;padding:0;text-align:center;text-decoration:none!important}.editor-toolbar button{font-weight:700;min-width:30px;padding:0 6px;white-space:nowrap}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;display:inline-block;margin:0 6px;text-indent:-10px;width:0}.editor-toolbar button:after{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;position:relative;top:2px;vertical-align:text-bottom}.editor-toolbar button.heading-1:after{content:\"1\"}.editor-toolbar button.heading-2:after{content:\"2\"}.editor-toolbar button.heading-3:after{content:\"3\"}.editor-toolbar button.heading-bigger:after{content:\"▲\"}.editor-toolbar button.heading-smaller:after{content:\"▼\"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{color:#959694;font-size:12px;padding:8px 10px;text-align:right}.EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.editor-statusbar span{display:inline-block;margin-left:1em;min-width:4em}.editor-statusbar .lines:before{content:\"lines: \"}.editor-statusbar .words:before{content:\"words: \"}.editor-statusbar .characters:before{content:\"characters: \"}.editor-preview-full{height:100%;left:0;position:absolute;top:0;width:100%;z-index:7}.editor-preview-full,.editor-preview-side{box-sizing:border-box;display:none;overflow:auto}.editor-preview-side{word-wrap:break-word;border:1px solid #ddd;bottom:0;position:fixed;right:0;top:50px;width:50%;z-index:9}.editor-preview-active-side{display:block}.EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:1 1 auto;height:auto;position:static}.editor-preview-active{display:block}.editor-preview{background:#fafafa;padding:10px}.editor-preview>p{margin-top:0}.editor-preview pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:calc(1.375rem + 1.5vw)}.cm-s-easymde .cm-header-2{font-size:calc(1.325rem + .9vw)}.cm-s-easymde .cm-header-3{font-size:calc(1.3rem + .6vw)}.cm-s-easymde .cm-header-4{font-size:calc(1.275rem + .3vw)}.cm-s-easymde .cm-header-5{font-size:1.25rem}.cm-s-easymde .cm-header-6{font-size:1rem}.cm-s-easymde .cm-header-1,.cm-s-easymde .cm-header-2,.cm-s-easymde .cm-header-3,.cm-s-easymde .cm-header-4,.cm-s-easymde .cm-header-5,.cm-s-easymde .cm-header-6{line-height:1.2;margin-bottom:.5rem}.cm-s-easymde .cm-comment{background:rgba(0,0,0,.05);border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.editor-toolbar .easymde-dropdown{border:1px solid #fff;border-radius:0;position:relative}.editor-toolbar .easymde-dropdown,.editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff,#fff 84%,#333 0,#333)}.easymde-dropdown-content{background-color:#f9f9f9;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:block;padding:8px;position:absolute;top:30px;visibility:hidden;z-index:2}.easymde-dropdown:active .easymde-dropdown-content,.easymde-dropdown:focus .easymde-dropdown-content,.easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}.easymde-dropdown-content button{display:block}span[data-img-src]:after{background-image:var(--bg-image);background-repeat:no-repeat;background-size:contain;content:\"\";display:block;height:0;max-height:100%;max-width:100%;padding-top:var(--height);width:var(--width)}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)}@keyframes passing-through{0%{opacity:0;transform:translateY(40px)}30%,70%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-40px)}}@keyframes slide-in{0%{opacity:0;transform:translateY(40px)}30%{opacity:1;transform:translateY(0)}}@keyframes pulse{0%{transform:scale(1)}10%{transform:scale(1.1)}20%{transform:scale(1)}}.dropzone,.dropzone *{box-sizing:border-box}.dropzone{background:#fff;border:2px solid rgba(0,0,0,.3);min-height:150px;padding:20px}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-clickable *{cursor:default}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message *{cursor:pointer}.dropzone.dz-started .dz-message{display:none}.dropzone.dz-drag-hover{border-style:solid}.dropzone.dz-drag-hover .dz-message{opacity:.5}.dropzone .dz-message{margin:2em 0;text-align:center}.dropzone .dz-message .dz-button{background:none;border:none;color:inherit;cursor:pointer;font:inherit;outline:inherit;padding:0}.dropzone .dz-preview{display:inline-block;margin:16px;min-height:100px;position:relative;vertical-align:top}.dropzone .dz-preview:hover{z-index:1000}.dropzone .dz-preview.dz-file-preview .dz-image{background:#999;background:linear-gradient(180deg,#eee,#ddd);border-radius:20px}.dropzone .dz-preview.dz-file-preview .dz-details{opacity:1}.dropzone .dz-preview.dz-image-preview{background:#fff}.dropzone .dz-preview.dz-image-preview .dz-details{transition:opacity .2s linear}.dropzone .dz-preview .dz-remove{border:none;cursor:pointer;display:block;font-size:14px;text-align:center}.dropzone .dz-preview .dz-remove:hover{text-decoration:underline}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview .dz-details{color:rgba(0,0,0,.9);font-size:13px;left:0;line-height:150%;max-width:100%;min-width:100%;opacity:0;padding:2em 1em;position:absolute;text-align:center;top:0;z-index:20}.dropzone .dz-preview .dz-details .dz-size{font-size:16px;margin-bottom:1em}.dropzone .dz-preview .dz-details .dz-filename{white-space:nowrap}.dropzone .dz-preview .dz-details .dz-filename:hover span{background-color:hsla(0,0%,100%,.8);border:1px solid hsla(0,0%,78%,.8)}.dropzone .dz-preview .dz-details .dz-filename:not(:hover){overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span{border:1px solid transparent}.dropzone .dz-preview .dz-details .dz-filename span,.dropzone .dz-preview .dz-details .dz-size span{background-color:hsla(0,0%,100%,.4);border-radius:3px;padding:0 .4em}.dropzone .dz-preview:hover .dz-image img{filter:blur(8px);transform:scale(1.05)}.dropzone .dz-preview .dz-image{border-radius:20px;display:block;height:120px;overflow:hidden;position:relative;width:120px;z-index:10}.dropzone .dz-preview .dz-image img{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{animation:passing-through 3s cubic-bezier(.77,0,.175,1)}.dropzone .dz-preview.dz-error .dz-error-mark{animation:slide-in 3s cubic-bezier(.77,0,.175,1);opacity:1}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{display:block;left:50%;margin-left:-27px;margin-top:-27px;opacity:0;pointer-events:none;position:absolute;top:50%;z-index:500}.dropzone .dz-preview .dz-error-mark svg,.dropzone .dz-preview .dz-success-mark svg{display:block;height:54px;width:54px}.dropzone .dz-preview.dz-processing .dz-progress{opacity:1;transition:all .2s linear}.dropzone .dz-preview.dz-complete .dz-progress{opacity:0;transition:opacity .4s ease-in}.dropzone .dz-preview:not(.dz-processing) .dz-progress{animation:pulse 6s ease infinite}.dropzone .dz-preview .dz-progress{background:hsla(0,0%,100%,.9);border-radius:8px;height:16px;left:50%;margin-left:-40px;margin-top:-8px;opacity:1;overflow:hidden;pointer-events:none;position:absolute;top:50%;-webkit-transform:scale(1);width:80px;z-index:1000}.dropzone .dz-preview .dz-progress .dz-upload{background:#333;background:linear-gradient(180deg,#666,#444);bottom:0;left:0;position:absolute;top:0;transition:width .3s ease-in-out;width:0}.dropzone .dz-preview.dz-error .dz-error-message{display:block}.dropzone .dz-preview.dz-error:hover .dz-error-message{opacity:1;pointer-events:auto}.dropzone .dz-preview .dz-error-message{background:#be2626;background:linear-gradient(180deg,#be2626,#a92222);border-radius:8px;color:#fff;display:block;display:none;font-size:13px;left:-10px;opacity:0;padding:.5em 1.2em;pointer-events:none;position:absolute;top:130px;transition:opacity .3s ease;width:140px;z-index:1000}.dropzone .dz-preview .dz-error-message:after{border-bottom:6px solid #be2626;border-left:6px solid transparent;border-right:6px solid transparent;content:\"\";height:0;left:64px;position:absolute;top:-6px;width:0}\n\n/*!\n * Cropper.js v1.5.12\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2021-06-12T08:00:11.623Z\n */.cropper-container{direction:ltr;font-size:0;line-height:0;position:relative;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cropper-container img{display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{bottom:0;left:0;position:absolute;right:0;top:0}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline:1px solid #39f;outline-color:rgba(51,153,255,.75);overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.3333333333%;left:0;top:33.3333333333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.3333333333%;top:0;width:33.3333333333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:after,.cropper-center:before{background-color:#eee;content:\" \";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:\" \";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC\")}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed}\n\n/*!\n   * Bootstrap Datetime Picker v4.17.49\n   * Copyright 2015-2020 Jonathan Peterson\n   * Licensed under MIT (https://github.com/Eonasdan/bootstrap-datetimepicker/blob/master/LICENSE)\n   */.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{display:block;margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{content:\"\";display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-bottom:7px solid rgba(0,0,0,.2);border-left:7px solid transparent;border-right:7px solid transparent;left:7px;top:-7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;left:8px;top:-6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid rgba(0,0,0,.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{font-size:1.2em;font-weight:700;margin:0;width:54px}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]:after{clip:rect(0,0,0,0);border:0;content:\"Increment Hours\";height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]:after{clip:rect(0,0,0,0);border:0;content:\"Increment Minutes\";height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]:after{clip:rect(0,0,0,0);border:0;content:\"Decrement Hours\";height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]:after{clip:rect(0,0,0,0);border:0;content:\"Decrement Minutes\";height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.bootstrap-datetimepicker-widget .btn[data-action=showHours]:after{clip:rect(0,0,0,0);border:0;content:\"Show Hours\";height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]:after{clip:rect(0,0,0,0);border:0;content:\"Show Minutes\";height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]:after{clip:rect(0,0,0,0);border:0;content:\"Toggle AM/PM\";height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.bootstrap-datetimepicker-widget .btn[data-action=clear]:after{clip:rect(0,0,0,0);border:0;content:\"Clear the picker\";height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.bootstrap-datetimepicker-widget .btn[data-action=today]:after{clip:rect(0,0,0,0);border:0;content:\"Set the date to today\";height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch:after{clip:rect(0,0,0,0);border:0;content:\"Toggle Date and Time Screens\";height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.bootstrap-datetimepicker-widget .picker-switch td{height:auto;line-height:inherit;margin:0;padding:0;width:auto}.bootstrap-datetimepicker-widget .picker-switch td span{height:2.5em;line-height:2.5;width:100%}.bootstrap-datetimepicker-widget table{margin:0;width:100%}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{border-radius:4px;text-align:center}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev:after{clip:rect(0,0,0,0);border:0;content:\"Previous Month\";height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.bootstrap-datetimepicker-widget table th.next:after{clip:rect(0,0,0,0);border:0;content:\"Next Month\";height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#eee}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{color:#777;font-size:.8em;height:20px;line-height:20px}.bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget table td.new,.bootstrap-datetimepicker-widget table td.old{color:#777}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{border-color:rgba(0,0,0,.2) transparent #337ab7;border-style:solid;border-width:0 0 7px 7px;bottom:4px;content:\"\";display:inline-block;position:absolute;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{border-radius:4px;cursor:pointer;display:inline-block;height:54px;line-height:54px;margin:2px 1.5px;width:54px}.bootstrap-datetimepicker-widget table td span:hover{background:#eee}.bootstrap-datetimepicker-widget table td span.active{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td span.old{color:#777}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.bootstrap-datetimepicker-widget.wider{width:21em}.bootstrap-datetimepicker-widget .datepicker-decades .decade{line-height:1.8em!important}.input-group.date .input-group-addon{cursor:pointer}.sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}@font-face{font-family:voyager;font-style:normal;font-weight:400;src:url(voyager-assets?path=fonts/voyager.eot);src:url(voyager-assets?path=fonts/voyager.eot?#iefix) format(\"embedded-opentype\"),url(voyager-assets?path=fonts/voyager.woff) format(\"woff\"),url(voyager-assets?path=fonts/voyager.ttf) format(\"truetype\"),url(voyager-assets?path=fonts/voyager.svg#voyager) format(\"svg\")}[data-icon]:before{content:attr(data-icon)}[class*=\" voyager-\"]:before,[class^=voyager-]:before,[data-icon]:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:voyager!important;font-style:normal!important;font-variant:normal!important;font-weight:400!important;line-height:1;text-transform:none!important}.voyager-bread:before{content:\"a\"}.voyager-helm:before{content:\"b\"}.voyager-play:before{content:\"c\"}.voyager-activity:before{content:\"d\"}.voyager-company:before{content:\"e\"}.voyager-file-text:before{content:\"f\"}.voyager-folder:before{content:\"g\"}.voyager-paw:before{content:\"h\"}.voyager-sort:before{content:\"o\"}.voyager-sort-asc:before{content:\"p\"}.voyager-sort-desc:before{content:\"q\"}.voyager-handle:before{content:\"m\"}.voyager-hammer:before{content:\"n\"}.voyager-images:before{content:\"i\"}.voyager-categories:before{content:\"j\"}.voyager-group:before{content:\"k\"}.voyager-person:before{content:\"s\"}.voyager-people:before{content:\"t\"}.voyager-power:before{content:\"u\"}.voyager-tools:before{content:\"v\"}.voyager-anchor:before{content:\"w\"}.voyager-double-down:before{content:\"x\"}.voyager-double-up:before{content:\"y\"}.voyager-double-left:before{content:\"z\"}.voyager-double-right:before{content:\"A\"}.voyager-window-list:before{content:\"B\"}.voyager-x:before{content:\"C\"}.voyager-dot:before{content:\"D\"}.voyager-dot-2:before{content:\"E\"}.voyager-dot-3:before{content:\"F\"}.voyager-list:before{content:\"G\"}.voyager-list-add:before{content:\"H\"}.voyager-pie-chart:before{content:\"I\"}.voyager-watch:before{content:\"J\"}.voyager-data:before{content:\"K\"}.voyager-music:before{content:\"L\"}.voyager-settings:before{content:\"N\"}.voyager-video:before{content:\"O\"}.voyager-trash:before{content:\"P\"}.voyager-tv:before{content:\"Q\"}.voyager-lock:before{content:\"R\"}.voyager-news:before{content:\"M\"}.voyager-bag:before{content:\"S\"}.voyager-upload:before{content:\"T\"}.voyager-refresh:before{content:\"U\"}.voyager-character:before{content:\"W\"}.voyager-move:before{content:\"X\"}.voyager-paypal:before{content:\"V\"}.voyager-paper-plane:before{content:\"Y\"}.voyager-ticket:before{content:\"Z\"}.voyager-youtube-play:before{content:\"0\"}.voyager-boat:before{content:\"1\"}.voyager-check:before{content:\"l\"}.voyager-alarm-clock:before{content:\"2\"}.voyager-controller:before{content:\"4\"}.voyager-pizza:before{content:\"5\"}.voyager-backpack:before{content:\"6\"}.voyager-barbeque:before{content:\"7\"}.voyager-bomb:before{content:\"8\"}.voyager-book-download:before{content:\"9\"}.voyager-browser:before{content:\"!\"}.voyager-brush:before{content:'\"'}.voyager-bubble-hear:before{content:\"#\"}.voyager-polaroid:before{content:\"$\"}.voyager-crop:before{content:\"&\"}.voyager-dashboard:before{content:\"'\"}.voyager-hotdog:before{content:\"(\"}.voyager-laptop:before{content:\")\"}.voyager-paint-bucket:before{content:\",\"}.voyager-photo:before{content:\"-\"}.voyager-photos:before{content:\".\"}.voyager-receipt:before{content:\"/\"}.voyager-buy:before{content:\":\"}.voyager-lightbulb:before{content:\";\"}.voyager-archive:before{content:\"?\"}.voyager-paperclip:before{content:\"@\"}.voyager-warning:before{content:\"[\"}.voyager-basket:before{content:\"]\"}.voyager-bell:before{content:\"^\"}.voyager-book:before{content:\"_\"}.voyager-chat:before{content:\"`\"}.voyager-down-circled:before{content:\"{\"}.voyager-location:before{content:\"}\"}.voyager-forward:before{content:\"~\"}.voyager-flashlight:before{content:\"\\\\\"}.voyager-trophy:before{content:\"\\e001\"}.voyager-diamond:before{content:\"\\e002\"}.voyager-credit-cards:before{content:\"\\e003\"}.voyager-shop:before{content:\"\\e004\"}.voyager-sound:before{content:\"\\e005\"}.voyager-study:before{content:\"\\e006\"}.voyager-pen:before{content:\"\\e007\"}.voyager-params:before{content:\"\\e008\"}.voyager-fire:before{content:\"\\e009\"}.voyager-dollar:before{content:\"\\e00a\"}.voyager-bulb:before{content:\"\\e00b\"}.voyager-lab:before{content:\"\\e00c\"}.voyager-cup:before{content:\"\\e00d\"}.voyager-megaphone:before{content:\"\\e00e\"}.voyager-heart:before{content:\"\\e00f\"}.voyager-bubble:before{content:\"\\e011\"}.voyager-search:before{content:\"\\e012\"}.voyager-tag:before{content:\"\\e013\"}.voyager-world:before{content:\"%\"}.voyager-camera:before{content:\"*\"}.voyager-calendar:before{content:\"|\"}.voyager-mail:before{content:\"\\e014\"}.voyager-phone:before{content:\"\\e015\"}.voyager-star:before{content:\"\\e016\"}.voyager-star-half:before{content:\"\\e017\"}.voyager-star-half-1:before{content:\"\\e018\"}.voyager-star-two:before{content:\"\\e019\"}.voyager-medal-rank-star:before{content:\"\\e01a\"}.voyager-facebook:before{content:\"\\e01b\"}.voyager-google-plus:before{content:\"\\e01c\"}.voyager-twitter:before{content:\"\\e01d\"}.voyager-github:before{content:\"\\e01e\"}.voyager-code:before{content:\"\\e01f\"}.voyager-pie-graph:before{content:\"\\e020\"}.voyager-javascript:before{content:\"\\e021\"}.voyager-wand:before{content:\"\\e022\"}.voyager-wineglass:before{content:\"\\e023\"}.voyager-milestone:before{content:\"\\e024\"}.voyager-terminal:before{content:\"\\e025\"}.voyager-plug:before{content:\"\\e026\"}.voyager-gift:before{content:\"\\e027\"}.voyager-markdown:before{content:\"\\e028\"}.voyager-beer:before{content:\"\\e029\"}.voyager-credit-card:before{content:\"\\e02a\"}.voyager-bolt:before{content:\"\\e02b\"}.voyager-external:before{content:\"\\e02c\"}.voyager-magnet:before{content:\"\\e02d\"}.voyager-certificate:before{content:\"\\e02e\"}.voyager-cloud-download:before{content:\"\\e02f\"}.voyager-campfire:before{content:\"\\e030\"}.voyager-new:before{content:\"\\e031\"}.voyager-skull:before{content:\"\\e032\"}.voyager-telephone:before{content:\"\\e033\"}.voyager-trees:before{content:\"\\e034\"}.voyager-bar-chart:before{content:\"\\e035\"}.voyager-check-circle:before{content:\"\\e036\"}.voyager-exclamation:before{content:\"\\e037\"}.voyager-font:before{content:\"\\e03a\"}.voyager-puzzle:before{content:\"\\e03b\"}.voyager-smile:before{content:\"\\e03c\"}.voyager-frown:before{content:\"\\e03d\"}.voyager-meh:before{content:\"\\e03e\"}.voyager-leaf:before{content:\"\\e03f\"}.voyager-info-circled:before{content:\"\\e040\"}.voyager-underline:before{content:\"\\e041\"}.voyager-wallet:before{content:\"\\e042\"}.voyager-truck:before{content:\"\\e043\"}.voyager-eye:before{content:\"\\e044\"}.voyager-sun:before{content:\"\\e045\"}.voyager-barbell:before{content:\"\\e04a\"}.voyager-bookmark:before{content:\"\\e04c\"}.voyager-volume-up:before{content:\"\\e04d\"}.voyager-volume-down:before{content:\"\\e04e\"}.voyager-wifi:before{content:\"\\e04f\"}.voyager-pause:before{content:\"\\e053\"}.voyager-resize-full:before{content:\"\\e054\"}.voyager-resize-small:before{content:\"\\e055\"}.voyager-download:before{content:\"\\e056\"}.voyager-droplet:before{content:\"\\e057\"}.voyager-umbrella:before{content:\"\\e058\"}.voyager-harddrive:before{content:\"\\e059\"}.voyager-css3:before{content:\"\\e05a\"}.voyager-html5:before{content:\"\\e05b\"}.voyager-tree:before{content:\"\\e05e\"}.voyager-file-code:before{content:\"\\e061\"}.voyager-bug:before{content:\"\\e062\"}.voyager-rocket:before{content:\"\\e063\"}.voyager-key:before{content:\"3\"}.voyager-question:before{content:\"+\"}.voyager-cursor:before{content:\"<\"}.voyager-lifebuoy:before{content:\"=\"}.voyager-thumbs-up:before{content:\">\"}.voyager-thumb-tack:before{content:\"\\e000\"}.voyager-edit:before{content:\"\\e010\"}.voyager-angle-down:before{content:\"\\e038\"}.voyager-angle-left:before{content:\"\\e039\"}.voyager-angle-right:before{content:\"\\e046\"}.voyager-angle-up:before{content:\"\\e047\"}.voyager-home:before{content:\"\\e048\"}.voyager-pirate-swords:before{content:\"\\e04b\"}.voyager-pirate:before{content:\"\\e050\"}.voyager-rum:before{content:\"\\e051\"}.voyager-cannon:before{content:\"\\e049\"}.voyager-hook:before{content:\"\\e052\"}.voyager-kraken:before{content:\"\\e05c\"}.voyager-lighthouse:before{content:\"\\e05d\"}.voyager-pirate-hat:before{content:\"\\e05f\"}.voyager-rum-1:before{content:\"\\e060\"}.voyager-ship:before{content:\"\\e064\"}.voyager-treasure:before{content:\"\\e065\"}.voyager-treasure-open:before{content:\"\\e066\"}.voyager-whale:before{content:\"\\e067\"}.voyager-compass:before{content:\"\\e068\"}.voyager-logbook:before{content:\"\\e069\"}.voyager-plus:before{content:\"\\e06a\"}.voyager-documentation:before{content:\"r\"}.voyager-belt:before{content:\"\\e06b\"}.voyager-zoom-in:before{content:\"\\e06c\"}.voyager-zoom-out:before{content:\"\\e06d\"}.voyager-scissors:before{content:\"\\e06e\"}.voyager-github-icon:before{content:\"\\e06f\"}body.login{background-position:50%;background-repeat:no-repeat;background-size:cover;-moz-background-size:cover;-ms-background-size:cover;-webkit-background-size:cover;font-family:Open Sans,sans-serif;margin:0;overflow:hidden;padding:0}body.login .login-sidebar{background:#fff;border-radius:5px;border-radius:0;border-top:5px solid #22a7f0;justify-content:center;min-height:100vh;padding:0;position:relative;z-index:2}body.login .login-sidebar:after{content:\"\";height:100%;left:0;opacity:.8;position:absolute;top:0;width:100%;z-index:3}body.login .login-container{margin-top:-150px;padding:30px;position:absolute;top:50%;width:100%;z-index:10}body.login .login-container p{border-radius:2px;color:#757c85;font-family:Open Sans,sans-serif;font-size:10px;font-weight:700;margin-bottom:0;margin-top:3px;padding-left:2px;text-align:left;text-transform:uppercase;width:auto}body.login .login-container form{padding-top:15px}body.login .login-container .voyager-refresh{font-size:10px;top:0}body.login .login-container .signingin .voyager-refresh{display:inline-block;left:0;position:relative;top:1px;transform-origin:43% 40%;-ms-transform-origin:43% 40%}body.login .logo-title-container{bottom:0;left:30px;margin-top:-100px;position:fixed;width:100%}body.login .logo-container{opacity:.8;position:relative;text-align:center;z-index:10}body.login .logo{height:auto;margin:0 auto;max-width:52px;padding-bottom:20px;padding-top:55px}body.login .logo-container .logo{padding:50px 0}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}body.login .span-input{font-size:15px;margin-left:10px;position:relative;top:-3px}body.login .login-button{border:0;border-radius:1px;border-radius:2px;color:#eee;display:block;float:left;font-family:Open Sans,sans-serif;font-size:11px;font-weight:100;font-weight:400;opacity:.8;outline:none!important;padding:12px 20px;text-align:center;text-decoration:none;text-transform:uppercase;transition:width .3s ease;width:auto}body.login .login-button:focus,body.login .login-button:hover{color:#fff;opacity:1}body.login .copy{padding:30px 30px 12px;width:auto}body.login .copy h1{color:#fff;display:inline-block;font-size:20px;font-weight:700;line-height:45px;margin:20px 0 0 14px;position:relative;text-transform:uppercase;top:0;vertical-align:middle;z-index:9999}body.login .copy p{color:#fff;font-size:13px;font-weight:300;left:15px;margin-top:0;max-width:650px;opacity:.9;position:relative;top:-8px;z-index:99}body.login .faded-bg{background:rgba(50,50,50,.5);background:linear-gradient(180deg,rgba(21,21,28,0) 0,rgba(21,21,28,.1) 40%,rgba(21,21,28,.3) 55%,rgba(21,21,28,.61) 75%,#15151c);bottom:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#0015151c\",endColorstr=\"#15151c\",GradientType=0);left:0;position:absolute;right:0;top:0}body.login .voyager-refresh{animation:spin .6s linear infinite}body.login .alert-black{background:rgba(0,0,0,.5)}body.login .alert-black,body.login .alert-red{color:#fff;margin-top:20px;position:relative;z-index:10}body.login .alert-red{background:#e74c3c;border-left:5px solid rgba(0,0,0,.1);font-size:12px}body.login .form-group-default{background-color:#fff;border:2px solid rgba(28,43,54,.07);border-radius:3px;font-weight:400;overflow:hidden;padding:7px 12px 4px;position:relative;transition:border .3s ease-in}body.login .form-group-default label{color:#58666e;display:block;font-size:10px;font-weight:500;margin:0 0 3px;opacity:1;transition:opacity .2s ease}body.login .form-group-default .form-control{background:0 0;border:none;height:25px;margin-top:-4px;min-height:25px;padding:0}body.login .form-control{-webkit-appearance:none;background:#fff;border:0;box-shadow:none;color:#1c2b36;font-weight:400;height:35px;line-height:normal;min-height:35px;outline:0;vertical-align:middle}body.login .form-control::-webkit-input-placeholder{color:#ccc;font-weight:300}body.login .form-control::-moz-placeholder{color:#ccc;font-weight:300}body.login .form-control:-ms-input-placeholder{color:#ccc;font-weight:300}body.login .form-control:-moz-placeholder{color:#ccc;font-weight:300}body.login .form-control-grey:focus,body.login .form-control:focus{box-shadow:none;outline:0!important}body.login .form-control:focus::-webkit-input-placeholder{color:#8c9ba6}body.login .form-control:focus::-moz-placeholder{color:#8c9ba6}body.login .form-control:focus:-ms-input-placeholder{color:#8c9ba6}body.login .form-control:focus:-moz-placeholder{color:#8c9ba6}body,html{height:100%}body{font-size:13px;padding-top:0;position:relative}*{outline:none}.row>[class*=col-]{margin-bottom:25px}.row.no-margin-bottom>[class*=col-]{margin-bottom:10px}.row.no-gap{margin-left:0;margin-right:0}.row.no-gap>[class*=col-]{padding-left:0;padding-right:0}.no-padding{padding:0!important}.no-padding-left{padding-left:0}.no-padding-right{padding-right:0}.no-padding-top{padding-top:0}.no-padding-bottom{padding-bottom:0}.float-left{float:left}.float-right{float:right}.clear-both{clear:both}.no-margin-bottom{margin-bottom:0}.no-margin{margin:0}a,a:hover{text-decoration:none}.font-weight-300{font-weight:300}.text-indent{text-indent:1em}.navbar{padding-left:60px;transition:all .25s;z-index:800}.navbar>.container,.navbar>.container-fluid{z-index:10001}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{font-family:Open Sans,sans-serif;font-size:1.5em;font-weight:400;height:60px;line-height:60px;margin-left:0;padding:0}.navbar>.container .navbar-brand .fa-angle-right,.navbar>.container-fluid .navbar-brand .fa-angle-right{margin-left:5px;margin-right:5px}.navbar>.container .navbar-expand-toggle,.navbar>.container-fluid .navbar-expand-toggle{background-color:transparent;border:0;float:left;height:60px;opacity:.75;transition:all .25s linear;width:60px}.navbar>.container .navbar-expand-toggle .icon,.navbar>.container-fluid .navbar-expand-toggle .icon{font-size:1.4em}.navbar>.container .navbar-right-expand-toggle,.navbar>.container-fluid .navbar-right-expand-toggle{background-color:transparent;border:0;height:60px;opacity:.75;position:absolute;right:0;transition:all .25s linear;width:60px}.navbar>.container .navbar-right-expand-toggle .icon,.navbar>.container-fluid .navbar-right-expand-toggle .icon{font-size:1.4em}.navbar .navbar-breadcrumb{background-color:transparent;float:left;margin-left:0;padding:0}.navbar .navbar-breadcrumb>li{font-family:Open Sans,sans-serif;font-size:1.5em;height:60px;line-height:60px;vertical-align:middle}.navbar .navbar-nav>li>a{height:60px;line-height:60px;padding:0 10px 0 20px}.navbar .dropdown-menu{animation-duration:.4s;-webkit-animation-duration:.4s;border:0;border-bottom-left-radius:2px;border-bottom-right-radius:2px;padding:0;position:absolute;z-index:-1}.navbar .dropdown-menu .title{box-shadow:0 1px 2px rgba(0,0,0,.3);font-family:Open Sans,sans-serif;padding:5px 10px}.navbar .dropdown-menu .message{font-family:Open Sans,sans-serif;padding:10px 20px;text-align:center}.navbar .dropdown-menu .notifications.list-group{list-style:none;margin:0;padding:0}.navbar .dropdown-menu .notifications.list-group .list-group-item{border:0;border-bottom:1px solid #eee;min-width:250px;padding:8px}.navbar .dropdown-menu .notifications.list-group .list-group-item .icon{margin-right:5px}.navbar .dropdown-menu .notifications.list-group .badge{border-radius:1em}.navbar .dropdown-menu .notifications.list-group .list-group-item:last-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.navbar .dropdown-menu .notifications.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.navbar .dropdown-menu .notifications.list-group a.list-group-item:hover{cursor:pointer}.navbar .dropdown.profile .dropdown-menu{padding-bottom:0;text-align:center;width:305px}.navbar .dropdown.profile .dropdown-menu li.profile-img{max-height:300px;overflow:hidden;padding:0}.navbar .dropdown.profile .dropdown-menu li.profile-img img.profile-img{border:0;height:auto;margin:0;width:100%}.navbar .dropdown.profile .dropdown-menu .profile-info{font-family:Open Sans,sans-serif;padding:15px}.navbar .dropdown.profile .dropdown-menu .profile-info .username{font-size:1.8em}.app-container{background:#f9f9f9;min-height:100%;padding-bottom:30px;position:relative}.app-container .app-footer{bottom:0;display:block;font-family:Open Sans,sans-serif;font-size:12px;left:65px;position:absolute;right:0;transition:all .25s}.app-container .app-footer .wrapper{height:50px;line-height:50px;padding:10px 35px 10px 25px;vertical-align:middle}.app-container .content-container{margin-left:0;margin-right:0}.app-container .content-container .side-menu{height:100%;overflow-y:auto;position:fixed;transition:width .25s;width:60px;z-index:9999}.app-container .content-container .side-menu .navbar-header{border-bottom:0 solid #e7e7e7;width:100%}.app-container .content-container .side-menu .navbar-header .navbar-brand{font-family:Open Sans,sans-serif;height:60px;line-height:60px;overflow:hidden;padding:0;width:455px;width:100%}.app-container .content-container .side-menu .navbar-header .navbar-brand .icon{display:inline-block;text-align:center;width:60px}.app-container .content-container .side-menu .navbar-header .navbar-brand .title{display:none;font-weight:200;margin-left:-10px}.app-container .content-container .side-menu .navbar-header .navbar-expand-toggle{background-color:transparent;border:0;height:60px;opacity:.75;position:absolute;right:0;transition:all .25s linear;width:60px}.app-container .content-container .side-menu .navbar{border:none;padding-left:0}.app-container .content-container .side-menu .navbar-nav li{display:block;overflow:hidden;width:100%}.app-container .content-container .side-menu .navbar-nav li a{display:block;font-family:Open Sans,sans-serif;font-size:15px;height:50px;line-height:50px;padding:0 10px;white-space:nowrap}.app-container .content-container .side-menu .navbar-nav li a .icon{display:inline-block;font-size:1.1em;margin-left:0;text-align:center;width:38px}.app-container .content-container .side-menu .navbar-nav li a .title{display:none;padding-left:6px;white-space:nowrap;width:0}.app-container .content-container .side-menu .navbar-nav li.dropdown{border:0;border-radius:0;box-shadow:none;margin-bottom:0}.app-container .content-container .side-menu .navbar-nav li.dropdown ul li a{height:44px;line-height:44px;padding:0 1.2em;vertical-align:middle}.app-container .content-container .side-menu .navbar-nav li.dropdown>a:after{content:\"\";position:absolute;right:1em}.app-container .content-container .side-menu .navbar-nav .panel-collapse.in{display:none}.app-container .content-container .side-menu:hover{width:250px}.app-container .content-container .side-menu:hover .navbar-header .navbar-brand .title{display:inline-block}.app-container .content-container .side-menu:hover .navbar-nav li a .title{display:inline-block;width:192px}.app-container .content-container .side-menu:hover .navbar-nav li.dropdown>a[aria-expanded=false]:after{content:\"\\e038\";font-family:Voyager;position:absolute;right:1em}.app-container .content-container .side-menu:hover .navbar-nav li.dropdown>a[aria-expanded=true]:after{content:\"\\e047\";font-family:Voyager;position:absolute;right:1em}.app-container .content-container .side-menu:hover .panel-collapse.in{display:block}.app-container .content-container .side-body{padding-top:70px}.app-container .content-container .side-body.padding-top{padding-top:84px}.app-container.expanded .app-footer{left:250px}.app-container.expanded .app-footer .wrapper{padding-left:25px}.app-container.expanded .content-container .navbar-top{padding-left:250px}.app-container.expanded .content-container .side-menu{width:250px}.app-container.expanded .content-container .side-menu .navbar-header .navbar-brand .title,.app-container.expanded .content-container .side-menu .navbar-nav li a .title{display:inline-block}.app-container.expanded .content-container .side-menu .navbar-nav li .panel-collapse.in{display:block}.app-container.expanded .content-container .side-menu .navbar-nav li.dropdown>a:after{content:\"\\e038\";font-family:Voyager;position:absolute;right:1em}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-left:-15px;margin-right:-15px}.page-title{color:#555;display:inline-block;font-size:18px;font-weight:700;height:auto;height:100px;line-height:43px;margin-bottom:0;margin-right:20px;margin-top:3px;padding-left:75px;padding-top:28px;position:relative}.page-title>i{font-size:36px;left:25px;margin-right:10px;position:absolute;top:30px}.page-title .title{font-size:2em}.page-title .page-action{float:right;height:40px;line-height:40px;vertical-align:middle}.voyager #bulk_delete_btn,.voyager .btn-add-new{margin-top:2px}@media (max-width:768px){#bulk_delete_btn span,.btn-add-new span{display:none}}.sub-title{font-family:Open Sans,sans-serif}.sub-title>*{display:inline-block}.sub-title h3{margin-right:10px}.sub-title .description{font-family:Open Sans,sans-serif;font-size:.9em}.sub-title .action .btn{padding:0 .5em}.app-container .side-body{margin-left:75px;margin-right:0;transition:all .5s cubic-bezier(.19,1,.22,1)}.app-container .side-body .container-fluid{padding-right:0}.app-container.expanded .side-body{margin-left:235px}@media (max-width:768px){.navbar{padding-left:0}.navbar .navbar-header{display:block;width:auto}.navbar .navbar-nav{margin:0;width:auto}.navbar .navbar-nav>li{display:inline-block}.navbar .navbar-right{height:100%;position:absolute;right:-100%;top:0;transition:all .25s linear;width:100%}.navbar .navbar-right .open .dropdown-menu{position:absolute}.navbar .navbar-right.expanded{right:0}.app-container .navbar-top{min-width:300px}.app-container .content-container .side-menu{margin-left:-250px;width:0}.app-container .content-container .side-body{margin-left:10px}.app-container.expanded .navbar-top{min-width:480px;padding-left:0}.app-container.expanded .side-menu{margin-left:0;width:250px}.app-container.expanded .side-body{margin-left:10px}.app-container .app-footer .wrapper,.app-container.expanded .app-footer .wrapper{padding-left:25px}}.card{background-color:#fff;border-radius:1px;overflow:hidden;position:relative}.card .card-body{padding:25px}.card .card-body .sub-title{font-size:1.2em;margin-bottom:25px;padding:1.2em 0 .4em}.card .card-body .sub-title .description{font-size:.8em;opacity:.8;padding-left:.4em}.card .card-body.half-padding{padding:12.5px}.card .card-header .card-title{float:left;padding:1.2em 25px}.card .card-header .card-title .title{font-family:Open Sans,sans-serif;font-size:1.5em;text-decoration:none}.card .card-header .pull-right{padding:.5em 1em}.card .card-header:after{clear:both;content:\"\";display:block}.card .card-profile-img img{height:auto;width:100%}.card .card-jumbotron{padding:1.5em}.card:hover .card-header .title{text-decoration:none!important}.card.summary-inline .card-body{padding:20px}.card.summary-inline .card-body .content{float:right}.card.summary-inline .card-body .content .title{font-family:Lato,sans-serif;font-size:3.5em;margin-top:-.3em;text-align:right}.card.summary-inline .card-body .content .sub-title{border-bottom:0;font-family:Lato,sans-serif;font-size:.9em;margin-bottom:0;margin-top:-10px;padding:0;text-align:right}.card.profile .card-body,.card.profile .card-footer{padding:.5em .8em}.panel{border-radius:1px}.panel .panel-heading{border-top-left-radius:2px;border-top-right-radius:2px}.chart{padding:15px}.chart.no-padding{margin-bottom:-5px;padding:0}.btn{border-width:1px;font-family:Open Sans,sans-serif;margin-bottom:5px;margin-top:5px}.btn,.btn-group-lg>.btn,.btn-group-lg>.btn-lg,.progress{border-radius:1px}.progress .progress-bar{box-shadow:none}.pagination{margin-bottom:5px;margin-top:5px}.pagination li:first-child span,.pagination li:first-child>a{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination li:last-child span,.pagination li:last-child>a{border-bottom-right-radius:3px;border-top-right-radius:3px}.form-control{border-radius:1px}.bs-example-modal .modal{display:block;position:relative;z-index:100}.modal{z-index:100001}.modal .modal-dialog .modal-header{font-family:Open Sans,sans-serif}.modal .modal-dialog .modal-content{border-radius:4px;box-shadow:none}.modal .modal-dialog .modal-footer .btn{margin-bottom:0;margin-top:0}.modal .modal-dialog .modal-footer .btn.btn-default{margin-right:10px}.modal-backdrop{z-index:100000}.modal-backdrop.in{opacity:.8}.alert{border-width:0}.alert,.list-group .badge{border-radius:1px}.list-group .list-group-item:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.list-group .list-group-item:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.checkbox3,.radio3{margin-bottom:0;margin-top:0}.checkbox-inline{margin-bottom:5px}.checkbox3 label,.radio3 label{padding:8px 0 8px 30px}.checkbox3 label:after,.checkbox3 label:before,.radio3 label:after,.radio3 label:before{top:5px}.checkbox-inline,.checkbox3 label,.radio-inline,.radio3 label{font-weight:400}.thumbnail{border-radius:1px}.thumbnail .caption{padding:.5em 1.2em}.thumbnail .caption .h1,.thumbnail .caption .h2,.thumbnail .caption .h3,.thumbnail .caption h1,.thumbnail .caption h2,.thumbnail .caption h3{margin-top:15px}body.login-page{background:url(../../img/app-header-bg.jpg) no-repeat 50% fixed;background-size:cover}body.login-page .login-box{left:50%;max-width:320px;padding:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%}body.login-page .login-box>.title{margin-bottom:1em}body.login-page .login-box>.row{margin-bottom:0;margin-left:0;margin-right:0}body.login-page .login-form{padding:0}body.login-page .login-form .login-header{font-size:1.5em;margin-bottom:1.2em}body.login-page .login-form .login-body{border-radius:1px;padding:1.5em}body.login-page .login-form input{border-radius:1px;font-size:1.1em;margin-bottom:.8em;margin-top:.5em;padding:1.2em 1em}body.login-page .login-button .btn{border-radius:1px;font-size:1.1em;margin-bottom:0;padding:.5em 2em}body.login-page .login-footer{border-bottom-left-radius:3px;border-bottom-right-radius:3px;padding-bottom:8px;padding-top:8px;text-align:right;width:100%}@media (max-width:768px){body.login-page .login-form .login-header{margin-bottom:1em}body.login-page .login-box{max-width:260px;width:100%}}.dataTables_wrapper .row{margin-bottom:.5em;margin-left:0;margin-right:0}.dataTables_wrapper .top{margin-bottom:6px;position:relative}.dataTables_wrapper .bottom{margin-top:6px}.dataTables_wrapper .bottom:after,.dataTables_wrapper .top:after{clear:both;content:\"\";display:block;position:relative}.dataTables_wrapper .dataTables_paginate .paginate_button{border:0;margin-left:0;padding:0}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button:hover{border:0}.dataTables_wrapper tfoot{display:none}table.dataTable.no-footer{border-bottom:1px solid #f1f1f1}.code-preview{min-height:400px;width:100%}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{border:0;border-radius:0}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{border-radius:0;border-top:0}.tab-content>div{padding:20px}.tabs-below>.nav-tabs,.tabs-left>.nav-tabs,.tabs-right>.nav-tabs{border-bottom:0}.pill-content>.pill-pane,.tab-content>.tab-pane{display:none}.pill-content>.active,.tab-content>.active{display:block}.tabs-below>.nav-tabs>li{margin-bottom:0;margin-top:-1px}.tabs-below>.nav-tabs>li>a:focus,.tabs-below>.nav-tabs>li>a:hover{border-bottom-color:transparent}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{margin-bottom:3px;margin-right:0;min-width:74px}.tabs-left,.tabs-right{display:table}.tabs-left>.nav-tabs{display:table-cell;margin-right:19px}.tabs-left>.nav-tabs>li>a{margin-right:-1px}.tabs-right>.nav-tabs{display:table-cell;margin-left:19px}.tabs-right>.nav-tabs>li>a{margin-left:-1px}.tab:after{clear:both;content:\"\";display:block}.step .nav-tabs{border-bottom:0;margin-bottom:20px;margin-left:0;margin-right:0}.step .nav-tabs>li[class^=col-]{padding-left:0;padding-right:0}.step .nav-tabs>li:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}.step .nav-tabs>li{border-right:0}.step .nav-tabs>li>a{border-bottom:0;display:block;margin-right:0;overflow:hidden;padding:1em 1em 1em 2em;text-align:left;vertical-align:middle;white-space:nowrap;width:100%}.step .nav-tabs>li>a .icon{display:inline-block;font-size:2.5em;margin-right:.25em;vertical-align:middle}.step .nav-tabs>li>a .step-title{display:inline-block;text-align:left;vertical-align:middle;width:auto}.step .nav-tabs>li>a .step-title .title{font-size:1.1em;font-weight:700}.step .nav-tabs>li>a .step-title .description{font-size:.9em}.step .nav-tabs>li>a:hover{border-bottom:0}.step .nav-tabs>li:after{right:-15px;z-index:100001}.step .nav-tabs>li:after,.step .nav-tabs>li:before{content:\"\";height:0;position:absolute;top:50%;transform:translateY(-50%);width:0}.step .nav-tabs>li:before{right:-16px;z-index:100000}.step .nav-tabs>li.active>a,.step .nav-tabs>li.active>a:focus,.step .nav-tabs>li.active>a:hover{border:0;border-bottom:0;border-radius:0}.step .nav-tabs>li:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.step .nav-tabs>li:last-child:after,.step .nav-tabs>li:last-child:before{display:none}.step .tab-content>div{padding:0}.step.card-no-padding .nav-tabs{margin-bottom:0}.step.card-no-padding .nav-tabs>li{border-radius:0}.step.card-no-padding .tab-content>div{padding:20px}.step.tabs-left .tab-content{display:table-cell;padding:5px 15px;vertical-align:top}.step.tabs-left .tab-content>div{padding:20px}.step.tabs-left .nav-tabs{border-bottom:0;margin-bottom:0;margin-left:0;margin-right:0}.step.tabs-left .nav-tabs>li[class^=col-]{padding-left:0;padding-right:0}.step.tabs-left .nav-tabs>li:first-child{border-top-left-radius:0;border-top-right-radius:0}.step.tabs-left .nav-tabs>li{border-right:0;display:table;min-width:250px;width:250px}.step.tabs-left .nav-tabs>li>a{display:table-cell;margin-right:0;overflow:hidden;padding:1em 1em 1em 2em;table-layout:fixed;vertical-align:middle;white-space:nowrap;width:100%}.step.tabs-left .nav-tabs>li>a .icon{display:inline-block;font-size:2.5em;margin-right:.25em;vertical-align:middle}.step.tabs-left .nav-tabs>li>a .step-title{display:inline-block;vertical-align:middle;width:auto}.step.tabs-left .nav-tabs>li>a .step-title .title{font-size:1.1em;font-weight:700}.step.tabs-left .nav-tabs>li>a .step-title .description{font-size:.9em}.step.tabs-left .nav-tabs>li>a:hover{border-bottom:0}.step.tabs-left .nav-tabs>li:after,.step.tabs-left .nav-tabs>li:before{content:\"\";display:none;height:0;position:absolute;top:50%;transform:translateY(-50%);width:0;z-index:10000}.step.tabs-left .nav-tabs>li:before{right:-16px}.step.tabs-left .nav-tabs>li.active>a,.step.tabs-left .nav-tabs>li.active>a:focus,.step.tabs-left .nav-tabs>li.active>a:hover{border:0;border-bottom:0;border-radius:0}.step.tabs-left .nav-tabs>li.active:after,.step.tabs-left .nav-tabs>li.active:before{display:block}.step.tabs-left .nav-tabs>li:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.image-tool-box{border:1px solid #ddd;clear:both;display:inline-block;margin-bottom:10px;padding:2px;position:relative}.image-tool-box img{height:auto;width:200px}.image-tool-box .image-tools{display:block;height:100%;left:0;position:absolute;top:0;transition:all .5s;-webkit-transition:all .5s;width:100%}.image-tool-box .image-tools .glyphicon{color:#fff;cursor:pointer;display:none;position:absolute;right:10px;top:10px}.image-tool-box:hover .image-tools{background:rgba(0,0,0,.8);transition:all .5s;-webkit-transition:all .5s}.image-tool-box:hover .image-tools .glyphicon{display:block}.select2-container--open{z-index:999999}.select2-container--default .select2-selection--single{border:0;border-radius:0;border-right:1px solid #f1f1f1;height:34px;padding:3px}.panel-body .select2-selection{border:1px solid #f1f1f1}.select2-container--default .select2-selection--single .select2-selection__arrow{top:4px}.select2-dropdown{z-index:9}.select2-container--open .select2-dropdown--below{border:0;box-shadow:0 15px 15px -1px rgba(0,0,0,.15)}@media (max-width:768px){.step .nav-tabs>li:after,.step .nav-tabs>li:before{display:none}}.loader-container{display:none}.loader .loader-container{display:block;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1003}.loader:after{background-color:rgba(0,0,0,.9);border-radius:1px;content:\"\";display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:1001}.pricing-table .pt-header{padding:1em;text-align:center}.pricing-table .pt-header .plan-pricing .pricing{font-size:2.5em}.pricing-table .pt-header .plan-pricing .pricing-type{opacity:.9}.pricing-table .pt-body{padding:1em;text-align:center}.pricing-table .pt-body .plan-detail{list-style:none;margin:0;padding:0}.pricing-table .pt-footer{padding:.75em;text-align:center}.icons-list{list-style:none;margin:0;padding:0}.icons-list>li{float:left;height:100px;padding:8px;text-align:center;width:100px}.icons-list>li span{display:block}.icons-list>li .glyphicon{font-size:1.5em}.icons-list>li .glyphicon-class{font-size:.75em;margin-top:8px}.icons-list:after{clear:both;content:\"\";display:block;position:relative}.row.example>[class*=col-]>div{background-color:#eee;border:1px solid #ddd;padding:10px}.breadcrumb>li+li:before{content:\"\\e046\";font-family:Voyager;margin-right:3px;position:relative;top:1px}.message-list{list-style-type:none;margin:0;padding:0}.message-list>a>li{border-bottom:1px dotted #eee;padding:8px}.message-list>a>li>.message-block{min-height:60px;padding-left:70px}.message-list>a>li>.message-block .username{font-size:12px;font-weight:700}.message-list>a>li>.message-block .message-datetime{color:#aaa;font-size:10px}.message-list>a>li>.message-block .message{font-size:12px}.message-list>a>li .profile-img{height:60px;width:60px}.message-list>a:hover li{background-color:rgba(0,0,0,.01)}.bs-example>*{margin-bottom:20px}.bs-example>:last-child{margin-bottom:5px}.landing-page{font-family:Open Sans,sans-serif}.landing-page .navbar .navbar-toggle{border:0;border-radius:0;height:44px;padding:0 15px;position:absolute;right:0}.landing-page .app-header{background-image:url(../img/app-header-bg.jpg);background-position:50%;background-repeat:no-repeat;background-size:cover;margin-bottom:0;padding-top:100px}.landing-page .app-header .app-logo{margin-bottom:20px}.landing-page .app-header .app-description{margin-bottom:40px}.landing-page .app-content-a,.landing-page .app-content-b{padding-bottom:20px;padding-top:50px}.landing-page .app-content-b.feature-1{background-image:url(../img/bg/picjumbo.com_HNCK3558.jpg)}.landing-page .app-content-b.contact-us,.landing-page .app-content-b.feature-1{background-position:50%;background-repeat:no-repeat;background-size:cover;margin-bottom:0}.landing-page .app-content-b.contact-us{background-image:url(../img/contact-us-bg.jpg);padding-bottom:60px;padding-top:60px}.landing-page .app-content-b.contact-us .contact-us-header{font-size:46px;font-weight:300}.landing-page .app-content-b.contact-us .contact-us-description{font-size:18px;font-weight:300;opacity:.9;text-indent:40px}.landing-page .app-content-b.contact-us form{margin-top:20px}.landing-page .app-content-b.contact-us form input{border:0;padding:10px;width:100%}.landing-page .app-content-header{font-size:46px;font-weight:300}.landing-page .app-content-description{font-size:18px;font-weight:300}.landing-page .app-footer{margin-bottom:0;padding-bottom:15px;padding-top:15px}.landing-page .app-footer p{margin:0}.landing-page .navbar-affix{border-top:2px rgba(78,205,196,.8);box-shadow:0 0 6px 0 rgba(96,100,109,.4);height:60px;position:fixed;transition:all .2s ease-in;width:100%}.landing-page .navbar.affix{background-color:hsla(0,0%,100%,.95)!important;height:60px;margin-top:0;opacity:1;z-index:4000}.landing-page .navbar-affix.affix li a{height:60px;line-height:60px}.landing-page .navbar-affix.affix .navbar-nav>li>a{background-color:transparent;color:#333;font-weight:400}.landing-page .navbar{background-color:transparent;box-shadow:none;padding-left:0}.landing-page .navbar .navbar-right{position:relative;right:0}.landing-page .navbar .navbar-header{border-bottom:0 solid #e7e7e7}.landing-page .navbar .navbar-header .navbar-brand{font-family:Open Sans,sans-serif;height:60px;line-height:60px;overflow:hidden;padding:0;width:45px;width:100%}.landing-page .navbar .navbar-header .navbar-brand .icon{display:inline-block;text-align:center;width:50px}.landing-page .navbar .navbar-header .navbar-brand .title{display:inline-block;margin-left:-10px}.landing-page .navbar .navbar-header .navbar-expand-toggle{background-color:transparent;border:0;height:60px;opacity:.75;position:absolute;right:0;transition:all .25s linear;width:60px}@media only screen and (max-width:768px){.landing-page .navbar .navbar-header .navbar-brand{padding-left:15px}}.row-example>[class*=col-]{margin-bottom:0}.row-dd{border-bottom:1px solid #eee;margin:0 -7px;padding-bottom:0;padding-top:20px}.row-dd:last-child{border-bottom:0}.row-dd-relationship{border-left:3px solid #f7325b}.row-dd-relationship i.voyager-heart{background:#fff;border:2px solid #f2435c;border-radius:50px;color:#f7325b;display:block;float:left;font-size:16px;height:28px;left:-4px;padding:4px 5px 5px 4px;position:relative;text-align:center;top:-4px;width:28px}.row-dd-relationship .delete_relationship{background:red;border-bottom-left-radius:0;border-top-left-radius:3px;bottom:0;color:#fff;cursor:pointer;font-size:10px;font-weight:700;opacity:.7;padding:6px 28px 6px 10px;position:absolute;right:0;transition:opacity .1s linear;z-index:2}.row-dd-relationship .delete_relationship i{border-bottom-left-radius:3px;border-top-right-radius:3px;color:#fff;font-size:16px;height:21px;line-height:22px;position:absolute;right:4px;text-align:center;top:4px;width:21px}.row-dd-relationship .delete_relationship:hover{opacity:1}.row-dd-relationship .voyager-relationship-details-btn{background:#f9f9fb;border:1px solid #fff;border-radius:25px;color:#f7325b;cursor:pointer;float:right;font-size:12px;font-weight:400;padding:10px 15px 10px 30px;position:relative;transition:all .2s ease}.row-dd-relationship .voyager-relationship-details-btn i{font-size:16px;left:10px;position:absolute;top:8px}.row-dd-relationship .voyager-relationship-details-btn i.voyager-angle-up{display:none}.row-dd-relationship .voyager-relationship-details-btn span.open_text{display:inline}.row-dd-relationship .voyager-relationship-details-btn span.close_text,.row-dd-relationship .voyager-relationship-details-btn.open i.voyager-angle-down{display:none}.row-dd-relationship .voyager-relationship-details-btn.open i.voyager-angle-up{display:block}.row-dd-relationship .voyager-relationship-details-btn.open span.open_text{display:none}.row-dd-relationship .voyager-relationship-details-btn.open span.close_text{display:inline}.row-dd-relationship .voyager-relationship-details-btn:hover{background:#fcfcff}.row-dd-relationship .voyager-relationship-details{background:#f5f5f7;border-top:1px solid #efeff2;display:none;height:auto;margin-bottom:0;padding:15px 15px 45px}.row-dd-relationship .relationship_details_content{display:flex}.row-dd-relationship .relationship_details_content.margin_top{margin-top:20px}.row-dd-relationship .relationship_details_content.belongsTo.flexed,.row-dd-relationship .relationship_details_content.hasOneMany.flexed{display:flex}.row-dd-relationship .relationship_details_content.belongsTo,.row-dd-relationship .relationship_details_content.hasOneMany{display:none;width:100%}.row-dd-relationship .relationship_details_content.belongsTo label span,.row-dd-relationship .relationship_details_content.hasOneMany label span{color:#444}.row-dd-relationship .relationship_details_content.relationshipPivot{display:none}.row-dd-relationship .relationship_details_content.relationshipPivot.visible{display:flex}.row-dd-relationship .relationship_details_content>label{background:#f1f1f1;border-bottom:1px solid #eaeaea;border-top:1px solid #eaeaea;font-size:11px;font-weight:700;height:38px;line-height:23px;margin-bottom:0;padding:7px 12px}.row-dd-relationship .relationship_details_content>label:first-child{border-left:1px solid #eaeaea}.row-dd-relationship .relationship_details_content p{background:#fff;border:1px solid #eaeaea;border-bottom-left-radius:3px;border-right:0;border-top-left-radius:3px;color:#333;float:left;line-height:22px;margin-bottom:0;margin-right:0;padding:6px 20px}.row-dd-relationship .relationship_details_content p.flex{border-radius:0;border-bottom-right-radius:3px;border-right:1px solid #eaeaea;border-top-right-radius:3px;display:flex;padding-right:10px}.row-dd-relationship .relationship_details_content p.flex span{line-height:24px;margin-left:4px;margin-right:5px}.row-dd-relationship .relationship_details_content p.flex input{position:relative;top:3px}.row-dd-relationship .relationship_details_content p.relationship_table_select{background:#efefef;color:#76838f;font-size:12px;font-weight:700;padding-top:8px}.row-dd-relationship .relationship_details_content span{display:inline-block;flex:1}.row-dd-relationship .relationship_details_content span.select2{display:block;z-index:1!important}.row-dd-relationship .relationship_details_content span.select2 span{display:block}.row-dd-relationship .relationship_details_content .relationship_type+span{font-weight:700}.row-dd-relationship .relationship_details_content select{border:1px solid #f1f1f1;margin-left:10px}.row-dd-relationship .relationship_details_content .relationship_taggable{display:none}.row-dd-relationship .relationship_details_content .select2{border:1px solid #eaeaea;border-right:0;flex:1;height:38px;margin-right:0}.row-dd-relationship .relationship_details_content .select2 .select2-selection{border:0;border-radius:0;height:36px}.row-dd-relationship .relationship_details_content .select2:last-child{border-bottom-right-radius:4px;border-right:1px solid #eaeaea;border-top-right-radius:2px}.row-dd-relationship .relationship_details_content .form-control{border-radius:0;flex:1;height:38px}.row-dd-relationship .relationship_details_content .form-control:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.row-dd:hover{background-color:#f6f8fa}.row-dd>div:first-child{padding-left:37px}.row-dd>div:first-child .handler{cursor:move;left:14px;position:absolute;top:0}.fake-table-hd{padding:0 8px}.fake-table-hd>div:first-child{padding-left:29px}.fake-table-hd>div{background-color:#f6f8fa;border-bottom:1px solid #eaeaea;font-weight:500;margin-bottom:0!important;padding:8px}.navbar-wrapper{left:0;position:absolute;right:0;top:0;z-index:20}.navbar-wrapper>.container{padding-left:0;padding-right:0}.navbar-wrapper .navbar{padding-left:15px;padding-right:15px}.navbar-wrapper .navbar .container{width:auto}.carousel{height:500px;margin-bottom:60px}.carousel-caption{z-index:10}.carousel .item{background-color:#777;height:500px}.carousel-inner>.item>img{height:500px;left:0;min-width:100%;position:absolute;top:0}.marketing .col-lg-4{margin-bottom:20px;text-align:center}.marketing h2{font-weight:400}.marketing .col-lg-4 p{margin-left:10px;margin-right:10px}.featurette-divider{margin:80px 0}.featurette-heading{font-weight:300;letter-spacing:-1px;line-height:1}.language-selector{float:right!important;padding:0 10px 0 0}.side-body>.language-selector{padding:28px 15px 0 0}.modal-body .language-selector{float:right!important;padding:0}@media (min-width:768px){.navbar-wrapper .container{padding-left:15px;padding-right:15px}.navbar-wrapper .navbar{border-radius:4px;padding-left:0;padding-right:0}.carousel-caption p{font-size:21px;line-height:1.4;margin-bottom:20px}.featurette-heading{font-size:50px}}@media (min-width:992px){.featurette-heading{margin-bottom:20px;margin-top:100px}}a.text-action{color:#a3afb7}a.text-action,a.text-action:focus,a.text-action:hover{text-decoration:none}a.text-action:focus,a.text-action:hover{color:#ccd5db}a.text-action .icon+span{margin-left:3px}a.text-like{color:#a3afb7!important}a.text-like,a.text-like:focus,a.text-like:hover{text-decoration:none}a.text-like.active,a.text-like:focus,a.text-like:hover{color:#f96868!important}.text-action+.text-action{margin-left:6px}.img-bordered{border:1px solid #e4eaec;padding:3px}.img-bordered-primary{border-color:#62a8ea!important}.img-bordered-purple{border-color:#7c51d1!important}.img-bordered-red{border-color:#e9595b!important}.img-bordered-green{border-color:#7dd3ae!important}.img-bordered-orange{border-color:#ec9940!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{text-shadow:rgba(0,0,0,.15) 0 0 1px}.h1 .icon:first-child,.h2 .icon:first-child,.h3 .icon:first-child,.h4 .icon:first-child,.h5 .icon:first-child,.h6 .icon:first-child,h1 .icon:first-child,h2 .icon:first-child,h3 .icon:first-child,h4 .icon:first-child,h5 .icon:first-child,h6 .icon:first-child{margin-right:.5em}.mark,mark{border-radius:2px;color:#fff}.drop-cap{color:#263238;float:left;font-family:Georgia;font-size:60px;line-height:50px;margin-right:5px;padding:5px}.drop-cap-reversed{background-color:#263238;color:#fff}.list-icons{list-style:none;margin-left:0;padding-left:10px}.list-icons>li{margin-top:6px}.list-icons>li:first-child{margin-top:0}.list-icons>li i{float:left;margin:0 6px 0 0;width:1em}.text-primary{color:#62a8ea}a.text-primary:focus,a.text-primary:hover{color:#358fe4}.text-success{color:#46be8a}a.text-success:focus,a.text-success:hover{color:#369b6f}.text-info{color:#57c7d4}a.text-info:focus,a.text-info:hover{color:#33b6c5}.text-warning{color:#f2a654}a.text-warning:focus,a.text-warning:hover{color:#ee8d25}.text-danger{color:#f96868}a.text-danger:focus,a.text-danger:hover{color:#f73737}blockquote{border-left-width:2px;color:#526069;font-size:20px}blockquote .small,blockquote footer,blockquote small{font-size:14px}.blockquote-reverse{border-right-width:2px}.blockquote{border-left-width:4px;border-radius:3px;padding:15px 20px}.blockquote.blockquote-reverse{border-right-width:4px}.blockquote-success{background-color:rgba(70,190,138,.1);border-color:#46be8a}.blockquote-info{background-color:rgba(87,199,212,.1);border-color:#57c7d4}.blockquote-warning{background-color:rgba(242,166,84,.1);border-color:#f2a654}.blockquote-danger{background-color:hsla(0,92%,69%,.1);border-color:#f96868}code{border:1px solid #bcd8f1}pre code{border:none}.container{max-width:100%}@media (min-width:1600px){.container{width:1310px}.col-xlg-1,.col-xlg-10,.col-xlg-11,.col-xlg-12,.col-xlg-2,.col-xlg-3,.col-xlg-4,.col-xlg-5,.col-xlg-6,.col-xlg-7,.col-xlg-8,.col-xlg-9{float:left}.col-xlg-12{width:100%}.col-xlg-11{width:91.66666667%}.col-xlg-10{width:83.33333333%}.col-xlg-9{width:75%}.col-xlg-8{width:66.66666667%}.col-xlg-7{width:58.33333333%}.col-xlg-6{width:50%}.col-xlg-5{width:41.66666667%}.col-xlg-4{width:33.33333333%}.col-xlg-3{width:25%}.col-xlg-2{width:16.66666667%}.col-xlg-1{width:8.33333333%}.col-xlg-pull-12{right:100%}.col-xlg-pull-11{right:91.66666667%}.col-xlg-pull-10{right:83.33333333%}.col-xlg-pull-9{right:75%}.col-xlg-pull-8{right:66.66666667%}.col-xlg-pull-7{right:58.33333333%}.col-xlg-pull-6{right:50%}.col-xlg-pull-5{right:41.66666667%}.col-xlg-pull-4{right:33.33333333%}.col-xlg-pull-3{right:25%}.col-xlg-pull-2{right:16.66666667%}.col-xlg-pull-1{right:8.33333333%}.col-xlg-pull-0{right:auto}.col-xlg-push-12{left:100%}.col-xlg-push-11{left:91.66666667%}.col-xlg-push-10{left:83.33333333%}.col-xlg-push-9{left:75%}.col-xlg-push-8{left:66.66666667%}.col-xlg-push-7{left:58.33333333%}.col-xlg-push-6{left:50%}.col-xlg-push-5{left:41.66666667%}.col-xlg-push-4{left:33.33333333%}.col-xlg-push-3{left:25%}.col-xlg-push-2{left:16.66666667%}.col-xlg-push-1{left:8.33333333%}.col-xlg-push-0{left:auto}.col-xlg-offset-12{margin-left:100%}.col-xlg-offset-11{margin-left:91.66666667%}.col-xlg-offset-10{margin-left:83.33333333%}.col-xlg-offset-9{margin-left:75%}.col-xlg-offset-8{margin-left:66.66666667%}.col-xlg-offset-7{margin-left:58.33333333%}.col-xlg-offset-6{margin-left:50%}.col-xlg-offset-5{margin-left:41.66666667%}.col-xlg-offset-4{margin-left:33.33333333%}.col-xlg-offset-3{margin-left:25%}.col-xlg-offset-2{margin-left:16.66666667%}.col-xlg-offset-1{margin-left:8.33333333%}.col-xlg-offset-0{margin-left:0}}.col-xlg-1,.col-xlg-10,.col-xlg-11,.col-xlg-12,.col-xlg-2,.col-xlg-3,.col-xlg-4,.col-xlg-5,.col-xlg-6,.col-xlg-7,.col-xlg-8,.col-xlg-9{min-height:1px;padding-left:15px;padding-right:15px;position:relative}.row.no-space{margin-left:0;margin-right:0}.row.no-space>[class*=col-]{padding-left:0;padding-right:0}.row-lg{margin-left:-25px;margin-right:-25px}.row-lg>.col-lg-1,.row-lg>.col-lg-10,.row-lg>.col-lg-11,.row-lg>.col-lg-12,.row-lg>.col-lg-2,.row-lg>.col-lg-3,.row-lg>.col-lg-4,.row-lg>.col-lg-5,.row-lg>.col-lg-6,.row-lg>.col-lg-7,.row-lg>.col-lg-8,.row-lg>.col-lg-9,.row-lg>.col-md-1,.row-lg>.col-md-10,.row-lg>.col-md-11,.row-lg>.col-md-12,.row-lg>.col-md-2,.row-lg>.col-md-3,.row-lg>.col-md-4,.row-lg>.col-md-5,.row-lg>.col-md-6,.row-lg>.col-md-7,.row-lg>.col-md-8,.row-lg>.col-md-9,.row-lg>.col-sm-1,.row-lg>.col-sm-10,.row-lg>.col-sm-11,.row-lg>.col-sm-12,.row-lg>.col-sm-2,.row-lg>.col-sm-3,.row-lg>.col-sm-4,.row-lg>.col-sm-5,.row-lg>.col-sm-6,.row-lg>.col-sm-7,.row-lg>.col-sm-8,.row-lg>.col-sm-9,.row-lg>.col-xlg-1,.row-lg>.col-xlg-10,.row-lg>.col-xlg-11,.row-lg>.col-xlg-12,.row-lg>.col-xlg-2,.row-lg>.col-xlg-3,.row-lg>.col-xlg-4,.row-lg>.col-xlg-5,.row-lg>.col-xlg-6,.row-lg>.col-xlg-7,.row-lg>.col-xlg-8,.row-lg>.col-xlg-9,.row-lg>.col-xs-1,.row-lg>.col-xs-10,.row-lg>.col-xs-11,.row-lg>.col-xs-12,.row-lg>.col-xs-2,.row-lg>.col-xs-3,.row-lg>.col-xs-4,.row-lg>.col-xs-5,.row-lg>.col-xs-6,.row-lg>.col-xs-7,.row-lg>.col-xs-8,.row-lg>.col-xs-9{padding-left:25px;padding-right:25px}.table{color:#76838f}.table>tfoot>tr>th,.table>thead>tr>th{color:#526069;font-weight:400}.table>thead>tr>th{border-bottom:1px solid #e4eaec}.table>tbody+tbody{border-top:1px solid #e4eaec}.table a{text-decoration:underline}.table td>.checkbox-custom:only-child,.table th>.checkbox-custom:only-child{margin-bottom:0;margin-top:0;text-align:center}.table .danger,.table .danger a,.table .info,.table .info a,.table .success,.table .success a,.table .warning,.table .warning a{color:#fff}.table .cell-30{width:30px}.table .cell-40{width:40px}.table .cell-50{width:50px}.table .cell-60{width:60px}.table .cell-80{width:80px}.table .cell-100{width:100px}.table .cell-120{width:120px}.table .cell-130{width:130px}.table .cell-150{width:150px}.table .cell-180{width:180px}.table .cell-200{width:200px}.table .cell-250{width:250px}.table .cell-300{width:300px}.table-danger thead tr,.table-dark thead tr,.table-info thead tr,.table-primary thead tr,.table-success thead tr,.table-warning thead tr{color:#fff}.table-default thead tr{background:#f3f7f9}.table-primary thead tr{background:#62a8ea}.table-success thead tr{background:#46be8a}.table-info thead tr{background:#57c7d4}.table-warning thead tr{background:#f2a654}.table-danger thead tr{background:#f96868}.table-dark thead tr{background:#526069}.table-gray thead tr{background:#ccd5db;color:#526069}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:1px}.table-bordered>thead:first-child>tr:first-child>th{border:1px solid #e4eaec}.table-section+tbody{display:none}.table-section-arrow{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Web Icons;font-style:normal;font-weight:400;position:relative;text-align:center;text-rendering:auto;transform:translate(0);transition:transform .15s}.table-section-arrow:before{content:\"\\f181\"}.table-section.active tr{background-color:#f3f7f9}.table-section.active+tbody{display:table-row-group}.table-section.active .table-section-arrow{transform:rotate(-180deg)}.form-control{box-shadow:none;transition:box-shadow .25s linear,border .25s linear,color .25s linear,background-color .25s linear}.form-control:not(select){-webkit-appearance:none}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#46be8a}.has-success .form-control{border-color:#46be8a;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#369b6f;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #91d9ba}.has-success .input-group-addon{background-color:#fff;border-color:#46be8a;color:#46be8a}.has-success .form-control-feedback{color:#46be8a}.has-success .form-control{box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.has-success .form-control:focus{border-color:#46be8a;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(70,190,138,.6);outline:0}.has-success .form-control.focus,.has-success .form-control:focus{border-color:#46be8a;box-shadow:none}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#f2a654}.has-warning .form-control{border-color:#f2a654;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#ee8d25;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #f9d7b3}.has-warning .input-group-addon{background-color:#fff;border-color:#f2a654;color:#f2a654}.has-warning .form-control-feedback{color:#f2a654}.has-warning .form-control{box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.has-warning .form-control:focus{border-color:#f2a654;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(242,166,84,.6);outline:0}.has-warning .form-control.focus,.has-warning .form-control:focus{border-color:#f2a654;box-shadow:none}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#f96868}.has-error .form-control{border-color:#f96868;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#f73737;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fdcaca}.has-error .input-group-addon{background-color:#fff;border-color:#f96868;color:#f96868}.has-error .form-control-feedback{color:#f96868}.has-error .form-control{box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.has-error .form-control:focus{border-color:#f96868;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px hsla(0,92%,69%,.6);outline:0}.has-error .form-control.focus,.has-error .form-control:focus{border-color:#f96868;box-shadow:none}.form-group.has-feedback.no-label .form-control-feedback{top:0}.form-group.has-feedback.left-feedback .form-control-feedback{left:0;right:auto}.form-group.has-feedback.left-feedback .form-control{padding-left:50px;padding-right:13px}.form-control.square{border-radius:0}.form-control.round{border-radius:200px}textarea.form-control.no-resize{resize:none}.input-group-file input[type=text]{background-color:#fff}.input-group-file .btn-file{overflow:hidden;position:relative}.input-group-file .btn-file.btn-outline{border:1px solid #e4eaec;border-left:none}.input-group-file .btn-file.btn-outline:hover{border-left:none}.input-group-file .btn-file>.icon{margin:0 3px}.input-group-file .btn-file input[type=file]{cursor:pointer;display:block;left:0;min-height:100%;min-width:100%;opacity:0;position:absolute;text-align:0;top:0}.help-block{margin-bottom:8px;margin-top:7px}.help-block>.icon{margin:0 5px}.input-search-close{color:#000;filter:alpha(opacity=20);opacity:.2;text-shadow:none}.input-search-close.icon{font-size:inherit;line-height:inherit}.input-search-close:focus,.input-search-close:hover{color:#000;cursor:pointer;filter:alpha(opacity=50);opacity:.5;text-decoration:none}button.input-search-close{-webkit-appearance:none;background:0 0;border:0;cursor:pointer;padding:0}.input-search{position:relative}.input-search .form-control{border-radius:200px}.input-search .input-search-close,.input-search .input-search-icon{position:absolute;top:50%;transform:translateY(-50%);width:36px;z-index:1}.input-search .input-search-close{right:8px}.input-search .input-search-icon+.form-control{padding-left:43.5px}.input-search .input-search-icon{color:#a3afb7;font-size:16px;left:8px;pointer-events:none;text-align:center}.input-search-btn+.form-control{padding-right:50px}.input-search-btn{background:0 0;border:none;border-radius:0 200px 200px 0;height:100%;padding:0 10px;position:absolute;right:0;top:0}.input-search-btn>.icon{margin:0 3px}.input-search-dark .input-search-icon{color:#76838f}.input-search-dark .form-control{background:#f3f7f9;box-shadow:none}.input-search-dark .form-control:focus{background-color:transparent}.form-inline .form-group{margin-right:20px}.form-inline .form-group:last-child{margin-right:0}.form-inline .control-label{margin-right:5px}@media (max-width:767px){.form-inline .form-group{margin-right:0}}.btn.active:focus,.btn:active:focus,.btn:focus{outline:0}.btn.active,.btn:active{box-shadow:none}.btn .icon{line-height:inherit;margin:-1px 3px 0;text-align:center;width:1em}.btn-block{white-space:normal}.btn-outline.btn-default{background-color:transparent;color:#76838f}.btn-outline.btn-default.active,.btn-outline.btn-default:active,.btn-outline.btn-default:focus,.btn-outline.btn-default:hover,.open>.dropdown-toggle.btn-outline.btn-default{background-color:rgba(118,131,143,.1);border-color:#e4eaec;color:#76838f}.btn-outline.btn-default.active .badge,.btn-outline.btn-default:active .badge,.btn-outline.btn-default:focus .badge,.btn-outline.btn-default:hover .badge,.open>.dropdown-toggle.btn-outline.btn-default .badge{background-color:#76838f;color:#76838f}.btn-outline.btn-primary{background-color:transparent;color:#62a8ea}.btn-outline.btn-primary.active,.btn-outline.btn-primary:active,.btn-outline.btn-primary:focus,.btn-outline.btn-primary:hover,.open>.dropdown-toggle.btn-outline.btn-primary{background-color:#62a8ea;border-color:#62a8ea;color:#fff}.btn-outline.btn-primary.active .badge,.btn-outline.btn-primary:active .badge,.btn-outline.btn-primary:focus .badge,.btn-outline.btn-primary:hover .badge,.open>.dropdown-toggle.btn-outline.btn-primary .badge{background-color:#fff;color:#62a8ea}.btn-outline.btn-success{background-color:transparent;color:#46be8a}.btn-outline.btn-success.active,.btn-outline.btn-success:active,.btn-outline.btn-success:focus,.btn-outline.btn-success:hover,.open>.dropdown-toggle.btn-outline.btn-success{background-color:#46be8a;border-color:#46be8a;color:#fff}.btn-outline.btn-success.active .badge,.btn-outline.btn-success:active .badge,.btn-outline.btn-success:focus .badge,.btn-outline.btn-success:hover .badge,.open>.dropdown-toggle.btn-outline.btn-success .badge{background-color:#fff;color:#46be8a}.btn-outline.btn-info{background-color:transparent;color:#57c7d4}.btn-outline.btn-info.active,.btn-outline.btn-info:active,.btn-outline.btn-info:focus,.btn-outline.btn-info:hover,.open>.dropdown-toggle.btn-outline.btn-info{background-color:#57c7d4;border-color:#57c7d4;color:#fff}.btn-outline.btn-info.active .badge,.btn-outline.btn-info:active .badge,.btn-outline.btn-info:focus .badge,.btn-outline.btn-info:hover .badge,.open>.dropdown-toggle.btn-outline.btn-info .badge{background-color:#fff;color:#57c7d4}.btn-outline.btn-warning{background-color:transparent;color:#f2a654}.btn-outline.btn-warning.active,.btn-outline.btn-warning:active,.btn-outline.btn-warning:focus,.btn-outline.btn-warning:hover,.open>.dropdown-toggle.btn-outline.btn-warning{background-color:#f2a654;border-color:#f2a654;color:#fff}.btn-outline.btn-warning.active .badge,.btn-outline.btn-warning:active .badge,.btn-outline.btn-warning:focus .badge,.btn-outline.btn-warning:hover .badge,.open>.dropdown-toggle.btn-outline.btn-warning .badge{background-color:#fff;color:#f2a654}.btn-outline.btn-danger{background-color:transparent;color:#f96868}.btn-outline.btn-danger.active,.btn-outline.btn-danger:active,.btn-outline.btn-danger:focus,.btn-outline.btn-danger:hover,.open>.dropdown-toggle.btn-outline.btn-danger{background-color:#f96868;border-color:#f96868;color:#fff}.btn-outline.btn-danger.active .badge,.btn-outline.btn-danger:active .badge,.btn-outline.btn-danger:focus .badge,.btn-outline.btn-danger:hover .badge,.open>.dropdown-toggle.btn-outline.btn-danger .badge{background-color:#fff;color:#f96868}.btn-outline.btn-dark{background-color:transparent;color:#526069}.btn-outline.btn-dark.active,.btn-outline.btn-dark:active,.btn-outline.btn-dark:focus,.btn-outline.btn-dark:hover,.open>.dropdown-toggle.btn-outline.btn-dark{background-color:#526069;border-color:#526069;color:#fff}.btn-outline.btn-dark.active .badge,.btn-outline.btn-dark:active .badge,.btn-outline.btn-dark:focus .badge,.btn-outline.btn-dark:hover .badge,.open>.dropdown-toggle.btn-outline.btn-dark .badge{background-color:#fff;color:#526069}.btn-outline.btn-inverse{background-color:transparent;color:#fff}.btn-outline.btn-inverse.active,.btn-outline.btn-inverse:active,.btn-outline.btn-inverse:focus,.btn-outline.btn-inverse:hover,.open>.dropdown-toggle.btn-outline.btn-inverse{background-color:#fff;border-color:#fff;color:#76838f}.btn-outline.btn-inverse.active .badge,.btn-outline.btn-inverse:active .badge,.btn-outline.btn-inverse:focus .badge,.btn-outline.btn-inverse:hover .badge,.open>.dropdown-toggle.btn-outline.btn-inverse .badge{background-color:#76838f;color:#fff}.btn-group-lg>.btn,.btn-lg{border-radius:4px;font-size:18px;line-height:1.3333333;padding:10px 18px}.btn-group-sm>.btn,.btn-sm{border-radius:2px;font-size:12px;line-height:1.5;padding:6px 13px}.btn-group-xs>.btn,.btn-xs{border-radius:2px;font-size:12px;line-height:1.5;padding:1px 5px}.btn-squared{border-radius:0}.btn-round{border-radius:1000px}.btn-default.focus,.btn-default:focus,.btn-default:hover{background-color:#f3f7f9;border-color:#f3f7f9}.btn-default.active,.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{background-color:#ccd5db;border-color:#ccd5db}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#f3f7f9;border-color:#f3f7f9;color:#76838f}.btn-default.btn-up:before{border-bottom-color:#e4eaec}.btn-default.btn-up:focus:before,.btn-default.btn-up:hover:before{border-bottom-color:#f3f7f9}.btn-default.btn-up.active:before,.btn-default.btn-up:active:before,.open>.dropdown-toggle.btn-default.btn-up:before{border-bottom-color:#ccd5db}.btn-default.btn-right:before{border-left-color:#e4eaec}.btn-default.btn-right:focus:before,.btn-default.btn-right:hover:before{border-left-color:#f3f7f9}.btn-default.btn-right.active:before,.btn-default.btn-right:active:before,.open>.dropdown-toggle.btn-default.btn-right:before{border-left-color:#ccd5db}.btn-default.btn-bottom:before{border-top-color:#e4eaec}.btn-default.btn-bottom:focus:before,.btn-default.btn-bottom:hover:before{border-top-color:#f3f7f9}.btn-default.btn-bottom.active:before,.btn-default.btn-bottom:active:before,.open>.dropdown-toggle.btn-default.btn-bottom:before{border-top-color:#ccd5db}.btn-default.btn-left:before{border-right-color:#e4eaec}.btn-default.btn-left:focus:before,.btn-default.btn-left:hover:before{border-right-color:#f3f7f9}.btn-default.btn-left.active:before,.btn-default.btn-left:active:before,.open>.dropdown-toggle.btn-default.btn-left:before{border-right-color:#ccd5db}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{background-color:#89bceb;border-color:#89bceb}.btn-primary.active,.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{background-color:#4e97d9;border-color:#4e97d9}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#a2caee;border-color:#a2caee;color:#fff}.btn-primary.btn-up:before{border-bottom-color:#62a8ea}.btn-primary.btn-up:focus:before,.btn-primary.btn-up:hover:before{border-bottom-color:#89bceb}.btn-primary.btn-up.active:before,.btn-primary.btn-up:active:before,.open>.dropdown-toggle.btn-primary.btn-up:before{border-bottom-color:#4e97d9}.btn-primary.btn-right:before{border-left-color:#62a8ea}.btn-primary.btn-right:focus:before,.btn-primary.btn-right:hover:before{border-left-color:#89bceb}.btn-primary.btn-right.active:before,.btn-primary.btn-right:active:before,.open>.dropdown-toggle.btn-primary.btn-right:before{border-left-color:#4e97d9}.btn-primary.btn-bottom:before{border-top-color:#62a8ea}.btn-primary.btn-bottom:focus:before,.btn-primary.btn-bottom:hover:before{border-top-color:#89bceb}.btn-primary.btn-bottom.active:before,.btn-primary.btn-bottom:active:before,.open>.dropdown-toggle.btn-primary.btn-bottom:before{border-top-color:#4e97d9}.btn-primary.btn-left:before{border-right-color:#62a8ea}.btn-primary.btn-left:focus:before,.btn-primary.btn-left:hover:before{border-right-color:#89bceb}.btn-primary.btn-left.active:before,.btn-primary.btn-left:active:before,.open>.dropdown-toggle.btn-primary.btn-left:before{border-right-color:#4e97d9}.btn-success.focus,.btn-success:focus,.btn-success:hover{background-color:#5cd29d;border-color:#5cd29d}.btn-success.active,.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{background-color:#36ab7a;border-color:#36ab7a}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#7dd3ae;border-color:#7dd3ae;color:#fff}.btn-success.btn-up:before{border-bottom-color:#46be8a}.btn-success.btn-up:focus:before,.btn-success.btn-up:hover:before{border-bottom-color:#5cd29d}.btn-success.btn-up.active:before,.btn-success.btn-up:active:before,.open>.dropdown-toggle.btn-success.btn-up:before{border-bottom-color:#36ab7a}.btn-success.btn-right:before{border-left-color:#46be8a}.btn-success.btn-right:focus:before,.btn-success.btn-right:hover:before{border-left-color:#5cd29d}.btn-success.btn-right.active:before,.btn-success.btn-right:active:before,.open>.dropdown-toggle.btn-success.btn-right:before{border-left-color:#36ab7a}.btn-success.btn-bottom:before{border-top-color:#46be8a}.btn-success.btn-bottom:focus:before,.btn-success.btn-bottom:hover:before{border-top-color:#5cd29d}.btn-success.btn-bottom.active:before,.btn-success.btn-bottom:active:before,.open>.dropdown-toggle.btn-success.btn-bottom:before{border-top-color:#36ab7a}.btn-success.btn-left:before{border-right-color:#46be8a}.btn-success.btn-left:focus:before,.btn-success.btn-left:hover:before{border-right-color:#5cd29d}.btn-success.btn-left.active:before,.btn-success.btn-left:active:before,.open>.dropdown-toggle.btn-success.btn-left:before{border-right-color:#36ab7a}.btn-info.focus,.btn-info:focus,.btn-info:hover{background-color:#77d6e1;border-color:#77d6e1}.btn-info.active,.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{background-color:#47b8c6;border-color:#47b8c6}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#9ae1e9;border-color:#9ae1e9;color:#fff}.btn-info.btn-up:before{border-bottom-color:#57c7d4}.btn-info.btn-up:focus:before,.btn-info.btn-up:hover:before{border-bottom-color:#77d6e1}.btn-info.btn-up.active:before,.btn-info.btn-up:active:before,.open>.dropdown-toggle.btn-info.btn-up:before{border-bottom-color:#47b8c6}.btn-info.btn-right:before{border-left-color:#57c7d4}.btn-info.btn-right:focus:before,.btn-info.btn-right:hover:before{border-left-color:#77d6e1}.btn-info.btn-right.active:before,.btn-info.btn-right:active:before,.open>.dropdown-toggle.btn-info.btn-right:before{border-left-color:#47b8c6}.btn-info.btn-bottom:before{border-top-color:#57c7d4}.btn-info.btn-bottom:focus:before,.btn-info.btn-bottom:hover:before{border-top-color:#77d6e1}.btn-info.btn-bottom.active:before,.btn-info.btn-bottom:active:before,.open>.dropdown-toggle.btn-info.btn-bottom:before{border-top-color:#47b8c6}.btn-info.btn-left:before{border-right-color:#57c7d4}.btn-info.btn-left:focus:before,.btn-info.btn-left:hover:before{border-right-color:#77d6e1}.btn-info.btn-left.active:before,.btn-info.btn-left:active:before,.open>.dropdown-toggle.btn-info.btn-left:before{border-right-color:#47b8c6}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{background-color:#f4b066;border-color:#f4b066}.btn-warning.active,.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{background-color:#ec9940;border-color:#ec9940}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f6be80;border-color:#f6be80;color:#fff}.btn-warning.btn-up:before{border-bottom-color:#f2a654}.btn-warning.btn-up:focus:before,.btn-warning.btn-up:hover:before{border-bottom-color:#f4b066}.btn-warning.btn-up.active:before,.btn-warning.btn-up:active:before,.open>.dropdown-toggle.btn-warning.btn-up:before{border-bottom-color:#ec9940}.btn-warning.btn-right:before{border-left-color:#f2a654}.btn-warning.btn-right:focus:before,.btn-warning.btn-right:hover:before{border-left-color:#f4b066}.btn-warning.btn-right.active:before,.btn-warning.btn-right:active:before,.open>.dropdown-toggle.btn-warning.btn-right:before{border-left-color:#ec9940}.btn-warning.btn-bottom:before{border-top-color:#f2a654}.btn-warning.btn-bottom:focus:before,.btn-warning.btn-bottom:hover:before{border-top-color:#f4b066}.btn-warning.btn-bottom.active:before,.btn-warning.btn-bottom:active:before,.open>.dropdown-toggle.btn-warning.btn-bottom:before{border-top-color:#ec9940}.btn-warning.btn-left:before{border-right-color:#f2a654}.btn-warning.btn-left:focus:before,.btn-warning.btn-left:hover:before{border-right-color:#f4b066}.btn-warning.btn-left.active:before,.btn-warning.btn-left:active:before,.open>.dropdown-toggle.btn-warning.btn-left:before{border-right-color:#ec9940}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{background-color:#fa7a7a;border-color:#fa7a7a}.btn-danger.active,.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{background-color:#e9595b;border-color:#e9595b}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#fa9898;border-color:#fa9898;color:#fff}.btn-danger.btn-up:before{border-bottom-color:#f96868}.btn-danger.btn-up:focus:before,.btn-danger.btn-up:hover:before{border-bottom-color:#fa7a7a}.btn-danger.btn-up.active:before,.btn-danger.btn-up:active:before,.open>.dropdown-toggle.btn-danger.btn-up:before{border-bottom-color:#e9595b}.btn-danger.btn-right:before{border-left-color:#f96868}.btn-danger.btn-right:focus:before,.btn-danger.btn-right:hover:before{border-left-color:#fa7a7a}.btn-danger.btn-right.active:before,.btn-danger.btn-right:active:before,.open>.dropdown-toggle.btn-danger.btn-right:before{border-left-color:#e9595b}.btn-danger.btn-bottom:before{border-top-color:#f96868}.btn-danger.btn-bottom:focus:before,.btn-danger.btn-bottom:hover:before{border-top-color:#fa7a7a}.btn-danger.btn-bottom.active:before,.btn-danger.btn-bottom:active:before,.open>.dropdown-toggle.btn-danger.btn-bottom:before{border-top-color:#e9595b}.btn-danger.btn-left:before{border-right-color:#f96868}.btn-danger.btn-left:focus:before,.btn-danger.btn-left:hover:before{border-right-color:#fa7a7a}.btn-danger.btn-left.active:before,.btn-danger.btn-left:active:before,.open>.dropdown-toggle.btn-danger.btn-left:before{border-right-color:#e9595b}.btn-inverse{background-color:#fff;border-color:#e4eaec;color:#76838f}.btn-inverse.focus,.btn-inverse:focus{background-color:#e6e6e6;border-color:#99b0b7;color:#76838f}.btn-inverse.active,.btn-inverse:active,.btn-inverse:hover,.open>.dropdown-toggle.btn-inverse{background-color:#e6e6e6;border-color:#c0ced3;color:#76838f}.btn-inverse.active.focus,.btn-inverse.active:focus,.btn-inverse.active:hover,.btn-inverse:active.focus,.btn-inverse:active:focus,.btn-inverse:active:hover,.open>.dropdown-toggle.btn-inverse.focus,.open>.dropdown-toggle.btn-inverse:focus,.open>.dropdown-toggle.btn-inverse:hover{background-color:#d4d4d4;border-color:#99b0b7;color:#76838f}.btn-inverse.active,.btn-inverse:active,.open>.dropdown-toggle.btn-inverse{background-image:none}.btn-inverse.disabled.focus,.btn-inverse.disabled:focus,.btn-inverse.disabled:hover,.btn-inverse[disabled].focus,.btn-inverse[disabled]:focus,.btn-inverse[disabled]:hover,fieldset[disabled] .btn-inverse.focus,fieldset[disabled] .btn-inverse:focus,fieldset[disabled] .btn-inverse:hover{background-color:#fff;border-color:#e4eaec}.btn-inverse .badge{background-color:#76838f;color:#fff}.btn-inverse.focus,.btn-inverse:focus,.btn-inverse:hover{background-color:#fff;border-color:#f3f7f9}.btn-inverse.active,.btn-inverse.active.focus,.btn-inverse.active:focus,.btn-inverse.active:hover,.btn-inverse:active,.btn-inverse:active.focus,.btn-inverse:active:focus,.btn-inverse:active:hover,.open>.dropdown-toggle.btn-inverse,.open>.dropdown-toggle.btn-inverse.focus,.open>.dropdown-toggle.btn-inverse:focus,.open>.dropdown-toggle.btn-inverse:hover{background-color:#fff;border-color:#ccd5db}.btn-inverse.disabled,.btn-inverse.disabled.active,.btn-inverse.disabled.focus,.btn-inverse.disabled:active,.btn-inverse.disabled:focus,.btn-inverse.disabled:hover,.btn-inverse[disabled],.btn-inverse[disabled].active,.btn-inverse[disabled].focus,.btn-inverse[disabled]:active,.btn-inverse[disabled]:focus,.btn-inverse[disabled]:hover,fieldset[disabled] .btn-inverse,fieldset[disabled] .btn-inverse.active,fieldset[disabled] .btn-inverse.focus,fieldset[disabled] .btn-inverse:active,fieldset[disabled] .btn-inverse:focus,fieldset[disabled] .btn-inverse:hover{background-color:#fff;border-color:#a3afb7;color:#ccd5db}.btn-inverse.btn-up.active:before,.btn-inverse.btn-up:active:before,.btn-inverse.btn-up:before,.btn-inverse.btn-up:focus:before,.btn-inverse.btn-up:hover:before,.open>.dropdown-toggle.btn-inverse.btn-up:before{border-bottom-color:#fff}.btn-inverse.btn-right.active:before,.btn-inverse.btn-right:active:before,.btn-inverse.btn-right:before,.btn-inverse.btn-right:focus:before,.btn-inverse.btn-right:hover:before,.open>.dropdown-toggle.btn-inverse.btn-right:before{border-left-color:#fff}.btn-inverse.btn-bottom.active:before,.btn-inverse.btn-bottom:active:before,.btn-inverse.btn-bottom:before,.btn-inverse.btn-bottom:focus:before,.btn-inverse.btn-bottom:hover:before,.open>.dropdown-toggle.btn-inverse.btn-bottom:before{border-top-color:#fff}.btn-inverse.btn-left.active:before,.btn-inverse.btn-left:active:before,.btn-inverse.btn-left:before,.btn-inverse.btn-left:focus:before,.btn-inverse.btn-left:hover:before,.open>.dropdown-toggle.btn-inverse.btn-left:before{border-right-color:#fff}.btn-dark{background-color:#526069;border-color:#526069;color:#fff}.btn-dark.focus,.btn-dark:focus{background-color:#3c464c;border-color:#1a1f21;color:#fff}.btn-dark:hover{color:#fff}.btn-dark.active,.btn-dark:active,.btn-dark:hover,.open>.dropdown-toggle.btn-dark{background-color:#3c464c;border-color:#374147}.btn-dark.active.focus,.btn-dark.active:focus,.btn-dark.active:hover,.btn-dark:active.focus,.btn-dark:active:focus,.btn-dark:active:hover,.open>.dropdown-toggle.btn-dark.focus,.open>.dropdown-toggle.btn-dark:focus,.open>.dropdown-toggle.btn-dark:hover{background-color:#2c3338;border-color:#1a1f21;color:#fff}.btn-dark.active,.btn-dark:active,.open>.dropdown-toggle.btn-dark{background-image:none}.btn-dark.disabled.focus,.btn-dark.disabled:focus,.btn-dark.disabled:hover,.btn-dark[disabled].focus,.btn-dark[disabled]:focus,.btn-dark[disabled]:hover,fieldset[disabled] .btn-dark.focus,fieldset[disabled] .btn-dark:focus,fieldset[disabled] .btn-dark:hover{background-color:#526069;border-color:#526069}.btn-dark .badge{background-color:#fff;color:#526069}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{background-color:#76838f;border-color:#76838f}.btn-dark.active,.btn-dark.active.focus,.btn-dark.active:focus,.btn-dark.active:hover,.btn-dark:active,.btn-dark:active.focus,.btn-dark:active:focus,.btn-dark:active:hover,.open>.dropdown-toggle.btn-dark,.open>.dropdown-toggle.btn-dark.focus,.open>.dropdown-toggle.btn-dark:focus,.open>.dropdown-toggle.btn-dark:hover{background-color:#37474f;border-color:#37474f}.btn-dark.disabled,.btn-dark.disabled.active,.btn-dark.disabled.focus,.btn-dark.disabled:active,.btn-dark.disabled:focus,.btn-dark.disabled:hover,.btn-dark[disabled],.btn-dark[disabled].active,.btn-dark[disabled].focus,.btn-dark[disabled]:active,.btn-dark[disabled]:focus,.btn-dark[disabled]:hover,fieldset[disabled] .btn-dark,fieldset[disabled] .btn-dark.active,fieldset[disabled] .btn-dark.focus,fieldset[disabled] .btn-dark:active,fieldset[disabled] .btn-dark:focus,fieldset[disabled] .btn-dark:hover{background-color:#a3afb7;border-color:#a3afb7;color:#fff}.btn-dark.btn-up:before{border-bottom-color:#526069}.btn-dark.btn-up:focus:before,.btn-dark.btn-up:hover:before{border-bottom-color:#76838f}.btn-dark.btn-up.active:before,.btn-dark.btn-up:active:before,.open>.dropdown-toggle.btn-dark.btn-up:before{border-bottom-color:#37474f}.btn-dark.btn-right:before{border-left-color:#526069}.btn-dark.btn-right:focus:before,.btn-dark.btn-right:hover:before{border-left-color:#76838f}.btn-dark.btn-right.active:before,.btn-dark.btn-right:active:before,.open>.dropdown-toggle.btn-dark.btn-right:before{border-left-color:#37474f}.btn-dark.btn-bottom:before{border-top-color:#526069}.btn-dark.btn-bottom:focus:before,.btn-dark.btn-bottom:hover:before{border-top-color:#76838f}.btn-dark.btn-bottom.active:before,.btn-dark.btn-bottom:active:before,.open>.dropdown-toggle.btn-dark.btn-bottom:before{border-top-color:#37474f}.btn-dark.btn-left:before{border-right-color:#526069}.btn-dark.btn-left:focus:before,.btn-dark.btn-left:hover:before{border-right-color:#76838f}.btn-dark.btn-left.active:before,.btn-dark.btn-left:active:before,.open>.dropdown-toggle.btn-dark.btn-left:before{border-right-color:#37474f}.btn-dark.active,.btn-dark:active,.btn-dark:focus,.btn-dark:hover,.open>.dropdown-toggle.btn-dark{color:#fff}.btn-dark.btn-flat{color:#526069}.btn-flat{background:0 0;border:none;box-shadow:none}.btn-flat.disabled{color:#a3afb7}.btn-icon,.btn.icon{line-height:1em;padding:10px}.btn-group-xs>.btn-icon.btn,.btn-group-xs>.btn.icon,.btn-icon.btn-xs,.btn.icon.btn-xs{font-size:12px;padding:4px}.btn-group-sm>.btn-icon.btn,.btn-group-sm>.btn.icon,.btn-icon.btn-sm,.btn.icon.btn-sm{font-size:14px;padding:8px}.btn-group-lg>.btn-icon.btn,.btn-group-lg>.btn.icon,.btn-icon.btn-lg,.btn.icon.btn-lg{font-size:20px;padding:12px}.btn-icon.disabled,.btn.icon.disabled{color:#a3afb7}.btn-icon .icon{margin:-1px 0 0}.btn-raised{box-shadow:0 0 2px rgba(0,0,0,.18),0 2px 4px rgba(0,0,0,.21);transition:box-shadow .25s cubic-bezier(.4,0,.2,1)}.btn-raised.active,.btn-raised:active,.btn-raised:hover,.open>.dropdown-toggle.btn-raised{box-shadow:0 0 3px rgba(0,0,0,.15),0 3px 6px rgba(0,0,0,.2)}.btn-raised.disabled,.btn-raised[disabled],fieldset[disabled] .btn-raised{box-shadow:none}.btn-floating{border-radius:100%;box-shadow:0 6px 10px rgba(0,0,0,.15);font-size:24px;height:56px;margin:0;padding:0;text-align:center;width:56px}.btn-floating.btn-xs,.btn-group-xs>.btn-floating.btn{font-size:13px;height:30px;padding:0;width:30px}.btn-floating.btn-sm,.btn-group-sm>.btn-floating.btn{font-size:15px;height:40px;padding:0;width:40px}.btn-floating.btn-lg,.btn-group-lg>.btn-floating.btn{font-size:30px;height:70px;padding:0;width:70px}.btn-floating i{position:relative;top:0}.btn-animate{overflow:hidden;position:relative}.btn-animate span{display:block;height:100%;transform:translate(0);width:100%}.btn-animate-side{padding:8px 28px}.btn-animate-side span{transition:transform .2s ease-out 0s}.btn-animate-side span>.icon{display:block;left:0;opacity:0;position:absolute;top:50%;transform:translate(-20px,-50%);transition:opacity .2s ease-out 0s}.btn-animate-side:hover span{transform:translate(10px)}.btn-animate-side:hover span>.icon{opacity:1}.btn-animate-side.btn-xs,.btn-group-xs>.btn-animate-side.btn{padding:3px 14px}.btn-animate-side.btn-xs span>.icon,.btn-group-xs>.btn-animate-side.btn span>.icon{left:5px}.btn-animate-side.btn-xs:hover span,.btn-group-xs>.btn-animate-side.btn:hover span{transform:translate(8px)}.btn-animate-side.btn-sm,.btn-group-sm>.btn-animate-side.btn{padding:6px 22px}.btn-animate-side.btn-sm span>.icon,.btn-group-sm>.btn-animate-side.btn span>.icon{left:3px}.btn-animate-side.btn-sm:hover span,.btn-group-sm>.btn-animate-side.btn:hover span{transform:translate(8px)}.btn-animate-side.btn-lg,.btn-group-lg>.btn-animate-side.btn{padding:10px 33px}.btn-animate-side.btn-lg span>.icon,.btn-group-lg>.btn-animate-side.btn span>.icon{left:-6px}.btn-animate-side.btn-lg:hover span,.btn-group-lg>.btn-animate-side.btn:hover span{transform:translate(14px)}.btn-animate-vertical span{transition:all .2s ease-out 0s}.btn-animate-vertical span>.icon{display:block;font-size:24px;left:50%;position:absolute;top:-2px;transform:translate(-50%,-100%)}.btn-animate-vertical:hover span{transform:translateY(150%)}.btn-animate-vertical.btn-xs span>.icon,.btn-group-xs>.btn-animate-vertical.btn span>.icon{font-size:18px;top:-5px}.btn-animate-vertical.btn-sm span>.icon,.btn-group-sm>.btn-animate-vertical.btn span>.icon{font-size:21px;top:-3px}.btn-animate-vertical.btn-lg span>.icon,.btn-group-lg>.btn-animate-vertical.btn span>.icon{font-size:37px}.btn-labeled{padding:0 8px 0 0}.btn-labeled .btn-label{margin-right:5px;padding:6px 8px}.btn-group-xs>.btn-labeled.btn,.btn-labeled.btn-xs{padding-right:5px}.btn-group-xs>.btn-labeled.btn .btn-label,.btn-labeled.btn-xs .btn-label{margin-right:2px;padding:1px 4px}.btn-group-sm>.btn-labeled.btn,.btn-labeled.btn-sm{padding-right:13px}.btn-group-sm>.btn-labeled.btn .btn-label,.btn-labeled.btn-sm .btn-label{margin-right:10px;padding:6px}.btn-group-lg>.btn-labeled.btn,.btn-labeled.btn-lg{padding-right:14px}.btn-group-lg>.btn-labeled.btn .btn-label,.btn-labeled.btn-lg .btn-label{margin-right:11px;padding:10px 14px}.btn-labeled.btn-block{text-align:left}.btn-label{background-color:rgba(0,0,0,.15);border-radius:3px 0 0 3px;display:inline-block}.btn-pill-left{border-radius:500px 0 0 500px}.btn-pill-right{border-radius:0 500px 500px 0}.btn-direction{position:relative}.btn-direction:before{border:8px solid transparent;content:\"\";line-height:0;position:absolute}.btn-up:before{border-bottom-color:#e4eaec;left:50%;margin-left:-8px;top:-16px}.btn-right:before{border-left-color:#e4eaec;margin-top:-8px;right:-16px;top:50%}.btn-bottom:before{border-top-color:#e4eaec;bottom:-16px;left:50%;margin-left:-8px}.btn-left:before{border-right-color:#e4eaec;left:-16px;margin-top:-8px;top:50%}.btn-pure,.btn-pure.active,.btn-pure.active.focus,.btn-pure.active:focus,.btn-pure.active:hover,.btn-pure.focus,.btn-pure:active,.btn-pure:active.focus,.btn-pure:active:focus,.btn-pure:active:hover,.btn-pure:focus,.btn-pure:focus.focus,.btn-pure:focus:focus,.btn-pure:focus:hover,.btn-pure:hover,.btn-pure:hover.focus,.btn-pure:hover:focus,.btn-pure:hover:hover,.btn-pure[disabled],.btn-pure[disabled].focus,.btn-pure[disabled]:focus,.btn-pure[disabled]:hover,.open>.dropdown-toggle.btn-pure,.open>.dropdown-toggle.btn-pure.focus,.open>.dropdown-toggle.btn-pure:focus,.open>.dropdown-toggle.btn-pure:hover,fieldset[disabled] .btn-pure,fieldset[disabled] .btn-pure.focus,fieldset[disabled] .btn-pure:focus,fieldset[disabled] .btn-pure:hover{background-color:transparent;border-color:transparent;box-shadow:none}.btn-pure.btn-default{color:#a3afb7}.btn-pure.btn-default.active,.btn-pure.btn-default.active .badge,.btn-pure.btn-default.active.focus,.btn-pure.btn-default.active:focus,.btn-pure.btn-default.active:hover,.btn-pure.btn-default:active,.btn-pure.btn-default:active .badge,.btn-pure.btn-default:active.focus,.btn-pure.btn-default:active:focus,.btn-pure.btn-default:active:hover,.btn-pure.btn-default:focus,.btn-pure.btn-default:focus .badge,.btn-pure.btn-default:focus.focus,.btn-pure.btn-default:focus:focus,.btn-pure.btn-default:focus:hover,.btn-pure.btn-default:hover,.btn-pure.btn-default:hover .badge,.btn-pure.btn-default:hover.focus,.btn-pure.btn-default:hover:focus,.btn-pure.btn-default:hover:hover,.open>.dropdown-toggle.btn-pure.btn-default,.open>.dropdown-toggle.btn-pure.btn-default .badge,.open>.dropdown-toggle.btn-pure.btn-default.focus,.open>.dropdown-toggle.btn-pure.btn-default:focus,.open>.dropdown-toggle.btn-pure.btn-default:hover{color:#526069}.btn-pure.btn-primary{color:#62a8ea}.btn-pure.btn-primary.active,.btn-pure.btn-primary.active .badge,.btn-pure.btn-primary.active.focus,.btn-pure.btn-primary.active:focus,.btn-pure.btn-primary.active:hover,.btn-pure.btn-primary:active,.btn-pure.btn-primary:active .badge,.btn-pure.btn-primary:active.focus,.btn-pure.btn-primary:active:focus,.btn-pure.btn-primary:active:hover,.btn-pure.btn-primary:focus,.btn-pure.btn-primary:focus .badge,.btn-pure.btn-primary:focus.focus,.btn-pure.btn-primary:focus:focus,.btn-pure.btn-primary:focus:hover,.btn-pure.btn-primary:hover,.btn-pure.btn-primary:hover .badge,.btn-pure.btn-primary:hover.focus,.btn-pure.btn-primary:hover:focus,.btn-pure.btn-primary:hover:hover,.open>.dropdown-toggle.btn-pure.btn-primary,.open>.dropdown-toggle.btn-pure.btn-primary .badge,.open>.dropdown-toggle.btn-pure.btn-primary.focus,.open>.dropdown-toggle.btn-pure.btn-primary:focus,.open>.dropdown-toggle.btn-pure.btn-primary:hover{color:#3583ca}.btn-pure.btn-success{color:#46be8a}.btn-pure.btn-success.active,.btn-pure.btn-success.active .badge,.btn-pure.btn-success.active.focus,.btn-pure.btn-success.active:focus,.btn-pure.btn-success.active:hover,.btn-pure.btn-success:active,.btn-pure.btn-success:active .badge,.btn-pure.btn-success:active.focus,.btn-pure.btn-success:active:focus,.btn-pure.btn-success:active:hover,.btn-pure.btn-success:focus,.btn-pure.btn-success:focus .badge,.btn-pure.btn-success:focus.focus,.btn-pure.btn-success:focus:focus,.btn-pure.btn-success:focus:hover,.btn-pure.btn-success:hover,.btn-pure.btn-success:hover .badge,.btn-pure.btn-success:hover.focus,.btn-pure.btn-success:hover:focus,.btn-pure.btn-success:hover:hover,.open>.dropdown-toggle.btn-pure.btn-success,.open>.dropdown-toggle.btn-pure.btn-success .badge,.open>.dropdown-toggle.btn-pure.btn-success.focus,.open>.dropdown-toggle.btn-pure.btn-success:focus,.open>.dropdown-toggle.btn-pure.btn-success:hover{color:#279566}.btn-pure.btn-info{color:#57c7d4}.btn-pure.btn-info.active,.btn-pure.btn-info.active .badge,.btn-pure.btn-info.active.focus,.btn-pure.btn-info.active:focus,.btn-pure.btn-info.active:hover,.btn-pure.btn-info:active,.btn-pure.btn-info:active .badge,.btn-pure.btn-info:active.focus,.btn-pure.btn-info:active:focus,.btn-pure.btn-info:active:hover,.btn-pure.btn-info:focus,.btn-pure.btn-info:focus .badge,.btn-pure.btn-info:focus.focus,.btn-pure.btn-info:focus:focus,.btn-pure.btn-info:focus:hover,.btn-pure.btn-info:hover,.btn-pure.btn-info:hover .badge,.btn-pure.btn-info:hover.focus,.btn-pure.btn-info:hover:focus,.btn-pure.btn-info:hover:hover,.open>.dropdown-toggle.btn-pure.btn-info,.open>.dropdown-toggle.btn-pure.btn-info .badge,.open>.dropdown-toggle.btn-pure.btn-info.focus,.open>.dropdown-toggle.btn-pure.btn-info:focus,.open>.dropdown-toggle.btn-pure.btn-info:hover{color:#37a9b7}.btn-pure.btn-warning{color:#f2a654}.btn-pure.btn-warning.active,.btn-pure.btn-warning.active .badge,.btn-pure.btn-warning.active.focus,.btn-pure.btn-warning.active:focus,.btn-pure.btn-warning.active:hover,.btn-pure.btn-warning:active,.btn-pure.btn-warning:active .badge,.btn-pure.btn-warning:active.focus,.btn-pure.btn-warning:active:focus,.btn-pure.btn-warning:active:hover,.btn-pure.btn-warning:focus,.btn-pure.btn-warning:focus .badge,.btn-pure.btn-warning:focus.focus,.btn-pure.btn-warning:focus:focus,.btn-pure.btn-warning:focus:hover,.btn-pure.btn-warning:hover,.btn-pure.btn-warning:hover .badge,.btn-pure.btn-warning:hover.focus,.btn-pure.btn-warning:hover:focus,.btn-pure.btn-warning:hover:hover,.open>.dropdown-toggle.btn-pure.btn-warning,.open>.dropdown-toggle.btn-pure.btn-warning .badge,.open>.dropdown-toggle.btn-pure.btn-warning.focus,.open>.dropdown-toggle.btn-pure.btn-warning:focus,.open>.dropdown-toggle.btn-pure.btn-warning:hover{color:#e98f2e}.btn-pure.btn-danger{color:#f96868}.btn-pure.btn-danger.active,.btn-pure.btn-danger.active .badge,.btn-pure.btn-danger.active.focus,.btn-pure.btn-danger.active:focus,.btn-pure.btn-danger.active:hover,.btn-pure.btn-danger:active,.btn-pure.btn-danger:active .badge,.btn-pure.btn-danger:active.focus,.btn-pure.btn-danger:active:focus,.btn-pure.btn-danger:active:hover,.btn-pure.btn-danger:focus,.btn-pure.btn-danger:focus .badge,.btn-pure.btn-danger:focus.focus,.btn-pure.btn-danger:focus:focus,.btn-pure.btn-danger:focus:hover,.btn-pure.btn-danger:hover,.btn-pure.btn-danger:hover .badge,.btn-pure.btn-danger:hover.focus,.btn-pure.btn-danger:hover:focus,.btn-pure.btn-danger:hover:hover,.open>.dropdown-toggle.btn-pure.btn-danger,.open>.dropdown-toggle.btn-pure.btn-danger .badge,.open>.dropdown-toggle.btn-pure.btn-danger.focus,.open>.dropdown-toggle.btn-pure.btn-danger:focus,.open>.dropdown-toggle.btn-pure.btn-danger:hover{color:#d6494b}.btn-pure.btn-dark{color:#526069}.btn-pure.btn-dark.active,.btn-pure.btn-dark.active .badge,.btn-pure.btn-dark.active.focus,.btn-pure.btn-dark.active:focus,.btn-pure.btn-dark.active:hover,.btn-pure.btn-dark:active,.btn-pure.btn-dark:active .badge,.btn-pure.btn-dark:active.focus,.btn-pure.btn-dark:active:focus,.btn-pure.btn-dark:active:hover,.btn-pure.btn-dark:focus,.btn-pure.btn-dark:focus .badge,.btn-pure.btn-dark:focus.focus,.btn-pure.btn-dark:focus:focus,.btn-pure.btn-dark:focus:hover,.btn-pure.btn-dark:hover,.btn-pure.btn-dark:hover .badge,.btn-pure.btn-dark:hover.focus,.btn-pure.btn-dark:hover:focus,.btn-pure.btn-dark:hover:hover,.open>.dropdown-toggle.btn-pure.btn-dark,.open>.dropdown-toggle.btn-pure.btn-dark .badge,.open>.dropdown-toggle.btn-pure.btn-dark.focus,.open>.dropdown-toggle.btn-pure.btn-dark:focus,.open>.dropdown-toggle.btn-pure.btn-dark:hover{color:#37474f}.btn-pure.btn-inverse,.btn-pure.btn-inverse.active,.btn-pure.btn-inverse.active .badge,.btn-pure.btn-inverse.active.focus,.btn-pure.btn-inverse.active:focus,.btn-pure.btn-inverse.active:hover,.btn-pure.btn-inverse:active,.btn-pure.btn-inverse:active .badge,.btn-pure.btn-inverse:active.focus,.btn-pure.btn-inverse:active:focus,.btn-pure.btn-inverse:active:hover,.btn-pure.btn-inverse:focus,.btn-pure.btn-inverse:focus .badge,.btn-pure.btn-inverse:focus.focus,.btn-pure.btn-inverse:focus:focus,.btn-pure.btn-inverse:focus:hover,.btn-pure.btn-inverse:hover,.btn-pure.btn-inverse:hover .badge,.btn-pure.btn-inverse:hover.focus,.btn-pure.btn-inverse:hover:focus,.btn-pure.btn-inverse:hover:hover,.open>.dropdown-toggle.btn-pure.btn-inverse,.open>.dropdown-toggle.btn-pure.btn-inverse .badge,.open>.dropdown-toggle.btn-pure.btn-inverse.focus,.open>.dropdown-toggle.btn-pure.btn-inverse:focus,.open>.dropdown-toggle.btn-pure.btn-inverse:hover{color:#fff}.caret{border-top:4px solid;transform:scale(1.001);transition:.25s}.btn-group .btn+.dropdown-toggle .caret{margin-left:0}.dropdown-toggle.btn .caret{margin-left:.3em}.btn-group-xs>.dropdown-toggle.btn .caret,.dropdown-toggle.btn.btn-xs .caret{margin-left:0}.btn-group>.btn+.dropdown-toggle{padding-left:.8em;padding-right:.8em}.dropdown-menu{box-shadow:0 3px 12px rgba(0,0,0,.05);margin-top:5px;transition:.25s}.dropdown-menu .divider{margin:6px 0}.dropdown-menu>li{margin:2px 0;padding:0 5px}.dropdown-menu>li>a{border-radius:3px;padding:8px 15px;transition:background-color .25s}.dropdown-menu li .icon:first-child,.dropdown-menu li>a .icon:first-child{margin-right:.5em;text-align:center;width:1em}.dropdown-menu.bullet{margin-top:12px}.dropdown-menu.bullet:after,.dropdown-menu.bullet:before{border:7px solid transparent;border-top:0 solid transparent;content:\"\";display:inline-block;height:0;left:10px;position:absolute;width:0}.dropdown-menu.bullet:before{border-bottom-color:#e4eaec;top:-7px}.dropdown-menu.bullet:after{border-bottom-color:#fff;top:-6px}.dropdown-menu-right.bullet:after,.dropdown-menu-right.bullet:before{left:auto;right:10px}.dropdown-menu.animate{overflow:hidden}.dropdown-menu.animate>li{animation-duration:.5s;animation-fill-mode:both;animation-name:slide-left}.dropdown-menu.animate>li:first-child{animation-delay:.02s}.dropdown-menu.animate>li:nth-child(2){animation-delay:.04s}.dropdown-menu.animate>li:nth-child(3){animation-delay:.06s}.dropdown-menu.animate>li:nth-child(4){animation-delay:.08s}.dropdown-menu.animate>li:nth-child(5){animation-delay:.1s}.dropdown-menu.animate>li:nth-child(6){animation-delay:.12s}.dropdown-menu.animate>li:nth-child(7){animation-delay:.14s}.dropdown-menu.animate>li:nth-child(8){animation-delay:.16s}.dropdown-menu.animate>li:nth-child(9){animation-delay:.18s}.dropdown-menu.animate>li:nth-child(10){animation-delay:.2s}.dropdown-menu.animate>li.divider{animation-name:none}.dropdown-menu.animate.animate-reverse>li:last-child{animation-delay:.02s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(2){animation-delay:.04s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(3){animation-delay:.06s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(4){animation-delay:.08s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(5){animation-delay:.1s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(6){animation-delay:.12s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(7){animation-delay:.14s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(8){animation-delay:.16s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(9){animation-delay:.18s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(10){animation-delay:.2s}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{box-shadow:0 -3px 12px rgba(0,0,0,.05);margin-bottom:6px}.dropup .dropdown-menu.bullet,.navbar-fixed-bottom .dropdown .dropdown-menu.bullet{margin-bottom:12px}.dropup .dropdown-menu.bullet:after,.dropup .dropdown-menu.bullet:before,.navbar-fixed-bottom .dropdown .dropdown-menu.bullet:after,.navbar-fixed-bottom .dropdown .dropdown-menu.bullet:before{border-bottom-width:0;border-top-width:7px;top:auto}.dropup .dropdown-menu.bullet:before,.navbar-fixed-bottom .dropdown .dropdown-menu.bullet:before{border-top-color:#e4eaec;bottom:-7px}.dropup .dropdown-menu.bullet:after,.navbar-fixed-bottom .dropdown .dropdown-menu.bullet:after{border-top-color:#fff;bottom:-6px}.dropdown-menu>.dropdown-header{cursor:default;font-size:14px;font-weight:500;padding:8px 20px 6px}.dropdown-menu>.dropdown-submenu,.dropdown-menu>.dropdown-submenu>a{position:relative}.dropdown-menu>.dropdown-submenu>a:after{border-bottom:4px solid transparent;border-left:4px dashed;border-top:4px solid transparent;content:\"\";display:inline-block;height:0;margin-top:6px;position:absolute;right:10px;vertical-align:middle;width:0}.dropdown-menu>.dropdown-submenu .dropdown-menu{left:100%;margin:0}.dropdown-menu>.dropdown-submenu.dropdown-menu-left .dropdown-menu{left:-100%}.dropdown-menu>.dropdown-submenu:hover .dropdown-menu{display:block}.dropdown .dropdown-submenu .dropdown-menu{top:0}.dropup .dropdown-submenu .dropdown-menu{bottom:0}.dropdown-menu-media{padding-bottom:0;padding-top:0;width:360px}.dropdown-menu-media>li{margin:0;padding:0}.dropdown-menu-media .dropdown-menu-header{background-color:#fff;border-bottom:1px solid #e4eaec;padding:20px;position:relative}.dropdown-menu-media .dropdown-menu-header>h3,.dropdown-menu-media .dropdown-menu-header>h4,.dropdown-menu-media .dropdown-menu-header>h5{margin:0}.dropdown-menu-media .dropdown-menu-header .badge,.dropdown-menu-media .dropdown-menu-header .label{position:absolute;right:20px;top:50%;transform:translateY(-50%)}.dropdown-menu-media .list-group{border-radius:0;font-size:12px;margin:0;max-height:270px}.dropdown-menu-media .list-group-item{border:none;border-radius:0!important;padding:0 20px}.dropdown-menu-media .list-group-item .media{border-top:1px solid #e4eaec;padding:15px 0}.dropdown-menu-media .list-group-item:first-child .media{border-top:none}.dropdown-menu-media>.dropdown-menu-footer{background-color:#f3f7f9;border-top:1px solid #e4eaec}.dropdown-menu-media>.dropdown-menu-footer>a{color:#a3afb7!important;padding:15px 20px!important}.dropdown-menu-media>.dropdown-menu-footer>a:hover{background-color:transparent!important;color:#89bceb!important}.dropdown-menu-media>.dropdown-menu-footer>.dropdown-menu-footer-btn{position:absolute;right:0}.dropdown-menu-media>.dropdown-menu-footer>.dropdown-menu-footer-btn:hover{background-color:transparent!important;color:#89bceb!important}.dropdown-menu-primary>.active>a,.dropdown-menu-primary>.active>a:focus,.dropdown-menu-primary>.active>a:hover{background-color:#62a8ea;color:#fff}.dropdown-menu-success>.active>a,.dropdown-menu-success>.active>a:focus,.dropdown-menu-success>.active>a:hover{background-color:#46be8a;color:#fff}.dropdown-menu-info>.active>a,.dropdown-menu-info>.active>a:focus,.dropdown-menu-info>.active>a:hover{background-color:#57c7d4;color:#fff}.dropdown-menu-warning>.active>a,.dropdown-menu-warning>.active>a:focus,.dropdown-menu-warning>.active>a:hover{background-color:#f2a654;color:#fff}.dropdown-menu-danger>.active>a,.dropdown-menu-danger>.active>a:focus,.dropdown-menu-danger>.active>a:hover{background-color:#f96868;color:#fff}.dropdown-menu-dark>.active>a,.dropdown-menu-dark>.active>a:focus,.dropdown-menu-dark>.active>a:hover{background-color:#526069;color:#fff}.btn-group.open .dropdown-toggle{box-shadow:inset 0 1px 3px rgba(0,0,0,.05)}.btn-group:focus .dropdown-toggle{transition:.25s}.input-group-addon{transition:border .25s linear,color .25s linear,background-color .25s linear}.input-group-btn .btn{padding:6px 10px}.input-group-btn .btn>.icon{vertical-align:bottom}.input-group-btn .dropdown-toggle.btn .caret{margin-left:2px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:1}.nav>li>a{overflow:hidden}.nav>li>a:focus{outline:0}.nav>li>a .close{display:inline-block;margin-left:10px}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:transparent}.nav-quick{background-color:#fff;border-radius:3px;box-shadow:0 1px 1px rgba(0,0,0,.05);margin-bottom:22px;margin-left:0;margin-right:0;padding:0}.nav-quick li{display:block;list-style:none;padding:0;position:relative;text-align:center}.nav-quick a{color:#76838f;display:block;padding:16px 0}.nav-quick a .icon{display:block;font-size:32px;margin-bottom:.2em}.nav-quick a:hover{background-color:#f3f7f9;text-decoration:none}.nav-quick .badge,.nav-quick .label{position:absolute;right:0;top:0}.nav-quick-sm a{padding:12px 0}.nav-quick-sm a .icon{font-size:24px}.nav-quick-lg a{padding:22px 0}.nav-quick-lg a .icon{font-size:40px}.nav-quick-bordered{border-left:1px solid #e4eaec;border-top:1px solid #e4eaec}.nav-quick-bordered li{border-bottom:1px solid #e4eaec;border-right:1px solid #e4eaec}.nav-pills>li>a{transition:border .2s linear,color .2s linear,background-color .2s linear}.nav-pills-rounded>li>a{border-radius:1000px;margin-left:5px;margin-right:5px;padding-left:20px;padding-right:20px}.nav-tabs>li>a{color:#76838f;padding:10px 20px;transition:.25s}.nav-tabs>li>a>.icon{line-height:1;margin-right:.5em}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{background-color:#62a8ea;border-color:transparent transparent #62a8ea;color:#fff}.nav-tabs.nav-justified>li>a{border-radius:4px 4px 0 0}.nav-tabs.nav-justified>li.active>a,.nav-tabs.nav-justified>li.active>a:focus,.nav-tabs.nav-justified>li.active>a:hover{border-color:transparent transparent #62a8ea}.nav-tabs.nav-tabs-bottom{border-bottom:none;border-top:1px solid #e4eaec}.nav-tabs.nav-tabs-bottom>li{margin-bottom:0;margin-top:-1px}.nav-tabs.nav-tabs-bottom>li>a{border-radius:0 0 4px 4px}.nav-tabs.nav-tabs-bottom>li>a:focus,.nav-tabs.nav-tabs-bottom>li>a:hover{border-bottom-color:transparent;border-top-color:#e4eaec}.nav-tabs.nav-tabs-bottom.nav-justified{border-top:none}.nav-tabs.nav-tabs-bottom.nav-justified>li>a{border-bottom-color:transparent;border-top-color:#e4eaec}.nav-tabs.nav-tabs-bottom.nav-justified>li.active>a,.nav-tabs.nav-tabs-bottom.nav-justified>li.active>a:focus,.nav-tabs.nav-tabs-bottom.nav-justified>li.active>a:hover{border-top:1px solid #62a8ea}.nav-tabs-reverse>li{float:right}.nav-tabs-reverse>li>a{margin-left:2px;margin-right:0}.nav-tabs-solid{border-bottom-color:#f3f7f9}.nav-tabs-solid>li>a:hover{border-color:transparent}.nav-tabs-solid>li.active>a,.nav-tabs-solid>li.active>a:focus,.nav-tabs-solid>li.active>a:hover{background-color:#f3f7f9;border-color:transparent;color:#76838f}.nav-tabs-solid~.tab-content{background-color:#f3f7f9;padding:20px}.nav-tabs-solid.nav-justified>li.active>a,.nav-tabs-solid.nav-justified>li.active>a:focus,.nav-tabs-solid.nav-justified>li.active>a:hover,.nav-tabs-solid.nav-justified>li>a,.nav-tabs-solid.nav-tabs-bottom>li.active>a,.nav-tabs-solid.nav-tabs-bottom>li.active>a:focus,.nav-tabs-solid.nav-tabs-bottom>li.active>a:hover{border:none}.nav-tabs-line>li>a{border-bottom:2px solid transparent;padding:10px 20px}.nav-tabs-line>li>a:focus,.nav-tabs-line>li>a:hover{background-color:transparent}.nav-tabs-line>li>a:hover{border-bottom-color:#ccd5db}.nav-tabs-line>li.active>a,.nav-tabs-line>li.active>a:focus,.nav-tabs-line>li.active>a:hover{background-color:transparent;border-bottom:2px solid #62a8ea;color:#62a8ea}.nav-tabs-line .open>a,.nav-tabs-line .open>a:focus,.nav-tabs-line .open>a:hover{border-color:transparent transparent #ccd5db}.nav-tabs-line.nav-tabs-bottom>li>a{border-bottom:none;border-top:2px solid transparent}.nav-tabs-line.nav-tabs-bottom>li>a:hover{border-bottom-color:transparent;border-top-color:#ccd5db}.nav-tabs-line.nav-tabs-bottom>li.active>a,.nav-tabs-line.nav-tabs-bottom>li.active>a:focus,.nav-tabs-line.nav-tabs-bottom>li.active>a:hover{border-bottom:none;border-top:2px solid #62a8ea}.nav-tabs-line.nav-justified>li>a{border-bottom:2px solid #e4eaec}.nav-tabs-line.nav-justified>li>a:hover{border-bottom-color:#ccd5db}.nav-tabs-line.nav-justified>li.active>a,.nav-tabs-line.nav-justified>li.active>a:focus,.nav-tabs-line.nav-justified>li.active>a:hover{border-color:transparent;border-bottom:2px solid #62a8ea}.nav-tabs-line.nav-justified.nav-tabs-bottom{border-top:none}.nav-tabs-line.nav-justified.nav-tabs-bottom>li>a{border-bottom:none;border-top:2px solid #e4eaec}.nav-tabs-line.nav-justified.nav-tabs-bottom>li>a:hover{border-top-color:#ccd5db}.nav-tabs-line.nav-justified.nav-tabs-bottom>li.active>a,.nav-tabs-line.nav-justified.nav-tabs-bottom>li.active>a:focus,.nav-tabs-line.nav-justified.nav-tabs-bottom>li.active>a:hover{border-bottom:none;border-top-color:#62a8ea}.nav-tabs-vertical:after,.nav-tabs-vertical:before{content:\" \";display:table}.nav-tabs-vertical:after{clear:both}.nav-tabs-vertical .nav-tabs{border-bottom:none;border-right:1px solid #e4eaec;float:left}.nav-tabs-vertical .nav-tabs>li{float:none;margin-bottom:0;margin-right:-1px}.nav-tabs-vertical .nav-tabs>li>a{border-radius:4px 0 0 4px;margin-bottom:2px;margin-right:0;padding:10px 20px}.nav-tabs-vertical .nav-tabs>li>a:hover{border-bottom-color:transparent;border-right-color:#e4eaec}.nav-tabs-vertical .nav-tabs>li.active>a,.nav-tabs-vertical .nav-tabs>li.active>a:focus,.nav-tabs-vertical .nav-tabs>li.active>a:hover{border-right-color:#62a8ea}.nav-tabs-vertical .nav-tabs-reverse{border-left:1px solid #e4eaec;border-right:none;float:right}.nav-tabs-vertical .nav-tabs-reverse>li{margin-left:-1px;margin-right:0}.nav-tabs-vertical .nav-tabs-reverse>li>a{border-radius:0 4px 4px 0;margin-left:0}.nav-tabs-vertical .nav-tabs-reverse>li>a:hover{border-left-color:#e4eaec;border-right-color:transparent}.nav-tabs-vertical .nav-tabs-reverse>li.active>a,.nav-tabs-vertical .nav-tabs-reverse>li.active>a:focus,.nav-tabs-vertical .nav-tabs-reverse>li.active>a:hover{border-left-color:#62a8ea}.nav-tabs-vertical .nav-tabs-solid{border-right-color:#f3f7f9}.nav-tabs-vertical .nav-tabs-solid>li.active>a,.nav-tabs-vertical .nav-tabs-solid>li.active>a:focus,.nav-tabs-vertical .nav-tabs-solid>li.active>a:hover,.nav-tabs-vertical .nav-tabs-solid>li>a:hover{border-color:transparent}.nav-tabs-vertical .nav-tabs-solid+.tab-content{padding:20px}.nav-tabs-vertical .nav-tabs-solid.nav-tabs-reverse{border-left-color:#f3f7f9}.nav-tabs-vertical .nav-tabs-line>li>a{border-bottom:none;border-right:2px solid transparent}.nav-tabs-vertical .nav-tabs-line>li>a:hover{border-right-color:#ccd5db}.nav-tabs-vertical .nav-tabs-line>li.active>a,.nav-tabs-vertical .nav-tabs-line>li.active>a:focus,.nav-tabs-vertical .nav-tabs-line>li.active>a:hover{border-bottom:none;border-right:2px solid #62a8ea}.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse>li>a{border-left:2px solid transparent;border-right-width:1px}.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse>li>a:hover{border-color:transparent transparent transparent #ccd5db}.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse>li.active>a,.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse>li.active>a:focus,.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse>li.active>a:hover{border-left:2px solid #62a8ea;border-right:1px solid transparent}.nav-tabs-vertical .tab-content{overflow:hidden}.nav-tabs-inverse .nav-tabs-solid{border-bottom-color:#fff}.nav-tabs-inverse .nav-tabs-solid>li.active>a,.nav-tabs-inverse .nav-tabs-solid>li.active>a:focus,.nav-tabs-inverse .nav-tabs-solid>li.active>a:hover{background-color:#fff;color:#76838f}.nav-tabs-inverse.nav-tabs-vertical .nav-tabs-solid{border-right-color:#fff}.nav-tabs-inverse.nav-tabs-vertical .nav-tabs-solid.nav-tabs-reverse{border-left-color:#fff}.nav-tabs-inverse .tab-content{background:#fff}.nav-tabs-animate .tab-content{overflow:hidden}.nav-tabs-lg>li>a{font-size:18px;line-height:1.3333333;padding:12px 20px}.nav-tabs-sm>li>a{font-size:12px;line-height:1.5;padding:5px 10px}.navbar-toggle{background:0 0!important;height:66px;line-height:22px;margin-bottom:0;margin-top:0;padding:22px 15px;transition:color .25s linear}.navbar-toggle .icon{margin-top:-1px}.navbar-toggle:hover{background:0 0!important}.navbar-toggle-left{float:left;margin-left:15px;margin-right:0}.navbar{border:none;box-shadow:0 2px 4px rgba(0,0,0,.08)}.navbar-fixed-bottom,.navbar-fixed-top{width:100%}@media (min-width:768px){.hidden-float{display:block}}@media (max-width:767px){.hidden-float{display:none!important}}.navbar-brand{font-weight:500;padding:22px 20px}.navbar-brand>.navbar-brand-logo{display:inline-block}.navbar-brand-logo{height:32px;margin-top:-5px}.navbar-brand-text{margin-left:6px}@media (max-width:767px){.navbar-brand-center{left:50%;position:absolute;transform:translate(-50%)}}@media (min-width:768px){.navbar-mega .container,.navbar-mega .container-fluid{position:relative}}.navbar-mega .dropdown-menu{left:auto}.navbar-mega .dropdown-mega{position:static}.navbar-mega .mega-content{padding:20px 30px}.navbar-mega .mega-menu{max-width:100%;min-width:150px}.navbar-mega .mega-menu>ul{padding-left:0}.navbar-mega .mega-menu .list-icons{margin-bottom:6px}.navbar-mega .dropdown.dropdown-fw .dropdown-menu{left:5px;right:5px}@media (max-width:767px){.navbar-mega .dropdown.dropdown-fw .dropdown-menu{left:0;right:0}}.navbar-nav>li>a.navbar-avatar,.navbar-toolbar>li>a.navbar-avatar{padding-bottom:18px;padding-top:18px}@media (max-width:767px){.navbar-nav>li>a.navbar-avatar{padding-bottom:6px;padding-top:6px}}.navbar-avatar .avatar{width:30px}.navbar-form .icon{color:rgba(55,71,79,.4);font-size:16px}.navbar-form .form-control{background-color:#f3f7f9;border:none;border-radius:38px}@media (min-width:768px){.navbar-search.collapse{display:block!important;height:auto!important;overflow:visible!important;visibility:visible!important}}@media (max-width:767px){.navbar-search{padding-left:15px;padding-right:15px}.navbar-search .navbar-form{border-bottom:none;margin-bottom:0;margin-top:0}}.container-fluid>.navbar-search,.container>.navbar-search{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.container-fluid>.navbar-search,.container>.navbar-search{margin-left:0;margin-right:0}}.navbar-search-overlap{background-color:#fff;left:0;position:absolute!important;right:0;top:0}.navbar-search-overlap .form-control,.navbar-search-overlap .form-group{display:block!important;margin:0}.navbar-search-overlap .form-control{background-color:transparent!important;border-radius:0;height:66px!important}.navbar-search-overlap .form-control:focus{border-color:transparent}.navbar-collapse-toolbar.in{overflow-y:visible}.navbar-toolbar{float:left}.navbar-toolbar:after,.navbar-toolbar:before{content:\" \";display:table}.navbar-toolbar:after{clear:both}.navbar-toolbar>li{float:left}.navbar-toolbar>li:after,.navbar-toolbar>li:before{content:\" \";display:table}.navbar-toolbar>li:after{clear:both}.navbar-toolbar>li>a{line-height:22px;padding-bottom:22px;padding-top:22px}.navbar-toolbar .dropdown-menu{animation-duration:.3s;transform-origin:100% 0}@media (max-width:767px){.navbar-toolbar .dropdown-menu:not(.dropdown-menu-media){-webkit-overflow-scrolling:touch;max-height:400px;overflow-x:hidden;overflow-y:scroll;transform:translateZ(0)}.navbar-toolbar .open{position:static}.navbar-toolbar .open .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;float:none;left:0;margin-top:0;right:0;width:auto}}@media (max-width:767px) and (max-device-width:480px) and (orientation:landscape){.navbar-toolbar .dropdown-menu:not(.dropdown-menu-media){max-height:200px}}@media (max-width:767px){.navbar-toolbar-left{float:left!important}.navbar-toolbar-right{float:right!important}}.icon-fullscreen{font-family:Web Icons}.icon-fullscreen:before{content:\"\\f11d\"}.icon-fullscreen.active:before{content:\"\\f11e\"}.icon-menubar{font-family:Web Icons}.icon-menubar.active:before,.icon-menubar:before{content:\"\\f119\"}.navbar-default .navbar-toolbar>li>a{color:#76838f}.navbar-default .navbar-toolbar>li>a:focus,.navbar-default .navbar-toolbar>li>a:hover{background-color:rgba(243,247,249,.3);color:#526069}.navbar-default .navbar-toolbar>.active>a,.navbar-default .navbar-toolbar>.active>a:focus,.navbar-default .navbar-toolbar>.active>a:hover{background-color:rgba(243,247,249,.6);color:#526069}.navbar-default .navbar-toolbar>.disabled>a,.navbar-default .navbar-toolbar>.disabled>a:focus,.navbar-default .navbar-toolbar>.disabled>a:hover{background-color:transparent;color:#ccd5db}.navbar-default .navbar-toggle{color:#76838f}.navbar-default .navbar-toolbar>.open>a,.navbar-default .navbar-toolbar>.open>a:focus,.navbar-default .navbar-toolbar>.open>a:hover{background-color:rgba(243,247,249,.6);color:#526069}.navbar-inverse .navbar-toolbar>li>a{color:#fff}.navbar-inverse .navbar-toolbar>.active>a,.navbar-inverse .navbar-toolbar>.active>a:focus,.navbar-inverse .navbar-toolbar>.active>a:hover,.navbar-inverse .navbar-toolbar>li>a:focus,.navbar-inverse .navbar-toolbar>li>a:hover{background-color:rgba(0,0,0,.1);color:#fff}.navbar-inverse .navbar-toolbar>.disabled>a,.navbar-inverse .navbar-toolbar>.disabled>a:focus,.navbar-inverse .navbar-toolbar>.disabled>a:hover{background-color:transparent;color:#fff}.navbar-inverse .navbar-toggle{color:#fff}.navbar-inverse .navbar-toolbar>.open>a,.navbar-inverse .navbar-toolbar>.open>a:focus,.navbar-inverse .navbar-toolbar>.open>a:hover{background-color:rgba(0,0,0,.1);color:#fff}.breadcrumb{margin-bottom:10px}.breadcrumb li+li:before{padding:0 5px}.breadcrumb li .icon{text-decoration:none}.breadcrumb li .icon:before{margin-right:10px}.breadcrumb-arrow>li+li:before{content:\"» \"}.pagination li>a,.pagination li>span{padding:9px 15px;transition:background .2s ease-out,border-color 0s ease-out,color .2s ease-out}.pagination li>a:focus,.pagination li>a:hover,.pagination li>span:focus,.pagination li>span:hover{transition:background .2s ease-out,border-color .2s ease-out,color .2s ease-out}.pagination li .icon{margin-top:-1px}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{background-color:transparent;border-color:#e4eaec;color:#ccd5db;cursor:not-allowed}.pagination-gap>li>a{border-radius:5px;margin:0 5px}.pagination-gap>li>a:hover{background-color:transparent;border-color:#62a8ea}.pagination-gap>li:first-child>a,.pagination-gap>li:last-child>a{border-radius:5px}.pagination-no-border>li>a{border:none}.pagination-lg>li>a,.pagination-lg>li>span{font-size:16px;line-height:1.3333333;padding:10px 17px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination-sm>li>a,.pagination-sm>li>span{font-size:14px;line-height:1.5;padding:6px 11px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pager li>a,.pager li>span{color:#76838f;padding:10px 20px;transition:all .2s ease}.pager li>a:focus,.pager li>a:hover{color:#62a8ea}.pager li .icon{margin-top:-1px}.pager li>a:focus,.pager li>a:hover{border-color:#62a8ea}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{border-color:#e4eaec}.pager-round li>a,.pager-round li>span{border-radius:1000px}.label{border-radius:.3em;font-weight:300;padding:.25em .6em}.label.label-outline{background-color:transparent;border-color:#f3f7f9;color:#f3f7f9}.label-outline{border:1px solid transparent}.label-round{border-radius:1em}.label-default{background-color:#e4eaec;color:#76838f}.label-default[href]:focus,.label-default[href]:hover{background-color:#f3f7f9}.label-default.label-outline{background-color:transparent;border-color:#e4eaec;color:#e4eaec}.label-default[href]:focus,.label-default[href]:hover{color:#a3afb7}.label-default.label-outline{color:#76838f}.label-primary{background-color:#62a8ea}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#89bceb}.label-primary.label-outline{background-color:transparent;border-color:#62a8ea;color:#62a8ea}.label-success{background-color:#46be8a}.label-success[href]:focus,.label-success[href]:hover{background-color:#5cd29d}.label-success.label-outline{background-color:transparent;border-color:#46be8a;color:#46be8a}.label-info{background-color:#57c7d4}.label-info[href]:focus,.label-info[href]:hover{background-color:#77d6e1}.label-info.label-outline{background-color:transparent;border-color:#57c7d4;color:#57c7d4}.label-warning{background-color:#f2a654}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#f4b066}.label-warning.label-outline{background-color:transparent;border-color:#f2a654;color:#f2a654}.label-danger{background-color:#f96868}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fa7a7a}.label-danger.label-outline{background-color:transparent;border-color:#f96868;color:#f96868}.label-dark{background-color:#526069}.label-dark[href]:focus,.label-dark[href]:hover{background-color:#76838f}.label-dark.label-outline{background-color:transparent;border-color:#526069;color:#526069}.label-lg{font-size:16px}.label-sm{font-size:10px;padding:.1em .5em}.badge{padding:3px 6px}.btn .badge{top:0}.badge.up{border-radius:15px;margin:0 -.8em;position:relative;top:-10px}.badge.badge-absolute{position:absolute;right:-10px;top:-8px;z-index:5}.badge-radius{border-radius:3px}.badge-primary{background-color:#62a8ea;color:#fff}.badge-primary[href]:focus,.badge-primary[href]:hover{background-color:#358fe4;color:#fff}.list-group-item.active>.badge-primary,.nav-pills>.active>a>.badge-primary{background-color:#62a8ea;color:#fff}.badge-success{background-color:#46be8a;color:#fff}.badge-success[href]:focus,.badge-success[href]:hover{background-color:#369b6f;color:#fff}.list-group-item.active>.badge-success,.nav-pills>.active>a>.badge-success{background-color:#46be8a;color:#fff}.badge-info{background-color:#57c7d4;color:#fff}.badge-info[href]:focus,.badge-info[href]:hover{background-color:#33b6c5;color:#fff}.list-group-item.active>.badge-info,.nav-pills>.active>a>.badge-info{background-color:#57c7d4;color:#fff}.badge-warning{background-color:#f2a654;color:#fff}.badge-warning[href]:focus,.badge-warning[href]:hover{background-color:#ee8d25;color:#fff}.list-group-item.active>.badge-warning,.nav-pills>.active>a>.badge-warning{background-color:#f2a654;color:#fff}.badge-danger{background-color:#f96868;color:#fff}.badge-danger[href]:focus,.badge-danger[href]:hover{background-color:#f73737;color:#fff}.list-group-item.active>.badge-danger,.nav-pills>.active>a>.badge-danger{background-color:#f96868;color:#fff}.badge-dark{background-color:#526069;color:#fff}.badge-dark[href]:focus,.badge-dark[href]:hover{background-color:#3c464c;color:#fff}.list-group-item.active>.badge-dark,.nav-pills>.active>a>.badge-dark{background-color:#526069;color:#fff}.badge-lg{font-size:16px;padding:5px 9px 8px}.badge-sm{font-size:10px;padding:2px 5px}.jumbotron{border-radius:3px;padding:0}.jumbotron>.jumbotron-photo img{border-top-left-radius:3px;border-top-right-radius:3px;width:100%}.jumbotron-contents{padding:20px}.jumbotron .carousel,.jumbotron .carousel-inner,.jumbotron .carousel-inner>.item.active img{border-top-left-radius:3px;border-top-right-radius:3px}.jumbotron .carousel-inner>.item>a>img,.jumbotron .carousel-inner>.item>img{width:100%}.jumbotron .h1,.jumbotron h1{font-size:28px}.jumbotron .h2,.jumbotron h2{font-size:24px}@media screen and (min-width:768px){.container .jumbotron,.jumbotron{padding:0}.jumbotron .h1,.jumbotron h1{font-size:28px}}.thumbnail{border:none;padding:0;transition:all .25s ease-in-out}.thumbnail .caption{display:block;padding-left:0;padding-right:0;position:relative}.alert{padding-left:20px;padding-right:20px}.alert ul{padding-left:13px}.alert ul li{padding-left:7px}.panel>.alert{margin:0}.alert-alt{background-color:rgba(243,247,249,.8);border:none;border-left:3px solid transparent;color:#76838f}.alert-alt .alert-link,.alert-alt a{text-decoration:none}.alert-dismissible{padding-right:40px}.alert-dismissible .close{opacity:.6;text-decoration:none;top:0}.alert-dismissible .close:focus,.alert-dismissible .close:hover{opacity:1}.alert-dismissible.alert-alt .close{color:#a3afb7;opacity:.6}.alert-dismissible.alert-alt .close:focus,.alert-dismissible.alert-alt .close:hover{color:#a3afb7;opacity:1}.alert-icon{padding-left:45px;position:relative}.alert-icon>.icon{font-size:16px;left:20px;position:absolute;text-align:center;top:18px;width:1em}.alert-avatar{padding-bottom:20px;padding-left:75px;padding-top:20px;position:relative}.alert-avatar>.avatar{left:20px;position:absolute;top:12px}.page-alert .alert-wrap{margin:0;max-height:0;overflow:hidden;padding:0;transition:max-height .7s linear 0s}.page-alert .alert-wrap.in{max-height:500px;transition:max-height 1s linear 0s}.page-alert .alert-wrap .alert{border-radius:0;margin:0;text-align:left}.alert-primary{background-color:rgba(232,241,248,.8);border-color:#e8f1f8;color:#62a8ea}.alert-primary hr{border-top-color:#d4e5f2}.alert-primary .alert-link{color:#358fe4}.alert-primary .close,.alert-primary .close:focus,.alert-primary .close:hover{color:#62a8ea}.alert-primary .alert-link{color:#4e97d9}.alert-alt.alert-primary{border-color:#62a8ea}.alert-alt.alert-primary .alert-link,.alert-alt.alert-primary a{color:#62a8ea}.alert-success .alert-link{color:#36ab7a}.alert-alt.alert-success{border-color:#46be8a}.alert-alt.alert-success .alert-link,.alert-alt.alert-success a{color:#46be8a}.alert-info .alert-link{color:#47b8c6}.alert-alt.alert-info{border-color:#57c7d4}.alert-alt.alert-info .alert-link,.alert-alt.alert-info a{color:#57c7d4}.alert-warning .alert-link{color:#ec9940}.alert-alt.alert-warning{border-color:#f2a654}.alert-alt.alert-warning .alert-link,.alert-alt.alert-warning a{color:#f2a654}.alert-danger .alert-link{color:#e9595b}.alert-alt.alert-danger{border-color:#f96868}.alert-alt.alert-danger .alert-link,.alert-alt.alert-danger a{color:#f96868}.alert-social{padding-left:65px;position:relative}.alert-social>.icon{bottom:0;font-size:30px;left:20px;position:absolute;text-align:center;top:12px;width:1em}.alert-facebook{background-color:#3b5998;border-color:#3b5998;color:#fff}.alert-facebook hr{border-top-color:#344e86}.alert-facebook .alert-link{color:#e6e6e6}.alert-facebook .close,.alert-facebook .close:focus,.alert-facebook .close:hover{color:#fff}.alert-facebook .alert-link{color:#fff;font-weight:500}.alert-twitter{background-color:#55acee;border-color:#55acee;color:#fff}.alert-twitter hr{border-top-color:#3ea1ec}.alert-twitter .alert-link{color:#e6e6e6}.alert-twitter .close,.alert-twitter .close:focus,.alert-twitter .close:hover{color:#fff}.alert-twitter .alert-link{color:#fff;font-weight:500}.alert-google-plus{background-color:#dd4b39;border-color:#dd4b39;color:#fff}.alert-google-plus hr{border-top-color:#d73925}.alert-google-plus .alert-link{color:#e6e6e6}.alert-google-plus .close,.alert-google-plus .close:focus,.alert-google-plus .close:hover{color:#fff}.alert-google-plus .alert-link{color:#fff;font-weight:500}.alert-linkedin{background-color:#0976b4;border-color:#0976b4;color:#fff}.alert-linkedin hr{border-top-color:#08669c}.alert-linkedin .alert-link{color:#e6e6e6}.alert-linkedin .close,.alert-linkedin .close:focus,.alert-linkedin .close:hover{color:#fff}.alert-linkedin .alert-link{color:#fff;font-weight:500}.alert-flickr{background-color:#ff0084;border-color:#ff0084;color:#fff}.alert-flickr hr{border-top-color:#e60077}.alert-flickr .alert-link{color:#e6e6e6}.alert-flickr .close,.alert-flickr .close:focus,.alert-flickr .close:hover{color:#fff}.alert-flickr .alert-link{color:#fff;font-weight:500}.alert-tumblr{background-color:#35465c;border-color:#35465c;color:#fff}.alert-tumblr hr{border-top-color:#2c3a4c}.alert-tumblr .alert-link{color:#e6e6e6}.alert-tumblr .close,.alert-tumblr .close:focus,.alert-tumblr .close:hover{color:#fff}.alert-tumblr .alert-link{color:#fff;font-weight:500}.alert-github{background-color:#4183c4;border-color:#4183c4;color:#fff}.alert-github hr{border-top-color:#3876b4}.alert-github .alert-link{color:#e6e6e6}.alert-github .close,.alert-github .close:focus,.alert-github .close:hover{color:#fff}.alert-github .alert-link{color:#fff;font-weight:500}.alert-dribbble{background-color:#c32361;border-color:#c32361;color:#fff}.alert-dribbble hr{border-top-color:#ad1f56}.alert-dribbble .alert-link{color:#e6e6e6}.alert-dribbble .close,.alert-dribbble .close:focus,.alert-dribbble .close:hover{color:#fff}.alert-dribbble .alert-link{color:#fff;font-weight:500}.alert-youtube{background-color:#b31217;border-color:#b31217;color:#fff}.alert-youtube hr{border-top-color:#9c1014}.alert-youtube .alert-link{color:#e6e6e6}.alert-youtube .close,.alert-youtube .close:focus,.alert-youtube .close:hover{color:#fff}.alert-youtube .alert-link{color:#fff;font-weight:500}.alert.dark .alert-link{color:#fff!important;font-weight:500}.alert.dark .alert-left-border{border:none;border-left:3px solid transparent}.alert.dark.alert-dismissible.alert-alt .close,.alert.dark.alert-dismissible.alert-alt .close:focus,.alert.dark.alert-dismissible.alert-alt .close:hover{color:#fff}.alert.dark.alert-primary{background-color:#62a8ea;border-color:#62a8ea;color:#fff}.alert.dark.alert-primary hr{border-top-color:#4c9ce7}.alert.dark.alert-primary .alert-link{color:#e6e6e6}.alert.dark.alert-primary .close,.alert.dark.alert-primary .close:focus,.alert.dark.alert-primary .close:hover{color:#fff}.alert-alt.alert.dark.alert-primary{border-color:#2771b4}.alert-alt.alert.dark.alert-primary .alert-link,.alert-alt.alert.dark.alert-primary a{color:#fff}.alert.dark.alert-success{background-color:#46be8a;border-color:#46be8a;color:#fff}.alert.dark.alert-success hr{border-top-color:#3dae7d}.alert.dark.alert-success .alert-link{color:#e6e6e6}.alert.dark.alert-success .close,.alert.dark.alert-success .close:focus,.alert.dark.alert-success .close:hover{color:#fff}.alert-alt.alert.dark.alert-success{border-color:#247151}.alert-alt.alert.dark.alert-success .alert-link,.alert-alt.alert.dark.alert-success a{color:#fff}.alert.dark.alert-info{background-color:#57c7d4;border-color:#57c7d4;color:#fff}.alert.dark.alert-info hr{border-top-color:#43c0cf}.alert.dark.alert-info .alert-link{color:#e6e6e6}.alert.dark.alert-info .close,.alert.dark.alert-info .close:focus,.alert.dark.alert-info .close:hover{color:#fff}.alert-alt.alert.dark.alert-info{border-color:#2e8893}.alert-alt.alert.dark.alert-info .alert-link,.alert-alt.alert.dark.alert-info a{color:#fff}.alert.dark.alert-warning{background-color:#f2a654;border-color:#f2a654;color:#fff}.alert.dark.alert-warning hr{border-top-color:#f09a3c}.alert.dark.alert-warning .alert-link{color:#e6e6e6}.alert.dark.alert-warning .close,.alert.dark.alert-warning .close:focus,.alert.dark.alert-warning .close:hover{color:#fff}.alert-alt.alert.dark.alert-warning{border-color:#cb7314}.alert-alt.alert.dark.alert-warning .alert-link,.alert-alt.alert.dark.alert-warning a{color:#fff}.alert.dark.alert-danger{background-color:#f96868;border-color:#f96868;color:#fff}.alert.dark.alert-danger hr{border-top-color:#f84f4f}.alert.dark.alert-danger .alert-link{color:#e6e6e6}.alert.dark.alert-danger .close,.alert.dark.alert-danger .close:focus,.alert.dark.alert-danger .close:hover{color:#fff}.alert-alt.alert.dark.alert-danger{border-color:#d91d1f}.alert-alt.alert.dark.alert-danger .alert-link,.alert-alt.alert.dark.alert-danger a{color:#fff}.progress{box-shadow:none;height:15px}.progress-bar{box-shadow:none;line-height:15px}.progress-square{border-radius:0}.progress-circle{border-radius:1000px}.progress-vertical{display:inline-block;height:250px;margin-bottom:0;margin-right:30px;min-height:250px;position:relative;width:15px}.progress-vertical .progress-bar{width:100%}.progress-bar-indicating.active{animation:none;position:relative}.progress-bar-indicating.active:before{animation:progress-active 3s ease 0s infinite;background-color:#fff;border-radius:inherit;bottom:0;content:\"\";left:0;opacity:0;position:absolute;right:0;top:0}.progress-vertical .progress-bar-indicating.active:before{animation-name:progress-vertical-active}.progress-skill{position:relative}.progress-skill .progress-bar>span{color:#526069;position:absolute;right:10px;top:0}.progress-lg{height:22px}.progress-lg.progress-vertical{width:25px}.progress-lg .progress-bar{line-height:22px}.progress-sm{height:10px}.progress-sm.progress-vertical{width:10px}.progress-sm .progress-bar{line-height:10px}.progress-xs{border-radius:1px;height:4px}.progress-xs.progress-vertical{width:4px}.progress-xs .progress-bar{line-height:4px}.contextual-progress{margin:20px 0}.contextual-progress .progress-title{float:left}.contextual-progress .progress-label{float:right;position:relative}.contextual-progress .progress{height:2px;margin:5px 0}@keyframes progress-active{0%{opacity:.4;width:0}to{opacity:0;width:100%}}@keyframes progress-vertical-active{0%{opacity:0;top:0}to{opacity:.4;top:175px}}.media-object{width:120px}.media-left,.media>.pull-left{padding-right:20px}.media-right,.media>.pull-right{padding-left:20px}.media-body{overflow:auto}.media .media{border-bottom:none;padding-bottom:0}.media-meta{color:#526069;font-size:12px;margin-bottom:3px}.media-lg .media-object{width:160px}.media-lg .media{margin-left:-110px}.media-sm .media-object{width:80px}.media-sm .media{margin-left:-70px}.media-xs .media-object{width:60px}.media-xs .media{margin-left:-60px}@media screen and (min-width:768px){.media-body{overflow:hidden}.media .media{margin-left:0}}.list-group .media{border-bottom:0;padding:2px 0}.list-group .media .media-left,.list-group .media .pull-left{padding-right:20px}.list-group .media .media-right,.list-group .media .pull-right{padding-left:20px}.list-group .media .pull-right .status{margin-right:5px;margin-top:15px}.list-group .media .media-heading{font-size:14px}.list-group-full>.list-group-item{padding-left:0;padding-right:0}a.list-group-item{border-radius:3px}a.list-group-item.disabled,a.list-group-item.disabled:focus,a.list-group-item.disabled:hover{background-color:#f3f7f9;color:#ccd5db}a.list-group-item.active,a.list-group-item.active:focus,a.list-group-item.active:hover{background-color:#62a8ea;color:#fff}.list-group-item .icon{margin-right:10px}.list-group.bg-inherit{border-radius:3px}.list-group.bg-inherit .list-group-item{background-color:transparent;border-bottom-color:rgba(0,0,0,.075)}.list-group.bg-inherit .list-group-item:last-child{border-bottom-color:transparent}.list-group.bg-inherit .list-group-item:hover{background-color:rgba(0,0,0,.075);border-color:transparent}.list-group-bordered .list-group-item{border-color:#e4eaec}.list-group-bordered .list-group-item.active,.list-group-bordered .list-group-item.active:focus,.list-group-bordered .list-group-item.active:hover{background-color:#4e97d9;border-color:#4e97d9;color:#fff}.list-group-dividered .list-group-item,.list-group-dividered .list-group-item.active:hover{border-top-color:#e4eaec}.list-group-dividered .list-group-item:last-child{border-bottom-color:#e4eaec}.list-group-dividered .list-group-item:first-child,.list-group-dividered .list-group-item:first-child.active:hover{border-top-color:transparent}.list-group-gap .list-group-item{border-radius:3px;margin-bottom:2px}.list-group-full .list-group-item{padding-left:0;padding-right:0}.list-group-item-dark{background-color:#526069;color:#fff}a.list-group-item-dark,button.list-group-item-dark{color:#fff}a.list-group-item-dark .list-group-item-heading,button.list-group-item-dark .list-group-item-heading{color:inherit}a.list-group-item-dark:focus,a.list-group-item-dark:hover,button.list-group-item-dark:focus,button.list-group-item-dark:hover{background-color:#47535b;color:#fff}a.list-group-item-dark.active,a.list-group-item-dark.active:focus,a.list-group-item-dark.active:hover,button.list-group-item-dark.active,button.list-group-item-dark.active:focus,button.list-group-item-dark.active:hover{background-color:#fff;border-color:#fff;color:#fff}.panel{border-width:0;margin-bottom:30px;position:relative}.panel>.nav-tabs-vertical .nav-tabs{margin-left:-1px}.panel>.nav-tabs-vertical .nav-tabs>li>a{border-left:none;border-radius:0}.panel>.nav-tabs-vertical .nav-tabs.nav-tabs-reverse{margin-right:-1px}.panel>.nav-tabs-vertical .nav-tabs.nav-tabs-reverse>li>a{border-radius:0;border-right:none}.panel:hover .panel-actions .show-on-hover{display:inline-block}.panel .panel-actions .show-on-hover{display:none}.panel.is-fullscreen{border-radius:0;bottom:0;left:0;margin-bottom:0;position:fixed;top:0;width:100%;z-index:9999}.panel.is-fullscreen .panel-loading{border-radius:0}.panel.is-fullscreen .panel-actions [data-toggle=collapse]{display:none}.panel.is-fullscreen .panel-body{max-height:100%;overflow:auto}.panel.is-close{display:none}.panel.is-collapse .panel-body{display:none;height:0}.panel>.alert{padding-left:30px;padding-right:30px}.panel>.alert-dismissible{padding-right:50px}@media screen and (max-width:480px){.panel>.alert{padding-left:20px;padding-right:20px}.panel>.alert-dismissible{padding-right:40px}}.panel>.table-responsive>.table>tbody>tr>td:first-child,.panel>.table-responsive>.table>tbody>tr>th:first-child,.panel>.table-responsive>.table>tfoot>tr>td:first-child,.panel>.table-responsive>.table>tfoot>tr>th:first-child,.panel>.table-responsive>.table>thead>tr>td:first-child,.panel>.table-responsive>.table>thead>tr>th:first-child,.panel>.table-responsive>.table>tr>td:first-child,.panel>.table-responsive>.table>tr>th:first-child,.panel>.table>tbody>tr>td:first-child,.panel>.table>tbody>tr>th:first-child,.panel>.table>tfoot>tr>td:first-child,.panel>.table>tfoot>tr>th:first-child,.panel>.table>thead>tr>td:first-child,.panel>.table>thead>tr>th:first-child,.panel>.table>tr>td:first-child,.panel>.table>tr>th:first-child{padding-left:30px}@media screen and (max-width:480px){.panel>.table-responsive>.table>tbody>tr>td:first-child,.panel>.table-responsive>.table>tbody>tr>th:first-child,.panel>.table-responsive>.table>tfoot>tr>td:first-child,.panel>.table-responsive>.table>tfoot>tr>th:first-child,.panel>.table-responsive>.table>thead>tr>td:first-child,.panel>.table-responsive>.table>thead>tr>th:first-child,.panel>.table-responsive>.table>tr>td:first-child,.panel>.table-responsive>.table>tr>th:first-child,.panel>.table>tbody>tr>td:first-child,.panel>.table>tbody>tr>th:first-child,.panel>.table>tfoot>tr>td:first-child,.panel>.table>tfoot>tr>th:first-child,.panel>.table>thead>tr>td:first-child,.panel>.table>thead>tr>th:first-child,.panel>.table>tr>td:first-child,.panel>.table>tr>th:first-child{padding-left:20px}}.panel>.table-responsive>.table>tbody>tr>td:last-child,.panel>.table-responsive>.table>tbody>tr>th:last-child,.panel>.table-responsive>.table>tfoot>tr>td:last-child,.panel>.table-responsive>.table>tfoot>tr>th:last-child,.panel>.table-responsive>.table>thead>tr>td:last-child,.panel>.table-responsive>.table>thead>tr>th:last-child,.panel>.table-responsive>.table>tr>td:last-child,.panel>.table-responsive>.table>tr>th:last-child,.panel>.table>tbody>tr>td:last-child,.panel>.table>tbody>tr>th:last-child,.panel>.table>tfoot>tr>td:last-child,.panel>.table>tfoot>tr>th:last-child,.panel>.table>thead>tr>td:last-child,.panel>.table>thead>tr>th:last-child,.panel>.table>tr>td:last-child,.panel>.table>tr>th:last-child{padding-right:30px}@media screen and (max-width:480px){.panel>.table-responsive>.table>tbody>tr>td:last-child,.panel>.table-responsive>.table>tbody>tr>th:last-child,.panel>.table-responsive>.table>tfoot>tr>td:last-child,.panel>.table-responsive>.table>tfoot>tr>th:last-child,.panel>.table-responsive>.table>thead>tr>td:last-child,.panel>.table-responsive>.table>thead>tr>th:last-child,.panel>.table-responsive>.table>tr>td:last-child,.panel>.table-responsive>.table>tr>th:last-child,.panel>.table>tbody>tr>td:last-child,.panel>.table>tbody>tr>th:last-child,.panel>.table>tfoot>tr>td:last-child,.panel>.table>tfoot>tr>th:last-child,.panel>.table>thead>tr>td:last-child,.panel>.table>thead>tr>th:last-child,.panel>.table>tr>td:last-child,.panel>.table>tr>th:last-child{padding-right:20px}}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:1px solid #e4eaec}.panel>.list-group>.list-group-item{padding-left:30px;padding-right:30px}@media screen and (max-width:480px){.panel>.list-group>.list-group-item{padding-left:20px;padding-right:20px}}.panel-content>.row,.panel-content>.row>[class*=col-]{padding-left:30px;padding-right:30px}.panel-heading{border-bottom:1px solid transparent;padding:0;position:relative}.panel-heading+.alert{border-radius:0}.panel-heading>.nav-tabs{border-bottom:none}.panel-heading+.nav-tabs{margin-top:-10px}.panel-body{position:relative}.panel-heading+.panel-body{padding-top:0}.panel-body .h1:first-child,.panel-body .h2:first-child,.panel-body .h3:first-child,.panel-body .h4:first-child,.panel-body .h5:first-child,.panel-body .h6:first-child,.panel-body h1:first-child,.panel-body h2:first-child,.panel-body h3:first-child,.panel-body h4:first-child,.panel-body h5:first-child,.panel-body h6:first-child{margin-top:0}.panel-body>:last-child{margin-bottom:0}.panel-body>.list-group-dividered:only-child>.list-group-item:last-child{border-bottom-color:transparent}.panel-footer{border-top:1px solid transparent}.table+.panel-footer{border-color:#e4eaec;padding-top:15px}.panel-title{color:#37474f;padding:20px 30px}.panel-title>.icon{margin-right:10px}.panel-title>.label{margin-left:10px}.panel-desc,.panel-title small{color:#76838f}.panel-desc{display:block;font-size:14px;margin:0;padding:5px 0 0}.panel-actions{margin:auto;position:absolute;right:30px;top:50%;transform:translateY(-50%);z-index:1}@media screen and (max-width:480px){.panel-actions{right:20px}}ul.panel-actions{list-style:none}ul.panel-actions>li{display:inline-block;margin-left:8px}ul.panel-actions>li:first-child{margin-left:0}.panel-actions a{color:inherit}.panel-actions a.dropdown-toggle{text-decoration:none}.panel-actions .dropdown,.panel-actions .dropdown-toggle{display:inline-block}.panel-actions .panel-action{background-color:transparent;color:#a3afb7;cursor:pointer;display:inline-block;padding:8px 10px;text-decoration:none}.panel-actions .panel-action:active,.panel-actions .panel-action:hover{color:#526069}.panel-actions .panel-action:focus{outline:0}.panel-actions .progress{margin:0;width:100px}.panel-actions .pagination{margin:0}.panel-toolbar{background-color:transparent;border-bottom:1px solid #e4eaec;border-top:1px solid #e4eaec;margin:0;padding:5px 15px}.panel-bordered .panel-toolbar{border-top-color:transparent}.panel-toolbar .btn{color:#a3afb7;padding:5px 10px}.panel-toolbar .btn.icon{text-align:center;width:1em}.panel-toolbar .btn.active,.panel-toolbar .btn:active,.panel-toolbar .btn:hover{color:#76838f}.panel-loading{border-radius:4px;display:none;height:100%;left:0;opacity:.6;position:absolute;top:0;width:100%;z-index:6}.panel-loading .loader{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.panel>:not(.panel-loading):not(.collapsing){transition:opacity .3s}.panel.is-loading>:not(.panel-loading){opacity:.3}.panel.is-loading .panel-loading{display:block;opacity:1}.panel-footer-chart{padding:0}.panel-control{border:none;border-radius:0;box-shadow:none;padding:0}.panel-body.scrollable-vertical{padding-left:0!important;padding-right:0!important}.panel-body.scrollable-vertical>.scrollable-container>.scrollable-content{padding-left:30px;padding-right:30px}@media screen and (max-width:480px){.panel-body.scrollable-vertical>.scrollable-container>.scrollable-content{padding-left:20px;padding-right:20px}}.panel-body.scrollable-vertical>.scrollable-bar{height:calc(100% - 30px);margin-bottom:30px;margin-top:0;transform:translateX(-26px)}.panel-bordered>.panel-body.scrollable-vertical>.scrollable-bar{height:calc(100% - 60px);margin-bottom:30px}.panel-body.scrollable-horizontal{padding-bottom:0!important;padding-top:0!important}.panel-body.scrollable-horizontal>.scrollable-container>.scrollable-content{padding-bottom:30px;padding-top:0}.panel-bordered>.panel-body.scrollable-horizontal>.scrollable-container>.scrollable-content{padding-bottom:30px;padding-top:30px}.panel-body.scrollable-horizontal>.scrollable-bar{margin-left:0;margin-right:30px;transform:translateY(-26px);width:calc(100% - 60px)}@media screen and (max-width:480px){.panel-body.scrollable-horizontal>.scrollable-bar{margin-right:20px;width:calc(100% - 40px)}}.panel-bordered>.panel-body.scrollable-horizontal>.scrollable-bar{transform:translateY(-26px)}.panel-bordered>.panel-heading{border-bottom:1px solid #e4eaec}.panel-bordered>.panel-heading>.panel-title{padding-bottom:20px}.panel-bordered>.panel-footer{border-top:1px solid #e4eaec;padding-top:15px}.panel-bordered>.panel-body{padding-top:30px}.panel-bordered>.table>tbody:first-child>tr:first-child td,.panel-bordered>.table>tbody:first-child>tr:first-child th{border-top:0}.panel.is-dragging{cursor:move;opacity:.8}.panel.panel-transparent{background:0 0;border-color:transparent;box-shadow:none}.panel.panel-transparent>.panel-footer,.panel.panel-transparent>.panel-heading{border-color:transparent}.panel-dark{border-color:#526069}.panel-dark>.panel-heading{background-color:#526069;border-color:#526069;color:#fff}.panel-dark>.panel-heading+.panel-collapse>.panel-body{border-top-color:#526069}.panel-dark>.panel-heading .badge{background-color:#fff;color:#526069}.panel-dark>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#526069}.panel-danger,.panel-danger .panel-heading,.panel-dark,.panel-dark .panel-heading,.panel-info,.panel-info .panel-heading,.panel-primary,.panel-primary .panel-heading,.panel-success,.panel-success .panel-heading,.panel-warning,.panel-warning .panel-heading{border:none}.panel-danger .panel-action,.panel-danger .panel-title,.panel-dark .panel-action,.panel-dark .panel-title,.panel-info .panel-action,.panel-info .panel-title,.panel-primary .panel-action,.panel-primary .panel-title,.panel-success .panel-action,.panel-success .panel-title,.panel-warning .panel-action,.panel-warning .panel-title{color:#fff}@media screen and (max-width:480px){.panel-actions{right:20px}.panel-actions .progress{min-width:80px}.panel-actions .show-on-hover{display:none}.panel-body,.panel-footer,.panel-title{padding-left:20px;padding-right:20px}}.well{padding:20px}.well-lg{padding:24px}.well-sm{padding:12px}.well{box-shadow:inset 0 0 1px rgba(0,0,0,.02)}.well-primary{background-color:#62a8ea;color:#fff}.well-success{background-color:#46be8a;color:#fff}.well-info{background-color:#57c7d4;color:#fff}.well-warning{background-color:#f2a654;color:#fff}.well-danger{background-color:#f96868;color:#fff}.close.icon{font-size:inherit}body{font-weight:300}th{font-weight:400}b,optgroup,strong{font-weight:500}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:300}.lead{font-weight:100}dt,kbd kbd{font-weight:500}.btn-link,.checkbox label,.checkbox-inline,.radio label,.radio-inline,label{font-weight:300}.dropdown-menu>li>a{font-weight:100}.input-group-addon{font-weight:300}.label{font-weight:500}.popover,.tooltip{font-weight:300}.modal-content{border:none;border-radius:4px;box-shadow:0 2px 12px rgba(0,0,0,.2)}.modal-header{border-bottom:none;padding:15px 20px}.modal-header .close{margin-top:1px}.modal-body{padding:20px}.modal-footer{border-top:none;padding:20px}.modal-top{margin:0 auto}.modal-center{justify-content:center}.modal-bottom,.modal-center{align-content:center;display:flex;flex-flow:column nowrap;height:100%;margin:0 auto}.modal-bottom{justify-content:flex-end}.modal-sidebar{align-content:center;background-color:#fff;display:flex;flex-flow:column nowrap;height:100%;justify-content:center;margin:0;position:absolute;right:0}.modal-sidebar .modal-content{background-color:transparent;border-radius:0;box-shadow:none}.modal-sidebar .modal-header{border-bottom:none}.modal-sidebar .modal-footer{border-top:none}.modal-sidebar button.close{position:fixed;right:20px;top:20px}.modal.fade .modal-dialog.modal-sidebar{transform:translate(25%)}.modal.in .modal-dialog.modal-sidebar{transform:translate(0)}.modal-fill-in{background-color:transparent}.modal-fill-in.in{background-color:hsla(0,0%,100%,.95);opacity:1}.modal-fill-in .modal-dialog{align-content:center;align-items:center;display:flex;flex-flow:column nowrap;height:100%;justify-content:center;margin:0 auto;width:100%}@media (min-width:768px){.modal-fill-in .modal-dialog>*{width:600px}.modal-fill-in .modal-dialog.modal-sm>*{width:300px}.modal-fill-in .modal-dialog button.close{filter:alpha(opacity=50);opacity:.5;position:fixed;right:20px;top:20px;transform:translate(0);z-index:1}}@media (min-width:992px){.modal-fill-in .modal-dialog.modal-lg>*{width:900px}}.modal-fill-in .modal-content{background-color:transparent;border-radius:0;box-shadow:none}.modal-fill-in .modal-header{border-bottom:none}.modal-fill-in .modal-footer{border-top:none}.modal-primary .modal-header{background-color:#62a8ea;border-radius:4px 4px 0 0}.modal-primary .modal-header *{color:#fff}.modal-primary .modal-header .close{opacity:.6}.modal-success .modal-header{background-color:#46be8a;border-radius:4px 4px 0 0}.modal-success .modal-header *{color:#fff}.modal-success .modal-header .close{opacity:.6}.modal-info .modal-header{background-color:#57c7d4;border-radius:4px 4px 0 0}.modal-info .modal-header *{color:#fff}.modal-info .modal-header .close{opacity:.6}.modal-warning .modal-header{background-color:#f2a654;border-radius:4px 4px 0 0}.modal-warning .modal-header *{color:#fff}.modal-warning .modal-header .close{opacity:.6}.modal-danger .modal-header{background-color:#f96868;border-radius:4px 4px 0 0}.modal-danger .modal-header *{color:#fff}.modal-danger .modal-header .close{opacity:.6}.modal.modal-fade-in-scale-up .modal-dialog{opacity:0;transform:scale(.7);transition:all .3s ease 0s}.modal.modal-fade-in-scale-up.in .modal-dialog{opacity:1;transform:scale(1)}.modal.modal-slide-in-right .modal-dialog{opacity:0;transform:translate(20%);transition:all .3s cubic-bezier(.25,.5,.5,.9 0s)}.modal.modal-slide-in-right.in .modal-dialog{opacity:1;transform:translate(0)}.modal.modal-slide-from-bottom .modal-dialog{opacity:0;transform:translateY(20%);transition:all .3s ease 0s}.modal.modal-slide-from-bottom.in .modal-dialog{opacity:1;transform:translate(0)}.modal.modal-newspaper .modal-dialog{opacity:0;transform:scale(0) rotate(2turn);transition:all .5s ease 0s}.modal.modal-newspaper.in .modal-dialog{opacity:1;transform:scale(1) rotate(0)}.modal.modal-fall{perspective:1300px}.modal.modal-fall .modal-dialog{opacity:0;transform:translateZ(600px) rotateX(20deg);transform-style:preserve-3d}.modal.modal-fall.in .modal-dialog{opacity:1;transform:translateZ(0) rotateX(0);transition:all .3s ease-in 0s}.modal.modal-side-fall{perspective:1300px}.modal.modal-side-fall .modal-dialog{transform:translate(30%) translateZ(600px) rotate(10deg);transform-style:preserve-3d}.modal.modal-side-fall.in .modal-dialog{transform:translate(0) translateZ(0) rotate(0);transition:all .3s ease-in 0s}.modal.modal-3d-flip-horizontal{perspective:1300px}.modal.modal-3d-flip-horizontal .modal-dialog{transform:rotateY(-70deg);transform-style:preserve-3d;transition:all .3s ease 0s}.modal.modal-3d-flip-horizontal.in .modal-dialog{transform:rotateY(0)}.modal.modal-3d-flip-vertical{perspective:1300px}.modal.modal-3d-flip-vertical .modal-dialog{transform:rotateX(-70deg);transform-style:preserve-3d;transition:all .3s ease 0s}.modal.modal-3d-flip-vertical.in .modal-dialog{transform:rotateX(0)}.modal.modal-3d-sign{perspective:1300px}.modal.modal-3d-sign .modal-dialog{transform:rotateX(-60deg);transform-origin:50% 0 0;transform-style:preserve-3d;transition:all .3s ease 0s}.modal.modal-3d-sign.in .modal-dialog{transform:rotateX(0)}.modal.modal-super-scaled .modal-dialog{opacity:0;transform:scale(2);transition:all .3s ease 0s}.modal.modal-super-scaled.in .modal-dialog{opacity:1;transform:scale(1)}.modal.modal-just-me .modal-dialog{opacity:0;transform:scale(.8);transition:all .3s ease 0s}.modal.modal-just-me .modal-backdrop{background-color:#fff}.modal.modal-just-me.in{background:#fff}.modal.modal-just-me.in .modal-dialog{opacity:1;transform:scale(1)}.modal.modal-just-me.in .modal-backdrop{opacity:1}.modal.modal-3d-slit{perspective:1300px}.modal.modal-3d-slit .modal-dialog{opacity:0;transform:translateZ(-3000px) rotateY(90deg);transform-style:preserve-3d;transition:all .5s ease 0s}.modal.modal-3d-slit.in .modal-dialog{animation-duration:.7s;animation-fill-mode:forwards;animation-name:slit;animation-timing-function:ease-out}.modal.modal-rotate-from-bottom{perspective:1300px}.modal.modal-rotate-from-bottom .modal-dialog{transform:translateY(100%) rotateX(90deg);transform-origin:0 100% 0;transform-style:preserve-3d;transition:all .3s ease-out 0s}.modal.modal-rotate-from-bottom.in .modal-dialog{transform:translateY(0) rotateX(0)}.modal.modal-rotate-from-left{perspective:1300px}.modal.modal-rotate-from-left .modal-dialog{transform:translateZ(100px) translateX(-30%) rotateY(90deg);transform-origin:0 100% 0;transform-style:preserve-3d;transition:all .3s ease-out 0s}.modal.modal-rotate-from-left.in .modal-dialog{transform:translateZ(0) translateX(0) rotateY(0)}@keyframes slit{50%{opacity:.5;transform:translateZ(-250px) rotateY(89deg)}to{opacity:1;transform:translateZ(0) rotateY(0)}}.tooltip-inner{padding:6px 12px}.tooltip-primary+.tooltip .tooltip-inner{background-color:#62a8ea;color:#fff}.tooltip-primary+.tooltip.top .tooltip-arrow{border-top-color:#62a8ea}.tooltip-primary+.tooltip.right .tooltip-arrow{border-right-color:#62a8ea}.tooltip-primary+.tooltip.bottom .tooltip-arrow{border-bottom-color:#62a8ea}.tooltip-primary+.tooltip.left .tooltip-arrow{border-left-color:#62a8ea}.tooltip-success+.tooltip .tooltip-inner{background-color:#46be8a;color:#fff}.tooltip-success+.tooltip.top .tooltip-arrow{border-top-color:#46be8a}.tooltip-success+.tooltip.right .tooltip-arrow{border-right-color:#46be8a}.tooltip-success+.tooltip.bottom .tooltip-arrow{border-bottom-color:#46be8a}.tooltip-success+.tooltip.left .tooltip-arrow{border-left-color:#46be8a}.tooltip-info+.tooltip .tooltip-inner{background-color:#57c7d4;color:#fff}.tooltip-info+.tooltip.top .tooltip-arrow{border-top-color:#57c7d4}.tooltip-info+.tooltip.right .tooltip-arrow{border-right-color:#57c7d4}.tooltip-info+.tooltip.bottom .tooltip-arrow{border-bottom-color:#57c7d4}.tooltip-info+.tooltip.left .tooltip-arrow{border-left-color:#57c7d4}.tooltip-warning+.tooltip .tooltip-inner{background-color:#f2a654;color:#fff}.tooltip-warning+.tooltip.top .tooltip-arrow{border-top-color:#f2a654}.tooltip-warning+.tooltip.right .tooltip-arrow{border-right-color:#f2a654}.tooltip-warning+.tooltip.bottom .tooltip-arrow{border-bottom-color:#f2a654}.tooltip-warning+.tooltip.left .tooltip-arrow{border-left-color:#f2a654}.tooltip-danger+.tooltip .tooltip-inner{background-color:#f96868;color:#fff}.tooltip-danger+.tooltip.top .tooltip-arrow{border-top-color:#f96868}.tooltip-danger+.tooltip.right .tooltip-arrow{border-right-color:#f96868}.tooltip-danger+.tooltip.bottom .tooltip-arrow{border-bottom-color:#f96868}.tooltip-danger+.tooltip.left .tooltip-arrow{border-left-color:#f96868}.tooltip-rotate+.tooltip{animation:tooltip-rotate3d 1s ease .1s forwards;opacity:0}@keyframes tooltip-rotate3d{0%{opacity:0;transform:rotate(15deg)}to{opacity:1;transform:rotate(0)}}.tooltip-scale+.tooltip{animation:tooltip-scale3d 1s ease 0s forwards}@keyframes tooltip-scale3d{0%{opacity:0;transform:scale3d(.7,.3,1) translate(50%,50%)}to{opacity:1;transform:scaleX(1) translate(50%,50%)}}.popover{box-shadow:0 2px 6px rgba(0,0,0,.05);padding:0}.popover.bottom>.arrow:after{border-bottom-color:#f3f7f9}.popover-content{padding:20px}.popover-primary+.popover .popover-title{background-color:#62a8ea;border-color:#62a8ea;color:#fff}.popover-primary+.popover.bottom .arrow,.popover-primary+.popover.bottom .arrow:after{border-bottom-color:#62a8ea}.popover-success+.popover .popover-title{background-color:#46be8a;border-color:#46be8a;color:#fff}.popover-success+.popover.bottom .arrow,.popover-success+.popover.bottom .arrow:after{border-bottom-color:#46be8a}.popover-info+.popover .popover-title{background-color:#57c7d4;border-color:#57c7d4;color:#fff}.popover-info+.popover.bottom .arrow,.popover-info+.popover.bottom .arrow:after{border-bottom-color:#57c7d4}.popover-warning+.popover .popover-title{background-color:#f2a654;border-color:#f2a654;color:#fff}.popover-warning+.popover.bottom .arrow,.popover-warning+.popover.bottom .arrow:after{border-bottom-color:#f2a654}.popover-danger+.popover .popover-title{background-color:#f96868;border-color:#f96868;color:#fff}.popover-danger+.popover.bottom .arrow,.popover-danger+.popover.bottom .arrow:after{border-bottom-color:#f96868}.popover-rotate+.popover{animation:popover-rotate3d 1s ease .1s forwards;opacity:0}@keyframes popover-rotate3d{0%{opacity:0;transform:rotate(15deg)}to{opacity:1;transform:rotate(0)}}.popover-scale+.popover{animation:popover-scale3d 1s ease 0s forwards}@keyframes popover-scale3d{0%{opacity:0;transform:scale3d(.7,.3,1) translate(50%,50%)}to{opacity:1;transform:scaleX(1) translate(50%,50%)}}.carousel-control{min-width:50px}.carousel-control:focus,.carousel-control:hover{filter:alpha(opacity=40);opacity:.4}.carousel-control .icon{display:inline-block;height:16px;margin-top:-8px;position:absolute;top:50%;width:16px;z-index:5}.carousel-control.left .icon{left:50%;margin-left:-8px}.carousel-control.right .icon{margin-right:-8px;right:50%}.carousel-caption h1,.carousel-caption h2,.carousel-caption h3,.carousel-caption h4,.carousel-caption h5,.carousel-caption h6{color:inherit}.carousel-indicators{margin-bottom:0}.carousel-indicators li{background-color:hsla(0,0%,100%,.3);border:none;margin:3px}.carousel-indicators .active{height:10px;margin:3px;width:10px}.carousel-indicators-scaleup li{border:none;transition:transform .3s ease 0s,background-color .3s ease 0s}.carousel-indicators-scaleup .active{transform:scale(1.5)}.carousel-indicators-fillin li{background-color:transparent;box-shadow:inset 0 0 0 2px #fff;transition:box-shadow .3s ease 0s}.carousel-indicators-fillin .active{box-shadow:inset 0 0 0 8px #fff}.carousel-indicators-fall li{position:relative;transition:transform .3s ease 0s,background-color .3s ease 0s}.carousel-indicators-fall li:after{background-color:rgba(0,0,0,.3);border-radius:50%;content:\"\";height:100%;left:0;opacity:0;position:absolute;top:0;transform:translateY(-200%);transition:opacity .3s ease 0s,visibility 0s ease .3s;visibility:hidden;width:100%}.carousel-indicators-fall .active{background-color:transparent;transform:translateY(200%)}.carousel-indicators-fall .active:after{opacity:1;transition:opacity .3s ease 0s;visibility:visible}@media screen and (min-width:768px){.carousel-control .icon{font-size:24px;height:24px;margin-top:-12px;width:24px}.carousel-control.left .icon{margin-left:-12px}.carousel-control.right .icon{margin-right:-12px}}.vertical-align{font-size:0}.vertical-align:before{content:\"\";display:inline-block;height:100%;vertical-align:middle}.vertical-align-bottom,.vertical-align-middle{display:inline-block;font-size:14px;max-width:100%}.vertical-align-middle{vertical-align:middle}.vertical-align-bottom{vertical-align:bottom}.inline{display:inline!important}.inline-block{display:inline-block!important}.block{display:block!important}.text-truncate{word-wrap:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-break{word-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;-ms-hyphens:auto;white-space:normal}.text-nowrap{white-space:nowrap}.text-top{vertical-align:top!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}.text-justify{text-align:justify!important}.text-lowercase{text-transform:lowercase!important}.initialism,.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-unset{font-weight:unset!important}.font-weight-100{font-weight:100!important}.font-weight-200{font-weight:200!important}.font-weight-300{font-weight:300!important}.font-weight-400{font-weight:400!important}.font-weight-500{font-weight:500!important}.font-weight-600{font-weight:600!important}.font-weight-700{font-weight:700!important}.font-weight-800{font-weight:800!important}.font-weight-900{font-weight:900!important}.font-weight-light{font-weight:100!important}.font-weight-normal{font-weight:300!important}.font-weight-medium{font-weight:400!important}.font-weight-bold{font-weight:500!important}.font-size-0{font-size:0!important}.font-size-10{font-size:10px!important}.font-size-12{font-size:12px!important}.font-size-14{font-size:14px!important}.font-size-16{font-size:16px!important}.font-size-18{font-size:18px!important}.font-size-20{font-size:20px!important}.font-size-24{font-size:24px!important}.font-size-26{font-size:26px!important}.font-size-30{font-size:30px!important}.font-size-40{font-size:40px!important}.font-size-50{font-size:50px!important}.font-size-60{font-size:60px!important}.font-size-70{font-size:70px!important}.font-size-80{font-size:80px!important}.visible-xlg,.visible-xlg-block,.visible-xlg-inline,.visible-xlg-inline-block{display:none!important}@media (min-width:1600px){.visible-xlg{display:block!important}table.visible-xlg{display:table!important}tr.visible-xlg{display:table-row!important}td.visible-xlg,th.visible-xlg{display:table-cell!important}.visible-xlg-block{display:block!important}.visible-xlg-inline{display:inline!important}}@media (min-width:1200px){.visible-xlg-inline-block{display:inline-block!important}}@media (min-width:1600px){.hidden-xlg{display:none!important}}.panel-title.panel-icon{padding-left:50px}.panel-title.panel-icon i{font-size:22px;left:20px;margin-right:5px;position:absolute;top:18px}#dataTable a{font-weight:500;text-decoration:none}#dataTable .bread-actions .btn,.actions a.btn{font-size:12px;padding:5px 10px}.navbar-nav.navbar-right{background:none!important;height:100%;right:0;top:0;width:auto}.navbar-nav.navbar-right li.dropdown.open .dropdown-menu{display:block}.media-section .modal-footer{margin-top:0}.media-section .modal .modal-header .close{padding-bottom:2px}.media-section .modal-content{border:0}.media-section .modal-header{background:#21a9e1}.media-section #confirm_delete_modal .modal-header{background:#e14421}.media-section #move_file_modal .modal-header{background:#fc9a24}.media-section .modal-header h4{color:#fff}.confirm_delete_name{color:#4da7e8}#move_btn{background:#fabe28;border:1px solid #fabe28}#toolbar{background:#e0e0e0;border-top-left-radius:3px;border-top-right-radius:3px;padding:20px}#toolbar .btn{border-radius:2px;font-size:13px;padding:8px 13px}#toolbar .btn-group .btn{border-radius:0}#toolbar .btn-group .btn:first-child{border-bottom-left-radius:2px;border-top-left-radius:2px}#toolbar .btn-group .btn:last-child{border-bottom-right-radius:2px;border-top-right-radius:2px}#toolbar .btn-group .btn.btn-default:last-child,#toolbar .btn-group .btn.btn-default:nth-child(2){border-left:1px solid #cbcbcd}#toolbar .btn-group .btn.btn-default:first-child,#toolbar .btn-group .btn.btn-default:nth-child(2){margin-right:1px}#toolbar .btn.btn-default:focus{background:#f0f0f1;border-color:#f0f0f1}#toolbar .btn.btn-primary{background:#4da7e8;border:1px solid #4da7e8}#toolbar .btn.btn-primary:hover{background:#2995e3}#toolbar #refresh.btn{margin:0 10px}#toolbar i{top:2px}#toolbar i,.breadcrumb-container{position:relative}.breadcrumb.filemanager{background:#f0f0f0;border:1px solid #e0e0e0;border-bottom:0;border-radius:0;left:0;margin-top:0;padding-left:20px;top:0;width:100%}.breadcrumb.filemanager li{cursor:pointer;position:relative;transition:color .1s linear}.breadcrumb.filemanager li:hover{color:#555}.breadcrumb li .arrow{background:#f0f0f0;border-bottom:1px solid #efefef;margin-bottom:5px;border-right:1px solid #efefef;bottom:-14px;display:none;height:12px;left:50%;position:absolute;transform:rotate(45deg);width:12px}.breadcrumb li:last-child .arrow{display:block}.breadcrumb li:first-child .arrow{margin-left:-5px;margin-bottom:5px;}.breadcrumb li{color:#4da7e8;cursor:pointer;font-weight:700}.breadcrumb li:last-child{color:#58595f;cursor:pointer;font-weight:400}.breadcrumb-container .toggle{color:#bbb;cursor:pointer;float:right;overflow:visible;position:absolute;right:5px;top:11px;transition:color .1s linear}.breadcrumb-container .toggle:hover{color:#aaa}.breadcrumb-container .toggle span{float:left;font-size:9px;font-weight:700;position:relative;right:10px;text-transform:uppercase;top:2px}.breadcrumb-container .toggle i{float:right;font-size:18px;margin-right:5px;position:relative;top:-4px}.nothingfound{display:none}#filemanager{min-height:200px;position:relative}#filemanager .loader{margin-top:25px}#filemanager #content{background:#fff;display:block}.flex{border:1px solid #e0e0e0;border-top:0;display:flex;flex-wrap:wrap}.flex #left{flex:4;min-height:230px;position:relative}.flex #left #no_files h3{color:#949494;margin-bottom:75px;margin-top:55px;text-align:center}.flex #right{border-left:1px solid #f1f1f1;flex:1}#right .right_details{display:block}#right .right_none_selected{text-align:center}#right .right_none_selected i{background:#f9f9f9;display:block;font-size:30px;margin-left:0;padding:50px;text-align:center;width:100%}#right .right_none_selected p{border-bottom:1px solid #f1f1f1;color:#bbb;padding:10px;text-align:center}#files{-webkit-touch-callout:none;display:flex;flex-wrap:wrap;list-style:none;margin:0;padding:10px;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}#files li{flex:1;max-width:250px;min-width:200px;width:100%}#files li .file_link{background:#eee;background:#f6f8f9;border:1px solid #ecf0f1;border-radius:3px;cursor:pointer;display:flex;margin:10px;overflow:hidden;padding:10px}#files li .file_link .details{flex:2;overflow:hidden;width:100%}#files li .file_link .details small{font-size:11px;position:relative;top:-3px}#files li .file_link .link_icon{flex:1}#files li .file_link .img_icon,#files li .file_link img{display:none}#files li .file_link.image .img_icon,#files li .file_link.image img{display:block}#files li .file_link.image img{height:50px}#files li .file_link.image .img_icon{display:block;height:50px;width:50px}#files li .file_link.selected,#files li .file_link:hover{background:#4da7e8!important;border-color:#2581b8;color:#fff}#files li .file_link.selected h4,#files li .file_link:hover h4{color:#fff}#files li .details h4{font-size:14px;height:17px;margin-bottom:2px;margin-top:10px;max-height:17px;overflow:hidden;text-overflow:ellipsis}#files li .details .folder h4{margin-top:16px}.file_link.folder i.icon{float:left;margin-left:10px}.file_link.folder .num_items{display:block}.file_link .link_icon{margin-left:0;margin-right:5px;padding-left:0;text-align:center}.file_link .link_icon i{padding-left:0;padding-right:0;position:relative;top:5px}.file_link i.icon:before{font-size:40px}.detail_img{background:#eee;border-bottom:1px solid #f1f1f1}.detail_img img{display:inline-block;height:auto;width:100%}.detail_img i{background:#f9f9f9;display:block;font-size:70px;margin-left:0;padding:30px;text-align:center;width:100%}.detail_img .file i.fa-file,.detail_img .folder i.fa-folder,.detail_img .image img{display:block}.detail_info{padding:10px}.detail_info.folder .selected_file_size{display:none}.detail_info span{clear:both;display:block}.detail_info a{color:#4da7e8}.detail_info .selected_file_size{padding-top:0}.detail_info h4{color:#bbb;margin:3px 8px 0 0;padding-bottom:2px}.detail_info h4,.detail_info p{float:left;font-size:12px;font-weight:400}.detail_info p{color:#444;padding-bottom:3px}#filemanager .progress{border-radius:0;margin-bottom:0}#uploadProgress{background:#eee;display:none}#file_loader{background:hsla(0,0%,100%,.7);height:100%;left:0;position:absolute;text-align:center;top:0;width:100%;z-index:9}#file_loader #file_loader_inner{height:60px;left:50%;margin-left:-30px;margin-top:-30px;position:absolute;top:50%;width:60px}#file_loader img{animation:spin 1.2s ease-in-out infinite;height:80px;margin-top:50px;opacity:.5;width:80px}#file_loader p{font-size:12px;font-weight:400;margin-top:40px;position:absolute;text-align:center;top:50%;width:100%}body,html{background-color:#fff;color:#76838f;font-family:Open Sans,sans-serif;font-size:14px;height:100%;line-height:1.57142857;margin:0;padding:0}.skin-voyager .main-header .navbar{background-color:#fff;border-bottom:1px solid #f1f1f1}.skin-voyager .main-header .navbar .nav>li>a{color:#212936}.skin-voyager .main-header .navbar .nav .open>a,.skin-voyager .main-header .navbar .nav .open>a:focus,.skin-voyager .main-header .navbar .nav .open>a:hover,.skin-voyager .main-header .navbar .nav>.active>a,.skin-voyager .main-header .navbar .nav>li>a:active,.skin-voyager .main-header .navbar .nav>li>a:focus,.skin-voyager .main-header .navbar .nav>li>a:hover{background:rgba(0,0,0,.05);color:#212936}.skin-voyager .main-header .navbar .sidebar-toggle{color:#212936}@media (max-width:767px){.skin-voyager .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-voyager .main-header .navbar .dropdown-menu li a{color:#fff}.skin-voyager .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-voyager .main-header .logo{background-color:#212936;border-bottom:0 solid transparent;color:#fff}.skin-voyager .main-header .logo:hover,.skin-voyager .main-header li.user-header{background-color:#212936}.skin-voyager .content-header{background:transparent}.skin-voyager .left-side,.skin-voyager .main-sidebar,.skin-voyager .wrapper{background-color:#1b1e24}.skin-voyager .user-panel>.info,.skin-voyager .user-panel>.info>a{color:#fff}.skin-voyager .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-voyager .sidebar-menu>li>a{border-left:3px solid transparent}.skin-voyager .sidebar-menu>li.active>a,.skin-voyager .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#3c8dbc;color:#fff}.skin-voyager .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-voyager .sidebar a{color:#b8c7ce}.skin-voyager .sidebar a:hover{text-decoration:none}.skin-voyager .treeview-menu>li>a{color:#8aa4af}.skin-voyager .treeview-menu>li.active>a,.skin-voyager .treeview-menu>li>a:hover{color:#fff}.skin-voyager .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-voyager .sidebar-form .btn,.skin-voyager .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-voyager .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-voyager .sidebar-form input[type=text]:focus,.skin-voyager .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-voyager .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-voyager .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-voyager.layout-top-nav .main-header>.logo{background-color:#22262e;border-bottom:0 solid transparent;color:#fff}.skin-voyager.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.voyager{background-color:#f9f9f9}.voyager .app-footer{background:#fff;color:#353d47;left:0;opacity:.7;padding:10px 0;text-align:right;width:100%}.voyager .app-footer i{color:#d9534f;position:relative;top:2px}.voyager .navbar,.voyager .navbar.navbar-default{background:hsla(0,0%,98%,.9);border-bottom:0;box-shadow:0 0 0}.voyager .navbar.navbar-default>.container-fluid:after,.voyager .navbar>.container-fluid{border-bottom:1px solid #eee;height:1px;width:99.5%}.voyager .expanded .navbar.navbar-default>.container-fluid:after,.voyager .expanded .navbar>.container-fluid{border-bottom:0}.voyager .navbar .navbar-header .navbar-brand,.voyager .navbar.navbar-default .navbar-header .navbar-brand{color:#f9f9f9}.voyager .navbar .navbar-breadcrumb li,.voyager .navbar .navbar-breadcrumb li a,.voyager .navbar .navbar-header .navbar-expand-toggle,.voyager .navbar .navbar-header .navbar-right-expand-toggle,.voyager .navbar.navbar-default .navbar-breadcrumb li,.voyager .navbar.navbar-default .navbar-breadcrumb li a,.voyager .navbar.navbar-default .navbar-header .navbar-expand-toggle,.voyager .navbar.navbar-default .navbar-header .navbar-right-expand-toggle{color:#353d47}.voyager .navbar .navbar-nav>li,.voyager .navbar.navbar-default .navbar-nav>li{border-left:1px solid #f9f9f9}.voyager .navbar .navbar-nav>li.profile,.voyager .navbar.navbar-default .navbar-nav>li.provile{border-left:0}.voyager .navbar .navbar-nav>li>a,.voyager .navbar.navbar-default .navbar-nav>li>a{color:#353d47}.voyager .navbar .navbar-nav>li:hover>a,.voyager .navbar.navbar-default .navbar-nav>li:hover>a{color:#22a7f0}.voyager .navbar .navbar-nav>li.open>a,.voyager .navbar.navbar-default .navbar-nav>li.open>a{background-color:transparent;color:#22a7f0}.voyager .navbar .navbar-nav>li.danger>a,.voyager .navbar.navbar-default .navbar-nav>li.danger>a{background-color:transparent;border-bottom:4px solid #fa2a00;color:#fa2a00}.voyager .navbar .navbar-nav>li.danger.open>a,.voyager .navbar.navbar-default .navbar-nav>li.danger.open>a{background-color:#fa2a00;color:#fff}.voyager .navbar .navbar-nav .dropdown-menu,.voyager .navbar.navbar-default .navbar-nav .dropdown-menu{background-color:#f9f9f9;border-color:#e4e4e4}.voyager .navbar .navbar-nav .dropdown-menu .title,.voyager .navbar.navbar-default .navbar-nav .dropdown-menu .title{background-color:#fff}.voyager .navbar .navbar-nav .dropdown-menu .title .badge,.voyager .navbar.navbar-default .navbar-nav .dropdown-menu .title .badge{background-color:#353d47}.voyager .navbar .navbar-nav .dropdown-menu.danger,.voyager .navbar.navbar-default .navbar-nav .dropdown-menu.danger{border-color:#fa2a00}.voyager .navbar .navbar-nav .dropdown-menu.danger .title,.voyager .navbar.navbar-default .navbar-nav .dropdown-menu.danger .title{background-color:#fa2a00;color:#fff}.voyager .navbar .navbar-nav .dropdown-menu.danger .title .badge,.voyager .navbar.navbar-default .navbar-nav .dropdown-menu.danger .title .badge{background-color:#fff;color:#fa2a00}.voyager .navbar.navbar-inverse{background-color:#353d47;border-bottom:0;box-shadow:0 1px 1px rgba(0,0,0,.1)}.voyager .navbar.navbar-inverse>.container-fluid{background-color:#353d47}.voyager .navbar.navbar-inverse .navbar-header .navbar-brand{color:#f9f9f9}.voyager .navbar.navbar-inverse .navbar-breadcrumb li,.voyager .navbar.navbar-inverse .navbar-breadcrumb li a,.voyager .navbar.navbar-inverse .navbar-header .navbar-expand-toggle,.voyager .navbar.navbar-inverse .navbar-header .navbar-right-expand-toggle{color:#fff}.voyager .navbar.navbar-inverse .navbar-nav>li{border-left:1px solid #363c46}.voyager .navbar.navbar-inverse .navbar-nav>li>a{color:#fff}.voyager .navbar.navbar-inverse .navbar-nav>li:hover>a{color:#22a7f0}.voyager .navbar.navbar-inverse .navbar-nav>li.open>a{background-color:transparent;color:#22a7f0}.voyager .navbar.navbar-inverse .navbar-nav>li.danger>a{background-color:transparent;border-bottom:4px solid #fa2a00;color:#fff}.voyager .navbar.navbar-inverse .navbar-nav>li.danger.open>a{background-color:#fa2a00}.voyager .navbar.navbar-inverse .navbar-nav .dropdown-menu{background-color:#f9f9f9;border-color:#353d47}.voyager .navbar.navbar-inverse .navbar-nav .dropdown-menu .title{background-color:#fff}.voyager .navbar.navbar-inverse .navbar-nav .dropdown-menu .title .badge{background-color:#353d47}.voyager .navbar.navbar-inverse .navbar-nav .dropdown-menu.danger{border-color:#fa2a00}.voyager .navbar.navbar-inverse .navbar-nav .dropdown-menu.danger .title{background-color:#fa2a00;color:#fff}.voyager .navbar.navbar-inverse .navbar-nav .dropdown-menu.danger .title .badge{background-color:#fff;color:#fa2a00}.voyager .side-menu{background-color:#fff;box-shadow:1px 1px 2px rgba(0,0,0,.08)}.voyager .side-menu .navbar-header{background-color:#22a7f0;margin-bottom:4px}.voyager .side-menu .navbar-header .navbar-brand{color:#19b5fe}.voyager .side-menu .navbar-nav{width:100%}.voyager .side-menu .navbar{background-color:#fff;border-bottom:0;box-shadow:none}.voyager .side-menu .navbar li>a{color:#363c46}.voyager .side-menu .navbar li.active{border-left:0}.voyager .side-menu .navbar li.active>a{background-color:#fff;border-right:4px solid #22a7f0}.voyager .side-menu .navbar>li:hover>a{background-color:#fa2a00;color:#fff}.voyager .side-menu .navbar li.dropdown{background-color:transparent}.voyager .side-menu .navbar li.dropdown>.panel-collapse{background-color:#e4e4e4}.voyager .side-menu .navbar li.dropdown .panel-body{padding:0 7px}.voyager .side-menu.sidebar-inverse{background-color:#353d47;box-shadow:0 0 0}.voyager .side-menu.sidebar-inverse .navbar{background-color:#353d47;border-bottom:0;box-shadow:none}.voyager .side-menu.sidebar-inverse .navbar li{border-left:0}.voyager .side-menu.sidebar-inverse .navbar li>a{color:#fff}.voyager .side-menu.sidebar-inverse .navbar li.active>a{background-color:#fff;border-left:3px solid #22a7f0;border-right:0 solid #22a7f0;color:#353d47;font-weight:400}.voyager .side-menu.sidebar-inverse .navbar li.active>a .icon{margin-left:-3px}.voyager .side-menu.sidebar-inverse .navbar>li:hover>a{background-color:#fa2a00;color:#fff}.voyager .side-menu.sidebar-inverse .navbar li.dropdown>.panel-collapse{background-color:rgba(0,0,0,.1)}.voyager .side-menu.sidebar-inverse .navbar li.dropdown .panel-body{padding:0 7px}@media (max-width:768px){.voyager .navbar.navbar-default .navbar-nav>li{border-left:0}.voyager .navbar.navbar-default .navbar-right{background-color:#fff}.voyager .navbar.navbar-inverse .navbar-nav>li{border-left:0}.voyager .navbar.navbar-inverse .navbar-right{background-color:#353d47}}.voyager .card.red{background-color:#fa2a00;color:#fff}.voyager .card.yellow{background-color:#ffb400;color:#fff}.voyager .card.green{background-color:#1abc9c;color:#fff}.voyager .card.blue{background-color:#22a7f0;color:#fff}.voyager .card.dark{background-color:#353d47;color:#fff}.voyager .card.blue,.voyager .card.dark,.voyager .card.green,.voyager .card.red,.voyager .card.yellow{border:0}.voyager .card.blue .card-header,.voyager .card.dark .card-header,.voyager .card.green .card-header,.voyager .card.red .card-header,.voyager .card.yellow .card-header{border-bottom:0}.voyager .card.blue .card-header .title,.voyager .card.dark .card-header .title,.voyager .card.green .card-header .title,.voyager .card.red .card-header .title,.voyager .card.yellow .card-header .title{color:#fff}.voyager .card{border:0 solid #e4e4e4;box-shadow:0 1px 1px rgba(0,0,0,.1)}.voyager .card .card-header{border-bottom:1px solid #e4e4e4}.voyager .card .card-header .title{color:#353d47}.voyager .card .card-body .sub-title{border-bottom:1px solid #eaeaea}.voyager .card .card-header.no-border{border-bottom:0}.voyager .card .card-jumbotron{background-color:#eaeaea}.voyager .card.primary .card-jumbotron{background-color:#353d47;color:#fff}.voyager .card.profile .card-footer{border-top:1px solid #f9f9f9}.voyager .card.summary-inline.red:hover{background-color:#7c1a06}.voyager .card.summary-inline.yellow:hover{background-color:#85630f}.voyager .card.summary-inline.green:hover{background-color:#006551}.voyager .card.summary-inline.blue:hover{background-color:#353d47}.voyager .card.summary-inline.dark:hover{background-color:#09486b}.voyager .card.card-success .card-header{background-color:#1abc9c}.voyager .card.card-success .card-header .title{color:#fff}.voyager .card.card-info .card-header{background-color:#22a7f0}.voyager .card.card-info .card-header .title{color:#fff}.voyager .panel.panel-default{border:1px solid #eaeaea}.voyager .panel.panel-default .panel-heading{background-color:#f0f0f0;border-bottom:1px solid #eaeaea}.voyager .panel.panel-primary{border:1px solid #353d47}.voyager .modal.modal-relationships{border:0}.voyager .modal.modal-relationships h5{font-size:42px;margin-bottom:20px;margin-top:0;text-align:center}.voyager .modal.modal-relationships h4 i{margin-right:5px;position:relative;top:2px}.voyager .modal.modal-relationships :not(.toggle-group)>label{background:#f1f1f1;border-bottom:1px solid #eaeaea;border-top:1px solid #eaeaea;font-size:11px;font-weight:700;height:38px;line-height:23px;margin-bottom:0;padding:7px 12px}.voyager .modal.modal-relationships :not(.toggle-group)>label:first-child{border-bottom-left-radius:3px;border-left:1px solid #eaeaea;border-top-left-radius:3px}.voyager .modal.modal-relationships .panel-body{padding-top:25px}.voyager .modal.modal-relationships .btn-relationship,.voyager .modal.modal-relationships.modal-danger .modal-header{background:#f2435c;color:#fff}.voyager .modal.modal-relationships .modal-body{background:#fff}.voyager .modal.modal-relationships .modal-body .col-md-12{margin-bottom:0}.voyager .modal.modal-relationships .modal-footer{background:#f7f7f9;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.voyager .modal.modal-relationships .well{background-color:#f9f9fc;border:1px solid #eaeaea}.voyager .modal.modal-relationships p.relationship-warn{text-align:center}.voyager .modal.modal-relationships .relationship_details{display:flex}.voyager .modal.modal-relationships .relationship_details.relationshipPivot{display:none}.voyager .modal.modal-relationships .relationship_details .belongsTo.flexed,.voyager .modal.modal-relationships .relationship_details .hasOneMany.flexed{display:flex}.voyager .modal.modal-relationships .relationship_details .belongsTo,.voyager .modal.modal-relationships .relationship_details .hasOneMany{display:none;width:100%}.voyager .modal.modal-relationships .relationship_details .belongsTo label span,.voyager .modal.modal-relationships .relationship_details .hasOneMany label span{color:#444}.voyager .modal.modal-relationships .relationship_details.col-md-12{margin-bottom:20px}.voyager .modal.modal-relationships .relationship_details p{background:#fff;border:1px solid #eaeaea;border-bottom-left-radius:3px;border-right:0;border-top-left-radius:3px;color:#333;float:left;line-height:22px;margin-bottom:0;margin-right:0;padding:6px 10px}.voyager .modal.modal-relationships .relationship_details p.flex{border-radius:0;border-bottom-right-radius:3px;border-right:1px solid #eaeaea;border-top-right-radius:3px;display:flex;padding-right:10px}.voyager .modal.modal-relationships .relationship_details p.flex span{line-height:24px;margin-left:4px;margin-right:5px}.voyager .modal.modal-relationships .relationship_details p.flex input{position:relative;top:3px}.voyager .modal.modal-relationships .relationship_details p.relationship_table_select{background:#efefef;color:#76838f;font-size:12px;font-weight:700;padding-top:8px}.voyager .modal.modal-relationships .relationship_details p.relationship_table_select select{margin-left:5px}.voyager .modal.modal-relationships .relationship_details span.label_table_name{display:inline-block}.voyager .modal.modal-relationships .relationship_details .relationship_type+span{font-weight:700}.voyager .modal.modal-relationships .relationship_details select{border:1px solid #f1f1f1;margin-left:10px}.voyager .modal.modal-relationships .relationship_details .select2{border:1px solid #eaeaea;border-right:0;flex:1;height:38px;margin-right:0}.voyager .modal.modal-relationships .relationship_details .select2 .select2-selection{border:0;border-radius:5px}.voyager .modal.modal-relationships .relationship_details .select2:last-child{border-bottom-right-radius:4px;border-right:1px solid #eaeaea;border-top-right-radius:2px}.voyager .modal.modal-relationships .relationship_details .form-control{border-radius:0;flex:1;height:38px}.voyager .modal.modal-relationships .relationship_details .form-control:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.voyager .modal.modal-relationships .relationship_details_more{margin-bottom:0;position:relative}.voyager .modal.modal-relationships .relationship_details_more :not(.toggle-group)>label{background:#f1f1f1;border:0;font-size:11px;font-weight:700;height:38px;left:0;line-height:23px;padding:7px 12px;position:absolute;top:0;width:100%}.voyager .modal.modal-relationships .relationship_details_more .select2-container--default .select2-selection--single{border:1px solid #f1f1f1}.voyager .modal.modal-relationships .relationship_details_more .relationship_taggable{display:none}.voyager .modal.modal-relationships .relationship_details_more .well{background:none;border:1px solid #f1f1f1;margin-bottom:5px;padding-top:55px;position:relative}.btn-new-relationship{background:#f2435c;border:1px solid #f2435c;color:#fff}.btn-new-relationship:hover{color:#fff}.btn-new-relationship i,.relationship-btn-container .btn i{position:relative;top:2px}.voyager .panel.panel-primary .panel-heading{background-color:#73849d;border-bottom:1px solid #353d47;color:#fff}.voyager .panel.panel-success{border:1px solid #1abc9c}.voyager .panel.panel-success .panel-heading{background-color:#99e9d9;border-bottom:1px solid #1abc9c;color:#006551}.voyager .panel.panel-info{border:1px solid #22a7f0}.voyager .panel.panel-info .panel-heading{background-color:#91d5fb;border-bottom:1px solid #22a7f0;color:#09486b}.voyager .panel.panel-warning{border:1px solid #fabe28}.voyager .panel.panel-warning .panel-heading{background-color:#ffe5a2;border-bottom:1px solid #fabe28;color:#85630f}.voyager .panel.panel-danger{border:1px solid #fb927d}.voyager .panel.panel-danger .panel-heading{background-color:#ffb8aa;border-bottom:1px solid #fb927d;color:#7c1a06}.voyager .panel.fresh-color.panel-primary{border:1px solid #353d47}.voyager .panel.fresh-color.panel-primary .panel-heading{background-color:#353d47;border-bottom:1px solid #353d47;color:#fff}.voyager .panel.fresh-color.panel-success{border:1px solid #1abc9c}.voyager .panel.fresh-color.panel-success .panel-heading{background-color:#1abc9c;border-bottom:1px solid #1abc9c;color:#fff}.voyager .panel.fresh-color.panel-info{border:1px solid #22a7f0}.voyager .panel.fresh-color.panel-info .panel-heading{background-color:#22a7f0;border-bottom:1px solid #22a7f0;color:#fff}.voyager .panel.fresh-color.panel-warning{border:1px solid #fabe28}.voyager .panel.fresh-color.panel-warning .panel-heading{background-color:#fabe28;border-bottom:1px solid #fabe28;color:#fff}.voyager .panel.fresh-color.panel-danger{border:1px solid #fa2a00}.voyager .panel.fresh-color.panel-danger .panel-heading{background-color:#fa2a00;border-bottom:1px solid #fa2a00;color:#fff}.voyager .btn.btn-default{background-color:#f0f0f0;border-color:#eaeaea}.voyager .btn.btn-default:hover{background-color:#eaeaea}.voyager .btn.btn-success{background:#2ecc71;border:0;border-radius:3px;color:#fff;opacity:.9}.voyager .btn.btn-success:hover{opacity:1}.voyager .btn.btn-warning{background:#f39c12;border:0;border-radius:3px;color:#fff;opacity:.9}.voyager .btn.btn-warning:hover{opacity:1}.voyager .btn.btn-info{background-color:#22a7f0;border-color:#22a7f0;color:#fff}.voyager .btn-group-sm>.btn.btn-info,.voyager .btn.btn-sm.btn-info{background:#22a7f0}.voyager .btn.btn-danger{background:#fa2a00;border:0;border-radius:3px;color:#fff;opacity:.9}.voyager .btn.btn-danger:hover{opacity:1}.voyager .btn.btn-link{color:#353d47}.voyager .progress .progress-bar{background-color:#353d47;color:#fff}.voyager .progress .progress-bar.progress-bar-success{background-color:#1abc9c}.voyager .progress .progress-bar.progress-bar-info{background-color:#22a7f0}.voyager .progress .progress-bar.progress-bar-warning{background-color:#fabe28}.voyager .progress .progress-bar.progress-bar-danger{background-color:#fa2a00}.voyager .color-white{color:#fff}.voyager .pagination>li>a{color:#353d47}.voyager .pagination .active span,.voyager .pagination .active>a,.voyager .pagination .active>a:focus,.voyager .pagination .active>a:hover,.voyager .pagination .active>span:focus,.voyager .pagination .active>span:hover{background-color:#353d47;border-color:#353d47}.voyager .modal.modal-primary .modal-header{background-color:#353d47;color:#fff}.voyager .modal.modal-success .modal-header{background-color:#1abc9c;color:#fff}.voyager .modal.modal-info .modal-header{background-color:#22a7f0;color:#fff}.voyager .modal.modal-warning .modal-header{background-color:#fabe28;color:#fff}.voyager .modal.modal-danger .modal-header{background-color:#fa2a00;color:#fff}.voyager .alert.alert-success{background-color:#99e9d9;border-color:#1abc9c;color:#006551}.voyager .alert.alert-success .alert-link{color:#006551;text-decoration:underline}.voyager .alert.alert-success .btn-link{color:#006551}.voyager .alert.alert-info{background-color:#91d5fb;border-color:#22a7f0;color:#09486b}.voyager .alert.alert-info .alert-link{color:#09486b;text-decoration:underline}.voyager .alert.alert-info .btn-link{color:#09486b}.voyager .alert.alert-warning{background-color:#ffe5a2;border-color:#fabe28;color:#85630f}.voyager .alert.alert-warning .alert-link{color:#85630f;text-decoration:underline}.voyager .alert.alert-warning .btn-link{color:#85630f}.voyager .alert.alert-danger{background-color:#ffb8aa;border-color:#fb927d;color:#7c1a06}.voyager .alert.alert-danger .alert-link{color:#7c1a06;text-decoration:underline}.voyager .alert.alert-danger .btn-link{color:#7c1a06}.voyager .alert.fresh-color{color:#fff}.voyager .alert.fresh-color .alert-link{color:#fff;text-decoration:underline}.voyager .alert.fresh-color .btn-link{color:#fff}.voyager .alert.fresh-color.alert-success{background-color:#1abc9c}.voyager .alert.fresh-color.alert-info{background-color:#22a7f0}.voyager .alert.fresh-color.alert-warning{background-color:#fabe28}.voyager .alert.fresh-color.alert-danger{background-color:#fa2a00;border-color:#fa2a00}.voyager .list-group .list-group-item.active{background-color:#353d47;border-color:#353d47;color:#fff}.voyager .list-group .list-group-item.active .badge{color:#353d47}.voyager .list-group .list-group-item.list-group-item-success{background-color:#99e9d9;border-color:#99e9d9;color:#006551}.voyager .list-group .list-group-item.list-group-item-success .badge{background-color:#fff;color:#1abc9c}.voyager .list-group .list-group-item.list-group-item-info{background-color:#91d5fb;border-color:#91d5fb;color:#09486b}.voyager .list-group .list-group-item.list-group-item-info .badge{background-color:#fff;color:#22a7f0}.voyager .list-group .list-group-item.list-group-item-warning{background-color:#ffe5a2;border-color:#ffe5a2;color:#85630f}.voyager .list-group .list-group-item.list-group-item-warning .badge{background-color:#fff;color:#fabe28}.voyager .list-group .list-group-item.list-group-item-danger{background-color:#ffb8aa;border-color:#ffb8aa;color:#7c1a06}.voyager .list-group .list-group-item.list-group-item-danger .badge{background-color:#fff;color:#fa2a00}.voyager .table .active td,.voyager .table .active th{background-color:#eaeaea}.voyager .table .success{color:#006551}.voyager .table .success td,.voyager .table .success th{background-color:#99e9d9}.voyager .table .info{color:#09486b}.voyager .table .info td,.voyager .table .info th{background-color:#91d5fb}.voyager .table .warning{color:#85630f}.voyager .table .warning td,.voyager .table .warning th{background-color:#ffe5a2}.voyager .table .danger{color:#7c1a06}.voyager .table .danger td,.voyager .table .danger th{background-color:#ffb8aa}.voyager .table>tbody>tr>td,.voyager .table>tbody>tr>th,.voyager .table>tfoot>tr>td,.voyager .table>tfoot>tr>th{border-color:#eaeaea}.voyager .table>thead>tr>th{background:#f8fafc;border-color:#eaeaea}.voyager .table.table-striped>tbody>tr:nth-of-type(odd){background-color:#fdfdfd}.voyager .login-box .login-form .login-header{color:#fff}.voyager .login-box .login-form .login-body{background-color:#fff}.voyager .login-box input{background-color:#f9f9f9;border:1px solid #f9f9f9}.voyager .login-box .login-footer a{color:#fff}.voyager .login-box .login-footer a:hover{color:#fff;text-decoration:underline}.voyager .badge.primary{background-color:#353d47}.voyager .badge.success{background-color:#1abc9c}.voyager .badge.info{background-color:#22a7f0}.voyager .badge.warning{background-color:#fabe28}.voyager .badge.danger{background-color:#fa2a00}.voyager .nav-tabs,.voyager .nav-tabs>li>a:hover{background-color:#eaeaea}.voyager .nav-tabs>li.active>a:hover{background-color:#fff}.voyager .tabs-below>.nav-tabs{border-top:1px solid #e4e4e4}.voyager .tabs-below>.nav-tabs>li>a:focus,.voyager .tabs-below>.nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#e4e4e4}.voyager .tabs-below>.nav-tabs>.active>a,.voyager .tabs-below>.nav-tabs>.active>a:focus,.voyager .tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #e4e4e4 #e4e4e4}.voyager .tabs-left>.nav-tabs{border-right:1px solid #e4e4e4}.voyager .tabs-left>.nav-tabs>li>a:focus,.voyager .tabs-left>.nav-tabs>li>a:hover{border-color:#e4e4e4}.voyager .tabs-left>.nav-tabs .active>a,.voyager .tabs-left>.nav-tabs .active>a:focus,.voyager .tabs-left>.nav-tabs .active>a:hover{border-color:#e4e4e4 transparent #e4e4e4 #e4e4e4;*border-right-color:#fff}.voyager .tabs-right>.nav-tabs{border-left:1px solid #e4e4e4}.voyager .tabs-right>.nav-tabs>li>a:focus,.voyager .tabs-right>.nav-tabs>li>a:hover{border-color:#e4e4e4}.voyager .tabs-right>.nav-tabs .active>a,.voyager .tabs-right>.nav-tabs .active>a:focus,.voyager .tabs-right>.nav-tabs .active>a:hover{border-color:#e4e4e4 #e4e4e4 #e4e4e4 transparent;*border-left-color:#fff}.voyager .step .nav-tabs{background-color:#fff}.voyager .step .nav-tabs>li{border:1px solid #e4e4e4;border-right:0}.voyager .step .nav-tabs>li:after{border-bottom:15px solid transparent;border-left:15px solid #fff;border-top:15px solid transparent}.voyager .step .nav-tabs>li:before{border-bottom:16px solid transparent;border-left:16px solid #e4e4e4;border-top:16px solid transparent}.voyager .step .nav-tabs>li.active{background-color:#eaeaea}.voyager .step .nav-tabs>li.active>a,.voyager .step .nav-tabs>li.active>a:focus,.voyager .step .nav-tabs>li.active>a:hover{background:transparent}.voyager .step .nav-tabs>li:hover{background-color:#eaeaea}.voyager .step .nav-tabs>li.active:after,.voyager .step .nav-tabs>li:hover:after{border-left:15px solid #eaeaea}.voyager .step .nav-tabs>li:last-child{border-right:1px solid #e4e4e4}.voyager .step .nav-tabs>li.step-success{background-color:#99e9d9;border:1px solid #1abc9c}.voyager .step .nav-tabs>li.step-success a{color:#006551}.voyager .step .nav-tabs>li.step-disabled{background-color:#99e9d9}.voyager .step .nav-tabs>li.step-success.active:hover:after,.voyager .step .nav-tabs>li.step-success:after{border-left:15px solid #99e9d9}.voyager .step .nav-tabs>li.step-success:hover:after{border-left:15px solid #eaeaea}.voyager .step.card-no-padding .nav-tabs>li{border-bottom:0 solid transparent;border-right:0 solid transparent;border-color:transparent #e4e4e4 #e4e4e4 transparent;border-style:solid;border-width:0 1px 1px 0}.voyager .step.card-no-padding .nav-tabs>li:last-child{border-right:0 solid #e4e4e4}.voyager .step.tabs-left .nav-tabs>li{border:1px solid #e4e4e4}.voyager .step.tabs-left .nav-tabs>li:after{border-bottom:15px solid transparent;border-left:15px solid #fff;border-top:15px solid transparent}.voyager .step.tabs-left .nav-tabs>li:before{border-bottom:16px solid transparent;border-left:16px solid #e4e4e4;border-top:16px solid transparent}.voyager .step.tabs-left .nav-tabs>li.active{background-color:#eaeaea}.voyager .step.tabs-left .nav-tabs>li.active>a,.voyager .step.tabs-left .nav-tabs>li.active>a:focus,.voyager .step.tabs-left .nav-tabs>li.active>a:hover{background:transparent}.voyager .step.tabs-left .nav-tabs>li:hover{background-color:#eaeaea}.voyager .step.tabs-left .nav-tabs>li.active:after,.voyager .step.tabs-left .nav-tabs>li:hover:after{border-left:15px solid #eaeaea}.voyager .step.tabs-left.card-no-padding .nav-tabs>li{border:0 solid transparent}.voyager .pricing-table{box-shadow:0 1px 1px #ccc}.voyager .pricing-table .pt-header{background-color:#e4e4e4}.voyager .pricing-table .pt-header .plan-pricing .pricing{text-shadow:0 1px 1px #fff}.voyager .pricing-table .pt-body{background-color:#f9f9f9}.voyager .pricing-table .pt-body .plan-detail{border-top:1px dashed hsla(0,0%,100%,.6);margin-top:1em;padding-top:1em}.voyager .pricing-table .pt-footer{background-color:#f9f9f9}.voyager .pricing-table.dark-blue .pt-header{background-color:#353d47;color:#fff}.voyager .pricing-table.dark-blue .pt-body{background-color:#9eaabd;color:#363c46}.voyager .pricing-table.green .pt-header{background-color:#1abc9c;color:#fff}.voyager .pricing-table.green .pt-body{background-color:#99e9d9;color:#006551}.voyager .pricing-table.blue .pt-header{background-color:#22a7f0;color:#fff}.voyager .pricing-table.blue .pt-body{background-color:#91d5fb;color:#09486b}.voyager .pricing-table.yellow .pt-header{background-color:#fabe28;color:#fff}.voyager .pricing-table.yellow .pt-body{background-color:#ffe5a2;color:#85630f}.voyager .pricing-table.red .pt-header{background-color:#fa2a00;color:#fff}.voyager .pricing-table.red .pt-body{background-color:#ffb8aa;color:#7c1a06}.voyager.landing-page .navbar-inverse .navbar-toggle:focus,.voyager.landing-page .navbar-inverse .navbar-toggle:hover{background-color:transparent}.voyager.landing-page .navbar{background-color:transparent;box-shadow:none}.voyager.landing-page .navbar .navbar-nav>.active>a{background-color:transparent}.voyager.landing-page .navbar .navbar-nav>li{border-left:0 solid #f9f9f9}.voyager.landing-page .navbar .navbar-nav>li>a{color:#fff}.voyager.landing-page .navbar .navbar-collapse{border:0}.voyager.landing-page .navbar.affix .navbar-nav>li>a{color:#353d47}.voyager.landing-page .navbar.affix .navbar-nav>li:hover>a{color:#22a7f0}@media (max-width:768px){.voyager.landing-page .navbar .navbar-collapse{background-color:#333}.voyager.landing-page .navbar .navbar-right{background-color:transparent;color:#fff}.voyager.landing-page .navbar.affix .navbar-nav>li>a{color:#fff}}.voyager.landing-page .navbar.affix .navbar-brand{color:#353d47}.voyager.landing-page .navbar.affix .navbar-toggle .icon-bar{background-color:#353d47}.voyager.landing-page .app-header .app-btn{background-color:transparent;border:2px solid #fff}.voyager.landing-page .app-content-a{background-color:#eaeaea}.alert .close{background:#333;border-radius:2px;padding:13px;position:relative;right:-31px;top:-16px}.page-login-v2:before{background:url(../images/bg.jpg);background-position-x:-200px!important;background-repeat:no-repeat;background-size:cover}.page-login-v2 .page-brand-info .brand-img{width:100px}@media (max-width:767px){.page-login-v2 .page-login-main .brand{text-align:center}.page-login-v2 .page-login-main .brand-text{color:#777;font-weight:lighter;margin-left:0}.page-login-v2 .page-login-main .brand-img{width:100px}}.page-login-v2 .page-login-main{padding:250px 60px 180px}#login-container{background:#fff;height:100%;position:absolute;right:0;top:0;width:420px}.login-box,.register-box{margin-left:30px;margin-right:30px;margin-top:-250px;position:absolute;top:50%}.login-box img{animation:spinnerRotate .9s ease-out both;display:block;height:50px;margin:0 auto;width:50px}.main-header .logo .logo-mini img{height:25px;width:25px}.main-header .logo .logo-lg img{height:25px;margin-right:5px;position:relative;top:-1px;width:25px}.main-footer{background:#f1f5fa;border-top:1px solid #f9f9f9;font-size:11px}.login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#ddd}.form-control{border-radius:3px}.form-control.json{border:2px solid #ddd;border-radius:1px}.content-header a.btn{margin-left:10px}.content-header i{margin-right:3px}.app-container .side-body{margin-left:50px;margin-right:12px}.navbar .navbar-nav>li>a{font-family:Open Sans,sans-serif;text-transform:capitalize}.app-container .content-container .side-body.padding-top{padding-top:62px}.breadcrumb{float:left;margin-bottom:0;margin-top:11px}.content-header>.breadcrumb{border:1px solid #f1f1f1;display:block;left:0;margin:10px auto;position:relative;top:0;width:100%}.breadcrumb>.active{color:#58595f;line-height:24px}.callout{font-size:14px}.content-wrapper{background:#fff}table.dataTable{margin-top:0!important}table .btn-group-sm>a.btn,table a.btn-sm{text-decoration:none}.btn-group-sm>.btn i,.btn-sm i{font-size:12px;position:relative;top:1px}#dashboard_bg{background:url(../images/dashboard-bg.jpg);background-position-y:bottom;background-size:cover;color:#fff;height:100px;left:0;line-height:100px;position:absolute;top:0;width:100%}#dashboard_bg p{left:20px;position:relative}#dashboard_top_padding{display:block;height:70px;width:100%}.delete,.edit,.restore{cursor:pointer;margin-left:5px}.user-panel .text-info{color:#3b3e44}.spinnerRotate{animation:spinnerRotate .9s ease-out both}@keyframes spinnerRotate{0%{opacity:0;transform:scale(.7) rotate(0deg)}to{opacity:1;transform:scale(1) rotate(270deg)}}.mce-window.mce-in{border-radius:2px}p#the_plugin_name{display:none!important}.app-container .content-container .side-menu .navbar-nav li a .icon{font-size:18px;margin-top:2px}.voyager .side-menu.sidebar-inverse .navbar li.active>a .icon{margin-left:0}.app-container .content-container .side-menu .navbar-header .navbar-brand .icon{font-size:26px;position:relative;top:3px}.app-container .content-container .side-menu .navbar-header .navbar-brand .logo-icon-container{display:inline-block;height:60px;text-align:center;width:60px}.app-container .content-container .side-menu .navbar-header .navbar-brand img{display:inline-block;max-height:50%;max-width:50%;position:relative;top:-1px}.page-content.read .panel .panel-body:not(:last-child){border-bottom:1px solid #eee}.page-content.browse .form-search{position:relative;z-index:1}.page-content>.row>[class*=col-]:not(:first-child){padding-left:8px}.page-content>.row>[class*=col-]:not(:last-child){padding-right:8px}.app-container.expanded .content-container .side-menu .navbar-header .navbar-brand .title{font-weight:400;left:4px;position:relative;text-transform:uppercase;top:0}.page-content.dashboard{margin-top:360px}.page-content .settings{padding-right:20px}.page-content.col-md-12{padding-right:0}.page-content .form-edit-add ul.permissions,.page-content .form-edit-add ul.permissions li{list-style-type:none}.app-container .content-container .side-menu .navbar-header .navbar-brand .title{left:4px;position:relative;text-transform:uppercase;top:0}.app-container .content-container .side-menu .navbar-nav li a .title{position:relative;top:-4px}.voyager .side-menu.sidebar-inverse .navbar li.active>a{background:none;border-left:0;color:#fff}.voyager .side-menu.sidebar-inverse .navbar li>a{color:#76838f}.voyager .side-menu.sidebar-inverse .navbar{background:none;font-weight:400}.voyager .side-menu.sidebar-inverse{background:#353d47;background:linear-gradient(45deg,#353d47,#21292e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#353d47\",endColorstr=\"#21292e\",GradientType=1);overflow-x:hidden;transition:width .5s cubic-bezier(.19,1,.22,1)}.app-container .content-container .navbar-top,.app-container .side-body,.app-container.expanded .content-container .navbar-top{transition:all .5s cubic-bezier(.19,1,.22,1)}.app-container.expanded.no-animation,.app-container.expanded.no-animation .content-container{transition:none}.voyager .side-menu.sidebar-inverse .navbar li>a:hover{background:#2a363b;color:#fff}.hamburger{cursor:pointer;float:left;height:30px;margin-right:0;opacity:1;padding:28px 30px 28px 20px;position:relative;width:30px}.hamburger,.hamburger:hover{transition:all .5s cubic-bezier(.19,1,.22,1)}.hamburger:hover{opacity:.7}.hamburger-inner{background:#76838f;border-radius:10px;display:block;height:2px;left:50%;margin-left:-10px;margin-top:-1px;position:absolute;top:50%;transition:all .3s cubic-bezier(.19,1,.22,1);width:15px}.hamburger-inner:after{bottom:-5px;width:10px}.hamburger-inner:after,.hamburger-inner:before{background:#76838f;border-radius:10px;content:\"\";display:block;height:2px;position:absolute;transition:all .5s cubic-bezier(.19,1,.22,1)}.hamburger-inner:before{top:-5px;width:20px}.hamburger.is-active .hamburger-inner{width:20px}.hamburger.is-active .hamburger-inner:before{transform:translate3d(-5px,1px,0) rotate(-45deg) scaleX(.5);width:20px}.hamburger.is-active .hamburger-inner:after{transform:translate3d(-5px,-1px,0) rotate(45deg) scaleX(.5);width:20px}.hamburger.is-active.no-animation .hamburger-inner,.hamburger.is-active.no-animation .hamburger-inner:after,.hamburger.is-active.no-animation .hamburger-inner:before{transition:none;width:20px}#sidebar-anchor{color:#ccc!important;cursor:pointer;float:left;font-size:20px;margin-right:10px;padding:20px 10px 9px;position:absolute;text-shadow:2px 2px #fff;top:-50px}#sidebar-anchor.active{text-decoration:underline}#sidebar-anchor.active,#sidebar-anchor:hover{color:#76838f!important}.expanded #sidebar-anchor{left:-10px;position:relative;text-decoration:none;top:0;transition:top .3s ease,color .2s}#voyager-loader{background:#f9f9f9;height:100%;left:0;position:fixed;top:0;width:100%;z-index:99}#voyager-loader img{animation:spin 1s linear infinite;height:100px;left:50%;margin-left:-50px;margin-right:-50px;position:absolute;top:50%;width:100px}.voyager .navbar .navbar-nav .dropdown-menu,.voyager .navbar.navbar-default .navbar-nav .dropdown-menu{background-color:#fff}.navbar .dropdown-menu.dropdown-menu-animated{background-clip:padding-box;background-color:#fff;border:0;border-radius:4px;box-shadow:0 0 4px 0 rgba(0,0,0,.25);display:block;margin-right:5px;margin-top:5px;opacity:0;padding:1.5rem 1.75rem;transform:scale3d(.95,.95,1) translate3d(0,-15px,0);transform-origin:100% 0;transition:opacity .5s,transform .5s,visibility 0s .5s;transition-timing-function:cubic-bezier(.7,0,.3,1);visibility:hidden;width:250px;z-index:98}.navbar .dropdown.profile .dropdown-menu{display:none;padding:18px;position:relative!important;visibility:hidden;width:250px}.navbar .dropdown.profile .dropdown-menu h5,.navbar .dropdown.profile .dropdown-menu h6{float:left}.navbar .dropdown.profile .dropdown-menu h6{font-weight:200;margin-top:0;overflow:hidden;text-overflow:ellipsis;width:115px}.profile .dropdown-toggle img{border-radius:50%;height:30px;width:30px}.navbar .dropdown.profile .dropdown-menu h5{float:left;margin-bottom:5px;margin-top:12px}.dropdown-menu>li>a{clear:both;color:#777;display:block;font-weight:400;line-height:1.42857143;padding:10px 5px;text-align:left;transition:color .3s ease;white-space:nowrap}.dropdown-menu>li>a i{position:relative;top:2px}.dropdown-menu .divider{background-color:#f1f1f1;margin-top:20px}.dropdown-menu>li:last-child>a{margin-bottom:10px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background:none;color:#333;transition:color .3s ease}.navbar .dropdown.profile .dropdown-menu .profile-body{padding-left:10px}.navbar .open .dropdown-menu.dropdown-menu-animated{opacity:1;transform:scaleX(1) translateZ(0);transition:opacity .5s,transform .5s;transition-timing-function:cubic-bezier(.2,1,.3,1);visibility:visible}.navbar .dropdown.profile .dropdown-menu li.profile-img img.profile-img{border-radius:50%;float:left;height:60px;margin-right:10px;width:60px}.page-title .btn.btn-success{left:15px;position:relative;top:-1px}.breadcrumb{background-color:#fff;border:1px solid #f9f9f9;border-radius:25px;font-size:12px;list-style:none;padding:4px 15px 4px 10px;position:relative;top:2px}.breadcrumb a{color:#22a7f0;font-family:Open Sans;font-weight:400}.breadcrumb i{position:relative;top:2px}.breadcrumb>.active,.breadcrumb>li{font-weight:400}.site-footer-right{padding-right:20px}.form-control{background-color:#fff;background-image:none;border:1px solid #e4eaec;color:#76838f}.form-control.focus,.form-control:focus{border-color:#62a8ea;box-shadow:none}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{font-size:12px;height:32px;line-height:1.5;padding:6px 13px}.voyager .panel.panel-warning .panel-heading{background-color:#f2a654;border-bottom:0}.voyager .panel.panel-primary .panel-heading{background-color:#62a8ea;border-bottom:0}.voyager .panel.panel-info .panel-heading,.voyager .panel.panel-primary .panel-info{background-color:#57c7d4;border-bottom:0}.panel-title{display:block;font-size:18px;padding:20px 30px 20px 15px;text-align:left}.panel-footer{background:#fdfdfd;background:linear-gradient(180deg,#fcfcfc 0,#fff);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#fcfcfc\",endColorstr=\"#ffffff\",GradientType=0)}.voyager .panel.panel-info,.voyager .panel.panel-primary,.voyager .panel.panel-warning{border:0}.voyager .pagination .active span,.voyager .pagination .active>a,.voyager .pagination .active>a:focus,.voyager .pagination .active>a:hover,.voyager .pagination .active>span:focus,.voyager .pagination .active>span:hover{background-color:#62a8ea;border-color:#62a8ea;color:#fff;cursor:default;outline:none;z-index:3}.pagination li>a:focus,.pagination li>a:hover,.pagination li>span:focus,.pagination li>span:hover{outline:none}.panel-bordered>.panel-body{overflow:hidden;padding:30px 20px 20px}.voyager .panel{background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 2px 10px rgba(0,0,0,.05);margin-bottom:22px}.btn.btn-primary{background:#22a7f0;border:0;border-radius:3px;color:#fff;opacity:.9}.btn.btn-primary:hover{opacity:1}.btn.btn-primary.active{background:#0081ca}.voyager .btn.btn-circle{border-radius:50px}.voyager .btn-group-sm>.btn,.voyager .btn.btn-sm{opacity:.9}.voyager .btn-group-sm>.btn:hover,.voyager .btn.btn-sm:hover{opacity:1}.voyager .btn-group-sm>.btn,.voyager .btn.btn-sm,.voyager .btn.btn-sm:hover{border-color:hsla(0,0%,100%,0);border-width:1px;color:#fff}.voyager .btn-group-sm>.btn.btn-default,.voyager .btn.btn-default.btn-sm,.voyager .btn.btn-default.btn-sm:hover{color:inherit}.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover{opacity:1}.widgets{display:flex;flex-direction:row;padding:0}.panel.widget{border:0;border-radius:3px;flex:1;margin:10px;padding:30px}.panel.widget.center{text-align:center}.panel.widget .avatar{border:0;border-radius:50%;height:auto;width:100px}.panel.widget i{background:rgba(0,0,0,.3);border-radius:50%;color:#eee;display:block;font-size:48px;height:100px;line-height:110px;margin:0 auto;width:100px}.panel.widget h4{color:#fff;font-size:20px;font-weight:300;margin-top:20px}.panel.widget p{color:#ddd;display:block;font-size:20px;font-size:14px;line-height:1.57142857;margin:30px 0 0;max-height:65px}.panel.widget .readm-link{text-decoration:underline}.panel.widget .btn-primary,.panel.widget .readm-link{color:#fff;margin-top:20px}.btn{-webkit-font-smoothing:subpixel-antialiased;border-radius:3px;font-size:14px;line-height:1.57142857;padding:6px 15px;transition:border .2s linear,color .2s linear,width .2s linear,background-color .2s linear}.panel.widget.bgimage{background-position:50%;background-size:cover;position:relative}.panel.widget .panel-content{position:relative;z-index:9}.panel.widget .dimmer{background:rgba(45,53,61,.5);background:linear-gradient(135deg,rgba(45,53,61,.79),rgba(45,53,61,.5));border-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#c92d353d\",endColorstr=\"#802d353d\",GradientType=1);height:100%;left:0;opacity:1;position:absolute;top:0;transition:all .3s ease;width:100%}.side-menu .panel.widget .dimmer{border-radius:0}.expanded .side-menu .panel.widget .dimmer,.side-menu:hover .panel.widget .dimmer{background:linear-gradient(275deg,#242c32,rgba(36,44,50,.95) 34%,rgba(36,44,50,.7));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#242c32\",endColorstr=\"#00242c32\",GradientType=1)}.side-menu .navbar-header,.voyager .side-menu .navbar-header{float:none;margin-bottom:0}.side-menu .panel.widget{border-radius:0;margin:0;padding:12px 0}.side-menu-container .side-menu .panel.widget .dimmer{border-radius:0}.app-container .side-menu .panel.widget a,.app-container .side-menu .panel.widget h4,.app-container .side-menu .panel.widget p{display:none}.app-container .side-menu .panel.widget p{font-size:12px;margin-top:0}.app-container .side-menu .panel.widget .avatar{border:0;float:left;height:36px;margin-left:12px;position:relative;top:3px;width:36px}.app-container .side-menu .panel.widget h4{display:block;float:left;height:26px;left:60px;left:56px;margin-top:17px;opacity:0;overflow:hidden;position:absolute;text-align:left;top:-7px;transition:opacity .3s ease;width:190px}.app-container .side-menu:hover .panel.widget h4,.app-container.expanded .panel.widget h4{opacity:1}.app-container .side-menu:hover .panel.widget .avatar{float:left;margin-left:12px;transition:none}.app-container.expanded .fadetoblack{background:rgba(0,0,0,.6);bottom:0;left:0;position:absolute;right:0;top:0;z-index:800}.dd .item_actions{position:relative;right:10px;top:4px;z-index:9}.dd .item_actions .delete,.dd .item_actions .edit{cursor:pointer}.dd .item_actions .edit{margin-right:5px}.dd .dd-handle .url{font-weight:400;margin-left:10px}.toggle-group .btn,.toggle-group .btn.btn-default{margin-bottom:0;margin-top:0;padding-bottom:0;padding-top:5px}.toggle-group span.btn,.toggle-group span.btn-default{line-height:20px;margin-bottom:0;margin-top:0}.toggle.btn{height:30px!important;line-height:20px!important}.delete-row,.toggle.btn{margin-bottom:0;margin-top:0}.delete-row{padding-bottom:4px}.drag{text-align:center}.drag i{color:#a6b3bf;cursor:move;display:block;font-size:20px;margin-top:5px}.drag i:hover{color:#76838f}.newTableRow.ui-sortable-helper{background:#fff;border:1px solid #eaeaea;border-top:0;display:table;width:100%}.newTableRow{width:100%}.newTableRow,.newTableRow td{position:relative}.enum_val{display:none}.enum_val input{width:auto}#delete_builder_form{float:right;margin-left:10px}.btn-outline{background:none;border:1px solid #ddd}@media (min-width:800px){#table_info .modal-dialog{width:750px}}#table_info .modal-title{padding-left:36px}#table_info .modal-title i{font-size:25px;left:20px;position:absolute;top:13px}.database-tables .name{float:left;position:relative}.database-tables .browse_bread{margin-right:10px}.database-tables .name a{float:left}.database-tables tr .btn-default:hover{background:#fff}.database-tables tr .btn-danger:hover{background:#f96868}.database-tables tr .bread_actions{opacity:.6;transition:opacity .3s ease}.database-tables tr:hover .bread_actions{opacity:1;transition:opacity .3s ease}.database-tables .bread_actions .edit{display:inline-block;margin-left:0}.database-tables .bread_actions form .btn-default,.database-tables .btn-default{border:1px solid #eee}.voyager .side-menu.sidebar-inverse .navbar li.dropdown .panel-body{padding:0}.voyager .alert{border:0;border-left:5px solid;border-color:rgba(0,0,0,.1);border-radius:0;border-radius:3px;color:#fff;margin-bottom:30px;margin-right:0}.voyager .alert.alert-success{background-color:#55b559;border-color:rgba(0,0,0,.1);color:#fff}.voyager .alert.alert-danger{background-color:#f55145;border-color:rgba(0,0,0,.1);color:#fff}.voyager .alert.alert-warning{background-color:#ff9e0f;border-color:rgba(0,0,0,.1);color:#fff}.voyager .alert.alert-info{background-color:#22a7f0;border-color:rgba(0,0,0,.1);color:#fff}.voyager .panel-body .alert{margin-bottom:10px;margin-right:0;margin-top:10px}.voyager input[type=file]{background:#fff;border:1px solid #f1f1f1;border-radius:4px;color:#aaa;cursor:pointer;font-size:12px;font-weight:500;line-height:16px;outline:none;padding:20px;transition:all .3s ease-in-out}.voyager input[type=file]:active,.voyager input[type=file]:hover{background:#fcfcfc}ul.radio{height:100%;list-style:none;margin:0;padding:0;width:100%}ul.radio li{border-bottom:1px dotted #f1f1f1;color:#aaa;display:block;float:left;height:auto;position:relative;width:100%}ul.radio li input[type=radio]{position:absolute;visibility:hidden}ul.radio li label{cursor:pointer;display:block;font-size:14px;font-weight:400;height:25px;margin:9px auto 5px;padding-left:40px;position:relative;-webkit-transition:all .25s linear;z-index:9}ul.radio li:hover label{color:#535b65}ul.radio li .check{border:4px solid #aaa;border-radius:100%;display:block;height:20px;left:10px;position:absolute;top:10px;transition:border .25s linear;-webkit-transition:border .25s linear;width:20px;z-index:5}ul.radio li:hover .check{border:4px solid #22a7f0}ul.radio li .check:before{border-radius:100%;content:\"\";display:block;height:8px;left:2px;margin:auto;position:absolute;top:2px;transition:background .25s linear;-webkit-transition:background .25s linear;width:8px}input[type=radio]:checked~.check{border:4px solid #22a7f0}input[type=radio]:checked~.check:before{background:#22a7f0}input[type=radio]:checked~label{color:#535b65}ul.checkbox{padding-left:20px}ul.checkbox li{margin-bottom:20px}ul.checkbox li ul li{margin-bottom:0}ul.checkbox label{padding-left:0}.ace_editor.min_height_400{min-height:400px;width:100%}.ace_editor.min_height_200{min-height:200px;width:100%}.btn-success i.voyager-plus{position:relative;top:2px}.show-res{margin-left:5px;margin-top:15px}.alerts{padding:10px 25px 0;position:relative;top:10px}.alerts .alert{margin-right:0}.alerts .alert>p,.alerts .alert>ul{margin-top:0}.checkbox3 label:before,.radio3 label:before{overflow:hidden;text-align:center;vertical-align:middle}.checkbox3 label,.radio3 label{cursor:pointer;white-space:nowrap}.checkbox3{position:relative}.checkbox3 input{left:-9999px;position:absolute}.checkbox3 label:after,.checkbox3 label:before{bottom:10px;content:\"\";display:block;left:0;top:10px}.checkbox3 label{display:block;font-size:12px;margin-bottom:0;margin-top:-4px;padding:11px 0 11px 30px;position:relative}.checkbox3 label:before{border:1px solid #ccc;border-radius:1px;height:21px;position:absolute;transition:background-color .2s;width:21px}.checkbox3 label:after{border:12px solid #fff;height:19px;margin:1px;opacity:0;position:absolute;transition:all 50ms;width:19px}.checkbox3 input:checked+label:before{background-color:#444;border:1px solid #444;color:#fff}.checkbox3 input:checked+label:after{border:3px solid #fff;opacity:1}.checkbox3.checkbox-sm label{padding:8px 0 8px 22px}.checkbox3.checkbox-sm label:before{height:14px;line-height:14px;width:14px}.checkbox3.checkbox-sm label:after{height:12px;width:12px}.checkbox3.checkbox-lg label{padding:15px 0 15px 40px}.checkbox3.checkbox-lg label:before{height:27px;line-height:24px;width:28px}.checkbox3.checkbox-lg label:after{height:25px;width:26px}.checkbox3.checkbox-inline,.radio3.radio-inline{margin-left:0;margin-right:20px;padding-left:0;padding-right:0;padding-top:0}.checkbox3.checkbox-inline input[type=checkbox],.checkbox3.checkbox-inline input[type=radio],.radio3.radio-inline input[type=checkbox],.radio3.radio-inline input[type=radio]{position:absolute}.checkbox3.checkbox-check input:checked+label:after,.checkbox3.checkbox-check label:after{border:0}.checkbox3.checkbox-check label:after{border-width:0;color:#fff;content:\"l\";font-family:Voyager;font-size:12px;height:20px;line-height:20px;text-align:center;vertical-align:middle;width:19px}.checkbox3.checkbox-check.checkbox-sm label:after{font-size:9px;line-height:12px;width:12px}.checkbox3.checkbox-check.checkbox-lg label:after{font-size:16px;line-height:26px;width:26px}.checkbox3.checkbox-check.checkbox-light label:after{color:#444}.checkbox3.checkbox-circle label:after,.checkbox3.checkbox-circle label:before{border-radius:20px}.checkbox3.checkbox-round label:after,.checkbox3.checkbox-round label:before,.checkbox3.checkbox-s1 label:after,.checkbox3.checkbox-s1 label:before{border-radius:4px}.checkbox3.checkbox-light label:before{background-color:transparent}.checkbox3.checkbox-light input:checked+label:before{background-color:transparent;border-color:#444}.checkbox3.checkbox-info input:checked+label:before{background-color:#2caef5;border-color:#2caef5}.checkbox3.checkbox-primary input:checked+label:before{background-color:#4183d7;border-color:#4183d7}.checkbox3.checkbox-success input:checked+label:before{background-color:#36b846;border-color:#36b846}.checkbox3.checkbox-warning input:checked+label:before{background-color:#ff9c00;border-color:#ff9c00}.checkbox3.checkbox-danger input:checked+label:before{background-color:#e50011;border-color:#e50011}.checkbox3.checkbox-primary.checkbox-light input:checked+label:before{background-color:transparent;border-color:#4183d7}.checkbox3.checkbox-primary.checkbox-light input:checked+label:after{color:#4183d7}.checkbox3.checkbox-info.checkbox-light input:checked+label:before{background-color:transparent;border-color:#2caef5}.checkbox3.checkbox-info.checkbox-light input:checked+label:after{color:#2caef5}.checkbox3.checkbox-success.checkbox-light input:checked+label:before{background-color:transparent;border-color:#36b846}.checkbox3.checkbox-success.checkbox-light input:checked+label:after{color:#36b846}.checkbox3.checkbox-warning.checkbox-light input:checked+label:before{background-color:transparent;border-color:#ff9c00}.checkbox3.checkbox-warning.checkbox-light input:checked+label:after{color:#ff9c00}.checkbox3.checkbox-danger.checkbox-light input:checked+label:before{background-color:transparent;border-color:#e50011}.checkbox3.checkbox-danger.checkbox-light input:checked+label:after{color:#e50011}.radio3{position:relative}.radio3 input{left:-9999px;position:absolute}.radio3 label{display:block;font-size:12px;margin-bottom:0;margin-top:-4px;padding:11px 0 11px 30px;position:relative}.radio3 label:after,.radio3 label:before{bottom:10px;content:\"\";display:block;left:0;position:absolute;top:10px}.radio3 label:before{border:1px solid #ccc;height:21px;transition:background-color .2s;width:21px}.radio3 label:after{border:12px solid #fff;height:19px;margin:1px;opacity:0;transition:all 50ms;width:19px}.radio3 input:checked+label:before{background-color:#444;border:1px solid #444;color:#fff;font-family:Voyager}.radio3 input:checked+label:after{border:3px solid #fff;opacity:1}.radio3.radio-check label:after,.radio3.radio-check.radio-light label:after{border-width:0;color:#fff;content:\"l\";font-family:Voyager;height:20px;line-height:20px;text-align:center;vertical-align:middle;width:19px}.radio3 label:after,.radio3 label:before{border-radius:20px}.radio3.radio-check input:checked+label:after{border-width:0}.radio3.radio-check.radio-light input:checked+label:before{background-color:transparent}.radio3.radio-check.radio-light input:checked+label:after{border-width:0;color:#444}.radio3.radio-sm label{padding:8px 0 8px 22px}.radio3.radio-sm label:before{height:14px;line-height:14px;width:14px}.radio3.radio-sm label:after{height:12px;width:12px}.radio3.radio-lg label{padding:15px 0 15px 40px}.radio3.radio-lg label:before{height:27px;line-height:24px;width:28px}.radio3.radio-lg label:after{height:25px;width:26px}.radio3.radio-check.radio-sm label:after{font-size:9px;line-height:12px;width:12px}.radio3.radio-check.radio-lg label:after{font-size:16px;line-height:26px;width:26px}.radio3.radio-primary input:checked+label:before{background-color:#4183d7;border-color:#4183d7}.radio3.radio-info input:checked+label:before{background-color:#2caef5;border-color:#2caef5}.radio3.radio-success input:checked+label:before{background-color:#36b846;border-color:#36b846}.radio3.radio-warning input:checked+label:before{background-color:#ff9c00;border-color:#ff9c00}.radio3.radio-danger input:checked+label:before{background-color:#e50011;border-color:#e50011}.radio3.radio-primary.radio-light input:checked+label:before{background-color:transparent}.radio3.radio-primary.radio-light input:checked+label:after{color:#4183d7}.radio3.radio-info.radio-light input:checked+label:before{background-color:transparent}.radio3.radio-info.radio-light input:checked+label:after{color:#2caef5}.radio3.radio-success.radio-light input:checked+label:before{background-color:transparent}.radio3.radio-success.radio-light input:checked+label:after{color:#36b846}.radio3.radio-warning.radio-light input:checked+label:before{background-color:transparent}.radio3.radio-warning.radio-light input:checked+label:after{color:#ff9c00}.radio3.radio-danger.radio-light input:checked+label:before{background-color:transparent}.radio3.radio-danger.radio-light input:checked+label:after{color:#e50011}.gapi-analytics-data-chart .gapi-analytics-data-chart-styles-table-tr-odd{background:#f8f7f5!important}.gapi-analytics-data-chart .gapi-analytics-data-chart-styles-table-tr-over{background:#f0eeeb!important}.AccountExplorerResults{padding-top:1.5em}.AccountExplorerResults-title{font-size:1.4em;font-weight:300;margin:0 0 2em;text-align:center}.AccountExplorerResults table{table-layout:fixed;width:100%}.AccountExplorerResults td,.AccountExplorerResults th{padding:.75em 1em;text-align:left;vertical-align:top}.AccountExplorerResults td{border-top:1px solid #e8e8e8;word-break:break-word}.AccountExplorerResults-id{color:#777;font-size:.9em;margin-top:.5em}.FormField{width:100%}input.FormField,select.FormField,textarea.FormField{background:#fff;border:1px solid #d4d2d0;border-radius:4px;box-sizing:border-box;font:inherit;font-weight:400;height:2.42857em;line-height:1.42857em;padding:.42857em;transition:border-color .2s cubic-bezier(.4,0,.2,1)}textarea.FormField{display:block;height:auto;resize:vertical}input.FormField:focus,select.FormField:focus,textarea.FormField:focus{border-color:#3b99fc;outline:0}.FormField--invalid{border-color:#c33!important}.AccountExplorerSearch{padding:1.5em}.AccountExplorerSearch-title{font-size:1.4em;font-weight:300;margin:0 0 2em;text-align:center}input.AccountExplorerSearch-field{display:block;height:auto;margin:0 auto 3em;max-width:32em;padding:.75em 1em}.Site{background:#f4f2f1;min-height:100%;min-width:260px}.Site-sidebar{background:#444;bottom:0;box-shadow:0 0 1.5em transparent;left:-260px;max-width:100%;min-width:260px;overflow-y:auto;position:fixed;top:0;transform:translateZ(0);transition:transform .3s cubic-bezier(.4,0,.2,1);width:260px;z-index:1}.Site.is-expanded{overflow:hidden}.Site.is-expanded .Site-sidebar{box-shadow:0 0 1.5em rgba(0,0,0,.5);transform:translate3d(260px,0,0)}@media (min-width:570px){.Site-sidebar{left:-280px;min-width:280px;width:280px}.Site.is-expanded .Site-sidebar{transform:translate3d(280px,0,0)}}@media (min-width:1024px){.Site{display:flex}.Site-sidebar{background:#444;border-top:.4em solid #222;box-shadow:none;overflow:visible;position:static;transition:none;z-index:0}.Site.is-expanded .Site-sidebar{transform:none}.Site-main{border-top:.4em solid #f7991c;box-shadow:0 0 1em rgba(0,0,0,.3);flex:1;position:relative}}.ActiveUsers{background:#f4f2f1;border:1px solid #d4d2d0;border-radius:4px;font-weight:300;padding:.5em 1.5em;white-space:nowrap}.ActiveUsers-value{display:inline-block;font-weight:600;margin-right:-.25em}.ActiveUsers.is-increasing{animation:increase 3s}.ActiveUsers.is-decreasing{animation:decrease 3s}@keyframes increase{10%{background-color:#ebffeb;border-color:rgba(0,128,0,.5);color:green}}@keyframes decrease{10%{background-color:#ffebeb;border-color:rgba(255,0,0,.5);color:red}}.Alert{align-items:flex-start;background:#c33;box-shadow:0 0 10px rgba(0,0,0,.4);color:#fff;display:flex;padding:1.5em;position:relative;transform:translateZ(0);transition:transform .2s cubic-bezier(.4,0,.2,1)}.Alert-enter{transform:translate3d(0,-100%,0)}.Alert-enter-active,.Alert-leave{transform:translateZ(0)}.Alert-leave-active{transform:translate3d(0,-100%,0)}.Alert-icon{font-size:3em}.Alert-close{background:none;border:0;font-size:1.5em;opacity:.4;padding:.5em}.Alert-close:active,.Alert-close:focus,.Alert-close:hover{opacity:1;outline:0}.Alert-body{flex:1 0 0%;margin:0 1.5em}.Alert-title{color:inherit;font-size:1.5em;font-weight:400;line-height:1.1;margin:0}.Alert-message{font-weight:300;margin-top:.4em;opacity:.7}@media (min-width:1024px){.Alert{padding:2em}}.AlertDispatcher{left:0;position:fixed;right:0;top:0}.Box{background:#fff;border:1px solid #d4d2d0;border-radius:4px;margin-bottom:1.5em;padding:1.5em}.Box-header{border-bottom:1px solid #d4d2d0;margin:-1.5em -1.5em 1.5em;padding:1.5em}.Box-footer{border-top:1px solid #d4d2d0;margin:1.5em -1.5em -1.5em;padding:1.5em}@media (min-width:1024px){.Box{margin-bottom:2em;padding:2em}.Box-header{margin:-2em -2em 2em;padding:2em}.Box-footer{margin:2em -2em -2em;padding:2em}}.Button{background:rgba(0,0,0,.075);border:1px solid transparent;border-radius:4px;box-sizing:border-box;color:inherit;cursor:pointer;display:inline-block;font:inherit;font-weight:400;line-height:1.42857em;padding:.42857em 1em;transition:background-color .2s cubic-bezier(.4,0,.2,1),border-color .2s cubic-bezier(.4,0,.2,1)}.Button:disabled{opacity:.4}.Button:active:enabled,.Button:focus:enabled,.Button:hover:enabled{background:rgba(0,0,0,.15);outline:none;text-decoration:none}.Button-iconWrapper{align-items:center;display:inline-flex}.Button-icon{margin-right:.6em}.Button--action{background:#4b8df7;border-color:transparent;color:#fff}.Button--action:active:enabled,.Button--action:focus:enabled,.Button--action:hover:enabled{background:#1a6ef4}.Button--success{background:#29a347;border-color:transparent;color:#fff}.Button--success:active:enabled,.Button--success:focus:enabled,.Button--success:hover:enabled{background:#22873b}.ButtonSet{margin:0 -1em -1em}.ButtonSet .Button{margin:0 0 1em 1em}.Chartjs{font-size:.85em}.Chartjs-figure{height:250px}.Chartjs-legend{list-style:none;margin:0;padding:1em 0 0;text-align:center}.Chartjs-legend>li{display:inline-block;padding:.25em .5em}.Chartjs-legend>li>i{display:inline-block;height:1em;margin-right:.5em;vertical-align:-.1em;width:1em}@media (min-width:570px){.Chartjs-figure{margin-right:1.5em}}.Checkbox{display:inline-block;margin-right:.5em}.Content{margin:1.5em;max-width:1060px;transition:opacity .5s cubic-bezier(.4,0,.2,1)}.Site.is-loading .Content,.Site.is-needingAuthorization .Content{opacity:.333;pointer-events:none}@media (min-width:1024px){.Content{margin:3em}}.Dashboard{background:#fff;border:0 solid #d4d2d0;border-radius:3px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.analytics-container{padding:15px 25px 25px}#analytics-dashboard{display:none}.Dashboard-header{border-bottom:0 solid #d4d2d0;border-top-left-radius:3px;border-top-right-radius:3px}.Dashboard-footer,.Dashboard-header{margin:-1.5em -1.5em 1.5em;padding:1.5em}.Dashboard-footer{border-top:1px solid #d4d2d0}.Dashboard--full{max-width:100%}.Dashboard--collapseBottom{padding-bottom:0}@media (min-width:1024px){.Dashboard,.Dashboard-header{padding:2em}.Dashboard-footer,.Dashboard-header{margin:-2em -2em 2em}.Dashboard-footer{padding:1.5em}.Dashboard--collapseBottom{padding-bottom:.5em}}.DataTable .gapi-analytics-data-chart{overflow-x:auto}.DataTable .gapi-analytics-data-chart .gapi-analytics-data-chart-styles-table-tr-head{background:#f7f7f6}.DataTable .gapi-analytics-data-chart .gapi-analytics-data-chart-styles-table-th{border-bottom:1px solid #ddd;border-top:1px solid #ddd;white-space:nowrap}.DataTable .gapi-analytics-data-chart .gapi-analytics-data-chart-styles-table-th:first-child{border-left:1px solid #ddd}.DataTable .gapi-analytics-data-chart .gapi-analytics-data-chart-styles-table-th:last-child{border-right:1px solid #ddd}.DateRangeSelector{display:flex;flex-wrap:wrap;margin:0 0 -1em -1em}.DateRangeSelector-item{flex:1 0 calc(100% - 1em);margin:0 0 1em 1em}.DateRangeSelector-item>label{display:block;font-weight:700;margin:0 .25em .25em 0}.DateRangeSelector-item>input{width:100%}@media (min-width:570px){.DateRangeSelector-item{flex-basis:auto;min-width:150px}}.Error{background:#fff5f5;border:1px solid rgba(221,60,60,.5);border-radius:4px;color:rgba(0,0,0,.5);margin:2em 0;padding:1em 1.5em}.Error-title{color:#dd3c3c;display:inline-block;font-size:1.1em;line-height:1.5;margin:0 .5em 0 0}.Error-message{display:inline-block;margin:0}.FlexGrid{display:flex;flex-wrap:wrap;list-style:none;margin:0 0 -1.5em -1.5em;padding:0}.FlexGrid-item{flex:1 0 calc(100% - 1.5em);margin:0 0 1.5em 1.5em}.FlexGrid-item--fixed{flex:0 0 auto!important}.FlexGrid--halves .FlexGrid-item{flex-basis:34%}@media (min-width:570px){.FlexGrid-item{flex-basis:200px}}@media (min-width:1024px){.FlexGrid{margin:0 0 -2em -2em}.FlexGrid-item{margin:0 0 2em 2em}}.FlexLine{display:inline-flex;width:100%}.FlexLine>[data-flex]{flex:1 0 0%}.FormControl{display:block;margin:0 0 1.25em;max-width:40em}@media (min-width:1024px){.FormControl--inline{align-items:baseline;display:flex}}.FormControl--full{max-width:none}.FormControl-label{display:block;font-weight:600;margin:0 0 .25em}.FormControl--required .FormControl-label:after,.FormControl--required .FormControl-label:before{color:#dd3c3c;display:inline-block;font-weight:600}.FormControl--required .FormControl-label:after{content:\"*\";margin-left:.5em}@media (min-width:1024px){.FormControl--inline .FormControl-label{flex:0 0 auto;padding-right:1.25em;text-align:right;width:11em}.FormControl--required .FormControl-label:after{content:none}.FormControl--required .FormControl-label:before{content:\"*\";margin-right:.5em}}.FormControl-body{flex:1 0 0%}.FormControl-info{color:#777;display:block;font-size:.85em;line-height:1.2;margin-top:.5em}.FormControl-helpIcon{align-items:center;color:#aaa;display:flex;font-size:1.15em;justify-content:center;padding:0 .5em}.FormControl-helpIcon:active,.FormControl-helpIcon:focus,.FormControl-helpIcon:hover{color:inherit;outline:0}.FormControl--action{margin:0 0 1.5em}@media (min-width:1024px){.FormControl--action{margin:0 0 2em}.FormControl--action .FormControl-body{margin-left:11em}}.FormFieldAddOn{display:inline-flex;width:100%}.FormFieldAddOn-field{flex:1 0 0%}.FormFieldAddOn-item{align-items:center;background:transparent;border:1px solid #d4d2d0;display:flex;font:inherit;font-weight:400;padding:0 .6em}.FormFieldAddOn-item:focus{outline:0}.FormFieldAddOn-field:first-child,.FormFieldAddOn-item:first-child{border-radius:4px 0 0 4px}.FormFieldAddOn-field:last-child,.FormFieldAddOn-item:last-child{border-radius:0 4px 4px 0}.FormFieldAddOn-item:first-child{border-right:0}.FormFieldAddOn-item:last-child{border-left:0}.ProgressBar{background:#cce1ff;overflow:hidden;position:relative}.ProgressBar:after,.ProgressBar:before{background:linear-gradient(90deg,#cce1ff,#38f 10%,#38f);content:\"\";height:100%;position:absolute;transform:translateX(-100%);width:60%}.ProgressBar:before{animation:ProgressBar-leader 2s ease-in-out infinite}.ProgressBar:after{animation:ProgressBar-follower 2s ease-in-out 1s infinite}@keyframes ProgressBar-leader{0%{transform:translateX(-100%)}to{transform:translateX(250%)}}@keyframes ProgressBar-follower{0%{transform:translateX(-100%)}60%,to{transform:translateX(250%)}}.Header,.Header-block{position:relative}.Header-block{background:#333;box-shadow:0 0 .5em rgba(0,0,0,.1);padding:1em 1.5em}.Header-menu{cursor:pointer;position:absolute;top:50%;transform:translateY(-50%)}.Header-menu,.Header-menuIcon{display:flex}.Header-menuIcon{border-radius:.333em;color:#bbb;font-size:1.3125em;margin:-.333em -.5em;padding:.333em .5em}.Header-menuIcon:hover{background:#000;background:rgba(0,0,0,.3);color:#fff}.Header-user{display:none}.Header-auth{text-align:center}.Header-auth .gapi-analytics-auth-styles-signinbutton{background:#f7981d;border-radius:0;cursor:pointer;display:block;padding:1em 1.5em;transition:background-color .2s cubic-bezier(.4,0,.2,1);width:auto}.Header-auth .gapi-analytics-auth-styles-signinbutton:hover{background:#f05a24;cursor:pointer}.Header-auth .gapi-analytics-auth-styles-signinbutton-buttonText,.Header-auth .gapi-analytics-auth-styles-signinbutton-image{display:inline-block;vertical-align:middle}.Header-auth .gapi-analytics-auth-styles-signinbutton-image{background:url(/public/images/ga-mark-white.svg) no-repeat 0 50%;background-size:1.5em;border:0;height:1.5em;padding-left:2.5em;width:auto}.Header-auth .gapi-analytics-auth-styles-signinbutton-image:after{content:\"Click here to authorize  â†’\"}.Header-auth .gapi-analytics-auth-styles-signinbutton-buttonText,.Header-signOut{display:none}.Header-progressIndicator{bottom:-3px;height:3px;left:0;position:absolute;right:0;transform:scaleY(0);transform-origin:0 0;transition:all .5s cubic-bezier(.4,0,.2,1);visibility:hidden}.Site.is-loading .Header-progressIndicator{animation:Header-showProgressIndicator .5s cubic-bezier(.4,0,.2,1);transform:scaleY(1);visibility:visible}.Site.is-needingAuthorization .Header-progressIndicator{transform:scaleY(0);transition:none;visibility:hidden}@keyframes Header-showProgressIndicator{0%{transform:scaleY(0)}}.Site.is-authorized .Header-user{cursor:pointer;position:absolute;right:1.5em;top:50%;transform:translateY(-50%)}.Site.is-authorized .Header-user,.Site.is-authorized .Header-userIcon{display:flex}.Site.is-authorized .Header-userIcon{border-radius:.333em;color:#bbb;font-size:1.3125em;margin:-.333em -.5em;padding:.333em .5em}.Site.is-authorized .Header-userIcon:hover{background:#000;background:rgba(0,0,0,.3);color:#fff}.Site.is-authorized .Header-auth{display:none}.Header.is-open .Header-auth{background:#fff;box-shadow:0 0 .5em rgba(0,0,0,.1);color:#777;display:block;padding:1em 1.5em;text-align:center}.Header.is-open .Header-embedApi,.Header.is-open .Header-signOut{display:inline-block;padding:0 .5em}.Header.is-open .Header-userIcon{background:#000;background:rgba(0,0,0,.3);color:#fff}.Header.is-open .Header-user:before{border-color:transparent transparent currentColor;border-width:0 .333em .333em}@media (min-width:1024px){.Header-block{background:#fff;padding:2em 3em 3em}.Header-menu{display:none}.Site.is-authorized .Header-user{right:2em;top:2em;transform:none}.Site.is-authorized .Header-userIcon{color:#999;margin:0}.Header.is-open .Header-userIcon,.Site.is-authorized .Header-userIcon:hover{background:#000;background:rgba(0,0,0,.1);color:#333}.Header.is-open .Header-auth{background:#fff;border-radius:.5em;box-shadow:0 0 0 1px rgba(0,0,0,.1);line-height:2.4em;padding:0 .5em;position:absolute;right:6em;text-align:right;top:2em}.Header.is-open .Header-auth *{vertical-align:baseline}.Header-auth .gapi-analytics-auth-styles-signinbutton{font-size:1em;padding:1.5em 3em;text-align:left}}.HitBuilderParam{align-items:baseline;display:inline-flex;margin:0 0 1.25em;max-width:36em;width:100%}.HitBuilderParam-label{flex:0 0 7em;font-weight:600;margin-right:1.25em;position:relative;text-align:right}.HitBuilderParam--required .HitBuilderParam-label:before{color:#dd3c3c;content:\"*\";display:inline-block;font-weight:600;margin-right:.5em}.HitBuilderParam-inputLabel{text-align:right;width:4em}.HitBuilderParam-removeIcon{color:#c33;cursor:pointer;padding:.667em;position:absolute;right:4em;top:0}.HitBuilderParam-body{flex:1 0 0%;padding-right:2.5em;position:relative}.HitBuilderParam-info{color:#c33;display:block;font-size:.85em;line-height:1.2;margin-top:.5em}.HitBuilderParam-helpIcon{color:#ccc;cursor:pointer;padding:.667em;position:absolute;right:0;top:0}.HitBuilderParam-helpIcon:active,.HitBuilderParam-helpIcon:focus,.HitBuilderParam-helpIcon:hover{color:inherit;outline:0}.HitBuilderParam--action{margin-left:8.25em}.HitBuilderParams{transition:opacity .2s cubic-bezier(.4,0,.2,1)}.is-editing .HitBuilderParams{opacity:.4;pointer-events:none}.HitElement{background:#fff;border-radius:4px;margin-bottom:1.5em}.HitElement-status{background-color:#fafafa;border:1px solid #d4d2d0;border-radius:4px 4px 0 0;display:flex;padding:2em;transform:translateZ(0)}.HitElement-body{background-color:#fff;border:1px solid #d4d2d0;border-radius:0 0 4px 4px;border-top:0 solid #d4d2d0;padding:2em;transition:border-color .3s cubic-bezier(.4,0,.2,1)}.HitElement-statusIcon{color:#777;display:inline-flex;font-size:2.5em;margin-right:.5em}.HitElement-statusHeading{color:#000;font-size:1.6em;font-weight:300;margin:.25em 0}.HitElement-statusMessage{color:#777;font-size:.9em;list-style:none;margin:0;padding:0}.HitElement-requestBody,.HitElement-requestInfo{font-family:Menlo,monospace;font-size:.9em}.HitElement-action,.HitElement-requestBody{margin-top:2em}.HitElement-action,.HitElement-body,.HitElement-requestInfo,.HitElement-status{opacity:1;transition:border-color .3s cubic-bezier(.4,0,.2,1),opacity .3s cubic-bezier(.4,0,.2,1)}.HitElement--valid .HitElement-statusHeading,.HitElement--valid .HitElement-statusIcon{color:#29a347}.HitElement--valid .HitElement-status{background-color:#f3fcf5;border-color:#29a347}.HitElement--invalid .HitElement-statusHeading,.HitElement--invalid .HitElement-statusIcon{color:#c33}.HitElement--invalid .HitElement-status{background-color:#fcf3f3;border-color:#c33}.is-editing .HitElement-action,.is-editing .HitElement-requestInfo,.is-editing .HitElement-status{opacity:.1;pointer-events:none}.is-editing .HitElement-body,.is-editing .HitElement-status{border-color:transparent}.Icon{fill:currentColor;display:inherit;height:1.14286em;width:1.14286em}.InlineDefinitionList{display:flex;flex-wrap:wrap;list-style:none;margin:0;padding:0}.InlineDefinitionList-item{font-weight:300;line-height:1.667;margin-right:1.5em;white-space:nowrap}.InlineDefinitionList-item:last-child{margin-right:0}.InlineDefinitionList-itemName{display:inline-block;margin-right:.5em}.InlineDefinitionList-itemValue{font-weight:700}@media (min-width:1024px){.InlineDefinitionList-item{border-right:1px solid #ddd9d5;margin-right:1em;padding-right:1em}.InlineDefinitionList-item:last-child{border:0;margin-right:0;padding-right:0}}.LinkButton{background:transparent;border:0;color:#f05a24;font:inherit;padding:0;text-decoration:none}.LinkButton:hover{text-decoration:underline}.Logo{margin:0 3em}.Logo-full{display:none}.Logo-partial{text-align:center}.Logo-partial>svg{fill:#aaa;height:16px}.Logo-partial:after{color:#ddd;content:\"Demos & Tools\";display:block;font-size:1.4em;font-weight:300;letter-spacing:-.03em;line-height:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-spacing:.2em}@media (min-width:420px){.Logo-partial>svg{display:none}.Logo-partial:after{content:\"Google Analytics Demos & Tools\";line-height:normal}}@media (min-width:1024px){.Logo{margin:0}.Logo-full{display:block}.Logo-full>svg{fill:#75787d;display:inherit;height:26px;width:303px}.Logo-partial{display:none}}.Message{background-color:#fef9e1;border-left:5px solid #fad105;padding:1.5em}.Nav ol{list-style:none;margin:0;padding:0}.Nav-section{border-top:1px solid #555;padding:1.5em 0}.Nav-category{color:#ddd;font-size:1.3em;font-weight:400;letter-spacing:.05em;margin-bottom:.5em;padding:0 1.15385em}.Nav-link{color:#aaa;display:block;padding:.5em 1.5em}.Nav-link:hover{background-color:rgba(0,0,0,.15);text-decoration:none}.Nav-link--selected,.Nav-link--selected:hover{background-color:hsla(0,0%,100%,.075);color:#fff;cursor:default;pointer-events:none}.Nav-link--nested{font-size:.85em;padding-bottom:.58824em;padding-left:3.85294em;padding-top:.58824em}.Nav-status{color:#f05a24;font-size:.8em;font-weight:700;line-height:0;margin-left:.25em;position:relative;text-transform:capitalize;top:-.5em;vertical-align:baseline}.Nav-status:after{content:\"!\"}@media (min-width:1024px){.Nav-category{padding:0 1.53846em}.Nav-link{padding-left:2em;padding-right:2em}.Nav-link--nested{padding-left:4em}}.NavHeader{padding:1em 1.5em;position:relative}.NavHeader-homeLink{align-items:center;color:#777;display:inline-flex;height:26px}.NavHeader-homeLink:hover{color:#ddd;text-decoration:none}.NavHeader-homeIcon{font-size:1.3125em}.NavHeader-title{color:inherit;display:inline-block;font-size:1.1em;font-weight:300;letter-spacing:.3em;margin:0 1em;text-transform:uppercase}.NavHeader-controls{cursor:pointer;position:absolute;right:1.5em;top:50%;transform:translateY(-50%)}.NavHeader-controls,.NavHeader-controlsIcon{display:flex}.NavHeader-controlsIcon{border-radius:.333em;color:#eee;font-size:1.3125em;margin:-.5rem;padding:.5rem}.NavHeader-controlsIcon:hover{background:#000;background:rgba(0,0,0,.2)}@media (min-width:1024px){.NavHeader{padding:2em}.NavHeader-controls{display:none}}.QueryReport{background:#fff;border:1px solid #d4d2d0;border-radius:4px;margin-bottom:1.5em;padding:1.5em 1.5em 0}.QueryReport-title{color:inherit;font-size:1.5em;font-weight:300;line-height:1;margin:0 0 .667em}.QueryReport-meta{font-weight:300;margin:0 0 1.5em}.QueryReport-item{margin:0 0 1.5em}@media (min-width:1024px){.QueryReport{margin-bottom:2em;padding:2em 2em 0}.QueryReport-item,.QueryReport-meta{margin:0 0 2em}}.Screenshot{margin-bottom:1.5em}.Screenshot img{border:1px solid #d4d2d0;border-radius:4px;height:auto;max-width:100%}.Screenshot figcaption{color:#aaa;font-size:.85em;font-style:italic;padding:.5em 4px 0;text-align:right}.SearchSuggest{display:block;width:100%}.SearchSuggest-matches{-webkit-tap-highlight-color:transparent;background:#fff;border:1px solid #3b99fc;border-radius:0 0 4px 4px;border-top-color:#eee;display:none;list-style:none;margin:-1px 0 0;max-height:300px;overflow-x:hidden;overflow-y:auto;padding:0;position:absolute;top:100%;width:100%;z-index:1}.SearchSuggest--open{position:relative}.SearchSuggest--open .SearchSuggest-field{border-color:#3b99fc;border-radius:4px 4px 0 0}.SearchSuggest--open .SearchSuggest-matches{display:block}.SearchSuggest--above.SearchSuggest--open .SearchSuggest-matches{border-color:#3b99fc #3b99fc #eee;border-radius:4px 4px 0 0;bottom:100%;margin:0 0 -1px;top:auto}.SearchSuggest--above.SearchSuggest--open .SearchSuggest-field{border-radius:0 0 4px 4px}.SearchSuggestMatch{word-wrap:break-word;border:solid #eee;border-width:1px 0 0;line-height:1.2;list-style:none;overflow:hidden;padding:.5em}.SearchSuggestMatch:first-child{border:0}.SearchSuggestMatch-category{color:#bbb;float:right;font-size:.6em;font-weight:700;letter-spacing:.1em;margin:.1em 0 1em .5em;max-width:12em;text-align:right;text-transform:uppercase}.SearchSuggestMatch-content{font-weight:600}.SearchSuggestMatch-extra{word-wrap:break-word;color:#777;font-size:.8em;font-weight:300;margin-top:.15em}.SearchSuggestMatch--selected{background:#3b99fc;border-color:transparent}.SearchSuggestMatch--selected .SearchSuggestMatch-category,.SearchSuggestMatch--selected .SearchSuggestMatch-content,.SearchSuggestMatch--selected .SearchSuggestMatch-extra{color:#fff}.TechInfo{background:#fff;border:1px solid #36a9e2;border-radius:4px;display:flex;margin:1.5em 0;max-width:52em;padding:1.25em}.TechInfo-icon{fill:#36a9e2;flex:0 0 auto;height:1.5em;margin-right:1em;overflow:visible;width:1.5em}.TechInfo-content{color:#777;flex:1;font-size:.9em;margin:0}.TechInfo-title{color:#36a9e2;font-size:1.2em;font-weight:600;margin:0 0 .5em}.TechInfo a{color:#36a9e2;text-decoration:underline}@media (min-width:1024px){.TechInfo{margin:2em 0}}.Table{background:#fff;margin:0 0 1.5em}.Table td,.Table th{border:1px solid #d4d2d0;padding:.5em 1em;text-align:left}.Table th>h4{font-size:1.1em;font-weight:400;margin:0}.Table tbody tr:nth-child(2n-1){background-color:rgba(0,0,0,.02)}.Titles{font-weight:300;line-height:1.2;margin:0 0 1.5em}.Titles-main,.Titles-sub{color:inherit;font:inherit;margin:0}.Titles-main{font-size:1.4em}.Titles-sub{margin-top:.2em;opacity:.6}.Titles-action{background:#f05a24;border-radius:.25em;color:#fff;display:inline-block;font-weight:400;margin-top:.8em;padding:.3em .6em .2em;vertical-align:.4em}.Titles-action:focus,.Titles-action:hover{text-decoration:none}.Titles--hero{color:#75787d}.Titles--hero .Titles-main{font-size:2.25em}.Titles--hero .Titles-sub{font-size:1.25em}@media (min-width:570px){.Titles--hero{margin:1em 0 1.5em}.Titles--hero .Titles-main{margin-right:.25em}.Titles--hero .Titles-main,.Titles--hero .Titles-sub{display:inline-block}}@media (min-width:1024px){.Titles--hero{margin:4em 0 0}.Titles--hero .Titles-main{font-size:3em;margin-right:.5em}.Titles--hero .Titles-sub{font-size:1.75em}}.Video{height:0;padding-bottom:62.5%;position:relative}.Video-frame{height:100%;left:0;position:absolute;top:0;width:100%}.ViewSelector,.ViewSelector2{display:block}.ViewSelector table,.ViewSelector2-item{display:block;margin-bottom:1em;width:100%}.ViewSelector td:first-child,.ViewSelector2-item>label{display:block;font-weight:700;margin:0 .25em .25em 0}.ViewSelector2-item>select{width:100%}.ViewSelector table,.ViewSelector tbody,.ViewSelector td,.ViewSelector tr{display:block}.ViewSelector table{height:auto!important}.ViewSelector table,.ViewSelector td{width:auto!important}.ViewSelector td:last-child *{display:block;text-align:left}.ViewSelector td:last-child>div{font-weight:400;margin:0}@media (min-width:570px){.ViewSelector,.ViewSelector2{display:flex;margin:0 0 -1em -1em;width:calc(100% + 1em)}.ViewSelector table,.ViewSelector2-item{flex:1 1 calc(33.33333% - 1em);margin-left:1em}}.ViewSelector--stacked,.ViewSelector2--stacked{display:block;margin:0;width:auto}.ViewSelector--stacked table,.ViewSelector2--stacked .ViewSelector2-item{margin-left:0}.u-visuallyHidden{clip:rect(1px,1px,1px,1px)!important;border:0!important;height:1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important}.u-hidden{display:none}.u-block{display:block}@media (min-width:420px){.u-sm-hidden{display:none}.u-sm-block{display:block}}@media (min-width:570px){.u-md-hidden{display:none}.u-md-block{display:block}}@media (min-width:1024px){.u-lg-hidden{display:none}.u-lg-block{display:block}}.u-spaceDouble{margin:0 0 3em}#embed-api-auth-container{background:#fff;border-radius:3px;box-shadow:0 1px 1px rgba(0,0,0,.05);padding:50px;text-align:center}.dd{font-size:13px;line-height:20px}.dd,.dd-list{display:block;list-style:none;margin:0;padding:0;position:relative}.dd-list .dd-list{padding-left:30px}.dd-collapsed .dd-list{display:none}.dd-empty,.dd-item,.dd-placeholder{display:block;font-size:13px;line-height:20px;margin:0;min-height:20px;padding:0;position:relative}.dd-handle{background:#fafafa;border:1px solid #ccc;border-radius:3px;box-sizing:border-box;-moz-box-sizing:border-box;color:#333;display:block;font-weight:700;height:50px;margin:5px 0;padding:14px 25px;text-decoration:none}.dd-handle:hover{background:#fff;color:#2ea8e5}.dd-item>button{background:transparent;border:0;cursor:pointer;display:block;float:left;font-size:12px;font-weight:700;height:37px;line-height:1;margin:5px 0;overflow:hidden;padding:0;position:relative;text-align:center;text-indent:100%;white-space:nowrap;width:40px}.dd-item>button:before{content:\"+\";display:block;position:absolute;text-align:center;text-indent:0;width:100%}.dd-item>button[data-action=collapse]:before{content:\"-\"}.dd-empty,.dd-placeholder{background:#f2fbff;border:1px dashed #b6bcbf;box-sizing:border-box;-moz-box-sizing:border-box;margin:5px 0;min-height:30px;padding:0}.dd-empty{background-color:#e5e5e5;background-image:linear-gradient(45deg,#fff 25%,transparent 0,transparent 75%,#fff 0,#fff),linear-gradient(45deg,#fff 25%,transparent 0,transparent 75%,#fff 0,#fff);background-position:0 0,30px 30px;background-size:60px 60px;border:1px dashed #bbb;min-height:100px}.dd-dragel{pointer-events:none;position:absolute;z-index:9999}.dd-dragel>.dd-item .dd-handle{margin-top:0}.dd-dragel .dd-handle{box-shadow:2px 4px 6px 0 rgba(0,0,0,.1)}.nestable-lists{border:0;border-bottom:2px solid #ddd;border-top:2px solid #ddd;clear:both;display:block;padding:30px 0;width:100%}#nestable-menu{margin:20px 0;padding:0}#nestable-output,#nestable2-output{box-sizing:border-box;-moz-box-sizing:border-box;font-family:Consolas,monospace;font-size:.75em;height:7em;line-height:1.333333em;padding:5px;width:100%}#nestable2 .dd-handle{background:#bbb;background:linear-gradient(180deg,#bbb 0,#999);border:1px solid #999;color:#fff}.menus .table>tbody>tr>td{line-height:44px}#nestable2 .dd-handle:hover{background:#bbb}#nestable2 .dd-item>button:before{color:#fff}@media only screen and (min-width:700px){.dd{float:left;width:100%}.dd+.dd{margin-left:2%}}.dd-hover>.dd-handle{background:#2ea8e5!important}.dd3-content{background:#fafafa;background:linear-gradient(180deg,#fafafa 0,#eee);border:1px solid #ccc;border-radius:3px;box-sizing:border-box;-moz-box-sizing:border-box;color:#333;display:block;font-weight:700;height:30px;margin:5px 0;padding:5px 10px 5px 40px;text-decoration:none}.dd3-content:hover{background:#fff;color:#2ea8e5}.dd-dragel>.dd3-item>.dd3-content{margin:0}.dd3-item>button{margin-left:30px}.dd3-handle{background:#ddd;background:linear-gradient(180deg,#ddd 0,#bbb);border:1px solid #aaa;border-bottom-right-radius:0;border-top-right-radius:0;cursor:pointer;left:0;margin:0;overflow:hidden;position:absolute;text-indent:100%;top:0;white-space:nowrap;width:30px}.dd3-handle:before{color:#fff;content:\"≡\";display:block;font-size:20px;font-weight:400;left:0;position:absolute;text-align:center;text-indent:0;top:3px;width:100%}.dd3-handle:hover{background:#ddd}#search-input{background-color:#fff;border:1px solid #eaeaf1;border-radius:6px;display:flex;margin-bottom:20px;padding:1px}#search-input .input-group{display:flex;position:relative}#search-input input{border:0;box-shadow:none;width:100%}#search-input button{background:none;border:0;border-left:1px solid #eee;box-shadow:none;color:#999;margin:2px 0 0;padding:1px 8px 0 10px;right:20px;z-index:9}#search-input button:hover{border:0;border-left:1px solid #ddd;box-shadow:none;color:#777}#search-input i{display:block;font-size:18px;transform:rotate(270deg)}#search-input .select2-results{text-align:center}#search-input #filter{min-width:100px;text-align:center}.voyager table.dataTable thead th.sorting:after,.voyager table.dataTable thead th.sorting_asc:after,.voyager table.dataTable thead th.sorting_desc:after,div.dataTables_paginate li.first a:before,div.dataTables_paginate li.last a:after,div.dataTables_paginate li.next a:after,div.dataTables_paginate li.previous a:before{font-family:Voyager}.voyager table.dataTable thead th.sorting:after{content:\"o\";margin-top:3px}.voyager table.dataTable thead th.sorting_asc:after{content:\"p\";margin-top:5px}.voyager table.dataTable thead th.sorting_desc:after{content:\"q\"}.voyager div.dataTables_paginate li.previous a:before{content:\"\\e039\";margin-left:-3px;margin-top:3px}.voyager div.dataTables_paginate li.next a:after{content:\"\\e046\";margin-right:-3px;margin-top:3px}.ps__rail-x,.ps__rail-y{z-index:999}#cropping-image{margin:0 auto}div.cropper-container img{max-width:100%}.CodeMirror-fullscreen,.editor-toolbar.fullscreen{z-index:9999}\n"
  },
  {
    "path": "publishable/assets/css/rtl.css",
    "content": "/*\n * Right-To-Left (RTL) Support\n * ----------\n */\n\n\n/*login page*/\n[dir=\"rtl\"] body.login .logo-title-container\n{\n    right: 30px;\n    left: auto;\n}\n[dir=\"rtl\"] body.login .copy h1\n{\n    margin: 20px 14px 0 0;\n}\n[dir=\"rtl\"] body.login .copy p\n{\n    right: 15px;\n    left: auto;\n}\n[dir=\"rtl\"] body.login .login-container p\n{\n    text-align: right;\n}\n\n/*other app pages*/\n\n[dir=\"rtl\"] .site-footer-right {\n    text-align: left;\n    padding-left: 20px;\n}\n[dir=\"rtl\"] .side-body > .language-selector\n{\n    float: left !important;\n    padding: 28px 0 0 15px;\n}\n[dir=\"rtl\"] .voyager div.dataTables_paginate li.next a::after,\n[dir=\"rtl\"] .voyager div.dataTables_paginate li.previous a::before {\n    content: none;\n}\n[dir=\"rtl\"] .voyager div.dataTables_paginate li.previous a::before {\n    content: \"\\e046\";\n    font-family: Voyager;\n    right: 10px;\n    left: auto;\n}\n[dir=\"rtl\"] div.dataTables_paginate li.first > a, div.dataTables_paginate li.previous > a\n{\n    padding-right: 24px;\n    padding-left: 10px;\n}\n\n[dir=\"rtl\"] div.dataTables_paginate li.last > a, div.dataTables_paginate li.next > a\n{\n    padding-left: 24px;\n    padding-right: 10px;\n}\n[dir=\"rtl\"] .voyager div.dataTables_paginate li.next a::after {\n    content: \"\\e039\";\n    font-family: Voyager;\n    left: 10px;\n    right: auto;\n}\n\n[dir=\"rtl\"] .dropdown-menu > li > form .voyager-power\n{\n    float: right;\n}\n[dir=\"rtl\"] .dropdown-menu > li > a i\n{\n    float: right;\n    padding-left: 10px;\n}\n\n/*imported and validated with v 1.0*/\n[dir=\"rtl\"] .app-container .content-container .navbar-top .hamburger {\n    float: right;\n}\n\n[dir=\"rtl\"] .breadcrumb > li + li:before {\n    display: none;\n}\n\n[dir=\"rtl\"] .breadcrumb li+li:after {\n    padding: 0 5px;\n}\n[dir=\"rtl\"] .breadcrumb > li + li:after {\n    font-family: Voyager;\n    content: '\\e039';\n    position: relative;\n    top: 1px;\n    margin-left: 3px;\n}\n\n\n/*imported from v0.11*/\n[dir=\"rtl\"] .navbar {\n    padding-left: 0px;\n    padding-right: 60px;}\n\n[dir=\"rtl\"] .app-container .side-body{\n    margin-left: 15px;\n    margin-right: 75px;\n}\n\n[dir=\"rtl\"] .navbar-header {\n    float: right;\n}\n\n[dir=\"rtl\"] .app-container.expanded .content-container .navbar-top {\n    padding-left: 0px;\n    padding-right: 250px;\n}\n\n[dir=\"rtl\"] #sidebar-anchor {\n    margin-left: 10px;\n    margin-right: auto;\n    float: right;\n}\n\n[dir=\"rtl\"] .app-container .content-container .side-menu .navbar, .nav.navbar-nav {\n    padding-right: 0px;\n}\n\n[dir=\"rtl\"] table th{\n    text-align: right;\n}\n\n[dir=\"rtl\"] table.dataTable thead .sorting:after, table.dataTable thead .sorting_asc:after, table.dataTable thead .sorting_desc:after{\n    right: unset;\n    left: 4px;\n}\n\n[dir=\"rtl\"] .dataTables_length {\n    float: left\n}\n\n[dir=\"rtl\"] .app-container .content-container .side-menu {\n    right: 0;\n}\n\n[dir=\"rtl\"] .page-title {\n  padding-right: 25px\n}\n\n[dir=\"rtl\"] .page-title > i {\n    position: unset;\n    margin-right: unset;\n    font-size: 36px;\n    margin-left: 10px;\n    float: right;\n}\n\n[dir=\"rtl\"] .page-title .btn.btn-success {\n    left: unset;\n    right: 15px;\n}\n\n[dir=\"rtl\"] .dropdown-menu.dropdown-menu-animated {\n    position: absolute !important;\n}\n\n[dir=\"rtl\"] .navbar-nav.navbar-right, .navbar-nav.navbar-left {\n    right: unset;\n    left: 10px;\n}\n\n[dir=\"rtl\"] .app-container .side-menu .panel.widget .avatar {\n    float: right;\n    margin-left: 0px;\n    margin-right: 10px;\n}\n\n[dir=\"rtl\"] .app-container .side-menu .panel.widget h4 {\n    float: right;\n    text-align: right;\n    right: 56px;\n    left:auto;\n}\n\n[dir=\"rtl\"] .text-right {\n    text-align: left !important;\n}\n\n[dir=\"rtl\"] .app-container.expanded .side-body {\n    margin-right: 235px;\n}\n\n[dir=\"rtl\"] .panel-title{\n    padding: 20px 30px;\n    padding-right: 15px;\n    text-align: right;\n}\n\n[dir=\"rtl\"] .panel-actions{\n    left: 30px;\n    right: unset !important;\n}\n\n[dir=\"rtl\"] code{\n    direction: ltr;\n    display: inline-block;\n}\n\n[dir=\"rtl\"] .pull-right {\n    float: left !important;\n}\n\n[dir=\"rtl\"] .delete, [dir=\"rtl\"] .edit {\n    margin-right: 5px;\n    margin-left: auto;\n}\n\n[dir=\"rtl\"] .app-container .content-container .side-menu .navbar-nav li.dropdown > a:after {\n    right: auto !important;\n    left: 1em;\n}\n\n[dir=\"rtl\"] .dd .item_actions{\n    right: auto;\n    left: 10px;\n}\n\n[dir=\"rtl\"] .dd .dd-handle .url {\n    display: inline-block;\n}\n\n[dir=\"rtl\"] .panel-actions .voyager-trash, [dir=\"rtl\"] .voyager-sort-desc, [dir=\"rtl\"] .voyager-sort-asc {\n    display: inline-block;\n}\n\n[dir=\"rtl\"] .voyager-sort-desc {\n    margin-left: 10px;\n    margin-right: auto;\n}\n\n[dir=\"rtl\"] .database-tables .name{\n    float: right;\n}\n\n[dir=\"rtl\"] .database-tables .voyager-bread{\n    margin-right: 10px;\n    margin-left: auto;\n    right: 100%;\n    left: auto;\n}\n\n[dir=\"rtl\"] .database-tables .actions .btn-warning, [dir=\"rtl\"] .database-tables .actions .btn-primary{\n    margin-left: 10px !important;\n    margin-right: auto !important;\n}\n\n[dir=\"rtl\"] .toast-top-right {\n    top: 12px;\n    right: auto;\n    left: 12px;\n}\n\n[dir=\"rtl\"] #toast-container>div {\n    background-position: calc(100% - 15px) center;\n    padding: 15px 50px 15px 15px;\n}\n\n[dir=\"rtl\"] .dropdown-menu>li>a {\n    text-align: right;\n}\n\n[dir=\"rtl\"] .navbar .dropdown.profile .dropdown-menu li.profile-img img.profile-img {\n    float: right;\n    margin-right: auto;\n    margin-left: 10px;\n}\n\n[dir=\"rtl\"] .navbar .dropdown.profile .dropdown-menu h5, [dir=\"rtl\"] .navbar .dropdown.profile .dropdown-menu h6 {\n    float: right;\n}\n\n[dir=\"rtl\"] .breadcrumb-container .toggle{\n    float: left;\n    right: auto;\n    left: 5px;\n}\n\n[dir=\"rtl\"] .breadcrumb-container .toggle span {\n    float: right;\n    left: 10px;\n    right: auto;\n}\n\n[dir=\"rtl\"] .breadcrumb-container .toggle i {\n    float: left;\n    margin-right: auto;\n    margin-left: 5px;\n    top: -8px;\n    -ms-transform: rotate(180deg);\n    -webkit-transform: rotate(180deg);\n    transform: rotate(180deg);\n }\n\n[dir=\"rtl\"] .detail_info h4 {\n    float: right;\n    margin-right: auto;\n    margin-left: 8px;\n}\n\n[dir=\"rtl\"] .detail_info p {\n     float: right;\n     color: #444;\n     padding-bottom: 3px;\n     font-size: 12px;\n     font-weight: 400;\n }\n\n[dir=\"rtl\"] .file_link .link_icon {\n    margin-left: 5px;\n    margin-right: 0;\n}\n\n@media (min-width: 992px) {\n    [dir=\"rtl\"] .col-md-1, [dir=\"rtl\"] .col-md-10, [dir=\"rtl\"] .col-md-11,\n    [dir=\"rtl\"] .col-md-12, [dir=\"rtl\"] .col-md-2, [dir=\"rtl\"] .col-md-3,\n    [dir=\"rtl\"] .col-md-4, [dir=\"rtl\"] .col-md-5, [dir=\"rtl\"] .col-md-6,\n    [dir=\"rtl\"] .col-md-7, [dir=\"rtl\"] .col-md-8, [dir=\"rtl\"] .col-md-9 {\n        float: right;\n    }\n}\n\n\n[dir=\"rtl\"] .app-container .content-container .navbar-top,\n[dir=\"rtl\"] .app-container .side-body,\n[dir=\"rtl\"] .app-container.expanded .content-container .navbar-top {\n    height: 60px;\n}\n\n[dir=\"rtl\"] .voyager .navbar .navbar-nav .dropdown-menu,\n[dir=\"rtl\"] .voyager .navbar.navbar-default .navbar-nav .dropdown-menu {\n    background-color: #fff;\n    display: block;\n    position: absolute !important;\n    left: 0;\n    right: auto;\n}\n\n\n\n[dir=\"rtl\"] .voyager .navbar.navbar-default>.container-fluid:after,\n[dir=\"rtl\"] .voyager .navbar>.container-fluid {\n    border-bottom:0;\n    width: 99.5%;\n    height: 1px;\n}\n\n\n/******** New ********/\n[dir=\"rtl\"] .database-tables .name a {\n float:right;\n}\n\n[dir=\"rtl\"] .app-container .side-body .container-fluid{\n\tpadding-left:0;\n\tpadding-right: 15px;\n\n\t}\n\n[dir=\"rtl\"] .table.dataTable tbody td,\ntable.dataTable tbody th {\n padding:8px 18px\n}\n[dir=\"rtl\"] .btn-group-sm > .btn i, .btn-sm i {top:3px}\n\n[dir=\"rtl\"] .glyphicon-list::before{font-family: voyager !important;}\n\n\n[dir=\"rtl\"] .ps.ps--active-y > .ps__scrollbar-y-rail {\n    right: auto !important;\n    left: 0;\n}\n\n[dir=\"rtl\"] .ps > .ps__scrollbar-y-rail > .ps__scrollbar-y {\n    right:auto !important;\n    left: 2px;\n}\n\n[dir=\"rtl\"] .hamburger.is-active .hamburger-inner:before {\n    transform: translate3d(5px,1px,0) rotate(45deg) scaleX(.5);\n}\n\n[dir=\"rtl\"] .hamburger.is-active .hamburger-inner:after {\n    transform: translate3d(5px,-1px,0) rotate(-45deg) scaleX(.5);\n}\n\n[dir=\"rtl\"] .dd-list .dd-list {\n    padding-left: unset;\n    padding-right: 30px;\n}\n"
  },
  {
    "path": "publishable/assets/fonts/icons-reference.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n    <title>Font Reference - voyager</title>\n    <link href=\"http://fonts.googleapis.com/css?family=Dosis:400,500,700\" rel=\"stylesheet\" type=\"text/css\">\n    <style type=\"text/css\">html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-weight:inherit;font-style:inherit;font-family:inherit;font-size:100%;vertical-align:baseline}body{line-height:1;color:#000;background:#fff}ol,ul{list-style:none}table{border-collapse:separate;border-spacing:0;vertical-align:middle}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}a img{border:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{font-family:'Dosis','Tahoma',sans-serif}.container{margin:15px auto;width:80%}h1{margin:40px 0 20px;font-weight:700;font-size:38px;line-height:32px;color:#fb565e}h2{font-size:18px;padding:0 0 21px 5px;margin:45px 0 0 0;text-transform:uppercase;font-weight:500}.small{font-size:14px;color:#a5adb4;}.small a{color:#a5adb4;}.small a:hover{color:#fb565e}.glyphs.character-mapping{margin:0 0 20px 0;padding:20px 0 20px 30px;color:rgba(0,0,0,0.5);border:1px solid #d8e0e5;-webkit-border-radius:3px;border-radius:3px;}.glyphs.character-mapping li{margin:0 30px 20px 0;display:inline-block;width:90px}.glyphs.character-mapping .icon{margin:10px 0 10px 15px;padding:15px;position:relative;width:55px;height:55px;color:#162a36 !important;overflow:hidden;-webkit-border-radius:3px;border-radius:3px;font-size:32px;}.glyphs.character-mapping .icon svg{fill:#000}.glyphs.character-mapping input{margin:0;padding:5px 0;line-height:12px;font-size:12px;display:block;width:100%;border:1px solid #d8e0e5;-webkit-border-radius:5px;border-radius:5px;text-align:center;outline:0;}.glyphs.character-mapping input:focus{border:1px solid #fbde4a;-webkit-box-shadow:inset 0 0 3px #fbde4a;box-shadow:inset 0 0 3px #fbde4a}.glyphs.character-mapping input:hover{-webkit-box-shadow:inset 0 0 3px #fbde4a;box-shadow:inset 0 0 3px #fbde4a}.glyphs.css-mapping{margin:0 0 60px 0;padding:30px 0 20px 30px;color:rgba(0,0,0,0.5);border:1px solid #d8e0e5;-webkit-border-radius:3px;border-radius:3px;}.glyphs.css-mapping li{margin:0 30px 20px 0;padding:0;display:inline-block;overflow:hidden}.glyphs.css-mapping .icon{margin:0;margin-right:10px;padding:13px;height:50px;width:50px;color:#162a36 !important;overflow:hidden;float:left;font-size:24px}.glyphs.css-mapping input{margin:0;margin-top:5px;padding:8px;line-height:16px;font-size:16px;display:block;width:150px;height:40px;border:1px solid #d8e0e5;-webkit-border-radius:5px;border-radius:5px;background:#fff;outline:0;float:right;}.glyphs.css-mapping input:focus{border:1px solid #fbde4a;-webkit-box-shadow:inset 0 0 3px #fbde4a;box-shadow:inset 0 0 3px #fbde4a}.glyphs.css-mapping input:hover{-webkit-box-shadow:inset 0 0 3px #fbde4a;box-shadow:inset 0 0 3px #fbde4a}</style>\n    <link rel=\"stylesheet\" href=\"../css/app.css\">\n  </head>\n  <body>\n    <div class=\"container\">\n      <h1>Voyager Fonts</h1>\n      <h2>CSS mapping</h2>\n      <ul class=\"glyphs css-mapping\">\n        <li>\n          <div class=\"icon voyager-bread\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-bread\">\n        </li>\n        <li>\n          <div class=\"icon voyager-helm\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-helm\">\n        </li>\n        <li>\n          <div class=\"icon voyager-play\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-play\">\n        </li>\n        <li>\n          <div class=\"icon voyager-activity\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-activity\">\n        </li>\n        <li>\n          <div class=\"icon voyager-company\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-company\">\n        </li>\n        <li>\n          <div class=\"icon voyager-file-text\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-file-text\">\n        </li>\n        <li>\n          <div class=\"icon voyager-folder\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-folder\">\n        </li>\n        <li>\n          <div class=\"icon voyager-paw\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-paw\">\n        </li>\n        <li>\n          <div class=\"icon voyager-sort\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-sort\">\n        </li>\n        <li>\n          <div class=\"icon voyager-sort-asc\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-sort-asc\">\n        </li>\n        <li>\n          <div class=\"icon voyager-sort-desc\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-sort-desc\">\n        </li>\n        <li>\n          <div class=\"icon voyager-handle\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-handle\">\n        </li>\n        <li>\n          <div class=\"icon voyager-hammer\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-hammer\">\n        </li>\n        <li>\n          <div class=\"icon voyager-images\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-images\">\n        </li>\n        <li>\n          <div class=\"icon voyager-categories\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-categories\">\n        </li>\n        <li>\n          <div class=\"icon voyager-group\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-group\">\n        </li>\n        <li>\n          <div class=\"icon voyager-plus\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-plus\">\n        </li>\n        <li>\n          <div class=\"icon voyager-person\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-person\">\n        </li>\n        <li>\n          <div class=\"icon voyager-people\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-people\">\n        </li>\n        <li>\n          <div class=\"icon voyager-power\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-power\">\n        </li>\n        <li>\n          <div class=\"icon voyager-tools\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-tools\">\n        </li>\n        <li>\n          <div class=\"icon voyager-anchor\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-anchor\">\n        </li>\n        <li>\n          <div class=\"icon voyager-double-down\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-double-down\">\n        </li>\n        <li>\n          <div class=\"icon voyager-double-up\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-double-up\">\n        </li>\n        <li>\n          <div class=\"icon voyager-double-left\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-double-left\">\n        </li>\n        <li>\n          <div class=\"icon voyager-double-right\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-double-right\">\n        </li>\n        <li>\n          <div class=\"icon voyager-window-list\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-window-list\">\n        </li>\n        <li>\n          <div class=\"icon voyager-x\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-x\">\n        </li>\n        <li>\n          <div class=\"icon voyager-dot\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-dot\">\n        </li>\n        <li>\n          <div class=\"icon voyager-dot-2\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-dot-2\">\n        </li>\n        <li>\n          <div class=\"icon voyager-dot-3\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-dot-3\">\n        </li>\n        <li>\n          <div class=\"icon voyager-list\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-list\">\n        </li>\n        <li>\n          <div class=\"icon voyager-list-add\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-list-add\">\n        </li>\n        <li>\n          <div class=\"icon voyager-pie-chart\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-pie-chart\">\n        </li>\n        <li>\n          <div class=\"icon voyager-watch\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-watch\">\n        </li>\n        <li>\n          <div class=\"icon voyager-data\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-data\">\n        </li>\n        <li>\n          <div class=\"icon voyager-music\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-music\">\n        </li>\n        <li>\n          <div class=\"icon voyager-settings\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-settings\">\n        </li>\n        <li>\n          <div class=\"icon voyager-video\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-video\">\n        </li>\n        <li>\n          <div class=\"icon voyager-trash\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-trash\">\n        </li>\n        <li>\n          <div class=\"icon voyager-tv\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-tv\">\n        </li>\n        <li>\n          <div class=\"icon voyager-lock\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-lock\">\n        </li>\n        <li>\n          <div class=\"icon voyager-news\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-news\">\n        </li>\n        <li>\n          <div class=\"icon voyager-bag\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-bag\">\n        </li>\n        <li>\n          <div class=\"icon voyager-upload\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-upload\">\n        </li>\n        <li>\n          <div class=\"icon voyager-refresh\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-refresh\">\n        </li>\n        <li>\n          <div class=\"icon voyager-character\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-character\">\n        </li>\n        <li>\n          <div class=\"icon voyager-move\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-move\">\n        </li>\n        <li>\n          <div class=\"icon voyager-paypal\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-paypal\">\n        </li>\n        <li>\n          <div class=\"icon voyager-paper-plane\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-paper-plane\">\n        </li>\n        <li>\n          <div class=\"icon voyager-ticket\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-ticket\">\n        </li>\n        <li>\n          <div class=\"icon voyager-youtube-play\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-youtube-play\">\n        </li>\n        <li>\n          <div class=\"icon voyager-boat\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-boat\">\n        </li>\n        <li>\n          <div class=\"icon voyager-check\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-check\">\n        </li>\n        <li>\n          <div class=\"icon voyager-alarm-clock\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-alarm-clock\">\n        </li>\n        <li>\n          <div class=\"icon voyager-controller\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-controller\">\n        </li>\n        <li>\n          <div class=\"icon voyager-pizza\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-pizza\">\n        </li>\n        <li>\n          <div class=\"icon voyager-backpack\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-backpack\">\n        </li>\n        <li>\n          <div class=\"icon voyager-barbeque\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-barbeque\">\n        </li>\n        <li>\n          <div class=\"icon voyager-bomb\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-bomb\">\n        </li>\n        <li>\n          <div class=\"icon voyager-book-download\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-book-download\">\n        </li>\n        <li>\n          <div class=\"icon voyager-browser\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-browser\">\n        </li>\n        <li>\n          <div class=\"icon voyager-brush\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-brush\">\n        </li>\n        <li>\n          <div class=\"icon voyager-bubble-hear\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-bubble-hear\">\n        </li>\n        <li>\n          <div class=\"icon voyager-polaroid\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-polaroid\">\n        </li>\n        <li>\n          <div class=\"icon voyager-crop\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-crop\">\n        </li>\n        <li>\n          <div class=\"icon voyager-dashboard\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-dashboard\">\n        </li>\n        <li>\n          <div class=\"icon voyager-hotdog\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-hotdog\">\n        </li>\n        <li>\n          <div class=\"icon voyager-laptop\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-laptop\">\n        </li>\n        <li>\n          <div class=\"icon voyager-paint-bucket\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-paint-bucket\">\n        </li>\n        <li>\n          <div class=\"icon voyager-photo\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-photo\">\n        </li>\n        <li>\n          <div class=\"icon voyager-photos\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-photos\">\n        </li>\n        <li>\n          <div class=\"icon voyager-receipt\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-receipt\">\n        </li>\n        <li>\n          <div class=\"icon voyager-buy\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-buy\">\n        </li>\n        <li>\n          <div class=\"icon voyager-lightbulb\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-lightbulb\">\n        </li>\n        <li>\n          <div class=\"icon voyager-archive\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-archive\">\n        </li>\n        <li>\n          <div class=\"icon voyager-paperclip\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-paperclip\">\n        </li>\n        <li>\n          <div class=\"icon voyager-warning\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-warning\">\n        </li>\n        <li>\n          <div class=\"icon voyager-basket\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-basket\">\n        </li>\n        <li>\n          <div class=\"icon voyager-bell\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-bell\">\n        </li>\n        <li>\n          <div class=\"icon voyager-book\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-book\">\n        </li>\n        <li>\n          <div class=\"icon voyager-chat\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-chat\">\n        </li>\n        <li>\n          <div class=\"icon voyager-down-circled\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-down-circled\">\n        </li>\n        <li>\n          <div class=\"icon voyager-location\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-location\">\n        </li>\n        <li>\n          <div class=\"icon voyager-forward\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-forward\">\n        </li>\n        <li>\n          <div class=\"icon voyager-flashlight\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-flashlight\">\n        </li>\n        <li>\n          <div class=\"icon voyager-trophy\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-trophy\">\n        </li>\n        <li>\n          <div class=\"icon voyager-diamond\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-diamond\">\n        </li>\n        <li>\n          <div class=\"icon voyager-credit-cards\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-credit-cards\">\n        </li>\n        <li>\n          <div class=\"icon voyager-shop\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-shop\">\n        </li>\n        <li>\n          <div class=\"icon voyager-sound\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-sound\">\n        </li>\n        <li>\n          <div class=\"icon voyager-study\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-study\">\n        </li>\n        <li>\n          <div class=\"icon voyager-pen\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-pen\">\n        </li>\n        <li>\n          <div class=\"icon voyager-params\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-params\">\n        </li>\n        <li>\n          <div class=\"icon voyager-fire\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-fire\">\n        </li>\n        <li>\n          <div class=\"icon voyager-dollar\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-dollar\">\n        </li>\n        <li>\n          <div class=\"icon voyager-bulb\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-bulb\">\n        </li>\n        <li>\n          <div class=\"icon voyager-lab\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-lab\">\n        </li>\n        <li>\n          <div class=\"icon voyager-cup\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-cup\">\n        </li>\n        <li>\n          <div class=\"icon voyager-megaphone\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-megaphone\">\n        </li>\n        <li>\n          <div class=\"icon voyager-heart\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-heart\">\n        </li>\n        <li>\n          <div class=\"icon voyager-bubble\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-bubble\">\n        </li>\n        <li>\n          <div class=\"icon voyager-search\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-search\">\n        </li>\n        <li>\n          <div class=\"icon voyager-tag\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-tag\">\n        </li>\n        <li>\n          <div class=\"icon voyager-world\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-world\">\n        </li>\n        <li>\n          <div class=\"icon voyager-camera\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-camera\">\n        </li>\n        <li>\n          <div class=\"icon voyager-calendar\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-calendar\">\n        </li>\n        <li>\n          <div class=\"icon voyager-mail\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-mail\">\n        </li>\n        <li>\n          <div class=\"icon voyager-phone\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-phone\">\n        </li>\n        <li>\n          <div class=\"icon voyager-star\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-star\">\n        </li>\n        <li>\n          <div class=\"icon voyager-star-half\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-star-half\">\n        </li>\n        <li>\n          <div class=\"icon voyager-star-half-1\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-star-half-1\">\n        </li>\n        <li>\n          <div class=\"icon voyager-star-two\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-star-two\">\n        </li>\n        <li>\n          <div class=\"icon voyager-medal-rank-star\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-medal-rank-star\">\n        </li>\n        <li>\n          <div class=\"icon voyager-facebook\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-facebook\">\n        </li>\n        <li>\n          <div class=\"icon voyager-google-plus\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-google-plus\">\n        </li>\n        <li>\n          <div class=\"icon voyager-twitter\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-twitter\">\n        </li>\n        <li>\n          <div class=\"icon voyager-github\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-github\">\n        </li>\n        <li>\n          <div class=\"icon voyager-code\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-code\">\n        </li>\n        <li>\n          <div class=\"icon voyager-pie-graph\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-pie-graph\">\n        </li>\n        <li>\n          <div class=\"icon voyager-javascript\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-javascript\">\n        </li>\n        <li>\n          <div class=\"icon voyager-wand\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-wand\">\n        </li>\n        <li>\n          <div class=\"icon voyager-wineglass\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-wineglass\">\n        </li>\n        <li>\n          <div class=\"icon voyager-milestone\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-milestone\">\n        </li>\n        <li>\n          <div class=\"icon voyager-terminal\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-terminal\">\n        </li>\n        <li>\n          <div class=\"icon voyager-plug\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-plug\">\n        </li>\n        <li>\n          <div class=\"icon voyager-gift\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-gift\">\n        </li>\n        <li>\n          <div class=\"icon voyager-markdown\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-markdown\">\n        </li>\n        <li>\n          <div class=\"icon voyager-beer\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-beer\">\n        </li>\n        <li>\n          <div class=\"icon voyager-credit-card\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-credit-card\">\n        </li>\n        <li>\n          <div class=\"icon voyager-bolt\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-bolt\">\n        </li>\n        <li>\n          <div class=\"icon voyager-external\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-external\">\n        </li>\n        <li>\n          <div class=\"icon voyager-magnet\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-magnet\">\n        </li>\n        <li>\n          <div class=\"icon voyager-certificate\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-certificate\">\n        </li>\n        <li>\n          <div class=\"icon voyager-cloud-download\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-cloud-download\">\n        </li>\n        <li>\n          <div class=\"icon voyager-campfire\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-campfire\">\n        </li>\n        <li>\n          <div class=\"icon voyager-new\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-new\">\n        </li>\n        <li>\n          <div class=\"icon voyager-skull\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-skull\">\n        </li>\n        <li>\n          <div class=\"icon voyager-telephone\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-telephone\">\n        </li>\n        <li>\n          <div class=\"icon voyager-trees\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-trees\">\n        </li>\n        <li>\n          <div class=\"icon voyager-bar-chart\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-bar-chart\">\n        </li>\n        <li>\n          <div class=\"icon voyager-check-circle\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-check-circle\">\n        </li>\n        <li>\n          <div class=\"icon voyager-exclamation\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-exclamation\">\n        </li>\n        <li>\n          <div class=\"icon voyager-font\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-font\">\n        </li>\n        <li>\n          <div class=\"icon voyager-puzzle\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-puzzle\">\n        </li>\n        <li>\n          <div class=\"icon voyager-smile\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-smile\">\n        </li>\n        <li>\n          <div class=\"icon voyager-frown\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-frown\">\n        </li>\n        <li>\n          <div class=\"icon voyager-meh\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-meh\">\n        </li>\n        <li>\n          <div class=\"icon voyager-leaf\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-leaf\">\n        </li>\n        <li>\n          <div class=\"icon voyager-info-circled\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-info-circled\">\n        </li>\n        <li>\n          <div class=\"icon voyager-underline\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-underline\">\n        </li>\n        <li>\n          <div class=\"icon voyager-wallet\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-wallet\">\n        </li>\n        <li>\n          <div class=\"icon voyager-truck\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-truck\">\n        </li>\n        <li>\n          <div class=\"icon voyager-eye\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-eye\">\n        </li>\n        <li>\n          <div class=\"icon voyager-sun\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-sun\">\n        </li>\n        <li>\n          <div class=\"icon voyager-barbell\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-barbell\">\n        </li>\n        <li>\n          <div class=\"icon voyager-bookmark\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-bookmark\">\n        </li>\n        <li>\n          <div class=\"icon voyager-volume-up\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-volume-up\">\n        </li>\n        <li>\n          <div class=\"icon voyager-volume-down\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-volume-down\">\n        </li>\n        <li>\n          <div class=\"icon voyager-wifi\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-wifi\">\n        </li>\n        <li>\n          <div class=\"icon voyager-pause\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-pause\">\n        </li>\n        <li>\n          <div class=\"icon voyager-resize-full\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-resize-full\">\n        </li>\n        <li>\n          <div class=\"icon voyager-resize-small\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-resize-small\">\n        </li>\n        <li>\n          <div class=\"icon voyager-download\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-download\">\n        </li>\n        <li>\n          <div class=\"icon voyager-droplet\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-droplet\">\n        </li>\n        <li>\n          <div class=\"icon voyager-umbrella\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-umbrella\">\n        </li>\n        <li>\n          <div class=\"icon voyager-harddrive\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-harddrive\">\n        </li>\n        <li>\n          <div class=\"icon voyager-css3\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-css3\">\n        </li>\n        <li>\n          <div class=\"icon voyager-html5\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-html5\">\n        </li>\n        <li>\n          <div class=\"icon voyager-tree\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-tree\">\n        </li>\n        <li>\n          <div class=\"icon voyager-file-code\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-file-code\">\n        </li>\n        <li>\n          <div class=\"icon voyager-bug\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-bug\">\n        </li>\n        <li>\n          <div class=\"icon voyager-rocket\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-rocket\">\n        </li>\n        <li>\n          <div class=\"icon voyager-key\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-key\">\n        </li>\n        <li>\n          <div class=\"icon voyager-question\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-question\">\n        </li>\n        <li>\n          <div class=\"icon voyager-cursor\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-cursor\">\n        </li>\n        <li>\n          <div class=\"icon voyager-lifebuoy\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-lifebuoy\">\n        </li>\n        <li>\n          <div class=\"icon voyager-thumbs-up\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-thumbs-up\">\n        </li>\n        <li>\n          <div class=\"icon voyager-thumb-tack\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-thumb-tack\">\n        </li>\n        <li>\n          <div class=\"icon voyager-edit\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-edit\">\n        </li>\n        <li>\n          <div class=\"icon voyager-angle-down\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-angle-down\">\n        </li>\n        <li>\n          <div class=\"icon voyager-angle-left\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-angle-left\">\n        </li>\n        <li>\n          <div class=\"icon voyager-angle-right\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-angle-right\">\n        </li>\n        <li>\n          <div class=\"icon voyager-angle-up\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-angle-up\">\n        </li>\n        <li>\n          <div class=\"icon voyager-home\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-home\">\n        </li>\n        <li>\n          <div class=\"icon voyager-pirate-swords\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-pirate-swords\">\n        </li>\n        <li>\n          <div class=\"icon voyager-pirate\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-pirate\">\n        </li>\n        <li>\n          <div class=\"icon voyager-rum\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-rum\">\n        </li>\n        <li>\n          <div class=\"icon voyager-cannon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-cannon\">\n        </li>\n        <li>\n          <div class=\"icon voyager-hook\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-hook\">\n        </li>\n        <li>\n          <div class=\"icon voyager-kraken\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-kraken\">\n        </li>\n        <li>\n          <div class=\"icon voyager-lighthouse\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-lighthouse\">\n        </li>\n        <li>\n          <div class=\"icon voyager-pirate-hat\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-pirate-hat\">\n        </li>\n        <li>\n          <div class=\"icon voyager-rum-1\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-rum-1\">\n        </li>\n        <li>\n          <div class=\"icon voyager-ship\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-ship\">\n        </li>\n        <li>\n          <div class=\"icon voyager-treasure\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-treasure\">\n        </li>\n        <li>\n          <div class=\"icon voyager-treasure-open\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-treasure-open\">\n        </li>\n        <li>\n          <div class=\"icon voyager-whale\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-whale\">\n        </li>\n      </ul>\n      <h2>Character mapping</h2>\n      <ul class=\"glyphs character-mapping\">\n        <li>\n          <div data-icon=\"a\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-a\">\n        </li>\n        <li>\n          <div data-icon=\"b\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-b\">\n        </li>\n        <li>\n          <div data-icon=\"c\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-c\">\n        </li>\n        <li>\n          <div data-icon=\"d\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-d\">\n        </li>\n        <li>\n          <div data-icon=\"e\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-e\">\n        </li>\n        <li>\n          <div data-icon=\"f\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-f\">\n        </li>\n        <li>\n          <div data-icon=\"g\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-g\">\n        </li>\n        <li>\n          <div data-icon=\"h\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-h\">\n        </li>\n        <li>\n          <div data-icon=\"o\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-o\">\n        </li>\n        <li>\n          <div data-icon=\"p\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-p\">\n        </li>\n        <li>\n          <div data-icon=\"q\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-q\">\n        </li>\n        <li>\n          <div data-icon=\"m\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-m\">\n        </li>\n        <li>\n          <div data-icon=\"n\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-n\">\n        </li>\n        <li>\n          <div data-icon=\"i\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-i\">\n        </li>\n        <li>\n          <div data-icon=\"j\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-j\">\n        </li>\n        <li>\n          <div data-icon=\"k\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-k\">\n        </li>\n        <li>\n          <div data-icon=\"r\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-r\">\n        </li>\n        <li>\n          <div data-icon=\"s\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-s\">\n        </li>\n        <li>\n          <div data-icon=\"t\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-t\">\n        </li>\n        <li>\n          <div data-icon=\"u\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-u\">\n        </li>\n        <li>\n          <div data-icon=\"v\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-v\">\n        </li>\n        <li>\n          <div data-icon=\"w\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-w\">\n        </li>\n        <li>\n          <div data-icon=\"x\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-x\">\n        </li>\n        <li>\n          <div data-icon=\"y\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-y\">\n        </li>\n        <li>\n          <div data-icon=\"z\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-z\">\n        </li>\n        <li>\n          <div data-icon=\"A\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-A\">\n        </li>\n        <li>\n          <div data-icon=\"B\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-B\">\n        </li>\n        <li>\n          <div data-icon=\"C\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-C\">\n        </li>\n        <li>\n          <div data-icon=\"D\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-D\">\n        </li>\n        <li>\n          <div data-icon=\"E\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-E\">\n        </li>\n        <li>\n          <div data-icon=\"F\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-F\">\n        </li>\n        <li>\n          <div data-icon=\"G\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-G\">\n        </li>\n        <li>\n          <div data-icon=\"H\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-H\">\n        </li>\n        <li>\n          <div data-icon=\"I\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-I\">\n        </li>\n        <li>\n          <div data-icon=\"J\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-J\">\n        </li>\n        <li>\n          <div data-icon=\"K\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-K\">\n        </li>\n        <li>\n          <div data-icon=\"L\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-L\">\n        </li>\n        <li>\n          <div data-icon=\"N\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-N\">\n        </li>\n        <li>\n          <div data-icon=\"O\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-O\">\n        </li>\n        <li>\n          <div data-icon=\"P\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-P\">\n        </li>\n        <li>\n          <div data-icon=\"Q\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-Q\">\n        </li>\n        <li>\n          <div data-icon=\"R\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-R\">\n        </li>\n        <li>\n          <div data-icon=\"M\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-M\">\n        </li>\n        <li>\n          <div data-icon=\"S\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-S\">\n        </li>\n        <li>\n          <div data-icon=\"T\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-T\">\n        </li>\n        <li>\n          <div data-icon=\"U\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-U\">\n        </li>\n        <li>\n          <div data-icon=\"W\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-W\">\n        </li>\n        <li>\n          <div data-icon=\"X\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-X\">\n        </li>\n        <li>\n          <div data-icon=\"V\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-V\">\n        </li>\n        <li>\n          <div data-icon=\"Y\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-Y\">\n        </li>\n        <li>\n          <div data-icon=\"Z\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-Z\">\n        </li>\n        <li>\n          <div data-icon=\"0\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-0\">\n        </li>\n        <li>\n          <div data-icon=\"1\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-1\">\n        </li>\n        <li>\n          <div data-icon=\"l\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-l\">\n        </li>\n        <li>\n          <div data-icon=\"2\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-2\">\n        </li>\n        <li>\n          <div data-icon=\"4\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-4\">\n        </li>\n        <li>\n          <div data-icon=\"5\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-5\">\n        </li>\n        <li>\n          <div data-icon=\"6\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-6\">\n        </li>\n        <li>\n          <div data-icon=\"7\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-7\">\n        </li>\n        <li>\n          <div data-icon=\"8\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-8\">\n        </li>\n        <li>\n          <div data-icon=\"9\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-9\">\n        </li>\n        <li>\n          <div data-icon=\"!\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-!\">\n        </li>\n        <li>\n          <div data-icon=\"&#34;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&quot;\">\n        </li>\n        <li>\n          <div data-icon=\"#\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-#\">\n        </li>\n        <li>\n          <div data-icon=\"$\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-$\">\n        </li>\n        <li>\n          <div data-icon=\"&\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;\">\n        </li>\n        <li>\n          <div data-icon=\"'\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&#39;\">\n        </li>\n        <li>\n          <div data-icon=\"(\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-(\">\n        </li>\n        <li>\n          <div data-icon=\")\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-)\">\n        </li>\n        <li>\n          <div data-icon=\",\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-,\">\n        </li>\n        <li>\n          <div data-icon=\"-\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager--\">\n        </li>\n        <li>\n          <div data-icon=\".\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-.\">\n        </li>\n        <li>\n          <div data-icon=\"/\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-/\">\n        </li>\n        <li>\n          <div data-icon=\":\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-:\">\n        </li>\n        <li>\n          <div data-icon=\";\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-;\">\n        </li>\n        <li>\n          <div data-icon=\"?\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-?\">\n        </li>\n        <li>\n          <div data-icon=\"@\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-@\">\n        </li>\n        <li>\n          <div data-icon=\"[\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-[\">\n        </li>\n        <li>\n          <div data-icon=\"]\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-]\">\n        </li>\n        <li>\n          <div data-icon=\"^\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-^\">\n        </li>\n        <li>\n          <div data-icon=\"_\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-_\">\n        </li>\n        <li>\n          <div data-icon=\"`\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-`\">\n        </li>\n        <li>\n          <div data-icon=\"{\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-{\">\n        </li>\n        <li>\n          <div data-icon=\"}\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-}\">\n        </li>\n        <li>\n          <div data-icon=\"~\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-~\">\n        </li>\n        <li>\n          <div data-icon=\"\\\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-\\\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe001;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe001;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe002;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe002;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe003;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe003;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe004;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe004;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe005;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe005;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe006;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe006;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe007;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe007;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe008;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe008;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe009;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe009;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe00a;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe00a;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe00b;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe00b;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe00c;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe00c;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe00d;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe00d;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe00e;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe00e;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe00f;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe00f;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe011;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe011;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe012;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe012;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe013;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe013;\">\n        </li>\n        <li>\n          <div data-icon=\"%\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-%\">\n        </li>\n        <li>\n          <div data-icon=\"*\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-*\">\n        </li>\n        <li>\n          <div data-icon=\"|\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-|\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe014;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe014;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe015;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe015;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe016;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe016;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe017;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe017;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe018;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe018;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe019;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe019;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe01a;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe01a;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe01b;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe01b;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe01c;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe01c;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe01d;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe01d;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe01e;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe01e;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe01f;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe01f;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe020;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe020;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe021;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe021;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe022;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe022;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe023;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe023;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe024;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe024;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe025;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe025;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe026;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe026;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe027;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe027;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe028;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe028;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe029;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe029;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe02a;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe02a;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe02b;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe02b;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe02c;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe02c;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe02d;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe02d;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe02e;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe02e;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe02f;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe02f;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe030;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe030;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe031;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe031;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe032;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe032;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe033;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe033;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe034;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe034;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe035;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe035;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe036;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe036;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe037;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe037;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe03a;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe03a;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe03b;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe03b;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe03c;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe03c;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe03d;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe03d;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe03e;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe03e;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe03f;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe03f;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe040;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe040;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe041;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe041;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe042;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe042;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe043;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe043;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe044;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe044;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe045;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe045;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe04a;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe04a;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe04c;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe04c;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe04d;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe04d;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe04e;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe04e;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe04f;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe04f;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe053;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe053;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe054;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe054;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe055;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe055;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe056;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe056;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe057;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe057;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe058;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe058;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe059;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe059;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe05a;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe05a;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe05b;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe05b;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe05e;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe05e;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe061;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe061;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe062;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe062;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe063;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe063;\">\n        </li>\n        <li>\n          <div data-icon=\"3\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-3\">\n        </li>\n        <li>\n          <div data-icon=\"+\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-+\">\n        </li>\n        <li>\n          <div data-icon=\"<\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&lt;\">\n        </li>\n        <li>\n          <div data-icon=\"=\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-=\">\n        </li>\n        <li>\n          <div data-icon=\">\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&gt;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe000;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe000;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe010;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe010;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe038;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe038;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe039;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe039;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe046;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe046;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe047;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe047;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe048;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe048;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe04b;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe04b;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe050;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe050;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe051;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe051;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe049;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe049;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe052;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe052;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe05c;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe05c;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe05d;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe05d;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe05f;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe05f;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe060;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe060;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe064;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe064;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe065;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe065;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe066;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe066;\">\n        </li>\n        <li>\n          <div data-icon=\"&#xe067;\" class=\"icon\"></div>\n          <input type=\"text\" readonly=\"readonly\" value=\"voyager-&amp;#xe067;\">\n        </li>\n      </ul>\n    </div>\n    <script>(function() {\n  var glyphs, i, len, ref;\n\n  ref = document.getElementsByClassName('glyphs');\n  for (i = 0, len = ref.length; i < len; i++) {\n    glyphs = ref[i];\n    glyphs.addEventListener('click', function(event) {\n      if (event.target.tagName === 'INPUT') {\n        return event.target.select();\n      }\n    });\n  }\n\n}).call(this);\n\n    </script>\n  </body>\n</html>\n"
  },
  {
    "path": "publishable/assets/js/ace/libs/ace.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n    return;\n\n\nvar define = function(module, deps, payload) {\n    if (typeof module !== \"string\") {\n        if (define.original)\n            define.original.apply(this, arguments);\n        else {\n            console.error(\"dropping module because define wasn\\'t a string.\");\n            console.trace();\n        }\n        return;\n    }\n    if (arguments.length == 2)\n        payload = deps;\n    if (!define.modules[module]) {\n        define.payloads[module] = payload;\n        define.modules[module] = null;\n    }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n    if (typeof module === \"string\") {\n        var payload = lookup(parentId, module);\n        if (payload != undefined) {\n            callback && callback();\n            return payload;\n        }\n    } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n        var params = [];\n        for (var i = 0, l = module.length; i < l; ++i) {\n            var dep = lookup(parentId, module[i]);\n            if (dep == undefined && require.original)\n                return;\n            params.push(dep);\n        }\n        return callback && callback.apply(null, params) || true;\n    }\n};\n\nvar require = function(module, callback) {\n    var packagedModule = _require(\"\", module, callback);\n    if (packagedModule == undefined && require.original)\n        return require.original.apply(this, arguments);\n    return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = base + \"/\" + moduleName;\n\n        while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n    moduleName = normalizeModule(parentId, moduleName);\n\n    var module = define.modules[moduleName];\n    if (!module) {\n        module = define.payloads[moduleName];\n        if (typeof module === 'function') {\n            var exports = {};\n            var mod = {\n                id: moduleName,\n                uri: '',\n                exports: exports,\n                packaged: true\n            };\n\n            var req = function(module, callback) {\n                return _require(moduleName, module, callback);\n            };\n\n            var returnValue = module(req, exports, mod);\n            exports = returnValue || mod.exports;\n            define.modules[moduleName] = exports;\n            delete define.payloads[moduleName];\n        }\n        module = define.modules[moduleName] = exports || module;\n    }\n    return module;\n};\n\nfunction exportAce(ns) {\n    var root = global;\n    if (ns) {\n        if (!global[ns])\n            global[ns] = {};\n        root = global[ns];\n    }\n\n    if (!root.define || !root.define.packaged) {\n        define.original = root.define;\n        root.define = define;\n        root.define.packaged = true;\n    }\n\n    if (!root.require || !root.require.packaged) {\n        require.original = root.require;\n        root.require = require;\n        root.require.packaged = true;\n    }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/es6-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module){function defineProp(obj, name, val) {\n    Object.defineProperty(obj, name, {\n        value: val,\n        enumerable: false,\n        writable: true,\n        configurable: true\n    });\n}\nif (!String.prototype.startsWith) {\n    defineProp(String.prototype, \"startsWith\", function (searchString, position) {\n        position = position || 0;\n        return this.lastIndexOf(searchString, position) === position;\n    });\n}\nif (!String.prototype.endsWith) {\n    defineProp(String.prototype, \"endsWith\", function (searchString, position) {\n        var subjectString = this;\n        if (position === undefined || position > subjectString.length) {\n            position = subjectString.length;\n        }\n        position -= searchString.length;\n        var lastIndex = subjectString.indexOf(searchString, position);\n        return lastIndex !== -1 && lastIndex === position;\n    });\n}\nif (!String.prototype.repeat) {\n    defineProp(String.prototype, \"repeat\", function (count) {\n        var result = \"\";\n        var string = this;\n        while (count > 0) {\n            if (count & 1)\n                result += string;\n            if ((count >>= 1))\n                string += string;\n        }\n        return result;\n    });\n}\nif (!String.prototype.includes) {\n    defineProp(String.prototype, \"includes\", function (str, position) {\n        return this.indexOf(str, position) != -1;\n    });\n}\nif (!Object.assign) {\n    Object.assign = function (target) {\n        if (target === undefined || target === null) {\n            throw new TypeError(\"Cannot convert undefined or null to object\");\n        }\n        var output = Object(target);\n        for (var index = 1; index < arguments.length; index++) {\n            var source = arguments[index];\n            if (source !== undefined && source !== null) {\n                Object.keys(source).forEach(function (key) {\n                    output[key] = source[key];\n                });\n            }\n        }\n        return output;\n    };\n}\nif (!Object.values) {\n    Object.values = function (o) {\n        return Object.keys(o).map(function (k) {\n            return o[k];\n        });\n    };\n}\nif (!Array.prototype.find) {\n    defineProp(Array.prototype, \"find\", function (predicate) {\n        var len = this.length;\n        var thisArg = arguments[1];\n        for (var k = 0; k < len; k++) {\n            var kValue = this[k];\n            if (predicate.call(thisArg, kValue, k, this)) {\n                return kValue;\n            }\n        }\n    });\n}\nif (!Array.prototype.findIndex) {\n    defineProp(Array.prototype, \"findIndex\", function (predicate) {\n        var len = this.length;\n        var thisArg = arguments[1];\n        for (var k = 0; k < len; k++) {\n            var kValue = this[k];\n            if (predicate.call(thisArg, kValue, k, this)) {\n                return k;\n            }\n        }\n    });\n}\nif (!Array.prototype.includes) {\n    defineProp(Array.prototype, \"includes\", function (item, position) {\n        return this.indexOf(item, position) != -1;\n    });\n}\nif (!Array.prototype.fill) {\n    defineProp(Array.prototype, \"fill\", function (value) {\n        var O = this;\n        var len = O.length >>> 0;\n        var start = arguments[1];\n        var relativeStart = start >> 0;\n        var k = relativeStart < 0\n            ? Math.max(len + relativeStart, 0)\n            : Math.min(relativeStart, len);\n        var end = arguments[2];\n        var relativeEnd = end === undefined ? len : end >> 0;\n        var final = relativeEnd < 0\n            ? Math.max(len + relativeEnd, 0)\n            : Math.min(relativeEnd, len);\n        while (k < final) {\n            O[k] = value;\n            k++;\n        }\n        return O;\n    });\n}\nif (!Array.of) {\n    defineProp(Array, \"of\", function () {\n        return Array.prototype.slice.call(arguments);\n    });\n}\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/es6-shim\"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st:\n\"use strict\";\nrequire(\"./es6-shim\");\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.OS = {\n    LINUX: \"LINUX\",\n    MAC: \"MAC\",\n    WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function () {\n    if (exports.isMac) {\n        return exports.OS.MAC;\n    }\n    else if (exports.isLinux) {\n        return exports.OS.LINUX;\n    }\n    else {\n        return exports.OS.WINDOWS;\n    }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE =\n    (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n        ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1])\n        : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\nif (exports.isIOS)\n    exports.isMac = true;\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"./useragent\");\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\nexports.buildDom = function buildDom(arr, parent, refs) {\n    if (typeof arr == \"string\" && arr) {\n        var txt = document.createTextNode(arr);\n        if (parent)\n            parent.appendChild(txt);\n        return txt;\n    }\n    if (!Array.isArray(arr)) {\n        if (arr && arr.appendChild && parent)\n            parent.appendChild(arr);\n        return arr;\n    }\n    if (typeof arr[0] != \"string\" || !arr[0]) {\n        var els = [];\n        for (var i = 0; i < arr.length; i++) {\n            var ch = buildDom(arr[i], parent, refs);\n            ch && els.push(ch);\n        }\n        return els;\n    }\n    var el = document.createElement(arr[0]);\n    var options = arr[1];\n    var childIndex = 1;\n    if (options && typeof options == \"object\" && !Array.isArray(options))\n        childIndex = 2;\n    for (var i = childIndex; i < arr.length; i++)\n        buildDom(arr[i], el, refs);\n    if (childIndex == 2) {\n        Object.keys(options).forEach(function (n) {\n            var val = options[n];\n            if (n === \"class\") {\n                el.className = Array.isArray(val) ? val.join(\" \") : val;\n            }\n            else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n                el[n] = val;\n            }\n            else if (n === \"ref\") {\n                if (refs)\n                    refs[val] = el;\n            }\n            else if (n === \"style\") {\n                if (typeof val == \"string\")\n                    el.style.cssText = val;\n            }\n            else if (val != null) {\n                el.setAttribute(n, val);\n            }\n        });\n    }\n    if (parent)\n        parent.appendChild(el);\n    return el;\n};\nexports.getDocumentHead = function (doc) {\n    if (!doc)\n        doc = document;\n    return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\nexports.createElement = function (tag, ns) {\n    return document.createElementNS ?\n        document.createElementNS(ns || XHTML_NS, tag) :\n        document.createElement(tag);\n};\nexports.removeChildren = function (element) {\n    element.innerHTML = \"\";\n};\nexports.createTextNode = function (textContent, element) {\n    var doc = element ? element.ownerDocument : document;\n    return doc.createTextNode(textContent);\n};\nexports.createFragment = function (element) {\n    var doc = element ? element.ownerDocument : document;\n    return doc.createDocumentFragment();\n};\nexports.hasCssClass = function (el, name) {\n    var classes = (el.className + \"\").split(/\\s+/g);\n    return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function (el, name) {\n    if (!exports.hasCssClass(el, name)) {\n        el.className += \" \" + name;\n    }\n};\nexports.removeCssClass = function (el, name) {\n    var classes = el.className.split(/\\s+/g);\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        classes.splice(index, 1);\n    }\n    el.className = classes.join(\" \");\n};\nexports.toggleCssClass = function (el, name) {\n    var classes = el.className.split(/\\s+/g), add = true;\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        add = false;\n        classes.splice(index, 1);\n    }\n    if (add)\n        classes.push(name);\n    el.className = classes.join(\" \");\n    return add;\n};\nexports.setCssClass = function (node, className, include) {\n    if (include) {\n        exports.addCssClass(node, className);\n    }\n    else {\n        exports.removeCssClass(node, className);\n    }\n};\nexports.hasCssString = function (id, doc) {\n    var index = 0, sheets;\n    doc = doc || document;\n    if ((sheets = doc.querySelectorAll(\"style\"))) {\n        while (index < sheets.length) {\n            if (sheets[index++].id === id) {\n                return true;\n            }\n        }\n    }\n};\nexports.removeElementById = function (id, doc) {\n    doc = doc || document;\n    if (doc.getElementById(id)) {\n        doc.getElementById(id).remove();\n    }\n};\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function (value) {\n    strictCSP = value;\n    if (value == false)\n        insertPendingStyles();\n    else if (!cssCache)\n        cssCache = [];\n};\nfunction insertPendingStyles() {\n    var cache = cssCache;\n    cssCache = null;\n    cache && cache.forEach(function (item) {\n        importCssString(item[0], item[1]);\n    });\n}\nfunction importCssString(cssText, id, target) {\n    if (typeof document == \"undefined\")\n        return;\n    if (cssCache) {\n        if (target) {\n            insertPendingStyles();\n        }\n        else if (target === false) {\n            return cssCache.push([cssText, id]);\n        }\n    }\n    if (strictCSP)\n        return;\n    var container = target;\n    if (!target || !target.getRootNode) {\n        container = document;\n    }\n    else {\n        container = target.getRootNode();\n        if (!container || container == target)\n            container = document;\n    }\n    var doc = container.ownerDocument || container;\n    if (id && exports.hasCssString(id, container))\n        return null;\n    if (id)\n        cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n    var style = exports.createElement(\"style\");\n    style.appendChild(doc.createTextNode(cssText));\n    if (id)\n        style.id = id;\n    if (container == doc)\n        container = exports.getDocumentHead(doc);\n    container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\nexports.importCssStylsheet = function (uri, doc) {\n    exports.buildDom([\"link\", { rel: \"stylesheet\", href: uri }], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function (document) {\n    var inner = exports.createElement(\"ace_inner\");\n    inner.style.width = \"100%\";\n    inner.style.minWidth = \"0px\";\n    inner.style.height = \"200px\";\n    inner.style.display = \"block\";\n    var outer = exports.createElement(\"ace_outer\");\n    var style = outer.style;\n    style.position = \"absolute\";\n    style.left = \"-10000px\";\n    style.overflow = \"hidden\";\n    style.width = \"200px\";\n    style.minWidth = \"0px\";\n    style.height = \"150px\";\n    style.display = \"block\";\n    outer.appendChild(inner);\n    var body = document.documentElement;\n    body.appendChild(outer);\n    var noScrollbar = inner.offsetWidth;\n    style.overflow = \"scroll\";\n    var withScrollbar = inner.offsetWidth;\n    if (noScrollbar == withScrollbar) {\n        withScrollbar = outer.clientWidth;\n    }\n    body.removeChild(outer);\n    return noScrollbar - withScrollbar;\n};\nexports.computedStyle = function (element, style) {\n    return window.getComputedStyle(element, \"\") || {};\n};\nexports.setStyle = function (styles, property, value) {\n    if (styles[property] !== value) {\n        styles[property] = value;\n    }\n};\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n    ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n    : true;\nif (useragent.isChromeOS)\n    exports.HI_DPI = false;\nif (typeof document !== \"undefined\") {\n    var div = document.createElement(\"div\");\n    if (exports.HI_DPI && div.style.transform !== undefined)\n        exports.HAS_CSS_TRANSFORMS = true;\n    if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n        exports.HAS_CSS_ANIMATION = true;\n    div = null;\n}\nif (exports.HAS_CSS_TRANSFORMS) {\n    exports.translate = function (element, tx, ty) {\n        element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n    };\n}\nelse {\n    exports.translate = function (element, tx, ty) {\n        element.style.top = Math.round(ty) + \"px\";\n        element.style.left = Math.round(tx) + \"px\";\n    };\n}\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\"use strict\";\nvar dom = require(\"./dom\");\nexports.get = function (url, callback) {\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n            callback(xhr.responseText);\n        }\n    };\n    xhr.send(null);\n};\nexports.loadScript = function (path, callback) {\n    var head = dom.getDocumentHead();\n    var s = document.createElement('script');\n    s.src = path;\n    head.appendChild(s);\n    s.onload = s.onreadystatechange = function (_, isAbort) {\n        if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n            s = s.onload = s.onreadystatechange = null;\n            if (!isAbort)\n                callback();\n        }\n    };\n};\nexports.qualifyURL = function (url) {\n    var a = document.createElement('a');\n    a.href = url;\n    return a.href;\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar optionsProvider = {\n    setOptions: function (optList) {\n        Object.keys(optList).forEach(function (key) {\n            this.setOption(key, optList[key]);\n        }, this);\n    },\n    getOptions: function (optionNames) {\n        var result = {};\n        if (!optionNames) {\n            var options = this.$options;\n            optionNames = Object.keys(options).filter(function (key) {\n                return !options[key].hidden;\n            });\n        }\n        else if (!Array.isArray(optionNames)) {\n            result = optionNames;\n            optionNames = Object.keys(result);\n        }\n        optionNames.forEach(function (key) {\n            result[key] = this.getOption(key);\n        }, this);\n        return result;\n    },\n    setOption: function (name, value) {\n        if (this[\"$\" + name] === value)\n            return;\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n        if (!opt.handlesSet)\n            this[\"$\" + name] = value;\n        if (opt && opt.set)\n            opt.set.call(this, value);\n    },\n    getOption: function (name) {\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n        return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n    }\n};\nfunction warn(message) {\n    if (typeof console != \"undefined\" && console.warn)\n        console.warn.apply(console, arguments);\n}\nfunction reportError(msg, data) {\n    var e = new Error(msg);\n    e.data = data;\n    if (typeof console == \"object\" && console.error)\n        console.error(e);\n    setTimeout(function () { throw e; });\n}\nvar AppConfig = function () {\n    this.$defaultOptions = {};\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.defineOptions = function (obj, path, options) {\n        if (!obj.$options)\n            this.$defaultOptions[path] = obj.$options = {};\n        Object.keys(options).forEach(function (key) {\n            var opt = options[key];\n            if (typeof opt == \"string\")\n                opt = { forwardTo: opt };\n            opt.name || (opt.name = key);\n            obj.$options[opt.name] = opt;\n            if (\"initialValue\" in opt)\n                obj[\"$\" + opt.name] = opt.initialValue;\n        });\n        oop.implement(obj, optionsProvider);\n        return this;\n    };\n    this.resetOptions = function (obj) {\n        Object.keys(obj.$options).forEach(function (key) {\n            var opt = obj.$options[key];\n            if (\"value\" in opt)\n                obj.setOption(key, opt.value);\n        });\n    };\n    this.setDefaultValue = function (path, name, value) {\n        if (!path) {\n            for (path in this.$defaultOptions)\n                if (this.$defaultOptions[path][name])\n                    break;\n            if (!this.$defaultOptions[path][name])\n                return false;\n        }\n        var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n        if (opts[name]) {\n            if (opts.forwardTo)\n                this.setDefaultValue(opts.forwardTo, name, value);\n            else\n                opts[name].value = value;\n        }\n    };\n    this.setDefaultValues = function (path, optionHash) {\n        Object.keys(optionHash).forEach(function (key) {\n            this.setDefaultValue(path, key, optionHash[key]);\n        }, this);\n    };\n    this.warn = warn;\n    this.reportError = reportError;\n}).call(AppConfig.prototype);\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/theme/textmate.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tm .ace_gutter {\\n  background: #f0f0f0;\\n  color: #333;\\n}\\n\\n.ace-tm .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8;\\n}\\n\\n.ace-tm .ace_fold {\\n    background-color: #6B72E6;\\n}\\n\\n.ace-tm {\\n  background-color: #FFFFFF;\\n  color: black;\\n}\\n\\n.ace-tm .ace_cursor {\\n  color: black;\\n}\\n        \\n.ace-tm .ace_invisible {\\n  color: rgb(191, 191, 191);\\n}\\n\\n.ace-tm .ace_storage,\\n.ace-tm .ace_keyword {\\n  color: blue;\\n}\\n\\n.ace-tm .ace_constant {\\n  color: rgb(197, 6, 11);\\n}\\n\\n.ace-tm .ace_constant.ace_buildin {\\n  color: rgb(88, 72, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_language {\\n  color: rgb(88, 92, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_library {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_invalid {\\n  background-color: rgba(255, 0, 0, 0.1);\\n  color: red;\\n}\\n\\n.ace-tm .ace_support.ace_function {\\n  color: rgb(60, 76, 114);\\n}\\n\\n.ace-tm .ace_support.ace_constant {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_support.ace_type,\\n.ace-tm .ace_support.ace_class {\\n  color: rgb(109, 121, 222);\\n}\\n\\n.ace-tm .ace_keyword.ace_operator {\\n  color: rgb(104, 118, 135);\\n}\\n\\n.ace-tm .ace_string {\\n  color: rgb(3, 106, 7);\\n}\\n\\n.ace-tm .ace_comment {\\n  color: rgb(76, 136, 107);\\n}\\n\\n.ace-tm .ace_comment.ace_doc {\\n  color: rgb(0, 102, 255);\\n}\\n\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\n  color: rgb(128, 159, 191);\\n}\\n\\n.ace-tm .ace_constant.ace_numeric {\\n  color: rgb(0, 0, 205);\\n}\\n\\n.ace-tm .ace_variable {\\n  color: rgb(49, 132, 149);\\n}\\n\\n.ace-tm .ace_xml-pe {\\n  color: rgb(104, 104, 91);\\n}\\n\\n.ace-tm .ace_entity.ace_name.ace_function {\\n  color: #0000A2;\\n}\\n\\n\\n.ace-tm .ace_heading {\\n  color: rgb(12, 7, 255);\\n}\\n\\n.ace-tm .ace_list {\\n  color:rgb(185, 6, 144);\\n}\\n\\n.ace-tm .ace_meta.ace_tag {\\n  color:rgb(0, 22, 142);\\n}\\n\\n.ace-tm .ace_string.ace_regex {\\n  color: rgb(255, 0, 0)\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selection {\\n  background: rgb(181, 213, 255);\\n}\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px white;\\n}\\n.ace-tm .ace_marker-layer .ace_step {\\n  background: rgb(252, 255, 0);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_stack {\\n  background: rgb(164, 229, 101);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_active-line {\\n  background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-tm .ace_gutter-active-line {\\n    background-color : #dcdcdc;\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selected-word {\\n  background: rgb(250, 250, 255);\\n  border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-tm .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-tm .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate.css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate.css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\",\"ace/theme/textmate\"], function(require, exports, module){\"no use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\nmodule.exports = exports = new AppConfig();\nvar options = {\n    packaged: false,\n    workerPath: null,\n    modePath: null,\n    themePath: null,\n    basePath: \"\",\n    suffix: \".js\",\n    $moduleUrls: {},\n    loadWorkerFromBlob: true,\n    sharedPopups: false,\n    useStrictCSP: null\n};\nexports.get = function (key) {\n    if (!options.hasOwnProperty(key))\n        throw new Error(\"Unknown config key: \" + key);\n    return options[key];\n};\nexports.set = function (key, value) {\n    if (options.hasOwnProperty(key))\n        options[key] = value;\n    else if (this.setDefaultValue(\"\", key, value) == false)\n        throw new Error(\"Unknown config key: \" + key);\n    if (key == \"useStrictCSP\")\n        dom.useStrictCSP(value);\n};\nexports.all = function () {\n    return lang.copyObject(options);\n};\nexports.$modes = {};\nexports.moduleUrl = function (name, component) {\n    if (options.$moduleUrls[name])\n        return options.$moduleUrls[name];\n    var parts = name.split(\"/\");\n    component = component || parts[parts.length - 2] || \"\";\n    var sep = component == \"snippets\" ? \"/\" : \"-\";\n    var base = parts[parts.length - 1];\n    if (component == \"worker\" && sep == \"-\") {\n        var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n        base = base.replace(re, \"\");\n    }\n    if ((!base || base == component) && parts.length > 1)\n        base = parts[parts.length - 2];\n    var path = options[component + \"Path\"];\n    if (path == null) {\n        path = options.basePath;\n    }\n    else if (sep == \"/\") {\n        component = sep = \"\";\n    }\n    if (path && path.slice(-1) != \"/\")\n        path += \"/\";\n    return path + component + sep + base + this.get(\"suffix\");\n};\nexports.setModuleUrl = function (name, subst) {\n    return options.$moduleUrls[name] = subst;\n};\nvar loader = function (moduleName, cb) {\n    if (moduleName == \"ace/theme/textmate\")\n        return cb(null, require(\"./theme/textmate\"));\n    return console.error(\"loader is not configured\");\n};\nexports.setLoader = function (cb) {\n    loader = cb;\n};\nexports.$loading = {};\nexports.loadModule = function (moduleName, onLoad) {\n    var module, moduleType;\n    if (Array.isArray(moduleName)) {\n        moduleType = moduleName[0];\n        moduleName = moduleName[1];\n    }\n    try {\n        module = require(moduleName);\n    }\n    catch (e) { }\n    if (module && !exports.$loading[moduleName])\n        return onLoad && onLoad(module);\n    if (!exports.$loading[moduleName])\n        exports.$loading[moduleName] = [];\n    exports.$loading[moduleName].push(onLoad);\n    if (exports.$loading[moduleName].length > 1)\n        return;\n    var afterLoad = function () {\n        loader(moduleName, function (err, module) {\n            exports._emit(\"load.module\", { name: moduleName, module: module });\n            var listeners = exports.$loading[moduleName];\n            exports.$loading[moduleName] = null;\n            listeners.forEach(function (onLoad) {\n                onLoad && onLoad(module);\n            });\n        });\n    };\n    if (!exports.get(\"packaged\"))\n        return afterLoad();\n    net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n    reportErrorIfPathIsNotConfigured();\n};\nvar reportErrorIfPathIsNotConfigured = function () {\n    if (!options.basePath && !options.workerPath\n        && !options.modePath && !options.themePath\n        && !Object.keys(options.$moduleUrls).length) {\n        console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n        reportErrorIfPathIsNotConfigured = function () { };\n    }\n};\nexports.version = \"1.12.3\";\n\n});\n\nace.define(\"ace/loader_build\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\nvar config = require(\"./config\");\nconfig.setLoader(function(moduleName, cb) {\n    require([moduleName], function(module) {\n        cb(null, module);\n    });\n});\n\nvar global = (function() {\n    return this || typeof window != \"undefined\" && window;\n})();\n\nmodule.exports = function(ace) {\n    config.init = init;\n    ace.require = require;\n\n    if (typeof define === \"function\")\n        ace.define = define;\n};\ninit(true);function init(packaged) {\n\n    if (!global || !global.document)\n        return;\n    \n    config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && define.packaged));\n\n    var scriptOptions = {};\n    var scriptUrl = \"\";\n    var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n    var currentDocument = currentScript && currentScript.ownerDocument || document;\n    \n    var scripts = currentDocument.getElementsByTagName(\"script\");\n    for (var i=0; i<scripts.length; i++) {\n        var script = scripts[i];\n\n        var src = script.src || script.getAttribute(\"src\");\n        if (!src)\n            continue;\n\n        var attributes = script.attributes;\n        for (var j=0, l=attributes.length; j < l; j++) {\n            var attr = attributes[j];\n            if (attr.name.indexOf(\"data-ace-\") === 0) {\n                scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n            }\n        }\n\n        var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n        if (m)\n            scriptUrl = m[1];\n    }\n\n    if (scriptUrl) {\n        scriptOptions.base = scriptOptions.base || scriptUrl;\n        scriptOptions.packaged = true;\n    }\n\n    scriptOptions.basePath = scriptOptions.base;\n    scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n    scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n    scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n    delete scriptOptions.base;\n\n    for (var key in scriptOptions)\n        if (typeof scriptOptions[key] !== \"undefined\")\n            config.set(key, scriptOptions[key]);\n}\n\nfunction deHyphenate(str) {\n    return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module){/*! @license\n==========================================================================\nSproutCore -- JavaScript Application Framework\ncopyright 2006-2009, Sprout Systems Inc., Apple Inc. and contributors.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\nSproutCore and the SproutCore logo are trademarks of Sprout Systems, Inc.\n\nFor more information about SproutCore, visit http://www.sproutcore.com\n\n\n==========================================================================\n@license */\n\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = (function () {\n    var ret = {\n        MODIFIER_KEYS: {\n            16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n            91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n        },\n        KEY_MODS: {\n            \"ctrl\": 1, \"alt\": 2, \"option\": 2, \"shift\": 4,\n            \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8,\n            \"control\": 1\n        },\n        FUNCTION_KEYS: {\n            8: \"Backspace\",\n            9: \"Tab\",\n            13: \"Return\",\n            19: \"Pause\",\n            27: \"Esc\",\n            32: \"Space\",\n            33: \"PageUp\",\n            34: \"PageDown\",\n            35: \"End\",\n            36: \"Home\",\n            37: \"Left\",\n            38: \"Up\",\n            39: \"Right\",\n            40: \"Down\",\n            44: \"Print\",\n            45: \"Insert\",\n            46: \"Delete\",\n            96: \"Numpad0\",\n            97: \"Numpad1\",\n            98: \"Numpad2\",\n            99: \"Numpad3\",\n            100: \"Numpad4\",\n            101: \"Numpad5\",\n            102: \"Numpad6\",\n            103: \"Numpad7\",\n            104: \"Numpad8\",\n            105: \"Numpad9\",\n            '-13': \"NumpadEnter\",\n            112: \"F1\",\n            113: \"F2\",\n            114: \"F3\",\n            115: \"F4\",\n            116: \"F5\",\n            117: \"F6\",\n            118: \"F7\",\n            119: \"F8\",\n            120: \"F9\",\n            121: \"F10\",\n            122: \"F11\",\n            123: \"F12\",\n            144: \"Numlock\",\n            145: \"Scrolllock\"\n        },\n        PRINTABLE_KEYS: {\n            32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n            54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n            66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n            73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n            80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n            87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n            186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n            219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n        }\n    };\n    var name, i;\n    for (i in ret.FUNCTION_KEYS) {\n        name = ret.FUNCTION_KEYS[i].toLowerCase();\n        ret[name] = parseInt(i, 10);\n    }\n    for (i in ret.PRINTABLE_KEYS) {\n        name = ret.PRINTABLE_KEYS[i].toLowerCase();\n        ret[name] = parseInt(i, 10);\n    }\n    oop.mixin(ret, ret.MODIFIER_KEYS);\n    oop.mixin(ret, ret.PRINTABLE_KEYS);\n    oop.mixin(ret, ret.FUNCTION_KEYS);\n    ret.enter = ret[\"return\"];\n    ret.escape = ret.esc;\n    ret.del = ret[\"delete\"];\n    ret[173] = '-';\n    (function () {\n        var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n        for (var i = Math.pow(2, mods.length); i--;) {\n            ret.KEY_MODS[i] = mods.filter(function (x) {\n                return i & ret.KEY_MODS[x];\n            }).join(\"-\") + \"-\";\n        }\n    })();\n    ret.KEY_MODS[0] = \"\";\n    ret.KEY_MODS[-1] = \"input-\";\n    return ret;\n})();\noop.mixin(exports, Keys);\nexports.keyCodeToString = function (keyCode) {\n    var keyString = Keys[keyCode];\n    if (typeof keyString != \"string\")\n        keyString = String.fromCharCode(keyCode);\n    return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\nvar pressedKeys = null;\nvar ts = 0;\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n    activeListenerOptions = false;\n    try {\n        document.createComment(\"\").addEventListener(\"test\", function () { }, {\n            get passive() {\n                activeListenerOptions = { passive: false };\n            }\n        });\n    }\n    catch (e) { }\n}\nfunction getListenerOptions() {\n    if (activeListenerOptions == undefined)\n        detectListenerOptionsSupport();\n    return activeListenerOptions;\n}\nfunction EventListener(elem, type, callback) {\n    this.elem = elem;\n    this.type = type;\n    this.callback = callback;\n}\nEventListener.prototype.destroy = function () {\n    removeListener(this.elem, this.type, this.callback);\n    this.elem = this.type = this.callback = undefined;\n};\nvar addListener = exports.addListener = function (elem, type, callback, destroyer) {\n    elem.addEventListener(type, callback, getListenerOptions());\n    if (destroyer)\n        destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\nvar removeListener = exports.removeListener = function (elem, type, callback) {\n    elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function (e) {\n    exports.stopPropagation(e);\n    exports.preventDefault(e);\n    return false;\n};\nexports.stopPropagation = function (e) {\n    if (e.stopPropagation)\n        e.stopPropagation();\n};\nexports.preventDefault = function (e) {\n    if (e.preventDefault)\n        e.preventDefault();\n};\nexports.getButton = function (e) {\n    if (e.type == \"dblclick\")\n        return 0;\n    if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n        return 2;\n    return e.button;\n};\nexports.capture = function (el, eventHandler, releaseCaptureHandler) {\n    var ownerDocument = el && el.ownerDocument || document;\n    function onMouseUp(e) {\n        eventHandler && eventHandler(e);\n        releaseCaptureHandler && releaseCaptureHandler(e);\n        removeListener(ownerDocument, \"mousemove\", eventHandler);\n        removeListener(ownerDocument, \"mouseup\", onMouseUp);\n        removeListener(ownerDocument, \"dragstart\", onMouseUp);\n    }\n    addListener(ownerDocument, \"mousemove\", eventHandler);\n    addListener(ownerDocument, \"mouseup\", onMouseUp);\n    addListener(ownerDocument, \"dragstart\", onMouseUp);\n    return onMouseUp;\n};\nexports.addMouseWheelListener = function (el, callback, destroyer) {\n    addListener(el, \"wheel\", function (e) {\n        var factor = 0.15;\n        var deltaX = e.deltaX || 0;\n        var deltaY = e.deltaY || 0;\n        switch (e.deltaMode) {\n            case e.DOM_DELTA_PIXEL:\n                e.wheelX = deltaX * factor;\n                e.wheelY = deltaY * factor;\n                break;\n            case e.DOM_DELTA_LINE:\n                var linePixels = 15;\n                e.wheelX = deltaX * linePixels;\n                e.wheelY = deltaY * linePixels;\n                break;\n            case e.DOM_DELTA_PAGE:\n                var pagePixels = 150;\n                e.wheelX = deltaX * pagePixels;\n                e.wheelY = deltaY * pagePixels;\n                break;\n        }\n        callback(e);\n    }, destroyer);\n};\nexports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n    var clicks = 0;\n    var startX, startY, timer;\n    var eventNames = {\n        2: \"dblclick\",\n        3: \"tripleclick\",\n        4: \"quadclick\"\n    };\n    function onMousedown(e) {\n        if (exports.getButton(e) !== 0) {\n            clicks = 0;\n        }\n        else if (e.detail > 1) {\n            clicks++;\n            if (clicks > 4)\n                clicks = 1;\n        }\n        else {\n            clicks = 1;\n        }\n        if (useragent.isIE) {\n            var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n            if (!timer || isNewClick)\n                clicks = 1;\n            if (timer)\n                clearTimeout(timer);\n            timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n            if (clicks == 1) {\n                startX = e.clientX;\n                startY = e.clientY;\n            }\n        }\n        e._clicks = clicks;\n        eventHandler[callbackName](\"mousedown\", e);\n        if (clicks > 4)\n            clicks = 0;\n        else if (clicks > 1)\n            return eventHandler[callbackName](eventNames[clicks], e);\n    }\n    if (!Array.isArray(elements))\n        elements = [elements];\n    elements.forEach(function (el) {\n        addListener(el, \"mousedown\", onMousedown, destroyer);\n    });\n};\nvar getModifierHash = function (e) {\n    return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n};\nexports.getModifierString = function (e) {\n    return keys.KEY_MODS[getModifierHash(e)];\n};\nfunction normalizeCommandKeys(callback, e, keyCode) {\n    var hashId = getModifierHash(e);\n    if (!useragent.isMac && pressedKeys) {\n        if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n            hashId |= 8;\n        if (pressedKeys.altGr) {\n            if ((3 & hashId) != 3)\n                pressedKeys.altGr = 0;\n            else\n                return;\n        }\n        if (keyCode === 18 || keyCode === 17) {\n            var location = \"location\" in e ? e.location : e.keyLocation;\n            if (keyCode === 17 && location === 1) {\n                if (pressedKeys[keyCode] == 1)\n                    ts = e.timeStamp;\n            }\n            else if (keyCode === 18 && hashId === 3 && location === 2) {\n                var dt = e.timeStamp - ts;\n                if (dt < 50)\n                    pressedKeys.altGr = true;\n            }\n        }\n    }\n    if (keyCode in keys.MODIFIER_KEYS) {\n        keyCode = -1;\n    }\n    if (!hashId && keyCode === 13) {\n        var location = \"location\" in e ? e.location : e.keyLocation;\n        if (location === 3) {\n            callback(e, hashId, -keyCode);\n            if (e.defaultPrevented)\n                return;\n        }\n    }\n    if (useragent.isChromeOS && hashId & 8) {\n        callback(e, hashId, keyCode);\n        if (e.defaultPrevented)\n            return;\n        else\n            hashId &= ~8;\n    }\n    if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n        return false;\n    }\n    return callback(e, hashId, keyCode);\n}\nexports.addCommandKeyListener = function (el, callback, destroyer) {\n    if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n        var lastKeyDownKeyCode = null;\n        addListener(el, \"keydown\", function (e) {\n            lastKeyDownKeyCode = e.keyCode;\n        }, destroyer);\n        addListener(el, \"keypress\", function (e) {\n            return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n        }, destroyer);\n    }\n    else {\n        var lastDefaultPrevented = null;\n        addListener(el, \"keydown\", function (e) {\n            pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n            var result = normalizeCommandKeys(callback, e, e.keyCode);\n            lastDefaultPrevented = e.defaultPrevented;\n            return result;\n        }, destroyer);\n        addListener(el, \"keypress\", function (e) {\n            if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n                exports.stopEvent(e);\n                lastDefaultPrevented = null;\n            }\n        }, destroyer);\n        addListener(el, \"keyup\", function (e) {\n            pressedKeys[e.keyCode] = null;\n        }, destroyer);\n        if (!pressedKeys) {\n            resetPressedKeys();\n            addListener(window, \"focus\", resetPressedKeys);\n        }\n    }\n};\nfunction resetPressedKeys() {\n    pressedKeys = Object.create(null);\n}\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n    var postMessageId = 1;\n    exports.nextTick = function (callback, win) {\n        win = win || window;\n        var messageName = \"zero-timeout-message-\" + (postMessageId++);\n        var listener = function (e) {\n            if (e.data == messageName) {\n                exports.stopPropagation(e);\n                removeListener(win, \"message\", listener);\n                callback();\n            }\n        };\n        addListener(win, \"message\", listener);\n        win.postMessage(messageName, \"*\");\n    };\n}\nexports.$idleBlocked = false;\nexports.onIdle = function (cb, timeout) {\n    return setTimeout(function handler() {\n        if (!exports.$idleBlocked) {\n            cb();\n        }\n        else {\n            setTimeout(handler, 100);\n        }\n    }, timeout);\n};\nexports.$idleBlockId = null;\nexports.blockIdle = function (delay) {\n    if (exports.$idleBlockId)\n        clearTimeout(exports.$idleBlockId);\n    exports.$idleBlocked = true;\n    exports.$idleBlockId = setTimeout(function () {\n        exports.$idleBlocked = false;\n    }, delay || 100);\n};\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n    || window.mozRequestAnimationFrame\n    || window.webkitRequestAnimationFrame\n    || window.msRequestAnimationFrame\n    || window.oRequestAnimationFrame);\nif (exports.nextFrame)\n    exports.nextFrame = exports.nextFrame.bind(window);\nelse\n    exports.nextFrame = function (callback) {\n        setTimeout(callback, 17);\n    };\n\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar $cancelT;\nmodule.exports = {\n    lineMode: false,\n    pasteCancelled: function () {\n        if ($cancelT && $cancelT > Date.now() - 50)\n            return true;\n        return $cancelT = false;\n    },\n    cancel: function () {\n        $cancelT = Date.now();\n    }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\nvar TextInput = function (parentNode, host) {\n    var text = dom.createElement(\"textarea\");\n    text.className = \"ace_text-input\";\n    text.setAttribute(\"wrap\", \"off\");\n    text.setAttribute(\"autocorrect\", \"off\");\n    text.setAttribute(\"autocapitalize\", \"off\");\n    text.setAttribute(\"spellcheck\", false);\n    text.style.opacity = \"0\";\n    parentNode.insertBefore(text, parentNode.firstChild);\n    var copied = false;\n    var pasted = false;\n    var inComposition = false;\n    var sendingText = false;\n    var tempStyle = '';\n    if (!isMobile)\n        text.style.fontSize = \"1px\";\n    var commandMode = false;\n    var ignoreFocusEvents = false;\n    var lastValue = \"\";\n    var lastSelectionStart = 0;\n    var lastSelectionEnd = 0;\n    var lastRestoreEnd = 0;\n    try {\n        var isFocused = document.activeElement === text;\n    }\n    catch (e) { }\n    event.addListener(text, \"blur\", function (e) {\n        if (ignoreFocusEvents)\n            return;\n        host.onBlur(e);\n        isFocused = false;\n    }, host);\n    event.addListener(text, \"focus\", function (e) {\n        if (ignoreFocusEvents)\n            return;\n        isFocused = true;\n        if (useragent.isEdge) {\n            try {\n                if (!document.hasFocus())\n                    return;\n            }\n            catch (e) { }\n        }\n        host.onFocus(e);\n        if (useragent.isEdge)\n            setTimeout(resetSelection);\n        else\n            resetSelection();\n    }, host);\n    this.$focusScroll = false;\n    this.focus = function () {\n        if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n            return text.focus({ preventScroll: true });\n        var top = text.style.top;\n        text.style.position = \"fixed\";\n        text.style.top = \"0px\";\n        try {\n            var isTransformed = text.getBoundingClientRect().top != 0;\n        }\n        catch (e) {\n            return;\n        }\n        var ancestors = [];\n        if (isTransformed) {\n            var t = text.parentElement;\n            while (t && t.nodeType == 1) {\n                ancestors.push(t);\n                t.setAttribute(\"ace_nocontext\", true);\n                if (!t.parentElement && t.getRootNode)\n                    t = t.getRootNode().host;\n                else\n                    t = t.parentElement;\n            }\n        }\n        text.focus({ preventScroll: true });\n        if (isTransformed) {\n            ancestors.forEach(function (p) {\n                p.removeAttribute(\"ace_nocontext\");\n            });\n        }\n        setTimeout(function () {\n            text.style.position = \"\";\n            if (text.style.top == \"0px\")\n                text.style.top = top;\n        }, 0);\n    };\n    this.blur = function () {\n        text.blur();\n    };\n    this.isFocused = function () {\n        return isFocused;\n    };\n    host.on(\"beforeEndOperation\", function () {\n        var curOp = host.curOp;\n        var commandName = curOp && curOp.command && curOp.command.name;\n        if (commandName == \"insertstring\")\n            return;\n        var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n        if (inComposition && isUserAction) {\n            lastValue = text.value = \"\";\n            onCompositionEnd();\n        }\n        resetSelection();\n    });\n    var resetSelection = isIOS\n        ? function (value) {\n            if (!isFocused || (copied && !value) || sendingText)\n                return;\n            if (!value)\n                value = \"\";\n            var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n            if (newValue != text.value)\n                text.value = lastValue = newValue;\n            var selectionStart = 4;\n            var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n            if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n                text.setSelectionRange(selectionStart, selectionEnd);\n            }\n            lastSelectionStart = selectionStart;\n            lastSelectionEnd = selectionEnd;\n        }\n        : function () {\n            if (inComposition || sendingText)\n                return;\n            if (!isFocused && !afterContextMenu)\n                return;\n            inComposition = true;\n            var selectionStart = 0;\n            var selectionEnd = 0;\n            var line = \"\";\n            if (host.session) {\n                var selection = host.selection;\n                var range = selection.getRange();\n                var row = selection.cursor.row;\n                selectionStart = range.start.column;\n                selectionEnd = range.end.column;\n                line = host.session.getLine(row);\n                if (range.start.row != row) {\n                    var prevLine = host.session.getLine(row - 1);\n                    selectionStart = range.start.row < row - 1 ? 0 : selectionStart;\n                    selectionEnd += prevLine.length + 1;\n                    line = prevLine + \"\\n\" + line;\n                }\n                else if (range.end.row != row) {\n                    var nextLine = host.session.getLine(row + 1);\n                    selectionEnd = range.end.row > row + 1 ? nextLine.length : selectionEnd;\n                    selectionEnd += line.length + 1;\n                    line = line + \"\\n\" + nextLine;\n                }\n                else if (isMobile && row > 0) {\n                    line = \"\\n\" + line;\n                    selectionEnd += 1;\n                    selectionStart += 1;\n                }\n                if (line.length > MAX_LINE_LENGTH) {\n                    if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n                        line = line.slice(0, MAX_LINE_LENGTH);\n                    }\n                    else {\n                        line = \"\\n\";\n                        if (selectionStart == selectionEnd) {\n                            selectionStart = selectionEnd = 0;\n                        }\n                        else {\n                            selectionStart = 0;\n                            selectionEnd = 1;\n                        }\n                    }\n                }\n            }\n            var newValue = line + \"\\n\\n\";\n            if (newValue != lastValue) {\n                text.value = lastValue = newValue;\n                lastSelectionStart = lastSelectionEnd = newValue.length;\n            }\n            if (afterContextMenu) {\n                lastSelectionStart = text.selectionStart;\n                lastSelectionEnd = text.selectionEnd;\n            }\n            if (lastSelectionEnd != selectionEnd\n                || lastSelectionStart != selectionStart\n                || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n            ) {\n                try {\n                    text.setSelectionRange(selectionStart, selectionEnd);\n                    lastSelectionStart = selectionStart;\n                    lastSelectionEnd = selectionEnd;\n                }\n                catch (e) { }\n            }\n            inComposition = false;\n        };\n    this.resetSelection = resetSelection;\n    if (isFocused)\n        host.onFocus();\n    var isAllSelected = function (text) {\n        return text.selectionStart === 0 && text.selectionEnd >= lastValue.length\n            && text.value === lastValue && lastValue\n            && text.selectionEnd !== lastSelectionEnd;\n    };\n    var onSelect = function (e) {\n        if (inComposition)\n            return;\n        if (copied) {\n            copied = false;\n        }\n        else if (isAllSelected(text)) {\n            host.selectAll();\n            resetSelection();\n        }\n        else if (isMobile && text.selectionStart != lastSelectionStart) {\n            resetSelection();\n        }\n    };\n    var inputHandler = null;\n    this.setInputHandler = function (cb) { inputHandler = cb; };\n    this.getInputHandler = function () { return inputHandler; };\n    var afterContextMenu = false;\n    var sendText = function (value, fromInput) {\n        if (afterContextMenu)\n            afterContextMenu = false;\n        if (pasted) {\n            resetSelection();\n            if (value)\n                host.onPaste(value);\n            pasted = false;\n            return \"\";\n        }\n        else {\n            var selectionStart = text.selectionStart;\n            var selectionEnd = text.selectionEnd;\n            var extendLeft = lastSelectionStart;\n            var extendRight = lastValue.length - lastSelectionEnd;\n            var inserted = value;\n            var restoreStart = value.length - selectionStart;\n            var restoreEnd = value.length - selectionEnd;\n            var i = 0;\n            while (extendLeft > 0 && lastValue[i] == value[i]) {\n                i++;\n                extendLeft--;\n            }\n            inserted = inserted.slice(i);\n            i = 1;\n            while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1 && lastValue[lastValue.length - i] == value[value.length - i]) {\n                i++;\n                extendRight--;\n            }\n            restoreStart -= i - 1;\n            restoreEnd -= i - 1;\n            var endIndex = inserted.length - i + 1;\n            if (endIndex < 0) {\n                extendLeft = -endIndex;\n                endIndex = 0;\n            }\n            inserted = inserted.slice(0, endIndex);\n            if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n                return \"\";\n            sendingText = true;\n            var shouldReset = false;\n            if (useragent.isAndroid && inserted == \". \") {\n                inserted = \"  \";\n                shouldReset = true;\n            }\n            if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n                host.onTextInput(inserted);\n            }\n            else {\n                host.onTextInput(inserted, {\n                    extendLeft: extendLeft,\n                    extendRight: extendRight,\n                    restoreStart: restoreStart,\n                    restoreEnd: restoreEnd\n                });\n            }\n            sendingText = false;\n            lastValue = value;\n            lastSelectionStart = selectionStart;\n            lastSelectionEnd = selectionEnd;\n            lastRestoreEnd = restoreEnd;\n            return shouldReset ? \"\\n\" : inserted;\n        }\n    };\n    var onInput = function (e) {\n        if (inComposition)\n            return onCompositionUpdate();\n        if (e && e.inputType) {\n            if (e.inputType == \"historyUndo\")\n                return host.execCommand(\"undo\");\n            if (e.inputType == \"historyRedo\")\n                return host.execCommand(\"redo\");\n        }\n        var data = text.value;\n        var inserted = sendText(data, true);\n        if (data.length > MAX_LINE_LENGTH + 100\n            || valueResetRegex.test(inserted)\n            || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd) {\n            resetSelection();\n        }\n    };\n    var handleClipboardData = function (e, data, forceIEMime) {\n        var clipboardData = e.clipboardData || window.clipboardData;\n        if (!clipboardData || BROKEN_SETDATA)\n            return;\n        var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n        try {\n            if (data) {\n                return clipboardData.setData(mime, data) !== false;\n            }\n            else {\n                return clipboardData.getData(mime);\n            }\n        }\n        catch (e) {\n            if (!forceIEMime)\n                return handleClipboardData(e, data, true);\n        }\n    };\n    var doCopy = function (e, isCut) {\n        var data = host.getCopyText();\n        if (!data)\n            return event.preventDefault(e);\n        if (handleClipboardData(e, data)) {\n            if (isIOS) {\n                resetSelection(data);\n                copied = data;\n                setTimeout(function () {\n                    copied = false;\n                }, 10);\n            }\n            isCut ? host.onCut() : host.onCopy();\n            event.preventDefault(e);\n        }\n        else {\n            copied = true;\n            text.value = data;\n            text.select();\n            setTimeout(function () {\n                copied = false;\n                resetSelection();\n                isCut ? host.onCut() : host.onCopy();\n            });\n        }\n    };\n    var onCut = function (e) {\n        doCopy(e, true);\n    };\n    var onCopy = function (e) {\n        doCopy(e, false);\n    };\n    var onPaste = function (e) {\n        var data = handleClipboardData(e);\n        if (clipboard.pasteCancelled())\n            return;\n        if (typeof data == \"string\") {\n            if (data)\n                host.onPaste(data, e);\n            if (useragent.isIE)\n                setTimeout(resetSelection);\n            event.preventDefault(e);\n        }\n        else {\n            text.value = \"\";\n            pasted = true;\n        }\n    };\n    event.addCommandKeyListener(text, host.onCommandKey.bind(host), host);\n    event.addListener(text, \"select\", onSelect, host);\n    event.addListener(text, \"input\", onInput, host);\n    event.addListener(text, \"cut\", onCut, host);\n    event.addListener(text, \"copy\", onCopy, host);\n    event.addListener(text, \"paste\", onPaste, host);\n    if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n        event.addListener(parentNode, \"keydown\", function (e) {\n            if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n                return;\n            switch (e.keyCode) {\n                case 67:\n                    onCopy(e);\n                    break;\n                case 86:\n                    onPaste(e);\n                    break;\n                case 88:\n                    onCut(e);\n                    break;\n            }\n        }, host);\n    }\n    var onCompositionStart = function (e) {\n        if (inComposition || !host.onCompositionStart || host.$readOnly)\n            return;\n        inComposition = {};\n        if (commandMode)\n            return;\n        if (e.data)\n            inComposition.useTextareaForIME = false;\n        setTimeout(onCompositionUpdate, 0);\n        host._signal(\"compositionStart\");\n        host.on(\"mousedown\", cancelComposition);\n        var range = host.getSelectionRange();\n        range.end.row = range.start.row;\n        range.end.column = range.start.column;\n        inComposition.markerRange = range;\n        inComposition.selectionStart = lastSelectionStart;\n        host.onCompositionStart(inComposition);\n        if (inComposition.useTextareaForIME) {\n            lastValue = text.value = \"\";\n            lastSelectionStart = 0;\n            lastSelectionEnd = 0;\n        }\n        else {\n            if (text.msGetInputContext)\n                inComposition.context = text.msGetInputContext();\n            if (text.getInputContext)\n                inComposition.context = text.getInputContext();\n        }\n    };\n    var onCompositionUpdate = function () {\n        if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n            return;\n        if (commandMode)\n            return cancelComposition();\n        if (inComposition.useTextareaForIME) {\n            host.onCompositionUpdate(text.value);\n        }\n        else {\n            var data = text.value;\n            sendText(data);\n            if (inComposition.markerRange) {\n                if (inComposition.context) {\n                    inComposition.markerRange.start.column = inComposition.selectionStart\n                        = inComposition.context.compositionStartOffset;\n                }\n                inComposition.markerRange.end.column = inComposition.markerRange.start.column\n                    + lastSelectionEnd - inComposition.selectionStart + lastRestoreEnd;\n            }\n        }\n    };\n    var onCompositionEnd = function (e) {\n        if (!host.onCompositionEnd || host.$readOnly)\n            return;\n        inComposition = false;\n        host.onCompositionEnd();\n        host.off(\"mousedown\", cancelComposition);\n        if (e)\n            onInput();\n    };\n    function cancelComposition() {\n        ignoreFocusEvents = true;\n        text.blur();\n        text.focus();\n        ignoreFocusEvents = false;\n    }\n    var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n    function onKeyup(e) {\n        if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n            if (!inComposition)\n                lastValue = text.value;\n            lastSelectionStart = lastSelectionEnd = -1;\n            resetSelection();\n        }\n        syncComposition();\n    }\n    event.addListener(text, \"compositionstart\", onCompositionStart, host);\n    event.addListener(text, \"compositionupdate\", onCompositionUpdate, host);\n    event.addListener(text, \"keyup\", onKeyup, host);\n    event.addListener(text, \"keydown\", syncComposition, host);\n    event.addListener(text, \"compositionend\", onCompositionEnd, host);\n    this.getElement = function () {\n        return text;\n    };\n    this.setCommandMode = function (value) {\n        commandMode = value;\n        text.readOnly = false;\n    };\n    this.setReadOnly = function (readOnly) {\n        if (!commandMode)\n            text.readOnly = readOnly;\n    };\n    this.setCopyWithEmptySelection = function (value) {\n    };\n    this.onContextMenu = function (e) {\n        afterContextMenu = true;\n        resetSelection();\n        host._emit(\"nativecontextmenu\", { target: host, domEvent: e });\n        this.moveToMouse(e, true);\n    };\n    this.moveToMouse = function (e, bringToFront) {\n        if (!tempStyle)\n            tempStyle = text.style.cssText;\n        text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n            + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n            + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n        var rect = host.container.getBoundingClientRect();\n        var style = dom.computedStyle(host.container);\n        var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n        var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n        var maxTop = rect.bottom - top - text.clientHeight - 2;\n        var move = function (e) {\n            dom.translate(text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n        };\n        move(e);\n        if (e.type != \"mousedown\")\n            return;\n        host.renderer.$isMousePressed = true;\n        clearTimeout(closeTimeout);\n        if (useragent.isWin)\n            event.capture(host.container, move, onContextMenuClose);\n    };\n    this.onContextMenuClose = onContextMenuClose;\n    var closeTimeout;\n    function onContextMenuClose() {\n        clearTimeout(closeTimeout);\n        closeTimeout = setTimeout(function () {\n            if (tempStyle) {\n                text.style.cssText = tempStyle;\n                tempStyle = '';\n            }\n            host.renderer.$isMousePressed = false;\n            if (host.renderer.$keepTextAreaAtCursor)\n                host.renderer.$moveTextAreaToCursor();\n        }, 0);\n    }\n    var onContextMenu = function (e) {\n        host.textInput.onContextMenu(e);\n        onContextMenuClose();\n    };\n    event.addListener(text, \"mouseup\", onContextMenu, host);\n    event.addListener(text, \"mousedown\", function (e) {\n        e.preventDefault();\n        onContextMenuClose();\n    }, host);\n    event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu, host);\n    event.addListener(text, \"contextmenu\", onContextMenu, host);\n    if (isIOS)\n        addIosSelectionHandler(parentNode, host, text);\n    function addIosSelectionHandler(parentNode, host, text) {\n        var typingResetTimeout = null;\n        var typing = false;\n        text.addEventListener(\"keydown\", function (e) {\n            if (typingResetTimeout)\n                clearTimeout(typingResetTimeout);\n            typing = true;\n        }, true);\n        text.addEventListener(\"keyup\", function (e) {\n            typingResetTimeout = setTimeout(function () {\n                typing = false;\n            }, 100);\n        }, true);\n        var detectArrowKeys = function (e) {\n            if (document.activeElement !== text)\n                return;\n            if (typing || inComposition || host.$mouseHandler.isMousePressed)\n                return;\n            if (copied) {\n                return;\n            }\n            var selectionStart = text.selectionStart;\n            var selectionEnd = text.selectionEnd;\n            var key = null;\n            var modifier = 0;\n            if (selectionStart == 0) {\n                key = KEYS.up;\n            }\n            else if (selectionStart == 1) {\n                key = KEYS.home;\n            }\n            else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n                key = KEYS.end;\n            }\n            else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n                key = KEYS.left;\n                modifier = MODS.option;\n            }\n            else if (selectionStart < lastSelectionStart\n                || (selectionStart == lastSelectionStart\n                    && lastSelectionEnd != lastSelectionStart\n                    && selectionStart == selectionEnd)) {\n                key = KEYS.left;\n            }\n            else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n                key = KEYS.down;\n            }\n            else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n                key = KEYS.right;\n                modifier = MODS.option;\n            }\n            else if (selectionEnd > lastSelectionEnd\n                || (selectionEnd == lastSelectionEnd\n                    && lastSelectionEnd != lastSelectionStart\n                    && selectionStart == selectionEnd)) {\n                key = KEYS.right;\n            }\n            if (selectionStart !== selectionEnd)\n                modifier |= MODS.shift;\n            if (key) {\n                var result = host.onCommandKey({}, modifier, key);\n                if (!result && host.commands) {\n                    key = KEYS.keyCodeToString(key);\n                    var command = host.commands.findKeyCommand(modifier, key);\n                    if (command)\n                        host.execCommand(command);\n                }\n                lastSelectionStart = selectionStart;\n                lastSelectionEnd = selectionEnd;\n                resetSelection(\"\");\n            }\n        };\n        document.addEventListener(\"selectionchange\", detectArrowKeys);\n        host.on(\"destroy\", function () {\n            document.removeEventListener(\"selectionchange\", detectArrowKeys);\n        });\n    }\n    this.destroy = function () {\n        if (text.parentElement)\n            text.parentElement.removeChild(text);\n    };\n};\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n    isMobile = _isMobile;\n    isIOS = _isIOS;\n};\n\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"../lib/useragent\");\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\nfunction DefaultHandlers(mouseHandler) {\n    mouseHandler.$clickSelection = null;\n    var editor = mouseHandler.editor;\n    editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n    editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n    var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n        \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n    exports.forEach(function (x) {\n        mouseHandler[x] = this[x];\n    }, this);\n    mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n    mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n(function () {\n    this.onMouseDown = function (ev) {\n        var inSelection = ev.inSelection();\n        var pos = ev.getDocumentPosition();\n        this.mousedownEvent = ev;\n        var editor = this.editor;\n        var button = ev.getButton();\n        if (button !== 0) {\n            var selectionRange = editor.getSelectionRange();\n            var selectionEmpty = selectionRange.isEmpty();\n            if (selectionEmpty || button == 1)\n                editor.selection.moveToPosition(pos);\n            if (button == 2) {\n                editor.textInput.onContextMenu(ev.domEvent);\n                if (!useragent.isMozilla)\n                    ev.preventDefault();\n            }\n            return;\n        }\n        this.mousedownEvent.time = Date.now();\n        if (inSelection && !editor.isFocused()) {\n            editor.focus();\n            if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n                this.setState(\"focusWait\");\n                this.captureMouse(ev);\n                return;\n            }\n        }\n        this.captureMouse(ev);\n        this.startSelect(pos, ev.domEvent._clicks > 1);\n        return ev.preventDefault();\n    };\n    this.startSelect = function (pos, waitForClickSelection) {\n        pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var editor = this.editor;\n        if (!this.mousedownEvent)\n            return;\n        if (this.mousedownEvent.getShiftKey())\n            editor.selection.selectToPosition(pos);\n        else if (!waitForClickSelection)\n            editor.selection.moveToPosition(pos);\n        if (!waitForClickSelection)\n            this.select();\n        if (editor.renderer.scroller.setCapture) {\n            editor.renderer.scroller.setCapture();\n        }\n        editor.setStyle(\"ace_selecting\");\n        this.setState(\"select\");\n    };\n    this.select = function () {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        if (this.$clickSelection) {\n            var cmp = this.$clickSelection.comparePoint(cursor);\n            if (cmp == -1) {\n                anchor = this.$clickSelection.end;\n            }\n            else if (cmp == 1) {\n                anchor = this.$clickSelection.start;\n            }\n            else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n    this.extendSelectionBy = function (unitName) {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var range = editor.selection[unitName](cursor.row, cursor.column);\n        if (this.$clickSelection) {\n            var cmpStart = this.$clickSelection.comparePoint(range.start);\n            var cmpEnd = this.$clickSelection.comparePoint(range.end);\n            if (cmpStart == -1 && cmpEnd <= 0) {\n                anchor = this.$clickSelection.end;\n                if (range.end.row != cursor.row || range.end.column != cursor.column)\n                    cursor = range.start;\n            }\n            else if (cmpEnd == 1 && cmpStart >= 0) {\n                anchor = this.$clickSelection.start;\n                if (range.start.row != cursor.row || range.start.column != cursor.column)\n                    cursor = range.end;\n            }\n            else if (cmpStart == -1 && cmpEnd == 1) {\n                cursor = range.end;\n                anchor = range.start;\n            }\n            else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n    this.selectEnd =\n        this.selectAllEnd =\n            this.selectByWordsEnd =\n                this.selectByLinesEnd = function () {\n                    this.$clickSelection = null;\n                    this.editor.unsetStyle(\"ace_selecting\");\n                    if (this.editor.renderer.scroller.releaseCapture) {\n                        this.editor.renderer.scroller.releaseCapture();\n                    }\n                };\n    this.focusWait = function () {\n        var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n        var time = Date.now();\n        if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n            this.startSelect(this.mousedownEvent.getDocumentPosition());\n    };\n    this.onDoubleClick = function (ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n        var session = editor.session;\n        var range = session.getBracketRange(pos);\n        if (range) {\n            if (range.isEmpty()) {\n                range.start.column--;\n                range.end.column++;\n            }\n            this.setState(\"select\");\n        }\n        else {\n            range = editor.selection.getWordRange(pos.row, pos.column);\n            this.setState(\"selectByWords\");\n        }\n        this.$clickSelection = range;\n        this.select();\n    };\n    this.onTripleClick = function (ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n        this.setState(\"selectByLines\");\n        var range = editor.getSelectionRange();\n        if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n            this.$clickSelection = editor.selection.getLineRange(range.start.row);\n            this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n        }\n        else {\n            this.$clickSelection = editor.selection.getLineRange(pos.row);\n        }\n        this.select();\n    };\n    this.onQuadClick = function (ev) {\n        var editor = this.editor;\n        editor.selectAll();\n        this.$clickSelection = editor.getSelectionRange();\n        this.setState(\"selectAll\");\n    };\n    this.onMouseWheel = function (ev) {\n        if (ev.getAccelKey())\n            return;\n        if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n            ev.wheelX = ev.wheelY;\n            ev.wheelY = 0;\n        }\n        var editor = this.editor;\n        if (!this.$lastScroll)\n            this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n        var prevScroll = this.$lastScroll;\n        var t = ev.domEvent.timeStamp;\n        var dt = t - prevScroll.t;\n        var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n        var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n        if (dt < SCROLL_COOLDOWN_T) {\n            vx = (vx + prevScroll.vx) / 2;\n            vy = (vy + prevScroll.vy) / 2;\n        }\n        var direction = Math.abs(vx / vy);\n        var canScroll = false;\n        if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n            canScroll = true;\n        if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n            canScroll = true;\n        if (canScroll) {\n            prevScroll.allowed = t;\n        }\n        else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n            var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n                && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n            if (isSlower) {\n                canScroll = true;\n                prevScroll.allowed = t;\n            }\n            else {\n                prevScroll.allowed = 0;\n            }\n        }\n        prevScroll.t = t;\n        prevScroll.vx = vx;\n        prevScroll.vy = vy;\n        if (canScroll) {\n            editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n            return ev.stop();\n        }\n    };\n}).call(DefaultHandlers.prototype);\nexports.DefaultHandlers = DefaultHandlers;\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nfunction calcRangeOrientation(range, cursor) {\n    if (range.start.row == range.end.row)\n        var cmp = 2 * cursor.column - range.start.column - range.end.column;\n    else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n        var cmp = cursor.column - 4;\n    else\n        var cmp = 2 * cursor.row - range.start.row - range.end.row;\n    if (cmp < 0)\n        return { cursor: range.start, anchor: range.end };\n    else\n        return { cursor: range.end, anchor: range.start };\n}\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar CLASSNAME = \"ace_tooltip\";\nfunction Tooltip(parentNode) {\n    this.isOpen = false;\n    this.$element = null;\n    this.$parentNode = parentNode;\n}\n(function () {\n    this.$init = function () {\n        this.$element = dom.createElement(\"div\");\n        this.$element.className = CLASSNAME;\n        this.$element.style.display = \"none\";\n        this.$parentNode.appendChild(this.$element);\n        return this.$element;\n    };\n    this.getElement = function () {\n        return this.$element || this.$init();\n    };\n    this.setText = function (text) {\n        this.getElement().textContent = text;\n    };\n    this.setHtml = function (html) {\n        this.getElement().innerHTML = html;\n    };\n    this.setPosition = function (x, y) {\n        this.getElement().style.left = x + \"px\";\n        this.getElement().style.top = y + \"px\";\n    };\n    this.setClassName = function (className) {\n        dom.addCssClass(this.getElement(), className);\n    };\n    this.show = function (text, x, y) {\n        if (text != null)\n            this.setText(text);\n        if (x != null && y != null)\n            this.setPosition(x, y);\n        if (!this.isOpen) {\n            this.getElement().style.display = \"block\";\n            this.isOpen = true;\n        }\n    };\n    this.hide = function () {\n        if (this.isOpen) {\n            this.getElement().style.display = \"none\";\n            this.getElement().className = CLASSNAME;\n            this.isOpen = false;\n        }\n    };\n    this.getHeight = function () {\n        return this.getElement().offsetHeight;\n    };\n    this.getWidth = function () {\n        return this.getElement().offsetWidth;\n    };\n    this.destroy = function () {\n        this.isOpen = false;\n        if (this.$element && this.$element.parentNode) {\n            this.$element.parentNode.removeChild(this.$element);\n        }\n    };\n}).call(Tooltip.prototype);\nexports.Tooltip = Tooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\nfunction GutterHandler(mouseHandler) {\n    var editor = mouseHandler.editor;\n    var gutter = editor.renderer.$gutterLayer;\n    var tooltip = new GutterTooltip(editor.container);\n    mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n        if (!editor.isFocused() || e.getButton() != 0)\n            return;\n        var gutterRegion = gutter.getRegion(e);\n        if (gutterRegion == \"foldWidgets\")\n            return;\n        var row = e.getDocumentPosition().row;\n        var selection = editor.session.selection;\n        if (e.getShiftKey())\n            selection.selectTo(row, 0);\n        else {\n            if (e.domEvent.detail == 2) {\n                editor.selectAll();\n                return e.preventDefault();\n            }\n            mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n        }\n        mouseHandler.setState(\"selectByLines\");\n        mouseHandler.captureMouse(e);\n        return e.preventDefault();\n    });\n    var tooltipTimeout, mouseEvent, tooltipAnnotation;\n    function showTooltip() {\n        var row = mouseEvent.getDocumentPosition().row;\n        var annotation = gutter.$annotations[row];\n        if (!annotation)\n            return hideTooltip();\n        var maxRow = editor.session.getLength();\n        if (row == maxRow) {\n            var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n            var pos = mouseEvent.$pos;\n            if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n                return hideTooltip();\n        }\n        if (tooltipAnnotation == annotation)\n            return;\n        tooltipAnnotation = annotation.text.join(\"<br/>\");\n        tooltip.setHtml(tooltipAnnotation);\n        var annotationClassName = annotation.className;\n        if (annotationClassName) {\n            tooltip.setClassName(annotationClassName.trim());\n        }\n        tooltip.show();\n        editor._signal(\"showGutterTooltip\", tooltip);\n        editor.on(\"mousewheel\", hideTooltip);\n        if (mouseHandler.$tooltipFollowsMouse) {\n            moveTooltip(mouseEvent);\n        }\n        else {\n            var gutterElement = mouseEvent.domEvent.target;\n            var rect = gutterElement.getBoundingClientRect();\n            var style = tooltip.getElement().style;\n            style.left = rect.right + \"px\";\n            style.top = rect.bottom + \"px\";\n        }\n    }\n    function hideTooltip() {\n        if (tooltipTimeout)\n            tooltipTimeout = clearTimeout(tooltipTimeout);\n        if (tooltipAnnotation) {\n            tooltip.hide();\n            tooltipAnnotation = null;\n            editor._signal(\"hideGutterTooltip\", tooltip);\n            editor.off(\"mousewheel\", hideTooltip);\n        }\n    }\n    function moveTooltip(e) {\n        tooltip.setPosition(e.x, e.y);\n    }\n    mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n        var target = e.domEvent.target || e.domEvent.srcElement;\n        if (dom.hasCssClass(target, \"ace_fold-widget\"))\n            return hideTooltip();\n        if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n            moveTooltip(e);\n        mouseEvent = e;\n        if (tooltipTimeout)\n            return;\n        tooltipTimeout = setTimeout(function () {\n            tooltipTimeout = null;\n            if (mouseEvent && !mouseHandler.isMousePressed)\n                showTooltip();\n            else\n                hideTooltip();\n        }, 50);\n    });\n    event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n        mouseEvent = null;\n        if (!tooltipAnnotation || tooltipTimeout)\n            return;\n        tooltipTimeout = setTimeout(function () {\n            tooltipTimeout = null;\n            hideTooltip();\n        }, 50);\n    }, editor);\n    editor.on(\"changeSession\", hideTooltip);\n}\nfunction GutterTooltip(parentNode) {\n    Tooltip.call(this, parentNode);\n}\noop.inherits(GutterTooltip, Tooltip);\n(function () {\n    this.setPosition = function (x, y) {\n        var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n        var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n        var width = this.getWidth();\n        var height = this.getHeight();\n        x += 15;\n        y += 15;\n        if (x + width > windowWidth) {\n            x -= (x + width) - windowWidth;\n        }\n        if (y + height > windowHeight) {\n            y -= 20 + height;\n        }\n        Tooltip.prototype.setPosition.call(this, x, y);\n    };\n}).call(GutterTooltip.prototype);\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function (domEvent, editor) {\n    this.domEvent = domEvent;\n    this.editor = editor;\n    this.x = this.clientX = domEvent.clientX;\n    this.y = this.clientY = domEvent.clientY;\n    this.$pos = null;\n    this.$inSelection = null;\n    this.propagationStopped = false;\n    this.defaultPrevented = false;\n};\n(function () {\n    this.stopPropagation = function () {\n        event.stopPropagation(this.domEvent);\n        this.propagationStopped = true;\n    };\n    this.preventDefault = function () {\n        event.preventDefault(this.domEvent);\n        this.defaultPrevented = true;\n    };\n    this.stop = function () {\n        this.stopPropagation();\n        this.preventDefault();\n    };\n    this.getDocumentPosition = function () {\n        if (this.$pos)\n            return this.$pos;\n        this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n        return this.$pos;\n    };\n    this.inSelection = function () {\n        if (this.$inSelection !== null)\n            return this.$inSelection;\n        var editor = this.editor;\n        var selectionRange = editor.getSelectionRange();\n        if (selectionRange.isEmpty())\n            this.$inSelection = false;\n        else {\n            var pos = this.getDocumentPosition();\n            this.$inSelection = selectionRange.contains(pos.row, pos.column);\n        }\n        return this.$inSelection;\n    };\n    this.getButton = function () {\n        return event.getButton(this.domEvent);\n    };\n    this.getShiftKey = function () {\n        return this.domEvent.shiftKey;\n    };\n    this.getAccelKey = useragent.isMac\n        ? function () { return this.domEvent.metaKey; }\n        : function () { return this.domEvent.ctrlKey; };\n}).call(MouseEvent.prototype);\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n    var editor = mouseHandler.editor;\n    var dragImage = dom.createElement(\"div\");\n    dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n    dragImage.textContent = \"\\xa0\";\n    var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n    exports.forEach(function (x) {\n        mouseHandler[x] = this[x];\n    }, this);\n    editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n    var mouseTarget = editor.container;\n    var dragSelectionMarker, x, y;\n    var timerId, range;\n    var dragCursor, counter = 0;\n    var dragOperation;\n    var isInternal;\n    var autoScrollStartTime;\n    var cursorMovedTime;\n    var cursorPointOnCaretMoved;\n    this.onDragStart = function (e) {\n        if (this.cancelDrag || !mouseTarget.draggable) {\n            var self = this;\n            setTimeout(function () {\n                self.startSelect();\n                self.captureMouse(e);\n            }, 0);\n            return e.preventDefault();\n        }\n        range = editor.getSelectionRange();\n        var dataTransfer = e.dataTransfer;\n        dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n        editor.container.appendChild(dragImage);\n        dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n        setTimeout(function () {\n            editor.container.removeChild(dragImage);\n        });\n        dataTransfer.clearData();\n        dataTransfer.setData(\"Text\", editor.session.getTextRange());\n        isInternal = true;\n        this.setState(\"drag\");\n    };\n    this.onDragEnd = function (e) {\n        mouseTarget.draggable = false;\n        isInternal = false;\n        this.setState(null);\n        if (!editor.getReadOnly()) {\n            var dropEffect = e.dataTransfer.dropEffect;\n            if (!dragOperation && dropEffect == \"move\")\n                editor.session.remove(editor.getSelectionRange());\n            editor.$resetCursorStyle();\n        }\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n    };\n    this.onDragEnter = function (e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker)\n            addDragMarker();\n        counter++;\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n    this.onDragOver = function (e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker) {\n            addDragMarker();\n            counter++;\n        }\n        if (onMouseMoveTimer !== null)\n            onMouseMoveTimer = null;\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n    this.onDragLeave = function (e) {\n        counter--;\n        if (counter <= 0 && dragSelectionMarker) {\n            clearDragMarker();\n            dragOperation = null;\n            return event.preventDefault(e);\n        }\n    };\n    this.onDrop = function (e) {\n        if (!dragCursor)\n            return;\n        var dataTransfer = e.dataTransfer;\n        if (isInternal) {\n            switch (dragOperation) {\n                case \"move\":\n                    if (range.contains(dragCursor.row, dragCursor.column)) {\n                        range = {\n                            start: dragCursor,\n                            end: dragCursor\n                        };\n                    }\n                    else {\n                        range = editor.moveText(range, dragCursor);\n                    }\n                    break;\n                case \"copy\":\n                    range = editor.moveText(range, dragCursor, true);\n                    break;\n            }\n        }\n        else {\n            var dropData = dataTransfer.getData('Text');\n            range = {\n                start: dragCursor,\n                end: editor.session.insert(dragCursor, dropData)\n            };\n            editor.focus();\n            dragOperation = null;\n        }\n        clearDragMarker();\n        return event.preventDefault(e);\n    };\n    event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n    event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n    function scrollCursorIntoView(cursor, prevCursor) {\n        var now = Date.now();\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        var hMovement = !prevCursor || cursor.column != prevCursor.column;\n        if (!cursorMovedTime || vMovement || hMovement) {\n            editor.moveCursorToPosition(cursor);\n            cursorMovedTime = now;\n            cursorPointOnCaretMoved = { x: x, y: y };\n        }\n        else {\n            var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n            if (distance > SCROLL_CURSOR_HYSTERESIS) {\n                cursorMovedTime = null;\n            }\n            else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n                editor.renderer.scrollCursorIntoView();\n                cursorMovedTime = null;\n            }\n        }\n    }\n    function autoScroll(cursor, prevCursor) {\n        var now = Date.now();\n        var lineHeight = editor.renderer.layerConfig.lineHeight;\n        var characterWidth = editor.renderer.layerConfig.characterWidth;\n        var editorRect = editor.renderer.scroller.getBoundingClientRect();\n        var offsets = {\n            x: {\n                left: x - editorRect.left,\n                right: editorRect.right - x\n            },\n            y: {\n                top: y - editorRect.top,\n                bottom: editorRect.bottom - y\n            }\n        };\n        var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n        var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n        var scrollCursor = { row: cursor.row, column: cursor.column };\n        if (nearestXOffset / characterWidth <= 2) {\n            scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n        }\n        if (nearestYOffset / lineHeight <= 1) {\n            scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n        }\n        var vScroll = cursor.row != scrollCursor.row;\n        var hScroll = cursor.column != scrollCursor.column;\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        if (vScroll || (hScroll && !vMovement)) {\n            if (!autoScrollStartTime)\n                autoScrollStartTime = now;\n            else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n                editor.renderer.scrollCursorIntoView(scrollCursor);\n        }\n        else {\n            autoScrollStartTime = null;\n        }\n    }\n    function onDragInterval() {\n        var prevCursor = dragCursor;\n        dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n        scrollCursorIntoView(dragCursor, prevCursor);\n        autoScroll(dragCursor, prevCursor);\n    }\n    function addDragMarker() {\n        range = editor.selection.toOrientedRange();\n        dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n        editor.clearSelection();\n        if (editor.isFocused())\n            editor.renderer.$cursorLayer.setBlinking(false);\n        clearInterval(timerId);\n        onDragInterval();\n        timerId = setInterval(onDragInterval, 20);\n        counter = 0;\n        event.addListener(document, \"mousemove\", onMouseMove);\n    }\n    function clearDragMarker() {\n        clearInterval(timerId);\n        editor.session.removeMarker(dragSelectionMarker);\n        dragSelectionMarker = null;\n        editor.selection.fromOrientedRange(range);\n        if (editor.isFocused() && !isInternal)\n            editor.$resetCursorStyle();\n        range = null;\n        dragCursor = null;\n        counter = 0;\n        autoScrollStartTime = null;\n        cursorMovedTime = null;\n        event.removeListener(document, \"mousemove\", onMouseMove);\n    }\n    var onMouseMoveTimer = null;\n    function onMouseMove() {\n        if (onMouseMoveTimer == null) {\n            onMouseMoveTimer = setTimeout(function () {\n                if (onMouseMoveTimer != null && dragSelectionMarker)\n                    clearDragMarker();\n            }, 20);\n        }\n    }\n    function canAccept(dataTransfer) {\n        var types = dataTransfer.types;\n        return !types || Array.prototype.some.call(types, function (type) {\n            return type == 'text/plain' || type == 'Text';\n        });\n    }\n    function getDropEffect(e) {\n        var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n        var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n        var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n        var effectAllowed = \"uninitialized\";\n        try {\n            effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n        }\n        catch (e) { }\n        var dropEffect = \"none\";\n        if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n        else if (moveAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"move\";\n        else if (copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n        return dropEffect;\n    }\n}\n(function () {\n    this.dragWait = function () {\n        var interval = Date.now() - this.mousedownEvent.time;\n        if (interval > this.editor.getDragDelay())\n            this.startDrag();\n    };\n    this.dragWaitEnd = function () {\n        var target = this.editor.container;\n        target.draggable = false;\n        this.startSelect(this.mousedownEvent.getDocumentPosition());\n        this.selectEnd();\n    };\n    this.dragReadyEnd = function (e) {\n        this.editor.$resetCursorStyle();\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n        this.dragWaitEnd();\n    };\n    this.startDrag = function () {\n        this.cancelDrag = false;\n        var editor = this.editor;\n        var target = editor.container;\n        target.draggable = true;\n        editor.renderer.$cursorLayer.setBlinking(false);\n        editor.setStyle(\"ace_dragging\");\n        var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n        editor.renderer.setCursorStyle(cursorStyle);\n        this.setState(\"dragReady\");\n    };\n    this.onMouseDrag = function (e) {\n        var target = this.editor.container;\n        if (useragent.isIE && this.state == \"dragReady\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 3)\n                target.dragDrop();\n        }\n        if (this.state === \"dragWait\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 0) {\n                target.draggable = false;\n                this.startSelect(this.mousedownEvent.getDocumentPosition());\n            }\n        }\n    };\n    this.onMouseDown = function (e) {\n        if (!this.$dragEnabled)\n            return;\n        this.mousedownEvent = e;\n        var editor = this.editor;\n        var inSelection = e.inSelection();\n        var button = e.getButton();\n        var clickCount = e.domEvent.detail || 1;\n        if (clickCount === 1 && button === 0 && inSelection) {\n            if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n                return;\n            this.mousedownEvent.time = Date.now();\n            var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n            if (\"unselectable\" in eventTarget)\n                eventTarget.unselectable = \"on\";\n            if (editor.getDragDelay()) {\n                if (useragent.isWebKit) {\n                    this.cancelDrag = true;\n                    var mouseTarget = editor.container;\n                    mouseTarget.draggable = true;\n                }\n                this.setState(\"dragWait\");\n            }\n            else {\n                this.startDrag();\n            }\n            this.captureMouse(e, this.onMouseDrag.bind(this));\n            e.defaultPrevented = true;\n        }\n    };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n    var mode = \"scroll\";\n    var startX;\n    var startY;\n    var touchStartT;\n    var lastT;\n    var longTouchTimer;\n    var animationTimer;\n    var animationSteps = 0;\n    var pos;\n    var clickCount = 0;\n    var vX = 0;\n    var vY = 0;\n    var pressed;\n    var contextMenu;\n    function createContextMenu() {\n        var clipboard = window.navigator && window.navigator.clipboard;\n        var isOpen = false;\n        var updateMenu = function () {\n            var selected = editor.getCopyText();\n            var hasUndo = editor.session.getUndoManager().hasUndo();\n            contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n                !selected && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n                selected && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n                selected && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n                clipboard && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n                hasUndo && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n                [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n                [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPallete\" }, \"Palette\"]\n            ] : [\"span\"]), contextMenu.firstChild);\n        };\n        var handleClick = function (e) {\n            var action = e.target.getAttribute(\"action\");\n            if (action == \"more\" || !isOpen) {\n                isOpen = !isOpen;\n                return updateMenu();\n            }\n            if (action == \"paste\") {\n                clipboard.readText().then(function (text) {\n                    editor.execCommand(action, text);\n                });\n            }\n            else if (action) {\n                if (action == \"cut\" || action == \"copy\") {\n                    if (clipboard)\n                        clipboard.writeText(editor.getCopyText());\n                    else\n                        document.execCommand(\"copy\");\n                }\n                editor.execCommand(action);\n            }\n            contextMenu.firstChild.style.display = \"none\";\n            isOpen = false;\n            if (action != \"openCommandPallete\")\n                editor.focus();\n        };\n        contextMenu = dom.buildDom([\"div\",\n            {\n                class: \"ace_mobile-menu\",\n                ontouchstart: function (e) {\n                    mode = \"menu\";\n                    e.stopPropagation();\n                    e.preventDefault();\n                    editor.textInput.focus();\n                },\n                ontouchend: function (e) {\n                    e.stopPropagation();\n                    e.preventDefault();\n                    handleClick(e);\n                },\n                onclick: handleClick\n            },\n            [\"span\"],\n            [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n        ], editor.container);\n    }\n    function showContextMenu() {\n        if (!contextMenu)\n            createContextMenu();\n        var cursor = editor.selection.cursor;\n        var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n        var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n        var scrollLeft = editor.renderer.scrollLeft;\n        var rect = editor.container.getBoundingClientRect();\n        contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n        if (pagePos.pageX - rect.left < rect.width - 70) {\n            contextMenu.style.left = \"\";\n            contextMenu.style.right = \"10px\";\n        }\n        else {\n            contextMenu.style.right = \"\";\n            contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n        }\n        contextMenu.style.display = \"\";\n        contextMenu.firstChild.style.display = \"none\";\n        editor.on(\"input\", hideContextMenu);\n    }\n    function hideContextMenu(e) {\n        if (contextMenu)\n            contextMenu.style.display = \"none\";\n        editor.off(\"input\", hideContextMenu);\n    }\n    function handleLongTap() {\n        longTouchTimer = null;\n        clearTimeout(longTouchTimer);\n        var range = editor.selection.getRange();\n        var inSelection = range.contains(pos.row, pos.column);\n        if (range.isEmpty() || !inSelection) {\n            editor.selection.moveToPosition(pos);\n            editor.selection.selectWord();\n        }\n        mode = \"wait\";\n        showContextMenu();\n    }\n    function switchToSelectionMode() {\n        longTouchTimer = null;\n        clearTimeout(longTouchTimer);\n        editor.selection.moveToPosition(pos);\n        var range = clickCount >= 2\n            ? editor.selection.getLineRange(pos.row)\n            : editor.session.getBracketRange(pos);\n        if (range && !range.isEmpty()) {\n            editor.selection.setRange(range);\n        }\n        else {\n            editor.selection.selectWord();\n        }\n        mode = \"wait\";\n    }\n    event.addListener(el, \"contextmenu\", function (e) {\n        if (!pressed)\n            return;\n        var textarea = editor.textInput.getElement();\n        textarea.focus();\n    }, editor);\n    event.addListener(el, \"touchstart\", function (e) {\n        var touches = e.touches;\n        if (longTouchTimer || touches.length > 1) {\n            clearTimeout(longTouchTimer);\n            longTouchTimer = null;\n            touchStartT = -1;\n            mode = \"zoom\";\n            return;\n        }\n        pressed = editor.$mouseHandler.isMousePressed = true;\n        var h = editor.renderer.layerConfig.lineHeight;\n        var w = editor.renderer.layerConfig.lineHeight;\n        var t = e.timeStamp;\n        lastT = t;\n        var touchObj = touches[0];\n        var x = touchObj.clientX;\n        var y = touchObj.clientY;\n        if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n            touchStartT = -1;\n        startX = e.clientX = x;\n        startY = e.clientY = y;\n        vX = vY = 0;\n        var ev = new MouseEvent(e, editor);\n        pos = ev.getDocumentPosition();\n        if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n            clickCount++;\n            e.preventDefault();\n            e.button = 0;\n            switchToSelectionMode();\n        }\n        else {\n            clickCount = 0;\n            var cursor = editor.selection.cursor;\n            var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n            var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n            var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n            var rect = editor.renderer.scroller.getBoundingClientRect();\n            var offsetTop = editor.renderer.layerConfig.offset;\n            var offsetLeft = editor.renderer.scrollLeft;\n            var weightedDistance = function (x, y) {\n                x = x / w;\n                y = y / h - 0.75;\n                return x * x + y * y;\n            };\n            if (e.clientX < rect.left) {\n                mode = \"zoom\";\n                return;\n            }\n            var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n            var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n            if (diff1 < 3.5 && diff2 < 3.5)\n                mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n            if (diff2 < 3.5)\n                mode = \"anchor\";\n            else if (diff1 < 3.5)\n                mode = \"cursor\";\n            else\n                mode = \"scroll\";\n            longTouchTimer = setTimeout(handleLongTap, 450);\n        }\n        touchStartT = t;\n    }, editor);\n    event.addListener(el, \"touchend\", function (e) {\n        pressed = editor.$mouseHandler.isMousePressed = false;\n        if (animationTimer)\n            clearInterval(animationTimer);\n        if (mode == \"zoom\") {\n            mode = \"\";\n            animationSteps = 0;\n        }\n        else if (longTouchTimer) {\n            editor.selection.moveToPosition(pos);\n            animationSteps = 0;\n            showContextMenu();\n        }\n        else if (mode == \"scroll\") {\n            animate();\n            hideContextMenu();\n        }\n        else {\n            showContextMenu();\n        }\n        clearTimeout(longTouchTimer);\n        longTouchTimer = null;\n    }, editor);\n    event.addListener(el, \"touchmove\", function (e) {\n        if (longTouchTimer) {\n            clearTimeout(longTouchTimer);\n            longTouchTimer = null;\n        }\n        var touches = e.touches;\n        if (touches.length > 1 || mode == \"zoom\")\n            return;\n        var touchObj = touches[0];\n        var wheelX = startX - touchObj.clientX;\n        var wheelY = startY - touchObj.clientY;\n        if (mode == \"wait\") {\n            if (wheelX * wheelX + wheelY * wheelY > 4)\n                mode = \"cursor\";\n            else\n                return e.preventDefault();\n        }\n        startX = touchObj.clientX;\n        startY = touchObj.clientY;\n        e.clientX = touchObj.clientX;\n        e.clientY = touchObj.clientY;\n        var t = e.timeStamp;\n        var dt = t - lastT;\n        lastT = t;\n        if (mode == \"scroll\") {\n            var mouseEvent = new MouseEvent(e, editor);\n            mouseEvent.speed = 1;\n            mouseEvent.wheelX = wheelX;\n            mouseEvent.wheelY = wheelY;\n            if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n                wheelX = 0;\n            if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n                wheelY = 0;\n            if (dt != 0) {\n                vX = wheelX / dt;\n                vY = wheelY / dt;\n            }\n            editor._emit(\"mousewheel\", mouseEvent);\n            if (!mouseEvent.propagationStopped) {\n                vX = vY = 0;\n            }\n        }\n        else {\n            var ev = new MouseEvent(e, editor);\n            var pos = ev.getDocumentPosition();\n            if (mode == \"cursor\")\n                editor.selection.moveCursorToPosition(pos);\n            else if (mode == \"anchor\")\n                editor.selection.setSelectionAnchor(pos.row, pos.column);\n            editor.renderer.scrollCursorIntoView(pos);\n            e.preventDefault();\n        }\n    }, editor);\n    function animate() {\n        animationSteps += 60;\n        animationTimer = setInterval(function () {\n            if (animationSteps-- <= 0) {\n                clearInterval(animationTimer);\n                animationTimer = null;\n            }\n            if (Math.abs(vX) < 0.01)\n                vX = 0;\n            if (Math.abs(vY) < 0.01)\n                vY = 0;\n            if (animationSteps < 20)\n                vX = 0.9 * vX;\n            if (animationSteps < 20)\n                vY = 0.9 * vY;\n            var oldScrollTop = editor.session.getScrollTop();\n            editor.renderer.scrollBy(10 * vX, 10 * vY);\n            if (oldScrollTop == editor.session.getScrollTop())\n                animationSteps = 0;\n        }, 10);\n    }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = function (editor) {\n    var _self = this;\n    this.editor = editor;\n    new DefaultHandlers(this);\n    new DefaultGutterHandler(this);\n    new DragdropHandler(this);\n    var focusEditor = function (e) {\n        var windowBlurred = !document.hasFocus || !document.hasFocus()\n            || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n        if (windowBlurred)\n            window.focus();\n        editor.focus();\n        setTimeout(function () {\n            if (!editor.isFocused())\n                editor.focus();\n        });\n    };\n    var mouseTarget = editor.renderer.getMouseEventTarget();\n    event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n    event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n    event.addMultiMouseDownListener([\n        mouseTarget,\n        editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n        editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n        editor.textInput && editor.textInput.getElement()\n    ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n    event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n    addTouchListeners(editor.container, editor);\n    var gutterEl = editor.renderer.$gutter;\n    event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n    event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n    event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n    event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n    event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n    event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n    if (useragent.isIE && editor.renderer.scrollBarV) {\n        event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n        event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n    }\n    editor.on(\"mousemove\", function (e) {\n        if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n            return;\n        var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n        var range = editor.session.selection.getRange();\n        var renderer = editor.renderer;\n        if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n            renderer.setCursorStyle(\"default\");\n        }\n        else {\n            renderer.setCursorStyle(\"\");\n        }\n    }, editor);\n};\n(function () {\n    this.onMouseEvent = function (name, e) {\n        if (!this.editor.session)\n            return;\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n    this.onMouseMove = function (name, e) {\n        var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n        if (!listeners || !listeners.length)\n            return;\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n    this.onMouseWheel = function (name, e) {\n        var mouseEvent = new MouseEvent(e, this.editor);\n        mouseEvent.speed = this.$scrollSpeed * 2;\n        mouseEvent.wheelX = e.wheelX;\n        mouseEvent.wheelY = e.wheelY;\n        this.editor._emit(name, mouseEvent);\n    };\n    this.setState = function (state) {\n        this.state = state;\n    };\n    this.captureMouse = function (ev, mouseMoveHandler) {\n        this.x = ev.x;\n        this.y = ev.y;\n        this.isMousePressed = true;\n        var editor = this.editor;\n        var renderer = this.editor.renderer;\n        renderer.$isMousePressed = true;\n        var self = this;\n        var onMouseMove = function (e) {\n            if (!e)\n                return;\n            if (useragent.isWebKit && !e.which && self.releaseMouse)\n                return self.releaseMouse();\n            self.x = e.clientX;\n            self.y = e.clientY;\n            mouseMoveHandler && mouseMoveHandler(e);\n            self.mouseEvent = new MouseEvent(e, self.editor);\n            self.$mouseMoved = true;\n        };\n        var onCaptureEnd = function (e) {\n            editor.off(\"beforeEndOperation\", onOperationEnd);\n            clearInterval(timerId);\n            if (editor.session)\n                onCaptureInterval();\n            self[self.state + \"End\"] && self[self.state + \"End\"](e);\n            self.state = \"\";\n            self.isMousePressed = renderer.$isMousePressed = false;\n            if (renderer.$keepTextAreaAtCursor)\n                renderer.$moveTextAreaToCursor();\n            self.$onCaptureMouseMove = self.releaseMouse = null;\n            e && self.onMouseEvent(\"mouseup\", e);\n            editor.endOperation();\n        };\n        var onCaptureInterval = function () {\n            self[self.state] && self[self.state]();\n            self.$mouseMoved = false;\n        };\n        if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n            return setTimeout(function () { onCaptureEnd(ev); });\n        }\n        var onOperationEnd = function (e) {\n            if (!self.releaseMouse)\n                return;\n            if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n                self[self.state + \"End\"] && self[self.state + \"End\"]();\n                self.state = \"\";\n                self.releaseMouse();\n            }\n        };\n        editor.on(\"beforeEndOperation\", onOperationEnd);\n        editor.startOperation({ command: { name: \"mouse\" } });\n        self.$onCaptureMouseMove = onMouseMove;\n        self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n        var timerId = setInterval(onCaptureInterval, 20);\n    };\n    this.releaseMouse = null;\n    this.cancelContextMenu = function () {\n        var stop = function (e) {\n            if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n                return;\n            this.editor.off(\"nativecontextmenu\", stop);\n            if (e && e.domEvent)\n                event.stopEvent(e.domEvent);\n        }.bind(this);\n        setTimeout(stop, 10);\n        this.editor.on(\"nativecontextmenu\", stop);\n    };\n    this.destroy = function () {\n        if (this.releaseMouse)\n            this.releaseMouse();\n    };\n}).call(MouseHandler.prototype);\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n    scrollSpeed: { initialValue: 2 },\n    dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n    dragEnabled: { initialValue: true },\n    focusTimeout: { initialValue: 0 },\n    tooltipFollowsMouse: { initialValue: true }\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nfunction FoldHandler(editor) {\n    editor.on(\"click\", function (e) {\n        var position = e.getDocumentPosition();\n        var session = editor.session;\n        var fold = session.getFoldAt(position.row, position.column, 1);\n        if (fold) {\n            if (e.getAccelKey())\n                session.removeFold(fold);\n            else\n                session.expandFold(fold);\n            e.stop();\n        }\n        var target = e.domEvent && e.domEvent.target;\n        if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n            if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n                session.setOption(\"wrap\", !session.getUseWrapMode());\n                editor.renderer.scrollCursorIntoView();\n            }\n        }\n    });\n    editor.on(\"gutterclick\", function (e) {\n        var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n        if (gutterRegion == \"foldWidgets\") {\n            var row = e.getDocumentPosition().row;\n            var session = editor.session;\n            if (session.foldWidgets && session.foldWidgets[row])\n                editor.session.onFoldWidgetClick(row, e);\n            if (!editor.isFocused())\n                editor.focus();\n            e.stop();\n        }\n    });\n    editor.on(\"gutterdblclick\", function (e) {\n        var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n        if (gutterRegion == \"foldWidgets\") {\n            var row = e.getDocumentPosition().row;\n            var session = editor.session;\n            var data = session.getParentFoldRangeData(row, true);\n            var range = data.range || data.firstRange;\n            if (range) {\n                row = range.start.row;\n                var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n                if (fold) {\n                    session.removeFold(fold);\n                }\n                else {\n                    session.addFold(\"...\", range);\n                    editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n                }\n            }\n            e.stop();\n        }\n    });\n}\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = function (editor) {\n    this.$editor = editor;\n    this.$data = { editor: editor };\n    this.$handlers = [];\n    this.setDefaultHandler(editor.commands);\n};\n(function () {\n    this.setDefaultHandler = function (kb) {\n        this.removeKeyboardHandler(this.$defaultHandler);\n        this.$defaultHandler = kb;\n        this.addKeyboardHandler(kb, 0);\n    };\n    this.setKeyboardHandler = function (kb) {\n        var h = this.$handlers;\n        if (h[h.length - 1] == kb)\n            return;\n        while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n            this.removeKeyboardHandler(h[h.length - 1]);\n        this.addKeyboardHandler(kb, 1);\n    };\n    this.addKeyboardHandler = function (kb, pos) {\n        if (!kb)\n            return;\n        if (typeof kb == \"function\" && !kb.handleKeyboard)\n            kb.handleKeyboard = kb;\n        var i = this.$handlers.indexOf(kb);\n        if (i != -1)\n            this.$handlers.splice(i, 1);\n        if (pos == undefined)\n            this.$handlers.push(kb);\n        else\n            this.$handlers.splice(pos, 0, kb);\n        if (i == -1 && kb.attach)\n            kb.attach(this.$editor);\n    };\n    this.removeKeyboardHandler = function (kb) {\n        var i = this.$handlers.indexOf(kb);\n        if (i == -1)\n            return false;\n        this.$handlers.splice(i, 1);\n        kb.detach && kb.detach(this.$editor);\n        return true;\n    };\n    this.getKeyboardHandler = function () {\n        return this.$handlers[this.$handlers.length - 1];\n    };\n    this.getStatusText = function () {\n        var data = this.$data;\n        var editor = data.editor;\n        return this.$handlers.map(function (h) {\n            return h.getStatusText && h.getStatusText(editor, data) || \"\";\n        }).filter(Boolean).join(\" \");\n    };\n    this.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n        var toExecute;\n        var success = false;\n        var commands = this.$editor.commands;\n        for (var i = this.$handlers.length; i--;) {\n            toExecute = this.$handlers[i].handleKeyboard(this.$data, hashId, keyString, keyCode, e);\n            if (!toExecute || !toExecute.command)\n                continue;\n            if (toExecute.command == \"null\") {\n                success = true;\n            }\n            else {\n                success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n            }\n            if (success && e && hashId != -1 &&\n                toExecute.passEvent != true && toExecute.command.passEvent != true) {\n                event.stopEvent(e);\n            }\n            if (success)\n                break;\n        }\n        if (!success && hashId == -1) {\n            toExecute = { command: \"insertstring\" };\n            success = commands.exec(\"insertstring\", this.$editor, keyString);\n        }\n        if (success && this.$editor._signal)\n            this.$editor._signal(\"keyboardActivity\", toExecute);\n        return success;\n    };\n    this.onCommandKey = function (e, hashId, keyCode) {\n        var keyString = keyUtil.keyCodeToString(keyCode);\n        return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n    };\n    this.onTextInput = function (text) {\n        return this.$callKeyboardHandlers(-1, text);\n    };\n}).call(KeyBinding.prototype);\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n    BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n    BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n    WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n    EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n    ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n    L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n    ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n    L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n    BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n    BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n    CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n    ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n    WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n    ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n    ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n    ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n    ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n    ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n    var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n    if (!charTypes) {\n        for (i = 0, charTypes = []; i < len; i++) {\n            charTypes[i] = _getCharacterType(chars[i]);\n        }\n    }\n    hiLevel = dir;\n    lastArabic = false;\n    hasUBAT_AL = false;\n    hasUBAT_B = false;\n    hasUBAT_S = false;\n    for (ix = 0; ix < len; ix++) {\n        prevState = newState;\n        classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n        newState = impTab[prevState][newClass];\n        action = newState & 0xF0;\n        newState &= 0x0F;\n        levels[ix] = newLevel = impTab[newState][5];\n        if (action > 0) {\n            if (action == 0x10) {\n                for (i = condPos; i < ix; i++) {\n                    levels[i] = 1;\n                }\n                condPos = -1;\n            }\n            else {\n                condPos = -1;\n            }\n        }\n        cond = impTab[newState][6];\n        if (cond) {\n            if (condPos == -1) {\n                condPos = ix;\n            }\n        }\n        else {\n            if (condPos > -1) {\n                for (i = condPos; i < ix; i++) {\n                    levels[i] = newLevel;\n                }\n                condPos = -1;\n            }\n        }\n        if (charTypes[ix] == B) {\n            levels[ix] = 0;\n        }\n        hiLevel |= newLevel;\n    }\n    if (hasUBAT_S) {\n        for (i = 0; i < len; i++) {\n            if (charTypes[i] == S) {\n                levels[i] = dir;\n                for (var j = i - 1; j >= 0; j--) {\n                    if (charTypes[j] == WS) {\n                        levels[j] = dir;\n                    }\n                    else {\n                        break;\n                    }\n                }\n            }\n        }\n    }\n}\nfunction _invertLevel(lev, levels, _array) {\n    if (hiLevel < lev) {\n        return;\n    }\n    if (lev == 1 && dir == RTL && !hasUBAT_B) {\n        _array.reverse();\n        return;\n    }\n    var len = _array.length, start = 0, end, lo, hi, tmp;\n    while (start < len) {\n        if (levels[start] >= lev) {\n            end = start + 1;\n            while (end < len && levels[end] >= lev) {\n                end++;\n            }\n            for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n                tmp = _array[lo];\n                _array[lo] = _array[hi];\n                _array[hi] = tmp;\n            }\n            start = end;\n        }\n        start++;\n    }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n    var cType = types[ix], wType, nType, len, i;\n    switch (cType) {\n        case L:\n        case R:\n            lastArabic = false;\n        case ON:\n        case AN:\n            return cType;\n        case EN:\n            return lastArabic ? AN : EN;\n        case AL:\n            lastArabic = true;\n            hasUBAT_AL = true;\n            return R;\n        case WS:\n            return ON;\n        case CS:\n            if (ix < 1 || (ix + 1) >= types.length ||\n                ((wType = classes[ix - 1]) != EN && wType != AN) ||\n                ((nType = types[ix + 1]) != EN && nType != AN)) {\n                return ON;\n            }\n            if (lastArabic) {\n                nType = AN;\n            }\n            return nType == wType ? nType : ON;\n        case ES:\n            wType = ix > 0 ? classes[ix - 1] : B;\n            if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n                return EN;\n            }\n            return ON;\n        case ET:\n            if (ix > 0 && classes[ix - 1] == EN) {\n                return EN;\n            }\n            if (lastArabic) {\n                return ON;\n            }\n            i = ix + 1;\n            len = types.length;\n            while (i < len && types[i] == ET) {\n                i++;\n            }\n            if (i < len && types[i] == EN) {\n                return EN;\n            }\n            return ON;\n        case NSM:\n            len = types.length;\n            i = ix + 1;\n            while (i < len && types[i] == NSM) {\n                i++;\n            }\n            if (i < len) {\n                var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n                wType = types[i];\n                if (rtlCandidate && (wType == R || wType == AL)) {\n                    return R;\n                }\n            }\n            if (ix < 1 || (wType = types[ix - 1]) == B) {\n                return ON;\n            }\n            return classes[ix - 1];\n        case B:\n            lastArabic = false;\n            hasUBAT_B = true;\n            return dir;\n        case S:\n            hasUBAT_S = true;\n            return ON;\n        case LRE:\n        case RLE:\n        case LRO:\n        case RLO:\n        case PDF:\n            lastArabic = false;\n        case BN:\n            return ON;\n    }\n}\nfunction _getCharacterType(ch) {\n    var uc = ch.charCodeAt(0), hi = uc >> 8;\n    if (hi == 0) {\n        return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n    }\n    else if (hi == 5) {\n        return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n    }\n    else if (hi == 6) {\n        if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n            return NSM;\n        else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n            return AN;\n        else if (uc == 0x066A)\n            return ET;\n        else if (/[\\u06f0-\\u06f9]/.test(ch))\n            return EN;\n        else\n            return AL;\n    }\n    else if (hi == 0x20 && uc <= 0x205F) {\n        return UnicodeTBL20[uc & 0xFF];\n    }\n    else if (hi == 0xFE) {\n        return (uc >= 0xFE70 ? AL : ON);\n    }\n    return ON;\n}\nfunction _isArabicDiacritics(ch) {\n    return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n    if (text.length < 2)\n        return {};\n    var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n    dir = isRtl ? RTL : LTR;\n    _computeLevels(chars, levels, chars.length, textCharTypes);\n    for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n        ;\n    _invertLevel(2, levels, logicalFromVisual);\n    _invertLevel(1, levels, logicalFromVisual);\n    for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n        if (textCharTypes[i] === AN) {\n            levels[i] = exports.AN;\n        }\n        else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n            || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n            levels[i] = exports.ON_R;\n        }\n        else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n            levels[i - 1] = levels[i] = exports.R_H;\n            i++;\n        }\n    }\n    if (chars[chars.length - 1] === exports.DOT)\n        levels[chars.length - 1] = exports.B;\n    if (chars[0] === '\\u202B')\n        levels[0] = exports.RLE;\n    for (var i = 0; i < logicalFromVisual.length; i++) {\n        bidiLevels[i] = levels[logicalFromVisual[i]];\n    }\n    return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n    var ret = false;\n    for (var i = 0; i < text.length; i++) {\n        textCharTypes[i] = _getCharacterType(text.charAt(i));\n        if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n            ret = true;\n    }\n    return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n    for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n        if (rowMap.logicalFromVisual[i] == logIdx)\n            return i;\n    }\n    return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = function (session) {\n    this.session = session;\n    this.bidiMap = {};\n    this.currentRow = null;\n    this.bidiUtil = bidiUtil;\n    this.charWidths = [];\n    this.EOL = \"\\xAC\";\n    this.showInvisibles = true;\n    this.isRtlDir = false;\n    this.$isRtl = false;\n    this.line = \"\";\n    this.wrapIndent = 0;\n    this.EOF = \"\\xB6\";\n    this.RLE = \"\\u202B\";\n    this.contentWidth = 0;\n    this.fontMetrics = null;\n    this.rtlLineOffset = 0;\n    this.wrapOffset = 0;\n    this.isMoveLeftOperation = false;\n    this.seenBidi = bidiRE.test(session.getValue());\n};\n(function () {\n    this.isBidiRow = function (screenRow, docRow, splitIndex) {\n        if (!this.seenBidi)\n            return false;\n        if (screenRow !== this.currentRow) {\n            this.currentRow = screenRow;\n            this.updateRowLine(docRow, splitIndex);\n            this.updateBidiMap();\n        }\n        return this.bidiMap.bidiLevels;\n    };\n    this.onChange = function (delta) {\n        if (!this.seenBidi) {\n            if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n                this.seenBidi = true;\n                this.currentRow = null;\n            }\n        }\n        else {\n            this.currentRow = null;\n        }\n    };\n    this.getDocumentRow = function () {\n        var docRow = 0;\n        var rowCache = this.session.$screenRowCache;\n        if (rowCache.length) {\n            var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n            if (index >= 0)\n                docRow = this.session.$docRowCache[index];\n        }\n        return docRow;\n    };\n    this.getSplitIndex = function () {\n        var splitIndex = 0;\n        var rowCache = this.session.$screenRowCache;\n        if (rowCache.length) {\n            var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n            while (this.currentRow - splitIndex > 0) {\n                currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n                if (currentIndex !== prevIndex)\n                    break;\n                prevIndex = currentIndex;\n                splitIndex++;\n            }\n        }\n        else {\n            splitIndex = this.currentRow;\n        }\n        return splitIndex;\n    };\n    this.updateRowLine = function (docRow, splitIndex) {\n        if (docRow === undefined)\n            docRow = this.getDocumentRow();\n        var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n        this.wrapIndent = 0;\n        this.line = this.session.getLine(docRow);\n        this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n        if (this.session.$useWrapMode) {\n            var splits = this.session.$wrapData[docRow];\n            if (splits) {\n                if (splitIndex === undefined)\n                    splitIndex = this.getSplitIndex();\n                if (splitIndex > 0 && splits.length) {\n                    this.wrapIndent = splits.indent;\n                    this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n                    this.line = (splitIndex < splits.length) ?\n                        this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n                        this.line.substring(splits[splits.length - 1]);\n                }\n                else {\n                    this.line = this.line.substring(0, splits[splitIndex]);\n                }\n                if (splitIndex == splits.length) {\n                    this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n                }\n            }\n        }\n        else {\n            this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n        }\n        var session = this.session, shift = 0, size;\n        this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n            if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n                size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n                shift += size - 1;\n                return lang.stringRepeat(bidiUtil.DOT, size);\n            }\n            return ch;\n        });\n        if (this.isRtlDir) {\n            this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n            this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n        }\n    };\n    this.updateBidiMap = function () {\n        var textCharTypes = [];\n        if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n            this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n        }\n        else {\n            this.bidiMap = {};\n        }\n    };\n    this.markAsDirty = function () {\n        this.currentRow = null;\n    };\n    this.updateCharacterWidths = function (fontMetrics) {\n        if (this.characterWidth === fontMetrics.$characterSize.width)\n            return;\n        this.fontMetrics = fontMetrics;\n        var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n        var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n        this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n        this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n        this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n        this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n        this.currentRow = null;\n    };\n    this.setShowInvisibles = function (showInvisibles) {\n        this.showInvisibles = showInvisibles;\n        this.currentRow = null;\n    };\n    this.setEolChar = function (eolChar) {\n        this.EOL = eolChar;\n    };\n    this.setContentWidth = function (width) {\n        this.contentWidth = width;\n    };\n    this.isRtlLine = function (row) {\n        if (this.$isRtl)\n            return true;\n        if (row != undefined)\n            return (this.session.getLine(row).charAt(0) == this.RLE);\n        else\n            return this.isRtlDir;\n    };\n    this.setRtlDirection = function (editor, isRtlDir) {\n        var cursor = editor.getCursorPosition();\n        for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n            if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n                editor.session.doc.removeInLine(row, 0, 1);\n            else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n                editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n        }\n    };\n    this.getPosLeft = function (col) {\n        col -= this.wrapIndent;\n        var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n        var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n        var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n        if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n            visualIdx++;\n        for (var i = 0; i < visualIdx; i++) {\n            left += this.charWidths[levels[i]];\n        }\n        if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n            left += this.charWidths[levels[visualIdx]];\n        if (this.wrapIndent)\n            left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n        if (this.isRtlDir)\n            left += this.rtlLineOffset;\n        return left;\n    };\n    this.getSelections = function (startCol, endCol) {\n        var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n        if (this.wrapIndent)\n            offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n        for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n            logIdx = map.logicalFromVisual[visIdx];\n            level = levels[visIdx];\n            isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n            if (isSelected && !isSelectedPrev) {\n                selectionStart = offset;\n            }\n            else if (!isSelected && isSelectedPrev) {\n                selections.push({ left: selectionStart, width: offset - selectionStart });\n            }\n            offset += this.charWidths[level];\n            isSelectedPrev = isSelected;\n        }\n        if (isSelected && (visIdx === levels.length)) {\n            selections.push({ left: selectionStart, width: offset - selectionStart });\n        }\n        if (this.isRtlDir) {\n            for (var i = 0; i < selections.length; i++) {\n                selections[i].left += this.rtlLineOffset;\n            }\n        }\n        return selections;\n    };\n    this.offsetToCol = function (posX) {\n        if (this.isRtlDir)\n            posX -= this.rtlLineOffset;\n        var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n        if (this.wrapIndent)\n            posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n        while (posX > offset + charWidth / 2) {\n            offset += charWidth;\n            if (visualIdx === levels.length - 1) {\n                charWidth = 0;\n                break;\n            }\n            charWidth = this.charWidths[levels[++visualIdx]];\n        }\n        if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n            if (posX < offset)\n                visualIdx--;\n            logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n        }\n        else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n            logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n                : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n        }\n        else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n            || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n            logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n        }\n        else {\n            if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n                visualIdx--;\n            logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n        }\n        if (logicalIdx === 0 && this.isRtlDir)\n            logicalIdx++;\n        return (logicalIdx + this.wrapIndent);\n    };\n}).call(BidiHandler.prototype);\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = function (session) {\n    this.session = session;\n    this.doc = session.getDocument();\n    this.clearSelection();\n    this.cursor = this.lead = this.doc.createAnchor(0, 0);\n    this.anchor = this.doc.createAnchor(0, 0);\n    this.$silent = false;\n    var self = this;\n    this.cursor.on(\"change\", function (e) {\n        self.$cursorChanged = true;\n        if (!self.$silent)\n            self._emit(\"changeCursor\");\n        if (!self.$isEmpty && !self.$silent)\n            self._emit(\"changeSelection\");\n        if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n            self.$desiredColumn = null;\n    });\n    this.anchor.on(\"change\", function () {\n        self.$anchorChanged = true;\n        if (!self.$isEmpty && !self.$silent)\n            self._emit(\"changeSelection\");\n    });\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.isEmpty = function () {\n        return this.$isEmpty || (this.anchor.row == this.lead.row &&\n            this.anchor.column == this.lead.column);\n    };\n    this.isMultiLine = function () {\n        return !this.$isEmpty && this.anchor.row != this.cursor.row;\n    };\n    this.getCursor = function () {\n        return this.lead.getPosition();\n    };\n    this.setSelectionAnchor = function (row, column) {\n        this.$isEmpty = false;\n        this.anchor.setPosition(row, column);\n    };\n    this.getAnchor =\n        this.getSelectionAnchor = function () {\n            if (this.$isEmpty)\n                return this.getSelectionLead();\n            return this.anchor.getPosition();\n        };\n    this.getSelectionLead = function () {\n        return this.lead.getPosition();\n    };\n    this.isBackwards = function () {\n        var anchor = this.anchor;\n        var lead = this.lead;\n        return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n    };\n    this.getRange = function () {\n        var anchor = this.anchor;\n        var lead = this.lead;\n        if (this.$isEmpty)\n            return Range.fromPoints(lead, lead);\n        return this.isBackwards()\n            ? Range.fromPoints(lead, anchor)\n            : Range.fromPoints(anchor, lead);\n    };\n    this.clearSelection = function () {\n        if (!this.$isEmpty) {\n            this.$isEmpty = true;\n            this._emit(\"changeSelection\");\n        }\n    };\n    this.selectAll = function () {\n        this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n    };\n    this.setRange =\n        this.setSelectionRange = function (range, reverse) {\n            var start = reverse ? range.end : range.start;\n            var end = reverse ? range.start : range.end;\n            this.$setSelection(start.row, start.column, end.row, end.column);\n        };\n    this.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n        if (this.$silent)\n            return;\n        var wasEmpty = this.$isEmpty;\n        var wasMultiselect = this.inMultiSelectMode;\n        this.$silent = true;\n        this.$cursorChanged = this.$anchorChanged = false;\n        this.anchor.setPosition(anchorRow, anchorColumn);\n        this.cursor.setPosition(cursorRow, cursorColumn);\n        this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n        this.$silent = false;\n        if (this.$cursorChanged)\n            this._emit(\"changeCursor\");\n        if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n            this._emit(\"changeSelection\");\n    };\n    this.$moveSelection = function (mover) {\n        var lead = this.lead;\n        if (this.$isEmpty)\n            this.setSelectionAnchor(lead.row, lead.column);\n        mover.call(this);\n    };\n    this.selectTo = function (row, column) {\n        this.$moveSelection(function () {\n            this.moveCursorTo(row, column);\n        });\n    };\n    this.selectToPosition = function (pos) {\n        this.$moveSelection(function () {\n            this.moveCursorToPosition(pos);\n        });\n    };\n    this.moveTo = function (row, column) {\n        this.clearSelection();\n        this.moveCursorTo(row, column);\n    };\n    this.moveToPosition = function (pos) {\n        this.clearSelection();\n        this.moveCursorToPosition(pos);\n    };\n    this.selectUp = function () {\n        this.$moveSelection(this.moveCursorUp);\n    };\n    this.selectDown = function () {\n        this.$moveSelection(this.moveCursorDown);\n    };\n    this.selectRight = function () {\n        this.$moveSelection(this.moveCursorRight);\n    };\n    this.selectLeft = function () {\n        this.$moveSelection(this.moveCursorLeft);\n    };\n    this.selectLineStart = function () {\n        this.$moveSelection(this.moveCursorLineStart);\n    };\n    this.selectLineEnd = function () {\n        this.$moveSelection(this.moveCursorLineEnd);\n    };\n    this.selectFileEnd = function () {\n        this.$moveSelection(this.moveCursorFileEnd);\n    };\n    this.selectFileStart = function () {\n        this.$moveSelection(this.moveCursorFileStart);\n    };\n    this.selectWordRight = function () {\n        this.$moveSelection(this.moveCursorWordRight);\n    };\n    this.selectWordLeft = function () {\n        this.$moveSelection(this.moveCursorWordLeft);\n    };\n    this.getWordRange = function (row, column) {\n        if (typeof column == \"undefined\") {\n            var cursor = row || this.lead;\n            row = cursor.row;\n            column = cursor.column;\n        }\n        return this.session.getWordRange(row, column);\n    };\n    this.selectWord = function () {\n        this.setSelectionRange(this.getWordRange());\n    };\n    this.selectAWord = function () {\n        var cursor = this.getCursor();\n        var range = this.session.getAWordRange(cursor.row, cursor.column);\n        this.setSelectionRange(range);\n    };\n    this.getLineRange = function (row, excludeLastChar) {\n        var rowStart = typeof row == \"number\" ? row : this.lead.row;\n        var rowEnd;\n        var foldLine = this.session.getFoldLine(rowStart);\n        if (foldLine) {\n            rowStart = foldLine.start.row;\n            rowEnd = foldLine.end.row;\n        }\n        else {\n            rowEnd = rowStart;\n        }\n        if (excludeLastChar === true)\n            return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n        else\n            return new Range(rowStart, 0, rowEnd + 1, 0);\n    };\n    this.selectLine = function () {\n        this.setSelectionRange(this.getLineRange());\n    };\n    this.moveCursorUp = function () {\n        this.moveCursorBy(-1, 0);\n    };\n    this.moveCursorDown = function () {\n        this.moveCursorBy(1, 0);\n    };\n    this.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n        var start = cursor.column;\n        var end = cursor.column + tabSize;\n        if (direction < 0) {\n            start = cursor.column - tabSize;\n            end = cursor.column;\n        }\n        return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n    };\n    this.moveCursorLeft = function () {\n        var cursor = this.lead.getPosition(), fold;\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n        }\n        else if (cursor.column === 0) {\n            if (cursor.row > 0) {\n                this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n                this.moveCursorBy(0, -tabSize);\n            }\n            else {\n                this.moveCursorBy(0, -1);\n            }\n        }\n    };\n    this.moveCursorRight = function () {\n        var cursor = this.lead.getPosition(), fold;\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n        }\n        else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n            if (this.lead.row < this.doc.getLength() - 1) {\n                this.moveCursorTo(this.lead.row + 1, 0);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            var cursor = this.lead;\n            if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n                this.moveCursorBy(0, tabSize);\n            }\n            else {\n                this.moveCursorBy(0, 1);\n            }\n        }\n    };\n    this.moveCursorLineStart = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var screenRow = this.session.documentToScreenRow(row, column);\n        var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n        var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n        var leadingSpace = beforeCursor.match(/^\\s*/);\n        if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n            firstColumnPosition.column += leadingSpace[0].length;\n        this.moveCursorToPosition(firstColumnPosition);\n    };\n    this.moveCursorLineEnd = function () {\n        var lead = this.lead;\n        var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n        if (this.lead.column == lineEnd.column) {\n            var line = this.session.getLine(lineEnd.row);\n            if (lineEnd.column == line.length) {\n                var textEnd = line.search(/\\s+$/);\n                if (textEnd > 0)\n                    lineEnd.column = textEnd;\n            }\n        }\n        this.moveCursorTo(lineEnd.row, lineEnd.column);\n    };\n    this.moveCursorFileEnd = function () {\n        var row = this.doc.getLength() - 1;\n        var column = this.doc.getLine(row).length;\n        this.moveCursorTo(row, column);\n    };\n    this.moveCursorFileStart = function () {\n        this.moveCursorTo(0, 0);\n    };\n    this.moveCursorLongWordRight = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n            return;\n        }\n        if (this.session.nonTokenRe.exec(rightOfCursor)) {\n            column += this.session.nonTokenRe.lastIndex;\n            this.session.nonTokenRe.lastIndex = 0;\n            rightOfCursor = line.substring(column);\n        }\n        if (column >= line.length) {\n            this.moveCursorTo(row, line.length);\n            this.moveCursorRight();\n            if (row < this.doc.getLength() - 1)\n                this.moveCursorWordRight();\n            return;\n        }\n        if (this.session.tokenRe.exec(rightOfCursor)) {\n            column += this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n        this.moveCursorTo(row, column);\n    };\n    this.moveCursorLongWordLeft = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n            return;\n        }\n        var str = this.session.getFoldStringAt(row, column, -1);\n        if (str == null) {\n            str = this.doc.getLine(row).substring(0, column);\n        }\n        var leftOfCursor = lang.stringReverse(str);\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n        if (this.session.nonTokenRe.exec(leftOfCursor)) {\n            column -= this.session.nonTokenRe.lastIndex;\n            leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n            this.session.nonTokenRe.lastIndex = 0;\n        }\n        if (column <= 0) {\n            this.moveCursorTo(row, 0);\n            this.moveCursorLeft();\n            if (row > 0)\n                this.moveCursorWordLeft();\n            return;\n        }\n        if (this.session.tokenRe.exec(leftOfCursor)) {\n            column -= this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n        this.moveCursorTo(row, column);\n    };\n    this.$shortWordEndIndex = function (rightOfCursor) {\n        var index = 0, ch;\n        var whitespaceRe = /\\s/;\n        var tokenRe = this.session.tokenRe;\n        tokenRe.lastIndex = 0;\n        if (this.session.tokenRe.exec(rightOfCursor)) {\n            index = this.session.tokenRe.lastIndex;\n        }\n        else {\n            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                index++;\n            if (index < 1) {\n                tokenRe.lastIndex = 0;\n                while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n                    tokenRe.lastIndex = 0;\n                    index++;\n                    if (whitespaceRe.test(ch)) {\n                        if (index > 2) {\n                            index--;\n                            break;\n                        }\n                        else {\n                            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                                index++;\n                            if (index > 2)\n                                break;\n                        }\n                    }\n                }\n            }\n        }\n        tokenRe.lastIndex = 0;\n        return index;\n    };\n    this.moveCursorShortWordRight = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold)\n            return this.moveCursorTo(fold.end.row, fold.end.column);\n        if (column == line.length) {\n            var l = this.doc.getLength();\n            do {\n                row++;\n                rightOfCursor = this.doc.getLine(row);\n            } while (row < l && /^\\s*$/.test(rightOfCursor));\n            if (!/^\\s+/.test(rightOfCursor))\n                rightOfCursor = \"\";\n            column = 0;\n        }\n        var index = this.$shortWordEndIndex(rightOfCursor);\n        this.moveCursorTo(row, column + index);\n    };\n    this.moveCursorShortWordLeft = function () {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1))\n            return this.moveCursorTo(fold.start.row, fold.start.column);\n        var line = this.session.getLine(row).substring(0, column);\n        if (column === 0) {\n            do {\n                row--;\n                line = this.doc.getLine(row);\n            } while (row > 0 && /^\\s*$/.test(line));\n            column = line.length;\n            if (!/\\s+$/.test(line))\n                line = \"\";\n        }\n        var leftOfCursor = lang.stringReverse(line);\n        var index = this.$shortWordEndIndex(leftOfCursor);\n        return this.moveCursorTo(row, column - index);\n    };\n    this.moveCursorWordRight = function () {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordRight();\n        else\n            this.moveCursorShortWordRight();\n    };\n    this.moveCursorWordLeft = function () {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordLeft();\n        else\n            this.moveCursorShortWordLeft();\n    };\n    this.moveCursorBy = function (rows, chars) {\n        var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n        var offsetX;\n        if (chars === 0) {\n            if (rows !== 0) {\n                if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n                    offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n                    screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n                }\n                else {\n                    offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n                }\n            }\n            if (this.$desiredColumn)\n                screenPos.column = this.$desiredColumn;\n            else\n                this.$desiredColumn = screenPos.column;\n        }\n        if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n            var widget = this.session.lineWidgets[this.lead.row];\n            if (rows < 0)\n                rows -= widget.rowsAbove || 0;\n            else if (rows > 0)\n                rows += widget.rowCount - (widget.rowsAbove || 0);\n        }\n        var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n        if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n        }\n        this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n    };\n    this.moveCursorToPosition = function (position) {\n        this.moveCursorTo(position.row, position.column);\n    };\n    this.moveCursorTo = function (row, column, keepDesiredColumn) {\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            row = fold.start.row;\n            column = fold.start.column;\n        }\n        this.$keepDesiredColumnOnChange = true;\n        var line = this.session.getLine(row);\n        if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n            if (this.lead.row == row && this.lead.column == column + 1)\n                column = column - 1;\n            else\n                column = column + 1;\n        }\n        this.lead.setPosition(row, column);\n        this.$keepDesiredColumnOnChange = false;\n        if (!keepDesiredColumn)\n            this.$desiredColumn = null;\n    };\n    this.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n        var pos = this.session.screenToDocumentPosition(row, column);\n        this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n    };\n    this.detach = function () {\n        this.lead.detach();\n        this.anchor.detach();\n    };\n    this.fromOrientedRange = function (range) {\n        this.setSelectionRange(range, range.cursor == range.start);\n        this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n    };\n    this.toOrientedRange = function (range) {\n        var r = this.getRange();\n        if (range) {\n            range.start.column = r.start.column;\n            range.start.row = r.start.row;\n            range.end.column = r.end.column;\n            range.end.row = r.end.row;\n        }\n        else {\n            range = r;\n        }\n        range.cursor = this.isBackwards() ? range.start : range.end;\n        range.desiredColumn = this.$desiredColumn;\n        return range;\n    };\n    this.getRangeOfMovements = function (func) {\n        var start = this.getCursor();\n        try {\n            func(this);\n            var end = this.getCursor();\n            return Range.fromPoints(start, end);\n        }\n        catch (e) {\n            return Range.fromPoints(start, start);\n        }\n        finally {\n            this.moveCursorToPosition(start);\n        }\n    };\n    this.toJSON = function () {\n        if (this.rangeCount) {\n            var data = this.ranges.map(function (r) {\n                var r1 = r.clone();\n                r1.isBackwards = r.cursor == r.start;\n                return r1;\n            });\n        }\n        else {\n            var data = this.getRange();\n            data.isBackwards = this.isBackwards();\n        }\n        return data;\n    };\n    this.fromJSON = function (data) {\n        if (data.start == undefined) {\n            if (this.rangeList && data.length > 1) {\n                this.toSingleRange(data[0]);\n                for (var i = data.length; i--;) {\n                    var r = Range.fromPoints(data[i].start, data[i].end);\n                    if (data[i].isBackwards)\n                        r.cursor = r.start;\n                    this.addRange(r, true);\n                }\n                return;\n            }\n            else {\n                data = data[0];\n            }\n        }\n        if (this.rangeList)\n            this.toSingleRange(data);\n        this.setSelectionRange(data, data.isBackwards);\n    };\n    this.isEqual = function (data) {\n        if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n            return false;\n        if (!data.length || !this.ranges)\n            return this.getRange().isEqual(data);\n        for (var i = this.ranges.length; i--;) {\n            if (!this.ranges[i].isEqual(data[i]))\n                return false;\n        }\n        return true;\n    };\n}).call(Selection.prototype);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar config = require(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function (rules) {\n    this.states = rules;\n    this.regExps = {};\n    this.matchMappings = {};\n    for (var key in this.states) {\n        var state = this.states[key];\n        var ruleRegExps = [];\n        var matchTotal = 0;\n        var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n        var flag = \"g\";\n        var splitterRurles = [];\n        for (var i = 0; i < state.length; i++) {\n            var rule = state[i];\n            if (rule.defaultToken)\n                mapping.defaultToken = rule.defaultToken;\n            if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n                flag += \"i\";\n            if (rule.unicode && flag.indexOf(\"u\") === -1)\n                flag += \"u\";\n            if (rule.regex == null)\n                continue;\n            if (rule.regex instanceof RegExp)\n                rule.regex = rule.regex.toString().slice(1, -1);\n            var adjustedregex = rule.regex;\n            var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n            if (Array.isArray(rule.token)) {\n                if (rule.token.length == 1 || matchcount == 1) {\n                    rule.token = rule.token[0];\n                }\n                else if (matchcount - 1 != rule.token.length) {\n                    this.reportError(\"number of classes and regexp groups doesn't match\", {\n                        rule: rule,\n                        groupCount: matchcount - 1\n                    });\n                    rule.token = rule.token[0];\n                }\n                else {\n                    rule.tokenArray = rule.token;\n                    rule.token = null;\n                    rule.onMatch = this.$arrayTokens;\n                }\n            }\n            else if (typeof rule.token == \"function\" && !rule.onMatch) {\n                if (matchcount > 1)\n                    rule.onMatch = this.$applyToken;\n                else\n                    rule.onMatch = rule.token;\n            }\n            if (matchcount > 1) {\n                if (/\\\\\\d/.test(rule.regex)) {\n                    adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n                        return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n                    });\n                }\n                else {\n                    matchcount = 1;\n                    adjustedregex = this.removeCapturingGroups(rule.regex);\n                }\n                if (!rule.splitRegex && typeof rule.token != \"string\")\n                    splitterRurles.push(rule); // flag will be known only at the very end\n            }\n            mapping[matchTotal] = i;\n            matchTotal += matchcount;\n            ruleRegExps.push(adjustedregex);\n            if (!rule.onMatch)\n                rule.onMatch = null;\n        }\n        if (!ruleRegExps.length) {\n            mapping[0] = 0;\n            ruleRegExps.push(\"$\");\n        }\n        splitterRurles.forEach(function (rule) {\n            rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n        }, this);\n        this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n    }\n};\n(function () {\n    this.$setMaxTokenCount = function (m) {\n        MAX_TOKEN_COUNT = m | 0;\n    };\n    this.$applyToken = function (str) {\n        var values = this.splitRegex.exec(str).slice(1);\n        var types = this.token.apply(this, values);\n        if (typeof types === \"string\")\n            return [{ type: types, value: str }];\n        var tokens = [];\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i]\n                };\n        }\n        return tokens;\n    };\n    this.$arrayTokens = function (str) {\n        if (!str)\n            return [];\n        var values = this.splitRegex.exec(str);\n        if (!values)\n            return \"text\";\n        var tokens = [];\n        var types = this.tokenArray;\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i + 1])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i + 1]\n                };\n        }\n        return tokens;\n    };\n    this.removeCapturingGroups = function (src) {\n        var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n        return r;\n    };\n    this.createSplitterRegexp = function (src, flag) {\n        if (src.indexOf(\"(?=\") != -1) {\n            var stack = 0;\n            var inChClass = false;\n            var lastCapture = {};\n            src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n                if (inChClass) {\n                    inChClass = square != \"]\";\n                }\n                else if (square) {\n                    inChClass = true;\n                }\n                else if (parenClose) {\n                    if (stack == lastCapture.stack) {\n                        lastCapture.end = index + 1;\n                        lastCapture.stack = -1;\n                    }\n                    stack--;\n                }\n                else if (parenOpen) {\n                    stack++;\n                    if (parenOpen.length != 1) {\n                        lastCapture.stack = stack;\n                        lastCapture.start = index;\n                    }\n                }\n                return m;\n            });\n            if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n                src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n        }\n        if (src.charAt(0) != \"^\")\n            src = \"^\" + src;\n        if (src.charAt(src.length - 1) != \"$\")\n            src += \"$\";\n        return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n    };\n    this.getLineTokens = function (line, startState) {\n        if (startState && typeof startState != \"string\") {\n            var stack = startState.slice(0);\n            startState = stack[0];\n            if (startState === \"#tmp\") {\n                stack.shift();\n                startState = stack.shift();\n            }\n        }\n        else\n            var stack = [];\n        var currentState = startState || \"start\";\n        var state = this.states[currentState];\n        if (!state) {\n            currentState = \"start\";\n            state = this.states[currentState];\n        }\n        var mapping = this.matchMappings[currentState];\n        var re = this.regExps[currentState];\n        re.lastIndex = 0;\n        var match, tokens = [];\n        var lastIndex = 0;\n        var matchAttempts = 0;\n        var token = { type: null, value: \"\" };\n        while (match = re.exec(line)) {\n            var type = mapping.defaultToken;\n            var rule = null;\n            var value = match[0];\n            var index = re.lastIndex;\n            if (index - value.length > lastIndex) {\n                var skipped = line.substring(lastIndex, index - value.length);\n                if (token.type == type) {\n                    token.value += skipped;\n                }\n                else {\n                    if (token.type)\n                        tokens.push(token);\n                    token = { type: type, value: skipped };\n                }\n            }\n            for (var i = 0; i < match.length - 2; i++) {\n                if (match[i + 1] === undefined)\n                    continue;\n                rule = state[mapping[i]];\n                if (rule.onMatch)\n                    type = rule.onMatch(value, currentState, stack, line);\n                else\n                    type = rule.token;\n                if (rule.next) {\n                    if (typeof rule.next == \"string\") {\n                        currentState = rule.next;\n                    }\n                    else {\n                        currentState = rule.next(currentState, stack);\n                    }\n                    state = this.states[currentState];\n                    if (!state) {\n                        this.reportError(\"state doesn't exist\", currentState);\n                        currentState = \"start\";\n                        state = this.states[currentState];\n                    }\n                    mapping = this.matchMappings[currentState];\n                    lastIndex = index;\n                    re = this.regExps[currentState];\n                    re.lastIndex = index;\n                }\n                if (rule.consumeLineEnd)\n                    lastIndex = index;\n                break;\n            }\n            if (value) {\n                if (typeof type === \"string\") {\n                    if ((!rule || rule.merge !== false) && token.type === type) {\n                        token.value += value;\n                    }\n                    else {\n                        if (token.type)\n                            tokens.push(token);\n                        token = { type: type, value: value };\n                    }\n                }\n                else if (type) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = { type: null, value: \"\" };\n                    for (var i = 0; i < type.length; i++)\n                        tokens.push(type[i]);\n                }\n            }\n            if (lastIndex == line.length)\n                break;\n            lastIndex = index;\n            if (matchAttempts++ > MAX_TOKEN_COUNT) {\n                if (matchAttempts > 2 * line.length) {\n                    this.reportError(\"infinite loop with in ace tokenizer\", {\n                        startState: startState,\n                        line: line\n                    });\n                }\n                while (lastIndex < line.length) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {\n                        value: line.substring(lastIndex, lastIndex += 500),\n                        type: \"overflow\"\n                    };\n                }\n                currentState = \"start\";\n                stack = [];\n                break;\n            }\n        }\n        if (token.type)\n            tokens.push(token);\n        if (stack.length > 1) {\n            if (stack[0] !== currentState)\n                stack.unshift(\"#tmp\", currentState);\n        }\n        return {\n            tokens: tokens,\n            state: stack.length ? stack : currentState\n        };\n    };\n    this.reportError = config.reportError;\n}).call(Tokenizer.prototype);\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"empty_line\",\n                regex: '^$'\n            }, {\n                defaultToken: \"text\"\n            }]\n    };\n};\n(function () {\n    this.addRules = function (rules, prefix) {\n        if (!prefix) {\n            for (var key in rules)\n                this.$rules[key] = rules[key];\n            return;\n        }\n        for (var key in rules) {\n            var state = rules[key];\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                if (rule.next || rule.onMatch) {\n                    if (typeof rule.next == \"string\") {\n                        if (rule.next.indexOf(prefix) !== 0)\n                            rule.next = prefix + rule.next;\n                    }\n                    if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n                        rule.nextState = prefix + rule.nextState;\n                }\n            }\n            this.$rules[prefix + key] = state;\n        }\n    };\n    this.getRules = function () {\n        return this.$rules;\n    };\n    this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n        var embedRules = typeof HighlightRules == \"function\"\n            ? new HighlightRules().getRules()\n            : HighlightRules;\n        if (states) {\n            for (var i = 0; i < states.length; i++)\n                states[i] = prefix + states[i];\n        }\n        else {\n            states = [];\n            for (var key in embedRules)\n                states.push(prefix + key);\n        }\n        this.addRules(embedRules, prefix);\n        if (escapeRules) {\n            var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n            for (var i = 0; i < states.length; i++)\n                addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n        }\n        if (!this.$embeds)\n            this.$embeds = [];\n        this.$embeds.push(prefix);\n    };\n    this.getEmbeds = function () {\n        return this.$embeds;\n    };\n    var pushState = function (currentState, stack) {\n        if (currentState != \"start\" || stack.length)\n            stack.unshift(this.nextState, currentState);\n        return this.nextState;\n    };\n    var popState = function (currentState, stack) {\n        stack.shift();\n        return stack.shift() || \"start\";\n    };\n    this.normalizeRules = function () {\n        var id = 0;\n        var rules = this.$rules;\n        function processState(key) {\n            var state = rules[key];\n            state.processed = true;\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                var toInsert = null;\n                if (Array.isArray(rule)) {\n                    toInsert = rule;\n                    rule = {};\n                }\n                if (!rule.regex && rule.start) {\n                    rule.regex = rule.start;\n                    if (!rule.next)\n                        rule.next = [];\n                    rule.next.push({\n                        defaultToken: rule.token\n                    }, {\n                        token: rule.token + \".end\",\n                        regex: rule.end || rule.start,\n                        next: \"pop\"\n                    });\n                    rule.token = rule.token + \".start\";\n                    rule.push = true;\n                }\n                var next = rule.next || rule.push;\n                if (next && Array.isArray(next)) {\n                    var stateName = rule.stateName;\n                    if (!stateName) {\n                        stateName = rule.token;\n                        if (typeof stateName != \"string\")\n                            stateName = stateName[0] || \"\";\n                        if (rules[stateName])\n                            stateName += id++;\n                    }\n                    rules[stateName] = next;\n                    rule.next = stateName;\n                    processState(stateName);\n                }\n                else if (next == \"pop\") {\n                    rule.next = popState;\n                }\n                if (rule.push) {\n                    rule.nextState = rule.next || rule.push;\n                    rule.next = pushState;\n                    delete rule.push;\n                }\n                if (rule.rules) {\n                    for (var r in rule.rules) {\n                        if (rules[r]) {\n                            if (rules[r].push)\n                                rules[r].push.apply(rules[r], rule.rules[r]);\n                        }\n                        else {\n                            rules[r] = rule.rules[r];\n                        }\n                    }\n                }\n                var includeName = typeof rule == \"string\" ? rule : rule.include;\n                if (includeName) {\n                    if (Array.isArray(includeName))\n                        toInsert = includeName.map(function (x) { return rules[x]; });\n                    else\n                        toInsert = rules[includeName];\n                }\n                if (toInsert) {\n                    var args = [i, 1].concat(toInsert);\n                    if (rule.noEscape)\n                        args = args.filter(function (x) { return !x.next; });\n                    state.splice.apply(state, args);\n                    i--;\n                }\n                if (rule.keywordMap) {\n                    rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n                    delete rule.defaultToken;\n                }\n            }\n        }\n        Object.keys(rules).forEach(processState, this);\n    };\n    this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n        var keywords = Object.create(null);\n        this.$keywordList = [];\n        Object.keys(map).forEach(function (className) {\n            var a = map[className];\n            var list = a.split(splitChar || \"|\");\n            for (var i = list.length; i--;) {\n                var word = list[i];\n                this.$keywordList.push(word);\n                if (ignoreCase)\n                    word = word.toLowerCase();\n                keywords[word] = className;\n            }\n        }, this);\n        map = null;\n        return ignoreCase\n            ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n            : function (value) { return keywords[value] || defaultToken; };\n    };\n    this.getKeywords = function () {\n        return this.$keywords;\n    };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour = function () {\n    this.$behaviours = {};\n};\n(function () {\n    this.add = function (name, action, callback) {\n        switch (undefined) {\n            case this.$behaviours:\n                this.$behaviours = {};\n            case this.$behaviours[name]:\n                this.$behaviours[name] = {};\n        }\n        this.$behaviours[name][action] = callback;\n    };\n    this.addBehaviours = function (behaviours) {\n        for (var key in behaviours) {\n            for (var action in behaviours[key]) {\n                this.add(key, action, behaviours[key][action]);\n            }\n        }\n    };\n    this.remove = function (name) {\n        if (this.$behaviours && this.$behaviours[name]) {\n            delete this.$behaviours[name];\n        }\n    };\n    this.inherit = function (mode, filter) {\n        if (typeof mode === \"function\") {\n            var behaviours = new mode().getBehaviours(filter);\n        }\n        else {\n            var behaviours = mode.getBehaviours(filter);\n        }\n        this.addBehaviours(behaviours);\n    };\n    this.getBehaviours = function (filter) {\n        if (!filter) {\n            return this.$behaviours;\n        }\n        else {\n            var ret = {};\n            for (var i = 0; i < filter.length; i++) {\n                if (this.$behaviours[filter[i]]) {\n                    ret[filter[i]] = this.$behaviours[filter[i]];\n                }\n            }\n            return ret;\n        }\n    };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = function (session, initialRow, initialColumn) {\n    this.$session = session;\n    this.$row = initialRow;\n    this.$rowTokens = session.getTokens(initialRow);\n    var token = session.getTokenAt(initialRow, initialColumn);\n    this.$tokenIndex = token ? token.index : -1;\n};\n(function () {\n    this.stepBackward = function () {\n        this.$tokenIndex -= 1;\n        while (this.$tokenIndex < 0) {\n            this.$row -= 1;\n            if (this.$row < 0) {\n                this.$row = 0;\n                return null;\n            }\n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = this.$rowTokens.length - 1;\n        }\n        return this.$rowTokens[this.$tokenIndex];\n    };\n    this.stepForward = function () {\n        this.$tokenIndex += 1;\n        var rowCount;\n        while (this.$tokenIndex >= this.$rowTokens.length) {\n            this.$row += 1;\n            if (!rowCount)\n                rowCount = this.$session.getLength();\n            if (this.$row >= rowCount) {\n                this.$row = rowCount - 1;\n                return null;\n            }\n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = 0;\n        }\n        return this.$rowTokens[this.$tokenIndex];\n    };\n    this.getCurrentToken = function () {\n        return this.$rowTokens[this.$tokenIndex];\n    };\n    this.getCurrentTokenRow = function () {\n        return this.$row;\n    };\n    this.getCurrentTokenColumn = function () {\n        var rowTokens = this.$rowTokens;\n        var tokenIndex = this.$tokenIndex;\n        var column = rowTokens[tokenIndex].start;\n        if (column !== undefined)\n            return column;\n        column = 0;\n        while (tokenIndex > 0) {\n            tokenIndex -= 1;\n            column += rowTokens[tokenIndex].value.length;\n        }\n        return column;\n    };\n    this.getCurrentTokenPosition = function () {\n        return { row: this.$row, column: this.getCurrentTokenColumn() };\n    };\n    this.getCurrentTokenRange = function () {\n        var token = this.$rowTokens[this.$tokenIndex];\n        var column = this.getCurrentTokenColumn();\n        return new Range(this.$row, column, this.$row, column + token.value.length);\n    };\n}).call(TokenIterator.prototype);\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n    var id = -1;\n    if (editor.multiSelect) {\n        id = editor.selection.index;\n        if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n            contextCache = { rangeCount: editor.multiSelect.rangeCount };\n    }\n    if (contextCache[id])\n        return context = contextCache[id];\n    context = contextCache[id] = {\n        autoInsertedBrackets: 0,\n        autoInsertedRow: -1,\n        autoInsertedLineEnd: \"\",\n        maybeInsertedBrackets: 0,\n        maybeInsertedRow: -1,\n        maybeInsertedLineStart: \"\",\n        maybeInsertedLineEnd: \"\"\n    };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n    var rowDiff = selection.end.row - selection.start.row;\n    return {\n        text: opening + selected + closing,\n        selection: [\n            0,\n            selection.start.column + 1,\n            rowDiff,\n            selection.end.column + (rowDiff ? 0 : 1)\n        ]\n    };\n};\nvar CstyleBehaviour = function (options) {\n    this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n        var cursor = editor.getCursorPosition();\n        var line = session.doc.getLine(cursor.row);\n        if (text == '{') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '{', '}');\n            }\n            else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n                    CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n                    return {\n                        text: '{}',\n                        selection: [1, 1]\n                    };\n                }\n                else {\n                    CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n                    return {\n                        text: '{',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n        else if (text == '}') {\n            initContext(editor);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == '}') {\n                var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n        else if (text == \"\\n\" || text == \"\\r\\n\") {\n            initContext(editor);\n            var closing = \"\";\n            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n                closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n                CstyleBehaviour.clearMaybeInsertedClosing();\n            }\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === '}') {\n                var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n                if (!openBracePos)\n                    return null;\n                var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n            }\n            else if (closing) {\n                var next_indent = this.$getIndent(line);\n            }\n            else {\n                CstyleBehaviour.clearMaybeInsertedClosing();\n                return;\n            }\n            var indent = next_indent + session.getTabString();\n            return {\n                text: '\\n' + indent + '\\n' + next_indent + closing,\n                selection: [1, indent.length, 1, indent.length]\n            };\n        }\n        else {\n            CstyleBehaviour.clearMaybeInsertedClosing();\n        }\n    });\n    this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '{') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.end.column, range.end.column + 1);\n            if (rightChar == '}') {\n                range.end.column++;\n                return range;\n            }\n            else {\n                context.maybeInsertedBrackets--;\n            }\n        }\n    });\n    this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '(') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '(', ')');\n            }\n            else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n                return {\n                    text: '()',\n                    selection: [1, 1]\n                };\n            }\n        }\n        else if (text == ')') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ')') {\n                var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '(') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ')') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '[') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '[', ']');\n            }\n            else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n                return {\n                    text: '[]',\n                    selection: [1, 1]\n                };\n            }\n        }\n        else if (text == ']') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ']') {\n                var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '[') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ']') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        var quotes = session.$mode.$quotes || defaultQuotes;\n        if (text.length == 1 && quotes[text]) {\n            if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n                return;\n            initContext(editor);\n            var quote = text;\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, quote, quote);\n            }\n            else if (!selected) {\n                var cursor = editor.getCursorPosition();\n                var line = session.doc.getLine(cursor.row);\n                var leftChar = line.substring(cursor.column - 1, cursor.column);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                var token = session.getTokenAt(cursor.row, cursor.column);\n                var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n                    return null;\n                var stringBefore = token && /string|escape/.test(token.type);\n                var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n                var pair;\n                if (rightChar == quote) {\n                    pair = stringBefore !== stringAfter;\n                    if (pair && /string\\.end/.test(rightToken.type))\n                        pair = false;\n                }\n                else {\n                    if (stringBefore && !stringAfter)\n                        return null; // wrap string with different quote\n                    if (stringBefore && stringAfter)\n                        return null; // do not pair quotes inside strings\n                    var wordRe = session.$mode.tokenRe;\n                    wordRe.lastIndex = 0;\n                    var isWordBefore = wordRe.test(leftChar);\n                    wordRe.lastIndex = 0;\n                    var isWordAfter = wordRe.test(leftChar);\n                    if (isWordBefore || isWordAfter)\n                        return null; // before or after alphanumeric\n                    if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n                        return null; // there is rightChar and it isn't closing\n                    var charBefore = line[cursor.column - 2];\n                    if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n                        return null;\n                    pair = true;\n                }\n                return {\n                    text: pair ? quote + quote : \"\",\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var quotes = session.$mode.$quotes || defaultQuotes;\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n    var cursor = editor.getCursorPosition();\n    var iterator = new TokenIterator(session, cursor.row, cursor.column);\n    if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n        if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n            return true;\n        var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n        if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n            return false;\n    }\n    iterator.stepForward();\n    return iterator.getCurrentTokenRow() !== cursor.row ||\n        this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour.$matchTokenType = function (token, types) {\n    return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour.recordAutoInsert = function (editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n        context.autoInsertedBrackets = 0;\n    context.autoInsertedRow = cursor.row;\n    context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n    context.autoInsertedBrackets++;\n};\nCstyleBehaviour.recordMaybeInsert = function (editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isMaybeInsertedClosing(cursor, line))\n        context.maybeInsertedBrackets = 0;\n    context.maybeInsertedRow = cursor.row;\n    context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n    context.maybeInsertedLineEnd = line.substr(cursor.column);\n    context.maybeInsertedBrackets++;\n};\nCstyleBehaviour.isAutoInsertedClosing = function (cursor, line, bracket) {\n    return context.autoInsertedBrackets > 0 &&\n        cursor.row === context.autoInsertedRow &&\n        bracket === context.autoInsertedLineEnd[0] &&\n        line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour.isMaybeInsertedClosing = function (cursor, line) {\n    return context.maybeInsertedBrackets > 0 &&\n        cursor.row === context.maybeInsertedRow &&\n        line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n        line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour.popAutoInsertedClosing = function () {\n    context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n    context.autoInsertedBrackets--;\n};\nCstyleBehaviour.clearMaybeInsertedClosing = function () {\n    if (context) {\n        context.maybeInsertedBrackets = 0;\n        context.maybeInsertedRow = -1;\n    }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n    str.push(code += wordChars[i]);\n    if (wordChars[i + 1])\n        str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n    this.HighlightRules = TextHighlightRules;\n};\n(function () {\n    this.$defaultBehaviour = new CstyleBehaviour();\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n    this.getTokenizer = function () {\n        if (!this.$tokenizer) {\n            this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n            this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n        }\n        return this.$tokenizer;\n    };\n    this.lineCommentStart = \"\";\n    this.blockComment = \"\";\n    this.toggleCommentLines = function (state, session, startRow, endRow) {\n        var doc = session.doc;\n        var ignoreBlankLines = true;\n        var shouldRemove = true;\n        var minIndent = Infinity;\n        var tabSize = session.getTabSize();\n        var insertAtTabStop = false;\n        if (!this.lineCommentStart) {\n            if (!this.blockComment)\n                return false;\n            var lineCommentStart = this.blockComment.start;\n            var lineCommentEnd = this.blockComment.end;\n            var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n            var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n            var comment = function (line, i) {\n                if (testRemove(line, i))\n                    return;\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n                    doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n                }\n            };\n            var uncomment = function (line, i) {\n                var m;\n                if (m = line.match(regexpEnd))\n                    doc.removeInLine(i, line.length - m[0].length, line.length);\n                if (m = line.match(regexpStart))\n                    doc.removeInLine(i, m[1].length, m[0].length);\n            };\n            var testRemove = function (line, row) {\n                if (regexpStart.test(line))\n                    return true;\n                var tokens = session.getTokens(row);\n                for (var i = 0; i < tokens.length; i++) {\n                    if (tokens[i].type === \"comment\")\n                        return true;\n                }\n            };\n        }\n        else {\n            if (Array.isArray(this.lineCommentStart)) {\n                var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n                var lineCommentStart = this.lineCommentStart[0];\n            }\n            else {\n                var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n                var lineCommentStart = this.lineCommentStart;\n            }\n            regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n            insertAtTabStop = session.getUseSoftTabs();\n            var uncomment = function (line, i) {\n                var m = line.match(regexpStart);\n                if (!m)\n                    return;\n                var start = m[1].length, end = m[0].length;\n                if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n                    end--;\n                doc.removeInLine(i, start, end);\n            };\n            var commentWithSpace = lineCommentStart + \" \";\n            var comment = function (line, i) {\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    if (shouldInsertSpace(line, minIndent, minIndent))\n                        doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n                    else\n                        doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n                }\n            };\n            var testRemove = function (line, i) {\n                return regexpStart.test(line);\n            };\n            var shouldInsertSpace = function (line, before, after) {\n                var spaces = 0;\n                while (before-- && line.charAt(before) == \" \")\n                    spaces++;\n                if (spaces % tabSize != 0)\n                    return false;\n                var spaces = 0;\n                while (line.charAt(after++) == \" \")\n                    spaces++;\n                if (tabSize > 2)\n                    return spaces % tabSize != tabSize - 1;\n                else\n                    return spaces % tabSize == 0;\n            };\n        }\n        function iter(fun) {\n            for (var i = startRow; i <= endRow; i++)\n                fun(doc.getLine(i), i);\n        }\n        var minEmptyLength = Infinity;\n        iter(function (line, i) {\n            var indent = line.search(/\\S/);\n            if (indent !== -1) {\n                if (indent < minIndent)\n                    minIndent = indent;\n                if (shouldRemove && !testRemove(line, i))\n                    shouldRemove = false;\n            }\n            else if (minEmptyLength > line.length) {\n                minEmptyLength = line.length;\n            }\n        });\n        if (minIndent == Infinity) {\n            minIndent = minEmptyLength;\n            ignoreBlankLines = false;\n            shouldRemove = false;\n        }\n        if (insertAtTabStop && minIndent % tabSize != 0)\n            minIndent = Math.floor(minIndent / tabSize) * tabSize;\n        iter(shouldRemove ? uncomment : comment);\n    };\n    this.toggleBlockComment = function (state, session, range, cursor) {\n        var comment = this.blockComment;\n        if (!comment)\n            return;\n        if (!comment.start && comment[0])\n            comment = comment[0];\n        var iterator = new TokenIterator(session, cursor.row, cursor.column);\n        var token = iterator.getCurrentToken();\n        var sel = session.selection;\n        var initialRange = session.selection.toOrientedRange();\n        var startRow, colDiff;\n        if (token && /comment/.test(token.type)) {\n            var startRange, endRange;\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.start);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    startRange = new Range(row, column, row, column + comment.start.length);\n                    break;\n                }\n                token = iterator.stepBackward();\n            }\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.end);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    endRange = new Range(row, column, row, column + comment.end.length);\n                    break;\n                }\n                token = iterator.stepForward();\n            }\n            if (endRange)\n                session.remove(endRange);\n            if (startRange) {\n                session.remove(startRange);\n                startRow = startRange.start.row;\n                colDiff = -comment.start.length;\n            }\n        }\n        else {\n            colDiff = comment.start.length;\n            startRow = range.start.row;\n            session.insert(range.end, comment.end);\n            session.insert(range.start, comment.start);\n        }\n        if (initialRange.start.row == startRow)\n            initialRange.start.column += colDiff;\n        if (initialRange.end.row == startRow)\n            initialRange.end.column += colDiff;\n        session.selection.fromOrientedRange(initialRange);\n    };\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.autoOutdent = function (state, doc, row) {\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.createModeDelegates = function (mapping) {\n        this.$embeds = [];\n        this.$modes = {};\n        for (var i in mapping) {\n            if (mapping[i]) {\n                var Mode = mapping[i];\n                var id = Mode.prototype.$id;\n                var mode = config.$modes[id];\n                if (!mode)\n                    config.$modes[id] = mode = new Mode();\n                if (!config.$modes[i])\n                    config.$modes[i] = mode;\n                this.$embeds.push(i);\n                this.$modes[i] = mode;\n            }\n        }\n        var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n            \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n        for (var i = 0; i < delegations.length; i++) {\n            (function (scope) {\n                var functionName = delegations[i];\n                var defaultHandler = scope[functionName];\n                scope[delegations[i]] = function () {\n                    return this.$delegator(functionName, arguments, defaultHandler);\n                };\n            }(this));\n        }\n    };\n    this.$delegator = function (method, args, defaultHandler) {\n        var state = args[0] || \"start\";\n        if (typeof state != \"string\") {\n            if (Array.isArray(state[2])) {\n                var language = state[2][state[2].length - 1];\n                var mode = this.$modes[language];\n                if (mode)\n                    return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n            }\n            state = state[0] || \"start\";\n        }\n        for (var i = 0; i < this.$embeds.length; i++) {\n            if (!this.$modes[this.$embeds[i]])\n                continue;\n            var split = state.split(this.$embeds[i]);\n            if (!split[0] && split[1]) {\n                args[0] = split[1];\n                var mode = this.$modes[this.$embeds[i]];\n                return mode[method].apply(mode, args);\n            }\n        }\n        var ret = defaultHandler.apply(this, args);\n        return defaultHandler ? ret : undefined;\n    };\n    this.transformAction = function (state, action, editor, session, param) {\n        if (this.$behaviour) {\n            var behaviours = this.$behaviour.getBehaviours();\n            for (var key in behaviours) {\n                if (behaviours[key][action]) {\n                    var ret = behaviours[key][action].apply(this, arguments);\n                    if (ret) {\n                        return ret;\n                    }\n                }\n            }\n        }\n    };\n    this.getKeywords = function (append) {\n        if (!this.completionKeywords) {\n            var rules = this.$tokenizer.rules;\n            var completionKeywords = [];\n            for (var rule in rules) {\n                var ruleItr = rules[rule];\n                for (var r = 0, l = ruleItr.length; r < l; r++) {\n                    if (typeof ruleItr[r].token === \"string\") {\n                        if (/keyword|support|storage/.test(ruleItr[r].token))\n                            completionKeywords.push(ruleItr[r].regex);\n                    }\n                    else if (typeof ruleItr[r].token === \"object\") {\n                        for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n                            if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n                                var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n                                completionKeywords.push(rule.substr(1, rule.length - 2));\n                            }\n                        }\n                    }\n                }\n            }\n            this.completionKeywords = completionKeywords;\n        }\n        if (!append)\n            return this.$keywordList;\n        return completionKeywords.concat(this.$keywordList || []);\n    };\n    this.$createKeywordList = function () {\n        if (!this.$highlightRules)\n            this.getTokenizer();\n        return this.$keywordList = this.$highlightRules.$keywordList || [];\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        var keywords = this.$keywordList || this.$createKeywordList();\n        return keywords.map(function (word) {\n            return {\n                name: word,\n                value: word,\n                score: 0,\n                meta: \"keyword\"\n            };\n        });\n    };\n    this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function () {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    this.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    }\n    else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n    }\n    else {\n        this.insert({ row: 0, column: 0 }, textOrLines);\n    }\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    this.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function (text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    }\n    else {\n        this.$split = function (text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function () {\n        return this.$lines.length;\n    };\n    this.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    this.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    this.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    this.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    this.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    this.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    this.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    this.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    this.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    this.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    this.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = function (tokenizer, editor) {\n    this.running = false;\n    this.lines = [];\n    this.states = [];\n    this.currentLine = 0;\n    this.tokenizer = tokenizer;\n    var self = this;\n    this.$worker = function () {\n        if (!self.running) {\n            return;\n        }\n        var workerStart = new Date();\n        var currentLine = self.currentLine;\n        var endLine = -1;\n        var doc = self.doc;\n        var startLine = currentLine;\n        while (self.lines[currentLine])\n            currentLine++;\n        var len = doc.getLength();\n        var processedLines = 0;\n        self.running = false;\n        while (currentLine < len) {\n            self.$tokenizeRow(currentLine);\n            endLine = currentLine;\n            do {\n                currentLine++;\n            } while (self.lines[currentLine]);\n            processedLines++;\n            if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n                self.running = setTimeout(self.$worker, 20);\n                break;\n            }\n        }\n        self.currentLine = currentLine;\n        if (endLine == -1)\n            endLine = currentLine;\n        if (startLine <= endLine)\n            self.fireUpdateEvent(startLine, endLine);\n    };\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setTokenizer = function (tokenizer) {\n        this.tokenizer = tokenizer;\n        this.lines = [];\n        this.states = [];\n        this.start(0);\n    };\n    this.setDocument = function (doc) {\n        this.doc = doc;\n        this.lines = [];\n        this.states = [];\n        this.stop();\n    };\n    this.fireUpdateEvent = function (firstRow, lastRow) {\n        var data = {\n            first: firstRow,\n            last: lastRow\n        };\n        this._signal(\"update\", { data: data });\n    };\n    this.start = function (startRow) {\n        this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n        this.lines.splice(this.currentLine, this.lines.length);\n        this.states.splice(this.currentLine, this.states.length);\n        this.stop();\n        this.running = setTimeout(this.$worker, 700);\n    };\n    this.scheduleStart = function () {\n        if (!this.running)\n            this.running = setTimeout(this.$worker, 700);\n    };\n    this.$updateOnChange = function (delta) {\n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n        if (len === 0) {\n            this.lines[startRow] = null;\n        }\n        else if (delta.action == \"remove\") {\n            this.lines.splice(startRow, len + 1, null);\n            this.states.splice(startRow, len + 1, null);\n        }\n        else {\n            var args = Array(len + 1);\n            args.unshift(startRow, 1);\n            this.lines.splice.apply(this.lines, args);\n            this.states.splice.apply(this.states, args);\n        }\n        this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n        this.stop();\n    };\n    this.stop = function () {\n        if (this.running)\n            clearTimeout(this.running);\n        this.running = false;\n    };\n    this.getTokens = function (row) {\n        return this.lines[row] || this.$tokenizeRow(row);\n    };\n    this.getState = function (row) {\n        if (this.currentLine == row)\n            this.$tokenizeRow(row);\n        return this.states[row] || \"start\";\n    };\n    this.$tokenizeRow = function (row) {\n        var line = this.doc.getLine(row);\n        var state = this.states[row - 1];\n        var data = this.tokenizer.getLineTokens(line, state, row);\n        if (this.states[row] + \"\" !== data.state + \"\") {\n            this.states[row] = data.state;\n            this.lines[row + 1] = null;\n            if (this.currentLine > row + 1)\n                this.currentLine = row + 1;\n        }\n        else if (this.currentLine == row) {\n            this.currentLine = row + 1;\n        }\n        return this.lines[row] = data.tokens;\n    };\n    this.cleanup = function () {\n        this.running = false;\n        this.lines = [];\n        this.states = [];\n        this.currentLine = 0;\n        this.removeAllListeners();\n    };\n}).call(BackgroundTokenizer.prototype);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = function (regExp, clazz, type) {\n    this.setRegexp(regExp);\n    this.clazz = clazz;\n    this.type = type || \"text\";\n};\n(function () {\n    this.MAX_RANGES = 500;\n    this.setRegexp = function (regExp) {\n        if (this.regExp + \"\" == regExp + \"\")\n            return;\n        this.regExp = regExp;\n        this.cache = [];\n    };\n    this.update = function (html, markerLayer, session, config) {\n        if (!this.regExp)\n            return;\n        var start = config.firstRow, end = config.lastRow;\n        var renderedMarkerRanges = {};\n        for (var i = start; i <= end; i++) {\n            var ranges = this.cache[i];\n            if (ranges == null) {\n                ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n                if (ranges.length > this.MAX_RANGES)\n                    ranges = ranges.slice(0, this.MAX_RANGES);\n                ranges = ranges.map(function (match) {\n                    return new Range(i, match.offset, i, match.offset + match.length);\n                });\n                this.cache[i] = ranges.length ? ranges : \"\";\n            }\n            for (var j = ranges.length; j--;) {\n                var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n                var rangeAsString = rangeToAddMarkerTo.toString();\n                if (renderedMarkerRanges[rangeAsString])\n                    continue;\n                renderedMarkerRanges[rangeAsString] = true;\n                markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n            }\n        }\n    };\n}).call(SearchHighlight.prototype);\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n    this.foldData = foldData;\n    if (Array.isArray(folds)) {\n        this.folds = folds;\n    }\n    else {\n        folds = this.folds = [folds];\n    }\n    var last = folds[folds.length - 1];\n    this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n    this.start = this.range.start;\n    this.end = this.range.end;\n    this.folds.forEach(function (fold) {\n        fold.setFoldLine(this);\n    }, this);\n}\n(function () {\n    this.shiftRow = function (shift) {\n        this.start.row += shift;\n        this.end.row += shift;\n        this.folds.forEach(function (fold) {\n            fold.start.row += shift;\n            fold.end.row += shift;\n        });\n    };\n    this.addFold = function (fold) {\n        if (fold.sameRow) {\n            if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n                throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n            }\n            this.folds.push(fold);\n            this.folds.sort(function (a, b) {\n                return -a.range.compareEnd(b.start.row, b.start.column);\n            });\n            if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n                this.end.row = fold.end.row;\n                this.end.column = fold.end.column;\n            }\n            else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n                this.start.row = fold.start.row;\n                this.start.column = fold.start.column;\n            }\n        }\n        else if (fold.start.row == this.end.row) {\n            this.folds.push(fold);\n            this.end.row = fold.end.row;\n            this.end.column = fold.end.column;\n        }\n        else if (fold.end.row == this.start.row) {\n            this.folds.unshift(fold);\n            this.start.row = fold.start.row;\n            this.start.column = fold.start.column;\n        }\n        else {\n            throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n        }\n        fold.foldLine = this;\n    };\n    this.containsRow = function (row) {\n        return row >= this.start.row && row <= this.end.row;\n    };\n    this.walk = function (callback, endRow, endColumn) {\n        var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n        if (endRow == null) {\n            endRow = this.end.row;\n            endColumn = this.end.column;\n        }\n        for (var i = 0; i < folds.length; i++) {\n            fold = folds[i];\n            cmp = fold.range.compareStart(endRow, endColumn);\n            if (cmp == -1) {\n                callback(null, endRow, endColumn, lastEnd, isNewRow);\n                return;\n            }\n            stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n            stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n            if (stop || cmp === 0) {\n                return;\n            }\n            isNewRow = !fold.sameRow;\n            lastEnd = fold.end.column;\n        }\n        callback(null, endRow, endColumn, lastEnd, isNewRow);\n    };\n    this.getNextFoldTo = function (row, column) {\n        var fold, cmp;\n        for (var i = 0; i < this.folds.length; i++) {\n            fold = this.folds[i];\n            cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                return {\n                    fold: fold,\n                    kind: \"after\"\n                };\n            }\n            else if (cmp === 0) {\n                return {\n                    fold: fold,\n                    kind: \"inside\"\n                };\n            }\n        }\n        return null;\n    };\n    this.addRemoveChars = function (row, column, len) {\n        var ret = this.getNextFoldTo(row, column), fold, folds;\n        if (ret) {\n            fold = ret.fold;\n            if (ret.kind == \"inside\"\n                && fold.start.column != column\n                && fold.start.row != row) {\n                window.console && window.console.log(row, column, fold);\n            }\n            else if (fold.start.row == row) {\n                folds = this.folds;\n                var i = folds.indexOf(fold);\n                if (i === 0) {\n                    this.start.column += len;\n                }\n                for (i; i < folds.length; i++) {\n                    fold = folds[i];\n                    fold.start.column += len;\n                    if (!fold.sameRow) {\n                        return;\n                    }\n                    fold.end.column += len;\n                }\n                this.end.column += len;\n            }\n        }\n    };\n    this.split = function (row, column) {\n        var pos = this.getNextFoldTo(row, column);\n        if (!pos || pos.kind == \"inside\")\n            return null;\n        var fold = pos.fold;\n        var folds = this.folds;\n        var foldData = this.foldData;\n        var i = folds.indexOf(fold);\n        var foldBefore = folds[i - 1];\n        this.end.row = foldBefore.end.row;\n        this.end.column = foldBefore.end.column;\n        folds = folds.splice(i, folds.length - i);\n        var newFoldLine = new FoldLine(foldData, folds);\n        foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n        return newFoldLine;\n    };\n    this.merge = function (foldLineNext) {\n        var folds = foldLineNext.folds;\n        for (var i = 0; i < folds.length; i++) {\n            this.addFold(folds[i]);\n        }\n        var foldData = this.foldData;\n        foldData.splice(foldData.indexOf(foldLineNext), 1);\n    };\n    this.toString = function () {\n        var ret = [this.range.toString() + \": [\"];\n        this.folds.forEach(function (fold) {\n            ret.push(\"  \" + fold.toString());\n        });\n        ret.push(\"]\");\n        return ret.join(\"\\n\");\n    };\n    this.idxToPosition = function (idx) {\n        var lastFoldEndColumn = 0;\n        for (var i = 0; i < this.folds.length; i++) {\n            var fold = this.folds[i];\n            idx -= fold.start.column - lastFoldEndColumn;\n            if (idx < 0) {\n                return {\n                    row: fold.start.row,\n                    column: fold.start.column + idx\n                };\n            }\n            idx -= fold.placeholder.length;\n            if (idx < 0) {\n                return fold.start;\n            }\n            lastFoldEndColumn = fold.end.column;\n        }\n        return {\n            row: this.end.row,\n            column: this.end.column + idx\n        };\n    };\n}).call(FoldLine.prototype);\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = function () {\n    this.ranges = [];\n    this.$bias = 1;\n};\n(function () {\n    this.comparePoints = comparePoints;\n    this.pointIndex = function (pos, excludeEdges, startIndex) {\n        var list = this.ranges;\n        for (var i = startIndex || 0; i < list.length; i++) {\n            var range = list[i];\n            var cmpEnd = comparePoints(pos, range.end);\n            if (cmpEnd > 0)\n                continue;\n            var cmpStart = comparePoints(pos, range.start);\n            if (cmpEnd === 0)\n                return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n            if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n                return i;\n            return -i - 1;\n        }\n        return -i - 1;\n    };\n    this.add = function (range) {\n        var excludeEdges = !range.isEmpty();\n        var startIndex = this.pointIndex(range.start, excludeEdges);\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n        var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n        else\n            endIndex++;\n        return this.ranges.splice(startIndex, endIndex - startIndex, range);\n    };\n    this.addList = function (list) {\n        var removed = [];\n        for (var i = list.length; i--;) {\n            removed.push.apply(removed, this.add(list[i]));\n        }\n        return removed;\n    };\n    this.substractPoint = function (pos) {\n        var i = this.pointIndex(pos);\n        if (i >= 0)\n            return this.ranges.splice(i, 1);\n    };\n    this.merge = function () {\n        var removed = [];\n        var list = this.ranges;\n        list = list.sort(function (a, b) {\n            return comparePoints(a.start, b.start);\n        });\n        var next = list[0], range;\n        for (var i = 1; i < list.length; i++) {\n            range = next;\n            next = list[i];\n            var cmp = comparePoints(range.end, next.start);\n            if (cmp < 0)\n                continue;\n            if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n                continue;\n            if (comparePoints(range.end, next.end) < 0) {\n                range.end.row = next.end.row;\n                range.end.column = next.end.column;\n            }\n            list.splice(i, 1);\n            removed.push(next);\n            next = range;\n            i--;\n        }\n        this.ranges = list;\n        return removed;\n    };\n    this.contains = function (row, column) {\n        return this.pointIndex({ row: row, column: column }) >= 0;\n    };\n    this.containsPoint = function (pos) {\n        return this.pointIndex(pos) >= 0;\n    };\n    this.rangeAtPoint = function (pos) {\n        var i = this.pointIndex(pos);\n        if (i >= 0)\n            return this.ranges[i];\n    };\n    this.clipRows = function (startRow, endRow) {\n        var list = this.ranges;\n        if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n            return [];\n        var startIndex = this.pointIndex({ row: startRow, column: 0 });\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n        var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n        var clipped = [];\n        for (var i = startIndex; i < endIndex; i++) {\n            clipped.push(list[i]);\n        }\n        return clipped;\n    };\n    this.removeAll = function () {\n        return this.ranges.splice(0, this.ranges.length);\n    };\n    this.attach = function (session) {\n        if (this.session)\n            this.detach();\n        this.session = session;\n        this.onChange = this.$onChange.bind(this);\n        this.session.on('change', this.onChange);\n    };\n    this.detach = function () {\n        if (!this.session)\n            return;\n        this.session.removeListener('change', this.onChange);\n        this.session = null;\n    };\n    this.$onChange = function (delta) {\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var ranges = this.ranges;\n        for (var i = 0, n = ranges.length; i < n; i++) {\n            var r = ranges[i];\n            if (r.end.row >= startRow)\n                break;\n        }\n        if (delta.action == \"insert\") {\n            var lineDif = endRow - startRow;\n            var colDiff = -start.column + end.column;\n            for (; i < n; i++) {\n                var r = ranges[i];\n                if (r.start.row > startRow)\n                    break;\n                if (r.start.row == startRow && r.start.column >= start.column) {\n                    if (r.start.column == start.column && this.$bias <= 0) {\n                    }\n                    else {\n                        r.start.column += colDiff;\n                        r.start.row += lineDif;\n                    }\n                }\n                if (r.end.row == startRow && r.end.column >= start.column) {\n                    if (r.end.column == start.column && this.$bias < 0) {\n                        continue;\n                    }\n                    if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n                        if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n                            r.end.column -= colDiff;\n                    }\n                    r.end.column += colDiff;\n                    r.end.row += lineDif;\n                }\n            }\n        }\n        else {\n            var lineDif = startRow - endRow;\n            var colDiff = start.column - end.column;\n            for (; i < n; i++) {\n                var r = ranges[i];\n                if (r.start.row > endRow)\n                    break;\n                if (r.end.row < endRow\n                    && (startRow < r.end.row\n                        || startRow == r.end.row && start.column < r.end.column)) {\n                    r.end.row = startRow;\n                    r.end.column = start.column;\n                }\n                else if (r.end.row == endRow) {\n                    if (r.end.column <= end.column) {\n                        if (lineDif || r.end.column > start.column) {\n                            r.end.column = start.column;\n                            r.end.row = start.row;\n                        }\n                    }\n                    else {\n                        r.end.column += colDiff;\n                        r.end.row += lineDif;\n                    }\n                }\n                else if (r.end.row > endRow) {\n                    r.end.row += lineDif;\n                }\n                if (r.start.row < endRow\n                    && (startRow < r.start.row\n                        || startRow == r.start.row && start.column < r.start.column)) {\n                    r.start.row = startRow;\n                    r.start.column = start.column;\n                }\n                else if (r.start.row == endRow) {\n                    if (r.start.column <= end.column) {\n                        if (lineDif || r.start.column > start.column) {\n                            r.start.column = start.column;\n                            r.start.row = start.row;\n                        }\n                    }\n                    else {\n                        r.start.column += colDiff;\n                        r.start.row += lineDif;\n                    }\n                }\n                else if (r.start.row > endRow) {\n                    r.start.row += lineDif;\n                }\n            }\n        }\n        if (lineDif != 0 && i < n) {\n            for (; i < n; i++) {\n                var r = ranges[i];\n                r.start.row += lineDif;\n                r.end.row += lineDif;\n            }\n        }\n    };\n}).call(RangeList.prototype);\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar RangeList = require(\"../range_list\").RangeList;\nvar oop = require(\"../lib/oop\");\nvar Fold = exports.Fold = function (range, placeholder) {\n    this.foldLine = null;\n    this.placeholder = placeholder;\n    this.range = range;\n    this.start = range.start;\n    this.end = range.end;\n    this.sameRow = range.start.row == range.end.row;\n    this.subFolds = this.ranges = [];\n};\noop.inherits(Fold, RangeList);\n(function () {\n    this.toString = function () {\n        return '\"' + this.placeholder + '\" ' + this.range.toString();\n    };\n    this.setFoldLine = function (foldLine) {\n        this.foldLine = foldLine;\n        this.subFolds.forEach(function (fold) {\n            fold.setFoldLine(foldLine);\n        });\n    };\n    this.clone = function () {\n        var range = this.range.clone();\n        var fold = new Fold(range, this.placeholder);\n        this.subFolds.forEach(function (subFold) {\n            fold.subFolds.push(subFold.clone());\n        });\n        fold.collapseChildren = this.collapseChildren;\n        return fold;\n    };\n    this.addSubFold = function (fold) {\n        if (this.range.isEqual(fold))\n            return;\n        consumeRange(fold, this.start);\n        var row = fold.start.row, column = fold.start.column;\n        for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n            cmp = this.subFolds[i].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        var afterStart = this.subFolds[i];\n        var firstConsumed = 0;\n        if (cmp == 0) {\n            if (afterStart.range.containsRange(fold))\n                return afterStart.addSubFold(fold);\n            else\n                firstConsumed = 1;\n        }\n        var row = fold.range.end.row, column = fold.range.end.column;\n        for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n            cmp = this.subFolds[j].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        if (cmp == 0)\n            j++;\n        var consumedFolds = this.subFolds.splice(i, j - i, fold);\n        var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n        for (var k = firstConsumed; k < last; k++) {\n            fold.addSubFold(consumedFolds[k]);\n        }\n        fold.setFoldLine(this.foldLine);\n        return fold;\n    };\n    this.restoreRange = function (range) {\n        return restoreRange(range, this.start);\n    };\n}).call(Fold.prototype);\nfunction consumePoint(point, anchor) {\n    point.row -= anchor.row;\n    if (point.row == 0)\n        point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n    consumePoint(range.start, anchor);\n    consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n    if (point.row == 0)\n        point.column += anchor.column;\n    point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n    restorePoint(range.start, anchor);\n    restorePoint(range.end, anchor);\n}\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nfunction Folding() {\n    this.getFoldAt = function (row, column, side) {\n        var foldLine = this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n        var folds = foldLine.folds;\n        for (var i = 0; i < folds.length; i++) {\n            var range = folds[i].range;\n            if (range.contains(row, column)) {\n                if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n                    continue;\n                }\n                else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n                    continue;\n                }\n                return folds[i];\n            }\n        }\n    };\n    this.getFoldsInRange = function (range) {\n        var start = range.start;\n        var end = range.end;\n        var foldLines = this.$foldData;\n        var foundFolds = [];\n        start.column += 1;\n        end.column -= 1;\n        for (var i = 0; i < foldLines.length; i++) {\n            var cmp = foldLines[i].range.compareRange(range);\n            if (cmp == 2) {\n                continue;\n            }\n            else if (cmp == -2) {\n                break;\n            }\n            var folds = foldLines[i].folds;\n            for (var j = 0; j < folds.length; j++) {\n                var fold = folds[j];\n                cmp = fold.range.compareRange(range);\n                if (cmp == -2) {\n                    break;\n                }\n                else if (cmp == 2) {\n                    continue;\n                }\n                else \n                if (cmp == 42) {\n                    break;\n                }\n                foundFolds.push(fold);\n            }\n        }\n        start.column -= 1;\n        end.column += 1;\n        return foundFolds;\n    };\n    this.getFoldsInRangeList = function (ranges) {\n        if (Array.isArray(ranges)) {\n            var folds = [];\n            ranges.forEach(function (range) {\n                folds = folds.concat(this.getFoldsInRange(range));\n            }, this);\n        }\n        else {\n            var folds = this.getFoldsInRange(ranges);\n        }\n        return folds;\n    };\n    this.getAllFolds = function () {\n        var folds = [];\n        var foldLines = this.$foldData;\n        for (var i = 0; i < foldLines.length; i++)\n            for (var j = 0; j < foldLines[i].folds.length; j++)\n                folds.push(foldLines[i].folds[j]);\n        return folds;\n    };\n    this.getFoldStringAt = function (row, column, trim, foldLine) {\n        foldLine = foldLine || this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n        var lastFold = {\n            end: { column: 0 }\n        };\n        var str, fold;\n        for (var i = 0; i < foldLine.folds.length; i++) {\n            fold = foldLine.folds[i];\n            var cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                str = this\n                    .getLine(fold.start.row)\n                    .substring(lastFold.end.column, fold.start.column);\n                break;\n            }\n            else if (cmp === 0) {\n                return null;\n            }\n            lastFold = fold;\n        }\n        if (!str)\n            str = this.getLine(fold.start.row).substring(lastFold.end.column);\n        if (trim == -1)\n            return str.substring(0, column - lastFold.end.column);\n        else if (trim == 1)\n            return str.substring(column - lastFold.end.column);\n        else\n            return str;\n    };\n    this.getFoldLine = function (docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n                return foldLine;\n            }\n            else if (foldLine.end.row > docRow) {\n                return null;\n            }\n        }\n        return null;\n    };\n    this.getNextFoldLine = function (docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.end.row >= docRow) {\n                return foldLine;\n            }\n        }\n        return null;\n    };\n    this.getFoldedRowCount = function (first, last) {\n        var foldData = this.$foldData, rowCount = last - first + 1;\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n            if (end >= last) {\n                if (start < last) {\n                    if (start >= first)\n                        rowCount -= last - start;\n                    else\n                        rowCount = 0; // in one fold\n                }\n                break;\n            }\n            else if (end >= first) {\n                if (start >= first) // fold inside range\n                    rowCount -= end - start;\n                else\n                    rowCount -= end - first + 1;\n            }\n        }\n        return rowCount;\n    };\n    this.$addFoldLine = function (foldLine) {\n        this.$foldData.push(foldLine);\n        this.$foldData.sort(function (a, b) {\n            return a.start.row - b.start.row;\n        });\n        return foldLine;\n    };\n    this.addFold = function (placeholder, range) {\n        var foldData = this.$foldData;\n        var added = false;\n        var fold;\n        if (placeholder instanceof Fold)\n            fold = placeholder;\n        else {\n            fold = new Fold(range, placeholder);\n            fold.collapseChildren = range.collapseChildren;\n        }\n        this.$clipRangeToDocument(fold.range);\n        var startRow = fold.start.row;\n        var startColumn = fold.start.column;\n        var endRow = fold.end.row;\n        var endColumn = fold.end.column;\n        var startFold = this.getFoldAt(startRow, startColumn, 1);\n        var endFold = this.getFoldAt(endRow, endColumn, -1);\n        if (startFold && endFold == startFold)\n            return startFold.addSubFold(fold);\n        if (startFold && !startFold.range.isStart(startRow, startColumn))\n            this.removeFold(startFold);\n        if (endFold && !endFold.range.isEnd(endRow, endColumn))\n            this.removeFold(endFold);\n        var folds = this.getFoldsInRange(fold.range);\n        if (folds.length > 0) {\n            this.removeFolds(folds);\n            if (!fold.collapseChildren) {\n                folds.forEach(function (subFold) {\n                    fold.addSubFold(subFold);\n                });\n            }\n        }\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (endRow == foldLine.start.row) {\n                foldLine.addFold(fold);\n                added = true;\n                break;\n            }\n            else if (startRow == foldLine.end.row) {\n                foldLine.addFold(fold);\n                added = true;\n                if (!fold.sameRow) {\n                    var foldLineNext = foldData[i + 1];\n                    if (foldLineNext && foldLineNext.start.row == endRow) {\n                        foldLine.merge(foldLineNext);\n                        break;\n                    }\n                }\n                break;\n            }\n            else if (endRow <= foldLine.start.row) {\n                break;\n            }\n        }\n        if (!added)\n            foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n        if (this.$useWrapMode)\n            this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n        else\n            this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"add\" });\n        return fold;\n    };\n    this.addFolds = function (folds) {\n        folds.forEach(function (fold) {\n            this.addFold(fold);\n        }, this);\n    };\n    this.removeFold = function (fold) {\n        var foldLine = fold.foldLine;\n        var startRow = foldLine.start.row;\n        var endRow = foldLine.end.row;\n        var foldLines = this.$foldData;\n        var folds = foldLine.folds;\n        if (folds.length == 1) {\n            foldLines.splice(foldLines.indexOf(foldLine), 1);\n        }\n        else \n        if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n            folds.pop();\n            foldLine.end.row = folds[folds.length - 1].end.row;\n            foldLine.end.column = folds[folds.length - 1].end.column;\n        }\n        else \n        if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n            folds.shift();\n            foldLine.start.row = folds[0].start.row;\n            foldLine.start.column = folds[0].start.column;\n        }\n        else \n        if (fold.sameRow) {\n            folds.splice(folds.indexOf(fold), 1);\n        }\n        else \n        {\n            var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n            folds = newFoldLine.folds;\n            folds.shift();\n            newFoldLine.start.row = folds[0].start.row;\n            newFoldLine.start.column = folds[0].start.column;\n        }\n        if (!this.$updating) {\n            if (this.$useWrapMode)\n                this.$updateWrapData(startRow, endRow);\n            else\n                this.$updateRowLengthCache(startRow, endRow);\n        }\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n    };\n    this.removeFolds = function (folds) {\n        var cloneFolds = [];\n        for (var i = 0; i < folds.length; i++) {\n            cloneFolds.push(folds[i]);\n        }\n        cloneFolds.forEach(function (fold) {\n            this.removeFold(fold);\n        }, this);\n        this.$modified = true;\n    };\n    this.expandFold = function (fold) {\n        this.removeFold(fold);\n        fold.subFolds.forEach(function (subFold) {\n            fold.restoreRange(subFold);\n            this.addFold(subFold);\n        }, this);\n        if (fold.collapseChildren > 0) {\n            this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n        }\n        fold.subFolds = [];\n    };\n    this.expandFolds = function (folds) {\n        folds.forEach(function (fold) {\n            this.expandFold(fold);\n        }, this);\n    };\n    this.unfold = function (location, expandInner) {\n        var range, folds;\n        if (location == null) {\n            range = new Range(0, 0, this.getLength(), 0);\n            if (expandInner == null)\n                expandInner = true;\n        }\n        else if (typeof location == \"number\") {\n            range = new Range(location, 0, location, this.getLine(location).length);\n        }\n        else if (\"row\" in location) {\n            range = Range.fromPoints(location, location);\n        }\n        else if (Array.isArray(location)) {\n            folds = [];\n            location.forEach(function (range) {\n                folds = folds.concat(this.unfold(range));\n            }, this);\n            return folds;\n        }\n        else {\n            range = location;\n        }\n        folds = this.getFoldsInRangeList(range);\n        var outermostFolds = folds;\n        while (folds.length == 1\n            && Range.comparePoints(folds[0].start, range.start) < 0\n            && Range.comparePoints(folds[0].end, range.end) > 0) {\n            this.expandFolds(folds);\n            folds = this.getFoldsInRangeList(range);\n        }\n        if (expandInner != false) {\n            this.removeFolds(folds);\n        }\n        else {\n            this.expandFolds(folds);\n        }\n        if (outermostFolds.length)\n            return outermostFolds;\n    };\n    this.isRowFolded = function (docRow, startFoldRow) {\n        return !!this.getFoldLine(docRow, startFoldRow);\n    };\n    this.getRowFoldEnd = function (docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.end.row : docRow;\n    };\n    this.getRowFoldStart = function (docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.start.row : docRow;\n    };\n    this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n        if (startRow == null)\n            startRow = foldLine.start.row;\n        if (startColumn == null)\n            startColumn = 0;\n        if (endRow == null)\n            endRow = foldLine.end.row;\n        if (endColumn == null)\n            endColumn = this.getLine(endRow).length;\n        var doc = this.doc;\n        var textLine = \"\";\n        foldLine.walk(function (placeholder, row, column, lastColumn) {\n            if (row < startRow)\n                return;\n            if (row == startRow) {\n                if (column < startColumn)\n                    return;\n                lastColumn = Math.max(startColumn, lastColumn);\n            }\n            if (placeholder != null) {\n                textLine += placeholder;\n            }\n            else {\n                textLine += doc.getLine(row).substring(lastColumn, column);\n            }\n        }, endRow, endColumn);\n        return textLine;\n    };\n    this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n        var foldLine = this.getFoldLine(row);\n        if (!foldLine) {\n            var line;\n            line = this.doc.getLine(row);\n            return line.substring(startColumn || 0, endColumn || line.length);\n        }\n        else {\n            return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n        }\n    };\n    this.$cloneFoldData = function () {\n        var fd = [];\n        fd = this.$foldData.map(function (foldLine) {\n            var folds = foldLine.folds.map(function (fold) {\n                return fold.clone();\n            });\n            return new FoldLine(fd, folds);\n        });\n        return fd;\n    };\n    this.toggleFold = function (tryToUnfold) {\n        var selection = this.selection;\n        var range = selection.getRange();\n        var fold;\n        var bracketPos;\n        if (range.isEmpty()) {\n            var cursor = range.start;\n            fold = this.getFoldAt(cursor.row, cursor.column);\n            if (fold) {\n                this.expandFold(fold);\n                return;\n            }\n            else if (bracketPos = this.findMatchingBracket(cursor)) {\n                if (range.comparePoint(bracketPos) == 1) {\n                    range.end = bracketPos;\n                }\n                else {\n                    range.start = bracketPos;\n                    range.start.column++;\n                    range.end.column--;\n                }\n            }\n            else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n                if (range.comparePoint(bracketPos) == 1)\n                    range.end = bracketPos;\n                else\n                    range.start = bracketPos;\n                range.start.column++;\n            }\n            else {\n                range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n            }\n        }\n        else {\n            var folds = this.getFoldsInRange(range);\n            if (tryToUnfold && folds.length) {\n                this.expandFolds(folds);\n                return;\n            }\n            else if (folds.length == 1) {\n                fold = folds[0];\n            }\n        }\n        if (!fold)\n            fold = this.getFoldAt(range.start.row, range.start.column);\n        if (fold && fold.range.toString() == range.toString()) {\n            this.expandFold(fold);\n            return;\n        }\n        var placeholder = \"...\";\n        if (!range.isMultiLine()) {\n            placeholder = this.getTextRange(range);\n            if (placeholder.length < 4)\n                return;\n            placeholder = placeholder.trim().substring(0, 2) + \"..\";\n        }\n        this.addFold(placeholder, range);\n    };\n    this.getCommentFoldRange = function (row, column, dir) {\n        var iterator = new TokenIterator(this, row, column);\n        var token = iterator.getCurrentToken();\n        var type = token && token.type;\n        if (token && /^comment|string/.test(type)) {\n            type = type.match(/comment|string/)[0];\n            if (type == \"comment\")\n                type += \"|doc-start\";\n            var re = new RegExp(type);\n            var range = new Range();\n            if (dir != 1) {\n                do {\n                    token = iterator.stepBackward();\n                } while (token && re.test(token.type) && !/^comment.end/.test(token.type));\n                token = iterator.stepForward();\n            }\n            range.start.row = iterator.getCurrentTokenRow();\n            range.start.column = iterator.getCurrentTokenColumn() + (/^comment.start/.test(token.type) ? token.value.length : 2);\n            iterator = new TokenIterator(this, row, column);\n            if (dir != -1) {\n                var lastRow = -1;\n                do {\n                    token = iterator.stepForward();\n                    if (lastRow == -1) {\n                        var state = this.getState(iterator.$row);\n                        if (!re.test(state))\n                            lastRow = iterator.$row;\n                    }\n                    else if (iterator.$row > lastRow) {\n                        break;\n                    }\n                } while (token && re.test(token.type) && !/^comment.start/.test(token.type));\n                token = iterator.stepBackward();\n            }\n            else\n                token = iterator.getCurrentToken();\n            range.end.row = iterator.getCurrentTokenRow();\n            range.end.column = iterator.getCurrentTokenColumn();\n            if (!/^comment.end/.test(token.type)) {\n                range.end.column += token.value.length - 2;\n            }\n            return range;\n        }\n    };\n    this.foldAll = function (startRow, endRow, depth, test) {\n        if (depth == undefined)\n            depth = 100000; // JSON.stringify doesn't hanle Infinity\n        var foldWidgets = this.foldWidgets;\n        if (!foldWidgets)\n            return; // mode doesn't support folding\n        endRow = endRow || this.getLength();\n        startRow = startRow || 0;\n        for (var row = startRow; row < endRow; row++) {\n            if (foldWidgets[row] == null)\n                foldWidgets[row] = this.getFoldWidget(row);\n            if (foldWidgets[row] != \"start\")\n                continue;\n            if (test && !test(row))\n                continue;\n            var range = this.getFoldWidgetRange(row);\n            if (range && range.isMultiLine()\n                && range.end.row <= endRow\n                && range.start.row >= startRow) {\n                row = range.end.row;\n                range.collapseChildren = depth;\n                this.addFold(\"...\", range);\n            }\n        }\n    };\n    this.foldToLevel = function (level) {\n        this.foldAll();\n        while (level-- > 0)\n            this.unfold(null, false);\n    };\n    this.foldAllComments = function () {\n        var session = this;\n        this.foldAll(null, null, null, function (row) {\n            var tokens = session.getTokens(row);\n            for (var i = 0; i < tokens.length; i++) {\n                var token = tokens[i];\n                if (token.type == \"text\" && /^\\s+$/.test(token.value))\n                    continue;\n                if (/comment/.test(token.type))\n                    return true;\n                return false;\n            }\n        });\n    };\n    this.$foldStyles = {\n        \"manual\": 1,\n        \"markbegin\": 1,\n        \"markbeginend\": 1\n    };\n    this.$foldStyle = \"markbegin\";\n    this.setFoldStyle = function (style) {\n        if (!this.$foldStyles[style])\n            throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n        if (this.$foldStyle == style)\n            return;\n        this.$foldStyle = style;\n        if (style == \"manual\")\n            this.unfold();\n        var mode = this.$foldMode;\n        this.$setFolding(null);\n        this.$setFolding(mode);\n    };\n    this.$setFolding = function (foldMode) {\n        if (this.$foldMode == foldMode)\n            return;\n        this.$foldMode = foldMode;\n        this.off('change', this.$updateFoldWidgets);\n        this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n        this._signal(\"changeAnnotation\");\n        if (!foldMode || this.$foldStyle == \"manual\") {\n            this.foldWidgets = null;\n            return;\n        }\n        this.foldWidgets = [];\n        this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n        this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n        this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n        this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n        this.on('change', this.$updateFoldWidgets);\n        this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n    };\n    this.getParentFoldRangeData = function (row, ignoreCurrent) {\n        var fw = this.foldWidgets;\n        if (!fw || (ignoreCurrent && fw[row]))\n            return {};\n        var i = row - 1, firstRange;\n        while (i >= 0) {\n            var c = fw[i];\n            if (c == null)\n                c = fw[i] = this.getFoldWidget(i);\n            if (c == \"start\") {\n                var range = this.getFoldWidgetRange(i);\n                if (!firstRange)\n                    firstRange = range;\n                if (range && range.end.row >= row)\n                    break;\n            }\n            i--;\n        }\n        return {\n            range: i !== -1 && range,\n            firstRange: firstRange\n        };\n    };\n    this.onFoldWidgetClick = function (row, e) {\n        e = e.domEvent;\n        var options = {\n            children: e.shiftKey,\n            all: e.ctrlKey || e.metaKey,\n            siblings: e.altKey\n        };\n        var range = this.$toggleFoldWidget(row, options);\n        if (!range) {\n            var el = (e.target || e.srcElement);\n            if (el && /ace_fold-widget/.test(el.className))\n                el.className += \" ace_invalid\";\n        }\n    };\n    this.$toggleFoldWidget = function (row, options) {\n        if (!this.getFoldWidget)\n            return;\n        var type = this.getFoldWidget(row);\n        var line = this.getLine(row);\n        var dir = type === \"end\" ? -1 : 1;\n        var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n        if (fold) {\n            if (options.children || options.all)\n                this.removeFold(fold);\n            else\n                this.expandFold(fold);\n            return fold;\n        }\n        var range = this.getFoldWidgetRange(row, true);\n        if (range && !range.isMultiLine()) {\n            fold = this.getFoldAt(range.start.row, range.start.column, 1);\n            if (fold && range.isEqual(fold.range)) {\n                this.removeFold(fold);\n                return fold;\n            }\n        }\n        if (options.siblings) {\n            var data = this.getParentFoldRangeData(row);\n            if (data.range) {\n                var startRow = data.range.start.row + 1;\n                var endRow = data.range.end.row;\n            }\n            this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n        }\n        else if (options.children) {\n            endRow = range ? range.end.row : this.getLength();\n            this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n        }\n        else if (range) {\n            if (options.all)\n                range.collapseChildren = 10000;\n            this.addFold(\"...\", range);\n        }\n        return range;\n    };\n    this.toggleFoldWidget = function (toggleParent) {\n        var row = this.selection.getCursor().row;\n        row = this.getRowFoldStart(row);\n        var range = this.$toggleFoldWidget(row, {});\n        if (range)\n            return;\n        var data = this.getParentFoldRangeData(row, true);\n        range = data.range || data.firstRange;\n        if (range) {\n            row = range.start.row;\n            var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n            if (fold) {\n                this.removeFold(fold);\n            }\n            else {\n                this.addFold(\"...\", range);\n            }\n        }\n    };\n    this.updateFoldWidgets = function (delta) {\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n        if (len === 0) {\n            this.foldWidgets[firstRow] = null;\n        }\n        else if (delta.action == 'remove') {\n            this.foldWidgets.splice(firstRow, len + 1, null);\n        }\n        else {\n            var args = Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.foldWidgets.splice.apply(this.foldWidgets, args);\n        }\n    };\n    this.tokenizerUpdateFoldWidgets = function (e) {\n        var rows = e.data;\n        if (rows.first != rows.last) {\n            if (this.foldWidgets.length > rows.first)\n                this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n        }\n    };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n    this.findMatchingBracket = function (position, chr) {\n        if (position.column == 0)\n            return null;\n        var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n        if (charBeforeCursor == \"\")\n            return null;\n        var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match)\n            return null;\n        if (match[1])\n            return this.$findClosingBracket(match[1], position);\n        else\n            return this.$findOpeningBracket(match[2], position);\n    };\n    this.getBracketRange = function (pos) {\n        var line = this.getLine(pos.row);\n        var before = true, range;\n        var chr = line.charAt(pos.column - 1);\n        var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match) {\n            chr = line.charAt(pos.column);\n            pos = { row: pos.row, column: pos.column + 1 };\n            match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n            before = false;\n        }\n        if (!match)\n            return null;\n        if (match[1]) {\n            var bracketPos = this.$findClosingBracket(match[1], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(pos, bracketPos);\n            if (!before) {\n                range.end.column++;\n                range.start.column--;\n            }\n            range.cursor = range.end;\n        }\n        else {\n            var bracketPos = this.$findOpeningBracket(match[2], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(bracketPos, pos);\n            if (!before) {\n                range.start.column++;\n                range.end.column--;\n            }\n            range.cursor = range.start;\n        }\n        return range;\n    };\n    this.getMatchingBracketRanges = function (pos) {\n        var line = this.getLine(pos.row);\n        var chr = line.charAt(pos.column - 1);\n        var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match) {\n            chr = line.charAt(pos.column);\n            pos = { row: pos.row, column: pos.column + 1 };\n            match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        }\n        if (!match)\n            return null;\n        var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n        var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n            : this.$findOpeningBracket(match[2], pos);\n        if (!bracketPos)\n            return [startRange];\n        var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n        return [startRange, endRange];\n    };\n    this.$brackets = {\n        \")\": \"(\",\n        \"(\": \")\",\n        \"]\": \"[\",\n        \"[\": \"]\",\n        \"{\": \"}\",\n        \"}\": \"{\",\n        \"<\": \">\",\n        \">\": \"<\"\n    };\n    this.$findOpeningBracket = function (bracket, position, typeRe) {\n        var openBracket = this.$brackets[bracket];\n        var depth = 1;\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n        if (!typeRe) {\n            typeRe = new RegExp(\"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n                    .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n                + \")+\");\n        }\n        var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n        var value = token.value;\n        while (true) {\n            while (valueIndex >= 0) {\n                var chr = value.charAt(valueIndex);\n                if (chr == openBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return { row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn() };\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex -= 1;\n            }\n            do {\n                token = iterator.stepBackward();\n            } while (token && !typeRe.test(token.type));\n            if (token == null)\n                break;\n            value = token.value;\n            valueIndex = value.length - 1;\n        }\n        return null;\n    };\n    this.$findClosingBracket = function (bracket, position, typeRe) {\n        var closingBracket = this.$brackets[bracket];\n        var depth = 1;\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n        if (!typeRe) {\n            typeRe = new RegExp(\"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n                    .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n                + \")+\");\n        }\n        var valueIndex = position.column - iterator.getCurrentTokenColumn();\n        while (true) {\n            var value = token.value;\n            var valueLength = value.length;\n            while (valueIndex < valueLength) {\n                var chr = value.charAt(valueIndex);\n                if (chr == closingBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return { row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn() };\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex += 1;\n            }\n            do {\n                token = iterator.stepForward();\n            } while (token && !typeRe.test(token.type));\n            if (token == null)\n                break;\n            valueIndex = 0;\n        }\n        return null;\n    };\n    this.getMatchingTags = function (pos) {\n        var iterator = new TokenIterator(this, pos.row, pos.column);\n        var token = this.$findTagName(iterator);\n        if (!token)\n            return;\n        var prevToken = iterator.stepBackward();\n        if (prevToken.value === '<') {\n            return this.$findClosingTag(iterator, token);\n        }\n        else {\n            return this.$findOpeningTag(iterator, token);\n        }\n    };\n    this.$findTagName = function (iterator) {\n        var token = iterator.getCurrentToken();\n        var found = false;\n        var backward = false;\n        if (token && token.type.indexOf('tag-name') === -1) {\n            do {\n                if (backward)\n                    token = iterator.stepBackward();\n                else\n                    token = iterator.stepForward();\n                if (token) {\n                    if (token.value === \"/>\") {\n                        backward = true;\n                    }\n                    else if (token.type.indexOf('tag-name') !== -1) {\n                        found = true;\n                    }\n                }\n            } while (token && !found);\n        }\n        return token;\n    };\n    this.$findClosingTag = function (iterator, token) {\n        var prevToken;\n        var currentTag = token.value;\n        var tag = token.value;\n        var depth = 0;\n        var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n        token = iterator.stepForward();\n        var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n        var foundOpenTagEnd = false;\n        do {\n            prevToken = token;\n            token = iterator.stepForward();\n            if (token) {\n                if (token.value === '>' && !foundOpenTagEnd) {\n                    var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n                    foundOpenTagEnd = true;\n                }\n                if (token.type.indexOf('tag-name') !== -1) {\n                    currentTag = token.value;\n                    if (tag === currentTag) {\n                        if (prevToken.value === '<') {\n                            depth++;\n                        }\n                        else if (prevToken.value === '</') {\n                            depth--;\n                            if (depth < 0) { //found closing tag\n                                iterator.stepBackward();\n                                var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); //Range for </\n                                token = iterator.stepForward();\n                                var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n                                token = iterator.stepForward();\n                                if (token && token.value === '>') {\n                                    var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n                                }\n                                else {\n                                    return;\n                                }\n                            }\n                        }\n                    }\n                }\n                else if (tag === currentTag && token.value === '/>') { // self-closing tag\n                    depth--;\n                    if (depth < 0) { //found self-closing tag end\n                        var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n                        var closeTagName = closeTagStart;\n                        var closeTagEnd = closeTagName;\n                        var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n                    }\n                }\n            }\n        } while (token && depth >= 0);\n        if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n            return {\n                openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n                closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n                openTagName: openTagName,\n                closeTagName: closeTagName\n            };\n        }\n    };\n    this.$findOpeningTag = function (iterator, token) {\n        var prevToken = iterator.getCurrentToken();\n        var tag = token.value;\n        var depth = 0;\n        var startRow = iterator.getCurrentTokenRow();\n        var startColumn = iterator.getCurrentTokenColumn();\n        var endColumn = startColumn + 2;\n        var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for </\n        iterator.stepForward();\n        var closeTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n        token = iterator.stepForward();\n        if (!token || token.value !== \">\")\n            return;\n        var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n        iterator.stepBackward();\n        iterator.stepBackward();\n        do {\n            token = prevToken;\n            startRow = iterator.getCurrentTokenRow();\n            startColumn = iterator.getCurrentTokenColumn();\n            endColumn = startColumn + token.value.length;\n            prevToken = iterator.stepBackward();\n            if (token) {\n                if (token.type.indexOf('tag-name') !== -1) {\n                    if (tag === token.value) {\n                        if (prevToken.value === '<') {\n                            depth++;\n                            if (depth > 0) { //found opening tag\n                                var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n                                var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n                                do {\n                                    token = iterator.stepForward();\n                                } while (token && token.value !== '>');\n                                var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n                            }\n                        }\n                        else if (prevToken.value === '</') {\n                            depth--;\n                        }\n                    }\n                }\n                else if (token.value === '/>') { // self-closing tag\n                    var stepCount = 0;\n                    var tmpToken = prevToken;\n                    while (tmpToken) {\n                        if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n                            depth--;\n                            break;\n                        }\n                        else if (tmpToken.value === '<') {\n                            break;\n                        }\n                        tmpToken = iterator.stepBackward();\n                        stepCount++;\n                    }\n                    for (var i = 0; i < stepCount; i++) {\n                        iterator.stepForward();\n                    }\n                }\n            }\n        } while (prevToken && depth <= 0);\n        if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n            return {\n                openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n                closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n                openTagName: openTagName,\n                closeTagName: closeTagName\n            };\n        }\n    };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar EditSession = function (text, mode) {\n    this.$breakpoints = [];\n    this.$decorations = [];\n    this.$frontMarkers = {};\n    this.$backMarkers = {};\n    this.$markerId = 1;\n    this.$undoSelect = true;\n    this.$foldData = [];\n    this.id = \"session\" + (++EditSession.$uid);\n    this.$foldData.toString = function () {\n        return this.join(\"\\n\");\n    };\n    this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n    var _self = this;\n    this.bgTokenizer.on(\"update\", function (e) {\n        _self._signal(\"tokenizerUpdate\", e);\n    });\n    this.on(\"changeFold\", this.onChangeFold.bind(this));\n    this.$onChange = this.onChange.bind(this);\n    if (typeof text != \"object\" || !text.getLine)\n        text = new Document(text);\n    this.setDocument(text);\n    this.selection = new Selection(this);\n    this.$bidiHandler = new BidiHandler(this);\n    config.resetOptions(this);\n    this.setMode(mode);\n    config._signal(\"session\", this);\n    this.destroyed = false;\n};\nEditSession.$uid = 0;\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setDocument = function (doc) {\n        if (this.doc)\n            this.doc.off(\"change\", this.$onChange);\n        this.doc = doc;\n        doc.on(\"change\", this.$onChange, true);\n        this.bgTokenizer.setDocument(this.getDocument());\n        this.resetCaches();\n    };\n    this.getDocument = function () {\n        return this.doc;\n    };\n    this.$resetRowCache = function (docRow) {\n        if (!docRow) {\n            this.$docRowCache = [];\n            this.$screenRowCache = [];\n            return;\n        }\n        var l = this.$docRowCache.length;\n        var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n        if (l > i) {\n            this.$docRowCache.splice(i, l);\n            this.$screenRowCache.splice(i, l);\n        }\n    };\n    this.$getRowCacheIndex = function (cacheArray, val) {\n        var low = 0;\n        var hi = cacheArray.length - 1;\n        while (low <= hi) {\n            var mid = (low + hi) >> 1;\n            var c = cacheArray[mid];\n            if (val > c)\n                low = mid + 1;\n            else if (val < c)\n                hi = mid - 1;\n            else\n                return mid;\n        }\n        return low - 1;\n    };\n    this.resetCaches = function () {\n        this.$modified = true;\n        this.$wrapData = [];\n        this.$rowLengthCache = [];\n        this.$resetRowCache(0);\n        if (!this.destroyed)\n            this.bgTokenizer.start(0);\n    };\n    this.onChangeFold = function (e) {\n        var fold = e.data;\n        this.$resetRowCache(fold.start.row);\n    };\n    this.onChange = function (delta) {\n        this.$modified = true;\n        this.$bidiHandler.onChange(delta);\n        this.$resetRowCache(delta.start.row);\n        var removedFolds = this.$updateInternalDataOnChange(delta);\n        if (!this.$fromUndo && this.$undoManager) {\n            if (removedFolds && removedFolds.length) {\n                this.$undoManager.add({\n                    action: \"removeFolds\",\n                    folds: removedFolds\n                }, this.mergeUndoDeltas);\n                this.mergeUndoDeltas = true;\n            }\n            this.$undoManager.add(delta, this.mergeUndoDeltas);\n            this.mergeUndoDeltas = true;\n            this.$informUndoManager.schedule();\n        }\n        this.bgTokenizer.$updateOnChange(delta);\n        this._signal(\"change\", delta);\n    };\n    this.setValue = function (text) {\n        this.doc.setValue(text);\n        this.selection.moveTo(0, 0);\n        this.$resetRowCache(0);\n        this.setUndoManager(this.$undoManager);\n        this.getUndoManager().reset();\n    };\n    this.getValue =\n        this.toString = function () {\n            return this.doc.getValue();\n        };\n    this.getSelection = function () {\n        return this.selection;\n    };\n    this.getState = function (row) {\n        return this.bgTokenizer.getState(row);\n    };\n    this.getTokens = function (row) {\n        return this.bgTokenizer.getTokens(row);\n    };\n    this.getTokenAt = function (row, column) {\n        var tokens = this.bgTokenizer.getTokens(row);\n        var token, c = 0;\n        if (column == null) {\n            var i = tokens.length - 1;\n            c = this.getLine(row).length;\n        }\n        else {\n            for (var i = 0; i < tokens.length; i++) {\n                c += tokens[i].value.length;\n                if (c >= column)\n                    break;\n            }\n        }\n        token = tokens[i];\n        if (!token)\n            return null;\n        token.index = i;\n        token.start = c - token.value.length;\n        return token;\n    };\n    this.setUndoManager = function (undoManager) {\n        this.$undoManager = undoManager;\n        if (this.$informUndoManager)\n            this.$informUndoManager.cancel();\n        if (undoManager) {\n            var self = this;\n            undoManager.addSession(this);\n            this.$syncInformUndoManager = function () {\n                self.$informUndoManager.cancel();\n                self.mergeUndoDeltas = false;\n            };\n            this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n        }\n        else {\n            this.$syncInformUndoManager = function () { };\n        }\n    };\n    this.markUndoGroup = function () {\n        if (this.$syncInformUndoManager)\n            this.$syncInformUndoManager();\n    };\n    this.$defaultUndoManager = {\n        undo: function () { },\n        redo: function () { },\n        hasUndo: function () { },\n        hasRedo: function () { },\n        reset: function () { },\n        add: function () { },\n        addSelection: function () { },\n        startNewGroup: function () { },\n        addSession: function () { }\n    };\n    this.getUndoManager = function () {\n        return this.$undoManager || this.$defaultUndoManager;\n    };\n    this.getTabString = function () {\n        if (this.getUseSoftTabs()) {\n            return lang.stringRepeat(\" \", this.getTabSize());\n        }\n        else {\n            return \"\\t\";\n        }\n    };\n    this.setUseSoftTabs = function (val) {\n        this.setOption(\"useSoftTabs\", val);\n    };\n    this.getUseSoftTabs = function () {\n        return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n    };\n    this.setTabSize = function (tabSize) {\n        this.setOption(\"tabSize\", tabSize);\n    };\n    this.getTabSize = function () {\n        return this.$tabSize;\n    };\n    this.isTabStop = function (position) {\n        return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n    };\n    this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n        this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n    };\n    this.getNavigateWithinSoftTabs = function () {\n        return this.$navigateWithinSoftTabs;\n    };\n    this.$overwrite = false;\n    this.setOverwrite = function (overwrite) {\n        this.setOption(\"overwrite\", overwrite);\n    };\n    this.getOverwrite = function () {\n        return this.$overwrite;\n    };\n    this.toggleOverwrite = function () {\n        this.setOverwrite(!this.$overwrite);\n    };\n    this.addGutterDecoration = function (row, className) {\n        if (!this.$decorations[row])\n            this.$decorations[row] = \"\";\n        this.$decorations[row] += \" \" + className;\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.removeGutterDecoration = function (row, className) {\n        this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.getBreakpoints = function () {\n        return this.$breakpoints;\n    };\n    this.setBreakpoints = function (rows) {\n        this.$breakpoints = [];\n        for (var i = 0; i < rows.length; i++) {\n            this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n        }\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.clearBreakpoints = function () {\n        this.$breakpoints = [];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.setBreakpoint = function (row, className) {\n        if (className === undefined)\n            className = \"ace_breakpoint\";\n        if (className)\n            this.$breakpoints[row] = className;\n        else\n            delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.clearBreakpoint = function (row) {\n        delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.addMarker = function (range, clazz, type, inFront) {\n        var id = this.$markerId++;\n        var marker = {\n            range: range,\n            type: type || \"line\",\n            renderer: typeof type == \"function\" ? type : null,\n            clazz: clazz,\n            inFront: !!inFront,\n            id: id\n        };\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        }\n        else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n        return id;\n    };\n    this.addDynamicMarker = function (marker, inFront) {\n        if (!marker.update)\n            return;\n        var id = this.$markerId++;\n        marker.id = id;\n        marker.inFront = !!inFront;\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        }\n        else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n        return marker;\n    };\n    this.removeMarker = function (markerId) {\n        var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n        if (!marker)\n            return;\n        var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n        delete (markers[markerId]);\n        this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n    };\n    this.getMarkers = function (inFront) {\n        return inFront ? this.$frontMarkers : this.$backMarkers;\n    };\n    this.highlight = function (re) {\n        if (!this.$searchHighlight) {\n            var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n            this.$searchHighlight = this.addDynamicMarker(highlight);\n        }\n        this.$searchHighlight.setRegexp(re);\n    };\n    this.highlightLines = function (startRow, endRow, clazz, inFront) {\n        if (typeof endRow != \"number\") {\n            clazz = endRow;\n            endRow = startRow;\n        }\n        if (!clazz)\n            clazz = \"ace_step\";\n        var range = new Range(startRow, 0, endRow, Infinity);\n        range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n        return range;\n    };\n    this.setAnnotations = function (annotations) {\n        this.$annotations = annotations;\n        this._signal(\"changeAnnotation\", {});\n    };\n    this.getAnnotations = function () {\n        return this.$annotations || [];\n    };\n    this.clearAnnotations = function () {\n        this.setAnnotations([]);\n    };\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r?\\n)/m);\n        if (match) {\n            this.$autoNewLine = match[1];\n        }\n        else {\n            this.$autoNewLine = \"\\n\";\n        }\n    };\n    this.getWordRange = function (row, column) {\n        var line = this.getLine(row);\n        var inToken = false;\n        if (column > 0)\n            inToken = !!line.charAt(column - 1).match(this.tokenRe);\n        if (!inToken)\n            inToken = !!line.charAt(column).match(this.tokenRe);\n        if (inToken)\n            var re = this.tokenRe;\n        else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n            var re = /\\s/;\n        else\n            var re = this.nonTokenRe;\n        var start = column;\n        if (start > 0) {\n            do {\n                start--;\n            } while (start >= 0 && line.charAt(start).match(re));\n            start++;\n        }\n        var end = column;\n        while (end < line.length && line.charAt(end).match(re)) {\n            end++;\n        }\n        return new Range(row, start, row, end);\n    };\n    this.getAWordRange = function (row, column) {\n        var wordRange = this.getWordRange(row, column);\n        var line = this.getLine(wordRange.end.row);\n        while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n            wordRange.end.column += 1;\n        }\n        return wordRange;\n    };\n    this.setNewLineMode = function (newLineMode) {\n        this.doc.setNewLineMode(newLineMode);\n    };\n    this.getNewLineMode = function () {\n        return this.doc.getNewLineMode();\n    };\n    this.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n    this.getUseWorker = function () { return this.$useWorker; };\n    this.onReloadTokenizer = function (e) {\n        var rows = e.data;\n        this.bgTokenizer.start(rows.first);\n        this._signal(\"tokenizerUpdate\", e);\n    };\n    this.$modes = config.$modes;\n    this.$mode = null;\n    this.$modeId = null;\n    this.setMode = function (mode, cb) {\n        if (mode && typeof mode === \"object\") {\n            if (mode.getTokenizer)\n                return this.$onChangeMode(mode);\n            var options = mode;\n            var path = options.path;\n        }\n        else {\n            path = mode || \"ace/mode/text\";\n        }\n        if (!this.$modes[\"ace/mode/text\"])\n            this.$modes[\"ace/mode/text\"] = new TextMode();\n        if (this.$modes[path] && !options) {\n            this.$onChangeMode(this.$modes[path]);\n            cb && cb();\n            return;\n        }\n        this.$modeId = path;\n        config.loadModule([\"mode\", path], function (m) {\n            if (this.$modeId !== path)\n                return cb && cb();\n            if (this.$modes[path] && !options) {\n                this.$onChangeMode(this.$modes[path]);\n            }\n            else if (m && m.Mode) {\n                m = new m.Mode(options);\n                if (!options) {\n                    this.$modes[path] = m;\n                    m.$id = path;\n                }\n                this.$onChangeMode(m);\n            }\n            cb && cb();\n        }.bind(this));\n        if (!this.$mode)\n            this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n    };\n    this.$onChangeMode = function (mode, $isPlaceholder) {\n        if (!$isPlaceholder)\n            this.$modeId = mode.$id;\n        if (this.$mode === mode)\n            return;\n        var oldMode = this.$mode;\n        this.$mode = mode;\n        this.$stopWorker();\n        if (this.$useWorker)\n            this.$startWorker();\n        var tokenizer = mode.getTokenizer();\n        if (tokenizer.on !== undefined) {\n            var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n            tokenizer.on(\"update\", onReloadTokenizer);\n        }\n        this.bgTokenizer.setTokenizer(tokenizer);\n        this.bgTokenizer.setDocument(this.getDocument());\n        this.tokenRe = mode.tokenRe;\n        this.nonTokenRe = mode.nonTokenRe;\n        if (!$isPlaceholder) {\n            if (mode.attachToSession)\n                mode.attachToSession(this);\n            this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n            this.$setFolding(mode.foldingRules);\n            this.bgTokenizer.start(0);\n            this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n        }\n    };\n    this.$stopWorker = function () {\n        if (this.$worker) {\n            this.$worker.terminate();\n            this.$worker = null;\n        }\n    };\n    this.$startWorker = function () {\n        try {\n            this.$worker = this.$mode.createWorker(this);\n        }\n        catch (e) {\n            config.warn(\"Could not load worker\", e);\n            this.$worker = null;\n        }\n    };\n    this.getMode = function () {\n        return this.$mode;\n    };\n    this.$scrollTop = 0;\n    this.setScrollTop = function (scrollTop) {\n        if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n            return;\n        this.$scrollTop = scrollTop;\n        this._signal(\"changeScrollTop\", scrollTop);\n    };\n    this.getScrollTop = function () {\n        return this.$scrollTop;\n    };\n    this.$scrollLeft = 0;\n    this.setScrollLeft = function (scrollLeft) {\n        if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n            return;\n        this.$scrollLeft = scrollLeft;\n        this._signal(\"changeScrollLeft\", scrollLeft);\n    };\n    this.getScrollLeft = function () {\n        return this.$scrollLeft;\n    };\n    this.getScreenWidth = function () {\n        this.$computeWidth();\n        if (this.lineWidgets)\n            return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n        return this.screenWidth;\n    };\n    this.getLineWidgetMaxWidth = function () {\n        if (this.lineWidgetsWidth != null)\n            return this.lineWidgetsWidth;\n        var width = 0;\n        this.lineWidgets.forEach(function (w) {\n            if (w && w.screenWidth > width)\n                width = w.screenWidth;\n        });\n        return this.lineWidgetWidth = width;\n    };\n    this.$computeWidth = function (force) {\n        if (this.$modified || force) {\n            this.$modified = false;\n            if (this.$useWrapMode)\n                return this.screenWidth = this.$wrapLimit;\n            var lines = this.doc.getAllLines();\n            var cache = this.$rowLengthCache;\n            var longestScreenLine = 0;\n            var foldIndex = 0;\n            var foldLine = this.$foldData[foldIndex];\n            var foldStart = foldLine ? foldLine.start.row : Infinity;\n            var len = lines.length;\n            for (var i = 0; i < len; i++) {\n                if (i > foldStart) {\n                    i = foldLine.end.row + 1;\n                    if (i >= len)\n                        break;\n                    foldLine = this.$foldData[foldIndex++];\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n                if (cache[i] == null)\n                    cache[i] = this.$getStringScreenWidth(lines[i])[0];\n                if (cache[i] > longestScreenLine)\n                    longestScreenLine = cache[i];\n            }\n            this.screenWidth = longestScreenLine;\n        }\n    };\n    this.getLine = function (row) {\n        return this.doc.getLine(row);\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.doc.getLines(firstRow, lastRow);\n    };\n    this.getLength = function () {\n        return this.doc.getLength();\n    };\n    this.getTextRange = function (range) {\n        return this.doc.getTextRange(range || this.selection.getRange());\n    };\n    this.insert = function (position, text) {\n        return this.doc.insert(position, text);\n    };\n    this.remove = function (range) {\n        return this.doc.remove(range);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        return this.doc.removeFullLines(firstRow, lastRow);\n    };\n    this.undoChanges = function (deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n        this.$fromUndo = true;\n        for (var i = deltas.length - 1; i != -1; i--) {\n            var delta = deltas[i];\n            if (delta.action == \"insert\" || delta.action == \"remove\") {\n                this.doc.revertDelta(delta);\n            }\n            else if (delta.folds) {\n                this.addFolds(delta.folds);\n            }\n        }\n        if (!dontSelect && this.$undoSelect) {\n            if (deltas.selectionBefore)\n                this.selection.fromJSON(deltas.selectionBefore);\n            else\n                this.selection.setRange(this.$getUndoSelection(deltas, true));\n        }\n        this.$fromUndo = false;\n    };\n    this.redoChanges = function (deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n        this.$fromUndo = true;\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (delta.action == \"insert\" || delta.action == \"remove\") {\n                this.doc.$safeApplyDelta(delta);\n            }\n        }\n        if (!dontSelect && this.$undoSelect) {\n            if (deltas.selectionAfter)\n                this.selection.fromJSON(deltas.selectionAfter);\n            else\n                this.selection.setRange(this.$getUndoSelection(deltas, false));\n        }\n        this.$fromUndo = false;\n    };\n    this.setUndoSelect = function (enable) {\n        this.$undoSelect = enable;\n    };\n    this.$getUndoSelection = function (deltas, isUndo) {\n        function isInsert(delta) {\n            return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n        }\n        var range, point;\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (!delta.start)\n                continue; // skip folds\n            if (!range) {\n                if (isInsert(delta)) {\n                    range = Range.fromPoints(delta.start, delta.end);\n                }\n                else {\n                    range = Range.fromPoints(delta.start, delta.start);\n                }\n                continue;\n            }\n            if (isInsert(delta)) {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range.setStart(point);\n                }\n                point = delta.end;\n                if (range.compare(point.row, point.column) == 1) {\n                    range.setEnd(point);\n                }\n            }\n            else {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range = Range.fromPoints(delta.start, delta.start);\n                }\n            }\n        }\n        return range;\n    };\n    this.replace = function (range, text) {\n        return this.doc.replace(range, text);\n    };\n    this.moveText = function (fromRange, toPosition, copy) {\n        var text = this.getTextRange(fromRange);\n        var folds = this.getFoldsInRange(fromRange);\n        var toRange = Range.fromPoints(toPosition, toPosition);\n        if (!copy) {\n            this.remove(fromRange);\n            var rowDiff = fromRange.start.row - fromRange.end.row;\n            var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n            if (collDiff) {\n                if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n                    toRange.start.column += collDiff;\n                if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n                    toRange.end.column += collDiff;\n            }\n            if (rowDiff && toRange.start.row >= fromRange.end.row) {\n                toRange.start.row += rowDiff;\n                toRange.end.row += rowDiff;\n            }\n        }\n        toRange.end = this.insert(toRange.start, text);\n        if (folds.length) {\n            var oldStart = fromRange.start;\n            var newStart = toRange.start;\n            var rowDiff = newStart.row - oldStart.row;\n            var collDiff = newStart.column - oldStart.column;\n            this.addFolds(folds.map(function (x) {\n                x = x.clone();\n                if (x.start.row == oldStart.row)\n                    x.start.column += collDiff;\n                if (x.end.row == oldStart.row)\n                    x.end.column += collDiff;\n                x.start.row += rowDiff;\n                x.end.row += rowDiff;\n                return x;\n            }));\n        }\n        return toRange;\n    };\n    this.indentRows = function (startRow, endRow, indentString) {\n        indentString = indentString.replace(/\\t/g, this.getTabString());\n        for (var row = startRow; row <= endRow; row++)\n            this.doc.insertInLine({ row: row, column: 0 }, indentString);\n    };\n    this.outdentRows = function (range) {\n        var rowRange = range.collapseRows();\n        var deleteRange = new Range(0, 0, 0, 0);\n        var size = this.getTabSize();\n        for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n            var line = this.getLine(i);\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            for (var j = 0; j < size; ++j)\n                if (line.charAt(j) != ' ')\n                    break;\n            if (j < size && line.charAt(j) == '\\t') {\n                deleteRange.start.column = j;\n                deleteRange.end.column = j + 1;\n            }\n            else {\n                deleteRange.start.column = 0;\n                deleteRange.end.column = j;\n            }\n            this.remove(deleteRange);\n        }\n    };\n    this.$moveLines = function (firstRow, lastRow, dir) {\n        firstRow = this.getRowFoldStart(firstRow);\n        lastRow = this.getRowFoldEnd(lastRow);\n        if (dir < 0) {\n            var row = this.getRowFoldStart(firstRow + dir);\n            if (row < 0)\n                return 0;\n            var diff = row - firstRow;\n        }\n        else if (dir > 0) {\n            var row = this.getRowFoldEnd(lastRow + dir);\n            if (row > this.doc.getLength() - 1)\n                return 0;\n            var diff = row - lastRow;\n        }\n        else {\n            firstRow = this.$clipRowToDocument(firstRow);\n            lastRow = this.$clipRowToDocument(lastRow);\n            var diff = lastRow - firstRow + 1;\n        }\n        var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n        var folds = this.getFoldsInRange(range).map(function (x) {\n            x = x.clone();\n            x.start.row += diff;\n            x.end.row += diff;\n            return x;\n        });\n        var lines = dir == 0\n            ? this.doc.getLines(firstRow, lastRow)\n            : this.doc.removeFullLines(firstRow, lastRow);\n        this.doc.insertFullLines(firstRow + diff, lines);\n        folds.length && this.addFolds(folds);\n        return diff;\n    };\n    this.moveLinesUp = function (firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, -1);\n    };\n    this.moveLinesDown = function (firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 1);\n    };\n    this.duplicateLines = function (firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 0);\n    };\n    this.$clipRowToDocument = function (row) {\n        return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n    };\n    this.$clipColumnToRow = function (row, column) {\n        if (column < 0)\n            return 0;\n        return Math.min(this.doc.getLine(row).length, column);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        column = Math.max(0, column);\n        if (row < 0) {\n            row = 0;\n            column = 0;\n        }\n        else {\n            var len = this.doc.getLength();\n            if (row >= len) {\n                row = len - 1;\n                column = this.doc.getLine(len - 1).length;\n            }\n            else {\n                column = Math.min(this.doc.getLine(row).length, column);\n            }\n        }\n        return {\n            row: row,\n            column: column\n        };\n    };\n    this.$clipRangeToDocument = function (range) {\n        if (range.start.row < 0) {\n            range.start.row = 0;\n            range.start.column = 0;\n        }\n        else {\n            range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n        }\n        var len = this.doc.getLength() - 1;\n        if (range.end.row > len) {\n            range.end.row = len;\n            range.end.column = this.doc.getLine(len).length;\n        }\n        else {\n            range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n        }\n        return range;\n    };\n    this.$wrapLimit = 80;\n    this.$useWrapMode = false;\n    this.$wrapLimitRange = {\n        min: null,\n        max: null\n    };\n    this.setUseWrapMode = function (useWrapMode) {\n        if (useWrapMode != this.$useWrapMode) {\n            this.$useWrapMode = useWrapMode;\n            this.$modified = true;\n            this.$resetRowCache(0);\n            if (useWrapMode) {\n                var len = this.getLength();\n                this.$wrapData = Array(len);\n                this.$updateWrapData(0, len - 1);\n            }\n            this._signal(\"changeWrapMode\");\n        }\n    };\n    this.getUseWrapMode = function () {\n        return this.$useWrapMode;\n    };\n    this.setWrapLimitRange = function (min, max) {\n        if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n            this.$wrapLimitRange = { min: min, max: max };\n            this.$modified = true;\n            this.$bidiHandler.markAsDirty();\n            if (this.$useWrapMode)\n                this._signal(\"changeWrapMode\");\n        }\n    };\n    this.adjustWrapLimit = function (desiredLimit, $printMargin) {\n        var limits = this.$wrapLimitRange;\n        if (limits.max < 0)\n            limits = { min: $printMargin, max: $printMargin };\n        var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n        if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n            this.$wrapLimit = wrapLimit;\n            this.$modified = true;\n            if (this.$useWrapMode) {\n                this.$updateWrapData(0, this.getLength() - 1);\n                this.$resetRowCache(0);\n                this._signal(\"changeWrapLimit\");\n            }\n            return true;\n        }\n        return false;\n    };\n    this.$constrainWrapLimit = function (wrapLimit, min, max) {\n        if (min)\n            wrapLimit = Math.max(min, wrapLimit);\n        if (max)\n            wrapLimit = Math.min(max, wrapLimit);\n        return wrapLimit;\n    };\n    this.getWrapLimit = function () {\n        return this.$wrapLimit;\n    };\n    this.setWrapLimit = function (limit) {\n        this.setWrapLimitRange(limit, limit);\n    };\n    this.getWrapLimitRange = function () {\n        return {\n            min: this.$wrapLimitRange.min,\n            max: this.$wrapLimitRange.max\n        };\n    };\n    this.$updateInternalDataOnChange = function (delta) {\n        var useWrapMode = this.$useWrapMode;\n        var action = delta.action;\n        var start = delta.start;\n        var end = delta.end;\n        var firstRow = start.row;\n        var lastRow = end.row;\n        var len = lastRow - firstRow;\n        var removedFolds = null;\n        this.$updating = true;\n        if (len != 0) {\n            if (action === \"remove\") {\n                this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n                var foldLines = this.$foldData;\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n                var foldLine = this.getFoldLine(end.row);\n                var idx = 0;\n                if (foldLine) {\n                    foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n                    foldLine.shiftRow(-len);\n                    var foldLineBefore = this.getFoldLine(firstRow);\n                    if (foldLineBefore && foldLineBefore !== foldLine) {\n                        foldLineBefore.merge(foldLine);\n                        foldLine = foldLineBefore;\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= end.row) {\n                        foldLine.shiftRow(-len);\n                    }\n                }\n                lastRow = firstRow;\n            }\n            else {\n                var args = Array(len);\n                args.unshift(firstRow, 0);\n                var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n                arr.splice.apply(arr, args);\n                var foldLines = this.$foldData;\n                var foldLine = this.getFoldLine(firstRow);\n                var idx = 0;\n                if (foldLine) {\n                    var cmp = foldLine.range.compareInside(start.row, start.column);\n                    if (cmp == 0) {\n                        foldLine = foldLine.split(start.row, start.column);\n                        if (foldLine) {\n                            foldLine.shiftRow(len);\n                            foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n                        }\n                    }\n                    else \n                    if (cmp == -1) {\n                        foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n                        foldLine.shiftRow(len);\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= firstRow) {\n                        foldLine.shiftRow(len);\n                    }\n                }\n            }\n        }\n        else {\n            len = Math.abs(delta.start.column - delta.end.column);\n            if (action === \"remove\") {\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n                len = -len;\n            }\n            var foldLine = this.getFoldLine(firstRow);\n            if (foldLine) {\n                foldLine.addRemoveChars(firstRow, start.column, len);\n            }\n        }\n        if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n            console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n        }\n        this.$updating = false;\n        if (useWrapMode)\n            this.$updateWrapData(firstRow, lastRow);\n        else\n            this.$updateRowLengthCache(firstRow, lastRow);\n        return removedFolds;\n    };\n    this.$updateRowLengthCache = function (firstRow, lastRow, b) {\n        this.$rowLengthCache[firstRow] = null;\n        this.$rowLengthCache[lastRow] = null;\n    };\n    this.$updateWrapData = function (firstRow, lastRow) {\n        var lines = this.doc.getAllLines();\n        var tabSize = this.getTabSize();\n        var wrapData = this.$wrapData;\n        var wrapLimit = this.$wrapLimit;\n        var tokens;\n        var foldLine;\n        var row = firstRow;\n        lastRow = Math.min(lastRow, lines.length - 1);\n        while (row <= lastRow) {\n            foldLine = this.getFoldLine(row, foldLine);\n            if (!foldLine) {\n                tokens = this.$getDisplayTokens(lines[row]);\n                wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row++;\n            }\n            else {\n                tokens = [];\n                foldLine.walk(function (placeholder, row, column, lastColumn) {\n                    var walkTokens;\n                    if (placeholder != null) {\n                        walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n                        walkTokens[0] = PLACEHOLDER_START;\n                        for (var i = 1; i < walkTokens.length; i++) {\n                            walkTokens[i] = PLACEHOLDER_BODY;\n                        }\n                    }\n                    else {\n                        walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n                    }\n                    tokens = tokens.concat(walkTokens);\n                }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n                wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row = foldLine.end.row + 1;\n            }\n        }\n    };\n    var CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\n    this.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n        if (tokens.length == 0) {\n            return [];\n        }\n        var splits = [];\n        var displayLength = tokens.length;\n        var lastSplit = 0, lastDocSplit = 0;\n        var isCode = this.$wrapAsCode;\n        var indentedSoftWrap = this.$indentedSoftWrap;\n        var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n            || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n        function getWrapIndent() {\n            var indentation = 0;\n            if (maxIndent === 0)\n                return indentation;\n            if (indentedSoftWrap) {\n                for (var i = 0; i < tokens.length; i++) {\n                    var token = tokens[i];\n                    if (token == SPACE)\n                        indentation += 1;\n                    else if (token == TAB)\n                        indentation += tabSize;\n                    else if (token == TAB_SPACE)\n                        continue;\n                    else\n                        break;\n                }\n            }\n            if (isCode && indentedSoftWrap !== false)\n                indentation += tabSize;\n            return Math.min(indentation, maxIndent);\n        }\n        function addSplit(screenPos) {\n            var len = screenPos - lastSplit;\n            for (var i = lastSplit; i < screenPos; i++) {\n                var ch = tokens[i];\n                if (ch === 12 || ch === 2)\n                    len -= 1;\n            }\n            if (!splits.length) {\n                indent = getWrapIndent();\n                splits.indent = indent;\n            }\n            lastDocSplit += len;\n            splits.push(lastDocSplit);\n            lastSplit = screenPos;\n        }\n        var indent = 0;\n        while (displayLength - lastSplit > wrapLimit - indent) {\n            var split = lastSplit + wrapLimit - indent;\n            if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n                addSplit(split);\n                continue;\n            }\n            if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n                for (split; split != lastSplit - 1; split--) {\n                    if (tokens[split] == PLACEHOLDER_START) {\n                        break;\n                    }\n                }\n                if (split > lastSplit) {\n                    addSplit(split);\n                    continue;\n                }\n                split = lastSplit + wrapLimit;\n                for (split; split < tokens.length; split++) {\n                    if (tokens[split] != PLACEHOLDER_BODY) {\n                        break;\n                    }\n                }\n                if (split == tokens.length) {\n                    break; // Breaks the while-loop.\n                }\n                addSplit(split);\n                continue;\n            }\n            var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n            while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                split--;\n            }\n            if (isCode) {\n                while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                    split--;\n                }\n                while (split > minSplit && tokens[split] == PUNCTUATION) {\n                    split--;\n                }\n            }\n            else {\n                while (split > minSplit && tokens[split] < SPACE) {\n                    split--;\n                }\n            }\n            if (split > minSplit) {\n                addSplit(++split);\n                continue;\n            }\n            split = lastSplit + wrapLimit;\n            if (tokens[split] == CHAR_EXT)\n                split--;\n            addSplit(split - indent);\n        }\n        return splits;\n    };\n    this.$getDisplayTokens = function (str, offset) {\n        var arr = [];\n        var tabSize;\n        offset = offset || 0;\n        for (var i = 0; i < str.length; i++) {\n            var c = str.charCodeAt(i);\n            if (c == 9) {\n                tabSize = this.getScreenTabSize(arr.length + offset);\n                arr.push(TAB);\n                for (var n = 1; n < tabSize; n++) {\n                    arr.push(TAB_SPACE);\n                }\n            }\n            else if (c == 32) {\n                arr.push(SPACE);\n            }\n            else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n                arr.push(PUNCTUATION);\n            }\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                arr.push(CHAR, CHAR_EXT);\n            }\n            else {\n                arr.push(CHAR);\n            }\n        }\n        return arr;\n    };\n    this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n        if (maxScreenColumn == 0)\n            return [0, 0];\n        if (maxScreenColumn == null)\n            maxScreenColumn = Infinity;\n        screenColumn = screenColumn || 0;\n        var c, column;\n        for (column = 0; column < str.length; column++) {\n            c = str.charCodeAt(column);\n            if (c == 9) {\n                screenColumn += this.getScreenTabSize(screenColumn);\n            }\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                screenColumn += 2;\n            }\n            else {\n                screenColumn += 1;\n            }\n            if (screenColumn > maxScreenColumn) {\n                break;\n            }\n        }\n        return [screenColumn, column];\n    };\n    this.lineWidgets = null;\n    this.getRowLength = function (row) {\n        var h = 1;\n        if (this.lineWidgets)\n            h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        if (!this.$useWrapMode || !this.$wrapData[row])\n            return h;\n        else\n            return this.$wrapData[row].length + h;\n    };\n    this.getRowLineCount = function (row) {\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1;\n        }\n        else {\n            return this.$wrapData[row].length + 1;\n        }\n    };\n    this.getRowWrapIndent = function (screenRow) {\n        if (this.$useWrapMode) {\n            var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n            var splits = this.$wrapData[pos.row];\n            return splits.length && splits[0] < pos.column ? splits.indent : 0;\n        }\n        else {\n            return 0;\n        }\n    };\n    this.getScreenLastRowColumn = function (screenRow) {\n        var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n        return this.documentToScreenColumn(pos.row, pos.column);\n    };\n    this.getDocumentLastRowColumn = function (docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.getScreenLastRowColumn(screenRow);\n    };\n    this.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n    };\n    this.getRowSplitData = function (row) {\n        if (!this.$useWrapMode) {\n            return undefined;\n        }\n        else {\n            return this.$wrapData[row];\n        }\n    };\n    this.getScreenTabSize = function (screenColumn) {\n        return this.$tabSize - (screenColumn % this.$tabSize | 0);\n    };\n    this.screenToDocumentRow = function (screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).row;\n    };\n    this.screenToDocumentColumn = function (screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).column;\n    };\n    this.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n        if (screenRow < 0)\n            return { row: 0, column: 0 };\n        var line;\n        var docRow = 0;\n        var docColumn = 0;\n        var column;\n        var row = 0;\n        var rowLength = 0;\n        var rowCache = this.$screenRowCache;\n        var i = this.$getRowCacheIndex(rowCache, screenRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var docRow = this.$docRowCache[i];\n            var doCache = screenRow > rowCache[l - 1];\n        }\n        else {\n            var doCache = !l;\n        }\n        var maxRow = this.getLength() - 1;\n        var foldLine = this.getNextFoldLine(docRow);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (row <= screenRow) {\n            rowLength = this.getRowLength(docRow);\n            if (row + rowLength > screenRow || docRow >= maxRow) {\n                break;\n            }\n            else {\n                row += rowLength;\n                docRow++;\n                if (docRow > foldStart) {\n                    docRow = foldLine.end.row + 1;\n                    foldLine = this.getNextFoldLine(docRow, foldLine);\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n            }\n            if (doCache) {\n                this.$docRowCache.push(docRow);\n                this.$screenRowCache.push(row);\n            }\n        }\n        if (foldLine && foldLine.start.row <= docRow) {\n            line = this.getFoldDisplayLine(foldLine);\n            docRow = foldLine.start.row;\n        }\n        else if (row + rowLength <= screenRow || docRow > maxRow) {\n            return {\n                row: maxRow,\n                column: this.getLine(maxRow).length\n            };\n        }\n        else {\n            line = this.getLine(docRow);\n            foldLine = null;\n        }\n        var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n        if (this.$useWrapMode) {\n            var splits = this.$wrapData[docRow];\n            if (splits) {\n                column = splits[splitIndex];\n                if (splitIndex > 0 && splits.length) {\n                    wrapIndent = splits.indent;\n                    docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n                    line = line.substring(docColumn);\n                }\n            }\n        }\n        if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n            screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n        docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n        if (this.$useWrapMode && docColumn >= column)\n            docColumn = column - 1;\n        if (foldLine)\n            return foldLine.idxToPosition(docColumn);\n        return { row: docRow, column: docColumn };\n    };\n    this.documentToScreenPosition = function (docRow, docColumn) {\n        if (typeof docColumn === \"undefined\")\n            var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n        else\n            pos = this.$clipPositionToDocument(docRow, docColumn);\n        docRow = pos.row;\n        docColumn = pos.column;\n        var screenRow = 0;\n        var foldStartRow = null;\n        var fold = null;\n        fold = this.getFoldAt(docRow, docColumn, 1);\n        if (fold) {\n            docRow = fold.start.row;\n            docColumn = fold.start.column;\n        }\n        var rowEnd, row = 0;\n        var rowCache = this.$docRowCache;\n        var i = this.$getRowCacheIndex(rowCache, docRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var screenRow = this.$screenRowCache[i];\n            var doCache = docRow > rowCache[l - 1];\n        }\n        else {\n            var doCache = !l;\n        }\n        var foldLine = this.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (row < docRow) {\n            if (row >= foldStart) {\n                rowEnd = foldLine.end.row + 1;\n                if (rowEnd > docRow)\n                    break;\n                foldLine = this.getNextFoldLine(rowEnd, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            else {\n                rowEnd = row + 1;\n            }\n            screenRow += this.getRowLength(row);\n            row = rowEnd;\n            if (doCache) {\n                this.$docRowCache.push(row);\n                this.$screenRowCache.push(screenRow);\n            }\n        }\n        var textLine = \"\";\n        if (foldLine && row >= foldStart) {\n            textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n            foldStartRow = foldLine.start.row;\n        }\n        else {\n            textLine = this.getLine(docRow).substring(0, docColumn);\n            foldStartRow = docRow;\n        }\n        var wrapIndent = 0;\n        if (this.$useWrapMode) {\n            var wrapRow = this.$wrapData[foldStartRow];\n            if (wrapRow) {\n                var screenRowOffset = 0;\n                while (textLine.length >= wrapRow[screenRowOffset]) {\n                    screenRow++;\n                    screenRowOffset++;\n                }\n                textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n                wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n            }\n        }\n        if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n            screenRow += this.lineWidgets[row].rowsAbove;\n        return {\n            row: screenRow,\n            column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n        };\n    };\n    this.documentToScreenColumn = function (row, docColumn) {\n        return this.documentToScreenPosition(row, docColumn).column;\n    };\n    this.documentToScreenRow = function (docRow, docColumn) {\n        return this.documentToScreenPosition(docRow, docColumn).row;\n    };\n    this.getScreenLength = function () {\n        var screenRows = 0;\n        var fold = null;\n        if (!this.$useWrapMode) {\n            screenRows = this.getLength();\n            var foldData = this.$foldData;\n            for (var i = 0; i < foldData.length; i++) {\n                fold = foldData[i];\n                screenRows -= fold.end.row - fold.start.row;\n            }\n        }\n        else {\n            var lastRow = this.$wrapData.length;\n            var row = 0, i = 0;\n            var fold = this.$foldData[i++];\n            var foldStart = fold ? fold.start.row : Infinity;\n            while (row < lastRow) {\n                var splits = this.$wrapData[row];\n                screenRows += splits ? splits.length + 1 : 1;\n                row++;\n                if (row > foldStart) {\n                    row = fold.end.row + 1;\n                    fold = this.$foldData[i++];\n                    foldStart = fold ? fold.start.row : Infinity;\n                }\n            }\n        }\n        if (this.lineWidgets)\n            screenRows += this.$getWidgetScreenLength();\n        return screenRows;\n    };\n    this.$setFontMetrics = function (fm) {\n        if (!this.$enableVarChar)\n            return;\n        this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n            if (maxScreenColumn === 0)\n                return [0, 0];\n            if (!maxScreenColumn)\n                maxScreenColumn = Infinity;\n            screenColumn = screenColumn || 0;\n            var c, column;\n            for (column = 0; column < str.length; column++) {\n                c = str.charAt(column);\n                if (c === \"\\t\") {\n                    screenColumn += this.getScreenTabSize(screenColumn);\n                }\n                else {\n                    screenColumn += fm.getCharacterWidth(c);\n                }\n                if (screenColumn > maxScreenColumn) {\n                    break;\n                }\n            }\n            return [screenColumn, column];\n        };\n    };\n    this.destroy = function () {\n        if (!this.destroyed) {\n            this.bgTokenizer.setDocument(null);\n            this.bgTokenizer.cleanup();\n            this.destroyed = true;\n        }\n        this.$stopWorker();\n        this.removeAllListeners();\n        if (this.doc) {\n            this.doc.off(\"change\", this.$onChange);\n        }\n        this.selection.detach();\n    };\n    this.isFullWidth = isFullWidth;\n    function isFullWidth(c) {\n        if (c < 0x1100)\n            return false;\n        return c >= 0x1100 && c <= 0x115F ||\n            c >= 0x11A3 && c <= 0x11A7 ||\n            c >= 0x11FA && c <= 0x11FF ||\n            c >= 0x2329 && c <= 0x232A ||\n            c >= 0x2E80 && c <= 0x2E99 ||\n            c >= 0x2E9B && c <= 0x2EF3 ||\n            c >= 0x2F00 && c <= 0x2FD5 ||\n            c >= 0x2FF0 && c <= 0x2FFB ||\n            c >= 0x3000 && c <= 0x303E ||\n            c >= 0x3041 && c <= 0x3096 ||\n            c >= 0x3099 && c <= 0x30FF ||\n            c >= 0x3105 && c <= 0x312D ||\n            c >= 0x3131 && c <= 0x318E ||\n            c >= 0x3190 && c <= 0x31BA ||\n            c >= 0x31C0 && c <= 0x31E3 ||\n            c >= 0x31F0 && c <= 0x321E ||\n            c >= 0x3220 && c <= 0x3247 ||\n            c >= 0x3250 && c <= 0x32FE ||\n            c >= 0x3300 && c <= 0x4DBF ||\n            c >= 0x4E00 && c <= 0xA48C ||\n            c >= 0xA490 && c <= 0xA4C6 ||\n            c >= 0xA960 && c <= 0xA97C ||\n            c >= 0xAC00 && c <= 0xD7A3 ||\n            c >= 0xD7B0 && c <= 0xD7C6 ||\n            c >= 0xD7CB && c <= 0xD7FB ||\n            c >= 0xF900 && c <= 0xFAFF ||\n            c >= 0xFE10 && c <= 0xFE19 ||\n            c >= 0xFE30 && c <= 0xFE52 ||\n            c >= 0xFE54 && c <= 0xFE66 ||\n            c >= 0xFE68 && c <= 0xFE6B ||\n            c >= 0xFF01 && c <= 0xFF60 ||\n            c >= 0xFFE0 && c <= 0xFFE6;\n    }\n}).call(EditSession.prototype);\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n    wrap: {\n        set: function (value) {\n            if (!value || value == \"off\")\n                value = false;\n            else if (value == \"free\")\n                value = true;\n            else if (value == \"printMargin\")\n                value = -1;\n            else if (typeof value == \"string\")\n                value = parseInt(value, 10) || false;\n            if (this.$wrap == value)\n                return;\n            this.$wrap = value;\n            if (!value) {\n                this.setUseWrapMode(false);\n            }\n            else {\n                var col = typeof value == \"number\" ? value : null;\n                this.setWrapLimitRange(col, col);\n                this.setUseWrapMode(true);\n            }\n        },\n        get: function () {\n            if (this.getUseWrapMode()) {\n                if (this.$wrap == -1)\n                    return \"printMargin\";\n                if (!this.getWrapLimitRange().min)\n                    return \"free\";\n                return this.$wrap;\n            }\n            return \"off\";\n        },\n        handlesSet: true\n    },\n    wrapMethod: {\n        set: function (val) {\n            val = val == \"auto\"\n                ? this.$mode.type != \"text\"\n                : val != \"text\";\n            if (val != this.$wrapAsCode) {\n                this.$wrapAsCode = val;\n                if (this.$useWrapMode) {\n                    this.$useWrapMode = false;\n                    this.setUseWrapMode(true);\n                }\n            }\n        },\n        initialValue: \"auto\"\n    },\n    indentedSoftWrap: {\n        set: function () {\n            if (this.$useWrapMode) {\n                this.$useWrapMode = false;\n                this.setUseWrapMode(true);\n            }\n        },\n        initialValue: true\n    },\n    firstLineNumber: {\n        set: function () { this._signal(\"changeBreakpoint\"); },\n        initialValue: 1\n    },\n    useWorker: {\n        set: function (useWorker) {\n            this.$useWorker = useWorker;\n            this.$stopWorker();\n            if (useWorker)\n                this.$startWorker();\n        },\n        initialValue: true\n    },\n    useSoftTabs: { initialValue: true },\n    tabSize: {\n        set: function (tabSize) {\n            tabSize = parseInt(tabSize);\n            if (tabSize > 0 && this.$tabSize !== tabSize) {\n                this.$modified = true;\n                this.$rowLengthCache = [];\n                this.$tabSize = tabSize;\n                this._signal(\"changeTabSize\");\n            }\n        },\n        initialValue: 4,\n        handlesSet: true\n    },\n    navigateWithinSoftTabs: { initialValue: false },\n    foldStyle: {\n        set: function (val) { this.setFoldStyle(val); },\n        handlesSet: true\n    },\n    overwrite: {\n        set: function (val) { this._signal(\"changeOverwrite\"); },\n        initialValue: false\n    },\n    newLineMode: {\n        set: function (val) { this.doc.setNewLineMode(val); },\n        get: function () { return this.doc.getNewLineMode(); },\n        handlesSet: true\n    },\n    mode: {\n        set: function (val) { this.setMode(val); },\n        get: function () { return this.$modeId; },\n        handlesSet: true\n    }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = function () {\n    this.$options = {};\n};\n(function () {\n    this.set = function (options) {\n        oop.mixin(this.$options, options);\n        return this;\n    };\n    this.getOptions = function () {\n        return lang.copyObject(this.$options);\n    };\n    this.setOptions = function (options) {\n        this.$options = options;\n    };\n    this.find = function (session) {\n        var options = this.$options;\n        var iterator = this.$matchIterator(session, options);\n        if (!iterator)\n            return false;\n        var firstRange = null;\n        iterator.forEach(function (sr, sc, er, ec) {\n            firstRange = new Range(sr, sc, er, ec);\n            if (sc == ec && options.start && options.start.start\n                && options.skipCurrent != false && firstRange.isEqual(options.start)) {\n                firstRange = null;\n                return false;\n            }\n            return true;\n        });\n        return firstRange;\n    };\n    this.findAll = function (session) {\n        var options = this.$options;\n        if (!options.needle)\n            return [];\n        this.$assembleRegExp(options);\n        var range = options.range;\n        var lines = range\n            ? session.getLines(range.start.row, range.end.row)\n            : session.doc.getAllLines();\n        var ranges = [];\n        var re = options.re;\n        if (options.$isMultiLine) {\n            var len = re.length;\n            var maxRow = lines.length - len;\n            var prevRange;\n            outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n                for (var j = 0; j < len; j++)\n                    if (lines[row + j].search(re[j]) == -1)\n                        continue outer;\n                var startLine = lines[row];\n                var line = lines[row + len - 1];\n                var startIndex = startLine.length - startLine.match(re[0])[0].length;\n                var endIndex = line.match(re[len - 1])[0].length;\n                if (prevRange && prevRange.end.row === row &&\n                    prevRange.end.column > startIndex) {\n                    continue;\n                }\n                ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n                if (len > 2)\n                    row = row + len - 2;\n            }\n        }\n        else {\n            for (var i = 0; i < lines.length; i++) {\n                var matches = lang.getMatchOffsets(lines[i], re);\n                for (var j = 0; j < matches.length; j++) {\n                    var match = matches[j];\n                    ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n                }\n            }\n        }\n        if (range) {\n            var startColumn = range.start.column;\n            var endColumn = range.end.column;\n            var i = 0, j = ranges.length - 1;\n            while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n                i++;\n            var endRow = range.end.row - range.start.row;\n            while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n                j--;\n            ranges = ranges.slice(i, j + 1);\n            for (i = 0, j = ranges.length; i < j; i++) {\n                ranges[i].start.row += range.start.row;\n                ranges[i].end.row += range.start.row;\n            }\n        }\n        return ranges;\n    };\n    this.replace = function (input, replacement) {\n        var options = this.$options;\n        var re = this.$assembleRegExp(options);\n        if (options.$isMultiLine)\n            return replacement;\n        if (!re)\n            return;\n        var match = re.exec(input);\n        if (!match || match[0].length != input.length)\n            return null;\n        replacement = input.replace(re, replacement);\n        if (options.preserveCase) {\n            replacement = replacement.split(\"\");\n            for (var i = Math.min(input.length, input.length); i--;) {\n                var ch = input[i];\n                if (ch && ch.toLowerCase() != ch)\n                    replacement[i] = replacement[i].toUpperCase();\n                else\n                    replacement[i] = replacement[i].toLowerCase();\n            }\n            replacement = replacement.join(\"\");\n        }\n        return replacement;\n    };\n    this.$assembleRegExp = function (options, $disableFakeMultiline) {\n        if (options.needle instanceof RegExp)\n            return options.re = options.needle;\n        var needle = options.needle;\n        if (!options.needle)\n            return options.re = false;\n        if (!options.regExp)\n            needle = lang.escapeRegExp(needle);\n        if (options.wholeWord)\n            needle = addWordBoundary(needle, options);\n        var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n        options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n        if (options.$isMultiLine)\n            return options.re = this.$assembleMultilineRegExp(needle, modifier);\n        try {\n            var re = new RegExp(needle, modifier);\n        }\n        catch (e) {\n            re = false;\n        }\n        return options.re = re;\n    };\n    this.$assembleMultilineRegExp = function (needle, modifier) {\n        var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n        var re = [];\n        for (var i = 0; i < parts.length; i++)\n            try {\n                re.push(new RegExp(parts[i], modifier));\n            }\n            catch (e) {\n                return false;\n            }\n        return re;\n    };\n    this.$matchIterator = function (session, options) {\n        var re = this.$assembleRegExp(options);\n        if (!re)\n            return false;\n        var backwards = options.backwards == true;\n        var skipCurrent = options.skipCurrent != false;\n        var range = options.range;\n        var start = options.start;\n        if (!start)\n            start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n        if (start.start)\n            start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n        var firstRow = range ? range.start.row : 0;\n        var lastRow = range ? range.end.row : session.getLength() - 1;\n        if (backwards) {\n            var forEach = function (callback) {\n                var row = start.row;\n                if (forEachInLine(row, start.column, callback))\n                    return;\n                for (row--; row >= firstRow; row--)\n                    if (forEachInLine(row, Number.MAX_VALUE, callback))\n                        return;\n                if (options.wrap == false)\n                    return;\n                for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n                    if (forEachInLine(row, Number.MAX_VALUE, callback))\n                        return;\n            };\n        }\n        else {\n            var forEach = function (callback) {\n                var row = start.row;\n                if (forEachInLine(row, start.column, callback))\n                    return;\n                for (row = row + 1; row <= lastRow; row++)\n                    if (forEachInLine(row, 0, callback))\n                        return;\n                if (options.wrap == false)\n                    return;\n                for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n                    if (forEachInLine(row, 0, callback))\n                        return;\n            };\n        }\n        if (options.$isMultiLine) {\n            var len = re.length;\n            var forEachInLine = function (row, offset, callback) {\n                var startRow = backwards ? row - len + 1 : row;\n                if (startRow < 0 || startRow + len > session.getLength())\n                    return;\n                var line = session.getLine(startRow);\n                var startIndex = line.search(re[0]);\n                if (!backwards && startIndex < offset || startIndex === -1)\n                    return;\n                for (var i = 1; i < len; i++) {\n                    line = session.getLine(startRow + i);\n                    if (line.search(re[i]) == -1)\n                        return;\n                }\n                var endIndex = line.match(re[len - 1])[0].length;\n                if (backwards && endIndex > offset)\n                    return;\n                if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n                    return true;\n            };\n        }\n        else if (backwards) {\n            var forEachInLine = function (row, endIndex, callback) {\n                var line = session.getLine(row);\n                var matches = [];\n                var m, last = 0;\n                re.lastIndex = 0;\n                while ((m = re.exec(line))) {\n                    var length = m[0].length;\n                    last = m.index;\n                    if (!length) {\n                        if (last >= line.length)\n                            break;\n                        re.lastIndex = last += 1;\n                    }\n                    if (m.index + length > endIndex)\n                        break;\n                    matches.push(m.index, length);\n                }\n                for (var i = matches.length - 1; i >= 0; i -= 2) {\n                    var column = matches[i - 1];\n                    var length = matches[i];\n                    if (callback(row, column, row, column + length))\n                        return true;\n                }\n            };\n        }\n        else {\n            var forEachInLine = function (row, startIndex, callback) {\n                var line = session.getLine(row);\n                var last;\n                var m;\n                re.lastIndex = startIndex;\n                while ((m = re.exec(line))) {\n                    var length = m[0].length;\n                    last = m.index;\n                    if (callback(row, last, row, last + length))\n                        return true;\n                    if (!length) {\n                        re.lastIndex = last += 1;\n                        if (last >= line.length)\n                            return false;\n                    }\n                }\n            };\n        }\n        return { forEach: forEach };\n    };\n}).call(Search.prototype);\nfunction addWordBoundary(needle, options) {\n    function wordBoundary(c) {\n        if (/\\w/.test(c) || options.regExp)\n            return \"\\\\b\";\n        return \"\";\n    }\n    return wordBoundary(needle[0]) + needle\n        + wordBoundary(needle[needle.length - 1]);\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nfunction HashHandler(config, platform) {\n    this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n    this.commands = {};\n    this.commandKeyBinding = {};\n    this.addCommands(config);\n    this.$singleCommand = true;\n}\nfunction MultiHashHandler(config, platform) {\n    HashHandler.call(this, config, platform);\n    this.$singleCommand = false;\n}\nMultiHashHandler.prototype = HashHandler.prototype;\n(function () {\n    this.addCommand = function (command) {\n        if (this.commands[command.name])\n            this.removeCommand(command);\n        this.commands[command.name] = command;\n        if (command.bindKey)\n            this._buildKeyHash(command);\n    };\n    this.removeCommand = function (command, keepCommand) {\n        var name = command && (typeof command === 'string' ? command : command.name);\n        command = this.commands[name];\n        if (!keepCommand)\n            delete this.commands[name];\n        var ckb = this.commandKeyBinding;\n        for (var keyId in ckb) {\n            var cmdGroup = ckb[keyId];\n            if (cmdGroup == command) {\n                delete ckb[keyId];\n            }\n            else if (Array.isArray(cmdGroup)) {\n                var i = cmdGroup.indexOf(command);\n                if (i != -1) {\n                    cmdGroup.splice(i, 1);\n                    if (cmdGroup.length == 1)\n                        ckb[keyId] = cmdGroup[0];\n                }\n            }\n        }\n    };\n    this.bindKey = function (key, command, position) {\n        if (typeof key == \"object\" && key) {\n            if (position == undefined)\n                position = key.position;\n            key = key[this.platform];\n        }\n        if (!key)\n            return;\n        if (typeof command == \"function\")\n            return this.addCommand({ exec: command, bindKey: key, name: command.name || key });\n        key.split(\"|\").forEach(function (keyPart) {\n            var chain = \"\";\n            if (keyPart.indexOf(\" \") != -1) {\n                var parts = keyPart.split(/\\s+/);\n                keyPart = parts.pop();\n                parts.forEach(function (keyPart) {\n                    var binding = this.parseKeys(keyPart);\n                    var id = KEY_MODS[binding.hashId] + binding.key;\n                    chain += (chain ? \" \" : \"\") + id;\n                    this._addCommandToBinding(chain, \"chainKeys\");\n                }, this);\n                chain += \" \";\n            }\n            var binding = this.parseKeys(keyPart);\n            var id = KEY_MODS[binding.hashId] + binding.key;\n            this._addCommandToBinding(chain + id, command, position);\n        }, this);\n    };\n    function getPosition(command) {\n        return typeof command == \"object\" && command.bindKey\n            && command.bindKey.position\n            || (command.isDefault ? -100 : 0);\n    }\n    this._addCommandToBinding = function (keyId, command, position) {\n        var ckb = this.commandKeyBinding, i;\n        if (!command) {\n            delete ckb[keyId];\n        }\n        else if (!ckb[keyId] || this.$singleCommand) {\n            ckb[keyId] = command;\n        }\n        else {\n            if (!Array.isArray(ckb[keyId])) {\n                ckb[keyId] = [ckb[keyId]];\n            }\n            else if ((i = ckb[keyId].indexOf(command)) != -1) {\n                ckb[keyId].splice(i, 1);\n            }\n            if (typeof position != \"number\") {\n                position = getPosition(command);\n            }\n            var commands = ckb[keyId];\n            for (i = 0; i < commands.length; i++) {\n                var other = commands[i];\n                var otherPos = getPosition(other);\n                if (otherPos > position)\n                    break;\n            }\n            commands.splice(i, 0, command);\n        }\n    };\n    this.addCommands = function (commands) {\n        commands && Object.keys(commands).forEach(function (name) {\n            var command = commands[name];\n            if (!command)\n                return;\n            if (typeof command === \"string\")\n                return this.bindKey(command, name);\n            if (typeof command === \"function\")\n                command = { exec: command };\n            if (typeof command !== \"object\")\n                return;\n            if (!command.name)\n                command.name = name;\n            this.addCommand(command);\n        }, this);\n    };\n    this.removeCommands = function (commands) {\n        Object.keys(commands).forEach(function (name) {\n            this.removeCommand(commands[name]);\n        }, this);\n    };\n    this.bindKeys = function (keyList) {\n        Object.keys(keyList).forEach(function (key) {\n            this.bindKey(key, keyList[key]);\n        }, this);\n    };\n    this._buildKeyHash = function (command) {\n        this.bindKey(command.bindKey, command);\n    };\n    this.parseKeys = function (keys) {\n        var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n        var key = parts.pop();\n        var keyCode = keyUtil[key];\n        if (keyUtil.FUNCTION_KEYS[keyCode])\n            key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n        else if (!parts.length)\n            return { key: key, hashId: -1 };\n        else if (parts.length == 1 && parts[0] == \"shift\")\n            return { key: key.toUpperCase(), hashId: -1 };\n        var hashId = 0;\n        for (var i = parts.length; i--;) {\n            var modifier = keyUtil.KEY_MODS[parts[i]];\n            if (modifier == null) {\n                if (typeof console != \"undefined\")\n                    console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n                return false;\n            }\n            hashId |= modifier;\n        }\n        return { key: key, hashId: hashId };\n    };\n    this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n        var key = KEY_MODS[hashId] + keyString;\n        return this.commandKeyBinding[key];\n    };\n    this.handleKeyboard = function (data, hashId, keyString, keyCode) {\n        if (keyCode < 0)\n            return;\n        var key = KEY_MODS[hashId] + keyString;\n        var command = this.commandKeyBinding[key];\n        if (data.$keyChain) {\n            data.$keyChain += \" \" + key;\n            command = this.commandKeyBinding[data.$keyChain] || command;\n        }\n        if (command) {\n            if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n                data.$keyChain = data.$keyChain || key;\n                return { command: \"null\" };\n            }\n        }\n        if (data.$keyChain) {\n            if ((!hashId || hashId == 4) && keyString.length == 1)\n                data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n            else if (hashId == -1 || keyCode > 0)\n                data.$keyChain = \"\"; // reset keyChain\n        }\n        return { command: command };\n    };\n    this.getStatusText = function (editor, data) {\n        return data.$keyChain || \"\";\n    };\n}).call(HashHandler.prototype);\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = function (platform, commands) {\n    MultiHashHandler.call(this, commands, platform);\n    this.byName = this.commands;\n    this.setDefaultHandler(\"exec\", function (e) {\n        if (!e.args) {\n            return e.command.exec(e.editor, {}, e.event, true);\n        }\n        return e.command.exec(e.editor, e.args, e.event, false);\n    });\n};\noop.inherits(CommandManager, MultiHashHandler);\n(function () {\n    oop.implement(this, EventEmitter);\n    this.exec = function (command, editor, args) {\n        if (Array.isArray(command)) {\n            for (var i = command.length; i--;) {\n                if (this.exec(command[i], editor, args))\n                    return true;\n            }\n            return false;\n        }\n        if (typeof command === \"string\")\n            command = this.commands[command];\n        if (!command)\n            return false;\n        if (editor && editor.$readOnly && !command.readOnly)\n            return false;\n        if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n            return false;\n        var e = { editor: editor, command: command, args: args };\n        e.returnValue = this._emit(\"exec\", e);\n        this._signal(\"afterExec\", e);\n        return e.returnValue === false ? false : true;\n    };\n    this.toggleRecording = function (editor) {\n        if (this.$inReplay)\n            return;\n        editor && editor._emit(\"changeStatus\");\n        if (this.recording) {\n            this.macro.pop();\n            this.off(\"exec\", this.$addCommandToMacro);\n            if (!this.macro.length)\n                this.macro = this.oldMacro;\n            return this.recording = false;\n        }\n        if (!this.$addCommandToMacro) {\n            this.$addCommandToMacro = function (e) {\n                this.macro.push([e.command, e.args]);\n            }.bind(this);\n        }\n        this.oldMacro = this.macro;\n        this.macro = [];\n        this.on(\"exec\", this.$addCommandToMacro);\n        return this.recording = true;\n    };\n    this.replay = function (editor) {\n        if (this.$inReplay || !this.macro)\n            return;\n        if (this.recording)\n            return this.toggleRecording(editor);\n        try {\n            this.$inReplay = true;\n            this.macro.forEach(function (x) {\n                if (typeof x == \"string\")\n                    this.exec(x, editor);\n                else\n                    this.exec(x[0], editor, x[1]);\n            }, this);\n        }\n        finally {\n            this.$inReplay = false;\n        }\n    };\n    this.trimMacro = function (m) {\n        return m.map(function (x) {\n            if (typeof x[0] != \"string\")\n                x[0] = x[0].name;\n            if (!x[1])\n                x = x[0];\n            return x;\n        });\n    };\n}).call(CommandManager.prototype);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n    return { win: win, mac: mac };\n}\nexports.commands = [{\n        name: \"showSettingsMenu\",\n        description: \"Show settings menu\",\n        bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/settings_menu\", function (module) {\n                module.init(editor);\n                editor.showSettingsMenu();\n            });\n        },\n        readOnly: true\n    }, {\n        name: \"goToNextError\",\n        description: \"Go to next error\",\n        bindKey: bindKey(\"Alt-E\", \"F4\"),\n        exec: function (editor) {\n            config.loadModule(\"./ext/error_marker\", function (module) {\n                module.showErrorMarker(editor, 1);\n            });\n        },\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"goToPreviousError\",\n        description: \"Go to previous error\",\n        bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n        exec: function (editor) {\n            config.loadModule(\"./ext/error_marker\", function (module) {\n                module.showErrorMarker(editor, -1);\n            });\n        },\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"selectall\",\n        description: \"Select all\",\n        bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n        exec: function (editor) { editor.selectAll(); },\n        readOnly: true\n    }, {\n        name: \"centerselection\",\n        description: \"Center selection\",\n        bindKey: bindKey(null, \"Ctrl-L\"),\n        exec: function (editor) { editor.centerSelection(); },\n        readOnly: true\n    }, {\n        name: \"gotoline\",\n        description: \"Go to line...\",\n        bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n        exec: function (editor, line) {\n            if (typeof line === \"number\" && !isNaN(line))\n                editor.gotoLine(line);\n            editor.prompt({ $type: \"gotoLine\" });\n        },\n        readOnly: true\n    }, {\n        name: \"fold\",\n        bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n        exec: function (editor) { editor.session.toggleFold(false); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"unfold\",\n        bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n        exec: function (editor) { editor.session.toggleFold(true); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"toggleFoldWidget\",\n        description: \"Toggle fold widget\",\n        bindKey: bindKey(\"F2\", \"F2\"),\n        exec: function (editor) { editor.session.toggleFoldWidget(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"toggleParentFoldWidget\",\n        description: \"Toggle parent fold widget\",\n        bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n        exec: function (editor) { editor.session.toggleFoldWidget(true); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"foldall\",\n        description: \"Fold all\",\n        bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n        exec: function (editor) { editor.session.foldAll(); },\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"foldAllComments\",\n        description: \"Fold all comments\",\n        bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n        exec: function (editor) { editor.session.foldAllComments(); },\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"foldOther\",\n        description: \"Fold other\",\n        bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n        exec: function (editor) {\n            editor.session.foldAll();\n            editor.session.unfold(editor.selection.getAllRanges());\n        },\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"unfoldall\",\n        description: \"Unfold all\",\n        bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n        exec: function (editor) { editor.session.unfold(); },\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"findnext\",\n        description: \"Find next\",\n        bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n        exec: function (editor) { editor.findNext(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"findprevious\",\n        description: \"Find previous\",\n        bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n        exec: function (editor) { editor.findPrevious(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"center\",\n        readOnly: true\n    }, {\n        name: \"selectOrFindNext\",\n        description: \"Select or find next\",\n        bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n        exec: function (editor) {\n            if (editor.selection.isEmpty())\n                editor.selection.selectWord();\n            else\n                editor.findNext();\n        },\n        readOnly: true\n    }, {\n        name: \"selectOrFindPrevious\",\n        description: \"Select or find previous\",\n        bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n        exec: function (editor) {\n            if (editor.selection.isEmpty())\n                editor.selection.selectWord();\n            else\n                editor.findPrevious();\n        },\n        readOnly: true\n    }, {\n        name: \"find\",\n        description: \"Find\",\n        bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n        },\n        readOnly: true\n    }, {\n        name: \"overwrite\",\n        description: \"Overwrite\",\n        bindKey: \"Insert\",\n        exec: function (editor) { editor.toggleOverwrite(); },\n        readOnly: true\n    }, {\n        name: \"selecttostart\",\n        description: \"Select to start\",\n        bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n        exec: function (editor) { editor.getSelection().selectFileStart(); },\n        multiSelectAction: \"forEach\",\n        readOnly: true,\n        scrollIntoView: \"animate\",\n        aceCommandGroup: \"fileJump\"\n    }, {\n        name: \"gotostart\",\n        description: \"Go to start\",\n        bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n        exec: function (editor) { editor.navigateFileStart(); },\n        multiSelectAction: \"forEach\",\n        readOnly: true,\n        scrollIntoView: \"animate\",\n        aceCommandGroup: \"fileJump\"\n    }, {\n        name: \"selectup\",\n        description: \"Select up\",\n        bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n        exec: function (editor) { editor.getSelection().selectUp(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"golineup\",\n        description: \"Go line up\",\n        bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n        exec: function (editor, args) { editor.navigateUp(args.times); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selecttoend\",\n        description: \"Select to end\",\n        bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n        exec: function (editor) { editor.getSelection().selectFileEnd(); },\n        multiSelectAction: \"forEach\",\n        readOnly: true,\n        scrollIntoView: \"animate\",\n        aceCommandGroup: \"fileJump\"\n    }, {\n        name: \"gotoend\",\n        description: \"Go to end\",\n        bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n        exec: function (editor) { editor.navigateFileEnd(); },\n        multiSelectAction: \"forEach\",\n        readOnly: true,\n        scrollIntoView: \"animate\",\n        aceCommandGroup: \"fileJump\"\n    }, {\n        name: \"selectdown\",\n        description: \"Select down\",\n        bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n        exec: function (editor) { editor.getSelection().selectDown(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"golinedown\",\n        description: \"Go line down\",\n        bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n        exec: function (editor, args) { editor.navigateDown(args.times); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectwordleft\",\n        description: \"Select word left\",\n        bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n        exec: function (editor) { editor.getSelection().selectWordLeft(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotowordleft\",\n        description: \"Go to word left\",\n        bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n        exec: function (editor) { editor.navigateWordLeft(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selecttolinestart\",\n        description: \"Select to line start\",\n        bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n        exec: function (editor) { editor.getSelection().selectLineStart(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotolinestart\",\n        description: \"Go to line start\",\n        bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n        exec: function (editor) { editor.navigateLineStart(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectleft\",\n        description: \"Select left\",\n        bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n        exec: function (editor) { editor.getSelection().selectLeft(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotoleft\",\n        description: \"Go to left\",\n        bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n        exec: function (editor, args) { editor.navigateLeft(args.times); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectwordright\",\n        description: \"Select word right\",\n        bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n        exec: function (editor) { editor.getSelection().selectWordRight(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotowordright\",\n        description: \"Go to word right\",\n        bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n        exec: function (editor) { editor.navigateWordRight(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selecttolineend\",\n        description: \"Select to line end\",\n        bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n        exec: function (editor) { editor.getSelection().selectLineEnd(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotolineend\",\n        description: \"Go to line end\",\n        bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n        exec: function (editor) { editor.navigateLineEnd(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectright\",\n        description: \"Select right\",\n        bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n        exec: function (editor) { editor.getSelection().selectRight(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"gotoright\",\n        description: \"Go to right\",\n        bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n        exec: function (editor, args) { editor.navigateRight(args.times); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectpagedown\",\n        description: \"Select page down\",\n        bindKey: \"Shift-PageDown\",\n        exec: function (editor) { editor.selectPageDown(); },\n        readOnly: true\n    }, {\n        name: \"pagedown\",\n        description: \"Page down\",\n        bindKey: bindKey(null, \"Option-PageDown\"),\n        exec: function (editor) { editor.scrollPageDown(); },\n        readOnly: true\n    }, {\n        name: \"gotopagedown\",\n        description: \"Go to page down\",\n        bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n        exec: function (editor) { editor.gotoPageDown(); },\n        readOnly: true\n    }, {\n        name: \"selectpageup\",\n        description: \"Select page up\",\n        bindKey: \"Shift-PageUp\",\n        exec: function (editor) { editor.selectPageUp(); },\n        readOnly: true\n    }, {\n        name: \"pageup\",\n        description: \"Page up\",\n        bindKey: bindKey(null, \"Option-PageUp\"),\n        exec: function (editor) { editor.scrollPageUp(); },\n        readOnly: true\n    }, {\n        name: \"gotopageup\",\n        description: \"Go to page up\",\n        bindKey: \"PageUp\",\n        exec: function (editor) { editor.gotoPageUp(); },\n        readOnly: true\n    }, {\n        name: \"scrollup\",\n        description: \"Scroll up\",\n        bindKey: bindKey(\"Ctrl-Up\", null),\n        exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n        readOnly: true\n    }, {\n        name: \"scrolldown\",\n        description: \"Scroll down\",\n        bindKey: bindKey(\"Ctrl-Down\", null),\n        exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n        readOnly: true\n    }, {\n        name: \"selectlinestart\",\n        description: \"Select line start\",\n        bindKey: \"Shift-Home\",\n        exec: function (editor) { editor.getSelection().selectLineStart(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectlineend\",\n        description: \"Select line end\",\n        bindKey: \"Shift-End\",\n        exec: function (editor) { editor.getSelection().selectLineEnd(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"togglerecording\",\n        description: \"Toggle recording\",\n        bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n        exec: function (editor) { editor.commands.toggleRecording(editor); },\n        readOnly: true\n    }, {\n        name: \"replaymacro\",\n        description: \"Replay macro\",\n        bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n        exec: function (editor) { editor.commands.replay(editor); },\n        readOnly: true\n    }, {\n        name: \"jumptomatching\",\n        description: \"Jump to matching\",\n        bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n        exec: function (editor) { editor.jumpToMatching(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"selecttomatching\",\n        description: \"Select to matching\",\n        bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n        exec: function (editor) { editor.jumpToMatching(true); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"expandToMatching\",\n        description: \"Expand to matching\",\n        bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n        exec: function (editor) { editor.jumpToMatching(true, true); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"passKeysToBrowser\",\n        description: \"Pass keys to browser\",\n        bindKey: bindKey(null, null),\n        exec: function () { },\n        passEvent: true,\n        readOnly: true\n    }, {\n        name: \"copy\",\n        description: \"Copy\",\n        exec: function (editor) {\n        },\n        readOnly: true\n    },\n    {\n        name: \"cut\",\n        description: \"Cut\",\n        exec: function (editor) {\n            var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n            var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n            editor._emit(\"cut\", range);\n            if (!range.isEmpty())\n                editor.session.remove(range);\n            editor.clearSelection();\n        },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEach\"\n    }, {\n        name: \"paste\",\n        description: \"Paste\",\n        exec: function (editor, args) {\n            editor.$handlePaste(args);\n        },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removeline\",\n        description: \"Remove line\",\n        bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n        exec: function (editor) { editor.removeLines(); },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEachLine\"\n    }, {\n        name: \"duplicateSelection\",\n        description: \"Duplicate selection\",\n        bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n        exec: function (editor) { editor.duplicateSelection(); },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEach\"\n    }, {\n        name: \"sortlines\",\n        description: \"Sort lines\",\n        bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n        exec: function (editor) { editor.sortLines(); },\n        scrollIntoView: \"selection\",\n        multiSelectAction: \"forEachLine\"\n    }, {\n        name: \"togglecomment\",\n        description: \"Toggle comment\",\n        bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n        exec: function (editor) { editor.toggleCommentLines(); },\n        multiSelectAction: \"forEachLine\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"toggleBlockComment\",\n        description: \"Toggle block comment\",\n        bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n        exec: function (editor) { editor.toggleBlockComment(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"modifyNumberUp\",\n        description: \"Modify number up\",\n        bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n        exec: function (editor) { editor.modifyNumber(1); },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEach\"\n    }, {\n        name: \"modifyNumberDown\",\n        description: \"Modify number down\",\n        bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n        exec: function (editor) { editor.modifyNumber(-1); },\n        scrollIntoView: \"cursor\",\n        multiSelectAction: \"forEach\"\n    }, {\n        name: \"replace\",\n        description: \"Replace\",\n        bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n        }\n    }, {\n        name: \"undo\",\n        description: \"Undo\",\n        bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n        exec: function (editor) { editor.undo(); }\n    }, {\n        name: \"redo\",\n        description: \"Redo\",\n        bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n        exec: function (editor) { editor.redo(); }\n    }, {\n        name: \"copylinesup\",\n        description: \"Copy lines up\",\n        bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n        exec: function (editor) { editor.copyLinesUp(); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"movelinesup\",\n        description: \"Move lines up\",\n        bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n        exec: function (editor) { editor.moveLinesUp(); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"copylinesdown\",\n        description: \"Copy lines down\",\n        bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n        exec: function (editor) { editor.copyLinesDown(); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"movelinesdown\",\n        description: \"Move lines down\",\n        bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n        exec: function (editor) { editor.moveLinesDown(); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"del\",\n        description: \"Delete\",\n        bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n        exec: function (editor) { editor.remove(\"right\"); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"backspace\",\n        description: \"Backspace\",\n        bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n        exec: function (editor) { editor.remove(\"left\"); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"cut_or_delete\",\n        description: \"Cut or delete\",\n        bindKey: bindKey(\"Shift-Delete\", null),\n        exec: function (editor) {\n            if (editor.selection.isEmpty()) {\n                editor.remove(\"left\");\n            }\n            else {\n                return false;\n            }\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removetolinestart\",\n        description: \"Remove to line start\",\n        bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n        exec: function (editor) { editor.removeToLineStart(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removetolineend\",\n        description: \"Remove to line end\",\n        bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n        exec: function (editor) { editor.removeToLineEnd(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removetolinestarthard\",\n        description: \"Remove to line start hard\",\n        bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n        exec: function (editor) {\n            var range = editor.selection.getRange();\n            range.start.column = 0;\n            editor.session.remove(range);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removetolineendhard\",\n        description: \"Remove to line end hard\",\n        bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n        exec: function (editor) {\n            var range = editor.selection.getRange();\n            range.end.column = Number.MAX_VALUE;\n            editor.session.remove(range);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removewordleft\",\n        description: \"Remove word left\",\n        bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n        exec: function (editor) { editor.removeWordLeft(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"removewordright\",\n        description: \"Remove word right\",\n        bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n        exec: function (editor) { editor.removeWordRight(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"outdent\",\n        description: \"Outdent\",\n        bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n        exec: function (editor) { editor.blockOutdent(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"indent\",\n        description: \"Indent\",\n        bindKey: bindKey(\"Tab\", \"Tab\"),\n        exec: function (editor) { editor.indent(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"blockoutdent\",\n        description: \"Block outdent\",\n        bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n        exec: function (editor) { editor.blockOutdent(); },\n        multiSelectAction: \"forEachLine\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"blockindent\",\n        description: \"Block indent\",\n        bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n        exec: function (editor) { editor.blockIndent(); },\n        multiSelectAction: \"forEachLine\",\n        scrollIntoView: \"selectionPart\"\n    }, {\n        name: \"insertstring\",\n        description: \"Insert string\",\n        exec: function (editor, str) { editor.insert(str); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"inserttext\",\n        description: \"Insert text\",\n        exec: function (editor, args) {\n            editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"splitline\",\n        description: \"Split line\",\n        bindKey: bindKey(null, \"Ctrl-O\"),\n        exec: function (editor) { editor.splitLine(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"transposeletters\",\n        description: \"Transpose letters\",\n        bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n        exec: function (editor) { editor.transposeLetters(); },\n        multiSelectAction: function (editor) { editor.transposeSelections(1); },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"touppercase\",\n        description: \"To uppercase\",\n        bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n        exec: function (editor) { editor.toUpperCase(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"tolowercase\",\n        description: \"To lowercase\",\n        bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n        exec: function (editor) { editor.toLowerCase(); },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"autoindent\",\n        description: \"Auto Indent\",\n        bindKey: bindKey(null, null),\n        exec: function (editor) { editor.autoIndent(); },\n        multiSelectAction: \"forEachLine\",\n        scrollIntoView: \"animate\"\n    }, {\n        name: \"expandtoline\",\n        description: \"Expand to line\",\n        bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n        exec: function (editor) {\n            var range = editor.selection.getRange();\n            range.start.column = range.end.column = 0;\n            range.end.row++;\n            editor.selection.setRange(range, false);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"joinlines\",\n        description: \"Join lines\",\n        bindKey: bindKey(null, null),\n        exec: function (editor) {\n            var isBackwards = editor.selection.isBackwards();\n            var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n            var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n            var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n            var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n            var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n            var insertLine = editor.session.doc.getLine(selectionStart.row);\n            for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n                var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n                if (curLine.length !== 0) {\n                    curLine = \" \" + curLine;\n                }\n                insertLine += curLine;\n            }\n            if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n                insertLine += editor.session.doc.getNewLineCharacter();\n            }\n            editor.clearSelection();\n            editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n            if (selectedCount > 0) {\n                editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n                editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n            }\n            else {\n                firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n                editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n            }\n        },\n        multiSelectAction: \"forEach\",\n        readOnly: true\n    }, {\n        name: \"invertSelection\",\n        description: \"Invert selection\",\n        bindKey: bindKey(null, null),\n        exec: function (editor) {\n            var endRow = editor.session.doc.getLength() - 1;\n            var endCol = editor.session.doc.getLine(endRow).length;\n            var ranges = editor.selection.rangeList.ranges;\n            var newRanges = [];\n            if (ranges.length < 1) {\n                ranges = [editor.selection.getRange()];\n            }\n            for (var i = 0; i < ranges.length; i++) {\n                if (i == (ranges.length - 1)) {\n                    if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n                        newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n                    }\n                }\n                if (i === 0) {\n                    if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n                        newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n                    }\n                }\n                else {\n                    newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n                }\n            }\n            editor.exitMultiSelectMode();\n            editor.clearSelection();\n            for (var i = 0; i < newRanges.length; i++) {\n                editor.selection.addRange(newRanges[i], false);\n            }\n        },\n        readOnly: true,\n        scrollIntoView: \"none\"\n    }, {\n        name: \"addLineAfter\",\n        description: \"Add new line after the current line\",\n        exec: function (editor) {\n            editor.selection.clearSelection();\n            editor.navigateLineEnd();\n            editor.insert(\"\\n\");\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"addLineBefore\",\n        description: \"Add new line before the current line\",\n        exec: function (editor) {\n            editor.selection.clearSelection();\n            var cursor = editor.getCursorPosition();\n            editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n            editor.insert(\"\\n\");\n            if (cursor.row === 0)\n                editor.navigateUp();\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"openCommandPallete\",\n        description: \"Open command palette\",\n        bindKey: bindKey(\"F1\", \"F1\"),\n        exec: function (editor) {\n            editor.prompt({ $type: \"commands\" });\n        },\n        readOnly: true\n    }, {\n        name: \"modeSelect\",\n        description: \"Change language mode...\",\n        bindKey: bindKey(null, null),\n        exec: function (editor) {\n            editor.prompt({ $type: \"modes\" });\n        },\n        readOnly: true\n    }];\nfor (var i = 1; i < 9; i++) {\n    exports.commands.push({\n        name: \"foldToLevel\" + i,\n        description: \"Fold To Level \" + i,\n        level: i,\n        exec: function (editor) { editor.session.foldToLevel(this.level); },\n        scrollIntoView: \"center\",\n        readOnly: true\n    });\n}\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/clipboard\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar clipboard = require(\"./clipboard\");\nvar Editor = function (renderer, session, options) {\n    this.$toDestroy = [];\n    var container = renderer.getContainerElement();\n    this.container = container;\n    this.renderer = renderer;\n    this.id = \"editor\" + (++Editor.$uid);\n    this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n    if (typeof document == \"object\") {\n        this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n        this.renderer.textarea = this.textInput.getElement();\n        this.$mouseHandler = new MouseHandler(this);\n        new FoldHandler(this);\n    }\n    this.keyBinding = new KeyBinding(this);\n    this.$search = new Search().set({\n        wrap: true\n    });\n    this.$historyTracker = this.$historyTracker.bind(this);\n    this.commands.on(\"exec\", this.$historyTracker);\n    this.$initOperationListeners();\n    this._$emitInputEvent = lang.delayedCall(function () {\n        this._signal(\"input\", {});\n        if (this.session && !this.session.destroyed)\n            this.session.bgTokenizer.scheduleStart();\n    }.bind(this));\n    this.on(\"change\", function (_, _self) {\n        _self._$emitInputEvent.schedule(31);\n    });\n    this.setSession(session || options && options.session || new EditSession(\"\"));\n    config.resetOptions(this);\n    if (options)\n        this.setOptions(options);\n    config._signal(\"editor\", this);\n};\nEditor.$uid = 0;\n(function () {\n    oop.implement(this, EventEmitter);\n    this.$initOperationListeners = function () {\n        this.commands.on(\"exec\", this.startOperation.bind(this), true);\n        this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n        this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n        this.on(\"change\", function () {\n            if (!this.curOp) {\n                this.startOperation();\n                this.curOp.selectionBefore = this.$lastSel;\n            }\n            this.curOp.docChanged = true;\n        }.bind(this), true);\n        this.on(\"changeSelection\", function () {\n            if (!this.curOp) {\n                this.startOperation();\n                this.curOp.selectionBefore = this.$lastSel;\n            }\n            this.curOp.selectionChanged = true;\n        }.bind(this), true);\n    };\n    this.curOp = null;\n    this.prevOp = {};\n    this.startOperation = function (commandEvent) {\n        if (this.curOp) {\n            if (!commandEvent || this.curOp.command)\n                return;\n            this.prevOp = this.curOp;\n        }\n        if (!commandEvent) {\n            this.previousCommand = null;\n            commandEvent = {};\n        }\n        this.$opResetTimer.schedule();\n        this.curOp = this.session.curOp = {\n            command: commandEvent.command || {},\n            args: commandEvent.args,\n            scrollTop: this.renderer.scrollTop\n        };\n        this.curOp.selectionBefore = this.selection.toJSON();\n    };\n    this.endOperation = function (e) {\n        if (this.curOp && this.session) {\n            if (e && e.returnValue === false || !this.session)\n                return (this.curOp = null);\n            if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n                return;\n            this._signal(\"beforeEndOperation\");\n            if (!this.curOp)\n                return;\n            var command = this.curOp.command;\n            var scrollIntoView = command && command.scrollIntoView;\n            if (scrollIntoView) {\n                switch (scrollIntoView) {\n                    case \"center-animate\":\n                        scrollIntoView = \"animate\";\n                    case \"center\":\n                        this.renderer.scrollCursorIntoView(null, 0.5);\n                        break;\n                    case \"animate\":\n                    case \"cursor\":\n                        this.renderer.scrollCursorIntoView();\n                        break;\n                    case \"selectionPart\":\n                        var range = this.selection.getRange();\n                        var config = this.renderer.layerConfig;\n                        if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n                            this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n                        }\n                        break;\n                    default:\n                        break;\n                }\n                if (scrollIntoView == \"animate\")\n                    this.renderer.animateScrolling(this.curOp.scrollTop);\n            }\n            var sel = this.selection.toJSON();\n            this.curOp.selectionAfter = sel;\n            this.$lastSel = this.selection.toJSON();\n            this.session.getUndoManager().addSelection(sel);\n            this.prevOp = this.curOp;\n            this.curOp = null;\n        }\n    };\n    this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n    this.$historyTracker = function (e) {\n        if (!this.$mergeUndoDeltas)\n            return;\n        var prev = this.prevOp;\n        var mergeableCommands = this.$mergeableCommands;\n        var shouldMerge = prev.command && (e.command.name == prev.command.name);\n        if (e.command.name == \"insertstring\") {\n            var text = e.args;\n            if (this.mergeNextCommand === undefined)\n                this.mergeNextCommand = true;\n            shouldMerge = shouldMerge\n                && this.mergeNextCommand // previous command allows to coalesce with\n                && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n            this.mergeNextCommand = true;\n        }\n        else {\n            shouldMerge = shouldMerge\n                && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n        }\n        if (this.$mergeUndoDeltas != \"always\"\n            && Date.now() - this.sequenceStartTime > 2000) {\n            shouldMerge = false; // the sequence is too long\n        }\n        if (shouldMerge)\n            this.session.mergeUndoDeltas = true;\n        else if (mergeableCommands.indexOf(e.command.name) !== -1)\n            this.sequenceStartTime = Date.now();\n    };\n    this.setKeyboardHandler = function (keyboardHandler, cb) {\n        if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n            this.$keybindingId = keyboardHandler;\n            var _self = this;\n            config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n                if (_self.$keybindingId == keyboardHandler)\n                    _self.keyBinding.setKeyboardHandler(module && module.handler);\n                cb && cb();\n            });\n        }\n        else {\n            this.$keybindingId = null;\n            this.keyBinding.setKeyboardHandler(keyboardHandler);\n            cb && cb();\n        }\n    };\n    this.getKeyboardHandler = function () {\n        return this.keyBinding.getKeyboardHandler();\n    };\n    this.setSession = function (session) {\n        if (this.session == session)\n            return;\n        if (this.curOp)\n            this.endOperation();\n        this.curOp = {};\n        var oldSession = this.session;\n        if (oldSession) {\n            this.session.off(\"change\", this.$onDocumentChange);\n            this.session.off(\"changeMode\", this.$onChangeMode);\n            this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n            this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n            this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n            this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n            this.session.off(\"changeFold\", this.$onChangeFold);\n            this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n            this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n            this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n            this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n            this.session.off(\"changeOverwrite\", this.$onCursorChange);\n            this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n            this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n            var selection = this.session.getSelection();\n            selection.off(\"changeCursor\", this.$onCursorChange);\n            selection.off(\"changeSelection\", this.$onSelectionChange);\n        }\n        this.session = session;\n        if (session) {\n            this.$onDocumentChange = this.onDocumentChange.bind(this);\n            session.on(\"change\", this.$onDocumentChange);\n            this.renderer.setSession(session);\n            this.$onChangeMode = this.onChangeMode.bind(this);\n            session.on(\"changeMode\", this.$onChangeMode);\n            this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n            session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n            this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n            session.on(\"changeTabSize\", this.$onChangeTabSize);\n            this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n            session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n            this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n            session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n            this.$onChangeFold = this.onChangeFold.bind(this);\n            session.on(\"changeFold\", this.$onChangeFold);\n            this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n            this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n            this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n            this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n            this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n            this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n            this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n            this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n            this.$onCursorChange = this.onCursorChange.bind(this);\n            this.session.on(\"changeOverwrite\", this.$onCursorChange);\n            this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n            this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n            this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n            this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n            this.selection = session.getSelection();\n            this.selection.on(\"changeCursor\", this.$onCursorChange);\n            this.$onSelectionChange = this.onSelectionChange.bind(this);\n            this.selection.on(\"changeSelection\", this.$onSelectionChange);\n            this.onChangeMode();\n            this.onCursorChange();\n            this.onScrollTopChange();\n            this.onScrollLeftChange();\n            this.onSelectionChange();\n            this.onChangeFrontMarker();\n            this.onChangeBackMarker();\n            this.onChangeBreakpoint();\n            this.onChangeAnnotation();\n            this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n            this.renderer.updateFull();\n        }\n        else {\n            this.selection = null;\n            this.renderer.setSession(session);\n        }\n        this._signal(\"changeSession\", {\n            session: session,\n            oldSession: oldSession\n        });\n        this.curOp = null;\n        oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n        session && session._signal(\"changeEditor\", { editor: this });\n        if (session && !session.destroyed)\n            session.bgTokenizer.scheduleStart();\n    };\n    this.getSession = function () {\n        return this.session;\n    };\n    this.setValue = function (val, cursorPos) {\n        this.session.doc.setValue(val);\n        if (!cursorPos)\n            this.selectAll();\n        else if (cursorPos == 1)\n            this.navigateFileEnd();\n        else if (cursorPos == -1)\n            this.navigateFileStart();\n        return val;\n    };\n    this.getValue = function () {\n        return this.session.getValue();\n    };\n    this.getSelection = function () {\n        return this.selection;\n    };\n    this.resize = function (force) {\n        this.renderer.onResize(force);\n    };\n    this.setTheme = function (theme, cb) {\n        this.renderer.setTheme(theme, cb);\n    };\n    this.getTheme = function () {\n        return this.renderer.getTheme();\n    };\n    this.setStyle = function (style) {\n        this.renderer.setStyle(style);\n    };\n    this.unsetStyle = function (style) {\n        this.renderer.unsetStyle(style);\n    };\n    this.getFontSize = function () {\n        return this.getOption(\"fontSize\") ||\n            dom.computedStyle(this.container).fontSize;\n    };\n    this.setFontSize = function (size) {\n        this.setOption(\"fontSize\", size);\n    };\n    this.$highlightBrackets = function () {\n        if (this.$highlightPending) {\n            return;\n        }\n        var self = this;\n        this.$highlightPending = true;\n        setTimeout(function () {\n            self.$highlightPending = false;\n            var session = self.session;\n            if (!session || session.destroyed)\n                return;\n            if (session.$bracketHighlight) {\n                session.$bracketHighlight.markerIds.forEach(function (id) {\n                    session.removeMarker(id);\n                });\n                session.$bracketHighlight = null;\n            }\n            var pos = self.getCursorPosition();\n            var ranges = session.getMatchingBracketRanges(pos);\n            if (!ranges) {\n                var iterator = new TokenIterator(session, pos.row, pos.column);\n                var token = iterator.getCurrentToken();\n                if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n                    var tagNamesRanges = session.getMatchingTags(pos);\n                    if (tagNamesRanges)\n                        ranges = [tagNamesRanges.openTagName, tagNamesRanges.closeTagName];\n                }\n            }\n            if (!ranges && session.$mode.getMatching)\n                ranges = session.$mode.getMatching(self.session);\n            if (!ranges) {\n                if (self.getHighlightIndentGuides())\n                    self.renderer.$textLayer.$highlightIndentGuide();\n                return;\n            }\n            var markerType = \"ace_bracket\";\n            if (!Array.isArray(ranges)) {\n                ranges = [ranges];\n            }\n            else if (ranges.length == 1) {\n                markerType = \"ace_error_bracket\";\n            }\n            if (ranges.length == 2) {\n                if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n                    ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n                else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n                    ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n            }\n            session.$bracketHighlight = {\n                ranges: ranges,\n                markerIds: ranges.map(function (range) {\n                    return session.addMarker(range, markerType, \"text\");\n                })\n            };\n            if (self.getHighlightIndentGuides())\n                self.renderer.$textLayer.$highlightIndentGuide();\n        }, 50);\n    };\n    this.focus = function () {\n        this.textInput.focus();\n    };\n    this.isFocused = function () {\n        return this.textInput.isFocused();\n    };\n    this.blur = function () {\n        this.textInput.blur();\n    };\n    this.onFocus = function (e) {\n        if (this.$isFocused)\n            return;\n        this.$isFocused = true;\n        this.renderer.showCursor();\n        this.renderer.visualizeFocus();\n        this._emit(\"focus\", e);\n    };\n    this.onBlur = function (e) {\n        if (!this.$isFocused)\n            return;\n        this.$isFocused = false;\n        this.renderer.hideCursor();\n        this.renderer.visualizeBlur();\n        this._emit(\"blur\", e);\n    };\n    this.$cursorChange = function () {\n        this.renderer.updateCursor();\n        this.$highlightBrackets();\n        this.$updateHighlightActiveLine();\n    };\n    this.onDocumentChange = function (delta) {\n        var wrap = this.session.$useWrapMode;\n        var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n        this.renderer.updateLines(delta.start.row, lastRow, wrap);\n        this._signal(\"change\", delta);\n        this.$cursorChange();\n    };\n    this.onTokenizerUpdate = function (e) {\n        var rows = e.data;\n        this.renderer.updateLines(rows.first, rows.last);\n    };\n    this.onScrollTopChange = function () {\n        this.renderer.scrollToY(this.session.getScrollTop());\n    };\n    this.onScrollLeftChange = function () {\n        this.renderer.scrollToX(this.session.getScrollLeft());\n    };\n    this.onCursorChange = function () {\n        this.$cursorChange();\n        this._signal(\"changeSelection\");\n    };\n    this.$updateHighlightActiveLine = function () {\n        var session = this.getSession();\n        var highlight;\n        if (this.$highlightActiveLine) {\n            if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n                highlight = this.getCursorPosition();\n            if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n                highlight = false;\n            if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n                highlight = false;\n        }\n        if (session.$highlightLineMarker && !highlight) {\n            session.removeMarker(session.$highlightLineMarker.id);\n            session.$highlightLineMarker = null;\n        }\n        else if (!session.$highlightLineMarker && highlight) {\n            var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n            range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n            session.$highlightLineMarker = range;\n        }\n        else if (highlight) {\n            session.$highlightLineMarker.start.row = highlight.row;\n            session.$highlightLineMarker.end.row = highlight.row;\n            session.$highlightLineMarker.start.column = highlight.column;\n            session._signal(\"changeBackMarker\");\n        }\n    };\n    this.onSelectionChange = function (e) {\n        var session = this.session;\n        if (session.$selectionMarker) {\n            session.removeMarker(session.$selectionMarker);\n        }\n        session.$selectionMarker = null;\n        if (!this.selection.isEmpty()) {\n            var range = this.selection.getRange();\n            var style = this.getSelectionStyle();\n            session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n        }\n        else {\n            this.$updateHighlightActiveLine();\n        }\n        var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n        this.session.highlight(re);\n        this._signal(\"changeSelection\");\n    };\n    this.$getSelectionHighLightRegexp = function () {\n        var session = this.session;\n        var selection = this.getSelectionRange();\n        if (selection.isEmpty() || selection.isMultiLine())\n            return;\n        var startColumn = selection.start.column;\n        var endColumn = selection.end.column;\n        var line = session.getLine(selection.start.row);\n        var needle = line.substring(startColumn, endColumn);\n        if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n            return;\n        var re = this.$search.$assembleRegExp({\n            wholeWord: true,\n            caseSensitive: true,\n            needle: needle\n        });\n        var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n        if (!re.test(wordWithBoundary))\n            return;\n        return re;\n    };\n    this.onChangeFrontMarker = function () {\n        this.renderer.updateFrontMarkers();\n    };\n    this.onChangeBackMarker = function () {\n        this.renderer.updateBackMarkers();\n    };\n    this.onChangeBreakpoint = function () {\n        this.renderer.updateBreakpoints();\n    };\n    this.onChangeAnnotation = function () {\n        this.renderer.setAnnotations(this.session.getAnnotations());\n    };\n    this.onChangeMode = function (e) {\n        this.renderer.updateText();\n        this._emit(\"changeMode\", e);\n    };\n    this.onChangeWrapLimit = function () {\n        this.renderer.updateFull();\n    };\n    this.onChangeWrapMode = function () {\n        this.renderer.onResize(true);\n    };\n    this.onChangeFold = function () {\n        this.$updateHighlightActiveLine();\n        this.renderer.updateFull();\n    };\n    this.getSelectedText = function () {\n        return this.session.getTextRange(this.getSelectionRange());\n    };\n    this.getCopyText = function () {\n        var text = this.getSelectedText();\n        var nl = this.session.doc.getNewLineCharacter();\n        var copyLine = false;\n        if (!text && this.$copyWithEmptySelection) {\n            copyLine = true;\n            var ranges = this.selection.getAllRanges();\n            for (var i = 0; i < ranges.length; i++) {\n                var range = ranges[i];\n                if (i && ranges[i - 1].start.row == range.start.row)\n                    continue;\n                text += this.session.getLine(range.start.row) + nl;\n            }\n        }\n        var e = { text: text };\n        this._signal(\"copy\", e);\n        clipboard.lineMode = copyLine ? e.text : false;\n        return e.text;\n    };\n    this.onCopy = function () {\n        this.commands.exec(\"copy\", this);\n    };\n    this.onCut = function () {\n        this.commands.exec(\"cut\", this);\n    };\n    this.onPaste = function (text, event) {\n        var e = { text: text, event: event };\n        this.commands.exec(\"paste\", this, e);\n    };\n    this.$handlePaste = function (e) {\n        if (typeof e == \"string\")\n            e = { text: e };\n        this._signal(\"paste\", e);\n        var text = e.text;\n        var lineMode = text === clipboard.lineMode;\n        var session = this.session;\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n            if (lineMode)\n                session.insert({ row: this.selection.lead.row, column: 0 }, text);\n            else\n                this.insert(text);\n        }\n        else if (lineMode) {\n            this.selection.rangeList.ranges.forEach(function (range) {\n                session.insert({ row: range.start.row, column: 0 }, text);\n            });\n        }\n        else {\n            var lines = text.split(/\\r\\n|\\r|\\n/);\n            var ranges = this.selection.rangeList.ranges;\n            var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n            if (lines.length != ranges.length || isFullLine)\n                return this.commands.exec(\"insertstring\", this, text);\n            for (var i = ranges.length; i--;) {\n                var range = ranges[i];\n                if (!range.isEmpty())\n                    session.remove(range);\n                session.insert(range.start, lines[i]);\n            }\n        }\n    };\n    this.execCommand = function (command, args) {\n        return this.commands.exec(command, this, args);\n    };\n    this.insert = function (text, pasted) {\n        var session = this.session;\n        var mode = session.getMode();\n        var cursor = this.getCursorPosition();\n        if (this.getBehavioursEnabled() && !pasted) {\n            var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n            if (transform) {\n                if (text !== transform.text) {\n                    if (!this.inVirtualSelectionMode) {\n                        this.session.mergeUndoDeltas = false;\n                        this.mergeNextCommand = false;\n                    }\n                }\n                text = transform.text;\n            }\n        }\n        if (text == \"\\t\")\n            text = this.session.getTabString();\n        if (!this.selection.isEmpty()) {\n            var range = this.getSelectionRange();\n            cursor = this.session.remove(range);\n            this.clearSelection();\n        }\n        else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n            var range = new Range.fromPoints(cursor, cursor);\n            range.end.column += text.length;\n            this.session.remove(range);\n        }\n        if (text == \"\\n\" || text == \"\\r\\n\") {\n            var line = session.getLine(cursor.row);\n            if (cursor.column > line.search(/\\S|$/)) {\n                var d = line.substr(cursor.column).search(/\\S|$/);\n                session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n            }\n        }\n        this.clearSelection();\n        var start = cursor.column;\n        var lineState = session.getState(cursor.row);\n        var line = session.getLine(cursor.row);\n        var shouldOutdent = mode.checkOutdent(lineState, line, text);\n        session.insert(cursor, text);\n        if (transform && transform.selection) {\n            if (transform.selection.length == 2) { // Transform relative to the current column\n                this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n            }\n            else { // Transform relative to the current row.\n                this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n            }\n        }\n        if (this.$enableAutoIndent) {\n            if (session.getDocument().isNewLine(text)) {\n                var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n                session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n            }\n            if (shouldOutdent)\n                mode.autoOutdent(lineState, session, cursor.row);\n        }\n    };\n    this.autoIndent = function () {\n        var session = this.session;\n        var mode = session.getMode();\n        var startRow, endRow;\n        if (this.selection.isEmpty()) {\n            startRow = 0;\n            endRow = session.doc.getLength() - 1;\n        }\n        else {\n            var selectedRange = this.getSelectionRange();\n            startRow = selectedRange.start.row;\n            endRow = selectedRange.end.row;\n        }\n        var prevLineState = \"\";\n        var prevLine = \"\";\n        var lineIndent = \"\";\n        var line, currIndent, range;\n        var tab = session.getTabString();\n        for (var row = startRow; row <= endRow; row++) {\n            if (row > 0) {\n                prevLineState = session.getState(row - 1);\n                prevLine = session.getLine(row - 1);\n                lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n            }\n            line = session.getLine(row);\n            currIndent = mode.$getIndent(line);\n            if (lineIndent !== currIndent) {\n                if (currIndent.length > 0) {\n                    range = new Range(row, 0, row, currIndent.length);\n                    session.remove(range);\n                }\n                if (lineIndent.length > 0) {\n                    session.insert({ row: row, column: 0 }, lineIndent);\n                }\n            }\n            mode.autoOutdent(prevLineState, session, row);\n        }\n    };\n    this.onTextInput = function (text, composition) {\n        if (!composition)\n            return this.keyBinding.onTextInput(text);\n        this.startOperation({ command: { name: \"insertstring\" } });\n        var applyComposition = this.applyComposition.bind(this, text, composition);\n        if (this.selection.rangeCount)\n            this.forEachSelection(applyComposition);\n        else\n            applyComposition();\n        this.endOperation();\n    };\n    this.applyComposition = function (text, composition) {\n        if (composition.extendLeft || composition.extendRight) {\n            var r = this.selection.getRange();\n            r.start.column -= composition.extendLeft;\n            r.end.column += composition.extendRight;\n            if (r.start.column < 0) {\n                r.start.row--;\n                r.start.column += this.session.getLine(r.start.row).length + 1;\n            }\n            this.selection.setRange(r);\n            if (!text && !r.isEmpty())\n                this.remove();\n        }\n        if (text || !this.selection.isEmpty())\n            this.insert(text, true);\n        if (composition.restoreStart || composition.restoreEnd) {\n            var r = this.selection.getRange();\n            r.start.column -= composition.restoreStart;\n            r.end.column -= composition.restoreEnd;\n            this.selection.setRange(r);\n        }\n    };\n    this.onCommandKey = function (e, hashId, keyCode) {\n        return this.keyBinding.onCommandKey(e, hashId, keyCode);\n    };\n    this.setOverwrite = function (overwrite) {\n        this.session.setOverwrite(overwrite);\n    };\n    this.getOverwrite = function () {\n        return this.session.getOverwrite();\n    };\n    this.toggleOverwrite = function () {\n        this.session.toggleOverwrite();\n    };\n    this.setScrollSpeed = function (speed) {\n        this.setOption(\"scrollSpeed\", speed);\n    };\n    this.getScrollSpeed = function () {\n        return this.getOption(\"scrollSpeed\");\n    };\n    this.setDragDelay = function (dragDelay) {\n        this.setOption(\"dragDelay\", dragDelay);\n    };\n    this.getDragDelay = function () {\n        return this.getOption(\"dragDelay\");\n    };\n    this.setSelectionStyle = function (val) {\n        this.setOption(\"selectionStyle\", val);\n    };\n    this.getSelectionStyle = function () {\n        return this.getOption(\"selectionStyle\");\n    };\n    this.setHighlightActiveLine = function (shouldHighlight) {\n        this.setOption(\"highlightActiveLine\", shouldHighlight);\n    };\n    this.getHighlightActiveLine = function () {\n        return this.getOption(\"highlightActiveLine\");\n    };\n    this.setHighlightGutterLine = function (shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n    this.getHighlightGutterLine = function () {\n        return this.getOption(\"highlightGutterLine\");\n    };\n    this.setHighlightSelectedWord = function (shouldHighlight) {\n        this.setOption(\"highlightSelectedWord\", shouldHighlight);\n    };\n    this.getHighlightSelectedWord = function () {\n        return this.$highlightSelectedWord;\n    };\n    this.setAnimatedScroll = function (shouldAnimate) {\n        this.renderer.setAnimatedScroll(shouldAnimate);\n    };\n    this.getAnimatedScroll = function () {\n        return this.renderer.getAnimatedScroll();\n    };\n    this.setShowInvisibles = function (showInvisibles) {\n        this.renderer.setShowInvisibles(showInvisibles);\n    };\n    this.getShowInvisibles = function () {\n        return this.renderer.getShowInvisibles();\n    };\n    this.setDisplayIndentGuides = function (display) {\n        this.renderer.setDisplayIndentGuides(display);\n    };\n    this.getDisplayIndentGuides = function () {\n        return this.renderer.getDisplayIndentGuides();\n    };\n    this.setHighlightIndentGuides = function (highlight) {\n        this.renderer.setHighlightIndentGuides(highlight);\n    };\n    this.getHighlightIndentGuides = function () {\n        return this.renderer.getHighlightIndentGuides();\n    };\n    this.setShowPrintMargin = function (showPrintMargin) {\n        this.renderer.setShowPrintMargin(showPrintMargin);\n    };\n    this.getShowPrintMargin = function () {\n        return this.renderer.getShowPrintMargin();\n    };\n    this.setPrintMarginColumn = function (showPrintMargin) {\n        this.renderer.setPrintMarginColumn(showPrintMargin);\n    };\n    this.getPrintMarginColumn = function () {\n        return this.renderer.getPrintMarginColumn();\n    };\n    this.setReadOnly = function (readOnly) {\n        this.setOption(\"readOnly\", readOnly);\n    };\n    this.getReadOnly = function () {\n        return this.getOption(\"readOnly\");\n    };\n    this.setBehavioursEnabled = function (enabled) {\n        this.setOption(\"behavioursEnabled\", enabled);\n    };\n    this.getBehavioursEnabled = function () {\n        return this.getOption(\"behavioursEnabled\");\n    };\n    this.setWrapBehavioursEnabled = function (enabled) {\n        this.setOption(\"wrapBehavioursEnabled\", enabled);\n    };\n    this.getWrapBehavioursEnabled = function () {\n        return this.getOption(\"wrapBehavioursEnabled\");\n    };\n    this.setShowFoldWidgets = function (show) {\n        this.setOption(\"showFoldWidgets\", show);\n    };\n    this.getShowFoldWidgets = function () {\n        return this.getOption(\"showFoldWidgets\");\n    };\n    this.setFadeFoldWidgets = function (fade) {\n        this.setOption(\"fadeFoldWidgets\", fade);\n    };\n    this.getFadeFoldWidgets = function () {\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n    this.remove = function (dir) {\n        if (this.selection.isEmpty()) {\n            if (dir == \"left\")\n                this.selection.selectLeft();\n            else\n                this.selection.selectRight();\n        }\n        var range = this.getSelectionRange();\n        if (this.getBehavioursEnabled()) {\n            var session = this.session;\n            var state = session.getState(range.start.row);\n            var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n            if (range.end.column === 0) {\n                var text = session.getTextRange(range);\n                if (text[text.length - 1] == \"\\n\") {\n                    var line = session.getLine(range.end.row);\n                    if (/^\\s+$/.test(line)) {\n                        range.end.column = line.length;\n                    }\n                }\n            }\n            if (new_range)\n                range = new_range;\n        }\n        this.session.remove(range);\n        this.clearSelection();\n    };\n    this.removeWordRight = function () {\n        if (this.selection.isEmpty())\n            this.selection.selectWordRight();\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    this.removeWordLeft = function () {\n        if (this.selection.isEmpty())\n            this.selection.selectWordLeft();\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    this.removeToLineStart = function () {\n        if (this.selection.isEmpty())\n            this.selection.selectLineStart();\n        if (this.selection.isEmpty())\n            this.selection.selectLeft();\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    this.removeToLineEnd = function () {\n        if (this.selection.isEmpty())\n            this.selection.selectLineEnd();\n        var range = this.getSelectionRange();\n        if (range.start.column == range.end.column && range.start.row == range.end.row) {\n            range.end.column = 0;\n            range.end.row++;\n        }\n        this.session.remove(range);\n        this.clearSelection();\n    };\n    this.splitLine = function () {\n        if (!this.selection.isEmpty()) {\n            this.session.remove(this.getSelectionRange());\n            this.clearSelection();\n        }\n        var cursor = this.getCursorPosition();\n        this.insert(\"\\n\");\n        this.moveCursorToPosition(cursor);\n    };\n    this.transposeLetters = function () {\n        if (!this.selection.isEmpty()) {\n            return;\n        }\n        var cursor = this.getCursorPosition();\n        var column = cursor.column;\n        if (column === 0)\n            return;\n        var line = this.session.getLine(cursor.row);\n        var swap, range;\n        if (column < line.length) {\n            swap = line.charAt(column) + line.charAt(column - 1);\n            range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n        }\n        else {\n            swap = line.charAt(column - 1) + line.charAt(column - 2);\n            range = new Range(cursor.row, column - 2, cursor.row, column);\n        }\n        this.session.replace(range, swap);\n        this.session.selection.moveToPosition(range.end);\n    };\n    this.toLowerCase = function () {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toLowerCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n    this.toUpperCase = function () {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toUpperCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n    this.indent = function () {\n        var session = this.session;\n        var range = this.getSelectionRange();\n        if (range.start.row < range.end.row) {\n            var rows = this.$getSelectedRows();\n            session.indentRows(rows.first, rows.last, \"\\t\");\n            return;\n        }\n        else if (range.start.column < range.end.column) {\n            var text = session.getTextRange(range);\n            if (!/^\\s+$/.test(text)) {\n                var rows = this.$getSelectedRows();\n                session.indentRows(rows.first, rows.last, \"\\t\");\n                return;\n            }\n        }\n        var line = session.getLine(range.start.row);\n        var position = range.start;\n        var size = session.getTabSize();\n        var column = session.documentToScreenColumn(position.row, position.column);\n        if (this.session.getUseSoftTabs()) {\n            var count = (size - column % size);\n            var indentString = lang.stringRepeat(\" \", count);\n        }\n        else {\n            var count = column % size;\n            while (line[range.start.column - 1] == \" \" && count) {\n                range.start.column--;\n                count--;\n            }\n            this.selection.setSelectionRange(range);\n            indentString = \"\\t\";\n        }\n        return this.insert(indentString);\n    };\n    this.blockIndent = function () {\n        var rows = this.$getSelectedRows();\n        this.session.indentRows(rows.first, rows.last, \"\\t\");\n    };\n    this.blockOutdent = function () {\n        var selection = this.session.getSelection();\n        this.session.outdentRows(selection.getRange());\n    };\n    this.sortLines = function () {\n        var rows = this.$getSelectedRows();\n        var session = this.session;\n        var lines = [];\n        for (var i = rows.first; i <= rows.last; i++)\n            lines.push(session.getLine(i));\n        lines.sort(function (a, b) {\n            if (a.toLowerCase() < b.toLowerCase())\n                return -1;\n            if (a.toLowerCase() > b.toLowerCase())\n                return 1;\n            return 0;\n        });\n        var deleteRange = new Range(0, 0, 0, 0);\n        for (var i = rows.first; i <= rows.last; i++) {\n            var line = session.getLine(i);\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            deleteRange.end.column = line.length;\n            session.replace(deleteRange, lines[i - rows.first]);\n        }\n    };\n    this.toggleCommentLines = function () {\n        var state = this.session.getState(this.getCursorPosition().row);\n        var rows = this.$getSelectedRows();\n        this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n    };\n    this.toggleBlockComment = function () {\n        var cursor = this.getCursorPosition();\n        var state = this.session.getState(cursor.row);\n        var range = this.getSelectionRange();\n        this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n    };\n    this.getNumberAt = function (row, column) {\n        var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n        _numberRx.lastIndex = 0;\n        var s = this.session.getLine(row);\n        while (_numberRx.lastIndex < column) {\n            var m = _numberRx.exec(s);\n            if (m.index <= column && m.index + m[0].length >= column) {\n                var number = {\n                    value: m[0],\n                    start: m.index,\n                    end: m.index + m[0].length\n                };\n                return number;\n            }\n        }\n        return null;\n    };\n    this.modifyNumber = function (amount) {\n        var row = this.selection.getCursor().row;\n        var column = this.selection.getCursor().column;\n        var charRange = new Range(row, column - 1, row, column);\n        var c = this.session.getTextRange(charRange);\n        if (!isNaN(parseFloat(c)) && isFinite(c)) {\n            var nr = this.getNumberAt(row, column);\n            if (nr) {\n                var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n                var decimals = nr.start + nr.value.length - fp;\n                var t = parseFloat(nr.value);\n                t *= Math.pow(10, decimals);\n                if (fp !== nr.end && column < fp) {\n                    amount *= Math.pow(10, nr.end - column - 1);\n                }\n                else {\n                    amount *= Math.pow(10, nr.end - column);\n                }\n                t += amount;\n                t /= Math.pow(10, decimals);\n                var nnr = t.toFixed(decimals);\n                var replaceRange = new Range(row, nr.start, row, nr.end);\n                this.session.replace(replaceRange, nnr);\n                this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n            }\n        }\n        else {\n            this.toggleWord();\n        }\n    };\n    this.$toggleWordPairs = [\n        [\"first\", \"last\"],\n        [\"true\", \"false\"],\n        [\"yes\", \"no\"],\n        [\"width\", \"height\"],\n        [\"top\", \"bottom\"],\n        [\"right\", \"left\"],\n        [\"on\", \"off\"],\n        [\"x\", \"y\"],\n        [\"get\", \"set\"],\n        [\"max\", \"min\"],\n        [\"horizontal\", \"vertical\"],\n        [\"show\", \"hide\"],\n        [\"add\", \"remove\"],\n        [\"up\", \"down\"],\n        [\"before\", \"after\"],\n        [\"even\", \"odd\"],\n        [\"in\", \"out\"],\n        [\"inside\", \"outside\"],\n        [\"next\", \"previous\"],\n        [\"increase\", \"decrease\"],\n        [\"attach\", \"detach\"],\n        [\"&&\", \"||\"],\n        [\"==\", \"!=\"]\n    ];\n    this.toggleWord = function () {\n        var row = this.selection.getCursor().row;\n        var column = this.selection.getCursor().column;\n        this.selection.selectWord();\n        var currentState = this.getSelectedText();\n        var currWordStart = this.selection.getWordRange().start.column;\n        var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n        var delta = column - currWordStart - 1;\n        if (delta < 0)\n            delta = 0;\n        var curLength = 0, itLength = 0;\n        var that = this;\n        if (currentState.match(/[A-Za-z0-9_]+/)) {\n            wordParts.forEach(function (item, i) {\n                itLength = curLength + item.length;\n                if (delta >= curLength && delta <= itLength) {\n                    currentState = item;\n                    that.selection.clearSelection();\n                    that.moveCursorTo(row, curLength + currWordStart);\n                    that.selection.selectTo(row, itLength + currWordStart);\n                }\n                curLength = itLength;\n            });\n        }\n        var wordPairs = this.$toggleWordPairs;\n        var reg;\n        for (var i = 0; i < wordPairs.length; i++) {\n            var item = wordPairs[i];\n            for (var j = 0; j <= 1; j++) {\n                var negate = +!j;\n                var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n                if (firstCondition) {\n                    var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n                    if (secondCondition) {\n                        reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n                            var res = item[negate];\n                            if (result.toUpperCase() == result) {\n                                res = res.toUpperCase();\n                            }\n                            else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n                                res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n                            }\n                            return res;\n                        });\n                        this.insert(reg);\n                        reg = \"\";\n                    }\n                }\n            }\n        }\n    };\n    this.removeLines = function () {\n        var rows = this.$getSelectedRows();\n        this.session.removeFullLines(rows.first, rows.last);\n        this.clearSelection();\n    };\n    this.duplicateSelection = function () {\n        var sel = this.selection;\n        var doc = this.session;\n        var range = sel.getRange();\n        var reverse = sel.isBackwards();\n        if (range.isEmpty()) {\n            var row = range.start.row;\n            doc.duplicateLines(row, row);\n        }\n        else {\n            var point = reverse ? range.start : range.end;\n            var endPoint = doc.insert(point, doc.getTextRange(range), false);\n            range.start = point;\n            range.end = endPoint;\n            sel.setSelectionRange(range, reverse);\n        }\n    };\n    this.moveLinesDown = function () {\n        this.$moveLines(1, false);\n    };\n    this.moveLinesUp = function () {\n        this.$moveLines(-1, false);\n    };\n    this.moveText = function (range, toPosition, copy) {\n        return this.session.moveText(range, toPosition, copy);\n    };\n    this.copyLinesUp = function () {\n        this.$moveLines(-1, true);\n    };\n    this.copyLinesDown = function () {\n        this.$moveLines(1, true);\n    };\n    this.$moveLines = function (dir, copy) {\n        var rows, moved;\n        var selection = this.selection;\n        if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n            var range = selection.toOrientedRange();\n            rows = this.$getSelectedRows(range);\n            moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n            if (copy && dir == -1)\n                moved = 0;\n            range.moveBy(moved, 0);\n            selection.fromOrientedRange(range);\n        }\n        else {\n            var ranges = selection.rangeList.ranges;\n            selection.rangeList.detach(this.session);\n            this.inVirtualSelectionMode = true;\n            var diff = 0;\n            var totalDiff = 0;\n            var l = ranges.length;\n            for (var i = 0; i < l; i++) {\n                var rangeIndex = i;\n                ranges[i].moveBy(diff, 0);\n                rows = this.$getSelectedRows(ranges[i]);\n                var first = rows.first;\n                var last = rows.last;\n                while (++i < l) {\n                    if (totalDiff)\n                        ranges[i].moveBy(totalDiff, 0);\n                    var subRows = this.$getSelectedRows(ranges[i]);\n                    if (copy && subRows.first != last)\n                        break;\n                    else if (!copy && subRows.first > last + 1)\n                        break;\n                    last = subRows.last;\n                }\n                i--;\n                diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n                if (copy && dir == -1)\n                    rangeIndex = i + 1;\n                while (rangeIndex <= i) {\n                    ranges[rangeIndex].moveBy(diff, 0);\n                    rangeIndex++;\n                }\n                if (!copy)\n                    diff = 0;\n                totalDiff += diff;\n            }\n            selection.fromOrientedRange(selection.ranges[0]);\n            selection.rangeList.attach(this.session);\n            this.inVirtualSelectionMode = false;\n        }\n    };\n    this.$getSelectedRows = function (range) {\n        range = (range || this.getSelectionRange()).collapseRows();\n        return {\n            first: this.session.getRowFoldStart(range.start.row),\n            last: this.session.getRowFoldEnd(range.end.row)\n        };\n    };\n    this.onCompositionStart = function (compositionState) {\n        this.renderer.showComposition(compositionState);\n    };\n    this.onCompositionUpdate = function (text) {\n        this.renderer.setCompositionText(text);\n    };\n    this.onCompositionEnd = function () {\n        this.renderer.hideComposition();\n    };\n    this.getFirstVisibleRow = function () {\n        return this.renderer.getFirstVisibleRow();\n    };\n    this.getLastVisibleRow = function () {\n        return this.renderer.getLastVisibleRow();\n    };\n    this.isRowVisible = function (row) {\n        return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n    };\n    this.isRowFullyVisible = function (row) {\n        return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n    };\n    this.$getVisibleRowCount = function () {\n        return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n    };\n    this.$moveByPage = function (dir, select) {\n        var renderer = this.renderer;\n        var config = this.renderer.layerConfig;\n        var rows = dir * Math.floor(config.height / config.lineHeight);\n        if (select === true) {\n            this.selection.$moveSelection(function () {\n                this.moveCursorBy(rows, 0);\n            });\n        }\n        else if (select === false) {\n            this.selection.moveCursorBy(rows, 0);\n            this.selection.clearSelection();\n        }\n        var scrollTop = renderer.scrollTop;\n        renderer.scrollBy(0, rows * config.lineHeight);\n        if (select != null)\n            renderer.scrollCursorIntoView(null, 0.5);\n        renderer.animateScrolling(scrollTop);\n    };\n    this.selectPageDown = function () {\n        this.$moveByPage(1, true);\n    };\n    this.selectPageUp = function () {\n        this.$moveByPage(-1, true);\n    };\n    this.gotoPageDown = function () {\n        this.$moveByPage(1, false);\n    };\n    this.gotoPageUp = function () {\n        this.$moveByPage(-1, false);\n    };\n    this.scrollPageDown = function () {\n        this.$moveByPage(1);\n    };\n    this.scrollPageUp = function () {\n        this.$moveByPage(-1);\n    };\n    this.scrollToRow = function (row) {\n        this.renderer.scrollToRow(row);\n    };\n    this.scrollToLine = function (line, center, animate, callback) {\n        this.renderer.scrollToLine(line, center, animate, callback);\n    };\n    this.centerSelection = function () {\n        var range = this.getSelectionRange();\n        var pos = {\n            row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n            column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n        };\n        this.renderer.alignCursor(pos, 0.5);\n    };\n    this.getCursorPosition = function () {\n        return this.selection.getCursor();\n    };\n    this.getCursorPositionScreen = function () {\n        return this.session.documentToScreenPosition(this.getCursorPosition());\n    };\n    this.getSelectionRange = function () {\n        return this.selection.getRange();\n    };\n    this.selectAll = function () {\n        this.selection.selectAll();\n    };\n    this.clearSelection = function () {\n        this.selection.clearSelection();\n    };\n    this.moveCursorTo = function (row, column) {\n        this.selection.moveCursorTo(row, column);\n    };\n    this.moveCursorToPosition = function (pos) {\n        this.selection.moveCursorToPosition(pos);\n    };\n    this.jumpToMatching = function (select, expand) {\n        var cursor = this.getCursorPosition();\n        var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n        var prevToken = iterator.getCurrentToken();\n        var tokenCount = 0;\n        if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n            prevToken = iterator.stepBackward();\n        }\n        var token = prevToken || iterator.stepForward();\n        if (!token)\n            return;\n        var matchType;\n        var found = false;\n        var depth = {};\n        var i = cursor.column - token.start;\n        var bracketType;\n        var brackets = {\n            \")\": \"(\",\n            \"(\": \"(\",\n            \"]\": \"[\",\n            \"[\": \"[\",\n            \"{\": \"{\",\n            \"}\": \"{\"\n        };\n        do {\n            if (token.value.match(/[{}()\\[\\]]/g)) {\n                for (; i < token.value.length && !found; i++) {\n                    if (!brackets[token.value[i]]) {\n                        continue;\n                    }\n                    bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n                    if (isNaN(depth[bracketType])) {\n                        depth[bracketType] = 0;\n                    }\n                    switch (token.value[i]) {\n                        case '(':\n                        case '[':\n                        case '{':\n                            depth[bracketType]++;\n                            break;\n                        case ')':\n                        case ']':\n                        case '}':\n                            depth[bracketType]--;\n                            if (depth[bracketType] === -1) {\n                                matchType = 'bracket';\n                                found = true;\n                            }\n                            break;\n                    }\n                }\n            }\n            else if (token.type.indexOf('tag-name') !== -1) {\n                if (isNaN(depth[token.value])) {\n                    depth[token.value] = 0;\n                }\n                if (prevToken.value === '<' && tokenCount > 1) {\n                    depth[token.value]++;\n                }\n                else if (prevToken.value === '</') {\n                    depth[token.value]--;\n                }\n                if (depth[token.value] === -1) {\n                    matchType = 'tag';\n                    found = true;\n                }\n            }\n            if (!found) {\n                prevToken = token;\n                tokenCount++;\n                token = iterator.stepForward();\n                i = 0;\n            }\n        } while (token && !found);\n        if (!matchType)\n            return;\n        var range, pos;\n        if (matchType === 'bracket') {\n            range = this.session.getBracketRange(cursor);\n            if (!range) {\n                range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1);\n                pos = range.start;\n                if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column)\n                    < 2)\n                    range = this.session.getBracketRange(pos);\n            }\n        }\n        else if (matchType === 'tag') {\n            if (!token || token.type.indexOf('tag-name') === -1)\n                return;\n            range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2);\n            if (range.compare(cursor.row, cursor.column) === 0) {\n                var tagsRanges = this.session.getMatchingTags(cursor);\n                if (tagsRanges) {\n                    if (tagsRanges.openTag.contains(cursor.row, cursor.column)) {\n                        range = tagsRanges.closeTag;\n                        pos = range.start;\n                    }\n                    else {\n                        range = tagsRanges.openTag;\n                        if (tagsRanges.closeTag.start.row === cursor.row && tagsRanges.closeTag.start.column\n                            === cursor.column)\n                            pos = range.end;\n                        else\n                            pos = range.start;\n                    }\n                }\n            }\n            pos = pos || range.start;\n        }\n        pos = range && range.cursor || pos;\n        if (pos) {\n            if (select) {\n                if (range && expand) {\n                    this.selection.setRange(range);\n                }\n                else if (range && range.isEqual(this.getSelectionRange())) {\n                    this.clearSelection();\n                }\n                else {\n                    this.selection.selectTo(pos.row, pos.column);\n                }\n            }\n            else {\n                this.selection.moveTo(pos.row, pos.column);\n            }\n        }\n    };\n    this.gotoLine = function (lineNumber, column, animate) {\n        this.selection.clearSelection();\n        this.session.unfold({ row: lineNumber - 1, column: column || 0 });\n        this.exitMultiSelectMode && this.exitMultiSelectMode();\n        this.moveCursorTo(lineNumber - 1, column || 0);\n        if (!this.isRowFullyVisible(lineNumber - 1))\n            this.scrollToLine(lineNumber - 1, true, animate);\n    };\n    this.navigateTo = function (row, column) {\n        this.selection.moveTo(row, column);\n    };\n    this.navigateUp = function (times) {\n        if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n            var selectionStart = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionStart);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(-times || -1, 0);\n    };\n    this.navigateDown = function (times) {\n        if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n            var selectionEnd = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionEnd);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(times || 1, 0);\n    };\n    this.navigateLeft = function (times) {\n        if (!this.selection.isEmpty()) {\n            var selectionStart = this.getSelectionRange().start;\n            this.moveCursorToPosition(selectionStart);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorLeft();\n            }\n        }\n        this.clearSelection();\n    };\n    this.navigateRight = function (times) {\n        if (!this.selection.isEmpty()) {\n            var selectionEnd = this.getSelectionRange().end;\n            this.moveCursorToPosition(selectionEnd);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorRight();\n            }\n        }\n        this.clearSelection();\n    };\n    this.navigateLineStart = function () {\n        this.selection.moveCursorLineStart();\n        this.clearSelection();\n    };\n    this.navigateLineEnd = function () {\n        this.selection.moveCursorLineEnd();\n        this.clearSelection();\n    };\n    this.navigateFileEnd = function () {\n        this.selection.moveCursorFileEnd();\n        this.clearSelection();\n    };\n    this.navigateFileStart = function () {\n        this.selection.moveCursorFileStart();\n        this.clearSelection();\n    };\n    this.navigateWordRight = function () {\n        this.selection.moveCursorWordRight();\n        this.clearSelection();\n    };\n    this.navigateWordLeft = function () {\n        this.selection.moveCursorWordLeft();\n        this.clearSelection();\n    };\n    this.replace = function (replacement, options) {\n        if (options)\n            this.$search.set(options);\n        var range = this.$search.find(this.session);\n        var replaced = 0;\n        if (!range)\n            return replaced;\n        if (this.$tryReplace(range, replacement)) {\n            replaced = 1;\n        }\n        this.selection.setSelectionRange(range);\n        this.renderer.scrollSelectionIntoView(range.start, range.end);\n        return replaced;\n    };\n    this.replaceAll = function (replacement, options) {\n        if (options) {\n            this.$search.set(options);\n        }\n        var ranges = this.$search.findAll(this.session);\n        var replaced = 0;\n        if (!ranges.length)\n            return replaced;\n        var selection = this.getSelectionRange();\n        this.selection.moveTo(0, 0);\n        for (var i = ranges.length - 1; i >= 0; --i) {\n            if (this.$tryReplace(ranges[i], replacement)) {\n                replaced++;\n            }\n        }\n        this.selection.setSelectionRange(selection);\n        return replaced;\n    };\n    this.$tryReplace = function (range, replacement) {\n        var input = this.session.getTextRange(range);\n        replacement = this.$search.replace(input, replacement);\n        if (replacement !== null) {\n            range.end = this.session.replace(range, replacement);\n            return range;\n        }\n        else {\n            return null;\n        }\n    };\n    this.getLastSearchOptions = function () {\n        return this.$search.getOptions();\n    };\n    this.find = function (needle, options, animate) {\n        if (!options)\n            options = {};\n        if (typeof needle == \"string\" || needle instanceof RegExp)\n            options.needle = needle;\n        else if (typeof needle == \"object\")\n            oop.mixin(options, needle);\n        var range = this.selection.getRange();\n        if (options.needle == null) {\n            needle = this.session.getTextRange(range)\n                || this.$search.$options.needle;\n            if (!needle) {\n                range = this.session.getWordRange(range.start.row, range.start.column);\n                needle = this.session.getTextRange(range);\n            }\n            this.$search.set({ needle: needle });\n        }\n        this.$search.set(options);\n        if (!options.start)\n            this.$search.set({ start: range });\n        var newRange = this.$search.find(this.session);\n        if (options.preventScroll)\n            return newRange;\n        if (newRange) {\n            this.revealRange(newRange, animate);\n            return newRange;\n        }\n        if (options.backwards)\n            range.start = range.end;\n        else\n            range.end = range.start;\n        this.selection.setRange(range);\n    };\n    this.findNext = function (options, animate) {\n        this.find({ skipCurrent: true, backwards: false }, options, animate);\n    };\n    this.findPrevious = function (options, animate) {\n        this.find(options, { skipCurrent: true, backwards: true }, animate);\n    };\n    this.revealRange = function (range, animate) {\n        this.session.unfold(range);\n        this.selection.setSelectionRange(range);\n        var scrollTop = this.renderer.scrollTop;\n        this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n        if (animate !== false)\n            this.renderer.animateScrolling(scrollTop);\n    };\n    this.undo = function () {\n        this.session.getUndoManager().undo(this.session);\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n    this.redo = function () {\n        this.session.getUndoManager().redo(this.session);\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n    this.destroy = function () {\n        if (this.$toDestroy) {\n            this.$toDestroy.forEach(function (el) {\n                el.destroy();\n            });\n            this.$toDestroy = null;\n        }\n        if (this.$mouseHandler)\n            this.$mouseHandler.destroy();\n        this.renderer.destroy();\n        this._signal(\"destroy\", this);\n        if (this.session)\n            this.session.destroy();\n        if (this._$emitInputEvent)\n            this._$emitInputEvent.cancel();\n        this.removeAllListeners();\n    };\n    this.setAutoScrollEditorIntoView = function (enable) {\n        if (!enable)\n            return;\n        var rect;\n        var self = this;\n        var shouldScroll = false;\n        if (!this.$scrollAnchor)\n            this.$scrollAnchor = document.createElement(\"div\");\n        var scrollAnchor = this.$scrollAnchor;\n        scrollAnchor.style.cssText = \"position:absolute\";\n        this.container.insertBefore(scrollAnchor, this.container.firstChild);\n        var onChangeSelection = this.on(\"changeSelection\", function () {\n            shouldScroll = true;\n        });\n        var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n            if (shouldScroll)\n                rect = self.renderer.container.getBoundingClientRect();\n        });\n        var onAfterRender = this.renderer.on(\"afterRender\", function () {\n            if (shouldScroll && rect && (self.isFocused()\n                || self.searchBox && self.searchBox.isFocused())) {\n                var renderer = self.renderer;\n                var pos = renderer.$cursorLayer.$pixelPos;\n                var config = renderer.layerConfig;\n                var top = pos.top - config.offset;\n                if (pos.top >= 0 && top + rect.top < 0) {\n                    shouldScroll = true;\n                }\n                else if (pos.top < config.height &&\n                    pos.top + rect.top + config.lineHeight > window.innerHeight) {\n                    shouldScroll = false;\n                }\n                else {\n                    shouldScroll = null;\n                }\n                if (shouldScroll != null) {\n                    scrollAnchor.style.top = top + \"px\";\n                    scrollAnchor.style.left = pos.left + \"px\";\n                    scrollAnchor.style.height = config.lineHeight + \"px\";\n                    scrollAnchor.scrollIntoView(shouldScroll);\n                }\n                shouldScroll = rect = null;\n            }\n        });\n        this.setAutoScrollEditorIntoView = function (enable) {\n            if (enable)\n                return;\n            delete this.setAutoScrollEditorIntoView;\n            this.off(\"changeSelection\", onChangeSelection);\n            this.renderer.off(\"afterRender\", onAfterRender);\n            this.renderer.off(\"beforeRender\", onBeforeRender);\n        };\n    };\n    this.$resetCursorStyle = function () {\n        var style = this.$cursorStyle || \"ace\";\n        var cursorLayer = this.renderer.$cursorLayer;\n        if (!cursorLayer)\n            return;\n        cursorLayer.setSmoothBlinking(/smooth/.test(style));\n        cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n        dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n    };\n    this.prompt = function (message, options, callback) {\n        var editor = this;\n        config.loadModule(\"./ext/prompt\", function (module) {\n            module.prompt(editor, message, options, callback);\n        });\n    };\n}).call(Editor.prototype);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n    selectionStyle: {\n        set: function (style) {\n            this.onSelectionChange();\n            this._signal(\"changeSelectionStyle\", { data: style });\n        },\n        initialValue: \"line\"\n    },\n    highlightActiveLine: {\n        set: function () { this.$updateHighlightActiveLine(); },\n        initialValue: true\n    },\n    highlightSelectedWord: {\n        set: function (shouldHighlight) { this.$onSelectionChange(); },\n        initialValue: true\n    },\n    readOnly: {\n        set: function (readOnly) {\n            this.textInput.setReadOnly(readOnly);\n            this.$resetCursorStyle();\n        },\n        initialValue: false\n    },\n    copyWithEmptySelection: {\n        set: function (value) {\n            this.textInput.setCopyWithEmptySelection(value);\n        },\n        initialValue: false\n    },\n    cursorStyle: {\n        set: function (val) { this.$resetCursorStyle(); },\n        values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n        initialValue: \"ace\"\n    },\n    mergeUndoDeltas: {\n        values: [false, true, \"always\"],\n        initialValue: true\n    },\n    behavioursEnabled: { initialValue: true },\n    wrapBehavioursEnabled: { initialValue: true },\n    enableAutoIndent: { initialValue: true },\n    autoScrollEditorIntoView: {\n        set: function (val) { this.setAutoScrollEditorIntoView(val); }\n    },\n    keyboardHandler: {\n        set: function (val) { this.setKeyboardHandler(val); },\n        get: function () { return this.$keybindingId; },\n        handlesSet: true\n    },\n    value: {\n        set: function (val) { this.session.setValue(val); },\n        get: function () { return this.getValue(); },\n        handlesSet: true,\n        hidden: true\n    },\n    session: {\n        set: function (val) { this.setSession(val); },\n        get: function () { return this.session; },\n        handlesSet: true,\n        hidden: true\n    },\n    showLineNumbers: {\n        set: function (show) {\n            this.renderer.$gutterLayer.setShowLineNumbers(show);\n            this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n            if (show && this.$relativeLineNumbers)\n                relativeNumberRenderer.attach(this);\n            else\n                relativeNumberRenderer.detach(this);\n        },\n        initialValue: true\n    },\n    relativeLineNumbers: {\n        set: function (value) {\n            if (this.$showLineNumbers && value)\n                relativeNumberRenderer.attach(this);\n            else\n                relativeNumberRenderer.detach(this);\n        }\n    },\n    placeholder: {\n        set: function (message) {\n            if (!this.$updatePlaceholder) {\n                this.$updatePlaceholder = function () {\n                    var value = this.session && (this.renderer.$composition || this.getValue());\n                    if (value && this.renderer.placeholderNode) {\n                        this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n                        dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n                        this.renderer.placeholderNode.remove();\n                        this.renderer.placeholderNode = null;\n                    }\n                    else if (!value && !this.renderer.placeholderNode) {\n                        this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n                        dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n                        var el = dom.createElement(\"div\");\n                        el.className = \"ace_placeholder\";\n                        el.textContent = this.$placeholder || \"\";\n                        this.renderer.placeholderNode = el;\n                        this.renderer.content.appendChild(this.renderer.placeholderNode);\n                    }\n                    else if (!value && this.renderer.placeholderNode) {\n                        this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n                    }\n                }.bind(this);\n                this.on(\"input\", this.$updatePlaceholder);\n            }\n            this.$updatePlaceholder();\n        }\n    },\n    customScrollbar: \"renderer\",\n    hScrollBarAlwaysVisible: \"renderer\",\n    vScrollBarAlwaysVisible: \"renderer\",\n    highlightGutterLine: \"renderer\",\n    animatedScroll: \"renderer\",\n    showInvisibles: \"renderer\",\n    showPrintMargin: \"renderer\",\n    printMarginColumn: \"renderer\",\n    printMargin: \"renderer\",\n    fadeFoldWidgets: \"renderer\",\n    showFoldWidgets: \"renderer\",\n    displayIndentGuides: \"renderer\",\n    highlightIndentGuides: \"renderer\",\n    showGutter: \"renderer\",\n    fontSize: \"renderer\",\n    fontFamily: \"renderer\",\n    maxLines: \"renderer\",\n    minLines: \"renderer\",\n    scrollPastEnd: \"renderer\",\n    fixedWidthGutter: \"renderer\",\n    theme: \"renderer\",\n    hasCssTransforms: \"renderer\",\n    maxPixelHeight: \"renderer\",\n    useTextareaForIME: \"renderer\",\n    scrollSpeed: \"$mouseHandler\",\n    dragDelay: \"$mouseHandler\",\n    dragEnabled: \"$mouseHandler\",\n    focusTimeout: \"$mouseHandler\",\n    tooltipFollowsMouse: \"$mouseHandler\",\n    firstLineNumber: \"session\",\n    overwrite: \"session\",\n    newLineMode: \"session\",\n    useWorker: \"session\",\n    useSoftTabs: \"session\",\n    navigateWithinSoftTabs: \"session\",\n    tabSize: \"session\",\n    wrap: \"session\",\n    indentedSoftWrap: \"session\",\n    foldStyle: \"session\",\n    mode: \"session\"\n});\nvar relativeNumberRenderer = {\n    getText: function (session, row) {\n        return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n    },\n    getWidth: function (session, lastLineNumber, config) {\n        return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n    },\n    update: function (e, editor) {\n        editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n    },\n    attach: function (editor) {\n        editor.renderer.$gutterLayer.$renderer = this;\n        editor.on(\"changeSelection\", this.update);\n        this.update(null, editor);\n    },\n    detach: function (editor) {\n        if (editor.renderer.$gutterLayer.$renderer == this)\n            editor.renderer.$gutterLayer.$renderer = null;\n        editor.off(\"changeSelection\", this.update);\n        this.update(null, editor);\n    }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = function () {\n    this.$maxRev = 0;\n    this.$fromUndo = false;\n    this.$undoDepth = Infinity;\n    this.reset();\n};\n(function () {\n    this.addSession = function (session) {\n        this.$session = session;\n    };\n    this.add = function (delta, allowMerge, session) {\n        if (this.$fromUndo)\n            return;\n        if (delta == this.$lastDelta)\n            return;\n        if (!this.$keepRedoStack)\n            this.$redoStack.length = 0;\n        if (allowMerge === false || !this.lastDeltas) {\n            this.lastDeltas = [];\n            var undoStackLength = this.$undoStack.length;\n            if (undoStackLength > this.$undoDepth - 1) {\n                this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n            }\n            this.$undoStack.push(this.lastDeltas);\n            delta.id = this.$rev = ++this.$maxRev;\n        }\n        if (delta.action == \"remove\" || delta.action == \"insert\")\n            this.$lastDelta = delta;\n        this.lastDeltas.push(delta);\n    };\n    this.addSelection = function (selection, rev) {\n        this.selections.push({\n            value: selection,\n            rev: rev || this.$rev\n        });\n    };\n    this.startNewGroup = function () {\n        this.lastDeltas = null;\n        return this.$rev;\n    };\n    this.markIgnored = function (from, to) {\n        if (to == null)\n            to = this.$rev + 1;\n        var stack = this.$undoStack;\n        for (var i = stack.length; i--;) {\n            var delta = stack[i][0];\n            if (delta.id <= from)\n                break;\n            if (delta.id < to)\n                delta.ignore = true;\n        }\n        this.lastDeltas = null;\n    };\n    this.getSelection = function (rev, after) {\n        var stack = this.selections;\n        for (var i = stack.length; i--;) {\n            var selection = stack[i];\n            if (selection.rev < rev) {\n                if (after)\n                    selection = stack[i + 1];\n                return selection;\n            }\n        }\n    };\n    this.getRevision = function () {\n        return this.$rev;\n    };\n    this.getDeltas = function (from, to) {\n        if (to == null)\n            to = this.$rev + 1;\n        var stack = this.$undoStack;\n        var end = null, start = 0;\n        for (var i = stack.length; i--;) {\n            var delta = stack[i][0];\n            if (delta.id < to && !end)\n                end = i + 1;\n            if (delta.id <= from) {\n                start = i + 1;\n                break;\n            }\n        }\n        return stack.slice(start, end);\n    };\n    this.getChangedRanges = function (from, to) {\n        if (to == null)\n            to = this.$rev + 1;\n    };\n    this.getChangedLines = function (from, to) {\n        if (to == null)\n            to = this.$rev + 1;\n    };\n    this.undo = function (session, dontSelect) {\n        this.lastDeltas = null;\n        var stack = this.$undoStack;\n        if (!rearrangeUndoStack(stack, stack.length))\n            return;\n        if (!session)\n            session = this.$session;\n        if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n            this.$redoStack = [];\n        this.$fromUndo = true;\n        var deltaSet = stack.pop();\n        var undoSelectionRange = null;\n        if (deltaSet) {\n            undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n            this.$redoStack.push(deltaSet);\n            this.$syncRev();\n        }\n        this.$fromUndo = false;\n        return undoSelectionRange;\n    };\n    this.redo = function (session, dontSelect) {\n        this.lastDeltas = null;\n        if (!session)\n            session = this.$session;\n        this.$fromUndo = true;\n        if (this.$redoStackBaseRev != this.$rev) {\n            var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n            rebaseRedoStack(this.$redoStack, diff);\n            this.$redoStackBaseRev = this.$rev;\n            this.$redoStack.forEach(function (x) {\n                x[0].id = ++this.$maxRev;\n            }, this);\n        }\n        var deltaSet = this.$redoStack.pop();\n        var redoSelectionRange = null;\n        if (deltaSet) {\n            redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n            this.$undoStack.push(deltaSet);\n            this.$syncRev();\n        }\n        this.$fromUndo = false;\n        return redoSelectionRange;\n    };\n    this.$syncRev = function () {\n        var stack = this.$undoStack;\n        var nextDelta = stack[stack.length - 1];\n        var id = nextDelta && nextDelta[0].id || 0;\n        this.$redoStackBaseRev = id;\n        this.$rev = id;\n    };\n    this.reset = function () {\n        this.lastDeltas = null;\n        this.$lastDelta = null;\n        this.$undoStack = [];\n        this.$redoStack = [];\n        this.$rev = 0;\n        this.mark = 0;\n        this.$redoStackBaseRev = this.$rev;\n        this.selections = [];\n    };\n    this.canUndo = function () {\n        return this.$undoStack.length > 0;\n    };\n    this.canRedo = function () {\n        return this.$redoStack.length > 0;\n    };\n    this.bookmark = function (rev) {\n        if (rev == undefined)\n            rev = this.$rev;\n        this.mark = rev;\n    };\n    this.isAtBookmark = function () {\n        return this.$rev === this.mark;\n    };\n    this.toJSON = function () {\n    };\n    this.fromJSON = function () {\n    };\n    this.hasUndo = this.canUndo;\n    this.hasRedo = this.canRedo;\n    this.isClean = this.isAtBookmark;\n    this.markClean = this.bookmark;\n    this.$prettyPrint = function (delta) {\n        if (delta)\n            return stringifyDelta(delta);\n        return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n    };\n}).call(UndoManager.prototype);\nfunction rearrangeUndoStack(stack, pos) {\n    for (var i = pos; i--;) {\n        var deltaSet = stack[i];\n        if (deltaSet && !deltaSet[0].ignore) {\n            while (i < pos - 1) {\n                var swapped = swapGroups(stack[i], stack[i + 1]);\n                stack[i] = swapped[0];\n                stack[i + 1] = swapped[1];\n                i++;\n            }\n            return true;\n        }\n    }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n    var isInsert = delta.action == \"insert\";\n    var start = delta.start;\n    var end = delta.end;\n    var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n    var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n    if (isInsert)\n        end = start;\n    for (var i in this.marks) {\n        var point = this.marks[i];\n        var cmp = comparePoints(point, start);\n        if (cmp < 0) {\n            continue; // delta starts after the range\n        }\n        if (cmp === 0) {\n            if (isInsert) {\n                if (point.bias == 1) {\n                    cmp = 1;\n                }\n                else {\n                    point.bias == -1;\n                    continue;\n                }\n            }\n        }\n        var cmp2 = isInsert ? cmp : comparePoints(point, end);\n        if (cmp2 > 0) {\n            point.row += rowShift;\n            point.column += point.row == end.row ? colShift : 0;\n            continue;\n        }\n        if (!isInsert && cmp2 <= 0) {\n            point.row = start.row;\n            point.column = start.column;\n            if (cmp2 === 0)\n                point.bias = 1;\n        }\n    }\n}\nfunction clonePos(pos) {\n    return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n    return {\n        start: clonePos(d.start),\n        end: clonePos(d.end),\n        action: d.action,\n        lines: d.lines.slice()\n    };\n}\nfunction stringifyDelta(d) {\n    d = d || this;\n    if (Array.isArray(d)) {\n        return d.map(stringifyDelta).join(\"\\n\");\n    }\n    var type = \"\";\n    if (d.action) {\n        type = d.action == \"insert\" ? \"+\" : \"-\";\n        type += \"[\" + d.lines + \"]\";\n    }\n    else if (d.value) {\n        if (Array.isArray(d.value)) {\n            type = d.value.map(stringifyRange).join(\"\\n\");\n        }\n        else {\n            type = stringifyRange(d.value);\n        }\n    }\n    if (d.start) {\n        type += stringifyRange(d);\n    }\n    if (d.id || d.rev) {\n        type += \"\\t(\" + (d.id || d.rev) + \")\";\n    }\n    return type;\n}\nfunction stringifyRange(r) {\n    return r.start.row + \":\" + r.start.column\n        + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n    var i1 = d1.action == \"insert\";\n    var i2 = d2.action == \"insert\";\n    if (i1 && i2) {\n        if (cmp(d2.start, d1.end) >= 0) {\n            shift(d2, d1, -1);\n        }\n        else if (cmp(d2.start, d1.start) <= 0) {\n            shift(d1, d2, +1);\n        }\n        else {\n            return null;\n        }\n    }\n    else if (i1 && !i2) {\n        if (cmp(d2.start, d1.end) >= 0) {\n            shift(d2, d1, -1);\n        }\n        else if (cmp(d2.end, d1.start) <= 0) {\n            shift(d1, d2, -1);\n        }\n        else {\n            return null;\n        }\n    }\n    else if (!i1 && i2) {\n        if (cmp(d2.start, d1.start) >= 0) {\n            shift(d2, d1, +1);\n        }\n        else if (cmp(d2.start, d1.start) <= 0) {\n            shift(d1, d2, +1);\n        }\n        else {\n            return null;\n        }\n    }\n    else if (!i1 && !i2) {\n        if (cmp(d2.start, d1.start) >= 0) {\n            shift(d2, d1, +1);\n        }\n        else if (cmp(d2.end, d1.start) <= 0) {\n            shift(d1, d2, -1);\n        }\n        else {\n            return null;\n        }\n    }\n    return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n    for (var i = ds1.length; i--;) {\n        for (var j = 0; j < ds2.length; j++) {\n            if (!swap(ds1[i], ds2[j])) {\n                while (i < ds1.length) {\n                    while (j--) {\n                        swap(ds2[j], ds1[i]);\n                    }\n                    j = ds2.length;\n                    i++;\n                }\n                return [ds1, ds2];\n            }\n        }\n    }\n    ds1.selectionBefore = ds2.selectionBefore =\n        ds1.selectionAfter = ds2.selectionAfter = null;\n    return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n    var i1 = d1.action == \"insert\";\n    var i2 = c1.action == \"insert\";\n    if (i1 && i2) {\n        if (cmp(d1.start, c1.start) < 0) {\n            shift(c1, d1, 1);\n        }\n        else {\n            shift(d1, c1, 1);\n        }\n    }\n    else if (i1 && !i2) {\n        if (cmp(d1.start, c1.end) >= 0) {\n            shift(d1, c1, -1);\n        }\n        else if (cmp(d1.start, c1.start) <= 0) {\n            shift(c1, d1, +1);\n        }\n        else {\n            shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n            shift(c1, d1, +1);\n        }\n    }\n    else if (!i1 && i2) {\n        if (cmp(c1.start, d1.end) >= 0) {\n            shift(c1, d1, -1);\n        }\n        else if (cmp(c1.start, d1.start) <= 0) {\n            shift(d1, c1, +1);\n        }\n        else {\n            shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n            shift(d1, c1, +1);\n        }\n    }\n    else if (!i1 && !i2) {\n        if (cmp(c1.start, d1.end) >= 0) {\n            shift(c1, d1, -1);\n        }\n        else if (cmp(c1.end, d1.start) <= 0) {\n            shift(d1, c1, -1);\n        }\n        else {\n            var before, after;\n            if (cmp(d1.start, c1.start) < 0) {\n                before = d1;\n                d1 = splitDelta(d1, c1.start);\n            }\n            if (cmp(d1.end, c1.end) > 0) {\n                after = splitDelta(d1, c1.end);\n            }\n            shiftPos(c1.end, d1.start, d1.end, -1);\n            if (after && !before) {\n                d1.lines = after.lines;\n                d1.start = after.start;\n                d1.end = after.end;\n                after = d1;\n            }\n            return [c1, before, after].filter(Boolean);\n        }\n    }\n    return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n    shiftPos(d1.start, d2.start, d2.end, dir);\n    shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n    if (pos.row == (dir == 1 ? start : end).row) {\n        pos.column += dir * (end.column - start.column);\n    }\n    pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n    var lines = c.lines;\n    var end = c.end;\n    c.end = clonePos(pos);\n    var rowsBefore = c.end.row - c.start.row;\n    var otherLines = lines.splice(rowsBefore, lines.length);\n    var col = rowsBefore ? pos.column : pos.column - c.start.column;\n    lines.push(otherLines[0].substring(0, col));\n    otherLines[0] = otherLines[0].substr(col);\n    var rest = {\n        start: clonePos(pos),\n        end: end,\n        lines: otherLines,\n        action: c.action\n    };\n    return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n    d = cloneDelta(d);\n    for (var j = redoStack.length; j--;) {\n        var deltaSet = redoStack[j];\n        for (var i = 0; i < deltaSet.length; i++) {\n            var x = deltaSet[i];\n            var xformed = xform(x, d);\n            d = xformed[0];\n            if (xformed.length != 2) {\n                if (xformed[2]) {\n                    deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n                    i++;\n                }\n                else if (!xformed[1]) {\n                    deltaSet.splice(i, 1);\n                    i--;\n                }\n            }\n        }\n        if (!deltaSet.length) {\n            redoStack.splice(j, 1);\n        }\n    }\n    return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n    for (var i = 0; i < deltaSets.length; i++) {\n        var deltas = deltaSets[i];\n        for (var j = 0; j < deltas.length; j++) {\n            moveDeltasByOne(redoStack, deltas[j]);\n        }\n    }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = function (element, canvasHeight) {\n    this.element = element;\n    this.canvasHeight = canvasHeight || 500000;\n    this.element.style.height = (this.canvasHeight * 2) + \"px\";\n    this.cells = [];\n    this.cellCache = [];\n    this.$offsetCoefficient = 0;\n};\n(function () {\n    this.moveContainer = function (config) {\n        dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n    };\n    this.pageChanged = function (oldConfig, newConfig) {\n        return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n            Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n    };\n    this.computeLineTop = function (row, config, session) {\n        var screenTop = config.firstRowScreen * config.lineHeight;\n        var screenPage = Math.floor(screenTop / this.canvasHeight);\n        var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n        return lineTop - (screenPage * this.canvasHeight);\n    };\n    this.computeLineHeight = function (row, config, session) {\n        return config.lineHeight * session.getRowLineCount(row);\n    };\n    this.getLength = function () {\n        return this.cells.length;\n    };\n    this.get = function (index) {\n        return this.cells[index];\n    };\n    this.shift = function () {\n        this.$cacheCell(this.cells.shift());\n    };\n    this.pop = function () {\n        this.$cacheCell(this.cells.pop());\n    };\n    this.push = function (cell) {\n        if (Array.isArray(cell)) {\n            this.cells.push.apply(this.cells, cell);\n            var fragment = dom.createFragment(this.element);\n            for (var i = 0; i < cell.length; i++) {\n                fragment.appendChild(cell[i].element);\n            }\n            this.element.appendChild(fragment);\n        }\n        else {\n            this.cells.push(cell);\n            this.element.appendChild(cell.element);\n        }\n    };\n    this.unshift = function (cell) {\n        if (Array.isArray(cell)) {\n            this.cells.unshift.apply(this.cells, cell);\n            var fragment = dom.createFragment(this.element);\n            for (var i = 0; i < cell.length; i++) {\n                fragment.appendChild(cell[i].element);\n            }\n            if (this.element.firstChild)\n                this.element.insertBefore(fragment, this.element.firstChild);\n            else\n                this.element.appendChild(fragment);\n        }\n        else {\n            this.cells.unshift(cell);\n            this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n        }\n    };\n    this.last = function () {\n        if (this.cells.length)\n            return this.cells[this.cells.length - 1];\n        else\n            return null;\n    };\n    this.$cacheCell = function (cell) {\n        if (!cell)\n            return;\n        cell.element.remove();\n        this.cellCache.push(cell);\n    };\n    this.createCell = function (row, config, session, initElement) {\n        var cell = this.cellCache.pop();\n        if (!cell) {\n            var element = dom.createElement(\"div\");\n            if (initElement)\n                initElement(element);\n            this.element.appendChild(element);\n            cell = {\n                element: element,\n                text: \"\",\n                row: row\n            };\n        }\n        cell.row = row;\n        return cell;\n    };\n}).call(Lines.prototype);\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar Gutter = function (parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_gutter-layer\";\n    parentEl.appendChild(this.element);\n    this.setShowFoldWidgets(this.$showFoldWidgets);\n    this.gutterWidth = 0;\n    this.$annotations = [];\n    this.$updateAnnotations = this.$updateAnnotations.bind(this);\n    this.$lines = new Lines(this.element);\n    this.$lines.$offsetCoefficient = 1;\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setSession = function (session) {\n        if (this.session)\n            this.session.off(\"change\", this.$updateAnnotations);\n        this.session = session;\n        if (session)\n            session.on(\"change\", this.$updateAnnotations);\n    };\n    this.addGutterDecoration = function (row, className) {\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n        this.session.addGutterDecoration(row, className);\n    };\n    this.removeGutterDecoration = function (row, className) {\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n        this.session.removeGutterDecoration(row, className);\n    };\n    this.setAnnotations = function (annotations) {\n        this.$annotations = [];\n        for (var i = 0; i < annotations.length; i++) {\n            var annotation = annotations[i];\n            var row = annotation.row;\n            var rowInfo = this.$annotations[row];\n            if (!rowInfo)\n                rowInfo = this.$annotations[row] = { text: [] };\n            var annoText = annotation.text;\n            annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n            if (rowInfo.text.indexOf(annoText) === -1)\n                rowInfo.text.push(annoText);\n            var type = annotation.type;\n            var className = annotation.className;\n            if (className)\n                rowInfo.className = className;\n            else if (type == \"error\")\n                rowInfo.className = \" ace_error\";\n            else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n                rowInfo.className = \" ace_warning\";\n            else if (type == \"info\" && (!rowInfo.className))\n                rowInfo.className = \" ace_info\";\n        }\n    };\n    this.$updateAnnotations = function (delta) {\n        if (!this.$annotations.length)\n            return;\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n        if (len === 0) {\n        }\n        else if (delta.action == 'remove') {\n            this.$annotations.splice(firstRow, len + 1, null);\n        }\n        else {\n            var args = new Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.$annotations.splice.apply(this.$annotations, args);\n        }\n    };\n    this.update = function (config) {\n        this.config = config;\n        var session = this.session;\n        var firstRow = config.firstRow;\n        var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n        session.getLength() - 1);\n        this.oldLastRow = lastRow;\n        this.config = config;\n        this.$lines.moveContainer(config);\n        this.$updateCursorRow();\n        var fold = session.getNextFoldLine(firstRow);\n        var foldStart = fold ? fold.start.row : Infinity;\n        var cell = null;\n        var index = -1;\n        var row = firstRow;\n        while (true) {\n            if (row > foldStart) {\n                row = fold.end.row + 1;\n                fold = session.getNextFoldLine(row, fold);\n                foldStart = fold ? fold.start.row : Infinity;\n            }\n            if (row > lastRow) {\n                while (this.$lines.getLength() > index + 1)\n                    this.$lines.pop();\n                break;\n            }\n            cell = this.$lines.get(++index);\n            if (cell) {\n                cell.row = row;\n            }\n            else {\n                cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n                this.$lines.push(cell);\n            }\n            this.$renderCell(cell, config, fold, row);\n            row++;\n        }\n        this._signal(\"afterRender\");\n        this.$updateGutterWidth(config);\n    };\n    this.$updateGutterWidth = function (config) {\n        var session = this.session;\n        var gutterRenderer = session.gutterRenderer || this.$renderer;\n        var firstLineNumber = session.$firstLineNumber;\n        var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n        if (this.$fixedWidth || session.$useWrapMode)\n            lastLineText = session.getLength() + firstLineNumber - 1;\n        var gutterWidth = gutterRenderer\n            ? gutterRenderer.getWidth(session, lastLineText, config)\n            : lastLineText.toString().length * config.characterWidth;\n        var padding = this.$padding || this.$computePadding();\n        gutterWidth += padding.left + padding.right;\n        if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n            this.gutterWidth = gutterWidth;\n            this.element.parentNode.style.width =\n                this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n            this._signal(\"changeGutterWidth\", gutterWidth);\n        }\n    };\n    this.$updateCursorRow = function () {\n        if (!this.$highlightGutterLine)\n            return;\n        var position = this.session.selection.getCursor();\n        if (this.$cursorRow === position.row)\n            return;\n        this.$cursorRow = position.row;\n    };\n    this.updateLineHighlight = function () {\n        if (!this.$highlightGutterLine)\n            return;\n        var row = this.session.selection.cursor.row;\n        this.$cursorRow = row;\n        if (this.$cursorCell && this.$cursorCell.row == row)\n            return;\n        if (this.$cursorCell)\n            this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n        var cells = this.$lines.cells;\n        this.$cursorCell = null;\n        for (var i = 0; i < cells.length; i++) {\n            var cell = cells[i];\n            if (cell.row >= this.$cursorRow) {\n                if (cell.row > this.$cursorRow) {\n                    var fold = this.session.getFoldLine(this.$cursorRow);\n                    if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n                        cell = cells[i - 1];\n                    else\n                        break;\n                }\n                cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n                this.$cursorCell = cell;\n                break;\n            }\n        }\n    };\n    this.scrollLines = function (config) {\n        var oldConfig = this.config;\n        this.config = config;\n        this.$updateCursorRow();\n        if (this.$lines.pageChanged(oldConfig, config))\n            return this.update(config);\n        this.$lines.moveContainer(config);\n        var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n        this.session.getLength() - 1);\n        var oldLastRow = this.oldLastRow;\n        this.oldLastRow = lastRow;\n        if (!oldConfig || oldLastRow < config.firstRow)\n            return this.update(config);\n        if (lastRow < oldConfig.firstRow)\n            return this.update(config);\n        if (oldConfig.firstRow < config.firstRow)\n            for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n                this.$lines.shift();\n        if (oldLastRow > lastRow)\n            for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n                this.$lines.pop();\n        if (config.firstRow < oldConfig.firstRow) {\n            this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n        }\n        if (lastRow > oldLastRow) {\n            this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n        }\n        this.updateLineHighlight();\n        this._signal(\"afterRender\");\n        this.$updateGutterWidth(config);\n    };\n    this.$renderLines = function (config, firstRow, lastRow) {\n        var fragment = [];\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row + 1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > lastRow)\n                break;\n            var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n            this.$renderCell(cell, config, foldLine, row);\n            fragment.push(cell);\n            row++;\n        }\n        return fragment;\n    };\n    this.$renderCell = function (cell, config, fold, row) {\n        var element = cell.element;\n        var session = this.session;\n        var textNode = element.childNodes[0];\n        var foldWidget = element.childNodes[1];\n        var firstLineNumber = session.$firstLineNumber;\n        var breakpoints = session.$breakpoints;\n        var decorations = session.$decorations;\n        var gutterRenderer = session.gutterRenderer || this.$renderer;\n        var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n        var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n        var className = \"ace_gutter-cell \";\n        if (this.$highlightGutterLine) {\n            if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n                className += \"ace_gutter-active-line \";\n                if (this.$cursorCell != cell) {\n                    if (this.$cursorCell)\n                        this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n                    this.$cursorCell = cell;\n                }\n            }\n        }\n        if (breakpoints[row])\n            className += breakpoints[row];\n        if (decorations[row])\n            className += decorations[row];\n        if (this.$annotations[row])\n            className += this.$annotations[row].className;\n        if (element.className != className)\n            element.className = className;\n        if (foldWidgets) {\n            var c = foldWidgets[row];\n            if (c == null)\n                c = foldWidgets[row] = session.getFoldWidget(row);\n        }\n        if (c) {\n            var className = \"ace_fold-widget ace_\" + c;\n            if (c == \"start\" && row == foldStart && row < fold.end.row)\n                className += \" ace_closed\";\n            else\n                className += \" ace_open\";\n            if (foldWidget.className != className)\n                foldWidget.className = className;\n            var foldHeight = config.lineHeight + \"px\";\n            dom.setStyle(foldWidget.style, \"height\", foldHeight);\n            dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n        }\n        else {\n            if (foldWidget) {\n                dom.setStyle(foldWidget.style, \"display\", \"none\");\n            }\n        }\n        var text = (gutterRenderer\n            ? gutterRenderer.getText(session, row)\n            : row + firstLineNumber).toString();\n        if (text !== textNode.data) {\n            textNode.data = text;\n        }\n        dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n        dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n        cell.text = text;\n        return cell;\n    };\n    this.$fixedWidth = false;\n    this.$highlightGutterLine = true;\n    this.$renderer = \"\";\n    this.setHighlightGutterLine = function (highlightGutterLine) {\n        this.$highlightGutterLine = highlightGutterLine;\n    };\n    this.$showLineNumbers = true;\n    this.$renderer = \"\";\n    this.setShowLineNumbers = function (show) {\n        this.$renderer = !show && {\n            getWidth: function () { return 0; },\n            getText: function () { return \"\"; }\n        };\n    };\n    this.getShowLineNumbers = function () {\n        return this.$showLineNumbers;\n    };\n    this.$showFoldWidgets = true;\n    this.setShowFoldWidgets = function (show) {\n        if (show)\n            dom.addCssClass(this.element, \"ace_folding-enabled\");\n        else\n            dom.removeCssClass(this.element, \"ace_folding-enabled\");\n        this.$showFoldWidgets = show;\n        this.$padding = null;\n    };\n    this.getShowFoldWidgets = function () {\n        return this.$showFoldWidgets;\n    };\n    this.$computePadding = function () {\n        if (!this.element.firstChild)\n            return { left: 0, right: 0 };\n        var style = dom.computedStyle(this.element.firstChild);\n        this.$padding = {};\n        this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n            + (parseInt(style.paddingLeft) || 0) + 1;\n        this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n            + (parseInt(style.paddingRight) || 0);\n        return this.$padding;\n    };\n    this.getRegion = function (point) {\n        var padding = this.$padding || this.$computePadding();\n        var rect = this.element.getBoundingClientRect();\n        if (point.x < padding.left + rect.left)\n            return \"markers\";\n        if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n            return \"foldWidgets\";\n    };\n}).call(Gutter.prototype);\nfunction onCreateCell(element) {\n    var textNode = document.createTextNode('');\n    element.appendChild(textNode);\n    var foldWidget = dom.createElement(\"span\");\n    element.appendChild(foldWidget);\n    return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = function (parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_marker-layer\";\n    parentEl.appendChild(this.element);\n};\n(function () {\n    this.$padding = 0;\n    this.setPadding = function (padding) {\n        this.$padding = padding;\n    };\n    this.setSession = function (session) {\n        this.session = session;\n    };\n    this.setMarkers = function (markers) {\n        this.markers = markers;\n    };\n    this.elt = function (className, css) {\n        var x = this.i != -1 && this.element.childNodes[this.i];\n        if (!x) {\n            x = document.createElement(\"div\");\n            this.element.appendChild(x);\n            this.i = -1;\n        }\n        else {\n            this.i++;\n        }\n        x.style.cssText = css;\n        x.className = className;\n    };\n    this.update = function (config) {\n        if (!config)\n            return;\n        this.config = config;\n        this.i = 0;\n        var html;\n        for (var key in this.markers) {\n            var marker = this.markers[key];\n            if (!marker.range) {\n                marker.update(html, this, this.session, config);\n                continue;\n            }\n            var range = marker.range.clipRows(config.firstRow, config.lastRow);\n            if (range.isEmpty())\n                continue;\n            range = range.toScreenRange(this.session);\n            if (marker.renderer) {\n                var top = this.$getTop(range.start.row, config);\n                var left = this.$padding + range.start.column * config.characterWidth;\n                marker.renderer(html, range, left, top, config);\n            }\n            else if (marker.type == \"fullLine\") {\n                this.drawFullLineMarker(html, range, marker.clazz, config);\n            }\n            else if (marker.type == \"screenLine\") {\n                this.drawScreenLineMarker(html, range, marker.clazz, config);\n            }\n            else if (range.isMultiLine()) {\n                if (marker.type == \"text\")\n                    this.drawTextMarker(html, range, marker.clazz, config);\n                else\n                    this.drawMultiLineMarker(html, range, marker.clazz, config);\n            }\n            else {\n                this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n            }\n        }\n        if (this.i != -1) {\n            while (this.i < this.element.childElementCount)\n                this.element.removeChild(this.element.lastChild);\n        }\n    };\n    this.$getTop = function (row, layerConfig) {\n        return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n    };\n    function getBorderClass(tl, tr, br, bl) {\n        return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n    }\n    this.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n        var session = this.session;\n        var start = range.start.row;\n        var end = range.end.row;\n        var row = start;\n        var prev = 0;\n        var curr = 0;\n        var next = session.getScreenLastRowColumn(row);\n        var lineRange = new Range(row, range.start.column, row, curr);\n        for (; row <= end; row++) {\n            lineRange.start.row = lineRange.end.row = row;\n            lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n            lineRange.end.column = next;\n            prev = curr;\n            curr = next;\n            next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n            this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n                + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n        }\n    };\n    this.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n        var padding = this.$padding;\n        var height = config.lineHeight;\n        var top = this.$getTop(range.start.row, config);\n        var left = padding + range.start.column * config.characterWidth;\n        extraStyle = extraStyle || \"\";\n        if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n            var range1 = range.clone();\n            range1.end.row = range1.start.row;\n            range1.end.column = this.session.getLine(range1.start.row).length;\n            this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n        }\n        else {\n            this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:0;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n        }\n        if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n            var range1 = range.clone();\n            range1.start.row = range1.end.row;\n            range1.start.column = 0;\n            this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n        }\n        else {\n            top = this.$getTop(range.end.row, config);\n            var width = range.end.column * config.characterWidth;\n            this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n                \"width:\" + width + \"px;\" +\n                \"top:\" + top + \"px;\" +\n                \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n        }\n        height = (range.end.row - range.start.row - 1) * config.lineHeight;\n        if (height <= 0)\n            return;\n        top = this.$getTop(range.start.row + 1, config);\n        var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n        this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n            \"right:0;\" +\n            \"top:\" + top + \"px;\" +\n            \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n    };\n    this.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        if (this.session.$bidiHandler.isBidiRow(range.start.row))\n            return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n        var height = config.lineHeight;\n        var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n        var top = this.$getTop(range.start.row, config);\n        var left = this.$padding + range.start.column * config.characterWidth;\n        this.elt(clazz, \"height:\" + height + \"px;\" +\n            \"width:\" + width + \"px;\" +\n            \"top:\" + top + \"px;\" +\n            \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n    };\n    this.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n        var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n        selections.forEach(function (selection) {\n            this.elt(clazz, \"height:\" + height + \"px;\" +\n                \"width:\" + selection.width + (extraLength || 0) + \"px;\" +\n                \"top:\" + top + \"px;\" +\n                \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n        }, this);\n    };\n    this.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n        if (range.start.row != range.end.row)\n            height += this.$getTop(range.end.row, config) - top;\n        this.elt(clazz, \"height:\" + height + \"px;\" +\n            \"top:\" + top + \"px;\" +\n            \"left:0;right:0;\" + (extraStyle || \"\"));\n    };\n    this.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n        this.elt(clazz, \"height:\" + height + \"px;\" +\n            \"top:\" + top + \"px;\" +\n            \"left:0;right:0;\" + (extraStyle || \"\"));\n    };\n}).call(Marker.prototype);\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Text = function (parentEl) {\n    this.dom = dom;\n    this.element = this.dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_text-layer\";\n    parentEl.appendChild(this.element);\n    this.$updateEolChar = this.$updateEolChar.bind(this);\n    this.$lines = new Lines(this.element);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.EOF_CHAR = \"\\xB6\";\n    this.EOL_CHAR_LF = \"\\xAC\";\n    this.EOL_CHAR_CRLF = \"\\xa4\";\n    this.EOL_CHAR = this.EOL_CHAR_LF;\n    this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n    this.SPACE_CHAR = \"\\xB7\";\n    this.$padding = 0;\n    this.MAX_LINE_LENGTH = 10000;\n    this.$updateEolChar = function () {\n        var doc = this.session.doc;\n        var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n        var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n        if (this.EOL_CHAR != EOL_CHAR) {\n            this.EOL_CHAR = EOL_CHAR;\n            return true;\n        }\n    };\n    this.setPadding = function (padding) {\n        this.$padding = padding;\n        this.element.style.margin = \"0 \" + padding + \"px\";\n    };\n    this.getLineHeight = function () {\n        return this.$fontMetrics.$characterSize.height || 0;\n    };\n    this.getCharacterWidth = function () {\n        return this.$fontMetrics.$characterSize.width || 0;\n    };\n    this.$setFontMetrics = function (measure) {\n        this.$fontMetrics = measure;\n        this.$fontMetrics.on(\"changeCharacterSize\", function (e) {\n            this._signal(\"changeCharacterSize\", e);\n        }.bind(this));\n        this.$pollSizeChanges();\n    };\n    this.checkForSizeChanges = function () {\n        this.$fontMetrics.checkForSizeChanges();\n    };\n    this.$pollSizeChanges = function () {\n        return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n    };\n    this.setSession = function (session) {\n        this.session = session;\n        if (session)\n            this.$computeTabString();\n    };\n    this.showInvisibles = false;\n    this.showSpaces = false;\n    this.showTabs = false;\n    this.showEOL = false;\n    this.setShowInvisibles = function (showInvisibles) {\n        if (this.showInvisibles == showInvisibles)\n            return false;\n        this.showInvisibles = showInvisibles;\n        if (typeof showInvisibles == \"string\") {\n            this.showSpaces = /tab/i.test(showInvisibles);\n            this.showTabs = /space/i.test(showInvisibles);\n            this.showEOL = /eol/i.test(showInvisibles);\n        }\n        else {\n            this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n        }\n        this.$computeTabString();\n        return true;\n    };\n    this.displayIndentGuides = true;\n    this.setDisplayIndentGuides = function (display) {\n        if (this.displayIndentGuides == display)\n            return false;\n        this.displayIndentGuides = display;\n        this.$computeTabString();\n        return true;\n    };\n    this.$highlightIndentGuides = true;\n    this.setHighlightIndentGuides = function (highlight) {\n        if (this.$highlightIndentGuides === highlight)\n            return false;\n        this.$highlightIndentGuides = highlight;\n        return highlight;\n    };\n    this.$tabStrings = [];\n    this.onChangeTabSize =\n        this.$computeTabString = function () {\n            var tabSize = this.session.getTabSize();\n            this.tabSize = tabSize;\n            var tabStr = this.$tabStrings = [0];\n            for (var i = 1; i < tabSize + 1; i++) {\n                if (this.showTabs) {\n                    var span = this.dom.createElement(\"span\");\n                    span.className = \"ace_invisible ace_invisible_tab\";\n                    span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n                    tabStr.push(span);\n                }\n                else {\n                    tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n                }\n            }\n            if (this.displayIndentGuides) {\n                this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n                var className = \"ace_indent-guide\";\n                var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n                var spaceContent = this.showSpaces\n                    ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n                    : lang.stringRepeat(\" \", this.tabSize);\n                var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n                var tabContent = this.showTabs\n                    ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n                    : spaceContent;\n                var span = this.dom.createElement(\"span\");\n                span.className = className + spaceClass;\n                span.textContent = spaceContent;\n                this.$tabStrings[\" \"] = span;\n                var span = this.dom.createElement(\"span\");\n                span.className = className + tabClass;\n                span.textContent = tabContent;\n                this.$tabStrings[\"\\t\"] = span;\n            }\n        };\n    this.updateLines = function (config, firstRow, lastRow) {\n        if (this.config.lastRow != config.lastRow ||\n            this.config.firstRow != config.firstRow) {\n            return this.update(config);\n        }\n        this.config = config;\n        var first = Math.max(firstRow, config.firstRow);\n        var last = Math.min(lastRow, config.lastRow);\n        var lineElements = this.element.childNodes;\n        var lineElementsIdx = 0;\n        for (var row = config.firstRow; row < first; row++) {\n            var foldLine = this.session.getFoldLine(row);\n            if (foldLine) {\n                if (foldLine.containsRow(first)) {\n                    first = foldLine.start.row;\n                    break;\n                }\n                else {\n                    row = foldLine.end.row;\n                }\n            }\n            lineElementsIdx++;\n        }\n        var heightChanged = false;\n        var row = first;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row + 1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > last)\n                break;\n            var lineElement = lineElements[lineElementsIdx++];\n            if (lineElement) {\n                this.dom.removeChildren(lineElement);\n                this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n                if (heightChanged)\n                    lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n                var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n                if (lineElement.style.height != height) {\n                    heightChanged = true;\n                    lineElement.style.height = height;\n                }\n            }\n            row++;\n        }\n        if (heightChanged) {\n            while (lineElementsIdx < this.$lines.cells.length) {\n                var cell = this.$lines.cells[lineElementsIdx++];\n                cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n            }\n        }\n    };\n    this.scrollLines = function (config) {\n        var oldConfig = this.config;\n        this.config = config;\n        if (this.$lines.pageChanged(oldConfig, config))\n            return this.update(config);\n        this.$lines.moveContainer(config);\n        var lastRow = config.lastRow;\n        var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n        if (!oldConfig || oldLastRow < config.firstRow)\n            return this.update(config);\n        if (lastRow < oldConfig.firstRow)\n            return this.update(config);\n        if (!oldConfig || oldConfig.lastRow < config.firstRow)\n            return this.update(config);\n        if (config.lastRow < oldConfig.firstRow)\n            return this.update(config);\n        if (oldConfig.firstRow < config.firstRow)\n            for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n                this.$lines.shift();\n        if (oldConfig.lastRow > config.lastRow)\n            for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n                this.$lines.pop();\n        if (config.firstRow < oldConfig.firstRow) {\n            this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n        }\n        if (config.lastRow > oldConfig.lastRow) {\n            this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n        }\n        this.$highlightIndentGuide();\n    };\n    this.$renderLinesFragment = function (config, firstRow, lastRow) {\n        var fragment = [];\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row + 1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > lastRow)\n                break;\n            var line = this.$lines.createCell(row, config, this.session);\n            var lineEl = line.element;\n            this.dom.removeChildren(lineEl);\n            dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n            dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n            this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n            if (this.$useLineGroups()) {\n                lineEl.className = \"ace_line_group\";\n            }\n            else {\n                lineEl.className = \"ace_line\";\n            }\n            fragment.push(line);\n            row++;\n        }\n        return fragment;\n    };\n    this.update = function (config) {\n        this.$lines.moveContainer(config);\n        this.config = config;\n        var firstRow = config.firstRow;\n        var lastRow = config.lastRow;\n        var lines = this.$lines;\n        while (lines.getLength())\n            lines.pop();\n        lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n    };\n    this.$textToken = {\n        \"text\": true,\n        \"rparen\": true,\n        \"lparen\": true\n    };\n    this.$renderToken = function (parent, screenColumn, token, value) {\n        var self = this;\n        var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n        var valueFragment = this.dom.createFragment(this.element);\n        var m;\n        var i = 0;\n        while (m = re.exec(value)) {\n            var tab = m[1];\n            var simpleSpace = m[2];\n            var controlCharacter = m[3];\n            var cjkSpace = m[4];\n            var cjk = m[5];\n            if (!self.showSpaces && simpleSpace)\n                continue;\n            var before = i != m.index ? value.slice(i, m.index) : \"\";\n            i = m.index + m[0].length;\n            if (before) {\n                valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n            }\n            if (tab) {\n                var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n                valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n                screenColumn += tabSize - 1;\n            }\n            else if (simpleSpace) {\n                if (self.showSpaces) {\n                    var span = this.dom.createElement(\"span\");\n                    span.className = \"ace_invisible ace_invisible_space\";\n                    span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n                    valueFragment.appendChild(span);\n                }\n                else {\n                    valueFragment.appendChild(this.com.createTextNode(simpleSpace, this.element));\n                }\n            }\n            else if (controlCharacter) {\n                var span = this.dom.createElement(\"span\");\n                span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n                span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n                valueFragment.appendChild(span);\n            }\n            else if (cjkSpace) {\n                screenColumn += 1;\n                var span = this.dom.createElement(\"span\");\n                span.style.width = (self.config.characterWidth * 2) + \"px\";\n                span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n                span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n                valueFragment.appendChild(span);\n            }\n            else if (cjk) {\n                screenColumn += 1;\n                var span = this.dom.createElement(\"span\");\n                span.style.width = (self.config.characterWidth * 2) + \"px\";\n                span.className = \"ace_cjk\";\n                span.textContent = cjk;\n                valueFragment.appendChild(span);\n            }\n        }\n        valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n        if (!this.$textToken[token.type]) {\n            var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n            var span = this.dom.createElement(\"span\");\n            if (token.type == \"fold\")\n                span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n            span.className = classes;\n            span.appendChild(valueFragment);\n            parent.appendChild(span);\n        }\n        else {\n            parent.appendChild(valueFragment);\n        }\n        return screenColumn + value.length;\n    };\n    this.renderIndentGuide = function (parent, value, max) {\n        var cols = value.search(this.$indentGuideRe);\n        if (cols <= 0 || cols >= max)\n            return value;\n        if (value[0] == \" \") {\n            cols -= cols % this.tabSize;\n            var count = cols / this.tabSize;\n            for (var i = 0; i < count; i++) {\n                parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n            }\n            this.$highlightIndentGuide();\n            return value.substr(cols);\n        }\n        else if (value[0] == \"\\t\") {\n            for (var i = 0; i < cols; i++) {\n                parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n            }\n            this.$highlightIndentGuide();\n            return value.substr(cols);\n        }\n        this.$highlightIndentGuide();\n        return value;\n    };\n    this.$highlightIndentGuide = function () {\n        if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n            return;\n        this.$highlightIndentGuideMarker = {\n            indentLevel: undefined,\n            start: undefined,\n            end: undefined,\n            dir: undefined\n        };\n        var lines = this.session.doc.$lines;\n        if (!lines)\n            return;\n        var cursor = this.session.selection.getCursor();\n        var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n        var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n        this.$highlightIndentGuideMarker = {\n            indentLevel: elementIndentLevel,\n            start: cursor.row\n        };\n        var bracketHighlight = this.session.$bracketHighlight;\n        if (bracketHighlight) {\n            var ranges = this.session.$bracketHighlight.ranges;\n            for (var i = 0; i < ranges.length; i++) {\n                if (cursor.row !== ranges[i].start.row) {\n                    this.$highlightIndentGuideMarker.end = ranges[i].start.row;\n                    if (cursor.row > ranges[i].start.row) {\n                        this.$highlightIndentGuideMarker.dir = -1;\n                    }\n                    else {\n                        this.$highlightIndentGuideMarker.dir = 1;\n                    }\n                    break;\n                }\n            }\n        }\n        if (!this.$highlightIndentGuideMarker.end) {\n            if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n                this.$highlightIndentGuideMarker.dir = 1;\n                for (var i = cursor.row + 1; i < lines.length; i++) {\n                    var line = lines[i];\n                    var currentIndent = /^\\s*/.exec(line)[0].length;\n                    if (line !== '') {\n                        this.$highlightIndentGuideMarker.end = i;\n                        if (currentIndent <= initialIndent)\n                            break;\n                    }\n                }\n            }\n        }\n        this.$renderHighlightIndentGuide();\n    };\n    this.$clearActiveIndentGuide = function () {\n        var cells = this.$lines.cells;\n        for (var i = 0; i < cells.length; i++) {\n            var cell = cells[i];\n            var childNodes = cell.element.childNodes;\n            if (childNodes.length > 0) {\n                for (var j = 0; j < childNodes.length; j++) {\n                    if (childNodes[j].classList && childNodes[j].classList.contains(\"ace_indent-guide-active\")) {\n                        childNodes[j].classList.remove(\"ace_indent-guide-active\");\n                        break;\n                    }\n                }\n            }\n        }\n    };\n    this.$setIndentGuideActive = function (cell, indentLevel) {\n        var line = this.session.doc.getLine(cell.row);\n        if (line !== \"\") {\n            var childNodes = cell.element.childNodes;\n            if (childNodes) {\n                var node = childNodes[indentLevel - 1];\n                if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n                    node.classList.add(\"ace_indent-guide-active\");\n            }\n        }\n    };\n    this.$renderHighlightIndentGuide = function () {\n        if (!this.$lines)\n            return;\n        var cells = this.$lines.cells;\n        this.$clearActiveIndentGuide();\n        var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n        if (indentLevel !== 0) {\n            if (this.$highlightIndentGuideMarker.dir === 1) {\n                for (var i = 0; i < cells.length; i++) {\n                    var cell = cells[i];\n                    if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n                        + 1) {\n                        if (cell.row >= this.$highlightIndentGuideMarker.end)\n                            break;\n                        this.$setIndentGuideActive(cell, indentLevel);\n                    }\n                }\n            }\n            else {\n                for (var i = cells.length - 1; i >= 0; i--) {\n                    var cell = cells[i];\n                    if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n                        if (cell.row <= this.$highlightIndentGuideMarker.end)\n                            break;\n                        this.$setIndentGuideActive(cell, indentLevel);\n                    }\n                }\n            }\n        }\n    };\n    this.$createLineElement = function (parent) {\n        var lineEl = this.dom.createElement(\"div\");\n        lineEl.className = \"ace_line\";\n        lineEl.style.height = this.config.lineHeight + \"px\";\n        return lineEl;\n    };\n    this.$renderWrappedLine = function (parent, tokens, splits) {\n        var chars = 0;\n        var split = 0;\n        var splitChars = splits[0];\n        var screenColumn = 0;\n        var lineEl = this.$createLineElement();\n        parent.appendChild(lineEl);\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            var value = token.value;\n            if (i == 0 && this.displayIndentGuides) {\n                chars = value.length;\n                value = this.renderIndentGuide(lineEl, value, splitChars);\n                if (!value)\n                    continue;\n                chars -= value.length;\n            }\n            if (chars + value.length < splitChars) {\n                screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n                chars += value.length;\n            }\n            else {\n                while (chars + value.length >= splitChars) {\n                    screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n                    value = value.substring(splitChars - chars);\n                    chars = splitChars;\n                    lineEl = this.$createLineElement();\n                    parent.appendChild(lineEl);\n                    lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n                    split++;\n                    screenColumn = 0;\n                    splitChars = splits[split] || Number.MAX_VALUE;\n                }\n                if (value.length != 0) {\n                    chars += value.length;\n                    screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n                }\n            }\n        }\n        if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n            this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n    };\n    this.$renderSimpleLine = function (parent, tokens) {\n        var screenColumn = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            var value = token.value;\n            if (i == 0 && this.displayIndentGuides) {\n                value = this.renderIndentGuide(parent, value);\n                if (!value)\n                    continue;\n            }\n            if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n                return this.$renderOverflowMessage(parent, screenColumn, token, value);\n            screenColumn = this.$renderToken(parent, screenColumn, token, value);\n        }\n    };\n    this.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n        token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n        var overflowEl = this.dom.createElement(\"span\");\n        overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n        overflowEl.textContent = hide ? \"<hide>\" : \"<click to see more...>\";\n        parent.appendChild(overflowEl);\n    };\n    this.$renderLine = function (parent, row, foldLine) {\n        if (!foldLine && foldLine != false)\n            foldLine = this.session.getFoldLine(row);\n        if (foldLine)\n            var tokens = this.$getFoldLineTokens(row, foldLine);\n        else\n            var tokens = this.session.getTokens(row);\n        var lastLineEl = parent;\n        if (tokens.length) {\n            var splits = this.session.getRowSplitData(row);\n            if (splits && splits.length) {\n                this.$renderWrappedLine(parent, tokens, splits);\n                var lastLineEl = parent.lastChild;\n            }\n            else {\n                var lastLineEl = parent;\n                if (this.$useLineGroups()) {\n                    lastLineEl = this.$createLineElement();\n                    parent.appendChild(lastLineEl);\n                }\n                this.$renderSimpleLine(lastLineEl, tokens);\n            }\n        }\n        else if (this.$useLineGroups()) {\n            lastLineEl = this.$createLineElement();\n            parent.appendChild(lastLineEl);\n        }\n        if (this.showEOL && lastLineEl) {\n            if (foldLine)\n                row = foldLine.end.row;\n            var invisibleEl = this.dom.createElement(\"span\");\n            invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n            invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n            lastLineEl.appendChild(invisibleEl);\n        }\n    };\n    this.$getFoldLineTokens = function (row, foldLine) {\n        var session = this.session;\n        var renderTokens = [];\n        function addTokens(tokens, from, to) {\n            var idx = 0, col = 0;\n            while ((col + tokens[idx].value.length) < from) {\n                col += tokens[idx].value.length;\n                idx++;\n                if (idx == tokens.length)\n                    return;\n            }\n            if (col != from) {\n                var value = tokens[idx].value.substring(from - col);\n                if (value.length > (to - from))\n                    value = value.substring(0, to - from);\n                renderTokens.push({\n                    type: tokens[idx].type,\n                    value: value\n                });\n                col = from + value.length;\n                idx += 1;\n            }\n            while (col < to && idx < tokens.length) {\n                var value = tokens[idx].value;\n                if (value.length + col > to) {\n                    renderTokens.push({\n                        type: tokens[idx].type,\n                        value: value.substring(0, to - col)\n                    });\n                }\n                else\n                    renderTokens.push(tokens[idx]);\n                col += value.length;\n                idx += 1;\n            }\n        }\n        var tokens = session.getTokens(row);\n        foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n            if (placeholder != null) {\n                renderTokens.push({\n                    type: \"fold\",\n                    value: placeholder\n                });\n            }\n            else {\n                if (isNewRow)\n                    tokens = session.getTokens(row);\n                if (tokens.length)\n                    addTokens(tokens, lastColumn, column);\n            }\n        }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n        return renderTokens;\n    };\n    this.$useLineGroups = function () {\n        return this.session.getUseWrapMode();\n    };\n    this.destroy = function () { };\n}).call(Text.prototype);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = function (parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_cursor-layer\";\n    parentEl.appendChild(this.element);\n    this.isVisible = false;\n    this.isBlinking = true;\n    this.blinkInterval = 1000;\n    this.smoothBlinking = false;\n    this.cursors = [];\n    this.cursor = this.addCursor();\n    dom.addCssClass(this.element, \"ace_hidden-cursors\");\n    this.$updateCursors = this.$updateOpacity.bind(this);\n};\n(function () {\n    this.$updateOpacity = function (val) {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--;)\n            dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n    };\n    this.$startCssAnimation = function () {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--;)\n            cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n        this.$isAnimating = true;\n        setTimeout(function () {\n            if (this.$isAnimating) {\n                dom.addCssClass(this.element, \"ace_animate-blinking\");\n            }\n        }.bind(this));\n    };\n    this.$stopCssAnimation = function () {\n        this.$isAnimating = false;\n        dom.removeCssClass(this.element, \"ace_animate-blinking\");\n    };\n    this.$padding = 0;\n    this.setPadding = function (padding) {\n        this.$padding = padding;\n    };\n    this.setSession = function (session) {\n        this.session = session;\n    };\n    this.setBlinking = function (blinking) {\n        if (blinking != this.isBlinking) {\n            this.isBlinking = blinking;\n            this.restartTimer();\n        }\n    };\n    this.setBlinkInterval = function (blinkInterval) {\n        if (blinkInterval != this.blinkInterval) {\n            this.blinkInterval = blinkInterval;\n            this.restartTimer();\n        }\n    };\n    this.setSmoothBlinking = function (smoothBlinking) {\n        if (smoothBlinking != this.smoothBlinking) {\n            this.smoothBlinking = smoothBlinking;\n            dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n            this.$updateCursors(true);\n            this.restartTimer();\n        }\n    };\n    this.addCursor = function () {\n        var el = dom.createElement(\"div\");\n        el.className = \"ace_cursor\";\n        this.element.appendChild(el);\n        this.cursors.push(el);\n        return el;\n    };\n    this.removeCursor = function () {\n        if (this.cursors.length > 1) {\n            var el = this.cursors.pop();\n            el.parentNode.removeChild(el);\n            return el;\n        }\n    };\n    this.hideCursor = function () {\n        this.isVisible = false;\n        dom.addCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n    this.showCursor = function () {\n        this.isVisible = true;\n        dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n    this.restartTimer = function () {\n        var update = this.$updateCursors;\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n        this.$stopCssAnimation();\n        if (this.smoothBlinking) {\n            this.$isSmoothBlinking = false;\n            dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n        }\n        update(true);\n        if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n            this.$stopCssAnimation();\n            return;\n        }\n        if (this.smoothBlinking) {\n            this.$isSmoothBlinking = true;\n            setTimeout(function () {\n                if (this.$isSmoothBlinking) {\n                    dom.addCssClass(this.element, \"ace_smooth-blinking\");\n                }\n            }.bind(this));\n        }\n        if (dom.HAS_CSS_ANIMATION) {\n            this.$startCssAnimation();\n        }\n        else {\n            var blink = function () {\n                this.timeoutId = setTimeout(function () {\n                    update(false);\n                }, 0.6 * this.blinkInterval);\n            }.bind(this);\n            this.intervalId = setInterval(function () {\n                update(true);\n                blink();\n            }, this.blinkInterval);\n            blink();\n        }\n    };\n    this.getPixelPosition = function (position, onScreen) {\n        if (!this.config || !this.session)\n            return { left: 0, top: 0 };\n        if (!position)\n            position = this.session.selection.getCursor();\n        var pos = this.session.documentToScreenPosition(position);\n        var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n            ? this.session.$bidiHandler.getPosLeft(pos.column)\n            : pos.column * this.config.characterWidth);\n        var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n            this.config.lineHeight;\n        return { left: cursorLeft, top: cursorTop };\n    };\n    this.isCursorInView = function (pixelPos, config) {\n        return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n    };\n    this.update = function (config) {\n        this.config = config;\n        var selections = this.session.$selectionMarkers;\n        var i = 0, cursorIndex = 0;\n        if (selections === undefined || selections.length === 0) {\n            selections = [{ cursor: null }];\n        }\n        for (var i = 0, n = selections.length; i < n; i++) {\n            var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n            if ((pixelPos.top > config.height + config.offset ||\n                pixelPos.top < 0) && i > 1) {\n                continue;\n            }\n            var element = this.cursors[cursorIndex++] || this.addCursor();\n            var style = element.style;\n            if (!this.drawCursor) {\n                if (!this.isCursorInView(pixelPos, config)) {\n                    dom.setStyle(style, \"display\", \"none\");\n                }\n                else {\n                    dom.setStyle(style, \"display\", \"block\");\n                    dom.translate(element, pixelPos.left, pixelPos.top);\n                    dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n                    dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n                }\n            }\n            else {\n                this.drawCursor(element, pixelPos, config, selections[i], this.session);\n            }\n        }\n        while (this.cursors.length > cursorIndex)\n            this.removeCursor();\n        var overwrite = this.session.getOverwrite();\n        this.$setOverwrite(overwrite);\n        this.$pixelPos = pixelPos;\n        this.restartTimer();\n    };\n    this.drawCursor = null;\n    this.$setOverwrite = function (overwrite) {\n        if (overwrite != this.overwrite) {\n            this.overwrite = overwrite;\n            if (overwrite)\n                dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n            else\n                dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n        }\n    };\n    this.destroy = function () {\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n    };\n}).call(Cursor.prototype);\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function (parent) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n    this.inner = dom.createElement(\"div\");\n    this.inner.className = \"ace_scrollbar-inner\";\n    this.inner.textContent = \"\\xa0\";\n    this.element.appendChild(this.inner);\n    parent.appendChild(this.element);\n    this.setVisible(false);\n    this.skipEvent = false;\n    event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n    event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setVisible = function (isVisible) {\n        this.element.style.display = isVisible ? \"\" : \"none\";\n        this.isVisible = isVisible;\n        this.coeff = 1;\n    };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function (parent, renderer) {\n    ScrollBar.call(this, parent);\n    this.scrollTop = 0;\n    this.scrollHeight = 0;\n    renderer.$scrollbarWidth =\n        this.width = dom.scrollbarWidth(parent.ownerDocument);\n    this.inner.style.width =\n        this.element.style.width = (this.width || 15) + 5 + \"px\";\n    this.$minWidth = 0;\n};\noop.inherits(VScrollBar, ScrollBar);\n(function () {\n    this.classSuffix = '-v';\n    this.onScroll = function () {\n        if (!this.skipEvent) {\n            this.scrollTop = this.element.scrollTop;\n            if (this.coeff != 1) {\n                var h = this.element.clientHeight / this.scrollHeight;\n                this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n            }\n            this._emit(\"scroll\", { data: this.scrollTop });\n        }\n        this.skipEvent = false;\n    };\n    this.getWidth = function () {\n        return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n    };\n    this.setHeight = function (height) {\n        this.element.style.height = height + \"px\";\n    };\n    this.setInnerHeight =\n        this.setScrollHeight = function (height) {\n            this.scrollHeight = height;\n            if (height > MAX_SCROLL_H) {\n                this.coeff = MAX_SCROLL_H / height;\n                height = MAX_SCROLL_H;\n            }\n            else if (this.coeff != 1) {\n                this.coeff = 1;\n            }\n            this.inner.style.height = height + \"px\";\n        };\n    this.setScrollTop = function (scrollTop) {\n        if (this.scrollTop != scrollTop) {\n            this.skipEvent = true;\n            this.scrollTop = scrollTop;\n            this.element.scrollTop = scrollTop * this.coeff;\n        }\n    };\n}).call(VScrollBar.prototype);\nvar HScrollBar = function (parent, renderer) {\n    ScrollBar.call(this, parent);\n    this.scrollLeft = 0;\n    this.height = renderer.$scrollbarWidth;\n    this.inner.style.height =\n        this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\noop.inherits(HScrollBar, ScrollBar);\n(function () {\n    this.classSuffix = '-h';\n    this.onScroll = function () {\n        if (!this.skipEvent) {\n            this.scrollLeft = this.element.scrollLeft;\n            this._emit(\"scroll\", { data: this.scrollLeft });\n        }\n        this.skipEvent = false;\n    };\n    this.getHeight = function () {\n        return this.isVisible ? this.height : 0;\n    };\n    this.setWidth = function (width) {\n        this.element.style.width = width + \"px\";\n    };\n    this.setInnerWidth = function (width) {\n        this.inner.style.width = width + \"px\";\n    };\n    this.setScrollWidth = function (width) {\n        this.inner.style.width = width + \"px\";\n    };\n    this.setScrollLeft = function (scrollLeft) {\n        if (this.scrollLeft != scrollLeft) {\n            this.skipEvent = true;\n            this.scrollLeft = this.element.scrollLeft = scrollLeft;\n        }\n    };\n}).call(HScrollBar.prototype);\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n  position: absolute;\\n  background: rgba(128, 128, 128, 0.6);\\n  -moz-box-sizing: border-box;\\n  box-sizing: border-box;\\n  border: 1px solid #bbb;\\n  border-radius: 2px;\\n  z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n  position: absolute;\\n  z-index: 6;\\n  background: none;\\n  overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n  z-index: 6;\\n  right: 0;\\n  top: 0;\\n  width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n  z-index: 8;\\n  right: 0;\\n  width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n  bottom: 0;\\n  left: 0;\\n  height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n  bottom: 0;\\n  height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n  z-index: 8;\\n  background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = function (parent) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_sb\" + this.classSuffix;\n    this.inner = dom.createElement(\"div\");\n    this.inner.className = \"\";\n    this.element.appendChild(this.inner);\n    this.VScrollWidth = 12;\n    this.HScrollHeight = 12;\n    parent.appendChild(this.element);\n    this.setVisible(false);\n    this.skipEvent = false;\n    event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setVisible = function (isVisible) {\n        this.element.style.display = isVisible ? \"\" : \"none\";\n        this.isVisible = isVisible;\n        this.coeff = 1;\n    };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function (parent, renderer) {\n    ScrollBar.call(this, parent);\n    this.scrollTop = 0;\n    this.scrollHeight = 0;\n    this.parent = parent;\n    this.width = this.VScrollWidth;\n    this.renderer = renderer;\n    this.inner.style.width = this.element.style.width = (this.width || 15) + \"px\";\n    this.$minWidth = 0;\n};\noop.inherits(VScrollBar, ScrollBar);\n(function () {\n    this.classSuffix = '-v';\n    oop.implement(this, EventEmitter);\n    this.onMouseDown = function (eType, e) {\n        if (eType !== \"mousedown\")\n            return;\n        if (event.getButton(e) !== 0 || e.detail === 2) {\n            return;\n        }\n        if (e.target === this.inner) {\n            var self = this;\n            var mousePageY = e.clientY;\n            var onMouseMove = function (e) {\n                mousePageY = e.clientY;\n            };\n            var onMouseUp = function () {\n                clearInterval(timerId);\n            };\n            var startY = e.clientY;\n            var startTop = this.thumbTop;\n            var onScrollInterval = function () {\n                if (mousePageY === undefined)\n                    return;\n                var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n                if (scrollTop === self.scrollTop)\n                    return;\n                self._emit(\"scroll\", { data: scrollTop });\n            };\n            event.capture(this.inner, onMouseMove, onMouseUp);\n            var timerId = setInterval(onScrollInterval, 20);\n            return event.preventDefault(e);\n        }\n        var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n        this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n        return event.preventDefault(e);\n    };\n    this.getHeight = function () {\n        return this.height;\n    };\n    this.scrollTopFromThumbTop = function (thumbTop) {\n        var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n        scrollTop = scrollTop >> 0;\n        if (scrollTop < 0) {\n            scrollTop = 0;\n        }\n        else if (scrollTop > this.pageHeight - this.viewHeight) {\n            scrollTop = this.pageHeight - this.viewHeight;\n        }\n        return scrollTop;\n    };\n    this.getWidth = function () {\n        return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n    };\n    this.setHeight = function (height) {\n        this.height = Math.max(0, height);\n        this.slideHeight = this.height;\n        this.viewHeight = this.height;\n        this.setScrollHeight(this.pageHeight, true);\n    };\n    this.setInnerHeight = this.setScrollHeight = function (height, force) {\n        if (this.pageHeight === height && !force)\n            return;\n        this.pageHeight = height;\n        this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n        if (this.thumbHeight > this.slideHeight)\n            this.thumbHeight = this.slideHeight;\n        if (this.thumbHeight < 15)\n            this.thumbHeight = 15;\n        this.inner.style.height = this.thumbHeight + \"px\";\n        if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n            this.scrollTop = (this.pageHeight - this.viewHeight);\n            if (this.scrollTop < 0)\n                this.scrollTop = 0;\n            this._emit(\"scroll\", { data: this.scrollTop });\n        }\n    };\n    this.setScrollTop = function (scrollTop) {\n        this.scrollTop = scrollTop;\n        if (scrollTop < 0)\n            scrollTop = 0;\n        this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n        this.inner.style.top = this.thumbTop + \"px\";\n    };\n}).call(VScrollBar.prototype);\nvar HScrollBar = function (parent, renderer) {\n    ScrollBar.call(this, parent);\n    this.scrollLeft = 0;\n    this.scrollWidth = 0;\n    this.height = this.HScrollHeight;\n    this.inner.style.height = this.element.style.height = (this.height || 12) + \"px\";\n    this.renderer = renderer;\n};\noop.inherits(HScrollBar, ScrollBar);\n(function () {\n    this.classSuffix = '-h';\n    oop.implement(this, EventEmitter);\n    this.onMouseDown = function (eType, e) {\n        if (eType !== \"mousedown\")\n            return;\n        if (event.getButton(e) !== 0 || e.detail === 2) {\n            return;\n        }\n        if (e.target === this.inner) {\n            var self = this;\n            var mousePageX = e.clientX;\n            var onMouseMove = function (e) {\n                mousePageX = e.clientX;\n            };\n            var onMouseUp = function () {\n                clearInterval(timerId);\n            };\n            var startX = e.clientX;\n            var startLeft = this.thumbLeft;\n            var onScrollInterval = function () {\n                if (mousePageX === undefined)\n                    return;\n                var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n                if (scrollLeft === self.scrollLeft)\n                    return;\n                self._emit(\"scroll\", { data: scrollLeft });\n            };\n            event.capture(this.inner, onMouseMove, onMouseUp);\n            var timerId = setInterval(onScrollInterval, 20);\n            return event.preventDefault(e);\n        }\n        var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n        this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n        return event.preventDefault(e);\n    };\n    this.getHeight = function () {\n        return this.isVisible ? this.height : 0;\n    };\n    this.scrollLeftFromThumbLeft = function (thumbLeft) {\n        var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n        scrollLeft = scrollLeft >> 0;\n        if (scrollLeft < 0) {\n            scrollLeft = 0;\n        }\n        else if (scrollLeft > this.pageWidth - this.viewWidth) {\n            scrollLeft = this.pageWidth - this.viewWidth;\n        }\n        return scrollLeft;\n    };\n    this.setWidth = function (width) {\n        this.width = Math.max(0, width);\n        this.element.style.width = this.width + \"px\";\n        this.slideWidth = this.width;\n        this.viewWidth = this.width;\n        this.setScrollWidth(this.pageWidth, true);\n    };\n    this.setInnerWidth = this.setScrollWidth = function (width, force) {\n        if (this.pageWidth === width && !force)\n            return;\n        this.pageWidth = width;\n        this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n        if (this.thumbWidth > this.slideWidth)\n            this.thumbWidth = this.slideWidth;\n        if (this.thumbWidth < 15)\n            this.thumbWidth = 15;\n        this.inner.style.width = this.thumbWidth + \"px\";\n        if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n            this.scrollLeft = (this.pageWidth - this.viewWidth);\n            if (this.scrollLeft < 0)\n                this.scrollLeft = 0;\n            this._emit(\"scroll\", { data: this.scrollLeft });\n        }\n    };\n    this.setScrollLeft = function (scrollLeft) {\n        this.scrollLeft = scrollLeft;\n        if (scrollLeft < 0)\n            scrollLeft = 0;\n        this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n        this.inner.style.left = (this.thumbLeft) + \"px\";\n    };\n}).call(HScrollBar.prototype);\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = function (onRender, win) {\n    this.onRender = onRender;\n    this.pending = false;\n    this.changes = 0;\n    this.$recursionLimit = 2;\n    this.window = win || window;\n    var _self = this;\n    this._flush = function (ts) {\n        _self.pending = false;\n        var changes = _self.changes;\n        if (changes) {\n            event.blockIdle(100);\n            _self.changes = 0;\n            _self.onRender(changes);\n        }\n        if (_self.changes) {\n            if (_self.$recursionLimit-- < 0)\n                return;\n            _self.schedule();\n        }\n        else {\n            _self.$recursionLimit = 2;\n        }\n    };\n};\n(function () {\n    this.schedule = function (change) {\n        this.changes = this.changes | change;\n        if (this.changes && !this.pending) {\n            event.nextFrame(this._flush);\n            this.pending = true;\n        }\n    };\n    this.clear = function (change) {\n        var changes = this.changes;\n        this.changes = 0;\n        return changes;\n    };\n}).call(RenderLoop.prototype);\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 256;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = exports.FontMetrics = function (parentEl) {\n    this.el = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.el.style, true);\n    this.$main = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.$main.style);\n    this.$measureNode = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.$measureNode.style);\n    this.el.appendChild(this.$main);\n    this.el.appendChild(this.$measureNode);\n    parentEl.appendChild(this.el);\n    this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n    this.$characterSize = { width: 0, height: 0 };\n    if (USE_OBSERVER)\n        this.$addObserver();\n    else\n        this.checkForSizeChanges();\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.$characterSize = { width: 0, height: 0 };\n    this.$setMeasureNodeStyles = function (style, isRoot) {\n        style.width = style.height = \"auto\";\n        style.left = style.top = \"0px\";\n        style.visibility = \"hidden\";\n        style.position = \"absolute\";\n        style.whiteSpace = \"pre\";\n        if (useragent.isIE < 8) {\n            style[\"font-family\"] = \"inherit\";\n        }\n        else {\n            style.font = \"inherit\";\n        }\n        style.overflow = isRoot ? \"hidden\" : \"visible\";\n    };\n    this.checkForSizeChanges = function (size) {\n        if (size === undefined)\n            size = this.$measureSizes();\n        if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n            this.$measureNode.style.fontWeight = \"bold\";\n            var boldSize = this.$measureSizes();\n            this.$measureNode.style.fontWeight = \"\";\n            this.$characterSize = size;\n            this.charSizes = Object.create(null);\n            this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n            this._emit(\"changeCharacterSize\", { data: size });\n        }\n    };\n    this.$addObserver = function () {\n        var self = this;\n        this.$observer = new window.ResizeObserver(function (e) {\n            self.checkForSizeChanges();\n        });\n        this.$observer.observe(this.$measureNode);\n    };\n    this.$pollSizeChanges = function () {\n        if (this.$pollSizeChangesTimer || this.$observer)\n            return this.$pollSizeChangesTimer;\n        var self = this;\n        return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n            self.checkForSizeChanges();\n            event.onIdle(cb, 500);\n        }, 500);\n    };\n    this.setPolling = function (val) {\n        if (val) {\n            this.$pollSizeChanges();\n        }\n        else if (this.$pollSizeChangesTimer) {\n            clearInterval(this.$pollSizeChangesTimer);\n            this.$pollSizeChangesTimer = 0;\n        }\n    };\n    this.$measureSizes = function (node) {\n        var size = {\n            height: (node || this.$measureNode).clientHeight,\n            width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n        };\n        if (size.width === 0 || size.height === 0)\n            return null;\n        return size;\n    };\n    this.$measureCharWidth = function (ch) {\n        this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n        var rect = this.$main.getBoundingClientRect();\n        return rect.width / CHAR_COUNT;\n    };\n    this.getCharacterWidth = function (ch) {\n        var w = this.charSizes[ch];\n        if (w === undefined) {\n            w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n        }\n        return w;\n    };\n    this.destroy = function () {\n        clearInterval(this.$pollSizeChangesTimer);\n        if (this.$observer)\n            this.$observer.disconnect();\n        if (this.el && this.el.parentNode)\n            this.el.parentNode.removeChild(this.el);\n    };\n    this.$getZoom = function getZoom(element) {\n        if (!element || !element.parentElement)\n            return 1;\n        return (window.getComputedStyle(element).zoom || 1) * getZoom(element.parentElement);\n    };\n    this.$initTransformMeasureNodes = function () {\n        var t = function (t, l) {\n            return [\"div\", {\n                    style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n                }];\n        };\n        this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n    };\n    this.transformCoordinates = function (clientPos, elPos) {\n        if (clientPos) {\n            var zoom = this.$getZoom(this.el);\n            clientPos = mul(1 / zoom, clientPos);\n        }\n        function solve(l1, l2, r) {\n            var det = l1[1] * l2[0] - l1[0] * l2[1];\n            return [\n                (-l2[1] * r[0] + l2[0] * r[1]) / det,\n                (+l1[1] * r[0] - l1[0] * r[1]) / det\n            ];\n        }\n        function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n        function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n        function mul(a, b) { return [a * b[0], a * b[1]]; }\n        if (!this.els)\n            this.$initTransformMeasureNodes();\n        function p(el) {\n            var r = el.getBoundingClientRect();\n            return [r.left, r.top];\n        }\n        var a = p(this.els[0]);\n        var b = p(this.els[1]);\n        var c = p(this.els[2]);\n        var d = p(this.els[3]);\n        var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n        var m1 = mul(1 + h[0], sub(b, a));\n        var m2 = mul(1 + h[1], sub(c, a));\n        if (elPos) {\n            var x = elPos;\n            var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n            var ut = add(mul(x[0], m1), mul(x[1], m2));\n            return add(mul(1 / k / L, ut), a);\n        }\n        var u = sub(clientPos, a);\n        var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n        return mul(L, f);\n    };\n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/css/editor.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"/*\\nstyles = []\\nfor (var i = 1; i < 16; i++) {\\n    styles.push(\\\".ace_br\\\" + i + \\\"{\\\" + (\\n        [\\\"top-left\\\", \\\"top-right\\\", \\\"bottom-right\\\", \\\"bottom-left\\\"]\\n    ).map(function(x, j) {\\n        return i & (1<<j) ? \\\"border-\\\" + x + \\\"-radius: 3px;\\\" : \\\"\\\" \\n    }).filter(Boolean).join(\\\" \\\") + \\\"}\\\")\\n}\\nstyles.join(\\\"\\\\n\\\")\\n*/\\n.ace_br1 {border-top-left-radius    : 3px;}\\n.ace_br2 {border-top-right-radius   : 3px;}\\n.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}\\n.ace_br4 {border-bottom-right-radius: 3px;}\\n.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}\\n.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}\\n.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}\\n.ace_br8 {border-bottom-left-radius : 3px;}\\n.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}\\n.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}\\n.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\n.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\n.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\n.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n\\n\\n.ace_editor {\\n    position: relative;\\n    overflow: hidden;\\n    padding: 0;\\n    font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\n    direction: ltr;\\n    text-align: left;\\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n}\\n\\n.ace_scroller {\\n    position: absolute;\\n    overflow: hidden;\\n    top: 0;\\n    bottom: 0;\\n    background-color: inherit;\\n    -ms-user-select: none;\\n    -moz-user-select: none;\\n    -webkit-user-select: none;\\n    user-select: none;\\n    cursor: text;\\n}\\n\\n.ace_content {\\n    position: absolute;\\n    box-sizing: border-box;\\n    min-width: 100%;\\n    contain: style size layout;\\n    font-variant-ligatures: no-common-ligatures;\\n}\\n\\n.ace_dragging .ace_scroller:before{\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n    bottom: 0;\\n    content: '';\\n    background: rgba(250, 250, 250, 0.01);\\n    z-index: 1000;\\n}\\n.ace_dragging.ace_dark .ace_scroller:before{\\n    background: rgba(0, 0, 0, 0.01);\\n}\\n\\n.ace_gutter {\\n    position: absolute;\\n    overflow : hidden;\\n    width: auto;\\n    top: 0;\\n    bottom: 0;\\n    left: 0;\\n    cursor: default;\\n    z-index: 4;\\n    -ms-user-select: none;\\n    -moz-user-select: none;\\n    -webkit-user-select: none;\\n    user-select: none;\\n    contain: style size layout;\\n}\\n\\n.ace_gutter-active-line {\\n    position: absolute;\\n    left: 0;\\n    right: 0;\\n}\\n\\n.ace_scroller.ace_scroll-left {\\n    box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\n}\\n\\n.ace_gutter-cell {\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n    padding-left: 19px;\\n    padding-right: 6px;\\n    background-repeat: no-repeat;\\n}\\n\\n.ace_gutter-cell.ace_error {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\n    background-repeat: no-repeat;\\n    background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_warning {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\n    background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_info {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\n    background-position: 2px center;\\n}\\n.ace_dark .ace_gutter-cell.ace_info {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_scrollbar {\\n    contain: strict;\\n    position: absolute;\\n    right: 0;\\n    bottom: 0;\\n    z-index: 6;\\n}\\n\\n.ace_scrollbar-inner {\\n    position: absolute;\\n    cursor: text;\\n    left: 0;\\n    top: 0;\\n}\\n\\n.ace_scrollbar-v{\\n    overflow-x: hidden;\\n    overflow-y: scroll;\\n    top: 0;\\n}\\n\\n.ace_scrollbar-h {\\n    overflow-x: scroll;\\n    overflow-y: hidden;\\n    left: 0;\\n}\\n\\n.ace_print-margin {\\n    position: absolute;\\n    height: 100%;\\n}\\n\\n.ace_text-input {\\n    position: absolute;\\n    z-index: 0;\\n    width: 0.5em;\\n    height: 1em;\\n    opacity: 0;\\n    background: transparent;\\n    -moz-appearance: none;\\n    appearance: none;\\n    border: none;\\n    resize: none;\\n    outline: none;\\n    overflow: hidden;\\n    font: inherit;\\n    padding: 0 1px;\\n    margin: 0 -1px;\\n    contain: strict;\\n    -ms-user-select: text;\\n    -moz-user-select: text;\\n    -webkit-user-select: text;\\n    user-select: text;\\n    /*with `pre-line` chrome inserts &nbsp; instead of space*/\\n    white-space: pre!important;\\n}\\n.ace_text-input.ace_composition {\\n    background: transparent;\\n    color: inherit;\\n    z-index: 1000;\\n    opacity: 1;\\n}\\n.ace_composition_placeholder { color: transparent }\\n.ace_composition_marker { \\n    border-bottom: 1px solid;\\n    position: absolute;\\n    border-radius: 0;\\n    margin-top: 1px;\\n}\\n\\n[ace_nocontext=true] {\\n    transform: none!important;\\n    filter: none!important;\\n    clip-path: none!important;\\n    mask : none!important;\\n    contain: none!important;\\n    perspective: none!important;\\n    mix-blend-mode: initial!important;\\n    z-index: auto;\\n}\\n\\n.ace_layer {\\n    z-index: 1;\\n    position: absolute;\\n    overflow: hidden;\\n    /* workaround for chrome bug https://github.com/ajaxorg/ace/issues/2312*/\\n    word-wrap: normal;\\n    white-space: pre;\\n    height: 100%;\\n    width: 100%;\\n    box-sizing: border-box;\\n    /* setting pointer-events: auto; on node under the mouse, which changes\\n        during scroll, will break mouse wheel scrolling in Safari */\\n    pointer-events: none;\\n}\\n\\n.ace_gutter-layer {\\n    position: relative;\\n    width: auto;\\n    text-align: right;\\n    pointer-events: auto;\\n    height: 1000000px;\\n    contain: style size layout;\\n}\\n\\n.ace_text-layer {\\n    font: inherit !important;\\n    position: absolute;\\n    height: 1000000px;\\n    width: 1000000px;\\n    contain: style size layout;\\n}\\n\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\n    contain: style size layout;\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n    contain: strict;\\n    will-change: transform;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n    contain: strict;\\n}\\n\\n.ace_cjk {\\n    display: inline-block;\\n    text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n    z-index: 4;\\n}\\n\\n.ace_cursor {\\n    z-index: 4;\\n    position: absolute;\\n    box-sizing: border-box;\\n    border-left: 2px solid;\\n    /* workaround for smooth cursor repaintng whole screen in chrome */\\n    transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n    border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n    border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n    border-left-width: 0;\\n    border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n    opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n    opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n    transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n    animation-duration: 1000ms;\\n    animation-timing-function: step-end;\\n    animation-name: blink-ace-animate;\\n    animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n    animation-duration: 1000ms;\\n    animation-timing-function: ease-in-out;\\n    animation-name: blink-ace-animate-smooth;\\n}\\n    \\n@keyframes blink-ace-animate {\\n    from, to { opacity: 1; }\\n    60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n    from, to { opacity: 1; }\\n    45% { opacity: 1; }\\n    60% { opacity: 0; }\\n    85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n    position: absolute;\\n    z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n    position: absolute;\\n    z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n    position: absolute;\\n    z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n    position: absolute;\\n    border-bottom: 1px solid #DE5555;\\n    border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n    position: absolute;\\n    z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n    position: absolute;\\n    z-index: 4;\\n    box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n    box-sizing: border-box;\\n\\n    display: inline-block;\\n    height: 11px;\\n    margin-top: -2px;\\n    vertical-align: middle;\\n\\n    background-image:\\n        url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n        url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n    background-repeat: no-repeat, repeat-x;\\n    background-position: center center, top left;\\n    color: transparent;\\n\\n    border: 1px solid black;\\n    border-radius: 2px;\\n\\n    cursor: pointer;\\n    pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n    background-image:\\n        url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n        url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n    background-color: #FFF;\\n    background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\n    border: 1px solid gray;\\n    border-radius: 1px;\\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n    color: black;\\n    max-width: 100%;\\n    padding: 3px 4px;\\n    position: fixed;\\n    z-index: 999999;\\n    box-sizing: border-box;\\n    cursor: default;\\n    white-space: pre;\\n    word-wrap: break-word;\\n    line-height: normal;\\n    font-style: normal;\\n    font-weight: normal;\\n    letter-spacing: normal;\\n    pointer-events: none;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell {\\n    padding-right: 13px;\\n}\\n\\n.ace_fold-widget {\\n    box-sizing: border-box;\\n\\n    margin: 0 -12px 0 1px;\\n    display: none;\\n    width: 11px;\\n    vertical-align: top;\\n\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n    background-repeat: no-repeat;\\n    background-position: center;\\n\\n    border-radius: 3px;\\n    \\n    border: 1px solid transparent;\\n    cursor: pointer;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n    display: inline-block;   \\n}\\n\\n.ace_fold-widget.ace_end {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n    border: 1px solid rgba(0, 0, 0, 0.3);\\n    background-color: rgba(255, 255, 255, 0.2);\\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n    border: 1px solid rgba(0, 0, 0, 0.4);\\n    background-color: rgba(0, 0, 0, 0.05);\\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n    background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n    box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n    border: 1px solid lightgray;\\n    display: inline-block;\\n    margin: -1px 8px;\\n    padding: 0 5px;\\n    pointer-events: auto;\\n    cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n    border-color: gray;\\n    background: rgba(200,200,200,0.2);\\n    display: inline-block;\\n    pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n    background-color: #FFB4B4;\\n    border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n    transition: opacity 0.4s ease 0.05s;\\n    opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n    transition: opacity 0.05s ease 0.05s;\\n    opacity:1;\\n}\\n\\n.ace_underline {\\n    text-decoration: underline;\\n}\\n\\n.ace_bold {\\n    font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n    font-weight: normal;\\n}\\n\\n.ace_italic {\\n    font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n    background-color: rgba(255, 0, 0,0.2);\\n    position: absolute;\\n    z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n    background-color: rgba(255, 255, 0,0.2);\\n    position: absolute;\\n    z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n    position: absolute;\\n    line-height: 1.5;\\n    border-radius: 4px;\\n    -ms-user-select: none;\\n    -moz-user-select: none;\\n    -webkit-user-select: none;\\n    user-select: none;\\n    background: white;\\n    box-shadow: 1px 3px 2px grey;\\n    border: 1px solid #dcdcdc;\\n    color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n    background: #333;\\n    color: #ccc;\\n    box-shadow: 1px 3px 2px grey;\\n    border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n    padding: 2px;\\n    cursor: pointer;\\n    overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n    background-color: #eee;\\n    opacity:1;\\n}\\n.ace_mobile-button:active {\\n    background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n    font-family: arial;\\n    transform: scale(0.9);\\n    transform-origin: left;\\n    white-space: pre;\\n    opacity: 0.7;\\n    margin: 0 10px;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = function (parent, renderer) {\n    this.canvas = dom.createElement(\"canvas\");\n    this.renderer = renderer;\n    this.pixelRatio = 1;\n    this.maxHeight = renderer.layerConfig.maxHeight;\n    this.lineHeight = renderer.layerConfig.lineHeight;\n    this.canvasHeight = parent.parent.scrollHeight;\n    this.heightRatio = this.canvasHeight / this.maxHeight;\n    this.canvasWidth = parent.width;\n    this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n    this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n    this.canvas.width = this.canvasWidth;\n    this.canvas.height = this.canvasHeight;\n    this.canvas.style.top = 0 + \"px\";\n    this.canvas.style.right = 0 + \"px\";\n    this.canvas.style.zIndex = 7 + \"px\";\n    this.canvas.style.position = \"absolute\";\n    this.colors = {};\n    this.colors.dark = {\n        \"error\": \"rgba(255, 18, 18, 1)\",\n        \"warning\": \"rgba(18, 136, 18, 1)\",\n        \"info\": \"rgba(18, 18, 136, 1)\"\n    };\n    this.colors.light = {\n        \"error\": \"rgb(255,51,51)\",\n        \"warning\": \"rgb(32,133,72)\",\n        \"info\": \"rgb(35,68,138)\"\n    };\n    parent.element.appendChild(this.canvas);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.$updateDecorators = function (config) {\n        var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n        if (config) {\n            this.maxHeight = config.maxHeight;\n            this.lineHeight = config.lineHeight;\n            this.canvasHeight = config.height;\n            var allLineHeight = (config.lastRow + 1) * this.lineHeight;\n            if (allLineHeight < this.canvasHeight) {\n                this.heightRatio = 1;\n            }\n            else {\n                this.heightRatio = this.canvasHeight / this.maxHeight;\n            }\n        }\n        var ctx = this.canvas.getContext(\"2d\");\n        function compare(a, b) {\n            if (a.priority < b.priority)\n                return -1;\n            if (a.priority > b.priority)\n                return 1;\n            return 0;\n        }\n        var annotations = this.renderer.session.$annotations;\n        ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n        if (annotations) {\n            var priorities = {\n                \"info\": 1,\n                \"warning\": 2,\n                \"error\": 3\n            };\n            annotations.forEach(function (item) {\n                item.priority = priorities[item.type] || null;\n            });\n            annotations = annotations.sort(compare);\n            var foldData = this.renderer.session.$foldData;\n            for (var i = 0; i < annotations.length; i++) {\n                var row = annotations[i].row;\n                var compensateFold = this.compensateFoldRows(row, foldData);\n                var currentY = Math.round((row - compensateFold) * this.lineHeight * this.heightRatio);\n                var y1 = Math.round(((row - compensateFold) * this.lineHeight * this.heightRatio));\n                var y2 = Math.round((((row - compensateFold) * this.lineHeight + this.lineHeight) * this.heightRatio));\n                var height = y2 - y1;\n                if (height < this.minDecorationHeight) {\n                    var yCenter = ((y1 + y2) / 2) | 0;\n                    if (yCenter < this.halfMinDecorationHeight) {\n                        yCenter = this.halfMinDecorationHeight;\n                    }\n                    else if (yCenter + this.halfMinDecorationHeight > this.canvasHeight) {\n                        yCenter = this.canvasHeight - this.halfMinDecorationHeight;\n                    }\n                    y1 = Math.round(yCenter - this.halfMinDecorationHeight);\n                    y2 = Math.round(yCenter + this.halfMinDecorationHeight);\n                }\n                ctx.fillStyle = colors[annotations[i].type] || null;\n                ctx.fillRect(0, currentY, this.canvasWidth, y2 - y1);\n            }\n        }\n        var cursor = this.renderer.session.selection.getCursor();\n        if (cursor) {\n            var compensateFold = this.compensateFoldRows(cursor.row, foldData);\n            var currentY = Math.round((cursor.row - compensateFold) * this.lineHeight * this.heightRatio);\n            ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n            ctx.fillRect(0, currentY, this.canvasWidth, 2);\n        }\n    };\n    this.compensateFoldRows = function (row, foldData) {\n        var compensateFold = 0;\n        if (foldData && foldData.length > 0) {\n            for (var j = 0; j < foldData.length; j++) {\n                if (row > foldData[j].start.row && row < foldData[j].end.row) {\n                    compensateFold += row - foldData[j].start.row;\n                }\n                else if (row >= foldData[j].end.row) {\n                    compensateFold += foldData[j].end.row - foldData[j].start.row;\n                }\n            }\n        }\n        return compensateFold;\n    };\n}.call(Decorator.prototype));\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor.css\",\"ace/layer/decorators\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor.css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\nvar HIDE_TEXTAREA = useragent.isIE;\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = function (container, theme) {\n    var _self = this;\n    this.container = container || dom.createElement(\"div\");\n    dom.addCssClass(this.container, \"ace_editor\");\n    if (dom.HI_DPI)\n        dom.addCssClass(this.container, \"ace_hidpi\");\n    this.setTheme(theme);\n    if (config.get(\"useStrictCSP\") == null)\n        config.set(\"useStrictCSP\", false);\n    this.$gutter = dom.createElement(\"div\");\n    this.$gutter.className = \"ace_gutter\";\n    this.container.appendChild(this.$gutter);\n    this.$gutter.setAttribute(\"aria-hidden\", true);\n    this.scroller = dom.createElement(\"div\");\n    this.scroller.className = \"ace_scroller\";\n    this.container.appendChild(this.scroller);\n    this.content = dom.createElement(\"div\");\n    this.content.className = \"ace_content\";\n    this.scroller.appendChild(this.content);\n    this.$gutterLayer = new GutterLayer(this.$gutter);\n    this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n    this.$markerBack = new MarkerLayer(this.content);\n    var textLayer = this.$textLayer = new TextLayer(this.content);\n    this.canvas = textLayer.element;\n    this.$markerFront = new MarkerLayer(this.content);\n    this.$cursorLayer = new CursorLayer(this.content);\n    this.$horizScroll = false;\n    this.$vScroll = false;\n    this.scrollBar =\n        this.scrollBarV = new VScrollBar(this.container, this);\n    this.scrollBarH = new HScrollBar(this.container, this);\n    this.scrollBarV.on(\"scroll\", function (e) {\n        if (!_self.$scrollAnimation)\n            _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n    });\n    this.scrollBarH.on(\"scroll\", function (e) {\n        if (!_self.$scrollAnimation)\n            _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n    });\n    this.scrollTop = 0;\n    this.scrollLeft = 0;\n    this.cursorPos = {\n        row: 0,\n        column: 0\n    };\n    this.$fontMetrics = new FontMetrics(this.container);\n    this.$textLayer.$setFontMetrics(this.$fontMetrics);\n    this.$textLayer.on(\"changeCharacterSize\", function (e) {\n        _self.updateCharacterSize();\n        _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n        _self._signal(\"changeCharacterSize\", e);\n    });\n    this.$size = {\n        width: 0,\n        height: 0,\n        scrollerHeight: 0,\n        scrollerWidth: 0,\n        $dirty: true\n    };\n    this.layerConfig = {\n        width: 1,\n        padding: 0,\n        firstRow: 0,\n        firstRowScreen: 0,\n        lastRow: 0,\n        lineHeight: 0,\n        characterWidth: 0,\n        minHeight: 1,\n        maxHeight: 1,\n        offset: 0,\n        height: 1,\n        gutterOffset: 1\n    };\n    this.scrollMargin = {\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0,\n        v: 0,\n        h: 0\n    };\n    this.margin = {\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0,\n        v: 0,\n        h: 0\n    };\n    this.$keepTextAreaAtCursor = !useragent.isIOS;\n    this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n    this.$loop.schedule(this.CHANGE_FULL);\n    this.updateCharacterSize();\n    this.setPadding(4);\n    config.resetOptions(this);\n    config._signal(\"renderer\", this);\n};\n(function () {\n    this.CHANGE_CURSOR = 1;\n    this.CHANGE_MARKER = 2;\n    this.CHANGE_GUTTER = 4;\n    this.CHANGE_SCROLL = 8;\n    this.CHANGE_LINES = 16;\n    this.CHANGE_TEXT = 32;\n    this.CHANGE_SIZE = 64;\n    this.CHANGE_MARKER_BACK = 128;\n    this.CHANGE_MARKER_FRONT = 256;\n    this.CHANGE_FULL = 512;\n    this.CHANGE_H_SCROLL = 1024;\n    oop.implement(this, EventEmitter);\n    this.updateCharacterSize = function () {\n        if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n            this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n            this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n        }\n        this.layerConfig.characterWidth =\n            this.characterWidth = this.$textLayer.getCharacterWidth();\n        this.layerConfig.lineHeight =\n            this.lineHeight = this.$textLayer.getLineHeight();\n        this.$updatePrintMargin();\n        dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n    };\n    this.setSession = function (session) {\n        if (this.session)\n            this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n        this.session = session;\n        if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n            session.setScrollTop(-this.scrollMargin.top);\n        this.$cursorLayer.setSession(session);\n        this.$markerBack.setSession(session);\n        this.$markerFront.setSession(session);\n        this.$gutterLayer.setSession(session);\n        this.$textLayer.setSession(session);\n        if (!session)\n            return;\n        this.$loop.schedule(this.CHANGE_FULL);\n        this.session.$setFontMetrics(this.$fontMetrics);\n        this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n        this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n        this.onChangeNewLineMode();\n        this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n    };\n    this.updateLines = function (firstRow, lastRow, force) {\n        if (lastRow === undefined)\n            lastRow = Infinity;\n        if (!this.$changedLines) {\n            this.$changedLines = {\n                firstRow: firstRow,\n                lastRow: lastRow\n            };\n        }\n        else {\n            if (this.$changedLines.firstRow > firstRow)\n                this.$changedLines.firstRow = firstRow;\n            if (this.$changedLines.lastRow < lastRow)\n                this.$changedLines.lastRow = lastRow;\n        }\n        if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n            if (force)\n                this.$changedLines.lastRow = this.layerConfig.lastRow;\n            else\n                return;\n        }\n        if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n            return;\n        this.$loop.schedule(this.CHANGE_LINES);\n    };\n    this.onChangeNewLineMode = function () {\n        this.$loop.schedule(this.CHANGE_TEXT);\n        this.$textLayer.$updateEolChar();\n        this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n    };\n    this.onChangeTabSize = function () {\n        this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n        this.$textLayer.onChangeTabSize();\n    };\n    this.updateText = function () {\n        this.$loop.schedule(this.CHANGE_TEXT);\n    };\n    this.updateFull = function (force) {\n        if (force)\n            this.$renderChanges(this.CHANGE_FULL, true);\n        else\n            this.$loop.schedule(this.CHANGE_FULL);\n    };\n    this.updateFontSize = function () {\n        this.$textLayer.checkForSizeChanges();\n    };\n    this.$changes = 0;\n    this.$updateSizeAsync = function () {\n        if (this.$loop.pending)\n            this.$size.$dirty = true;\n        else\n            this.onResize();\n    };\n    this.onResize = function (force, gutterWidth, width, height) {\n        if (this.resizing > 2)\n            return;\n        else if (this.resizing > 0)\n            this.resizing++;\n        else\n            this.resizing = force ? 1 : 0;\n        var el = this.container;\n        if (!height)\n            height = el.clientHeight || el.scrollHeight;\n        if (!width)\n            width = el.clientWidth || el.scrollWidth;\n        var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n        if (!this.$size.scrollerHeight || (!width && !height))\n            return this.resizing = 0;\n        if (force)\n            this.$gutterLayer.$padding = null;\n        if (force)\n            this.$renderChanges(changes | this.$changes, true);\n        else\n            this.$loop.schedule(changes | this.$changes);\n        if (this.resizing)\n            this.resizing = 0;\n        this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n        if (this.$customScrollbar) {\n            this.$updateCustomScrollbar(true);\n        }\n    };\n    this.$updateCachedSize = function (force, gutterWidth, width, height) {\n        height -= (this.$extraHeight || 0);\n        var changes = 0;\n        var size = this.$size;\n        var oldSize = {\n            width: size.width,\n            height: size.height,\n            scrollerHeight: size.scrollerHeight,\n            scrollerWidth: size.scrollerWidth\n        };\n        if (height && (force || size.height != height)) {\n            size.height = height;\n            changes |= this.CHANGE_SIZE;\n            size.scrollerHeight = size.height;\n            if (this.$horizScroll)\n                size.scrollerHeight -= this.scrollBarH.getHeight();\n            this.scrollBarV.setHeight(size.scrollerHeight);\n            this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n            changes = changes | this.CHANGE_SCROLL;\n        }\n        if (width && (force || size.width != width)) {\n            changes |= this.CHANGE_SIZE;\n            size.width = width;\n            if (gutterWidth == null)\n                gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n            this.gutterWidth = gutterWidth;\n            dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n            dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n            size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n            dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n            var right = this.scrollBarV.getWidth() + \"px\";\n            dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n            dom.setStyle(this.scroller.style, \"right\", right);\n            dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n            this.scrollBarH.setWidth(size.scrollerWidth);\n            if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n                changes |= this.CHANGE_FULL;\n            }\n        }\n        size.$dirty = !width || !height;\n        if (changes)\n            this._signal(\"resize\", oldSize);\n        return changes;\n    };\n    this.onGutterResize = function (width) {\n        var gutterWidth = this.$showGutter ? width : 0;\n        if (gutterWidth != this.gutterWidth)\n            this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n        if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        }\n        else if (this.$size.$dirty) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        }\n        else {\n            this.$computeLayerConfig();\n        }\n    };\n    this.adjustWrapLimit = function () {\n        var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n        var limit = Math.floor(availableWidth / this.characterWidth);\n        return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n    };\n    this.setAnimatedScroll = function (shouldAnimate) {\n        this.setOption(\"animatedScroll\", shouldAnimate);\n    };\n    this.getAnimatedScroll = function () {\n        return this.$animatedScroll;\n    };\n    this.setShowInvisibles = function (showInvisibles) {\n        this.setOption(\"showInvisibles\", showInvisibles);\n        this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n    };\n    this.getShowInvisibles = function () {\n        return this.getOption(\"showInvisibles\");\n    };\n    this.getDisplayIndentGuides = function () {\n        return this.getOption(\"displayIndentGuides\");\n    };\n    this.setDisplayIndentGuides = function (display) {\n        this.setOption(\"displayIndentGuides\", display);\n    };\n    this.getHighlightIndentGuides = function () {\n        return this.getOption(\"highlightIndentGuides\");\n    };\n    this.setHighlightIndentGuides = function (highlight) {\n        this.setOption(\"highlightIndentGuides\", highlight);\n    };\n    this.setShowPrintMargin = function (showPrintMargin) {\n        this.setOption(\"showPrintMargin\", showPrintMargin);\n    };\n    this.getShowPrintMargin = function () {\n        return this.getOption(\"showPrintMargin\");\n    };\n    this.setPrintMarginColumn = function (showPrintMargin) {\n        this.setOption(\"printMarginColumn\", showPrintMargin);\n    };\n    this.getPrintMarginColumn = function () {\n        return this.getOption(\"printMarginColumn\");\n    };\n    this.getShowGutter = function () {\n        return this.getOption(\"showGutter\");\n    };\n    this.setShowGutter = function (show) {\n        return this.setOption(\"showGutter\", show);\n    };\n    this.getFadeFoldWidgets = function () {\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n    this.setFadeFoldWidgets = function (show) {\n        this.setOption(\"fadeFoldWidgets\", show);\n    };\n    this.setHighlightGutterLine = function (shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n    this.getHighlightGutterLine = function () {\n        return this.getOption(\"highlightGutterLine\");\n    };\n    this.$updatePrintMargin = function () {\n        if (!this.$showPrintMargin && !this.$printMarginEl)\n            return;\n        if (!this.$printMarginEl) {\n            var containerEl = dom.createElement(\"div\");\n            containerEl.className = \"ace_layer ace_print-margin-layer\";\n            this.$printMarginEl = dom.createElement(\"div\");\n            this.$printMarginEl.className = \"ace_print-margin\";\n            containerEl.appendChild(this.$printMarginEl);\n            this.content.insertBefore(containerEl, this.content.firstChild);\n        }\n        var style = this.$printMarginEl.style;\n        style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n        style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n        if (this.session && this.session.$wrap == -1)\n            this.adjustWrapLimit();\n    };\n    this.getContainerElement = function () {\n        return this.container;\n    };\n    this.getMouseEventTarget = function () {\n        return this.scroller;\n    };\n    this.getTextAreaContainer = function () {\n        return this.container;\n    };\n    this.$moveTextAreaToCursor = function () {\n        if (this.$isMousePressed)\n            return;\n        var style = this.textarea.style;\n        var composition = this.$composition;\n        if (!this.$keepTextAreaAtCursor && !composition) {\n            dom.translate(this.textarea, -100, 0);\n            return;\n        }\n        var pixelPos = this.$cursorLayer.$pixelPos;\n        if (!pixelPos)\n            return;\n        if (composition && composition.markerRange)\n            pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n        var config = this.layerConfig;\n        var posTop = pixelPos.top;\n        var posLeft = pixelPos.left;\n        posTop -= config.offset;\n        var h = composition && composition.useTextareaForIME ? this.lineHeight : HIDE_TEXTAREA ? 0 : 1;\n        if (posTop < 0 || posTop > config.height - h) {\n            dom.translate(this.textarea, 0, 0);\n            return;\n        }\n        var w = 1;\n        var maxTop = this.$size.height - h;\n        if (!composition) {\n            posTop += this.lineHeight;\n        }\n        else {\n            if (composition.useTextareaForIME) {\n                var val = this.textarea.value;\n                w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n            }\n            else {\n                posTop += this.lineHeight + 2;\n            }\n        }\n        posLeft -= this.scrollLeft;\n        if (posLeft > this.$size.scrollerWidth - w)\n            posLeft = this.$size.scrollerWidth - w;\n        posLeft += this.gutterWidth + this.margin.left;\n        dom.setStyle(style, \"height\", h + \"px\");\n        dom.setStyle(style, \"width\", w + \"px\");\n        dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n    };\n    this.getFirstVisibleRow = function () {\n        return this.layerConfig.firstRow;\n    };\n    this.getFirstFullyVisibleRow = function () {\n        return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n    };\n    this.getLastFullyVisibleRow = function () {\n        var config = this.layerConfig;\n        var lastRow = config.lastRow;\n        var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n        if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n            return lastRow - 1;\n        return lastRow;\n    };\n    this.getLastVisibleRow = function () {\n        return this.layerConfig.lastRow;\n    };\n    this.$padding = null;\n    this.setPadding = function (padding) {\n        this.$padding = padding;\n        this.$textLayer.setPadding(padding);\n        this.$cursorLayer.setPadding(padding);\n        this.$markerFront.setPadding(padding);\n        this.$markerBack.setPadding(padding);\n        this.$loop.schedule(this.CHANGE_FULL);\n        this.$updatePrintMargin();\n    };\n    this.setScrollMargin = function (top, bottom, left, right) {\n        var sm = this.scrollMargin;\n        sm.top = top | 0;\n        sm.bottom = bottom | 0;\n        sm.right = right | 0;\n        sm.left = left | 0;\n        sm.v = sm.top + sm.bottom;\n        sm.h = sm.left + sm.right;\n        if (sm.top && this.scrollTop <= 0 && this.session)\n            this.session.setScrollTop(-sm.top);\n        this.updateFull();\n    };\n    this.setMargin = function (top, bottom, left, right) {\n        var sm = this.margin;\n        sm.top = top | 0;\n        sm.bottom = bottom | 0;\n        sm.right = right | 0;\n        sm.left = left | 0;\n        sm.v = sm.top + sm.bottom;\n        sm.h = sm.left + sm.right;\n        this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n        this.updateFull();\n    };\n    this.getHScrollBarAlwaysVisible = function () {\n        return this.$hScrollBarAlwaysVisible;\n    };\n    this.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n        this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n    };\n    this.getVScrollBarAlwaysVisible = function () {\n        return this.$vScrollBarAlwaysVisible;\n    };\n    this.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n        this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n    };\n    this.$updateScrollBarV = function () {\n        var scrollHeight = this.layerConfig.maxHeight;\n        var scrollerHeight = this.$size.scrollerHeight;\n        if (!this.$maxLines && this.$scrollPastEnd) {\n            scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n            if (this.scrollTop > scrollHeight - scrollerHeight) {\n                scrollHeight = this.scrollTop + scrollerHeight;\n                this.scrollBarV.scrollTop = null;\n            }\n        }\n        this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n        this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n    };\n    this.$updateScrollBarH = function () {\n        this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n        this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n    };\n    this.$frozen = false;\n    this.freeze = function () {\n        this.$frozen = true;\n    };\n    this.unfreeze = function () {\n        this.$frozen = false;\n    };\n    this.$renderChanges = function (changes, force) {\n        if (this.$changes) {\n            changes |= this.$changes;\n            this.$changes = 0;\n        }\n        if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n            this.$changes |= changes;\n            return;\n        }\n        if (this.$size.$dirty) {\n            this.$changes |= changes;\n            return this.onResize(true);\n        }\n        if (!this.lineHeight) {\n            this.$textLayer.checkForSizeChanges();\n        }\n        this._signal(\"beforeRender\", changes);\n        if (this.session && this.session.$bidiHandler)\n            this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n        var config = this.layerConfig;\n        if (changes & this.CHANGE_FULL ||\n            changes & this.CHANGE_SIZE ||\n            changes & this.CHANGE_TEXT ||\n            changes & this.CHANGE_LINES ||\n            changes & this.CHANGE_SCROLL ||\n            changes & this.CHANGE_H_SCROLL) {\n            changes |= this.$computeLayerConfig() | this.$loop.clear();\n            if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n                var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n                if (st > 0) {\n                    this.scrollTop = st;\n                    changes = changes | this.CHANGE_SCROLL;\n                    changes |= this.$computeLayerConfig() | this.$loop.clear();\n                }\n            }\n            config = this.layerConfig;\n            this.$updateScrollBarV();\n            if (changes & this.CHANGE_H_SCROLL)\n                this.$updateScrollBarH();\n            dom.translate(this.content, -this.scrollLeft, -config.offset);\n            var width = config.width + 2 * this.$padding + \"px\";\n            var height = config.minHeight + \"px\";\n            dom.setStyle(this.content.style, \"width\", width);\n            dom.setStyle(this.content.style, \"height\", height);\n        }\n        if (changes & this.CHANGE_H_SCROLL) {\n            dom.translate(this.content, -this.scrollLeft, -config.offset);\n            this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n        }\n        if (changes & this.CHANGE_FULL) {\n            this.$changedLines = null;\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this._signal(\"afterRender\", changes);\n            return;\n        }\n        if (changes & this.CHANGE_SCROLL) {\n            this.$changedLines = null;\n            if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n                this.$textLayer.update(config);\n            else\n                this.$textLayer.scrollLines(config);\n            if (this.$showGutter) {\n                if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n                    this.$gutterLayer.update(config);\n                else\n                    this.$gutterLayer.scrollLines(config);\n            }\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this._signal(\"afterRender\", changes);\n            return;\n        }\n        if (changes & this.CHANGE_TEXT) {\n            this.$changedLines = null;\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n        }\n        else if (changes & this.CHANGE_LINES) {\n            if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n                this.$gutterLayer.update(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n        }\n        else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n        }\n        else if (changes & this.CHANGE_CURSOR) {\n            if (this.$highlightGutterLine)\n                this.$gutterLayer.updateLineHighlight(config);\n            if (this.$customScrollbar) {\n                this.$scrollDecorator.$updateDecorators(config);\n            }\n        }\n        if (changes & this.CHANGE_CURSOR) {\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n        }\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n            this.$markerFront.update(config);\n        }\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n            this.$markerBack.update(config);\n        }\n        this._signal(\"afterRender\", changes);\n    };\n    this.$autosize = function () {\n        var height = this.session.getScreenLength() * this.lineHeight;\n        var maxHeight = this.$maxLines * this.lineHeight;\n        var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n        if (this.$horizScroll)\n            desiredHeight += this.scrollBarH.getHeight();\n        if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n            desiredHeight = this.$maxPixelHeight;\n        var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n        var vScroll = !hideScrollbars && height > maxHeight;\n        if (desiredHeight != this.desiredHeight ||\n            this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n            if (vScroll != this.$vScroll) {\n                this.$vScroll = vScroll;\n                this.scrollBarV.setVisible(vScroll);\n            }\n            var w = this.container.clientWidth;\n            this.container.style.height = desiredHeight + \"px\";\n            this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n            this.desiredHeight = desiredHeight;\n            this._signal(\"autosize\");\n        }\n    };\n    this.$computeLayerConfig = function () {\n        var session = this.session;\n        var size = this.$size;\n        var hideScrollbars = size.height <= 2 * this.lineHeight;\n        var screenLines = this.session.getScreenLength();\n        var maxHeight = screenLines * this.lineHeight;\n        var longestLine = this.$getLongestLine();\n        var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n            size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n        var hScrollChanged = this.$horizScroll !== horizScroll;\n        if (hScrollChanged) {\n            this.$horizScroll = horizScroll;\n            this.scrollBarH.setVisible(horizScroll);\n        }\n        var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n        if (this.$maxLines && this.lineHeight > 1)\n            this.$autosize();\n        var minHeight = size.scrollerHeight + this.lineHeight;\n        var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n            ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n            : 0;\n        maxHeight += scrollPastEnd;\n        var sm = this.scrollMargin;\n        this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n        this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n        var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n            size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n        var vScrollChanged = vScrollBefore !== vScroll;\n        if (vScrollChanged) {\n            this.$vScroll = vScroll;\n            this.scrollBarV.setVisible(vScroll);\n        }\n        var offset = this.scrollTop % this.lineHeight;\n        var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n        var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n        var lastRow = firstRow + lineCount;\n        var firstRowScreen, firstRowHeight;\n        var lineHeight = this.lineHeight;\n        firstRow = session.screenToDocumentRow(firstRow, 0);\n        var foldLine = session.getFoldLine(firstRow);\n        if (foldLine) {\n            firstRow = foldLine.start.row;\n        }\n        firstRowScreen = session.documentToScreenRow(firstRow, 0);\n        firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n        lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n        minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n            firstRowHeight;\n        offset = this.scrollTop - firstRowScreen * lineHeight;\n        var changes = 0;\n        if (this.layerConfig.width != longestLine || hScrollChanged)\n            changes = this.CHANGE_H_SCROLL;\n        if (hScrollChanged || vScrollChanged) {\n            changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n            this._signal(\"scrollbarVisibilityChanged\");\n            if (vScrollChanged)\n                longestLine = this.$getLongestLine();\n        }\n        this.layerConfig = {\n            width: longestLine,\n            padding: this.$padding,\n            firstRow: firstRow,\n            firstRowScreen: firstRowScreen,\n            lastRow: lastRow,\n            lineHeight: lineHeight,\n            characterWidth: this.characterWidth,\n            minHeight: minHeight,\n            maxHeight: maxHeight,\n            offset: offset,\n            gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n            height: this.$size.scrollerHeight\n        };\n        if (this.session.$bidiHandler)\n            this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n        return changes;\n    };\n    this.$updateLines = function () {\n        if (!this.$changedLines)\n            return;\n        var firstRow = this.$changedLines.firstRow;\n        var lastRow = this.$changedLines.lastRow;\n        this.$changedLines = null;\n        var layerConfig = this.layerConfig;\n        if (firstRow > layerConfig.lastRow + 1) {\n            return;\n        }\n        if (lastRow < layerConfig.firstRow) {\n            return;\n        }\n        if (lastRow === Infinity) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(layerConfig);\n            this.$textLayer.update(layerConfig);\n            return;\n        }\n        this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n        return true;\n    };\n    this.$getLongestLine = function () {\n        var charCount = this.session.getScreenWidth();\n        if (this.showInvisibles && !this.session.$useWrapMode)\n            charCount += 1;\n        if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n            charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n        return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n    };\n    this.updateFrontMarkers = function () {\n        this.$markerFront.setMarkers(this.session.getMarkers(true));\n        this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n    };\n    this.updateBackMarkers = function () {\n        this.$markerBack.setMarkers(this.session.getMarkers());\n        this.$loop.schedule(this.CHANGE_MARKER_BACK);\n    };\n    this.addGutterDecoration = function (row, className) {\n        this.$gutterLayer.addGutterDecoration(row, className);\n    };\n    this.removeGutterDecoration = function (row, className) {\n        this.$gutterLayer.removeGutterDecoration(row, className);\n    };\n    this.updateBreakpoints = function (rows) {\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n    this.setAnnotations = function (annotations) {\n        this.$gutterLayer.setAnnotations(annotations);\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n    this.updateCursor = function () {\n        this.$loop.schedule(this.CHANGE_CURSOR);\n    };\n    this.hideCursor = function () {\n        this.$cursorLayer.hideCursor();\n    };\n    this.showCursor = function () {\n        this.$cursorLayer.showCursor();\n    };\n    this.scrollSelectionIntoView = function (anchor, lead, offset) {\n        this.scrollCursorIntoView(anchor, offset);\n        this.scrollCursorIntoView(lead, offset);\n    };\n    this.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n        if (this.$size.scrollerHeight === 0)\n            return;\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n        var left = pos.left;\n        var top = pos.top;\n        var topMargin = $viewMargin && $viewMargin.top || 0;\n        var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n        var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n        if (scrollTop + topMargin > top) {\n            if (offset && scrollTop + topMargin > top + this.lineHeight)\n                top -= offset * this.$size.scrollerHeight;\n            if (top === 0)\n                top = -this.scrollMargin.top;\n            this.session.setScrollTop(top);\n        }\n        else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n            if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\n                top += offset * this.$size.scrollerHeight;\n            this.session.setScrollTop(top + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n        }\n        var scrollLeft = this.scrollLeft;\n        if (scrollLeft > left) {\n            if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n                left = -this.scrollMargin.left;\n            this.session.setScrollLeft(left);\n        }\n        else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n            this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n        }\n        else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n            this.session.setScrollLeft(0);\n        }\n    };\n    this.getScrollTop = function () {\n        return this.session.getScrollTop();\n    };\n    this.getScrollLeft = function () {\n        return this.session.getScrollLeft();\n    };\n    this.getScrollTopRow = function () {\n        return this.scrollTop / this.lineHeight;\n    };\n    this.getScrollBottomRow = function () {\n        return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n    };\n    this.scrollToRow = function (row) {\n        this.session.setScrollTop(row * this.lineHeight);\n    };\n    this.alignCursor = function (cursor, alignment) {\n        if (typeof cursor == \"number\")\n            cursor = { row: cursor, column: 0 };\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n        var h = this.$size.scrollerHeight - this.lineHeight;\n        var offset = pos.top - h * (alignment || 0);\n        this.session.setScrollTop(offset);\n        return offset;\n    };\n    this.STEPS = 8;\n    this.$calcSteps = function (fromValue, toValue) {\n        var i = 0;\n        var l = this.STEPS;\n        var steps = [];\n        var func = function (t, x_min, dx) {\n            return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n        };\n        for (i = 0; i < l; ++i)\n            steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n        return steps;\n    };\n    this.scrollToLine = function (line, center, animate, callback) {\n        var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n        var offset = pos.top;\n        if (center)\n            offset -= this.$size.scrollerHeight / 2;\n        var initialScroll = this.scrollTop;\n        this.session.setScrollTop(offset);\n        if (animate !== false)\n            this.animateScrolling(initialScroll, callback);\n    };\n    this.animateScrolling = function (fromValue, callback) {\n        var toValue = this.scrollTop;\n        if (!this.$animatedScroll)\n            return;\n        var _self = this;\n        if (fromValue == toValue)\n            return;\n        if (this.$scrollAnimation) {\n            var oldSteps = this.$scrollAnimation.steps;\n            if (oldSteps.length) {\n                fromValue = oldSteps[0];\n                if (fromValue == toValue)\n                    return;\n            }\n        }\n        var steps = _self.$calcSteps(fromValue, toValue);\n        this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n        clearInterval(this.$timer);\n        _self.session.setScrollTop(steps.shift());\n        _self.session.$scrollTop = toValue;\n        this.$timer = setInterval(function () {\n            if (!_self.session)\n                return clearInterval(_self.$timer);\n            if (steps.length) {\n                _self.session.setScrollTop(steps.shift());\n                _self.session.$scrollTop = toValue;\n            }\n            else if (toValue != null) {\n                _self.session.$scrollTop = -1;\n                _self.session.setScrollTop(toValue);\n                toValue = null;\n            }\n            else {\n                _self.$timer = clearInterval(_self.$timer);\n                _self.$scrollAnimation = null;\n                callback && callback();\n            }\n        }, 10);\n    };\n    this.scrollToY = function (scrollTop) {\n        if (this.scrollTop !== scrollTop) {\n            this.$loop.schedule(this.CHANGE_SCROLL);\n            this.scrollTop = scrollTop;\n        }\n    };\n    this.scrollToX = function (scrollLeft) {\n        if (this.scrollLeft !== scrollLeft)\n            this.scrollLeft = scrollLeft;\n        this.$loop.schedule(this.CHANGE_H_SCROLL);\n    };\n    this.scrollTo = function (x, y) {\n        this.session.setScrollTop(y);\n        this.session.setScrollLeft(x);\n    };\n    this.scrollBy = function (deltaX, deltaY) {\n        deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n        deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n    };\n    this.isScrollableBy = function (deltaX, deltaY) {\n        if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n            return true;\n        if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n            - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n            return true;\n        if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n            return true;\n        if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n            - this.layerConfig.width < -1 + this.scrollMargin.right)\n            return true;\n    };\n    this.pixelToScreenCoordinates = function (x, y) {\n        var canvasPos;\n        if (this.$hasCssTransforms) {\n            canvasPos = { top: 0, left: 0 };\n            var p = this.$fontMetrics.transformCoordinates([x, y]);\n            x = p[1] - this.gutterWidth - this.margin.left;\n            y = p[0];\n        }\n        else {\n            canvasPos = this.scroller.getBoundingClientRect();\n        }\n        var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n        var offset = offsetX / this.characterWidth;\n        var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n        var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n        return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n    };\n    this.screenToTextCoordinates = function (x, y) {\n        var canvasPos;\n        if (this.$hasCssTransforms) {\n            canvasPos = { top: 0, left: 0 };\n            var p = this.$fontMetrics.transformCoordinates([x, y]);\n            x = p[1] - this.gutterWidth - this.margin.left;\n            y = p[0];\n        }\n        else {\n            canvasPos = this.scroller.getBoundingClientRect();\n        }\n        var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n        var offset = offsetX / this.characterWidth;\n        var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n        var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n        return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n    };\n    this.textToScreenCoordinates = function (row, column) {\n        var canvasPos = this.scroller.getBoundingClientRect();\n        var pos = this.session.documentToScreenPosition(row, column);\n        var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n            ? this.session.$bidiHandler.getPosLeft(pos.column)\n            : Math.round(pos.column * this.characterWidth));\n        var y = pos.row * this.lineHeight;\n        return {\n            pageX: canvasPos.left + x - this.scrollLeft,\n            pageY: canvasPos.top + y - this.scrollTop\n        };\n    };\n    this.visualizeFocus = function () {\n        dom.addCssClass(this.container, \"ace_focus\");\n    };\n    this.visualizeBlur = function () {\n        dom.removeCssClass(this.container, \"ace_focus\");\n    };\n    this.showComposition = function (composition) {\n        this.$composition = composition;\n        if (!composition.cssText) {\n            composition.cssText = this.textarea.style.cssText;\n        }\n        if (composition.useTextareaForIME == undefined)\n            composition.useTextareaForIME = this.$useTextareaForIME;\n        if (this.$useTextareaForIME) {\n            dom.addCssClass(this.textarea, \"ace_composition\");\n            this.textarea.style.cssText = \"\";\n            this.$moveTextAreaToCursor();\n            this.$cursorLayer.element.style.display = \"none\";\n        }\n        else {\n            composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n        }\n    };\n    this.setCompositionText = function (text) {\n        var cursor = this.session.selection.cursor;\n        this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n        this.$moveTextAreaToCursor();\n    };\n    this.hideComposition = function () {\n        if (!this.$composition)\n            return;\n        if (this.$composition.markerId)\n            this.session.removeMarker(this.$composition.markerId);\n        dom.removeCssClass(this.textarea, \"ace_composition\");\n        this.textarea.style.cssText = this.$composition.cssText;\n        var cursor = this.session.selection.cursor;\n        this.removeExtraToken(cursor.row, cursor.column);\n        this.$composition = null;\n        this.$cursorLayer.element.style.display = \"\";\n    };\n    this.addToken = function (text, type, row, column) {\n        var session = this.session;\n        session.bgTokenizer.lines[row] = null;\n        var newToken = { type: type, value: text };\n        var tokens = session.getTokens(row);\n        if (column == null) {\n            tokens.push(newToken);\n        }\n        else {\n            var l = 0;\n            for (var i = 0; i < tokens.length; i++) {\n                var token = tokens[i];\n                l += token.value.length;\n                if (column <= l) {\n                    var diff = token.value.length - (l - column);\n                    var before = token.value.slice(0, diff);\n                    var after = token.value.slice(diff);\n                    tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n                    break;\n                }\n            }\n        }\n        this.updateLines(row, row);\n    };\n    this.removeExtraToken = function (row, column) {\n        this.updateLines(row, row);\n    };\n    this.setTheme = function (theme, cb) {\n        var _self = this;\n        this.$themeId = theme;\n        _self._dispatchEvent('themeChange', { theme: theme });\n        if (!theme || typeof theme == \"string\") {\n            var moduleName = theme || this.$options.theme.initialValue;\n            config.loadModule([\"theme\", moduleName], afterLoad);\n        }\n        else {\n            afterLoad(theme);\n        }\n        function afterLoad(module) {\n            if (_self.$themeId != theme)\n                return cb && cb();\n            if (!module || !module.cssClass)\n                throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n            if (module.$id)\n                _self.$themeId = module.$id;\n            dom.importCssString(module.cssText, module.cssClass, _self.container);\n            if (_self.theme)\n                dom.removeCssClass(_self.container, _self.theme.cssClass);\n            var padding = \"padding\" in module ? module.padding\n                : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n            if (_self.$padding && padding != _self.$padding)\n                _self.setPadding(padding);\n            _self.$theme = module.cssClass;\n            _self.theme = module;\n            dom.addCssClass(_self.container, module.cssClass);\n            dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n            if (_self.$size) {\n                _self.$size.width = 0;\n                _self.$updateSizeAsync();\n            }\n            _self._dispatchEvent('themeLoaded', { theme: module });\n            cb && cb();\n        }\n    };\n    this.getTheme = function () {\n        return this.$themeId;\n    };\n    this.setStyle = function (style, include) {\n        dom.setCssClass(this.container, style, include !== false);\n    };\n    this.unsetStyle = function (style) {\n        dom.removeCssClass(this.container, style);\n    };\n    this.setCursorStyle = function (style) {\n        dom.setStyle(this.scroller.style, \"cursor\", style);\n    };\n    this.setMouseCursor = function (cursorStyle) {\n        dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n    };\n    this.attachToShadowRoot = function () {\n        dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n    };\n    this.destroy = function () {\n        this.freeze();\n        this.$fontMetrics.destroy();\n        this.$cursorLayer.destroy();\n        this.removeAllListeners();\n        this.container.textContent = \"\";\n    };\n    this.$updateCustomScrollbar = function (val) {\n        var _self = this;\n        this.$horizScroll = this.$vScroll = null;\n        this.scrollBarV.element.remove();\n        this.scrollBarH.element.remove();\n        if (this.$scrollDecorator) {\n            delete this.$scrollDecorator;\n        }\n        if (val === true) {\n            this.scrollBarV = new VScrollBarCustom(this.container, this);\n            this.scrollBarH = new HScrollBarCustom(this.container, this);\n            this.scrollBarV.setHeight(this.$size.scrollerHeight);\n            this.scrollBarH.setWidth(this.$size.scrollerWidth);\n            this.scrollBarV.addEventListener(\"scroll\", function (e) {\n                if (!_self.$scrollAnimation)\n                    _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n            });\n            this.scrollBarH.addEventListener(\"scroll\", function (e) {\n                if (!_self.$scrollAnimation)\n                    _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n            });\n            this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n            this.$scrollDecorator.$updateDecorators();\n        }\n        else {\n            this.scrollBarV = new VScrollBar(this.container, this);\n            this.scrollBarH = new HScrollBar(this.container, this);\n            this.scrollBarV.addEventListener(\"scroll\", function (e) {\n                if (!_self.$scrollAnimation)\n                    _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n            });\n            this.scrollBarH.addEventListener(\"scroll\", function (e) {\n                if (!_self.$scrollAnimation)\n                    _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n            });\n        }\n    };\n}).call(VirtualRenderer.prototype);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n    animatedScroll: { initialValue: false },\n    showInvisibles: {\n        set: function (value) {\n            if (this.$textLayer.setShowInvisibles(value))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: false\n    },\n    showPrintMargin: {\n        set: function () { this.$updatePrintMargin(); },\n        initialValue: true\n    },\n    printMarginColumn: {\n        set: function () { this.$updatePrintMargin(); },\n        initialValue: 80\n    },\n    printMargin: {\n        set: function (val) {\n            if (typeof val == \"number\")\n                this.$printMarginColumn = val;\n            this.$showPrintMargin = !!val;\n            this.$updatePrintMargin();\n        },\n        get: function () {\n            return this.$showPrintMargin && this.$printMarginColumn;\n        }\n    },\n    showGutter: {\n        set: function (show) {\n            this.$gutter.style.display = show ? \"block\" : \"none\";\n            this.$loop.schedule(this.CHANGE_FULL);\n            this.onGutterResize();\n        },\n        initialValue: true\n    },\n    fadeFoldWidgets: {\n        set: function (show) {\n            dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n        },\n        initialValue: false\n    },\n    showFoldWidgets: {\n        set: function (show) {\n            this.$gutterLayer.setShowFoldWidgets(show);\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        },\n        initialValue: true\n    },\n    displayIndentGuides: {\n        set: function (show) {\n            if (this.$textLayer.setDisplayIndentGuides(show))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: true\n    },\n    highlightIndentGuides: {\n        set: function (show) {\n            if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n                this.$textLayer.$highlightIndentGuide();\n            }\n            else {\n                this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n            }\n        },\n        initialValue: true\n    },\n    highlightGutterLine: {\n        set: function (shouldHighlight) {\n            this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        },\n        initialValue: true\n    },\n    hScrollBarAlwaysVisible: {\n        set: function (val) {\n            if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    vScrollBarAlwaysVisible: {\n        set: function (val) {\n            if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    fontSize: {\n        set: function (size) {\n            if (typeof size == \"number\")\n                size = size + \"px\";\n            this.container.style.fontSize = size;\n            this.updateFontSize();\n        },\n        initialValue: 12\n    },\n    fontFamily: {\n        set: function (name) {\n            this.container.style.fontFamily = name;\n            this.updateFontSize();\n        }\n    },\n    maxLines: {\n        set: function (val) {\n            this.updateFull();\n        }\n    },\n    minLines: {\n        set: function (val) {\n            if (!(this.$minLines < 0x1ffffffffffff))\n                this.$minLines = 0;\n            this.updateFull();\n        }\n    },\n    maxPixelHeight: {\n        set: function (val) {\n            this.updateFull();\n        },\n        initialValue: 0\n    },\n    scrollPastEnd: {\n        set: function (val) {\n            val = +val || 0;\n            if (this.$scrollPastEnd == val)\n                return;\n            this.$scrollPastEnd = val;\n            this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: 0,\n        handlesSet: true\n    },\n    fixedWidthGutter: {\n        set: function (val) {\n            this.$gutterLayer.$fixedWidth = !!val;\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        }\n    },\n    customScrollbar: {\n        set: function (val) {\n            this.$updateCustomScrollbar(val);\n        },\n        initialValue: false\n    },\n    theme: {\n        set: function (val) { this.setTheme(val); },\n        get: function () { return this.$themeId || this.theme; },\n        initialValue: \"./theme/textmate\",\n        handlesSet: true\n    },\n    hasCssTransforms: {},\n    useTextareaForIME: {\n        initialValue: !useragent.isMobile && !useragent.isIE\n    }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n    var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n    try {\n        return new Blob([script], {\"type\": \"application/javascript\"});\n    } catch (e) { // Backwards-compatibility\n        var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n        var blobBuilder = new BlobBuilder();\n        blobBuilder.append(script);\n        return blobBuilder.getBlob(\"application/javascript\");\n    }\n}\n\nfunction createWorker(workerUrl) {\n    if (typeof Worker == \"undefined\")\n        return { postMessage: function() {}, terminate: function() {} };\n    if (config.get(\"loadWorkerFromBlob\")) {\n        var blob = $workerBlob(workerUrl);\n        var URL = window.URL || window.webkitURL;\n        var blobURL = URL.createObjectURL(blob);\n        return new Worker(blobURL);\n    }\n    return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n    if (!worker.postMessage)\n        worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n    this.$worker = worker;\n    this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.onMessage = this.onMessage.bind(this);\n\n    this.callbackId = 1;\n    this.callbacks = {};\n\n    this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n        if (require.nameToUrl && !require.toUrl)\n            require.toUrl = require.nameToUrl;\n\n        if (config.get(\"packaged\") || !require.toUrl) {\n            workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n        } else {\n            var normalizePath = this.$normalizePath;\n            workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n            var tlns = {};\n            topLevelNamespaces.forEach(function(ns) {\n                tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n            });\n        }\n\n        this.$worker = createWorker(workerUrl);\n        if (importScripts) {\n            this.send(\"importScripts\", importScripts);\n        }\n        this.$worker.postMessage({\n            init : true,\n            tlns : tlns,\n            module : mod,\n            classname : classname\n        });\n        return this.$worker;\n    };\n\n    this.onMessage = function(e) {\n        var msg = e.data;\n        switch (msg.type) {\n            case \"event\":\n                this._signal(msg.name, {data: msg.data});\n                break;\n            case \"call\":\n                var callback = this.callbacks[msg.id];\n                if (callback) {\n                    callback(msg.data);\n                    delete this.callbacks[msg.id];\n                }\n                break;\n            case \"error\":\n                this.reportError(msg.data);\n                break;\n            case \"log\":\n                window.console && console.log && console.log.apply(console, msg.data);\n                break;\n        }\n    };\n    \n    this.reportError = function(err) {\n        window.console && console.error && console.error(err);\n    };\n\n    this.$normalizePath = function(path) {\n        return net.qualifyURL(path);\n    };\n\n    this.terminate = function() {\n        this._signal(\"terminate\", {});\n        this.deltaQueue = null;\n        this.$worker.terminate();\n        this.$worker = null;\n        if (this.$doc)\n            this.$doc.off(\"change\", this.changeListener);\n        this.$doc = null;\n    };\n\n    this.send = function(cmd, args) {\n        this.$worker.postMessage({command: cmd, args: args});\n    };\n\n    this.call = function(cmd, args, callback) {\n        if (callback) {\n            var id = this.callbackId++;\n            this.callbacks[id] = callback;\n            args.push(id);\n        }\n        this.send(cmd, args);\n    };\n\n    this.emit = function(event, data) {\n        try {\n            if (data.data && data.data.err)\n                data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n                this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n        }\n        catch(ex) {\n            console.error(ex.stack);\n        }\n    };\n\n    this.attachToDocument = function(doc) {\n        if (this.$doc)\n            this.terminate();\n\n        this.$doc = doc;\n        this.call(\"setValue\", [doc.getValue()]);\n        doc.on(\"change\", this.changeListener, true);\n    };\n\n    this.changeListener = function(delta) {\n        if (!this.deltaQueue) {\n            this.deltaQueue = [];\n            setTimeout(this.$sendDeltaQueue, 0);\n        }\n        if (delta.action == \"insert\")\n            this.deltaQueue.push(delta.start, delta.lines);\n        else\n            this.deltaQueue.push(delta.start, delta.end);\n    };\n\n    this.$sendDeltaQueue = function() {\n        var q = this.deltaQueue;\n        if (!q) return;\n        this.deltaQueue = null;\n        if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n            this.call(\"setValue\", [this.$doc.getValue()]);\n        } else\n            this.emit(\"change\", {data: q});\n    };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n    var main = null;\n    var emitSync = false;\n    var sender = Object.create(EventEmitter);\n\n    var messageBuffer = [];\n    var workerClient = new WorkerClient({\n        messageBuffer: messageBuffer,\n        terminate: function() {},\n        postMessage: function(e) {\n            messageBuffer.push(e);\n            if (!main) return;\n            if (emitSync)\n                setTimeout(processNext);\n            else\n                processNext();\n        }\n    });\n\n    workerClient.setEmitSync = function(val) { emitSync = val; };\n\n    var processNext = function() {\n        var msg = messageBuffer.shift();\n        if (msg.command)\n            main[msg.command].apply(main, msg.args);\n        else if (msg.event)\n            sender._signal(msg.event, msg.data);\n    };\n\n    sender.postMessage = function(msg) {\n        workerClient.onMessage({data: msg});\n    };\n    sender.callback = function(data, callbackId) {\n        this.postMessage({type: \"call\", id: callbackId, data: data});\n    };\n    sender.emit = function(name, data) {\n        this.postMessage({type: \"event\", name: name, data: data});\n    };\n\n    config.loadModule([\"worker\", mod], function(Main) {\n        main = new Main[classname](sender);\n        while (messageBuffer.length)\n            processNext();\n    });\n\n    return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = function (session, length, pos, others, mainClass, othersClass) {\n    var _self = this;\n    this.length = length;\n    this.session = session;\n    this.doc = session.getDocument();\n    this.mainClass = mainClass;\n    this.othersClass = othersClass;\n    this.$onUpdate = this.onUpdate.bind(this);\n    this.doc.on(\"change\", this.$onUpdate, true);\n    this.$others = others;\n    this.$onCursorChange = function () {\n        setTimeout(function () {\n            _self.onCursorChange();\n        });\n    };\n    this.$pos = pos;\n    var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || { length: -1 };\n    this.$undoStackDepth = undoStack.length;\n    this.setup();\n    session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setup = function () {\n        var _self = this;\n        var doc = this.doc;\n        var session = this.session;\n        this.selectionBefore = session.selection.toJSON();\n        if (session.selection.inMultiSelectMode)\n            session.selection.toSingleRange();\n        this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n        var pos = this.pos;\n        pos.$insertRight = true;\n        pos.detach();\n        pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n        this.others = [];\n        this.$others.forEach(function (other) {\n            var anchor = doc.createAnchor(other.row, other.column);\n            anchor.$insertRight = true;\n            anchor.detach();\n            _self.others.push(anchor);\n        });\n        session.setUndoSelect(false);\n    };\n    this.showOtherMarkers = function () {\n        if (this.othersActive)\n            return;\n        var session = this.session;\n        var _self = this;\n        this.othersActive = true;\n        this.others.forEach(function (anchor) {\n            anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n        });\n    };\n    this.hideOtherMarkers = function () {\n        if (!this.othersActive)\n            return;\n        this.othersActive = false;\n        for (var i = 0; i < this.others.length; i++) {\n            this.session.removeMarker(this.others[i].markerId);\n        }\n    };\n    this.onUpdate = function (delta) {\n        if (this.$updating)\n            return this.updateAnchors(delta);\n        var range = delta;\n        if (range.start.row !== range.end.row)\n            return;\n        if (range.start.row !== this.pos.row)\n            return;\n        this.$updating = true;\n        var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n        var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n        var distanceFromStart = range.start.column - this.pos.column;\n        this.updateAnchors(delta);\n        if (inMainRange)\n            this.length += lengthDiff;\n        if (inMainRange && !this.session.$fromUndo) {\n            if (delta.action === 'insert') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n                    this.doc.insertMergedLines(newPos, delta.lines);\n                }\n            }\n            else if (delta.action === 'remove') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n                    this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n                }\n            }\n        }\n        this.$updating = false;\n        this.updateMarkers();\n    };\n    this.updateAnchors = function (delta) {\n        this.pos.onChange(delta);\n        for (var i = this.others.length; i--;)\n            this.others[i].onChange(delta);\n        this.updateMarkers();\n    };\n    this.updateMarkers = function () {\n        if (this.$updating)\n            return;\n        var _self = this;\n        var session = this.session;\n        var updateMarker = function (pos, className) {\n            session.removeMarker(pos.markerId);\n            pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n        };\n        updateMarker(this.pos, this.mainClass);\n        for (var i = this.others.length; i--;)\n            updateMarker(this.others[i], this.othersClass);\n    };\n    this.onCursorChange = function (event) {\n        if (this.$updating || !this.session)\n            return;\n        var pos = this.session.selection.getCursor();\n        if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n            this.showOtherMarkers();\n            this._emit(\"cursorEnter\", event);\n        }\n        else {\n            this.hideOtherMarkers();\n            this._emit(\"cursorLeave\", event);\n        }\n    };\n    this.detach = function () {\n        this.session.removeMarker(this.pos && this.pos.markerId);\n        this.hideOtherMarkers();\n        this.doc.off(\"change\", this.$onUpdate);\n        this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n        this.session.setUndoSelect(true);\n        this.session = null;\n    };\n    this.cancel = function () {\n        if (this.$undoStackDepth === -1)\n            return;\n        var undoManager = this.session.getUndoManager();\n        var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n        for (var i = 0; i < undosRequired; i++) {\n            undoManager.undo(this.session, true);\n        }\n        if (this.selectionBefore)\n            this.session.selection.fromJSON(this.selectionBefore);\n    };\n}).call(PlaceHolder.prototype);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n    var ev = e.domEvent;\n    var alt = ev.altKey;\n    var shift = ev.shiftKey;\n    var ctrl = ev.ctrlKey;\n    var accel = e.getAccelKey();\n    var button = e.getButton();\n    if (ctrl && useragent.isMac)\n        button = ev.button;\n    if (e.editor.inMultiSelectMode && button == 2) {\n        e.editor.textInput.onContextMenu(e.domEvent);\n        return;\n    }\n    if (!ctrl && !alt && !accel) {\n        if (button === 0 && e.editor.inMultiSelectMode)\n            e.editor.exitMultiSelectMode();\n        return;\n    }\n    if (button !== 0)\n        return;\n    var editor = e.editor;\n    var selection = editor.selection;\n    var isMultiSelect = editor.inMultiSelectMode;\n    var pos = e.getDocumentPosition();\n    var cursor = selection.getCursor();\n    var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n    var mouseX = e.x, mouseY = e.y;\n    var onMouseSelection = function (e) {\n        mouseX = e.clientX;\n        mouseY = e.clientY;\n    };\n    var session = editor.session;\n    var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n    var screenCursor = screenAnchor;\n    var selectionMode;\n    if (editor.$mouseHandler.$enableJumpToDef) {\n        if (ctrl && alt || accel && alt)\n            selectionMode = shift ? \"block\" : \"add\";\n        else if (alt && editor.$blockSelectEnabled)\n            selectionMode = \"block\";\n    }\n    else {\n        if (accel && !alt) {\n            selectionMode = \"add\";\n            if (!isMultiSelect && shift)\n                return;\n        }\n        else if (alt && editor.$blockSelectEnabled) {\n            selectionMode = \"block\";\n        }\n    }\n    if (selectionMode && useragent.isMac && ev.ctrlKey) {\n        editor.$mouseHandler.cancelContextMenu();\n    }\n    if (selectionMode == \"add\") {\n        if (!isMultiSelect && inSelection)\n            return; // dragging\n        if (!isMultiSelect) {\n            var range = selection.toOrientedRange();\n            editor.addSelectionMarker(range);\n        }\n        var oldRange = selection.rangeList.rangeAtPoint(pos);\n        editor.inVirtualSelectionMode = true;\n        if (shift) {\n            oldRange = null;\n            range = selection.ranges[0] || range;\n            editor.removeSelectionMarker(range);\n        }\n        editor.once(\"mouseup\", function () {\n            var tmpSel = selection.toOrientedRange();\n            if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n                selection.substractPoint(tmpSel.cursor);\n            else {\n                if (shift) {\n                    selection.substractPoint(range.cursor);\n                }\n                else if (range) {\n                    editor.removeSelectionMarker(range);\n                    selection.addRange(range);\n                }\n                selection.addRange(tmpSel);\n            }\n            editor.inVirtualSelectionMode = false;\n        });\n    }\n    else if (selectionMode == \"block\") {\n        e.stop();\n        editor.inVirtualSelectionMode = true;\n        var initialRange;\n        var rectSel = [];\n        var blockSelect = function () {\n            var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n            var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n            if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n                return;\n            screenCursor = newCursor;\n            editor.selection.moveToPosition(cursor);\n            editor.renderer.scrollCursorIntoView();\n            editor.removeSelectionMarkers(rectSel);\n            rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n            if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n                rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n            rectSel.forEach(editor.addSelectionMarker, editor);\n            editor.updateSelectionMarkers();\n        };\n        if (isMultiSelect && !accel) {\n            selection.toSingleRange();\n        }\n        else if (!isMultiSelect && accel) {\n            initialRange = selection.toOrientedRange();\n            editor.addSelectionMarker(initialRange);\n        }\n        if (shift)\n            screenAnchor = session.documentToScreenPosition(selection.lead);\n        else\n            selection.moveToPosition(pos);\n        screenCursor = { row: -1, column: -1 };\n        var onMouseSelectionEnd = function (e) {\n            blockSelect();\n            clearInterval(timerId);\n            editor.removeSelectionMarkers(rectSel);\n            if (!rectSel.length)\n                rectSel = [selection.toOrientedRange()];\n            if (initialRange) {\n                editor.removeSelectionMarker(initialRange);\n                selection.toSingleRange(initialRange);\n            }\n            for (var i = 0; i < rectSel.length; i++)\n                selection.addRange(rectSel[i]);\n            editor.inVirtualSelectionMode = false;\n            editor.$mouseHandler.$clickSelection = null;\n        };\n        var onSelectionInterval = blockSelect;\n        event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n        var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n        return e.preventDefault();\n    }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){// commands to enter multiselect mode\nexports.defaultCommands = [{\n        name: \"addCursorAbove\",\n        description: \"Add cursor above\",\n        exec: function (editor) { editor.selectMoreLines(-1); },\n        bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"addCursorBelow\",\n        description: \"Add cursor below\",\n        exec: function (editor) { editor.selectMoreLines(1); },\n        bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"addCursorAboveSkipCurrent\",\n        description: \"Add cursor above (skip current)\",\n        exec: function (editor) { editor.selectMoreLines(-1, true); },\n        bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"addCursorBelowSkipCurrent\",\n        description: \"Add cursor below (skip current)\",\n        exec: function (editor) { editor.selectMoreLines(1, true); },\n        bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectMoreBefore\",\n        description: \"Select more before\",\n        exec: function (editor) { editor.selectMore(-1); },\n        bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectMoreAfter\",\n        description: \"Select more after\",\n        exec: function (editor) { editor.selectMore(1); },\n        bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectNextBefore\",\n        description: \"Select next before\",\n        exec: function (editor) { editor.selectMore(-1, true); },\n        bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectNextAfter\",\n        description: \"Select next after\",\n        exec: function (editor) { editor.selectMore(1, true); },\n        bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"toggleSplitSelectionIntoLines\",\n        description: \"Split into lines\",\n        exec: function (editor) {\n            if (editor.multiSelect.rangeCount > 1)\n                editor.multiSelect.joinSelections();\n            else\n                editor.multiSelect.splitIntoLines();\n        },\n        bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n        readOnly: true\n    }, {\n        name: \"splitSelectionIntoLines\",\n        description: \"Split into lines\",\n        exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n        readOnly: true\n    }, {\n        name: \"alignCursors\",\n        description: \"Align cursors\",\n        exec: function (editor) { editor.alignCursors(); },\n        bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"findAll\",\n        description: \"Find all\",\n        exec: function (editor) { editor.findAll(); },\n        bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }];\nexports.multiSelectCommands = [{\n        name: \"singleSelection\",\n        description: \"Single selection\",\n        bindKey: \"esc\",\n        exec: function (editor) { editor.exitMultiSelectMode(); },\n        scrollIntoView: \"cursor\",\n        readOnly: true,\n        isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n    }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){var RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n    search.$options.wrap = true;\n    search.$options.needle = needle;\n    search.$options.backwards = dir == -1;\n    return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n    this.getSelectionMarkers = function () {\n        return this.$selectionMarkers;\n    };\n}).call(EditSession.prototype);\n(function () {\n    this.ranges = null;\n    this.rangeList = null;\n    this.addRange = function (range, $blockChangeEvents) {\n        if (!range)\n            return;\n        if (!this.inMultiSelectMode && this.rangeCount === 0) {\n            var oldRange = this.toOrientedRange();\n            this.rangeList.add(oldRange);\n            this.rangeList.add(range);\n            if (this.rangeList.ranges.length != 2) {\n                this.rangeList.removeAll();\n                return $blockChangeEvents || this.fromOrientedRange(range);\n            }\n            this.rangeList.removeAll();\n            this.rangeList.add(oldRange);\n            this.$onAddRange(oldRange);\n        }\n        if (!range.cursor)\n            range.cursor = range.end;\n        var removed = this.rangeList.add(range);\n        this.$onAddRange(range);\n        if (removed.length)\n            this.$onRemoveRange(removed);\n        if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n            this._signal(\"multiSelect\");\n            this.inMultiSelectMode = true;\n            this.session.$undoSelect = false;\n            this.rangeList.attach(this.session);\n        }\n        return $blockChangeEvents || this.fromOrientedRange(range);\n    };\n    this.toSingleRange = function (range) {\n        range = range || this.ranges[0];\n        var removed = this.rangeList.removeAll();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n        range && this.fromOrientedRange(range);\n    };\n    this.substractPoint = function (pos) {\n        var removed = this.rangeList.substractPoint(pos);\n        if (removed) {\n            this.$onRemoveRange(removed);\n            return removed[0];\n        }\n    };\n    this.mergeOverlappingRanges = function () {\n        var removed = this.rangeList.merge();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n    };\n    this.$onAddRange = function (range) {\n        this.rangeCount = this.rangeList.ranges.length;\n        this.ranges.unshift(range);\n        this._signal(\"addRange\", { range: range });\n    };\n    this.$onRemoveRange = function (removed) {\n        this.rangeCount = this.rangeList.ranges.length;\n        if (this.rangeCount == 1 && this.inMultiSelectMode) {\n            var lastRange = this.rangeList.ranges.pop();\n            removed.push(lastRange);\n            this.rangeCount = 0;\n        }\n        for (var i = removed.length; i--;) {\n            var index = this.ranges.indexOf(removed[i]);\n            this.ranges.splice(index, 1);\n        }\n        this._signal(\"removeRange\", { ranges: removed });\n        if (this.rangeCount === 0 && this.inMultiSelectMode) {\n            this.inMultiSelectMode = false;\n            this._signal(\"singleSelect\");\n            this.session.$undoSelect = true;\n            this.rangeList.detach(this.session);\n        }\n        lastRange = lastRange || this.ranges[0];\n        if (lastRange && !lastRange.isEqual(this.getRange()))\n            this.fromOrientedRange(lastRange);\n    };\n    this.$initRangeList = function () {\n        if (this.rangeList)\n            return;\n        this.rangeList = new RangeList();\n        this.ranges = [];\n        this.rangeCount = 0;\n    };\n    this.getAllRanges = function () {\n        return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n    };\n    this.splitIntoLines = function () {\n        var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n        var newRanges = [];\n        for (var i = 0; i < ranges.length; i++) {\n            var range = ranges[i];\n            var row = range.start.row;\n            var endRow = range.end.row;\n            if (row === endRow) {\n                newRanges.push(range.clone());\n            }\n            else {\n                newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n                while (++row < endRow)\n                    newRanges.push(this.getLineRange(row, true));\n                newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n            }\n            if (i == 0 && !this.isBackwards())\n                newRanges = newRanges.reverse();\n        }\n        this.toSingleRange();\n        for (var i = newRanges.length; i--;)\n            this.addRange(newRanges[i]);\n    };\n    this.joinSelections = function () {\n        var ranges = this.rangeList.ranges;\n        var lastRange = ranges[ranges.length - 1];\n        var range = Range.fromPoints(ranges[0].start, lastRange.end);\n        this.toSingleRange();\n        this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n    };\n    this.toggleBlockSelection = function () {\n        if (this.rangeCount > 1) {\n            var ranges = this.rangeList.ranges;\n            var lastRange = ranges[ranges.length - 1];\n            var range = Range.fromPoints(ranges[0].start, lastRange.end);\n            this.toSingleRange();\n            this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n        }\n        else {\n            var cursor = this.session.documentToScreenPosition(this.cursor);\n            var anchor = this.session.documentToScreenPosition(this.anchor);\n            var rectSel = this.rectangularRangeBlock(cursor, anchor);\n            rectSel.forEach(this.addRange, this);\n        }\n    };\n    this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n        var rectSel = [];\n        var xBackwards = screenCursor.column < screenAnchor.column;\n        if (xBackwards) {\n            var startColumn = screenCursor.column;\n            var endColumn = screenAnchor.column;\n            var startOffsetX = screenCursor.offsetX;\n            var endOffsetX = screenAnchor.offsetX;\n        }\n        else {\n            var startColumn = screenAnchor.column;\n            var endColumn = screenCursor.column;\n            var startOffsetX = screenAnchor.offsetX;\n            var endOffsetX = screenCursor.offsetX;\n        }\n        var yBackwards = screenCursor.row < screenAnchor.row;\n        if (yBackwards) {\n            var startRow = screenCursor.row;\n            var endRow = screenAnchor.row;\n        }\n        else {\n            var startRow = screenAnchor.row;\n            var endRow = screenCursor.row;\n        }\n        if (startColumn < 0)\n            startColumn = 0;\n        if (startRow < 0)\n            startRow = 0;\n        if (startRow == endRow)\n            includeEmptyLines = true;\n        var docEnd;\n        for (var row = startRow; row <= endRow; row++) {\n            var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n            if (range.isEmpty()) {\n                if (docEnd && isSamePoint(range.end, docEnd))\n                    break;\n                docEnd = range.end;\n            }\n            range.cursor = xBackwards ? range.start : range.end;\n            rectSel.push(range);\n        }\n        if (yBackwards)\n            rectSel.reverse();\n        if (!includeEmptyLines) {\n            var end = rectSel.length - 1;\n            while (rectSel[end].isEmpty() && end > 0)\n                end--;\n            if (end > 0) {\n                var start = 0;\n                while (rectSel[start].isEmpty())\n                    start++;\n            }\n            for (var i = end; i >= start; i--) {\n                if (rectSel[i].isEmpty())\n                    rectSel.splice(i, 1);\n            }\n        }\n        return rectSel;\n    };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n    this.updateSelectionMarkers = function () {\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.addSelectionMarker = function (orientedRange) {\n        if (!orientedRange.cursor)\n            orientedRange.cursor = orientedRange.end;\n        var style = this.getSelectionStyle();\n        orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n        this.session.$selectionMarkers.push(orientedRange);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n        return orientedRange;\n    };\n    this.removeSelectionMarker = function (range) {\n        if (!range.marker)\n            return;\n        this.session.removeMarker(range.marker);\n        var index = this.session.$selectionMarkers.indexOf(range);\n        if (index != -1)\n            this.session.$selectionMarkers.splice(index, 1);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n    };\n    this.removeSelectionMarkers = function (ranges) {\n        var markerList = this.session.$selectionMarkers;\n        for (var i = ranges.length; i--;) {\n            var range = ranges[i];\n            if (!range.marker)\n                continue;\n            this.session.removeMarker(range.marker);\n            var index = markerList.indexOf(range);\n            if (index != -1)\n                markerList.splice(index, 1);\n        }\n        this.session.selectionMarkerCount = markerList.length;\n    };\n    this.$onAddRange = function (e) {\n        this.addSelectionMarker(e.range);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.$onRemoveRange = function (e) {\n        this.removeSelectionMarkers(e.ranges);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.$onMultiSelect = function (e) {\n        if (this.inMultiSelectMode)\n            return;\n        this.inMultiSelectMode = true;\n        this.setStyle(\"ace_multiselect\");\n        this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n        this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.$onSingleSelect = function (e) {\n        if (this.session.multiSelect.inVirtualMode)\n            return;\n        this.inMultiSelectMode = false;\n        this.unsetStyle(\"ace_multiselect\");\n        this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n        this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n        this._emit(\"changeSelection\");\n    };\n    this.$onMultiSelectExec = function (e) {\n        var command = e.command;\n        var editor = e.editor;\n        if (!editor.multiSelect)\n            return;\n        if (!command.multiSelectAction) {\n            var result = command.exec(editor, e.args || {});\n            editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n            editor.multiSelect.mergeOverlappingRanges();\n        }\n        else if (command.multiSelectAction == \"forEach\") {\n            result = editor.forEachSelection(command, e.args);\n        }\n        else if (command.multiSelectAction == \"forEachLine\") {\n            result = editor.forEachSelection(command, e.args, true);\n        }\n        else if (command.multiSelectAction == \"single\") {\n            editor.exitMultiSelectMode();\n            result = command.exec(editor, e.args || {});\n        }\n        else {\n            result = command.multiSelectAction(editor, e.args || {});\n        }\n        return result;\n    };\n    this.forEachSelection = function (cmd, args, options) {\n        if (this.inVirtualSelectionMode)\n            return;\n        var keepOrder = options && options.keepOrder;\n        var $byLines = options == true || options && options.$byLines;\n        var session = this.session;\n        var selection = this.selection;\n        var rangeList = selection.rangeList;\n        var ranges = (keepOrder ? selection : rangeList).ranges;\n        var result;\n        if (!ranges.length)\n            return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n        var reg = selection._eventRegistry;\n        selection._eventRegistry = {};\n        var tmpSel = new Selection(session);\n        this.inVirtualSelectionMode = true;\n        for (var i = ranges.length; i--;) {\n            if ($byLines) {\n                while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n                    i--;\n            }\n            tmpSel.fromOrientedRange(ranges[i]);\n            tmpSel.index = i;\n            this.selection = session.selection = tmpSel;\n            var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n            if (!result && cmdResult !== undefined)\n                result = cmdResult;\n            tmpSel.toOrientedRange(ranges[i]);\n        }\n        tmpSel.detach();\n        this.selection = session.selection = selection;\n        this.inVirtualSelectionMode = false;\n        selection._eventRegistry = reg;\n        selection.mergeOverlappingRanges();\n        if (selection.ranges[0])\n            selection.fromOrientedRange(selection.ranges[0]);\n        var anim = this.renderer.$scrollAnimation;\n        this.onCursorChange();\n        this.onSelectionChange();\n        if (anim && anim.from == anim.to)\n            this.renderer.animateScrolling(anim.from);\n        return result;\n    };\n    this.exitMultiSelectMode = function () {\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n            return;\n        this.multiSelect.toSingleRange();\n    };\n    this.getSelectedText = function () {\n        var text = \"\";\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var ranges = this.multiSelect.rangeList.ranges;\n            var buf = [];\n            for (var i = 0; i < ranges.length; i++) {\n                buf.push(this.session.getTextRange(ranges[i]));\n            }\n            var nl = this.session.getDocument().getNewLineCharacter();\n            text = buf.join(nl);\n            if (text.length == (buf.length - 1) * nl.length)\n                text = \"\";\n        }\n        else if (!this.selection.isEmpty()) {\n            text = this.session.getTextRange(this.getSelectionRange());\n        }\n        return text;\n    };\n    this.$checkMultiselectChange = function (e, anchor) {\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var range = this.multiSelect.ranges[0];\n            if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n                return;\n            var pos = anchor == this.multiSelect.anchor\n                ? range.cursor == range.start ? range.end : range.start\n                : range.cursor;\n            if (pos.row != anchor.row\n                || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n                this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n            else\n                this.multiSelect.mergeOverlappingRanges();\n        }\n    };\n    this.findAll = function (needle, options, additive) {\n        options = options || {};\n        options.needle = needle || options.needle;\n        if (options.needle == undefined) {\n            var range = this.selection.isEmpty()\n                ? this.selection.getWordRange()\n                : this.selection.getRange();\n            options.needle = this.session.getTextRange(range);\n        }\n        this.$search.set(options);\n        var ranges = this.$search.findAll(this.session);\n        if (!ranges.length)\n            return 0;\n        var selection = this.multiSelect;\n        if (!additive)\n            selection.toSingleRange(ranges[0]);\n        for (var i = ranges.length; i--;)\n            selection.addRange(ranges[i], true);\n        if (range && selection.rangeList.rangeAtPoint(range.start))\n            selection.addRange(range, true);\n        return ranges.length;\n    };\n    this.selectMoreLines = function (dir, skip) {\n        var range = this.selection.toOrientedRange();\n        var isBackwards = range.cursor == range.end;\n        var screenLead = this.session.documentToScreenPosition(range.cursor);\n        if (this.selection.$desiredColumn)\n            screenLead.column = this.selection.$desiredColumn;\n        var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n        if (!range.isEmpty()) {\n            var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n            var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n        }\n        else {\n            var anchor = lead;\n        }\n        if (isBackwards) {\n            var newRange = Range.fromPoints(lead, anchor);\n            newRange.cursor = newRange.start;\n        }\n        else {\n            var newRange = Range.fromPoints(anchor, lead);\n            newRange.cursor = newRange.end;\n        }\n        newRange.desiredColumn = screenLead.column;\n        if (!this.selection.inMultiSelectMode) {\n            this.selection.addRange(range);\n        }\n        else {\n            if (skip)\n                var toRemove = range.cursor;\n        }\n        this.selection.addRange(newRange);\n        if (toRemove)\n            this.selection.substractPoint(toRemove);\n    };\n    this.transposeSelections = function (dir) {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var all = sel.ranges;\n        for (var i = all.length; i--;) {\n            var range = all[i];\n            if (range.isEmpty()) {\n                var tmp = session.getWordRange(range.start.row, range.start.column);\n                range.start.row = tmp.start.row;\n                range.start.column = tmp.start.column;\n                range.end.row = tmp.end.row;\n                range.end.column = tmp.end.column;\n            }\n        }\n        sel.mergeOverlappingRanges();\n        var words = [];\n        for (var i = all.length; i--;) {\n            var range = all[i];\n            words.unshift(session.getTextRange(range));\n        }\n        if (dir < 0)\n            words.unshift(words.pop());\n        else\n            words.push(words.shift());\n        for (var i = all.length; i--;) {\n            var range = all[i];\n            var tmp = range.clone();\n            session.replace(range, words[i]);\n            range.start.row = tmp.start.row;\n            range.start.column = tmp.start.column;\n        }\n        sel.fromOrientedRange(sel.ranges[0]);\n    };\n    this.selectMore = function (dir, skip, stopAtFirst) {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var range = sel.toOrientedRange();\n        if (range.isEmpty()) {\n            range = session.getWordRange(range.start.row, range.start.column);\n            range.cursor = dir == -1 ? range.start : range.end;\n            this.multiSelect.addRange(range);\n            if (stopAtFirst)\n                return;\n        }\n        var needle = session.getTextRange(range);\n        var newRange = find(session, needle, dir);\n        if (newRange) {\n            newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n            this.session.unfold(newRange);\n            this.multiSelect.addRange(newRange);\n            this.renderer.scrollCursorIntoView(null, 0.5);\n        }\n        if (skip)\n            this.multiSelect.substractPoint(range.cursor);\n    };\n    this.alignCursors = function () {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var ranges = sel.ranges;\n        var row = -1;\n        var sameRowRanges = ranges.filter(function (r) {\n            if (r.cursor.row == row)\n                return true;\n            row = r.cursor.row;\n        });\n        if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n            var range = this.selection.getRange();\n            var fr = range.start.row, lr = range.end.row;\n            var guessRange = fr == lr;\n            if (guessRange) {\n                var max = this.session.getLength();\n                var line;\n                do {\n                    line = this.session.getLine(lr);\n                } while (/[=:]/.test(line) && ++lr < max);\n                do {\n                    line = this.session.getLine(fr);\n                } while (/[=:]/.test(line) && --fr > 0);\n                if (fr < 0)\n                    fr = 0;\n                if (lr >= max)\n                    lr = max - 1;\n            }\n            var lines = this.session.removeFullLines(fr, lr);\n            lines = this.$reAlignText(lines, guessRange);\n            this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n            if (!guessRange) {\n                range.start.column = 0;\n                range.end.column = lines[lines.length - 1].length;\n            }\n            this.selection.setRange(range);\n        }\n        else {\n            sameRowRanges.forEach(function (r) {\n                sel.substractPoint(r.cursor);\n            });\n            var maxCol = 0;\n            var minSpace = Infinity;\n            var spaceOffsets = ranges.map(function (r) {\n                var p = r.cursor;\n                var line = session.getLine(p.row);\n                var spaceOffset = line.substr(p.column).search(/\\S/g);\n                if (spaceOffset == -1)\n                    spaceOffset = 0;\n                if (p.column > maxCol)\n                    maxCol = p.column;\n                if (spaceOffset < minSpace)\n                    minSpace = spaceOffset;\n                return spaceOffset;\n            });\n            ranges.forEach(function (r, i) {\n                var p = r.cursor;\n                var l = maxCol - p.column;\n                var d = spaceOffsets[i] - minSpace;\n                if (l > d)\n                    session.insert(p, lang.stringRepeat(\" \", l - d));\n                else\n                    session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n                r.start.column = r.end.column = maxCol;\n                r.start.row = r.end.row = p.row;\n                r.cursor = r.end;\n            });\n            sel.fromOrientedRange(ranges[0]);\n            this.renderer.updateCursor();\n            this.renderer.updateBackMarkers();\n        }\n    };\n    this.$reAlignText = function (lines, forceLeft) {\n        var isLeftAligned = true, isRightAligned = true;\n        var startW, textW, endW;\n        return lines.map(function (line) {\n            var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n            if (!m)\n                return [line];\n            if (startW == null) {\n                startW = m[1].length;\n                textW = m[2].length;\n                endW = m[3].length;\n                return m;\n            }\n            if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n                isRightAligned = false;\n            if (startW != m[1].length)\n                isLeftAligned = false;\n            if (startW > m[1].length)\n                startW = m[1].length;\n            if (textW < m[2].length)\n                textW = m[2].length;\n            if (endW > m[3].length)\n                endW = m[3].length;\n            return m;\n        }).map(forceLeft ? alignLeft :\n            isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n        function spaces(n) {\n            return lang.stringRepeat(\" \", n);\n        }\n        function alignLeft(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(textW - m[2].length + endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function alignRight(m) {\n            return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function unAlign(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n    };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n    var session = e.session;\n    if (session && !session.multiSelect) {\n        session.$selectionMarkers = [];\n        session.selection.$initRangeList();\n        session.multiSelect = session.selection;\n    }\n    this.multiSelect = session && session.multiSelect;\n    var oldSession = e.oldSession;\n    if (oldSession) {\n        oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n        oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n        oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n        oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n        oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n        oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n    }\n    if (session) {\n        session.multiSelect.on(\"addRange\", this.$onAddRange);\n        session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n        session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n        session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n        session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n        session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n    }\n    if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n        if (session.selection.inMultiSelectMode)\n            this.$onMultiSelect();\n        else\n            this.$onSingleSelect();\n    }\n};\nfunction MultiSelect(editor) {\n    if (editor.$multiselectOnSessionChange)\n        return;\n    editor.$onAddRange = editor.$onAddRange.bind(editor);\n    editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n    editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n    editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n    editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n    editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n    editor.$multiselectOnSessionChange(editor);\n    editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n    editor.on(\"mousedown\", onMouseDown);\n    editor.commands.addCommands(commands.defaultCommands);\n    addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n    if (!editor.textInput)\n        return;\n    var el = editor.textInput.getElement();\n    var altCursor = false;\n    event.addListener(el, \"keydown\", function (e) {\n        var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n        if (editor.$blockSelectEnabled && altDown) {\n            if (!altCursor) {\n                editor.renderer.setMouseCursor(\"crosshair\");\n                altCursor = true;\n            }\n        }\n        else if (altCursor) {\n            reset();\n        }\n    }, editor);\n    event.addListener(el, \"keyup\", reset, editor);\n    event.addListener(el, \"blur\", reset, editor);\n    function reset(e) {\n        if (altCursor) {\n            editor.renderer.setMouseCursor(\"\");\n            altCursor = false;\n        }\n    }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n    enableMultiselect: {\n        set: function (val) {\n            MultiSelect(this);\n            if (val) {\n                this.on(\"changeSession\", this.$multiselectOnSessionChange);\n                this.on(\"mousedown\", onMouseDown);\n            }\n            else {\n                this.off(\"changeSession\", this.$multiselectOnSessionChange);\n                this.off(\"mousedown\", onMouseDown);\n            }\n        },\n        value: true\n    },\n    enableBlockSelect: {\n        set: function (val) {\n            this.$blockSelectEnabled = val;\n        },\n        value: true\n    }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n    this.foldingStartMarker = null;\n    this.foldingStopMarker = null;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.foldingStartMarker.test(line))\n            return \"start\";\n        if (foldStyle == \"markbeginend\"\n            && this.foldingStopMarker\n            && this.foldingStopMarker.test(line))\n            return \"end\";\n        return \"\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        return null;\n    };\n    this.indentationBlock = function (session, row, column) {\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1)\n            return;\n        var startColumn = column || line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            var level = session.getLine(row).search(re);\n            if (level == -1)\n                continue;\n            if (level <= startLevel) {\n                var token = session.getTokenAt(row, 0);\n                if (!token || token.type !== \"string\")\n                    break;\n            }\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n        var start = { row: row, column: column + 1 };\n        var end = session.$findClosingBracket(bracket, start, typeRe);\n        if (!end)\n            return;\n        var fw = session.foldWidgets[end.row];\n        if (fw == null)\n            fw = session.getFoldWidget(end.row);\n        if (fw == \"start\" && end.row > start.row) {\n            end.row--;\n            end.column = session.getLine(end.row).length;\n        }\n        return Range.fromPoints(start, end);\n    };\n    this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n        var end = { row: row, column: column };\n        var start = session.$findOpeningBracket(bracket, end);\n        if (!start)\n            return;\n        start.column++;\n        end.column--;\n        return Range.fromPoints(start, end);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nfunction LineWidgets(session) {\n    this.session = session;\n    this.session.widgetManager = this;\n    this.session.getRowLength = this.getRowLength;\n    this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n    this.updateOnChange = this.updateOnChange.bind(this);\n    this.renderWidgets = this.renderWidgets.bind(this);\n    this.measureWidgets = this.measureWidgets.bind(this);\n    this.session._changedWidgets = [];\n    this.$onChangeEditor = this.$onChangeEditor.bind(this);\n    this.session.on(\"change\", this.updateOnChange);\n    this.session.on(\"changeFold\", this.updateOnFold);\n    this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n(function () {\n    this.getRowLength = function (row) {\n        var h;\n        if (this.lineWidgets)\n            h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        else\n            h = 0;\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1 + h;\n        }\n        else {\n            return this.$wrapData[row].length + 1 + h;\n        }\n    };\n    this.$getWidgetScreenLength = function () {\n        var screenRows = 0;\n        this.lineWidgets.forEach(function (w) {\n            if (w && w.rowCount && !w.hidden)\n                screenRows += w.rowCount;\n        });\n        return screenRows;\n    };\n    this.$onChangeEditor = function (e) {\n        this.attach(e.editor);\n    };\n    this.attach = function (editor) {\n        if (editor && editor.widgetManager && editor.widgetManager != this)\n            editor.widgetManager.detach();\n        if (this.editor == editor)\n            return;\n        this.detach();\n        this.editor = editor;\n        if (editor) {\n            editor.widgetManager = this;\n            editor.renderer.on(\"beforeRender\", this.measureWidgets);\n            editor.renderer.on(\"afterRender\", this.renderWidgets);\n        }\n    };\n    this.detach = function (e) {\n        var editor = this.editor;\n        if (!editor)\n            return;\n        this.editor = null;\n        editor.widgetManager = null;\n        editor.renderer.off(\"beforeRender\", this.measureWidgets);\n        editor.renderer.off(\"afterRender\", this.renderWidgets);\n        var lineWidgets = this.session.lineWidgets;\n        lineWidgets && lineWidgets.forEach(function (w) {\n            if (w && w.el && w.el.parentNode) {\n                w._inDocument = false;\n                w.el.parentNode.removeChild(w.el);\n            }\n        });\n    };\n    this.updateOnFold = function (e, session) {\n        var lineWidgets = session.lineWidgets;\n        if (!lineWidgets || !e.action)\n            return;\n        var fold = e.data;\n        var start = fold.start.row;\n        var end = fold.end.row;\n        var hide = e.action == \"add\";\n        for (var i = start + 1; i < end; i++) {\n            if (lineWidgets[i])\n                lineWidgets[i].hidden = hide;\n        }\n        if (lineWidgets[end]) {\n            if (hide) {\n                if (!lineWidgets[start])\n                    lineWidgets[start] = lineWidgets[end];\n                else\n                    lineWidgets[end].hidden = hide;\n            }\n            else {\n                if (lineWidgets[start] == lineWidgets[end])\n                    lineWidgets[start] = undefined;\n                lineWidgets[end].hidden = hide;\n            }\n        }\n    };\n    this.updateOnChange = function (delta) {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n        if (len === 0) {\n        }\n        else if (delta.action == \"remove\") {\n            var removed = lineWidgets.splice(startRow + 1, len);\n            if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n                lineWidgets[startRow] = removed.pop();\n            }\n            removed.forEach(function (w) {\n                w && this.removeLineWidget(w);\n            }, this);\n            this.$updateRows();\n        }\n        else {\n            var args = new Array(len);\n            if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n                if (delta.start.column > lineWidgets[startRow].column)\n                    startRow++;\n            }\n            args.unshift(startRow, 0);\n            lineWidgets.splice.apply(lineWidgets, args);\n            this.$updateRows();\n        }\n    };\n    this.$updateRows = function () {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var noWidgets = true;\n        lineWidgets.forEach(function (w, i) {\n            if (w) {\n                noWidgets = false;\n                w.row = i;\n                while (w.$oldWidget) {\n                    w.$oldWidget.row = i;\n                    w = w.$oldWidget;\n                }\n            }\n        });\n        if (noWidgets)\n            this.session.lineWidgets = null;\n    };\n    this.$registerLineWidget = function (w) {\n        if (!this.session.lineWidgets)\n            this.session.lineWidgets = new Array(this.session.getLength());\n        var old = this.session.lineWidgets[w.row];\n        if (old) {\n            w.$oldWidget = old;\n            if (old.el && old.el.parentNode) {\n                old.el.parentNode.removeChild(old.el);\n                old._inDocument = false;\n            }\n        }\n        this.session.lineWidgets[w.row] = w;\n        return w;\n    };\n    this.addLineWidget = function (w) {\n        this.$registerLineWidget(w);\n        w.session = this.session;\n        if (!this.editor)\n            return w;\n        var renderer = this.editor.renderer;\n        if (w.html && !w.el) {\n            w.el = dom.createElement(\"div\");\n            w.el.innerHTML = w.html;\n        }\n        if (w.el) {\n            dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n            w.el.style.position = \"absolute\";\n            w.el.style.zIndex = 5;\n            renderer.container.appendChild(w.el);\n            w._inDocument = true;\n            if (!w.coverGutter) {\n                w.el.style.zIndex = 3;\n            }\n            if (w.pixelHeight == null) {\n                w.pixelHeight = w.el.offsetHeight;\n            }\n        }\n        if (w.rowCount == null) {\n            w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n        }\n        var fold = this.session.getFoldAt(w.row, 0);\n        w.$fold = fold;\n        if (fold) {\n            var lineWidgets = this.session.lineWidgets;\n            if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n                lineWidgets[fold.start.row] = w;\n            else\n                w.hidden = true;\n        }\n        this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n        this.$updateRows();\n        this.renderWidgets(null, renderer);\n        this.onWidgetChanged(w);\n        return w;\n    };\n    this.removeLineWidget = function (w) {\n        w._inDocument = false;\n        w.session = null;\n        if (w.el && w.el.parentNode)\n            w.el.parentNode.removeChild(w.el);\n        if (w.editor && w.editor.destroy)\n            try {\n                w.editor.destroy();\n            }\n            catch (e) { }\n        if (this.session.lineWidgets) {\n            var w1 = this.session.lineWidgets[w.row];\n            if (w1 == w) {\n                this.session.lineWidgets[w.row] = w.$oldWidget;\n                if (w.$oldWidget)\n                    this.onWidgetChanged(w.$oldWidget);\n            }\n            else {\n                while (w1) {\n                    if (w1.$oldWidget == w) {\n                        w1.$oldWidget = w.$oldWidget;\n                        break;\n                    }\n                    w1 = w1.$oldWidget;\n                }\n            }\n        }\n        this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n        this.$updateRows();\n    };\n    this.getWidgetsAtRow = function (row) {\n        var lineWidgets = this.session.lineWidgets;\n        var w = lineWidgets && lineWidgets[row];\n        var list = [];\n        while (w) {\n            list.push(w);\n            w = w.$oldWidget;\n        }\n        return list;\n    };\n    this.onWidgetChanged = function (w) {\n        this.session._changedWidgets.push(w);\n        this.editor && this.editor.renderer.updateFull();\n    };\n    this.measureWidgets = function (e, renderer) {\n        var changedWidgets = this.session._changedWidgets;\n        var config = renderer.layerConfig;\n        if (!changedWidgets || !changedWidgets.length)\n            return;\n        var min = Infinity;\n        for (var i = 0; i < changedWidgets.length; i++) {\n            var w = changedWidgets[i];\n            if (!w || !w.el)\n                continue;\n            if (w.session != this.session)\n                continue;\n            if (!w._inDocument) {\n                if (this.session.lineWidgets[w.row] != w)\n                    continue;\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            w.h = w.el.offsetHeight;\n            if (!w.fixedWidth) {\n                w.w = w.el.offsetWidth;\n                w.screenWidth = Math.ceil(w.w / config.characterWidth);\n            }\n            var rowCount = w.h / config.lineHeight;\n            if (w.coverLine) {\n                rowCount -= this.session.getRowLineCount(w.row);\n                if (rowCount < 0)\n                    rowCount = 0;\n            }\n            if (w.rowCount != rowCount) {\n                w.rowCount = rowCount;\n                if (w.row < min)\n                    min = w.row;\n            }\n        }\n        if (min != Infinity) {\n            this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n            this.session.lineWidgetWidth = null;\n        }\n        this.session._changedWidgets = [];\n    };\n    this.renderWidgets = function (e, renderer) {\n        var config = renderer.layerConfig;\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var first = Math.min(this.firstRow, config.firstRow);\n        var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n        while (first > 0 && !lineWidgets[first])\n            first--;\n        this.firstRow = config.firstRow;\n        this.lastRow = config.lastRow;\n        renderer.$cursorLayer.config = config;\n        for (var i = first; i <= last; i++) {\n            var w = lineWidgets[i];\n            if (!w || !w.el)\n                continue;\n            if (w.hidden) {\n                w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n                continue;\n            }\n            if (!w._inDocument) {\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n            if (!w.coverLine)\n                top += config.lineHeight * this.session.getRowLineCount(w.row);\n            w.el.style.top = top - config.offset + \"px\";\n            var left = w.coverGutter ? 0 : renderer.gutterWidth;\n            if (!w.fixedWidth)\n                left -= renderer.scrollLeft;\n            w.el.style.left = left + \"px\";\n            if (w.fullWidth && w.screenWidth) {\n                w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n            }\n            if (w.fixedWidth) {\n                w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n            }\n            else {\n                w.el.style.right = \"\";\n            }\n        }\n    };\n}).call(LineWidgets.prototype);\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nfunction binarySearch(array, needle, comparator) {\n    var first = 0;\n    var last = array.length - 1;\n    while (first <= last) {\n        var mid = (first + last) >> 1;\n        var c = comparator(needle, array[mid]);\n        if (c > 0)\n            first = mid + 1;\n        else if (c < 0)\n            last = mid - 1;\n        else\n            return mid;\n    }\n    return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n    var annotations = session.getAnnotations().sort(Range.comparePoints);\n    if (!annotations.length)\n        return;\n    var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n    if (i < 0)\n        i = -i - 1;\n    if (i >= annotations.length)\n        i = dir > 0 ? 0 : annotations.length - 1;\n    else if (i === 0 && dir < 0)\n        i = annotations.length - 1;\n    var annotation = annotations[i];\n    if (!annotation || !dir)\n        return;\n    if (annotation.row === row) {\n        do {\n            annotation = annotations[i += dir];\n        } while (annotation && annotation.row === row);\n        if (!annotation)\n            return annotations.slice();\n    }\n    var matched = [];\n    row = annotation.row;\n    do {\n        matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n        annotation = annotations[i += dir];\n    } while (annotation && annotation.row == row);\n    return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n    var session = editor.session;\n    if (!session.widgetManager) {\n        session.widgetManager = new LineWidgets(session);\n        session.widgetManager.attach(editor);\n    }\n    var pos = editor.getCursorPosition();\n    var row = pos.row;\n    var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n        return w.type == \"errorMarker\";\n    })[0];\n    if (oldWidget) {\n        oldWidget.destroy();\n    }\n    else {\n        row -= dir;\n    }\n    var annotations = findAnnotations(session, row, dir);\n    var gutterAnno;\n    if (annotations) {\n        var annotation = annotations[0];\n        pos.column = (annotation.pos && typeof annotation.column != \"number\"\n            ? annotation.pos.sc\n            : annotation.column) || 0;\n        pos.row = annotation.row;\n        gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n    }\n    else if (oldWidget) {\n        return;\n    }\n    else {\n        gutterAnno = {\n            text: [\"Looks good!\"],\n            className: \"ace_ok\"\n        };\n    }\n    editor.session.unfold(pos.row);\n    editor.selection.moveToPosition(pos);\n    var w = {\n        row: pos.row,\n        fixedWidth: true,\n        coverGutter: true,\n        el: dom.createElement(\"div\"),\n        type: \"errorMarker\"\n    };\n    var el = w.el.appendChild(dom.createElement(\"div\"));\n    var arrow = w.el.appendChild(dom.createElement(\"div\"));\n    arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n    var left = editor.renderer.$cursorLayer\n        .getPixelPosition(pos).left;\n    arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n    w.el.className = \"error_widget_wrapper\";\n    el.className = \"error_widget \" + gutterAnno.className;\n    el.innerHTML = gutterAnno.text.join(\"<br>\");\n    el.appendChild(dom.createElement(\"div\"));\n    var kb = function (_, hashId, keyString) {\n        if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n            w.destroy();\n            return { command: \"null\" };\n        }\n    };\n    w.destroy = function () {\n        if (editor.$mouseHandler.isMousePressed)\n            return;\n        editor.keyBinding.removeKeyboardHandler(kb);\n        session.widgetManager.removeLineWidget(w);\n        editor.off(\"changeSelection\", w.destroy);\n        editor.off(\"changeSession\", w.destroy);\n        editor.off(\"mouseup\", w.destroy);\n        editor.off(\"change\", w.destroy);\n    };\n    editor.keyBinding.addKeyboardHandler(kb);\n    editor.on(\"changeSelection\", w.destroy);\n    editor.on(\"changeSession\", w.destroy);\n    editor.on(\"mouseup\", w.destroy);\n    editor.on(\"change\", w.destroy);\n    editor.session.widgetManager.addLineWidget(w);\n    w.el.onmousedown = editor.focus.bind(editor);\n    editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n    .error_widget_wrapper {\\n        background: inherit;\\n        color: inherit;\\n        border:none\\n    }\\n    .error_widget {\\n        border-top: solid 2px;\\n        border-bottom: solid 2px;\\n        margin: 5px 0;\\n        padding: 10px 40px;\\n        white-space: pre-wrap;\\n    }\\n    .error_widget.ace_error, .error_widget_arrow.ace_error{\\n        border-color: #ff5a5a\\n    }\\n    .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n        border-color: #F1D817\\n    }\\n    .error_widget.ace_info, .error_widget_arrow.ace_info{\\n        border-color: #5a5a5a\\n    }\\n    .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n        border-color: #5aaa5a\\n    }\\n    .error_widget_arrow {\\n        position: absolute;\\n        border: solid 5px;\\n        border-top-color: transparent!important;\\n        border-right-color: transparent!important;\\n        border-left-color: transparent!important;\\n        top: -5px;\\n    }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @class Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n    if (typeof el == \"string\") {\n        var _id = el;\n        el = document.getElementById(_id);\n        if (!el)\n            throw new Error(\"ace.edit can't find div #\" + _id);\n    }\n    if (el && el.env && el.env.editor instanceof Editor)\n        return el.env.editor;\n    var value = \"\";\n    if (el && /input|textarea/i.test(el.tagName)) {\n        var oldNode = el;\n        value = oldNode.value;\n        el = dom.createElement(\"pre\");\n        oldNode.parentNode.replaceChild(el, oldNode);\n    }\n    else if (el) {\n        value = el.textContent;\n        el.innerHTML = \"\";\n    }\n    var doc = exports.createEditSession(value);\n    var editor = new Editor(new Renderer(el), doc, options);\n    var env = {\n        document: doc,\n        editor: editor,\n        onResize: editor.resize.bind(editor, null)\n    };\n    if (oldNode)\n        env.textarea = oldNode;\n    event.addListener(window, \"resize\", env.onResize);\n    editor.on(\"destroy\", function () {\n        event.removeListener(window, \"resize\", env.onResize);\n        env.editor.container.env = null; // prevent memory leak on old ie\n    });\n    editor.container.env = editor.env = env;\n    return editor;\n};\nexports.createEditSession = function (text, mode) {\n    var doc = new EditSession(text, mode);\n    doc.setUndoManager(new UndoManager());\n    return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nexports.version = exports.config.version;\n\n});            (function() {\n                ace.require([\"ace/ace\"], function(a) {\n                    if (a) {\n                        a.config.init(true);\n                        a.define = ace.define;\n                    }\n                    if (!window.ace)\n                        window.ace = a;\n                    for (var key in a) if (a.hasOwnProperty(key))\n                        window.ace[key] = a[key];\n                    window.ace[\"default\"] = window.ace;\n                    if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                        module.exports = window.ace;\n                    }\n                });\n            })();\n        "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-beautify.js",
    "content": "ace.define(\"ace/ext/beautify\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){// [WIP]\n\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nexports.singletonTags = [\"area\", \"base\", \"br\", \"col\", \"command\", \"embed\", \"hr\", \"html\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"];\nexports.blockTags = [\"article\", \"aside\", \"blockquote\", \"body\", \"div\", \"dl\", \"fieldset\", \"footer\", \"form\", \"head\", \"header\", \"html\", \"nav\", \"ol\", \"p\", \"script\", \"section\", \"style\", \"table\", \"tbody\", \"tfoot\", \"thead\", \"ul\"];\nexports.formatOptions = {\n    lineBreaksAfterCommasInCurlyBlock: true\n};\nexports.beautify = function (session) {\n    var iterator = new TokenIterator(session, 0, 0);\n    var token = iterator.getCurrentToken();\n    var tabString = session.getTabString();\n    var singletonTags = exports.singletonTags;\n    var blockTags = exports.blockTags;\n    var formatOptions = exports.formatOptions || {};\n    var nextToken;\n    var breakBefore = false;\n    var spaceBefore = false;\n    var spaceAfter = false;\n    var code = \"\";\n    var value = \"\";\n    var tagName = \"\";\n    var depth = 0;\n    var lastDepth = 0;\n    var lastIndent = 0;\n    var indent = 0;\n    var unindent = 0;\n    var roundDepth = 0;\n    var curlyDepth = 0;\n    var row;\n    var curRow = 0;\n    var rowsToAdd = 0;\n    var rowTokens = [];\n    var abort = false;\n    var i;\n    var indentNextLine = false;\n    var inTag = false;\n    var inCSS = false;\n    var inBlock = false;\n    var levels = { 0: 0 };\n    var parents = [];\n    var caseBody = false;\n    var trimNext = function () {\n        if (nextToken && nextToken.value && nextToken.type !== 'string.regexp')\n            nextToken.value = nextToken.value.replace(/^\\s*/, \"\");\n    };\n    var trimLine = function () {\n        var end = code.length - 1;\n        while (true) {\n            if (end == 0)\n                break;\n            if (code[end] !== \" \")\n                break;\n            end = end - 1;\n        }\n        code = code.slice(0, end + 1);\n    };\n    var trimCode = function () {\n        code = code.trimRight();\n        breakBefore = false;\n    };\n    while (token !== null) {\n        curRow = iterator.getCurrentTokenRow();\n        rowTokens = iterator.$rowTokens;\n        nextToken = iterator.stepForward();\n        if (typeof token !== \"undefined\") {\n            value = token.value;\n            unindent = 0;\n            inCSS = (tagName === \"style\" || session.$modeId === \"ace/mode/css\");\n            if (is(token, \"tag-open\")) {\n                inTag = true;\n                if (nextToken)\n                    inBlock = (blockTags.indexOf(nextToken.value) !== -1);\n                if (value === \"</\") {\n                    if (inBlock && !breakBefore && rowsToAdd < 1)\n                        rowsToAdd++;\n                    if (inCSS)\n                        rowsToAdd = 1;\n                    unindent = 1;\n                    inBlock = false;\n                }\n            }\n            else if (is(token, \"tag-close\")) {\n                inTag = false;\n            }\n            else if (is(token, \"comment.start\")) {\n                inBlock = true;\n            }\n            else if (is(token, \"comment.end\")) {\n                inBlock = false;\n            }\n            if (!inTag && !rowsToAdd && token.type === \"paren.rparen\" && token.value.substr(0, 1) === \"}\") {\n                rowsToAdd++;\n            }\n            if (curRow !== row) {\n                rowsToAdd = curRow;\n                if (row)\n                    rowsToAdd -= row;\n            }\n            if (rowsToAdd) {\n                trimCode();\n                for (; rowsToAdd > 0; rowsToAdd--)\n                    code += \"\\n\";\n                breakBefore = true;\n                if (!is(token, \"comment\") && !token.type.match(/^(comment|string)$/))\n                    value = value.trimLeft();\n            }\n            if (value) {\n                if (token.type === \"keyword\" && value.match(/^(if|else|elseif|for|foreach|while|switch)$/)) {\n                    parents[depth] = value;\n                    trimNext();\n                    spaceAfter = true;\n                    if (value.match(/^(else|elseif)$/)) {\n                        if (code.match(/\\}[\\s]*$/)) {\n                            trimCode();\n                            spaceBefore = true;\n                        }\n                    }\n                }\n                else if (token.type === \"paren.lparen\") {\n                    trimNext();\n                    if (value.substr(-1) === \"{\") {\n                        spaceAfter = true;\n                        indentNextLine = false;\n                        if (!inTag)\n                            rowsToAdd = 1;\n                    }\n                    if (value.substr(0, 1) === \"{\") {\n                        spaceBefore = true;\n                        if (code.substr(-1) !== '[' && code.trimRight().substr(-1) === '[') {\n                            trimCode();\n                            spaceBefore = false;\n                        }\n                        else if (code.trimRight().substr(-1) === ')') {\n                            trimCode();\n                        }\n                        else {\n                            trimLine();\n                        }\n                    }\n                }\n                else if (token.type === \"paren.rparen\") {\n                    unindent = 1;\n                    if (value.substr(0, 1) === \"}\") {\n                        if (parents[depth - 1] === 'case')\n                            unindent++;\n                        if (code.trimRight().substr(-1) === '{') {\n                            trimCode();\n                        }\n                        else {\n                            spaceBefore = true;\n                            if (inCSS)\n                                rowsToAdd += 2;\n                        }\n                    }\n                    if (value.substr(0, 1) === \"]\") {\n                        if (code.substr(-1) !== '}' && code.trimRight().substr(-1) === '}') {\n                            spaceBefore = false;\n                            indent++;\n                            trimCode();\n                        }\n                    }\n                    if (value.substr(0, 1) === \")\") {\n                        if (code.substr(-1) !== '(' && code.trimRight().substr(-1) === '(') {\n                            spaceBefore = false;\n                            indent++;\n                            trimCode();\n                        }\n                    }\n                    trimLine();\n                }\n                else if ((token.type === \"keyword.operator\" || token.type === \"keyword\") && value.match(/^(=|==|===|!=|!==|&&|\\|\\||and|or|xor|\\+=|.=|>|>=|<|<=|=>)$/)) {\n                    trimCode();\n                    trimNext();\n                    spaceBefore = true;\n                    spaceAfter = true;\n                }\n                else if (token.type === \"punctuation.operator\" && value === ';') {\n                    trimCode();\n                    trimNext();\n                    spaceAfter = true;\n                    if (inCSS)\n                        rowsToAdd++;\n                }\n                else if (token.type === \"punctuation.operator\" && value.match(/^(:|,)$/)) {\n                    trimCode();\n                    trimNext();\n                    if (value.match(/^(,)$/) && curlyDepth > 0 && roundDepth === 0 && formatOptions.lineBreaksAfterCommasInCurlyBlock) {\n                        rowsToAdd++;\n                    }\n                    else {\n                        spaceAfter = true;\n                        breakBefore = false;\n                    }\n                }\n                else if (token.type === \"support.php_tag\" && value === \"?>\" && !breakBefore) {\n                    trimCode();\n                    spaceBefore = true;\n                }\n                else if (is(token, \"attribute-name\") && code.substr(-1).match(/^\\s$/)) {\n                    spaceBefore = true;\n                }\n                else if (is(token, \"attribute-equals\")) {\n                    trimLine();\n                    trimNext();\n                }\n                else if (is(token, \"tag-close\")) {\n                    trimLine();\n                    if (value === \"/>\")\n                        spaceBefore = true;\n                }\n                else if (token.type === \"keyword\" && value.match(/^(case|default)$/)) {\n                    if (caseBody)\n                        unindent = 1;\n                }\n                if (breakBefore && !(token.type.match(/^(comment)$/) && !value.substr(0, 1).match(/^[/#]$/)) && !(token.type.match(/^(string)$/) && !value.substr(0, 1).match(/^['\"@]$/))) {\n                    indent = lastIndent;\n                    if (depth > lastDepth) {\n                        indent++;\n                        for (i = depth; i > lastDepth; i--)\n                            levels[i] = indent;\n                    }\n                    else if (depth < lastDepth)\n                        indent = levels[depth];\n                    lastDepth = depth;\n                    lastIndent = indent;\n                    if (unindent)\n                        indent -= unindent;\n                    if (indentNextLine && !roundDepth) {\n                        indent++;\n                        indentNextLine = false;\n                    }\n                    for (i = 0; i < indent; i++)\n                        code += tabString;\n                }\n                if (token.type === \"keyword\" && value.match(/^(case|default)$/)) {\n                    if (caseBody === false) {\n                        parents[depth] = value;\n                        depth++;\n                        caseBody = true;\n                    }\n                }\n                else if (token.type === \"keyword\" && value.match(/^(break)$/)) {\n                    if (parents[depth - 1] && parents[depth - 1].match(/^(case|default)$/)) {\n                        depth--;\n                        caseBody = false;\n                    }\n                }\n                if (token.type === \"paren.lparen\") {\n                    roundDepth += (value.match(/\\(/g) || []).length;\n                    curlyDepth += (value.match(/\\{/g) || []).length;\n                    depth += value.length;\n                }\n                if (token.type === \"keyword\" && value.match(/^(if|else|elseif|for|while)$/)) {\n                    indentNextLine = true;\n                    roundDepth = 0;\n                }\n                else if (!roundDepth && value.trim() && token.type !== \"comment\")\n                    indentNextLine = false;\n                if (token.type === \"paren.rparen\") {\n                    roundDepth -= (value.match(/\\)/g) || []).length;\n                    curlyDepth -= (value.match(/\\}/g) || []).length;\n                    for (i = 0; i < value.length; i++) {\n                        depth--;\n                        if (value.substr(i, 1) === '}' && parents[depth] === 'case') {\n                            depth--;\n                        }\n                    }\n                }\n                if (token.type == \"text\")\n                    value = value.replace(/\\s+$/, \" \");\n                if (spaceBefore && !breakBefore) {\n                    trimLine();\n                    if (code.substr(-1) !== \"\\n\")\n                        code += \" \";\n                }\n                code += value;\n                if (spaceAfter)\n                    code += \" \";\n                breakBefore = false;\n                spaceBefore = false;\n                spaceAfter = false;\n                if ((is(token, \"tag-close\") && (inBlock || blockTags.indexOf(tagName) !== -1)) || (is(token, \"doctype\") && value === \">\")) {\n                    if (inBlock && nextToken && nextToken.value === \"</\")\n                        rowsToAdd = -1;\n                    else\n                        rowsToAdd = 1;\n                }\n                if (nextToken && singletonTags.indexOf(nextToken.value) === -1) {\n                    if (is(token, \"tag-open\") && value === \"</\") {\n                        depth--;\n                    }\n                    else if (is(token, \"tag-open\") && value === \"<\") {\n                        depth++;\n                    }\n                    else if (is(token, \"tag-close\") && value === \"/>\") {\n                        depth--;\n                    }\n                }\n                if (is(token, \"tag-name\")) {\n                    tagName = value;\n                }\n                row = curRow;\n            }\n        }\n        token = nextToken;\n    }\n    code = code.trim();\n    session.doc.setValue(code);\n};\nexports.commands = [{\n        name: \"beautify\",\n        description: \"Format selection (Beautify)\",\n        exec: function (editor) {\n            exports.beautify(editor.session);\n        },\n        bindKey: \"Ctrl-Shift-B\"\n    }];\n\n});                (function() {\n                    ace.require([\"ace/ext/beautify\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-code_lens.js",
    "content": "ace.define(\"ace/ext/code_lens\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/editor\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\nfunction clearLensElements(renderer) {\n    var textLayer = renderer.$textLayer;\n    var lensElements = textLayer.$lenses;\n    if (lensElements)\n        lensElements.forEach(function (el) { el.remove(); });\n    textLayer.$lenses = null;\n}\nfunction renderWidgets(changes, renderer) {\n    var changed = changes & renderer.CHANGE_LINES\n        || changes & renderer.CHANGE_FULL\n        || changes & renderer.CHANGE_SCROLL\n        || changes & renderer.CHANGE_TEXT;\n    if (!changed)\n        return;\n    var session = renderer.session;\n    var lineWidgets = renderer.session.lineWidgets;\n    var textLayer = renderer.$textLayer;\n    var lensElements = textLayer.$lenses;\n    if (!lineWidgets) {\n        if (lensElements)\n            clearLensElements(renderer);\n        return;\n    }\n    var textCells = renderer.$textLayer.$lines.cells;\n    var config = renderer.layerConfig;\n    var padding = renderer.$padding;\n    if (!lensElements)\n        lensElements = textLayer.$lenses = [];\n    var index = 0;\n    for (var i = 0; i < textCells.length; i++) {\n        var row = textCells[i].row;\n        var widget = lineWidgets[row];\n        var lenses = widget && widget.lenses;\n        if (!lenses || !lenses.length)\n            continue;\n        var lensContainer = lensElements[index];\n        if (!lensContainer) {\n            lensContainer = lensElements[index]\n                = dom.buildDom([\"div\", { class: \"ace_codeLens\" }], renderer.container);\n        }\n        lensContainer.style.height = config.lineHeight + \"px\";\n        index++;\n        for (var j = 0; j < lenses.length; j++) {\n            var el = lensContainer.childNodes[2 * j];\n            if (!el) {\n                if (j != 0)\n                    lensContainer.appendChild(dom.createTextNode(\"\\xa0|\\xa0\"));\n                el = dom.buildDom([\"a\"], lensContainer);\n            }\n            el.textContent = lenses[j].title;\n            el.lensCommand = lenses[j];\n        }\n        while (lensContainer.childNodes.length > 2 * j - 1)\n            lensContainer.lastChild.remove();\n        var top = renderer.$cursorLayer.getPixelPosition({\n            row: row,\n            column: 0\n        }, true).top - config.lineHeight * widget.rowsAbove - config.offset;\n        lensContainer.style.top = top + \"px\";\n        var left = renderer.gutterWidth;\n        var indent = session.getLine(row).search(/\\S|$/);\n        if (indent == -1)\n            indent = 0;\n        left += indent * config.characterWidth;\n        lensContainer.style.paddingLeft = padding + left + \"px\";\n    }\n    while (index < lensElements.length)\n        lensElements.pop().remove();\n}\nfunction clearCodeLensWidgets(session) {\n    if (!session.lineWidgets)\n        return;\n    var widgetManager = session.widgetManager;\n    session.lineWidgets.forEach(function (widget) {\n        if (widget && widget.lenses)\n            widgetManager.removeLineWidget(widget);\n    });\n}\nexports.setLenses = function (session, lenses) {\n    var firstRow = Number.MAX_VALUE;\n    clearCodeLensWidgets(session);\n    lenses && lenses.forEach(function (lens) {\n        var row = lens.start.row;\n        var column = lens.start.column;\n        var widget = session.lineWidgets && session.lineWidgets[row];\n        if (!widget || !widget.lenses) {\n            widget = session.widgetManager.$registerLineWidget({\n                rowCount: 1,\n                rowsAbove: 1,\n                row: row,\n                column: column,\n                lenses: []\n            });\n        }\n        widget.lenses.push(lens.command);\n        if (row < firstRow)\n            firstRow = row;\n    });\n    session._emit(\"changeFold\", { data: { start: { row: firstRow } } });\n    return firstRow;\n};\nfunction attachToEditor(editor) {\n    editor.codeLensProviders = [];\n    editor.renderer.on(\"afterRender\", renderWidgets);\n    if (!editor.$codeLensClickHandler) {\n        editor.$codeLensClickHandler = function (e) {\n            var command = e.target.lensCommand;\n            if (!command)\n                return;\n            editor.execCommand(command.id, command.arguments);\n            editor._emit(\"codeLensClick\", e);\n        };\n        event.addListener(editor.container, \"click\", editor.$codeLensClickHandler, editor);\n    }\n    editor.$updateLenses = function () {\n        var session = editor.session;\n        if (!session)\n            return;\n        if (!session.widgetManager) {\n            session.widgetManager = new LineWidgets(session);\n            session.widgetManager.attach(editor);\n        }\n        var providersToWaitNum = editor.codeLensProviders.length;\n        var lenses = [];\n        editor.codeLensProviders.forEach(function (provider) {\n            provider.provideCodeLenses(session, function (err, payload) {\n                if (err)\n                    return;\n                payload.forEach(function (lens) {\n                    lenses.push(lens);\n                });\n                providersToWaitNum--;\n                if (providersToWaitNum == 0) {\n                    applyLenses();\n                }\n            });\n        });\n        function applyLenses() {\n            var cursor = session.selection.cursor;\n            var oldRow = session.documentToScreenRow(cursor);\n            var scrollTop = session.getScrollTop();\n            var firstRow = exports.setLenses(session, lenses);\n            var lastDelta = session.$undoManager && session.$undoManager.$lastDelta;\n            if (lastDelta && lastDelta.action == \"remove\" && lastDelta.lines.length > 1)\n                return;\n            var row = session.documentToScreenRow(cursor);\n            var lineHeight = editor.renderer.layerConfig.lineHeight;\n            var top = session.getScrollTop() + (row - oldRow) * lineHeight;\n            if (firstRow == 0 && scrollTop < lineHeight / 4 && scrollTop > -lineHeight / 4) {\n                top = -lineHeight;\n            }\n            session.setScrollTop(top);\n        }\n    };\n    var updateLenses = lang.delayedCall(editor.$updateLenses);\n    editor.$updateLensesOnInput = function () {\n        updateLenses.delay(250);\n    };\n    editor.on(\"input\", editor.$updateLensesOnInput);\n}\nfunction detachFromEditor(editor) {\n    editor.off(\"input\", editor.$updateLensesOnInput);\n    editor.renderer.off(\"afterRender\", renderWidgets);\n    if (editor.$codeLensClickHandler)\n        editor.container.removeEventListener(\"click\", editor.$codeLensClickHandler);\n}\nexports.registerCodeLensProvider = function (editor, codeLensProvider) {\n    editor.setOption(\"enableCodeLens\", true);\n    editor.codeLensProviders.push(codeLensProvider);\n    editor.$updateLensesOnInput();\n};\nexports.clear = function (session) {\n    exports.setLenses(session, null);\n};\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    enableCodeLens: {\n        set: function (val) {\n            if (val) {\n                attachToEditor(this);\n            }\n            else {\n                detachFromEditor(this);\n            }\n        }\n    }\n});\ndom.importCssString(\"\\n.ace_codeLens {\\n    position: absolute;\\n    color: #aaa;\\n    font-size: 88%;\\n    background: inherit;\\n    width: 100%;\\n    display: flex;\\n    align-items: flex-end;\\n    pointer-events: none;\\n}\\n.ace_codeLens > a {\\n    cursor: pointer;\\n    pointer-events: auto;\\n}\\n.ace_codeLens > a:hover {\\n    color: #0000ff;\\n    text-decoration: underline;\\n}\\n.ace_dark > .ace_codeLens > a:hover {\\n    color: #4e94ce;\\n}\\n\", \"codelense.css\", false);\n\n});                (function() {\n                    ace.require([\"ace/ext/code_lens\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-elastic_tabstops_lite.js",
    "content": "ace.define(\"ace/ext/elastic_tabstops_lite\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar ElasticTabstopsLite = function (editor) {\n    this.$editor = editor;\n    var self = this;\n    var changedRows = [];\n    var recordChanges = false;\n    this.onAfterExec = function () {\n        recordChanges = false;\n        self.processRows(changedRows);\n        changedRows = [];\n    };\n    this.onExec = function () {\n        recordChanges = true;\n    };\n    this.onChange = function (delta) {\n        if (recordChanges) {\n            if (changedRows.indexOf(delta.start.row) == -1)\n                changedRows.push(delta.start.row);\n            if (delta.end.row != delta.start.row)\n                changedRows.push(delta.end.row);\n        }\n    };\n};\n(function () {\n    this.processRows = function (rows) {\n        this.$inChange = true;\n        var checkedRows = [];\n        for (var r = 0, rowCount = rows.length; r < rowCount; r++) {\n            var row = rows[r];\n            if (checkedRows.indexOf(row) > -1)\n                continue;\n            var cellWidthObj = this.$findCellWidthsForBlock(row);\n            var cellWidths = this.$setBlockCellWidthsToMax(cellWidthObj.cellWidths);\n            var rowIndex = cellWidthObj.firstRow;\n            for (var w = 0, l = cellWidths.length; w < l; w++) {\n                var widths = cellWidths[w];\n                checkedRows.push(rowIndex);\n                this.$adjustRow(rowIndex, widths);\n                rowIndex++;\n            }\n        }\n        this.$inChange = false;\n    };\n    this.$findCellWidthsForBlock = function (row) {\n        var cellWidths = [], widths;\n        var rowIter = row;\n        while (rowIter >= 0) {\n            widths = this.$cellWidthsForRow(rowIter);\n            if (widths.length == 0)\n                break;\n            cellWidths.unshift(widths);\n            rowIter--;\n        }\n        var firstRow = rowIter + 1;\n        rowIter = row;\n        var numRows = this.$editor.session.getLength();\n        while (rowIter < numRows - 1) {\n            rowIter++;\n            widths = this.$cellWidthsForRow(rowIter);\n            if (widths.length == 0)\n                break;\n            cellWidths.push(widths);\n        }\n        return { cellWidths: cellWidths, firstRow: firstRow };\n    };\n    this.$cellWidthsForRow = function (row) {\n        var selectionColumns = this.$selectionColumnsForRow(row);\n        var tabs = [-1].concat(this.$tabsForRow(row));\n        var widths = tabs.map(function (el) { return 0; }).slice(1);\n        var line = this.$editor.session.getLine(row);\n        for (var i = 0, len = tabs.length - 1; i < len; i++) {\n            var leftEdge = tabs[i] + 1;\n            var rightEdge = tabs[i + 1];\n            var rightmostSelection = this.$rightmostSelectionInCell(selectionColumns, rightEdge);\n            var cell = line.substring(leftEdge, rightEdge);\n            widths[i] = Math.max(cell.replace(/\\s+$/g, '').length, rightmostSelection - leftEdge);\n        }\n        return widths;\n    };\n    this.$selectionColumnsForRow = function (row) {\n        var selections = [], cursor = this.$editor.getCursorPosition();\n        if (this.$editor.session.getSelection().isEmpty()) {\n            if (row == cursor.row)\n                selections.push(cursor.column);\n        }\n        return selections;\n    };\n    this.$setBlockCellWidthsToMax = function (cellWidths) {\n        var startingNewBlock = true, blockStartRow, blockEndRow, maxWidth;\n        var columnInfo = this.$izip_longest(cellWidths);\n        for (var c = 0, l = columnInfo.length; c < l; c++) {\n            var column = columnInfo[c];\n            if (!column.push) {\n                console.error(column);\n                continue;\n            }\n            column.push(NaN);\n            for (var r = 0, s = column.length; r < s; r++) {\n                var width = column[r];\n                if (startingNewBlock) {\n                    blockStartRow = r;\n                    maxWidth = 0;\n                    startingNewBlock = false;\n                }\n                if (isNaN(width)) {\n                    blockEndRow = r;\n                    for (var j = blockStartRow; j < blockEndRow; j++) {\n                        cellWidths[j][c] = maxWidth;\n                    }\n                    startingNewBlock = true;\n                }\n                maxWidth = Math.max(maxWidth, width);\n            }\n        }\n        return cellWidths;\n    };\n    this.$rightmostSelectionInCell = function (selectionColumns, cellRightEdge) {\n        var rightmost = 0;\n        if (selectionColumns.length) {\n            var lengths = [];\n            for (var s = 0, length = selectionColumns.length; s < length; s++) {\n                if (selectionColumns[s] <= cellRightEdge)\n                    lengths.push(s);\n                else\n                    lengths.push(0);\n            }\n            rightmost = Math.max.apply(Math, lengths);\n        }\n        return rightmost;\n    };\n    this.$tabsForRow = function (row) {\n        var rowTabs = [], line = this.$editor.session.getLine(row), re = /\\t/g, match;\n        while ((match = re.exec(line)) != null) {\n            rowTabs.push(match.index);\n        }\n        return rowTabs;\n    };\n    this.$adjustRow = function (row, widths) {\n        var rowTabs = this.$tabsForRow(row);\n        if (rowTabs.length == 0)\n            return;\n        var bias = 0, location = -1;\n        var expandedSet = this.$izip(widths, rowTabs);\n        for (var i = 0, l = expandedSet.length; i < l; i++) {\n            var w = expandedSet[i][0], it = expandedSet[i][1];\n            location += 1 + w;\n            it += bias;\n            var difference = location - it;\n            if (difference == 0)\n                continue;\n            var partialLine = this.$editor.session.getLine(row).substr(0, it);\n            var strippedPartialLine = partialLine.replace(/\\s*$/g, \"\");\n            var ispaces = partialLine.length - strippedPartialLine.length;\n            if (difference > 0) {\n                this.$editor.session.getDocument().insertInLine({ row: row, column: it + 1 }, Array(difference + 1).join(\" \") + \"\\t\");\n                this.$editor.session.getDocument().removeInLine(row, it, it + 1);\n                bias += difference;\n            }\n            if (difference < 0 && ispaces >= -difference) {\n                this.$editor.session.getDocument().removeInLine(row, it + difference, it);\n                bias += difference;\n            }\n        }\n    };\n    this.$izip_longest = function (iterables) {\n        if (!iterables[0])\n            return [];\n        var longest = iterables[0].length;\n        var iterablesLength = iterables.length;\n        for (var i = 1; i < iterablesLength; i++) {\n            var iLength = iterables[i].length;\n            if (iLength > longest)\n                longest = iLength;\n        }\n        var expandedSet = [];\n        for (var l = 0; l < longest; l++) {\n            var set = [];\n            for (var i = 0; i < iterablesLength; i++) {\n                if (iterables[i][l] === \"\")\n                    set.push(NaN);\n                else\n                    set.push(iterables[i][l]);\n            }\n            expandedSet.push(set);\n        }\n        return expandedSet;\n    };\n    this.$izip = function (widths, tabs) {\n        var size = widths.length >= tabs.length ? tabs.length : widths.length;\n        var expandedSet = [];\n        for (var i = 0; i < size; i++) {\n            var set = [widths[i], tabs[i]];\n            expandedSet.push(set);\n        }\n        return expandedSet;\n    };\n}).call(ElasticTabstopsLite.prototype);\nexports.ElasticTabstopsLite = ElasticTabstopsLite;\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    useElasticTabstops: {\n        set: function (val) {\n            if (val) {\n                if (!this.elasticTabstops)\n                    this.elasticTabstops = new ElasticTabstopsLite(this);\n                this.commands.on(\"afterExec\", this.elasticTabstops.onAfterExec);\n                this.commands.on(\"exec\", this.elasticTabstops.onExec);\n                this.on(\"change\", this.elasticTabstops.onChange);\n            }\n            else if (this.elasticTabstops) {\n                this.commands.removeListener(\"afterExec\", this.elasticTabstops.onAfterExec);\n                this.commands.removeListener(\"exec\", this.elasticTabstops.onExec);\n                this.removeListener(\"change\", this.elasticTabstops.onChange);\n            }\n        }\n    }\n});\n\n});                (function() {\n                    ace.require([\"ace/ext/elastic_tabstops_lite\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-emmet.js",
    "content": "ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar clipboard = require(\"./clipboard\");\nvar VARIABLES = {\n    CURRENT_WORD: function (editor) {\n        return editor.session.getTextRange(editor.session.getWordRange());\n    },\n    SELECTION: function (editor, name, indentation) {\n        var text = editor.session.getTextRange();\n        if (indentation)\n            return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n        return text;\n    },\n    CURRENT_LINE: function (editor) {\n        return editor.session.getLine(editor.getCursorPosition().row);\n    },\n    PREV_LINE: function (editor) {\n        return editor.session.getLine(editor.getCursorPosition().row - 1);\n    },\n    LINE_INDEX: function (editor) {\n        return editor.getCursorPosition().row;\n    },\n    LINE_NUMBER: function (editor) {\n        return editor.getCursorPosition().row + 1;\n    },\n    SOFT_TABS: function (editor) {\n        return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n    },\n    TAB_SIZE: function (editor) {\n        return editor.session.getTabSize();\n    },\n    CLIPBOARD: function (editor) {\n        return clipboard.getText && clipboard.getText();\n    },\n    FILENAME: function (editor) {\n        return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n    },\n    FILENAME_BASE: function (editor) {\n        return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n    },\n    DIRECTORY: function (editor) {\n        return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n    },\n    FILEPATH: function (editor) { return \"/not implemented.txt\"; },\n    WORKSPACE_NAME: function () { return \"Unknown\"; },\n    FULLNAME: function () { return \"Unknown\"; },\n    BLOCK_COMMENT_START: function (editor) {\n        var mode = editor.session.$mode || {};\n        return mode.blockComment && mode.blockComment.start || \"\";\n    },\n    BLOCK_COMMENT_END: function (editor) {\n        var mode = editor.session.$mode || {};\n        return mode.blockComment && mode.blockComment.end || \"\";\n    },\n    LINE_COMMENT: function (editor) {\n        var mode = editor.session.$mode || {};\n        return mode.lineCommentStart || \"\";\n    },\n    CURRENT_YEAR: date.bind(null, { year: \"numeric\" }),\n    CURRENT_YEAR_SHORT: date.bind(null, { year: \"2-digit\" }),\n    CURRENT_MONTH: date.bind(null, { month: \"numeric\" }),\n    CURRENT_MONTH_NAME: date.bind(null, { month: \"long\" }),\n    CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: \"short\" }),\n    CURRENT_DATE: date.bind(null, { day: \"2-digit\" }),\n    CURRENT_DAY_NAME: date.bind(null, { weekday: \"long\" }),\n    CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: \"short\" }),\n    CURRENT_HOUR: date.bind(null, { hour: \"2-digit\", hour12: false }),\n    CURRENT_MINUTE: date.bind(null, { minute: \"2-digit\" }),\n    CURRENT_SECOND: date.bind(null, { second: \"2-digit\" })\n};\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\nfunction date(dateFormat) {\n    var str = new Date().toLocaleString(\"en-us\", dateFormat);\n    return str.length == 1 ? \"0\" + str : str;\n}\nvar SnippetManager = function () {\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getTokenizer = function () {\n        return SnippetManager.$tokenizer || this.createTokenizer();\n    };\n    this.createTokenizer = function () {\n        function TabstopToken(str) {\n            str = str.substr(1);\n            if (/^\\d+$/.test(str))\n                return [{ tabstopId: parseInt(str, 10) }];\n            return [{ text: str }];\n        }\n        function escape(ch) {\n            return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n        }\n        var formatMatcher = {\n            regex: \"/(\" + escape(\"/\") + \"+)/\",\n            onMatch: function (val, state, stack) {\n                var ts = stack[0];\n                ts.fmtString = true;\n                ts.guard = val.slice(1, -1);\n                ts.flag = \"\";\n                return \"\";\n            },\n            next: \"formatString\"\n        };\n        SnippetManager.$tokenizer = new Tokenizer({\n            start: [\n                { regex: /\\\\./, onMatch: function (val, state, stack) {\n                        var ch = val[1];\n                        if (ch == \"}\" && stack.length) {\n                            val = ch;\n                        }\n                        else if (\"`$\\\\\".indexOf(ch) != -1) {\n                            val = ch;\n                        }\n                        return [val];\n                    } },\n                { regex: /}/, onMatch: function (val, state, stack) {\n                        return [stack.length ? stack.shift() : val];\n                    } },\n                { regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken },\n                { regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function (str, state, stack) {\n                        var t = TabstopToken(str.substr(1));\n                        stack.unshift(t[0]);\n                        return t;\n                    }, next: \"snippetVar\" },\n                { regex: /\\n/, token: \"newline\", merge: false }\n            ],\n            snippetVar: [\n                { regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function (val, state, stack) {\n                        var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function (operator) {\n                            return operator.length == 2 ? operator[1] : \"\\x00\";\n                        }).split(\"\\x00\").map(function (value) {\n                            return { value: value };\n                        });\n                        stack[0].choices = choices;\n                        return [choices[0]];\n                    }, next: \"start\" },\n                formatMatcher,\n                { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\" }\n            ],\n            formatString: [\n                { regex: /:/, onMatch: function (val, state, stack) {\n                        if (stack.length && stack[0].expectElse) {\n                            stack[0].expectElse = false;\n                            stack[0].ifEnd = { elseEnd: stack[0] };\n                            return [stack[0].ifEnd];\n                        }\n                        return \":\";\n                    } },\n                { regex: /\\\\./, onMatch: function (val, state, stack) {\n                        var ch = val[1];\n                        if (ch == \"}\" && stack.length)\n                            val = ch;\n                        else if (\"`$\\\\\".indexOf(ch) != -1)\n                            val = ch;\n                        else if (ch == \"n\")\n                            val = \"\\n\";\n                        else if (ch == \"t\")\n                            val = \"\\t\";\n                        else if (\"ulULE\".indexOf(ch) != -1)\n                            val = { changeCase: ch, local: ch > \"a\" };\n                        return [val];\n                    } },\n                { regex: \"/\\\\w*}\", onMatch: function (val, state, stack) {\n                        var next = stack.shift();\n                        if (next)\n                            next.flag = val.slice(1, -1);\n                        this.next = next && next.tabstopId ? \"start\" : \"\";\n                        return [next || val];\n                    }, next: \"start\" },\n                { regex: /\\$(?:\\d+|\\w+)/, onMatch: function (val, state, stack) {\n                        return [{ text: val.slice(1) }];\n                    } },\n                { regex: /\\${\\w+/, onMatch: function (val, state, stack) {\n                        var token = { text: val.slice(2) };\n                        stack.unshift(token);\n                        return [token];\n                    }, next: \"formatStringVar\" },\n                { regex: /\\n/, token: \"newline\", merge: false },\n                { regex: /}/, onMatch: function (val, state, stack) {\n                        var next = stack.shift();\n                        this.next = next && next.tabstopId ? \"start\" : \"\";\n                        return [next || val];\n                    }, next: \"start\" }\n            ],\n            formatStringVar: [\n                { regex: /:\\/\\w+}/, onMatch: function (val, state, stack) {\n                        var ts = stack[0];\n                        ts.formatFunction = val.slice(2, -1);\n                        return [stack.shift()];\n                    }, next: \"formatString\" },\n                formatMatcher,\n                { regex: /:[\\?\\-+]?/, onMatch: function (val, state, stack) {\n                        if (val[1] == \"+\")\n                            stack[0].ifEnd = stack[0];\n                        if (val[1] == \"?\")\n                            stack[0].expectElse = true;\n                    }, next: \"formatString\" },\n                { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"formatString\" }\n            ]\n        });\n        return SnippetManager.$tokenizer;\n    };\n    this.tokenizeTmSnippet = function (str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n            return x.value || x;\n        });\n    };\n    this.getVariableValue = function (editor, name, indentation) {\n        if (/^\\d+$/.test(name))\n            return (this.variables.__ || {})[name] || \"\";\n        if (/^[A-Z]\\d+$/.test(name))\n            return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n        name = name.replace(/^TM_/, \"\");\n        if (!this.variables.hasOwnProperty(name))\n            return \"\";\n        var value = this.variables[name];\n        if (typeof value == \"function\")\n            value = this.variables[name](editor, name, indentation);\n        return value == null ? \"\" : value;\n    };\n    this.variables = VARIABLES;\n    this.tmStrFormat = function (str, ch, editor) {\n        if (!ch.fmt)\n            return str;\n        var flag = ch.flag || \"\";\n        var re = ch.guard;\n        re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n        var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n        var _self = this;\n        var formatted = str.replace(re, function () {\n            var oldArgs = _self.variables.__;\n            _self.variables.__ = [].slice.call(arguments);\n            var fmtParts = _self.resolveVariables(fmtTokens, editor);\n            var gChangeCase = \"E\";\n            for (var i = 0; i < fmtParts.length; i++) {\n                var ch = fmtParts[i];\n                if (typeof ch == \"object\") {\n                    fmtParts[i] = \"\";\n                    if (ch.changeCase && ch.local) {\n                        var next = fmtParts[i + 1];\n                        if (next && typeof next == \"string\") {\n                            if (ch.changeCase == \"u\")\n                                fmtParts[i] = next[0].toUpperCase();\n                            else\n                                fmtParts[i] = next[0].toLowerCase();\n                            fmtParts[i + 1] = next.substr(1);\n                        }\n                    }\n                    else if (ch.changeCase) {\n                        gChangeCase = ch.changeCase;\n                    }\n                }\n                else if (gChangeCase == \"U\") {\n                    fmtParts[i] = ch.toUpperCase();\n                }\n                else if (gChangeCase == \"L\") {\n                    fmtParts[i] = ch.toLowerCase();\n                }\n            }\n            _self.variables.__ = oldArgs;\n            return fmtParts.join(\"\");\n        });\n        return formatted;\n    };\n    this.tmFormatFunction = function (str, ch, editor) {\n        if (ch.formatFunction == \"upcase\")\n            return str.toUpperCase();\n        if (ch.formatFunction == \"downcase\")\n            return str.toLowerCase();\n        return str;\n    };\n    this.resolveVariables = function (snippet, editor) {\n        var result = [];\n        var indentation = \"\";\n        var afterNewLine = true;\n        for (var i = 0; i < snippet.length; i++) {\n            var ch = snippet[i];\n            if (typeof ch == \"string\") {\n                result.push(ch);\n                if (ch == \"\\n\") {\n                    afterNewLine = true;\n                    indentation = \"\";\n                }\n                else if (afterNewLine) {\n                    indentation = /^\\t*/.exec(ch)[0];\n                    afterNewLine = /\\S/.test(ch);\n                }\n                continue;\n            }\n            if (!ch)\n                continue;\n            afterNewLine = false;\n            if (ch.fmtString) {\n                var j = snippet.indexOf(ch, i + 1);\n                if (j == -1)\n                    j = snippet.length;\n                ch.fmt = snippet.slice(i + 1, j);\n                i = j;\n            }\n            if (ch.text) {\n                var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n                if (ch.fmtString)\n                    value = this.tmStrFormat(value, ch, editor);\n                if (ch.formatFunction)\n                    value = this.tmFormatFunction(value, ch, editor);\n                if (value && !ch.ifEnd) {\n                    result.push(value);\n                    gotoNext(ch);\n                }\n                else if (!value && ch.ifEnd) {\n                    gotoNext(ch.ifEnd);\n                }\n            }\n            else if (ch.elseEnd) {\n                gotoNext(ch.elseEnd);\n            }\n            else if (ch.tabstopId != null) {\n                result.push(ch);\n            }\n            else if (ch.changeCase != null) {\n                result.push(ch);\n            }\n        }\n        function gotoNext(ch) {\n            var i1 = snippet.indexOf(ch, i + 1);\n            if (i1 != -1)\n                i = i1;\n        }\n        return result;\n    };\n    this.insertSnippetForSelection = function (editor, snippetText) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var tabString = editor.session.getTabString();\n        var indentString = line.match(/^\\s*/)[0];\n        if (cursor.column < indentString.length)\n            indentString = indentString.slice(0, cursor.column);\n        snippetText = snippetText.replace(/\\r/g, \"\");\n        var tokens = this.tokenizeTmSnippet(snippetText);\n        tokens = this.resolveVariables(tokens, editor);\n        tokens = tokens.map(function (x) {\n            if (x == \"\\n\")\n                return x + indentString;\n            if (typeof x == \"string\")\n                return x.replace(/\\t/g, tabString);\n            return x;\n        });\n        var tabstops = [];\n        tokens.forEach(function (p, i) {\n            if (typeof p != \"object\")\n                return;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            if (!ts) {\n                ts = tabstops[id] = [];\n                ts.index = id;\n                ts.value = \"\";\n                ts.parents = {};\n            }\n            if (ts.indexOf(p) !== -1)\n                return;\n            if (p.choices && !ts.choices)\n                ts.choices = p.choices;\n            ts.push(p);\n            var i1 = tokens.indexOf(p, i + 1);\n            if (i1 === -1)\n                return;\n            var value = tokens.slice(i + 1, i1);\n            var isNested = value.some(function (t) { return typeof t === \"object\"; });\n            if (isNested && !ts.value) {\n                ts.value = value;\n            }\n            else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n                ts.value = value.join(\"\");\n            }\n        });\n        tabstops.forEach(function (ts) { ts.length = 0; });\n        var expanding = {};\n        function copyValue(val) {\n            var copy = [];\n            for (var i = 0; i < val.length; i++) {\n                var p = val[i];\n                if (typeof p == \"object\") {\n                    if (expanding[p.tabstopId])\n                        continue;\n                    var j = val.lastIndexOf(p, i - 1);\n                    p = copy[j] || { tabstopId: p.tabstopId };\n                }\n                copy[i] = p;\n            }\n            return copy;\n        }\n        for (var i = 0; i < tokens.length; i++) {\n            var p = tokens[i];\n            if (typeof p != \"object\")\n                continue;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            var i1 = tokens.indexOf(p, i + 1);\n            if (expanding[id]) {\n                if (expanding[id] === p) {\n                    delete expanding[id];\n                    Object.keys(expanding).forEach(function (parentId) {\n                        ts.parents[parentId] = true;\n                    });\n                }\n                continue;\n            }\n            expanding[id] = p;\n            var value = ts.value;\n            if (typeof value !== \"string\")\n                value = copyValue(value);\n            else if (p.fmt)\n                value = this.tmStrFormat(value, p, editor);\n            tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n            if (ts.indexOf(p) === -1)\n                ts.push(p);\n        }\n        var row = 0, column = 0;\n        var text = \"\";\n        tokens.forEach(function (t) {\n            if (typeof t === \"string\") {\n                var lines = t.split(\"\\n\");\n                if (lines.length > 1) {\n                    column = lines[lines.length - 1].length;\n                    row += lines.length - 1;\n                }\n                else\n                    column += t.length;\n                text += t;\n            }\n            else if (t) {\n                if (!t.start)\n                    t.start = { row: row, column: column };\n                else\n                    t.end = { row: row, column: column };\n            }\n        });\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, text);\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n    };\n    this.insertSnippet = function (editor, snippetText) {\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText);\n        editor.forEachSelection(function () {\n            self.insertSnippetForSelection(editor, snippetText);\n        }, null, { keepOrder: true });\n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n    this.$getScope = function (editor) {\n        var scope = editor.session.$mode.$id || \"\";\n        scope = scope.split(\"/\").pop();\n        if (scope === \"html\" || scope === \"php\") {\n            if (scope === \"php\" && !editor.session.$mode.inlinePhp)\n                scope = \"html\";\n            var c = editor.getCursorPosition();\n            var state = editor.session.getState(c.row);\n            if (typeof state === \"object\") {\n                state = state[0];\n            }\n            if (state.substring) {\n                if (state.substring(0, 3) == \"js-\")\n                    scope = \"javascript\";\n                else if (state.substring(0, 4) == \"css-\")\n                    scope = \"css\";\n                else if (state.substring(0, 4) == \"php-\")\n                    scope = \"php\";\n            }\n        }\n        return scope;\n    };\n    this.getActiveScopes = function (editor) {\n        var scope = this.$getScope(editor);\n        var scopes = [scope];\n        var snippetMap = this.snippetMap;\n        if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n            scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n        }\n        scopes.push(\"_\");\n        return scopes;\n    };\n    this.expandWithTab = function (editor, options) {\n        var self = this;\n        var result = editor.forEachSelection(function () {\n            return self.expandSnippetForSelection(editor, options);\n        }, null, { keepOrder: true });\n        if (result && editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n        return result;\n    };\n    this.expandSnippetForSelection = function (editor, options) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var before = line.substring(0, cursor.column);\n        var after = line.substr(cursor.column);\n        var snippetMap = this.snippetMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function (scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = this.findMatchingSnippet(snippets, before, after);\n            return !!snippet;\n        }, this);\n        if (!snippet)\n            return false;\n        if (options && options.dryRun)\n            return true;\n        editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length);\n        this.variables.M__ = snippet.matchBefore;\n        this.variables.T__ = snippet.matchAfter;\n        this.insertSnippetForSelection(editor, snippet.content);\n        this.variables.M__ = this.variables.T__ = null;\n        return true;\n    };\n    this.findMatchingSnippet = function (snippetList, before, after) {\n        for (var i = snippetList.length; i--;) {\n            var s = snippetList[i];\n            if (s.startRe && !s.startRe.test(before))\n                continue;\n            if (s.endRe && !s.endRe.test(after))\n                continue;\n            if (!s.startRe && !s.endRe)\n                continue;\n            s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n            s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n            return s;\n        }\n    };\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n    this.register = function (snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        var self = this;\n        if (!snippets)\n            snippets = [];\n        function wrapRegexp(src) {\n            if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n                src = \"(?:\" + src + \")\";\n            return src || \"\";\n        }\n        function guardedRegexp(re, guard, opening) {\n            re = wrapRegexp(re);\n            guard = wrapRegexp(guard);\n            if (opening) {\n                re = guard + re;\n                if (re && re[re.length - 1] != \"$\")\n                    re = re + \"$\";\n            }\n            else {\n                re = re + guard;\n                if (re && re[0] != \"^\")\n                    re = \"^\" + re;\n            }\n            return new RegExp(re);\n        }\n        function addSnippet(s) {\n            if (!s.scope)\n                s.scope = scope || \"_\";\n            scope = s.scope;\n            if (!snippetMap[scope]) {\n                snippetMap[scope] = [];\n                snippetNameMap[scope] = {};\n            }\n            var map = snippetNameMap[scope];\n            if (s.name) {\n                var old = map[s.name];\n                if (old)\n                    self.unregister(old);\n                map[s.name] = s;\n            }\n            snippetMap[scope].push(s);\n            if (s.prefix)\n                s.tabTrigger = s.prefix;\n            if (!s.content && s.body)\n                s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n            if (s.tabTrigger && !s.trigger) {\n                if (!s.guard && /^\\w/.test(s.tabTrigger))\n                    s.guard = \"\\\\b\";\n                s.trigger = lang.escapeRegExp(s.tabTrigger);\n            }\n            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n                return;\n            s.startRe = guardedRegexp(s.trigger, s.guard, true);\n            s.triggerRe = new RegExp(s.trigger);\n            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n            s.endTriggerRe = new RegExp(s.endTrigger);\n        }\n        if (Array.isArray(snippets)) {\n            snippets.forEach(addSnippet);\n        }\n        else {\n            Object.keys(snippets).forEach(function (key) {\n                addSnippet(snippets[key]);\n            });\n        }\n        this._signal(\"registerSnippets\", { scope: scope });\n    };\n    this.unregister = function (snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        function removeSnippet(s) {\n            var nameMap = snippetNameMap[s.scope || scope];\n            if (nameMap && nameMap[s.name]) {\n                delete nameMap[s.name];\n                var map = snippetMap[s.scope || scope];\n                var i = map && map.indexOf(s);\n                if (i >= 0)\n                    map.splice(i, 1);\n            }\n        }\n        if (snippets.content)\n            removeSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(removeSnippet);\n    };\n    this.parseSnippetFile = function (str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], snippet = {};\n        var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n        var m;\n        while (m = re.exec(str)) {\n            if (m[1]) {\n                try {\n                    snippet = JSON.parse(m[1]);\n                    list.push(snippet);\n                }\n                catch (e) { }\n            }\n            if (m[4]) {\n                snippet.content = m[4].replace(/^\\t/gm, \"\");\n                list.push(snippet);\n                snippet = {};\n            }\n            else {\n                var key = m[2], val = m[3];\n                if (key == \"regex\") {\n                    var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n                    snippet.guard = guardRe.exec(val)[1];\n                    snippet.trigger = guardRe.exec(val)[1];\n                    snippet.endTrigger = guardRe.exec(val)[1];\n                    snippet.endGuard = guardRe.exec(val)[1];\n                }\n                else if (key == \"snippet\") {\n                    snippet.tabTrigger = val.match(/^\\S*/)[0];\n                    if (!snippet.name)\n                        snippet.name = val;\n                }\n                else if (key) {\n                    snippet[key] = val;\n                }\n            }\n        }\n        return list;\n    };\n    this.getSnippetByName = function (name, editor) {\n        var snippetMap = this.snippetNameMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function (scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = snippets[name];\n            return !!snippet;\n        }, this);\n        return snippet;\n    };\n}).call(SnippetManager.prototype);\nvar TabstopManager = function (editor) {\n    if (editor.tabstopManager)\n        return editor.tabstopManager;\n    editor.tabstopManager = this;\n    this.$onChange = this.onChange.bind(this);\n    this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n    this.$onChangeSession = this.onChangeSession.bind(this);\n    this.$onAfterExec = this.onAfterExec.bind(this);\n    this.attach(editor);\n};\n(function () {\n    this.attach = function (editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n        this.editor = editor;\n        this.editor.on(\"change\", this.$onChange);\n        this.editor.on(\"changeSelection\", this.$onChangeSelection);\n        this.editor.on(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.detach = function () {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges = null;\n        this.tabstops = null;\n        this.selectedTabstop = null;\n        this.editor.removeListener(\"change\", this.$onChange);\n        this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n        this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.editor = null;\n    };\n    this.onChange = function (delta) {\n        var isRemove = delta.action[0] == \"r\";\n        var selectedTabstop = this.selectedTabstop || {};\n        var parents = selectedTabstop.parents || {};\n        var tabstops = (this.tabstops || []).slice();\n        for (var i = 0; i < tabstops.length; i++) {\n            var ts = tabstops[i];\n            var active = ts == selectedTabstop || parents[ts.index];\n            ts.rangeList.$bias = active ? 0 : 1;\n            if (delta.action == \"remove\" && ts !== selectedTabstop) {\n                var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n                var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n                startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n                var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n                endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n                var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n                for (var j = 0; j < toRemove.length; j++)\n                    this.removeRange(toRemove[j]);\n            }\n            ts.rangeList.$onChange(delta);\n        }\n        var session = this.editor.session;\n        if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n            this.detach();\n    };\n    this.updateLinkedFields = function () {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n            return;\n        this.$inChange = true;\n        var session = this.editor.session;\n        var text = session.getTextRange(ts.firstNonLinked);\n        for (var i = 0; i < ts.length; i++) {\n            var range = ts[i];\n            if (!range.linked)\n                continue;\n            var original = range.original;\n            var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n            session.replace(range, fmt);\n        }\n        this.$inChange = false;\n    };\n    this.onAfterExec = function (e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    this.onChangeSelection = function () {\n        if (!this.editor)\n            return;\n        var lead = this.editor.selection.lead;\n        var anchor = this.editor.selection.anchor;\n        var isEmpty = this.editor.selection.isEmpty();\n        for (var i = 0; i < this.ranges.length; i++) {\n            if (this.ranges[i].linked)\n                continue;\n            var containsLead = this.ranges[i].contains(lead.row, lead.column);\n            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n            if (containsLead && containsAnchor)\n                return;\n        }\n        this.detach();\n    };\n    this.onChangeSession = function () {\n        this.detach();\n    };\n    this.tabNext = function (dir) {\n        var max = this.tabstops.length;\n        var index = this.index + (dir || 1);\n        index = Math.min(Math.max(index, 1), max);\n        if (index == max)\n            index = 0;\n        this.selectTabstop(index);\n        if (index === 0)\n            this.detach();\n    };\n    this.selectTabstop = function (index) {\n        this.$openTabstops = null;\n        var ts = this.tabstops[this.index];\n        if (ts)\n            this.addTabstopMarkers(ts);\n        this.index = index;\n        ts = this.tabstops[this.index];\n        if (!ts || !ts.length)\n            return;\n        this.selectedTabstop = ts;\n        var range = ts.firstNonLinked || ts;\n        if (ts.choices)\n            range.cursor = range.start;\n        if (!this.editor.inVirtualSelectionMode) {\n            var sel = this.editor.multiSelect;\n            sel.toSingleRange(range);\n            for (var i = 0; i < ts.length; i++) {\n                if (ts.hasLinkedRanges && ts[i].linked)\n                    continue;\n                sel.addRange(ts[i].clone(), true);\n            }\n        }\n        else {\n            this.editor.selection.fromOrientedRange(range);\n        }\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        if (this.selectedTabstop && this.selectedTabstop.choices)\n            this.editor.execCommand(\"startAutocomplete\", { matches: this.selectedTabstop.choices });\n    };\n    this.addTabstops = function (tabstops, start, end) {\n        var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n        if (!this.$openTabstops)\n            this.$openTabstops = [];\n        if (!tabstops[0]) {\n            var p = Range.fromPoints(end, end);\n            moveRelative(p.start, start);\n            moveRelative(p.end, start);\n            tabstops[0] = [p];\n            tabstops[0].index = 0;\n        }\n        var i = this.index;\n        var arg = [i + 1, 0];\n        var ranges = this.ranges;\n        tabstops.forEach(function (ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n            for (var i = 0; i < ts.length; i++) {\n                var p = ts[i];\n                var range = Range.fromPoints(p.start, p.end || p.start);\n                movePoint(range.start, start);\n                movePoint(range.end, start);\n                range.original = p;\n                range.tabstop = dest;\n                ranges.push(range);\n                if (dest != ts)\n                    dest.unshift(range);\n                else\n                    dest[i] = range;\n                if (p.fmtString || (dest.firstNonLinked && useLink)) {\n                    range.linked = true;\n                    dest.hasLinkedRanges = true;\n                }\n                else if (!dest.firstNonLinked)\n                    dest.firstNonLinked = range;\n            }\n            if (!dest.firstNonLinked)\n                dest.hasLinkedRanges = false;\n            if (dest === ts) {\n                arg.push(dest);\n                this.$openTabstops[index] = dest;\n            }\n            this.addTabstopMarkers(dest);\n            dest.rangeList = dest.rangeList || new RangeList();\n            dest.rangeList.$bias = 0;\n            dest.rangeList.addList(dest);\n        }, this);\n        if (arg.length > 2) {\n            if (this.tabstops.length)\n                arg.push(arg.splice(2, 1)[0]);\n            this.tabstops.splice.apply(this.tabstops, arg);\n        }\n    };\n    this.addTabstopMarkers = function (ts) {\n        var session = this.editor.session;\n        ts.forEach(function (range) {\n            if (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    this.removeTabstopMarkers = function (ts) {\n        var session = this.editor.session;\n        ts.forEach(function (range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    this.removeRange = function (range) {\n        var i = range.tabstop.indexOf(range);\n        if (i != -1)\n            range.tabstop.splice(i, 1);\n        i = this.ranges.indexOf(range);\n        if (i != -1)\n            this.ranges.splice(i, 1);\n        i = range.tabstop.rangeList.ranges.indexOf(range);\n        if (i != -1)\n            range.tabstop.splice(i, 1);\n        this.editor.session.removeMarker(range.markerId);\n        if (!range.tabstop.length) {\n            i = this.tabstops.indexOf(range.tabstop);\n            if (i != -1)\n                this.tabstops.splice(i, 1);\n            if (!this.tabstops.length)\n                this.detach();\n        }\n    };\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys({\n        \"Tab\": function (editor) {\n            if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))\n                return;\n            editor.tabstopManager.tabNext(1);\n            editor.renderer.scrollCursorIntoView();\n        },\n        \"Shift-Tab\": function (editor) {\n            editor.tabstopManager.tabNext(-1);\n            editor.renderer.scrollCursorIntoView();\n        },\n        \"Esc\": function (editor) {\n            editor.tabstopManager.detach();\n        }\n    });\n}).call(TabstopManager.prototype);\nvar movePoint = function (point, diff) {\n    if (point.row == 0)\n        point.column += diff.column;\n    point.row += diff.row;\n};\nvar moveRelative = function (point, start) {\n    if (point.row == start.row)\n        point.column -= start.column;\n    point.row -= start.row;\n};\ndom.importCssString(\"\\n.ace_snippet-marker {\\n    -moz-box-sizing: border-box;\\n    box-sizing: border-box;\\n    background: rgba(194, 193, 208, 0.09);\\n    border: 1px dotted rgba(211, 208, 235, 0.62);\\n    position: absolute;\\n}\", \"snippets.css\", false);\nexports.snippetManager = new SnippetManager();\nvar Editor = require(\"./editor\").Editor;\n(function () {\n    this.insertSnippet = function (content, options) {\n        return exports.snippetManager.insertSnippet(this, content, options);\n    };\n    this.expandSnippet = function (options) {\n        return exports.snippetManager.expandWithTab(this, options);\n    };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/ext/emmet\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/editor\",\"ace/snippets\",\"ace/range\",\"ace/config\",\"resources\",\"resources\",\"tabStops\",\"resources\",\"utils\",\"actions\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar Editor = require(\"../editor\").Editor;\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Range = require(\"../range\").Range;\nvar config = require(\"../config\");\nvar emmet, emmetPath;\nfunction AceEmmetEditor() { }\nAceEmmetEditor.prototype = {\n    setupContext: function (editor) {\n        this.ace = editor;\n        this.indentation = editor.session.getTabString();\n        if (!emmet)\n            emmet = window.emmet;\n        var resources = emmet.resources || emmet.require(\"resources\");\n        resources.setVariable(\"indentation\", this.indentation);\n        this.$syntax = null;\n        this.$syntax = this.getSyntax();\n    },\n    getSelectionRange: function () {\n        var range = this.ace.getSelectionRange();\n        var doc = this.ace.session.doc;\n        return {\n            start: doc.positionToIndex(range.start),\n            end: doc.positionToIndex(range.end)\n        };\n    },\n    createSelection: function (start, end) {\n        var doc = this.ace.session.doc;\n        this.ace.selection.setRange({\n            start: doc.indexToPosition(start),\n            end: doc.indexToPosition(end)\n        });\n    },\n    getCurrentLineRange: function () {\n        var ace = this.ace;\n        var row = ace.getCursorPosition().row;\n        var lineLength = ace.session.getLine(row).length;\n        var index = ace.session.doc.positionToIndex({ row: row, column: 0 });\n        return {\n            start: index,\n            end: index + lineLength\n        };\n    },\n    getCaretPos: function () {\n        var pos = this.ace.getCursorPosition();\n        return this.ace.session.doc.positionToIndex(pos);\n    },\n    setCaretPos: function (index) {\n        var pos = this.ace.session.doc.indexToPosition(index);\n        this.ace.selection.moveToPosition(pos);\n    },\n    getCurrentLine: function () {\n        var row = this.ace.getCursorPosition().row;\n        return this.ace.session.getLine(row);\n    },\n    replaceContent: function (value, start, end, noIndent) {\n        if (end == null)\n            end = start == null ? this.getContent().length : start;\n        if (start == null)\n            start = 0;\n        var editor = this.ace;\n        var doc = editor.session.doc;\n        var range = Range.fromPoints(doc.indexToPosition(start), doc.indexToPosition(end));\n        editor.session.remove(range);\n        range.end = range.start;\n        value = this.$updateTabstops(value);\n        snippetManager.insertSnippet(editor, value);\n    },\n    getContent: function () {\n        return this.ace.getValue();\n    },\n    getSyntax: function () {\n        if (this.$syntax)\n            return this.$syntax;\n        var syntax = this.ace.session.$modeId.split(\"/\").pop();\n        if (syntax == \"html\" || syntax == \"php\") {\n            var cursor = this.ace.getCursorPosition();\n            var state = this.ace.session.getState(cursor.row);\n            if (typeof state != \"string\")\n                state = state[0];\n            if (state) {\n                state = state.split(\"-\");\n                if (state.length > 1)\n                    syntax = state[0];\n                else if (syntax == \"php\")\n                    syntax = \"html\";\n            }\n        }\n        return syntax;\n    },\n    getProfileName: function () {\n        var resources = emmet.resources || emmet.require(\"resources\");\n        switch (this.getSyntax()) {\n            case \"css\": return \"css\";\n            case \"xml\":\n            case \"xsl\":\n                return \"xml\";\n            case \"html\":\n                var profile = resources.getVariable(\"profile\");\n                if (!profile)\n                    profile = this.ace.session.getLines(0, 2).join(\"\").search(/<!DOCTYPE[^>]+XHTML/i) != -1 ? \"xhtml\" : \"html\";\n                return profile;\n            default:\n                var mode = this.ace.session.$mode;\n                return mode.emmetConfig && mode.emmetConfig.profile || \"xhtml\";\n        }\n    },\n    prompt: function (title) {\n        return prompt(title); // eslint-disable-line no-alert\n    },\n    getSelection: function () {\n        return this.ace.session.getTextRange();\n    },\n    getFilePath: function () {\n        return \"\";\n    },\n    $updateTabstops: function (value) {\n        var base = 1000;\n        var zeroBase = 0;\n        var lastZero = null;\n        var ts = emmet.tabStops || emmet.require('tabStops');\n        var resources = emmet.resources || emmet.require(\"resources\");\n        var settings = resources.getVocabulary(\"user\");\n        var tabstopOptions = {\n            tabstop: function (data) {\n                var group = parseInt(data.group, 10);\n                var isZero = group === 0;\n                if (isZero)\n                    group = ++zeroBase;\n                else\n                    group += base;\n                var placeholder = data.placeholder;\n                if (placeholder) {\n                    placeholder = ts.processText(placeholder, tabstopOptions);\n                }\n                var result = '${' + group + (placeholder ? ':' + placeholder : '') + '}';\n                if (isZero) {\n                    lastZero = [data.start, result];\n                }\n                return result;\n            },\n            escape: function (ch) {\n                if (ch == '$')\n                    return '\\\\$';\n                if (ch == '\\\\')\n                    return '\\\\\\\\';\n                return ch;\n            }\n        };\n        value = ts.processText(value, tabstopOptions);\n        if (settings.variables['insert_final_tabstop'] && !/\\$\\{0\\}$/.test(value)) {\n            value += '${0}';\n        }\n        else if (lastZero) {\n            var common = emmet.utils ? emmet.utils.common : emmet.require('utils');\n            value = common.replaceSubstring(value, '${0}', lastZero[0], lastZero[1]);\n        }\n        return value;\n    }\n};\nvar keymap = {\n    expand_abbreviation: { \"mac\": \"ctrl+alt+e\", \"win\": \"alt+e\" },\n    match_pair_outward: { \"mac\": \"ctrl+d\", \"win\": \"ctrl+,\" },\n    match_pair_inward: { \"mac\": \"ctrl+j\", \"win\": \"ctrl+shift+0\" },\n    matching_pair: { \"mac\": \"ctrl+alt+j\", \"win\": \"alt+j\" },\n    next_edit_point: \"alt+right\",\n    prev_edit_point: \"alt+left\",\n    toggle_comment: { \"mac\": \"command+/\", \"win\": \"ctrl+/\" },\n    split_join_tag: { \"mac\": \"shift+command+'\", \"win\": \"shift+ctrl+`\" },\n    remove_tag: { \"mac\": \"command+'\", \"win\": \"shift+ctrl+;\" },\n    evaluate_math_expression: { \"mac\": \"shift+command+y\", \"win\": \"shift+ctrl+y\" },\n    increment_number_by_1: \"ctrl+up\",\n    decrement_number_by_1: \"ctrl+down\",\n    increment_number_by_01: \"alt+up\",\n    decrement_number_by_01: \"alt+down\",\n    increment_number_by_10: { \"mac\": \"alt+command+up\", \"win\": \"shift+alt+up\" },\n    decrement_number_by_10: { \"mac\": \"alt+command+down\", \"win\": \"shift+alt+down\" },\n    select_next_item: { \"mac\": \"shift+command+.\", \"win\": \"shift+ctrl+.\" },\n    select_previous_item: { \"mac\": \"shift+command+,\", \"win\": \"shift+ctrl+,\" },\n    reflect_css_value: { \"mac\": \"shift+command+r\", \"win\": \"shift+ctrl+r\" },\n    encode_decode_data_url: { \"mac\": \"shift+ctrl+d\", \"win\": \"ctrl+'\" },\n    expand_abbreviation_with_tab: \"Tab\",\n    wrap_with_abbreviation: { \"mac\": \"shift+ctrl+a\", \"win\": \"shift+ctrl+a\" }\n};\nvar editorProxy = new AceEmmetEditor();\nexports.commands = new HashHandler();\nexports.runEmmetCommand = function runEmmetCommand(editor) {\n    if (this.action == \"expand_abbreviation_with_tab\") {\n        if (!editor.selection.isEmpty())\n            return false;\n        var pos = editor.selection.lead;\n        var token = editor.session.getTokenAt(pos.row, pos.column);\n        if (token && /\\btag\\b/.test(token.type))\n            return false;\n    }\n    try {\n        editorProxy.setupContext(editor);\n        var actions = emmet.actions || emmet.require(\"actions\");\n        if (this.action == \"wrap_with_abbreviation\") {\n            return setTimeout(function () {\n                actions.run(\"wrap_with_abbreviation\", editorProxy);\n            }, 0);\n        }\n        var result = actions.run(this.action, editorProxy);\n    }\n    catch (e) {\n        if (!emmet) {\n            var loading = exports.load(runEmmetCommand.bind(this, editor));\n            if (this.action == \"expand_abbreviation_with_tab\")\n                return false;\n            return loading;\n        }\n        editor._signal(\"changeStatus\", typeof e == \"string\" ? e : e.message);\n        config.warn(e);\n        result = false;\n    }\n    return result;\n};\nfor (var command in keymap) {\n    exports.commands.addCommand({\n        name: \"emmet:\" + command,\n        action: command,\n        bindKey: keymap[command],\n        exec: exports.runEmmetCommand,\n        multiSelectAction: \"forEach\"\n    });\n}\nexports.updateCommands = function (editor, enabled) {\n    if (enabled) {\n        editor.keyBinding.addKeyboardHandler(exports.commands);\n    }\n    else {\n        editor.keyBinding.removeKeyboardHandler(exports.commands);\n    }\n};\nexports.isSupportedMode = function (mode) {\n    if (!mode)\n        return false;\n    if (mode.emmetConfig)\n        return true;\n    var id = mode.$id || mode;\n    return /css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(id);\n};\nexports.isAvailable = function (editor, command) {\n    if (/(evaluate_math_expression|expand_abbreviation)$/.test(command))\n        return true;\n    var mode = editor.session.$mode;\n    var isSupported = exports.isSupportedMode(mode);\n    if (isSupported && mode.$modes) {\n        try {\n            editorProxy.setupContext(editor);\n            if (/js|php/.test(editorProxy.getSyntax()))\n                isSupported = false;\n        }\n        catch (e) { }\n    }\n    return isSupported;\n};\nvar onChangeMode = function (e, target) {\n    var editor = target;\n    if (!editor)\n        return;\n    var enabled = exports.isSupportedMode(editor.session.$mode);\n    if (e.enableEmmet === false)\n        enabled = false;\n    if (enabled)\n        exports.load();\n    exports.updateCommands(editor, enabled);\n};\nexports.load = function (cb) {\n    if (typeof emmetPath !== \"string\") {\n        config.warn(\"script for emmet-core is not loaded\");\n        return false;\n    }\n    config.loadModule(emmetPath, function () {\n        emmetPath = null;\n        cb && cb();\n    });\n    return true;\n};\nexports.AceEmmetEditor = AceEmmetEditor;\nconfig.defineOptions(Editor.prototype, \"editor\", {\n    enableEmmet: {\n        set: function (val) {\n            this[val ? \"on\" : \"removeListener\"](\"changeMode\", onChangeMode);\n            onChangeMode({ enableEmmet: !!val }, this);\n        },\n        value: true\n    }\n});\nexports.setCore = function (e) {\n    if (typeof e == \"string\")\n        emmetPath = e;\n    else\n        emmet = e;\n};\n\n});                (function() {\n                    ace.require([\"ace/ext/emmet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-error_marker.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/ext/error_marker\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-hardwrap.js",
    "content": "ace.define(\"ace/ext/hardwrap\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/editor\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nfunction hardWrap(editor, options) {\n    var max = options.column || editor.getOption(\"printMarginColumn\");\n    var allowMerge = options.allowMerge != false;\n    var row = Math.min(options.startRow, options.endRow);\n    var endRow = Math.max(options.startRow, options.endRow);\n    var session = editor.session;\n    while (row <= endRow) {\n        var line = session.getLine(row);\n        if (line.length > max) {\n            var space = findSpace(line, max, 5);\n            if (space) {\n                var indentation = /^\\s*/.exec(line)[0];\n                session.replace(new Range(row, space.start, row, space.end), \"\\n\" + indentation);\n            }\n            endRow++;\n        }\n        else if (allowMerge && /\\S/.test(line) && row != endRow) {\n            var nextLine = session.getLine(row + 1);\n            if (nextLine && /\\S/.test(nextLine)) {\n                var trimmedLine = line.replace(/\\s+$/, \"\");\n                var trimmedNextLine = nextLine.replace(/^\\s+/, \"\");\n                var mergedLine = trimmedLine + \" \" + trimmedNextLine;\n                var space = findSpace(mergedLine, max, 5);\n                if (space && space.start > trimmedLine.length || mergedLine.length < max) {\n                    var replaceRange = new Range(row, trimmedLine.length, row + 1, nextLine.length - trimmedNextLine.length);\n                    session.replace(replaceRange, \" \");\n                    row--;\n                    endRow--;\n                }\n                else if (trimmedLine.length < line.length) {\n                    session.remove(new Range(row, trimmedLine.length, row, line.length));\n                }\n            }\n        }\n        row++;\n    }\n    function findSpace(line, max, min) {\n        if (line.length < max)\n            return;\n        var before = line.slice(0, max);\n        var after = line.slice(max);\n        var spaceAfter = /^(?:(\\s+)|(\\S+)(\\s+))/.exec(after);\n        var spaceBefore = /(?:(\\s+)|(\\s+)(\\S+))$/.exec(before);\n        var start = 0;\n        var end = 0;\n        if (spaceBefore && !spaceBefore[2]) {\n            start = max - spaceBefore[1].length;\n            end = max;\n        }\n        if (spaceAfter && !spaceAfter[2]) {\n            if (!start)\n                start = max;\n            end = max + spaceAfter[1].length;\n        }\n        if (start) {\n            return {\n                start: start,\n                end: end\n            };\n        }\n        if (spaceBefore && spaceBefore[2] && spaceBefore.index > min) {\n            return {\n                start: spaceBefore.index,\n                end: spaceBefore.index + spaceBefore[2].length\n            };\n        }\n        if (spaceAfter && spaceAfter[2]) {\n            start = max + spaceAfter[2].length;\n            return {\n                start: start,\n                end: start + spaceAfter[3].length\n            };\n        }\n    }\n}\nfunction wrapAfterInput(e) {\n    if (e.command.name == \"insertstring\" && /\\S/.test(e.args)) {\n        var editor = e.editor;\n        var cursor = editor.selection.cursor;\n        if (cursor.column <= editor.renderer.$printMarginColumn)\n            return;\n        var lastDelta = editor.session.$undoManager.$lastDelta;\n        hardWrap(editor, {\n            startRow: cursor.row, endRow: cursor.row,\n            allowMerge: false\n        });\n        if (lastDelta != editor.session.$undoManager.$lastDelta)\n            editor.session.markUndoGroup();\n    }\n}\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    hardWrap: {\n        set: function (val) {\n            if (val) {\n                this.commands.on(\"afterExec\", wrapAfterInput);\n            }\n            else {\n                this.commands.off(\"afterExec\", wrapAfterInput);\n            }\n        },\n        value: false\n    }\n});\nexports.hardWrap = hardWrap;\n\n});                (function() {\n                    ace.require([\"ace/ext/hardwrap\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-keybinding_menu.js",
    "content": "ace.define(\"ace/ext/menu_tools/settings_menu.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"#ace_settingsmenu, #kbshortcutmenu {\\n    background-color: #F7F7F7;\\n    color: black;\\n    box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\n    padding: 1em 0.5em 2em 1em;\\n    overflow: auto;\\n    position: absolute;\\n    margin: 0;\\n    bottom: 0;\\n    right: 0;\\n    top: 0;\\n    z-index: 9991;\\n    cursor: default;\\n}\\n\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\n    box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\n    background-color: rgba(255, 255, 255, 0.6);\\n    color: black;\\n}\\n\\n.ace_optionsMenuEntry:hover {\\n    background-color: rgba(100, 100, 100, 0.1);\\n    transition: all 0.3s\\n}\\n\\n.ace_closeButton {\\n    background: rgba(245, 146, 146, 0.5);\\n    border: 1px solid #F48A8A;\\n    border-radius: 50%;\\n    padding: 7px;\\n    position: absolute;\\n    right: -8px;\\n    top: -8px;\\n    z-index: 100000;\\n}\\n.ace_closeButton{\\n    background: rgba(245, 146, 146, 0.9);\\n}\\n.ace_optionsMenuKey {\\n    color: darkslateblue;\\n    font-weight: bold;\\n}\\n.ace_optionsMenuCommand {\\n    color: darkcyan;\\n    font-weight: normal;\\n}\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\n    vertical-align: middle;\\n}\\n\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\n    background: #e7e7e7;\\n    box-shadow: 1px 0px 2px 0px #adadad inset;\\n    border-color: #adadad;\\n}\\n.ace_optionsMenuEntry button {\\n    background: white;\\n    border: 1px solid lightgray;\\n    margin: 0px;\\n}\\n.ace_optionsMenuEntry button:hover{\\n    background: #f0f0f0;\\n}\";\n\n});\n\nace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/ext/menu_tools/settings_menu.css\"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = require(\"./settings_menu.css\");\ndom.importCssString(cssText, \"settings_menu.css\", false);\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, callback) {\n    var closer = document.createElement('div');\n    var ignoreFocusOut = false;\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            close();\n        }\n    }\n    function close() {\n        if (!closer)\n            return;\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        if (editor) {\n            editor.focus();\n        }\n        closer = null;\n        callback && callback();\n    }\n    function setIgnoreFocusOut(ignore) {\n        ignoreFocusOut = ignore;\n        if (ignore) {\n            closer.style.pointerEvents = \"none\";\n            contentElement.style.pointerEvents = \"auto\";\n        }\n    }\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        (editor ? 'background-color: rgba(0, 0, 0, 0.3);' : '');\n    closer.addEventListener('click', function (e) {\n        if (!ignoreFocusOut) {\n            close();\n        }\n    });\n    document.addEventListener('keydown', documentEscListener);\n    contentElement.addEventListener('click', function (e) {\n        e.stopPropagation();\n    });\n    closer.appendChild(contentElement);\n    document.body.appendChild(closer);\n    if (editor) {\n        editor.blur();\n    }\n    return {\n        close: close,\n        setIgnoreFocusOut: setIgnoreFocusOut\n    };\n};\n\n});\n\nace.define(\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n\"use strict\";\nvar keys = require(\"../../lib/keys\");\nmodule.exports.getEditorKeybordShortcuts = function (editor) {\n    var KEY_MODS = keys.KEY_MODS;\n    var keybindings = [];\n    var commandMap = {};\n    editor.keyBinding.$handlers.forEach(function (handler) {\n        var ckb = handler.commandKeyBinding;\n        for (var i in ckb) {\n            var key = i.replace(/(^|-)\\w/g, function (x) { return x.toUpperCase(); });\n            var commands = ckb[i];\n            if (!Array.isArray(commands))\n                commands = [commands];\n            commands.forEach(function (command) {\n                if (typeof command != \"string\")\n                    command = command.name;\n                if (commandMap[command]) {\n                    commandMap[command].key += \"|\" + key;\n                }\n                else {\n                    commandMap[command] = { key: key, command: command };\n                    keybindings.push(commandMap[command]);\n                }\n            });\n        }\n    });\n    return keybindings;\n};\n\n});\n\nace.define(\"ace/ext/keybinding_menu\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/ext/menu_tools/overlay_page\",\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n\"use strict\";\nvar Editor = require(\"../editor\").Editor;\nfunction showKeyboardShortcuts(editor) {\n    if (!document.getElementById('kbshortcutmenu')) {\n        var overlayPage = require('./menu_tools/overlay_page').overlayPage;\n        var getEditorKeybordShortcuts = require('./menu_tools/get_editor_keyboard_shortcuts').getEditorKeybordShortcuts;\n        var kb = getEditorKeybordShortcuts(editor);\n        var el = document.createElement('div');\n        var commands = kb.reduce(function (previous, current) {\n            return previous + '<div class=\"ace_optionsMenuEntry\"><span class=\"ace_optionsMenuCommand\">'\n                + current.command + '</span> : '\n                + '<span class=\"ace_optionsMenuKey\">' + current.key + '</span></div>';\n        }, '');\n        el.id = 'kbshortcutmenu';\n        el.innerHTML = '<h1>Keyboard Shortcuts</h1>' + commands + '</div>';\n        overlayPage(editor, el);\n    }\n}\nmodule.exports.init = function (editor) {\n    Editor.prototype.showKeyboardShortcuts = function () {\n        showKeyboardShortcuts(this);\n    };\n    editor.commands.addCommands([{\n            name: \"showKeyboardShortcuts\",\n            bindKey: { win: \"Ctrl-Alt-h\", mac: \"Command-Alt-h\" },\n            exec: function (editor, line) {\n                editor.showKeyboardShortcuts();\n            }\n        }]);\n};\n\n});                (function() {\n                    ace.require([\"ace/ext/keybinding_menu\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-language_tools.js",
    "content": "ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar clipboard = require(\"./clipboard\");\nvar VARIABLES = {\n    CURRENT_WORD: function (editor) {\n        return editor.session.getTextRange(editor.session.getWordRange());\n    },\n    SELECTION: function (editor, name, indentation) {\n        var text = editor.session.getTextRange();\n        if (indentation)\n            return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n        return text;\n    },\n    CURRENT_LINE: function (editor) {\n        return editor.session.getLine(editor.getCursorPosition().row);\n    },\n    PREV_LINE: function (editor) {\n        return editor.session.getLine(editor.getCursorPosition().row - 1);\n    },\n    LINE_INDEX: function (editor) {\n        return editor.getCursorPosition().row;\n    },\n    LINE_NUMBER: function (editor) {\n        return editor.getCursorPosition().row + 1;\n    },\n    SOFT_TABS: function (editor) {\n        return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n    },\n    TAB_SIZE: function (editor) {\n        return editor.session.getTabSize();\n    },\n    CLIPBOARD: function (editor) {\n        return clipboard.getText && clipboard.getText();\n    },\n    FILENAME: function (editor) {\n        return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n    },\n    FILENAME_BASE: function (editor) {\n        return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n    },\n    DIRECTORY: function (editor) {\n        return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n    },\n    FILEPATH: function (editor) { return \"/not implemented.txt\"; },\n    WORKSPACE_NAME: function () { return \"Unknown\"; },\n    FULLNAME: function () { return \"Unknown\"; },\n    BLOCK_COMMENT_START: function (editor) {\n        var mode = editor.session.$mode || {};\n        return mode.blockComment && mode.blockComment.start || \"\";\n    },\n    BLOCK_COMMENT_END: function (editor) {\n        var mode = editor.session.$mode || {};\n        return mode.blockComment && mode.blockComment.end || \"\";\n    },\n    LINE_COMMENT: function (editor) {\n        var mode = editor.session.$mode || {};\n        return mode.lineCommentStart || \"\";\n    },\n    CURRENT_YEAR: date.bind(null, { year: \"numeric\" }),\n    CURRENT_YEAR_SHORT: date.bind(null, { year: \"2-digit\" }),\n    CURRENT_MONTH: date.bind(null, { month: \"numeric\" }),\n    CURRENT_MONTH_NAME: date.bind(null, { month: \"long\" }),\n    CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: \"short\" }),\n    CURRENT_DATE: date.bind(null, { day: \"2-digit\" }),\n    CURRENT_DAY_NAME: date.bind(null, { weekday: \"long\" }),\n    CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: \"short\" }),\n    CURRENT_HOUR: date.bind(null, { hour: \"2-digit\", hour12: false }),\n    CURRENT_MINUTE: date.bind(null, { minute: \"2-digit\" }),\n    CURRENT_SECOND: date.bind(null, { second: \"2-digit\" })\n};\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\nfunction date(dateFormat) {\n    var str = new Date().toLocaleString(\"en-us\", dateFormat);\n    return str.length == 1 ? \"0\" + str : str;\n}\nvar SnippetManager = function () {\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getTokenizer = function () {\n        return SnippetManager.$tokenizer || this.createTokenizer();\n    };\n    this.createTokenizer = function () {\n        function TabstopToken(str) {\n            str = str.substr(1);\n            if (/^\\d+$/.test(str))\n                return [{ tabstopId: parseInt(str, 10) }];\n            return [{ text: str }];\n        }\n        function escape(ch) {\n            return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n        }\n        var formatMatcher = {\n            regex: \"/(\" + escape(\"/\") + \"+)/\",\n            onMatch: function (val, state, stack) {\n                var ts = stack[0];\n                ts.fmtString = true;\n                ts.guard = val.slice(1, -1);\n                ts.flag = \"\";\n                return \"\";\n            },\n            next: \"formatString\"\n        };\n        SnippetManager.$tokenizer = new Tokenizer({\n            start: [\n                { regex: /\\\\./, onMatch: function (val, state, stack) {\n                        var ch = val[1];\n                        if (ch == \"}\" && stack.length) {\n                            val = ch;\n                        }\n                        else if (\"`$\\\\\".indexOf(ch) != -1) {\n                            val = ch;\n                        }\n                        return [val];\n                    } },\n                { regex: /}/, onMatch: function (val, state, stack) {\n                        return [stack.length ? stack.shift() : val];\n                    } },\n                { regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken },\n                { regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function (str, state, stack) {\n                        var t = TabstopToken(str.substr(1));\n                        stack.unshift(t[0]);\n                        return t;\n                    }, next: \"snippetVar\" },\n                { regex: /\\n/, token: \"newline\", merge: false }\n            ],\n            snippetVar: [\n                { regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function (val, state, stack) {\n                        var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function (operator) {\n                            return operator.length == 2 ? operator[1] : \"\\x00\";\n                        }).split(\"\\x00\").map(function (value) {\n                            return { value: value };\n                        });\n                        stack[0].choices = choices;\n                        return [choices[0]];\n                    }, next: \"start\" },\n                formatMatcher,\n                { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\" }\n            ],\n            formatString: [\n                { regex: /:/, onMatch: function (val, state, stack) {\n                        if (stack.length && stack[0].expectElse) {\n                            stack[0].expectElse = false;\n                            stack[0].ifEnd = { elseEnd: stack[0] };\n                            return [stack[0].ifEnd];\n                        }\n                        return \":\";\n                    } },\n                { regex: /\\\\./, onMatch: function (val, state, stack) {\n                        var ch = val[1];\n                        if (ch == \"}\" && stack.length)\n                            val = ch;\n                        else if (\"`$\\\\\".indexOf(ch) != -1)\n                            val = ch;\n                        else if (ch == \"n\")\n                            val = \"\\n\";\n                        else if (ch == \"t\")\n                            val = \"\\t\";\n                        else if (\"ulULE\".indexOf(ch) != -1)\n                            val = { changeCase: ch, local: ch > \"a\" };\n                        return [val];\n                    } },\n                { regex: \"/\\\\w*}\", onMatch: function (val, state, stack) {\n                        var next = stack.shift();\n                        if (next)\n                            next.flag = val.slice(1, -1);\n                        this.next = next && next.tabstopId ? \"start\" : \"\";\n                        return [next || val];\n                    }, next: \"start\" },\n                { regex: /\\$(?:\\d+|\\w+)/, onMatch: function (val, state, stack) {\n                        return [{ text: val.slice(1) }];\n                    } },\n                { regex: /\\${\\w+/, onMatch: function (val, state, stack) {\n                        var token = { text: val.slice(2) };\n                        stack.unshift(token);\n                        return [token];\n                    }, next: \"formatStringVar\" },\n                { regex: /\\n/, token: \"newline\", merge: false },\n                { regex: /}/, onMatch: function (val, state, stack) {\n                        var next = stack.shift();\n                        this.next = next && next.tabstopId ? \"start\" : \"\";\n                        return [next || val];\n                    }, next: \"start\" }\n            ],\n            formatStringVar: [\n                { regex: /:\\/\\w+}/, onMatch: function (val, state, stack) {\n                        var ts = stack[0];\n                        ts.formatFunction = val.slice(2, -1);\n                        return [stack.shift()];\n                    }, next: \"formatString\" },\n                formatMatcher,\n                { regex: /:[\\?\\-+]?/, onMatch: function (val, state, stack) {\n                        if (val[1] == \"+\")\n                            stack[0].ifEnd = stack[0];\n                        if (val[1] == \"?\")\n                            stack[0].expectElse = true;\n                    }, next: \"formatString\" },\n                { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"formatString\" }\n            ]\n        });\n        return SnippetManager.$tokenizer;\n    };\n    this.tokenizeTmSnippet = function (str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n            return x.value || x;\n        });\n    };\n    this.getVariableValue = function (editor, name, indentation) {\n        if (/^\\d+$/.test(name))\n            return (this.variables.__ || {})[name] || \"\";\n        if (/^[A-Z]\\d+$/.test(name))\n            return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n        name = name.replace(/^TM_/, \"\");\n        if (!this.variables.hasOwnProperty(name))\n            return \"\";\n        var value = this.variables[name];\n        if (typeof value == \"function\")\n            value = this.variables[name](editor, name, indentation);\n        return value == null ? \"\" : value;\n    };\n    this.variables = VARIABLES;\n    this.tmStrFormat = function (str, ch, editor) {\n        if (!ch.fmt)\n            return str;\n        var flag = ch.flag || \"\";\n        var re = ch.guard;\n        re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n        var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n        var _self = this;\n        var formatted = str.replace(re, function () {\n            var oldArgs = _self.variables.__;\n            _self.variables.__ = [].slice.call(arguments);\n            var fmtParts = _self.resolveVariables(fmtTokens, editor);\n            var gChangeCase = \"E\";\n            for (var i = 0; i < fmtParts.length; i++) {\n                var ch = fmtParts[i];\n                if (typeof ch == \"object\") {\n                    fmtParts[i] = \"\";\n                    if (ch.changeCase && ch.local) {\n                        var next = fmtParts[i + 1];\n                        if (next && typeof next == \"string\") {\n                            if (ch.changeCase == \"u\")\n                                fmtParts[i] = next[0].toUpperCase();\n                            else\n                                fmtParts[i] = next[0].toLowerCase();\n                            fmtParts[i + 1] = next.substr(1);\n                        }\n                    }\n                    else if (ch.changeCase) {\n                        gChangeCase = ch.changeCase;\n                    }\n                }\n                else if (gChangeCase == \"U\") {\n                    fmtParts[i] = ch.toUpperCase();\n                }\n                else if (gChangeCase == \"L\") {\n                    fmtParts[i] = ch.toLowerCase();\n                }\n            }\n            _self.variables.__ = oldArgs;\n            return fmtParts.join(\"\");\n        });\n        return formatted;\n    };\n    this.tmFormatFunction = function (str, ch, editor) {\n        if (ch.formatFunction == \"upcase\")\n            return str.toUpperCase();\n        if (ch.formatFunction == \"downcase\")\n            return str.toLowerCase();\n        return str;\n    };\n    this.resolveVariables = function (snippet, editor) {\n        var result = [];\n        var indentation = \"\";\n        var afterNewLine = true;\n        for (var i = 0; i < snippet.length; i++) {\n            var ch = snippet[i];\n            if (typeof ch == \"string\") {\n                result.push(ch);\n                if (ch == \"\\n\") {\n                    afterNewLine = true;\n                    indentation = \"\";\n                }\n                else if (afterNewLine) {\n                    indentation = /^\\t*/.exec(ch)[0];\n                    afterNewLine = /\\S/.test(ch);\n                }\n                continue;\n            }\n            if (!ch)\n                continue;\n            afterNewLine = false;\n            if (ch.fmtString) {\n                var j = snippet.indexOf(ch, i + 1);\n                if (j == -1)\n                    j = snippet.length;\n                ch.fmt = snippet.slice(i + 1, j);\n                i = j;\n            }\n            if (ch.text) {\n                var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n                if (ch.fmtString)\n                    value = this.tmStrFormat(value, ch, editor);\n                if (ch.formatFunction)\n                    value = this.tmFormatFunction(value, ch, editor);\n                if (value && !ch.ifEnd) {\n                    result.push(value);\n                    gotoNext(ch);\n                }\n                else if (!value && ch.ifEnd) {\n                    gotoNext(ch.ifEnd);\n                }\n            }\n            else if (ch.elseEnd) {\n                gotoNext(ch.elseEnd);\n            }\n            else if (ch.tabstopId != null) {\n                result.push(ch);\n            }\n            else if (ch.changeCase != null) {\n                result.push(ch);\n            }\n        }\n        function gotoNext(ch) {\n            var i1 = snippet.indexOf(ch, i + 1);\n            if (i1 != -1)\n                i = i1;\n        }\n        return result;\n    };\n    this.insertSnippetForSelection = function (editor, snippetText) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var tabString = editor.session.getTabString();\n        var indentString = line.match(/^\\s*/)[0];\n        if (cursor.column < indentString.length)\n            indentString = indentString.slice(0, cursor.column);\n        snippetText = snippetText.replace(/\\r/g, \"\");\n        var tokens = this.tokenizeTmSnippet(snippetText);\n        tokens = this.resolveVariables(tokens, editor);\n        tokens = tokens.map(function (x) {\n            if (x == \"\\n\")\n                return x + indentString;\n            if (typeof x == \"string\")\n                return x.replace(/\\t/g, tabString);\n            return x;\n        });\n        var tabstops = [];\n        tokens.forEach(function (p, i) {\n            if (typeof p != \"object\")\n                return;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            if (!ts) {\n                ts = tabstops[id] = [];\n                ts.index = id;\n                ts.value = \"\";\n                ts.parents = {};\n            }\n            if (ts.indexOf(p) !== -1)\n                return;\n            if (p.choices && !ts.choices)\n                ts.choices = p.choices;\n            ts.push(p);\n            var i1 = tokens.indexOf(p, i + 1);\n            if (i1 === -1)\n                return;\n            var value = tokens.slice(i + 1, i1);\n            var isNested = value.some(function (t) { return typeof t === \"object\"; });\n            if (isNested && !ts.value) {\n                ts.value = value;\n            }\n            else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n                ts.value = value.join(\"\");\n            }\n        });\n        tabstops.forEach(function (ts) { ts.length = 0; });\n        var expanding = {};\n        function copyValue(val) {\n            var copy = [];\n            for (var i = 0; i < val.length; i++) {\n                var p = val[i];\n                if (typeof p == \"object\") {\n                    if (expanding[p.tabstopId])\n                        continue;\n                    var j = val.lastIndexOf(p, i - 1);\n                    p = copy[j] || { tabstopId: p.tabstopId };\n                }\n                copy[i] = p;\n            }\n            return copy;\n        }\n        for (var i = 0; i < tokens.length; i++) {\n            var p = tokens[i];\n            if (typeof p != \"object\")\n                continue;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            var i1 = tokens.indexOf(p, i + 1);\n            if (expanding[id]) {\n                if (expanding[id] === p) {\n                    delete expanding[id];\n                    Object.keys(expanding).forEach(function (parentId) {\n                        ts.parents[parentId] = true;\n                    });\n                }\n                continue;\n            }\n            expanding[id] = p;\n            var value = ts.value;\n            if (typeof value !== \"string\")\n                value = copyValue(value);\n            else if (p.fmt)\n                value = this.tmStrFormat(value, p, editor);\n            tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n            if (ts.indexOf(p) === -1)\n                ts.push(p);\n        }\n        var row = 0, column = 0;\n        var text = \"\";\n        tokens.forEach(function (t) {\n            if (typeof t === \"string\") {\n                var lines = t.split(\"\\n\");\n                if (lines.length > 1) {\n                    column = lines[lines.length - 1].length;\n                    row += lines.length - 1;\n                }\n                else\n                    column += t.length;\n                text += t;\n            }\n            else if (t) {\n                if (!t.start)\n                    t.start = { row: row, column: column };\n                else\n                    t.end = { row: row, column: column };\n            }\n        });\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, text);\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n    };\n    this.insertSnippet = function (editor, snippetText) {\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText);\n        editor.forEachSelection(function () {\n            self.insertSnippetForSelection(editor, snippetText);\n        }, null, { keepOrder: true });\n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n    this.$getScope = function (editor) {\n        var scope = editor.session.$mode.$id || \"\";\n        scope = scope.split(\"/\").pop();\n        if (scope === \"html\" || scope === \"php\") {\n            if (scope === \"php\" && !editor.session.$mode.inlinePhp)\n                scope = \"html\";\n            var c = editor.getCursorPosition();\n            var state = editor.session.getState(c.row);\n            if (typeof state === \"object\") {\n                state = state[0];\n            }\n            if (state.substring) {\n                if (state.substring(0, 3) == \"js-\")\n                    scope = \"javascript\";\n                else if (state.substring(0, 4) == \"css-\")\n                    scope = \"css\";\n                else if (state.substring(0, 4) == \"php-\")\n                    scope = \"php\";\n            }\n        }\n        return scope;\n    };\n    this.getActiveScopes = function (editor) {\n        var scope = this.$getScope(editor);\n        var scopes = [scope];\n        var snippetMap = this.snippetMap;\n        if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n            scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n        }\n        scopes.push(\"_\");\n        return scopes;\n    };\n    this.expandWithTab = function (editor, options) {\n        var self = this;\n        var result = editor.forEachSelection(function () {\n            return self.expandSnippetForSelection(editor, options);\n        }, null, { keepOrder: true });\n        if (result && editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n        return result;\n    };\n    this.expandSnippetForSelection = function (editor, options) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var before = line.substring(0, cursor.column);\n        var after = line.substr(cursor.column);\n        var snippetMap = this.snippetMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function (scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = this.findMatchingSnippet(snippets, before, after);\n            return !!snippet;\n        }, this);\n        if (!snippet)\n            return false;\n        if (options && options.dryRun)\n            return true;\n        editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length);\n        this.variables.M__ = snippet.matchBefore;\n        this.variables.T__ = snippet.matchAfter;\n        this.insertSnippetForSelection(editor, snippet.content);\n        this.variables.M__ = this.variables.T__ = null;\n        return true;\n    };\n    this.findMatchingSnippet = function (snippetList, before, after) {\n        for (var i = snippetList.length; i--;) {\n            var s = snippetList[i];\n            if (s.startRe && !s.startRe.test(before))\n                continue;\n            if (s.endRe && !s.endRe.test(after))\n                continue;\n            if (!s.startRe && !s.endRe)\n                continue;\n            s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n            s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n            return s;\n        }\n    };\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n    this.register = function (snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        var self = this;\n        if (!snippets)\n            snippets = [];\n        function wrapRegexp(src) {\n            if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n                src = \"(?:\" + src + \")\";\n            return src || \"\";\n        }\n        function guardedRegexp(re, guard, opening) {\n            re = wrapRegexp(re);\n            guard = wrapRegexp(guard);\n            if (opening) {\n                re = guard + re;\n                if (re && re[re.length - 1] != \"$\")\n                    re = re + \"$\";\n            }\n            else {\n                re = re + guard;\n                if (re && re[0] != \"^\")\n                    re = \"^\" + re;\n            }\n            return new RegExp(re);\n        }\n        function addSnippet(s) {\n            if (!s.scope)\n                s.scope = scope || \"_\";\n            scope = s.scope;\n            if (!snippetMap[scope]) {\n                snippetMap[scope] = [];\n                snippetNameMap[scope] = {};\n            }\n            var map = snippetNameMap[scope];\n            if (s.name) {\n                var old = map[s.name];\n                if (old)\n                    self.unregister(old);\n                map[s.name] = s;\n            }\n            snippetMap[scope].push(s);\n            if (s.prefix)\n                s.tabTrigger = s.prefix;\n            if (!s.content && s.body)\n                s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n            if (s.tabTrigger && !s.trigger) {\n                if (!s.guard && /^\\w/.test(s.tabTrigger))\n                    s.guard = \"\\\\b\";\n                s.trigger = lang.escapeRegExp(s.tabTrigger);\n            }\n            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n                return;\n            s.startRe = guardedRegexp(s.trigger, s.guard, true);\n            s.triggerRe = new RegExp(s.trigger);\n            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n            s.endTriggerRe = new RegExp(s.endTrigger);\n        }\n        if (Array.isArray(snippets)) {\n            snippets.forEach(addSnippet);\n        }\n        else {\n            Object.keys(snippets).forEach(function (key) {\n                addSnippet(snippets[key]);\n            });\n        }\n        this._signal(\"registerSnippets\", { scope: scope });\n    };\n    this.unregister = function (snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        function removeSnippet(s) {\n            var nameMap = snippetNameMap[s.scope || scope];\n            if (nameMap && nameMap[s.name]) {\n                delete nameMap[s.name];\n                var map = snippetMap[s.scope || scope];\n                var i = map && map.indexOf(s);\n                if (i >= 0)\n                    map.splice(i, 1);\n            }\n        }\n        if (snippets.content)\n            removeSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(removeSnippet);\n    };\n    this.parseSnippetFile = function (str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], snippet = {};\n        var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n        var m;\n        while (m = re.exec(str)) {\n            if (m[1]) {\n                try {\n                    snippet = JSON.parse(m[1]);\n                    list.push(snippet);\n                }\n                catch (e) { }\n            }\n            if (m[4]) {\n                snippet.content = m[4].replace(/^\\t/gm, \"\");\n                list.push(snippet);\n                snippet = {};\n            }\n            else {\n                var key = m[2], val = m[3];\n                if (key == \"regex\") {\n                    var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n                    snippet.guard = guardRe.exec(val)[1];\n                    snippet.trigger = guardRe.exec(val)[1];\n                    snippet.endTrigger = guardRe.exec(val)[1];\n                    snippet.endGuard = guardRe.exec(val)[1];\n                }\n                else if (key == \"snippet\") {\n                    snippet.tabTrigger = val.match(/^\\S*/)[0];\n                    if (!snippet.name)\n                        snippet.name = val;\n                }\n                else if (key) {\n                    snippet[key] = val;\n                }\n            }\n        }\n        return list;\n    };\n    this.getSnippetByName = function (name, editor) {\n        var snippetMap = this.snippetNameMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function (scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = snippets[name];\n            return !!snippet;\n        }, this);\n        return snippet;\n    };\n}).call(SnippetManager.prototype);\nvar TabstopManager = function (editor) {\n    if (editor.tabstopManager)\n        return editor.tabstopManager;\n    editor.tabstopManager = this;\n    this.$onChange = this.onChange.bind(this);\n    this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n    this.$onChangeSession = this.onChangeSession.bind(this);\n    this.$onAfterExec = this.onAfterExec.bind(this);\n    this.attach(editor);\n};\n(function () {\n    this.attach = function (editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n        this.editor = editor;\n        this.editor.on(\"change\", this.$onChange);\n        this.editor.on(\"changeSelection\", this.$onChangeSelection);\n        this.editor.on(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.detach = function () {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges = null;\n        this.tabstops = null;\n        this.selectedTabstop = null;\n        this.editor.removeListener(\"change\", this.$onChange);\n        this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n        this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.editor = null;\n    };\n    this.onChange = function (delta) {\n        var isRemove = delta.action[0] == \"r\";\n        var selectedTabstop = this.selectedTabstop || {};\n        var parents = selectedTabstop.parents || {};\n        var tabstops = (this.tabstops || []).slice();\n        for (var i = 0; i < tabstops.length; i++) {\n            var ts = tabstops[i];\n            var active = ts == selectedTabstop || parents[ts.index];\n            ts.rangeList.$bias = active ? 0 : 1;\n            if (delta.action == \"remove\" && ts !== selectedTabstop) {\n                var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n                var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n                startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n                var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n                endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n                var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n                for (var j = 0; j < toRemove.length; j++)\n                    this.removeRange(toRemove[j]);\n            }\n            ts.rangeList.$onChange(delta);\n        }\n        var session = this.editor.session;\n        if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n            this.detach();\n    };\n    this.updateLinkedFields = function () {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n            return;\n        this.$inChange = true;\n        var session = this.editor.session;\n        var text = session.getTextRange(ts.firstNonLinked);\n        for (var i = 0; i < ts.length; i++) {\n            var range = ts[i];\n            if (!range.linked)\n                continue;\n            var original = range.original;\n            var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n            session.replace(range, fmt);\n        }\n        this.$inChange = false;\n    };\n    this.onAfterExec = function (e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    this.onChangeSelection = function () {\n        if (!this.editor)\n            return;\n        var lead = this.editor.selection.lead;\n        var anchor = this.editor.selection.anchor;\n        var isEmpty = this.editor.selection.isEmpty();\n        for (var i = 0; i < this.ranges.length; i++) {\n            if (this.ranges[i].linked)\n                continue;\n            var containsLead = this.ranges[i].contains(lead.row, lead.column);\n            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n            if (containsLead && containsAnchor)\n                return;\n        }\n        this.detach();\n    };\n    this.onChangeSession = function () {\n        this.detach();\n    };\n    this.tabNext = function (dir) {\n        var max = this.tabstops.length;\n        var index = this.index + (dir || 1);\n        index = Math.min(Math.max(index, 1), max);\n        if (index == max)\n            index = 0;\n        this.selectTabstop(index);\n        if (index === 0)\n            this.detach();\n    };\n    this.selectTabstop = function (index) {\n        this.$openTabstops = null;\n        var ts = this.tabstops[this.index];\n        if (ts)\n            this.addTabstopMarkers(ts);\n        this.index = index;\n        ts = this.tabstops[this.index];\n        if (!ts || !ts.length)\n            return;\n        this.selectedTabstop = ts;\n        var range = ts.firstNonLinked || ts;\n        if (ts.choices)\n            range.cursor = range.start;\n        if (!this.editor.inVirtualSelectionMode) {\n            var sel = this.editor.multiSelect;\n            sel.toSingleRange(range);\n            for (var i = 0; i < ts.length; i++) {\n                if (ts.hasLinkedRanges && ts[i].linked)\n                    continue;\n                sel.addRange(ts[i].clone(), true);\n            }\n        }\n        else {\n            this.editor.selection.fromOrientedRange(range);\n        }\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        if (this.selectedTabstop && this.selectedTabstop.choices)\n            this.editor.execCommand(\"startAutocomplete\", { matches: this.selectedTabstop.choices });\n    };\n    this.addTabstops = function (tabstops, start, end) {\n        var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n        if (!this.$openTabstops)\n            this.$openTabstops = [];\n        if (!tabstops[0]) {\n            var p = Range.fromPoints(end, end);\n            moveRelative(p.start, start);\n            moveRelative(p.end, start);\n            tabstops[0] = [p];\n            tabstops[0].index = 0;\n        }\n        var i = this.index;\n        var arg = [i + 1, 0];\n        var ranges = this.ranges;\n        tabstops.forEach(function (ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n            for (var i = 0; i < ts.length; i++) {\n                var p = ts[i];\n                var range = Range.fromPoints(p.start, p.end || p.start);\n                movePoint(range.start, start);\n                movePoint(range.end, start);\n                range.original = p;\n                range.tabstop = dest;\n                ranges.push(range);\n                if (dest != ts)\n                    dest.unshift(range);\n                else\n                    dest[i] = range;\n                if (p.fmtString || (dest.firstNonLinked && useLink)) {\n                    range.linked = true;\n                    dest.hasLinkedRanges = true;\n                }\n                else if (!dest.firstNonLinked)\n                    dest.firstNonLinked = range;\n            }\n            if (!dest.firstNonLinked)\n                dest.hasLinkedRanges = false;\n            if (dest === ts) {\n                arg.push(dest);\n                this.$openTabstops[index] = dest;\n            }\n            this.addTabstopMarkers(dest);\n            dest.rangeList = dest.rangeList || new RangeList();\n            dest.rangeList.$bias = 0;\n            dest.rangeList.addList(dest);\n        }, this);\n        if (arg.length > 2) {\n            if (this.tabstops.length)\n                arg.push(arg.splice(2, 1)[0]);\n            this.tabstops.splice.apply(this.tabstops, arg);\n        }\n    };\n    this.addTabstopMarkers = function (ts) {\n        var session = this.editor.session;\n        ts.forEach(function (range) {\n            if (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    this.removeTabstopMarkers = function (ts) {\n        var session = this.editor.session;\n        ts.forEach(function (range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    this.removeRange = function (range) {\n        var i = range.tabstop.indexOf(range);\n        if (i != -1)\n            range.tabstop.splice(i, 1);\n        i = this.ranges.indexOf(range);\n        if (i != -1)\n            this.ranges.splice(i, 1);\n        i = range.tabstop.rangeList.ranges.indexOf(range);\n        if (i != -1)\n            range.tabstop.splice(i, 1);\n        this.editor.session.removeMarker(range.markerId);\n        if (!range.tabstop.length) {\n            i = this.tabstops.indexOf(range.tabstop);\n            if (i != -1)\n                this.tabstops.splice(i, 1);\n            if (!this.tabstops.length)\n                this.detach();\n        }\n    };\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys({\n        \"Tab\": function (editor) {\n            if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))\n                return;\n            editor.tabstopManager.tabNext(1);\n            editor.renderer.scrollCursorIntoView();\n        },\n        \"Shift-Tab\": function (editor) {\n            editor.tabstopManager.tabNext(-1);\n            editor.renderer.scrollCursorIntoView();\n        },\n        \"Esc\": function (editor) {\n            editor.tabstopManager.detach();\n        }\n    });\n}).call(TabstopManager.prototype);\nvar movePoint = function (point, diff) {\n    if (point.row == 0)\n        point.column += diff.column;\n    point.row += diff.row;\n};\nvar moveRelative = function (point, start) {\n    if (point.row == start.row)\n        point.column -= start.column;\n    point.row -= start.row;\n};\ndom.importCssString(\"\\n.ace_snippet-marker {\\n    -moz-box-sizing: border-box;\\n    box-sizing: border-box;\\n    background: rgba(194, 193, 208, 0.09);\\n    border: 1px dotted rgba(211, 208, 235, 0.62);\\n    position: absolute;\\n}\", \"snippets.css\", false);\nexports.snippetManager = new SnippetManager();\nvar Editor = require(\"./editor\").Editor;\n(function () {\n    this.insertSnippet = function (content, options) {\n        return exports.snippetManager.insertSnippet(this, content, options);\n    };\n    this.expandSnippet = function (options) {\n        return exports.snippetManager.expandWithTab(this, options);\n    };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\nvar $singleLineEditor = function (el) {\n    var renderer = new Renderer(el);\n    renderer.$maxLines = 4;\n    var editor = new Editor(renderer);\n    editor.setHighlightActiveLine(false);\n    editor.setShowPrintMargin(false);\n    editor.renderer.setShowGutter(false);\n    editor.renderer.setHighlightGutterLine(false);\n    editor.$mouseHandler.$focusTimeout = 0;\n    editor.$highlightTagPending = true;\n    return editor;\n};\nvar AcePopup = function (parentNode) {\n    var el = dom.createElement(\"div\");\n    var popup = new $singleLineEditor(el);\n    if (parentNode)\n        parentNode.appendChild(el);\n    el.style.display = \"none\";\n    popup.renderer.content.style.cursor = \"default\";\n    popup.renderer.setStyle(\"ace_autocomplete\");\n    popup.setOption(\"displayIndentGuides\", false);\n    popup.setOption(\"dragDelay\", 150);\n    var noop = function () { };\n    popup.focus = noop;\n    popup.$isFocused = true;\n    popup.renderer.$cursorLayer.restartTimer = noop;\n    popup.renderer.$cursorLayer.element.style.opacity = 0;\n    popup.renderer.$maxLines = 8;\n    popup.renderer.$keepTextAreaAtCursor = false;\n    popup.setHighlightActiveLine(false);\n    popup.session.highlight(\"\");\n    popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n    popup.on(\"mousedown\", function (e) {\n        var pos = e.getDocumentPosition();\n        popup.selection.moveToPosition(pos);\n        selectionMarker.start.row = selectionMarker.end.row = pos.row;\n        e.stop();\n    });\n    var lastMouseEvent;\n    var hoverMarker = new Range(-1, 0, -1, Infinity);\n    var selectionMarker = new Range(-1, 0, -1, Infinity);\n    selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n    popup.setSelectOnHover = function (val) {\n        if (!val) {\n            hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n        }\n        else if (hoverMarker.id) {\n            popup.session.removeMarker(hoverMarker.id);\n            hoverMarker.id = null;\n        }\n    };\n    popup.setSelectOnHover(false);\n    popup.on(\"mousemove\", function (e) {\n        if (!lastMouseEvent) {\n            lastMouseEvent = e;\n            return;\n        }\n        if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n            return;\n        }\n        lastMouseEvent = e;\n        lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n        var row = lastMouseEvent.getDocumentPosition().row;\n        if (hoverMarker.start.row != row) {\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row);\n        }\n    });\n    popup.renderer.on(\"beforeRender\", function () {\n        if (lastMouseEvent && hoverMarker.start.row != -1) {\n            lastMouseEvent.$pos = null;\n            var row = lastMouseEvent.getDocumentPosition().row;\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row, true);\n        }\n    });\n    popup.renderer.on(\"afterRender\", function () {\n        var row = popup.getRow();\n        var t = popup.renderer.$textLayer;\n        var selected = t.element.childNodes[row - t.config.firstRow];\n        if (selected !== t.selectedNode && t.selectedNode)\n            dom.removeCssClass(t.selectedNode, \"ace_selected\");\n        t.selectedNode = selected;\n        if (selected)\n            dom.addCssClass(selected, \"ace_selected\");\n    });\n    var hideHoverMarker = function () { setHoverMarker(-1); };\n    var setHoverMarker = function (row, suppressRedraw) {\n        if (row !== hoverMarker.start.row) {\n            hoverMarker.start.row = hoverMarker.end.row = row;\n            if (!suppressRedraw)\n                popup.session._emit(\"changeBackMarker\");\n            popup._emit(\"changeHoverMarker\");\n        }\n    };\n    popup.getHoveredRow = function () {\n        return hoverMarker.start.row;\n    };\n    event.addListener(popup.container, \"mouseout\", hideHoverMarker);\n    popup.on(\"hide\", hideHoverMarker);\n    popup.on(\"changeSelection\", hideHoverMarker);\n    popup.session.doc.getLength = function () {\n        return popup.data.length;\n    };\n    popup.session.doc.getLine = function (i) {\n        var data = popup.data[i];\n        if (typeof data == \"string\")\n            return data;\n        return (data && data.value) || \"\";\n    };\n    var bgTokenizer = popup.session.bgTokenizer;\n    bgTokenizer.$tokenizeRow = function (row) {\n        var data = popup.data[row];\n        var tokens = [];\n        if (!data)\n            return tokens;\n        if (typeof data == \"string\")\n            data = { value: data };\n        var caption = data.caption || data.value || data.name;\n        function addToken(value, className) {\n            value && tokens.push({\n                type: (data.className || \"\") + (className || \"\"),\n                value: value\n            });\n        }\n        var lower = caption.toLowerCase();\n        var filterText = (popup.filterText || \"\").toLowerCase();\n        var lastIndex = 0;\n        var lastI = 0;\n        for (var i = 0; i <= filterText.length; i++) {\n            if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n                var sub = filterText.slice(lastI, i);\n                lastI = i;\n                var index = lower.indexOf(sub, lastIndex);\n                if (index == -1)\n                    continue;\n                addToken(caption.slice(lastIndex, index), \"\");\n                lastIndex = index + sub.length;\n                addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n            }\n        }\n        addToken(caption.slice(lastIndex, caption.length), \"\");\n        if (data.meta)\n            tokens.push({ type: \"completion-meta\", value: data.meta });\n        if (data.message)\n            tokens.push({ type: \"completion-message\", value: data.message });\n        return tokens;\n    };\n    bgTokenizer.$updateOnChange = noop;\n    bgTokenizer.start = noop;\n    popup.session.$computeWidth = function () {\n        return this.screenWidth = 0;\n    };\n    popup.isOpen = false;\n    popup.isTopdown = false;\n    popup.autoSelect = true;\n    popup.filterText = \"\";\n    popup.data = [];\n    popup.setData = function (list, filterText) {\n        popup.filterText = filterText || \"\";\n        popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n        popup.data = list || [];\n        popup.setRow(0);\n    };\n    popup.getData = function (row) {\n        return popup.data[row];\n    };\n    popup.getRow = function () {\n        return selectionMarker.start.row;\n    };\n    popup.setRow = function (line) {\n        line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length, line));\n        if (selectionMarker.start.row != line) {\n            popup.selection.clearSelection();\n            selectionMarker.start.row = selectionMarker.end.row = line || 0;\n            popup.session._emit(\"changeBackMarker\");\n            popup.moveCursorTo(line || 0, 0);\n            if (popup.isOpen)\n                popup._signal(\"select\");\n        }\n    };\n    popup.on(\"changeSelection\", function () {\n        if (popup.isOpen)\n            popup.setRow(popup.selection.lead.row);\n        popup.renderer.scrollCursorIntoView();\n    });\n    popup.hide = function () {\n        this.container.style.display = \"none\";\n        this._signal(\"hide\");\n        popup.isOpen = false;\n    };\n    popup.show = function (pos, lineHeight, topdownOnly) {\n        var el = this.container;\n        var screenHeight = window.innerHeight;\n        var screenWidth = window.innerWidth;\n        var renderer = this.renderer;\n        var maxH = renderer.$maxLines * lineHeight * 1.4;\n        var top = pos.top + this.$borderSize;\n        var allowTopdown = top > screenHeight / 2 && !topdownOnly;\n        if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n            renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n            el.style.top = \"\";\n            el.style.bottom = screenHeight - top + \"px\";\n            popup.isTopdown = false;\n        }\n        else {\n            top += lineHeight;\n            renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n            el.style.top = top + \"px\";\n            el.style.bottom = \"\";\n            popup.isTopdown = true;\n        }\n        el.style.display = \"\";\n        var left = pos.left;\n        if (left + el.offsetWidth > screenWidth)\n            left = screenWidth - el.offsetWidth;\n        el.style.left = left + \"px\";\n        this._signal(\"show\");\n        lastMouseEvent = null;\n        popup.isOpen = true;\n    };\n    popup.goTo = function (where) {\n        var row = this.getRow();\n        var max = this.session.getLength() - 1;\n        switch (where) {\n            case \"up\":\n                row = row <= 0 ? max : row - 1;\n                break;\n            case \"down\":\n                row = row >= max ? -1 : row + 1;\n                break;\n            case \"start\":\n                row = 0;\n                break;\n            case \"end\":\n                row = max;\n                break;\n        }\n        this.setRow(row);\n    };\n    popup.getTextLeftOffset = function () {\n        return this.$borderSize + this.renderer.$padding + this.$imageSize;\n    };\n    popup.$imageSize = 0;\n    popup.$borderSize = 1;\n    return popup;\n};\ndom.importCssString(\"\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n    background-color: #CAD6FA;\\n    z-index: 1;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n    background-color: #3a674e;\\n}\\n.ace_editor.ace_autocomplete .ace_line-hover {\\n    border: 1px solid #abbffe;\\n    margin-top: -1px;\\n    background: rgba(233,233,253,0.4);\\n    position: absolute;\\n    z-index: 2;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\n    border: 1px solid rgba(109, 150, 13, 0.8);\\n    background: rgba(58, 103, 78, 0.62);\\n}\\n.ace_completion-meta {\\n    opacity: 0.5;\\n    margin: 0.9em;\\n}\\n.ace_completion-message {\\n    color: blue;\\n}\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\n    color: #2d69c7;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\n    color: #93ca12;\\n}\\n.ace_editor.ace_autocomplete {\\n    width: 300px;\\n    z-index: 200000;\\n    border: 1px lightgray solid;\\n    position: fixed;\\n    box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n    line-height: 1.4;\\n    background: #fefefe;\\n    color: #111;\\n}\\n.ace_dark.ace_editor.ace_autocomplete {\\n    border: 1px #484747 solid;\\n    box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\n    line-height: 1.4;\\n    background: #25282c;\\n    color: #c1c1c1;\\n}\", \"autocompletion.css\", false);\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\n\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.parForEach = function (array, fn, callback) {\n    var completed = 0;\n    var arLength = array.length;\n    if (arLength === 0)\n        callback();\n    for (var i = 0; i < arLength; i++) {\n        fn(array[i], function (result, err) {\n            completed++;\n            if (completed === arLength)\n                callback(result, err);\n        });\n    }\n};\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\nexports.retrievePrecedingIdentifier = function (text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos - 1; i >= 0; i--) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf.reverse().join(\"\");\n};\nexports.retrieveFollowingIdentifier = function (text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos; i < text.length; i++) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf;\n};\nexports.getCompletionPrefix = function (editor) {\n    var pos = editor.getCursorPosition();\n    var line = editor.session.getLine(pos.row);\n    var prefix;\n    editor.completers.forEach(function (completer) {\n        if (completer.identifierRegexps) {\n            completer.identifierRegexps.forEach(function (identifierRegex) {\n                if (!prefix && identifierRegex)\n                    prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n            }.bind(this));\n        }\n    }.bind(this));\n    return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar util = require(\"./autocomplete/util\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\nvar config = require(\"./config\");\nvar Autocomplete = function () {\n    this.autoInsert = false;\n    this.autoSelect = true;\n    this.exactMatch = false;\n    this.gatherCompletionsId = 0;\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys(this.commands);\n    this.blurListener = this.blurListener.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.mousedownListener = this.mousedownListener.bind(this);\n    this.mousewheelListener = this.mousewheelListener.bind(this);\n    this.changeTimer = lang.delayedCall(function () {\n        this.updateCompletions(true);\n    }.bind(this));\n    this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n(function () {\n    this.$init = function () {\n        this.popup = new AcePopup(document.body || document.documentElement);\n        this.popup.on(\"click\", function (e) {\n            this.insertMatch();\n            e.stop();\n        }.bind(this));\n        this.popup.focus = this.editor.focus.bind(this.editor);\n        this.popup.on(\"show\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n        return this.popup;\n    };\n    this.getPopup = function () {\n        return this.popup || this.$init();\n    };\n    this.openPopup = function (editor, prefix, keepPopupPosition) {\n        if (!this.popup)\n            this.$init();\n        this.popup.autoSelect = this.autoSelect;\n        this.popup.setData(this.completions.filtered, this.completions.filterText);\n        editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        var renderer = editor.renderer;\n        this.popup.setRow(this.autoSelect ? 0 : -1);\n        if (!keepPopupPosition) {\n            this.popup.setTheme(editor.getTheme());\n            this.popup.setFontSize(editor.getFontSize());\n            var lineHeight = renderer.layerConfig.lineHeight;\n            var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n            pos.left -= this.popup.getTextLeftOffset();\n            var rect = editor.container.getBoundingClientRect();\n            pos.top += rect.top - renderer.layerConfig.offset;\n            pos.left += rect.left - editor.renderer.scrollLeft;\n            pos.left += renderer.gutterWidth;\n            this.popup.show(pos, lineHeight);\n        }\n        else if (keepPopupPosition && !prefix) {\n            this.detach();\n        }\n        this.changeTimer.cancel();\n    };\n    this.detach = function () {\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.off(\"changeSelection\", this.changeListener);\n        this.editor.off(\"blur\", this.blurListener);\n        this.editor.off(\"mousedown\", this.mousedownListener);\n        this.editor.off(\"mousewheel\", this.mousewheelListener);\n        this.changeTimer.cancel();\n        this.hideDocTooltip();\n        this.gatherCompletionsId += 1;\n        if (this.popup && this.popup.isOpen)\n            this.popup.hide();\n        if (this.base)\n            this.base.detach();\n        this.activated = false;\n        this.completions = this.base = null;\n    };\n    this.changeListener = function (e) {\n        var cursor = this.editor.selection.lead;\n        if (cursor.row != this.base.row || cursor.column < this.base.column) {\n            this.detach();\n        }\n        if (this.activated)\n            this.changeTimer.schedule();\n        else\n            this.detach();\n    };\n    this.blurListener = function (e) {\n        var el = document.activeElement;\n        var text = this.editor.textInput.getElement();\n        var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n        var container = this.popup && this.popup.container;\n        if (el != text && el.parentNode != container && !fromTooltip\n            && el != this.tooltipNode && e.relatedTarget != text) {\n            this.detach();\n        }\n    };\n    this.mousedownListener = function (e) {\n        this.detach();\n    };\n    this.mousewheelListener = function (e) {\n        this.detach();\n    };\n    this.goTo = function (where) {\n        this.popup.goTo(where);\n    };\n    this.insertMatch = function (data, options) {\n        if (!data)\n            data = this.popup.getData(this.popup.getRow());\n        if (!data)\n            return false;\n        var completions = this.completions;\n        this.editor.startOperation({ command: { name: \"insertMatch\" } });\n        if (data.completer && data.completer.insertMatch) {\n            data.completer.insertMatch(this.editor, data);\n        }\n        else {\n            if (!completions)\n                return false;\n            if (completions.filterText) {\n                var ranges = this.editor.selection.getAllRanges();\n                for (var i = 0, range; range = ranges[i]; i++) {\n                    range.start.column -= completions.filterText.length;\n                    this.editor.session.remove(range);\n                }\n            }\n            if (data.snippet)\n                snippetManager.insertSnippet(this.editor, data.snippet);\n            else\n                this.editor.execCommand(\"insertstring\", data.value || data);\n        }\n        if (this.completions == completions)\n            this.detach();\n        this.editor.endOperation();\n    };\n    this.commands = {\n        \"Up\": function (editor) { editor.completer.goTo(\"up\"); },\n        \"Down\": function (editor) { editor.completer.goTo(\"down\"); },\n        \"Ctrl-Up|Ctrl-Home\": function (editor) { editor.completer.goTo(\"start\"); },\n        \"Ctrl-Down|Ctrl-End\": function (editor) { editor.completer.goTo(\"end\"); },\n        \"Esc\": function (editor) { editor.completer.detach(); },\n        \"Return\": function (editor) { return editor.completer.insertMatch(); },\n        \"Shift-Return\": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); },\n        \"Tab\": function (editor) {\n            var result = editor.completer.insertMatch();\n            if (!result && !editor.tabstopManager)\n                editor.completer.goTo(\"down\");\n            else\n                return result;\n        },\n        \"PageUp\": function (editor) { editor.completer.popup.gotoPageUp(); },\n        \"PageDown\": function (editor) { editor.completer.popup.gotoPageDown(); }\n    };\n    this.gatherCompletions = function (editor, callback) {\n        var session = editor.getSession();\n        var pos = editor.getCursorPosition();\n        var prefix = util.getCompletionPrefix(editor);\n        this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n        this.base.$insertRight = true;\n        var matches = [];\n        var total = editor.completers.length;\n        editor.completers.forEach(function (completer, i) {\n            completer.getCompletions(editor, session, pos, prefix, function (err, results) {\n                if (!err && results)\n                    matches = matches.concat(results);\n                callback(null, {\n                    prefix: util.getCompletionPrefix(editor),\n                    matches: matches,\n                    finished: (--total === 0)\n                });\n            });\n        });\n        return true;\n    };\n    this.showPopup = function (editor, options) {\n        if (this.editor)\n            this.detach();\n        this.activated = true;\n        this.editor = editor;\n        if (editor.completer != this) {\n            if (editor.completer)\n                editor.completer.detach();\n            editor.completer = this;\n        }\n        editor.on(\"changeSelection\", this.changeListener);\n        editor.on(\"blur\", this.blurListener);\n        editor.on(\"mousedown\", this.mousedownListener);\n        editor.on(\"mousewheel\", this.mousewheelListener);\n        this.updateCompletions(false, options);\n    };\n    this.updateCompletions = function (keepPopupPosition, options) {\n        if (keepPopupPosition && this.base && this.completions) {\n            var pos = this.editor.getCursorPosition();\n            var prefix = this.editor.session.getTextRange({ start: this.base, end: pos });\n            if (prefix == this.completions.filterText)\n                return;\n            this.completions.setFilter(prefix);\n            if (!this.completions.filtered.length)\n                return this.detach();\n            if (this.completions.filtered.length == 1\n                && this.completions.filtered[0].value == prefix\n                && !this.completions.filtered[0].snippet)\n                return this.detach();\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n            return;\n        }\n        if (options && options.matches) {\n            var pos = this.editor.getSelectionRange().start;\n            this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);\n            this.base.$insertRight = true;\n            this.completions = new FilteredList(options.matches);\n            return this.openPopup(this.editor, \"\", keepPopupPosition);\n        }\n        var _id = this.gatherCompletionsId;\n        var detachIfFinished = function (results) {\n            if (!results.finished)\n                return;\n            return this.detach();\n        }.bind(this);\n        var processResults = function (results) {\n            var prefix = results.prefix;\n            var matches = results.matches;\n            this.completions = new FilteredList(matches);\n            if (this.exactMatch)\n                this.completions.exactMatch = true;\n            this.completions.setFilter(prefix);\n            var filtered = this.completions.filtered;\n            if (!filtered.length)\n                return detachIfFinished(results);\n            if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n                return detachIfFinished(results);\n            if (this.autoInsert && filtered.length == 1 && results.finished)\n                return this.insertMatch(filtered[0]);\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n        }.bind(this);\n        var isImmediate = true;\n        var immediateResults = null;\n        this.gatherCompletions(this.editor, function (err, results) {\n            var prefix = results.prefix;\n            var matches = results && results.matches;\n            if (!matches || !matches.length)\n                return detachIfFinished(results);\n            if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)\n                return;\n            if (isImmediate) {\n                immediateResults = results;\n                return;\n            }\n            processResults(results);\n        }.bind(this));\n        isImmediate = false;\n        if (immediateResults) {\n            var results = immediateResults;\n            immediateResults = null;\n            processResults(results);\n        }\n    };\n    this.cancelContextMenu = function () {\n        this.editor.$mouseHandler.cancelContextMenu();\n    };\n    this.updateDocTooltip = function () {\n        var popup = this.popup;\n        var all = popup.data;\n        var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n        var doc = null;\n        if (!selected || !this.editor || !this.popup.isOpen)\n            return this.hideDocTooltip();\n        this.editor.completers.some(function (completer) {\n            if (completer.getDocTooltip)\n                doc = completer.getDocTooltip(selected);\n            return doc;\n        });\n        if (!doc && typeof selected != \"string\")\n            doc = selected;\n        if (typeof doc == \"string\")\n            doc = { docText: doc };\n        if (!doc || !(doc.docHTML || doc.docText))\n            return this.hideDocTooltip();\n        this.showDocTooltip(doc);\n    };\n    this.showDocTooltip = function (item) {\n        if (!this.tooltipNode) {\n            this.tooltipNode = dom.createElement(\"div\");\n            this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n            this.tooltipNode.style.margin = 0;\n            this.tooltipNode.style.pointerEvents = \"auto\";\n            this.tooltipNode.tabIndex = -1;\n            this.tooltipNode.onblur = this.blurListener.bind(this);\n            this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n        }\n        var tooltipNode = this.tooltipNode;\n        if (item.docHTML) {\n            tooltipNode.innerHTML = item.docHTML;\n        }\n        else if (item.docText) {\n            tooltipNode.textContent = item.docText;\n        }\n        if (!tooltipNode.parentNode)\n            document.body.appendChild(tooltipNode);\n        var popup = this.popup;\n        var rect = popup.container.getBoundingClientRect();\n        tooltipNode.style.top = popup.container.style.top;\n        tooltipNode.style.bottom = popup.container.style.bottom;\n        tooltipNode.style.display = \"block\";\n        if (window.innerWidth - rect.right < 320) {\n            if (rect.left < 320) {\n                if (popup.isTopdown) {\n                    tooltipNode.style.top = rect.bottom + \"px\";\n                    tooltipNode.style.left = rect.left + \"px\";\n                    tooltipNode.style.right = \"\";\n                    tooltipNode.style.bottom = \"\";\n                }\n                else {\n                    tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n                    tooltipNode.style.left = rect.left + \"px\";\n                    tooltipNode.style.right = \"\";\n                    tooltipNode.style.bottom = \"\";\n                }\n            }\n            else {\n                tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n                tooltipNode.style.left = \"\";\n            }\n        }\n        else {\n            tooltipNode.style.left = (rect.right + 1) + \"px\";\n            tooltipNode.style.right = \"\";\n        }\n    };\n    this.hideDocTooltip = function () {\n        this.tooltipTimer.cancel();\n        if (!this.tooltipNode)\n            return;\n        var el = this.tooltipNode;\n        if (!this.editor.isFocused() && document.activeElement == el)\n            this.editor.focus();\n        this.tooltipNode = null;\n        if (el.parentNode)\n            el.parentNode.removeChild(el);\n    };\n    this.onTooltipClick = function (e) {\n        var a = e.target;\n        while (a && a != this.tooltipNode) {\n            if (a.nodeName == \"A\" && a.href) {\n                a.rel = \"noreferrer\";\n                a.target = \"_blank\";\n                break;\n            }\n            a = a.parentNode;\n        }\n    };\n    this.destroy = function () {\n        this.detach();\n        if (this.popup) {\n            this.popup.destroy();\n            var el = this.popup.container;\n            if (el && el.parentNode)\n                el.parentNode.removeChild(el);\n        }\n        if (this.editor && this.editor.completer == this)\n            this.editor.completer == null;\n        this.popup = null;\n    };\n}).call(Autocomplete.prototype);\nAutocomplete.for = function (editor) {\n    if (editor.completer) {\n        return editor.completer;\n    }\n    if (config.get(\"sharedPopups\")) {\n        if (!Autocomplete.$shared)\n            Autocomplete.$sharedInstance = new Autocomplete();\n        editor.completer = Autocomplete.$sharedInstance;\n    }\n    else {\n        editor.completer = new Autocomplete();\n        editor.once(\"destroy\", function (e, editor) {\n            editor.completer.destroy();\n        });\n    }\n    return editor.completer;\n};\nAutocomplete.startCommand = {\n    name: \"startAutocomplete\",\n    exec: function (editor, options) {\n        var completer = Autocomplete.for(editor);\n        completer.autoInsert = false;\n        completer.autoSelect = true;\n        completer.showPopup(editor, options);\n        completer.cancelContextMenu();\n    },\n    bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\nvar FilteredList = function (array, filterText) {\n    this.all = array;\n    this.filtered = array;\n    this.filterText = filterText || \"\";\n    this.exactMatch = false;\n};\n(function () {\n    this.setFilter = function (str) {\n        if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n            var matches = this.filtered;\n        else\n            var matches = this.all;\n        this.filterText = str;\n        matches = this.filterCompletions(matches, this.filterText);\n        matches = matches.sort(function (a, b) {\n            return b.exactMatch - a.exactMatch || b.$score - a.$score\n                || (a.caption || a.value).localeCompare(b.caption || b.value);\n        });\n        var prev = null;\n        matches = matches.filter(function (item) {\n            var caption = item.snippet || item.caption || item.value;\n            if (caption === prev)\n                return false;\n            prev = caption;\n            return true;\n        });\n        this.filtered = matches;\n    };\n    this.filterCompletions = function (items, needle) {\n        var results = [];\n        var upper = needle.toUpperCase();\n        var lower = needle.toLowerCase();\n        loop: for (var i = 0, item; item = items[i]; i++) {\n            var caption = item.caption || item.value || item.snippet;\n            if (!caption)\n                continue;\n            var lastIndex = -1;\n            var matchMask = 0;\n            var penalty = 0;\n            var index, distance;\n            if (this.exactMatch) {\n                if (needle !== caption.substr(0, needle.length))\n                    continue loop;\n            }\n            else {\n                var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n                if (fullMatchIndex > -1) {\n                    penalty = fullMatchIndex;\n                }\n                else {\n                    for (var j = 0; j < needle.length; j++) {\n                        var i1 = caption.indexOf(lower[j], lastIndex + 1);\n                        var i2 = caption.indexOf(upper[j], lastIndex + 1);\n                        index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n                        if (index < 0)\n                            continue loop;\n                        distance = index - lastIndex - 1;\n                        if (distance > 0) {\n                            if (lastIndex === -1)\n                                penalty += 10;\n                            penalty += distance;\n                            matchMask = matchMask | (1 << j);\n                        }\n                        lastIndex = index;\n                    }\n                }\n            }\n            item.matchMask = matchMask;\n            item.exactMatch = penalty ? 0 : 1;\n            item.$score = (item.score || 0) - penalty;\n            results.push(item);\n        }\n        return results;\n    };\n}).call(FilteredList.prototype);\nexports.Autocomplete = Autocomplete;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){var Range = require(\"../range\").Range;\nvar splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\nfunction getWordIndex(doc, pos) {\n    var textBefore = doc.getTextRange(Range.fromPoints({ row: 0, column: 0 }, pos));\n    return textBefore.split(splitRegex).length - 1;\n}\nfunction wordDistance(doc, pos) {\n    var prefixPos = getWordIndex(doc, pos);\n    var words = doc.getValue().split(splitRegex);\n    var wordScores = Object.create(null);\n    var currentWord = words[prefixPos];\n    words.forEach(function (word, idx) {\n        if (!word || word === currentWord)\n            return;\n        var distance = Math.abs(prefixPos - idx);\n        var score = words.length - distance;\n        if (wordScores[word]) {\n            wordScores[word] = Math.max(score, wordScores[word]);\n        }\n        else {\n            wordScores[word] = score;\n        }\n    });\n    return wordScores;\n}\nexports.getCompletions = function (editor, session, pos, prefix, callback) {\n    var wordScore = wordDistance(session, pos);\n    var wordList = Object.keys(wordScore);\n    callback(null, wordList.map(function (word) {\n        return {\n            caption: word,\n            value: word,\n            score: wordScore[word],\n            meta: \"local\"\n        };\n    }));\n};\n\n});\n\nace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n    getCompletions: function (editor, session, pos, prefix, callback) {\n        if (session.$mode.completer) {\n            return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n        }\n        var state = editor.session.getState(pos.row);\n        var completions = session.$mode.getCompletions(state, session, pos, prefix);\n        callback(null, completions);\n    }\n};\nvar transformSnippetTooltip = function (str) {\n    var record = {};\n    return str.replace(/\\${(\\d+)(:(.*?))?}/g, function (_, p1, p2, p3) {\n        return (record[p1] = p3 || '');\n    }).replace(/\\$(\\d+?)/g, function (_, p1) {\n        return record[p1];\n    });\n};\nvar snippetCompleter = {\n    getCompletions: function (editor, session, pos, prefix, callback) {\n        var scopes = [];\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/))\n            scopes.push('html-tag');\n        else\n            scopes = snippetManager.getActiveScopes(editor);\n        var snippetMap = snippetManager.snippetMap;\n        var completions = [];\n        scopes.forEach(function (scope) {\n            var snippets = snippetMap[scope] || [];\n            for (var i = snippets.length; i--;) {\n                var s = snippets[i];\n                var caption = s.name || s.tabTrigger;\n                if (!caption)\n                    continue;\n                completions.push({\n                    caption: caption,\n                    snippet: s.content,\n                    meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n                    type: \"snippet\"\n                });\n            }\n        }, this);\n        callback(null, completions);\n    },\n    getDocTooltip: function (item) {\n        if (item.type == \"snippet\" && !item.docHTML) {\n            item.docHTML = [\n                \"<b>\", lang.escapeHTML(item.caption), \"</b>\", \"<hr></hr>\",\n                lang.escapeHTML(transformSnippetTooltip(item.snippet))\n            ].join(\"\");\n        }\n    }\n};\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function (val) {\n    completers.length = 0;\n    if (val)\n        completers.push.apply(completers, val);\n};\nexports.addCompleter = function (completer) {\n    completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\nvar expandSnippet = {\n    name: \"expandSnippet\",\n    exec: function (editor) {\n        return snippetManager.expandWithTab(editor);\n    },\n    bindKey: \"Tab\"\n};\nvar onChangeMode = function (e, editor) {\n    loadSnippetsForMode(editor.session.$mode);\n};\nvar loadSnippetsForMode = function (mode) {\n    if (typeof mode == \"string\")\n        mode = config.$modes[mode];\n    if (!mode)\n        return;\n    if (!snippetManager.files)\n        snippetManager.files = {};\n    loadSnippetFile(mode.$id, mode.snippetFileId);\n    if (mode.modes)\n        mode.modes.forEach(loadSnippetsForMode);\n};\nvar loadSnippetFile = function (id, snippetFilePath) {\n    if (!snippetFilePath || !id || snippetManager.files[id])\n        return;\n    snippetManager.files[id] = {};\n    config.loadModule(snippetFilePath, function (m) {\n        if (!m)\n            return;\n        snippetManager.files[id] = m;\n        if (!m.snippets && m.snippetText)\n            m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n        snippetManager.register(m.snippets || [], m.scope);\n        if (m.includeScopes) {\n            snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n            m.includeScopes.forEach(function (x) {\n                loadSnippetsForMode(\"ace/mode/\" + x);\n            });\n        }\n    });\n};\nvar doLiveAutocomplete = function (e) {\n    var editor = e.editor;\n    var hasCompleter = editor.completer && editor.completer.activated;\n    if (e.command.name === \"backspace\") {\n        if (hasCompleter && !util.getCompletionPrefix(editor))\n            editor.completer.detach();\n    }\n    else if (e.command.name === \"insertstring\") {\n        var prefix = util.getCompletionPrefix(editor);\n        if (prefix && !hasCompleter) {\n            var completer = Autocomplete.for(editor);\n            completer.autoInsert = false;\n            completer.showPopup(editor);\n        }\n    }\n};\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    enableBasicAutocompletion: {\n        set: function (val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val) ? val : completers;\n                this.commands.addCommand(Autocomplete.startCommand);\n            }\n            else {\n                this.commands.removeCommand(Autocomplete.startCommand);\n            }\n        },\n        value: false\n    },\n    enableLiveAutocompletion: {\n        set: function (val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val) ? val : completers;\n                this.commands.on('afterExec', doLiveAutocomplete);\n            }\n            else {\n                this.commands.removeListener('afterExec', doLiveAutocomplete);\n            }\n        },\n        value: false\n    },\n    enableSnippets: {\n        set: function (val) {\n            if (val) {\n                this.commands.addCommand(expandSnippet);\n                this.on(\"changeMode\", onChangeMode);\n                onChangeMode(null, this);\n            }\n            else {\n                this.commands.removeCommand(expandSnippet);\n                this.off(\"changeMode\", onChangeMode);\n            }\n        },\n        value: false\n    }\n});\n\n});                (function() {\n                    ace.require([\"ace/ext/language_tools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-linking.js",
    "content": "ace.define(\"ace/ext/linking\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"], function(require, exports, module){var Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    enableLinking: {\n        set: function (val) {\n            if (val) {\n                this.on(\"click\", onClick);\n                this.on(\"mousemove\", onMouseMove);\n            }\n            else {\n                this.off(\"click\", onClick);\n                this.off(\"mousemove\", onMouseMove);\n            }\n        },\n        value: false\n    }\n});\nexports.previousLinkingHover = false;\nfunction onMouseMove(e) {\n    var editor = e.editor;\n    var ctrl = e.getAccelKey();\n    if (ctrl) {\n        var editor = e.editor;\n        var docPos = e.getDocumentPosition();\n        var session = editor.session;\n        var token = session.getTokenAt(docPos.row, docPos.column);\n        if (exports.previousLinkingHover && exports.previousLinkingHover != token) {\n            editor._emit(\"linkHoverOut\");\n        }\n        editor._emit(\"linkHover\", { position: docPos, token: token });\n        exports.previousLinkingHover = token;\n    }\n    else if (exports.previousLinkingHover) {\n        editor._emit(\"linkHoverOut\");\n        exports.previousLinkingHover = false;\n    }\n}\nfunction onClick(e) {\n    var ctrl = e.getAccelKey();\n    var button = e.getButton();\n    if (button == 0 && ctrl) {\n        var editor = e.editor;\n        var docPos = e.getDocumentPosition();\n        var session = editor.session;\n        var token = session.getTokenAt(docPos.row, docPos.column);\n        editor._emit(\"linkClick\", { position: docPos, token: token });\n    }\n}\n\n});                (function() {\n                    ace.require([\"ace/ext/linking\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-modelist.js",
    "content": "ace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar modes = [];\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\nvar Mode = function (name, caption, extensions) {\n    this.name = name;\n    this.caption = caption;\n    this.mode = \"ace/mode/\" + name;\n    this.extensions = extensions;\n    var re;\n    if (/\\^/.test(extensions)) {\n        re = extensions.replace(/\\|(\\^)?/g, function (a, b) {\n            return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n        }) + \"$\";\n    }\n    else {\n        re = \"^.*\\\\.(\" + extensions + \")$\";\n    }\n    this.extRe = new RegExp(re, \"gi\");\n};\nMode.prototype.supportsFile = function (filename) {\n    return filename.match(this.extRe);\n};\nvar supportedModes = {\n    ABAP: [\"abap\"],\n    ABC: [\"abc\"],\n    ActionScript: [\"as\"],\n    ADA: [\"ada|adb\"],\n    Alda: [\"alda\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    Apex: [\"apex|cls|trigger|tgr\"],\n    AQL: [\"aql\"],\n    AsciiDoc: [\"asciidoc|adoc\"],\n    ASL: [\"dsl|asl|asl.json\"],\n    Assembly_x86: [\"asm|a\"],\n    AutoHotKey: [\"ahk\"],\n    BatchFile: [\"bat|cmd\"],\n    BibTeX: [\"bib\"],\n    C_Cpp: [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search: [\"c9search_results\"],\n    Cirru: [\"cirru|cr\"],\n    Clojure: [\"clj|cljs\"],\n    Cobol: [\"CBL|COB\"],\n    coffee: [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion: [\"cfm\"],\n    Crystal: [\"cr\"],\n    CSharp: [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS: [\"css\"],\n    Curly: [\"curly\"],\n    D: [\"d|di\"],\n    Dart: [\"dart\"],\n    Diff: [\"diff|patch\"],\n    Dockerfile: [\"^Dockerfile\"],\n    Dot: [\"dot\"],\n    Drools: [\"drl\"],\n    Edifact: [\"edi\"],\n    Eiffel: [\"e|ge\"],\n    EJS: [\"ejs\"],\n    Elixir: [\"ex|exs\"],\n    Elm: [\"elm\"],\n    Erlang: [\"erl|hrl\"],\n    Forth: [\"frt|fs|ldr|fth|4th\"],\n    Fortran: [\"f|f90\"],\n    FSharp: [\"fsi|fs|ml|mli|fsx|fsscript\"],\n    FSL: [\"fsl\"],\n    FTL: [\"ftl\"],\n    Gcode: [\"gcode\"],\n    Gherkin: [\"feature\"],\n    Gitignore: [\"^.gitignore\"],\n    Glsl: [\"glsl|frag|vert\"],\n    Gobstones: [\"gbs\"],\n    golang: [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy: [\"groovy\"],\n    HAML: [\"haml\"],\n    Handlebars: [\"hbs|handlebars|tpl|mustache\"],\n    Haskell: [\"hs\"],\n    Haskell_Cabal: [\"cabal\"],\n    haXe: [\"hx\"],\n    Hjson: [\"hjson\"],\n    HTML: [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby: [\"erb|rhtml|html.erb\"],\n    INI: [\"ini|conf|cfg|prefs\"],\n    Io: [\"io\"],\n    Ion: [\"ion\"],\n    Jack: [\"jack\"],\n    Jade: [\"jade|pug\"],\n    Java: [\"java\"],\n    JavaScript: [\"js|jsm|jsx|cjs|mjs\"],\n    JSON: [\"json\"],\n    JSON5: [\"json5\"],\n    JSONiq: [\"jq\"],\n    JSP: [\"jsp\"],\n    JSSM: [\"jssm|jssm_state\"],\n    JSX: [\"jsx\"],\n    Julia: [\"jl\"],\n    Kotlin: [\"kt|kts\"],\n    LaTeX: [\"tex|latex|ltx|bib\"],\n    Latte: [\"latte\"],\n    LESS: [\"less\"],\n    Liquid: [\"liquid\"],\n    Lisp: [\"lisp\"],\n    LiveScript: [\"ls\"],\n    Log: [\"log\"],\n    LogiQL: [\"logic|lql\"],\n    LSL: [\"lsl\"],\n    Lua: [\"lua\"],\n    LuaPage: [\"lp\"],\n    Lucene: [\"lucene\"],\n    Makefile: [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown: [\"md|markdown\"],\n    Mask: [\"mask\"],\n    MATLAB: [\"matlab\"],\n    Maze: [\"mz\"],\n    MediaWiki: [\"wiki|mediawiki\"],\n    MEL: [\"mel\"],\n    MIPS: [\"s|asm\"],\n    MIXAL: [\"mixal\"],\n    MUSHCode: [\"mc|mush\"],\n    MySQL: [\"mysql\"],\n    Nginx: [\"nginx|conf\"],\n    Nim: [\"nim\"],\n    Nix: [\"nix\"],\n    NSIS: [\"nsi|nsh\"],\n    Nunjucks: [\"nunjucks|nunjs|nj|njk\"],\n    ObjectiveC: [\"m|mm\"],\n    OCaml: [\"ml|mli\"],\n    PartiQL: [\"partiql|pql\"],\n    Pascal: [\"pas|p\"],\n    Perl: [\"pl|pm\"],\n    pgSQL: [\"pgsql\"],\n    PHP_Laravel_blade: [\"blade.php\"],\n    PHP: [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    Pig: [\"pig\"],\n    Powershell: [\"ps1\"],\n    Praat: [\"praat|praatscript|psc|proc\"],\n    Prisma: [\"prisma\"],\n    Prolog: [\"plg|prolog\"],\n    Properties: [\"properties\"],\n    Protobuf: [\"proto\"],\n    Puppet: [\"epp|pp\"],\n    Python: [\"py\"],\n    QML: [\"qml\"],\n    R: [\"r\"],\n    Raku: [\"raku|rakumod|rakutest|p6|pl6|pm6\"],\n    Razor: [\"cshtml|asp\"],\n    RDoc: [\"Rd\"],\n    Red: [\"red|reds\"],\n    RHTML: [\"Rhtml\"],\n    Robot: [\"robot|resource\"],\n    RST: [\"rst\"],\n    Ruby: [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust: [\"rs\"],\n    SaC: [\"sac\"],\n    SASS: [\"sass\"],\n    SCAD: [\"scad\"],\n    Scala: [\"scala|sbt\"],\n    Scheme: [\"scm|sm|rkt|oak|scheme\"],\n    Scrypt: [\"scrypt\"],\n    SCSS: [\"scss\"],\n    SH: [\"sh|bash|^.bashrc\"],\n    SJS: [\"sjs\"],\n    Slim: [\"slim|skim\"],\n    Smarty: [\"smarty|tpl\"],\n    Smithy: [\"smithy\"],\n    snippets: [\"snippets\"],\n    Soy_Template: [\"soy\"],\n    Space: [\"space\"],\n    SQL: [\"sql\"],\n    SQLServer: [\"sqlserver\"],\n    Stylus: [\"styl|stylus\"],\n    SVG: [\"svg\"],\n    Swift: [\"swift\"],\n    Tcl: [\"tcl\"],\n    Terraform: [\"tf\", \"tfvars\", \"terragrunt\"],\n    Tex: [\"tex\"],\n    Text: [\"txt\"],\n    Textile: [\"textile\"],\n    Toml: [\"toml\"],\n    TSX: [\"tsx\"],\n    Twig: [\"twig|swig\"],\n    Typescript: [\"ts|typescript|str\"],\n    Vala: [\"vala\"],\n    VBScript: [\"vbs|vb\"],\n    Velocity: [\"vm\"],\n    Verilog: [\"v|vh|sv|svh\"],\n    VHDL: [\"vhd|vhdl\"],\n    Visualforce: [\"vfp|component|page\"],\n    Wollok: [\"wlk|wpgm|wtest\"],\n    XML: [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery: [\"xq\"],\n    YAML: [\"yaml|yml\"],\n    Zeek: [\"zeek|bro\"],\n    Django: [\"html\"]\n};\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\",\n    PHP_Laravel_blade: \"PHP (Blade Template)\",\n    Perl6: \"Perl 6\",\n    AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});                (function() {\n                    ace.require([\"ace/ext/modelist\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-options.js",
    "content": "ace.define(\"ace/ext/menu_tools/settings_menu.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"#ace_settingsmenu, #kbshortcutmenu {\\n    background-color: #F7F7F7;\\n    color: black;\\n    box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\n    padding: 1em 0.5em 2em 1em;\\n    overflow: auto;\\n    position: absolute;\\n    margin: 0;\\n    bottom: 0;\\n    right: 0;\\n    top: 0;\\n    z-index: 9991;\\n    cursor: default;\\n}\\n\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\n    box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\n    background-color: rgba(255, 255, 255, 0.6);\\n    color: black;\\n}\\n\\n.ace_optionsMenuEntry:hover {\\n    background-color: rgba(100, 100, 100, 0.1);\\n    transition: all 0.3s\\n}\\n\\n.ace_closeButton {\\n    background: rgba(245, 146, 146, 0.5);\\n    border: 1px solid #F48A8A;\\n    border-radius: 50%;\\n    padding: 7px;\\n    position: absolute;\\n    right: -8px;\\n    top: -8px;\\n    z-index: 100000;\\n}\\n.ace_closeButton{\\n    background: rgba(245, 146, 146, 0.9);\\n}\\n.ace_optionsMenuKey {\\n    color: darkslateblue;\\n    font-weight: bold;\\n}\\n.ace_optionsMenuCommand {\\n    color: darkcyan;\\n    font-weight: normal;\\n}\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\n    vertical-align: middle;\\n}\\n\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\n    background: #e7e7e7;\\n    box-shadow: 1px 0px 2px 0px #adadad inset;\\n    border-color: #adadad;\\n}\\n.ace_optionsMenuEntry button {\\n    background: white;\\n    border: 1px solid lightgray;\\n    margin: 0px;\\n}\\n.ace_optionsMenuEntry button:hover{\\n    background: #f0f0f0;\\n}\";\n\n});\n\nace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/ext/menu_tools/settings_menu.css\"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = require(\"./settings_menu.css\");\ndom.importCssString(cssText, \"settings_menu.css\", false);\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, callback) {\n    var closer = document.createElement('div');\n    var ignoreFocusOut = false;\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            close();\n        }\n    }\n    function close() {\n        if (!closer)\n            return;\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        if (editor) {\n            editor.focus();\n        }\n        closer = null;\n        callback && callback();\n    }\n    function setIgnoreFocusOut(ignore) {\n        ignoreFocusOut = ignore;\n        if (ignore) {\n            closer.style.pointerEvents = \"none\";\n            contentElement.style.pointerEvents = \"auto\";\n        }\n    }\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        (editor ? 'background-color: rgba(0, 0, 0, 0.3);' : '');\n    closer.addEventListener('click', function (e) {\n        if (!ignoreFocusOut) {\n            close();\n        }\n    });\n    document.addEventListener('keydown', documentEscListener);\n    contentElement.addEventListener('click', function (e) {\n        e.stopPropagation();\n    });\n    closer.appendChild(contentElement);\n    document.body.appendChild(closer);\n    if (editor) {\n        editor.blur();\n    }\n    return {\n        close: close,\n        setIgnoreFocusOut: setIgnoreFocusOut\n    };\n};\n\n});\n\nace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar modes = [];\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\nvar Mode = function (name, caption, extensions) {\n    this.name = name;\n    this.caption = caption;\n    this.mode = \"ace/mode/\" + name;\n    this.extensions = extensions;\n    var re;\n    if (/\\^/.test(extensions)) {\n        re = extensions.replace(/\\|(\\^)?/g, function (a, b) {\n            return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n        }) + \"$\";\n    }\n    else {\n        re = \"^.*\\\\.(\" + extensions + \")$\";\n    }\n    this.extRe = new RegExp(re, \"gi\");\n};\nMode.prototype.supportsFile = function (filename) {\n    return filename.match(this.extRe);\n};\nvar supportedModes = {\n    ABAP: [\"abap\"],\n    ABC: [\"abc\"],\n    ActionScript: [\"as\"],\n    ADA: [\"ada|adb\"],\n    Alda: [\"alda\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    Apex: [\"apex|cls|trigger|tgr\"],\n    AQL: [\"aql\"],\n    AsciiDoc: [\"asciidoc|adoc\"],\n    ASL: [\"dsl|asl|asl.json\"],\n    Assembly_x86: [\"asm|a\"],\n    AutoHotKey: [\"ahk\"],\n    BatchFile: [\"bat|cmd\"],\n    BibTeX: [\"bib\"],\n    C_Cpp: [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search: [\"c9search_results\"],\n    Cirru: [\"cirru|cr\"],\n    Clojure: [\"clj|cljs\"],\n    Cobol: [\"CBL|COB\"],\n    coffee: [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion: [\"cfm\"],\n    Crystal: [\"cr\"],\n    CSharp: [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS: [\"css\"],\n    Curly: [\"curly\"],\n    D: [\"d|di\"],\n    Dart: [\"dart\"],\n    Diff: [\"diff|patch\"],\n    Dockerfile: [\"^Dockerfile\"],\n    Dot: [\"dot\"],\n    Drools: [\"drl\"],\n    Edifact: [\"edi\"],\n    Eiffel: [\"e|ge\"],\n    EJS: [\"ejs\"],\n    Elixir: [\"ex|exs\"],\n    Elm: [\"elm\"],\n    Erlang: [\"erl|hrl\"],\n    Forth: [\"frt|fs|ldr|fth|4th\"],\n    Fortran: [\"f|f90\"],\n    FSharp: [\"fsi|fs|ml|mli|fsx|fsscript\"],\n    FSL: [\"fsl\"],\n    FTL: [\"ftl\"],\n    Gcode: [\"gcode\"],\n    Gherkin: [\"feature\"],\n    Gitignore: [\"^.gitignore\"],\n    Glsl: [\"glsl|frag|vert\"],\n    Gobstones: [\"gbs\"],\n    golang: [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy: [\"groovy\"],\n    HAML: [\"haml\"],\n    Handlebars: [\"hbs|handlebars|tpl|mustache\"],\n    Haskell: [\"hs\"],\n    Haskell_Cabal: [\"cabal\"],\n    haXe: [\"hx\"],\n    Hjson: [\"hjson\"],\n    HTML: [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby: [\"erb|rhtml|html.erb\"],\n    INI: [\"ini|conf|cfg|prefs\"],\n    Io: [\"io\"],\n    Ion: [\"ion\"],\n    Jack: [\"jack\"],\n    Jade: [\"jade|pug\"],\n    Java: [\"java\"],\n    JavaScript: [\"js|jsm|jsx|cjs|mjs\"],\n    JSON: [\"json\"],\n    JSON5: [\"json5\"],\n    JSONiq: [\"jq\"],\n    JSP: [\"jsp\"],\n    JSSM: [\"jssm|jssm_state\"],\n    JSX: [\"jsx\"],\n    Julia: [\"jl\"],\n    Kotlin: [\"kt|kts\"],\n    LaTeX: [\"tex|latex|ltx|bib\"],\n    Latte: [\"latte\"],\n    LESS: [\"less\"],\n    Liquid: [\"liquid\"],\n    Lisp: [\"lisp\"],\n    LiveScript: [\"ls\"],\n    Log: [\"log\"],\n    LogiQL: [\"logic|lql\"],\n    LSL: [\"lsl\"],\n    Lua: [\"lua\"],\n    LuaPage: [\"lp\"],\n    Lucene: [\"lucene\"],\n    Makefile: [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown: [\"md|markdown\"],\n    Mask: [\"mask\"],\n    MATLAB: [\"matlab\"],\n    Maze: [\"mz\"],\n    MediaWiki: [\"wiki|mediawiki\"],\n    MEL: [\"mel\"],\n    MIPS: [\"s|asm\"],\n    MIXAL: [\"mixal\"],\n    MUSHCode: [\"mc|mush\"],\n    MySQL: [\"mysql\"],\n    Nginx: [\"nginx|conf\"],\n    Nim: [\"nim\"],\n    Nix: [\"nix\"],\n    NSIS: [\"nsi|nsh\"],\n    Nunjucks: [\"nunjucks|nunjs|nj|njk\"],\n    ObjectiveC: [\"m|mm\"],\n    OCaml: [\"ml|mli\"],\n    PartiQL: [\"partiql|pql\"],\n    Pascal: [\"pas|p\"],\n    Perl: [\"pl|pm\"],\n    pgSQL: [\"pgsql\"],\n    PHP_Laravel_blade: [\"blade.php\"],\n    PHP: [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    Pig: [\"pig\"],\n    Powershell: [\"ps1\"],\n    Praat: [\"praat|praatscript|psc|proc\"],\n    Prisma: [\"prisma\"],\n    Prolog: [\"plg|prolog\"],\n    Properties: [\"properties\"],\n    Protobuf: [\"proto\"],\n    Puppet: [\"epp|pp\"],\n    Python: [\"py\"],\n    QML: [\"qml\"],\n    R: [\"r\"],\n    Raku: [\"raku|rakumod|rakutest|p6|pl6|pm6\"],\n    Razor: [\"cshtml|asp\"],\n    RDoc: [\"Rd\"],\n    Red: [\"red|reds\"],\n    RHTML: [\"Rhtml\"],\n    Robot: [\"robot|resource\"],\n    RST: [\"rst\"],\n    Ruby: [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust: [\"rs\"],\n    SaC: [\"sac\"],\n    SASS: [\"sass\"],\n    SCAD: [\"scad\"],\n    Scala: [\"scala|sbt\"],\n    Scheme: [\"scm|sm|rkt|oak|scheme\"],\n    Scrypt: [\"scrypt\"],\n    SCSS: [\"scss\"],\n    SH: [\"sh|bash|^.bashrc\"],\n    SJS: [\"sjs\"],\n    Slim: [\"slim|skim\"],\n    Smarty: [\"smarty|tpl\"],\n    Smithy: [\"smithy\"],\n    snippets: [\"snippets\"],\n    Soy_Template: [\"soy\"],\n    Space: [\"space\"],\n    SQL: [\"sql\"],\n    SQLServer: [\"sqlserver\"],\n    Stylus: [\"styl|stylus\"],\n    SVG: [\"svg\"],\n    Swift: [\"swift\"],\n    Tcl: [\"tcl\"],\n    Terraform: [\"tf\", \"tfvars\", \"terragrunt\"],\n    Tex: [\"tex\"],\n    Text: [\"txt\"],\n    Textile: [\"textile\"],\n    Toml: [\"toml\"],\n    TSX: [\"tsx\"],\n    Twig: [\"twig|swig\"],\n    Typescript: [\"ts|typescript|str\"],\n    Vala: [\"vala\"],\n    VBScript: [\"vbs|vb\"],\n    Velocity: [\"vm\"],\n    Verilog: [\"v|vh|sv|svh\"],\n    VHDL: [\"vhd|vhdl\"],\n    Visualforce: [\"vfp|component|page\"],\n    Wollok: [\"wlk|wpgm|wtest\"],\n    XML: [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery: [\"xq\"],\n    YAML: [\"yaml|yml\"],\n    Zeek: [\"zeek|bro\"],\n    Django: [\"html\"]\n};\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\",\n    PHP_Laravel_blade: \"PHP (Blade Template)\",\n    Perl6: \"Perl 6\",\n    AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});\n\nace.define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/**\n * Generates a list of themes available when ace was built.\n * @fileOverview Generates a list of themes available when ace was built.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n */\n\"use strict\";\nvar themeData = [\n    [\"Chrome\"],\n    [\"Clouds\"],\n    [\"Crimson Editor\"],\n    [\"Dawn\"],\n    [\"Dreamweaver\"],\n    [\"Eclipse\"],\n    [\"GitHub\"],\n    [\"IPlastic\"],\n    [\"Solarized Light\"],\n    [\"TextMate\"],\n    [\"Tomorrow\"],\n    [\"XCode\"],\n    [\"Kuroir\"],\n    [\"KatzenMilch\"],\n    [\"SQL Server\", \"sqlserver\", \"light\"],\n    [\"Ambiance\", \"ambiance\", \"dark\"],\n    [\"Chaos\", \"chaos\", \"dark\"],\n    [\"Clouds Midnight\", \"clouds_midnight\", \"dark\"],\n    [\"Dracula\", \"\", \"dark\"],\n    [\"Cobalt\", \"cobalt\", \"dark\"],\n    [\"Gruvbox\", \"gruvbox\", \"dark\"],\n    [\"Green on Black\", \"gob\", \"dark\"],\n    [\"idle Fingers\", \"idle_fingers\", \"dark\"],\n    [\"krTheme\", \"kr_theme\", \"dark\"],\n    [\"Merbivore\", \"merbivore\", \"dark\"],\n    [\"Merbivore Soft\", \"merbivore_soft\", \"dark\"],\n    [\"Mono Industrial\", \"mono_industrial\", \"dark\"],\n    [\"Monokai\", \"monokai\", \"dark\"],\n    [\"Nord Dark\", \"nord_dark\", \"dark\"],\n    [\"One Dark\", \"one_dark\", \"dark\"],\n    [\"Pastel on dark\", \"pastel_on_dark\", \"dark\"],\n    [\"Solarized Dark\", \"solarized_dark\", \"dark\"],\n    [\"Terminal\", \"terminal\", \"dark\"],\n    [\"Tomorrow Night\", \"tomorrow_night\", \"dark\"],\n    [\"Tomorrow Night Blue\", \"tomorrow_night_blue\", \"dark\"],\n    [\"Tomorrow Night Bright\", \"tomorrow_night_bright\", \"dark\"],\n    [\"Tomorrow Night 80s\", \"tomorrow_night_eighties\", \"dark\"],\n    [\"Twilight\", \"twilight\", \"dark\"],\n    [\"Vibrant Ink\", \"vibrant_ink\", \"dark\"]\n];\nexports.themesByName = {};\nexports.themes = themeData.map(function (data) {\n    var name = data[1] || data[0].replace(/ /g, \"_\").toLowerCase();\n    var theme = {\n        caption: data[0],\n        theme: \"ace/theme/\" + name,\n        isDark: data[2] == \"dark\",\n        name: name\n    };\n    exports.themesByName[name] = theme;\n    return theme;\n});\n\n});\n\nace.define(\"ace/ext/options\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/overlay_page\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/ext/modelist\",\"ace/ext/themelist\"], function(require, exports, module){\"use strict\";\nrequire(\"./menu_tools/overlay_page\");\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar config = require(\"../config\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar buildDom = dom.buildDom;\nvar modelist = require(\"./modelist\");\nvar themelist = require(\"./themelist\");\nvar themes = { Bright: [], Dark: [] };\nthemelist.themes.forEach(function (x) {\n    themes[x.isDark ? \"Dark\" : \"Bright\"].push({ caption: x.caption, value: x.theme });\n});\nvar modes = modelist.modes.map(function (x) {\n    return { caption: x.caption, value: x.mode };\n});\nvar optionGroups = {\n    Main: {\n        Mode: {\n            path: \"mode\",\n            type: \"select\",\n            items: modes\n        },\n        Theme: {\n            path: \"theme\",\n            type: \"select\",\n            items: themes\n        },\n        \"Keybinding\": {\n            type: \"buttonBar\",\n            path: \"keyboardHandler\",\n            items: [\n                { caption: \"Ace\", value: null },\n                { caption: \"Vim\", value: \"ace/keyboard/vim\" },\n                { caption: \"Emacs\", value: \"ace/keyboard/emacs\" },\n                { caption: \"Sublime\", value: \"ace/keyboard/sublime\" },\n                { caption: \"VSCode\", value: \"ace/keyboard/vscode\" }\n            ]\n        },\n        \"Font Size\": {\n            path: \"fontSize\",\n            type: \"number\",\n            defaultValue: 12,\n            defaults: [\n                { caption: \"12px\", value: 12 },\n                { caption: \"24px\", value: 24 }\n            ]\n        },\n        \"Soft Wrap\": {\n            type: \"buttonBar\",\n            path: \"wrap\",\n            items: [\n                { caption: \"Off\", value: \"off\" },\n                { caption: \"View\", value: \"free\" },\n                { caption: \"margin\", value: \"printMargin\" },\n                { caption: \"40\", value: \"40\" }\n            ]\n        },\n        \"Cursor Style\": {\n            path: \"cursorStyle\",\n            items: [\n                { caption: \"Ace\", value: \"ace\" },\n                { caption: \"Slim\", value: \"slim\" },\n                { caption: \"Smooth\", value: \"smooth\" },\n                { caption: \"Smooth And Slim\", value: \"smooth slim\" },\n                { caption: \"Wide\", value: \"wide\" }\n            ]\n        },\n        \"Folding\": {\n            path: \"foldStyle\",\n            items: [\n                { caption: \"Manual\", value: \"manual\" },\n                { caption: \"Mark begin\", value: \"markbegin\" },\n                { caption: \"Mark begin and end\", value: \"markbeginend\" }\n            ]\n        },\n        \"Soft Tabs\": [{\n                path: \"useSoftTabs\"\n            }, {\n                ariaLabel: \"Tab Size\",\n                path: \"tabSize\",\n                type: \"number\",\n                values: [2, 3, 4, 8, 16]\n            }],\n        \"Overscroll\": {\n            type: \"buttonBar\",\n            path: \"scrollPastEnd\",\n            items: [\n                { caption: \"None\", value: 0 },\n                { caption: \"Half\", value: 0.5 },\n                { caption: \"Full\", value: 1 }\n            ]\n        }\n    },\n    More: {\n        \"Atomic soft tabs\": {\n            path: \"navigateWithinSoftTabs\"\n        },\n        \"Enable Behaviours\": {\n            path: \"behavioursEnabled\"\n        },\n        \"Wrap with quotes\": {\n            path: \"wrapBehavioursEnabled\"\n        },\n        \"Enable Auto Indent\": {\n            path: \"enableAutoIndent\"\n        },\n        \"Full Line Selection\": {\n            type: \"checkbox\",\n            values: \"text|line\",\n            path: \"selectionStyle\"\n        },\n        \"Highlight Active Line\": {\n            path: \"highlightActiveLine\"\n        },\n        \"Show Invisibles\": {\n            path: \"showInvisibles\"\n        },\n        \"Show Indent Guides\": {\n            path: \"displayIndentGuides\"\n        },\n        \"Highlight Indent Guides\": {\n            path: \"highlightIndentGuides\"\n        },\n        \"Persistent HScrollbar\": {\n            path: \"hScrollBarAlwaysVisible\"\n        },\n        \"Persistent VScrollbar\": {\n            path: \"vScrollBarAlwaysVisible\"\n        },\n        \"Animate scrolling\": {\n            path: \"animatedScroll\"\n        },\n        \"Show Gutter\": {\n            path: \"showGutter\"\n        },\n        \"Show Line Numbers\": {\n            path: \"showLineNumbers\"\n        },\n        \"Relative Line Numbers\": {\n            path: \"relativeLineNumbers\"\n        },\n        \"Fixed Gutter Width\": {\n            path: \"fixedWidthGutter\"\n        },\n        \"Show Print Margin\": [{\n                path: \"showPrintMargin\"\n            }, {\n                ariaLabel: \"Print Margin\",\n                type: \"number\",\n                path: \"printMarginColumn\"\n            }],\n        \"Indented Soft Wrap\": {\n            path: \"indentedSoftWrap\"\n        },\n        \"Highlight selected word\": {\n            path: \"highlightSelectedWord\"\n        },\n        \"Fade Fold Widgets\": {\n            path: \"fadeFoldWidgets\"\n        },\n        \"Use textarea for IME\": {\n            path: \"useTextareaForIME\"\n        },\n        \"Merge Undo Deltas\": {\n            path: \"mergeUndoDeltas\",\n            items: [\n                { caption: \"Always\", value: \"always\" },\n                { caption: \"Never\", value: \"false\" },\n                { caption: \"Timed\", value: \"true\" }\n            ]\n        },\n        \"Elastic Tabstops\": {\n            path: \"useElasticTabstops\"\n        },\n        \"Incremental Search\": {\n            path: \"useIncrementalSearch\"\n        },\n        \"Read-only\": {\n            path: \"readOnly\"\n        },\n        \"Copy without selection\": {\n            path: \"copyWithEmptySelection\"\n        },\n        \"Live Autocompletion\": {\n            path: \"enableLiveAutocompletion\"\n        },\n        \"Custom scrollbar\": {\n            path: \"customScrollbar\"\n        }\n    }\n};\nvar OptionPanel = function (editor, element) {\n    this.editor = editor;\n    this.container = element || document.createElement(\"div\");\n    this.groups = [];\n    this.options = {};\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.add = function (config) {\n        if (config.Main)\n            oop.mixin(optionGroups.Main, config.Main);\n        if (config.More)\n            oop.mixin(optionGroups.More, config.More);\n    };\n    this.render = function () {\n        this.container.innerHTML = \"\";\n        buildDom([\"table\", { role: \"presentation\", id: \"controls\" },\n            this.renderOptionGroup(optionGroups.Main),\n            [\"tr\", null, [\"td\", { colspan: 2 },\n                    [\"table\", { role: \"presentation\", id: \"more-controls\" },\n                        this.renderOptionGroup(optionGroups.More)\n                    ]\n                ]],\n            [\"tr\", null, [\"td\", { colspan: 2 }, \"version \" + config.version]]\n        ], this.container);\n    };\n    this.renderOptionGroup = function (group) {\n        return Object.keys(group).map(function (key, i) {\n            var item = group[key];\n            if (!item.position)\n                item.position = i / 10000;\n            if (!item.label)\n                item.label = key;\n            return item;\n        }).sort(function (a, b) {\n            return a.position - b.position;\n        }).map(function (item) {\n            return this.renderOption(item.label, item);\n        }, this);\n    };\n    this.renderOptionControl = function (key, option) {\n        var self = this;\n        if (Array.isArray(option)) {\n            return option.map(function (x) {\n                return self.renderOptionControl(key, x);\n            });\n        }\n        var control;\n        var value = self.getOption(option);\n        if (option.values && option.type != \"checkbox\") {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            option.items = option.values.map(function (v) {\n                return { value: v, name: v };\n            });\n        }\n        if (option.type == \"buttonBar\") {\n            control = [\"div\", { role: \"group\", \"aria-labelledby\": option.path + \"-label\" }, option.items.map(function (item) {\n                    return [\"button\", {\n                            value: item.value,\n                            ace_selected_button: value == item.value,\n                            'aria-pressed': value == item.value,\n                            onclick: function () {\n                                self.setOption(option, item.value);\n                                var nodes = this.parentNode.querySelectorAll(\"[ace_selected_button]\");\n                                for (var i = 0; i < nodes.length; i++) {\n                                    nodes[i].removeAttribute(\"ace_selected_button\");\n                                    nodes[i].setAttribute(\"aria-pressed\", false);\n                                }\n                                this.setAttribute(\"ace_selected_button\", true);\n                                this.setAttribute(\"aria-pressed\", true);\n                            }\n                        }, item.desc || item.caption || item.name];\n                })];\n        }\n        else if (option.type == \"number\") {\n            control = [\"input\", { type: \"number\", value: value || option.defaultValue, style: \"width:3em\", oninput: function () {\n                        self.setOption(option, parseInt(this.value));\n                    } }];\n            if (option.ariaLabel) {\n                control[1][\"aria-label\"] = option.ariaLabel;\n            }\n            else {\n                control[1].id = key;\n            }\n            if (option.defaults) {\n                control = [control, option.defaults.map(function (item) {\n                        return [\"button\", { onclick: function () {\n                                    var input = this.parentNode.firstChild;\n                                    input.value = item.value;\n                                    input.oninput();\n                                } }, item.caption];\n                    })];\n            }\n        }\n        else if (option.items) {\n            var buildItems = function (items) {\n                return items.map(function (item) {\n                    return [\"option\", { value: item.value || item.name }, item.desc || item.caption || item.name];\n                });\n            };\n            var items = Array.isArray(option.items)\n                ? buildItems(option.items)\n                : Object.keys(option.items).map(function (key) {\n                    return [\"optgroup\", { \"label\": key }, buildItems(option.items[key])];\n                });\n            control = [\"select\", { id: key, value: value, onchange: function () {\n                        self.setOption(option, this.value);\n                    } }, items];\n        }\n        else {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            if (option.values)\n                value = value == option.values[1];\n            control = [\"input\", { type: \"checkbox\", id: key, checked: value || null, onchange: function () {\n                        var value = this.checked;\n                        if (option.values)\n                            value = option.values[value ? 1 : 0];\n                        self.setOption(option, value);\n                    } }];\n            if (option.type == \"checkedNumber\") {\n                control = [control, []];\n            }\n        }\n        return control;\n    };\n    this.renderOption = function (key, option) {\n        if (option.path && !option.onchange && !this.editor.$options[option.path])\n            return;\n        var path = Array.isArray(option) ? option[0].path : option.path;\n        this.options[path] = option;\n        var safeKey = \"-\" + path;\n        var safeId = path + \"-label\";\n        var control = this.renderOptionControl(safeKey, option);\n        return [\"tr\", { class: \"ace_optionsMenuEntry\" }, [\"td\",\n                [\"label\", { for: safeKey, id: safeId }, key]\n            ], [\"td\", control]];\n    };\n    this.setOption = function (option, value) {\n        if (typeof option == \"string\")\n            option = this.options[option];\n        if (value == \"false\")\n            value = false;\n        if (value == \"true\")\n            value = true;\n        if (value == \"null\")\n            value = null;\n        if (value == \"undefined\")\n            value = undefined;\n        if (typeof value == \"string\" && parseFloat(value).toString() == value)\n            value = parseFloat(value);\n        if (option.onchange)\n            option.onchange(value);\n        else if (option.path)\n            this.editor.setOption(option.path, value);\n        this._signal(\"setOption\", { name: option.path, value: value });\n    };\n    this.getOption = function (option) {\n        if (option.getValue)\n            return option.getValue();\n        return this.editor.getOption(option.path);\n    };\n}).call(OptionPanel.prototype);\nexports.OptionPanel = OptionPanel;\n\n});                (function() {\n                    ace.require([\"ace/ext/options\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-prompt.js",
    "content": "ace.define(\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n\"use strict\";\nvar keys = require(\"../../lib/keys\");\nmodule.exports.getEditorKeybordShortcuts = function (editor) {\n    var KEY_MODS = keys.KEY_MODS;\n    var keybindings = [];\n    var commandMap = {};\n    editor.keyBinding.$handlers.forEach(function (handler) {\n        var ckb = handler.commandKeyBinding;\n        for (var i in ckb) {\n            var key = i.replace(/(^|-)\\w/g, function (x) { return x.toUpperCase(); });\n            var commands = ckb[i];\n            if (!Array.isArray(commands))\n                commands = [commands];\n            commands.forEach(function (command) {\n                if (typeof command != \"string\")\n                    command = command.name;\n                if (commandMap[command]) {\n                    commandMap[command].key += \"|\" + key;\n                }\n                else {\n                    commandMap[command] = { key: key, command: command };\n                    keybindings.push(commandMap[command]);\n                }\n            });\n        }\n    });\n    return keybindings;\n};\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\nvar $singleLineEditor = function (el) {\n    var renderer = new Renderer(el);\n    renderer.$maxLines = 4;\n    var editor = new Editor(renderer);\n    editor.setHighlightActiveLine(false);\n    editor.setShowPrintMargin(false);\n    editor.renderer.setShowGutter(false);\n    editor.renderer.setHighlightGutterLine(false);\n    editor.$mouseHandler.$focusTimeout = 0;\n    editor.$highlightTagPending = true;\n    return editor;\n};\nvar AcePopup = function (parentNode) {\n    var el = dom.createElement(\"div\");\n    var popup = new $singleLineEditor(el);\n    if (parentNode)\n        parentNode.appendChild(el);\n    el.style.display = \"none\";\n    popup.renderer.content.style.cursor = \"default\";\n    popup.renderer.setStyle(\"ace_autocomplete\");\n    popup.setOption(\"displayIndentGuides\", false);\n    popup.setOption(\"dragDelay\", 150);\n    var noop = function () { };\n    popup.focus = noop;\n    popup.$isFocused = true;\n    popup.renderer.$cursorLayer.restartTimer = noop;\n    popup.renderer.$cursorLayer.element.style.opacity = 0;\n    popup.renderer.$maxLines = 8;\n    popup.renderer.$keepTextAreaAtCursor = false;\n    popup.setHighlightActiveLine(false);\n    popup.session.highlight(\"\");\n    popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n    popup.on(\"mousedown\", function (e) {\n        var pos = e.getDocumentPosition();\n        popup.selection.moveToPosition(pos);\n        selectionMarker.start.row = selectionMarker.end.row = pos.row;\n        e.stop();\n    });\n    var lastMouseEvent;\n    var hoverMarker = new Range(-1, 0, -1, Infinity);\n    var selectionMarker = new Range(-1, 0, -1, Infinity);\n    selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n    popup.setSelectOnHover = function (val) {\n        if (!val) {\n            hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n        }\n        else if (hoverMarker.id) {\n            popup.session.removeMarker(hoverMarker.id);\n            hoverMarker.id = null;\n        }\n    };\n    popup.setSelectOnHover(false);\n    popup.on(\"mousemove\", function (e) {\n        if (!lastMouseEvent) {\n            lastMouseEvent = e;\n            return;\n        }\n        if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n            return;\n        }\n        lastMouseEvent = e;\n        lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n        var row = lastMouseEvent.getDocumentPosition().row;\n        if (hoverMarker.start.row != row) {\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row);\n        }\n    });\n    popup.renderer.on(\"beforeRender\", function () {\n        if (lastMouseEvent && hoverMarker.start.row != -1) {\n            lastMouseEvent.$pos = null;\n            var row = lastMouseEvent.getDocumentPosition().row;\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row, true);\n        }\n    });\n    popup.renderer.on(\"afterRender\", function () {\n        var row = popup.getRow();\n        var t = popup.renderer.$textLayer;\n        var selected = t.element.childNodes[row - t.config.firstRow];\n        if (selected !== t.selectedNode && t.selectedNode)\n            dom.removeCssClass(t.selectedNode, \"ace_selected\");\n        t.selectedNode = selected;\n        if (selected)\n            dom.addCssClass(selected, \"ace_selected\");\n    });\n    var hideHoverMarker = function () { setHoverMarker(-1); };\n    var setHoverMarker = function (row, suppressRedraw) {\n        if (row !== hoverMarker.start.row) {\n            hoverMarker.start.row = hoverMarker.end.row = row;\n            if (!suppressRedraw)\n                popup.session._emit(\"changeBackMarker\");\n            popup._emit(\"changeHoverMarker\");\n        }\n    };\n    popup.getHoveredRow = function () {\n        return hoverMarker.start.row;\n    };\n    event.addListener(popup.container, \"mouseout\", hideHoverMarker);\n    popup.on(\"hide\", hideHoverMarker);\n    popup.on(\"changeSelection\", hideHoverMarker);\n    popup.session.doc.getLength = function () {\n        return popup.data.length;\n    };\n    popup.session.doc.getLine = function (i) {\n        var data = popup.data[i];\n        if (typeof data == \"string\")\n            return data;\n        return (data && data.value) || \"\";\n    };\n    var bgTokenizer = popup.session.bgTokenizer;\n    bgTokenizer.$tokenizeRow = function (row) {\n        var data = popup.data[row];\n        var tokens = [];\n        if (!data)\n            return tokens;\n        if (typeof data == \"string\")\n            data = { value: data };\n        var caption = data.caption || data.value || data.name;\n        function addToken(value, className) {\n            value && tokens.push({\n                type: (data.className || \"\") + (className || \"\"),\n                value: value\n            });\n        }\n        var lower = caption.toLowerCase();\n        var filterText = (popup.filterText || \"\").toLowerCase();\n        var lastIndex = 0;\n        var lastI = 0;\n        for (var i = 0; i <= filterText.length; i++) {\n            if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n                var sub = filterText.slice(lastI, i);\n                lastI = i;\n                var index = lower.indexOf(sub, lastIndex);\n                if (index == -1)\n                    continue;\n                addToken(caption.slice(lastIndex, index), \"\");\n                lastIndex = index + sub.length;\n                addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n            }\n        }\n        addToken(caption.slice(lastIndex, caption.length), \"\");\n        if (data.meta)\n            tokens.push({ type: \"completion-meta\", value: data.meta });\n        if (data.message)\n            tokens.push({ type: \"completion-message\", value: data.message });\n        return tokens;\n    };\n    bgTokenizer.$updateOnChange = noop;\n    bgTokenizer.start = noop;\n    popup.session.$computeWidth = function () {\n        return this.screenWidth = 0;\n    };\n    popup.isOpen = false;\n    popup.isTopdown = false;\n    popup.autoSelect = true;\n    popup.filterText = \"\";\n    popup.data = [];\n    popup.setData = function (list, filterText) {\n        popup.filterText = filterText || \"\";\n        popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n        popup.data = list || [];\n        popup.setRow(0);\n    };\n    popup.getData = function (row) {\n        return popup.data[row];\n    };\n    popup.getRow = function () {\n        return selectionMarker.start.row;\n    };\n    popup.setRow = function (line) {\n        line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length, line));\n        if (selectionMarker.start.row != line) {\n            popup.selection.clearSelection();\n            selectionMarker.start.row = selectionMarker.end.row = line || 0;\n            popup.session._emit(\"changeBackMarker\");\n            popup.moveCursorTo(line || 0, 0);\n            if (popup.isOpen)\n                popup._signal(\"select\");\n        }\n    };\n    popup.on(\"changeSelection\", function () {\n        if (popup.isOpen)\n            popup.setRow(popup.selection.lead.row);\n        popup.renderer.scrollCursorIntoView();\n    });\n    popup.hide = function () {\n        this.container.style.display = \"none\";\n        this._signal(\"hide\");\n        popup.isOpen = false;\n    };\n    popup.show = function (pos, lineHeight, topdownOnly) {\n        var el = this.container;\n        var screenHeight = window.innerHeight;\n        var screenWidth = window.innerWidth;\n        var renderer = this.renderer;\n        var maxH = renderer.$maxLines * lineHeight * 1.4;\n        var top = pos.top + this.$borderSize;\n        var allowTopdown = top > screenHeight / 2 && !topdownOnly;\n        if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n            renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n            el.style.top = \"\";\n            el.style.bottom = screenHeight - top + \"px\";\n            popup.isTopdown = false;\n        }\n        else {\n            top += lineHeight;\n            renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n            el.style.top = top + \"px\";\n            el.style.bottom = \"\";\n            popup.isTopdown = true;\n        }\n        el.style.display = \"\";\n        var left = pos.left;\n        if (left + el.offsetWidth > screenWidth)\n            left = screenWidth - el.offsetWidth;\n        el.style.left = left + \"px\";\n        this._signal(\"show\");\n        lastMouseEvent = null;\n        popup.isOpen = true;\n    };\n    popup.goTo = function (where) {\n        var row = this.getRow();\n        var max = this.session.getLength() - 1;\n        switch (where) {\n            case \"up\":\n                row = row <= 0 ? max : row - 1;\n                break;\n            case \"down\":\n                row = row >= max ? -1 : row + 1;\n                break;\n            case \"start\":\n                row = 0;\n                break;\n            case \"end\":\n                row = max;\n                break;\n        }\n        this.setRow(row);\n    };\n    popup.getTextLeftOffset = function () {\n        return this.$borderSize + this.renderer.$padding + this.$imageSize;\n    };\n    popup.$imageSize = 0;\n    popup.$borderSize = 1;\n    return popup;\n};\ndom.importCssString(\"\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n    background-color: #CAD6FA;\\n    z-index: 1;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n    background-color: #3a674e;\\n}\\n.ace_editor.ace_autocomplete .ace_line-hover {\\n    border: 1px solid #abbffe;\\n    margin-top: -1px;\\n    background: rgba(233,233,253,0.4);\\n    position: absolute;\\n    z-index: 2;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\n    border: 1px solid rgba(109, 150, 13, 0.8);\\n    background: rgba(58, 103, 78, 0.62);\\n}\\n.ace_completion-meta {\\n    opacity: 0.5;\\n    margin: 0.9em;\\n}\\n.ace_completion-message {\\n    color: blue;\\n}\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\n    color: #2d69c7;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\n    color: #93ca12;\\n}\\n.ace_editor.ace_autocomplete {\\n    width: 300px;\\n    z-index: 200000;\\n    border: 1px lightgray solid;\\n    position: fixed;\\n    box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n    line-height: 1.4;\\n    background: #fefefe;\\n    color: #111;\\n}\\n.ace_dark.ace_editor.ace_autocomplete {\\n    border: 1px #484747 solid;\\n    box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\n    line-height: 1.4;\\n    background: #25282c;\\n    color: #c1c1c1;\\n}\", \"autocompletion.css\", false);\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\n\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.parForEach = function (array, fn, callback) {\n    var completed = 0;\n    var arLength = array.length;\n    if (arLength === 0)\n        callback();\n    for (var i = 0; i < arLength; i++) {\n        fn(array[i], function (result, err) {\n            completed++;\n            if (completed === arLength)\n                callback(result, err);\n        });\n    }\n};\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\nexports.retrievePrecedingIdentifier = function (text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos - 1; i >= 0; i--) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf.reverse().join(\"\");\n};\nexports.retrieveFollowingIdentifier = function (text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos; i < text.length; i++) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf;\n};\nexports.getCompletionPrefix = function (editor) {\n    var pos = editor.getCursorPosition();\n    var line = editor.session.getLine(pos.row);\n    var prefix;\n    editor.completers.forEach(function (completer) {\n        if (completer.identifierRegexps) {\n            completer.identifierRegexps.forEach(function (identifierRegex) {\n                if (!prefix && identifierRegex)\n                    prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n            }.bind(this));\n        }\n    }.bind(this));\n    return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\n\n});\n\nace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar clipboard = require(\"./clipboard\");\nvar VARIABLES = {\n    CURRENT_WORD: function (editor) {\n        return editor.session.getTextRange(editor.session.getWordRange());\n    },\n    SELECTION: function (editor, name, indentation) {\n        var text = editor.session.getTextRange();\n        if (indentation)\n            return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n        return text;\n    },\n    CURRENT_LINE: function (editor) {\n        return editor.session.getLine(editor.getCursorPosition().row);\n    },\n    PREV_LINE: function (editor) {\n        return editor.session.getLine(editor.getCursorPosition().row - 1);\n    },\n    LINE_INDEX: function (editor) {\n        return editor.getCursorPosition().row;\n    },\n    LINE_NUMBER: function (editor) {\n        return editor.getCursorPosition().row + 1;\n    },\n    SOFT_TABS: function (editor) {\n        return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n    },\n    TAB_SIZE: function (editor) {\n        return editor.session.getTabSize();\n    },\n    CLIPBOARD: function (editor) {\n        return clipboard.getText && clipboard.getText();\n    },\n    FILENAME: function (editor) {\n        return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n    },\n    FILENAME_BASE: function (editor) {\n        return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n    },\n    DIRECTORY: function (editor) {\n        return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n    },\n    FILEPATH: function (editor) { return \"/not implemented.txt\"; },\n    WORKSPACE_NAME: function () { return \"Unknown\"; },\n    FULLNAME: function () { return \"Unknown\"; },\n    BLOCK_COMMENT_START: function (editor) {\n        var mode = editor.session.$mode || {};\n        return mode.blockComment && mode.blockComment.start || \"\";\n    },\n    BLOCK_COMMENT_END: function (editor) {\n        var mode = editor.session.$mode || {};\n        return mode.blockComment && mode.blockComment.end || \"\";\n    },\n    LINE_COMMENT: function (editor) {\n        var mode = editor.session.$mode || {};\n        return mode.lineCommentStart || \"\";\n    },\n    CURRENT_YEAR: date.bind(null, { year: \"numeric\" }),\n    CURRENT_YEAR_SHORT: date.bind(null, { year: \"2-digit\" }),\n    CURRENT_MONTH: date.bind(null, { month: \"numeric\" }),\n    CURRENT_MONTH_NAME: date.bind(null, { month: \"long\" }),\n    CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: \"short\" }),\n    CURRENT_DATE: date.bind(null, { day: \"2-digit\" }),\n    CURRENT_DAY_NAME: date.bind(null, { weekday: \"long\" }),\n    CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: \"short\" }),\n    CURRENT_HOUR: date.bind(null, { hour: \"2-digit\", hour12: false }),\n    CURRENT_MINUTE: date.bind(null, { minute: \"2-digit\" }),\n    CURRENT_SECOND: date.bind(null, { second: \"2-digit\" })\n};\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\nfunction date(dateFormat) {\n    var str = new Date().toLocaleString(\"en-us\", dateFormat);\n    return str.length == 1 ? \"0\" + str : str;\n}\nvar SnippetManager = function () {\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getTokenizer = function () {\n        return SnippetManager.$tokenizer || this.createTokenizer();\n    };\n    this.createTokenizer = function () {\n        function TabstopToken(str) {\n            str = str.substr(1);\n            if (/^\\d+$/.test(str))\n                return [{ tabstopId: parseInt(str, 10) }];\n            return [{ text: str }];\n        }\n        function escape(ch) {\n            return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n        }\n        var formatMatcher = {\n            regex: \"/(\" + escape(\"/\") + \"+)/\",\n            onMatch: function (val, state, stack) {\n                var ts = stack[0];\n                ts.fmtString = true;\n                ts.guard = val.slice(1, -1);\n                ts.flag = \"\";\n                return \"\";\n            },\n            next: \"formatString\"\n        };\n        SnippetManager.$tokenizer = new Tokenizer({\n            start: [\n                { regex: /\\\\./, onMatch: function (val, state, stack) {\n                        var ch = val[1];\n                        if (ch == \"}\" && stack.length) {\n                            val = ch;\n                        }\n                        else if (\"`$\\\\\".indexOf(ch) != -1) {\n                            val = ch;\n                        }\n                        return [val];\n                    } },\n                { regex: /}/, onMatch: function (val, state, stack) {\n                        return [stack.length ? stack.shift() : val];\n                    } },\n                { regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken },\n                { regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function (str, state, stack) {\n                        var t = TabstopToken(str.substr(1));\n                        stack.unshift(t[0]);\n                        return t;\n                    }, next: \"snippetVar\" },\n                { regex: /\\n/, token: \"newline\", merge: false }\n            ],\n            snippetVar: [\n                { regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function (val, state, stack) {\n                        var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function (operator) {\n                            return operator.length == 2 ? operator[1] : \"\\x00\";\n                        }).split(\"\\x00\").map(function (value) {\n                            return { value: value };\n                        });\n                        stack[0].choices = choices;\n                        return [choices[0]];\n                    }, next: \"start\" },\n                formatMatcher,\n                { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\" }\n            ],\n            formatString: [\n                { regex: /:/, onMatch: function (val, state, stack) {\n                        if (stack.length && stack[0].expectElse) {\n                            stack[0].expectElse = false;\n                            stack[0].ifEnd = { elseEnd: stack[0] };\n                            return [stack[0].ifEnd];\n                        }\n                        return \":\";\n                    } },\n                { regex: /\\\\./, onMatch: function (val, state, stack) {\n                        var ch = val[1];\n                        if (ch == \"}\" && stack.length)\n                            val = ch;\n                        else if (\"`$\\\\\".indexOf(ch) != -1)\n                            val = ch;\n                        else if (ch == \"n\")\n                            val = \"\\n\";\n                        else if (ch == \"t\")\n                            val = \"\\t\";\n                        else if (\"ulULE\".indexOf(ch) != -1)\n                            val = { changeCase: ch, local: ch > \"a\" };\n                        return [val];\n                    } },\n                { regex: \"/\\\\w*}\", onMatch: function (val, state, stack) {\n                        var next = stack.shift();\n                        if (next)\n                            next.flag = val.slice(1, -1);\n                        this.next = next && next.tabstopId ? \"start\" : \"\";\n                        return [next || val];\n                    }, next: \"start\" },\n                { regex: /\\$(?:\\d+|\\w+)/, onMatch: function (val, state, stack) {\n                        return [{ text: val.slice(1) }];\n                    } },\n                { regex: /\\${\\w+/, onMatch: function (val, state, stack) {\n                        var token = { text: val.slice(2) };\n                        stack.unshift(token);\n                        return [token];\n                    }, next: \"formatStringVar\" },\n                { regex: /\\n/, token: \"newline\", merge: false },\n                { regex: /}/, onMatch: function (val, state, stack) {\n                        var next = stack.shift();\n                        this.next = next && next.tabstopId ? \"start\" : \"\";\n                        return [next || val];\n                    }, next: \"start\" }\n            ],\n            formatStringVar: [\n                { regex: /:\\/\\w+}/, onMatch: function (val, state, stack) {\n                        var ts = stack[0];\n                        ts.formatFunction = val.slice(2, -1);\n                        return [stack.shift()];\n                    }, next: \"formatString\" },\n                formatMatcher,\n                { regex: /:[\\?\\-+]?/, onMatch: function (val, state, stack) {\n                        if (val[1] == \"+\")\n                            stack[0].ifEnd = stack[0];\n                        if (val[1] == \"?\")\n                            stack[0].expectElse = true;\n                    }, next: \"formatString\" },\n                { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"formatString\" }\n            ]\n        });\n        return SnippetManager.$tokenizer;\n    };\n    this.tokenizeTmSnippet = function (str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n            return x.value || x;\n        });\n    };\n    this.getVariableValue = function (editor, name, indentation) {\n        if (/^\\d+$/.test(name))\n            return (this.variables.__ || {})[name] || \"\";\n        if (/^[A-Z]\\d+$/.test(name))\n            return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n        name = name.replace(/^TM_/, \"\");\n        if (!this.variables.hasOwnProperty(name))\n            return \"\";\n        var value = this.variables[name];\n        if (typeof value == \"function\")\n            value = this.variables[name](editor, name, indentation);\n        return value == null ? \"\" : value;\n    };\n    this.variables = VARIABLES;\n    this.tmStrFormat = function (str, ch, editor) {\n        if (!ch.fmt)\n            return str;\n        var flag = ch.flag || \"\";\n        var re = ch.guard;\n        re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n        var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n        var _self = this;\n        var formatted = str.replace(re, function () {\n            var oldArgs = _self.variables.__;\n            _self.variables.__ = [].slice.call(arguments);\n            var fmtParts = _self.resolveVariables(fmtTokens, editor);\n            var gChangeCase = \"E\";\n            for (var i = 0; i < fmtParts.length; i++) {\n                var ch = fmtParts[i];\n                if (typeof ch == \"object\") {\n                    fmtParts[i] = \"\";\n                    if (ch.changeCase && ch.local) {\n                        var next = fmtParts[i + 1];\n                        if (next && typeof next == \"string\") {\n                            if (ch.changeCase == \"u\")\n                                fmtParts[i] = next[0].toUpperCase();\n                            else\n                                fmtParts[i] = next[0].toLowerCase();\n                            fmtParts[i + 1] = next.substr(1);\n                        }\n                    }\n                    else if (ch.changeCase) {\n                        gChangeCase = ch.changeCase;\n                    }\n                }\n                else if (gChangeCase == \"U\") {\n                    fmtParts[i] = ch.toUpperCase();\n                }\n                else if (gChangeCase == \"L\") {\n                    fmtParts[i] = ch.toLowerCase();\n                }\n            }\n            _self.variables.__ = oldArgs;\n            return fmtParts.join(\"\");\n        });\n        return formatted;\n    };\n    this.tmFormatFunction = function (str, ch, editor) {\n        if (ch.formatFunction == \"upcase\")\n            return str.toUpperCase();\n        if (ch.formatFunction == \"downcase\")\n            return str.toLowerCase();\n        return str;\n    };\n    this.resolveVariables = function (snippet, editor) {\n        var result = [];\n        var indentation = \"\";\n        var afterNewLine = true;\n        for (var i = 0; i < snippet.length; i++) {\n            var ch = snippet[i];\n            if (typeof ch == \"string\") {\n                result.push(ch);\n                if (ch == \"\\n\") {\n                    afterNewLine = true;\n                    indentation = \"\";\n                }\n                else if (afterNewLine) {\n                    indentation = /^\\t*/.exec(ch)[0];\n                    afterNewLine = /\\S/.test(ch);\n                }\n                continue;\n            }\n            if (!ch)\n                continue;\n            afterNewLine = false;\n            if (ch.fmtString) {\n                var j = snippet.indexOf(ch, i + 1);\n                if (j == -1)\n                    j = snippet.length;\n                ch.fmt = snippet.slice(i + 1, j);\n                i = j;\n            }\n            if (ch.text) {\n                var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n                if (ch.fmtString)\n                    value = this.tmStrFormat(value, ch, editor);\n                if (ch.formatFunction)\n                    value = this.tmFormatFunction(value, ch, editor);\n                if (value && !ch.ifEnd) {\n                    result.push(value);\n                    gotoNext(ch);\n                }\n                else if (!value && ch.ifEnd) {\n                    gotoNext(ch.ifEnd);\n                }\n            }\n            else if (ch.elseEnd) {\n                gotoNext(ch.elseEnd);\n            }\n            else if (ch.tabstopId != null) {\n                result.push(ch);\n            }\n            else if (ch.changeCase != null) {\n                result.push(ch);\n            }\n        }\n        function gotoNext(ch) {\n            var i1 = snippet.indexOf(ch, i + 1);\n            if (i1 != -1)\n                i = i1;\n        }\n        return result;\n    };\n    this.insertSnippetForSelection = function (editor, snippetText) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var tabString = editor.session.getTabString();\n        var indentString = line.match(/^\\s*/)[0];\n        if (cursor.column < indentString.length)\n            indentString = indentString.slice(0, cursor.column);\n        snippetText = snippetText.replace(/\\r/g, \"\");\n        var tokens = this.tokenizeTmSnippet(snippetText);\n        tokens = this.resolveVariables(tokens, editor);\n        tokens = tokens.map(function (x) {\n            if (x == \"\\n\")\n                return x + indentString;\n            if (typeof x == \"string\")\n                return x.replace(/\\t/g, tabString);\n            return x;\n        });\n        var tabstops = [];\n        tokens.forEach(function (p, i) {\n            if (typeof p != \"object\")\n                return;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            if (!ts) {\n                ts = tabstops[id] = [];\n                ts.index = id;\n                ts.value = \"\";\n                ts.parents = {};\n            }\n            if (ts.indexOf(p) !== -1)\n                return;\n            if (p.choices && !ts.choices)\n                ts.choices = p.choices;\n            ts.push(p);\n            var i1 = tokens.indexOf(p, i + 1);\n            if (i1 === -1)\n                return;\n            var value = tokens.slice(i + 1, i1);\n            var isNested = value.some(function (t) { return typeof t === \"object\"; });\n            if (isNested && !ts.value) {\n                ts.value = value;\n            }\n            else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n                ts.value = value.join(\"\");\n            }\n        });\n        tabstops.forEach(function (ts) { ts.length = 0; });\n        var expanding = {};\n        function copyValue(val) {\n            var copy = [];\n            for (var i = 0; i < val.length; i++) {\n                var p = val[i];\n                if (typeof p == \"object\") {\n                    if (expanding[p.tabstopId])\n                        continue;\n                    var j = val.lastIndexOf(p, i - 1);\n                    p = copy[j] || { tabstopId: p.tabstopId };\n                }\n                copy[i] = p;\n            }\n            return copy;\n        }\n        for (var i = 0; i < tokens.length; i++) {\n            var p = tokens[i];\n            if (typeof p != \"object\")\n                continue;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            var i1 = tokens.indexOf(p, i + 1);\n            if (expanding[id]) {\n                if (expanding[id] === p) {\n                    delete expanding[id];\n                    Object.keys(expanding).forEach(function (parentId) {\n                        ts.parents[parentId] = true;\n                    });\n                }\n                continue;\n            }\n            expanding[id] = p;\n            var value = ts.value;\n            if (typeof value !== \"string\")\n                value = copyValue(value);\n            else if (p.fmt)\n                value = this.tmStrFormat(value, p, editor);\n            tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n            if (ts.indexOf(p) === -1)\n                ts.push(p);\n        }\n        var row = 0, column = 0;\n        var text = \"\";\n        tokens.forEach(function (t) {\n            if (typeof t === \"string\") {\n                var lines = t.split(\"\\n\");\n                if (lines.length > 1) {\n                    column = lines[lines.length - 1].length;\n                    row += lines.length - 1;\n                }\n                else\n                    column += t.length;\n                text += t;\n            }\n            else if (t) {\n                if (!t.start)\n                    t.start = { row: row, column: column };\n                else\n                    t.end = { row: row, column: column };\n            }\n        });\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, text);\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n    };\n    this.insertSnippet = function (editor, snippetText) {\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText);\n        editor.forEachSelection(function () {\n            self.insertSnippetForSelection(editor, snippetText);\n        }, null, { keepOrder: true });\n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n    this.$getScope = function (editor) {\n        var scope = editor.session.$mode.$id || \"\";\n        scope = scope.split(\"/\").pop();\n        if (scope === \"html\" || scope === \"php\") {\n            if (scope === \"php\" && !editor.session.$mode.inlinePhp)\n                scope = \"html\";\n            var c = editor.getCursorPosition();\n            var state = editor.session.getState(c.row);\n            if (typeof state === \"object\") {\n                state = state[0];\n            }\n            if (state.substring) {\n                if (state.substring(0, 3) == \"js-\")\n                    scope = \"javascript\";\n                else if (state.substring(0, 4) == \"css-\")\n                    scope = \"css\";\n                else if (state.substring(0, 4) == \"php-\")\n                    scope = \"php\";\n            }\n        }\n        return scope;\n    };\n    this.getActiveScopes = function (editor) {\n        var scope = this.$getScope(editor);\n        var scopes = [scope];\n        var snippetMap = this.snippetMap;\n        if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n            scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n        }\n        scopes.push(\"_\");\n        return scopes;\n    };\n    this.expandWithTab = function (editor, options) {\n        var self = this;\n        var result = editor.forEachSelection(function () {\n            return self.expandSnippetForSelection(editor, options);\n        }, null, { keepOrder: true });\n        if (result && editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n        return result;\n    };\n    this.expandSnippetForSelection = function (editor, options) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var before = line.substring(0, cursor.column);\n        var after = line.substr(cursor.column);\n        var snippetMap = this.snippetMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function (scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = this.findMatchingSnippet(snippets, before, after);\n            return !!snippet;\n        }, this);\n        if (!snippet)\n            return false;\n        if (options && options.dryRun)\n            return true;\n        editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length);\n        this.variables.M__ = snippet.matchBefore;\n        this.variables.T__ = snippet.matchAfter;\n        this.insertSnippetForSelection(editor, snippet.content);\n        this.variables.M__ = this.variables.T__ = null;\n        return true;\n    };\n    this.findMatchingSnippet = function (snippetList, before, after) {\n        for (var i = snippetList.length; i--;) {\n            var s = snippetList[i];\n            if (s.startRe && !s.startRe.test(before))\n                continue;\n            if (s.endRe && !s.endRe.test(after))\n                continue;\n            if (!s.startRe && !s.endRe)\n                continue;\n            s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n            s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n            return s;\n        }\n    };\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n    this.register = function (snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        var self = this;\n        if (!snippets)\n            snippets = [];\n        function wrapRegexp(src) {\n            if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n                src = \"(?:\" + src + \")\";\n            return src || \"\";\n        }\n        function guardedRegexp(re, guard, opening) {\n            re = wrapRegexp(re);\n            guard = wrapRegexp(guard);\n            if (opening) {\n                re = guard + re;\n                if (re && re[re.length - 1] != \"$\")\n                    re = re + \"$\";\n            }\n            else {\n                re = re + guard;\n                if (re && re[0] != \"^\")\n                    re = \"^\" + re;\n            }\n            return new RegExp(re);\n        }\n        function addSnippet(s) {\n            if (!s.scope)\n                s.scope = scope || \"_\";\n            scope = s.scope;\n            if (!snippetMap[scope]) {\n                snippetMap[scope] = [];\n                snippetNameMap[scope] = {};\n            }\n            var map = snippetNameMap[scope];\n            if (s.name) {\n                var old = map[s.name];\n                if (old)\n                    self.unregister(old);\n                map[s.name] = s;\n            }\n            snippetMap[scope].push(s);\n            if (s.prefix)\n                s.tabTrigger = s.prefix;\n            if (!s.content && s.body)\n                s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n            if (s.tabTrigger && !s.trigger) {\n                if (!s.guard && /^\\w/.test(s.tabTrigger))\n                    s.guard = \"\\\\b\";\n                s.trigger = lang.escapeRegExp(s.tabTrigger);\n            }\n            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n                return;\n            s.startRe = guardedRegexp(s.trigger, s.guard, true);\n            s.triggerRe = new RegExp(s.trigger);\n            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n            s.endTriggerRe = new RegExp(s.endTrigger);\n        }\n        if (Array.isArray(snippets)) {\n            snippets.forEach(addSnippet);\n        }\n        else {\n            Object.keys(snippets).forEach(function (key) {\n                addSnippet(snippets[key]);\n            });\n        }\n        this._signal(\"registerSnippets\", { scope: scope });\n    };\n    this.unregister = function (snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        function removeSnippet(s) {\n            var nameMap = snippetNameMap[s.scope || scope];\n            if (nameMap && nameMap[s.name]) {\n                delete nameMap[s.name];\n                var map = snippetMap[s.scope || scope];\n                var i = map && map.indexOf(s);\n                if (i >= 0)\n                    map.splice(i, 1);\n            }\n        }\n        if (snippets.content)\n            removeSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(removeSnippet);\n    };\n    this.parseSnippetFile = function (str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], snippet = {};\n        var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n        var m;\n        while (m = re.exec(str)) {\n            if (m[1]) {\n                try {\n                    snippet = JSON.parse(m[1]);\n                    list.push(snippet);\n                }\n                catch (e) { }\n            }\n            if (m[4]) {\n                snippet.content = m[4].replace(/^\\t/gm, \"\");\n                list.push(snippet);\n                snippet = {};\n            }\n            else {\n                var key = m[2], val = m[3];\n                if (key == \"regex\") {\n                    var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n                    snippet.guard = guardRe.exec(val)[1];\n                    snippet.trigger = guardRe.exec(val)[1];\n                    snippet.endTrigger = guardRe.exec(val)[1];\n                    snippet.endGuard = guardRe.exec(val)[1];\n                }\n                else if (key == \"snippet\") {\n                    snippet.tabTrigger = val.match(/^\\S*/)[0];\n                    if (!snippet.name)\n                        snippet.name = val;\n                }\n                else if (key) {\n                    snippet[key] = val;\n                }\n            }\n        }\n        return list;\n    };\n    this.getSnippetByName = function (name, editor) {\n        var snippetMap = this.snippetNameMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function (scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = snippets[name];\n            return !!snippet;\n        }, this);\n        return snippet;\n    };\n}).call(SnippetManager.prototype);\nvar TabstopManager = function (editor) {\n    if (editor.tabstopManager)\n        return editor.tabstopManager;\n    editor.tabstopManager = this;\n    this.$onChange = this.onChange.bind(this);\n    this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n    this.$onChangeSession = this.onChangeSession.bind(this);\n    this.$onAfterExec = this.onAfterExec.bind(this);\n    this.attach(editor);\n};\n(function () {\n    this.attach = function (editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n        this.editor = editor;\n        this.editor.on(\"change\", this.$onChange);\n        this.editor.on(\"changeSelection\", this.$onChangeSelection);\n        this.editor.on(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.detach = function () {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges = null;\n        this.tabstops = null;\n        this.selectedTabstop = null;\n        this.editor.removeListener(\"change\", this.$onChange);\n        this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n        this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.editor = null;\n    };\n    this.onChange = function (delta) {\n        var isRemove = delta.action[0] == \"r\";\n        var selectedTabstop = this.selectedTabstop || {};\n        var parents = selectedTabstop.parents || {};\n        var tabstops = (this.tabstops || []).slice();\n        for (var i = 0; i < tabstops.length; i++) {\n            var ts = tabstops[i];\n            var active = ts == selectedTabstop || parents[ts.index];\n            ts.rangeList.$bias = active ? 0 : 1;\n            if (delta.action == \"remove\" && ts !== selectedTabstop) {\n                var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n                var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n                startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n                var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n                endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n                var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n                for (var j = 0; j < toRemove.length; j++)\n                    this.removeRange(toRemove[j]);\n            }\n            ts.rangeList.$onChange(delta);\n        }\n        var session = this.editor.session;\n        if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n            this.detach();\n    };\n    this.updateLinkedFields = function () {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n            return;\n        this.$inChange = true;\n        var session = this.editor.session;\n        var text = session.getTextRange(ts.firstNonLinked);\n        for (var i = 0; i < ts.length; i++) {\n            var range = ts[i];\n            if (!range.linked)\n                continue;\n            var original = range.original;\n            var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n            session.replace(range, fmt);\n        }\n        this.$inChange = false;\n    };\n    this.onAfterExec = function (e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    this.onChangeSelection = function () {\n        if (!this.editor)\n            return;\n        var lead = this.editor.selection.lead;\n        var anchor = this.editor.selection.anchor;\n        var isEmpty = this.editor.selection.isEmpty();\n        for (var i = 0; i < this.ranges.length; i++) {\n            if (this.ranges[i].linked)\n                continue;\n            var containsLead = this.ranges[i].contains(lead.row, lead.column);\n            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n            if (containsLead && containsAnchor)\n                return;\n        }\n        this.detach();\n    };\n    this.onChangeSession = function () {\n        this.detach();\n    };\n    this.tabNext = function (dir) {\n        var max = this.tabstops.length;\n        var index = this.index + (dir || 1);\n        index = Math.min(Math.max(index, 1), max);\n        if (index == max)\n            index = 0;\n        this.selectTabstop(index);\n        if (index === 0)\n            this.detach();\n    };\n    this.selectTabstop = function (index) {\n        this.$openTabstops = null;\n        var ts = this.tabstops[this.index];\n        if (ts)\n            this.addTabstopMarkers(ts);\n        this.index = index;\n        ts = this.tabstops[this.index];\n        if (!ts || !ts.length)\n            return;\n        this.selectedTabstop = ts;\n        var range = ts.firstNonLinked || ts;\n        if (ts.choices)\n            range.cursor = range.start;\n        if (!this.editor.inVirtualSelectionMode) {\n            var sel = this.editor.multiSelect;\n            sel.toSingleRange(range);\n            for (var i = 0; i < ts.length; i++) {\n                if (ts.hasLinkedRanges && ts[i].linked)\n                    continue;\n                sel.addRange(ts[i].clone(), true);\n            }\n        }\n        else {\n            this.editor.selection.fromOrientedRange(range);\n        }\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        if (this.selectedTabstop && this.selectedTabstop.choices)\n            this.editor.execCommand(\"startAutocomplete\", { matches: this.selectedTabstop.choices });\n    };\n    this.addTabstops = function (tabstops, start, end) {\n        var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n        if (!this.$openTabstops)\n            this.$openTabstops = [];\n        if (!tabstops[0]) {\n            var p = Range.fromPoints(end, end);\n            moveRelative(p.start, start);\n            moveRelative(p.end, start);\n            tabstops[0] = [p];\n            tabstops[0].index = 0;\n        }\n        var i = this.index;\n        var arg = [i + 1, 0];\n        var ranges = this.ranges;\n        tabstops.forEach(function (ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n            for (var i = 0; i < ts.length; i++) {\n                var p = ts[i];\n                var range = Range.fromPoints(p.start, p.end || p.start);\n                movePoint(range.start, start);\n                movePoint(range.end, start);\n                range.original = p;\n                range.tabstop = dest;\n                ranges.push(range);\n                if (dest != ts)\n                    dest.unshift(range);\n                else\n                    dest[i] = range;\n                if (p.fmtString || (dest.firstNonLinked && useLink)) {\n                    range.linked = true;\n                    dest.hasLinkedRanges = true;\n                }\n                else if (!dest.firstNonLinked)\n                    dest.firstNonLinked = range;\n            }\n            if (!dest.firstNonLinked)\n                dest.hasLinkedRanges = false;\n            if (dest === ts) {\n                arg.push(dest);\n                this.$openTabstops[index] = dest;\n            }\n            this.addTabstopMarkers(dest);\n            dest.rangeList = dest.rangeList || new RangeList();\n            dest.rangeList.$bias = 0;\n            dest.rangeList.addList(dest);\n        }, this);\n        if (arg.length > 2) {\n            if (this.tabstops.length)\n                arg.push(arg.splice(2, 1)[0]);\n            this.tabstops.splice.apply(this.tabstops, arg);\n        }\n    };\n    this.addTabstopMarkers = function (ts) {\n        var session = this.editor.session;\n        ts.forEach(function (range) {\n            if (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    this.removeTabstopMarkers = function (ts) {\n        var session = this.editor.session;\n        ts.forEach(function (range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    this.removeRange = function (range) {\n        var i = range.tabstop.indexOf(range);\n        if (i != -1)\n            range.tabstop.splice(i, 1);\n        i = this.ranges.indexOf(range);\n        if (i != -1)\n            this.ranges.splice(i, 1);\n        i = range.tabstop.rangeList.ranges.indexOf(range);\n        if (i != -1)\n            range.tabstop.splice(i, 1);\n        this.editor.session.removeMarker(range.markerId);\n        if (!range.tabstop.length) {\n            i = this.tabstops.indexOf(range.tabstop);\n            if (i != -1)\n                this.tabstops.splice(i, 1);\n            if (!this.tabstops.length)\n                this.detach();\n        }\n    };\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys({\n        \"Tab\": function (editor) {\n            if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))\n                return;\n            editor.tabstopManager.tabNext(1);\n            editor.renderer.scrollCursorIntoView();\n        },\n        \"Shift-Tab\": function (editor) {\n            editor.tabstopManager.tabNext(-1);\n            editor.renderer.scrollCursorIntoView();\n        },\n        \"Esc\": function (editor) {\n            editor.tabstopManager.detach();\n        }\n    });\n}).call(TabstopManager.prototype);\nvar movePoint = function (point, diff) {\n    if (point.row == 0)\n        point.column += diff.column;\n    point.row += diff.row;\n};\nvar moveRelative = function (point, start) {\n    if (point.row == start.row)\n        point.column -= start.column;\n    point.row -= start.row;\n};\ndom.importCssString(\"\\n.ace_snippet-marker {\\n    -moz-box-sizing: border-box;\\n    box-sizing: border-box;\\n    background: rgba(194, 193, 208, 0.09);\\n    border: 1px dotted rgba(211, 208, 235, 0.62);\\n    position: absolute;\\n}\", \"snippets.css\", false);\nexports.snippetManager = new SnippetManager();\nvar Editor = require(\"./editor\").Editor;\n(function () {\n    this.insertSnippet = function (content, options) {\n        return exports.snippetManager.insertSnippet(this, content, options);\n    };\n    this.expandSnippet = function (options) {\n        return exports.snippetManager.expandWithTab(this, options);\n    };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar util = require(\"./autocomplete/util\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\nvar config = require(\"./config\");\nvar Autocomplete = function () {\n    this.autoInsert = false;\n    this.autoSelect = true;\n    this.exactMatch = false;\n    this.gatherCompletionsId = 0;\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys(this.commands);\n    this.blurListener = this.blurListener.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.mousedownListener = this.mousedownListener.bind(this);\n    this.mousewheelListener = this.mousewheelListener.bind(this);\n    this.changeTimer = lang.delayedCall(function () {\n        this.updateCompletions(true);\n    }.bind(this));\n    this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n(function () {\n    this.$init = function () {\n        this.popup = new AcePopup(document.body || document.documentElement);\n        this.popup.on(\"click\", function (e) {\n            this.insertMatch();\n            e.stop();\n        }.bind(this));\n        this.popup.focus = this.editor.focus.bind(this.editor);\n        this.popup.on(\"show\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n        return this.popup;\n    };\n    this.getPopup = function () {\n        return this.popup || this.$init();\n    };\n    this.openPopup = function (editor, prefix, keepPopupPosition) {\n        if (!this.popup)\n            this.$init();\n        this.popup.autoSelect = this.autoSelect;\n        this.popup.setData(this.completions.filtered, this.completions.filterText);\n        editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        var renderer = editor.renderer;\n        this.popup.setRow(this.autoSelect ? 0 : -1);\n        if (!keepPopupPosition) {\n            this.popup.setTheme(editor.getTheme());\n            this.popup.setFontSize(editor.getFontSize());\n            var lineHeight = renderer.layerConfig.lineHeight;\n            var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n            pos.left -= this.popup.getTextLeftOffset();\n            var rect = editor.container.getBoundingClientRect();\n            pos.top += rect.top - renderer.layerConfig.offset;\n            pos.left += rect.left - editor.renderer.scrollLeft;\n            pos.left += renderer.gutterWidth;\n            this.popup.show(pos, lineHeight);\n        }\n        else if (keepPopupPosition && !prefix) {\n            this.detach();\n        }\n        this.changeTimer.cancel();\n    };\n    this.detach = function () {\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.off(\"changeSelection\", this.changeListener);\n        this.editor.off(\"blur\", this.blurListener);\n        this.editor.off(\"mousedown\", this.mousedownListener);\n        this.editor.off(\"mousewheel\", this.mousewheelListener);\n        this.changeTimer.cancel();\n        this.hideDocTooltip();\n        this.gatherCompletionsId += 1;\n        if (this.popup && this.popup.isOpen)\n            this.popup.hide();\n        if (this.base)\n            this.base.detach();\n        this.activated = false;\n        this.completions = this.base = null;\n    };\n    this.changeListener = function (e) {\n        var cursor = this.editor.selection.lead;\n        if (cursor.row != this.base.row || cursor.column < this.base.column) {\n            this.detach();\n        }\n        if (this.activated)\n            this.changeTimer.schedule();\n        else\n            this.detach();\n    };\n    this.blurListener = function (e) {\n        var el = document.activeElement;\n        var text = this.editor.textInput.getElement();\n        var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n        var container = this.popup && this.popup.container;\n        if (el != text && el.parentNode != container && !fromTooltip\n            && el != this.tooltipNode && e.relatedTarget != text) {\n            this.detach();\n        }\n    };\n    this.mousedownListener = function (e) {\n        this.detach();\n    };\n    this.mousewheelListener = function (e) {\n        this.detach();\n    };\n    this.goTo = function (where) {\n        this.popup.goTo(where);\n    };\n    this.insertMatch = function (data, options) {\n        if (!data)\n            data = this.popup.getData(this.popup.getRow());\n        if (!data)\n            return false;\n        var completions = this.completions;\n        this.editor.startOperation({ command: { name: \"insertMatch\" } });\n        if (data.completer && data.completer.insertMatch) {\n            data.completer.insertMatch(this.editor, data);\n        }\n        else {\n            if (!completions)\n                return false;\n            if (completions.filterText) {\n                var ranges = this.editor.selection.getAllRanges();\n                for (var i = 0, range; range = ranges[i]; i++) {\n                    range.start.column -= completions.filterText.length;\n                    this.editor.session.remove(range);\n                }\n            }\n            if (data.snippet)\n                snippetManager.insertSnippet(this.editor, data.snippet);\n            else\n                this.editor.execCommand(\"insertstring\", data.value || data);\n        }\n        if (this.completions == completions)\n            this.detach();\n        this.editor.endOperation();\n    };\n    this.commands = {\n        \"Up\": function (editor) { editor.completer.goTo(\"up\"); },\n        \"Down\": function (editor) { editor.completer.goTo(\"down\"); },\n        \"Ctrl-Up|Ctrl-Home\": function (editor) { editor.completer.goTo(\"start\"); },\n        \"Ctrl-Down|Ctrl-End\": function (editor) { editor.completer.goTo(\"end\"); },\n        \"Esc\": function (editor) { editor.completer.detach(); },\n        \"Return\": function (editor) { return editor.completer.insertMatch(); },\n        \"Shift-Return\": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); },\n        \"Tab\": function (editor) {\n            var result = editor.completer.insertMatch();\n            if (!result && !editor.tabstopManager)\n                editor.completer.goTo(\"down\");\n            else\n                return result;\n        },\n        \"PageUp\": function (editor) { editor.completer.popup.gotoPageUp(); },\n        \"PageDown\": function (editor) { editor.completer.popup.gotoPageDown(); }\n    };\n    this.gatherCompletions = function (editor, callback) {\n        var session = editor.getSession();\n        var pos = editor.getCursorPosition();\n        var prefix = util.getCompletionPrefix(editor);\n        this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n        this.base.$insertRight = true;\n        var matches = [];\n        var total = editor.completers.length;\n        editor.completers.forEach(function (completer, i) {\n            completer.getCompletions(editor, session, pos, prefix, function (err, results) {\n                if (!err && results)\n                    matches = matches.concat(results);\n                callback(null, {\n                    prefix: util.getCompletionPrefix(editor),\n                    matches: matches,\n                    finished: (--total === 0)\n                });\n            });\n        });\n        return true;\n    };\n    this.showPopup = function (editor, options) {\n        if (this.editor)\n            this.detach();\n        this.activated = true;\n        this.editor = editor;\n        if (editor.completer != this) {\n            if (editor.completer)\n                editor.completer.detach();\n            editor.completer = this;\n        }\n        editor.on(\"changeSelection\", this.changeListener);\n        editor.on(\"blur\", this.blurListener);\n        editor.on(\"mousedown\", this.mousedownListener);\n        editor.on(\"mousewheel\", this.mousewheelListener);\n        this.updateCompletions(false, options);\n    };\n    this.updateCompletions = function (keepPopupPosition, options) {\n        if (keepPopupPosition && this.base && this.completions) {\n            var pos = this.editor.getCursorPosition();\n            var prefix = this.editor.session.getTextRange({ start: this.base, end: pos });\n            if (prefix == this.completions.filterText)\n                return;\n            this.completions.setFilter(prefix);\n            if (!this.completions.filtered.length)\n                return this.detach();\n            if (this.completions.filtered.length == 1\n                && this.completions.filtered[0].value == prefix\n                && !this.completions.filtered[0].snippet)\n                return this.detach();\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n            return;\n        }\n        if (options && options.matches) {\n            var pos = this.editor.getSelectionRange().start;\n            this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);\n            this.base.$insertRight = true;\n            this.completions = new FilteredList(options.matches);\n            return this.openPopup(this.editor, \"\", keepPopupPosition);\n        }\n        var _id = this.gatherCompletionsId;\n        var detachIfFinished = function (results) {\n            if (!results.finished)\n                return;\n            return this.detach();\n        }.bind(this);\n        var processResults = function (results) {\n            var prefix = results.prefix;\n            var matches = results.matches;\n            this.completions = new FilteredList(matches);\n            if (this.exactMatch)\n                this.completions.exactMatch = true;\n            this.completions.setFilter(prefix);\n            var filtered = this.completions.filtered;\n            if (!filtered.length)\n                return detachIfFinished(results);\n            if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n                return detachIfFinished(results);\n            if (this.autoInsert && filtered.length == 1 && results.finished)\n                return this.insertMatch(filtered[0]);\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n        }.bind(this);\n        var isImmediate = true;\n        var immediateResults = null;\n        this.gatherCompletions(this.editor, function (err, results) {\n            var prefix = results.prefix;\n            var matches = results && results.matches;\n            if (!matches || !matches.length)\n                return detachIfFinished(results);\n            if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)\n                return;\n            if (isImmediate) {\n                immediateResults = results;\n                return;\n            }\n            processResults(results);\n        }.bind(this));\n        isImmediate = false;\n        if (immediateResults) {\n            var results = immediateResults;\n            immediateResults = null;\n            processResults(results);\n        }\n    };\n    this.cancelContextMenu = function () {\n        this.editor.$mouseHandler.cancelContextMenu();\n    };\n    this.updateDocTooltip = function () {\n        var popup = this.popup;\n        var all = popup.data;\n        var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n        var doc = null;\n        if (!selected || !this.editor || !this.popup.isOpen)\n            return this.hideDocTooltip();\n        this.editor.completers.some(function (completer) {\n            if (completer.getDocTooltip)\n                doc = completer.getDocTooltip(selected);\n            return doc;\n        });\n        if (!doc && typeof selected != \"string\")\n            doc = selected;\n        if (typeof doc == \"string\")\n            doc = { docText: doc };\n        if (!doc || !(doc.docHTML || doc.docText))\n            return this.hideDocTooltip();\n        this.showDocTooltip(doc);\n    };\n    this.showDocTooltip = function (item) {\n        if (!this.tooltipNode) {\n            this.tooltipNode = dom.createElement(\"div\");\n            this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n            this.tooltipNode.style.margin = 0;\n            this.tooltipNode.style.pointerEvents = \"auto\";\n            this.tooltipNode.tabIndex = -1;\n            this.tooltipNode.onblur = this.blurListener.bind(this);\n            this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n        }\n        var tooltipNode = this.tooltipNode;\n        if (item.docHTML) {\n            tooltipNode.innerHTML = item.docHTML;\n        }\n        else if (item.docText) {\n            tooltipNode.textContent = item.docText;\n        }\n        if (!tooltipNode.parentNode)\n            document.body.appendChild(tooltipNode);\n        var popup = this.popup;\n        var rect = popup.container.getBoundingClientRect();\n        tooltipNode.style.top = popup.container.style.top;\n        tooltipNode.style.bottom = popup.container.style.bottom;\n        tooltipNode.style.display = \"block\";\n        if (window.innerWidth - rect.right < 320) {\n            if (rect.left < 320) {\n                if (popup.isTopdown) {\n                    tooltipNode.style.top = rect.bottom + \"px\";\n                    tooltipNode.style.left = rect.left + \"px\";\n                    tooltipNode.style.right = \"\";\n                    tooltipNode.style.bottom = \"\";\n                }\n                else {\n                    tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n                    tooltipNode.style.left = rect.left + \"px\";\n                    tooltipNode.style.right = \"\";\n                    tooltipNode.style.bottom = \"\";\n                }\n            }\n            else {\n                tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n                tooltipNode.style.left = \"\";\n            }\n        }\n        else {\n            tooltipNode.style.left = (rect.right + 1) + \"px\";\n            tooltipNode.style.right = \"\";\n        }\n    };\n    this.hideDocTooltip = function () {\n        this.tooltipTimer.cancel();\n        if (!this.tooltipNode)\n            return;\n        var el = this.tooltipNode;\n        if (!this.editor.isFocused() && document.activeElement == el)\n            this.editor.focus();\n        this.tooltipNode = null;\n        if (el.parentNode)\n            el.parentNode.removeChild(el);\n    };\n    this.onTooltipClick = function (e) {\n        var a = e.target;\n        while (a && a != this.tooltipNode) {\n            if (a.nodeName == \"A\" && a.href) {\n                a.rel = \"noreferrer\";\n                a.target = \"_blank\";\n                break;\n            }\n            a = a.parentNode;\n        }\n    };\n    this.destroy = function () {\n        this.detach();\n        if (this.popup) {\n            this.popup.destroy();\n            var el = this.popup.container;\n            if (el && el.parentNode)\n                el.parentNode.removeChild(el);\n        }\n        if (this.editor && this.editor.completer == this)\n            this.editor.completer == null;\n        this.popup = null;\n    };\n}).call(Autocomplete.prototype);\nAutocomplete.for = function (editor) {\n    if (editor.completer) {\n        return editor.completer;\n    }\n    if (config.get(\"sharedPopups\")) {\n        if (!Autocomplete.$shared)\n            Autocomplete.$sharedInstance = new Autocomplete();\n        editor.completer = Autocomplete.$sharedInstance;\n    }\n    else {\n        editor.completer = new Autocomplete();\n        editor.once(\"destroy\", function (e, editor) {\n            editor.completer.destroy();\n        });\n    }\n    return editor.completer;\n};\nAutocomplete.startCommand = {\n    name: \"startAutocomplete\",\n    exec: function (editor, options) {\n        var completer = Autocomplete.for(editor);\n        completer.autoInsert = false;\n        completer.autoSelect = true;\n        completer.showPopup(editor, options);\n        completer.cancelContextMenu();\n    },\n    bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\nvar FilteredList = function (array, filterText) {\n    this.all = array;\n    this.filtered = array;\n    this.filterText = filterText || \"\";\n    this.exactMatch = false;\n};\n(function () {\n    this.setFilter = function (str) {\n        if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n            var matches = this.filtered;\n        else\n            var matches = this.all;\n        this.filterText = str;\n        matches = this.filterCompletions(matches, this.filterText);\n        matches = matches.sort(function (a, b) {\n            return b.exactMatch - a.exactMatch || b.$score - a.$score\n                || (a.caption || a.value).localeCompare(b.caption || b.value);\n        });\n        var prev = null;\n        matches = matches.filter(function (item) {\n            var caption = item.snippet || item.caption || item.value;\n            if (caption === prev)\n                return false;\n            prev = caption;\n            return true;\n        });\n        this.filtered = matches;\n    };\n    this.filterCompletions = function (items, needle) {\n        var results = [];\n        var upper = needle.toUpperCase();\n        var lower = needle.toLowerCase();\n        loop: for (var i = 0, item; item = items[i]; i++) {\n            var caption = item.caption || item.value || item.snippet;\n            if (!caption)\n                continue;\n            var lastIndex = -1;\n            var matchMask = 0;\n            var penalty = 0;\n            var index, distance;\n            if (this.exactMatch) {\n                if (needle !== caption.substr(0, needle.length))\n                    continue loop;\n            }\n            else {\n                var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n                if (fullMatchIndex > -1) {\n                    penalty = fullMatchIndex;\n                }\n                else {\n                    for (var j = 0; j < needle.length; j++) {\n                        var i1 = caption.indexOf(lower[j], lastIndex + 1);\n                        var i2 = caption.indexOf(upper[j], lastIndex + 1);\n                        index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n                        if (index < 0)\n                            continue loop;\n                        distance = index - lastIndex - 1;\n                        if (distance > 0) {\n                            if (lastIndex === -1)\n                                penalty += 10;\n                            penalty += distance;\n                            matchMask = matchMask | (1 << j);\n                        }\n                        lastIndex = index;\n                    }\n                }\n            }\n            item.matchMask = matchMask;\n            item.exactMatch = penalty ? 0 : 1;\n            item.$score = (item.score || 0) - penalty;\n            results.push(item);\n        }\n        return results;\n    };\n}).call(FilteredList.prototype);\nexports.Autocomplete = Autocomplete;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/ext/menu_tools/settings_menu.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"#ace_settingsmenu, #kbshortcutmenu {\\n    background-color: #F7F7F7;\\n    color: black;\\n    box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\n    padding: 1em 0.5em 2em 1em;\\n    overflow: auto;\\n    position: absolute;\\n    margin: 0;\\n    bottom: 0;\\n    right: 0;\\n    top: 0;\\n    z-index: 9991;\\n    cursor: default;\\n}\\n\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\n    box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\n    background-color: rgba(255, 255, 255, 0.6);\\n    color: black;\\n}\\n\\n.ace_optionsMenuEntry:hover {\\n    background-color: rgba(100, 100, 100, 0.1);\\n    transition: all 0.3s\\n}\\n\\n.ace_closeButton {\\n    background: rgba(245, 146, 146, 0.5);\\n    border: 1px solid #F48A8A;\\n    border-radius: 50%;\\n    padding: 7px;\\n    position: absolute;\\n    right: -8px;\\n    top: -8px;\\n    z-index: 100000;\\n}\\n.ace_closeButton{\\n    background: rgba(245, 146, 146, 0.9);\\n}\\n.ace_optionsMenuKey {\\n    color: darkslateblue;\\n    font-weight: bold;\\n}\\n.ace_optionsMenuCommand {\\n    color: darkcyan;\\n    font-weight: normal;\\n}\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\n    vertical-align: middle;\\n}\\n\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\n    background: #e7e7e7;\\n    box-shadow: 1px 0px 2px 0px #adadad inset;\\n    border-color: #adadad;\\n}\\n.ace_optionsMenuEntry button {\\n    background: white;\\n    border: 1px solid lightgray;\\n    margin: 0px;\\n}\\n.ace_optionsMenuEntry button:hover{\\n    background: #f0f0f0;\\n}\";\n\n});\n\nace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/ext/menu_tools/settings_menu.css\"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = require(\"./settings_menu.css\");\ndom.importCssString(cssText, \"settings_menu.css\", false);\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, callback) {\n    var closer = document.createElement('div');\n    var ignoreFocusOut = false;\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            close();\n        }\n    }\n    function close() {\n        if (!closer)\n            return;\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        if (editor) {\n            editor.focus();\n        }\n        closer = null;\n        callback && callback();\n    }\n    function setIgnoreFocusOut(ignore) {\n        ignoreFocusOut = ignore;\n        if (ignore) {\n            closer.style.pointerEvents = \"none\";\n            contentElement.style.pointerEvents = \"auto\";\n        }\n    }\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        (editor ? 'background-color: rgba(0, 0, 0, 0.3);' : '');\n    closer.addEventListener('click', function (e) {\n        if (!ignoreFocusOut) {\n            close();\n        }\n    });\n    document.addEventListener('keydown', documentEscListener);\n    contentElement.addEventListener('click', function (e) {\n        e.stopPropagation();\n    });\n    closer.appendChild(contentElement);\n    document.body.appendChild(closer);\n    if (editor) {\n        editor.blur();\n    }\n    return {\n        close: close,\n        setIgnoreFocusOut: setIgnoreFocusOut\n    };\n};\n\n});\n\nace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar modes = [];\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\nvar Mode = function (name, caption, extensions) {\n    this.name = name;\n    this.caption = caption;\n    this.mode = \"ace/mode/\" + name;\n    this.extensions = extensions;\n    var re;\n    if (/\\^/.test(extensions)) {\n        re = extensions.replace(/\\|(\\^)?/g, function (a, b) {\n            return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n        }) + \"$\";\n    }\n    else {\n        re = \"^.*\\\\.(\" + extensions + \")$\";\n    }\n    this.extRe = new RegExp(re, \"gi\");\n};\nMode.prototype.supportsFile = function (filename) {\n    return filename.match(this.extRe);\n};\nvar supportedModes = {\n    ABAP: [\"abap\"],\n    ABC: [\"abc\"],\n    ActionScript: [\"as\"],\n    ADA: [\"ada|adb\"],\n    Alda: [\"alda\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    Apex: [\"apex|cls|trigger|tgr\"],\n    AQL: [\"aql\"],\n    AsciiDoc: [\"asciidoc|adoc\"],\n    ASL: [\"dsl|asl|asl.json\"],\n    Assembly_x86: [\"asm|a\"],\n    AutoHotKey: [\"ahk\"],\n    BatchFile: [\"bat|cmd\"],\n    BibTeX: [\"bib\"],\n    C_Cpp: [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search: [\"c9search_results\"],\n    Cirru: [\"cirru|cr\"],\n    Clojure: [\"clj|cljs\"],\n    Cobol: [\"CBL|COB\"],\n    coffee: [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion: [\"cfm\"],\n    Crystal: [\"cr\"],\n    CSharp: [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS: [\"css\"],\n    Curly: [\"curly\"],\n    D: [\"d|di\"],\n    Dart: [\"dart\"],\n    Diff: [\"diff|patch\"],\n    Dockerfile: [\"^Dockerfile\"],\n    Dot: [\"dot\"],\n    Drools: [\"drl\"],\n    Edifact: [\"edi\"],\n    Eiffel: [\"e|ge\"],\n    EJS: [\"ejs\"],\n    Elixir: [\"ex|exs\"],\n    Elm: [\"elm\"],\n    Erlang: [\"erl|hrl\"],\n    Forth: [\"frt|fs|ldr|fth|4th\"],\n    Fortran: [\"f|f90\"],\n    FSharp: [\"fsi|fs|ml|mli|fsx|fsscript\"],\n    FSL: [\"fsl\"],\n    FTL: [\"ftl\"],\n    Gcode: [\"gcode\"],\n    Gherkin: [\"feature\"],\n    Gitignore: [\"^.gitignore\"],\n    Glsl: [\"glsl|frag|vert\"],\n    Gobstones: [\"gbs\"],\n    golang: [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy: [\"groovy\"],\n    HAML: [\"haml\"],\n    Handlebars: [\"hbs|handlebars|tpl|mustache\"],\n    Haskell: [\"hs\"],\n    Haskell_Cabal: [\"cabal\"],\n    haXe: [\"hx\"],\n    Hjson: [\"hjson\"],\n    HTML: [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby: [\"erb|rhtml|html.erb\"],\n    INI: [\"ini|conf|cfg|prefs\"],\n    Io: [\"io\"],\n    Ion: [\"ion\"],\n    Jack: [\"jack\"],\n    Jade: [\"jade|pug\"],\n    Java: [\"java\"],\n    JavaScript: [\"js|jsm|jsx|cjs|mjs\"],\n    JSON: [\"json\"],\n    JSON5: [\"json5\"],\n    JSONiq: [\"jq\"],\n    JSP: [\"jsp\"],\n    JSSM: [\"jssm|jssm_state\"],\n    JSX: [\"jsx\"],\n    Julia: [\"jl\"],\n    Kotlin: [\"kt|kts\"],\n    LaTeX: [\"tex|latex|ltx|bib\"],\n    Latte: [\"latte\"],\n    LESS: [\"less\"],\n    Liquid: [\"liquid\"],\n    Lisp: [\"lisp\"],\n    LiveScript: [\"ls\"],\n    Log: [\"log\"],\n    LogiQL: [\"logic|lql\"],\n    LSL: [\"lsl\"],\n    Lua: [\"lua\"],\n    LuaPage: [\"lp\"],\n    Lucene: [\"lucene\"],\n    Makefile: [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown: [\"md|markdown\"],\n    Mask: [\"mask\"],\n    MATLAB: [\"matlab\"],\n    Maze: [\"mz\"],\n    MediaWiki: [\"wiki|mediawiki\"],\n    MEL: [\"mel\"],\n    MIPS: [\"s|asm\"],\n    MIXAL: [\"mixal\"],\n    MUSHCode: [\"mc|mush\"],\n    MySQL: [\"mysql\"],\n    Nginx: [\"nginx|conf\"],\n    Nim: [\"nim\"],\n    Nix: [\"nix\"],\n    NSIS: [\"nsi|nsh\"],\n    Nunjucks: [\"nunjucks|nunjs|nj|njk\"],\n    ObjectiveC: [\"m|mm\"],\n    OCaml: [\"ml|mli\"],\n    PartiQL: [\"partiql|pql\"],\n    Pascal: [\"pas|p\"],\n    Perl: [\"pl|pm\"],\n    pgSQL: [\"pgsql\"],\n    PHP_Laravel_blade: [\"blade.php\"],\n    PHP: [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    Pig: [\"pig\"],\n    Powershell: [\"ps1\"],\n    Praat: [\"praat|praatscript|psc|proc\"],\n    Prisma: [\"prisma\"],\n    Prolog: [\"plg|prolog\"],\n    Properties: [\"properties\"],\n    Protobuf: [\"proto\"],\n    Puppet: [\"epp|pp\"],\n    Python: [\"py\"],\n    QML: [\"qml\"],\n    R: [\"r\"],\n    Raku: [\"raku|rakumod|rakutest|p6|pl6|pm6\"],\n    Razor: [\"cshtml|asp\"],\n    RDoc: [\"Rd\"],\n    Red: [\"red|reds\"],\n    RHTML: [\"Rhtml\"],\n    Robot: [\"robot|resource\"],\n    RST: [\"rst\"],\n    Ruby: [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust: [\"rs\"],\n    SaC: [\"sac\"],\n    SASS: [\"sass\"],\n    SCAD: [\"scad\"],\n    Scala: [\"scala|sbt\"],\n    Scheme: [\"scm|sm|rkt|oak|scheme\"],\n    Scrypt: [\"scrypt\"],\n    SCSS: [\"scss\"],\n    SH: [\"sh|bash|^.bashrc\"],\n    SJS: [\"sjs\"],\n    Slim: [\"slim|skim\"],\n    Smarty: [\"smarty|tpl\"],\n    Smithy: [\"smithy\"],\n    snippets: [\"snippets\"],\n    Soy_Template: [\"soy\"],\n    Space: [\"space\"],\n    SQL: [\"sql\"],\n    SQLServer: [\"sqlserver\"],\n    Stylus: [\"styl|stylus\"],\n    SVG: [\"svg\"],\n    Swift: [\"swift\"],\n    Tcl: [\"tcl\"],\n    Terraform: [\"tf\", \"tfvars\", \"terragrunt\"],\n    Tex: [\"tex\"],\n    Text: [\"txt\"],\n    Textile: [\"textile\"],\n    Toml: [\"toml\"],\n    TSX: [\"tsx\"],\n    Twig: [\"twig|swig\"],\n    Typescript: [\"ts|typescript|str\"],\n    Vala: [\"vala\"],\n    VBScript: [\"vbs|vb\"],\n    Velocity: [\"vm\"],\n    Verilog: [\"v|vh|sv|svh\"],\n    VHDL: [\"vhd|vhdl\"],\n    Visualforce: [\"vfp|component|page\"],\n    Wollok: [\"wlk|wpgm|wtest\"],\n    XML: [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery: [\"xq\"],\n    YAML: [\"yaml|yml\"],\n    Zeek: [\"zeek|bro\"],\n    Django: [\"html\"]\n};\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\",\n    PHP_Laravel_blade: \"PHP (Blade Template)\",\n    Perl6: \"Perl 6\",\n    AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});\n\nace.define(\"ace/ext/prompt\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\",\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\",\"ace/autocomplete\",\"ace/autocomplete/popup\",\"ace/autocomplete/popup\",\"ace/undomanager\",\"ace/tokenizer\",\"ace/ext/menu_tools/overlay_page\",\"ace/ext/modelist\"], function(require, exports, module){/**\n * Prompt plugin is used for getting input from user.\n *\n * @param {Object} editor                   Ouside editor related to this prompt. Will be blurred when prompt is open.\n * @param {String} message                  Predefined value of prompt input box.\n * @param {Object} options                  Cusomizable options for this prompt.\n * @param {String} options.name             Prompt name.\n * @param {String} options.$type            Use prompt of specific type (gotoLine|commands|modes or default if empty).\n * @param {[start, end]} options.selection  Defines which part of the predefined value should be highlited.\n * @param {Boolean} options.hasDescription  Set to true if prompt has description below input box.\n * @param {String} options.prompt           Description below input box.\n * @param {String} options.placeholder      Placeholder for value.\n * @param {Object} options.$rules           Specific rules for input like password or regexp.\n * @param {Boolean} options.ignoreFocusOut  Set to true to keep the prompt open when focus moves to another part of the editor.\n * @param {Function} options.getCompletions Function for defining list of options for value.\n * @param {Function} options.getPrefix      Function for defining current value prefix.\n * @param {Function} options.onAccept       Function called when Enter is pressed.\n * @param {Function} options.onInput        Function called when input is added to prompt input box.\n * @param {Function} options.onCancel       Function called when Esc|Shift-Esc is pressed.\n * @param {Function} callback               Function called after done.\n * */\n\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar shortcuts = require(\"../ext/menu_tools/get_editor_keyboard_shortcuts\");\nvar FilteredList = require(\"../autocomplete\").FilteredList;\nvar AcePopup = require('../autocomplete/popup').AcePopup;\nvar $singleLineEditor = require('../autocomplete/popup').$singleLineEditor;\nvar UndoManager = require(\"../undomanager\").UndoManager;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar overlayPage = require(\"./menu_tools/overlay_page\").overlayPage;\nvar modelist = require(\"./modelist\");\nvar openPrompt;\nfunction prompt(editor, message, options, callback) {\n    if (typeof message == \"object\") {\n        return prompt(editor, \"\", message, options);\n    }\n    if (openPrompt) {\n        var lastPrompt = openPrompt;\n        editor = lastPrompt.editor;\n        lastPrompt.close();\n        if (lastPrompt.name && lastPrompt.name == options.name)\n            return;\n    }\n    if (options.$type)\n        return prompt[options.$type](editor, callback);\n    var cmdLine = $singleLineEditor();\n    cmdLine.session.setUndoManager(new UndoManager());\n    var el = dom.buildDom([\"div\", { class: \"ace_prompt_container\" + (options.hasDescription ? \" input-box-with-description\" : \"\") }]);\n    var overlay = overlayPage(editor, el, done);\n    el.appendChild(cmdLine.container);\n    if (editor) {\n        editor.cmdLine = cmdLine;\n        cmdLine.setOption(\"fontSize\", editor.getOption(\"fontSize\"));\n    }\n    if (message) {\n        cmdLine.setValue(message, 1);\n    }\n    if (options.selection) {\n        cmdLine.selection.setRange({\n            start: cmdLine.session.doc.indexToPosition(options.selection[0]),\n            end: cmdLine.session.doc.indexToPosition(options.selection[1])\n        });\n    }\n    if (options.getCompletions) {\n        var popup = new AcePopup();\n        popup.renderer.setStyle(\"ace_autocomplete_inline\");\n        popup.container.style.display = \"block\";\n        popup.container.style.maxWidth = \"600px\";\n        popup.container.style.width = \"100%\";\n        popup.container.style.marginTop = \"3px\";\n        popup.renderer.setScrollMargin(2, 2, 0, 0);\n        popup.autoSelect = false;\n        popup.renderer.$maxLines = 15;\n        popup.setRow(-1);\n        popup.on(\"click\", function (e) {\n            var data = popup.getData(popup.getRow());\n            if (!data.error) {\n                cmdLine.setValue(data.value || data.name || data);\n                accept();\n                e.stop();\n            }\n        });\n        el.appendChild(popup.container);\n        updateCompletions();\n    }\n    if (options.$rules) {\n        var tokenizer = new Tokenizer(options.$rules);\n        cmdLine.session.bgTokenizer.setTokenizer(tokenizer);\n    }\n    if (options.placeholder) {\n        cmdLine.setOption(\"placeholder\", options.placeholder);\n    }\n    if (options.hasDescription) {\n        var promptTextContainer = dom.buildDom([\"div\", { class: \"ace_prompt_text_container\" }]);\n        dom.buildDom(options.prompt || \"Press 'Enter' to confirm or 'Escape' to cancel\", promptTextContainer);\n        el.appendChild(promptTextContainer);\n    }\n    overlay.setIgnoreFocusOut(options.ignoreFocusOut);\n    function accept() {\n        var val;\n        if (popup && popup.getCursorPosition().row > 0) {\n            val = valueFromRecentList();\n        }\n        else {\n            val = cmdLine.getValue();\n        }\n        var curData = popup ? popup.getData(popup.getRow()) : val;\n        if (curData && !curData.error) {\n            done();\n            options.onAccept && options.onAccept({\n                value: val,\n                item: curData\n            }, cmdLine);\n        }\n    }\n    var keys = {\n        \"Enter\": accept,\n        \"Esc|Shift-Esc\": function () {\n            options.onCancel && options.onCancel(cmdLine.getValue(), cmdLine);\n            done();\n        }\n    };\n    if (popup) {\n        Object.assign(keys, {\n            \"Up\": function (editor) { popup.goTo(\"up\"); valueFromRecentList(); },\n            \"Down\": function (editor) { popup.goTo(\"down\"); valueFromRecentList(); },\n            \"Ctrl-Up|Ctrl-Home\": function (editor) { popup.goTo(\"start\"); valueFromRecentList(); },\n            \"Ctrl-Down|Ctrl-End\": function (editor) { popup.goTo(\"end\"); valueFromRecentList(); },\n            \"Tab\": function (editor) {\n                popup.goTo(\"down\");\n                valueFromRecentList();\n            },\n            \"PageUp\": function (editor) { popup.gotoPageUp(); valueFromRecentList(); },\n            \"PageDown\": function (editor) { popup.gotoPageDown(); valueFromRecentList(); }\n        });\n    }\n    cmdLine.commands.bindKeys(keys);\n    function done() {\n        overlay.close();\n        callback && callback();\n        openPrompt = null;\n    }\n    cmdLine.on(\"input\", function () {\n        options.onInput && options.onInput();\n        updateCompletions();\n    });\n    function updateCompletions() {\n        if (options.getCompletions) {\n            var prefix;\n            if (options.getPrefix) {\n                prefix = options.getPrefix(cmdLine);\n            }\n            var completions = options.getCompletions(cmdLine);\n            popup.setData(completions, prefix);\n            popup.resize(true);\n        }\n    }\n    function valueFromRecentList() {\n        var current = popup.getData(popup.getRow());\n        if (current && !current.error)\n            return current.value || current.caption || current;\n    }\n    cmdLine.resize(true);\n    if (popup) {\n        popup.resize(true);\n    }\n    cmdLine.focus();\n    openPrompt = {\n        close: done,\n        name: options.name,\n        editor: editor\n    };\n}\nprompt.gotoLine = function (editor, callback) {\n    function stringifySelection(selection) {\n        if (!Array.isArray(selection))\n            selection = [selection];\n        return selection.map(function (r) {\n            var cursor = r.isBackwards ? r.start : r.end;\n            var anchor = r.isBackwards ? r.end : r.start;\n            var row = anchor.row;\n            var s = (row + 1) + \":\" + anchor.column;\n            if (anchor.row == cursor.row) {\n                if (anchor.column != cursor.column)\n                    s += \">\" + \":\" + cursor.column;\n            }\n            else {\n                s += \">\" + (cursor.row + 1) + \":\" + cursor.column;\n            }\n            return s;\n        }).reverse().join(\", \");\n    }\n    prompt(editor, \":\" + stringifySelection(editor.selection.toJSON()), {\n        name: \"gotoLine\",\n        selection: [1, Number.MAX_VALUE],\n        onAccept: function (data) {\n            var value = data.value;\n            var _history = prompt.gotoLine._history;\n            if (!_history)\n                prompt.gotoLine._history = _history = [];\n            if (_history.indexOf(value) != -1)\n                _history.splice(_history.indexOf(value), 1);\n            _history.unshift(value);\n            if (_history.length > 20)\n                _history.length = 20;\n            var pos = editor.getCursorPosition();\n            var ranges = [];\n            value.replace(/^:/, \"\").split(/,/).map(function (str) {\n                var parts = str.split(/([<>:+-]|c?\\d+)|[^c\\d<>:+-]+/).filter(Boolean);\n                var i = 0;\n                function readPosition() {\n                    var c = parts[i++];\n                    if (!c)\n                        return;\n                    if (c[0] == \"c\") {\n                        var index = parseInt(c.slice(1)) || 0;\n                        return editor.session.doc.indexToPosition(index);\n                    }\n                    var row = pos.row;\n                    var column = 0;\n                    if (/\\d/.test(c)) {\n                        row = parseInt(c) - 1;\n                        c = parts[i++];\n                    }\n                    if (c == \":\") {\n                        c = parts[i++];\n                        if (/\\d/.test(c)) {\n                            column = parseInt(c) || 0;\n                        }\n                    }\n                    return { row: row, column: column };\n                }\n                pos = readPosition();\n                var range = Range.fromPoints(pos, pos);\n                if (parts[i] == \">\") {\n                    i++;\n                    range.end = readPosition();\n                }\n                else if (parts[i] == \"<\") {\n                    i++;\n                    range.start = readPosition();\n                }\n                ranges.unshift(range);\n            });\n            editor.selection.fromJSON(ranges);\n            var scrollTop = editor.renderer.scrollTop;\n            editor.renderer.scrollSelectionIntoView(editor.selection.anchor, editor.selection.cursor, 0.5);\n            editor.renderer.animateScrolling(scrollTop);\n        },\n        history: function () {\n            var undoManager = editor.session.getUndoManager();\n            if (!prompt.gotoLine._history)\n                return [];\n            return prompt.gotoLine._history;\n        },\n        getCompletions: function (cmdLine) {\n            var value = cmdLine.getValue();\n            var m = value.replace(/^:/, \"\").split(\":\");\n            var row = Math.min(parseInt(m[0]) || 1, editor.session.getLength()) - 1;\n            var line = editor.session.getLine(row);\n            var current = value + \"  \" + line;\n            return [current].concat(this.history());\n        },\n        $rules: {\n            start: [{\n                    regex: /\\d+/,\n                    token: \"string\"\n                }, {\n                    regex: /[:,><+\\-c]/,\n                    token: \"keyword\"\n                }]\n        }\n    });\n};\nprompt.commands = function (editor, callback) {\n    function normalizeName(name) {\n        return (name || \"\").replace(/^./, function (x) {\n            return x.toUpperCase(x);\n        }).replace(/[a-z][A-Z]/g, function (x) {\n            return x[0] + \" \" + x[1].toLowerCase(x);\n        });\n    }\n    function getEditorCommandsByName(excludeCommands) {\n        var commandsByName = [];\n        var commandMap = {};\n        editor.keyBinding.$handlers.forEach(function (handler) {\n            var platform = handler.platform;\n            var cbn = handler.byName;\n            for (var i in cbn) {\n                var key = cbn[i].bindKey;\n                if (typeof key !== \"string\") {\n                    key = key && key[platform] || \"\";\n                }\n                var commands = cbn[i];\n                var description = commands.description || normalizeName(commands.name);\n                if (!Array.isArray(commands))\n                    commands = [commands];\n                commands.forEach(function (command) {\n                    if (typeof command != \"string\")\n                        command = command.name;\n                    var needle = excludeCommands.find(function (el) {\n                        return el === command;\n                    });\n                    if (!needle) {\n                        if (commandMap[command]) {\n                            commandMap[command].key += \"|\" + key;\n                        }\n                        else {\n                            commandMap[command] = { key: key, command: command, description: description };\n                            commandsByName.push(commandMap[command]);\n                        }\n                    }\n                });\n            }\n        });\n        return commandsByName;\n    }\n    var excludeCommandsList = [\"insertstring\", \"inserttext\", \"setIndentation\", \"paste\"];\n    var shortcutsArray = getEditorCommandsByName(excludeCommandsList);\n    shortcutsArray = shortcutsArray.map(function (item) {\n        return { value: item.description, meta: item.key, command: item.command };\n    });\n    prompt(editor, \"\", {\n        name: \"commands\",\n        selection: [0, Number.MAX_VALUE],\n        maxHistoryCount: 5,\n        onAccept: function (data) {\n            if (data.item) {\n                var commandName = data.item.command;\n                this.addToHistory(data.item);\n                editor.execCommand(commandName);\n            }\n        },\n        addToHistory: function (item) {\n            var history = this.history();\n            history.unshift(item);\n            delete item.message;\n            for (var i = 1; i < history.length; i++) {\n                if (history[i][\"command\"] == item.command) {\n                    history.splice(i, 1);\n                    break;\n                }\n            }\n            if (this.maxHistoryCount > 0 && history.length > this.maxHistoryCount) {\n                history.splice(history.length - 1, 1);\n            }\n            prompt.commands.history = history;\n        },\n        history: function () {\n            return prompt.commands.history || [];\n        },\n        getPrefix: function (cmdLine) {\n            var currentPos = cmdLine.getCursorPosition();\n            var filterValue = cmdLine.getValue();\n            return filterValue.substring(0, currentPos.column);\n        },\n        getCompletions: function (cmdLine) {\n            function getFilteredCompletions(commands, prefix) {\n                var resultCommands = JSON.parse(JSON.stringify(commands));\n                var filtered = new FilteredList(resultCommands);\n                return filtered.filterCompletions(resultCommands, prefix);\n            }\n            function getUniqueCommandList(commands, usedCommands) {\n                if (!usedCommands || !usedCommands.length) {\n                    return commands;\n                }\n                var excludeCommands = [];\n                usedCommands.forEach(function (item) {\n                    excludeCommands.push(item.command);\n                });\n                var resultCommands = [];\n                commands.forEach(function (item) {\n                    if (excludeCommands.indexOf(item.command) === -1) {\n                        resultCommands.push(item);\n                    }\n                });\n                return resultCommands;\n            }\n            var prefix = this.getPrefix(cmdLine);\n            var recentlyUsedCommands = getFilteredCompletions(this.history(), prefix);\n            var otherCommands = getUniqueCommandList(shortcutsArray, recentlyUsedCommands);\n            otherCommands = getFilteredCompletions(otherCommands, prefix);\n            if (recentlyUsedCommands.length && otherCommands.length) {\n                recentlyUsedCommands[0][\"message\"] = \" Recently used\";\n                otherCommands[0][\"message\"] = \" Other commands\";\n            }\n            var completions = recentlyUsedCommands.concat(otherCommands);\n            return completions.length > 0 ? completions : [{\n                    value: \"No matching commands\",\n                    error: 1\n                }];\n        }\n    });\n};\nprompt.modes = function (editor, callback) {\n    var modesArray = modelist.modes;\n    modesArray = modesArray.map(function (item) {\n        return { value: item.caption, mode: item.name };\n    });\n    prompt(editor, \"\", {\n        name: \"modes\",\n        selection: [0, Number.MAX_VALUE],\n        onAccept: function (data) {\n            if (data.item) {\n                var modeName = \"ace/mode/\" + data.item.mode;\n                editor.session.setMode(modeName);\n            }\n        },\n        getPrefix: function (cmdLine) {\n            var currentPos = cmdLine.getCursorPosition();\n            var filterValue = cmdLine.getValue();\n            return filterValue.substring(0, currentPos.column);\n        },\n        getCompletions: function (cmdLine) {\n            function getFilteredCompletions(modes, prefix) {\n                var resultCommands = JSON.parse(JSON.stringify(modes));\n                var filtered = new FilteredList(resultCommands);\n                return filtered.filterCompletions(resultCommands, prefix);\n            }\n            var prefix = this.getPrefix(cmdLine);\n            var completions = getFilteredCompletions(modesArray, prefix);\n            return completions.length > 0 ? completions : [{\n                    \"caption\": \"No mode matching\",\n                    \"value\": \"No mode matching\",\n                    \"error\": 1\n                }];\n        }\n    });\n};\ndom.importCssString(\".ace_prompt_container {\\n    max-width: 600px;\\n    width: 100%;\\n    margin: 20px auto;\\n    padding: 3px;\\n    background: white;\\n    border-radius: 2px;\\n    box-shadow: 0px 2px 3px 0px #555;\\n}\", \"promtp.css\", false);\nexports.prompt = prompt;\n\n});                (function() {\n                    ace.require([\"ace/ext/prompt\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-rtl.js",
    "content": "ace.define(\"ace/ext/rtl\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar commands = [{\n        name: \"leftToRight\",\n        bindKey: { win: \"Ctrl-Alt-Shift-L\", mac: \"Command-Alt-Shift-L\" },\n        exec: function (editor) {\n            editor.session.$bidiHandler.setRtlDirection(editor, false);\n        },\n        readOnly: true\n    }, {\n        name: \"rightToLeft\",\n        bindKey: { win: \"Ctrl-Alt-Shift-R\", mac: \"Command-Alt-Shift-R\" },\n        exec: function (editor) {\n            editor.session.$bidiHandler.setRtlDirection(editor, true);\n        },\n        readOnly: true\n    }];\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    rtlText: {\n        set: function (val) {\n            if (val) {\n                this.on(\"change\", onChange);\n                this.on(\"changeSelection\", onChangeSelection);\n                this.renderer.on(\"afterRender\", updateLineDirection);\n                this.commands.on(\"exec\", onCommandEmitted);\n                this.commands.addCommands(commands);\n            }\n            else {\n                this.off(\"change\", onChange);\n                this.off(\"changeSelection\", onChangeSelection);\n                this.renderer.off(\"afterRender\", updateLineDirection);\n                this.commands.off(\"exec\", onCommandEmitted);\n                this.commands.removeCommands(commands);\n                clearTextLayer(this.renderer);\n            }\n            this.renderer.updateFull();\n        }\n    },\n    rtl: {\n        set: function (val) {\n            this.session.$bidiHandler.$isRtl = val;\n            if (val) {\n                this.setOption(\"rtlText\", false);\n                this.renderer.on(\"afterRender\", updateLineDirection);\n                this.session.$bidiHandler.seenBidi = true;\n            }\n            else {\n                this.renderer.off(\"afterRender\", updateLineDirection);\n                clearTextLayer(this.renderer);\n            }\n            this.renderer.updateFull();\n        }\n    }\n});\nfunction onChangeSelection(e, editor) {\n    var lead = editor.getSelection().lead;\n    if (editor.session.$bidiHandler.isRtlLine(lead.row)) {\n        if (lead.column === 0) {\n            if (editor.session.$bidiHandler.isMoveLeftOperation && lead.row > 0) {\n                editor.getSelection().moveCursorTo(lead.row - 1, editor.session.getLine(lead.row - 1).length);\n            }\n            else {\n                if (editor.getSelection().isEmpty())\n                    lead.column += 1;\n                else\n                    lead.setPosition(lead.row, lead.column + 1);\n            }\n        }\n    }\n}\nfunction onCommandEmitted(commadEvent) {\n    commadEvent.editor.session.$bidiHandler.isMoveLeftOperation = /gotoleft|selectleft|backspace|removewordleft/.test(commadEvent.command.name);\n}\nfunction onChange(delta, editor) {\n    var session = editor.session;\n    session.$bidiHandler.currentRow = null;\n    if (session.$bidiHandler.isRtlLine(delta.start.row) && delta.action === 'insert' && delta.lines.length > 1) {\n        for (var row = delta.start.row; row < delta.end.row; row++) {\n            if (session.getLine(row + 1).charAt(0) !== session.$bidiHandler.RLE)\n                session.doc.$lines[row + 1] = session.$bidiHandler.RLE + session.getLine(row + 1);\n        }\n    }\n}\nfunction updateLineDirection(e, renderer) {\n    var session = renderer.session;\n    var $bidiHandler = session.$bidiHandler;\n    var cells = renderer.$textLayer.$lines.cells;\n    var width = renderer.layerConfig.width - renderer.layerConfig.padding + \"px\";\n    cells.forEach(function (cell) {\n        var style = cell.element.style;\n        if ($bidiHandler && $bidiHandler.isRtlLine(cell.row)) {\n            style.direction = \"rtl\";\n            style.textAlign = \"right\";\n            style.width = width;\n        }\n        else {\n            style.direction = \"\";\n            style.textAlign = \"\";\n            style.width = \"\";\n        }\n    });\n}\nfunction clearTextLayer(renderer) {\n    var lines = renderer.$textLayer.$lines;\n    lines.cells.forEach(clear);\n    lines.cellCache.forEach(clear);\n    function clear(cell) {\n        var style = cell.element.style;\n        style.direction = style.textAlign = style.width = \"\";\n    }\n}\n\n});                (function() {\n                    ace.require([\"ace/ext/rtl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-searchbox.js",
    "content": "ace.define(\"ace/ext/searchbox.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"\\n\\n/* ------------------------------------------------------------------------------------------\\n * Editor Search Form\\n * --------------------------------------------------------------------------------------- */\\n.ace_search {\\n    background-color: #ddd;\\n    color: #666;\\n    border: 1px solid #cbcbcb;\\n    border-top: 0 none;\\n    overflow: hidden;\\n    margin: 0;\\n    padding: 4px 6px 0 4px;\\n    position: absolute;\\n    top: 0;\\n    z-index: 99;\\n    white-space: normal;\\n}\\n.ace_search.left {\\n    border-left: 0 none;\\n    border-radius: 0px 0px 5px 0px;\\n    left: 0;\\n}\\n.ace_search.right {\\n    border-radius: 0px 0px 0px 5px;\\n    border-right: 0 none;\\n    right: 0;\\n}\\n\\n.ace_search_form, .ace_replace_form {\\n    margin: 0 20px 4px 0;\\n    overflow: hidden;\\n    line-height: 1.9;\\n}\\n.ace_replace_form {\\n    margin-right: 0;\\n}\\n.ace_search_form.ace_nomatch {\\n    outline: 1px solid red;\\n}\\n\\n.ace_search_field {\\n    border-radius: 3px 0 0 3px;\\n    background-color: white;\\n    color: black;\\n    border: 1px solid #cbcbcb;\\n    border-right: 0 none;\\n    outline: 0;\\n    padding: 0;\\n    font-size: inherit;\\n    margin: 0;\\n    line-height: inherit;\\n    padding: 0 6px;\\n    min-width: 17em;\\n    vertical-align: top;\\n    min-height: 1.8em;\\n    box-sizing: content-box;\\n}\\n.ace_searchbtn {\\n    border: 1px solid #cbcbcb;\\n    line-height: inherit;\\n    display: inline-block;\\n    padding: 0 6px;\\n    background: #fff;\\n    border-right: 0 none;\\n    border-left: 1px solid #dcdcdc;\\n    cursor: pointer;\\n    margin: 0;\\n    position: relative;\\n    color: #666;\\n}\\n.ace_searchbtn:last-child {\\n    border-radius: 0 3px 3px 0;\\n    border-right: 1px solid #cbcbcb;\\n}\\n.ace_searchbtn:disabled {\\n    background: none;\\n    cursor: default;\\n}\\n.ace_searchbtn:hover {\\n    background-color: #eef1f6;\\n}\\n.ace_searchbtn.prev, .ace_searchbtn.next {\\n     padding: 0px 0.7em\\n}\\n.ace_searchbtn.prev:after, .ace_searchbtn.next:after {\\n     content: \\\"\\\";\\n     border: solid 2px #888;\\n     width: 0.5em;\\n     height: 0.5em;\\n     border-width:  2px 0 0 2px;\\n     display:inline-block;\\n     transform: rotate(-45deg);\\n}\\n.ace_searchbtn.next:after {\\n     border-width: 0 2px 2px 0 ;\\n}\\n.ace_searchbtn_close {\\n    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\n    border-radius: 50%;\\n    border: 0 none;\\n    color: #656565;\\n    cursor: pointer;\\n    font: 16px/16px Arial;\\n    padding: 0;\\n    height: 14px;\\n    width: 14px;\\n    top: 9px;\\n    right: 7px;\\n    position: absolute;\\n}\\n.ace_searchbtn_close:hover {\\n    background-color: #656565;\\n    background-position: 50% 100%;\\n    color: white;\\n}\\n\\n.ace_button {\\n    margin-left: 2px;\\n    cursor: pointer;\\n    -webkit-user-select: none;\\n    -moz-user-select: none;\\n    -o-user-select: none;\\n    -ms-user-select: none;\\n    user-select: none;\\n    overflow: hidden;\\n    opacity: 0.7;\\n    border: 1px solid rgba(100,100,100,0.23);\\n    padding: 1px;\\n    box-sizing:    border-box!important;\\n    color: black;\\n}\\n\\n.ace_button:hover {\\n    background-color: #eee;\\n    opacity:1;\\n}\\n.ace_button:active {\\n    background-color: #ddd;\\n}\\n\\n.ace_button.checked {\\n    border-color: #3399ff;\\n    opacity:1;\\n}\\n\\n.ace_search_options{\\n    margin-bottom: 3px;\\n    text-align: right;\\n    -webkit-user-select: none;\\n    -moz-user-select: none;\\n    -o-user-select: none;\\n    -ms-user-select: none;\\n    user-select: none;\\n    clear: both;\\n}\\n\\n.ace_search_counter {\\n    float: left;\\n    font-family: arial;\\n    padding: 0 8px;\\n}\";\n\n});\n\nace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/ext/searchbox.css\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar searchboxCss = require(\"./searchbox.css\");\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar keyUtil = require(\"../lib/keys\");\nvar MAX_COUNT = 999;\ndom.importCssString(searchboxCss, \"ace_searchbox\", false);\nvar SearchBox = function (editor, range, showReplaceForm) {\n    var div = dom.createElement(\"div\");\n    dom.buildDom([\"div\", { class: \"ace_search right\" },\n        [\"span\", { action: \"hide\", class: \"ace_searchbtn_close\" }],\n        [\"div\", { class: \"ace_search_form\" },\n            [\"input\", { class: \"ace_search_field\", placeholder: \"Search for\", spellcheck: \"false\" }],\n            [\"span\", { action: \"findPrev\", class: \"ace_searchbtn prev\" }, \"\\u200b\"],\n            [\"span\", { action: \"findNext\", class: \"ace_searchbtn next\" }, \"\\u200b\"],\n            [\"span\", { action: \"findAll\", class: \"ace_searchbtn\", title: \"Alt-Enter\" }, \"All\"]\n        ],\n        [\"div\", { class: \"ace_replace_form\" },\n            [\"input\", { class: \"ace_search_field\", placeholder: \"Replace with\", spellcheck: \"false\" }],\n            [\"span\", { action: \"replaceAndFindNext\", class: \"ace_searchbtn\" }, \"Replace\"],\n            [\"span\", { action: \"replaceAll\", class: \"ace_searchbtn\" }, \"All\"]\n        ],\n        [\"div\", { class: \"ace_search_options\" },\n            [\"span\", { action: \"toggleReplace\", class: \"ace_button\", title: \"Toggle Replace mode\",\n                    style: \"float:left;margin-top:-2px;padding:0 5px;\" }, \"+\"],\n            [\"span\", { class: \"ace_search_counter\" }],\n            [\"span\", { action: \"toggleRegexpMode\", class: \"ace_button\", title: \"RegExp Search\" }, \".*\"],\n            [\"span\", { action: \"toggleCaseSensitive\", class: \"ace_button\", title: \"CaseSensitive Search\" }, \"Aa\"],\n            [\"span\", { action: \"toggleWholeWords\", class: \"ace_button\", title: \"Whole Word Search\" }, \"\\\\b\"],\n            [\"span\", { action: \"searchInSelection\", class: \"ace_button\", title: \"Search In Selection\" }, \"S\"]\n        ]\n    ], div);\n    this.element = div.firstChild;\n    this.setSession = this.setSession.bind(this);\n    this.$init();\n    this.setEditor(editor);\n    dom.importCssString(searchboxCss, \"ace_searchbox\", editor.container);\n};\n(function () {\n    this.setEditor = function (editor) {\n        editor.searchBox = this;\n        editor.renderer.scroller.appendChild(this.element);\n        this.editor = editor;\n    };\n    this.setSession = function (e) {\n        this.searchRange = null;\n        this.$syncOptions(true);\n    };\n    this.$initElements = function (sb) {\n        this.searchBox = sb.querySelector(\".ace_search_form\");\n        this.replaceBox = sb.querySelector(\".ace_replace_form\");\n        this.searchOption = sb.querySelector(\"[action=searchInSelection]\");\n        this.replaceOption = sb.querySelector(\"[action=toggleReplace]\");\n        this.regExpOption = sb.querySelector(\"[action=toggleRegexpMode]\");\n        this.caseSensitiveOption = sb.querySelector(\"[action=toggleCaseSensitive]\");\n        this.wholeWordOption = sb.querySelector(\"[action=toggleWholeWords]\");\n        this.searchInput = this.searchBox.querySelector(\".ace_search_field\");\n        this.replaceInput = this.replaceBox.querySelector(\".ace_search_field\");\n        this.searchCounter = sb.querySelector(\".ace_search_counter\");\n    };\n    this.$init = function () {\n        var sb = this.element;\n        this.$initElements(sb);\n        var _this = this;\n        event.addListener(sb, \"mousedown\", function (e) {\n            setTimeout(function () {\n                _this.activeInput.focus();\n            }, 0);\n            event.stopPropagation(e);\n        });\n        event.addListener(sb, \"click\", function (e) {\n            var t = e.target || e.srcElement;\n            var action = t.getAttribute(\"action\");\n            if (action && _this[action])\n                _this[action]();\n            else if (_this.$searchBarKb.commands[action])\n                _this.$searchBarKb.commands[action].exec(_this);\n            event.stopPropagation(e);\n        });\n        event.addCommandKeyListener(sb, function (e, hashId, keyCode) {\n            var keyString = keyUtil.keyCodeToString(keyCode);\n            var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);\n            if (command && command.exec) {\n                command.exec(_this);\n                event.stopEvent(e);\n            }\n        });\n        this.$onChange = lang.delayedCall(function () {\n            _this.find(false, false);\n        });\n        event.addListener(this.searchInput, \"input\", function () {\n            _this.$onChange.schedule(20);\n        });\n        event.addListener(this.searchInput, \"focus\", function () {\n            _this.activeInput = _this.searchInput;\n            _this.searchInput.value && _this.highlight();\n        });\n        event.addListener(this.replaceInput, \"focus\", function () {\n            _this.activeInput = _this.replaceInput;\n            _this.searchInput.value && _this.highlight();\n        });\n    };\n    this.$closeSearchBarKb = new HashHandler([{\n            bindKey: \"Esc\",\n            name: \"closeSearchBar\",\n            exec: function (editor) {\n                editor.searchBox.hide();\n            }\n        }]);\n    this.$searchBarKb = new HashHandler();\n    this.$searchBarKb.bindKeys({\n        \"Ctrl-f|Command-f\": function (sb) {\n            var isReplace = sb.isReplace = !sb.isReplace;\n            sb.replaceBox.style.display = isReplace ? \"\" : \"none\";\n            sb.replaceOption.checked = false;\n            sb.$syncOptions();\n            sb.searchInput.focus();\n        },\n        \"Ctrl-H|Command-Option-F\": function (sb) {\n            if (sb.editor.getReadOnly())\n                return;\n            sb.replaceOption.checked = true;\n            sb.$syncOptions();\n            sb.replaceInput.focus();\n        },\n        \"Ctrl-G|Command-G\": function (sb) {\n            sb.findNext();\n        },\n        \"Ctrl-Shift-G|Command-Shift-G\": function (sb) {\n            sb.findPrev();\n        },\n        \"esc\": function (sb) {\n            setTimeout(function () { sb.hide(); });\n        },\n        \"Return\": function (sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replace();\n            sb.findNext();\n        },\n        \"Shift-Return\": function (sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replace();\n            sb.findPrev();\n        },\n        \"Alt-Return\": function (sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replaceAll();\n            sb.findAll();\n        },\n        \"Tab\": function (sb) {\n            (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();\n        }\n    });\n    this.$searchBarKb.addCommands([{\n            name: \"toggleRegexpMode\",\n            bindKey: { win: \"Alt-R|Alt-/\", mac: \"Ctrl-Alt-R|Ctrl-Alt-/\" },\n            exec: function (sb) {\n                sb.regExpOption.checked = !sb.regExpOption.checked;\n                sb.$syncOptions();\n            }\n        }, {\n            name: \"toggleCaseSensitive\",\n            bindKey: { win: \"Alt-C|Alt-I\", mac: \"Ctrl-Alt-R|Ctrl-Alt-I\" },\n            exec: function (sb) {\n                sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\n                sb.$syncOptions();\n            }\n        }, {\n            name: \"toggleWholeWords\",\n            bindKey: { win: \"Alt-B|Alt-W\", mac: \"Ctrl-Alt-B|Ctrl-Alt-W\" },\n            exec: function (sb) {\n                sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\n                sb.$syncOptions();\n            }\n        }, {\n            name: \"toggleReplace\",\n            exec: function (sb) {\n                sb.replaceOption.checked = !sb.replaceOption.checked;\n                sb.$syncOptions();\n            }\n        }, {\n            name: \"searchInSelection\",\n            exec: function (sb) {\n                sb.searchOption.checked = !sb.searchRange;\n                sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());\n                sb.$syncOptions();\n            }\n        }]);\n    this.setSearchRange = function (range) {\n        this.searchRange = range;\n        if (range) {\n            this.searchRangeMarker = this.editor.session.addMarker(range, \"ace_active-line\");\n        }\n        else if (this.searchRangeMarker) {\n            this.editor.session.removeMarker(this.searchRangeMarker);\n            this.searchRangeMarker = null;\n        }\n    };\n    this.$syncOptions = function (preventScroll) {\n        dom.setCssClass(this.replaceOption, \"checked\", this.searchRange);\n        dom.setCssClass(this.searchOption, \"checked\", this.searchOption.checked);\n        this.replaceOption.textContent = this.replaceOption.checked ? \"-\" : \"+\";\n        dom.setCssClass(this.regExpOption, \"checked\", this.regExpOption.checked);\n        dom.setCssClass(this.wholeWordOption, \"checked\", this.wholeWordOption.checked);\n        dom.setCssClass(this.caseSensitiveOption, \"checked\", this.caseSensitiveOption.checked);\n        var readOnly = this.editor.getReadOnly();\n        this.replaceOption.style.display = readOnly ? \"none\" : \"\";\n        this.replaceBox.style.display = this.replaceOption.checked && !readOnly ? \"\" : \"none\";\n        this.find(false, false, preventScroll);\n    };\n    this.highlight = function (re) {\n        this.editor.session.highlight(re || this.editor.$search.$options.re);\n        this.editor.renderer.updateBackMarkers();\n    };\n    this.find = function (skipCurrent, backwards, preventScroll) {\n        var range = this.editor.find(this.searchInput.value, {\n            skipCurrent: skipCurrent,\n            backwards: backwards,\n            wrap: true,\n            regExp: this.regExpOption.checked,\n            caseSensitive: this.caseSensitiveOption.checked,\n            wholeWord: this.wholeWordOption.checked,\n            preventScroll: preventScroll,\n            range: this.searchRange\n        });\n        var noMatch = !range && this.searchInput.value;\n        dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n        this.editor._emit(\"findSearchBox\", { match: !noMatch });\n        this.highlight();\n        this.updateCounter();\n    };\n    this.updateCounter = function () {\n        var editor = this.editor;\n        var regex = editor.$search.$options.re;\n        var all = 0;\n        var before = 0;\n        if (regex) {\n            var value = this.searchRange\n                ? editor.session.getTextRange(this.searchRange)\n                : editor.getValue();\n            var offset = editor.session.doc.positionToIndex(editor.selection.anchor);\n            if (this.searchRange)\n                offset -= editor.session.doc.positionToIndex(this.searchRange.start);\n            var last = regex.lastIndex = 0;\n            var m;\n            while ((m = regex.exec(value))) {\n                all++;\n                last = m.index;\n                if (last <= offset)\n                    before++;\n                if (all > MAX_COUNT)\n                    break;\n                if (!m[0]) {\n                    regex.lastIndex = last += 1;\n                    if (last >= value.length)\n                        break;\n                }\n            }\n        }\n        this.searchCounter.textContent = before + \" of \" + (all > MAX_COUNT ? MAX_COUNT + \"+\" : all);\n    };\n    this.findNext = function () {\n        this.find(true, false);\n    };\n    this.findPrev = function () {\n        this.find(true, true);\n    };\n    this.findAll = function () {\n        var range = this.editor.findAll(this.searchInput.value, {\n            regExp: this.regExpOption.checked,\n            caseSensitive: this.caseSensitiveOption.checked,\n            wholeWord: this.wholeWordOption.checked\n        });\n        var noMatch = !range && this.searchInput.value;\n        dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n        this.editor._emit(\"findSearchBox\", { match: !noMatch });\n        this.highlight();\n        this.hide();\n    };\n    this.replace = function () {\n        if (!this.editor.getReadOnly())\n            this.editor.replace(this.replaceInput.value);\n    };\n    this.replaceAndFindNext = function () {\n        if (!this.editor.getReadOnly()) {\n            this.editor.replace(this.replaceInput.value);\n            this.findNext();\n        }\n    };\n    this.replaceAll = function () {\n        if (!this.editor.getReadOnly())\n            this.editor.replaceAll(this.replaceInput.value);\n    };\n    this.hide = function () {\n        this.active = false;\n        this.setSearchRange(null);\n        this.editor.off(\"changeSession\", this.setSession);\n        this.element.style.display = \"none\";\n        this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);\n        this.editor.focus();\n    };\n    this.show = function (value, isReplace) {\n        this.active = true;\n        this.editor.on(\"changeSession\", this.setSession);\n        this.element.style.display = \"\";\n        this.replaceOption.checked = isReplace;\n        if (value)\n            this.searchInput.value = value;\n        this.searchInput.focus();\n        this.searchInput.select();\n        this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);\n        this.$syncOptions(true);\n    };\n    this.isFocused = function () {\n        var el = document.activeElement;\n        return el == this.searchInput || el == this.replaceInput;\n    };\n}).call(SearchBox.prototype);\nexports.SearchBox = SearchBox;\nexports.Search = function (editor, isReplace) {\n    var sb = editor.searchBox || new SearchBox(editor);\n    sb.show(editor.session.getTextRange(), isReplace);\n};\n\n});                (function() {\n                    ace.require([\"ace/ext/searchbox\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-settings_menu.js",
    "content": "ace.define(\"ace/ext/menu_tools/settings_menu.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"#ace_settingsmenu, #kbshortcutmenu {\\n    background-color: #F7F7F7;\\n    color: black;\\n    box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);\\n    padding: 1em 0.5em 2em 1em;\\n    overflow: auto;\\n    position: absolute;\\n    margin: 0;\\n    bottom: 0;\\n    right: 0;\\n    top: 0;\\n    z-index: 9991;\\n    cursor: default;\\n}\\n\\n.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {\\n    box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);\\n    background-color: rgba(255, 255, 255, 0.6);\\n    color: black;\\n}\\n\\n.ace_optionsMenuEntry:hover {\\n    background-color: rgba(100, 100, 100, 0.1);\\n    transition: all 0.3s\\n}\\n\\n.ace_closeButton {\\n    background: rgba(245, 146, 146, 0.5);\\n    border: 1px solid #F48A8A;\\n    border-radius: 50%;\\n    padding: 7px;\\n    position: absolute;\\n    right: -8px;\\n    top: -8px;\\n    z-index: 100000;\\n}\\n.ace_closeButton{\\n    background: rgba(245, 146, 146, 0.9);\\n}\\n.ace_optionsMenuKey {\\n    color: darkslateblue;\\n    font-weight: bold;\\n}\\n.ace_optionsMenuCommand {\\n    color: darkcyan;\\n    font-weight: normal;\\n}\\n.ace_optionsMenuEntry input, .ace_optionsMenuEntry button {\\n    vertical-align: middle;\\n}\\n\\n.ace_optionsMenuEntry button[ace_selected_button=true] {\\n    background: #e7e7e7;\\n    box-shadow: 1px 0px 2px 0px #adadad inset;\\n    border-color: #adadad;\\n}\\n.ace_optionsMenuEntry button {\\n    background: white;\\n    border: 1px solid lightgray;\\n    margin: 0px;\\n}\\n.ace_optionsMenuEntry button:hover{\\n    background: #f0f0f0;\\n}\";\n\n});\n\nace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/ext/menu_tools/settings_menu.css\"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n'use strict';\nvar dom = require(\"../../lib/dom\");\nvar cssText = require(\"./settings_menu.css\");\ndom.importCssString(cssText, \"settings_menu.css\", false);\nmodule.exports.overlayPage = function overlayPage(editor, contentElement, callback) {\n    var closer = document.createElement('div');\n    var ignoreFocusOut = false;\n    function documentEscListener(e) {\n        if (e.keyCode === 27) {\n            close();\n        }\n    }\n    function close() {\n        if (!closer)\n            return;\n        document.removeEventListener('keydown', documentEscListener);\n        closer.parentNode.removeChild(closer);\n        if (editor) {\n            editor.focus();\n        }\n        closer = null;\n        callback && callback();\n    }\n    function setIgnoreFocusOut(ignore) {\n        ignoreFocusOut = ignore;\n        if (ignore) {\n            closer.style.pointerEvents = \"none\";\n            contentElement.style.pointerEvents = \"auto\";\n        }\n    }\n    closer.style.cssText = 'margin: 0; padding: 0; ' +\n        'position: fixed; top:0; bottom:0; left:0; right:0;' +\n        'z-index: 9990; ' +\n        (editor ? 'background-color: rgba(0, 0, 0, 0.3);' : '');\n    closer.addEventListener('click', function (e) {\n        if (!ignoreFocusOut) {\n            close();\n        }\n    });\n    document.addEventListener('keydown', documentEscListener);\n    contentElement.addEventListener('click', function (e) {\n        e.stopPropagation();\n    });\n    closer.appendChild(contentElement);\n    document.body.appendChild(closer);\n    if (editor) {\n        editor.blur();\n    }\n    return {\n        close: close,\n        setIgnoreFocusOut: setIgnoreFocusOut\n    };\n};\n\n});\n\nace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar modes = [];\nfunction getModeForPath(path) {\n    var mode = modesByName.text;\n    var fileName = path.split(/[\\/\\\\]/).pop();\n    for (var i = 0; i < modes.length; i++) {\n        if (modes[i].supportsFile(fileName)) {\n            mode = modes[i];\n            break;\n        }\n    }\n    return mode;\n}\nvar Mode = function (name, caption, extensions) {\n    this.name = name;\n    this.caption = caption;\n    this.mode = \"ace/mode/\" + name;\n    this.extensions = extensions;\n    var re;\n    if (/\\^/.test(extensions)) {\n        re = extensions.replace(/\\|(\\^)?/g, function (a, b) {\n            return \"$|\" + (b ? \"^\" : \"^.*\\\\.\");\n        }) + \"$\";\n    }\n    else {\n        re = \"^.*\\\\.(\" + extensions + \")$\";\n    }\n    this.extRe = new RegExp(re, \"gi\");\n};\nMode.prototype.supportsFile = function (filename) {\n    return filename.match(this.extRe);\n};\nvar supportedModes = {\n    ABAP: [\"abap\"],\n    ABC: [\"abc\"],\n    ActionScript: [\"as\"],\n    ADA: [\"ada|adb\"],\n    Alda: [\"alda\"],\n    Apache_Conf: [\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],\n    Apex: [\"apex|cls|trigger|tgr\"],\n    AQL: [\"aql\"],\n    AsciiDoc: [\"asciidoc|adoc\"],\n    ASL: [\"dsl|asl|asl.json\"],\n    Assembly_x86: [\"asm|a\"],\n    AutoHotKey: [\"ahk\"],\n    BatchFile: [\"bat|cmd\"],\n    BibTeX: [\"bib\"],\n    C_Cpp: [\"cpp|c|cc|cxx|h|hh|hpp|ino\"],\n    C9Search: [\"c9search_results\"],\n    Cirru: [\"cirru|cr\"],\n    Clojure: [\"clj|cljs\"],\n    Cobol: [\"CBL|COB\"],\n    coffee: [\"coffee|cf|cson|^Cakefile\"],\n    ColdFusion: [\"cfm\"],\n    Crystal: [\"cr\"],\n    CSharp: [\"cs\"],\n    Csound_Document: [\"csd\"],\n    Csound_Orchestra: [\"orc\"],\n    Csound_Score: [\"sco\"],\n    CSS: [\"css\"],\n    Curly: [\"curly\"],\n    D: [\"d|di\"],\n    Dart: [\"dart\"],\n    Diff: [\"diff|patch\"],\n    Dockerfile: [\"^Dockerfile\"],\n    Dot: [\"dot\"],\n    Drools: [\"drl\"],\n    Edifact: [\"edi\"],\n    Eiffel: [\"e|ge\"],\n    EJS: [\"ejs\"],\n    Elixir: [\"ex|exs\"],\n    Elm: [\"elm\"],\n    Erlang: [\"erl|hrl\"],\n    Forth: [\"frt|fs|ldr|fth|4th\"],\n    Fortran: [\"f|f90\"],\n    FSharp: [\"fsi|fs|ml|mli|fsx|fsscript\"],\n    FSL: [\"fsl\"],\n    FTL: [\"ftl\"],\n    Gcode: [\"gcode\"],\n    Gherkin: [\"feature\"],\n    Gitignore: [\"^.gitignore\"],\n    Glsl: [\"glsl|frag|vert\"],\n    Gobstones: [\"gbs\"],\n    golang: [\"go\"],\n    GraphQLSchema: [\"gql\"],\n    Groovy: [\"groovy\"],\n    HAML: [\"haml\"],\n    Handlebars: [\"hbs|handlebars|tpl|mustache\"],\n    Haskell: [\"hs\"],\n    Haskell_Cabal: [\"cabal\"],\n    haXe: [\"hx\"],\n    Hjson: [\"hjson\"],\n    HTML: [\"html|htm|xhtml|vue|we|wpy\"],\n    HTML_Elixir: [\"eex|html.eex\"],\n    HTML_Ruby: [\"erb|rhtml|html.erb\"],\n    INI: [\"ini|conf|cfg|prefs\"],\n    Io: [\"io\"],\n    Ion: [\"ion\"],\n    Jack: [\"jack\"],\n    Jade: [\"jade|pug\"],\n    Java: [\"java\"],\n    JavaScript: [\"js|jsm|jsx|cjs|mjs\"],\n    JSON: [\"json\"],\n    JSON5: [\"json5\"],\n    JSONiq: [\"jq\"],\n    JSP: [\"jsp\"],\n    JSSM: [\"jssm|jssm_state\"],\n    JSX: [\"jsx\"],\n    Julia: [\"jl\"],\n    Kotlin: [\"kt|kts\"],\n    LaTeX: [\"tex|latex|ltx|bib\"],\n    Latte: [\"latte\"],\n    LESS: [\"less\"],\n    Liquid: [\"liquid\"],\n    Lisp: [\"lisp\"],\n    LiveScript: [\"ls\"],\n    Log: [\"log\"],\n    LogiQL: [\"logic|lql\"],\n    LSL: [\"lsl\"],\n    Lua: [\"lua\"],\n    LuaPage: [\"lp\"],\n    Lucene: [\"lucene\"],\n    Makefile: [\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],\n    Markdown: [\"md|markdown\"],\n    Mask: [\"mask\"],\n    MATLAB: [\"matlab\"],\n    Maze: [\"mz\"],\n    MediaWiki: [\"wiki|mediawiki\"],\n    MEL: [\"mel\"],\n    MIPS: [\"s|asm\"],\n    MIXAL: [\"mixal\"],\n    MUSHCode: [\"mc|mush\"],\n    MySQL: [\"mysql\"],\n    Nginx: [\"nginx|conf\"],\n    Nim: [\"nim\"],\n    Nix: [\"nix\"],\n    NSIS: [\"nsi|nsh\"],\n    Nunjucks: [\"nunjucks|nunjs|nj|njk\"],\n    ObjectiveC: [\"m|mm\"],\n    OCaml: [\"ml|mli\"],\n    PartiQL: [\"partiql|pql\"],\n    Pascal: [\"pas|p\"],\n    Perl: [\"pl|pm\"],\n    pgSQL: [\"pgsql\"],\n    PHP_Laravel_blade: [\"blade.php\"],\n    PHP: [\"php|inc|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module\"],\n    Pig: [\"pig\"],\n    Powershell: [\"ps1\"],\n    Praat: [\"praat|praatscript|psc|proc\"],\n    Prisma: [\"prisma\"],\n    Prolog: [\"plg|prolog\"],\n    Properties: [\"properties\"],\n    Protobuf: [\"proto\"],\n    Puppet: [\"epp|pp\"],\n    Python: [\"py\"],\n    QML: [\"qml\"],\n    R: [\"r\"],\n    Raku: [\"raku|rakumod|rakutest|p6|pl6|pm6\"],\n    Razor: [\"cshtml|asp\"],\n    RDoc: [\"Rd\"],\n    Red: [\"red|reds\"],\n    RHTML: [\"Rhtml\"],\n    Robot: [\"robot|resource\"],\n    RST: [\"rst\"],\n    Ruby: [\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],\n    Rust: [\"rs\"],\n    SaC: [\"sac\"],\n    SASS: [\"sass\"],\n    SCAD: [\"scad\"],\n    Scala: [\"scala|sbt\"],\n    Scheme: [\"scm|sm|rkt|oak|scheme\"],\n    Scrypt: [\"scrypt\"],\n    SCSS: [\"scss\"],\n    SH: [\"sh|bash|^.bashrc\"],\n    SJS: [\"sjs\"],\n    Slim: [\"slim|skim\"],\n    Smarty: [\"smarty|tpl\"],\n    Smithy: [\"smithy\"],\n    snippets: [\"snippets\"],\n    Soy_Template: [\"soy\"],\n    Space: [\"space\"],\n    SQL: [\"sql\"],\n    SQLServer: [\"sqlserver\"],\n    Stylus: [\"styl|stylus\"],\n    SVG: [\"svg\"],\n    Swift: [\"swift\"],\n    Tcl: [\"tcl\"],\n    Terraform: [\"tf\", \"tfvars\", \"terragrunt\"],\n    Tex: [\"tex\"],\n    Text: [\"txt\"],\n    Textile: [\"textile\"],\n    Toml: [\"toml\"],\n    TSX: [\"tsx\"],\n    Twig: [\"twig|swig\"],\n    Typescript: [\"ts|typescript|str\"],\n    Vala: [\"vala\"],\n    VBScript: [\"vbs|vb\"],\n    Velocity: [\"vm\"],\n    Verilog: [\"v|vh|sv|svh\"],\n    VHDL: [\"vhd|vhdl\"],\n    Visualforce: [\"vfp|component|page\"],\n    Wollok: [\"wlk|wpgm|wtest\"],\n    XML: [\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],\n    XQuery: [\"xq\"],\n    YAML: [\"yaml|yml\"],\n    Zeek: [\"zeek|bro\"],\n    Django: [\"html\"]\n};\nvar nameOverrides = {\n    ObjectiveC: \"Objective-C\",\n    CSharp: \"C#\",\n    golang: \"Go\",\n    C_Cpp: \"C and C++\",\n    Csound_Document: \"Csound Document\",\n    Csound_Orchestra: \"Csound\",\n    Csound_Score: \"Csound Score\",\n    coffee: \"CoffeeScript\",\n    HTML_Ruby: \"HTML (Ruby)\",\n    HTML_Elixir: \"HTML (Elixir)\",\n    FTL: \"FreeMarker\",\n    PHP_Laravel_blade: \"PHP (Blade Template)\",\n    Perl6: \"Perl 6\",\n    AutoHotKey: \"AutoHotkey / AutoIt\"\n};\nvar modesByName = {};\nfor (var name in supportedModes) {\n    var data = supportedModes[name];\n    var displayName = (nameOverrides[name] || name).replace(/_/g, \" \");\n    var filename = name.toLowerCase();\n    var mode = new Mode(filename, displayName, data[0]);\n    modesByName[filename] = mode;\n    modes.push(mode);\n}\nmodule.exports = {\n    getModeForPath: getModeForPath,\n    modes: modes,\n    modesByName: modesByName\n};\n\n});\n\nace.define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/**\n * Generates a list of themes available when ace was built.\n * @fileOverview Generates a list of themes available when ace was built.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n */\n\"use strict\";\nvar themeData = [\n    [\"Chrome\"],\n    [\"Clouds\"],\n    [\"Crimson Editor\"],\n    [\"Dawn\"],\n    [\"Dreamweaver\"],\n    [\"Eclipse\"],\n    [\"GitHub\"],\n    [\"IPlastic\"],\n    [\"Solarized Light\"],\n    [\"TextMate\"],\n    [\"Tomorrow\"],\n    [\"XCode\"],\n    [\"Kuroir\"],\n    [\"KatzenMilch\"],\n    [\"SQL Server\", \"sqlserver\", \"light\"],\n    [\"Ambiance\", \"ambiance\", \"dark\"],\n    [\"Chaos\", \"chaos\", \"dark\"],\n    [\"Clouds Midnight\", \"clouds_midnight\", \"dark\"],\n    [\"Dracula\", \"\", \"dark\"],\n    [\"Cobalt\", \"cobalt\", \"dark\"],\n    [\"Gruvbox\", \"gruvbox\", \"dark\"],\n    [\"Green on Black\", \"gob\", \"dark\"],\n    [\"idle Fingers\", \"idle_fingers\", \"dark\"],\n    [\"krTheme\", \"kr_theme\", \"dark\"],\n    [\"Merbivore\", \"merbivore\", \"dark\"],\n    [\"Merbivore Soft\", \"merbivore_soft\", \"dark\"],\n    [\"Mono Industrial\", \"mono_industrial\", \"dark\"],\n    [\"Monokai\", \"monokai\", \"dark\"],\n    [\"Nord Dark\", \"nord_dark\", \"dark\"],\n    [\"One Dark\", \"one_dark\", \"dark\"],\n    [\"Pastel on dark\", \"pastel_on_dark\", \"dark\"],\n    [\"Solarized Dark\", \"solarized_dark\", \"dark\"],\n    [\"Terminal\", \"terminal\", \"dark\"],\n    [\"Tomorrow Night\", \"tomorrow_night\", \"dark\"],\n    [\"Tomorrow Night Blue\", \"tomorrow_night_blue\", \"dark\"],\n    [\"Tomorrow Night Bright\", \"tomorrow_night_bright\", \"dark\"],\n    [\"Tomorrow Night 80s\", \"tomorrow_night_eighties\", \"dark\"],\n    [\"Twilight\", \"twilight\", \"dark\"],\n    [\"Vibrant Ink\", \"vibrant_ink\", \"dark\"]\n];\nexports.themesByName = {};\nexports.themes = themeData.map(function (data) {\n    var name = data[1] || data[0].replace(/ /g, \"_\").toLowerCase();\n    var theme = {\n        caption: data[0],\n        theme: \"ace/theme/\" + name,\n        isDark: data[2] == \"dark\",\n        name: name\n    };\n    exports.themesByName[name] = theme;\n    return theme;\n});\n\n});\n\nace.define(\"ace/ext/options\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/overlay_page\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/ext/modelist\",\"ace/ext/themelist\"], function(require, exports, module){\"use strict\";\nrequire(\"./menu_tools/overlay_page\");\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar config = require(\"../config\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar buildDom = dom.buildDom;\nvar modelist = require(\"./modelist\");\nvar themelist = require(\"./themelist\");\nvar themes = { Bright: [], Dark: [] };\nthemelist.themes.forEach(function (x) {\n    themes[x.isDark ? \"Dark\" : \"Bright\"].push({ caption: x.caption, value: x.theme });\n});\nvar modes = modelist.modes.map(function (x) {\n    return { caption: x.caption, value: x.mode };\n});\nvar optionGroups = {\n    Main: {\n        Mode: {\n            path: \"mode\",\n            type: \"select\",\n            items: modes\n        },\n        Theme: {\n            path: \"theme\",\n            type: \"select\",\n            items: themes\n        },\n        \"Keybinding\": {\n            type: \"buttonBar\",\n            path: \"keyboardHandler\",\n            items: [\n                { caption: \"Ace\", value: null },\n                { caption: \"Vim\", value: \"ace/keyboard/vim\" },\n                { caption: \"Emacs\", value: \"ace/keyboard/emacs\" },\n                { caption: \"Sublime\", value: \"ace/keyboard/sublime\" },\n                { caption: \"VSCode\", value: \"ace/keyboard/vscode\" }\n            ]\n        },\n        \"Font Size\": {\n            path: \"fontSize\",\n            type: \"number\",\n            defaultValue: 12,\n            defaults: [\n                { caption: \"12px\", value: 12 },\n                { caption: \"24px\", value: 24 }\n            ]\n        },\n        \"Soft Wrap\": {\n            type: \"buttonBar\",\n            path: \"wrap\",\n            items: [\n                { caption: \"Off\", value: \"off\" },\n                { caption: \"View\", value: \"free\" },\n                { caption: \"margin\", value: \"printMargin\" },\n                { caption: \"40\", value: \"40\" }\n            ]\n        },\n        \"Cursor Style\": {\n            path: \"cursorStyle\",\n            items: [\n                { caption: \"Ace\", value: \"ace\" },\n                { caption: \"Slim\", value: \"slim\" },\n                { caption: \"Smooth\", value: \"smooth\" },\n                { caption: \"Smooth And Slim\", value: \"smooth slim\" },\n                { caption: \"Wide\", value: \"wide\" }\n            ]\n        },\n        \"Folding\": {\n            path: \"foldStyle\",\n            items: [\n                { caption: \"Manual\", value: \"manual\" },\n                { caption: \"Mark begin\", value: \"markbegin\" },\n                { caption: \"Mark begin and end\", value: \"markbeginend\" }\n            ]\n        },\n        \"Soft Tabs\": [{\n                path: \"useSoftTabs\"\n            }, {\n                ariaLabel: \"Tab Size\",\n                path: \"tabSize\",\n                type: \"number\",\n                values: [2, 3, 4, 8, 16]\n            }],\n        \"Overscroll\": {\n            type: \"buttonBar\",\n            path: \"scrollPastEnd\",\n            items: [\n                { caption: \"None\", value: 0 },\n                { caption: \"Half\", value: 0.5 },\n                { caption: \"Full\", value: 1 }\n            ]\n        }\n    },\n    More: {\n        \"Atomic soft tabs\": {\n            path: \"navigateWithinSoftTabs\"\n        },\n        \"Enable Behaviours\": {\n            path: \"behavioursEnabled\"\n        },\n        \"Wrap with quotes\": {\n            path: \"wrapBehavioursEnabled\"\n        },\n        \"Enable Auto Indent\": {\n            path: \"enableAutoIndent\"\n        },\n        \"Full Line Selection\": {\n            type: \"checkbox\",\n            values: \"text|line\",\n            path: \"selectionStyle\"\n        },\n        \"Highlight Active Line\": {\n            path: \"highlightActiveLine\"\n        },\n        \"Show Invisibles\": {\n            path: \"showInvisibles\"\n        },\n        \"Show Indent Guides\": {\n            path: \"displayIndentGuides\"\n        },\n        \"Highlight Indent Guides\": {\n            path: \"highlightIndentGuides\"\n        },\n        \"Persistent HScrollbar\": {\n            path: \"hScrollBarAlwaysVisible\"\n        },\n        \"Persistent VScrollbar\": {\n            path: \"vScrollBarAlwaysVisible\"\n        },\n        \"Animate scrolling\": {\n            path: \"animatedScroll\"\n        },\n        \"Show Gutter\": {\n            path: \"showGutter\"\n        },\n        \"Show Line Numbers\": {\n            path: \"showLineNumbers\"\n        },\n        \"Relative Line Numbers\": {\n            path: \"relativeLineNumbers\"\n        },\n        \"Fixed Gutter Width\": {\n            path: \"fixedWidthGutter\"\n        },\n        \"Show Print Margin\": [{\n                path: \"showPrintMargin\"\n            }, {\n                ariaLabel: \"Print Margin\",\n                type: \"number\",\n                path: \"printMarginColumn\"\n            }],\n        \"Indented Soft Wrap\": {\n            path: \"indentedSoftWrap\"\n        },\n        \"Highlight selected word\": {\n            path: \"highlightSelectedWord\"\n        },\n        \"Fade Fold Widgets\": {\n            path: \"fadeFoldWidgets\"\n        },\n        \"Use textarea for IME\": {\n            path: \"useTextareaForIME\"\n        },\n        \"Merge Undo Deltas\": {\n            path: \"mergeUndoDeltas\",\n            items: [\n                { caption: \"Always\", value: \"always\" },\n                { caption: \"Never\", value: \"false\" },\n                { caption: \"Timed\", value: \"true\" }\n            ]\n        },\n        \"Elastic Tabstops\": {\n            path: \"useElasticTabstops\"\n        },\n        \"Incremental Search\": {\n            path: \"useIncrementalSearch\"\n        },\n        \"Read-only\": {\n            path: \"readOnly\"\n        },\n        \"Copy without selection\": {\n            path: \"copyWithEmptySelection\"\n        },\n        \"Live Autocompletion\": {\n            path: \"enableLiveAutocompletion\"\n        },\n        \"Custom scrollbar\": {\n            path: \"customScrollbar\"\n        }\n    }\n};\nvar OptionPanel = function (editor, element) {\n    this.editor = editor;\n    this.container = element || document.createElement(\"div\");\n    this.groups = [];\n    this.options = {};\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.add = function (config) {\n        if (config.Main)\n            oop.mixin(optionGroups.Main, config.Main);\n        if (config.More)\n            oop.mixin(optionGroups.More, config.More);\n    };\n    this.render = function () {\n        this.container.innerHTML = \"\";\n        buildDom([\"table\", { role: \"presentation\", id: \"controls\" },\n            this.renderOptionGroup(optionGroups.Main),\n            [\"tr\", null, [\"td\", { colspan: 2 },\n                    [\"table\", { role: \"presentation\", id: \"more-controls\" },\n                        this.renderOptionGroup(optionGroups.More)\n                    ]\n                ]],\n            [\"tr\", null, [\"td\", { colspan: 2 }, \"version \" + config.version]]\n        ], this.container);\n    };\n    this.renderOptionGroup = function (group) {\n        return Object.keys(group).map(function (key, i) {\n            var item = group[key];\n            if (!item.position)\n                item.position = i / 10000;\n            if (!item.label)\n                item.label = key;\n            return item;\n        }).sort(function (a, b) {\n            return a.position - b.position;\n        }).map(function (item) {\n            return this.renderOption(item.label, item);\n        }, this);\n    };\n    this.renderOptionControl = function (key, option) {\n        var self = this;\n        if (Array.isArray(option)) {\n            return option.map(function (x) {\n                return self.renderOptionControl(key, x);\n            });\n        }\n        var control;\n        var value = self.getOption(option);\n        if (option.values && option.type != \"checkbox\") {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            option.items = option.values.map(function (v) {\n                return { value: v, name: v };\n            });\n        }\n        if (option.type == \"buttonBar\") {\n            control = [\"div\", { role: \"group\", \"aria-labelledby\": option.path + \"-label\" }, option.items.map(function (item) {\n                    return [\"button\", {\n                            value: item.value,\n                            ace_selected_button: value == item.value,\n                            'aria-pressed': value == item.value,\n                            onclick: function () {\n                                self.setOption(option, item.value);\n                                var nodes = this.parentNode.querySelectorAll(\"[ace_selected_button]\");\n                                for (var i = 0; i < nodes.length; i++) {\n                                    nodes[i].removeAttribute(\"ace_selected_button\");\n                                    nodes[i].setAttribute(\"aria-pressed\", false);\n                                }\n                                this.setAttribute(\"ace_selected_button\", true);\n                                this.setAttribute(\"aria-pressed\", true);\n                            }\n                        }, item.desc || item.caption || item.name];\n                })];\n        }\n        else if (option.type == \"number\") {\n            control = [\"input\", { type: \"number\", value: value || option.defaultValue, style: \"width:3em\", oninput: function () {\n                        self.setOption(option, parseInt(this.value));\n                    } }];\n            if (option.ariaLabel) {\n                control[1][\"aria-label\"] = option.ariaLabel;\n            }\n            else {\n                control[1].id = key;\n            }\n            if (option.defaults) {\n                control = [control, option.defaults.map(function (item) {\n                        return [\"button\", { onclick: function () {\n                                    var input = this.parentNode.firstChild;\n                                    input.value = item.value;\n                                    input.oninput();\n                                } }, item.caption];\n                    })];\n            }\n        }\n        else if (option.items) {\n            var buildItems = function (items) {\n                return items.map(function (item) {\n                    return [\"option\", { value: item.value || item.name }, item.desc || item.caption || item.name];\n                });\n            };\n            var items = Array.isArray(option.items)\n                ? buildItems(option.items)\n                : Object.keys(option.items).map(function (key) {\n                    return [\"optgroup\", { \"label\": key }, buildItems(option.items[key])];\n                });\n            control = [\"select\", { id: key, value: value, onchange: function () {\n                        self.setOption(option, this.value);\n                    } }, items];\n        }\n        else {\n            if (typeof option.values == \"string\")\n                option.values = option.values.split(\"|\");\n            if (option.values)\n                value = value == option.values[1];\n            control = [\"input\", { type: \"checkbox\", id: key, checked: value || null, onchange: function () {\n                        var value = this.checked;\n                        if (option.values)\n                            value = option.values[value ? 1 : 0];\n                        self.setOption(option, value);\n                    } }];\n            if (option.type == \"checkedNumber\") {\n                control = [control, []];\n            }\n        }\n        return control;\n    };\n    this.renderOption = function (key, option) {\n        if (option.path && !option.onchange && !this.editor.$options[option.path])\n            return;\n        var path = Array.isArray(option) ? option[0].path : option.path;\n        this.options[path] = option;\n        var safeKey = \"-\" + path;\n        var safeId = path + \"-label\";\n        var control = this.renderOptionControl(safeKey, option);\n        return [\"tr\", { class: \"ace_optionsMenuEntry\" }, [\"td\",\n                [\"label\", { for: safeKey, id: safeId }, key]\n            ], [\"td\", control]];\n    };\n    this.setOption = function (option, value) {\n        if (typeof option == \"string\")\n            option = this.options[option];\n        if (value == \"false\")\n            value = false;\n        if (value == \"true\")\n            value = true;\n        if (value == \"null\")\n            value = null;\n        if (value == \"undefined\")\n            value = undefined;\n        if (typeof value == \"string\" && parseFloat(value).toString() == value)\n            value = parseFloat(value);\n        if (option.onchange)\n            option.onchange(value);\n        else if (option.path)\n            this.editor.setOption(option.path, value);\n        this._signal(\"setOption\", { name: option.path, value: value });\n    };\n    this.getOption = function (option) {\n        if (option.getValue)\n            return option.getValue();\n        return this.editor.getOption(option.path);\n    };\n}).call(OptionPanel.prototype);\nexports.OptionPanel = OptionPanel;\n\n});\n\nace.define(\"ace/ext/settings_menu\",[\"require\",\"exports\",\"module\",\"ace/ext/options\",\"ace/ext/menu_tools/overlay_page\",\"ace/editor\"], function(require, exports, module){/*jslint indent: 4, maxerr: 50, white: true, browser: true, vars: true*/\n\"use strict\";\nvar OptionPanel = require(\"./options\").OptionPanel;\nvar overlayPage = require('./menu_tools/overlay_page').overlayPage;\nfunction showSettingsMenu(editor) {\n    if (!document.getElementById('ace_settingsmenu')) {\n        var options = new OptionPanel(editor);\n        options.render();\n        options.container.id = \"ace_settingsmenu\";\n        overlayPage(editor, options.container);\n        options.container.querySelector(\"select,input,button,checkbox\").focus();\n    }\n}\nmodule.exports.init = function () {\n    var Editor = require(\"../editor\").Editor;\n    Editor.prototype.showSettingsMenu = function () {\n        showSettingsMenu(this);\n    };\n};\n\n});                (function() {\n                    ace.require([\"ace/ext/settings_menu\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-spellcheck.js",
    "content": "ace.define(\"ace/ext/spellcheck\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/editor\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nexports.contextMenuHandler = function (e) {\n    var host = e.target;\n    var text = host.textInput.getElement();\n    if (!host.selection.isEmpty())\n        return;\n    var c = host.getCursorPosition();\n    var r = host.session.getWordRange(c.row, c.column);\n    var w = host.session.getTextRange(r);\n    host.session.tokenRe.lastIndex = 0;\n    if (!host.session.tokenRe.test(w))\n        return;\n    var PLACEHOLDER = \"\\x01\\x01\";\n    var value = w + \" \" + PLACEHOLDER;\n    text.value = value;\n    text.setSelectionRange(w.length, w.length + 1);\n    text.setSelectionRange(0, 0);\n    text.setSelectionRange(0, w.length);\n    var afterKeydown = false;\n    event.addListener(text, \"keydown\", function onKeydown() {\n        event.removeListener(text, \"keydown\", onKeydown);\n        afterKeydown = true;\n    });\n    host.textInput.setInputHandler(function (newVal) {\n        if (newVal == value)\n            return '';\n        if (newVal.lastIndexOf(value, 0) === 0)\n            return newVal.slice(value.length);\n        if (newVal.substr(text.selectionEnd) == value)\n            return newVal.slice(0, -value.length);\n        if (newVal.slice(-2) == PLACEHOLDER) {\n            var val = newVal.slice(0, -2);\n            if (val.slice(-1) == \" \") {\n                if (afterKeydown)\n                    return val.substring(0, text.selectionEnd);\n                val = val.slice(0, -1);\n                host.session.replace(r, val);\n                return \"\";\n            }\n        }\n        return newVal;\n    });\n};\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    spellcheck: {\n        set: function (val) {\n            var text = this.textInput.getElement();\n            text.spellcheck = !!val;\n            if (!val)\n                this.removeListener(\"nativecontextmenu\", exports.contextMenuHandler);\n            else\n                this.on(\"nativecontextmenu\", exports.contextMenuHandler);\n        },\n        value: true\n    }\n});\n\n});                (function() {\n                    ace.require([\"ace/ext/spellcheck\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-split.js",
    "content": "ace.define(\"ace/split\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/edit_session\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Editor = require(\"./editor\").Editor;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Split = function (container, theme, splits) {\n    this.BELOW = 1;\n    this.BESIDE = 0;\n    this.$container = container;\n    this.$theme = theme;\n    this.$splits = 0;\n    this.$editorCSS = \"\";\n    this.$editors = [];\n    this.$orientation = this.BESIDE;\n    this.setSplits(splits || 1);\n    this.$cEditor = this.$editors[0];\n    this.on(\"focus\", function (editor) {\n        this.$cEditor = editor;\n    }.bind(this));\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.$createEditor = function () {\n        var el = document.createElement(\"div\");\n        el.className = this.$editorCSS;\n        el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n        this.$container.appendChild(el);\n        var editor = new Editor(new Renderer(el, this.$theme));\n        editor.on(\"focus\", function () {\n            this._emit(\"focus\", editor);\n        }.bind(this));\n        this.$editors.push(editor);\n        editor.setFontSize(this.$fontSize);\n        return editor;\n    };\n    this.setSplits = function (splits) {\n        var editor;\n        if (splits < 1) {\n            throw \"The number of splits have to be > 0!\";\n        }\n        if (splits == this.$splits) {\n            return;\n        }\n        else if (splits > this.$splits) {\n            while (this.$splits < this.$editors.length && this.$splits < splits) {\n                editor = this.$editors[this.$splits];\n                this.$container.appendChild(editor.container);\n                editor.setFontSize(this.$fontSize);\n                this.$splits++;\n            }\n            while (this.$splits < splits) {\n                this.$createEditor();\n                this.$splits++;\n            }\n        }\n        else {\n            while (this.$splits > splits) {\n                editor = this.$editors[this.$splits - 1];\n                this.$container.removeChild(editor.container);\n                this.$splits--;\n            }\n        }\n        this.resize();\n    };\n    this.getSplits = function () {\n        return this.$splits;\n    };\n    this.getEditor = function (idx) {\n        return this.$editors[idx];\n    };\n    this.getCurrentEditor = function () {\n        return this.$cEditor;\n    };\n    this.focus = function () {\n        this.$cEditor.focus();\n    };\n    this.blur = function () {\n        this.$cEditor.blur();\n    };\n    this.setTheme = function (theme) {\n        this.$editors.forEach(function (editor) {\n            editor.setTheme(theme);\n        });\n    };\n    this.setKeyboardHandler = function (keybinding) {\n        this.$editors.forEach(function (editor) {\n            editor.setKeyboardHandler(keybinding);\n        });\n    };\n    this.forEach = function (callback, scope) {\n        this.$editors.forEach(callback, scope);\n    };\n    this.$fontSize = \"\";\n    this.setFontSize = function (size) {\n        this.$fontSize = size;\n        this.forEach(function (editor) {\n            editor.setFontSize(size);\n        });\n    };\n    this.$cloneSession = function (session) {\n        var s = new EditSession(session.getDocument(), session.getMode());\n        var undoManager = session.getUndoManager();\n        s.setUndoManager(undoManager);\n        s.setTabSize(session.getTabSize());\n        s.setUseSoftTabs(session.getUseSoftTabs());\n        s.setOverwrite(session.getOverwrite());\n        s.setBreakpoints(session.getBreakpoints());\n        s.setUseWrapMode(session.getUseWrapMode());\n        s.setUseWorker(session.getUseWorker());\n        s.setWrapLimitRange(session.$wrapLimitRange.min, session.$wrapLimitRange.max);\n        s.$foldData = session.$cloneFoldData();\n        return s;\n    };\n    this.setSession = function (session, idx) {\n        var editor;\n        if (idx == null) {\n            editor = this.$cEditor;\n        }\n        else {\n            editor = this.$editors[idx];\n        }\n        var isUsed = this.$editors.some(function (editor) {\n            return editor.session === session;\n        });\n        if (isUsed) {\n            session = this.$cloneSession(session);\n        }\n        editor.setSession(session);\n        return session;\n    };\n    this.getOrientation = function () {\n        return this.$orientation;\n    };\n    this.setOrientation = function (orientation) {\n        if (this.$orientation == orientation) {\n            return;\n        }\n        this.$orientation = orientation;\n        this.resize();\n    };\n    this.resize = function () {\n        var width = this.$container.clientWidth;\n        var height = this.$container.clientHeight;\n        var editor;\n        if (this.$orientation == this.BESIDE) {\n            var editorWidth = width / this.$splits;\n            for (var i = 0; i < this.$splits; i++) {\n                editor = this.$editors[i];\n                editor.container.style.width = editorWidth + \"px\";\n                editor.container.style.top = \"0px\";\n                editor.container.style.left = i * editorWidth + \"px\";\n                editor.container.style.height = height + \"px\";\n                editor.resize();\n            }\n        }\n        else {\n            var editorHeight = height / this.$splits;\n            for (var i = 0; i < this.$splits; i++) {\n                editor = this.$editors[i];\n                editor.container.style.width = width + \"px\";\n                editor.container.style.top = i * editorHeight + \"px\";\n                editor.container.style.left = \"0px\";\n                editor.container.style.height = editorHeight + \"px\";\n                editor.resize();\n            }\n        }\n    };\n}).call(Split.prototype);\nexports.Split = Split;\n\n});\n\nace.define(\"ace/ext/split\",[\"require\",\"exports\",\"module\",\"ace/split\"], function(require, exports, module){\"use strict\";\nmodule.exports = require(\"../split\");\n\n});                (function() {\n                    ace.require([\"ace/ext/split\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-static_highlight.js",
    "content": "ace.define(\"ace/ext/static.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace_static_highlight {\\n    font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', 'Droid Sans Mono', monospace;\\n    font-size: 12px;\\n    white-space: pre-wrap\\n}\\n\\n.ace_static_highlight .ace_gutter {\\n    width: 2em;\\n    text-align: right;\\n    padding: 0 3px 0 0;\\n    margin-right: 3px;\\n    contain: none;\\n}\\n\\n.ace_static_highlight.ace_show_gutter .ace_line {\\n    padding-left: 2.6em;\\n}\\n\\n.ace_static_highlight .ace_line { position: relative; }\\n\\n.ace_static_highlight .ace_gutter-cell {\\n    -moz-user-select: -moz-none;\\n    -khtml-user-select: none;\\n    -webkit-user-select: none;\\n    user-select: none;\\n    top: 0;\\n    bottom: 0;\\n    left: 0;\\n    position: absolute;\\n}\\n\\n\\n.ace_static_highlight .ace_gutter-cell:before {\\n    content: counter(ace_line, decimal);\\n    counter-increment: ace_line;\\n}\\n.ace_static_highlight {\\n    counter-reset: ace_line;\\n}\\n\";\n\n});\n\nace.define(\"ace/ext/static_highlight\",[\"require\",\"exports\",\"module\",\"ace/edit_session\",\"ace/layer/text\",\"ace/ext/static.css\",\"ace/config\",\"ace/lib/dom\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar EditSession = require(\"../edit_session\").EditSession;\nvar TextLayer = require(\"../layer/text\").Text;\nvar baseStyles = require(\"./static.css\");\nvar config = require(\"../config\");\nvar dom = require(\"../lib/dom\");\nvar escapeHTML = require(\"../lib/lang\").escapeHTML;\nfunction Element(type) {\n    this.type = type;\n    this.style = {};\n    this.textContent = \"\";\n}\nElement.prototype.cloneNode = function () {\n    return this;\n};\nElement.prototype.appendChild = function (child) {\n    this.textContent += child.toString();\n};\nElement.prototype.toString = function () {\n    var stringBuilder = [];\n    if (this.type != \"fragment\") {\n        stringBuilder.push(\"<\", this.type);\n        if (this.className)\n            stringBuilder.push(\" class='\", this.className, \"'\");\n        var styleStr = [];\n        for (var key in this.style) {\n            styleStr.push(key, \":\", this.style[key]);\n        }\n        if (styleStr.length)\n            stringBuilder.push(\" style='\", styleStr.join(\"\"), \"'\");\n        stringBuilder.push(\">\");\n    }\n    if (this.textContent) {\n        stringBuilder.push(this.textContent);\n    }\n    if (this.type != \"fragment\") {\n        stringBuilder.push(\"</\", this.type, \">\");\n    }\n    return stringBuilder.join(\"\");\n};\nvar simpleDom = {\n    createTextNode: function (textContent, element) {\n        return escapeHTML(textContent);\n    },\n    createElement: function (type) {\n        return new Element(type);\n    },\n    createFragment: function () {\n        return new Element(\"fragment\");\n    }\n};\nvar SimpleTextLayer = function () {\n    this.config = {};\n    this.dom = simpleDom;\n};\nSimpleTextLayer.prototype = TextLayer.prototype;\nvar highlight = function (el, opts, callback) {\n    var m = el.className.match(/lang-(\\w+)/);\n    var mode = opts.mode || m && (\"ace/mode/\" + m[1]);\n    if (!mode)\n        return false;\n    var theme = opts.theme || \"ace/theme/textmate\";\n    var data = \"\";\n    var nodes = [];\n    if (el.firstElementChild) {\n        var textLen = 0;\n        for (var i = 0; i < el.childNodes.length; i++) {\n            var ch = el.childNodes[i];\n            if (ch.nodeType == 3) {\n                textLen += ch.data.length;\n                data += ch.data;\n            }\n            else {\n                nodes.push(textLen, ch);\n            }\n        }\n    }\n    else {\n        data = el.textContent;\n        if (opts.trim)\n            data = data.trim();\n    }\n    highlight.render(data, mode, theme, opts.firstLineNumber, !opts.showGutter, function (highlighted) {\n        dom.importCssString(highlighted.css, \"ace_highlight\");\n        el.innerHTML = highlighted.html;\n        var container = el.firstChild.firstChild;\n        for (var i = 0; i < nodes.length; i += 2) {\n            var pos = highlighted.session.doc.indexToPosition(nodes[i]);\n            var node = nodes[i + 1];\n            var lineEl = container.children[pos.row];\n            lineEl && lineEl.appendChild(node);\n        }\n        callback && callback();\n    });\n};\nhighlight.render = function (input, mode, theme, lineStart, disableGutter, callback) {\n    var waiting = 1;\n    var modeCache = EditSession.prototype.$modes;\n    if (typeof theme == \"string\") {\n        waiting++;\n        config.loadModule(['theme', theme], function (m) {\n            theme = m;\n            --waiting || done();\n        });\n    }\n    var modeOptions;\n    if (mode && typeof mode === \"object\" && !mode.getTokenizer) {\n        modeOptions = mode;\n        mode = modeOptions.path;\n    }\n    if (typeof mode == \"string\") {\n        waiting++;\n        config.loadModule(['mode', mode], function (m) {\n            if (!modeCache[mode] || modeOptions)\n                modeCache[mode] = new m.Mode(modeOptions);\n            mode = modeCache[mode];\n            --waiting || done();\n        });\n    }\n    function done() {\n        var result = highlight.renderSync(input, mode, theme, lineStart, disableGutter);\n        return callback ? callback(result) : result;\n    }\n    return --waiting || done();\n};\nhighlight.renderSync = function (input, mode, theme, lineStart, disableGutter) {\n    lineStart = parseInt(lineStart || 1, 10);\n    var session = new EditSession(\"\");\n    session.setUseWorker(false);\n    session.setMode(mode);\n    var textLayer = new SimpleTextLayer();\n    textLayer.setSession(session);\n    Object.keys(textLayer.$tabStrings).forEach(function (k) {\n        if (typeof textLayer.$tabStrings[k] == \"string\") {\n            var el = simpleDom.createFragment();\n            el.textContent = textLayer.$tabStrings[k];\n            textLayer.$tabStrings[k] = el;\n        }\n    });\n    session.setValue(input);\n    var length = session.getLength();\n    var outerEl = simpleDom.createElement(\"div\");\n    outerEl.className = theme.cssClass;\n    var innerEl = simpleDom.createElement(\"div\");\n    innerEl.className = \"ace_static_highlight\" + (disableGutter ? \"\" : \" ace_show_gutter\");\n    innerEl.style[\"counter-reset\"] = \"ace_line \" + (lineStart - 1);\n    for (var ix = 0; ix < length; ix++) {\n        var lineEl = simpleDom.createElement(\"div\");\n        lineEl.className = \"ace_line\";\n        if (!disableGutter) {\n            var gutterEl = simpleDom.createElement(\"span\");\n            gutterEl.className = \"ace_gutter ace_gutter-cell\";\n            gutterEl.textContent = \"\";\n            lineEl.appendChild(gutterEl);\n        }\n        textLayer.$renderLine(lineEl, ix, false);\n        lineEl.textContent += \"\\n\";\n        innerEl.appendChild(lineEl);\n    }\n    outerEl.appendChild(innerEl);\n    return {\n        css: baseStyles + theme.cssText,\n        html: outerEl.toString(),\n        session: session\n    };\n};\nmodule.exports = highlight;\nmodule.exports.highlight = highlight;\n\n});                (function() {\n                    ace.require([\"ace/ext/static_highlight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-statusbar.js",
    "content": "ace.define(\"ace/ext/statusbar\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar StatusBar = function (editor, parentNode) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_status-indicator\";\n    this.element.style.cssText = \"display: inline-block;\";\n    parentNode.appendChild(this.element);\n    var statusUpdate = lang.delayedCall(function () {\n        this.updateStatus(editor);\n    }.bind(this)).schedule.bind(null, 100);\n    editor.on(\"changeStatus\", statusUpdate);\n    editor.on(\"changeSelection\", statusUpdate);\n    editor.on(\"keyboardActivity\", statusUpdate);\n};\n(function () {\n    this.updateStatus = function (editor) {\n        var status = [];\n        function add(str, separator) {\n            str && status.push(str, separator || \"|\");\n        }\n        add(editor.keyBinding.getStatusText(editor));\n        if (editor.commands.recording)\n            add(\"REC\");\n        var sel = editor.selection;\n        var c = sel.lead;\n        if (!sel.isEmpty()) {\n            var r = editor.getSelectionRange();\n            add(\"(\" + (r.end.row - r.start.row) + \":\" + (r.end.column - r.start.column) + \")\", \" \");\n        }\n        add(c.row + \":\" + c.column, \" \");\n        if (sel.rangeCount)\n            add(\"[\" + sel.rangeCount + \"]\", \" \");\n        status.pop();\n        this.element.textContent = status.join(\"\");\n    };\n}).call(StatusBar.prototype);\nexports.StatusBar = StatusBar;\n\n});                (function() {\n                    ace.require([\"ace/ext/statusbar\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-textarea.js",
    "content": "ace.define(\"ace/ext/textarea\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/net\",\"ace/ace\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar UA = require(\"../lib/useragent\");\nvar net = require(\"../lib/net\");\nvar ace = require(\"../ace\");\nmodule.exports = exports = ace;\nvar getCSSProperty = function (element, container, property) {\n    var ret = element.style[property];\n    if (!ret) {\n        if (window.getComputedStyle) {\n            ret = window.getComputedStyle(element, '').getPropertyValue(property);\n        }\n        else {\n            ret = element.currentStyle[property];\n        }\n    }\n    if (!ret || ret == 'auto' || ret == 'intrinsic') {\n        ret = container.style[property];\n    }\n    return ret;\n};\nfunction applyStyles(elm, styles) {\n    for (var style in styles) {\n        elm.style[style] = styles[style];\n    }\n}\nfunction setupContainer(element, getValue) {\n    if (element.type != 'textarea') {\n        throw new Error(\"Textarea required!\");\n    }\n    var parentNode = element.parentNode;\n    var container = document.createElement('div');\n    var resizeEvent = function () {\n        var style = 'position:relative;';\n        [\n            'margin-top', 'margin-left', 'margin-right', 'margin-bottom'\n        ].forEach(function (item) {\n            style += item + ':' +\n                getCSSProperty(element, container, item) + ';';\n        });\n        var width = getCSSProperty(element, container, 'width') || (element.clientWidth + \"px\");\n        var height = getCSSProperty(element, container, 'height') || (element.clientHeight + \"px\");\n        style += 'height:' + height + ';width:' + width + ';';\n        style += 'display:inline-block;';\n        container.setAttribute('style', style);\n    };\n    event.addListener(window, 'resize', resizeEvent);\n    resizeEvent();\n    parentNode.insertBefore(container, element.nextSibling);\n    while (parentNode !== document) {\n        if (parentNode.tagName.toUpperCase() === 'FORM') {\n            var oldSumit = parentNode.onsubmit;\n            parentNode.onsubmit = function (evt) {\n                element.value = getValue();\n                if (oldSumit) {\n                    oldSumit.call(this, evt);\n                }\n            };\n            break;\n        }\n        parentNode = parentNode.parentNode;\n    }\n    return container;\n}\nexports.transformTextarea = function (element, options) {\n    var isFocused = element.autofocus || document.activeElement == element;\n    var session;\n    var container = setupContainer(element, function () {\n        return session.getValue();\n    });\n    element.style.display = 'none';\n    container.style.background = 'white';\n    var editorDiv = document.createElement(\"div\");\n    applyStyles(editorDiv, {\n        top: \"0px\",\n        left: \"0px\",\n        right: \"0px\",\n        bottom: \"0px\",\n        border: \"1px solid gray\",\n        position: \"absolute\"\n    });\n    container.appendChild(editorDiv);\n    var settingOpener = document.createElement(\"div\");\n    applyStyles(settingOpener, {\n        position: \"absolute\",\n        right: \"0px\",\n        bottom: \"0px\",\n        cursor: \"nw-resize\",\n        border: \"solid 9px\",\n        borderColor: \"lightblue gray gray #ceade6\",\n        zIndex: 101\n    });\n    var settingDiv = document.createElement(\"div\");\n    var settingDivStyles = {\n        top: \"0px\",\n        left: \"20%\",\n        right: \"0px\",\n        bottom: \"0px\",\n        position: \"absolute\",\n        padding: \"5px\",\n        zIndex: 100,\n        color: \"white\",\n        display: \"none\",\n        overflow: \"auto\",\n        fontSize: \"14px\",\n        boxShadow: \"-5px 2px 3px gray\"\n    };\n    if (!UA.isOldIE) {\n        settingDivStyles.backgroundColor = \"rgba(0, 0, 0, 0.6)\";\n    }\n    else {\n        settingDivStyles.backgroundColor = \"#333\";\n    }\n    applyStyles(settingDiv, settingDivStyles);\n    container.appendChild(settingDiv);\n    options = options || exports.defaultOptions;\n    var editor = ace.edit(editorDiv);\n    session = editor.getSession();\n    session.setValue(element.value || element.innerHTML);\n    if (isFocused)\n        editor.focus();\n    container.appendChild(settingOpener);\n    setupApi(editor, editorDiv, settingDiv, ace, options);\n    setupSettingPanel(settingDiv, settingOpener, editor);\n    var state = \"\";\n    event.addListener(settingOpener, \"mousemove\", function (e) {\n        var rect = this.getBoundingClientRect();\n        var x = e.clientX - rect.left, y = e.clientY - rect.top;\n        if (x + y < (rect.width + rect.height) / 2) {\n            this.style.cursor = \"pointer\";\n            state = \"toggle\";\n        }\n        else {\n            state = \"resize\";\n            this.style.cursor = \"nw-resize\";\n        }\n    });\n    event.addListener(settingOpener, \"mousedown\", function (e) {\n        e.preventDefault();\n        if (state == \"toggle\") {\n            editor.setDisplaySettings();\n            return;\n        }\n        container.style.zIndex = 100000;\n        var rect = container.getBoundingClientRect();\n        var startX = rect.width + rect.left - e.clientX;\n        var startY = rect.height + rect.top - e.clientY;\n        event.capture(settingOpener, function (e) {\n            container.style.width = e.clientX - rect.left + startX + \"px\";\n            container.style.height = e.clientY - rect.top + startY + \"px\";\n            editor.resize();\n        }, function () { });\n    });\n    return editor;\n};\nfunction load(url, module, callback) {\n    net.loadScript(url, function () {\n        require([module], callback);\n    });\n}\nfunction setupApi(editor, editorDiv, settingDiv, ace, options) {\n    var session = editor.getSession();\n    var renderer = editor.renderer;\n    function toBool(value) {\n        return value === \"true\" || value == true;\n    }\n    editor.setDisplaySettings = function (display) {\n        if (display == null)\n            display = settingDiv.style.display == \"none\";\n        if (display) {\n            settingDiv.style.display = \"block\";\n            settingDiv.hideButton.focus();\n            editor.on(\"focus\", function onFocus() {\n                editor.removeListener(\"focus\", onFocus);\n                settingDiv.style.display = \"none\";\n            });\n        }\n        else {\n            editor.focus();\n        }\n    };\n    editor.$setOption = editor.setOption;\n    editor.$getOption = editor.getOption;\n    editor.setOption = function (key, value) {\n        switch (key) {\n            case \"mode\":\n                editor.$setOption(\"mode\", \"ace/mode/\" + value);\n                break;\n            case \"theme\":\n                editor.$setOption(\"theme\", \"ace/theme/\" + value);\n                break;\n            case \"keybindings\":\n                switch (value) {\n                    case \"vim\":\n                        editor.setKeyboardHandler(\"ace/keyboard/vim\");\n                        break;\n                    case \"emacs\":\n                        editor.setKeyboardHandler(\"ace/keyboard/emacs\");\n                        break;\n                    default:\n                        editor.setKeyboardHandler(null);\n                }\n                break;\n            case \"wrap\":\n            case \"fontSize\":\n                editor.$setOption(key, value);\n                break;\n            default:\n                editor.$setOption(key, toBool(value));\n        }\n    };\n    editor.getOption = function (key) {\n        switch (key) {\n            case \"mode\":\n                return editor.$getOption(\"mode\").substr(\"ace/mode/\".length);\n                break;\n            case \"theme\":\n                return editor.$getOption(\"theme\").substr(\"ace/theme/\".length);\n                break;\n            case \"keybindings\":\n                var value = editor.getKeyboardHandler();\n                switch (value && value.$id) {\n                    case \"ace/keyboard/vim\":\n                        return \"vim\";\n                    case \"ace/keyboard/emacs\":\n                        return \"emacs\";\n                    default:\n                        return \"ace\";\n                }\n                break;\n            default:\n                return editor.$getOption(key);\n        }\n    };\n    editor.setOptions(options);\n    return editor;\n}\nfunction setupSettingPanel(settingDiv, settingOpener, editor) {\n    var BOOL = null;\n    var desc = {\n        mode: \"Mode:\",\n        wrap: \"Soft Wrap:\",\n        theme: \"Theme:\",\n        fontSize: \"Font Size:\",\n        showGutter: \"Display Gutter:\",\n        keybindings: \"Keyboard\",\n        showPrintMargin: \"Show Print Margin:\",\n        useSoftTabs: \"Use Soft Tabs:\",\n        showInvisibles: \"Show Invisibles\"\n    };\n    var optionValues = {\n        mode: {\n            text: \"Plain\",\n            javascript: \"JavaScript\",\n            xml: \"XML\",\n            html: \"HTML\",\n            css: \"CSS\",\n            scss: \"SCSS\",\n            python: \"Python\",\n            php: \"PHP\",\n            java: \"Java\",\n            ruby: \"Ruby\",\n            c_cpp: \"C/C++\",\n            coffee: \"CoffeeScript\",\n            json: \"json\",\n            perl: \"Perl\",\n            clojure: \"Clojure\",\n            ocaml: \"OCaml\",\n            csharp: \"C#\",\n            haxe: \"haXe\",\n            svg: \"SVG\",\n            textile: \"Textile\",\n            groovy: \"Groovy\",\n            liquid: \"Liquid\",\n            Scala: \"Scala\"\n        },\n        theme: {\n            clouds: \"Clouds\",\n            clouds_midnight: \"Clouds Midnight\",\n            cobalt: \"Cobalt\",\n            crimson_editor: \"Crimson Editor\",\n            dawn: \"Dawn\",\n            gob: \"Green on Black\",\n            eclipse: \"Eclipse\",\n            idle_fingers: \"Idle Fingers\",\n            kr_theme: \"Kr Theme\",\n            merbivore: \"Merbivore\",\n            merbivore_soft: \"Merbivore Soft\",\n            mono_industrial: \"Mono Industrial\",\n            monokai: \"Monokai\",\n            pastel_on_dark: \"Pastel On Dark\",\n            solarized_dark: \"Solarized Dark\",\n            solarized_light: \"Solarized Light\",\n            textmate: \"Textmate\",\n            twilight: \"Twilight\",\n            vibrant_ink: \"Vibrant Ink\"\n        },\n        showGutter: BOOL,\n        fontSize: {\n            \"10px\": \"10px\",\n            \"11px\": \"11px\",\n            \"12px\": \"12px\",\n            \"14px\": \"14px\",\n            \"16px\": \"16px\"\n        },\n        wrap: {\n            off: \"Off\",\n            40: \"40\",\n            80: \"80\",\n            free: \"Free\"\n        },\n        keybindings: {\n            ace: \"ace\",\n            vim: \"vim\",\n            emacs: \"emacs\"\n        },\n        showPrintMargin: BOOL,\n        useSoftTabs: BOOL,\n        showInvisibles: BOOL\n    };\n    var table = [];\n    table.push(\"<table><tr><th>Setting</th><th>Value</th></tr>\");\n    function renderOption(builder, option, obj, cValue) {\n        if (!obj) {\n            builder.push(\"<input type='checkbox' title='\", option, \"' \", cValue + \"\" == \"true\" ? \"checked='true'\" : \"\", \"'></input>\");\n            return;\n        }\n        builder.push(\"<select title='\" + option + \"'>\");\n        for (var value in obj) {\n            builder.push(\"<option value='\" + value + \"' \");\n            if (cValue == value) {\n                builder.push(\" selected \");\n            }\n            builder.push(\">\", obj[value], \"</option>\");\n        }\n        builder.push(\"</select>\");\n    }\n    for (var option in exports.defaultOptions) {\n        table.push(\"<tr><td>\", desc[option], \"</td>\");\n        table.push(\"<td>\");\n        renderOption(table, option, optionValues[option], editor.getOption(option));\n        table.push(\"</td></tr>\");\n    }\n    table.push(\"</table>\");\n    settingDiv.innerHTML = table.join(\"\");\n    var onChange = function (e) {\n        var select = e.currentTarget;\n        editor.setOption(select.title, select.value);\n    };\n    var onClick = function (e) {\n        var cb = e.currentTarget;\n        editor.setOption(cb.title, cb.checked);\n    };\n    var selects = settingDiv.getElementsByTagName(\"select\");\n    for (var i = 0; i < selects.length; i++)\n        selects[i].onchange = onChange;\n    var cbs = settingDiv.getElementsByTagName(\"input\");\n    for (var i = 0; i < cbs.length; i++)\n        cbs[i].onclick = onClick;\n    var button = document.createElement(\"input\");\n    button.type = \"button\";\n    button.value = \"Hide\";\n    event.addListener(button, \"click\", function () {\n        editor.setDisplaySettings(false);\n    });\n    settingDiv.appendChild(button);\n    settingDiv.hideButton = button;\n}\nexports.defaultOptions = {\n    mode: \"javascript\",\n    theme: \"textmate\",\n    wrap: \"off\",\n    fontSize: \"12px\",\n    showGutter: \"false\",\n    keybindings: \"ace\",\n    showPrintMargin: \"false\",\n    useSoftTabs: \"true\",\n    showInvisibles: \"false\"\n};\n\n});                (function() {\n                    ace.require([\"ace/ext/textarea\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-themelist.js",
    "content": "ace.define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/**\n * Generates a list of themes available when ace was built.\n * @fileOverview Generates a list of themes available when ace was built.\n * @author <a href=\"mailto:matthewkastor@gmail.com\">\n *  Matthew Christopher Kastor-Inare III </a><br />\n *  ☭ Hial Atropa!! ☭\n */\n\"use strict\";\nvar themeData = [\n    [\"Chrome\"],\n    [\"Clouds\"],\n    [\"Crimson Editor\"],\n    [\"Dawn\"],\n    [\"Dreamweaver\"],\n    [\"Eclipse\"],\n    [\"GitHub\"],\n    [\"IPlastic\"],\n    [\"Solarized Light\"],\n    [\"TextMate\"],\n    [\"Tomorrow\"],\n    [\"XCode\"],\n    [\"Kuroir\"],\n    [\"KatzenMilch\"],\n    [\"SQL Server\", \"sqlserver\", \"light\"],\n    [\"Ambiance\", \"ambiance\", \"dark\"],\n    [\"Chaos\", \"chaos\", \"dark\"],\n    [\"Clouds Midnight\", \"clouds_midnight\", \"dark\"],\n    [\"Dracula\", \"\", \"dark\"],\n    [\"Cobalt\", \"cobalt\", \"dark\"],\n    [\"Gruvbox\", \"gruvbox\", \"dark\"],\n    [\"Green on Black\", \"gob\", \"dark\"],\n    [\"idle Fingers\", \"idle_fingers\", \"dark\"],\n    [\"krTheme\", \"kr_theme\", \"dark\"],\n    [\"Merbivore\", \"merbivore\", \"dark\"],\n    [\"Merbivore Soft\", \"merbivore_soft\", \"dark\"],\n    [\"Mono Industrial\", \"mono_industrial\", \"dark\"],\n    [\"Monokai\", \"monokai\", \"dark\"],\n    [\"Nord Dark\", \"nord_dark\", \"dark\"],\n    [\"One Dark\", \"one_dark\", \"dark\"],\n    [\"Pastel on dark\", \"pastel_on_dark\", \"dark\"],\n    [\"Solarized Dark\", \"solarized_dark\", \"dark\"],\n    [\"Terminal\", \"terminal\", \"dark\"],\n    [\"Tomorrow Night\", \"tomorrow_night\", \"dark\"],\n    [\"Tomorrow Night Blue\", \"tomorrow_night_blue\", \"dark\"],\n    [\"Tomorrow Night Bright\", \"tomorrow_night_bright\", \"dark\"],\n    [\"Tomorrow Night 80s\", \"tomorrow_night_eighties\", \"dark\"],\n    [\"Twilight\", \"twilight\", \"dark\"],\n    [\"Vibrant Ink\", \"vibrant_ink\", \"dark\"]\n];\nexports.themesByName = {};\nexports.themes = themeData.map(function (data) {\n    var name = data[1] || data[0].replace(/ /g, \"_\").toLowerCase();\n    var theme = {\n        caption: data[0],\n        theme: \"ace/theme/\" + name,\n        isDark: data[2] == \"dark\",\n        name: name\n    };\n    exports.themesByName[name] = theme;\n    return theme;\n});\n\n});                (function() {\n                    ace.require([\"ace/ext/themelist\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/ext-whitespace.js",
    "content": "ace.define(\"ace/ext/whitespace\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nexports.$detectIndentation = function (lines, fallback) {\n    var stats = [];\n    var changes = [];\n    var tabIndents = 0;\n    var prevSpaces = 0;\n    var max = Math.min(lines.length, 1000);\n    for (var i = 0; i < max; i++) {\n        var line = lines[i];\n        if (!/^\\s*[^*+\\-\\s]/.test(line))\n            continue;\n        if (line[0] == \"\\t\") {\n            tabIndents++;\n            prevSpaces = -Number.MAX_VALUE;\n        }\n        else {\n            var spaces = line.match(/^ */)[0].length;\n            if (spaces && line[spaces] != \"\\t\") {\n                var diff = spaces - prevSpaces;\n                if (diff > 0 && !(prevSpaces % diff) && !(spaces % diff))\n                    changes[diff] = (changes[diff] || 0) + 1;\n                stats[spaces] = (stats[spaces] || 0) + 1;\n            }\n            prevSpaces = spaces;\n        }\n        while (i < max && line[line.length - 1] == \"\\\\\")\n            line = lines[i++];\n    }\n    function getScore(indent) {\n        var score = 0;\n        for (var i = indent; i < stats.length; i += indent)\n            score += stats[i] || 0;\n        return score;\n    }\n    var changesTotal = changes.reduce(function (a, b) { return a + b; }, 0);\n    var first = { score: 0, length: 0 };\n    var spaceIndents = 0;\n    for (var i = 1; i < 12; i++) {\n        var score = getScore(i);\n        if (i == 1) {\n            spaceIndents = score;\n            score = stats[1] ? 0.9 : 0.8;\n            if (!stats.length)\n                score = 0;\n        }\n        else\n            score /= spaceIndents;\n        if (changes[i])\n            score += changes[i] / changesTotal;\n        if (score > first.score)\n            first = { score: score, length: i };\n    }\n    if (first.score && first.score > 1.4)\n        var tabLength = first.length;\n    if (tabIndents > spaceIndents + 1) {\n        if (tabLength == 1 || spaceIndents < tabIndents / 4 || first.score < 1.8)\n            tabLength = undefined;\n        return { ch: \"\\t\", length: tabLength };\n    }\n    if (spaceIndents > tabIndents + 1)\n        return { ch: \" \", length: tabLength };\n};\nexports.detectIndentation = function (session) {\n    var lines = session.getLines(0, 1000);\n    var indent = exports.$detectIndentation(lines) || {};\n    if (indent.ch)\n        session.setUseSoftTabs(indent.ch == \" \");\n    if (indent.length)\n        session.setTabSize(indent.length);\n    return indent;\n};\nexports.trimTrailingSpace = function (session, options) {\n    var doc = session.getDocument();\n    var lines = doc.getAllLines();\n    var min = options && options.trimEmpty ? -1 : 0;\n    var cursors = [], ci = -1;\n    if (options && options.keepCursorPosition) {\n        if (session.selection.rangeCount) {\n            session.selection.rangeList.ranges.forEach(function (x, i, ranges) {\n                var next = ranges[i + 1];\n                if (next && next.cursor.row == x.cursor.row)\n                    return;\n                cursors.push(x.cursor);\n            });\n        }\n        else {\n            cursors.push(session.selection.getCursor());\n        }\n        ci = 0;\n    }\n    var cursorRow = cursors[ci] && cursors[ci].row;\n    for (var i = 0, l = lines.length; i < l; i++) {\n        var line = lines[i];\n        var index = line.search(/\\s+$/);\n        if (i == cursorRow) {\n            if (index < cursors[ci].column && index > min)\n                index = cursors[ci].column;\n            ci++;\n            cursorRow = cursors[ci] ? cursors[ci].row : -1;\n        }\n        if (index > min)\n            doc.removeInLine(i, index, line.length);\n    }\n};\nexports.convertIndentation = function (session, ch, len) {\n    var oldCh = session.getTabString()[0];\n    var oldLen = session.getTabSize();\n    if (!len)\n        len = oldLen;\n    if (!ch)\n        ch = oldCh;\n    var tab = ch == \"\\t\" ? ch : lang.stringRepeat(ch, len);\n    var doc = session.doc;\n    var lines = doc.getAllLines();\n    var cache = {};\n    var spaceCache = {};\n    for (var i = 0, l = lines.length; i < l; i++) {\n        var line = lines[i];\n        var match = line.match(/^\\s*/)[0];\n        if (match) {\n            var w = session.$getStringScreenWidth(match)[0];\n            var tabCount = Math.floor(w / oldLen);\n            var reminder = w % oldLen;\n            var toInsert = cache[tabCount] || (cache[tabCount] = lang.stringRepeat(tab, tabCount));\n            toInsert += spaceCache[reminder] || (spaceCache[reminder] = lang.stringRepeat(\" \", reminder));\n            if (toInsert != match) {\n                doc.removeInLine(i, 0, match.length);\n                doc.insertInLine({ row: i, column: 0 }, toInsert);\n            }\n        }\n    }\n    session.setTabSize(len);\n    session.setUseSoftTabs(ch == \" \");\n};\nexports.$parseStringArg = function (text) {\n    var indent = {};\n    if (/t/.test(text))\n        indent.ch = \"\\t\";\n    else if (/s/.test(text))\n        indent.ch = \" \";\n    var m = text.match(/\\d+/);\n    if (m)\n        indent.length = parseInt(m[0], 10);\n    return indent;\n};\nexports.$parseArg = function (arg) {\n    if (!arg)\n        return {};\n    if (typeof arg == \"string\")\n        return exports.$parseStringArg(arg);\n    if (typeof arg.text == \"string\")\n        return exports.$parseStringArg(arg.text);\n    return arg;\n};\nexports.commands = [{\n        name: \"detectIndentation\",\n        description: \"Detect indentation from content\",\n        exec: function (editor) {\n            exports.detectIndentation(editor.session);\n        }\n    }, {\n        name: \"trimTrailingSpace\",\n        description: \"Trim trailing whitespace\",\n        exec: function (editor, args) {\n            exports.trimTrailingSpace(editor.session, args);\n        }\n    }, {\n        name: \"convertIndentation\",\n        description: \"Convert indentation to ...\",\n        exec: function (editor, arg) {\n            var indent = exports.$parseArg(arg);\n            exports.convertIndentation(editor.session, indent.ch, indent.length);\n        }\n    }, {\n        name: \"setIndentation\",\n        description: \"Set indentation\",\n        exec: function (editor, arg) {\n            var indent = exports.$parseArg(arg);\n            indent.length && editor.session.setTabSize(indent.length);\n            indent.ch && editor.session.setUseSoftTabs(indent.ch == \" \");\n        }\n    }];\n\n});                (function() {\n                    ace.require([\"ace/ext/whitespace\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/keybinding-emacs.js",
    "content": "ace.define(\"ace/occur\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/edit_session\",\"ace/search_highlight\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = require(\"./search\").Search;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nfunction Occur() { }\noop.inherits(Occur, Search);\n(function () {\n    this.enter = function (editor, options) {\n        if (!options.needle)\n            return false;\n        var pos = editor.getCursorPosition();\n        this.displayOccurContent(editor, options);\n        var translatedPos = this.originalToOccurPosition(editor.session, pos);\n        editor.moveCursorToPosition(translatedPos);\n        return true;\n    };\n    this.exit = function (editor, options) {\n        var pos = options.translatePosition && editor.getCursorPosition();\n        var translatedPos = pos && this.occurToOriginalPosition(editor.session, pos);\n        this.displayOriginalContent(editor);\n        if (translatedPos)\n            editor.moveCursorToPosition(translatedPos);\n        return true;\n    };\n    this.highlight = function (sess, regexp) {\n        var hl = sess.$occurHighlight = sess.$occurHighlight || sess.addDynamicMarker(new SearchHighlight(null, \"ace_occur-highlight\", \"text\"));\n        hl.setRegexp(regexp);\n        sess._emit(\"changeBackMarker\"); // force highlight layer redraw\n    };\n    this.displayOccurContent = function (editor, options) {\n        this.$originalSession = editor.session;\n        var found = this.matchingLines(editor.session, options);\n        var lines = found.map(function (foundLine) { return foundLine.content; });\n        var occurSession = new EditSession(lines.join('\\n'));\n        occurSession.$occur = this;\n        occurSession.$occurMatchingLines = found;\n        editor.setSession(occurSession);\n        this.$useEmacsStyleLineStart = this.$originalSession.$useEmacsStyleLineStart;\n        occurSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;\n        this.highlight(occurSession, options.re);\n        occurSession._emit('changeBackMarker');\n    };\n    this.displayOriginalContent = function (editor) {\n        editor.setSession(this.$originalSession);\n        this.$originalSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;\n    };\n    this.originalToOccurPosition = function (session, pos) {\n        var lines = session.$occurMatchingLines;\n        var nullPos = { row: 0, column: 0 };\n        if (!lines)\n            return nullPos;\n        for (var i = 0; i < lines.length; i++) {\n            if (lines[i].row === pos.row)\n                return { row: i, column: pos.column };\n        }\n        return nullPos;\n    };\n    this.occurToOriginalPosition = function (session, pos) {\n        var lines = session.$occurMatchingLines;\n        if (!lines || !lines[pos.row])\n            return pos;\n        return { row: lines[pos.row].row, column: pos.column };\n    };\n    this.matchingLines = function (session, options) {\n        options = oop.mixin({}, options);\n        if (!session || !options.needle)\n            return [];\n        var search = new Search();\n        search.set(options);\n        return search.findAll(session).reduce(function (lines, range) {\n            var row = range.start.row;\n            var last = lines[lines.length - 1];\n            return last && last.row === row ?\n                lines :\n                lines.concat({ row: row, content: session.getLine(row) });\n        }, []);\n    };\n}).call(Occur.prototype);\nvar dom = require('./lib/dom');\ndom.importCssString(\".ace_occur-highlight {\\n\\\n    border-radius: 4px;\\n\\\n    background-color: rgba(87, 255, 8, 0.25);\\n\\\n    position: absolute;\\n\\\n    z-index: 4;\\n\\\n    box-sizing: border-box;\\n\\\n    box-shadow: 0 0 4px rgb(91, 255, 50);\\n\\\n}\\n\\\n.ace_dark .ace_occur-highlight {\\n\\\n    background-color: rgb(80, 140, 85);\\n\\\n    box-shadow: 0 0 4px rgb(60, 120, 70);\\n\\\n}\\n\", \"incremental-occur-highlighting\", false);\nexports.Occur = Occur;\n\n});\n\nace.define(\"ace/commands/occur_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/occur\",\"ace/keyboard/hash_handler\",\"ace/lib/oop\"], function(require, exports, module){var config = require(\"../config\"), Occur = require(\"../occur\").Occur;\nvar occurStartCommand = {\n    name: \"occur\",\n    exec: function (editor, options) {\n        var alreadyInOccur = !!editor.session.$occur;\n        var occurSessionActive = new Occur().enter(editor, options);\n        if (occurSessionActive && !alreadyInOccur)\n            OccurKeyboardHandler.installIn(editor);\n    },\n    readOnly: true\n};\nvar occurCommands = [{\n        name: \"occurexit\",\n        bindKey: 'esc|Ctrl-G',\n        exec: function (editor) {\n            var occur = editor.session.$occur;\n            if (!occur)\n                return;\n            occur.exit(editor, {});\n            if (!editor.session.$occur)\n                OccurKeyboardHandler.uninstallFrom(editor);\n        },\n        readOnly: true\n    }, {\n        name: \"occuraccept\",\n        bindKey: 'enter',\n        exec: function (editor) {\n            var occur = editor.session.$occur;\n            if (!occur)\n                return;\n            occur.exit(editor, { translatePosition: true });\n            if (!editor.session.$occur)\n                OccurKeyboardHandler.uninstallFrom(editor);\n        },\n        readOnly: true\n    }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar oop = require(\"../lib/oop\");\nfunction OccurKeyboardHandler() { }\noop.inherits(OccurKeyboardHandler, HashHandler);\n(function () {\n    this.isOccurHandler = true;\n    this.attach = function (editor) {\n        HashHandler.call(this, occurCommands, editor.commands.platform);\n        this.$editor = editor;\n    };\n    var handleKeyboard$super = this.handleKeyboard;\n    this.handleKeyboard = function (data, hashId, key, keyCode) {\n        var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);\n        return (cmd && cmd.command) ? cmd : undefined;\n    };\n}).call(OccurKeyboardHandler.prototype);\nOccurKeyboardHandler.installIn = function (editor) {\n    var handler = new this();\n    editor.keyBinding.addKeyboardHandler(handler);\n    editor.commands.addCommands(occurCommands);\n};\nOccurKeyboardHandler.uninstallFrom = function (editor) {\n    editor.commands.removeCommands(occurCommands);\n    var handler = editor.getKeyboardHandler();\n    if (handler.isOccurHandler)\n        editor.keyBinding.removeKeyboardHandler(handler);\n};\nexports.occurStartCommand = occurStartCommand;\n\n});\n\nace.define(\"ace/commands/incremental_search_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/commands/occur_commands\"], function(require, exports, module){var config = require(\"../config\");\nvar oop = require(\"../lib/oop\");\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar occurStartCommand = require(\"./occur_commands\").occurStartCommand;\nexports.iSearchStartCommands = [{\n        name: \"iSearch\",\n        bindKey: { win: \"Ctrl-F\", mac: \"Command-F\" },\n        exec: function (editor, options) {\n            config.loadModule([\"core\", \"ace/incremental_search\"], function (e) {\n                var iSearch = e.iSearch = e.iSearch || new e.IncrementalSearch();\n                iSearch.activate(editor, options.backwards);\n                if (options.jumpToFirstMatch)\n                    iSearch.next(options);\n            });\n        },\n        readOnly: true\n    }, {\n        name: \"iSearchBackwards\",\n        exec: function (editor, jumpToNext) { editor.execCommand('iSearch', { backwards: true }); },\n        readOnly: true\n    }, {\n        name: \"iSearchAndGo\",\n        bindKey: { win: \"Ctrl-K\", mac: \"Command-G\" },\n        exec: function (editor, jumpToNext) { editor.execCommand('iSearch', { jumpToFirstMatch: true, useCurrentOrPrevSearch: true }); },\n        readOnly: true\n    }, {\n        name: \"iSearchBackwardsAndGo\",\n        bindKey: { win: \"Ctrl-Shift-K\", mac: \"Command-Shift-G\" },\n        exec: function (editor) { editor.execCommand('iSearch', { jumpToFirstMatch: true, backwards: true, useCurrentOrPrevSearch: true }); },\n        readOnly: true\n    }];\nexports.iSearchCommands = [{\n        name: \"restartSearch\",\n        bindKey: { win: \"Ctrl-F\", mac: \"Command-F\" },\n        exec: function (iSearch) {\n            iSearch.cancelSearch(true);\n        }\n    }, {\n        name: \"searchForward\",\n        bindKey: { win: \"Ctrl-S|Ctrl-K\", mac: \"Ctrl-S|Command-G\" },\n        exec: function (iSearch, options) {\n            options.useCurrentOrPrevSearch = true;\n            iSearch.next(options);\n        }\n    }, {\n        name: \"searchBackward\",\n        bindKey: { win: \"Ctrl-R|Ctrl-Shift-K\", mac: \"Ctrl-R|Command-Shift-G\" },\n        exec: function (iSearch, options) {\n            options.useCurrentOrPrevSearch = true;\n            options.backwards = true;\n            iSearch.next(options);\n        }\n    }, {\n        name: \"extendSearchTerm\",\n        exec: function (iSearch, string) {\n            iSearch.addString(string);\n        }\n    }, {\n        name: \"extendSearchTermSpace\",\n        bindKey: \"space\",\n        exec: function (iSearch) { iSearch.addString(' '); }\n    }, {\n        name: \"shrinkSearchTerm\",\n        bindKey: \"backspace\",\n        exec: function (iSearch) {\n            iSearch.removeChar();\n        }\n    }, {\n        name: 'confirmSearch',\n        bindKey: 'return',\n        exec: function (iSearch) { iSearch.deactivate(); }\n    }, {\n        name: 'cancelSearch',\n        bindKey: 'esc|Ctrl-G',\n        exec: function (iSearch) { iSearch.deactivate(true); }\n    }, {\n        name: 'occurisearch',\n        bindKey: 'Ctrl-O',\n        exec: function (iSearch) {\n            var options = oop.mixin({}, iSearch.$options);\n            iSearch.deactivate();\n            occurStartCommand.exec(iSearch.$editor, options);\n        }\n    }, {\n        name: \"yankNextWord\",\n        bindKey: \"Ctrl-w\",\n        exec: function (iSearch) {\n            var ed = iSearch.$editor, range = ed.selection.getRangeOfMovements(function (sel) { sel.moveCursorWordRight(); }), string = ed.session.getTextRange(range);\n            iSearch.addString(string);\n        }\n    }, {\n        name: \"yankNextChar\",\n        bindKey: \"Ctrl-Alt-y\",\n        exec: function (iSearch) {\n            var ed = iSearch.$editor, range = ed.selection.getRangeOfMovements(function (sel) { sel.moveCursorRight(); }), string = ed.session.getTextRange(range);\n            iSearch.addString(string);\n        }\n    }, {\n        name: 'recenterTopBottom',\n        bindKey: 'Ctrl-l',\n        exec: function (iSearch) { iSearch.$editor.execCommand('recenterTopBottom'); }\n    }, {\n        name: 'selectAllMatches',\n        bindKey: 'Ctrl-space',\n        exec: function (iSearch) {\n            var ed = iSearch.$editor, hl = ed.session.$isearchHighlight, ranges = hl && hl.cache ? hl.cache\n                .reduce(function (ranges, ea) {\n                return ranges.concat(ea ? ea : []);\n            }, []) : [];\n            iSearch.deactivate(false);\n            ranges.forEach(ed.selection.addRange.bind(ed.selection));\n        }\n    }, {\n        name: 'searchAsRegExp',\n        bindKey: 'Alt-r',\n        exec: function (iSearch) {\n            iSearch.convertNeedleToRegExp();\n        }\n    }].map(function (cmd) {\n    cmd.readOnly = true;\n    cmd.isIncrementalSearchCommand = true;\n    cmd.scrollIntoView = \"animate-cursor\";\n    return cmd;\n});\nfunction IncrementalSearchKeyboardHandler(iSearch) {\n    this.$iSearch = iSearch;\n}\noop.inherits(IncrementalSearchKeyboardHandler, HashHandler);\n(function () {\n    this.attach = function (editor) {\n        var iSearch = this.$iSearch;\n        HashHandler.call(this, exports.iSearchCommands, editor.commands.platform);\n        this.$commandExecHandler = editor.commands.on('exec', function (e) {\n            if (!e.command.isIncrementalSearchCommand)\n                return iSearch.deactivate();\n            e.stopPropagation();\n            e.preventDefault();\n            var scrollTop = editor.session.getScrollTop();\n            var result = e.command.exec(iSearch, e.args || {});\n            editor.renderer.scrollCursorIntoView(null, 0.5);\n            editor.renderer.animateScrolling(scrollTop);\n            return result;\n        });\n    };\n    this.detach = function (editor) {\n        if (!this.$commandExecHandler)\n            return;\n        editor.commands.off('exec', this.$commandExecHandler);\n        delete this.$commandExecHandler;\n    };\n    var handleKeyboard$super = this.handleKeyboard;\n    this.handleKeyboard = function (data, hashId, key, keyCode) {\n        if (((hashId === 1 /*ctrl*/ || hashId === 8 /*command*/) && key === 'v')\n            || (hashId === 1 /*ctrl*/ && key === 'y'))\n            return null;\n        var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);\n        if (cmd && cmd.command) {\n            return cmd;\n        }\n        if (hashId == -1) {\n            var extendCmd = this.commands.extendSearchTerm;\n            if (extendCmd) {\n                return { command: extendCmd, args: key };\n            }\n        }\n        return false;\n    };\n}).call(IncrementalSearchKeyboardHandler.prototype);\nexports.IncrementalSearchKeyboardHandler = IncrementalSearchKeyboardHandler;\n\n});\n\nace.define(\"ace/incremental_search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/search_highlight\",\"ace/commands/incremental_search_commands\",\"ace/lib/dom\",\"ace/commands/command_manager\",\"ace/editor\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = require(\"./search\").Search;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar iSearchCommandModule = require(\"./commands/incremental_search_commands\");\nvar ISearchKbd = iSearchCommandModule.IncrementalSearchKeyboardHandler;\nfunction IncrementalSearch() {\n    this.$options = { wrap: false, skipCurrent: false };\n    this.$keyboardHandler = new ISearchKbd(this);\n}\noop.inherits(IncrementalSearch, Search);\nfunction isRegExp(obj) {\n    return obj instanceof RegExp;\n}\nfunction regExpToObject(re) {\n    var string = String(re), start = string.indexOf('/'), flagStart = string.lastIndexOf('/');\n    return {\n        expression: string.slice(start + 1, flagStart),\n        flags: string.slice(flagStart + 1)\n    };\n}\nfunction stringToRegExp(string, flags) {\n    try {\n        return new RegExp(string, flags);\n    }\n    catch (e) {\n        return string;\n    }\n}\nfunction objectToRegExp(obj) {\n    return stringToRegExp(obj.expression, obj.flags);\n}\n(function () {\n    this.activate = function (editor, backwards) {\n        this.$editor = editor;\n        this.$startPos = this.$currentPos = editor.getCursorPosition();\n        this.$options.needle = '';\n        this.$options.backwards = backwards;\n        editor.keyBinding.addKeyboardHandler(this.$keyboardHandler);\n        this.$originalEditorOnPaste = editor.onPaste;\n        editor.onPaste = this.onPaste.bind(this);\n        this.$mousedownHandler = editor.on('mousedown', this.onMouseDown.bind(this));\n        this.selectionFix(editor);\n        this.statusMessage(true);\n    };\n    this.deactivate = function (reset) {\n        this.cancelSearch(reset);\n        var editor = this.$editor;\n        editor.keyBinding.removeKeyboardHandler(this.$keyboardHandler);\n        if (this.$mousedownHandler) {\n            editor.off('mousedown', this.$mousedownHandler);\n            delete this.$mousedownHandler;\n        }\n        editor.onPaste = this.$originalEditorOnPaste;\n        this.message('');\n    };\n    this.selectionFix = function (editor) {\n        if (editor.selection.isEmpty() && !editor.session.$emacsMark) {\n            editor.clearSelection();\n        }\n    };\n    this.highlight = function (regexp) {\n        var sess = this.$editor.session, hl = sess.$isearchHighlight = sess.$isearchHighlight || sess.addDynamicMarker(new SearchHighlight(null, \"ace_isearch-result\", \"text\"));\n        hl.setRegexp(regexp);\n        sess._emit(\"changeBackMarker\"); // force highlight layer redraw\n    };\n    this.cancelSearch = function (reset) {\n        var e = this.$editor;\n        this.$prevNeedle = this.$options.needle;\n        this.$options.needle = '';\n        if (reset) {\n            e.moveCursorToPosition(this.$startPos);\n            this.$currentPos = this.$startPos;\n        }\n        else {\n            e.pushEmacsMark && e.pushEmacsMark(this.$startPos, false);\n        }\n        this.highlight(null);\n        return Range.fromPoints(this.$currentPos, this.$currentPos);\n    };\n    this.highlightAndFindWithNeedle = function (moveToNext, needleUpdateFunc) {\n        if (!this.$editor)\n            return null;\n        var options = this.$options;\n        if (needleUpdateFunc) {\n            options.needle = needleUpdateFunc.call(this, options.needle || '') || '';\n        }\n        if (options.needle.length === 0) {\n            this.statusMessage(true);\n            return this.cancelSearch(true);\n        }\n        options.start = this.$currentPos;\n        var session = this.$editor.session, found = this.find(session), shouldSelect = this.$editor.emacsMark ?\n            !!this.$editor.emacsMark() : !this.$editor.selection.isEmpty();\n        if (found) {\n            if (options.backwards)\n                found = Range.fromPoints(found.end, found.start);\n            this.$editor.selection.setRange(Range.fromPoints(shouldSelect ? this.$startPos : found.end, found.end));\n            if (moveToNext)\n                this.$currentPos = found.end;\n            this.highlight(options.re);\n        }\n        this.statusMessage(found);\n        return found;\n    };\n    this.addString = function (s) {\n        return this.highlightAndFindWithNeedle(false, function (needle) {\n            if (!isRegExp(needle))\n                return needle + s;\n            var reObj = regExpToObject(needle);\n            reObj.expression += s;\n            return objectToRegExp(reObj);\n        });\n    };\n    this.removeChar = function (c) {\n        return this.highlightAndFindWithNeedle(false, function (needle) {\n            if (!isRegExp(needle))\n                return needle.substring(0, needle.length - 1);\n            var reObj = regExpToObject(needle);\n            reObj.expression = reObj.expression.substring(0, reObj.expression.length - 1);\n            return objectToRegExp(reObj);\n        });\n    };\n    this.next = function (options) {\n        options = options || {};\n        this.$options.backwards = !!options.backwards;\n        this.$currentPos = this.$editor.getCursorPosition();\n        return this.highlightAndFindWithNeedle(true, function (needle) {\n            return options.useCurrentOrPrevSearch && needle.length === 0 ?\n                this.$prevNeedle || '' : needle;\n        });\n    };\n    this.onMouseDown = function (evt) {\n        this.deactivate();\n        return true;\n    };\n    this.onPaste = function (text) {\n        this.addString(text);\n    };\n    this.convertNeedleToRegExp = function () {\n        return this.highlightAndFindWithNeedle(false, function (needle) {\n            return isRegExp(needle) ? needle : stringToRegExp(needle, 'ig');\n        });\n    };\n    this.convertNeedleToString = function () {\n        return this.highlightAndFindWithNeedle(false, function (needle) {\n            return isRegExp(needle) ? regExpToObject(needle).expression : needle;\n        });\n    };\n    this.statusMessage = function (found) {\n        var options = this.$options, msg = '';\n        msg += options.backwards ? 'reverse-' : '';\n        msg += 'isearch: ' + options.needle;\n        msg += found ? '' : ' (not found)';\n        this.message(msg);\n    };\n    this.message = function (msg) {\n        if (this.$editor.showCommandLine) {\n            this.$editor.showCommandLine(msg);\n            this.$editor.focus();\n        }\n    };\n}).call(IncrementalSearch.prototype);\nexports.IncrementalSearch = IncrementalSearch;\nvar dom = require('./lib/dom');\ndom.importCssString(\"\\n.ace_marker-layer .ace_isearch-result {\\n  position: absolute;\\n  z-index: 6;\\n  box-sizing: border-box;\\n}\\ndiv.ace_isearch-result {\\n  border-radius: 4px;\\n  background-color: rgba(255, 200, 0, 0.5);\\n  box-shadow: 0 0 4px rgb(255, 200, 0);\\n}\\n.ace_dark div.ace_isearch-result {\\n  background-color: rgb(100, 110, 160);\\n  box-shadow: 0 0 4px rgb(80, 90, 140);\\n}\", \"incremental-search-highlighting\", false);\nvar commands = require(\"./commands/command_manager\");\n(function () {\n    this.setupIncrementalSearch = function (editor, val) {\n        if (this.usesIncrementalSearch == val)\n            return;\n        this.usesIncrementalSearch = val;\n        var iSearchCommands = iSearchCommandModule.iSearchStartCommands;\n        var method = val ? 'addCommands' : 'removeCommands';\n        this[method](iSearchCommands);\n    };\n}).call(commands.CommandManager.prototype);\nvar Editor = require(\"./editor\").Editor;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n    useIncrementalSearch: {\n        set: function (val) {\n            this.keyBinding.$handlers.forEach(function (handler) {\n                if (handler.setupIncrementalSearch) {\n                    handler.setupIncrementalSearch(this, val);\n                }\n            });\n            this._emit('incrementalSearchSettingChanged', { isEnabled: val });\n        }\n    }\n});\n\n});\n\nace.define(\"ace/keyboard/emacs\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/incremental_search\",\"ace/commands/incremental_search_commands\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nrequire(\"../incremental_search\");\nvar iSearchCommandModule = require(\"../commands/incremental_search_commands\");\nvar HashHandler = require(\"./hash_handler\").HashHandler;\nexports.handler = new HashHandler();\nexports.handler.isEmacs = true;\nexports.handler.$id = \"ace/keyboard/emacs\";\ndom.importCssString(\"\\n.emacs-mode .ace_cursor{\\n    border: 1px rgba(50,250,50,0.8) solid!important;\\n    box-sizing: border-box!important;\\n    background-color: rgba(0,250,0,0.9);\\n    opacity: 0.5;\\n}\\n.emacs-mode .ace_hidden-cursors .ace_cursor{\\n    opacity: 1;\\n    background-color: transparent;\\n}\\n.emacs-mode .ace_overwrite-cursors .ace_cursor {\\n    opacity: 1;\\n    background-color: transparent;\\n    border-width: 0 0 2px 2px !important;\\n}\\n.emacs-mode .ace_text-layer {\\n    z-index: 4\\n}\\n.emacs-mode .ace_cursor-layer {\\n    z-index: 2\\n}\", 'emacsMode');\nvar $formerLongWords;\nvar $formerLineStart;\nexports.handler.attach = function (editor) {\n    $formerLongWords = editor.session.$selectLongWords;\n    editor.session.$selectLongWords = true;\n    $formerLineStart = editor.session.$useEmacsStyleLineStart;\n    editor.session.$useEmacsStyleLineStart = true;\n    editor.session.$emacsMark = null; // the active mark\n    editor.session.$emacsMarkRing = editor.session.$emacsMarkRing || [];\n    editor.emacsMark = function () {\n        return this.session.$emacsMark;\n    };\n    editor.setEmacsMark = function (p) {\n        this.session.$emacsMark = p;\n    };\n    editor.pushEmacsMark = function (p, activate) {\n        var prevMark = this.session.$emacsMark;\n        if (prevMark)\n            this.session.$emacsMarkRing.push(prevMark);\n        if (!p || activate)\n            this.setEmacsMark(p);\n        else\n            this.session.$emacsMarkRing.push(p);\n    };\n    editor.popEmacsMark = function () {\n        var mark = this.emacsMark();\n        if (mark) {\n            this.setEmacsMark(null);\n            return mark;\n        }\n        return this.session.$emacsMarkRing.pop();\n    };\n    editor.getLastEmacsMark = function (p) {\n        return this.session.$emacsMark || this.session.$emacsMarkRing.slice(-1)[0];\n    };\n    editor.emacsMarkForSelection = function (replacement) {\n        var sel = this.selection, multiRangeLength = this.multiSelect ?\n            this.multiSelect.getAllRanges().length : 1, selIndex = sel.index || 0, markRing = this.session.$emacsMarkRing, markIndex = markRing.length - (multiRangeLength - selIndex), lastMark = markRing[markIndex] || sel.anchor;\n        if (replacement) {\n            markRing.splice(markIndex, 1, \"row\" in replacement && \"column\" in replacement ?\n                replacement : undefined);\n        }\n        return lastMark;\n    };\n    editor.on(\"click\", $resetMarkMode);\n    editor.on(\"changeSession\", $kbSessionChange);\n    editor.renderer.$blockCursor = true;\n    editor.setStyle(\"emacs-mode\");\n    editor.commands.addCommands(commands);\n    exports.handler.platform = editor.commands.platform;\n    editor.$emacsModeHandler = this;\n    editor.on('copy', this.onCopy);\n    editor.on('paste', this.onPaste);\n};\nexports.handler.detach = function (editor) {\n    editor.renderer.$blockCursor = false;\n    editor.session.$selectLongWords = $formerLongWords;\n    editor.session.$useEmacsStyleLineStart = $formerLineStart;\n    editor.off(\"click\", $resetMarkMode);\n    editor.off(\"changeSession\", $kbSessionChange);\n    editor.unsetStyle(\"emacs-mode\");\n    editor.commands.removeCommands(commands);\n    editor.off('copy', this.onCopy);\n    editor.off('paste', this.onPaste);\n    editor.$emacsModeHandler = null;\n};\nvar $kbSessionChange = function (e) {\n    if (e.oldSession) {\n        e.oldSession.$selectLongWords = $formerLongWords;\n        e.oldSession.$useEmacsStyleLineStart = $formerLineStart;\n    }\n    $formerLongWords = e.session.$selectLongWords;\n    e.session.$selectLongWords = true;\n    $formerLineStart = e.session.$useEmacsStyleLineStart;\n    e.session.$useEmacsStyleLineStart = true;\n    if (!e.session.hasOwnProperty('$emacsMark'))\n        e.session.$emacsMark = null;\n    if (!e.session.hasOwnProperty('$emacsMarkRing'))\n        e.session.$emacsMarkRing = [];\n};\nvar $resetMarkMode = function (e) {\n    e.editor.session.$emacsMark = null;\n};\nvar keys = require(\"../lib/keys\").KEY_MODS;\nvar eMods = { C: \"ctrl\", S: \"shift\", M: \"alt\", CMD: \"command\" };\nvar combinations = [\"C-S-M-CMD\",\n    \"S-M-CMD\", \"C-M-CMD\", \"C-S-CMD\", \"C-S-M\",\n    \"M-CMD\", \"S-CMD\", \"S-M\", \"C-CMD\", \"C-M\", \"C-S\",\n    \"CMD\", \"M\", \"S\", \"C\"];\ncombinations.forEach(function (c) {\n    var hashId = 0;\n    c.split(\"-\").forEach(function (c) {\n        hashId = hashId | keys[eMods[c]];\n    });\n    eMods[hashId] = c.toLowerCase() + \"-\";\n});\nexports.handler.onCopy = function (e, editor) {\n    if (editor.$handlesEmacsOnCopy)\n        return;\n    editor.$handlesEmacsOnCopy = true;\n    exports.handler.commands.killRingSave.exec(editor);\n    editor.$handlesEmacsOnCopy = false;\n};\nexports.handler.onPaste = function (e, editor) {\n    editor.pushEmacsMark(editor.getCursorPosition());\n};\nexports.handler.bindKey = function (key, command) {\n    if (typeof key == \"object\")\n        key = key[this.platform];\n    if (!key)\n        return;\n    var ckb = this.commandKeyBinding;\n    key.split(\"|\").forEach(function (keyPart) {\n        keyPart = keyPart.toLowerCase();\n        ckb[keyPart] = command;\n        var keyParts = keyPart.split(\" \").slice(0, -1);\n        keyParts.reduce(function (keyMapKeys, keyPart, i) {\n            var prefix = keyMapKeys[i - 1] ? keyMapKeys[i - 1] + ' ' : '';\n            return keyMapKeys.concat([prefix + keyPart]);\n        }, []).forEach(function (keyPart) {\n            if (!ckb[keyPart])\n                ckb[keyPart] = \"null\";\n        });\n    }, this);\n};\nexports.handler.getStatusText = function (editor, data) {\n    var str = \"\";\n    if (data.count)\n        str += data.count;\n    if (data.keyChain)\n        str += \" \" + data.keyChain;\n    return str;\n};\nexports.handler.handleKeyboard = function (data, hashId, key, keyCode) {\n    if (keyCode === -1)\n        return undefined;\n    var editor = data.editor;\n    editor._signal(\"changeStatus\");\n    if (hashId == -1) {\n        editor.pushEmacsMark();\n        if (data.count) {\n            var str = new Array(data.count + 1).join(key);\n            data.count = null;\n            return { command: \"insertstring\", args: str };\n        }\n    }\n    var modifier = eMods[hashId];\n    if (modifier == \"c-\" || data.count) {\n        var count = parseInt(key[key.length - 1]);\n        if (typeof count === 'number' && !isNaN(count)) {\n            data.count = Math.max(data.count, 0) || 0;\n            data.count = 10 * data.count + count;\n            return { command: \"null\" };\n        }\n    }\n    if (modifier)\n        key = modifier + key;\n    if (data.keyChain)\n        key = data.keyChain += \" \" + key;\n    var command = this.commandKeyBinding[key];\n    data.keyChain = command == \"null\" ? key : \"\";\n    if (!command)\n        return undefined;\n    if (command === \"null\")\n        return { command: \"null\" };\n    if (command === \"universalArgument\") {\n        data.count = -4;\n        return { command: \"null\" };\n    }\n    var args;\n    if (typeof command !== \"string\") {\n        args = command.args;\n        if (command.command)\n            command = command.command;\n        if (command === \"goorselect\") {\n            command = editor.emacsMark() ? args[1] : args[0];\n            args = null;\n        }\n    }\n    if (typeof command === \"string\") {\n        if (command === \"insertstring\" ||\n            command === \"splitline\" ||\n            command === \"togglecomment\") {\n            editor.pushEmacsMark();\n        }\n        command = this.commands[command] || editor.commands.commands[command];\n        if (!command)\n            return undefined;\n    }\n    if (!command.readOnly && !command.isYank)\n        data.lastCommand = null;\n    if (!command.readOnly && editor.emacsMark())\n        editor.setEmacsMark(null);\n    if (data.count) {\n        var count = data.count;\n        data.count = 0;\n        if (!command || !command.handlesCount) {\n            return {\n                args: args,\n                command: {\n                    exec: function (editor, args) {\n                        for (var i = 0; i < count; i++)\n                            command.exec(editor, args);\n                    },\n                    multiSelectAction: command.multiSelectAction\n                }\n            };\n        }\n        else {\n            if (!args)\n                args = {};\n            if (typeof args === 'object')\n                args.count = count;\n        }\n    }\n    return { command: command, args: args };\n};\nexports.emacsKeys = {\n    \"Up|C-p\": { command: \"goorselect\", args: [\"golineup\", \"selectup\"] },\n    \"Down|C-n\": { command: \"goorselect\", args: [\"golinedown\", \"selectdown\"] },\n    \"Left|C-b\": { command: \"goorselect\", args: [\"gotoleft\", \"selectleft\"] },\n    \"Right|C-f\": { command: \"goorselect\", args: [\"gotoright\", \"selectright\"] },\n    \"C-Left|M-b\": { command: \"goorselect\", args: [\"gotowordleft\", \"selectwordleft\"] },\n    \"C-Right|M-f\": { command: \"goorselect\", args: [\"gotowordright\", \"selectwordright\"] },\n    \"Home|C-a\": { command: \"goorselect\", args: [\"gotolinestart\", \"selecttolinestart\"] },\n    \"End|C-e\": { command: \"goorselect\", args: [\"gotolineend\", \"selecttolineend\"] },\n    \"C-Home|S-M-,\": { command: \"goorselect\", args: [\"gotostart\", \"selecttostart\"] },\n    \"C-End|S-M-.\": { command: \"goorselect\", args: [\"gotoend\", \"selecttoend\"] },\n    \"S-Up|S-C-p\": \"selectup\",\n    \"S-Down|S-C-n\": \"selectdown\",\n    \"S-Left|S-C-b\": \"selectleft\",\n    \"S-Right|S-C-f\": \"selectright\",\n    \"S-C-Left|S-M-b\": \"selectwordleft\",\n    \"S-C-Right|S-M-f\": \"selectwordright\",\n    \"S-Home|S-C-a\": \"selecttolinestart\",\n    \"S-End|S-C-e\": \"selecttolineend\",\n    \"S-C-Home\": \"selecttostart\",\n    \"S-C-End\": \"selecttoend\",\n    \"C-l\": \"recenterTopBottom\",\n    \"M-s\": \"centerselection\",\n    \"M-g\": \"gotoline\",\n    \"C-x C-p\": \"selectall\",\n    \"C-Down\": { command: \"goorselect\", args: [\"gotopagedown\", \"selectpagedown\"] },\n    \"C-Up\": { command: \"goorselect\", args: [\"gotopageup\", \"selectpageup\"] },\n    \"PageDown|C-v\": { command: \"goorselect\", args: [\"gotopagedown\", \"selectpagedown\"] },\n    \"PageUp|M-v\": { command: \"goorselect\", args: [\"gotopageup\", \"selectpageup\"] },\n    \"S-C-Down\": \"selectpagedown\",\n    \"S-C-Up\": \"selectpageup\",\n    \"C-s\": \"iSearch\",\n    \"C-r\": \"iSearchBackwards\",\n    \"M-C-s\": \"findnext\",\n    \"M-C-r\": \"findprevious\",\n    \"S-M-5\": \"replace\",\n    \"Backspace\": \"backspace\",\n    \"Delete|C-d\": \"del\",\n    \"Return|C-m\": { command: \"insertstring\", args: \"\\n\" },\n    \"C-o\": \"splitline\",\n    \"M-d|C-Delete\": { command: \"killWord\", args: \"right\" },\n    \"C-Backspace|M-Backspace|M-Delete\": { command: \"killWord\", args: \"left\" },\n    \"C-k\": \"killLine\",\n    \"C-y|S-Delete\": \"yank\",\n    \"M-y\": \"yankRotate\",\n    \"C-g\": \"keyboardQuit\",\n    \"C-w|C-S-W\": \"killRegion\",\n    \"M-w\": \"killRingSave\",\n    \"C-Space\": \"setMark\",\n    \"C-x C-x\": \"exchangePointAndMark\",\n    \"C-t\": \"transposeletters\",\n    \"M-u\": \"touppercase\",\n    \"M-l\": \"tolowercase\",\n    \"M-/\": \"autocomplete\",\n    \"C-u\": \"universalArgument\",\n    \"M-;\": \"togglecomment\",\n    \"C-/|C-x u|S-C--|C-z\": \"undo\",\n    \"S-C-/|S-C-x u|C--|S-C-z\": \"redo\",\n    \"C-x r\": \"selectRectangularRegion\",\n    \"M-x\": { command: \"focusCommandLine\", args: \"M-x \" }\n};\nexports.handler.bindKeys(exports.emacsKeys);\nexports.handler.addCommands({\n    recenterTopBottom: function (editor) {\n        var renderer = editor.renderer;\n        var pos = renderer.$cursorLayer.getPixelPosition();\n        var h = renderer.$size.scrollerHeight - renderer.lineHeight;\n        var scrollTop = renderer.scrollTop;\n        if (Math.abs(pos.top - scrollTop) < 2) {\n            scrollTop = pos.top - h;\n        }\n        else if (Math.abs(pos.top - scrollTop - h * 0.5) < 2) {\n            scrollTop = pos.top;\n        }\n        else {\n            scrollTop = pos.top - h * 0.5;\n        }\n        editor.session.setScrollTop(scrollTop);\n    },\n    selectRectangularRegion: function (editor) {\n        editor.multiSelect.toggleBlockSelection();\n    },\n    setMark: {\n        exec: function (editor, args) {\n            if (args && args.count) {\n                if (editor.inMultiSelectMode)\n                    editor.forEachSelection(moveToMark);\n                else\n                    moveToMark();\n                moveToMark();\n                return;\n            }\n            var mark = editor.emacsMark(), ranges = editor.selection.getAllRanges(), rangePositions = ranges.map(function (r) { return { row: r.start.row, column: r.start.column }; }), transientMarkModeActive = true, hasNoSelection = ranges.every(function (range) { return range.isEmpty(); });\n            if (transientMarkModeActive && (mark || !hasNoSelection)) {\n                if (editor.inMultiSelectMode)\n                    editor.forEachSelection({ exec: editor.clearSelection.bind(editor) });\n                else\n                    editor.clearSelection();\n                if (mark)\n                    editor.pushEmacsMark(null);\n                return;\n            }\n            if (!mark) {\n                rangePositions.forEach(function (pos) { editor.pushEmacsMark(pos); });\n                editor.setEmacsMark(rangePositions[rangePositions.length - 1]);\n                return;\n            }\n            function moveToMark() {\n                var mark = editor.popEmacsMark();\n                mark && editor.moveCursorToPosition(mark);\n            }\n        },\n        readOnly: true,\n        handlesCount: true\n    },\n    exchangePointAndMark: {\n        exec: function exchangePointAndMark$exec(editor, args) {\n            var sel = editor.selection;\n            if (!args.count && !sel.isEmpty()) { // just invert selection\n                sel.setSelectionRange(sel.getRange(), !sel.isBackwards());\n                return;\n            }\n            if (args.count) { // replace mark and point\n                var pos = { row: sel.lead.row, column: sel.lead.column };\n                sel.clearSelection();\n                sel.moveCursorToPosition(editor.emacsMarkForSelection(pos));\n            }\n            else { // create selection to last mark\n                sel.selectToPosition(editor.emacsMarkForSelection());\n            }\n        },\n        readOnly: true,\n        handlesCount: true,\n        multiSelectAction: \"forEach\"\n    },\n    killWord: {\n        exec: function (editor, dir) {\n            editor.clearSelection();\n            if (dir == \"left\")\n                editor.selection.selectWordLeft();\n            else\n                editor.selection.selectWordRight();\n            var range = editor.getSelectionRange();\n            var text = editor.session.getTextRange(range);\n            exports.killRing.add(text);\n            editor.session.remove(range);\n            editor.clearSelection();\n        },\n        multiSelectAction: \"forEach\"\n    },\n    killLine: function (editor) {\n        editor.pushEmacsMark(null);\n        editor.clearSelection();\n        var range = editor.getSelectionRange();\n        var line = editor.session.getLine(range.start.row);\n        range.end.column = line.length;\n        line = line.substr(range.start.column);\n        var foldLine = editor.session.getFoldLine(range.start.row);\n        if (foldLine && range.end.row != foldLine.end.row) {\n            range.end.row = foldLine.end.row;\n            line = \"x\";\n        }\n        if (/^\\s*$/.test(line)) {\n            range.end.row++;\n            line = editor.session.getLine(range.end.row);\n            range.end.column = /^\\s*$/.test(line) ? line.length : 0;\n        }\n        var text = editor.session.getTextRange(range);\n        if (editor.prevOp.command == this)\n            exports.killRing.append(text);\n        else\n            exports.killRing.add(text);\n        editor.session.remove(range);\n        editor.clearSelection();\n    },\n    yank: function (editor) {\n        editor.onPaste(exports.killRing.get() || '');\n        editor.keyBinding.$data.lastCommand = \"yank\";\n    },\n    yankRotate: function (editor) {\n        if (editor.keyBinding.$data.lastCommand != \"yank\")\n            return;\n        editor.undo();\n        editor.session.$emacsMarkRing.pop(); // also undo recording mark\n        editor.onPaste(exports.killRing.rotate());\n        editor.keyBinding.$data.lastCommand = \"yank\";\n    },\n    killRegion: {\n        exec: function (editor) {\n            exports.killRing.add(editor.getCopyText());\n            editor.commands.byName.cut.exec(editor);\n            editor.setEmacsMark(null);\n        },\n        readOnly: true,\n        multiSelectAction: \"forEach\"\n    },\n    killRingSave: {\n        exec: function (editor) {\n            editor.$handlesEmacsOnCopy = true;\n            var marks = editor.session.$emacsMarkRing.slice(), deselectedMarks = [];\n            exports.killRing.add(editor.getCopyText());\n            setTimeout(function () {\n                function deselect() {\n                    var sel = editor.selection, range = sel.getRange(), pos = sel.isBackwards() ? range.end : range.start;\n                    deselectedMarks.push({ row: pos.row, column: pos.column });\n                    sel.clearSelection();\n                }\n                editor.$handlesEmacsOnCopy = false;\n                if (editor.inMultiSelectMode)\n                    editor.forEachSelection({ exec: deselect });\n                else\n                    deselect();\n                editor.setEmacsMark(null);\n                editor.session.$emacsMarkRing = marks.concat(deselectedMarks.reverse());\n            }, 0);\n        },\n        readOnly: true\n    },\n    keyboardQuit: function (editor) {\n        editor.selection.clearSelection();\n        editor.setEmacsMark(null);\n        editor.keyBinding.$data.count = null;\n    },\n    focusCommandLine: function (editor, arg) {\n        if (editor.showCommandLine)\n            editor.showCommandLine(arg);\n    }\n});\nexports.handler.addCommands(iSearchCommandModule.iSearchStartCommands);\nvar commands = exports.handler.commands;\ncommands.yank.isYank = true;\ncommands.yankRotate.isYank = true;\nexports.killRing = {\n    $data: [],\n    add: function (str) {\n        str && this.$data.push(str);\n        if (this.$data.length > 30)\n            this.$data.shift();\n    },\n    append: function (str) {\n        var idx = this.$data.length - 1;\n        var text = this.$data[idx] || \"\";\n        if (str)\n            text += str;\n        if (text)\n            this.$data[idx] = text;\n    },\n    get: function (n) {\n        n = n || 1;\n        return this.$data.slice(this.$data.length - n, this.$data.length).reverse().join('\\n');\n    },\n    pop: function () {\n        if (this.$data.length > 1)\n            this.$data.pop();\n        return this.get();\n    },\n    rotate: function () {\n        this.$data.unshift(this.$data.pop());\n        return this.get();\n    }\n};\n\n});                (function() {\n                    ace.require([\"ace/keyboard/emacs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/keybinding-sublime.js",
    "content": "ace.define(\"ace/keyboard/sublime\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nfunction moveBySubWords(editor, direction, extend) {\n    var selection = editor.selection;\n    var row = selection.lead.row;\n    var column = selection.lead.column;\n    var line = editor.session.getLine(row);\n    if (!line[column + direction]) {\n        var method = (extend ? \"selectWord\" : \"moveCursorShortWord\")\n            + (direction == 1 ? \"Right\" : \"Left\");\n        return editor.selection[method]();\n    }\n    if (direction == -1)\n        column--;\n    while (line[column]) {\n        var type = getType(line[column]) + getType(line[column + direction]);\n        column += direction;\n        if (direction == 1) {\n            if (type == \"WW\" && getType(line[column + 1]) == \"w\")\n                break;\n        }\n        else {\n            if (type == \"wW\") {\n                if (getType(line[column - 1]) == \"W\") {\n                    column -= 1;\n                    break;\n                }\n                else {\n                    continue;\n                }\n            }\n            if (type == \"Ww\")\n                break;\n        }\n        if (/w[s_oW]|_[sWo]|o[s_wW]|s[W]|W[so]/.test(type))\n            break;\n    }\n    if (direction == -1)\n        column++;\n    if (extend)\n        editor.selection.moveCursorTo(row, column);\n    else\n        editor.selection.moveTo(row, column);\n    function getType(x) {\n        if (!x)\n            return \"-\";\n        if (/\\s/.test(x))\n            return \"s\";\n        if (x == \"_\")\n            return \"_\";\n        if (x.toUpperCase() == x && x.toLowerCase() != x)\n            return \"W\";\n        if (x.toUpperCase() != x && x.toLowerCase() == x)\n            return \"w\";\n        return \"o\";\n    }\n}\nexports.handler = new HashHandler();\nexports.handler.addCommands([{\n        name: \"find_all_under\",\n        exec: function (editor) {\n            if (editor.selection.isEmpty())\n                editor.selection.selectWord();\n            editor.findAll();\n        },\n        readOnly: true\n    }, {\n        name: \"find_under\",\n        exec: function (editor) {\n            if (editor.selection.isEmpty())\n                editor.selection.selectWord();\n            editor.findNext();\n        },\n        readOnly: true\n    }, {\n        name: \"find_under_prev\",\n        exec: function (editor) {\n            if (editor.selection.isEmpty())\n                editor.selection.selectWord();\n            editor.findPrevious();\n        },\n        readOnly: true\n    }, {\n        name: \"find_under_expand\",\n        exec: function (editor) {\n            editor.selectMore(1, false, true);\n        },\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"find_under_expand_skip\",\n        exec: function (editor) {\n            editor.selectMore(1, true, true);\n        },\n        scrollIntoView: \"animate\",\n        readOnly: true\n    }, {\n        name: \"delete_to_hard_bol\",\n        exec: function (editor) {\n            var pos = editor.selection.getCursor();\n            editor.session.remove({\n                start: { row: pos.row, column: 0 },\n                end: pos\n            });\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"delete_to_hard_eol\",\n        exec: function (editor) {\n            var pos = editor.selection.getCursor();\n            editor.session.remove({\n                start: pos,\n                end: { row: pos.row, column: Infinity }\n            });\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"moveToWordStartLeft\",\n        exec: function (editor) {\n            editor.selection.moveCursorLongWordLeft();\n            editor.clearSelection();\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"moveToWordEndRight\",\n        exec: function (editor) {\n            editor.selection.moveCursorLongWordRight();\n            editor.clearSelection();\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"selectToWordStartLeft\",\n        exec: function (editor) {\n            var sel = editor.selection;\n            sel.$moveSelection(sel.moveCursorLongWordLeft);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"selectToWordEndRight\",\n        exec: function (editor) {\n            var sel = editor.selection;\n            sel.$moveSelection(sel.moveCursorLongWordRight);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\"\n    }, {\n        name: \"selectSubWordRight\",\n        exec: function (editor) {\n            moveBySubWords(editor, 1, true);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"selectSubWordLeft\",\n        exec: function (editor) {\n            moveBySubWords(editor, -1, true);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"moveSubWordRight\",\n        exec: function (editor) {\n            moveBySubWords(editor, 1);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }, {\n        name: \"moveSubWordLeft\",\n        exec: function (editor) {\n            moveBySubWords(editor, -1);\n        },\n        multiSelectAction: \"forEach\",\n        scrollIntoView: \"cursor\",\n        readOnly: true\n    }]);\n[{\n        bindKey: { mac: \"cmd-k cmd-backspace|cmd-backspace\", win: \"ctrl-shift-backspace|ctrl-k ctrl-backspace\" },\n        name: \"removetolinestarthard\"\n    }, {\n        bindKey: { mac: \"cmd-k cmd-k|cmd-delete|ctrl-k\", win: \"ctrl-shift-delete|ctrl-k ctrl-k\" },\n        name: \"removetolineendhard\"\n    }, {\n        bindKey: { mac: \"cmd-shift-d\", win: \"ctrl-shift-d\" },\n        name: \"duplicateSelection\"\n    }, {\n        bindKey: { mac: \"cmd-l\", win: \"ctrl-l\" },\n        name: \"expandtoline\"\n    },\n    {\n        bindKey: { mac: \"cmd-shift-a\", win: \"ctrl-shift-a\" },\n        name: \"expandSelection\",\n        args: { to: \"tag\" }\n    }, {\n        bindKey: { mac: \"cmd-shift-j\", win: \"ctrl-shift-j\" },\n        name: \"expandSelection\",\n        args: { to: \"indentation\" }\n    }, {\n        bindKey: { mac: \"ctrl-shift-m\", win: \"ctrl-shift-m\" },\n        name: \"expandSelection\",\n        args: { to: \"brackets\" }\n    }, {\n        bindKey: { mac: \"cmd-shift-space\", win: \"ctrl-shift-space\" },\n        name: \"expandSelection\",\n        args: { to: \"scope\" }\n    },\n    {\n        bindKey: { mac: \"ctrl-cmd-g\", win: \"alt-f3\" },\n        name: \"find_all_under\"\n    }, {\n        bindKey: { mac: \"alt-cmd-g\", win: \"ctrl-f3\" },\n        name: \"find_under\"\n    }, {\n        bindKey: { mac: \"shift-alt-cmd-g\", win: \"ctrl-shift-f3\" },\n        name: \"find_under_prev\"\n    }, {\n        bindKey: { mac: \"cmd-g\", win: \"f3\" },\n        name: \"findnext\"\n    }, {\n        bindKey: { mac: \"shift-cmd-g\", win: \"shift-f3\" },\n        name: \"findprevious\"\n    }, {\n        bindKey: { mac: \"cmd-d\", win: \"ctrl-d\" },\n        name: \"find_under_expand\"\n    }, {\n        bindKey: { mac: \"cmd-k cmd-d\", win: \"ctrl-k ctrl-d\" },\n        name: \"find_under_expand_skip\"\n    },\n    {\n        bindKey: { mac: \"cmd-alt-[\", win: \"ctrl-shift-[\" },\n        name: \"toggleFoldWidget\"\n    }, {\n        bindKey: { mac: \"cmd-alt-]\", win: \"ctrl-shift-]\" },\n        name: \"unfold\"\n    }, {\n        bindKey: { mac: \"cmd-k cmd-0|cmd-k cmd-j\", win: \"ctrl-k ctrl-0|ctrl-k ctrl-j\" },\n        name: \"unfoldall\"\n    }, {\n        bindKey: { mac: \"cmd-k cmd-1\", win: \"ctrl-k ctrl-1\" },\n        name: \"foldOther\",\n        args: { level: 1 }\n    },\n    {\n        bindKey: { win: \"ctrl-left\", mac: \"alt-left\" },\n        name: \"moveToWordStartLeft\"\n    }, {\n        bindKey: { win: \"ctrl-right\", mac: \"alt-right\" },\n        name: \"moveToWordEndRight\"\n    }, {\n        bindKey: { win: \"ctrl-shift-left\", mac: \"alt-shift-left\" },\n        name: \"selectToWordStartLeft\"\n    }, {\n        bindKey: { win: \"ctrl-shift-right\", mac: \"alt-shift-right\" },\n        name: \"selectToWordEndRight\"\n    },\n    {\n        bindKey: { mac: \"ctrl-alt-shift-right|ctrl-shift-right\", win: \"alt-shift-right\" },\n        name: \"selectSubWordRight\"\n    }, {\n        bindKey: { mac: \"ctrl-alt-shift-left|ctrl-shift-left\", win: \"alt-shift-left\" },\n        name: \"selectSubWordLeft\"\n    }, {\n        bindKey: { mac: \"ctrl-alt-right|ctrl-right\", win: \"alt-right\" },\n        name: \"moveSubWordRight\"\n    }, {\n        bindKey: { mac: \"ctrl-alt-left|ctrl-left\", win: \"alt-left\" },\n        name: \"moveSubWordLeft\"\n    },\n    {\n        bindKey: { mac: \"ctrl-m\", win: \"ctrl-m\" },\n        name: \"jumptomatching\",\n        args: { to: \"brackets\" }\n    },\n    {\n        bindKey: { mac: \"ctrl-f6\", win: \"ctrl-f6\" },\n        name: \"goToNextError\"\n    }, {\n        bindKey: { mac: \"ctrl-shift-f6\", win: \"ctrl-shift-f6\" },\n        name: \"goToPreviousError\"\n    },\n    {\n        bindKey: { mac: \"ctrl-o\" },\n        name: \"splitline\"\n    },\n    {\n        bindKey: { mac: \"ctrl-shift-w\", win: \"alt-shift-w\" },\n        name: \"surrowndWithTag\"\n    }, {\n        bindKey: { mac: \"cmd-alt-.\", win: \"alt-.\" },\n        name: \"close_tag\"\n    },\n    {\n        bindKey: { mac: \"cmd-j\", win: \"ctrl-j\" },\n        name: \"joinlines\"\n    },\n    {\n        bindKey: { mac: \"ctrl--\", win: \"alt--\" },\n        name: \"jumpBack\"\n    }, {\n        bindKey: { mac: \"ctrl-shift--\", win: \"alt-shift--\" },\n        name: \"jumpForward\"\n    },\n    {\n        bindKey: { mac: \"cmd-k cmd-l\", win: \"ctrl-k ctrl-l\" },\n        name: \"tolowercase\"\n    }, {\n        bindKey: { mac: \"cmd-k cmd-u\", win: \"ctrl-k ctrl-u\" },\n        name: \"touppercase\"\n    },\n    {\n        bindKey: { mac: \"cmd-shift-v\", win: \"ctrl-shift-v\" },\n        name: \"paste_and_indent\"\n    }, {\n        bindKey: { mac: \"cmd-k cmd-v|cmd-alt-v\", win: \"ctrl-k ctrl-v\" },\n        name: \"paste_from_history\"\n    },\n    {\n        bindKey: { mac: \"cmd-shift-enter\", win: \"ctrl-shift-enter\" },\n        name: \"addLineBefore\"\n    }, {\n        bindKey: { mac: \"cmd-enter\", win: \"ctrl-enter\" },\n        name: \"addLineAfter\"\n    }, {\n        bindKey: { mac: \"ctrl-shift-k\", win: \"ctrl-shift-k\" },\n        name: \"removeline\"\n    }, {\n        bindKey: { mac: \"ctrl-alt-up\", win: \"ctrl-up\" },\n        name: \"scrollup\"\n    }, {\n        bindKey: { mac: \"ctrl-alt-down\", win: \"ctrl-down\" },\n        name: \"scrolldown\"\n    }, {\n        bindKey: { mac: \"cmd-a\", win: \"ctrl-a\" },\n        name: \"selectall\"\n    }, {\n        bindKey: { linux: \"alt-shift-down\", mac: \"ctrl-shift-down\", win: \"ctrl-alt-down\" },\n        name: \"addCursorBelow\"\n    }, {\n        bindKey: { linux: \"alt-shift-up\", mac: \"ctrl-shift-up\", win: \"ctrl-alt-up\" },\n        name: \"addCursorAbove\"\n    },\n    {\n        bindKey: { mac: \"cmd-k cmd-c|ctrl-l\", win: \"ctrl-k ctrl-c\" },\n        name: \"centerselection\"\n    },\n    {\n        bindKey: { mac: \"f5\", win: \"f9\" },\n        name: \"sortlines\"\n    },\n    {\n        bindKey: { mac: \"ctrl-f5\", win: \"ctrl-f9\" },\n        name: \"sortlines\",\n        args: { caseSensitive: true }\n    },\n    {\n        bindKey: { mac: \"cmd-shift-l\", win: \"ctrl-shift-l\" },\n        name: \"splitSelectionIntoLines\"\n    }, {\n        bindKey: { mac: \"ctrl-cmd-down\", win: \"ctrl-shift-down\" },\n        name: \"movelinesdown\"\n    }, {\n        bindKey: { mac: \"ctrl-cmd-up\", win: \"ctrl-shift-up\" },\n        name: \"movelinesup\"\n    }, {\n        bindKey: { mac: \"alt-down\", win: \"alt-down\" },\n        name: \"modifyNumberDown\"\n    }, {\n        bindKey: { mac: \"alt-up\", win: \"alt-up\" },\n        name: \"modifyNumberUp\"\n    }, {\n        bindKey: { mac: \"cmd-/\", win: \"ctrl-/\" },\n        name: \"togglecomment\"\n    }, {\n        bindKey: { mac: \"cmd-alt-/\", win: \"ctrl-shift-/\" },\n        name: \"toggleBlockComment\"\n    },\n    {\n        bindKey: { linux: \"ctrl-alt-q\", mac: \"ctrl-q\", win: \"ctrl-q\" },\n        name: \"togglerecording\"\n    }, {\n        bindKey: { linux: \"ctrl-alt-shift-q\", mac: \"ctrl-shift-q\", win: \"ctrl-shift-q\" },\n        name: \"replaymacro\"\n    },\n    {\n        bindKey: { mac: \"ctrl-t\", win: \"ctrl-t\" },\n        name: \"transpose\"\n    }\n].forEach(function (binding) {\n    var command = exports.handler.commands[binding.name];\n    if (command)\n        command.bindKey = binding.bindKey;\n    exports.handler.bindKey(binding.bindKey, command || binding.name);\n});\n\n});                (function() {\n                    ace.require([\"ace/keyboard/sublime\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/keybinding-vim.js",
    "content": "ace.define(\"ace/ext/hardwrap\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/editor\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nfunction hardWrap(editor, options) {\n    var max = options.column || editor.getOption(\"printMarginColumn\");\n    var allowMerge = options.allowMerge != false;\n    var row = Math.min(options.startRow, options.endRow);\n    var endRow = Math.max(options.startRow, options.endRow);\n    var session = editor.session;\n    while (row <= endRow) {\n        var line = session.getLine(row);\n        if (line.length > max) {\n            var space = findSpace(line, max, 5);\n            if (space) {\n                var indentation = /^\\s*/.exec(line)[0];\n                session.replace(new Range(row, space.start, row, space.end), \"\\n\" + indentation);\n            }\n            endRow++;\n        }\n        else if (allowMerge && /\\S/.test(line) && row != endRow) {\n            var nextLine = session.getLine(row + 1);\n            if (nextLine && /\\S/.test(nextLine)) {\n                var trimmedLine = line.replace(/\\s+$/, \"\");\n                var trimmedNextLine = nextLine.replace(/^\\s+/, \"\");\n                var mergedLine = trimmedLine + \" \" + trimmedNextLine;\n                var space = findSpace(mergedLine, max, 5);\n                if (space && space.start > trimmedLine.length || mergedLine.length < max) {\n                    var replaceRange = new Range(row, trimmedLine.length, row + 1, nextLine.length - trimmedNextLine.length);\n                    session.replace(replaceRange, \" \");\n                    row--;\n                    endRow--;\n                }\n                else if (trimmedLine.length < line.length) {\n                    session.remove(new Range(row, trimmedLine.length, row, line.length));\n                }\n            }\n        }\n        row++;\n    }\n    function findSpace(line, max, min) {\n        if (line.length < max)\n            return;\n        var before = line.slice(0, max);\n        var after = line.slice(max);\n        var spaceAfter = /^(?:(\\s+)|(\\S+)(\\s+))/.exec(after);\n        var spaceBefore = /(?:(\\s+)|(\\s+)(\\S+))$/.exec(before);\n        var start = 0;\n        var end = 0;\n        if (spaceBefore && !spaceBefore[2]) {\n            start = max - spaceBefore[1].length;\n            end = max;\n        }\n        if (spaceAfter && !spaceAfter[2]) {\n            if (!start)\n                start = max;\n            end = max + spaceAfter[1].length;\n        }\n        if (start) {\n            return {\n                start: start,\n                end: end\n            };\n        }\n        if (spaceBefore && spaceBefore[2] && spaceBefore.index > min) {\n            return {\n                start: spaceBefore.index,\n                end: spaceBefore.index + spaceBefore[2].length\n            };\n        }\n        if (spaceAfter && spaceAfter[2]) {\n            start = max + spaceAfter[2].length;\n            return {\n                start: start,\n                end: start + spaceAfter[3].length\n            };\n        }\n    }\n}\nfunction wrapAfterInput(e) {\n    if (e.command.name == \"insertstring\" && /\\S/.test(e.args)) {\n        var editor = e.editor;\n        var cursor = editor.selection.cursor;\n        if (cursor.column <= editor.renderer.$printMarginColumn)\n            return;\n        var lastDelta = editor.session.$undoManager.$lastDelta;\n        hardWrap(editor, {\n            startRow: cursor.row, endRow: cursor.row,\n            allowMerge: false\n        });\n        if (lastDelta != editor.session.$undoManager.$lastDelta)\n            editor.session.markUndoGroup();\n    }\n}\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    hardWrap: {\n        set: function (val) {\n            if (val) {\n                this.commands.on(\"afterExec\", wrapAfterInput);\n            }\n            else {\n                this.commands.off(\"afterExec\", wrapAfterInput);\n            }\n        },\n        value: false\n    }\n});\nexports.hardWrap = hardWrap;\n\n});\n\nace.define(\"ace/keyboard/vim\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/search\",\"ace/lib/useragent\",\"ace/search_highlight\",\"ace/commands/multi_select_commands\",\"ace/mode/text\",\"ace/ext/hardwrap\",\"ace/multi_select\"], function(require, exports, module){// CodeMirror, copyright (c) by Marijn Haverbeke and others\n'use strict';\nfunction log() {\n    var d = \"\";\n    function format(p) {\n        if (typeof p != \"object\")\n            return p + \"\";\n        if (\"line\" in p) {\n            return p.line + \":\" + p.ch;\n        }\n        if (\"anchor\" in p) {\n            return format(p.anchor) + \"->\" + format(p.head);\n        }\n        if (Array.isArray(p))\n            return \"[\" + p.map(function (x) {\n                return format(x);\n            }) + \"]\";\n        return JSON.stringify(p);\n    }\n    for (var i = 0; i < arguments.length; i++) {\n        var p = arguments[i];\n        var f = format(p);\n        d += f + \"  \";\n    }\n    console.log(d);\n}\nvar Range = require(\"../range\").Range;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar domLib = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar KEYS = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar Search = require(\"../search\").Search;\nvar useragent = require(\"../lib/useragent\");\nvar SearchHighlight = require(\"../search_highlight\").SearchHighlight;\nvar multiSelectCommands = require(\"../commands/multi_select_commands\");\nvar TextModeTokenRe = require(\"../mode/text\").Mode.prototype.tokenRe;\nvar hardWrap = require(\"../ext/hardwrap\").hardWrap;\nrequire(\"../multi_select\");\nvar CodeMirror = function (ace) {\n    this.ace = ace;\n    this.state = {};\n    this.marks = {};\n    this.options = {};\n    this.$uid = 0;\n    this.onChange = this.onChange.bind(this);\n    this.onSelectionChange = this.onSelectionChange.bind(this);\n    this.onBeforeEndOperation = this.onBeforeEndOperation.bind(this);\n    this.ace.on('change', this.onChange);\n    this.ace.on('changeSelection', this.onSelectionChange);\n    this.ace.on('beforeEndOperation', this.onBeforeEndOperation);\n};\nCodeMirror.Pos = function (line, ch) {\n    if (!(this instanceof Pos))\n        return new Pos(line, ch);\n    this.line = line;\n    this.ch = ch;\n};\nCodeMirror.defineOption = function (name, val, setter) { };\nCodeMirror.commands = {\n    redo: function (cm) { cm.ace.redo(); },\n    undo: function (cm) { cm.ace.undo(); },\n    newlineAndIndent: function (cm) { cm.ace.insert(\"\\n\"); },\n    goLineLeft: function (cm) { cm.ace.selection.moveCursorLineStart(); },\n    goLineRight: function (cm) { cm.ace.selection.moveCursorLineEnd(); }\n};\nCodeMirror.keyMap = {};\nCodeMirror.addClass = CodeMirror.rmClass = function () { };\nCodeMirror.e_stop = CodeMirror.e_preventDefault = event.stopEvent;\nCodeMirror.keyName = function (e) {\n    var key = (KEYS[e.keyCode] || e.key || \"\");\n    if (key.length == 1)\n        key = key.toUpperCase();\n    key = event.getModifierString(e).replace(/(^|-)\\w/g, function (m) {\n        return m.toUpperCase();\n    }) + key;\n    return key;\n};\nCodeMirror.keyMap['default'] = function (key) {\n    return function (cm) {\n        var cmd = cm.ace.commands.commandKeyBinding[key.toLowerCase()];\n        return cmd && cm.ace.execCommand(cmd) !== false;\n    };\n};\nCodeMirror.lookupKey = function lookupKey(key, map, handle) {\n    if (!map)\n        map = \"default\";\n    if (typeof map == \"string\")\n        map = CodeMirror.keyMap[map];\n    var found = typeof map == \"function\" ? map(key) : map[key];\n    if (found === false)\n        return \"nothing\";\n    if (found === \"...\")\n        return \"multi\";\n    if (found != null && handle(found))\n        return \"handled\";\n    if (map.fallthrough) {\n        if (!Array.isArray(map.fallthrough))\n            return lookupKey(key, map.fallthrough, handle);\n        for (var i = 0; i < map.fallthrough.length; i++) {\n            var result = lookupKey(key, map.fallthrough[i], handle);\n            if (result)\n                return result;\n        }\n    }\n};\nCodeMirror.findMatchingTag = function (cm, head) {\n    return cm.findMatchingTag(head);\n};\nCodeMirror.findEnclosingTag = function (cm, head) {\n};\nCodeMirror.signal = function (o, name, e) { return o._signal(name, e); };\nCodeMirror.on = event.addListener;\nCodeMirror.off = event.removeListener;\nCodeMirror.isWordChar = function (ch) {\n    if (ch < \"\\x7f\")\n        return /^\\w$/.test(ch);\n    TextModeTokenRe.lastIndex = 0;\n    return TextModeTokenRe.test(ch);\n};\n(function () {\n    oop.implement(CodeMirror.prototype, EventEmitter);\n    this.destroy = function () {\n        this.ace.off('change', this.onChange);\n        this.ace.off('changeSelection', this.onSelectionChange);\n        this.ace.off('beforeEndOperation', this.onBeforeEndOperation);\n        this.removeOverlay();\n    };\n    this.virtualSelectionMode = function () {\n        return this.ace.inVirtualSelectionMode && this.ace.selection.index;\n    };\n    this.onChange = function (delta) {\n        var change = { text: delta.action[0] == 'i' ? delta.lines : [] };\n        var curOp = this.curOp = this.curOp || {};\n        if (!curOp.changeHandlers)\n            curOp.changeHandlers = this._eventRegistry[\"change\"] && this._eventRegistry[\"change\"].slice();\n        if (!curOp.lastChange) {\n            curOp.lastChange = curOp.change = change;\n        }\n        else {\n            curOp.lastChange.next = curOp.lastChange = change;\n        }\n        this.$updateMarkers(delta);\n    };\n    this.onSelectionChange = function () {\n        var curOp = this.curOp = this.curOp || {};\n        if (!curOp.cursorActivityHandlers)\n            curOp.cursorActivityHandlers = this._eventRegistry[\"cursorActivity\"] && this._eventRegistry[\"cursorActivity\"].slice();\n        this.curOp.cursorActivity = true;\n        if (this.ace.inMultiSelectMode) {\n            this.ace.keyBinding.removeKeyboardHandler(multiSelectCommands.keyboardHandler);\n        }\n    };\n    this.operation = function (fn, force) {\n        if (!force && this.curOp || force && this.curOp && this.curOp.force) {\n            return fn();\n        }\n        if (force || !this.ace.curOp) {\n            if (this.curOp)\n                this.onBeforeEndOperation();\n        }\n        if (!this.ace.curOp) {\n            var prevOp = this.ace.prevOp;\n            this.ace.startOperation({\n                command: { name: \"vim\", scrollIntoView: \"cursor\" }\n            });\n        }\n        var curOp = this.curOp = this.curOp || {};\n        this.curOp.force = force;\n        var result = fn();\n        if (this.ace.curOp && this.ace.curOp.command.name == \"vim\") {\n            if (this.state.dialog)\n                this.ace.curOp.command.scrollIntoView = false;\n            this.ace.endOperation();\n            if (!curOp.cursorActivity && !curOp.lastChange && prevOp)\n                this.ace.prevOp = prevOp;\n        }\n        if (force || !this.ace.curOp) {\n            if (this.curOp)\n                this.onBeforeEndOperation();\n        }\n        return result;\n    };\n    this.onBeforeEndOperation = function () {\n        var op = this.curOp;\n        if (op) {\n            if (op.change) {\n                this.signal(\"change\", op.change, op);\n            }\n            if (op && op.cursorActivity) {\n                this.signal(\"cursorActivity\", null, op);\n            }\n            this.curOp = null;\n        }\n    };\n    this.signal = function (eventName, e, handlers) {\n        var listeners = handlers ? handlers[eventName + \"Handlers\"]\n            : (this._eventRegistry || {})[eventName];\n        if (!listeners)\n            return;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++)\n            listeners[i](this, e);\n    };\n    this.firstLine = function () { return 0; };\n    this.lastLine = function () { return this.ace.session.getLength() - 1; };\n    this.lineCount = function () { return this.ace.session.getLength(); };\n    this.setCursor = function (line, ch) {\n        if (typeof line === 'object') {\n            ch = line.ch;\n            line = line.line;\n        }\n        var shouldScroll = !this.curOp && !this.ace.inVirtualSelectionMode;\n        if (!this.ace.inVirtualSelectionMode)\n            this.ace.exitMultiSelectMode();\n        this.ace.session.unfold({ row: line, column: ch });\n        this.ace.selection.moveTo(line, ch);\n        if (shouldScroll) {\n            this.ace.renderer.scrollCursorIntoView();\n            this.ace.endOperation();\n        }\n    };\n    this.getCursor = function (p) {\n        var sel = this.ace.selection;\n        var pos = p == 'anchor' ? (sel.isEmpty() ? sel.lead : sel.anchor) :\n            p == 'head' || !p ? sel.lead : sel.getRange()[p];\n        return toCmPos(pos);\n    };\n    this.listSelections = function (p) {\n        var ranges = this.ace.multiSelect.rangeList.ranges;\n        if (!ranges.length || this.ace.inVirtualSelectionMode)\n            return [{ anchor: this.getCursor('anchor'), head: this.getCursor('head') }];\n        return ranges.map(function (r) {\n            return {\n                anchor: this.clipPos(toCmPos(r.cursor == r.end ? r.start : r.end)),\n                head: this.clipPos(toCmPos(r.cursor))\n            };\n        }, this);\n    };\n    this.setSelections = function (p, primIndex) {\n        var sel = this.ace.multiSelect;\n        var ranges = p.map(function (x) {\n            var anchor = toAcePos(x.anchor);\n            var head = toAcePos(x.head);\n            var r = Range.comparePoints(anchor, head) < 0\n                ? new Range.fromPoints(anchor, head)\n                : new Range.fromPoints(head, anchor);\n            r.cursor = Range.comparePoints(r.start, head) ? r.end : r.start;\n            return r;\n        });\n        if (this.ace.inVirtualSelectionMode) {\n            this.ace.selection.fromOrientedRange(ranges[0]);\n            return;\n        }\n        if (!primIndex) {\n            ranges = ranges.reverse();\n        }\n        else if (ranges[primIndex]) {\n            ranges.push(ranges.splice(primIndex, 1)[0]);\n        }\n        sel.toSingleRange(ranges[0].clone());\n        var session = this.ace.session;\n        for (var i = 0; i < ranges.length; i++) {\n            var range = session.$clipRangeToDocument(ranges[i]); // todo why ace doesn't do this?\n            sel.addRange(range);\n        }\n    };\n    this.setSelection = function (a, h, options) {\n        var sel = this.ace.selection;\n        sel.moveTo(a.line, a.ch);\n        sel.selectTo(h.line, h.ch);\n        if (options && options.origin == '*mouse') {\n            this.onBeforeEndOperation();\n        }\n    };\n    this.somethingSelected = function (p) {\n        return !this.ace.selection.isEmpty();\n    };\n    this.clipPos = function (p) {\n        var pos = this.ace.session.$clipPositionToDocument(p.line, p.ch);\n        return toCmPos(pos);\n    };\n    this.foldCode = function (pos) {\n        this.ace.session.$toggleFoldWidget(pos.line, {});\n    };\n    this.markText = function (cursor) {\n        return { clear: function () { }, find: function () { } };\n    };\n    this.$updateMarkers = function (delta) {\n        var isInsert = delta.action == \"insert\";\n        var start = delta.start;\n        var end = delta.end;\n        var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n        var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n        if (isInsert)\n            end = start;\n        for (var i in this.marks) {\n            var point = this.marks[i];\n            var cmp = Range.comparePoints(point, start);\n            if (cmp < 0) {\n                continue; // delta starts after the range\n            }\n            if (cmp === 0) {\n                if (isInsert) {\n                    if (point.bias == 1) {\n                        cmp = 1;\n                    }\n                    else {\n                        point.bias = -1;\n                        continue;\n                    }\n                }\n            }\n            var cmp2 = isInsert ? cmp : Range.comparePoints(point, end);\n            if (cmp2 > 0) {\n                point.row += rowShift;\n                point.column += point.row == end.row ? colShift : 0;\n                continue;\n            }\n            if (!isInsert && cmp2 <= 0) {\n                point.row = start.row;\n                point.column = start.column;\n                if (cmp2 === 0)\n                    point.bias = 1;\n            }\n        }\n    };\n    var Marker = function (cm, id, row, column) {\n        this.cm = cm;\n        this.id = id;\n        this.row = row;\n        this.column = column;\n        cm.marks[this.id] = this;\n    };\n    Marker.prototype.clear = function () { delete this.cm.marks[this.id]; };\n    Marker.prototype.find = function () { return toCmPos(this); };\n    this.setBookmark = function (cursor, options) {\n        var bm = new Marker(this, this.$uid++, cursor.line, cursor.ch);\n        if (!options || !options.insertLeft)\n            bm.$insertRight = true;\n        this.marks[bm.id] = bm;\n        return bm;\n    };\n    this.moveH = function (increment, unit) {\n        if (unit == 'char') {\n            var sel = this.ace.selection;\n            sel.clearSelection();\n            sel.moveCursorBy(0, increment);\n        }\n    };\n    this.findPosV = function (start, amount, unit, goalColumn) {\n        if (unit == 'page') {\n            var renderer = this.ace.renderer;\n            var config = renderer.layerConfig;\n            amount = amount * Math.floor(config.height / config.lineHeight);\n            unit = 'line';\n        }\n        if (unit == 'line') {\n            var screenPos = this.ace.session.documentToScreenPosition(start.line, start.ch);\n            if (goalColumn != null)\n                screenPos.column = goalColumn;\n            screenPos.row += amount;\n            screenPos.row = Math.min(Math.max(0, screenPos.row), this.ace.session.getScreenLength() - 1);\n            var pos = this.ace.session.screenToDocumentPosition(screenPos.row, screenPos.column);\n            return toCmPos(pos);\n        }\n        else {\n            debugger;\n        }\n    };\n    this.charCoords = function (pos, mode) {\n        if (mode == 'div' || !mode) {\n            var sc = this.ace.session.documentToScreenPosition(pos.line, pos.ch);\n            return { left: sc.column, top: sc.row };\n        }\n        if (mode == 'local') {\n            var renderer = this.ace.renderer;\n            var sc = this.ace.session.documentToScreenPosition(pos.line, pos.ch);\n            var lh = renderer.layerConfig.lineHeight;\n            var cw = renderer.layerConfig.characterWidth;\n            var top = lh * sc.row;\n            return { left: sc.column * cw, top: top, bottom: top + lh };\n        }\n    };\n    this.coordsChar = function (pos, mode) {\n        var renderer = this.ace.renderer;\n        if (mode == 'local') {\n            var row = Math.max(0, Math.floor(pos.top / renderer.lineHeight));\n            var col = Math.max(0, Math.floor(pos.left / renderer.characterWidth));\n            var ch = renderer.session.screenToDocumentPosition(row, col);\n            return toCmPos(ch);\n        }\n        else if (mode == 'div') {\n            throw \"not implemented\";\n        }\n    };\n    this.getSearchCursor = function (query, pos, caseFold) {\n        var caseSensitive = false;\n        var isRegexp = false;\n        if (query instanceof RegExp && !query.global) {\n            caseSensitive = !query.ignoreCase;\n            query = query.source;\n            isRegexp = true;\n        }\n        if (query == \"\\\\n\") {\n            query = \"\\n\";\n            isRegexp = false;\n        }\n        var search = new Search();\n        if (pos.ch == undefined)\n            pos.ch = Number.MAX_VALUE;\n        var acePos = { row: pos.line, column: pos.ch };\n        var cm = this;\n        var last = null;\n        return {\n            findNext: function () { return this.find(false); },\n            findPrevious: function () { return this.find(true); },\n            find: function (back) {\n                search.setOptions({\n                    needle: query,\n                    caseSensitive: caseSensitive,\n                    wrap: false,\n                    backwards: back,\n                    regExp: isRegexp,\n                    start: last || acePos\n                });\n                var range = search.find(cm.ace.session);\n                last = range;\n                return last && [!last.isEmpty()];\n            },\n            from: function () { return last && toCmPos(last.start); },\n            to: function () { return last && toCmPos(last.end); },\n            replace: function (text) {\n                if (last) {\n                    last.end = cm.ace.session.doc.replace(last, text);\n                }\n            }\n        };\n    };\n    this.scrollTo = function (x, y) {\n        var renderer = this.ace.renderer;\n        var config = renderer.layerConfig;\n        var maxHeight = config.maxHeight;\n        maxHeight -= (renderer.$size.scrollerHeight - renderer.lineHeight) * renderer.$scrollPastEnd;\n        if (y != null)\n            this.ace.session.setScrollTop(Math.max(0, Math.min(y, maxHeight)));\n        if (x != null)\n            this.ace.session.setScrollLeft(Math.max(0, Math.min(x, config.width)));\n    };\n    this.scrollInfo = function () { return 0; };\n    this.scrollIntoView = function (pos, margin) {\n        if (pos) {\n            var renderer = this.ace.renderer;\n            var viewMargin = { \"top\": 0, \"bottom\": margin };\n            renderer.scrollCursorIntoView(toAcePos(pos), (renderer.lineHeight * 2) / renderer.$size.scrollerHeight, viewMargin);\n        }\n    };\n    this.getLine = function (row) { return this.ace.session.getLine(row); };\n    this.getRange = function (s, e) {\n        return this.ace.session.getTextRange(new Range(s.line, s.ch, e.line, e.ch));\n    };\n    this.replaceRange = function (text, s, e) {\n        if (!e)\n            e = s;\n        var range = new Range(s.line, s.ch, e.line, e.ch);\n        this.ace.session.$clipRangeToDocument(range);\n        return this.ace.session.replace(range, text);\n    };\n    this.replaceSelection =\n        this.replaceSelections = function (p) {\n            var sel = this.ace.selection;\n            if (this.ace.inVirtualSelectionMode) {\n                this.ace.session.replace(sel.getRange(), p[0] || \"\");\n                return;\n            }\n            sel.inVirtualSelectionMode = true;\n            var ranges = sel.rangeList.ranges;\n            if (!ranges.length)\n                ranges = [this.ace.multiSelect.getRange()];\n            for (var i = ranges.length; i--;)\n                this.ace.session.replace(ranges[i], p[i] || \"\");\n            sel.inVirtualSelectionMode = false;\n        };\n    this.getSelection = function () {\n        return this.ace.getSelectedText();\n    };\n    this.getSelections = function () {\n        return this.listSelections().map(function (x) {\n            return this.getRange(x.anchor, x.head);\n        }, this);\n    };\n    this.getInputField = function () {\n        return this.ace.textInput.getElement();\n    };\n    this.getWrapperElement = function () {\n        return this.ace.container;\n    };\n    var optMap = {\n        indentWithTabs: \"useSoftTabs\",\n        indentUnit: \"tabSize\",\n        tabSize: \"tabSize\",\n        firstLineNumber: \"firstLineNumber\",\n        readOnly: \"readOnly\"\n    };\n    this.setOption = function (name, val) {\n        this.state[name] = val;\n        switch (name) {\n            case 'indentWithTabs':\n                name = optMap[name];\n                val = !val;\n                break;\n            case 'keyMap':\n                this.state.$keyMap = val;\n                return;\n                break;\n            default:\n                name = optMap[name];\n        }\n        if (name)\n            this.ace.setOption(name, val);\n    };\n    this.getOption = function (name) {\n        var val;\n        var aceOpt = optMap[name];\n        if (aceOpt)\n            val = this.ace.getOption(aceOpt);\n        switch (name) {\n            case 'indentWithTabs':\n                name = optMap[name];\n                return !val;\n            case 'keyMap':\n                return this.state.$keyMap || 'vim';\n        }\n        return aceOpt ? val : this.state[name];\n    };\n    this.toggleOverwrite = function (on) {\n        this.state.overwrite = on;\n        return this.ace.setOverwrite(on);\n    };\n    this.addOverlay = function (o) {\n        if (!this.$searchHighlight || !this.$searchHighlight.session) {\n            var highlight = new SearchHighlight(null, \"ace_highlight-marker\", \"text\");\n            var marker = this.ace.session.addDynamicMarker(highlight);\n            highlight.id = marker.id;\n            highlight.session = this.ace.session;\n            highlight.destroy = function (o) {\n                highlight.session.off(\"change\", highlight.updateOnChange);\n                highlight.session.off(\"changeEditor\", highlight.destroy);\n                highlight.session.removeMarker(highlight.id);\n                highlight.session = null;\n            };\n            highlight.updateOnChange = function (delta) {\n                var row = delta.start.row;\n                if (row == delta.end.row)\n                    highlight.cache[row] = undefined;\n                else\n                    highlight.cache.splice(row, highlight.cache.length);\n            };\n            highlight.session.on(\"changeEditor\", highlight.destroy);\n            highlight.session.on(\"change\", highlight.updateOnChange);\n        }\n        var re = new RegExp(o.query.source, \"gmi\");\n        this.$searchHighlight = o.highlight = highlight;\n        this.$searchHighlight.setRegexp(re);\n        this.ace.renderer.updateBackMarkers();\n    };\n    this.removeOverlay = function (o) {\n        if (this.$searchHighlight && this.$searchHighlight.session) {\n            this.$searchHighlight.destroy();\n        }\n    };\n    this.getScrollInfo = function () {\n        var renderer = this.ace.renderer;\n        var config = renderer.layerConfig;\n        return {\n            left: renderer.scrollLeft,\n            top: renderer.scrollTop,\n            height: config.maxHeight,\n            width: config.width,\n            clientHeight: config.height,\n            clientWidth: config.width\n        };\n    };\n    this.getValue = function () {\n        return this.ace.getValue();\n    };\n    this.setValue = function (v) {\n        return this.ace.setValue(v, -1);\n    };\n    this.getTokenTypeAt = function (pos) {\n        var token = this.ace.session.getTokenAt(pos.line, pos.ch);\n        return token && /comment|string/.test(token.type) ? \"string\" : \"\";\n    };\n    this.findMatchingBracket = function (pos) {\n        var m = this.ace.session.findMatchingBracket(toAcePos(pos));\n        return { to: m && toCmPos(m) };\n    };\n    this.findMatchingTag = function (pos) {\n        var m = this.ace.session.getMatchingTags(toAcePos(pos));\n        if (!m)\n            return;\n        return {\n            open: {\n                from: toCmPos(m.openTag.start),\n                to: toCmPos(m.openTag.end)\n            },\n            close: {\n                from: toCmPos(m.closeTag.start),\n                to: toCmPos(m.closeTag.end)\n            }\n        };\n    };\n    this.indentLine = function (line, method) {\n        if (method === true)\n            this.ace.session.indentRows(line, line, \"\\t\");\n        else if (method === false)\n            this.ace.session.outdentRows(new Range(line, 0, line, 0));\n    };\n    this.indexFromPos = function (pos) {\n        return this.ace.session.doc.positionToIndex(toAcePos(pos));\n    };\n    this.posFromIndex = function (index) {\n        return toCmPos(this.ace.session.doc.indexToPosition(index));\n    };\n    this.focus = function (index) {\n        return this.ace.textInput.focus();\n    };\n    this.blur = function (index) {\n        return this.ace.blur();\n    };\n    this.defaultTextHeight = function (index) {\n        return this.ace.renderer.layerConfig.lineHeight;\n    };\n    this.scanForBracket = function (pos, dir, _, options) {\n        var re = options.bracketRegex.source;\n        var tokenRe = /paren|text|operator|tag/;\n        if (dir == 1) {\n            var m = this.ace.session.$findClosingBracket(re.slice(1, 2), toAcePos(pos), tokenRe);\n        }\n        else {\n            var m = this.ace.session.$findOpeningBracket(re.slice(-2, -1), { row: pos.line, column: pos.ch + 1 }, tokenRe);\n        }\n        return m && { pos: toCmPos(m) };\n    };\n    this.refresh = function () {\n        return this.ace.resize(true);\n    };\n    this.getMode = function () {\n        return { name: this.getOption(\"mode\") };\n    };\n    this.execCommand = function (name) {\n        if (CodeMirror.commands.hasOwnProperty(name))\n            return CodeMirror.commands[name](this);\n        if (name == \"indentAuto\")\n            return this.ace.execCommand(\"autoindent\");\n        console.log(name + \" is not implemented\");\n    };\n    this.getLineNumber = function (handle) {\n        return handle.row;\n    };\n    this.getLineHandle = function (row) {\n        return { text: this.ace.session.getLine(row), row: row };\n    };\n}).call(CodeMirror.prototype);\nfunction toAcePos(cmPos) {\n    return { row: cmPos.line, column: cmPos.ch };\n}\nfunction toCmPos(acePos) {\n    return new Pos(acePos.row, acePos.column);\n}\nvar StringStream = CodeMirror.StringStream = function (string, tabSize) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n};\nStringStream.prototype = {\n    eol: function () { return this.pos >= this.string.length; },\n    sol: function () { return this.pos == this.lineStart; },\n    peek: function () { return this.string.charAt(this.pos) || undefined; },\n    next: function () {\n        if (this.pos < this.string.length)\n            return this.string.charAt(this.pos++);\n    },\n    eat: function (match) {\n        var ch = this.string.charAt(this.pos);\n        if (typeof match == \"string\")\n            var ok = ch == match;\n        else\n            var ok = ch && (match.test ? match.test(ch) : match(ch));\n        if (ok) {\n            ++this.pos;\n            return ch;\n        }\n    },\n    eatWhile: function (match) {\n        var start = this.pos;\n        while (this.eat(match)) { }\n        return this.pos > start;\n    },\n    eatSpace: function () {\n        var start = this.pos;\n        while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))\n            ++this.pos;\n        return this.pos > start;\n    },\n    skipToEnd: function () { this.pos = this.string.length; },\n    skipTo: function (ch) {\n        var found = this.string.indexOf(ch, this.pos);\n        if (found > -1) {\n            this.pos = found;\n            return true;\n        }\n    },\n    backUp: function (n) { this.pos -= n; },\n    column: function () {\n        throw \"not implemented\";\n    },\n    indentation: function () {\n        throw \"not implemented\";\n    },\n    match: function (pattern, consume, caseInsensitive) {\n        if (typeof pattern == \"string\") {\n            var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n            var substr = this.string.substr(this.pos, pattern.length);\n            if (cased(substr) == cased(pattern)) {\n                if (consume !== false)\n                    this.pos += pattern.length;\n                return true;\n            }\n        }\n        else {\n            var match = this.string.slice(this.pos).match(pattern);\n            if (match && match.index > 0)\n                return null;\n            if (match && consume !== false)\n                this.pos += match[0].length;\n            return match;\n        }\n    },\n    current: function () { return this.string.slice(this.start, this.pos); },\n    hideFirstChars: function (n, inner) {\n        this.lineStart += n;\n        try {\n            return inner();\n        }\n        finally {\n            this.lineStart -= n;\n        }\n    }\n};\nCodeMirror.defineExtension = function (name, fn) {\n    CodeMirror.prototype[name] = fn;\n};\ndomLib.importCssString(\".normal-mode .ace_cursor{\\n    border: none;\\n    background-color: rgba(255,0,0,0.5);\\n}\\n.normal-mode .ace_hidden-cursors .ace_cursor{\\n  background-color: transparent;\\n  border: 1px solid red;\\n  opacity: 0.7\\n}\\n.ace_dialog {\\n  position: absolute;\\n  left: 0; right: 0;\\n  background: inherit;\\n  z-index: 15;\\n  padding: .1em .8em;\\n  overflow: hidden;\\n  color: inherit;\\n}\\n.ace_dialog-top {\\n  border-bottom: 1px solid #444;\\n  top: 0;\\n}\\n.ace_dialog-bottom {\\n  border-top: 1px solid #444;\\n  bottom: 0;\\n}\\n.ace_dialog input {\\n  border: none;\\n  outline: none;\\n  background: transparent;\\n  width: 20em;\\n  color: inherit;\\n  font-family: monospace;\\n}\", \"vimMode\", false);\n(function () {\n    function dialogDiv(cm, template, bottom) {\n        var wrap = cm.ace.container;\n        var dialog;\n        dialog = wrap.appendChild(document.createElement(\"div\"));\n        if (bottom)\n            dialog.className = \"ace_dialog ace_dialog-bottom\";\n        else\n            dialog.className = \"ace_dialog ace_dialog-top\";\n        if (typeof template == \"string\") {\n            dialog.innerHTML = template;\n        }\n        else { // Assuming it's a detached DOM element.\n            dialog.appendChild(template);\n        }\n        return dialog;\n    }\n    function closeNotification(cm, newVal) {\n        if (cm.state.currentNotificationClose)\n            cm.state.currentNotificationClose();\n        cm.state.currentNotificationClose = newVal;\n    }\n    CodeMirror.defineExtension(\"openDialog\", function (template, callback, options) {\n        if (this.virtualSelectionMode())\n            return;\n        if (!options)\n            options = {};\n        closeNotification(this, null);\n        var dialog = dialogDiv(this, template, options.bottom);\n        var closed = false, me = this;\n        this.state.dialog = dialog;\n        function close(newVal) {\n            if (typeof newVal == 'string') {\n                inp.value = newVal;\n            }\n            else {\n                if (closed)\n                    return;\n                if (newVal && newVal.type == \"blur\") {\n                    if (document.activeElement === inp)\n                        return;\n                }\n                if (me.state.dialog == dialog) {\n                    me.state.dialog = null;\n                    me.focus();\n                }\n                closed = true;\n                dialog.remove();\n                if (options.onClose)\n                    options.onClose(dialog);\n                var cm = me;\n                if (cm.state.vim) {\n                    cm.state.vim.status = null;\n                    cm.ace._signal(\"changeStatus\");\n                    cm.ace.renderer.$loop.schedule(cm.ace.renderer.CHANGE_CURSOR);\n                }\n            }\n        }\n        var inp = dialog.getElementsByTagName(\"input\")[0], button;\n        if (inp) {\n            if (options.value) {\n                inp.value = options.value;\n                if (options.selectValueOnOpen !== false)\n                    inp.select();\n            }\n            if (options.onInput)\n                CodeMirror.on(inp, \"input\", function (e) { options.onInput(e, inp.value, close); });\n            if (options.onKeyUp)\n                CodeMirror.on(inp, \"keyup\", function (e) { options.onKeyUp(e, inp.value, close); });\n            CodeMirror.on(inp, \"keydown\", function (e) {\n                if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) {\n                    return;\n                }\n                if (e.keyCode == 13)\n                    callback(inp.value);\n                if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {\n                    CodeMirror.e_stop(e);\n                    close();\n                }\n            });\n            if (options.closeOnBlur !== false)\n                CodeMirror.on(inp, \"blur\", close);\n            inp.focus();\n        }\n        else if (button = dialog.getElementsByTagName(\"button\")[0]) {\n            CodeMirror.on(button, \"click\", function () {\n                close();\n                me.focus();\n            });\n            if (options.closeOnBlur !== false)\n                CodeMirror.on(button, \"blur\", close);\n            button.focus();\n        }\n        return close;\n    });\n    CodeMirror.defineExtension(\"openNotification\", function (template, options) {\n        if (this.virtualSelectionMode())\n            return;\n        closeNotification(this, close);\n        var dialog = dialogDiv(this, template, options && options.bottom);\n        var closed = false, doneTimer;\n        var duration = options && typeof options.duration !== \"undefined\" ? options.duration : 5000;\n        function close() {\n            if (closed)\n                return;\n            closed = true;\n            clearTimeout(doneTimer);\n            dialog.remove();\n        }\n        CodeMirror.on(dialog, 'click', function (e) {\n            CodeMirror.e_preventDefault(e);\n            close();\n        });\n        if (duration)\n            doneTimer = setTimeout(close, duration);\n        return close;\n    });\n})();\nvar Pos = CodeMirror.Pos;\nfunction transformCursor(cm, range) {\n    var vim = cm.state.vim;\n    if (!vim || vim.insertMode)\n        return range.head;\n    var head = vim.sel.head;\n    if (!head)\n        return range.head;\n    if (vim.visualBlock) {\n        if (range.head.line != head.line) {\n            return;\n        }\n    }\n    if (range.from() == range.anchor && !range.empty()) {\n        if (range.head.line == head.line && range.head.ch != head.ch)\n            return new Pos(range.head.line, range.head.ch - 1);\n    }\n    return range.head;\n}\nfunction updateSelectionForSurrogateCharacters(cm, curStart, curEnd) {\n    if (curStart.line === curEnd.line && curStart.ch >= curEnd.ch - 1) {\n        var text = cm.getLine(curStart.line);\n        var charCode = text.charCodeAt(curStart.ch);\n        if (0xD800 <= charCode && charCode <= 0xD8FF) {\n            curEnd.ch += 1;\n        }\n    }\n    return { start: curStart, end: curEnd };\n}\nvar defaultKeymap = [\n    { keys: '<Left>', type: 'keyToKey', toKeys: 'h' },\n    { keys: '<Right>', type: 'keyToKey', toKeys: 'l' },\n    { keys: '<Up>', type: 'keyToKey', toKeys: 'k' },\n    { keys: '<Down>', type: 'keyToKey', toKeys: 'j' },\n    { keys: 'g<Up>', type: 'keyToKey', toKeys: 'gk' },\n    { keys: 'g<Down>', type: 'keyToKey', toKeys: 'gj' },\n    { keys: '<Space>', type: 'keyToKey', toKeys: 'l' },\n    { keys: '<BS>', type: 'keyToKey', toKeys: 'h', context: 'normal' },\n    { keys: '<Del>', type: 'keyToKey', toKeys: 'x', context: 'normal' },\n    { keys: '<C-Space>', type: 'keyToKey', toKeys: 'W' },\n    { keys: '<C-BS>', type: 'keyToKey', toKeys: 'B', context: 'normal' },\n    { keys: '<S-Space>', type: 'keyToKey', toKeys: 'w' },\n    { keys: '<S-BS>', type: 'keyToKey', toKeys: 'b', context: 'normal' },\n    { keys: '<C-n>', type: 'keyToKey', toKeys: 'j' },\n    { keys: '<C-p>', type: 'keyToKey', toKeys: 'k' },\n    { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>' },\n    { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>' },\n    { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },\n    { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },\n    { keys: '<C-Esc>', type: 'keyToKey', toKeys: '<Esc>' },\n    { keys: '<C-Esc>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },\n    { keys: 's', type: 'keyToKey', toKeys: 'cl', context: 'normal' },\n    { keys: 's', type: 'keyToKey', toKeys: 'c', context: 'visual' },\n    { keys: 'S', type: 'keyToKey', toKeys: 'cc', context: 'normal' },\n    { keys: 'S', type: 'keyToKey', toKeys: 'VdO', context: 'visual' },\n    { keys: '<Home>', type: 'keyToKey', toKeys: '0' },\n    { keys: '<End>', type: 'keyToKey', toKeys: '$' },\n    { keys: '<PageUp>', type: 'keyToKey', toKeys: '<C-b>' },\n    { keys: '<PageDown>', type: 'keyToKey', toKeys: '<C-f>' },\n    { keys: '<CR>', type: 'keyToKey', toKeys: 'j^', context: 'normal' },\n    { keys: '<Ins>', type: 'keyToKey', toKeys: 'i', context: 'normal' },\n    { keys: '<Ins>', type: 'action', action: 'toggleOverwrite', context: 'insert' },\n    { keys: 'H', type: 'motion', motion: 'moveToTopLine', motionArgs: { linewise: true, toJumplist: true } },\n    { keys: 'M', type: 'motion', motion: 'moveToMiddleLine', motionArgs: { linewise: true, toJumplist: true } },\n    { keys: 'L', type: 'motion', motion: 'moveToBottomLine', motionArgs: { linewise: true, toJumplist: true } },\n    { keys: 'h', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: false } },\n    { keys: 'l', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: true } },\n    { keys: 'j', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, linewise: true } },\n    { keys: 'k', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, linewise: true } },\n    { keys: 'gj', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: true } },\n    { keys: 'gk', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: false } },\n    { keys: 'w', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false } },\n    { keys: 'W', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false, bigWord: true } },\n    { keys: 'e', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, inclusive: true } },\n    { keys: 'E', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, bigWord: true, inclusive: true } },\n    { keys: 'b', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false } },\n    { keys: 'B', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false, bigWord: true } },\n    { keys: 'ge', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, inclusive: true } },\n    { keys: 'gE', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, bigWord: true, inclusive: true } },\n    { keys: '{', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: false, toJumplist: true } },\n    { keys: '}', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: true, toJumplist: true } },\n    { keys: '(', type: 'motion', motion: 'moveBySentence', motionArgs: { forward: false } },\n    { keys: ')', type: 'motion', motion: 'moveBySentence', motionArgs: { forward: true } },\n    { keys: '<C-f>', type: 'motion', motion: 'moveByPage', motionArgs: { forward: true } },\n    { keys: '<C-b>', type: 'motion', motion: 'moveByPage', motionArgs: { forward: false } },\n    { keys: '<C-d>', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: true, explicitRepeat: true } },\n    { keys: '<C-u>', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: false, explicitRepeat: true } },\n    { keys: 'gg', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: false, explicitRepeat: true, linewise: true, toJumplist: true } },\n    { keys: 'G', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: true, explicitRepeat: true, linewise: true, toJumplist: true } },\n    { keys: \"g$\", type: \"motion\", motion: \"moveToEndOfDisplayLine\" },\n    { keys: \"g^\", type: \"motion\", motion: \"moveToStartOfDisplayLine\" },\n    { keys: \"g0\", type: \"motion\", motion: \"moveToStartOfDisplayLine\" },\n    { keys: '0', type: 'motion', motion: 'moveToStartOfLine' },\n    { keys: '^', type: 'motion', motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: '+', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar: true } },\n    { keys: '-', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, toFirstChar: true } },\n    { keys: '_', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar: true, repeatOffset: -1 } },\n    { keys: '$', type: 'motion', motion: 'moveToEol', motionArgs: { inclusive: true } },\n    { keys: '%', type: 'motion', motion: 'moveToMatchedSymbol', motionArgs: { inclusive: true, toJumplist: true } },\n    { keys: 'f<character>', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: true, inclusive: true } },\n    { keys: 'F<character>', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: false } },\n    { keys: 't<character>', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: true, inclusive: true } },\n    { keys: 'T<character>', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: false } },\n    { keys: ';', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: true } },\n    { keys: ',', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: false } },\n    { keys: '\\'<character>', type: 'motion', motion: 'goToMark', motionArgs: { toJumplist: true, linewise: true } },\n    { keys: '`<character>', type: 'motion', motion: 'goToMark', motionArgs: { toJumplist: true } },\n    { keys: ']`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true } },\n    { keys: '[`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false } },\n    { keys: ']\\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true, linewise: true } },\n    { keys: '[\\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false, linewise: true } },\n    { keys: ']p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true, matchIndent: true } },\n    { keys: '[p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true, matchIndent: true } },\n    { keys: ']<character>', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: true, toJumplist: true } },\n    { keys: '[<character>', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: false, toJumplist: true } },\n    { keys: '|', type: 'motion', motion: 'moveToColumn' },\n    { keys: 'o', type: 'motion', motion: 'moveToOtherHighlightedEnd', context: 'visual' },\n    { keys: 'O', type: 'motion', motion: 'moveToOtherHighlightedEnd', motionArgs: { sameLine: true }, context: 'visual' },\n    { keys: 'd', type: 'operator', operator: 'delete' },\n    { keys: 'y', type: 'operator', operator: 'yank' },\n    { keys: 'c', type: 'operator', operator: 'change' },\n    { keys: '=', type: 'operator', operator: 'indentAuto' },\n    { keys: '>', type: 'operator', operator: 'indent', operatorArgs: { indentRight: true } },\n    { keys: '<', type: 'operator', operator: 'indent', operatorArgs: { indentRight: false } },\n    { keys: 'g~', type: 'operator', operator: 'changeCase' },\n    { keys: 'gu', type: 'operator', operator: 'changeCase', operatorArgs: { toLower: true }, isEdit: true },\n    { keys: 'gU', type: 'operator', operator: 'changeCase', operatorArgs: { toLower: false }, isEdit: true },\n    { keys: 'n', type: 'motion', motion: 'findNext', motionArgs: { forward: true, toJumplist: true } },\n    { keys: 'N', type: 'motion', motion: 'findNext', motionArgs: { forward: false, toJumplist: true } },\n    { keys: 'gn', type: 'motion', motion: 'findAndSelectNextInclusive', motionArgs: { forward: true } },\n    { keys: 'gN', type: 'motion', motion: 'findAndSelectNextInclusive', motionArgs: { forward: false } },\n    { keys: 'x', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorMotionArgs: { visualLine: false } },\n    { keys: 'X', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: false }, operatorMotionArgs: { visualLine: true } },\n    { keys: 'D', type: 'operatorMotion', operator: 'delete', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal' },\n    { keys: 'D', type: 'operator', operator: 'delete', operatorArgs: { linewise: true }, context: 'visual' },\n    { keys: 'Y', type: 'operatorMotion', operator: 'yank', motion: 'expandToLine', motionArgs: { linewise: true }, context: 'normal' },\n    { keys: 'Y', type: 'operator', operator: 'yank', operatorArgs: { linewise: true }, context: 'visual' },\n    { keys: 'C', type: 'operatorMotion', operator: 'change', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal' },\n    { keys: 'C', type: 'operator', operator: 'change', operatorArgs: { linewise: true }, context: 'visual' },\n    { keys: '~', type: 'operatorMotion', operator: 'changeCase', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorArgs: { shouldMoveCursor: true }, context: 'normal' },\n    { keys: '~', type: 'operator', operator: 'changeCase', context: 'visual' },\n    { keys: '<C-u>', type: 'operatorMotion', operator: 'delete', motion: 'moveToStartOfLine', context: 'insert' },\n    { keys: '<C-w>', type: 'operatorMotion', operator: 'delete', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }, context: 'insert' },\n    { keys: '<C-w>', type: 'idle', context: 'normal' },\n    { keys: '<C-i>', type: 'action', action: 'jumpListWalk', actionArgs: { forward: true } },\n    { keys: '<C-o>', type: 'action', action: 'jumpListWalk', actionArgs: { forward: false } },\n    { keys: '<C-e>', type: 'action', action: 'scroll', actionArgs: { forward: true, linewise: true } },\n    { keys: '<C-y>', type: 'action', action: 'scroll', actionArgs: { forward: false, linewise: true } },\n    { keys: 'a', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'charAfter' }, context: 'normal' },\n    { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'eol' }, context: 'normal' },\n    { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'endOfSelectedArea' }, context: 'visual' },\n    { keys: 'i', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'inplace' }, context: 'normal' },\n    { keys: 'gi', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'lastEdit' }, context: 'normal' },\n    { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'firstNonBlank' }, context: 'normal' },\n    { keys: 'gI', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'bol' }, context: 'normal' },\n    { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'startOfSelectedArea' }, context: 'visual' },\n    { keys: 'o', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: true }, context: 'normal' },\n    { keys: 'O', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: false }, context: 'normal' },\n    { keys: 'v', type: 'action', action: 'toggleVisualMode' },\n    { keys: 'V', type: 'action', action: 'toggleVisualMode', actionArgs: { linewise: true } },\n    { keys: '<C-v>', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true } },\n    { keys: '<C-q>', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true } },\n    { keys: 'gv', type: 'action', action: 'reselectLastSelection' },\n    { keys: 'J', type: 'action', action: 'joinLines', isEdit: true },\n    { keys: 'gJ', type: 'action', action: 'joinLines', actionArgs: { keepSpaces: true }, isEdit: true },\n    { keys: 'p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true } },\n    { keys: 'P', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true } },\n    { keys: 'r<character>', type: 'action', action: 'replace', isEdit: true },\n    { keys: '@<character>', type: 'action', action: 'replayMacro' },\n    { keys: 'q<character>', type: 'action', action: 'enterMacroRecordMode' },\n    { keys: 'R', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { replace: true }, context: 'normal' },\n    { keys: 'R', type: 'operator', operator: 'change', operatorArgs: { linewise: true, fullLine: true }, context: 'visual', exitVisualBlock: true },\n    { keys: 'u', type: 'action', action: 'undo', context: 'normal' },\n    { keys: 'u', type: 'operator', operator: 'changeCase', operatorArgs: { toLower: true }, context: 'visual', isEdit: true },\n    { keys: 'U', type: 'operator', operator: 'changeCase', operatorArgs: { toLower: false }, context: 'visual', isEdit: true },\n    { keys: '<C-r>', type: 'action', action: 'redo' },\n    { keys: 'm<character>', type: 'action', action: 'setMark' },\n    { keys: '\"<character>', type: 'action', action: 'setRegister' },\n    { keys: 'zz', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' } },\n    { keys: 'z.', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: 'zt', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' } },\n    { keys: 'z<CR>', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: 'zb', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' } },\n    { keys: 'z-', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: '.', type: 'action', action: 'repeatLastEdit' },\n    { keys: '<C-a>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: { increase: true, backtrack: false } },\n    { keys: '<C-x>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: { increase: false, backtrack: false } },\n    { keys: '<C-t>', type: 'action', action: 'indent', actionArgs: { indentRight: true }, context: 'insert' },\n    { keys: '<C-d>', type: 'action', action: 'indent', actionArgs: { indentRight: false }, context: 'insert' },\n    { keys: 'a<character>', type: 'motion', motion: 'textObjectManipulation' },\n    { keys: 'i<character>', type: 'motion', motion: 'textObjectManipulation', motionArgs: { textObjectInner: true } },\n    { keys: '/', type: 'search', searchArgs: { forward: true, querySrc: 'prompt', toJumplist: true } },\n    { keys: '?', type: 'search', searchArgs: { forward: false, querySrc: 'prompt', toJumplist: true } },\n    { keys: '*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true } },\n    { keys: '#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true } },\n    { keys: 'g*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', toJumplist: true } },\n    { keys: 'g#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', toJumplist: true } },\n    { keys: ':', type: 'ex' }\n];\nvar defaultKeymapLength = defaultKeymap.length;\nvar defaultExCommandMap = [\n    { name: 'colorscheme', shortName: 'colo' },\n    { name: 'map' },\n    { name: 'imap', shortName: 'im' },\n    { name: 'nmap', shortName: 'nm' },\n    { name: 'vmap', shortName: 'vm' },\n    { name: 'unmap' },\n    { name: 'write', shortName: 'w' },\n    { name: 'undo', shortName: 'u' },\n    { name: 'redo', shortName: 'red' },\n    { name: 'set', shortName: 'se' },\n    { name: 'setlocal', shortName: 'setl' },\n    { name: 'setglobal', shortName: 'setg' },\n    { name: 'sort', shortName: 'sor' },\n    { name: 'substitute', shortName: 's', possiblyAsync: true },\n    { name: 'nohlsearch', shortName: 'noh' },\n    { name: 'yank', shortName: 'y' },\n    { name: 'delmarks', shortName: 'delm' },\n    { name: 'registers', shortName: 'reg', excludeFromCommandHistory: true },\n    { name: 'vglobal', shortName: 'v' },\n    { name: 'global', shortName: 'g' }\n];\nfunction enterVimMode(cm) {\n    cm.setOption('disableInput', true);\n    cm.setOption('showCursorWhenSelecting', false);\n    CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"normal\" });\n    cm.on('cursorActivity', onCursorActivity);\n    maybeInitVimState(cm);\n    CodeMirror.on(cm.getInputField(), 'paste', getOnPasteFn(cm));\n}\nfunction leaveVimMode(cm) {\n    cm.setOption('disableInput', false);\n    cm.off('cursorActivity', onCursorActivity);\n    CodeMirror.off(cm.getInputField(), 'paste', getOnPasteFn(cm));\n    cm.state.vim = null;\n    if (highlightTimeout)\n        clearTimeout(highlightTimeout);\n}\nfunction detachVimMap(cm, next) {\n    if (this == CodeMirror.keyMap.vim) {\n        cm.options.$customCursor = null;\n        CodeMirror.rmClass(cm.getWrapperElement(), \"cm-fat-cursor\");\n    }\n    if (!next || next.attach != attachVimMap)\n        leaveVimMode(cm);\n}\nfunction attachVimMap(cm, prev) {\n    if (this == CodeMirror.keyMap.vim) {\n        if (cm.curOp)\n            cm.curOp.selectionChanged = true;\n        cm.options.$customCursor = transformCursor;\n        CodeMirror.addClass(cm.getWrapperElement(), \"cm-fat-cursor\");\n    }\n    if (!prev || prev.attach != attachVimMap)\n        enterVimMode(cm);\n}\nCodeMirror.defineOption('vimMode', false, function (cm, val, prev) {\n    if (val && cm.getOption(\"keyMap\") != \"vim\")\n        cm.setOption(\"keyMap\", \"vim\");\n    else if (!val && prev != CodeMirror.Init && /^vim/.test(cm.getOption(\"keyMap\")))\n        cm.setOption(\"keyMap\", \"default\");\n});\nfunction cmKey(key, cm) {\n    if (!cm) {\n        return undefined;\n    }\n    if (this[key]) {\n        return this[key];\n    }\n    var vimKey = cmKeyToVimKey(key);\n    if (!vimKey) {\n        return false;\n    }\n    var cmd = vimApi.findKey(cm, vimKey);\n    if (typeof cmd == 'function') {\n        CodeMirror.signal(cm, 'vim-keypress', vimKey);\n    }\n    return cmd;\n}\nvar modifiers = { Shift: 'S', Ctrl: 'C', Alt: 'A', Cmd: 'D', Mod: 'A', CapsLock: '' };\nvar specialKeys = { Enter: 'CR', Backspace: 'BS', Delete: 'Del', Insert: 'Ins' };\nfunction cmKeyToVimKey(key) {\n    if (key.charAt(0) == '\\'') {\n        return key.charAt(1);\n    }\n    var pieces = key.split(/-(?!$)/);\n    var lastPiece = pieces[pieces.length - 1];\n    if (pieces.length == 1 && pieces[0].length == 1) {\n        return false;\n    }\n    else if (pieces.length == 2 && pieces[0] == 'Shift' && lastPiece.length == 1) {\n        return false;\n    }\n    var hasCharacter = false;\n    for (var i = 0; i < pieces.length; i++) {\n        var piece = pieces[i];\n        if (piece in modifiers) {\n            pieces[i] = modifiers[piece];\n        }\n        else {\n            hasCharacter = true;\n        }\n        if (piece in specialKeys) {\n            pieces[i] = specialKeys[piece];\n        }\n    }\n    if (!hasCharacter) {\n        return false;\n    }\n    if (isUpperCase(lastPiece)) {\n        pieces[pieces.length - 1] = lastPiece.toLowerCase();\n    }\n    return '<' + pieces.join('-') + '>';\n}\nfunction getOnPasteFn(cm) {\n    var vim = cm.state.vim;\n    if (!vim.onPasteFn) {\n        vim.onPasteFn = function () {\n            if (!vim.insertMode) {\n                cm.setCursor(offsetCursor(cm.getCursor(), 0, 1));\n                actions.enterInsertMode(cm, {}, vim);\n            }\n        };\n    }\n    return vim.onPasteFn;\n}\nvar numberRegex = /[\\d]/;\nvar wordCharTest = [CodeMirror.isWordChar, function (ch) {\n        return ch && !CodeMirror.isWordChar(ch) && !/\\s/.test(ch);\n    }], bigWordCharTest = [function (ch) {\n        return /\\S/.test(ch);\n    }];\nfunction makeKeyRange(start, size) {\n    var keys = [];\n    for (var i = start; i < start + size; i++) {\n        keys.push(String.fromCharCode(i));\n    }\n    return keys;\n}\nvar upperCaseAlphabet = makeKeyRange(65, 26);\nvar lowerCaseAlphabet = makeKeyRange(97, 26);\nvar numbers = makeKeyRange(48, 10);\nvar validMarks = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['<', '>']);\nvar validRegisters = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['-', '\"', '.', ':', '_', '/', '+']);\nvar upperCaseChars;\ntry {\n    upperCaseChars = new RegExp(\"^[\\\\p{Lu}]$\", \"u\");\n}\ncatch (_) {\n    upperCaseChars = /^[A-Z]$/;\n}\nfunction isLine(cm, line) {\n    return line >= cm.firstLine() && line <= cm.lastLine();\n}\nfunction isLowerCase(k) {\n    return (/^[a-z]$/).test(k);\n}\nfunction isMatchableSymbol(k) {\n    return '()[]{}'.indexOf(k) != -1;\n}\nfunction isNumber(k) {\n    return numberRegex.test(k);\n}\nfunction isUpperCase(k) {\n    return upperCaseChars.test(k);\n}\nfunction isWhiteSpaceString(k) {\n    return (/^\\s*$/).test(k);\n}\nfunction isEndOfSentenceSymbol(k) {\n    return '.?!'.indexOf(k) != -1;\n}\nfunction inArray(val, arr) {\n    for (var i = 0; i < arr.length; i++) {\n        if (arr[i] == val) {\n            return true;\n        }\n    }\n    return false;\n}\nvar options = {};\nfunction defineOption(name, defaultValue, type, aliases, callback) {\n    if (defaultValue === undefined && !callback) {\n        throw Error('defaultValue is required unless callback is provided');\n    }\n    if (!type) {\n        type = 'string';\n    }\n    options[name] = {\n        type: type,\n        defaultValue: defaultValue,\n        callback: callback\n    };\n    if (aliases) {\n        for (var i = 0; i < aliases.length; i++) {\n            options[aliases[i]] = options[name];\n        }\n    }\n    if (defaultValue) {\n        setOption(name, defaultValue);\n    }\n}\nfunction setOption(name, value, cm, cfg) {\n    var option = options[name];\n    cfg = cfg || {};\n    var scope = cfg.scope;\n    if (!option) {\n        return new Error('Unknown option: ' + name);\n    }\n    if (option.type == 'boolean') {\n        if (value && value !== true) {\n            return new Error('Invalid argument: ' + name + '=' + value);\n        }\n        else if (value !== false) {\n            value = true;\n        }\n    }\n    if (option.callback) {\n        if (scope !== 'local') {\n            option.callback(value, undefined);\n        }\n        if (scope !== 'global' && cm) {\n            option.callback(value, cm);\n        }\n    }\n    else {\n        if (scope !== 'local') {\n            option.value = option.type == 'boolean' ? !!value : value;\n        }\n        if (scope !== 'global' && cm) {\n            cm.state.vim.options[name] = { value: value };\n        }\n    }\n}\nfunction getOption(name, cm, cfg) {\n    var option = options[name];\n    cfg = cfg || {};\n    var scope = cfg.scope;\n    if (!option) {\n        return new Error('Unknown option: ' + name);\n    }\n    if (option.callback) {\n        var local = cm && option.callback(undefined, cm);\n        if (scope !== 'global' && local !== undefined) {\n            return local;\n        }\n        if (scope !== 'local') {\n            return option.callback();\n        }\n        return;\n    }\n    else {\n        var local = (scope !== 'global') && (cm && cm.state.vim.options[name]);\n        return (local || (scope !== 'local') && option || {}).value;\n    }\n}\ndefineOption('filetype', undefined, 'string', ['ft'], function (name, cm) {\n    if (cm === undefined) {\n        return;\n    }\n    if (name === undefined) {\n        var mode = cm.getOption('mode');\n        return mode == 'null' ? '' : mode;\n    }\n    else {\n        var mode = name == '' ? 'null' : name;\n        cm.setOption('mode', mode);\n    }\n});\nvar createCircularJumpList = function () {\n    var size = 100;\n    var pointer = -1;\n    var head = 0;\n    var tail = 0;\n    var buffer = new Array(size);\n    function add(cm, oldCur, newCur) {\n        var current = pointer % size;\n        var curMark = buffer[current];\n        function useNextSlot(cursor) {\n            var next = ++pointer % size;\n            var trashMark = buffer[next];\n            if (trashMark) {\n                trashMark.clear();\n            }\n            buffer[next] = cm.setBookmark(cursor);\n        }\n        if (curMark) {\n            var markPos = curMark.find();\n            if (markPos && !cursorEqual(markPos, oldCur)) {\n                useNextSlot(oldCur);\n            }\n        }\n        else {\n            useNextSlot(oldCur);\n        }\n        useNextSlot(newCur);\n        head = pointer;\n        tail = pointer - size + 1;\n        if (tail < 0) {\n            tail = 0;\n        }\n    }\n    function move(cm, offset) {\n        pointer += offset;\n        if (pointer > head) {\n            pointer = head;\n        }\n        else if (pointer < tail) {\n            pointer = tail;\n        }\n        var mark = buffer[(size + pointer) % size];\n        if (mark && !mark.find()) {\n            var inc = offset > 0 ? 1 : -1;\n            var newCur;\n            var oldCur = cm.getCursor();\n            do {\n                pointer += inc;\n                mark = buffer[(size + pointer) % size];\n                if (mark &&\n                    (newCur = mark.find()) &&\n                    !cursorEqual(oldCur, newCur)) {\n                    break;\n                }\n            } while (pointer < head && pointer > tail);\n        }\n        return mark;\n    }\n    function find(cm, offset) {\n        var oldPointer = pointer;\n        var mark = move(cm, offset);\n        pointer = oldPointer;\n        return mark && mark.find();\n    }\n    return {\n        cachedCursor: undefined,\n        add: add,\n        find: find,\n        move: move\n    };\n};\nvar createInsertModeChanges = function (c) {\n    if (c) {\n        return {\n            changes: c.changes,\n            expectCursorActivityForChange: c.expectCursorActivityForChange\n        };\n    }\n    return {\n        changes: [],\n        expectCursorActivityForChange: false\n    };\n};\nfunction MacroModeState() {\n    this.latestRegister = undefined;\n    this.isPlaying = false;\n    this.isRecording = false;\n    this.replaySearchQueries = [];\n    this.onRecordingDone = undefined;\n    this.lastInsertModeChanges = createInsertModeChanges();\n}\nMacroModeState.prototype = {\n    exitMacroRecordMode: function () {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.onRecordingDone) {\n            macroModeState.onRecordingDone(); // close dialog\n        }\n        macroModeState.onRecordingDone = undefined;\n        macroModeState.isRecording = false;\n    },\n    enterMacroRecordMode: function (cm, registerName) {\n        var register = vimGlobalState.registerController.getRegister(registerName);\n        if (register) {\n            register.clear();\n            this.latestRegister = registerName;\n            if (cm.openDialog) {\n                var template = dom('span', { class: 'cm-vim-message' }, 'recording @' + registerName);\n                this.onRecordingDone = cm.openDialog(template, null, { bottom: true });\n            }\n            this.isRecording = true;\n        }\n    }\n};\nfunction maybeInitVimState(cm) {\n    if (!cm.state.vim) {\n        cm.state.vim = {\n            inputState: new InputState(),\n            lastEditInputState: undefined,\n            lastEditActionCommand: undefined,\n            lastHPos: -1,\n            lastHSPos: -1,\n            lastMotion: null,\n            marks: {},\n            insertMode: false,\n            insertModeRepeat: undefined,\n            visualMode: false,\n            visualLine: false,\n            visualBlock: false,\n            lastSelection: null,\n            lastPastedText: null,\n            sel: {},\n            options: {}\n        };\n    }\n    return cm.state.vim;\n}\nvar vimGlobalState;\nfunction resetVimGlobalState() {\n    vimGlobalState = {\n        searchQuery: null,\n        searchIsReversed: false,\n        lastSubstituteReplacePart: undefined,\n        jumpList: createCircularJumpList(),\n        macroModeState: new MacroModeState,\n        lastCharacterSearch: { increment: 0, forward: true, selectedCharacter: '' },\n        registerController: new RegisterController({}),\n        searchHistoryController: new HistoryController(),\n        exCommandHistoryController: new HistoryController()\n    };\n    for (var optionName in options) {\n        var option = options[optionName];\n        option.value = option.defaultValue;\n    }\n}\nvar lastInsertModeKeyTimer;\nvar vimApi = {\n    enterVimMode: enterVimMode,\n    leaveVimMode: leaveVimMode,\n    buildKeyMap: function () {\n    },\n    getRegisterController: function () {\n        return vimGlobalState.registerController;\n    },\n    resetVimGlobalState_: resetVimGlobalState,\n    getVimGlobalState_: function () {\n        return vimGlobalState;\n    },\n    maybeInitVimState_: maybeInitVimState,\n    suppressErrorLogging: false,\n    InsertModeKey: InsertModeKey,\n    map: function (lhs, rhs, ctx) {\n        exCommandDispatcher.map(lhs, rhs, ctx);\n    },\n    unmap: function (lhs, ctx) {\n        return exCommandDispatcher.unmap(lhs, ctx);\n    },\n    noremap: function (lhs, rhs, ctx) {\n        function toCtxArray(ctx) {\n            return ctx ? [ctx] : ['normal', 'insert', 'visual'];\n        }\n        var ctxsToMap = toCtxArray(ctx);\n        var actualLength = defaultKeymap.length, origLength = defaultKeymapLength;\n        for (var i = actualLength - origLength; i < actualLength && ctxsToMap.length; i++) {\n            var mapping = defaultKeymap[i];\n            if (mapping.keys == rhs &&\n                (!ctx || !mapping.context || mapping.context === ctx) &&\n                mapping.type.substr(0, 2) !== 'ex' &&\n                mapping.type.substr(0, 3) !== 'key') {\n                var newMapping = {};\n                for (var key in mapping) {\n                    newMapping[key] = mapping[key];\n                }\n                newMapping.keys = lhs;\n                if (ctx && !newMapping.context) {\n                    newMapping.context = ctx;\n                }\n                this._mapCommand(newMapping);\n                var mappedCtxs = toCtxArray(mapping.context);\n                ctxsToMap = ctxsToMap.filter(function (el) { return mappedCtxs.indexOf(el) === -1; });\n            }\n        }\n    },\n    mapclear: function (ctx) {\n        var actualLength = defaultKeymap.length, origLength = defaultKeymapLength;\n        var userKeymap = defaultKeymap.slice(0, actualLength - origLength);\n        defaultKeymap = defaultKeymap.slice(actualLength - origLength);\n        if (ctx) {\n            for (var i = userKeymap.length - 1; i >= 0; i--) {\n                var mapping = userKeymap[i];\n                if (ctx !== mapping.context) {\n                    if (mapping.context) {\n                        this._mapCommand(mapping);\n                    }\n                    else {\n                        var contexts = ['normal', 'insert', 'visual'];\n                        for (var j in contexts) {\n                            if (contexts[j] !== ctx) {\n                                var newMapping = {};\n                                for (var key in mapping) {\n                                    newMapping[key] = mapping[key];\n                                }\n                                newMapping.context = contexts[j];\n                                this._mapCommand(newMapping);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    },\n    setOption: setOption,\n    getOption: getOption,\n    defineOption: defineOption,\n    defineEx: function (name, prefix, func) {\n        if (!prefix) {\n            prefix = name;\n        }\n        else if (name.indexOf(prefix) !== 0) {\n            throw new Error('(Vim.defineEx) \"' + prefix + '\" is not a prefix of \"' + name + '\", command not registered');\n        }\n        exCommands[name] = func;\n        exCommandDispatcher.commandMap_[prefix] = { name: name, shortName: prefix, type: 'api' };\n    },\n    handleKey: function (cm, key, origin) {\n        var command = this.findKey(cm, key, origin);\n        if (typeof command === 'function') {\n            return command();\n        }\n    },\n    multiSelectHandleKey: multiSelectHandleKey,\n    findKey: function (cm, key, origin) {\n        var vim = maybeInitVimState(cm);\n        function handleMacroRecording() {\n            var macroModeState = vimGlobalState.macroModeState;\n            if (macroModeState.isRecording) {\n                if (key == 'q') {\n                    macroModeState.exitMacroRecordMode();\n                    clearInputState(cm);\n                    return true;\n                }\n                if (origin != 'mapping') {\n                    logKey(macroModeState, key);\n                }\n            }\n        }\n        function handleEsc() {\n            if (key == '<Esc>') {\n                if (vim.visualMode) {\n                    exitVisualMode(cm);\n                }\n                else if (vim.insertMode) {\n                    exitInsertMode(cm);\n                }\n                else {\n                    return;\n                }\n                clearInputState(cm);\n                return true;\n            }\n        }\n        function doKeyToKey(keys) {\n            var match;\n            while (keys) {\n                match = (/<\\w+-.+?>|<\\w+>|./).exec(keys);\n                key = match[0];\n                keys = keys.substring(match.index + key.length);\n                vimApi.handleKey(cm, key, 'mapping');\n            }\n        }\n        function handleKeyInsertMode() {\n            if (handleEsc()) {\n                return true;\n            }\n            var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key;\n            var keysAreChars = key.length == 1;\n            var match = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');\n            while (keys.length > 1 && match.type != 'full') {\n                var keys = vim.inputState.keyBuffer = keys.slice(1);\n                var thisMatch = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');\n                if (thisMatch.type != 'none') {\n                    match = thisMatch;\n                }\n            }\n            if (match.type == 'none') {\n                clearInputState(cm);\n                return false;\n            }\n            else if (match.type == 'partial') {\n                if (lastInsertModeKeyTimer) {\n                    window.clearTimeout(lastInsertModeKeyTimer);\n                }\n                lastInsertModeKeyTimer = window.setTimeout(function () { if (vim.insertMode && vim.inputState.keyBuffer) {\n                    clearInputState(cm);\n                } }, getOption('insertModeEscKeysTimeout'));\n                return !keysAreChars;\n            }\n            if (lastInsertModeKeyTimer) {\n                window.clearTimeout(lastInsertModeKeyTimer);\n            }\n            if (keysAreChars) {\n                var selections = cm.listSelections();\n                for (var i = 0; i < selections.length; i++) {\n                    var here = selections[i].head;\n                    cm.replaceRange('', offsetCursor(here, 0, -(keys.length - 1)), here, '+input');\n                }\n                vimGlobalState.macroModeState.lastInsertModeChanges.changes.pop();\n            }\n            clearInputState(cm);\n            return match.command;\n        }\n        function handleKeyNonInsertMode() {\n            if (handleMacroRecording() || handleEsc()) {\n                return true;\n            }\n            var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key;\n            if (/^[1-9]\\d*$/.test(keys)) {\n                return true;\n            }\n            var keysMatcher = /^(\\d*)(.*)$/.exec(keys);\n            if (!keysMatcher) {\n                clearInputState(cm);\n                return false;\n            }\n            var context = vim.visualMode ? 'visual' :\n                'normal';\n            var mainKey = keysMatcher[2] || keysMatcher[1];\n            if (vim.inputState.operatorShortcut && vim.inputState.operatorShortcut.slice(-1) == mainKey) {\n                mainKey = vim.inputState.operatorShortcut;\n            }\n            var match = commandDispatcher.matchCommand(mainKey, defaultKeymap, vim.inputState, context);\n            if (match.type == 'none') {\n                clearInputState(cm);\n                return false;\n            }\n            else if (match.type == 'partial') {\n                return true;\n            }\n            else if (match.type == 'clear') {\n                clearInputState(cm);\n                return true;\n            }\n            vim.inputState.keyBuffer = '';\n            keysMatcher = /^(\\d*)(.*)$/.exec(keys);\n            if (keysMatcher[1] && keysMatcher[1] != '0') {\n                vim.inputState.pushRepeatDigit(keysMatcher[1]);\n            }\n            return match.command;\n        }\n        var command;\n        if (vim.insertMode) {\n            command = handleKeyInsertMode();\n        }\n        else {\n            command = handleKeyNonInsertMode();\n        }\n        if (command === false) {\n            return undefined; //ace_patch\n        }\n        else if (command === true) {\n            return function () { return true; };\n        }\n        else {\n            return function () {\n                if ((command.operator || command.isEdit) && cm.getOption('readOnly'))\n                    return; // ace_patch\n                return cm.operation(function () {\n                    cm.curOp.isVimOp = true;\n                    try {\n                        if (command.type == 'keyToKey') {\n                            doKeyToKey(command.toKeys);\n                        }\n                        else {\n                            commandDispatcher.processCommand(cm, vim, command);\n                        }\n                    }\n                    catch (e) {\n                        cm.state.vim = undefined;\n                        maybeInitVimState(cm);\n                        if (!vimApi.suppressErrorLogging) {\n                            console['log'](e);\n                        }\n                        throw e;\n                    }\n                    return true;\n                });\n            };\n        }\n    },\n    handleEx: function (cm, input) {\n        exCommandDispatcher.processCommand(cm, input);\n    },\n    defineMotion: defineMotion,\n    defineAction: defineAction,\n    defineOperator: defineOperator,\n    mapCommand: mapCommand,\n    _mapCommand: _mapCommand,\n    defineRegister: defineRegister,\n    exitVisualMode: exitVisualMode,\n    exitInsertMode: exitInsertMode\n};\nfunction InputState() {\n    this.prefixRepeat = [];\n    this.motionRepeat = [];\n    this.operator = null;\n    this.operatorArgs = null;\n    this.motion = null;\n    this.motionArgs = null;\n    this.keyBuffer = []; // For matching multi-key commands.\n    this.registerName = null; // Defaults to the unnamed register.\n}\nInputState.prototype.pushRepeatDigit = function (n) {\n    if (!this.operator) {\n        this.prefixRepeat = this.prefixRepeat.concat(n);\n    }\n    else {\n        this.motionRepeat = this.motionRepeat.concat(n);\n    }\n};\nInputState.prototype.getRepeat = function () {\n    var repeat = 0;\n    if (this.prefixRepeat.length > 0 || this.motionRepeat.length > 0) {\n        repeat = 1;\n        if (this.prefixRepeat.length > 0) {\n            repeat *= parseInt(this.prefixRepeat.join(''), 10);\n        }\n        if (this.motionRepeat.length > 0) {\n            repeat *= parseInt(this.motionRepeat.join(''), 10);\n        }\n    }\n    return repeat;\n};\nfunction clearInputState(cm, reason) {\n    cm.state.vim.inputState = new InputState();\n    CodeMirror.signal(cm, 'vim-command-done', reason);\n}\nfunction Register(text, linewise, blockwise) {\n    this.clear();\n    this.keyBuffer = [text || ''];\n    this.insertModeChanges = [];\n    this.searchQueries = [];\n    this.linewise = !!linewise;\n    this.blockwise = !!blockwise;\n}\nRegister.prototype = {\n    setText: function (text, linewise, blockwise) {\n        this.keyBuffer = [text || ''];\n        this.linewise = !!linewise;\n        this.blockwise = !!blockwise;\n    },\n    pushText: function (text, linewise) {\n        if (linewise) {\n            if (!this.linewise) {\n                this.keyBuffer.push('\\n');\n            }\n            this.linewise = true;\n        }\n        this.keyBuffer.push(text);\n    },\n    pushInsertModeChanges: function (changes) {\n        this.insertModeChanges.push(createInsertModeChanges(changes));\n    },\n    pushSearchQuery: function (query) {\n        this.searchQueries.push(query);\n    },\n    clear: function () {\n        this.keyBuffer = [];\n        this.insertModeChanges = [];\n        this.searchQueries = [];\n        this.linewise = false;\n    },\n    toString: function () {\n        return this.keyBuffer.join('');\n    }\n};\nfunction defineRegister(name, register) {\n    var registers = vimGlobalState.registerController.registers;\n    if (!name || name.length != 1) {\n        throw Error('Register name must be 1 character');\n    }\n    registers[name] = register;\n    validRegisters.push(name);\n}\nfunction RegisterController(registers) {\n    this.registers = registers;\n    this.unnamedRegister = registers['\"'] = new Register();\n    registers['.'] = new Register();\n    registers[':'] = new Register();\n    registers['/'] = new Register();\n    registers['+'] = new Register();\n}\nRegisterController.prototype = {\n    pushText: function (registerName, operator, text, linewise, blockwise) {\n        if (registerName === '_')\n            return;\n        if (linewise && text.charAt(text.length - 1) !== '\\n') {\n            text += '\\n';\n        }\n        var register = this.isValidRegister(registerName) ?\n            this.getRegister(registerName) : null;\n        if (!register) {\n            switch (operator) {\n                case 'yank':\n                    this.registers['0'] = new Register(text, linewise, blockwise);\n                    break;\n                case 'delete':\n                case 'change':\n                    if (text.indexOf('\\n') == -1) {\n                        this.registers['-'] = new Register(text, linewise);\n                    }\n                    else {\n                        this.shiftNumericRegisters_();\n                        this.registers['1'] = new Register(text, linewise);\n                    }\n                    break;\n            }\n            this.unnamedRegister.setText(text, linewise, blockwise);\n            return;\n        }\n        var append = isUpperCase(registerName);\n        if (append) {\n            register.pushText(text, linewise);\n        }\n        else {\n            register.setText(text, linewise, blockwise);\n        }\n        if (registerName === '+') {\n            navigator.clipboard.writeText(text);\n        }\n        this.unnamedRegister.setText(register.toString(), linewise);\n    },\n    getRegister: function (name) {\n        if (!this.isValidRegister(name)) {\n            return this.unnamedRegister;\n        }\n        name = name.toLowerCase();\n        if (!this.registers[name]) {\n            this.registers[name] = new Register();\n        }\n        return this.registers[name];\n    },\n    isValidRegister: function (name) {\n        return name && inArray(name, validRegisters);\n    },\n    shiftNumericRegisters_: function () {\n        for (var i = 9; i >= 2; i--) {\n            this.registers[i] = this.getRegister('' + (i - 1));\n        }\n    }\n};\nfunction HistoryController() {\n    this.historyBuffer = [];\n    this.iterator = 0;\n    this.initialPrefix = null;\n}\nHistoryController.prototype = {\n    nextMatch: function (input, up) {\n        var historyBuffer = this.historyBuffer;\n        var dir = up ? -1 : 1;\n        if (this.initialPrefix === null)\n            this.initialPrefix = input;\n        for (var i = this.iterator + dir; up ? i >= 0 : i < historyBuffer.length; i += dir) {\n            var element = historyBuffer[i];\n            for (var j = 0; j <= element.length; j++) {\n                if (this.initialPrefix == element.substring(0, j)) {\n                    this.iterator = i;\n                    return element;\n                }\n            }\n        }\n        if (i >= historyBuffer.length) {\n            this.iterator = historyBuffer.length;\n            return this.initialPrefix;\n        }\n        if (i < 0)\n            return input;\n    },\n    pushInput: function (input) {\n        var index = this.historyBuffer.indexOf(input);\n        if (index > -1)\n            this.historyBuffer.splice(index, 1);\n        if (input.length)\n            this.historyBuffer.push(input);\n    },\n    reset: function () {\n        this.initialPrefix = null;\n        this.iterator = this.historyBuffer.length;\n    }\n};\nvar commandDispatcher = {\n    matchCommand: function (keys, keyMap, inputState, context) {\n        var matches = commandMatches(keys, keyMap, context, inputState);\n        if (!matches.full && !matches.partial) {\n            return { type: 'none' };\n        }\n        else if (!matches.full && matches.partial) {\n            return { type: 'partial' };\n        }\n        var bestMatch;\n        for (var i = 0; i < matches.full.length; i++) {\n            var match = matches.full[i];\n            if (!bestMatch) {\n                bestMatch = match;\n            }\n        }\n        if (bestMatch.keys.slice(-11) == '<character>') {\n            var character = lastChar(keys);\n            if (!character || character.length > 1)\n                return { type: 'clear' };\n            inputState.selectedCharacter = character;\n        }\n        return { type: 'full', command: bestMatch };\n    },\n    processCommand: function (cm, vim, command) {\n        vim.inputState.repeatOverride = command.repeatOverride;\n        switch (command.type) {\n            case 'motion':\n                this.processMotion(cm, vim, command);\n                break;\n            case 'operator':\n                this.processOperator(cm, vim, command);\n                break;\n            case 'operatorMotion':\n                this.processOperatorMotion(cm, vim, command);\n                break;\n            case 'action':\n                this.processAction(cm, vim, command);\n                break;\n            case 'search':\n                this.processSearch(cm, vim, command);\n                break;\n            case 'ex':\n            case 'keyToEx':\n                this.processEx(cm, vim, command);\n                break;\n            default:\n                break;\n        }\n    },\n    processMotion: function (cm, vim, command) {\n        vim.inputState.motion = command.motion;\n        vim.inputState.motionArgs = copyArgs(command.motionArgs);\n        this.evalInput(cm, vim);\n    },\n    processOperator: function (cm, vim, command) {\n        var inputState = vim.inputState;\n        if (inputState.operator) {\n            if (inputState.operator == command.operator) {\n                inputState.motion = 'expandToLine';\n                inputState.motionArgs = { linewise: true };\n                this.evalInput(cm, vim);\n                return;\n            }\n            else {\n                clearInputState(cm);\n            }\n        }\n        inputState.operator = command.operator;\n        inputState.operatorArgs = copyArgs(command.operatorArgs);\n        if (command.keys.length > 1) {\n            inputState.operatorShortcut = command.keys;\n        }\n        if (command.exitVisualBlock) {\n            vim.visualBlock = false;\n            updateCmSelection(cm);\n        }\n        if (vim.visualMode) {\n            this.evalInput(cm, vim);\n        }\n    },\n    processOperatorMotion: function (cm, vim, command) {\n        var visualMode = vim.visualMode;\n        var operatorMotionArgs = copyArgs(command.operatorMotionArgs);\n        if (operatorMotionArgs) {\n            if (visualMode && operatorMotionArgs.visualLine) {\n                vim.visualLine = true;\n            }\n        }\n        this.processOperator(cm, vim, command);\n        if (!visualMode) {\n            this.processMotion(cm, vim, command);\n        }\n    },\n    processAction: function (cm, vim, command) {\n        var inputState = vim.inputState;\n        var repeat = inputState.getRepeat();\n        var repeatIsExplicit = !!repeat;\n        var actionArgs = copyArgs(command.actionArgs) || {};\n        if (inputState.selectedCharacter) {\n            actionArgs.selectedCharacter = inputState.selectedCharacter;\n        }\n        if (command.operator) {\n            this.processOperator(cm, vim, command);\n        }\n        if (command.motion) {\n            this.processMotion(cm, vim, command);\n        }\n        if (command.motion || command.operator) {\n            this.evalInput(cm, vim);\n        }\n        actionArgs.repeat = repeat || 1;\n        actionArgs.repeatIsExplicit = repeatIsExplicit;\n        actionArgs.registerName = inputState.registerName;\n        clearInputState(cm);\n        vim.lastMotion = null;\n        if (command.isEdit) {\n            this.recordLastEdit(vim, inputState, command);\n        }\n        actions[command.action](cm, actionArgs, vim);\n    },\n    processSearch: function (cm, vim, command) {\n        if (!cm.getSearchCursor) {\n            return;\n        }\n        var forward = command.searchArgs.forward;\n        var wholeWordOnly = command.searchArgs.wholeWordOnly;\n        getSearchState(cm).setReversed(!forward);\n        var promptPrefix = (forward) ? '/' : '?';\n        var originalQuery = getSearchState(cm).getQuery();\n        var originalScrollPos = cm.getScrollInfo();\n        function handleQuery(query, ignoreCase, smartCase) {\n            vimGlobalState.searchHistoryController.pushInput(query);\n            vimGlobalState.searchHistoryController.reset();\n            try {\n                updateSearchQuery(cm, query, ignoreCase, smartCase);\n            }\n            catch (e) {\n                showConfirm(cm, 'Invalid regex: ' + query);\n                clearInputState(cm);\n                return;\n            }\n            commandDispatcher.processMotion(cm, vim, {\n                type: 'motion',\n                motion: 'findNext',\n                motionArgs: { forward: true, toJumplist: command.searchArgs.toJumplist }\n            });\n        }\n        function onPromptClose(query) {\n            handleQuery(query, true /** ignoreCase */, true /** smartCase */);\n            var macroModeState = vimGlobalState.macroModeState;\n            if (macroModeState.isRecording) {\n                logSearchQuery(macroModeState, query);\n            }\n        }\n        function onPromptKeyUp(e, query, close) {\n            var keyName = CodeMirror.keyName(e), up, offset;\n            if (keyName == 'Up' || keyName == 'Down') {\n                up = keyName == 'Up' ? true : false;\n                offset = e.target ? e.target.selectionEnd : 0;\n                query = vimGlobalState.searchHistoryController.nextMatch(query, up) || '';\n                close(query);\n                if (offset && e.target)\n                    e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length);\n            }\n            else {\n                if (keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')\n                    vimGlobalState.searchHistoryController.reset();\n            }\n            var parsedQuery;\n            try {\n                parsedQuery = updateSearchQuery(cm, query, true /** ignoreCase */, true /** smartCase */);\n            }\n            catch (e) {\n            }\n            if (parsedQuery) {\n                cm.scrollIntoView(findNext(cm, !forward, parsedQuery), 30);\n            }\n            else {\n                clearSearchHighlight(cm);\n                cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n            }\n        }\n        function onPromptKeyDown(e, query, close) {\n            var keyName = CodeMirror.keyName(e);\n            if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||\n                (keyName == 'Backspace' && query == '')) {\n                vimGlobalState.searchHistoryController.pushInput(query);\n                vimGlobalState.searchHistoryController.reset();\n                updateSearchQuery(cm, originalQuery);\n                clearSearchHighlight(cm);\n                cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n                CodeMirror.e_stop(e);\n                clearInputState(cm);\n                close();\n                cm.focus();\n            }\n            else if (keyName == 'Up' || keyName == 'Down') {\n                CodeMirror.e_stop(e);\n            }\n            else if (keyName == 'Ctrl-U') {\n                CodeMirror.e_stop(e);\n                close('');\n            }\n        }\n        switch (command.searchArgs.querySrc) {\n            case 'prompt':\n                var macroModeState = vimGlobalState.macroModeState;\n                if (macroModeState.isPlaying) {\n                    var query = macroModeState.replaySearchQueries.shift();\n                    handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n                }\n                else {\n                    showPrompt(cm, {\n                        onClose: onPromptClose,\n                        prefix: promptPrefix,\n                        desc: '(JavaScript regexp)',\n                        onKeyUp: onPromptKeyUp,\n                        onKeyDown: onPromptKeyDown\n                    });\n                }\n                break;\n            case 'wordUnderCursor':\n                var word = expandWordUnderCursor(cm, false /** inclusive */, true /** forward */, false /** bigWord */, true /** noSymbol */);\n                var isKeyword = true;\n                if (!word) {\n                    word = expandWordUnderCursor(cm, false /** inclusive */, true /** forward */, false /** bigWord */, false /** noSymbol */);\n                    isKeyword = false;\n                }\n                if (!word) {\n                    return;\n                }\n                var query = cm.getLine(word.start.line).substring(word.start.ch, word.end.ch);\n                if (isKeyword && wholeWordOnly) {\n                    query = '\\\\b' + query + '\\\\b';\n                }\n                else {\n                    query = escapeRegex(query);\n                }\n                vimGlobalState.jumpList.cachedCursor = cm.getCursor();\n                cm.setCursor(word.start);\n                handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n                break;\n        }\n    },\n    processEx: function (cm, vim, command) {\n        function onPromptClose(input) {\n            vimGlobalState.exCommandHistoryController.pushInput(input);\n            vimGlobalState.exCommandHistoryController.reset();\n            exCommandDispatcher.processCommand(cm, input);\n            if (cm.state.vim)\n                clearInputState(cm);\n        }\n        function onPromptKeyDown(e, input, close) {\n            var keyName = CodeMirror.keyName(e), up, offset;\n            if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||\n                (keyName == 'Backspace' && input == '')) {\n                vimGlobalState.exCommandHistoryController.pushInput(input);\n                vimGlobalState.exCommandHistoryController.reset();\n                CodeMirror.e_stop(e);\n                clearInputState(cm);\n                close();\n                cm.focus();\n            }\n            if (keyName == 'Up' || keyName == 'Down') {\n                CodeMirror.e_stop(e);\n                up = keyName == 'Up' ? true : false;\n                offset = e.target ? e.target.selectionEnd : 0;\n                input = vimGlobalState.exCommandHistoryController.nextMatch(input, up) || '';\n                close(input);\n                if (offset && e.target)\n                    e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length);\n            }\n            else if (keyName == 'Ctrl-U') {\n                CodeMirror.e_stop(e);\n                close('');\n            }\n            else {\n                if (keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')\n                    vimGlobalState.exCommandHistoryController.reset();\n            }\n        }\n        if (command.type == 'keyToEx') {\n            exCommandDispatcher.processCommand(cm, command.exArgs.input);\n        }\n        else {\n            if (vim.visualMode) {\n                showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\\'<,\\'>',\n                    onKeyDown: onPromptKeyDown, selectValueOnOpen: false });\n            }\n            else {\n                showPrompt(cm, { onClose: onPromptClose, prefix: ':',\n                    onKeyDown: onPromptKeyDown });\n            }\n        }\n    },\n    evalInput: function (cm, vim) {\n        var inputState = vim.inputState;\n        var motion = inputState.motion;\n        var motionArgs = inputState.motionArgs || {};\n        var operator = inputState.operator;\n        var operatorArgs = inputState.operatorArgs || {};\n        var registerName = inputState.registerName;\n        var sel = vim.sel;\n        var origHead = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.head) : cm.getCursor('head'));\n        var origAnchor = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.anchor) : cm.getCursor('anchor'));\n        var oldHead = copyCursor(origHead);\n        var oldAnchor = copyCursor(origAnchor);\n        var newHead, newAnchor;\n        var repeat;\n        if (operator) {\n            this.recordLastEdit(vim, inputState);\n        }\n        if (inputState.repeatOverride !== undefined) {\n            repeat = inputState.repeatOverride;\n        }\n        else {\n            repeat = inputState.getRepeat();\n        }\n        if (repeat > 0 && motionArgs.explicitRepeat) {\n            motionArgs.repeatIsExplicit = true;\n        }\n        else if (motionArgs.noRepeat ||\n            (!motionArgs.explicitRepeat && repeat === 0)) {\n            repeat = 1;\n            motionArgs.repeatIsExplicit = false;\n        }\n        if (inputState.selectedCharacter) {\n            motionArgs.selectedCharacter = operatorArgs.selectedCharacter =\n                inputState.selectedCharacter;\n        }\n        motionArgs.repeat = repeat;\n        clearInputState(cm);\n        if (motion) {\n            var motionResult = motions[motion](cm, origHead, motionArgs, vim, inputState);\n            vim.lastMotion = motions[motion];\n            if (!motionResult) {\n                return;\n            }\n            if (motionArgs.toJumplist) {\n                if (!operator && cm.ace.curOp != null)\n                    cm.ace.curOp.command.scrollIntoView = \"center-animate\"; // ace_patch\n                var jumpList = vimGlobalState.jumpList;\n                var cachedCursor = jumpList.cachedCursor;\n                if (cachedCursor) {\n                    recordJumpPosition(cm, cachedCursor, motionResult);\n                    delete jumpList.cachedCursor;\n                }\n                else {\n                    recordJumpPosition(cm, origHead, motionResult);\n                }\n            }\n            if (motionResult instanceof Array) {\n                newAnchor = motionResult[0];\n                newHead = motionResult[1];\n            }\n            else {\n                newHead = motionResult;\n            }\n            if (!newHead) {\n                newHead = copyCursor(origHead);\n            }\n            if (vim.visualMode) {\n                if (!(vim.visualBlock && newHead.ch === Infinity)) {\n                    newHead = clipCursorToContent(cm, newHead, oldHead);\n                }\n                if (newAnchor) {\n                    newAnchor = clipCursorToContent(cm, newAnchor);\n                }\n                newAnchor = newAnchor || oldAnchor;\n                sel.anchor = newAnchor;\n                sel.head = newHead;\n                updateCmSelection(cm);\n                updateMark(cm, vim, '<', cursorIsBefore(newAnchor, newHead) ? newAnchor\n                    : newHead);\n                updateMark(cm, vim, '>', cursorIsBefore(newAnchor, newHead) ? newHead\n                    : newAnchor);\n            }\n            else if (!operator) {\n                newHead = clipCursorToContent(cm, newHead, oldHead);\n                cm.setCursor(newHead.line, newHead.ch);\n            }\n        }\n        if (operator) {\n            if (operatorArgs.lastSel) {\n                newAnchor = oldAnchor;\n                var lastSel = operatorArgs.lastSel;\n                var lineOffset = Math.abs(lastSel.head.line - lastSel.anchor.line);\n                var chOffset = Math.abs(lastSel.head.ch - lastSel.anchor.ch);\n                if (lastSel.visualLine) {\n                    newHead = new Pos(oldAnchor.line + lineOffset, oldAnchor.ch);\n                }\n                else if (lastSel.visualBlock) {\n                    newHead = new Pos(oldAnchor.line + lineOffset, oldAnchor.ch + chOffset);\n                }\n                else if (lastSel.head.line == lastSel.anchor.line) {\n                    newHead = new Pos(oldAnchor.line, oldAnchor.ch + chOffset);\n                }\n                else {\n                    newHead = new Pos(oldAnchor.line + lineOffset, oldAnchor.ch);\n                }\n                vim.visualMode = true;\n                vim.visualLine = lastSel.visualLine;\n                vim.visualBlock = lastSel.visualBlock;\n                sel = vim.sel = {\n                    anchor: newAnchor,\n                    head: newHead\n                };\n                updateCmSelection(cm);\n            }\n            else if (vim.visualMode) {\n                operatorArgs.lastSel = {\n                    anchor: copyCursor(sel.anchor),\n                    head: copyCursor(sel.head),\n                    visualBlock: vim.visualBlock,\n                    visualLine: vim.visualLine\n                };\n            }\n            var curStart, curEnd, linewise, mode;\n            var cmSel;\n            if (vim.visualMode) {\n                curStart = cursorMin(sel.head, sel.anchor);\n                curEnd = cursorMax(sel.head, sel.anchor);\n                linewise = vim.visualLine || operatorArgs.linewise;\n                mode = vim.visualBlock ? 'block' :\n                    linewise ? 'line' :\n                        'char';\n                var newPositions = updateSelectionForSurrogateCharacters(cm, curStart, curEnd);\n                cmSel = makeCmSelection(cm, {\n                    anchor: newPositions.start,\n                    head: newPositions.end\n                }, mode);\n                if (linewise) {\n                    var ranges = cmSel.ranges;\n                    if (mode == 'block') {\n                        for (var i = 0; i < ranges.length; i++) {\n                            ranges[i].head.ch = lineLength(cm, ranges[i].head.line);\n                        }\n                    }\n                    else if (mode == 'line') {\n                        ranges[0].head = new Pos(ranges[0].head.line + 1, 0);\n                    }\n                }\n            }\n            else {\n                curStart = copyCursor(newAnchor || oldAnchor);\n                curEnd = copyCursor(newHead || oldHead);\n                if (cursorIsBefore(curEnd, curStart)) {\n                    var tmp = curStart;\n                    curStart = curEnd;\n                    curEnd = tmp;\n                }\n                linewise = motionArgs.linewise || operatorArgs.linewise;\n                if (linewise) {\n                    expandSelectionToLine(cm, curStart, curEnd);\n                }\n                else if (motionArgs.forward) {\n                    clipToLine(cm, curStart, curEnd);\n                }\n                mode = 'char';\n                var exclusive = !motionArgs.inclusive || linewise;\n                var newPositions = updateSelectionForSurrogateCharacters(cm, curStart, curEnd);\n                cmSel = makeCmSelection(cm, {\n                    anchor: newPositions.start,\n                    head: newPositions.end\n                }, mode, exclusive);\n            }\n            cm.setSelections(cmSel.ranges, cmSel.primary);\n            vim.lastMotion = null;\n            operatorArgs.repeat = repeat; // For indent in visual mode.\n            operatorArgs.registerName = registerName;\n            operatorArgs.linewise = linewise;\n            var operatorMoveTo = operators[operator](cm, operatorArgs, cmSel.ranges, oldAnchor, newHead);\n            if (vim.visualMode) {\n                exitVisualMode(cm, operatorMoveTo != null);\n            }\n            if (operatorMoveTo) {\n                cm.setCursor(operatorMoveTo);\n            }\n        }\n    },\n    recordLastEdit: function (vim, inputState, actionCommand) {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isPlaying) {\n            return;\n        }\n        vim.lastEditInputState = inputState;\n        vim.lastEditActionCommand = actionCommand;\n        macroModeState.lastInsertModeChanges.changes = [];\n        macroModeState.lastInsertModeChanges.expectCursorActivityForChange = false;\n        macroModeState.lastInsertModeChanges.visualBlock = vim.visualBlock ? vim.sel.head.line - vim.sel.anchor.line : 0;\n    }\n};\nvar motions = {\n    moveToTopLine: function (cm, _head, motionArgs) {\n        var line = getUserVisibleLines(cm).top + motionArgs.repeat - 1;\n        return new Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n    },\n    moveToMiddleLine: function (cm) {\n        var range = getUserVisibleLines(cm);\n        var line = Math.floor((range.top + range.bottom) * 0.5);\n        return new Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n    },\n    moveToBottomLine: function (cm, _head, motionArgs) {\n        var line = getUserVisibleLines(cm).bottom - motionArgs.repeat + 1;\n        return new Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n    },\n    expandToLine: function (_cm, head, motionArgs) {\n        var cur = head;\n        return new Pos(cur.line + motionArgs.repeat - 1, Infinity);\n    },\n    findNext: function (cm, _head, motionArgs) {\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        if (!query) {\n            return;\n        }\n        var prev = !motionArgs.forward;\n        prev = (state.isReversed()) ? !prev : prev;\n        highlightSearchMatches(cm, query);\n        return findNext(cm, prev /** prev */, query, motionArgs.repeat);\n    },\n    findAndSelectNextInclusive: function (cm, _head, motionArgs, vim, prevInputState) {\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        if (!query) {\n            return;\n        }\n        var prev = !motionArgs.forward;\n        prev = (state.isReversed()) ? !prev : prev;\n        var next = findNextFromAndToInclusive(cm, prev, query, motionArgs.repeat, vim);\n        if (!next) {\n            return;\n        }\n        if (prevInputState.operator) {\n            return next;\n        }\n        var from = next[0];\n        var to = new Pos(next[1].line, next[1].ch - 1);\n        if (vim.visualMode) {\n            if (vim.visualLine || vim.visualBlock) {\n                vim.visualLine = false;\n                vim.visualBlock = false;\n                CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"visual\", subMode: \"\" });\n            }\n            var anchor = vim.sel.anchor;\n            if (anchor) {\n                if (state.isReversed()) {\n                    if (motionArgs.forward) {\n                        return [anchor, from];\n                    }\n                    return [anchor, to];\n                }\n                else {\n                    if (motionArgs.forward) {\n                        return [anchor, to];\n                    }\n                    return [anchor, from];\n                }\n            }\n        }\n        else {\n            vim.visualMode = true;\n            vim.visualLine = false;\n            vim.visualBlock = false;\n            CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"visual\", subMode: \"\" });\n        }\n        return prev ? [to, from] : [from, to];\n    },\n    goToMark: function (cm, _head, motionArgs, vim) {\n        var pos = getMarkPos(cm, vim, motionArgs.selectedCharacter);\n        if (pos) {\n            return motionArgs.linewise ? { line: pos.line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(pos.line)) } : pos;\n        }\n        return null;\n    },\n    moveToOtherHighlightedEnd: function (cm, _head, motionArgs, vim) {\n        if (vim.visualBlock && motionArgs.sameLine) {\n            var sel = vim.sel;\n            return [\n                clipCursorToContent(cm, new Pos(sel.anchor.line, sel.head.ch)),\n                clipCursorToContent(cm, new Pos(sel.head.line, sel.anchor.ch))\n            ];\n        }\n        else {\n            return ([vim.sel.head, vim.sel.anchor]);\n        }\n    },\n    jumpToMark: function (cm, head, motionArgs, vim) {\n        var best = head;\n        for (var i = 0; i < motionArgs.repeat; i++) {\n            var cursor = best;\n            for (var key in vim.marks) {\n                if (!isLowerCase(key)) {\n                    continue;\n                }\n                var mark = vim.marks[key].find();\n                var isWrongDirection = (motionArgs.forward) ?\n                    cursorIsBefore(mark, cursor) : cursorIsBefore(cursor, mark);\n                if (isWrongDirection) {\n                    continue;\n                }\n                if (motionArgs.linewise && (mark.line == cursor.line)) {\n                    continue;\n                }\n                var equal = cursorEqual(cursor, best);\n                var between = (motionArgs.forward) ?\n                    cursorIsBetween(cursor, mark, best) :\n                    cursorIsBetween(best, mark, cursor);\n                if (equal || between) {\n                    best = mark;\n                }\n            }\n        }\n        if (motionArgs.linewise) {\n            best = new Pos(best.line, findFirstNonWhiteSpaceCharacter(cm.getLine(best.line)));\n        }\n        return best;\n    },\n    moveByCharacters: function (_cm, head, motionArgs) {\n        var cur = head;\n        var repeat = motionArgs.repeat;\n        var ch = motionArgs.forward ? cur.ch + repeat : cur.ch - repeat;\n        return new Pos(cur.line, ch);\n    },\n    moveByLines: function (cm, head, motionArgs, vim) {\n        var cur = head;\n        var endCh = cur.ch;\n        switch (vim.lastMotion) {\n            case this.moveByLines:\n            case this.moveByDisplayLines:\n            case this.moveByScroll:\n            case this.moveToColumn:\n            case this.moveToEol:\n                endCh = vim.lastHPos;\n                break;\n            default:\n                vim.lastHPos = endCh;\n        }\n        var repeat = motionArgs.repeat + (motionArgs.repeatOffset || 0);\n        var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat;\n        var first = cm.firstLine();\n        var last = cm.lastLine();\n        if (line < first && cur.line == first) {\n            return this.moveToStartOfLine(cm, head, motionArgs, vim);\n        }\n        else if (line > last && cur.line == last) {\n            return moveToEol(cm, head, motionArgs, vim, true);\n        }\n        var fold = cm.ace.session.getFoldLine(line);\n        if (fold) {\n            if (motionArgs.forward) {\n                if (line > fold.start.row)\n                    line = fold.end.row + 1;\n            }\n            else {\n                line = fold.start.row;\n            }\n        }\n        if (motionArgs.toFirstChar) {\n            endCh = findFirstNonWhiteSpaceCharacter(cm.getLine(line));\n            vim.lastHPos = endCh;\n        }\n        vim.lastHSPos = cm.charCoords(new Pos(line, endCh), 'div').left;\n        return new Pos(line, endCh);\n    },\n    moveByDisplayLines: function (cm, head, motionArgs, vim) {\n        var cur = head;\n        switch (vim.lastMotion) {\n            case this.moveByDisplayLines:\n            case this.moveByScroll:\n            case this.moveByLines:\n            case this.moveToColumn:\n            case this.moveToEol:\n                break;\n            default:\n                vim.lastHSPos = cm.charCoords(cur, 'div').left;\n        }\n        var repeat = motionArgs.repeat;\n        var res = cm.findPosV(cur, (motionArgs.forward ? repeat : -repeat), 'line', vim.lastHSPos);\n        if (res.hitSide) {\n            if (motionArgs.forward) {\n                var lastCharCoords = cm.charCoords(res, 'div');\n                var goalCoords = { top: lastCharCoords.top + 8, left: vim.lastHSPos };\n                var res = cm.coordsChar(goalCoords, 'div');\n            }\n            else {\n                var resCoords = cm.charCoords(new Pos(cm.firstLine(), 0), 'div');\n                resCoords.left = vim.lastHSPos;\n                res = cm.coordsChar(resCoords, 'div');\n            }\n        }\n        vim.lastHPos = res.ch;\n        return res;\n    },\n    moveByPage: function (cm, head, motionArgs) {\n        var curStart = head;\n        var repeat = motionArgs.repeat;\n        return cm.findPosV(curStart, (motionArgs.forward ? repeat : -repeat), 'page');\n    },\n    moveByParagraph: function (cm, head, motionArgs) {\n        var dir = motionArgs.forward ? 1 : -1;\n        return findParagraph(cm, head, motionArgs.repeat, dir);\n    },\n    moveBySentence: function (cm, head, motionArgs) {\n        var dir = motionArgs.forward ? 1 : -1;\n        return findSentence(cm, head, motionArgs.repeat, dir);\n    },\n    moveByScroll: function (cm, head, motionArgs, vim) {\n        var scrollbox = cm.getScrollInfo();\n        var curEnd = null;\n        var repeat = motionArgs.repeat;\n        if (!repeat) {\n            repeat = scrollbox.clientHeight / (2 * cm.defaultTextHeight());\n        }\n        var orig = cm.charCoords(head, 'local');\n        motionArgs.repeat = repeat;\n        curEnd = motions.moveByDisplayLines(cm, head, motionArgs, vim);\n        if (!curEnd) {\n            return null;\n        }\n        var dest = cm.charCoords(curEnd, 'local');\n        cm.scrollTo(null, scrollbox.top + dest.top - orig.top);\n        return curEnd;\n    },\n    moveByWords: function (cm, head, motionArgs) {\n        return moveToWord(cm, head, motionArgs.repeat, !!motionArgs.forward, !!motionArgs.wordEnd, !!motionArgs.bigWord);\n    },\n    moveTillCharacter: function (cm, _head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        var curEnd = moveToCharacter(cm, repeat, motionArgs.forward, motionArgs.selectedCharacter);\n        var increment = motionArgs.forward ? -1 : 1;\n        recordLastCharacterSearch(increment, motionArgs);\n        if (!curEnd)\n            return null;\n        curEnd.ch += increment;\n        return curEnd;\n    },\n    moveToCharacter: function (cm, head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        recordLastCharacterSearch(0, motionArgs);\n        return moveToCharacter(cm, repeat, motionArgs.forward, motionArgs.selectedCharacter) || head;\n    },\n    moveToSymbol: function (cm, head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        return findSymbol(cm, repeat, motionArgs.forward, motionArgs.selectedCharacter) || head;\n    },\n    moveToColumn: function (cm, head, motionArgs, vim) {\n        var repeat = motionArgs.repeat;\n        vim.lastHPos = repeat - 1;\n        vim.lastHSPos = cm.charCoords(head, 'div').left;\n        return moveToColumn(cm, repeat);\n    },\n    moveToEol: function (cm, head, motionArgs, vim) {\n        return moveToEol(cm, head, motionArgs, vim, false);\n    },\n    moveToFirstNonWhiteSpaceCharacter: function (cm, head) {\n        var cursor = head;\n        return new Pos(cursor.line, findFirstNonWhiteSpaceCharacter(cm.getLine(cursor.line)));\n    },\n    moveToMatchedSymbol: function (cm, head) {\n        var cursor = head;\n        var line = cursor.line;\n        var ch = cursor.ch;\n        var lineText = cm.getLine(line);\n        var symbol;\n        for (; ch < lineText.length; ch++) {\n            symbol = lineText.charAt(ch);\n            if (symbol && isMatchableSymbol(symbol)) {\n                var style = cm.getTokenTypeAt(new Pos(line, ch + 1));\n                if (style !== \"string\" && style !== \"comment\") {\n                    break;\n                }\n            }\n        }\n        if (ch < lineText.length) {\n            var re = /[<>]/.test(lineText[ch]) ? /[(){}[\\]<>]/ : /[(){}[\\]]/; //ace_patch?\n            var matched = cm.findMatchingBracket(new Pos(line, ch + 1), { bracketRegex: re });\n            return matched.to;\n        }\n        else {\n            return cursor;\n        }\n    },\n    moveToStartOfLine: function (_cm, head) {\n        return new Pos(head.line, 0);\n    },\n    moveToLineOrEdgeOfDocument: function (cm, _head, motionArgs) {\n        var lineNum = motionArgs.forward ? cm.lastLine() : cm.firstLine();\n        if (motionArgs.repeatIsExplicit) {\n            lineNum = motionArgs.repeat - cm.getOption('firstLineNumber');\n        }\n        return new Pos(lineNum, findFirstNonWhiteSpaceCharacter(cm.getLine(lineNum)));\n    },\n    moveToStartOfDisplayLine: function (cm) {\n        cm.execCommand(\"goLineLeft\");\n        return cm.getCursor();\n    },\n    moveToEndOfDisplayLine: function (cm) {\n        cm.execCommand(\"goLineRight\");\n        var head = cm.getCursor();\n        if (head.sticky == \"before\")\n            head.ch--;\n        return head;\n    },\n    textObjectManipulation: function (cm, head, motionArgs, vim) {\n        var mirroredPairs = { '(': ')', ')': '(',\n            '{': '}', '}': '{',\n            '[': ']', ']': '[',\n            '<': '>', '>': '<' };\n        var selfPaired = { '\\'': true, '\"': true, '`': true };\n        var character = motionArgs.selectedCharacter;\n        if (character == 'b') {\n            character = '(';\n        }\n        else if (character == 'B') {\n            character = '{';\n        }\n        var inclusive = !motionArgs.textObjectInner;\n        var tmp;\n        if (mirroredPairs[character]) {\n            tmp = selectCompanionObject(cm, head, character, inclusive);\n        }\n        else if (selfPaired[character]) {\n            tmp = findBeginningAndEnd(cm, head, character, inclusive);\n        }\n        else if (character === 'W') {\n            tmp = expandWordUnderCursor(cm, inclusive, true /** forward */, true /** bigWord */);\n        }\n        else if (character === 'w') {\n            tmp = expandWordUnderCursor(cm, inclusive, true /** forward */, false /** bigWord */);\n        }\n        else if (character === 'p') {\n            tmp = findParagraph(cm, head, motionArgs.repeat, 0, inclusive);\n            motionArgs.linewise = true;\n            if (vim.visualMode) {\n                if (!vim.visualLine) {\n                    vim.visualLine = true;\n                }\n            }\n            else {\n                var operatorArgs = vim.inputState.operatorArgs;\n                if (operatorArgs) {\n                    operatorArgs.linewise = true;\n                }\n                tmp.end.line--;\n            }\n        }\n        else if (character === 't') {\n            tmp = expandTagUnderCursor(cm, head, inclusive);\n        }\n        else if (character === 's') {\n            var content = cm.getLine(head.line);\n            if (head.ch > 0 && isEndOfSentenceSymbol(content[head.ch])) {\n                head.ch -= 1;\n            }\n            var end = getSentence(cm, head, motionArgs.repeat, 1, inclusive);\n            var start = getSentence(cm, head, motionArgs.repeat, -1, inclusive);\n            if (isWhiteSpaceString(cm.getLine(start.line)[start.ch])\n                && isWhiteSpaceString(cm.getLine(end.line)[end.ch - 1])) {\n                start = { line: start.line, ch: start.ch + 1 };\n            }\n            tmp = { start: start, end: end };\n        }\n        else {\n            return null;\n        }\n        if (!cm.state.vim.visualMode) {\n            return [tmp.start, tmp.end];\n        }\n        else {\n            return expandSelection(cm, tmp.start, tmp.end);\n        }\n    },\n    repeatLastCharacterSearch: function (cm, head, motionArgs) {\n        var lastSearch = vimGlobalState.lastCharacterSearch;\n        var repeat = motionArgs.repeat;\n        var forward = motionArgs.forward === lastSearch.forward;\n        var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1);\n        cm.moveH(-increment, 'char');\n        motionArgs.inclusive = forward ? true : false;\n        var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter);\n        if (!curEnd) {\n            cm.moveH(increment, 'char');\n            return head;\n        }\n        curEnd.ch += increment;\n        return curEnd;\n    }\n};\nfunction defineMotion(name, fn) {\n    motions[name] = fn;\n}\nfunction fillArray(val, times) {\n    var arr = [];\n    for (var i = 0; i < times; i++) {\n        arr.push(val);\n    }\n    return arr;\n}\nvar operators = {\n    change: function (cm, args, ranges) {\n        var finalHead, text;\n        var vim = cm.state.vim;\n        var anchor = ranges[0].anchor, head = ranges[0].head;\n        if (!vim.visualMode) {\n            text = cm.getRange(anchor, head);\n            var lastState = vim.lastEditInputState || {};\n            if (lastState.motion == \"moveByWords\" && !isWhiteSpaceString(text)) {\n                var match = (/\\s+$/).exec(text);\n                if (match && lastState.motionArgs && lastState.motionArgs.forward) {\n                    head = offsetCursor(head, 0, -match[0].length);\n                    text = text.slice(0, -match[0].length);\n                }\n            }\n            var prevLineEnd = new Pos(anchor.line - 1, Number.MAX_VALUE);\n            var wasLastLine = cm.firstLine() == cm.lastLine();\n            if (head.line > cm.lastLine() && args.linewise && !wasLastLine) {\n                cm.replaceRange('', prevLineEnd, head);\n            }\n            else {\n                cm.replaceRange('', anchor, head);\n            }\n            if (args.linewise) {\n                if (!wasLastLine) {\n                    cm.setCursor(prevLineEnd);\n                    CodeMirror.commands.newlineAndIndent(cm);\n                }\n                anchor.ch = Number.MAX_VALUE;\n            }\n            finalHead = anchor;\n        }\n        else if (args.fullLine) {\n            head.ch = Number.MAX_VALUE;\n            head.line--;\n            cm.setSelection(anchor, head);\n            text = cm.getSelection();\n            cm.replaceSelection(\"\");\n            finalHead = anchor;\n        }\n        else {\n            text = cm.getSelection();\n            var replacement = fillArray('', ranges.length);\n            cm.replaceSelections(replacement);\n            finalHead = cursorMin(ranges[0].head, ranges[0].anchor);\n        }\n        vimGlobalState.registerController.pushText(args.registerName, 'change', text, args.linewise, ranges.length > 1);\n        actions.enterInsertMode(cm, { head: finalHead }, cm.state.vim);\n    },\n    'delete': function (cm, args, ranges) {\n        var finalHead, text;\n        var vim = cm.state.vim;\n        if (!vim.visualBlock) {\n            var anchor = ranges[0].anchor, head = ranges[0].head;\n            if (args.linewise &&\n                head.line != cm.firstLine() &&\n                anchor.line == cm.lastLine() &&\n                anchor.line == head.line - 1) {\n                if (anchor.line == cm.firstLine()) {\n                    anchor.ch = 0;\n                }\n                else {\n                    anchor = new Pos(anchor.line - 1, lineLength(cm, anchor.line - 1));\n                }\n            }\n            text = cm.getRange(anchor, head);\n            cm.replaceRange('', anchor, head);\n            finalHead = anchor;\n            if (args.linewise) {\n                finalHead = motions.moveToFirstNonWhiteSpaceCharacter(cm, anchor);\n            }\n        }\n        else {\n            text = cm.getSelection();\n            var replacement = fillArray('', ranges.length);\n            cm.replaceSelections(replacement);\n            finalHead = cursorMin(ranges[0].head, ranges[0].anchor);\n        }\n        vimGlobalState.registerController.pushText(args.registerName, 'delete', text, args.linewise, vim.visualBlock);\n        return clipCursorToContent(cm, finalHead);\n    },\n    indent: function (cm, args, ranges) {\n        var vim = cm.state.vim;\n        if (cm.indentMore) {\n            var repeat = (vim.visualMode) ? args.repeat : 1;\n            for (var j = 0; j < repeat; j++) {\n                if (args.indentRight)\n                    cm.indentMore();\n                else\n                    cm.indentLess();\n            }\n        }\n        else {\n            var startLine = ranges[0].anchor.line;\n            var endLine = vim.visualBlock ?\n                ranges[ranges.length - 1].anchor.line :\n                ranges[0].head.line;\n            var repeat = (vim.visualMode) ? args.repeat : 1;\n            if (args.linewise) {\n                endLine--;\n            }\n            for (var i = startLine; i <= endLine; i++) {\n                for (var j = 0; j < repeat; j++) {\n                    cm.indentLine(i, args.indentRight);\n                }\n            }\n        }\n        return motions.moveToFirstNonWhiteSpaceCharacter(cm, ranges[0].anchor);\n    },\n    indentAuto: function (cm, _args, ranges) {\n        if (ranges.length > 1) { // ace_patch\n            cm.setSelection(ranges[0].anchor, ranges[ranges.length - 1].head);\n        }\n        cm.execCommand(\"indentAuto\");\n        return motions.moveToFirstNonWhiteSpaceCharacter(cm, ranges[0].anchor);\n    },\n    changeCase: function (cm, args, ranges, oldAnchor, newHead) {\n        var selections = cm.getSelections();\n        var swapped = [];\n        var toLower = args.toLower;\n        for (var j = 0; j < selections.length; j++) {\n            var toSwap = selections[j];\n            var text = '';\n            if (toLower === true) {\n                text = toSwap.toLowerCase();\n            }\n            else if (toLower === false) {\n                text = toSwap.toUpperCase();\n            }\n            else {\n                for (var i = 0; i < toSwap.length; i++) {\n                    var character = toSwap.charAt(i);\n                    text += isUpperCase(character) ? character.toLowerCase() :\n                        character.toUpperCase();\n                }\n            }\n            swapped.push(text);\n        }\n        cm.replaceSelections(swapped);\n        if (args.shouldMoveCursor) {\n            return newHead;\n        }\n        else if (!cm.state.vim.visualMode && args.linewise && ranges[0].anchor.line + 1 == ranges[0].head.line) {\n            return motions.moveToFirstNonWhiteSpaceCharacter(cm, oldAnchor);\n        }\n        else if (args.linewise) {\n            return oldAnchor;\n        }\n        else {\n            return cursorMin(ranges[0].anchor, ranges[0].head);\n        }\n    },\n    yank: function (cm, args, ranges, oldAnchor) {\n        var vim = cm.state.vim;\n        var text = cm.getSelection();\n        var endPos = vim.visualMode\n            ? cursorMin(vim.sel.anchor, vim.sel.head, ranges[0].head, ranges[0].anchor)\n            : oldAnchor;\n        vimGlobalState.registerController.pushText(args.registerName, 'yank', text, args.linewise, vim.visualBlock);\n        return endPos;\n    }\n};\nfunction defineOperator(name, fn) {\n    operators[name] = fn;\n}\nvar actions = {\n    jumpListWalk: function (cm, actionArgs, vim) {\n        if (vim.visualMode) {\n            return;\n        }\n        var repeat = actionArgs.repeat;\n        var forward = actionArgs.forward;\n        var jumpList = vimGlobalState.jumpList;\n        var mark = jumpList.move(cm, forward ? repeat : -repeat);\n        var markPos = mark ? mark.find() : undefined;\n        markPos = markPos ? markPos : cm.getCursor();\n        cm.setCursor(markPos);\n        cm.ace.curOp.command.scrollIntoView = \"center-animate\"; // ace_patch\n    },\n    scroll: function (cm, actionArgs, vim) {\n        if (vim.visualMode) {\n            return;\n        }\n        var repeat = actionArgs.repeat || 1;\n        var lineHeight = cm.defaultTextHeight();\n        var top = cm.getScrollInfo().top;\n        var delta = lineHeight * repeat;\n        var newPos = actionArgs.forward ? top + delta : top - delta;\n        var cursor = copyCursor(cm.getCursor());\n        var cursorCoords = cm.charCoords(cursor, 'local');\n        if (actionArgs.forward) {\n            if (newPos > cursorCoords.top) {\n                cursor.line += (newPos - cursorCoords.top) / lineHeight;\n                cursor.line = Math.ceil(cursor.line);\n                cm.setCursor(cursor);\n                cursorCoords = cm.charCoords(cursor, 'local');\n                cm.scrollTo(null, cursorCoords.top);\n            }\n            else {\n                cm.scrollTo(null, newPos);\n            }\n        }\n        else {\n            var newBottom = newPos + cm.getScrollInfo().clientHeight;\n            if (newBottom < cursorCoords.bottom) {\n                cursor.line -= (cursorCoords.bottom - newBottom) / lineHeight;\n                cursor.line = Math.floor(cursor.line);\n                cm.setCursor(cursor);\n                cursorCoords = cm.charCoords(cursor, 'local');\n                cm.scrollTo(null, cursorCoords.bottom - cm.getScrollInfo().clientHeight);\n            }\n            else {\n                cm.scrollTo(null, newPos);\n            }\n        }\n    },\n    scrollToCursor: function (cm, actionArgs) {\n        var lineNum = cm.getCursor().line;\n        var charCoords = cm.charCoords(new Pos(lineNum, 0), 'local');\n        var height = cm.getScrollInfo().clientHeight;\n        var y = charCoords.top;\n        switch (actionArgs.position) {\n            case 'center':\n                y = charCoords.bottom - height / 2;\n                break;\n            case 'bottom':\n                var lineLastCharPos = new Pos(lineNum, cm.getLine(lineNum).length - 1);\n                var lineLastCharCoords = cm.charCoords(lineLastCharPos, 'local');\n                var lineHeight = lineLastCharCoords.bottom - y;\n                y = y - height + lineHeight;\n                break;\n        }\n        cm.scrollTo(null, y);\n    },\n    replayMacro: function (cm, actionArgs, vim) {\n        var registerName = actionArgs.selectedCharacter;\n        var repeat = actionArgs.repeat;\n        var macroModeState = vimGlobalState.macroModeState;\n        if (registerName == '@') {\n            registerName = macroModeState.latestRegister;\n        }\n        else {\n            macroModeState.latestRegister = registerName;\n        }\n        while (repeat--) {\n            executeMacroRegister(cm, vim, macroModeState, registerName);\n        }\n    },\n    enterMacroRecordMode: function (cm, actionArgs) {\n        var macroModeState = vimGlobalState.macroModeState;\n        var registerName = actionArgs.selectedCharacter;\n        if (vimGlobalState.registerController.isValidRegister(registerName)) {\n            macroModeState.enterMacroRecordMode(cm, registerName);\n        }\n    },\n    toggleOverwrite: function (cm) {\n        if (!cm.state.overwrite) {\n            cm.toggleOverwrite(true);\n            cm.setOption('keyMap', 'vim-replace');\n            CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"replace\" });\n        }\n        else {\n            cm.toggleOverwrite(false);\n            cm.setOption('keyMap', 'vim-insert');\n            CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"insert\" });\n        }\n    },\n    enterInsertMode: function (cm, actionArgs, vim) {\n        if (cm.getOption('readOnly')) {\n            return;\n        }\n        vim.insertMode = true;\n        vim.insertModeRepeat = actionArgs && actionArgs.repeat || 1;\n        var insertAt = (actionArgs) ? actionArgs.insertAt : null;\n        var sel = vim.sel;\n        var head = actionArgs.head || cm.getCursor('head');\n        var height = cm.listSelections().length;\n        if (insertAt == 'eol') {\n            head = new Pos(head.line, lineLength(cm, head.line));\n        }\n        else if (insertAt == 'bol') {\n            head = new Pos(head.line, 0);\n        }\n        else if (insertAt == 'charAfter') {\n            var newPosition = updateSelectionForSurrogateCharacters(cm, head, offsetCursor(head, 0, 1));\n            head = newPosition.end;\n        }\n        else if (insertAt == 'firstNonBlank') {\n            var newPosition = updateSelectionForSurrogateCharacters(cm, head, motions.moveToFirstNonWhiteSpaceCharacter(cm, head));\n            head = newPosition.end;\n        }\n        else if (insertAt == 'startOfSelectedArea') {\n            if (!vim.visualMode)\n                return;\n            if (!vim.visualBlock) {\n                if (sel.head.line < sel.anchor.line) {\n                    head = sel.head;\n                }\n                else {\n                    head = new Pos(sel.anchor.line, 0);\n                }\n            }\n            else {\n                head = new Pos(Math.min(sel.head.line, sel.anchor.line), Math.min(sel.head.ch, sel.anchor.ch));\n                height = Math.abs(sel.head.line - sel.anchor.line) + 1;\n            }\n        }\n        else if (insertAt == 'endOfSelectedArea') {\n            if (!vim.visualMode)\n                return;\n            if (!vim.visualBlock) {\n                if (sel.head.line >= sel.anchor.line) {\n                    head = offsetCursor(sel.head, 0, 1);\n                }\n                else {\n                    head = new Pos(sel.anchor.line, 0);\n                }\n            }\n            else {\n                head = new Pos(Math.min(sel.head.line, sel.anchor.line), Math.max(sel.head.ch, sel.anchor.ch) + 1);\n                height = Math.abs(sel.head.line - sel.anchor.line) + 1;\n            }\n        }\n        else if (insertAt == 'inplace') {\n            if (vim.visualMode) {\n                return;\n            }\n        }\n        else if (insertAt == 'lastEdit') {\n            head = getLastEditPos(cm) || head;\n        }\n        cm.setOption('disableInput', false);\n        if (actionArgs && actionArgs.replace) {\n            cm.toggleOverwrite(true);\n            cm.setOption('keyMap', 'vim-replace');\n            CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"replace\" });\n        }\n        else {\n            cm.toggleOverwrite(false);\n            cm.setOption('keyMap', 'vim-insert');\n            CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"insert\" });\n        }\n        if (!vimGlobalState.macroModeState.isPlaying) {\n            cm.on('change', onChange);\n            CodeMirror.on(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n        }\n        if (vim.visualMode) {\n            exitVisualMode(cm);\n        }\n        selectForInsert(cm, head, height);\n    },\n    toggleVisualMode: function (cm, actionArgs, vim) {\n        var repeat = actionArgs.repeat;\n        var anchor = cm.getCursor();\n        var head;\n        if (!vim.visualMode) {\n            vim.visualMode = true;\n            vim.visualLine = !!actionArgs.linewise;\n            vim.visualBlock = !!actionArgs.blockwise;\n            head = clipCursorToContent(cm, new Pos(anchor.line, anchor.ch + repeat - 1));\n            var newPosition = updateSelectionForSurrogateCharacters(cm, anchor, head);\n            vim.sel = {\n                anchor: newPosition.start,\n                head: newPosition.end\n            };\n            CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : vim.visualBlock ? \"blockwise\" : \"\" });\n            updateCmSelection(cm);\n            updateMark(cm, vim, '<', cursorMin(anchor, head));\n            updateMark(cm, vim, '>', cursorMax(anchor, head));\n        }\n        else if (vim.visualLine ^ actionArgs.linewise ||\n            vim.visualBlock ^ actionArgs.blockwise) {\n            vim.visualLine = !!actionArgs.linewise;\n            vim.visualBlock = !!actionArgs.blockwise;\n            CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : vim.visualBlock ? \"blockwise\" : \"\" });\n            updateCmSelection(cm);\n        }\n        else {\n            exitVisualMode(cm);\n        }\n    },\n    reselectLastSelection: function (cm, _actionArgs, vim) {\n        var lastSelection = vim.lastSelection;\n        if (vim.visualMode) {\n            updateLastSelection(cm, vim);\n        }\n        if (lastSelection) {\n            var anchor = lastSelection.anchorMark.find();\n            var head = lastSelection.headMark.find();\n            if (!anchor || !head) {\n                return;\n            }\n            vim.sel = {\n                anchor: anchor,\n                head: head\n            };\n            vim.visualMode = true;\n            vim.visualLine = lastSelection.visualLine;\n            vim.visualBlock = lastSelection.visualBlock;\n            updateCmSelection(cm);\n            updateMark(cm, vim, '<', cursorMin(anchor, head));\n            updateMark(cm, vim, '>', cursorMax(anchor, head));\n            CodeMirror.signal(cm, 'vim-mode-change', {\n                mode: 'visual',\n                subMode: vim.visualLine ? 'linewise' :\n                    vim.visualBlock ? 'blockwise' : ''\n            });\n        }\n    },\n    joinLines: function (cm, actionArgs, vim) {\n        var curStart, curEnd;\n        if (vim.visualMode) {\n            curStart = cm.getCursor('anchor');\n            curEnd = cm.getCursor('head');\n            if (cursorIsBefore(curEnd, curStart)) {\n                var tmp = curEnd;\n                curEnd = curStart;\n                curStart = tmp;\n            }\n            curEnd.ch = lineLength(cm, curEnd.line) - 1;\n        }\n        else {\n            var repeat = Math.max(actionArgs.repeat, 2);\n            curStart = cm.getCursor();\n            curEnd = clipCursorToContent(cm, new Pos(curStart.line + repeat - 1, Infinity));\n        }\n        var finalCh = 0;\n        for (var i = curStart.line; i < curEnd.line; i++) {\n            finalCh = lineLength(cm, curStart.line);\n            var text = '';\n            var nextStartCh = 0;\n            if (!actionArgs.keepSpaces) {\n                var nextLine = cm.getLine(curStart.line + 1);\n                nextStartCh = nextLine.search(/\\S/);\n                if (nextStartCh == -1) {\n                    nextStartCh = nextLine.length;\n                }\n                else {\n                    text = \" \";\n                }\n            }\n            cm.replaceRange(text, new Pos(curStart.line, finalCh), new Pos(curStart.line + 1, nextStartCh));\n        }\n        var curFinalPos = clipCursorToContent(cm, new Pos(curStart.line, finalCh));\n        if (vim.visualMode) {\n            exitVisualMode(cm, false);\n        }\n        cm.setCursor(curFinalPos);\n    },\n    newLineAndEnterInsertMode: function (cm, actionArgs, vim) {\n        vim.insertMode = true;\n        var insertAt = copyCursor(cm.getCursor());\n        if (insertAt.line === cm.firstLine() && !actionArgs.after) {\n            cm.replaceRange('\\n', new Pos(cm.firstLine(), 0));\n            cm.setCursor(cm.firstLine(), 0);\n        }\n        else {\n            insertAt.line = (actionArgs.after) ? insertAt.line :\n                insertAt.line - 1;\n            insertAt.ch = lineLength(cm, insertAt.line);\n            cm.setCursor(insertAt);\n            var newlineFn = CodeMirror.commands.newlineAndIndentContinueComment ||\n                CodeMirror.commands.newlineAndIndent;\n            newlineFn(cm);\n        }\n        this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim);\n    },\n    paste: function (cm, actionArgs, vim) {\n        var _this = this;\n        var register = vimGlobalState.registerController.getRegister(actionArgs.registerName);\n        if (actionArgs.registerName === '+') {\n            navigator.clipboard.readText().then(function (value) {\n                _this.continuePaste(cm, actionArgs, vim, value, register);\n            });\n        }\n        else {\n            var text = register.toString();\n            this.continuePaste(cm, actionArgs, vim, text, register);\n        }\n    },\n    continuePaste: function (cm, actionArgs, vim, text, register) {\n        var cur = copyCursor(cm.getCursor());\n        if (!text) {\n            return;\n        }\n        if (actionArgs.matchIndent) {\n            var tabSize = cm.getOption(\"tabSize\");\n            var whitespaceLength = function (str) {\n                var tabs = (str.split(\"\\t\").length - 1);\n                var spaces = (str.split(\" \").length - 1);\n                return tabs * tabSize + spaces * 1;\n            };\n            var currentLine = cm.getLine(cm.getCursor().line);\n            var indent = whitespaceLength(currentLine.match(/^\\s*/)[0]);\n            var chompedText = text.replace(/\\n$/, '');\n            var wasChomped = text !== chompedText;\n            var firstIndent = whitespaceLength(text.match(/^\\s*/)[0]);\n            var text = chompedText.replace(/^\\s*/gm, function (wspace) {\n                var newIndent = indent + (whitespaceLength(wspace) - firstIndent);\n                if (newIndent < 0) {\n                    return \"\";\n                }\n                else if (cm.getOption(\"indentWithTabs\")) {\n                    var quotient = Math.floor(newIndent / tabSize);\n                    return Array(quotient + 1).join('\\t');\n                }\n                else {\n                    return Array(newIndent + 1).join(' ');\n                }\n            });\n            text += wasChomped ? \"\\n\" : \"\";\n        }\n        if (actionArgs.repeat > 1) {\n            var text = Array(actionArgs.repeat + 1).join(text);\n        }\n        var linewise = register.linewise;\n        var blockwise = register.blockwise;\n        if (blockwise) {\n            text = text.split('\\n');\n            if (linewise) {\n                text.pop();\n            }\n            for (var i = 0; i < text.length; i++) {\n                text[i] = (text[i] == '') ? ' ' : text[i];\n            }\n            cur.ch += actionArgs.after ? 1 : 0;\n            cur.ch = Math.min(lineLength(cm, cur.line), cur.ch);\n        }\n        else if (linewise) {\n            if (vim.visualMode) {\n                text = vim.visualLine ? text.slice(0, -1) : '\\n' + text.slice(0, text.length - 1) + '\\n';\n            }\n            else if (actionArgs.after) {\n                text = '\\n' + text.slice(0, text.length - 1);\n                cur.ch = lineLength(cm, cur.line);\n            }\n            else {\n                cur.ch = 0;\n            }\n        }\n        else {\n            cur.ch += actionArgs.after ? 1 : 0;\n        }\n        var curPosFinal;\n        var idx;\n        if (vim.visualMode) {\n            vim.lastPastedText = text;\n            var lastSelectionCurEnd;\n            var selectedArea = getSelectedAreaRange(cm, vim);\n            var selectionStart = selectedArea[0];\n            var selectionEnd = selectedArea[1];\n            var selectedText = cm.getSelection();\n            var selections = cm.listSelections();\n            var emptyStrings = new Array(selections.length).join('1').split('1');\n            if (vim.lastSelection) {\n                lastSelectionCurEnd = vim.lastSelection.headMark.find();\n            }\n            vimGlobalState.registerController.unnamedRegister.setText(selectedText);\n            if (blockwise) {\n                cm.replaceSelections(emptyStrings);\n                selectionEnd = new Pos(selectionStart.line + text.length - 1, selectionStart.ch);\n                cm.setCursor(selectionStart);\n                selectBlock(cm, selectionEnd);\n                cm.replaceSelections(text);\n                curPosFinal = selectionStart;\n            }\n            else if (vim.visualBlock) {\n                cm.replaceSelections(emptyStrings);\n                cm.setCursor(selectionStart);\n                cm.replaceRange(text, selectionStart, selectionStart);\n                curPosFinal = selectionStart;\n            }\n            else {\n                cm.replaceRange(text, selectionStart, selectionEnd);\n                curPosFinal = cm.posFromIndex(cm.indexFromPos(selectionStart) + text.length - 1);\n            }\n            if (lastSelectionCurEnd) {\n                vim.lastSelection.headMark = cm.setBookmark(lastSelectionCurEnd);\n            }\n            if (linewise) {\n                curPosFinal.ch = 0;\n            }\n        }\n        else {\n            if (blockwise) {\n                cm.setCursor(cur);\n                for (var i = 0; i < text.length; i++) {\n                    var line = cur.line + i;\n                    if (line > cm.lastLine()) {\n                        cm.replaceRange('\\n', new Pos(line, 0));\n                    }\n                    var lastCh = lineLength(cm, line);\n                    if (lastCh < cur.ch) {\n                        extendLineToColumn(cm, line, cur.ch);\n                    }\n                }\n                cm.setCursor(cur);\n                selectBlock(cm, new Pos(cur.line + text.length - 1, cur.ch));\n                cm.replaceSelections(text);\n                curPosFinal = cur;\n            }\n            else {\n                cm.replaceRange(text, cur);\n                if (linewise && actionArgs.after) {\n                    curPosFinal = new Pos(cur.line + 1, findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1)));\n                }\n                else if (linewise && !actionArgs.after) {\n                    curPosFinal = new Pos(cur.line, findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line)));\n                }\n                else if (!linewise && actionArgs.after) {\n                    idx = cm.indexFromPos(cur);\n                    curPosFinal = cm.posFromIndex(idx + text.length - 1);\n                }\n                else {\n                    idx = cm.indexFromPos(cur);\n                    curPosFinal = cm.posFromIndex(idx + text.length);\n                }\n            }\n        }\n        if (vim.visualMode) {\n            exitVisualMode(cm, false);\n        }\n        cm.setCursor(curPosFinal);\n    },\n    undo: function (cm, actionArgs) {\n        cm.operation(function () {\n            repeatFn(cm, CodeMirror.commands.undo, actionArgs.repeat)();\n            cm.setCursor(clipCursorToContent(cm, cm.getCursor('start')));\n        });\n    },\n    redo: function (cm, actionArgs) {\n        repeatFn(cm, CodeMirror.commands.redo, actionArgs.repeat)();\n    },\n    setRegister: function (_cm, actionArgs, vim) {\n        vim.inputState.registerName = actionArgs.selectedCharacter;\n    },\n    setMark: function (cm, actionArgs, vim) {\n        var markName = actionArgs.selectedCharacter;\n        updateMark(cm, vim, markName, cm.getCursor());\n    },\n    replace: function (cm, actionArgs, vim) {\n        var replaceWith = actionArgs.selectedCharacter;\n        var curStart = cm.getCursor();\n        var replaceTo;\n        var curEnd;\n        var selections = cm.listSelections();\n        if (vim.visualMode) {\n            curStart = cm.getCursor('start');\n            curEnd = cm.getCursor('end');\n        }\n        else {\n            var line = cm.getLine(curStart.line);\n            replaceTo = curStart.ch + actionArgs.repeat;\n            if (replaceTo > line.length) {\n                replaceTo = line.length;\n            }\n            curEnd = new Pos(curStart.line, replaceTo);\n        }\n        var newPositions = updateSelectionForSurrogateCharacters(cm, curStart, curEnd);\n        curStart = newPositions.start;\n        curEnd = newPositions.end;\n        if (replaceWith == '\\n') {\n            if (!vim.visualMode)\n                cm.replaceRange('', curStart, curEnd);\n            (CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent)(cm);\n        }\n        else {\n            var replaceWithStr = cm.getRange(curStart, curEnd);\n            replaceWithStr = replaceWithStr.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, replaceWith);\n            replaceWithStr = replaceWithStr.replace(/[^\\n]/g, replaceWith);\n            if (vim.visualBlock) {\n                var spaces = new Array(cm.getOption(\"tabSize\") + 1).join(' ');\n                replaceWithStr = cm.getSelection();\n                replaceWithStr = replaceWithStr.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, replaceWith);\n                replaceWithStr = replaceWithStr.replace(/\\t/g, spaces).replace(/[^\\n]/g, replaceWith).split('\\n');\n                cm.replaceSelections(replaceWithStr);\n            }\n            else {\n                cm.replaceRange(replaceWithStr, curStart, curEnd);\n            }\n            if (vim.visualMode) {\n                curStart = cursorIsBefore(selections[0].anchor, selections[0].head) ?\n                    selections[0].anchor : selections[0].head;\n                cm.setCursor(curStart);\n                exitVisualMode(cm, false);\n            }\n            else {\n                cm.setCursor(offsetCursor(curEnd, 0, -1));\n            }\n        }\n    },\n    incrementNumberToken: function (cm, actionArgs) {\n        var cur = cm.getCursor();\n        var lineStr = cm.getLine(cur.line);\n        var re = /(-?)(?:(0x)([\\da-f]+)|(0b|0|)(\\d+))/gi;\n        var match;\n        var start;\n        var end;\n        var numberStr;\n        while ((match = re.exec(lineStr)) !== null) {\n            start = match.index;\n            end = start + match[0].length;\n            if (cur.ch < end)\n                break;\n        }\n        if (!actionArgs.backtrack && (end <= cur.ch))\n            return;\n        if (match) {\n            var baseStr = match[2] || match[4];\n            var digits = match[3] || match[5];\n            var increment = actionArgs.increase ? 1 : -1;\n            var base = { '0b': 2, '0': 8, '': 10, '0x': 16 }[baseStr.toLowerCase()];\n            var number = parseInt(match[1] + digits, base) + (increment * actionArgs.repeat);\n            numberStr = number.toString(base);\n            var zeroPadding = baseStr ? new Array(digits.length - numberStr.length + 1 + match[1].length).join('0') : '';\n            if (numberStr.charAt(0) === '-') {\n                numberStr = '-' + baseStr + zeroPadding + numberStr.substr(1);\n            }\n            else {\n                numberStr = baseStr + zeroPadding + numberStr;\n            }\n            var from = new Pos(cur.line, start);\n            var to = new Pos(cur.line, end);\n            cm.replaceRange(numberStr, from, to);\n        }\n        else {\n            return;\n        }\n        cm.setCursor(new Pos(cur.line, start + numberStr.length - 1));\n    },\n    repeatLastEdit: function (cm, actionArgs, vim) {\n        var lastEditInputState = vim.lastEditInputState;\n        if (!lastEditInputState) {\n            return;\n        }\n        var repeat = actionArgs.repeat;\n        if (repeat && actionArgs.repeatIsExplicit) {\n            vim.lastEditInputState.repeatOverride = repeat;\n        }\n        else {\n            repeat = vim.lastEditInputState.repeatOverride || repeat;\n        }\n        repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */);\n    },\n    indent: function (cm, actionArgs) {\n        cm.indentLine(cm.getCursor().line, actionArgs.indentRight);\n    },\n    exitInsertMode: exitInsertMode\n};\nfunction defineAction(name, fn) {\n    actions[name] = fn;\n}\nfunction clipCursorToContent(cm, cur, oldCur) {\n    var vim = cm.state.vim;\n    var includeLineBreak = vim.insertMode || vim.visualMode;\n    var line = Math.min(Math.max(cm.firstLine(), cur.line), cm.lastLine());\n    var text = cm.getLine(line);\n    var maxCh = text.length - 1 + !!includeLineBreak;\n    var ch = Math.min(Math.max(0, cur.ch), maxCh);\n    var charCode = text.charCodeAt(ch);\n    if (0xDC00 < charCode && charCode < 0xDFFF) {\n        var direction = 1;\n        if (oldCur && oldCur.line == line) {\n            if (oldCur.ch > ch) {\n                direction = -1;\n            }\n        }\n        ch += direction;\n        if (ch > maxCh)\n            ch -= 2;\n    }\n    return new Pos(line, ch);\n}\nfunction copyArgs(args) {\n    var ret = {};\n    for (var prop in args) {\n        if (args.hasOwnProperty(prop)) {\n            ret[prop] = args[prop];\n        }\n    }\n    return ret;\n}\nfunction offsetCursor(cur, offsetLine, offsetCh) {\n    if (typeof offsetLine === 'object') {\n        offsetCh = offsetLine.ch;\n        offsetLine = offsetLine.line;\n    }\n    return new Pos(cur.line + offsetLine, cur.ch + offsetCh);\n}\nfunction commandMatches(keys, keyMap, context, inputState) {\n    var match, partial = [], full = [];\n    for (var i = 0; i < keyMap.length; i++) {\n        var command = keyMap[i];\n        if (context == 'insert' && command.context != 'insert' ||\n            command.context && command.context != context ||\n            inputState.operator && command.type == 'action' ||\n            !(match = commandMatch(keys, command.keys))) {\n            continue;\n        }\n        if (match == 'partial') {\n            partial.push(command);\n        }\n        if (match == 'full') {\n            full.push(command);\n        }\n    }\n    return {\n        partial: partial.length && partial,\n        full: full.length && full\n    };\n}\nfunction commandMatch(pressed, mapped) {\n    if (mapped.slice(-11) == '<character>') {\n        var prefixLen = mapped.length - 11;\n        var pressedPrefix = pressed.slice(0, prefixLen);\n        var mappedPrefix = mapped.slice(0, prefixLen);\n        return pressedPrefix == mappedPrefix && pressed.length > prefixLen ? 'full' :\n            mappedPrefix.indexOf(pressedPrefix) == 0 ? 'partial' : false;\n    }\n    else {\n        return pressed == mapped ? 'full' :\n            mapped.indexOf(pressed) == 0 ? 'partial' : false;\n    }\n}\nfunction lastChar(keys) {\n    var match = /^.*(<[^>]+>)$/.exec(keys);\n    var selectedCharacter = match ? match[1] : keys.slice(-1);\n    if (selectedCharacter.length > 1) {\n        switch (selectedCharacter) {\n            case '<CR>':\n                selectedCharacter = '\\n';\n                break;\n            case '<Space>':\n                selectedCharacter = ' ';\n                break;\n            default:\n                selectedCharacter = '';\n                break;\n        }\n    }\n    return selectedCharacter;\n}\nfunction repeatFn(cm, fn, repeat) {\n    return function () {\n        for (var i = 0; i < repeat; i++) {\n            fn(cm);\n        }\n    };\n}\nfunction copyCursor(cur) {\n    return new Pos(cur.line, cur.ch);\n}\nfunction cursorEqual(cur1, cur2) {\n    return cur1.ch == cur2.ch && cur1.line == cur2.line;\n}\nfunction cursorIsBefore(cur1, cur2) {\n    if (cur1.line < cur2.line) {\n        return true;\n    }\n    if (cur1.line == cur2.line && cur1.ch < cur2.ch) {\n        return true;\n    }\n    return false;\n}\nfunction cursorMin(cur1, cur2) {\n    if (arguments.length > 2) {\n        cur2 = cursorMin.apply(undefined, Array.prototype.slice.call(arguments, 1));\n    }\n    return cursorIsBefore(cur1, cur2) ? cur1 : cur2;\n}\nfunction cursorMax(cur1, cur2) {\n    if (arguments.length > 2) {\n        cur2 = cursorMax.apply(undefined, Array.prototype.slice.call(arguments, 1));\n    }\n    return cursorIsBefore(cur1, cur2) ? cur2 : cur1;\n}\nfunction cursorIsBetween(cur1, cur2, cur3) {\n    var cur1before2 = cursorIsBefore(cur1, cur2);\n    var cur2before3 = cursorIsBefore(cur2, cur3);\n    return cur1before2 && cur2before3;\n}\nfunction lineLength(cm, lineNum) {\n    return cm.getLine(lineNum).length;\n}\nfunction trim(s) {\n    if (s.trim) {\n        return s.trim();\n    }\n    return s.replace(/^\\s+|\\s+$/g, '');\n}\nfunction escapeRegex(s) {\n    return s.replace(/([.?*+$\\[\\]\\/\\\\(){}|\\-])/g, '\\\\$1');\n}\nfunction extendLineToColumn(cm, lineNum, column) {\n    var endCh = lineLength(cm, lineNum);\n    var spaces = new Array(column - endCh + 1).join(' ');\n    cm.setCursor(new Pos(lineNum, endCh));\n    cm.replaceRange(spaces, cm.getCursor());\n}\nfunction selectBlock(cm, selectionEnd) {\n    var selections = [], ranges = cm.listSelections();\n    var head = copyCursor(cm.clipPos(selectionEnd));\n    var isClipped = !cursorEqual(selectionEnd, head);\n    var curHead = cm.getCursor('head');\n    var primIndex = getIndex(ranges, curHead);\n    var wasClipped = cursorEqual(ranges[primIndex].head, ranges[primIndex].anchor);\n    var max = ranges.length - 1;\n    var index = max - primIndex > primIndex ? max : 0;\n    var base = ranges[index].anchor;\n    var firstLine = Math.min(base.line, head.line);\n    var lastLine = Math.max(base.line, head.line);\n    var baseCh = base.ch, headCh = head.ch;\n    var dir = ranges[index].head.ch - baseCh;\n    var newDir = headCh - baseCh;\n    if (dir > 0 && newDir <= 0) {\n        baseCh++;\n        if (!isClipped) {\n            headCh--;\n        }\n    }\n    else if (dir < 0 && newDir >= 0) {\n        baseCh--;\n        if (!wasClipped) {\n            headCh++;\n        }\n    }\n    else if (dir < 0 && newDir == -1) {\n        baseCh--;\n        headCh++;\n    }\n    for (var line = firstLine; line <= lastLine; line++) {\n        var range = { anchor: new Pos(line, baseCh), head: new Pos(line, headCh) };\n        selections.push(range);\n    }\n    cm.setSelections(selections);\n    selectionEnd.ch = headCh;\n    base.ch = baseCh;\n    return base;\n}\nfunction selectForInsert(cm, head, height) {\n    var sel = [];\n    for (var i = 0; i < height; i++) {\n        var lineHead = offsetCursor(head, i, 0);\n        sel.push({ anchor: lineHead, head: lineHead });\n    }\n    cm.setSelections(sel, 0);\n}\nfunction getIndex(ranges, cursor, end) {\n    for (var i = 0; i < ranges.length; i++) {\n        var atAnchor = end != 'head' && cursorEqual(ranges[i].anchor, cursor);\n        var atHead = end != 'anchor' && cursorEqual(ranges[i].head, cursor);\n        if (atAnchor || atHead) {\n            return i;\n        }\n    }\n    return -1;\n}\nfunction getSelectedAreaRange(cm, vim) {\n    var lastSelection = vim.lastSelection;\n    var getCurrentSelectedAreaRange = function () {\n        var selections = cm.listSelections();\n        var start = selections[0];\n        var end = selections[selections.length - 1];\n        var selectionStart = cursorIsBefore(start.anchor, start.head) ? start.anchor : start.head;\n        var selectionEnd = cursorIsBefore(end.anchor, end.head) ? end.head : end.anchor;\n        return [selectionStart, selectionEnd];\n    };\n    var getLastSelectedAreaRange = function () {\n        var selectionStart = cm.getCursor();\n        var selectionEnd = cm.getCursor();\n        var block = lastSelection.visualBlock;\n        if (block) {\n            var width = block.width;\n            var height = block.height;\n            selectionEnd = new Pos(selectionStart.line + height, selectionStart.ch + width);\n            var selections = [];\n            for (var i = selectionStart.line; i < selectionEnd.line; i++) {\n                var anchor = new Pos(i, selectionStart.ch);\n                var head = new Pos(i, selectionEnd.ch);\n                var range = { anchor: anchor, head: head };\n                selections.push(range);\n            }\n            cm.setSelections(selections);\n        }\n        else {\n            var start = lastSelection.anchorMark.find();\n            var end = lastSelection.headMark.find();\n            var line = end.line - start.line;\n            var ch = end.ch - start.ch;\n            selectionEnd = { line: selectionEnd.line + line, ch: line ? selectionEnd.ch : ch + selectionEnd.ch };\n            if (lastSelection.visualLine) {\n                selectionStart = new Pos(selectionStart.line, 0);\n                selectionEnd = new Pos(selectionEnd.line, lineLength(cm, selectionEnd.line));\n            }\n            cm.setSelection(selectionStart, selectionEnd);\n        }\n        return [selectionStart, selectionEnd];\n    };\n    if (!vim.visualMode) {\n        return getLastSelectedAreaRange();\n    }\n    else {\n        return getCurrentSelectedAreaRange();\n    }\n}\nfunction updateLastSelection(cm, vim) {\n    var anchor = vim.sel.anchor;\n    var head = vim.sel.head;\n    if (vim.lastPastedText) {\n        head = cm.posFromIndex(cm.indexFromPos(anchor) + vim.lastPastedText.length);\n        vim.lastPastedText = null;\n    }\n    vim.lastSelection = { 'anchorMark': cm.setBookmark(anchor),\n        'headMark': cm.setBookmark(head),\n        'anchor': copyCursor(anchor),\n        'head': copyCursor(head),\n        'visualMode': vim.visualMode,\n        'visualLine': vim.visualLine,\n        'visualBlock': vim.visualBlock };\n}\nfunction expandSelection(cm, start, end) {\n    var sel = cm.state.vim.sel;\n    var head = sel.head;\n    var anchor = sel.anchor;\n    var tmp;\n    if (cursorIsBefore(end, start)) {\n        tmp = end;\n        end = start;\n        start = tmp;\n    }\n    if (cursorIsBefore(head, anchor)) {\n        head = cursorMin(start, head);\n        anchor = cursorMax(anchor, end);\n    }\n    else {\n        anchor = cursorMin(start, anchor);\n        head = cursorMax(head, end);\n        head = offsetCursor(head, 0, -1);\n        if (head.ch == -1 && head.line != cm.firstLine()) {\n            head = new Pos(head.line - 1, lineLength(cm, head.line - 1));\n        }\n    }\n    return [anchor, head];\n}\nfunction updateCmSelection(cm, sel, mode) {\n    var vim = cm.state.vim;\n    sel = sel || vim.sel;\n    var mode = mode ||\n        vim.visualLine ? 'line' : vim.visualBlock ? 'block' : 'char';\n    var cmSel = makeCmSelection(cm, sel, mode);\n    cm.setSelections(cmSel.ranges, cmSel.primary);\n}\nfunction makeCmSelection(cm, sel, mode, exclusive) {\n    var head = copyCursor(sel.head);\n    var anchor = copyCursor(sel.anchor);\n    if (mode == 'char') {\n        var headOffset = !exclusive && !cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;\n        var anchorOffset = cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;\n        head = offsetCursor(sel.head, 0, headOffset);\n        anchor = offsetCursor(sel.anchor, 0, anchorOffset);\n        return {\n            ranges: [{ anchor: anchor, head: head }],\n            primary: 0\n        };\n    }\n    else if (mode == 'line') {\n        if (!cursorIsBefore(sel.head, sel.anchor)) {\n            anchor.ch = 0;\n            var lastLine = cm.lastLine();\n            if (head.line > lastLine) {\n                head.line = lastLine;\n            }\n            head.ch = lineLength(cm, head.line);\n        }\n        else {\n            head.ch = 0;\n            anchor.ch = lineLength(cm, anchor.line);\n        }\n        return {\n            ranges: [{ anchor: anchor, head: head }],\n            primary: 0\n        };\n    }\n    else if (mode == 'block') {\n        var top = Math.min(anchor.line, head.line), fromCh = anchor.ch, bottom = Math.max(anchor.line, head.line), toCh = head.ch;\n        if (fromCh < toCh) {\n            toCh += 1;\n        }\n        else {\n            fromCh += 1;\n        }\n        ;\n        var height = bottom - top + 1;\n        var primary = head.line == top ? 0 : height - 1;\n        var ranges = [];\n        for (var i = 0; i < height; i++) {\n            ranges.push({\n                anchor: new Pos(top + i, fromCh),\n                head: new Pos(top + i, toCh)\n            });\n        }\n        return {\n            ranges: ranges,\n            primary: primary\n        };\n    }\n}\nfunction getHead(cm) {\n    var cur = cm.getCursor('head');\n    if (cm.getSelection().length == 1) {\n        cur = cursorMin(cur, cm.getCursor('anchor'));\n    }\n    return cur;\n}\nfunction exitVisualMode(cm, moveHead) {\n    var vim = cm.state.vim;\n    if (moveHead !== false) {\n        cm.setCursor(clipCursorToContent(cm, vim.sel.head));\n    }\n    updateLastSelection(cm, vim);\n    vim.visualMode = false;\n    vim.visualLine = false;\n    vim.visualBlock = false;\n    if (!vim.insertMode)\n        CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"normal\" });\n}\nfunction clipToLine(cm, curStart, curEnd) {\n    var selection = cm.getRange(curStart, curEnd);\n    if (/\\n\\s*$/.test(selection)) {\n        var lines = selection.split('\\n');\n        lines.pop();\n        var line;\n        for (var line = lines.pop(); lines.length > 0 && line && isWhiteSpaceString(line); line = lines.pop()) {\n            curEnd.line--;\n            curEnd.ch = 0;\n        }\n        if (line) {\n            curEnd.line--;\n            curEnd.ch = lineLength(cm, curEnd.line);\n        }\n        else {\n            curEnd.ch = 0;\n        }\n    }\n}\nfunction expandSelectionToLine(_cm, curStart, curEnd) {\n    curStart.ch = 0;\n    curEnd.ch = 0;\n    curEnd.line++;\n}\nfunction findFirstNonWhiteSpaceCharacter(text) {\n    if (!text) {\n        return 0;\n    }\n    var firstNonWS = text.search(/\\S/);\n    return firstNonWS == -1 ? text.length : firstNonWS;\n}\nfunction expandWordUnderCursor(cm, inclusive, _forward, bigWord, noSymbol) {\n    var cur = getHead(cm);\n    var line = cm.getLine(cur.line);\n    var idx = cur.ch;\n    var test = noSymbol ? wordCharTest[0] : bigWordCharTest[0];\n    while (!test(line.charAt(idx))) {\n        idx++;\n        if (idx >= line.length) {\n            return null;\n        }\n    }\n    if (bigWord) {\n        test = bigWordCharTest[0];\n    }\n    else {\n        test = wordCharTest[0];\n        if (!test(line.charAt(idx))) {\n            test = wordCharTest[1];\n        }\n    }\n    var end = idx, start = idx;\n    while (test(line.charAt(end)) && end < line.length) {\n        end++;\n    }\n    while (test(line.charAt(start)) && start >= 0) {\n        start--;\n    }\n    start++;\n    if (inclusive) {\n        var wordEnd = end;\n        while (/\\s/.test(line.charAt(end)) && end < line.length) {\n            end++;\n        }\n        if (wordEnd == end) {\n            var wordStart = start;\n            while (/\\s/.test(line.charAt(start - 1)) && start > 0) {\n                start--;\n            }\n            if (!start) {\n                start = wordStart;\n            }\n        }\n    }\n    return { start: new Pos(cur.line, start), end: new Pos(cur.line, end) };\n}\nfunction expandTagUnderCursor(cm, head, inclusive) {\n    var cur = head;\n    if (!CodeMirror.findMatchingTag || !CodeMirror.findEnclosingTag) {\n        return { start: cur, end: cur };\n    }\n    var tags = CodeMirror.findMatchingTag(cm, head) || CodeMirror.findEnclosingTag(cm, head);\n    if (!tags || !tags.open || !tags.close) {\n        return { start: cur, end: cur };\n    }\n    if (inclusive) {\n        return { start: tags.open.from, end: tags.close.to };\n    }\n    return { start: tags.open.to, end: tags.close.from };\n}\nfunction recordJumpPosition(cm, oldCur, newCur) {\n    if (!cursorEqual(oldCur, newCur)) {\n        vimGlobalState.jumpList.add(cm, oldCur, newCur);\n    }\n}\nfunction recordLastCharacterSearch(increment, args) {\n    vimGlobalState.lastCharacterSearch.increment = increment;\n    vimGlobalState.lastCharacterSearch.forward = args.forward;\n    vimGlobalState.lastCharacterSearch.selectedCharacter = args.selectedCharacter;\n}\nvar symbolToMode = {\n    '(': 'bracket', ')': 'bracket', '{': 'bracket', '}': 'bracket',\n    '[': 'section', ']': 'section',\n    '*': 'comment', '/': 'comment',\n    'm': 'method', 'M': 'method',\n    '#': 'preprocess'\n};\nvar findSymbolModes = {\n    bracket: {\n        isComplete: function (state) {\n            if (state.nextCh === state.symb) {\n                state.depth++;\n                if (state.depth >= 1)\n                    return true;\n            }\n            else if (state.nextCh === state.reverseSymb) {\n                state.depth--;\n            }\n            return false;\n        }\n    },\n    section: {\n        init: function (state) {\n            state.curMoveThrough = true;\n            state.symb = (state.forward ? ']' : '[') === state.symb ? '{' : '}';\n        },\n        isComplete: function (state) {\n            return state.index === 0 && state.nextCh === state.symb;\n        }\n    },\n    comment: {\n        isComplete: function (state) {\n            var found = state.lastCh === '*' && state.nextCh === '/';\n            state.lastCh = state.nextCh;\n            return found;\n        }\n    },\n    method: {\n        init: function (state) {\n            state.symb = (state.symb === 'm' ? '{' : '}');\n            state.reverseSymb = state.symb === '{' ? '}' : '{';\n        },\n        isComplete: function (state) {\n            if (state.nextCh === state.symb)\n                return true;\n            return false;\n        }\n    },\n    preprocess: {\n        init: function (state) {\n            state.index = 0;\n        },\n        isComplete: function (state) {\n            if (state.nextCh === '#') {\n                var token = state.lineText.match(/^#(\\w+)/)[1];\n                if (token === 'endif') {\n                    if (state.forward && state.depth === 0) {\n                        return true;\n                    }\n                    state.depth++;\n                }\n                else if (token === 'if') {\n                    if (!state.forward && state.depth === 0) {\n                        return true;\n                    }\n                    state.depth--;\n                }\n                if (token === 'else' && state.depth === 0)\n                    return true;\n            }\n            return false;\n        }\n    }\n};\nfunction findSymbol(cm, repeat, forward, symb) {\n    var cur = copyCursor(cm.getCursor());\n    var increment = forward ? 1 : -1;\n    var endLine = forward ? cm.lineCount() : -1;\n    var curCh = cur.ch;\n    var line = cur.line;\n    var lineText = cm.getLine(line);\n    var state = {\n        lineText: lineText,\n        nextCh: lineText.charAt(curCh),\n        lastCh: null,\n        index: curCh,\n        symb: symb,\n        reverseSymb: (forward ? { ')': '(', '}': '{' } : { '(': ')', '{': '}' })[symb],\n        forward: forward,\n        depth: 0,\n        curMoveThrough: false\n    };\n    var mode = symbolToMode[symb];\n    if (!mode)\n        return cur;\n    var init = findSymbolModes[mode].init;\n    var isComplete = findSymbolModes[mode].isComplete;\n    if (init) {\n        init(state);\n    }\n    while (line !== endLine && repeat) {\n        state.index += increment;\n        state.nextCh = state.lineText.charAt(state.index);\n        if (!state.nextCh) {\n            line += increment;\n            state.lineText = cm.getLine(line) || '';\n            if (increment > 0) {\n                state.index = 0;\n            }\n            else {\n                var lineLen = state.lineText.length;\n                state.index = (lineLen > 0) ? (lineLen - 1) : 0;\n            }\n            state.nextCh = state.lineText.charAt(state.index);\n        }\n        if (isComplete(state)) {\n            cur.line = line;\n            cur.ch = state.index;\n            repeat--;\n        }\n    }\n    if (state.nextCh || state.curMoveThrough) {\n        return new Pos(line, state.index);\n    }\n    return cur;\n}\nfunction findWord(cm, cur, forward, bigWord, emptyLineIsWord) {\n    var lineNum = cur.line;\n    var pos = cur.ch;\n    var line = cm.getLine(lineNum);\n    var dir = forward ? 1 : -1;\n    var charTests = bigWord ? bigWordCharTest : wordCharTest;\n    if (emptyLineIsWord && line == '') {\n        lineNum += dir;\n        line = cm.getLine(lineNum);\n        if (!isLine(cm, lineNum)) {\n            return null;\n        }\n        pos = (forward) ? 0 : line.length;\n    }\n    while (true) {\n        if (emptyLineIsWord && line == '') {\n            return { from: 0, to: 0, line: lineNum };\n        }\n        var stop = (dir > 0) ? line.length : -1;\n        var wordStart = stop, wordEnd = stop;\n        while (pos != stop) {\n            var foundWord = false;\n            for (var i = 0; i < charTests.length && !foundWord; ++i) {\n                if (charTests[i](line.charAt(pos))) {\n                    wordStart = pos;\n                    while (pos != stop && charTests[i](line.charAt(pos))) {\n                        pos += dir;\n                    }\n                    wordEnd = pos;\n                    foundWord = wordStart != wordEnd;\n                    if (wordStart == cur.ch && lineNum == cur.line &&\n                        wordEnd == wordStart + dir) {\n                        continue;\n                    }\n                    else {\n                        return {\n                            from: Math.min(wordStart, wordEnd + 1),\n                            to: Math.max(wordStart, wordEnd),\n                            line: lineNum\n                        };\n                    }\n                }\n            }\n            if (!foundWord) {\n                pos += dir;\n            }\n        }\n        lineNum += dir;\n        if (!isLine(cm, lineNum)) {\n            return null;\n        }\n        line = cm.getLine(lineNum);\n        pos = (dir > 0) ? 0 : line.length;\n    }\n}\nfunction moveToWord(cm, cur, repeat, forward, wordEnd, bigWord) {\n    var curStart = copyCursor(cur);\n    var words = [];\n    if (forward && !wordEnd || !forward && wordEnd) {\n        repeat++;\n    }\n    var emptyLineIsWord = !(forward && wordEnd);\n    for (var i = 0; i < repeat; i++) {\n        var word = findWord(cm, cur, forward, bigWord, emptyLineIsWord);\n        if (!word) {\n            var eodCh = lineLength(cm, cm.lastLine());\n            words.push(forward\n                ? { line: cm.lastLine(), from: eodCh, to: eodCh }\n                : { line: 0, from: 0, to: 0 });\n            break;\n        }\n        words.push(word);\n        cur = new Pos(word.line, forward ? (word.to - 1) : word.from);\n    }\n    var shortCircuit = words.length != repeat;\n    var firstWord = words[0];\n    var lastWord = words.pop();\n    if (forward && !wordEnd) {\n        if (!shortCircuit && (firstWord.from != curStart.ch || firstWord.line != curStart.line)) {\n            lastWord = words.pop();\n        }\n        return new Pos(lastWord.line, lastWord.from);\n    }\n    else if (forward && wordEnd) {\n        return new Pos(lastWord.line, lastWord.to - 1);\n    }\n    else if (!forward && wordEnd) {\n        if (!shortCircuit && (firstWord.to != curStart.ch || firstWord.line != curStart.line)) {\n            lastWord = words.pop();\n        }\n        return new Pos(lastWord.line, lastWord.to);\n    }\n    else {\n        return new Pos(lastWord.line, lastWord.from);\n    }\n}\nfunction moveToEol(cm, head, motionArgs, vim, keepHPos) {\n    var cur = head;\n    var retval = new Pos(cur.line + motionArgs.repeat - 1, Infinity);\n    var end = cm.clipPos(retval);\n    end.ch--;\n    if (!keepHPos) {\n        vim.lastHPos = Infinity;\n        vim.lastHSPos = cm.charCoords(end, 'div').left;\n    }\n    return retval;\n}\nfunction moveToCharacter(cm, repeat, forward, character) {\n    var cur = cm.getCursor();\n    var start = cur.ch;\n    var idx;\n    for (var i = 0; i < repeat; i++) {\n        var line = cm.getLine(cur.line);\n        idx = charIdxInLine(start, line, character, forward, true);\n        if (idx == -1) {\n            return null;\n        }\n        start = idx;\n    }\n    return new Pos(cm.getCursor().line, idx);\n}\nfunction moveToColumn(cm, repeat) {\n    var line = cm.getCursor().line;\n    return clipCursorToContent(cm, new Pos(line, repeat - 1));\n}\nfunction updateMark(cm, vim, markName, pos) {\n    if (!inArray(markName, validMarks)) {\n        return;\n    }\n    if (vim.marks[markName]) {\n        vim.marks[markName].clear();\n    }\n    vim.marks[markName] = cm.setBookmark(pos);\n}\nfunction charIdxInLine(start, line, character, forward, includeChar) {\n    var idx;\n    if (forward) {\n        idx = line.indexOf(character, start + 1);\n        if (idx != -1 && !includeChar) {\n            idx -= 1;\n        }\n    }\n    else {\n        idx = line.lastIndexOf(character, start - 1);\n        if (idx != -1 && !includeChar) {\n            idx += 1;\n        }\n    }\n    return idx;\n}\nfunction findParagraph(cm, head, repeat, dir, inclusive) {\n    var line = head.line;\n    var min = cm.firstLine();\n    var max = cm.lastLine();\n    var start, end, i = line;\n    function isEmpty(i) { return !/\\S/.test(cm.getLine(i)); } // ace_patch\n    function isBoundary(i, dir, any) {\n        if (any) {\n            return isEmpty(i) != isEmpty(i + dir);\n        }\n        return !isEmpty(i) && isEmpty(i + dir);\n    }\n    function skipFold(i) {\n        dir = dir > 0 ? 1 : -1;\n        var foldLine = cm.ace.session.getFoldLine(i);\n        if (foldLine) {\n            if (i + dir > foldLine.start.row && i + dir < foldLine.end.row)\n                dir = (dir > 0 ? foldLine.end.row : foldLine.start.row) - i;\n        }\n    }\n    if (dir) {\n        while (min <= i && i <= max && repeat > 0) {\n            skipFold(i);\n            if (isBoundary(i, dir)) {\n                repeat--;\n            }\n            i += dir;\n        }\n        return new Pos(i, 0);\n    }\n    var vim = cm.state.vim;\n    if (vim.visualLine && isBoundary(line, 1, true)) {\n        var anchor = vim.sel.anchor;\n        if (isBoundary(anchor.line, -1, true)) {\n            if (!inclusive || anchor.line != line) {\n                line += 1;\n            }\n        }\n    }\n    var startState = isEmpty(line);\n    for (i = line; i <= max && repeat; i++) {\n        if (isBoundary(i, 1, true)) {\n            if (!inclusive || isEmpty(i) != startState) {\n                repeat--;\n            }\n        }\n    }\n    end = new Pos(i, 0);\n    if (i > max && !startState) {\n        startState = true;\n    }\n    else {\n        inclusive = false;\n    }\n    for (i = line; i > min; i--) {\n        if (!inclusive || isEmpty(i) == startState || i == line) {\n            if (isBoundary(i, -1, true)) {\n                break;\n            }\n        }\n    }\n    start = new Pos(i, 0);\n    return { start: start, end: end };\n}\nfunction getSentence(cm, cur, repeat, dir, inclusive /*includes whitespace*/) {\n    function nextChar(curr) {\n        if (curr.pos + curr.dir < 0 || curr.pos + curr.dir >= curr.line.length) {\n            curr.line = null;\n        }\n        else {\n            curr.pos += curr.dir;\n        }\n    }\n    function forward(cm, ln, pos, dir) {\n        var line = cm.getLine(ln);\n        var curr = {\n            line: line,\n            ln: ln,\n            pos: pos,\n            dir: dir,\n        };\n        if (curr.line === \"\") {\n            return { ln: curr.ln, pos: curr.pos };\n        }\n        var lastSentencePos = curr.pos;\n        nextChar(curr);\n        while (curr.line !== null) {\n            lastSentencePos = curr.pos;\n            if (isEndOfSentenceSymbol(curr.line[curr.pos])) {\n                if (!inclusive) {\n                    return { ln: curr.ln, pos: curr.pos + 1 };\n                }\n                else {\n                    nextChar(curr);\n                    while (curr.line !== null) {\n                        if (isWhiteSpaceString(curr.line[curr.pos])) {\n                            lastSentencePos = curr.pos;\n                            nextChar(curr);\n                        }\n                        else {\n                            break;\n                        }\n                    }\n                    return { ln: curr.ln, pos: lastSentencePos + 1 };\n                }\n            }\n            nextChar(curr);\n        }\n        return { ln: curr.ln, pos: lastSentencePos + 1 };\n    }\n    function reverse(cm, ln, pos, dir) {\n        var line = cm.getLine(ln);\n        var curr = {\n            line: line,\n            ln: ln,\n            pos: pos,\n            dir: dir,\n        };\n        if (curr.line === \"\") {\n            return { ln: curr.ln, pos: curr.pos };\n        }\n        var lastSentencePos = curr.pos;\n        nextChar(curr);\n        while (curr.line !== null) {\n            if (!isWhiteSpaceString(curr.line[curr.pos]) && !isEndOfSentenceSymbol(curr.line[curr.pos])) {\n                lastSentencePos = curr.pos;\n            }\n            else if (isEndOfSentenceSymbol(curr.line[curr.pos])) {\n                if (!inclusive) {\n                    return { ln: curr.ln, pos: lastSentencePos };\n                }\n                else {\n                    if (isWhiteSpaceString(curr.line[curr.pos + 1])) {\n                        return { ln: curr.ln, pos: curr.pos + 1 };\n                    }\n                    else {\n                        return { ln: curr.ln, pos: lastSentencePos };\n                    }\n                }\n            }\n            nextChar(curr);\n        }\n        curr.line = line;\n        if (inclusive && isWhiteSpaceString(curr.line[curr.pos])) {\n            return { ln: curr.ln, pos: curr.pos };\n        }\n        else {\n            return { ln: curr.ln, pos: lastSentencePos };\n        }\n    }\n    var curr_index = {\n        ln: cur.line,\n        pos: cur.ch,\n    };\n    while (repeat > 0) {\n        if (dir < 0) {\n            curr_index = reverse(cm, curr_index.ln, curr_index.pos, dir);\n        }\n        else {\n            curr_index = forward(cm, curr_index.ln, curr_index.pos, dir);\n        }\n        repeat--;\n    }\n    return new Pos(curr_index.ln, curr_index.pos);\n}\nfunction findSentence(cm, cur, repeat, dir) {\n    function nextChar(cm, idx) {\n        if (idx.pos + idx.dir < 0 || idx.pos + idx.dir >= idx.line.length) {\n            idx.ln += idx.dir;\n            if (!isLine(cm, idx.ln)) {\n                idx.line = null;\n                idx.ln = null;\n                idx.pos = null;\n                return;\n            }\n            idx.line = cm.getLine(idx.ln);\n            idx.pos = (idx.dir > 0) ? 0 : idx.line.length - 1;\n        }\n        else {\n            idx.pos += idx.dir;\n        }\n    }\n    function forward(cm, ln, pos, dir) {\n        var line = cm.getLine(ln);\n        var stop = (line === \"\");\n        var curr = {\n            line: line,\n            ln: ln,\n            pos: pos,\n            dir: dir,\n        };\n        var last_valid = {\n            ln: curr.ln,\n            pos: curr.pos,\n        };\n        var skip_empty_lines = (curr.line === \"\");\n        nextChar(cm, curr);\n        while (curr.line !== null) {\n            last_valid.ln = curr.ln;\n            last_valid.pos = curr.pos;\n            if (curr.line === \"\" && !skip_empty_lines) {\n                return { ln: curr.ln, pos: curr.pos, };\n            }\n            else if (stop && curr.line !== \"\" && !isWhiteSpaceString(curr.line[curr.pos])) {\n                return { ln: curr.ln, pos: curr.pos, };\n            }\n            else if (isEndOfSentenceSymbol(curr.line[curr.pos])\n                && !stop\n                && (curr.pos === curr.line.length - 1\n                    || isWhiteSpaceString(curr.line[curr.pos + 1]))) {\n                stop = true;\n            }\n            nextChar(cm, curr);\n        }\n        var line = cm.getLine(last_valid.ln);\n        last_valid.pos = 0;\n        for (var i = line.length - 1; i >= 0; --i) {\n            if (!isWhiteSpaceString(line[i])) {\n                last_valid.pos = i;\n                break;\n            }\n        }\n        return last_valid;\n    }\n    function reverse(cm, ln, pos, dir) {\n        var line = cm.getLine(ln);\n        var curr = {\n            line: line,\n            ln: ln,\n            pos: pos,\n            dir: dir,\n        };\n        var last_valid = {\n            ln: curr.ln,\n            pos: null,\n        };\n        var skip_empty_lines = (curr.line === \"\");\n        nextChar(cm, curr);\n        while (curr.line !== null) {\n            if (curr.line === \"\" && !skip_empty_lines) {\n                if (last_valid.pos !== null) {\n                    return last_valid;\n                }\n                else {\n                    return { ln: curr.ln, pos: curr.pos };\n                }\n            }\n            else if (isEndOfSentenceSymbol(curr.line[curr.pos])\n                && last_valid.pos !== null\n                && !(curr.ln === last_valid.ln && curr.pos + 1 === last_valid.pos)) {\n                return last_valid;\n            }\n            else if (curr.line !== \"\" && !isWhiteSpaceString(curr.line[curr.pos])) {\n                skip_empty_lines = false;\n                last_valid = { ln: curr.ln, pos: curr.pos };\n            }\n            nextChar(cm, curr);\n        }\n        var line = cm.getLine(last_valid.ln);\n        last_valid.pos = 0;\n        for (var i = 0; i < line.length; ++i) {\n            if (!isWhiteSpaceString(line[i])) {\n                last_valid.pos = i;\n                break;\n            }\n        }\n        return last_valid;\n    }\n    var curr_index = {\n        ln: cur.line,\n        pos: cur.ch,\n    };\n    while (repeat > 0) {\n        if (dir < 0) {\n            curr_index = reverse(cm, curr_index.ln, curr_index.pos, dir);\n        }\n        else {\n            curr_index = forward(cm, curr_index.ln, curr_index.pos, dir);\n        }\n        repeat--;\n    }\n    return new Pos(curr_index.ln, curr_index.pos);\n}\nfunction selectCompanionObject(cm, head, symb, inclusive) {\n    var cur = head, start, end;\n    var bracketRegexp = ({\n        '(': /[()]/, ')': /[()]/,\n        '[': /[[\\]]/, ']': /[[\\]]/,\n        '{': /[{}]/, '}': /[{}]/,\n        '<': /[<>]/, '>': /[<>]/\n    })[symb];\n    var openSym = ({\n        '(': '(', ')': '(',\n        '[': '[', ']': '[',\n        '{': '{', '}': '{',\n        '<': '<', '>': '<'\n    })[symb];\n    var curChar = cm.getLine(cur.line).charAt(cur.ch);\n    var offset = curChar === openSym ? 1 : 0;\n    start = cm.scanForBracket(new Pos(cur.line, cur.ch + offset), -1, undefined, { 'bracketRegex': bracketRegexp });\n    end = cm.scanForBracket(new Pos(cur.line, cur.ch + offset), 1, undefined, { 'bracketRegex': bracketRegexp });\n    if (!start || !end) {\n        return { start: cur, end: cur };\n    }\n    start = start.pos;\n    end = end.pos;\n    if ((start.line == end.line && start.ch > end.ch)\n        || (start.line > end.line)) {\n        var tmp = start;\n        start = end;\n        end = tmp;\n    }\n    if (inclusive) {\n        end.ch += 1;\n    }\n    else {\n        start.ch += 1;\n    }\n    return { start: start, end: end };\n}\nfunction findBeginningAndEnd(cm, head, symb, inclusive) {\n    var cur = copyCursor(head);\n    var line = cm.getLine(cur.line);\n    var chars = line.split('');\n    var start, end, i, len;\n    var firstIndex = chars.indexOf(symb);\n    if (cur.ch < firstIndex) {\n        cur.ch = firstIndex;\n    }\n    else if (firstIndex < cur.ch && chars[cur.ch] == symb) {\n        end = cur.ch; // assign end to the current cursor\n        --cur.ch; // make sure to look backwards\n    }\n    if (chars[cur.ch] == symb && !end) {\n        start = cur.ch + 1; // assign start to ahead of the cursor\n    }\n    else {\n        for (i = cur.ch; i > -1 && !start; i--) {\n            if (chars[i] == symb) {\n                start = i + 1;\n            }\n        }\n    }\n    if (start && !end) {\n        for (i = start, len = chars.length; i < len && !end; i++) {\n            if (chars[i] == symb) {\n                end = i;\n            }\n        }\n    }\n    if (!start || !end) {\n        return { start: cur, end: cur };\n    }\n    if (inclusive) {\n        --start;\n        ++end;\n    }\n    return {\n        start: new Pos(cur.line, start),\n        end: new Pos(cur.line, end)\n    };\n}\ndefineOption('pcre', true, 'boolean');\nfunction SearchState() { }\nSearchState.prototype = {\n    getQuery: function () {\n        return vimGlobalState.query;\n    },\n    setQuery: function (query) {\n        vimGlobalState.query = query;\n    },\n    getOverlay: function () {\n        return this.searchOverlay;\n    },\n    setOverlay: function (overlay) {\n        this.searchOverlay = overlay;\n    },\n    isReversed: function () {\n        return vimGlobalState.isReversed;\n    },\n    setReversed: function (reversed) {\n        vimGlobalState.isReversed = reversed;\n    },\n    getScrollbarAnnotate: function () {\n        return this.annotate;\n    },\n    setScrollbarAnnotate: function (annotate) {\n        this.annotate = annotate;\n    }\n};\nfunction getSearchState(cm) {\n    var vim = cm.state.vim;\n    return vim.searchState_ || (vim.searchState_ = new SearchState());\n}\nfunction splitBySlash(argString) {\n    return splitBySeparator(argString, '/');\n}\nfunction findUnescapedSlashes(argString) {\n    return findUnescapedSeparators(argString, '/');\n}\nfunction splitBySeparator(argString, separator) {\n    var slashes = findUnescapedSeparators(argString, separator) || [];\n    if (!slashes.length)\n        return [];\n    var tokens = [];\n    if (slashes[0] !== 0)\n        return;\n    for (var i = 0; i < slashes.length; i++) {\n        if (typeof slashes[i] == 'number')\n            tokens.push(argString.substring(slashes[i] + 1, slashes[i + 1]));\n    }\n    return tokens;\n}\nfunction findUnescapedSeparators(str, separator) {\n    if (!separator)\n        separator = '/';\n    var escapeNextChar = false;\n    var slashes = [];\n    for (var i = 0; i < str.length; i++) {\n        var c = str.charAt(i);\n        if (!escapeNextChar && c == separator) {\n            slashes.push(i);\n        }\n        escapeNextChar = !escapeNextChar && (c == '\\\\');\n    }\n    return slashes;\n}\nfunction translateRegex(str) {\n    var specials = '|(){';\n    var unescape = '}';\n    var escapeNextChar = false;\n    var out = [];\n    for (var i = -1; i < str.length; i++) {\n        var c = str.charAt(i) || '';\n        var n = str.charAt(i + 1) || '';\n        var specialComesNext = (n && specials.indexOf(n) != -1);\n        if (escapeNextChar) {\n            if (c !== '\\\\' || !specialComesNext) {\n                out.push(c);\n            }\n            escapeNextChar = false;\n        }\n        else {\n            if (c === '\\\\') {\n                escapeNextChar = true;\n                if (n && unescape.indexOf(n) != -1) {\n                    specialComesNext = true;\n                }\n                if (!specialComesNext || n === '\\\\') {\n                    out.push(c);\n                }\n            }\n            else {\n                out.push(c);\n                if (specialComesNext && n !== '\\\\') {\n                    out.push('\\\\');\n                }\n            }\n        }\n    }\n    return out.join('');\n}\nvar charUnescapes = { '\\\\n': '\\n', '\\\\r': '\\r', '\\\\t': '\\t' };\nfunction translateRegexReplace(str) {\n    var escapeNextChar = false;\n    var out = [];\n    for (var i = -1; i < str.length; i++) {\n        var c = str.charAt(i) || '';\n        var n = str.charAt(i + 1) || '';\n        if (charUnescapes[c + n]) {\n            out.push(charUnescapes[c + n]);\n            i++;\n        }\n        else if (escapeNextChar) {\n            out.push(c);\n            escapeNextChar = false;\n        }\n        else {\n            if (c === '\\\\') {\n                escapeNextChar = true;\n                if ((isNumber(n) || n === '$')) {\n                    out.push('$');\n                }\n                else if (n !== '/' && n !== '\\\\') {\n                    out.push('\\\\');\n                }\n            }\n            else {\n                if (c === '$') {\n                    out.push('$');\n                }\n                out.push(c);\n                if (n === '/') {\n                    out.push('\\\\');\n                }\n            }\n        }\n    }\n    return out.join('');\n}\nvar unescapes = { '\\\\/': '/', '\\\\\\\\': '\\\\', '\\\\n': '\\n', '\\\\r': '\\r', '\\\\t': '\\t', '\\\\&': '&' };\nfunction unescapeRegexReplace(str) {\n    var stream = new CodeMirror.StringStream(str);\n    var output = [];\n    while (!stream.eol()) {\n        while (stream.peek() && stream.peek() != '\\\\') {\n            output.push(stream.next());\n        }\n        var matched = false;\n        for (var matcher in unescapes) {\n            if (stream.match(matcher, true)) {\n                matched = true;\n                output.push(unescapes[matcher]);\n                break;\n            }\n        }\n        if (!matched) {\n            output.push(stream.next());\n        }\n    }\n    return output.join('');\n}\nfunction parseQuery(query, ignoreCase, smartCase) {\n    var lastSearchRegister = vimGlobalState.registerController.getRegister('/');\n    lastSearchRegister.setText(query);\n    if (query instanceof RegExp) {\n        return query;\n    }\n    var slashes = findUnescapedSlashes(query);\n    var regexPart;\n    var forceIgnoreCase;\n    if (!slashes.length) {\n        regexPart = query;\n    }\n    else {\n        regexPart = query.substring(0, slashes[0]);\n        var flagsPart = query.substring(slashes[0]);\n        forceIgnoreCase = (flagsPart.indexOf('i') != -1);\n    }\n    if (!regexPart) {\n        return null;\n    }\n    if (!getOption('pcre')) {\n        regexPart = translateRegex(regexPart);\n    }\n    if (smartCase) {\n        ignoreCase = (/^[^A-Z]*$/).test(regexPart);\n    }\n    var regexp = new RegExp(regexPart, (ignoreCase || forceIgnoreCase) ? 'im' : 'm');\n    return regexp;\n}\nfunction dom(n) {\n    if (typeof n === 'string')\n        n = document.createElement(n);\n    for (var a, i = 1; i < arguments.length; i++) {\n        if (!(a = arguments[i]))\n            continue;\n        if (typeof a !== 'object')\n            a = document.createTextNode(a);\n        if (a.nodeType)\n            n.appendChild(a);\n        else\n            for (var key in a) {\n                if (!Object.prototype.hasOwnProperty.call(a, key))\n                    continue;\n                if (key[0] === '$')\n                    n.style[key.slice(1)] = a[key];\n                else\n                    n.setAttribute(key, a[key]);\n            }\n    }\n    return n;\n}\nfunction showConfirm(cm, template) {\n    var pre = dom('div', { $color: 'red', $whiteSpace: 'pre', class: 'cm-vim-message' }, template);\n    if (cm.openNotification) {\n        cm.openNotification(pre, { bottom: true, duration: 5000 });\n    }\n    else {\n        alert(pre.innerText);\n    }\n}\nfunction makePrompt(prefix, desc) {\n    return dom(document.createDocumentFragment(), dom('span', { $fontFamily: 'monospace', $whiteSpace: 'pre' }, prefix, dom('input', { type: 'text', autocorrect: 'off',\n        autocapitalize: 'off', spellcheck: 'false' })), desc && dom('span', { $color: '#888' }, desc));\n}\nfunction showPrompt(cm, options) {\n    var template = makePrompt(options.prefix, options.desc);\n    if (cm.openDialog) {\n        cm.openDialog(template, options.onClose, {\n            onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp,\n            bottom: true, selectValueOnOpen: false, value: options.value\n        });\n    }\n    else {\n        var shortText = '';\n        if (typeof options.prefix != \"string\" && options.prefix)\n            shortText += options.prefix.textContent;\n        if (options.desc)\n            shortText += \" \" + options.desc;\n        options.onClose(prompt(shortText, ''));\n    }\n}\nfunction regexEqual(r1, r2) {\n    if (r1 instanceof RegExp && r2 instanceof RegExp) {\n        var props = ['global', 'multiline', 'ignoreCase', 'source'];\n        for (var i = 0; i < props.length; i++) {\n            var prop = props[i];\n            if (r1[prop] !== r2[prop]) {\n                return false;\n            }\n        }\n        return true;\n    }\n    return false;\n}\nfunction updateSearchQuery(cm, rawQuery, ignoreCase, smartCase) {\n    if (!rawQuery) {\n        return;\n    }\n    var state = getSearchState(cm);\n    var query = parseQuery(rawQuery, !!ignoreCase, !!smartCase);\n    if (!query) {\n        return;\n    }\n    highlightSearchMatches(cm, query);\n    if (regexEqual(query, state.getQuery())) {\n        return query;\n    }\n    state.setQuery(query);\n    return query;\n}\nfunction searchOverlay(query) {\n    if (query.source.charAt(0) == '^') {\n        var matchSol = true;\n    }\n    return {\n        token: function (stream) {\n            if (matchSol && !stream.sol()) {\n                stream.skipToEnd();\n                return;\n            }\n            var match = stream.match(query, false);\n            if (match) {\n                if (match[0].length == 0) {\n                    stream.next();\n                    return 'searching';\n                }\n                if (!stream.sol()) {\n                    stream.backUp(1);\n                    if (!query.exec(stream.next() + match[0])) {\n                        stream.next();\n                        return null;\n                    }\n                }\n                stream.match(query);\n                return 'searching';\n            }\n            while (!stream.eol()) {\n                stream.next();\n                if (stream.match(query, false))\n                    break;\n            }\n        },\n        query: query\n    };\n}\nvar highlightTimeout = 0;\nfunction highlightSearchMatches(cm, query) {\n    clearTimeout(highlightTimeout);\n    highlightTimeout = setTimeout(function () {\n        if (!cm.state.vim)\n            return;\n        var searchState = getSearchState(cm);\n        var overlay = searchState.getOverlay();\n        if (!overlay || query != overlay.query) {\n            if (overlay) {\n                cm.removeOverlay(overlay);\n            }\n            overlay = searchOverlay(query);\n            cm.addOverlay(overlay);\n            if (cm.showMatchesOnScrollbar) {\n                if (searchState.getScrollbarAnnotate()) {\n                    searchState.getScrollbarAnnotate().clear();\n                }\n                searchState.setScrollbarAnnotate(cm.showMatchesOnScrollbar(query));\n            }\n            searchState.setOverlay(overlay);\n        }\n    }, 50);\n}\nfunction findNext(cm, prev, query, repeat) {\n    if (repeat === undefined) {\n        repeat = 1;\n    }\n    return cm.operation(function () {\n        var pos = cm.getCursor();\n        var cursor = cm.getSearchCursor(query, pos);\n        for (var i = 0; i < repeat; i++) {\n            var found = cursor.find(prev);\n            if (i == 0 && found && cursorEqual(cursor.from(), pos)) {\n                var lastEndPos = prev ? cursor.from() : cursor.to();\n                found = cursor.find(prev);\n                if (found && !found[0] && cursorEqual(cursor.from(), lastEndPos)) {\n                    if (cm.getLine(lastEndPos.line).length == lastEndPos.ch)\n                        found = cursor.find(prev);\n                }\n            }\n            if (!found) {\n                cursor = cm.getSearchCursor(query, (prev) ? new Pos(cm.lastLine()) : new Pos(cm.firstLine(), 0));\n                if (!cursor.find(prev)) {\n                    return;\n                }\n            }\n        }\n        return cursor.from();\n    });\n}\nfunction findNextFromAndToInclusive(cm, prev, query, repeat, vim) {\n    if (repeat === undefined) {\n        repeat = 1;\n    }\n    return cm.operation(function () {\n        var pos = cm.getCursor();\n        var cursor = cm.getSearchCursor(query, pos);\n        var found = cursor.find(!prev);\n        if (!vim.visualMode && found && cursorEqual(cursor.from(), pos)) {\n            cursor.find(!prev);\n        }\n        for (var i = 0; i < repeat; i++) {\n            found = cursor.find(prev);\n            if (!found) {\n                cursor = cm.getSearchCursor(query, (prev) ? new Pos(cm.lastLine()) : new Pos(cm.firstLine(), 0));\n                if (!cursor.find(prev)) {\n                    return;\n                }\n            }\n        }\n        return [cursor.from(), cursor.to()];\n    });\n}\nfunction clearSearchHighlight(cm) {\n    var state = getSearchState(cm);\n    cm.removeOverlay(getSearchState(cm).getOverlay());\n    state.setOverlay(null);\n    if (state.getScrollbarAnnotate()) {\n        state.getScrollbarAnnotate().clear();\n        state.setScrollbarAnnotate(null);\n    }\n}\nfunction isInRange(pos, start, end) {\n    if (typeof pos != 'number') {\n        pos = pos.line;\n    }\n    if (start instanceof Array) {\n        return inArray(pos, start);\n    }\n    else {\n        if (typeof end == 'number') {\n            return (pos >= start && pos <= end);\n        }\n        else {\n            return pos == start;\n        }\n    }\n}\nfunction getUserVisibleLines(cm) {\n    var renderer = cm.ace.renderer;\n    return {\n        top: renderer.getFirstFullyVisibleRow(),\n        bottom: renderer.getLastFullyVisibleRow()\n    };\n}\nfunction getMarkPos(cm, vim, markName) {\n    if (markName == '\\'' || markName == '`') {\n        return vimGlobalState.jumpList.find(cm, -1) || new Pos(0, 0);\n    }\n    else if (markName == '.') {\n        return getLastEditPos(cm);\n    }\n    var mark = vim.marks[markName];\n    return mark && mark.find();\n}\nfunction getLastEditPos(cm) {\n    var undoManager = cm.ace.session.$undoManager;\n    if (undoManager && undoManager.$lastDelta)\n        return toCmPos(undoManager.$lastDelta.end);\n}\nvar ExCommandDispatcher = function () {\n    this.buildCommandMap_();\n};\nExCommandDispatcher.prototype = {\n    processCommand: function (cm, input, opt_params) {\n        var that = this;\n        cm.operation(function () {\n            cm.curOp.isVimOp = true;\n            that._processCommand(cm, input, opt_params);\n        });\n    },\n    _processCommand: function (cm, input, opt_params) {\n        var vim = cm.state.vim;\n        var commandHistoryRegister = vimGlobalState.registerController.getRegister(':');\n        var previousCommand = commandHistoryRegister.toString();\n        if (vim.visualMode) {\n            exitVisualMode(cm);\n        }\n        var inputStream = new CodeMirror.StringStream(input);\n        commandHistoryRegister.setText(input);\n        var params = opt_params || {};\n        params.input = input;\n        try {\n            this.parseInput_(cm, inputStream, params);\n        }\n        catch (e) {\n            showConfirm(cm, e.toString());\n            throw e;\n        }\n        var command;\n        var commandName;\n        if (!params.commandName) {\n            if (params.line !== undefined) {\n                commandName = 'move';\n            }\n        }\n        else {\n            command = this.matchCommand_(params.commandName);\n            if (command) {\n                commandName = command.name;\n                if (command.excludeFromCommandHistory) {\n                    commandHistoryRegister.setText(previousCommand);\n                }\n                this.parseCommandArgs_(inputStream, params, command);\n                if (command.type == 'exToKey') {\n                    for (var i = 0; i < command.toKeys.length; i++) {\n                        vimApi.handleKey(cm, command.toKeys[i], 'mapping');\n                    }\n                    return;\n                }\n                else if (command.type == 'exToEx') {\n                    this.processCommand(cm, command.toInput);\n                    return;\n                }\n            }\n        }\n        if (!commandName) {\n            showConfirm(cm, 'Not an editor command \":' + input + '\"');\n            return;\n        }\n        try {\n            exCommands[commandName](cm, params);\n            if ((!command || !command.possiblyAsync) && params.callback) {\n                params.callback();\n            }\n        }\n        catch (e) {\n            showConfirm(cm, e.toString());\n            throw e;\n        }\n    },\n    parseInput_: function (cm, inputStream, result) {\n        inputStream.eatWhile(':');\n        if (inputStream.eat('%')) {\n            result.line = cm.firstLine();\n            result.lineEnd = cm.lastLine();\n        }\n        else {\n            result.line = this.parseLineSpec_(cm, inputStream);\n            if (result.line !== undefined && inputStream.eat(',')) {\n                result.lineEnd = this.parseLineSpec_(cm, inputStream);\n            }\n        }\n        var commandMatch = inputStream.match(/^(\\w+|!!|@@|[!#&*<=>@~])/);\n        if (commandMatch) {\n            result.commandName = commandMatch[1];\n        }\n        else {\n            result.commandName = inputStream.match(/.*/)[0];\n        }\n        return result;\n    },\n    parseLineSpec_: function (cm, inputStream) {\n        var numberMatch = inputStream.match(/^(\\d+)/);\n        if (numberMatch) {\n            return parseInt(numberMatch[1], 10) - 1;\n        }\n        switch (inputStream.next()) {\n            case '.':\n                return this.parseLineSpecOffset_(inputStream, cm.getCursor().line);\n            case '$':\n                return this.parseLineSpecOffset_(inputStream, cm.lastLine());\n            case '\\'':\n                var markName = inputStream.next();\n                var markPos = getMarkPos(cm, cm.state.vim, markName);\n                if (!markPos)\n                    throw new Error('Mark not set');\n                return this.parseLineSpecOffset_(inputStream, markPos.line);\n            case '-':\n            case '+':\n                inputStream.backUp(1);\n                return this.parseLineSpecOffset_(inputStream, cm.getCursor().line);\n            default:\n                inputStream.backUp(1);\n                return undefined;\n        }\n    },\n    parseLineSpecOffset_: function (inputStream, line) {\n        var offsetMatch = inputStream.match(/^([+-])?(\\d+)/);\n        if (offsetMatch) {\n            var offset = parseInt(offsetMatch[2], 10);\n            if (offsetMatch[1] == \"-\") {\n                line -= offset;\n            }\n            else {\n                line += offset;\n            }\n        }\n        return line;\n    },\n    parseCommandArgs_: function (inputStream, params, command) {\n        if (inputStream.eol()) {\n            return;\n        }\n        params.argString = inputStream.match(/.*/)[0];\n        var delim = command.argDelimiter || /\\s+/;\n        var args = trim(params.argString).split(delim);\n        if (args.length && args[0]) {\n            params.args = args;\n        }\n    },\n    matchCommand_: function (commandName) {\n        for (var i = commandName.length; i > 0; i--) {\n            var prefix = commandName.substring(0, i);\n            if (this.commandMap_[prefix]) {\n                var command = this.commandMap_[prefix];\n                if (command.name.indexOf(commandName) === 0) {\n                    return command;\n                }\n            }\n        }\n        return null;\n    },\n    buildCommandMap_: function () {\n        this.commandMap_ = {};\n        for (var i = 0; i < defaultExCommandMap.length; i++) {\n            var command = defaultExCommandMap[i];\n            var key = command.shortName || command.name;\n            this.commandMap_[key] = command;\n        }\n    },\n    map: function (lhs, rhs, ctx) {\n        if (lhs != ':' && lhs.charAt(0) == ':') {\n            if (ctx) {\n                throw Error('Mode not supported for ex mappings');\n            }\n            var commandName = lhs.substring(1);\n            if (rhs != ':' && rhs.charAt(0) == ':') {\n                this.commandMap_[commandName] = {\n                    name: commandName,\n                    type: 'exToEx',\n                    toInput: rhs.substring(1),\n                    user: true\n                };\n            }\n            else {\n                this.commandMap_[commandName] = {\n                    name: commandName,\n                    type: 'exToKey',\n                    toKeys: rhs,\n                    user: true\n                };\n            }\n        }\n        else {\n            if (rhs != ':' && rhs.charAt(0) == ':') {\n                var mapping = {\n                    keys: lhs,\n                    type: 'keyToEx',\n                    exArgs: { input: rhs.substring(1) }\n                };\n                if (ctx) {\n                    mapping.context = ctx;\n                }\n                defaultKeymap.unshift(mapping);\n            }\n            else {\n                var mapping = {\n                    keys: lhs,\n                    type: 'keyToKey',\n                    toKeys: rhs\n                };\n                if (ctx) {\n                    mapping.context = ctx;\n                }\n                defaultKeymap.unshift(mapping);\n            }\n        }\n    },\n    unmap: function (lhs, ctx) {\n        if (lhs != ':' && lhs.charAt(0) == ':') {\n            if (ctx) {\n                throw Error('Mode not supported for ex mappings');\n            }\n            var commandName = lhs.substring(1);\n            if (this.commandMap_[commandName] && this.commandMap_[commandName].user) {\n                delete this.commandMap_[commandName];\n                return true;\n            }\n        }\n        else {\n            var keys = lhs;\n            for (var i = 0; i < defaultKeymap.length; i++) {\n                if (keys == defaultKeymap[i].keys\n                    && defaultKeymap[i].context === ctx) {\n                    defaultKeymap.splice(i, 1);\n                    return true;\n                }\n            }\n        }\n    }\n};\nvar exCommands = {\n    colorscheme: function (cm, params) {\n        if (!params.args || params.args.length < 1) {\n            showConfirm(cm, cm.getOption('theme'));\n            return;\n        }\n        cm.setOption('theme', params.args[0]);\n    },\n    map: function (cm, params, ctx) {\n        var mapArgs = params.args;\n        if (!mapArgs || mapArgs.length < 2) {\n            if (cm) {\n                showConfirm(cm, 'Invalid mapping: ' + params.input);\n            }\n            return;\n        }\n        exCommandDispatcher.map(mapArgs[0], mapArgs[1], ctx);\n    },\n    imap: function (cm, params) { this.map(cm, params, 'insert'); },\n    nmap: function (cm, params) { this.map(cm, params, 'normal'); },\n    vmap: function (cm, params) { this.map(cm, params, 'visual'); },\n    unmap: function (cm, params, ctx) {\n        var mapArgs = params.args;\n        if (!mapArgs || mapArgs.length < 1 || !exCommandDispatcher.unmap(mapArgs[0], ctx)) {\n            if (cm) {\n                showConfirm(cm, 'No such mapping: ' + params.input);\n            }\n        }\n    },\n    move: function (cm, params) {\n        commandDispatcher.processCommand(cm, cm.state.vim, {\n            type: 'motion',\n            motion: 'moveToLineOrEdgeOfDocument',\n            motionArgs: { forward: false, explicitRepeat: true,\n                linewise: true },\n            repeatOverride: params.line + 1\n        });\n    },\n    set: function (cm, params) {\n        var setArgs = params.args;\n        var setCfg = params.setCfg || {};\n        if (!setArgs || setArgs.length < 1) {\n            if (cm) {\n                showConfirm(cm, 'Invalid mapping: ' + params.input);\n            }\n            return;\n        }\n        var expr = setArgs[0].split('=');\n        var optionName = expr[0];\n        var value = expr[1];\n        var forceGet = false;\n        if (optionName.charAt(optionName.length - 1) == '?') {\n            if (value) {\n                throw Error('Trailing characters: ' + params.argString);\n            }\n            optionName = optionName.substring(0, optionName.length - 1);\n            forceGet = true;\n        }\n        if (value === undefined && optionName.substring(0, 2) == 'no') {\n            optionName = optionName.substring(2);\n            value = false;\n        }\n        var optionIsBoolean = options[optionName] && options[optionName].type == 'boolean';\n        if (optionIsBoolean && value == undefined) {\n            value = true;\n        }\n        if (!optionIsBoolean && value === undefined || forceGet) {\n            var oldValue = getOption(optionName, cm, setCfg);\n            if (oldValue instanceof Error) {\n                showConfirm(cm, oldValue.message);\n            }\n            else if (oldValue === true || oldValue === false) {\n                showConfirm(cm, ' ' + (oldValue ? '' : 'no') + optionName);\n            }\n            else {\n                showConfirm(cm, '  ' + optionName + '=' + oldValue);\n            }\n        }\n        else {\n            var setOptionReturn = setOption(optionName, value, cm, setCfg);\n            if (setOptionReturn instanceof Error) {\n                showConfirm(cm, setOptionReturn.message);\n            }\n        }\n    },\n    setlocal: function (cm, params) {\n        params.setCfg = { scope: 'local' };\n        this.set(cm, params);\n    },\n    setglobal: function (cm, params) {\n        params.setCfg = { scope: 'global' };\n        this.set(cm, params);\n    },\n    registers: function (cm, params) {\n        var regArgs = params.args;\n        var registers = vimGlobalState.registerController.registers;\n        var regInfo = '----------Registers----------\\n\\n';\n        if (!regArgs) {\n            for (var registerName in registers) {\n                var text = registers[registerName].toString();\n                if (text.length) {\n                    regInfo += '\"' + registerName + '    ' + text + '\\n';\n                }\n            }\n        }\n        else {\n            var registerName;\n            regArgs = regArgs.join('');\n            for (var i = 0; i < regArgs.length; i++) {\n                registerName = regArgs.charAt(i);\n                if (!vimGlobalState.registerController.isValidRegister(registerName)) {\n                    continue;\n                }\n                var register = registers[registerName] || new Register();\n                regInfo += '\"' + registerName + '    ' + register.toString() + '\\n';\n            }\n        }\n        showConfirm(cm, regInfo);\n    },\n    sort: function (cm, params) {\n        var reverse, ignoreCase, unique, number, pattern;\n        function parseArgs() {\n            if (params.argString) {\n                var args = new CodeMirror.StringStream(params.argString);\n                if (args.eat('!')) {\n                    reverse = true;\n                }\n                if (args.eol()) {\n                    return;\n                }\n                if (!args.eatSpace()) {\n                    return 'Invalid arguments';\n                }\n                var opts = args.match(/([dinuox]+)?\\s*(\\/.+\\/)?\\s*/);\n                if (!opts && !args.eol()) {\n                    return 'Invalid arguments';\n                }\n                if (opts[1]) {\n                    ignoreCase = opts[1].indexOf('i') != -1;\n                    unique = opts[1].indexOf('u') != -1;\n                    var decimal = opts[1].indexOf('d') != -1 || opts[1].indexOf('n') != -1 && 1;\n                    var hex = opts[1].indexOf('x') != -1 && 1;\n                    var octal = opts[1].indexOf('o') != -1 && 1;\n                    if (decimal + hex + octal > 1) {\n                        return 'Invalid arguments';\n                    }\n                    number = decimal && 'decimal' || hex && 'hex' || octal && 'octal';\n                }\n                if (opts[2]) {\n                    pattern = new RegExp(opts[2].substr(1, opts[2].length - 2), ignoreCase ? 'i' : '');\n                }\n            }\n        }\n        var err = parseArgs();\n        if (err) {\n            showConfirm(cm, err + ': ' + params.argString);\n            return;\n        }\n        var lineStart = params.line || cm.firstLine();\n        var lineEnd = params.lineEnd || params.line || cm.lastLine();\n        if (lineStart == lineEnd) {\n            return;\n        }\n        var curStart = new Pos(lineStart, 0);\n        var curEnd = new Pos(lineEnd, lineLength(cm, lineEnd));\n        var text = cm.getRange(curStart, curEnd).split('\\n');\n        var numberRegex = pattern ? pattern :\n            (number == 'decimal') ? /(-?)([\\d]+)/ :\n                (number == 'hex') ? /(-?)(?:0x)?([0-9a-f]+)/i :\n                    (number == 'octal') ? /([0-7]+)/ : null;\n        var radix = (number == 'decimal') ? 10 : (number == 'hex') ? 16 : (number == 'octal') ? 8 : null;\n        var numPart = [], textPart = [];\n        if (number || pattern) {\n            for (var i = 0; i < text.length; i++) {\n                var matchPart = pattern ? text[i].match(pattern) : null;\n                if (matchPart && matchPart[0] != '') {\n                    numPart.push(matchPart);\n                }\n                else if (!pattern && numberRegex.exec(text[i])) {\n                    numPart.push(text[i]);\n                }\n                else {\n                    textPart.push(text[i]);\n                }\n            }\n        }\n        else {\n            textPart = text;\n        }\n        function compareFn(a, b) {\n            if (reverse) {\n                var tmp;\n                tmp = a;\n                a = b;\n                b = tmp;\n            }\n            if (ignoreCase) {\n                a = a.toLowerCase();\n                b = b.toLowerCase();\n            }\n            var anum = number && numberRegex.exec(a);\n            var bnum = number && numberRegex.exec(b);\n            if (!anum) {\n                return a < b ? -1 : 1;\n            }\n            anum = parseInt((anum[1] + anum[2]).toLowerCase(), radix);\n            bnum = parseInt((bnum[1] + bnum[2]).toLowerCase(), radix);\n            return anum - bnum;\n        }\n        function comparePatternFn(a, b) {\n            if (reverse) {\n                var tmp;\n                tmp = a;\n                a = b;\n                b = tmp;\n            }\n            if (ignoreCase) {\n                a[0] = a[0].toLowerCase();\n                b[0] = b[0].toLowerCase();\n            }\n            return (a[0] < b[0]) ? -1 : 1;\n        }\n        numPart.sort(pattern ? comparePatternFn : compareFn);\n        if (pattern) {\n            for (var i = 0; i < numPart.length; i++) {\n                numPart[i] = numPart[i].input;\n            }\n        }\n        else if (!number) {\n            textPart.sort(compareFn);\n        }\n        text = (!reverse) ? textPart.concat(numPart) : numPart.concat(textPart);\n        if (unique) { // Remove duplicate lines\n            var textOld = text;\n            var lastLine;\n            text = [];\n            for (var i = 0; i < textOld.length; i++) {\n                if (textOld[i] != lastLine) {\n                    text.push(textOld[i]);\n                }\n                lastLine = textOld[i];\n            }\n        }\n        cm.replaceRange(text.join('\\n'), curStart, curEnd);\n    },\n    vglobal: function (cm, params) {\n        this.global(cm, params);\n    },\n    global: function (cm, params) {\n        var argString = params.argString;\n        if (!argString) {\n            showConfirm(cm, 'Regular Expression missing from global');\n            return;\n        }\n        var inverted = params.commandName[0] === 'v';\n        var lineStart = (params.line !== undefined) ? params.line : cm.firstLine();\n        var lineEnd = params.lineEnd || params.line || cm.lastLine();\n        var tokens = splitBySlash(argString);\n        var regexPart = argString, cmd;\n        if (tokens.length) {\n            regexPart = tokens[0];\n            cmd = tokens.slice(1, tokens.length).join('/');\n        }\n        if (regexPart) {\n            try {\n                updateSearchQuery(cm, regexPart, true /** ignoreCase */, true /** smartCase */);\n            }\n            catch (e) {\n                showConfirm(cm, 'Invalid regex: ' + regexPart);\n                return;\n            }\n        }\n        var query = getSearchState(cm).getQuery();\n        var matchedLines = [];\n        for (var i = lineStart; i <= lineEnd; i++) {\n            var line = cm.getLineHandle(i);\n            var matched = query.test(line.text);\n            if (matched !== inverted) {\n                matchedLines.push(cmd ? line : line.text);\n            }\n        }\n        if (!cmd) {\n            showConfirm(cm, matchedLines.join('\\n'));\n            return;\n        }\n        var index = 0;\n        var nextCommand = function () {\n            if (index < matchedLines.length) {\n                var line = matchedLines[index++];\n                var lineNum = cm.getLineNumber(line);\n                if (lineNum == null) {\n                    nextCommand();\n                    return;\n                }\n                var command = (lineNum + 1) + cmd;\n                exCommandDispatcher.processCommand(cm, command, {\n                    callback: nextCommand\n                });\n            }\n        };\n        nextCommand();\n    },\n    substitute: function (cm, params) {\n        if (!cm.getSearchCursor) {\n            throw new Error('Search feature not available. Requires searchcursor.js or ' +\n                'any other getSearchCursor implementation.');\n        }\n        var argString = params.argString;\n        var tokens = argString ? splitBySeparator(argString, argString[0]) : [];\n        var regexPart, replacePart = '', trailing, flagsPart, count;\n        var confirm = false; // Whether to confirm each replace.\n        var global = false; // True to replace all instances on a line, false to replace only 1.\n        if (tokens.length) {\n            regexPart = tokens[0];\n            if (getOption('pcre') && regexPart !== '') {\n                regexPart = new RegExp(regexPart).source; //normalize not escaped characters\n            }\n            replacePart = tokens[1];\n            if (replacePart !== undefined) {\n                if (getOption('pcre')) {\n                    replacePart = unescapeRegexReplace(replacePart.replace(/([^\\\\])&/g, \"$1$$&\"));\n                }\n                else {\n                    replacePart = translateRegexReplace(replacePart);\n                }\n                vimGlobalState.lastSubstituteReplacePart = replacePart;\n            }\n            trailing = tokens[2] ? tokens[2].split(' ') : [];\n        }\n        else {\n            if (argString && argString.length) {\n                showConfirm(cm, 'Substitutions should be of the form ' +\n                    ':s/pattern/replace/');\n                return;\n            }\n        }\n        if (trailing) {\n            flagsPart = trailing[0];\n            count = parseInt(trailing[1]);\n            if (flagsPart) {\n                if (flagsPart.indexOf('c') != -1) {\n                    confirm = true;\n                }\n                if (flagsPart.indexOf('g') != -1) {\n                    global = true;\n                }\n                if (getOption('pcre')) {\n                    regexPart = regexPart + '/' + flagsPart;\n                }\n                else {\n                    regexPart = regexPart.replace(/\\//g, \"\\\\/\") + '/' + flagsPart;\n                }\n            }\n        }\n        if (regexPart) {\n            try {\n                updateSearchQuery(cm, regexPart, true /** ignoreCase */, true /** smartCase */);\n            }\n            catch (e) {\n                showConfirm(cm, 'Invalid regex: ' + regexPart);\n                return;\n            }\n        }\n        replacePart = replacePart || vimGlobalState.lastSubstituteReplacePart;\n        if (replacePart === undefined) {\n            showConfirm(cm, 'No previous substitute regular expression');\n            return;\n        }\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        var lineStart = (params.line !== undefined) ? params.line : cm.getCursor().line;\n        var lineEnd = params.lineEnd || lineStart;\n        if (lineStart == cm.firstLine() && lineEnd == cm.lastLine()) {\n            lineEnd = Infinity;\n        }\n        if (count) {\n            lineStart = lineEnd;\n            lineEnd = lineStart + count - 1;\n        }\n        var startPos = clipCursorToContent(cm, new Pos(lineStart, 0));\n        var cursor = cm.getSearchCursor(query, startPos);\n        doReplace(cm, confirm, global, lineStart, lineEnd, cursor, query, replacePart, params.callback);\n    },\n    redo: CodeMirror.commands.redo,\n    undo: CodeMirror.commands.undo,\n    write: function (cm) {\n        if (CodeMirror.commands.save) {\n            CodeMirror.commands.save(cm);\n        }\n        else if (cm.save) {\n            cm.save();\n        }\n    },\n    nohlsearch: function (cm) {\n        clearSearchHighlight(cm);\n    },\n    yank: function (cm) {\n        var cur = copyCursor(cm.getCursor());\n        var line = cur.line;\n        var lineText = cm.getLine(line);\n        vimGlobalState.registerController.pushText('0', 'yank', lineText, true, true);\n    },\n    delmarks: function (cm, params) {\n        if (!params.argString || !trim(params.argString)) {\n            showConfirm(cm, 'Argument required');\n            return;\n        }\n        var state = cm.state.vim;\n        var stream = new CodeMirror.StringStream(trim(params.argString));\n        while (!stream.eol()) {\n            stream.eatSpace();\n            var count = stream.pos;\n            if (!stream.match(/[a-zA-Z]/, false)) {\n                showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n                return;\n            }\n            var sym = stream.next();\n            if (stream.match('-', true)) {\n                if (!stream.match(/[a-zA-Z]/, false)) {\n                    showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n                    return;\n                }\n                var startMark = sym;\n                var finishMark = stream.next();\n                if (isLowerCase(startMark) && isLowerCase(finishMark) ||\n                    isUpperCase(startMark) && isUpperCase(finishMark)) {\n                    var start = startMark.charCodeAt(0);\n                    var finish = finishMark.charCodeAt(0);\n                    if (start >= finish) {\n                        showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n                        return;\n                    }\n                    for (var j = 0; j <= finish - start; j++) {\n                        var mark = String.fromCharCode(start + j);\n                        delete state.marks[mark];\n                    }\n                }\n                else {\n                    showConfirm(cm, 'Invalid argument: ' + startMark + '-');\n                    return;\n                }\n            }\n            else {\n                delete state.marks[sym];\n            }\n        }\n    }\n};\nvar exCommandDispatcher = new ExCommandDispatcher();\nfunction doReplace(cm, confirm, global, lineStart, lineEnd, searchCursor, query, replaceWith, callback) {\n    cm.state.vim.exMode = true;\n    var done = false;\n    var lastPos, modifiedLineNumber, joined;\n    function replaceAll() {\n        cm.operation(function () {\n            while (!done) {\n                replace();\n                next();\n            }\n            stop();\n        });\n    }\n    function replace() {\n        var text = cm.getRange(searchCursor.from(), searchCursor.to());\n        var newText = text.replace(query, replaceWith);\n        var unmodifiedLineNumber = searchCursor.to().line;\n        searchCursor.replace(newText);\n        modifiedLineNumber = searchCursor.to().line;\n        lineEnd += modifiedLineNumber - unmodifiedLineNumber;\n        joined = modifiedLineNumber < unmodifiedLineNumber;\n    }\n    function findNextValidMatch() {\n        var lastMatchTo = lastPos && copyCursor(searchCursor.to());\n        var match = searchCursor.findNext();\n        if (match && !match[0] && lastMatchTo && cursorEqual(searchCursor.from(), lastMatchTo)) {\n            match = searchCursor.findNext();\n        }\n        return match;\n    }\n    function next() {\n        while (findNextValidMatch() &&\n            isInRange(searchCursor.from(), lineStart, lineEnd)) {\n            if (!global && searchCursor.from().line == modifiedLineNumber && !joined) {\n                continue;\n            }\n            cm.scrollIntoView(searchCursor.from(), 30);\n            cm.setSelection(searchCursor.from(), searchCursor.to());\n            lastPos = searchCursor.from();\n            done = false;\n            return;\n        }\n        done = true;\n    }\n    function stop(close) {\n        if (close) {\n            close();\n        }\n        cm.focus();\n        if (lastPos) {\n            cm.setCursor(lastPos);\n            var vim = cm.state.vim;\n            vim.exMode = false;\n            vim.lastHPos = vim.lastHSPos = lastPos.ch;\n        }\n        if (callback) {\n            callback();\n        }\n    }\n    function onPromptKeyDown(e, _value, close) {\n        CodeMirror.e_stop(e);\n        var keyName = CodeMirror.keyName(e);\n        switch (keyName) {\n            case 'Y':\n                replace();\n                next();\n                break;\n            case 'N':\n                next();\n                break;\n            case 'A':\n                var savedCallback = callback;\n                callback = undefined;\n                cm.operation(replaceAll);\n                callback = savedCallback;\n                break;\n            case 'L':\n                replace();\n            case 'Q':\n            case 'Esc':\n            case 'Ctrl-C':\n            case 'Ctrl-[':\n                stop(close);\n                break;\n        }\n        if (done) {\n            stop(close);\n        }\n        return true;\n    }\n    next();\n    if (done) {\n        showConfirm(cm, 'No matches for ' + query.source);\n        return;\n    }\n    if (!confirm) {\n        replaceAll();\n        if (callback) {\n            callback();\n        }\n        return;\n    }\n    showPrompt(cm, {\n        prefix: dom('span', 'replace with ', dom('strong', replaceWith), ' (y/n/a/q/l)'),\n        onKeyDown: onPromptKeyDown\n    });\n}\nCodeMirror.keyMap.vim = {\n    attach: attachVimMap,\n    detach: detachVimMap,\n    call: cmKey\n};\nfunction exitInsertMode(cm) {\n    var vim = cm.state.vim;\n    var macroModeState = vimGlobalState.macroModeState;\n    var insertModeChangeRegister = vimGlobalState.registerController.getRegister('.');\n    var isPlaying = macroModeState.isPlaying;\n    var lastChange = macroModeState.lastInsertModeChanges;\n    if (!isPlaying) {\n        cm.off('change', onChange);\n        CodeMirror.off(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n    }\n    if (!isPlaying && vim.insertModeRepeat > 1) {\n        repeatLastEdit(cm, vim, vim.insertModeRepeat - 1, true /** repeatForInsert */);\n        vim.lastEditInputState.repeatOverride = vim.insertModeRepeat;\n    }\n    delete vim.insertModeRepeat;\n    vim.insertMode = false;\n    cm.setCursor(cm.getCursor().line, cm.getCursor().ch - 1);\n    cm.setOption('keyMap', 'vim');\n    cm.setOption('disableInput', true);\n    cm.toggleOverwrite(false); // exit replace mode if we were in it.\n    insertModeChangeRegister.setText(lastChange.changes.join(''));\n    CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"normal\" });\n    if (macroModeState.isRecording) {\n        logInsertModeChange(macroModeState);\n    }\n}\nfunction _mapCommand(command) {\n    defaultKeymap.unshift(command);\n}\nfunction mapCommand(keys, type, name, args, extra) {\n    var command = { keys: keys, type: type };\n    command[type] = name;\n    command[type + \"Args\"] = args;\n    for (var key in extra)\n        command[key] = extra[key];\n    _mapCommand(command);\n}\ndefineOption('insertModeEscKeysTimeout', 200, 'number');\nCodeMirror.keyMap['vim-insert'] = {\n    fallthrough: ['default'],\n    attach: attachVimMap,\n    detach: detachVimMap,\n    call: cmKey\n};\nCodeMirror.keyMap['vim-replace'] = {\n    'Backspace': 'goCharLeft',\n    fallthrough: ['vim-insert'],\n    attach: attachVimMap,\n    detach: detachVimMap,\n    call: cmKey\n};\nfunction executeMacroRegister(cm, vim, macroModeState, registerName) {\n    var register = vimGlobalState.registerController.getRegister(registerName);\n    if (registerName == ':') {\n        if (register.keyBuffer[0]) {\n            exCommandDispatcher.processCommand(cm, register.keyBuffer[0]);\n        }\n        macroModeState.isPlaying = false;\n        return;\n    }\n    var keyBuffer = register.keyBuffer;\n    var imc = 0;\n    macroModeState.isPlaying = true;\n    macroModeState.replaySearchQueries = register.searchQueries.slice(0);\n    for (var i = 0; i < keyBuffer.length; i++) {\n        var text = keyBuffer[i];\n        var match, key;\n        while (text) {\n            match = (/<\\w+-.+?>|<\\w+>|./).exec(text);\n            key = match[0];\n            text = text.substring(match.index + key.length);\n            vimApi.handleKey(cm, key, 'macro');\n            if (vim.insertMode) {\n                var changes = register.insertModeChanges[imc++].changes;\n                vimGlobalState.macroModeState.lastInsertModeChanges.changes =\n                    changes;\n                repeatInsertModeChanges(cm, changes, 1);\n                exitInsertMode(cm);\n            }\n        }\n    }\n    macroModeState.isPlaying = false;\n}\nfunction logKey(macroModeState, key) {\n    if (macroModeState.isPlaying) {\n        return;\n    }\n    var registerName = macroModeState.latestRegister;\n    var register = vimGlobalState.registerController.getRegister(registerName);\n    if (register) {\n        register.pushText(key);\n    }\n}\nfunction logInsertModeChange(macroModeState) {\n    if (macroModeState.isPlaying) {\n        return;\n    }\n    var registerName = macroModeState.latestRegister;\n    var register = vimGlobalState.registerController.getRegister(registerName);\n    if (register && register.pushInsertModeChanges) {\n        register.pushInsertModeChanges(macroModeState.lastInsertModeChanges);\n    }\n}\nfunction logSearchQuery(macroModeState, query) {\n    if (macroModeState.isPlaying) {\n        return;\n    }\n    var registerName = macroModeState.latestRegister;\n    var register = vimGlobalState.registerController.getRegister(registerName);\n    if (register && register.pushSearchQuery) {\n        register.pushSearchQuery(query);\n    }\n}\nfunction onChange(cm, changeObj) {\n    var macroModeState = vimGlobalState.macroModeState;\n    var lastChange = macroModeState.lastInsertModeChanges;\n    if (!macroModeState.isPlaying) {\n        while (changeObj) {\n            lastChange.expectCursorActivityForChange = true;\n            if (lastChange.ignoreCount > 1) {\n                lastChange.ignoreCount--;\n            }\n            else if (changeObj.origin == '+input' || changeObj.origin == 'paste'\n                || changeObj.origin === undefined /* only in testing */) {\n                var selectionCount = cm.listSelections().length;\n                if (selectionCount > 1)\n                    lastChange.ignoreCount = selectionCount;\n                var text = changeObj.text.join('\\n');\n                if (lastChange.maybeReset) {\n                    lastChange.changes = [];\n                    lastChange.maybeReset = false;\n                }\n                if (text) {\n                    if (cm.state.overwrite && !/\\n/.test(text)) {\n                        lastChange.changes.push([text]);\n                    }\n                    else {\n                        lastChange.changes.push(text);\n                    }\n                }\n            }\n            changeObj = changeObj.next;\n        }\n    }\n}\nfunction onCursorActivity(cm) {\n    var vim = cm.state.vim;\n    if (vim.insertMode) {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isPlaying) {\n            return;\n        }\n        var lastChange = macroModeState.lastInsertModeChanges;\n        if (lastChange.expectCursorActivityForChange) {\n            lastChange.expectCursorActivityForChange = false;\n        }\n        else {\n            lastChange.maybeReset = true;\n        }\n    }\n    else if (!cm.curOp.isVimOp) {\n        handleExternalSelection(cm, vim);\n    }\n}\nfunction handleExternalSelection(cm, vim, keepHPos) {\n    var anchor = cm.getCursor('anchor');\n    var head = cm.getCursor('head');\n    if (vim.visualMode && !cm.somethingSelected()) {\n        exitVisualMode(cm, false);\n    }\n    else if (!vim.visualMode && !vim.insertMode && cm.somethingSelected()) {\n        vim.visualMode = true;\n        vim.visualLine = false;\n        CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"visual\" });\n    }\n    if (vim.visualMode) {\n        var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0;\n        var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0;\n        head = offsetCursor(head, 0, headOffset);\n        anchor = offsetCursor(anchor, 0, anchorOffset);\n        vim.sel = {\n            anchor: anchor,\n            head: head\n        };\n        updateMark(cm, vim, '<', cursorMin(head, anchor));\n        updateMark(cm, vim, '>', cursorMax(head, anchor));\n    }\n    else if (!vim.insertMode && !keepHPos) {\n        vim.lastHPos = cm.getCursor().ch;\n    }\n}\nfunction InsertModeKey(keyName) {\n    this.keyName = keyName;\n}\nfunction onKeyEventTargetKeyDown(e) {\n    var macroModeState = vimGlobalState.macroModeState;\n    var lastChange = macroModeState.lastInsertModeChanges;\n    var keyName = CodeMirror.keyName(e);\n    if (!keyName) {\n        return;\n    }\n    function onKeyFound() {\n        if (lastChange.maybeReset) {\n            lastChange.changes = [];\n            lastChange.maybeReset = false;\n        }\n        lastChange.changes.push(new InsertModeKey(keyName));\n        return true;\n    }\n    if (keyName.indexOf('Delete') != -1 || keyName.indexOf('Backspace') != -1) {\n        CodeMirror.lookupKey(keyName, 'vim-insert', onKeyFound);\n    }\n}\nfunction repeatLastEdit(cm, vim, repeat, repeatForInsert) {\n    var macroModeState = vimGlobalState.macroModeState;\n    macroModeState.isPlaying = true;\n    var isAction = !!vim.lastEditActionCommand;\n    var cachedInputState = vim.inputState;\n    function repeatCommand() {\n        if (isAction) {\n            commandDispatcher.processAction(cm, vim, vim.lastEditActionCommand);\n        }\n        else {\n            commandDispatcher.evalInput(cm, vim);\n        }\n    }\n    function repeatInsert(repeat) {\n        if (macroModeState.lastInsertModeChanges.changes.length > 0) {\n            repeat = !vim.lastEditActionCommand ? 1 : repeat;\n            var changeObject = macroModeState.lastInsertModeChanges;\n            repeatInsertModeChanges(cm, changeObject.changes, repeat);\n        }\n    }\n    vim.inputState = vim.lastEditInputState;\n    if (isAction && vim.lastEditActionCommand.interlaceInsertRepeat) {\n        for (var i = 0; i < repeat; i++) {\n            repeatCommand();\n            repeatInsert(1);\n        }\n    }\n    else {\n        if (!repeatForInsert) {\n            repeatCommand();\n        }\n        repeatInsert(repeat);\n    }\n    vim.inputState = cachedInputState;\n    if (vim.insertMode && !repeatForInsert) {\n        exitInsertMode(cm);\n    }\n    macroModeState.isPlaying = false;\n}\nfunction repeatInsertModeChanges(cm, changes, repeat) {\n    function keyHandler(binding) {\n        if (typeof binding == 'string') {\n            CodeMirror.commands[binding](cm);\n        }\n        else {\n            binding(cm);\n        }\n        return true;\n    }\n    var head = cm.getCursor('head');\n    var visualBlock = vimGlobalState.macroModeState.lastInsertModeChanges.visualBlock;\n    if (visualBlock) {\n        selectForInsert(cm, head, visualBlock + 1);\n        repeat = cm.listSelections().length;\n        cm.setCursor(head);\n    }\n    for (var i = 0; i < repeat; i++) {\n        if (visualBlock) {\n            cm.setCursor(offsetCursor(head, i, 0));\n        }\n        for (var j = 0; j < changes.length; j++) {\n            var change = changes[j];\n            if (change instanceof InsertModeKey) {\n                CodeMirror.lookupKey(change.keyName, 'vim-insert', keyHandler);\n            }\n            else if (typeof change == \"string\") {\n                cm.replaceSelection(change);\n            }\n            else {\n                var start = cm.getCursor();\n                var end = offsetCursor(start, 0, change[0].length);\n                cm.replaceRange(change[0], start, end);\n                cm.setCursor(end);\n            }\n        }\n    }\n    if (visualBlock) {\n        cm.setCursor(offsetCursor(head, 0, 1));\n    }\n}\nresetVimGlobalState();\nCodeMirror.Vim = vimApi;\nvar specialKey = { 'return': 'CR', backspace: 'BS', 'delete': 'Del', esc: 'Esc',\n    left: 'Left', right: 'Right', up: 'Up', down: 'Down', space: 'Space', insert: 'Ins',\n    home: 'Home', end: 'End', pageup: 'PageUp', pagedown: 'PageDown', enter: 'CR'\n};\nfunction lookupKey(hashId, key, e) {\n    if (key.length > 1 && key[0] == \"n\") {\n        key = key.replace(\"numpad\", \"\");\n    }\n    key = specialKey[key] || key;\n    var name = '';\n    if (e.ctrlKey) {\n        name += 'C-';\n    }\n    if (e.altKey) {\n        name += 'A-';\n    }\n    if ((name || key.length > 1) && e.shiftKey) {\n        name += 'S-';\n    }\n    name += key;\n    if (name.length > 1) {\n        name = '<' + name + '>';\n    }\n    return name;\n}\nvar handleKey = vimApi.handleKey.bind(vimApi);\nvimApi.handleKey = function (cm, key, origin) {\n    return cm.operation(function () {\n        return handleKey(cm, key, origin);\n    }, true);\n};\nfunction cloneVimState(state) {\n    var n = new state.constructor();\n    Object.keys(state).forEach(function (key) {\n        var o = state[key];\n        if (Array.isArray(o))\n            o = o.slice();\n        else if (o && typeof o == \"object\" && o.constructor != Object)\n            o = cloneVimState(o);\n        n[key] = o;\n    });\n    if (state.sel) {\n        n.sel = {\n            head: state.sel.head && copyCursor(state.sel.head),\n            anchor: state.sel.anchor && copyCursor(state.sel.anchor)\n        };\n    }\n    return n;\n}\nfunction multiSelectHandleKey(cm, key, origin) {\n    var isHandled = false;\n    var vim = vimApi.maybeInitVimState_(cm);\n    var visualBlock = vim.visualBlock || vim.wasInVisualBlock;\n    var wasMultiselect = cm.ace.inMultiSelectMode;\n    if (vim.wasInVisualBlock && !wasMultiselect) {\n        vim.wasInVisualBlock = false;\n    }\n    else if (wasMultiselect && vim.visualBlock) {\n        vim.wasInVisualBlock = true;\n    }\n    if (key == '<Esc>' && !vim.insertMode && !vim.visualMode && wasMultiselect) {\n        cm.ace.exitMultiSelectMode();\n    }\n    else if (visualBlock || !wasMultiselect || cm.ace.inVirtualSelectionMode) {\n        isHandled = vimApi.handleKey(cm, key, origin);\n    }\n    else {\n        var old = cloneVimState(vim);\n        cm.operation(function () {\n            cm.ace.forEachSelection(function () {\n                var sel = cm.ace.selection;\n                cm.state.vim.lastHPos = sel.$desiredColumn == null ? sel.lead.column : sel.$desiredColumn;\n                var head = cm.getCursor(\"head\");\n                var anchor = cm.getCursor(\"anchor\");\n                var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0;\n                var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0;\n                head = offsetCursor(head, 0, headOffset);\n                anchor = offsetCursor(anchor, 0, anchorOffset);\n                cm.state.vim.sel.head = head;\n                cm.state.vim.sel.anchor = anchor;\n                isHandled = handleKey(cm, key, origin);\n                sel.$desiredColumn = cm.state.vim.lastHPos == -1 ? null : cm.state.vim.lastHPos;\n                if (cm.virtualSelectionMode()) {\n                    cm.state.vim = cloneVimState(old);\n                }\n            });\n            if (cm.curOp.cursorActivity && !isHandled)\n                cm.curOp.cursorActivity = false;\n        }, true);\n    }\n    if (isHandled && !vim.visualMode && !vim.insert && vim.visualMode != cm.somethingSelected()) {\n        handleExternalSelection(cm, vim, true);\n    }\n    return isHandled;\n}\nexports.CodeMirror = CodeMirror;\nvar getVim = vimApi.maybeInitVimState_;\nexports.handler = {\n    $id: \"ace/keyboard/vim\",\n    drawCursor: function (element, pixelPos, config, sel, session) {\n        var vim = this.state.vim || {};\n        var w = config.characterWidth;\n        var h = config.lineHeight;\n        var top = pixelPos.top;\n        var left = pixelPos.left;\n        if (!vim.insertMode) {\n            var isbackwards = !sel.cursor\n                ? session.selection.isBackwards() || session.selection.isEmpty()\n                : Range.comparePoints(sel.cursor, sel.start) <= 0;\n            if (!isbackwards && left > w)\n                left -= w;\n        }\n        if (!vim.insertMode && vim.status) {\n            h = h / 2;\n            top += h;\n        }\n        domLib.translate(element, left, top);\n        domLib.setStyle(element.style, \"width\", w + \"px\");\n        domLib.setStyle(element.style, \"height\", h + \"px\");\n    },\n    handleKeyboard: function (data, hashId, key, keyCode, e) {\n        var editor = data.editor;\n        var cm = editor.state.cm;\n        var vim = getVim(cm);\n        if (keyCode == -1)\n            return;\n        if (!vim.insertMode) {\n            if (hashId == -1) {\n                if (key.charCodeAt(0) > 0xFF) {\n                    if (data.inputKey) {\n                        key = data.inputKey;\n                        if (key && data.inputHash == 4)\n                            key = key.toUpperCase();\n                    }\n                }\n                data.inputChar = key;\n            }\n            else if (hashId == 4 || hashId == 0) {\n                if (data.inputKey == key && data.inputHash == hashId && data.inputChar) {\n                    key = data.inputChar;\n                    hashId = -1;\n                }\n                else {\n                    data.inputChar = null;\n                    data.inputKey = key;\n                    data.inputHash = hashId;\n                }\n            }\n            else {\n                data.inputChar = data.inputKey = null;\n            }\n        }\n        if (cm.state.overwrite && vim.insertMode && key == \"backspace\" && hashId == 0) {\n            return { command: \"gotoleft\" };\n        }\n        if (key == \"c\" && hashId == 1) { // key == \"ctrl-c\"\n            if (!useragent.isMac && editor.getCopyText()) {\n                editor.once(\"copy\", function () {\n                    if (vim.insertMode)\n                        editor.selection.clearSelection();\n                    else\n                        cm.operation(function () { exitVisualMode(cm); });\n                });\n                return { command: \"null\", passEvent: true };\n            }\n        }\n        if (key == \"esc\" && !vim.insertMode && !vim.visualMode && !cm.ace.inMultiSelectMode) {\n            var searchState = getSearchState(cm);\n            var overlay = searchState.getOverlay();\n            if (overlay)\n                cm.removeOverlay(overlay);\n        }\n        if (hashId == -1 || hashId & 1 || hashId === 0 && key.length > 1) {\n            var insertMode = vim.insertMode;\n            var name = lookupKey(hashId, key, e || {});\n            if (vim.status == null)\n                vim.status = \"\";\n            var isHandled = multiSelectHandleKey(cm, name, 'user');\n            vim = getVim(cm); // may be changed by multiSelectHandleKey\n            if (isHandled && vim.status != null)\n                vim.status += name;\n            else if (vim.status == null)\n                vim.status = \"\";\n            cm._signal(\"changeStatus\");\n            if (!isHandled && (hashId != -1 || insertMode))\n                return;\n            return { command: \"null\", passEvent: !isHandled };\n        }\n    },\n    attach: function (editor) {\n        if (!editor.state)\n            editor.state = {};\n        var cm = new CodeMirror(editor);\n        editor.state.cm = cm;\n        editor.$vimModeHandler = this;\n        CodeMirror.keyMap.vim.attach(cm);\n        getVim(cm).status = null;\n        cm.on('vim-command-done', function () {\n            if (cm.virtualSelectionMode())\n                return;\n            getVim(cm).status = null;\n            cm.ace._signal(\"changeStatus\");\n            cm.ace.session.markUndoGroup();\n        });\n        cm.on(\"changeStatus\", function () {\n            cm.ace.renderer.updateCursor();\n            cm.ace._signal(\"changeStatus\");\n        });\n        cm.on(\"vim-mode-change\", function () {\n            if (cm.virtualSelectionMode())\n                return;\n            updateInputMode();\n            cm._signal(\"changeStatus\");\n        });\n        function updateInputMode() {\n            var isIntsert = getVim(cm).insertMode;\n            cm.ace.renderer.setStyle(\"normal-mode\", !isIntsert);\n            editor.textInput.setCommandMode(!isIntsert);\n            editor.renderer.$keepTextAreaAtCursor = isIntsert;\n            editor.renderer.$blockCursor = !isIntsert;\n        }\n        updateInputMode();\n        editor.renderer.$cursorLayer.drawCursor = this.drawCursor.bind(cm);\n    },\n    detach: function (editor) {\n        var cm = editor.state.cm;\n        CodeMirror.keyMap.vim.detach(cm);\n        cm.destroy();\n        editor.state.cm = null;\n        editor.$vimModeHandler = null;\n        editor.renderer.$cursorLayer.drawCursor = null;\n        editor.renderer.setStyle(\"normal-mode\", false);\n        editor.textInput.setCommandMode(false);\n        editor.renderer.$keepTextAreaAtCursor = true;\n    },\n    getStatusText: function (editor) {\n        var cm = editor.state.cm;\n        var vim = getVim(cm);\n        if (vim.insertMode)\n            return \"INSERT\";\n        var status = \"\";\n        if (vim.visualMode) {\n            status += \"VISUAL\";\n            if (vim.visualLine)\n                status += \" LINE\";\n            if (vim.visualBlock)\n                status += \" BLOCK\";\n        }\n        if (vim.status)\n            status += (status ? \" \" : \"\") + vim.status;\n        return status;\n    }\n};\nvimApi.defineOption({\n    name: \"wrap\",\n    set: function (value, cm) {\n        if (cm) {\n            cm.ace.setOption(\"wrap\", value);\n        }\n    },\n    type: \"boolean\"\n}, false);\nvimApi.defineEx('write', 'w', function () {\n    console.log(':write is not implemented');\n});\ndefaultKeymap.push({ keys: 'zc', type: 'action', action: 'fold', actionArgs: { open: false } }, { keys: 'zC', type: 'action', action: 'fold', actionArgs: { open: false, all: true } }, { keys: 'zo', type: 'action', action: 'fold', actionArgs: { open: true } }, { keys: 'zO', type: 'action', action: 'fold', actionArgs: { open: true, all: true } }, { keys: 'za', type: 'action', action: 'fold', actionArgs: { toggle: true } }, { keys: 'zA', type: 'action', action: 'fold', actionArgs: { toggle: true, all: true } }, { keys: 'zf', type: 'action', action: 'fold', actionArgs: { open: true, all: true } }, { keys: 'zd', type: 'action', action: 'fold', actionArgs: { open: true, all: true } }, { keys: '<C-A-k>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorAbove\" } }, { keys: '<C-A-j>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorBelow\" } }, { keys: '<C-A-S-k>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorAboveSkipCurrent\" } }, { keys: '<C-A-S-j>', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorBelowSkipCurrent\" } }, { keys: '<C-A-h>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectMoreBefore\" } }, { keys: '<C-A-l>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectMoreAfter\" } }, { keys: '<C-A-S-h>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectNextBefore\" } }, { keys: '<C-A-S-l>', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectNextAfter\" } });\ndefaultKeymap.push({\n    keys: 'gq',\n    type: 'operator',\n    operator: 'hardWrap'\n});\nvimApi.defineOperator(\"hardWrap\", function (cm, operatorArgs, ranges, oldAnchor, newHead) {\n    var anchor = ranges[0].anchor.line;\n    var head = ranges[0].head.line;\n    if (operatorArgs.linewise)\n        head--;\n    hardWrap(cm.ace, { startRow: anchor, endRow: head });\n    return Pos(head, 0);\n});\ndefineOption('textwidth', undefined, 'number', ['tw'], function (width, cm) {\n    if (cm === undefined) {\n        return;\n    }\n    if (width === undefined) {\n        var value = cm.ace.getOption('printMarginColumn');\n        return value;\n    }\n    else {\n        var column = Math.round(width);\n        if (column > 1) {\n            cm.ace.setOption('printMarginColumn', column);\n        }\n    }\n});\nactions.aceCommand = function (cm, actionArgs, vim) {\n    cm.vimCmd = actionArgs;\n    if (cm.ace.inVirtualSelectionMode)\n        cm.ace.on(\"beforeEndOperation\", delayedExecAceCommand);\n    else\n        delayedExecAceCommand(null, cm.ace);\n};\nfunction delayedExecAceCommand(op, ace) {\n    ace.off(\"beforeEndOperation\", delayedExecAceCommand);\n    var cmd = ace.state.cm.vimCmd;\n    if (cmd) {\n        ace.execCommand(cmd.exec ? cmd : cmd.name, cmd.args);\n    }\n    ace.curOp = ace.prevOp;\n}\nactions.fold = function (cm, actionArgs, vim) {\n    cm.ace.execCommand(['toggleFoldWidget', 'toggleFoldWidget', 'foldOther', 'unfoldall'\n    ][(actionArgs.all ? 2 : 0) + (actionArgs.open ? 1 : 0)]);\n};\nexports.handler.defaultKeymap = defaultKeymap;\nexports.handler.actions = actions;\nexports.Vim = vimApi;\n\n});                (function() {\n                    ace.require([\"ace/keyboard/vim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/keybinding-vscode.js",
    "content": "ace.define(\"ace/keyboard/vscode\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar config = require(\"../config\");\nexports.handler = new HashHandler();\nexports.handler.$id = \"ace/keyboard/vscode\";\nexports.handler.addCommands([{\n        name: \"toggleWordWrap\",\n        exec: function (editor) {\n            var wrapUsed = editor.session.getUseWrapMode();\n            editor.session.setUseWrapMode(!wrapUsed);\n        },\n        readOnly: true\n    }, {\n        name: \"navigateToLastEditLocation\",\n        exec: function (editor) {\n            var lastDelta = editor.session.getUndoManager().$lastDelta;\n            var range = (lastDelta.action == \"remove\") ? lastDelta.start : lastDelta.end;\n            editor.moveCursorTo(range.row, range.column);\n            editor.clearSelection();\n        }\n    }, {\n        name: \"replaceAll\",\n        exec: function (editor) {\n            if (!editor.searchBox) {\n                config.loadModule(\"ace/ext/searchbox\", function (e) {\n                    e.Search(editor, true);\n                });\n            }\n            else {\n                if (editor.searchBox.active === true && editor.searchBox.replaceOption.checked === true) {\n                    editor.searchBox.replaceAll();\n                }\n            }\n        }\n    }, {\n        name: \"replaceOne\",\n        exec: function (editor) {\n            if (!editor.searchBox) {\n                config.loadModule(\"ace/ext/searchbox\", function (e) {\n                    e.Search(editor, true);\n                });\n            }\n            else {\n                if (editor.searchBox.active === true && editor.searchBox.replaceOption.checked === true) {\n                    editor.searchBox.replace();\n                }\n            }\n        }\n    }, {\n        name: \"selectAllMatches\",\n        exec: function (editor) {\n            if (!editor.searchBox) {\n                config.loadModule(\"ace/ext/searchbox\", function (e) {\n                    e.Search(editor, false);\n                });\n            }\n            else {\n                if (editor.searchBox.active === true) {\n                    editor.searchBox.findAll();\n                }\n            }\n        }\n    }, {\n        name: \"toggleFindCaseSensitive\",\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/searchbox\", function (e) {\n                e.Search(editor, false);\n                var sb = editor.searchBox;\n                sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\n                sb.$syncOptions();\n            });\n        }\n    }, {\n        name: \"toggleFindInSelection\",\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/searchbox\", function (e) {\n                e.Search(editor, false);\n                var sb = editor.searchBox;\n                sb.searchOption.checked = !sb.searchRange;\n                sb.setSearchRange(sb.searchOption.checked && sb.editor.getSelectionRange());\n                sb.$syncOptions();\n            });\n        }\n    }, {\n        name: \"toggleFindRegex\",\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/searchbox\", function (e) {\n                e.Search(editor, false);\n                var sb = editor.searchBox;\n                sb.regExpOption.checked = !sb.regExpOption.checked;\n                sb.$syncOptions();\n            });\n        }\n    }, {\n        name: \"toggleFindWholeWord\",\n        exec: function (editor) {\n            config.loadModule(\"ace/ext/searchbox\", function (e) {\n                e.Search(editor, false);\n                var sb = editor.searchBox;\n                sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\n                sb.$syncOptions();\n            });\n        }\n    }, {\n        name: \"removeSecondaryCursors\",\n        exec: function (editor) {\n            var ranges = editor.selection.ranges;\n            if (ranges && ranges.length > 1)\n                editor.selection.toSingleRange(ranges[ranges.length - 1]);\n            else\n                editor.selection.clearSelection();\n        }\n    }]);\n[{\n        bindKey: { mac: \"Ctrl-G\", win: \"Ctrl-G\" },\n        name: \"gotoline\"\n    }, {\n        bindKey: { mac: \"Command-Shift-L|Command-F2\", win: \"Ctrl-Shift-L|Ctrl-F2\" },\n        name: \"findAll\"\n    }, {\n        bindKey: { mac: \"Shift-F8|Shift-Option-F8\", win: \"Shift-F8|Shift-Alt-F8\" },\n        name: \"goToPreviousError\"\n    }, {\n        bindKey: { mac: \"F8|Option-F8\", win: \"F8|Alt-F8\" },\n        name: \"goToNextError\"\n    }, {\n        bindKey: { mac: \"Command-Shift-P|F1\", win: \"Ctrl-Shift-P|F1\" },\n        name: \"openCommandPallete\"\n    }, {\n        bindKey: { mac: \"Command-K|Command-S\", win: \"Ctrl-K|Ctrl-S\" },\n        name: \"showKeyboardShortcuts\"\n    }, {\n        bindKey: { mac: \"Shift-Option-Up\", win: \"Alt-Shift-Up\" },\n        name: \"copylinesup\"\n    }, {\n        bindKey: { mac: \"Shift-Option-Down\", win: \"Alt-Shift-Down\" },\n        name: \"copylinesdown\"\n    }, {\n        bindKey: { mac: \"Command-Shift-K\", win: \"Ctrl-Shift-K\" },\n        name: \"removeline\"\n    }, {\n        bindKey: { mac: \"Command-Enter\", win: \"Ctrl-Enter\" },\n        name: \"addLineAfter\"\n    }, {\n        bindKey: { mac: \"Command-Shift-Enter\", win: \"Ctrl-Shift-Enter\" },\n        name: \"addLineBefore\"\n    }, {\n        bindKey: { mac: \"Command-Shift-\\\\\", win: \"Ctrl-Shift-\\\\\" },\n        name: \"jumptomatching\"\n    }, {\n        bindKey: { mac: \"Command-]\", win: \"Ctrl-]\" },\n        name: \"blockindent\"\n    }, {\n        bindKey: { mac: \"Command-[\", win: \"Ctrl-[\" },\n        name: \"blockoutdent\"\n    }, {\n        bindKey: { mac: \"Ctrl-PageDown\", win: \"Alt-PageDown\" },\n        name: \"pagedown\"\n    }, {\n        bindKey: { mac: \"Ctrl-PageUp\", win: \"Alt-PageUp\" },\n        name: \"pageup\"\n    }, {\n        bindKey: { mac: \"Shift-Option-A\", win: \"Shift-Alt-A\" },\n        name: \"toggleBlockComment\"\n    }, {\n        bindKey: { mac: \"Option-Z\", win: \"Alt-Z\" },\n        name: \"toggleWordWrap\"\n    }, {\n        bindKey: { mac: \"Command-G\", win: \"F3|Ctrl-K Ctrl-D\" },\n        name: \"findnext\"\n    }, {\n        bindKey: { mac: \"Command-Shift-G\", win: \"Shift-F3\" },\n        name: \"findprevious\"\n    }, {\n        bindKey: { mac: \"Option-Enter\", win: \"Alt-Enter\" },\n        name: \"selectAllMatches\"\n    }, {\n        bindKey: { mac: \"Command-D\", win: \"Ctrl-D\" },\n        name: \"selectMoreAfter\"\n    }, {\n        bindKey: { mac: \"Command-K Command-D\", win: \"Ctrl-K Ctrl-D\" },\n        name: \"selectOrFindNext\"\n    }, {\n        bindKey: { mac: \"Shift-Option-I\", win: \"Shift-Alt-I\" },\n        name: \"splitSelectionIntoLines\"\n    }, {\n        bindKey: { mac: \"Command-K M\", win: \"Ctrl-K M\" },\n        name: \"modeSelect\"\n    }, {\n        bindKey: { mac: \"Command-Option-[\", win: \"Ctrl-Shift-[\" },\n        name: \"toggleFoldWidget\"\n    }, {\n        bindKey: { mac: \"Command-Option-]\", win: \"Ctrl-Shift-]\" },\n        name: \"toggleFoldWidget\"\n    }, {\n        bindKey: { mac: \"Command-K Command-0\", win: \"Ctrl-K Ctrl-0\" },\n        name: \"foldall\"\n    }, {\n        bindKey: { mac: \"Command-K Command-J\", win: \"Ctrl-K Ctrl-J\" },\n        name: \"unfoldall\"\n    }, {\n        bindKey: { mac: \"Command-K Command-1\", win: \"Ctrl-K Ctrl-1\" },\n        name: \"foldOther\"\n    }, {\n        bindKey: { mac: \"Command-K Command-Q\", win: \"Ctrl-K Ctrl-Q\" },\n        name: \"navigateToLastEditLocation\"\n    }, {\n        bindKey: { mac: \"Command-K Command-R|Command-K Command-S\", win: \"Ctrl-K Ctrl-R|Ctrl-K Ctrl-S\" },\n        name: \"showKeyboardShortcuts\"\n    }, {\n        bindKey: { mac: \"Command-K Command-X\", win: \"Ctrl-K Ctrl-X\" },\n        name: \"trimTrailingSpace\"\n    }, {\n        bindKey: { mac: \"Shift-Down|Command-Shift-Down\", win: \"Shift-Down|Ctrl-Shift-Down\" },\n        name: \"selectdown\"\n    }, {\n        bindKey: { mac: \"Shift-Up|Command-Shift-Up\", win: \"Shift-Up|Ctrl-Shift-Up\" },\n        name: \"selectup\"\n    }, {\n        bindKey: { mac: \"Command-Alt-Enter\", win: \"Ctrl-Alt-Enter\" },\n        name: \"replaceAll\"\n    }, {\n        bindKey: { mac: \"Command-Shift-1\", win: \"Ctrl-Shift-1\" },\n        name: \"replaceOne\"\n    }, {\n        bindKey: { mac: \"Option-C\", win: \"Alt-C\" },\n        name: \"toggleFindCaseSensitive\"\n    }, {\n        bindKey: { mac: \"Option-L\", win: \"Alt-L\" },\n        name: \"toggleFindInSelection\"\n    }, {\n        bindKey: { mac: \"Option-R\", win: \"Alt-R\" },\n        name: \"toggleFindRegex\"\n    }, {\n        bindKey: { mac: \"Option-W\", win: \"Alt-W\" },\n        name: \"toggleFindWholeWord\"\n    }, {\n        bindKey: { mac: \"Command-L\", win: \"Ctrl-L\" },\n        name: \"expandtoline\"\n    }, {\n        bindKey: { mac: \"Shift-Esc\", win: \"Shift-Esc\" },\n        name: \"removeSecondaryCursors\"\n    }\n].forEach(function (binding) {\n    var command = exports.handler.commands[binding.name];\n    if (command)\n        command.bindKey = binding.bindKey;\n    exports.handler.bindKey(binding.bindKey, command || binding.name);\n});\n\n});                (function() {\n                    ace.require([\"ace/keyboard/vscode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-abap.js",
    "content": "ace.define(\"ace/mode/abap_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n * based on\n * \" Vim ABAP syntax file\n * \"    Language: SAP - ABAP/R4\n * \"    Revision: 2.1\n * \"  Maintainer: Marius Piedallu van Wyk <lailoken@gmail.com>\n * \" Last Change: 2012 Oct 23\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar AbapHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \"ADD ALIAS ALIASES ASCENDING ASSERT ASSIGN ASSIGNING AT BACK\" +\n            \" CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY\" +\n            \" DATA DEFINE DEFINITION DEFERRED DELETE DESCENDING DESCRIBE DETAIL DIVIDE DO\" +\n            \" ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT\" +\n            \" FETCH FIELDS FORM FORMAT FREE FROM FUNCTION\" +\n            \" GENERATE GET\" +\n            \" HIDE\" +\n            \" IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION\" +\n            \" LEAVE LIKE LINE LOAD LOCAL LOOP\" +\n            \" MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY\" +\n            \" ON OVERLAY OPTIONAL OTHERS\" +\n            \" PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT\" +\n            \" RAISE RANGES READ RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURN RETURNING ROLLBACK\" +\n            \" SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS\" +\n            \" TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES\" +\n            \" UNASSIGN ULINE UNPACK UPDATE\" +\n            \" WHEN WHILE WINDOW WRITE\" +\n            \" OCCURS STRUCTURE OBJECT PROPERTY\" +\n            \" CASTING APPEND RAISING VALUE COLOR\" +\n            \" CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT\" +\n            \" ID NUMBER FOR TITLE OUTPUT\" +\n            \" WITH EXIT USING\" +\n            \" INTO WHERE GROUP BY HAVING ORDER BY SINGLE\" +\n            \" APPENDING CORRESPONDING FIELDS OF TABLE\" +\n            \" LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING\" +\n            \" EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN\",\n        \"constant.language\": \"TRUE FALSE NULL SPACE\",\n        \"support.type\": \"c n i p f d t x string xstring decfloat16 decfloat34\",\n        \"keyword.operator\": \"abs sign ceil floor trunc frac acos asin atan cos sin tan\" +\n            \" abapOperator cosh sinh tanh exp log log10 sqrt\" +\n            \" strlen xstrlen charlen numofchar dbmaxlen lines\"\n    }, \"text\", true, \" \");\n    var compoundKeywords = \"WITH\\\\W+(?:HEADER\\\\W+LINE|FRAME|KEY)|NO\\\\W+STANDARD\\\\W+PAGE\\\\W+HEADING|\" +\n        \"EXIT\\\\W+FROM\\\\W+STEP\\\\W+LOOP|BEGIN\\\\W+OF\\\\W+(?:BLOCK|LINE)|BEGIN\\\\W+OF|\" +\n        \"END\\\\W+OF\\\\W+(?:BLOCK|LINE)|END\\\\W+OF|NO\\\\W+INTERVALS|\" +\n        \"RESPECTING\\\\W+BLANKS|SEPARATED\\\\W+BY|USING\\\\W+(?:EDIT\\\\W+MASK)|\" +\n        \"WHERE\\\\W+(?:LINE)|RADIOBUTTON\\\\W+GROUP|REF\\\\W+TO|\" +\n        \"(?:PUBLIC|PRIVATE|PROTECTED)(?:\\\\W+SECTION)?|DELETING\\\\W+(?:TRAILING|LEADING)\" +\n        \"(?:ALL\\\\W+OCCURRENCES)|(?:FIRST|LAST)\\\\W+OCCURRENCE|INHERITING\\\\W+FROM|\" +\n        \"LINE-COUNT|ADD-CORRESPONDING|AUTHORITY-CHECK|BREAK-POINT|CLASS-DATA|CLASS-METHODS|\" +\n        \"CLASS-METHOD|DIVIDE-CORRESPONDING|EDITOR-CALL|END-OF-DEFINITION|END-OF-PAGE|END-OF-SELECTION|\" +\n        \"FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|\" +\n        \"NEW-PAGE|NEW-SECTION|PRINT-CONTROL|RP-PROVIDE-FROM-LAST|SELECT-OPTIONS|SELECTION-SCREEN|\" +\n        \"START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYNTAX-TRACE|TOP-OF-PAGE|TYPE-POOL|\" +\n        \"TYPE-POOLS|LINE-SIZE|LINE-COUNT|MESSAGE-ID|DISPLAY-MODE|READ(?:-ONLY)?|\" +\n        \"IS\\\\W+(?:NOT\\\\W+)?(?:ASSIGNED|BOUND|INITIAL|SUPPLIED)\";\n    this.$rules = {\n        \"start\": [\n            { token: \"string\", regex: \"`\", next: \"string\" },\n            { token: \"string\", regex: \"'\", next: \"qstring\" },\n            { token: \"doc.comment\", regex: /^\\*.+/ },\n            { token: \"comment\", regex: /\".+$/ },\n            { token: \"invalid\", regex: \"\\\\.{2,}\" },\n            { token: \"keyword.operator\", regex: /\\W[\\-+%=<>*]\\W|\\*\\*|[~:,\\.&$]|->*?|=>/ },\n            { token: \"paren.lparen\", regex: \"[\\\\[({]\" },\n            { token: \"paren.rparen\", regex: \"[\\\\])}]\" },\n            { token: \"constant.numeric\", regex: \"[+-]?\\\\d+\\\\b\" },\n            { token: \"variable.parameter\", regex: /sy|pa?\\d\\d\\d\\d\\|t\\d\\d\\d\\.|innnn/ },\n            { token: \"keyword\", regex: compoundKeywords },\n            { token: \"variable.parameter\", regex: /\\w+-\\w[\\-\\w]*/ },\n            { token: keywordMapper, regex: \"\\\\b\\\\w+\\\\b\" },\n            { caseInsensitive: true }\n        ],\n        \"qstring\": [\n            { token: \"constant.language.escape\", regex: \"''\" },\n            { token: \"string\", regex: \"'\", next: \"start\" },\n            { defaultToken: \"string\" }\n        ],\n        \"string\": [\n            { token: \"constant.language.escape\", regex: \"``\" },\n            { token: \"string\", regex: \"`\", next: \"start\" },\n            { defaultToken: \"string\" }\n        ]\n    };\n};\noop.inherits(AbapHighlightRules, TextHighlightRules);\nexports.AbapHighlightRules = AbapHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/abap\",[\"require\",\"exports\",\"module\",\"ace/mode/abap_highlight_rules\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Rules = require(\"./abap_highlight_rules\").AbapHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar oop = require(\"../lib/oop\");\nfunction Mode() {\n    this.HighlightRules = Rules;\n    this.foldingRules = new FoldMode();\n}\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = '\"';\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        return indent;\n    };\n    this.$id = \"ace/mode/abap\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/abap\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-abc.js",
    "content": "ace.define(\"ace/mode/abc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was partially autogenerated from https://github.com/jimhawkridge/SublimeABC\n\n Modifications\n\n -  more classes to express the abc semantic\n -  added syntax highlighting for Zupfnoter conventions (https://github.com/bwl21/zupfnoter)\n -  separate note pitch and note duration - even if it looks the same\n\n ***********************************************************************************************/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ABCHighlightRules = function () {\n    this.$rules = {\n        start: [\n            {\n                token: ['zupfnoter.information.comment.line.percentage', 'information.keyword', 'in formation.keyword.embedded'],\n                regex: '(%%%%)(hn\\\\.[a-z]*)(.*)',\n                comment: 'Instruction Comment'\n            },\n            {\n                token: ['information.comment.line.percentage', 'information.keyword.embedded'],\n                regex: '(%%)(.*)',\n                comment: 'Instruction Comment'\n            },\n            {\n                token: 'comment.line.percentage',\n                regex: '%.*',\n                comment: 'Comments'\n            },\n            {\n                token: 'barline.keyword.operator',\n                regex: '[\\\\[:]*[|:][|\\\\]:]*(?:\\\\[?[0-9]+)?|\\\\[[0-9]+',\n                comment: 'Bar lines'\n            },\n            {\n                token: ['information.keyword.embedded', 'information.argument.string.unquoted'],\n                regex: '(\\\\[[A-Za-z]:)([^\\\\]]*\\\\])',\n                comment: 'embedded Header lines'\n            },\n            {\n                token: ['information.keyword', 'information.argument.string.unquoted'],\n                regex: '^([A-Za-z]:)([^%\\\\\\\\]*)',\n                comment: 'Header lines'\n            },\n            {\n                token: ['text', 'entity.name.function', 'string.unquoted', 'text'],\n                regex: '(\\\\[)([A-Z]:)(.*?)(\\\\])',\n                comment: 'Inline fields'\n            },\n            {\n                token: ['accent.constant.language', 'pitch.constant.numeric', 'duration.constant.numeric'],\n                regex: '([\\\\^=_]*)([A-Ga-gz][,\\']*)([0-9]*/*[><0-9]*)',\n                comment: 'Notes'\n            },\n            {\n                token: 'zupfnoter.jumptarget.string.quoted',\n                regex: '[\\\\\"!]\\\\^\\\\:.*?[\\\\\"!]',\n                comment: 'Zupfnoter jumptarget'\n            }, {\n                token: 'zupfnoter.goto.string.quoted',\n                regex: '[\\\\\"!]\\\\^\\\\@.*?[\\\\\"!]',\n                comment: 'Zupfnoter goto'\n            },\n            {\n                token: 'zupfnoter.annotation.string.quoted',\n                regex: '[\\\\\"!]\\\\^\\\\!.*?[\\\\\"!]',\n                comment: 'Zupfnoter annoation'\n            },\n            {\n                token: 'zupfnoter.annotationref.string.quoted',\n                regex: '[\\\\\"!]\\\\^\\\\#.*?[\\\\\"!]',\n                comment: 'Zupfnoter annotation reference'\n            },\n            {\n                token: 'chordname.string.quoted',\n                regex: '[\\\\\"!]\\\\^.*?[\\\\\"!]',\n                comment: 'abc chord'\n            },\n            {\n                token: 'string.quoted',\n                regex: '[\\\\\"!].*?[\\\\\"!]',\n                comment: 'abc annotation'\n            }\n        ]\n    };\n    this.normalizeRules();\n};\nABCHighlightRules.metaData = {\n    fileTypes: ['abc'],\n    name: 'ABC',\n    scopeName: 'text.abcnotation'\n};\noop.inherits(ABCHighlightRules, TextHighlightRules);\nexports.ABCHighlightRules = ABCHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/abc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/abc_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ABCHighlightRules = require(\"./abc_highlight_rules\").ABCHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = ABCHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"%\";\n    this.$id = \"ace/mode/abc\";\n    this.snippetFileId = \"ace/snippets/abc\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/abc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-actionscript.js",
    "content": "ace.define(\"ace/mode/actionscript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from tm bundles\\actionscript.tmbundle\\Syntaxes\\ActionScript.plist (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ActionScriptHighlightRules = function () {\n    this.$rules = { start: [{ token: 'support.class.actionscript.2',\n                regex: '\\\\b(?:R(?:ecordset|DBMSResolver|adioButton(?:Group)?)|X(?:ML(?:Socket|Node|Connector)?|UpdateResolverDataHolder)|M(?:M(?:Save|Execute)|icrophoneMicrophone|o(?:use|vieClip(?:Loader)?)|e(?:nu(?:Bar)?|dia(?:Controller|Display|Playback))|ath)|B(?:yName|inding|utton)|S(?:haredObject|ystem|crollPane|t(?:yleSheet|age|ream)|ound|e(?:ndEvent|rviceObject)|OAPCall|lide)|N(?:umericStepper|et(?:stream|S(?:tream|ervices)|Connection|Debug(?:Config)?))|C(?:heckBox|o(?:ntextMenu(?:Item)?|okie|lor|m(?:ponentMixins|boBox))|ustomActions|lient|amera)|T(?:ypedValue|ext(?:Snapshot|Input|F(?:ield|ormat)|Area)|ree|AB)|Object|D(?:ownload|elta(?:Item|Packet)?|at(?:e(?:Chooser|Field)?|a(?:G(?:lue|rid)|Set|Type)))|U(?:RL|TC|IScrollBar)|P(?:opUpManager|endingCall|r(?:intJob|o(?:duct|gressBar)))|E(?:ndPoint|rror)|Video|Key|F(?:RadioButton|GridColumn|MessageBox|BarChart|S(?:croll(?:Bar|Pane)|tyleFormat|plitView)|orm|C(?:heckbox|omboBox|alendar)|unction|T(?:icker|ooltip(?:Lite)?|ree(?:Node)?)|IconButton|D(?:ataGrid|raggablePane)|P(?:ieChart|ushButton|ro(?:gressBar|mptBox))|L(?:i(?:stBox|neChart)|oadingBox)|AdvancedMessageBox)|W(?:indow|SDLURL|ebService(?:Connector)?)|L(?:ist|o(?:calConnection|ad(?:er|Vars)|g)|a(?:unch|bel))|A(?:sBroadcaster|cc(?:ordion|essibility)|S(?:Set(?:Native|PropFlags)|N(?:ew|ative)|C(?:onstructor|lamp(?:2)?)|InstanceOf)|pplication|lert|rray))\\\\b' },\n            { token: 'support.function.actionscript.2',\n                regex: '\\\\b(?:s(?:h(?:ift|ow(?:GridLines|Menu|Border|Settings|Headers|ColumnHeaders|Today|Preferences)?|ad(?:ow|ePane))|c(?:hema|ale(?:X|Mode|Y|Content)|r(?:oll(?:Track|Drag)?|een(?:Resolution|Color|DPI)))|t(?:yleSheet|op(?:Drag|A(?:nimation|llSounds|gent))?|epSize|a(?:tus|rt(?:Drag|A(?:nimation|gent))?))|i(?:n|ze|lence(?:TimeOut|Level))|o(?:ngname|urce|rt(?:Items(?:By)?|On(?:HeaderRelease)?|able(?:Columns)?)?)|u(?:ppressInvalidCalls|bstr(?:ing)?)|p(?:li(?:ce|t)|aceCol(?:umnsEqually|lumnsEqually))|e(?:nd(?:DefaultPushButtonEvent|AndLoad)?|curity|t(?:R(?:GB|o(?:otNode|w(?:Height|Count))|esizable(?:Columns)?|a(?:nge|te))|G(?:ain|roupName)|X(?:AxisTitle)?|M(?:i(?:n(?:imum|utes)|lliseconds)|o(?:nth(?:Names)?|tionLevel|de)|ultilineMode|e(?:ssage|nu(?:ItemEnabled(?:At)?|EnabledAt)|dia)|a(?:sk|ximum))|B(?:u(?:tton(?:s|Width)|fferTime)|a(?:seTabIndex|ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Target|P(?:osition|roperties)|barState|Location)|t(?:yle(?:Property)?|opOnFocus|at(?:us|e))|i(?:ze|lenceLevel)|ort(?:able(?:Columns)?|Function)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)?|Style|Color|ed(?:Node(?:s)?|Cell|I(?:nd(?:ices|ex)|tem(?:s)?))?|able))|kin|m(?:oothness|allScroll))|H(?:ighlight(?:s|Color)|Scroll|o(?:urs|rizontal)|eader(?:Symbol|Height|Text|Property|Format|Width|Location)?|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:ode(?:Properties|ExpansionHandler)|ewTextFormat)|C(?:h(?:ildNodes|a(?:ngeHandler|rt(?:Title|EventHandler)))|o(?:ntent(?:Size)?|okie|lumns)|ell(?:Symbol|Data)|l(?:i(?:ckHandler|pboard)|oseHandler)|redentials)|T(?:ype(?:dVaule)?|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:out(?:Handler)?)?)|oggle|extFormat|ransform)|I(?:s(?:Branch|Open)|n(?:terval|putProperty)|con(?:SymbolName)?|te(?:rator|m(?:ByKey|Symbol)))|Orientation|D(?:i(?:splay(?:Range|Graphics|Mode|Clip|Text|edMonth)|rection)|uration|e(?:pth(?:Below|To|Above)|fault(?:GatewayURL|Mappings|NodeIconSymbolName)|l(?:iveryMode|ay)|bug(?:ID)?)|a(?:yOfWeekNames|t(?:e(?:Filter)?|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Provider|All(?:Height|Property|Format|Width))?))|ra(?:wConnectors|gContent))|U(?:se(?:Shadow|HandCursor|EchoSuppression|rInput|Fade)|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear))|P(?:osition|ercentComplete|an(?:e(?:M(?:inimumSize|aximumSize)|Size|Title))?|ro(?:pert(?:y(?:Data)?|iesAt)|gress))|E(?:nabled|dit(?:Handler|able)|xpand(?:NodeTrigger|erSymbolName))|V(?:Scroll|olume|alue(?:Source)?)|KeyFrameInterval|Quality|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|ocus|ullYear|ps|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:opback|adTarget)|a(?:rgeScroll|bel(?:Source|Placement)?))|A(?:s(?:Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:e(?:State(?:Handler)?|Handler)|ateHandler)|utoH(?:ideScrollBar|eight)))?|paratorBefore|ek|lect(?:ion(?:Disabled|Unfocused)?|ed(?:Node(?:s)?|Child|I(?:nd(?:ices|ex)|tem(?:s)?)|Dat(?:e|a))?|able(?:Ranges)?)|rver(?:String)?)|kip|qrt|wapDepths|lice|aveToSharedObj|moothing)|h(?:scroll(?:Policy)?|tml(?:Text)?|i(?:t(?:Test(?:TextNearPos)?|Area)|de(?:BuiltInItems|Child)?|ghlight(?:2D|3D)?)|orizontal|e(?:ight|ader(?:Re(?:nderer|lease)|Height|Text))|P(?:osition|ageScrollSize)|a(?:s(?:childNodes|MP3|S(?:creen(?:Broadcast|Playback)|treaming(?:Video|Audio)|ort)|Next|OwnProperty|Pr(?:inting|evious)|EmbeddedVideo|VideoEncoder|A(?:ccesibility|udio(?:Encoder)?))|ndlerName)|LineScrollSize)|ye(?:sLabel|ar)|n(?:o(?:t|de(?:Name|Close|Type|Open|Value)|Label)|u(?:llValue|mChild(?:S(?:creens|lides)|ren|Forms))|e(?:w(?:Item|line|Value|LocationDialog)|xt(?:S(?:cene|ibling|lide)|TabIndex|Value|Frame)?)?|ame(?:s)?)|c(?:h(?:ildNodes|eck|a(?:nge(?:sPending)?|r(?:CodeAt|At))|r)|o(?:s|n(?:st(?:ant|ructor)|nect|c(?:urrency|at)|t(?:ent(?:Type|Path)?|ains|rol(?:Placement|lerPolicy))|denseWhite|version)|py|l(?:or|umn(?:Stretch|Name(?:s)?|Count))|m(?:p(?:onent|lete)|ment))|u(?:stomItems|ePoint(?:s)?|r(?:veTo|Value|rent(?:Slide|ChildSlide|Item|F(?:ocused(?:S(?:creen|lide)|Form)|ps))))|e(?:il|ll(?:Renderer|Press|Edit|Focus(?:In|Out)))|l(?:i(?:ck|ents)|o(?:se(?:Button|Pane)?|ne(?:Node)?)|ear(?:S(?:haredObjects|treams)|Timeout|Interval)?)|a(?:ncelLabel|tch|p(?:tion|abilities)|l(?:cFields|l(?:e(?:e|r))?))|reate(?:GatewayConnection|Menu|Se(?:rver|gment)|C(?:hild(?:AtDepth)?|l(?:ient|ass(?:ChildAtDepth|Object(?:AtDepth)?))|all)|Text(?:Node|Field)|Item|Object(?:AtDepth)?|PopUp|E(?:lement|mptyMovieClip)))|t(?:h(?:is|row)|ype(?:of|Name)?|i(?:tle(?:StyleDeclaration)?|me(?:out)?)|o(?:talTime|String|olTipText|p|UpperCase|ggle(?:HighQuality)?|Lo(?:caleString|werCase))|e(?:st|llTarget|xt(?:RightMargin|Bold|S(?:ize|elected)|Height|Color|I(?:ndent|talic)|Disabled|Underline|F(?:ield|ont)|Width|LeftMargin|Align)?)|a(?:n|rget(?:Path)?|b(?:Stops|Children|Index|Enabled|leName))|r(?:y|igger|ac(?:e|k(?:AsMenu)?)))|i(?:s(?:Running|Branch|NaN|Con(?:soleOpen|nected)|Toggled|Installed|Open|D(?:own|ebugger)|P(?:urchased|ro(?:totypeOf|pertyEnumerable))|Empty|F(?:inite|ullyPopulated)|Local|Active)|n(?:s(?:tall|ertBefore)|cludeDeltaPacketInfo|t|it(?:ialize|Component|Pod|A(?:pplication|gent))?|de(?:nt|terminate|x(?:InParent(?:Slide|Form)?|Of)?)|put|validate|finity|LocalInternetCache)?|con(?:F(?:ield|unction))?|t(?:e(?:ratorScrolled|m(?:s|RollO(?:ut|ver)|ClassName))|alic)|d3|p|fFrameLoaded|gnore(?:Case|White))|o(?:s|n(?:R(?:ollO(?:ut|ver)|e(?:s(?:ize|ult)|l(?:ease(?:Outside)?|aseOutside)))|XML|Mouse(?:Move|Down|Up|Wheel)|S(?:ync|croller|tatus|oundComplete|e(?:tFocus|lect(?:edItem)?))|N(?:oticeEvent|etworkChange)|C(?:hanged|onnect|l(?:ipEvent|ose))|ID3|D(?:isconnect|eactivate|ata|ragO(?:ut|ver))|Un(?:install|load)|P(?:aymentResult|ress)|EnterFrame|K(?:illFocus|ey(?:Down|Up))|Fault|Lo(?:ad|g)|A(?:ctiv(?:ity|ate)|ppSt(?:op|art)))?|pe(?:n|ration)|verLayChildren|kLabel|ldValue|r(?:d)?)|d(?:i(?:s(?:connect|play(?:Normal|ed(?:Month|Year)|Full)|able(?:Shader|d(?:Ranges|Days)|CloseBox|Events))|rection)|o(?:cTypeDecl|tall|Decoding|main|LazyDecoding)|u(?:plicateMovieClip|ration)|e(?:stroy(?:ChildAt|Object)|code|fault(?:PushButton(?:Enabled)?|KeydownHandler)?|l(?:ta(?:Packet(?:Changed)?)?|ete(?:PopUp|All)?)|blocking)|a(?:shBoardSave|yNames|ta(?:Provider)?|rkshadow)|r(?:opdown(?:Width)?|a(?:w|gO(?:ut|ver))))|u(?:se(?:Sort|HandCursor|Codepage|EchoSuppression)|n(?:shift|install|derline|escape|format|watch|lo(?:ck|ad(?:Movie(?:Num)?)?))|pdate(?:Results|Mode|I(?:nputProperties|tem(?:ByIndex)?)|P(?:acket|roperties)|View|AfterEvent)|rl)|join|p(?:ixelAspectRatio|o(?:sition|p|w)|u(?:sh|rge|blish)|ercen(?:tComplete|Loaded)|lay(?:head(?:Change|Time)|ing|Hidden|erType)?|a(?:ssword|use|r(?:se(?:XML|CSS|Int|Float)|ent(?:Node|Is(?:S(?:creen|lide)|Form))|ams))|r(?:int(?:Num|AsBitmap(?:Num)?)?|o(?:to(?:type)?|pert(?:y|ies)|gress)|e(?:ss|v(?:ious(?:S(?:ibling|lide)|Value)?|Scene|Frame)|ferred(?:Height|Width))))|e(?:scape|n(?:code(?:r)?|ter(?:Frame)?|dFill|able(?:Shader|d|CloseBox|Events))|dit(?:able|Field|LocationDialog)|v(?:ent|al(?:uate)?)|q|x(?:tended|p|ec(?:ute)?|actSettings)|m(?:phasized(?:StyleDeclaration)?|bedFonts))|v(?:i(?:sible|ewPod)|ScrollPolicy|o(?:id|lume)|ersion|P(?:osition|ageScrollSize)|a(?:l(?:idat(?:ionError|e(?:Property|ActivationKey)?)|ue(?:Of)?)|riable)|LineScrollSize)|k(?:ind|ey(?:Down|Up|Press|FrameInterval))|q(?:sort|uality)|f(?:scommand|i(?:n(?:d(?:Text|First|Last)?|ally)|eldInfo|lter(?:ed|Func)?|rst(?:Slide|Child|DayOfWeek|VisibleNode)?)|o(?:nt|cus(?:In|edCell|Out|Enabled)|r(?:egroundDisabled|mat(?:ter)?))|unctionName|ps|l(?:oor|ush)|ace|romCharCode)|w(?:i(?:th|dth)|ordWrap|atch|riteAccess)|l(?:t|i(?:st(?:Owner)?|ne(?:Style|To))|o(?:c(?:k|a(?:t(?:ion|eByld)|l(?:ToGlobal|FileReadDisable)))|opback|ad(?:Movie(?:Num)?|S(?:crollContent|ound)|ed|Variables(?:Num)?|Application)?|g(?:Changes)?)|e(?:ngth|ft(?:Margin)?|ading)?|a(?:st(?:Slide|Child|Index(?:Of)?)?|nguage|b(?:el(?:Placement|F(?:ield|unction))?|leField)))|a(?:s(?:scociate(?:Controller|Display)|in|pectRatio|function)|nd|c(?:ceptConnection|tiv(?:ityLevel|ePlayControl)|os)|t(?:t(?:ach(?:Movie|Sound|Video|Audio)|ributes)|an(?:2)?)|dd(?:header|RequestHeader|Menu(?:Item(?:At)?|At)?|Sort|Header|No(?:tice|de(?:At)?)|C(?:olumn(?:At)?|uePoint)|T(?:oLocalInternetCache|reeNode(?:At)?)|I(?:con|tem(?:s(?:At)?|At)?)|DeltaItem|P(?:od|age|roperty)|EventListener|View|FieldInfo|Listener|Animation)?|uto(?:Size|Play|KeyNav|Load)|pp(?:endChild|ly(?:Changes|Updates)?)|vHardwareDisable|fterLoaded|l(?:ternateRowColors|ign|l(?:ow(?:InsecureDomain|Domain)|Transitions(?:InDone|OutDone))|bum)|r(?:tist|row|g(?:uments|List))|gent|bs)|r(?:ight(?:Margin)?|o(?:ot(?:S(?:creen|lide)|Form)|und|w(?:Height|Count)|llO(?:ut|ver))|e(?:s(?:yncDepth|t(?:orePane|artAnimation|rict)|iz(?:e|able(?:Columns)?)|olveDelta|ult(?:s)?|ponse)|c(?:o(?:ncile(?:Results|Updates)|rd)|eive(?:Video|Audio))|draw|jectConnection|place(?:Sel|ItemAt|AllItems)?|ve(?:al(?:Child)?|rse)|quest(?:SizeChange|Payment)?|f(?:errer|resh(?:ScrollContent|Destinations|Pane|FromSources)?)|lease(?:Outside)?|ad(?:Only|Access)|gister(?:SkinElement|C(?:olor(?:Style|Name)|lass)|InheritingStyle|Proxy)|move(?:Range|M(?:ovieClip|enu(?:Item(?:At)?|At))|Background|Sort|No(?:tice|de(?:sAt|At)?)|C(?:olum(?:nAt|At)|uePoints)|T(?:extField|reeNode(?:At)?)|Item(?:At)?|Pod|EventListener|FromLocalInternetCache|Listener|All(?:C(?:olumns|uePoints)|Items)?))|a(?:ndom|te|dioDot))|g(?:t|oto(?:Slide|NextSlide|PreviousSlide|FirstSlide|LastSlide|And(?:Stop|Play))|e(?:nre|t(?:R(?:GB|o(?:otNode|wCount)|e(?:sizable|mote))|X(?:AxisTitle)?|M(?:i(?:n(?:imum(?:Size)?|utes)|lliseconds)|onth(?:Names)?|ultilineMode|e(?:ssage|nu(?:ItemAt|EnabledAt|At))|aximum(?:Size)?)|B(?:ytes(?:Total|Loaded)|ounds|utton(?:s|Width)|eginIndex|a(?:ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Position|barState|Location)|t(?:yle(?:Names)?|opOnFocus|ate)|ize|o(?:urce|rtState)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)|Style|ed(?:Node(?:s)?|Cell|Text|I(?:nd(?:ices|ex)|tem(?:s)?))?)|rvice)|moothness|WFVersion)|H(?:ighlight(?:s|Color)|ours|e(?:ight|ader(?:Height|Text|Property|Format|Width|Location)?)|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:o(?:tices|de(?:DisplayedAt|At))|um(?:Children|berAvailable)|e(?:wTextFormat|xtHighestDepth))|C(?:h(?:ild(?:S(?:creen|lide)|Nodes|Form|At)|artTitle)|o(?:n(?:tent|figInfo)|okie|de|unt|lumn(?:Names|Count|Index|At))|uePoint|ellIndex|loseHandler|a(?:ll|retIndex))|T(?:ypedValue|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:stamp|zoneOffset|out(?:State|Handler)|r)?)|oggle|ext(?:Extent|Format)?|r(?:ee(?:NodeAt|Length)|ans(?:form|actionId)))|I(?:s(?:Branch|Open)|n(?:stanceAtDepth|d(?:icesByKey|exByKey))|con(?:SymbolName)?|te(?:rator|m(?:sByKey|By(?:Name|Key)|id|ID|At))|d)|O(?:utput(?:Parameter(?:s|ByName)?|Value(?:s)?)|peration|ri(?:entation|ginalCellData))|D(?:i(?:s(?:play(?:Range|Mode|Clip|Index|edMonth)|kUsage)|rection)|uration|e(?:pth|faultNodeIconSymbolName|l(?:taPacket|ay)|bug(?:Config|ID)?)|a(?:y(?:OfWeekNames)?|t(?:e|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Label|All(?:Height|Property|Format|Width))?))|rawConnectors)|U(?:se(?:Shadow|HandCursor|rInput|Fade)|RL|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear))|P(?:o(?:sition|ds)|ercentComplete|a(?:n(?:e(?:M(?:inimums|aximums)|Height|Title|Width))?|rentNode)|r(?:operty(?:Name|Data)?|efer(?:ences|red(?:Height|Width))))|E(?:n(?:dIndex|abled)|ditingData|x(?:panderSymbolName|andNodeTrigger))|V(?:iewed(?:Pods|Applications)|olume|ersion|alue(?:Source)?)|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|o(?:ntList|cus)|ullYear|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:cal|adTarget)|ength|a(?:stTabIndex|bel(?:Source)?))|A(?:s(?:cii|Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:eState(?:Handler)?|ateHandler)|utoH(?:ideScrollBar|eight)|llItems|gent))?)?|lobal(?:StyleFormat|ToLocal)?|ain|roupName)|x(?:updatePackety|mlDecl)?|m(?:y(?:MethodName|Call)|in(?:imum)?|o(?:nthNames|tion(?:TimeOut|Level)|de(?:lChanged)?|use(?:Move|O(?:ut|ver)|Down(?:Somewhere|Outside)?|Up(?:Somewhere)?|WheelEnabled)|ve(?:To)?)|u(?:ted|lti(?:pleS(?:imultaneousAllowed|elections)|line))|e(?:ssage|nu(?:Show|Hide)?|th(?:od)?|diaType)|a(?:nufacturer|tch|x(?:scroll|hscroll|imum|HPosition|Chars|VPosition)?)|b(?:substring|chr|ord|length))|b(?:ytes(?:Total|Loaded)|indFormat(?:Strings|Function)|o(?:ttom(?:Scroll)?|ld|rder(?:Color)?)|u(?:tton(?:Height|Width)|iltInItems|ffer(?:Time|Length)|llet)|e(?:foreApplyUpdates|gin(?:GradientFill|Fill))|lockIndent|a(?:ndwidth|ckground(?:Style|Color|Disabled)?)|roadcastMessage)|onHTTPStatus)\\\\b' },\n            { token: 'support.constant.actionscript.2',\n                regex: '\\\\b(?:__proto__|__resolve|_accProps|_alpha|_changed|_currentframe|_droptarget|_flash|_focusrect|_framesloaded|_global|_height|_highquality|_level|_listeners|_lockroot|_name|_parent|_quality|_root|_rotation|_soundbuftime|_target|_totalframes|_url|_visible|_width|_x|_xmouse|_xscale|_y|_ymouse|_yscale)\\\\b' },\n            { token: 'keyword.control.actionscript.2',\n                regex: '\\\\b(?:dynamic|extends|import|implements|interface|public|private|new|static|super|var|for|in|break|continue|while|do|return|if|else|case|switch)\\\\b' },\n            { token: 'storage.type.actionscript.2',\n                regex: '\\\\b(?:Boolean|Number|String|Void)\\\\b' },\n            { token: 'constant.language.actionscript.2',\n                regex: '\\\\b(?:null|undefined|true|false)\\\\b' },\n            { token: 'constant.numeric.actionscript.2',\n                regex: '\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b' },\n            { token: 'punctuation.definition.string.begin.actionscript.2',\n                regex: '\"',\n                push: [{ token: 'punctuation.definition.string.end.actionscript.2',\n                        regex: '\"',\n                        next: 'pop' },\n                    { token: 'constant.character.escape.actionscript.2',\n                        regex: '\\\\\\\\.' },\n                    { defaultToken: 'string.quoted.double.actionscript.2' }] },\n            { token: 'punctuation.definition.string.begin.actionscript.2',\n                regex: '\\'',\n                push: [{ token: 'punctuation.definition.string.end.actionscript.2',\n                        regex: '\\'',\n                        next: 'pop' },\n                    { token: 'constant.character.escape.actionscript.2',\n                        regex: '\\\\\\\\.' },\n                    { defaultToken: 'string.quoted.single.actionscript.2' }] },\n            { token: 'support.constant.actionscript.2',\n                regex: '\\\\b(?:BACKSPACE|CAPSLOCK|CONTROL|DELETEKEY|DOWN|END|ENTER|HOME|INSERT|LEFT|LN10|LN2|LOG10E|LOG2E|MAX_VALUE|MIN_VALUE|NEGATIVE_INFINITY|NaN|PGDN|PGUP|PI|POSITIVE_INFINITY|RIGHT|SPACE|SQRT1_2|SQRT2|UP)\\\\b' },\n            { token: 'punctuation.definition.comment.actionscript.2',\n                regex: '/\\\\*',\n                push: [{ token: 'punctuation.definition.comment.actionscript.2',\n                        regex: '\\\\*/',\n                        next: 'pop' },\n                    { defaultToken: 'comment.block.actionscript.2' }] },\n            { token: 'punctuation.definition.comment.actionscript.2',\n                regex: '//.*$',\n                push_: [{ token: 'comment.line.double-slash.actionscript.2',\n                        regex: '$',\n                        next: 'pop' },\n                    { defaultToken: 'comment.line.double-slash.actionscript.2' }] },\n            { token: 'keyword.operator.actionscript.2',\n                regex: '\\\\binstanceof\\\\b' },\n            { token: 'keyword.operator.symbolic.actionscript.2',\n                regex: '[-!%&*+=/?:]' },\n            { token: ['meta.preprocessor.actionscript.2',\n                    'punctuation.definition.preprocessor.actionscript.2',\n                    'meta.preprocessor.actionscript.2'],\n                regex: '^([ \\\\t]*)(#)([a-zA-Z]+)' },\n            { token: ['storage.type.function.actionscript.2',\n                    'meta.function.actionscript.2',\n                    'entity.name.function.actionscript.2',\n                    'meta.function.actionscript.2',\n                    'punctuation.definition.parameters.begin.actionscript.2'],\n                regex: '\\\\b(function)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()',\n                push: [{ token: 'punctuation.definition.parameters.end.actionscript.2',\n                        regex: '\\\\)',\n                        next: 'pop' },\n                    { token: 'variable.parameter.function.actionscript.2',\n                        regex: '[^,)$]+' },\n                    { defaultToken: 'meta.function.actionscript.2' }] },\n            { token: ['storage.type.class.actionscript.2',\n                    'meta.class.actionscript.2',\n                    'entity.name.type.class.actionscript.2',\n                    'meta.class.actionscript.2',\n                    'storage.modifier.extends.actionscript.2',\n                    'meta.class.actionscript.2',\n                    'entity.other.inherited-class.actionscript.2'],\n                regex: '\\\\b(class)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*)(?:(\\\\s+)(extends)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*))?' }] };\n    this.normalizeRules();\n};\nActionScriptHighlightRules.metaData = { fileTypes: ['as'],\n    keyEquivalent: '^~A',\n    name: 'ActionScript',\n    scopeName: 'source.actionscript.2' };\noop.inherits(ActionScriptHighlightRules, TextHighlightRules);\nexports.ActionScriptHighlightRules = ActionScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/actionscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/actionscript_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ActionScriptHighlightRules = require(\"./actionscript_highlight_rules\").ActionScriptHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = ActionScriptHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/actionscript\";\n    this.snippetFileId = \"ace/snippets/actionscript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/actionscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-ada.js",
    "content": "ace.define(\"ace/mode/ada_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar AdaHighlightRules = function () {\n    var keywords = \"abort|else|new|return|abs|elsif|not|reverse|abstract|end|null|accept|entry|select|\" +\n        \"access|exception|of|separate|aliased|exit|or|some|all|others|subtype|and|for|out|synchronized|\" +\n        \"array|function|overriding|at|tagged|generic|package|task|begin|goto|pragma|terminate|\" +\n        \"body|private|then|if|procedure|type|case|in|protected|constant|interface|until|\" +\n        \"|is|raise|use|declare|range|delay|limited|record|when|delta|loop|rem|while|digits|renames|with|do|mod|requeue|xor\";\n    var builtinConstants = (\"true|false|null\");\n    var builtinFunctions = (\"count|min|max|avg|sum|rank|now|coalesce|main\");\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"--.*$\"\n            }, {\n                token: \"string\",\n                regex: '\".*?\"'\n            }, {\n                token: \"string\",\n                regex: \"'.'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }]\n    };\n};\noop.inherits(AdaHighlightRules, TextHighlightRules);\nexports.AdaHighlightRules = AdaHighlightRules;\n\n});\n\nace.define(\"ace/mode/ada\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ada_highlight_rules\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AdaHighlightRules = require(\"./ada_highlight_rules\").AdaHighlightRules;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n    this.HighlightRules = AdaHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*(begin|loop|then|is|do)\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        var complete_line = line + input;\n        if (complete_line.match(/^\\s*(begin|end)$/)) {\n            return true;\n        }\n        return false;\n    };\n    this.autoOutdent = function (state, session, row) {\n        var line = session.getLine(row);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine).length;\n        var indent = this.$getIndent(line).length;\n        if (indent <= prevIndent) {\n            return;\n        }\n        session.outdentRows(new Range(row, 0, row + 2, 0));\n    };\n    this.$id = \"ace/mode/ada\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/ada\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-alda.js",
    "content": "ace.define(\"ace/mode/alda_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from ../../src/alda.JSON-tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar AldaHighlightRules = function () {\n    this.$rules = {\n        pitch: [{\n                token: \"variable.parameter.operator.pitch.alda\",\n                regex: /(?:[+\\-]+|\\=)/\n            }, {\n                token: \"\",\n                regex: \"\",\n                next: \"timing\"\n            }],\n        timing: [{\n                token: \"string.quoted.operator.timing.alda\",\n                regex: /\\d+(?:s|ms)?/\n            }, {\n                token: \"\",\n                regex: \"\",\n                next: \"start\"\n            }],\n        start: [{\n                token: [\n                    \"constant.language.instrument.alda\",\n                    \"constant.language.instrument.alda\",\n                    \"meta.part.call.alda\",\n                    \"storage.type.nickname.alda\",\n                    \"meta.part.call.alda\"\n                ],\n                regex: /^([a-zA-Z]{2}[\\w\\-+\\'()]*)((?:\\s*\\/\\s*[a-zA-Z]{2}[\\w\\-+\\'()]*)*)(?:(\\s*)(\\\"[a-zA-Z]{2}[\\w\\-+\\'()]*\\\"))?(\\s*:)/\n            }, {\n                token: [\n                    \"text\",\n                    \"entity.other.inherited-class.voice.alda\",\n                    \"text\"\n                ],\n                regex: /^(\\s*)(V\\d+)(:)/\n            }, {\n                token: \"comment.line.number-sign.alda\",\n                regex: /#.*$/\n            }, {\n                token: \"entity.name.function.pipe.measure.alda\",\n                regex: /\\|/\n            }, {\n                token: \"comment.block.inline.alda\",\n                regex: /\\(comment\\b/,\n                push: [{\n                        token: \"comment.block.inline.alda\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.block.inline.alda\"\n                    }]\n            }, {\n                token: \"entity.name.function.marker.alda\",\n                regex: /%[a-zA-Z]{2}[\\w\\-+\\'()]*/\n            }, {\n                token: \"entity.name.function.at-marker.alda\",\n                regex: /@[a-zA-Z]{2}[\\w\\-+\\'()]*/\n            }, {\n                token: \"keyword.operator.octave-change.alda\",\n                regex: /\\bo\\d+\\b/\n            }, {\n                token: \"keyword.operator.octave-shift.alda\",\n                regex: /[><]/\n            }, {\n                token: \"keyword.operator.repeat.alda\",\n                regex: /\\*\\s*\\d+/\n            }, {\n                token: \"string.quoted.operator.timing.alda\",\n                regex: /[.]|r\\d*(?:s|ms)?/\n            }, {\n                token: \"text\",\n                regex: /([cdefgab])/,\n                next: \"pitch\"\n            }, {\n                token: \"string.quoted.operator.timing.alda\",\n                regex: /~/,\n                next: \"timing\"\n            }, {\n                token: \"punctuation.section.embedded.cram.alda\",\n                regex: /\\}/,\n                next: \"timing\"\n            }, {\n                token: \"constant.numeric.subchord.alda\",\n                regex: /\\//\n            }, {\n                todo: {\n                    token: \"punctuation.section.embedded.cram.alda\",\n                    regex: /\\{/,\n                    push: [{\n                            token: \"punctuation.section.embedded.cram.alda\",\n                            regex: /\\}/,\n                            next: \"pop\"\n                        }, {\n                            include: \"$self\"\n                        }]\n                }\n            }, {\n                todo: {\n                    token: \"keyword.control.sequence.alda\",\n                    regex: /\\[/,\n                    push: [{\n                            token: \"keyword.control.sequence.alda\",\n                            regex: /\\]/,\n                            next: \"pop\"\n                        }, {\n                            include: \"$self\"\n                        }]\n                }\n            }, {\n                token: \"meta.inline.clojure.alda\",\n                regex: /\\(/,\n                push: [{\n                        token: \"meta.inline.clojure.alda\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"source.clojure\"\n                    }, {\n                        defaultToken: \"meta.inline.clojure.alda\"\n                    }]\n            }]\n    };\n    this.normalizeRules();\n};\nAldaHighlightRules.metaData = {\n    scopeName: \"source.alda\",\n    fileTypes: [\"alda\"],\n    name: \"Alda\"\n};\noop.inherits(AldaHighlightRules, TextHighlightRules);\nexports.AldaHighlightRules = AldaHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/alda\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/alda_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AldaHighlightRules = require(\"./alda_highlight_rules\").AldaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = AldaHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/alda\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/alda\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-apache_conf.js",
    "content": "ace.define(\"ace/mode/apache_conf_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from https://raw.github.com/colinta/ApacheConf.tmLanguage/master/ApacheConf.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ApacheConfHighlightRules = function () {\n    this.$rules = { start: [{ token: ['punctuation.definition.comment.apacheconf',\n                    'comment.line.hash.ini',\n                    'comment.line.hash.ini'],\n                regex: '^((?:\\\\s)*)(#)(.*$)' },\n            { token: ['punctuation.definition.tag.apacheconf',\n                    'entity.tag.apacheconf',\n                    'text',\n                    'string.value.apacheconf',\n                    'punctuation.definition.tag.apacheconf'],\n                regex: '(<)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(?:(\\\\s)(.+?))?(>)' },\n            { token: ['punctuation.definition.tag.apacheconf',\n                    'entity.tag.apacheconf',\n                    'punctuation.definition.tag.apacheconf'],\n                regex: '(</)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(>)' },\n            { token: ['keyword.alias.apacheconf', 'text',\n                    'string.regexp.apacheconf', 'text',\n                    'string.replacement.apacheconf', 'text'],\n                regex: '(Rewrite(?:Rule|Cond))(\\\\s+)(.+?)(\\\\s+)(.+?)($|\\\\s)' },\n            { token: ['keyword.alias.apacheconf', 'text',\n                    'entity.status.apacheconf', 'text',\n                    'string.regexp.apacheconf', 'text',\n                    'string.path.apacheconf', 'text'],\n                regex: '(RedirectMatch)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?' },\n            { token: ['keyword.alias.apacheconf', 'text',\n                    'entity.status.apacheconf', 'text',\n                    'string.path.apacheconf', 'text',\n                    'string.path.apacheconf', 'text'],\n                regex: '(Redirect)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?' },\n            { token: ['keyword.alias.apacheconf', 'text',\n                    'string.regexp.apacheconf', 'text',\n                    'string.path.apacheconf', 'text'],\n                regex: '(ScriptAliasMatch|AliasMatch)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)(\\\\s))?' },\n            { token: ['keyword.alias.apacheconf', 'text',\n                    'string.path.apacheconf', 'text',\n                    'string.path.apacheconf', 'text'],\n                regex: '(RedirectPermanent|RedirectTemp|ScriptAlias|Alias)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?' },\n            { token: 'keyword.core.apacheconf',\n                regex: '\\\\b(?:AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|ForceType|HostnameLookups|IdentityCheck|Include|KeepAlive|KeepAliveTimeout|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|LogLevel|MaxKeepAliveRequests|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|TimeOut|TraceEnable|UseCanonicalName)\\\\b' },\n            { token: 'keyword.mpm.apacheconf',\n                regex: '\\\\b(?:AcceptMutex|AssignUserID|BS2000Account|ChildPerUserID|CoreDumpDirectory|EnableExceptionHook|Group|Listen|ListenBacklog|LockFile|MaxClients|MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MinSpareServers|MinSpareThreads|NumServers|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User|Win32DisableAcceptEx)\\\\b' },\n            { token: 'keyword.access.apacheconf',\n                regex: '\\\\b(?:Allow|Deny|Order)\\\\b' },\n            { token: 'keyword.actions.apacheconf',\n                regex: '\\\\b(?:Action|Script)\\\\b' },\n            { token: 'keyword.alias.apacheconf',\n                regex: '\\\\b(?:Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)\\\\b' },\n            { token: 'keyword.auth.apacheconf',\n                regex: '\\\\b(?:AuthAuthoritative|AuthGroupFile|AuthUserFile)\\\\b' },\n            { token: 'keyword.auth_anon.apacheconf',\n                regex: '\\\\b(?:Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)\\\\b' },\n            { token: 'keyword.auth_dbm.apacheconf',\n                regex: '\\\\b(?:AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile)\\\\b' },\n            { token: 'keyword.auth_digest.apacheconf',\n                regex: '\\\\b(?:AuthDigestAlgorithm|AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize)\\\\b' },\n            { token: 'keyword.auth_ldap.apacheconf',\n                regex: '\\\\b(?:AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl)\\\\b' },\n            { token: 'keyword.autoindex.apacheconf',\n                regex: '\\\\b(?:AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexIgnore|IndexOptions|IndexOrderDefault|ReadmeName)\\\\b' },\n            { token: 'keyword.cache.apacheconf',\n                regex: '\\\\b(?:CacheDefaultExpire|CacheDisable|CacheEnable|CacheForceCompletion|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire)\\\\b' },\n            { token: 'keyword.cern_meta.apacheconf',\n                regex: '\\\\b(?:MetaDir|MetaFiles|MetaSuffix)\\\\b' },\n            { token: 'keyword.cgi.apacheconf',\n                regex: '\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength)\\\\b' },\n            { token: 'keyword.cgid.apacheconf',\n                regex: '\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock)\\\\b' },\n            { token: 'keyword.charset_lite.apacheconf',\n                regex: '\\\\b(?:CharsetDefault|CharsetOptions|CharsetSourceEnc)\\\\b' },\n            { token: 'keyword.dav.apacheconf',\n                regex: '\\\\b(?:Dav|DavDepthInfinity|DavMinTimeout|DavLockDB)\\\\b' },\n            { token: 'keyword.deflate.apacheconf',\n                regex: '\\\\b(?:DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)\\\\b' },\n            { token: 'keyword.dir.apacheconf',\n                regex: '\\\\b(?:DirectoryIndex|DirectorySlash)\\\\b' },\n            { token: 'keyword.disk_cache.apacheconf',\n                regex: '\\\\b(?:CacheDirLength|CacheDirLevels|CacheExpiryCheck|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheMaxFileSize|CacheMinFileSize|CacheRoot|CacheSize|CacheTimeMargin)\\\\b' },\n            { token: 'keyword.dumpio.apacheconf',\n                regex: '\\\\b(?:DumpIOInput|DumpIOOutput)\\\\b' },\n            { token: 'keyword.env.apacheconf',\n                regex: '\\\\b(?:PassEnv|SetEnv|UnsetEnv)\\\\b' },\n            { token: 'keyword.expires.apacheconf',\n                regex: '\\\\b(?:ExpiresActive|ExpiresByType|ExpiresDefault)\\\\b' },\n            { token: 'keyword.ext_filter.apacheconf',\n                regex: '\\\\b(?:ExtFilterDefine|ExtFilterOptions)\\\\b' },\n            { token: 'keyword.file_cache.apacheconf',\n                regex: '\\\\b(?:CacheFile|MMapFile)\\\\b' },\n            { token: 'keyword.headers.apacheconf',\n                regex: '\\\\b(?:Header|RequestHeader)\\\\b' },\n            { token: 'keyword.imap.apacheconf',\n                regex: '\\\\b(?:ImapBase|ImapDefault|ImapMenu)\\\\b' },\n            { token: 'keyword.include.apacheconf',\n                regex: '\\\\b(?:SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)\\\\b' },\n            { token: 'keyword.isapi.apacheconf',\n                regex: '\\\\b(?:ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)\\\\b' },\n            { token: 'keyword.ldap.apacheconf',\n                regex: '\\\\b(?:LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedCA|LDAPTrustedCAType)\\\\b' },\n            { token: 'keyword.log.apacheconf',\n                regex: '\\\\b(?:BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog|ForensicLog)\\\\b' },\n            { token: 'keyword.mem_cache.apacheconf',\n                regex: '\\\\b(?:MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)\\\\b' },\n            { token: 'keyword.mime.apacheconf',\n                regex: '\\\\b(?:AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)\\\\b' },\n            { token: 'keyword.misc.apacheconf',\n                regex: '\\\\b(?:ProtocolEcho|Example|AddModuleInfo|MimeMagicFile|CheckSpelling|ExtendedStatus|SuexecUserGroup|UserDir)\\\\b' },\n            { token: 'keyword.negotiation.apacheconf',\n                regex: '\\\\b(?:CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)\\\\b' },\n            { token: 'keyword.nw_ssl.apacheconf',\n                regex: '\\\\b(?:NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)\\\\b' },\n            { token: 'keyword.proxy.apacheconf',\n                regex: '\\\\b(?:AllowCONNECT|NoProxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassReverse|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia)\\\\b' },\n            { token: 'keyword.rewrite.apacheconf',\n                regex: '\\\\b(?:RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)\\\\b' },\n            { token: 'keyword.setenvif.apacheconf',\n                regex: '\\\\b(?:BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)\\\\b' },\n            { token: 'keyword.so.apacheconf',\n                regex: '\\\\b(?:LoadFile|LoadModule)\\\\b' },\n            { token: 'keyword.ssl.apacheconf',\n                regex: '\\\\b(?:SSLCACertificateFile|SSLCACertificatePath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth)\\\\b' },\n            { token: 'keyword.usertrack.apacheconf',\n                regex: '\\\\b(?:CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)\\\\b' },\n            { token: 'keyword.vhost_alias.apacheconf',\n                regex: '\\\\b(?:VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)\\\\b' },\n            { token: ['keyword.php.apacheconf',\n                    'text',\n                    'entity.property.apacheconf',\n                    'text',\n                    'string.value.apacheconf',\n                    'text'],\n                regex: '\\\\b(php_value|php_flag)\\\\b(?:(\\\\s+)(.+?)(?:(\\\\s+)(.+?))?)?(\\\\s)' },\n            { token: ['punctuation.variable.apacheconf',\n                    'variable.env.apacheconf',\n                    'variable.misc.apacheconf',\n                    'punctuation.variable.apacheconf'],\n                regex: '(%\\\\{)(?:(HTTP_USER_AGENT|HTTP_REFERER|HTTP_COOKIE|HTTP_FORWARDED|HTTP_HOST|HTTP_PROXY_CONNECTION|HTTP_ACCEPT|REMOTE_ADDR|REMOTE_HOST|REMOTE_PORT|REMOTE_USER|REMOTE_IDENT|REQUEST_METHOD|SCRIPT_FILENAME|PATH_INFO|QUERY_STRING|AUTH_TYPE|DOCUMENT_ROOT|SERVER_ADMIN|SERVER_NAME|SERVER_ADDR|SERVER_PORT|SERVER_PROTOCOL|SERVER_SOFTWARE|TIME_YEAR|TIME_MON|TIME_DAY|TIME_HOUR|TIME_MIN|TIME_SEC|TIME_WDAY|TIME|API_VERSION|THE_REQUEST|REQUEST_URI|REQUEST_FILENAME|IS_SUBREQ|HTTPS)|(.*?))(\\\\})' },\n            { token: ['entity.mime-type.apacheconf', 'text'],\n                regex: '\\\\b((?:text|image|application|video|audio)/.+?)(\\\\s)' },\n            { token: 'entity.helper.apacheconf',\n                regex: '\\\\b(?:from|unset|set|on|off)\\\\b',\n                caseInsensitive: true },\n            { token: 'constant.integer.apacheconf', regex: '\\\\b\\\\d+\\\\b' },\n            { token: ['text',\n                    'punctuation.definition.flag.apacheconf',\n                    'string.flag.apacheconf',\n                    'punctuation.definition.flag.apacheconf',\n                    'text'],\n                regex: '(\\\\s)(\\\\[)(.*?)(\\\\])(\\\\s)' }] };\n    this.normalizeRules();\n};\nApacheConfHighlightRules.metaData = { fileTypes: ['conf',\n        'CONF',\n        'htaccess',\n        'HTACCESS',\n        'htgroups',\n        'HTGROUPS',\n        'htpasswd',\n        'HTPASSWD',\n        '.htaccess',\n        '.HTACCESS',\n        '.htgroups',\n        '.HTGROUPS',\n        '.htpasswd',\n        '.HTPASSWD'],\n    name: 'Apache Conf',\n    scopeName: 'source.apacheconf' };\noop.inherits(ApacheConfHighlightRules, TextHighlightRules);\nexports.ApacheConfHighlightRules = ApacheConfHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/apache_conf\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/apache_conf_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ApacheConfHighlightRules = require(\"./apache_conf_highlight_rules\").ApacheConfHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = ApacheConfHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/apache_conf\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/apache_conf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-apex.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/apex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"../mode/text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = require(\"../mode/doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar ApexHighlightRules = function () {\n    var mainKeywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"activate|any|autonomous|begin|bigdecimal|byte|cast|char|collect|const\"\n            + \"|end|exit|export|float|goto|group|having|hint|import|inner|into|join|loop|number|object|of|outer\"\n            + \"|parallel|pragma|retrieve|returning|search|short|stat|synchronized|then|this_month\"\n            + \"|transaction|type|when\",\n        \"keyword\": \"private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final\"\n            + \"|and|array|as|asc|break|bulk|by|catch|class|commit|continue|convertcurrency\"\n            + \"|delete|desc|do|else|enum|extends|false|final|finally|for|from|future|global\"\n            + \"|if|implements|in|insert|instanceof|interface|last_90_days|last_month\"\n            + \"|last_n_days|last_week|like|limit|list|map|merge|new|next_90_days|next_month|next_n_days\"\n            + \"|next_week|not|null|nulls|on|or|override|package|return\"\n            + \"|rollback|savepoint|select|set|sort|super|testmethod|this|this_week|throw|today\"\n            + \"|tolabel|tomorrow|trigger|true|try|undelete|update|upsert|using|virtual|webservice\"\n            + \"|where|while|yesterday|switch|case|default\",\n        \"storage.type\": \"def|boolean|byte|char|short|int|float|pblob|date|datetime|decimal|double|id|integer|long|string|time|void|blob|Object\",\n        \"constant.language\": \"true|false|null|after|before|count|excludes|first|includes|last|order|sharing|with\",\n        \"support.function\": \"system|apex|label|apexpages|userinfo|schema\"\n    }, \"identifier\", true);\n    function keywordMapper(value) {\n        if (value.slice(-3) == \"__c\")\n            return \"support.function\";\n        return mainKeywordMapper(value);\n    }\n    function string(start, options) {\n        return {\n            regex: start + (options.multiline ? \"\" : \"(?=.)\"),\n            token: \"string.start\",\n            next: [{\n                    regex: options.escape,\n                    token: \"character.escape\"\n                }, {\n                    regex: options.error,\n                    token: \"error.invalid\"\n                }, {\n                    regex: start + (options.multiline ? \"\" : \"|$\"),\n                    token: \"string.end\",\n                    next: options.next || \"start\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n        };\n    }\n    function comments() {\n        return [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\/(?=.)\",\n                next: [\n                    DocCommentHighlightRules.getTagRule(),\n                    { token: \"comment\", regex: \"$|^\", next: \"start\" },\n                    { defaultToken: \"comment\", caseInsensitive: true }\n                ]\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: /\\/\\*/,\n                next: [\n                    DocCommentHighlightRules.getTagRule(),\n                    { token: \"comment\", regex: \"\\\\*\\\\/\", next: \"start\" },\n                    { defaultToken: \"comment\", caseInsensitive: true }\n                ]\n            }\n        ];\n    }\n    this.$rules = {\n        start: [\n            string(\"'\", {\n                escape: /\\\\[nb'\"\\\\]/,\n                error: /\\\\./,\n                multiline: false\n            }),\n            comments(\"c\"),\n            {\n                type: \"decoration\",\n                token: [\n                    \"meta.package.apex\",\n                    \"keyword.other.package.apex\",\n                    \"meta.package.apex\",\n                    \"storage.modifier.package.apex\",\n                    \"meta.package.apex\",\n                    \"punctuation.terminator.apex\"\n                ],\n                regex: /^(\\s*)(package)\\b(?:(\\s*)([^ ;$]+)(\\s*)((?:;)?))?/\n            }, {\n                regex: /@[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                token: \"constant.language\"\n            },\n            {\n                regex: /[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                token: keywordMapper\n            },\n            {\n                regex: \"`#%\",\n                token: \"error.invalid\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /[+-]?\\d+(?:(?:\\.\\d*)?(?:[LlDdEe][+-]?\\d+)?)\\b|\\.\\d+[LlDdEe]/\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[]/,\n                next: \"maybe_soql\",\n                merge: false\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\",\n                merge: false\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/,\n                merge: false\n            }\n        ],\n        maybe_soql: [{\n                regex: /\\s+/,\n                token: \"text\"\n            }, {\n                regex: /(SELECT|FIND)\\b/,\n                token: \"keyword\",\n                caseInsensitive: true,\n                next: \"soql\"\n            }, {\n                regex: \"\",\n                token: \"none\",\n                next: \"start\"\n            }],\n        soql: [{\n                regex: \"(:?ASC|BY|CATEGORY|CUBE|DATA|DESC|END|FIND|FIRST|FOR|FROM|GROUP|HAVING|IN|LAST\"\n                    + \"|LIMIT|NETWORK|NULLS|OFFSET|ORDER|REFERENCE|RETURNING|ROLLUP|SCOPE|SELECT\"\n                    + \"|SNIPPET|TRACKING|TYPEOF|UPDATE|USING|VIEW|VIEWSTAT|WHERE|WITH|AND|OR)\\\\b\",\n                token: \"keyword\",\n                caseInsensitive: true\n            }, {\n                regex: \"(:?target_length|toLabel|convertCurrency|count|Contact|Account|User|FIELDS)\\\\b\",\n                token: \"support.function\",\n                caseInsensitive: true\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\]]/,\n                next: \"start\",\n                merge: false\n            },\n            string(\"'\", {\n                escape: /\\\\[nb'\"\\\\]/,\n                error: /\\\\./,\n                multiline: false,\n                next: \"soql\"\n            }),\n            string('\"', {\n                escape: /\\\\[nb'\"\\\\]/,\n                error: /\\\\./,\n                multiline: false,\n                next: \"soql\"\n            }),\n            {\n                regex: /\\\\./,\n                token: \"character.escape\"\n            },\n            {\n                regex: /[\\?\\&\\|\\!\\{\\}\\[\\]\\(\\)\\^\\~\\*\\:\\\"\\'\\+\\-\\,\\.=\\\\\\/]/,\n                token: \"keyword.operator\"\n            }],\n        \"log-start\": [{\n                token: \"timestamp.invisible\",\n                regex: /^[\\d:.() ]+\\|/,\n                next: \"log-header\"\n            }, {\n                token: \"timestamp.invisible\",\n                regex: /^  (Number of|Maximum)[^:]*:/,\n                next: \"log-comment\"\n            }, {\n                token: \"invisible\",\n                regex: /^Execute Anonymous:/,\n                next: \"log-comment\"\n            }, {\n                defaultToken: \"text\"\n            }],\n        \"log-comment\": [{\n                token: \"log-comment\",\n                regex: /.*$/,\n                next: \"log-start\"\n            }],\n        \"log-header\": [{\n                token: \"timestamp.invisible\",\n                regex: /((USER_DEBUG|\\[\\d+\\]|DEBUG)\\|)+/\n            },\n            {\n                token: \"keyword\",\n                regex: \"(?:EXECUTION_FINISHED|EXECUTION_STARTED|CODE_UNIT_STARTED\"\n                    + \"|CUMULATIVE_LIMIT_USAGE|LIMIT_USAGE_FOR_NS\"\n                    + \"|CUMULATIVE_LIMIT_USAGE_END|CODE_UNIT_FINISHED)\"\n            }, {\n                regex: \"\",\n                next: \"log-start\"\n            }]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(ApexHighlightRules, TextHighlightRules);\nexports.ApexHighlightRules = ApexHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/apex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/apex_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module){/* caption: Apex; extensions: apex,cls,trigger,tgr */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar ApexHighlightRules = require(\"./apex_highlight_rules\").ApexHighlightRules;\nvar FoldMode = require(\"../mode/folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"../mode/behaviour/cstyle\").CstyleBehaviour;\nfunction ApexMode() {\n    TextMode.call(this);\n    this.HighlightRules = ApexHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = new CstyleBehaviour();\n}\noop.inherits(ApexMode, TextMode);\nApexMode.prototype.lineCommentStart = \"//\";\nApexMode.prototype.blockComment = {\n    start: \"/*\",\n    end: \"*/\"\n};\nexports.Mode = ApexMode;\n\n});                (function() {\n                    ace.require([\"ace/mode/apex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-applescript.js",
    "content": "ace.define(\"ace/mode/applescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar AppleScriptHighlightRules = function () {\n    var keywords = (\"about|above|after|against|and|around|as|at|back|before|beginning|\" +\n        \"behind|below|beneath|beside|between|but|by|considering|\" +\n        \"contain|contains|continue|copy|div|does|eighth|else|end|equal|\" +\n        \"equals|error|every|exit|fifth|first|for|fourth|from|front|\" +\n        \"get|given|global|if|ignoring|in|into|is|it|its|last|local|me|\" +\n        \"middle|mod|my|ninth|not|of|on|onto|or|over|prop|property|put|ref|\" +\n        \"reference|repeat|returning|script|second|set|seventh|since|\" +\n        \"sixth|some|tell|tenth|that|the|then|third|through|thru|\" +\n        \"timeout|times|to|transaction|try|until|where|while|whose|with|without\");\n    var builtinConstants = (\"AppleScript|false|linefeed|return|pi|quote|result|space|tab|true\");\n    var builtinFunctions = (\"activate|beep|count|delay|launch|log|offset|read|round|run|say|\" +\n        \"summarize|write\");\n    var builtinTypes = (\"alias|application|boolean|class|constant|date|file|integer|list|\" +\n        \"number|real|record|string|text|character|characters|contents|day|\" +\n        \"frontmost|id|item|length|month|name|paragraph|paragraphs|rest|\" +\n        \"reverse|running|time|version|weekday|word|words|year\");\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"constant.language\": builtinConstants,\n        \"support.type\": builtinTypes,\n        \"keyword\": keywords\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"--.*$\"\n            },\n            {\n                token: \"comment\",\n                regex: \"\\\\(\\\\*\",\n                next: \"comment\"\n            },\n            {\n                token: \"string\",\n                regex: '\".*?\"'\n            },\n            {\n                token: \"support.type\",\n                regex: '\\\\b(POSIX file|POSIX path|(date|time) string|quoted form)\\\\b'\n            },\n            {\n                token: \"support.function\",\n                regex: '\\\\b(clipboard info|the clipboard|info for|list (disks|folder)|' +\n                    'mount volume|path to|(close|open for) access|(get|set) eof|' +\n                    'current date|do shell script|get volume settings|random number|' +\n                    'set volume|system attribute|system info|time to GMT|' +\n                    '(load|run|store) script|scripting components|' +\n                    'ASCII (character|number)|localized string|' +\n                    'choose (application|color|file|file name|' +\n                    'folder|from list|remote application|URL)|' +\n                    'display (alert|dialog))\\\\b|^\\\\s*return\\\\b'\n            },\n            {\n                token: \"constant.language\",\n                regex: '\\\\b(text item delimiters|current application|missing value)\\\\b'\n            },\n            {\n                token: \"keyword\",\n                regex: '\\\\b(apart from|aside from|instead of|out of|greater than|' +\n                    \"isn't|(doesn't|does not) (equal|come before|come after|contain)|\" +\n                    '(greater|less) than( or equal)?|(starts?|ends|begins?) with|' +\n                    'contained by|comes (before|after)|a (ref|reference))\\\\b'\n            },\n            {\n                token: keywordMapper,\n                regex: \"[a-zA-Z][a-zA-Z0-9_]*\\\\b\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\)\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(AppleScriptHighlightRules, TextHighlightRules);\nexports.AppleScriptHighlightRules = AppleScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/applescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/applescript_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AppleScriptHighlightRules = require(\"./applescript_highlight_rules\").AppleScriptHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = AppleScriptHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = { start: \"(*\", end: \"*)\" };\n    this.$id = \"ace/mode/applescript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/applescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-aql.js",
    "content": "ace.define(\"ace/mode/aql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar AqlHighlightRules = function () {\n    var keywords = (\"for|return|filter|search|sort|limit|let|collect|asc|desc|in|into|insert|update|remove|replace|upsert|options|with|and|or|not|distinct|graph|shortest_path|outbound|inbound|any|all|none|at least|aggregate|like|k_shortest_paths|k_paths|all_shortest_paths|prune|window\");\n    var builtinConstants = (\"true|false\");\n    var builtinFunctions = (\"to_bool|to_number|to_string|to_array|to_list|is_null|is_bool|is_number|is_string|is_array|is_list|is_object|is_document|is_datestring|\" +\n        \"typename|json_stringify|json_parse|concat|concat_separator|char_length|lower|upper|substring|left|right|trim|reverse|contains|\" +\n        \"log|log2|log10|exp|exp2|sin|cos|tan|asin|acos|atan|atan2|radians|degrees|pi|regex_test|regex_replace|\" +\n        \"like|floor|ceil|round|abs|rand|sqrt|pow|length|count|min|max|average|avg|sum|product|median|variance_population|variance_sample|variance|percentile|\" +\n        \"bit_and|bit_or|bit_xor|bit_negate|bit_test|bit_popcount|bit_shift_left|bit_shift_right|bit_construct|bit_deconstruct|bit_to_string|bit_from_string|\" +\n        \"first|last|unique|outersection|interleave|in_range|jaccard|matches|merge|merge_recursive|has|attributes|keys|values|unset|unset_recursive|keep|keep_recursive|\" +\n        \"near|within|within_rectangle|is_in_polygon|distance|fulltext|stddev_sample|stddev_population|stddev|\" +\n        \"slice|nth|position|contains_array|translate|zip|call|apply|push|append|pop|shift|unshift|remove_value|remove_values|\" +\n        \"remove_nth|replace_nth|date_now|date_timestamp|date_iso8601|date_dayofweek|date_year|date_month|date_day|date_hour|\" +\n        \"date_minute|date_second|date_millisecond|date_dayofyear|date_isoweek|date_isoweekyear|date_leapyear|date_quarter|date_days_in_month|date_trunc|date_round|\" +\n        \"date_add|date_subtract|date_diff|date_compare|date_format|date_utctolocal|date_localtoutc|date_timezone|date_timezones|\" +\n        \"fail|passthru|v8|sleep|schema_get|schema_validate|shard_id|call_greenspun|version|noopt|noeval|not_null|\" +\n        \"first_list|first_document|parse_identifier|current_user|current_database|collection_count|pregel_result|\" +\n        \"collections|document|decode_rev|range|union|union_distinct|minus|intersection|flatten|is_same_collection|check_document|\" +\n        \"ltrim|rtrim|find_first|find_last|split|substitute|ipv4_to_number|ipv4_from_number|is_ipv4|md5|sha1|sha512|crc32|fnv64|hash|random_token|to_base64|\" +\n        \"to_hex|encode_uri_component|soundex|assert|warn|is_key|sorted|sorted_unique|count_distinct|count_unique|\" +\n        \"levenshtein_distance|levenshtein_match|regex_matches|regex_split|ngram_match|ngram_similarity|ngram_positional_similarity|uuid|\" +\n        \"tokens|exists|starts_with|phrase|min_match|bm25|tfidf|boost|analyzer|\" +\n        \"cosine_similarity|decay_exp|decay_gauss|decay_linear|l1_distance|l2_distance|minhash|minhash_count|minhash_error|minhash_match|\" +\n        \"geo_point|geo_multipoint|geo_polygon|geo_multipolygon|geo_linestring|geo_multilinestring|geo_contains|geo_intersects|\" +\n        \"geo_equals|geo_distance|geo_area|geo_in_range\");\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"//.*$\"\n            }, {\n                token: \"string\",\n                regex: '\".*?\"'\n            }, {\n                token: \"string\",\n                regex: \"'.*?'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(AqlHighlightRules, TextHighlightRules);\nexports.AqlHighlightRules = AqlHighlightRules;\n\n});\n\nace.define(\"ace/mode/aql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/aql_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AqlHighlightRules = require(\"./aql_highlight_rules\").AqlHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = AqlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/aql\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/aql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-asciidoc.js",
    "content": "ace.define(\"ace/mode/asciidoc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar AsciidocHighlightRules = function () {\n    var identifierRe = \"[a-zA-Z\\u00a1-\\uffff]+\\\\b\";\n    this.$rules = {\n        \"start\": [\n            { token: \"empty\", regex: /$/ },\n            { token: \"literal\", regex: /^\\.{4,}\\s*$/, next: \"listingBlock\" },\n            { token: \"literal\", regex: /^-{4,}\\s*$/, next: \"literalBlock\" },\n            { token: \"string\", regex: /^\\+{4,}\\s*$/, next: \"passthroughBlock\" },\n            { token: \"keyword\", regex: /^={4,}\\s*$/ },\n            { token: \"text\", regex: /^\\s*$/ },\n            { token: \"empty\", regex: \"\", next: \"dissallowDelimitedBlock\" }\n        ],\n        \"dissallowDelimitedBlock\": [\n            { include: \"paragraphEnd\" },\n            { token: \"comment\", regex: '^//.+$' },\n            { token: \"keyword\", regex: \"^(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION):\" },\n            { include: \"listStart\" },\n            { token: \"literal\", regex: /^\\s+.+$/, next: \"indentedBlock\" },\n            { token: \"empty\", regex: \"\", next: \"text\" }\n        ],\n        \"paragraphEnd\": [\n            { token: \"doc.comment\", regex: /^\\/{4,}\\s*$/, next: \"commentBlock\" },\n            { token: \"tableBlock\", regex: /^\\s*[|!]=+\\s*$/, next: \"tableBlock\" },\n            { token: \"keyword\", regex: /^(?:--|''')\\s*$/, next: \"start\" },\n            { token: \"option\", regex: /^\\[.*\\]\\s*$/, next: \"start\" },\n            { token: \"pageBreak\", regex: /^>{3,}$/, next: \"start\" },\n            { token: \"literal\", regex: /^\\.{4,}\\s*$/, next: \"listingBlock\" },\n            { token: \"titleUnderline\", regex: /^(?:={2,}|-{2,}|~{2,}|\\^{2,}|\\+{2,})\\s*$/, next: \"start\" },\n            { token: \"singleLineTitle\", regex: /^={1,5}\\s+\\S.*$/, next: \"start\" },\n            { token: \"otherBlock\", regex: /^(?:\\*{2,}|_{2,})\\s*$/, next: \"start\" },\n            { token: \"optionalTitle\", regex: /^\\.[^.\\s].+$/, next: \"start\" }\n        ],\n        \"listStart\": [\n            { token: \"keyword\", regex: /^\\s*(?:\\d+\\.|[a-zA-Z]\\.|[ixvmIXVM]+\\)|\\*{1,5}|-|\\.{1,5})\\s/, next: \"listText\" },\n            { token: \"meta.tag\", regex: /^.+(?::{2,4}|;;)(?: |$)/, next: \"listText\" },\n            { token: \"support.function.list.callout\", regex: /^(?:<\\d+>|\\d+>|>) /, next: \"text\" },\n            { token: \"keyword\", regex: /^\\+\\s*$/, next: \"start\" }\n        ],\n        \"text\": [\n            { token: [\"link\", \"variable.language\"], regex: /((?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+)(\\[.*?\\])/ },\n            { token: \"link\", regex: /(?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+/ },\n            { token: \"link\", regex: /\\b[\\w\\.\\/\\-]+@[\\w\\.\\/\\-]+\\b/ },\n            { include: \"macros\" },\n            { include: \"paragraphEnd\" },\n            { token: \"literal\", regex: /\\+{3,}/, next: \"smallPassthrough\" },\n            { token: \"escape\", regex: /\\((?:C|TM|R)\\)|\\.{3}|->|<-|=>|<=|&#(?:\\d+|x[a-fA-F\\d]+);|(?: |^)--(?=\\s+\\S)/ },\n            { token: \"escape\", regex: /\\\\[_*'`+#]|\\\\{2}[_*'`+#]{2}/ },\n            { token: \"keyword\", regex: /\\s\\+$/ },\n            { token: \"text\", regex: identifierRe },\n            { token: [\"keyword\", \"string\", \"keyword\"],\n                regex: /(<<[\\w\\d\\-$]+,)(.*?)(>>|$)/ },\n            { token: \"keyword\", regex: /<<[\\w\\d\\-$]+,?|>>/ },\n            { token: \"constant.character\", regex: /\\({2,3}.*?\\){2,3}/ },\n            { token: \"keyword\", regex: /\\[\\[.+?\\]\\]/ },\n            { token: \"support\", regex: /^\\[{3}[\\w\\d =\\-]+\\]{3}/ },\n            { include: \"quotes\" },\n            { token: \"empty\", regex: /^\\s*$/, next: \"start\" }\n        ],\n        \"listText\": [\n            { include: \"listStart\" },\n            { include: \"text\" }\n        ],\n        \"indentedBlock\": [\n            { token: \"literal\", regex: /^[\\s\\w].+$/, next: \"indentedBlock\" },\n            { token: \"literal\", regex: \"\", next: \"start\" }\n        ],\n        \"listingBlock\": [\n            { token: \"literal\", regex: /^\\.{4,}\\s*$/, next: \"dissallowDelimitedBlock\" },\n            { token: \"constant.numeric\", regex: '<\\\\d+>' },\n            { token: \"literal\", regex: '[^<]+' },\n            { token: \"literal\", regex: '<' }\n        ],\n        \"literalBlock\": [\n            { token: \"literal\", regex: /^-{4,}\\s*$/, next: \"dissallowDelimitedBlock\" },\n            { token: \"constant.numeric\", regex: '<\\\\d+>' },\n            { token: \"literal\", regex: '[^<]+' },\n            { token: \"literal\", regex: '<' }\n        ],\n        \"passthroughBlock\": [\n            { token: \"literal\", regex: /^\\+{4,}\\s*$/, next: \"dissallowDelimitedBlock\" },\n            { token: \"literal\", regex: identifierRe + \"|\\\\d+\" },\n            { include: \"macros\" },\n            { token: \"literal\", regex: \".\" }\n        ],\n        \"smallPassthrough\": [\n            { token: \"literal\", regex: /[+]{3,}/, next: \"dissallowDelimitedBlock\" },\n            { token: \"literal\", regex: /^\\s*$/, next: \"dissallowDelimitedBlock\" },\n            { token: \"literal\", regex: identifierRe + \"|\\\\d+\" },\n            { include: \"macros\" }\n        ],\n        \"commentBlock\": [\n            { token: \"doc.comment\", regex: /^\\/{4,}\\s*$/, next: \"dissallowDelimitedBlock\" },\n            { token: \"doc.comment\", regex: '^.*$' }\n        ],\n        \"tableBlock\": [\n            { token: \"tableBlock\", regex: /^\\s*\\|={3,}\\s*$/, next: \"dissallowDelimitedBlock\" },\n            { token: \"tableBlock\", regex: /^\\s*!={3,}\\s*$/, next: \"innerTableBlock\" },\n            { token: \"tableBlock\", regex: /\\|/ },\n            { include: \"text\", noEscape: true }\n        ],\n        \"innerTableBlock\": [\n            { token: \"tableBlock\", regex: /^\\s*!={3,}\\s*$/, next: \"tableBlock\" },\n            { token: \"tableBlock\", regex: /^\\s*|={3,}\\s*$/, next: \"dissallowDelimitedBlock\" },\n            { token: \"tableBlock\", regex: /!/ }\n        ],\n        \"macros\": [\n            { token: \"macro\", regex: /{[\\w\\-$]+}/ },\n            { token: [\"text\", \"string\", \"text\", \"constant.character\", \"text\"], regex: /({)([\\w\\-$]+)(:)?(.+)?(})/ },\n            { token: [\"text\", \"markup.list.macro\", \"keyword\", \"string\"], regex: /(\\w+)(footnote(?:ref)?::?)([^\\s\\[]+)?(\\[.*?\\])?/ },\n            { token: [\"markup.list.macro\", \"keyword\", \"string\"], regex: /([a-zA-Z\\-][\\w\\.\\/\\-]*::?)([^\\s\\[]+)(\\[.*?\\])?/ },\n            { token: [\"markup.list.macro\", \"keyword\"], regex: /([a-zA-Z\\-][\\w\\.\\/\\-]+::?)(\\[.*?\\])/ },\n            { token: \"keyword\", regex: /^:.+?:(?= |$)/ }\n        ],\n        \"quotes\": [\n            { token: \"string.italic\", regex: /__[^_\\s].*?__/ },\n            { token: \"string.italic\", regex: quoteRule(\"_\") },\n            { token: \"keyword.bold\", regex: /\\*\\*[^*\\s].*?\\*\\*/ },\n            { token: \"keyword.bold\", regex: quoteRule(\"\\\\*\") },\n            { token: \"literal\", regex: quoteRule(\"\\\\+\") },\n            { token: \"literal\", regex: /\\+\\+[^+\\s].*?\\+\\+/ },\n            { token: \"literal\", regex: /\\$\\$.+?\\$\\$/ },\n            { token: \"literal\", regex: quoteRule(\"`\") },\n            { token: \"keyword\", regex: quoteRule(\"^\") },\n            { token: \"keyword\", regex: quoteRule(\"~\") },\n            { token: \"keyword\", regex: /##?/ },\n            { token: \"keyword\", regex: /(?:\\B|^)``|\\b''/ }\n        ]\n    };\n    function quoteRule(ch) {\n        var prefix = /\\w/.test(ch) ? \"\\\\b\" : \"(?:\\\\B|^)\";\n        return prefix + ch + \"[^\" + ch + \"].*?\" + ch + \"(?![\\\\w*])\";\n    }\n    var tokenMap = {\n        macro: \"constant.character\",\n        tableBlock: \"doc.comment\",\n        titleUnderline: \"markup.heading\",\n        singleLineTitle: \"markup.heading\",\n        pageBreak: \"string\",\n        option: \"string.regexp\",\n        otherBlock: \"markup.list\",\n        literal: \"support.function\",\n        optionalTitle: \"constant.numeric\",\n        escape: \"constant.language.escape\",\n        link: \"markup.underline.list\"\n    };\n    for (var state in this.$rules) {\n        var stateRules = this.$rules[state];\n        for (var i = stateRules.length; i--;) {\n            var rule = stateRules[i];\n            if (rule.include || typeof rule == \"string\") {\n                var args = [i, 1].concat(this.$rules[rule.include || rule]);\n                if (rule.noEscape) {\n                    args = args.filter(function (x) {\n                        return !x.next;\n                    });\n                }\n                stateRules.splice.apply(stateRules, args);\n            }\n            else if (rule.token in tokenMap) {\n                rule.token = tokenMap[rule.token];\n            }\n        }\n    }\n};\noop.inherits(AsciidocHighlightRules, TextHighlightRules);\nexports.AsciidocHighlightRules = AsciidocHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/asciidoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /^(?:\\|={10,}|[\\.\\/=\\-~^+]{4,}\\s*$|={1,5} )/;\n    this.singleLineHeadingRe = /^={1,5}(?=\\s+\\S)/;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (!this.foldingStartMarker.test(line))\n            return \"\";\n        if (line[0] == \"=\") {\n            if (this.singleLineHeadingRe.test(line))\n                return \"start\";\n            if (session.getLine(row - 1).length != session.getLine(row).length)\n                return \"\";\n            return \"start\";\n        }\n        if (session.bgTokenizer.getState(row) == \"dissallowDelimitedBlock\")\n            return \"end\";\n        return \"start\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (!line.match(this.foldingStartMarker))\n            return;\n        var token;\n        function getTokenType(row) {\n            token = session.getTokens(row)[0];\n            return token && token.type;\n        }\n        var levels = [\"=\", \"-\", \"~\", \"^\", \"+\"];\n        var heading = \"markup.heading\";\n        var singleLineHeadingRe = this.singleLineHeadingRe;\n        function getLevel() {\n            var match = token.value.match(singleLineHeadingRe);\n            if (match)\n                return match[0].length;\n            var level = levels.indexOf(token.value[0]) + 1;\n            if (level == 1) {\n                if (session.getLine(row - 1).length != session.getLine(row).length)\n                    return Infinity;\n            }\n            return level;\n        }\n        if (getTokenType(row) == heading) {\n            var startHeadingLevel = getLevel();\n            while (++row < maxRow) {\n                if (getTokenType(row) != heading)\n                    continue;\n                var level = getLevel();\n                if (level <= startHeadingLevel)\n                    break;\n            }\n            var isSingleLineHeading = token && token.value.match(this.singleLineHeadingRe);\n            endRow = isSingleLineHeading ? row - 1 : row - 2;\n            if (endRow > startRow) {\n                while (endRow > startRow && (!getTokenType(endRow) || token.value[0] == \"[\"))\n                    endRow--;\n            }\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        }\n        else {\n            var state = session.bgTokenizer.getState(row);\n            if (state == \"dissallowDelimitedBlock\") {\n                while (row-- > 0) {\n                    if (session.bgTokenizer.getState(row).lastIndexOf(\"Block\") == -1)\n                        break;\n                }\n                endRow = row + 1;\n                if (endRow < startRow) {\n                    var endColumn = session.getLine(row).length;\n                    return new Range(endRow, 5, startRow, startColumn - 5);\n                }\n            }\n            else {\n                while (++row < maxRow) {\n                    if (session.bgTokenizer.getState(row) == \"dissallowDelimitedBlock\")\n                        break;\n                }\n                endRow = row;\n                if (endRow > startRow) {\n                    var endColumn = session.getLine(row).length;\n                    return new Range(startRow, 5, endRow, endColumn - 5);\n                }\n            }\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/asciidoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/asciidoc_highlight_rules\",\"ace/mode/folding/asciidoc\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AsciidocHighlightRules = require(\"./asciidoc_highlight_rules\").AsciidocHighlightRules;\nvar AsciidocFoldMode = require(\"./folding/asciidoc\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = AsciidocHighlightRules;\n    this.foldingRules = new AsciidocFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.type = \"text\";\n    this.getNextLineIndent = function (state, line, tab) {\n        if (state == \"listblock\") {\n            var match = /^((?:.+)?)([-+*][ ]+)/.exec(line);\n            if (match) {\n                return new Array(match[1].length + 1).join(\" \") + match[2];\n            }\n            else {\n                return \"\";\n            }\n        }\n        else {\n            return this.$getIndent(line);\n        }\n    };\n    this.$id = \"ace/mode/asciidoc\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/asciidoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-asl.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/asl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ASLHighlightRules = function () {\n    var keywords = (\"Default|DefinitionBlock|Device|Method|Else|ElseIf|For|Function|If|Include|Method|Return|\" +\n        \"Scope|Switch|Case|While|Break|BreakPoint|Continue|NoOp|Wait|True|False|\" +\n        \"AccessAs|Acquire|Alias|BankField|Buffer|Concatenate|ConcatenateResTemplate|\" +\n        \"CondRefOf|Connection|CopyObject|CreateBitField|CreateByteField|CreateDWordField|\" +\n        \"CreateField|CreateQWordField|CreateWordField|DataTableRegion|Debug|\" +\n        \"DMA|DWordIO|DWordMemory|DWordSpace|EisaId|EISAID|EndDependentFn|Event|ExtendedIO|\" +\n        \"ExtendedMemory|ExtendedSpace|External|Fatal|Field|FindSetLeftBit|FindSetRightBit|\" +\n        \"FixedDMA|FixedIO|Fprintf|FromBCD|GpioInt|GpioIo|I2CSerialBusV2|IndexField|\" +\n        \"Interrupt|IO|IRQ|IRQNoFlags|Load|LoadTable|Match|Memory32|Memory32Fixed|\" +\n        \"Mid|Mutex|Name|Notify|Offset|ObjectType|OperationRegion|Package|PowerResource|Printf|\" +\n        \"QWordIO|QWordMemory|QWordSpace|RawDataBuffer|Register|Release|Reset|ResourceTemplate|\" +\n        \"Signal|SizeOf|Sleep|SPISerialBusV2|Stall|StartDependentFn|StartDependentFnNoPri|\" +\n        \"Store|ThermalZone|Timer|ToBCD|ToBuffer|ToDecimalString|ToInteger|ToPLD|ToString|\" +\n        \"ToUUID|UARTSerialBusV2|Unicode|Unload|VendorLong|VendorShort|WordBusNumber|WordIO|\" +\n        \"WordSpace\");\n    var keywordOperators = (\"Add|And|Decrement|Divide|Increment|Index|LAnd|LEqual|LGreater|LGreaterEqual|\" +\n        \"LLess|LLessEqual|LNot|LNotEqual|LOr|Mod|Multiply|NAnd|NOr|Not|Or|RefOf|Revision|\" +\n        \"ShiftLeft|ShiftRight|Subtract|XOr|DerefOf\");\n    var flags = (\"AttribQuick|AttribSendReceive|AttribByte|AttribBytes|AttribRawBytes|\" +\n        \"AttribRawProcessBytes|AttribWord|AttribBlock|AttribProcessCall|AttribBlockProcessCall|\" +\n        \"AnyAcc|ByteAcc|WordAcc|DWordAcc|QWordAcc|BufferAcc|\" +\n        \"AddressRangeMemory|AddressRangeReserved|AddressRangeNVS|AddressRangeACPI|\" +\n        \"RegionSpaceKeyword|FFixedHW|PCC|\" +\n        \"AddressingMode7Bit|AddressingMode10Bit|\" +\n        \"DataBitsFive|DataBitsSix|DataBitsSeven|DataBitsEight|DataBitsNine|\" +\n        \"BusMaster|NotBusMaster|\" +\n        \"ClockPhaseFirst|ClockPhaseSecond|ClockPolarityLow|ClockPolarityHigh|\" +\n        \"SubDecode|PosDecode|\" +\n        \"BigEndianing|LittleEndian|\" +\n        \"FlowControlNone|FlowControlXon|FlowControlHardware|\" +\n        \"Edge|Level|ActiveHigh|ActiveLow|ActiveBoth|Decode16|Decode10|\" +\n        \"IoRestrictionNone|IoRestrictionInputOnly|IoRestrictionOutputOnly|\" +\n        \"IoRestrictionNoneAndPreserve|Lock|NoLock|MTR|MEQ|MLE|MLT|MGE|MGT|\" +\n        \"MaxFixed|MaxNotFixed|Cacheable|WriteCombining|Prefetchable|NonCacheable|\" +\n        \"MinFixed|MinNotFixed|\" +\n        \"ParityTypeNone|ParityTypeSpace|ParityTypeMark|ParityTypeOdd|ParityTypeEven|\" +\n        \"PullDefault|PullUp|PullDown|PullNone|PolarityHigh|PolarityLow|\" +\n        \"ISAOnlyRanges|NonISAOnlyRanges|EntireRange|ReadWrite|ReadOnly|\" +\n        \"UserDefRegionSpace|SystemIO|SystemMemory|PCI_Config|EmbeddedControl|\" +\n        \"SMBus|SystemCMOS|PciBarTarget|IPMI|GeneralPurposeIO|GenericSerialBus|\" +\n        \"ResourceConsumer|ResourceProducer|Serialized|NotSerialized|\" +\n        \"Shared|Exclusive|SharedAndWake|ExclusiveAndWake|ControllerInitiated|DeviceInitiated|\" +\n        \"StopBitsZero|StopBitsOne|StopBitsOnePlusHalf|StopBitsTwo|\" +\n        \"Width8Bit|Width16Bit|Width32Bit|Width64Bit|Width128Bit|Width256Bit|\" +\n        \"SparseTranslation|DenseTranslation|TypeTranslation|TypeStatic|\" +\n        \"Preserve|WriteAsOnes|WriteAsZeros|Transfer8|Transfer16|Transfer8_16|\" +\n        \"ThreeWireMode|FourWireMode\");\n    var storageTypes = (\"UnknownObj|IntObj|StrObj|BuffObj|PkgObj|FieldUnitObj|DeviceObj|\" +\n        \"EventObj|MethodObj|MutexObj|OpRegionObj|PowerResObj|ProcessorObj|\" +\n        \"ThermalZoneObj|BuffFieldObj|DDBHandleObj\");\n    var builtinConstants = (\"__FILE__|__PATH__|__LINE__|__DATE__|__IASL__\");\n    var strNumbers = (\"One|Ones|Zero\");\n    var deprecated = (\"Memory24|Processor\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.numeric\": strNumbers,\n        \"keyword.operator\": keywordOperators,\n        \"constant.language\": builtinConstants,\n        \"storage.type\": storageTypes,\n        \"constant.library\": flags,\n        \"invalid.deprecated\": deprecated\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\\\[\",\n                next: \"ignoredfield\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\Local[0-7]|\\\\Arg[0-6]\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:define|elif|else|endif|error|if|ifdef|ifndef|include|includebuffer|line|pragma|undef|warning)\\\\b\",\n                next: \"directive\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"constant.character\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0[xX][0-9a-fA-F]+\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /[0-9]+\\b/\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /[!\\~\\*\\/%+-<>\\^|=&]/\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"ignoredfield\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\\\]\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\": [\n            {\n                token: \"constant.other.multiline\",\n                regex: /\\\\/\n            },\n            {\n                token: \"constant.other.multiline\",\n                regex: /.*\\\\/\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*<.+?>*s\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]*s',\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: /[^\\\\\\/]+/,\n                next: \"start\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\noop.inherits(ASLHighlightRules, TextHighlightRules);\nexports.ASLHighlightRules = ASLHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/asl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/asl_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ASLHighlightRules = require(\"./asl_highlight_rules\").ASLHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = ASLHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/asl\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/asl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-assembly_x86.js",
    "content": "ace.define(\"ace/mode/assembly_x86_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from Assembly x86.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar AssemblyX86HighlightRules = function () {\n    this.$rules = { start: [{ token: 'keyword.control.assembly',\n                regex: '\\\\b(?:aaa|aad|aam|aas|adc|add|addpd|addps|addsd|addss|addsubpd|addsubps|aesdec|aesdeclast|aesenc|aesenclast|aesimc|aeskeygenassist|and|andpd|andps|andnpd|andnps|arpl|blendpd|blendps|blendvpd|blendvps|bound|bsf|bsr|bswap|bt|btc|btr|bts|cbw|cwde|cdqe|clc|cld|cflush|clts|cmc|cmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|cmp|cmppd|cmpps|cmps|cnpsb|cmpsw|cmpsd|cmpsq|cmpss|cmpxchg|cmpxchg8b|cmpxchg16b|comisd|comiss|cpuid|crc32|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtpi2ps|cvtps2dq|cvtps2pd|cvtps2pi|cvtsd2si|cvtsd2ss|cvts2sd|cvtsi2ss|cvtss2sd|cvtss2si|cvttpd2dq|cvtpd2pi|cvttps2dq|cvttps2pi|cvttps2dq|cvttps2pi|cvttsd2si|cvttss2si|cwd|cdq|cqo|daa|das|dec|div|divpd|divps|divsd|divss|dppd|dpps|emms|enter|extractps|f2xm1|fabs|fadd|faddp|fiadd|fbld|fbstp|fchs|fclex|fnclex|fcmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|fcom|fcmop|fcompp|fcomi|fcomip|fucomi|fucomip|fcos|fdecstp|fdiv|fdivp|fidiv|fdivr|fdivrp|fidivr|ffree|ficom|ficomp|fild|fincstp|finit|fnint|fist|fistp|fisttp|fld|fld1|fldl2t|fldl2e|fldpi|fldlg2|fldln2|fldz|fldcw|fldenv|fmul|fmulp|fimul|fnop|fpatan|fprem|fprem1|fptan|frndint|frstor|fsave|fnsave|fscale|fsin|fsincos|fsqrt|fst|fstp|fstcw|fnstcw|fstenv|fnstenv|fsts|fnstsw|fsub|fsubp|fisub|fsubr|fsubrp|fisubr|ftst|fucom|fucomp|fucompp|fxam|fxch|fxrstor|fxsave|fxtract|fyl2x|fyl2xp1|haddpd|haddps|husbpd|hsubps|idiv|imul|in|inc|ins|insb|insw|insd|insertps|int|into|invd|invplg|invpcid|iret|iretd|iretq|lahf|lar|lddqu|ldmxcsr|lds|les|lfs|lgs|lss|lea|leave|lfence|lgdt|lidt|llgdt|lmsw|lock|lods|lodsb|lodsw|lodsd|lodsq|lsl|ltr|maskmovdqu|maskmovq|maxpd|maxps|maxsd|maxss|mfence|minpd|minps|minsd|minss|monitor|mov|movapd|movaps|movbe|movd|movq|movddup|movdqa|movdqu|movq2q|movhlps|movhpd|movhps|movlhps|movlpd|movlps|movmskpd|movmskps|movntdqa|movntdq|movnti|movntpd|movntps|movntq|movq|movq2dq|movs|movsb|movsw|movsd|movsq|movsd|movshdup|movsldup|movss|movsx|movsxd|movupd|movups|movzx|mpsadbw|mul|mulpd|mulps|mulsd|mulss|mwait|neg|not|or|orpd|orps|out|outs|outsb|outsw|outsd|pabsb|pabsw|pabsd|packsswb|packssdw|packusdw|packuswbpaddb|paddw|paddd|paddq|paddsb|paddsw|paddusb|paddusw|palignr|pand|pandn|pause|pavgb|pavgw|pblendvb|pblendw|pclmulqdq|pcmpeqb|pcmpeqw|pcmpeqd|pcmpeqq|pcmpestri|pcmpestrm|pcmptb|pcmptgw|pcmpgtd|pcmpgtq|pcmpistri|pcmpisrm|pextrb|pextrd|pextrq|pextrw|phaddw|phaddd|phaddsw|phinposuw|phsubw|phsubd|phsubsw|pinsrb|pinsrd|pinsrq|pinsrw|pmaddubsw|pmadddwd|pmaxsb|pmaxsd|pmaxsw|pmaxsw|pmaxub|pmaxud|pmaxuw|pminsb|pminsd|pminsw|pminub|pminud|pminuw|pmovmskb|pmovsx|pmovzx|pmuldq|pmulhrsw|pmulhuw|pmulhw|pmulld|pmullw|pmuludw|pop|popa|popad|popcnt|popf|popfd|popfq|por|prefetch|psadbw|pshufb|pshufd|pshufhw|pshuflw|pshufw|psignb|psignw|psignd|pslldq|psllw|pslld|psllq|psraw|psrad|psrldq|psrlw|psrld|psrlq|psubb|psubw|psubd|psubq|psubsb|psubsw|psubusb|psubusw|test|ptest|punpckhbw|punpckhwd|punpckhdq|punpckhddq|punpcklbw|punpcklwd|punpckldq|punpckldqd|push|pusha|pushad|pushf|pushfd|pxor|prcl|rcr|rol|ror|rcpps|rcpss|rdfsbase|rdgsbase|rdmsr|rdpmc|rdrand|rdtsc|rdtscp|rep|repe|repz|repne|repnz|roundpd|roundps|roundsd|roundss|rsm|rsqrps|rsqrtss|sahf|sal|sar|shl|shr|sbb|scas|scasb|scasw|scasd|set(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|sfence|sgdt|shld|shrd|shufpd|shufps|sidt|sldt|smsw|sqrtpd|sqrtps|sqrtsd|sqrtss|stc|std|stmxcsr|stos|stosb|stosw|stosd|stosq|str|sub|subpd|subps|subsd|subss|swapgs|syscall|sysenter|sysexit|sysret|teset|ucomisd|ucomiss|ud2|unpckhpd|unpckhps|unpcklpd|unpcklps|vbroadcast|vcvtph2ps|vcvtp2sph|verr|verw|vextractf128|vinsertf128|vmaskmov|vpermilpd|vpermilps|vperm2f128|vtestpd|vtestps|vzeroall|vzeroupper|wait|fwait|wbinvd|wrfsbase|wrgsbase|wrmsr|xadd|xchg|xgetbv|xlat|xlatb|xor|xorpd|xorps|xrstor|xsave|xsaveopt|xsetbv|lzcnt|extrq|insertq|movntsd|movntss|vfmaddpd|vfmaddps|vfmaddsd|vfmaddss|vfmaddsubbpd|vfmaddsubps|vfmsubaddpd|vfmsubaddps|vfmsubpd|vfmsubps|vfmsubsd|vfnmaddpd|vfnmaddps|vfnmaddsd|vfnmaddss|vfnmsubpd|vfnmusbps|vfnmusbsd|vfnmusbss|cvt|xor|cli|sti|hlt|nop|lock|wait|enter|leave|ret|loop(?:n?e|n?z)?|call|j(?:mp|n?e|ge?|ae?|le?|be?|n?o|n?z))\\\\b',\n                caseInsensitive: true },\n            { token: 'variable.parameter.register.assembly',\n                regex: '\\\\b(?:CS|DS|ES|FS|GS|SS|RAX|EAX|RBX|EBX|RCX|ECX|RDX|EDX|RCX|RIP|EIP|IP|RSP|ESP|SP|RSI|ESI|SI|RDI|EDI|DI|RFLAGS|EFLAGS|FLAGS|R8-15|(?:Y|X)MM(?:[0-9]|10|11|12|13|14|15)|(?:A|B|C|D)(?:X|H|L)|CR(?:[0-4]|DR(?:[0-7]|TR6|TR7|EFER)))\\\\b',\n                caseInsensitive: true },\n            { token: 'constant.character.decimal.assembly',\n                regex: '\\\\b[0-9]+\\\\b' },\n            { token: 'constant.character.hexadecimal.assembly',\n                regex: '\\\\b0x[A-F0-9]+\\\\b',\n                caseInsensitive: true },\n            { token: 'constant.character.hexadecimal.assembly',\n                regex: '\\\\b[A-F0-9]+h\\\\b',\n                caseInsensitive: true },\n            { token: 'string.assembly', regex: /'([^\\\\']|\\\\.)*'/ },\n            { token: 'string.assembly', regex: /\"([^\\\\\"]|\\\\.)*\"/ },\n            { token: 'support.function.directive.assembly',\n                regex: '^\\\\[',\n                push: [{ token: 'support.function.directive.assembly',\n                        regex: '\\\\]$',\n                        next: 'pop' },\n                    { defaultToken: 'support.function.directive.assembly' }] },\n            { token: ['support.function.directive.assembly',\n                    'support.function.directive.assembly',\n                    'entity.name.function.assembly'],\n                regex: '(^struc)( )([_a-zA-Z][_a-zA-Z0-9]*)' },\n            { token: 'support.function.directive.assembly',\n                regex: '^endstruc\\\\b' },\n            { token: ['support.function.directive.assembly',\n                    'entity.name.function.assembly',\n                    'support.function.directive.assembly',\n                    'constant.character.assembly'],\n                regex: '^(%macro )([_a-zA-Z][_a-zA-Z0-9]*)( )([0-9]+)' },\n            { token: 'support.function.directive.assembly',\n                regex: '^%endmacro' },\n            { token: ['text',\n                    'support.function.directive.assembly',\n                    'text',\n                    'entity.name.function.assembly'],\n                regex: '(\\\\s*)(%define|%xdefine|%idefine|%undef|%assign|%defstr|%strcat|%strlen|%substr|%00|%0|%rotate|%rep|%endrep|%include|\\\\$\\\\$|\\\\$|%unmacro|%if|%elif|%else|%endif|%(?:el)?ifdef|%(?:el)?ifmacro|%(?:el)?ifctx|%(?:el)?ifidn|%(?:el)?ifidni|%(?:el)?ifid|%(?:el)?ifnum|%(?:el)?ifstr|%(?:el)?iftoken|%(?:el)?ifempty|%(?:el)?ifenv|%pathsearch|%depend|%use|%push|%pop|%repl|%arg|%stacksize|%local|%error|%warning|%fatal|%line|%!|%comment|%endcomment|__NASM_VERSION_ID__|__NASM_VER__|__FILE__|__LINE__|__BITS__|__OUTPUT_FORMAT__|__DATE__|__TIME__|__DATE_NUM__|_TIME__NUM__|__UTC_DATE__|__UTC_TIME__|__UTC_DATE_NUM__|__UTC_TIME_NUM__|__POSIX_TIME__|__PASS__|ISTRUC|AT|IEND|BITS 16|BITS 32|BITS 64|USE16|USE32|__SECT__|ABSOLUTE|EXTERN|GLOBAL|COMMON|CPU|FLOAT)\\\\b( ?)((?:[_a-zA-Z][_a-zA-Z0-9]*)?)',\n                caseInsensitive: true },\n            { token: 'support.function.directive.assembly',\n                regex: '\\\\b(?:d[bwdqtoy]|res[bwdqto]|equ|times|align|alignb|sectalign|section|ptr|byte|word|dword|qword|incbin)\\\\b',\n                caseInsensitive: true },\n            { token: 'entity.name.function.assembly', regex: '^\\\\s*%%[\\\\w.]+?:$' },\n            { token: 'entity.name.function.assembly', regex: '^\\\\s*%\\\\$[\\\\w.]+?:$' },\n            { token: 'entity.name.function.assembly', regex: '^[\\\\w.]+?:' },\n            { token: 'entity.name.function.assembly', regex: '^[\\\\w.]+?\\\\b' },\n            { token: 'comment.assembly', regex: ';.*$' }]\n    };\n    this.normalizeRules();\n};\nAssemblyX86HighlightRules.metaData = { fileTypes: ['asm'],\n    name: 'Assembly x86',\n    scopeName: 'source.assembly' };\noop.inherits(AssemblyX86HighlightRules, TextHighlightRules);\nexports.AssemblyX86HighlightRules = AssemblyX86HighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/assembly_x86\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/assembly_x86_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AssemblyX86HighlightRules = require(\"./assembly_x86_highlight_rules\").AssemblyX86HighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = AssemblyX86HighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = [\";\"];\n    this.$id = \"ace/mode/assembly_x86\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/assembly_x86\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-autohotkey.js",
    "content": "ace.define(\"ace/mode/autohotkey_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from C:\\Users\\LED\\Desktop\\AutoHotKey.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar AutoHotKeyHighlightRules = function () {\n    var autoItKeywords = 'And|ByRef|Case|Const|ContinueCase|ContinueLoop|Default|Dim|Do|Else|ElseIf|EndFunc|EndIf|EndSelect|EndSwitch|EndWith|Enum|Exit|ExitLoop|False|For|Func|Global|If|In|Local|Next|Not|Or|ReDim|Return|Select|Step|Switch|Then|To|True|Until|WEnd|While|With|' +\n        'Abs|ACos|AdlibDisable|AdlibEnable|Asc|AscW|ASin|Assign|ATan|AutoItSetOption|AutoItWinGetTitle|AutoItWinSetTitle|Beep|Binary|BinaryLen|BinaryMid|BinaryToString|BitAND|BitNOT|BitOR|BitRotate|BitShift|BitXOR|BlockInput|Break|Call|CDTray|Ceiling|Chr|ChrW|ClipGet|ClipPut|ConsoleRead|ConsoleWrite|ConsoleWriteError|ControlClick|ControlCommand|ControlDisable|ControlEnable|ControlFocus|ControlGetFocus|ControlGetHandle|ControlGetPos|ControlGetText|ControlHide|ControlListView|ControlMove|ControlSend|ControlSetText|ControlShow|ControlTreeView|Cos|Dec|DirCopy|DirCreate|DirGetSize|DirMove|DirRemove|DllCall|DllCallbackFree|DllCallbackGetPtr|DllCallbackRegister|DllClose|DllOpen|DllStructCreate|DllStructGetData|DllStructGetPtr|DllStructGetSize|DllStructSetData|DriveGetDrive|DriveGetFileSystem|DriveGetLabel|DriveGetSerial|DriveGetType|DriveMapAdd|DriveMapDel|DriveMapGet|DriveSetLabel|DriveSpaceFree|DriveSpaceTotal|DriveStatus|EnvGet|EnvSet|EnvUpdate|Eval|Execute|Exp|FileChangeDir|FileClose|FileCopy|FileCreateNTFSLink|FileCreateShortcut|FileDelete|FileExists|FileFindFirstFile|FileFindNextFile|FileGetAttrib|FileGetLongName|FileGetShortcut|FileGetShortName|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileOpen|FileOpenDialog|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileSaveDialog|FileSelectFolder|FileSetAttrib|FileSetTime|FileWrite|FileWriteLine|Floor|FtpSetProxy|GUICreate|GUICtrlCreateAvi|GUICtrlCreateButton|GUICtrlCreateCheckbox|GUICtrlCreateCombo|GUICtrlCreateContextMenu|GUICtrlCreateDate|GUICtrlCreateDummy|GUICtrlCreateEdit|GUICtrlCreateGraphic|GUICtrlCreateGroup|GUICtrlCreateIcon|GUICtrlCreateInput|GUICtrlCreateLabel|GUICtrlCreateList|GUICtrlCreateListView|GUICtrlCreateListViewItem|GUICtrlCreateMenu|GUICtrlCreateMenuItem|GUICtrlCreateMonthCal|GUICtrlCreateObj|GUICtrlCreatePic|GUICtrlCreateProgress|GUICtrlCreateRadio|GUICtrlCreateSlider|GUICtrlCreateTab|GUICtrlCreateTabItem|GUICtrlCreateTreeView|GUICtrlCreateTreeViewItem|GUICtrlCreateUpdown|GUICtrlDelete|GUICtrlGetHandle|GUICtrlGetState|GUICtrlRead|GUICtrlRecvMsg|GUICtrlRegisterListViewSort|GUICtrlSendMsg|GUICtrlSendToDummy|GUICtrlSetBkColor|GUICtrlSetColor|GUICtrlSetCursor|GUICtrlSetData|GUICtrlSetFont|GUICtrlSetDefColor|GUICtrlSetDefBkColor|GUICtrlSetGraphic|GUICtrlSetImage|GUICtrlSetLimit|GUICtrlSetOnEvent|GUICtrlSetPos|GUICtrlSetResizing|GUICtrlSetState|GUICtrlSetStyle|GUICtrlSetTip|GUIDelete|GUIGetCursorInfo|GUIGetMsg|GUIGetStyle|GUIRegisterMsg|GUISetAccelerators()|GUISetBkColor|GUISetCoord|GUISetCursor|GUISetFont|GUISetHelp|GUISetIcon|GUISetOnEvent|GUISetState|GUISetStyle|GUIStartGroup|GUISwitch|Hex|HotKeySet|HttpSetProxy|HWnd|InetGet|InetGetSize|IniDelete|IniRead|IniReadSection|IniReadSectionNames|IniRenameSection|IniWrite|IniWriteSection|InputBox|Int|IsAdmin|IsArray|IsBinary|IsBool|IsDeclared|IsDllStruct|IsFloat|IsHWnd|IsInt|IsKeyword|IsNumber|IsObj|IsPtr|IsString|Log|MemGetStats|Mod|MouseClick|MouseClickDrag|MouseDown|MouseGetCursor|MouseGetPos|MouseMove|MouseUp|MouseWheel|MsgBox|Number|ObjCreate|ObjEvent|ObjGet|ObjName|Opt|Ping|PixelChecksum|PixelGetColor|PixelSearch|PluginClose|PluginOpen|ProcessClose|ProcessExists|ProcessGetStats|ProcessList|ProcessSetPriority|ProcessWait|ProcessWaitClose|ProgressOff|ProgressOn|ProgressSet|Ptr|Random|RegDelete|RegEnumKey|RegEnumVal|RegRead|RegWrite|Round|Run|RunAs|RunAsWait|RunWait|Send|SendKeepActive|SetError|SetExtended|ShellExecute|ShellExecuteWait|Shutdown|Sin|Sleep|SoundPlay|SoundSetWaveVolume|SplashImageOn|SplashOff|SplashTextOn|Sqrt|SRandom|StatusbarGetText|StderrRead|StdinWrite|StdioClose|StdoutRead|String|StringAddCR|StringCompare|StringFormat|StringInStr|StringIsAlNum|StringIsAlpha|StringIsASCII|StringIsDigit|StringIsFloat|StringIsInt|StringIsLower|StringIsSpace|StringIsUpper|StringIsXDigit|StringLeft|StringLen|StringLower|StringMid|StringRegExp|StringRegExpReplace|StringReplace|StringRight|StringSplit|StringStripCR|StringStripWS|StringToBinary|StringTrimLeft|StringTrimRight|StringUpper|Tan|TCPAccept|TCPCloseSocket|TCPConnect|TCPListen|TCPNameToIP|TCPRecv|TCPSend|TCPShutdown|TCPStartup|TimerDiff|TimerInit|ToolTip|TrayCreateItem|TrayCreateMenu|TrayGetMsg|TrayItemDelete|TrayItemGetHandle|TrayItemGetState|TrayItemGetText|TrayItemSetOnEvent|TrayItemSetState|TrayItemSetText|TraySetClick|TraySetIcon|TraySetOnEvent|TraySetPauseIcon|TraySetState|TraySetToolTip|TrayTip|UBound|UDPBind|UDPCloseSocket|UDPOpen|UDPRecv|UDPSend|UDPShutdown|UDPStartup|VarGetType|WinActivate|WinActive|WinClose|WinExists|WinFlash|WinGetCaretPos|WinGetClassList|WinGetClientSize|WinGetHandle|WinGetPos|WinGetProcess|WinGetState|WinGetText|WinGetTitle|WinKill|WinList|WinMenuSelectItem|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinSetOnTop|WinSetState|WinSetTitle|WinSetTrans|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive|' +\n        'ArrayAdd|ArrayBinarySearch|ArrayConcatenate|ArrayDelete|ArrayDisplay|ArrayFindAll|ArrayInsert|ArrayMax|ArrayMaxIndex|ArrayMin|ArrayMinIndex|ArrayPop|ArrayPush|ArrayReverse|ArraySearch|ArraySort|ArraySwap|ArrayToClip|ArrayToString|ArrayTrim|ChooseColor|ChooseFont|ClipBoard_ChangeChain|ClipBoard_Close|ClipBoard_CountFormats|ClipBoard_Empty|ClipBoard_EnumFormats|ClipBoard_FormatStr|ClipBoard_GetData|ClipBoard_GetDataEx|ClipBoard_GetFormatName|ClipBoard_GetOpenWindow|ClipBoard_GetOwner|ClipBoard_GetPriorityFormat|ClipBoard_GetSequenceNumber|ClipBoard_GetViewer|ClipBoard_IsFormatAvailable|ClipBoard_Open|ClipBoard_RegisterFormat|ClipBoard_SetData|ClipBoard_SetDataEx|ClipBoard_SetViewer|ClipPutFile|ColorConvertHSLtoRGB|ColorConvertRGBtoHSL|ColorGetBlue|ColorGetGreen|ColorGetRed|Date_Time_CompareFileTime|Date_Time_DOSDateTimeToArray|Date_Time_DOSDateTimeToFileTime|Date_Time_DOSDateTimeToStr|Date_Time_DOSDateToArray|Date_Time_DOSDateToStr|Date_Time_DOSTimeToArray|Date_Time_DOSTimeToStr|Date_Time_EncodeFileTime|Date_Time_EncodeSystemTime|Date_Time_FileTimeToArray|Date_Time_FileTimeToDOSDateTime|Date_Time_FileTimeToLocalFileTime|Date_Time_FileTimeToStr|Date_Time_FileTimeToSystemTime|Date_Time_GetFileTime|Date_Time_GetLocalTime|Date_Time_GetSystemTime|Date_Time_GetSystemTimeAdjustment|Date_Time_GetSystemTimeAsFileTime|Date_Time_GetSystemTimes|Date_Time_GetTickCount|Date_Time_GetTimeZoneInformation|Date_Time_LocalFileTimeToFileTime|Date_Time_SetFileTime|Date_Time_SetLocalTime|Date_Time_SetSystemTime|Date_Time_SetSystemTimeAdjustment|Date_Time_SetTimeZoneInformation|Date_Time_SystemTimeToArray|Date_Time_SystemTimeToDateStr|Date_Time_SystemTimeToDateTimeStr|Date_Time_SystemTimeToFileTime|Date_Time_SystemTimeToTimeStr|Date_Time_SystemTimeToTzSpecificLocalTime|Date_Time_TzSpecificLocalTimeToSystemTime|DateAdd|DateDayOfWeek|DateDaysInMonth|DateDiff|DateIsLeapYear|DateIsValid|DateTimeFormat|DateTimeSplit|DateToDayOfWeek|DateToDayOfWeekISO|DateToDayValue|DateToMonth|DayValueToDate|DebugBugReportEnv|DebugOut|DebugSetup|Degree|EventLog__Backup|EventLog__Clear|EventLog__Close|EventLog__Count|EventLog__DeregisterSource|EventLog__Full|EventLog__Notify|EventLog__Oldest|EventLog__Open|EventLog__OpenBackup|EventLog__Read|EventLog__RegisterSource|EventLog__Report|FileCountLines|FileCreate|FileListToArray|FilePrint|FileReadToArray|FileWriteFromArray|FileWriteLog|FileWriteToLine|GDIPlus_ArrowCapCreate|GDIPlus_ArrowCapDispose|GDIPlus_ArrowCapGetFillState|GDIPlus_ArrowCapGetHeight|GDIPlus_ArrowCapGetMiddleInset|GDIPlus_ArrowCapGetWidth|GDIPlus_ArrowCapSetFillState|GDIPlus_ArrowCapSetHeight|GDIPlus_ArrowCapSetMiddleInset|GDIPlus_ArrowCapSetWidth|GDIPlus_BitmapCloneArea|GDIPlus_BitmapCreateFromFile|GDIPlus_BitmapCreateFromGraphics|GDIPlus_BitmapCreateFromHBITMAP|GDIPlus_BitmapCreateHBITMAPFromBitmap|GDIPlus_BitmapDispose|GDIPlus_BitmapLockBits|GDIPlus_BitmapUnlockBits|GDIPlus_BrushClone|GDIPlus_BrushCreateSolid|GDIPlus_BrushDispose|GDIPlus_BrushGetType|GDIPlus_CustomLineCapDispose|GDIPlus_Decoders|GDIPlus_DecodersGetCount|GDIPlus_DecodersGetSize|GDIPlus_Encoders|GDIPlus_EncodersGetCLSID|GDIPlus_EncodersGetCount|GDIPlus_EncodersGetParamList|GDIPlus_EncodersGetParamListSize|GDIPlus_EncodersGetSize|GDIPlus_FontCreate|GDIPlus_FontDispose|GDIPlus_FontFamilyCreate|GDIPlus_FontFamilyDispose|GDIPlus_GraphicsClear|GDIPlus_GraphicsCreateFromHDC|GDIPlus_GraphicsCreateFromHWND|GDIPlus_GraphicsDispose|GDIPlus_GraphicsDrawArc|GDIPlus_GraphicsDrawBezier|GDIPlus_GraphicsDrawClosedCurve|GDIPlus_GraphicsDrawCurve|GDIPlus_GraphicsDrawEllipse|GDIPlus_GraphicsDrawImage|GDIPlus_GraphicsDrawImageRect|GDIPlus_GraphicsDrawImageRectRect|GDIPlus_GraphicsDrawLine|GDIPlus_GraphicsDrawPie|GDIPlus_GraphicsDrawPolygon|GDIPlus_GraphicsDrawRect|GDIPlus_GraphicsDrawString|GDIPlus_GraphicsDrawStringEx|GDIPlus_GraphicsFillClosedCurve|GDIPlus_GraphicsFillEllipse|GDIPlus_GraphicsFillPie|GDIPlus_GraphicsFillRect|GDIPlus_GraphicsGetDC|GDIPlus_GraphicsGetSmoothingMode|GDIPlus_GraphicsMeasureString|GDIPlus_GraphicsReleaseDC|GDIPlus_GraphicsSetSmoothingMode|GDIPlus_GraphicsSetTransform|GDIPlus_ImageDispose|GDIPlus_ImageGetGraphicsContext|GDIPlus_ImageGetHeight|GDIPlus_ImageGetWidth|GDIPlus_ImageLoadFromFile|GDIPlus_ImageSaveToFile|GDIPlus_ImageSaveToFileEx|GDIPlus_MatrixCreate|GDIPlus_MatrixDispose|GDIPlus_MatrixRotate|GDIPlus_ParamAdd|GDIPlus_ParamInit|GDIPlus_PenCreate|GDIPlus_PenDispose|GDIPlus_PenGetAlignment|GDIPlus_PenGetColor|GDIPlus_PenGetCustomEndCap|GDIPlus_PenGetDashCap|GDIPlus_PenGetDashStyle|GDIPlus_PenGetEndCap|GDIPlus_PenGetWidth|GDIPlus_PenSetAlignment|GDIPlus_PenSetColor|GDIPlus_PenSetCustomEndCap|GDIPlus_PenSetDashCap|GDIPlus_PenSetDashStyle|GDIPlus_PenSetEndCap|GDIPlus_PenSetWidth|GDIPlus_RectFCreate|GDIPlus_Shutdown|GDIPlus_Startup|GDIPlus_StringFormatCreate|GDIPlus_StringFormatDispose|GetIP|GUICtrlAVI_Close|GUICtrlAVI_Create|GUICtrlAVI_Destroy|GUICtrlAVI_Open|GUICtrlAVI_OpenEx|GUICtrlAVI_Play|GUICtrlAVI_Seek|GUICtrlAVI_Show|GUICtrlAVI_Stop|GUICtrlButton_Click|GUICtrlButton_Create|GUICtrlButton_Destroy|GUICtrlButton_Enable|GUICtrlButton_GetCheck|GUICtrlButton_GetFocus|GUICtrlButton_GetIdealSize|GUICtrlButton_GetImage|GUICtrlButton_GetImageList|GUICtrlButton_GetState|GUICtrlButton_GetText|GUICtrlButton_GetTextMargin|GUICtrlButton_SetCheck|GUICtrlButton_SetFocus|GUICtrlButton_SetImage|GUICtrlButton_SetImageList|GUICtrlButton_SetSize|GUICtrlButton_SetState|GUICtrlButton_SetStyle|GUICtrlButton_SetText|GUICtrlButton_SetTextMargin|GUICtrlButton_Show|GUICtrlComboBox_AddDir|GUICtrlComboBox_AddString|GUICtrlComboBox_AutoComplete|GUICtrlComboBox_BeginUpdate|GUICtrlComboBox_Create|GUICtrlComboBox_DeleteString|GUICtrlComboBox_Destroy|GUICtrlComboBox_EndUpdate|GUICtrlComboBox_FindString|GUICtrlComboBox_FindStringExact|GUICtrlComboBox_GetComboBoxInfo|GUICtrlComboBox_GetCount|GUICtrlComboBox_GetCurSel|GUICtrlComboBox_GetDroppedControlRect|GUICtrlComboBox_GetDroppedControlRectEx|GUICtrlComboBox_GetDroppedState|GUICtrlComboBox_GetDroppedWidth|GUICtrlComboBox_GetEditSel|GUICtrlComboBox_GetEditText|GUICtrlComboBox_GetExtendedUI|GUICtrlComboBox_GetHorizontalExtent|GUICtrlComboBox_GetItemHeight|GUICtrlComboBox_GetLBText|GUICtrlComboBox_GetLBTextLen|GUICtrlComboBox_GetList|GUICtrlComboBox_GetListArray|GUICtrlComboBox_GetLocale|GUICtrlComboBox_GetLocaleCountry|GUICtrlComboBox_GetLocaleLang|GUICtrlComboBox_GetLocalePrimLang|GUICtrlComboBox_GetLocaleSubLang|GUICtrlComboBox_GetMinVisible|GUICtrlComboBox_GetTopIndex|GUICtrlComboBox_InitStorage|GUICtrlComboBox_InsertString|GUICtrlComboBox_LimitText|GUICtrlComboBox_ReplaceEditSel|GUICtrlComboBox_ResetContent|GUICtrlComboBox_SelectString|GUICtrlComboBox_SetCurSel|GUICtrlComboBox_SetDroppedWidth|GUICtrlComboBox_SetEditSel|GUICtrlComboBox_SetEditText|GUICtrlComboBox_SetExtendedUI|GUICtrlComboBox_SetHorizontalExtent|GUICtrlComboBox_SetItemHeight|GUICtrlComboBox_SetMinVisible|GUICtrlComboBox_SetTopIndex|GUICtrlComboBox_ShowDropDown|GUICtrlComboBoxEx_AddDir|GUICtrlComboBoxEx_AddString|GUICtrlComboBoxEx_BeginUpdate|GUICtrlComboBoxEx_Create|GUICtrlComboBoxEx_CreateSolidBitMap|GUICtrlComboBoxEx_DeleteString|GUICtrlComboBoxEx_Destroy|GUICtrlComboBoxEx_EndUpdate|GUICtrlComboBoxEx_FindStringExact|GUICtrlComboBoxEx_GetComboBoxInfo|GUICtrlComboBoxEx_GetComboControl|GUICtrlComboBoxEx_GetCount|GUICtrlComboBoxEx_GetCurSel|GUICtrlComboBoxEx_GetDroppedControlRect|GUICtrlComboBoxEx_GetDroppedControlRectEx|GUICtrlComboBoxEx_GetDroppedState|GUICtrlComboBoxEx_GetDroppedWidth|GUICtrlComboBoxEx_GetEditControl|GUICtrlComboBoxEx_GetEditSel|GUICtrlComboBoxEx_GetEditText|GUICtrlComboBoxEx_GetExtendedStyle|GUICtrlComboBoxEx_GetExtendedUI|GUICtrlComboBoxEx_GetImageList|GUICtrlComboBoxEx_GetItem|GUICtrlComboBoxEx_GetItemEx|GUICtrlComboBoxEx_GetItemHeight|GUICtrlComboBoxEx_GetItemImage|GUICtrlComboBoxEx_GetItemIndent|GUICtrlComboBoxEx_GetItemOverlayImage|GUICtrlComboBoxEx_GetItemParam|GUICtrlComboBoxEx_GetItemSelectedImage|GUICtrlComboBoxEx_GetItemText|GUICtrlComboBoxEx_GetItemTextLen|GUICtrlComboBoxEx_GetList|GUICtrlComboBoxEx_GetListArray|GUICtrlComboBoxEx_GetLocale|GUICtrlComboBoxEx_GetLocaleCountry|GUICtrlComboBoxEx_GetLocaleLang|GUICtrlComboBoxEx_GetLocalePrimLang|GUICtrlComboBoxEx_GetLocaleSubLang|GUICtrlComboBoxEx_GetMinVisible|GUICtrlComboBoxEx_GetTopIndex|GUICtrlComboBoxEx_InitStorage|GUICtrlComboBoxEx_InsertString|GUICtrlComboBoxEx_LimitText|GUICtrlComboBoxEx_ReplaceEditSel|GUICtrlComboBoxEx_ResetContent|GUICtrlComboBoxEx_SetCurSel|GUICtrlComboBoxEx_SetDroppedWidth|GUICtrlComboBoxEx_SetEditSel|GUICtrlComboBoxEx_SetEditText|GUICtrlComboBoxEx_SetExtendedStyle|GUICtrlComboBoxEx_SetExtendedUI|GUICtrlComboBoxEx_SetImageList|GUICtrlComboBoxEx_SetItem|GUICtrlComboBoxEx_SetItemEx|GUICtrlComboBoxEx_SetItemHeight|GUICtrlComboBoxEx_SetItemImage|GUICtrlComboBoxEx_SetItemIndent|GUICtrlComboBoxEx_SetItemOverlayImage|GUICtrlComboBoxEx_SetItemParam|GUICtrlComboBoxEx_SetItemSelectedImage|GUICtrlComboBoxEx_SetMinVisible|GUICtrlComboBoxEx_SetTopIndex|GUICtrlComboBoxEx_ShowDropDown|GUICtrlDTP_Create|GUICtrlDTP_Destroy|GUICtrlDTP_GetMCColor|GUICtrlDTP_GetMCFont|GUICtrlDTP_GetMonthCal|GUICtrlDTP_GetRange|GUICtrlDTP_GetRangeEx|GUICtrlDTP_GetSystemTime|GUICtrlDTP_GetSystemTimeEx|GUICtrlDTP_SetFormat|GUICtrlDTP_SetMCColor|GUICtrlDTP_SetMCFont|GUICtrlDTP_SetRange|GUICtrlDTP_SetRangeEx|GUICtrlDTP_SetSystemTime|GUICtrlDTP_SetSystemTimeEx|GUICtrlEdit_AppendText|GUICtrlEdit_BeginUpdate|GUICtrlEdit_CanUndo|GUICtrlEdit_CharFromPos|GUICtrlEdit_Create|GUICtrlEdit_Destroy|GUICtrlEdit_EmptyUndoBuffer|GUICtrlEdit_EndUpdate|GUICtrlEdit_Find|GUICtrlEdit_FmtLines|GUICtrlEdit_GetFirstVisibleLine|GUICtrlEdit_GetLimitText|GUICtrlEdit_GetLine|GUICtrlEdit_GetLineCount|GUICtrlEdit_GetMargins|GUICtrlEdit_GetModify|GUICtrlEdit_GetPasswordChar|GUICtrlEdit_GetRECT|GUICtrlEdit_GetRECTEx|GUICtrlEdit_GetSel|GUICtrlEdit_GetText|GUICtrlEdit_GetTextLen|GUICtrlEdit_HideBalloonTip|GUICtrlEdit_InsertText|GUICtrlEdit_LineFromChar|GUICtrlEdit_LineIndex|GUICtrlEdit_LineLength|GUICtrlEdit_LineScroll|GUICtrlEdit_PosFromChar|GUICtrlEdit_ReplaceSel|GUICtrlEdit_Scroll|GUICtrlEdit_SetLimitText|GUICtrlEdit_SetMargins|GUICtrlEdit_SetModify|GUICtrlEdit_SetPasswordChar|GUICtrlEdit_SetReadOnly|GUICtrlEdit_SetRECT|GUICtrlEdit_SetRECTEx|GUICtrlEdit_SetRECTNP|GUICtrlEdit_SetRectNPEx|GUICtrlEdit_SetSel|GUICtrlEdit_SetTabStops|GUICtrlEdit_SetText|GUICtrlEdit_ShowBalloonTip|GUICtrlEdit_Undo|GUICtrlHeader_AddItem|GUICtrlHeader_ClearFilter|GUICtrlHeader_ClearFilterAll|GUICtrlHeader_Create|GUICtrlHeader_CreateDragImage|GUICtrlHeader_DeleteItem|GUICtrlHeader_Destroy|GUICtrlHeader_EditFilter|GUICtrlHeader_GetBitmapMargin|GUICtrlHeader_GetImageList|GUICtrlHeader_GetItem|GUICtrlHeader_GetItemAlign|GUICtrlHeader_GetItemBitmap|GUICtrlHeader_GetItemCount|GUICtrlHeader_GetItemDisplay|GUICtrlHeader_GetItemFlags|GUICtrlHeader_GetItemFormat|GUICtrlHeader_GetItemImage|GUICtrlHeader_GetItemOrder|GUICtrlHeader_GetItemParam|GUICtrlHeader_GetItemRect|GUICtrlHeader_GetItemRectEx|GUICtrlHeader_GetItemText|GUICtrlHeader_GetItemWidth|GUICtrlHeader_GetOrderArray|GUICtrlHeader_GetUnicodeFormat|GUICtrlHeader_HitTest|GUICtrlHeader_InsertItem|GUICtrlHeader_Layout|GUICtrlHeader_OrderToIndex|GUICtrlHeader_SetBitmapMargin|GUICtrlHeader_SetFilterChangeTimeout|GUICtrlHeader_SetHotDivider|GUICtrlHeader_SetImageList|GUICtrlHeader_SetItem|GUICtrlHeader_SetItemAlign|GUICtrlHeader_SetItemBitmap|GUICtrlHeader_SetItemDisplay|GUICtrlHeader_SetItemFlags|GUICtrlHeader_SetItemFormat|GUICtrlHeader_SetItemImage|GUICtrlHeader_SetItemOrder|GUICtrlHeader_SetItemParam|GUICtrlHeader_SetItemText|GUICtrlHeader_SetItemWidth|GUICtrlHeader_SetOrderArray|GUICtrlHeader_SetUnicodeFormat|GUICtrlIpAddress_ClearAddress|GUICtrlIpAddress_Create|GUICtrlIpAddress_Destroy|GUICtrlIpAddress_Get|GUICtrlIpAddress_GetArray|GUICtrlIpAddress_GetEx|GUICtrlIpAddress_IsBlank|GUICtrlIpAddress_Set|GUICtrlIpAddress_SetArray|GUICtrlIpAddress_SetEx|GUICtrlIpAddress_SetFocus|GUICtrlIpAddress_SetFont|GUICtrlIpAddress_SetRange|GUICtrlIpAddress_ShowHide|GUICtrlListBox_AddFile|GUICtrlListBox_AddString|GUICtrlListBox_BeginUpdate|GUICtrlListBox_Create|GUICtrlListBox_DeleteString|GUICtrlListBox_Destroy|GUICtrlListBox_Dir|GUICtrlListBox_EndUpdate|GUICtrlListBox_FindInText|GUICtrlListBox_FindString|GUICtrlListBox_GetAnchorIndex|GUICtrlListBox_GetCaretIndex|GUICtrlListBox_GetCount|GUICtrlListBox_GetCurSel|GUICtrlListBox_GetHorizontalExtent|GUICtrlListBox_GetItemData|GUICtrlListBox_GetItemHeight|GUICtrlListBox_GetItemRect|GUICtrlListBox_GetItemRectEx|GUICtrlListBox_GetListBoxInfo|GUICtrlListBox_GetLocale|GUICtrlListBox_GetLocaleCountry|GUICtrlListBox_GetLocaleLang|GUICtrlListBox_GetLocalePrimLang|GUICtrlListBox_GetLocaleSubLang|GUICtrlListBox_GetSel|GUICtrlListBox_GetSelCount|GUICtrlListBox_GetSelItems|GUICtrlListBox_GetSelItemsText|GUICtrlListBox_GetText|GUICtrlListBox_GetTextLen|GUICtrlListBox_GetTopIndex|GUICtrlListBox_InitStorage|GUICtrlListBox_InsertString|GUICtrlListBox_ItemFromPoint|GUICtrlListBox_ReplaceString|GUICtrlListBox_ResetContent|GUICtrlListBox_SelectString|GUICtrlListBox_SelItemRange|GUICtrlListBox_SelItemRangeEx|GUICtrlListBox_SetAnchorIndex|GUICtrlListBox_SetCaretIndex|GUICtrlListBox_SetColumnWidth|GUICtrlListBox_SetCurSel|GUICtrlListBox_SetHorizontalExtent|GUICtrlListBox_SetItemData|GUICtrlListBox_SetItemHeight|GUICtrlListBox_SetLocale|GUICtrlListBox_SetSel|GUICtrlListBox_SetTabStops|GUICtrlListBox_SetTopIndex|GUICtrlListBox_Sort|GUICtrlListBox_SwapString|GUICtrlListBox_UpdateHScroll|GUICtrlListView_AddArray|GUICtrlListView_AddColumn|GUICtrlListView_AddItem|GUICtrlListView_AddSubItem|GUICtrlListView_ApproximateViewHeight|GUICtrlListView_ApproximateViewRect|GUICtrlListView_ApproximateViewWidth|GUICtrlListView_Arrange|GUICtrlListView_BeginUpdate|GUICtrlListView_CancelEditLabel|GUICtrlListView_ClickItem|GUICtrlListView_CopyItems|GUICtrlListView_Create|GUICtrlListView_CreateDragImage|GUICtrlListView_CreateSolidBitMap|GUICtrlListView_DeleteAllItems|GUICtrlListView_DeleteColumn|GUICtrlListView_DeleteItem|GUICtrlListView_DeleteItemsSelected|GUICtrlListView_Destroy|GUICtrlListView_DrawDragImage|GUICtrlListView_EditLabel|GUICtrlListView_EnableGroupView|GUICtrlListView_EndUpdate|GUICtrlListView_EnsureVisible|GUICtrlListView_FindInText|GUICtrlListView_FindItem|GUICtrlListView_FindNearest|GUICtrlListView_FindParam|GUICtrlListView_FindText|GUICtrlListView_GetBkColor|GUICtrlListView_GetBkImage|GUICtrlListView_GetCallbackMask|GUICtrlListView_GetColumn|GUICtrlListView_GetColumnCount|GUICtrlListView_GetColumnOrder|GUICtrlListView_GetColumnOrderArray|GUICtrlListView_GetColumnWidth|GUICtrlListView_GetCounterPage|GUICtrlListView_GetEditControl|GUICtrlListView_GetExtendedListViewStyle|GUICtrlListView_GetGroupInfo|GUICtrlListView_GetGroupViewEnabled|GUICtrlListView_GetHeader|GUICtrlListView_GetHotCursor|GUICtrlListView_GetHotItem|GUICtrlListView_GetHoverTime|GUICtrlListView_GetImageList|GUICtrlListView_GetISearchString|GUICtrlListView_GetItem|GUICtrlListView_GetItemChecked|GUICtrlListView_GetItemCount|GUICtrlListView_GetItemCut|GUICtrlListView_GetItemDropHilited|GUICtrlListView_GetItemEx|GUICtrlListView_GetItemFocused|GUICtrlListView_GetItemGroupID|GUICtrlListView_GetItemImage|GUICtrlListView_GetItemIndent|GUICtrlListView_GetItemParam|GUICtrlListView_GetItemPosition|GUICtrlListView_GetItemPositionX|GUICtrlListView_GetItemPositionY|GUICtrlListView_GetItemRect|GUICtrlListView_GetItemRectEx|GUICtrlListView_GetItemSelected|GUICtrlListView_GetItemSpacing|GUICtrlListView_GetItemSpacingX|GUICtrlListView_GetItemSpacingY|GUICtrlListView_GetItemState|GUICtrlListView_GetItemStateImage|GUICtrlListView_GetItemText|GUICtrlListView_GetItemTextArray|GUICtrlListView_GetItemTextString|GUICtrlListView_GetNextItem|GUICtrlListView_GetNumberOfWorkAreas|GUICtrlListView_GetOrigin|GUICtrlListView_GetOriginX|GUICtrlListView_GetOriginY|GUICtrlListView_GetOutlineColor|GUICtrlListView_GetSelectedColumn|GUICtrlListView_GetSelectedCount|GUICtrlListView_GetSelectedIndices|GUICtrlListView_GetSelectionMark|GUICtrlListView_GetStringWidth|GUICtrlListView_GetSubItemRect|GUICtrlListView_GetTextBkColor|GUICtrlListView_GetTextColor|GUICtrlListView_GetToolTips|GUICtrlListView_GetTopIndex|GUICtrlListView_GetUnicodeFormat|GUICtrlListView_GetView|GUICtrlListView_GetViewDetails|GUICtrlListView_GetViewLarge|GUICtrlListView_GetViewList|GUICtrlListView_GetViewRect|GUICtrlListView_GetViewSmall|GUICtrlListView_GetViewTile|GUICtrlListView_HideColumn|GUICtrlListView_HitTest|GUICtrlListView_InsertColumn|GUICtrlListView_InsertGroup|GUICtrlListView_InsertItem|GUICtrlListView_JustifyColumn|GUICtrlListView_MapIDToIndex|GUICtrlListView_MapIndexToID|GUICtrlListView_RedrawItems|GUICtrlListView_RegisterSortCallBack|GUICtrlListView_RemoveAllGroups|GUICtrlListView_RemoveGroup|GUICtrlListView_Scroll|GUICtrlListView_SetBkColor|GUICtrlListView_SetBkImage|GUICtrlListView_SetCallBackMask|GUICtrlListView_SetColumn|GUICtrlListView_SetColumnOrder|GUICtrlListView_SetColumnOrderArray|GUICtrlListView_SetColumnWidth|GUICtrlListView_SetExtendedListViewStyle|GUICtrlListView_SetGroupInfo|GUICtrlListView_SetHotItem|GUICtrlListView_SetHoverTime|GUICtrlListView_SetIconSpacing|GUICtrlListView_SetImageList|GUICtrlListView_SetItem|GUICtrlListView_SetItemChecked|GUICtrlListView_SetItemCount|GUICtrlListView_SetItemCut|GUICtrlListView_SetItemDropHilited|GUICtrlListView_SetItemEx|GUICtrlListView_SetItemFocused|GUICtrlListView_SetItemGroupID|GUICtrlListView_SetItemImage|GUICtrlListView_SetItemIndent|GUICtrlListView_SetItemParam|GUICtrlListView_SetItemPosition|GUICtrlListView_SetItemPosition32|GUICtrlListView_SetItemSelected|GUICtrlListView_SetItemState|GUICtrlListView_SetItemStateImage|GUICtrlListView_SetItemText|GUICtrlListView_SetOutlineColor|GUICtrlListView_SetSelectedColumn|GUICtrlListView_SetSelectionMark|GUICtrlListView_SetTextBkColor|GUICtrlListView_SetTextColor|GUICtrlListView_SetToolTips|GUICtrlListView_SetUnicodeFormat|GUICtrlListView_SetView|GUICtrlListView_SetWorkAreas|GUICtrlListView_SimpleSort|GUICtrlListView_SortItems|GUICtrlListView_SubItemHitTest|GUICtrlListView_UnRegisterSortCallBack|GUICtrlMenu_AddMenuItem|GUICtrlMenu_AppendMenu|GUICtrlMenu_CheckMenuItem|GUICtrlMenu_CheckRadioItem|GUICtrlMenu_CreateMenu|GUICtrlMenu_CreatePopup|GUICtrlMenu_DeleteMenu|GUICtrlMenu_DestroyMenu|GUICtrlMenu_DrawMenuBar|GUICtrlMenu_EnableMenuItem|GUICtrlMenu_FindItem|GUICtrlMenu_FindParent|GUICtrlMenu_GetItemBmp|GUICtrlMenu_GetItemBmpChecked|GUICtrlMenu_GetItemBmpUnchecked|GUICtrlMenu_GetItemChecked|GUICtrlMenu_GetItemCount|GUICtrlMenu_GetItemData|GUICtrlMenu_GetItemDefault|GUICtrlMenu_GetItemDisabled|GUICtrlMenu_GetItemEnabled|GUICtrlMenu_GetItemGrayed|GUICtrlMenu_GetItemHighlighted|GUICtrlMenu_GetItemID|GUICtrlMenu_GetItemInfo|GUICtrlMenu_GetItemRect|GUICtrlMenu_GetItemRectEx|GUICtrlMenu_GetItemState|GUICtrlMenu_GetItemStateEx|GUICtrlMenu_GetItemSubMenu|GUICtrlMenu_GetItemText|GUICtrlMenu_GetItemType|GUICtrlMenu_GetMenu|GUICtrlMenu_GetMenuBackground|GUICtrlMenu_GetMenuBarInfo|GUICtrlMenu_GetMenuContextHelpID|GUICtrlMenu_GetMenuData|GUICtrlMenu_GetMenuDefaultItem|GUICtrlMenu_GetMenuHeight|GUICtrlMenu_GetMenuInfo|GUICtrlMenu_GetMenuStyle|GUICtrlMenu_GetSystemMenu|GUICtrlMenu_InsertMenuItem|GUICtrlMenu_InsertMenuItemEx|GUICtrlMenu_IsMenu|GUICtrlMenu_LoadMenu|GUICtrlMenu_MapAccelerator|GUICtrlMenu_MenuItemFromPoint|GUICtrlMenu_RemoveMenu|GUICtrlMenu_SetItemBitmaps|GUICtrlMenu_SetItemBmp|GUICtrlMenu_SetItemBmpChecked|GUICtrlMenu_SetItemBmpUnchecked|GUICtrlMenu_SetItemChecked|GUICtrlMenu_SetItemData|GUICtrlMenu_SetItemDefault|GUICtrlMenu_SetItemDisabled|GUICtrlMenu_SetItemEnabled|GUICtrlMenu_SetItemGrayed|GUICtrlMenu_SetItemHighlighted|GUICtrlMenu_SetItemID|GUICtrlMenu_SetItemInfo|GUICtrlMenu_SetItemState|GUICtrlMenu_SetItemSubMenu|GUICtrlMenu_SetItemText|GUICtrlMenu_SetItemType|GUICtrlMenu_SetMenu|GUICtrlMenu_SetMenuBackground|GUICtrlMenu_SetMenuContextHelpID|GUICtrlMenu_SetMenuData|GUICtrlMenu_SetMenuDefaultItem|GUICtrlMenu_SetMenuHeight|GUICtrlMenu_SetMenuInfo|GUICtrlMenu_SetMenuStyle|GUICtrlMenu_TrackPopupMenu|GUICtrlMonthCal_Create|GUICtrlMonthCal_Destroy|GUICtrlMonthCal_GetColor|GUICtrlMonthCal_GetColorArray|GUICtrlMonthCal_GetCurSel|GUICtrlMonthCal_GetCurSelStr|GUICtrlMonthCal_GetFirstDOW|GUICtrlMonthCal_GetFirstDOWStr|GUICtrlMonthCal_GetMaxSelCount|GUICtrlMonthCal_GetMaxTodayWidth|GUICtrlMonthCal_GetMinReqHeight|GUICtrlMonthCal_GetMinReqRect|GUICtrlMonthCal_GetMinReqRectArray|GUICtrlMonthCal_GetMinReqWidth|GUICtrlMonthCal_GetMonthDelta|GUICtrlMonthCal_GetMonthRange|GUICtrlMonthCal_GetMonthRangeMax|GUICtrlMonthCal_GetMonthRangeMaxStr|GUICtrlMonthCal_GetMonthRangeMin|GUICtrlMonthCal_GetMonthRangeMinStr|GUICtrlMonthCal_GetMonthRangeSpan|GUICtrlMonthCal_GetRange|GUICtrlMonthCal_GetRangeMax|GUICtrlMonthCal_GetRangeMaxStr|GUICtrlMonthCal_GetRangeMin|GUICtrlMonthCal_GetRangeMinStr|GUICtrlMonthCal_GetSelRange|GUICtrlMonthCal_GetSelRangeMax|GUICtrlMonthCal_GetSelRangeMaxStr|GUICtrlMonthCal_GetSelRangeMin|GUICtrlMonthCal_GetSelRangeMinStr|GUICtrlMonthCal_GetToday|GUICtrlMonthCal_GetTodayStr|GUICtrlMonthCal_GetUnicodeFormat|GUICtrlMonthCal_HitTest|GUICtrlMonthCal_SetColor|GUICtrlMonthCal_SetCurSel|GUICtrlMonthCal_SetDayState|GUICtrlMonthCal_SetFirstDOW|GUICtrlMonthCal_SetMaxSelCount|GUICtrlMonthCal_SetMonthDelta|GUICtrlMonthCal_SetRange|GUICtrlMonthCal_SetSelRange|GUICtrlMonthCal_SetToday|GUICtrlMonthCal_SetUnicodeFormat|GUICtrlRebar_AddBand|GUICtrlRebar_AddToolBarBand|GUICtrlRebar_BeginDrag|GUICtrlRebar_Create|GUICtrlRebar_DeleteBand|GUICtrlRebar_Destroy|GUICtrlRebar_DragMove|GUICtrlRebar_EndDrag|GUICtrlRebar_GetBandBackColor|GUICtrlRebar_GetBandBorders|GUICtrlRebar_GetBandBordersEx|GUICtrlRebar_GetBandChildHandle|GUICtrlRebar_GetBandChildSize|GUICtrlRebar_GetBandCount|GUICtrlRebar_GetBandForeColor|GUICtrlRebar_GetBandHeaderSize|GUICtrlRebar_GetBandID|GUICtrlRebar_GetBandIdealSize|GUICtrlRebar_GetBandLength|GUICtrlRebar_GetBandLParam|GUICtrlRebar_GetBandMargins|GUICtrlRebar_GetBandMarginsEx|GUICtrlRebar_GetBandRect|GUICtrlRebar_GetBandRectEx|GUICtrlRebar_GetBandStyle|GUICtrlRebar_GetBandStyleBreak|GUICtrlRebar_GetBandStyleChildEdge|GUICtrlRebar_GetBandStyleFixedBMP|GUICtrlRebar_GetBandStyleFixedSize|GUICtrlRebar_GetBandStyleGripperAlways|GUICtrlRebar_GetBandStyleHidden|GUICtrlRebar_GetBandStyleHideTitle|GUICtrlRebar_GetBandStyleNoGripper|GUICtrlRebar_GetBandStyleTopAlign|GUICtrlRebar_GetBandStyleUseChevron|GUICtrlRebar_GetBandStyleVariableHeight|GUICtrlRebar_GetBandText|GUICtrlRebar_GetBarHeight|GUICtrlRebar_GetBKColor|GUICtrlRebar_GetColorScheme|GUICtrlRebar_GetRowCount|GUICtrlRebar_GetRowHeight|GUICtrlRebar_GetTextColor|GUICtrlRebar_GetToolTips|GUICtrlRebar_GetUnicodeFormat|GUICtrlRebar_HitTest|GUICtrlRebar_IDToIndex|GUICtrlRebar_MaximizeBand|GUICtrlRebar_MinimizeBand|GUICtrlRebar_MoveBand|GUICtrlRebar_SetBandBackColor|GUICtrlRebar_SetBandForeColor|GUICtrlRebar_SetBandHeaderSize|GUICtrlRebar_SetBandID|GUICtrlRebar_SetBandIdealSize|GUICtrlRebar_SetBandLength|GUICtrlRebar_SetBandLParam|GUICtrlRebar_SetBandStyle|GUICtrlRebar_SetBandStyleBreak|GUICtrlRebar_SetBandStyleChildEdge|GUICtrlRebar_SetBandStyleFixedBMP|GUICtrlRebar_SetBandStyleFixedSize|GUICtrlRebar_SetBandStyleGripperAlways|GUICtrlRebar_SetBandStyleHidden|GUICtrlRebar_SetBandStyleHideTitle|GUICtrlRebar_SetBandStyleNoGripper|GUICtrlRebar_SetBandStyleTopAlign|GUICtrlRebar_SetBandStyleUseChevron|GUICtrlRebar_SetBandStyleVariableHeight|GUICtrlRebar_SetBandText|GUICtrlRebar_SetBKColor|GUICtrlRebar_SetColorScheme|GUICtrlRebar_SetTextColor|GUICtrlRebar_SetToolTips|GUICtrlRebar_SetUnicodeFormat|GUICtrlRebar_ShowBand|GUICtrlSlider_ClearSel|GUICtrlSlider_ClearTics|GUICtrlSlider_Create|GUICtrlSlider_Destroy|GUICtrlSlider_GetBuddy|GUICtrlSlider_GetChannelRect|GUICtrlSlider_GetLineSize|GUICtrlSlider_GetNumTics|GUICtrlSlider_GetPageSize|GUICtrlSlider_GetPos|GUICtrlSlider_GetPTics|GUICtrlSlider_GetRange|GUICtrlSlider_GetRangeMax|GUICtrlSlider_GetRangeMin|GUICtrlSlider_GetSel|GUICtrlSlider_GetSelEnd|GUICtrlSlider_GetSelStart|GUICtrlSlider_GetThumbLength|GUICtrlSlider_GetThumbRect|GUICtrlSlider_GetThumbRectEx|GUICtrlSlider_GetTic|GUICtrlSlider_GetTicPos|GUICtrlSlider_GetToolTips|GUICtrlSlider_GetUnicodeFormat|GUICtrlSlider_SetBuddy|GUICtrlSlider_SetLineSize|GUICtrlSlider_SetPageSize|GUICtrlSlider_SetPos|GUICtrlSlider_SetRange|GUICtrlSlider_SetRangeMax|GUICtrlSlider_SetRangeMin|GUICtrlSlider_SetSel|GUICtrlSlider_SetSelEnd|GUICtrlSlider_SetSelStart|GUICtrlSlider_SetThumbLength|GUICtrlSlider_SetTic|GUICtrlSlider_SetTicFreq|GUICtrlSlider_SetTipSide|GUICtrlSlider_SetToolTips|GUICtrlSlider_SetUnicodeFormat|GUICtrlStatusBar_Create|GUICtrlStatusBar_Destroy|GUICtrlStatusBar_EmbedControl|GUICtrlStatusBar_GetBorders|GUICtrlStatusBar_GetBordersHorz|GUICtrlStatusBar_GetBordersRect|GUICtrlStatusBar_GetBordersVert|GUICtrlStatusBar_GetCount|GUICtrlStatusBar_GetHeight|GUICtrlStatusBar_GetIcon|GUICtrlStatusBar_GetParts|GUICtrlStatusBar_GetRect|GUICtrlStatusBar_GetRectEx|GUICtrlStatusBar_GetText|GUICtrlStatusBar_GetTextFlags|GUICtrlStatusBar_GetTextLength|GUICtrlStatusBar_GetTextLengthEx|GUICtrlStatusBar_GetTipText|GUICtrlStatusBar_GetUnicodeFormat|GUICtrlStatusBar_GetWidth|GUICtrlStatusBar_IsSimple|GUICtrlStatusBar_Resize|GUICtrlStatusBar_SetBkColor|GUICtrlStatusBar_SetIcon|GUICtrlStatusBar_SetMinHeight|GUICtrlStatusBar_SetParts|GUICtrlStatusBar_SetSimple|GUICtrlStatusBar_SetText|GUICtrlStatusBar_SetTipText|GUICtrlStatusBar_SetUnicodeFormat|GUICtrlStatusBar_ShowHide|GUICtrlTab_Create|GUICtrlTab_DeleteAllItems|GUICtrlTab_DeleteItem|GUICtrlTab_DeselectAll|GUICtrlTab_Destroy|GUICtrlTab_FindTab|GUICtrlTab_GetCurFocus|GUICtrlTab_GetCurSel|GUICtrlTab_GetDisplayRect|GUICtrlTab_GetDisplayRectEx|GUICtrlTab_GetExtendedStyle|GUICtrlTab_GetImageList|GUICtrlTab_GetItem|GUICtrlTab_GetItemCount|GUICtrlTab_GetItemImage|GUICtrlTab_GetItemParam|GUICtrlTab_GetItemRect|GUICtrlTab_GetItemRectEx|GUICtrlTab_GetItemState|GUICtrlTab_GetItemText|GUICtrlTab_GetRowCount|GUICtrlTab_GetToolTips|GUICtrlTab_GetUnicodeFormat|GUICtrlTab_HighlightItem|GUICtrlTab_HitTest|GUICtrlTab_InsertItem|GUICtrlTab_RemoveImage|GUICtrlTab_SetCurFocus|GUICtrlTab_SetCurSel|GUICtrlTab_SetExtendedStyle|GUICtrlTab_SetImageList|GUICtrlTab_SetItem|GUICtrlTab_SetItemImage|GUICtrlTab_SetItemParam|GUICtrlTab_SetItemSize|GUICtrlTab_SetItemState|GUICtrlTab_SetItemText|GUICtrlTab_SetMinTabWidth|GUICtrlTab_SetPadding|GUICtrlTab_SetToolTips|GUICtrlTab_SetUnicodeFormat|GUICtrlToolbar_AddBitmap|GUICtrlToolbar_AddButton|GUICtrlToolbar_AddButtonSep|GUICtrlToolbar_AddString|GUICtrlToolbar_ButtonCount|GUICtrlToolbar_CheckButton|GUICtrlToolbar_ClickAccel|GUICtrlToolbar_ClickButton|GUICtrlToolbar_ClickIndex|GUICtrlToolbar_CommandToIndex|GUICtrlToolbar_Create|GUICtrlToolbar_Customize|GUICtrlToolbar_DeleteButton|GUICtrlToolbar_Destroy|GUICtrlToolbar_EnableButton|GUICtrlToolbar_FindToolbar|GUICtrlToolbar_GetAnchorHighlight|GUICtrlToolbar_GetBitmapFlags|GUICtrlToolbar_GetButtonBitmap|GUICtrlToolbar_GetButtonInfo|GUICtrlToolbar_GetButtonInfoEx|GUICtrlToolbar_GetButtonParam|GUICtrlToolbar_GetButtonRect|GUICtrlToolbar_GetButtonRectEx|GUICtrlToolbar_GetButtonSize|GUICtrlToolbar_GetButtonState|GUICtrlToolbar_GetButtonStyle|GUICtrlToolbar_GetButtonText|GUICtrlToolbar_GetColorScheme|GUICtrlToolbar_GetDisabledImageList|GUICtrlToolbar_GetExtendedStyle|GUICtrlToolbar_GetHotImageList|GUICtrlToolbar_GetHotItem|GUICtrlToolbar_GetImageList|GUICtrlToolbar_GetInsertMark|GUICtrlToolbar_GetInsertMarkColor|GUICtrlToolbar_GetMaxSize|GUICtrlToolbar_GetMetrics|GUICtrlToolbar_GetPadding|GUICtrlToolbar_GetRows|GUICtrlToolbar_GetString|GUICtrlToolbar_GetStyle|GUICtrlToolbar_GetStyleAltDrag|GUICtrlToolbar_GetStyleCustomErase|GUICtrlToolbar_GetStyleFlat|GUICtrlToolbar_GetStyleList|GUICtrlToolbar_GetStyleRegisterDrop|GUICtrlToolbar_GetStyleToolTips|GUICtrlToolbar_GetStyleTransparent|GUICtrlToolbar_GetStyleWrapable|GUICtrlToolbar_GetTextRows|GUICtrlToolbar_GetToolTips|GUICtrlToolbar_GetUnicodeFormat|GUICtrlToolbar_HideButton|GUICtrlToolbar_HighlightButton|GUICtrlToolbar_HitTest|GUICtrlToolbar_IndexToCommand|GUICtrlToolbar_InsertButton|GUICtrlToolbar_InsertMarkHitTest|GUICtrlToolbar_IsButtonChecked|GUICtrlToolbar_IsButtonEnabled|GUICtrlToolbar_IsButtonHidden|GUICtrlToolbar_IsButtonHighlighted|GUICtrlToolbar_IsButtonIndeterminate|GUICtrlToolbar_IsButtonPressed|GUICtrlToolbar_LoadBitmap|GUICtrlToolbar_LoadImages|GUICtrlToolbar_MapAccelerator|GUICtrlToolbar_MoveButton|GUICtrlToolbar_PressButton|GUICtrlToolbar_SetAnchorHighlight|GUICtrlToolbar_SetBitmapSize|GUICtrlToolbar_SetButtonBitMap|GUICtrlToolbar_SetButtonInfo|GUICtrlToolbar_SetButtonInfoEx|GUICtrlToolbar_SetButtonParam|GUICtrlToolbar_SetButtonSize|GUICtrlToolbar_SetButtonState|GUICtrlToolbar_SetButtonStyle|GUICtrlToolbar_SetButtonText|GUICtrlToolbar_SetButtonWidth|GUICtrlToolbar_SetCmdID|GUICtrlToolbar_SetColorScheme|GUICtrlToolbar_SetDisabledImageList|GUICtrlToolbar_SetDrawTextFlags|GUICtrlToolbar_SetExtendedStyle|GUICtrlToolbar_SetHotImageList|GUICtrlToolbar_SetHotItem|GUICtrlToolbar_SetImageList|GUICtrlToolbar_SetIndent|GUICtrlToolbar_SetIndeterminate|GUICtrlToolbar_SetInsertMark|GUICtrlToolbar_SetInsertMarkColor|GUICtrlToolbar_SetMaxTextRows|GUICtrlToolbar_SetMetrics|GUICtrlToolbar_SetPadding|GUICtrlToolbar_SetParent|GUICtrlToolbar_SetRows|GUICtrlToolbar_SetStyle|GUICtrlToolbar_SetStyleAltDrag|GUICtrlToolbar_SetStyleCustomErase|GUICtrlToolbar_SetStyleFlat|GUICtrlToolbar_SetStyleList|GUICtrlToolbar_SetStyleRegisterDrop|GUICtrlToolbar_SetStyleToolTips|GUICtrlToolbar_SetStyleTransparent|GUICtrlToolbar_SetStyleWrapable|GUICtrlToolbar_SetToolTips|GUICtrlToolbar_SetUnicodeFormat|GUICtrlToolbar_SetWindowTheme|GUICtrlTreeView_Add|GUICtrlTreeView_AddChild|GUICtrlTreeView_AddChildFirst|GUICtrlTreeView_AddFirst|GUICtrlTreeView_BeginUpdate|GUICtrlTreeView_ClickItem|GUICtrlTreeView_Create|GUICtrlTreeView_CreateDragImage|GUICtrlTreeView_CreateSolidBitMap|GUICtrlTreeView_Delete|GUICtrlTreeView_DeleteAll|GUICtrlTreeView_DeleteChildren|GUICtrlTreeView_Destroy|GUICtrlTreeView_DisplayRect|GUICtrlTreeView_DisplayRectEx|GUICtrlTreeView_EditText|GUICtrlTreeView_EndEdit|GUICtrlTreeView_EndUpdate|GUICtrlTreeView_EnsureVisible|GUICtrlTreeView_Expand|GUICtrlTreeView_ExpandedOnce|GUICtrlTreeView_FindItem|GUICtrlTreeView_FindItemEx|GUICtrlTreeView_GetBkColor|GUICtrlTreeView_GetBold|GUICtrlTreeView_GetChecked|GUICtrlTreeView_GetChildCount|GUICtrlTreeView_GetChildren|GUICtrlTreeView_GetCount|GUICtrlTreeView_GetCut|GUICtrlTreeView_GetDropTarget|GUICtrlTreeView_GetEditControl|GUICtrlTreeView_GetExpanded|GUICtrlTreeView_GetFirstChild|GUICtrlTreeView_GetFirstItem|GUICtrlTreeView_GetFirstVisible|GUICtrlTreeView_GetFocused|GUICtrlTreeView_GetHeight|GUICtrlTreeView_GetImageIndex|GUICtrlTreeView_GetImageListIconHandle|GUICtrlTreeView_GetIndent|GUICtrlTreeView_GetInsertMarkColor|GUICtrlTreeView_GetISearchString|GUICtrlTreeView_GetItemByIndex|GUICtrlTreeView_GetItemHandle|GUICtrlTreeView_GetItemParam|GUICtrlTreeView_GetLastChild|GUICtrlTreeView_GetLineColor|GUICtrlTreeView_GetNext|GUICtrlTreeView_GetNextChild|GUICtrlTreeView_GetNextSibling|GUICtrlTreeView_GetNextVisible|GUICtrlTreeView_GetNormalImageList|GUICtrlTreeView_GetParentHandle|GUICtrlTreeView_GetParentParam|GUICtrlTreeView_GetPrev|GUICtrlTreeView_GetPrevChild|GUICtrlTreeView_GetPrevSibling|GUICtrlTreeView_GetPrevVisible|GUICtrlTreeView_GetScrollTime|GUICtrlTreeView_GetSelected|GUICtrlTreeView_GetSelectedImageIndex|GUICtrlTreeView_GetSelection|GUICtrlTreeView_GetSiblingCount|GUICtrlTreeView_GetState|GUICtrlTreeView_GetStateImageIndex|GUICtrlTreeView_GetStateImageList|GUICtrlTreeView_GetText|GUICtrlTreeView_GetTextColor|GUICtrlTreeView_GetToolTips|GUICtrlTreeView_GetTree|GUICtrlTreeView_GetUnicodeFormat|GUICtrlTreeView_GetVisible|GUICtrlTreeView_GetVisibleCount|GUICtrlTreeView_HitTest|GUICtrlTreeView_HitTestEx|GUICtrlTreeView_HitTestItem|GUICtrlTreeView_Index|GUICtrlTreeView_InsertItem|GUICtrlTreeView_IsFirstItem|GUICtrlTreeView_IsParent|GUICtrlTreeView_Level|GUICtrlTreeView_SelectItem|GUICtrlTreeView_SelectItemByIndex|GUICtrlTreeView_SetBkColor|GUICtrlTreeView_SetBold|GUICtrlTreeView_SetChecked|GUICtrlTreeView_SetCheckedByIndex|GUICtrlTreeView_SetChildren|GUICtrlTreeView_SetCut|GUICtrlTreeView_SetDropTarget|GUICtrlTreeView_SetFocused|GUICtrlTreeView_SetHeight|GUICtrlTreeView_SetIcon|GUICtrlTreeView_SetImageIndex|GUICtrlTreeView_SetIndent|GUICtrlTreeView_SetInsertMark|GUICtrlTreeView_SetInsertMarkColor|GUICtrlTreeView_SetItemHeight|GUICtrlTreeView_SetItemParam|GUICtrlTreeView_SetLineColor|GUICtrlTreeView_SetNormalImageList|GUICtrlTreeView_SetScrollTime|GUICtrlTreeView_SetSelected|GUICtrlTreeView_SetSelectedImageIndex|GUICtrlTreeView_SetState|GUICtrlTreeView_SetStateImageIndex|GUICtrlTreeView_SetStateImageList|GUICtrlTreeView_SetText|GUICtrlTreeView_SetTextColor|GUICtrlTreeView_SetToolTips|GUICtrlTreeView_SetUnicodeFormat|GUICtrlTreeView_Sort|GUIImageList_Add|GUIImageList_AddBitmap|GUIImageList_AddIcon|GUIImageList_AddMasked|GUIImageList_BeginDrag|GUIImageList_Copy|GUIImageList_Create|GUIImageList_Destroy|GUIImageList_DestroyIcon|GUIImageList_DragEnter|GUIImageList_DragLeave|GUIImageList_DragMove|GUIImageList_Draw|GUIImageList_DrawEx|GUIImageList_Duplicate|GUIImageList_EndDrag|GUIImageList_GetBkColor|GUIImageList_GetIcon|GUIImageList_GetIconHeight|GUIImageList_GetIconSize|GUIImageList_GetIconSizeEx|GUIImageList_GetIconWidth|GUIImageList_GetImageCount|GUIImageList_GetImageInfoEx|GUIImageList_Remove|GUIImageList_ReplaceIcon|GUIImageList_SetBkColor|GUIImageList_SetIconSize|GUIImageList_SetImageCount|GUIImageList_Swap|GUIScrollBars_EnableScrollBar|GUIScrollBars_GetScrollBarInfoEx|GUIScrollBars_GetScrollBarRect|GUIScrollBars_GetScrollBarRGState|GUIScrollBars_GetScrollBarXYLineButton|GUIScrollBars_GetScrollBarXYThumbBottom|GUIScrollBars_GetScrollBarXYThumbTop|GUIScrollBars_GetScrollInfo|GUIScrollBars_GetScrollInfoEx|GUIScrollBars_GetScrollInfoMax|GUIScrollBars_GetScrollInfoMin|GUIScrollBars_GetScrollInfoPage|GUIScrollBars_GetScrollInfoPos|GUIScrollBars_GetScrollInfoTrackPos|GUIScrollBars_GetScrollPos|GUIScrollBars_GetScrollRange|GUIScrollBars_Init|GUIScrollBars_ScrollWindow|GUIScrollBars_SetScrollInfo|GUIScrollBars_SetScrollInfoMax|GUIScrollBars_SetScrollInfoMin|GUIScrollBars_SetScrollInfoPage|GUIScrollBars_SetScrollInfoPos|GUIScrollBars_SetScrollRange|GUIScrollBars_ShowScrollBar|GUIToolTip_Activate|GUIToolTip_AddTool|GUIToolTip_AdjustRect|GUIToolTip_BitsToTTF|GUIToolTip_Create|GUIToolTip_DelTool|GUIToolTip_Destroy|GUIToolTip_EnumTools|GUIToolTip_GetBubbleHeight|GUIToolTip_GetBubbleSize|GUIToolTip_GetBubbleWidth|GUIToolTip_GetCurrentTool|GUIToolTip_GetDelayTime|GUIToolTip_GetMargin|GUIToolTip_GetMarginEx|GUIToolTip_GetMaxTipWidth|GUIToolTip_GetText|GUIToolTip_GetTipBkColor|GUIToolTip_GetTipTextColor|GUIToolTip_GetTitleBitMap|GUIToolTip_GetTitleText|GUIToolTip_GetToolCount|GUIToolTip_GetToolInfo|GUIToolTip_HitTest|GUIToolTip_NewToolRect|GUIToolTip_Pop|GUIToolTip_PopUp|GUIToolTip_SetDelayTime|GUIToolTip_SetMargin|GUIToolTip_SetMaxTipWidth|GUIToolTip_SetTipBkColor|GUIToolTip_SetTipTextColor|GUIToolTip_SetTitle|GUIToolTip_SetToolInfo|GUIToolTip_SetWindowTheme|GUIToolTip_ToolExists|GUIToolTip_ToolToArray|GUIToolTip_TrackActivate|GUIToolTip_TrackPosition|GUIToolTip_TTFToBits|GUIToolTip_Update|GUIToolTip_UpdateTipText|HexToString|IE_Example|IE_Introduction|IE_VersionInfo|IEAction|IEAttach|IEBodyReadHTML|IEBodyReadText|IEBodyWriteHTML|IECreate|IECreateEmbedded|IEDocGetObj|IEDocInsertHTML|IEDocInsertText|IEDocReadHTML|IEDocWriteHTML|IEErrorHandlerDeRegister|IEErrorHandlerRegister|IEErrorNotify|IEFormElementCheckBoxSelect|IEFormElementGetCollection|IEFormElementGetObjByName|IEFormElementGetValue|IEFormElementOptionSelect|IEFormElementRadioSelect|IEFormElementSetValue|IEFormGetCollection|IEFormGetObjByName|IEFormImageClick|IEFormReset|IEFormSubmit|IEFrameGetCollection|IEFrameGetObjByName|IEGetObjById|IEGetObjByName|IEHeadInsertEventScript|IEImgClick|IEImgGetCollection|IEIsFrameSet|IELinkClickByIndex|IELinkClickByText|IELinkGetCollection|IELoadWait|IELoadWaitTimeout|IENavigate|IEPropertyGet|IEPropertySet|IEQuit|IETableGetCollection|IETableWriteToArray|IETagNameAllGetCollection|IETagNameGetCollection|Iif|INetExplorerCapable|INetGetSource|INetMail|INetSmtpMail|IsPressed|MathCheckDiv|Max|MemGlobalAlloc|MemGlobalFree|MemGlobalLock|MemGlobalSize|MemGlobalUnlock|MemMoveMemory|MemMsgBox|MemShowError|MemVirtualAlloc|MemVirtualAllocEx|MemVirtualFree|MemVirtualFreeEx|Min|MouseTrap|NamedPipes_CallNamedPipe|NamedPipes_ConnectNamedPipe|NamedPipes_CreateNamedPipe|NamedPipes_CreatePipe|NamedPipes_DisconnectNamedPipe|NamedPipes_GetNamedPipeHandleState|NamedPipes_GetNamedPipeInfo|NamedPipes_PeekNamedPipe|NamedPipes_SetNamedPipeHandleState|NamedPipes_TransactNamedPipe|NamedPipes_WaitNamedPipe|Net_Share_ConnectionEnum|Net_Share_FileClose|Net_Share_FileEnum|Net_Share_FileGetInfo|Net_Share_PermStr|Net_Share_ResourceStr|Net_Share_SessionDel|Net_Share_SessionEnum|Net_Share_SessionGetInfo|Net_Share_ShareAdd|Net_Share_ShareCheck|Net_Share_ShareDel|Net_Share_ShareEnum|Net_Share_ShareGetInfo|Net_Share_ShareSetInfo|Net_Share_StatisticsGetSvr|Net_Share_StatisticsGetWrk|Now|NowCalc|NowCalcDate|NowDate|NowTime|PathFull|PathMake|PathSplit|ProcessGetName|ProcessGetPriority|Radian|ReplaceStringInFile|RunDOS|ScreenCapture_Capture|ScreenCapture_CaptureWnd|ScreenCapture_SaveImage|ScreenCapture_SetBMPFormat|ScreenCapture_SetJPGQuality|ScreenCapture_SetTIFColorDepth|ScreenCapture_SetTIFCompression|Security__AdjustTokenPrivileges|Security__GetAccountSid|Security__GetLengthSid|Security__GetTokenInformation|Security__ImpersonateSelf|Security__IsValidSid|Security__LookupAccountName|Security__LookupAccountSid|Security__LookupPrivilegeValue|Security__OpenProcessToken|Security__OpenThreadToken|Security__OpenThreadTokenEx|Security__SetPrivilege|Security__SidToStringSid|Security__SidTypeStr|Security__StringSidToSid|SendMessage|SendMessageA|SetDate|SetTime|Singleton|SoundClose|SoundLength|SoundOpen|SoundPause|SoundPlay|SoundPos|SoundResume|SoundSeek|SoundStatus|SoundStop|SQLite_Changes|SQLite_Close|SQLite_Display2DResult|SQLite_Encode|SQLite_ErrCode|SQLite_ErrMsg|SQLite_Escape|SQLite_Exec|SQLite_FetchData|SQLite_FetchNames|SQLite_GetTable|SQLite_GetTable2d|SQLite_LastInsertRowID|SQLite_LibVersion|SQLite_Open|SQLite_Query|SQLite_QueryFinalize|SQLite_QueryReset|SQLite_QuerySingleRow|SQLite_SaveMode|SQLite_SetTimeout|SQLite_Shutdown|SQLite_SQLiteExe|SQLite_Startup|SQLite_TotalChanges|StringAddComma|StringBetween|StringEncrypt|StringInsert|StringProper|StringRepeat|StringReverse|StringSplit|StringToHex|TCPIpToName|TempFile|TicksToTime|Timer_Diff|Timer_GetTimerID|Timer_Init|Timer_KillAllTimers|Timer_KillTimer|Timer_SetTimer|TimeToTicks|VersionCompare|viClose|viExecCommand|viFindGpib|viGpibBusReset|viGTL|viOpen|viSetAttribute|viSetTimeout|WeekNumberISO|WinAPI_AttachConsole|WinAPI_AttachThreadInput|WinAPI_Beep|WinAPI_BitBlt|WinAPI_CallNextHookEx|WinAPI_Check|WinAPI_ClientToScreen|WinAPI_CloseHandle|WinAPI_CommDlgExtendedError|WinAPI_CopyIcon|WinAPI_CreateBitmap|WinAPI_CreateCompatibleBitmap|WinAPI_CreateCompatibleDC|WinAPI_CreateEvent|WinAPI_CreateFile|WinAPI_CreateFont|WinAPI_CreateFontIndirect|WinAPI_CreateProcess|WinAPI_CreateSolidBitmap|WinAPI_CreateSolidBrush|WinAPI_CreateWindowEx|WinAPI_DefWindowProc|WinAPI_DeleteDC|WinAPI_DeleteObject|WinAPI_DestroyIcon|WinAPI_DestroyWindow|WinAPI_DrawEdge|WinAPI_DrawFrameControl|WinAPI_DrawIcon|WinAPI_DrawIconEx|WinAPI_DrawText|WinAPI_EnableWindow|WinAPI_EnumDisplayDevices|WinAPI_EnumWindows|WinAPI_EnumWindowsPopup|WinAPI_EnumWindowsTop|WinAPI_ExpandEnvironmentStrings|WinAPI_ExtractIconEx|WinAPI_FatalAppExit|WinAPI_FillRect|WinAPI_FindExecutable|WinAPI_FindWindow|WinAPI_FlashWindow|WinAPI_FlashWindowEx|WinAPI_FloatToInt|WinAPI_FlushFileBuffers|WinAPI_FormatMessage|WinAPI_FrameRect|WinAPI_FreeLibrary|WinAPI_GetAncestor|WinAPI_GetAsyncKeyState|WinAPI_GetClassName|WinAPI_GetClientHeight|WinAPI_GetClientRect|WinAPI_GetClientWidth|WinAPI_GetCurrentProcess|WinAPI_GetCurrentProcessID|WinAPI_GetCurrentThread|WinAPI_GetCurrentThreadId|WinAPI_GetCursorInfo|WinAPI_GetDC|WinAPI_GetDesktopWindow|WinAPI_GetDeviceCaps|WinAPI_GetDIBits|WinAPI_GetDlgCtrlID|WinAPI_GetDlgItem|WinAPI_GetFileSizeEx|WinAPI_GetFocus|WinAPI_GetForegroundWindow|WinAPI_GetIconInfo|WinAPI_GetLastError|WinAPI_GetLastErrorMessage|WinAPI_GetModuleHandle|WinAPI_GetMousePos|WinAPI_GetMousePosX|WinAPI_GetMousePosY|WinAPI_GetObject|WinAPI_GetOpenFileName|WinAPI_GetOverlappedResult|WinAPI_GetParent|WinAPI_GetProcessAffinityMask|WinAPI_GetSaveFileName|WinAPI_GetStdHandle|WinAPI_GetStockObject|WinAPI_GetSysColor|WinAPI_GetSysColorBrush|WinAPI_GetSystemMetrics|WinAPI_GetTextExtentPoint32|WinAPI_GetWindow|WinAPI_GetWindowDC|WinAPI_GetWindowHeight|WinAPI_GetWindowLong|WinAPI_GetWindowRect|WinAPI_GetWindowText|WinAPI_GetWindowThreadProcessId|WinAPI_GetWindowWidth|WinAPI_GetXYFromPoint|WinAPI_GlobalMemStatus|WinAPI_GUIDFromString|WinAPI_GUIDFromStringEx|WinAPI_HiWord|WinAPI_InProcess|WinAPI_IntToFloat|WinAPI_InvalidateRect|WinAPI_IsClassName|WinAPI_IsWindow|WinAPI_IsWindowVisible|WinAPI_LoadBitmap|WinAPI_LoadImage|WinAPI_LoadLibrary|WinAPI_LoadLibraryEx|WinAPI_LoadShell32Icon|WinAPI_LoadString|WinAPI_LocalFree|WinAPI_LoWord|WinAPI_MakeDWord|WinAPI_MAKELANGID|WinAPI_MAKELCID|WinAPI_MakeLong|WinAPI_MessageBeep|WinAPI_Mouse_Event|WinAPI_MoveWindow|WinAPI_MsgBox|WinAPI_MulDiv|WinAPI_MultiByteToWideChar|WinAPI_MultiByteToWideCharEx|WinAPI_OpenProcess|WinAPI_PointFromRect|WinAPI_PostMessage|WinAPI_PrimaryLangId|WinAPI_PtInRect|WinAPI_ReadFile|WinAPI_ReadProcessMemory|WinAPI_RectIsEmpty|WinAPI_RedrawWindow|WinAPI_RegisterWindowMessage|WinAPI_ReleaseCapture|WinAPI_ReleaseDC|WinAPI_ScreenToClient|WinAPI_SelectObject|WinAPI_SetBkColor|WinAPI_SetCapture|WinAPI_SetCursor|WinAPI_SetDefaultPrinter|WinAPI_SetDIBits|WinAPI_SetEvent|WinAPI_SetFocus|WinAPI_SetFont|WinAPI_SetHandleInformation|WinAPI_SetLastError|WinAPI_SetParent|WinAPI_SetProcessAffinityMask|WinAPI_SetSysColors|WinAPI_SetTextColor|WinAPI_SetWindowLong|WinAPI_SetWindowPos|WinAPI_SetWindowsHookEx|WinAPI_SetWindowText|WinAPI_ShowCursor|WinAPI_ShowError|WinAPI_ShowMsg|WinAPI_ShowWindow|WinAPI_StringFromGUID|WinAPI_SubLangId|WinAPI_SystemParametersInfo|WinAPI_TwipsPerPixelX|WinAPI_TwipsPerPixelY|WinAPI_UnhookWindowsHookEx|WinAPI_UpdateLayeredWindow|WinAPI_UpdateWindow|WinAPI_ValidateClassName|WinAPI_WaitForInputIdle|WinAPI_WaitForMultipleObjects|WinAPI_WaitForSingleObject|WinAPI_WideCharToMultiByte|WinAPI_WindowFromPoint|WinAPI_WriteConsole|WinAPI_WriteFile|WinAPI_WriteProcessMemory|WinNet_AddConnection|WinNet_AddConnection2|WinNet_AddConnection3|WinNet_CancelConnection|WinNet_CancelConnection2|WinNet_CloseEnum|WinNet_ConnectionDialog|WinNet_ConnectionDialog1|WinNet_DisconnectDialog|WinNet_DisconnectDialog1|WinNet_EnumResource|WinNet_GetConnection|WinNet_GetConnectionPerformance|WinNet_GetLastError|WinNet_GetNetworkInformation|WinNet_GetProviderName|WinNet_GetResourceInformation|WinNet_GetResourceParent|WinNet_GetUniversalName|WinNet_GetUser|WinNet_OpenEnum|WinNet_RestoreConnection|WinNet_UseConnection|Word_VersionInfo|WordAttach|WordCreate|WordDocAdd|WordDocAddLink|WordDocAddPicture|WordDocClose|WordDocFindReplace|WordDocGetCollection|WordDocLinkGetCollection|WordDocOpen|WordDocPrint|WordDocPropertyGet|WordDocPropertySet|WordDocSave|WordDocSaveAs|WordErrorHandlerDeRegister|WordErrorHandlerRegister|WordErrorNotify|WordMacroRun|WordPropertyGet|WordPropertySet|WordQuit|' +\n        'ce|comments-end|comments-start|cs|include|include-once|NoTrayIcon|RequireAdmin|' +\n        'AutoIt3Wrapper_Au3Check_Parameters|AutoIt3Wrapper_Au3Check_Stop_OnWarning|AutoIt3Wrapper_Change2CUI|AutoIt3Wrapper_Compression|AutoIt3Wrapper_cvsWrapper_Parameters|AutoIt3Wrapper_Icon|AutoIt3Wrapper_Outfile|AutoIt3Wrapper_Outfile_Type|AutoIt3Wrapper_Plugin_Funcs|AutoIt3Wrapper_Res_Comment|AutoIt3Wrapper_Res_Description|AutoIt3Wrapper_Res_Field|AutoIt3Wrapper_Res_File_Add|AutoIt3Wrapper_Res_Fileversion|AutoIt3Wrapper_Res_FileVersion_AutoIncrement|AutoIt3Wrapper_Res_Icon_Add|AutoIt3Wrapper_Res_Language|AutoIt3Wrapper_Res_LegalCopyright|AutoIt3Wrapper_res_requestedExecutionLevel|AutoIt3Wrapper_Res_SaveSource|AutoIt3Wrapper_Run_After|AutoIt3Wrapper_Run_Au3check|AutoIt3Wrapper_Run_Before|AutoIt3Wrapper_Run_cvsWrapper|AutoIt3Wrapper_Run_Debug_Mode|AutoIt3Wrapper_Run_Obfuscator|AutoIt3Wrapper_Run_Tidy|AutoIt3Wrapper_Tidy_Stop_OnError|AutoIt3Wrapper_UseAnsi|AutoIt3Wrapper_UseUpx|AutoIt3Wrapper_UseX64|AutoIt3Wrapper_Version|EndRegion|forceref|Obfuscator_Ignore_Funcs|Obfuscator_Ignore_Variables|Obfuscator_Parameters|Region|Tidy_Parameters';\n    var atKeywords = 'AppDataCommonDir|AppDataDir|AutoItExe|AutoItPID|AutoItUnicode|AutoItVersion|AutoItX64|COM_EventObj|CommonFilesDir|Compiled|ComputerName|ComSpec|CR|CRLF|DesktopCommonDir|DesktopDepth|DesktopDir|DesktopHeight|DesktopRefresh|DesktopWidth|DocumentsCommonDir|error|exitCode|exitMethod|extended|FavoritesCommonDir|FavoritesDir|GUI_CtrlHandle|GUI_CtrlId|GUI_DragFile|GUI_DragId|GUI_DropId|GUI_WinHandle|HomeDrive|HomePath|HomeShare|HotKeyPressed|HOUR|InetGetActive|InetGetBytesRead|IPAddress1|IPAddress2|IPAddress3|IPAddress4|KBLayout|LF|LogonDNSDomain|LogonDomain|LogonServer|MDAY|MIN|MON|MyDocumentsDir|NumParams|OSBuild|OSLang|OSServicePack|OSTYPE|OSVersion|ProcessorArch|ProgramFilesDir|ProgramsCommonDir|ProgramsDir|ScriptDir|ScriptFullPath|ScriptLineNumber|ScriptName|SEC|StartMenuCommonDir|StartMenuDir|StartupCommonDir|StartupDir|SW_DISABLE|SW_ENABLE|SW_HIDE|SW_LOCK|SW_MAXIMIZE|SW_MINIMIZE|SW_RESTORE|SW_SHOW|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWMINNOACTIVE|SW_SHOWNA|SW_SHOWNOACTIVATE|SW_SHOWNORMAL|SW_UNLOCK|SystemDir|TAB|TempDir|TRAY_ID|TrayIconFlashing|TrayIconVisible|UserName|UserProfileDir|WDAY|WindowsDir|WorkingDir|YDAY|YEAR';\n    this.$rules = { start: [{ token: 'comment.line.ahk', regex: '(?:^| );.*$' },\n            { token: 'comment.block.ahk',\n                regex: '/\\\\*', push: [{ token: 'comment.block.ahk', regex: '\\\\*/', next: 'pop' },\n                    { defaultToken: 'comment.block.ahk' }] },\n            { token: 'doc.comment.ahk',\n                regex: '#cs', push: [{ token: 'doc.comment.ahk', regex: '#ce', next: 'pop' },\n                    { defaultToken: 'doc.comment.ahk' }] },\n            { token: 'keyword.command.ahk',\n                regex: '(?:\\\\b|^)(?:allowsamelinecomments|clipboardtimeout|commentflag|errorstdout|escapechar|hotkeyinterval|hotkeymodifiertimeout|hotstring|include|includeagain|installkeybdhook|installmousehook|keyhistory|ltrim|maxhotkeysperinterval|maxmem|maxthreads|maxthreadsbuffer|maxthreadsperhotkey|noenv|notrayicon|persistent|singleinstance|usehook|winactivateforce|autotrim|blockinput|click|clipwait|continue|control|controlclick|controlfocus|controlget|controlgetfocus|controlgetpos|controlgettext|controlmove|controlsend|controlsendraw|controlsettext|coordmode|critical|detecthiddentext|detecthiddenwindows|drive|driveget|drivespacefree|edit|endrepeat|envadd|envdiv|envget|envmult|envset|envsub|envupdate|exit|exitapp|fileappend|filecopy|filecopydir|filecreatedir|filecreateshortcut|filedelete|filegetattrib|filegetshortcut|filegetsize|filegettime|filegetversion|fileinstall|filemove|filemovedir|fileread|filereadline|filerecycle|filerecycleempty|fileremovedir|fileselectfile|fileselectfolder|filesetattrib|filesettime|formattime|getkeystate|gosub|goto|groupactivate|groupadd|groupclose|groupdeactivate|gui|guicontrol|guicontrolget|hideautoitwin|hotkey|ifequal|ifexist|ifgreater|ifgreaterorequal|ifinstring|ifless|iflessorequal|ifmsgbox|ifnotequal|ifnotexist|ifnotinstring|ifwinactive|ifwinexist|ifwinnotactive|ifwinnotexist|imagesearch|inidelete|iniread|iniwrite|input|inputbox|keyhistory|keywait|listhotkeys|listlines|listvars|menu|mouseclick|mouseclickdrag|mousegetpos|mousemove|msgbox|onexit|outputdebug|pause|pixelgetcolor|pixelsearch|postmessage|process|progress|random|regdelete|regread|regwrite|reload|repeat|run|runas|runwait|send|sendevent|sendinput|sendmode|sendplay|sendmessage|sendraw|setbatchlines|setcapslockstate|setcontroldelay|setdefaultmousespeed|setenv|setformat|setkeydelay|setmousedelay|setnumlockstate|setscrolllockstate|setstorecapslockmode|settimer|settitlematchmode|setwindelay|setworkingdir|shutdown|sleep|sort|soundbeep|soundget|soundgetwavevolume|soundplay|soundset|soundsetwavevolume|splashimage|splashtextoff|splashtexton|splitpath|statusbargettext|statusbarwait|stringcasesense|stringgetpos|stringleft|stringlen|stringlower|stringmid|stringreplace|stringright|stringsplit|stringtrimleft|stringtrimright|stringupper|suspend|sysget|thread|tooltip|transform|traytip|urldownloadtofile|while|winactivate|winactivatebottom|winclose|winget|wingetactivestats|wingetactivetitle|wingetclass|wingetpos|wingettext|wingettitle|winhide|winkill|winmaximize|winmenuselectitem|winminimize|winminimizeall|winminimizeallundo|winmove|winrestore|winset|winsettitle|winshow|winwait|winwaitactive|winwaitclose|winwaitnotactive)\\\\b',\n                caseInsensitive: true },\n            { token: 'keyword.control.ahk',\n                regex: '(?:\\\\b|^)(?:if|else|return|loop|break|for|while|global|local|byref)\\\\b',\n                caseInsensitive: true },\n            { token: 'support.function.ahk',\n                regex: '(?:\\\\b|^)(?:abs|acos|asc|asin|atan|ceil|chr|cos|dllcall|exp|fileexist|floor|getkeystate|il_add|il_create|il_destroy|instr|substr|isfunc|islabel|ln|log|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|onmessage|numget|numput|registercallback|regexmatch|regexreplace|round|sin|tan|sqrt|strlen|sb_seticon|sb_setparts|sb_settext|tv_add|tv_delete|tv_getchild|tv_getcount|tv_getnext|tv_get|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist)\\\\b',\n                caseInsensitive: true },\n            { token: 'variable.predefined.ahk',\n                regex: '(?:\\\\b|^)(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_formatfloat|a_formatinteger|a_gui|a_guievent|a_guicontrol|a_guicontrolevent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|programfiles|a_programfiles|a_programs|a_programscommon|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel)\\\\b',\n                caseInsensitive: true },\n            { token: 'support.constant.ahk',\n                regex: '(?:\\\\b|^)(?:shift|lshift|rshift|alt|lalt|ralt|control|lcontrol|rcontrol|ctrl|lctrl|rctrl|lwin|rwin|appskey|altdown|altup|shiftdown|shiftup|ctrldown|ctrlup|lwindown|lwinup|rwindown|rwinup|lbutton|rbutton|mbutton|wheelup|wheelleft|wheelright|wheeldown|xbutton1|xbutton2|joy1|joy2|joy3|joy4|joy5|joy6|joy7|joy8|joy9|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy30|joy31|joy32|joyx|joyy|joyz|joyr|joyu|joyv|joypov|joyname|joybuttons|joyaxes|joyinfo|space|tab|enter|escape|esc|backspace|bs|delete|del|insert|ins|pgup|pgdn|home|end|up|down|left|right|printscreen|ctrlbreak|pause|scrolllock|capslock|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadmult|numpadadd|numpadsub|numpaddiv|numpaddot|numpaddel|numpadins|numpadclear|numpadup|numpaddown|numpadleft|numpadright|numpadhome|numpadend|numpadpgup|numpadpgdn|numpadenter|f1|f2|f3|f4|f5|f6|f7|f8|f9|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f20|f21|f22|f23|f24|browser_back|browser_forward|browser_refresh|browser_stop|browser_search|browser_favorites|browser_home|volume_mute|volume_down|volume_up|media_next|media_prev|media_stop|media_play_pause|launch_mail|launch_media|launch_app1|launch_app2)\\\\b',\n                caseInsensitive: true },\n            { token: 'variable.parameter',\n                regex: '(?:\\\\b|^)(?:pixel|mouse|screen|relative|rgb|ltrim|rtrim|join|low|belownormal|normal|abovenormal|high|realtime|ahk_id|ahk_pid|ahk_class|ahk_group|between|contains|in|is|integer|float|integerfast|floatfast|number|digit|xdigit|alpha|upper|lower|alnum|time|date|not|or|and|alwaysontop|topmost|top|bottom|transparent|transcolor|redraw|region|id|idlast|processname|minmax|controllist|count|list|capacity|statuscd|eject|lock|unlock|label|filesystem|label|setlabel|serial|type|status|static|seconds|minutes|hours|days|read|parse|logoff|close|error|single|tray|add|rename|check|uncheck|togglecheck|enable|disable|toggleenable|default|nodefault|standard|nostandard|color|delete|deleteall|icon|noicon|tip|click|show|mainwindow|nomainwindow|useerrorlevel|text|picture|pic|groupbox|button|checkbox|radio|dropdownlist|ddl|combobox|listbox|listview|datetime|monthcal|updown|slider|tab|tab2|statusbar|treeview|iconsmall|tile|report|sortdesc|nosort|nosorthdr|grid|hdr|autosize|range|xm|ym|ys|xs|xp|yp|font|resize|owner|submit|nohide|minimize|maximize|restore|noactivate|na|cancel|destroy|center|margin|maxsize|minsize|owndialogs|guiescape|guiclose|guisize|guicontextmenu|guidropfiles|tabstop|section|altsubmit|wrap|hscroll|vscroll|border|top|bottom|buttons|expand|first|imagelist|lines|wantctrla|wantf2|vis|visfirst|number|uppercase|lowercase|limit|password|multi|wantreturn|group|background|bold|italic|strike|underline|norm|backgroundtrans|theme|caption|delimiter|minimizebox|maximizebox|sysmenu|toolwindow|flash|style|exstyle|check3|checked|checkedgray|readonly|password|hidden|left|right|center|notab|section|move|focus|hide|choose|choosestring|text|pos|enabled|disabled|visible|lastfound|lastfoundexist|alttab|shiftalttab|alttabmenu|alttabandmenu|alttabmenudismiss|notimers|interrupt|priority|waitclose|blind|raw|unicode|deref|pow|bitnot|bitand|bitor|bitxor|bitshiftleft|bitshiftright|yes|no|ok|cancel|abort|retry|ignore|tryagain|on|off|all|hkey_local_machine|hkey_users|hkey_current_user|hkey_classes_root|hkey_current_config|hklm|hku|hkcu|hkcr|hkcc|reg_sz|reg_expand_sz|reg_multi_sz|reg_dword|reg_qword|reg_binary|reg_link|reg_resource_list|reg_full_resource_descriptor|reg_resource_requirements_list|reg_dword_big_endian)\\\\b',\n                caseInsensitive: true },\n            { keywordMap: { \"constant.language\": autoItKeywords }, regex: '\\\\w+\\\\b' },\n            { keywordMap: { \"variable.function\": atKeywords }, regex: '@\\\\w+\\\\b' },\n            { token: \"constant.numeric\", regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\" },\n            { token: 'keyword.operator.ahk',\n                regex: '=|==|<>|:=|<|>|\\\\*|\\\\/|\\\\+|:|\\\\?|\\\\-' },\n            { token: 'punctuation.ahk',\n                regex: /#|`|::|,|%/ },\n            { token: 'paren',\n                regex: /[{}()]/ },\n            { token: ['punctuation.quote.double',\n                    'string.quoted.ahk',\n                    'punctuation.quote.double'],\n                regex: '(\")((?:[^\"]|\"\")*)(\")' },\n            { token: ['label.ahk', 'punctuation.definition.label.ahk'],\n                regex: '^([^: ]+)(:)(?!:)' }] };\n    this.normalizeRules();\n};\nAutoHotKeyHighlightRules.metaData = { name: 'AutoHotKey',\n    scopeName: 'source.ahk',\n    fileTypes: ['ahk'],\n    foldingStartMarker: '^\\\\s*/\\\\*|^(?![^{]*?;|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|;|/\\\\*(?!.*?\\\\*/.*\\\\S))',\n    foldingStopMarker: '^\\\\s*\\\\*/|^\\\\s*\\\\}' };\noop.inherits(AutoHotKeyHighlightRules, TextHighlightRules);\nexports.AutoHotKeyHighlightRules = AutoHotKeyHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/autohotkey\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/autohotkey_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar AutoHotKeyHighlightRules = require(\"./autohotkey_highlight_rules\").AutoHotKeyHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = AutoHotKeyHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \";\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/autohotkey\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/autohotkey\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-batchfile.js",
    "content": "ace.define(\"ace/mode/batchfile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from C:\\Users\\LED\\AppData\\Roaming\\Sublime Text 2\\Packages\\Batch File\\Batch File.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar BatchFileHighlightRules = function () {\n    this.$rules = { start: [{ token: 'keyword.command.dosbatch',\n                regex: '\\\\b(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\\\\b',\n                caseInsensitive: true },\n            { token: 'keyword.control.statement.dosbatch',\n                regex: '\\\\b(?:goto|call|exit)\\\\b',\n                caseInsensitive: true },\n            { token: 'keyword.control.conditional.if.dosbatch',\n                regex: '\\\\bif\\\\s+not\\\\s+(?:exist|defined|errorlevel|cmdextversion)\\\\b',\n                caseInsensitive: true },\n            { token: 'keyword.control.conditional.dosbatch',\n                regex: '\\\\b(?:if|else)\\\\b',\n                caseInsensitive: true },\n            { token: 'keyword.control.repeat.dosbatch',\n                regex: '\\\\bfor\\\\b',\n                caseInsensitive: true },\n            { token: 'keyword.operator.dosbatch',\n                regex: '\\\\b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\\\\b' },\n            { token: ['doc.comment', 'comment'],\n                regex: '(?:^|\\\\b)(rem)($|\\\\s.*$)',\n                caseInsensitive: true },\n            { token: 'comment.line.colons.dosbatch',\n                regex: '::.*$' },\n            { include: 'variable' },\n            { token: 'punctuation.definition.string.begin.shell',\n                regex: '\"',\n                push: [\n                    { token: 'punctuation.definition.string.end.shell', regex: '\"', next: 'pop' },\n                    { include: 'variable' },\n                    { defaultToken: 'string.quoted.double.dosbatch' }\n                ] },\n            { token: 'keyword.operator.pipe.dosbatch', regex: '[|]' },\n            { token: 'keyword.operator.redirect.shell',\n                regex: '&>|\\\\d*>&\\\\d*|\\\\d*(?:>>|>|<)|\\\\d*<&|\\\\d*<>' }],\n        variable: [\n            { token: 'constant.numeric', regex: '%%\\\\w+|%[*\\\\d]|%\\\\w+%' },\n            { token: 'constant.numeric', regex: '%~\\\\d+' },\n            { token: ['markup.list', 'constant.other', 'markup.list'],\n                regex: '(%)(\\\\w+)(%?)' }\n        ] };\n    this.normalizeRules();\n};\nBatchFileHighlightRules.metaData = { name: 'Batch File',\n    scopeName: 'source.dosbatch',\n    fileTypes: ['bat'] };\noop.inherits(BatchFileHighlightRules, TextHighlightRules);\nexports.BatchFileHighlightRules = BatchFileHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/batchfile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/batchfile_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar BatchFileHighlightRules = require(\"./batchfile_highlight_rules\").BatchFileHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = BatchFileHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"::\";\n    this.blockComment = \"\";\n    this.$id = \"ace/mode/batchfile\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/batchfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-bibtex.js",
    "content": "ace.define(\"ace/mode/bibtex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar BibTeXHighlightRules = function () {\n    this.$rules = {\n        start: [\n            {\n                token: \"comment\",\n                regex: /@Comment\\{/,\n                stateName: \"bibtexComment\",\n                push: [\n                    {\n                        token: \"comment\",\n                        regex: /}/,\n                        next: \"pop\"\n                    }, {\n                        token: \"comment\",\n                        regex: /\\{/,\n                        push: \"bibtexComment\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }\n                ]\n            }, {\n                token: [\n                    \"keyword\", \"text\", \"paren.lparen\", \"text\", \"variable\", \"text\", \"keyword.operator\"\n                ],\n                regex: /(@String)(\\s*)(\\{)(\\s*)([a-zA-Z]*)(\\s*)(=)/,\n                push: [\n                    {\n                        token: \"paren.rparen\",\n                        regex: /\\}/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#misc\"\n                    }, {\n                        defaultToken: \"text\"\n                    }\n                ]\n            }, {\n                token: [\n                    \"keyword\", \"text\", \"paren.lparen\", \"text\", \"variable\", \"text\", \"keyword.operator\"\n                ],\n                regex: /(@String)(\\s*)(\\()(\\s*)([a-zA-Z]*)(\\s*)(=)/,\n                push: [\n                    {\n                        token: \"paren.rparen\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#misc\"\n                    }, {\n                        defaultToken: \"text\"\n                    }\n                ]\n            }, {\n                token: [\n                    \"keyword\", \"text\", \"paren.lparen\"\n                ],\n                regex: /(@preamble)(\\s*)(\\()/,\n                push: [\n                    {\n                        token: \"paren.rparen\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#misc\"\n                    }, {\n                        defaultToken: \"text\"\n                    }\n                ]\n            }, {\n                token: [\n                    \"keyword\", \"text\", \"paren.lparen\"\n                ],\n                regex: /(@preamble)(\\s*)(\\{)/,\n                push: [\n                    {\n                        token: \"paren.rparen\",\n                        regex: /\\}/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#misc\"\n                    }, {\n                        defaultToken: \"text\"\n                    }\n                ]\n            }, {\n                token: [\n                    \"keyword\", \"text\", \"paren.lparen\", \"text\", \"support.class\"\n                ],\n                regex: /(@[a-zA-Z]+)(\\s*)(\\{)(\\s*)([\\w-]+)/,\n                push: [\n                    {\n                        token: \"paren.rparen\",\n                        regex: /\\}/,\n                        next: \"pop\"\n                    }, {\n                        token: [\n                            \"variable\", \"text\", \"keyword.operator\"\n                        ],\n                        regex: /([a-zA-Z0-9\\!\\$\\&\\*\\+\\-\\.\\/\\:\\;\\<\\>\\?\\[\\]\\^\\_\\`\\|]+)(\\s*)(=)/,\n                        push: [\n                            {\n                                token: \"text\",\n                                regex: /(?=[,}])/,\n                                next: \"pop\"\n                            }, {\n                                include: \"#misc\"\n                            }, {\n                                include: \"#integer\"\n                            }, {\n                                defaultToken: \"text\"\n                            }\n                        ]\n                    }, {\n                        token: \"punctuation\",\n                        regex: /,/\n                    }, {\n                        defaultToken: \"text\"\n                    }\n                ]\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"#integer\": [\n            {\n                token: \"constant.numeric.bibtex\",\n                regex: /\\d+/\n            }\n        ],\n        \"#misc\": [\n            {\n                token: \"string\",\n                regex: /\"/,\n                push: \"#string_quotes\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /\\{/,\n                push: \"#string_braces\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /#/\n            }\n        ],\n        \"#string_braces\": [\n            {\n                token: \"paren.rparen\",\n                regex: /\\}/,\n                next: \"pop\"\n            }, {\n                token: \"invalid.illegal\",\n                regex: /@/\n            }, {\n                include: \"#misc\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"#string_quotes\": [\n            {\n                token: \"string\",\n                regex: /\"/,\n                next: \"pop\"\n            }, {\n                include: \"#misc\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(BibTeXHighlightRules, TextHighlightRules);\nexports.BibTeXHighlightRules = BibTeXHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/bibtex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/bibtex_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar BibTeXHighlightRules = require(\"./bibtex_highlight_rules\").BibTeXHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = BibTeXHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/bibtex\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/bibtex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-c9search.js",
    "content": "ace.define(\"ace/mode/c9search_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nfunction safeCreateRegexp(source, flag) {\n    try {\n        return new RegExp(source, flag);\n    }\n    catch (e) { }\n}\nvar C9SearchHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                tokenNames: [\"c9searchresults.constant.numeric\", \"c9searchresults.text\", \"c9searchresults.text\", \"c9searchresults.keyword\"],\n                regex: /(^\\s+[0-9]+)(:)(\\d*\\s?)([^\\r\\n]+)/,\n                onMatch: function (val, state, stack) {\n                    var values = this.splitRegex.exec(val);\n                    var types = this.tokenNames;\n                    var tokens = [{\n                            type: types[0],\n                            value: values[1]\n                        }, {\n                            type: types[1],\n                            value: values[2]\n                        }];\n                    if (values[3]) {\n                        if (values[3] == \" \")\n                            tokens[1] = { type: types[1], value: values[2] + \" \" };\n                        else\n                            tokens.push({ type: types[1], value: values[3] });\n                    }\n                    var regex = stack[1];\n                    var str = values[4];\n                    var m;\n                    var last = 0;\n                    if (regex && regex.exec) {\n                        regex.lastIndex = 0;\n                        while (m = regex.exec(str)) {\n                            var skipped = str.substring(last, m.index);\n                            last = regex.lastIndex;\n                            if (skipped)\n                                tokens.push({ type: types[2], value: skipped });\n                            if (m[0])\n                                tokens.push({ type: types[3], value: m[0] });\n                            else if (!skipped)\n                                break;\n                        }\n                    }\n                    if (last < str.length)\n                        tokens.push({ type: types[2], value: str.substr(last) });\n                    return tokens;\n                }\n            },\n            {\n                regex: \"^Searching for [^\\\\r\\\\n]*$\",\n                onMatch: function (val, state, stack) {\n                    var parts = val.split(\"\\x01\");\n                    if (parts.length < 3)\n                        return \"text\";\n                    var options, search;\n                    var i = 0;\n                    var tokens = [{\n                            value: parts[i++] + \"'\",\n                            type: \"text\"\n                        }, {\n                            value: search = parts[i++],\n                            type: \"text\" // \"c9searchresults.keyword\"\n                        }, {\n                            value: \"'\" + parts[i++],\n                            type: \"text\"\n                        }];\n                    if (parts[2] !== \" in\") {\n                        tokens.push({\n                            value: \"'\" + parts[i++] + \"'\",\n                            type: \"text\"\n                        }, {\n                            value: parts[i++],\n                            type: \"text\"\n                        });\n                    }\n                    tokens.push({\n                        value: \" \" + parts[i++] + \" \",\n                        type: \"text\"\n                    });\n                    if (parts[i + 1]) {\n                        options = parts[i + 1];\n                        tokens.push({\n                            value: \"(\" + parts[i + 1] + \")\",\n                            type: \"text\"\n                        });\n                        i += 1;\n                    }\n                    else {\n                        i -= 1;\n                    }\n                    while (i++ < parts.length) {\n                        parts[i] && tokens.push({\n                            value: parts[i],\n                            type: \"text\"\n                        });\n                    }\n                    if (search) {\n                        if (!/regex/.test(options))\n                            search = lang.escapeRegExp(search);\n                        if (/whole/.test(options))\n                            search = \"\\\\b\" + search + \"\\\\b\";\n                    }\n                    var regex = search && safeCreateRegexp(\"(\" + search + \")\", / sensitive/.test(options) ? \"g\" : \"ig\");\n                    if (regex) {\n                        stack[0] = state;\n                        stack[1] = regex;\n                    }\n                    return tokens;\n                }\n            },\n            {\n                regex: \"^(?=Found \\\\d+ matches)\",\n                token: \"text\",\n                next: \"numbers\"\n            },\n            {\n                token: \"string\",\n                regex: \"^\\\\S:?[^:]+\",\n                next: \"numbers\"\n            }\n        ],\n        numbers: [{\n                regex: \"\\\\d+\",\n                token: \"constant.numeric\"\n            }, {\n                regex: \"$\",\n                token: \"text\",\n                next: \"start\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(C9SearchHighlightRules, TextHighlightRules);\nexports.C9SearchHighlightRules = C9SearchHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/c9search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /^(\\S.*:|Searching for.*)$/;\n    this.foldingStopMarker = /^(\\s+|Found.*)$/;\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var lines = session.doc.getAllLines(row);\n        var line = lines[row];\n        var level1 = /^(Found.*|Searching for.*)$/;\n        var level2 = /^(\\S.*:|\\s*)$/;\n        var re = level1.test(line) ? level1 : level2;\n        var startRow = row;\n        var endRow = row;\n        if (this.foldingStartMarker.test(line)) {\n            for (var i = row + 1, l = session.getLength(); i < l; i++) {\n                if (re.test(lines[i]))\n                    break;\n            }\n            endRow = i;\n        }\n        else if (this.foldingStopMarker.test(line)) {\n            for (var i = row - 1; i >= 0; i--) {\n                line = lines[i];\n                if (re.test(line))\n                    break;\n            }\n            startRow = i;\n        }\n        if (startRow != endRow) {\n            var col = line.length;\n            if (re === level1)\n                col = line.search(/\\(Found[^)]+\\)$|$/);\n            return new Range(startRow, col, endRow, 0);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/c9search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c9search_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/c9search\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar C9SearchHighlightRules = require(\"./c9search_highlight_rules\").C9SearchHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar C9StyleFoldMode = require(\"./folding/c9search\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = C9SearchHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new C9StyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/c9search\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/c9search\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-c_cpp.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\nvar c_cppHighlightRules = function () {\n    var keywordControls = (\"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\");\n    var storageType = (\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|int8_t|int16_t|int32_t|int64_t|long|short|signed|size_t|struct|typedef|uint8_t|uint16_t|uint32_t|uint64_t|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\");\n    var storageModifiers = (\"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\");\n    var keywordOperators = (\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\");\n    var builtinConstants = (\"NULL|true|false|TRUE|FALSE|nullptr\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\": keywordControls,\n        \"storage.type\": storageType,\n        \"storage.modifier\": storageModifiers,\n        \"keyword.operator\": keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n        + /(\\d+\\$)?/.source // field (argument #)\n        + /[#0\\- +']*/.source // flags\n        + /[,;:_]?/.source // separator character (AltiVec)\n        + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n        + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n        + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n        + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"//$\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \"//\",\n                next: \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"string.start\",\n                regex: 'R\"\\\\(',\n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next: \"directive\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token: \"support.function.C99.c\",\n                regex: cFunctions\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"singleLineComment\": [\n            {\n                token: \"comment\",\n                regex: /\\\\$/,\n                next: \"singleLineComment\"\n            }, {\n                token: \"comment\",\n                regex: /$/,\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\": [\n            {\n                token: \"constant.other.multiline\",\n                regex: /\\\\/\n            },\n            {\n                token: \"constant.other.multiline\",\n                regex: /.*\\\\/\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*<.+?>\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: /[^\\\\\\/]+/,\n                next: \"start\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(c_cppHighlightRules, TextHighlightRules);\nexports.c_cppHighlightRules = c_cppHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = c_cppHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/c_cpp\";\n    this.snippetFileId = \"ace/snippets/c_cpp\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/c_cpp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-cirru.js",
    "content": "ace.define(\"ace/mode/cirru_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CirruHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                token: 'constant.numeric',\n                regex: /[\\d\\.]+/\n            }, {\n                token: 'comment.line.double-dash',\n                regex: /--/,\n                next: 'comment'\n            }, {\n                token: 'storage.modifier',\n                regex: /\\(/\n            }, {\n                token: 'storage.modifier',\n                regex: /,/,\n                next: 'line'\n            }, {\n                token: 'support.function',\n                regex: /[^\\(\\)\"\\s{}\\[\\]]+/,\n                next: 'line'\n            }, {\n                token: 'string.quoted.double',\n                regex: /\"/,\n                next: 'string'\n            }, {\n                token: 'storage.modifier',\n                regex: /\\)/\n            }],\n        comment: [{\n                token: 'comment.line.double-dash',\n                regex: / +[^\\n]+/,\n                next: 'start'\n            }],\n        string: [{\n                token: 'string.quoted.double',\n                regex: /\"/,\n                next: 'line'\n            }, {\n                token: 'constant.character.escape',\n                regex: /\\\\/,\n                next: 'escape'\n            }, {\n                token: 'string.quoted.double',\n                regex: /[^\\\\\"]+/\n            }],\n        escape: [{\n                token: 'constant.character.escape',\n                regex: /./,\n                next: 'string'\n            }],\n        line: [{\n                token: 'constant.numeric',\n                regex: /[\\d\\.]+/\n            }, {\n                token: 'markup.raw',\n                regex: /^\\s*/,\n                next: 'start'\n            }, {\n                token: 'storage.modifier',\n                regex: /\\$/,\n                next: 'start'\n            }, {\n                token: 'variable.parameter',\n                regex: /[^\\(\\)\"\\s{}\\[\\]]+/\n            }, {\n                token: 'storage.modifier',\n                regex: /\\(/,\n                next: 'start'\n            }, {\n                token: 'storage.modifier',\n                regex: /\\)/\n            }, {\n                token: 'markup.raw',\n                regex: /^ */,\n                next: 'start'\n            }, {\n                token: 'string.quoted.double',\n                regex: /\"/,\n                next: 'string'\n            }]\n    };\n};\noop.inherits(CirruHighlightRules, TextHighlightRules);\nexports.CirruHighlightRules = CirruHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/cirru\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/cirru_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CirruHighlightRules = require(\"./cirru_highlight_rules\").CirruHighlightRules;\nvar CoffeeFoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CirruHighlightRules;\n    this.foldingRules = new CoffeeFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.$id = \"ace/mode/cirru\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/cirru\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-clojure.js",
    "content": "ace.define(\"ace/mode/clojure_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ClojureHighlightRules = function () {\n    var builtinFunctions = ('* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* ' +\n        '*command-line-args* *compile-files* *compile-path* *e *err* *file* ' +\n        '*flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* ' +\n        '*print-dup* *print-length* *print-level* *print-meta* *print-readably* ' +\n        '*read-eval* *source-path* *use-context-classloader* ' +\n        '*warn-on-reflection* + - -> ->> .. / < <= = ' +\n        '== > &gt; >= &gt;= accessor aclone ' +\n        'add-classpath add-watch agent agent-errors aget alength alias all-ns ' +\n        'alter alter-meta! alter-var-root amap ancestors and apply areduce ' +\n        'array-map aset aset-boolean aset-byte aset-char aset-double aset-float ' +\n        'aset-int aset-long aset-short assert assoc assoc! assoc-in associative? ' +\n        'atom await await-for await1 bases bean bigdec bigint binding bit-and ' +\n        'bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left ' +\n        'bit-shift-right bit-test bit-xor boolean boolean-array booleans ' +\n        'bound-fn bound-fn* butlast byte byte-array bytes cast char char-array ' +\n        'char-escape-string char-name-string char? chars chunk chunk-append ' +\n        'chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? ' +\n        'class class? clear-agent-errors clojure-version coll? comment commute ' +\n        'comp comparator compare compare-and-set! compile complement concat cond ' +\n        'condp conj conj! cons constantly construct-proxy contains? count ' +\n        'counted? create-ns create-struct cycle dec decimal? declare definline ' +\n        'defmacro defmethod defmulti defn defn- defonce defstruct delay delay? ' +\n        'deliver deref derive descendants destructure disj disj! dissoc dissoc! ' +\n        'distinct distinct? doall doc dorun doseq dosync dotimes doto double ' +\n        'double-array doubles drop drop-last drop-while empty empty? ensure ' +\n        'enumeration-seq eval even? every? false? ffirst file-seq filter find ' +\n        'find-doc find-ns find-var first float float-array float? floats flush ' +\n        'fn fn? fnext for force format future future-call future-cancel ' +\n        'future-cancelled? future-done? future? gen-class gen-interface gensym ' +\n        'get get-in get-method get-proxy-class get-thread-bindings get-validator ' +\n        'hash hash-map hash-set identical? identity if-let if-not ifn? import ' +\n        'in-ns inc init-proxy instance? int int-array integer? interleave intern ' +\n        'interpose into into-array ints io! isa? iterate iterator-seq juxt key ' +\n        'keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list ' +\n        'list* list? load load-file load-reader load-string loaded-libs locking ' +\n        'long long-array longs loop macroexpand macroexpand-1 make-array ' +\n        'make-hierarchy map map? mapcat max max-key memfn memoize merge ' +\n        'merge-with meta method-sig methods min min-key mod name namespace neg? ' +\n        'newline next nfirst nil? nnext not not-any? not-empty not-every? not= ' +\n        'ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ' +\n        'ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? ' +\n        'or parents partial partition pcalls peek persistent! pmap pop pop! ' +\n        'pop-thread-bindings pos? pr pr-str prefer-method prefers ' +\n        'primitives-classnames print print-ctor print-doc print-dup print-method ' +\n        'print-namespace-doc print-simple print-special-doc print-str printf ' +\n        'println println-str prn prn-str promise proxy proxy-call-with-super ' +\n        'proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot ' +\n        'rand rand-int range ratio? rational? rationalize re-find re-groups ' +\n        're-matcher re-matches re-pattern re-seq read read-line read-string ' +\n        'reduce ref ref-history-count ref-max-history ref-min-history ref-set ' +\n        'refer refer-clojure release-pending-sends rem remove remove-method ' +\n        'remove-ns remove-watch repeat repeatedly replace replicate require ' +\n        'reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq ' +\n        'rsubseq second select-keys send send-off seq seq? seque sequence ' +\n        'sequential? set set-validator! set? short short-array shorts ' +\n        'shutdown-agents slurp some sort sort-by sorted-map sorted-map-by ' +\n        'sorted-set sorted-set-by sorted? special-form-anchor special-symbol? ' +\n        'split-at split-with str stream? string? struct struct-map subs subseq ' +\n        'subvec supers swap! symbol symbol? sync syntax-symbol-anchor take ' +\n        'take-last take-nth take-while test the-ns time to-array to-array-2d ' +\n        'trampoline transient tree-seq true? type unchecked-add unchecked-dec ' +\n        'unchecked-divide unchecked-inc unchecked-multiply unchecked-negate ' +\n        'unchecked-remainder unchecked-subtract underive unquote ' +\n        'unquote-splicing update-in update-proxy use val vals var-get var-set ' +\n        'var? vary-meta vec vector vector? when when-first when-let when-not ' +\n        'while with-bindings with-bindings* with-in-str with-loading-context ' +\n        'with-local-vars with-meta with-open with-out-str with-precision xml-seq ' +\n        'zero? zipmap');\n    var keywords = ('throw try var ' +\n        'def do fn if let loop monitor-enter monitor-exit new quote recur set!');\n    var buildinConstants = (\"true false nil\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\", false, \" \");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \";.*$\"\n            }, {\n                token: \"keyword\",\n                regex: \"[\\\\(|\\\\)]\"\n            }, {\n                token: \"keyword\",\n                regex: \"[\\\\'\\\\(]\"\n            }, {\n                token: \"keyword\",\n                regex: \"[\\\\[|\\\\]]\"\n            }, {\n                token: \"keyword\",\n                regex: \"[\\\\{|\\\\}|\\\\#\\\\{|\\\\#\\\\}]\"\n            }, {\n                token: \"keyword\",\n                regex: '[\\\\&]'\n            }, {\n                token: \"keyword\",\n                regex: '[\\\\#\\\\^\\\\{]'\n            }, {\n                token: \"keyword\",\n                regex: '[\\\\%]'\n            }, {\n                token: \"keyword\",\n                regex: '[@]'\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language\",\n                regex: '[!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+||=|!=|<=|>=|<>|<|>|!|&&]'\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"\n            }, {\n                token: \"string\",\n                regex: '\"',\n                next: \"string\"\n            }, {\n                token: \"constant\",\n                regex: /:[^()\\[\\]{}'\"\\^%`,;\\s]+/\n            }, {\n                token: \"string.regexp\",\n                regex: '/#\"(?:\\\\.|(?:\\\\\")|[^\"\"\\n])*\"/g'\n            }\n        ],\n        \"string\": [\n            {\n                token: \"constant.language.escape\",\n                regex: \"\\\\\\\\.|\\\\\\\\$\"\n            }, {\n                token: \"string\",\n                regex: '[^\"\\\\\\\\]+'\n            }, {\n                token: \"string\",\n                regex: '\"',\n                next: \"start\"\n            }\n        ]\n    };\n};\noop.inherits(ClojureHighlightRules, TextHighlightRules);\nexports.ClojureHighlightRules = ClojureHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_parens_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingParensOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\)/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\))/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        var match = line.match(/^(\\s+)/);\n        if (match) {\n            return match[1];\n        }\n        return \"\";\n    };\n}).call(MatchingParensOutdent.prototype);\nexports.MatchingParensOutdent = MatchingParensOutdent;\n\n});\n\nace.define(\"ace/mode/clojure\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/clojure_highlight_rules\",\"ace/mode/matching_parens_outdent\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ClojureHighlightRules = require(\"./clojure_highlight_rules\").ClojureHighlightRules;\nvar MatchingParensOutdent = require(\"./matching_parens_outdent\").MatchingParensOutdent;\nvar Mode = function () {\n    this.HighlightRules = ClojureHighlightRules;\n    this.$outdent = new MatchingParensOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \";\";\n    this.minorIndentFunctions = [\"defn\", \"defn-\", \"defmacro\", \"def\", \"deftest\", \"testing\"];\n    this.$toIndent = function (str) {\n        return str.split('').map(function (ch) {\n            if (/\\s/.exec(ch)) {\n                return ch;\n            }\n            else {\n                return ' ';\n            }\n        }).join('');\n    };\n    this.$calculateIndent = function (line, tab) {\n        var baseIndent = this.$getIndent(line);\n        var delta = 0;\n        var isParen, ch;\n        for (var i = line.length - 1; i >= 0; i--) {\n            ch = line[i];\n            if (ch === '(') {\n                delta--;\n                isParen = true;\n            }\n            else if (ch === '(' || ch === '[' || ch === '{') {\n                delta--;\n                isParen = false;\n            }\n            else if (ch === ')' || ch === ']' || ch === '}') {\n                delta++;\n            }\n            if (delta < 0) {\n                break;\n            }\n        }\n        if (delta < 0 && isParen) {\n            i += 1;\n            var iBefore = i;\n            var fn = '';\n            while (true) {\n                ch = line[i];\n                if (ch === ' ' || ch === '\\t') {\n                    if (this.minorIndentFunctions.indexOf(fn) !== -1) {\n                        return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                    }\n                    else {\n                        return this.$toIndent(line.substring(0, i + 1));\n                    }\n                }\n                else if (ch === undefined) {\n                    return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                }\n                fn += line[i];\n                i++;\n            }\n        }\n        else if (delta < 0 && !isParen) {\n            return this.$toIndent(line.substring(0, i + 1));\n        }\n        else if (delta > 0) {\n            baseIndent = baseIndent.substring(0, baseIndent.length - tab.length);\n            return baseIndent;\n        }\n        else {\n            return baseIndent;\n        }\n    };\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$calculateIndent(line, tab);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/clojure\";\n    this.snippetFileId = \"ace/snippets/clojure\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/clojure\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-cobol.js",
    "content": "ace.define(\"ace/mode/cobol_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CobolHighlightRules = function () {\n    var keywords = \"ACCEPT|MERGE|SUM|ADD||MESSAGE|TABLE|ADVANCING|MODE|TAPE|\" +\n        \"AFTER|MULTIPLY|TEST|ALL|NEGATIVE|TEXT|ALPHABET|NEXT|THAN|\" +\n        \"ALSO|NO|THEN|ALTERNATE|NOT|THROUGH|AND|NUMBER|THRU|ANY|OCCURS|\" +\n        \"TIME|ARE|OF|TO|AREA|OFF|TOP||ASCENDING|OMITTED|TRUE|ASSIGN|ON|TYPE|AT|OPEN|\" +\n        \"UNIT|AUTHOR|OR|UNTIL|BEFORE|OTHER|UP|BLANK|OUTPUT|USE|BLOCK|PAGE|USING|BOTTOM|\" +\n        \"PERFORM|VALUE|BY|PIC|VALUES|CALL|PICTURE|WHEN|CANCEL|PLUS|WITH|CD|POINTER|WRITE|\" +\n        \"CHARACTER|POSITION||ZERO|CLOSE|POSITIVE|ZEROS|COLUMN|PROCEDURE|ZEROES|COMMA|PROGRAM|\" +\n        \"COMMON|PROGRAM-ID|COMMUNICATION|QUOTE|COMP|RANDOM|COMPUTE|READ|CONTAINS|RECEIVE|CONFIGURATION|\" +\n        \"RECORD|CONTINUE|REDEFINES|CONTROL|REFERENCE|COPY|REMAINDER|COUNT|REPLACE|DATA|REPORT|DATE|RESERVE|\" +\n        \"DAY|RESET|DELETE|RETURN|DESTINATION|REWIND|DISABLE|REWRITE|DISPLAY|RIGHT|DIVIDE|RUN|DOWN|SAME|\" +\n        \"ELSE|SEARCH|ENABLE|SECTION|END|SELECT|ENVIRONMENT|SENTENCE|EQUAL|SET|ERROR|SIGN|EXIT|SEQUENTIAL|\" +\n        \"EXTERNAL|SIZE|FLASE|SORT|FILE|SOURCE|LENGTH|SPACE|LESS|STANDARD|LIMIT|START|LINE|STOP|LOCK|STRING|LOW-VALUE|SUBTRACT\";\n    var builtinConstants = (\"true|false|null\");\n    var builtinFunctions = (\"count|min|max|avg|sum|rank|now|coalesce|main\");\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"\\\\*.*$\"\n            }, {\n                token: \"string\",\n                regex: '\".*?\"'\n            }, {\n                token: \"string\",\n                regex: \"'.*?'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }]\n    };\n};\noop.inherits(CobolHighlightRules, TextHighlightRules);\nexports.CobolHighlightRules = CobolHighlightRules;\n\n});\n\nace.define(\"ace/mode/cobol\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/cobol_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CobolHighlightRules = require(\"./cobol_highlight_rules\").CobolHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = CobolHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"*\";\n    this.$id = \"ace/mode/cobol\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/cobol\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-coffee.js",
    "content": "ace.define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\noop.inherits(CoffeeHighlightRules, TextHighlightRules);\nfunction CoffeeHighlightRules() {\n    var identifier = \"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\";\n    var keywords = (\"this|throw|then|try|typeof|super|switch|return|break|by|continue|\" +\n        \"catch|class|in|instanceof|is|isnt|if|else|extends|for|own|\" +\n        \"finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|\" +\n        \"or|on|unless|until|and|yes|yield|export|import|default\");\n    var langConstant = (\"true|false|null|undefined|NaN|Infinity\");\n    var illegal = (\"case|const|function|var|void|with|enum|implements|\" +\n        \"interface|let|package|private|protected|public|static\");\n    var supportClass = (\"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|\" +\n        \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" +\n        \"SyntaxError|TypeError|URIError|\" +\n        \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n        \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\");\n    var supportFunction = (\"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|\" +\n        \"encodeURIComponent|decodeURI|decodeURIComponent|String|\");\n    var variableLanguage = (\"window|arguments|prototype|document\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": langConstant,\n        \"invalid.illegal\": illegal,\n        \"language.support.class\": supportClass,\n        \"language.support.function\": supportFunction,\n        \"variable.language\": variableLanguage\n    }, \"identifier\");\n    var functionRule = {\n        token: [\"paren.lparen\", \"variable.parameter\", \"paren.rparen\", \"text\", \"storage.type\"],\n        regex: /(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source\n    };\n    var stringEscape = /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;\n    this.$rules = {\n        start: [\n            {\n                token: \"constant.numeric\",\n                regex: \"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"\n            }, {\n                stateName: \"qdoc\",\n                token: \"string\", regex: \"'''\", next: [\n                    { token: \"string\", regex: \"'''\", next: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                stateName: \"qqdoc\",\n                token: \"string\",\n                regex: '\"\"\"',\n                next: [\n                    { token: \"string\", regex: '\"\"\"', next: \"start\" },\n                    { token: \"paren.string\", regex: '#{', push: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                stateName: \"qstring\",\n                token: \"string\", regex: \"'\", next: [\n                    { token: \"string\", regex: \"'\", next: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                stateName: \"qqstring\",\n                token: \"string.start\", regex: '\"', next: [\n                    { token: \"string.end\", regex: '\"', next: \"start\" },\n                    { token: \"paren.string\", regex: '#{', push: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                stateName: \"js\",\n                token: \"string\", regex: \"`\", next: [\n                    { token: \"string\", regex: \"`\", next: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                regex: \"[{}]\", onMatch: function (val, state, stack) {\n                    this.next = \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift() || \"\";\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.string\";\n                    }\n                    return \"paren\";\n                }\n            }, {\n                token: \"string.regex\",\n                regex: \"///\",\n                next: \"heregex\"\n            }, {\n                token: \"string.regex\",\n                regex: /(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/\n            }, {\n                token: \"comment\",\n                regex: \"###(?!#)\",\n                next: \"comment\"\n            }, {\n                token: \"comment\",\n                regex: \"#.*\"\n            }, {\n                token: [\"punctuation.operator\", \"text\", \"identifier\"],\n                regex: \"(\\\\.)(\\\\s*)(\" + illegal + \")\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\.{1,3}\"\n            }, {\n                token: [\"keyword\", \"text\", \"language.support.class\",\n                    \"text\", \"keyword\", \"text\", \"language.support.class\"],\n                regex: \"(class)(\\\\s+)(\" + identifier + \")(?:(\\\\s+)(extends)(\\\\s+)(\" + identifier + \"))?\"\n            }, {\n                token: [\"entity.name.function\", \"text\", \"keyword.operator\", \"text\"].concat(functionRule.token),\n                regex: \"(\" + identifier + \")(\\\\s*)([=:])(\\\\s*)\" + functionRule.regex\n            },\n            functionRule,\n            {\n                token: \"variable\",\n                regex: \"@(?:\" + identifier + \")?\"\n            }, {\n                token: keywordMapper,\n                regex: identifier\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\,|\\\\.\"\n            }, {\n                token: \"storage.type\",\n                regex: \"[\\\\-=]>\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[({[]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]})]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        heregex: [{\n                token: \"string.regex\",\n                regex: '.*?///[imgy]{0,4}',\n                next: \"start\"\n            }, {\n                token: \"comment.regex\",\n                regex: \"\\\\s+(?:#.*)?\"\n            }, {\n                token: \"string.regex\",\n                regex: \"\\\\S+\"\n            }],\n        comment: [{\n                token: \"comment\",\n                regex: '###',\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }]\n    };\n    this.normalizeRules();\n}\nexports.CoffeeHighlightRules = CoffeeHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/coffee\",[\"require\",\"exports\",\"module\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/worker/worker_client\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Rules = require(\"./coffee_highlight_rules\").CoffeeHighlightRules;\nvar Outdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\nfunction Mode() {\n    this.HighlightRules = Rules;\n    this.$outdent = new Outdent();\n    this.foldingRules = new FoldMode();\n}\noop.inherits(Mode, TextMode);\n(function () {\n    var indenter = /(?:[({[=:]|[-=]>|\\b(?:else|try|(?:swi|ca)tch(?:\\s+[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?|finally))\\s*$|^\\s*(else\\b\\s*)?(?:if|for|while|loop)\\b(?!.*\\bthen\\b)/;\n    this.lineCommentStart = \"#\";\n    this.blockComment = { start: \"###\", end: \"###\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&\n            state === 'start' && indenter.test(line))\n            indent += tab;\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/coffee_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/coffee\";\n    this.snippetFileId = \"ace/snippets/coffee\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/coffee\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-coldfusion.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/coldfusion_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar ColdfusionHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    this.$rules.tag[2].token = function (start, tag) {\n        var group = tag.slice(0, 2) == \"cf\" ? \"keyword\" : \"meta.tag\";\n        return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n            group + \".tag-name.xml\"];\n    };\n    var jsAndCss = Object.keys(this.$rules).filter(function (x) {\n        return /^(js|css)-/.test(x);\n    });\n    this.embedRules({\n        cfmlComment: [\n            { regex: \"<!---\", token: \"comment.start\", push: \"cfmlComment\" },\n            { regex: \"--->\", token: \"comment.end\", next: \"pop\" },\n            { defaultToken: \"comment\" }\n        ]\n    }, \"\", [\n        { regex: \"<!---\", token: \"comment.start\", push: \"cfmlComment\" }\n    ], [\n        \"comment\", \"start\", \"tag_whitespace\", \"cdata\"\n    ].concat(jsAndCss));\n    this.$rules.cfTag = [\n        { include: \"attributes\" },\n        { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"pop\" }\n    ];\n    var cfTag = {\n        token: function (start, tag) {\n            return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                \"keyword.tag-name.xml\"];\n        },\n        regex: \"(</?)(cf[-_a-zA-Z0-9:.]+)\",\n        push: \"cfTag\"\n    };\n    jsAndCss.forEach(function (s) {\n        this.$rules[s].unshift(cfTag);\n    }, this);\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"cfjs-\", \"cfscript\");\n    this.normalizeRules();\n};\noop.inherits(ColdfusionHighlightRules, HtmlHighlightRules);\nexports.ColdfusionHighlightRules = ColdfusionHighlightRules;\n\n});\n\nace.define(\"ace/mode/coldfusion\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html\",\"ace/mode/coldfusion_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar HtmlMode = require(\"./html\").Mode;\nvar ColdfusionHighlightRules = require(\"./coldfusion_highlight_rules\").ColdfusionHighlightRules;\nvar voidElements = \"cfabort|cfapplication|cfargument|cfassociate|cfbreak|cfcache|cfcollection|cfcookie|cfdbinfo|cfdirectory|cfdump|cfelse|cfelseif|cferror|cfexchangecalendar|cfexchangeconnection|cfexchangecontact|cfexchangefilter|cfexchangetask|cfexit|cffeed|cffile|cfflush|cfftp|cfheader|cfhtmlhead|cfhttpparam|cfimage|cfimport|cfinclude|cfindex|cfinsert|cfinvokeargument|cflocation|cflog|cfmailparam|cfNTauthenticate|cfobject|cfobjectcache|cfparam|cfpdfformparam|cfprint|cfprocparam|cfprocresult|cfproperty|cfqueryparam|cfregistry|cfreportparam|cfrethrow|cfreturn|cfschedule|cfsearch|cfset|cfsetting|cfthrow|cfzipparam)\".split(\"|\");\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = ColdfusionHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.voidElements = oop.mixin(lang.arrayToMap(voidElements), this.voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.$id = \"ace/mode/coldfusion\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/coldfusion\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-crystal.js",
    "content": "ace.define(\"ace/mode/crystal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CrystalHighlightRules = function () {\n    var builtinFunctions = (\"puts|initialize|previous_def|typeof|as|pointerof|sizeof|instance_sizeof\");\n    var keywords = (\"if|end|else|elsif|unless|case|when|break|while|next|until|def|return|class|new|getter|setter|property|lib\"\n        + \"|fun|do|struct|private|protected|public|module|super|abstract|include|extend|begin|enum|raise|yield|with\"\n        + \"|alias|rescue|ensure|macro|uninitialized|union|type|require\");\n    var buildinConstants = (\"true|TRUE|false|FALSE|nil|NIL|__LINE__|__END_LINE__|__FILE__|__DIR__\");\n    var builtinVariables = (\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"root_url|flash|session|cookies|params|request|response|logger|self\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions\n    }, \"identifier\");\n    var hexNumber = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var decNumber = \"(?:[0-9][\\\\d_]*)\";\n    var octNumber = \"(?:0o[0-7][0-7]*)\";\n    var binNumber = \"(?:0[bB][01]+)\";\n    var intNumber = \"(?:[+-]?)(?:\" + hexNumber + \"|\" + decNumber + \"|\" + octNumber + \"|\" + binNumber + \")(?:_?[iIuU](?:8|16|32|64))?\\\\b\";\n    var escapeExpression = /\\\\(?:[nsrtvfbae'\"\\\\]|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4}|u{[\\da-fA-F]{1,6}})/;\n    var extEscapeExspresssion = /\\\\(?:[nsrtvfbae'\"\\\\]|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4}|u{[\\da-fA-F]{1,6}}|u{(:?[\\da-fA-F]{2}\\s)*[\\da-fA-F]{2}})/;\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"[/]\",\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: extEscapeExspresssion\n                    }, {\n                        token: \"string.regexp\",\n                        regex: \"[/][imx]*(?=[).,;\\\\s]|$)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string.regexp\"\n                    }]\n            },\n            [{\n                    regex: \"[{}]\", onMatch: function (val, state, stack) {\n                        this.next = val == \"{\" ? this.nextState : \"\";\n                        if (val == \"{\" && stack.length) {\n                            stack.unshift(\"start\", state);\n                            return \"paren.lparen\";\n                        }\n                        if (val == \"}\" && stack.length) {\n                            stack.shift();\n                            this.next = stack.shift();\n                            if (this.next.indexOf(\"string\") != -1)\n                                return \"paren.end\";\n                        }\n                        return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n                    },\n                    nextState: \"start\"\n                }, {\n                    token: \"string.start\",\n                    regex: /\"/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: extEscapeExspresssion\n                        }, {\n                            token: \"string\",\n                            regex: /\\\\#{/\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /\"/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: \"string.start\",\n                    regex: /`/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: extEscapeExspresssion\n                        }, {\n                            token: \"string\",\n                            regex: /\\\\#{/\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /`/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    stateName: \"rpstring\",\n                    token: \"string.start\",\n                    regex: /%[Qx]?\\(/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: extEscapeExspresssion\n                        }, {\n                            token: \"string.start\",\n                            regex: /\\(/,\n                            push: \"rpstring\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /\\)/,\n                            next: \"pop\"\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    stateName: \"spstring\",\n                    token: \"string.start\",\n                    regex: /%[Qx]?\\[/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: extEscapeExspresssion\n                        }, {\n                            token: \"string.start\",\n                            regex: /\\[/,\n                            push: \"spstring\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /]/,\n                            next: \"pop\"\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    stateName: \"fpstring\",\n                    token: \"string.start\",\n                    regex: /%[Qx]?{/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: extEscapeExspresssion\n                        }, {\n                            token: \"string.start\",\n                            regex: /{/,\n                            push: \"fpstring\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /}/,\n                            next: \"pop\"\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    stateName: \"tpstring\",\n                    token: \"string.start\",\n                    regex: /%[Qx]?</,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: extEscapeExspresssion\n                        }, {\n                            token: \"string.start\",\n                            regex: /</,\n                            push: \"tpstring\"\n                        }, {\n                            token: \"string.end\",\n                            regex: />/,\n                            next: \"pop\"\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    stateName: \"ppstring\",\n                    token: \"string.start\",\n                    regex: /%[Qx]?\\|/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: extEscapeExspresssion\n                        }, {\n                            token: \"string.end\",\n                            regex: /\\|/,\n                            next: \"pop\"\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    stateName: \"rpqstring\",\n                    token: \"string.start\",\n                    regex: /%[qwir]\\(/,\n                    push: [{\n                            token: \"string.start\",\n                            regex: /\\(/,\n                            push: \"rpqstring\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /\\)/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    stateName: \"spqstring\",\n                    token: \"string.start\",\n                    regex: /%[qwir]\\[/,\n                    push: [{\n                            token: \"string.start\",\n                            regex: /\\[/,\n                            push: \"spqstring\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /]/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    stateName: \"fpqstring\",\n                    token: \"string.start\",\n                    regex: /%[qwir]{/,\n                    push: [{\n                            token: \"string.start\",\n                            regex: /{/,\n                            push: \"fpqstring\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /}/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    stateName: \"tpqstring\",\n                    token: \"string.start\",\n                    regex: /%[qwir]</,\n                    push: [{\n                            token: \"string.start\",\n                            regex: /</,\n                            push: \"tpqstring\"\n                        }, {\n                            token: \"string.end\",\n                            regex: />/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    stateName: \"ppqstring\",\n                    token: \"string.start\",\n                    regex: /%[qwir]\\|/,\n                    push: [{\n                            token: \"string.end\",\n                            regex: /\\|/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: \"string.start\",\n                    regex: /'/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: escapeExpression\n                        }, {\n                            token: \"string.end\",\n                            regex: /'|$/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }], {\n                token: \"text\",\n                regex: \"::\"\n            }, {\n                token: \"variable.instance\",\n                regex: \"@{1,2}[a-zA-Z_\\\\d]+\"\n            }, {\n                token: \"variable.fresh\",\n                regex: \"%[a-zA-Z_\\\\d]+\"\n            }, {\n                token: \"support.class\",\n                regex: \"[A-Z][a-zA-Z_\\\\d]+\"\n            }, {\n                token: \"constant.other.symbol\",\n                regex: \"[:](?:(?:===|<=>|\\\\[]\\\\?|\\\\[]=|\\\\[]|>>|\\\\*\\\\*|<<|==|!=|>=|<=|!~|=~|<|\\\\+|-|\\\\*|\\\\/|%|&|\\\\||\\\\^|>|!|~)|(?:(?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?))\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?(?:_?[fF](?:32|64))?\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: intNumber\n            }, {\n                token: \"constant.other.symbol\",\n                regex: ':\"',\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: extEscapeExspresssion\n                    }, {\n                        token: \"constant.other.symbol\",\n                        regex: '\"',\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"constant.other.symbol\"\n                    }]\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: \"support.function\",\n                regex: \"(?:is_a\\\\?|nil\\\\?|responds_to\\\\?|as\\\\?)\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$!?]*\\\\b\"\n            }, {\n                token: \"variable.system\",\n                regex: \"\\\\$\\\\!|\\\\$\\\\?\"\n            }, {\n                token: \"punctuation.separator.key-value\",\n                regex: \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch: function (value, currentState, stack) {\n                    var next = \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        { type: \"constant\", value: tokens[1] },\n                        { type: \"string\", value: tokens[2] },\n                        { type: \"support.class\", value: tokens[3] },\n                        { type: \"string\", value: tokens[4] }\n                    ];\n                },\n                regex: \"(<<-)([']?)([\\\\w]+)([']?)\",\n                rules: {\n                    heredoc: [{\n                            token: \"string\",\n                            regex: \"^ +\"\n                        }, {\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }]\n                }\n            }, {\n                regex: \"$\",\n                token: \"empty\",\n                next: function (currentState, stack) {\n                    if (stack[0] === \"heredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.]\\s*(?![.])/,\n                push: [{\n                        token: \"punctuation.operator\",\n                        regex: /[.]\\s*(?![.])/\n                    }, {\n                        token: \"support.function\",\n                        regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                    }, {\n                        regex: \"\",\n                        token: \"empty\",\n                        next: \"pop\"\n                    }]\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|\\\\?|\\\\:|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\^|\\\\|\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(CrystalHighlightRules, TextHighlightRules);\nexports.CrystalHighlightRules = CrystalHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/crystal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/crystal_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CrystalHighlightRules = require(\"./crystal_highlight_rules\").CrystalHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CrystalHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return /^\\s+(end|else)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length - tab.length, row, indent.length));\n        }\n    };\n    this.$id = \"ace/mode/crystal\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/crystal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-csharp.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/csharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CSharpHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \"abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\n        \"constant.language\": \"null|true|false\"\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: /'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))?'/\n            }, {\n                token: \"string\", start: '\"', end: '\"|$', next: [\n                    { token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/ },\n                    { token: \"invalid\", regex: /\\\\./ }\n                ]\n            }, {\n                token: \"string\", start: '@\"', end: '\"', next: [\n                    { token: \"constant.language.escape\", regex: '\"\"' }\n                ]\n            }, {\n                token: \"string\", start: /\\$\"/, end: '\"|$', next: [\n                    { token: \"constant.language.escape\", regex: /\\\\(:?$)|{{/ },\n                    { token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/ },\n                    { token: \"invalid\", regex: /\\\\./ }\n                ]\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"keyword\",\n                regex: \"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(CSharpHighlightRules, TextHighlightRules);\nexports.CSharpHighlightRules = CSharpHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar CFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, CFoldMode);\n(function () {\n    this.usingRe = /^\\s*using \\S/;\n    this.getFoldWidgetRangeBase = this.getFoldWidgetRange;\n    this.getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var fw = this.getFoldWidgetBase(session, foldStyle, row);\n        if (!fw) {\n            var line = session.getLine(row);\n            if (/^\\s*#region\\b/.test(line))\n                return \"start\";\n            var usingRe = this.usingRe;\n            if (usingRe.test(line)) {\n                var prev = session.getLine(row - 1);\n                var next = session.getLine(row + 1);\n                if (!usingRe.test(prev) && usingRe.test(next))\n                    return \"start\";\n            }\n        }\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.getFoldWidgetRangeBase(session, foldStyle, row);\n        if (range)\n            return range;\n        var line = session.getLine(row);\n        if (this.usingRe.test(line))\n            return this.getUsingStatementBlock(session, line, row);\n        if (/^\\s*#region\\b/.test(line))\n            return this.getRegionBlock(session, line, row);\n    };\n    this.getUsingStatementBlock = function (session, line, row) {\n        var startColumn = line.match(this.usingRe)[0].length - 1;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            if (/^\\s*$/.test(line))\n                continue;\n            if (!this.usingRe.test(line))\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*#(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csharp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/csharp\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CSharpHighlightRules = require(\"./csharp_highlight_rules\").CSharpHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/csharp\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CSharpHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.$id = \"ace/mode/csharp\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/csharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-csound_document.js",
    "content": "ace.define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CsoundPreprocessorHighlightRules = function (embeddedRulePrefix) {\n    this.embeddedRulePrefix = embeddedRulePrefix === undefined ? \"\" : embeddedRulePrefix;\n    this.semicolonComments = {\n        token: \"comment.line.semicolon.csound\",\n        regex: \";.*$\"\n    };\n    this.comments = [\n        {\n            token: \"punctuation.definition.comment.begin.csound\",\n            regex: \"/\\\\*\",\n            push: [\n                {\n                    token: \"punctuation.definition.comment.end.csound\",\n                    regex: \"\\\\*/\",\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"comment.block.csound\"\n                }\n            ]\n        }, {\n            token: \"comment.line.double-slash.csound\",\n            regex: \"//.*$\"\n        },\n        this.semicolonComments\n    ];\n    this.macroUses = [\n        {\n            token: [\"entity.name.function.preprocessor.csound\", \"punctuation.definition.macro-parameter-value-list.begin.csound\"],\n            regex: /(\\$[A-Z_a-z]\\w*\\.?)(\\()/,\n            next: \"macro parameter value list\"\n        }, {\n            token: \"entity.name.function.preprocessor.csound\",\n            regex: /\\$[A-Z_a-z]\\w*(?:\\.|\\b)/\n        }\n    ];\n    this.numbers = [\n        {\n            token: \"constant.numeric.float.csound\",\n            regex: /(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/\n        }, {\n            token: [\"storage.type.number.csound\", \"constant.numeric.integer.hexadecimal.csound\"],\n            regex: /(0[Xx])([0-9A-Fa-f]+)/\n        }, {\n            token: \"constant.numeric.integer.decimal.csound\",\n            regex: /\\d+/\n        }\n    ];\n    this.bracedStringContents = [\n        {\n            token: \"constant.character.escape.csound\",\n            regex: /\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/\n        },\n        {\n            token: \"constant.character.placeholder.csound\",\n            regex: /%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/\n        }, {\n            token: \"constant.character.escape.csound\",\n            regex: /%%/\n        }\n    ];\n    this.quotedStringContents = [\n        this.macroUses,\n        this.bracedStringContents\n    ];\n    var start = [\n        this.comments,\n        {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/\n        }, {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#include/,\n            push: [\n                this.comments,\n                {\n                    token: \"string.csound\",\n                    regex: /([^ \\t])(?:.*?\\1)/,\n                    next: \"pop\"\n                }\n            ]\n        }, {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#includestr/,\n            push: [\n                this.comments,\n                {\n                    token: \"string.csound\",\n                    regex: /([^ \\t])(?:.*?\\1)/,\n                    next: \"pop\"\n                }\n            ]\n        }, {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#[ \\t]*define/,\n            next: \"define directive\"\n        }, {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#(?:ifn?def|undef)\\b/,\n            next: \"macro directive\"\n        },\n        this.macroUses\n    ];\n    this.$rules = {\n        \"start\": start,\n        \"define directive\": [\n            this.comments,\n            {\n                token: \"entity.name.function.preprocessor.csound\",\n                regex: /[A-Z_a-z]\\w*/\n            }, {\n                token: \"punctuation.definition.macro-parameter-name-list.begin.csound\",\n                regex: /\\(/,\n                next: \"macro parameter name list\"\n            }, {\n                token: \"punctuation.definition.macro.begin.csound\",\n                regex: /#/,\n                next: \"macro body\"\n            }\n        ],\n        \"macro parameter name list\": [\n            {\n                token: \"variable.parameter.preprocessor.csound\",\n                regex: /[A-Z_a-z]\\w*/\n            }, {\n                token: \"punctuation.definition.macro-parameter-name-list.end.csound\",\n                regex: /\\)/,\n                next: \"define directive\"\n            }\n        ],\n        \"macro body\": [\n            {\n                token: \"constant.character.escape.csound\",\n                regex: /\\\\#/\n            }, {\n                token: \"punctuation.definition.macro.end.csound\",\n                regex: /#/,\n                next: \"start\"\n            },\n            start\n        ],\n        \"macro directive\": [\n            this.comments,\n            {\n                token: \"entity.name.function.preprocessor.csound\",\n                regex: /[A-Z_a-z]\\w*/,\n                next: \"start\"\n            }\n        ],\n        \"macro parameter value list\": [\n            {\n                token: \"punctuation.definition.macro-parameter-value-list.end.csound\",\n                regex: /\\)/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.definition.string.begin.csound\",\n                regex: /\"/,\n                next: \"macro parameter value quoted string\"\n            }, this.pushRule({\n                token: \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex: /\\(/,\n                next: \"macro parameter value parenthetical\"\n            }), {\n                token: \"punctuation.macro-parameter-value-separator.csound\",\n                regex: \"[#']\"\n            }\n        ],\n        \"macro parameter value quoted string\": [\n            {\n                token: \"constant.character.escape.csound\",\n                regex: /\\\\[#'()]/\n            }, {\n                token: \"invalid.illegal.csound\",\n                regex: /[#'()]/\n            }, {\n                token: \"punctuation.definition.string.end.csound\",\n                regex: /\"/,\n                next: \"macro parameter value list\"\n            },\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"macro parameter value parenthetical\": [\n            {\n                token: \"constant.character.escape.csound\",\n                regex: /\\\\\\)/\n            }, this.popRule({\n                token: \"punctuation.macro-parameter-value-parenthetical.end.csound\",\n                regex: /\\)/\n            }), this.pushRule({\n                token: \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex: /\\(/,\n                next: \"macro parameter value parenthetical\"\n            }),\n            start\n        ]\n    };\n};\noop.inherits(CsoundPreprocessorHighlightRules, TextHighlightRules);\n(function () {\n    this.pushRule = function (params) {\n        if (Array.isArray(params.next)) {\n            for (var i = 0; i < params.next.length; i++) {\n                params.next[i] = this.embeddedRulePrefix + params.next[i];\n            }\n        }\n        return {\n            regex: params.regex, onMatch: function (value, currentState, stack, line) {\n                if (stack.length === 0)\n                    stack.push(currentState);\n                if (Array.isArray(params.next)) {\n                    for (var i = 0; i < params.next.length; i++) {\n                        stack.push(params.next[i]);\n                    }\n                }\n                else {\n                    stack.push(params.next);\n                }\n                this.next = stack[stack.length - 1];\n                return params.token;\n            },\n            get next() { return Array.isArray(params.next) ? params.next[params.next.length - 1] : params.next; },\n            set next(next) {\n                if (!Array.isArray(params.next)) {\n                    params.next = next;\n                }\n            },\n            get token() { return params.token; }\n        };\n    };\n    this.popRule = function (params) {\n        if (params.next) {\n            params.next = this.embeddedRulePrefix + params.next;\n        }\n        return {\n            regex: params.regex, onMatch: function (value, currentState, stack, line) {\n                stack.pop();\n                if (params.next) {\n                    stack.push(params.next);\n                    this.next = stack[stack.length - 1];\n                }\n                else {\n                    this.next = stack.length > 1 ? stack[stack.length - 1] : stack.pop();\n                }\n                return params.token;\n            }\n        };\n    };\n}).call(CsoundPreprocessorHighlightRules.prototype);\nexports.CsoundPreprocessorHighlightRules = CsoundPreprocessorHighlightRules;\n\n});\n\nace.define(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\nvar CsoundScoreHighlightRules = function (embeddedRulePrefix) {\n    CsoundPreprocessorHighlightRules.call(this, embeddedRulePrefix);\n    this.quotedStringContents.push({\n        token: \"invalid.illegal.csound-score\",\n        regex: /[^\"]*$/\n    });\n    var start = this.$rules.start;\n    start.push({\n        token: \"keyword.control.csound-score\",\n        regex: /[aBbCdefiqstvxy]/\n    }, {\n        token: \"invalid.illegal.csound-score\",\n        regex: /w/\n    }, {\n        token: \"constant.numeric.language.csound-score\",\n        regex: /z/\n    }, {\n        token: [\"keyword.control.csound-score\", \"constant.numeric.integer.decimal.csound-score\"],\n        regex: /([nNpP][pP])(\\d+)/\n    }, {\n        token: \"keyword.other.csound-score\",\n        regex: /[mn]/,\n        push: [\n            {\n                token: \"empty\",\n                regex: /$/,\n                next: \"pop\"\n            },\n            this.comments,\n            {\n                token: \"entity.name.label.csound-score\",\n                regex: /[A-Z_a-z]\\w*/\n            }\n        ]\n    }, {\n        token: \"keyword.preprocessor.csound-score\",\n        regex: /r\\b/,\n        next: \"repeat section\"\n    }, this.numbers, {\n        token: \"keyword.operator.csound-score\",\n        regex: \"[!+\\\\-*/^%&|<>#~.]\"\n    }, this.pushRule({\n        token: \"punctuation.definition.string.begin.csound-score\",\n        regex: /\"/,\n        next: \"quoted string\"\n    }), this.pushRule({\n        token: \"punctuation.braced-loop.begin.csound-score\",\n        regex: /{/,\n        next: \"loop after left brace\"\n    }));\n    this.addRules({\n        \"repeat section\": [\n            {\n                token: \"empty\",\n                regex: /$/,\n                next: \"start\"\n            },\n            this.comments,\n            {\n                token: \"constant.numeric.integer.decimal.csound-score\",\n                regex: /\\d+/,\n                next: \"repeat section before label\"\n            }\n        ],\n        \"repeat section before label\": [\n            {\n                token: \"empty\",\n                regex: /$/,\n                next: \"start\"\n            },\n            this.comments,\n            {\n                token: \"entity.name.label.csound-score\",\n                regex: /[A-Z_a-z]\\w*/,\n                next: \"start\"\n            }\n        ],\n        \"quoted string\": [\n            this.popRule({\n                token: \"punctuation.definition.string.end.csound-score\",\n                regex: /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound-score\"\n            }\n        ],\n        \"loop after left brace\": [\n            this.popRule({\n                token: \"constant.numeric.integer.decimal.csound-score\",\n                regex: /\\d+/,\n                next: \"loop after repeat count\"\n            }),\n            this.comments,\n            {\n                token: \"invalid.illegal.csound\",\n                regex: /\\S.*/\n            }\n        ],\n        \"loop after repeat count\": [\n            this.popRule({\n                token: \"entity.name.function.preprocessor.csound-score\",\n                regex: /[A-Z_a-z]\\w*\\b/,\n                next: \"loop after macro name\"\n            }),\n            this.comments,\n            {\n                token: \"invalid.illegal.csound\",\n                regex: /\\S.*/\n            }\n        ],\n        \"loop after macro name\": [\n            start,\n            this.popRule({\n                token: \"punctuation.braced-loop.end.csound-score\",\n                regex: /}/\n            })\n        ]\n    });\n    this.normalizeRules();\n};\noop.inherits(CsoundScoreHighlightRules, CsoundPreprocessorHighlightRules);\nexports.CsoundScoreHighlightRules = CsoundScoreHighlightRules;\n\n});\n\nace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LuaHighlightRules = function () {\n    var keywords = (\"break|do|else|elseif|end|for|function|if|in|local|repeat|\" +\n        \"return|then|until|while|or|and|not\");\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n    var functions = (\n    \"string|xpcall|package|tostring|print|os|unpack|require|\" +\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\" +\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\" +\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\" +\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\" +\n        \"load|error|loadfile|\" +\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\" +\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\" +\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\" +\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\" +\n        \"lines|write|close|flush|open|output|type|read|stderr|\" +\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\" +\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\" +\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\" +\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\" +\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\" +\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\" +\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\" +\n        \"status|wrap|create|running|\" +\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\" +\n        \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\");\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n    this.$rules = {\n        \"start\": [{\n                stateName: \"bracketedComment\",\n                onMatch: function (value, currentState, stack) {\n                    stack.unshift(this.next, value.length - 2, currentState);\n                    return \"comment\";\n                },\n                regex: /\\-\\-\\[=*\\[/,\n                next: [\n                    {\n                        onMatch: function (value, currentState, stack) {\n                            if (value.length == stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack.shift();\n                            }\n                            else {\n                                this.next = \"\";\n                            }\n                            return \"comment\";\n                        },\n                        regex: /\\]=*\\]/,\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }\n                ]\n            },\n            {\n                token: \"comment\",\n                regex: \"\\\\-\\\\-.*$\"\n            },\n            {\n                stateName: \"bracketedString\",\n                onMatch: function (value, currentState, stack) {\n                    stack.unshift(this.next, value.length, currentState);\n                    return \"string.start\";\n                },\n                regex: /\\[=*\\[/,\n                next: [\n                    {\n                        onMatch: function (value, currentState, stack) {\n                            if (value.length == stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack.shift();\n                            }\n                            else {\n                                this.next = \"\";\n                            }\n                            return \"string.end\";\n                        },\n                        regex: /\\]=*\\]/,\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"string\"\n                    }\n                ]\n            },\n            {\n                token: \"string\",\n                regex: '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n            }, {\n                token: \"string\",\n                regex: \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|\\\\w+\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(LuaHighlightRules, TextHighlightRules);\nexports.LuaHighlightRules = LuaHighlightRules;\n\n});\n\nace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n * TODO: python delimiters\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PythonHighlightRules = function () {\n    var keywords = (\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await|nonlocal\");\n    var builtinConstants = (\"True|False|None|NotImplemented|Ellipsis|__debug__\");\n    var builtinFunctions = (\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" +\n        \"ascii|breakpoint|bytes\");\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"variable.language\": \"self|cls\",\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n    var strPre = \"[uU]?\";\n    var strRawPre = \"[rR]\";\n    var strFormatPre = \"[fF]\";\n    var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"string\",\n                regex: strPre + '\"{3}',\n                next: \"qqstring3\"\n            }, {\n                token: \"string\",\n                regex: strPre + '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: strPre + \"'{3}\",\n                next: \"qstring3\"\n            }, {\n                token: \"string\",\n                regex: strPre + \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + '\"{3}',\n                next: \"rawqqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + '\"(?=.)',\n                next: \"rawqqstring\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + \"'{3}\",\n                next: \"rawqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + \"'(?=.)\",\n                next: \"rawqstring\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + '\"{3}',\n                next: \"fqqstring3\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + '\"(?=.)',\n                next: \"fqqstring\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + \"'{3}\",\n                next: \"fqstring3\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + \"'(?=.)\",\n                next: \"fqstring\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + '\"{3}',\n                next: \"rfqqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + '\"(?=.)',\n                next: \"rfqqstring\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + \"'{3}\",\n                next: \"rfqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + \"'(?=.)\",\n                next: \"rfqstring\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n            }, {\n                token: \"punctuation\",\n                regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token: [\"keyword\", \"text\", \"entity.name.function\"],\n                regex: \"(def|class)(\\\\s+)([\\\\u00BF-\\\\u1FFF\\\\u2C00-\\\\uD7FF\\\\w]+)\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                include: \"constants\"\n            }],\n        \"qqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqqstring3\": [{\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqstring3\": [{\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqqstring\": [{\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"rawqqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqstring\": [{\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"rawqstring\"\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"fqqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqqstring3\": [{\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqstring3\": [{\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqqstring\": [{\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"rfqqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqstring\": [{\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqstringParRules\": [{\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)]\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"string\",\n                regex: \"'[^']*'\"\n            }, {\n                token: \"string\",\n                regex: '\"[^\"]*\"'\n            }, {\n                token: \"function.support\",\n                regex: \"(!s|!r|!a)\"\n            }, {\n                include: \"constants\"\n            }, {\n                token: 'paren.rparen',\n                regex: \"}\",\n                next: 'pop'\n            }, {\n                token: 'paren.lparen',\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }],\n        \"constants\": [{\n                token: \"constant.numeric\",\n                regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"[lL]\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: [\"punctuation\", \"function.support\"],\n                regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(PythonHighlightRules, TextHighlightRules);\nexports.PythonHighlightRules = PythonHighlightRules;\n\n});\n\nace.define(\"ace/mode/csound_orchestra_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/lua_highlight_rules\",\"ace/mode/python_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar oop = require(\"../lib/oop\");\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\nvar CsoundOrchestraHighlightRules = function (embeddedRulePrefix) {\n    CsoundPreprocessorHighlightRules.call(this, embeddedRulePrefix);\n    var opcodes = [\n        \"ATSadd\",\n        \"ATSaddnz\",\n        \"ATSbufread\",\n        \"ATScross\",\n        \"ATSinfo\",\n        \"ATSinterpread\",\n        \"ATSpartialtap\",\n        \"ATSread\",\n        \"ATSreadnz\",\n        \"ATSsinnoi\",\n        \"FLbox\",\n        \"FLbutBank\",\n        \"FLbutton\",\n        \"FLcloseButton\",\n        \"FLcolor\",\n        \"FLcolor2\",\n        \"FLcount\",\n        \"FLexecButton\",\n        \"FLgetsnap\",\n        \"FLgroup\",\n        \"FLgroupEnd\",\n        \"FLgroup_end\",\n        \"FLhide\",\n        \"FLhvsBox\",\n        \"FLhvsBoxSetValue\",\n        \"FLjoy\",\n        \"FLkeyIn\",\n        \"FLknob\",\n        \"FLlabel\",\n        \"FLloadsnap\",\n        \"FLmouse\",\n        \"FLpack\",\n        \"FLpackEnd\",\n        \"FLpack_end\",\n        \"FLpanel\",\n        \"FLpanelEnd\",\n        \"FLpanel_end\",\n        \"FLprintk\",\n        \"FLprintk2\",\n        \"FLroller\",\n        \"FLrun\",\n        \"FLsavesnap\",\n        \"FLscroll\",\n        \"FLscrollEnd\",\n        \"FLscroll_end\",\n        \"FLsetAlign\",\n        \"FLsetBox\",\n        \"FLsetColor\",\n        \"FLsetColor2\",\n        \"FLsetFont\",\n        \"FLsetPosition\",\n        \"FLsetSize\",\n        \"FLsetSnapGroup\",\n        \"FLsetText\",\n        \"FLsetTextColor\",\n        \"FLsetTextSize\",\n        \"FLsetTextType\",\n        \"FLsetVal\",\n        \"FLsetVal_i\",\n        \"FLsetVali\",\n        \"FLsetsnap\",\n        \"FLshow\",\n        \"FLslidBnk\",\n        \"FLslidBnk2\",\n        \"FLslidBnk2Set\",\n        \"FLslidBnk2Setk\",\n        \"FLslidBnkGetHandle\",\n        \"FLslidBnkSet\",\n        \"FLslidBnkSetk\",\n        \"FLslider\",\n        \"FLtabs\",\n        \"FLtabsEnd\",\n        \"FLtabs_end\",\n        \"FLtext\",\n        \"FLupdate\",\n        \"FLvalue\",\n        \"FLvkeybd\",\n        \"FLvslidBnk\",\n        \"FLvslidBnk2\",\n        \"FLxyin\",\n        \"JackoAudioIn\",\n        \"JackoAudioInConnect\",\n        \"JackoAudioOut\",\n        \"JackoAudioOutConnect\",\n        \"JackoFreewheel\",\n        \"JackoInfo\",\n        \"JackoInit\",\n        \"JackoMidiInConnect\",\n        \"JackoMidiOut\",\n        \"JackoMidiOutConnect\",\n        \"JackoNoteOut\",\n        \"JackoOn\",\n        \"JackoTransport\",\n        \"K35_hpf\",\n        \"K35_lpf\",\n        \"MixerClear\",\n        \"MixerGetLevel\",\n        \"MixerReceive\",\n        \"MixerSend\",\n        \"MixerSetLevel\",\n        \"MixerSetLevel_i\",\n        \"OSCbundle\",\n        \"OSCcount\",\n        \"OSCinit\",\n        \"OSCinitM\",\n        \"OSClisten\",\n        \"OSCraw\",\n        \"OSCsend\",\n        \"OSCsend_lo\",\n        \"S\",\n        \"STKBandedWG\",\n        \"STKBeeThree\",\n        \"STKBlowBotl\",\n        \"STKBlowHole\",\n        \"STKBowed\",\n        \"STKBrass\",\n        \"STKClarinet\",\n        \"STKDrummer\",\n        \"STKFMVoices\",\n        \"STKFlute\",\n        \"STKHevyMetl\",\n        \"STKMandolin\",\n        \"STKModalBar\",\n        \"STKMoog\",\n        \"STKPercFlut\",\n        \"STKPlucked\",\n        \"STKResonate\",\n        \"STKRhodey\",\n        \"STKSaxofony\",\n        \"STKShakers\",\n        \"STKSimple\",\n        \"STKSitar\",\n        \"STKStifKarp\",\n        \"STKTubeBell\",\n        \"STKVoicForm\",\n        \"STKWhistle\",\n        \"STKWurley\",\n        \"a\",\n        \"abs\",\n        \"active\",\n        \"adsr\",\n        \"adsyn\",\n        \"adsynt\",\n        \"adsynt2\",\n        \"aftouch\",\n        \"allpole\",\n        \"alpass\",\n        \"alwayson\",\n        \"ampdb\",\n        \"ampdbfs\",\n        \"ampmidi\",\n        \"ampmidicurve\",\n        \"ampmidid\",\n        \"apoleparams\",\n        \"arduinoRead\",\n        \"arduinoReadF\",\n        \"arduinoStart\",\n        \"arduinoStop\",\n        \"areson\",\n        \"aresonk\",\n        \"atone\",\n        \"atonek\",\n        \"atonex\",\n        \"autocorr\",\n        \"babo\",\n        \"balance\",\n        \"balance2\",\n        \"bamboo\",\n        \"barmodel\",\n        \"bbcutm\",\n        \"bbcuts\",\n        \"betarand\",\n        \"bexprnd\",\n        \"bformdec1\",\n        \"bformdec2\",\n        \"bformenc1\",\n        \"binit\",\n        \"biquad\",\n        \"biquada\",\n        \"birnd\",\n        \"bob\",\n        \"bpf\",\n        \"bpfcos\",\n        \"bqrez\",\n        \"butbp\",\n        \"butbr\",\n        \"buthp\",\n        \"butlp\",\n        \"butterbp\",\n        \"butterbr\",\n        \"butterhp\",\n        \"butterlp\",\n        \"button\",\n        \"buzz\",\n        \"c2r\",\n        \"cabasa\",\n        \"cauchy\",\n        \"cauchyi\",\n        \"cbrt\",\n        \"ceil\",\n        \"cell\",\n        \"cent\",\n        \"centroid\",\n        \"ceps\",\n        \"cepsinv\",\n        \"chanctrl\",\n        \"changed\",\n        \"changed2\",\n        \"chani\",\n        \"chano\",\n        \"chebyshevpoly\",\n        \"checkbox\",\n        \"chn_S\",\n        \"chn_a\",\n        \"chn_k\",\n        \"chnclear\",\n        \"chnexport\",\n        \"chnget\",\n        \"chngeta\",\n        \"chngeti\",\n        \"chngetk\",\n        \"chngetks\",\n        \"chngets\",\n        \"chnmix\",\n        \"chnparams\",\n        \"chnset\",\n        \"chnseta\",\n        \"chnseti\",\n        \"chnsetk\",\n        \"chnsetks\",\n        \"chnsets\",\n        \"chuap\",\n        \"clear\",\n        \"clfilt\",\n        \"clip\",\n        \"clockoff\",\n        \"clockon\",\n        \"cmp\",\n        \"cmplxprod\",\n        \"cntCreate\",\n        \"cntCycles\",\n        \"cntDelete\",\n        \"cntDelete_i\",\n        \"cntRead\",\n        \"cntReset\",\n        \"cntState\",\n        \"comb\",\n        \"combinv\",\n        \"compilecsd\",\n        \"compileorc\",\n        \"compilestr\",\n        \"compress\",\n        \"compress2\",\n        \"connect\",\n        \"control\",\n        \"convle\",\n        \"convolve\",\n        \"copya2ftab\",\n        \"copyf2array\",\n        \"cos\",\n        \"cosh\",\n        \"cosinv\",\n        \"cosseg\",\n        \"cossegb\",\n        \"cossegr\",\n        \"count\",\n        \"count_i\",\n        \"cps2pch\",\n        \"cpsmidi\",\n        \"cpsmidib\",\n        \"cpsmidinn\",\n        \"cpsoct\",\n        \"cpspch\",\n        \"cpstmid\",\n        \"cpstun\",\n        \"cpstuni\",\n        \"cpsxpch\",\n        \"cpumeter\",\n        \"cpuprc\",\n        \"cross2\",\n        \"crossfm\",\n        \"crossfmi\",\n        \"crossfmpm\",\n        \"crossfmpmi\",\n        \"crosspm\",\n        \"crosspmi\",\n        \"crunch\",\n        \"ctlchn\",\n        \"ctrl14\",\n        \"ctrl21\",\n        \"ctrl7\",\n        \"ctrlinit\",\n        \"ctrlpreset\",\n        \"ctrlprint\",\n        \"ctrlprintpresets\",\n        \"ctrlsave\",\n        \"ctrlselect\",\n        \"cuserrnd\",\n        \"dam\",\n        \"date\",\n        \"dates\",\n        \"db\",\n        \"dbamp\",\n        \"dbfsamp\",\n        \"dcblock\",\n        \"dcblock2\",\n        \"dconv\",\n        \"dct\",\n        \"dctinv\",\n        \"deinterleave\",\n        \"delay\",\n        \"delay1\",\n        \"delayk\",\n        \"delayr\",\n        \"delayw\",\n        \"deltap\",\n        \"deltap3\",\n        \"deltapi\",\n        \"deltapn\",\n        \"deltapx\",\n        \"deltapxw\",\n        \"denorm\",\n        \"diff\",\n        \"diode_ladder\",\n        \"directory\",\n        \"diskgrain\",\n        \"diskin\",\n        \"diskin2\",\n        \"dispfft\",\n        \"display\",\n        \"distort\",\n        \"distort1\",\n        \"divz\",\n        \"doppler\",\n        \"dot\",\n        \"downsamp\",\n        \"dripwater\",\n        \"dssiactivate\",\n        \"dssiaudio\",\n        \"dssictls\",\n        \"dssiinit\",\n        \"dssilist\",\n        \"dumpk\",\n        \"dumpk2\",\n        \"dumpk3\",\n        \"dumpk4\",\n        \"duserrnd\",\n        \"dust\",\n        \"dust2\",\n        \"envlpx\",\n        \"envlpxr\",\n        \"ephasor\",\n        \"eqfil\",\n        \"evalstr\",\n        \"event\",\n        \"event_i\",\n        \"exciter\",\n        \"exitnow\",\n        \"exp\",\n        \"expcurve\",\n        \"expon\",\n        \"exprand\",\n        \"exprandi\",\n        \"expseg\",\n        \"expsega\",\n        \"expsegb\",\n        \"expsegba\",\n        \"expsegr\",\n        \"fareylen\",\n        \"fareyleni\",\n        \"faustaudio\",\n        \"faustcompile\",\n        \"faustctl\",\n        \"faustdsp\",\n        \"faustgen\",\n        \"faustplay\",\n        \"fft\",\n        \"fftinv\",\n        \"ficlose\",\n        \"filebit\",\n        \"filelen\",\n        \"filenchnls\",\n        \"filepeak\",\n        \"filescal\",\n        \"filesr\",\n        \"filevalid\",\n        \"fillarray\",\n        \"filter2\",\n        \"fin\",\n        \"fini\",\n        \"fink\",\n        \"fiopen\",\n        \"flanger\",\n        \"flashtxt\",\n        \"flooper\",\n        \"flooper2\",\n        \"floor\",\n        \"fluidAllOut\",\n        \"fluidCCi\",\n        \"fluidCCk\",\n        \"fluidControl\",\n        \"fluidEngine\",\n        \"fluidInfo\",\n        \"fluidLoad\",\n        \"fluidNote\",\n        \"fluidOut\",\n        \"fluidProgramSelect\",\n        \"fluidSetInterpMethod\",\n        \"fmanal\",\n        \"fmax\",\n        \"fmb3\",\n        \"fmbell\",\n        \"fmin\",\n        \"fmmetal\",\n        \"fmod\",\n        \"fmpercfl\",\n        \"fmrhode\",\n        \"fmvoice\",\n        \"fmwurlie\",\n        \"fof\",\n        \"fof2\",\n        \"fofilter\",\n        \"fog\",\n        \"fold\",\n        \"follow\",\n        \"follow2\",\n        \"foscil\",\n        \"foscili\",\n        \"fout\",\n        \"fouti\",\n        \"foutir\",\n        \"foutk\",\n        \"fprintks\",\n        \"fprints\",\n        \"frac\",\n        \"fractalnoise\",\n        \"framebuffer\",\n        \"freeverb\",\n        \"ftaudio\",\n        \"ftchnls\",\n        \"ftconv\",\n        \"ftcps\",\n        \"ftexists\",\n        \"ftfree\",\n        \"ftgen\",\n        \"ftgenonce\",\n        \"ftgentmp\",\n        \"ftlen\",\n        \"ftload\",\n        \"ftloadk\",\n        \"ftlptim\",\n        \"ftmorf\",\n        \"ftom\",\n        \"ftprint\",\n        \"ftresize\",\n        \"ftresizei\",\n        \"ftsamplebank\",\n        \"ftsave\",\n        \"ftsavek\",\n        \"ftset\",\n        \"ftslice\",\n        \"ftslicei\",\n        \"ftsr\",\n        \"gain\",\n        \"gainslider\",\n        \"gauss\",\n        \"gaussi\",\n        \"gausstrig\",\n        \"gbuzz\",\n        \"genarray\",\n        \"genarray_i\",\n        \"gendy\",\n        \"gendyc\",\n        \"gendyx\",\n        \"getcfg\",\n        \"getcol\",\n        \"getftargs\",\n        \"getrow\",\n        \"getseed\",\n        \"gogobel\",\n        \"grain\",\n        \"grain2\",\n        \"grain3\",\n        \"granule\",\n        \"gtadsr\",\n        \"gtf\",\n        \"guiro\",\n        \"harmon\",\n        \"harmon2\",\n        \"harmon3\",\n        \"harmon4\",\n        \"hdf5read\",\n        \"hdf5write\",\n        \"hilbert\",\n        \"hilbert2\",\n        \"hrtfearly\",\n        \"hrtfmove\",\n        \"hrtfmove2\",\n        \"hrtfreverb\",\n        \"hrtfstat\",\n        \"hsboscil\",\n        \"hvs1\",\n        \"hvs2\",\n        \"hvs3\",\n        \"hypot\",\n        \"i\",\n        \"ihold\",\n        \"imagecreate\",\n        \"imagefree\",\n        \"imagegetpixel\",\n        \"imageload\",\n        \"imagesave\",\n        \"imagesetpixel\",\n        \"imagesize\",\n        \"in\",\n        \"in32\",\n        \"inch\",\n        \"inh\",\n        \"init\",\n        \"initc14\",\n        \"initc21\",\n        \"initc7\",\n        \"inleta\",\n        \"inletf\",\n        \"inletk\",\n        \"inletkid\",\n        \"inletv\",\n        \"ino\",\n        \"inq\",\n        \"inrg\",\n        \"ins\",\n        \"insglobal\",\n        \"insremot\",\n        \"int\",\n        \"integ\",\n        \"interleave\",\n        \"interp\",\n        \"invalue\",\n        \"inx\",\n        \"inz\",\n        \"jacktransport\",\n        \"jitter\",\n        \"jitter2\",\n        \"joystick\",\n        \"jspline\",\n        \"k\",\n        \"la_i_add_mc\",\n        \"la_i_add_mr\",\n        \"la_i_add_vc\",\n        \"la_i_add_vr\",\n        \"la_i_assign_mc\",\n        \"la_i_assign_mr\",\n        \"la_i_assign_t\",\n        \"la_i_assign_vc\",\n        \"la_i_assign_vr\",\n        \"la_i_conjugate_mc\",\n        \"la_i_conjugate_mr\",\n        \"la_i_conjugate_vc\",\n        \"la_i_conjugate_vr\",\n        \"la_i_distance_vc\",\n        \"la_i_distance_vr\",\n        \"la_i_divide_mc\",\n        \"la_i_divide_mr\",\n        \"la_i_divide_vc\",\n        \"la_i_divide_vr\",\n        \"la_i_dot_mc\",\n        \"la_i_dot_mc_vc\",\n        \"la_i_dot_mr\",\n        \"la_i_dot_mr_vr\",\n        \"la_i_dot_vc\",\n        \"la_i_dot_vr\",\n        \"la_i_get_mc\",\n        \"la_i_get_mr\",\n        \"la_i_get_vc\",\n        \"la_i_get_vr\",\n        \"la_i_invert_mc\",\n        \"la_i_invert_mr\",\n        \"la_i_lower_solve_mc\",\n        \"la_i_lower_solve_mr\",\n        \"la_i_lu_det_mc\",\n        \"la_i_lu_det_mr\",\n        \"la_i_lu_factor_mc\",\n        \"la_i_lu_factor_mr\",\n        \"la_i_lu_solve_mc\",\n        \"la_i_lu_solve_mr\",\n        \"la_i_mc_create\",\n        \"la_i_mc_set\",\n        \"la_i_mr_create\",\n        \"la_i_mr_set\",\n        \"la_i_multiply_mc\",\n        \"la_i_multiply_mr\",\n        \"la_i_multiply_vc\",\n        \"la_i_multiply_vr\",\n        \"la_i_norm1_mc\",\n        \"la_i_norm1_mr\",\n        \"la_i_norm1_vc\",\n        \"la_i_norm1_vr\",\n        \"la_i_norm_euclid_mc\",\n        \"la_i_norm_euclid_mr\",\n        \"la_i_norm_euclid_vc\",\n        \"la_i_norm_euclid_vr\",\n        \"la_i_norm_inf_mc\",\n        \"la_i_norm_inf_mr\",\n        \"la_i_norm_inf_vc\",\n        \"la_i_norm_inf_vr\",\n        \"la_i_norm_max_mc\",\n        \"la_i_norm_max_mr\",\n        \"la_i_print_mc\",\n        \"la_i_print_mr\",\n        \"la_i_print_vc\",\n        \"la_i_print_vr\",\n        \"la_i_qr_eigen_mc\",\n        \"la_i_qr_eigen_mr\",\n        \"la_i_qr_factor_mc\",\n        \"la_i_qr_factor_mr\",\n        \"la_i_qr_sym_eigen_mc\",\n        \"la_i_qr_sym_eigen_mr\",\n        \"la_i_random_mc\",\n        \"la_i_random_mr\",\n        \"la_i_random_vc\",\n        \"la_i_random_vr\",\n        \"la_i_size_mc\",\n        \"la_i_size_mr\",\n        \"la_i_size_vc\",\n        \"la_i_size_vr\",\n        \"la_i_subtract_mc\",\n        \"la_i_subtract_mr\",\n        \"la_i_subtract_vc\",\n        \"la_i_subtract_vr\",\n        \"la_i_t_assign\",\n        \"la_i_trace_mc\",\n        \"la_i_trace_mr\",\n        \"la_i_transpose_mc\",\n        \"la_i_transpose_mr\",\n        \"la_i_upper_solve_mc\",\n        \"la_i_upper_solve_mr\",\n        \"la_i_vc_create\",\n        \"la_i_vc_set\",\n        \"la_i_vr_create\",\n        \"la_i_vr_set\",\n        \"la_k_a_assign\",\n        \"la_k_add_mc\",\n        \"la_k_add_mr\",\n        \"la_k_add_vc\",\n        \"la_k_add_vr\",\n        \"la_k_assign_a\",\n        \"la_k_assign_f\",\n        \"la_k_assign_mc\",\n        \"la_k_assign_mr\",\n        \"la_k_assign_t\",\n        \"la_k_assign_vc\",\n        \"la_k_assign_vr\",\n        \"la_k_conjugate_mc\",\n        \"la_k_conjugate_mr\",\n        \"la_k_conjugate_vc\",\n        \"la_k_conjugate_vr\",\n        \"la_k_current_f\",\n        \"la_k_current_vr\",\n        \"la_k_distance_vc\",\n        \"la_k_distance_vr\",\n        \"la_k_divide_mc\",\n        \"la_k_divide_mr\",\n        \"la_k_divide_vc\",\n        \"la_k_divide_vr\",\n        \"la_k_dot_mc\",\n        \"la_k_dot_mc_vc\",\n        \"la_k_dot_mr\",\n        \"la_k_dot_mr_vr\",\n        \"la_k_dot_vc\",\n        \"la_k_dot_vr\",\n        \"la_k_f_assign\",\n        \"la_k_get_mc\",\n        \"la_k_get_mr\",\n        \"la_k_get_vc\",\n        \"la_k_get_vr\",\n        \"la_k_invert_mc\",\n        \"la_k_invert_mr\",\n        \"la_k_lower_solve_mc\",\n        \"la_k_lower_solve_mr\",\n        \"la_k_lu_det_mc\",\n        \"la_k_lu_det_mr\",\n        \"la_k_lu_factor_mc\",\n        \"la_k_lu_factor_mr\",\n        \"la_k_lu_solve_mc\",\n        \"la_k_lu_solve_mr\",\n        \"la_k_mc_set\",\n        \"la_k_mr_set\",\n        \"la_k_multiply_mc\",\n        \"la_k_multiply_mr\",\n        \"la_k_multiply_vc\",\n        \"la_k_multiply_vr\",\n        \"la_k_norm1_mc\",\n        \"la_k_norm1_mr\",\n        \"la_k_norm1_vc\",\n        \"la_k_norm1_vr\",\n        \"la_k_norm_euclid_mc\",\n        \"la_k_norm_euclid_mr\",\n        \"la_k_norm_euclid_vc\",\n        \"la_k_norm_euclid_vr\",\n        \"la_k_norm_inf_mc\",\n        \"la_k_norm_inf_mr\",\n        \"la_k_norm_inf_vc\",\n        \"la_k_norm_inf_vr\",\n        \"la_k_norm_max_mc\",\n        \"la_k_norm_max_mr\",\n        \"la_k_qr_eigen_mc\",\n        \"la_k_qr_eigen_mr\",\n        \"la_k_qr_factor_mc\",\n        \"la_k_qr_factor_mr\",\n        \"la_k_qr_sym_eigen_mc\",\n        \"la_k_qr_sym_eigen_mr\",\n        \"la_k_random_mc\",\n        \"la_k_random_mr\",\n        \"la_k_random_vc\",\n        \"la_k_random_vr\",\n        \"la_k_subtract_mc\",\n        \"la_k_subtract_mr\",\n        \"la_k_subtract_vc\",\n        \"la_k_subtract_vr\",\n        \"la_k_t_assign\",\n        \"la_k_trace_mc\",\n        \"la_k_trace_mr\",\n        \"la_k_upper_solve_mc\",\n        \"la_k_upper_solve_mr\",\n        \"la_k_vc_set\",\n        \"la_k_vr_set\",\n        \"lag\",\n        \"lagud\",\n        \"lastcycle\",\n        \"lenarray\",\n        \"lfo\",\n        \"lfsr\",\n        \"limit\",\n        \"limit1\",\n        \"lincos\",\n        \"line\",\n        \"linen\",\n        \"linenr\",\n        \"lineto\",\n        \"link_beat_force\",\n        \"link_beat_get\",\n        \"link_beat_request\",\n        \"link_create\",\n        \"link_enable\",\n        \"link_is_enabled\",\n        \"link_metro\",\n        \"link_peers\",\n        \"link_tempo_get\",\n        \"link_tempo_set\",\n        \"linlin\",\n        \"linrand\",\n        \"linseg\",\n        \"linsegb\",\n        \"linsegr\",\n        \"liveconv\",\n        \"locsend\",\n        \"locsig\",\n        \"log\",\n        \"log10\",\n        \"log2\",\n        \"logbtwo\",\n        \"logcurve\",\n        \"loopseg\",\n        \"loopsegp\",\n        \"looptseg\",\n        \"loopxseg\",\n        \"lorenz\",\n        \"loscil\",\n        \"loscil3\",\n        \"loscil3phs\",\n        \"loscilphs\",\n        \"loscilx\",\n        \"lowpass2\",\n        \"lowres\",\n        \"lowresx\",\n        \"lpcanal\",\n        \"lpcfilter\",\n        \"lpf18\",\n        \"lpform\",\n        \"lpfreson\",\n        \"lphasor\",\n        \"lpinterp\",\n        \"lposcil\",\n        \"lposcil3\",\n        \"lposcila\",\n        \"lposcilsa\",\n        \"lposcilsa2\",\n        \"lpread\",\n        \"lpreson\",\n        \"lpshold\",\n        \"lpsholdp\",\n        \"lpslot\",\n        \"lufs\",\n        \"mac\",\n        \"maca\",\n        \"madsr\",\n        \"mags\",\n        \"mandel\",\n        \"mandol\",\n        \"maparray\",\n        \"maparray_i\",\n        \"marimba\",\n        \"massign\",\n        \"max\",\n        \"max_k\",\n        \"maxabs\",\n        \"maxabsaccum\",\n        \"maxaccum\",\n        \"maxalloc\",\n        \"maxarray\",\n        \"mclock\",\n        \"mdelay\",\n        \"median\",\n        \"mediank\",\n        \"metro\",\n        \"metro2\",\n        \"metrobpm\",\n        \"mfb\",\n        \"midglobal\",\n        \"midiarp\",\n        \"midic14\",\n        \"midic21\",\n        \"midic7\",\n        \"midichannelaftertouch\",\n        \"midichn\",\n        \"midicontrolchange\",\n        \"midictrl\",\n        \"mididefault\",\n        \"midifilestatus\",\n        \"midiin\",\n        \"midinoteoff\",\n        \"midinoteoncps\",\n        \"midinoteonkey\",\n        \"midinoteonoct\",\n        \"midinoteonpch\",\n        \"midion\",\n        \"midion2\",\n        \"midiout\",\n        \"midiout_i\",\n        \"midipgm\",\n        \"midipitchbend\",\n        \"midipolyaftertouch\",\n        \"midiprogramchange\",\n        \"miditempo\",\n        \"midremot\",\n        \"min\",\n        \"minabs\",\n        \"minabsaccum\",\n        \"minaccum\",\n        \"minarray\",\n        \"mincer\",\n        \"mirror\",\n        \"mode\",\n        \"modmatrix\",\n        \"monitor\",\n        \"moog\",\n        \"moogladder\",\n        \"moogladder2\",\n        \"moogvcf\",\n        \"moogvcf2\",\n        \"moscil\",\n        \"mp3bitrate\",\n        \"mp3in\",\n        \"mp3len\",\n        \"mp3nchnls\",\n        \"mp3out\",\n        \"mp3scal\",\n        \"mp3sr\",\n        \"mpulse\",\n        \"mrtmsg\",\n        \"ms2st\",\n        \"mtof\",\n        \"mton\",\n        \"multitap\",\n        \"mute\",\n        \"mvchpf\",\n        \"mvclpf1\",\n        \"mvclpf2\",\n        \"mvclpf3\",\n        \"mvclpf4\",\n        \"mvmfilter\",\n        \"mxadsr\",\n        \"nchnls_hw\",\n        \"nestedap\",\n        \"nlalp\",\n        \"nlfilt\",\n        \"nlfilt2\",\n        \"noise\",\n        \"noteoff\",\n        \"noteon\",\n        \"noteondur\",\n        \"noteondur2\",\n        \"notnum\",\n        \"nreverb\",\n        \"nrpn\",\n        \"nsamp\",\n        \"nstance\",\n        \"nstrnum\",\n        \"nstrstr\",\n        \"ntof\",\n        \"ntom\",\n        \"ntrpol\",\n        \"nxtpow2\",\n        \"octave\",\n        \"octcps\",\n        \"octmidi\",\n        \"octmidib\",\n        \"octmidinn\",\n        \"octpch\",\n        \"olabuffer\",\n        \"oscbnk\",\n        \"oscil\",\n        \"oscil1\",\n        \"oscil1i\",\n        \"oscil3\",\n        \"oscili\",\n        \"oscilikt\",\n        \"osciliktp\",\n        \"oscilikts\",\n        \"osciln\",\n        \"oscils\",\n        \"oscilx\",\n        \"out\",\n        \"out32\",\n        \"outall\",\n        \"outc\",\n        \"outch\",\n        \"outh\",\n        \"outiat\",\n        \"outic\",\n        \"outic14\",\n        \"outipat\",\n        \"outipb\",\n        \"outipc\",\n        \"outkat\",\n        \"outkc\",\n        \"outkc14\",\n        \"outkpat\",\n        \"outkpb\",\n        \"outkpc\",\n        \"outleta\",\n        \"outletf\",\n        \"outletk\",\n        \"outletkid\",\n        \"outletv\",\n        \"outo\",\n        \"outq\",\n        \"outq1\",\n        \"outq2\",\n        \"outq3\",\n        \"outq4\",\n        \"outrg\",\n        \"outs\",\n        \"outs1\",\n        \"outs2\",\n        \"outvalue\",\n        \"outx\",\n        \"outz\",\n        \"p\",\n        \"p5gconnect\",\n        \"p5gdata\",\n        \"pan\",\n        \"pan2\",\n        \"pareq\",\n        \"part2txt\",\n        \"partials\",\n        \"partikkel\",\n        \"partikkelget\",\n        \"partikkelset\",\n        \"partikkelsync\",\n        \"passign\",\n        \"paulstretch\",\n        \"pcauchy\",\n        \"pchbend\",\n        \"pchmidi\",\n        \"pchmidib\",\n        \"pchmidinn\",\n        \"pchoct\",\n        \"pchtom\",\n        \"pconvolve\",\n        \"pcount\",\n        \"pdclip\",\n        \"pdhalf\",\n        \"pdhalfy\",\n        \"peak\",\n        \"pgmassign\",\n        \"pgmchn\",\n        \"phaser1\",\n        \"phaser2\",\n        \"phasor\",\n        \"phasorbnk\",\n        \"phs\",\n        \"pindex\",\n        \"pinker\",\n        \"pinkish\",\n        \"pitch\",\n        \"pitchac\",\n        \"pitchamdf\",\n        \"planet\",\n        \"platerev\",\n        \"plltrack\",\n        \"pluck\",\n        \"poisson\",\n        \"pol2rect\",\n        \"polyaft\",\n        \"polynomial\",\n        \"port\",\n        \"portk\",\n        \"poscil\",\n        \"poscil3\",\n        \"pow\",\n        \"powershape\",\n        \"powoftwo\",\n        \"pows\",\n        \"prealloc\",\n        \"prepiano\",\n        \"print\",\n        \"print_type\",\n        \"printarray\",\n        \"printf\",\n        \"printf_i\",\n        \"printk\",\n        \"printk2\",\n        \"printks\",\n        \"printks2\",\n        \"println\",\n        \"prints\",\n        \"printsk\",\n        \"product\",\n        \"pset\",\n        \"ptablew\",\n        \"ptrack\",\n        \"puts\",\n        \"pvadd\",\n        \"pvbufread\",\n        \"pvcross\",\n        \"pvinterp\",\n        \"pvoc\",\n        \"pvread\",\n        \"pvs2array\",\n        \"pvs2tab\",\n        \"pvsadsyn\",\n        \"pvsanal\",\n        \"pvsarp\",\n        \"pvsbandp\",\n        \"pvsbandr\",\n        \"pvsbandwidth\",\n        \"pvsbin\",\n        \"pvsblur\",\n        \"pvsbuffer\",\n        \"pvsbufread\",\n        \"pvsbufread2\",\n        \"pvscale\",\n        \"pvscent\",\n        \"pvsceps\",\n        \"pvscfs\",\n        \"pvscross\",\n        \"pvsdemix\",\n        \"pvsdiskin\",\n        \"pvsdisp\",\n        \"pvsenvftw\",\n        \"pvsfilter\",\n        \"pvsfread\",\n        \"pvsfreeze\",\n        \"pvsfromarray\",\n        \"pvsftr\",\n        \"pvsftw\",\n        \"pvsfwrite\",\n        \"pvsgain\",\n        \"pvsgendy\",\n        \"pvshift\",\n        \"pvsifd\",\n        \"pvsin\",\n        \"pvsinfo\",\n        \"pvsinit\",\n        \"pvslock\",\n        \"pvslpc\",\n        \"pvsmaska\",\n        \"pvsmix\",\n        \"pvsmooth\",\n        \"pvsmorph\",\n        \"pvsosc\",\n        \"pvsout\",\n        \"pvspitch\",\n        \"pvstanal\",\n        \"pvstencil\",\n        \"pvstrace\",\n        \"pvsvoc\",\n        \"pvswarp\",\n        \"pvsynth\",\n        \"pwd\",\n        \"pyassign\",\n        \"pyassigni\",\n        \"pyassignt\",\n        \"pycall\",\n        \"pycall1\",\n        \"pycall1i\",\n        \"pycall1t\",\n        \"pycall2\",\n        \"pycall2i\",\n        \"pycall2t\",\n        \"pycall3\",\n        \"pycall3i\",\n        \"pycall3t\",\n        \"pycall4\",\n        \"pycall4i\",\n        \"pycall4t\",\n        \"pycall5\",\n        \"pycall5i\",\n        \"pycall5t\",\n        \"pycall6\",\n        \"pycall6i\",\n        \"pycall6t\",\n        \"pycall7\",\n        \"pycall7i\",\n        \"pycall7t\",\n        \"pycall8\",\n        \"pycall8i\",\n        \"pycall8t\",\n        \"pycalli\",\n        \"pycalln\",\n        \"pycallni\",\n        \"pycallt\",\n        \"pyeval\",\n        \"pyevali\",\n        \"pyevalt\",\n        \"pyexec\",\n        \"pyexeci\",\n        \"pyexect\",\n        \"pyinit\",\n        \"pylassign\",\n        \"pylassigni\",\n        \"pylassignt\",\n        \"pylcall\",\n        \"pylcall1\",\n        \"pylcall1i\",\n        \"pylcall1t\",\n        \"pylcall2\",\n        \"pylcall2i\",\n        \"pylcall2t\",\n        \"pylcall3\",\n        \"pylcall3i\",\n        \"pylcall3t\",\n        \"pylcall4\",\n        \"pylcall4i\",\n        \"pylcall4t\",\n        \"pylcall5\",\n        \"pylcall5i\",\n        \"pylcall5t\",\n        \"pylcall6\",\n        \"pylcall6i\",\n        \"pylcall6t\",\n        \"pylcall7\",\n        \"pylcall7i\",\n        \"pylcall7t\",\n        \"pylcall8\",\n        \"pylcall8i\",\n        \"pylcall8t\",\n        \"pylcalli\",\n        \"pylcalln\",\n        \"pylcallni\",\n        \"pylcallt\",\n        \"pyleval\",\n        \"pylevali\",\n        \"pylevalt\",\n        \"pylexec\",\n        \"pylexeci\",\n        \"pylexect\",\n        \"pylrun\",\n        \"pylruni\",\n        \"pylrunt\",\n        \"pyrun\",\n        \"pyruni\",\n        \"pyrunt\",\n        \"qinf\",\n        \"qnan\",\n        \"r2c\",\n        \"rand\",\n        \"randc\",\n        \"randh\",\n        \"randi\",\n        \"random\",\n        \"randomh\",\n        \"randomi\",\n        \"rbjeq\",\n        \"readclock\",\n        \"readf\",\n        \"readfi\",\n        \"readk\",\n        \"readk2\",\n        \"readk3\",\n        \"readk4\",\n        \"readks\",\n        \"readscore\",\n        \"readscratch\",\n        \"rect2pol\",\n        \"release\",\n        \"remoteport\",\n        \"remove\",\n        \"repluck\",\n        \"reshapearray\",\n        \"reson\",\n        \"resonbnk\",\n        \"resonk\",\n        \"resonr\",\n        \"resonx\",\n        \"resonxk\",\n        \"resony\",\n        \"resonz\",\n        \"resyn\",\n        \"reverb\",\n        \"reverb2\",\n        \"reverbsc\",\n        \"rewindscore\",\n        \"rezzy\",\n        \"rfft\",\n        \"rifft\",\n        \"rms\",\n        \"rnd\",\n        \"rnd31\",\n        \"rndseed\",\n        \"round\",\n        \"rspline\",\n        \"rtclock\",\n        \"s16b14\",\n        \"s32b14\",\n        \"samphold\",\n        \"sandpaper\",\n        \"sc_lag\",\n        \"sc_lagud\",\n        \"sc_phasor\",\n        \"sc_trig\",\n        \"scale\",\n        \"scale2\",\n        \"scalearray\",\n        \"scanhammer\",\n        \"scanmap\",\n        \"scans\",\n        \"scansmap\",\n        \"scantable\",\n        \"scanu\",\n        \"scanu2\",\n        \"schedkwhen\",\n        \"schedkwhennamed\",\n        \"schedule\",\n        \"schedulek\",\n        \"schedwhen\",\n        \"scoreline\",\n        \"scoreline_i\",\n        \"seed\",\n        \"sekere\",\n        \"select\",\n        \"semitone\",\n        \"sense\",\n        \"sensekey\",\n        \"seqtime\",\n        \"seqtime2\",\n        \"sequ\",\n        \"serialBegin\",\n        \"serialEnd\",\n        \"serialFlush\",\n        \"serialPrint\",\n        \"serialRead\",\n        \"serialWrite\",\n        \"serialWrite_i\",\n        \"setcol\",\n        \"setctrl\",\n        \"setksmps\",\n        \"setrow\",\n        \"setscorepos\",\n        \"sfilist\",\n        \"sfinstr\",\n        \"sfinstr3\",\n        \"sfinstr3m\",\n        \"sfinstrm\",\n        \"sfload\",\n        \"sflooper\",\n        \"sfpassign\",\n        \"sfplay\",\n        \"sfplay3\",\n        \"sfplay3m\",\n        \"sfplaym\",\n        \"sfplist\",\n        \"sfpreset\",\n        \"shaker\",\n        \"shiftin\",\n        \"shiftout\",\n        \"signum\",\n        \"sin\",\n        \"sinh\",\n        \"sininv\",\n        \"sinsyn\",\n        \"skf\",\n        \"sleighbells\",\n        \"slicearray\",\n        \"slicearray_i\",\n        \"slider16\",\n        \"slider16f\",\n        \"slider16table\",\n        \"slider16tablef\",\n        \"slider32\",\n        \"slider32f\",\n        \"slider32table\",\n        \"slider32tablef\",\n        \"slider64\",\n        \"slider64f\",\n        \"slider64table\",\n        \"slider64tablef\",\n        \"slider8\",\n        \"slider8f\",\n        \"slider8table\",\n        \"slider8tablef\",\n        \"sliderKawai\",\n        \"sndloop\",\n        \"sndwarp\",\n        \"sndwarpst\",\n        \"sockrecv\",\n        \"sockrecvs\",\n        \"socksend\",\n        \"socksends\",\n        \"sorta\",\n        \"sortd\",\n        \"soundin\",\n        \"space\",\n        \"spat3d\",\n        \"spat3di\",\n        \"spat3dt\",\n        \"spdist\",\n        \"spf\",\n        \"splitrig\",\n        \"sprintf\",\n        \"sprintfk\",\n        \"spsend\",\n        \"sqrt\",\n        \"squinewave\",\n        \"st2ms\",\n        \"statevar\",\n        \"sterrain\",\n        \"stix\",\n        \"strcat\",\n        \"strcatk\",\n        \"strchar\",\n        \"strchark\",\n        \"strcmp\",\n        \"strcmpk\",\n        \"strcpy\",\n        \"strcpyk\",\n        \"strecv\",\n        \"streson\",\n        \"strfromurl\",\n        \"strget\",\n        \"strindex\",\n        \"strindexk\",\n        \"string2array\",\n        \"strlen\",\n        \"strlenk\",\n        \"strlower\",\n        \"strlowerk\",\n        \"strrindex\",\n        \"strrindexk\",\n        \"strset\",\n        \"strstrip\",\n        \"strsub\",\n        \"strsubk\",\n        \"strtod\",\n        \"strtodk\",\n        \"strtol\",\n        \"strtolk\",\n        \"strupper\",\n        \"strupperk\",\n        \"stsend\",\n        \"subinstr\",\n        \"subinstrinit\",\n        \"sum\",\n        \"sumarray\",\n        \"svfilter\",\n        \"svn\",\n        \"syncgrain\",\n        \"syncloop\",\n        \"syncphasor\",\n        \"system\",\n        \"system_i\",\n        \"tab\",\n        \"tab2array\",\n        \"tab2pvs\",\n        \"tab_i\",\n        \"tabifd\",\n        \"table\",\n        \"table3\",\n        \"table3kt\",\n        \"tablecopy\",\n        \"tablefilter\",\n        \"tablefilteri\",\n        \"tablegpw\",\n        \"tablei\",\n        \"tableicopy\",\n        \"tableigpw\",\n        \"tableikt\",\n        \"tableimix\",\n        \"tablekt\",\n        \"tablemix\",\n        \"tableng\",\n        \"tablera\",\n        \"tableseg\",\n        \"tableshuffle\",\n        \"tableshufflei\",\n        \"tablew\",\n        \"tablewa\",\n        \"tablewkt\",\n        \"tablexkt\",\n        \"tablexseg\",\n        \"tabmorph\",\n        \"tabmorpha\",\n        \"tabmorphak\",\n        \"tabmorphi\",\n        \"tabplay\",\n        \"tabrec\",\n        \"tabsum\",\n        \"tabw\",\n        \"tabw_i\",\n        \"tambourine\",\n        \"tan\",\n        \"tanh\",\n        \"taninv\",\n        \"taninv2\",\n        \"tbvcf\",\n        \"tempest\",\n        \"tempo\",\n        \"temposcal\",\n        \"tempoval\",\n        \"timedseq\",\n        \"timeinstk\",\n        \"timeinsts\",\n        \"timek\",\n        \"times\",\n        \"tival\",\n        \"tlineto\",\n        \"tone\",\n        \"tonek\",\n        \"tonex\",\n        \"tradsyn\",\n        \"trandom\",\n        \"transeg\",\n        \"transegb\",\n        \"transegr\",\n        \"trcross\",\n        \"trfilter\",\n        \"trhighest\",\n        \"trigExpseg\",\n        \"trigLinseg\",\n        \"trigexpseg\",\n        \"trigger\",\n        \"trighold\",\n        \"triglinseg\",\n        \"trigphasor\",\n        \"trigseq\",\n        \"trim\",\n        \"trim_i\",\n        \"trirand\",\n        \"trlowest\",\n        \"trmix\",\n        \"trscale\",\n        \"trshift\",\n        \"trsplit\",\n        \"turnoff\",\n        \"turnoff2\",\n        \"turnoff2_i\",\n        \"turnoff3\",\n        \"turnon\",\n        \"tvconv\",\n        \"unirand\",\n        \"unwrap\",\n        \"upsamp\",\n        \"urandom\",\n        \"urd\",\n        \"vactrol\",\n        \"vadd\",\n        \"vadd_i\",\n        \"vaddv\",\n        \"vaddv_i\",\n        \"vaget\",\n        \"valpass\",\n        \"vaset\",\n        \"vbap\",\n        \"vbapg\",\n        \"vbapgmove\",\n        \"vbaplsinit\",\n        \"vbapmove\",\n        \"vbapz\",\n        \"vbapzmove\",\n        \"vcella\",\n        \"vclpf\",\n        \"vco\",\n        \"vco2\",\n        \"vco2ft\",\n        \"vco2ift\",\n        \"vco2init\",\n        \"vcomb\",\n        \"vcopy\",\n        \"vcopy_i\",\n        \"vdel_k\",\n        \"vdelay\",\n        \"vdelay3\",\n        \"vdelayk\",\n        \"vdelayx\",\n        \"vdelayxq\",\n        \"vdelayxs\",\n        \"vdelayxw\",\n        \"vdelayxwq\",\n        \"vdelayxws\",\n        \"vdivv\",\n        \"vdivv_i\",\n        \"vecdelay\",\n        \"veloc\",\n        \"vexp\",\n        \"vexp_i\",\n        \"vexpseg\",\n        \"vexpv\",\n        \"vexpv_i\",\n        \"vibes\",\n        \"vibr\",\n        \"vibrato\",\n        \"vincr\",\n        \"vlimit\",\n        \"vlinseg\",\n        \"vlowres\",\n        \"vmap\",\n        \"vmirror\",\n        \"vmult\",\n        \"vmult_i\",\n        \"vmultv\",\n        \"vmultv_i\",\n        \"voice\",\n        \"vosim\",\n        \"vphaseseg\",\n        \"vport\",\n        \"vpow\",\n        \"vpow_i\",\n        \"vpowv\",\n        \"vpowv_i\",\n        \"vps\",\n        \"vpvoc\",\n        \"vrandh\",\n        \"vrandi\",\n        \"vsubv\",\n        \"vsubv_i\",\n        \"vtaba\",\n        \"vtabi\",\n        \"vtabk\",\n        \"vtable1k\",\n        \"vtablea\",\n        \"vtablei\",\n        \"vtablek\",\n        \"vtablewa\",\n        \"vtablewi\",\n        \"vtablewk\",\n        \"vtabwa\",\n        \"vtabwi\",\n        \"vtabwk\",\n        \"vwrap\",\n        \"waveset\",\n        \"websocket\",\n        \"weibull\",\n        \"wgbow\",\n        \"wgbowedbar\",\n        \"wgbrass\",\n        \"wgclar\",\n        \"wgflute\",\n        \"wgpluck\",\n        \"wgpluck2\",\n        \"wguide1\",\n        \"wguide2\",\n        \"wiiconnect\",\n        \"wiidata\",\n        \"wiirange\",\n        \"wiisend\",\n        \"window\",\n        \"wrap\",\n        \"writescratch\",\n        \"wterrain\",\n        \"wterrain2\",\n        \"xadsr\",\n        \"xin\",\n        \"xout\",\n        \"xtratim\",\n        \"xyscale\",\n        \"zacl\",\n        \"zakinit\",\n        \"zamod\",\n        \"zar\",\n        \"zarg\",\n        \"zaw\",\n        \"zawm\",\n        \"zdf_1pole\",\n        \"zdf_1pole_mode\",\n        \"zdf_2pole\",\n        \"zdf_2pole_mode\",\n        \"zdf_ladder\",\n        \"zfilter2\",\n        \"zir\",\n        \"ziw\",\n        \"ziwm\",\n        \"zkcl\",\n        \"zkmod\",\n        \"zkr\",\n        \"zkw\",\n        \"zkwm\"\n    ];\n    var deprecatedOpcodes = [\n        \"OSCsendA\",\n        \"array\",\n        \"beadsynt\",\n        \"beosc\",\n        \"bformdec\",\n        \"bformenc\",\n        \"buchla\",\n        \"copy2ftab\",\n        \"copy2ttab\",\n        \"getrowlin\",\n        \"hrtfer\",\n        \"ktableseg\",\n        \"lentab\",\n        \"lua_exec\",\n        \"lua_iaopcall\",\n        \"lua_iaopcall_off\",\n        \"lua_ikopcall\",\n        \"lua_ikopcall_off\",\n        \"lua_iopcall\",\n        \"lua_iopcall_off\",\n        \"lua_opdef\",\n        \"maxtab\",\n        \"mintab\",\n        \"mp3scal_check\",\n        \"mp3scal_load\",\n        \"mp3scal_load2\",\n        \"mp3scal_play\",\n        \"mp3scal_play2\",\n        \"pop\",\n        \"pop_f\",\n        \"ptable\",\n        \"ptable3\",\n        \"ptablei\",\n        \"ptableiw\",\n        \"push\",\n        \"push_f\",\n        \"pvsgendy\",\n        \"scalet\",\n        \"signalflowgraph\",\n        \"sndload\",\n        \"socksend_k\",\n        \"soundout\",\n        \"soundouts\",\n        \"specaddm\",\n        \"specdiff\",\n        \"specdisp\",\n        \"specfilt\",\n        \"spechist\",\n        \"specptrk\",\n        \"specscal\",\n        \"specsum\",\n        \"spectrum\",\n        \"stack\",\n        \"sumTableFilter\",\n        \"sumtab\",\n        \"systime\",\n        \"tabgen\",\n        \"tableiw\",\n        \"tabmap\",\n        \"tabmap_i\",\n        \"tabrowlin\",\n        \"tabslice\",\n        \"tb0\",\n        \"tb0_init\",\n        \"tb1\",\n        \"tb10\",\n        \"tb10_init\",\n        \"tb11\",\n        \"tb11_init\",\n        \"tb12\",\n        \"tb12_init\",\n        \"tb13\",\n        \"tb13_init\",\n        \"tb14\",\n        \"tb14_init\",\n        \"tb15\",\n        \"tb15_init\",\n        \"tb1_init\",\n        \"tb2\",\n        \"tb2_init\",\n        \"tb3\",\n        \"tb3_init\",\n        \"tb4\",\n        \"tb4_init\",\n        \"tb5\",\n        \"tb5_init\",\n        \"tb6\",\n        \"tb6_init\",\n        \"tb7\",\n        \"tb7_init\",\n        \"tb8\",\n        \"tb8_init\",\n        \"tb9\",\n        \"tb9_init\",\n        \"vbap16\",\n        \"vbap1move\",\n        \"vbap4\",\n        \"vbap4move\",\n        \"vbap8\",\n        \"vbap8move\",\n        \"xscanmap\",\n        \"xscans\",\n        \"xscansmap\",\n        \"xscanu\",\n        \"xyin\"\n    ];\n    opcodes = lang.arrayToMap(opcodes);\n    deprecatedOpcodes = lang.arrayToMap(deprecatedOpcodes);\n    this.lineContinuations = [\n        {\n            token: \"constant.character.escape.line-continuation.csound\",\n            regex: /\\\\$/\n        }, this.pushRule({\n            token: \"constant.character.escape.line-continuation.csound\",\n            regex: /\\\\/,\n            next: \"line continuation\"\n        })\n    ];\n    this.comments.push(this.lineContinuations);\n    this.quotedStringContents.push(this.lineContinuations, {\n        token: \"invalid.illegal\",\n        regex: /[^\"\\\\]*$/\n    });\n    var start = this.$rules.start;\n    start.splice(1, 0, {\n        token: [\"text.csound\", \"entity.name.label.csound\", \"entity.punctuation.label.csound\", \"text.csound\"],\n        regex: /^([ \\t]*)(\\w+)(:)([ \\t]+|$)/\n    });\n    start.push(this.pushRule({\n        token: \"keyword.function.csound\",\n        regex: /\\binstr\\b/,\n        next: \"instrument numbers and identifiers\"\n    }), this.pushRule({\n        token: \"keyword.function.csound\",\n        regex: /\\bopcode\\b/,\n        next: \"after opcode keyword\"\n    }), {\n        token: \"keyword.other.csound\",\n        regex: /\\bend(?:in|op)\\b/\n    }, {\n        token: \"variable.language.csound\",\n        regex: /\\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\\b/\n    }, this.numbers, {\n        token: \"keyword.operator.csound\",\n        regex: \"\\\\+=|-=|\\\\*=|/=|<<|>>|<=|>=|==|!=|&&|\\\\|\\\\||[~¬]|[=!+\\\\-*/^%&|<>#?:]\"\n    }, this.pushRule({\n        token: \"punctuation.definition.string.begin.csound\",\n        regex: /\"/,\n        next: \"quoted string\"\n    }), this.pushRule({\n        token: \"punctuation.definition.string.begin.csound\",\n        regex: /{{/,\n        next: \"braced string\"\n    }), {\n        token: \"keyword.control.csound\",\n        regex: /\\b(?:do|else(?:if)?|end(?:if|until)|fi|i(?:f|then)|kthen|od|r(?:ir)?eturn|then|until|while)\\b/\n    }, this.pushRule({\n        token: \"keyword.control.csound\",\n        regex: /\\b[ik]?goto\\b/,\n        next: \"goto before label\"\n    }), this.pushRule({\n        token: \"keyword.control.csound\",\n        regex: /\\b(?:r(?:einit|igoto)|tigoto)\\b/,\n        next: \"goto before label\"\n    }), this.pushRule({\n        token: \"keyword.control.csound\",\n        regex: /\\bc(?:g|in?|k|nk?)goto\\b/,\n        next: [\"goto before label\", \"goto before argument\"]\n    }), this.pushRule({\n        token: \"keyword.control.csound\",\n        regex: /\\btimout\\b/,\n        next: [\"goto before label\", \"goto before argument\", \"goto before argument\"]\n    }), this.pushRule({\n        token: \"keyword.control.csound\",\n        regex: /\\bloop_[gl][et]\\b/,\n        next: [\"goto before label\", \"goto before argument\", \"goto before argument\", \"goto before argument\"]\n    }), this.pushRule({\n        token: \"support.function.csound\",\n        regex: /\\b(?:readscore|scoreline(?:_i)?)\\b/,\n        next: \"Csound score opcode\"\n    }), this.pushRule({\n        token: \"support.function.csound\",\n        regex: /\\bpyl?run[it]?\\b(?!$)/,\n        next: \"Python opcode\"\n    }), this.pushRule({\n        token: \"support.function.csound\",\n        regex: /\\blua_(?:exec|opdef)\\b(?!$)/,\n        next: \"Lua opcode\"\n    }), {\n        token: \"support.variable.csound\",\n        regex: /\\bp\\d+\\b/\n    }, {\n        regex: /\\b([A-Z_a-z]\\w*)(?:(:)([A-Za-z]))?\\b/, onMatch: function (value, currentState, stack, line) {\n            var tokens = value.split(this.splitRegex);\n            var name = tokens[1];\n            var type;\n            if (opcodes.hasOwnProperty(name))\n                type = \"support.function.csound\";\n            else if (deprecatedOpcodes.hasOwnProperty(name))\n                type = \"invalid.deprecated.csound\";\n            if (type) {\n                if (tokens[2]) {\n                    return [\n                        { type: type, value: name },\n                        { type: \"punctuation.type-annotation.csound\", value: tokens[2] },\n                        { type: \"type-annotation.storage.type.csound\", value: tokens[3] }\n                    ];\n                }\n                return type;\n            }\n            return \"text.csound\";\n        }\n    });\n    this.$rules[\"macro parameter value list\"].splice(2, 0, {\n        token: \"punctuation.definition.string.begin.csound\",\n        regex: /{{/,\n        next: \"macro parameter value braced string\"\n    });\n    var scoreHighlightRules = new CsoundScoreHighlightRules(\"csound-score-\");\n    this.addRules({\n        \"macro parameter value braced string\": [\n            {\n                token: \"constant.character.escape.csound\",\n                regex: /\\\\[#'()]/\n            }, {\n                token: \"invalid.illegal.csound.csound\",\n                regex: /[#'()]/\n            }, {\n                token: \"punctuation.definition.string.end.csound\",\n                regex: /}}/,\n                next: \"macro parameter value list\"\n            }, {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n        \"instrument numbers and identifiers\": [\n            this.comments,\n            {\n                token: \"entity.name.function.csound\",\n                regex: /\\d+|[A-Z_a-z]\\w*/\n            }, this.popRule({\n                token: \"empty\",\n                regex: /$/\n            })\n        ],\n        \"after opcode keyword\": [\n            this.comments,\n            this.popRule({\n                token: \"empty\",\n                regex: /$/\n            }), this.popRule({\n                token: \"entity.name.function.opcode.csound\",\n                regex: /[A-Z_a-z]\\w*/,\n                next: \"opcode type signatures\"\n            })\n        ],\n        \"opcode type signatures\": [\n            this.comments,\n            this.popRule({\n                token: \"empty\",\n                regex: /$/\n            }), {\n                token: \"storage.type.csound\",\n                regex: /\\b(?:0|[afijkKoOpPStV\\[\\]]+)/\n            }\n        ],\n        \"quoted string\": [\n            this.popRule({\n                token: \"punctuation.definition.string.end.csound\",\n                regex: /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"braced string\": [\n            this.popRule({\n                token: \"punctuation.definition.string.end.csound\",\n                regex: /}}/\n            }),\n            this.bracedStringContents,\n            {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n        \"goto before argument\": [\n            this.popRule({\n                token: \"text.csound\",\n                regex: /,/\n            }),\n            start\n        ],\n        \"goto before label\": [\n            {\n                token: \"text.csound\",\n                regex: /\\s+/\n            },\n            this.comments,\n            this.popRule({\n                token: \"entity.name.label.csound\",\n                regex: /\\w+/\n            }), this.popRule({\n                token: \"empty\",\n                regex: /(?!\\w)/\n            })\n        ],\n        \"Csound score opcode\": [\n            this.comments,\n            {\n                token: \"punctuation.definition.string.begin.csound\",\n                regex: /{{/,\n                next: scoreHighlightRules.embeddedRulePrefix + \"start\"\n            }, this.popRule({\n                token: \"empty\",\n                regex: /$/\n            })\n        ],\n        \"Python opcode\": [\n            this.comments,\n            {\n                token: \"punctuation.definition.string.begin.csound\",\n                regex: /{{/,\n                next: \"python-start\"\n            }, this.popRule({\n                token: \"empty\",\n                regex: /$/\n            })\n        ],\n        \"Lua opcode\": [\n            this.comments,\n            {\n                token: \"punctuation.definition.string.begin.csound\",\n                regex: /{{/,\n                next: \"lua-start\"\n            }, this.popRule({\n                token: \"empty\",\n                regex: /$/\n            })\n        ],\n        \"line continuation\": [\n            this.popRule({\n                token: \"empty\",\n                regex: /$/\n            }),\n            this.semicolonComments,\n            {\n                token: \"invalid.illegal.csound\",\n                regex: /\\S.*/\n            }\n        ]\n    });\n    var rules = [\n        this.popRule({\n            token: \"punctuation.definition.string.end.csound\",\n            regex: /}}/\n        })\n    ];\n    this.embedRules(scoreHighlightRules.getRules(), scoreHighlightRules.embeddedRulePrefix, rules);\n    this.embedRules(PythonHighlightRules, \"python-\", rules);\n    this.embedRules(LuaHighlightRules, \"lua-\", rules);\n    this.normalizeRules();\n};\noop.inherits(CsoundOrchestraHighlightRules, CsoundPreprocessorHighlightRules);\nexports.CsoundOrchestraHighlightRules = CsoundOrchestraHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/csound_document_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_orchestra_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar CsoundOrchestraHighlightRules = require(\"./csound_orchestra_highlight_rules\").CsoundOrchestraHighlightRules;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CsoundDocumentHighlightRules = function () {\n    var orchestraHighlightRules = new CsoundOrchestraHighlightRules(\"csound-\");\n    var scoreHighlightRules = new CsoundScoreHighlightRules(\"csound-score-\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex: /(<)(CsoundSynthesi[sz]er)(>)/,\n                next: \"synthesizer\"\n            },\n            { defaultToken: \"text.csound-document\" }\n        ],\n        \"synthesizer\": [\n            {\n                token: [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex: \"(</)(CsoundSynthesi[sz]er)(>)\",\n                next: \"start\"\n            }, {\n                token: [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex: \"(<)(CsInstruments)(>)\",\n                next: orchestraHighlightRules.embeddedRulePrefix + \"start\"\n            }, {\n                token: [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex: \"(<)(CsScore)(>)\",\n                next: scoreHighlightRules.embeddedRulePrefix + \"start\"\n            }, {\n                token: [\"meta.tag.punctuation.tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n                regex: \"(<)([Hh][Tt][Mm][Ll])(>)\",\n                next: \"html-start\"\n            }\n        ]\n    };\n    this.embedRules(orchestraHighlightRules.getRules(), orchestraHighlightRules.embeddedRulePrefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n            regex: \"(</)(CsInstruments)(>)\",\n            next: \"synthesizer\"\n        }]);\n    this.embedRules(scoreHighlightRules.getRules(), scoreHighlightRules.embeddedRulePrefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n            regex: \"(</)(CsScore)(>)\",\n            next: \"synthesizer\"\n        }]);\n    this.embedRules(HtmlHighlightRules, \"html-\", [{\n            token: [\"meta.tag.punctuation.end-tag-open.csound-document\", \"entity.name.tag.begin.csound-document\", \"meta.tag.punctuation.tag-close.csound-document\"],\n            regex: \"(</)([Hh][Tt][Mm][Ll])(>)\",\n            next: \"synthesizer\"\n        }]);\n    this.normalizeRules();\n};\noop.inherits(CsoundDocumentHighlightRules, TextHighlightRules);\nexports.CsoundDocumentHighlightRules = CsoundDocumentHighlightRules;\n\n});\n\nace.define(\"ace/mode/csound_document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_document_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CsoundDocumentHighlightRules = require(\"./csound_document_highlight_rules\").CsoundDocumentHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = CsoundDocumentHighlightRules;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/csound_document\";\n    this.snippetFileId = \"ace/snippets/csound_document\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/csound_document\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-csound_orchestra.js",
    "content": "ace.define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CsoundPreprocessorHighlightRules = function (embeddedRulePrefix) {\n    this.embeddedRulePrefix = embeddedRulePrefix === undefined ? \"\" : embeddedRulePrefix;\n    this.semicolonComments = {\n        token: \"comment.line.semicolon.csound\",\n        regex: \";.*$\"\n    };\n    this.comments = [\n        {\n            token: \"punctuation.definition.comment.begin.csound\",\n            regex: \"/\\\\*\",\n            push: [\n                {\n                    token: \"punctuation.definition.comment.end.csound\",\n                    regex: \"\\\\*/\",\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"comment.block.csound\"\n                }\n            ]\n        }, {\n            token: \"comment.line.double-slash.csound\",\n            regex: \"//.*$\"\n        },\n        this.semicolonComments\n    ];\n    this.macroUses = [\n        {\n            token: [\"entity.name.function.preprocessor.csound\", \"punctuation.definition.macro-parameter-value-list.begin.csound\"],\n            regex: /(\\$[A-Z_a-z]\\w*\\.?)(\\()/,\n            next: \"macro parameter value list\"\n        }, {\n            token: \"entity.name.function.preprocessor.csound\",\n            regex: /\\$[A-Z_a-z]\\w*(?:\\.|\\b)/\n        }\n    ];\n    this.numbers = [\n        {\n            token: \"constant.numeric.float.csound\",\n            regex: /(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/\n        }, {\n            token: [\"storage.type.number.csound\", \"constant.numeric.integer.hexadecimal.csound\"],\n            regex: /(0[Xx])([0-9A-Fa-f]+)/\n        }, {\n            token: \"constant.numeric.integer.decimal.csound\",\n            regex: /\\d+/\n        }\n    ];\n    this.bracedStringContents = [\n        {\n            token: \"constant.character.escape.csound\",\n            regex: /\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/\n        },\n        {\n            token: \"constant.character.placeholder.csound\",\n            regex: /%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/\n        }, {\n            token: \"constant.character.escape.csound\",\n            regex: /%%/\n        }\n    ];\n    this.quotedStringContents = [\n        this.macroUses,\n        this.bracedStringContents\n    ];\n    var start = [\n        this.comments,\n        {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/\n        }, {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#include/,\n            push: [\n                this.comments,\n                {\n                    token: \"string.csound\",\n                    regex: /([^ \\t])(?:.*?\\1)/,\n                    next: \"pop\"\n                }\n            ]\n        }, {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#includestr/,\n            push: [\n                this.comments,\n                {\n                    token: \"string.csound\",\n                    regex: /([^ \\t])(?:.*?\\1)/,\n                    next: \"pop\"\n                }\n            ]\n        }, {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#[ \\t]*define/,\n            next: \"define directive\"\n        }, {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#(?:ifn?def|undef)\\b/,\n            next: \"macro directive\"\n        },\n        this.macroUses\n    ];\n    this.$rules = {\n        \"start\": start,\n        \"define directive\": [\n            this.comments,\n            {\n                token: \"entity.name.function.preprocessor.csound\",\n                regex: /[A-Z_a-z]\\w*/\n            }, {\n                token: \"punctuation.definition.macro-parameter-name-list.begin.csound\",\n                regex: /\\(/,\n                next: \"macro parameter name list\"\n            }, {\n                token: \"punctuation.definition.macro.begin.csound\",\n                regex: /#/,\n                next: \"macro body\"\n            }\n        ],\n        \"macro parameter name list\": [\n            {\n                token: \"variable.parameter.preprocessor.csound\",\n                regex: /[A-Z_a-z]\\w*/\n            }, {\n                token: \"punctuation.definition.macro-parameter-name-list.end.csound\",\n                regex: /\\)/,\n                next: \"define directive\"\n            }\n        ],\n        \"macro body\": [\n            {\n                token: \"constant.character.escape.csound\",\n                regex: /\\\\#/\n            }, {\n                token: \"punctuation.definition.macro.end.csound\",\n                regex: /#/,\n                next: \"start\"\n            },\n            start\n        ],\n        \"macro directive\": [\n            this.comments,\n            {\n                token: \"entity.name.function.preprocessor.csound\",\n                regex: /[A-Z_a-z]\\w*/,\n                next: \"start\"\n            }\n        ],\n        \"macro parameter value list\": [\n            {\n                token: \"punctuation.definition.macro-parameter-value-list.end.csound\",\n                regex: /\\)/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.definition.string.begin.csound\",\n                regex: /\"/,\n                next: \"macro parameter value quoted string\"\n            }, this.pushRule({\n                token: \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex: /\\(/,\n                next: \"macro parameter value parenthetical\"\n            }), {\n                token: \"punctuation.macro-parameter-value-separator.csound\",\n                regex: \"[#']\"\n            }\n        ],\n        \"macro parameter value quoted string\": [\n            {\n                token: \"constant.character.escape.csound\",\n                regex: /\\\\[#'()]/\n            }, {\n                token: \"invalid.illegal.csound\",\n                regex: /[#'()]/\n            }, {\n                token: \"punctuation.definition.string.end.csound\",\n                regex: /\"/,\n                next: \"macro parameter value list\"\n            },\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"macro parameter value parenthetical\": [\n            {\n                token: \"constant.character.escape.csound\",\n                regex: /\\\\\\)/\n            }, this.popRule({\n                token: \"punctuation.macro-parameter-value-parenthetical.end.csound\",\n                regex: /\\)/\n            }), this.pushRule({\n                token: \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex: /\\(/,\n                next: \"macro parameter value parenthetical\"\n            }),\n            start\n        ]\n    };\n};\noop.inherits(CsoundPreprocessorHighlightRules, TextHighlightRules);\n(function () {\n    this.pushRule = function (params) {\n        if (Array.isArray(params.next)) {\n            for (var i = 0; i < params.next.length; i++) {\n                params.next[i] = this.embeddedRulePrefix + params.next[i];\n            }\n        }\n        return {\n            regex: params.regex, onMatch: function (value, currentState, stack, line) {\n                if (stack.length === 0)\n                    stack.push(currentState);\n                if (Array.isArray(params.next)) {\n                    for (var i = 0; i < params.next.length; i++) {\n                        stack.push(params.next[i]);\n                    }\n                }\n                else {\n                    stack.push(params.next);\n                }\n                this.next = stack[stack.length - 1];\n                return params.token;\n            },\n            get next() { return Array.isArray(params.next) ? params.next[params.next.length - 1] : params.next; },\n            set next(next) {\n                if (!Array.isArray(params.next)) {\n                    params.next = next;\n                }\n            },\n            get token() { return params.token; }\n        };\n    };\n    this.popRule = function (params) {\n        if (params.next) {\n            params.next = this.embeddedRulePrefix + params.next;\n        }\n        return {\n            regex: params.regex, onMatch: function (value, currentState, stack, line) {\n                stack.pop();\n                if (params.next) {\n                    stack.push(params.next);\n                    this.next = stack[stack.length - 1];\n                }\n                else {\n                    this.next = stack.length > 1 ? stack[stack.length - 1] : stack.pop();\n                }\n                return params.token;\n            }\n        };\n    };\n}).call(CsoundPreprocessorHighlightRules.prototype);\nexports.CsoundPreprocessorHighlightRules = CsoundPreprocessorHighlightRules;\n\n});\n\nace.define(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\nvar CsoundScoreHighlightRules = function (embeddedRulePrefix) {\n    CsoundPreprocessorHighlightRules.call(this, embeddedRulePrefix);\n    this.quotedStringContents.push({\n        token: \"invalid.illegal.csound-score\",\n        regex: /[^\"]*$/\n    });\n    var start = this.$rules.start;\n    start.push({\n        token: \"keyword.control.csound-score\",\n        regex: /[aBbCdefiqstvxy]/\n    }, {\n        token: \"invalid.illegal.csound-score\",\n        regex: /w/\n    }, {\n        token: \"constant.numeric.language.csound-score\",\n        regex: /z/\n    }, {\n        token: [\"keyword.control.csound-score\", \"constant.numeric.integer.decimal.csound-score\"],\n        regex: /([nNpP][pP])(\\d+)/\n    }, {\n        token: \"keyword.other.csound-score\",\n        regex: /[mn]/,\n        push: [\n            {\n                token: \"empty\",\n                regex: /$/,\n                next: \"pop\"\n            },\n            this.comments,\n            {\n                token: \"entity.name.label.csound-score\",\n                regex: /[A-Z_a-z]\\w*/\n            }\n        ]\n    }, {\n        token: \"keyword.preprocessor.csound-score\",\n        regex: /r\\b/,\n        next: \"repeat section\"\n    }, this.numbers, {\n        token: \"keyword.operator.csound-score\",\n        regex: \"[!+\\\\-*/^%&|<>#~.]\"\n    }, this.pushRule({\n        token: \"punctuation.definition.string.begin.csound-score\",\n        regex: /\"/,\n        next: \"quoted string\"\n    }), this.pushRule({\n        token: \"punctuation.braced-loop.begin.csound-score\",\n        regex: /{/,\n        next: \"loop after left brace\"\n    }));\n    this.addRules({\n        \"repeat section\": [\n            {\n                token: \"empty\",\n                regex: /$/,\n                next: \"start\"\n            },\n            this.comments,\n            {\n                token: \"constant.numeric.integer.decimal.csound-score\",\n                regex: /\\d+/,\n                next: \"repeat section before label\"\n            }\n        ],\n        \"repeat section before label\": [\n            {\n                token: \"empty\",\n                regex: /$/,\n                next: \"start\"\n            },\n            this.comments,\n            {\n                token: \"entity.name.label.csound-score\",\n                regex: /[A-Z_a-z]\\w*/,\n                next: \"start\"\n            }\n        ],\n        \"quoted string\": [\n            this.popRule({\n                token: \"punctuation.definition.string.end.csound-score\",\n                regex: /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound-score\"\n            }\n        ],\n        \"loop after left brace\": [\n            this.popRule({\n                token: \"constant.numeric.integer.decimal.csound-score\",\n                regex: /\\d+/,\n                next: \"loop after repeat count\"\n            }),\n            this.comments,\n            {\n                token: \"invalid.illegal.csound\",\n                regex: /\\S.*/\n            }\n        ],\n        \"loop after repeat count\": [\n            this.popRule({\n                token: \"entity.name.function.preprocessor.csound-score\",\n                regex: /[A-Z_a-z]\\w*\\b/,\n                next: \"loop after macro name\"\n            }),\n            this.comments,\n            {\n                token: \"invalid.illegal.csound\",\n                regex: /\\S.*/\n            }\n        ],\n        \"loop after macro name\": [\n            start,\n            this.popRule({\n                token: \"punctuation.braced-loop.end.csound-score\",\n                regex: /}/\n            })\n        ]\n    });\n    this.normalizeRules();\n};\noop.inherits(CsoundScoreHighlightRules, CsoundPreprocessorHighlightRules);\nexports.CsoundScoreHighlightRules = CsoundScoreHighlightRules;\n\n});\n\nace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LuaHighlightRules = function () {\n    var keywords = (\"break|do|else|elseif|end|for|function|if|in|local|repeat|\" +\n        \"return|then|until|while|or|and|not\");\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n    var functions = (\n    \"string|xpcall|package|tostring|print|os|unpack|require|\" +\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\" +\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\" +\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\" +\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\" +\n        \"load|error|loadfile|\" +\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\" +\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\" +\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\" +\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\" +\n        \"lines|write|close|flush|open|output|type|read|stderr|\" +\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\" +\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\" +\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\" +\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\" +\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\" +\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\" +\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\" +\n        \"status|wrap|create|running|\" +\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\" +\n        \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\");\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n    this.$rules = {\n        \"start\": [{\n                stateName: \"bracketedComment\",\n                onMatch: function (value, currentState, stack) {\n                    stack.unshift(this.next, value.length - 2, currentState);\n                    return \"comment\";\n                },\n                regex: /\\-\\-\\[=*\\[/,\n                next: [\n                    {\n                        onMatch: function (value, currentState, stack) {\n                            if (value.length == stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack.shift();\n                            }\n                            else {\n                                this.next = \"\";\n                            }\n                            return \"comment\";\n                        },\n                        regex: /\\]=*\\]/,\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }\n                ]\n            },\n            {\n                token: \"comment\",\n                regex: \"\\\\-\\\\-.*$\"\n            },\n            {\n                stateName: \"bracketedString\",\n                onMatch: function (value, currentState, stack) {\n                    stack.unshift(this.next, value.length, currentState);\n                    return \"string.start\";\n                },\n                regex: /\\[=*\\[/,\n                next: [\n                    {\n                        onMatch: function (value, currentState, stack) {\n                            if (value.length == stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack.shift();\n                            }\n                            else {\n                                this.next = \"\";\n                            }\n                            return \"string.end\";\n                        },\n                        regex: /\\]=*\\]/,\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"string\"\n                    }\n                ]\n            },\n            {\n                token: \"string\",\n                regex: '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n            }, {\n                token: \"string\",\n                regex: \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|\\\\w+\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(LuaHighlightRules, TextHighlightRules);\nexports.LuaHighlightRules = LuaHighlightRules;\n\n});\n\nace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n * TODO: python delimiters\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PythonHighlightRules = function () {\n    var keywords = (\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await|nonlocal\");\n    var builtinConstants = (\"True|False|None|NotImplemented|Ellipsis|__debug__\");\n    var builtinFunctions = (\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" +\n        \"ascii|breakpoint|bytes\");\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"variable.language\": \"self|cls\",\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n    var strPre = \"[uU]?\";\n    var strRawPre = \"[rR]\";\n    var strFormatPre = \"[fF]\";\n    var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"string\",\n                regex: strPre + '\"{3}',\n                next: \"qqstring3\"\n            }, {\n                token: \"string\",\n                regex: strPre + '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: strPre + \"'{3}\",\n                next: \"qstring3\"\n            }, {\n                token: \"string\",\n                regex: strPre + \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + '\"{3}',\n                next: \"rawqqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + '\"(?=.)',\n                next: \"rawqqstring\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + \"'{3}\",\n                next: \"rawqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + \"'(?=.)\",\n                next: \"rawqstring\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + '\"{3}',\n                next: \"fqqstring3\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + '\"(?=.)',\n                next: \"fqqstring\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + \"'{3}\",\n                next: \"fqstring3\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + \"'(?=.)\",\n                next: \"fqstring\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + '\"{3}',\n                next: \"rfqqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + '\"(?=.)',\n                next: \"rfqqstring\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + \"'{3}\",\n                next: \"rfqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + \"'(?=.)\",\n                next: \"rfqstring\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n            }, {\n                token: \"punctuation\",\n                regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token: [\"keyword\", \"text\", \"entity.name.function\"],\n                regex: \"(def|class)(\\\\s+)([\\\\u00BF-\\\\u1FFF\\\\u2C00-\\\\uD7FF\\\\w]+)\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                include: \"constants\"\n            }],\n        \"qqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqqstring3\": [{\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqstring3\": [{\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqqstring\": [{\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"rawqqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqstring\": [{\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"rawqstring\"\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"fqqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqqstring3\": [{\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqstring3\": [{\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqqstring\": [{\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"rfqqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqstring\": [{\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqstringParRules\": [{\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)]\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"string\",\n                regex: \"'[^']*'\"\n            }, {\n                token: \"string\",\n                regex: '\"[^\"]*\"'\n            }, {\n                token: \"function.support\",\n                regex: \"(!s|!r|!a)\"\n            }, {\n                include: \"constants\"\n            }, {\n                token: 'paren.rparen',\n                regex: \"}\",\n                next: 'pop'\n            }, {\n                token: 'paren.lparen',\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }],\n        \"constants\": [{\n                token: \"constant.numeric\",\n                regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"[lL]\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: [\"punctuation\", \"function.support\"],\n                regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(PythonHighlightRules, TextHighlightRules);\nexports.PythonHighlightRules = PythonHighlightRules;\n\n});\n\nace.define(\"ace/mode/csound_orchestra_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\",\"ace/mode/csound_score_highlight_rules\",\"ace/mode/lua_highlight_rules\",\"ace/mode/python_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar oop = require(\"../lib/oop\");\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\nvar CsoundOrchestraHighlightRules = function (embeddedRulePrefix) {\n    CsoundPreprocessorHighlightRules.call(this, embeddedRulePrefix);\n    var opcodes = [\n        \"ATSadd\",\n        \"ATSaddnz\",\n        \"ATSbufread\",\n        \"ATScross\",\n        \"ATSinfo\",\n        \"ATSinterpread\",\n        \"ATSpartialtap\",\n        \"ATSread\",\n        \"ATSreadnz\",\n        \"ATSsinnoi\",\n        \"FLbox\",\n        \"FLbutBank\",\n        \"FLbutton\",\n        \"FLcloseButton\",\n        \"FLcolor\",\n        \"FLcolor2\",\n        \"FLcount\",\n        \"FLexecButton\",\n        \"FLgetsnap\",\n        \"FLgroup\",\n        \"FLgroupEnd\",\n        \"FLgroup_end\",\n        \"FLhide\",\n        \"FLhvsBox\",\n        \"FLhvsBoxSetValue\",\n        \"FLjoy\",\n        \"FLkeyIn\",\n        \"FLknob\",\n        \"FLlabel\",\n        \"FLloadsnap\",\n        \"FLmouse\",\n        \"FLpack\",\n        \"FLpackEnd\",\n        \"FLpack_end\",\n        \"FLpanel\",\n        \"FLpanelEnd\",\n        \"FLpanel_end\",\n        \"FLprintk\",\n        \"FLprintk2\",\n        \"FLroller\",\n        \"FLrun\",\n        \"FLsavesnap\",\n        \"FLscroll\",\n        \"FLscrollEnd\",\n        \"FLscroll_end\",\n        \"FLsetAlign\",\n        \"FLsetBox\",\n        \"FLsetColor\",\n        \"FLsetColor2\",\n        \"FLsetFont\",\n        \"FLsetPosition\",\n        \"FLsetSize\",\n        \"FLsetSnapGroup\",\n        \"FLsetText\",\n        \"FLsetTextColor\",\n        \"FLsetTextSize\",\n        \"FLsetTextType\",\n        \"FLsetVal\",\n        \"FLsetVal_i\",\n        \"FLsetVali\",\n        \"FLsetsnap\",\n        \"FLshow\",\n        \"FLslidBnk\",\n        \"FLslidBnk2\",\n        \"FLslidBnk2Set\",\n        \"FLslidBnk2Setk\",\n        \"FLslidBnkGetHandle\",\n        \"FLslidBnkSet\",\n        \"FLslidBnkSetk\",\n        \"FLslider\",\n        \"FLtabs\",\n        \"FLtabsEnd\",\n        \"FLtabs_end\",\n        \"FLtext\",\n        \"FLupdate\",\n        \"FLvalue\",\n        \"FLvkeybd\",\n        \"FLvslidBnk\",\n        \"FLvslidBnk2\",\n        \"FLxyin\",\n        \"JackoAudioIn\",\n        \"JackoAudioInConnect\",\n        \"JackoAudioOut\",\n        \"JackoAudioOutConnect\",\n        \"JackoFreewheel\",\n        \"JackoInfo\",\n        \"JackoInit\",\n        \"JackoMidiInConnect\",\n        \"JackoMidiOut\",\n        \"JackoMidiOutConnect\",\n        \"JackoNoteOut\",\n        \"JackoOn\",\n        \"JackoTransport\",\n        \"K35_hpf\",\n        \"K35_lpf\",\n        \"MixerClear\",\n        \"MixerGetLevel\",\n        \"MixerReceive\",\n        \"MixerSend\",\n        \"MixerSetLevel\",\n        \"MixerSetLevel_i\",\n        \"OSCbundle\",\n        \"OSCcount\",\n        \"OSCinit\",\n        \"OSCinitM\",\n        \"OSClisten\",\n        \"OSCraw\",\n        \"OSCsend\",\n        \"OSCsend_lo\",\n        \"S\",\n        \"STKBandedWG\",\n        \"STKBeeThree\",\n        \"STKBlowBotl\",\n        \"STKBlowHole\",\n        \"STKBowed\",\n        \"STKBrass\",\n        \"STKClarinet\",\n        \"STKDrummer\",\n        \"STKFMVoices\",\n        \"STKFlute\",\n        \"STKHevyMetl\",\n        \"STKMandolin\",\n        \"STKModalBar\",\n        \"STKMoog\",\n        \"STKPercFlut\",\n        \"STKPlucked\",\n        \"STKResonate\",\n        \"STKRhodey\",\n        \"STKSaxofony\",\n        \"STKShakers\",\n        \"STKSimple\",\n        \"STKSitar\",\n        \"STKStifKarp\",\n        \"STKTubeBell\",\n        \"STKVoicForm\",\n        \"STKWhistle\",\n        \"STKWurley\",\n        \"a\",\n        \"abs\",\n        \"active\",\n        \"adsr\",\n        \"adsyn\",\n        \"adsynt\",\n        \"adsynt2\",\n        \"aftouch\",\n        \"allpole\",\n        \"alpass\",\n        \"alwayson\",\n        \"ampdb\",\n        \"ampdbfs\",\n        \"ampmidi\",\n        \"ampmidicurve\",\n        \"ampmidid\",\n        \"apoleparams\",\n        \"arduinoRead\",\n        \"arduinoReadF\",\n        \"arduinoStart\",\n        \"arduinoStop\",\n        \"areson\",\n        \"aresonk\",\n        \"atone\",\n        \"atonek\",\n        \"atonex\",\n        \"autocorr\",\n        \"babo\",\n        \"balance\",\n        \"balance2\",\n        \"bamboo\",\n        \"barmodel\",\n        \"bbcutm\",\n        \"bbcuts\",\n        \"betarand\",\n        \"bexprnd\",\n        \"bformdec1\",\n        \"bformdec2\",\n        \"bformenc1\",\n        \"binit\",\n        \"biquad\",\n        \"biquada\",\n        \"birnd\",\n        \"bob\",\n        \"bpf\",\n        \"bpfcos\",\n        \"bqrez\",\n        \"butbp\",\n        \"butbr\",\n        \"buthp\",\n        \"butlp\",\n        \"butterbp\",\n        \"butterbr\",\n        \"butterhp\",\n        \"butterlp\",\n        \"button\",\n        \"buzz\",\n        \"c2r\",\n        \"cabasa\",\n        \"cauchy\",\n        \"cauchyi\",\n        \"cbrt\",\n        \"ceil\",\n        \"cell\",\n        \"cent\",\n        \"centroid\",\n        \"ceps\",\n        \"cepsinv\",\n        \"chanctrl\",\n        \"changed\",\n        \"changed2\",\n        \"chani\",\n        \"chano\",\n        \"chebyshevpoly\",\n        \"checkbox\",\n        \"chn_S\",\n        \"chn_a\",\n        \"chn_k\",\n        \"chnclear\",\n        \"chnexport\",\n        \"chnget\",\n        \"chngeta\",\n        \"chngeti\",\n        \"chngetk\",\n        \"chngetks\",\n        \"chngets\",\n        \"chnmix\",\n        \"chnparams\",\n        \"chnset\",\n        \"chnseta\",\n        \"chnseti\",\n        \"chnsetk\",\n        \"chnsetks\",\n        \"chnsets\",\n        \"chuap\",\n        \"clear\",\n        \"clfilt\",\n        \"clip\",\n        \"clockoff\",\n        \"clockon\",\n        \"cmp\",\n        \"cmplxprod\",\n        \"cntCreate\",\n        \"cntCycles\",\n        \"cntDelete\",\n        \"cntDelete_i\",\n        \"cntRead\",\n        \"cntReset\",\n        \"cntState\",\n        \"comb\",\n        \"combinv\",\n        \"compilecsd\",\n        \"compileorc\",\n        \"compilestr\",\n        \"compress\",\n        \"compress2\",\n        \"connect\",\n        \"control\",\n        \"convle\",\n        \"convolve\",\n        \"copya2ftab\",\n        \"copyf2array\",\n        \"cos\",\n        \"cosh\",\n        \"cosinv\",\n        \"cosseg\",\n        \"cossegb\",\n        \"cossegr\",\n        \"count\",\n        \"count_i\",\n        \"cps2pch\",\n        \"cpsmidi\",\n        \"cpsmidib\",\n        \"cpsmidinn\",\n        \"cpsoct\",\n        \"cpspch\",\n        \"cpstmid\",\n        \"cpstun\",\n        \"cpstuni\",\n        \"cpsxpch\",\n        \"cpumeter\",\n        \"cpuprc\",\n        \"cross2\",\n        \"crossfm\",\n        \"crossfmi\",\n        \"crossfmpm\",\n        \"crossfmpmi\",\n        \"crosspm\",\n        \"crosspmi\",\n        \"crunch\",\n        \"ctlchn\",\n        \"ctrl14\",\n        \"ctrl21\",\n        \"ctrl7\",\n        \"ctrlinit\",\n        \"ctrlpreset\",\n        \"ctrlprint\",\n        \"ctrlprintpresets\",\n        \"ctrlsave\",\n        \"ctrlselect\",\n        \"cuserrnd\",\n        \"dam\",\n        \"date\",\n        \"dates\",\n        \"db\",\n        \"dbamp\",\n        \"dbfsamp\",\n        \"dcblock\",\n        \"dcblock2\",\n        \"dconv\",\n        \"dct\",\n        \"dctinv\",\n        \"deinterleave\",\n        \"delay\",\n        \"delay1\",\n        \"delayk\",\n        \"delayr\",\n        \"delayw\",\n        \"deltap\",\n        \"deltap3\",\n        \"deltapi\",\n        \"deltapn\",\n        \"deltapx\",\n        \"deltapxw\",\n        \"denorm\",\n        \"diff\",\n        \"diode_ladder\",\n        \"directory\",\n        \"diskgrain\",\n        \"diskin\",\n        \"diskin2\",\n        \"dispfft\",\n        \"display\",\n        \"distort\",\n        \"distort1\",\n        \"divz\",\n        \"doppler\",\n        \"dot\",\n        \"downsamp\",\n        \"dripwater\",\n        \"dssiactivate\",\n        \"dssiaudio\",\n        \"dssictls\",\n        \"dssiinit\",\n        \"dssilist\",\n        \"dumpk\",\n        \"dumpk2\",\n        \"dumpk3\",\n        \"dumpk4\",\n        \"duserrnd\",\n        \"dust\",\n        \"dust2\",\n        \"envlpx\",\n        \"envlpxr\",\n        \"ephasor\",\n        \"eqfil\",\n        \"evalstr\",\n        \"event\",\n        \"event_i\",\n        \"exciter\",\n        \"exitnow\",\n        \"exp\",\n        \"expcurve\",\n        \"expon\",\n        \"exprand\",\n        \"exprandi\",\n        \"expseg\",\n        \"expsega\",\n        \"expsegb\",\n        \"expsegba\",\n        \"expsegr\",\n        \"fareylen\",\n        \"fareyleni\",\n        \"faustaudio\",\n        \"faustcompile\",\n        \"faustctl\",\n        \"faustdsp\",\n        \"faustgen\",\n        \"faustplay\",\n        \"fft\",\n        \"fftinv\",\n        \"ficlose\",\n        \"filebit\",\n        \"filelen\",\n        \"filenchnls\",\n        \"filepeak\",\n        \"filescal\",\n        \"filesr\",\n        \"filevalid\",\n        \"fillarray\",\n        \"filter2\",\n        \"fin\",\n        \"fini\",\n        \"fink\",\n        \"fiopen\",\n        \"flanger\",\n        \"flashtxt\",\n        \"flooper\",\n        \"flooper2\",\n        \"floor\",\n        \"fluidAllOut\",\n        \"fluidCCi\",\n        \"fluidCCk\",\n        \"fluidControl\",\n        \"fluidEngine\",\n        \"fluidInfo\",\n        \"fluidLoad\",\n        \"fluidNote\",\n        \"fluidOut\",\n        \"fluidProgramSelect\",\n        \"fluidSetInterpMethod\",\n        \"fmanal\",\n        \"fmax\",\n        \"fmb3\",\n        \"fmbell\",\n        \"fmin\",\n        \"fmmetal\",\n        \"fmod\",\n        \"fmpercfl\",\n        \"fmrhode\",\n        \"fmvoice\",\n        \"fmwurlie\",\n        \"fof\",\n        \"fof2\",\n        \"fofilter\",\n        \"fog\",\n        \"fold\",\n        \"follow\",\n        \"follow2\",\n        \"foscil\",\n        \"foscili\",\n        \"fout\",\n        \"fouti\",\n        \"foutir\",\n        \"foutk\",\n        \"fprintks\",\n        \"fprints\",\n        \"frac\",\n        \"fractalnoise\",\n        \"framebuffer\",\n        \"freeverb\",\n        \"ftaudio\",\n        \"ftchnls\",\n        \"ftconv\",\n        \"ftcps\",\n        \"ftexists\",\n        \"ftfree\",\n        \"ftgen\",\n        \"ftgenonce\",\n        \"ftgentmp\",\n        \"ftlen\",\n        \"ftload\",\n        \"ftloadk\",\n        \"ftlptim\",\n        \"ftmorf\",\n        \"ftom\",\n        \"ftprint\",\n        \"ftresize\",\n        \"ftresizei\",\n        \"ftsamplebank\",\n        \"ftsave\",\n        \"ftsavek\",\n        \"ftset\",\n        \"ftslice\",\n        \"ftslicei\",\n        \"ftsr\",\n        \"gain\",\n        \"gainslider\",\n        \"gauss\",\n        \"gaussi\",\n        \"gausstrig\",\n        \"gbuzz\",\n        \"genarray\",\n        \"genarray_i\",\n        \"gendy\",\n        \"gendyc\",\n        \"gendyx\",\n        \"getcfg\",\n        \"getcol\",\n        \"getftargs\",\n        \"getrow\",\n        \"getseed\",\n        \"gogobel\",\n        \"grain\",\n        \"grain2\",\n        \"grain3\",\n        \"granule\",\n        \"gtadsr\",\n        \"gtf\",\n        \"guiro\",\n        \"harmon\",\n        \"harmon2\",\n        \"harmon3\",\n        \"harmon4\",\n        \"hdf5read\",\n        \"hdf5write\",\n        \"hilbert\",\n        \"hilbert2\",\n        \"hrtfearly\",\n        \"hrtfmove\",\n        \"hrtfmove2\",\n        \"hrtfreverb\",\n        \"hrtfstat\",\n        \"hsboscil\",\n        \"hvs1\",\n        \"hvs2\",\n        \"hvs3\",\n        \"hypot\",\n        \"i\",\n        \"ihold\",\n        \"imagecreate\",\n        \"imagefree\",\n        \"imagegetpixel\",\n        \"imageload\",\n        \"imagesave\",\n        \"imagesetpixel\",\n        \"imagesize\",\n        \"in\",\n        \"in32\",\n        \"inch\",\n        \"inh\",\n        \"init\",\n        \"initc14\",\n        \"initc21\",\n        \"initc7\",\n        \"inleta\",\n        \"inletf\",\n        \"inletk\",\n        \"inletkid\",\n        \"inletv\",\n        \"ino\",\n        \"inq\",\n        \"inrg\",\n        \"ins\",\n        \"insglobal\",\n        \"insremot\",\n        \"int\",\n        \"integ\",\n        \"interleave\",\n        \"interp\",\n        \"invalue\",\n        \"inx\",\n        \"inz\",\n        \"jacktransport\",\n        \"jitter\",\n        \"jitter2\",\n        \"joystick\",\n        \"jspline\",\n        \"k\",\n        \"la_i_add_mc\",\n        \"la_i_add_mr\",\n        \"la_i_add_vc\",\n        \"la_i_add_vr\",\n        \"la_i_assign_mc\",\n        \"la_i_assign_mr\",\n        \"la_i_assign_t\",\n        \"la_i_assign_vc\",\n        \"la_i_assign_vr\",\n        \"la_i_conjugate_mc\",\n        \"la_i_conjugate_mr\",\n        \"la_i_conjugate_vc\",\n        \"la_i_conjugate_vr\",\n        \"la_i_distance_vc\",\n        \"la_i_distance_vr\",\n        \"la_i_divide_mc\",\n        \"la_i_divide_mr\",\n        \"la_i_divide_vc\",\n        \"la_i_divide_vr\",\n        \"la_i_dot_mc\",\n        \"la_i_dot_mc_vc\",\n        \"la_i_dot_mr\",\n        \"la_i_dot_mr_vr\",\n        \"la_i_dot_vc\",\n        \"la_i_dot_vr\",\n        \"la_i_get_mc\",\n        \"la_i_get_mr\",\n        \"la_i_get_vc\",\n        \"la_i_get_vr\",\n        \"la_i_invert_mc\",\n        \"la_i_invert_mr\",\n        \"la_i_lower_solve_mc\",\n        \"la_i_lower_solve_mr\",\n        \"la_i_lu_det_mc\",\n        \"la_i_lu_det_mr\",\n        \"la_i_lu_factor_mc\",\n        \"la_i_lu_factor_mr\",\n        \"la_i_lu_solve_mc\",\n        \"la_i_lu_solve_mr\",\n        \"la_i_mc_create\",\n        \"la_i_mc_set\",\n        \"la_i_mr_create\",\n        \"la_i_mr_set\",\n        \"la_i_multiply_mc\",\n        \"la_i_multiply_mr\",\n        \"la_i_multiply_vc\",\n        \"la_i_multiply_vr\",\n        \"la_i_norm1_mc\",\n        \"la_i_norm1_mr\",\n        \"la_i_norm1_vc\",\n        \"la_i_norm1_vr\",\n        \"la_i_norm_euclid_mc\",\n        \"la_i_norm_euclid_mr\",\n        \"la_i_norm_euclid_vc\",\n        \"la_i_norm_euclid_vr\",\n        \"la_i_norm_inf_mc\",\n        \"la_i_norm_inf_mr\",\n        \"la_i_norm_inf_vc\",\n        \"la_i_norm_inf_vr\",\n        \"la_i_norm_max_mc\",\n        \"la_i_norm_max_mr\",\n        \"la_i_print_mc\",\n        \"la_i_print_mr\",\n        \"la_i_print_vc\",\n        \"la_i_print_vr\",\n        \"la_i_qr_eigen_mc\",\n        \"la_i_qr_eigen_mr\",\n        \"la_i_qr_factor_mc\",\n        \"la_i_qr_factor_mr\",\n        \"la_i_qr_sym_eigen_mc\",\n        \"la_i_qr_sym_eigen_mr\",\n        \"la_i_random_mc\",\n        \"la_i_random_mr\",\n        \"la_i_random_vc\",\n        \"la_i_random_vr\",\n        \"la_i_size_mc\",\n        \"la_i_size_mr\",\n        \"la_i_size_vc\",\n        \"la_i_size_vr\",\n        \"la_i_subtract_mc\",\n        \"la_i_subtract_mr\",\n        \"la_i_subtract_vc\",\n        \"la_i_subtract_vr\",\n        \"la_i_t_assign\",\n        \"la_i_trace_mc\",\n        \"la_i_trace_mr\",\n        \"la_i_transpose_mc\",\n        \"la_i_transpose_mr\",\n        \"la_i_upper_solve_mc\",\n        \"la_i_upper_solve_mr\",\n        \"la_i_vc_create\",\n        \"la_i_vc_set\",\n        \"la_i_vr_create\",\n        \"la_i_vr_set\",\n        \"la_k_a_assign\",\n        \"la_k_add_mc\",\n        \"la_k_add_mr\",\n        \"la_k_add_vc\",\n        \"la_k_add_vr\",\n        \"la_k_assign_a\",\n        \"la_k_assign_f\",\n        \"la_k_assign_mc\",\n        \"la_k_assign_mr\",\n        \"la_k_assign_t\",\n        \"la_k_assign_vc\",\n        \"la_k_assign_vr\",\n        \"la_k_conjugate_mc\",\n        \"la_k_conjugate_mr\",\n        \"la_k_conjugate_vc\",\n        \"la_k_conjugate_vr\",\n        \"la_k_current_f\",\n        \"la_k_current_vr\",\n        \"la_k_distance_vc\",\n        \"la_k_distance_vr\",\n        \"la_k_divide_mc\",\n        \"la_k_divide_mr\",\n        \"la_k_divide_vc\",\n        \"la_k_divide_vr\",\n        \"la_k_dot_mc\",\n        \"la_k_dot_mc_vc\",\n        \"la_k_dot_mr\",\n        \"la_k_dot_mr_vr\",\n        \"la_k_dot_vc\",\n        \"la_k_dot_vr\",\n        \"la_k_f_assign\",\n        \"la_k_get_mc\",\n        \"la_k_get_mr\",\n        \"la_k_get_vc\",\n        \"la_k_get_vr\",\n        \"la_k_invert_mc\",\n        \"la_k_invert_mr\",\n        \"la_k_lower_solve_mc\",\n        \"la_k_lower_solve_mr\",\n        \"la_k_lu_det_mc\",\n        \"la_k_lu_det_mr\",\n        \"la_k_lu_factor_mc\",\n        \"la_k_lu_factor_mr\",\n        \"la_k_lu_solve_mc\",\n        \"la_k_lu_solve_mr\",\n        \"la_k_mc_set\",\n        \"la_k_mr_set\",\n        \"la_k_multiply_mc\",\n        \"la_k_multiply_mr\",\n        \"la_k_multiply_vc\",\n        \"la_k_multiply_vr\",\n        \"la_k_norm1_mc\",\n        \"la_k_norm1_mr\",\n        \"la_k_norm1_vc\",\n        \"la_k_norm1_vr\",\n        \"la_k_norm_euclid_mc\",\n        \"la_k_norm_euclid_mr\",\n        \"la_k_norm_euclid_vc\",\n        \"la_k_norm_euclid_vr\",\n        \"la_k_norm_inf_mc\",\n        \"la_k_norm_inf_mr\",\n        \"la_k_norm_inf_vc\",\n        \"la_k_norm_inf_vr\",\n        \"la_k_norm_max_mc\",\n        \"la_k_norm_max_mr\",\n        \"la_k_qr_eigen_mc\",\n        \"la_k_qr_eigen_mr\",\n        \"la_k_qr_factor_mc\",\n        \"la_k_qr_factor_mr\",\n        \"la_k_qr_sym_eigen_mc\",\n        \"la_k_qr_sym_eigen_mr\",\n        \"la_k_random_mc\",\n        \"la_k_random_mr\",\n        \"la_k_random_vc\",\n        \"la_k_random_vr\",\n        \"la_k_subtract_mc\",\n        \"la_k_subtract_mr\",\n        \"la_k_subtract_vc\",\n        \"la_k_subtract_vr\",\n        \"la_k_t_assign\",\n        \"la_k_trace_mc\",\n        \"la_k_trace_mr\",\n        \"la_k_upper_solve_mc\",\n        \"la_k_upper_solve_mr\",\n        \"la_k_vc_set\",\n        \"la_k_vr_set\",\n        \"lag\",\n        \"lagud\",\n        \"lastcycle\",\n        \"lenarray\",\n        \"lfo\",\n        \"lfsr\",\n        \"limit\",\n        \"limit1\",\n        \"lincos\",\n        \"line\",\n        \"linen\",\n        \"linenr\",\n        \"lineto\",\n        \"link_beat_force\",\n        \"link_beat_get\",\n        \"link_beat_request\",\n        \"link_create\",\n        \"link_enable\",\n        \"link_is_enabled\",\n        \"link_metro\",\n        \"link_peers\",\n        \"link_tempo_get\",\n        \"link_tempo_set\",\n        \"linlin\",\n        \"linrand\",\n        \"linseg\",\n        \"linsegb\",\n        \"linsegr\",\n        \"liveconv\",\n        \"locsend\",\n        \"locsig\",\n        \"log\",\n        \"log10\",\n        \"log2\",\n        \"logbtwo\",\n        \"logcurve\",\n        \"loopseg\",\n        \"loopsegp\",\n        \"looptseg\",\n        \"loopxseg\",\n        \"lorenz\",\n        \"loscil\",\n        \"loscil3\",\n        \"loscil3phs\",\n        \"loscilphs\",\n        \"loscilx\",\n        \"lowpass2\",\n        \"lowres\",\n        \"lowresx\",\n        \"lpcanal\",\n        \"lpcfilter\",\n        \"lpf18\",\n        \"lpform\",\n        \"lpfreson\",\n        \"lphasor\",\n        \"lpinterp\",\n        \"lposcil\",\n        \"lposcil3\",\n        \"lposcila\",\n        \"lposcilsa\",\n        \"lposcilsa2\",\n        \"lpread\",\n        \"lpreson\",\n        \"lpshold\",\n        \"lpsholdp\",\n        \"lpslot\",\n        \"lufs\",\n        \"mac\",\n        \"maca\",\n        \"madsr\",\n        \"mags\",\n        \"mandel\",\n        \"mandol\",\n        \"maparray\",\n        \"maparray_i\",\n        \"marimba\",\n        \"massign\",\n        \"max\",\n        \"max_k\",\n        \"maxabs\",\n        \"maxabsaccum\",\n        \"maxaccum\",\n        \"maxalloc\",\n        \"maxarray\",\n        \"mclock\",\n        \"mdelay\",\n        \"median\",\n        \"mediank\",\n        \"metro\",\n        \"metro2\",\n        \"metrobpm\",\n        \"mfb\",\n        \"midglobal\",\n        \"midiarp\",\n        \"midic14\",\n        \"midic21\",\n        \"midic7\",\n        \"midichannelaftertouch\",\n        \"midichn\",\n        \"midicontrolchange\",\n        \"midictrl\",\n        \"mididefault\",\n        \"midifilestatus\",\n        \"midiin\",\n        \"midinoteoff\",\n        \"midinoteoncps\",\n        \"midinoteonkey\",\n        \"midinoteonoct\",\n        \"midinoteonpch\",\n        \"midion\",\n        \"midion2\",\n        \"midiout\",\n        \"midiout_i\",\n        \"midipgm\",\n        \"midipitchbend\",\n        \"midipolyaftertouch\",\n        \"midiprogramchange\",\n        \"miditempo\",\n        \"midremot\",\n        \"min\",\n        \"minabs\",\n        \"minabsaccum\",\n        \"minaccum\",\n        \"minarray\",\n        \"mincer\",\n        \"mirror\",\n        \"mode\",\n        \"modmatrix\",\n        \"monitor\",\n        \"moog\",\n        \"moogladder\",\n        \"moogladder2\",\n        \"moogvcf\",\n        \"moogvcf2\",\n        \"moscil\",\n        \"mp3bitrate\",\n        \"mp3in\",\n        \"mp3len\",\n        \"mp3nchnls\",\n        \"mp3out\",\n        \"mp3scal\",\n        \"mp3sr\",\n        \"mpulse\",\n        \"mrtmsg\",\n        \"ms2st\",\n        \"mtof\",\n        \"mton\",\n        \"multitap\",\n        \"mute\",\n        \"mvchpf\",\n        \"mvclpf1\",\n        \"mvclpf2\",\n        \"mvclpf3\",\n        \"mvclpf4\",\n        \"mvmfilter\",\n        \"mxadsr\",\n        \"nchnls_hw\",\n        \"nestedap\",\n        \"nlalp\",\n        \"nlfilt\",\n        \"nlfilt2\",\n        \"noise\",\n        \"noteoff\",\n        \"noteon\",\n        \"noteondur\",\n        \"noteondur2\",\n        \"notnum\",\n        \"nreverb\",\n        \"nrpn\",\n        \"nsamp\",\n        \"nstance\",\n        \"nstrnum\",\n        \"nstrstr\",\n        \"ntof\",\n        \"ntom\",\n        \"ntrpol\",\n        \"nxtpow2\",\n        \"octave\",\n        \"octcps\",\n        \"octmidi\",\n        \"octmidib\",\n        \"octmidinn\",\n        \"octpch\",\n        \"olabuffer\",\n        \"oscbnk\",\n        \"oscil\",\n        \"oscil1\",\n        \"oscil1i\",\n        \"oscil3\",\n        \"oscili\",\n        \"oscilikt\",\n        \"osciliktp\",\n        \"oscilikts\",\n        \"osciln\",\n        \"oscils\",\n        \"oscilx\",\n        \"out\",\n        \"out32\",\n        \"outall\",\n        \"outc\",\n        \"outch\",\n        \"outh\",\n        \"outiat\",\n        \"outic\",\n        \"outic14\",\n        \"outipat\",\n        \"outipb\",\n        \"outipc\",\n        \"outkat\",\n        \"outkc\",\n        \"outkc14\",\n        \"outkpat\",\n        \"outkpb\",\n        \"outkpc\",\n        \"outleta\",\n        \"outletf\",\n        \"outletk\",\n        \"outletkid\",\n        \"outletv\",\n        \"outo\",\n        \"outq\",\n        \"outq1\",\n        \"outq2\",\n        \"outq3\",\n        \"outq4\",\n        \"outrg\",\n        \"outs\",\n        \"outs1\",\n        \"outs2\",\n        \"outvalue\",\n        \"outx\",\n        \"outz\",\n        \"p\",\n        \"p5gconnect\",\n        \"p5gdata\",\n        \"pan\",\n        \"pan2\",\n        \"pareq\",\n        \"part2txt\",\n        \"partials\",\n        \"partikkel\",\n        \"partikkelget\",\n        \"partikkelset\",\n        \"partikkelsync\",\n        \"passign\",\n        \"paulstretch\",\n        \"pcauchy\",\n        \"pchbend\",\n        \"pchmidi\",\n        \"pchmidib\",\n        \"pchmidinn\",\n        \"pchoct\",\n        \"pchtom\",\n        \"pconvolve\",\n        \"pcount\",\n        \"pdclip\",\n        \"pdhalf\",\n        \"pdhalfy\",\n        \"peak\",\n        \"pgmassign\",\n        \"pgmchn\",\n        \"phaser1\",\n        \"phaser2\",\n        \"phasor\",\n        \"phasorbnk\",\n        \"phs\",\n        \"pindex\",\n        \"pinker\",\n        \"pinkish\",\n        \"pitch\",\n        \"pitchac\",\n        \"pitchamdf\",\n        \"planet\",\n        \"platerev\",\n        \"plltrack\",\n        \"pluck\",\n        \"poisson\",\n        \"pol2rect\",\n        \"polyaft\",\n        \"polynomial\",\n        \"port\",\n        \"portk\",\n        \"poscil\",\n        \"poscil3\",\n        \"pow\",\n        \"powershape\",\n        \"powoftwo\",\n        \"pows\",\n        \"prealloc\",\n        \"prepiano\",\n        \"print\",\n        \"print_type\",\n        \"printarray\",\n        \"printf\",\n        \"printf_i\",\n        \"printk\",\n        \"printk2\",\n        \"printks\",\n        \"printks2\",\n        \"println\",\n        \"prints\",\n        \"printsk\",\n        \"product\",\n        \"pset\",\n        \"ptablew\",\n        \"ptrack\",\n        \"puts\",\n        \"pvadd\",\n        \"pvbufread\",\n        \"pvcross\",\n        \"pvinterp\",\n        \"pvoc\",\n        \"pvread\",\n        \"pvs2array\",\n        \"pvs2tab\",\n        \"pvsadsyn\",\n        \"pvsanal\",\n        \"pvsarp\",\n        \"pvsbandp\",\n        \"pvsbandr\",\n        \"pvsbandwidth\",\n        \"pvsbin\",\n        \"pvsblur\",\n        \"pvsbuffer\",\n        \"pvsbufread\",\n        \"pvsbufread2\",\n        \"pvscale\",\n        \"pvscent\",\n        \"pvsceps\",\n        \"pvscfs\",\n        \"pvscross\",\n        \"pvsdemix\",\n        \"pvsdiskin\",\n        \"pvsdisp\",\n        \"pvsenvftw\",\n        \"pvsfilter\",\n        \"pvsfread\",\n        \"pvsfreeze\",\n        \"pvsfromarray\",\n        \"pvsftr\",\n        \"pvsftw\",\n        \"pvsfwrite\",\n        \"pvsgain\",\n        \"pvsgendy\",\n        \"pvshift\",\n        \"pvsifd\",\n        \"pvsin\",\n        \"pvsinfo\",\n        \"pvsinit\",\n        \"pvslock\",\n        \"pvslpc\",\n        \"pvsmaska\",\n        \"pvsmix\",\n        \"pvsmooth\",\n        \"pvsmorph\",\n        \"pvsosc\",\n        \"pvsout\",\n        \"pvspitch\",\n        \"pvstanal\",\n        \"pvstencil\",\n        \"pvstrace\",\n        \"pvsvoc\",\n        \"pvswarp\",\n        \"pvsynth\",\n        \"pwd\",\n        \"pyassign\",\n        \"pyassigni\",\n        \"pyassignt\",\n        \"pycall\",\n        \"pycall1\",\n        \"pycall1i\",\n        \"pycall1t\",\n        \"pycall2\",\n        \"pycall2i\",\n        \"pycall2t\",\n        \"pycall3\",\n        \"pycall3i\",\n        \"pycall3t\",\n        \"pycall4\",\n        \"pycall4i\",\n        \"pycall4t\",\n        \"pycall5\",\n        \"pycall5i\",\n        \"pycall5t\",\n        \"pycall6\",\n        \"pycall6i\",\n        \"pycall6t\",\n        \"pycall7\",\n        \"pycall7i\",\n        \"pycall7t\",\n        \"pycall8\",\n        \"pycall8i\",\n        \"pycall8t\",\n        \"pycalli\",\n        \"pycalln\",\n        \"pycallni\",\n        \"pycallt\",\n        \"pyeval\",\n        \"pyevali\",\n        \"pyevalt\",\n        \"pyexec\",\n        \"pyexeci\",\n        \"pyexect\",\n        \"pyinit\",\n        \"pylassign\",\n        \"pylassigni\",\n        \"pylassignt\",\n        \"pylcall\",\n        \"pylcall1\",\n        \"pylcall1i\",\n        \"pylcall1t\",\n        \"pylcall2\",\n        \"pylcall2i\",\n        \"pylcall2t\",\n        \"pylcall3\",\n        \"pylcall3i\",\n        \"pylcall3t\",\n        \"pylcall4\",\n        \"pylcall4i\",\n        \"pylcall4t\",\n        \"pylcall5\",\n        \"pylcall5i\",\n        \"pylcall5t\",\n        \"pylcall6\",\n        \"pylcall6i\",\n        \"pylcall6t\",\n        \"pylcall7\",\n        \"pylcall7i\",\n        \"pylcall7t\",\n        \"pylcall8\",\n        \"pylcall8i\",\n        \"pylcall8t\",\n        \"pylcalli\",\n        \"pylcalln\",\n        \"pylcallni\",\n        \"pylcallt\",\n        \"pyleval\",\n        \"pylevali\",\n        \"pylevalt\",\n        \"pylexec\",\n        \"pylexeci\",\n        \"pylexect\",\n        \"pylrun\",\n        \"pylruni\",\n        \"pylrunt\",\n        \"pyrun\",\n        \"pyruni\",\n        \"pyrunt\",\n        \"qinf\",\n        \"qnan\",\n        \"r2c\",\n        \"rand\",\n        \"randc\",\n        \"randh\",\n        \"randi\",\n        \"random\",\n        \"randomh\",\n        \"randomi\",\n        \"rbjeq\",\n        \"readclock\",\n        \"readf\",\n        \"readfi\",\n        \"readk\",\n        \"readk2\",\n        \"readk3\",\n        \"readk4\",\n        \"readks\",\n        \"readscore\",\n        \"readscratch\",\n        \"rect2pol\",\n        \"release\",\n        \"remoteport\",\n        \"remove\",\n        \"repluck\",\n        \"reshapearray\",\n        \"reson\",\n        \"resonbnk\",\n        \"resonk\",\n        \"resonr\",\n        \"resonx\",\n        \"resonxk\",\n        \"resony\",\n        \"resonz\",\n        \"resyn\",\n        \"reverb\",\n        \"reverb2\",\n        \"reverbsc\",\n        \"rewindscore\",\n        \"rezzy\",\n        \"rfft\",\n        \"rifft\",\n        \"rms\",\n        \"rnd\",\n        \"rnd31\",\n        \"rndseed\",\n        \"round\",\n        \"rspline\",\n        \"rtclock\",\n        \"s16b14\",\n        \"s32b14\",\n        \"samphold\",\n        \"sandpaper\",\n        \"sc_lag\",\n        \"sc_lagud\",\n        \"sc_phasor\",\n        \"sc_trig\",\n        \"scale\",\n        \"scale2\",\n        \"scalearray\",\n        \"scanhammer\",\n        \"scanmap\",\n        \"scans\",\n        \"scansmap\",\n        \"scantable\",\n        \"scanu\",\n        \"scanu2\",\n        \"schedkwhen\",\n        \"schedkwhennamed\",\n        \"schedule\",\n        \"schedulek\",\n        \"schedwhen\",\n        \"scoreline\",\n        \"scoreline_i\",\n        \"seed\",\n        \"sekere\",\n        \"select\",\n        \"semitone\",\n        \"sense\",\n        \"sensekey\",\n        \"seqtime\",\n        \"seqtime2\",\n        \"sequ\",\n        \"serialBegin\",\n        \"serialEnd\",\n        \"serialFlush\",\n        \"serialPrint\",\n        \"serialRead\",\n        \"serialWrite\",\n        \"serialWrite_i\",\n        \"setcol\",\n        \"setctrl\",\n        \"setksmps\",\n        \"setrow\",\n        \"setscorepos\",\n        \"sfilist\",\n        \"sfinstr\",\n        \"sfinstr3\",\n        \"sfinstr3m\",\n        \"sfinstrm\",\n        \"sfload\",\n        \"sflooper\",\n        \"sfpassign\",\n        \"sfplay\",\n        \"sfplay3\",\n        \"sfplay3m\",\n        \"sfplaym\",\n        \"sfplist\",\n        \"sfpreset\",\n        \"shaker\",\n        \"shiftin\",\n        \"shiftout\",\n        \"signum\",\n        \"sin\",\n        \"sinh\",\n        \"sininv\",\n        \"sinsyn\",\n        \"skf\",\n        \"sleighbells\",\n        \"slicearray\",\n        \"slicearray_i\",\n        \"slider16\",\n        \"slider16f\",\n        \"slider16table\",\n        \"slider16tablef\",\n        \"slider32\",\n        \"slider32f\",\n        \"slider32table\",\n        \"slider32tablef\",\n        \"slider64\",\n        \"slider64f\",\n        \"slider64table\",\n        \"slider64tablef\",\n        \"slider8\",\n        \"slider8f\",\n        \"slider8table\",\n        \"slider8tablef\",\n        \"sliderKawai\",\n        \"sndloop\",\n        \"sndwarp\",\n        \"sndwarpst\",\n        \"sockrecv\",\n        \"sockrecvs\",\n        \"socksend\",\n        \"socksends\",\n        \"sorta\",\n        \"sortd\",\n        \"soundin\",\n        \"space\",\n        \"spat3d\",\n        \"spat3di\",\n        \"spat3dt\",\n        \"spdist\",\n        \"spf\",\n        \"splitrig\",\n        \"sprintf\",\n        \"sprintfk\",\n        \"spsend\",\n        \"sqrt\",\n        \"squinewave\",\n        \"st2ms\",\n        \"statevar\",\n        \"sterrain\",\n        \"stix\",\n        \"strcat\",\n        \"strcatk\",\n        \"strchar\",\n        \"strchark\",\n        \"strcmp\",\n        \"strcmpk\",\n        \"strcpy\",\n        \"strcpyk\",\n        \"strecv\",\n        \"streson\",\n        \"strfromurl\",\n        \"strget\",\n        \"strindex\",\n        \"strindexk\",\n        \"string2array\",\n        \"strlen\",\n        \"strlenk\",\n        \"strlower\",\n        \"strlowerk\",\n        \"strrindex\",\n        \"strrindexk\",\n        \"strset\",\n        \"strstrip\",\n        \"strsub\",\n        \"strsubk\",\n        \"strtod\",\n        \"strtodk\",\n        \"strtol\",\n        \"strtolk\",\n        \"strupper\",\n        \"strupperk\",\n        \"stsend\",\n        \"subinstr\",\n        \"subinstrinit\",\n        \"sum\",\n        \"sumarray\",\n        \"svfilter\",\n        \"svn\",\n        \"syncgrain\",\n        \"syncloop\",\n        \"syncphasor\",\n        \"system\",\n        \"system_i\",\n        \"tab\",\n        \"tab2array\",\n        \"tab2pvs\",\n        \"tab_i\",\n        \"tabifd\",\n        \"table\",\n        \"table3\",\n        \"table3kt\",\n        \"tablecopy\",\n        \"tablefilter\",\n        \"tablefilteri\",\n        \"tablegpw\",\n        \"tablei\",\n        \"tableicopy\",\n        \"tableigpw\",\n        \"tableikt\",\n        \"tableimix\",\n        \"tablekt\",\n        \"tablemix\",\n        \"tableng\",\n        \"tablera\",\n        \"tableseg\",\n        \"tableshuffle\",\n        \"tableshufflei\",\n        \"tablew\",\n        \"tablewa\",\n        \"tablewkt\",\n        \"tablexkt\",\n        \"tablexseg\",\n        \"tabmorph\",\n        \"tabmorpha\",\n        \"tabmorphak\",\n        \"tabmorphi\",\n        \"tabplay\",\n        \"tabrec\",\n        \"tabsum\",\n        \"tabw\",\n        \"tabw_i\",\n        \"tambourine\",\n        \"tan\",\n        \"tanh\",\n        \"taninv\",\n        \"taninv2\",\n        \"tbvcf\",\n        \"tempest\",\n        \"tempo\",\n        \"temposcal\",\n        \"tempoval\",\n        \"timedseq\",\n        \"timeinstk\",\n        \"timeinsts\",\n        \"timek\",\n        \"times\",\n        \"tival\",\n        \"tlineto\",\n        \"tone\",\n        \"tonek\",\n        \"tonex\",\n        \"tradsyn\",\n        \"trandom\",\n        \"transeg\",\n        \"transegb\",\n        \"transegr\",\n        \"trcross\",\n        \"trfilter\",\n        \"trhighest\",\n        \"trigExpseg\",\n        \"trigLinseg\",\n        \"trigexpseg\",\n        \"trigger\",\n        \"trighold\",\n        \"triglinseg\",\n        \"trigphasor\",\n        \"trigseq\",\n        \"trim\",\n        \"trim_i\",\n        \"trirand\",\n        \"trlowest\",\n        \"trmix\",\n        \"trscale\",\n        \"trshift\",\n        \"trsplit\",\n        \"turnoff\",\n        \"turnoff2\",\n        \"turnoff2_i\",\n        \"turnoff3\",\n        \"turnon\",\n        \"tvconv\",\n        \"unirand\",\n        \"unwrap\",\n        \"upsamp\",\n        \"urandom\",\n        \"urd\",\n        \"vactrol\",\n        \"vadd\",\n        \"vadd_i\",\n        \"vaddv\",\n        \"vaddv_i\",\n        \"vaget\",\n        \"valpass\",\n        \"vaset\",\n        \"vbap\",\n        \"vbapg\",\n        \"vbapgmove\",\n        \"vbaplsinit\",\n        \"vbapmove\",\n        \"vbapz\",\n        \"vbapzmove\",\n        \"vcella\",\n        \"vclpf\",\n        \"vco\",\n        \"vco2\",\n        \"vco2ft\",\n        \"vco2ift\",\n        \"vco2init\",\n        \"vcomb\",\n        \"vcopy\",\n        \"vcopy_i\",\n        \"vdel_k\",\n        \"vdelay\",\n        \"vdelay3\",\n        \"vdelayk\",\n        \"vdelayx\",\n        \"vdelayxq\",\n        \"vdelayxs\",\n        \"vdelayxw\",\n        \"vdelayxwq\",\n        \"vdelayxws\",\n        \"vdivv\",\n        \"vdivv_i\",\n        \"vecdelay\",\n        \"veloc\",\n        \"vexp\",\n        \"vexp_i\",\n        \"vexpseg\",\n        \"vexpv\",\n        \"vexpv_i\",\n        \"vibes\",\n        \"vibr\",\n        \"vibrato\",\n        \"vincr\",\n        \"vlimit\",\n        \"vlinseg\",\n        \"vlowres\",\n        \"vmap\",\n        \"vmirror\",\n        \"vmult\",\n        \"vmult_i\",\n        \"vmultv\",\n        \"vmultv_i\",\n        \"voice\",\n        \"vosim\",\n        \"vphaseseg\",\n        \"vport\",\n        \"vpow\",\n        \"vpow_i\",\n        \"vpowv\",\n        \"vpowv_i\",\n        \"vps\",\n        \"vpvoc\",\n        \"vrandh\",\n        \"vrandi\",\n        \"vsubv\",\n        \"vsubv_i\",\n        \"vtaba\",\n        \"vtabi\",\n        \"vtabk\",\n        \"vtable1k\",\n        \"vtablea\",\n        \"vtablei\",\n        \"vtablek\",\n        \"vtablewa\",\n        \"vtablewi\",\n        \"vtablewk\",\n        \"vtabwa\",\n        \"vtabwi\",\n        \"vtabwk\",\n        \"vwrap\",\n        \"waveset\",\n        \"websocket\",\n        \"weibull\",\n        \"wgbow\",\n        \"wgbowedbar\",\n        \"wgbrass\",\n        \"wgclar\",\n        \"wgflute\",\n        \"wgpluck\",\n        \"wgpluck2\",\n        \"wguide1\",\n        \"wguide2\",\n        \"wiiconnect\",\n        \"wiidata\",\n        \"wiirange\",\n        \"wiisend\",\n        \"window\",\n        \"wrap\",\n        \"writescratch\",\n        \"wterrain\",\n        \"wterrain2\",\n        \"xadsr\",\n        \"xin\",\n        \"xout\",\n        \"xtratim\",\n        \"xyscale\",\n        \"zacl\",\n        \"zakinit\",\n        \"zamod\",\n        \"zar\",\n        \"zarg\",\n        \"zaw\",\n        \"zawm\",\n        \"zdf_1pole\",\n        \"zdf_1pole_mode\",\n        \"zdf_2pole\",\n        \"zdf_2pole_mode\",\n        \"zdf_ladder\",\n        \"zfilter2\",\n        \"zir\",\n        \"ziw\",\n        \"ziwm\",\n        \"zkcl\",\n        \"zkmod\",\n        \"zkr\",\n        \"zkw\",\n        \"zkwm\"\n    ];\n    var deprecatedOpcodes = [\n        \"OSCsendA\",\n        \"array\",\n        \"beadsynt\",\n        \"beosc\",\n        \"bformdec\",\n        \"bformenc\",\n        \"buchla\",\n        \"copy2ftab\",\n        \"copy2ttab\",\n        \"getrowlin\",\n        \"hrtfer\",\n        \"ktableseg\",\n        \"lentab\",\n        \"lua_exec\",\n        \"lua_iaopcall\",\n        \"lua_iaopcall_off\",\n        \"lua_ikopcall\",\n        \"lua_ikopcall_off\",\n        \"lua_iopcall\",\n        \"lua_iopcall_off\",\n        \"lua_opdef\",\n        \"maxtab\",\n        \"mintab\",\n        \"mp3scal_check\",\n        \"mp3scal_load\",\n        \"mp3scal_load2\",\n        \"mp3scal_play\",\n        \"mp3scal_play2\",\n        \"pop\",\n        \"pop_f\",\n        \"ptable\",\n        \"ptable3\",\n        \"ptablei\",\n        \"ptableiw\",\n        \"push\",\n        \"push_f\",\n        \"pvsgendy\",\n        \"scalet\",\n        \"signalflowgraph\",\n        \"sndload\",\n        \"socksend_k\",\n        \"soundout\",\n        \"soundouts\",\n        \"specaddm\",\n        \"specdiff\",\n        \"specdisp\",\n        \"specfilt\",\n        \"spechist\",\n        \"specptrk\",\n        \"specscal\",\n        \"specsum\",\n        \"spectrum\",\n        \"stack\",\n        \"sumTableFilter\",\n        \"sumtab\",\n        \"systime\",\n        \"tabgen\",\n        \"tableiw\",\n        \"tabmap\",\n        \"tabmap_i\",\n        \"tabrowlin\",\n        \"tabslice\",\n        \"tb0\",\n        \"tb0_init\",\n        \"tb1\",\n        \"tb10\",\n        \"tb10_init\",\n        \"tb11\",\n        \"tb11_init\",\n        \"tb12\",\n        \"tb12_init\",\n        \"tb13\",\n        \"tb13_init\",\n        \"tb14\",\n        \"tb14_init\",\n        \"tb15\",\n        \"tb15_init\",\n        \"tb1_init\",\n        \"tb2\",\n        \"tb2_init\",\n        \"tb3\",\n        \"tb3_init\",\n        \"tb4\",\n        \"tb4_init\",\n        \"tb5\",\n        \"tb5_init\",\n        \"tb6\",\n        \"tb6_init\",\n        \"tb7\",\n        \"tb7_init\",\n        \"tb8\",\n        \"tb8_init\",\n        \"tb9\",\n        \"tb9_init\",\n        \"vbap16\",\n        \"vbap1move\",\n        \"vbap4\",\n        \"vbap4move\",\n        \"vbap8\",\n        \"vbap8move\",\n        \"xscanmap\",\n        \"xscans\",\n        \"xscansmap\",\n        \"xscanu\",\n        \"xyin\"\n    ];\n    opcodes = lang.arrayToMap(opcodes);\n    deprecatedOpcodes = lang.arrayToMap(deprecatedOpcodes);\n    this.lineContinuations = [\n        {\n            token: \"constant.character.escape.line-continuation.csound\",\n            regex: /\\\\$/\n        }, this.pushRule({\n            token: \"constant.character.escape.line-continuation.csound\",\n            regex: /\\\\/,\n            next: \"line continuation\"\n        })\n    ];\n    this.comments.push(this.lineContinuations);\n    this.quotedStringContents.push(this.lineContinuations, {\n        token: \"invalid.illegal\",\n        regex: /[^\"\\\\]*$/\n    });\n    var start = this.$rules.start;\n    start.splice(1, 0, {\n        token: [\"text.csound\", \"entity.name.label.csound\", \"entity.punctuation.label.csound\", \"text.csound\"],\n        regex: /^([ \\t]*)(\\w+)(:)([ \\t]+|$)/\n    });\n    start.push(this.pushRule({\n        token: \"keyword.function.csound\",\n        regex: /\\binstr\\b/,\n        next: \"instrument numbers and identifiers\"\n    }), this.pushRule({\n        token: \"keyword.function.csound\",\n        regex: /\\bopcode\\b/,\n        next: \"after opcode keyword\"\n    }), {\n        token: \"keyword.other.csound\",\n        regex: /\\bend(?:in|op)\\b/\n    }, {\n        token: \"variable.language.csound\",\n        regex: /\\b(?:0dbfs|A4|k(?:r|smps)|nchnls(?:_i)?|sr)\\b/\n    }, this.numbers, {\n        token: \"keyword.operator.csound\",\n        regex: \"\\\\+=|-=|\\\\*=|/=|<<|>>|<=|>=|==|!=|&&|\\\\|\\\\||[~¬]|[=!+\\\\-*/^%&|<>#?:]\"\n    }, this.pushRule({\n        token: \"punctuation.definition.string.begin.csound\",\n        regex: /\"/,\n        next: \"quoted string\"\n    }), this.pushRule({\n        token: \"punctuation.definition.string.begin.csound\",\n        regex: /{{/,\n        next: \"braced string\"\n    }), {\n        token: \"keyword.control.csound\",\n        regex: /\\b(?:do|else(?:if)?|end(?:if|until)|fi|i(?:f|then)|kthen|od|r(?:ir)?eturn|then|until|while)\\b/\n    }, this.pushRule({\n        token: \"keyword.control.csound\",\n        regex: /\\b[ik]?goto\\b/,\n        next: \"goto before label\"\n    }), this.pushRule({\n        token: \"keyword.control.csound\",\n        regex: /\\b(?:r(?:einit|igoto)|tigoto)\\b/,\n        next: \"goto before label\"\n    }), this.pushRule({\n        token: \"keyword.control.csound\",\n        regex: /\\bc(?:g|in?|k|nk?)goto\\b/,\n        next: [\"goto before label\", \"goto before argument\"]\n    }), this.pushRule({\n        token: \"keyword.control.csound\",\n        regex: /\\btimout\\b/,\n        next: [\"goto before label\", \"goto before argument\", \"goto before argument\"]\n    }), this.pushRule({\n        token: \"keyword.control.csound\",\n        regex: /\\bloop_[gl][et]\\b/,\n        next: [\"goto before label\", \"goto before argument\", \"goto before argument\", \"goto before argument\"]\n    }), this.pushRule({\n        token: \"support.function.csound\",\n        regex: /\\b(?:readscore|scoreline(?:_i)?)\\b/,\n        next: \"Csound score opcode\"\n    }), this.pushRule({\n        token: \"support.function.csound\",\n        regex: /\\bpyl?run[it]?\\b(?!$)/,\n        next: \"Python opcode\"\n    }), this.pushRule({\n        token: \"support.function.csound\",\n        regex: /\\blua_(?:exec|opdef)\\b(?!$)/,\n        next: \"Lua opcode\"\n    }), {\n        token: \"support.variable.csound\",\n        regex: /\\bp\\d+\\b/\n    }, {\n        regex: /\\b([A-Z_a-z]\\w*)(?:(:)([A-Za-z]))?\\b/, onMatch: function (value, currentState, stack, line) {\n            var tokens = value.split(this.splitRegex);\n            var name = tokens[1];\n            var type;\n            if (opcodes.hasOwnProperty(name))\n                type = \"support.function.csound\";\n            else if (deprecatedOpcodes.hasOwnProperty(name))\n                type = \"invalid.deprecated.csound\";\n            if (type) {\n                if (tokens[2]) {\n                    return [\n                        { type: type, value: name },\n                        { type: \"punctuation.type-annotation.csound\", value: tokens[2] },\n                        { type: \"type-annotation.storage.type.csound\", value: tokens[3] }\n                    ];\n                }\n                return type;\n            }\n            return \"text.csound\";\n        }\n    });\n    this.$rules[\"macro parameter value list\"].splice(2, 0, {\n        token: \"punctuation.definition.string.begin.csound\",\n        regex: /{{/,\n        next: \"macro parameter value braced string\"\n    });\n    var scoreHighlightRules = new CsoundScoreHighlightRules(\"csound-score-\");\n    this.addRules({\n        \"macro parameter value braced string\": [\n            {\n                token: \"constant.character.escape.csound\",\n                regex: /\\\\[#'()]/\n            }, {\n                token: \"invalid.illegal.csound.csound\",\n                regex: /[#'()]/\n            }, {\n                token: \"punctuation.definition.string.end.csound\",\n                regex: /}}/,\n                next: \"macro parameter value list\"\n            }, {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n        \"instrument numbers and identifiers\": [\n            this.comments,\n            {\n                token: \"entity.name.function.csound\",\n                regex: /\\d+|[A-Z_a-z]\\w*/\n            }, this.popRule({\n                token: \"empty\",\n                regex: /$/\n            })\n        ],\n        \"after opcode keyword\": [\n            this.comments,\n            this.popRule({\n                token: \"empty\",\n                regex: /$/\n            }), this.popRule({\n                token: \"entity.name.function.opcode.csound\",\n                regex: /[A-Z_a-z]\\w*/,\n                next: \"opcode type signatures\"\n            })\n        ],\n        \"opcode type signatures\": [\n            this.comments,\n            this.popRule({\n                token: \"empty\",\n                regex: /$/\n            }), {\n                token: \"storage.type.csound\",\n                regex: /\\b(?:0|[afijkKoOpPStV\\[\\]]+)/\n            }\n        ],\n        \"quoted string\": [\n            this.popRule({\n                token: \"punctuation.definition.string.end.csound\",\n                regex: /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"braced string\": [\n            this.popRule({\n                token: \"punctuation.definition.string.end.csound\",\n                regex: /}}/\n            }),\n            this.bracedStringContents,\n            {\n                defaultToken: \"string.braced.csound\"\n            }\n        ],\n        \"goto before argument\": [\n            this.popRule({\n                token: \"text.csound\",\n                regex: /,/\n            }),\n            start\n        ],\n        \"goto before label\": [\n            {\n                token: \"text.csound\",\n                regex: /\\s+/\n            },\n            this.comments,\n            this.popRule({\n                token: \"entity.name.label.csound\",\n                regex: /\\w+/\n            }), this.popRule({\n                token: \"empty\",\n                regex: /(?!\\w)/\n            })\n        ],\n        \"Csound score opcode\": [\n            this.comments,\n            {\n                token: \"punctuation.definition.string.begin.csound\",\n                regex: /{{/,\n                next: scoreHighlightRules.embeddedRulePrefix + \"start\"\n            }, this.popRule({\n                token: \"empty\",\n                regex: /$/\n            })\n        ],\n        \"Python opcode\": [\n            this.comments,\n            {\n                token: \"punctuation.definition.string.begin.csound\",\n                regex: /{{/,\n                next: \"python-start\"\n            }, this.popRule({\n                token: \"empty\",\n                regex: /$/\n            })\n        ],\n        \"Lua opcode\": [\n            this.comments,\n            {\n                token: \"punctuation.definition.string.begin.csound\",\n                regex: /{{/,\n                next: \"lua-start\"\n            }, this.popRule({\n                token: \"empty\",\n                regex: /$/\n            })\n        ],\n        \"line continuation\": [\n            this.popRule({\n                token: \"empty\",\n                regex: /$/\n            }),\n            this.semicolonComments,\n            {\n                token: \"invalid.illegal.csound\",\n                regex: /\\S.*/\n            }\n        ]\n    });\n    var rules = [\n        this.popRule({\n            token: \"punctuation.definition.string.end.csound\",\n            regex: /}}/\n        })\n    ];\n    this.embedRules(scoreHighlightRules.getRules(), scoreHighlightRules.embeddedRulePrefix, rules);\n    this.embedRules(PythonHighlightRules, \"python-\", rules);\n    this.embedRules(LuaHighlightRules, \"lua-\", rules);\n    this.normalizeRules();\n};\noop.inherits(CsoundOrchestraHighlightRules, CsoundPreprocessorHighlightRules);\nexports.CsoundOrchestraHighlightRules = CsoundOrchestraHighlightRules;\n\n});\n\nace.define(\"ace/mode/csound_orchestra\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_orchestra_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CsoundOrchestraHighlightRules = require(\"./csound_orchestra_highlight_rules\").CsoundOrchestraHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = CsoundOrchestraHighlightRules;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \";\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/csound_orchestra\";\n    this.snippetFileId = \"ace/snippets/csound_orchestra\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/csound_orchestra\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-csound_score.js",
    "content": "ace.define(\"ace/mode/csound_preprocessor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CsoundPreprocessorHighlightRules = function (embeddedRulePrefix) {\n    this.embeddedRulePrefix = embeddedRulePrefix === undefined ? \"\" : embeddedRulePrefix;\n    this.semicolonComments = {\n        token: \"comment.line.semicolon.csound\",\n        regex: \";.*$\"\n    };\n    this.comments = [\n        {\n            token: \"punctuation.definition.comment.begin.csound\",\n            regex: \"/\\\\*\",\n            push: [\n                {\n                    token: \"punctuation.definition.comment.end.csound\",\n                    regex: \"\\\\*/\",\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"comment.block.csound\"\n                }\n            ]\n        }, {\n            token: \"comment.line.double-slash.csound\",\n            regex: \"//.*$\"\n        },\n        this.semicolonComments\n    ];\n    this.macroUses = [\n        {\n            token: [\"entity.name.function.preprocessor.csound\", \"punctuation.definition.macro-parameter-value-list.begin.csound\"],\n            regex: /(\\$[A-Z_a-z]\\w*\\.?)(\\()/,\n            next: \"macro parameter value list\"\n        }, {\n            token: \"entity.name.function.preprocessor.csound\",\n            regex: /\\$[A-Z_a-z]\\w*(?:\\.|\\b)/\n        }\n    ];\n    this.numbers = [\n        {\n            token: \"constant.numeric.float.csound\",\n            regex: /(?:\\d+[Ee][+-]?\\d+)|(?:\\d+\\.\\d*|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?/\n        }, {\n            token: [\"storage.type.number.csound\", \"constant.numeric.integer.hexadecimal.csound\"],\n            regex: /(0[Xx])([0-9A-Fa-f]+)/\n        }, {\n            token: \"constant.numeric.integer.decimal.csound\",\n            regex: /\\d+/\n        }\n    ];\n    this.bracedStringContents = [\n        {\n            token: \"constant.character.escape.csound\",\n            regex: /\\\\(?:[\\\\abnrt\"]|[0-7]{1,3})/\n        },\n        {\n            token: \"constant.character.placeholder.csound\",\n            regex: /%[#0\\- +]*\\d*(?:\\.\\d+)?[diuoxXfFeEgGaAcs]/\n        }, {\n            token: \"constant.character.escape.csound\",\n            regex: /%%/\n        }\n    ];\n    this.quotedStringContents = [\n        this.macroUses,\n        this.bracedStringContents\n    ];\n    var start = [\n        this.comments,\n        {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#(?:e(?:nd(?:if)?|lse)\\b|##)|@@?[ \\t]*\\d+/\n        }, {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#include/,\n            push: [\n                this.comments,\n                {\n                    token: \"string.csound\",\n                    regex: /([^ \\t])(?:.*?\\1)/,\n                    next: \"pop\"\n                }\n            ]\n        }, {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#includestr/,\n            push: [\n                this.comments,\n                {\n                    token: \"string.csound\",\n                    regex: /([^ \\t])(?:.*?\\1)/,\n                    next: \"pop\"\n                }\n            ]\n        }, {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#[ \\t]*define/,\n            next: \"define directive\"\n        }, {\n            token: \"keyword.preprocessor.csound\",\n            regex: /#(?:ifn?def|undef)\\b/,\n            next: \"macro directive\"\n        },\n        this.macroUses\n    ];\n    this.$rules = {\n        \"start\": start,\n        \"define directive\": [\n            this.comments,\n            {\n                token: \"entity.name.function.preprocessor.csound\",\n                regex: /[A-Z_a-z]\\w*/\n            }, {\n                token: \"punctuation.definition.macro-parameter-name-list.begin.csound\",\n                regex: /\\(/,\n                next: \"macro parameter name list\"\n            }, {\n                token: \"punctuation.definition.macro.begin.csound\",\n                regex: /#/,\n                next: \"macro body\"\n            }\n        ],\n        \"macro parameter name list\": [\n            {\n                token: \"variable.parameter.preprocessor.csound\",\n                regex: /[A-Z_a-z]\\w*/\n            }, {\n                token: \"punctuation.definition.macro-parameter-name-list.end.csound\",\n                regex: /\\)/,\n                next: \"define directive\"\n            }\n        ],\n        \"macro body\": [\n            {\n                token: \"constant.character.escape.csound\",\n                regex: /\\\\#/\n            }, {\n                token: \"punctuation.definition.macro.end.csound\",\n                regex: /#/,\n                next: \"start\"\n            },\n            start\n        ],\n        \"macro directive\": [\n            this.comments,\n            {\n                token: \"entity.name.function.preprocessor.csound\",\n                regex: /[A-Z_a-z]\\w*/,\n                next: \"start\"\n            }\n        ],\n        \"macro parameter value list\": [\n            {\n                token: \"punctuation.definition.macro-parameter-value-list.end.csound\",\n                regex: /\\)/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.definition.string.begin.csound\",\n                regex: /\"/,\n                next: \"macro parameter value quoted string\"\n            }, this.pushRule({\n                token: \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex: /\\(/,\n                next: \"macro parameter value parenthetical\"\n            }), {\n                token: \"punctuation.macro-parameter-value-separator.csound\",\n                regex: \"[#']\"\n            }\n        ],\n        \"macro parameter value quoted string\": [\n            {\n                token: \"constant.character.escape.csound\",\n                regex: /\\\\[#'()]/\n            }, {\n                token: \"invalid.illegal.csound\",\n                regex: /[#'()]/\n            }, {\n                token: \"punctuation.definition.string.end.csound\",\n                regex: /\"/,\n                next: \"macro parameter value list\"\n            },\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound\"\n            }\n        ],\n        \"macro parameter value parenthetical\": [\n            {\n                token: \"constant.character.escape.csound\",\n                regex: /\\\\\\)/\n            }, this.popRule({\n                token: \"punctuation.macro-parameter-value-parenthetical.end.csound\",\n                regex: /\\)/\n            }), this.pushRule({\n                token: \"punctuation.macro-parameter-value-parenthetical.begin.csound\",\n                regex: /\\(/,\n                next: \"macro parameter value parenthetical\"\n            }),\n            start\n        ]\n    };\n};\noop.inherits(CsoundPreprocessorHighlightRules, TextHighlightRules);\n(function () {\n    this.pushRule = function (params) {\n        if (Array.isArray(params.next)) {\n            for (var i = 0; i < params.next.length; i++) {\n                params.next[i] = this.embeddedRulePrefix + params.next[i];\n            }\n        }\n        return {\n            regex: params.regex, onMatch: function (value, currentState, stack, line) {\n                if (stack.length === 0)\n                    stack.push(currentState);\n                if (Array.isArray(params.next)) {\n                    for (var i = 0; i < params.next.length; i++) {\n                        stack.push(params.next[i]);\n                    }\n                }\n                else {\n                    stack.push(params.next);\n                }\n                this.next = stack[stack.length - 1];\n                return params.token;\n            },\n            get next() { return Array.isArray(params.next) ? params.next[params.next.length - 1] : params.next; },\n            set next(next) {\n                if (!Array.isArray(params.next)) {\n                    params.next = next;\n                }\n            },\n            get token() { return params.token; }\n        };\n    };\n    this.popRule = function (params) {\n        if (params.next) {\n            params.next = this.embeddedRulePrefix + params.next;\n        }\n        return {\n            regex: params.regex, onMatch: function (value, currentState, stack, line) {\n                stack.pop();\n                if (params.next) {\n                    stack.push(params.next);\n                    this.next = stack[stack.length - 1];\n                }\n                else {\n                    this.next = stack.length > 1 ? stack[stack.length - 1] : stack.pop();\n                }\n                return params.token;\n            }\n        };\n    };\n}).call(CsoundPreprocessorHighlightRules.prototype);\nexports.CsoundPreprocessorHighlightRules = CsoundPreprocessorHighlightRules;\n\n});\n\nace.define(\"ace/mode/csound_score_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/csound_preprocessor_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar CsoundPreprocessorHighlightRules = require(\"./csound_preprocessor_highlight_rules\").CsoundPreprocessorHighlightRules;\nvar CsoundScoreHighlightRules = function (embeddedRulePrefix) {\n    CsoundPreprocessorHighlightRules.call(this, embeddedRulePrefix);\n    this.quotedStringContents.push({\n        token: \"invalid.illegal.csound-score\",\n        regex: /[^\"]*$/\n    });\n    var start = this.$rules.start;\n    start.push({\n        token: \"keyword.control.csound-score\",\n        regex: /[aBbCdefiqstvxy]/\n    }, {\n        token: \"invalid.illegal.csound-score\",\n        regex: /w/\n    }, {\n        token: \"constant.numeric.language.csound-score\",\n        regex: /z/\n    }, {\n        token: [\"keyword.control.csound-score\", \"constant.numeric.integer.decimal.csound-score\"],\n        regex: /([nNpP][pP])(\\d+)/\n    }, {\n        token: \"keyword.other.csound-score\",\n        regex: /[mn]/,\n        push: [\n            {\n                token: \"empty\",\n                regex: /$/,\n                next: \"pop\"\n            },\n            this.comments,\n            {\n                token: \"entity.name.label.csound-score\",\n                regex: /[A-Z_a-z]\\w*/\n            }\n        ]\n    }, {\n        token: \"keyword.preprocessor.csound-score\",\n        regex: /r\\b/,\n        next: \"repeat section\"\n    }, this.numbers, {\n        token: \"keyword.operator.csound-score\",\n        regex: \"[!+\\\\-*/^%&|<>#~.]\"\n    }, this.pushRule({\n        token: \"punctuation.definition.string.begin.csound-score\",\n        regex: /\"/,\n        next: \"quoted string\"\n    }), this.pushRule({\n        token: \"punctuation.braced-loop.begin.csound-score\",\n        regex: /{/,\n        next: \"loop after left brace\"\n    }));\n    this.addRules({\n        \"repeat section\": [\n            {\n                token: \"empty\",\n                regex: /$/,\n                next: \"start\"\n            },\n            this.comments,\n            {\n                token: \"constant.numeric.integer.decimal.csound-score\",\n                regex: /\\d+/,\n                next: \"repeat section before label\"\n            }\n        ],\n        \"repeat section before label\": [\n            {\n                token: \"empty\",\n                regex: /$/,\n                next: \"start\"\n            },\n            this.comments,\n            {\n                token: \"entity.name.label.csound-score\",\n                regex: /[A-Z_a-z]\\w*/,\n                next: \"start\"\n            }\n        ],\n        \"quoted string\": [\n            this.popRule({\n                token: \"punctuation.definition.string.end.csound-score\",\n                regex: /\"/\n            }),\n            this.quotedStringContents,\n            {\n                defaultToken: \"string.quoted.csound-score\"\n            }\n        ],\n        \"loop after left brace\": [\n            this.popRule({\n                token: \"constant.numeric.integer.decimal.csound-score\",\n                regex: /\\d+/,\n                next: \"loop after repeat count\"\n            }),\n            this.comments,\n            {\n                token: \"invalid.illegal.csound\",\n                regex: /\\S.*/\n            }\n        ],\n        \"loop after repeat count\": [\n            this.popRule({\n                token: \"entity.name.function.preprocessor.csound-score\",\n                regex: /[A-Z_a-z]\\w*\\b/,\n                next: \"loop after macro name\"\n            }),\n            this.comments,\n            {\n                token: \"invalid.illegal.csound\",\n                regex: /\\S.*/\n            }\n        ],\n        \"loop after macro name\": [\n            start,\n            this.popRule({\n                token: \"punctuation.braced-loop.end.csound-score\",\n                regex: /}/\n            })\n        ]\n    });\n    this.normalizeRules();\n};\noop.inherits(CsoundScoreHighlightRules, CsoundPreprocessorHighlightRules);\nexports.CsoundScoreHighlightRules = CsoundScoreHighlightRules;\n\n});\n\nace.define(\"ace/mode/csound_score\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csound_score_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CsoundScoreHighlightRules = require(\"./csound_score_highlight_rules\").CsoundScoreHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = CsoundScoreHighlightRules;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \";\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/csound_score\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/csound_score\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-csp.js",
    "content": "ace.define(\"ace/mode/csp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n    EXPLANATION\n\n    This highlight rules were created to help developer spot typos when working\n    with Content-Security-Policy (CSP). See:\n    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CspHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language\": \"child-src|connect-src|default-src|font-src|frame-src|img-src|manifest-src|media-src|object-src\"\n            + \"|script-src|style-src|worker-src|base-uri|plugin-types|sandbox|disown-opener|form-action|frame-ancestors|report-uri\"\n            + \"|report-to|upgrade-insecure-requests|block-all-mixed-content|require-sri-for|reflected-xss|referrer|policy-uri\",\n        \"variable\": \"'none'|'self'|'unsafe-inline'|'unsafe-eval'|'strict-dynamic'|'unsafe-hashed-attributes'\"\n    }, \"identifier\", true);\n    this.$rules = {\n        start: [{\n                token: \"string.link\",\n                regex: /https?:[^;\\s]*/\n            }, {\n                token: \"operator.punctuation\",\n                regex: /;/\n            }, {\n                token: keywordMapper,\n                regex: /[^\\s;]+/\n            }]\n    };\n};\noop.inherits(CspHighlightRules, TextHighlightRules);\nexports.CspHighlightRules = CspHighlightRules;\n\n});\n\nace.define(\"ace/mode/csp\",[\"require\",\"exports\",\"module\",\"ace/mode/text\",\"ace/mode/csp_highlight_rules\",\"ace/lib/oop\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar TextMode = require(\"./text\").Mode;\nvar CspHighlightRules = require(\"./csp_highlight_rules\").CspHighlightRules;\nvar oop = require(\"../lib/oop\");\nvar Mode = function () {\n    this.HighlightRules = CspHighlightRules;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/csp\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/csp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-css.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/css\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-curly.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/curly_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar CurlyHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    this.$rules[\"start\"].unshift({\n        token: \"variable\",\n        regex: \"{{\",\n        push: \"curly-start\"\n    });\n    this.$rules[\"curly-start\"] = [{\n            token: \"variable\",\n            regex: \"}}\",\n            next: \"pop\"\n        }];\n    this.normalizeRules();\n};\noop.inherits(CurlyHighlightRules, HtmlHighlightRules);\nexports.CurlyHighlightRules = CurlyHighlightRules;\n\n});\n\nace.define(\"ace/mode/curly\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/html\",\"ace/mode/curly_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar CurlyHighlightRules = require(\"./curly_highlight_rules\").CurlyHighlightRules;\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = CurlyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new HtmlFoldMode();\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.$id = \"ace/mode/curly\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/curly\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-d.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/d_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DHighlightRules = function () {\n    var keywords = (\"this|super|import|module|body|mixin|__traits|invariant|alias|asm|delete|\" +\n        \"typeof|typeid|sizeof|cast|new|in|is|typedef|__vector|__parameters\");\n    var keywordControls = (\"break|case|continue|default|do|else|for|foreach|foreach_reverse|goto|if|\" +\n        \"return|switch|while|catch|try|throw|finally|version|assert|unittest|with\");\n    var types = (\"auto|bool|char|dchar|wchar|byte|ubyte|float|double|real|\" +\n        \"cfloat|creal|cdouble|cent|ifloat|ireal|idouble|\" +\n        \"int|long|short|void|uint|ulong|ushort|ucent|\" +\n        \"function|delegate|string|wstring|dstring|size_t|ptrdiff_t|hash_t|Object\");\n    var modifiers = (\"abstract|align|debug|deprecated|export|extern|const|final|in|inout|out|\" +\n        \"ref|immutable|lazy|nothrow|override|package|pragma|private|protected|\" +\n        \"public|pure|scope|shared|__gshared|synchronized|static|volatile\");\n    var storages = (\"class|struct|union|template|interface|enum|macro\");\n    var stringEscapesSeq = {\n        token: \"constant.language.escape\",\n        regex: \"\\\\\\\\(?:(?:x[0-9A-F]{2})|(?:[0-7]{1,3})|(?:['\\\"\\\\?0abfnrtv\\\\\\\\])|\" +\n            \"(?:u[0-9a-fA-F]{4})|(?:U[0-9a-fA-F]{8}))\"\n    };\n    var builtinConstants = (\"null|true|false|\" +\n        \"__DATE__|__EOF__|__TIME__|__TIMESTAMP__|__VENDOR__|__VERSION__|\" +\n        \"__FILE__|__MODULE__|__LINE__|__FUNCTION__|__PRETTY_FUNCTION__\");\n    var operators = (\"/|/\\\\=|&|&\\\\=|&&|\\\\|\\\\|\\\\=|\\\\|\\\\||\\\\-|\\\\-\\\\=|\\\\-\\\\-|\\\\+|\" +\n        \"\\\\+\\\\=|\\\\+\\\\+|\\\\<|\\\\<\\\\=|\\\\<\\\\<|\\\\<\\\\<\\\\=|\\\\<\\\\>|\\\\<\\\\>\\\\=|\\\\>|\\\\>\\\\=|\\\\>\\\\>\\\\=|\" +\n        \"\\\\>\\\\>\\\\>\\\\=|\\\\>\\\\>|\\\\>\\\\>\\\\>|\\\\!|\\\\!\\\\=|\\\\!\\\\<\\\\>|\\\\!\\\\<\\\\>\\\\=|\\\\!\\\\<|\\\\!\\\\<\\\\=|\" +\n        \"\\\\!\\\\>|\\\\!\\\\>\\\\=|\\\\?|\\\\$|\\\\=|\\\\=\\\\=|\\\\*|\\\\*\\\\=|%|%\\\\=|\" +\n        \"\\\\^|\\\\^\\\\=|\\\\^\\\\^|\\\\^\\\\^\\\\=|~|~\\\\=|\\\\=\\\\>|#\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.modifier\": modifiers,\n        \"keyword.control\": keywordControls,\n        \"keyword.type\": types,\n        \"keyword\": keywords,\n        \"keyword.storage\": storages,\n        \"punctation\": \"\\\\.|\\\\,|;|\\\\.\\\\.|\\\\.\\\\.\\\\.\",\n        \"keyword.operator\": operators,\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n    var identifierRe = \"[a-zA-Z_\\u00a1-\\uffff][a-zA-Z\\\\d_\\u00a1-\\uffff]*\\\\b\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"star-comment\"\n            }, {\n                token: \"comment.shebang\",\n                regex: \"^\\\\s*#!.*\"\n            }, {\n                token: \"comment\",\n                regex: \"\\\\/\\\\+\",\n                next: \"plus-comment\"\n            }, {\n                onMatch: function (value, currentState, state) {\n                    state.unshift(this.next, value.substr(2));\n                    return \"string\";\n                },\n                regex: 'q\"(?:[\\\\[\\\\(\\\\{\\\\<]+)',\n                next: 'operator-heredoc-string'\n            }, {\n                onMatch: function (value, currentState, state) {\n                    state.unshift(this.next, value.substr(2));\n                    return \"string\";\n                },\n                regex: 'q\"(?:[a-zA-Z_]+)$',\n                next: 'identifier-heredoc-string'\n            }, {\n                token: \"string\",\n                regex: '[xr]?\"',\n                next: \"quote-string\"\n            }, {\n                token: \"string\",\n                regex: '[xr]?`',\n                next: \"backtick-string\"\n            }, {\n                token: \"string\",\n                regex: \"[xr]?['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?['][cdw]?\"\n            }, {\n                token: [\"keyword\", \"text\", \"paren.lparen\"],\n                regex: /(asm)(\\s*)({)/,\n                next: \"d-asm\"\n            }, {\n                token: [\"keyword\", \"text\", \"paren.lparen\", \"constant.language\"],\n                regex: \"(__traits)(\\\\s*)(\\\\()(\" + identifierRe + \")\"\n            }, {\n                token: [\"keyword\", \"text\", \"variable.module\"],\n                regex: \"(import|module)(\\\\s+)((?:\" + identifierRe + \"\\\\.?)*)\"\n            }, {\n                token: [\"keyword.storage\", \"text\", \"entity.name.type\"],\n                regex: \"(\" + storages + \")(\\\\s*)(\" + identifierRe + \")\"\n            }, {\n                token: [\"keyword\", \"text\", \"variable.storage\", \"text\"],\n                regex: \"(alias|typedef)(\\\\s*)(\" + identifierRe + \")(\\\\s*)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F_]+(l|ul|u|f|F|L|U|UL)?\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d[\\\\d_]*(?:(?:\\\\.[\\\\d_]*)?(?:[eE][+-]?[\\\\d_]+)?)?(l|ul|u|f|F|L|U|UL)?\\\\b\"\n            }, {\n                token: \"entity.other.attribute-name\",\n                regex: \"@\" + identifierRe\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: operators\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.|\\\\:\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"star-comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: 'comment'\n            }\n        ],\n        \"plus-comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\+\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: 'comment'\n            }\n        ],\n        \"quote-string\": [\n            stringEscapesSeq,\n            {\n                token: \"string\",\n                regex: '\"[cdw]?',\n                next: \"start\"\n            }, {\n                defaultToken: 'string'\n            }\n        ],\n        \"backtick-string\": [\n            stringEscapesSeq,\n            {\n                token: \"string\",\n                regex: '`[cdw]?',\n                next: \"start\"\n            }, {\n                defaultToken: 'string'\n            }\n        ],\n        \"operator-heredoc-string\": [\n            {\n                onMatch: function (value, currentState, state) {\n                    value = value.substring(value.length - 2, value.length - 1);\n                    var map = { '>': '<', ']': '[', ')': '(', '}': '{' };\n                    if (Object.keys(map).indexOf(value) != -1)\n                        value = map[value];\n                    if (value != state[1])\n                        return \"string\";\n                    state.shift();\n                    state.shift();\n                    return \"string\";\n                },\n                regex: '(?:[\\\\]\\\\)}>]+)\"',\n                next: 'start'\n            }, {\n                token: 'string',\n                regex: '[^\\\\]\\\\)}>]+'\n            }\n        ],\n        \"identifier-heredoc-string\": [\n            {\n                onMatch: function (value, currentState, state) {\n                    value = value.substring(0, value.length - 1);\n                    if (value != state[1])\n                        return \"string\";\n                    state.shift();\n                    state.shift();\n                    return \"string\";\n                },\n                regex: '^(?:[A-Za-z_][a-zA-Z0-9]+)\"',\n                next: 'start'\n            }, {\n                token: 'string',\n                regex: '[^\\\\]\\\\)}>]+'\n            }\n        ],\n        \"d-asm\": [\n            {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: 'keyword.instruction',\n                regex: '[a-zA-Z]+',\n                next: 'd-asm-instruction'\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        'd-asm-instruction': [\n            {\n                token: 'constant.language',\n                regex: /AL|AH|AX|EAX|BL|BH|BX|EBX|CL|CH|CX|ECX|DL|DH|DX|EDX|BP|EBP|SP|ESP|DI|EDI|SI|ESI/i\n            }, {\n                token: 'identifier',\n                regex: '[a-zA-Z]+'\n            }, {\n                token: 'string',\n                regex: '\"[^\"]*\"'\n            }, {\n                token: 'comment',\n                regex: '//.*$'\n            }, {\n                token: 'constant.numeric',\n                regex: '[0-9.xA-F]+'\n            }, {\n                token: 'punctuation.operator',\n                regex: '\\\\,'\n            }, {\n                token: 'punctuation.operator',\n                regex: ';',\n                next: 'd-asm'\n            }, {\n                token: 'text',\n                regex: '\\\\s+'\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\nDHighlightRules.metaData = {\n    comment: 'D language',\n    fileTypes: ['d', 'di'],\n    firstLineMatch: '^#!.*\\\\b[glr]?dmd\\\\b.',\n    foldingStartMarker: '(?x)/\\\\*\\\\*(?!\\\\*)|^(?![^{]*?//|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|//|/\\\\*(?!.*?\\\\*/.*\\\\S))',\n    foldingStopMarker: '(?<!\\\\*)\\\\*\\\\*/|^\\\\s*\\\\}',\n    keyEquivalent: '^~D',\n    name: 'D',\n    scopeName: 'source.d'\n};\noop.inherits(DHighlightRules, TextHighlightRules);\nexports.DHighlightRules = DHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/d\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/d_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar DHighlightRules = require(\"./d_highlight_rules\").DHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = DHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/d\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/d\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-dart.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\nvar c_cppHighlightRules = function () {\n    var keywordControls = (\"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\");\n    var storageType = (\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|int8_t|int16_t|int32_t|int64_t|long|short|signed|size_t|struct|typedef|uint8_t|uint16_t|uint32_t|uint64_t|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\");\n    var storageModifiers = (\"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\");\n    var keywordOperators = (\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\");\n    var builtinConstants = (\"NULL|true|false|TRUE|FALSE|nullptr\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\": keywordControls,\n        \"storage.type\": storageType,\n        \"storage.modifier\": storageModifiers,\n        \"keyword.operator\": keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n        + /(\\d+\\$)?/.source // field (argument #)\n        + /[#0\\- +']*/.source // flags\n        + /[,;:_]?/.source // separator character (AltiVec)\n        + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n        + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n        + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n        + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"//$\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \"//\",\n                next: \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"string.start\",\n                regex: 'R\"\\\\(',\n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next: \"directive\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token: \"support.function.C99.c\",\n                regex: cFunctions\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"singleLineComment\": [\n            {\n                token: \"comment\",\n                regex: /\\\\$/,\n                next: \"singleLineComment\"\n            }, {\n                token: \"comment\",\n                regex: /$/,\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\": [\n            {\n                token: \"constant.other.multiline\",\n                regex: /\\\\/\n            },\n            {\n                token: \"constant.other.multiline\",\n                regex: /.*\\\\/\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*<.+?>\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: /[^\\\\\\/]+/,\n                next: \"start\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(c_cppHighlightRules, TextHighlightRules);\nexports.c_cppHighlightRules = c_cppHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = c_cppHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/c_cpp\";\n    this.snippetFileId = \"ace/snippets/c_cpp\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/dart_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode_highlight_rules.tmpl.js (UUID: 958518BC-799F-477A-99F9-5B28EBF230F6) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DartHighlightRules = function () {\n    var constantLanguage = \"true|false|null\";\n    var variableLanguage = \"this|super\";\n    var keywordControl = \"try|catch|finally|throw|rethrow|assert|break|case|continue|default|do|else|for|if|in|return|switch|while|new|deferred|async|await\";\n    var keywordDeclaration = \"abstract|class|extends|external|factory|implements|get|native|operator|set|typedef|with|enum\";\n    var storageModifier = \"static|final|const\";\n    var storageType = \"void|bool|num|int|double|dynamic|var|String\";\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.dart\": constantLanguage,\n        \"variable.language.dart\": variableLanguage,\n        \"keyword.control.dart\": keywordControl,\n        \"keyword.declaration.dart\": keywordDeclaration,\n        \"storage.modifier.dart\": storageModifier,\n        \"storage.type.primitive.dart\": storageType\n    }, \"identifier\");\n    var stringfill = [{\n            token: \"constant.language.escape\",\n            regex: /\\\\./\n        }, {\n            token: \"text\",\n            regex: /\\$(?:\\w+|{[^\"'}]+})?/\n        }, {\n            defaultToken: \"string\"\n        }];\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: /\\/\\/.*$/\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: /\\/\\*/,\n                next: \"comment\"\n            },\n            {\n                token: [\"meta.preprocessor.script.dart\"],\n                regex: \"^(#!.*)$\"\n            },\n            {\n                token: \"keyword.other.import.dart\",\n                regex: \"(?:\\\\b)(?:library|import|export|part|of|show|hide)(?:\\\\b)\"\n            },\n            {\n                token: [\"keyword.other.import.dart\", \"text\"],\n                regex: \"(?:\\\\b)(prefix)(\\\\s*:)\"\n            },\n            {\n                regex: \"\\\\bas\\\\b\",\n                token: \"keyword.cast.dart\"\n            },\n            {\n                regex: \"\\\\?|:\",\n                token: \"keyword.control.ternary.dart\"\n            },\n            {\n                regex: \"(?:\\\\b)(is\\\\!?)(?:\\\\b)\",\n                token: [\"keyword.operator.dart\"]\n            },\n            {\n                regex: \"(<<|>>>?|~|\\\\^|\\\\||&)\",\n                token: [\"keyword.operator.bitwise.dart\"]\n            },\n            {\n                regex: \"((?:&|\\\\^|\\\\||<<|>>>?)=)\",\n                token: [\"keyword.operator.assignment.bitwise.dart\"]\n            },\n            {\n                regex: \"(===?|!==?|<=?|>=?)\",\n                token: [\"keyword.operator.comparison.dart\"]\n            },\n            {\n                regex: \"((?:[+*/%-]|\\\\~)=)\",\n                token: [\"keyword.operator.assignment.arithmetic.dart\"]\n            },\n            {\n                regex: \"=\",\n                token: \"keyword.operator.assignment.dart\"\n            },\n            {\n                token: \"string\",\n                regex: \"'''\",\n                next: \"qdoc\"\n            },\n            {\n                token: \"string\",\n                regex: '\"\"\"',\n                next: \"qqdoc\"\n            },\n            {\n                token: \"string\",\n                regex: \"'\",\n                next: \"qstring\"\n            },\n            {\n                token: \"string\",\n                regex: '\"',\n                next: \"qqstring\"\n            },\n            {\n                regex: \"(\\\\-\\\\-|\\\\+\\\\+)\",\n                token: [\"keyword.operator.increment-decrement.dart\"]\n            },\n            {\n                regex: \"(\\\\-|\\\\+|\\\\*|\\\\/|\\\\~\\\\/|%)\",\n                token: [\"keyword.operator.arithmetic.dart\"]\n            },\n            {\n                regex: \"(!|&&|\\\\|\\\\|)\",\n                token: [\"keyword.operator.logical.dart\"]\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            },\n            {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"qdoc\": [\n            {\n                token: \"string\",\n                regex: \"'''\",\n                next: \"start\"\n            }\n        ].concat(stringfill),\n        \"qqdoc\": [\n            {\n                token: \"string\",\n                regex: '\"\"\"',\n                next: \"start\"\n            }\n        ].concat(stringfill),\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }\n        ].concat(stringfill),\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }\n        ].concat(stringfill)\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\noop.inherits(DartHighlightRules, TextHighlightRules);\nexports.DartHighlightRules = DartHighlightRules;\n\n});\n\nace.define(\"ace/mode/dart\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/dart_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar DartHighlightRules = require(\"./dart_highlight_rules\").DartHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    CMode.call(this);\n    this.HighlightRules = DartHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, CMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/dart\";\n    this.snippetFileId = \"ace/snippets/dart\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/dart\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-diff.js",
    "content": "ace.define(\"ace/mode/diff_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DiffHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                regex: \"^(?:\\\\*{15}|={67}|-{3}|\\\\+{3})$\",\n                token: \"punctuation.definition.separator.diff\",\n                \"name\": \"keyword\"\n            }, {\n                regex: \"^(@@)(\\\\s*.+?\\\\s*)(@@)(.*)$\",\n                token: [\n                    \"constant\",\n                    \"constant.numeric\",\n                    \"constant\",\n                    \"comment.doc.tag\"\n                ]\n            }, {\n                regex: \"^(\\\\d+)([,\\\\d]+)(a|d|c)(\\\\d+)([,\\\\d]+)(.*)$\",\n                token: [\n                    \"constant.numeric\",\n                    \"punctuation.definition.range.diff\",\n                    \"constant.function\",\n                    \"constant.numeric\",\n                    \"punctuation.definition.range.diff\",\n                    \"invalid\"\n                ],\n                \"name\": \"meta.\"\n            }, {\n                regex: \"^(\\\\-{3}|\\\\+{3}|\\\\*{3})( .+)$\",\n                token: [\n                    \"constant.numeric\",\n                    \"meta.tag\"\n                ]\n            }, {\n                regex: \"^([!+>])(.*?)(\\\\s*)$\",\n                token: [\n                    \"support.constant\",\n                    \"text\",\n                    \"invalid\"\n                ]\n            }, {\n                regex: \"^([<\\\\-])(.*?)(\\\\s*)$\",\n                token: [\n                    \"support.function\",\n                    \"string\",\n                    \"invalid\"\n                ]\n            }, {\n                regex: \"^(diff)(\\\\s+--\\\\w+)?(.+?)( .+)?$\",\n                token: [\"variable\", \"variable\", \"keyword\", \"variable\"]\n            }, {\n                regex: \"^Index.+$\",\n                token: \"variable\"\n            }, {\n                regex: \"^\\\\s+$\",\n                token: \"text\"\n            }, {\n                regex: \"\\\\s*$\",\n                token: \"invalid\"\n            }, {\n                defaultToken: \"invisible\",\n                caseInsensitive: true\n            }\n        ]\n    };\n};\noop.inherits(DiffHighlightRules, TextHighlightRules);\nexports.DiffHighlightRules = DiffHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/diff\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function (levels, flag) {\n    this.regExpList = levels;\n    this.flag = flag;\n    this.foldingStartMarker = RegExp(\"^(\" + levels.join(\"|\") + \")\", this.flag);\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var start = { row: row, column: line.length };\n        var regList = this.regExpList;\n        for (var i = 1; i <= regList.length; i++) {\n            var re = RegExp(\"^(\" + regList.slice(0, i).join(\"|\") + \")\", this.flag);\n            if (re.test(line))\n                break;\n        }\n        for (var l = session.getLength(); ++row < l;) {\n            line = session.getLine(row);\n            if (re.test(line))\n                break;\n        }\n        if (row == start.row + 1)\n            return;\n        return new Range(start.row, start.column, row - 1, line.length);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/diff\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/diff_highlight_rules\",\"ace/mode/folding/diff\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./diff_highlight_rules\").DiffHighlightRules;\nvar FoldMode = require(\"./folding/diff\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = HighlightRules;\n    this.foldingRules = new FoldMode([\"diff\", \"@@|\\\\*{5}\"], \"i\");\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/diff\";\n    this.snippetFileId = \"ace/snippets/diff\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/diff\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-django.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/django\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DjangoHighlightRules = function () {\n    this.$rules = {\n        'start': [{\n                token: \"string\",\n                regex: '\".*?\"'\n            }, {\n                token: \"string\",\n                regex: \"'.*?'\"\n            }, {\n                token: \"constant\",\n                regex: '[0-9]+'\n            }, {\n                token: \"variable\",\n                regex: \"[-_a-zA-Z0-9:]+\"\n            }],\n        'tag': [{\n                token: \"entity.name.function\",\n                regex: \"[a-zA-Z][_a-zA-Z0-9]*\",\n                next: \"start\"\n            }]\n    };\n};\noop.inherits(DjangoHighlightRules, TextHighlightRules);\nvar DjangoHtmlHighlightRules = function () {\n    this.$rules = new HtmlHighlightRules().getRules();\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token: \"comment.line\",\n            regex: \"\\\\{#.*?#\\\\}\"\n        }, {\n            token: \"comment.block\",\n            regex: \"\\\\{\\\\%\\\\s*comment\\\\s*\\\\%\\\\}\",\n            merge: true,\n            next: \"django-comment\"\n        }, {\n            token: \"constant.language\",\n            regex: \"\\\\{\\\\{\",\n            next: \"django-start\"\n        }, {\n            token: \"constant.language\",\n            regex: \"\\\\{\\\\%\",\n            next: \"django-tag\"\n        });\n        this.embedRules(DjangoHighlightRules, \"django-\", [{\n                token: \"comment.block\",\n                regex: \"\\\\{\\\\%\\\\s*endcomment\\\\s*\\\\%\\\\}\",\n                merge: true,\n                next: \"start\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\%\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\}\\\\}\",\n                next: \"start\"\n            }]);\n    }\n};\noop.inherits(DjangoHtmlHighlightRules, HtmlHighlightRules);\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = DjangoHtmlHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.$id = \"ace/mode/django\";\n    this.snippetFileId = \"ace/snippets/django\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/django\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-dockerfile.js",
    "content": "ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar reservedKeywords = exports.reservedKeywords = ('!|{|}|case|do|done|elif|else|' +\n    'esac|fi|for|if|in|then|until|while|' +\n    '&|;|export|local|read|typeset|unset|' +\n    'elif|select|set|function|declare|readonly');\nvar languageConstructs = exports.languageConstructs = ('[|]|alias|bg|bind|break|builtin|' +\n    'cd|command|compgen|complete|continue|' +\n    'dirs|disown|echo|enable|eval|exec|' +\n    'exit|fc|fg|getopts|hash|help|history|' +\n    'jobs|kill|let|logout|popd|printf|pushd|' +\n    'pwd|return|set|shift|shopt|source|' +\n    'suspend|test|times|trap|type|ulimit|' +\n    'umask|unalias|wait');\nvar ShHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n    this.$rules = {\n        \"start\": [{\n                token: \"constant\",\n                regex: /\\\\./\n            }, {\n                token: [\"text\", \"comment\"],\n                regex: /(^|\\s)(#.*)$/\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\(?:[$`\"\\\\]|$)/\n                    }, {\n                        include: \"variables\"\n                    }, {\n                        token: \"keyword.operator\",\n                        regex: /`/ // TODO highlight `\n                    }, {\n                        token: \"string.end\",\n                        regex: '\"',\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string\",\n                regex: \"\\\\$'\",\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n                    }, {\n                        token: \"string\",\n                        regex: \"'\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                regex: \"<<<\",\n                token: \"keyword.operator\"\n            }, {\n                stateName: \"heredoc\",\n                regex: \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n                onMatch: function (value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[4]);\n                    return [\n                        { type: \"constant\", value: tokens[1] },\n                        { type: \"text\", value: tokens[2] },\n                        { type: \"string\", value: tokens[3] },\n                        { type: \"support.class\", value: tokens[4] },\n                        { type: \"string\", value: tokens[5] }\n                    ];\n                },\n                rules: {\n                    heredoc: [{\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }],\n                    indentedHeredoc: [{\n                            token: \"string\",\n                            regex: \"^\\t+\"\n                        }, {\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }]\n                }\n            }, {\n                regex: \"$\",\n                token: \"empty\",\n                next: function (currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n                token: [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n                regex: /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n            }, {\n                token: \"variable.language\",\n                regex: builtinVariable\n            }, {\n                token: \"variable\",\n                regex: variable\n            }, {\n                include: \"variables\"\n            }, {\n                token: \"support.function\",\n                regex: func\n            }, {\n                token: \"support.function\",\n                regex: fileDescriptor\n            }, {\n                token: \"string\",\n                start: \"'\", end: \"'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \";\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)\\\\}]\",\n                next: \"pop\"\n            }],\n        variables: [{\n                token: \"variable\",\n                regex: /(\\$)(\\w+)/\n            }, {\n                token: [\"variable\", \"paren.lparen\"],\n                regex: /(\\$)(\\()/,\n                push: \"start\"\n            }, {\n                token: [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n                regex: /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n                push: \"start\"\n            }, {\n                token: \"variable\",\n                regex: /\\$[*@#?\\-$!0_]/\n            }, {\n                token: [\"variable\", \"paren.lparen\"],\n                regex: /(\\$)(\\{)/,\n                push: \"start\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(ShHighlightRules, TextHighlightRules);\nexports.ShHighlightRules = ShHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar Mode = function () {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n    this.checkOutdent = function (state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n        if (!last)\n            return false;\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length - tab.length, row, indent.length));\n    };\n    this.$id = \"ace/mode/sh\";\n    this.snippetFileId = \"ace/snippets/sh\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/dockerfile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/sh_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar DockerfileHighlightRules = function () {\n    ShHighlightRules.call(this);\n    var startRules = this.$rules.start;\n    for (var i = 0; i < startRules.length; i++) {\n        if (startRules[i].token == \"variable.language\") {\n            startRules.splice(i, 0, {\n                token: \"constant.language\",\n                regex: \"(?:^(?:FROM|MAINTAINER|RUN|CMD|EXPOSE|ENV|ADD|ENTRYPOINT|VOLUME|USER|WORKDIR|ONBUILD|COPY|LABEL)\\\\b)\",\n                caseInsensitive: true\n            });\n            break;\n        }\n    }\n};\noop.inherits(DockerfileHighlightRules, ShHighlightRules);\nexports.DockerfileHighlightRules = DockerfileHighlightRules;\n\n});\n\nace.define(\"ace/mode/dockerfile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/sh\",\"ace/mode/dockerfile_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar ShMode = require(\"./sh\").Mode;\nvar DockerfileHighlightRules = require(\"./dockerfile_highlight_rules\").DockerfileHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    ShMode.call(this);\n    this.HighlightRules = DockerfileHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, ShMode);\n(function () {\n    this.$id = \"ace/mode/dockerfile\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/dockerfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-dot.js",
    "content": "ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/dot_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar DotHighlightRules = function () {\n    var keywords = lang.arrayToMap((\"strict|node|edge|graph|digraph|subgraph\").split(\"|\"));\n    var attributes = lang.arrayToMap((\"damping|k|url|area|arrowhead|arrowsize|arrowtail|aspect|bb|bgcolor|center|charset|clusterrank|color|colorscheme|comment|compound|concentrate|constraint|decorate|defaultdist|dim|dimen|dir|diredgeconstraints|distortion|dpi|edgeurl|edgehref|edgetarget|edgetooltip|epsilon|esep|fillcolor|fixedsize|fontcolor|fontname|fontnames|fontpath|fontsize|forcelabels|gradientangle|group|headurl|head_lp|headclip|headhref|headlabel|headport|headtarget|headtooltip|height|href|id|image|imagepath|imagescale|label|labelurl|label_scheme|labelangle|labeldistance|labelfloat|labelfontcolor|labelfontname|labelfontsize|labelhref|labeljust|labelloc|labeltarget|labeltooltip|landscape|layer|layerlistsep|layers|layerselect|layersep|layout|len|levels|levelsgap|lhead|lheight|lp|ltail|lwidth|margin|maxiter|mclimit|mindist|minlen|mode|model|mosek|nodesep|nojustify|normalize|nslimit|nslimit1|ordering|orientation|outputorder|overlap|overlap_scaling|pack|packmode|pad|page|pagedir|pencolor|penwidth|peripheries|pin|pos|quadtree|quantum|rank|rankdir|ranksep|ratio|rects|regular|remincross|repulsiveforce|resolution|root|rotate|rotation|samehead|sametail|samplepoints|scale|searchsize|sep|shape|shapefile|showboxes|sides|size|skew|smoothing|sortv|splines|start|style|stylesheet|tailurl|tail_lp|tailclip|tailhref|taillabel|tailport|tailtarget|tailtooltip|target|tooltip|truecolor|vertices|viewport|voro_margin|weight|width|xlabel|xlp|z\").split(\"|\"));\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: /\\/\\/.*$/\n            }, {\n                token: \"comment\",\n                regex: /#.*$/\n            }, {\n                token: \"comment\",\n                merge: true,\n                regex: /\\/\\*/,\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /[+\\-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?\\b/\n            }, {\n                token: \"keyword.operator\",\n                regex: /\\+|=|\\->/\n            }, {\n                token: \"punctuation.operator\",\n                regex: /,|;/\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[{]/\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\]}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }, {\n                token: function (value) {\n                    if (keywords.hasOwnProperty(value.toLowerCase())) {\n                        return \"keyword\";\n                    }\n                    else if (attributes.hasOwnProperty(value.toLowerCase())) {\n                        return \"variable\";\n                    }\n                    else {\n                        return \"text\";\n                    }\n                },\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: '[^\"\\\\\\\\]+',\n                merge: true\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qqstring\",\n                merge: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\",\n                merge: true\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: \"[^'\\\\\\\\]+\",\n                merge: true\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qstring\",\n                merge: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\",\n                merge: true\n            }\n        ]\n    };\n};\noop.inherits(DotHighlightRules, TextHighlightRules);\nexports.DotHighlightRules = DotHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/dot\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/matching_brace_outdent\",\"ace/mode/dot_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar DotHighlightRules = require(\"./dot_highlight_rules\").DotHighlightRules;\nvar DotFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = DotHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new DotFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = [\"//\", \"#\"];\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/dot\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/dot\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-drools.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JavaHighlightRules = function () {\n    var keywords = (\"abstract|continue|for|new|switch|\" +\n        \"assert|default|goto|package|synchronized|\" +\n        \"boolean|do|if|private|this|\" +\n        \"break|double|implements|protected|throw|\" +\n        \"byte|else|import|public|throws|\" +\n        \"case|enum|instanceof|return|transient|\" +\n        \"catch|extends|int|short|try|\" +\n        \"char|final|interface|static|void|\" +\n        \"class|finally|long|strictfp|volatile|\" +\n        \"const|float|native|super|while|\" +\n        \"var\");\n    var buildinConstants = (\"null|Infinity|NaN|undefined\");\n    var langClasses = (\"AbstractMethodError|AssertionError|ClassCircularityError|\" +\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\" +\n        \"ExceptionInInitializerError|IllegalAccessError|\" +\n        \"IllegalThreadStateException|InstantiationError|InternalError|\" +\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\" +\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\" +\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\" +\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\" +\n        \"InstantiationException|IndexOutOfBoundsException|\" +\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\" +\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\" +\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\" +\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\" +\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\" +\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\" +\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\" +\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\" +\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\" +\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\" +\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\" +\n        \"ArrayStoreException|ClassCastException|LinkageError|\" +\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\" +\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\" +\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                regex: \"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",\n                token: \"keyword\",\n                next: [{\n                        regex: \"{\",\n                        token: \"paren.lparen\",\n                        next: [{\n                                regex: \"}\",\n                                token: \"paren.rparen\",\n                                next: \"start\"\n                            }, {\n                                regex: \"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",\n                                token: \"keyword\"\n                            }]\n                    }, {\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    }, {\n                        token: \"identifier\",\n                        regex: \"\\\\w+\"\n                    }, {\n                        token: \"punctuation.operator\",\n                        regex: \".\"\n                    }, {\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    }, {\n                        regex: \"\",\n                        next: \"start\"\n                    }]\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\||\\\\^|\\\\*|\\\\/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?|\\\\:|\\\\*=|\\\\/=|%=|\\\\+=|\\\\-=|&=|\\\\|=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaHighlightRules, TextHighlightRules);\nexports.JavaHighlightRules = JavaHighlightRules;\n\n});\n\nace.define(\"ace/mode/drools_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/java_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JavaHighlightRules = require(\"./java_highlight_rules\").JavaHighlightRules;\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar packageIdentifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][\\\\.a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar DroolsHighlightRules = function () {\n    var keywords = (\"date|effective|expires|lock|on|active|no|loop|auto|focus\" +\n        \"|activation|group|agenda|ruleflow|duration|timer|calendars|refract|direct\" +\n        \"|dialect|salience|enabled|attributes|extends|template\" +\n        \"|function|contains|matches|eval|excludes|soundslike\" +\n        \"|memberof|not|in|or|and|exists|forall|over|from|entry|point|accumulate|acc|collect\" +\n        \"|action|reverse|result|end|init|instanceof|extends|super|boolean|char|byte|short\" +\n        \"|int|long|float|double|this|void|class|new|case|final|if|else|for|while|do\" +\n        \"|default|try|catch|finally|switch|synchronized|return|throw|break|continue|assert\" +\n        \"|modify|static|public|protected|private|abstract|native|transient|volatile\" +\n        \"|strictfp|throws|interface|enum|implements|type|window|trait|no-loop|str\");\n    var langClasses = (\"AbstractMethodError|AssertionError|ClassCircularityError|\" +\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\" +\n        \"ExceptionInInitializerError|IllegalAccessError|\" +\n        \"IllegalThreadStateException|InstantiationError|InternalError|\" +\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\" +\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\" +\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\" +\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\" +\n        \"InstantiationException|IndexOutOfBoundsException|\" +\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\" +\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\" +\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\" +\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\" +\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\" +\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\" +\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\" +\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\" +\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\" +\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\" +\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\" +\n        \"ArrayStoreException|ClassCastException|LinkageError|\" +\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\" +\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\" +\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": \"null\",\n        \"support.class\": langClasses,\n        \"support.function\": \"retract|update|modify|insert\"\n    }, \"identifier\");\n    var stringRules = function () {\n        return [{\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }];\n    };\n    var basicPreRules = function (blockCommentRules) {\n        return [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: blockCommentRules\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }];\n    };\n    var blockCommentRules = function (returnRule) {\n        return [\n            {\n                token: \"comment.block\",\n                regex: \"\\\\*\\\\/\",\n                next: returnRule\n            }, {\n                defaultToken: \"comment.block\"\n            }\n        ];\n    };\n    var basicPostRules = function () {\n        return [{\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }];\n    };\n    this.$rules = {\n        \"start\": [].concat(basicPreRules(\"block.comment\"), [\n            {\n                token: \"entity.name.type\",\n                regex: \"@[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: [\"keyword\", \"text\", \"entity.name.type\"],\n                regex: \"(package)(\\\\s+)(\" + packageIdentifierRe + \")\"\n            }, {\n                token: [\"keyword\", \"text\", \"keyword\", \"text\", \"entity.name.type\"],\n                regex: \"(import)(\\\\s+)(function)(\\\\s+)(\" + packageIdentifierRe + \")\"\n            }, {\n                token: [\"keyword\", \"text\", \"entity.name.type\"],\n                regex: \"(import)(\\\\s+)(\" + packageIdentifierRe + \")\"\n            }, {\n                token: [\"keyword\", \"text\", \"entity.name.type\", \"text\", \"variable\"],\n                regex: \"(global)(\\\\s+)(\" + packageIdentifierRe + \")(\\\\s+)(\" + identifierRe + \")\"\n            }, {\n                token: [\"keyword\", \"text\", \"keyword\", \"text\", \"entity.name.type\"],\n                regex: \"(declare)(\\\\s+)(trait)(\\\\s+)(\" + identifierRe + \")\"\n            }, {\n                token: [\"keyword\", \"text\", \"entity.name.type\"],\n                regex: \"(declare)(\\\\s+)(\" + identifierRe + \")\"\n            }, {\n                token: [\"keyword\", \"text\", \"entity.name.type\"],\n                regex: \"(extends)(\\\\s+)(\" + packageIdentifierRe + \")\"\n            }, {\n                token: [\"keyword\", \"text\"],\n                regex: \"(rule)(\\\\s+)\",\n                next: \"asset.name\"\n            }\n        ], stringRules(), [{\n                token: [\"variable.other\", \"text\", \"text\"],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)\"\n            }, {\n                token: [\"keyword\", \"text\"],\n                regex: \"(query)(\\\\s+)\",\n                next: \"asset.name\"\n            }, {\n                token: [\"keyword\", \"text\"],\n                regex: \"(when)(\\\\s*)\"\n            }, {\n                token: [\"keyword\", \"text\"],\n                regex: \"(then)(\\\\s*)\",\n                next: \"java-start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }], basicPostRules()),\n        \"block.comment\": blockCommentRules(\"start\"),\n        \"asset.name\": [\n            {\n                token: \"entity.name\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"entity.name\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"entity.name\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"start\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.embedRules(JavaHighlightRules, \"java-\", [\n        {\n            token: \"support.function\",\n            regex: \"\\\\b(insert|modify|retract|update)\\\\b\"\n        }, {\n            token: \"keyword\",\n            regex: \"\\\\bend\\\\b\",\n            next: \"start\"\n        }\n    ]);\n};\noop.inherits(DroolsHighlightRules, TextHighlightRules);\nexports.DroolsHighlightRules = DroolsHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/drools\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /\\b(rule|declare|query|when|then)\\b/;\n    this.foldingStopMarker = /\\bend\\b/;\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1]) {\n                var position = { row: row, column: line.length };\n                var iterator = new TokenIterator(session, position.row, position.column);\n                var seek = \"end\";\n                var token = iterator.getCurrentToken();\n                if (token.value == \"when\") {\n                    seek = \"then\";\n                }\n                while (token) {\n                    if (token.value == seek) {\n                        return Range.fromPoints(position, {\n                            row: iterator.getCurrentTokenRow(),\n                            column: iterator.getCurrentTokenColumn()\n                        });\n                    }\n                    token = iterator.stepForward();\n                }\n            }\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/drools\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/drools_highlight_rules\",\"ace/mode/folding/drools\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar DroolsHighlightRules = require(\"./drools_highlight_rules\").DroolsHighlightRules;\nvar DroolsFoldMode = require(\"./folding/drools\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = DroolsHighlightRules;\n    this.foldingRules = new DroolsFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/drools\";\n    this.snippetFileId = \"ace/snippets/drools\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/drools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-edifact.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/edifact_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar EdifactHighlightRules = function () {\n    var header = (\"UNH\");\n    var segment = (\"ADR|AGR|AJT|ALC|ALI|APP|APR|ARD|ARR|ASI|ATT|AUT|\" +\n        \"BAS|BGM|BII|BUS|\" +\n        \"CAV|CCD|CCI|CDI|CDS|CDV|CED|CIN|CLA|CLI|CMP|CNI|CNT|COD|COM|COT|CPI|CPS|CPT|CST|CTA|CUX|\" +\n        \"DAM|DFN|DGS|DII|DIM|DLI|DLM|DMS|DOC|DRD|DSG|DSI|DTM|\" +\n        \"EDT|EFI|ELM|ELU|ELV|EMP|EQA|EQD|EQN|ERC|ERP|EVE|FCA|FII|FNS|FNT|FOR|FSQ|FTX|\" +\n        \"GDS|GEI|GID|GIN|GIR|GOR|GPO|GRU|HAN|HYN|ICD|IDE|IFD|IHC|IMD|IND|INP|INV|IRQ|\" +\n        \"LAN|LIN|LOC|MEA|MEM|MKS|MOA|MSG|MTD|NAD|NAT|\" +\n        \"PAC|PAI|PAS|PCC|PCD|PCI|PDI|PER|PGI|PIA|PNA|POC|PRC|PRI|PRV|PSD|PTY|PYT|\" +\n        \"QRS|QTY|QUA|QVR|\" +\n        \"RCS|REL|RFF|RJL|RNG|ROD|RSL|RTE|\" +\n        \"SAL|SCC|SCD|SEG|SEL|SEQ|SFI|SGP|SGU|SPR|SPS|STA|STC|STG|STS|\" +\n        \"TAX|TCC|TDT|TEM|TMD|TMP|TOD|TPL|TRU|TSR|\" +\n        \"UNB|UNZ|UNT|UGH|UGT|UNS|\" +\n        \"VLI\");\n    var header = (\"UNH\");\n    var buildinConstants = (\"null|Infinity|NaN|undefined\");\n    var langClasses = (\"\");\n    var keywords = (\"BY|SE|ON|INV|JP|UNOA\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"entity.name.segment\": segment,\n        \"entity.name.header\": header,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"punctuation.operator\",\n                regex: \"\\\\+.\\\\+\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\:|'\"\n            }, {\n                token: \"identifier\",\n                regex: \"\\\\:D\\\\:\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\nEdifactHighlightRules.metaData = { fileTypes: ['edi'],\n    keyEquivalent: '^~E',\n    name: 'Edifact',\n    scopeName: 'source.edifact' };\noop.inherits(EdifactHighlightRules, TextHighlightRules);\nexports.EdifactHighlightRules = EdifactHighlightRules;\n\n});\n\nace.define(\"ace/mode/edifact\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/edifact_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar EdifactHighlightRules = require(\"./edifact_highlight_rules\").EdifactHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = EdifactHighlightRules;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/edifact\";\n    this.snippetFileId = \"ace/snippets/edifact\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/edifact\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-eiffel.js",
    "content": "ace.define(\"ace/mode/eiffel_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar EiffelHighlightRules = function () {\n    var keywords = \"across|agent|alias|all|attached|as|assign|attribute|check|\" +\n        \"class|convert|create|debug|deferred|detachable|do|else|elseif|end|\" +\n        \"ensure|expanded|export|external|feature|from|frozen|if|inherit|\" +\n        \"inspect|invariant|like|local|loop|not|note|obsolete|old|once|\" +\n        \"Precursor|redefine|rename|require|rescue|retry|select|separate|\" +\n        \"some|then|undefine|until|variant|when\";\n    var operatorKeywords = \"and|implies|or|xor\";\n    var languageConstants = \"Void\";\n    var booleanConstants = \"True|False\";\n    var languageVariables = \"Current|Result\";\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language\": languageConstants,\n        \"constant.language.boolean\": booleanConstants,\n        \"variable.language\": languageVariables,\n        \"keyword.operator\": operatorKeywords,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n    var simpleString = /(?:[^\"%\\b\\f\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)+?/;\n    this.$rules = {\n        \"start\": [{\n                token: \"string.quoted.other\",\n                regex: /\"\\[/,\n                next: \"aligned_verbatim_string\"\n            }, {\n                token: \"string.quoted.other\",\n                regex: /\"\\{/,\n                next: \"non-aligned_verbatim_string\"\n            }, {\n                token: \"string.quoted.double\",\n                regex: /\"(?:[^%\\b\\f\\n\\r\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)*?\"/\n            }, {\n                token: \"comment.line.double-dash\",\n                regex: /--.*/\n            }, {\n                token: \"constant.character\",\n                regex: /'(?:[^%\\b\\f\\n\\r\\t\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)'/\n            }, {\n                token: \"constant.numeric\",\n                regex: /\\b0(?:[xX][\\da-fA-F](?:_*[\\da-fA-F])*|[cC][0-7](?:_*[0-7])*|[bB][01](?:_*[01])*)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d(?:_*\\d)*)?\\.(?:(?:\\d(?:_*\\d)*)?[eE][+-]?)?\\d(?:_*\\d)*|\\d(?:_*\\d)*\\.?/\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]|<<|\\|\\(/\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]|>>|\\|\\)/\n            }, {\n                token: \"keyword.operator\",\n                regex: /:=|->|\\.(?=\\w)|[;,:?]/\n            }, {\n                token: \"keyword.operator\",\n                regex: /\\\\\\\\|\\|\\.\\.\\||\\.\\.|\\/[~\\/]?|[><\\/]=?|[-+*^=~]/\n            }, {\n                token: function (v) {\n                    var result = keywordMapper(v);\n                    if (result === \"identifier\" && v === v.toUpperCase()) {\n                        result = \"entity.name.type\";\n                    }\n                    return result;\n                },\n                regex: /[a-zA-Z][a-zA-Z\\d_]*\\b/\n            }, {\n                token: \"text\",\n                regex: /\\s+/\n            }\n        ],\n        \"aligned_verbatim_string\": [{\n                token: \"string\",\n                regex: /]\"/,\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: simpleString\n            }\n        ],\n        \"non-aligned_verbatim_string\": [{\n                token: \"string.quoted.other\",\n                regex: /}\"/,\n                next: \"start\"\n            }, {\n                token: \"string.quoted.other\",\n                regex: simpleString\n            }\n        ]\n    };\n};\noop.inherits(EiffelHighlightRules, TextHighlightRules);\nexports.EiffelHighlightRules = EiffelHighlightRules;\n\n});\n\nace.define(\"ace/mode/eiffel\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/eiffel_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar EiffelHighlightRules = require(\"./eiffel_highlight_rules\").EiffelHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = EiffelHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.$id = \"ace/mode/eiffel\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/eiffel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-ejs.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token: \"constant.other.symbol.ruby\",\n    regex: \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\nexports.qString = {\n    token: \"string\",\n    regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\nexports.qqString = {\n    token: \"string\",\n    regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\nexports.tString = {\n    token: \"string\",\n    regex: \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\nvar constantNumericHex = exports.constantNumericHex = {\n    token: \"constant.numeric\",\n    regex: \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\nvar constantNumericBinary = exports.constantNumericBinary = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[bB][01](?:[01]|_(?=[01]))*)\\b/\n};\nvar constantNumericDecimal = exports.constantNumericDecimal = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[dD](?:[1-9](?:[\\d]|_(?=[\\d]))*|0))\\b/\n};\nvar constantNumericOctal = exports.constantNumericDecimal = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[oO]?(?:[1-7](?:[0-7]|_(?=[0-7]))*|0))\\b/\n};\nvar constantNumericRational = exports.constantNumericRational = {\n    token: \"constant.numeric\",\n    regex: /\\b([\\d]+(?:[./][\\d]+)?ri?)\\b/\n};\nvar constantNumericComplex = exports.constantNumericComplex = {\n    token: \"constant.numeric\",\n    regex: /\\b([\\d]i)\\b/\n};\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token: \"constant.numeric\",\n    regex: \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?i?\\\\b\"\n};\nvar instanceVariable = exports.instanceVariable = {\n    token: \"variable.instance\",\n    regex: \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\nvar RubyHighlightRules = function () {\n    var builtinFunctions = (\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many|p|warn|refine|using|module_function|extend|alias_method|\" +\n        \"private_class_method|remove_method|undef_method\");\n    var keywords = (\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|__ENCODING__|prepend\");\n    var buildinConstants = (\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING|RUBY_PATCHLEVEL|RUBY_REVISION|RUBY_COPYRIGHT|RUBY_ENGINE|RUBY_ENGINE_VERSION|RUBY_DESCRIPTION\");\n    var builtinVariables = (\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n    var escapedChars = \"\\\\\\\\(?:n(?:[1-7][0-7]{0,2}|0)|[nsrtvfbae'\\\"\\\\\\\\]|c(?:\\\\\\\\M-)?.|M-(?:\\\\\\\\C-|\\\\\\\\c)?.|C-(?:\\\\\\\\M-)?.|[0-7]{3}|x[\\\\da-fA-F]{2}|u[\\\\da-fA-F]{4}|u{[\\\\da-fA-F]{1,6}(?:\\\\s[\\\\da-fA-F]{1,6})*})\";\n    var closeParen = {\n        \"(\": \")\",\n        \"[\": \"]\",\n        \"{\": \"}\",\n        \"<\": \">\",\n        \"^\": \"^\",\n        \"|\": \"|\",\n        \"%\": \"%\"\n    };\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"comment.multiline\",\n                regex: \"^=begin(?=$|\\\\s.*$)\",\n                next: \"comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: /[/](?=.*\\/)/,\n                next: \"regex\"\n            },\n            [{\n                    token: [\"constant.other.symbol.ruby\", \"string.start\"],\n                    regex: /(:)?(\")/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: escapedChars\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /\"/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: \"string.start\",\n                    regex: /`/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: escapedChars\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /`/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: [\"constant.other.symbol.ruby\", \"string.start\"],\n                    regex: /(:)?(')/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: /\\\\['\\\\]/\n                        }, {\n                            token: \"string.end\",\n                            regex: /'/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: \"string.start\",\n                    regex: /%[qwx]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"qStateWithoutInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"string.start\",\n                    regex: /%[QWX]?([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"qStateWithInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"constant.other.symbol.ruby\",\n                    regex: /%[si]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"sStateWithoutInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"constant.other.symbol.ruby\",\n                    regex: /%[SI]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"sStateWithInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"string.regexp\",\n                    regex: /%[r]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"rState\";\n                        return this.token;\n                    }\n                }],\n            {\n                token: \"punctuation\",\n                regex: \"::\"\n            },\n            instanceVariable,\n            {\n                token: \"variable.global\",\n                regex: \"[$][a-zA-Z_\\\\d]+\"\n            }, {\n                token: \"support.class\",\n                regex: \"[A-Z][a-zA-Z_\\\\d]*\"\n            }, {\n                token: [\"punctuation.operator\", \"support.function\"],\n                regex: /(\\.)([a-zA-Z_\\d]+)(?=\\()/\n            }, {\n                token: [\"punctuation.operator\", \"identifier\"],\n                regex: /(\\.)([a-zA-Z_][a-zA-Z_\\d]*)/\n            }, {\n                token: \"string.character\",\n                regex: \"\\\\B\\\\?(?:\" + escapedChars + \"|\\\\S)\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /\\?(?=.+:)/\n            },\n            constantNumericRational,\n            constantNumericComplex,\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n            constantNumericBinary,\n            constantNumericDecimal,\n            constantNumericOctal,\n            {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"punctuation.separator.key-value\",\n                regex: \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch: function (value, currentState, stack) {\n                    var next = (value[2] == '-' || value[2] == '~') ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        { type: \"constant\", value: tokens[1] },\n                        { type: \"string\", value: tokens[2] },\n                        { type: \"support.class\", value: tokens[3] },\n                        { type: \"string\", value: tokens[4] }\n                    ];\n                },\n                regex: \"(<<[-~]?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }],\n                    indentedHeredoc: [{\n                            token: \"string\",\n                            regex: \"^ +\"\n                        }, {\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }]\n                }\n            }, {\n                regex: \"$\",\n                token: \"empty\",\n                next: function (currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\||\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\",\n                onMatch: function (value, currentState, stack) {\n                    this.next = '';\n                    if (value == \"}\" && stack.length > 1 && stack[1] != \"start\") {\n                        stack.shift();\n                        this.next = stack.shift();\n                    }\n                    return this.token;\n                }\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.multiline\",\n                regex: \"^=end(?=$|\\\\s.*$)\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \".+\"\n            }\n        ],\n        \"qStateWithInterpolation\": [{\n                token: \"string.start\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"string\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapedChars\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"string.end\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"string\";\n                }\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qStateWithoutInterpolation\": [{\n                token: \"string.start\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"string\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\['\\\\]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"string.end\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"string\";\n                }\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"sStateWithoutInterpolation\": [{\n                token: \"constant.other.symbol.ruby\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                token: \"constant.other.symbol.ruby\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                defaultToken: \"constant.other.symbol.ruby\"\n            }],\n        \"sStateWithInterpolation\": [{\n                token: \"constant.other.symbol.ruby\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapedChars\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"constant.other.symbol.ruby\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                defaultToken: \"constant.other.symbol.ruby\"\n            }],\n        \"rState\": [{\n                token: \"string.regexp\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.language.escape\";\n                }\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"string.regexp\",\n                regex: /\\//\n            }, {\n                token: \"string.regexp\",\n                regex: /[)\\]>}^|%][imxouesn]*/, onMatch: function (val, state, stack) {\n                    if (stack.length && val[0] === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.language.escape\";\n                }\n            },\n            { include: \"regex\" },\n            {\n                defaultToken: \"string.regexp\"\n            }],\n        \"regex\": [\n            {\n                token: \"regexp.keyword\",\n                regex: /\\\\[wWdDhHsS]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\[AGbBzZ]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\g<[a-zA-Z0-9]*>/\n            }, {\n                token: [\"constant.language.escape\", \"regexp.keyword\", \"constant.language.escape\"],\n                regex: /(\\\\p{\\^?)(Alnum|Alpha|Blank|Cntrl|Digit|Graph|Lower|Print|Punct|Space|Upper|XDigit|Word|ASCII|Any|Assigned|Arabic|Armenian|Balinese|Bengali|Bopomofo|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Ethiopic|Georgian|Glagolitic|Gothic|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hebrew|Hiragana|Inherited|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Lao|Latin|Lepcha|Limbu|Linear_B|Lycian|Lydian|Malayalam|Mongolian|Myanmar|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Italic|Old_Persian|Oriya|Osmanya|Phags_Pa|Phoenician|Rejang|Runic|Saurashtra|Shavian|Sinhala|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Ugaritic|Vai|Yi|Ll|Lm|Lt|Lu|Lo|Mn|Mc|Me|Nd|Nl|Pc|Pd|Ps|Pe|Pi|Pf|Po|No|Sm|Sc|Sk|So|Zs|Zl|Zp|Cc|Cf|Cn|Co|Cs|N|L|M|P|S|Z|C)(})/\n            }, {\n                token: [\"constant.language.escape\", \"invalid\", \"constant.language.escape\"],\n                regex: /(\\\\p{\\^?)([^/]*)(})/\n            }, {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: /[/][imxouesn]*/,\n                next: \"start\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?(?:[:=!>]|<'?[a-zA-Z]*'?>|<[=!])|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"regexp.keyword\",\n                regex: /\\[\\[:(?:alnum|alpha|blank|cntrl|digit|graph|lower|print|punct|space|upper|xdigit|word|ascii):\\]\\]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                push: \"regex_character_class\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.keyword\",\n                regex: /\\\\[wWdDhHsS]/\n            }, {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: /&?&?\\[\\^?/,\n                push: \"regex_character_class\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                defaultToken: \"string.regexp.characterclass\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(RubyHighlightRules, TextHighlightRules);\nexports.RubyHighlightRules = RubyHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar FoldMode = exports.FoldMode = function () {\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.indentKeywords = {\n        \"class\": 1,\n        \"def\": 1,\n        \"module\": 1,\n        \"do\": 1,\n        \"unless\": 1,\n        \"if\": 1,\n        \"while\": 1,\n        \"for\": 1,\n        \"until\": 1,\n        \"begin\": 1,\n        \"else\": 0,\n        \"elsif\": 0,\n        \"rescue\": 0,\n        \"ensure\": 0,\n        \"when\": 0,\n        \"end\": -1,\n        \"case\": 1,\n        \"=begin\": 1,\n        \"=end\": -1\n    };\n    this.foldingStartMarker = /(?:\\s|^)(def|do|while|class|unless|module|if|for|until|begin|else|elsif|case|rescue|ensure|when)\\b|({\\s*$)|(=begin)/;\n    this.foldingStopMarker = /(=end(?=$|\\s.*$))|(^\\s*})|\\b(end)\\b/;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n        if (isStart && !isEnd) {\n            var match = line.match(this.foldingStartMarker);\n            if (match[1]) {\n                if (match[1] == \"if\" || match[1] == \"else\" || match[1] == \"while\" || match[1] == \"until\" || match[1] == \"unless\") {\n                    if (match[1] == \"else\" && /^\\s*else\\s*$/.test(line) === false) {\n                        return;\n                    }\n                    if (/^\\s*(?:if|else|while|until|unless)\\s*/.test(line) === false) {\n                        return;\n                    }\n                }\n                if (match[1] == \"when\") {\n                    if (/\\sthen\\s/.test(line) === true) {\n                        return;\n                    }\n                }\n                if (session.getTokenAt(row, match.index + 2).type === \"keyword\")\n                    return \"start\";\n            }\n            else if (match[3]) {\n                if (session.getTokenAt(row, match.index + 1).type === \"comment.multiline\")\n                    return \"start\";\n            }\n            else {\n                return \"start\";\n            }\n        }\n        if (foldStyle != \"markbeginend\" || !isEnd || isStart && isEnd)\n            return \"\";\n        var match = line.match(this.foldingStopMarker);\n        if (match[3] === \"end\") {\n            if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                return \"end\";\n        }\n        else if (match[1]) {\n            if (session.getTokenAt(row, match.index + 1).type === \"comment.multiline\")\n                return \"end\";\n        }\n        else\n            return \"end\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1] || match[3])\n                return this.rubyBlock(session, row, match.index + 2);\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[3] === \"end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return this.rubyBlock(session, row, match.index + 1);\n            }\n            if (match[1] === \"=end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"comment.multiline\")\n                    return this.rubyBlock(session, row, match.index + 1);\n            }\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n    this.rubyBlock = function (session, row, column, tokenRange) {\n        var stream = new TokenIterator(session, row, column);\n        var token = stream.getCurrentToken();\n        if (!token || (token.type != \"keyword\" && token.type != \"comment.multiline\"))\n            return;\n        var val = token.value;\n        var line = session.getLine(row);\n        switch (token.value) {\n            case \"if\":\n            case \"unless\":\n            case \"while\":\n            case \"until\":\n                var checkToken = new RegExp(\"^\\\\s*\" + token.value);\n                if (!checkToken.test(line)) {\n                    return;\n                }\n                var dir = this.indentKeywords[val];\n                break;\n            case \"when\":\n                if (/\\sthen\\s/.test(line)) {\n                    return;\n                }\n            case \"elsif\":\n            case \"rescue\":\n            case \"ensure\":\n                var dir = 1;\n                break;\n            case \"else\":\n                var checkToken = new RegExp(\"^\\\\s*\" + token.value + \"\\\\s*$\");\n                if (!checkToken.test(line)) {\n                    return;\n                }\n                var dir = 1;\n                break;\n            default:\n                var dir = this.indentKeywords[val];\n                break;\n        }\n        var stack = [val];\n        if (!dir)\n            return;\n        var startColumn = dir === -1 ? session.getLine(row - 1).length : session.getLine(row).length;\n        var startRow = row;\n        var ranges = [];\n        ranges.push(stream.getCurrentTokenRange());\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        if (token.type == \"comment.multiline\") {\n            while (token = stream.step()) {\n                if (token.type !== \"comment.multiline\")\n                    continue;\n                if (dir == 1) {\n                    startColumn = 6;\n                    if (token.value == \"=end\") {\n                        break;\n                    }\n                }\n                else {\n                    if (token.value == \"=begin\") {\n                        break;\n                    }\n                }\n            }\n        }\n        else {\n            while (token = stream.step()) {\n                var ignore = false;\n                if (token.type !== \"keyword\")\n                    continue;\n                var level = dir * this.indentKeywords[token.value];\n                line = session.getLine(stream.getCurrentTokenRow());\n                switch (token.value) {\n                    case \"do\":\n                        for (var i = stream.$tokenIndex - 1; i >= 0; i--) {\n                            var prevToken = stream.$rowTokens[i];\n                            if (prevToken && (prevToken.value == \"while\" || prevToken.value == \"until\" || prevToken.value == \"for\")) {\n                                level = 0;\n                                break;\n                            }\n                        }\n                        break;\n                    case \"else\":\n                        var checkToken = new RegExp(\"^\\\\s*\" + token.value + \"\\\\s*$\");\n                        if (!checkToken.test(line) || val == \"case\") {\n                            level = 0;\n                            ignore = true;\n                        }\n                        break;\n                    case \"if\":\n                    case \"unless\":\n                    case \"while\":\n                    case \"until\":\n                        var checkToken = new RegExp(\"^\\\\s*\" + token.value);\n                        if (!checkToken.test(line)) {\n                            level = 0;\n                            ignore = true;\n                        }\n                        break;\n                    case \"when\":\n                        if (/\\sthen\\s/.test(line) || val == \"case\") {\n                            level = 0;\n                            ignore = true;\n                        }\n                        break;\n                }\n                if (level > 0) {\n                    stack.unshift(token.value);\n                }\n                else if (level <= 0 && ignore === false) {\n                    stack.shift();\n                    if (!stack.length) {\n                        if ((val == \"while\" || val == \"until\" || val == \"for\") && token.value != \"do\") {\n                            break;\n                        }\n                        if (token.value == \"do\" && dir == -1 && level != 0)\n                            break;\n                        if (token.value != \"do\")\n                            break;\n                    }\n                    if (level === 0) {\n                        stack.unshift(token.value);\n                    }\n                }\n            }\n        }\n        if (!token)\n            return null;\n        if (tokenRange) {\n            ranges.push(stream.getCurrentTokenRange());\n            return ranges;\n        }\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1) {\n            if (token.type === \"comment.multiline\") {\n                var endColumn = 6;\n            }\n            else {\n                var endColumn = session.getLine(row).length;\n            }\n            return new Range(row, endColumn, startRow - 1, startColumn);\n        }\n        else\n            return new Range(startRow, startColumn, row - 1, session.getLine(row - 1).length);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/ruby\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/ruby\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n    this.indentKeywords = this.foldingRules.indentKeywords;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when|elsif|unless|while|for|begin|rescue|ensure)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return /^\\s+(end|else|rescue|ensure)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length - tab.length, row, indent.length));\n        }\n    };\n    this.getMatching = function (session, row, column) {\n        if (row == undefined) {\n            var pos = session.selection.lead;\n            column = pos.column;\n            row = pos.row;\n        }\n        var startToken = session.getTokenAt(row, column);\n        if (startToken && startToken.value in this.indentKeywords)\n            return this.foldingRules.rubyBlock(session, row, column, true);\n    };\n    this.$id = \"ace/mode/ruby\";\n    this.snippetFileId = \"ace/snippets/ruby\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/ejs\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/ruby\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar EjsHighlightRules = function (start, end) {\n    HtmlHighlightRules.call(this);\n    if (!start)\n        start = \"(?:<%|<\\\\?|{{)\";\n    if (!end)\n        end = \"(?:%>|\\\\?>|}})\";\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token: \"markup.list.meta.tag\",\n            regex: start + \"(?![>}])[-=]?\",\n            push: \"ejs-start\"\n        });\n    }\n    this.embedRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"ejs-\", [{\n            token: \"markup.list.meta.tag\",\n            regex: \"-?\" + end,\n            next: \"pop\"\n        }, {\n            token: \"comment\",\n            regex: \"//.*?\" + end,\n            next: \"pop\"\n        }]);\n    this.normalizeRules();\n};\noop.inherits(EjsHighlightRules, HtmlHighlightRules);\nexports.EjsHighlightRules = EjsHighlightRules;\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar RubyMode = require(\"./ruby\").Mode;\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = EjsHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"ejs-\": JavaScriptMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.$id = \"ace/mode/ejs\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/ejs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-elixir.js",
    "content": "ace.define(\"ace/mode/elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from https://raw.githubusercontent.com/elixir-lang/elixir-tmbundle/master/Syntaxes/Elixir.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ElixirHighlightRules = function () {\n    this.$rules = { start: [{ token: ['meta.module.elixir',\n                    'keyword.control.module.elixir',\n                    'meta.module.elixir',\n                    'entity.name.type.module.elixir'],\n                regex: '^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)' },\n            { token: 'comment.documentation.heredoc',\n                regex: '@(?:module|type)?doc (?:~[a-z])?\"\"\"',\n                push: [{ token: 'comment.documentation.heredoc',\n                        regex: '\\\\s*\"\"\"',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'comment.documentation.heredoc' }],\n                comment: '@doc with heredocs is treated as documentation' },\n            { token: 'comment.documentation.heredoc',\n                regex: '@(?:module|type)?doc ~[A-Z]\"\"\"',\n                push: [{ token: 'comment.documentation.heredoc',\n                        regex: '\\\\s*\"\"\"',\n                        next: 'pop' },\n                    { defaultToken: 'comment.documentation.heredoc' }],\n                comment: '@doc with heredocs is treated as documentation' },\n            { token: 'comment.documentation.heredoc',\n                regex: '@(?:module|type)?doc (?:~[a-z])?\\'\\'\\'',\n                push: [{ token: 'comment.documentation.heredoc',\n                        regex: '\\\\s*\\'\\'\\'',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'comment.documentation.heredoc' }],\n                comment: '@doc with heredocs is treated as documentation' },\n            { token: 'comment.documentation.heredoc',\n                regex: '@(?:module|type)?doc ~[A-Z]\\'\\'\\'',\n                push: [{ token: 'comment.documentation.heredoc',\n                        regex: '\\\\s*\\'\\'\\'',\n                        next: 'pop' },\n                    { defaultToken: 'comment.documentation.heredoc' }],\n                comment: '@doc with heredocs is treated as documentation' },\n            { token: 'comment.documentation.false',\n                regex: '@(?:module|type)?doc false',\n                comment: '@doc false is treated as documentation' },\n            { token: 'comment.documentation.string',\n                regex: '@(?:module|type)?doc \"',\n                push: [{ token: 'comment.documentation.string',\n                        regex: '\"',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'comment.documentation.string' }],\n                comment: '@doc with string is treated as documentation' },\n            { token: 'keyword.control.elixir',\n                regex: '\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])' },\n            { token: 'keyword.operator.elixir',\n                regex: '\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b',\n                comment: ' as above, just doesn\\'t need a \\'end\\' and does a logic operation' },\n            { token: 'constant.language.elixir',\n                regex: '\\\\b(?:nil|true|false)\\\\b(?![?!])' },\n            { token: 'variable.language.elixir',\n                regex: '\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])' },\n            { token: ['punctuation.definition.variable.elixir',\n                    'variable.other.readwrite.module.elixir'],\n                regex: '(@)([a-zA-Z_]\\\\w*)' },\n            { token: ['punctuation.definition.variable.elixir',\n                    'variable.other.anonymous.elixir'],\n                regex: '(&)(\\\\d*)' },\n            { token: 'variable.other.constant.elixir',\n                regex: '\\\\b[A-Z]\\\\w*\\\\b' },\n            { token: 'constant.numeric.elixir',\n                regex: '\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b' },\n            { token: 'punctuation.definition.constant.elixir',\n                regex: ':\\'',\n                push: [{ token: 'punctuation.definition.constant.elixir',\n                        regex: '\\'',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'constant.other.symbol.single-quoted.elixir' }] },\n            { token: 'punctuation.definition.constant.elixir',\n                regex: ':\"',\n                push: [{ token: 'punctuation.definition.constant.elixir',\n                        regex: '\"',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'constant.other.symbol.double-quoted.elixir' }] },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '(?:\\'\\'\\')',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?>\\'\\'\\')',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '^\\\\s*\\'\\'\\'',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'support.function.variable.quoted.single.heredoc.elixir' }],\n                comment: 'Single-quoted heredocs' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '\\'',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\'',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'support.function.variable.quoted.single.elixir' }],\n                comment: 'single quoted string (allows for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '(?:\"\"\")',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?>\"\"\")',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '^\\\\s*\"\"\"',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.quoted.double.heredoc.elixir' }],\n                comment: 'Double-quoted heredocs' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '\"',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\"',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.quoted.double.elixir' }],\n                comment: 'double quoted string (allows for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[a-z](?:\"\"\")',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '~[a-z](?>\"\"\")',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '^\\\\s*\"\"\"',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.quoted.double.heredoc.elixir' }],\n                comment: 'Double-quoted heredocs sigils' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[a-z]\\\\{',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\}[a-z]*',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.interpolated.elixir' }],\n                comment: 'sigil (allow for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[a-z]\\\\[',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\][a-z]*',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.interpolated.elixir' }],\n                comment: 'sigil (allow for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[a-z]\\\\<',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\>[a-z]*',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.interpolated.elixir' }],\n                comment: 'sigil (allow for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[a-z]\\\\(',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\)[a-z]*',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.interpolated.elixir' }],\n                comment: 'sigil (allow for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[a-z][^\\\\w]',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '[^\\\\w][a-z]*',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.interpolated.elixir' }],\n                comment: 'sigil (allow for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[A-Z](?:\"\"\")',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '~[A-Z](?>\"\"\")',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '^\\\\s*\"\"\"',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.other.literal.upper.elixir' }],\n                comment: 'Double-quoted heredocs sigils' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[A-Z]\\\\{',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\}[a-z]*',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.other.literal.upper.elixir' }],\n                comment: 'sigil (without interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[A-Z]\\\\[',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\][a-z]*',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.other.literal.upper.elixir' }],\n                comment: 'sigil (without interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[A-Z]\\\\<',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\>[a-z]*',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.other.literal.upper.elixir' }],\n                comment: 'sigil (without interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[A-Z]\\\\(',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\)[a-z]*',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.other.literal.upper.elixir' }],\n                comment: 'sigil (without interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[A-Z][^\\\\w]',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '[^\\\\w][a-z]*',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.other.literal.upper.elixir' }],\n                comment: 'sigil (without interpolation)' },\n            { token: ['punctuation.definition.constant.elixir', 'constant.other.symbol.elixir'],\n                regex: '(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)',\n                comment: 'symbols' },\n            { token: 'punctuation.definition.constant.elixir',\n                regex: '(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)',\n                comment: 'symbols' },\n            { token: ['punctuation.definition.comment.elixir',\n                    'comment.line.number-sign.elixir'],\n                regex: '(#)(.*)' },\n            { token: 'constant.numeric.elixir',\n                regex: '\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n                comment: '\\n\\t\\t\\tmatches questionmark-letters.\\n\\n\\t\\t\\texamples (1st alternation = hex):\\n\\t\\t\\t?\\\\x1     ?\\\\x61\\n\\n\\t\\t\\texamples (2rd alternation = escaped):\\n\\t\\t\\t?\\\\n      ?\\\\b\\n\\n\\t\\t\\texamples (3rd alternation = normal):\\n\\t\\t\\t?a       ?A       ?0 \\n\\t\\t\\t?*       ?\"       ?( \\n\\t\\t\\t?.       ?#\\n\\t\\t\\t\\n\\t\\t\\tthe negative lookbehind prevents against matching\\n\\t\\t\\tp(42.tainted?)\\n\\t\\t\\t' },\n            { token: 'keyword.operator.assignment.augmented.elixir',\n                regex: '\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=' },\n            { token: 'keyword.operator.comparison.elixir',\n                regex: '===?|!==?|<=?|>=?' },\n            { token: 'keyword.operator.bitwise.elixir',\n                regex: '\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}' },\n            { token: 'keyword.operator.logical.elixir',\n                regex: '!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b',\n                originalRegex: '(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b' },\n            { token: 'keyword.operator.arithmetic.elixir',\n                regex: '\\\\*|\\\\+|\\\\-|/' },\n            { token: 'keyword.operator.other.elixir',\n                regex: '\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>' },\n            { token: 'keyword.operator.assignment.elixir', regex: '=' },\n            { token: 'punctuation.separator.other.elixir', regex: ':' },\n            { token: 'punctuation.separator.statement.elixir',\n                regex: '\\\\;' },\n            { token: 'punctuation.separator.object.elixir', regex: ',' },\n            { token: 'punctuation.separator.method.elixir', regex: '\\\\.' },\n            { token: 'punctuation.section.scope.elixir', regex: '\\\\{|\\\\}' },\n            { token: 'punctuation.section.array.elixir', regex: '\\\\[|\\\\]' },\n            { token: 'punctuation.section.function.elixir',\n                regex: '\\\\(|\\\\)' }],\n        '#escaped_char': [{ token: 'constant.character.escape.elixir',\n                regex: '\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)' }],\n        '#interpolated_elixir': [{ token: ['source.elixir.embedded.source',\n                    'source.elixir.embedded.source.empty'],\n                regex: '(#\\\\{)(\\\\})' },\n            { todo: { token: 'punctuation.section.embedded.elixir',\n                    regex: '#\\\\{',\n                    push: [{ token: 'punctuation.section.embedded.elixir',\n                            regex: '\\\\}',\n                            next: 'pop' },\n                        { include: '#nest_curly_and_self' },\n                        { include: '$self' },\n                        { defaultToken: 'source.elixir.embedded.source' }] } }],\n        '#nest_curly_and_self': [{ token: 'punctuation.section.scope.elixir',\n                regex: '\\\\{',\n                push: [{ token: 'punctuation.section.scope.elixir',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { include: '#nest_curly_and_self' }] },\n            { include: '$self' }],\n        '#regex_sub': [{ include: '#interpolated_elixir' },\n            { include: '#escaped_char' },\n            { token: ['punctuation.definition.arbitrary-repitition.elixir',\n                    'string.regexp.arbitrary-repitition.elixir',\n                    'string.regexp.arbitrary-repitition.elixir',\n                    'punctuation.definition.arbitrary-repitition.elixir'],\n                regex: '(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})' },\n            { token: 'punctuation.definition.character-class.elixir',\n                regex: '\\\\[(?:\\\\^?\\\\])?',\n                push: [{ token: 'punctuation.definition.character-class.elixir',\n                        regex: '\\\\]',\n                        next: 'pop' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.regexp.character-class.elixir' }] },\n            { token: 'punctuation.definition.group.elixir',\n                regex: '\\\\(',\n                push: [{ token: 'punctuation.definition.group.elixir',\n                        regex: '\\\\)',\n                        next: 'pop' },\n                    { include: '#regex_sub' },\n                    { defaultToken: 'string.regexp.group.elixir' }] },\n            { token: ['punctuation.definition.comment.elixir',\n                    'comment.line.number-sign.elixir'],\n                regex: '(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)',\n                originalRegex: '(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$',\n                comment: 'We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.' }] };\n    this.normalizeRules();\n};\nElixirHighlightRules.metaData = { comment: 'Textmate bundle for Elixir Programming Language.',\n    fileTypes: ['ex', 'exs'],\n    firstLineMatch: '^#!/.*\\\\belixir',\n    foldingStartMarker: '(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$',\n    foldingStopMarker: '^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)',\n    keyEquivalent: '^~E',\n    name: 'Elixir',\n    scopeName: 'source.elixir' };\noop.inherits(ElixirHighlightRules, TextHighlightRules);\nexports.ElixirHighlightRules = ElixirHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elixir_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ElixirHighlightRules = require(\"./elixir_highlight_rules\").ElixirHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = ElixirHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/elixir\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-elm.js",
    "content": "ace.define(\"ace/mode/elm_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){// TODO check with https://github.com/deadfoxygrandpa/Elm.tmLanguage\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ElmHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": \"as|case|class|data|default|deriving|do|else|export|foreign|\" +\n            \"hiding|jsevent|if|import|in|infix|infixl|infixr|instance|let|\" +\n            \"module|newtype|of|open|then|type|where|_|port|\\u03BB\"\n    }, \"identifier\");\n    var escapeRe = /\\\\(\\d+|['\"\\\\&trnbvf])/;\n    var smallRe = /[a-z_]/.source;\n    var largeRe = /[A-Z]/.source;\n    var idRe = /[a-z_A-Z0-9']/.source;\n    this.$rules = {\n        start: [{\n                token: \"string.start\",\n                regex: '\"',\n                next: \"string\"\n            }, {\n                token: \"string.character\",\n                regex: \"'(?:\" + escapeRe.source + \"|.)'?\"\n            }, {\n                regex: /0(?:[xX][0-9A-Fa-f]+|[oO][0-7]+)|\\d+(\\.\\d+)?([eE][-+]?\\d*)?/,\n                token: \"constant.numeric\"\n            }, {\n                token: \"comment\",\n                regex: \"--.*\"\n            }, {\n                token: \"keyword\",\n                regex: /\\.\\.|\\||:|=|\\\\|\"|->|<-|\\u2192/\n            }, {\n                token: \"keyword.operator\",\n                regex: /[-!#$%&*+.\\/<=>?@\\\\^|~:\\u03BB\\u2192]+/\n            }, {\n                token: \"operator.punctuation\",\n                regex: /[,;`]/\n            }, {\n                regex: largeRe + idRe + \"+\\\\.?\",\n                token: function (value) {\n                    if (value[value.length - 1] == \".\")\n                        return \"entity.name.function\";\n                    return \"constant.language\";\n                }\n            }, {\n                regex: \"^\" + smallRe + idRe + \"+\",\n                token: function (value) {\n                    return \"constant.language\";\n                }\n            }, {\n                token: keywordMapper,\n                regex: \"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b\"\n            }, {\n                regex: \"{-#?\",\n                token: \"comment.start\",\n                onMatch: function (value, currentState, stack) {\n                    this.next = value.length == 2 ? \"blockComment\" : \"docComment\";\n                    return this.token;\n                }\n            }, {\n                token: \"variable.language\",\n                regex: /\\[markdown\\|/,\n                next: \"markdown\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }],\n        markdown: [{\n                regex: /\\|\\]/,\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        blockComment: [{\n                regex: \"{-\",\n                token: \"comment.start\",\n                push: \"blockComment\"\n            }, {\n                regex: \"-}\",\n                token: \"comment.end\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment\"\n            }],\n        docComment: [{\n                regex: \"{-\",\n                token: \"comment.start\",\n                push: \"docComment\"\n            }, {\n                regex: \"-}\",\n                token: \"comment.end\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"doc.comment\"\n            }],\n        string: [{\n                token: \"constant.language.escape\",\n                regex: escapeRe\n            }, {\n                token: \"text\",\n                regex: /\\\\(\\s|$)/,\n                next: \"stringGap\"\n            }, {\n                token: \"string.end\",\n                regex: '\"',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        stringGap: [{\n                token: \"text\",\n                regex: /\\\\/,\n                next: \"string\"\n            }, {\n                token: \"error\",\n                regex: \"\",\n                next: \"start\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(ElmHighlightRules, TextHighlightRules);\nexports.ElmHighlightRules = ElmHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/elm\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elm_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./elm_highlight_rules\").ElmHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = HighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = { start: \"{-\", end: \"-}\", nestable: true };\n    this.$id = \"ace/mode/elm\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/elm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-erlang.js",
    "content": "ace.define(\"ace/mode/erlang_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from tm bundles\\erlang.tmbundle\\Syntaxes\\Erlang.plist (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ErlangHighlightRules = function () {\n    this.$rules = { start: [{ include: '#module-directive' },\n            { include: '#import-export-directive' },\n            { include: '#behaviour-directive' },\n            { include: '#record-directive' },\n            { include: '#define-directive' },\n            { include: '#macro-directive' },\n            { include: '#directive' },\n            { include: '#function' },\n            { include: '#everything-else' }],\n        '#atom': [{ token: 'punctuation.definition.symbol.begin.erlang',\n                regex: '\\'',\n                push: [{ token: 'punctuation.definition.symbol.end.erlang',\n                        regex: '\\'',\n                        next: 'pop' },\n                    { token: ['punctuation.definition.escape.erlang',\n                            'constant.other.symbol.escape.erlang',\n                            'punctuation.definition.escape.erlang',\n                            'constant.other.symbol.escape.erlang',\n                            'constant.other.symbol.escape.erlang'],\n                        regex: '(\\\\\\\\)(?:([bdefnrstv\\\\\\\\\\'\"])|(\\\\^)([@-_])|([0-7]{1,3}))' },\n                    { token: 'invalid.illegal.atom.erlang', regex: '\\\\\\\\\\\\^?.?' },\n                    { defaultToken: 'constant.other.symbol.quoted.single.erlang' }] },\n            { token: 'constant.other.symbol.unquoted.erlang',\n                regex: '[a-z][a-zA-Z\\\\d@_]*' }],\n        '#behaviour-directive': [{ token: ['meta.directive.behaviour.erlang',\n                    'punctuation.section.directive.begin.erlang',\n                    'meta.directive.behaviour.erlang',\n                    'keyword.control.directive.behaviour.erlang',\n                    'meta.directive.behaviour.erlang',\n                    'punctuation.definition.parameters.begin.erlang',\n                    'meta.directive.behaviour.erlang',\n                    'entity.name.type.class.behaviour.definition.erlang',\n                    'meta.directive.behaviour.erlang',\n                    'punctuation.definition.parameters.end.erlang',\n                    'meta.directive.behaviour.erlang',\n                    'punctuation.section.directive.end.erlang'],\n                regex: '^(\\\\s*)(-)(\\\\s*)(behaviour)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' }],\n        '#binary': [{ token: 'punctuation.definition.binary.begin.erlang',\n                regex: '<<',\n                push: [{ token: 'punctuation.definition.binary.end.erlang',\n                        regex: '>>',\n                        next: 'pop' },\n                    { token: ['punctuation.separator.binary.erlang',\n                            'punctuation.separator.value-size.erlang'],\n                        regex: '(,)|(:)' },\n                    { include: '#internal-type-specifiers' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.structure.binary.erlang' }] }],\n        '#character': [{ token: ['punctuation.definition.character.erlang',\n                    'punctuation.definition.escape.erlang',\n                    'constant.character.escape.erlang',\n                    'punctuation.definition.escape.erlang',\n                    'constant.character.escape.erlang',\n                    'constant.character.escape.erlang'],\n                regex: '(\\\\$)(\\\\\\\\)(?:([bdefnrstv\\\\\\\\\\'\"])|(\\\\^)([@-_])|([0-7]{1,3}))' },\n            { token: 'invalid.illegal.character.erlang',\n                regex: '\\\\$\\\\\\\\\\\\^?.?' },\n            { token: ['punctuation.definition.character.erlang',\n                    'constant.character.erlang'],\n                regex: '(\\\\$)(\\\\S)' },\n            { token: 'invalid.illegal.character.erlang', regex: '\\\\$.?' }],\n        '#comment': [{ token: 'punctuation.definition.comment.erlang',\n                regex: '%.*$',\n                push_: [{ token: 'comment.line.percentage.erlang',\n                        regex: '$',\n                        next: 'pop' },\n                    { defaultToken: 'comment.line.percentage.erlang' }] }],\n        '#define-directive': [{ token: ['meta.directive.define.erlang',\n                    'punctuation.section.directive.begin.erlang',\n                    'meta.directive.define.erlang',\n                    'keyword.control.directive.define.erlang',\n                    'meta.directive.define.erlang',\n                    'punctuation.definition.parameters.begin.erlang',\n                    'meta.directive.define.erlang',\n                    'entity.name.function.macro.definition.erlang',\n                    'meta.directive.define.erlang',\n                    'punctuation.separator.parameters.erlang'],\n                regex: '^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(,)',\n                push: [{ token: ['punctuation.definition.parameters.end.erlang',\n                            'meta.directive.define.erlang',\n                            'punctuation.section.directive.end.erlang'],\n                        regex: '(\\\\))(\\\\s*)(\\\\.)',\n                        next: 'pop' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.directive.define.erlang' }] },\n            { token: 'meta.directive.define.erlang',\n                regex: '(?=^\\\\s*-\\\\s*define\\\\s*\\\\(\\\\s*[a-zA-Z\\\\d@_]+\\\\s*\\\\()',\n                push: [{ token: ['punctuation.definition.parameters.end.erlang',\n                            'meta.directive.define.erlang',\n                            'punctuation.section.directive.end.erlang'],\n                        regex: '(\\\\))(\\\\s*)(\\\\.)',\n                        next: 'pop' },\n                    { token: ['text',\n                            'punctuation.section.directive.begin.erlang',\n                            'text',\n                            'keyword.control.directive.define.erlang',\n                            'text',\n                            'punctuation.definition.parameters.begin.erlang',\n                            'text',\n                            'entity.name.function.macro.definition.erlang',\n                            'text',\n                            'punctuation.definition.parameters.begin.erlang'],\n                        regex: '^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\()',\n                        push: [{ token: ['punctuation.definition.parameters.end.erlang',\n                                    'text',\n                                    'punctuation.separator.parameters.erlang'],\n                                regex: '(\\\\))(\\\\s*)(,)',\n                                next: 'pop' },\n                            { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                            { include: '#everything-else' }] },\n                    { token: 'punctuation.separator.define.erlang',\n                        regex: '\\\\|\\\\||\\\\||:|;|,|\\\\.|->' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.directive.define.erlang' }] }],\n        '#directive': [{ token: ['meta.directive.erlang',\n                    'punctuation.section.directive.begin.erlang',\n                    'meta.directive.erlang',\n                    'keyword.control.directive.erlang',\n                    'meta.directive.erlang',\n                    'punctuation.definition.parameters.begin.erlang'],\n                regex: '^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\(?)',\n                push: [{ token: ['punctuation.definition.parameters.end.erlang',\n                            'meta.directive.erlang',\n                            'punctuation.section.directive.end.erlang'],\n                        regex: '(\\\\)?)(\\\\s*)(\\\\.)',\n                        next: 'pop' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.directive.erlang' }] },\n            { token: ['meta.directive.erlang',\n                    'punctuation.section.directive.begin.erlang',\n                    'meta.directive.erlang',\n                    'keyword.control.directive.erlang',\n                    'meta.directive.erlang',\n                    'punctuation.section.directive.end.erlang'],\n                regex: '^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\.)' }],\n        '#everything-else': [{ include: '#comment' },\n            { include: '#record-usage' },\n            { include: '#macro-usage' },\n            { include: '#expression' },\n            { include: '#keyword' },\n            { include: '#textual-operator' },\n            { include: '#function-call' },\n            { include: '#tuple' },\n            { include: '#list' },\n            { include: '#binary' },\n            { include: '#parenthesized-expression' },\n            { include: '#character' },\n            { include: '#number' },\n            { include: '#atom' },\n            { include: '#string' },\n            { include: '#symbolic-operator' },\n            { include: '#variable' }],\n        '#expression': [{ token: 'keyword.control.if.erlang',\n                regex: '\\\\bif\\\\b',\n                push: [{ token: 'keyword.control.end.erlang',\n                        regex: '\\\\bend\\\\b',\n                        next: 'pop' },\n                    { include: '#internal-expression-punctuation' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.expression.if.erlang' }] },\n            { token: 'keyword.control.case.erlang',\n                regex: '\\\\bcase\\\\b',\n                push: [{ token: 'keyword.control.end.erlang',\n                        regex: '\\\\bend\\\\b',\n                        next: 'pop' },\n                    { include: '#internal-expression-punctuation' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.expression.case.erlang' }] },\n            { token: 'keyword.control.receive.erlang',\n                regex: '\\\\breceive\\\\b',\n                push: [{ token: 'keyword.control.end.erlang',\n                        regex: '\\\\bend\\\\b',\n                        next: 'pop' },\n                    { include: '#internal-expression-punctuation' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.expression.receive.erlang' }] },\n            { token: ['keyword.control.fun.erlang',\n                    'text',\n                    'entity.name.type.class.module.erlang',\n                    'text',\n                    'punctuation.separator.module-function.erlang',\n                    'text',\n                    'entity.name.function.erlang',\n                    'text',\n                    'punctuation.separator.function-arity.erlang'],\n                regex: '\\\\b(fun)(\\\\s*)(?:([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(/)' },\n            { token: 'keyword.control.fun.erlang',\n                regex: '\\\\bfun\\\\b',\n                push: [{ token: 'keyword.control.end.erlang',\n                        regex: '\\\\bend\\\\b',\n                        next: 'pop' },\n                    { token: 'text',\n                        regex: '(?=\\\\()',\n                        push: [{ token: 'punctuation.separator.clauses.erlang',\n                                regex: ';|(?=\\\\bend\\\\b)',\n                                next: 'pop' },\n                            { include: '#internal-function-parts' }] },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.expression.fun.erlang' }] },\n            { token: 'keyword.control.try.erlang',\n                regex: '\\\\btry\\\\b',\n                push: [{ token: 'keyword.control.end.erlang',\n                        regex: '\\\\bend\\\\b',\n                        next: 'pop' },\n                    { include: '#internal-expression-punctuation' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.expression.try.erlang' }] },\n            { token: 'keyword.control.begin.erlang',\n                regex: '\\\\bbegin\\\\b',\n                push: [{ token: 'keyword.control.end.erlang',\n                        regex: '\\\\bend\\\\b',\n                        next: 'pop' },\n                    { include: '#internal-expression-punctuation' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.expression.begin.erlang' }] },\n            { token: 'keyword.control.query.erlang',\n                regex: '\\\\bquery\\\\b',\n                push: [{ token: 'keyword.control.end.erlang',\n                        regex: '\\\\bend\\\\b',\n                        next: 'pop' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.expression.query.erlang' }] }],\n        '#function': [{ token: ['meta.function.erlang',\n                    'entity.name.function.definition.erlang',\n                    'meta.function.erlang'],\n                regex: '^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(?=\\\\()',\n                push: [{ token: 'punctuation.terminator.function.erlang',\n                        regex: '\\\\.',\n                        next: 'pop' },\n                    { token: ['text', 'entity.name.function.erlang', 'text'],\n                        regex: '^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(?=\\\\()' },\n                    { token: 'text',\n                        regex: '(?=\\\\()',\n                        push: [{ token: 'punctuation.separator.clauses.erlang',\n                                regex: ';|(?=\\\\.)',\n                                next: 'pop' },\n                            { include: '#parenthesized-expression' },\n                            { include: '#internal-function-parts' }] },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.function.erlang' }] }],\n        '#function-call': [{ token: 'meta.function-call.erlang',\n                regex: '(?=(?:[a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')\\\\s*(?:\\\\(|:\\\\s*(?:[a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')\\\\s*\\\\())',\n                push: [{ token: 'punctuation.definition.parameters.end.erlang',\n                        regex: '\\\\)',\n                        next: 'pop' },\n                    { token: ['entity.name.type.class.module.erlang',\n                            'text',\n                            'punctuation.separator.module-function.erlang',\n                            'text',\n                            'entity.name.function.guard.erlang',\n                            'text',\n                            'punctuation.definition.parameters.begin.erlang'],\n                        regex: '(?:(erlang)(\\\\s*)(:)(\\\\s*))?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)(\\\\s*)(\\\\()',\n                        push: [{ token: 'text', regex: '(?=\\\\))', next: 'pop' },\n                            { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                            { include: '#everything-else' }] },\n                    { token: ['entity.name.type.class.module.erlang',\n                            'text',\n                            'punctuation.separator.module-function.erlang',\n                            'text',\n                            'entity.name.function.erlang',\n                            'text',\n                            'punctuation.definition.parameters.begin.erlang'],\n                        regex: '(?:([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(\\\\()',\n                        push: [{ token: 'text', regex: '(?=\\\\))', next: 'pop' },\n                            { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                            { include: '#everything-else' }] },\n                    { defaultToken: 'meta.function-call.erlang' }] }],\n        '#import-export-directive': [{ token: ['meta.directive.import.erlang',\n                    'punctuation.section.directive.begin.erlang',\n                    'meta.directive.import.erlang',\n                    'keyword.control.directive.import.erlang',\n                    'meta.directive.import.erlang',\n                    'punctuation.definition.parameters.begin.erlang',\n                    'meta.directive.import.erlang',\n                    'entity.name.type.class.module.erlang',\n                    'meta.directive.import.erlang',\n                    'punctuation.separator.parameters.erlang'],\n                regex: '^(\\\\s*)(-)(\\\\s*)(import)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(,)',\n                push: [{ token: ['punctuation.definition.parameters.end.erlang',\n                            'meta.directive.import.erlang',\n                            'punctuation.section.directive.end.erlang'],\n                        regex: '(\\\\))(\\\\s*)(\\\\.)',\n                        next: 'pop' },\n                    { include: '#internal-function-list' },\n                    { defaultToken: 'meta.directive.import.erlang' }] },\n            { token: ['meta.directive.export.erlang',\n                    'punctuation.section.directive.begin.erlang',\n                    'meta.directive.export.erlang',\n                    'keyword.control.directive.export.erlang',\n                    'meta.directive.export.erlang',\n                    'punctuation.definition.parameters.begin.erlang'],\n                regex: '^(\\\\s*)(-)(\\\\s*)(export)(\\\\s*)(\\\\()',\n                push: [{ token: ['punctuation.definition.parameters.end.erlang',\n                            'meta.directive.export.erlang',\n                            'punctuation.section.directive.end.erlang'],\n                        regex: '(\\\\))(\\\\s*)(\\\\.)',\n                        next: 'pop' },\n                    { include: '#internal-function-list' },\n                    { defaultToken: 'meta.directive.export.erlang' }] }],\n        '#internal-expression-punctuation': [{ token: ['punctuation.separator.clause-head-body.erlang',\n                    'punctuation.separator.clauses.erlang',\n                    'punctuation.separator.expressions.erlang'],\n                regex: '(->)|(;)|(,)' }],\n        '#internal-function-list': [{ token: 'punctuation.definition.list.begin.erlang',\n                regex: '\\\\[',\n                push: [{ token: 'punctuation.definition.list.end.erlang',\n                        regex: '\\\\]',\n                        next: 'pop' },\n                    { token: ['entity.name.function.erlang',\n                            'text',\n                            'punctuation.separator.function-arity.erlang'],\n                        regex: '([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(/)',\n                        push: [{ token: 'punctuation.separator.list.erlang',\n                                regex: ',|(?=\\\\])',\n                                next: 'pop' },\n                            { include: '#everything-else' }] },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.structure.list.function.erlang' }] }],\n        '#internal-function-parts': [{ token: 'text',\n                regex: '(?=\\\\()',\n                push: [{ token: 'punctuation.separator.clause-head-body.erlang',\n                        regex: '->',\n                        next: 'pop' },\n                    { token: 'punctuation.definition.parameters.begin.erlang',\n                        regex: '\\\\(',\n                        push: [{ token: 'punctuation.definition.parameters.end.erlang',\n                                regex: '\\\\)',\n                                next: 'pop' },\n                            { token: 'punctuation.separator.parameters.erlang', regex: ',' },\n                            { include: '#everything-else' }] },\n                    { token: 'punctuation.separator.guards.erlang', regex: ',|;' },\n                    { include: '#everything-else' }] },\n            { token: 'punctuation.separator.expressions.erlang',\n                regex: ',' },\n            { include: '#everything-else' }],\n        '#internal-record-body': [{ token: 'punctuation.definition.class.record.begin.erlang',\n                regex: '\\\\{',\n                push: [{ token: 'meta.structure.record.erlang',\n                        regex: '(?=\\\\})',\n                        next: 'pop' },\n                    { token: ['variable.other.field.erlang',\n                            'variable.language.omitted.field.erlang',\n                            'text',\n                            'keyword.operator.assignment.erlang'],\n                        regex: '(?:([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')|(_))(\\\\s*)(=|::)',\n                        push: [{ token: 'punctuation.separator.class.record.erlang',\n                                regex: ',|(?=\\\\})',\n                                next: 'pop' },\n                            { include: '#everything-else' }] },\n                    { token: ['variable.other.field.erlang',\n                            'text',\n                            'punctuation.separator.class.record.erlang'],\n                        regex: '([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)((?:,)?)' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.structure.record.erlang' }] }],\n        '#internal-type-specifiers': [{ token: 'punctuation.separator.value-type.erlang',\n                regex: '/',\n                push: [{ token: 'text', regex: '(?=,|:|>>)', next: 'pop' },\n                    { token: ['storage.type.erlang',\n                            'storage.modifier.signedness.erlang',\n                            'storage.modifier.endianness.erlang',\n                            'storage.modifier.unit.erlang',\n                            'punctuation.separator.type-specifiers.erlang'],\n                        regex: '(integer|float|binary|bytes|bitstring|bits)|(signed|unsigned)|(big|little|native)|(unit)|(-)' }] }],\n        '#keyword': [{ token: 'keyword.control.erlang',\n                regex: '\\\\b(?:after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\\\\b' }],\n        '#list': [{ token: 'punctuation.definition.list.begin.erlang',\n                regex: '\\\\[',\n                push: [{ token: 'punctuation.definition.list.end.erlang',\n                        regex: '\\\\]',\n                        next: 'pop' },\n                    { token: 'punctuation.separator.list.erlang',\n                        regex: '\\\\||\\\\|\\\\||,' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.structure.list.erlang' }] }],\n        '#macro-directive': [{ token: ['meta.directive.ifdef.erlang',\n                    'punctuation.section.directive.begin.erlang',\n                    'meta.directive.ifdef.erlang',\n                    'keyword.control.directive.ifdef.erlang',\n                    'meta.directive.ifdef.erlang',\n                    'punctuation.definition.parameters.begin.erlang',\n                    'meta.directive.ifdef.erlang',\n                    'entity.name.function.macro.erlang',\n                    'meta.directive.ifdef.erlang',\n                    'punctuation.definition.parameters.end.erlang',\n                    'meta.directive.ifdef.erlang',\n                    'punctuation.section.directive.end.erlang'],\n                regex: '^(\\\\s*)(-)(\\\\s*)(ifdef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' },\n            { token: ['meta.directive.ifndef.erlang',\n                    'punctuation.section.directive.begin.erlang',\n                    'meta.directive.ifndef.erlang',\n                    'keyword.control.directive.ifndef.erlang',\n                    'meta.directive.ifndef.erlang',\n                    'punctuation.definition.parameters.begin.erlang',\n                    'meta.directive.ifndef.erlang',\n                    'entity.name.function.macro.erlang',\n                    'meta.directive.ifndef.erlang',\n                    'punctuation.definition.parameters.end.erlang',\n                    'meta.directive.ifndef.erlang',\n                    'punctuation.section.directive.end.erlang'],\n                regex: '^(\\\\s*)(-)(\\\\s*)(ifndef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' },\n            { token: ['meta.directive.undef.erlang',\n                    'punctuation.section.directive.begin.erlang',\n                    'meta.directive.undef.erlang',\n                    'keyword.control.directive.undef.erlang',\n                    'meta.directive.undef.erlang',\n                    'punctuation.definition.parameters.begin.erlang',\n                    'meta.directive.undef.erlang',\n                    'entity.name.function.macro.erlang',\n                    'meta.directive.undef.erlang',\n                    'punctuation.definition.parameters.end.erlang',\n                    'meta.directive.undef.erlang',\n                    'punctuation.section.directive.end.erlang'],\n                regex: '^(\\\\s*)(-)(\\\\s*)(undef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' }],\n        '#macro-usage': [{ token: ['keyword.operator.macro.erlang',\n                    'meta.macro-usage.erlang',\n                    'entity.name.function.macro.erlang'],\n                regex: '(\\\\?\\\\??)(\\\\s*)([a-zA-Z\\\\d@_]+)' }],\n        '#module-directive': [{ token: ['meta.directive.module.erlang',\n                    'punctuation.section.directive.begin.erlang',\n                    'meta.directive.module.erlang',\n                    'keyword.control.directive.module.erlang',\n                    'meta.directive.module.erlang',\n                    'punctuation.definition.parameters.begin.erlang',\n                    'meta.directive.module.erlang',\n                    'entity.name.type.class.module.definition.erlang',\n                    'meta.directive.module.erlang',\n                    'punctuation.definition.parameters.end.erlang',\n                    'meta.directive.module.erlang',\n                    'punctuation.section.directive.end.erlang'],\n                regex: '^(\\\\s*)(-)(\\\\s*)(module)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)' }],\n        '#number': [{ token: 'text',\n                regex: '(?=\\\\d)',\n                push: [{ token: 'text', regex: '(?!\\\\d)', next: 'pop' },\n                    { token: ['constant.numeric.float.erlang',\n                            'punctuation.separator.integer-float.erlang',\n                            'constant.numeric.float.erlang',\n                            'punctuation.separator.float-exponent.erlang'],\n                        regex: '(\\\\d+)(\\\\.)(\\\\d+)((?:[eE][\\\\+\\\\-]?\\\\d+)?)' },\n                    { token: ['constant.numeric.integer.binary.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.binary.erlang'],\n                        regex: '(2)(#)([0-1]+)' },\n                    { token: ['constant.numeric.integer.base-3.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-3.erlang'],\n                        regex: '(3)(#)([0-2]+)' },\n                    { token: ['constant.numeric.integer.base-4.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-4.erlang'],\n                        regex: '(4)(#)([0-3]+)' },\n                    { token: ['constant.numeric.integer.base-5.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-5.erlang'],\n                        regex: '(5)(#)([0-4]+)' },\n                    { token: ['constant.numeric.integer.base-6.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-6.erlang'],\n                        regex: '(6)(#)([0-5]+)' },\n                    { token: ['constant.numeric.integer.base-7.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-7.erlang'],\n                        regex: '(7)(#)([0-6]+)' },\n                    { token: ['constant.numeric.integer.octal.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.octal.erlang'],\n                        regex: '(8)(#)([0-7]+)' },\n                    { token: ['constant.numeric.integer.base-9.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-9.erlang'],\n                        regex: '(9)(#)([0-8]+)' },\n                    { token: ['constant.numeric.integer.decimal.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.decimal.erlang'],\n                        regex: '(10)(#)(\\\\d+)' },\n                    { token: ['constant.numeric.integer.base-11.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-11.erlang'],\n                        regex: '(11)(#)([\\\\daA]+)' },\n                    { token: ['constant.numeric.integer.base-12.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-12.erlang'],\n                        regex: '(12)(#)([\\\\da-bA-B]+)' },\n                    { token: ['constant.numeric.integer.base-13.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-13.erlang'],\n                        regex: '(13)(#)([\\\\da-cA-C]+)' },\n                    { token: ['constant.numeric.integer.base-14.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-14.erlang'],\n                        regex: '(14)(#)([\\\\da-dA-D]+)' },\n                    { token: ['constant.numeric.integer.base-15.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-15.erlang'],\n                        regex: '(15)(#)([\\\\da-eA-E]+)' },\n                    { token: ['constant.numeric.integer.hexadecimal.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.hexadecimal.erlang'],\n                        regex: '(16)(#)([\\\\da-fA-F]+)' },\n                    { token: ['constant.numeric.integer.base-17.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-17.erlang'],\n                        regex: '(17)(#)([\\\\da-gA-G]+)' },\n                    { token: ['constant.numeric.integer.base-18.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-18.erlang'],\n                        regex: '(18)(#)([\\\\da-hA-H]+)' },\n                    { token: ['constant.numeric.integer.base-19.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-19.erlang'],\n                        regex: '(19)(#)([\\\\da-iA-I]+)' },\n                    { token: ['constant.numeric.integer.base-20.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-20.erlang'],\n                        regex: '(20)(#)([\\\\da-jA-J]+)' },\n                    { token: ['constant.numeric.integer.base-21.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-21.erlang'],\n                        regex: '(21)(#)([\\\\da-kA-K]+)' },\n                    { token: ['constant.numeric.integer.base-22.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-22.erlang'],\n                        regex: '(22)(#)([\\\\da-lA-L]+)' },\n                    { token: ['constant.numeric.integer.base-23.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-23.erlang'],\n                        regex: '(23)(#)([\\\\da-mA-M]+)' },\n                    { token: ['constant.numeric.integer.base-24.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-24.erlang'],\n                        regex: '(24)(#)([\\\\da-nA-N]+)' },\n                    { token: ['constant.numeric.integer.base-25.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-25.erlang'],\n                        regex: '(25)(#)([\\\\da-oA-O]+)' },\n                    { token: ['constant.numeric.integer.base-26.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-26.erlang'],\n                        regex: '(26)(#)([\\\\da-pA-P]+)' },\n                    { token: ['constant.numeric.integer.base-27.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-27.erlang'],\n                        regex: '(27)(#)([\\\\da-qA-Q]+)' },\n                    { token: ['constant.numeric.integer.base-28.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-28.erlang'],\n                        regex: '(28)(#)([\\\\da-rA-R]+)' },\n                    { token: ['constant.numeric.integer.base-29.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-29.erlang'],\n                        regex: '(29)(#)([\\\\da-sA-S]+)' },\n                    { token: ['constant.numeric.integer.base-30.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-30.erlang'],\n                        regex: '(30)(#)([\\\\da-tA-T]+)' },\n                    { token: ['constant.numeric.integer.base-31.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-31.erlang'],\n                        regex: '(31)(#)([\\\\da-uA-U]+)' },\n                    { token: ['constant.numeric.integer.base-32.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-32.erlang'],\n                        regex: '(32)(#)([\\\\da-vA-V]+)' },\n                    { token: ['constant.numeric.integer.base-33.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-33.erlang'],\n                        regex: '(33)(#)([\\\\da-wA-W]+)' },\n                    { token: ['constant.numeric.integer.base-34.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-34.erlang'],\n                        regex: '(34)(#)([\\\\da-xA-X]+)' },\n                    { token: ['constant.numeric.integer.base-35.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-35.erlang'],\n                        regex: '(35)(#)([\\\\da-yA-Y]+)' },\n                    { token: ['constant.numeric.integer.base-36.erlang',\n                            'punctuation.separator.base-integer.erlang',\n                            'constant.numeric.integer.base-36.erlang'],\n                        regex: '(36)(#)([\\\\da-zA-Z]+)' },\n                    { token: 'invalid.illegal.integer.erlang',\n                        regex: '\\\\d+#[\\\\da-zA-Z]+' },\n                    { token: 'constant.numeric.integer.decimal.erlang',\n                        regex: '\\\\d+' }] }],\n        '#parenthesized-expression': [{ token: 'punctuation.section.expression.begin.erlang',\n                regex: '\\\\(',\n                push: [{ token: 'punctuation.section.expression.end.erlang',\n                        regex: '\\\\)',\n                        next: 'pop' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.expression.parenthesized' }] }],\n        '#record-directive': [{ token: ['meta.directive.record.erlang',\n                    'punctuation.section.directive.begin.erlang',\n                    'meta.directive.record.erlang',\n                    'keyword.control.directive.import.erlang',\n                    'meta.directive.record.erlang',\n                    'punctuation.definition.parameters.begin.erlang',\n                    'meta.directive.record.erlang',\n                    'entity.name.type.class.record.definition.erlang',\n                    'meta.directive.record.erlang',\n                    'punctuation.separator.parameters.erlang'],\n                regex: '^(\\\\s*)(-)(\\\\s*)(record)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(,)',\n                push: [{ token: ['punctuation.definition.class.record.end.erlang',\n                            'meta.directive.record.erlang',\n                            'punctuation.definition.parameters.end.erlang',\n                            'meta.directive.record.erlang',\n                            'punctuation.section.directive.end.erlang'],\n                        regex: '(\\\\})(\\\\s*)(\\\\))(\\\\s*)(\\\\.)',\n                        next: 'pop' },\n                    { include: '#internal-record-body' },\n                    { defaultToken: 'meta.directive.record.erlang' }] }],\n        '#record-usage': [{ token: ['keyword.operator.record.erlang',\n                    'meta.record-usage.erlang',\n                    'entity.name.type.class.record.erlang',\n                    'meta.record-usage.erlang',\n                    'punctuation.separator.record-field.erlang',\n                    'meta.record-usage.erlang',\n                    'variable.other.field.erlang'],\n                regex: '(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')(\\\\s*)(\\\\.)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')' },\n            { token: ['keyword.operator.record.erlang',\n                    'meta.record-usage.erlang',\n                    'entity.name.type.class.record.erlang'],\n                regex: '(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|\\'[^\\']*\\')',\n                push: [{ token: 'punctuation.definition.class.record.end.erlang',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { include: '#internal-record-body' },\n                    { defaultToken: 'meta.record-usage.erlang' }] }],\n        '#string': [{ token: 'punctuation.definition.string.begin.erlang',\n                regex: '\"',\n                push: [{ token: 'punctuation.definition.string.end.erlang',\n                        regex: '\"',\n                        next: 'pop' },\n                    { token: ['punctuation.definition.escape.erlang',\n                            'constant.character.escape.erlang',\n                            'punctuation.definition.escape.erlang',\n                            'constant.character.escape.erlang',\n                            'constant.character.escape.erlang'],\n                        regex: '(\\\\\\\\)(?:([bdefnrstv\\\\\\\\\\'\"])|(\\\\^)([@-_])|([0-7]{1,3}))' },\n                    { token: 'invalid.illegal.string.erlang', regex: '\\\\\\\\\\\\^?.?' },\n                    { token: ['punctuation.definition.placeholder.erlang',\n                            'punctuation.separator.placeholder-parts.erlang',\n                            'constant.other.placeholder.erlang',\n                            'punctuation.separator.placeholder-parts.erlang',\n                            'punctuation.separator.placeholder-parts.erlang',\n                            'constant.other.placeholder.erlang',\n                            'punctuation.separator.placeholder-parts.erlang',\n                            'punctuation.separator.placeholder-parts.erlang',\n                            'punctuation.separator.placeholder-parts.erlang',\n                            'constant.other.placeholder.erlang',\n                            'constant.other.placeholder.erlang'],\n                        regex: '(~)(?:((?:\\\\-)?)(\\\\d+)|(\\\\*))?(?:(\\\\.)(?:(\\\\d+)|(\\\\*)))?(?:(\\\\.)(?:(\\\\*)|(.)))?([~cfegswpWPBX#bx\\\\+ni])' },\n                    { token: ['punctuation.definition.placeholder.erlang',\n                            'punctuation.separator.placeholder-parts.erlang',\n                            'constant.other.placeholder.erlang',\n                            'constant.other.placeholder.erlang'],\n                        regex: '(~)((?:\\\\*)?)((?:\\\\d+)?)([~du\\\\-#fsacl])' },\n                    { token: 'invalid.illegal.string.erlang', regex: '~.?' },\n                    { defaultToken: 'string.quoted.double.erlang' }] }],\n        '#symbolic-operator': [{ token: 'keyword.operator.symbolic.erlang',\n                regex: '\\\\+\\\\+|\\\\+|--|-|\\\\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!|::' }],\n        '#textual-operator': [{ token: 'keyword.operator.textual.erlang',\n                regex: '\\\\b(?:andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\\\\b' }],\n        '#tuple': [{ token: 'punctuation.definition.tuple.begin.erlang',\n                regex: '\\\\{',\n                push: [{ token: 'punctuation.definition.tuple.end.erlang',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { token: 'punctuation.separator.tuple.erlang', regex: ',' },\n                    { include: '#everything-else' },\n                    { defaultToken: 'meta.structure.tuple.erlang' }] }],\n        '#variable': [{ token: ['variable.other.erlang', 'variable.language.omitted.erlang'],\n                regex: '(_[a-zA-Z\\\\d@_]+|[A-Z][a-zA-Z\\\\d@_]*)|(_)' }] };\n    this.normalizeRules();\n};\nErlangHighlightRules.metaData = { comment: 'The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace).  Also, the function/module/record/macro names must be given unquoted.  -- desp',\n    fileTypes: ['erl', 'hrl'],\n    keyEquivalent: '^~E',\n    name: 'Erlang',\n    scopeName: 'source.erlang' };\noop.inherits(ErlangHighlightRules, TextHighlightRules);\nexports.ErlangHighlightRules = ErlangHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/erlang\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/erlang_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ErlangHighlightRules = require(\"./erlang_highlight_rules\").ErlangHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = ErlangHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"%\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/erlang\";\n    this.snippetFileId = \"ace/snippets/erlang\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/erlang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-forth.js",
    "content": "ace.define(\"ace/mode/forth_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from https://raw.github.com/vze26m98/Forth.tmbundle/master/Syntaxes/Forth.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ForthHighlightRules = function () {\n    this.$rules = { start: [{ include: '#forth' }],\n        '#comment': [{ token: 'comment.line.double-dash.forth',\n                regex: '(?:^|\\\\s)--\\\\s.*$',\n                comment: 'line comments for iForth' },\n            { token: 'comment.line.backslash.forth',\n                regex: '(?:^|\\\\s)\\\\\\\\[\\\\s\\\\S]*$',\n                comment: 'ANSI line comment' },\n            { token: 'comment.line.backslash-g.forth',\n                regex: '(?:^|\\\\s)\\\\\\\\[Gg] .*$',\n                comment: 'gForth line comment' },\n            { token: 'comment.block.forth',\n                regex: '(?:^|\\\\s)\\\\(\\\\*(?=\\\\s|$)',\n                push: [{ token: 'comment.block.forth',\n                        regex: '(?:^|\\\\s)\\\\*\\\\)(?=\\\\s|$)',\n                        next: 'pop' },\n                    { defaultToken: 'comment.block.forth' }],\n                comment: 'multiline comments for iForth' },\n            { token: 'comment.block.documentation.forth',\n                regex: '\\\\bDOC\\\\b',\n                caseInsensitive: true,\n                push: [{ token: 'comment.block.documentation.forth',\n                        regex: '\\\\bENDDOC\\\\b',\n                        caseInsensitive: true,\n                        next: 'pop' },\n                    { defaultToken: 'comment.block.documentation.forth' }],\n                comment: 'documentation comments for iForth' },\n            { token: 'comment.line.parentheses.forth',\n                regex: '(?:^|\\\\s)\\\\.?\\\\( [^)]*\\\\)',\n                comment: 'ANSI line comment' }],\n        '#constant': [{ token: 'constant.language.forth',\n                regex: '(?:^|\\\\s)(?:TRUE|FALSE|BL|PI|CELL|C/L|R/O|W/O|R/W)(?=\\\\s|$)',\n                caseInsensitive: true },\n            { token: 'constant.numeric.forth',\n                regex: '(?:^|\\\\s)[$#%]?[-+]?[0-9]+(?:\\\\.[0-9]*e-?[0-9]+|\\\\.?[0-9a-fA-F]*)(?=\\\\s|$)' },\n            { token: 'constant.character.forth',\n                regex: '(?:^|\\\\s)(?:[&^]\\\\S|(?:\"|\\')\\\\S(?:\"|\\'))(?=\\\\s|$)' }],\n        '#forth': [{ include: '#constant' },\n            { include: '#comment' },\n            { include: '#string' },\n            { include: '#word' },\n            { include: '#variable' },\n            { include: '#storage' },\n            { include: '#word-def' }],\n        '#storage': [{ token: 'storage.type.forth',\n                regex: '(?:^|\\\\s)(?:2CONSTANT|2VARIABLE|ALIAS|CONSTANT|CREATE-INTERPRET/COMPILE[:]?|CREATE|DEFER|FCONSTANT|FIELD|FVARIABLE|USER|VALUE|VARIABLE|VOCABULARY)(?=\\\\s|$)',\n                caseInsensitive: true }],\n        '#string': [{ token: 'string.quoted.double.forth',\n                regex: '(ABORT\" |BREAK\" |\\\\.\" |C\" |0\"|S\\\\\\\\?\" )([^\"]+\")',\n                caseInsensitive: true },\n            { token: 'string.unquoted.forth',\n                regex: '(?:INCLUDE|NEEDS|REQUIRE|USE)[ ]\\\\S+(?=\\\\s|$)',\n                caseInsensitive: true }],\n        '#variable': [{ token: 'variable.language.forth',\n                regex: '\\\\b(?:I|J)\\\\b',\n                caseInsensitive: true }],\n        '#word': [{ token: 'keyword.control.immediate.forth',\n                regex: '(?:^|\\\\s)\\\\[(?:\\\\?DO|\\\\+LOOP|AGAIN|BEGIN|DEFINED|DO|ELSE|ENDIF|FOR|IF|IFDEF|IFUNDEF|LOOP|NEXT|REPEAT|THEN|UNTIL|WHILE)\\\\](?=\\\\s|$)',\n                caseInsensitive: true },\n            { token: 'keyword.other.immediate.forth',\n                regex: '(?:^|\\\\s)(?:COMPILE-ONLY|IMMEDIATE|IS|RESTRICT|TO|WHAT\\'S|])(?=\\\\s|$)',\n                caseInsensitive: true },\n            { token: 'keyword.control.compile-only.forth',\n                regex: '(?:^|\\\\s)(?:-DO|\\\\-LOOP|\\\\?DO|\\\\?LEAVE|\\\\+DO|\\\\+LOOP|ABORT\\\\\"|AGAIN|AHEAD|BEGIN|CASE|DO|ELSE|ENDCASE|ENDIF|ENDOF|ENDTRY\\\\-IFERROR|ENDTRY|FOR|IF|IFERROR|LEAVE|LOOP|NEXT|RECOVER|REPEAT|RESTORE|THEN|TRY|U\\\\-DO|U\\\\+DO|UNTIL|WHILE)(?=\\\\s|$)',\n                caseInsensitive: true },\n            { token: 'keyword.other.compile-only.forth',\n                regex: '(?:^|\\\\s)(?:\\\\?DUP-0=-IF|\\\\?DUP-IF|\\\\)|\\\\[|\\\\[\\'\\\\]|\\\\[CHAR\\\\]|\\\\[COMPILE\\\\]|\\\\[IS\\\\]|\\\\[TO\\\\]|<COMPILATION|<INTERPRETATION|ASSERT\\\\(|ASSERT0\\\\(|ASSERT1\\\\(|ASSERT2\\\\(|ASSERT3\\\\(|COMPILATION>|DEFERS|DOES>|INTERPRETATION>|OF|POSTPONE)(?=\\\\s|$)',\n                caseInsensitive: true },\n            { token: 'keyword.other.non-immediate.forth',\n                regex: '(?:^|\\\\s)(?:\\'|<IS>|<TO>|CHAR|END-STRUCT|INCLUDE[D]?|LOAD|NEEDS|REQUIRE[D]?|REVISION|SEE|STRUCT|THRU|USE)(?=\\\\s|$)',\n                caseInsensitive: true },\n            { token: 'keyword.other.warning.forth',\n                regex: '(?:^|\\\\s)(?:~~|BREAK:|BREAK\"|DBG)(?=\\\\s|$)',\n                caseInsensitive: true }],\n        '#word-def': [{ token: ['keyword.other.compile-only.forth',\n                    'keyword.other.compile-only.forth',\n                    'meta.block.forth',\n                    'entity.name.function.forth'],\n                regex: '(:NONAME)|(^:|\\\\s:)(\\\\s)(\\\\S+)(?=\\\\s|$)',\n                caseInsensitive: true,\n                push: [{ token: 'keyword.other.compile-only.forth',\n                        regex: ';(?:CODE)?',\n                        caseInsensitive: true,\n                        next: 'pop' },\n                    { include: '#constant' },\n                    { include: '#comment' },\n                    { include: '#string' },\n                    { include: '#word' },\n                    { include: '#variable' },\n                    { include: '#storage' },\n                    { defaultToken: 'meta.block.forth' }] }] };\n    this.normalizeRules();\n};\nForthHighlightRules.metaData = { fileTypes: ['frt', 'fs', 'ldr', 'fth', '4th'],\n    foldingStartMarker: '/\\\\*\\\\*|\\\\{\\\\s*$',\n    foldingStopMarker: '\\\\*\\\\*/|^\\\\s*\\\\}',\n    keyEquivalent: '^~F',\n    name: 'Forth',\n    scopeName: 'source.forth' };\noop.inherits(ForthHighlightRules, TextHighlightRules);\nexports.ForthHighlightRules = ForthHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/forth\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/forth_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ForthHighlightRules = require(\"./forth_highlight_rules\").ForthHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = ForthHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/forth\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/forth\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-fortran.js",
    "content": "ace.define(\"ace/mode/fortran_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* Derived from Python highlighing rules */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar FortranHighlightRules = function () {\n    var keywords = (\"call|case|contains|continue|cycle|do|else|elseif|end|enddo|endif|function|\" +\n        \"if|implicit|in|include|inout|intent|module|none|only|out|print|program|return|\" +\n        \"select|status|stop|subroutine|\" +\n        \"return|then|use|while|write|\" +\n        \"CALL|CASE|CONTAINS|CONTINUE|CYCLE|DO|ELSE|ELSEIF|END|ENDDO|ENDIF|FUNCTION|\" +\n        \"IF|IMPLICIT|IN|INCLUDE|INOUT|INTENT|MODULE|NONE|ONLY|OUT|PRINT|PROGRAM|RETURN|\" +\n        \"SELECT|STATUS|STOP|SUBROUTINE|\" +\n        \"RETURN|THEN|USE|WHILE|WRITE\");\n    var keywordOperators = (\"and|or|not|eq|ne|gt|ge|lt|le|\" +\n        \"AND|OR|NOT|EQ|NE|GT|GE|LT|LE\");\n    var builtinConstants = (\"true|false|TRUE|FALSE\");\n    var builtinFunctions = (\"abs|achar|acos|acosh|adjustl|adjustr|aimag|aint|all|allocate|\" +\n        \"anint|any|asin|asinh|associated|atan|atan2|atanh|\" +\n        \"bessel_j0|bessel_j1|bessel_jn|bessel_y0|bessel_y1|bessel_yn|\" +\n        \"bge|bgt|bit_size|ble|blt|btest|ceiling|char|cmplx|conjg|cos|cosh|\" +\n        \"count|cpu_time|cshift|date_and_time|dble|deallocate|digits|dim|dot_product|dprod|\" +\n        \"dshiftl|dshiftr|dsqrt|eoshift|epsilon|erf|erfc|erfc_scaled|exp|float|floor|\" +\n        \"format|fraction|gamma|input|len|lge|lgt|lle|llt|log|log10|maskl|maskr|matmul|max|maxloc|maxval|\" +\n        \"merge|min|minloc|minval|mod|modulo|nint|not|norm2|null|nullify|pack|parity|popcnt|poppar|\" +\n        \"precision|present|product|radix|random_number|random_seed|range|repeat|reshape|round|\" +\n        \"rrspacing|same_type_as|scale|scan|selected_char_kind|selected_int_kind|selected_real_kind|\" +\n        \"set_exponent|shape|shifta|shiftl|shiftr|sign|sin|sinh|size|sngl|spacing|spread|\" +\n        \"sqrt|sum|system_clock|tan|tanh|tiny|trailz|transfer|transpose|trim|ubound|unpack|verify|\" +\n        \"ABS|ACHAR|ACOS|ACOSH|ADJUSTL|ADJUSTR|AIMAG|AINT|ALL|ALLOCATE|\" +\n        \"ANINT|ANY|ASIN|ASINH|ASSOCIATED|ATAN|ATAN2|ATANH|\" +\n        \"BESSEL_J0|BESSEL_J1|BESSEL_JN|BESSEL_Y0|BESSEL_Y1|BESSEL_YN|\" +\n        \"BGE|BGT|BIT_SIZE|BLE|BLT|BTEST|CEILING|CHAR|CMPLX|CONJG|COS|COSH|\" +\n        \"COUNT|CPU_TIME|CSHIFT|DATE_AND_TIME|DBLE|DEALLOCATE|DIGITS|DIM|DOT_PRODUCT|DPROD|\" +\n        \"DSHIFTL|DSHIFTR|DSQRT|EOSHIFT|EPSILON|ERF|ERFC|ERFC_SCALED|EXP|FLOAT|FLOOR|\" +\n        \"FORMAT|FRACTION|GAMMA|INPUT|LEN|LGE|LGT|LLE|LLT|LOG|LOG10|MASKL|MASKR|MATMUL|MAX|MAXLOC|MAXVAL|\" +\n        \"MERGE|MIN|MINLOC|MINVAL|MOD|MODULO|NINT|NOT|NORM2|NULL|NULLIFY|PACK|PARITY|POPCNT|POPPAR|\" +\n        \"PRECISION|PRESENT|PRODUCT|RADIX|RANDOM_NUMBER|RANDOM_SEED|RANGE|REPEAT|RESHAPE|ROUND|\" +\n        \"RRSPACING|SAME_TYPE_AS|SCALE|SCAN|SELECTED_CHAR_KIND|SELECTED_INT_KIND|SELECTED_REAL_KIND|\" +\n        \"SET_EXPONENT|SHAPE|SHIFTA|SHIFTL|SHIFTR|SIGN|SIN|SINH|SIZE|SNGL|SPACING|SPREAD|\" +\n        \"SQRT|SUM|SYSTEM_CLOCK|TAN|TANH|TINY|TRAILZ|TRANSFER|TRANSPOSE|TRIM|UBOUND|UNPACK|VERIFY\");\n    var storageType = (\"logical|character|integer|real|type|\" +\n        \"LOGICAL|CHARACTER|INTEGER|REAL|TYPE\");\n    var storageModifiers = (\"allocatable|dimension|intent|parameter|pointer|target|private|public|\" +\n        \"ALLOCATABLE|DIMENSION|INTENT|PARAMETER|POINTER|TARGET|PRIVATE|PUBLIC\");\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords,\n        \"keyword.operator\": keywordOperators,\n        \"storage.type\": storageType,\n        \"storage.modifier\": storageModifiers\n    }, \"identifier\");\n    var strPre = \"(?:r|u|ur|R|U|UR|Ur|uR)?\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"!.*$\"\n            }, {\n                token: \"string\",\n                regex: strPre + '\"{3}',\n                next: \"qqstring3\"\n            }, {\n                token: \"string\",\n                regex: strPre + '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: strPre + \"'{3}\",\n                next: \"qstring3\"\n            }, {\n                token: \"string\",\n                regex: strPre + \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"[lL]\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:include|import|define|undef|INCLUDE|IMPORT|DEFINE|UNDEF)\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:endif|ifdef|else|elseif|ifndef|ENDIF|IFDEF|ELSE|ELSEIF|IFNDEF)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }],\n        \"qqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }]\n    };\n};\noop.inherits(FortranHighlightRules, TextHighlightRules);\nexports.FortranHighlightRules = FortranHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/fortran\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fortran_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/range\"], function(require, exports, module){/* Derived from Python rules */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FortranHighlightRules = require(\"./fortran_highlight_rules\").FortranHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n    this.HighlightRules = FortranHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"!\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    var outdents = {\n        \"return\": 1,\n        \"break\": 1,\n        \"continue\": 1,\n        \"RETURN\": 1,\n        \"BREAK\": 1,\n        \"CONTINUE\": 1\n    };\n    this.checkOutdent = function (state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n        if (!last)\n            return false;\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length - tab.length, row, indent.length));\n    };\n    this.$id = \"ace/mode/fortran\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/fortran\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-fsharp.js",
    "content": "ace.define(\"ace/mode/fsharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar FSharpHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable\": \"this\",\n        \"keyword\": 'abstract|assert|base|begin|class|default|delegate|done|downcast|downto|elif\\\n|else|exception|extern|false|finally|function|global|inherit|inline|interface|internal|lazy|match\\\n|member|module|mutable|namespace|open|or|override|private|public|rec|return|return!|select|static\\\n|struct|then|to|true|try|typeof|upcast|use|use!|val|void|when|while|with|yield|yield!|__SOURCE_DIRECTORY__\\\n|as|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue\\\n|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall\\\n|trait|virtual|volatile|and|do|end|for|fun|if|in|let|let!|new|not|null|of|endif',\n        \"constant\": \"true|false\"\n    }, \"identifier\");\n    var floatNumber = \"(?:(?:(?:(?:(?:(?:\\\\d+)?(?:\\\\.\\\\d+))|(?:(?:\\\\d+)\\\\.))|(?:\\\\d+))(?:[eE][+-]?\\\\d+))|(?:(?:(?:\\\\d+)?(?:\\\\.\\\\d+))|(?:(?:\\\\d+)\\\\.)))\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"variable.classes\",\n                regex: '\\\\[\\\\<[.]*\\\\>\\\\]'\n            },\n            {\n                token: \"comment\",\n                regex: '//.*$'\n            },\n            {\n                token: \"comment.start\",\n                regex: /\\(\\*(?!\\))/,\n                push: \"blockComment\"\n            },\n            {\n                token: \"string\",\n                regex: \"'.'\"\n            },\n            {\n                token: \"string\",\n                regex: '\"\"\"',\n                next: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\./,\n                        next: \"qqstring\"\n                    }, {\n                        token: \"string\",\n                        regex: '\"\"\"',\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            },\n            {\n                token: \"string\",\n                regex: '\"',\n                next: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\./,\n                        next: \"qqstring\"\n                    }, {\n                        token: \"string\",\n                        regex: '\"',\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            },\n            {\n                token: [\"verbatim.string\", \"string\"],\n                regex: '(@?)(\")',\n                stateName: \"qqstring\",\n                next: [{\n                        token: \"constant.language.escape\",\n                        regex: '\"\"'\n                    }, {\n                        token: \"string\",\n                        regex: '\"',\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            },\n            {\n                token: \"constant.float\",\n                regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            },\n            {\n                token: \"constant.float\",\n                regex: floatNumber\n            },\n            {\n                token: \"constant.integer\",\n                regex: \"(?:(?:(?:[1-9]\\\\d*)|(?:0))|(?:0[oO]?[0-7]+)|(?:0[xX][\\\\dA-Fa-f]+)|(?:0[bB][01]+))\\\\b\"\n            },\n            {\n                token: [\"keyword.type\", \"variable\"],\n                regex: \"(type\\\\s)([a-zA-Z0-9_$\\-]*\\\\b)\"\n            },\n            {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token: \"keyword.operator\",\n                regex: \"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=|\\\\(\\\\*\\\\)\"\n            },\n            {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            },\n            {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }\n        ],\n        blockComment: [{\n                regex: /\\(\\*\\)/,\n                token: \"comment\"\n            }, {\n                regex: /\\(\\*(?!\\))/,\n                token: \"comment.start\",\n                push: \"blockComment\"\n            }, {\n                regex: /\\*\\)/,\n                token: \"comment.end\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(FSharpHighlightRules, TextHighlightRules);\nexports.FSharpHighlightRules = FSharpHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/fsharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fsharp_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FSharpHighlightRules = require(\"./fsharp_highlight_rules\").FSharpHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    TextMode.call(this);\n    this.HighlightRules = FSharpHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"(*\", end: \"*)\", nestable: true };\n    this.$id = \"ace/mode/fsharp\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/fsharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-fsl.js",
    "content": "ace.define(\"ace/mode/fsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar FSLHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                token: \"punctuation.definition.comment.mn\",\n                regex: /\\/\\*/,\n                push: [{\n                        token: \"punctuation.definition.comment.mn\",\n                        regex: /\\*\\//,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.block.fsl\"\n                    }]\n            }, {\n                token: \"comment.line.fsl\",\n                regex: /\\/\\//,\n                push: [{\n                        token: \"comment.line.fsl\",\n                        regex: /$/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.line.fsl\"\n                    }]\n            }, {\n                token: \"entity.name.function\",\n                regex: /\\${/,\n                push: [{\n                        token: \"entity.name.function\",\n                        regex: /}/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"keyword.other\"\n                    }],\n                comment: \"js outcalls\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /[0-9]*\\.[0-9]*\\.[0-9]*/,\n                comment: \"semver\"\n            }, {\n                token: \"constant.language.fslLanguage\",\n                regex: \"(?:\"\n                    + \"graph_layout|machine_name|machine_author|machine_license|machine_comment|machine_language\"\n                    + \"|machine_version|machine_reference|npm_name|graph_layout|on_init|on_halt|on_end|on_terminate|on_finalize|on_transition\"\n                    + \"|on_action|on_stochastic_action|on_legal|on_main|on_forced|on_validation|on_validation_failure|on_transition_refused|on_forced_transition_refused\"\n                    + \"|on_action_refused|on_enter|on_exit|start_states|end_states|terminal_states|final_states|fsl_version\"\n                    + \")\\\\s*:\"\n            }, {\n                token: \"keyword.control.transition.fslArrow\",\n                regex: /<->|<-|->|<=>|=>|<=|<~>|~>|<~|<-=>|<=->|<-~>|<~->|<=~>|<~=>/\n            }, {\n                token: \"constant.numeric.fslProbability\",\n                regex: /[0-9]+%/,\n                comment: \"edge probability annotation\"\n            }, {\n                token: \"constant.character.fslAction\",\n                regex: /\\'[^']*\\'/,\n                comment: \"action annotation\"\n            }, {\n                token: \"string.quoted.double.fslLabel.doublequoted\",\n                regex: /\\\"[^\"]*\\\"/,\n                comment: \"fsl label annotation\"\n            }, {\n                token: \"entity.name.tag.fslLabel.atom\",\n                regex: /[a-zA-Z0-9_.+&()#@!?,]/,\n                comment: \"fsl label annotation\"\n            }]\n    };\n    this.normalizeRules();\n};\nFSLHighlightRules.metaData = {\n    fileTypes: [\"fsl\", \"fsl_state\"],\n    name: \"FSL\",\n    scopeName: \"source.fsl\"\n};\noop.inherits(FSLHighlightRules, TextHighlightRules);\nexports.FSLHighlightRules = FSLHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/fsl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/fsl_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FSLHighlightRules = require(\"./fsl_highlight_rules\").FSLHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = FSLHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/fsl\";\n    this.snippetFileId = \"ace/snippets/fsl\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/fsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-ftl.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/ftl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar FtlLangHighlightRules = function () {\n    var stringBuiltIns = \"\\\\?|substring|cap_first|uncap_first|capitalize|chop_linebreak|date|time|datetime|\"\n        + \"ends_with|html|groups|index_of|j_string|js_string|json_string|last_index_of|length|lower_case|\"\n        + \"left_pad|right_pad|contains|matches|number|replace|rtf|url|split|starts_with|string|trim|\"\n        + \"upper_case|word_list|xhtml|xml\";\n    var numberBuiltIns = \"c|round|floor|ceiling\";\n    var dateBuiltIns = \"iso_[a-z_]+\";\n    var seqBuiltIns = \"first|last|seq_contains|seq_index_of|seq_last_index_of|reverse|size|sort|sort_by|chunk\";\n    var hashBuiltIns = \"keys|values\";\n    var xmlBuiltIns = \"children|parent|root|ancestors|node_name|node_type|node_namespace\";\n    var expertBuiltIns = \"byte|double|float|int|long|short|number_to_date|number_to_time|number_to_datetime|\"\n        + \"eval|has_content|interpret|is_[a-z_]+|namespacenew\";\n    var allBuiltIns = stringBuiltIns + numberBuiltIns + dateBuiltIns + seqBuiltIns + hashBuiltIns\n        + xmlBuiltIns + expertBuiltIns;\n    var deprecatedBuiltIns = \"default|exists|if_exists|web_safe\";\n    var variables = \"data_model|error|globals|lang|locale|locals|main|namespace|node|current_node|\"\n        + \"now|output_encoding|template_name|url_escaping_charset|vars|version\";\n    var operators = \"gt|gte|lt|lte|as|in|using\";\n    var reserved = \"true|false\";\n    var attributes = \"encoding|parse|locale|number_format|date_format|time_format|datetime_format|time_zone|\"\n        + \"url_escaping_charset|classic_compatible|strip_whitespace|strip_text|strict_syntax|ns_prefixes|\"\n        + \"attributes\";\n    this.$rules = {\n        \"start\": [{\n                token: \"constant.character.entity\",\n                regex: /&[^;]+;/\n            }, {\n                token: \"support.function\",\n                regex: \"\\\\?(\" + allBuiltIns + \")\"\n            }, {\n                token: \"support.function.deprecated\",\n                regex: \"\\\\?(\" + deprecatedBuiltIns + \")\"\n            }, {\n                token: \"language.variable\",\n                regex: \"\\\\.(?:\" + variables + \")\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\b(\" + reserved + \")\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\b(?:\" + operators + \")\\\\b\"\n            }, {\n                token: \"entity.other.attribute-name\",\n                regex: attributes\n            }, {\n                token: \"string\",\n                regex: /['\"]/,\n                next: \"qstring\"\n            }, {\n                token: function (value) {\n                    if (value.match(\"^[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?$\")) {\n                        return \"constant.numeric\";\n                    }\n                    else {\n                        return \"variable\";\n                    }\n                },\n                regex: /[\\w.+\\-]+/\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\.|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }],\n        \"qstring\": [{\n                token: \"constant.character.escape\",\n                regex: '\\\\\\\\[nrtvef\\\\\\\\\"$]'\n            }, {\n                token: \"string\",\n                regex: /['\"]/,\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }]\n    };\n};\noop.inherits(FtlLangHighlightRules, TextHighlightRules);\nvar FtlHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var directives = \"assign|attempt|break|case|compress|default|elseif|else|escape|fallback|function|flush|\"\n        + \"ftl|global|if|import|include|list|local|lt|macro|nested|noescape|noparse|nt|recover|recurse|return|rt|\"\n        + \"setting|stop|switch|t|visit\";\n    var startRules = [\n        {\n            token: \"comment\",\n            regex: \"<#--\",\n            next: \"ftl-dcomment\"\n        }, {\n            token: \"string.interpolated\",\n            regex: \"\\\\${\",\n            push: \"ftl-start\"\n        }, {\n            token: \"keyword.function\",\n            regex: \"</?#(\" + directives + \")\",\n            push: \"ftl-start\"\n        }, {\n            token: \"keyword.other\",\n            regex: \"</?@[a-zA-Z\\\\.]+\",\n            push: \"ftl-start\"\n        }\n    ];\n    var endRules = [\n        {\n            token: \"keyword\",\n            regex: \"/?>\",\n            next: \"pop\"\n        }, {\n            token: \"string.interpolated\",\n            regex: \"}\",\n            next: \"pop\"\n        }\n    ];\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n    this.embedRules(FtlLangHighlightRules, \"ftl-\", endRules, [\"start\"]);\n    this.addRules({\n        \"ftl-dcomment\": [{\n                token: \"comment\",\n                regex: \"-->\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment\"\n            }]\n    });\n    this.normalizeRules();\n};\noop.inherits(FtlHighlightRules, HtmlHighlightRules);\nexports.FtlHighlightRules = FtlHighlightRules;\n\n});\n\nace.define(\"ace/mode/ftl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ftl_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FtlHighlightRules = require(\"./ftl_highlight_rules\").FtlHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = FtlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/ftl\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/ftl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-gcode.js",
    "content": "ace.define(\"ace/mode/gcode_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar GcodeHighlightRules = function () {\n    var keywords = (\"IF|DO|WHILE|ENDWHILE|CALL|ENDIF|SUB|ENDSUB|GOTO|REPEAT|ENDREPEAT|CALL\");\n    var builtinConstants = (\"PI\");\n    var builtinFunctions = (\"ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN\");\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"\\\\(.*\\\\)\"\n            }, {\n                token: \"comment\",\n                regex: \"([N])([0-9]+)\"\n            }, {\n                token: \"string\",\n                regex: \"([G])([0-9]+\\\\.?[0-9]?)\"\n            }, {\n                token: \"string\",\n                regex: \"([M])([0-9]+\\\\.?[0-9]?)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"([-+]?([0-9]*\\\\.?[0-9]+\\\\.?))|(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\"\n            }, {\n                token: keywordMapper,\n                regex: \"[A-Z]\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"EQ|LT|GT|NE|GE|LE|OR|XOR\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }]\n    };\n};\noop.inherits(GcodeHighlightRules, TextHighlightRules);\nexports.GcodeHighlightRules = GcodeHighlightRules;\n\n});\n\nace.define(\"ace/mode/gcode\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gcode_highlight_rules\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GcodeHighlightRules = require(\"./gcode_highlight_rules\").GcodeHighlightRules;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n    this.HighlightRules = GcodeHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/gcode\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/gcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-gherkin.js",
    "content": "ace.define(\"ace/mode/gherkin_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\nvar GherkinHighlightRules = function () {\n    var languages = [{\n            name: \"en\",\n            labels: \"Feature|Background|Scenario(?: Outline)?|Examples\",\n            keywords: \"Given|When|Then|And|But\"\n        } \n    ];\n    var labels = languages.map(function (l) {\n        return l.labels;\n    }).join(\"|\");\n    var keywords = languages.map(function (l) {\n        return l.keywords;\n    }).join(\"|\");\n    this.$rules = {\n        start: [{\n                token: \"constant.numeric\",\n                regex: \"(?:(?:[1-9]\\\\d*)|(?:0))\"\n            }, {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + labels + \"):|(?:\" + keywords + \")\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\*\"\n            }, {\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"qqstring3\"\n            }, {\n                token: \"string\",\n                regex: '\"',\n                next: \"qqstring\"\n            }, {\n                token: \"text\",\n                regex: \"^\\\\s*(?=@[\\\\w])\",\n                next: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    }, {\n                        token: \"variable.parameter\",\n                        regex: \"@[\\\\w]+\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"start\"\n                    }]\n            }, {\n                token: \"comment\",\n                regex: \"<[^>]+>\"\n            }, {\n                token: \"comment\",\n                regex: \"\\\\|(?=.)\",\n                next: \"table-item\"\n            }, {\n                token: \"comment\",\n                regex: \"\\\\|$\",\n                next: \"start\"\n            }],\n        \"qqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"table-item\": [{\n                token: \"comment\",\n                regex: /$/,\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: /\\|/\n            }, {\n                token: \"string\",\n                regex: /\\\\./\n            }, {\n                defaultToken: \"string\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(GherkinHighlightRules, TextHighlightRules);\nexports.GherkinHighlightRules = GherkinHighlightRules;\n\n});\n\nace.define(\"ace/mode/gherkin\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gherkin_highlight_rules\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GherkinHighlightRules = require(\"./gherkin_highlight_rules\").GherkinHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = GherkinHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/gherkin\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var space2 = \"  \";\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (line.match(\"[ ]*\\\\|\")) {\n            indent += \"| \";\n        }\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            if (line.match(\"Scenario:|Feature:|Scenario Outline:|Background:\")) {\n                indent += space2;\n            }\n            else if (line.match(\"(Given|Then).+(:)$|Examples:\")) {\n                indent += space2;\n            }\n            else if (line.match(\"\\\\*.+\")) {\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/gherkin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-gitignore.js",
    "content": "ace.define(\"ace/mode/gitignore_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar GitignoreHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: /^\\s*#.*$/\n            }, {\n                token: \"keyword\",\n                regex: /^\\s*!.*$/\n            }\n        ]\n    };\n    this.normalizeRules();\n};\nGitignoreHighlightRules.metaData = {\n    fileTypes: ['gitignore'],\n    name: 'Gitignore'\n};\noop.inherits(GitignoreHighlightRules, TextHighlightRules);\nexports.GitignoreHighlightRules = GitignoreHighlightRules;\n\n});\n\nace.define(\"ace/mode/gitignore\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gitignore_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GitignoreHighlightRules = require(\"./gitignore_highlight_rules\").GitignoreHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = GitignoreHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/gitignore\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/gitignore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-glsl.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\nvar c_cppHighlightRules = function () {\n    var keywordControls = (\"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\");\n    var storageType = (\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|int8_t|int16_t|int32_t|int64_t|long|short|signed|size_t|struct|typedef|uint8_t|uint16_t|uint32_t|uint64_t|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\");\n    var storageModifiers = (\"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\");\n    var keywordOperators = (\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\");\n    var builtinConstants = (\"NULL|true|false|TRUE|FALSE|nullptr\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\": keywordControls,\n        \"storage.type\": storageType,\n        \"storage.modifier\": storageModifiers,\n        \"keyword.operator\": keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n        + /(\\d+\\$)?/.source // field (argument #)\n        + /[#0\\- +']*/.source // flags\n        + /[,;:_]?/.source // separator character (AltiVec)\n        + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n        + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n        + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n        + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"//$\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \"//\",\n                next: \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"string.start\",\n                regex: 'R\"\\\\(',\n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next: \"directive\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token: \"support.function.C99.c\",\n                regex: cFunctions\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"singleLineComment\": [\n            {\n                token: \"comment\",\n                regex: /\\\\$/,\n                next: \"singleLineComment\"\n            }, {\n                token: \"comment\",\n                regex: /$/,\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\": [\n            {\n                token: \"constant.other.multiline\",\n                regex: /\\\\/\n            },\n            {\n                token: \"constant.other.multiline\",\n                regex: /.*\\\\/\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*<.+?>\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: /[^\\\\\\/]+/,\n                next: \"start\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(c_cppHighlightRules, TextHighlightRules);\nexports.c_cppHighlightRules = c_cppHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = c_cppHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/c_cpp\";\n    this.snippetFileId = \"ace/snippets/c_cpp\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/glsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar glslHighlightRules = function () {\n    var keywords = (\"attribute|const|uniform|varying|break|continue|do|for|while|\" +\n        \"if|else|in|out|inout|float|int|void|bool|true|false|\" +\n        \"lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|\" +\n        \"mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|\" +\n        \"samplerCube|struct\");\n    var buildinConstants = (\"radians|degrees|sin|cos|tan|asin|acos|atan|pow|\" +\n        \"exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|\" +\n        \"min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|\" +\n        \"normalize|faceforward|reflect|refract|matrixCompMult|lessThan|\" +\n        \"lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|\" +\n        \"not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|\" +\n        \"texture2DProjLod|textureCube|textureCubeLod|\" +\n        \"gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|\" +\n        \"gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|\" +\n        \"gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|\" +\n        \"gl_DepthRangeParameters|gl_DepthRange|\" +\n        \"gl_Position|gl_PointSize|\" +\n        \"gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n    this.$rules = new c_cppHighlightRules().$rules;\n    this.$rules.start.forEach(function (rule) {\n        if (typeof rule.token == \"function\")\n            rule.token = keywordMapper;\n    });\n};\noop.inherits(glslHighlightRules, c_cppHighlightRules);\nexports.glslHighlightRules = glslHighlightRules;\n\n});\n\nace.define(\"ace/mode/glsl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/glsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar glslHighlightRules = require(\"./glsl_highlight_rules\").glslHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = glslHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, CMode);\n(function () {\n    this.$id = \"ace/mode/glsl\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/glsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-gobstones.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/gobstones_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar GobstonesHighlightRules = function () {\n    var definitions = {\n        standard: \"program|procedure|function|interactive|return|let\",\n        type: \"type|is|variant|record|field|case\"\n    };\n    var control = {\n        commands: {\n            repetitions: \"repeat|while|foreach|in\",\n            alternatives: \"if|elseif|else|switch\"\n        },\n        expressions: {\n            alternatives: \"choose|when|otherwise|matching|select|on\"\n        }\n    };\n    var values = {\n        colors: \"Verde|Rojo|Azul|Negro\",\n        cardinals: \"Norte|Sur|Este|Oeste\",\n        booleans: \"True|False\",\n        numbers: /([-]?)([0-9]+)\\b/,\n        strings: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n    };\n    var primitives = {\n        commands: \"Poner|Sacar|Mover|IrAlBorde|VaciarTablero|BOOM\",\n        expressions: \"nroBolitas|hayBolitas|puedeMover|\" +\n            \"siguiente|previo|opuesto|\" +\n            \"minBool|maxBool|minDir|maxDir|minColor|maxColor|\" +\n            \"primero|sinElPrimero|esVacía|\" +\n            \"boom\",\n        keys: \"K_A|K_B|K_C|K_D|K_E|K_F|K_G|K_G|K_H|K_I|K_J|K_K|K_L|K_M|K_N|K_Ñ|\" +\n            \"K_O|K_P|K_Q|K_R|K_S|K_T|K_U|K_V|K_W|K_X|K_Y|K_Z|\" +\n            \"K_0|K_1|K_2|K_3|K_4|K_5|K_6|K_7|K_8|K_9|\" +\n            \"K_F1|K_F2|K_F3|K_F4|K_F5|K_F6|K_F7|K_F8|K_F9|K_F10|K_F11|K_12|\" +\n            \"K_UP|K_DOWN|K_LEFT|K_RIGHT|K_RETURN|K_BACKSPACE|K_TAB|K_SPACE|K_ESCAPE\" +\n            \"K_CTRL_A|K_CTRL_B|K_CTRL_C|K_CTRL_D|K_CTRL_E|K_CTRL_F|K_CTRL_G|K_CTRL_G|\" +\n            \"K_CTRL_H|K_CTRL_I|K_CTRL_J|K_CTRL_K|K_CTRL_L|K_CTRL_M|K_CTRL_N|K_CTRL_Ñ|\" +\n            \"K_CTRL_O|K_CTRL_P|K_CTRL_Q|K_CTRL_R|K_CTRL_S|K_CTRL_T|K_CTRL_U|K_CTRL_V|\" +\n            \"K_CTRL_W|K_CTRL_X|K_CTRL_Y|K_CTRL_Z|\" +\n            \"K_CTRL_0|K_CTRL_1|K_CTRL_2|K_CTRL_3|K_CTRL_4|K_CTRL_5|K_CTRL_6|K_CTRL_7|K_CTRL_8|K_CTRL_9|\" +\n            \"K_CTRL_F1|K_CTRL_F2|K_CTRL_F3|K_CTRL_F4|K_CTRL_F5|K_CTRL_F6|K_CTRL_F7|\" +\n            \"K_CTRL_F8|K_CTRL_F9|K_CTRL_F10|K_CTRL_F11|K_CTRL_F12|\" +\n            \"K_CTRL_UP|K_CTRL_DOWN|K_CTRL_LEFT|K_CTRL_RIGHT|K_CTRL_RETURN|\" +\n            \"K_CTRL_BACKSPACE|K_CTRL_TAB|K_CTRL_SPACE|K_CTRL_ESCAPE\" +\n            \"K_ALT_A|K_ALT_B|K_ALT_C|K_ALT_D|K_ALT_E|K_ALT_F|K_ALT_G|K_ALT_G|K_ALT_H|\" +\n            \"K_ALT_I|K_ALT_J|K_ALT_K|K_ALT_L|K_ALT_M|K_ALT_N|K_ALT_Ñ|K_ALT_O|K_ALT_P|\" +\n            \"K_ALT_Q|K_ALT_R|K_ALT_S|K_ALT_T|K_ALT_U|K_ALT_V|K_ALT_W|K_ALT_X|K_ALT_Y|K_ALT_Z|\" +\n            \"K_ALT_0|K_ALT_1|K_ALT_2|K_ALT_3|K_ALT_4|K_ALT_5|K_ALT_6|K_ALT_7|K_ALT_8|K_ALT_9|\" +\n            \"K_ALT_F1|K_ALT_F2|K_ALT_F3|K_ALT_F4|K_ALT_F5|K_ALT_F6|K_ALT_F7|K_ALT_F8|\" +\n            \"K_ALT_F9|K_ALT_F10|K_ALT_F11|K_ALT_F12|\" +\n            \"K_ALT_UP|K_ALT_DOWN|K_ALT_LEFT|K_ALT_RIGHT|K_ALT_RETURN|K_ALT_BACKSPACE|\" +\n            \"K_ALT_TAB|K_ALT_SPACE|K_ALT_ESCAPE\" +\n            \"K_SHIFT_A|K_SHIFT_B|K_SHIFT_C|K_SHIFT_D|K_SHIFT_E|K_SHIFT_F|K_SHIFT_G|\" +\n            \"K_SHIFT_G|K_SHIFT_H|K_SHIFT_I|K_SHIFT_J|K_SHIFT_K|K_SHIFT_L|K_SHIFT_M|\" +\n            \"K_SHIFT_N|K_SHIFT_Ñ|K_SHIFT_O|K_SHIFT_P|K_SHIFT_Q|K_SHIFT_R|K_SHIFT_S|\" +\n            \"K_SHIFT_T|K_SHIFT_U|K_SHIFT_V|K_SHIFT_W|K_SHIFT_X|K_SHIFT_Y|K_SHIFT_Z|\" +\n            \"K_SHIFT_0|K_SHIFT_1|K_SHIFT_2|K_SHIFT_3|K_SHIFT_4|K_SHIFT_5|K_SHIFT_6|\" +\n            \"K_SHIFT_7|K_SHIFT_8|K_SHIFT_9|\" +\n            \"K_SHIFT_F1|K_SHIFT_F2|K_SHIFT_F3|K_SHIFT_F4|K_SHIFT_F5|K_SHIFT_F6|\" +\n            \"K_SHIFT_F7|K_SHIFT_F8|K_SHIFT_F9|K_SHIFT_F10|K_SHIFT_F11|K_SHIFT_F12|\" +\n            \"K_SHIFT_UP|K_SHIFT_DOWN|K_SHIFT_LEFT|K_SHIFT_RIGHT|K_SHIFT_RETURN|\" +\n            \"K_SHIFT_BACKSPACE|K_SHIFT_TAB|K_SHIFT_SPACE|K_SHIFT_ESCAPE\" +\n            \"K_CTRL_ALT_A|K_CTRL_ALT_B|K_CTRL_ALT_C|K_CTRL_ALT_D|K_CTRL_ALT_E|\" +\n            \"K_CTRL_ALT_F|K_CTRL_ALT_G|K_CTRL_ALT_G|K_CTRL_ALT_H|K_CTRL_ALT_I|\" +\n            \"K_CTRL_ALT_J|K_CTRL_ALT_K|K_CTRL_ALT_L|K_CTRL_ALT_M|K_CTRL_ALT_N|\" +\n            \"K_CTRL_ALT_Ñ|K_CTRL_ALT_O|K_CTRL_ALT_P|K_CTRL_ALT_Q|K_CTRL_ALT_R|\" +\n            \"K_CTRL_ALT_S|K_CTRL_ALT_T|K_CTRL_ALT_U|K_CTRL_ALT_V|K_CTRL_ALT_W|\" +\n            \"K_CTRL_ALT_X|K_CTRL_ALT_Y|K_CTRL_ALT_Z|\" +\n            \"K_CTRL_ALT_0|K_CTRL_ALT_1|K_CTRL_ALT_2|K_CTRL_ALT_3|K_CTRL_ALT_4|\" +\n            \"K_CTRL_ALT_5|K_CTRL_ALT_6|K_CTRL_ALT_7|K_CTRL_ALT_8|K_CTRL_ALT_9|\" +\n            \"K_CTRL_ALT_F1|K_CTRL_ALT_F2|K_CTRL_ALT_F3|K_CTRL_ALT_F4|K_CTRL_ALT_F5|\" +\n            \"K_CTRL_ALT_F6|K_CTRL_ALT_F7|K_CTRL_ALT_F8|K_CTRL_ALT_F9|K_CTRL_ALT_F10|\" +\n            \"K_CTRL_ALT_F11|K_CTRL_ALT_F12|\" +\n            \"K_CTRL_ALT_UP|K_CTRL_ALT_DOWN|K_CTRL_ALT_LEFT|K_CTRL_ALT_RIGHT|\" +\n            \"K_CTRL_ALT_RETURN|K_CTRL_ALT_BACKSPACE|K_CTRL_ALT_TAB|K_CTRL_ALT_SPACE|K_CTRL_ALT_ESCAPE\" +\n            \"K_CTRL_SHIFT_A|K_CTRL_SHIFT_B|K_CTRL_SHIFT_C|K_CTRL_SHIFT_D|K_CTRL_SHIFT_E|\" +\n            \"K_CTRL_SHIFT_F|K_CTRL_SHIFT_G|K_CTRL_SHIFT_G|K_CTRL_SHIFT_H|K_CTRL_SHIFT_I|\" +\n            \"K_CTRL_SHIFT_J|K_CTRL_SHIFT_K|K_CTRL_SHIFT_L|K_CTRL_SHIFT_M|K_CTRL_SHIFT_N|\" +\n            \"K_CTRL_SHIFT_Ñ|K_CTRL_SHIFT_O|K_CTRL_SHIFT_P|K_CTRL_SHIFT_Q|K_CTRL_SHIFT_R|\" +\n            \"K_CTRL_SHIFT_S|K_CTRL_SHIFT_T|K_CTRL_SHIFT_U|K_CTRL_SHIFT_V|K_CTRL_SHIFT_W|\" +\n            \"K_CTRL_SHIFT_X|K_CTRL_SHIFT_Y|K_CTRL_SHIFT_Z|\" +\n            \"K_CTRL_SHIFT_0|K_CTRL_SHIFT_1|K_CTRL_SHIFT_2|K_CTRL_SHIFT_3|K_CTRL_SHIFT_4|\" +\n            \"K_CTRL_SHIFT_5|K_CTRL_SHIFT_6|K_CTRL_SHIFT_7|K_CTRL_SHIFT_8|K_CTRL_SHIFT_9|\" +\n            \"K_CTRL_SHIFT_F1|K_CTRL_SHIFT_F2|K_CTRL_SHIFT_F3|K_CTRL_SHIFT_F4|\" +\n            \"K_CTRL_SHIFT_F5|K_CTRL_SHIFT_F6|K_CTRL_SHIFT_F7|K_CTRL_SHIFT_F8|\" +\n            \"K_CTRL_SHIFT_9|K_CTRL_SHIFT_10|K_CTRL_SHIFT_11|K_CTRL_SHIFT_12|\" +\n            \"K_CTRL_SHIFT_UP|K_CTRL_SHIFT_DOWN|K_CTRL_SHIFT_LEFT|K_CTRL_SHIFT_RIGHT|\" +\n            \"K_CTRL_SHIFT_RETURN|K_CTRL_SHIFT_BACKSPACE|K_CTRL_SHIFT_TAB|\" +\n            \"K_CTRL_SHIFT_SPACE|K_CTRL_SHIFT_ESCAPE\" +\n            \"K_ALT_SHIFT_A|K_ALT_SHIFT_B|K_ALT_SHIFT_C|K_ALT_SHIFT_D|K_ALT_SHIFT_E|\" +\n            \"K_ALT_SHIFT_F|K_ALT_SHIFT_G|K_ALT_SHIFT_G|K_ALT_SHIFT_H|K_ALT_SHIFT_I|\" +\n            \"K_ALT_SHIFT_J|K_ALT_SHIFT_K|K_ALT_SHIFT_L|K_ALT_SHIFT_M|K_ALT_SHIFT_N|\" +\n            \"K_ALT_SHIFT_Ñ|K_ALT_SHIFT_O|K_ALT_SHIFT_P|K_ALT_SHIFT_Q|K_ALT_SHIFT_R|\" +\n            \"K_ALT_SHIFT_S|K_ALT_SHIFT_T|K_ALT_SHIFT_U|K_ALT_SHIFT_V|K_ALT_SHIFT_W|\" +\n            \"K_ALT_SHIFT_X|K_ALT_SHIFT_Y|K_ALT_SHIFT_Z|\" +\n            \"K_ALT_SHIFT_0|K_ALT_SHIFT_1|K_ALT_SHIFT_2|K_ALT_SHIFT_3|K_ALT_SHIFT_4|\" +\n            \"K_ALT_SHIFT_5|K_ALT_SHIFT_6|K_ALT_SHIFT_7|K_ALT_SHIFT_8|K_ALT_SHIFT_9|\" +\n            \"K_ALT_SHIFT_F1|K_ALT_SHIFT_F2|K_ALT_SHIFT_F3|K_ALT_SHIFT_F4|\" +\n            \"K_ALT_SHIFT_F5|K_ALT_SHIFT_F6|K_ALT_SHIFT_F7|K_ALT_SHIFT_F8|\" +\n            \"K_ALT_SHIFT_9|K_ALT_SHIFT_10|K_ALT_SHIFT_11|K_ALT_SHIFT_12|\" +\n            \"K_ALT_SHIFT_UP|K_ALT_SHIFT_DOWN|K_ALT_SHIFT_LEFT|K_ALT_SHIFT_RIGHT|\" +\n            \"K_ALT_SHIFT_RETURN|K_ALT_SHIFT_BACKSPACE|K_ALT_SHIFT_TAB|K_ALT_SHIFT_SPACE|\" +\n            \"K_ALT_SHIFT_ESCAPE\" +\n            \"K_CTRL_ALT_SHIFT_A|K_CTRL_ALT_SHIFT_B|K_CTRL_ALT_SHIFT_C|K_CTRL_ALT_SHIFT_D|\" +\n            \"K_CTRL_ALT_SHIFT_E|K_CTRL_ALT_SHIFT_F|K_CTRL_ALT_SHIFT_G|K_CTRL_ALT_SHIFT_G|\" +\n            \"K_CTRL_ALT_SHIFT_H|K_CTRL_ALT_SHIFT_I|K_CTRL_ALT_SHIFT_J|K_CTRL_ALT_SHIFT_K|\" +\n            \"K_CTRL_ALT_SHIFT_L|K_CTRL_ALT_SHIFT_M|K_CTRL_ALT_SHIFT_N|K_CTRL_ALT_SHIFT_Ñ|\" +\n            \"K_CTRL_ALT_SHIFT_O|K_CTRL_ALT_SHIFT_P|K_CTRL_ALT_SHIFT_Q|K_CTRL_ALT_SHIFT_R|\" +\n            \"K_CTRL_ALT_SHIFT_S|K_CTRL_ALT_SHIFT_T|K_CTRL_ALT_SHIFT_U|K_CTRL_ALT_SHIFT_V|\" +\n            \"K_CTRL_ALT_SHIFT_W|K_CTRL_ALT_SHIFT_X|K_CTRL_ALT_SHIFT_Y|K_CTRL_ALT_SHIFT_Z|\" +\n            \"K_CTRL_ALT_SHIFT_0|K_CTRL_ALT_SHIFT_1|K_CTRL_ALT_SHIFT_2|K_CTRL_ALT_SHIFT_3|\" +\n            \"K_CTRL_ALT_SHIFT_4|K_CTRL_ALT_SHIFT_5|K_CTRL_ALT_SHIFT_6|K_CTRL_ALT_SHIFT_7|\" +\n            \"K_CTRL_ALT_SHIFT_8|K_CTRL_ALT_SHIFT_9|\" +\n            \"K_CTRL_ALT_SHIFT_F1|K_CTRL_ALT_SHIFT_F2|K_CTRL_ALT_SHIFT_F3|K_CTRL_ALT_SHIFT_F4|\" +\n            \"K_CTRL_ALT_SHIFT_F5|K_CTRL_ALT_SHIFT_F6|K_CTRL_ALT_SHIFT_F7|K_CTRL_ALT_SHIFT_F8|\" +\n            \"K_CTRL_ALT_SHIFT_F9|K_CTRL_ALT_SHIFT_F10|K_CTRL_ALT_SHIFT_F11|K_CTRL_ALT_SHIFT_F12|\" +\n            \"K_CTRL_ALT_SHIFT_UP|K_CTRL_ALT_SHIFT_DOWN|K_CTRL_ALT_SHIFT_LEFT|K_CTRL_ALT_SHIFT_RIGHT|\" +\n            \"K_CTRL_ALT_SHIFT_RETURN|K_CTRL_ALT_SHIFT_BACKSPACE|K_CTRL_ALT_SHIFT_TAB|\" +\n            \"K_CTRL_ALT_SHIFT_SPACE|K_CTRL_ALT_SHIFT_ESCAPE\"\n    };\n    var operations = {\n        commands: \":=\",\n        expressions: {\n            numeric: \"\\\\+|\\\\-|\\\\*|\\\\^|div|mod\",\n            comparison: \">=|<=|==|\\\\/=|>|<\",\n            boolean: \"\\\\|\\\\||&&|not\",\n            other: \"\\\\+\\\\+|<\\\\-|\\\\[|\\\\]|\\\\_|\\\\->\"\n        }\n    };\n    var comments = {\n        line: {\n            double_slash: \"\\\\/\\\\/.*$\",\n            double_dash: \"\\\\-\\\\-.*$\",\n            number_sign: \"#.*$\"\n        },\n        block: { start: \"\\\\/\\\\*\", end: \"\\\\*\\\\/\" },\n        block_alt: { start: \"\\\\{\\\\-\", end: \"\\\\-\\\\}\" }\n    };\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.line.double-slash.gobstones\",\n                regex: comments.line.double_slash\n            },\n            {\n                token: \"comment.line.double-dash.gobstones\",\n                regex: comments.line.double_dash\n            },\n            {\n                token: \"comment.line.number-sign.gobstones\",\n                regex: comments.line.number_sign\n            },\n            {\n                token: \"comment.block.dash-asterisc.gobstones\",\n                regex: comments.block.start,\n                next: \"block_comment_end\"\n            },\n            {\n                token: \"comment.block.brace-dash.gobstones\",\n                regex: comments.block_alt.start,\n                next: \"block_comment_alt_end\"\n            },\n            {\n                token: \"constant.numeric.gobstones\",\n                regex: values.numbers\n            },\n            {\n                token: \"string.quoted.double.gobstones\",\n                regex: values.strings\n            },\n            {\n                token: \"keyword.operator.other.gobstones\",\n                regex: operations.expressions.other\n            },\n            {\n                token: \"keyword.operator.numeric.gobstones\",\n                regex: operations.expressions.numeric\n            },\n            {\n                token: \"keyword.operator.compare.gobstones\",\n                regex: operations.expressions.comparison\n            },\n            {\n                token: \"keyword.operator.boolean.gobstones\",\n                regex: operations.expressions.boolean\n            },\n            {\n                token: this.createKeywordMapper({\n                    \"storage.type.definitions.gobstones\": definitions.standard,\n                    \"storage.type.types.gobstones\": definitions.type,\n                    \"keyword.control.commands.repetitions.gobstones\": control.commands.repetitions,\n                    \"keyword.control.commands.alternatives.gobstones\": control.commands.alternatives,\n                    \"keyword.control.expressions.alternatives.gobstones\": control.expressions.alternatives,\n                    \"constant.language.colors.gobstones\": values.colors,\n                    \"constant.language.cardinals.gobstones\": values.cardinals,\n                    \"constant.language.boolean.gobstones\": values.booleans,\n                    \"support.function.gobstones\": primitives.commands,\n                    \"support.variable.gobstones\": primitives.expressions,\n                    \"variable.language.gobstones\": primitives.keys\n                }, \"identifier.gobstones\"),\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token: \"comma.gobstones\",\n                regex: \",\"\n            },\n            {\n                token: \"semicolon.gobstones\",\n                regex: \";\"\n            },\n            {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            },\n            {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            },\n            {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"block_comment_end\": [{\n                token: \"comment.block.dash-asterisc.gobstones\",\n                regex: comments.block.end,\n                next: \"start\"\n            }, {\n                defaultToken: \"comment.block.dash-asterisc.gobstones\"\n            }\n        ],\n        \"block_comment_alt_end\": [{\n                token: \"comment.block.brace-dash.gobstones\",\n                regex: comments.block_alt.end,\n                next: \"start\"\n            }, {\n                defaultToken: \"comment.block.brace-dash.gobstones\"\n            }\n        ]\n    };\n};\noop.inherits(GobstonesHighlightRules, TextHighlightRules);\nexports.GobstonesHighlightRules = GobstonesHighlightRules;\n\n});\n\nace.define(\"ace/mode/gobstones\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/gobstones_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar GobstonesHighlightRules = require(\"./gobstones_highlight_rules\").GobstonesHighlightRules;\nvar Mode = function () {\n    JavaScriptMode.call(this);\n    this.HighlightRules = GobstonesHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, JavaScriptMode);\n(function () {\n    this.createWorker = function () {\n        return null;\n    };\n    this.$id = \"ace/mode/gobstones\";\n    this.snippetFileId = \"ace/snippets/gobstones\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/gobstones\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-golang.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/golang_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar GolangHighlightRules = function () {\n    var keywords = (\"else|break|case|return|goto|if|const|select|\" +\n        \"continue|struct|default|switch|for|range|\" +\n        \"func|import|package|chan|defer|fallthrough|go|interface|map|range|\" +\n        \"select|type|var\");\n    var builtinTypes = (\"string|uint8|uint16|uint32|uint64|int8|int16|int32|int64|float32|\" +\n        \"float64|complex64|complex128|byte|rune|uint|int|uintptr|bool|error\");\n    var builtinFunctions = (\"new|close|cap|copy|panic|panicln|print|println|len|make|delete|real|recover|imag|append\");\n    var builtinConstants = (\"nil|true|false|iota\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"support.function\": builtinFunctions,\n        \"support.type\": builtinTypes\n    }, \"\");\n    var stringEscapeRe = \"\\\\\\\\(?:[0-7]{3}|x\\\\h{2}|u{4}|U\\\\h{6}|[abfnrtv'\\\"\\\\\\\\])\".replace(/\\\\h/g, \"[a-fA-F\\\\d]\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment.start\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: /\"(?:[^\"\\\\]|\\\\.)*?\"/\n            }, {\n                token: \"string\",\n                regex: '`',\n                next: \"bqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"'(?:[^\\\\'\\uD800-\\uDBFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|\" + stringEscapeRe.replace('\"', '') + \")'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: [\"keyword\", \"text\", \"entity.name.function\"],\n                regex: \"(func)(\\\\s+)([a-zA-Z_$][a-zA-Z0-9_$]*)\\\\b\"\n            }, {\n                token: function (val) {\n                    if (val[val.length - 1] == \"(\") {\n                        return [{\n                                type: keywordMapper(val.slice(0, -1)) || \"support.function\",\n                                value: val.slice(0, -1)\n                            }, {\n                                type: \"paren.lparen\",\n                                value: val.slice(-1)\n                            }];\n                    }\n                    return keywordMapper(val) || \"identifier\";\n                },\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\\\\(?\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.end\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"bqstring\": [\n            {\n                token: \"string\",\n                regex: '`',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\noop.inherits(GolangHighlightRules, TextHighlightRules);\nexports.GolangHighlightRules = GolangHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/golang\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/golang_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GolangHighlightRules = require(\"./golang_highlight_rules\").GolangHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = GolangHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    }; //end getNextLineIndent\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/golang\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/golang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-graphqlschema.js",
    "content": "ace.define(\"ace/mode/graphqlschema_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar GraphQLSchemaHighlightRules = function () {\n    var keywords = (\"type|interface|union|enum|schema|input|implements|extends|scalar\");\n    var dataTypes = (\"Int|Float|String|ID|Boolean\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"storage.type\": dataTypes\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(GraphQLSchemaHighlightRules, TextHighlightRules);\nexports.GraphQLSchemaHighlightRules = GraphQLSchemaHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/graphqlschema\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/graphqlschema_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar GraphQLSchemaHighlightRules = require(\"./graphqlschema_highlight_rules\").GraphQLSchemaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = GraphQLSchemaHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/graphqlschema\";\n    this.snippetFileId = \"ace/snippets/graphqlschema\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/graphqlschema\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-groovy.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/groovy_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar GroovyHighlightRules = function () {\n    var keywords = (\"assert|with|abstract|continue|for|new|switch|\" +\n        \"assert|default|goto|package|synchronized|\" +\n        \"boolean|do|if|private|this|\" +\n        \"break|double|implements|protected|throw|\" +\n        \"byte|else|import|public|throws|\" +\n        \"case|enum|instanceof|return|transient|\" +\n        \"catch|extends|int|short|try|\" +\n        \"char|final|interface|static|void|\" +\n        \"class|finally|long|strictfp|volatile|\" +\n        \"def|float|native|super|while\");\n    var buildinConstants = (\"null|Infinity|NaN|undefined\");\n    var langClasses = (\"AbstractMethodError|AssertionError|ClassCircularityError|\" +\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\" +\n        \"ExceptionInInitializerError|IllegalAccessError|\" +\n        \"IllegalThreadStateException|InstantiationError|InternalError|\" +\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\" +\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\" +\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\" +\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\" +\n        \"InstantiationException|IndexOutOfBoundsException|\" +\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\" +\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\" +\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\" +\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\" +\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\" +\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\" +\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\" +\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\" +\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\" +\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\" +\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\" +\n        \"ArrayStoreException|ClassCastException|LinkageError|\" +\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\" +\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\" +\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"support.function\": langClasses,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token: \"string\",\n                regex: '\"\"\"',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: \"'''\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\?:|\\\\?\\\\.|\\\\*\\\\.|<=>|=~|==~|\\\\.@|\\\\*\\\\.@|\\\\.&|as|in|is|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:u[0-9A-Fa-f]{4}|.|$)/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\$[\\w\\d]+/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\$\\{[^\"\\}]+\\}?/\n            }, {\n                token: \"string\",\n                regex: '\"{3,5}',\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+?'\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:u[0-9A-Fa-f]{4}|.|$)/\n            }, {\n                token: \"string\",\n                regex: \"'{3,5}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \".+?\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\noop.inherits(GroovyHighlightRules, TextHighlightRules);\nexports.GroovyHighlightRules = GroovyHighlightRules;\n\n});\n\nace.define(\"ace/mode/groovy\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/groovy_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar GroovyHighlightRules = require(\"./groovy_highlight_rules\").GroovyHighlightRules;\nvar Mode = function () {\n    JavaScriptMode.call(this);\n    this.HighlightRules = GroovyHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n(function () {\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.$id = \"ace/mode/groovy\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/groovy\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-haml.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token: \"constant.other.symbol.ruby\",\n    regex: \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\nexports.qString = {\n    token: \"string\",\n    regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\nexports.qqString = {\n    token: \"string\",\n    regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\nexports.tString = {\n    token: \"string\",\n    regex: \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\nvar constantNumericHex = exports.constantNumericHex = {\n    token: \"constant.numeric\",\n    regex: \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\nvar constantNumericBinary = exports.constantNumericBinary = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[bB][01](?:[01]|_(?=[01]))*)\\b/\n};\nvar constantNumericDecimal = exports.constantNumericDecimal = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[dD](?:[1-9](?:[\\d]|_(?=[\\d]))*|0))\\b/\n};\nvar constantNumericOctal = exports.constantNumericDecimal = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[oO]?(?:[1-7](?:[0-7]|_(?=[0-7]))*|0))\\b/\n};\nvar constantNumericRational = exports.constantNumericRational = {\n    token: \"constant.numeric\",\n    regex: /\\b([\\d]+(?:[./][\\d]+)?ri?)\\b/\n};\nvar constantNumericComplex = exports.constantNumericComplex = {\n    token: \"constant.numeric\",\n    regex: /\\b([\\d]i)\\b/\n};\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token: \"constant.numeric\",\n    regex: \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?i?\\\\b\"\n};\nvar instanceVariable = exports.instanceVariable = {\n    token: \"variable.instance\",\n    regex: \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\nvar RubyHighlightRules = function () {\n    var builtinFunctions = (\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many|p|warn|refine|using|module_function|extend|alias_method|\" +\n        \"private_class_method|remove_method|undef_method\");\n    var keywords = (\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|__ENCODING__|prepend\");\n    var buildinConstants = (\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING|RUBY_PATCHLEVEL|RUBY_REVISION|RUBY_COPYRIGHT|RUBY_ENGINE|RUBY_ENGINE_VERSION|RUBY_DESCRIPTION\");\n    var builtinVariables = (\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n    var escapedChars = \"\\\\\\\\(?:n(?:[1-7][0-7]{0,2}|0)|[nsrtvfbae'\\\"\\\\\\\\]|c(?:\\\\\\\\M-)?.|M-(?:\\\\\\\\C-|\\\\\\\\c)?.|C-(?:\\\\\\\\M-)?.|[0-7]{3}|x[\\\\da-fA-F]{2}|u[\\\\da-fA-F]{4}|u{[\\\\da-fA-F]{1,6}(?:\\\\s[\\\\da-fA-F]{1,6})*})\";\n    var closeParen = {\n        \"(\": \")\",\n        \"[\": \"]\",\n        \"{\": \"}\",\n        \"<\": \">\",\n        \"^\": \"^\",\n        \"|\": \"|\",\n        \"%\": \"%\"\n    };\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"comment.multiline\",\n                regex: \"^=begin(?=$|\\\\s.*$)\",\n                next: \"comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: /[/](?=.*\\/)/,\n                next: \"regex\"\n            },\n            [{\n                    token: [\"constant.other.symbol.ruby\", \"string.start\"],\n                    regex: /(:)?(\")/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: escapedChars\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /\"/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: \"string.start\",\n                    regex: /`/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: escapedChars\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /`/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: [\"constant.other.symbol.ruby\", \"string.start\"],\n                    regex: /(:)?(')/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: /\\\\['\\\\]/\n                        }, {\n                            token: \"string.end\",\n                            regex: /'/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: \"string.start\",\n                    regex: /%[qwx]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"qStateWithoutInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"string.start\",\n                    regex: /%[QWX]?([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"qStateWithInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"constant.other.symbol.ruby\",\n                    regex: /%[si]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"sStateWithoutInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"constant.other.symbol.ruby\",\n                    regex: /%[SI]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"sStateWithInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"string.regexp\",\n                    regex: /%[r]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"rState\";\n                        return this.token;\n                    }\n                }],\n            {\n                token: \"punctuation\",\n                regex: \"::\"\n            },\n            instanceVariable,\n            {\n                token: \"variable.global\",\n                regex: \"[$][a-zA-Z_\\\\d]+\"\n            }, {\n                token: \"support.class\",\n                regex: \"[A-Z][a-zA-Z_\\\\d]*\"\n            }, {\n                token: [\"punctuation.operator\", \"support.function\"],\n                regex: /(\\.)([a-zA-Z_\\d]+)(?=\\()/\n            }, {\n                token: [\"punctuation.operator\", \"identifier\"],\n                regex: /(\\.)([a-zA-Z_][a-zA-Z_\\d]*)/\n            }, {\n                token: \"string.character\",\n                regex: \"\\\\B\\\\?(?:\" + escapedChars + \"|\\\\S)\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /\\?(?=.+:)/\n            },\n            constantNumericRational,\n            constantNumericComplex,\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n            constantNumericBinary,\n            constantNumericDecimal,\n            constantNumericOctal,\n            {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"punctuation.separator.key-value\",\n                regex: \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch: function (value, currentState, stack) {\n                    var next = (value[2] == '-' || value[2] == '~') ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        { type: \"constant\", value: tokens[1] },\n                        { type: \"string\", value: tokens[2] },\n                        { type: \"support.class\", value: tokens[3] },\n                        { type: \"string\", value: tokens[4] }\n                    ];\n                },\n                regex: \"(<<[-~]?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }],\n                    indentedHeredoc: [{\n                            token: \"string\",\n                            regex: \"^ +\"\n                        }, {\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }]\n                }\n            }, {\n                regex: \"$\",\n                token: \"empty\",\n                next: function (currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\||\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\",\n                onMatch: function (value, currentState, stack) {\n                    this.next = '';\n                    if (value == \"}\" && stack.length > 1 && stack[1] != \"start\") {\n                        stack.shift();\n                        this.next = stack.shift();\n                    }\n                    return this.token;\n                }\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.multiline\",\n                regex: \"^=end(?=$|\\\\s.*$)\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \".+\"\n            }\n        ],\n        \"qStateWithInterpolation\": [{\n                token: \"string.start\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"string\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapedChars\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"string.end\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"string\";\n                }\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qStateWithoutInterpolation\": [{\n                token: \"string.start\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"string\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\['\\\\]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"string.end\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"string\";\n                }\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"sStateWithoutInterpolation\": [{\n                token: \"constant.other.symbol.ruby\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                token: \"constant.other.symbol.ruby\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                defaultToken: \"constant.other.symbol.ruby\"\n            }],\n        \"sStateWithInterpolation\": [{\n                token: \"constant.other.symbol.ruby\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapedChars\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"constant.other.symbol.ruby\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                defaultToken: \"constant.other.symbol.ruby\"\n            }],\n        \"rState\": [{\n                token: \"string.regexp\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.language.escape\";\n                }\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"string.regexp\",\n                regex: /\\//\n            }, {\n                token: \"string.regexp\",\n                regex: /[)\\]>}^|%][imxouesn]*/, onMatch: function (val, state, stack) {\n                    if (stack.length && val[0] === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.language.escape\";\n                }\n            },\n            { include: \"regex\" },\n            {\n                defaultToken: \"string.regexp\"\n            }],\n        \"regex\": [\n            {\n                token: \"regexp.keyword\",\n                regex: /\\\\[wWdDhHsS]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\[AGbBzZ]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\g<[a-zA-Z0-9]*>/\n            }, {\n                token: [\"constant.language.escape\", \"regexp.keyword\", \"constant.language.escape\"],\n                regex: /(\\\\p{\\^?)(Alnum|Alpha|Blank|Cntrl|Digit|Graph|Lower|Print|Punct|Space|Upper|XDigit|Word|ASCII|Any|Assigned|Arabic|Armenian|Balinese|Bengali|Bopomofo|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Ethiopic|Georgian|Glagolitic|Gothic|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hebrew|Hiragana|Inherited|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Lao|Latin|Lepcha|Limbu|Linear_B|Lycian|Lydian|Malayalam|Mongolian|Myanmar|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Italic|Old_Persian|Oriya|Osmanya|Phags_Pa|Phoenician|Rejang|Runic|Saurashtra|Shavian|Sinhala|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Ugaritic|Vai|Yi|Ll|Lm|Lt|Lu|Lo|Mn|Mc|Me|Nd|Nl|Pc|Pd|Ps|Pe|Pi|Pf|Po|No|Sm|Sc|Sk|So|Zs|Zl|Zp|Cc|Cf|Cn|Co|Cs|N|L|M|P|S|Z|C)(})/\n            }, {\n                token: [\"constant.language.escape\", \"invalid\", \"constant.language.escape\"],\n                regex: /(\\\\p{\\^?)([^/]*)(})/\n            }, {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: /[/][imxouesn]*/,\n                next: \"start\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?(?:[:=!>]|<'?[a-zA-Z]*'?>|<[=!])|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"regexp.keyword\",\n                regex: /\\[\\[:(?:alnum|alpha|blank|cntrl|digit|graph|lower|print|punct|space|upper|xdigit|word|ascii):\\]\\]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                push: \"regex_character_class\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.keyword\",\n                regex: /\\\\[wWdDhHsS]/\n            }, {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: /&?&?\\[\\^?/,\n                push: \"regex_character_class\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                defaultToken: \"string.regexp.characterclass\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(RubyHighlightRules, TextHighlightRules);\nexports.RubyHighlightRules = RubyHighlightRules;\n\n});\n\nace.define(\"ace/mode/haml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/ruby_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar RubyExports = require(\"./ruby_highlight_rules\");\nvar RubyHighlightRules = RubyExports.RubyHighlightRules;\nvar HamlHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.block\",\n                regex: /^\\/$/,\n                next: \"comment\"\n            },\n            {\n                token: \"comment.block\",\n                regex: /^\\-#$/,\n                next: \"comment\"\n            },\n            {\n                token: \"comment.line\",\n                regex: /\\/\\s*.*/\n            },\n            {\n                token: \"comment.line\",\n                regex: /-#\\s*.*/\n            },\n            {\n                token: \"keyword.other.doctype\",\n                regex: \"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"\n            },\n            RubyExports.qString,\n            RubyExports.qqString,\n            RubyExports.tString,\n            {\n                token: \"meta.tag.haml\",\n                regex: /(%[\\w:\\-]+)/\n            },\n            {\n                token: \"keyword.attribute-name.class.haml\",\n                regex: /\\.[\\w-]+/\n            },\n            {\n                token: \"keyword.attribute-name.id.haml\",\n                regex: /#[\\w-]+/,\n                next: \"element_class\"\n            },\n            RubyExports.constantNumericHex,\n            RubyExports.constantNumericFloat,\n            RubyExports.constantOtherSymbol,\n            {\n                token: \"text\",\n                regex: /=|-|~/,\n                next: \"embedded_ruby\"\n            }\n        ],\n        \"element_class\": [\n            {\n                token: \"keyword.attribute-name.class.haml\",\n                regex: /\\.[\\w-]+/\n            },\n            {\n                token: \"punctuation.section\",\n                regex: /\\{/,\n                next: \"element_attributes\"\n            },\n            RubyExports.constantOtherSymbol,\n            {\n                token: \"empty\",\n                regex: \"$|(?!\\\\.|#|\\\\{|\\\\[|=|-|~|\\\\/])\",\n                next: \"start\"\n            }\n        ],\n        \"element_attributes\": [\n            RubyExports.constantOtherSymbol,\n            RubyExports.qString,\n            RubyExports.qqString,\n            RubyExports.tString,\n            RubyExports.constantNumericHex,\n            RubyExports.constantNumericFloat,\n            {\n                token: \"punctuation.section\",\n                regex: /$|\\}/,\n                next: \"start\"\n            }\n        ],\n        \"embedded_ruby\": [\n            RubyExports.constantNumericHex,\n            RubyExports.constantNumericFloat,\n            RubyExports.instanceVariable,\n            RubyExports.qString,\n            RubyExports.qqString,\n            RubyExports.tString,\n            {\n                token: \"support.class\",\n                regex: \"[A-Z][a-zA-Z_\\\\d]+\"\n            },\n            {\n                token: new RubyHighlightRules().getKeywords(),\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token: [\"keyword\", \"text\", \"text\"],\n                regex: \"(?:do|\\\\{)(?: \\\\|[^|]+\\\\|)?$\",\n                next: \"start\"\n            },\n            {\n                token: [\"text\"],\n                regex: \"^$\",\n                next: \"start\"\n            },\n            {\n                token: [\"text\"],\n                regex: \"^(?!.*\\\\|\\\\s*$)\",\n                next: \"start\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.block\",\n                regex: /^$/,\n                next: \"start\"\n            },\n            {\n                token: \"comment.block\",\n                regex: /\\s+.*/\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(HamlHighlightRules, HtmlHighlightRules);\nexports.HamlHighlightRules = HamlHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/haml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haml_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HamlHighlightRules = require(\"./haml_highlight_rules\").HamlHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = HamlHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/haml\";\n    this.snippetFileId = \"ace/snippets/haml\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/haml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-handlebars.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/handlebars_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){/* global define */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nfunction pop2(currentState, stack) {\n    stack.splice(0, 3);\n    return stack.shift() || \"start\";\n}\nvar HandlebarsHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var hbs = {\n        regex: \"(?={{)\",\n        push: \"handlebars\"\n    };\n    for (var key in this.$rules) {\n        this.$rules[key].unshift(hbs);\n    }\n    this.$rules.handlebars = [{\n            token: \"comment.start\",\n            regex: \"{{!--\",\n            push: [{\n                    token: \"comment.end\",\n                    regex: \"--}}\",\n                    next: pop2\n                }, {\n                    defaultToken: \"comment\"\n                }]\n        }, {\n            token: \"comment.start\",\n            regex: \"{{!\",\n            push: [{\n                    token: \"comment.end\",\n                    regex: \"}}\",\n                    next: pop2\n                }, {\n                    defaultToken: \"comment\"\n                }]\n        }, {\n            token: \"support.function\",\n            regex: \"{{{\",\n            push: [{\n                    token: \"support.function\",\n                    regex: \"}}}\",\n                    next: pop2\n                }, {\n                    token: \"variable.parameter\",\n                    regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n                }]\n        }, {\n            token: \"storage.type.start\",\n            regex: \"{{[#\\\\^/&]?\",\n            push: [{\n                    token: \"storage.type.end\",\n                    regex: \"}}\",\n                    next: pop2\n                }, {\n                    token: \"variable.parameter\",\n                    regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n                }]\n        }];\n    this.normalizeRules();\n};\noop.inherits(HandlebarsHighlightRules, HtmlHighlightRules);\nexports.HandlebarsHighlightRules = HandlebarsHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour/xml\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar XmlBehaviour = require(\"../behaviour/xml\").XmlBehaviour;\nvar HtmlBehaviour = function () {\n    XmlBehaviour.call(this);\n};\noop.inherits(HtmlBehaviour, XmlBehaviour);\nexports.HtmlBehaviour = HtmlBehaviour;\n\n});\n\nace.define(\"ace/mode/handlebars\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/handlebars_highlight_rules\",\"ace/mode/behaviour/html\",\"ace/mode/folding/html\"], function(require, exports, module){/* global define */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar HandlebarsHighlightRules = require(\"./handlebars_highlight_rules\").HandlebarsHighlightRules;\nvar HtmlBehaviour = require(\"./behaviour/html\").HtmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = HandlebarsHighlightRules;\n    this.$behaviour = new HtmlBehaviour();\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.blockComment = { start: \"{{!--\", end: \"--}}\" };\n    this.$id = \"ace/mode/handlebars\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/handlebars\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-haskell.js",
    "content": "ace.define(\"ace/mode/haskell_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from tm bundles\\haskell.tmbundle\\Syntaxes\\Haskell.plist (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HaskellHighlightRules = function () {\n    this.$rules = { start: [{ token: ['punctuation.definition.entity.haskell',\n                    'keyword.operator.function.infix.haskell',\n                    'punctuation.definition.entity.haskell'],\n                regex: '(`)([a-zA-Z_\\']*?)(`)',\n                comment: 'In case this regex seems unusual for an infix operator, note that Haskell allows any ordinary function application (elem 4 [1..10]) to be rewritten as an infix expression (4 `elem` [1..10]).' },\n            { token: 'constant.language.unit.haskell', regex: '\\\\(\\\\)' },\n            { token: 'constant.language.empty-list.haskell',\n                regex: '\\\\[\\\\]' },\n            { token: 'keyword.other.haskell',\n                regex: '\\\\b(module|signature)\\\\b',\n                push: [{ token: 'keyword.other.haskell', regex: '\\\\bwhere\\\\b', next: 'pop' },\n                    { include: '#module_name' },\n                    { include: '#module_exports' },\n                    { token: 'invalid', regex: '[a-z]+' },\n                    { defaultToken: 'meta.declaration.module.haskell' }] },\n            { token: 'keyword.other.haskell',\n                regex: '\\\\bclass\\\\b',\n                push: [{ token: 'keyword.other.haskell',\n                        regex: '\\\\bwhere\\\\b',\n                        next: 'pop' },\n                    { token: 'support.class.prelude.haskell',\n                        regex: '\\\\b(?:Monad|Functor|Eq|Ord|Read|Show|Num|(?:Frac|Ra)tional|Enum|Bounded|Real(?:Frac|Float)?|Integral|Floating)\\\\b' },\n                    { token: 'entity.other.inherited-class.haskell',\n                        regex: '[A-Z][A-Za-z_\\']*' },\n                    { token: 'variable.other.generic-type.haskell',\n                        regex: '\\\\b[a-z][a-zA-Z0-9_\\']*\\\\b' },\n                    { defaultToken: 'meta.declaration.class.haskell' }] },\n            { token: 'keyword.other.haskell',\n                regex: '\\\\binstance\\\\b',\n                push: [{ token: 'keyword.other.haskell',\n                        regex: '\\\\bwhere\\\\b|$',\n                        next: 'pop' },\n                    { include: '#type_signature' },\n                    { defaultToken: 'meta.declaration.instance.haskell' }] },\n            { token: 'keyword.other.haskell',\n                regex: 'import',\n                push: [{ token: 'meta.import.haskell', regex: '$|;|^', next: 'pop' },\n                    { token: 'keyword.other.haskell', regex: 'qualified|as|hiding' },\n                    { include: '#module_name' },\n                    { include: '#module_exports' },\n                    { defaultToken: 'meta.import.haskell' }] },\n            { token: ['keyword.other.haskell', 'meta.deriving.haskell'],\n                regex: '(deriving)(\\\\s*\\\\()',\n                push: [{ token: 'meta.deriving.haskell', regex: '\\\\)', next: 'pop' },\n                    { token: 'entity.other.inherited-class.haskell',\n                        regex: '\\\\b[A-Z][a-zA-Z_\\']*' },\n                    { defaultToken: 'meta.deriving.haskell' }] },\n            { token: 'keyword.other.haskell',\n                regex: '\\\\b(?:deriving|where|data|type|case|of|let|in|newtype|default)\\\\b' },\n            { token: 'keyword.operator.haskell', regex: '\\\\binfix[lr]?\\\\b' },\n            { token: 'keyword.control.haskell',\n                regex: '\\\\b(?:do|if|then|else)\\\\b' },\n            { token: 'constant.numeric.float.haskell',\n                regex: '\\\\b(?:[0-9]+\\\\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\\\\b',\n                comment: 'Floats are always decimal' },\n            { token: 'constant.numeric.haskell',\n                regex: '\\\\b(?:[0-9]+|0(?:[xX][0-9a-fA-F]+|[oO][0-7]+))\\\\b' },\n            { token: ['meta.preprocessor.c',\n                    'punctuation.definition.preprocessor.c',\n                    'meta.preprocessor.c'],\n                regex: '^(\\\\s*)(#)(\\\\s*\\\\w+)',\n                comment: 'In addition to Haskell\\'s \"native\" syntax, GHC permits the C preprocessor to be run on a source file.' },\n            { include: '#pragma' },\n            { token: 'punctuation.definition.string.begin.haskell',\n                regex: '\"',\n                push: [{ token: 'punctuation.definition.string.end.haskell',\n                        regex: '\"',\n                        next: 'pop' },\n                    { token: 'constant.character.escape.haskell',\n                        regex: '\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\"\\'\\\\&])' },\n                    { token: 'constant.character.escape.octal.haskell',\n                        regex: '\\\\\\\\o[0-7]+|\\\\\\\\x[0-9A-Fa-f]+|\\\\\\\\[0-9]+' },\n                    { token: 'constant.character.escape.control.haskell',\n                        regex: '\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]' },\n                    { defaultToken: 'string.quoted.double.haskell' }] },\n            { token: ['punctuation.definition.string.begin.haskell',\n                    'string.quoted.single.haskell',\n                    'constant.character.escape.haskell',\n                    'constant.character.escape.octal.haskell',\n                    'constant.character.escape.hexadecimal.haskell',\n                    'constant.character.escape.control.haskell',\n                    'punctuation.definition.string.end.haskell'],\n                regex: '(\\')(?:([\\\\ -\\\\[\\\\]-~])|(\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\"\\'\\\\&]))|(\\\\\\\\o[0-7]+)|(\\\\\\\\x[0-9A-Fa-f]+)|(\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]))(\\')' },\n            { token: ['meta.function.type-declaration.haskell',\n                    'entity.name.function.haskell',\n                    'meta.function.type-declaration.haskell',\n                    'keyword.other.double-colon.haskell'],\n                regex: '^(\\\\s*)([a-z_][a-zA-Z0-9_\\']*|\\\\([|!%$+\\\\-.,=</>]+\\\\))(\\\\s*)(::)',\n                push: [{ token: 'meta.function.type-declaration.haskell',\n                        regex: '$',\n                        next: 'pop' },\n                    { include: '#type_signature' },\n                    { defaultToken: 'meta.function.type-declaration.haskell' }] },\n            { token: 'support.constant.haskell',\n                regex: '\\\\b(?:Just|Nothing|Left|Right|True|False|LT|EQ|GT|\\\\(\\\\)|\\\\[\\\\])\\\\b' },\n            { token: 'constant.other.haskell', regex: '\\\\b[A-Z]\\\\w*\\\\b' },\n            { include: '#comments' },\n            { token: 'support.function.prelude.haskell',\n                regex: '\\\\b(?:abs|acos|acosh|all|and|any|appendFile|applyM|asTypeOf|asin|asinh|atan|atan2|atanh|break|catch|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\\\\b' },\n            { include: '#infix_op' },\n            { token: 'keyword.operator.haskell',\n                regex: '[|!%$?~+:\\\\-.=</>\\\\\\\\]+',\n                comment: 'In case this regex seems overly general, note that Haskell permits the definition of new operators which can be nearly any string of punctuation characters, such as $%^&*.' },\n            { token: 'punctuation.separator.comma.haskell', regex: ',' }],\n        '#block_comment': [{ token: 'punctuation.definition.comment.haskell',\n                regex: '\\\\{-(?!#)',\n                push: [{ include: '#block_comment' },\n                    { token: 'punctuation.definition.comment.haskell',\n                        regex: '-\\\\}',\n                        next: 'pop' },\n                    { defaultToken: 'comment.block.haskell' }] }],\n        '#comments': [{ token: 'punctuation.definition.comment.haskell',\n                regex: '--.*',\n                push_: [{ token: 'comment.line.double-dash.haskell',\n                        regex: '$',\n                        next: 'pop' },\n                    { defaultToken: 'comment.line.double-dash.haskell' }] },\n            { include: '#block_comment' }],\n        '#infix_op': [{ token: 'entity.name.function.infix.haskell',\n                regex: '\\\\([|!%$+:\\\\-.=</>]+\\\\)|\\\\(,+\\\\)' }],\n        '#module_exports': [{ token: 'meta.declaration.exports.haskell',\n                regex: '\\\\(',\n                push: [{ token: 'meta.declaration.exports.haskell.end',\n                        regex: '\\\\)',\n                        next: 'pop' },\n                    { token: 'entity.name.function.haskell',\n                        regex: '\\\\b[a-z][a-zA-Z_\\']*' },\n                    { token: 'storage.type.haskell', regex: '\\\\b[A-Z][A-Za-z_\\']*' },\n                    { token: 'punctuation.separator.comma.haskell', regex: ',' },\n                    { include: '#infix_op' },\n                    { token: 'meta.other.unknown.haskell',\n                        regex: '\\\\(.*?\\\\)',\n                        comment: 'So named because I don\\'t know what to call this.' },\n                    { defaultToken: 'meta.declaration.exports.haskell.end' }] }],\n        '#module_name': [{ token: 'support.other.module.haskell',\n                regex: '[A-Z][A-Za-z._\\']*' }],\n        '#pragma': [{ token: 'meta.preprocessor.haskell',\n                regex: '\\\\{-#',\n                push: [{ token: 'meta.preprocessor.haskell',\n                        regex: '#-\\\\}',\n                        next: 'pop' },\n                    { token: 'keyword.other.preprocessor.haskell',\n                        regex: '\\\\b(?:LANGUAGE|UNPACK|INLINE)\\\\b' },\n                    { defaultToken: 'meta.preprocessor.haskell' }] }],\n        '#type_signature': [{ token: ['meta.class-constraint.haskell',\n                    'entity.other.inherited-class.haskell',\n                    'meta.class-constraint.haskell',\n                    'variable.other.generic-type.haskell',\n                    'meta.class-constraint.haskell',\n                    'keyword.other.big-arrow.haskell'],\n                regex: '(\\\\(\\\\s*)([A-Z][A-Za-z]*)(\\\\s+)([a-z][A-Za-z_\\']*)(\\\\)\\\\s*)(=>)' },\n            { include: '#pragma' },\n            { token: 'keyword.other.arrow.haskell', regex: '->' },\n            { token: 'keyword.other.big-arrow.haskell', regex: '=>' },\n            { token: 'support.type.prelude.haskell',\n                regex: '\\\\b(?:Int(?:eger)?|Maybe|Either|Bool|Float|Double|Char|String|Ordering|ShowS|ReadS|FilePath|IO(?:Error)?)\\\\b' },\n            { token: 'variable.other.generic-type.haskell',\n                regex: '\\\\b[a-z][a-zA-Z0-9_\\']*\\\\b' },\n            { token: 'storage.type.haskell',\n                regex: '\\\\b[A-Z][a-zA-Z0-9_\\']*\\\\b' },\n            { token: 'support.constant.unit.haskell', regex: '\\\\(\\\\)' },\n            { include: '#comments' }] };\n    this.normalizeRules();\n};\nHaskellHighlightRules.metaData = { fileTypes: ['hs'],\n    keyEquivalent: '^~H',\n    name: 'Haskell',\n    scopeName: 'source.haskell' };\noop.inherits(HaskellHighlightRules, TextHighlightRules);\nexports.HaskellHighlightRules = HaskellHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/haskell\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haskell_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HaskellHighlightRules = require(\"./haskell_highlight_rules\").HaskellHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = HaskellHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/haskell\";\n    this.snippetFileId = \"ace/snippets/haskell\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/haskell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-haskell_cabal.js",
    "content": "ace.define(\"ace/mode/haskell_cabal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/**\n * Haskell Cabal files highlighter (https://www.haskell.org/cabal/users-guide/developing-packages.html)\n **/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CabalHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"^\\\\s*--.*$\"\n            }, {\n                token: [\"keyword\"],\n                regex: /^(\\s*\\w.*?)(:(?:\\s+|$))/\n            }, {\n                token: \"constant.numeric\",\n                regex: /[\\d_]+(?:(?:[\\.\\d_]*)?)/\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"\n            }, {\n                token: \"markup.heading\",\n                regex: /^(\\w.*)$/\n            }\n        ]\n    };\n};\noop.inherits(CabalHighlightRules, TextHighlightRules);\nexports.CabalHighlightRules = CabalHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/haskell_cabal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){/*\n* Folding mode for Cabal files (Haskell): allow folding each seaction, including\n* the initial general section.\n*/\n\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.isHeading = function (session, row) {\n        var heading = \"markup.heading\";\n        var token = session.getTokens(row)[0];\n        return row == 0 || (token && token.type.lastIndexOf(heading, 0) === 0);\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        if (this.isHeading(session, row)) {\n            return \"start\";\n        }\n        else if (foldStyle === \"markbeginend\" && !(/^\\s*$/.test(session.getLine(row)))) {\n            var maxRow = session.getLength();\n            while (++row < maxRow) {\n                if (!(/^\\s*$/.test(session.getLine(row)))) {\n                    break;\n                }\n            }\n            if (row == maxRow || this.isHeading(session, row)) {\n                return \"end\";\n            }\n        }\n        return \"\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (this.isHeading(session, row)) {\n            while (++row < maxRow) {\n                if (this.isHeading(session, row)) {\n                    row--;\n                    break;\n                }\n            }\n            endRow = row;\n            if (endRow > startRow) {\n                while (endRow > startRow && /^\\s*$/.test(session.getLine(endRow)))\n                    endRow--;\n            }\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        }\n        else if (this.getFoldWidget(session, foldStyle, row) === \"end\") {\n            var endRow = row;\n            var endColumn = session.getLine(endRow).length;\n            while (--row >= 0) {\n                if (this.isHeading(session, row)) {\n                    break;\n                }\n            }\n            var line = session.getLine(row);\n            var startColumn = line.length;\n            return new Range(row, startColumn, endRow, endColumn);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/haskell_cabal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haskell_cabal_highlight_rules\",\"ace/mode/folding/haskell_cabal\"], function(require, exports, module){/**\n* Haskell Cabal files mode (https://www.haskell.org/cabal/users-guide/developing-packages.html)\n**/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CabalHighlightRules = require(\"./haskell_cabal_highlight_rules\").CabalHighlightRules;\nvar FoldMode = require(\"./folding/haskell_cabal\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CabalHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/haskell_cabal\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/haskell_cabal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-haxe.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/haxe_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HaxeHighlightRules = function () {\n    var keywords = (\"break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std\");\n    var buildinConstants = (\"null|true|false\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({<]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}>]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\noop.inherits(HaxeHighlightRules, TextHighlightRules);\nexports.HaxeHighlightRules = HaxeHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/haxe\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haxe_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HaxeHighlightRules = require(\"./haxe_highlight_rules\").HaxeHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = HaxeHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/haxe\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/haxe\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-hjson.js",
    "content": "ace.define(\"ace/mode/hjson_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from Hjson.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HjsonHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                include: \"#comments\"\n            }, {\n                include: \"#rootObject\"\n            }, {\n                include: \"#value\"\n            }],\n        \"#array\": [{\n                token: \"paren.lparen\",\n                regex: /\\[/,\n                push: [{\n                        token: \"paren.rparen\",\n                        regex: /\\]/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#value\"\n                    }, {\n                        include: \"#comments\"\n                    }, {\n                        token: \"text\",\n                        regex: /,|$/\n                    }, {\n                        token: \"invalid.illegal\",\n                        regex: /[^\\s\\]]/\n                    }, {\n                        defaultToken: \"array\"\n                    }]\n            }],\n        \"#comments\": [{\n                token: [\n                    \"comment.punctuation\",\n                    \"comment.line\"\n                ],\n                regex: /(#)(.*$)/\n            }, {\n                token: \"comment.punctuation\",\n                regex: /\\/\\*/,\n                push: [{\n                        token: \"comment.punctuation\",\n                        regex: /\\*\\//,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.block\"\n                    }]\n            }, {\n                token: [\n                    \"comment.punctuation\",\n                    \"comment.line\"\n                ],\n                regex: /(\\/\\/)(.*$)/\n            }],\n        \"#constant\": [{\n                token: \"constant\",\n                regex: /\\b(?:true|false|null)\\b/\n            }],\n        \"#keyname\": [{\n                token: \"keyword\",\n                regex: /(?:[^,\\{\\[\\}\\]\\s]+|\"(?:[^\"\\\\]|\\\\.)*\")\\s*(?=:)/\n            }],\n        \"#mstring\": [{\n                token: \"string\",\n                regex: /'''/,\n                push: [{\n                        token: \"string\",\n                        regex: /'''/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        \"#number\": [{\n                token: \"constant.numeric\",\n                regex: /-?(?:0|[1-9]\\d*)(?:(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)?/,\n                comment: \"handles integer and decimal numbers\"\n            }],\n        \"#object\": [{\n                token: \"paren.lparen\",\n                regex: /\\{/,\n                push: [{\n                        token: \"paren.rparen\",\n                        regex: /\\}/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#keyname\"\n                    }, {\n                        include: \"#value\"\n                    }, {\n                        token: \"text\",\n                        regex: /:/\n                    }, {\n                        token: \"text\",\n                        regex: /,/\n                    }, {\n                        defaultToken: \"paren\"\n                    }]\n            }],\n        \"#rootObject\": [{\n                token: \"paren\",\n                regex: /(?=\\s*(?:[^,\\{\\[\\}\\]\\s]+|\"(?:[^\"\\\\]|\\\\.)*\")\\s*:)/,\n                push: [{\n                        token: \"paren.rparen\",\n                        regex: /---none---/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#keyname\"\n                    }, {\n                        include: \"#value\"\n                    }, {\n                        token: \"text\",\n                        regex: /:/\n                    }, {\n                        token: \"text\",\n                        regex: /,/\n                    }, {\n                        defaultToken: \"paren\"\n                    }]\n            }],\n        \"#string\": [{\n                token: \"string\",\n                regex: /\"/,\n                push: [{\n                        token: \"string\",\n                        regex: /\"/,\n                        next: \"pop\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/\n                    }, {\n                        token: \"invalid.illegal\",\n                        regex: /\\\\./\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        \"#ustring\": [{\n                token: \"string\",\n                regex: /\\b[^:,0-9\\-\\{\\[\\}\\]\\s].*$/\n            }],\n        \"#value\": [{\n                include: \"#constant\"\n            }, {\n                include: \"#number\"\n            }, {\n                include: \"#string\"\n            }, {\n                include: \"#array\"\n            }, {\n                include: \"#object\"\n            }, {\n                include: \"#comments\"\n            }, {\n                include: \"#mstring\"\n            }, {\n                include: \"#ustring\"\n            }]\n    };\n    this.normalizeRules();\n};\nHjsonHighlightRules.metaData = {\n    fileTypes: [\"hjson\"],\n    foldingStartMarker: \"(?x:     # turn on extended mode\\n              ^    # a line beginning with\\n              \\\\s*    # some optional space\\n              [{\\\\[]  # the start of an object or array\\n              (?!    # but not followed by\\n              .*   # whatever\\n              [}\\\\]]  # and the close of an object or array\\n              ,?   # an optional comma\\n              \\\\s*  # some optional space\\n              $    # at the end of the line\\n              )\\n              |    # ...or...\\n              [{\\\\[]  # the start of an object or array\\n              \\\\s*    # some optional space\\n              $    # at the end of the line\\n            )\",\n    foldingStopMarker: \"(?x:   # turn on extended mode\\n             ^    # a line beginning with\\n             \\\\s*  # some optional space\\n             [}\\\\]]  # and the close of an object or array\\n             )\",\n    keyEquivalent: \"^~J\",\n    name: \"Hjson\",\n    scopeName: \"source.hjson\"\n};\noop.inherits(HjsonHighlightRules, TextHighlightRules);\nexports.HjsonHighlightRules = HjsonHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/hjson\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/hjson_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HjsonHighlightRules = require(\"./hjson_highlight_rules\").HjsonHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = HjsonHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/hjson\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/hjson\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-html.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/html\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-html_elixir.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from https://raw.githubusercontent.com/elixir-lang/elixir-tmbundle/master/Syntaxes/Elixir.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ElixirHighlightRules = function () {\n    this.$rules = { start: [{ token: ['meta.module.elixir',\n                    'keyword.control.module.elixir',\n                    'meta.module.elixir',\n                    'entity.name.type.module.elixir'],\n                regex: '^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)' },\n            { token: 'comment.documentation.heredoc',\n                regex: '@(?:module|type)?doc (?:~[a-z])?\"\"\"',\n                push: [{ token: 'comment.documentation.heredoc',\n                        regex: '\\\\s*\"\"\"',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'comment.documentation.heredoc' }],\n                comment: '@doc with heredocs is treated as documentation' },\n            { token: 'comment.documentation.heredoc',\n                regex: '@(?:module|type)?doc ~[A-Z]\"\"\"',\n                push: [{ token: 'comment.documentation.heredoc',\n                        regex: '\\\\s*\"\"\"',\n                        next: 'pop' },\n                    { defaultToken: 'comment.documentation.heredoc' }],\n                comment: '@doc with heredocs is treated as documentation' },\n            { token: 'comment.documentation.heredoc',\n                regex: '@(?:module|type)?doc (?:~[a-z])?\\'\\'\\'',\n                push: [{ token: 'comment.documentation.heredoc',\n                        regex: '\\\\s*\\'\\'\\'',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'comment.documentation.heredoc' }],\n                comment: '@doc with heredocs is treated as documentation' },\n            { token: 'comment.documentation.heredoc',\n                regex: '@(?:module|type)?doc ~[A-Z]\\'\\'\\'',\n                push: [{ token: 'comment.documentation.heredoc',\n                        regex: '\\\\s*\\'\\'\\'',\n                        next: 'pop' },\n                    { defaultToken: 'comment.documentation.heredoc' }],\n                comment: '@doc with heredocs is treated as documentation' },\n            { token: 'comment.documentation.false',\n                regex: '@(?:module|type)?doc false',\n                comment: '@doc false is treated as documentation' },\n            { token: 'comment.documentation.string',\n                regex: '@(?:module|type)?doc \"',\n                push: [{ token: 'comment.documentation.string',\n                        regex: '\"',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'comment.documentation.string' }],\n                comment: '@doc with string is treated as documentation' },\n            { token: 'keyword.control.elixir',\n                regex: '\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])' },\n            { token: 'keyword.operator.elixir',\n                regex: '\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b',\n                comment: ' as above, just doesn\\'t need a \\'end\\' and does a logic operation' },\n            { token: 'constant.language.elixir',\n                regex: '\\\\b(?:nil|true|false)\\\\b(?![?!])' },\n            { token: 'variable.language.elixir',\n                regex: '\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])' },\n            { token: ['punctuation.definition.variable.elixir',\n                    'variable.other.readwrite.module.elixir'],\n                regex: '(@)([a-zA-Z_]\\\\w*)' },\n            { token: ['punctuation.definition.variable.elixir',\n                    'variable.other.anonymous.elixir'],\n                regex: '(&)(\\\\d*)' },\n            { token: 'variable.other.constant.elixir',\n                regex: '\\\\b[A-Z]\\\\w*\\\\b' },\n            { token: 'constant.numeric.elixir',\n                regex: '\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b' },\n            { token: 'punctuation.definition.constant.elixir',\n                regex: ':\\'',\n                push: [{ token: 'punctuation.definition.constant.elixir',\n                        regex: '\\'',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'constant.other.symbol.single-quoted.elixir' }] },\n            { token: 'punctuation.definition.constant.elixir',\n                regex: ':\"',\n                push: [{ token: 'punctuation.definition.constant.elixir',\n                        regex: '\"',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'constant.other.symbol.double-quoted.elixir' }] },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '(?:\\'\\'\\')',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?>\\'\\'\\')',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '^\\\\s*\\'\\'\\'',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'support.function.variable.quoted.single.heredoc.elixir' }],\n                comment: 'Single-quoted heredocs' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '\\'',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\'',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'support.function.variable.quoted.single.elixir' }],\n                comment: 'single quoted string (allows for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '(?:\"\"\")',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?>\"\"\")',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '^\\\\s*\"\"\"',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.quoted.double.heredoc.elixir' }],\n                comment: 'Double-quoted heredocs' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '\"',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\"',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.quoted.double.elixir' }],\n                comment: 'double quoted string (allows for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[a-z](?:\"\"\")',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '~[a-z](?>\"\"\")',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '^\\\\s*\"\"\"',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.quoted.double.heredoc.elixir' }],\n                comment: 'Double-quoted heredocs sigils' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[a-z]\\\\{',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\}[a-z]*',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.interpolated.elixir' }],\n                comment: 'sigil (allow for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[a-z]\\\\[',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\][a-z]*',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.interpolated.elixir' }],\n                comment: 'sigil (allow for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[a-z]\\\\<',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\>[a-z]*',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.interpolated.elixir' }],\n                comment: 'sigil (allow for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[a-z]\\\\(',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\)[a-z]*',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.interpolated.elixir' }],\n                comment: 'sigil (allow for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[a-z][^\\\\w]',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '[^\\\\w][a-z]*',\n                        next: 'pop' },\n                    { include: '#interpolated_elixir' },\n                    { include: '#escaped_char' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.interpolated.elixir' }],\n                comment: 'sigil (allow for interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[A-Z](?:\"\"\")',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '~[A-Z](?>\"\"\")',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '^\\\\s*\"\"\"',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.other.literal.upper.elixir' }],\n                comment: 'Double-quoted heredocs sigils' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[A-Z]\\\\{',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\}[a-z]*',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.other.literal.upper.elixir' }],\n                comment: 'sigil (without interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[A-Z]\\\\[',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\][a-z]*',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.other.literal.upper.elixir' }],\n                comment: 'sigil (without interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[A-Z]\\\\<',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\>[a-z]*',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.other.literal.upper.elixir' }],\n                comment: 'sigil (without interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[A-Z]\\\\(',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '\\\\)[a-z]*',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.other.literal.upper.elixir' }],\n                comment: 'sigil (without interpolation)' },\n            { token: 'punctuation.definition.string.begin.elixir',\n                regex: '~[A-Z][^\\\\w]',\n                push: [{ token: 'punctuation.definition.string.end.elixir',\n                        regex: '[^\\\\w][a-z]*',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.other.literal.upper.elixir' }],\n                comment: 'sigil (without interpolation)' },\n            { token: ['punctuation.definition.constant.elixir', 'constant.other.symbol.elixir'],\n                regex: '(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)',\n                comment: 'symbols' },\n            { token: 'punctuation.definition.constant.elixir',\n                regex: '(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)',\n                comment: 'symbols' },\n            { token: ['punctuation.definition.comment.elixir',\n                    'comment.line.number-sign.elixir'],\n                regex: '(#)(.*)' },\n            { token: 'constant.numeric.elixir',\n                regex: '\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                originalRegex: '(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])',\n                comment: '\\n\\t\\t\\tmatches questionmark-letters.\\n\\n\\t\\t\\texamples (1st alternation = hex):\\n\\t\\t\\t?\\\\x1     ?\\\\x61\\n\\n\\t\\t\\texamples (2rd alternation = escaped):\\n\\t\\t\\t?\\\\n      ?\\\\b\\n\\n\\t\\t\\texamples (3rd alternation = normal):\\n\\t\\t\\t?a       ?A       ?0 \\n\\t\\t\\t?*       ?\"       ?( \\n\\t\\t\\t?.       ?#\\n\\t\\t\\t\\n\\t\\t\\tthe negative lookbehind prevents against matching\\n\\t\\t\\tp(42.tainted?)\\n\\t\\t\\t' },\n            { token: 'keyword.operator.assignment.augmented.elixir',\n                regex: '\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=' },\n            { token: 'keyword.operator.comparison.elixir',\n                regex: '===?|!==?|<=?|>=?' },\n            { token: 'keyword.operator.bitwise.elixir',\n                regex: '\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}' },\n            { token: 'keyword.operator.logical.elixir',\n                regex: '!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b',\n                originalRegex: '(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b' },\n            { token: 'keyword.operator.arithmetic.elixir',\n                regex: '\\\\*|\\\\+|\\\\-|/' },\n            { token: 'keyword.operator.other.elixir',\n                regex: '\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>' },\n            { token: 'keyword.operator.assignment.elixir', regex: '=' },\n            { token: 'punctuation.separator.other.elixir', regex: ':' },\n            { token: 'punctuation.separator.statement.elixir',\n                regex: '\\\\;' },\n            { token: 'punctuation.separator.object.elixir', regex: ',' },\n            { token: 'punctuation.separator.method.elixir', regex: '\\\\.' },\n            { token: 'punctuation.section.scope.elixir', regex: '\\\\{|\\\\}' },\n            { token: 'punctuation.section.array.elixir', regex: '\\\\[|\\\\]' },\n            { token: 'punctuation.section.function.elixir',\n                regex: '\\\\(|\\\\)' }],\n        '#escaped_char': [{ token: 'constant.character.escape.elixir',\n                regex: '\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)' }],\n        '#interpolated_elixir': [{ token: ['source.elixir.embedded.source',\n                    'source.elixir.embedded.source.empty'],\n                regex: '(#\\\\{)(\\\\})' },\n            { todo: { token: 'punctuation.section.embedded.elixir',\n                    regex: '#\\\\{',\n                    push: [{ token: 'punctuation.section.embedded.elixir',\n                            regex: '\\\\}',\n                            next: 'pop' },\n                        { include: '#nest_curly_and_self' },\n                        { include: '$self' },\n                        { defaultToken: 'source.elixir.embedded.source' }] } }],\n        '#nest_curly_and_self': [{ token: 'punctuation.section.scope.elixir',\n                regex: '\\\\{',\n                push: [{ token: 'punctuation.section.scope.elixir',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { include: '#nest_curly_and_self' }] },\n            { include: '$self' }],\n        '#regex_sub': [{ include: '#interpolated_elixir' },\n            { include: '#escaped_char' },\n            { token: ['punctuation.definition.arbitrary-repitition.elixir',\n                    'string.regexp.arbitrary-repitition.elixir',\n                    'string.regexp.arbitrary-repitition.elixir',\n                    'punctuation.definition.arbitrary-repitition.elixir'],\n                regex: '(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})' },\n            { token: 'punctuation.definition.character-class.elixir',\n                regex: '\\\\[(?:\\\\^?\\\\])?',\n                push: [{ token: 'punctuation.definition.character-class.elixir',\n                        regex: '\\\\]',\n                        next: 'pop' },\n                    { include: '#escaped_char' },\n                    { defaultToken: 'string.regexp.character-class.elixir' }] },\n            { token: 'punctuation.definition.group.elixir',\n                regex: '\\\\(',\n                push: [{ token: 'punctuation.definition.group.elixir',\n                        regex: '\\\\)',\n                        next: 'pop' },\n                    { include: '#regex_sub' },\n                    { defaultToken: 'string.regexp.group.elixir' }] },\n            { token: ['punctuation.definition.comment.elixir',\n                    'comment.line.number-sign.elixir'],\n                regex: '(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)',\n                originalRegex: '(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$',\n                comment: 'We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.' }] };\n    this.normalizeRules();\n};\nElixirHighlightRules.metaData = { comment: 'Textmate bundle for Elixir Programming Language.',\n    fileTypes: ['ex', 'exs'],\n    firstLineMatch: '^#!/.*\\\\belixir',\n    foldingStartMarker: '(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$',\n    foldingStopMarker: '^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)',\n    keyEquivalent: '^~E',\n    name: 'Elixir',\n    scopeName: 'source.elixir' };\noop.inherits(ElixirHighlightRules, TextHighlightRules);\nexports.ElixirHighlightRules = ElixirHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/elixir_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar ElixirHighlightRules = require(\"./elixir_highlight_rules\").ElixirHighlightRules;\nvar HtmlElixirHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var startRules = [\n        {\n            regex: \"<%%|%%>\",\n            token: \"constant.language.escape\"\n        }, {\n            token: \"comment.start.eex\",\n            regex: \"<%#\",\n            push: [{\n                    token: \"comment.end.eex\",\n                    regex: \"%>\",\n                    next: \"pop\",\n                    defaultToken: \"comment\"\n                }]\n        }, {\n            token: \"support.elixir_tag\",\n            regex: \"<%+(?!>)[-=]?\",\n            push: \"elixir-start\"\n        }\n    ];\n    var endRules = [\n        {\n            token: \"support.elixir_tag\",\n            regex: \"%>\",\n            next: \"pop\"\n        }, {\n            token: \"comment\",\n            regex: \"#(?:[^%]|%[^>])*\"\n        }\n    ];\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n    this.embedRules(ElixirHighlightRules, \"elixir-\", endRules, [\"start\"]);\n    this.normalizeRules();\n};\noop.inherits(HtmlElixirHighlightRules, HtmlHighlightRules);\nexports.HtmlElixirHighlightRules = HtmlElixirHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elixir_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ElixirHighlightRules = require(\"./elixir_highlight_rules\").ElixirHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = ElixirHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/elixir\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/html_elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_elixir_highlight_rules\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/elixir\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlElixirHighlightRules = require(\"./html_elixir_highlight_rules\").HtmlElixirHighlightRules;\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar ElixirMode = require(\"./elixir\").Mode;\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = HtmlElixirHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"elixir-\": ElixirMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.$id = \"ace/mode/html_elixir\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/html_elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-html_ruby.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token: \"constant.other.symbol.ruby\",\n    regex: \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\nexports.qString = {\n    token: \"string\",\n    regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\nexports.qqString = {\n    token: \"string\",\n    regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\nexports.tString = {\n    token: \"string\",\n    regex: \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\nvar constantNumericHex = exports.constantNumericHex = {\n    token: \"constant.numeric\",\n    regex: \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\nvar constantNumericBinary = exports.constantNumericBinary = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[bB][01](?:[01]|_(?=[01]))*)\\b/\n};\nvar constantNumericDecimal = exports.constantNumericDecimal = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[dD](?:[1-9](?:[\\d]|_(?=[\\d]))*|0))\\b/\n};\nvar constantNumericOctal = exports.constantNumericDecimal = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[oO]?(?:[1-7](?:[0-7]|_(?=[0-7]))*|0))\\b/\n};\nvar constantNumericRational = exports.constantNumericRational = {\n    token: \"constant.numeric\",\n    regex: /\\b([\\d]+(?:[./][\\d]+)?ri?)\\b/\n};\nvar constantNumericComplex = exports.constantNumericComplex = {\n    token: \"constant.numeric\",\n    regex: /\\b([\\d]i)\\b/\n};\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token: \"constant.numeric\",\n    regex: \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?i?\\\\b\"\n};\nvar instanceVariable = exports.instanceVariable = {\n    token: \"variable.instance\",\n    regex: \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\nvar RubyHighlightRules = function () {\n    var builtinFunctions = (\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many|p|warn|refine|using|module_function|extend|alias_method|\" +\n        \"private_class_method|remove_method|undef_method\");\n    var keywords = (\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|__ENCODING__|prepend\");\n    var buildinConstants = (\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING|RUBY_PATCHLEVEL|RUBY_REVISION|RUBY_COPYRIGHT|RUBY_ENGINE|RUBY_ENGINE_VERSION|RUBY_DESCRIPTION\");\n    var builtinVariables = (\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n    var escapedChars = \"\\\\\\\\(?:n(?:[1-7][0-7]{0,2}|0)|[nsrtvfbae'\\\"\\\\\\\\]|c(?:\\\\\\\\M-)?.|M-(?:\\\\\\\\C-|\\\\\\\\c)?.|C-(?:\\\\\\\\M-)?.|[0-7]{3}|x[\\\\da-fA-F]{2}|u[\\\\da-fA-F]{4}|u{[\\\\da-fA-F]{1,6}(?:\\\\s[\\\\da-fA-F]{1,6})*})\";\n    var closeParen = {\n        \"(\": \")\",\n        \"[\": \"]\",\n        \"{\": \"}\",\n        \"<\": \">\",\n        \"^\": \"^\",\n        \"|\": \"|\",\n        \"%\": \"%\"\n    };\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"comment.multiline\",\n                regex: \"^=begin(?=$|\\\\s.*$)\",\n                next: \"comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: /[/](?=.*\\/)/,\n                next: \"regex\"\n            },\n            [{\n                    token: [\"constant.other.symbol.ruby\", \"string.start\"],\n                    regex: /(:)?(\")/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: escapedChars\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /\"/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: \"string.start\",\n                    regex: /`/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: escapedChars\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /`/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: [\"constant.other.symbol.ruby\", \"string.start\"],\n                    regex: /(:)?(')/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: /\\\\['\\\\]/\n                        }, {\n                            token: \"string.end\",\n                            regex: /'/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: \"string.start\",\n                    regex: /%[qwx]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"qStateWithoutInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"string.start\",\n                    regex: /%[QWX]?([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"qStateWithInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"constant.other.symbol.ruby\",\n                    regex: /%[si]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"sStateWithoutInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"constant.other.symbol.ruby\",\n                    regex: /%[SI]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"sStateWithInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"string.regexp\",\n                    regex: /%[r]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"rState\";\n                        return this.token;\n                    }\n                }],\n            {\n                token: \"punctuation\",\n                regex: \"::\"\n            },\n            instanceVariable,\n            {\n                token: \"variable.global\",\n                regex: \"[$][a-zA-Z_\\\\d]+\"\n            }, {\n                token: \"support.class\",\n                regex: \"[A-Z][a-zA-Z_\\\\d]*\"\n            }, {\n                token: [\"punctuation.operator\", \"support.function\"],\n                regex: /(\\.)([a-zA-Z_\\d]+)(?=\\()/\n            }, {\n                token: [\"punctuation.operator\", \"identifier\"],\n                regex: /(\\.)([a-zA-Z_][a-zA-Z_\\d]*)/\n            }, {\n                token: \"string.character\",\n                regex: \"\\\\B\\\\?(?:\" + escapedChars + \"|\\\\S)\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /\\?(?=.+:)/\n            },\n            constantNumericRational,\n            constantNumericComplex,\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n            constantNumericBinary,\n            constantNumericDecimal,\n            constantNumericOctal,\n            {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"punctuation.separator.key-value\",\n                regex: \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch: function (value, currentState, stack) {\n                    var next = (value[2] == '-' || value[2] == '~') ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        { type: \"constant\", value: tokens[1] },\n                        { type: \"string\", value: tokens[2] },\n                        { type: \"support.class\", value: tokens[3] },\n                        { type: \"string\", value: tokens[4] }\n                    ];\n                },\n                regex: \"(<<[-~]?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }],\n                    indentedHeredoc: [{\n                            token: \"string\",\n                            regex: \"^ +\"\n                        }, {\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }]\n                }\n            }, {\n                regex: \"$\",\n                token: \"empty\",\n                next: function (currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\||\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\",\n                onMatch: function (value, currentState, stack) {\n                    this.next = '';\n                    if (value == \"}\" && stack.length > 1 && stack[1] != \"start\") {\n                        stack.shift();\n                        this.next = stack.shift();\n                    }\n                    return this.token;\n                }\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.multiline\",\n                regex: \"^=end(?=$|\\\\s.*$)\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \".+\"\n            }\n        ],\n        \"qStateWithInterpolation\": [{\n                token: \"string.start\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"string\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapedChars\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"string.end\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"string\";\n                }\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qStateWithoutInterpolation\": [{\n                token: \"string.start\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"string\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\['\\\\]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"string.end\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"string\";\n                }\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"sStateWithoutInterpolation\": [{\n                token: \"constant.other.symbol.ruby\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                token: \"constant.other.symbol.ruby\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                defaultToken: \"constant.other.symbol.ruby\"\n            }],\n        \"sStateWithInterpolation\": [{\n                token: \"constant.other.symbol.ruby\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapedChars\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"constant.other.symbol.ruby\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                defaultToken: \"constant.other.symbol.ruby\"\n            }],\n        \"rState\": [{\n                token: \"string.regexp\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.language.escape\";\n                }\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"string.regexp\",\n                regex: /\\//\n            }, {\n                token: \"string.regexp\",\n                regex: /[)\\]>}^|%][imxouesn]*/, onMatch: function (val, state, stack) {\n                    if (stack.length && val[0] === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.language.escape\";\n                }\n            },\n            { include: \"regex\" },\n            {\n                defaultToken: \"string.regexp\"\n            }],\n        \"regex\": [\n            {\n                token: \"regexp.keyword\",\n                regex: /\\\\[wWdDhHsS]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\[AGbBzZ]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\g<[a-zA-Z0-9]*>/\n            }, {\n                token: [\"constant.language.escape\", \"regexp.keyword\", \"constant.language.escape\"],\n                regex: /(\\\\p{\\^?)(Alnum|Alpha|Blank|Cntrl|Digit|Graph|Lower|Print|Punct|Space|Upper|XDigit|Word|ASCII|Any|Assigned|Arabic|Armenian|Balinese|Bengali|Bopomofo|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Ethiopic|Georgian|Glagolitic|Gothic|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hebrew|Hiragana|Inherited|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Lao|Latin|Lepcha|Limbu|Linear_B|Lycian|Lydian|Malayalam|Mongolian|Myanmar|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Italic|Old_Persian|Oriya|Osmanya|Phags_Pa|Phoenician|Rejang|Runic|Saurashtra|Shavian|Sinhala|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Ugaritic|Vai|Yi|Ll|Lm|Lt|Lu|Lo|Mn|Mc|Me|Nd|Nl|Pc|Pd|Ps|Pe|Pi|Pf|Po|No|Sm|Sc|Sk|So|Zs|Zl|Zp|Cc|Cf|Cn|Co|Cs|N|L|M|P|S|Z|C)(})/\n            }, {\n                token: [\"constant.language.escape\", \"invalid\", \"constant.language.escape\"],\n                regex: /(\\\\p{\\^?)([^/]*)(})/\n            }, {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: /[/][imxouesn]*/,\n                next: \"start\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?(?:[:=!>]|<'?[a-zA-Z]*'?>|<[=!])|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"regexp.keyword\",\n                regex: /\\[\\[:(?:alnum|alpha|blank|cntrl|digit|graph|lower|print|punct|space|upper|xdigit|word|ascii):\\]\\]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                push: \"regex_character_class\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.keyword\",\n                regex: /\\\\[wWdDhHsS]/\n            }, {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: /&?&?\\[\\^?/,\n                push: \"regex_character_class\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                defaultToken: \"string.regexp.characterclass\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(RubyHighlightRules, TextHighlightRules);\nexports.RubyHighlightRules = RubyHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/ruby_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar HtmlRubyHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var startRules = [\n        {\n            regex: \"<%%|%%>\",\n            token: \"constant.language.escape\"\n        }, {\n            token: \"comment.start.erb\",\n            regex: \"<%#\",\n            push: [{\n                    token: \"comment.end.erb\",\n                    regex: \"%>\",\n                    next: \"pop\",\n                    defaultToken: \"comment\"\n                }]\n        }, {\n            token: \"support.ruby_tag\",\n            regex: \"<%+(?!>)[-=]?\",\n            push: \"ruby-start\"\n        }\n    ];\n    var endRules = [\n        {\n            token: \"support.ruby_tag\",\n            regex: \"%>\",\n            next: \"pop\"\n        }, {\n            token: \"comment\",\n            regex: \"#(?:[^%]|%[^>])*\"\n        }\n    ];\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n    this.embedRules(RubyHighlightRules, \"ruby-\", endRules, [\"start\"]);\n    this.normalizeRules();\n};\noop.inherits(HtmlRubyHighlightRules, HtmlHighlightRules);\nexports.HtmlRubyHighlightRules = HtmlRubyHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/folding/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar FoldMode = exports.FoldMode = function () {\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.indentKeywords = {\n        \"class\": 1,\n        \"def\": 1,\n        \"module\": 1,\n        \"do\": 1,\n        \"unless\": 1,\n        \"if\": 1,\n        \"while\": 1,\n        \"for\": 1,\n        \"until\": 1,\n        \"begin\": 1,\n        \"else\": 0,\n        \"elsif\": 0,\n        \"rescue\": 0,\n        \"ensure\": 0,\n        \"when\": 0,\n        \"end\": -1,\n        \"case\": 1,\n        \"=begin\": 1,\n        \"=end\": -1\n    };\n    this.foldingStartMarker = /(?:\\s|^)(def|do|while|class|unless|module|if|for|until|begin|else|elsif|case|rescue|ensure|when)\\b|({\\s*$)|(=begin)/;\n    this.foldingStopMarker = /(=end(?=$|\\s.*$))|(^\\s*})|\\b(end)\\b/;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n        if (isStart && !isEnd) {\n            var match = line.match(this.foldingStartMarker);\n            if (match[1]) {\n                if (match[1] == \"if\" || match[1] == \"else\" || match[1] == \"while\" || match[1] == \"until\" || match[1] == \"unless\") {\n                    if (match[1] == \"else\" && /^\\s*else\\s*$/.test(line) === false) {\n                        return;\n                    }\n                    if (/^\\s*(?:if|else|while|until|unless)\\s*/.test(line) === false) {\n                        return;\n                    }\n                }\n                if (match[1] == \"when\") {\n                    if (/\\sthen\\s/.test(line) === true) {\n                        return;\n                    }\n                }\n                if (session.getTokenAt(row, match.index + 2).type === \"keyword\")\n                    return \"start\";\n            }\n            else if (match[3]) {\n                if (session.getTokenAt(row, match.index + 1).type === \"comment.multiline\")\n                    return \"start\";\n            }\n            else {\n                return \"start\";\n            }\n        }\n        if (foldStyle != \"markbeginend\" || !isEnd || isStart && isEnd)\n            return \"\";\n        var match = line.match(this.foldingStopMarker);\n        if (match[3] === \"end\") {\n            if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                return \"end\";\n        }\n        else if (match[1]) {\n            if (session.getTokenAt(row, match.index + 1).type === \"comment.multiline\")\n                return \"end\";\n        }\n        else\n            return \"end\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1] || match[3])\n                return this.rubyBlock(session, row, match.index + 2);\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[3] === \"end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return this.rubyBlock(session, row, match.index + 1);\n            }\n            if (match[1] === \"=end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"comment.multiline\")\n                    return this.rubyBlock(session, row, match.index + 1);\n            }\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n    this.rubyBlock = function (session, row, column, tokenRange) {\n        var stream = new TokenIterator(session, row, column);\n        var token = stream.getCurrentToken();\n        if (!token || (token.type != \"keyword\" && token.type != \"comment.multiline\"))\n            return;\n        var val = token.value;\n        var line = session.getLine(row);\n        switch (token.value) {\n            case \"if\":\n            case \"unless\":\n            case \"while\":\n            case \"until\":\n                var checkToken = new RegExp(\"^\\\\s*\" + token.value);\n                if (!checkToken.test(line)) {\n                    return;\n                }\n                var dir = this.indentKeywords[val];\n                break;\n            case \"when\":\n                if (/\\sthen\\s/.test(line)) {\n                    return;\n                }\n            case \"elsif\":\n            case \"rescue\":\n            case \"ensure\":\n                var dir = 1;\n                break;\n            case \"else\":\n                var checkToken = new RegExp(\"^\\\\s*\" + token.value + \"\\\\s*$\");\n                if (!checkToken.test(line)) {\n                    return;\n                }\n                var dir = 1;\n                break;\n            default:\n                var dir = this.indentKeywords[val];\n                break;\n        }\n        var stack = [val];\n        if (!dir)\n            return;\n        var startColumn = dir === -1 ? session.getLine(row - 1).length : session.getLine(row).length;\n        var startRow = row;\n        var ranges = [];\n        ranges.push(stream.getCurrentTokenRange());\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        if (token.type == \"comment.multiline\") {\n            while (token = stream.step()) {\n                if (token.type !== \"comment.multiline\")\n                    continue;\n                if (dir == 1) {\n                    startColumn = 6;\n                    if (token.value == \"=end\") {\n                        break;\n                    }\n                }\n                else {\n                    if (token.value == \"=begin\") {\n                        break;\n                    }\n                }\n            }\n        }\n        else {\n            while (token = stream.step()) {\n                var ignore = false;\n                if (token.type !== \"keyword\")\n                    continue;\n                var level = dir * this.indentKeywords[token.value];\n                line = session.getLine(stream.getCurrentTokenRow());\n                switch (token.value) {\n                    case \"do\":\n                        for (var i = stream.$tokenIndex - 1; i >= 0; i--) {\n                            var prevToken = stream.$rowTokens[i];\n                            if (prevToken && (prevToken.value == \"while\" || prevToken.value == \"until\" || prevToken.value == \"for\")) {\n                                level = 0;\n                                break;\n                            }\n                        }\n                        break;\n                    case \"else\":\n                        var checkToken = new RegExp(\"^\\\\s*\" + token.value + \"\\\\s*$\");\n                        if (!checkToken.test(line) || val == \"case\") {\n                            level = 0;\n                            ignore = true;\n                        }\n                        break;\n                    case \"if\":\n                    case \"unless\":\n                    case \"while\":\n                    case \"until\":\n                        var checkToken = new RegExp(\"^\\\\s*\" + token.value);\n                        if (!checkToken.test(line)) {\n                            level = 0;\n                            ignore = true;\n                        }\n                        break;\n                    case \"when\":\n                        if (/\\sthen\\s/.test(line) || val == \"case\") {\n                            level = 0;\n                            ignore = true;\n                        }\n                        break;\n                }\n                if (level > 0) {\n                    stack.unshift(token.value);\n                }\n                else if (level <= 0 && ignore === false) {\n                    stack.shift();\n                    if (!stack.length) {\n                        if ((val == \"while\" || val == \"until\" || val == \"for\") && token.value != \"do\") {\n                            break;\n                        }\n                        if (token.value == \"do\" && dir == -1 && level != 0)\n                            break;\n                        if (token.value != \"do\")\n                            break;\n                    }\n                    if (level === 0) {\n                        stack.unshift(token.value);\n                    }\n                }\n            }\n        }\n        if (!token)\n            return null;\n        if (tokenRange) {\n            ranges.push(stream.getCurrentTokenRange());\n            return ranges;\n        }\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1) {\n            if (token.type === \"comment.multiline\") {\n                var endColumn = 6;\n            }\n            else {\n                var endColumn = session.getLine(row).length;\n            }\n            return new Range(row, endColumn, startRow - 1, startColumn);\n        }\n        else\n            return new Range(startRow, startColumn, row - 1, session.getLine(row - 1).length);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/ruby\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/ruby\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n    this.indentKeywords = this.foldingRules.indentKeywords;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when|elsif|unless|while|for|begin|rescue|ensure)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return /^\\s+(end|else|rescue|ensure)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length - tab.length, row, indent.length));\n        }\n    };\n    this.getMatching = function (session, row, column) {\n        if (row == undefined) {\n            var pos = session.selection.lead;\n            column = pos.column;\n            row = pos.row;\n        }\n        var startToken = session.getTokenAt(row, column);\n        if (startToken && startToken.value in this.indentKeywords)\n            return this.foldingRules.rubyBlock(session, row, column, true);\n    };\n    this.$id = \"ace/mode/ruby\";\n    this.snippetFileId = \"ace/snippets/ruby\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/html_ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_ruby_highlight_rules\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/ruby\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlRubyHighlightRules = require(\"./html_ruby_highlight_rules\").HtmlRubyHighlightRules;\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar RubyMode = require(\"./ruby\").Mode;\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = HtmlRubyHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"ruby-\": RubyMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.$id = \"ace/mode/html_ruby\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/html_ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-ini.js",
    "content": "ace.define(\"ace/mode/ini_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from tool\\tm bundles\\ini.tmbundle\\Syntaxes\\Ini.plist (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar escapeRe = \"\\\\\\\\(?:[\\\\\\\\0abtrn;#=:]|x[a-fA-F\\\\d]{4})\";\nvar IniHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                token: 'punctuation.definition.comment.ini',\n                regex: '#.*',\n                push_: [{\n                        token: 'comment.line.number-sign.ini',\n                        regex: '$|^',\n                        next: 'pop'\n                    }, {\n                        defaultToken: 'comment.line.number-sign.ini'\n                    }]\n            }, {\n                token: 'punctuation.definition.comment.ini',\n                regex: ';.*',\n                push_: [{\n                        token: 'comment.line.semicolon.ini',\n                        regex: '$|^',\n                        next: 'pop'\n                    }, {\n                        defaultToken: 'comment.line.semicolon.ini'\n                    }]\n            }, {\n                token: ['keyword.other.definition.ini', 'text', 'punctuation.separator.key-value.ini'],\n                regex: '\\\\b([a-zA-Z0-9_.-]+)\\\\b(\\\\s*)(=)'\n            }, {\n                token: ['punctuation.definition.entity.ini', 'constant.section.group-title.ini', 'punctuation.definition.entity.ini'],\n                regex: '^(\\\\[)(.*?)(\\\\])'\n            }, {\n                token: 'punctuation.definition.string.begin.ini',\n                regex: \"'\",\n                push: [{\n                        token: 'punctuation.definition.string.end.ini',\n                        regex: \"'\",\n                        next: 'pop'\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: escapeRe\n                    }, {\n                        defaultToken: 'string.quoted.single.ini'\n                    }]\n            }, {\n                token: 'punctuation.definition.string.begin.ini',\n                regex: '\"',\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: escapeRe\n                    }, {\n                        token: 'punctuation.definition.string.end.ini',\n                        regex: '\"',\n                        next: 'pop'\n                    }, {\n                        defaultToken: 'string.quoted.double.ini'\n                    }]\n            }]\n    };\n    this.normalizeRules();\n};\nIniHighlightRules.metaData = {\n    fileTypes: ['ini', 'conf'],\n    keyEquivalent: '^~I',\n    name: 'Ini',\n    scopeName: 'source.ini'\n};\noop.inherits(IniHighlightRules, TextHighlightRules);\nexports.IniHighlightRules = IniHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function () {\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/;\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var re = this.foldingStartMarker;\n        var line = session.getLine(row);\n        var m = line.match(re);\n        if (!m)\n            return;\n        var startName = m[1] + \".\";\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            if (/^\\s*$/.test(line))\n                continue;\n            m = line.match(re);\n            if (m && m[1].lastIndexOf(startName, 0) !== 0)\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ini_highlight_rules\",\"ace/mode/folding/ini\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar IniHighlightRules = require(\"./ini_highlight_rules\").IniHighlightRules;\nvar FoldMode = require(\"./folding/ini\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = IniHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \";\";\n    this.blockComment = null;\n    this.$id = \"ace/mode/ini\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/ini\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-io.js",
    "content": "ace.define(\"ace/mode/io_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from tm bundles\\io.tmbundle/Syntaxes/io.plist (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar IoHighlightRules = function () {\n    this.$rules = { start: [{ token: 'keyword.control.io',\n                regex: '\\\\b(?:if|ifTrue|ifFalse|ifTrueIfFalse|for|loop|reverseForeach|foreach|map|continue|break|while|do|return)\\\\b' },\n            { token: 'punctuation.definition.comment.io',\n                regex: '/\\\\*',\n                push: [{ token: 'punctuation.definition.comment.io',\n                        regex: '\\\\*/',\n                        next: 'pop' },\n                    { defaultToken: 'comment.block.io' }] },\n            { token: 'punctuation.definition.comment.io',\n                regex: '//',\n                push: [{ token: 'comment.line.double-slash.io',\n                        regex: '$',\n                        next: 'pop' },\n                    { defaultToken: 'comment.line.double-slash.io' }] },\n            { token: 'punctuation.definition.comment.io',\n                regex: '#',\n                push: [{ token: 'comment.line.number-sign.io', regex: '$', next: 'pop' },\n                    { defaultToken: 'comment.line.number-sign.io' }] },\n            { token: 'variable.language.io',\n                regex: '\\\\b(?:self|sender|target|proto|protos|parent)\\\\b',\n                comment: 'I wonder if some of this isn\\'t variable.other.language? --Allan; scoping this as variable.language to match Objective-C\\'s handling of \\'self\\', which is inconsistent with C++\\'s handling of \\'this\\' but perhaps intentionally so -- Rob' },\n            { token: 'keyword.operator.io',\n                regex: '<=|>=|=|:=|\\\\*|\\\\||\\\\|\\\\||\\\\+|-|/|&|&&|>|<|\\\\?|@|@@|\\\\b(?:and|or)\\\\b' },\n            { token: 'constant.other.io', regex: '\\\\bGL[\\\\w_]+\\\\b' },\n            { token: 'support.class.io', regex: '\\\\b[A-Z](?:\\\\w+)?\\\\b' },\n            { token: 'support.function.io',\n                regex: '\\\\b(?:clone|call|init|method|list|vector|block|\\\\w+(?=\\\\s*\\\\())\\\\b' },\n            { token: 'support.function.open-gl.io',\n                regex: '\\\\bgl(?:u|ut)?[A-Z]\\\\w+\\\\b' },\n            { token: 'punctuation.definition.string.begin.io',\n                regex: '\"\"\"',\n                push: [{ token: 'punctuation.definition.string.end.io',\n                        regex: '\"\"\"',\n                        next: 'pop' },\n                    { token: 'constant.character.escape.io', regex: '\\\\\\\\.' },\n                    { defaultToken: 'string.quoted.triple.io' }] },\n            { token: 'punctuation.definition.string.begin.io',\n                regex: '\"',\n                push: [{ token: 'punctuation.definition.string.end.io',\n                        regex: '\"',\n                        next: 'pop' },\n                    { token: 'constant.character.escape.io', regex: '\\\\\\\\.' },\n                    { defaultToken: 'string.quoted.double.io' }] },\n            { token: 'constant.numeric.io',\n                regex: '\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b' },\n            { token: 'variable.other.global.io', regex: 'Lobby\\\\b' },\n            { token: 'constant.language.io',\n                regex: '\\\\b(?:TRUE|true|FALSE|false|NULL|null|Null|Nil|nil|YES|NO)\\\\b' }] };\n    this.normalizeRules();\n};\nIoHighlightRules.metaData = { fileTypes: ['io'],\n    keyEquivalent: '^~I',\n    name: 'Io',\n    scopeName: 'source.io' };\noop.inherits(IoHighlightRules, TextHighlightRules);\nexports.IoHighlightRules = IoHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/io\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/io_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar IoHighlightRules = require(\"./io_highlight_rules\").IoHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = IoHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/io\";\n    this.snippetFileId = \"ace/snippets/io\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/io\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-ion.js",
    "content": "ace.define(\"ace/mode/ion_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n  THIS FILE WAS GENERATED BY 'ligand' USING 'mode_highlight_rules.js'\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar IonHighlightRules = function () {\n    var k_keywords_bool = \"TRUE|FALSE\";\n    var k_bool = k_keywords_bool;\n    var k_keywords_null = \"NULL.NULL|NULL.BOOL|NULL.INT|NULL.FLOAT|NULL.DECIMAL|NULL.TIMESTAMP|NULL.STRING|NULL.SYMBOL|NULL.BLOB|NULL.CLOB|\"\n        + \"NULL.STRUCT|NULL.LIST|NULL.SEXP|NULL\";\n    var k_null = k_keywords_null;\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.bool.ion\": k_bool,\n        \"constant.language.null.ion\": k_null\n    }, \"constant.other.symbol.identifier.ion\", true);\n    var keywordMapperRule = {\n        token: keywordMapper,\n        regex: \"\\\\b\\\\w+(?:\\\\.\\\\w+)?\\\\b\"\n    };\n    this.$rules = {\n        \"start\": [\n            {\n                \"include\": \"value\"\n            }\n        ],\n        \"value\": [\n            {\n                \"include\": \"whitespace\"\n            },\n            {\n                \"include\": \"comment\"\n            },\n            {\n                \"include\": \"annotation\"\n            },\n            {\n                \"include\": \"string\"\n            },\n            {\n                \"include\": \"number\"\n            },\n            {\n                \"include\": \"keywords\"\n            },\n            {\n                \"include\": \"symbol\"\n            },\n            {\n                \"include\": \"clob\"\n            },\n            {\n                \"include\": \"blob\"\n            },\n            {\n                \"include\": \"struct\"\n            },\n            {\n                \"include\": \"list\"\n            },\n            {\n                \"include\": \"sexp\"\n            }\n        ],\n        \"sexp\": [\n            {\n                \"token\": \"punctuation.definition.sexp.begin.ion\",\n                \"regex\": \"\\\\(\",\n                \"push\": [\n                    {\n                        \"token\": \"punctuation.definition.sexp.end.ion\",\n                        \"regex\": \"\\\\)\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"include\": \"comment\"\n                    },\n                    {\n                        \"include\": \"value\"\n                    },\n                    {\n                        \"token\": \"storage.type.symbol.operator.ion\",\n                        \"regex\": \"[\\\\!\\\\#\\\\%\\\\&\\\\*\\\\+\\\\-\\\\./\\\\;\\\\<\\\\=\\\\>\\\\?\\\\@\\\\^\\\\`\\\\|\\\\~]+\"\n                    }\n                ]\n            }\n        ],\n        \"comment\": [\n            {\n                \"token\": \"comment.line.ion\",\n                \"regex\": \"//[^\\\\n]*\"\n            },\n            {\n                \"token\": \"comment.block.ion\",\n                \"regex\": \"/\\\\*\",\n                \"push\": [\n                    {\n                        \"token\": \"comment.block.ion\",\n                        \"regex\": \"[*]/\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"token\": \"comment.block.ion\",\n                        \"regex\": \"[^*/]+\"\n                    },\n                    {\n                        \"token\": \"comment.block.ion\",\n                        \"regex\": \"[*/]+\"\n                    }\n                ]\n            }\n        ],\n        \"list\": [\n            {\n                \"token\": \"punctuation.definition.list.begin.ion\",\n                \"regex\": \"\\\\[\",\n                \"push\": [\n                    {\n                        \"token\": \"punctuation.definition.list.end.ion\",\n                        \"regex\": \"\\\\]\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"include\": \"comment\"\n                    },\n                    {\n                        \"include\": \"value\"\n                    },\n                    {\n                        \"token\": \"punctuation.definition.list.separator.ion\",\n                        \"regex\": \",\"\n                    }\n                ]\n            }\n        ],\n        \"struct\": [\n            {\n                \"token\": \"punctuation.definition.struct.begin.ion\",\n                \"regex\": \"\\\\{\",\n                \"push\": [\n                    {\n                        \"token\": \"punctuation.definition.struct.end.ion\",\n                        \"regex\": \"\\\\}\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"include\": \"comment\"\n                    },\n                    {\n                        \"include\": \"value\"\n                    },\n                    {\n                        \"token\": \"punctuation.definition.struct.separator.ion\",\n                        \"regex\": \",|:\"\n                    }\n                ]\n            }\n        ],\n        \"blob\": [\n            {\n                \"token\": [\n                    \"punctuation.definition.blob.begin.ion\",\n                    \"string.other.blob.ion\",\n                    \"punctuation.definition.blob.end.ion\"\n                ],\n                \"regex\": \"(\\\\{\\\\{)([^\\\"]*)(\\\\}\\\\})\"\n            }\n        ],\n        \"clob\": [\n            {\n                \"token\": [\n                    \"punctuation.definition.clob.begin.ion\",\n                    \"string.other.clob.ion\",\n                    \"punctuation.definition.clob.end.ion\"\n                ],\n                \"regex\": \"(\\\\{\\\\{)(\\\"[^\\\"]*\\\")(\\\\}\\\\})\"\n            }\n        ],\n        \"symbol\": [\n            {\n                \"token\": \"storage.type.symbol.quoted.ion\",\n                \"regex\": \"(['])((?:(?:\\\\\\\\')|(?:[^']))*?)(['])\"\n            },\n            {\n                \"token\": \"storage.type.symbol.identifier.ion\",\n                \"regex\": \"[\\\\$_a-zA-Z][\\\\$_a-zA-Z0-9]*\"\n            }\n        ],\n        \"number\": [\n            {\n                \"token\": \"constant.numeric.timestamp.ion\",\n                \"regex\": \"\\\\d{4}(?:-\\\\d{2})?(?:-\\\\d{2})?T(?:\\\\d{2}:\\\\d{2})(?::\\\\d{2})?(?:\\\\.\\\\d+)?(?:Z|[-+]\\\\d{2}:\\\\d{2})?\"\n            },\n            {\n                \"token\": \"constant.numeric.timestamp.ion\",\n                \"regex\": \"\\\\d{4}-\\\\d{2}-\\\\d{2}T?\"\n            },\n            {\n                \"token\": \"constant.numeric.integer.binary.ion\",\n                \"regex\": \"-?0[bB][01](?:_?[01])*\"\n            },\n            {\n                \"token\": \"constant.numeric.integer.hex.ion\",\n                \"regex\": \"-?0[xX][0-9a-fA-F](?:_?[0-9a-fA-F])*\"\n            },\n            {\n                \"token\": \"constant.numeric.float.ion\",\n                \"regex\": \"-?(?:0|[1-9](?:_?\\\\d)*)(?:\\\\.(?:\\\\d(?:_?\\\\d)*)?)?(?:[eE][+-]?\\\\d+)\"\n            },\n            {\n                \"token\": \"constant.numeric.float.ion\",\n                \"regex\": \"(?:[-+]inf)|(?:nan)\"\n            },\n            {\n                \"token\": \"constant.numeric.decimal.ion\",\n                \"regex\": \"-?(?:0|[1-9](?:_?\\\\d)*)(?:(?:(?:\\\\.(?:\\\\d(?:_?\\\\d)*)?)(?:[dD][+-]?\\\\d+)|\\\\.(?:\\\\d(?:_?\\\\d)*)?)|(?:[dD][+-]?\\\\d+))\"\n            },\n            {\n                \"token\": \"constant.numeric.integer.ion\",\n                \"regex\": \"-?(?:0|[1-9](?:_?\\\\d)*)\"\n            }\n        ],\n        \"string\": [\n            {\n                \"token\": [\n                    \"punctuation.definition.string.begin.ion\",\n                    \"string.quoted.double.ion\",\n                    \"punctuation.definition.string.end.ion\"\n                ],\n                \"regex\": \"([\\\"])((?:(?:\\\\\\\\\\\")|(?:[^\\\"]))*?)([\\\"])\"\n            },\n            {\n                \"token\": \"punctuation.definition.string.begin.ion\",\n                \"regex\": \"'{3}\",\n                \"push\": [\n                    {\n                        \"token\": \"punctuation.definition.string.end.ion\",\n                        \"regex\": \"'{3}\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"token\": \"string.quoted.triple.ion\",\n                        \"regex\": \"(?:\\\\\\\\'|[^'])+\"\n                    },\n                    {\n                        \"token\": \"string.quoted.triple.ion\",\n                        \"regex\": \"'\"\n                    }\n                ]\n            }\n        ],\n        \"annotation\": [\n            {\n                \"token\": [\n                    \"variable.language.annotation.ion\",\n                    \"punctuation.definition.annotation.ion\"\n                ],\n                \"regex\": \"('(?:[^']|\\\\\\\\\\\\\\\\|\\\\\\\\')*')\\\\s*(::)\"\n            },\n            {\n                \"token\": [\n                    \"variable.language.annotation.ion\",\n                    \"punctuation.definition.annotation.ion\"\n                ],\n                \"regex\": \"([\\\\$_a-zA-Z][\\\\$_a-zA-Z0-9]*)\\\\s*(::)\"\n            }\n        ],\n        \"whitespace\": [\n            {\n                \"token\": \"text.ion\",\n                \"regex\": \"\\\\s+\"\n            }\n        ]\n    };\n    this.$rules[\"keywords\"] = [keywordMapperRule];\n    this.normalizeRules();\n};\noop.inherits(IonHighlightRules, TextHighlightRules);\nexports.IonHighlightRules = IonHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/ion\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ion_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS GENERATED BY 'ligand' USING 'mode.js'\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./ion_highlight_rules\").IonHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = HighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/ion\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/ion\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-jack.js",
    "content": "ace.define(\"ace/mode/jack_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JackHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"string\",\n                regex: '\"',\n                next: \"string2\"\n            }, {\n                token: \"string\",\n                regex: \"'\",\n                next: \"string1\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"-?0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"(?:0|[-+]?[1-9][0-9]*)\\\\b\"\n            }, {\n                token: \"constant.binary\",\n                regex: \"<[0-9A-Fa-f][0-9A-Fa-f](\\\\s+[0-9A-Fa-f][0-9A-Fa-f])*>\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: \"constant.language.null\",\n                regex: \"null\\\\b\"\n            }, {\n                token: \"storage.type\",\n                regex: \"(?:Integer|Boolean|Null|String|Buffer|Tuple|List|Object|Function|Coroutine|Form)\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:return|abort|vars|for|delete|in|is|escape|exec|split|and|if|elif|else|while)\\\\b\"\n            }, {\n                token: \"language.builtin\",\n                regex: \"(?:lines|source|parse|read-stream|interval|substr|parseint|write|print|range|rand|inspect|bind|i-values|i-pairs|i-map|i-filter|i-chunk|i-all\\\\?|i-any\\\\?|i-collect|i-zip|i-merge|i-each)\\\\b\"\n            }, {\n                token: \"comment\",\n                regex: \"--.*$\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"storage.form\",\n                regex: \"@[a-z]+\"\n            }, {\n                token: \"constant.other.symbol\",\n                regex: ':+[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?'\n            }, {\n                token: \"variable\",\n                regex: '[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?'\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\|\\\\||\\\\^\\\\^|&&|!=|==|<=|<|>=|>|\\\\+|-|\\\\*|\\\\/|\\\\^|\\\\%|\\\\#|\\\\!\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"string1\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/\n            }, {\n                token: \"string\",\n                regex: \"[^'\\\\\\\\]+\"\n            }, {\n                token: \"string\",\n                regex: \"'\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \"\",\n                next: \"start\"\n            }\n        ],\n        \"string2\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/\n            }, {\n                token: \"string\",\n                regex: '[^\"\\\\\\\\]+'\n            }, {\n                token: \"string\",\n                regex: '\"',\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \"\",\n                next: \"start\"\n            }\n        ]\n    };\n};\noop.inherits(JackHighlightRules, TextHighlightRules);\nexports.JackHighlightRules = JackHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/jack\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jack_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./jack_highlight_rules\").JackHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = HighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/jack\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/jack\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-jade.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar modes = require(\"../config\").$modes;\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar escaped = function (ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\nvar MarkdownHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var codeBlockStartRule = {\n        token: \"support.function\",\n        regex: /^\\s*(```+[^`]*|~~~+[^~]*)$/,\n        onMatch: function (value, state, stack, line) {\n            var m = value.match(/^(\\s*)([`~]+)(.*)/);\n            var language = /[\\w-]+|$/.exec(m[3])[0];\n            if (!modes[language])\n                language = \"\";\n            stack.unshift(\"githubblock\", [], [m[1], m[2], language], state);\n            return this.token;\n        },\n        next: \"githubblock\"\n    };\n    var codeBlockRules = [{\n            token: \"support.function\",\n            regex: \".*\",\n            onMatch: function (value, state, stack, line) {\n                var embedState = stack[1];\n                var indent = stack[2][0];\n                var endMarker = stack[2][1];\n                var language = stack[2][2];\n                var m = /^(\\s*)(`+|~+)\\s*$/.exec(value);\n                if (m && m[1].length < indent.length + 3\n                    && m[2].length >= endMarker.length && m[2][0] == endMarker[0]) {\n                    stack.splice(0, 3);\n                    this.next = stack.shift();\n                    return this.token;\n                }\n                this.next = \"\";\n                if (language && modes[language]) {\n                    var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));\n                    stack[1] = data.state;\n                    return data.tokens;\n                }\n                return this.token;\n            }\n        }];\n    this.$rules[\"start\"].unshift({\n        token: \"empty_line\",\n        regex: '^$',\n        next: \"allowBlock\"\n    }, {\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, {\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token: function (value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex: /^#{1,6}(?=\\s|$)/,\n        next: \"header\"\n    }, codeBlockStartRule, {\n        token: \"string.blockquote\",\n        regex: \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next: \"blockquote\"\n    }, {\n        token: \"constant\",\n        regex: \"^ {0,3}(?:(?:\\\\* ?){3,}|(?:\\\\- ?){3,}|(?:\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, {\n        token: \"markup.list\",\n        regex: \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next: \"listblock-start\"\n    }, {\n        include: \"basic\"\n    });\n    this.addRules({\n        \"basic\": [{\n                token: \"constant.language.escape\",\n                regex: /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n            }, {\n                token: \"support.function\",\n                regex: \"(`+)(.*?[^`])(\\\\1)\"\n            }, {\n                token: [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n                regex: \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n            }, {\n                token: [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n                regex: \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\" + escaped(\"]\") + \")(\\\\])\"\n            }, {\n                token: [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n                regex: \"(\\\\!?\\\\[)(\" + // [\n                    escaped(\"]\") + // link text or alt text\n                    \")(\\\\]\\\\()\" + // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' + // href or image\n                    '(\\\\s*\"' + escaped('\"') + '\"\\\\s*)?' + // \"title\"\n                    \"(\\\\))\" // )\n            }, {\n                token: \"string.strong\",\n                regex: \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n            }, {\n                token: \"string.emphasis\",\n                regex: \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n            }, {\n                token: [\"text\", \"url\", \"text\"],\n                regex: \"(<)(\" +\n                    \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\" +\n                    \"|\" +\n                    \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\" +\n                    \")(>)\"\n            }],\n        \"allowBlock\": [\n            { token: \"support.function\", regex: \"^ {4}.+\", next: \"allowBlock\" },\n            { token: \"empty_line\", regex: '^$', next: \"allowBlock\" },\n            { token: \"empty\", regex: \"\", next: \"start\" }\n        ],\n        \"header\": [{\n                regex: \"$\",\n                next: \"start\"\n            }, {\n                include: \"basic\"\n            }, {\n                defaultToken: \"heading\"\n            }],\n        \"listblock-start\": [{\n                token: \"support.variable\",\n                regex: /(?:\\[[ x]\\])?/,\n                next: \"listblock\"\n            }],\n        \"listblock\": [{\n                token: \"empty_line\",\n                regex: \"^$\",\n                next: \"start\"\n            }, {\n                token: \"markup.list\",\n                regex: \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n                next: \"listblock-start\"\n            }, {\n                include: \"basic\", noEscape: true\n            },\n            codeBlockStartRule,\n            {\n                defaultToken: \"list\" //do not use markup.list to allow stling leading `*` differntly\n            }],\n        \"blockquote\": [{\n                token: \"empty_line\",\n                regex: \"^\\\\s*$\",\n                next: \"start\"\n            }, {\n                token: \"string.blockquote\",\n                regex: \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n                next: \"blockquote\"\n            }, {\n                include: \"basic\", noEscape: true\n            }, {\n                defaultToken: \"string.blockquote\"\n            }],\n        \"githubblock\": codeBlockRules\n    });\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n\n});\n\nace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\nvar ScssHighlightRules = function () {\n    var properties = lang.arrayToMap(CssHighlightRules.supportType.split(\"|\"));\n    var functions = lang.arrayToMap((\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n        \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" +\n        \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" +\n        \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n        \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\"));\n    var constants = lang.arrayToMap(CssHighlightRules.supportConstant.split(\"|\"));\n    var colors = lang.arrayToMap(CssHighlightRules.supportConstantColor.split(\"|\"));\n    var keywords = lang.arrayToMap((\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\"));\n    var tags = lang.arrayToMap((\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" +\n        \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" +\n        \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" +\n        \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" +\n        \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" +\n        \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" +\n        \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" +\n        \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" +\n        \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\"));\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: '[\"].*\\\\\\\\$',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"string\",\n                regex: \"['].*\\\\\\\\$\",\n                next: \"qstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe + \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: [\"support.function\", \"string\", \"support.function\"],\n                regex: \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token: function (value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex: \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable\",\n                regex: \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ]\n    };\n};\noop.inherits(ScssHighlightRules, TextHighlightRules);\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\nace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require('./css_highlight_rules');\nvar LessHighlightRules = function () {\n    var keywordList = \"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|\" +\n        \"@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|\" +\n        \"or|and|when|not\";\n    var keywords = keywordList.split('|');\n    var properties = CssHighlightRules.supportType.split('|');\n    var keywordMapper = this.createKeywordMapper({\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"keyword\": keywordList,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"identifier\", true);\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: [\"support.function\", \"paren.lparen\", \"string\", \"paren.rparen\"],\n                regex: \"(url)(\\\\()(.*)(\\\\))\"\n            }, {\n                token: [\"support.function\", \"paren.lparen\"],\n                regex: \"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"\n            }, {\n                token: function (value) {\n                    if (keywords.indexOf(value.toLowerCase()) > -1)\n                        return \"keyword\";\n                    else\n                        return \"variable\";\n                },\n                regex: \"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"\n            }, {\n                token: \"variable\",\n                regex: \"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"\n            }, {\n                token: function (first, second) {\n                    if (properties.indexOf(first.toLowerCase()) > -1) {\n                        return [\"support.type.property\", \"text\"];\n                    }\n                    else {\n                        return [\"support.type.unknownProperty\", \"text\"];\n                    }\n                },\n                regex: \"([a-z0-9-_]+)(\\\\s*:)\"\n            }, {\n                token: \"keyword\",\n                regex: \"&\" // special case - always treat as keyword\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z_][a-z0-9-_]*\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(LessHighlightRules, TextHighlightRules);\nexports.LessHighlightRules = LessHighlightRules;\n\n});\n\nace.define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\noop.inherits(CoffeeHighlightRules, TextHighlightRules);\nfunction CoffeeHighlightRules() {\n    var identifier = \"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\";\n    var keywords = (\"this|throw|then|try|typeof|super|switch|return|break|by|continue|\" +\n        \"catch|class|in|instanceof|is|isnt|if|else|extends|for|own|\" +\n        \"finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|\" +\n        \"or|on|unless|until|and|yes|yield|export|import|default\");\n    var langConstant = (\"true|false|null|undefined|NaN|Infinity\");\n    var illegal = (\"case|const|function|var|void|with|enum|implements|\" +\n        \"interface|let|package|private|protected|public|static\");\n    var supportClass = (\"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|\" +\n        \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" +\n        \"SyntaxError|TypeError|URIError|\" +\n        \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n        \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\");\n    var supportFunction = (\"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|\" +\n        \"encodeURIComponent|decodeURI|decodeURIComponent|String|\");\n    var variableLanguage = (\"window|arguments|prototype|document\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": langConstant,\n        \"invalid.illegal\": illegal,\n        \"language.support.class\": supportClass,\n        \"language.support.function\": supportFunction,\n        \"variable.language\": variableLanguage\n    }, \"identifier\");\n    var functionRule = {\n        token: [\"paren.lparen\", \"variable.parameter\", \"paren.rparen\", \"text\", \"storage.type\"],\n        regex: /(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source\n    };\n    var stringEscape = /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;\n    this.$rules = {\n        start: [\n            {\n                token: \"constant.numeric\",\n                regex: \"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"\n            }, {\n                stateName: \"qdoc\",\n                token: \"string\", regex: \"'''\", next: [\n                    { token: \"string\", regex: \"'''\", next: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                stateName: \"qqdoc\",\n                token: \"string\",\n                regex: '\"\"\"',\n                next: [\n                    { token: \"string\", regex: '\"\"\"', next: \"start\" },\n                    { token: \"paren.string\", regex: '#{', push: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                stateName: \"qstring\",\n                token: \"string\", regex: \"'\", next: [\n                    { token: \"string\", regex: \"'\", next: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                stateName: \"qqstring\",\n                token: \"string.start\", regex: '\"', next: [\n                    { token: \"string.end\", regex: '\"', next: \"start\" },\n                    { token: \"paren.string\", regex: '#{', push: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                stateName: \"js\",\n                token: \"string\", regex: \"`\", next: [\n                    { token: \"string\", regex: \"`\", next: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                regex: \"[{}]\", onMatch: function (val, state, stack) {\n                    this.next = \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift() || \"\";\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.string\";\n                    }\n                    return \"paren\";\n                }\n            }, {\n                token: \"string.regex\",\n                regex: \"///\",\n                next: \"heregex\"\n            }, {\n                token: \"string.regex\",\n                regex: /(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/\n            }, {\n                token: \"comment\",\n                regex: \"###(?!#)\",\n                next: \"comment\"\n            }, {\n                token: \"comment\",\n                regex: \"#.*\"\n            }, {\n                token: [\"punctuation.operator\", \"text\", \"identifier\"],\n                regex: \"(\\\\.)(\\\\s*)(\" + illegal + \")\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\.{1,3}\"\n            }, {\n                token: [\"keyword\", \"text\", \"language.support.class\",\n                    \"text\", \"keyword\", \"text\", \"language.support.class\"],\n                regex: \"(class)(\\\\s+)(\" + identifier + \")(?:(\\\\s+)(extends)(\\\\s+)(\" + identifier + \"))?\"\n            }, {\n                token: [\"entity.name.function\", \"text\", \"keyword.operator\", \"text\"].concat(functionRule.token),\n                regex: \"(\" + identifier + \")(\\\\s*)([=:])(\\\\s*)\" + functionRule.regex\n            },\n            functionRule,\n            {\n                token: \"variable\",\n                regex: \"@(?:\" + identifier + \")?\"\n            }, {\n                token: keywordMapper,\n                regex: identifier\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\,|\\\\.\"\n            }, {\n                token: \"storage.type\",\n                regex: \"[\\\\-=]>\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[({[]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]})]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        heregex: [{\n                token: \"string.regex\",\n                regex: '.*?///[imgy]{0,4}',\n                next: \"start\"\n            }, {\n                token: \"comment.regex\",\n                regex: \"\\\\s+(?:#.*)?\"\n            }, {\n                token: \"string.regex\",\n                regex: \"\\\\S+\"\n            }],\n        comment: [{\n                token: \"comment\",\n                regex: '###',\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }]\n    };\n    this.normalizeRules();\n}\nexports.CoffeeHighlightRules = CoffeeHighlightRules;\n\n});\n\nace.define(\"ace/mode/jade_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/scss_highlight_rules\",\"ace/mode/less_highlight_rules\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/javascript_highlight_rules\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode_highlight_rules.tmpl.js (UUID: C5B73B98-5F2A-42E3-9F0E-028A74A9FE4B)\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar MarkdownHighlightRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar SassHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar LessHighlightRules = require(\"./less_highlight_rules\").LessHighlightRules;\nvar CoffeeHighlightRules = require(\"./coffee_highlight_rules\").CoffeeHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nfunction mixin_embed(tag, prefix) {\n    return {\n        token: \"entity.name.function.jade\",\n        regex: \"^\\\\s*\\\\:\" + tag,\n        next: prefix + \"start\"\n    };\n}\nvar JadeHighlightRules = function () {\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-6][0-7]?|\" + // oct\n        \"37[0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules =\n        {\n            \"start\": [\n                {\n                    token: \"keyword.control.import.include.jade\",\n                    regex: \"\\\\s*\\\\binclude\\\\b\"\n                },\n                {\n                    token: \"keyword.other.doctype.jade\",\n                    regex: \"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"\n                },\n                {\n                    onMatch: function (value, currentState, stack) {\n                        stack.unshift(this.next, value.length - 2, currentState);\n                        return \"comment\";\n                    },\n                    regex: /^\\s*\\/\\//,\n                    next: \"comment_block\"\n                },\n                mixin_embed(\"markdown\", \"markdown-\"),\n                mixin_embed(\"sass\", \"sass-\"),\n                mixin_embed(\"less\", \"less-\"),\n                mixin_embed(\"coffee\", \"coffee-\"),\n                {\n                    token: [\"storage.type.function.jade\",\n                        \"entity.name.function.jade\",\n                        \"punctuation.definition.parameters.begin.jade\",\n                        \"variable.parameter.function.jade\",\n                        \"punctuation.definition.parameters.end.jade\"\n                    ],\n                    regex: \"^(\\\\s*mixin)( [\\\\w\\\\-]+)(\\\\s*\\\\()(.*?)(\\\\))\"\n                },\n                {\n                    token: [\"storage.type.function.jade\", \"entity.name.function.jade\"],\n                    regex: \"^(\\\\s*mixin)( [\\\\w\\\\-]+)\"\n                },\n                {\n                    token: \"source.js.embedded.jade\",\n                    regex: \"^\\\\s*(?:-|=|!=)\",\n                    next: \"js-start\"\n                },\n                {\n                    token: \"string.interpolated.jade\",\n                    regex: \"[#!]\\\\{[^\\\\}]+\\\\}\"\n                },\n                {\n                    token: \"meta.tag.any.jade\",\n                    regex: /^\\s*(?!\\w+:)(?:[\\w-]+|(?=\\.|#)])/,\n                    next: \"tag_single\"\n                },\n                {\n                    token: \"suport.type.attribute.id.jade\",\n                    regex: \"#\\\\w+\"\n                },\n                {\n                    token: \"suport.type.attribute.class.jade\",\n                    regex: \"\\\\.\\\\w+\"\n                },\n                {\n                    token: \"punctuation\",\n                    regex: \"\\\\s*(?:\\\\()\",\n                    next: \"tag_attributes\"\n                }\n            ],\n            \"comment_block\": [\n                { regex: /^\\s*(?:\\/\\/)?/, onMatch: function (value, currentState, stack) {\n                        if (value.length <= stack[1]) {\n                            if (value.slice(-1) == \"/\") {\n                                stack[1] = value.length - 2;\n                                this.next = \"\";\n                                return \"comment\";\n                            }\n                            stack.shift();\n                            stack.shift();\n                            this.next = stack.shift();\n                            return \"text\";\n                        }\n                        else {\n                            this.next = \"\";\n                            return \"comment\";\n                        }\n                    }, next: \"start\" },\n                { defaultToken: \"comment\" }\n            ],\n            \"tag_single\": [\n                {\n                    token: \"entity.other.attribute-name.class.jade\",\n                    regex: \"\\\\.[\\\\w-]+\"\n                },\n                {\n                    token: \"entity.other.attribute-name.id.jade\",\n                    regex: \"#[\\\\w-]+\"\n                },\n                {\n                    token: [\"text\", \"punctuation\"],\n                    regex: \"($)|((?!\\\\.|#|=|-))\",\n                    next: \"start\"\n                }\n            ],\n            \"tag_attributes\": [\n                {\n                    token: \"string\",\n                    regex: \"'(?=.)\",\n                    next: \"qstring\"\n                },\n                {\n                    token: \"string\",\n                    regex: '\"(?=.)',\n                    next: \"qqstring\"\n                },\n                {\n                    token: [\"entity.other.attribute-name.jade\", \"punctuation\"],\n                    regex: \"([a-zA-Z:\\\\.-]+)(=)?\",\n                    next: \"attribute_strings\"\n                },\n                {\n                    token: \"punctuation\",\n                    regex: \"\\\\)\",\n                    next: \"start\"\n                }\n            ],\n            \"attribute_strings\": [\n                {\n                    token: \"string\",\n                    regex: \"'(?=.)\",\n                    next: \"qstring\"\n                },\n                {\n                    token: \"string\",\n                    regex: '\"(?=.)',\n                    next: \"qqstring\"\n                },\n                {\n                    token: \"string\",\n                    regex: '(?=\\\\S)',\n                    next: \"tag_attributes\"\n                }\n            ],\n            \"qqstring\": [\n                {\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"string\",\n                    regex: '[^\"\\\\\\\\]+'\n                }, {\n                    token: \"string\",\n                    regex: \"\\\\\\\\$\",\n                    next: \"qqstring\"\n                }, {\n                    token: \"string\",\n                    regex: '\"|$',\n                    next: \"tag_attributes\"\n                }\n            ],\n            \"qstring\": [\n                {\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"string\",\n                    regex: \"[^'\\\\\\\\]+\"\n                }, {\n                    token: \"string\",\n                    regex: \"\\\\\\\\$\",\n                    next: \"qstring\"\n                }, {\n                    token: \"string\",\n                    regex: \"'|$\",\n                    next: \"tag_attributes\"\n                }\n            ]\n        };\n    this.embedRules(JavaScriptHighlightRules, \"js-\", [{\n            token: \"text\",\n            regex: \".$\",\n            next: \"start\"\n        }]);\n};\noop.inherits(JadeHighlightRules, TextHighlightRules);\nexports.JadeHighlightRules = JadeHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/jade\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jade_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JadeHighlightRules = require(\"./jade_highlight_rules\").JadeHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JadeHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/jade\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/jade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-java.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JavaHighlightRules = function () {\n    var keywords = (\"abstract|continue|for|new|switch|\" +\n        \"assert|default|goto|package|synchronized|\" +\n        \"boolean|do|if|private|this|\" +\n        \"break|double|implements|protected|throw|\" +\n        \"byte|else|import|public|throws|\" +\n        \"case|enum|instanceof|return|transient|\" +\n        \"catch|extends|int|short|try|\" +\n        \"char|final|interface|static|void|\" +\n        \"class|finally|long|strictfp|volatile|\" +\n        \"const|float|native|super|while|\" +\n        \"var\");\n    var buildinConstants = (\"null|Infinity|NaN|undefined\");\n    var langClasses = (\"AbstractMethodError|AssertionError|ClassCircularityError|\" +\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\" +\n        \"ExceptionInInitializerError|IllegalAccessError|\" +\n        \"IllegalThreadStateException|InstantiationError|InternalError|\" +\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\" +\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\" +\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\" +\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\" +\n        \"InstantiationException|IndexOutOfBoundsException|\" +\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\" +\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\" +\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\" +\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\" +\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\" +\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\" +\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\" +\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\" +\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\" +\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\" +\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\" +\n        \"ArrayStoreException|ClassCastException|LinkageError|\" +\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\" +\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\" +\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                regex: \"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",\n                token: \"keyword\",\n                next: [{\n                        regex: \"{\",\n                        token: \"paren.lparen\",\n                        next: [{\n                                regex: \"}\",\n                                token: \"paren.rparen\",\n                                next: \"start\"\n                            }, {\n                                regex: \"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",\n                                token: \"keyword\"\n                            }]\n                    }, {\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    }, {\n                        token: \"identifier\",\n                        regex: \"\\\\w+\"\n                    }, {\n                        token: \"punctuation.operator\",\n                        regex: \".\"\n                    }, {\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    }, {\n                        regex: \"\",\n                        next: \"start\"\n                    }]\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\||\\\\^|\\\\*|\\\\/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?|\\\\:|\\\\*=|\\\\/=|%=|\\\\+=|\\\\-=|&=|\\\\|=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaHighlightRules, TextHighlightRules);\nexports.JavaHighlightRules = JavaHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/java\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/cstyle\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, CStyleFoldMode);\n(function () {\n    this.importRegex = /^import /;\n    this.getCStyleFoldWidget = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        if (foldStyle === \"markbegin\") {\n            var line = session.getLine(row);\n            if (this.importRegex.test(line)) {\n                if (row == 0 || !this.importRegex.test(session.getLine(row - 1)))\n                    return \"start\";\n            }\n        }\n        return this.getCStyleFoldWidget(session, foldStyle, row);\n    };\n    this.getCstyleFoldWidgetRange = this.getFoldWidgetRange;\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        var match = line.match(this.importRegex);\n        if (!match || foldStyle !== \"markbegin\")\n            return this.getCstyleFoldWidgetRange(session, foldStyle, row, forceMultiline);\n        var startColumn = match[0].length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            var line = session.getLine(row);\n            if (line.match(/^\\s*$/))\n                continue;\n            if (!line.match(this.importRegex))\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/java\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/java_highlight_rules\",\"ace/mode/folding/java\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar JavaHighlightRules = require(\"./java_highlight_rules\").JavaHighlightRules;\nvar JavaFoldMode = require(\"./folding/java\").FoldMode;\nvar Mode = function () {\n    JavaScriptMode.call(this);\n    this.HighlightRules = JavaHighlightRules;\n    this.foldingRules = new JavaFoldMode();\n};\noop.inherits(Mode, JavaScriptMode);\n(function () {\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.$id = \"ace/mode/java\";\n    this.snippetFileId = \"ace/snippets/java\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/java\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-javascript.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/javascript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-json.js",
    "content": "ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsonHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"variable\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n            }, {\n                token: \"string\",\n                regex: '\"',\n                next: \"string\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: \"text\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            }, {\n                token: \"comment.start\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[,]/\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"string\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.end\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n};\noop.inherits(JsonHighlightRules, TextHighlightRules);\nexports.JsonHighlightRules = JsonHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar Mode = function () {\n    this.HighlightRules = HighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/json_worker\", \"JsonWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/json\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/json\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-json5.js",
    "content": "ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsonHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"variable\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n            }, {\n                token: \"string\",\n                regex: '\"',\n                next: \"string\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: \"text\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            }, {\n                token: \"comment.start\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[,]/\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"string\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.end\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n};\noop.inherits(JsonHighlightRules, TextHighlightRules);\nexports.JsonHighlightRules = JsonHighlightRules;\n\n});\n\nace.define(\"ace/mode/json5_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/json_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JsonHighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar Json5HighlightRules = function () {\n    JsonHighlightRules.call(this);\n    var startRules = [{\n            token: \"variable\",\n            regex: /[a-zA-Z$_\\u00a1-\\uffff][\\w$\\u00a1-\\uffff]*\\s*(?=:)/\n        }, {\n            token: \"variable\",\n            regex: /['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']\\s*(?=:)/\n        }, {\n            token: \"constant.language.boolean\",\n            regex: /(?:null)\\b/\n        }, {\n            token: \"string\",\n            regex: /'/,\n            next: [{\n                    token: \"constant.language.escape\",\n                    regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\/bfnrt]|$)/,\n                    consumeLineEnd: true\n                }, {\n                    token: \"string\",\n                    regex: /'|$/,\n                    next: \"start\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n        }, {\n            token: \"string\",\n            regex: /\"(?![^\"]*\":)/,\n            next: [{\n                    token: \"constant.language.escape\",\n                    regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\/bfnrt]|$)/,\n                    consumeLineEnd: true\n                }, {\n                    token: \"string\",\n                    regex: /\"|$/,\n                    next: \"start\"\n                }, {\n                    defaultToken: \"string\"\n                }]\n        }, {\n            token: \"constant.numeric\",\n            regex: /[+-]?(?:Infinity|NaN)\\b/\n        }];\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n    this.normalizeRules();\n};\noop.inherits(Json5HighlightRules, JsonHighlightRules);\nexports.Json5HighlightRules = Json5HighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/json5\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json5_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./json5_highlight_rules\").Json5HighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = HighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/json5\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/json5\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-jsoniq.js",
    "content": "ace.define(\"ace/mode/xquery/jsoniq_lexer\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\":[function(_dereq_,module,exports){\n                                                            var JSONiqTokenizer = exports.JSONiqTokenizer = function JSONiqTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? JSONiqTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = JSONiqTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [JSONiqTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n    switch (l1)\n    {\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 59:                        // '<?'\n      shift(59);                    // '<?'\n      break;\n    case 43:                        // '(#'\n      shift(43);                    // '(#'\n      break;\n    case 45:                        // '(:~'\n      shift(45);                    // '(:~'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    case 277:                       // '}'\n      shift(277);                   // '}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 42:                        // '('\n      shift(42);                    // '('\n      break;\n    case 46:                        // ')'\n      shift(46);                    // ')'\n      break;\n    case 52:                        // '/'\n      shift(52);                    // '/'\n      break;\n    case 65:                        // '['\n      shift(65);                    // '['\n      break;\n    case 66:                        // ']'\n      shift(66);                    // ']'\n      break;\n    case 49:                        // ','\n      shift(49);                    // ','\n      break;\n    case 51:                        // '.'\n      shift(51);                    // '.'\n      break;\n    case 56:                        // ';'\n      shift(56);                    // ';'\n      break;\n    case 54:                        // ':'\n      shift(54);                    // ':'\n      break;\n    case 36:                        // '!'\n      shift(36);                    // '!'\n      break;\n    case 276:                       // '|'\n      shift(276);                   // '|'\n      break;\n    case 40:                        // '$$'\n      shift(40);                    // '$$'\n      break;\n    case 5:                         // Annotation\n      shift(5);                     // Annotation\n      break;\n    case 4:                         // ModuleDecl\n      shift(4);                     // ModuleDecl\n      break;\n    case 6:                         // OptionDecl\n      shift(6);                     // OptionDecl\n      break;\n    case 15:                        // AttrTest\n      shift(15);                    // AttrTest\n      break;\n    case 16:                        // Wildcard\n      shift(16);                    // Wildcard\n      break;\n    case 18:                        // IntegerLiteral\n      shift(18);                    // IntegerLiteral\n      break;\n    case 19:                        // DecimalLiteral\n      shift(19);                    // DecimalLiteral\n      break;\n    case 20:                        // DoubleLiteral\n      shift(20);                    // DoubleLiteral\n      break;\n    case 8:                         // Variable\n      shift(8);                     // Variable\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 7:                         // Operator\n      shift(7);                     // Operator\n      break;\n    case 35:                        // EOF\n      shift(35);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 61:                        // '>'\n      shift(61);                    // '>'\n      break;\n    case 53:                        // '/>'\n      shift(53);                    // '/>'\n      break;\n    case 29:                        // QName\n      shift(29);                    // QName\n      break;\n    case 60:                        // '='\n      shift(60);                    // '='\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n    switch (l1)\n    {\n    case 25:                        // ElementContentChar\n      shift(25);                    // ElementContentChar\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 10:                        // EndTag\n      shift(10);                    // EndTag\n      break;\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n    switch (l1)\n    {\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 27:                        // AposAttrContentChar\n      shift(27);                    // AposAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n    switch (l1)\n    {\n    case 22:                        // EscapeQuot\n      shift(22);                    // EscapeQuot\n      break;\n    case 26:                        // QuotAttrContentChar\n      shift(26);                    // QuotAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 14:                        // CDataSectionContents\n      shift(14);                    // CDataSectionContents\n      break;\n    case 67:                        // ']]>'\n      shift(67);                    // ']]>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 12:                        // DirCommentContents\n      shift(12);                    // DirCommentContents\n      break;\n    case 50:                        // '-->'\n      shift(50);                    // '-->'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 13:                        // DirPIContents\n      shift(13);                    // DirPIContents\n      break;\n    case 62:                        // '?'\n      shift(62);                    // '?'\n      break;\n    case 63:                        // '?>'\n      shift(63);                    // '?>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 11:                        // PragmaContents\n      shift(11);                    // PragmaContents\n      break;\n    case 38:                        // '#'\n      shift(38);                    // '#'\n      break;\n    case 39:                        // '#)'\n      shift(39);                    // '#)'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 32:                        // CommentContents\n      shift(32);                    // CommentContents\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(6);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 33:                        // DocTag\n      shift(33);                    // DocTag\n      break;\n    case 34:                        // DocCommentContents\n      shift(34);                    // DocCommentContents\n      break;\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(5);                  // JSONChar | JSONCharRef | JSONPredefinedCharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 3:                         // JSONPredefinedCharRef\n      shift(3);                     // JSONPredefinedCharRef\n      break;\n    case 2:                         // JSONCharRef\n      shift(2);                     // JSONCharRef\n      break;\n    case 1:                         // JSONChar\n      shift(1);                     // JSONChar\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 24:                        // AposChar\n      shift(24);                    // AposChar\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 17:                        // EQName^Token\n      shift(17);                    // EQName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 28:                        // NCName^Token\n      shift(28);                    // NCName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(JSONiqTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 30)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = JSONiqTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = JSONiqTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = JSONiqTokenizer.MAP1[(c0 & 15) + JSONiqTokenizer.MAP1[(c1 & 31) + JSONiqTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (JSONiqTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (JSONiqTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = JSONiqTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = JSONiqTokenizer.TRANSITION[(i0 & 15) + JSONiqTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nJSONiqTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 279; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2066 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = JSONiqTokenizer.EXPECTED[(i0 & 3) + JSONiqTokenizer.EXPECTED[(i1 & 3) + JSONiqTokenizer.EXPECTED[(i2 & 3) + JSONiqTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(JSONiqTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nJSONiqTokenizer.MAP0 =\n[ 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37\n];\n\nJSONiqTokenizer.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 31, 31, 37, 37, 37, 37, 37, 37, 37, 66, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66\n];\n\nJSONiqTokenizer.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 37, 31, 37, 31, 31, 37\n];\n\nJSONiqTokenizer.INITIAL =\n[ 1, 2, 49155, 57348, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nJSONiqTokenizer.TRANSITION =\n[ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 17408, 19288, 17439, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19074, 36169, 17439, 36866, 17466, 36890, 36866, 22314, 19105, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22182, 19288, 19121, 36866, 17466, 18345, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19273, 19552, 19304, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19332, 17423, 19363, 36866, 17466, 17537, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 18614, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19391, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19427, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36154, 19288, 19457, 36866, 17466, 17740, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22780, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22375, 22197, 18469, 36866, 17466, 36890, 36866, 21991, 24018, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21331, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 19485, 19501, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19537, 22390, 19568, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19596, 19611, 19457, 36866, 17466, 36890, 36866, 18246, 19627, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22242, 20553, 19457, 36866, 17466, 36890, 36866, 18648, 30477, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36472, 19288, 19457, 36866, 17466, 17809, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21770, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19643, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19672, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20538, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17975, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22345, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19726, 19742, 21529, 24035, 23112, 26225, 23511, 27749, 27397, 24035, 34360, 24035, 24036, 23114, 35166, 23114, 23114, 19758, 23511, 35247, 23511, 23511, 28447, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 19821, 23511, 23511, 23511, 23511, 23512, 19441, 36539, 24035, 24035, 24035, 24035, 19846, 19869, 23114, 23114, 23114, 28618, 32187, 19892, 23511, 23511, 23511, 34585, 20402, 36647, 24035, 24035, 24036, 23114, 33757, 23114, 23114, 23029, 20271, 23511, 27070, 23511, 23511, 30562, 24035, 24035, 29274, 26576, 23114, 23114, 31118, 23036, 29695, 23511, 23511, 32431, 23634, 30821, 24035, 23110, 19913, 23114, 23467, 31261, 23261, 34299, 19932, 24035, 32609, 19965, 35389, 19984, 27689, 19830, 29391, 29337, 20041, 22643, 35619, 33728, 20062, 20121, 20166, 35100, 26145, 20211, 23008, 19876, 20208, 20227, 25670, 20132, 26578, 27685, 20141, 20243, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36094, 19288, 19457, 36866, 17466, 21724, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22735, 19552, 20287, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22750, 19288, 21529, 24035, 23112, 28056, 23511, 29483, 28756, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 20327, 23511, 23511, 23511, 23511, 31156, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 20371, 23511, 23511, 23511, 23511, 27443, 20395, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 29457, 29700, 23511, 23511, 23511, 23511, 33444, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 28350, 20421, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 20447, 20475, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20523, 22257, 20569, 20783, 21715, 17603, 20699, 20837, 20614, 20630, 21149, 20670, 21405, 17486, 17509, 17525, 18373, 19179, 20695, 20716, 20732, 20755, 19194, 18042, 21641, 20592, 20779, 20598, 21412, 17470, 17591, 20896, 17468, 17619, 20799, 20700, 21031, 20744, 20699, 20828, 18075, 21259, 20581, 20853, 18048, 20868, 20884, 17756, 17784, 17800, 17825, 17854, 21171, 21200, 20931, 20947, 21378, 20955, 20971, 18086, 20645, 21002, 20986, 18178, 17960, 18012, 18381, 18064, 29176, 21044, 21438, 21018, 21122, 21393, 21060, 21844, 21094, 20654, 17493, 18150, 18166, 18214, 25967, 20763, 21799, 21110, 21830, 21138, 21246, 21301, 18336, 18361, 21165, 21187, 20812, 21216, 21232, 21287, 21317, 18553, 21347, 21363, 21428, 21454, 21271, 21483, 21499, 21515, 21575, 21467, 18712, 21591, 21633, 21078, 18189, 18198, 20679, 21657, 21701, 21074, 21687, 21740, 21756, 21786, 21815, 21860, 21876, 21892, 21946, 21962, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36457, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 36813, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 21981, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 22151, 22007, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 27898, 17884, 18890, 17906, 17928, 22042, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 22070, 22112, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 22142, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36109, 19288, 18469, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22167, 19288, 19457, 36866, 17466, 17768, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22227, 36487, 22273, 36866, 17466, 36890, 36866, 19316, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18749, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 22304, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19580, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22330, 19089, 19457, 36866, 17466, 18721, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22765, 19347, 19457, 36866, 17466, 36890, 36866, 18114, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34541, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 22540, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29908, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22561, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 23837, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22584, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36442, 19288, 21605, 24035, 23112, 28137, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 31568, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22690, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 27584, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 22659, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22360, 19552, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22675, 22811, 19457, 36866, 17466, 36890, 36866, 19133, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22827, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36064, 19288, 22865, 22881, 32031, 22897, 22913, 22956, 29939, 24035, 24035, 24035, 23003, 23114, 23114, 23114, 23024, 22420, 23511, 23511, 23511, 23052, 29116, 23073, 29268, 24035, 25563, 26915, 23106, 23131, 23114, 23114, 23159, 23181, 23197, 23248, 23511, 23511, 23282, 23305, 22493, 32364, 24035, 33472, 30138, 26325, 31770, 33508, 27345, 33667, 23114, 23321, 23473, 23351, 35793, 36576, 23511, 23375, 22500, 24145, 24035, 29197, 20192, 24533, 23440, 23114, 19017, 23459, 22839, 23489, 23510, 23511, 33563, 23528, 32076, 25389, 24035, 26576, 23561, 23583, 23114, 32683, 22516, 23622, 23655, 23511, 23634, 35456, 37144, 23110, 23683, 34153, 20499, 32513, 25824, 23705, 24035, 24035, 23111, 23114, 19874, 27078, 33263, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 20507, 32241, 20150, 31862, 27464, 35108, 23727, 23007, 35895, 34953, 26578, 27685, 20141, 24569, 31691, 19787, 33967, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36427, 19552, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 27027, 26576, 23114, 23114, 23114, 31471, 23756, 22468, 23511, 23511, 23511, 34687, 23772, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 23788, 24035, 24035, 24035, 21559, 23828, 23114, 23114, 23114, 25086, 22839, 23853, 23511, 23511, 23511, 23876, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 31761, 23909, 23953, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36049, 19288, 21605, 30825, 23112, 23987, 23511, 24003, 31001, 27617, 24034, 24035, 24036, 24052, 24089, 23114, 23114, 22420, 24109, 24168, 23511, 23511, 29116, 24188, 27609, 20017, 29516, 24035, 26576, 24222, 19968, 23114, 24252, 33811, 22468, 24270, 33587, 23511, 24320, 27443, 22493, 24035, 24035, 24035, 24035, 24339, 23113, 23114, 23114, 23114, 28128, 28618, 29700, 23511, 23511, 23511, 28276, 34564, 20402, 24035, 24035, 32929, 24036, 23114, 23114, 23114, 24357, 23029, 22839, 23511, 23511, 23511, 24377, 25645, 24035, 34112, 24035, 26576, 23114, 26643, 23114, 32683, 22516, 23511, 25638, 23511, 23711, 24035, 24395, 27809, 23114, 24414, 20499, 24432, 30917, 23628, 24035, 30680, 23111, 23114, 30233, 27078, 25748, 24452, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 24475, 19829, 26577, 26597, 26154, 24519, 24556, 24596, 23007, 20046, 20132, 26578, 24634, 20141, 24569, 31691, 24679, 24727, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36412, 19288, 21605, 19943, 34861, 32618, 26027, 29483, 32016, 32050, 36233, 24776, 35574, 24801, 24819, 32671, 31289, 22420, 24868, 24886, 20087, 26849, 29116, 19803, 24035, 24035, 24035, 36228, 26576, 23114, 23114, 23114, 24981, 33811, 22468, 23511, 23511, 23511, 29028, 27443, 22493, 24923, 27965, 24035, 24035, 32797, 24946, 23443, 23114, 23114, 29636, 24997, 22849, 28252, 23511, 23511, 23511, 25042, 25110, 24035, 24035, 34085, 24036, 25133, 23114, 23114, 25152, 23029, 22839, 25169, 23511, 36764, 23511, 25645, 30403, 24035, 25186, 26576, 31806, 24093, 25212, 32683, 22516, 32713, 26245, 34293, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 32406, 23111, 23114, 28676, 30944, 27689, 25234, 24035, 23112, 19872, 37063, 23266, 24036, 23114, 30243, 20379, 26100, 29218, 20211, 30105, 25257, 25284, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 24834, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36034, 19288, 21671, 25314, 25072, 25330, 25346, 25362, 29939, 29951, 35288, 29984, 23812, 27216, 25405, 25424, 30456, 22584, 26292, 25461, 25480, 31592, 29116, 25516, 34963, 25545, 27007, 25579, 33937, 25614, 25661, 25686, 34872, 25702, 25718, 25734, 25769, 25795, 25811, 25840, 22493, 26533, 25856, 24035, 25876, 30763, 27481, 25909, 23114, 28987, 25936, 25954, 29700, 25983, 23511, 31412, 26043, 26063, 22568, 29241, 29592, 26116, 31216, 35383, 26170, 34783, 26194, 26221, 22839, 26241, 26261, 22477, 26283, 26308, 27306, 31035, 24655, 26576, 29854, 33386, 26341, 32683, 22516, 32153, 30926, 26361, 19996, 26381, 35463, 26397, 26424, 34646, 26478, 35605, 31386, 26494, 35567, 31964, 22940, 23689, 25218, 30309, 32289, 19830, 33605, 23112, 32109, 27733, 27084, 24496, 35886, 35221, 26525, 36602, 26549, 26558, 26574, 26594, 26613, 26629, 26666, 26700, 26578, 27685, 23740, 24285, 31691, 26733, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36397, 19552, 18991, 25887, 28117, 32618, 26776, 29483, 29939, 26802, 24035, 24035, 24036, 28664, 23114, 23114, 23114, 22420, 30297, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 25559, 26576, 23114, 23114, 23114, 30525, 33811, 22468, 23511, 23511, 23511, 28725, 27443, 22493, 24035, 24035, 27249, 24035, 24035, 23113, 23114, 23114, 26827, 23114, 28618, 29700, 23511, 23511, 26845, 23511, 34564, 20402, 24035, 24035, 26979, 24036, 23114, 23114, 23114, 24974, 23029, 22839, 23511, 23511, 23511, 26865, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 33305, 24035, 25598, 23114, 19874, 34253, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 26886, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 26931, 24569, 26439, 26947, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36019, 19288, 26995, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 27043, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 27061, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 29978, 24035, 24035, 23113, 23114, 33114, 23114, 23114, 30010, 29700, 23511, 35913, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 27155, 26576, 23114, 23114, 30447, 23036, 29695, 23511, 23511, 30935, 20099, 24152, 25529, 27100, 34461, 27121, 22625, 29156, 26009, 27137, 30422, 31903, 31655, 28870, 27171, 32439, 31731, 19830, 27232, 22612, 27265, 26786, 25494, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 20342, 27288, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 27322, 27339, 28020, 27361, 27382, 29939, 24035, 24035, 32581, 24036, 23114, 23114, 23114, 27425, 22420, 23511, 23511, 23511, 27442, 28306, 19803, 24035, 24035, 24035, 24035, 26710, 23114, 23114, 23114, 23114, 32261, 22468, 23511, 23511, 23511, 23511, 35719, 24694, 29510, 24035, 24035, 24035, 24035, 26717, 23114, 23114, 23114, 23114, 28618, 32217, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 27459, 23114, 23114, 23114, 36252, 23029, 20271, 23511, 23511, 23511, 28840, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 27480, 34483, 28401, 29761, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36382, 19288, 21605, 27497, 27517, 28504, 28898, 27569, 29939, 29401, 27600, 27323, 27633, 19025, 27662, 23114, 27705, 22420, 20483, 27721, 23511, 27765, 28306, 19803, 23540, 24035, 24610, 27781, 27805, 26650, 23114, 28573, 32990, 25920, 22468, 26870, 23511, 26684, 34262, 34737, 25057, 34622, 24035, 24035, 23971, 24206, 27825, 27847, 23114, 23114, 27865, 27885, 35766, 27914, 23511, 23511, 32766, 32844, 27934, 28795, 26909, 27955, 26092, 27988, 25445, 28005, 28036, 28052, 21965, 23511, 32196, 19897, 28072, 28102, 36534, 21541, 23801, 28153, 28180, 28197, 28221, 23036, 32695, 28251, 28268, 28292, 23667, 34825, 23930, 24580, 28322, 28344, 31627, 28366, 25996, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 35625, 33477, 33359, 27674, 28393, 33992, 24036, 23114, 30243, 19829, 28417, 28433, 28463, 23008, 19876, 20208, 23007, 20046, 20132, 28489, 28520, 20141, 24569, 31691, 19787, 28550, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 28589, 24035, 24035, 24035, 24035, 28608, 23114, 23114, 23114, 23114, 28618, 20431, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36004, 19288, 28634, 31951, 28565, 28702, 28718, 28741, 32544, 20175, 28792, 32086, 20105, 28811, 29059, 29862, 28856, 22420, 28886, 30354, 23359, 28922, 28306, 28952, 23888, 26320, 36506, 24035, 29331, 28968, 36609, 23114, 29003, 31661, 27061, 30649, 27366, 23511, 29023, 27918, 24694, 24035, 24035, 23893, 33094, 30867, 23113, 23114, 23114, 29044, 34184, 30010, 29700, 23511, 23511, 29081, 29102, 34585, 20402, 27789, 24035, 24035, 24036, 23114, 29132, 23114, 23114, 23029, 20271, 23511, 29153, 23511, 23511, 30562, 30174, 24035, 24035, 27409, 25438, 23114, 23114, 29172, 36668, 31332, 23511, 23511, 29192, 30144, 24035, 23110, 30203, 23114, 23467, 31544, 23261, 23628, 24035, 22545, 23111, 23114, 29213, 27078, 27689, 29234, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 29257, 23008, 19876, 20208, 28768, 29290, 29320, 34776, 29353, 20141, 22435, 29378, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36367, 19288, 21605, 34616, 19006, 32618, 31497, 31507, 36216, 20184, 24035, 34393, 29424, 34668, 23114, 34900, 29447, 22420, 30360, 23511, 37089, 29473, 28306, 19803, 29499, 24398, 24035, 24035, 26576, 31799, 29532, 29550, 23114, 33811, 22468, 32298, 29571, 31184, 23511, 23512, 37127, 36628, 29589, 24035, 24135, 24035, 23113, 29608, 23114, 27831, 29634, 28618, 29652, 30037, 23511, 24172, 29671, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 29555, 29690, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 29719, 24035, 23110, 29738, 23114, 23467, 34035, 29756, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 29777, 34364, 28181, 30243, 29799, 31920, 27272, 27185, 23008, 31126, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29828, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35989, 19552, 19687, 35139, 28649, 29878, 29894, 29924, 29939, 23224, 23085, 31969, 24036, 35173, 24752, 24803, 23114, 22420, 31190, 30318, 24870, 23511, 28306, 29967, 23967, 24035, 24035, 24035, 26576, 30000, 23114, 23114, 23114, 33811, 22468, 30026, 23511, 23511, 23511, 23512, 26078, 24035, 24035, 24035, 30053, 37137, 30071, 23114, 23114, 33368, 25136, 28618, 30723, 23511, 23511, 37096, 31356, 34585, 20402, 30092, 30127, 30160, 24036, 35740, 30219, 24960, 30259, 23029, 20271, 34042, 30285, 30342, 30376, 23289, 30055, 30400, 30419, 30438, 32640, 33532, 33514, 30472, 18792, 26267, 24323, 23057, 30493, 23639, 20008, 30196, 33188, 30517, 20075, 23511, 30541, 23628, 30578, 33928, 28776, 30594, 19874, 30610, 30637, 19830, 30677, 27646, 19872, 25779, 23266, 23232, 35016, 30243, 30696, 29812, 30712, 30746, 27206, 30779, 30807, 23007, 33395, 20132, 26578, 27685, 31703, 22928, 31691, 19787, 31079, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36352, 19288, 23335, 30841, 26131, 30888, 30904, 30986, 29939, 24035, 24704, 31017, 20025, 23114, 26178, 31051, 31095, 22420, 23511, 22524, 31142, 31172, 28534, 31206, 35497, 25196, 24035, 28592, 24503, 23114, 31239, 31285, 23114, 31305, 31321, 31355, 31372, 31407, 23511, 30556, 24694, 24035, 27501, 19805, 24035, 24035, 23113, 23114, 31428, 24066, 23114, 28618, 29700, 23511, 31837, 18809, 23511, 34585, 31448, 24035, 24035, 24035, 23090, 23114, 23114, 23114, 23114, 31619, 35038, 23511, 23511, 23511, 23511, 33714, 24035, 33085, 24035, 29431, 23114, 31467, 23114, 23143, 31487, 23511, 31523, 23511, 35195, 36783, 24035, 30111, 23567, 23114, 23467, 31543, 31560, 23628, 24035, 24035, 23111, 23114, 19874, 30953, 31584, 34508, 24035, 31608, 26345, 37055, 23266, 31643, 31677, 31719, 31747, 31786, 31822, 26898, 23008, 19876, 31859, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 31878, 31936, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35974, 19288, 21605, 27972, 35663, 31985, 29655, 32001, 36715, 24785, 25893, 23545, 31912, 19853, 19916, 25938, 24540, 22420, 31843, 29674, 29573, 32735, 28936, 19803, 24035, 24035, 32047, 24035, 26576, 23114, 23114, 27544, 23114, 33811, 22468, 23511, 23511, 32161, 23511, 23512, 32066, 24035, 33313, 24035, 24035, 24035, 23113, 27426, 32102, 23114, 23114, 28618, 32125, 23511, 32144, 23511, 23511, 33569, 20402, 24035, 27045, 24035, 24036, 23114, 23114, 28328, 23114, 30076, 32177, 23511, 23511, 30384, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23595, 32212, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 22635, 25753, 32233, 32257, 32277, 19829, 26577, 26597, 20211, 23008, 19876, 32322, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 32352, 35285, 32380, 34196, 33016, 30661, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 32404, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 32422, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 30269, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 19949, 24035, 23111, 32455, 19874, 31269, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36337, 19552, 19209, 21617, 26509, 32475, 32491, 32529, 29939, 24035, 32578, 25241, 32597, 23114, 32634, 29007, 32656, 22420, 23511, 32729, 26365, 32751, 28306, 32788, 32882, 24035, 24035, 32813, 36727, 23114, 33182, 23114, 27553, 33235, 32829, 23511, 32706, 23511, 28906, 28377, 26962, 32881, 32904, 32898, 32920, 24035, 32953, 23114, 32977, 26408, 23114, 28164, 33006, 23511, 33039, 35774, 23511, 32306, 20402, 33076, 30872, 24035, 24036, 25408, 33110, 28979, 23114, 23029, 20271, 35835, 33130, 33054, 23511, 30562, 33148, 24035, 24035, 33167, 23114, 23114, 33775, 23036, 20459, 23511, 23511, 25464, 24646, 24035, 24035, 22446, 23114, 23114, 25627, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 31391, 33204, 33220, 33251, 33287, 26577, 26597, 20211, 33329, 19876, 33345, 23007, 20046, 20132, 26578, 27685, 28473, 22599, 31691, 33411, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35959, 19288, 21907, 27243, 29843, 32618, 33427, 31507, 29939, 33460, 34090, 24035, 24036, 33493, 24416, 33530, 23114, 22420, 33548, 24379, 33585, 23511, 28306, 19803, 33603, 24202, 24035, 24035, 25593, 33749, 28205, 23114, 23114, 32388, 22468, 33853, 33060, 23511, 23511, 31339, 33621, 24035, 24035, 34397, 24618, 30757, 33663, 23114, 23114, 33683, 35684, 28618, 26678, 23511, 23511, 32506, 33699, 34585, 20402, 24035, 32562, 26973, 24036, 23114, 23114, 33377, 33773, 23029, 20271, 23511, 23511, 30621, 23511, 23860, 24035, 33791, 21553, 26576, 36558, 23114, 33809, 23036, 32857, 26047, 23511, 33827, 23634, 24035, 24035, 23110, 23114, 23114, 31252, 23511, 33845, 23628, 24035, 24459, 23111, 23114, 33869, 27078, 30791, 29783, 24035, 24742, 19872, 33895, 23266, 26462, 19710, 33879, 33919, 26577, 26597, 24123, 24930, 21930, 20208, 30501, 33953, 25268, 20252, 33983, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36322, 19552, 23390, 33634, 35154, 34008, 34024, 34058, 35544, 34106, 34128, 26811, 33151, 34144, 34169, 34212, 23114, 34228, 34244, 34278, 34315, 23511, 34331, 34347, 34380, 34413, 24035, 24663, 26576, 34429, 34453, 34477, 29534, 33811, 22468, 34499, 34524, 34557, 25170, 34580, 35436, 23937, 34601, 24035, 24341, 26453, 23113, 34638, 34662, 23114, 24236, 28618, 34684, 34703, 34729, 23511, 35352, 34753, 34799, 24035, 34815, 32558, 34848, 34888, 35814, 34923, 23165, 29137, 23606, 30326, 30730, 34939, 33023, 30562, 36848, 34979, 24035, 24847, 34996, 23114, 23114, 35032, 29695, 35054, 23511, 23511, 35091, 33296, 35124, 24296, 28235, 24361, 36276, 32772, 35067, 35189, 27301, 30855, 24852, 22452, 35211, 35237, 35316, 25500, 35270, 23405, 24304, 35304, 29362, 24036, 23114, 35332, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 35368, 28823, 23920, 32336, 35405, 20141, 24569, 31691, 35421, 35479, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35944, 22795, 21605, 33647, 35877, 35513, 30962, 35529, 34073, 35557, 24035, 24035, 20405, 31107, 23114, 23114, 23114, 35590, 34713, 23511, 23511, 23511, 35641, 19803, 29408, 32937, 25298, 24035, 35657, 23115, 27849, 24760, 35679, 26205, 22468, 23511, 35700, 24907, 24901, 35075, 31893, 34980, 24035, 24035, 24035, 24035, 23113, 35009, 23114, 23114, 23114, 28618, 35716, 30970, 23511, 23511, 23511, 34585, 23215, 24035, 24035, 24035, 24036, 35735, 23114, 23114, 23114, 27105, 35756, 35790, 23511, 23511, 23511, 35254, 35446, 24035, 24035, 31223, 35809, 23114, 23114, 23036, 36825, 35830, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 31031, 20355, 19872, 33903, 23266, 24036, 23114, 28686, 19829, 26577, 26597, 20211, 23008, 23424, 20208, 24711, 31065, 24486, 26578, 27685, 20141, 19773, 35851, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36307, 19288, 21605, 35494, 19702, 32618, 33437, 31507, 29939, 25117, 24035, 27939, 24036, 27869, 23114, 26829, 23114, 22420, 23494, 23511, 33132, 23511, 28306, 19803, 24035, 34832, 24035, 24035, 26576, 23114, 25153, 23114, 23114, 33811, 22468, 23511, 23511, 35911, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35929, 19288, 21605, 25860, 23112, 36185, 23511, 36201, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 26748, 24035, 24035, 24035, 24035, 24035, 36249, 23114, 23114, 23114, 23114, 28618, 28835, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 27151, 24035, 26760, 23114, 27989, 23114, 23114, 36268, 20271, 23511, 24436, 23511, 29703, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36292, 19288, 21605, 36503, 21922, 32618, 34534, 31507, 36522, 24035, 33793, 24035, 35864, 23114, 23114, 36555, 23417, 22420, 23511, 23511, 36574, 26020, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 36592, 24035, 24035, 36625, 24035, 24035, 23113, 23114, 32961, 23114, 23114, 29618, 29700, 23511, 29086, 23511, 23511, 34585, 20402, 36644, 24035, 24035, 24036, 29740, 23114, 23114, 23114, 29065, 36663, 31527, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 31451, 23112, 36684, 23511, 36700, 29939, 24035, 24035, 24035, 30185, 23114, 23114, 23114, 27526, 22420, 23511, 23511, 23511, 32865, 28306, 19803, 36743, 24035, 27017, 24035, 26576, 27535, 23114, 31432, 23114, 33811, 22468, 33271, 23511, 32128, 23511, 23512, 24694, 24035, 27196, 24035, 24035, 24035, 23113, 32459, 23114, 23114, 23114, 28618, 29700, 33829, 36762, 23511, 23511, 34585, 20402, 24035, 36746, 24035, 29722, 23114, 23114, 34437, 23114, 34907, 20271, 23511, 23511, 18801, 23511, 23206, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 36837, 24035, 24035, 33739, 23114, 23114, 25094, 23511, 23261, 23628, 24035, 36780, 23111, 24073, 19874, 27078, 35344, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22720, 19288, 36799, 36866, 17466, 36890, 36864, 21991, 22211, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17631, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22705, 19288, 19457, 36866, 17466, 36890, 36866, 19375, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36124, 19288, 36951, 36866, 17466, 36890, 36866, 21991, 22404, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18567, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36979, 36995, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18027, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 21529, 24035, 23112, 23033, 23511, 31507, 25377, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 37040, 23511, 23511, 23511, 23511, 28086, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 37079, 23511, 23511, 23511, 23511, 23512, 34766, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 37112, 37160, 18469, 36866, 17466, 36890, 36866, 17656, 37174, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18537, 22984, 17553, 17572, 22285, 18780, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 0, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 127011, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2576384, 2215936, 2215936, 2215936, 2416640, 2424832, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2543616, 2215936, 2215936, 2215936, 2215936, 2215936, 2629632, 2215936, 2617344, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2691072, 2215936, 2707456, 2215936, 2715648, 2215936, 2723840, 2764800, 2215936, 2215936, 2797568, 2215936, 2822144, 2215936, 2215936, 2854912, 2215936, 2215936, 2215936, 2912256, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 180224, 0, 0, 2174976, 0, 0, 2170880, 2617344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2691072, 2170880, 2707456, 2170880, 2715648, 2170880, 2723840, 2764800, 2170880, 2170880, 2797568, 2170880, 2170880, 2797568, 2170880, 2822144, 2170880, 2170880, 2854912, 2170880, 2170880, 2170880, 2912256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2609152, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2654208, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 184599, 280, 0, 2174976, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 544, 0, 546, 0, 0, 2179072, 0, 0, 0, 552, 0, 0, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2158592, 2158592, 2232320, 2232320, 0, 2240512, 2240512, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 2768896, 2789376, 2813952, 2170880, 2170880, 2170880, 2875392, 2904064, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 167936, 0, 0, 0, 0, 2174976, 0, 0, 2215936, 2215936, 2514944, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2592768, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 32768, 0, 0, 0, 0, 0, 2174976, 32768, 0, 2633728, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2711552, 2215936, 2215936, 2215936, 2215936, 2215936, 2760704, 2768896, 2789376, 2813952, 2215936, 2215936, 2215936, 2875392, 2904064, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 65819, 2215936, 2215936, 3031040, 2215936, 3055616, 2215936, 2215936, 2215936, 2215936, 3092480, 2215936, 2215936, 3125248, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2170880, 2170880, 2494464, 2170880, 2170880, 0, 0, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 2699264, 2170880, 2727936, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3026944, 2170880, 2170880, 3063808, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 2379776, 2215936, 2523136, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2596864, 2215936, 2621440, 2215936, 2215936, 2641920, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 548, 0, 0, 0, 0, 287, 2170880, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2699264, 2215936, 2727936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2879488, 2215936, 2916352, 2215936, 2215936, 0, 0, 0, 0, 188416, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 0, 2171019, 2171019, 2171019, 2400395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3031179, 2171019, 3055755, 2171019, 2171019, 2215936, 3133440, 2215936, 2215936, 2215936, 3162112, 2215936, 2215936, 3182592, 3186688, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2523275, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2597003, 2171019, 2621579, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 4337664, 28, 2170880, 2170880, 2170880, 2629632, 2170880, 2170880, 2170880, 2170880, 2719744, 2744320, 2170880, 2170880, 2170880, 2834432, 2838528, 2170880, 2908160, 2170880, 2170880, 2936832, 2215936, 2215936, 2215936, 2215936, 2719744, 2744320, 2215936, 2215936, 2215936, 2834432, 2838528, 2215936, 2908160, 2215936, 2215936, 2936832, 2215936, 2215936, 2985984, 2215936, 2994176, 2215936, 2215936, 3014656, 2215936, 3059712, 3076096, 3088384, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2445312, 2215936, 2465792, 2473984, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2171019, 2494603, 2171019, 2171019, 2215936, 2215936, 2215936, 3215360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3016168, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 124, 124, 0, 128, 128, 2170880, 2170880, 2170880, 3215360, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2535424, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 0, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2170880, 2170880, 3170304, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 2215936, 2215936, 2215936, 2535424, 2539520, 2215936, 2215936, 2588672, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 136, 0, 2215936, 2215936, 2920448, 2215936, 2215936, 2215936, 2990080, 2215936, 2215936, 2215936, 2215936, 3051520, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3108864, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3026944, 2215936, 2215936, 3063808, 2215936, 2215936, 3112960, 2215936, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2537049, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 1508, 2170880, 2170880, 2170880, 1512, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2686976, 2748416, 2170880, 2170880, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3121152, 2170880, 2170880, 3145728, 3158016, 3166208, 2170880, 2420736, 2428928, 2170880, 2478080, 2170880, 2170880, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 0, 0, 3145728, 3158016, 3166208, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 0, 2170880, 2215936, 2215936, 2580480, 2215936, 2605056, 2637824, 2215936, 2215936, 2686976, 2748416, 2215936, 2215936, 2215936, 2924544, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 286, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 1625, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 647, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2686976, 0, 0, 2748416, 2170880, 2170880, 0, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 0, 0, 28, 28, 2170880, 3141632, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2170880, 2420736, 2428928, 2752512, 2756608, 0, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2170880, 3141632, 2170880, 2170880, 2490368, 2215936, 2490368, 2215936, 2215936, 2215936, 2547712, 2555904, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 245760, 0, 3129344, 2170880, 2170880, 2490368, 2170880, 2170880, 2170880, 0, 0, 2547712, 2555904, 2170880, 2170880, 2170880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 45056, 0, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1482, 97, 97, 97, 97, 97, 97, 97, 1354, 97, 97, 97, 97, 97, 97, 97, 97, 1148, 97, 97, 97, 97, 97, 97, 97, 2584576, 2170880, 2170880, 1512, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2170880, 2850816, 2170880, 2170880, 2170880, 3022848, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 2215936, 3022848, 2170880, 2441216, 2170880, 2527232, 0, 0, 2170880, 2600960, 2170880, 0, 2850816, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2596864, 2170880, 2621440, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 3022848, 2170880, 2519040, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2514944, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2519040, 0, 2024, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 2024, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 2170880, 2215936, 2650112, 2965504, 2215936, 0, 0, 2170880, 2650112, 2965504, 2170880, 2551808, 2170880, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 141, 45, 45, 67, 67, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 0, 2551808, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2977792, 2977792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 29, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 49172, 0, 0, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 4256099, 4256099, 24, 24, 0, 28, 28, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 0, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 2170880, 2547712, 2555904, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2215936, 2215936, 543, 543, 545, 545, 0, 0, 2179072, 0, 550, 551, 551, 0, 287, 2171166, 2171166, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 645, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 149, 2584576, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2519040, 0, 0, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 0, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 53264, 18, 49172, 57366, 24, 155648, 28, 102432, 155648, 155687, 114730, 106539, 0, 0, 155648, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 0, 0, 2220032, 0, 94208, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 208896, 18, 278528, 24, 24, 0, 28, 28, 53264, 18, 159765, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 139394, 28, 28, 102432, 131, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 32768, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 546, 0, 0, 2183168, 0, 0, 552, 832, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2654208, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 1084, 0, 1088, 0, 1092, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 937, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 644, 0, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 826, 0, 828, 0, 0, 2183168, 0, 0, 830, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2170880, 2170880, 2633728, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 53264, 18, 49172, 57366, 24, 8192, 28, 172066, 172032, 110630, 172066, 106539, 0, 0, 172032, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 102432, 0, 98304, 0, 0, 2220032, 110630, 0, 0, 0, 0, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 45056, 0, 0, 0, 53264, 18, 49172, 57366, 25, 8192, 30, 102432, 0, 110630, 114730, 106539, 0, 0, 176219, 53264, 18, 18, 49172, 0, 57366, 0, 124, 124, 124, 0, 128, 128, 128, 128, 102432, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 546, 0, 0, 2183168, 0, 65536, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 143, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1824, 67, 1826, 67, 67, 67, 67, 17, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 120, 121, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 2179072, 548, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2033, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 978, 0, 546, 70179, 0, 2183168, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1013, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 67, 67, 67, 483, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1359, 97, 97, 97, 67, 67, 1584, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 45, 45, 45, 45, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 774, 67, 67, 1713, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1723, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 45, 1559, 45, 45, 1561, 45, 45, 45, 45, 45, 45, 45, 687, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1771, 1772, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 1827, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 1614, 97, 97, 97, 97, 97, 603, 97, 97, 605, 97, 97, 608, 97, 97, 97, 97, 0, 1532, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 450, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 1839, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 1883, 97, 1885, 97, 0, 1888, 0, 97, 97, 0, 97, 97, 1848, 97, 97, 97, 97, 1852, 45, 45, 45, 45, 45, 45, 45, 384, 391, 45, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 45, 45, 45, 45, 1237, 45, 45, 45, 45, 45, 45, 67, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1951, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1963, 97, 2023, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 1994, 67, 1995, 67, 67, 67, 67, 67, 67, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 137, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2793472, 2805760, 2170880, 2830336, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 281, 549, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2031, 2032, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1769, 67, 0, 546, 70179, 549, 549, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1858, 45, 641, 0, 0, 0, 0, 41606, 926, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 456, 67, 0, 0, 0, 1313, 0, 0, 0, 1096, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1110, 97, 97, 97, 97, 67, 67, 67, 67, 1301, 1476, 0, 0, 0, 0, 1307, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1486, 97, 1487, 97, 1313, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 97, 45, 1853, 45, 1855, 45, 45, 45, 45, 53264, 18, 49172, 57366, 26, 8192, 31, 102432, 0, 110630, 114730, 106539, 0, 0, 225368, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 18, 49172, 163840, 57366, 0, 24, 24, 229376, 0, 28, 28, 28, 229376, 102432, 0, 0, 0, 0, 2220167, 110630, 0, 0, 0, 114730, 106539, 0, 2171019, 2171019, 2171019, 2171019, 2592907, 2171019, 2171019, 2171019, 2171019, 2633867, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2654347, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3117195, 2171019, 2171019, 2171019, 2171019, 2240641, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 140, 2171019, 2171019, 2171019, 2416779, 2424971, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2617483, 2171019, 2171019, 2642059, 2171019, 2171019, 2171019, 2699403, 2171019, 2728075, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3215499, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2171019, 2822283, 2171019, 2171019, 2855051, 2171019, 2171019, 2171019, 2912395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3002507, 2171019, 2171019, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2171166, 2171166, 2416926, 2425118, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2576670, 2171166, 2617630, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2691358, 2171166, 2707742, 2171166, 2715934, 2171166, 2724126, 2765086, 2171166, 2171166, 2797854, 2171166, 2822430, 2171166, 2171166, 2855198, 2171166, 2171166, 2171166, 2912542, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2793758, 2806046, 2171166, 2830622, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3109150, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2543902, 2171166, 2171166, 2171166, 2171166, 2171166, 2629918, 2793611, 2805899, 2171019, 2830475, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2171166, 2171166, 2171166, 2400542, 2171166, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 0, 2171166, 2920734, 2171166, 2171166, 2171166, 2990366, 2171166, 2171166, 2171166, 2171166, 3117342, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 53264, 0, 18, 18, 4329472, 2232445, 0, 2240641, 4337664, 2711691, 2171019, 2171019, 2171019, 2171019, 2171019, 2760843, 2769035, 2789515, 2814091, 2171019, 2171019, 2171019, 2875531, 2904203, 2171019, 2171019, 3092619, 2171019, 2171019, 3125387, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3199115, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2793472, 2805760, 2215936, 2830336, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2494464, 2170880, 2170880, 2171166, 2171166, 2634014, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2711838, 2171166, 2171166, 2171166, 2171166, 2171166, 2760990, 2769182, 2789662, 2814238, 2171166, 2171166, 2171166, 2875678, 2904350, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3199262, 2171166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379915, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2445451, 2171019, 2465931, 2474123, 2171019, 2171019, 3113099, 2171019, 2171019, 3133579, 2171019, 2171019, 2171019, 3162251, 2171019, 2171019, 3182731, 3186827, 2171019, 2379776, 2879627, 2171019, 2916491, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3027083, 2171019, 2171019, 3063947, 2699550, 2171166, 2728222, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2879774, 2171166, 2916638, 2171166, 2171166, 2171166, 2171166, 2171166, 2609438, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2654494, 2171166, 2171166, 2171166, 2171166, 2171166, 2445598, 2171166, 2466078, 2474270, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2523422, 2171019, 2437259, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2543755, 2171019, 2171019, 2171019, 2584715, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2908299, 2171019, 2171019, 2936971, 2171019, 2171019, 2986123, 2171019, 2994315, 2171019, 2171019, 3014795, 2171019, 3059851, 3076235, 3088523, 2171166, 2171166, 2986270, 2171166, 2994462, 2171166, 2171166, 3014942, 2171166, 3059998, 3076382, 3088670, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3027230, 2171166, 2171166, 3064094, 2171166, 2171166, 3113246, 2171166, 2171166, 3133726, 2506891, 2171019, 2171019, 2171019, 2535563, 2539659, 2171019, 2171019, 2588811, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2691211, 2171019, 2707595, 2171019, 2715787, 2171019, 2723979, 2764939, 2171019, 2171019, 2797707, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2453790, 2457886, 2171166, 2171166, 2171166, 2486558, 2171166, 2171166, 2507038, 2171166, 2171166, 2171166, 2535710, 2539806, 2171166, 2171166, 2588958, 2171166, 2171166, 2171166, 2171166, 2515230, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2593054, 2171166, 2171166, 2171166, 2171166, 3051806, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3170590, 0, 2388107, 2392203, 2171019, 2171019, 2433163, 2171019, 2461835, 2171019, 2171019, 2171019, 2510987, 2171019, 2171019, 2171019, 2171019, 2580619, 2171019, 2605195, 2637963, 2171019, 2171019, 2171019, 2920587, 2171019, 2171019, 2171019, 2990219, 2171019, 2171019, 2171019, 2171019, 3051659, 2171019, 2171019, 2171019, 2453643, 2457739, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2515083, 2171019, 2171019, 2171019, 2171019, 2646155, 2670731, 2752651, 2756747, 2846859, 2961547, 2171019, 2998411, 2171019, 3010699, 2171019, 2171019, 2687115, 2748555, 2171019, 2171019, 2171019, 2924683, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3121291, 2171019, 2171019, 2171019, 3170443, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 3145867, 3158155, 3166347, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 553, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2388254, 2392350, 2171166, 2171166, 2433310, 2171166, 2461982, 2171166, 2171166, 2171166, 2511134, 2171166, 2171166, 0, 2171166, 2171166, 2580766, 2171166, 2605342, 2638110, 2171166, 2171166, 2171166, 2171166, 3031326, 2171166, 3055902, 2171166, 2171166, 2171166, 2171166, 3092766, 2171166, 2171166, 3125534, 2171166, 2171166, 2171166, 3162398, 2171166, 2171166, 3182878, 3186974, 2171166, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 3109003, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2171166, 2687262, 0, 0, 2748702, 2171166, 2171166, 0, 2171166, 2924830, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2597150, 2171166, 2621726, 2171166, 2171166, 2642206, 2171166, 2171166, 2171166, 2171166, 3121438, 2171166, 2171166, 3146014, 3158302, 3166494, 2171019, 2420875, 2429067, 2171019, 2478219, 2171019, 2171019, 2171019, 2171019, 2547851, 2556043, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3129483, 2215936, 2171019, 3141771, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2171166, 2421022, 2429214, 2171166, 2478366, 2171166, 2171166, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2646302, 2670878, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 0, 45, 45, 45, 45, 45, 1405, 1406, 45, 45, 45, 45, 1409, 45, 45, 45, 45, 45, 1415, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1238, 45, 45, 45, 45, 67, 2752798, 2756894, 0, 2847006, 2961694, 2171166, 2998558, 2171166, 3010846, 2171166, 2171166, 2171166, 3141918, 2171019, 2171019, 2490507, 3129344, 2171166, 2171166, 2490654, 2171166, 2171166, 2171166, 0, 0, 2547998, 2556190, 2171166, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 167, 45, 45, 45, 45, 185, 187, 45, 45, 198, 45, 45, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3129630, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2576523, 2171019, 2171019, 2171019, 2171019, 2171019, 2609291, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2171166, 2171166, 2494750, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 147, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 3002654, 2171166, 2171166, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2175257, 0, 0, 2584862, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2441355, 2171019, 2527371, 2171019, 2601099, 2171019, 2850955, 2171019, 2171019, 2171019, 3022987, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 69632, 287, 2170880, 2215936, 3022848, 2171166, 2441502, 2171166, 2527518, 0, 0, 2171166, 2601246, 2171166, 0, 2851102, 2171166, 2171166, 2171166, 2171166, 2720030, 2744606, 2171166, 2171166, 2171166, 2834718, 2838814, 2171166, 2908446, 2171166, 2171166, 2937118, 3023134, 2171019, 2519179, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 3215646, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2486411, 2171019, 2171019, 2171019, 2629771, 2171019, 2171019, 2171019, 2171019, 2719883, 2744459, 2171019, 2171019, 2171019, 2834571, 2838667, 2171019, 2519326, 0, 0, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 2396299, 2171019, 2171019, 2171019, 2171019, 3018891, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396446, 0, 0, 2171166, 2171166, 2171166, 2171166, 3019038, 2171019, 2650251, 2965643, 2171019, 2215936, 2650112, 2965504, 2215936, 0, 0, 2171166, 2650398, 2965790, 2171166, 2551947, 2171019, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 144, 45, 45, 67, 67, 67, 67, 67, 228, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1929, 97, 97, 97, 97, 0, 0, 0, 2552094, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2977931, 2977792, 2978078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1321, 97, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 140, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2584576, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 140, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3215360, 544, 0, 0, 0, 544, 0, 546, 0, 0, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 0, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 552, 0, 0, 0, 552, 0, 287, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 644, 0, 2215936, 2215936, 3170304, 544, 0, 546, 0, 552, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 140, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 249856, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 151640, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 253952, 110630, 114730, 106539, 0, 0, 32856, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 192512, 53264, 18, 18, 49172, 0, 57366, 0, 2232445, 184320, 2232445, 0, 2240641, 2240641, 184320, 2240641, 102432, 0, 0, 0, 221184, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3108864, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 0, 0, 0, 45056, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 127, 127, 53264, 18, 49172, 258071, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 204800, 53264, 18, 49172, 57366, 24, 27, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 33, 0, 33, 33, 33, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2170880, 2170880, 2170880, 2416640, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2030, 45, 45, 45, 45, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1699, 67, 67, 67, 67, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 1358, 97, 97, 97, 641, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 45, 45, 45, 0, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1680, 45, 45, 45, 641, 0, 924, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 45, 45, 45, 45, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 282, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 2028, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1767, 67, 67, 67, 0, 0, 0, 0, 0, 0, 1612, 97, 97, 97, 97, 97, 97, 0, 1785, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1790, 97, 0, 0, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 241664, 2387968, 2392064, 2170880, 2170880, 2433024, 53264, 19, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 274432, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 270336, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 1134711, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 1126440, 1126440, 1126440, 0, 0, 1126400, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 36, 110630, 114730, 106539, 0, 0, 217088, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 94, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 96, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 24666, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 126, 28, 28, 28, 28, 102432, 53264, 122, 123, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 2170880, 2170880, 4256099, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1109, 97, 97, 97, 97, 1113, 132, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 146, 150, 45, 45, 45, 45, 45, 175, 45, 180, 45, 186, 45, 189, 45, 45, 203, 67, 256, 67, 67, 270, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 293, 297, 97, 97, 97, 97, 97, 322, 97, 327, 97, 333, 97, 0, 0, 97, 2026, 0, 2027, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 336, 97, 97, 350, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 2424832, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2617344, 2170880, 45, 439, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 525, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 622, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 1527, 369, 648, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1239, 45, 45, 45, 67, 729, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 762, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 0, 0, 0, 1477, 0, 1086, 0, 0, 0, 1479, 0, 1090, 67, 67, 796, 67, 67, 799, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 67, 67, 811, 67, 67, 67, 67, 67, 816, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 833, 97, 97, 97, 97, 97, 97, 97, 97, 1380, 0, 0, 0, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 45, 45, 45, 45, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 97, 97, 97, 894, 97, 97, 897, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1382, 45, 45, 45, 97, 909, 97, 97, 97, 97, 97, 914, 97, 97, 97, 97, 97, 97, 97, 923, 67, 67, 1079, 67, 67, 67, 67, 67, 37689, 1085, 25403, 1089, 66365, 1093, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 148, 1114, 97, 97, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 97, 97, 606, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1173, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 145, 45, 45, 67, 67, 67, 67, 67, 1762, 67, 67, 67, 1766, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1934, 67, 67, 1255, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 67, 67, 67, 67, 1297, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 33344, 97, 97, 97, 1335, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1377, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 670, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 67, 67, 1438, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 0, 0, 0, 1311, 0, 0, 0, 1317, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1322, 97, 97, 1491, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 1553, 45, 1504, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 97, 97, 0, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 1540, 45, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1700, 67, 67, 67, 97, 1648, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1541, 0, 97, 97, 97, 97, 0, 1940, 0, 97, 97, 97, 97, 97, 97, 45, 45, 2011, 45, 45, 45, 2015, 67, 67, 2017, 67, 67, 67, 2021, 97, 67, 67, 812, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 97, 97, 910, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 0, 0, 0, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 1188, 45, 45, 45, 45, 1414, 45, 45, 45, 1417, 45, 1419, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 453, 45, 45, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 1324, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 930, 45, 45, 45, 45, 97, 97, 97, 97, 1378, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 45, 67, 67, 1923, 67, 1925, 67, 67, 1927, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1985, 45, 45, 45, 45, 45, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 45, 946, 45, 45, 950, 45, 45, 45, 0, 97, 97, 97, 1939, 0, 0, 0, 97, 1943, 97, 97, 1945, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 990, 45, 45, 45, 67, 257, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 337, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 2170880, 2170880, 2170880, 2416640, 401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 459, 461, 67, 67, 67, 67, 67, 67, 67, 67, 475, 67, 480, 67, 67, 67, 67, 67, 67, 1054, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 484, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 67, 67, 97, 556, 558, 97, 97, 97, 97, 97, 97, 97, 97, 572, 97, 577, 97, 97, 0, 0, 1896, 97, 97, 97, 97, 97, 97, 1903, 45, 45, 45, 45, 983, 45, 45, 45, 45, 988, 45, 45, 45, 45, 45, 45, 1195, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1549, 45, 45, 45, 45, 45, 581, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1004, 45, 45, 45, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 761, 67, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 1071, 67, 67, 67, 67, 1076, 794, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 544, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 859, 97, 0, 0, 2025, 97, 20480, 97, 97, 2029, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1775, 67, 67, 67, 97, 97, 97, 97, 892, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1515, 97, 993, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 992, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1607, 67, 67, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 97, 45, 1556, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 696, 45, 1596, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 67, 97, 97, 97, 1621, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1346, 97, 97, 97, 97, 1740, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 45, 45, 67, 97, 97, 97, 97, 97, 97, 1836, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1984, 97, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 45, 45, 45, 45, 67, 739, 67, 67, 67, 67, 67, 744, 45, 45, 1909, 45, 45, 45, 45, 45, 45, 45, 67, 1917, 67, 1918, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 67, 67, 67, 67, 67, 97, 1930, 97, 1931, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 1580, 67, 67, 0, 97, 97, 1938, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 699, 45, 45, 45, 704, 45, 45, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 2006, 97, 97, 97, 97, 0, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 722, 723, 45, 45, 45, 45, 45, 45, 2045, 67, 67, 67, 2047, 0, 0, 97, 97, 97, 2051, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1957, 45, 67, 67, 67, 67, 67, 1836, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 67, 67, 1761, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 45, 45, 420, 45, 45, 422, 45, 45, 425, 45, 45, 45, 45, 45, 45, 45, 387, 45, 45, 45, 45, 397, 45, 45, 45, 67, 460, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 515, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 97, 0, 2039, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1426, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1689, 67, 67, 67, 97, 557, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 612, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 896, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 97, 45, 939, 45, 45, 45, 45, 943, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1916, 67, 67, 67, 67, 67, 45, 67, 67, 67, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 1019, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 804, 67, 67, 67, 67, 67, 1077, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2543616, 2170880, 2170880, 2170880, 2170880, 2170880, 2629632, 1169, 97, 1171, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 936, 45, 45, 67, 67, 214, 67, 220, 67, 67, 233, 67, 243, 67, 248, 67, 67, 67, 67, 67, 67, 1298, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1617, 97, 0, 0, 0, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 45, 45, 45, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 1281, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 776, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 907, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 690, 45, 45, 695, 45, 45, 67, 67, 67, 67, 67, 1465, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1712, 97, 97, 97, 97, 1741, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1924, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1983, 97, 97, 45, 45, 1987, 45, 1988, 45, 0, 97, 97, 97, 97, 0, 0, 0, 1942, 97, 97, 97, 97, 97, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 711, 45, 45, 153, 45, 45, 166, 45, 176, 45, 181, 45, 45, 188, 191, 196, 45, 204, 255, 258, 263, 67, 271, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 97, 97, 294, 97, 300, 97, 97, 313, 97, 323, 97, 328, 97, 97, 335, 338, 343, 97, 351, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1411, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 67, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1263, 67, 67, 67, 67, 67, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1526, 97, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 0, 97, 97, 1796, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1744, 45, 45, 45, 369, 0, 651, 45, 653, 45, 654, 45, 656, 45, 45, 45, 660, 45, 45, 45, 45, 1558, 45, 45, 45, 45, 45, 45, 45, 45, 1566, 45, 45, 681, 45, 683, 45, 45, 45, 45, 45, 45, 45, 45, 691, 692, 694, 45, 45, 45, 716, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 709, 45, 45, 712, 45, 714, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 726, 45, 45, 45, 733, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 747, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 1613, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 67, 764, 67, 67, 67, 67, 768, 67, 770, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1977, 67, 778, 779, 781, 67, 67, 67, 67, 67, 67, 788, 789, 67, 67, 792, 793, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 67, 67, 824, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 836, 97, 838, 97, 839, 97, 841, 97, 97, 97, 845, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 97, 97, 0, 1728, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1802, 45, 97, 97, 862, 97, 97, 97, 97, 866, 97, 868, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1788, 97, 97, 97, 0, 0, 97, 97, 876, 877, 879, 97, 97, 97, 97, 97, 97, 886, 887, 97, 97, 890, 891, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1646, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 97, 97, 922, 923, 45, 955, 45, 957, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 195, 45, 45, 45, 45, 45, 981, 982, 45, 45, 45, 45, 45, 45, 989, 45, 45, 45, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 67, 67, 1031, 67, 1033, 67, 67, 67, 67, 67, 67, 67, 817, 819, 67, 67, 67, 67, 67, 37689, 544, 67, 1065, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 1078, 67, 67, 1081, 1082, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2437406, 2171166, 2171166, 97, 1115, 97, 1117, 97, 97, 97, 97, 97, 97, 1125, 97, 1127, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 1644, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 1642, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1159, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1502, 97, 97, 97, 97, 97, 1172, 97, 97, 1175, 1176, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 935, 45, 45, 45, 1233, 45, 45, 45, 1236, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1873, 67, 67, 45, 45, 1218, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 1230, 45, 45, 67, 67, 215, 219, 222, 67, 230, 67, 67, 244, 246, 249, 67, 67, 67, 67, 67, 67, 1882, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1904, 45, 1905, 45, 67, 67, 67, 67, 67, 1258, 67, 1260, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 67, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 67, 818, 67, 67, 67, 67, 67, 67, 37689, 544, 67, 67, 1295, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 97, 97, 97, 1326, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 97, 97, 97, 97, 97, 1338, 97, 1340, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 1503, 97, 1363, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 578, 97, 1375, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 45, 45, 45, 45, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1778, 97, 97, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 97, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 1554, 45, 1570, 1571, 45, 67, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 67, 1061, 67, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 1594, 67, 67, 67, 67, 67, 97, 2038, 0, 97, 97, 97, 97, 97, 2044, 45, 45, 45, 995, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 45, 45, 45, 1809, 45, 1811, 45, 45, 45, 45, 45, 67, 1610, 1611, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 1618, 1647, 1649, 97, 97, 97, 1652, 97, 1654, 1655, 97, 0, 45, 45, 45, 1658, 45, 45, 67, 67, 216, 67, 67, 67, 67, 234, 67, 67, 67, 67, 252, 254, 1845, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 947, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1881, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1902, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1921, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 0, 97, 1937, 97, 97, 1940, 0, 0, 97, 97, 97, 97, 97, 97, 1947, 1948, 1949, 45, 45, 45, 1952, 45, 1954, 45, 45, 45, 45, 1959, 1960, 1961, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 67, 67, 1964, 67, 1966, 67, 67, 67, 67, 1971, 1972, 1973, 97, 0, 0, 0, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 884, 97, 97, 97, 889, 97, 97, 1978, 97, 0, 0, 1981, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 736, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 45, 67, 67, 67, 67, 0, 2049, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 933, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 97, 97, 288, 97, 97, 97, 97, 97, 97, 317, 97, 97, 97, 97, 97, 97, 0, 0, 97, 1787, 97, 97, 97, 97, 0, 0, 45, 45, 378, 45, 45, 45, 45, 45, 390, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 431, 433, 45, 45, 45, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 67, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 632, 97, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 67, 97, 97, 97, 97, 97, 97, 1837, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1897, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 97, 2010, 45, 45, 45, 45, 45, 45, 2016, 67, 67, 67, 67, 67, 67, 2022, 45, 2046, 67, 67, 67, 0, 0, 2050, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 932, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 45, 45, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 701, 702, 45, 45, 705, 706, 45, 45, 45, 45, 45, 45, 703, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 45, 45, 45, 45, 45, 725, 45, 45, 45, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 834, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1799, 97, 97, 45, 45, 45, 1569, 45, 45, 45, 1572, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1306, 0, 67, 67, 67, 1598, 67, 67, 67, 67, 67, 67, 67, 67, 1606, 67, 67, 1609, 97, 97, 97, 1650, 97, 97, 1653, 97, 97, 97, 0, 45, 45, 1657, 45, 45, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1421, 45, 45, 45, 1703, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1711, 97, 97, 0, 1895, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 958, 45, 960, 45, 45, 45, 45, 45, 45, 45, 45, 1913, 45, 45, 1915, 67, 67, 67, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 481, 67, 45, 1749, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 45, 45, 45, 45, 173, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1773, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1886, 0, 0, 0, 97, 97, 67, 2035, 2036, 67, 67, 97, 0, 0, 97, 2041, 2042, 97, 97, 45, 45, 45, 45, 1662, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1397, 45, 45, 45, 45, 151, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 437, 205, 45, 67, 67, 67, 218, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 67, 97, 97, 97, 97, 298, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 97, 97, 97, 97, 97, 97, 352, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 365, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1427, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1435, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1037, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1919, 67, 1759, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 45, 154, 45, 162, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 964, 45, 45, 45, 206, 45, 67, 67, 67, 67, 221, 67, 229, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 67, 785, 67, 67, 67, 67, 67, 67, 67, 67, 802, 67, 67, 67, 807, 67, 67, 67, 97, 97, 97, 97, 353, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 402, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 45, 45, 674, 45, 45, 45, 45, 45, 45, 45, 45, 389, 45, 394, 45, 45, 398, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 447, 45, 45, 45, 454, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 488, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 67, 67, 67, 67, 67, 1774, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 67, 67, 523, 67, 67, 527, 67, 67, 67, 67, 67, 533, 67, 67, 67, 540, 97, 97, 97, 585, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 97, 97, 97, 97, 1784, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 620, 97, 97, 624, 97, 97, 97, 97, 97, 630, 97, 97, 97, 637, 713, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 45, 45, 45, 1197, 45, 45, 45, 45, 45, 45, 45, 45, 730, 732, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1581, 67, 45, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 775, 67, 67, 67, 67, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 67, 67, 67, 1080, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 287, 0, 2379776, 2170880, 2170880, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 920, 97, 97, 0, 0, 0, 0, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 45, 959, 45, 45, 45, 45, 45, 45, 45, 45, 45, 184, 45, 45, 45, 45, 202, 45, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1266, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1279, 67, 67, 67, 67, 67, 272, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1293, 67, 67, 67, 1296, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 281, 94, 0, 0, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 0, 97, 1376, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1384, 45, 45, 67, 208, 67, 67, 67, 67, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1069, 1070, 67, 67, 67, 67, 67, 67, 67, 0, 37140, 24854, 0, 0, 0, 0, 41098, 65821, 45, 1423, 45, 45, 45, 45, 45, 45, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1083, 37689, 0, 25403, 0, 66365, 0, 0, 0, 1436, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1830, 67, 1452, 1453, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 67, 67, 1461, 67, 67, 67, 1464, 67, 1466, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 1587, 67, 67, 67, 67, 67, 67, 67, 67, 1595, 1489, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 1505, 1506, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 1164, 97, 97, 97, 97, 97, 1516, 97, 97, 97, 1519, 97, 1521, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1301, 0, 0, 0, 1307, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 919, 97, 97, 97, 0, 97, 97, 97, 1781, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1792, 1860, 45, 1862, 1863, 45, 1865, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1875, 67, 1877, 1878, 67, 1880, 67, 97, 97, 97, 97, 97, 1887, 0, 1889, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 237568, 0, 367, 0, 97, 1893, 0, 0, 0, 97, 1898, 1899, 97, 1901, 97, 45, 45, 45, 45, 45, 2014, 45, 67, 67, 67, 67, 67, 2020, 67, 97, 1989, 45, 1990, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1996, 67, 1997, 67, 67, 67, 67, 67, 273, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 2005, 0, 97, 2007, 97, 97, 18, 0, 139621, 0, 0, 0, 642, 0, 133, 364, 0, 0, 367, 41606, 0, 97, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 209, 67, 67, 67, 223, 67, 67, 67, 67, 67, 67, 67, 67, 67, 786, 67, 67, 67, 791, 67, 67, 45, 45, 940, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1016, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 142, 45, 45, 67, 210, 67, 67, 67, 225, 67, 67, 239, 67, 67, 67, 250, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 476, 67, 67, 67, 67, 67, 67, 67, 1709, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1843, 0, 67, 259, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 289, 97, 97, 97, 303, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 97, 339, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 358, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1953, 45, 1955, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1687, 1688, 67, 67, 67, 67, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1203, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 477, 67, 67, 67, 67, 67, 67, 67, 1970, 97, 97, 97, 1974, 0, 0, 0, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1372, 97, 97, 97, 97, 67, 522, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 536, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 574, 97, 97, 97, 97, 97, 301, 97, 309, 97, 97, 97, 97, 97, 97, 97, 97, 97, 900, 97, 97, 97, 905, 97, 97, 97, 619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 633, 97, 97, 18, 0, 139621, 0, 0, 362, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 664, 67, 67, 67, 67, 750, 751, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1057, 1058, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 67, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 902, 97, 97, 97, 97, 67, 67, 1051, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1302, 0, 0, 0, 1308, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1139, 97, 97, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 1161, 97, 97, 97, 97, 97, 1166, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 1257, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 97, 97, 1337, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1630, 97, 67, 1474, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2380062, 2171166, 2171166, 97, 1529, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 45, 45, 67, 67, 67, 67, 1707, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1891, 1739, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 1200, 45, 45, 45, 45, 97, 97, 1894, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 45, 45, 45, 67, 67, 1965, 67, 1967, 67, 67, 67, 97, 97, 97, 97, 0, 1976, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 97, 97, 1979, 0, 0, 97, 1982, 97, 97, 97, 1986, 45, 45, 45, 45, 45, 735, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 2000, 97, 97, 97, 2002, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1798, 97, 97, 97, 45, 45, 45, 2034, 67, 67, 67, 67, 97, 0, 0, 2040, 97, 97, 97, 97, 45, 45, 45, 45, 1752, 45, 45, 45, 1753, 1754, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 45, 45, 438, 45, 45, 45, 45, 45, 445, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1430, 67, 67, 67, 67, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 531, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1096, 97, 97, 97, 621, 97, 97, 97, 97, 97, 628, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 45, 942, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 708, 45, 45, 45, 45, 763, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 809, 810, 67, 67, 67, 67, 783, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1303, 0, 0, 0, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 45, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 67, 67, 67, 67, 1027, 67, 67, 67, 67, 1032, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1097, 1064, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 67, 1098, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 331, 97, 97, 97, 97, 1158, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 1309, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1374, 97, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1240, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1252, 67, 97, 97, 97, 1635, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1800, 97, 45, 45, 45, 97, 97, 1793, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1743, 45, 45, 45, 1746, 45, 0, 97, 97, 97, 97, 97, 1851, 97, 45, 45, 45, 45, 1856, 45, 45, 45, 45, 1864, 45, 45, 67, 67, 1869, 67, 67, 67, 67, 1874, 67, 0, 97, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 211, 67, 67, 67, 67, 67, 67, 240, 67, 67, 67, 67, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 67, 67, 268, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 290, 97, 97, 97, 305, 97, 97, 319, 97, 97, 97, 330, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 643, 367, 41606, 97, 97, 348, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 395, 45, 45, 45, 400, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 45, 972, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 745, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1086, 25403, 1090, 66365, 1094, 0, 0, 97, 843, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 1121, 97, 97, 97, 97, 1126, 97, 97, 97, 97, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1400, 45, 67, 67, 67, 1011, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1304, 0, 0, 0, 1190, 45, 45, 1193, 1194, 45, 45, 45, 45, 45, 1199, 45, 1201, 45, 45, 45, 45, 1911, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 67, 67, 45, 1205, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1217, 45, 45, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 1229, 45, 45, 45, 1388, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1574, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 1254, 67, 67, 67, 67, 67, 1259, 67, 1261, 67, 67, 67, 67, 1265, 67, 67, 67, 67, 67, 67, 1708, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 1289, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1087, 25403, 1091, 66365, 1095, 0, 0, 97, 97, 97, 97, 1339, 97, 1341, 97, 97, 97, 97, 1345, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 573, 97, 97, 97, 97, 97, 97, 1717, 97, 0, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1329, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 97, 97, 97, 1365, 97, 97, 97, 97, 1369, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1399, 45, 45, 45, 1413, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1669, 45, 1422, 45, 45, 1425, 45, 45, 1428, 45, 1429, 67, 67, 67, 67, 67, 67, 67, 67, 1468, 67, 67, 67, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 539, 67, 67, 1475, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 97, 97, 1530, 97, 0, 45, 45, 1534, 45, 45, 45, 45, 45, 45, 45, 45, 1956, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 67, 67, 1601, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 67, 1632, 97, 1634, 0, 97, 97, 97, 1640, 97, 97, 97, 1643, 97, 97, 1645, 97, 97, 97, 97, 97, 912, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1660, 1661, 45, 45, 45, 45, 1665, 1666, 45, 45, 45, 45, 45, 1670, 1692, 1693, 67, 67, 67, 67, 67, 1697, 67, 67, 67, 67, 67, 67, 67, 1702, 97, 97, 1714, 1715, 97, 97, 97, 97, 0, 1721, 1722, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 97, 97, 1362, 1726, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 1734, 97, 97, 97, 97, 97, 848, 849, 97, 97, 97, 97, 856, 97, 97, 97, 97, 97, 354, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 45, 45, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1681, 45, 0, 1846, 97, 97, 97, 97, 97, 97, 45, 45, 1854, 45, 45, 45, 45, 1859, 67, 67, 67, 1879, 67, 67, 97, 97, 1884, 97, 97, 0, 0, 0, 97, 97, 97, 1105, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 1347, 97, 1892, 97, 0, 0, 0, 97, 97, 97, 1900, 97, 97, 45, 45, 45, 45, 45, 997, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1002, 45, 45, 1005, 1006, 45, 67, 67, 67, 67, 67, 1926, 67, 67, 1928, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1737, 97, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1944, 97, 97, 1946, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 190, 45, 45, 45, 152, 155, 45, 163, 45, 45, 177, 179, 182, 45, 45, 45, 193, 197, 45, 45, 45, 1672, 45, 45, 45, 45, 45, 1677, 45, 1679, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 67, 260, 264, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 295, 299, 302, 97, 310, 97, 97, 324, 326, 329, 97, 97, 97, 0, 97, 97, 1639, 0, 1641, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 97, 97, 97, 1523, 97, 97, 97, 97, 97, 97, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 97, 97, 312, 97, 97, 97, 97, 97, 97, 97, 97, 1123, 97, 97, 97, 97, 97, 97, 97, 340, 344, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 373, 375, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 435, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1410, 45, 45, 45, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 67, 67, 67, 67, 1969, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 2064, 2065, 0, 2066, 45, 521, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 465, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1933, 0, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 18, 640, 139621, 358, 641, 0, 0, 0, 0, 364, 0, 0, 367, 0, 618, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 97, 97, 881, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 569, 97, 97, 97, 97, 97, 369, 0, 45, 652, 45, 45, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1432, 67, 67, 67, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 67, 0, 1305, 0, 1311, 0, 1317, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 1724, 97, 97, 97, 777, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 535, 67, 67, 67, 67, 67, 67, 67, 814, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 837, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 97, 97, 97, 0, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1168, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 97, 97, 0, 1637, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1801, 45, 45, 97, 875, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1151, 1152, 97, 97, 97, 67, 67, 67, 1040, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 790, 67, 67, 67, 1180, 0, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 200, 45, 45, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 67, 67, 67, 0, 0, 0, 1481, 0, 1094, 0, 0, 97, 1483, 97, 97, 97, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 1633, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1381, 0, 0, 45, 45, 45, 45, 97, 97, 1727, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 636, 45, 45, 1760, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 67, 67, 1299, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1616, 97, 97, 1803, 45, 45, 45, 45, 1807, 45, 45, 45, 45, 45, 1813, 45, 45, 45, 67, 67, 1684, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 822, 67, 67, 37689, 544, 67, 67, 1818, 67, 67, 67, 67, 1822, 67, 67, 67, 67, 67, 1828, 67, 67, 67, 67, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2012, 2013, 45, 45, 67, 67, 67, 2018, 2019, 67, 67, 97, 67, 97, 97, 97, 1833, 97, 97, 0, 0, 97, 97, 1840, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 1733, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 1849, 97, 97, 97, 45, 45, 45, 45, 45, 1857, 45, 45, 45, 1910, 45, 1912, 45, 45, 1914, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 67, 1020, 67, 45, 1861, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1446, 67, 67, 67, 67, 67, 1876, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1890, 97, 97, 97, 97, 97, 1134, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 97, 97, 97, 580, 1935, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1906, 45, 67, 67, 67, 67, 2048, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 931, 45, 45, 45, 45, 45, 45, 1674, 45, 1676, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1871, 67, 67, 67, 67, 0, 97, 97, 45, 67, 0, 97, 2060, 2061, 0, 2063, 45, 67, 0, 97, 45, 45, 156, 45, 45, 45, 45, 45, 45, 45, 45, 45, 192, 45, 45, 45, 45, 1673, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 429, 45, 45, 45, 45, 67, 67, 67, 269, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 349, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 374, 45, 45, 67, 67, 213, 217, 67, 67, 67, 67, 67, 242, 67, 247, 67, 253, 45, 45, 698, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 399, 45, 45, 0, 0, 0, 0, 925, 41606, 0, 929, 0, 0, 45, 45, 45, 45, 45, 45, 1391, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 436, 45, 67, 67, 67, 67, 1041, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1776, 67, 67, 97, 97, 97, 1099, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 888, 97, 97, 97, 1131, 97, 97, 97, 97, 1135, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 97, 97, 883, 97, 97, 97, 97, 97, 97, 1310, 0, 0, 0, 1316, 0, 0, 0, 0, 1100, 0, 0, 0, 97, 97, 97, 97, 97, 1107, 97, 97, 97, 97, 97, 97, 97, 97, 1343, 97, 97, 97, 97, 97, 97, 1348, 0, 0, 1317, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1868, 67, 1870, 67, 67, 67, 67, 67, 1817, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 823, 67, 37689, 544, 67, 97, 1832, 97, 97, 1834, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 1732, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1177, 0, 0, 925, 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 1941, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1991, 1992, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1998, 134, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 941, 45, 45, 944, 45, 45, 45, 45, 45, 45, 952, 45, 45, 207, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 67, 67, 67, 37689, 544, 369, 650, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1682, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 835, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1725, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 1036, 67, 67, 67, 265, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 296, 97, 97, 97, 97, 314, 97, 97, 97, 97, 332, 334, 97, 97, 97, 97, 97, 1146, 1147, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 97, 97, 345, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 372, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 45, 45, 404, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 451, 452, 45, 45, 45, 67, 1683, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 490, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 1450, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 537, 538, 67, 67, 67, 67, 67, 506, 67, 67, 508, 67, 67, 511, 67, 67, 67, 67, 0, 1476, 0, 0, 0, 0, 0, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1484, 97, 97, 97, 97, 97, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1499, 97, 97, 97, 97, 97, 97, 97, 97, 97, 587, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 634, 635, 97, 97, 97, 97, 97, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 97, 97, 97, 369, 0, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 1001, 45, 45, 45, 45, 45, 45, 45, 45, 715, 45, 45, 45, 720, 45, 45, 45, 45, 45, 45, 45, 45, 728, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 840, 97, 97, 97, 97, 97, 1174, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 97, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 680, 45, 968, 45, 970, 45, 973, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 962, 45, 45, 45, 45, 45, 979, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 688, 45, 45, 45, 45, 45, 45, 45, 1007, 1008, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 1044, 67, 1046, 67, 1049, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 808, 67, 67, 0, 0, 0, 1102, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 97, 97, 97, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 1138, 97, 1140, 97, 1143, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 45, 1191, 45, 45, 45, 45, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 991, 45, 67, 67, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1048, 67, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 97, 1386, 45, 1387, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 455, 45, 457, 45, 45, 1424, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1433, 67, 1434, 67, 67, 67, 67, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 1593, 67, 67, 45, 45, 1805, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1814, 45, 45, 1816, 67, 67, 67, 67, 1820, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1829, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 821, 67, 67, 67, 37689, 544, 67, 1831, 97, 97, 97, 97, 1835, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1850, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 961, 45, 45, 45, 45, 965, 45, 967, 1907, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1920, 0, 1936, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 28672, 97, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2054, 97, 97, 291, 97, 97, 97, 97, 97, 97, 320, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 926, 1179, 0, 45, 377, 45, 45, 45, 381, 45, 45, 392, 45, 45, 396, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 45, 45, 45, 67, 67, 67, 67, 463, 67, 67, 67, 467, 67, 67, 478, 67, 67, 482, 67, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 1472, 67, 502, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1460, 67, 97, 97, 97, 97, 560, 97, 97, 97, 564, 97, 97, 575, 97, 97, 579, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 930, 97, 599, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 872, 97, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1758, 0, 362, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 934, 45, 45, 45, 164, 168, 174, 178, 45, 45, 45, 45, 45, 194, 45, 45, 45, 165, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 45, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1060, 67, 67, 67, 67, 67, 67, 1052, 1053, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1063, 97, 1157, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1167, 97, 97, 97, 97, 97, 1379, 97, 97, 97, 0, 0, 0, 45, 1383, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 1812, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1471, 67, 45, 1402, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 67, 1462, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 1517, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 1636, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 1705, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1842, 0, 0, 1779, 97, 97, 97, 1782, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1789, 97, 97, 0, 0, 0, 97, 1847, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 45, 737, 738, 67, 740, 67, 741, 67, 743, 67, 67, 67, 67, 67, 67, 1968, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 2062, 97, 45, 67, 0, 97, 45, 67, 67, 97, 97, 2001, 97, 0, 0, 2004, 97, 97, 0, 97, 97, 97, 97, 1797, 97, 97, 97, 97, 97, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 292, 97, 97, 97, 97, 311, 315, 321, 325, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1330, 97, 97, 1333, 1334, 97, 341, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 363, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 416, 45, 376, 45, 45, 45, 45, 382, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 45, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 414, 45, 45, 45, 418, 67, 67, 67, 462, 67, 67, 67, 67, 468, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 1604, 67, 67, 67, 67, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 1067, 67, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 274, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 504, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 517, 519, 541, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 554, 97, 97, 97, 559, 97, 97, 97, 97, 565, 97, 97, 97, 97, 97, 97, 97, 1718, 0, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 906, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 597, 97, 97, 97, 97, 97, 1520, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 1656, 45, 45, 45, 97, 97, 601, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 614, 616, 638, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 661, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1815, 45, 67, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 678, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 977, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 697, 67, 67, 748, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1274, 67, 67, 67, 67, 67, 67, 67, 67, 765, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 780, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1777, 67, 97, 97, 97, 97, 97, 97, 846, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 97, 1742, 45, 45, 45, 45, 45, 45, 45, 1747, 97, 97, 97, 863, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 1178, 925, 0, 1179, 0, 97, 97, 97, 878, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 954, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 963, 45, 45, 966, 45, 45, 157, 45, 45, 171, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 1022, 67, 67, 1026, 67, 67, 67, 1030, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 1605, 67, 67, 67, 1608, 67, 67, 67, 1039, 67, 67, 1042, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 67, 0, 1100, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 97, 97, 97, 97, 1116, 97, 97, 1120, 97, 97, 97, 1124, 97, 97, 97, 97, 97, 97, 562, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1133, 97, 97, 1136, 97, 97, 97, 97, 97, 97, 97, 97, 915, 917, 97, 97, 97, 97, 97, 0, 97, 1170, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1993, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 1278, 67, 0, 0, 0, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1189, 1204, 45, 45, 45, 1207, 45, 45, 1209, 45, 1210, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 45, 689, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 805, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1249, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1300, 0, 0, 0, 0, 0, 1267, 67, 67, 1269, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 97, 1349, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 97, 0, 1980, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 677, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 953, 67, 1437, 67, 1440, 67, 67, 67, 67, 1445, 67, 67, 67, 1448, 67, 67, 67, 67, 67, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 67, 67, 67, 1473, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1320, 0, 834, 97, 97, 97, 97, 1490, 97, 1493, 97, 97, 97, 97, 1498, 97, 97, 97, 1501, 97, 97, 97, 0, 97, 1638, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 916, 97, 97, 97, 97, 97, 97, 0, 1528, 97, 97, 97, 0, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1932, 0, 0, 1555, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1567, 45, 45, 158, 45, 45, 172, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 67, 212, 67, 67, 67, 67, 231, 235, 241, 245, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 472, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1651, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 45, 45, 67, 1704, 67, 1706, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1841, 97, 0, 1844, 97, 97, 97, 97, 1716, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1385, 1748, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1757, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 97, 97, 1780, 97, 97, 97, 0, 0, 1786, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1730, 0, 97, 97, 97, 97, 97, 1736, 97, 1738, 67, 97, 97, 97, 97, 97, 97, 0, 1838, 97, 97, 97, 97, 97, 0, 0, 97, 1729, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 1165, 97, 97, 97, 45, 1950, 45, 45, 45, 45, 45, 45, 45, 45, 1958, 67, 67, 67, 1962, 67, 67, 67, 67, 67, 1246, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1710, 97, 97, 97, 1999, 67, 97, 97, 97, 97, 0, 2003, 97, 97, 97, 0, 97, 97, 2008, 2009, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 2052, 67, 2053, 0, 0, 0, 0, 925, 41606, 0, 0, 930, 0, 45, 45, 45, 45, 45, 45, 1392, 45, 1394, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 1565, 45, 45, 45, 1568, 0, 97, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 28672, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 679, 45, 45, 67, 67, 266, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 346, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 362, 0, 364, 0, 367, 41098, 369, 140, 371, 45, 45, 45, 379, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 449, 45, 45, 45, 45, 45, 67, 67, 542, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 97, 0, 1794, 1795, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 97, 639, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 45, 731, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 251, 67, 67, 67, 67, 67, 798, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1073, 67, 67, 67, 860, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 873, 0, 0, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 921, 97, 0, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1250, 67, 67, 1253, 0, 0, 1312, 0, 0, 0, 1318, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 97, 1155, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1141, 97, 97, 67, 67, 1439, 67, 1441, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 67, 97, 97, 1492, 97, 1494, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 97, 67, 67, 67, 2037, 67, 97, 0, 0, 97, 97, 97, 2043, 97, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 232, 67, 67, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1975, 0, 0, 97, 874, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1142, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 65, 86, 117, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 63, 84, 115, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 61, 82, 113, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 59, 80, 111, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 57, 78, 109, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 55, 76, 107, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 53, 74, 105, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 51, 72, 103, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 49, 70, 101, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 47, 68, 99, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 45, 67, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 213085, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 0, 0, 44, 0, 0, 32863, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 41, 41, 41, 0, 0, 1138688, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 89, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 127, 127, 127, 127, 102432, 67, 262, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 342, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 360, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 45, 45, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1292, 67, 67, 1294, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1615, 97, 97, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 66, 87, 118, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 64, 85, 116, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 62, 83, 114, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 60, 81, 112, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 58, 79, 110, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 56, 77, 108, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 54, 75, 106, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 52, 73, 104, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 50, 71, 102, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 48, 69, 100, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 46, 67, 98, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 233472, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 69724, 53264, 18, 18, 49172, 0, 57366, 262144, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 45, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 28, 139621, 359, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1389, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 45, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1449, 67, 67, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1154, 97, 0, 0, 0, 0, 925, 41606, 927, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 67, 67, 45, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 951, 45, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 45, 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1488, 67, 67, 267, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 347, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 361, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 734, 45, 45, 45, 67, 67, 67, 67, 67, 742, 67, 67, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1214, 45, 45, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1361, 97, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 45, 45, 0, 0, 0, 0, 2220032, 0, 0, 1130496, 0, 0, 0, 0, 2170880, 2171020, 2170880, 2170880, 18, 0, 0, 131072, 0, 0, 0, 90112, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1485, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1390, 45, 1393, 45, 45, 45, 45, 1398, 45, 45, 45, 2170880, 2171167, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2721252, 2744320, 2170880, 2170880, 2170880, 2834432, 2840040, 2170880, 2908160, 2170880, 2170880, 2936832, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3014656, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 0, 2220032, 0, 0, 0, 1142784, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3215360, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 543, 0, 545, 0, 0, 2183168, 0, 0, 831, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 2170880, 2170880, 3092480, 2170880, 2170880, 3125248, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 0, 0, 0, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 0, 0, 0, 65820, 65820, 0, 287, 97, 97, 97, 97, 97, 1783, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1791, 0, 0, 546, 70179, 0, 0, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 97, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 0, 0, 147456, 0, 0, 0, 0, 925, 41606, 0, 928, 0, 0, 45, 45, 45, 45, 45, 45, 998, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 1564, 45, 45, 45, 45, 0, 2158592, 2158592, 0, 0, 0, 0, 2232320, 2232320, 2232320, 0, 2240512, 2240512, 2240512, 2240512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640\n];\n\nJSONiqTokenizer.EXPECTED =\n[ 291, 300, 304, 341, 315, 309, 305, 295, 319, 323, 327, 329, 296, 333, 337, 339, 342, 346, 350, 294, 356, 360, 312, 367, 352, 371, 363, 375, 379, 383, 387, 391, 395, 726, 399, 405, 518, 684, 405, 405, 405, 405, 808, 405, 405, 405, 512, 405, 405, 405, 431, 405, 405, 406, 405, 405, 404, 405, 405, 405, 405, 405, 405, 405, 908, 631, 410, 415, 405, 414, 419, 608, 405, 429, 602, 405, 435, 443, 405, 441, 641, 478, 405, 447, 451, 450, 456, 643, 461, 460, 762, 679, 465, 469, 741, 473, 477, 482, 486, 492, 932, 931, 523, 498, 504, 720, 405, 510, 596, 405, 516, 941, 580, 522, 929, 527, 590, 589, 897, 939, 534, 538, 547, 551, 555, 559, 563, 567, 571, 969, 575, 708, 690, 689, 579, 584, 634, 405, 594, 731, 405, 600, 882, 405, 606, 895, 786, 452, 612, 405, 615, 620, 876, 624, 628, 638, 647, 651, 655, 659, 663, 667, 676, 683, 688, 695, 694, 791, 405, 699, 437, 405, 706, 714, 405, 712, 825, 870, 405, 718, 724, 769, 768, 823, 730, 735, 745, 751, 422, 755, 759, 425, 766, 902, 810, 587, 775, 888, 887, 405, 773, 992, 405, 779, 962, 405, 785, 781, 986, 790, 795, 797, 506, 500, 499, 801, 805, 814, 820, 829, 833, 837, 841, 845, 849, 853, 857, 861, 616, 865, 869, 868, 488, 405, 874, 816, 405, 880, 738, 405, 886, 892, 543, 405, 901, 906, 913, 912, 918, 494, 541, 922, 926, 936, 945, 949, 953, 957, 530, 966, 973, 960, 702, 701, 405, 979, 981, 405, 985, 747, 405, 990, 998, 914, 405, 996, 1004, 672, 975, 974, 1014, 1002, 1008, 670, 1012, 405, 405, 405, 405, 405, 401, 1018, 1022, 1026, 1106, 1071, 1111, 1111, 1111, 1082, 1145, 1030, 1101, 1034, 1038, 1106, 1106, 1106, 1106, 1046, 1206, 1052, 1106, 1072, 1111, 1111, 1042, 1134, 1065, 1111, 1112, 1056, 1160, 1207, 1062, 1204, 1208, 1069, 1106, 1106, 1106, 1076, 1111, 1207, 1161, 1122, 1205, 1064, 1094, 1106, 1106, 1107, 1111, 1111, 1111, 1078, 1086, 1207, 1092, 1098, 1046, 1058, 1106, 1106, 1110, 1111, 1111, 1116, 1120, 1161, 1126, 1202, 1104, 1106, 1145, 1146, 1129, 1138, 1088, 1151, 1048, 1157, 1153, 1132, 1141, 1165, 1107, 1111, 1172, 1179, 1109, 1183, 1175, 1143, 1147, 1187, 1108, 1191, 1195, 1144, 1199, 1168, 1212, 1216, 1220, 1224, 1228, 1232, 1236, 1557, 1247, 1241, 1241, 1038, 1434, 1241, 1241, 1241, 1241, 1254, 1275, 1617, 1241, 1280, 1287, 1241, 1241, 1241, 1287, 1241, 2114, 1291, 1241, 1243, 1241, 2049, 1824, 2094, 2095, 1520, 1309, 1241, 1241, 1302, 1241, 1321, 1311, 1241, 1241, 1313, 1778, 1325, 1336, 1241, 1241, 1325, 1330, 1353, 1241, 1241, 1695, 1354, 1241, 1241, 1241, 1294, 1686, 1331, 1241, 1696, 1368, 1241, 1338, 1370, 1241, 1392, 1399, 1364, 2017, 1406, 2016, 1405, 1716, 1406, 1407, 1422, 1417, 1421, 1241, 1241, 1241, 1349, 1426, 1241, 1774, 1756, 1241, 1773, 1241, 1241, 1345, 1964, 1812, 1432, 1241, 1241, 1345, 1993, 1459, 1241, 1241, 1241, 1395, 1848, 1767, 1465, 1241, 1241, 1394, 1847, 1242, 1477, 1241, 1241, 1428, 1241, 1445, 1492, 1241, 1241, 1438, 1241, 1499, 1241, 1241, 1241, 1455, 1241, 1818, 1448, 1241, 1250, 1241, 2026, 1623, 1449, 1241, 1612, 1616, 1241, 1614, 1241, 1257, 1241, 1241, 1985, 1292, 1586, 1512, 1241, 1517, 2050, 1526, 1674, 1519, 1524, 1647, 2051, 1532, 1537, 1551, 1544, 1550, 1555, 1561, 1571, 1578, 1584, 1590, 1591, 1653, 1595, 1602, 1606, 1610, 1634, 1628, 1640, 1633, 1645, 1241, 1241, 1241, 1469, 1241, 1970, 1651, 1241, 1270, 1241, 1241, 1819, 1449, 1241, 1293, 1664, 1241, 1241, 1481, 1485, 1574, 1672, 1241, 1241, 1513, 1317, 1487, 1684, 1241, 1241, 1533, 1299, 1694, 1241, 1241, 1295, 1241, 1241, 1241, 1546, 1700, 1241, 1241, 1707, 1241, 1713, 1241, 1849, 1715, 1241, 1720, 1241, 1276, 1267, 1241, 1241, 2107, 1657, 1864, 1241, 1881, 1241, 1326, 1292, 1241, 1685, 1358, 1724, 1338, 1241, 1363, 1362, 1342, 1340, 1361, 1339, 1833, 1372, 1360, 1833, 1833, 1342, 1343, 1835, 1341, 1731, 1738, 1344, 1241, 1745, 1241, 1379, 1241, 1241, 2092, 1241, 1388, 1761, 1754, 1241, 1386, 1241, 1400, 1760, 1241, 1241, 1241, 1598, 1734, 1241, 1241, 1241, 1635, 1645, 1241, 1780, 1766, 1241, 1241, 1332, 1771, 1241, 1241, 1629, 2079, 1241, 1242, 1784, 1241, 1241, 1680, 1639, 2063, 1790, 1241, 1241, 1741, 1241, 1241, 1800, 1241, 1241, 1762, 1473, 1241, 1806, 1241, 1241, 1786, 1240, 1709, 1241, 1241, 1241, 1668, 1811, 1241, 1940, 1241, 1401, 1974, 1241, 1408, 1413, 1382, 1241, 1816, 1241, 1241, 1802, 2086, 1811, 1241, 1817, 1945, 1823, 2095, 2095, 2047, 2094, 2046, 2080, 1241, 1409, 1312, 1376, 2096, 2048, 1241, 1241, 1807, 1241, 1241, 1241, 2035, 1241, 1241, 1828, 1241, 2057, 2061, 1241, 1241, 1843, 1241, 2059, 1241, 1241, 1241, 1690, 1847, 1241, 1241, 1241, 1703, 2102, 1848, 1241, 1241, 1853, 1292, 1848, 1241, 2016, 1857, 1241, 2002, 1868, 1241, 1436, 1241, 1241, 1271, 1305, 1241, 1874, 1241, 1241, 1884, 2037, 1892, 1241, 1890, 1241, 1461, 1241, 1241, 1795, 1241, 1241, 1891, 1241, 1878, 1241, 1888, 1241, 1888, 1905, 1896, 2087, 1912, 1903, 1241, 1911, 1906, 1916, 1905, 2027, 1863, 1925, 2088, 1859, 1861, 1922, 1927, 1931, 1935, 1494, 1241, 1241, 1918, 1907, 1939, 1917, 1944, 1949, 1241, 1241, 1451, 1955, 1241, 1241, 1241, 1796, 1727, 2061, 1241, 1241, 1899, 1241, 1660, 1968, 1241, 1241, 1951, 1678, 1978, 1241, 1241, 1241, 1839, 1241, 1241, 1984, 1982, 1241, 1488, 1241, 1241, 1624, 1450, 1989, 1241, 1241, 1241, 1870, 1995, 1292, 1241, 1241, 1958, 1261, 1241, 1996, 1241, 1241, 1241, 2039, 2008, 1241, 1241, 1750, 2000, 1241, 1256, 2001, 1960, 1241, 1564, 1241, 1504, 1241, 1241, 1442, 1241, 1241, 1564, 1528, 1263, 1241, 1508, 1241, 1241, 1468, 1498, 2006, 1540, 2015, 1539, 2014, 1748, 2013, 1539, 1831, 2014, 2012, 1500, 1567, 2022, 2021, 1241, 1580, 1241, 1241, 2033, 2037, 1791, 2045, 2031, 1241, 1621, 1241, 1641, 2044, 1241, 1241, 1241, 2093, 1241, 1241, 2055, 1241, 1241, 2067, 1241, 1283, 1241, 1241, 1241, 2101, 2071, 1241, 1241, 1241, 2073, 1848, 2040, 1241, 1241, 1241, 2077, 1241, 1241, 2106, 1241, 1241, 2084, 1241, 2111, 1241, 1241, 1381, 1380, 1241, 1241, 1241, 2100, 1241, 2129, 2118, 2122, 2126, 2197, 2133, 3010, 2825, 2145, 2698, 2156, 2226, 2160, 2161, 2165, 2174, 2293, 2194, 2630, 2201, 2203, 2152, 3019, 2226, 2263, 2209, 2213, 2218, 2269, 2292, 2269, 2269, 2184, 2226, 2238, 2148, 2151, 3017, 2245, 2214, 2269, 2269, 2185, 2226, 2292, 2269, 2291, 2269, 2269, 2269, 2292, 2205, 3019, 2226, 2226, 2160, 2160, 2160, 2261, 2160, 2160, 2160, 2262, 2276, 2160, 2160, 2277, 2216, 2283, 2216, 2269, 2269, 2268, 2269, 2267, 2269, 2269, 2269, 2271, 2568, 2292, 2269, 2293, 2269, 2182, 2190, 2269, 2186, 2226, 2226, 2226, 2226, 2227, 2160, 2160, 2160, 2160, 2263, 2160, 2275, 2277, 2282, 2215, 2217, 2269, 2269, 2291, 2269, 2269, 2293, 2291, 2269, 2220, 2269, 2295, 2294, 2269, 2269, 2305, 2233, 2262, 2278, 2218, 2269, 2234, 2226, 2226, 2228, 2160, 2160, 2160, 2289, 2220, 2294, 2294, 2269, 2269, 2304, 2269, 2160, 2160, 2287, 2269, 2269, 2305, 2269, 2269, 2312, 2269, 2269, 2225, 2226, 2160, 2287, 2289, 2219, 2304, 2295, 2314, 2234, 2226, 2314, 2269, 2226, 2226, 2160, 2288, 2219, 2222, 2304, 2296, 2269, 2224, 2160, 2160, 2269, 2302, 2294, 2314, 2224, 2226, 2288, 2220, 2294, 2269, 2290, 2269, 2269, 2293, 2269, 2269, 2269, 2269, 2270, 2221, 2313, 2225, 2227, 2160, 2300, 2269, 2225, 2261, 2309, 2234, 2229, 2223, 2318, 2318, 2318, 2328, 2336, 2340, 2344, 2350, 2637, 2712, 2358, 2362, 2372, 2135, 2378, 2398, 2135, 2135, 2135, 2135, 2136, 2417, 2241, 2135, 2378, 2135, 2135, 2980, 2984, 2135, 3006, 2135, 2135, 2135, 2945, 2931, 2425, 2400, 2135, 2135, 2135, 2954, 2135, 2481, 2433, 2135, 2135, 2988, 2824, 2135, 2135, 2482, 2434, 2135, 2135, 2440, 2445, 2452, 2135, 2135, 2998, 3002, 2961, 2441, 2446, 2453, 2463, 2974, 2135, 2135, 2135, 2140, 2642, 2709, 2459, 2470, 2465, 2135, 2135, 3005, 2135, 2135, 2987, 2823, 2458, 2469, 2464, 2975, 2135, 2135, 2135, 2353, 2488, 2447, 2324, 2974, 2135, 2409, 2459, 2448, 2135, 2961, 2487, 2446, 2476, 2323, 2973, 2135, 2135, 2135, 2354, 2476, 2974, 2135, 2135, 2135, 2957, 2135, 2135, 2960, 2135, 2135, 2135, 2363, 2409, 2459, 2474, 2465, 2487, 2571, 2973, 2135, 2135, 2168, 2973, 2135, 2135, 2135, 2959, 2135, 2135, 2135, 2506, 2135, 2957, 2488, 2170, 2135, 2135, 2135, 2960, 2135, 2818, 2493, 2135, 2135, 3033, 2135, 2135, 2135, 2934, 2819, 2494, 2135, 2135, 2135, 2976, 2780, 2499, 2135, 2135, 2135, 3000, 2968, 2135, 2935, 2135, 2135, 2135, 2364, 2507, 2135, 2135, 2934, 2135, 2135, 2780, 2492, 2507, 2135, 2135, 2506, 2780, 2135, 2135, 2782, 2780, 2135, 2782, 2135, 2783, 2374, 2514, 2135, 2135, 2135, 3007, 2530, 2974, 2135, 2135, 2135, 3008, 2135, 2135, 2134, 2135, 2526, 2531, 2975, 2135, 2135, 3042, 2581, 2575, 2956, 2135, 2135, 2135, 2394, 2135, 2508, 2535, 2840, 2844, 2495, 2135, 2135, 2136, 2684, 2537, 2842, 2846, 2135, 2136, 2561, 2581, 2551, 2536, 2841, 2845, 2975, 3043, 2582, 2843, 2555, 2135, 3040, 3044, 2538, 2844, 2975, 2135, 2135, 2253, 2644, 2672, 2542, 2554, 2135, 2135, 2346, 2873, 2551, 2555, 2135, 2135, 2135, 2381, 2559, 2565, 2538, 2553, 2135, 2560, 2914, 2576, 2590, 2135, 2135, 2135, 2408, 2136, 2596, 2624, 2135, 2135, 2135, 2409, 2135, 2618, 2597, 3008, 2135, 2135, 2380, 2956, 2601, 2135, 2135, 2135, 2410, 2620, 2624, 2135, 2136, 2383, 2135, 2135, 2783, 2623, 2135, 2135, 2393, 2888, 2136, 2621, 3008, 2135, 2618, 2618, 2622, 2135, 2135, 2405, 2414, 2619, 2384, 2624, 2135, 2136, 2950, 2135, 2138, 2135, 2139, 2135, 2604, 2623, 2135, 2140, 2878, 2665, 2957, 2622, 2135, 2135, 2428, 2762, 2606, 2612, 2135, 2135, 2501, 2586, 2604, 3038, 2135, 2604, 3036, 2387, 2958, 2386, 2135, 2141, 2135, 2421, 2387, 2385, 2135, 2385, 2384, 2384, 2135, 2386, 2628, 2384, 2135, 2135, 2501, 2596, 2591, 2135, 2135, 2135, 2400, 2135, 2634, 2135, 2135, 2559, 2580, 2575, 2648, 2135, 2135, 2135, 2429, 2649, 2135, 2135, 2135, 2435, 2654, 2658, 2135, 2135, 2135, 2436, 2649, 2178, 2659, 2135, 2135, 2595, 2601, 2669, 2677, 2135, 2135, 2616, 2957, 2879, 2665, 2691, 2135, 2363, 2367, 2900, 2878, 2664, 2690, 2975, 2877, 2643, 2670, 2974, 2671, 2975, 2135, 2135, 2619, 2608, 2669, 2673, 2135, 2135, 2653, 2177, 2672, 2135, 2135, 2135, 2486, 2168, 2251, 2255, 2695, 2974, 2709, 2135, 2135, 2135, 2487, 2169, 2399, 2716, 2975, 2135, 2363, 2770, 2776, 2640, 2717, 2135, 2135, 2729, 2135, 2135, 2641, 2718, 2135, 2135, 2135, 2505, 2135, 2640, 2257, 2974, 2135, 2727, 2975, 2135, 2365, 2332, 2895, 2957, 2135, 2959, 2135, 2365, 2749, 2754, 2959, 2958, 2958, 2135, 2380, 2793, 2799, 2135, 2735, 2738, 2135, 2381, 2135, 2135, 2940, 2974, 2135, 2744, 2135, 2135, 2739, 2519, 2976, 2745, 2135, 2135, 2135, 2509, 2755, 2135, 2135, 2135, 2510, 2772, 2778, 2135, 2135, 2740, 2520, 2135, 2771, 2777, 2135, 2135, 2759, 2750, 2792, 2798, 2135, 2135, 2781, 2392, 2779, 2135, 2135, 2135, 2521, 2135, 2679, 2248, 2135, 2135, 2681, 2480, 2135, 2135, 2786, 3000, 2135, 2679, 2683, 2135, 2135, 2416, 2135, 2135, 2135, 2525, 2135, 2730, 2135, 2135, 2135, 2560, 2581, 2135, 2805, 2135, 2135, 2804, 2962, 2832, 2974, 2135, 2382, 2135, 2135, 2958, 2135, 2135, 2960, 2135, 2829, 2833, 2975, 2961, 2965, 2969, 2973, 2968, 2972, 2135, 2135, 2135, 2641, 2135, 2515, 2966, 2970, 2851, 2478, 2135, 2135, 2808, 2135, 2809, 2135, 2135, 2135, 2722, 2852, 2479, 2135, 2135, 2815, 2135, 2135, 2766, 2853, 2480, 2135, 2857, 2479, 2135, 2388, 2723, 2135, 2364, 2331, 2894, 2858, 2480, 2135, 2135, 2850, 2478, 2135, 2135, 2135, 2806, 2864, 2135, 2399, 2256, 2974, 2865, 2135, 2135, 2862, 2135, 2135, 2135, 2685, 2807, 2865, 2135, 2135, 2807, 2863, 2135, 2135, 2135, 2686, 2884, 2807, 2135, 2809, 2807, 2135, 2135, 2807, 2806, 2705, 2810, 2808, 2700, 2869, 2702, 2702, 2702, 2704, 2883, 2135, 2135, 2135, 2730, 2884, 2135, 2135, 2135, 2731, 2321, 2546, 2135, 2135, 2876, 2255, 2889, 2322, 2547, 2135, 2401, 2135, 2135, 2135, 2949, 2367, 2893, 2544, 2973, 2906, 2973, 2135, 2135, 2877, 2663, 2368, 2901, 2907, 2974, 2366, 2899, 2905, 2972, 2920, 2974, 2135, 2135, 2911, 2900, 2920, 2363, 2913, 2918, 2465, 2941, 2975, 2135, 2135, 2924, 2928, 2974, 2945, 2931, 2135, 2135, 2135, 2765, 2136, 2955, 2135, 2135, 2939, 2931, 2380, 2135, 2135, 2380, 2135, 2135, 2135, 2780, 2507, 2137, 2135, 2137, 2135, 2139, 2135, 2806, 2810, 2135, 2135, 2135, 2992, 2135, 2135, 2962, 2966, 2970, 2974, 2135, 2135, 2787, 3014, 2135, 2521, 2993, 2135, 2135, 2135, 2803, 2135, 2135, 2135, 2618, 2607, 2997, 3001, 2135, 2135, 2963, 2967, 2971, 2975, 2135, 2135, 2791, 2797, 2135, 3009, 2999, 3003, 2787, 3001, 2135, 2135, 2964, 2968, 2785, 2999, 3003, 2135, 2135, 2135, 2804, 2785, 2999, 3004, 2135, 2135, 2135, 2807, 2135, 2135, 3023, 2135, 2135, 2135, 2811, 2135, 2135, 3027, 2135, 2135, 2135, 2837, 2968, 3028, 2135, 2135, 2135, 2875, 2135, 2784, 3029, 2135, 2408, 2457, 2446, 0, 14, 0, -2120220672, 1610612736, -2074083328, -2002780160, -2111830528, 1073872896, 1342177280, 1075807216, 4096, 16384, 2048, 8192, 0, 8192, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, -2145386496, 8388608, 1073741824, 0, 0x80000000, 0x80000000, 2097152, 2097152, 2097152, 536870912, 0, 0, 134217728, 33554432, 1536, 268435456, 268435456, 268435456, 268435456, 128, 256, 32, 0, 65536, 131072, 524288, 16777216, 268435456, 0x80000000, 1572864, 1835008, 640, 32768, 65536, 262144, 1048576, 2097152, 196608, 196800, 196608, 196608, 0, 131072, 131072, 131072, 196608, 196624, 196608, 196624, 196608, 196608, 128, 4096, 16384, 16384, 2048, 0, 4, 0, 0, 0x80000000, 2097152, 0, 1024, 32, 32, 0, 65536, 1572864, 1048576, 32768, 32768, 32768, 32768, 196608, 196608, 196608, 64, 64, 196608, 196608, 131072, 131072, 131072, 131072, 268435456, 268435456, 64, 196736, 196608, 196608, 196608, 131072, 196608, 196608, 16384, 4, 4, 4, 2, 32, 32, 65536, 1048576, 12582912, 1073741824, 0, 0, 2, 8, 16, 96, 2048, 32768, 0, 0, 131072, 268435456, 268435456, 268435456, 256, 256, 196608, 196672, 196608, 196608, 196608, 196608, 4, 0, 256, 256, 256, 256, 32, 32, 32768, 32, 32, 32, 32, 32768, 268435456, 268435456, 268435456, 196608, 196608, 196608, 196624, 196608, 196608, 196608, 16, 16, 16, 268435456, 196608, 64, 64, 64, 196608, 196608, 196608, 196672, 268435456, 64, 64, 196608, 196608, 16, 196608, 196608, 196608, 268435456, 64, 196608, 131072, 262144, 4194304, 25165824, 33554432, 134217728, 268435456, 268435456, 196608, 262152, 8, 256, 512, 3072, 16384, 200, -1073741816, 8392713, 40, 8392718, 520, 807404072, 40, 520, 100663304, 0, 0, -540651761, -540651761, 257589048, 0, 262144, 0, 0, 3, 8, 256, 0, 4, 6, 4100, 8388612, 0, 0, 0, 3, 4, 8, 256, 512, 1024, 0, 2097152, 0, 0, -537854471, -537854471, 0, 100663296, 0, 0, 1, 2, 0, 0, 0, 16384, 0, 0, 0, 96, 14336, 0, 0, 0, 7, 8, 234881024, 0, 0, 0, 8, 0, 0, 0, 0, 262144, 0, 0, 16, 64, 384, 512, 0, 1, 1, 0, 12582912, 0, 0, 0, 0, 33554432, 67108864, -606084144, -606084144, -606084138, 0, 0, 28, 32, 768, 1966080, -608174080, 0, 0, 0, 14, 35056, 16, 64, 896, 24576, 98304, 98304, 131072, 262144, 524288, 1048576, 4194304, 25165824, 1048576, 62914560, 134217728, -805306368, 0, 384, 512, 16384, 65536, 131072, 262144, 29360128, 33554432, 134217728, 268435456, 1073741824, 0x80000000, 262144, 524288, 1048576, 29360128, 33554432, 524288, 1048576, 16777216, 33554432, 134217728, 268435456, 1073741824, 0, 0, 0, 123856, 1966080, 0, 64, 384, 16384, 65536, 131072, 16384, 65536, 524288, 268435456, 0x80000000, 0, 0, 524288, 0x80000000, 0, 0, 1, 16, 0, 256, 524288, 0, 0, 0, 25, 96, 128, -537854471, 0, 0, 0, 32, 7404800, -545259520, 0, 0, 0, 60, 0, 249, 64768, 1048576, 6291456, 6291456, 25165824, 100663296, 402653184, 1073741824, 96, 128, 1280, 2048, 4096, 57344, 6291456, 57344, 6291456, 8388608, 16777216, 33554432, 201326592, 1342177280, 0x80000000, 0, 57344, 6291456, 8388608, 100663296, 134217728, 0x80000000, 0, 0, 0, 1, 8, 16, 64, 128, 64, 128, 256, 1024, 131072, 131072, 131072, 262144, 524288, 16777216, 57344, 6291456, 8388608, 67108864, 134217728, 64, 256, 1024, 2048, 4096, 57344, 64, 256, 0, 24576, 32768, 6291456, 67108864, 134217728, 0, 1, 64, 256, 24576, 32768, 4194304, 32768, 4194304, 67108864, 0, 0, 64, 256, 0, 0, 24576, 32768, 0, 16384, 4194304, 67108864, 64, 16384, 0, 0, 1, 64, 256, 16384, 4194304, 67108864, 0, 0, 0, 16384, 0, 16384, 16384, 0, -470447874, -470447874, -470447874, 0, 0, 128, 0, 0, 8, 96, 2048, 32768, 262144, 8388608, 35056, 1376256, -471859200, 0, 0, 14, 16, 224, 2048, 32768, 2097152, 4194304, 8388608, -486539264, 0, 96, 128, 2048, 32768, 262144, 2097152, 262144, 2097152, 8388608, 33554432, 536870912, 1073741824, 0x80000000, 0, 1610612736, 0x80000000, 0, 0, 1, 524288, 1048576, 12582912, 0, 0, 0, 151311, 264503296, 2097152, 8388608, 33554432, 1610612736, 0x80000000, 262144, 8388608, 33554432, 536870912, 67108864, 4194304, 0, 4194304, 0, 4194304, 4194304, 0, 0, 524288, 8388608, 536870912, 1073741824, 0x80000000, 1, 4097, 8388609, 96, 2048, 32768, 1073741824, 0x80000000, 0, 96, 2048, 0x80000000, 0, 0, 96, 2048, 0, 0, 1, 12582912, 0, 0, 0, 0, 1641895695, 1641895695, 0, 0, 0, 249, 7404800, 15, 87808, 1835008, 1639972864, 0, 768, 5120, 16384, 65536, 1835008, 1835008, 12582912, 16777216, 1610612736, 0, 3, 4, 8, 768, 4096, 65536, 0, 0, 256, 512, 786432, 8, 256, 512, 4096, 16384, 1835008, 16384, 1835008, 12582912, 1610612736, 0, 0, 0, 256, 0, 0, 0, 4, 8, 16, 32, 1, 2, 8, 256, 16384, 524288, 16384, 524288, 1048576, 12582912, 1610612736, 0, 0, 0, 8388608, 0, 0, 0, 524288, 4194304, 0, 0, 0, 8388608, -548662288, -548662288, -548662288, 0, 0, 256, 16384, 65536, 520093696, -1073741824, 0, 0, 0, 16777216, 0, 16, 32, 960, 4096, 4980736, 520093696, 1073741824, 0, 32, 896, 4096, 57344, 1048576, 6291456, 8388608, 16777216, 100663296, 134217728, 268435456, 0x80000000, 0, 512, 786432, 4194304, 33554432, 134217728, 268435456, 0, 786432, 4194304, 134217728, 268435456, 0, 524288, 4194304, 268435456, 0, 0, 0, 0, 0, 4194304, 4194304, -540651761, 0, 0, 0, 2, 4, 8, 16, 96, 128, 264503296, -805306368, 0, 0, 0, 8, 256, 512, 19456, 131072, 3072, 16384, 131072, 262144, 8388608, 16777216, 512, 1024, 2048, 16384, 131072, 262144, 131072, 262144, 8388608, 33554432, 201326592, 268435456, 0, 3, 4, 256, 1024, 2048, 57344, 16384, 131072, 8388608, 33554432, 134217728, 268435456, 0, 3, 256, 1024, 16384, 131072, 33554432, 134217728, 1073741824, 0x80000000, 0, 0, 256, 524288, 0x80000000, 0, 3, 256, 33554432, 134217728, 1073741824, 0, 1, 2, 33554432, 1, 2, 134217728, 1073741824, 0, 1, 2, 134217728, 0, 0, 0, 64, 0, 0, 0, 16, 32, 896, 4096, 786432, 4194304, 16777216, 33554432, 201326592, 268435456, 1073741824, 0x80000000, 0, 0, 0, 15, 0, 4980736, 4980736, 4980736, 70460, 70460, 3478332, 0, 0, 1008, 4984832, 520093696, 60, 4864, 65536, 0, 0, 0, 12, 16, 32, 256, 512, 4096, 65536, 0, 0, 0, 67108864, 0, 0, 0, 12, 0, 256, 512, 65536, 0, 0, 1024, 512, 131072, 131072, 4, 16, 32, 65536, 0, 4, 16, 32, 0, 0, 0, 4, 16, 0, 0, 16384, 67108864, 0, 0, 1, 24, 96, 128, 256, 1024\n];\n\nJSONiqTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"JSONChar\",\n  \"JSONCharRef\",\n  \"JSONPredefinedCharRef\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$$'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar JSONiqTokenizer = _dereq_('./JSONiqTokenizer').JSONiqTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit'.split('|');\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'JSONPredefinedCharRef', token: 'constant.language.escape' },\n        { name: 'JSONCharRef', token: 'constant.language.escape' },\n        { name: 'JSONChar', token: 'string' }\n    ]\n};\n    \nexports.JSONiqLexer = function(){ return new Lexer(JSONiqTokenizer, Rules); };\n},{\"./JSONiqTokenizer\":\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TokenHandler = function(code) {\n    var input = code;\n    this.tokens = [];\n \n    this.reset = function() {\n        input = input;\n        this.tokens = [];\n    };\n    \n    this.startNonterminal = function() {};\n    this.endNonterminal = function() {};\n\n    this.terminal = function(name, begin, end) {\n        this.tokens.push({\n            name: name,\n            value: input.substring(begin, end)\n        });\n    };\n\n    this.whitespace = function(begin, end) {\n        this.tokens.push({\n            name: 'WS',\n            value: input.substring(begin, end)\n        });\n    };\n};\n\nexports.Lexer = function(Tokenizer, Rules) {\n\n    this.tokens = [];\n  \n    this.getLineTokens = function(line, state) {\n        state = (state === 'start' || !state) ? '[\"start\"]' : state;\n        var stack = JSON.parse(state);\n        var h = new TokenHandler(line);\n        var tokenizer = new Tokenizer(line, h);\n        var tokens = [];\n    \n        while(true) {\n            var currentState = stack[stack.length - 1];\n            try {\n                h.tokens = [];\n                tokenizer['parse_' + currentState]();\n                var info = null;\n        \n                if(h.tokens.length > 1 && h.tokens[0].name === 'WS') {\n                    tokens.push({\n                        type: 'text',\n                        value: h.tokens[0].value\n                    });\n                    h.tokens.splice(0, 1);\n                }\n        \n                var token = h.tokens[0];\n                var rules  = Rules[currentState];\n                for(var k = 0; k < rules.length; k++) {\n                    var rule = Rules[currentState][k];\n                    if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) {\n                        info = rule;\n                        break;\n                    }\n                }\n        \n                if(token.name === 'EOF') { break; }\n                if(token.value === '') { throw 'Encountered empty string lexical rule.'; }\n        \n                tokens.push({\n                    type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token),\n                    value: token.value\n                });\n        \n                if(info && info.next) {\n                    info.next(stack);\n                }\n      \n            } catch(e) {\n                if(e instanceof tokenizer.ParseException) {\n                    var index = 0;\n                    for(var i=0; i < tokens.length; i++) {\n                        index += tokens[i].value.length;\n                    }\n                    tokens.push({ type: 'text', value: line.substring(index) });\n                    return {\n                        tokens: tokens,\n                        state: JSON.stringify(['start'])\n                    };\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        return {\n            tokens: tokens,\n            state: JSON.stringify(stack)\n        };\n    };\n};\n},{}]},{},[\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\"]);\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/behaviour/xquery\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require('../behaviour').Behaviour;\nvar CstyleBehaviour = require('./cstyle').CstyleBehaviour;\nvar XmlBehaviour = require(\"../behaviour/xml\").XmlBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nfunction hasType(token, type) {\n    var hasType = true;\n    var typeList = token.type.split('.');\n    var needleList = type.split('.');\n    needleList.forEach(function (needle) {\n        if (typeList.indexOf(needle) == -1) {\n            hasType = false;\n            return false;\n        }\n    });\n    return hasType;\n}\nvar XQueryBehaviour = function () {\n    this.inherit(CstyleBehaviour, [\"braces\", \"parens\", \"string_dquotes\"]); // Get string behaviour\n    this.inherit(XmlBehaviour); // Get xml behaviour\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken();\n            var atCursor = false;\n            var state = JSON.parse(state).pop();\n            if ((token && token.value === '>') || state !== \"StartTag\")\n                return;\n            if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))) {\n                do {\n                    token = iterator.stepBackward();\n                } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));\n            }\n            else {\n                atCursor = true;\n            }\n            var previous = iterator.stepBackward();\n            if (!token || !hasType(token, 'meta.tag') || (previous !== null && previous.value.match('/'))) {\n                return;\n            }\n            var tag = token.value.substring(1);\n            if (atCursor) {\n                var tag = tag.substring(0, position.column - token.start);\n            }\n            return {\n                text: '>' + '</' + tag + '>',\n                selection: [1, 1]\n            };\n        }\n    });\n};\noop.inherits(XQueryBehaviour, Behaviour);\nexports.XQueryBehaviour = XQueryBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/jsoniq\",[\"require\",\"exports\",\"module\",\"ace/worker/worker_client\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/xquery/jsoniq_lexer\",\"ace/range\",\"ace/mode/behaviour/xquery\",\"ace/mode/folding/cstyle\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JSONiqLexer = require(\"./xquery/jsoniq_lexer\").JSONiqLexer;\nvar Range = require(\"../range\").Range;\nvar XQueryBehaviour = require(\"./behaviour/xquery\").XQueryBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Anchor = require(\"../anchor\").Anchor;\n\nvar Mode = function() {\n    this.$tokenizer   = new JSONiqLexer();\n    this.$behaviour   = new XQueryBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n    this.$highlightRules = new TextHighlightRules();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.completer = {\n        getCompletions: function(editor, session, pos, prefix, callback) {\n            if (!session.$worker)\n                return callback();\n            session.$worker.emit(\"complete\", { data: { pos: pos, prefix: prefix } });\n            session.$worker.on(\"complete\", function(e){\n                callback(null, e.data);\n            });\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var match = line.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);\n        if (match)\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*[\\}\\)]/.test(input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*[\\}\\)])/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.toggleCommentLines = function(state, doc, startRow, endRow) {\n        var i, line;\n        var outdent = true;\n        var re = /^\\s*\\(:(.*):\\)/;\n\n        for (i=startRow; i<= endRow; i++) {\n            if (!re.test(doc.getLine(i))) {\n                outdent = false;\n                break;\n            }\n        }\n\n        var range = new Range(0, 0, 0, 0);\n        for (i=startRow; i<= endRow; i++) {\n            line = doc.getLine(i);\n            range.start.row  = i;\n            range.end.row    = i;\n            range.end.column = line.length;\n\n            doc.replace(range, outdent ? line.match(re)[1] : \"(:\" + line + \":)\");\n        }\n    };\n    this.createWorker = function(session) {\n        \n      var worker = new WorkerClient([\"ace\"], \"ace/mode/xquery_worker\", \"XQueryWorker\");\n        var that = this;\n\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"ok\", function(e) {\n          session.clearAnnotations();\n        });\n        \n        worker.on(\"markers\", function(e) {\n          session.clearAnnotations();\n          that.addMarkers(e.data, session);\n        });\n \n        return worker;\n    };\n \n    this.removeMarkers = function(session) {\n        var markers = session.getMarkers(false);\n        for (var id in markers) {\n            if (markers[id].clazz.indexOf('language_highlight_') === 0) {\n                session.removeMarker(id);\n            }\n        }\n        for (var i = 0; i < session.markerAnchors.length; i++) {\n            session.markerAnchors[i].detach();\n        }\n        session.markerAnchors = [];\n    };\n\n    this.addMarkers = function(annos, mySession) {\n        var _self = this;\n        \n        if (!mySession.markerAnchors) mySession.markerAnchors = [];\n        this.removeMarkers(mySession);\n        mySession.languageAnnos = [];\n        annos.forEach(function(anno) {\n            var anchor = new Anchor(mySession.getDocument(), anno.pos.sl, anno.pos.sc || 0);\n            mySession.markerAnchors.push(anchor);\n            var markerId;\n            var colDiff = anno.pos.ec - anno.pos.sc;\n            var rowDiff = anno.pos.el - anno.pos.sl;\n            var gutterAnno = {\n                guttertext: anno.message,\n                type: anno.level || \"warning\",\n                text: anno.message\n            };\n\n            function updateFloat(single) {\n                if (markerId)\n                    mySession.removeMarker(markerId);\n                gutterAnno.row = anchor.row;\n                if (anno.pos.sc !== undefined && anno.pos.ec !== undefined) {\n                    var range = new Range(anno.pos.sl, anno.pos.sc, anno.pos.el, anno.pos.ec);\n                    markerId = mySession.addMarker(range, \"language_highlight_\" + (anno.type ? anno.type : \"default\"));\n                }\n                if (single) mySession.setAnnotations(mySession.languageAnnos);\n            }\n            updateFloat();\n            anchor.on(\"change\", function() {\n                updateFloat(true);\n            });\n            if (anno.message) mySession.languageAnnos.push(gutterAnno);\n        });\n        mySession.setAnnotations(mySession.languageAnnos);\n    }; \n\n    this.$id = \"ace/mode/jsoniq\";\n    this.snippetFileId = \"ace/snippets/jsoniq\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/jsoniq\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-jsp.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JavaHighlightRules = function () {\n    var keywords = (\"abstract|continue|for|new|switch|\" +\n        \"assert|default|goto|package|synchronized|\" +\n        \"boolean|do|if|private|this|\" +\n        \"break|double|implements|protected|throw|\" +\n        \"byte|else|import|public|throws|\" +\n        \"case|enum|instanceof|return|transient|\" +\n        \"catch|extends|int|short|try|\" +\n        \"char|final|interface|static|void|\" +\n        \"class|finally|long|strictfp|volatile|\" +\n        \"const|float|native|super|while|\" +\n        \"var\");\n    var buildinConstants = (\"null|Infinity|NaN|undefined\");\n    var langClasses = (\"AbstractMethodError|AssertionError|ClassCircularityError|\" +\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\" +\n        \"ExceptionInInitializerError|IllegalAccessError|\" +\n        \"IllegalThreadStateException|InstantiationError|InternalError|\" +\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\" +\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\" +\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\" +\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\" +\n        \"InstantiationException|IndexOutOfBoundsException|\" +\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\" +\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\" +\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\" +\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\" +\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\" +\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\" +\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\" +\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\" +\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\" +\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\" +\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\" +\n        \"ArrayStoreException|ClassCastException|LinkageError|\" +\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\" +\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\" +\n        \"Cloneable|Class|CharSequence|Comparable|String|Object\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                regex: \"(open(?:\\\\s+))?module(?=\\\\s*\\\\w)\",\n                token: \"keyword\",\n                next: [{\n                        regex: \"{\",\n                        token: \"paren.lparen\",\n                        next: [{\n                                regex: \"}\",\n                                token: \"paren.rparen\",\n                                next: \"start\"\n                            }, {\n                                regex: \"\\\\b(requires|transitive|exports|opens|to|uses|provides|with)\\\\b\",\n                                token: \"keyword\"\n                            }]\n                    }, {\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    }, {\n                        token: \"identifier\",\n                        regex: \"\\\\w+\"\n                    }, {\n                        token: \"punctuation.operator\",\n                        regex: \".\"\n                    }, {\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    }, {\n                        regex: \"\",\n                        next: \"start\"\n                    }]\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\||\\\\^|\\\\*|\\\\/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?|\\\\:|\\\\*=|\\\\/=|%=|\\\\+=|\\\\-=|&=|\\\\|=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaHighlightRules, TextHighlightRules);\nexports.JavaHighlightRules = JavaHighlightRules;\n\n});\n\nace.define(\"ace/mode/jsp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/java_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar JavaHighlightRules = require(\"./java_highlight_rules\").JavaHighlightRules;\nvar JspHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var builtinVariables = 'request|response|out|session|' +\n        'application|config|pageContext|page|Exception';\n    var keywords = 'page|include|taglib';\n    var startRules = [\n        {\n            token: \"comment\",\n            regex: \"<%--\",\n            push: \"jsp-dcomment\"\n        }, {\n            token: \"meta.tag\",\n            regex: \"<%@?|<%=?|<%!?|<jsp:[^>]+>\",\n            push: \"jsp-start\"\n        }\n    ];\n    var endRules = [\n        {\n            token: \"meta.tag\",\n            regex: \"%>|<\\\\/jsp:[^>]+>\",\n            next: \"pop\"\n        }, {\n            token: \"variable.language\",\n            regex: builtinVariables\n        }, {\n            token: \"keyword\",\n            regex: keywords\n        }\n    ];\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n    this.embedRules(JavaHighlightRules, \"jsp-\", endRules, [\"start\"]);\n    this.addRules({\n        \"jsp-dcomment\": [{\n                token: \"comment\",\n                regex: \".*?--%>\",\n                next: \"pop\"\n            }]\n    });\n    this.normalizeRules();\n};\noop.inherits(JspHighlightRules, HtmlHighlightRules);\nexports.JspHighlightRules = JspHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/jsp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jsp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JspHighlightRules = require(\"./jsp_highlight_rules\").JspHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JspHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/jsp\";\n    this.snippetFileId = \"ace/snippets/jsp\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/jsp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-jssm.js",
    "content": "ace.define(\"ace/mode/jssm_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from ./jssm.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JSSMHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                token: \"punctuation.definition.comment.mn\",\n                regex: /\\/\\*/,\n                push: [{\n                        token: \"punctuation.definition.comment.mn\",\n                        regex: /\\*\\//,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.block.jssm\"\n                    }],\n                comment: \"block comment\"\n            }, {\n                token: \"comment.line.jssm\",\n                regex: /\\/\\//,\n                push: [{\n                        token: \"comment.line.jssm\",\n                        regex: /$/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.line.jssm\"\n                    }],\n                comment: \"block comment\"\n            }, {\n                token: \"entity.name.function\",\n                regex: /\\${/,\n                push: [{\n                        token: \"entity.name.function\",\n                        regex: /}/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"keyword.other\"\n                    }],\n                comment: \"js outcalls\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /[0-9]*\\.[0-9]*\\.[0-9]*/,\n                comment: \"semver\"\n            }, {\n                token: \"constant.language.jssmLanguage\",\n                regex: /graph_layout\\s*:/,\n                comment: \"jssm language tokens\"\n            }, {\n                token: \"constant.language.jssmLanguage\",\n                regex: /machine_name\\s*:/,\n                comment: \"jssm language tokens\"\n            }, {\n                token: \"constant.language.jssmLanguage\",\n                regex: /machine_version\\s*:/,\n                comment: \"jssm language tokens\"\n            }, {\n                token: \"constant.language.jssmLanguage\",\n                regex: /jssm_version\\s*:/,\n                comment: \"jssm language tokens\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.legal_legal\",\n                regex: /<->/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.legal_none\",\n                regex: /<-/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.none_legal\",\n                regex: /->/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.main_main\",\n                regex: /<=>/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.none_main\",\n                regex: /=>/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.main_none\",\n                regex: /<=/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.forced_forced\",\n                regex: /<~>/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.none_forced\",\n                regex: /~>/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.forced_none\",\n                regex: /<~/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.legal_main\",\n                regex: /<-=>/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.main_legal\",\n                regex: /<=->/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.legal_forced\",\n                regex: /<-~>/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.forced_legal\",\n                regex: /<~->/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.main_forced\",\n                regex: /<=~>/,\n                comment: \"transitions\"\n            }, {\n                token: \"keyword.control.transition.jssmArrow.forced_main\",\n                regex: /<~=>/,\n                comment: \"transitions\"\n            }, {\n                token: \"constant.numeric.jssmProbability\",\n                regex: /[0-9]+%/,\n                comment: \"edge probability annotation\"\n            }, {\n                token: \"constant.character.jssmAction\",\n                regex: /\\'[^']*\\'/,\n                comment: \"action annotation\"\n            }, {\n                token: \"entity.name.tag.jssmLabel.doublequoted\",\n                regex: /\\\"[^\"]*\\\"/,\n                comment: \"jssm label annotation\"\n            }, {\n                token: \"entity.name.tag.jssmLabel.atom\",\n                regex: /[a-zA-Z0-9_.+&()#@!?,]/,\n                comment: \"jssm label annotation\"\n            }]\n    };\n    this.normalizeRules();\n};\nJSSMHighlightRules.metaData = {\n    fileTypes: [\"jssm\", \"jssm_state\"],\n    name: \"JSSM\",\n    scopeName: \"source.jssm\"\n};\noop.inherits(JSSMHighlightRules, TextHighlightRules);\nexports.JSSMHighlightRules = JSSMHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/jssm\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jssm_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JSSMHighlightRules = require(\"./jssm_highlight_rules\").JSSMHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JSSMHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/jssm\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/jssm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-jsx.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/jsx_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsxHighlightRules = function () {\n    var keywords = lang.arrayToMap((\"break|do|instanceof|typeof|case|else|new|var|catch|finally|return|void|continue|for|switch|default|while|function|this|\" +\n        \"if|throw|\" +\n        \"delete|in|try|\" +\n        \"class|extends|super|import|from|into|implements|interface|static|mixin|override|abstract|final|\" +\n        \"number|int|string|boolean|variant|\" +\n        \"log|assert\").split(\"|\"));\n    var buildinConstants = lang.arrayToMap((\"null|true|false|NaN|Infinity|__FILE__|__LINE__|undefined\").split(\"|\"));\n    var reserved = lang.arrayToMap((\"debugger|with|\" +\n        \"const|export|\" +\n        \"let|private|public|yield|protected|\" +\n        \"extern|native|as|operator|__fake__|__readonly__\").split(\"|\"));\n    var identifierRe = \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: [\n                    \"storage.type\",\n                    \"text\",\n                    \"entity.name.function\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")\"\n            }, {\n                token: function (value) {\n                    if (value == \"this\")\n                        return \"variable.language\";\n                    else if (value == \"function\")\n                        return \"storage.type\";\n                    else if (keywords.hasOwnProperty(value) || reserved.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (buildinConstants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (/^_?[A-Z][a-zA-Z0-9_]*$/.test(value))\n                        return \"language.support.class\";\n                    else\n                        return \"identifier\";\n                },\n                regex: identifierRe\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({<]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}>]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\noop.inherits(JsxHighlightRules, TextHighlightRules);\nexports.JsxHighlightRules = JsxHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/jsx\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jsx_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JsxHighlightRules = require(\"./jsx_highlight_rules\").JsxHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nfunction Mode() {\n    this.HighlightRules = JsxHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n}\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/jsx\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/jsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-julia.js",
    "content": "ace.define(\"ace/mode/julia_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from https://raw.github.com/JuliaLang/julia/master/contrib/Julia.tmbundle/Syntaxes/Julia.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JuliaHighlightRules = function () {\n    this.$rules = { start: [{ include: '#function_decl' },\n            { include: '#function_call' },\n            { include: '#type_decl' },\n            { include: '#keyword' },\n            { include: '#operator' },\n            { include: '#number' },\n            { include: '#string' },\n            { include: '#comment' }],\n        '#bracket': [{ token: 'keyword.bracket.julia',\n                regex: '\\\\(|\\\\)|\\\\[|\\\\]|\\\\{|\\\\}|,' }],\n        '#comment': [{ token: ['punctuation.definition.comment.julia',\n                    'comment.line.number-sign.julia'],\n                regex: '(#)(?!\\\\{)(.*$)' }],\n        '#function_call': [{ token: ['support.function.julia', 'text'],\n                regex: '([a-zA-Z0-9_]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*\\\\()' }],\n        '#function_decl': [{ token: ['keyword.other.julia', 'meta.function.julia',\n                    'entity.name.function.julia', 'meta.function.julia', 'text'],\n                regex: '(function|macro)(\\\\s*)([a-zA-Z0-9_\\\\{]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*)([(\\\\\\\\{])' }],\n        '#keyword': [{ token: 'keyword.other.julia',\n                regex: '\\\\b(?:function|type|immutable|macro|quote|abstract|bitstype|typealias|module|baremodule|new)\\\\b' },\n            { token: 'keyword.control.julia',\n                regex: '\\\\b(?:if|else|elseif|while|for|in|begin|let|end|do|try|catch|finally|return|break|continue)\\\\b' },\n            { token: 'storage.modifier.variable.julia',\n                regex: '\\\\b(?:global|local|const|export|import|importall|using)\\\\b' },\n            { token: 'variable.macro.julia', regex: '@[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b' }],\n        '#number': [{ token: 'constant.numeric.julia',\n                regex: '\\\\b0(?:x|X)[0-9a-fA-F]*|(?:\\\\b[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]*)?(?:im)?|\\\\bInf(?:32)?\\\\b|\\\\bNaN(?:32)?\\\\b|\\\\btrue\\\\b|\\\\bfalse\\\\b' }],\n        '#operator': [{ token: 'keyword.operator.update.julia',\n                regex: '=|:=|\\\\+=|-=|\\\\*=|/=|//=|\\\\.//=|\\\\.\\\\*=|\\\\\\\\=|\\\\.\\\\\\\\=|^=|\\\\.^=|%=|\\\\|=|&=|\\\\$=|<<=|>>=' },\n            { token: 'keyword.operator.ternary.julia', regex: '\\\\?|:' },\n            { token: 'keyword.operator.boolean.julia',\n                regex: '\\\\|\\\\||&&|!' },\n            { token: 'keyword.operator.arrow.julia', regex: '->|<-|-->' },\n            { token: 'keyword.operator.relation.julia',\n                regex: '>|<|>=|<=|==|!=|\\\\.>|\\\\.<|\\\\.>=|\\\\.>=|\\\\.==|\\\\.!=|\\\\.=|\\\\.!|<:|:>' },\n            { token: 'keyword.operator.range.julia', regex: ':' },\n            { token: 'keyword.operator.shift.julia', regex: '<<|>>' },\n            { token: 'keyword.operator.bitwise.julia', regex: '\\\\||\\\\&|~' },\n            { token: 'keyword.operator.arithmetic.julia',\n                regex: '\\\\+|-|\\\\*|\\\\.\\\\*|/|\\\\./|//|\\\\.//|%|\\\\.%|\\\\\\\\|\\\\.\\\\\\\\|\\\\^|\\\\.\\\\^' },\n            { token: 'keyword.operator.isa.julia', regex: '::' },\n            { token: 'keyword.operator.dots.julia',\n                regex: '\\\\.(?=[a-zA-Z])|\\\\.\\\\.+' },\n            { token: 'keyword.operator.interpolation.julia',\n                regex: '\\\\$#?(?=.)' },\n            { token: ['variable', 'keyword.operator.transposed-variable.julia'],\n                regex: '([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+)((?:\\'|\\\\.\\')*\\\\.?\\')' },\n            { token: 'text',\n                regex: '\\\\[|\\\\(' },\n            { token: ['text', 'keyword.operator.transposed-matrix.julia'],\n                regex: \"([\\\\]\\\\)])((?:'|\\\\.')*\\\\.?')\" }],\n        '#string': [{ token: 'punctuation.definition.string.begin.julia',\n                regex: '\\'',\n                push: [{ token: 'punctuation.definition.string.end.julia',\n                        regex: '\\'',\n                        next: 'pop' },\n                    { include: '#string_escaped_char' },\n                    { defaultToken: 'string.quoted.single.julia' }] },\n            { token: 'punctuation.definition.string.begin.julia',\n                regex: '\"',\n                push: [{ token: 'punctuation.definition.string.end.julia',\n                        regex: '\"',\n                        next: 'pop' },\n                    { include: '#string_escaped_char' },\n                    { defaultToken: 'string.quoted.double.julia' }] },\n            { token: 'punctuation.definition.string.begin.julia',\n                regex: '\\\\b[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\"',\n                push: [{ token: 'punctuation.definition.string.end.julia',\n                        regex: '\"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*',\n                        next: 'pop' },\n                    { include: '#string_custom_escaped_char' },\n                    { defaultToken: 'string.quoted.custom-double.julia' }] },\n            { token: 'punctuation.definition.string.begin.julia',\n                regex: '`',\n                push: [{ token: 'punctuation.definition.string.end.julia',\n                        regex: '`',\n                        next: 'pop' },\n                    { include: '#string_escaped_char' },\n                    { defaultToken: 'string.quoted.backtick.julia' }] }],\n        '#string_custom_escaped_char': [{ token: 'constant.character.escape.julia', regex: '\\\\\\\\\"' }],\n        '#string_escaped_char': [{ token: 'constant.character.escape.julia',\n                regex: '\\\\\\\\(?:\\\\\\\\|[0-3]\\\\d{,2}|[4-7]\\\\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8}|.)' }],\n        '#type_decl': [{ token: ['keyword.control.type.julia',\n                    'meta.type.julia',\n                    'entity.name.type.julia',\n                    'entity.other.inherited-class.julia',\n                    'punctuation.separator.inheritance.julia',\n                    'entity.other.inherited-class.julia'],\n                regex: '(type|immutable)(\\\\s+)([a-zA-Z0-9_]+)(?:(\\\\s*)(<:)(\\\\s*[.a-zA-Z0-9_:]+))?' },\n            { token: ['other.typed-variable.julia', 'support.type.julia'],\n                regex: '([a-zA-Z0-9_]+)(::[a-zA-Z0-9_{}]+)' }] };\n    this.normalizeRules();\n};\nJuliaHighlightRules.metaData = { fileTypes: ['jl'],\n    firstLineMatch: '^#!.*\\\\bjulia\\\\s*$',\n    foldingStartMarker: '^\\\\s*(?:if|while|for|begin|function|macro|module|baremodule|type|immutable|let)\\\\b(?!.*\\\\bend\\\\b).*$',\n    foldingStopMarker: '^\\\\s*(?:end)\\\\b.*$',\n    name: 'Julia',\n    scopeName: 'source.julia' };\noop.inherits(JuliaHighlightRules, TextHighlightRules);\nexports.JuliaHighlightRules = JuliaHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/julia\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/julia_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JuliaHighlightRules = require(\"./julia_highlight_rules\").JuliaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JuliaHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.blockComment = \"\";\n    this.$id = \"ace/mode/julia\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/julia\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-kotlin.js",
    "content": "ace.define(\"ace/mode/kotlin_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar KotlinHighlightRules = function () {\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"storage.modifier.kotlin\": \"var|val|public|private|protected|abstract|final|enum|open|attribute|\"\n            + \"annotation|override|inline|var|val|vararg|lazy|in|out|internal|data|tailrec|operator|infix|const|\"\n            + \"yield|typealias|typeof|sealed|inner|value|lateinit|external|suspend|noinline|crossinline|reified|\"\n            + \"expect|actual\",\n        \"keyword\": \"companion|class|object|interface|namespace|type|fun|constructor|if|else|while|for|do|return|when|\"\n            + \"where|break|continue|try|catch|finally|throw|in|is|as|assert|constructor\",\n        \"constant.language.kotlin\": \"true|false|null|this|super\",\n        \"entity.name.function.kotlin\": \"get|set\"\n    }, \"identifier\");\n    this.$rules = {\n        start: [{\n                include: \"#comments\"\n            }, {\n                token: [\n                    \"text\",\n                    \"keyword.other.kotlin\",\n                    \"text\",\n                    \"entity.name.package.kotlin\",\n                    \"text\"\n                ],\n                regex: /^(\\s*)(package)\\b(?:(\\s*)([^ ;$]+)(\\s*))?/\n            }, {\n                token: \"comment\",\n                regex: /^\\s*#!.*$/\n            }, {\n                include: \"#imports\"\n            }, {\n                include: \"#expressions\"\n            }, {\n                token: \"string\",\n                regex: /@[a-zA-Z][a-zA-Z:]*\\b/\n            }, {\n                token: [\"keyword.other.kotlin\", \"text\", \"entity.name.variable.kotlin\"],\n                regex: /\\b(var|val)(\\s+)([a-zA-Z_][\\w]*)\\b/\n            }, {\n                token: [\"keyword.other.kotlin\", \"text\", \"entity.name.variable.kotlin\", \"paren.lparen\"],\n                regex: /(fun)(\\s+)(\\w+)(\\()/,\n                push: [{\n                        token: [\"variable.parameter.function.kotlin\", \"text\", \"keyword.operator\"],\n                        regex: /(\\w+)(\\s*)(:)/\n                    }, {\n                        token: \"paren.rparen\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#comments\"\n                    }, {\n                        include: \"#types\"\n                    }, {\n                        include: \"#expressions\"\n                    }]\n            }, {\n                token: [\"text\", \"keyword\", \"text\", \"identifier\"],\n                regex: /^(\\s*)(class)(\\s*)([a-zA-Z]+)/,\n                next: \"#classes\"\n            }, {\n                token: [\"identifier\", \"punctuaction\"],\n                regex: /([a-zA-Z_][\\w]*)(<)/,\n                push: [{\n                        include: \"#generics\"\n                    }, {\n                        include: \"#defaultTypes\"\n                    }, {\n                        token: \"punctuation\",\n                        regex: />/,\n                        next: \"pop\"\n                    }]\n            }, {\n                token: keywordMapper,\n                regex: /[a-zA-Z_][\\w]*\\b/\n            }, {\n                token: \"paren.lparen\",\n                regex: /[{(\\[]/\n            }, {\n                token: \"paren.rparen\",\n                regex: /[})\\]]/\n            }],\n        \"#comments\": [{\n                token: \"comment\",\n                regex: /\\/\\*/,\n                push: [{\n                        token: \"comment\",\n                        regex: /\\*\\//,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }, {\n                token: [\n                    \"text\",\n                    \"comment\"\n                ],\n                regex: /(\\s*)(\\/\\/.*$)/\n            }],\n        \"#constants\": [{\n                token: \"constant.numeric.kotlin\",\n                regex: /\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\b/\n            }, {\n                token: \"constant.other.kotlin\",\n                regex: /\\b[A-Z][A-Z0-9_]+\\b/\n            }],\n        \"#expressions\": [{\n                include: \"#strings\"\n            }, {\n                include: \"#constants\"\n            }, {\n                include: \"#keywords\"\n            }],\n        \"#imports\": [{\n                token: [\n                    \"text\",\n                    \"keyword.other.kotlin\",\n                    \"text\",\n                    \"keyword.other.kotlin\"\n                ],\n                regex: /^(\\s*)(import)(\\s+[^ $]+\\s+)((?:as)?)/\n            }],\n        \"#generics\": [{\n                token: \"punctuation\",\n                regex: /</,\n                push: [{\n                        token: \"punctuation\",\n                        regex: />/,\n                        next: \"pop\"\n                    }, {\n                        token: \"storage.type.generic.kotlin\",\n                        regex: /\\w+/\n                    }, {\n                        token: \"keyword.operator\",\n                        regex: /:/\n                    }, {\n                        token: \"punctuation\",\n                        regex: /,/\n                    }, {\n                        include: \"#generics\"\n                    }]\n            }],\n        \"#classes\": [{\n                include: \"#generics\"\n            }, {\n                token: \"keyword\",\n                regex: /public|private|constructor/\n            }, {\n                token: \"string\",\n                regex: /@[a-zA-Z][a-zA-Z:]*\\b/\n            }, {\n                token: \"text\",\n                regex: /(?=$|\\(|{)/,\n                next: \"start\"\n            }],\n        \"#keywords\": [{\n                token: \"keyword.operator.kotlin\",\n                regex: /==|!=|===|!==|<=|>=|<|>|=>|->|::|\\?:/\n            }, {\n                token: \"keyword.operator.assignment.kotlin\",\n                regex: /=/\n            }, {\n                token: \"keyword.operator.declaration.kotlin\",\n                regex: /:/,\n                push: [{\n                        token: \"text\",\n                        regex: /(?=$|{|=|,)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#types\"\n                    }]\n            }, {\n                token: \"keyword.operator.dot.kotlin\",\n                regex: /\\./\n            }, {\n                token: \"keyword.operator.increment-decrement.kotlin\",\n                regex: /\\-\\-|\\+\\+/\n            }, {\n                token: \"keyword.operator.arithmetic.kotlin\",\n                regex: /\\-|\\+|\\*|\\/|%/\n            }, {\n                token: \"keyword.operator.arithmetic.assign.kotlin\",\n                regex: /\\+=|\\-=|\\*=|\\/=/\n            }, {\n                token: \"keyword.operator.logical.kotlin\",\n                regex: /!|&&|\\|\\|/\n            }, {\n                token: \"keyword.operator.range.kotlin\",\n                regex: /\\.\\./\n            }, {\n                token: \"punctuation.kotlin\",\n                regex: /[;,]/\n            }],\n        \"#types\": [{\n                include: \"#defaultTypes\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /\\(/,\n                push: [{\n                        token: \"paren.rparen\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#defaultTypes\"\n                    }, {\n                        token: \"punctuation\",\n                        regex: /,/\n                    }]\n            }, {\n                include: \"#generics\"\n            }, {\n                token: \"keyword.operator.declaration.kotlin\",\n                regex: /->/\n            }, {\n                token: \"paren.rparen\",\n                regex: /\\)/\n            }, {\n                token: \"keyword.operator.declaration.kotlin\",\n                regex: /:/,\n                push: [{\n                        token: \"text\",\n                        regex: /(?=$|{|=|,)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#types\"\n                    }]\n            }],\n        \"#defaultTypes\": [{\n                token: \"storage.type.buildin.kotlin\",\n                regex: /\\b(Any|Unit|String|Int|Boolean|Char|Long|Double|Float|Short|Byte|dynamic|IntArray|BooleanArray|CharArray|LongArray|DoubleArray|FloatArray|ShortArray|ByteArray|Array|List|Map|Nothing|Enum|Throwable|Comparable)\\b/\n            }],\n        \"#strings\": [{\n                token: \"string\",\n                regex: /\"\"\"/,\n                push: [{\n                        token: \"string\",\n                        regex: /\"\"\"/,\n                        next: \"pop\"\n                    }, {\n                        token: \"variable.parameter.template.kotlin\",\n                        regex: /\\$\\w+|\\${[^}]+}/\n                    }, {\n                        token: \"constant.character.escape.kotlin\",\n                        regex: /\\\\./\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string\",\n                regex: /\"/,\n                push: [{\n                        token: \"string\",\n                        regex: /\"/,\n                        next: \"pop\"\n                    }, {\n                        token: \"variable.parameter.template.kotlin\",\n                        regex: /\\$\\w+|\\$\\{[^\\}]+\\}/\n                    }, {\n                        token: \"constant.character.escape.kotlin\",\n                        regex: /\\\\./\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string\",\n                regex: /'/,\n                push: [{\n                        token: \"string\",\n                        regex: /'/,\n                        next: \"pop\"\n                    }, {\n                        token: \"constant.character.escape.kotlin\",\n                        regex: /\\\\./\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string\",\n                regex: /`/,\n                push: [{\n                        token: \"string\",\n                        regex: /`/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }]\n    };\n    this.normalizeRules();\n};\nKotlinHighlightRules.metaData = {\n    fileTypes: [\"kt\", \"kts\"],\n    name: \"Kotlin\",\n    scopeName: \"source.Kotlin\"\n};\noop.inherits(KotlinHighlightRules, TextHighlightRules);\nexports.KotlinHighlightRules = KotlinHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/kotlin\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/kotlin_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar KotlinHighlightRules = require(\"./kotlin_highlight_rules\").KotlinHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = KotlinHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/kotlin\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/kotlin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-latex.js",
    "content": "ace.define(\"ace/mode/latex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LatexHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"%.*$\"\n            }, {\n                token: [\"keyword\", \"lparen\", \"variable.parameter\", \"rparen\", \"lparen\", \"storage.type\", \"rparen\"],\n                regex: \"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"\n            }, {\n                token: [\"keyword\", \"lparen\", \"variable.parameter\", \"rparen\"],\n                regex: \"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"\n            }, {\n                token: [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n                regex: \"(\\\\\\\\begin)({)(verbatim)(})\",\n                next: \"verbatim\"\n            }, {\n                token: [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n                regex: \"(\\\\\\\\begin)({)(lstlisting)(})\",\n                next: \"lstlisting\"\n            }, {\n                token: [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n                regex: \"(\\\\\\\\(?:begin|end))({)([\\\\w*]*)(})\"\n            }, {\n                token: \"storage.type\",\n                regex: /\\\\verb\\b\\*?/,\n                next: [{\n                        token: [\"keyword.operator\", \"string\", \"keyword.operator\"],\n                        regex: \"(.)(.*?)(\\\\1|$)|\",\n                        next: \"start\"\n                    }]\n            }, {\n                token: \"storage.type\",\n                regex: \"\\\\\\\\[a-zA-Z]+\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"constant.character.escape\",\n                regex: \"\\\\\\\\[^a-zA-Z]?\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\${1,2}\",\n                next: \"equation\"\n            }],\n        \"equation\": [{\n                token: \"comment\",\n                regex: \"%.*$\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\${1,2}\",\n                next: \"start\"\n            }, {\n                token: \"constant.character.escape\",\n                regex: \"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"\n            }, {\n                token: \"error\",\n                regex: \"^\\\\s*$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"verbatim\": [{\n                token: [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n                regex: \"(\\\\\\\\end)({)(verbatim)(})\",\n                next: \"start\"\n            }, {\n                defaultToken: \"text\"\n            }],\n        \"lstlisting\": [{\n                token: [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n                regex: \"(\\\\\\\\end)({)(lstlisting)(})\",\n                next: \"start\"\n            }, {\n                defaultToken: \"text\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(LatexHighlightRules, TextHighlightRules);\nexports.LatexHighlightRules = LatexHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/latex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar keywordLevels = {\n    \"\\\\subparagraph\": 1,\n    \"\\\\paragraph\": 2,\n    \"\\\\subsubsubsection\": 3,\n    \"\\\\subsubsection\": 4,\n    \"\\\\subsection\": 5,\n    \"\\\\section\": 6,\n    \"\\\\chapter\": 7,\n    \"\\\\part\": 8,\n    \"\\\\begin\": 9,\n    \"\\\\end\": 10\n};\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /^\\s*\\\\(begin)|\\s*\\\\(part|chapter|(?:sub)*(?:section|paragraph))\\b|{\\s*$/;\n    this.foldingStopMarker = /^\\s*\\\\(end)\\b|^\\s*}/;\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.latexBlock(session, row, match[0].length - 1);\n            if (match[2])\n                return this.latexSection(session, row, match[0].length - 1);\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.latexBlock(session, row, match[0].length - 1);\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n    this.latexBlock = function (session, row, column, returnRange) {\n        var keywords = {\n            \"\\\\begin\": 1,\n            \"\\\\end\": -1\n        };\n        var stream = new TokenIterator(session, row, column);\n        var token = stream.getCurrentToken();\n        if (!token || !(token.type == \"storage.type\" || token.type == \"constant.character.escape\"))\n            return;\n        var val = token.value;\n        var dir = keywords[val];\n        var getType = function () {\n            var token = stream.stepForward();\n            var type = token.type == \"lparen\" ? stream.stepForward().value : \"\";\n            if (dir === -1) {\n                stream.stepBackward();\n                if (type)\n                    stream.stepBackward();\n            }\n            return type;\n        };\n        var stack = [getType()];\n        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;\n        var startRow = row;\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        while (token = stream.step()) {\n            if (!token || !(token.type == \"storage.type\" || token.type == \"constant.character.escape\"))\n                continue;\n            var level = keywords[token.value];\n            if (!level)\n                continue;\n            var type = getType();\n            if (level === dir)\n                stack.unshift(type);\n            else if (stack.shift() !== type || !stack.length)\n                break;\n        }\n        if (stack.length)\n            return;\n        if (dir == 1) {\n            stream.stepBackward();\n            stream.stepBackward();\n        }\n        if (returnRange)\n            return stream.getCurrentTokenRange();\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1)\n            return new Range(row, session.getLine(row).length, startRow, startColumn);\n        else\n            return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());\n    };\n    this.latexSection = function (session, row, column) {\n        var stream = new TokenIterator(session, row, column);\n        var token = stream.getCurrentToken();\n        if (!token || token.type != \"storage.type\")\n            return;\n        var startLevel = keywordLevels[token.value] || 0;\n        var stackDepth = 0;\n        var endRow = row;\n        while (token = stream.stepForward()) {\n            if (token.type !== \"storage.type\")\n                continue;\n            var level = keywordLevels[token.value] || 0;\n            if (level >= 9) {\n                if (!stackDepth)\n                    endRow = stream.getCurrentTokenRow() - 1;\n                stackDepth += level == 9 ? 1 : -1;\n                if (stackDepth < 0)\n                    break;\n            }\n            else if (level >= startLevel)\n                break;\n        }\n        if (!stackDepth)\n            endRow = stream.getCurrentTokenRow() - 1;\n        while (endRow > row && !/\\S/.test(session.getLine(endRow)))\n            endRow--;\n        return new Range(row, session.getLine(row).length, endRow, session.getLine(endRow).length);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/latex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/latex_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/latex\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LatexHighlightRules = require(\"./latex_highlight_rules\").LatexHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar LatexFoldMode = require(\"./folding/latex\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = LatexHighlightRules;\n    this.foldingRules = new LatexFoldMode();\n    this.$behaviour = new CstyleBehaviour({ braces: true });\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.type = \"text\";\n    this.lineCommentStart = \"%\";\n    this.$id = \"ace/mode/latex\";\n    this.getMatching = function (session, row, column) {\n        if (row == undefined)\n            row = session.selection.lead;\n        if (typeof row == \"object\") {\n            column = row.column;\n            row = row.row;\n        }\n        var startToken = session.getTokenAt(row, column);\n        if (!startToken)\n            return;\n        if (startToken.value == \"\\\\begin\" || startToken.value == \"\\\\end\") {\n            return this.foldingRules.latexBlock(session, row, column, true);\n        }\n    };\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/latex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-latte.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/latte_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LatteHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift({\n            token: \"comment.start.latte\",\n            regex: \"\\\\{\\\\*\",\n            push: [{\n                    token: \"comment.end.latte\",\n                    regex: \".*\\\\*\\\\}\",\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"comment\"\n                }]\n        }, {\n            token: \"meta.tag.punctuation.tag-open.latte\",\n            regex: \"\\\\{(?![\\\\s'\\\"{}]|$)/?\",\n            push: [{\n                    token: \"meta.tag.latte\",\n                    regex: \"(?:_|=|[a-z]\\\\w*(?:[.:-]\\\\w+)*)?\",\n                    next: [{\n                            token: \"meta.tag.punctuation.tag-close.latte\",\n                            regex: \"\\\\}\",\n                            next: \"pop\"\n                        }, {\n                            include: \"latte-content\"\n                        }]\n                }]\n        });\n    }\n    this.$rules['tag_stuff'].unshift({\n        token: \"meta.attribute.latte\",\n        regex: \"n:[\\\\w-]+\",\n        next: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                next: [{\n                        token: \"string.attribute-value.xml\",\n                        regex: \"'\",\n                        next: [\n                            { token: \"string.attribute-value.xml\", regex: \"'\", next: \"tag_stuff\" },\n                            { include: \"latte-content\" }\n                        ]\n                    }, {\n                        token: \"string.attribute-value.xml\",\n                        regex: '\"',\n                        next: [\n                            { token: \"string.attribute-value.xml\", regex: '\"', next: \"tag_stuff\" },\n                            { include: \"latte-content\" }\n                        ]\n                    }, {\n                        token: \"text.tag-whitespace.xml\",\n                        regex: \"\\\\s\",\n                        next: \"tag_stuff\"\n                    }, {\n                        token: \"meta.tag.punctuation.tag-close.xml\",\n                        regex: \"/?>\",\n                        next: \"tag_stuff\"\n                    }, {\n                        include: \"latte-content\"\n                    }]\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"tag_stuff\"\n            }]\n    });\n    this.$rules[\"latte-content\"] = [\n        {\n            token: \"comment.start.latte\",\n            regex: \"\\\\/\\\\*\",\n            push: [\n                {\n                    token: \"comment.end.latte\",\n                    regex: \"\\\\*\\\\/\",\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"comment\"\n                }\n            ]\n        }, {\n            token: \"string.start\",\n            regex: '\"',\n            push: [\n                {\n                    token: \"constant.language.escape\",\n                    regex: '\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'\n                }, {\n                    token: \"variable\",\n                    regex: /\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/\n                }, {\n                    token: \"variable\",\n                    regex: /\\$\\{[^\"\\}]+\\}?/ // this is wrong but ok for now\n                },\n                { token: \"string.end\", regex: '\"', next: \"pop\" },\n                { defaultToken: \"string\" }\n            ]\n        }, {\n            token: \"string.start\",\n            regex: \"'\",\n            push: [\n                { token: \"constant.language.escape\", regex: /\\\\['\\\\]/ },\n                { token: \"string.end\", regex: \"'\", next: \"pop\" },\n                { defaultToken: \"string\" }\n            ]\n        }, {\n            token: \"keyword.control\",\n            regex: \"\\\\b(?:INF|NAN|and|or|xor|AND|OR|XOR|clone|new|instanceof|return|continue|break|as)\\\\b\"\n        }, {\n            token: \"constant.language\",\n            regex: \"\\\\b(?:true|false|null|TRUE|FALSE|NULL)\\\\b\"\n        }, {\n            token: \"variable\",\n            regex: /\\$\\w+/\n        }, {\n            token: \"constant.numeric\",\n            regex: \"[+-]?[0-9]+(?:\\\\.[0-9]+)?(?:e[0-9]+)?\"\n        }, {\n            token: [\"support.class\", \"keyword.operator\"],\n            regex: \"\\\\b(\\\\w+)(::)\"\n        }, {\n            token: \"constant.language\",\n            regex: \"\\\\b(?:[A-Z0-9_]+)\\\\b\"\n        }, {\n            token: \"string.unquoted\",\n            regex: \"\\\\w+(?:-+\\\\w+)*\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[[({]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\])}]\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"::|=>|->|\\\\?->|\\\\?\\\\?->|\\\\+\\\\+|--|<<|>>|<=>|<=|>=|===|!==|==|!=|<>|&&|\\\\|\\\\||\\\\?\\\\?|\\\\?>|\\\\*\\\\*|\\\\.\\\\.\\\\.|[^'\\\"]\" // =>, any char except quotes\n        }\n    ];\n    this.normalizeRules();\n};\noop.inherits(LatteHighlightRules, TextHighlightRules);\nexports.LatteHighlightRules = LatteHighlightRules;\n\n});\n\nace.define(\"ace/mode/latte\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/latte_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar LatteHighlightRules = require(\"./latte_highlight_rules\").LatteHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = LatteHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.blockComment = { start: \"{*\", end: \"*}\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        if (state == \"start\") {\n            var match = line.match(/^.*\\{(?:if|else|elseif|ifset|elseifset|ifchanged|switch|case|foreach|iterateWhile|for|while|first|last|sep|try|capture|spaceless|snippet|block|define|embed|snippetArea)\\b[^{]*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return /^\\s+\\{\\/$/.test(line + input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n    };\n    this.$id = \"ace/mode/latte\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/latte\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-less.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require('./css_highlight_rules');\nvar LessHighlightRules = function () {\n    var keywordList = \"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|\" +\n        \"@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|\" +\n        \"or|and|when|not\";\n    var keywords = keywordList.split('|');\n    var properties = CssHighlightRules.supportType.split('|');\n    var keywordMapper = this.createKeywordMapper({\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"keyword\": keywordList,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"identifier\", true);\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: [\"support.function\", \"paren.lparen\", \"string\", \"paren.rparen\"],\n                regex: \"(url)(\\\\()(.*)(\\\\))\"\n            }, {\n                token: [\"support.function\", \"paren.lparen\"],\n                regex: \"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"\n            }, {\n                token: function (value) {\n                    if (keywords.indexOf(value.toLowerCase()) > -1)\n                        return \"keyword\";\n                    else\n                        return \"variable\";\n                },\n                regex: \"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"\n            }, {\n                token: \"variable\",\n                regex: \"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"\n            }, {\n                token: function (first, second) {\n                    if (properties.indexOf(first.toLowerCase()) > -1) {\n                        return [\"support.type.property\", \"text\"];\n                    }\n                    else {\n                        return [\"support.type.unknownProperty\", \"text\"];\n                    }\n                },\n                regex: \"([a-z0-9-_]+)(\\\\s*:)\"\n            }, {\n                token: \"keyword\",\n                regex: \"&\" // special case - always treat as keyword\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z_][a-z0-9-_]*\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(LessHighlightRules, TextHighlightRules);\nexports.LessHighlightRules = LessHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/css_completions\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LessHighlightRules = require(\"./less_highlight_rules\").LessHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = LessHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(\"ruleset\", session, pos, prefix);\n    };\n    this.$id = \"ace/mode/less\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/less\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-liquid.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/behaviour/liquid\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar XmlBehaviour = require(\"./xml\").XmlBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar LiquidBehaviour = function () {\n    XmlBehaviour.call(this);\n    this.add(\"autoBraceTagClosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '}') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(token.value.trim() === '%' || is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/{%\\s*%/.test(session.getLine(position.row)))\n                return;\n            if (/^\\s*}/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!token.type != 'keyword.block') {\n                token = iterator.stepBackward();\n                if (token.value == '{%') {\n                    while (true) {\n                        token = iterator.stepForward();\n                        if (token.type === 'keyword.block') {\n                            break;\n                        }\n                        else if (token.value.trim() == '%') {\n                            token = null;\n                            break;\n                        }\n                    }\n                    break;\n                }\n            }\n            if (!token)\n                return;\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \"}\" + \"{% end\" + element + \" %}\",\n                selection: [1, 1]\n            };\n        }\n    });\n};\noop.inherits(LiquidBehaviour, Behaviour);\nexports.LiquidBehaviour = LiquidBehaviour;\n\n});\n\nace.define(\"ace/mode/liquid_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar LiquidHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var functions = (\n    \"date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|\" +\n        \"escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|\" +\n        \"truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split\");\n    var keywords = (\n    \"capture|endcapture|case|endcase|when|comment|endcomment|\" +\n        \"cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|\" +\n        \"style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow\");\n    var blocks = 'for|if|case|capture|unless|tablerow|marker|comment';\n    var builtinVariables = 'forloop|tablerowloop';\n    var definitions = (\"assign\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": builtinVariables,\n        \"keyword\": keywords,\n        \"keyword.block\": blocks,\n        \"support.function\": functions,\n        \"keyword.definition\": definitions\n    }, \"identifier\");\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift({\n            token: \"variable\",\n            regex: \"{%\",\n            push: \"liquid-start\"\n        }, {\n            token: \"variable\",\n            regex: \"{{\",\n            push: \"liquid-start\"\n        });\n    }\n    this.addRules({\n        \"liquid-start\": [{\n                token: \"variable\",\n                regex: \"}}\",\n                next: \"pop\"\n            }, {\n                token: \"variable\",\n                regex: \"%}\",\n                next: \"pop\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"/|\\\\*|\\\\-|\\\\+|=|!=|\\\\?\\\\:\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[\\({]/\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }]\n    });\n    this.normalizeRules();\n};\noop.inherits(LiquidHighlightRules, TextHighlightRules);\nexports.LiquidHighlightRules = LiquidHighlightRules;\n\n});\n\nace.define(\"ace/mode/liquid\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/html\",\"ace/mode/html_completions\",\"ace/mode/behaviour/liquid\",\"ace/mode/liquid_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HtmlMode = require(\"./html\").Mode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar LiquidBehaviour = require(\"./behaviour/liquid\").LiquidBehaviour;\nvar LiquidHighlightRules = require(\"./liquid_highlight_rules\").LiquidHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function () {\n    this.HighlightRules = LiquidHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new LiquidBehaviour();\n    this.$completer = new HtmlCompletions();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = new HtmlMode().voidElements;\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/liquid\";\n    this.snippetFileId = \"ace/snippets/liquid\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/liquid\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-lisp.js",
    "content": "ace.define(\"ace/mode/lisp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY Lisp.tmlanguage (UUID: 00D451C9-6B1D-11D9-8DFA-000D93589AF6) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LispHighlightRules = function () {\n    var keywordControl = \"case|do|let|loop|if|else|when\";\n    var keywordOperator = \"eq|neq|and|or\";\n    var constantLanguage = \"null|nil\";\n    var supportFunctions = \"cons|car|cdr|cond|lambda|format|setq|setf|quote|eval|append|list|listp|memberp|t|load|progn\";\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control\": keywordControl,\n        \"keyword.operator\": keywordOperator,\n        \"constant.language\": constantLanguage,\n        \"support.function\": supportFunctions\n    }, \"identifier\", true);\n    this.$rules =\n        {\n            \"start\": [\n                {\n                    token: \"comment\",\n                    regex: \";.*$\"\n                },\n                {\n                    token: [\"storage.type.function-type.lisp\", \"text\", \"entity.name.function.lisp\"],\n                    regex: \"(?:\\\\b(?:(defun|defmethod|defmacro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"\n                },\n                {\n                    token: [\"punctuation.definition.constant.character.lisp\", \"constant.character.lisp\"],\n                    regex: \"(#)((?:\\\\w|[\\\\\\\\+-=<>'\\\"&#])+)\"\n                },\n                {\n                    token: [\"punctuation.definition.variable.lisp\", \"variable.other.global.lisp\", \"punctuation.definition.variable.lisp\"],\n                    regex: \"(\\\\*)(\\\\S*)(\\\\*)\"\n                },\n                {\n                    token: \"constant.numeric\",\n                    regex: \"0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n                },\n                {\n                    token: \"constant.numeric\",\n                    regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n                },\n                {\n                    token: keywordMapper,\n                    regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                },\n                {\n                    token: \"string\",\n                    regex: '\"(?=.)',\n                    next: \"qqstring\"\n                }\n            ],\n            \"qqstring\": [\n                {\n                    token: \"constant.character.escape.lisp\",\n                    regex: \"\\\\\\\\.\"\n                },\n                {\n                    token: \"string\",\n                    regex: '[^\"\\\\\\\\]+'\n                }, {\n                    token: \"string\",\n                    regex: \"\\\\\\\\$\",\n                    next: \"qqstring\"\n                }, {\n                    token: \"string\",\n                    regex: '\"|$',\n                    next: \"start\"\n                }\n            ]\n        };\n};\noop.inherits(LispHighlightRules, TextHighlightRules);\nexports.LispHighlightRules = LispHighlightRules;\n\n});\n\nace.define(\"ace/mode/lisp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lisp_highlight_rules\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LispHighlightRules = require(\"./lisp_highlight_rules\").LispHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = LispHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \";\";\n    this.$id = \"ace/mode/lisp\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/lisp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-livescript.js",
    "content": "ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/livescript\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/text\"], function(require, exports, module){var identifier, LiveScriptMode, keywordend, stringfill;\nidentifier = '(?![\\\\d\\\\s])[$\\\\w\\\\xAA-\\\\uFFDC](?:(?!\\\\s)[$\\\\w\\\\xAA-\\\\uFFDC]|-[A-Za-z])*';\nexports.Mode = LiveScriptMode = (function (superclass) {\n    var indenter, prototype = extend$((import$(LiveScriptMode, superclass).displayName = 'LiveScriptMode', LiveScriptMode), superclass).prototype, constructor = LiveScriptMode;\n    function LiveScriptMode() {\n        var that;\n        this.$tokenizer = new (require('../tokenizer')).Tokenizer(LiveScriptMode.Rules);\n        if (that = require('../mode/matching_brace_outdent')) {\n            this.$outdent = new that.MatchingBraceOutdent;\n        }\n        this.$id = \"ace/mode/livescript\";\n        this.$behaviour = new (require(\"./behaviour/cstyle\").CstyleBehaviour)();\n    }\n    indenter = RegExp('(?:[({[=:]|[-~]>|\\\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\\\s*all)?|const|var|let|new|catch(?:\\\\s*' + identifier + ')?))\\\\s*$');\n    prototype.getNextLineIndent = function (state, line, tab) {\n        var indent, tokens;\n        indent = this.$getIndent(line);\n        tokens = this.$tokenizer.getLineTokens(line, state).tokens;\n        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment')) {\n            if (state === 'start' && indenter.test(line)) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    prototype.lineCommentStart = \"#\";\n    prototype.blockComment = { start: \"###\", end: \"###\" };\n    prototype.checkOutdent = function (state, line, input) {\n        var ref$;\n        return (ref$ = this.$outdent) != null ? ref$.checkOutdent(line, input) : void 8;\n    };\n    prototype.autoOutdent = function (state, doc, row) {\n        var ref$;\n        return (ref$ = this.$outdent) != null ? ref$.autoOutdent(doc, row) : void 8;\n    };\n    return LiveScriptMode;\n}(require('../mode/text').Mode));\nkeywordend = '(?![$\\\\w]|-[A-Za-z]|\\\\s*:(?![:=]))';\nstringfill = {\n    defaultToken: 'string'\n};\nLiveScriptMode.Rules = {\n    start: [\n        {\n            token: 'keyword',\n            regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend\n        }, {\n            token: 'constant.language',\n            regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend\n        }, {\n            token: 'invalid.illegal',\n            regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend\n        }, {\n            token: 'language.support.class',\n            regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend\n        }, {\n            token: 'language.support.function',\n            regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend\n        }, {\n            token: 'variable.language',\n            regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend\n        }, {\n            token: 'identifier',\n            regex: identifier + '\\\\s*:(?![:=])'\n        }, {\n            token: 'variable',\n            regex: identifier\n        }, {\n            token: 'keyword.operator',\n            regex: '(?:\\\\.{3}|\\\\s+\\\\?)'\n        }, {\n            token: 'keyword.variable',\n            regex: '(?:@+|::|\\\\.\\\\.)',\n            next: 'key'\n        }, {\n            token: 'keyword.operator',\n            regex: '\\\\.\\\\s*',\n            next: 'key'\n        }, {\n            token: 'string',\n            regex: '\\\\\\\\\\\\S[^\\\\s,;)}\\\\]]*'\n        }, {\n            token: 'string.doc',\n            regex: '\\'\\'\\'',\n            next: 'qdoc'\n        }, {\n            token: 'string.doc',\n            regex: '\"\"\"',\n            next: 'qqdoc'\n        }, {\n            token: 'string',\n            regex: '\\'',\n            next: 'qstring'\n        }, {\n            token: 'string',\n            regex: '\"',\n            next: 'qqstring'\n        }, {\n            token: 'string',\n            regex: '`',\n            next: 'js'\n        }, {\n            token: 'string',\n            regex: '<\\\\[',\n            next: 'words'\n        }, {\n            token: 'string.regex',\n            regex: '//',\n            next: 'heregex'\n        }, {\n            token: 'comment.doc',\n            regex: '/\\\\*',\n            next: 'comment'\n        }, {\n            token: 'comment',\n            regex: '#.*'\n        }, {\n            token: 'string.regex',\n            regex: '\\\\/(?:[^[\\\\/\\\\n\\\\\\\\]*(?:(?:\\\\\\\\.|\\\\[[^\\\\]\\\\n\\\\\\\\]*(?:\\\\\\\\.[^\\\\]\\\\n\\\\\\\\]*)*\\\\])[^[\\\\/\\\\n\\\\\\\\]*)*)\\\\/[gimy$]{0,4}',\n            next: 'key'\n        }, {\n            token: 'constant.numeric',\n            regex: '(?:0x[\\\\da-fA-F][\\\\da-fA-F_]*|(?:[2-9]|[12]\\\\d|3[0-6])r[\\\\da-zA-Z][\\\\da-zA-Z_]*|(?:\\\\d[\\\\d_]*(?:\\\\.\\\\d[\\\\d_]*)?|\\\\.\\\\d[\\\\d_]*)(?:e[+-]?\\\\d[\\\\d_]*)?[\\\\w$]*)'\n        }, {\n            token: 'lparen',\n            regex: '[({[]'\n        }, {\n            token: 'rparen',\n            regex: '[)}\\\\]]',\n            next: 'key'\n        }, {\n            token: 'keyword.operator',\n            regex: '[\\\\^!|&%+\\\\-]+'\n        }, {\n            token: 'text',\n            regex: '\\\\s+'\n        }\n    ],\n    heregex: [\n        {\n            token: 'string.regex',\n            regex: '.*?//[gimy$?]{0,4}',\n            next: 'start'\n        }, {\n            token: 'string.regex',\n            regex: '\\\\s*#{'\n        }, {\n            token: 'comment.regex',\n            regex: '\\\\s+(?:#.*)?'\n        }, {\n            defaultToken: 'string.regex'\n        }\n    ],\n    key: [\n        {\n            token: 'keyword.operator',\n            regex: '[.?@!]+'\n        }, {\n            token: 'identifier',\n            regex: identifier,\n            next: 'start'\n        }, {\n            token: 'text',\n            regex: '',\n            next: 'start'\n        }\n    ],\n    comment: [\n        {\n            token: 'comment.doc',\n            regex: '.*?\\\\*/',\n            next: 'start'\n        }, {\n            defaultToken: 'comment.doc'\n        }\n    ],\n    qdoc: [\n        {\n            token: 'string',\n            regex: \".*?'''\",\n            next: 'key'\n        }, stringfill\n    ],\n    qqdoc: [\n        {\n            token: 'string',\n            regex: '.*?\"\"\"',\n            next: 'key'\n        }, stringfill\n    ],\n    qstring: [\n        {\n            token: 'string',\n            regex: '[^\\\\\\\\\\']*(?:\\\\\\\\.[^\\\\\\\\\\']*)*\\'',\n            next: 'key'\n        }, stringfill\n    ],\n    qqstring: [\n        {\n            token: 'string',\n            regex: '[^\\\\\\\\\"]*(?:\\\\\\\\.[^\\\\\\\\\"]*)*\"',\n            next: 'key'\n        }, stringfill\n    ],\n    js: [\n        {\n            token: 'string',\n            regex: '[^\\\\\\\\`]*(?:\\\\\\\\.[^\\\\\\\\`]*)*`',\n            next: 'key'\n        }, stringfill\n    ],\n    words: [\n        {\n            token: 'string',\n            regex: '.*?\\\\]>',\n            next: 'key'\n        }, stringfill\n    ]\n};\nfunction extend$(sub, sup) {\n    function fun() { }\n    fun.prototype = (sub.superclass = sup).prototype;\n    (sub.prototype = new fun).constructor = sub;\n    if (typeof sup.extended == 'function')\n        sup.extended(sub);\n    return sub;\n}\nfunction import$(obj, src) {\n    var own = {}.hasOwnProperty;\n    for (var key in src)\n        if (own.call(src, key))\n            obj[key] = src[key];\n    return obj;\n}\n\n});                (function() {\n                    ace.require([\"ace/mode/livescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-logiql.js",
    "content": "ace.define(\"ace/mode/logiql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* THIS FILE WAS AUTOGENERATED FROM tool\\LogicBlox.tmbundle\\Syntaxes\\LogicBlox.tmLanguage (UUID: 59bf5022-e261-453f-b1cb-9f9fa0712413) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LogiQLHighlightRules = function () {\n    this.$rules = { start: [{ token: 'comment.block',\n                regex: '/\\\\*',\n                push: [{ token: 'comment.block', regex: '\\\\*/', next: 'pop' },\n                    { defaultToken: 'comment.block' }]\n            },\n            { token: 'comment.single',\n                regex: '//.*'\n            },\n            { token: 'constant.numeric',\n                regex: '\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?[fd]?'\n            },\n            { token: 'string',\n                regex: '\"',\n                push: [{ token: 'string', regex: '\"', next: 'pop' },\n                    { defaultToken: 'string' }]\n            },\n            { token: 'constant.language',\n                regex: '\\\\b(true|false)\\\\b'\n            },\n            { token: 'entity.name.type.logicblox',\n                regex: '`[a-zA-Z_:]+(\\\\d|\\\\a)*\\\\b'\n            },\n            { token: 'keyword.start', regex: '->', comment: 'Constraint' },\n            { token: 'keyword.start', regex: '-->', comment: 'Level 1 Constraint' },\n            { token: 'keyword.start', regex: '<-', comment: 'Rule' },\n            { token: 'keyword.start', regex: '<--', comment: 'Level 1 Rule' },\n            { token: 'keyword.end', regex: '\\\\.', comment: 'Terminator' },\n            { token: 'keyword.other', regex: '!', comment: 'Negation' },\n            { token: 'keyword.other', regex: ',', comment: 'Conjunction' },\n            { token: 'keyword.other', regex: ';', comment: 'Disjunction' },\n            { token: 'keyword.operator', regex: '<=|>=|!=|<|>', comment: 'Equality' },\n            { token: 'keyword.other', regex: '@', comment: 'Equality' },\n            { token: 'keyword.operator', regex: '\\\\+|-|\\\\*|/', comment: 'Arithmetic operations' },\n            { token: 'keyword', regex: '::', comment: 'Colon colon' },\n            { token: 'support.function',\n                regex: '\\\\b(agg\\\\s*<<)',\n                push: [{ include: '$self' },\n                    { token: 'support.function',\n                        regex: '>>',\n                        next: 'pop' }]\n            },\n            { token: 'storage.modifier',\n                regex: '\\\\b(lang:[\\\\w:]*)'\n            },\n            { token: ['storage.type', 'text'],\n                regex: '(export|sealed|clauses|block|alias|alias_all)(\\\\s*\\\\()(?=`)'\n            },\n            { token: 'entity.name',\n                regex: '[a-zA-Z_][a-zA-Z_0-9:]*(@prev|@init|@final)?(?=(\\\\(|\\\\[))'\n            },\n            { token: 'variable.parameter',\n                regex: '([a-zA-Z][a-zA-Z_0-9]*|_)\\\\s*(?=(,|\\\\.|<-|->|\\\\)|\\\\]|=))'\n            }] };\n    this.normalizeRules();\n};\noop.inherits(LogiQLHighlightRules, TextHighlightRules);\nexports.LogiQLHighlightRules = LogiQLHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/logiql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/logiql_highlight_rules\",\"ace/mode/folding/coffee\",\"ace/token_iterator\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LogiQLHighlightRules = require(\"./logiql_highlight_rules\").LogiQLHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function () {\n    this.HighlightRules = LogiQLHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (/comment|string/.test(endState))\n            return indent;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment.single\")\n            return indent;\n        var match = line.match();\n        if (/(-->|<--|<-|->|{)\\s*$/.test(line))\n            indent += tab;\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        if (this.$outdent.checkOutdent(line, input))\n            return true;\n        if (input !== \"\\n\" && input !== \"\\r\\n\")\n            return false;\n        if (!/^\\s+/.test(line))\n            return false;\n        return true;\n    };\n    this.autoOutdent = function (state, doc, row) {\n        if (this.$outdent.autoOutdent(doc, row))\n            return;\n        var prevLine = doc.getLine(row);\n        var match = prevLine.match(/^\\s+/);\n        var column = prevLine.lastIndexOf(\".\") + 1;\n        if (!match || !row || !column)\n            return 0;\n        var line = doc.getLine(row + 1);\n        var startRange = this.getMatching(doc, { row: row, column: column });\n        if (!startRange || startRange.start.row == row)\n            return 0;\n        column = match[0].length;\n        var indent = this.$getIndent(doc.getLine(startRange.start.row));\n        doc.replace(new Range(row + 1, 0, row + 1, column), indent);\n    };\n    this.getMatching = function (session, row, column) {\n        if (row == undefined)\n            row = session.selection.lead;\n        if (typeof row == \"object\") {\n            column = row.column;\n            row = row.row;\n        }\n        var startToken = session.getTokenAt(row, column);\n        var KW_START = \"keyword.start\", KW_END = \"keyword.end\";\n        var tok;\n        if (!startToken)\n            return;\n        if (startToken.type == KW_START) {\n            var it = new TokenIterator(session, row, column);\n            it.step = it.stepForward;\n        }\n        else if (startToken.type == KW_END) {\n            var it = new TokenIterator(session, row, column);\n            it.step = it.stepBackward;\n        }\n        else\n            return;\n        while (tok = it.step()) {\n            if (tok.type == KW_START || tok.type == KW_END)\n                break;\n        }\n        if (!tok || tok.type == startToken.type)\n            return;\n        var col = it.getCurrentTokenColumn();\n        var row = it.getCurrentTokenRow();\n        return new Range(row, col, row, col + tok.value.length);\n    };\n    this.$id = \"ace/mode/logiql\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/logiql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-logtalk.js",
    "content": "ace.define(\"ace/mode/logtalk_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* THIS FILE WAS AUTOGENERATED FROM Logtalk.tmLanguage (UUID: C11FA1F2-6EDB-11D9-8798-000A95DAA580) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LogtalkHighlightRules = function () {\n    this.$rules = { start: [{ token: 'punctuation.definition.comment.logtalk',\n                regex: '/\\\\*',\n                push: [{ token: 'punctuation.definition.comment.logtalk',\n                        regex: '\\\\*/',\n                        next: 'pop' },\n                    { defaultToken: 'comment.block.logtalk' }] },\n            { todo: 'fix grouping',\n                token: ['comment.line.percentage.logtalk',\n                    'punctuation.definition.comment.logtalk'],\n                regex: '%.*$\\\\n?' },\n            { todo: 'fix grouping',\n                token: ['storage.type.opening.logtalk',\n                    'punctuation.definition.storage.type.logtalk'],\n                regex: ':-\\\\s(?:object|protocol|category|module)(?=[(])' },\n            { todo: 'fix grouping',\n                token: ['storage.type.closing.logtalk',\n                    'punctuation.definition.storage.type.logtalk'],\n                regex: ':-\\\\send_(?:object|protocol|category)(?=[.])' },\n            { caseInsensitive: false,\n                token: 'storage.type.relations.logtalk',\n                regex: '\\\\b(?:complements|extends|i(?:nstantiates|mp(?:orts|lements))|specializes)(?=[(])' },\n            { caseInsensitive: false,\n                todo: 'fix grouping',\n                token: ['storage.modifier.others.logtalk',\n                    'punctuation.definition.storage.modifier.logtalk'],\n                regex: ':-\\\\s(?:e(?:lse|ndif)|built_in|dynamic|synchronized|threaded)(?=[.])' },\n            { caseInsensitive: false,\n                todo: 'fix grouping',\n                token: ['storage.modifier.others.logtalk',\n                    'punctuation.definition.storage.modifier.logtalk'],\n                regex: ':-\\\\s(?:c(?:alls|oinductive)|e(?:lif|n(?:coding|sure_loaded)|xport)|i(?:f|n(?:clude|itialization|fo))|reexport|set_(?:logtalk|prolog)_flag|uses)(?=[(])' },\n            { caseInsensitive: false,\n                todo: 'fix grouping',\n                token: ['storage.modifier.others.logtalk',\n                    'punctuation.definition.storage.modifier.logtalk'],\n                regex: ':-\\\\s(?:alias|info|d(?:ynamic|iscontiguous)|m(?:eta_(?:non_terminal|predicate)|ode|ultifile)|p(?:ublic|r(?:otected|ivate))|op|use(?:s|_module)|synchronized)(?=[(])' },\n            { token: 'keyword.operator.message-sending.logtalk',\n                regex: '(:|::|\\\\^\\\\^)' },\n            { token: 'keyword.operator.external-call.logtalk',\n                regex: '([{}])' },\n            { token: 'keyword.operator.mode.logtalk', regex: '(\\\\?|@)' },\n            { token: 'keyword.operator.comparison.term.logtalk',\n                regex: '(@=<|@<|@>|@>=|==|\\\\\\\\==)' },\n            { token: 'keyword.operator.comparison.arithmetic.logtalk',\n                regex: '(=<|<|>|>=|=:=|=\\\\\\\\=)' },\n            { token: 'keyword.operator.bitwise.logtalk',\n                regex: '(<<|>>|/\\\\\\\\|\\\\\\\\/|\\\\\\\\)' },\n            { token: 'keyword.operator.evaluable.logtalk',\n                regex: '\\\\b(?:e|pi|div|mod|rem)\\\\b(?![-!(^~])' },\n            { token: 'keyword.operator.evaluable.logtalk',\n                regex: '(\\\\*\\\\*|\\\\+|-|\\\\*|/|//)' },\n            { token: 'keyword.operator.misc.logtalk',\n                regex: '(:-|!|\\\\\\\\+|,|;|-->|->|=|\\\\=|\\\\.|=\\\\.\\\\.|\\\\^|\\\\bas\\\\b|\\\\bis\\\\b)' },\n            { caseInsensitive: false,\n                token: 'support.function.evaluable.logtalk',\n                regex: '\\\\b(a(bs|cos|sin|tan|tan2)|c(eiling|os)|div|exp|flo(at(_(integer|fractional)_part)?|or)|log|m(ax|in|od)|r(em|ound)|s(i(n|gn)|qrt)|t(an|runcate)|xor)(?=[(])' },\n            { token: 'support.function.control.logtalk',\n                regex: '\\\\b(?:true|fa(?:il|lse)|repeat|(?:instantiation|system)_error)\\\\b(?![-!(^~])' },\n            { token: 'support.function.control.logtalk',\n                regex: '\\\\b((?:type|domain|existence|permission|representation|evaluation|resource|syntax)_error)(?=[(])' },\n            { token: 'support.function.control.logtalk',\n                regex: '\\\\b(?:ca(?:ll|tch)|ignore|throw|once)(?=[(])' },\n            { token: 'support.function.chars-and-bytes-io.logtalk',\n                regex: '\\\\b(?:(?:get|p(?:eek|ut))_(c(?:har|ode)|byte)|nl)(?=[(])' },\n            { token: 'support.function.chars-and-bytes-io.logtalk',\n                regex: '\\\\bnl\\\\b' },\n            { token: 'support.function.atom-term-processing.logtalk',\n                regex: '\\\\b(?:atom_(?:length|c(?:hars|o(?:ncat|des)))|sub_atom|char_code|number_c(?:har|ode)s)(?=[(])' },\n            { caseInsensitive: false,\n                token: 'support.function.term-testing.logtalk',\n                regex: '\\\\b(?:var|atom(ic)?|integer|float|c(?:allable|ompound)|n(?:onvar|umber)|ground|acyclic_term)(?=[(])' },\n            { token: 'support.function.term-comparison.logtalk',\n                regex: '\\\\b(compare)(?=[(])' },\n            { token: 'support.function.term-io.logtalk',\n                regex: '\\\\b(?:read(_term)?|write(?:q|_(?:canonical|term))?|(current_)?(?:char_conversion|op))(?=[(])' },\n            { caseInsensitive: false,\n                token: 'support.function.term-creation-and-decomposition.logtalk',\n                regex: '\\\\b(arg|copy_term|functor|numbervars|term_variables)(?=[(])' },\n            { caseInsensitive: false,\n                token: 'support.function.term-unification.logtalk',\n                regex: '\\\\b(subsumes_term|unify_with_occurs_check)(?=[(])' },\n            { caseInsensitive: false,\n                token: 'support.function.stream-selection-and-control.logtalk',\n                regex: '\\\\b(?:(?:se|curren)t_(?:in|out)put|open|close|flush_output|stream_property|at_end_of_stream|set_stream_position)(?=[(])' },\n            { token: 'support.function.stream-selection-and-control.logtalk',\n                regex: '\\\\b(?:flush_output|at_end_of_stream)\\\\b' },\n            { token: 'support.function.prolog-flags.logtalk',\n                regex: '\\\\b((?:se|curren)t_prolog_flag)(?=[(])' },\n            { token: 'support.function.compiling-and-loading.logtalk',\n                regex: '\\\\b(logtalk_(?:compile|l(?:ibrary_path|oad|oad_context)|make(_target_action)?))(?=[(])' },\n            { token: 'support.function.compiling-and-loading.logtalk',\n                regex: '\\\\b(logtalk_make)\\\\b' },\n            { caseInsensitive: false,\n                token: 'support.function.event-handling.logtalk',\n                regex: '\\\\b(?:(?:abolish|define)_events|current_event)(?=[(])' },\n            { token: 'support.function.implementation-defined-hooks.logtalk',\n                regex: '\\\\b(?:(?:create|current|set)_logtalk_flag|halt)(?=[(])' },\n            { token: 'support.function.implementation-defined-hooks.logtalk',\n                regex: '\\\\b(halt)\\\\b' },\n            { token: 'support.function.sorting.logtalk',\n                regex: '\\\\b((key)?(sort))(?=[(])' },\n            { caseInsensitive: false,\n                token: 'support.function.entity-creation-and-abolishing.logtalk',\n                regex: '\\\\b((c(?:reate|urrent)|abolish)_(?:object|protocol|category))(?=[(])' },\n            { caseInsensitive: false,\n                token: 'support.function.reflection.logtalk',\n                regex: '\\\\b((object|protocol|category)_property|co(mplements_object|nforms_to_protocol)|extends_(object|protocol|category)|imp(orts_category|lements_protocol)|(instantiat|specializ)es_class)(?=[(])' },\n            { token: 'support.function.logtalk',\n                regex: '\\\\b((?:for|retract)all)(?=[(])' },\n            { caseInsensitive: false,\n                token: 'support.function.execution-context.logtalk',\n                regex: '\\\\b(?:context|parameter|se(?:lf|nder)|this)(?=[(])' },\n            { token: 'support.function.database.logtalk',\n                regex: '\\\\b(?:a(?:bolish|ssert(?:a|z))|clause|retract(all)?)(?=[(])' },\n            { token: 'support.function.all-solutions.logtalk',\n                regex: '\\\\b((?:bag|set)of|f(?:ind|or)all)(?=[(])' },\n            { caseInsensitive: false,\n                token: 'support.function.multi-threading.logtalk',\n                regex: '\\\\b(threaded(_(call|once|ignore|exit|peek|wait|notify))?)(?=[(])' },\n            { caseInsensitive: false,\n                token: 'support.function.engines.logtalk',\n                regex: '\\\\b(threaded_engine(_(create|destroy|self|next(?:_reified)?|yield|post|fetch))?)(?=[(])' },\n            { caseInsensitive: false,\n                token: 'support.function.reflection.logtalk',\n                regex: '\\\\b(?:current_predicate|predicate_property)(?=[(])' },\n            { token: 'support.function.event-handler.logtalk',\n                regex: '\\\\b(?:before|after)(?=[(])' },\n            { token: 'support.function.message-forwarding-handler.logtalk',\n                regex: '\\\\b(forward)(?=[(])' },\n            { token: 'support.function.grammar-rule.logtalk',\n                regex: '\\\\b(?:expand_(?:goal|term)|(?:goal|term)_expansion|phrase)(?=[(])' },\n            { token: 'punctuation.definition.string.begin.logtalk',\n                regex: '\\'',\n                push: [{ token: 'constant.character.escape.logtalk',\n                        regex: '\\\\\\\\([\\\\\\\\abfnrtv\"\\']|(x[a-fA-F0-9]+|[0-7]+)\\\\\\\\)' },\n                    { token: 'punctuation.definition.string.end.logtalk',\n                        regex: '\\'',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.single.logtalk' }] },\n            { token: 'punctuation.definition.string.begin.logtalk',\n                regex: '\"',\n                push: [{ token: 'constant.character.escape.logtalk', regex: '\\\\\\\\.' },\n                    { token: 'punctuation.definition.string.end.logtalk',\n                        regex: '\"',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.double.logtalk' }] },\n            { token: 'constant.numeric.logtalk',\n                regex: '\\\\b(0b[0-1]+|0o[0-7]+|0x[0-9a-fA-F]+)\\\\b' },\n            { token: 'constant.numeric.logtalk',\n                regex: '\\\\b(0\\'\\\\\\\\.|0\\'.|0\\'\\'|0\\'\")' },\n            { token: 'constant.numeric.logtalk',\n                regex: '\\\\b(\\\\d+\\\\.?\\\\d*((e|E)(\\\\+|-)?\\\\d+)?)\\\\b' },\n            { token: 'variable.other.logtalk',\n                regex: '\\\\b([A-Z_][A-Za-z0-9_]*)\\\\b' }] };\n    this.normalizeRules();\n};\noop.inherits(LogtalkHighlightRules, TextHighlightRules);\nexports.LogtalkHighlightRules = LogtalkHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/logtalk\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/logtalk_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar LogtalkHighlightRules = require(\"./logtalk_highlight_rules\").LogtalkHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = LogtalkHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"%\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/logtalk\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/logtalk\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-lsl.js",
    "content": "ace.define(\"ace/mode/lsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\noop.inherits(LSLHighlightRules, TextHighlightRules);\nfunction LSLHighlightRules() {\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.float.lsl\": \"DEG_TO_RAD|PI|PI_BY_TWO|RAD_TO_DEG|SQRT2|TWO_PI\",\n        \"constant.language.integer.lsl\": \"ACTIVE|AGENT|AGENT_ALWAYS_RUN|AGENT_ATTACHMENTS|AGENT_AUTOPILOT|AGENT_AWAY|AGENT_BUSY|AGENT_BY_LEGACY_NAME|AGENT_BY_USERNAME|AGENT_CROUCHING|AGENT_FLYING|AGENT_IN_AIR|AGENT_LIST_PARCEL|AGENT_LIST_PARCEL_OWNER|AGENT_LIST_REGION|AGENT_MOUSELOOK|AGENT_ON_OBJECT|AGENT_SCRIPTED|AGENT_SITTING|AGENT_TYPING|AGENT_WALKING|ALL_SIDES|ANIM_ON|ATTACH_AVATAR_CENTER|ATTACH_BACK|ATTACH_BELLY|ATTACH_CHEST|ATTACH_CHIN|ATTACH_HEAD|ATTACH_HUD_BOTTOM|ATTACH_HUD_BOTTOM_LEFT|ATTACH_HUD_BOTTOM_RIGHT|ATTACH_HUD_CENTER_1|ATTACH_HUD_CENTER_2|ATTACH_HUD_TOP_CENTER|ATTACH_HUD_TOP_LEFT|ATTACH_HUD_TOP_RIGHT|ATTACH_LEAR|ATTACH_LEFT_PEC|ATTACH_LEYE|ATTACH_LFOOT|ATTACH_LHAND|ATTACH_LHIP|ATTACH_LLARM|ATTACH_LLLEG|ATTACH_LSHOULDER|ATTACH_LUARM|ATTACH_LULEG|ATTACH_MOUTH|ATTACH_NECK|ATTACH_NOSE|ATTACH_PELVIS|ATTACH_REAR|ATTACH_REYE|ATTACH_RFOOT|ATTACH_RHAND|ATTACH_RHIP|ATTACH_RIGHT_PEC|ATTACH_RLARM|ATTACH_RLLEG|ATTACH_RSHOULDER|ATTACH_RUARM|ATTACH_RULEG|AVOID_CHARACTERS|AVOID_DYNAMIC_OBSTACLES|AVOID_NONE|CAMERA_ACTIVE|CAMERA_BEHINDNESS_ANGLE|CAMERA_BEHINDNESS_LAG|CAMERA_DISTANCE|CAMERA_FOCUS|CAMERA_FOCUS_LAG|CAMERA_FOCUS_LOCKED|CAMERA_FOCUS_OFFSET|CAMERA_FOCUS_THRESHOLD|CAMERA_PITCH|CAMERA_POSITION|CAMERA_POSITION_LAG|CAMERA_POSITION_LOCKED|CAMERA_POSITION_THRESHOLD|CHANGED_ALLOWED_DROP|CHANGED_COLOR|CHANGED_INVENTORY|CHANGED_LINK|CHANGED_MEDIA|CHANGED_OWNER|CHANGED_REGION|CHANGED_REGION_START|CHANGED_SCALE|CHANGED_SHAPE|CHANGED_TELEPORT|CHANGED_TEXTURE|CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES|CHARACTER_AVOIDANCE_MODE|CHARACTER_CMD_JUMP|CHARACTER_CMD_SMOOTH_STOP|CHARACTER_CMD_STOP|CHARACTER_DESIRED_SPEED|CHARACTER_DESIRED_TURN_SPEED|CHARACTER_LENGTH|CHARACTER_MAX_ACCEL|CHARACTER_MAX_DECEL|CHARACTER_MAX_SPEED|CHARACTER_MAX_TURN_RADIUS|CHARACTER_ORIENTATION|CHARACTER_RADIUS|CHARACTER_STAY_WITHIN_PARCEL|CHARACTER_TYPE|CHARACTER_TYPE_A|CHARACTER_TYPE_B|CHARACTER_TYPE_C|CHARACTER_TYPE_D|CHARACTER_TYPE_NONE|CLICK_ACTION_BUY|CLICK_ACTION_NONE|CLICK_ACTION_OPEN|CLICK_ACTION_OPEN_MEDIA|CLICK_ACTION_PAY|CLICK_ACTION_PLAY|CLICK_ACTION_SIT|CLICK_ACTION_TOUCH|CONTENT_TYPE_ATOM|CONTENT_TYPE_FORM|CONTENT_TYPE_HTML|CONTENT_TYPE_JSON|CONTENT_TYPE_LLSD|CONTENT_TYPE_RSS|CONTENT_TYPE_TEXT|CONTENT_TYPE_XHTML|CONTENT_TYPE_XML|CONTROL_BACK|CONTROL_DOWN|CONTROL_FWD|CONTROL_LBUTTON|CONTROL_LEFT|CONTROL_ML_LBUTTON|CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|DATA_BORN|DATA_NAME|DATA_ONLINE|DATA_PAYINFO|DATA_SIM_POS|DATA_SIM_RATING|DATA_SIM_STATUS|DEBUG_CHANNEL|DENSITY|ERR_GENERIC|ERR_MALFORMED_PARAMS|ERR_PARCEL_PERMISSIONS|ERR_RUNTIME_PERMISSIONS|ERR_THROTTLED|ESTATE_ACCESS_ALLOWED_AGENT_ADD|ESTATE_ACCESS_ALLOWED_AGENT_REMOVE|ESTATE_ACCESS_ALLOWED_GROUP_ADD|ESTATE_ACCESS_ALLOWED_GROUP_REMOVE|ESTATE_ACCESS_BANNED_AGENT_ADD|ESTATE_ACCESS_BANNED_AGENT_REMOVE|FALSE|FORCE_DIRECT_PATH|FRICTION|GCNP_RADIUS|GCNP_STATIC|GRAVITY_MULTIPLIER|HORIZONTAL|HTTP_BODY_MAXLENGTH|HTTP_BODY_TRUNCATED|HTTP_CUSTOM_HEADER|HTTP_METHOD|HTTP_MIMETYPE|HTTP_PRAGMA_NO_CACHE|HTTP_VERBOSE_THROTTLE|HTTP_VERIFY_CERT|INVENTORY_ALL|INVENTORY_ANIMATION|INVENTORY_BODYPART|INVENTORY_CLOTHING|INVENTORY_GESTURE|INVENTORY_LANDMARK|INVENTORY_NONE|INVENTORY_NOTECARD|INVENTORY_OBJECT|INVENTORY_SCRIPT|INVENTORY_SOUND|INVENTORY_TEXTURE|JSON_APPEND|KFM_CMD_PAUSE|KFM_CMD_PLAY|KFM_CMD_SET_MODE|KFM_CMD_STOP|KFM_COMMAND|KFM_DATA|KFM_FORWARD|KFM_LOOP|KFM_MODE|KFM_PING_PONG|KFM_REVERSE|KFM_ROTATION|KFM_TRANSLATION|LAND_LEVEL|LAND_LOWER|LAND_NOISE|LAND_RAISE|LAND_REVERT|LAND_SMOOTH|LINK_ALL_CHILDREN|LINK_ALL_OTHERS|LINK_ROOT|LINK_SET|LINK_THIS|LIST_STAT_GEOMETRIC_MEAN|LIST_STAT_MAX|LIST_STAT_MEAN|LIST_STAT_MEDIAN|LIST_STAT_MIN|LIST_STAT_NUM_COUNT|LIST_STAT_RANGE|LIST_STAT_STD_DEV|LIST_STAT_SUM|LIST_STAT_SUM_SQUARES|LOOP|MASK_BASE|MASK_EVERYONE|MASK_GROUP|MASK_NEXT|MASK_OWNER|OBJECT_ATTACHED_POINT|OBJECT_BODY_SHAPE_TYPE|OBJECT_CHARACTER_TIME|OBJECT_CLICK_ACTION|OBJECT_CREATOR|OBJECT_DESC|OBJECT_GROUP|OBJECT_HOVER_HEIGHT|OBJECT_LAST_OWNER_ID|OBJECT_NAME|OBJECT_OWNER|OBJECT_PATHFINDING_TYPE|OBJECT_PHANTOM|OBJECT_PHYSICS|OBJECT_PHYSICS_COST|OBJECT_POS|OBJECT_PRIM_EQUIVALENCE|OBJECT_RENDER_WEIGHT|OBJECT_RETURN_PARCEL|OBJECT_RETURN_PARCEL_OWNER|OBJECT_RETURN_REGION|OBJECT_ROOT|OBJECT_ROT|OBJECT_RUNNING_SCRIPT_COUNT|OBJECT_SCRIPT_MEMORY|OBJECT_SCRIPT_TIME|OBJECT_SERVER_COST|OBJECT_STREAMING_COST|OBJECT_TEMP_ON_REZ|OBJECT_TOTAL_SCRIPT_COUNT|OBJECT_UNKNOWN_DETAIL|OBJECT_VELOCITY|OPT_AVATAR|OPT_CHARACTER|OPT_EXCLUSION_VOLUME|OPT_LEGACY_LINKSET|OPT_MATERIAL_VOLUME|OPT_OTHER|OPT_STATIC_OBSTACLE|OPT_WALKABLE|PARCEL_COUNT_GROUP|PARCEL_COUNT_OTHER|PARCEL_COUNT_OWNER|PARCEL_COUNT_SELECTED|PARCEL_COUNT_TEMP|PARCEL_COUNT_TOTAL|PARCEL_DETAILS_AREA|PARCEL_DETAILS_DESC|PARCEL_DETAILS_GROUP|PARCEL_DETAILS_ID|PARCEL_DETAILS_NAME|PARCEL_DETAILS_OWNER|PARCEL_DETAILS_SEE_AVATARS|PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS|PARCEL_FLAG_ALLOW_CREATE_OBJECTS|PARCEL_FLAG_ALLOW_DAMAGE|PARCEL_FLAG_ALLOW_FLY|PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_GROUP_SCRIPTS|PARCEL_FLAG_ALLOW_LANDMARK|PARCEL_FLAG_ALLOW_SCRIPTS|PARCEL_FLAG_ALLOW_TERRAFORM|PARCEL_FLAG_LOCAL_SOUND_ONLY|PARCEL_FLAG_RESTRICT_PUSHOBJECT|PARCEL_FLAG_USE_ACCESS_GROUP|PARCEL_FLAG_USE_ACCESS_LIST|PARCEL_FLAG_USE_BAN_LIST|PARCEL_FLAG_USE_LAND_PASS_LIST|PARCEL_MEDIA_COMMAND_AGENT|PARCEL_MEDIA_COMMAND_AUTO_ALIGN|PARCEL_MEDIA_COMMAND_DESC|PARCEL_MEDIA_COMMAND_LOOP|PARCEL_MEDIA_COMMAND_LOOP_SET|PARCEL_MEDIA_COMMAND_PAUSE|PARCEL_MEDIA_COMMAND_PLAY|PARCEL_MEDIA_COMMAND_SIZE|PARCEL_MEDIA_COMMAND_STOP|PARCEL_MEDIA_COMMAND_TEXTURE|PARCEL_MEDIA_COMMAND_TIME|PARCEL_MEDIA_COMMAND_TYPE|PARCEL_MEDIA_COMMAND_UNLOAD|PARCEL_MEDIA_COMMAND_URL|PASS_ALWAYS|PASS_IF_NOT_HANDLED|PASS_NEVER|PASSIVE|PATROL_PAUSE_AT_WAYPOINTS|PAYMENT_INFO_ON_FILE|PAYMENT_INFO_USED|PAY_DEFAULT|PAY_HIDE|PERMISSION_ATTACH|PERMISSION_CHANGE_LINKS|PERMISSION_CONTROL_CAMERA|PERMISSION_DEBIT|PERMISSION_OVERRIDE_ANIMATIONS|PERMISSION_RETURN_OBJECTS|PERMISSION_SILENT_ESTATE_MANAGEMENT|PERMISSION_TAKE_CONTROLS|PERMISSION_TELEPORT|PERMISSION_TRACK_CAMERA|PERMISSION_TRIGGER_ANIMATION|PERM_ALL|PERM_COPY|PERM_MODIFY|PERM_MOVE|PERM_TRANSFER|PING_PONG|PRIM_ALPHA_MODE|PRIM_ALPHA_MODE_BLEND|PRIM_ALPHA_MODE_EMISSIVE|PRIM_ALPHA_MODE_MASK|PRIM_ALPHA_MODE_NONE|PRIM_BUMP_BARK|PRIM_BUMP_BLOBS|PRIM_BUMP_BRICKS|PRIM_BUMP_BRIGHT|PRIM_BUMP_CHECKER|PRIM_BUMP_CONCRETE|PRIM_BUMP_DARK|PRIM_BUMP_DISKS|PRIM_BUMP_GRAVEL|PRIM_BUMP_LARGETILE|PRIM_BUMP_NONE|PRIM_BUMP_SHINY|PRIM_BUMP_SIDING|PRIM_BUMP_STONE|PRIM_BUMP_STUCCO|PRIM_BUMP_SUCTION|PRIM_BUMP_TILE|PRIM_BUMP_WEAVE|PRIM_BUMP_WOOD|PRIM_COLOR|PRIM_DESC|PRIM_FLEXIBLE|PRIM_FULLBRIGHT|PRIM_GLOW|PRIM_HOLE_CIRCLE|PRIM_HOLE_DEFAULT|PRIM_HOLE_SQUARE|PRIM_HOLE_TRIANGLE|PRIM_LINK_TARGET|PRIM_MATERIAL|PRIM_MATERIAL_FLESH|PRIM_MATERIAL_GLASS|PRIM_MATERIAL_METAL|PRIM_MATERIAL_PLASTIC|PRIM_MATERIAL_RUBBER|PRIM_MATERIAL_STONE|PRIM_MATERIAL_WOOD|PRIM_MEDIA_ALT_IMAGE_ENABLE|PRIM_MEDIA_AUTO_LOOP|PRIM_MEDIA_AUTO_PLAY|PRIM_MEDIA_AUTO_SCALE|PRIM_MEDIA_AUTO_ZOOM|PRIM_MEDIA_CONTROLS|PRIM_MEDIA_CONTROLS_MINI|PRIM_MEDIA_CONTROLS_STANDARD|PRIM_MEDIA_CURRENT_URL|PRIM_MEDIA_FIRST_CLICK_INTERACT|PRIM_MEDIA_HEIGHT_PIXELS|PRIM_MEDIA_HOME_URL|PRIM_MEDIA_MAX_HEIGHT_PIXELS|PRIM_MEDIA_MAX_URL_LENGTH|PRIM_MEDIA_MAX_WHITELIST_COUNT|PRIM_MEDIA_MAX_WHITELIST_SIZE|PRIM_MEDIA_MAX_WIDTH_PIXELS|PRIM_MEDIA_PARAM_MAX|PRIM_MEDIA_PERMS_CONTROL|PRIM_MEDIA_PERMS_INTERACT|PRIM_MEDIA_PERM_ANYONE|PRIM_MEDIA_PERM_GROUP|PRIM_MEDIA_PERM_NONE|PRIM_MEDIA_PERM_OWNER|PRIM_MEDIA_WHITELIST|PRIM_MEDIA_WHITELIST_ENABLE|PRIM_MEDIA_WIDTH_PIXELS|PRIM_NAME|PRIM_NORMAL|PRIM_OMEGA|PRIM_PHANTOM|PRIM_PHYSICS|PRIM_PHYSICS_SHAPE_CONVEX|PRIM_PHYSICS_SHAPE_NONE|PRIM_PHYSICS_SHAPE_PRIM|PRIM_PHYSICS_SHAPE_TYPE|PRIM_POINT_LIGHT|PRIM_POSITION|PRIM_POS_LOCAL|PRIM_ROTATION|PRIM_ROT_LOCAL|PRIM_SCULPT_FLAG_INVERT|PRIM_SCULPT_FLAG_MIRROR|PRIM_SCULPT_TYPE_CYLINDER|PRIM_SCULPT_TYPE_MASK|PRIM_SCULPT_TYPE_PLANE|PRIM_SCULPT_TYPE_SPHERE|PRIM_SCULPT_TYPE_TORUS|PRIM_SHINY_HIGH|PRIM_SHINY_LOW|PRIM_SHINY_MEDIUM|PRIM_SHINY_NONE|PRIM_SIZE|PRIM_SLICE|PRIM_SPECULAR|PRIM_TEMP_ON_REZ|PRIM_TEXGEN|PRIM_TEXGEN_DEFAULT|PRIM_TEXGEN_PLANAR|PRIM_TEXT|PRIM_TEXTURE|PRIM_TYPE|PRIM_TYPE_BOX|PRIM_TYPE_CYLINDER|PRIM_TYPE_PRISM|PRIM_TYPE_RING|PRIM_TYPE_SCULPT|PRIM_TYPE_SPHERE|PRIM_TYPE_TORUS|PRIM_TYPE_TUBE|PROFILE_NONE|PROFILE_SCRIPT_MEMORY|PSYS_PART_BF_DEST_COLOR|PSYS_PART_BF_ONE|PSYS_PART_BF_ONE_MINUS_DEST_COLOR|PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA|PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR|PSYS_PART_BF_SOURCE_ALPHA|PSYS_PART_BF_SOURCE_COLOR|PSYS_PART_BF_ZERO|PSYS_PART_BLEND_FUNC_DEST|PSYS_PART_BLEND_FUNC_SOURCE|PSYS_PART_BOUNCE_MASK|PSYS_PART_EMISSIVE_MASK|PSYS_PART_END_ALPHA|PSYS_PART_END_COLOR|PSYS_PART_END_GLOW|PSYS_PART_END_SCALE|PSYS_PART_FLAGS|PSYS_PART_FOLLOW_SRC_MASK|PSYS_PART_FOLLOW_VELOCITY_MASK|PSYS_PART_INTERP_COLOR_MASK|PSYS_PART_INTERP_SCALE_MASK|PSYS_PART_MAX_AGE|PSYS_PART_RIBBON_MASK|PSYS_PART_START_ALPHA|PSYS_PART_START_COLOR|PSYS_PART_START_GLOW|PSYS_PART_START_SCALE|PSYS_PART_TARGET_LINEAR_MASK|PSYS_PART_TARGET_POS_MASK|PSYS_PART_WIND_MASK|PSYS_SRC_ACCEL|PSYS_SRC_ANGLE_BEGIN|PSYS_SRC_ANGLE_END|PSYS_SRC_BURST_PART_COUNT|PSYS_SRC_BURST_RADIUS|PSYS_SRC_BURST_RATE|PSYS_SRC_BURST_SPEED_MAX|PSYS_SRC_BURST_SPEED_MIN|PSYS_SRC_MAX_AGE|PSYS_SRC_OMEGA|PSYS_SRC_PATTERN|PSYS_SRC_PATTERN_ANGLE|PSYS_SRC_PATTERN_ANGLE_CONE|PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY|PSYS_SRC_PATTERN_DROP|PSYS_SRC_PATTERN_EXPLODE|PSYS_SRC_TARGET_KEY|PSYS_SRC_TEXTURE|PUBLIC_CHANNEL|PURSUIT_FUZZ_FACTOR|PURSUIT_GOAL_TOLERANCE|PURSUIT_INTERCEPT|PURSUIT_OFFSET|PU_EVADE_HIDDEN|PU_EVADE_SPOTTED|PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED|PU_FAILURE_INVALID_GOAL|PU_FAILURE_INVALID_START|PU_FAILURE_NO_NAVMESH|PU_FAILURE_NO_VALID_DESTINATION|PU_FAILURE_OTHER|PU_FAILURE_PARCEL_UNREACHABLE|PU_FAILURE_TARGET_GONE|PU_FAILURE_UNREACHABLE|PU_GOAL_REACHED|PU_SLOWDOWN_DISTANCE_REACHED|RCERR_CAST_TIME_EXCEEDED|RCERR_SIM_PERF_LOW|RCERR_UNKNOWN|RC_DATA_FLAGS|RC_DETECT_PHANTOM|RC_GET_LINK_NUM|RC_GET_NORMAL|RC_GET_ROOT_KEY|RC_MAX_HITS|RC_REJECT_AGENTS|RC_REJECT_LAND|RC_REJECT_NONPHYSICAL|RC_REJECT_PHYSICAL|RC_REJECT_TYPES|REGION_FLAG_ALLOW_DAMAGE|REGION_FLAG_ALLOW_DIRECT_TELEPORT|REGION_FLAG_BLOCK_FLY|REGION_FLAG_BLOCK_TERRAFORM|REGION_FLAG_DISABLE_COLLISIONS|REGION_FLAG_DISABLE_PHYSICS|REGION_FLAG_FIXED_SUN|REGION_FLAG_RESTRICT_PUSHOBJECT|REGION_FLAG_SANDBOX|REMOTE_DATA_CHANNEL|REMOTE_DATA_REPLY|REMOTE_DATA_REQUEST|REQUIRE_LINE_OF_SIGHT|RESTITUTION|REVERSE|ROTATE|SCALE|SCRIPTED|SIM_STAT_PCT_CHARS_STEPPED|SMOOTH|STATUS_BLOCK_GRAB|STATUS_BLOCK_GRAB_OBJECT|STATUS_BOUNDS_ERROR|STATUS_CAST_SHADOWS|STATUS_DIE_AT_EDGE|STATUS_INTERNAL_ERROR|STATUS_MALFORMED_PARAMS|STATUS_NOT_FOUND|STATUS_NOT_SUPPORTED|STATUS_OK|STATUS_PHANTOM|STATUS_PHYSICS|STATUS_RETURN_AT_EDGE|STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_Z|STATUS_SANDBOX|STATUS_TYPE_MISMATCH|STATUS_WHITELIST_FAILED|STRING_TRIM|STRING_TRIM_HEAD|STRING_TRIM_TAIL|TOUCH_INVALID_FACE|TRAVERSAL_TYPE|TRAVERSAL_TYPE_FAST|TRAVERSAL_TYPE_NONE|TRAVERSAL_TYPE_SLOW|TRUE|TYPE_FLOAT|TYPE_INTEGER|TYPE_INVALID|TYPE_KEY|TYPE_ROTATION|TYPE_STRING|TYPE_VECTOR|VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY|VEHICLE_ANGULAR_DEFLECTION_TIMESCALE|VEHICLE_ANGULAR_FRICTION_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DIRECTION|VEHICLE_ANGULAR_MOTOR_TIMESCALE|VEHICLE_BANKING_EFFICIENCY|VEHICLE_BANKING_MIX|VEHICLE_BANKING_TIMESCALE|VEHICLE_BUOYANCY|VEHICLE_FLAG_CAMERA_DECOUPLED|VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|VEHICLE_FLAG_HOVER_TERRAIN_ONLY|VEHICLE_FLAG_HOVER_UP_ONLY|VEHICLE_FLAG_HOVER_WATER_ONLY|VEHICLE_FLAG_LIMIT_MOTOR_UP|VEHICLE_FLAG_LIMIT_ROLL_ONLY|VEHICLE_FLAG_MOUSELOOK_BANK|VEHICLE_FLAG_MOUSELOOK_STEER|VEHICLE_FLAG_NO_DEFLECTION_UP|VEHICLE_HOVER_EFFICIENCY|VEHICLE_HOVER_HEIGHT|VEHICLE_HOVER_TIMESCALE|VEHICLE_LINEAR_DEFLECTION_EFFICIENCY|VEHICLE_LINEAR_DEFLECTION_TIMESCALE|VEHICLE_LINEAR_FRICTION_TIMESCALE|VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE|VEHICLE_LINEAR_MOTOR_DIRECTION|VEHICLE_LINEAR_MOTOR_OFFSET|VEHICLE_LINEAR_MOTOR_TIMESCALE|VEHICLE_REFERENCE_FRAME|VEHICLE_TYPE_AIRPLANE|VEHICLE_TYPE_BALLOON|VEHICLE_TYPE_BOAT|VEHICLE_TYPE_CAR|VEHICLE_TYPE_NONE|VEHICLE_TYPE_SLED|VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY|VEHICLE_VERTICAL_ATTRACTION_TIMESCALE|VERTICAL|WANDER_PAUSE_AT_WAYPOINTS|XP_ERROR_EXPERIENCES_DISABLED|XP_ERROR_EXPERIENCE_DISABLED|XP_ERROR_EXPERIENCE_SUSPENDED|XP_ERROR_INVALID_EXPERIENCE|XP_ERROR_INVALID_PARAMETERS|XP_ERROR_KEY_NOT_FOUND|XP_ERROR_MATURITY_EXCEEDED|XP_ERROR_NONE|XP_ERROR_NOT_FOUND|XP_ERROR_NOT_PERMITTED|XP_ERROR_NO_EXPERIENCE|XP_ERROR_QUOTA_EXCEEDED|XP_ERROR_RETRY_UPDATE|XP_ERROR_STORAGE_EXCEPTION|XP_ERROR_STORE_DISABLED|XP_ERROR_THROTTLED|XP_ERROR_UNKNOWN_ERROR\",\n        \"constant.language.integer.boolean.lsl\": \"FALSE|TRUE\",\n        \"constant.language.quaternion.lsl\": \"ZERO_ROTATION\",\n        \"constant.language.string.lsl\": \"EOF|JSON_ARRAY|JSON_DELETE|JSON_FALSE|JSON_INVALID|JSON_NULL|JSON_NUMBER|JSON_OBJECT|JSON_STRING|JSON_TRUE|NULL_KEY|TEXTURE_BLANK|TEXTURE_DEFAULT|TEXTURE_MEDIA|TEXTURE_PLYWOOD|TEXTURE_TRANSPARENT|URL_REQUEST_DENIED|URL_REQUEST_GRANTED\",\n        \"constant.language.vector.lsl\": \"TOUCH_INVALID_TEXCOORD|TOUCH_INVALID_VECTOR|ZERO_VECTOR\",\n        \"invalid.broken.lsl\": \"LAND_LARGE_BRUSH|LAND_MEDIUM_BRUSH|LAND_SMALL_BRUSH\",\n        \"invalid.deprecated.lsl\": \"ATTACH_LPEC|ATTACH_RPEC|DATA_RATING|OBJECT_ATTACHMENT_GEOMETRY_BYTES|OBJECT_ATTACHMENT_SURFACE_AREA|PRIM_CAST_SHADOWS|PRIM_MATERIAL_LIGHT|PRIM_TYPE_LEGACY|PSYS_SRC_INNERANGLE|PSYS_SRC_OUTERANGLE|VEHICLE_FLAG_NO_FLY_UP|llClearExperiencePermissions|llCloud|llGetExperienceList|llMakeExplosion|llMakeFire|llMakeFountain|llMakeSmoke|llRemoteDataSetRegion|llSound|llSoundPreload|llXorBase64Strings|llXorBase64StringsCorrect\",\n        \"invalid.illegal.lsl\": \"event\",\n        \"invalid.unimplemented.lsl\": \"CHARACTER_MAX_ANGULAR_ACCEL|CHARACTER_MAX_ANGULAR_SPEED|CHARACTER_TURN_SPEED_MULTIPLIER|PERMISSION_CHANGE_JOINTS|PERMISSION_CHANGE_PERMISSIONS|PERMISSION_EXPERIENCE|PERMISSION_RELEASE_OWNERSHIP|PERMISSION_REMAP_CONTROLS|PRIM_PHYSICS_MATERIAL|PSYS_SRC_OBJ_REL_MASK|llCollisionSprite|llPointAt|llRefreshPrimURL|llReleaseCamera|llRemoteLoadScript|llSetPrimURL|llStopPointAt|llTakeCamera\",\n        \"reserved.godmode.lsl\": \"llGodLikeRezObject|llSetInventoryPermMask|llSetObjectPermMask\",\n        \"reserved.log.lsl\": \"print\",\n        \"keyword.control.lsl\": \"do|else|for|if|jump|return|while\",\n        \"storage.type.lsl\": \"float|integer|key|list|quaternion|rotation|string|vector\",\n        \"support.function.lsl\": \"llAbs|llAcos|llAddToLandBanList|llAddToLandPassList|llAdjustSoundVolume|llAgentInExperience|llAllowInventoryDrop|llAngleBetween|llApplyImpulse|llApplyRotationalImpulse|llAsin|llAtan2|llAttachToAvatar|llAttachToAvatarTemp|llAvatarOnLinkSitTarget|llAvatarOnSitTarget|llAxes2Rot|llAxisAngle2Rot|llBase64ToInteger|llBase64ToString|llBreakAllLinks|llBreakLink|llCSV2List|llCastRay|llCeil|llClearCameraParams|llClearLinkMedia|llClearPrimMedia|llCloseRemoteDataChannel|llCollisionFilter|llCollisionSound|llCos|llCreateCharacter|llCreateKeyValue|llCreateLink|llDataSizeKeyValue|llDeleteCharacter|llDeleteKeyValue|llDeleteSubList|llDeleteSubString|llDetachFromAvatar|llDetectedGrab|llDetectedGroup|llDetectedKey|llDetectedLinkNumber|llDetectedName|llDetectedOwner|llDetectedPos|llDetectedRot|llDetectedTouchBinormal|llDetectedTouchFace|llDetectedTouchNormal|llDetectedTouchPos|llDetectedTouchST|llDetectedTouchUV|llDetectedType|llDetectedVel|llDialog|llDie|llDumpList2String|llEdgeOfWorld|llEjectFromLand|llEmail|llEscapeURL|llEuler2Rot|llEvade|llExecCharacterCmd|llFabs|llFleeFrom|llFloor|llForceMouselook|llFrand|llGenerateKey|llGetAccel|llGetAgentInfo|llGetAgentLanguage|llGetAgentList|llGetAgentSize|llGetAlpha|llGetAndResetTime|llGetAnimation|llGetAnimationList|llGetAnimationOverride|llGetAttached|llGetAttachedList|llGetBoundingBox|llGetCameraPos|llGetCameraRot|llGetCenterOfMass|llGetClosestNavPoint|llGetColor|llGetCreator|llGetDate|llGetDisplayName|llGetEnergy|llGetEnv|llGetExperienceDetails|llGetExperienceErrorMessage|llGetForce|llGetFreeMemory|llGetFreeURLs|llGetGMTclock|llGetGeometricCenter|llGetHTTPHeader|llGetInventoryCreator|llGetInventoryKey|llGetInventoryName|llGetInventoryNumber|llGetInventoryPermMask|llGetInventoryType|llGetKey|llGetLandOwnerAt|llGetLinkKey|llGetLinkMedia|llGetLinkName|llGetLinkNumber|llGetLinkNumberOfSides|llGetLinkPrimitiveParams|llGetListEntryType|llGetListLength|llGetLocalPos|llGetLocalRot|llGetMass|llGetMassMKS|llGetMaxScaleFactor|llGetMemoryLimit|llGetMinScaleFactor|llGetNextEmail|llGetNotecardLine|llGetNumberOfNotecardLines|llGetNumberOfPrims|llGetNumberOfSides|llGetObjectDesc|llGetObjectDetails|llGetObjectMass|llGetObjectName|llGetObjectPermMask|llGetObjectPrimCount|llGetOmega|llGetOwner|llGetOwnerKey|llGetParcelDetails|llGetParcelFlags|llGetParcelMaxPrims|llGetParcelMusicURL|llGetParcelPrimCount|llGetParcelPrimOwners|llGetPermissions|llGetPermissionsKey|llGetPhysicsMaterial|llGetPos|llGetPrimMediaParams|llGetPrimitiveParams|llGetRegionAgentCount|llGetRegionCorner|llGetRegionFPS|llGetRegionFlags|llGetRegionName|llGetRegionTimeDilation|llGetRootPosition|llGetRootRotation|llGetRot|llGetSPMaxMemory|llGetScale|llGetScriptName|llGetScriptState|llGetSimStats|llGetSimulatorHostname|llGetStartParameter|llGetStaticPath|llGetStatus|llGetSubString|llGetSunDirection|llGetTexture|llGetTextureOffset|llGetTextureRot|llGetTextureScale|llGetTime|llGetTimeOfDay|llGetTimestamp|llGetTorque|llGetUnixTime|llGetUsedMemory|llGetUsername|llGetVel|llGetWallclock|llGiveInventory|llGiveInventoryList|llGiveMoney|llGround|llGroundContour|llGroundNormal|llGroundRepel|llGroundSlope|llHTTPRequest|llHTTPResponse|llInsertString|llInstantMessage|llIntegerToBase64|llJson2List|llJsonGetValue|llJsonSetValue|llJsonValueType|llKey2Name|llKeyCountKeyValue|llKeysKeyValue|llLinkParticleSystem|llLinkSitTarget|llList2CSV|llList2Float|llList2Integer|llList2Json|llList2Key|llList2List|llList2ListStrided|llList2Rot|llList2String|llList2Vector|llListFindList|llListInsertList|llListRandomize|llListReplaceList|llListSort|llListStatistics|llListen|llListenControl|llListenRemove|llLoadURL|llLog|llLog10|llLookAt|llLoopSound|llLoopSoundMaster|llLoopSoundSlave|llMD5String|llManageEstateAccess|llMapDestination|llMessageLinked|llMinEventDelay|llModPow|llModifyLand|llMoveToTarget|llNavigateTo|llOffsetTexture|llOpenRemoteDataChannel|llOverMyLand|llOwnerSay|llParcelMediaCommandList|llParcelMediaQuery|llParseString2List|llParseStringKeepNulls|llParticleSystem|llPassCollisions|llPassTouches|llPatrolPoints|llPlaySound|llPlaySoundSlave|llPow|llPreloadSound|llPursue|llPushObject|llReadKeyValue|llRegionSay|llRegionSayTo|llReleaseControls|llReleaseURL|llRemoteDataReply|llRemoteLoadScriptPin|llRemoveFromLandBanList|llRemoveFromLandPassList|llRemoveInventory|llRemoveVehicleFlags|llRequestAgentData|llRequestDisplayName|llRequestExperiencePermissions|llRequestInventoryData|llRequestPermissions|llRequestSecureURL|llRequestSimulatorData|llRequestURL|llRequestUsername|llResetAnimationOverride|llResetLandBanList|llResetLandPassList|llResetOtherScript|llResetScript|llResetTime|llReturnObjectsByID|llReturnObjectsByOwner|llRezAtRoot|llRezObject|llRot2Angle|llRot2Axis|llRot2Euler|llRot2Fwd|llRot2Left|llRot2Up|llRotBetween|llRotLookAt|llRotTarget|llRotTargetRemove|llRotateTexture|llRound|llSHA1String|llSameGroup|llSay|llScaleByFactor|llScaleTexture|llScriptDanger|llScriptProfiler|llSendRemoteData|llSensor|llSensorRemove|llSensorRepeat|llSetAlpha|llSetAngularVelocity|llSetAnimationOverride|llSetBuoyancy|llSetCameraAtOffset|llSetCameraEyeOffset|llSetCameraParams|llSetClickAction|llSetColor|llSetContentType|llSetDamage|llSetForce|llSetForceAndTorque|llSetHoverHeight|llSetKeyframedMotion|llSetLinkAlpha|llSetLinkCamera|llSetLinkColor|llSetLinkMedia|llSetLinkPrimitiveParams|llSetLinkPrimitiveParamsFast|llSetLinkTexture|llSetLinkTextureAnim|llSetLocalRot|llSetMemoryLimit|llSetObjectDesc|llSetObjectName|llSetParcelMusicURL|llSetPayPrice|llSetPhysicsMaterial|llSetPos|llSetPrimMediaParams|llSetPrimitiveParams|llSetRegionPos|llSetRemoteScriptAccessPin|llSetRot|llSetScale|llSetScriptState|llSetSitText|llSetSoundQueueing|llSetSoundRadius|llSetStatus|llSetText|llSetTexture|llSetTextureAnim|llSetTimerEvent|llSetTorque|llSetTouchText|llSetVehicleFlags|llSetVehicleFloatParam|llSetVehicleRotationParam|llSetVehicleType|llSetVehicleVectorParam|llSetVelocity|llShout|llSin|llSitTarget|llSleep|llSqrt|llStartAnimation|llStopAnimation|llStopHover|llStopLookAt|llStopMoveToTarget|llStopSound|llStringLength|llStringToBase64|llStringTrim|llSubStringIndex|llTakeControls|llTan|llTarget|llTargetOmega|llTargetRemove|llTeleportAgent|llTeleportAgentGlobalCoords|llTeleportAgentHome|llTextBox|llToLower|llToUpper|llTransferLindenDollars|llTriggerSound|llTriggerSoundLimited|llUnSit|llUnescapeURL|llUpdateCharacter|llUpdateKeyValue|llVecDist|llVecMag|llVecNorm|llVolumeDetect|llWanderWithin|llWater|llWhisper|llWind|llXorBase64\",\n        \"support.function.event.lsl\": \"at_rot_target|at_target|attach|changed|collision|collision_end|collision_start|control|dataserver|email|experience_permissions|experience_permissions_denied|http_request|http_response|land_collision|land_collision_end|land_collision_start|link_message|listen|money|moving_end|moving_start|no_sensor|not_at_rot_target|not_at_target|object_rez|on_rez|path_update|remote_data|run_time_permissions|sensor|state_entry|state_exit|timer|touch|touch_end|touch_start|transaction_result\"\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.line.double-slash.lsl\",\n                regex: \"\\\\/\\\\/.*$\"\n            }, {\n                token: \"comment.block.begin.lsl\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string.quoted.double.lsl\",\n                start: '\"',\n                end: '\"',\n                next: [{\n                        token: \"constant.character.escape.lsl\",\n                        regex: /\\\\[tn\"\\\\]/\n                    }]\n            }, {\n                token: \"constant.numeric.lsl\",\n                regex: \"(0[xX][0-9a-fA-F]+|[+-]?[0-9]+(?:(?:\\\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?)?)\\\\b\"\n            }, {\n                token: \"entity.name.state.lsl\",\n                regex: \"\\\\b((state)\\\\s+[A-Za-z_]\\\\w*|default)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token: \"support.function.user-defined.lsl\",\n                regex: /\\b([a-zA-Z_]\\w*)(?=\\(.*?\\))/\n            }, {\n                token: \"keyword.operator.lsl\",\n                regex: \"\\\\+\\\\+|\\\\-\\\\-|<<|>>|&&?|\\\\|\\\\|?|\\\\^|~|[!%<>=*+\\\\-\\\\/]=?\"\n            }, {\n                token: \"invalid.illegal.keyword.operator.lsl\",\n                regex: \":=?\"\n            }, {\n                token: \"punctuation.operator.lsl\",\n                regex: \"\\\\,|\\\\;\"\n            }, {\n                token: \"paren.lparen.lsl\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen.lsl\",\n                regex: \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token: \"text.lsl\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.block.end.lsl\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment.block.lsl\"\n            }\n        ]\n    };\n    this.normalizeRules();\n}\nexports.LSLHighlightRules = LSLHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/lsl\",[\"require\",\"exports\",\"module\",\"ace/mode/lsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/text\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Rules = require(\"./lsl_highlight_rules\").LSLHighlightRules;\nvar Outdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar oop = require(\"../lib/oop\");\nvar Mode = function () {\n    this.HighlightRules = Rules;\n    this.$outdent = new Outdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = [\"//\"];\n    this.blockComment = {\n        start: \"/*\",\n        end: \"*/\"\n    };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type === \"comment.block.lsl\") {\n            return indent;\n        }\n        if (state === \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/lsl\";\n    this.snippetFileId = \"ace/snippets/lsl\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/lsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-lua.js",
    "content": "ace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LuaHighlightRules = function () {\n    var keywords = (\"break|do|else|elseif|end|for|function|if|in|local|repeat|\" +\n        \"return|then|until|while|or|and|not\");\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n    var functions = (\n    \"string|xpcall|package|tostring|print|os|unpack|require|\" +\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\" +\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\" +\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\" +\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\" +\n        \"load|error|loadfile|\" +\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\" +\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\" +\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\" +\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\" +\n        \"lines|write|close|flush|open|output|type|read|stderr|\" +\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\" +\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\" +\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\" +\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\" +\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\" +\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\" +\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\" +\n        \"status|wrap|create|running|\" +\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\" +\n        \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\");\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n    this.$rules = {\n        \"start\": [{\n                stateName: \"bracketedComment\",\n                onMatch: function (value, currentState, stack) {\n                    stack.unshift(this.next, value.length - 2, currentState);\n                    return \"comment\";\n                },\n                regex: /\\-\\-\\[=*\\[/,\n                next: [\n                    {\n                        onMatch: function (value, currentState, stack) {\n                            if (value.length == stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack.shift();\n                            }\n                            else {\n                                this.next = \"\";\n                            }\n                            return \"comment\";\n                        },\n                        regex: /\\]=*\\]/,\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }\n                ]\n            },\n            {\n                token: \"comment\",\n                regex: \"\\\\-\\\\-.*$\"\n            },\n            {\n                stateName: \"bracketedString\",\n                onMatch: function (value, currentState, stack) {\n                    stack.unshift(this.next, value.length, currentState);\n                    return \"string.start\";\n                },\n                regex: /\\[=*\\[/,\n                next: [\n                    {\n                        onMatch: function (value, currentState, stack) {\n                            if (value.length == stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack.shift();\n                            }\n                            else {\n                                this.next = \"\";\n                            }\n                            return \"string.end\";\n                        },\n                        regex: /\\]=*\\]/,\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"string\"\n                    }\n                ]\n            },\n            {\n                token: \"string\",\n                regex: '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n            }, {\n                token: \"string\",\n                regex: \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|\\\\w+\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(LuaHighlightRules, TextHighlightRules);\nexports.LuaHighlightRules = LuaHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/;\n    this.foldingStopMarker = /\\bend\\b|^\\s*}|\\]=*\\]/;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n        if (isStart && !isEnd) {\n            var match = line.match(this.foldingStartMarker);\n            if (match[1] == \"then\" && /\\belseif\\b/.test(line))\n                return;\n            if (match[1]) {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return \"start\";\n            }\n            else if (match[2]) {\n                var type = session.bgTokenizer.getState(row) || \"\";\n                if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                    return \"start\";\n            }\n            else {\n                return \"start\";\n            }\n        }\n        if (foldStyle != \"markbeginend\" || !isEnd || isStart && isEnd)\n            return \"\";\n        var match = line.match(this.foldingStopMarker);\n        if (match[0] === \"end\") {\n            if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                return \"end\";\n        }\n        else if (match[0][0] === \"]\") {\n            var type = session.bgTokenizer.getState(row - 1) || \"\";\n            if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                return \"end\";\n        }\n        else\n            return \"end\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.luaBlock(session, row, match.index + 1);\n            if (match[2])\n                return session.getCommentFoldRange(row, match.index + 1);\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[0] === \"end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return this.luaBlock(session, row, match.index + 1);\n            }\n            if (match[0][0] === \"]\")\n                return session.getCommentFoldRange(row, match.index + 1);\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n    this.luaBlock = function (session, row, column, tokenRange) {\n        var stream = new TokenIterator(session, row, column);\n        var indentKeywords = {\n            \"function\": 1,\n            \"do\": 1,\n            \"then\": 1,\n            \"elseif\": -1,\n            \"end\": -1,\n            \"repeat\": 1,\n            \"until\": -1\n        };\n        var token = stream.getCurrentToken();\n        if (!token || token.type != \"keyword\")\n            return;\n        var val = token.value;\n        var stack = [val];\n        var dir = indentKeywords[val];\n        if (!dir)\n            return;\n        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;\n        var startRow = row;\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        while (token = stream.step()) {\n            if (token.type !== \"keyword\")\n                continue;\n            var level = dir * indentKeywords[token.value];\n            if (level > 0) {\n                stack.unshift(token.value);\n            }\n            else if (level <= 0) {\n                stack.shift();\n                if (!stack.length && token.value != \"elseif\")\n                    break;\n                if (level === 0)\n                    stack.unshift(token.value);\n            }\n        }\n        if (!token)\n            return null;\n        if (tokenRange)\n            return stream.getCurrentTokenRange();\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1)\n            return new Range(row, session.getLine(row).length, startRow, startColumn);\n        else\n            return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lua_highlight_rules\",\"ace/mode/folding/lua\",\"ace/range\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar LuaFoldMode = require(\"./folding/lua\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar Mode = function () {\n    this.HighlightRules = LuaHighlightRules;\n    this.foldingRules = new LuaFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = { start: \"--[[\", end: \"--]]\" };\n    var indentKeywords = {\n        \"function\": 1,\n        \"then\": 1,\n        \"do\": 1,\n        \"else\": 1,\n        \"elseif\": 1,\n        \"repeat\": 1,\n        \"end\": -1,\n        \"until\": -1\n    };\n    var outdentKeywords = [\n        \"else\",\n        \"elseif\",\n        \"end\",\n        \"until\"\n    ];\n    function getNetIndentLevel(tokens) {\n        var level = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (token.type == \"keyword\") {\n                if (token.value in indentKeywords) {\n                    level += indentKeywords[token.value];\n                }\n            }\n            else if (token.type == \"paren.lparen\") {\n                level += token.value.length;\n            }\n            else if (token.type == \"paren.rparen\") {\n                level -= token.value.length;\n            }\n        }\n        if (level < 0) {\n            return -1;\n        }\n        else if (level > 0) {\n            return 1;\n        }\n        else {\n            return 0;\n        }\n    }\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var level = 0;\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (state == \"start\") {\n            level = getNetIndentLevel(tokens);\n        }\n        if (level > 0) {\n            return indent + tab;\n        }\n        else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {\n            if (!this.checkOutdent(state, line, \"\\n\")) {\n                return indent.substr(0, indent.length - tab.length);\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        if (input != \"\\n\" && input != \"\\r\" && input != \"\\r\\n\")\n            return false;\n        if (line.match(/^\\s*[\\)\\}\\]]$/))\n            return true;\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        if (!tokens || !tokens.length)\n            return false;\n        return (tokens[0].type == \"keyword\" && outdentKeywords.indexOf(tokens[0].value) != -1);\n    };\n    this.getMatching = function (session, row, column) {\n        if (row == undefined) {\n            var pos = session.selection.lead;\n            column = pos.column;\n            row = pos.row;\n        }\n        var startToken = session.getTokenAt(row, column);\n        if (startToken && startToken.value in indentKeywords)\n            return this.foldingRules.luaBlock(session, row, column, true);\n    };\n    this.autoOutdent = function (state, session, row) {\n        var line = session.getLine(row);\n        var column = line.match(/^\\s*/)[0].length;\n        if (!column || !row)\n            return;\n        var startRange = this.getMatching(session, row, column + 1);\n        if (!startRange || startRange.start.row == row)\n            return;\n        var indent = this.$getIndent(session.getLine(startRange.start.row));\n        if (indent.length != column) {\n            session.replace(new Range(row, 0, row, column), indent);\n            session.outdentRows(new Range(row + 1, 0, row + 1, 0));\n        }\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/lua_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/lua\";\n    this.snippetFileId = \"ace/snippets/lua\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/lua\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-luapage.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LuaHighlightRules = function () {\n    var keywords = (\"break|do|else|elseif|end|for|function|if|in|local|repeat|\" +\n        \"return|then|until|while|or|and|not\");\n    var builtinConstants = (\"true|false|nil|_G|_VERSION\");\n    var functions = (\n    \"string|xpcall|package|tostring|print|os|unpack|require|\" +\n        \"getfenv|setmetatable|next|assert|tonumber|io|rawequal|\" +\n        \"collectgarbage|getmetatable|module|rawset|math|debug|\" +\n        \"pcall|table|newproxy|type|coroutine|_G|select|gcinfo|\" +\n        \"pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|\" +\n        \"load|error|loadfile|\" +\n        \"sub|upper|len|gfind|rep|find|match|char|dump|gmatch|\" +\n        \"reverse|byte|format|gsub|lower|preload|loadlib|loaded|\" +\n        \"loaders|cpath|config|path|seeall|exit|setlocale|date|\" +\n        \"getenv|difftime|remove|time|clock|tmpname|rename|execute|\" +\n        \"lines|write|close|flush|open|output|type|read|stderr|\" +\n        \"stdin|input|stdout|popen|tmpfile|log|max|acos|huge|\" +\n        \"ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|\" +\n        \"frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|\" +\n        \"atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|\" +\n        \"gethook|setmetatable|setlocal|traceback|setfenv|getinfo|\" +\n        \"setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|\" +\n        \"foreachi|maxn|foreach|concat|sort|remove|resume|yield|\" +\n        \"status|wrap|create|running|\" +\n        \"__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|\" +\n        \"__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\");\n    var stdLibaries = (\"string|package|os|io|math|debug|table|coroutine\");\n    var deprecatedIn5152 = (\"setn|foreach|foreachi|gcinfo|log10|maxn\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"support.function\": functions,\n        \"keyword.deprecated\": deprecatedIn5152,\n        \"constant.library\": stdLibaries,\n        \"constant.language\": builtinConstants,\n        \"variable.language\": \"self\"\n    }, \"identifier\");\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + hexInteger + \")\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var floatNumber = \"(?:\" + pointFloat + \")\";\n    this.$rules = {\n        \"start\": [{\n                stateName: \"bracketedComment\",\n                onMatch: function (value, currentState, stack) {\n                    stack.unshift(this.next, value.length - 2, currentState);\n                    return \"comment\";\n                },\n                regex: /\\-\\-\\[=*\\[/,\n                next: [\n                    {\n                        onMatch: function (value, currentState, stack) {\n                            if (value.length == stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack.shift();\n                            }\n                            else {\n                                this.next = \"\";\n                            }\n                            return \"comment\";\n                        },\n                        regex: /\\]=*\\]/,\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }\n                ]\n            },\n            {\n                token: \"comment\",\n                regex: \"\\\\-\\\\-.*$\"\n            },\n            {\n                stateName: \"bracketedString\",\n                onMatch: function (value, currentState, stack) {\n                    stack.unshift(this.next, value.length, currentState);\n                    return \"string.start\";\n                },\n                regex: /\\[=*\\[/,\n                next: [\n                    {\n                        onMatch: function (value, currentState, stack) {\n                            if (value.length == stack[1]) {\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack.shift();\n                            }\n                            else {\n                                this.next = \"\";\n                            }\n                            return \"string.end\";\n                        },\n                        regex: /\\]=*\\]/,\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"string\"\n                    }\n                ]\n            },\n            {\n                token: \"string\",\n                regex: '\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'\n            }, {\n                token: \"string\",\n                regex: \"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|\\\\w+\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(LuaHighlightRules, TextHighlightRules);\nexports.LuaHighlightRules = LuaHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/;\n    this.foldingStopMarker = /\\bend\\b|^\\s*}|\\]=*\\]/;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n        if (isStart && !isEnd) {\n            var match = line.match(this.foldingStartMarker);\n            if (match[1] == \"then\" && /\\belseif\\b/.test(line))\n                return;\n            if (match[1]) {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return \"start\";\n            }\n            else if (match[2]) {\n                var type = session.bgTokenizer.getState(row) || \"\";\n                if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                    return \"start\";\n            }\n            else {\n                return \"start\";\n            }\n        }\n        if (foldStyle != \"markbeginend\" || !isEnd || isStart && isEnd)\n            return \"\";\n        var match = line.match(this.foldingStopMarker);\n        if (match[0] === \"end\") {\n            if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                return \"end\";\n        }\n        else if (match[0][0] === \"]\") {\n            var type = session.bgTokenizer.getState(row - 1) || \"\";\n            if (type[0] == \"bracketedComment\" || type[0] == \"bracketedString\")\n                return \"end\";\n        }\n        else\n            return \"end\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1])\n                return this.luaBlock(session, row, match.index + 1);\n            if (match[2])\n                return session.getCommentFoldRange(row, match.index + 1);\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[0] === \"end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return this.luaBlock(session, row, match.index + 1);\n            }\n            if (match[0][0] === \"]\")\n                return session.getCommentFoldRange(row, match.index + 1);\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n    this.luaBlock = function (session, row, column, tokenRange) {\n        var stream = new TokenIterator(session, row, column);\n        var indentKeywords = {\n            \"function\": 1,\n            \"do\": 1,\n            \"then\": 1,\n            \"elseif\": -1,\n            \"end\": -1,\n            \"repeat\": 1,\n            \"until\": -1\n        };\n        var token = stream.getCurrentToken();\n        if (!token || token.type != \"keyword\")\n            return;\n        var val = token.value;\n        var stack = [val];\n        var dir = indentKeywords[val];\n        if (!dir)\n            return;\n        var startColumn = dir === -1 ? stream.getCurrentTokenColumn() : session.getLine(row).length;\n        var startRow = row;\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        while (token = stream.step()) {\n            if (token.type !== \"keyword\")\n                continue;\n            var level = dir * indentKeywords[token.value];\n            if (level > 0) {\n                stack.unshift(token.value);\n            }\n            else if (level <= 0) {\n                stack.shift();\n                if (!stack.length && token.value != \"elseif\")\n                    break;\n                if (level === 0)\n                    stack.unshift(token.value);\n            }\n        }\n        if (!token)\n            return null;\n        if (tokenRange)\n            return stream.getCurrentTokenRange();\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1)\n            return new Range(row, session.getLine(row).length, startRow, startColumn);\n        else\n            return new Range(startRow, startColumn, row, stream.getCurrentTokenColumn());\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lua_highlight_rules\",\"ace/mode/folding/lua\",\"ace/range\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar LuaFoldMode = require(\"./folding/lua\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar Mode = function () {\n    this.HighlightRules = LuaHighlightRules;\n    this.foldingRules = new LuaFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = { start: \"--[[\", end: \"--]]\" };\n    var indentKeywords = {\n        \"function\": 1,\n        \"then\": 1,\n        \"do\": 1,\n        \"else\": 1,\n        \"elseif\": 1,\n        \"repeat\": 1,\n        \"end\": -1,\n        \"until\": -1\n    };\n    var outdentKeywords = [\n        \"else\",\n        \"elseif\",\n        \"end\",\n        \"until\"\n    ];\n    function getNetIndentLevel(tokens) {\n        var level = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (token.type == \"keyword\") {\n                if (token.value in indentKeywords) {\n                    level += indentKeywords[token.value];\n                }\n            }\n            else if (token.type == \"paren.lparen\") {\n                level += token.value.length;\n            }\n            else if (token.type == \"paren.rparen\") {\n                level -= token.value.length;\n            }\n        }\n        if (level < 0) {\n            return -1;\n        }\n        else if (level > 0) {\n            return 1;\n        }\n        else {\n            return 0;\n        }\n    }\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var level = 0;\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (state == \"start\") {\n            level = getNetIndentLevel(tokens);\n        }\n        if (level > 0) {\n            return indent + tab;\n        }\n        else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {\n            if (!this.checkOutdent(state, line, \"\\n\")) {\n                return indent.substr(0, indent.length - tab.length);\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        if (input != \"\\n\" && input != \"\\r\" && input != \"\\r\\n\")\n            return false;\n        if (line.match(/^\\s*[\\)\\}\\]]$/))\n            return true;\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        if (!tokens || !tokens.length)\n            return false;\n        return (tokens[0].type == \"keyword\" && outdentKeywords.indexOf(tokens[0].value) != -1);\n    };\n    this.getMatching = function (session, row, column) {\n        if (row == undefined) {\n            var pos = session.selection.lead;\n            column = pos.column;\n            row = pos.row;\n        }\n        var startToken = session.getTokenAt(row, column);\n        if (startToken && startToken.value in indentKeywords)\n            return this.foldingRules.luaBlock(session, row, column, true);\n    };\n    this.autoOutdent = function (state, session, row) {\n        var line = session.getLine(row);\n        var column = line.match(/^\\s*/)[0].length;\n        if (!column || !row)\n            return;\n        var startRange = this.getMatching(session, row, column + 1);\n        if (!startRange || startRange.start.row == row)\n            return;\n        var indent = this.$getIndent(session.getLine(startRange.start.row));\n        if (indent.length != column) {\n            session.replace(new Range(row, 0, row, column), indent);\n            session.outdentRows(new Range(row + 1, 0, row + 1, 0));\n        }\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/lua_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/lua\";\n    this.snippetFileId = \"ace/snippets/lua\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/luapage_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/lua_highlight_rules\"], function(require, exports, module){// LuaPage implements the LuaPage markup as described by the Kepler Project's CGILua\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar LuaHighlightRules = require(\"./lua_highlight_rules\").LuaHighlightRules;\nvar LuaPageHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var startRules = [\n        {\n            token: \"keyword\",\n            regex: \"<\\\\%\\\\=?\",\n            push: \"lua-start\"\n        }, {\n            token: \"keyword\",\n            regex: \"<\\\\?lua\\\\=?\",\n            push: \"lua-start\"\n        }\n    ];\n    var endRules = [\n        {\n            token: \"keyword\",\n            regex: \"\\\\%>\",\n            next: \"pop\"\n        }, {\n            token: \"keyword\",\n            regex: \"\\\\?>\",\n            next: \"pop\"\n        }\n    ];\n    this.embedRules(LuaHighlightRules, \"lua-\", endRules, [\"start\"]);\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n    this.normalizeRules();\n};\noop.inherits(LuaPageHighlightRules, HtmlHighlightRules);\nexports.LuaPageHighlightRules = LuaPageHighlightRules;\n\n});\n\nace.define(\"ace/mode/luapage\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/lua\",\"ace/mode/luapage_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar LuaMode = require(\"./lua\").Mode;\nvar LuaPageHighlightRules = require(\"./luapage_highlight_rules\").LuaPageHighlightRules;\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = LuaPageHighlightRules;\n    this.createModeDelegates({\n        \"lua-\": LuaMode\n    });\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.$id = \"ace/mode/luapage\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/luapage\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-lucene.js",
    "content": "ace.define(\"ace/mode/lucene_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LuceneHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\[\\-+&|!(){}\\[\\]^\"~*?:\\\\]/\n            }, {\n                token: \"constant.character.negation\",\n                regex: \"\\\\-\"\n            }, {\n                token: \"constant.character.interro\",\n                regex: \"\\\\?\"\n            }, {\n                token: \"constant.character.required\",\n                regex: \"\\\\+\"\n            }, {\n                token: \"constant.character.asterisk\",\n                regex: \"\\\\*\"\n            }, {\n                token: 'constant.character.proximity',\n                regex: '~(?:0\\\\.[0-9]+|[0-9]+)?'\n            }, {\n                token: 'keyword.operator',\n                regex: '(AND|OR|NOT|TO)\\\\b'\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\(\\\\{\\\\[]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)\\\\}\\\\]]\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /[><=^]/\n            }, {\n                token: \"constant.numeric\",\n                regex: /\\d[\\d.-]*/\n            }, {\n                token: \"string\",\n                regex: /\"(?:\\\\\"|[^\"])*\"/\n            }, {\n                token: \"keyword\",\n                regex: /(?:\\\\.|[^\\s\\-+&|!(){}\\[\\]^\"~*?:\\\\])+:/,\n                next: \"maybeRegex\"\n            }, {\n                token: \"term\",\n                regex: /\\w+/\n            }, {\n                token: \"text\",\n                regex: /\\s+/\n            }\n        ],\n        \"maybeRegex\": [{\n                token: \"text\",\n                regex: /\\s+/\n            }, {\n                token: \"string.regexp.start\",\n                regex: \"/\",\n                next: \"regex\"\n            }, {\n                regex: \"\",\n                next: \"start\"\n            }],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp.end\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"<\\d+-\\d+>|[~&@]\"\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ]\n    };\n};\noop.inherits(LuceneHighlightRules, TextHighlightRules);\nexports.LuceneHighlightRules = LuceneHighlightRules;\n\n});\n\nace.define(\"ace/mode/lucene\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lucene_highlight_rules\"], function(require, exports, module){'use strict';\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuceneHighlightRules = require(\"./lucene_highlight_rules\").LuceneHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = LuceneHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/lucene\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/lucene\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-makefile.js",
    "content": "ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar reservedKeywords = exports.reservedKeywords = ('!|{|}|case|do|done|elif|else|' +\n    'esac|fi|for|if|in|then|until|while|' +\n    '&|;|export|local|read|typeset|unset|' +\n    'elif|select|set|function|declare|readonly');\nvar languageConstructs = exports.languageConstructs = ('[|]|alias|bg|bind|break|builtin|' +\n    'cd|command|compgen|complete|continue|' +\n    'dirs|disown|echo|enable|eval|exec|' +\n    'exit|fc|fg|getopts|hash|help|history|' +\n    'jobs|kill|let|logout|popd|printf|pushd|' +\n    'pwd|return|set|shift|shopt|source|' +\n    'suspend|test|times|trap|type|ulimit|' +\n    'umask|unalias|wait');\nvar ShHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n    this.$rules = {\n        \"start\": [{\n                token: \"constant\",\n                regex: /\\\\./\n            }, {\n                token: [\"text\", \"comment\"],\n                regex: /(^|\\s)(#.*)$/\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\(?:[$`\"\\\\]|$)/\n                    }, {\n                        include: \"variables\"\n                    }, {\n                        token: \"keyword.operator\",\n                        regex: /`/ // TODO highlight `\n                    }, {\n                        token: \"string.end\",\n                        regex: '\"',\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string\",\n                regex: \"\\\\$'\",\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n                    }, {\n                        token: \"string\",\n                        regex: \"'\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                regex: \"<<<\",\n                token: \"keyword.operator\"\n            }, {\n                stateName: \"heredoc\",\n                regex: \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n                onMatch: function (value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[4]);\n                    return [\n                        { type: \"constant\", value: tokens[1] },\n                        { type: \"text\", value: tokens[2] },\n                        { type: \"string\", value: tokens[3] },\n                        { type: \"support.class\", value: tokens[4] },\n                        { type: \"string\", value: tokens[5] }\n                    ];\n                },\n                rules: {\n                    heredoc: [{\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }],\n                    indentedHeredoc: [{\n                            token: \"string\",\n                            regex: \"^\\t+\"\n                        }, {\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }]\n                }\n            }, {\n                regex: \"$\",\n                token: \"empty\",\n                next: function (currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n                token: [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n                regex: /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n            }, {\n                token: \"variable.language\",\n                regex: builtinVariable\n            }, {\n                token: \"variable\",\n                regex: variable\n            }, {\n                include: \"variables\"\n            }, {\n                token: \"support.function\",\n                regex: func\n            }, {\n                token: \"support.function\",\n                regex: fileDescriptor\n            }, {\n                token: \"string\",\n                start: \"'\", end: \"'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \";\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)\\\\}]\",\n                next: \"pop\"\n            }],\n        variables: [{\n                token: \"variable\",\n                regex: /(\\$)(\\w+)/\n            }, {\n                token: [\"variable\", \"paren.lparen\"],\n                regex: /(\\$)(\\()/,\n                push: \"start\"\n            }, {\n                token: [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n                regex: /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n                push: \"start\"\n            }, {\n                token: \"variable\",\n                regex: /\\$[*@#?\\-$!0_]/\n            }, {\n                token: [\"variable\", \"paren.lparen\"],\n                regex: /(\\$)(\\{)/,\n                push: \"start\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(ShHighlightRules, TextHighlightRules);\nexports.ShHighlightRules = ShHighlightRules;\n\n});\n\nace.define(\"ace/mode/makefile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/sh_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ShHighlightFile = require(\"./sh_highlight_rules\");\nvar MakefileHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": ShHighlightFile.reservedKeywords,\n        \"support.function.builtin\": ShHighlightFile.languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"string\");\n    this.$rules =\n        {\n            \"start\": [\n                {\n                    token: \"string.interpolated.backtick.makefile\",\n                    regex: \"`\",\n                    next: \"shell-start\"\n                },\n                {\n                    token: \"punctuation.definition.comment.makefile\",\n                    regex: /#(?=.)/,\n                    next: \"comment\"\n                },\n                {\n                    token: [\"keyword.control.makefile\"],\n                    regex: \"^(?:\\\\s*\\\\b)(\\\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\\\b)\"\n                },\n                {\n                    token: [\"entity.name.function.makefile\", \"text\"],\n                    regex: \"^([^\\\\t ]+(?:\\\\s[^\\\\t ]+)*:)(\\\\s*.*)\"\n                }\n            ],\n            \"comment\": [\n                {\n                    token: \"punctuation.definition.comment.makefile\",\n                    regex: /.+\\\\/\n                },\n                {\n                    token: \"punctuation.definition.comment.makefile\",\n                    regex: \".+\",\n                    next: \"start\"\n                }\n            ],\n            \"shell-start\": [\n                {\n                    token: keywordMapper,\n                    regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n                },\n                {\n                    token: \"string\",\n                    regex: \"\\\\w+\"\n                },\n                {\n                    token: \"string.interpolated.backtick.makefile\",\n                    regex: \"`\",\n                    next: \"start\"\n                }\n            ]\n        };\n};\noop.inherits(MakefileHighlightRules, TextHighlightRules);\nexports.MakefileHighlightRules = MakefileHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/makefile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/makefile_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MakefileHighlightRules = require(\"./makefile_highlight_rules\").MakefileHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = MakefileHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.$indentWithTabs = true;\n    this.$id = \"ace/mode/makefile\";\n    this.snippetFileId = \"ace/snippets/makefile\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/makefile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-markdown.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar Mode = function () {\n    this.HighlightRules = XmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.foldingRules = new XmlFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.voidElements = lang.arrayToMap([]);\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar modes = require(\"../config\").$modes;\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar escaped = function (ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\nvar MarkdownHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var codeBlockStartRule = {\n        token: \"support.function\",\n        regex: /^\\s*(```+[^`]*|~~~+[^~]*)$/,\n        onMatch: function (value, state, stack, line) {\n            var m = value.match(/^(\\s*)([`~]+)(.*)/);\n            var language = /[\\w-]+|$/.exec(m[3])[0];\n            if (!modes[language])\n                language = \"\";\n            stack.unshift(\"githubblock\", [], [m[1], m[2], language], state);\n            return this.token;\n        },\n        next: \"githubblock\"\n    };\n    var codeBlockRules = [{\n            token: \"support.function\",\n            regex: \".*\",\n            onMatch: function (value, state, stack, line) {\n                var embedState = stack[1];\n                var indent = stack[2][0];\n                var endMarker = stack[2][1];\n                var language = stack[2][2];\n                var m = /^(\\s*)(`+|~+)\\s*$/.exec(value);\n                if (m && m[1].length < indent.length + 3\n                    && m[2].length >= endMarker.length && m[2][0] == endMarker[0]) {\n                    stack.splice(0, 3);\n                    this.next = stack.shift();\n                    return this.token;\n                }\n                this.next = \"\";\n                if (language && modes[language]) {\n                    var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));\n                    stack[1] = data.state;\n                    return data.tokens;\n                }\n                return this.token;\n            }\n        }];\n    this.$rules[\"start\"].unshift({\n        token: \"empty_line\",\n        regex: '^$',\n        next: \"allowBlock\"\n    }, {\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, {\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token: function (value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex: /^#{1,6}(?=\\s|$)/,\n        next: \"header\"\n    }, codeBlockStartRule, {\n        token: \"string.blockquote\",\n        regex: \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next: \"blockquote\"\n    }, {\n        token: \"constant\",\n        regex: \"^ {0,3}(?:(?:\\\\* ?){3,}|(?:\\\\- ?){3,}|(?:\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, {\n        token: \"markup.list\",\n        regex: \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next: \"listblock-start\"\n    }, {\n        include: \"basic\"\n    });\n    this.addRules({\n        \"basic\": [{\n                token: \"constant.language.escape\",\n                regex: /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n            }, {\n                token: \"support.function\",\n                regex: \"(`+)(.*?[^`])(\\\\1)\"\n            }, {\n                token: [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n                regex: \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n            }, {\n                token: [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n                regex: \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\" + escaped(\"]\") + \")(\\\\])\"\n            }, {\n                token: [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n                regex: \"(\\\\!?\\\\[)(\" + // [\n                    escaped(\"]\") + // link text or alt text\n                    \")(\\\\]\\\\()\" + // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' + // href or image\n                    '(\\\\s*\"' + escaped('\"') + '\"\\\\s*)?' + // \"title\"\n                    \"(\\\\))\" // )\n            }, {\n                token: \"string.strong\",\n                regex: \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n            }, {\n                token: \"string.emphasis\",\n                regex: \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n            }, {\n                token: [\"text\", \"url\", \"text\"],\n                regex: \"(<)(\" +\n                    \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\" +\n                    \"|\" +\n                    \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\" +\n                    \")(>)\"\n            }],\n        \"allowBlock\": [\n            { token: \"support.function\", regex: \"^ {4}.+\", next: \"allowBlock\" },\n            { token: \"empty_line\", regex: '^$', next: \"allowBlock\" },\n            { token: \"empty\", regex: \"\", next: \"start\" }\n        ],\n        \"header\": [{\n                regex: \"$\",\n                next: \"start\"\n            }, {\n                include: \"basic\"\n            }, {\n                defaultToken: \"heading\"\n            }],\n        \"listblock-start\": [{\n                token: \"support.variable\",\n                regex: /(?:\\[[ x]\\])?/,\n                next: \"listblock\"\n            }],\n        \"listblock\": [{\n                token: \"empty_line\",\n                regex: \"^$\",\n                next: \"start\"\n            }, {\n                token: \"markup.list\",\n                regex: \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n                next: \"listblock-start\"\n            }, {\n                include: \"basic\", noEscape: true\n            },\n            codeBlockStartRule,\n            {\n                defaultToken: \"list\" //do not use markup.list to allow stling leading `*` differntly\n            }],\n        \"blockquote\": [{\n                token: \"empty_line\",\n                regex: \"^\\\\s*$\",\n                next: \"start\"\n            }, {\n                token: \"string.blockquote\",\n                regex: \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n                next: \"blockquote\"\n            }, {\n                include: \"basic\", noEscape: true\n            }, {\n                defaultToken: \"string.blockquote\"\n            }],\n        \"githubblock\": codeBlockRules\n    });\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /^(?:[=-]+\\s*$|#{1,6} |`{3})/;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (!this.foldingStartMarker.test(line))\n            return \"\";\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) == \"start\")\n                return \"end\";\n            return \"start\";\n        }\n        return \"start\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (!line.match(this.foldingStartMarker))\n            return;\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) !== \"start\") {\n                while (++row < maxRow) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(startRow, startColumn, row, 0);\n            }\n            else {\n                while (row-- > 0) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(row, line.length, startRow, 0);\n            }\n        }\n        var token;\n        function isHeading(row) {\n            token = session.getTokens(row)[0];\n            return token && token.type.lastIndexOf(heading, 0) === 0;\n        }\n        var heading = \"markup.heading\";\n        function getLevel() {\n            var ch = token.value[0];\n            if (ch == \"=\")\n                return 6;\n            if (ch == \"-\")\n                return 5;\n            return 7 - token.value.search(/[^#]|$/);\n        }\n        if (isHeading(row)) {\n            var startHeadingLevel = getLevel();\n            while (++row < maxRow) {\n                if (!isHeading(row))\n                    continue;\n                var level = getLevel();\n                if (level >= startHeadingLevel)\n                    break;\n            }\n            endRow = row - (!token || [\"=\", \"-\"].indexOf(token.value[0]) == -1 ? 1 : 2);\n            if (endRow > startRow) {\n                while (endRow > startRow && /^\\s*$/.test(session.getLine(endRow)))\n                    endRow--;\n            }\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar reservedKeywords = exports.reservedKeywords = ('!|{|}|case|do|done|elif|else|' +\n    'esac|fi|for|if|in|then|until|while|' +\n    '&|;|export|local|read|typeset|unset|' +\n    'elif|select|set|function|declare|readonly');\nvar languageConstructs = exports.languageConstructs = ('[|]|alias|bg|bind|break|builtin|' +\n    'cd|command|compgen|complete|continue|' +\n    'dirs|disown|echo|enable|eval|exec|' +\n    'exit|fc|fg|getopts|hash|help|history|' +\n    'jobs|kill|let|logout|popd|printf|pushd|' +\n    'pwd|return|set|shift|shopt|source|' +\n    'suspend|test|times|trap|type|ulimit|' +\n    'umask|unalias|wait');\nvar ShHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n    this.$rules = {\n        \"start\": [{\n                token: \"constant\",\n                regex: /\\\\./\n            }, {\n                token: [\"text\", \"comment\"],\n                regex: /(^|\\s)(#.*)$/\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\(?:[$`\"\\\\]|$)/\n                    }, {\n                        include: \"variables\"\n                    }, {\n                        token: \"keyword.operator\",\n                        regex: /`/ // TODO highlight `\n                    }, {\n                        token: \"string.end\",\n                        regex: '\"',\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string\",\n                regex: \"\\\\$'\",\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n                    }, {\n                        token: \"string\",\n                        regex: \"'\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                regex: \"<<<\",\n                token: \"keyword.operator\"\n            }, {\n                stateName: \"heredoc\",\n                regex: \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n                onMatch: function (value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[4]);\n                    return [\n                        { type: \"constant\", value: tokens[1] },\n                        { type: \"text\", value: tokens[2] },\n                        { type: \"string\", value: tokens[3] },\n                        { type: \"support.class\", value: tokens[4] },\n                        { type: \"string\", value: tokens[5] }\n                    ];\n                },\n                rules: {\n                    heredoc: [{\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }],\n                    indentedHeredoc: [{\n                            token: \"string\",\n                            regex: \"^\\t+\"\n                        }, {\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }]\n                }\n            }, {\n                regex: \"$\",\n                token: \"empty\",\n                next: function (currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n                token: [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n                regex: /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n            }, {\n                token: \"variable.language\",\n                regex: builtinVariable\n            }, {\n                token: \"variable\",\n                regex: variable\n            }, {\n                include: \"variables\"\n            }, {\n                token: \"support.function\",\n                regex: func\n            }, {\n                token: \"support.function\",\n                regex: fileDescriptor\n            }, {\n                token: \"string\",\n                start: \"'\", end: \"'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \";\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)\\\\}]\",\n                next: \"pop\"\n            }],\n        variables: [{\n                token: \"variable\",\n                regex: /(\\$)(\\w+)/\n            }, {\n                token: [\"variable\", \"paren.lparen\"],\n                regex: /(\\$)(\\()/,\n                push: \"start\"\n            }, {\n                token: [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n                regex: /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n                push: \"start\"\n            }, {\n                token: \"variable\",\n                regex: /\\$[*@#?\\-$!0_]/\n            }, {\n                token: [\"variable\", \"paren.lparen\"],\n                regex: /(\\$)(\\{)/,\n                push: \"start\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(ShHighlightRules, TextHighlightRules);\nexports.ShHighlightRules = ShHighlightRules;\n\n});\n\nace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar Mode = function () {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n    this.checkOutdent = function (state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n        if (!last)\n            return false;\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length - tab.length, row, indent.length));\n    };\n    this.$id = \"ace/mode/sh\";\n    this.snippetFileId = \"ace/snippets/sh\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\",\"ace/mode/javascript\",\"ace/mode/html\",\"ace/mode/sh\",\"ace/mode/sh\",\"ace/mode/xml\",\"ace/mode/css\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar XmlMode = require(\"./xml\").Mode;\nvar HtmlMode = require(\"./html\").Mode;\nvar MarkdownHighlightRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar MarkdownFoldMode = require(\"./folding/markdown\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = MarkdownHighlightRules;\n    this.createModeDelegates({\n        javascript: require(\"./javascript\").Mode,\n        html: require(\"./html\").Mode,\n        bash: require(\"./sh\").Mode,\n        sh: require(\"./sh\").Mode,\n        xml: require(\"./xml\").Mode,\n        css: require(\"./css\").Mode\n    });\n    this.foldingRules = new MarkdownFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.type = \"text\";\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.$quotes = { '\"': '\"', \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        if (state == \"listblock\") {\n            var match = /^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(line);\n            if (!match)\n                return \"\";\n            var marker = match[2];\n            if (!marker)\n                marker = parseInt(match[3], 10) + 1 + \".\";\n            return match[1] + marker + match[4];\n        }\n        else {\n            return this.$getIndent(line);\n        }\n    };\n    this.$id = \"ace/mode/markdown\";\n    this.snippetFileId = \"ace/snippets/markdown\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/markdown\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-mask.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar modes = require(\"../config\").$modes;\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar escaped = function (ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\nvar MarkdownHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var codeBlockStartRule = {\n        token: \"support.function\",\n        regex: /^\\s*(```+[^`]*|~~~+[^~]*)$/,\n        onMatch: function (value, state, stack, line) {\n            var m = value.match(/^(\\s*)([`~]+)(.*)/);\n            var language = /[\\w-]+|$/.exec(m[3])[0];\n            if (!modes[language])\n                language = \"\";\n            stack.unshift(\"githubblock\", [], [m[1], m[2], language], state);\n            return this.token;\n        },\n        next: \"githubblock\"\n    };\n    var codeBlockRules = [{\n            token: \"support.function\",\n            regex: \".*\",\n            onMatch: function (value, state, stack, line) {\n                var embedState = stack[1];\n                var indent = stack[2][0];\n                var endMarker = stack[2][1];\n                var language = stack[2][2];\n                var m = /^(\\s*)(`+|~+)\\s*$/.exec(value);\n                if (m && m[1].length < indent.length + 3\n                    && m[2].length >= endMarker.length && m[2][0] == endMarker[0]) {\n                    stack.splice(0, 3);\n                    this.next = stack.shift();\n                    return this.token;\n                }\n                this.next = \"\";\n                if (language && modes[language]) {\n                    var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));\n                    stack[1] = data.state;\n                    return data.tokens;\n                }\n                return this.token;\n            }\n        }];\n    this.$rules[\"start\"].unshift({\n        token: \"empty_line\",\n        regex: '^$',\n        next: \"allowBlock\"\n    }, {\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, {\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token: function (value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex: /^#{1,6}(?=\\s|$)/,\n        next: \"header\"\n    }, codeBlockStartRule, {\n        token: \"string.blockquote\",\n        regex: \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next: \"blockquote\"\n    }, {\n        token: \"constant\",\n        regex: \"^ {0,3}(?:(?:\\\\* ?){3,}|(?:\\\\- ?){3,}|(?:\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, {\n        token: \"markup.list\",\n        regex: \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next: \"listblock-start\"\n    }, {\n        include: \"basic\"\n    });\n    this.addRules({\n        \"basic\": [{\n                token: \"constant.language.escape\",\n                regex: /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n            }, {\n                token: \"support.function\",\n                regex: \"(`+)(.*?[^`])(\\\\1)\"\n            }, {\n                token: [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n                regex: \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n            }, {\n                token: [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n                regex: \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\" + escaped(\"]\") + \")(\\\\])\"\n            }, {\n                token: [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n                regex: \"(\\\\!?\\\\[)(\" + // [\n                    escaped(\"]\") + // link text or alt text\n                    \")(\\\\]\\\\()\" + // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' + // href or image\n                    '(\\\\s*\"' + escaped('\"') + '\"\\\\s*)?' + // \"title\"\n                    \"(\\\\))\" // )\n            }, {\n                token: \"string.strong\",\n                regex: \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n            }, {\n                token: \"string.emphasis\",\n                regex: \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n            }, {\n                token: [\"text\", \"url\", \"text\"],\n                regex: \"(<)(\" +\n                    \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\" +\n                    \"|\" +\n                    \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\" +\n                    \")(>)\"\n            }],\n        \"allowBlock\": [\n            { token: \"support.function\", regex: \"^ {4}.+\", next: \"allowBlock\" },\n            { token: \"empty_line\", regex: '^$', next: \"allowBlock\" },\n            { token: \"empty\", regex: \"\", next: \"start\" }\n        ],\n        \"header\": [{\n                regex: \"$\",\n                next: \"start\"\n            }, {\n                include: \"basic\"\n            }, {\n                defaultToken: \"heading\"\n            }],\n        \"listblock-start\": [{\n                token: \"support.variable\",\n                regex: /(?:\\[[ x]\\])?/,\n                next: \"listblock\"\n            }],\n        \"listblock\": [{\n                token: \"empty_line\",\n                regex: \"^$\",\n                next: \"start\"\n            }, {\n                token: \"markup.list\",\n                regex: \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n                next: \"listblock-start\"\n            }, {\n                include: \"basic\", noEscape: true\n            },\n            codeBlockStartRule,\n            {\n                defaultToken: \"list\" //do not use markup.list to allow stling leading `*` differntly\n            }],\n        \"blockquote\": [{\n                token: \"empty_line\",\n                regex: \"^\\\\s*$\",\n                next: \"start\"\n            }, {\n                token: \"string.blockquote\",\n                regex: \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n                next: \"blockquote\"\n            }, {\n                include: \"basic\", noEscape: true\n            }, {\n                defaultToken: \"string.blockquote\"\n            }],\n        \"githubblock\": codeBlockRules\n    });\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n\n});\n\nace.define(\"ace/mode/mask_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/css_highlight_rules\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){\"use strict\";\nexports.MaskHighlightRules = MaskHighlightRules;\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JSRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar CssRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MDRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar HTMLRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar token_TAG = \"keyword.support.constant.language\", token_COMPO = \"support.function.markup.bold\", token_KEYWORD = \"keyword\", token_LANG = \"constant.language\", token_UTIL = \"keyword.control.markup.italic\", token_ATTR = \"support.variable.class\", token_PUNKT = \"keyword.operator\", token_ITALIC = \"markup.italic\", token_BOLD = \"markup.bold\", token_LPARE = \"paren.lparen\", token_RPARE = \"paren.rparen\";\nvar const_FUNCTIONS, const_KEYWORDS, const_CONST, const_TAGS;\n(function () {\n    const_FUNCTIONS = lang.arrayToMap((\"log\").split(\"|\"));\n    const_CONST = lang.arrayToMap((\":dualbind|:bind|:import|slot|event|style|html|markdown|md\").split(\"|\"));\n    const_KEYWORDS = lang.arrayToMap((\"debugger|define|var|if|each|for|of|else|switch|case|with|visible|+if|+each|+for|+switch|+with|+visible|include|import\").split(\"|\"));\n    const_TAGS = lang.arrayToMap((\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" +\n        \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" +\n        \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" +\n        \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" +\n        \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" +\n        \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" +\n        \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" +\n        \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" +\n        \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\"));\n}());\nfunction MaskHighlightRules() {\n    this.$rules = {\n        \"start\": [\n            Token(\"comment\", \"\\\\/\\\\/.*$\"),\n            Token(\"comment\", \"\\\\/\\\\*\", [\n                Token(\"comment\", \".*?\\\\*\\\\/\", \"start\"),\n                Token(\"comment\", \".+\")\n            ]),\n            Blocks.string(\"'''\"),\n            Blocks.string('\"\"\"'),\n            Blocks.string('\"'),\n            Blocks.string(\"'\"),\n            Blocks.syntax(/(markdown|md)\\b/, \"md-multiline\", \"multiline\"),\n            Blocks.syntax(/html\\b/, \"html-multiline\", \"multiline\"),\n            Blocks.syntax(/(slot|event)\\b/, \"js-block\", \"block\"),\n            Blocks.syntax(/style\\b/, \"css-block\", \"block\"),\n            Blocks.syntax(/var\\b/, \"js-statement\", \"attr\"),\n            Blocks.tag(),\n            Token(token_LPARE, \"[[({>]\"),\n            Token(token_RPARE, \"[\\\\])};]\", \"start\"),\n            {\n                caseInsensitive: true\n            }\n        ]\n    };\n    var rules = this;\n    addJavaScript(\"interpolation\", /\\]/, token_RPARE + \".\" + token_ITALIC);\n    addJavaScript(\"statement\", /\\)|}|;/);\n    addJavaScript(\"block\", /\\}/);\n    addCss();\n    addMarkdown();\n    addHtml();\n    function addJavaScript(name, escape, closeType) {\n        var prfx = \"js-\" + name + \"-\", rootTokens = name === \"block\" ? [\"start\"] : [\"start\", \"no_regex\"];\n        add(JSRules, prfx, escape, rootTokens, closeType);\n    }\n    function addCss() {\n        add(CssRules, \"css-block-\", /\\}/);\n    }\n    function addMarkdown() {\n        add(MDRules, \"md-multiline-\", /(\"\"\"|''')/, []);\n    }\n    function addHtml() {\n        add(HTMLRules, \"html-multiline-\", /(\"\"\"|''')/);\n    }\n    function add(Rules, strPrfx, rgxEnd, rootTokens, closeType) {\n        var next = \"pop\";\n        var tokens = rootTokens || [\"start\"];\n        if (tokens.length === 0) {\n            tokens = null;\n        }\n        if (/block|multiline/.test(strPrfx)) {\n            next = strPrfx + \"end\";\n            rules.$rules[next] = [\n                Token(\"empty\", \"\", \"start\")\n            ];\n        }\n        rules.embedRules(Rules, strPrfx, [Token(closeType || token_RPARE, rgxEnd, next)], tokens, tokens == null ? true : false);\n    }\n    this.normalizeRules();\n}\noop.inherits(MaskHighlightRules, TextRules);\nvar Blocks = {\n    string: function (str, next) {\n        var token = Token(\"string.start\", str, [\n            Token(token_LPARE + \".\" + token_ITALIC, /~\\[/, Blocks.interpolation()),\n            Token(\"string.end\", str, \"pop\"),\n            {\n                defaultToken: \"string\"\n            }\n        ], next);\n        if (str.length === 1) {\n            var escaped = Token(\"string.escape\", \"\\\\\\\\\" + str);\n            token.push.unshift(escaped);\n        }\n        return token;\n    },\n    interpolation: function () {\n        return [\n            Token(token_UTIL, /\\s*\\w*\\s*:/),\n            \"js-interpolation-start\"\n        ];\n    },\n    tagHead: function (rgx) {\n        return Token(token_ATTR, rgx, [\n            Token(token_ATTR, /[\\w\\-_]+/),\n            Token(token_LPARE + \".\" + token_ITALIC, /~\\[/, Blocks.interpolation()),\n            Blocks.goUp()\n        ]);\n    },\n    tag: function () {\n        return {\n            token: 'tag',\n            onMatch: function (value) {\n                if (void 0 !== const_KEYWORDS[value])\n                    return token_KEYWORD;\n                if (void 0 !== const_CONST[value])\n                    return token_LANG;\n                if (void 0 !== const_FUNCTIONS[value])\n                    return \"support.function\";\n                if (void 0 !== const_TAGS[value.toLowerCase()])\n                    return token_TAG;\n                return token_COMPO;\n            },\n            regex: /([@\\w\\-_:+]+)|((^|\\s)(?=\\s*(\\.|#)))/,\n            push: [\n                Blocks.tagHead(/\\./),\n                Blocks.tagHead(/#/),\n                Blocks.expression(),\n                Blocks.attribute(),\n                Token(token_LPARE, /[;>{]/, \"pop\")\n            ]\n        };\n    },\n    syntax: function (rgx, next, type) {\n        return {\n            token: token_LANG,\n            regex: rgx,\n            push: ({\n                \"attr\": [\n                    next + \"-start\",\n                    Token(token_PUNKT, /;/, \"start\")\n                ],\n                \"multiline\": [\n                    Blocks.tagHead(/\\./),\n                    Blocks.tagHead(/#/),\n                    Blocks.attribute(),\n                    Blocks.expression(),\n                    Token(token_LPARE, /[>\\{]/),\n                    Token(token_PUNKT, /;/, \"start\"),\n                    Token(token_LPARE, /'''|\"\"\"/, [next + \"-start\"])\n                ],\n                \"block\": [\n                    Blocks.tagHead(/\\./),\n                    Blocks.tagHead(/#/),\n                    Blocks.attribute(),\n                    Blocks.expression(),\n                    Token(token_LPARE, /\\{/, [next + \"-start\"])\n                ]\n            })[type]\n        };\n    },\n    attribute: function () {\n        return Token(function (value) {\n            return /^x\\-/.test(value)\n                ? token_ATTR + \".\" + token_BOLD\n                : token_ATTR;\n        }, /[\\w_-]+/, [\n            Token(token_PUNKT, /\\s*=\\s*/, [\n                Blocks.string('\"'),\n                Blocks.string(\"'\"),\n                Blocks.word(),\n                Blocks.goUp()\n            ]),\n            Blocks.goUp()\n        ]);\n    },\n    expression: function () {\n        return Token(token_LPARE, /\\(/, [\"js-statement-start\"]);\n    },\n    word: function () {\n        return Token(\"string\", /[\\w-_]+/);\n    },\n    goUp: function () {\n        return Token(\"text\", \"\", \"pop\");\n    },\n    goStart: function () {\n        return Token(\"text\", \"\", \"start\");\n    }\n};\nfunction Token(token, rgx, mix) {\n    var push, next, onMatch;\n    if (arguments.length === 4) {\n        push = mix;\n        next = arguments[3];\n    }\n    else if (typeof mix === \"string\") {\n        next = mix;\n    }\n    else {\n        push = mix;\n    }\n    if (typeof token === \"function\") {\n        onMatch = token;\n        token = \"empty\";\n    }\n    return {\n        token: token,\n        regex: rgx,\n        push: push,\n        next: next,\n        onMatch: onMatch\n    };\n}\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/mask\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mask_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MaskHighlightRules = require(\"./mask_highlight_rules\").MaskHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = MaskHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/mask\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/mask\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-matlab.js",
    "content": "ace.define(\"ace/mode/matlab_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar MatlabHighlightRules = function () {\n    var keywords = (\"break|case|catch|classdef|continue|else|elseif|end|for|function|global|if|otherwise|parfor|persistent|return|spmd|switch|try|while\");\n    var builtinConstants = (\"true|false|inf|Inf|nan|NaN|eps|pi|ans|nargin|nargout|varargin|varargout\");\n    var builtinFunctions = (\"abs|accumarray|acos(?:d|h)?|acot(?:d|h)?|acsc(?:d|h)?|actxcontrol(?:list|select)?|actxGetRunningServer|actxserver|addlistener|addpath|addpref|addtodate|\" +\n        \"airy|align|alim|all|allchild|alpha|alphamap|amd|ancestor|and|angle|annotation|any|area|arrayfun|asec(?:d|h)?|asin(?:d|h)?|assert|assignin|atan(?:2|d|h)?|\" +\n        \"audiodevinfo|audioplayer|audiorecorder|aufinfo|auread|autumn|auwrite|avifile|aviinfo|aviread|axes|axis|balance|bar(?:3|3h|h)?|base2dec|beep|BeginInvoke|bench|\" +\n        \"bessel(?:h|i|j|k|y)|beta|betainc|betaincinv|betaln|bicg|bicgstab|bicgstabl|bin2dec|bitand|bitcmp|bitget|bitmax|bitnot|bitor|bitset|bitshift|bitxor|blanks|blkdiag|\" +\n        \"bone|box|brighten|brush|bsxfun|builddocsearchdb|builtin|bvp4c|bvp5c|bvpget|bvpinit|bvpset|bvpxtend|calendar|calllib|callSoapService|camdolly|cameratoolbar|camlight|\" +\n        \"camlookat|camorbit|campan|campos|camproj|camroll|camtarget|camup|camva|camzoom|cart2pol|cart2sph|cast|cat|caxis|cd|cdf2rdf|cdfepoch|cdfinfo|cdflib(?:.(?:close|closeVar|\" +\n        \"computeEpoch|computeEpoch16|create|createAttr|createVar|delete|deleteAttr|deleteAttrEntry|deleteAttrgEntry|deleteVar|deleteVarRecords|epoch16Breakdown|epochBreakdown|getAttrEntry|\" +\n        \"getAttrgEntry|getAttrMaxEntry|getAttrMaxgEntry|getAttrName|getAttrNum|getAttrScope|getCacheSize|getChecksum|getCompression|getCompressionCacheSize|getConstantNames|\" +\n        \"getConstantValue|getCopyright|getFileBackward|getFormat|getLibraryCopyright|getLibraryVersion|getMajority|getName|getNumAttrEntries|getNumAttrgEntries|getNumAttributes|\" +\n        \"getNumgAttributes|getReadOnlyMode|getStageCacheSize|getValidate|getVarAllocRecords|getVarBlockingFactor|getVarCacheSize|getVarCompression|getVarData|getVarMaxAllocRecNum|\" +\n        \"getVarMaxWrittenRecNum|getVarName|getVarNum|getVarNumRecsWritten|getVarPadValue|getVarRecordData|getVarReservePercent|getVarsMaxWrittenRecNum|getVarSparseRecords|getVersion|\" +\n        \"hyperGetVarData|hyperPutVarData|inquire|inquireAttr|inquireAttrEntry|inquireAttrgEntry|inquireVar|open|putAttrEntry|putAttrgEntry|putVarData|putVarRecordData|renameAttr|\" +\n        \"renameVar|setCacheSize|setChecksum|setCompression|setCompressionCacheSize|setFileBackward|setFormat|setMajority|setReadOnlyMode|setStageCacheSize|setValidate|\" +\n        \"setVarAllocBlockRecords|setVarBlockingFactor|setVarCacheSize|setVarCompression|setVarInitialRecs|setVarPadValue|SetVarReservePercent|setVarsCacheSize|setVarSparseRecords))?|\" +\n        \"cdfread|cdfwrite|ceil|cell2mat|cell2struct|celldisp|cellfun|cellplot|cellstr|cgs|checkcode|checkin|checkout|chol|cholinc|cholupdate|circshift|cla|clabel|class|clc|clear|\" +\n        \"clearvars|clf|clipboard|clock|close|closereq|cmopts|cmpermute|cmunique|colamd|colon|colorbar|colordef|colormap|colormapeditor|colperm|Combine|comet|comet3|commandhistory|\" +\n        \"commandwindow|compan|compass|complex|computer|cond|condeig|condest|coneplot|conj|containers.Map|contour(?:3|c|f|slice)?|contrast|conv|conv2|convhull|convhulln|convn|cool|\" +\n        \"copper|copyfile|copyobj|corrcoef|cos(?:d|h)?|cot(?:d|h)?|cov|cplxpair|cputime|createClassFromWsdl|createSoapMessage|cross|csc(?:d|h)?|csvread|csvwrite|ctranspose|cumprod|\" +\n        \"cumsum|cumtrapz|curl|customverctrl|cylinder|daqread|daspect|datacursormode|datatipinfo|date|datenum|datestr|datetick|datevec|dbclear|dbcont|dbdown|dblquad|dbmex|dbquit|\" +\n        \"dbstack|dbstatus|dbstep|dbstop|dbtype|dbup|dde23|ddeget|ddesd|ddeset|deal|deblank|dec2base|dec2bin|dec2hex|decic|deconv|del2|delaunay|delaunay3|delaunayn|DelaunayTri|delete|\" +\n        \"demo|depdir|depfun|det|detrend|deval|diag|dialog|diary|diff|diffuse|dir|disp|display|dither|divergence|dlmread|dlmwrite|dmperm|doc|docsearch|dos|dot|dragrect|drawnow|dsearch|\" +\n        \"dsearchn|dynamicprops|echo|echodemo|edit|eig|eigs|ellipj|ellipke|ellipsoid|empty|enableNETfromNetworkDrive|enableservice|EndInvoke|enumeration|eomday|eq|erf|erfc|erfcinv|\" +\n        \"erfcx|erfinv|error|errorbar|errordlg|etime|etree|etreeplot|eval|evalc|evalin|event.(?:EventData|listener|PropertyEvent|proplistener)|exifread|exist|exit|exp|expint|expm|\" +\n        \"expm1|export2wsdlg|eye|ezcontour|ezcontourf|ezmesh|ezmeshc|ezplot|ezplot3|ezpolar|ezsurf|ezsurfc|factor|factorial|fclose|feather|feature|feof|ferror|feval|fft|fft2|fftn|\" +\n        \"fftshift|fftw|fgetl|fgets|fieldnames|figure|figurepalette|fileattrib|filebrowser|filemarker|fileparts|fileread|filesep|fill|fill3|filter|filter2|find|findall|findfigs|\" +\n        \"findobj|findstr|finish|fitsdisp|fitsinfo|fitsread|fitswrite|fix|flag|flipdim|fliplr|flipud|floor|flow|fminbnd|fminsearch|fopen|format|fplot|fprintf|frame2im|fread|freqspace|\" +\n        \"frewind|fscanf|fseek|ftell|FTP|full|fullfile|func2str|functions|funm|fwrite|fzero|gallery|gamma|gammainc|gammaincinv|gammaln|gca|gcbf|gcbo|gcd|gcf|gco|ge|genpath|genvarname|\" +\n        \"get|getappdata|getenv|getfield|getframe|getpixelposition|getpref|ginput|gmres|gplot|grabcode|gradient|gray|graymon|grid|griddata(?:3|n)?|griddedInterpolant|gsvd|gt|gtext|\" +\n        \"guidata|guide|guihandles|gunzip|gzip|h5create|h5disp|h5info|h5read|h5readatt|h5write|h5writeatt|hadamard|handle|hankel|hdf|hdf5|hdf5info|hdf5read|hdf5write|hdfinfo|\" +\n        \"hdfread|hdftool|help|helpbrowser|helpdesk|helpdlg|helpwin|hess|hex2dec|hex2num|hgexport|hggroup|hgload|hgsave|hgsetget|hgtransform|hidden|hilb|hist|histc|hold|home|horzcat|\" +\n        \"hostid|hot|hsv|hsv2rgb|hypot|ichol|idivide|ifft|ifft2|ifftn|ifftshift|ilu|im2frame|im2java|imag|image|imagesc|imapprox|imfinfo|imformats|import|importdata|imread|imwrite|\" +\n        \"ind2rgb|ind2sub|inferiorto|info|inline|inmem|inpolygon|input|inputdlg|inputname|inputParser|inspect|instrcallback|instrfind|instrfindall|int2str|integral(?:2|3)?|interp(?:1|\" +\n        \"1q|2|3|ft|n)|interpstreamspeed|intersect|intmax|intmin|inv|invhilb|ipermute|isa|isappdata|iscell|iscellstr|ischar|iscolumn|isdir|isempty|isequal|isequaln|isequalwithequalnans|\" +\n        \"isfield|isfinite|isfloat|isglobal|ishandle|ishghandle|ishold|isinf|isinteger|isjava|iskeyword|isletter|islogical|ismac|ismatrix|ismember|ismethod|isnan|isnumeric|isobject|\" +\n        \"isocaps|isocolors|isonormals|isosurface|ispc|ispref|isprime|isprop|isreal|isrow|isscalar|issorted|isspace|issparse|isstr|isstrprop|isstruct|isstudent|isunix|isvarname|\" +\n        \"isvector|javaaddpath|javaArray|javachk|javaclasspath|javacomponent|javaMethod|javaMethodEDT|javaObject|javaObjectEDT|javarmpath|jet|keyboard|kron|lasterr|lasterror|\" +\n        \"lastwarn|lcm|ldivide|ldl|le|legend|legendre|length|libfunctions|libfunctionsview|libisloaded|libpointer|libstruct|license|light|lightangle|lighting|lin2mu|line|lines|\" +\n        \"linkaxes|linkdata|linkprop|linsolve|linspace|listdlg|listfonts|load|loadlibrary|loadobj|log|log10|log1p|log2|loglog|logm|logspace|lookfor|lower|ls|lscov|lsqnonneg|lsqr|\" +\n        \"lt|lu|luinc|magic|makehgtform|mat2cell|mat2str|material|matfile|matlab.io.MatFile|matlab.mixin.(?:Copyable|Heterogeneous(?:.getDefaultScalarElement)?)|matlabrc|\" +\n        \"matlabroot|max|maxNumCompThreads|mean|median|membrane|memmapfile|memory|menu|mesh|meshc|meshgrid|meshz|meta.(?:class(?:.fromName)?|DynamicProperty|EnumeratedValue|event|\" +\n        \"MetaData|method|package(?:.(?:fromName|getAllPackages))?|property)|metaclass|methods|methodsview|mex(?:.getCompilerConfigurations)?|MException|mexext|mfilename|min|minres|\" +\n        \"minus|mislocked|mkdir|mkpp|mldivide|mlint|mlintrpt|mlock|mmfileinfo|mmreader|mod|mode|more|move|movefile|movegui|movie|movie2avi|mpower|mrdivide|msgbox|mtimes|mu2lin|\" +\n        \"multibandread|multibandwrite|munlock|namelengthmax|nargchk|narginchk|nargoutchk|native2unicode|nccreate|ncdisp|nchoosek|ncinfo|ncread|ncreadatt|ncwrite|ncwriteatt|\" +\n        \"ncwriteschema|ndgrid|ndims|ne|NET(?:.(?:addAssembly|Assembly|convertArray|createArray|createGeneric|disableAutoRelease|enableAutoRelease|GenericClass|invokeGenericMethod|\" +\n        \"NetException|setStaticProperty))?|netcdf.(?:abort|close|copyAtt|create|defDim|defGrp|defVar|defVarChunking|defVarDeflate|defVarFill|defVarFletcher32|delAtt|endDef|getAtt|\" +\n        \"getChunkCache|getConstant|getConstantNames|getVar|inq|inqAtt|inqAttID|inqAttName|inqDim|inqDimID|inqDimIDs|inqFormat|inqGrpName|inqGrpNameFull|inqGrpParent|inqGrps|\" +\n        \"inqLibVers|inqNcid|inqUnlimDims|inqVar|inqVarChunking|inqVarDeflate|inqVarFill|inqVarFletcher32|inqVarID|inqVarIDs|open|putAtt|putVar|reDef|renameAtt|renameDim|renameVar|\" +\n        \"setChunkCache|setDefaultFormat|setFill|sync)|newplot|nextpow2|nnz|noanimate|nonzeros|norm|normest|not|notebook|now|nthroot|null|num2cell|num2hex|num2str|numel|nzmax|\" +\n        \"ode(?:113|15i|15s|23|23s|23t|23tb|45)|odeget|odeset|odextend|onCleanup|ones|open|openfig|opengl|openvar|optimget|optimset|or|ordeig|orderfields|ordqz|ordschur|orient|\" +\n        \"orth|pack|padecoef|pagesetupdlg|pan|pareto|parseSoapResponse|pascal|patch|path|path2rc|pathsep|pathtool|pause|pbaspect|pcg|pchip|pcode|pcolor|pdepe|pdeval|peaks|perl|perms|\" +\n        \"permute|pie|pink|pinv|planerot|playshow|plot|plot3|plotbrowser|plotedit|plotmatrix|plottools|plotyy|plus|pol2cart|polar|poly|polyarea|polyder|polyeig|polyfit|polyint|polyval|\" +\n        \"polyvalm|pow2|power|ppval|prefdir|preferences|primes|print|printdlg|printopt|printpreview|prod|profile|profsave|propedit|propertyeditor|psi|publish|PutCharArray|PutFullMatrix|\" +\n        \"PutWorkspaceData|pwd|qhull|qmr|qr|qrdelete|qrinsert|qrupdate|quad|quad2d|quadgk|quadl|quadv|questdlg|quit|quiver|quiver3|qz|rand|randi|randn|randperm|RandStream(?:.(?:create|\" +\n        \"getDefaultStream|getGlobalStream|list|setDefaultStream|setGlobalStream))?|rank|rat|rats|rbbox|rcond|rdivide|readasync|real|reallog|realmax|realmin|realpow|realsqrt|record|\" +\n        \"rectangle|rectint|recycle|reducepatch|reducevolume|refresh|refreshdata|regexp|regexpi|regexprep|regexptranslate|rehash|rem|Remove|RemoveAll|repmat|reset|reshape|residue|\" +\n        \"restoredefaultpath|rethrow|rgb2hsv|rgb2ind|rgbplot|ribbon|rmappdata|rmdir|rmfield|rmpath|rmpref|rng|roots|rose|rosser|rot90|rotate|rotate3d|round|rref|rsf2csf|run|save|saveas|\" +\n        \"saveobj|savepath|scatter|scatter3|schur|sec|secd|sech|selectmoveresize|semilogx|semilogy|sendmail|serial|set|setappdata|setdiff|setenv|setfield|setpixelposition|setpref|setstr|\" +\n        \"setxor|shading|shg|shiftdim|showplottool|shrinkfaces|sign|sin(?:d|h)?|size|slice|smooth3|snapnow|sort|sortrows|sound|soundsc|spalloc|spaugment|spconvert|spdiags|specular|speye|\" +\n        \"spfun|sph2cart|sphere|spinmap|spline|spones|spparms|sprand|sprandn|sprandsym|sprank|spring|sprintf|spy|sqrt|sqrtm|squeeze|ss2tf|sscanf|stairs|startup|std|stem|stem3|stopasync|\" +\n        \"str2double|str2func|str2mat|str2num|strcat|strcmp|strcmpi|stream2|stream3|streamline|streamparticles|streamribbon|streamslice|streamtube|strfind|strjust|strmatch|strncmp|\" +\n        \"strncmpi|strread|strrep|strtok|strtrim|struct2cell|structfun|strvcat|sub2ind|subplot|subsasgn|subsindex|subspace|subsref|substruct|subvolume|sum|summer|superclasses|superiorto|\" +\n        \"support|surf|surf2patch|surface|surfc|surfl|surfnorm|svd|svds|swapbytes|symamd|symbfact|symmlq|symrcm|symvar|system|tan(?:d|h)?|tar|tempdir|tempname|tetramesh|texlabel|text|\" +\n        \"textread|textscan|textwrap|tfqmr|throw|tic|Tiff(?:.(?:getTagNames|getVersion))?|timer|timerfind|timerfindall|times|timeseries|title|toc|todatenum|toeplitz|toolboxdir|trace|\" +\n        \"transpose|trapz|treelayout|treeplot|tril|trimesh|triplequad|triplot|TriRep|TriScatteredInterp|trisurf|triu|tscollection|tsearch|tsearchn|tstool|type|typecast|uibuttongroup|\" +\n        \"uicontextmenu|uicontrol|uigetdir|uigetfile|uigetpref|uiimport|uimenu|uiopen|uipanel|uipushtool|uiputfile|uiresume|uisave|uisetcolor|uisetfont|uisetpref|uistack|uitable|\" +\n        \"uitoggletool|uitoolbar|uiwait|uminus|undocheckout|unicode2native|union|unique|unix|unloadlibrary|unmesh|unmkpp|untar|unwrap|unzip|uplus|upper|urlread|urlwrite|usejava|\" +\n        \"userpath|validateattributes|validatestring|vander|var|vectorize|ver|verctrl|verLessThan|version|vertcat|VideoReader(?:.isPlatformSupported)?|VideoWriter(?:.getProfiles)?|\" +\n        \"view|viewmtx|visdiff|volumebounds|voronoi|voronoin|wait|waitbar|waitfor|waitforbuttonpress|warndlg|warning|waterfall|wavfinfo|wavplay|wavread|wavrecord|wavwrite|web|weekday|\" +\n        \"what|whatsnew|which|whitebg|who|whos|wilkinson|winopen|winqueryreg|winter|wk1finfo|wk1read|wk1write|workspace|xlabel|xlim|xlsfinfo|xlsread|xlswrite|xmlread|xmlwrite|xor|xslt|\" +\n        \"ylabel|ylim|zeros|zip|zlabel|zlim|zoom|addedvarplot|andrewsplot|anova(?:1|2|n)|ansaribradley|aoctool|barttest|bbdesign|beta(?:cdf|fit|inv|like|pdf|rnd|stat)|bino(?:cdf|fit|inv|\" +\n        \"pdf|rnd|stat)|biplot|bootci|bootstrp|boxplot|candexch|candgen|canoncorr|capability|capaplot|caseread|casewrite|categorical|ccdesign|cdfplot|chi2(?:cdf|gof|inv|pdf|rnd|stat)|\" +\n        \"cholcov|Classification(?:BaggedEnsemble|Discriminant(?:.(?:fit|make|template))?|Ensemble|KNN(?:.(?:fit|template))?|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|\" +\n        \"template))?)|classify|classregtree|cluster|clusterdata|cmdscale|combnk|Compact(?:Classification(?:Discriminant|Ensemble|Tree)|Regression(?:Ensemble|Tree)|TreeBagger)|confusionmat|\" +\n        \"controlchart|controlrules|cophenet|copula(?:cdf|fit|param|pdf|rnd|stat)|cordexch|corr|corrcov|coxphfit|createns|crosstab|crossval|cvpartition|datasample|dataset|daugment|dcovary|\" +\n        \"dendrogram|dfittool|disttool|dummyvar|dwtest|ecdf|ecdfhist|ev(?:cdf|fit|inv|like|pdf|rnd|stat)|ExhaustiveSearcher|exp(?:cdf|fit|inv|like|pdf|rnd|stat)|factoran|fcdf|ff2n|finv|\" +\n        \"fitdist|fitensemble|fpdf|fracfact|fracfactgen|friedman|frnd|fstat|fsurfht|fullfact|gagerr|gam(?:cdf|fit|inv|like|pdf|rnd|stat)|GeneralizedLinearModel(?:.fit)?|geo(?:cdf|inv|mean|\" +\n        \"pdf|rnd|stat)|gev(?:cdf|fit|inv|like|pdf|rnd|stat)|gline|glmfit|glmval|glyphplot|gmdistribution(?:.fit)?|gname|gp(?:cdf|fit|inv|like|pdf|rnd|stat)|gplotmatrix|grp2idx|grpstats|\" +\n        \"gscatter|haltonset|harmmean|hist3|histfit|hmm(?:decode|estimate|generate|train|viterbi)|hougen|hyge(?:cdf|inv|pdf|rnd|stat)|icdf|inconsistent|interactionplot|invpred|iqr|iwishrnd|\" +\n        \"jackknife|jbtest|johnsrnd|KDTreeSearcher|kmeans|knnsearch|kruskalwallis|ksdensity|kstest|kstest2|kurtosis|lasso|lassoglm|lassoPlot|leverage|lhsdesign|lhsnorm|lillietest|\" +\n        \"LinearModel(?:.fit)?|linhyptest|linkage|logn(?:cdf|fit|inv|like|pdf|rnd|stat)|lsline|mad|mahal|maineffectsplot|manova1|manovacluster|mdscale|mhsample|mle|mlecov|mnpdf|\" +\n        \"mnrfit|mnrnd|mnrval|moment|multcompare|multivarichart|mvn(?:cdf|pdf|rnd)|mvregress|mvregresslike|mvt(?:cdf|pdf|rnd)|NaiveBayes(?:.fit)?|nan(?:cov|max|mean|median|min|std|\" +\n        \"sum|var)|nbin(?:cdf|fit|inv|pdf|rnd|stat)|ncf(?:cdf|inv|pdf|rnd|stat)|nct(?:cdf|inv|pdf|rnd|stat)|ncx2(?:cdf|inv|pdf|rnd|stat)|NeighborSearcher|nlinfit|nlintool|nlmefit|nlmefitsa|\" +\n        \"nlparci|nlpredci|nnmf|nominal|NonLinearModel(?:.fit)?|norm(?:cdf|fit|inv|like|pdf|rnd|stat)|normplot|normspec|ordinal|outlierMeasure|parallelcoords|paretotails|partialcorr|\" +\n        \"pcacov|pcares|pdf|pdist|pdist2|pearsrnd|perfcurve|perms|piecewisedistribution|plsregress|poiss(?:cdf|fit|inv|pdf|rnd|tat)|polyconf|polytool|prctile|princomp|ProbDist(?:Kernel|\" +\n        \"Parametric|UnivKernel|UnivParam)?|probplot|procrustes|qqplot|qrandset|qrandstream|quantile|randg|random|randsample|randtool|range|rangesearch|ranksum|rayl(?:cdf|fit|inv|pdf|\" +\n        \"rnd|stat)|rcoplot|refcurve|refline|regress|Regression(?:BaggedEnsemble|Ensemble|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|regstats|relieff|ridge|\" +\n        \"robustdemo|robustfit|rotatefactors|rowexch|rsmdemo|rstool|runstest|sampsizepwr|scatterhist|sequentialfs|signrank|signtest|silhouette|skewness|slicesample|sobolset|squareform|\" +\n        \"statget|statset|stepwise|stepwisefit|surfht|tabulate|tblread|tblwrite|tcdf|tdfread|tiedrank|tinv|tpdf|TreeBagger|treedisp|treefit|treeprune|treetest|treeval|trimmean|trnd|tstat|\" +\n        \"ttest|ttest2|unid(?:cdf|inv|pdf|rnd|stat)|unif(?:cdf|inv|it|pdf|rnd|stat)|vartest(?:2|n)?|wbl(?:cdf|fit|inv|like|pdf|rnd|stat)|wblplot|wishrnd|x2fx|xptread|zscore|ztest\" +\n        \"adapthisteq|analyze75info|analyze75read|applycform|applylut|axes2pix|bestblk|blockproc|bwarea|bwareaopen|bwboundaries|bwconncomp|bwconvhull|bwdist|bwdistgeodesic|bweuler|\" +\n        \"bwhitmiss|bwlabel|bwlabeln|bwmorph|bwpack|bwperim|bwselect|bwtraceboundary|bwulterode|bwunpack|checkerboard|col2im|colfilt|conndef|convmtx2|corner|cornermetric|corr2|cp2tform|\" +\n        \"cpcorr|cpselect|cpstruct2pairs|dct2|dctmtx|deconvblind|deconvlucy|deconvreg|deconvwnr|decorrstretch|demosaic|dicom(?:anon|dict|info|lookup|read|uid|write)|edge|edgetaper|entropy|\" +\n        \"entropyfilt|fan2para|fanbeam|findbounds|fliptform|freqz2|fsamp2|fspecial|ftrans2|fwind1|fwind2|getheight|getimage|getimagemodel|getline|getneighbors|getnhood|getpts|\" +\n        \"getrangefromclass|getrect|getsequence|gray2ind|graycomatrix|graycoprops|graydist|grayslice|graythresh|hdrread|hdrwrite|histeq|hough|houghlines|houghpeaks|iccfind|iccread|\" +\n        \"iccroot|iccwrite|idct2|ifanbeam|im2bw|im2col|im2double|im2int16|im2java2d|im2single|im2uint16|im2uint8|imabsdiff|imadd|imadjust|ImageAdapter|imageinfo|imagemodel|imapplymatrix|\" +\n        \"imattributes|imbothat|imclearborder|imclose|imcolormaptool|imcomplement|imcontour|imcontrast|imcrop|imdilate|imdisplayrange|imdistline|imdivide|imellipse|imerode|imextendedmax|\" +\n        \"imextendedmin|imfill|imfilter|imfindcircles|imfreehand|imfuse|imgca|imgcf|imgetfile|imhandles|imhist|imhmax|imhmin|imimposemin|imlincomb|imline|immagbox|immovie|immultiply|imnoise|\" +\n        \"imopen|imoverview|imoverviewpanel|impixel|impixelinfo|impixelinfoval|impixelregion|impixelregionpanel|implay|impoint|impoly|impositionrect|improfile|imputfile|impyramid|\" +\n        \"imreconstruct|imrect|imregconfig|imregionalmax|imregionalmin|imregister|imresize|imroi|imrotate|imsave|imscrollpanel|imshow|imshowpair|imsubtract|imtool|imtophat|imtransform|\" +\n        \"imview|ind2gray|ind2rgb|interfileinfo|interfileread|intlut|ippl|iptaddcallback|iptcheckconn|iptcheckhandle|iptcheckinput|iptcheckmap|iptchecknargin|iptcheckstrs|iptdemos|iptgetapi|\" +\n        \"iptGetPointerBehavior|iptgetpref|ipticondir|iptnum2ordinal|iptPointerManager|iptprefs|iptremovecallback|iptSetPointerBehavior|iptsetpref|iptwindowalign|iradon|isbw|isflat|isgray|\" +\n        \"isicc|isind|isnitf|isrgb|isrset|lab2double|lab2uint16|lab2uint8|label2rgb|labelmatrix|makecform|makeConstrainToRectFcn|makehdr|makelut|makeresampler|maketform|mat2gray|mean2|\" +\n        \"medfilt2|montage|nitfinfo|nitfread|nlfilter|normxcorr2|ntsc2rgb|openrset|ordfilt2|otf2psf|padarray|para2fan|phantom|poly2mask|psf2otf|qtdecomp|qtgetblk|qtsetblk|radon|rangefilt|\" +\n        \"reflect|regionprops|registration.metric.(?:MattesMutualInformation|MeanSquares)|registration.optimizer.(?:OnePlusOneEvolutionary|RegularStepGradientDescent)|rgb2gray|\" +\n        \"rgb2ntsc|rgb2ycbcr|roicolor|roifill|roifilt2|roipoly|rsetwrite|std2|stdfilt|strel|stretchlim|subimage|tformarray|tformfwd|tforminv|tonemap|translate|truesize|uintlut|viscircles|\" +\n        \"warp|watershed|whitepoint|wiener2|xyz2double|xyz2uint16|ycbcr2rgb|bintprog|color|fgoalattain|fminbnd|fmincon|fminimax|fminsearch|fminunc|fseminf|fsolve|fzero|fzmult|gangstr|ktrlink|\" +\n        \"linprog|lsqcurvefit|lsqlin|lsqnonlin|lsqnonneg|optimget|optimset|optimtool|quadprog\");\n    var storageType = (\"cell|struct|char|double|single|logical|u?int(?:8|16|32|64)|sparse\");\n    var keywordMapper = this.createKeywordMapper({\n        \"storage.type\": storageType,\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n    this.$rules = {\n        start: [{\n                token: \"string\",\n                regex: \"'\",\n                stateName: \"qstring\",\n                next: [{\n                        token: \"constant.language.escape\",\n                        regex: \"''\"\n                    }, {\n                        token: \"string\",\n                        regex: \"'|$\",\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                regex: \"\",\n                next: \"noQstring\"\n            }],\n        noQstring: [{\n                regex: \"^\\\\s*%{\\\\s*$\",\n                token: \"comment.start\",\n                push: \"blockComment\"\n            }, {\n                token: \"comment\",\n                regex: \"%[^\\r\\n]*\"\n            }, {\n                token: \"string\",\n                regex: '\"',\n                stateName: \"qqstring\",\n                next: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\./\n                    }, {\n                        token: \"string\",\n                        regex: \"\\\\\\\\$\",\n                        next: \"qqstring\"\n                    }, {\n                        token: \"string\",\n                        regex: '\"|$',\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\",\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[({\\\\[]\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]})]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"text\",\n                regex: \"$\",\n                next: \"start\"\n            }],\n        blockComment: [{\n                regex: \"^\\\\s*%{\\\\s*$\",\n                token: \"comment.start\",\n                push: \"blockComment\"\n            }, {\n                regex: \"^\\\\s*%}\\\\s*$\",\n                token: \"comment.end\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(MatlabHighlightRules, TextHighlightRules);\nexports.MatlabHighlightRules = MatlabHighlightRules;\n\n});\n\nace.define(\"ace/mode/matlab\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/matlab_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MatlabHighlightRules = require(\"./matlab_highlight_rules\").MatlabHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = MatlabHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"%\";\n    this.blockComment = { start: \"%{\", end: \"%}\" };\n    this.$id = \"ace/mode/matlab\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/matlab\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-maze.js",
    "content": "ace.define(\"ace/mode/maze_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar MazeHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                token: \"keyword.control\",\n                regex: /##|``/,\n                comment: \"Wall\"\n            }, {\n                token: \"entity.name.tag\",\n                regex: /\\.\\./,\n                comment: \"Path\"\n            }, {\n                token: \"keyword.control\",\n                regex: /<>/,\n                comment: \"Splitter\"\n            }, {\n                token: \"entity.name.tag\",\n                regex: /\\*[\\*A-Za-z0-9]/,\n                comment: \"Signal\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /[0-9]{2}/,\n                comment: \"Pause\"\n            }, {\n                token: \"keyword.control\",\n                regex: /\\^\\^/,\n                comment: \"Start\"\n            }, {\n                token: \"keyword.control\",\n                regex: /\\(\\)/,\n                comment: \"Hole\"\n            }, {\n                token: \"support.function\",\n                regex: />>/,\n                comment: \"Out\"\n            }, {\n                token: \"support.function\",\n                regex: />\\//,\n                comment: \"Ln Out\"\n            }, {\n                token: \"support.function\",\n                regex: /<</,\n                comment: \"In\"\n            }, {\n                token: \"keyword.control\",\n                regex: /--/,\n                comment: \"One use\"\n            }, {\n                token: \"constant.language\",\n                regex: /%[LRUDNlrudn]/,\n                comment: \"Direction\"\n            }, {\n                token: [\n                    \"entity.name.function\",\n                    \"keyword.other\",\n                    \"keyword.operator\",\n                    \"keyword.other\",\n                    \"keyword.operator\",\n                    \"constant.numeric\",\n                    \"keyword.operator\",\n                    \"keyword.other\",\n                    \"keyword.operator\",\n                    \"constant.numeric\",\n                    \"string.quoted.double\",\n                    \"string.quoted.single\"\n                ],\n                regex: /([A-Za-z][A-Za-z0-9])( *-> *)(?:([-+*\\/]=)( *)((?:-)?)([0-9]+)|(=)( *)(?:((?:-)?)([0-9]+)|(\"[^\"]*\")|('[^']*')))/,\n                comment: \"Assignment function\"\n            }, {\n                token: [\n                    \"entity.name.function\",\n                    \"keyword.other\",\n                    \"keyword.control\",\n                    \"keyword.other\",\n                    \"keyword.operator\",\n                    \"keyword.other\",\n                    \"keyword.operator\",\n                    \"constant.numeric\",\n                    \"entity.name.tag\",\n                    \"keyword.other\",\n                    \"keyword.control\",\n                    \"keyword.other\",\n                    \"constant.language\",\n                    \"keyword.other\",\n                    \"keyword.control\",\n                    \"keyword.other\",\n                    \"constant.language\"\n                ],\n                regex: /([A-Za-z][A-Za-z0-9])( *-> *)(IF|if)( *)(?:([<>]=?|==)( *)((?:-)?)([0-9]+)|(\\*[\\*A-Za-z0-9]))( *)(THEN|then)( *)(%[LRUDNlrudn])(?:( *)(ELSE|else)( *)(%[LRUDNlrudn]))?/,\n                comment: \"Equality Function\"\n            }, {\n                token: \"entity.name.function\",\n                regex: /[A-Za-z][A-Za-z0-9]/,\n                comment: \"Function cell\"\n            }, {\n                token: \"comment.line.double-slash\",\n                regex: / *\\/\\/.*/,\n                comment: \"Comment\"\n            }]\n    };\n    this.normalizeRules();\n};\nMazeHighlightRules.metaData = {\n    fileTypes: [\"mz\"],\n    name: \"Maze\",\n    scopeName: \"source.maze\"\n};\noop.inherits(MazeHighlightRules, TextHighlightRules);\nexports.MazeHighlightRules = MazeHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/maze\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/maze_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MazeHighlightRules = require(\"./maze_highlight_rules\").MazeHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = MazeHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/maze\";\n    this.snippetFileId = \"ace/snippets/maze\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/maze\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-mediawiki.js",
    "content": "ace.define(\"ace/mode/mediawiki_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar MediaWikiHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                include: \"#switch\"\n            }, {\n                include: \"#redirect\"\n            }, {\n                include: \"#variable\"\n            }, {\n                include: \"#comment\"\n            }, {\n                include: \"#entity\"\n            }, {\n                include: \"#emphasis\"\n            }, {\n                include: \"#tag\"\n            }, {\n                include: \"#table\"\n            }, {\n                include: \"#hr\"\n            }, {\n                include: \"#heading\"\n            }, {\n                include: \"#link\"\n            }, {\n                include: \"#list\"\n            }, {\n                include: \"#template\"\n            }],\n        \"#hr\": [{\n                token: \"markup.bold\",\n                regex: /^[-]{4,}/\n            }],\n        \"#switch\": [{\n                token: \"constant.language\",\n                regex: /(__NOTOC__|__FORCETOC__|__TOC__|__NOEDITSECTION__|__NEWSECTIONLINK__|__NONEWSECTIONLINK__|__NOWYSIWYG__|__NOGALLERY__|__HIDDENCAT__|__EXPECTUNUSEDCATEGORY__|__NOCONTENTCONVERT__|__NOCC__|__NOTITLECONVERT__|__NOTC__|__START__|__END__|__INDEX__|__NOINDEX__|__STATICREDIRECT__|__NOGLOBAL__|__DISAMBIG__)/\n            }],\n        \"#redirect\": [{\n                token: [\n                    \"keyword.control.redirect\",\n                    \"meta.keyword.control\"\n                ],\n                regex: /(^#REDIRECT|^#redirect|^#Redirect)(\\s+)/\n            }],\n        \"#variable\": [{\n                token: \"storage.type.variable\",\n                regex: /{{{/,\n                push: [{\n                        token: \"storage.type.variable\",\n                        regex: /}}}/,\n                        next: \"pop\"\n                    }, {\n                        token: [\n                            \"text\",\n                            \"variable.other\",\n                            \"text\",\n                            \"keyword.operator\"\n                        ],\n                        regex: /(\\s*)(\\w+)(\\s*)((?:\\|)?)/\n                    }, {\n                        defaultToken: \"storage.type.variable\"\n                    }]\n            }],\n        \"#entity\": [{\n                token: \"constant.character.entity\",\n                regex: /&\\w+;/\n            }],\n        \"#list\": [{\n                token: \"markup.bold\",\n                regex: /^[#*;:]+/,\n                push: [{\n                        token: \"markup.list\",\n                        regex: /$/,\n                        next: \"pop\"\n                    }, {\n                        include: \"$self\"\n                    }, {\n                        defaultToken: \"markup.list\"\n                    }]\n            }],\n        \"#template\": [{\n                token: [\n                    \"storage.type.function\",\n                    \"meta.template\",\n                    \"entity.name.function\",\n                    \"meta.template\"\n                ],\n                regex: /({{)(\\s*)([#\\w: ]+)(\\s*)/,\n                push: [{\n                        token: \"storage.type.function\",\n                        regex: /}}/,\n                        next: \"pop\"\n                    }, {\n                        token: [\n                            \"storage\",\n                            \"meta.structure.dictionary\",\n                            \"support.type.property-name\",\n                            \"meta.structure.dictionary\",\n                            \"punctuation.separator.dictionary.key-value\",\n                            \"meta.structure.dictionary\",\n                            \"meta.structure.dictionary.value\"\n                        ],\n                        regex: /(\\|)(\\s*)([a-zA-Z-]*)(\\s*)(=)(\\s*)([^|}]*)/,\n                        push: [{\n                                token: \"meta.structure.dictionary\",\n                                regex: /(?=}}|[|])/,\n                                next: \"pop\"\n                            }, {\n                                defaultToken: \"meta.structure.dictionary\"\n                            }]\n                    }, {\n                        token: [\"storage\", \"meta.template.value\"],\n                        regex: /(\\|)(.*?)/,\n                        push: [{\n                                token: [],\n                                regex: /(?=}}|[|])/,\n                                next: \"pop\"\n                            }, {\n                                include: \"$self\"\n                            }, {\n                                defaultToken: \"meta.template.value\"\n                            }]\n                    }, {\n                        defaultToken: \"meta.template\"\n                    }]\n            }],\n        \"#link\": [{\n                token: [\n                    \"punctuation.definition.tag.begin\",\n                    \"meta.tag.link.internal\",\n                    \"entity.name.tag\",\n                    \"meta.tag.link.internal\",\n                    \"string.other.link.title\",\n                    \"meta.tag.link.internal\",\n                    \"punctuation.definition.tag\"\n                ],\n                regex: /(\\[\\[)(\\s*)((?:Category|Wikipedia)?)(:?)([^\\]\\]\\|]+)(\\s*)((?:\\|)*)/,\n                push: [{\n                        token: \"punctuation.definition.tag.end\",\n                        regex: /\\]\\]/,\n                        next: \"pop\"\n                    }, {\n                        include: \"$self\"\n                    }, {\n                        defaultToken: \"meta.tag.link.internal\"\n                    }]\n            }, {\n                token: [\n                    \"punctuation.definition.tag.begin\",\n                    \"meta.tag.link.external\",\n                    \"meta.tag.link.external\",\n                    \"string.unquoted\",\n                    \"punctuation.definition.tag.end\"\n                ],\n                regex: /(\\[)(.*?)([\\s]+)(.*?)(\\])/\n            }],\n        \"#comment\": [{\n                token: \"punctuation.definition.comment.html\",\n                regex: /<!--/,\n                push: [{\n                        token: \"punctuation.definition.comment.html\",\n                        regex: /-->/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.block.html\"\n                    }]\n            }],\n        \"#emphasis\": [{\n                token: [\n                    \"punctuation.definition.tag.begin\",\n                    \"markup.italic.bold\",\n                    \"punctuation.definition.tag.end\"\n                ],\n                regex: /(''''')(?!')(.*?)('''''|$)/\n            }, {\n                token: [\n                    \"punctuation.definition.tag.begin\",\n                    \"markup.bold\",\n                    \"punctuation.definition.tag.end\"\n                ],\n                regex: /(''')(?!')(.*?)('''|$)/\n            }, {\n                token: [\n                    \"punctuation.definition.tag.begin\",\n                    \"markup.italic\",\n                    \"punctuation.definition.tag.end\"\n                ],\n                regex: /('')(?!')(.*?)(''|$)/\n            }],\n        \"#heading\": [{\n                token: [\n                    \"punctuation.definition.heading\",\n                    \"entity.name.section\",\n                    \"punctuation.definition.heading\"\n                ],\n                regex: /(={1,6})(.+?)(\\1)(?!=)/\n            }],\n        \"#tag\": [{\n                token: [\n                    \"punctuation.definition.tag.begin\",\n                    \"entity.name.tag\",\n                    \"meta.tag.block.ref\",\n                    \"punctuation.definition.tag.end\"\n                ],\n                regex: /(<)(ref)((?:\\s+.*?)?)(>)/,\n                caseInsensitive: true,\n                push: [{\n                        token: [\n                            \"punctuation.definition.tag.begin\",\n                            \"entity.name.tag\",\n                            \"meta.tag.block.ref\",\n                            \"punctuation.definition.tag.end\"\n                        ],\n                        regex: /(<\\/)(ref)(\\s*)(>)/,\n                        caseInsensitive: true,\n                        next: \"pop\"\n                    }, {\n                        include: \"$self\"\n                    }, {\n                        defaultToken: \"meta.tag.block.ref\"\n                    }]\n            },\n            {\n                token: [\n                    \"punctuation.definition.tag.begin\",\n                    \"entity.name.tag\",\n                    \"meta.tag.block.nowiki\",\n                    \"punctuation.definition.tag.end\"\n                ],\n                regex: /(<)(nowiki)((?:\\s+.*?)?)(>)/,\n                caseInsensitive: true,\n                push: [{\n                        token: [\n                            \"punctuation.definition.tag.begin\",\n                            \"entity.name.tag\",\n                            \"meta.tag.block.nowiki\",\n                            \"punctuation.definition.tag.end\"\n                        ],\n                        regex: /(<\\/)(nowiki)(\\s*)(>)/,\n                        caseInsensitive: true,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"meta.tag.block.nowiki\"\n                    }]\n            }, {\n                token: [\n                    \"punctuation.definition.tag.begin\",\n                    \"entity.name.tag\"\n                ],\n                regex: /(<\\/?)(noinclude|includeonly|onlyinclude)(?=\\W)/,\n                caseInsensitive: true,\n                push: [{\n                        token: [\n                            \"invalid.illegal\",\n                            \"punctuation.definition.tag.end\"\n                        ],\n                        regex: /((?:\\/)?)(>)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#attribute\"\n                    }, {\n                        defaultToken: \"meta.tag.block.any\"\n                    }]\n            }, {\n                token: [\n                    \"punctuation.definition.tag.begin\",\n                    \"entity.name.tag\"\n                ],\n                regex: /(<)(br|wbr|hr|meta|link)(?=\\W)/,\n                caseInsensitive: true,\n                push: [{\n                        token: \"punctuation.definition.tag.end\",\n                        regex: /\\/?>/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#attribute\"\n                    }, {\n                        defaultToken: \"meta.tag.other\"\n                    }]\n            }, {\n                token: [\n                    \"punctuation.definition.tag.begin\",\n                    \"entity.name.tag\"\n                ],\n                regex: /(<\\/?)(div|center|span|h1|h2|h3|h4|h5|h6|bdo|em|strong|cite|dfn|code|samp|kbd|var|abbr|blockquote|q|sub|sup|p|pre|ins|del|ul|ol|li|dl|dd|dt|table|caption|thead|tfoot|tbody|colgroup|col|tr|td|th|a|img|video|source|track|tt|b|i|big|small|strike|s|u|font|ruby|rb|rp|rt|rtc|math|figure|figcaption|bdi|data|time|mark|html)(?=\\W)/,\n                caseInsensitive: true,\n                push: [{\n                        token: [\n                            \"invalid.illegal\",\n                            \"punctuation.definition.tag.end\"\n                        ],\n                        regex: /((?:\\/)?)(>)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#attribute\"\n                    }, {\n                        defaultToken: \"meta.tag.block\"\n                    }]\n            }, {\n                token: [\n                    \"punctuation.definition.tag.begin\",\n                    \"invalid.illegal\"\n                ],\n                regex: /(<\\/)(br|wbr|hr|meta|link)(?=\\W)/,\n                caseInsensitive: true,\n                push: [{\n                        token: \"punctuation.definition.tag.end\",\n                        regex: /\\/?>/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#attribute\"\n                    }, {\n                        defaultToken: \"meta.tag.other\"\n                    }]\n            }],\n        \"#caption\": [{\n                token: [\n                    \"meta.tag.block.table-caption\",\n                    \"punctuation.definition.tag.begin\"\n                ],\n                regex: /^(\\s*)(\\|\\+)/,\n                push: [{\n                        token: \"meta.tag.block.table-caption\",\n                        regex: /$/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"meta.tag.block.table-caption\"\n                    }]\n            }],\n        \"#tr\": [{\n                token: [\n                    \"meta.tag.block.tr\",\n                    \"punctuation.definition.tag.begin\",\n                    \"meta.tag.block.tr\",\n                    \"invalid.illegal\"\n                ],\n                regex: /^(\\s*)(\\|\\-)([\\s]*)(.*)/\n            }],\n        \"#th\": [{\n                token: [\n                    \"meta.tag.block.th.heading\",\n                    \"punctuation.definition.tag.begin\",\n                    \"meta.tag.block.th.heading\",\n                    \"punctuation.definition.tag\",\n                    \"markup.bold\"\n                ],\n                regex: /^(\\s*)(!)(?:(.*?)(\\|))?(.*?)(?=!!|$)/,\n                push: [{\n                        token: \"meta.tag.block.th.heading\",\n                        regex: /$/,\n                        next: \"pop\"\n                    }, {\n                        token: [\n                            \"punctuation.definition.tag.begin\",\n                            \"meta.tag.block.th.inline\",\n                            \"punctuation.definition.tag\",\n                            \"markup.bold\"\n                        ],\n                        regex: /(!!)(?:(.*?)(\\|))?(.*?)(?=!!|$)/\n                    }, {\n                        include: \"$self\"\n                    }, {\n                        defaultToken: \"meta.tag.block.th.heading\"\n                    }]\n            }],\n        \"#td\": [{\n                token: [\n                    \"meta.tag.block.td\",\n                    \"punctuation.definition.tag.begin\"\n                ],\n                regex: /^(\\s*)(\\|)/,\n                push: [{\n                        token: \"meta.tag.block.td\",\n                        regex: /$/,\n                        next: \"pop\"\n                    }, {\n                        include: \"$self\"\n                    }, {\n                        defaultToken: \"meta.tag.block.td\"\n                    }]\n            }],\n        \"#table\": [{\n                patterns: [{\n                        name: \"meta.tag.block.table\",\n                        begin: \"^\\\\s*({\\\\|)(.*?)$\",\n                        end: \"^\\\\s*\\\\|}\",\n                        beginCaptures: {\n                            1: {\n                                name: \"punctuation.definition.tag.begin\"\n                            },\n                            2: {\n                                patterns: [{\n                                        include: \"#attribute\"\n                                    }]\n                            },\n                            3: {\n                                name: \"invalid.illegal\"\n                            }\n                        },\n                        endCaptures: {\n                            0: {\n                                name: \"punctuation.definition.tag.end\"\n                            }\n                        },\n                        patterns: [{\n                                include: \"#comment\"\n                            }, {\n                                include: \"#template\"\n                            }, {\n                                include: \"#caption\"\n                            }, {\n                                include: \"#tr\"\n                            }, {\n                                include: \"#th\"\n                            }, {\n                                include: \"#td\"\n                            }]\n                    }],\n                repository: {\n                    caption: {\n                        name: \"meta.tag.block.table-caption\",\n                        begin: \"^\\\\s*(\\\\|\\\\+)\",\n                        end: \"$\",\n                        beginCaptures: {\n                            1: {\n                                name: \"punctuation.definition.tag.begin\"\n                            }\n                        }\n                    },\n                    tr: {\n                        name: \"meta.tag.block.tr\",\n                        match: \"^\\\\s*(\\\\|\\\\-)[\\\\s]*(.*)\",\n                        captures: {\n                            1: {\n                                name: \"punctuation.definition.tag.begin\"\n                            },\n                            2: {\n                                name: \"invalid.illegal\"\n                            }\n                        }\n                    },\n                    th: {\n                        name: \"meta.tag.block.th.heading\",\n                        begin: \"^\\\\s*(!)((.*?)(\\\\|))?(.*?)(?=(!!)|$)\",\n                        end: \"$\",\n                        beginCaptures: {\n                            1: {\n                                name: \"punctuation.definition.tag.begin\"\n                            },\n                            3: {\n                                patterns: [{\n                                        include: \"#attribute\"\n                                    }]\n                            },\n                            4: {\n                                name: \"punctuation.definition.tag\"\n                            },\n                            5: {\n                                name: \"markup.bold\"\n                            }\n                        },\n                        patterns: [{\n                                name: \"meta.tag.block.th.inline\",\n                                match: \"(!!)((.*?)(\\\\|))?(.*?)(?=(!!)|$)\",\n                                captures: {\n                                    1: {\n                                        name: \"punctuation.definition.tag.begin\"\n                                    },\n                                    3: {\n                                        patterns: [{\n                                                include: \"#attribute\"\n                                            }]\n                                    },\n                                    4: {\n                                        name: \"punctuation.definition.tag\"\n                                    },\n                                    5: {\n                                        name: \"markup.bold\"\n                                    }\n                                }\n                            }, {\n                                include: \"$self\"\n                            }]\n                    },\n                    td: {\n                        name: \"meta.tag.block.td\",\n                        begin: \"^\\\\s*(\\\\|)\",\n                        end: \"$\",\n                        beginCaptures: {\n                            1: {\n                                name: \"punctuation.definition.tag.begin\"\n                            },\n                            2: {\n                                patterns: [{\n                                        include: \"#attribute\"\n                                    }]\n                            },\n                            3: {\n                                name: \"punctuation.definition.tag\"\n                            }\n                        },\n                        patterns: [{\n                                include: \"$self\"\n                            }]\n                    }\n                }\n            }],\n        \"#attribute\": [{\n                include: \"#string\"\n            }, {\n                token: \"entity.other.attribute-name\",\n                regex: /\\w+/\n            }],\n        \"#string\": [{\n                token: \"string.quoted.double\",\n                regex: /\\\"/,\n                push: [{\n                        token: \"string.quoted.double\",\n                        regex: /\\\"/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string.quoted.double\"\n                    }]\n            }, {\n                token: \"string.quoted.single\",\n                regex: /\\'/,\n                push: [{\n                        token: \"string.quoted.single\",\n                        regex: /\\'/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string.quoted.single\"\n                    }]\n            }],\n        \"#url\": [{\n                token: \"markup.underline.link\",\n                regex: /(?:http(?:s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:\\/?#\\[\\]@!\\$&'\\(\\)\\*\\+,;=.]+/\n            }, {\n                token: \"invalid.illegal\",\n                regex: /.*/\n            }]\n    };\n    this.normalizeRules();\n};\nMediaWikiHighlightRules.metaData = {\n    name: \"MediaWiki\",\n    scopeName: \"text.html.mediawiki\",\n    fileTypes: [\"mediawiki\", \"wiki\"]\n};\noop.inherits(MediaWikiHighlightRules, TextHighlightRules);\nexports.MediaWikiHighlightRules = MediaWikiHighlightRules;\n\n});\n\nace.define(\"ace/mode/mediawiki\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mediawiki_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MediaWikiHighlightRules = require(\"./mediawiki_highlight_rules\").MediaWikiHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = MediaWikiHighlightRules;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.type = \"text\";\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.$id = \"ace/mode/mediawiki\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/mediawiki\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-mel.js",
    "content": "ace.define(\"ace/mode/mel_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* THIS FILE WAS AUTOGENERATED FROM MEL.tmLanguage (UUID: 69554E52-391D-42BC-9F65-7A77444BA1CF) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar MELHighlightRules = function () {\n    this.$rules = { start: [{ caseInsensitive: true,\n                token: 'storage.type.mel',\n                regex: '\\\\b(matrix|string|vector|float|int|void)\\\\b' },\n            { caseInsensitive: true,\n                token: 'support.function.mel',\n                regex: '\\\\b((s(h(ow(ManipCtx|S(hadingGroupAttrEditor|electionInTitle)|H(idden|elp)|Window)|el(f(Button|TabLayout|Layout)|lField)|ading(GeometryRelCtx|Node|Connection|LightRelCtx))|y(s(tem|File)|mbol(Button|CheckBox))|nap(shot|Mode|2to2 |TogetherCtx|Key)|c(ulpt|ene(UIReplacement|Editor)|ale(BrushBrightness |Constraint|Key(Ctx)?)?|r(ipt(Node|Ctx|Table|edPanel(Type)?|Job|EditorInfo)|oll(Field|Layout))|mh)|t(itch(Surface(Points)?|AndExplodeShell )|a(ckTrace|rt(sWith |String ))|r(cmp|i(ng(ToStringArray |Array(Remove(Duplicates | )|C(ount |atenate )|ToString |Intersector))|p )|oke))|i(n(gleProfileBirailSurface)?|ze|gn|mplify)|o(u(nd(Control)?|rce)|ft(Mod(Ctx)?)?|rt)|u(perCtx|rface(S(haderList|ampler))?|b(st(itute(Geometry|AllString )?|ring)|d(M(irror|a(tchTopology|p(SewMove|Cut)))|iv(Crease|DisplaySmoothness)?|C(ollapse|leanTopology)|T(o(Blind|Poly)|ransferUVsToCache)|DuplicateAndConnect|EditUV|ListComponentConversion|AutoProjection)))|p(h(ere|rand)|otLight(PreviewPort)?|aceLocator|r(ing|eadSheetEditor))|e(t(s|MenuMode|Sta(te |rtupMessage|mpDensity )|NodeTypeFlag|ConstraintRestPosition |ToolTo|In(putDeviceMapping|finity)|D(ynamic|efaultShadingGroup|rivenKeyframe)|UITemplate|P(ar(ticleAttr|ent)|roject )|E(scapeCtx|dit(or|Ctx))|Key(Ctx|frame|Path)|F(ocus|luidAttr)|Attr(Mapping)?)|parator|ed|l(ect(Mode|ionConnection|Context|Type|edNodes|Pr(iority|ef)|Key(Ctx)?)?|LoadSettings)|archPathArray )|kin(Cluster|Percent)|q(uareSurface|rt)|w(itchTable|atchDisplayPort)|a(ve(Menu|Shelf|ToolSettings|I(nitialState|mage)|Pref(s|Objects)|Fluid|A(ttrPreset |llShelves))|mpleImage)|rtContext|mooth(step|Curve|TangentSurface))|h(sv_to_rgb|yp(ot|er(Graph|Shade|Panel))|i(tTest|de|lite)|ot(Box|key(Check)?)|ud(Button|Slider(Button)?)|e(lp(Line)?|adsUpDisplay|rmite)|wRe(nder(Load)?|flectionMap)|ard(enPointCurve|ware(RenderPanel)?))|n(o(nLinear|ise|de(Type|IconButton|Outliner|Preset)|rmal(ize |Constraint))|urbs(Boolean|S(elect|quare)|C(opyUVSet|ube)|To(Subdiv|Poly(gonsPref)?)|Plane|ViewDirectionVector )|ew(ton|PanelItems)|ame(space(Info)?|Command|Field))|c(h(oice|dir|eck(Box(Grp)?|DefaultRenderGlobals)|a(n(nelBox|geSubdiv(Region|ComponentDisplayLevel))|racter(Map|OutlineEditor)?))|y(cleCheck|linder)|tx(Completion|Traverse|EditMode|Abort)|irc(ularFillet|le)|o(s|n(str(uctionHistory|ain(Value)?)|nect(ionInfo|Control|Dynamic|Joint|Attr)|t(extInfo|rol)|dition|e|vert(SolidTx|Tessellation|Unit|FromOldLayers |Lightmap)|firmDialog)|py(SkinWeights|Key|Flexor|Array )|l(or(Slider(Grp|ButtonGrp)|Index(SliderGrp)?|Editor|AtPoint)?|umnLayout|lision)|arsenSubdivSelectionList|m(p(onentEditor|utePolysetVolume |actHairSystem )|mand(Port|Echo|Line)))|u(tKey|r(ve(MoveEPCtx|SketchCtx|CVCtx|Intersect|OnSurface|E(ditorCtx|PCtx)|AddPtCtx)?|rent(Ctx|Time(Ctx)?|Unit)))|p(GetSolverAttr|Button|S(olver(Types)?|e(t(SolverAttr|Edit)|am))|C(o(nstraint|llision)|ache)|Tool|P(anel|roperty))|eil|l(ip(Schedule(rOutliner)?|TrimBefore |Editor(CurrentTimeCtx)?)?|ose(Surface|Curve)|uster|ear(Cache)?|amp)|a(n(CreateManip|vas)|tch(Quiet)?|pitalizeString |mera(View)?)|r(oss(Product )?|eate(RenderLayer|MotionField |SubdivRegion|N(ode|ewShelf )|D(isplayLayer|rawCtx)|Editor))|md(Shell|FileOutput))|M(R(ender(ShadowData|Callback|Data|Util|View|Line(Array)?)|ampAttribute)|G(eometryData|lobal)|M(odelMessage|essage|a(nipData|t(erial|rix)))|BoundingBox|S(yntax|ceneMessage|t(atus|ring(Array)?)|imple|pace|elect(ion(Mask|List)|Info)|watchRender(Register|Base))|H(ardwareRenderer|WShaderSwatchGenerator)|NodeMessage|C(o(nditionMessage|lor(Array)?|m(putation|mand(Result|Message)))|ursor|loth(Material|S(ystem|olverRegister)|Con(straint|trol)|Triangle|Particle|Edge|Force)|allbackIdArray)|T(ypeId|ime(r(Message)?|Array)?|oolsInfo|esselationParams|r(imBoundaryArray|ansformationMatrix))|I(ntArray|t(Geometry|Mesh(Polygon|Edge|Vertex|FaceVertex)|S(urfaceCV|electionList)|CurveCV|Instancer|eratorType|D(ependency(Graph|Nodes)|ag)|Keyframe)|k(System|HandleGroup)|mage)|3dView|Object(SetMessage|Handle|Array)?|D(G(M(odifier|essage)|Context)|ynSwept(Triangle|Line)|istance|oubleArray|evice(State|Channel)|a(ta(Block|Handle)|g(M(odifier|essage)|Path(Array)?))|raw(Request(Queue)?|Info|Data|ProcedureBase))|U(serEventMessage|i(nt(Array|64Array)|Message))|P(o(int(Array)?|lyMessage)|lug(Array)?|rogressWindow|x(G(eometry(Iterator|Data)|lBuffer)|M(idiInputDevice|odelEditorCommand|anipContainer)|S(urfaceShape(UI)?|pringNode|electionContext)|HwShaderNode|Node|Co(ntext(Command)?|m(ponentShape|mand))|T(oolCommand|ransform(ationMatrix)?)|IkSolver(Node)?|3dModelView|ObjectSet|D(eformerNode|ata|ragAndDropBehavior)|PolyT(weakUVCommand|rg)|EmitterNode|F(i(eldNode|leTranslator)|luidEmitterNode)|LocatorNode))|E(ulerRotation|vent(Message)?)|ayatomr|Vector(Array)?|Quaternion|F(n(R(otateManip|eflectShader|adialField)|G(e(nericAttribute|ometry(Data|Filter))|ravityField)|M(otionPath|es(sageAttribute|h(Data)?)|a(nip3D|trix(Data|Attribute)))|B(l(innShader|endShapeDeformer)|ase)|S(caleManip|t(ateManip|ring(Data|ArrayData))|ingleIndexedComponent|ubd(Names|Data)?|p(hereData|otLight)|et|kinCluster)|HikEffector|N(on(ExtendedLight|AmbientLight)|u(rbs(Surface(Data)?|Curve(Data)?)|meric(Data|Attribute))|ewtonField)|C(haracter|ircleSweepManip|ompo(nent(ListData)?|undAttribute)|urveSegmentManip|lip|amera)|T(ypedAttribute|oggleManip|urbulenceField|r(ipleIndexedComponent|ansform))|I(ntArrayData|k(Solver|Handle|Joint|Effector))|D(ynSweptGeometryData|i(s(cManip|tanceManip)|rection(Manip|alLight))|ouble(IndexedComponent|ArrayData)|ependencyNode|a(ta|gNode)|ragField)|U(ni(tAttribute|formField)|Int64ArrayData)|P(hong(Shader|EShader)|oint(On(SurfaceManip|CurveManip)|Light|ArrayData)|fxGeometry|lugin(Data)?|arti(cleSystem|tion))|E(numAttribute|xpression)|V(o(lume(Light|AxisField)|rtexField)|ectorArrayData)|KeyframeDelta(Move|B(lockAddRemove|reakdown)|Scale|Tangent|InfType|Weighted|AddRemove)?|F(ield|luid|reePointTriadManip)|W(ireDeformer|eightGeometryFilter)|L(ight(DataAttribute)?|a(yeredShader|ttice(D(eformer|ata))?|mbertShader))|A(ni(sotropyShader|mCurve)|ttribute|irField|r(eaLight|rayAttrsData)|mbientLight))?|ile(IO|Object)|eedbackLine|loat(Matrix|Point(Array)?|Vector(Array)?|Array))|L(i(ghtLinks|brary)|ockMessage)|A(n(im(Message|C(ontrol|urveC(hange|lipboard(Item(Array)?)?))|Util)|gle)|ttribute(Spec(Array)?|Index)|r(rayData(Builder|Handle)|g(Database|Parser|List))))|t(hreePointArcCtx|ime(Control|Port|rX)|o(ol(Button|HasOptions|Collection|Dropped|PropertyWindow)|NativePath |upper|kenize(List )?|l(ower|erance)|rus|ggle(WindowVisibility|Axis)?)|u(rbulence|mble(Ctx)?)|ex(RotateContext|M(oveContext|anipContext)|t(ScrollList|Curves|ure(HairColor |DisplacePlane |PlacementContext|Window)|ToShelf |Field(Grp|ButtonGrp)?)?|S(caleContext|electContext|mudgeUVContext)|WinToolCtx)|woPointArcCtx|a(n(gentConstraint)?|bLayout)|r(im|unc(ate(HairCache|FluidCache))?|a(ns(formLimits|lator)|c(e|k(Ctx)?))))|i(s(olateSelect|Connected|True|Dirty|ParentOf |Valid(String |ObjectName |UiName )|AnimCurve )|n(s(tance(r)?|ert(Joint(Ctx)?|K(not(Surface|Curve)|eyCtx)))|heritTransform|t(S(crollBar|lider(Grp)?)|er(sect|nalVar|ToUI )|Field(Grp)?))|conText(Radio(Button|Collection)|Button|StaticLabel|CheckBox)|temFilter(Render|Type|Attr)?|prEngine|k(S(ystem(Info)?|olver|plineHandleCtx)|Handle(Ctx|DisplayScale)?|fkDisplayMethod)|m(portComposerCurves |fPlugins|age))|o(ceanNurbsPreviewPlane |utliner(Panel|Editor)|p(tion(Menu(Grp)?|Var)|en(GLExtension|MayaPref))|verrideModifier|ffset(Surface|Curve(OnSurface)?)|r(ientConstraint|bit(Ctx)?)|b(soleteProc |j(ect(Center|Type(UI)?|Layer )|Exists)))|d(yn(RelEd(itor|Panel)|Globals|C(ontrol|ache)|P(a(intEditor|rticleCtx)|ref)|Exp(ort|ression)|amicLoad)|i(s(connect(Joint|Attr)|tanceDim(Context|ension)|pla(y(RGBColor|S(tats|urface|moothness)|C(olor|ull)|Pref|LevelOfDetail|Affected)|cementToPoly)|kCache|able)|r(name |ect(ionalLight|KeyCtx)|map)|mWhen)|o(cServer|Blur|t(Product )?|ubleProfileBirailSurface|peSheetEditor|lly(Ctx)?)|uplicate(Surface|Curve)?|e(tach(Surface|Curve|DeviceAttr)|vice(Panel|Editor)|f(ine(DataServer|VirtualDevice)|ormer|ault(Navigation|LightListCheckBox))|l(ete(Sh(elfTab |adingGroupsAndMaterials )|U(nusedBrushes |I)|Attr)?|randstr)|g_to_rad)|agPose|r(opoffLocator|ag(gerContext)?)|g(timer|dirty|Info|eval))|CBG |u(serCtx|n(t(angleUV|rim)|i(t|form)|do(Info)?|loadPlugin|assignInputDevice|group)|iTemplate|p(dateAE |Axis)|v(Snapshot|Link))|joint(C(tx|luster)|DisplayScale|Lattice)?|p(sd(ChannelOutliner|TextureFile|E(ditTextureFile|xport))|close|i(c(ture|kWalk)|xelMove)|o(se|int(MatrixMult |C(onstraint|urveConstraint)|On(Surface|Curve)|Position|Light)|p(upMenu|en)|w|l(y(Reduce|GeoSampler|M(irrorFace|ove(UV|Edge|Vertex|Facet(UV)?)|erge(UV|Edge(Ctx)?|Vertex|Facet(Ctx)?)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|l(indData|endColor))|S(traightenUVBorder|oftEdge|u(perCtx|bdivide(Edge|Facet))|p(her(icalProjection|e)|lit(Ring|Ctx|Edge|Vertex)?)|e(tToFaceNormal|parate|wEdge|lect(Constraint(Monitor)?|EditCtx))|mooth)|Normal(izeUV|PerVertex)?|C(hipOff|ylind(er|ricalProjection)|o(ne|pyUV|l(or(BlindData|Set|PerVertex)|lapse(Edge|Facet)))|u(t(Ctx)?|be)|l(ipboard|oseBorder)|acheMonitor|rea(seEdge|teFacet(Ctx)?))|T(o(Subdiv|rus)|r(iangulate|ansfer))|In(stallAction|fo)|Options|D(uplicate(Edge|AndConnect)|el(Edge|Vertex|Facet))|U(nite|VSet)|P(yramid|oke|lan(e|arProjection)|r(ism|ojection))|E(ditUV|valuate|xtrude(Edge|Facet))|Qu(eryBlindData|ad)|F(orceUV|lip(UV|Edge))|WedgeFace|L(istComponentConversion|ayoutUV)|A(utoProjection|ppend(Vertex|FacetCtx)?|verage(Normal|Vertex)))|eVectorConstraint))|utenv|er(cent|formanceOptions)|fxstrokes|wd|l(uginInfo|a(y(b(last|ackOptions))?|n(e|arSrf)))|a(steKey|ne(l(History|Configuration)?|Layout)|thAnimation|irBlend|use|lettePort|r(ti(cle(RenderInfo|Instancer|Exists)?|tion)|ent(Constraint)?|am(Dim(Context|ension)|Locator)))|r(int|o(j(ect(ion(Manip|Context)|Curve|Tangent)|FileViewer)|pMo(dCtx|ve)|gress(Bar|Window)|mptDialog)|eloadRefEd))|e(n(codeString|d(sWith |String )|v|ableDevice)|dit(RenderLayer(Globals|Members)|or(Template)?|DisplayLayer(Globals|Members)|AttrLimits )|v(ent|al(Deferred|Echo)?)|quivalent(Tol | )|ffector|r(f|ror)|x(clusiveLightCheckBox|t(end(Surface|Curve)|rude)|ists|p(ortComposerCurves |ression(EditorListen)?)?|ec(uteForEachObject )?|actWorldBoundingBox)|mit(ter)?)|v(i(sor|ew(Set|HeadOn|2dToolCtx|C(lipPlane|amera)|Place|Fit|LookAt))|o(lumeAxis|rtex)|e(ctorize|rifyCmd )|alidateShelfName )|key(Tangent|frame(Region(MoveKeyCtx|S(caleKeyCtx|e(tKeyCtx|lectKeyCtx))|CurrentTimeCtx|TrackCtx|InsertKeyCtx|D(irectKeyCtx|ollyCtx))|Stats|Outliner)?)|qu(it|erySubdiv)|f(c(heck|lose)|i(nd(RelatedSkinCluster |MenuItem |er|Keyframe|AllIntersections )|tBspline|l(ter(StudioImport|Curve|Expand)?|e(BrowserDialog|test|Info|Dialog|Extension )?|letCurve)|rstParentOf )|o(ntDialog|pen|rmLayout)|print|eof|flush|write|l(o(or|w|at(S(crollBar|lider(Grp|ButtonGrp|2)?)|Eq |Field(Grp)?))|u(shUndo|id(CacheInfo|Emitter|VoxelInfo))|exor)|r(omNativePath |e(eFormFillet|wind|ad)|ameLayout)|get(word|line)|mod)|w(hatIs|i(ndow(Pref)?|re(Context)?)|orkspace|ebBrowser(Prefs)?|a(itCursor|rning)|ri(nkle(Context)?|teTake))|l(s(T(hroughFilter|ype )|UI)?|i(st(Relatives|MenuAnnotation |Sets|History|NodeTypes|C(onnections|ameras)|Transforms |InputDevice(s|Buttons|Axes)|erEditor|DeviceAttachments|Unselected |A(nimatable|ttr))|n(step|eIntersection )|ght(link|List(Panel|Editor)?))|o(ckNode|okThru|ft|ad(NewShelf |P(lugin|refObjects)|Fluid)|g)|a(ssoContext|y(out|er(Button|ed(ShaderPort|TexturePort)))|ttice(DeformKeyCtx)?|unch(ImageEditor)?))|a(ssign(Command|InputDevice)|n(notate|im(C(one|urveEditor)|Display|View)|gle(Between)?)|tt(ach(Surface|Curve|DeviceAttr)|r(ibute(Menu|Info|Exists|Query)|NavigationControlGrp|Co(ntrolGrp|lorSliderGrp|mpatibility)|PresetEditWin|EnumOptionMenu(Grp)?|Field(Grp|SliderGrp)))|i(r|mConstraint)|d(d(NewShelfTab|Dynamic|PP|Attr(ibuteEditorNodeHelp)?)|vanceToNextDrivenKey)|uto(Place|Keyframe)|pp(endStringArray|l(y(Take|AttrPreset)|icationName))|ffect(s|edNet)|l(i(as(Attr)?|gn(Surface|C(tx|urve))?)|lViewFit)|r(c(len|Len(DimContext|gthDimension))|t(BuildPaintMenu|Se(tPaintCtx|lectCtx)|3dPaintCtx|UserPaintCtx|PuttyCtx|FluidAttrCtx|Attr(SkinPaintCtx|Ctx|PaintVertexCtx))|rayMapper)|mbientLight|b(s|out))|r(igid(Body|Solver)|o(t(at(ionInterpolation|e))?|otOf |undConstantRadius|w(ColumnLayout|Layout)|ll(Ctx)?)|un(up|TimeCommand)|e(s(olutionNode|et(Tool|AE )|ampleFluid)|hash|n(der(GlobalsNode|Manip|ThumbnailUpdate|Info|er|Partition|QualityNode|Window(SelectContext|Editor)|LayerButton)?|ame(SelectionList |UI|Attr)?)|cord(Device|Attr)|target|order(Deformers)?|do|v(olve|erse(Surface|Curve))|quires|f(ineSubdivSelectionList|erence(Edit|Query)?|resh(AE )?)|loadImage|adTake|root|move(MultiInstance|Joint)|build(Surface|Curve))|a(n(d(state|omizeFollicles )?|geControl)|d(i(o(MenuItemCollection|Button(Grp)?|Collection)|al)|_to_deg)|mpColorPort)|gb_to_hsv)|g(o(toBindPose |al)|e(t(M(odifiers|ayaPanelTypes )|Classification|InputDeviceRange|pid|env|DefaultBrush|Pa(nel|rticleAttr)|F(ileList|luidAttr)|A(ttr|pplicationVersionAsFloat ))|ometryConstraint)|l(Render(Editor)?|obalStitch)|a(uss|mma)|r(id(Layout)?|oup(ObjectsByName )?|a(dientControl(NoAttr)?|ph(SelectContext|TrackCtx|DollyCtx)|vity|bColor))|match)|x(pmPicker|form|bmLangPathList )|m(i(n(imizeApp)?|rrorJoint)|o(del(CurrentTimeCtx|Panel|Editor)|use|v(In|e(IKtoFK |VertexAlongDirection|KeyCtx)?|Out))|u(te|ltiProfileBirailSurface)|e(ssageLine|nu(BarLayout|Item(ToShelf )?|Editor)?|mory)|a(nip(Rotate(Context|LimitsCtx)|Move(Context|LimitsCtx)|Scale(Context|LimitsCtx)|Options)|tch|ke(Roll |SingleSurface|TubeOn |Identity|Paintable|bot|Live)|rker|g|x))|b(in(Membership|d(Skin|Pose))|o(neLattice|undary|x(ZoomCtx|DollyCtx))|u(tton(Manip)?|ild(BookmarkMenu|KeyframeMenu)|fferCurve)|e(ssel|vel(Plus)?)|l(indDataType|end(Shape(Panel|Editor)?|2|TwoAttr))|a(sename(Ex | )|tchRender|ke(Results|Simulation|Clip|PartialHistory|FluidShading )))))\\\\b' },\n            { caseInsensitive: true,\n                token: 'support.constant.mel',\n                regex: '\\\\b(s(h(ellTessellate|a(d(ing(Map|Engine)|erGlow)|pe))|n(ow|apshot(Shape)?)|c(ulpt|aleConstraint|ript)|t(yleCurve|itch(Srf|AsNurbsShell)|u(cco|dioClearCoat)|encil|roke(Globals)?)|i(ngleShadingSwitch|mpleVolumeShader)|o(ftMod(Manip|Handle)?|lidFractal)|u(rface(Sha(der|pe)|Info|EdManip|VarGroup|Luminance)|b(Surface|d(M(odifier(UV|World)?|ap(SewMove|Cut|pingManip))|B(lindData|ase)|iv(ReverseFaces|SurfaceVarGroup|Co(llapse|mponentId)|To(Nurbs|Poly))?|HierBlind|CleanTopology|Tweak(UV)?|P(lanarProj|rojManip)|LayoutUV|A(ddTopology|utoProj))|Curve))|p(BirailSrf|otLight|ring)|e(tRange|lectionListOperator)|k(inCluster|etchPlane)|quareSrf|ampler(Info)?|m(ooth(Curve|TangentSrf)|ear))|h(svToRgb|yper(GraphInfo|View|Layout)|ik(Solver|Handle|Effector)|oldMatrix|eightField|w(Re(nderGlobals|flectionMap)|Shader)|a(ir(System|Constraint|TubeShader)|rd(enPoint|wareRenderGlobals)))|n(o(n(ExtendedLightShapeNode|Linear|AmbientLightShapeNode)|ise|rmalConstraint)|urbs(Surface|Curve|T(oSubdiv(Proc)?|essellate)|DimShape)|e(twork|wtonField))|c(h(o(ice|oser)|ecker|aracter(Map|Offset)?)|o(n(straint|tr(olPoint|ast)|dition)|py(ColorSet|UVSet))|urve(Range|Shape|Normalizer(Linear|Angle)?|In(tersect|fo)|VarGroup|From(Mesh(CoM|Edge)?|Su(rface(Bnd|CoS|Iso)?|bdiv(Edge|Face)?)))|l(ip(Scheduler|Library)|o(se(stPointOnSurface|Surface|Curve)|th|ud)|uster(Handle)?|amp)|amera(View)?|r(eate(BPManip|ColorSet|UVSet)|ater))|t(ime(ToUnitConversion|Function)?|oo(nLineAttributes|lDrawManip)|urbulenceField|ex(BaseDeformManip|ture(BakeSet|2d|ToGeom|3d|Env)|SmudgeUVManip|LatticeDeformManip)|weak|angentConstraint|r(i(pleShadingSwitch|m(WithBoundaries)?)|ansform(Geometry)?))|i(n(s(tancer|ertKnot(Surface|Curve))|tersectSurface)|k(RPsolver|MCsolver|S(ystem|olver|Csolver|plineSolver)|Handle|PASolver|Effector)|m(plicit(Box|Sphere|Cone)|agePlane))|o(cean(Shader)?|pticalFX|ffset(Surface|C(os|urve))|ldBlindDataBase|rient(Constraint|ationMarker)|bject(RenderFilter|MultiFilter|BinFilter|S(criptFilter|et)|NameFilter|TypeFilter|Filter|AttrFilter))|d(yn(Globals|Base)|i(s(tance(Between|DimShape)|pla(yLayer(Manager)?|cementShader)|kCache)|rect(ionalLight|edDisc)|mensionShape)|o(ubleShadingSwitch|f)|pBirailSrf|e(tach(Surface|Curve)|pendNode|f(orm(Bend|S(ine|quash)|Twist|ableShape|F(unc|lare)|Wave)|ault(RenderUtilityList|ShaderList|TextureList|LightList))|lete(Co(lorSet|mponent)|UVSet))|ag(Node|Pose)|r(opoffLocator|agField))|u(seBackground|n(trim|i(t(Conversion|ToTimeConversion)|formField)|known(Transform|Dag)?)|vChooser)|j(iggle|oint(Cluster|Ffd|Lattice)?)|p(sdFileTex|hong(E)?|o(s(tProcessList|itionMarker)|int(MatrixMult|Constraint|On(SurfaceInfo|CurveInfo)|Emitter|Light)|l(y(Reduce|M(irror|o(difier(UV|World)?|ve(UV|Edge|Vertex|Face(tUV)?))|erge(UV|Edge|Vert|Face)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|lindData|ase)|S(traightenUVBorder|oftEdge|ubd(Edge|Face)|p(h(ere|Proj)|lit(Ring|Edge|Vert)?)|e(parate|wEdge)|mooth(Proxy|Face)?)|Normal(izeUV|PerVertex)?|C(hipOff|yl(inder|Proj)|o(ne|pyUV|l(orPerVertex|lapse(Edge|F)))|u(t(Manip(Container)?)?|be)|loseBorder|rea(seEdge|t(or|eFace)))|T(o(Subdiv|rus)|weak(UV)?|r(iangulate|ansfer))|OptUvs|D(uplicateEdge|el(Edge|Vertex|Facet))|Unite|P(yramid|oke(Manip)?|lan(e|arProj)|r(i(sm|mitive)|oj))|Extrude(Edge|Vertex|Face)|VertexNormalManip|Quad|Flip(UV|Edge)|WedgeFace|LayoutUV|A(utoProj|ppend(Vertex)?|verageVertex))|eVectorConstraint))|fx(Geometry|Hair|Toon)|l(usMinusAverage|a(n(e|arTrimSurface)|ce(2dTexture|3dTexture)))|a(ssMatrix|irBlend|r(ti(cle(SamplerInfo|C(olorMapper|loud)|TranspMapper|IncandMapper|AgeMapper)?|tion)|ent(Constraint|Tessellate)|amDimension))|r(imitive|o(ject(ion|Curve|Tangent)|xyManager)))|e(n(tity|v(Ball|ironmentFog|S(phere|ky)|C(hrome|ube)|Fog))|x(t(end(Surface|Curve)|rude)|p(lodeNurbsShell|ression)))|v(iewManip|o(lume(Shader|Noise|Fog|Light|AxisField)|rtexField)|e(ctor(RenderGlobals|Product)|rtexBakeSet))|quadShadingSwitch|f(i(tBspline|eld|l(ter(Resample|Simplify|ClosestSample|Euler)?|e|letCurve))|o(urByFourMatrix|llicle)|urPointOn(MeshInfo|Subd)|f(BlendSrf(Obsolete)?|d|FilletSrf)|l(ow|uid(S(hape|liceManip)|Texture(2D|3D)|Emitter)|exorShape)|ra(ctal|meCache))|w(tAddMatrix|ire|ood|eightGeometryFilter|ater|rap)|l(ight(Info|Fog|Li(st|nker))?|o(cator|okAt|d(Group|Thresholds)|ft)|uminance|ea(stSquaresModifier|ther)|a(yered(Shader|Texture)|ttice|mbert))|a(n(notationShape|i(sotropic|m(Blend(InOut)?|C(urve(T(T|U|L|A)|U(T|U|L|A))?|lip)))|gleBetween)|tt(ach(Surface|Curve)|rHierarchyTest)|i(rField|mConstraint)|dd(Matrix|DoubleLinear)|udio|vg(SurfacePoints|NurbsSurfacePoints|Curves)|lign(Manip|Surface|Curve)|r(cLengthDimension|tAttrPaintTest|eaLight|rayMapper)|mbientLight|bstractBase(NurbsConversion|Create))|r(igid(Body|Solver|Constraint)|o(ck|undConstantRadius)|e(s(olution|ultCurve(TimeTo(Time|Unitless|Linear|Angular))?)|nder(Rect|Globals(List)?|Box|Sphere|Cone|Quality|L(ight|ayer(Manager)?))|cord|v(olve(dPrimitive)?|erse(Surface|Curve)?)|f(erence|lect)|map(Hsv|Color|Value)|build(Surface|Curve))|a(dialField|mp(Shader)?)|gbToHsv|bfSrf)|g(uide|eo(Connect(or|able)|metry(Shape|Constraint|VarGroup|Filter))|lobal(Stitch|CacheControl)|ammaCorrect|r(id|oup(Id|Parts)|a(nite|vityField)))|Fur(Globals|Description|Feedback|Attractors)|xformManip|m(o(tionPath|untain|vie)|u(te|lt(Matrix|i(plyDivide|listerLight)|DoubleLinear))|pBirailSrf|e(sh(VarGroup)?|ntalray(Texture|IblShape))|a(terialInfo|ke(Group|Nurb(sSquare|Sphere|C(ylinder|ircle|one|ube)|Torus|Plane)|CircularArc|T(hreePointCircularArc|extCurves|woPointCircularArc))|rble))|b(irailSrf|o(neLattice|olean|undary(Base)?)|u(lge|mp(2d|3d))|evel(Plus)?|l(in(n|dDataTemplate)|end(Shape|Color(s|Sets)|TwoAttr|Device|Weighted)?)|a(se(GeometryVarGroup|ShadingSwitch|Lattice)|keSet)|r(ownian|ush)))\\\\b' },\n            { caseInsensitive: true,\n                token: 'keyword.control.mel',\n                regex: '\\\\b(if|in|else|for|while|break|continue|case|default|do|switch|return|switch|case|source|catch|alias)\\\\b' },\n            { token: 'keyword.other.mel', regex: '\\\\b(global)\\\\b' },\n            { caseInsensitive: true,\n                token: 'constant.language.mel',\n                regex: '\\\\b(null|undefined)\\\\b' },\n            { token: 'constant.numeric.mel',\n                regex: '\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\\\\b' },\n            { token: 'punctuation.definition.string.begin.mel',\n                regex: '\"',\n                push: [{ token: 'constant.character.escape.mel', regex: '\\\\\\\\.' },\n                    { token: 'punctuation.definition.string.end.mel',\n                        regex: '\"',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.double.mel' }] },\n            { token: ['variable.other.mel', 'punctuation.definition.variable.mel'],\n                regex: '(\\\\$)([a-zA-Z_\\\\x7f-\\\\xff][a-zA-Z0-9_\\\\x7f-\\\\xff]*?\\\\b)' },\n            { token: 'punctuation.definition.string.begin.mel',\n                regex: '\\'',\n                push: [{ token: 'constant.character.escape.mel', regex: '\\\\\\\\.' },\n                    { token: 'punctuation.definition.string.end.mel',\n                        regex: '\\'',\n                        next: 'pop' },\n                    { defaultToken: 'string.quoted.single.mel' }] },\n            { token: 'constant.language.mel',\n                regex: '\\\\b(false|true|yes|no|on|off)\\\\b' },\n            { token: 'punctuation.definition.comment.mel',\n                regex: '/\\\\*',\n                push: [{ token: 'punctuation.definition.comment.mel',\n                        regex: '\\\\*/',\n                        next: 'pop' },\n                    { defaultToken: 'comment.block.mel' }] },\n            { token: ['comment.line.double-slash.mel', 'punctuation.definition.comment.mel'],\n                regex: '(//)(.*$\\\\n?)' },\n            { caseInsensitive: true,\n                token: 'keyword.operator.mel',\n                regex: '\\\\b(instanceof)\\\\b' },\n            { token: 'keyword.operator.symbolic.mel',\n                regex: '[-\\\\!\\\\%\\\\&\\\\*\\\\+\\\\=\\\\/\\\\?\\\\:]' },\n            { token: ['meta.preprocessor.mel', 'punctuation.definition.preprocessor.mel'],\n                regex: '(^[ \\\\t]*)((?:#)[a-zA-Z]+)' },\n            { token: ['meta.function.mel', 'keyword.other.mel', 'storage.type.mel', 'entity.name.function.mel', 'punctuation.section.function.mel'],\n                regex: '(global\\\\s*)?(proc\\\\s*)(\\\\w+\\\\s*\\\\[?\\\\]?\\\\s+|\\\\s+)([A-Za-z_][A-Za-z0-9_\\\\.]*)(\\\\s*\\\\()',\n                push: [{ include: '$self' },\n                    { token: 'punctuation.section.function.mel',\n                        regex: '\\\\)',\n                        next: 'pop' },\n                    { defaultToken: 'meta.function.mel' }] }\n        ] };\n    this.normalizeRules();\n};\noop.inherits(MELHighlightRules, TextHighlightRules);\nexports.MELHighlightRules = MELHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/mel\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mel_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MELHighlightRules = require(\"./mel_highlight_rules\").MELHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = MELHighlightRules;\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/mel\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/mel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-mips.js",
    "content": "ace.define(\"ace/mode/mips_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from mips.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar MIPSHighlightRules = function () {\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    this.$rules = {\n        start: [{\n                token: \"storage.modifier.mips\",\n                regex: /\\.\\b(?:align|ascii|asciiz|byte|double|extern|float|globl|space|word)\\b/,\n                comment: \"Assembler directives for data storage\"\n            }, {\n                token: \"entity.name.section.mips\",\n                regex: /\\.\\b(?:data|text|kdata|ktext|)\\b/,\n                comment: \"Segements: .data .text\"\n            }, {\n                token: \"variable.parameter.mips\",\n                regex: /\\$(?:(?:3[01]|[12]?[0-9]|[0-9])|zero|at|v[01]|a[0-3]|s[0-7]|t[0-9]|k[01]|gp|sp|fp|ra)/,\n                comment: \"Registers by id $1, $2, ...\"\n            }, {\n                token: \"variable.parameter.mips\",\n                regex: /\\$f(?:[0-9]|[1-2][0-9]|3[0-1])/,\n                comment: \"Floating point registers\"\n            }, {\n                token: \"support.function.source.mips\",\n                regex: /\\b(?:(?:add|sub|div|l|mov|mult|neg|s|c\\.eq|c\\.le|c\\.lt)\\.[ds]|cvt\\.s\\.[dw]|cvt\\.d\\.[sw]|cvt\\.w\\.[ds]|bc1[tf])\\b/,\n                comment: \"The MIPS floating-point instruction set\"\n            }, {\n                token: \"support.function.source.mips\",\n                regex: /\\b(?:add|addu|addi|addiu|sub|subu|and|andi|or|not|ori|nor|xor|xori|slt|sltu|slti|sltiu|sll|sllv|rol|srl|sra|srlv|ror|j|jr|jal|beq|bne|lw|sw|lb|sb|lui|move|mfhi|mflo|mthi|mtlo)\\b/,\n                comment: \"Just the hardcoded instructions provided by the MIPS assembly language\"\n            }, {\n                token: \"support.function.other.mips\",\n                regex: /\\b(?:abs|b|beqz|bge|bgt|bgtu|ble|bleu|blt|bltu|bnez|div|divu|la|li|move|mul|neg|not|rem|remu|seq|sge|sgt|sle|sne)\\b/,\n                comment: \"Pseudo instructions\"\n            }, {\n                token: \"entity.name.function.mips\",\n                regex: /\\bsyscall\\b/,\n                comment: \"Other\"\n            }, {\n                token: \"string\",\n                regex: \"(?:'\\\")(?:\" + escapeRe + \"|.)?(?:'\\\")\"\n            }, {\n                token: \"string.start\",\n                regex: '\\'',\n                stateName: \"qstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"string.end\", regex: '\\'|$', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"constant.numeric.mips\",\n                regex: /\\b(?:\\d+|0(?:x|X)[a-fA-F0-9]+)\\b/,\n                comment: \"Numbers like +12, -3, 55, 0x3F\"\n            }, {\n                token: \"entity.name.tag.mips\",\n                regex: /\\b[\\w]+\\b:/,\n                comment: \"Labels at line start: begin_repeat: add ...\"\n            }, {\n                token: \"comment.assembly\",\n                regex: /#.*$/,\n                comment: \"Single line comments\"\n            }]\n    };\n    this.normalizeRules();\n};\nMIPSHighlightRules.metaData = {\n    fileTypes: [\"s\", \"asm\"],\n    name: \"MIPS\",\n    scopeName: \"source.mips\"\n};\noop.inherits(MIPSHighlightRules, TextHighlightRules);\nexports.MIPSHighlightRules = MIPSHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/mips\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mips_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MIPSHighlightRules = require(\"./mips_highlight_rules\").MIPSHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = MIPSHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = [\"#\"];\n    this.$id = \"ace/mode/mips\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/mips\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-mixal.js",
    "content": "ace.define(\"ace/mode/mixal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar MixalHighlightRules = function () {\n    var isValidSymbol = function (string) {\n        return string && string.search(/^[A-Z\\u0394\\u03a0\\u03a30-9]{1,10}$/) > -1 && string.search(/[A-Z\\u0394\\u03a0\\u03a3]/) > -1;\n    };\n    var isValidOp = function (op) {\n        return op && [\n            'NOP', 'ADD', 'FADD', 'SUB', 'FSUB', 'MUL', 'FMUL', 'DIV', 'FDIV', 'NUM', 'CHAR', 'HLT',\n            'SLA', 'SRA', 'SLAX', 'SRAX', 'SLC', 'SRC', 'MOVE', 'LDA', 'LD1', 'LD2', 'LD3', 'LD4',\n            'LD5', 'LD6', 'LDX', 'LDAN', 'LD1N', 'LD2N', 'LD3N', 'LD4N', 'LD5N', 'LD6N', 'LDXN',\n            'STA', 'ST1', 'ST2', 'ST3', 'ST4', 'ST5', 'ST6', 'STX', 'STJ', 'STZ', 'JBUS', 'IOC',\n            'IN', 'OUT', 'JRED', 'JMP', 'JSJ', 'JOV', 'JNOV', 'JL', 'JE', 'JG', 'JGE', 'JNE', 'JLE',\n            'JAN', 'JAZ', 'JAP', 'JANN', 'JANZ', 'JANP', 'J1N', 'J1Z', 'J1P', 'J1NN', 'J1NZ',\n            'J1NP', 'J2N', 'J2Z', 'J2P', 'J2NN', 'J2NZ', 'J2NP', 'J3N', 'J3Z', 'J3P', 'J3NN', 'J3NZ',\n            'J3NP', 'J4N', 'J4Z', 'J4P', 'J4NN', 'J4NZ', 'J4NP', 'J5N', 'J5Z', 'J5P', 'J5NN',\n            'J5NZ', 'J5NP', 'J6N', 'J6Z', 'J6P', 'J6NN', 'J6NZ', 'J6NP', 'JXAN', 'JXZ', 'JXP',\n            'JXNN', 'JXNZ', 'JXNP', 'INCA', 'DECA', 'ENTA', 'ENNA', 'INC1', 'DEC1', 'ENT1', 'ENN1',\n            'INC2', 'DEC2', 'ENT2', 'ENN2', 'INC3', 'DEC3', 'ENT3', 'ENN3', 'INC4', 'DEC4', 'ENT4',\n            'ENN4', 'INC5', 'DEC5', 'ENT5', 'ENN5', 'INC6', 'DEC6', 'ENT6', 'ENN6', 'INCX', 'DECX',\n            'ENTX', 'ENNX', 'CMPA', 'FCMP', 'CMP1', 'CMP2', 'CMP3', 'CMP4', 'CMP5', 'CMP6', 'CMPX',\n            'EQU', 'ORIG', 'CON', 'ALF', 'END'\n        ].indexOf(op) > -1;\n    };\n    var containsOnlySupportedCharacters = function (string) {\n        return string && string.search(/[^ A-Z\\u0394\\u03a0\\u03a30-9.,()+*/=$<>@;:'-]/) == -1;\n    };\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.line.character\",\n                regex: /^ *\\*.*$/\n            }, {\n                token: function (label, space0, keyword, space1, literal, comment) {\n                    return [\n                        isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                        \"text\",\n                        \"keyword.control\",\n                        \"text\",\n                        containsOnlySupportedCharacters(literal) ? \"text\" : \"invalid.illegal\",\n                        \"comment.line.character\"\n                    ];\n                },\n                regex: /^(\\S+)?( +)(ALF)(  )(.{5})(\\s+.*)?$/\n            }, {\n                token: function (label, space0, keyword, space1, literal, comment) {\n                    return [\n                        isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                        \"text\",\n                        \"keyword.control\",\n                        \"text\",\n                        containsOnlySupportedCharacters(literal) ? \"text\" : \"invalid.illegal\",\n                        \"comment.line.character\"\n                    ];\n                },\n                regex: /^(\\S+)?( +)(ALF)( )(\\S.{4})(\\s+.*)?$/\n            }, {\n                token: function (label, space0, op, comment) {\n                    return [\n                        isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                        \"text\",\n                        isValidOp(op) ? \"keyword.control\" : \"invalid.illegal\",\n                        \"comment.line.character\"\n                    ];\n                },\n                regex: /^(\\S+)?( +)(\\S+)(?:\\s*)$/\n            }, {\n                token: function (label, space0, op, space1, address, comment) {\n                    return [\n                        isValidSymbol(label) ? \"variable.other\" : \"invalid.illegal\",\n                        \"text\",\n                        isValidOp(op) ? \"keyword.control\" : \"invalid.illegal\",\n                        \"text\",\n                        containsOnlySupportedCharacters(address) ? \"text\" : \"invalid.illegal\",\n                        \"comment.line.character\"\n                    ];\n                },\n                regex: /^(\\S+)?( +)(\\S+)( +)(\\S+)(\\s+.*)?$/\n            }, {\n                defaultToken: \"text\"\n            }]\n    };\n};\noop.inherits(MixalHighlightRules, TextHighlightRules);\nexports.MixalHighlightRules = MixalHighlightRules;\n\n});\n\nace.define(\"ace/mode/mixal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mixal_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MixalHighlightRules = require(\"./mixal_highlight_rules\").MixalHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = MixalHighlightRules;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/mixal\";\n    this.lineCommentStart = \"*\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/mixal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-mushcode.js",
    "content": "ace.define(\"ace/mode/mushcode_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n * MUSHCodeMode\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar MushCodeRules = function () {\n    var keywords = (\"@if|\" +\n        \"@ifelse|\" +\n        \"@switch|\" +\n        \"@halt|\" +\n        \"@dolist|\" +\n        \"@create|\" +\n        \"@scent|\" +\n        \"@sound|\" +\n        \"@touch|\" +\n        \"@ataste|\" +\n        \"@osound|\" +\n        \"@ahear|\" +\n        \"@aahear|\" +\n        \"@amhear|\" +\n        \"@otouch|\" +\n        \"@otaste|\" +\n        \"@drop|\" +\n        \"@odrop|\" +\n        \"@adrop|\" +\n        \"@dropfail|\" +\n        \"@odropfail|\" +\n        \"@smell|\" +\n        \"@oemit|\" +\n        \"@emit|\" +\n        \"@pemit|\" +\n        \"@parent|\" +\n        \"@clone|\" +\n        \"@taste|\" +\n        \"whisper|\" +\n        \"page|\" +\n        \"say|\" +\n        \"pose|\" +\n        \"semipose|\" +\n        \"teach|\" +\n        \"touch|\" +\n        \"taste|\" +\n        \"smell|\" +\n        \"listen|\" +\n        \"look|\" +\n        \"move|\" +\n        \"go|\" +\n        \"home|\" +\n        \"follow|\" +\n        \"unfollow|\" +\n        \"desert|\" +\n        \"dismiss|\" +\n        \"@tel\");\n    var builtinConstants = (\"=#0\");\n    var builtinFunctions = (\"default|\" +\n        \"edefault|\" +\n        \"eval|\" +\n        \"get_eval|\" +\n        \"get|\" +\n        \"grep|\" +\n        \"grepi|\" +\n        \"hasattr|\" +\n        \"hasattrp|\" +\n        \"hasattrval|\" +\n        \"hasattrpval|\" +\n        \"lattr|\" +\n        \"nattr|\" +\n        \"poss|\" +\n        \"udefault|\" +\n        \"ufun|\" +\n        \"u|\" +\n        \"v|\" +\n        \"uldefault|\" +\n        \"xget|\" +\n        \"zfun|\" +\n        \"band|\" +\n        \"bnand|\" +\n        \"bnot|\" +\n        \"bor|\" +\n        \"bxor|\" +\n        \"shl|\" +\n        \"shr|\" +\n        \"and|\" +\n        \"cand|\" +\n        \"cor|\" +\n        \"eq|\" +\n        \"gt|\" +\n        \"gte|\" +\n        \"lt|\" +\n        \"lte|\" +\n        \"nand|\" +\n        \"neq|\" +\n        \"nor|\" +\n        \"not|\" +\n        \"or|\" +\n        \"t|\" +\n        \"xor|\" +\n        \"con|\" +\n        \"entrances|\" +\n        \"exit|\" +\n        \"followers|\" +\n        \"home|\" +\n        \"lcon|\" +\n        \"lexits|\" +\n        \"loc|\" +\n        \"locate|\" +\n        \"lparent|\" +\n        \"lsearch|\" +\n        \"next|\" +\n        \"num|\" +\n        \"owner|\" +\n        \"parent|\" +\n        \"pmatch|\" +\n        \"rloc|\" +\n        \"rnum|\" +\n        \"room|\" +\n        \"where|\" +\n        \"zone|\" +\n        \"worn|\" +\n        \"held|\" +\n        \"carried|\" +\n        \"acos|\" +\n        \"asin|\" +\n        \"atan|\" +\n        \"ceil|\" +\n        \"cos|\" +\n        \"e|\" +\n        \"exp|\" +\n        \"fdiv|\" +\n        \"fmod|\" +\n        \"floor|\" +\n        \"log|\" +\n        \"ln|\" +\n        \"pi|\" +\n        \"power|\" +\n        \"round|\" +\n        \"sin|\" +\n        \"sqrt|\" +\n        \"tan|\" +\n        \"aposs|\" +\n        \"andflags|\" +\n        \"conn|\" +\n        \"commandssent|\" +\n        \"controls|\" +\n        \"doing|\" +\n        \"elock|\" +\n        \"findable|\" +\n        \"flags|\" +\n        \"fullname|\" +\n        \"hasflag|\" +\n        \"haspower|\" +\n        \"hastype|\" +\n        \"hidden|\" +\n        \"idle|\" +\n        \"isbaker|\" +\n        \"lock|\" +\n        \"lstats|\" +\n        \"money|\" +\n        \"who|\" +\n        \"name|\" +\n        \"nearby|\" +\n        \"obj|\" +\n        \"objflags|\" +\n        \"photo|\" +\n        \"poll|\" +\n        \"powers|\" +\n        \"pendingtext|\" +\n        \"receivedtext|\" +\n        \"restarts|\" +\n        \"restarttime|\" +\n        \"subj|\" +\n        \"shortestpath|\" +\n        \"tmoney|\" +\n        \"type|\" +\n        \"visible|\" +\n        \"cat|\" +\n        \"element|\" +\n        \"elements|\" +\n        \"extract|\" +\n        \"filter|\" +\n        \"filterbool|\" +\n        \"first|\" +\n        \"foreach|\" +\n        \"fold|\" +\n        \"grab|\" +\n        \"graball|\" +\n        \"index|\" +\n        \"insert|\" +\n        \"itemize|\" +\n        \"items|\" +\n        \"iter|\" +\n        \"last|\" +\n        \"ldelete|\" +\n        \"map|\" +\n        \"match|\" +\n        \"matchall|\" +\n        \"member|\" +\n        \"mix|\" +\n        \"munge|\" +\n        \"pick|\" +\n        \"remove|\" +\n        \"replace|\" +\n        \"rest|\" +\n        \"revwords|\" +\n        \"setdiff|\" +\n        \"setinter|\" +\n        \"setunion|\" +\n        \"shuffle|\" +\n        \"sort|\" +\n        \"sortby|\" +\n        \"splice|\" +\n        \"step|\" +\n        \"wordpos|\" +\n        \"words|\" +\n        \"add|\" +\n        \"lmath|\" +\n        \"max|\" +\n        \"mean|\" +\n        \"median|\" +\n        \"min|\" +\n        \"mul|\" +\n        \"percent|\" +\n        \"sign|\" +\n        \"stddev|\" +\n        \"sub|\" +\n        \"val|\" +\n        \"bound|\" +\n        \"abs|\" +\n        \"inc|\" +\n        \"dec|\" +\n        \"dist2d|\" +\n        \"dist3d|\" +\n        \"div|\" +\n        \"floordiv|\" +\n        \"mod|\" +\n        \"modulo|\" +\n        \"remainder|\" +\n        \"vadd|\" +\n        \"vdim|\" +\n        \"vdot|\" +\n        \"vmag|\" +\n        \"vmax|\" +\n        \"vmin|\" +\n        \"vmul|\" +\n        \"vsub|\" +\n        \"vunit|\" +\n        \"regedit|\" +\n        \"regeditall|\" +\n        \"regeditalli|\" +\n        \"regediti|\" +\n        \"regmatch|\" +\n        \"regmatchi|\" +\n        \"regrab|\" +\n        \"regraball|\" +\n        \"regraballi|\" +\n        \"regrabi|\" +\n        \"regrep|\" +\n        \"regrepi|\" +\n        \"after|\" +\n        \"alphamin|\" +\n        \"alphamax|\" +\n        \"art|\" +\n        \"before|\" +\n        \"brackets|\" +\n        \"capstr|\" +\n        \"case|\" +\n        \"caseall|\" +\n        \"center|\" +\n        \"containsfansi|\" +\n        \"comp|\" +\n        \"decompose|\" +\n        \"decrypt|\" +\n        \"delete|\" +\n        \"edit|\" +\n        \"encrypt|\" +\n        \"escape|\" +\n        \"if|\" +\n        \"ifelse|\" +\n        \"lcstr|\" +\n        \"left|\" +\n        \"lit|\" +\n        \"ljust|\" +\n        \"merge|\" +\n        \"mid|\" +\n        \"ostrlen|\" +\n        \"pos|\" +\n        \"repeat|\" +\n        \"reverse|\" +\n        \"right|\" +\n        \"rjust|\" +\n        \"scramble|\" +\n        \"secure|\" +\n        \"space|\" +\n        \"spellnum|\" +\n        \"squish|\" +\n        \"strcat|\" +\n        \"strmatch|\" +\n        \"strinsert|\" +\n        \"stripansi|\" +\n        \"stripfansi|\" +\n        \"strlen|\" +\n        \"switch|\" +\n        \"switchall|\" +\n        \"table|\" +\n        \"tr|\" +\n        \"trim|\" +\n        \"ucstr|\" +\n        \"unsafe|\" +\n        \"wrap|\" +\n        \"ctitle|\" +\n        \"cwho|\" +\n        \"channels|\" +\n        \"clock|\" +\n        \"cflags|\" +\n        \"ilev|\" +\n        \"itext|\" +\n        \"inum|\" +\n        \"convsecs|\" +\n        \"convutcsecs|\" +\n        \"convtime|\" +\n        \"ctime|\" +\n        \"etimefmt|\" +\n        \"isdaylight|\" +\n        \"mtime|\" +\n        \"secs|\" +\n        \"msecs|\" +\n        \"starttime|\" +\n        \"time|\" +\n        \"timefmt|\" +\n        \"timestring|\" +\n        \"utctime|\" +\n        \"atrlock|\" +\n        \"clone|\" +\n        \"create|\" +\n        \"cook|\" +\n        \"dig|\" +\n        \"emit|\" +\n        \"lemit|\" +\n        \"link|\" +\n        \"oemit|\" +\n        \"open|\" +\n        \"pemit|\" +\n        \"remit|\" +\n        \"set|\" +\n        \"tel|\" +\n        \"wipe|\" +\n        \"zemit|\" +\n        \"fbcreate|\" +\n        \"fbdestroy|\" +\n        \"fbwrite|\" +\n        \"fbclear|\" +\n        \"fbcopy|\" +\n        \"fbcopyto|\" +\n        \"fbclip|\" +\n        \"fbdump|\" +\n        \"fbflush|\" +\n        \"fbhset|\" +\n        \"fblist|\" +\n        \"fbstats|\" +\n        \"qentries|\" +\n        \"qentry|\" +\n        \"play|\" +\n        \"ansi|\" +\n        \"break|\" +\n        \"c|\" +\n        \"asc|\" +\n        \"die|\" +\n        \"isdbref|\" +\n        \"isint|\" +\n        \"isnum|\" +\n        \"isletters|\" +\n        \"linecoords|\" +\n        \"localize|\" +\n        \"lnum|\" +\n        \"nameshort|\" +\n        \"null|\" +\n        \"objeval|\" +\n        \"r|\" +\n        \"rand|\" +\n        \"s|\" +\n        \"setq|\" +\n        \"setr|\" +\n        \"soundex|\" +\n        \"soundslike|\" +\n        \"valid|\" +\n        \"vchart|\" +\n        \"vchart2|\" +\n        \"vlabel|\" +\n        \"@@|\" +\n        \"bakerdays|\" +\n        \"bodybuild|\" +\n        \"box|\" +\n        \"capall|\" +\n        \"catalog|\" +\n        \"children|\" +\n        \"ctrailer|\" +\n        \"darttime|\" +\n        \"debt|\" +\n        \"detailbar|\" +\n        \"exploredroom|\" +\n        \"fansitoansi|\" +\n        \"fansitoxansi|\" +\n        \"fullbar|\" +\n        \"halfbar|\" +\n        \"isdarted|\" +\n        \"isnewbie|\" +\n        \"isword|\" +\n        \"lambda|\" +\n        \"lobjects|\" +\n        \"lplayers|\" +\n        \"lthings|\" +\n        \"lvexits|\" +\n        \"lvobjects|\" +\n        \"lvplayers|\" +\n        \"lvthings|\" +\n        \"newswrap|\" +\n        \"numsuffix|\" +\n        \"playerson|\" +\n        \"playersthisweek|\" +\n        \"randomad|\" +\n        \"randword|\" +\n        \"realrandword|\" +\n        \"replacechr|\" +\n        \"second|\" +\n        \"splitamount|\" +\n        \"strlenall|\" +\n        \"text|\" +\n        \"third|\" +\n        \"tofansi|\" +\n        \"totalac|\" +\n        \"unique|\" +\n        \"getaddressroom|\" +\n        \"listpropertycomm|\" +\n        \"listpropertyres|\" +\n        \"lotowner|\" +\n        \"lotrating|\" +\n        \"lotratingcount|\" +\n        \"lotvalue|\" +\n        \"boughtproduct|\" +\n        \"companyabb|\" +\n        \"companyicon|\" +\n        \"companylist|\" +\n        \"companyname|\" +\n        \"companyowners|\" +\n        \"companyvalue|\" +\n        \"employees|\" +\n        \"invested|\" +\n        \"productlist|\" +\n        \"productname|\" +\n        \"productowners|\" +\n        \"productrating|\" +\n        \"productratingcount|\" +\n        \"productsoldat|\" +\n        \"producttype|\" +\n        \"ratedproduct|\" +\n        \"soldproduct|\" +\n        \"topproducts|\" +\n        \"totalspentonproduct|\" +\n        \"totalstock|\" +\n        \"transfermoney|\" +\n        \"uniquebuyercount|\" +\n        \"uniqueproductsbought|\" +\n        \"validcompany|\" +\n        \"deletepicture|\" +\n        \"fbsave|\" +\n        \"getpicturesecurity|\" +\n        \"haspicture|\" +\n        \"listpictures|\" +\n        \"picturesize|\" +\n        \"replacecolor|\" +\n        \"rgbtocolor|\" +\n        \"savepicture|\" +\n        \"setpicturesecurity|\" +\n        \"showpicture|\" +\n        \"piechart|\" +\n        \"piechartlabel|\" +\n        \"createmaze|\" +\n        \"drawmaze|\" +\n        \"drawwireframe\");\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n    var strPre = \"(?:r|u|ur|R|U|UR|Ur|uR)?\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"variable\",\n                regex: \"%[0-9]{1}\"\n            },\n            {\n                token: \"variable\",\n                regex: \"%q[0-9A-Za-z]{1}\"\n            },\n            {\n                token: \"variable\",\n                regex: \"%[a-zA-Z]{1}\"\n            },\n            {\n                token: \"variable.language\",\n                regex: \"%[a-z0-9-_]+\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"[lL]\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|#|%|<<|>>|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ]\n    };\n};\noop.inherits(MushCodeRules, TextHighlightRules);\nexports.MushCodeRules = MushCodeRules;\n\n});\n\nace.define(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (markers) {\n    this.foldingStartMarker = new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\" + markers + \")(?:\\\\s*)(?:#.*)?$\");\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, match.index);\n            if (match[2])\n                return this.indentationBlock(session, row, match.index + match[2].length);\n            return this.indentationBlock(session, row);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/mushcode\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mushcode_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar MushCodeRules = require(\"./mushcode_highlight_rules\").MushCodeRules;\nvar PythonFoldMode = require(\"./folding/pythonic\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n    this.HighlightRules = MushCodeRules;\n    this.foldingRules = new PythonFoldMode(\"\\\\:\");\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n    this.checkOutdent = function (state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n        if (!last)\n            return false;\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length - tab.length, row, indent.length));\n    };\n    this.$id = \"ace/mode/mushcode\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/mushcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-mysql.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/mysql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar MysqlHighlightRules = function () {\n    var mySqlKeywords = /*sql*/ \"alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where\" + \"|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|coalesce|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat\";\n    var builtins = \"by|bool|boolean|bit|blob|decimal|double|enum|float|long|longblob|longtext|medium|mediumblob|mediumint|mediumtext|time|timestamp|tinyblob|tinyint|tinytext|text|bigint|int|int1|int2|int3|int4|int8|integer|float|float4|float8|double|char|varbinary|varchar|varcharacter|precision|date|datetime|year|unsigned|signed|numeric|ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nvl\";\n    var variable = \"charset|clear|connect|edit|ego|exit|go|help|nopager|notee|nowarning|pager|print|prompt|quit|rehash|source|status|system|tee\";\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtins,\n        \"keyword\": mySqlKeywords,\n        \"constant\": \"false|true|null|unknown|date|time|timestamp|ODBCdotTable|zerolessFloat\",\n        \"variable.language\": variable\n    }, \"identifier\", true);\n    function string(rule) {\n        var start = rule.start;\n        var escapeSeq = rule.escape;\n        return {\n            token: \"string.start\",\n            regex: start,\n            next: [\n                { token: \"constant.language.escape\", regex: escapeSeq },\n                { token: \"string.end\", next: \"start\", regex: start },\n                { defaultToken: \"string\" }\n            ]\n        };\n    }\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\", regex: \"(?:-- |#).*$\"\n            },\n            string({ start: '\"', escape: /\\\\[0'\"bnrtZ\\\\%_]?/ }),\n            string({ start: \"'\", escape: /\\\\[0'\"bnrtZ\\\\%_]?/ }),\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: /\\/\\*/,\n                next: \"comment\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0[xX][0-9a-fA-F]+|[xX]'[0-9a-fA-F]+'|0[bB][01]+|[bB]'[01]+'/\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"constant.class\",\n                regex: \"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"constant.buildin\",\n                regex: \"`[^`]*`\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }],\n        \"comment\": [\n            { token: \"comment\", regex: \"\\\\*\\\\/\", next: \"start\" },\n            { defaultToken: \"comment\" }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(MysqlHighlightRules, TextHighlightRules);\nexports.MysqlHighlightRules = MysqlHighlightRules;\n\n});\n\nace.define(\"ace/mode/mysql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mysql_highlight_rules\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar MysqlHighlightRules = require(\"./mysql_highlight_rules\").MysqlHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = MysqlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = [\"--\", \"#\"]; // todo space\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/mysql\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/mysql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-nginx.js",
    "content": "ace.define(\"ace/mode/nginx_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar NginxHighlightRules = function () {\n    var keywords = \"include|index|absolute_redirect|aio|output_buffers|directio|sendfile|aio_write|alias|root|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|default_type|disable_symlinks|directio_alignment|error_page|etag|if_modified_since|ignore_invalid_headers|internal|keepalive_requests|keepalive_disable|keepalive_timeout|limit_except|large_client_header_buffers|limit_rate|limit_rate_after|lingering_close|lingering_time|lingering_timeout|listen|log_not_found|log_subrequest|max_ranges|merge_slashes|msie_padding|msie_refresh|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|output_buffers|port_in_redirect|postpone_output|read_ahead|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|satisfy|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|subrequest_output_buffer_size|tcp_nodelay|tcp_nopush|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|variables_hash_bucket_size|variables_hash_max_size|accept_mutex|accept_mutex_delay|debug_connection|error_log|daemon|debug_points|env|load_module|lock_file|master_process|multi_accept|pcre_jit|pid|ssl_engine|thread_pool|timer_resolution|use|user|worker_aio_requests|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_shutdown_timeout|working_directory|allow|deny|add_before_body|add_after_body|addition_types|api|status_zone|auth_basic|auth_basic_user_file|auth_jwt|auth_jwt|auth_jwt_claim_set|auth_jwt_header_set|auth_jwt_key_file|auth_jwt_key_request|auth_jwt_leeway|auth_request|auth_request_set|autoindex|autoindex_exact_size|autoindex_format|autoindex_localtime|ancient_browser|ancient_browser_value|modern_browser|modern_browser_value|charset|charset_map|charset_types|override_charset|source_charset|create_full_put_path|dav_access|dav_methods|min_delete_depth|empty_gif|f4f|f4f_buffer_size|fastcgi_bind|fastcgi_buffer_size|fastcgi_buffering|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_background_update|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_age|fastcgi_cache_lock_timeout|fastcgi_cache_max_range_offset|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_revalidate|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_catch_stderr|fastcgi_connect_timeout|fastcgi_force_ranges|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_limit_rate|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_next_upstream_timeout|fastcgi_next_upstream_tries|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_pass_request_body|fastcgi_pass_request_headers|fastcgi_read_timeout|fastcgi_request_buffering|fastcgi_send_lowat|fastcgi_send_timeout|fastcgi_socket_keepalive|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geoip_country|geoip_city|geoip_org|geoip_proxy|geoip_proxy_recursive|grpc_bind|grpc_buffer_size|grpc_connect_timeout|grpc_hide_header|grpc_ignore_headers|grpc_intercept_errors|grpc_next_upstream|grpc_next_upstream_timeout|grpc_next_upstream_tries|grpc_pass|grpc_pass_header|grpc_read_timeout|grpc_send_timeout|grpc_set_header|grpc_socket_keepalive|grpc_ssl_certificate|grpc_ssl_certificate_key|grpc_ssl_ciphers|grpc_ssl_crl|grpc_ssl_name|grpc_ssl_password_file|grpc_ssl_protocols|grpc_ssl_server_name|grpc_ssl_session_reuse|grpc_ssl_trusted_certificate|grpc_ssl_verify|grpc_ssl_verify_depth|gunzip|gunzip_buffers|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_types|gzip_vary|gzip_static|add_header|add_trailer|expires|hlshls_buffers|hls_forward_args|hls_fragment|hls_mp4_buffer_size|hls_mp4_max_buffer_size|image_filter|image_filter_buffer|image_filter_interlace|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|image_filter_webp_quality|js_content|js_include|js_set|keyval|keyval_zone|limit_conn|limit_conn_log_level|limit_conn_status|limit_conn_zone|limit_zone|limit_req|limit_req_log_level|limit_req_status|limit_req_zone|access_log|log_format|open_log_file_cache|map_hash_bucket_size|map_hash_max_size|memcached_bind|memcached_buffer_size|memcached_connect_timeout|memcached_force_ranges|memcached_gzip_flag|memcached_next_upstream|memcached_next_upstream_timeout|memcached_next_upstream_tries|memcached_pass|memcached_read_timeout|memcached_send_timeout|memcached_socket_keepalive|mirror|mirror_request_body|mp4|mp4_buffer_size|mp4_max_buffer_size|mp4_limit_rate|mp4_limit_rate_after|perl_modules|perl_require|perl_set|proxy_bind|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_background_update|proxy_cache_bypass|proxy_cache_convert_head|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_age|proxy_cache_lock_timeout|proxy_cache_max_range_offset|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_purge|proxy_cache_revalidate|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_force_ranges|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_limit_rate|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_next_upstream_timeout|proxy_next_upstream_tries|proxy_no_cache|proxy_pass|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_socket_keepalive|proxy_ssl_certificate|proxy_ssl_certificate_key|proxy_ssl_ciphers|proxy_ssl_crl|proxy_ssl_name|proxy_ssl_password_file|proxy_ssl_protocols|proxy_ssl_server_name|proxy_ssl_session_reuse|proxy_ssl_trusted_certificate|proxy_ssl_verify|proxy_ssl_verify_depth|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|random_index|set_real_ip_from|real_ip_header|real_ip_recursive|referer_hash_bucket_size|referer_hash_max_size|valid_referers|break|return|rewrite_log|set|uninitialized_variable_warn|scgi_bind|scgi_buffer_size|scgi_buffering|scgi_buffers|scgi_busy_buffers_size|scgi_cache|scgi_cache_background_update|scgi_cache_key|scgi_cache_lock|scgi_cache_lock_age|scgi_cache_lock_timeout|scgi_cache_max_range_offset|scgi_cache_methods|scgi_cache_min_uses|scgi_cache_path|scgi_cache_purge|scgi_cache_revalidate|scgi_cache_use_stale|scgi_cache_valid|scgi_connect_timeout|scgi_force_ranges|scgi_hide_header|scgi_ignore_client_abort|scgi_ignore_headers|scgi_intercept_errors|scgi_limit_rate|scgi_max_temp_file_size|scgi_next_upstream|scgi_next_upstream_timeout|scgi_next_upstream_tries|scgi_no_cache|scgi_param|scgi_pass|scgi_pass_header|scgi_pass_request_body|scgi_pass_request_headers|scgi_read_timeout|scgi_request_buffering|scgi_send_timeout|scgi_socket_keepalive|scgi_store|scgi_store_access|scgi_temp_file_write_size|scgi_temp_path|secure_link|secure_link_md5|secure_link_secret|session_log|session_log_format|session_log_zone|slice|spdy_chunk_size|spdy_headers_comp|ssi|ssi_last_modified|ssi_min_file_chunk|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_buffer_size|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_early_data|ssl_ecdh_curve|ssl_password_file|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_ticket_key|ssl_session_tickets|ssl_session_timeout|ssl_stapling|ssl_stapling_file|ssl_stapling_responder|ssl_stapling_verify|ssl_trusted_certificate|ssl_verify_client|ssl_verify_depth|status|status_format|status_zone|stub_status|sub_filter|sub_filter_last_modified|sub_filter_once|sub_filter_types|server|zone|state|hash|ip_hash|keepalive|keepalive_requests|keepalive_timeout|ntlm|least_conn|least_time|queue|random|sticky|sticky_cookie_insert|upstream_conf|health_check|userid|userid_domain|userid_expires|userid_mark|userid_name|userid_p3p|userid_path|userid_service|uwsgi_bind|uwsgi_buffer_size|uwsgi_buffering|uwsgi_buffers|uwsgi_busy_buffers_size|uwsgi_cache|uwsgi_cache_background_update|uwsgi_cache_bypass|uwsgi_cache_key|uwsgi_cache_lock|uwsgi_cache_lock_age|uwsgi_cache_lock_timeout|uwsgi_cache_max_range_offset|uwsgi_cache_methods|uwsgi_cache_min_uses|uwsgi_cache_path|uwsgi_cache_purge|uwsgi_cache_revalidate|uwsgi_cache_use_stale|uwsgi_cache_valid|uwsgi_connect_timeout|uwsgi_force_ranges|uwsgi_hide_header|uwsgi_ignore_client_abort|uwsgi_ignore_headers|uwsgi_intercept_errors|uwsgi_limit_rate|uwsgi_max_temp_file_size|uwsgi_modifier1|uwsgi_modifier2|uwsgi_next_upstream|uwsgi_next_upstream_timeout|uwsgi_next_upstream_tries|uwsgi_no_cache|uwsgi_param|uwsgi_pass|uwsgi_pass_header|uwsgi_pass_request_body|uwsgi_pass_request_headers|uwsgi_read_timeout|uwsgi_request_buffering|uwsgi_send_timeout|uwsgi_socket_keepalive|uwsgi_ssl_certificate|uwsgi_ssl_certificate_key|uwsgi_ssl_ciphers|uwsgi_ssl_crl|uwsgi_ssl_name|uwsgi_ssl_password_file|uwsgi_ssl_protocols|uwsgi_ssl_server_name|uwsgi_ssl_session_reuse|uwsgi_ssl_trusted_certificate|uwsgi_ssl_verify|uwsgi_ssl_verify_depth|uwsgi_store|uwsgi_store_access|uwsgi_temp_file_write_size|uwsgi_temp_path|http2_body_preread_size|http2_chunk_size|http2_idle_timeout|http2_max_concurrent_pushes|http2_max_concurrent_streams|http2_max_field_size|http2_max_header_size|http2_max_requests|http2_push|http2_push_preload|http2_recv_buffer_size|http2_recv_timeout|xml_entities|xslt_last_modified|xslt_param|xslt_string_param|xslt_stylesheet|xslt_types|listen|protocol|resolver|resolver_timeout|timeout|auth_http|auth_http_header|auth_http_pass_client_cert|auth_http_timeout|proxy_buffer|proxy_pass_error_message|proxy_timeout|xclient|starttls|imap_auth|imap_capabilities|imap_client_buffer|pop3_auth|pop3_capabilities|smtp_auth|smtp_capabilities|smtp_client_buffer|smtp_greeting_delay|preread_buffer_size|preread_timeout|proxy_protocol_timeout|js_access|js_filter|js_preread|proxy_download_rate|proxy_requests|proxy_responses|proxy_upload_rate|ssl_handshake_timeout|ssl_preread|health_check_timeout|zone_sync|zone_sync_buffers|zone_sync_connect_retry_interval|zone_sync_connect_timeout|zone_sync_interval|zone_sync_recv_buffer_size|zone_sync_server|zone_sync_ssl|zone_sync_ssl_certificate|zone_sync_ssl_certificate_key|zone_sync_ssl_ciphers|zone_sync_ssl_crl|zone_sync_ssl_name|zone_sync_ssl_password_file|zone_sync_ssl_protocols|zone_sync_ssl_server_name|zone_sync_ssl_trusted_certificate|zone_sync_ssl_verify_depth|zone_sync_timeout|google_perftools_profiles|proxy|perl\";\n    this.$rules = {\n        \"start\": [{\n                token: [\"storage.type\", \"text\", \"string.regexp\", \"paren.lparen\"],\n                regex: \"\\\\b(location)(\\\\s+)([\\\\^]?~[\\\\*]?\\\\s+.*?)({)\"\n            }, {\n                token: [\"storage.type\", \"text\", \"text\", \"paren.lparen\"],\n                regex: \"\\\\b(location|match|upstream)(\\\\s+)(.*?)({)\"\n            }, {\n                token: [\"storage.type\", \"text\", \"string\", \"text\", \"variable\", \"text\", \"paren.lparen\"],\n                regex: '\\\\b(split_clients|map)(\\\\s+)(\\\\\".*\\\\\")(\\\\s+)(\\\\$[\\\\w_]+)(\\\\s*)({)'\n            }, {\n                token: [\"storage.type\", \"text\", \"paren.lparen\"],\n                regex: \"\\\\b(http|events|server|mail|stream)(\\\\s*)({)\"\n            }, {\n                token: [\"storage.type\", \"text\", \"variable\", \"text\", \"variable\", \"text\", \"paren.lparen\"],\n                regex: '\\\\b(geo|map)(\\\\s+)(\\\\$[\\\\w_]+)?(\\\\s*)(\\\\$[\\\\w_]+)(\\\\s*)({)'\n            }, {\n                token: \"paren.rparen\",\n                regex: \"(})\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"({)\"\n            }, {\n                token: [\"storage.type\", \"text\", \"paren.lparen\"],\n                regex: \"\\\\b(if)(\\\\s+)(\\\\()\",\n                push: [{\n                        token: \"paren.rparen\",\n                        regex: \"\\\\)|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"lexical\"\n                    }]\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\b(\" + keywords + \")\\\\b\",\n                push: [{\n                        token: \"punctuation\",\n                        regex: \";\",\n                        next: \"pop\"\n                    }, {\n                        include: \"lexical\"\n                    }]\n            }, {\n                token: [\"keyword\", \"text\", \"string.regexp\", \"text\", \"punctuation\"],\n                regex: \"\\\\b(rewrite)(\\\\s)(\\\\S*)(\\\\s.*)(;)\"\n            }, {\n                include: \"lexical\"\n            }, {\n                include: \"comments\"\n            }],\n        comments: [{\n                token: \"comment\",\n                regex: '#.*$'\n            }],\n        lexical: [{\n                token: \"string\",\n                regex: \"'\",\n                push: [{\n                        token: \"string\",\n                        regex: \"'\",\n                        next: \"pop\"\n                    }, {\n                        include: \"variables\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string\",\n                regex: '\"',\n                push: [{\n                        token: \"string\",\n                        regex: '\"',\n                        next: \"pop\"\n                    }, {\n                        include: \"variables\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.regexp\",\n                regex: /[!]?[~][*]?\\s+.*(?=\\))/\n            }, {\n                token: \"string.regexp\",\n                regex: /[\\^]\\S*(?=;$)/\n            }, {\n                token: \"string.regexp\",\n                regex: /[\\^]\\S*(?=;|\\s|$)/\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\B(\\\\+|\\\\-|\\\\*|\\\\=|!=)\\\\B\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\b(true|false|on|off|all|any|main|always)\\\\b\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                include: \"variables\"\n            }\n        ],\n        variables: [{\n                token: \"variable\",\n                regex: \"\\\\$[\\\\w_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\b(GET|POST|HEAD)\\\\b\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(NginxHighlightRules, TextHighlightRules);\nexports.NginxHighlightRules = NginxHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/nginx\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/nginx_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar NginxHighlightRules = require(\"./nginx_highlight_rules\").NginxHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    TextMode.call(this);\n    this.HighlightRules = NginxHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/nginx\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/nginx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-nim.js",
    "content": "ace.define(\"ace/mode/nim_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar NimHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable\": \"var|let|const\",\n        \"keyword\": \"assert|parallel|spawn|export|include|from|template|mixin|bind|import|concept|raise|defer|try|finally|except|converter|proc|func|macro|method|and|or|not|xor|shl|shr|div|mod|in|notin|is|isnot|of|static|if|elif|else|case|of|discard|when|return|yield|block|break|while|echo|continue|asm|using|cast|addr|unsafeAddr|type|ref|ptr|do|declared|defined|definedInScope|compiles|sizeOf|is|shallowCopy|getAst|astToStr|spawn|procCall|for|iterator|as\",\n        \"storage.type\": \"newSeq|int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|float|char|bool|string|set|pointer|float32|float64|enum|object|cstring|array|seq|openArray|varargs|UncheckedArray|tuple|set|distinct|void|auto|openarray|range\",\n        \"support.function\": \"lock|ze|toU8|toU16|toU32|ord|low|len|high|add|pop|contains|card|incl|excl|dealloc|inc\",\n        \"constant.language\": \"nil|true|false\"\n    }, \"identifier\");\n    var hexNumber = \"(?:0[xX][\\\\dA-Fa-f][\\\\dA-Fa-f_]*)\";\n    var decNumber = \"(?:[0-9][\\\\d_]*)\";\n    var octNumber = \"(?:0o[0-7][0-7_]*)\";\n    var binNumber = \"(?:0[bB][01][01_]*)\";\n    var intNumber = \"(?:\" + hexNumber + \"|\" + decNumber + \"|\" + octNumber + \"|\" + binNumber + \")(?:'?[iIuU](?:8|16|32|64)|u)?\\\\b\";\n    var exponent = \"(?:[eE][+-]?[\\\\d][\\\\d_]*)\";\n    var floatNumber = \"(?:[\\\\d][\\\\d_]*(?:[.][\\\\d](?:[\\\\d_]*)\" + exponent + \"?)|\" + exponent + \")\";\n    var floatNumberExt = \"(?:\" + hexNumber + \"(?:'(?:(?:[fF](?:32|64)?)|[dD])))|(?:\" + floatNumber + \"|\" + decNumber + \"|\" + octNumber + \"|\" + binNumber + \")(?:'(?:(?:[fF](?:32|64)?)|[dD]))\";\n    var stringEscape = \"\\\\\\\\([abeprcnlftv\\\\\\\"']|x[0-9A-Fa-f]{2}|[0-2][0-9]{2}|u[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n    var identifier = '[a-zA-Z][a-zA-Z0-9_]*';\n    this.$rules = {\n        \"start\": [{\n                token: [\"identifier\", \"keyword.operator\", \"support.function\"],\n                regex: \"(\" + identifier + \")([.]{1})(\" + identifier + \")(?=\\\\()\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"(\\\\{\\\\.)\",\n                next: [{\n                        token: \"paren.rparen\",\n                        regex: '(\\\\.\\\\}|\\\\})',\n                        next: \"start\"\n                    }, {\n                        include: \"methods\"\n                    }, {\n                        token: \"identifier\",\n                        regex: identifier\n                    }, {\n                        token: \"punctuation\",\n                        regex: /[,]/\n                    }, {\n                        token: \"keyword.operator\",\n                        regex: /[=:.]/\n                    }, {\n                        token: \"paren.lparen\",\n                        regex: /[[(]/\n                    }, {\n                        token: \"paren.rparen\",\n                        regex: /[\\])]/\n                    }, {\n                        include: \"math\"\n                    }, {\n                        include: \"strings\"\n                    }, {\n                        defaultToken: \"text\"\n                    }]\n            }, {\n                token: \"comment.doc.start\",\n                regex: /##\\[(?!])/,\n                push: \"docBlockComment\"\n            }, {\n                token: \"comment.start\",\n                regex: /#\\[(?!])/,\n                push: \"blockComment\"\n            }, {\n                token: \"comment.doc\",\n                regex: '##.*$'\n            }, {\n                token: \"comment\",\n                regex: '#.*$'\n            }, {\n                include: \"strings\"\n            }, {\n                token: \"string\",\n                regex: \"'(?:\\\\\\\\(?:[abercnlftv]|x[0-9A-Fa-f]{2}|[0-2][0-9]{2}|u[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})|.{1})?'\"\n            }, {\n                include: \"methods\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token: [\"keyword.operator\", \"text\", \"storage.type\"],\n                regex: \"([:])(\\\\s+)(\" + identifier + \")(?=$|\\\\)|\\\\[|,|\\\\s+=|;|\\\\s+\\\\{)\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /\\[\\.|{\\||\\(\\.|\\[:|[[({`]/\n            }, {\n                token: \"paren.rparen\",\n                regex: /\\.\\)|\\|}|\\.]|[\\])}]/\n            }, {\n                token: \"keyword.operator\",\n                regex: /[=+\\-*\\/<>@$~&%|!?^.:\\\\]/\n            }, {\n                token: \"punctuation\",\n                regex: /[,;]/\n            }, {\n                include: \"math\"\n            }],\n        blockComment: [{\n                regex: /#\\[]/,\n                token: \"comment\"\n            }, {\n                regex: /#\\[(?!])/,\n                token: \"comment.start\",\n                push: \"blockComment\"\n            }, {\n                regex: /]#/,\n                token: \"comment.end\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment\"\n            }],\n        docBlockComment: [{\n                regex: /##\\[]/,\n                token: \"comment.doc\"\n            }, {\n                regex: /##\\[(?!])/,\n                token: \"comment.doc.start\",\n                push: \"docBlockComment\"\n            }, {\n                regex: /]##/,\n                token: \"comment.doc.end\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment.doc\"\n            }],\n        math: [{\n                token: \"constant.float\",\n                regex: floatNumberExt\n            }, {\n                token: \"constant.float\",\n                regex: floatNumber\n            }, {\n                token: \"constant.integer\",\n                regex: intNumber\n            }],\n        methods: [{\n                token: \"support.function\",\n                regex: \"(\\\\w+)(?=\\\\()\"\n            }],\n        strings: [{\n                token: \"string\",\n                regex: '(\\\\b' + identifier + ')?\"\"\"',\n                push: [{\n                        token: \"string\",\n                        regex: '\"\"\"',\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string\",\n                regex: \"\\\\b\" + identifier + '\"(?=.)',\n                push: [{\n                        token: \"string\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string\",\n                regex: '\"',\n                push: [{\n                        token: \"string\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: stringEscape\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(NimHighlightRules, TextHighlightRules);\nexports.NimHighlightRules = NimHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/nim\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/nim_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar NimHighlightRules = require(\"./nim_highlight_rules\").NimHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    TextMode.call(this);\n    this.HighlightRules = NimHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.blockComment = { start: \"#[\", end: \"]#\", nestable: true };\n    this.$id = \"ace/mode/nim\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/nim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-nix.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\nvar c_cppHighlightRules = function () {\n    var keywordControls = (\"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\");\n    var storageType = (\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|int8_t|int16_t|int32_t|int64_t|long|short|signed|size_t|struct|typedef|uint8_t|uint16_t|uint32_t|uint64_t|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\");\n    var storageModifiers = (\"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\");\n    var keywordOperators = (\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\");\n    var builtinConstants = (\"NULL|true|false|TRUE|FALSE|nullptr\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\": keywordControls,\n        \"storage.type\": storageType,\n        \"storage.modifier\": storageModifiers,\n        \"keyword.operator\": keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n        + /(\\d+\\$)?/.source // field (argument #)\n        + /[#0\\- +']*/.source // flags\n        + /[,;:_]?/.source // separator character (AltiVec)\n        + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n        + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n        + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n        + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"//$\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \"//\",\n                next: \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"string.start\",\n                regex: 'R\"\\\\(',\n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next: \"directive\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token: \"support.function.C99.c\",\n                regex: cFunctions\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"singleLineComment\": [\n            {\n                token: \"comment\",\n                regex: /\\\\$/,\n                next: \"singleLineComment\"\n            }, {\n                token: \"comment\",\n                regex: /$/,\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\": [\n            {\n                token: \"constant.other.multiline\",\n                regex: /\\\\/\n            },\n            {\n                token: \"constant.other.multiline\",\n                regex: /.*\\\\/\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*<.+?>\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: /[^\\\\\\/]+/,\n                next: \"start\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(c_cppHighlightRules, TextHighlightRules);\nexports.c_cppHighlightRules = c_cppHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = c_cppHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/c_cpp\";\n    this.snippetFileId = \"ace/snippets/c_cpp\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/nix_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar NixHighlightRules = function () {\n    var constantLanguage = \"true|false\";\n    var keywordControl = \"with|import|if|else|then|inherit\";\n    var keywordDeclaration = \"let|in|rec\";\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.nix\": constantLanguage,\n        \"keyword.control.nix\": keywordControl,\n        \"keyword.declaration.nix\": keywordDeclaration\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: /#.*$/\n            }, {\n                token: \"comment\",\n                regex: /\\/\\*/,\n                next: \"comment\"\n            }, {\n                token: \"constant\",\n                regex: \"<[^>]+>\"\n            }, {\n                regex: \"(==|!=|<=?|>=?)\",\n                token: [\"keyword.operator.comparison.nix\"]\n            }, {\n                regex: \"((?:[+*/%-]|\\\\~)=)\",\n                token: [\"keyword.operator.assignment.arithmetic.nix\"]\n            }, {\n                regex: \"=\",\n                token: \"keyword.operator.assignment.nix\"\n            }, {\n                token: \"string\",\n                regex: \"''\",\n                next: \"qqdoc\"\n            }, {\n                token: \"string\",\n                regex: \"'\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"',\n                push: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                regex: \"}\",\n                token: function (val, start, stack) {\n                    return stack[1] && stack[1].charAt(0) == \"q\" ? \"constant.language.escape\" : \"text\";\n                },\n                next: \"pop\"\n            }],\n        \"comment\": [{\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }],\n        \"qqdoc\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\$\\{/,\n                push: \"start\"\n            }, {\n                token: \"string\",\n                regex: \"''\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\$\\{/,\n                push: \"start\"\n            }, {\n                token: \"string\",\n                regex: '\"',\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\$\\{/,\n                push: \"start\"\n            }, {\n                token: \"string\",\n                regex: \"'\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(NixHighlightRules, TextHighlightRules);\nexports.NixHighlightRules = NixHighlightRules;\n\n});\n\nace.define(\"ace/mode/nix\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/nix_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar NixHighlightRules = require(\"./nix_highlight_rules\").NixHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    CMode.call(this);\n    this.HighlightRules = NixHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, CMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/nix\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/nix\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-nsis.js",
    "content": "ace.define(\"ace/mode/nsis_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar NSISHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                token: \"keyword.compiler.nsis\",\n                regex: /^\\s*!(?:include|addincludedir|addplugindir|appendfile|cd|delfile|echo|error|execute|packhdr|pragma|finalize|getdllversion|gettlbversion|system|tempfile|warning|verbose|define|undef|insertmacro|macro|macroend|makensis|searchparse|searchreplace|uninstfinalize)\\b/,\n                caseInsensitive: true\n            }, {\n                token: \"keyword.command.nsis\",\n                regex: /^\\s*(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecShellWait|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetKnownFolderPath|GetLabelAddress|GetTempFileName|GetWinVer|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfRtlLanguage|IfShellVarContextAll|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|Int64Cmp|Int64CmpU|Int64Fmt|IntCmp|IntCmpU|IntFmt|IntOp|IntPtrCmp|IntPtrCmpU|IntPtrOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadAndSetImage|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestLongPathAware|ManifestMaxVersionTested|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|PEAddResource|PEDllCharacteristics|PERemoveResource|PESubsysVer|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegMultiStr|WriteRegNone|WriteRegStr|WriteUninstaller|XPStyle)\\b/,\n                caseInsensitive: true\n            }, {\n                token: \"keyword.control.nsis\",\n                regex: /^\\s*!(?:ifdef|ifndef|if|ifmacrodef|ifmacrondef|else|endif)\\b/,\n                caseInsensitive: true\n            }, {\n                token: \"keyword.plugin.nsis\",\n                regex: /^\\s*\\w+::\\w+/,\n                caseInsensitive: true\n            }, {\n                token: \"keyword.operator.comparison.nsis\",\n                regex: /[!<>]?=|<>|<|>/\n            }, {\n                token: \"support.function.nsis\",\n                regex: /(?:\\b|^\\s*)(?:Function|FunctionEnd|Section|SectionEnd|SectionGroup|SectionGroupEnd|PageEx|PageExEnd)\\b/,\n                caseInsensitive: true\n            }, {\n                token: \"support.library.nsis\",\n                regex: /\\${[\\w\\.:-]+}/\n            }, {\n                token: \"constant.nsis\",\n                regex: /\\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR(32|64)?|HKCU(32|64)?|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM(32|64)?|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\\b/,\n                caseInsensitive: true\n            }, {\n                token: \"constant.library.nsis\",\n                regex: /\\${(?:AtLeastServicePack|AtLeastWin7|AtLeastWin8|AtLeastWin10|AtLeastWin95|AtLeastWin98|AtLeastWin2000|AtLeastWin2003|AtLeastWin2008|AtLeastWin2008R2|AtLeastWinME|AtLeastWinNT4|AtLeastWinVista|AtLeastWinXP|AtMostServicePack|AtMostWin7|AtMostWin8|AtMostWin10|AtMostWin95|AtMostWin98|AtMostWin2000|AtMostWin2003|AtMostWin2008|AtMostWin2008R2|AtMostWinME|AtMostWinNT4|AtMostWinVista|AtMostWinXP|IsDomainController|IsNT|IsServer|IsServicePack|IsWin7|IsWin8|IsWin10|IsWin95|IsWin98|IsWin2000|IsWin2003|IsWin2008|IsWin2008R2|IsWinME|IsWinNT4|IsWinVista|IsWinXP)}/\n            }, {\n                token: \"constant.language.boolean.true.nsis\",\n                regex: /\\b(?:true|on)\\b/\n            }, {\n                token: \"constant.language.boolean.false.nsis\",\n                regex: /\\b(?:false|off)\\b/\n            }, {\n                token: \"constant.language.option.nsis\",\n                regex: /(?:\\b|^\\s*)(?:(?:un\\.)?components|(?:un\\.)?custom|(?:un\\.)?directory|(?:un\\.)?instfiles|(?:un\\.)?license|uninstConfirm|admin|all|amd64-unicode|auto|both|bottom|bzip2|current|force|hide|highest|ifdiff|ifnewer|lastused|leave|left|listonly|lzma|nevershow|none|normal|notset|right|show|silent|silentlog|textonly|top|try|user|Win10|Win7|Win8|WinVista|x86-(ansi|unicode)|zlib)\\b/,\n                caseInsensitive: true\n            }, {\n                token: \"constant.language.slash-option.nsis\",\n                regex: /\\b\\/(?:a|BRANDING|CENTER|COMPONENTSONLYONCUSTOM|CUSTOMSTRING=|date|e|ENABLECANCEL|FILESONLY|file|FINAL|GLOBAL|gray|ifempty|ifndef|ignorecase|IMGID=|ITALIC|LANG=|NOCUSTOM|noerrors|NONFATAL|nonfatal|oname=|o|REBOOTOK|redef|RESIZETOFIT|r|SHORT|SILENT|SOLID|STRIKE|TRIM|UNDERLINE|utcdate|windows|x)\\b/,\n                caseInsensitive: true\n            }, {\n                token: \"constant.numeric.nsis\",\n                regex: /\\b(?:0(?:x|X)[0-9a-fA-F]+|[0-9]+(?:\\.[0-9]+)?)\\b/\n            }, {\n                token: \"entity.name.function.nsis\",\n                regex: /\\$\\([\\w\\.:-]+\\)/\n            }, {\n                token: \"storage.type.function.nsis\",\n                regex: /\\$\\w+/\n            }, {\n                token: \"punctuation.definition.string.begin.nsis\",\n                regex: /`/,\n                push: [{\n                        token: \"punctuation.definition.string.end.nsis\",\n                        regex: /`/,\n                        next: \"pop\"\n                    }, {\n                        token: \"constant.character.escape.nsis\",\n                        regex: /\\$\\\\./\n                    }, {\n                        defaultToken: \"string.quoted.back.nsis\"\n                    }]\n            }, {\n                token: \"punctuation.definition.string.begin.nsis\",\n                regex: /\"/,\n                push: [{\n                        token: \"punctuation.definition.string.end.nsis\",\n                        regex: /\"/,\n                        next: \"pop\"\n                    }, {\n                        token: \"constant.character.escape.nsis\",\n                        regex: /\\$\\\\./\n                    }, {\n                        defaultToken: \"string.quoted.double.nsis\"\n                    }]\n            }, {\n                token: \"punctuation.definition.string.begin.nsis\",\n                regex: /'/,\n                push: [{\n                        token: \"punctuation.definition.string.end.nsis\",\n                        regex: /'/,\n                        next: \"pop\"\n                    }, {\n                        token: \"constant.character.escape.nsis\",\n                        regex: /\\$\\\\./\n                    }, {\n                        defaultToken: \"string.quoted.single.nsis\"\n                    }]\n            }, {\n                token: [\n                    \"punctuation.definition.comment.nsis\",\n                    \"comment.line.nsis\"\n                ],\n                regex: /(;|#)(.*$)/\n            }, {\n                token: \"punctuation.definition.comment.nsis\",\n                regex: /\\/\\*/,\n                push: [{\n                        token: \"punctuation.definition.comment.nsis\",\n                        regex: /\\*\\//,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.block.nsis\"\n                    }]\n            }, {\n                token: \"text\",\n                regex: /(?:!include|!insertmacro)\\b/\n            }]\n    };\n    this.normalizeRules();\n};\nNSISHighlightRules.metaData = {\n    comment: \"\\n\\ttodo: - highlight functions\\n\\t\",\n    fileTypes: [\"nsi\", \"nsh\"],\n    name: \"NSIS\",\n    scopeName: \"source.nsis\"\n};\noop.inherits(NSISHighlightRules, TextHighlightRules);\nexports.NSISHighlightRules = NSISHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/nsis\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/nsis_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar NSISHighlightRules = require(\"./nsis_highlight_rules\").NSISHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = NSISHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = [\";\", \"#\"];\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/nsis\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/nsis\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-nunjucks.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/nunjucks_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar NunjucksHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    this.$rules[\"start\"].unshift({\n        token: \"punctuation.begin\",\n        regex: /{{-?/,\n        push: [{\n                token: \"punctuation.end\",\n                regex: /-?}}/,\n                next: \"pop\"\n            },\n            { include: \"expression\" }\n        ]\n    }, {\n        token: \"punctuation.begin\",\n        regex: /{%-?/,\n        push: [{\n                token: \"punctuation.end\",\n                regex: /-?%}/,\n                next: \"pop\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\b(r\\/.*\\/[gimy]?)\\b/\n            },\n            { include: \"statement\" }\n        ]\n    }, {\n        token: \"comment.begin\",\n        regex: /{#/,\n        push: [{\n                token: \"comment.end\",\n                regex: /#}/,\n                next: \"pop\"\n            },\n            { defaultToken: \"comment\" }\n        ]\n    });\n    this.addRules({\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    {\n                        token: \"punctuation.begin\",\n                        regex: /{{-?/,\n                        push: [{\n                                token: \"punctuation.end\",\n                                regex: /-?}}/,\n                                next: \"pop\"\n                            },\n                            { include: \"expression\" }\n                        ]\n                    },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    {\n                        token: \"punctuation.begin\",\n                        regex: /{{-?/,\n                        push: [{\n                                token: \"punctuation.end\",\n                                regex: /-?}}/,\n                                next: \"pop\"\n                            },\n                            { include: \"expression\" }\n                        ]\n                    },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }],\n        \"statement\": [{\n                token: \"keyword.control\",\n                regex: /\\b(block|endblock|extends|endif|elif|for|endfor|asyncEach|endeach|include|asyncAll|endall|macro|endmacro|set|endset|ignore missing|as|from|raw|verbatim|filter|endfilter)\\b/\n            },\n            { include: \"expression\" }\n        ],\n        \"expression\": [{\n                token: \"constant.language\",\n                regex: /\\b(true|false|none)\\b/\n            }, {\n                token: \"string\",\n                regex: /\"/,\n                push: [{\n                        token: \"string\",\n                        regex: /\"/,\n                        next: \"pop\"\n                    },\n                    { include: \"escapeStrings\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"string\",\n                regex: /'/,\n                push: [{\n                        token: \"string\",\n                        regex: /'/,\n                        next: \"pop\"\n                    },\n                    { include: \"escapeStrings\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: \"keyword.operator\",\n                regex: /\\+|-|\\/\\/|\\/|%|\\*\\*|\\*|===|==|!==|!=|>=|>|<=|</\n            }, {\n                token: \"keyword.control\",\n                regex: /\\b(and|else|if|in|import|not|or)\\b/\n            }, {\n                token: \"support.function\",\n                regex: /[a-zA-Z_]+(?=\\()/\n            }, {\n                token: \"paren.lpar\",\n                regex: /[(\\[{]/\n            }, {\n                token: \"paren.rpar\",\n                regex: /[)\\]}]/\n            }, {\n                token: \"punctuation\",\n                regex: /[,]/\n            }, {\n                token: [\"punctuation\", \"support.function\"],\n                regex: /(\\.)([a-zA-Z_][a-zA-Z0-9_]*)(?=\\()/\n            }, {\n                token: [\"punctuation\", \"variable.parameter\"],\n                regex: /(\\.)([a-zA-Z_][a-zA-Z0-9_]*)/\n            }, {\n                token: [\"punctuation\", \"text\", \"support.other\"],\n                regex: /(\\|)(\\s)*([a-zA-Z_][a-zA-Z0-9_]*)/\n            }, {\n                token: \"variable\",\n                regex: /[a-zA-Z_][a-zA-Z0-9_]*/\n            }\n        ],\n        \"escapeStrings\": [{\n                token: \"constant.language.escape\",\n                regex: /(\\\\\\\\n)|(\\\\\\\\)|(\\\\\")|(\\\\')|(\\\\a)|(\\\\b)|(\\\\f)|(\\\\n)|(\\\\r)|(\\\\t)|(\\\\v)/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:x[0-9A-F]{2}|(?:U[0-9A-Fa-f]{8})|(?:u[0-9A-Fa-f]{4})|(?:N{[a-zA-Z ]+}))/\n            }]\n    });\n    this.normalizeRules();\n};\noop.inherits(NunjucksHighlightRules, TextHighlightRules);\nexports.NunjucksHighlightRules = NunjucksHighlightRules;\n\n});\n\nace.define(\"ace/mode/nunjucks\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/nunjucks_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar NunjucksHighlightRules = require(\"./nunjucks_highlight_rules\").NunjucksHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = NunjucksHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.$id = \"ace/mode/nunjucks\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/nunjucks\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-objectivec.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\nvar c_cppHighlightRules = function () {\n    var keywordControls = (\"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\");\n    var storageType = (\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|int8_t|int16_t|int32_t|int64_t|long|short|signed|size_t|struct|typedef|uint8_t|uint16_t|uint32_t|uint64_t|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\");\n    var storageModifiers = (\"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\");\n    var keywordOperators = (\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\");\n    var builtinConstants = (\"NULL|true|false|TRUE|FALSE|nullptr\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\": keywordControls,\n        \"storage.type\": storageType,\n        \"storage.modifier\": storageModifiers,\n        \"keyword.operator\": keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n        + /(\\d+\\$)?/.source // field (argument #)\n        + /[#0\\- +']*/.source // flags\n        + /[,;:_]?/.source // separator character (AltiVec)\n        + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n        + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n        + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n        + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"//$\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \"//\",\n                next: \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"string.start\",\n                regex: 'R\"\\\\(',\n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next: \"directive\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token: \"support.function.C99.c\",\n                regex: cFunctions\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"singleLineComment\": [\n            {\n                token: \"comment\",\n                regex: /\\\\$/,\n                next: \"singleLineComment\"\n            }, {\n                token: \"comment\",\n                regex: /$/,\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\": [\n            {\n                token: \"constant.other.multiline\",\n                regex: /\\\\/\n            },\n            {\n                token: \"constant.other.multiline\",\n                regex: /.*\\\\/\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*<.+?>\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: /[^\\\\\\/]+/,\n                next: \"start\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(c_cppHighlightRules, TextHighlightRules);\nexports.c_cppHighlightRules = c_cppHighlightRules;\n\n});\n\nace.define(\"ace/mode/objectivec_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/c_cpp_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar C_Highlight_File = require(\"./c_cpp_highlight_rules\");\nvar CHighlightRules = C_Highlight_File.c_cppHighlightRules;\nvar ObjectiveCHighlightRules = function () {\n    var escapedConstRe = \"\\\\\\\\(?:[abefnrtv'\\\"?\\\\\\\\]|\" +\n        \"[0-3]\\\\d{1,2}|\" +\n        \"[4-7]\\\\d?|\" +\n        \"222|\" +\n        \"x[a-zA-Z0-9]+)\";\n    var specialVariables = [{\n            regex: \"\\\\b_cmd\\\\b\",\n            token: \"variable.other.selector.objc\"\n        }, {\n            regex: \"\\\\b(?:self|super)\\\\b\",\n            token: \"variable.language.objc\"\n        }\n    ];\n    var cObj = new CHighlightRules();\n    var cRules = cObj.getRules();\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            },\n            {\n                token: [\"storage.type.objc\", \"punctuation.definition.storage.type.objc\",\n                    \"entity.name.type.objc\", \"text\", \"entity.other.inherited-class.objc\"\n                ],\n                regex: \"(@)(interface|protocol)(?!.+;)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*:\\\\s*)([A-Za-z]+)\"\n            },\n            {\n                token: [\"storage.type.objc\"],\n                regex: \"(@end)\"\n            },\n            {\n                token: [\"storage.type.objc\", \"entity.name.type.objc\",\n                    \"entity.other.inherited-class.objc\"\n                ],\n                regex: \"(@implementation)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*?::\\\\s*(?:[A-Za-z][A-Za-z0-9]*))?\"\n            },\n            {\n                token: \"string.begin.objc\",\n                regex: '@\"',\n                next: \"constant_NSString\"\n            },\n            {\n                token: \"storage.type.objc\",\n                regex: \"\\\\bid\\\\s*<\",\n                next: \"protocol_list\"\n            },\n            {\n                token: \"keyword.control.macro.objc\",\n                regex: \"\\\\bNS_DURING|NS_HANDLER|NS_ENDHANDLER\\\\b\"\n            },\n            {\n                token: [\"punctuation.definition.keyword.objc\", \"keyword.control.exception.objc\"],\n                regex: \"(@)(try|catch|finally|throw)\\\\b\"\n            },\n            {\n                token: [\"punctuation.definition.keyword.objc\", \"keyword.other.objc\"],\n                regex: \"(@)(defs|encode)\\\\b\"\n            },\n            {\n                token: [\"storage.type.id.objc\", \"text\"],\n                regex: \"(\\\\bid\\\\b)(\\\\s|\\\\n)?\"\n            },\n            {\n                token: \"storage.type.objc\",\n                regex: \"\\\\bIBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class\\\\b\"\n            },\n            {\n                token: [\"punctuation.definition.storage.type.objc\", \"storage.type.objc\"],\n                regex: \"(@)(class|protocol)\\\\b\"\n            },\n            {\n                token: [\"punctuation.definition.storage.type.objc\", \"punctuation\"],\n                regex: \"(@selector)(\\\\s*\\\\()\",\n                next: \"selectors\"\n            },\n            {\n                token: [\"punctuation.definition.storage.modifier.objc\", \"storage.modifier.objc\"],\n                regex: \"(@)(synchronized|public|private|protected|package)\\\\b\"\n            },\n            {\n                token: \"constant.language.objc\",\n                regex: \"\\\\bYES|NO|Nil|nil\\\\b\"\n            },\n            {\n                token: \"support.variable.foundation\",\n                regex: \"\\\\bNSApp\\\\b\"\n            },\n            {\n                token: [\"support.function.cocoa.leopard\"],\n                regex: \"(?:\\\\b)(NS(?:Rect(?:ToCGRect|FromCGRect)|MakeCollectable|S(?:tringFromProtocol|ize(?:ToCGSize|FromCGSize))|Draw(?:NinePartImage|ThreePartImage)|P(?:oint(?:ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))(?:\\\\b)\"\n            },\n            {\n                token: [\"support.function.cocoa\"],\n                regex: \"(?:\\\\b)(NS(?:R(?:ound(?:DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(?:CriticalAlertPanel(?:RelativeToWindow)?|InformationalAlertPanel(?:RelativeToWindow)?|AlertPanel(?:RelativeToWindow)?)|e(?:set(?:MapTable|HashTable)|c(?:ycleZone|t(?:Clip(?:List)?|F(?:ill(?:UsingOperation|List(?:UsingOperation|With(?:Grays|Colors(?:UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(?:dPixel|l(?:MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(?:SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(?:s)?|WindowServerMemory|AlertPanel)|M(?:i(?:n(?:X|Y)|d(?:X|Y))|ouseInRect|a(?:p(?:Remove|Get|Member|Insert(?:IfAbsent|KnownAbsent)?)|ke(?:R(?:ect|ange)|Size|Point)|x(?:Range|X|Y)))|B(?:itsPer(?:SampleFromDepth|PixelFromDepth)|e(?:stDepth|ep|gin(?:CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(?:ho(?:uldRetainWithZone|w(?:sServicesMenuItem|AnimationEffect))|tringFrom(?:R(?:ect|ange)|MapTable|S(?:ize|elector)|HashTable|Class|Point)|izeFromString|e(?:t(?:ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(?:Big(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|Short|Host(?:ShortTo(?:Big|Little)|IntTo(?:Big|Little)|DoubleTo(?:Big|Little)|FloatTo(?:Big|Little)|Long(?:To(?:Big|Little)|LongTo(?:Big|Little)))|Int|Double|Float|L(?:ittle(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|ong(?:Long)?)))|H(?:ighlightRect|o(?:stByteOrder|meDirectory(?:ForUser)?)|eight|ash(?:Remove|Get|Insert(?:IfAbsent|KnownAbsent)?)|FSType(?:CodeFromFileType|OfFile))|N(?:umberOfColorComponents|ext(?:MapEnumeratorPair|HashEnumeratorItem))|C(?:o(?:n(?:tainsRect|vert(?:GlyphsToPackedGlyphs|Swapped(?:DoubleToHost|FloatToHost)|Host(?:DoubleToSwapped|FloatToSwapped)))|unt(?:MapTable|HashTable|Frames|Windows(?:ForContext)?)|py(?:M(?:emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(?:MapTables|HashTables))|lassFromString|reate(?:MapTable(?:WithZone)?|HashTable(?:WithZone)?|Zone|File(?:namePboardType|ContentsPboardType)))|TemporaryDirectory|I(?:s(?:ControllerMarker|EmptyRect|FreedObject)|n(?:setRect|crementExtraRefCount|te(?:r(?:sect(?:sRect|ionR(?:ect|ange))|faceStyleForKey)|gralRect)))|Zone(?:Realloc|Malloc|Name|Calloc|Fr(?:omPointer|ee))|O(?:penStepRootDirectory|ffsetRect)|D(?:i(?:sableScreenUpdates|videRect)|ottedFrameRect|e(?:c(?:imal(?:Round|Multiply|S(?:tring|ubtract)|Normalize|Co(?:py|mpa(?:ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(?:MemoryPages|Object))|raw(?:Gr(?:oove|ayBezel)|B(?:itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(?:hiteBezel|indowBackground)|LightBezel))|U(?:serName|n(?:ionR(?:ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(?:Bundle(?:Setup|Cleanup)|Setup(?:VirtualMachine)?|Needs(?:ToLoadClasses|VirtualMachine)|ClassesF(?:orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(?:oint(?:InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(?:n(?:d(?:MapTableEnumeration|HashTableEnumeration)|umerate(?:MapTable|HashTable)|ableScreenUpdates)|qual(?:R(?:ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(?:ileTypeForHFSTypeCode|ullUserName|r(?:ee(?:MapTable|HashTable)|ame(?:Rect(?:WithWidth(?:UsingOperation)?)?|Address)))|Wi(?:ndowList(?:ForContext)?|dth)|Lo(?:cationInRange|g(?:v|PageSize)?)|A(?:ccessibility(?:R(?:oleDescription(?:ForUIElement)?|aiseBadArgumentException)|Unignored(?:Children(?:ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(?:Main|Load)|vailableWindowDepths|ll(?:MapTable(?:Values|Keys)|HashTableObjects|ocate(?:MemoryPages|Collectable|Object)))))(?:\\\\b)\"\n            },\n            {\n                token: [\"support.class.cocoa.leopard\"],\n                regex: \"(?:\\\\b)(NS(?:RuleEditor|G(?:arbageCollector|radient)|MapTable|HashTable|Co(?:ndition|llectionView(?:Item)?)|T(?:oolbarItemGroup|extInputClient|r(?:eeNode|ackingArea))|InvocationOperation|Operation(?:Queue)?|D(?:ictionaryController|ockTile)|P(?:ointer(?:Functions|Array)|athC(?:o(?:ntrol(?:Delegate)?|mponentCell)|ell(?:Delegate)?)|r(?:intPanelAccessorizing|edicateEditor(?:RowTemplate)?))|ViewController|FastEnumeration|Animat(?:ionContext|ablePropertyContainer)))(?:\\\\b)\"\n            },\n            {\n                token: [\"support.class.cocoa\"],\n                regex: \"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"\n            },\n            {\n                token: [\"support.type.cocoa.leopard\"],\n                regex: \"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"\n            },\n            {\n                token: [\"support.class.quartz\"],\n                regex: \"(?:\\\\b)(C(?:I(?:Sampler|Co(?:ntext|lor)|Image(?:Accumulator)?|PlugIn(?:Registration)?|Vector|Kernel|Filter(?:Generator|Shape)?)|A(?:Renderer|MediaTiming(?:Function)?|BasicAnimation|ScrollLayer|Constraint(?:LayoutManager)?|T(?:iledLayer|extLayer|rans(?:ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(?:nimation(?:Group)?|ction))))(?:\\\\b)\"\n            },\n            {\n                token: [\"support.type.quartz\"],\n                regex: \"(?:\\\\b)(C(?:G(?:Float|Point|Size|Rect)|IFormat|AConstraintAttribute))(?:\\\\b)\"\n            },\n            {\n                token: [\"support.type.cocoa\"],\n                regex: \"(?:\\\\b)(NS(?:R(?:ect(?:Edge)?|ange)|G(?:lyph(?:Relation|LayoutMode)?|radientType)|M(?:odalSession|a(?:trixMode|p(?:Table|Enumerator)))|B(?:itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(?:cr(?:oll(?:er(?:Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(?:Granularity|Direction|Affinity)|wapped(?:Double|Float)|aveOperationType)|Ha(?:sh(?:Table|Enumerator)|ndler(?:2)?)|C(?:o(?:ntrol(?:Size|Tint)|mp(?:ositingOperation|arisonResult))|ell(?:State|Type|ImagePosition|Attribute))|T(?:hreadPrivate|ypesetterGlyphInfo|i(?:ckMarkPosition|tlePosition|meInterval)|o(?:ol(?:TipTag|bar(?:SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(?:TabType|Alignment)|ab(?:State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(?:ContextAuxiliary|PixelFormatAuxiliary)|D(?:ocumentChangeType|atePickerElementFlags|ra(?:werState|gOperation))|UsableScrollerParts|P(?:oint|r(?:intingPageOrder|ogressIndicator(?:Style|Th(?:ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(?:nt(?:SymbolicTraits|TraitMask|Action)|cusRingType)|W(?:indow(?:OrderingMode|Depth)|orkspace(?:IconCreationOptions|LaunchOptions)|ritingDirection)|L(?:ineBreakMode|ayout(?:Status|Direction))|A(?:nimation(?:Progress|Effect)|ppl(?:ication(?:TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle)))(?:\\\\b)\"\n            },\n            {\n                token: [\"support.constant.cocoa\"],\n                regex: \"(?:\\\\b)(NS(?:NotFound|Ordered(?:Ascending|Descending|Same)))(?:\\\\b)\"\n            },\n            {\n                token: [\"support.constant.notification.cocoa.leopard\"],\n                regex: \"(?:\\\\b)(NS(?:MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification)(?:\\\\b)\"\n            },\n            {\n                token: [\"support.constant.notification.cocoa\"],\n                regex: \"(?:\\\\b)(NS(?:Menu(?:Did(?:RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(?:ystemColorsDidChange|plitView(?:DidResizeSubviews|WillResizeSubviews))|C(?:o(?:nt(?:extHelpModeDid(?:Deactivate|Activate)|rolT(?:intDidChange|extDid(?:BeginEditing|Change|EndEditing)))|lor(?:PanelColorDidChange|ListDidChange)|mboBox(?:Selection(?:IsChanging|DidChange)|Will(?:Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(?:oolbar(?:DidRemoveItem|WillAddItem)|ext(?:Storage(?:DidProcessEditing|WillProcessEditing)|Did(?:BeginEditing|Change|EndEditing)|View(?:DidChange(?:Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)))|ImageRepRegistryDidChange|OutlineView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)|Item(?:Did(?:Collapse|Expand)|Will(?:Collapse|Expand)))|Drawer(?:Did(?:Close|Open)|Will(?:Close|Open))|PopUpButton(?:CellWillPopUp|WillPopUp)|View(?:GlobalFrameDidChange|BoundsDidChange|F(?:ocusDidChange|rameDidChange))|FontSetChanged|W(?:indow(?:Did(?:Resi(?:ze|gn(?:Main|Key))|M(?:iniaturize|ove)|Become(?:Main|Key)|ChangeScreen(?:|Profile)|Deminiaturize|Update|E(?:ndSheet|xpose))|Will(?:M(?:iniaturize|ove)|BeginSheet|Close))|orkspace(?:SessionDid(?:ResignActive|BecomeActive)|Did(?:Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(?:Sleep|Unmount|PowerOff|LaunchApplication)))|A(?:ntialiasThresholdChanged|ppl(?:ication(?:Did(?:ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(?:nhide|pdate)|FinishLaunching)|Will(?:ResignActive|BecomeActive|Hide|Terminate|U(?:nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification)(?:\\\\b)\"\n            },\n            {\n                token: [\"support.constant.cocoa.leopard\"],\n                regex: \"(?:\\\\b)(NS(?:RuleEditor(?:RowType(?:Simple|Compound)|NestingMode(?:Si(?:ngle|mple)|Compound|List))|GradientDraws(?:BeforeStartingLocation|AfterEndingLocation)|M(?:inusSetExpressionType|a(?:chPortDeallocate(?:ReceiveRight|SendRight|None)|pTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(?:oxCustom|undleExecutableArchitecture(?:X86|I386|PPC(?:64)?)|etweenPredicateOperatorType|ackgroundStyle(?:Raised|Dark|L(?:ight|owered)))|S(?:tring(?:DrawingTruncatesLastVisibleLine|EncodingConversion(?:ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(?:e(?:ech(?:SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(?:GrammarFlag|SpellingFlag))|litViewDividerStyleThi(?:n|ck))|e(?:rvice(?:RequestTimedOutError|M(?:iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(?:inimum|aximum)|Application(?:NotFoundError|LaunchFailedError))|gmentStyle(?:Round(?:Rect|ed)|SmallSquare|Capsule|Textured(?:Rounded|Square)|Automatic)))|H(?:UDWindowMask|ashTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(?:oModeColorPanel|etServiceNoAutoRename)|C(?:hangeRedone|o(?:ntainsPredicateOperatorType|l(?:orRenderingIntent(?:RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(?:None|ContentArea|TrackableArea|EditableTextArea))|T(?:imeZoneNameStyle(?:S(?:hort(?:Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(?:Regular|SourceList)|racking(?:Mouse(?:Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(?:ssumeInside|ctive(?:In(?:KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(?:n(?:tersectSetExpressionType|dexedColorSpaceModel)|mageScale(?:None|Proportionally(?:Down|UpOrDown)|AxesIndependently))|Ope(?:nGLPFAAllowOfflineRenderers|rationQueue(?:DefaultMaxConcurrentOperationCount|Priority(?:High|Normal|Very(?:High|Low)|Low)))|D(?:iacriticInsensitiveSearch|ownloadsDirectory)|U(?:nionSetExpressionType|TF(?:16(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(?:ointerFunctions(?:Ma(?:chVirtualMemory|llocMemory)|Str(?:ongMemory|uctPersonality)|C(?:StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(?:paque(?:Memory|Personality)|bjectP(?:ointerPersonality|ersonality)))|at(?:hStyle(?:Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(?:Scaling|Copies|Orientation|P(?:a(?:perSize|ge(?:Range|SetupAccessory))|review)))|Executable(?:RuntimeMismatchError|NotLoadableError|ErrorM(?:inimum|aximum)|L(?:inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(?:Initial|Prior)|F(?:i(?:ndPanelSubstringMatchType(?:StartsWith|Contains|EndsWith|FullWord)|leRead(?:TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(?:ndow(?:BackingLocation(?:MainMemory|Default|VideoMemory)|Sharing(?:Read(?:Only|Write)|None)|CollectionBehavior(?:MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType))(?:\\\\b)\"\n            },\n            {\n                token: [\"support.constant.cocoa\"],\n                regex: \"(?:\\\\b)(NS(?:R(?:GB(?:ModeColorPanel|ColorSpaceModel)|ight(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey)|ound(?:RectBezelStyle|Bankers|ed(?:BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(?:CapStyle|JoinStyle))|un(?:StoppedResponse|ContinuesResponse|AbortedResponse)|e(?:s(?:izableWindowMask|et(?:CursorRectsRunLoopOrdering|FunctionKey))|ce(?:ssedBezelStyle|iver(?:sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(?:evancyLevelIndicatorStyle|ative(?:Before|After))|gular(?:SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(?:n(?:domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(?:ModeMatrix|Button)))|G(?:IFFileType|lyph(?:Below|Inscribe(?:B(?:elow|ase)|Over(?:strike|Below)|Above)|Layout(?:WithPrevious|A(?:tAPoint|gainstAPoint))|A(?:ttribute(?:BidiLevel|Soft|Inscribe|Elastic)|bove))|r(?:ooveBorder|eaterThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|a(?:y(?:ModeColorPanel|ColorSpaceModel)|dient(?:None|Con(?:cave(?:Strong|Weak)|vex(?:Strong|Weak)))|phiteControlTint)))|XML(?:N(?:o(?:tationDeclarationKind|de(?:CompactEmptyElement|IsCDATA|OptionsNone|Use(?:SingleQuotes|DoubleQuotes)|Pre(?:serve(?:NamespaceOrder|C(?:haracterReferences|DATA)|DTD|Prefixes|E(?:ntities|mptyElements)|Quotes|Whitespace|A(?:ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(?:ocument(?:X(?:MLKind|HTMLKind|Include)|HTMLKind|T(?:idy(?:XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(?:arser(?:GTRequiredError|XMLDeclNot(?:StartedError|FinishedError)|Mi(?:splaced(?:XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(?:StartedError|FinishedError))|S(?:t(?:andaloneValueError|ringNot(?:StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(?:MTOKENRequiredError|o(?:t(?:ationNot(?:StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(?:haracterRef(?:In(?:DTDError|PrologError|EpilogError)|AtEOFError)|o(?:nditionalSectionNot(?:StartedError|FinishedError)|mment(?:NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(?:ternalError|valid(?:HexCharacterRefError|C(?:haracter(?:RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(?:NameError|Error)))|OutOfMemoryError|D(?:ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(?:RI(?:RequiredError|FragmentError)|n(?:declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(?:CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(?:MissingSemiError|NoNameError|In(?:Internal(?:SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(?:ocessingInstructionNot(?:StartedError|FinishedError)|ematureDocumentEndError))|E(?:n(?:codingNotSupportedError|tity(?:Ref(?:In(?:DTDError|PrologError|EpilogError)|erence(?:MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(?:StartedError|FinishedError)|Is(?:ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(?:StartedError|FinishedError)|xt(?:ernalS(?:tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(?:iteralNot(?:StartedError|FinishedError)|T(?:RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(?:RedefinedError|HasNoValueError|Not(?:StartedError|FinishedError)|ListNot(?:StartedError|FinishedError)))|rocessingInstructionKind)|E(?:ntity(?:GeneralKind|DeclarationKind|UnparsedKind|P(?:ar(?:sedKind|ameterKind)|redefined))|lement(?:Declaration(?:MixedKind|UndefinedKind|E(?:lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(?:N(?:MToken(?:sKind|Kind)|otationKind)|CDATAKind|ID(?:Ref(?:sKind|Kind)|Kind)|DeclarationKind|En(?:tit(?:yKind|iesKind)|umerationKind)|Kind))|M(?:i(?:n(?:XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(?:nthCalendarUnit|deSwitchFunctionKey|use(?:Moved(?:Mask)?|E(?:ntered(?:Mask)?|ventSubtype|xited(?:Mask)?))|veToBezierPathElement|mentary(?:ChangeButton|Push(?:Button|InButton)|Light(?:Button)?))|enuFunctionKey|a(?:c(?:intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(?:XEdge|YEdge))|ACHOperatingSystem)|B(?:MPFileType|o(?:ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(?:Se(?:condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(?:zelBorder|velLineJoinStyle|low(?:Bottom|Top)|gin(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(?:spaceCharacter|tabTextMovement|ingStore(?:Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(?:owser(?:NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(?:h(?:ift(?:JISStringEncoding|KeyMask)|ow(?:ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(?:s(?:ReqFunctionKey|tem(?:D(?:omainMask|efined(?:Mask)?)|FunctionKey))|mbolStringEncoding)|c(?:a(?:nnedOption|le(?:None|ToFit|Proportionally))|r(?:oll(?:er(?:NoPart|Increment(?:Page|Line|Arrow)|Decrement(?:Page|Line|Arrow)|Knob(?:Slot)?|Arrows(?:M(?:inEnd|axEnd)|None|DefaultSetting))|Wheel(?:Mask)?|LockFunctionKey)|eenChangedEventType))|t(?:opFunctionKey|r(?:ingDrawing(?:OneShot|DisableScreenFontSubstitution|Uses(?:DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(?:Status(?:Reading|NotOpen|Closed|Open(?:ing)?|Error|Writing|AtEnd)|Event(?:Has(?:BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(?:ndEncountered|rrorOccurred)))))|i(?:ngle(?:DateMode|UnderlineStyle)|ze(?:DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(?:condCalendarUnit|lect(?:By(?:Character|Paragraph|Word)|i(?:ng(?:Next|Previous)|onAffinity(?:Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(?:Momentary|Select(?:One|Any)))|quareLineCapStyle|witchButton|ave(?:ToOperation|Op(?:tions(?:Yes|No|Ask)|eration)|AsOperation)|mall(?:SquareBezelStyle|C(?:ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(?:ighlightModeMatrix|SBModeColorPanel|o(?:ur(?:Minute(?:SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(?:Never|OnlyFromMainDocumentDomain|Always)|e(?:lp(?:ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(?:MonthDa(?:yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(?:o(?:n(?:StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(?:ification(?:SuspensionBehavior(?:Hold|Coalesce|D(?:eliverImmediately|rop))|NoCoalescing|CoalescingOn(?:Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(?:cr(?:iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(?:itle|opLevelContainersSpecifierError|abs(?:BezelBorder|NoBorder|LineBorder))|I(?:nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(?:ll(?:Glyph|CellType)|m(?:eric(?:Search|PadKeyMask)|berFormatter(?:Round(?:Half(?:Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(?:10|Default)|S(?:cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(?:ercentStyle|ad(?:Before(?:Suffix|Prefix)|After(?:Suffix|Prefix))))))|e(?:t(?:Services(?:BadArgumentError|NotFoundError|C(?:ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(?:StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(?:t(?:iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(?:hange(?:ReadOtherContents|GrayCell(?:Mask)?|BackgroundCell(?:Mask)?|Cleared|Done|Undone|Autosaved)|MYK(?:ModeColorPanel|ColorSpaceModel)|ircular(?:BezelStyle|Slider)|o(?:n(?:stantValueExpressionType|t(?:inuousCapacityLevelIndicatorStyle|entsCellMask|ain(?:sComparison|erSpecifierError)|rol(?:Glyph|KeyMask))|densedFontMask)|lor(?:Panel(?:RGBModeMask|GrayModeMask|HSBModeMask|C(?:MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(?:p(?:osite(?:XOR|Source(?:In|O(?:ut|ver)|Atop)|Highlight|C(?:opy|lear)|Destination(?:In|O(?:ut|ver)|Atop)|Plus(?:Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(?:stom(?:SelectorPredicateOperatorType|PaletteModeColorPanel)|r(?:sor(?:Update(?:Mask)?|PointingDevice)|veToBezierPathElement))|e(?:nterT(?:extAlignment|abStopType)|ll(?:State|H(?:ighlighted|as(?:Image(?:Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(?:Bordered|InsetButton)|Disabled|Editable|LightsBy(?:Gray|Background|Contents)|AllowsMixedState))|l(?:ipPagination|o(?:s(?:ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(?:ControlTint|DisplayFunctionKey|LineFunctionKey))|a(?:seInsensitive(?:Search|PredicateOption)|n(?:notCreateScriptCommandError|cel(?:Button|TextMovement))|chesDirectory|lculation(?:NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(?:itical(?:Request|AlertStyle)|ayonModeColorPanel))|T(?:hick(?:SquareBezelStyle|erSquareBezelStyle)|ypesetter(?:Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(?:ineBreakAction|atestBehavior))|i(?:ckMark(?:Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(?:olbarItemVisibilityPriority(?:Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(?:Compression(?:N(?:one|EXT)|CCITTFAX(?:3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(?:rminate(?:Now|Cancel|Later)|xt(?:Read(?:InapplicableDocumentTypeError|WriteErrorM(?:inimum|aximum))|Block(?:M(?:i(?:nimum(?:Height|Width)|ddleAlignment)|a(?:rgin|ximum(?:Height|Width)))|B(?:o(?:ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(?:ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(?:Characters|Attributes)|CellType|ured(?:RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(?:FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(?:RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(?:Character|TextMovement|le(?:tP(?:oint(?:Mask|EventSubtype)?|roximity(?:Mask|EventSubtype)?)|Column(?:NoResizing|UserResizingMask|AutoresizingMask)|View(?:ReverseSequentialColumnAutoresizingStyle|GridNone|S(?:olid(?:HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(?:n(?:sert(?:CharFunctionKey|FunctionKey|LineFunctionKey)|t(?:Type|ernalS(?:criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(?:Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(?:2022JPStringEncoding|Latin(?:1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(?:R(?:ight|ep(?:MatchesDevice|LoadStatus(?:ReadingHeader|Completed|InvalidData|Un(?:expectedEOF|knownType)|WillNeedAllData)))|Below|C(?:ellType|ache(?:BySize|Never|Default|Always))|Interpolation(?:High|None|Default|Low)|O(?:nly|verlaps)|Frame(?:Gr(?:oove|ayBezel)|Button|None|Photo)|L(?:oadStatus(?:ReadError|C(?:ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(?:lign(?:Right|Bottom(?:Right|Left)?|Center|Top(?:Right|Left)?|Left)|bove)))|O(?:n(?:State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|TextMovement)|SF1OperatingSystem|pe(?:n(?:GL(?:GO(?:Re(?:setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(?:R(?:obust|endererID)|M(?:inimumPolicy|ulti(?:sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(?:creenMask|te(?:ncilSize|reo)|ingleRenderer|upersample|ample(?:s|Buffers|Alpha))|NoRecovery|C(?:o(?:lor(?:Size|Float)|mpliant)|losestPolicy)|OffScreen|D(?:oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(?:cc(?:umSize|elerated)|ux(?:Buffers|DepthStencil)|l(?:phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(?:criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(?:B(?:itfield|oolType)|S(?:hortType|tr(?:ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(?:Type|longType)|ArrayType))|D(?:i(?:s(?:c(?:losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(?:Selection|PredicateModifier))|o(?:c(?:ModalWindowMask|ument(?:Directory|ationDirectory))|ubleType|wn(?:TextMovement|ArrowFunctionKey))|e(?:s(?:cendingPageOrder|ktopDirectory)|cimalTabStopType|v(?:ice(?:NColorSpaceModel|IndependentModifierFlagsMask)|eloper(?:Directory|ApplicationDirectory))|fault(?:ControlTint|TokenStyle)|lete(?:Char(?:acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(?:yCalendarUnit|teFormatter(?:MediumStyle|Behavior(?:10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(?:wer(?:Clos(?:ingState|edState)|Open(?:ingState|State))|gOperation(?:Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(?:ser(?:CancelledError|D(?:irectory|omainMask)|FunctionKey)|RL(?:Handle(?:NotLoaded|Load(?:Succeeded|InProgress|Failed))|CredentialPersistence(?:None|Permanent|ForSession))|n(?:scaledWindowMask|cachedRead|i(?:codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(?:o(?:CloseGroupingRunLoopOrdering|FunctionKey)|e(?:finedDateComponent|rline(?:Style(?:Single|None|Thick|Double)|Pattern(?:Solid|D(?:ot|ash(?:Dot(?:Dot)?)?)))))|known(?:ColorSpaceModel|P(?:ointingDevice|ageOrder)|KeyS(?:criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(?:dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(?:ustifiedTextAlignment|PEG(?:2000FileType|FileType)|apaneseEUC(?:GlyphPacking|StringEncoding))|P(?:o(?:s(?:t(?:Now|erFontMask|WhenIdle|ASAP)|iti(?:on(?:Replace|Be(?:fore|ginning)|End|After)|ve(?:IntType|DoubleType|FloatType)))|pUp(?:NoArrow|ArrowAt(?:Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(?:InCell(?:Mask)?|OnPushOffButton)|e(?:n(?:TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(?:Mask)?)|P(?:S(?:caleField|tatus(?:Title|Field)|aveButton)|N(?:ote(?:Title|Field)|ame(?:Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(?:a(?:perFeedButton|ge(?:Range(?:To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(?:useFunctionKey|ragraphSeparatorCharacter|ge(?:DownFunctionKey|UpFunctionKey))|r(?:int(?:ing(?:ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(?:NotFound|OK|Error)|FunctionKey)|o(?:p(?:ertyList(?:XMLFormat|MutableContainers(?:AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(?:BarStyle|SpinningStyle|Preferred(?:SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(?:ssedTab|vFunctionKey))|L(?:HeightForm|CancelButton|TitleField|ImageButton|O(?:KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(?:n(?:terCharacter|d(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|v(?:e(?:nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(?:Comparison|PredicateOperatorType)|ra(?:serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(?:clude(?:10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(?:i(?:ew(?:M(?:in(?:XMargin|YMargin)|ax(?:XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(?:lidationErrorM(?:inimum|aximum)|riableExpressionType))|Key(?:SpecifierEvaluationScriptError|Down(?:Mask)?|Up(?:Mask)?|PathExpressionType|Value(?:MinusSetMutation|SetSetMutation|Change(?:Re(?:placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(?:New|Old)|UnionSetMutation|ValidationError))|QTMovie(?:NormalPlayback|Looping(?:BackAndForthPlayback|Playback))|F(?:1(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(?:nd(?:PanelAction(?:Replace(?:A(?:ndFind|ll(?:InSelection)?))?|S(?:howFindPanel|e(?:tFindString|lectAll(?:InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(?:Read(?:No(?:SuchFileError|PermissionError)|CorruptFileError|In(?:validFileNameError|applicableStringEncodingError)|Un(?:supportedSchemeError|knownError))|HandlingPanel(?:CancelButton|OKButton)|NoSuchFileError|ErrorM(?:inimum|aximum)|Write(?:NoPermissionError|In(?:validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(?:supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(?:nt(?:Mo(?:noSpaceTrait|dernSerifsClass)|BoldTrait|S(?:ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(?:o(?:ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(?:ntegerAdvancementsRenderingMode|talicTrait)|O(?:ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(?:nknownClass|IOptimizedTrait)|Panel(?:S(?:hadowEffectModeMask|t(?:andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(?:ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(?:amilyClassMask|reeformSerifsClass)|Antialiased(?:RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(?:Below|Type(?:None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(?:attingError(?:M(?:inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(?:ExpressionType|KeyMask)|3(?:1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(?:RevertButton|S(?:ize(?:Title|Field)|etButton)|CurrentField|Preview(?:Button|Field))|l(?:oat(?:ingPointSamplesBitmapFormat|Type)|agsChanged(?:Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(?:heelModeColorPanel|indow(?:s(?:NTOperatingSystem|CP125(?:1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(?:InterfaceStyle|OperatingSystem))|M(?:iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(?:NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(?:ctivation|ddingToRecents)|A(?:sync|nd(?:Hide(?:Others)?|Print)|llowingClassicStartup))|eek(?:day(?:CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(?:ntsBidiLevels|rningAlertStyle)|r(?:itingDirection(?:RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(?:i(?:stModeMatrix|ne(?:Moves(?:Right|Down|Up|Left)|B(?:order|reakBy(?:C(?:harWrapping|lipping)|Truncating(?:Middle|Head|Tail)|WordWrapping))|S(?:eparatorCharacter|weep(?:Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(?:ssThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey))|a(?:yout(?:RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(?:sc(?:iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(?:y(?:Type|PredicateModifier|EventMask)|choredSearch|imation(?:Blocking|Nonblocking(?:Threaded)?|E(?:ffect(?:DisappearingItemDefault|Poof)|ase(?:In(?:Out)?|Out))|Linear)|dPredicateType)|t(?:Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(?:obe(?:GB1CharacterCollection|CNS1CharacterCollection|Japan(?:1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(?:saveOperation|Pagination)|pp(?:lication(?:SupportDirectory|D(?:irectory|e(?:fined(?:Mask)?|legateReply(?:Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(?:Mask)?)|l(?:ternateKeyMask|pha(?:ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(?:SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(?:ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(?:sWrongScriptError|EvaluationScriptError)|bove(?:Bottom|Top)|WTEventType)))(?:\\\\b)\"\n            },\n            {\n                token: \"support.function.C99.c\",\n                regex: C_Highlight_File.cFunctions\n            },\n            {\n                token: cObj.getKeywords(),\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token: \"punctuation.section.scope.begin.objc\",\n                regex: \"\\\\[\",\n                next: \"bracketed_content\"\n            },\n            {\n                token: \"meta.function.objc\",\n                regex: \"^(?:-|\\\\+)\\\\s*\"\n            }\n        ],\n        \"constant_NSString\": [\n            {\n                token: \"constant.character.escape.objc\",\n                regex: escapedConstRe\n            },\n            {\n                token: \"invalid.illegal.unknown-escape.objc\",\n                regex: \"\\\\\\\\.\"\n            },\n            {\n                token: \"string\",\n                regex: '[^\"\\\\\\\\]+'\n            },\n            {\n                token: \"punctuation.definition.string.end\",\n                regex: \"\\\"\",\n                next: \"start\"\n            }\n        ],\n        \"protocol_list\": [\n            {\n                token: \"punctuation.section.scope.end.objc\",\n                regex: \">\",\n                next: \"start\"\n            },\n            {\n                token: \"support.other.protocol.objc\",\n                regex: \"\\bNS(?:GlyphStorage|M(?:utableCopying|enuItem)|C(?:hangeSpelling|o(?:ding|pying|lorPicking(?:Custom|Default)))|T(?:oolbarItemValidations|ext(?:Input|AttachmentCell))|I(?:nputServ(?:iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(?:CTypeSerializationCallBack|ect)|D(?:ecimalNumberBehaviors|raggingInfo)|U(?:serInterfaceValidations|RL(?:HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(?:ToobarItem|UserInterfaceItem)|Locking)\\b\"\n            }\n        ],\n        \"selectors\": [\n            {\n                token: \"support.function.any-method.name-of-parameter.objc\",\n                regex: \"\\\\b(?:[a-zA-Z_:][\\\\w]*)+\"\n            },\n            {\n                token: \"punctuation\",\n                regex: \"\\\\)\",\n                next: \"start\"\n            }\n        ],\n        \"bracketed_content\": [\n            {\n                token: \"punctuation.section.scope.end.objc\",\n                regex: \"]\",\n                next: \"start\"\n            },\n            {\n                token: [\"support.function.any-method.objc\"],\n                regex: \"(?:predicateWithFormat:| NSPredicate predicateWithFormat:)\",\n                next: \"start\"\n            },\n            {\n                token: \"support.function.any-method.objc\",\n                regex: \"\\\\w+(?::|(?=]))\",\n                next: \"start\"\n            }\n        ],\n        \"bracketed_strings\": [\n            {\n                token: \"punctuation.section.scope.end.objc\",\n                regex: \"]\",\n                next: \"start\"\n            },\n            {\n                token: \"keyword.operator.logical.predicate.cocoa\",\n                regex: \"\\\\b(?:AND|OR|NOT|IN)\\\\b\"\n            },\n            {\n                token: [\"invalid.illegal.unknown-method.objc\", \"punctuation.separator.arguments.objc\"],\n                regex: \"\\\\b(\\\\w+)(:)\"\n            },\n            {\n                regex: \"\\\\b(?:ALL|ANY|SOME|NONE)\\\\b\",\n                token: \"constant.language.predicate.cocoa\"\n            },\n            {\n                regex: \"\\\\b(?:NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\\\\b\",\n                token: \"constant.language.predicate.cocoa\"\n            },\n            {\n                regex: \"\\\\b(?:MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\\\\b\",\n                token: \"keyword.operator.comparison.predicate.cocoa\"\n            },\n            {\n                regex: \"\\\\bC(?:ASEINSENSITIVE|I)\\\\b\",\n                token: \"keyword.other.modifier.predicate.cocoa\"\n            },\n            {\n                regex: \"\\\\b(?:ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\\\\b\",\n                token: \"keyword.other.predicate.cocoa\"\n            },\n            {\n                regex: escapedConstRe,\n                token: \"constant.character.escape.objc\"\n            },\n            {\n                regex: \"\\\\\\\\.\",\n                token: \"invalid.illegal.unknown-escape.objc\"\n            },\n            {\n                token: \"string\",\n                regex: '[^\"\\\\\\\\]'\n            },\n            {\n                token: \"punctuation.definition.string.end.objc\",\n                regex: \"\\\"\",\n                next: \"predicates\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \".*?\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"methods\": [\n            {\n                token: \"meta.function.objc\",\n                regex: \"(?=\\\\{|#)|;\",\n                next: \"start\"\n            }\n        ]\n    };\n    for (var r in cRules) {\n        if (this.$rules[r]) {\n            if (this.$rules[r].push)\n                this.$rules[r].push.apply(this.$rules[r], cRules[r]);\n        }\n        else {\n            this.$rules[r] = cRules[r];\n        }\n    }\n    this.$rules.bracketed_content = this.$rules.bracketed_content.concat(this.$rules.start, specialVariables);\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\noop.inherits(ObjectiveCHighlightRules, CHighlightRules);\nexports.ObjectiveCHighlightRules = ObjectiveCHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/objectivec\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/objectivec_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ObjectiveCHighlightRules = require(\"./objectivec_highlight_rules\").ObjectiveCHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = ObjectiveCHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/objectivec\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/objectivec\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-ocaml.js",
    "content": "ace.define(\"ace/mode/ocaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar OcamlHighlightRules = function () {\n    var keywords = (\"and|as|assert|begin|class|constraint|do|done|downto|else|end|\" +\n        \"exception|external|for|fun|function|functor|if|in|include|\" +\n        \"inherit|initializer|lazy|let|match|method|module|mutable|new|\" +\n        \"object|of|open|or|private|rec|sig|struct|then|to|try|type|val|\" +\n        \"virtual|when|while|with\");\n    var builtinConstants = (\"true|false\");\n    var builtinFunctions = (\"abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|\" +\n        \"add_available_units|add_big_int|add_buffer|add_channel|add_char|\" +\n        \"add_initializer|add_int_big_int|add_interfaces|add_num|add_string|\" +\n        \"add_substitute|add_substring|alarm|allocated_bytes|allow_only|\" +\n        \"allow_unsafe_modules|always|append|appname_get|appname_set|\" +\n        \"approx_num_exp|approx_num_fix|arg|argv|arith_status|array|\" +\n        \"array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|\" +\n        \"assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|\" +\n        \"beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|\" +\n        \"bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|\" +\n        \"bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|\" +\n        \"bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|\" +\n        \"cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|\" +\n        \"chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|\" +\n        \"chown|chr|chroot|classify_float|clear|clear_available_units|\" +\n        \"clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|\" +\n        \"close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|\" +\n        \"close_out|close_out_noerr|close_process|close_process|\" +\n        \"close_process_full|close_process_in|close_process_out|close_subwindow|\" +\n        \"close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|\" +\n        \"combine|combine|command|compact|compare|compare_big_int|compare_num|\" +\n        \"complex32|complex64|concat|conj|connect|contains|contains_from|contents|\" +\n        \"copy|cos|cosh|count|count|counters|create|create_alarm|create_image|\" +\n        \"create_matrix|create_matrix|create_matrix|create_object|\" +\n        \"create_object_and_run_initializers|create_object_opt|create_process|\" +\n        \"create_process|create_process_env|create_process_env|create_table|\" +\n        \"current|current_dir_name|current_point|current_x|current_y|curveto|\" +\n        \"custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|\" +\n        \"delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|\" +\n        \"dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|\" +\n        \"double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|\" +\n        \"draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|\" +\n        \"dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|\" +\n        \"environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|\" +\n        \"error_message|escaped|establish_server|executable_name|execv|execve|execvp|\" +\n        \"execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|\" +\n        \"file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|\" +\n        \"filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|\" +\n        \"float|float32|float64|float_of_big_int|float_of_bits|float_of_int|\" +\n        \"float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|\" +\n        \"flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|\" +\n        \"for_all|for_all2|force|force_newline|force_val|foreground|fork|\" +\n        \"format_of_string|formatter_of_buffer|formatter_of_out_channel|\" +\n        \"fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|\" +\n        \"from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|\" +\n        \"full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|\" +\n        \"genarray_of_array1|genarray_of_array2|genarray_of_array3|get|\" +\n        \"get_all_formatter_output_functions|get_approx_printing|get_copy|\" +\n        \"get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|\" +\n        \"get_formatter_output_functions|get_formatter_tag_functions|get_image|\" +\n        \"get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|\" +\n        \"get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|\" +\n        \"get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|\" +\n        \"getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|\" +\n        \"getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|\" +\n        \"getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|\" +\n        \"getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|\" +\n        \"getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|\" +\n        \"global_replace|global_substitute|gmtime|green|grid|group_beginning|\" +\n        \"group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|\" +\n        \"hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|\" +\n        \"incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|\" +\n        \"infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|\" +\n        \"input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|\" +\n        \"int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|\" +\n        \"int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|\" +\n        \"is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|\" +\n        \"is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|\" +\n        \"kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|\" +\n        \"lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|\" +\n        \"lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|\" +\n        \"loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|\" +\n        \"logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|\" +\n        \"lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|\" +\n        \"make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|\" +\n        \"marshal|match_beginning|match_end|matched_group|matched_string|max|\" +\n        \"max_array_length|max_big_int|max_elt|max_float|max_int|max_num|\" +\n        \"max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|\" +\n        \"min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|\" +\n        \"minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|\" +\n        \"mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|\" +\n        \"nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|\" +\n        \"new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|\" +\n        \"nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|\" +\n        \"num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|\" +\n        \"of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|\" +\n        \"of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|\" +\n        \"open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|\" +\n        \"open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|\" +\n        \"open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|\" +\n        \"open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|\" +\n        \"out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|\" +\n        \"output_char|output_string|output_value|over_max_boxes|pack|params|\" +\n        \"parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|\" +\n        \"place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|\" +\n        \"power_big_int_positive_big_int|power_big_int_positive_int|\" +\n        \"power_int_positive_big_int|power_int_positive_int|power_num|\" +\n        \"pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|\" +\n        \"pp_get_all_formatter_output_functions|pp_get_ellipsis_text|\" +\n        \"pp_get_formatter_output_functions|pp_get_formatter_tag_functions|\" +\n        \"pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|\" +\n        \"pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|\" +\n        \"pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|\" +\n        \"pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|\" +\n        \"pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|\" +\n        \"pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|\" +\n        \"pp_set_all_formatter_output_functions|pp_set_ellipsis_text|\" +\n        \"pp_set_formatter_out_channel|pp_set_formatter_output_functions|\" +\n        \"pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|\" +\n        \"pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|\" +\n        \"pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|\" +\n        \"prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|\" +\n        \"print_bool|print_break|print_char|print_cut|print_endline|print_float|\" +\n        \"print_flush|print_if_newline|print_int|print_newline|print_space|\" +\n        \"print_stat|print_string|print_tab|print_tbreak|printf|prohibit|\" +\n        \"public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|\" +\n        \"raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|\" +\n        \"read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|\" +\n        \"recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|\" +\n        \"regexp_string_case_fold|register|register_exception|rem|remember_mode|\" +\n        \"remove|remove_assoc|remove_assq|rename|replace|replace_first|\" +\n        \"replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|\" +\n        \"rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|\" +\n        \"rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|\" +\n        \"run_initializers|run_initializers_opt|scanf|search_backward|\" +\n        \"search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|\" +\n        \"set_all_formatter_output_functions|set_approx_printing|\" +\n        \"set_binary_mode_in|set_binary_mode_out|set_close_on_exec|\" +\n        \"set_close_on_exec|set_color|set_ellipsis_text|\" +\n        \"set_error_when_null_denominator|set_field|set_floating_precision|\" +\n        \"set_font|set_formatter_out_channel|set_formatter_output_functions|\" +\n        \"set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|\" +\n        \"set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|\" +\n        \"set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|\" +\n        \"set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|\" +\n        \"set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|\" +\n        \"setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|\" +\n        \"setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|\" +\n        \"shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|\" +\n        \"shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|\" +\n        \"shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|\" +\n        \"sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|\" +\n        \"sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|\" +\n        \"sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|\" +\n        \"sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|\" +\n        \"sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|\" +\n        \"slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|\" +\n        \"slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|\" +\n        \"split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|\" +\n        \"square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|\" +\n        \"stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|\" +\n        \"stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|\" +\n        \"str_formatter|string|string_after|string_before|string_match|\" +\n        \"string_of_big_int|string_of_bool|string_of_float|string_of_format|\" +\n        \"string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|\" +\n        \"string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|\" +\n        \"sub_right|subset|subset|substitute_first|substring|succ|succ|\" +\n        \"succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|\" +\n        \"symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|\" +\n        \"tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|\" +\n        \"tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|\" +\n        \"temp_file|text_size|time|time|time|timed_read|timed_write|times|times|\" +\n        \"tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|\" +\n        \"to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|\" +\n        \"to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|\" +\n        \"truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|\" +\n        \"uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|\" +\n        \"unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|\" +\n        \"update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|\" +\n        \"wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|\" +\n        \"wait_timed_read|wait_timed_write|wait_write|waitpid|white|\" +\n        \"widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|\" +\n        \"Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|\" +\n        \"Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|\" +\n        \"Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|\" +\n        \"Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|\" +\n        \"MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|\" +\n        \"Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|\" +\n        \"Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\");\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: '\\\\(\\\\*.*?\\\\*\\\\)\\\\s*?$'\n            },\n            {\n                token: \"comment\",\n                regex: '\\\\(\\\\*.*',\n                next: \"comment\"\n            },\n            {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            },\n            {\n                token: \"string\",\n                regex: \"'.'\"\n            },\n            {\n                token: \"string\",\n                regex: '\"',\n                next: \"qstring\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            },\n            {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            },\n            {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            },\n            {\n                token: \"keyword.operator\",\n                regex: \"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=\"\n            },\n            {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            },\n            {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            },\n            {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\)\",\n                next: \"start\"\n            },\n            {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: '\"',\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ]\n    };\n};\noop.inherits(OcamlHighlightRules, TextHighlightRules);\nexports.OcamlHighlightRules = OcamlHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/ocaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ocaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar OcamlHighlightRules = require(\"./ocaml_highlight_rules\").OcamlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n    this.HighlightRules = OcamlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n    this.$outdent = new MatchingBraceOutdent();\n};\noop.inherits(Mode, TextMode);\nvar indenter = /(?:[({[=:]|[-=]>|\\b(?:else|try|with))\\s*$/;\n(function () {\n    this.toggleCommentLines = function (state, doc, startRow, endRow) {\n        var i, line;\n        var outdent = true;\n        var re = /^\\s*\\(\\*(.*)\\*\\)/;\n        for (i = startRow; i <= endRow; i++) {\n            if (!re.test(doc.getLine(i))) {\n                outdent = false;\n                break;\n            }\n        }\n        var range = new Range(0, 0, 0, 0);\n        for (i = startRow; i <= endRow; i++) {\n            line = doc.getLine(i);\n            range.start.row = i;\n            range.end.row = i;\n            range.end.column = line.length;\n            doc.replace(range, outdent ? line.match(re)[1] : \"(*\" + line + \"*)\");\n        }\n    };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&\n            state === 'start' && indenter.test(line))\n            indent += tab;\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/ocaml\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/ocaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-partiql.js",
    "content": "ace.define(\"ace/mode/ion_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n  THIS FILE WAS GENERATED BY 'ligand' USING 'mode_highlight_rules.js'\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar IonHighlightRules = function () {\n    var k_keywords_bool = \"TRUE|FALSE\";\n    var k_bool = k_keywords_bool;\n    var k_keywords_null = \"NULL.NULL|NULL.BOOL|NULL.INT|NULL.FLOAT|NULL.DECIMAL|NULL.TIMESTAMP|NULL.STRING|NULL.SYMBOL|NULL.BLOB|NULL.CLOB|\"\n        + \"NULL.STRUCT|NULL.LIST|NULL.SEXP|NULL\";\n    var k_null = k_keywords_null;\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.bool.ion\": k_bool,\n        \"constant.language.null.ion\": k_null\n    }, \"constant.other.symbol.identifier.ion\", true);\n    var keywordMapperRule = {\n        token: keywordMapper,\n        regex: \"\\\\b\\\\w+(?:\\\\.\\\\w+)?\\\\b\"\n    };\n    this.$rules = {\n        \"start\": [\n            {\n                \"include\": \"value\"\n            }\n        ],\n        \"value\": [\n            {\n                \"include\": \"whitespace\"\n            },\n            {\n                \"include\": \"comment\"\n            },\n            {\n                \"include\": \"annotation\"\n            },\n            {\n                \"include\": \"string\"\n            },\n            {\n                \"include\": \"number\"\n            },\n            {\n                \"include\": \"keywords\"\n            },\n            {\n                \"include\": \"symbol\"\n            },\n            {\n                \"include\": \"clob\"\n            },\n            {\n                \"include\": \"blob\"\n            },\n            {\n                \"include\": \"struct\"\n            },\n            {\n                \"include\": \"list\"\n            },\n            {\n                \"include\": \"sexp\"\n            }\n        ],\n        \"sexp\": [\n            {\n                \"token\": \"punctuation.definition.sexp.begin.ion\",\n                \"regex\": \"\\\\(\",\n                \"push\": [\n                    {\n                        \"token\": \"punctuation.definition.sexp.end.ion\",\n                        \"regex\": \"\\\\)\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"include\": \"comment\"\n                    },\n                    {\n                        \"include\": \"value\"\n                    },\n                    {\n                        \"token\": \"storage.type.symbol.operator.ion\",\n                        \"regex\": \"[\\\\!\\\\#\\\\%\\\\&\\\\*\\\\+\\\\-\\\\./\\\\;\\\\<\\\\=\\\\>\\\\?\\\\@\\\\^\\\\`\\\\|\\\\~]+\"\n                    }\n                ]\n            }\n        ],\n        \"comment\": [\n            {\n                \"token\": \"comment.line.ion\",\n                \"regex\": \"//[^\\\\n]*\"\n            },\n            {\n                \"token\": \"comment.block.ion\",\n                \"regex\": \"/\\\\*\",\n                \"push\": [\n                    {\n                        \"token\": \"comment.block.ion\",\n                        \"regex\": \"[*]/\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"token\": \"comment.block.ion\",\n                        \"regex\": \"[^*/]+\"\n                    },\n                    {\n                        \"token\": \"comment.block.ion\",\n                        \"regex\": \"[*/]+\"\n                    }\n                ]\n            }\n        ],\n        \"list\": [\n            {\n                \"token\": \"punctuation.definition.list.begin.ion\",\n                \"regex\": \"\\\\[\",\n                \"push\": [\n                    {\n                        \"token\": \"punctuation.definition.list.end.ion\",\n                        \"regex\": \"\\\\]\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"include\": \"comment\"\n                    },\n                    {\n                        \"include\": \"value\"\n                    },\n                    {\n                        \"token\": \"punctuation.definition.list.separator.ion\",\n                        \"regex\": \",\"\n                    }\n                ]\n            }\n        ],\n        \"struct\": [\n            {\n                \"token\": \"punctuation.definition.struct.begin.ion\",\n                \"regex\": \"\\\\{\",\n                \"push\": [\n                    {\n                        \"token\": \"punctuation.definition.struct.end.ion\",\n                        \"regex\": \"\\\\}\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"include\": \"comment\"\n                    },\n                    {\n                        \"include\": \"value\"\n                    },\n                    {\n                        \"token\": \"punctuation.definition.struct.separator.ion\",\n                        \"regex\": \",|:\"\n                    }\n                ]\n            }\n        ],\n        \"blob\": [\n            {\n                \"token\": [\n                    \"punctuation.definition.blob.begin.ion\",\n                    \"string.other.blob.ion\",\n                    \"punctuation.definition.blob.end.ion\"\n                ],\n                \"regex\": \"(\\\\{\\\\{)([^\\\"]*)(\\\\}\\\\})\"\n            }\n        ],\n        \"clob\": [\n            {\n                \"token\": [\n                    \"punctuation.definition.clob.begin.ion\",\n                    \"string.other.clob.ion\",\n                    \"punctuation.definition.clob.end.ion\"\n                ],\n                \"regex\": \"(\\\\{\\\\{)(\\\"[^\\\"]*\\\")(\\\\}\\\\})\"\n            }\n        ],\n        \"symbol\": [\n            {\n                \"token\": \"storage.type.symbol.quoted.ion\",\n                \"regex\": \"(['])((?:(?:\\\\\\\\')|(?:[^']))*?)(['])\"\n            },\n            {\n                \"token\": \"storage.type.symbol.identifier.ion\",\n                \"regex\": \"[\\\\$_a-zA-Z][\\\\$_a-zA-Z0-9]*\"\n            }\n        ],\n        \"number\": [\n            {\n                \"token\": \"constant.numeric.timestamp.ion\",\n                \"regex\": \"\\\\d{4}(?:-\\\\d{2})?(?:-\\\\d{2})?T(?:\\\\d{2}:\\\\d{2})(?::\\\\d{2})?(?:\\\\.\\\\d+)?(?:Z|[-+]\\\\d{2}:\\\\d{2})?\"\n            },\n            {\n                \"token\": \"constant.numeric.timestamp.ion\",\n                \"regex\": \"\\\\d{4}-\\\\d{2}-\\\\d{2}T?\"\n            },\n            {\n                \"token\": \"constant.numeric.integer.binary.ion\",\n                \"regex\": \"-?0[bB][01](?:_?[01])*\"\n            },\n            {\n                \"token\": \"constant.numeric.integer.hex.ion\",\n                \"regex\": \"-?0[xX][0-9a-fA-F](?:_?[0-9a-fA-F])*\"\n            },\n            {\n                \"token\": \"constant.numeric.float.ion\",\n                \"regex\": \"-?(?:0|[1-9](?:_?\\\\d)*)(?:\\\\.(?:\\\\d(?:_?\\\\d)*)?)?(?:[eE][+-]?\\\\d+)\"\n            },\n            {\n                \"token\": \"constant.numeric.float.ion\",\n                \"regex\": \"(?:[-+]inf)|(?:nan)\"\n            },\n            {\n                \"token\": \"constant.numeric.decimal.ion\",\n                \"regex\": \"-?(?:0|[1-9](?:_?\\\\d)*)(?:(?:(?:\\\\.(?:\\\\d(?:_?\\\\d)*)?)(?:[dD][+-]?\\\\d+)|\\\\.(?:\\\\d(?:_?\\\\d)*)?)|(?:[dD][+-]?\\\\d+))\"\n            },\n            {\n                \"token\": \"constant.numeric.integer.ion\",\n                \"regex\": \"-?(?:0|[1-9](?:_?\\\\d)*)\"\n            }\n        ],\n        \"string\": [\n            {\n                \"token\": [\n                    \"punctuation.definition.string.begin.ion\",\n                    \"string.quoted.double.ion\",\n                    \"punctuation.definition.string.end.ion\"\n                ],\n                \"regex\": \"([\\\"])((?:(?:\\\\\\\\\\\")|(?:[^\\\"]))*?)([\\\"])\"\n            },\n            {\n                \"token\": \"punctuation.definition.string.begin.ion\",\n                \"regex\": \"'{3}\",\n                \"push\": [\n                    {\n                        \"token\": \"punctuation.definition.string.end.ion\",\n                        \"regex\": \"'{3}\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"token\": \"string.quoted.triple.ion\",\n                        \"regex\": \"(?:\\\\\\\\'|[^'])+\"\n                    },\n                    {\n                        \"token\": \"string.quoted.triple.ion\",\n                        \"regex\": \"'\"\n                    }\n                ]\n            }\n        ],\n        \"annotation\": [\n            {\n                \"token\": [\n                    \"variable.language.annotation.ion\",\n                    \"punctuation.definition.annotation.ion\"\n                ],\n                \"regex\": \"('(?:[^']|\\\\\\\\\\\\\\\\|\\\\\\\\')*')\\\\s*(::)\"\n            },\n            {\n                \"token\": [\n                    \"variable.language.annotation.ion\",\n                    \"punctuation.definition.annotation.ion\"\n                ],\n                \"regex\": \"([\\\\$_a-zA-Z][\\\\$_a-zA-Z0-9]*)\\\\s*(::)\"\n            }\n        ],\n        \"whitespace\": [\n            {\n                \"token\": \"text.ion\",\n                \"regex\": \"\\\\s+\"\n            }\n        ]\n    };\n    this.$rules[\"keywords\"] = [keywordMapperRule];\n    this.normalizeRules();\n};\noop.inherits(IonHighlightRules, TextHighlightRules);\nexports.IonHighlightRules = IonHighlightRules;\n\n});\n\nace.define(\"ace/mode/partiql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/ion_highlight_rules\"], function(require, exports, module){/*\n  THIS FILE WAS GENERATED BY 'ligand' USING 'mode_highlight_rules.js'\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar IonHighlightRules = require(\"./ion_highlight_rules\").IonHighlightRules;\nvar PartiqlHighlightRules = function () {\n    var k_partiql_constant = \"MISSING\";\n    var k_sql_constant = \"FALSE|NULL|TRUE\";\n    var k_constant = k_partiql_constant + \"|\" + k_sql_constant;\n    var k_partiql_keyword = \"PIVOT|UNPIVOT|LIMIT|TUPLE|REMOVE|INDEX|CONFLICT|DO|NOTHING|RETURNING|\"\n        + \"MODIFIED|NEW|OLD|LET\";\n    var k_sql_keyword = \"ABSOLUTE|ACTION|ADD|ALL|ALLOCATE|ALTER|AND|ANY|ARE|AS|\"\n        + \"ASC|ASSERTION|AT|AUTHORIZATION|BEGIN|BETWEEN|BIT_LENGTH|BY|CASCADE|CASCADED|\"\n        + \"CASE|CATALOG|CHAR|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CLOSE|COLLATE|COLLATION|COLUMN|\"\n        + \"COMMIT|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONTINUE|CONVERT|CORRESPONDING|CREATE|CROSS|\"\n        + \"CURRENT|CURSOR|DEALLOCATE|DEC|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DESC|\"\n        + \"DESCRIBE|DESCRIPTOR|DIAGNOSTICS|DISCONNECT|DISTINCT|DOMAIN|DROP|ELSE|END|END-EXEC|\"\n        + \"ESCAPE|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXTERNAL|EXTRACT|FETCH|FIRST|FOR|\"\n        + \"FOREIGN|FOUND|FROM|FULL|GET|GLOBAL|GO|GOTO|GRANT|GROUP|\"\n        + \"HAVING|IDENTITY|IMMEDIATE|IN|INDICATOR|INITIALLY|INNER|INPUT|INSENSITIVE|INSERT|\"\n        + \"INTERSECT|INTERVAL|INTO|IS|ISOLATION|JOIN|KEY|LANGUAGE|LAST|LEFT|\"\n        + \"LEVEL|LIKE|LOCAL|LOWER|MATCH|MODULE|NAMES|NATIONAL|NATURAL|NCHAR|\"\n        + \"NEXT|NO|NOT|OCTET_LENGTH|OF|ON|ONLY|OPEN|OPTION|OR|\"\n        + \"ORDER|OUTER|OUTPUT|OVERLAPS|PAD|PARTIAL|POSITION|PRECISION|PREPARE|PRESERVE|\"\n        + \"PRIMARY|PRIOR|PRIVILEGES|PROCEDURE|PUBLIC|READ|REAL|REFERENCES|RELATIVE|RESTRICT|\"\n        + \"REVOKE|RIGHT|ROLLBACK|ROWS|SCHEMA|SCROLL|SECTION|SELECT|SESSION|SET|\"\n        + \"SIZE|SOME|SPACE|SQL|SQLCODE|SQLERROR|SQLSTATE|TABLE|TEMPORARY|THEN|\"\n        + \"TIME|TO|TRANSACTION|TRANSLATE|TRANSLATION|UNION|UNIQUE|UNKNOWN|UPDATE|UPPER|\"\n        + \"USAGE|USER|USING|VALUE|VALUES|VIEW|WHEN|WHENEVER|WHERE|WITH|\"\n        + \"WORK|WRITE|ZONE\";\n    var k_keyword = k_partiql_keyword + \"|\" + k_sql_keyword;\n    var k_partiql_type = \"BOOL|BOOLEAN|STRING|SYMBOL|CLOB|BLOB|STRUCT|LIST|SEXP|BAG\";\n    var k_sql_type = \"CHARACTER|DATE|DECIMAL|DOUBLE|FLOAT|INT|INTEGER|NUMERIC|SMALLINT|TIMESTAMP|\"\n        + \"VARCHAR|VARYING\";\n    var k_type = k_partiql_type + \"|\" + k_sql_type;\n    var k_sql_aggfn = \"AVG|COUNT|MAX|MIN|SUM\";\n    var k_aggfn = k_sql_aggfn;\n    var k_sql_fn = \"CAST|COALESCE|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|EXISTS|DATE_ADD|DATE_DIFF|NULLIF|\"\n        + \"SESSION_USER|SUBSTRING|SYSTEM_USER|TRIM\";\n    var k_fn = k_sql_fn;\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.partiql\": k_constant,\n        \"keyword.other.partiql\": k_keyword,\n        \"storage.type.partiql\": k_type,\n        \"support.function.aggregation.partiql\": k_aggfn,\n        \"support.function.partiql\": k_fn\n    }, \"variable.language.identifier.partiql\", true);\n    var keywordMapperRule = {\n        token: keywordMapper,\n        regex: \"\\\\b\\\\w+\\\\b\"\n    };\n    this.$rules = {\n        \"start\": [\n            {\n                \"include\": \"whitespace\"\n            },\n            {\n                \"include\": \"comment\"\n            },\n            {\n                \"include\": \"value\"\n            }\n        ],\n        \"value\": [\n            {\n                \"include\": \"whitespace\"\n            },\n            {\n                \"include\": \"comment\"\n            },\n            {\n                \"include\": \"tuple_value\"\n            },\n            {\n                \"include\": \"collection_value\"\n            },\n            {\n                \"include\": \"scalar_value\"\n            }\n        ],\n        \"scalar_value\": [\n            {\n                \"include\": \"string\"\n            },\n            {\n                \"include\": \"number\"\n            },\n            {\n                \"include\": \"keywords\"\n            },\n            {\n                \"include\": \"identifier\"\n            },\n            {\n                \"include\": \"embed-ion\"\n            },\n            {\n                \"include\": \"operator\"\n            },\n            {\n                \"include\": \"punctuation\"\n            }\n        ],\n        \"punctuation\": [\n            {\n                \"token\": \"punctuation.partiql\",\n                \"regex\": \"[;:()\\\\[\\\\]\\\\{\\\\},.]\"\n            }\n        ],\n        \"operator\": [\n            {\n                \"token\": \"keyword.operator.partiql\",\n                \"regex\": \"[+*/<>=~!@#%&|?^-]+\"\n            }\n        ],\n        \"identifier\": [\n            {\n                \"token\": \"variable.language.identifier.quoted.partiql\",\n                \"regex\": \"([\\\"])((?:(?:\\\\\\\\.)|(?:[^\\\"\\\\\\\\]))*?)([\\\"])\"\n            },\n            {\n                \"token\": \"variable.language.identifier.at.partiql\",\n                \"regex\": \"@\\\\w+\"\n            },\n            {\n                \"token\": \"variable.language.identifier.partiql\",\n                \"regex\": \"\\\\b\\\\w+(?:\\\\.\\\\w+)?\\\\b\"\n            }\n        ],\n        \"number\": [\n            {\n                \"token\": \"constant.numeric.partiql\",\n                \"regex\": \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }\n        ],\n        \"string\": [\n            {\n                \"token\": [\n                    \"punctuation.definition.string.begin.partiql\",\n                    \"string.quoted.single.partiql\",\n                    \"punctuation.definition.string.end.partiql\"\n                ],\n                \"regex\": \"(['])((?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?)(['])\"\n            }\n        ],\n        \"collection_value\": [\n            {\n                \"include\": \"array_value\"\n            },\n            {\n                \"include\": \"bag_value\"\n            }\n        ],\n        \"bag_value\": [\n            {\n                \"token\": \"punctuation.definition.bag.begin.partiql\",\n                \"regex\": \"<<\",\n                \"push\": [\n                    {\n                        \"token\": \"punctuation.definition.bag.end.partiql\",\n                        \"regex\": \">>\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"include\": \"comment\"\n                    },\n                    {\n                        \"token\": \"punctuation.definition.bag.separator.partiql\",\n                        \"regex\": \",\"\n                    },\n                    {\n                        \"include\": \"value\"\n                    }\n                ]\n            }\n        ],\n        \"comment\": [\n            {\n                \"token\": \"comment.line.partiql\",\n                \"regex\": \"--.*\"\n            },\n            {\n                \"token\": \"comment.block.partiql\",\n                \"regex\": \"/\\\\*\",\n                \"push\": \"comment__1\"\n            }\n        ],\n        \"comment__1\": [\n            {\n                \"token\": \"comment.block.partiql\",\n                \"regex\": \"[*]/\",\n                \"next\": \"pop\"\n            },\n            {\n                \"token\": \"comment.block.partiql\",\n                \"regex\": \"[^*/]+\"\n            },\n            {\n                \"token\": \"comment.block.partiql\",\n                \"regex\": \"/\\\\*\",\n                \"push\": \"comment__1\"\n            },\n            {\n                \"token\": \"comment.block.partiql\",\n                \"regex\": \"[*/]+\"\n            }\n        ],\n        \"array_value\": [\n            {\n                \"token\": \"punctuation.definition.array.begin.partiql\",\n                \"regex\": \"\\\\[\",\n                \"push\": [\n                    {\n                        \"token\": \"punctuation.definition.array.end.partiql\",\n                        \"regex\": \"\\\\]\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"include\": \"comment\"\n                    },\n                    {\n                        \"token\": \"punctuation.definition.array.separator.partiql\",\n                        \"regex\": \",\"\n                    },\n                    {\n                        \"include\": \"value\"\n                    }\n                ]\n            }\n        ],\n        \"tuple_value\": [\n            {\n                \"token\": \"punctuation.definition.tuple.begin.partiql\",\n                \"regex\": \"\\\\{\",\n                \"push\": [\n                    {\n                        \"token\": \"punctuation.definition.tuple.end.partiql\",\n                        \"regex\": \"\\\\}\",\n                        \"next\": \"pop\"\n                    },\n                    {\n                        \"include\": \"comment\"\n                    },\n                    {\n                        \"token\": \"punctuation.definition.tuple.separator.partiql\",\n                        \"regex\": \",|:\"\n                    },\n                    {\n                        \"include\": \"value\"\n                    }\n                ]\n            }\n        ],\n        \"whitespace\": [\n            {\n                \"token\": \"text.partiql\",\n                \"regex\": \"\\\\s+\"\n            }\n        ]\n    };\n    this.$rules[\"keywords\"] = [keywordMapperRule];\n    this.$rules[\"embed-ion\"] = [{ token: \"punctuation.definition.ion.begin.partiql\", regex: \"`\", next: \"ion-start\" }];\n    this.embedRules(IonHighlightRules, \"ion-\", [{ token: \"punctuation.definition.ion.end.partiql\", regex: \"`\", next: \"start\" }]);\n    this.normalizeRules();\n};\noop.inherits(PartiqlHighlightRules, TextHighlightRules);\nexports.PartiqlHighlightRules = PartiqlHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/partiql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/partiql_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS GENERATED BY 'ligand' USING 'mode.js'\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./partiql_highlight_rules\").PartiqlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = HighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = { start: \"/*\", end: \"*/\", nestable: true };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/partiql\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/partiql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-pascal.js",
    "content": "ace.define(\"ace/mode/pascal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PascalHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control\": \"absolute|abstract|all|and|and_then|array|as|asm|attribute|begin|bindable|case|class\" +\n            \"|const|constructor|destructor|div|do|do|else|end|except|export|exports|external|far|file|finalization\" +\n            \"|finally|for|forward|goto|if|implementation|import|in|inherited|initialization|interface|interrupt|is\" +\n            \"|label|library|mod|module|name|near|nil|not|object|of|only|operator|or|or_else|otherwise|packed|pow|private\" +\n            \"|program|property|protected|public|published|qualified|record|repeat|resident|restricted|segment|set|shl|shr\" +\n            \"|then|to|try|type|unit|until|uses|value|var|view|virtual|while|with|xor\"\n    }, \"identifier\", true);\n    this.$rules = {\n        start: [{\n                caseInsensitive: true,\n                token: ['variable', \"text\",\n                    'storage.type.prototype',\n                    'entity.name.function.prototype'\n                ],\n                regex: '\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?(?=(?:\\\\(.*?\\\\))?;\\\\s*(?:attribute|forward|external))'\n            }, {\n                caseInsensitive: true,\n                token: ['variable', \"text\", 'storage.type.function', 'entity.name.function'],\n                regex: '\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?'\n            }, {\n                caseInsensitive: true,\n                token: keywordMapper,\n                regex: /\\b[a-z_]+\\b/\n            }, {\n                token: 'constant.numeric',\n                regex: '\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b'\n            }, {\n                token: 'punctuation.definition.comment',\n                regex: '--.*$'\n            }, {\n                token: 'punctuation.definition.comment',\n                regex: '//.*$'\n            }, {\n                token: 'punctuation.definition.comment',\n                regex: '\\\\(\\\\*',\n                push: [{\n                        token: 'punctuation.definition.comment',\n                        regex: '\\\\*\\\\)',\n                        next: 'pop'\n                    },\n                    { defaultToken: 'comment.block.one' }\n                ]\n            }, {\n                token: 'punctuation.definition.comment',\n                regex: '\\\\{',\n                push: [{\n                        token: 'punctuation.definition.comment',\n                        regex: '\\\\}',\n                        next: 'pop'\n                    },\n                    { defaultToken: 'comment.block.two' }\n                ]\n            }, {\n                token: 'punctuation.definition.string.begin',\n                regex: '\"',\n                push: [{ token: 'constant.character.escape', regex: '\\\\\\\\.' },\n                    {\n                        token: 'punctuation.definition.string.end',\n                        regex: '\"',\n                        next: 'pop'\n                    },\n                    { defaultToken: 'string.quoted.double' }\n                ]\n            }, {\n                token: 'punctuation.definition.string.begin',\n                regex: '\\'',\n                push: [{\n                        token: 'constant.character.escape.apostrophe',\n                        regex: '\\'\\''\n                    },\n                    {\n                        token: 'punctuation.definition.string.end',\n                        regex: '\\'',\n                        next: 'pop'\n                    },\n                    { defaultToken: 'string.quoted.single' }\n                ]\n            }, {\n                token: 'keyword.operator',\n                regex: '[+\\\\-;,/*%]|:=|='\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(PascalHighlightRules, TextHighlightRules);\nexports.PascalHighlightRules = PascalHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/pascal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pascal_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PascalHighlightRules = require(\"./pascal_highlight_rules\").PascalHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = PascalHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = [\"--\", \"//\"];\n    this.blockComment = [\n        { start: \"(*\", end: \"*)\" },\n        { start: \"{\", end: \"}\" }\n    ];\n    this.$id = \"ace/mode/pascal\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/pascal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-perl.js",
    "content": "ace.define(\"ace/mode/perl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PerlHighlightRules = function () {\n    var keywords = (\"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|\" +\n        \"no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\");\n    var buildinConstants = (\"ARGV|ENV|INC|SIG\");\n    var builtinFunctions = (\"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|\" +\n        \"gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|\" +\n        \"getpeername|setpriority|getprotoent|setprotoent|getpriority|\" +\n        \"endprotoent|getservent|setservent|endservent|sethostent|socketpair|\" +\n        \"getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|\" +\n        \"localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|\" +\n        \"closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|\" +\n        \"shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|\" +\n        \"dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|\" +\n        \"setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|\" +\n        \"lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|\" +\n        \"waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|\" +\n        \"chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|\" +\n        \"unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|\" +\n        \"length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|\" +\n        \"undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|\" +\n        \"sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|\" +\n        \"BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|\" +\n        \"join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|\" +\n        \"keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|\" +\n        \"eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|\" +\n        \"map|die|uc|lc|do\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.doc\",\n                regex: \"^=(?:begin|item)\\\\b\",\n                next: \"block_comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: '[\"].*\\\\\\\\$',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"string\",\n                regex: \"['].*\\\\\\\\$\",\n                next: \"qstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0x[0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"\n            }, {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ],\n        \"block_comment\": [\n            {\n                token: \"comment.doc\",\n                regex: \"^=cut\\\\b\",\n                next: \"start\"\n            },\n            {\n                defaultToken: \"comment.doc\"\n            }\n        ]\n    };\n};\noop.inherits(PerlHighlightRules, TextHighlightRules);\nexports.PerlHighlightRules = PerlHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/perl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/perl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PerlHighlightRules = require(\"./perl_highlight_rules\").PerlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = PerlHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode({ start: \"^=(begin|item)\\\\b\", end: \"^=(cut)\\\\b\" });\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.blockComment = [\n        { start: \"=begin\", end: \"=cut\", lineStartOnly: true },\n        { start: \"=item\", end: \"=cut\", lineStartOnly: true }\n    ];\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/perl\";\n    this.snippetFileId = \"ace/snippets/perl\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/perl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-pgsql.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/perl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PerlHighlightRules = function () {\n    var keywords = (\"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|\" +\n        \"no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\");\n    var buildinConstants = (\"ARGV|ENV|INC|SIG\");\n    var builtinFunctions = (\"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|\" +\n        \"gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|\" +\n        \"getpeername|setpriority|getprotoent|setprotoent|getpriority|\" +\n        \"endprotoent|getservent|setservent|endservent|sethostent|socketpair|\" +\n        \"getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|\" +\n        \"localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|\" +\n        \"closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|\" +\n        \"shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|\" +\n        \"dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|\" +\n        \"setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|\" +\n        \"lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|\" +\n        \"waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|\" +\n        \"chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|\" +\n        \"unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|\" +\n        \"length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|\" +\n        \"undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|\" +\n        \"sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|\" +\n        \"BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|\" +\n        \"join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|\" +\n        \"keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|\" +\n        \"eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|\" +\n        \"map|die|uc|lc|do\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": builtinFunctions\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.doc\",\n                regex: \"^=(?:begin|item)\\\\b\",\n                next: \"block_comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: '[\"].*\\\\\\\\$',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"string\",\n                regex: \"['].*\\\\\\\\$\",\n                next: \"qstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0x[0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"\n            }, {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ],\n        \"block_comment\": [\n            {\n                token: \"comment.doc\",\n                regex: \"^=cut\\\\b\",\n                next: \"start\"\n            },\n            {\n                defaultToken: \"comment.doc\"\n            }\n        ]\n    };\n};\noop.inherits(PerlHighlightRules, TextHighlightRules);\nexports.PerlHighlightRules = PerlHighlightRules;\n\n});\n\nace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n * TODO: python delimiters\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PythonHighlightRules = function () {\n    var keywords = (\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await|nonlocal\");\n    var builtinConstants = (\"True|False|None|NotImplemented|Ellipsis|__debug__\");\n    var builtinFunctions = (\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" +\n        \"ascii|breakpoint|bytes\");\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"variable.language\": \"self|cls\",\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n    var strPre = \"[uU]?\";\n    var strRawPre = \"[rR]\";\n    var strFormatPre = \"[fF]\";\n    var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"string\",\n                regex: strPre + '\"{3}',\n                next: \"qqstring3\"\n            }, {\n                token: \"string\",\n                regex: strPre + '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: strPre + \"'{3}\",\n                next: \"qstring3\"\n            }, {\n                token: \"string\",\n                regex: strPre + \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + '\"{3}',\n                next: \"rawqqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + '\"(?=.)',\n                next: \"rawqqstring\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + \"'{3}\",\n                next: \"rawqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + \"'(?=.)\",\n                next: \"rawqstring\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + '\"{3}',\n                next: \"fqqstring3\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + '\"(?=.)',\n                next: \"fqqstring\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + \"'{3}\",\n                next: \"fqstring3\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + \"'(?=.)\",\n                next: \"fqstring\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + '\"{3}',\n                next: \"rfqqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + '\"(?=.)',\n                next: \"rfqqstring\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + \"'{3}\",\n                next: \"rfqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + \"'(?=.)\",\n                next: \"rfqstring\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n            }, {\n                token: \"punctuation\",\n                regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token: [\"keyword\", \"text\", \"entity.name.function\"],\n                regex: \"(def|class)(\\\\s+)([\\\\u00BF-\\\\u1FFF\\\\u2C00-\\\\uD7FF\\\\w]+)\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                include: \"constants\"\n            }],\n        \"qqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqqstring3\": [{\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqstring3\": [{\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqqstring\": [{\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"rawqqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqstring\": [{\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"rawqstring\"\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"fqqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqqstring3\": [{\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqstring3\": [{\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqqstring\": [{\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"rfqqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqstring\": [{\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqstringParRules\": [{\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)]\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"string\",\n                regex: \"'[^']*'\"\n            }, {\n                token: \"string\",\n                regex: '\"[^\"]*\"'\n            }, {\n                token: \"function.support\",\n                regex: \"(!s|!r|!a)\"\n            }, {\n                include: \"constants\"\n            }, {\n                token: 'paren.rparen',\n                regex: \"}\",\n                next: 'pop'\n            }, {\n                token: 'paren.lparen',\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }],\n        \"constants\": [{\n                token: \"constant.numeric\",\n                regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"[lL]\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: [\"punctuation\", \"function.support\"],\n                regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(PythonHighlightRules, TextHighlightRules);\nexports.PythonHighlightRules = PythonHighlightRules;\n\n});\n\nace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsonHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"variable\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n            }, {\n                token: \"string\",\n                regex: '\"',\n                next: \"string\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: \"text\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            }, {\n                token: \"comment.start\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[,]/\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"string\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.end\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n};\noop.inherits(JsonHighlightRules, TextHighlightRules);\nexports.JsonHighlightRules = JsonHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/pgsql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/perl_highlight_rules\",\"ace/mode/python_highlight_rules\",\"ace/mode/json_highlight_rules\",\"ace/mode/javascript_highlight_rules\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PerlHighlightRules = require(\"./perl_highlight_rules\").PerlHighlightRules;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\nvar JsonHighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar PgsqlHighlightRules = function () {\n    var keywords = (\"abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|\" +\n        \"analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|anyrange|array|as|asc|\" +\n        \"assertion|assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|\" +\n        \"bigint|binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|\" +\n        \"catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|\" +\n        \"cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|\" +\n        \"configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|\" +\n        \"create|cross|cstring|csv|current|current_catalog|current_date|current_role|\" +\n        \"current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|\" +\n        \"date|daterange|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|\" +\n        \"definer|delete|delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|\" +\n        \"domain|double|drop|each|else|enable|encoding|encrypted|end|enum|escape|event|event_trigger|\" +\n        \"except|exclude|excluding|exclusive|execute|exists|explain|extension|external|extract|false|\" +\n        \"family|fdw_handler|fetch|first|float|float4|float8|following|for|force|foreign|forward|\" +\n        \"freeze|from|full|function|functions|global|grant|granted|greatest|group|gtsvector|handler|\" +\n        \"having|header|hold|hour|identity|if|ilike|immediate|immutable|implicit|in|including|\" +\n        \"increment|index|indexes|inet|inherit|inherits|initially|inline|inner|inout|input|\" +\n        \"insensitive|insert|instead|int|int2|int2vector|int4|int4range|int8|int8range|integer|\" +\n        \"internal|intersect|interval|into|invoker|is|isnull|isolation|join|json|key|label|language|\" +\n        \"language_handler|large|last|lateral|lc_collate|lc_ctype|leading|leakproof|least|left|level|\" +\n        \"like|limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|\" +\n        \"mapping|match|materialized|maxvalue|minute|minvalue|mode|money|month|move|name|names|\" +\n        \"national|natural|nchar|next|no|none|not|nothing|notify|notnull|nowait|null|nullif|nulls|\" +\n        \"numeric|numrange|object|of|off|offset|oid|oids|oidvector|on|only|opaque|operator|option|\" +\n        \"options|or|order|out|outer|over|overlaps|overlay|owned|owner|parser|partial|partition|passing|\" +\n        \"password|path|pg_attribute|pg_auth_members|pg_authid|pg_class|pg_database|pg_node_tree|\" +\n        \"pg_proc|pg_type|placing|plans|point|polygon|position|preceding|precision|prepare|prepared|\" +\n        \"preserve|primary|prior|privileges|procedural|procedure|program|quote|range|read|real|\" +\n        \"reassign|recheck|record|recursive|ref|refcursor|references|refresh|regclass|regconfig|\" +\n        \"regdictionary|regoper|regoperator|regproc|regprocedure|regtype|reindex|relative|release|\" +\n        \"reltime|rename|repeatable|replace|replica|reset|restart|restrict|returning|returns|revoke|\" +\n        \"right|role|rollback|row|rows|rule|savepoint|schema|scroll|search|second|security|select|\" +\n        \"sequence|sequences|serializable|server|session|session_user|set|setof|share|show|similar|\" +\n        \"simple|smallint|smgr|snapshot|some|stable|standalone|start|statement|statistics|stdin|\" +\n        \"stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|tablespace|temp|\" +\n        \"template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|tinterval|to|trailing|\" +\n        \"transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsrange|tstzrange|tsvector|\" +\n        \"txid_snapshot|type|types|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|\" +\n        \"unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|\" +\n        \"varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|\" +\n        \"with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|\" +\n        \"xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone\");\n    var builtinFunctions = (\"RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|\" +\n        \"RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|\" +\n        \"RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|\" +\n        \"RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|\" +\n        \"abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|acldefault|\" +\n        \"aclexplode|aclinsert|aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|\" +\n        \"anyarray_in|anyarray_out|anyarray_recv|anyarray_send|anyelement_in|anyelement_out|\" +\n        \"anyenum_in|anyenum_out|anynonarray_in|anynonarray_out|anyrange_in|anyrange_out|\" +\n        \"anytextcat|area|areajoinsel|areasel|array_agg|array_agg_finalfn|array_agg_transfn|\" +\n        \"array_append|array_cat|array_dims|array_eq|array_fill|array_ge|array_gt|array_in|\" +\n        \"array_larger|array_le|array_length|array_lower|array_lt|array_ndims|array_ne|array_out|\" +\n        \"array_prepend|array_recv|array_remove|array_replace|array_send|array_smaller|\" +\n        \"array_to_json|array_to_string|array_typanalyze|array_upper|arraycontained|\" +\n        \"arraycontains|arraycontjoinsel|arraycontsel|arrayoverlap|ascii|ascii_to_mic|\" +\n        \"ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|big5_to_utf8|bit_and|bit_in|\" +\n        \"bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|bitcmp|biteq|bitge|bitgt|bitle|\" +\n        \"bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|bittypmodin|bittypmodout|bitxor|bool|\" +\n        \"bool_and|bool_or|booland_statefunc|booleq|boolge|boolgt|boolin|boolle|boollt|boolne|\" +\n        \"boolor_statefunc|boolout|boolrecv|boolsend|box|box_above|box_above_eq|box_add|box_below|\" +\n        \"box_below_eq|box_center|box_contain|box_contain_pt|box_contained|box_distance|box_div|\" +\n        \"box_eq|box_ge|box_gt|box_in|box_intersect|box_le|box_left|box_lt|box_mul|box_out|\" +\n        \"box_overabove|box_overbelow|box_overlap|box_overleft|box_overright|box_recv|box_right|\" +\n        \"box_same|box_send|box_sub|bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|\" +\n        \"bpchar_pattern_le|bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|\" +\n        \"bpchargt|bpchariclike|bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|\" +\n        \"bpcharlike|bpcharlt|bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|\" +\n        \"bpcharregexne|bpcharsend|bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|\" +\n        \"btarraycmp|btbeginscan|btboolcmp|btbpchar_pattern_cmp|btbuild|btbuildempty|\" +\n        \"btbulkdelete|btcanreturn|btcharcmp|btcostestimate|btendscan|btfloat48cmp|btfloat4cmp|\" +\n        \"btfloat4sortsupport|btfloat84cmp|btfloat8cmp|btfloat8sortsupport|btgetbitmap|\" +\n        \"btgettuple|btinsert|btint24cmp|btint28cmp|btint2cmp|btint2sortsupport|btint42cmp|\" +\n        \"btint48cmp|btint4cmp|btint4sortsupport|btint82cmp|btint84cmp|btint8cmp|\" +\n        \"btint8sortsupport|btmarkpos|btnamecmp|btnamesortsupport|btoidcmp|btoidsortsupport|\" +\n        \"btoidvectorcmp|btoptions|btrecordcmp|btreltimecmp|btrescan|btrestrpos|btrim|\" +\n        \"bttext_pattern_cmp|bttextcmp|bttidcmp|bttintervalcmp|btvacuumcleanup|\" +\n        \"bytea_string_agg_finalfn|bytea_string_agg_transfn|byteacat|byteacmp|byteaeq|byteage|\" +\n        \"byteagt|byteain|byteale|bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|\" +\n        \"cash_cmp|cash_div_cash|cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|\" +\n        \"cash_ge|cash_gt|cash_in|cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|\" +\n        \"cash_mul_int2|cash_mul_int4|cash_ne|cash_out|cash_pl|cash_recv|cash_send|cash_words|\" +\n        \"cashlarger|cashsmaller|cbrt|ceil|ceiling|center|char|char_length|character_length|chareq|\" +\n        \"charge|chargt|charin|charle|charlt|charne|charout|charrecv|charsend|chr|cideq|cidin|cidout|\" +\n        \"cidr|cidr_in|cidr_out|cidr_recv|cidr_send|cidrecv|cidsend|circle|circle_above|\" +\n        \"circle_add_pt|circle_below|circle_center|circle_contain|circle_contain_pt|\" +\n        \"circle_contained|circle_distance|circle_div_pt|circle_eq|circle_ge|circle_gt|circle_in|\" +\n        \"circle_le|circle_left|circle_lt|circle_mul_pt|circle_ne|circle_out|circle_overabove|\" +\n        \"circle_overbelow|circle_overlap|circle_overleft|circle_overright|circle_recv|\" +\n        \"circle_right|circle_same|circle_send|circle_sub_pt|clock_timestamp|close_lb|close_ls|\" +\n        \"close_lseg|close_pb|close_pl|close_ps|close_sb|close_sl|col_description|concat|concat_ws|\" +\n        \"contjoinsel|contsel|convert|convert_from|convert_to|corr|cos|cot|count|covar_pop|\" +\n        \"covar_samp|cstring_in|cstring_out|cstring_recv|cstring_send|cume_dist|current_database|\" +\n        \"current_query|current_schema|current_schemas|current_setting|current_user|currtid|\" +\n        \"currtid2|currval|cursor_to_xml|cursor_to_xmlschema|database_to_xml|\" +\n        \"database_to_xml_and_xmlschema|database_to_xmlschema|date|date_cmp|date_cmp_timestamp|\" +\n        \"date_cmp_timestamptz|date_eq|date_eq_timestamp|date_eq_timestamptz|date_ge|\" +\n        \"date_ge_timestamp|date_ge_timestamptz|date_gt|date_gt_timestamp|date_gt_timestamptz|\" +\n        \"date_in|date_larger|date_le|date_le_timestamp|date_le_timestamptz|date_lt|\" +\n        \"date_lt_timestamp|date_lt_timestamptz|date_mi|date_mi_interval|date_mii|date_ne|\" +\n        \"date_ne_timestamp|date_ne_timestamptz|date_out|date_part|date_pl_interval|date_pli|\" +\n        \"date_recv|date_send|date_smaller|date_sortsupport|date_trunc|daterange|\" +\n        \"daterange_canonical|daterange_subdiff|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|\" +\n        \"dense_rank|dexp|diagonal|diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|\" +\n        \"dist_pc|dist_pl|dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|\" +\n        \"dpow|dround|dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|\" +\n        \"dsynonym_init|dsynonym_lexize|dtrunc|elem_contained_by_range|encode|enum_cmp|enum_eq|\" +\n        \"enum_first|enum_ge|enum_gt|enum_in|enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|\" +\n        \"enum_range|enum_recv|enum_send|enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|\" +\n        \"euc_cn_to_utf8|euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|\" +\n        \"euc_jp_to_sjis|euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|\" +\n        \"euc_tw_to_mic|euc_tw_to_utf8|event_trigger_in|event_trigger_out|every|exp|factorial|\" +\n        \"family|fdw_handler_in|fdw_handler_out|first_value|float4|float48div|float48eq|float48ge|\" +\n        \"float48gt|float48le|float48lt|float48mi|float48mul|float48ne|float48pl|float4_accum|\" +\n        \"float4abs|float4div|float4eq|float4ge|float4gt|float4in|float4larger|float4le|float4lt|\" +\n        \"float4mi|float4mul|float4ne|float4out|float4pl|float4recv|float4send|float4smaller|\" +\n        \"float4um|float4up|float8|float84div|float84eq|float84ge|float84gt|float84le|float84lt|\" +\n        \"float84mi|float84mul|float84ne|float84pl|float8_accum|float8_avg|float8_corr|\" +\n        \"float8_covar_pop|float8_covar_samp|float8_regr_accum|float8_regr_avgx|\" +\n        \"float8_regr_avgy|float8_regr_intercept|float8_regr_r2|float8_regr_slope|\" +\n        \"float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|float8_stddev_samp|\" +\n        \"float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|float8ge|float8gt|float8in|\" +\n        \"float8larger|float8le|float8lt|float8mi|float8mul|float8ne|float8out|float8pl|float8recv|\" +\n        \"float8send|float8smaller|float8um|float8up|floor|flt4_mul_cash|flt8_mul_cash|\" +\n        \"fmgr_c_validator|fmgr_internal_validator|fmgr_sql_validator|format|format_type|\" +\n        \"gb18030_to_utf8|gbk_to_utf8|generate_series|generate_subscripts|get_bit|get_byte|\" +\n        \"get_current_ts_config|getdatabaseencoding|getpgusername|gin_cmp_prefix|\" +\n        \"gin_cmp_tslexeme|gin_extract_tsquery|gin_extract_tsvector|gin_tsquery_consistent|\" +\n        \"ginarrayconsistent|ginarrayextract|ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|\" +\n        \"gincostestimate|ginendscan|gingetbitmap|gininsert|ginmarkpos|ginoptions|\" +\n        \"ginqueryarrayextract|ginrescan|ginrestrpos|ginvacuumcleanup|gist_box_compress|\" +\n        \"gist_box_consistent|gist_box_decompress|gist_box_penalty|gist_box_picksplit|\" +\n        \"gist_box_same|gist_box_union|gist_circle_compress|gist_circle_consistent|\" +\n        \"gist_point_compress|gist_point_consistent|gist_point_distance|gist_poly_compress|\" +\n        \"gist_poly_consistent|gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|\" +\n        \"gistcostestimate|gistendscan|gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|\" +\n        \"gistoptions|gistrescan|gistrestrpos|gistvacuumcleanup|gtsquery_compress|\" +\n        \"gtsquery_consistent|gtsquery_decompress|gtsquery_penalty|gtsquery_picksplit|\" +\n        \"gtsquery_same|gtsquery_union|gtsvector_compress|gtsvector_consistent|\" +\n        \"gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|gtsvector_same|\" +\n        \"gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|\" +\n        \"has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|\" +\n        \"has_function_privilege|has_language_privilege|has_schema_privilege|\" +\n        \"has_sequence_privilege|has_server_privilege|has_table_privilege|\" +\n        \"has_tablespace_privilege|has_type_privilege|hash_aclitem|hash_array|hash_numeric|\" +\n        \"hash_range|hashbeginscan|hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|\" +\n        \"hashcostestimate|hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|\" +\n        \"hashinet|hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|\" +\n        \"hashname|hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|\" +\n        \"hashvacuumcleanup|hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|\" +\n        \"icnlikejoinsel|icnlikesel|icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|\" +\n        \"inet_client_addr|inet_client_port|inet_in|inet_out|inet_recv|inet_send|\" +\n        \"inet_server_addr|inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|\" +\n        \"initcap|int2|int24div|int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|\" +\n        \"int24pl|int28div|int28eq|int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|\" +\n        \"int2_accum|int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|\" +\n        \"int2gt|int2in|int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|\" +\n        \"int2pl|int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|\" +\n        \"int2vectorin|int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|\" +\n        \"int42ge|int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|\" +\n        \"int48gt|int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|\" +\n        \"int4_mul_cash|int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|\" +\n        \"int4larger|int4le|int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|\" +\n        \"int4range|int4range_canonical|int4range_subdiff|int4recv|int4send|int4shl|int4shr|\" +\n        \"int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|int82le|int82lt|\" +\n        \"int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|int84lt|int84mi|\" +\n        \"int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|int8abs|int8and|\" +\n        \"int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|int8inc_float8_float8|int8larger|\" +\n        \"int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|int8or|int8out|int8pl|int8pl_inet|\" +\n        \"int8range|int8range_canonical|int8range_subdiff|int8recv|int8send|int8shl|int8shr|\" +\n        \"int8smaller|int8um|int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|\" +\n        \"internal_out|interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|\" +\n        \"interval_ge|interval_gt|interval_hash|interval_in|interval_larger|interval_le|\" +\n        \"interval_lt|interval_mi|interval_mul|interval_ne|interval_out|interval_pl|\" +\n        \"interval_pl_date|interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|\" +\n        \"interval_pl_timetz|interval_recv|interval_send|interval_smaller|interval_transform|\" +\n        \"interval_um|intervaltypmodin|intervaltypmodout|intinterval|isclosed|isempty|isfinite|\" +\n        \"ishorizontal|iso8859_1_to_utf8|iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|\" +\n        \"iso_to_win866|isopen|isparallel|isperp|isvertical|johab_to_utf8|json_agg|\" +\n        \"json_agg_finalfn|json_agg_transfn|json_array_element|json_array_element_text|\" +\n        \"json_array_elements|json_array_length|json_each|json_each_text|json_extract_path|\" +\n        \"json_extract_path_op|json_extract_path_text|json_extract_path_text_op|json_in|\" +\n        \"json_object_field|json_object_field_text|json_object_keys|json_out|\" +\n        \"json_populate_record|json_populate_recordset|json_recv|json_send|justify_days|\" +\n        \"justify_hours|justify_interval|koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|\" +\n        \"koi8r_to_win1251|koi8r_to_win866|koi8u_to_utf8|lag|language_handler_in|\" +\n        \"language_handler_out|last_value|lastval|latin1_to_mic|latin2_to_mic|latin2_to_win1250|\" +\n        \"latin3_to_mic|latin4_to_mic|lead|left|length|like|like_escape|likejoinsel|likesel|line|\" +\n        \"line_distance|line_eq|line_horizontal|line_in|line_interpt|line_intersect|line_out|\" +\n        \"line_parallel|line_perp|line_recv|line_send|line_vertical|ln|lo_close|lo_creat|lo_create|\" +\n        \"lo_export|lo_import|lo_lseek|lo_lseek64|lo_open|lo_tell|lo_tell64|lo_truncate|\" +\n        \"lo_truncate64|lo_unlink|log|loread|lower|lower_inc|lower_inf|lowrite|lpad|lseg|lseg_center|\" +\n        \"lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|\" +\n        \"lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|\" +\n        \"lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_and|macaddr_cmp|macaddr_eq|macaddr_ge|\" +\n        \"macaddr_gt|macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_not|macaddr_or|\" +\n        \"macaddr_out|macaddr_recv|macaddr_send|makeaclitem|masklen|max|md5|mic_to_ascii|\" +\n        \"mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|\" +\n        \"mic_to_koi8r|mic_to_latin1|mic_to_latin2|mic_to_latin3|mic_to_latin4|mic_to_sjis|\" +\n        \"mic_to_win1250|mic_to_win1251|mic_to_win866|min|mktinterval|mod|money|mul_d_interval|\" +\n        \"name|nameeq|namege|namegt|nameiclike|nameicnlike|nameicregexeq|nameicregexne|namein|\" +\n        \"namele|namelike|namelt|namene|namenlike|nameout|namerecv|nameregexeq|nameregexne|namesend|\" +\n        \"neqjoinsel|neqsel|netmask|network|network_cmp|network_eq|network_ge|network_gt|\" +\n        \"network_le|network_lt|network_ne|network_sub|network_subeq|network_sup|network_supeq|\" +\n        \"nextval|nlikejoinsel|nlikesel|notlike|now|npoints|nth_value|ntile|numeric_abs|\" +\n        \"numeric_accum|numeric_add|numeric_avg|numeric_avg_accum|numeric_cmp|numeric_div|\" +\n        \"numeric_div_trunc|numeric_eq|numeric_exp|numeric_fac|numeric_ge|numeric_gt|numeric_in|\" +\n        \"numeric_inc|numeric_larger|numeric_le|numeric_ln|numeric_log|numeric_lt|numeric_mod|\" +\n        \"numeric_mul|numeric_ne|numeric_out|numeric_power|numeric_recv|numeric_send|\" +\n        \"numeric_smaller|numeric_sqrt|numeric_stddev_pop|numeric_stddev_samp|numeric_sub|\" +\n        \"numeric_transform|numeric_uminus|numeric_uplus|numeric_var_pop|numeric_var_samp|\" +\n        \"numerictypmodin|numerictypmodout|numnode|numrange|numrange_subdiff|obj_description|\" +\n        \"octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|oidrecv|oidsend|\" +\n        \"oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|oidvectorlt|\" +\n        \"oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|on_pl|\" +\n        \"on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|path_add_pt|\" +\n        \"path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|path_length|\" +\n        \"path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|path_out|\" +\n        \"path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|\" +\n        \"pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|\" +\n        \"pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|\" +\n        \"pg_available_extension_versions|pg_available_extensions|pg_backend_pid|\" +\n        \"pg_backup_start_time|pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|\" +\n        \"pg_collation_for|pg_collation_is_visible|pg_column_is_updatable|pg_column_size|\" +\n        \"pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|\" +\n        \"pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|\" +\n        \"pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|\" +\n        \"pg_event_trigger_dropped_objects|pg_export_snapshot|pg_extension_config_dump|\" +\n        \"pg_extension_update_paths|pg_function_is_visible|pg_get_constraintdef|pg_get_expr|\" +\n        \"pg_get_function_arguments|pg_get_function_identity_arguments|\" +\n        \"pg_get_function_result|pg_get_functiondef|pg_get_indexdef|pg_get_keywords|\" +\n        \"pg_get_multixact_members|pg_get_ruledef|pg_get_serial_sequence|pg_get_triggerdef|\" +\n        \"pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_identify_object|pg_indexes_size|\" +\n        \"pg_is_in_backup|pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|\" +\n        \"pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|\" +\n        \"pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|\" +\n        \"pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|\" +\n        \"pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|\" +\n        \"pg_opfamily_is_visible|pg_options_to_table|pg_postmaster_start_time|\" +\n        \"pg_prepared_statement|pg_prepared_xact|pg_read_binary_file|pg_read_file|\" +\n        \"pg_relation_filenode|pg_relation_filepath|pg_relation_is_updatable|pg_relation_size|\" +\n        \"pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|pg_show_all_settings|\" +\n        \"pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|pg_stat_file|\" +\n        \"pg_stat_get_activity|pg_stat_get_analyze_count|pg_stat_get_autoanalyze_count|\" +\n        \"pg_stat_get_autovacuum_count|pg_stat_get_backend_activity|\" +\n        \"pg_stat_get_backend_activity_start|pg_stat_get_backend_client_addr|\" +\n        \"pg_stat_get_backend_client_port|pg_stat_get_backend_dbid|pg_stat_get_backend_idset|\" +\n        \"pg_stat_get_backend_pid|pg_stat_get_backend_start|pg_stat_get_backend_userid|\" +\n        \"pg_stat_get_backend_waiting|pg_stat_get_backend_xact_start|\" +\n        \"pg_stat_get_bgwriter_buf_written_checkpoints|\" +\n        \"pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|\" +\n        \"pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|\" +\n        \"pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|\" +\n        \"pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|\" +\n        \"pg_stat_get_buf_written_backend|pg_stat_get_checkpoint_sync_time|\" +\n        \"pg_stat_get_checkpoint_write_time|pg_stat_get_db_blk_read_time|\" +\n        \"pg_stat_get_db_blk_write_time|pg_stat_get_db_blocks_fetched|\" +\n        \"pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|\" +\n        \"pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|\" +\n        \"pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|\" +\n        \"pg_stat_get_db_conflict_tablespace|pg_stat_get_db_deadlocks|\" +\n        \"pg_stat_get_db_numbackends|pg_stat_get_db_stat_reset_time|\" +\n        \"pg_stat_get_db_temp_bytes|pg_stat_get_db_temp_files|pg_stat_get_db_tuples_deleted|\" +\n        \"pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|\" +\n        \"pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|\" +\n        \"pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|\" +\n        \"pg_stat_get_function_calls|pg_stat_get_function_self_time|\" +\n        \"pg_stat_get_function_total_time|pg_stat_get_last_analyze_time|\" +\n        \"pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|\" +\n        \"pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|\" +\n        \"pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|\" +\n        \"pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|\" +\n        \"pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|\" +\n        \"pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|\" +\n        \"pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|\" +\n        \"pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_total_time|\" +\n        \"pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|\" +\n        \"pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|\" +\n        \"pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|\" +\n        \"pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|\" +\n        \"pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|\" +\n        \"pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|\" +\n        \"pg_tablespace_databases|pg_tablespace_location|pg_tablespace_size|\" +\n        \"pg_terminate_backend|pg_timezone_abbrevs|pg_timezone_names|pg_total_relation_size|\" +\n        \"pg_trigger_depth|pg_try_advisory_lock|pg_try_advisory_lock_shared|\" +\n        \"pg_try_advisory_xact_lock|pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|\" +\n        \"pg_ts_dict_is_visible|pg_ts_parser_is_visible|pg_ts_template_is_visible|\" +\n        \"pg_type_is_visible|pg_typeof|pg_xlog_location_diff|pg_xlog_replay_pause|\" +\n        \"pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|pi|plainto_tsquery|\" +\n        \"plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|point|point_above|\" +\n        \"point_add|point_below|point_distance|point_div|point_eq|point_horiz|point_in|point_left|\" +\n        \"point_mul|point_ne|point_out|point_recv|point_right|point_send|point_sub|point_vert|\" +\n        \"poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|poly_contained|\" +\n        \"poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|poly_overbelow|\" +\n        \"poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|poly_same|poly_send|\" +\n        \"polygon|popen|position|positionjoinsel|positionsel|postgresql_fdw_validator|pow|power|\" +\n        \"prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|prsd_start|pt_contained_circle|\" +\n        \"pt_contained_poly|query_to_xml|query_to_xml_and_xmlschema|query_to_xmlschema|\" +\n        \"querytree|quote_ident|quote_literal|quote_nullable|radians|radius|random|range_adjacent|\" +\n        \"range_after|range_before|range_cmp|range_contained_by|range_contains|\" +\n        \"range_contains_elem|range_eq|range_ge|range_gist_compress|range_gist_consistent|\" +\n        \"range_gist_decompress|range_gist_penalty|range_gist_picksplit|range_gist_same|\" +\n        \"range_gist_union|range_gt|range_in|range_intersect|range_le|range_lt|range_minus|\" +\n        \"range_ne|range_out|range_overlaps|range_overleft|range_overright|range_recv|range_send|\" +\n        \"range_typanalyze|range_union|rangesel|rank|record_eq|record_ge|record_gt|record_in|\" +\n        \"record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|\" +\n        \"regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|\" +\n        \"regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|\" +\n        \"regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|\" +\n        \"regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|\" +\n        \"regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|\" +\n        \"regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|\" +\n        \"regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|\" +\n        \"regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|\" +\n        \"reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|\" +\n        \"reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|row_to_json|rpad|\" +\n        \"rtrim|scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|\" +\n        \"schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|\" +\n        \"set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|\" +\n        \"shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|\" +\n        \"similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|\" +\n        \"smgrout|spg_kd_choose|spg_kd_config|spg_kd_inner_consistent|spg_kd_picksplit|\" +\n        \"spg_quad_choose|spg_quad_config|spg_quad_inner_consistent|spg_quad_leaf_consistent|\" +\n        \"spg_quad_picksplit|spg_range_quad_choose|spg_range_quad_config|\" +\n        \"spg_range_quad_inner_consistent|spg_range_quad_leaf_consistent|\" +\n        \"spg_range_quad_picksplit|spg_text_choose|spg_text_config|spg_text_inner_consistent|\" +\n        \"spg_text_leaf_consistent|spg_text_picksplit|spgbeginscan|spgbuild|spgbuildempty|\" +\n        \"spgbulkdelete|spgcanreturn|spgcostestimate|spgendscan|spggetbitmap|spggettuple|\" +\n        \"spginsert|spgmarkpos|spgoptions|spgrescan|spgrestrpos|spgvacuumcleanup|split_part|sqrt|\" +\n        \"statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|string_agg_finalfn|\" +\n        \"string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|\" +\n        \"suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|\" +\n        \"table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|\" +\n        \"text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|\" +\n        \"texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|\" +\n        \"textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|\" +\n        \"thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|\" +\n        \"tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|\" +\n        \"time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|\" +\n        \"time_smaller|time_transform|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|\" +\n        \"timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|\" +\n        \"timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|\" +\n        \"timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|\" +\n        \"timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|\" +\n        \"timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|\" +\n        \"timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|\" +\n        \"timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|\" +\n        \"timestamp_sortsupport|timestamp_transform|timestamptypmodin|timestamptypmodout|\" +\n        \"timestamptz_cmp|timestamptz_cmp_date|timestamptz_cmp_timestamp|timestamptz_eq|\" +\n        \"timestamptz_eq_date|timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|\" +\n        \"timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|\" +\n        \"timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|\" +\n        \"timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|\" +\n        \"timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|\" +\n        \"timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|\" +\n        \"timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|\" +\n        \"timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|\" +\n        \"timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|\" +\n        \"timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|\" +\n        \"timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|\" +\n        \"tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|\" +\n        \"tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|\" +\n        \"tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|\" +\n        \"tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|\" +\n        \"to_json|to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|\" +\n        \"trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|\" +\n        \"ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|\" +\n        \"ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|\" +\n        \"tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|\" +\n        \"tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsrange|\" +\n        \"tsrange_subdiff|tstzrange|tstzrange_subdiff|tsvector_cmp|tsvector_concat|tsvector_eq|\" +\n        \"tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|tsvector_ne|tsvector_update_trigger|\" +\n        \"tsvector_update_trigger_column|tsvectorin|tsvectorout|tsvectorrecv|tsvectorsend|\" +\n        \"txid_current|txid_current_snapshot|txid_snapshot_in|txid_snapshot_out|\" +\n        \"txid_snapshot_recv|txid_snapshot_send|txid_snapshot_xip|txid_snapshot_xmax|\" +\n        \"txid_snapshot_xmin|txid_visible_in_snapshot|uhc_to_utf8|unique_key_recheck|unknownin|\" +\n        \"unknownout|unknownrecv|unknownsend|unnest|upper|upper_inc|upper_inf|utf8_to_ascii|\" +\n        \"utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|utf8_to_euc_kr|\" +\n        \"utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|utf8_to_iso8859_1|\" +\n        \"utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|utf8_to_sjis|\" +\n        \"utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|uuid_le|\" +\n        \"uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|varbit_out|\" +\n        \"varbit_recv|varbit_send|varbit_transform|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|\" +\n        \"varbitlt|varbitne|varbittypmodin|varbittypmodout|varchar_transform|varcharin|\" +\n        \"varcharout|varcharrecv|varcharsend|varchartypmodin|varchartypmodout|variance|version|\" +\n        \"void_in|void_out|void_recv|void_send|width|width_bucket|win1250_to_latin2|\" +\n        \"win1250_to_mic|win1251_to_iso|win1251_to_koi8r|win1251_to_mic|win1251_to_win866|\" +\n        \"win866_to_iso|win866_to_koi8r|win866_to_mic|win866_to_win1251|win_to_utf8|xideq|\" +\n        \"xideqint4|xidin|xidout|xidrecv|xidsend|xml|xml_in|xml_is_well_formed|\" +\n        \"xml_is_well_formed_content|xml_is_well_formed_document|xml_out|xml_recv|xml_send|\" +\n        \"xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|xpath_exists\");\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n    var sqlRules = [{\n            token: \"string\",\n            regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token: \"variable.language\",\n            regex: '\".*?\"'\n        }, {\n            token: \"constant.numeric\",\n            regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"[a-zA-Z_][a-zA-Z0-9_$]*\\\\b\" // TODO - Unicode in identifiers\n        }, {\n            token: \"keyword.operator\",\n            regex: \"!|!!|!~|!~\\\\*|!~~|!~~\\\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\\\&|\\\\&\\\\&|\\\\&<|\\\\&<\\\\||\\\\&>|\\\\*|\\\\+|\" +\n                \"\\\\-|/|<|<#>|<\\\\->|<<|<<=|<<\\\\||<=|<>|<\\\\?>|<@|<\\\\^|=|>|>=|>>|>>=|>\\\\^|\\\\?#|\\\\?\\\\-|\\\\?\\\\-\\\\||\" +\n                \"\\\\?\\\\||\\\\?\\\\|\\\\||@|@\\\\-@|@>|@@|@@@|\\\\^|\\\\||\\\\|\\\\&>|\\\\|/|\\\\|>>|\\\\|\\\\||\\\\|\\\\|/|~|~\\\\*|~<=~|~<~|\" +\n                \"~=|~>=~|~>~|~~|~~\\\\*\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\)]\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }\n    ];\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"--.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"keyword.statementBegin\",\n                regex: \"[a-zA-Z]+\",\n                next: \"statement\"\n            }, {\n                token: \"support.buildin\",\n                regex: \"^\\\\\\\\[\\\\S]+.*$\"\n            }\n        ],\n        \"statement\": [{\n                token: \"comment\",\n                regex: \"--.*$\"\n            }, {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"commentStatement\"\n            }, {\n                token: \"statementEnd\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\$perl\\\\$\",\n                next: \"perl-start\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\$python\\\\$\",\n                next: \"python-start\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\$json\\\\$\",\n                next: \"json-start\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\$(js|javascript)\\\\$\",\n                next: \"javascript-start\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\$\\\\$$\",\n                next: \"dollarSql\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next: \"dollarStatementString\"\n            }\n        ].concat(sqlRules),\n        \"dollarSql\": [{\n                token: \"comment\",\n                regex: \"--.*$\"\n            }, {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"commentDollarSql\"\n            }, {\n                token: [\"keyword\", \"statementEnd\", \"text\", \"string\"],\n                regex: \"(^|END)(;)?(\\\\s*)(\\\\$\\\\$)\",\n                next: \"statement\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next: \"dollarSqlString\"\n            }\n        ].concat(sqlRules),\n        \"comment\": [{\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"commentStatement\": [{\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"statement\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"commentDollarSql\": [{\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"dollarSql\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"dollarStatementString\": [{\n                token: \"string\",\n                regex: \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next: \"statement\"\n            }, {\n                token: \"string\",\n                regex: \".+\"\n            }\n        ],\n        \"dollarSqlString\": [{\n                token: \"string\",\n                regex: \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next: \"dollarSql\"\n            }, {\n                token: \"string\",\n                regex: \".+\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.embedRules(PerlHighlightRules, \"perl-\", [{ token: \"string\", regex: \"\\\\$perl\\\\$\", next: \"statement\" }]);\n    this.embedRules(PythonHighlightRules, \"python-\", [{ token: \"string\", regex: \"\\\\$python\\\\$\", next: \"statement\" }]);\n    this.embedRules(JsonHighlightRules, \"json-\", [{ token: \"string\", regex: \"\\\\$json\\\\$\", next: \"statement\" }]);\n    this.embedRules(JavaScriptHighlightRules, \"javascript-\", [{ token: \"string\", regex: \"\\\\$(js|javascript)\\\\$\", next: \"statement\" }]);\n};\noop.inherits(PgsqlHighlightRules, TextHighlightRules);\nexports.PgsqlHighlightRules = PgsqlHighlightRules;\n\n});\n\nace.define(\"ace/mode/pgsql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pgsql_highlight_rules\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar PgsqlHighlightRules = require(\"./pgsql_highlight_rules\").PgsqlHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = PgsqlHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        if (state == \"start\" || state == \"keyword.statementEnd\") {\n            return \"\";\n        }\n        else {\n            return this.$getIndent(line); // Keep whatever indent the previous line has\n        }\n    };\n    this.$id = \"ace/mode/pgsql\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/pgsql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-php.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar PhpLangHighlightRules = function () {\n    var docComment = DocCommentHighlightRules;\n    var builtinFunctions = lang.arrayToMap('abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|\\\naggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|\\\napache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|\\\napache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|\\\napc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|\\\napc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|\\\napd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|\\\napd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|\\\narray_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|\\\narray_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|\\\narray_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|\\\narray_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|\\\narray_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|\\\narray_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|\\\natan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|\\\nbbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|\\\nbcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|\\\nbcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|\\\nbcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|\\\nbindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|\\\ncachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|\\\ncairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|\\\ncairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|\\\ncairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|\\\ncairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|\\\ncairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|\\\ncairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|\\\ncairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|\\\ncairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|\\\ncairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|\\\ncairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|\\\ncairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|\\\ncairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|\\\ncairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|\\\ncairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|\\\ncairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|\\\ncairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|\\\ncairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|\\\ncairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|\\\ncairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|\\\ncairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|\\\ncairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|\\\ncairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|\\\ncairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|\\\ncairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|\\\ncairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|\\\ncairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|\\\ncal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|\\\nchdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|\\\nclass_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|\\\nclasskit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|\\\ncom_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|\\\ncom_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|\\\nconvert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|\\\ncounter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|\\\ncrack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|\\\nctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|\\\ncubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|\\\ncubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|\\\ncubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|\\\ncubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|\\\ncubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|\\\ncubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|\\\ncubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|\\\ncubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|\\\ncubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|\\\ncubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|\\\ncubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|\\\ncurl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|\\\ncurl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|\\\ncurl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|\\\ndate_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|\\\ndate_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|\\\ndate_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|\\\ndateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|\\\ndb2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|\\\ndb2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|\\\ndb2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|\\\ndb2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|\\\ndb2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|\\\ndb2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|\\\ndba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|\\\ndbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|\\\ndbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|\\\ndbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|\\\ndbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|\\\ndbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|\\\ndbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|\\\ndbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|\\\ndbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|\\\ndefine_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|\\\ndio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|\\\ndns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|\\\ndomattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|\\\ndomdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|\\\ndomdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|\\\ndomdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|\\\ndomdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|\\\ndomdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|\\\ndomelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|\\\ndomelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|\\\ndomexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|\\\ndomnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|\\\ndomnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|\\\ndomnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|\\\ndomnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|\\\ndomnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|\\\ndomtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|\\\ndomxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|\\\ndomxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|\\\nenchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|\\\nenchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|\\\nenchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|\\\nenchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|\\\neregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|\\\nevent_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|\\\nevent_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|\\\nevent_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|\\\nevent_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|\\\nexpm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|\\\nfam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|\\\nfbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|\\\nfbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|\\\nfbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|\\\nfbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|\\\nfbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|\\\nfbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|\\\nfbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|\\\nfbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|\\\nfdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|\\\nfdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|\\\nfdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|\\\nfdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|\\\nfile_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|\\\nfilepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|\\\nfiletype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|\\\nfinfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|\\\nforward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|\\\nftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|\\\nftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|\\\nftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|\\\nfunc_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|\\\ngearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|\\\ngeoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|\\\ngeoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|\\\nget_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|\\\nget_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|\\\nget_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|\\\nget_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|\\\ngetcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|\\\ngethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|\\\ngetmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|\\\ngetrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|\\\ngettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|\\\ngmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|\\\ngmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|\\\ngmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|\\\ngnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|\\\ngnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|\\\ngnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|\\\ngrapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|\\\ngupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|\\\ngupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|\\\ngupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|\\\ngupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|\\\ngupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|\\\ngupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|\\\ngupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|\\\ngupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|\\\ngupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|\\\ngzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|\\\nhalt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|\\\nharuannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|\\\nharudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|\\\nharudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|\\\nharudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|\\\nharudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|\\\nharudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|\\\nharudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|\\\nharudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|\\\nharudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|\\\nharuencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|\\\nharufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|\\\nharufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|\\\nharuimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|\\\nharuoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|\\\nharupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|\\\nharupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|\\\nharupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|\\\nharupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|\\\nharupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|\\\nharupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|\\\nharupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|\\\nharupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|\\\nharupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|\\\nharupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|\\\nharupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|\\\nharupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|\\\nharupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|\\\nharupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|\\\nhash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|\\\nheader_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|\\\nhtml_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|\\\nhttp_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|\\\nhttp_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|\\\nhttp_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|\\\nhttp_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|\\\nhttp_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|\\\nhttp_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|\\\nhttp_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|\\\nhttp_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|\\\nhttpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|\\\nhttpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|\\\nhttpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|\\\nhttpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|\\\nhttpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|\\\nhttpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|\\\nhttpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|\\\nhttpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|\\\nhttpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|\\\nhttprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|\\\nhttprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|\\\nhttprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|\\\nhttprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|\\\nhttprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|\\\nhttprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|\\\nhttprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|\\\nhttprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|\\\nhttprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|\\\nhttprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|\\\nhttprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|\\\nhttprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|\\\nhttprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|\\\nhttpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|\\\nhttpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|\\\nhttpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|\\\nhttpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|\\\nhttpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|\\\nhttpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|\\\nhttpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|\\\nhw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|\\\nhw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|\\\nhw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|\\\nhw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|\\\nhw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|\\\nhw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|\\\nhw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|\\\nhwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|\\\nhwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|\\\nhwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|\\\nhwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|\\\nhwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|\\\nhwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|\\\nhwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|\\\nibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|\\\nibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|\\\nibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|\\\nibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|\\\nibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|\\\nibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|\\\nibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|\\\niconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|\\\nid3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|\\\nidn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|\\\nifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|\\\nifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|\\\nifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|\\\nifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|\\\niis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|\\\niis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|\\\niis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|\\\nimagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|\\\nimagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|\\\nimagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|\\\nimagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|\\\nimagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|\\\nimagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|\\\nimagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|\\\nimagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|\\\nimagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|\\\nimagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|\\\nimagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|\\\nimagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|\\\nimagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|\\\nimagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|\\\nimagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|\\\nimagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|\\\nimagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|\\\nimagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|\\\nimagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|\\\nimagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|\\\nimagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|\\\nimagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|\\\nimagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|\\\nimagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|\\\nimagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|\\\nimagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|\\\nimagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|\\\nimagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|\\\nimagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|\\\nimagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|\\\nimagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|\\\nimagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|\\\nimagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|\\\nimagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|\\\nimagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|\\\nimagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|\\\nimagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|\\\nimagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|\\\nimagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|\\\nimagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|\\\nimagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|\\\nimagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|\\\nimagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|\\\nimagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|\\\nimagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|\\\nimagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|\\\nimagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|\\\nimagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|\\\nimagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|\\\nimagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|\\\nimagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|\\\nimagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|\\\nimagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|\\\nimagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|\\\nimagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|\\\nimagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|\\\nimagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|\\\nimagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|\\\nimagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|\\\nimagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|\\\nimagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|\\\nimagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|\\\nimagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|\\\nimagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|\\\nimagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|\\\nimagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|\\\nimagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|\\\nimagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|\\\nimagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|\\\nimagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|\\\nimagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|\\\nimagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|\\\nimagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|\\\nimagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|\\\nimagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|\\\nimagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|\\\nimagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|\\\nimagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|\\\nimagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|\\\nimagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|\\\nimagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|\\\nimagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|\\\nimagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|\\\nimagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|\\\nimagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|\\\nimagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|\\\nimagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|\\\nimagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|\\\nimagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|\\\nimagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|\\\nimagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|\\\nimagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|\\\nimagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|\\\nimagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|\\\nimagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|\\\nimagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|\\\nimagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|\\\nimagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|\\\nimagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|\\\nimagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|\\\nimagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|\\\nimagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|\\\nimap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|\\\nimap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|\\\nimap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|\\\nimap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|\\\nimap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|\\\nimap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|\\\nimap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|\\\nimap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|\\\ninclude_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|\\\ningres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|\\\ningres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|\\\ningres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|\\\ningres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|\\\ningres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|\\\ninotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|\\\nintldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|\\\nis_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|\\\nis_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|\\\niscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|\\\niterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|\\\njddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|\\\njson_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|\\\nkadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|\\\nkadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|\\\nldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|\\\nldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|\\\nldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|\\\nldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|\\\nldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|\\\nlibxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|\\\nlimititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|\\\nlzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|\\\nm_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|\\\nm_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|\\\nm_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|\\\nm_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|\\\nmailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|\\\nmailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|\\\nmailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|\\\nmaxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|\\\nmaxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|\\\nmaxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|\\\nmaxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|\\\nmaxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|\\\nmaxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|\\\nmaxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|\\\nmaxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|\\\nmaxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|\\\nmaxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|\\\nmaxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|\\\nmaxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|\\\nmaxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|\\\nmaxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|\\\nmaxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|\\\nmb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|\\\nmb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|\\\nmb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|\\\nmb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|\\\nmb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|\\\nmb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|\\\nmb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|\\\nmcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|\\\nmcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|\\\nmcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|\\\nmcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|\\\nmcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|\\\nmcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|\\\nmdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|\\\nmhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|\\\nming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|\\\nmongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|\\\nmongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|\\\nmongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|\\\nmqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|\\\nmqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|\\\nmsession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|\\\nmsession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|\\\nmsg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|\\\nmsql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|\\\nmsql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|\\\nmsql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|\\\nmsql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|\\\nmssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|\\\nmssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|\\\nmssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|\\\nmssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|\\\nmssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|\\\nmysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|\\\nmysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|\\\nmysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|\\\nmysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|\\\nmysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|\\\nmysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|\\\nmysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|\\\nmysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|\\\nmysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|\\\nmysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|\\\nmysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|\\\nmysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|\\\nmysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|\\\nmysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|\\\nmysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|\\\nmysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|\\\nmysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|\\\nmysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|\\\nmysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|\\\nmysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|\\\nmysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|\\\nmysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|\\\nmysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|\\\nmysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|\\\nmysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|\\\nmysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|\\\nmysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|\\\nncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|\\\nncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|\\\nncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|\\\nncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|\\\nncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|\\\nncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|\\\nncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|\\\nncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|\\\nncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|\\\nncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|\\\nncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|\\\nncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|\\\nncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|\\\nncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|\\\nncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|\\\nncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|\\\nncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|\\\nncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|\\\nncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|\\\nncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|\\\nncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|\\\nncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|\\\nnewt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|\\\nnewt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|\\\nnewt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|\\\nnewt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|\\\nnewt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|\\\nnewt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|\\\nnewt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|\\\nnewt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|\\\nnewt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|\\\nnewt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|\\\nnewt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|\\\nnewt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|\\\nnewt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|\\\nnewt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|\\\nnewt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|\\\nnewt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|\\\nnewt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|\\\nnewt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|\\\nnewt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|\\\nnotes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|\\\nnotes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|\\\nnumberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|\\\nob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|\\\nob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|\\\noci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|\\\noci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|\\\noci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|\\\noci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|\\\noci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|\\\noci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|\\\noci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|\\\noci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|\\\noci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|\\\nocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|\\\nocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|\\\nocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|\\\nociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|\\\nocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|\\\noctdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|\\\nodbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|\\\nodbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|\\\nodbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|\\\nodbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|\\\nodbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|\\\nopenal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|\\\nopenal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|\\\nopenal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|\\\nopenlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|\\\nopenssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|\\\nopenssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|\\\nopenssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|\\\nopenssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|\\\nopenssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|\\\nopenssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|\\\nopenssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|\\\noutofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|\\\novrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|\\\novrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|\\\novrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|\\\nparse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|\\\npcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|\\\npcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|\\\npdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|\\\npdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|\\\npdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|\\\npdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|\\\npdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|\\\npdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|\\\npdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|\\\npdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|\\\npdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|\\\npdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|\\\npdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|\\\npdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|\\\npdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|\\\npdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|\\\npdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|\\\npdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|\\\npdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|\\\npdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|\\\npdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|\\\npdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|\\\npdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|\\\npdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|\\\npdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|\\\npdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|\\\npg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|\\\npg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|\\\npg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|\\\npg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|\\\npg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|\\\npg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|\\\npg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|\\\npg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|\\\npg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|\\\nphp_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|\\\npng2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|\\\nposix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|\\\nposix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|\\\nposix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|\\\npreg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|\\\nprinter_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|\\\nprinter_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|\\\nprinter_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|\\\nprinter_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|\\\nprinter_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|\\\nps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|\\\nps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|\\\nps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|\\\nps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|\\\nps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|\\\nps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|\\\nps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|\\\nps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|\\\nps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|\\\npspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|\\\npspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|\\\npspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|\\\npx_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|\\\npx_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|\\\npx_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|\\\nradius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|\\\nradius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|\\\nradius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|\\\nradius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|\\\nrararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|\\\nreadline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|\\\nreadline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|\\\nreadline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|\\\nrecursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|\\\nrecursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|\\\nreflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|\\\nregexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|\\\nresourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|\\\nrpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|\\\nrrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|\\\nrunkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|\\\nrunkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|\\\nrunkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|\\\nrunkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|\\\nsamconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|\\\nsamconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|\\\nsammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|\\\nsca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|\\\nsdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|\\\nsdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|\\\nsdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|\\\nsdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|\\\nsdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|\\\nsdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|\\\nsdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|\\\nsdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|\\\nsdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|\\\nsdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|\\\nsdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|\\\nsdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|\\\nsdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|\\\nsdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|\\\nsdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|\\\nsdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|\\\nsdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|\\\nsem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|\\\nsession_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|\\\nsession_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|\\\nsession_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|\\\nsession_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|\\\nset_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|\\\nsetstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|\\\nshm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|\\\nsimilar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|\\\nsnmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|\\\nsnmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|\\\nsnmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|\\\nsoapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|\\\nsocket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|\\\nsocket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|\\\nsocket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|\\\nsolrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|\\\nsolrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|\\\nsolrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|\\\nspl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|\\\nsplfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|\\\nsplpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|\\\nsqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|\\\nsqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|\\\nsqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|\\\nsqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|\\\nsqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|\\\nsqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|\\\nssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|\\\nssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|\\\nssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|\\\nssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|\\\nstats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|\\\nstats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|\\\nstats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|\\\nstats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|\\\nstats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|\\\nstats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|\\\nstats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|\\\nstats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|\\\nstats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|\\\nstats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|\\\nstats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|\\\nstats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|\\\nstr_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|\\\nstream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|\\\nstream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|\\\nstream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|\\\nstream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|\\\nstream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|\\\nstream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|\\\nstream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|\\\nstream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|\\\nstripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|\\\nstrstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|\\\nsvn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|\\\nsvn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|\\\nsvn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|\\\nsvn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|\\\nsvn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|\\\nsvn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|\\\nswf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|\\\nswf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|\\\nswf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|\\\nswf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|\\\nswf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|\\\nswf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|\\\nswf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|\\\nswf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|\\\nswfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|\\\nswfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|\\\nswish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|\\\nswishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|\\\nswishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|\\\nsybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|\\\nsybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|\\\nsybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|\\\nsybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|\\\ntcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|\\\ntidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|\\\ntime_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|\\\ntimezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|\\\ntokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|\\\nucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|\\\nudm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|\\\nudm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|\\\nuksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|\\\nurldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|\\\nvariant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|\\\nvariant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|\\\nvariant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|\\\nvpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|\\\nvpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|\\\nvpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|\\\nw32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|\\\nwddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|\\\nwin32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|\\\nwin32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|\\\nwincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|\\\nwincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|\\\nwincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|\\\nwincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|\\\nxattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|\\\nxdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|\\\nxdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|\\\nxhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|\\\nxml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|\\\nxml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|\\\nxml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|\\\nxml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|\\\nxmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|\\\nxmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|\\\nxmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|\\\nxmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|\\\nxmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|\\\nxmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|\\\nxmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|\\\nxmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|\\\nxmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|\\\nxmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|\\\nxmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|\\\nxpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|\\\nxslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|\\\nxslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|\\\nyaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|\\\nyaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|\\\nyaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|\\\nyp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|\\\nzip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|\\\nziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|\\\nziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|\\\nziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|\\\nziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|\\\nziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|\\\nziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type'.split('|'));\n    var keywords = lang.arrayToMap('abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|\\\nendif|endswitch|endwhile|extends|final|finally|for|foreach|function|global|goto|if|implements|instanceof|insteadof|interface|namespace|new|or|private|protected|\\\npublic|static|switch|throw|trait|try|use|var|while|xor|yield'.split('|'));\n    var languageConstructs = lang.arrayToMap(('__halt_compiler|die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset').split('|'));\n    var builtinConstants = lang.arrayToMap(('true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__|__TRAIT__').split('|'));\n    var builtinVariables = lang.arrayToMap('$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|\\\n$http_response_header|$argc|$argv'.split('|'));\n    var builtinFunctionsDeprecated = lang.arrayToMap('key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|\\\ncom_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|\\\ncubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|\\\nhw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|\\\nmaxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|\\\nmysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|\\\nmysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|\\\nmysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|\\\nmysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|\\\nmysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|\\\nmysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|\\\nocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|\\\nocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|\\\nocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|\\\nocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|\\\nociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|\\\nPDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|\\\nPDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|\\\nPDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|\\\nPDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|\\\nPDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|\\\nPDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|\\\nPDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|\\\nPDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|\\\npx_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregister\\\nset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|\\\nsql_regcase'.split('|'));\n    var keywordsDeprecated = lang.arrayToMap(('cfunction|old_function').split('|'));\n    var futureReserved = lang.arrayToMap([]);\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: /(?:#|\\/\\/)(?:[^?]|\\?[^>])*/\n            },\n            docComment.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token: \"string\",\n                regex: '\"',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: \"'\",\n                next: \"qstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|\" +\n                    \"ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|\" +\n                    \"HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|\" +\n                    \"L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|\" +\n                    \"VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"\n            }, {\n                token: [\"keyword\", \"text\", \"support.class\"],\n                regex: \"\\\\b(new)(\\\\s+)(\\\\w+)\"\n            }, {\n                token: [\"support.class\", \"keyword.operator\"],\n                regex: \"\\\\b(\\\\w+)(::)\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|\" +\n                    \"SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|\" +\n                    \"O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|\" +\n                    \"R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|\" +\n                    \"YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|\" +\n                    \"ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|\" +\n                    \"T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|\" +\n                    \"HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|\" +\n                    \"I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|\" +\n                    \"O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|\" +\n                    \"L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|\" +\n                    \"M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|\" +\n                    \"OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                    \"P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                    \"RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|\" +\n                    \"T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"\n            }, {\n                token: function (value) {\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (builtinConstants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (builtinVariables.hasOwnProperty(value))\n                        return \"variable.language\";\n                    else if (futureReserved.hasOwnProperty(value))\n                        return \"invalid.illegal\";\n                    else if (builtinFunctions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (value == \"debugger\")\n                        return \"invalid.deprecated\";\n                    else if (value.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/))\n                        return \"variable\";\n                    return \"identifier\";\n                },\n                regex: /[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            }, {\n                onMatch: function (value, currentSate, state) {\n                    value = value.substr(3);\n                    if (value[0] == \"'\" || value[0] == '\"')\n                        value = value.slice(1, -1);\n                    state.unshift(this.next, value);\n                    return \"markup.list\";\n                },\n                regex: /<<<(?:\\w+|'\\w+'|\"\\w+\")$/,\n                next: \"heredoc\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|\\\\.=|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|/=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[,;]/\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"heredoc\": [\n            {\n                onMatch: function (value, currentState, stack) {\n                    if (stack[1] != value) {\n                        this.next = \"\";\n                        return \"string\";\n                    }\n                    stack.shift();\n                    stack.shift();\n                    this.next = this.nextState;\n                    return \"markup.list\";\n                },\n                regex: \"^\\\\w+(?=;?$)\",\n                nextState: \"start\"\n            }, {\n                token: \"string\",\n                regex: \".*\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: '\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'\n            }, {\n                token: \"variable\",\n                regex: /\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/\n            }, {\n                token: \"variable\",\n                regex: /\\$\\{[^\"\\}]+\\}?/ // this is wrong but ok for now\n            },\n            { token: \"string\", regex: '\"', next: \"start\" },\n            { defaultToken: \"string\" }\n        ],\n        \"qstring\": [\n            { token: \"constant.language.escape\", regex: /\\\\['\\\\]/ },\n            { token: \"string\", regex: \"'\", next: \"start\" },\n            { defaultToken: \"string\" }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\noop.inherits(PhpLangHighlightRules, TextHighlightRules);\nvar PhpHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var startRules = [\n        {\n            token: \"support.php_tag\",\n            regex: \"<\\\\?(?:php|=)?\",\n            push: \"php-start\"\n        }\n    ];\n    var endRules = [\n        {\n            token: \"support.php_tag\",\n            regex: \"\\\\?>\",\n            next: \"pop\"\n        }\n    ];\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n    this.embedRules(PhpLangHighlightRules, \"php-\", endRules, [\"start\"]);\n    this.normalizeRules();\n};\noop.inherits(PhpHighlightRules, HtmlHighlightRules);\nexports.PhpHighlightRules = PhpHighlightRules;\nexports.PhpLangHighlightRules = PhpLangHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/php_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/**\n * ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK *****\n */\n\"use strict\";\nvar functionMap = {\n    \"abs\": [\n        \"int abs(int number)\",\n        \"Return the absolute value of the number\"\n    ],\n    \"acos\": [\n        \"float acos(float number)\",\n        \"Return the arc cosine of the number in radians\"\n    ],\n    \"acosh\": [\n        \"float acosh(float number)\",\n        \"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"\n    ],\n    \"addGlob\": [\n        \"bool addGlob(string pattern[,int flags [, array options]])\",\n        \"Add files matching the glob pattern. See php's glob for the pattern syntax.\"\n    ],\n    \"addPattern\": [\n        \"bool addPattern(string pattern[, string path [, array options]])\",\n        \"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"\n    ],\n    \"addcslashes\": [\n        \"string addcslashes(string str, string charlist)\",\n        \"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"\n    ],\n    \"addslashes\": [\n        \"string addslashes(string str)\",\n        \"Escapes single quote, double quotes and backslash characters in a string with backslashes\"\n    ],\n    \"apache_child_terminate\": [\n        \"bool apache_child_terminate()\",\n        \"Terminate apache process after this request\"\n    ],\n    \"apache_get_modules\": [\n        \"array apache_get_modules()\",\n        \"Get a list of loaded Apache modules\"\n    ],\n    \"apache_get_version\": [\n        \"string apache_get_version()\",\n        \"Fetch Apache version\"\n    ],\n    \"apache_getenv\": [\n        \"bool apache_getenv(string variable [, bool walk_to_top])\",\n        \"Get an Apache subprocess_env variable\"\n    ],\n    \"apache_lookup_uri\": [\n        \"object apache_lookup_uri(string URI)\",\n        \"Perform a partial request of the given URI to obtain information about it\"\n    ],\n    \"apache_note\": [\n        \"string apache_note(string note_name [, string note_value])\",\n        \"Get and set Apache request notes\"\n    ],\n    \"apache_request_auth_name\": [\n        \"string apache_request_auth_name()\",\n        \"\"\n    ],\n    \"apache_request_auth_type\": [\n        \"string apache_request_auth_type()\",\n        \"\"\n    ],\n    \"apache_request_discard_request_body\": [\n        \"long apache_request_discard_request_body()\",\n        \"\"\n    ],\n    \"apache_request_err_headers_out\": [\n        \"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all headers that go out in case of an error or a subrequest\"\n    ],\n    \"apache_request_headers\": [\n        \"array apache_request_headers()\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"apache_request_headers_in\": [\n        \"array apache_request_headers_in()\",\n        \"* fetch all incoming request headers\"\n    ],\n    \"apache_request_headers_out\": [\n        \"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all outgoing request headers\"\n    ],\n    \"apache_request_is_initial_req\": [\n        \"bool apache_request_is_initial_req()\",\n        \"\"\n    ],\n    \"apache_request_log_error\": [\n        \"bool apache_request_log_error(string message, [long facility])\",\n        \"\"\n    ],\n    \"apache_request_meets_conditions\": [\n        \"long apache_request_meets_conditions()\",\n        \"\"\n    ],\n    \"apache_request_remote_host\": [\n        \"int apache_request_remote_host([int type])\",\n        \"\"\n    ],\n    \"apache_request_run\": [\n        \"long apache_request_run()\",\n        \"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"\n    ],\n    \"apache_request_satisfies\": [\n        \"long apache_request_satisfies()\",\n        \"\"\n    ],\n    \"apache_request_server_port\": [\n        \"int apache_request_server_port()\",\n        \"\"\n    ],\n    \"apache_request_set_etag\": [\n        \"void apache_request_set_etag()\",\n        \"\"\n    ],\n    \"apache_request_set_last_modified\": [\n        \"void apache_request_set_last_modified()\",\n        \"\"\n    ],\n    \"apache_request_some_auth_required\": [\n        \"bool apache_request_some_auth_required()\",\n        \"\"\n    ],\n    \"apache_request_sub_req_lookup_file\": [\n        \"object apache_request_sub_req_lookup_file(string file)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_sub_req_lookup_uri\": [\n        \"object apache_request_sub_req_lookup_uri(string uri)\",\n        \"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"\n    ],\n    \"apache_request_sub_req_method_uri\": [\n        \"object apache_request_sub_req_method_uri(string method, string uri)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_update_mtime\": [\n        \"long apache_request_update_mtime([int dependency_mtime])\",\n        \"\"\n    ],\n    \"apache_reset_timeout\": [\n        \"bool apache_reset_timeout()\",\n        \"Reset the Apache write timer\"\n    ],\n    \"apache_response_headers\": [\n        \"array apache_response_headers()\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"apache_setenv\": [\n        \"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\n        \"Set an Apache subprocess_env variable\"\n    ],\n    \"array_change_key_case\": [\n        \"array array_change_key_case(array input [, int case=CASE_LOWER])\",\n        \"Retuns an array with all string keys lowercased [or uppercased]\"\n    ],\n    \"array_chunk\": [\n        \"array array_chunk(array input, int size [, bool preserve_keys])\",\n        \"Split array into chunks\"\n    ],\n    \"array_combine\": [\n        \"array array_combine(array keys, array values)\",\n        \"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"\n    ],\n    \"array_count_values\": [\n        \"array array_count_values(array input)\",\n        \"Return the value as key and the frequency of that value in input as value\"\n    ],\n    \"array_diff\": [\n        \"array array_diff(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"\n    ],\n    \"array_diff_assoc\": [\n        \"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"\n    ],\n    \"array_diff_key\": [\n        \"array array_diff_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_diff_uassoc\": [\n        \"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"\n    ],\n    \"array_diff_ukey\": [\n        \"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_fill\": [\n        \"array array_fill(int start_key, int num, mixed val)\",\n        \"Create an array containing num elements starting with index start_key each initialized to val\"\n    ],\n    \"array_fill_keys\": [\n        \"array array_fill_keys(array keys, mixed val)\",\n        \"Create an array using the elements of the first parameter as keys each initialized to val\"\n    ],\n    \"array_filter\": [\n        \"array array_filter(array input [, mixed callback])\",\n        \"Filters elements from the array via the callback.\"\n    ],\n    \"array_flip\": [\n        \"array array_flip(array input)\",\n        \"Return array with key <-> value flipped\"\n    ],\n    \"array_intersect\": [\n        \"array array_intersect(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments\"\n    ],\n    \"array_intersect_assoc\": [\n        \"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"\n    ],\n    \"array_intersect_key\": [\n        \"array array_intersect_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"\n    ],\n    \"array_intersect_uassoc\": [\n        \"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"\n    ],\n    \"array_intersect_ukey\": [\n        \"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"\n    ],\n    \"array_key_exists\": [\n        \"bool array_key_exists(mixed key, array search)\",\n        \"Checks if the given key or index exists in the array\"\n    ],\n    \"array_keys\": [\n        \"array array_keys(array input [, mixed search_value[, bool strict]])\",\n        \"Return just the keys from the input array, optionally only for the specified search_value\"\n    ],\n    \"array_key_first\": [\n        \"mixed array_key_first(array arr)\",\n        \"Returns the first key of arr if the array is not empty; NULL otherwise\"\n    ],\n    \"array_key_last\": [\n        \"mixed array_key_last(array arr)\",\n        \"Returns the last key of arr if the array is not empty; NULL otherwise\"\n    ],\n    \"array_map\": [\n        \"array array_map(mixed callback, array input1 [, array input2 ,...])\",\n        \"Applies the callback to the elements in given arrays.\"\n    ],\n    \"array_merge\": [\n        \"array array_merge(array arr1, array arr2 [, array ...])\",\n        \"Merges elements from passed arrays into one array\"\n    ],\n    \"array_merge_recursive\": [\n        \"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively merges elements from passed arrays into one array\"\n    ],\n    \"array_multisort\": [\n        \"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\n        \"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"\n    ],\n    \"array_pad\": [\n        \"array array_pad(array input, int pad_size, mixed pad_value)\",\n        \"Returns a copy of input array padded with pad_value to size pad_size\"\n    ],\n    \"array_pop\": [\n        \"mixed array_pop(array stack)\",\n        \"Pops an element off the end of the array\"\n    ],\n    \"array_product\": [\n        \"mixed array_product(array input)\",\n        \"Returns the product of the array entries\"\n    ],\n    \"array_push\": [\n        \"int array_push(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the end of the array\"\n    ],\n    \"array_rand\": [\n        \"mixed array_rand(array input [, int num_req])\",\n        \"Return key/keys for random entry/entries in the array\"\n    ],\n    \"array_reduce\": [\n        \"mixed array_reduce(array input, mixed callback [, mixed initial])\",\n        \"Iteratively reduce the array to a single value via the callback.\"\n    ],\n    \"array_replace\": [\n        \"array array_replace(array arr1, array arr2 [, array ...])\",\n        \"Replaces elements from passed arrays into one array\"\n    ],\n    \"array_replace_recursive\": [\n        \"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively replaces elements from passed arrays into one array\"\n    ],\n    \"array_reverse\": [\n        \"array array_reverse(array input [, bool preserve keys])\",\n        \"Return input as a new array with the order of the entries reversed\"\n    ],\n    \"array_search\": [\n        \"mixed array_search(mixed needle, array haystack [, bool strict])\",\n        \"Searches the array for a given value and returns the corresponding key if successful\"\n    ],\n    \"array_shift\": [\n        \"mixed array_shift(array stack)\",\n        \"Pops an element off the beginning of the array\"\n    ],\n    \"array_slice\": [\n        \"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\n        \"Returns elements specified by offset and length\"\n    ],\n    \"array_splice\": [\n        \"array array_splice(array input, int offset [, int length [, array replacement]])\",\n        \"Removes the elements designated by offset and length and replace them with supplied array\"\n    ],\n    \"array_sum\": [\n        \"mixed array_sum(array input)\",\n        \"Returns the sum of the array entries\"\n    ],\n    \"array_udiff\": [\n        \"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"\n    ],\n    \"array_udiff_assoc\": [\n        \"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"\n    ],\n    \"array_udiff_uassoc\": [\n        \"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"\n    ],\n    \"array_uintersect\": [\n        \"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_assoc\": [\n        \"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_uassoc\": [\n        \"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"\n    ],\n    \"array_unique\": [\n        \"array array_unique(array input [, int sort_flags])\",\n        \"Removes duplicate values from array\"\n    ],\n    \"array_unshift\": [\n        \"int array_unshift(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the beginning of the array\"\n    ],\n    \"array_values\": [\n        \"array array_values(array input)\",\n        \"Return just the values from the input array\"\n    ],\n    \"array_walk\": [\n        \"bool array_walk(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function to every member of an array\"\n    ],\n    \"array_walk_recursive\": [\n        \"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function recursively to every member of an array\"\n    ],\n    \"arsort\": [\n        \"bool arsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order and maintain index association\"\n    ],\n    \"asin\": [\n        \"float asin(float number)\",\n        \"Returns the arc sine of the number in radians\"\n    ],\n    \"asinh\": [\n        \"float asinh(float number)\",\n        \"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"\n    ],\n    \"asort\": [\n        \"bool asort(array &array_arg [, int sort_flags])\",\n        \"Sort an array and maintain index association\"\n    ],\n    \"assert\": [\n        \"int assert(string|bool assertion)\",\n        \"Checks if assertion is false\"\n    ],\n    \"assert_options\": [\n        \"mixed assert_options(int what [, mixed value])\",\n        \"Set/get the various assert flags\"\n    ],\n    \"atan\": [\n        \"float atan(float number)\",\n        \"Returns the arc tangent of the number in radians\"\n    ],\n    \"atan2\": [\n        \"float atan2(float y, float x)\",\n        \"Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x\"\n    ],\n    \"atanh\": [\n        \"float atanh(float number)\",\n        \"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"\n    ],\n    \"attachIterator\": [\n        \"void attachIterator(Iterator iterator[, mixed info])\",\n        \"Attach a new iterator\"\n    ],\n    \"base64_decode\": [\n        \"string base64_decode(string str[, bool strict])\",\n        \"Decodes string using MIME base64 algorithm\"\n    ],\n    \"base64_encode\": [\n        \"string base64_encode(string str)\",\n        \"Encodes string using MIME base64 algorithm\"\n    ],\n    \"base_convert\": [\n        \"string base_convert(string number, int frombase, int tobase)\",\n        \"Converts a number in a string from any base <= 36 to any base <= 36\"\n    ],\n    \"basename\": [\n        \"string basename(string path [, string suffix])\",\n        \"Returns the filename component of the path\"\n    ],\n    \"bcadd\": [\n        \"string bcadd(string left_operand, string right_operand [, int scale])\",\n        \"Returns the sum of two arbitrary precision numbers\"\n    ],\n    \"bccomp\": [\n        \"int bccomp(string left_operand, string right_operand [, int scale])\",\n        \"Compares two arbitrary precision numbers\"\n    ],\n    \"bcdiv\": [\n        \"string bcdiv(string left_operand, string right_operand [, int scale])\",\n        \"Returns the quotient of two arbitrary precision numbers (division)\"\n    ],\n    \"bcmod\": [\n        \"string bcmod(string left_operand, string right_operand)\",\n        \"Returns the modulus of the two arbitrary precision operands\"\n    ],\n    \"bcmul\": [\n        \"string bcmul(string left_operand, string right_operand [, int scale])\",\n        \"Returns the multiplication of two arbitrary precision numbers\"\n    ],\n    \"bcpow\": [\n        \"string bcpow(string x, string y [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another\"\n    ],\n    \"bcpowmod\": [\n        \"string bcpowmod(string x, string y, string mod [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"\n    ],\n    \"bcscale\": [\n        \"bool bcscale(int scale)\",\n        \"Sets default scale parameter for all bc math functions\"\n    ],\n    \"bcsqrt\": [\n        \"string bcsqrt(string operand [, int scale])\",\n        \"Returns the square root of an arbitray precision number\"\n    ],\n    \"bcsub\": [\n        \"string bcsub(string left_operand, string right_operand [, int scale])\",\n        \"Returns the difference between two arbitrary precision numbers\"\n    ],\n    \"bin2hex\": [\n        \"string bin2hex(string data)\",\n        \"Converts the binary representation of data to hex\"\n    ],\n    \"bind_textdomain_codeset\": [\n        \"string bind_textdomain_codeset (string domain, string codeset)\",\n        \"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"\n    ],\n    \"bindec\": [\n        \"int bindec(string binary_number)\",\n        \"Returns the decimal equivalent of the binary number\"\n    ],\n    \"bindtextdomain\": [\n        \"string bindtextdomain(string domain_name, string dir)\",\n        \"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"\n    ],\n    \"birdstep_autocommit\": [\n        \"bool birdstep_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_close\": [\n        \"bool birdstep_close(int id)\",\n        \"\"\n    ],\n    \"birdstep_commit\": [\n        \"bool birdstep_commit(int index)\",\n        \"\"\n    ],\n    \"birdstep_connect\": [\n        \"int birdstep_connect(string server, string user, string pass)\",\n        \"\"\n    ],\n    \"birdstep_exec\": [\n        \"int birdstep_exec(int index, string exec_str)\",\n        \"\"\n    ],\n    \"birdstep_fetch\": [\n        \"bool birdstep_fetch(int index)\",\n        \"\"\n    ],\n    \"birdstep_fieldname\": [\n        \"string birdstep_fieldname(int index, int col)\",\n        \"\"\n    ],\n    \"birdstep_fieldnum\": [\n        \"int birdstep_fieldnum(int index)\",\n        \"\"\n    ],\n    \"birdstep_freeresult\": [\n        \"bool birdstep_freeresult(int index)\",\n        \"\"\n    ],\n    \"birdstep_off_autocommit\": [\n        \"bool birdstep_off_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_result\": [\n        \"mixed birdstep_result(int index, mixed col)\",\n        \"\"\n    ],\n    \"birdstep_rollback\": [\n        \"bool birdstep_rollback(int index)\",\n        \"\"\n    ],\n    \"bzcompress\": [\n        \"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\n        \"Compresses a string into BZip2 encoded data\"\n    ],\n    \"bzdecompress\": [\n        \"string bzdecompress(string source [, int small])\",\n        \"Decompresses BZip2 compressed data\"\n    ],\n    \"bzerrno\": [\n        \"int bzerrno(resource bz)\",\n        \"Returns the error number\"\n    ],\n    \"bzerror\": [\n        \"array bzerror(resource bz)\",\n        \"Returns the error number and error string in an associative array\"\n    ],\n    \"bzerrstr\": [\n        \"string bzerrstr(resource bz)\",\n        \"Returns the error string\"\n    ],\n    \"bzopen\": [\n        \"resource bzopen(string|int file|fp, string mode)\",\n        \"Opens a new BZip2 stream\"\n    ],\n    \"bzread\": [\n        \"string bzread(resource bz[, int length])\",\n        \"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"\n    ],\n    \"cal_days_in_month\": [\n        \"int cal_days_in_month(int calendar, int month, int year)\",\n        \"Returns the number of days in a month for a given year and calendar\"\n    ],\n    \"cal_from_jd\": [\n        \"array cal_from_jd(int jd, int calendar)\",\n        \"Converts from Julian Day Count to a supported calendar and return extended information\"\n    ],\n    \"cal_info\": [\n        \"array cal_info([int calendar])\",\n        \"Returns information about a particular calendar\"\n    ],\n    \"cal_to_jd\": [\n        \"int cal_to_jd(int calendar, int month, int day, int year)\",\n        \"Converts from a supported calendar to Julian Day Count\"\n    ],\n    \"call_user_func\": [\n        \"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"call_user_func_array\": [\n        \"mixed call_user_func_array(string function_name, array parameters)\",\n        \"Call a user function which is the first parameter with the arguments contained in array\"\n    ],\n    \"call_user_method\": [\n        \"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\n        \"Call a user method on a specific object or class\"\n    ],\n    \"call_user_method_array\": [\n        \"mixed call_user_method_array(string method_name, mixed object, array params)\",\n        \"Call a user method on a specific object or class using a parameter array\"\n    ],\n    \"ceil\": [\n        \"float ceil(float number)\",\n        \"Returns the next highest integer value of the number\"\n    ],\n    \"chdir\": [\n        \"bool chdir(string directory)\",\n        \"Change the current directory\"\n    ],\n    \"checkdate\": [\n        \"bool checkdate(int month, int day, int year)\",\n        \"Returns true(1) if it is a valid date in gregorian calendar\"\n    ],\n    \"chgrp\": [\n        \"bool chgrp(string filename, mixed group)\",\n        \"Change file group\"\n    ],\n    \"chmod\": [\n        \"bool chmod(string filename, int mode)\",\n        \"Change file mode\"\n    ],\n    \"chown\": [\n        \"bool chown(string filename, mixed user)\",\n        \"Change file owner\"\n    ],\n    \"chr\": [\n        \"string chr(int ascii)\",\n        \"Converts ASCII code to a character\"\n    ],\n    \"chroot\": [\n        \"bool chroot(string directory)\",\n        \"Change root directory\"\n    ],\n    \"chunk_split\": [\n        \"string chunk_split(string str [, int chunklen [, string ending]])\",\n        \"Returns split line\"\n    ],\n    \"class_alias\": [\n        \"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\n        \"Creates an alias for user defined class\"\n    ],\n    \"class_exists\": [\n        \"bool class_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"class_implements\": [\n        \"array class_implements(mixed what [, bool autoload ])\",\n        \"Return all classes and interfaces implemented by SPL\"\n    ],\n    \"class_parents\": [\n        \"array class_parents(object instance [, bool autoload = true])\",\n        \"Return an array containing the names of all parent classes\"\n    ],\n    \"clearstatcache\": [\n        \"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\n        \"Clear file stat cache\"\n    ],\n    \"closedir\": [\n        \"void closedir([resource dir_handle])\",\n        \"Close directory connection identified by the dir_handle\"\n    ],\n    \"closelog\": [\n        \"bool closelog()\",\n        \"Close connection to system logger\"\n    ],\n    \"collator_asort\": [\n        \"bool collator_asort( Collator $coll, array(string) $arr )\",\n        \"* Sort array using specified collator, maintaining index association.\"\n    ],\n    \"collator_compare\": [\n        \"int collator_compare( Collator $coll, string $str1, string $str2 )\",\n        \"* Compare two strings.\"\n    ],\n    \"collator_create\": [\n        \"Collator collator_create( string $locale )\",\n        \"* Create collator.\"\n    ],\n    \"collator_get_attribute\": [\n        \"int collator_get_attribute( Collator $coll, int $attr )\",\n        \"* Get collation attribute value.\"\n    ],\n    \"collator_get_error_code\": [\n        \"int collator_get_error_code( Collator $coll )\",\n        \"* Get collator's last error code.\"\n    ],\n    \"collator_get_error_message\": [\n        \"string collator_get_error_message( Collator $coll )\",\n        \"* Get text description for collator's last error code.\"\n    ],\n    \"collator_get_locale\": [\n        \"string collator_get_locale( Collator $coll, int $type )\",\n        \"* Gets the locale name of the collator.\"\n    ],\n    \"collator_get_sort_key\": [\n        \"bool collator_get_sort_key( Collator $coll, string $str )\",\n        \"* Get a sort key for a string from a Collator. }}}\"\n    ],\n    \"collator_get_strength\": [\n        \"int collator_get_strength(Collator coll)\",\n        \"* Returns the current collation strength.\"\n    ],\n    \"collator_set_attribute\": [\n        \"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\n        \"* Set collation attribute.\"\n    ],\n    \"collator_set_strength\": [\n        \"bool collator_set_strength(Collator coll, int strength)\",\n        \"* Set the collation strength.\"\n    ],\n    \"collator_sort\": [\n        \"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\n        \"* Sort array using specified collator.\"\n    ],\n    \"collator_sort_with_sort_keys\": [\n        \"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\n        \"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"\n    ],\n    \"com_create_guid\": [\n        \"string com_create_guid()\",\n        \"Generate a globally unique identifier (GUID)\"\n    ],\n    \"com_event_sink\": [\n        \"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\n        \"Connect events from a COM object to a PHP object\"\n    ],\n    \"com_get_active_object\": [\n        \"object com_get_active_object(string progid [, int code_page ])\",\n        \"Returns a handle to an already running instance of a COM object\"\n    ],\n    \"com_load_typelib\": [\n        \"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\n        \"Loads a Typelibrary and registers its constants\"\n    ],\n    \"com_message_pump\": [\n        \"bool com_message_pump([int timeoutms])\",\n        \"Process COM messages, sleeping for up to timeoutms milliseconds\"\n    ],\n    \"com_print_typeinfo\": [\n        \"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\n        \"Print out a PHP class definition for a dispatchable interface\"\n    ],\n    \"compact\": [\n        \"array compact(mixed var_names [, mixed ...])\",\n        \"Creates a hash containing variables and their values\"\n    ],\n    \"compose_locale\": [\n        \"static string compose_locale($array)\",\n        \"* Creates a locale by combining the parts of locale-ID passed  * }}}\"\n    ],\n    \"confirm_extname_compiled\": [\n        \"string confirm_extname_compiled(string arg)\",\n        \"Return a string to confirm that the module is compiled in\"\n    ],\n    \"connection_aborted\": [\n        \"int connection_aborted()\",\n        \"Returns true if client disconnected\"\n    ],\n    \"connection_status\": [\n        \"int connection_status()\",\n        \"Returns the connection status bitfield\"\n    ],\n    \"constant\": [\n        \"mixed constant(string const_name)\",\n        \"Given the name of a constant this function will return the constant's associated value\"\n    ],\n    \"convert_cyr_string\": [\n        \"string convert_cyr_string(string str, string from, string to)\",\n        \"Convert from one Cyrillic character set to another\"\n    ],\n    \"convert_uudecode\": [\n        \"string convert_uudecode(string data)\",\n        \"decode a uuencoded string\"\n    ],\n    \"convert_uuencode\": [\n        \"string convert_uuencode(string data)\",\n        \"uuencode a string\"\n    ],\n    \"copy\": [\n        \"bool copy(string source_file, string destination_file [, resource context])\",\n        \"Copy a file\"\n    ],\n    \"cos\": [\n        \"float cos(float number)\",\n        \"Returns the cosine of the number in radians\"\n    ],\n    \"cosh\": [\n        \"float cosh(float number)\",\n        \"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2\"\n    ],\n    \"count\": [\n        \"int count(mixed var [, int mode])\",\n        \"Count the number of elements in a variable (usually an array)\"\n    ],\n    \"count_chars\": [\n        \"mixed count_chars(string input [, int mode])\",\n        \"Returns info about what characters are used in input\"\n    ],\n    \"crc32\": [\n        \"string crc32(string str)\",\n        \"Calculate the crc32 polynomial of a string\"\n    ],\n    \"create_function\": [\n        \"string create_function(string args, string code)\",\n        \"Creates an anonymous function, and returns its name\"\n    ],\n    \"crypt\": [\n        \"string crypt(string str [, string salt])\",\n        \"Hash a string\"\n    ],\n    \"ctype_alnum\": [\n        \"bool ctype_alnum(mixed c)\",\n        \"Checks for alphanumeric character(s)\"\n    ],\n    \"ctype_alpha\": [\n        \"bool ctype_alpha(mixed c)\",\n        \"Checks for alphabetic character(s)\"\n    ],\n    \"ctype_cntrl\": [\n        \"bool ctype_cntrl(mixed c)\",\n        \"Checks for control character(s)\"\n    ],\n    \"ctype_digit\": [\n        \"bool ctype_digit(mixed c)\",\n        \"Checks for numeric character(s)\"\n    ],\n    \"ctype_graph\": [\n        \"bool ctype_graph(mixed c)\",\n        \"Checks for any printable character(s) except space\"\n    ],\n    \"ctype_lower\": [\n        \"bool ctype_lower(mixed c)\",\n        \"Checks for lowercase character(s)\"\n    ],\n    \"ctype_print\": [\n        \"bool ctype_print(mixed c)\",\n        \"Checks for printable character(s)\"\n    ],\n    \"ctype_punct\": [\n        \"bool ctype_punct(mixed c)\",\n        \"Checks for any printable character which is not whitespace or an alphanumeric character\"\n    ],\n    \"ctype_space\": [\n        \"bool ctype_space(mixed c)\",\n        \"Checks for whitespace character(s)\"\n    ],\n    \"ctype_upper\": [\n        \"bool ctype_upper(mixed c)\",\n        \"Checks for uppercase character(s)\"\n    ],\n    \"ctype_xdigit\": [\n        \"bool ctype_xdigit(mixed c)\",\n        \"Checks for character(s) representing a hexadecimal digit\"\n    ],\n    \"curl_close\": [\n        \"void curl_close(resource ch)\",\n        \"Close a cURL session\"\n    ],\n    \"curl_copy_handle\": [\n        \"resource curl_copy_handle(resource ch)\",\n        \"Copy a cURL handle along with all of it's preferences\"\n    ],\n    \"curl_errno\": [\n        \"int curl_errno(resource ch)\",\n        \"Return an integer containing the last error number\"\n    ],\n    \"curl_error\": [\n        \"string curl_error(resource ch)\",\n        \"Return a string contain the last error for the current session\"\n    ],\n    \"curl_exec\": [\n        \"bool curl_exec(resource ch)\",\n        \"Perform a cURL session\"\n    ],\n    \"curl_getinfo\": [\n        \"mixed curl_getinfo(resource ch [, int option])\",\n        \"Get information regarding a specific transfer\"\n    ],\n    \"curl_init\": [\n        \"resource curl_init([string url])\",\n        \"Initialize a cURL session\"\n    ],\n    \"curl_multi_add_handle\": [\n        \"int curl_multi_add_handle(resource mh, resource ch)\",\n        \"Add a normal cURL handle to a cURL multi handle\"\n    ],\n    \"curl_multi_close\": [\n        \"void curl_multi_close(resource mh)\",\n        \"Close a set of cURL handles\"\n    ],\n    \"curl_multi_exec\": [\n        \"int curl_multi_exec(resource mh, int &still_running)\",\n        \"Run the sub-connections of the current cURL handle\"\n    ],\n    \"curl_multi_getcontent\": [\n        \"string curl_multi_getcontent(resource ch)\",\n        \"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"\n    ],\n    \"curl_multi_info_read\": [\n        \"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\n        \"Get information about the current transfers\"\n    ],\n    \"curl_multi_init\": [\n        \"resource curl_multi_init()\",\n        \"Returns a new cURL multi handle\"\n    ],\n    \"curl_multi_remove_handle\": [\n        \"int curl_multi_remove_handle(resource mh, resource ch)\",\n        \"Remove a multi handle from a set of cURL handles\"\n    ],\n    \"curl_multi_select\": [\n        \"int curl_multi_select(resource mh[, double timeout])\",\n        \"Get all the sockets associated with the cURL extension, which can then be \\\"selected\\\"\"\n    ],\n    \"curl_setopt\": [\n        \"bool curl_setopt(resource ch, int option, mixed value)\",\n        \"Set an option for a cURL transfer\"\n    ],\n    \"curl_setopt_array\": [\n        \"bool curl_setopt_array(resource ch, array options)\",\n        \"Set an array of option for a cURL transfer\"\n    ],\n    \"curl_version\": [\n        \"array curl_version([int version])\",\n        \"Return cURL version information.\"\n    ],\n    \"current\": [\n        \"mixed current(array array_arg)\",\n        \"Return the element currently pointed to by the internal array pointer\"\n    ],\n    \"date\": [\n        \"string date(string format [, long timestamp])\",\n        \"Format a local date/time\"\n    ],\n    \"date_add\": [\n        \"DateTime date_add(DateTime object, DateInterval interval)\",\n        \"Adds an interval to the current date in object.\"\n    ],\n    \"date_create\": [\n        \"DateTime date_create([string time[, DateTimeZone object]])\",\n        \"Returns new DateTime object\"\n    ],\n    \"date_create_from_format\": [\n        \"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\n        \"Returns new DateTime object formatted according to the specified format\"\n    ],\n    \"date_date_set\": [\n        \"DateTime date_date_set(DateTime object, long year, long month, long day)\",\n        \"Sets the date.\"\n    ],\n    \"date_default_timezone_get\": [\n        \"string date_default_timezone_get()\",\n        \"Gets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_default_timezone_set\": [\n        \"bool date_default_timezone_set(string timezone_identifier)\",\n        \"Sets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_diff\": [\n        \"DateInterval date_diff(DateTime object [, bool absolute])\",\n        \"Returns the difference between two DateTime objects.\"\n    ],\n    \"date_format\": [\n        \"string date_format(DateTime object, string format)\",\n        \"Returns date formatted according to given format\"\n    ],\n    \"date_get_last_errors\": [\n        \"array date_get_last_errors()\",\n        \"Returns the warnings and errors found while parsing a date/time string.\"\n    ],\n    \"date_interval_create_from_date_string\": [\n        \"DateInterval date_interval_create_from_date_string(string time)\",\n        \"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"\n    ],\n    \"date_interval_format\": [\n        \"string date_interval_format(DateInterval object, string format)\",\n        \"Formats the interval.\"\n    ],\n    \"date_isodate_set\": [\n        \"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\n        \"Sets the ISO date.\"\n    ],\n    \"date_modify\": [\n        \"DateTime date_modify(DateTime object, string modify)\",\n        \"Alters the timestamp.\"\n    ],\n    \"date_offset_get\": [\n        \"long date_offset_get(DateTime object)\",\n        \"Returns the DST offset.\"\n    ],\n    \"date_parse\": [\n        \"array date_parse(string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_parse_from_format\": [\n        \"array date_parse_from_format(string format, string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_sub\": [\n        \"DateTime date_sub(DateTime object, DateInterval interval)\",\n        \"Subtracts an interval to the current date in object.\"\n    ],\n    \"date_sun_info\": [\n        \"array date_sun_info(long time, float latitude, float longitude)\",\n        \"Returns an array with information about sun set/rise and twilight begin/end\"\n    ],\n    \"date_sunrise\": [\n        \"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunrise for a given day and location\"\n    ],\n    \"date_sunset\": [\n        \"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunset for a given day and location\"\n    ],\n    \"date_time_set\": [\n        \"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\n        \"Sets the time.\"\n    ],\n    \"date_timestamp_get\": [\n        \"long date_timestamp_get(DateTime object)\",\n        \"Gets the Unix timestamp.\"\n    ],\n    \"date_timestamp_set\": [\n        \"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\n        \"Sets the date and time based on an Unix timestamp.\"\n    ],\n    \"date_timezone_get\": [\n        \"DateTimeZone date_timezone_get(DateTime object)\",\n        \"Return new DateTimeZone object relative to give DateTime\"\n    ],\n    \"date_timezone_set\": [\n        \"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\n        \"Sets the timezone for the DateTime object.\"\n    ],\n    \"datefmt_create\": [\n        \"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\n        \"* Create formatter.\"\n    ],\n    \"datefmt_format\": [\n        \"string datefmt_format( [mixed]int $args or array $args )\",\n        \"* Format the time value as a string. }}}\"\n    ],\n    \"datefmt_get_calendar\": [\n        \"string datefmt_get_calendar( IntlDateFormatter $mf )\",\n        \"* Get formatter calendar.\"\n    ],\n    \"datefmt_get_datetype\": [\n        \"string datefmt_get_datetype( IntlDateFormatter $mf )\",\n        \"* Get formatter datetype.\"\n    ],\n    \"datefmt_get_error_code\": [\n        \"int datefmt_get_error_code( IntlDateFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"datefmt_get_error_message\": [\n        \"string datefmt_get_error_message( IntlDateFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"datefmt_get_locale\": [\n        \"string datefmt_get_locale(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_get_pattern\": [\n        \"string datefmt_get_pattern( IntlDateFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"datefmt_get_timetype\": [\n        \"string datefmt_get_timetype( IntlDateFormatter $mf )\",\n        \"* Get formatter timetype.\"\n    ],\n    \"datefmt_get_timezone_id\": [\n        \"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\n        \"* Get formatter timezone_id.\"\n    ],\n    \"datefmt_isLenient\": [\n        \"string datefmt_isLenient(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_localtime\": [\n        \"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\n        \"* Parse the string $value to a localtime array  }}}\"\n    ],\n    \"datefmt_parse\": [\n        \"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\n        \"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"\n    ],\n    \"datefmt_setLenient\": [\n        \"string datefmt_setLenient(IntlDateFormatter $mf)\",\n        \"* Set formatter lenient.\"\n    ],\n    \"datefmt_set_calendar\": [\n        \"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\n        \"* Set formatter calendar.\"\n    ],\n    \"datefmt_set_pattern\": [\n        \"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"datefmt_set_timezone_id\": [\n        \"bool datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\n        \"* Set formatter timezone_id.\"\n    ],\n    \"dba_close\": [\n        \"void dba_close(resource handle)\",\n        \"Closes database\"\n    ],\n    \"dba_delete\": [\n        \"bool dba_delete(string key, resource handle)\",\n        \"Deletes the entry associated with key    If inifile: remove all other key lines\"\n    ],\n    \"dba_exists\": [\n        \"bool dba_exists(string key, resource handle)\",\n        \"Checks, if the specified key exists\"\n    ],\n    \"dba_fetch\": [\n        \"string dba_fetch(string key, [int skip ,] resource handle)\",\n        \"Fetches the data associated with key\"\n    ],\n    \"dba_firstkey\": [\n        \"string dba_firstkey(resource handle)\",\n        \"Resets the internal key pointer and returns the first key\"\n    ],\n    \"dba_handlers\": [\n        \"array dba_handlers([bool full_info])\",\n        \"List configured database handlers\"\n    ],\n    \"dba_insert\": [\n        \"bool dba_insert(string key, string value, resource handle)\",\n        \"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"\n    ],\n    \"dba_key_split\": [\n        \"array|false dba_key_split(string key)\",\n        \"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"\n    ],\n    \"dba_list\": [\n        \"array dba_list()\",\n        \"List opened databases\"\n    ],\n    \"dba_nextkey\": [\n        \"string dba_nextkey(resource handle)\",\n        \"Returns the next key\"\n    ],\n    \"dba_open\": [\n        \"resource dba_open(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode\"\n    ],\n    \"dba_optimize\": [\n        \"bool dba_optimize(resource handle)\",\n        \"Optimizes (e.g. clean up, vacuum) database\"\n    ],\n    \"dba_popen\": [\n        \"resource dba_popen(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode persistently\"\n    ],\n    \"dba_replace\": [\n        \"bool dba_replace(string key, string value, resource handle)\",\n        \"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"\n    ],\n    \"dba_sync\": [\n        \"bool dba_sync(resource handle)\",\n        \"Synchronizes database\"\n    ],\n    \"dcgettext\": [\n        \"string dcgettext(string domain_name, string msgid, long category)\",\n        \"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"\n    ],\n    \"dcngettext\": [\n        \"string dcngettext(string domain, string msgid1, string msgid2, int n, int category)\",\n        \"Plural version of dcgettext()\"\n    ],\n    \"debug_backtrace\": [\n        \"array debug_backtrace([bool provide_object])\",\n        \"Return backtrace as array\"\n    ],\n    \"debug_print_backtrace\": [\n        \"void debug_print_backtrace()\",\n        \"Prints a PHP backtrace\"\n    ],\n    \"debug_zval_dump\": [\n        \"void debug_zval_dump(mixed var)\",\n        \"Dumps a string representation of an internal Zend value to output\"\n    ],\n    \"decbin\": [\n        \"string decbin(int decimal_number)\",\n        \"Returns a string containing a binary representation of the number\"\n    ],\n    \"dechex\": [\n        \"string dechex(int decimal_number)\",\n        \"Returns a string containing a hexadecimal representation of the given number\"\n    ],\n    \"decoct\": [\n        \"string decoct(int decimal_number)\",\n        \"Returns a string containing an octal representation of the given number\"\n    ],\n    \"define\": [\n        \"bool define(string constant_name, mixed value, bool case_insensitive=false)\",\n        \"Define a new constant\"\n    ],\n    \"define_syslog_variables\": [\n        \"void define_syslog_variables()\",\n        \"Initializes all syslog-related variables\"\n    ],\n    \"defined\": [\n        \"bool defined(string constant_name)\",\n        \"Check whether a constant exists\"\n    ],\n    \"deg2rad\": [\n        \"float deg2rad(float number)\",\n        \"Converts the number in degrees to the radian equivalent\"\n    ],\n    \"dgettext\": [\n        \"string dgettext(string domain_name, string msgid)\",\n        \"Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist\"\n    ],\n    \"die\": [\n        \"void die([mixed status])\",\n        \"Output a message and terminate the current script\"\n    ],\n    \"dir\": [\n        \"object dir(string directory[, resource context])\",\n        \"Directory class with properties, handle and class and methods read, rewind and close\"\n    ],\n    \"dirname\": [\n        \"string dirname(string path)\",\n        \"Returns the directory name component of the path\"\n    ],\n    \"disk_free_space\": [\n        \"float disk_free_space(string path)\",\n        \"Get free disk space for filesystem that path is on\"\n    ],\n    \"disk_total_space\": [\n        \"float disk_total_space(string path)\",\n        \"Get total disk space for filesystem that path is on\"\n    ],\n    \"display_disabled_function\": [\n        \"void display_disabled_function()\",\n        \"Dummy function which displays an error when a disabled function is called.\"\n    ],\n    \"dl\": [\n        \"int dl(string extension_filename)\",\n        \"Load a PHP extension at runtime\"\n    ],\n    \"dngettext\": [\n        \"string dngettext(string domain, string msgid1, string msgid2, int count)\",\n        \"Plural version of dgettext()\"\n    ],\n    \"dns_check_record\": [\n        \"bool dns_check_record(string host [, string type])\",\n        \"Check DNS records corresponding to a given Internet host name or IP address\"\n    ],\n    \"dns_get_mx\": [\n        \"bool dns_get_mx(string hostname, array mxhosts [, array weight])\",\n        \"Get MX records corresponding to a given Internet host name\"\n    ],\n    \"dns_get_record\": [\n        \"array|false dns_get_record(string hostname [, int type[, array authns, array addtl]])\",\n        \"Get any Resource Record corresponding to a given Internet host name\"\n    ],\n    \"dom_attr_is_id\": [\n        \"bool dom_attr_is_id()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-isId Since: DOM Level 3\"\n    ],\n    \"dom_characterdata_append_data\": [\n        \"void dom_characterdata_append_data(string arg)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-32791A2F Since:\"\n    ],\n    \"dom_characterdata_delete_data\": [\n        \"void dom_characterdata_delete_data(int offset, int count)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7C603781 Since:\"\n    ],\n    \"dom_characterdata_insert_data\": [\n        \"void dom_characterdata_insert_data(int offset, string arg)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3EDB695F Since:\"\n    ],\n    \"dom_characterdata_replace_data\": [\n        \"void dom_characterdata_replace_data(int offset, int count, string arg)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-E5CBA7FB Since:\"\n    ],\n    \"dom_characterdata_substring_data\": [\n        \"string dom_characterdata_substring_data(int offset, int count)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6531BCCF Since:\"\n    ],\n    \"dom_document_adopt_node\": [\n        \"DOMNode dom_document_adopt_node(DOMNode source)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-adoptNode Since: DOM Level 3\"\n    ],\n    \"dom_document_create_attribute\": [\n        \"DOMAttr dom_document_create_attribute(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1084891198 Since:\"\n    ],\n    \"dom_document_create_attribute_ns\": [\n        \"DOMAttr dom_document_create_attribute_ns(string namespaceURI, string qualifiedName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_document_create_cdatasection\": [\n        \"DOMCdataSection dom_document_create_cdatasection(string data)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D26C0AF8 Since:\"\n    ],\n    \"dom_document_create_comment\": [\n        \"DOMComment dom_document_create_comment(string data)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1334481328 Since:\"\n    ],\n    \"dom_document_create_document_fragment\": [\n        \"DOMDocumentFragment dom_document_create_document_fragment()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-35CB04B5 Since:\"\n    ],\n    \"dom_document_create_element\": [\n        \"DOMElement dom_document_create_element(string tagName [, string value])\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-2141741547 Since:\"\n    ],\n    \"dom_document_create_element_ns\": [\n        \"DOMElement dom_document_create_element_ns(string namespaceURI, string qualifiedName [,string value])\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrElNS Since: DOM Level 2\"\n    ],\n    \"dom_document_create_entity_reference\": [\n        \"DOMEntityReference dom_document_create_entity_reference(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-392B75AE Since:\"\n    ],\n    \"dom_document_create_processing_instruction\": [\n        \"DOMProcessingInstruction dom_document_create_processing_instruction(string target, string data)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-135944439 Since:\"\n    ],\n    \"dom_document_create_text_node\": [\n        \"DOMText dom_document_create_text_node(string data)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1975348127 Since:\"\n    ],\n    \"dom_document_get_element_by_id\": [\n        \"DOMElement dom_document_get_element_by_id(string elementId)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBId Since: DOM Level 2\"\n    ],\n    \"dom_document_get_elements_by_tag_name\": [\n        \"DOMNodeList dom_document_get_elements_by_tag_name(string tagname)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C9094 Since:\"\n    ],\n    \"dom_document_get_elements_by_tag_name_ns\": [\n        \"DOMNodeList dom_document_get_elements_by_tag_name_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBTNNS Since: DOM Level 2\"\n    ],\n    \"dom_document_import_node\": [\n        \"DOMNode dom_document_import_node(DOMNode importedNode, bool deep)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Core-Document-importNode Since: DOM Level 2\"\n    ],\n    \"dom_document_load\": [\n        \"DOMNode dom_document_load(string source [, int options])\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-load Since: DOM Level 3\"\n    ],\n    \"dom_document_load_html\": [\n        \"DOMNode dom_document_load_html(string source)\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_load_html_file\": [\n        \"DOMNode dom_document_load_html_file(string source)\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_loadxml\": [\n        \"DOMNode dom_document_loadxml(string source [, int options])\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-loadXML Since: DOM Level 3\"\n    ],\n    \"dom_document_normalize_document\": [\n        \"void dom_document_normalize_document()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-normalizeDocument Since: DOM Level 3\"\n    ],\n    \"dom_document_relaxNG_validate_file\": [\n        \"bool dom_document_relaxNG_validate_file(string filename); */\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file\"\n    ],\n    \"dom_document_relaxNG_validate_xml\": [\n        \"bool dom_document_relaxNG_validate_xml(string source); */\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml\"\n    ],\n    \"dom_document_rename_node\": [\n        \"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"\n    ],\n    \"dom_document_save\": [\n        \"int dom_document_save(string file)\",\n        \"Convenience method to save to file\"\n    ],\n    \"dom_document_save_html\": [\n        \"string dom_document_save_html()\",\n        \"Convenience method to output as html\"\n    ],\n    \"dom_document_save_html_file\": [\n        \"int dom_document_save_html_file(string file)\",\n        \"Convenience method to save to file as html\"\n    ],\n    \"dom_document_savexml\": [\n        \"string dom_document_savexml([node n])\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"\n    ],\n    \"dom_document_schema_validate\": [\n        \"bool dom_document_schema_validate(string source); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate\"\n    ],\n    \"dom_document_schema_validate_file\": [\n        \"bool dom_document_schema_validate_file(string filename); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file\"\n    ],\n    \"dom_document_validate\": [\n        \"bool dom_document_validate()\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_xinclude\": [\n        \"int dom_document_xinclude([int options])\",\n        \"Substitutues xincludes in a DomDocument\"\n    ],\n    \"dom_domconfiguration_can_set_parameter\": [\n        \"bool dom_domconfiguration_can_set_parameter(string name, domuserdata value)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"\n    ],\n    \"dom_domconfiguration_get_parameter\": [\n        \"domdomuserdata dom_domconfiguration_get_parameter(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:\"\n    ],\n    \"dom_domconfiguration_set_parameter\": [\n        \"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:\"\n    ],\n    \"dom_domerrorhandler_handle_error\": [\n        \"dom_bool dom_domerrorhandler_handle_error(domerror error)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"\n    ],\n    \"dom_domimplementation_create_document\": [\n        \"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_create_document_type\": [\n        \"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_get_feature\": [\n        \"DOMNode dom_domimplementation_get_feature(string feature, string version)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_domimplementation_has_feature\": [\n        \"bool dom_domimplementation_has_feature(string feature, string version)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:\"\n    ],\n    \"dom_domimplementationlist_item\": [\n        \"domdomimplementation dom_domimplementationlist_item(int index)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementation\": [\n        \"domdomimplementation dom_domimplementationsource_get_domimplementation(string features)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementations\": [\n        \"domimplementationlist dom_domimplementationsource_get_domimplementations(string features)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:\"\n    ],\n    \"dom_domstringlist_item\": [\n        \"domstring dom_domstringlist_item(int index)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:\"\n    ],\n    \"dom_element_get_attribute\": [\n        \"string dom_element_get_attribute(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:\"\n    ],\n    \"dom_element_get_attribute_node\": [\n        \"DOMAttr dom_element_get_attribute_node(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:\"\n    ],\n    \"dom_element_get_attribute_node_ns\": [\n        \"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_attribute_ns\": [\n        \"string dom_element_get_attribute_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_elements_by_tag_name\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:\"\n    ],\n    \"dom_element_get_elements_by_tag_name_ns\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute\": [\n        \"bool dom_element_has_attribute(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute_ns\": [\n        \"bool dom_element_has_attribute_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_remove_attribute\": [\n        \"void dom_element_remove_attribute(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"\n    ],\n    \"dom_element_remove_attribute_node\": [\n        \"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:\"\n    ],\n    \"dom_element_remove_attribute_ns\": [\n        \"void dom_element_remove_attribute_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute\": [\n        \"void dom_element_set_attribute(string name, string value)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:\"\n    ],\n    \"dom_element_set_attribute_node\": [\n        \"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:\"\n    ],\n    \"dom_element_set_attribute_node_ns\": [\n        \"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute_ns\": [\n        \"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_id_attribute\": [\n        \"void dom_element_set_id_attribute(string name, bool isId)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_node\": [\n        \"void dom_element_set_id_attribute_node(attr idAttr, bool isId)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_ns\": [\n        \"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, bool isId)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"\n    ],\n    \"dom_import_simplexml\": [\n        \"somNode dom_import_simplexml(sxeobject node)\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"dom_namednodemap_get_named_item\": [\n        \"DOMNode dom_namednodemap_get_named_item(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:\"\n    ],\n    \"dom_namednodemap_get_named_item_ns\": [\n        \"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_item\": [\n        \"DOMNode dom_namednodemap_item(int index)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item\": [\n        \"DOMNode dom_namednodemap_remove_named_item(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item_ns\": [\n        \"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_set_named_item\": [\n        \"DOMNode dom_namednodemap_set_named_item(DOMNode arg)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:\"\n    ],\n    \"dom_namednodemap_set_named_item_ns\": [\n        \"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namelist_get_name\": [\n        \"string dom_namelist_get_name(int index)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:\"\n    ],\n    \"dom_namelist_get_namespace_uri\": [\n        \"string dom_namelist_get_namespace_uri(int index)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:\"\n    ],\n    \"dom_node_append_child\": [\n        \"DomNode dom_node_append_child(DomNode newChild)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:\"\n    ],\n    \"dom_node_clone_node\": [\n        \"DomNode dom_node_clone_node(bool deep)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"\n    ],\n    \"dom_node_compare_document_position\": [\n        \"short dom_node_compare_document_position(DomNode other)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"\n    ],\n    \"dom_node_get_feature\": [\n        \"DomNode dom_node_get_feature(string feature, string version)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_node_get_user_data\": [\n        \"mixed dom_node_get_user_data(string key)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"\n    ],\n    \"dom_node_has_attributes\": [\n        \"bool dom_node_has_attributes()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"\n    ],\n    \"dom_node_has_child_nodes\": [\n        \"bool dom_node_has_child_nodes()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:\"\n    ],\n    \"dom_node_insert_before\": [\n        \"domnode dom_node_insert_before(DomNode newChild, DomNode refChild)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:\"\n    ],\n    \"dom_node_is_default_namespace\": [\n        \"bool dom_node_is_default_namespace(string namespaceURI)\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"\n    ],\n    \"dom_node_is_equal_node\": [\n        \"bool dom_node_is_equal_node(DomNode arg)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_same_node\": [\n        \"bool dom_node_is_same_node(DomNode other)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_supported\": [\n        \"bool dom_node_is_supported(string feature, string version)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"\n    ],\n    \"dom_node_lookup_namespace_uri\": [\n        \"string dom_node_lookup_namespace_uri(string prefix)\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"\n    ],\n    \"dom_node_lookup_prefix\": [\n        \"string dom_node_lookup_prefix(string namespaceURI)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"\n    ],\n    \"dom_node_normalize\": [\n        \"void dom_node_normalize()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:\"\n    ],\n    \"dom_node_remove_child\": [\n        \"DomNode dom_node_remove_child(DomNode oldChild)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:\"\n    ],\n    \"dom_node_replace_child\": [\n        \"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:\"\n    ],\n    \"dom_node_set_user_data\": [\n        \"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"\n    ],\n    \"dom_nodelist_item\": [\n        \"DOMNode dom_nodelist_item(int index)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:\"\n    ],\n    \"dom_string_extend_find_offset16\": [\n        \"int dom_string_extend_find_offset16(int offset32)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"\n    ],\n    \"dom_string_extend_find_offset32\": [\n        \"int dom_string_extend_find_offset32(int offset16)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"\n    ],\n    \"dom_text_is_whitespace_in_element_content\": [\n        \"bool dom_text_is_whitespace_in_element_content()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"\n    ],\n    \"dom_text_replace_whole_text\": [\n        \"DOMText dom_text_replace_whole_text(string content)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"\n    ],\n    \"dom_text_split_text\": [\n        \"DOMText dom_text_split_text(int offset)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:\"\n    ],\n    \"dom_userdatahandler_handle\": [\n        \"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:\"\n    ],\n    \"dom_xpath_evaluate\": [\n        \"mixed dom_xpath_evaluate(string expr [,DOMNode context])\",\n        \"\"\n    ],\n    \"dom_xpath_query\": [\n        \"DOMNodeList dom_xpath_query(string expr [,DOMNode context])\",\n        \"\"\n    ],\n    \"dom_xpath_register_ns\": [\n        \"bool dom_xpath_register_ns(string prefix, string uri)\",\n        \"\"\n    ],\n    \"dom_xpath_register_php_functions\": [\n        \"void dom_xpath_register_php_functions()\",\n        \"\"\n    ],\n    \"each\": [\n        \"array each(array arr)\",\n        \"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"\n    ],\n    \"easter_date\": [\n        \"int easter_date([int year])\",\n        \"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"\n    ],\n    \"easter_days\": [\n        \"int easter_days([int year, [int method]])\",\n        \"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"\n    ],\n    \"echo\": [\n        \"void echo(string arg1 [, string ...])\",\n        \"Output one or more strings\"\n    ],\n    \"empty\": [\n        \"bool empty(mixed var)\",\n        \"Determine whether a variable is empty\"\n    ],\n    \"enchant_broker_describe\": [\n        \"array enchant_broker_describe(resource broker)\",\n        \"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"\n    ],\n    \"enchant_broker_dict_exists\": [\n        \"bool enchant_broker_dict_exists(resource broker, string tag)\",\n        \"Whether a dictionary exists or not. Using non-empty tag\"\n    ],\n    \"enchant_broker_free\": [\n        \"bool enchant_broker_free(resource broker)\",\n        \"Destroys the broker object and its dictionnaries\"\n    ],\n    \"enchant_broker_free_dict\": [\n        \"resource enchant_broker_free_dict(resource dict)\",\n        \"Free the dictionary resource\"\n    ],\n    \"enchant_broker_get_dict_path\": [\n        \"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\n        \"Get the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_get_error\": [\n        \"string enchant_broker_get_error(resource broker)\",\n        \"Returns the last error of the broker\"\n    ],\n    \"enchant_broker_init\": [\n        \"resource enchant_broker_init()\",\n        \"create a new broker object capable of requesting\"\n    ],\n    \"enchant_broker_list_dicts\": [\n        \"string enchant_broker_list_dicts(resource broker)\",\n        \"Lists the dictionaries available for the given broker\"\n    ],\n    \"enchant_broker_request_dict\": [\n        \"resource enchant_broker_request_dict(resource broker, string tag)\",\n        \"create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\\\"en_US\\\", \\\"de_DE\\\", ...)\"\n    ],\n    \"enchant_broker_request_pwl_dict\": [\n        \"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\n        \"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"\n    ],\n    \"enchant_broker_set_dict_path\": [\n        \"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\n        \"Set the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_set_ordering\": [\n        \"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\n        \"Declares a preference of dictionaries to use for the language  described/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"\n    ],\n    \"enchant_dict_add_to_personal\": [\n        \"void enchant_dict_add_to_personal(resource dict, string word)\",\n        \"add 'word' to personal word list\"\n    ],\n    \"enchant_dict_add_to_session\": [\n        \"void enchant_dict_add_to_session(resource dict, string word)\",\n        \"add 'word' to this spell-checking session\"\n    ],\n    \"enchant_dict_check\": [\n        \"bool enchant_dict_check(resource dict, string word)\",\n        \"If the word is correctly spelled return true, otherwise return false\"\n    ],\n    \"enchant_dict_describe\": [\n        \"array enchant_dict_describe(resource dict)\",\n        \"Describes an individual dictionary 'dict'\"\n    ],\n    \"enchant_dict_get_error\": [\n        \"string enchant_dict_get_error(resource dict)\",\n        \"Returns the last error of the current spelling-session\"\n    ],\n    \"enchant_dict_is_in_session\": [\n        \"bool enchant_dict_is_in_session(resource dict, string word)\",\n        \"whether or not 'word' exists in this spelling-session\"\n    ],\n    \"enchant_dict_quick_check\": [\n        \"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\n        \"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"\n    ],\n    \"enchant_dict_store_replacement\": [\n        \"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\n        \"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"\n    ],\n    \"enchant_dict_suggest\": [\n        \"array enchant_dict_suggest(resource dict, string word)\",\n        \"Will return a list of values if any of those pre-conditions are not met.\"\n    ],\n    \"end\": [\n        \"mixed end(array array_arg)\",\n        \"Advances array argument's internal pointer to the last element and return it\"\n    ],\n    \"ereg\": [\n        \"int ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match\"\n    ],\n    \"ereg_replace\": [\n        \"string ereg_replace(string pattern, string replacement, string string)\",\n        \"Replace regular expression\"\n    ],\n    \"eregi\": [\n        \"int eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match\"\n    ],\n    \"eregi_replace\": [\n        \"string eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression\"\n    ],\n    \"error_get_last\": [\n        \"array error_get_last()\",\n        \"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"\n    ],\n    \"error_log\": [\n        \"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\n        \"Send an error message somewhere\"\n    ],\n    \"error_reporting\": [\n        \"int error_reporting([int new_error_level])\",\n        \"Return the current error_reporting level, and if an argument was passed - change to the new level\"\n    ],\n    \"escapeshellarg\": [\n        \"string escapeshellarg(string arg)\",\n        \"Quote and escape an argument for use in a shell command\"\n    ],\n    \"escapeshellcmd\": [\n        \"string escapeshellcmd(string command)\",\n        \"Escape shell metacharacters\"\n    ],\n    \"exec\": [\n        \"string exec(string command [, array &output [, int &return_value]])\",\n        \"Execute an external program\"\n    ],\n    \"exif_imagetype\": [\n        \"int exif_imagetype(string imagefile)\",\n        \"Get the type of an image\"\n    ],\n    \"exif_read_data\": [\n        \"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\n        \"Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails\"\n    ],\n    \"exif_tagname\": [\n        \"string exif_tagname(index)\",\n        \"Get headername for index or false if not defined\"\n    ],\n    \"exif_thumbnail\": [\n        \"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\n        \"Reads the embedded thumbnail\"\n    ],\n    \"exit\": [\n        \"void exit([mixed status])\",\n        \"Output a message and terminate the current script\"\n    ],\n    \"exp\": [\n        \"float exp(float number)\",\n        \"Returns e raised to the power of the number\"\n    ],\n    \"explode\": [\n        \"array explode(string separator, string str [, int limit])\",\n        \"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"\n    ],\n    \"expm1\": [\n        \"float expm1(float number)\",\n        \"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"extension_loaded\": [\n        \"bool extension_loaded(string extension_name)\",\n        \"Returns true if the named extension is loaded\"\n    ],\n    \"extract\": [\n        \"int extract(array var_array [, int extract_type [, string prefix]])\",\n        \"Imports variables into symbol table from an array\"\n    ],\n    \"ezmlm_hash\": [\n        \"int ezmlm_hash(string addr)\",\n        \"Calculate EZMLM list hash value.\"\n    ],\n    \"fclose\": [\n        \"bool fclose(resource fp)\",\n        \"Close an open file pointer\"\n    ],\n    \"feof\": [\n        \"bool feof(resource fp)\",\n        \"Test for end-of-file on a file pointer\"\n    ],\n    \"fflush\": [\n        \"bool fflush(resource fp)\",\n        \"Flushes output\"\n    ],\n    \"fgetc\": [\n        \"string fgetc(resource fp)\",\n        \"Get a character from file pointer\"\n    ],\n    \"fgetcsv\": [\n        \"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\n        \"Get line from file pointer and parse for CSV fields\"\n    ],\n    \"fgets\": [\n        \"string fgets(resource fp[, int length])\",\n        \"Get a line from file pointer\"\n    ],\n    \"fgetss\": [\n        \"string fgetss(resource fp [, int length [, string allowable_tags]])\",\n        \"Get a line from file pointer and strip HTML tags\"\n    ],\n    \"file\": [\n        \"array file(string filename [, int flags[, resource context]])\",\n        \"Read entire file into an array\"\n    ],\n    \"file_exists\": [\n        \"bool file_exists(string filename)\",\n        \"Returns true if filename exists\"\n    ],\n    \"file_get_contents\": [\n        \"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\n        \"Read the entire file into a string\"\n    ],\n    \"file_put_contents\": [\n        \"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\n        \"Write/Create a file with contents data and return the number of bytes written\"\n    ],\n    \"fileatime\": [\n        \"int fileatime(string filename)\",\n        \"Get last access time of file\"\n    ],\n    \"filectime\": [\n        \"int filectime(string filename)\",\n        \"Get inode modification time of file\"\n    ],\n    \"filegroup\": [\n        \"int filegroup(string filename)\",\n        \"Get file group\"\n    ],\n    \"fileinode\": [\n        \"int fileinode(string filename)\",\n        \"Get file inode\"\n    ],\n    \"filemtime\": [\n        \"int filemtime(string filename)\",\n        \"Get last modification time of file\"\n    ],\n    \"fileowner\": [\n        \"int fileowner(string filename)\",\n        \"Get file owner\"\n    ],\n    \"fileperms\": [\n        \"int fileperms(string filename)\",\n        \"Get file permissions\"\n    ],\n    \"filesize\": [\n        \"int filesize(string filename)\",\n        \"Get file size\"\n    ],\n    \"filetype\": [\n        \"string filetype(string filename)\",\n        \"Get file type\"\n    ],\n    \"filter_has_var\": [\n        \"mixed filter_has_var(constant type, string variable_name)\",\n        \"* Returns true if the variable with the name 'name' exists in source.\"\n    ],\n    \"filter_input\": [\n        \"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\n        \"* Returns the filtered variable 'name'* from source `type`.\"\n    ],\n    \"filter_input_array\": [\n        \"mixed filter_input_array(constant type, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"filter_var\": [\n        \"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\n        \"* Returns the filtered version of the vriable.\"\n    ],\n    \"filter_var_array\": [\n        \"mixed filter_var_array(array data, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"finfo_buffer\": [\n        \"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\n        \"Return infromation about a string buffer.\"\n    ],\n    \"finfo_close\": [\n        \"resource finfo_close(resource finfo)\",\n        \"Close fileinfo resource.\"\n    ],\n    \"finfo_file\": [\n        \"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\n        \"Return information about a file.\"\n    ],\n    \"finfo_open\": [\n        \"resource finfo_open([int options [, string arg]])\",\n        \"Create a new fileinfo resource.\"\n    ],\n    \"finfo_set_flags\": [\n        \"bool finfo_set_flags(resource finfo, int options)\",\n        \"Set libmagic configuration options.\"\n    ],\n    \"floatval\": [\n        \"float floatval(mixed var)\",\n        \"Get the float value of a variable\"\n    ],\n    \"flock\": [\n        \"bool flock(resource fp, int operation [, int &wouldblock])\",\n        \"Portable file locking\"\n    ],\n    \"floor\": [\n        \"float floor(float number)\",\n        \"Returns the next lowest integer value from the number\"\n    ],\n    \"flush\": [\n        \"void flush()\",\n        \"Flush the output buffer\"\n    ],\n    \"fmod\": [\n        \"float fmod(float x, float y)\",\n        \"Returns the remainder of dividing x by y as a float\"\n    ],\n    \"fnmatch\": [\n        \"bool fnmatch(string pattern, string filename [, int flags])\",\n        \"Match filename against pattern\"\n    ],\n    \"fopen\": [\n        \"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\n        \"Open a file or a URL and return a file pointer\"\n    ],\n    \"forward_static_call\": [\n        \"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"fpassthru\": [\n        \"int fpassthru(resource fp)\",\n        \"Output all remaining data from a file pointer\"\n    ],\n    \"fprintf\": [\n        \"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"fputcsv\": [\n        \"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\n        \"Format line as CSV and write to file pointer\"\n    ],\n    \"fread\": [\n        \"string fread(resource fp, int length)\",\n        \"Binary-safe file read\"\n    ],\n    \"frenchtojd\": [\n        \"int frenchtojd(int month, int day, int year)\",\n        \"Converts a french republic calendar date to julian day count\"\n    ],\n    \"fscanf\": [\n        \"mixed fscanf(resource stream, string format [, string ...])\",\n        \"Implements a mostly ANSI compatible fscanf()\"\n    ],\n    \"fseek\": [\n        \"int fseek(resource fp, int offset [, int whence])\",\n        \"Seek on a file pointer\"\n    ],\n    \"fsockopen\": [\n        \"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open Internet or Unix domain socket connection\"\n    ],\n    \"fstat\": [\n        \"array fstat(resource fp)\",\n        \"Stat() on a filehandle\"\n    ],\n    \"ftell\": [\n        \"int ftell(resource fp)\",\n        \"Get file pointer's read/write position\"\n    ],\n    \"ftok\": [\n        \"int ftok(string pathname, string proj)\",\n        \"Convert a pathname and a project identifier to a System V IPC key\"\n    ],\n    \"ftp_alloc\": [\n        \"bool ftp_alloc(resource stream, int size[, &response])\",\n        \"Attempt to allocate space on the remote FTP server\"\n    ],\n    \"ftp_cdup\": [\n        \"bool ftp_cdup(resource stream)\",\n        \"Changes to the parent directory\"\n    ],\n    \"ftp_chdir\": [\n        \"bool ftp_chdir(resource stream, string directory)\",\n        \"Changes directories\"\n    ],\n    \"ftp_chmod\": [\n        \"int ftp_chmod(resource stream, int mode, string filename)\",\n        \"Sets permissions on a file\"\n    ],\n    \"ftp_close\": [\n        \"bool ftp_close(resource stream)\",\n        \"Closes the FTP stream\"\n    ],\n    \"ftp_connect\": [\n        \"resource ftp_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP stream\"\n    ],\n    \"ftp_delete\": [\n        \"bool ftp_delete(resource stream, string file)\",\n        \"Deletes a file\"\n    ],\n    \"ftp_exec\": [\n        \"bool ftp_exec(resource stream, string command)\",\n        \"Requests execution of a program on the FTP server\"\n    ],\n    \"ftp_fget\": [\n        \"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server and writes it to an open file\"\n    ],\n    \"ftp_fput\": [\n        \"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server\"\n    ],\n    \"ftp_get\": [\n        \"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server and writes it to a local file\"\n    ],\n    \"ftp_get_option\": [\n        \"mixed ftp_get_option(resource stream, int option)\",\n        \"Gets an FTP option\"\n    ],\n    \"ftp_login\": [\n        \"bool ftp_login(resource stream, string username, string password)\",\n        \"Logs into the FTP server\"\n    ],\n    \"ftp_mdtm\": [\n        \"int ftp_mdtm(resource stream, string filename)\",\n        \"Returns the last modification time of the file, or -1 on error\"\n    ],\n    \"ftp_mkdir\": [\n        \"string ftp_mkdir(resource stream, string directory)\",\n        \"Creates a directory and returns the absolute path for the new directory or false on error\"\n    ],\n    \"ftp_nb_continue\": [\n        \"int ftp_nb_continue(resource stream)\",\n        \"Continues retrieving/sending a file nbronously\"\n    ],\n    \"ftp_nb_fget\": [\n        \"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server asynchronly and writes it to an open file\"\n    ],\n    \"ftp_nb_fput\": [\n        \"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server nbronly\"\n    ],\n    \"ftp_nb_get\": [\n        \"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server nbhronly and writes it to a local file\"\n    ],\n    \"ftp_nb_put\": [\n        \"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_nlist\": [\n        \"array ftp_nlist(resource stream, string directory)\",\n        \"Returns an array of filenames in the given directory\"\n    ],\n    \"ftp_pasv\": [\n        \"bool ftp_pasv(resource stream, bool pasv)\",\n        \"Turns passive mode on or off\"\n    ],\n    \"ftp_put\": [\n        \"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_pwd\": [\n        \"string ftp_pwd(resource stream)\",\n        \"Returns the present working directory\"\n    ],\n    \"ftp_raw\": [\n        \"array ftp_raw(resource stream, string command)\",\n        \"Sends a literal command to the FTP server\"\n    ],\n    \"ftp_rawlist\": [\n        \"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\n        \"Returns a detailed listing of a directory as an array of output lines\"\n    ],\n    \"ftp_rename\": [\n        \"bool ftp_rename(resource stream, string src, string dest)\",\n        \"Renames the given file to a new path\"\n    ],\n    \"ftp_rmdir\": [\n        \"bool ftp_rmdir(resource stream, string directory)\",\n        \"Removes a directory\"\n    ],\n    \"ftp_set_option\": [\n        \"bool ftp_set_option(resource stream, int option, mixed value)\",\n        \"Sets an FTP option\"\n    ],\n    \"ftp_site\": [\n        \"bool ftp_site(resource stream, string cmd)\",\n        \"Sends a SITE command to the server\"\n    ],\n    \"ftp_size\": [\n        \"int ftp_size(resource stream, string filename)\",\n        \"Returns the size of the file, or -1 on error\"\n    ],\n    \"ftp_ssl_connect\": [\n        \"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP-SSL stream\"\n    ],\n    \"ftp_systype\": [\n        \"string ftp_systype(resource stream)\",\n        \"Returns the system type identifier\"\n    ],\n    \"ftruncate\": [\n        \"bool ftruncate(resource fp, int size)\",\n        \"Truncate file to 'size' length\"\n    ],\n    \"func_get_arg\": [\n        \"mixed func_get_arg(int arg_num)\",\n        \"Get the $arg_num'th argument that was passed to the function\"\n    ],\n    \"func_get_args\": [\n        \"array func_get_args()\",\n        \"Get an array of the arguments that were passed to the function\"\n    ],\n    \"func_num_args\": [\n        \"int func_num_args()\",\n        \"Get the number of arguments that were passed to the function\"\n    ],\n    \"function \": [\"\", \"\"],\n    \"foreach \": [\"\", \"\"],\n    \"function_exists\": [\n        \"bool function_exists(string function_name)\",\n        \"Checks if the function exists\"\n    ],\n    \"fwrite\": [\n        \"int fwrite(resource fp, string str [, int length])\",\n        \"Binary-safe file write\"\n    ],\n    \"gc_collect_cycles\": [\n        \"int gc_collect_cycles()\",\n        \"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"\n    ],\n    \"gc_disable\": [\n        \"void gc_disable()\",\n        \"Deactivates the circular reference collector\"\n    ],\n    \"gc_enable\": [\n        \"void gc_enable()\",\n        \"Activates the circular reference collector\"\n    ],\n    \"gc_enabled\": [\n        \"void gc_enabled()\",\n        \"Returns status of the circular reference collector\"\n    ],\n    \"gd_info\": [\n        \"array gd_info()\",\n        \"\"\n    ],\n    \"getKeywords\": [\n        \"static array getKeywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array  * }}}\"\n    ],\n    \"get_browser\": [\n        \"mixed get_browser([string browser_name [, bool return_array]])\",\n        \"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"\n    ],\n    \"get_called_class\": [\n        \"string get_called_class()\",\n        \"Retrieves the \\\"Late Static Binding\\\" class name\"\n    ],\n    \"get_cfg_var\": [\n        \"mixed get_cfg_var(string option_name)\",\n        \"Get the value of a PHP configuration option\"\n    ],\n    \"get_class\": [\n        \"string get_class([object object])\",\n        \"Retrieves the class name\"\n    ],\n    \"get_class_methods\": [\n        \"array get_class_methods(mixed class)\",\n        \"Returns an array of method names for class or class instance.\"\n    ],\n    \"get_class_vars\": [\n        \"array get_class_vars(string class_name)\",\n        \"Returns an array of default properties of the class.\"\n    ],\n    \"get_current_user\": [\n        \"string get_current_user()\",\n        \"Get the name of the owner of the current PHP script\"\n    ],\n    \"get_declared_classes\": [\n        \"array get_declared_classes()\",\n        \"Returns an array of all declared classes.\"\n    ],\n    \"get_declared_interfaces\": [\n        \"array get_declared_interfaces()\",\n        \"Returns an array of all declared interfaces.\"\n    ],\n    \"get_defined_constants\": [\n        \"array get_defined_constants([bool categorize])\",\n        \"Return an array containing the names and values of all defined constants\"\n    ],\n    \"get_defined_functions\": [\n        \"array get_defined_functions()\",\n        \"Returns an array of all defined functions\"\n    ],\n    \"get_defined_vars\": [\n        \"array get_defined_vars()\",\n        \"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"\n    ],\n    \"get_display_language\": [\n        \"static string get_display_language($locale[, $in_locale = null])\",\n        \"* gets the language for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_name\": [\n        \"static string get_display_name($locale[, $in_locale = null])\",\n        \"* gets the name for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_region\": [\n        \"static string get_display_region($locale, $in_locale = null)\",\n        \"* gets the region for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_script\": [\n        \"static string get_display_script($locale, $in_locale = null)\",\n        \"* gets the script for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_extension_funcs\": [\n        \"array get_extension_funcs(string extension_name)\",\n        \"Returns an array with the names of functions belonging to the named extension\"\n    ],\n    \"get_headers\": [\n        \"array get_headers(string url[, int format])\",\n        \"fetches all the headers sent by the server in response to a HTTP request\"\n    ],\n    \"get_html_translation_table\": [\n        \"array get_html_translation_table([int table [, int quote_style]])\",\n        \"Returns the internal translation table used by htmlspecialchars and htmlentities\"\n    ],\n    \"get_include_path\": [\n        \"string get_include_path()\",\n        \"Get the current include_path configuration option\"\n    ],\n    \"get_included_files\": [\n        \"array get_included_files()\",\n        \"Returns an array with the file names that were include_once()'d\"\n    ],\n    \"get_loaded_extensions\": [\n        \"array get_loaded_extensions([bool zend_extensions])\",\n        \"Return an array containing names of loaded extensions\"\n    ],\n    \"get_magic_quotes_gpc\": [\n        \"int get_magic_quotes_gpc()\",\n        \"Get the current active configuration setting of magic_quotes_gpc\"\n    ],\n    \"get_magic_quotes_runtime\": [\n        \"int get_magic_quotes_runtime()\",\n        \"Get the current active configuration setting of magic_quotes_runtime\"\n    ],\n    \"get_meta_tags\": [\n        \"array get_meta_tags(string filename [, bool use_include_path])\",\n        \"Extracts all meta tag content attributes from a file and returns an array\"\n    ],\n    \"get_object_vars\": [\n        \"array get_object_vars(object obj)\",\n        \"Returns an array of object properties\"\n    ],\n    \"get_parent_class\": [\n        \"string get_parent_class([mixed object])\",\n        \"Retrieves the parent class name for object or class or current scope.\"\n    ],\n    \"get_resource_type\": [\n        \"string get_resource_type(resource res)\",\n        \"Get the resource type name for a given resource\"\n    ],\n    \"getallheaders\": [\n        \"array getallheaders()\",\n        \"\"\n    ],\n    \"getcwd\": [\n        \"mixed getcwd()\",\n        \"Gets the current directory\"\n    ],\n    \"getdate\": [\n        \"array getdate([int timestamp])\",\n        \"Get date/time information\"\n    ],\n    \"getenv\": [\n        \"string getenv(string varname)\",\n        \"Get the value of an environment variable\"\n    ],\n    \"gethostbyaddr\": [\n        \"string gethostbyaddr(string ip_address)\",\n        \"Get the Internet host name corresponding to a given IP address\"\n    ],\n    \"gethostbyname\": [\n        \"string gethostbyname(string hostname)\",\n        \"Get the IP address corresponding to a given Internet host name\"\n    ],\n    \"gethostbynamel\": [\n        \"array gethostbynamel(string hostname)\",\n        \"Return a list of IP addresses that a given hostname resolves to.\"\n    ],\n    \"gethostname\": [\n        \"string gethostname()\",\n        \"Get the host name of the current machine\"\n    ],\n    \"getimagesize\": [\n        \"array getimagesize(string imagefile [, array info])\",\n        \"Get the size of an image as 4-element array\"\n    ],\n    \"getlastmod\": [\n        \"int getlastmod()\",\n        \"Get time of last page modification\"\n    ],\n    \"getmygid\": [\n        \"int getmygid()\",\n        \"Get PHP script owner's GID\"\n    ],\n    \"getmyinode\": [\n        \"int getmyinode()\",\n        \"Get the inode of the current script being parsed\"\n    ],\n    \"getmypid\": [\n        \"int getmypid()\",\n        \"Get current process ID\"\n    ],\n    \"getmyuid\": [\n        \"int getmyuid()\",\n        \"Get PHP script owner's UID\"\n    ],\n    \"getopt\": [\n        \"array getopt(string options [, array longopts])\",\n        \"Get options from the command line argument list\"\n    ],\n    \"getprotobyname\": [\n        \"int getprotobyname(string name)\",\n        \"Returns protocol number associated with name as per /etc/protocols\"\n    ],\n    \"getprotobynumber\": [\n        \"string getprotobynumber(int proto)\",\n        \"Returns protocol name associated with protocol number proto\"\n    ],\n    \"getrandmax\": [\n        \"int getrandmax()\",\n        \"Returns the maximum value a random number can have\"\n    ],\n    \"getrusage\": [\n        \"array getrusage([int who])\",\n        \"Returns an array of usage statistics\"\n    ],\n    \"getservbyname\": [\n        \"int getservbyname(string service, string protocol)\",\n        \"Returns port associated with service. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"getservbyport\": [\n        \"string getservbyport(int port, string protocol)\",\n        \"Returns service name associated with port. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"gettext\": [\n        \"string gettext(string msgid)\",\n        \"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"\n    ],\n    \"gettimeofday\": [\n        \"array gettimeofday([bool get_as_float])\",\n        \"Returns the current time as array\"\n    ],\n    \"gettype\": [\n        \"string gettype(mixed var)\",\n        \"Returns the type of the variable\"\n    ],\n    \"glob\": [\n        \"array glob(string pattern [, int flags])\",\n        \"Find pathnames matching a pattern\"\n    ],\n    \"gmdate\": [\n        \"string gmdate(string format [, long timestamp])\",\n        \"Format a GMT date/time\"\n    ],\n    \"gmmktime\": [\n        \"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a GMT date\"\n    ],\n    \"gmp_abs\": [\n        \"resource gmp_abs(resource a)\",\n        \"Calculates absolute value\"\n    ],\n    \"gmp_add\": [\n        \"resource gmp_add(resource a, resource b)\",\n        \"Add a and b\"\n    ],\n    \"gmp_and\": [\n        \"resource gmp_and(resource a, resource b)\",\n        \"Calculates logical AND of a and b\"\n    ],\n    \"gmp_clrbit\": [\n        \"void gmp_clrbit(resource &a, int index)\",\n        \"Clears bit in a\"\n    ],\n    \"gmp_cmp\": [\n        \"int gmp_cmp(resource a, resource b)\",\n        \"Compares two numbers\"\n    ],\n    \"gmp_com\": [\n        \"resource gmp_com(resource a)\",\n        \"Calculates one's complement of a\"\n    ],\n    \"gmp_div_q\": [\n        \"resource gmp_div_q(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient only\"\n    ],\n    \"gmp_div_qr\": [\n        \"array gmp_div_qr(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient and reminder\"\n    ],\n    \"gmp_div_r\": [\n        \"resource gmp_div_r(resource a, resource b [, int round])\",\n        \"Divide a by b, returns reminder only\"\n    ],\n    \"gmp_divexact\": [\n        \"resource gmp_divexact(resource a, resource b)\",\n        \"Divide a by b using exact division algorithm\"\n    ],\n    \"gmp_fact\": [\n        \"resource gmp_fact(int a)\",\n        \"Calculates factorial function\"\n    ],\n    \"gmp_gcd\": [\n        \"resource gmp_gcd(resource a, resource b)\",\n        \"Computes greatest common denominator (gcd) of a and b\"\n    ],\n    \"gmp_gcdext\": [\n        \"array gmp_gcdext(resource a, resource b)\",\n        \"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"\n    ],\n    \"gmp_hamdist\": [\n        \"int gmp_hamdist(resource a, resource b)\",\n        \"Calculates hamming distance between a and b\"\n    ],\n    \"gmp_init\": [\n        \"resource gmp_init(mixed number [, int base])\",\n        \"Initializes GMP number\"\n    ],\n    \"gmp_intval\": [\n        \"int gmp_intval(resource gmpnumber)\",\n        \"Gets signed long value of GMP number\"\n    ],\n    \"gmp_invert\": [\n        \"resource gmp_invert(resource a, resource b)\",\n        \"Computes the inverse of a modulo b\"\n    ],\n    \"gmp_jacobi\": [\n        \"int gmp_jacobi(resource a, resource b)\",\n        \"Computes Jacobi symbol\"\n    ],\n    \"gmp_legendre\": [\n        \"int gmp_legendre(resource a, resource b)\",\n        \"Computes Legendre symbol\"\n    ],\n    \"gmp_mod\": [\n        \"resource gmp_mod(resource a, resource b)\",\n        \"Computes a modulo b\"\n    ],\n    \"gmp_mul\": [\n        \"resource gmp_mul(resource a, resource b)\",\n        \"Multiply a and b\"\n    ],\n    \"gmp_neg\": [\n        \"resource gmp_neg(resource a)\",\n        \"Negates a number\"\n    ],\n    \"gmp_nextprime\": [\n        \"resource gmp_nextprime(resource a)\",\n        \"Finds next prime of a\"\n    ],\n    \"gmp_or\": [\n        \"resource gmp_or(resource a, resource b)\",\n        \"Calculates logical OR of a and b\"\n    ],\n    \"gmp_perfect_square\": [\n        \"bool gmp_perfect_square(resource a)\",\n        \"Checks if a is an exact square\"\n    ],\n    \"gmp_popcount\": [\n        \"int gmp_popcount(resource a)\",\n        \"Calculates the population count of a\"\n    ],\n    \"gmp_pow\": [\n        \"resource gmp_pow(resource base, int exp)\",\n        \"Raise base to power exp\"\n    ],\n    \"gmp_powm\": [\n        \"resource gmp_powm(resource base, resource exp, resource mod)\",\n        \"Raise base to power exp and take result modulo mod\"\n    ],\n    \"gmp_prob_prime\": [\n        \"int gmp_prob_prime(resource a[, int reps])\",\n        \"Checks if a is \\\"probably prime\\\"\"\n    ],\n    \"gmp_random\": [\n        \"resource gmp_random([int limiter])\",\n        \"Gets random number\"\n    ],\n    \"gmp_scan0\": [\n        \"int gmp_scan0(resource a, int start)\",\n        \"Finds first zero bit\"\n    ],\n    \"gmp_scan1\": [\n        \"int gmp_scan1(resource a, int start)\",\n        \"Finds first non-zero bit\"\n    ],\n    \"gmp_setbit\": [\n        \"void gmp_setbit(resource &a, int index[, bool set_clear])\",\n        \"Sets or clear bit in a\"\n    ],\n    \"gmp_sign\": [\n        \"int gmp_sign(resource a)\",\n        \"Gets the sign of the number\"\n    ],\n    \"gmp_sqrt\": [\n        \"resource gmp_sqrt(resource a)\",\n        \"Takes integer part of square root of a\"\n    ],\n    \"gmp_sqrtrem\": [\n        \"array gmp_sqrtrem(resource a)\",\n        \"Square root with remainder\"\n    ],\n    \"gmp_strval\": [\n        \"string gmp_strval(resource gmpnumber [, int base])\",\n        \"Gets string representation of GMP number\"\n    ],\n    \"gmp_sub\": [\n        \"resource gmp_sub(resource a, resource b)\",\n        \"Subtract b from a\"\n    ],\n    \"gmp_testbit\": [\n        \"bool gmp_testbit(resource a, int index)\",\n        \"Tests if bit is set in a\"\n    ],\n    \"gmp_xor\": [\n        \"resource gmp_xor(resource a, resource b)\",\n        \"Calculates logical exclusive OR of a and b\"\n    ],\n    \"gmstrftime\": [\n        \"string gmstrftime(string format [, int timestamp])\",\n        \"Format a GMT/UCT time/date according to locale settings\"\n    ],\n    \"grapheme_extract\": [\n        \"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\n        \"Function to extract a sequence of default grapheme clusters\"\n    ],\n    \"grapheme_stripos\": [\n        \"int grapheme_stripos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another, ignoring case differences\"\n    ],\n    \"grapheme_stristr\": [\n        \"string grapheme_stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_strlen\": [\n        \"int grapheme_strlen(string str)\",\n        \"Get number of graphemes in a string\"\n    ],\n    \"grapheme_strpos\": [\n        \"int grapheme_strpos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"grapheme_strripos\": [\n        \"int grapheme_strripos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another, ignoring case\"\n    ],\n    \"grapheme_strrpos\": [\n        \"int grapheme_strrpos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"grapheme_strstr\": [\n        \"string grapheme_strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_substr\": [\n        \"string grapheme_substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"gregoriantojd\": [\n        \"int gregoriantojd(int month, int day, int year)\",\n        \"Converts a gregorian calendar date to julian day count\"\n    ],\n    \"gzcompress\": [\n        \"string gzcompress(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzdeflate\": [\n        \"string gzdeflate(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzencode\": [\n        \"string gzencode(string data [, int level [, int encoding_mode]])\",\n        \"GZ encode a string\"\n    ],\n    \"gzfile\": [\n        \"array gzfile(string filename [, int use_include_path])\",\n        \"Read und uncompress entire .gz-file into an array\"\n    ],\n    \"gzinflate\": [\n        \"string gzinflate(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"gzopen\": [\n        \"resource gzopen(string filename, string mode [, int use_include_path])\",\n        \"Open a .gz-file and return a .gz-file pointer\"\n    ],\n    \"gzuncompress\": [\n        \"string gzuncompress(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"hash\": [\n        \"string hash(string algo, string data[, bool raw_output = false])\",\n        \"Generate a hash of a given input string Returns lowercase hexits by default\"\n    ],\n    \"hash_algos\": [\n        \"array hash_algos()\",\n        \"Return a list of registered hashing algorithms\"\n    ],\n    \"hash_copy\": [\n        \"resource hash_copy(resource context)\",\n        \"Copy hash resource\"\n    ],\n    \"hash_file\": [\n        \"string hash_file(string algo, string filename[, bool raw_output = false])\",\n        \"Generate a hash of a given file Returns lowercase hexits by default\"\n    ],\n    \"hash_final\": [\n        \"string hash_final(resource context[, bool raw_output=false])\",\n        \"Output resulting digest\"\n    ],\n    \"hash_hmac\": [\n        \"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_hmac_file\": [\n        \"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_init\": [\n        \"resource hash_init(string algo[, int options, string key])\",\n        \"Initialize a hashing context\"\n    ],\n    \"hash_update\": [\n        \"bool hash_update(resource context, string data)\",\n        \"Pump data into the hashing algorithm\"\n    ],\n    \"hash_update_file\": [\n        \"bool hash_update_file(resource context, string filename[, resource context])\",\n        \"Pump data into the hashing algorithm from a file\"\n    ],\n    \"hash_update_stream\": [\n        \"int hash_update_stream(resource context, resource handle[, integer length])\",\n        \"Pump data into the hashing algorithm from an open stream\"\n    ],\n    \"header\": [\n        \"void header(string header [, bool replace, [int http_response_code]])\",\n        \"Sends a raw HTTP header\"\n    ],\n    \"header_remove\": [\n        \"void header_remove([string name])\",\n        \"Removes an HTTP header previously set using header()\"\n    ],\n    \"headers_list\": [\n        \"array headers_list()\",\n        \"Return list of headers to be sent / already sent\"\n    ],\n    \"headers_sent\": [\n        \"bool headers_sent([string &$file [, int &$line]])\",\n        \"Returns true if headers have already been sent, false otherwise\"\n    ],\n    \"hebrev\": [\n        \"string hebrev(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text\"\n    ],\n    \"hebrevc\": [\n        \"string hebrevc(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text with newline conversion\"\n    ],\n    \"hexdec\": [\n        \"int hexdec(string hexadecimal_number)\",\n        \"Returns the decimal equivalent of the hexadecimal number\"\n    ],\n    \"highlight_file\": [\n        \"bool highlight_file(string file_name [, bool return] )\",\n        \"Syntax highlight a source file\"\n    ],\n    \"highlight_string\": [\n        \"bool highlight_string(string string [, bool return] )\",\n        \"Syntax highlight a string or optionally return it\"\n    ],\n    \"html_entity_decode\": [\n        \"string html_entity_decode(string string [, int quote_style][, string charset])\",\n        \"Convert all HTML entities to their applicable characters\"\n    ],\n    \"htmlentities\": [\n        \"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert all applicable characters to HTML entities\"\n    ],\n    \"htmlspecialchars\": [\n        \"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert special characters to HTML entities\"\n    ],\n    \"htmlspecialchars_decode\": [\n        \"string htmlspecialchars_decode(string string [, int quote_style])\",\n        \"Convert special HTML entities back to characters\"\n    ],\n    \"http_build_query\": [\n        \"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\n        \"Generates a form-encoded query string from an associative array or object.\"\n    ],\n    \"hypot\": [\n        \"float hypot(float num1, float num2)\",\n        \"Returns sqrt(num1*num1 + num2*num2)\"\n    ],\n    \"ibase_add_user\": [\n        \"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Add a user to security database\"\n    ],\n    \"ibase_affected_rows\": [\n        \"int ibase_affected_rows( [ resource link_identifier ] )\",\n        \"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"\n    ],\n    \"ibase_backup\": [\n        \"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\n        \"Initiates a backup task in the service manager and returns immediately\"\n    ],\n    \"ibase_blob_add\": [\n        \"bool ibase_blob_add(resource blob_handle, string data)\",\n        \"Add data into created blob\"\n    ],\n    \"ibase_blob_cancel\": [\n        \"bool ibase_blob_cancel(resource blob_handle)\",\n        \"Cancel creating blob\"\n    ],\n    \"ibase_blob_close\": [\n        \"string ibase_blob_close(resource blob_handle)\",\n        \"Close blob\"\n    ],\n    \"ibase_blob_create\": [\n        \"resource ibase_blob_create([resource link_identifier])\",\n        \"Create blob for adding data\"\n    ],\n    \"ibase_blob_echo\": [\n        \"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\n        \"Output blob contents to browser\"\n    ],\n    \"ibase_blob_get\": [\n        \"string ibase_blob_get(resource blob_handle, int len)\",\n        \"Get len bytes data from open blob\"\n    ],\n    \"ibase_blob_import\": [\n        \"string ibase_blob_import([ resource link_identifier, ] resource file)\",\n        \"Create blob, copy file in it, and close it\"\n    ],\n    \"ibase_blob_info\": [\n        \"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\n        \"Return blob length and other useful info\"\n    ],\n    \"ibase_blob_open\": [\n        \"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\n        \"Open blob for retrieving data parts\"\n    ],\n    \"ibase_close\": [\n        \"bool ibase_close([resource link_identifier])\",\n        \"Close an InterBase connection\"\n    ],\n    \"ibase_commit\": [\n        \"bool ibase_commit( resource link_identifier )\",\n        \"Commit transaction\"\n    ],\n    \"ibase_commit_ret\": [\n        \"bool ibase_commit_ret( resource link_identifier )\",\n        \"Commit transaction and retain the transaction context\"\n    ],\n    \"ibase_connect\": [\n        \"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a connection to an InterBase database\"\n    ],\n    \"ibase_db_info\": [\n        \"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\n        \"Request statistics about a database\"\n    ],\n    \"ibase_delete_user\": [\n        \"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Delete a user from security database\"\n    ],\n    \"ibase_drop_db\": [\n        \"bool ibase_drop_db([resource link_identifier])\",\n        \"Drop an InterBase database\"\n    ],\n    \"ibase_errcode\": [\n        \"int ibase_errcode()\",\n        \"Return error code\"\n    ],\n    \"ibase_errmsg\": [\n        \"string ibase_errmsg()\",\n        \"Return error message\"\n    ],\n    \"ibase_execute\": [\n        \"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a previously prepared query\"\n    ],\n    \"ibase_fetch_assoc\": [\n        \"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_fetch_object\": [\n        \"object ibase_fetch_object(resource result [, int fetch_flags])\",\n        \"Fetch a object from the results of a query\"\n    ],\n    \"ibase_fetch_row\": [\n        \"array ibase_fetch_row(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_field_info\": [\n        \"array ibase_field_info(resource query_result, int field_number)\",\n        \"Get information about a field\"\n    ],\n    \"ibase_free_event_handler\": [\n        \"bool ibase_free_event_handler(resource event)\",\n        \"Frees the event handler set by ibase_set_event_handler()\"\n    ],\n    \"ibase_free_query\": [\n        \"bool ibase_free_query(resource query)\",\n        \"Free memory used by a query\"\n    ],\n    \"ibase_free_result\": [\n        \"bool ibase_free_result(resource result)\",\n        \"Free the memory used by a result\"\n    ],\n    \"ibase_gen_id\": [\n        \"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\n        \"Increments the named generator and returns its new value\"\n    ],\n    \"ibase_maintain_db\": [\n        \"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\n        \"Execute a maintenance command on the database server\"\n    ],\n    \"ibase_modify_user\": [\n        \"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Modify a user in security database\"\n    ],\n    \"ibase_name_result\": [\n        \"bool ibase_name_result(resource result, string name)\",\n        \"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"\n    ],\n    \"ibase_num_fields\": [\n        \"int ibase_num_fields(resource query_result)\",\n        \"Get the number of fields in result\"\n    ],\n    \"ibase_num_params\": [\n        \"int ibase_num_params(resource query)\",\n        \"Get the number of params in a prepared query\"\n    ],\n    \"ibase_num_rows\": [\n        \"int ibase_num_rows( resource result_identifier )\",\n        \"Return the number of rows that are available in a result\"\n    ],\n    \"ibase_param_info\": [\n        \"array ibase_param_info(resource query, int field_number)\",\n        \"Get information about a parameter\"\n    ],\n    \"ibase_pconnect\": [\n        \"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a persistent connection to an InterBase database\"\n    ],\n    \"ibase_prepare\": [\n        \"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\n        \"Prepare a query for later execution\"\n    ],\n    \"ibase_query\": [\n        \"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a query\"\n    ],\n    \"ibase_restore\": [\n        \"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\n        \"Initiates a restore task in the service manager and returns immediately\"\n    ],\n    \"ibase_rollback\": [\n        \"bool ibase_rollback( resource link_identifier )\",\n        \"Rollback transaction\"\n    ],\n    \"ibase_rollback_ret\": [\n        \"bool ibase_rollback_ret( resource link_identifier )\",\n        \"Rollback transaction and retain the transaction context\"\n    ],\n    \"ibase_server_info\": [\n        \"string ibase_server_info(resource service_handle, int action)\",\n        \"Request information about a database server\"\n    ],\n    \"ibase_service_attach\": [\n        \"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\n        \"Connect to the service manager\"\n    ],\n    \"ibase_service_detach\": [\n        \"bool ibase_service_detach(resource service_handle)\",\n        \"Disconnect from the service manager\"\n    ],\n    \"ibase_set_event_handler\": [\n        \"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\n        \"Register the callback for handling each of the named events\"\n    ],\n    \"ibase_trans\": [\n        \"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\n        \"Start a transaction over one or several databases\"\n    ],\n    \"ibase_wait_event\": [\n        \"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\n        \"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"\n    ],\n    \"iconv\": [\n        \"string iconv(string in_charset, string out_charset, string str)\",\n        \"Returns str converted to the out_charset character set\"\n    ],\n    \"iconv_get_encoding\": [\n        \"mixed iconv_get_encoding([string type])\",\n        \"Get internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_mime_decode\": [\n        \"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\n        \"Decodes a mime header field\"\n    ],\n    \"iconv_mime_decode_headers\": [\n        \"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\n        \"Decodes multiple mime header fields\"\n    ],\n    \"iconv_mime_encode\": [\n        \"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\n        \"Composes a mime header field with field_name and field_value in a specified scheme\"\n    ],\n    \"iconv_set_encoding\": [\n        \"bool iconv_set_encoding(string type, string charset)\",\n        \"Sets internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_strlen\": [\n        \"int iconv_strlen(string str [, string charset])\",\n        \"Returns the character count of str\"\n    ],\n    \"iconv_strpos\": [\n        \"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\n        \"Finds position of first occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_strrpos\": [\n        \"int iconv_strrpos(string haystack, string needle [, string charset])\",\n        \"Finds position of last occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_substr\": [\n        \"string iconv_substr(string str, int offset, [int length, string charset])\",\n        \"Returns specified part of a string\"\n    ],\n    \"idate\": [\n        \"int idate(string format [, int timestamp])\",\n        \"Format a local time/date as integer\"\n    ],\n    \"idn_to_ascii\": [\n        \"int idn_to_ascii(string domain[, int options])\",\n        \"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"\n    ],\n    \"idn_to_utf8\": [\n        \"int idn_to_utf8(string domain[, int options])\",\n        \"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"\n    ],\n    \"ignore_user_abort\": [\n        \"int ignore_user_abort([string value])\",\n        \"Set whether we want to ignore a user abort event or not\"\n    ],\n    \"image2wbmp\": [\n        \"bool image2wbmp(resource im [, string filename [, int threshold]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"image_type_to_extension\": [\n        \"string image_type_to_extension(int imagetype [, bool include_dot])\",\n        \"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"image_type_to_mime_type\": [\n        \"string image_type_to_mime_type(int imagetype)\",\n        \"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"imagealphablending\": [\n        \"bool imagealphablending(resource im, bool on)\",\n        \"Turn alpha blending mode on or off for the given image\"\n    ],\n    \"imageantialias\": [\n        \"bool imageantialias(resource im, bool on)\",\n        \"Should antialiased functions used or not\"\n    ],\n    \"imagearc\": [\n        \"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\n        \"Draw a partial ellipse\"\n    ],\n    \"imagechar\": [\n        \"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character\"\n    ],\n    \"imagecharup\": [\n        \"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagecolorallocate\": [\n        \"int imagecolorallocate(resource im, int red, int green, int blue)\",\n        \"Allocate a color for an image\"\n    ],\n    \"imagecolorallocatealpha\": [\n        \"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Allocate a color with an alpha level.  Works for true color and palette based images\"\n    ],\n    \"imagecolorat\": [\n        \"int imagecolorat(resource im, int x, int y)\",\n        \"Get the index of the color of a pixel\"\n    ],\n    \"imagecolorclosest\": [\n        \"int imagecolorclosest(resource im, int red, int green, int blue)\",\n        \"Get the index of the closest color to the specified color\"\n    ],\n    \"imagecolorclosestalpha\": [\n        \"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find the closest matching colour with alpha transparency\"\n    ],\n    \"imagecolorclosesthwb\": [\n        \"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\n        \"Get the index of the color which has the hue, white and blackness nearest to the given color\"\n    ],\n    \"imagecolordeallocate\": [\n        \"bool imagecolordeallocate(resource im, int index)\",\n        \"De-allocate a color for an image\"\n    ],\n    \"imagecolorexact\": [\n        \"int imagecolorexact(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color\"\n    ],\n    \"imagecolorexactalpha\": [\n        \"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find exact match for colour with transparency\"\n    ],\n    \"imagecolormatch\": [\n        \"bool imagecolormatch(resource im1, resource im2)\",\n        \"Makes the colors of the palette version of an image more closely match the true color version\"\n    ],\n    \"imagecolorresolve\": [\n        \"int imagecolorresolve(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color or its closest possible alternative\"\n    ],\n    \"imagecolorresolvealpha\": [\n        \"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\"\n    ],\n    \"imagecolorset\": [\n        \"void imagecolorset(resource im, int col, int red, int green, int blue)\",\n        \"Set the color for the specified palette index\"\n    ],\n    \"imagecolorsforindex\": [\n        \"array imagecolorsforindex(resource im, int col)\",\n        \"Get the colors for an index\"\n    ],\n    \"imagecolorstotal\": [\n        \"int imagecolorstotal(resource im)\",\n        \"Find out the number of colors in an image's palette\"\n    ],\n    \"imagecolortransparent\": [\n        \"int imagecolortransparent(resource im [, int col])\",\n        \"Define a color as transparent\"\n    ],\n    \"imageconvolution\": [\n        \"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\n        \"Apply a 3x3 convolution matrix, using coefficient div and offset\"\n    ],\n    \"imagecopy\": [\n        \"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\n        \"Copy part of an image\"\n    ],\n    \"imagecopymerge\": [\n        \"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopymergegray\": [\n        \"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopyresampled\": [\n        \"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image using resampling to help ensure clarity\"\n    ],\n    \"imagecopyresized\": [\n        \"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image\"\n    ],\n    \"imagecreate\": [\n        \"resource imagecreate(int x_size, int y_size)\",\n        \"Create a new image\"\n    ],\n    \"imagecreatefromgd\": [\n        \"resource imagecreatefromgd(string filename)\",\n        \"Create a new image from GD file or URL\"\n    ],\n    \"imagecreatefromgd2\": [\n        \"resource imagecreatefromgd2(string filename)\",\n        \"Create a new image from GD2 file or URL\"\n    ],\n    \"imagecreatefromgd2part\": [\n        \"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\n        \"Create a new image from a given part of GD2 file or URL\"\n    ],\n    \"imagecreatefromgif\": [\n        \"resource imagecreatefromgif(string filename)\",\n        \"Create a new image from GIF file or URL\"\n    ],\n    \"imagecreatefromjpeg\": [\n        \"resource imagecreatefromjpeg(string filename)\",\n        \"Create a new image from JPEG file or URL\"\n    ],\n    \"imagecreatefrompng\": [\n        \"resource imagecreatefrompng(string filename)\",\n        \"Create a new image from PNG file or URL\"\n    ],\n    \"imagecreatefromstring\": [\n        \"resource imagecreatefromstring(string image)\",\n        \"Create a new image from the image stream in the string\"\n    ],\n    \"imagecreatefromwbmp\": [\n        \"resource imagecreatefromwbmp(string filename)\",\n        \"Create a new image from WBMP file or URL\"\n    ],\n    \"imagecreatefromxbm\": [\n        \"resource imagecreatefromxbm(string filename)\",\n        \"Create a new image from XBM file or URL\"\n    ],\n    \"imagecreatefromxpm\": [\n        \"resource imagecreatefromxpm(string filename)\",\n        \"Create a new image from XPM file or URL\"\n    ],\n    \"imagecreatetruecolor\": [\n        \"resource imagecreatetruecolor(int x_size, int y_size)\",\n        \"Create a new true color image\"\n    ],\n    \"imagedashedline\": [\n        \"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a dashed line\"\n    ],\n    \"imagedestroy\": [\n        \"bool imagedestroy(resource im)\",\n        \"Destroy an image\"\n    ],\n    \"imageellipse\": [\n        \"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefill\": [\n        \"bool imagefill(resource im, int x, int y, int col)\",\n        \"Flood fill\"\n    ],\n    \"imagefilledarc\": [\n        \"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\n        \"Draw a filled partial ellipse\"\n    ],\n    \"imagefilledellipse\": [\n        \"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefilledpolygon\": [\n        \"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a filled polygon\"\n    ],\n    \"imagefilledrectangle\": [\n        \"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a filled rectangle\"\n    ],\n    \"imagefilltoborder\": [\n        \"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\n        \"Flood fill to specific color\"\n    ],\n    \"imagefilter\": [\n        \"bool imagefilter(resource src_im, int filtertype, [args] )\",\n        \"Applies Filter an image using a custom angle\"\n    ],\n    \"imagefontheight\": [\n        \"int imagefontheight(int font)\",\n        \"Get font height\"\n    ],\n    \"imagefontwidth\": [\n        \"int imagefontwidth(int font)\",\n        \"Get font width\"\n    ],\n    \"imageftbbox\": [\n        \"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\n        \"Give the bounding box of a text using fonts via freetype2\"\n    ],\n    \"imagefttext\": [\n        \"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\n        \"Write text to the image using fonts via freetype2\"\n    ],\n    \"imagegammacorrect\": [\n        \"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\n        \"Apply a gamma correction to a GD image\"\n    ],\n    \"imagegd\": [\n        \"bool imagegd(resource im [, string filename])\",\n        \"Output GD image to browser or file\"\n    ],\n    \"imagegd2\": [\n        \"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\n        \"Output GD2 image to browser or file\"\n    ],\n    \"imagegif\": [\n        \"bool imagegif(resource im [, string filename])\",\n        \"Output GIF image to browser or file\"\n    ],\n    \"imagegrabscreen\": [\n        \"resource imagegrabscreen()\",\n        \"Grab a screenshot\"\n    ],\n    \"imagegrabwindow\": [\n        \"resource imagegrabwindow(int window_handle [, int client_area])\",\n        \"Grab a window or its client area using a windows handle (HWND property in COM instance)\"\n    ],\n    \"imageinterlace\": [\n        \"int imageinterlace(resource im [, int interlace])\",\n        \"Enable or disable interlace\"\n    ],\n    \"imageistruecolor\": [\n        \"bool imageistruecolor(resource im)\",\n        \"return true if the image uses truecolor\"\n    ],\n    \"imagejpeg\": [\n        \"bool imagejpeg(resource im [, string filename [, int quality]])\",\n        \"Output JPEG image to browser or file\"\n    ],\n    \"imagelayereffect\": [\n        \"bool imagelayereffect(resource im, int effect)\",\n        \"Set the alpha blending flag to use the bundled libgd layering effects\"\n    ],\n    \"imageline\": [\n        \"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a line\"\n    ],\n    \"imageloadfont\": [\n        \"int imageloadfont(string filename)\",\n        \"Load a new font\"\n    ],\n    \"imagepalettecopy\": [\n        \"void imagepalettecopy(resource dst, resource src)\",\n        \"Copy the palette from the src image onto the dst image\"\n    ],\n    \"imagepng\": [\n        \"bool imagepng(resource im [, string filename])\",\n        \"Output PNG image to browser or file\"\n    ],\n    \"imagepolygon\": [\n        \"bool imagepolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a polygon\"\n    ],\n    \"imagepsbbox\": [\n        \"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\n        \"Return the bounding box needed by a string if rasterized\"\n    ],\n    \"imagepscopyfont\": [\n        \"int imagepscopyfont(int font_index)\",\n        \"Make a copy of a font for purposes like extending or reenconding\"\n    ],\n    \"imagepsencodefont\": [\n        \"bool imagepsencodefont(resource font_index, string filename)\",\n        \"To change a fonts character encoding vector\"\n    ],\n    \"imagepsextendfont\": [\n        \"bool imagepsextendfont(resource font_index, float extend)\",\n        \"Extend or or condense if (extend < 1) a font\"\n    ],\n    \"imagepsfreefont\": [\n        \"bool imagepsfreefont(resource font_index)\",\n        \"Free memory used by a font\"\n    ],\n    \"imagepsloadfont\": [\n        \"resource imagepsloadfont(string pathname)\",\n        \"Load a new font from specified file\"\n    ],\n    \"imagepsslantfont\": [\n        \"bool imagepsslantfont(resource font_index, float slant)\",\n        \"Slant a font\"\n    ],\n    \"imagepstext\": [\n        \"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\n        \"Rasterize a string over an image\"\n    ],\n    \"imagerectangle\": [\n        \"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a rectangle\"\n    ],\n    \"imagerotate\": [\n        \"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\n        \"Rotate an image using a custom angle\"\n    ],\n    \"imagesavealpha\": [\n        \"bool imagesavealpha(resource im, bool on)\",\n        \"Include alpha channel to a saved image\"\n    ],\n    \"imagesetbrush\": [\n        \"bool imagesetbrush(resource image, resource brush)\",\n        \"Set the brush image to $brush when filling $image with the \\\"IMG_COLOR_BRUSHED\\\" color\"\n    ],\n    \"imagesetpixel\": [\n        \"bool imagesetpixel(resource im, int x, int y, int col)\",\n        \"Set a single pixel\"\n    ],\n    \"imagesetstyle\": [\n        \"bool imagesetstyle(resource im, array styles)\",\n        \"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"\n    ],\n    \"imagesetthickness\": [\n        \"bool imagesetthickness(resource im, int thickness)\",\n        \"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"\n    ],\n    \"imagesettile\": [\n        \"bool imagesettile(resource image, resource tile)\",\n        \"Set the tile image to $tile when filling $image with the \\\"IMG_COLOR_TILED\\\" color\"\n    ],\n    \"imagestring\": [\n        \"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string horizontally\"\n    ],\n    \"imagestringup\": [\n        \"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string vertically - rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagesx\": [\n        \"int imagesx(resource im)\",\n        \"Get image width\"\n    ],\n    \"imagesy\": [\n        \"int imagesy(resource im)\",\n        \"Get image height\"\n    ],\n    \"imagetruecolortopalette\": [\n        \"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\n        \"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"\n    ],\n    \"imagettfbbox\": [\n        \"array imagettfbbox(float size, float angle, string font_file, string text)\",\n        \"Give the bounding box of a text using TrueType fonts\"\n    ],\n    \"imagettftext\": [\n        \"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\n        \"Write text to the image using a TrueType font\"\n    ],\n    \"imagetypes\": [\n        \"int imagetypes()\",\n        \"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"\n    ],\n    \"imagewbmp\": [\n        \"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"imagexbm\": [\n        \"int imagexbm(int im, string filename [, int foreground])\",\n        \"Output XBM image to browser or file\"\n    ],\n    \"imap_8bit\": [\n        \"string imap_8bit(string text)\",\n        \"Convert an 8-bit string to a quoted-printable string\"\n    ],\n    \"imap_alerts\": [\n        \"array imap_alerts()\",\n        \"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"\n    ],\n    \"imap_append\": [\n        \"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\n        \"Append a new message to a specified mailbox\"\n    ],\n    \"imap_base64\": [\n        \"string imap_base64(string text)\",\n        \"Decode BASE64 encoded text\"\n    ],\n    \"imap_binary\": [\n        \"string imap_binary(string text)\",\n        \"Convert an 8bit string to a base64 string\"\n    ],\n    \"imap_body\": [\n        \"string imap_body(resource stream_id, int msg_no [, int options])\",\n        \"Read the message body\"\n    ],\n    \"imap_bodystruct\": [\n        \"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\n        \"Read the structure of a specified body section of a specific message\"\n    ],\n    \"imap_check\": [\n        \"object imap_check(resource stream_id)\",\n        \"Get mailbox properties\"\n    ],\n    \"imap_clearflag_full\": [\n        \"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Clears flags on messages\"\n    ],\n    \"imap_close\": [\n        \"bool imap_close(resource stream_id [, int options])\",\n        \"Close an IMAP stream\"\n    ],\n    \"imap_createmailbox\": [\n        \"bool imap_createmailbox(resource stream_id, string mailbox)\",\n        \"Create a new mailbox\"\n    ],\n    \"imap_delete\": [\n        \"bool imap_delete(resource stream_id, int msg_no [, int options])\",\n        \"Mark a message for deletion\"\n    ],\n    \"imap_deletemailbox\": [\n        \"bool imap_deletemailbox(resource stream_id, string mailbox)\",\n        \"Delete a mailbox\"\n    ],\n    \"imap_errors\": [\n        \"array imap_errors()\",\n        \"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"\n    ],\n    \"imap_expunge\": [\n        \"bool imap_expunge(resource stream_id)\",\n        \"Permanently delete all messages marked for deletion\"\n    ],\n    \"imap_fetch_overview\": [\n        \"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\n        \"Read an overview of the information in the headers of the given message sequence\"\n    ],\n    \"imap_fetchbody\": [\n        \"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\n        \"Get a specific body section\"\n    ],\n    \"imap_fetchheader\": [\n        \"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\n        \"Get the full unfiltered header for a message\"\n    ],\n    \"imap_fetchstructure\": [\n        \"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\n        \"Read the full structure of a message\"\n    ],\n    \"imap_gc\": [\n        \"bool imap_gc(resource stream_id, int flags)\",\n        \"This function garbage collects (purges) the cache of entries of a specific type.\"\n    ],\n    \"imap_get_quota\": [\n        \"array imap_get_quota(resource stream_id, string qroot)\",\n        \"Returns the quota set to the mailbox account qroot\"\n    ],\n    \"imap_get_quotaroot\": [\n        \"array imap_get_quotaroot(resource stream_id, string mbox)\",\n        \"Returns the quota set to the mailbox account mbox\"\n    ],\n    \"imap_getacl\": [\n        \"array imap_getacl(resource stream_id, string mailbox)\",\n        \"Gets the ACL for a given mailbox\"\n    ],\n    \"imap_getmailboxes\": [\n        \"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\n        \"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"\n    ],\n    \"imap_getsubscribed\": [\n        \"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"\n    ],\n    \"imap_headerinfo\": [\n        \"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\n        \"Read the headers of the message\"\n    ],\n    \"imap_headers\": [\n        \"array imap_headers(resource stream_id)\",\n        \"Returns headers for all messages in a mailbox\"\n    ],\n    \"imap_last_error\": [\n        \"string imap_last_error()\",\n        \"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"\n    ],\n    \"imap_list\": [\n        \"array imap_list(resource stream_id, string ref, string pattern)\",\n        \"Read the list of mailboxes\"\n    ],\n    \"imap_listscan\": [\n        \"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\n        \"Read list of mailboxes containing a certain string\"\n    ],\n    \"imap_lsub\": [\n        \"array imap_lsub(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes\"\n    ],\n    \"imap_mail\": [\n        \"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\n        \"Send an email message\"\n    ],\n    \"imap_mail_compose\": [\n        \"string imap_mail_compose(array envelope, array body)\",\n        \"Create a MIME message based on given envelope and body sections\"\n    ],\n    \"imap_mail_copy\": [\n        \"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\n        \"Copy specified message to a mailbox\"\n    ],\n    \"imap_mail_move\": [\n        \"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\n        \"Move specified message to a mailbox\"\n    ],\n    \"imap_mailboxmsginfo\": [\n        \"object imap_mailboxmsginfo(resource stream_id)\",\n        \"Returns info about the current mailbox\"\n    ],\n    \"imap_mime_header_decode\": [\n        \"array imap_mime_header_decode(string str)\",\n        \"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"\n    ],\n    \"imap_msgno\": [\n        \"int imap_msgno(resource stream_id, int unique_msg_id)\",\n        \"Get the sequence number associated with a UID\"\n    ],\n    \"imap_mutf7_to_utf8\": [\n        \"string imap_mutf7_to_utf8(string in)\",\n        \"Decode a modified UTF-7 string to UTF-8\"\n    ],\n    \"imap_num_msg\": [\n        \"int imap_num_msg(resource stream_id)\",\n        \"Gives the number of messages in the current mailbox\"\n    ],\n    \"imap_num_recent\": [\n        \"int imap_num_recent(resource stream_id)\",\n        \"Gives the number of recent messages in current mailbox\"\n    ],\n    \"imap_open\": [\n        \"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\n        \"Open an IMAP stream to a mailbox\"\n    ],\n    \"imap_ping\": [\n        \"bool imap_ping(resource stream_id)\",\n        \"Check if the IMAP stream is still active\"\n    ],\n    \"imap_qprint\": [\n        \"string imap_qprint(string text)\",\n        \"Convert a quoted-printable string to an 8-bit string\"\n    ],\n    \"imap_renamemailbox\": [\n        \"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\n        \"Rename a mailbox\"\n    ],\n    \"imap_reopen\": [\n        \"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\n        \"Reopen an IMAP stream to a new mailbox\"\n    ],\n    \"imap_rfc822_parse_adrlist\": [\n        \"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\n        \"Parses an address string\"\n    ],\n    \"imap_rfc822_parse_headers\": [\n        \"object imap_rfc822_parse_headers(string headers [, string default_host])\",\n        \"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"\n    ],\n    \"imap_rfc822_write_address\": [\n        \"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\n        \"Returns a properly formatted email address given the mailbox, host, and personal info\"\n    ],\n    \"imap_savebody\": [\n        \"bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \\\"\\\"[, int options = 0]])\",\n        \"Save a specific body section to a file\"\n    ],\n    \"imap_search\": [\n        \"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\n        \"Return a list of messages matching the given criteria\"\n    ],\n    \"imap_set_quota\": [\n        \"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\n        \"Will set the quota for qroot mailbox\"\n    ],\n    \"imap_setacl\": [\n        \"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\n        \"Sets the ACL for a given mailbox\"\n    ],\n    \"imap_setflag_full\": [\n        \"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Sets flags on messages\"\n    ],\n    \"imap_sort\": [\n        \"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\n        \"Sort an array of message headers, optionally including only messages that meet specified criteria.\"\n    ],\n    \"imap_status\": [\n        \"object imap_status(resource stream_id, string mailbox, int options)\",\n        \"Get status info from a mailbox\"\n    ],\n    \"imap_subscribe\": [\n        \"bool imap_subscribe(resource stream_id, string mailbox)\",\n        \"Subscribe to a mailbox\"\n    ],\n    \"imap_thread\": [\n        \"array imap_thread(resource stream_id [, int options])\",\n        \"Return threaded by REFERENCES tree\"\n    ],\n    \"imap_timeout\": [\n        \"mixed imap_timeout(int timeout_type [, int timeout])\",\n        \"Set or fetch imap timeout\"\n    ],\n    \"imap_uid\": [\n        \"int imap_uid(resource stream_id, int msg_no)\",\n        \"Get the unique message id associated with a standard sequential message number\"\n    ],\n    \"imap_undelete\": [\n        \"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\n        \"Remove the delete flag from a message\"\n    ],\n    \"imap_unsubscribe\": [\n        \"bool imap_unsubscribe(resource stream_id, string mailbox)\",\n        \"Unsubscribe from a mailbox\"\n    ],\n    \"imap_utf7_decode\": [\n        \"string imap_utf7_decode(string buf)\",\n        \"Decode a modified UTF-7 string\"\n    ],\n    \"imap_utf7_encode\": [\n        \"string imap_utf7_encode(string buf)\",\n        \"Encode a string in modified UTF-7\"\n    ],\n    \"imap_utf8\": [\n        \"string imap_utf8(string mime_encoded_text)\",\n        \"Convert a mime-encoded text to UTF-8\"\n    ],\n    \"imap_utf8_to_mutf7\": [\n        \"string imap_utf8_to_mutf7(string in)\",\n        \"Encode a UTF-8 string to modified UTF-7\"\n    ],\n    \"implode\": [\n        \"string implode([string glue,] array pieces)\",\n        \"Joins array elements placing glue string between items and return one string\"\n    ],\n    \"import_request_variables\": [\n        \"bool import_request_variables(string types [, string prefix])\",\n        \"Import GET/POST/Cookie variables into the global scope\"\n    ],\n    \"in_array\": [\n        \"bool in_array(mixed needle, array haystack [, bool strict])\",\n        \"Checks if the given value exists in the array\"\n    ],\n    \"include\": [\n        \"bool include(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"include_once\": [\n        \"bool include_once(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"inet_ntop\": [\n        \"string inet_ntop(string in_addr)\",\n        \"Converts a packed inet address to a human readable IP address string\"\n    ],\n    \"inet_pton\": [\n        \"string inet_pton(string ip_address)\",\n        \"Converts a human readable IP address to a packed binary string\"\n    ],\n    \"ini_get\": [\n        \"string ini_get(string varname)\",\n        \"Get a configuration option\"\n    ],\n    \"ini_get_all\": [\n        \"array ini_get_all([string extension[, bool details = true]])\",\n        \"Get all configuration options\"\n    ],\n    \"ini_restore\": [\n        \"void ini_restore(string varname)\",\n        \"Restore the value of a configuration option specified by varname\"\n    ],\n    \"ini_set\": [\n        \"string ini_set(string varname, string newvalue)\",\n        \"Set a configuration option, returns false on error and the old value of the configuration option on success\"\n    ],\n    \"interface_exists\": [\n        \"bool interface_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"intl_error_name\": [\n        \"string intl_error_name()\",\n        \"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"\n    ],\n    \"intl_get_error_code\": [\n        \"int intl_get_error_code()\",\n        \"* Get code of the last occured error.\"\n    ],\n    \"intl_get_error_message\": [\n        \"string intl_get_error_message()\",\n        \"* Get text description of the last occured error.\"\n    ],\n    \"intl_is_failure\": [\n        \"bool intl_is_failure()\",\n        \"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"\n    ],\n    \"intval\": [\n        \"int intval(mixed var [, int base])\",\n        \"Get the integer value of a variable using the optional base for the conversion\"\n    ],\n    \"ip2long\": [\n        \"int ip2long(string ip_address)\",\n        \"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"\n    ],\n    \"iptcembed\": [\n        \"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\n        \"Embed binary IPTC data into a JPEG image.\"\n    ],\n    \"iptcparse\": [\n        \"array iptcparse(string iptcdata)\",\n        \"Parse binary IPTC-data into associative array\"\n    ],\n    \"is_a\": [\n        \"bool is_a(object object, string class_name)\",\n        \"Returns true if the object is of this class or has this class as one of its parents\"\n    ],\n    \"is_array\": [\n        \"bool is_array(mixed var)\",\n        \"Returns true if variable is an array\"\n    ],\n    \"is_bool\": [\n        \"bool is_bool(mixed var)\",\n        \"Returns true if variable is a boolean\"\n    ],\n    \"is_callable\": [\n        \"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\n        \"Returns true if var is callable.\"\n    ],\n    \"is_countable\": [\n        \"bool is_countable(mixed var)\",\n        \"Returns true if var is countable, false otherwise\"\n    ],\n    \"is_dir\": [\n        \"bool is_dir(string filename)\",\n        \"Returns true if file is directory\"\n    ],\n    \"is_executable\": [\n        \"bool is_executable(string filename)\",\n        \"Returns true if file is executable\"\n    ],\n    \"is_file\": [\n        \"bool is_file(string filename)\",\n        \"Returns true if file is a regular file\"\n    ],\n    \"is_finite\": [\n        \"bool is_finite(float val)\",\n        \"Returns whether argument is finite\"\n    ],\n    \"is_float\": [\n        \"bool is_float(mixed var)\",\n        \"Returns true if variable is float point\"\n    ],\n    \"is_infinite\": [\n        \"bool is_infinite(float val)\",\n        \"Returns whether argument is infinite\"\n    ],\n    \"is_link\": [\n        \"bool is_link(string filename)\",\n        \"Returns true if file is symbolic link\"\n    ],\n    \"is_long\": [\n        \"bool is_long(mixed var)\",\n        \"Returns true if variable is a long (integer)\"\n    ],\n    \"is_nan\": [\n        \"bool is_nan(float val)\",\n        \"Returns whether argument is not a number\"\n    ],\n    \"is_null\": [\n        \"bool is_null(mixed var)\",\n        \"Returns true if variable is null\"\n    ],\n    \"is_numeric\": [\n        \"bool is_numeric(mixed value)\",\n        \"Returns true if value is a number or a numeric string\"\n    ],\n    \"is_object\": [\n        \"bool is_object(mixed var)\",\n        \"Returns true if variable is an object\"\n    ],\n    \"is_readable\": [\n        \"bool is_readable(string filename)\",\n        \"Returns true if file can be read\"\n    ],\n    \"is_resource\": [\n        \"bool is_resource(mixed var)\",\n        \"Returns true if variable is a resource\"\n    ],\n    \"is_scalar\": [\n        \"bool is_scalar(mixed value)\",\n        \"Returns true if value is a scalar\"\n    ],\n    \"is_string\": [\n        \"bool is_string(mixed var)\",\n        \"Returns true if variable is a string\"\n    ],\n    \"is_subclass_of\": [\n        \"bool is_subclass_of(object object, string class_name)\",\n        \"Returns true if the object has this class as one of its parents\"\n    ],\n    \"is_uploaded_file\": [\n        \"bool is_uploaded_file(string path)\",\n        \"Check if file was created by rfc1867 upload\"\n    ],\n    \"is_writable\": [\n        \"bool is_writable(string filename)\",\n        \"Returns true if file can be written\"\n    ],\n    \"isset\": [\n        \"bool isset(mixed var [, mixed var])\",\n        \"Determine whether a variable is set\"\n    ],\n    \"iterator_apply\": [\n        \"int iterator_apply(Traversable iterator, callable function [, array args = null)\",\n        \"Calls a function for every element in an iterator\"\n    ],\n    \"iterator_count\": [\n        \"int iterator_count(Traversable iterator)\",\n        \"Count the elements in an iterator\"\n    ],\n    \"iterator_to_array\": [\n        \"array iterator_to_array(Traversable iterator [, bool use_keys = true])\",\n        \"Copy the iterator into an array\"\n    ],\n    \"jddayofweek\": [\n        \"mixed jddayofweek(int juliandaycount [, int mode])\",\n        \"Returns name or number of day of week from julian day count\"\n    ],\n    \"jdmonthname\": [\n        \"string jdmonthname(int juliandaycount, int mode)\",\n        \"Returns name of month for julian day count\"\n    ],\n    \"jdtofrench\": [\n        \"string jdtofrench(int juliandaycount)\",\n        \"Converts a julian day count to a french republic calendar date\"\n    ],\n    \"jdtogregorian\": [\n        \"string jdtogregorian(int juliandaycount)\",\n        \"Converts a julian day count to a gregorian calendar date\"\n    ],\n    \"jdtojewish\": [\n        \"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\n        \"Converts a julian day count to a jewish calendar date\"\n    ],\n    \"jdtojulian\": [\n        \"string jdtojulian(int juliandaycount)\",\n        \"Convert a julian day count to a julian calendar date\"\n    ],\n    \"jdtounix\": [\n        \"int jdtounix(int jday)\",\n        \"Convert Julian Day to UNIX timestamp\"\n    ],\n    \"jewishtojd\": [\n        \"int jewishtojd(int month, int day, int year)\",\n        \"Converts a jewish calendar date to a julian day count\"\n    ],\n    \"join\": [\n        \"string join([string glue,] array pieces)\",\n        \"Returns a string containing a string representation of all the arrayelements in the same order, with the glue string between each element\"\n    ],\n    \"jpeg2wbmp\": [\n        \"bool jpeg2wbmp(string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert JPEG image to WBMP image\"\n    ],\n    \"json_decode\": [\n        \"mixed json_decode(string json [, bool assoc [, long depth]])\",\n        \"Decodes the JSON representation into a PHP value\"\n    ],\n    \"json_encode\": [\n        \"string json_encode(mixed data [, int options])\",\n        \"Returns the JSON representation of a value\"\n    ],\n    \"json_last_error\": [\n        \"int json_last_error()\",\n        \"Returns the error code of the last json_decode().\"\n    ],\n    \"juliantojd\": [\n        \"int juliantojd(int month, int day, int year)\",\n        \"Converts a julian calendar date to julian day count\"\n    ],\n    \"key\": [\n        \"mixed key(array array_arg)\",\n        \"Return the key of the element currently pointed to by the internal array pointer\"\n    ],\n    \"krsort\": [\n        \"bool krsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key value in reverse order\"\n    ],\n    \"ksort\": [\n        \"bool ksort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key\"\n    ],\n    \"lcfirst\": [\n        \"string lcfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"lcg_value\": [\n        \"float lcg_value()\",\n        \"Returns a value from the combined linear congruential generator\"\n    ],\n    \"lchgrp\": [\n        \"bool lchgrp(string filename, mixed group)\",\n        \"Change symlink group\"\n    ],\n    \"ldap_8859_to_t61\": [\n        \"string ldap_8859_to_t61(string value)\",\n        \"Translate 8859 characters to t61 characters\"\n    ],\n    \"ldap_add\": [\n        \"bool ldap_add(resource link, string dn, array entry)\",\n        \"Add entries to LDAP directory\"\n    ],\n    \"ldap_bind\": [\n        \"bool ldap_bind(resource link [, string dn [, string password]])\",\n        \"Bind to LDAP directory\"\n    ],\n    \"ldap_compare\": [\n        \"bool ldap_compare(resource link, string dn, string attr, string value)\",\n        \"Determine if an entry has a specific value for one of its attributes\"\n    ],\n    \"ldap_connect\": [\n        \"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\n        \"Connect to an LDAP server\"\n    ],\n    \"ldap_count_entries\": [\n        \"int ldap_count_entries(resource link, resource result)\",\n        \"Count the number of entries in a search result\"\n    ],\n    \"ldap_delete\": [\n        \"bool ldap_delete(resource link, string dn)\",\n        \"Delete an entry from a directory\"\n    ],\n    \"ldap_dn2ufn\": [\n        \"string ldap_dn2ufn(string dn)\",\n        \"Convert DN to User Friendly Naming format\"\n    ],\n    \"ldap_err2str\": [\n        \"string ldap_err2str(int errno)\",\n        \"Convert error number to error string\"\n    ],\n    \"ldap_errno\": [\n        \"int ldap_errno(resource link)\",\n        \"Get the current ldap error number\"\n    ],\n    \"ldap_error\": [\n        \"string ldap_error(resource link)\",\n        \"Get the current ldap error string\"\n    ],\n    \"ldap_explode_dn\": [\n        \"array ldap_explode_dn(string dn, int with_attrib)\",\n        \"Splits DN into its component parts\"\n    ],\n    \"ldap_first_attribute\": [\n        \"string ldap_first_attribute(resource link, resource result_entry)\",\n        \"Return first attribute\"\n    ],\n    \"ldap_first_entry\": [\n        \"resource ldap_first_entry(resource link, resource result)\",\n        \"Return first result id\"\n    ],\n    \"ldap_first_reference\": [\n        \"resource ldap_first_reference(resource link, resource result)\",\n        \"Return first reference\"\n    ],\n    \"ldap_free_result\": [\n        \"bool ldap_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"ldap_get_attributes\": [\n        \"array ldap_get_attributes(resource link, resource result_entry)\",\n        \"Get attributes from a search result entry\"\n    ],\n    \"ldap_get_dn\": [\n        \"string ldap_get_dn(resource link, resource result_entry)\",\n        \"Get the DN of a result entry\"\n    ],\n    \"ldap_get_entries\": [\n        \"array ldap_get_entries(resource link, resource result)\",\n        \"Get all result entries\"\n    ],\n    \"ldap_get_option\": [\n        \"bool ldap_get_option(resource link, int option, mixed retval)\",\n        \"Get the current value of various session-wide parameters\"\n    ],\n    \"ldap_get_values_len\": [\n        \"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\n        \"Get all values with lengths from a result entry\"\n    ],\n    \"ldap_list\": [\n        \"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Single-level search\"\n    ],\n    \"ldap_mod_add\": [\n        \"bool ldap_mod_add(resource link, string dn, array entry)\",\n        \"Add attribute values to current\"\n    ],\n    \"ldap_mod_del\": [\n        \"bool ldap_mod_del(resource link, string dn, array entry)\",\n        \"Delete attribute values\"\n    ],\n    \"ldap_mod_replace\": [\n        \"bool ldap_mod_replace(resource link, string dn, array entry)\",\n        \"Replace attribute values with new ones\"\n    ],\n    \"ldap_next_attribute\": [\n        \"string ldap_next_attribute(resource link, resource result_entry)\",\n        \"Get the next attribute in result\"\n    ],\n    \"ldap_next_entry\": [\n        \"resource ldap_next_entry(resource link, resource result_entry)\",\n        \"Get next result entry\"\n    ],\n    \"ldap_next_reference\": [\n        \"resource ldap_next_reference(resource link, resource reference_entry)\",\n        \"Get next reference\"\n    ],\n    \"ldap_parse_reference\": [\n        \"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\n        \"Extract information from reference entry\"\n    ],\n    \"ldap_parse_result\": [\n        \"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\n        \"Extract information from result\"\n    ],\n    \"ldap_read\": [\n        \"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Read an entry\"\n    ],\n    \"ldap_rename\": [\n        \"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn)\",\n        \"Modify the name of an entry\"\n    ],\n    \"ldap_sasl_bind\": [\n        \"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\n        \"Bind to LDAP directory using SASL\"\n    ],\n    \"ldap_search\": [\n        \"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Search LDAP tree under base_dn\"\n    ],\n    \"ldap_set_option\": [\n        \"bool ldap_set_option(resource link, int option, mixed newval)\",\n        \"Set the value of various session-wide parameters\"\n    ],\n    \"ldap_set_rebind_proc\": [\n        \"bool ldap_set_rebind_proc(resource link, string callback)\",\n        \"Set a callback function to do re-binds on referral chasing.\"\n    ],\n    \"ldap_sort\": [\n        \"bool ldap_sort(resource link, resource result, string sortfilter)\",\n        \"Sort LDAP result entries\"\n    ],\n    \"ldap_start_tls\": [\n        \"bool ldap_start_tls(resource link)\",\n        \"Start TLS\"\n    ],\n    \"ldap_t61_to_8859\": [\n        \"string ldap_t61_to_8859(string value)\",\n        \"Translate t61 characters to 8859 characters\"\n    ],\n    \"ldap_unbind\": [\n        \"bool ldap_unbind(resource link)\",\n        \"Unbind from LDAP directory\"\n    ],\n    \"leak\": [\n        \"void leak(int num_bytes=3)\",\n        \"Cause an intentional memory leak, for testing/debugging purposes\"\n    ],\n    \"levenshtein\": [\n        \"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\n        \"Calculate Levenshtein distance between two strings\"\n    ],\n    \"libxml_clear_errors\": [\n        \"void libxml_clear_errors()\",\n        \"Clear last error from libxml\"\n    ],\n    \"libxml_disable_entity_loader\": [\n        \"bool libxml_disable_entity_loader([bool disable])\",\n        \"Disable/Enable ability to load external entities\"\n    ],\n    \"libxml_get_errors\": [\n        \"object libxml_get_errors()\",\n        \"Retrieve array of errors\"\n    ],\n    \"libxml_get_last_error\": [\n        \"object libxml_get_last_error()\",\n        \"Retrieve last error from libxml\"\n    ],\n    \"libxml_set_streams_context\": [\n        \"void libxml_set_streams_context(resource streams_context)\",\n        \"Set the streams context for the next libxml document load or write\"\n    ],\n    \"libxml_use_internal_errors\": [\n        \"bool libxml_use_internal_errors([bool use_errors])\",\n        \"Disable libxml errors and allow user to fetch error information as needed\"\n    ],\n    \"link\": [\n        \"int link(string target, string link)\",\n        \"Create a hard link\"\n    ],\n    \"linkinfo\": [\n        \"int linkinfo(string filename)\",\n        \"Returns the st_dev field of the UNIX C stat structure describing the link\"\n    ],\n    \"litespeed_request_headers\": [\n        \"array litespeed_request_headers()\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"litespeed_response_headers\": [\n        \"array litespeed_response_headers()\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"locale_accept_from_http\": [\n        \"string locale_accept_from_http(string $http_accept)\",\n        null\n    ],\n    \"locale_canonicalize\": [\n        \"static string locale_canonicalize(Locale $loc, string $locale)\",\n        \"* @param string $locale The locale string to canonicalize\"\n    ],\n    \"locale_filter_matches\": [\n        \"bool locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\n        \"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"\n    ],\n    \"locale_get_all_variants\": [\n        \"static array locale_get_all_variants($locale)\",\n        \"* gets an array containing the list of variants, or null\"\n    ],\n    \"locale_get_default\": [\n        \"static string locale_get_default( )\",\n        \"Get default locale\"\n    ],\n    \"locale_get_keywords\": [\n        \"static array locale_get_keywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array\"\n    ],\n    \"locale_get_primary_language\": [\n        \"static string locale_get_primary_language($locale)\",\n        \"* gets the primary language for the $locale\"\n    ],\n    \"locale_get_region\": [\n        \"static string locale_get_region($locale)\",\n        \"* gets the region for the $locale\"\n    ],\n    \"locale_get_script\": [\n        \"static string locale_get_script($locale)\",\n        \"* gets the script for the $locale\"\n    ],\n    \"locale_lookup\": [\n        \"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\n        \"* Searchs the items in $langtag for the best match to the language * range\"\n    ],\n    \"locale_set_default\": [\n        \"static string locale_set_default( string $locale )\",\n        \"Set default locale\"\n    ],\n    \"localeconv\": [\n        \"array localeconv()\",\n        \"Returns numeric formatting information based on the current locale\"\n    ],\n    \"localtime\": [\n        \"array localtime([int timestamp [, bool associative_array]])\",\n        \"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"\n    ],\n    \"log\": [\n        \"float log(float number, [float base])\",\n        \"Returns the natural logarithm of the number, or the base log if base is specified\"\n    ],\n    \"log10\": [\n        \"float log10(float number)\",\n        \"Returns the base-10 logarithm of the number\"\n    ],\n    \"log1p\": [\n        \"float log1p(float number)\",\n        \"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"long2ip\": [\n        \"string long2ip(int proper_address)\",\n        \"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"\n    ],\n    \"lstat\": [\n        \"array lstat(string filename)\",\n        \"Give information about a file or symbolic link\"\n    ],\n    \"ltrim\": [\n        \"string ltrim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning of a string\"\n    ],\n    \"mail\": [\n        \"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"Send an email message\"\n    ],\n    \"max\": [\n        \"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the highest value in an array or a series of arguments\"\n    ],\n    \"mb_check_encoding\": [\n        \"bool mb_check_encoding([string var[, string encoding]])\",\n        \"Check if the string is valid for the specified encoding\"\n    ],\n    \"mb_convert_case\": [\n        \"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\n        \"Returns a case-folded version of sourcestring\"\n    ],\n    \"mb_convert_encoding\": [\n        \"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\n        \"Returns converted string in desired encoding\"\n    ],\n    \"mb_convert_kana\": [\n        \"string mb_convert_kana(string str [, string option] [, string encoding])\",\n        \"Conversion between full-width character and half-width character (Japanese)\"\n    ],\n    \"mb_convert_variables\": [\n        \"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\n        \"Converts the string resource in variables to desired encoding\"\n    ],\n    \"mb_decode_mimeheader\": [\n        \"string mb_decode_mimeheader(string string)\",\n        \"Decodes the MIME \\\"encoded-word\\\" in the string\"\n    ],\n    \"mb_decode_numericentity\": [\n        \"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts HTML numeric entities to character code\"\n    ],\n    \"mb_detect_encoding\": [\n        \"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\n        \"Encodings of the given string is returned (as a string)\"\n    ],\n    \"mb_detect_order\": [\n        \"bool|array mb_detect_order([mixed encoding-list])\",\n        \"Sets the current detect_order or Return the current detect_order as a array\"\n    ],\n    \"mb_encode_mimeheader\": [\n        \"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",\n        \"Converts the string to MIME \\\"encoded-word\\\" in the format of =?charset?(B|Q)?encoded_string?=\"\n    ],\n    \"mb_encode_numericentity\": [\n        \"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts specified characters to HTML numeric entities\"\n    ],\n    \"mb_encoding_aliases\": [\n        \"array mb_encoding_aliases(string encoding)\",\n        \"Returns an array of the aliases of a given encoding name\"\n    ],\n    \"mb_ereg\": [\n        \"int mb_ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_match\": [\n        \"bool mb_ereg_match(string pattern, string string [,string option])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_replace\": [\n        \"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\n        \"Replace regular expression for multibyte string\"\n    ],\n    \"mb_ereg_search\": [\n        \"bool mb_ereg_search([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_getpos\": [\n        \"int mb_ereg_search_getpos()\",\n        \"Get search start position\"\n    ],\n    \"mb_ereg_search_getregs\": [\n        \"array mb_ereg_search_getregs()\",\n        \"Get matched substring of the last time\"\n    ],\n    \"mb_ereg_search_init\": [\n        \"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\n        \"Initialize string and regular expression for search.\"\n    ],\n    \"mb_ereg_search_pos\": [\n        \"array mb_ereg_search_pos([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_regs\": [\n        \"array mb_ereg_search_regs([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_setpos\": [\n        \"bool mb_ereg_search_setpos(int position)\",\n        \"Set search start position\"\n    ],\n    \"mb_eregi\": [\n        \"int mb_eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match for multibyte string\"\n    ],\n    \"mb_eregi_replace\": [\n        \"string mb_eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression for multibyte string\"\n    ],\n    \"mb_get_info\": [\n        \"mixed mb_get_info([string type])\",\n        \"Returns the current settings of mbstring\"\n    ],\n    \"mb_http_input\": [\n        \"mixed mb_http_input([string type])\",\n        \"Returns the input encoding\"\n    ],\n    \"mb_http_output\": [\n        \"string mb_http_output([string encoding])\",\n        \"Sets the current output_encoding or returns the current output_encoding as a string\"\n    ],\n    \"mb_internal_encoding\": [\n        \"string mb_internal_encoding([string encoding])\",\n        \"Sets the current internal encoding or Returns the current internal encoding as a string\"\n    ],\n    \"mb_language\": [\n        \"string mb_language([string language])\",\n        \"Sets the current language or Returns the current language as a string\"\n    ],\n    \"mb_list_encodings\": [\n        \"mixed mb_list_encodings()\",\n        \"Returns an array of all supported entity encodings\"\n    ],\n    \"mb_output_handler\": [\n        \"string mb_output_handler(string contents, int status)\",\n        \"Returns string in output buffer converted to the http_output encoding\"\n    ],\n    \"mb_parse_str\": [\n        \"bool mb_parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"mb_preferred_mime_name\": [\n        \"string mb_preferred_mime_name(string encoding)\",\n        \"Return the preferred MIME name (charset) as a string\"\n    ],\n    \"mb_regex_encoding\": [\n        \"string mb_regex_encoding([string encoding])\",\n        \"Returns the current encoding for regex as a string.\"\n    ],\n    \"mb_regex_set_options\": [\n        \"string mb_regex_set_options([string options])\",\n        \"Set or get the default options for mbregex functions\"\n    ],\n    \"mb_send_mail\": [\n        \"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"*  Sends an email message with MIME scheme\"\n    ],\n    \"mb_split\": [\n        \"array mb_split(string pattern, string string [, int limit])\",\n        \"split multibyte string into array by regular expression\"\n    ],\n    \"mb_strcut\": [\n        \"string mb_strcut(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_strimwidth\": [\n        \"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\n        \"Trim the string in terminal width\"\n    ],\n    \"mb_stripos\": [\n        \"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_stristr\": [\n        \"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strlen\": [\n        \"int mb_strlen(string str [, string encoding])\",\n        \"Get character numbers of a string\"\n    ],\n    \"mb_strpos\": [\n        \"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"mb_strrchr\": [\n        \"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"mb_strrichr\": [\n        \"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another, case insensitive\"\n    ],\n    \"mb_strripos\": [\n        \"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of last occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strrpos\": [\n        \"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"mb_strstr\": [\n        \"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"mb_strtolower\": [\n        \"string mb_strtolower(string sourcestring [, string encoding])\",\n        \"*  Returns a lowercased version of sourcestring\"\n    ],\n    \"mb_strtoupper\": [\n        \"string mb_strtoupper(string sourcestring [, string encoding])\",\n        \"*  Returns a uppercased version of sourcestring\"\n    ],\n    \"mb_strwidth\": [\n        \"int mb_strwidth(string str [, string encoding])\",\n        \"Gets terminal width of a string\"\n    ],\n    \"mb_substitute_character\": [\n        \"mixed mb_substitute_character([mixed substchar])\",\n        \"Sets the current substitute_character or returns the current substitute_character\"\n    ],\n    \"mb_substr\": [\n        \"string mb_substr(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_substr_count\": [\n        \"int mb_substr_count(string haystack, string needle [, string encoding])\",\n        \"Count the number of substring occurrences\"\n    ],\n    \"mcrypt_cbc\": [\n        \"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\n        \"CBC crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_cfb\": [\n        \"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\n        \"CFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_create_iv\": [\n        \"string mcrypt_create_iv(int size, int source)\",\n        \"Create an initialization vector (IV)\"\n    ],\n    \"mcrypt_decrypt\": [\n        \"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_ecb\": [\n        \"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\n        \"ECB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_enc_get_algorithms_name\": [\n        \"string mcrypt_enc_get_algorithms_name(resource td)\",\n        \"Returns the name of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_block_size\": [\n        \"int mcrypt_enc_get_block_size(resource td)\",\n        \"Returns the block size of the cipher specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_iv_size\": [\n        \"int mcrypt_enc_get_iv_size(resource td)\",\n        \"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_key_size\": [\n        \"int mcrypt_enc_get_key_size(resource td)\",\n        \"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_modes_name\": [\n        \"string mcrypt_enc_get_modes_name(resource td)\",\n        \"Returns the name of the mode specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_supported_key_sizes\": [\n        \"array mcrypt_enc_get_supported_key_sizes(resource td)\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_enc_is_block_algorithm\": [\n        \"bool mcrypt_enc_is_block_algorithm(resource td)\",\n        \"Returns TRUE if the alrogithm is a block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_algorithm_mode\": [\n        \"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_mode\": [\n        \"bool mcrypt_enc_is_block_mode(resource td)\",\n        \"Returns TRUE if the mode outputs blocks\"\n    ],\n    \"mcrypt_enc_self_test\": [\n        \"int mcrypt_enc_self_test(resource td)\",\n        \"This function runs the self test on the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_encrypt\": [\n        \"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_generic\": [\n        \"string mcrypt_generic(resource td, string data)\",\n        \"This function encrypts the plaintext\"\n    ],\n    \"mcrypt_generic_deinit\": [\n        \"bool mcrypt_generic_deinit(resource td)\",\n        \"This function terminates encrypt specified by the descriptor td\"\n    ],\n    \"mcrypt_generic_init\": [\n        \"int mcrypt_generic_init(resource td, string key, string iv)\",\n        \"This function initializes all buffers for the specific module\"\n    ],\n    \"mcrypt_get_block_size\": [\n        \"int mcrypt_get_block_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_cipher_name\": [\n        \"string mcrypt_get_cipher_name(string cipher)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_iv_size\": [\n        \"int mcrypt_get_iv_size(string cipher, string module)\",\n        \"Get the IV size of cipher (Usually the same as the blocksize)\"\n    ],\n    \"mcrypt_get_key_size\": [\n        \"int mcrypt_get_key_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_list_algorithms\": [\n        \"array mcrypt_list_algorithms([string lib_dir])\",\n        \"List all algorithms in \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_list_modes\": [\n        \"array mcrypt_list_modes([string lib_dir])\",\n        \"List all modes \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_module_close\": [\n        \"bool mcrypt_module_close(resource td)\",\n        \"Free the descriptor td\"\n    ],\n    \"mcrypt_module_get_algo_block_size\": [\n        \"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\n        \"Returns the block size of the algorithm\"\n    ],\n    \"mcrypt_module_get_algo_key_size\": [\n        \"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\n        \"Returns the maximum supported key size of the algorithm\"\n    ],\n    \"mcrypt_module_get_supported_key_sizes\": [\n        \"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_module_is_block_algorithm\": [\n        \"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\n        \"Returns TRUE if the algorithm is a block algorithm\"\n    ],\n    \"mcrypt_module_is_block_algorithm_mode\": [\n        \"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_module_is_block_mode\": [\n        \"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode outputs blocks of bytes\"\n    ],\n    \"mcrypt_module_open\": [\n        \"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\n        \"Opens the module of the algorithm and the mode to be used\"\n    ],\n    \"mcrypt_module_self_test\": [\n        \"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",\n        \"Does a self test of the module \\\"module\\\"\"\n    ],\n    \"mcrypt_ofb\": [\n        \"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"md5\": [\n        \"string md5(string str, [ bool raw_output])\",\n        \"Calculate the md5 hash of a string\"\n    ],\n    \"md5_file\": [\n        \"string md5_file(string filename [, bool raw_output])\",\n        \"Calculate the md5 hash of given filename\"\n    ],\n    \"mdecrypt_generic\": [\n        \"string mdecrypt_generic(resource td, string data)\",\n        \"This function decrypts the plaintext\"\n    ],\n    \"memory_get_peak_usage\": [\n        \"int memory_get_peak_usage([real_usage])\",\n        \"Returns the peak allocated by PHP memory\"\n    ],\n    \"memory_get_usage\": [\n        \"int memory_get_usage([real_usage])\",\n        \"Returns the allocated by PHP memory\"\n    ],\n    \"metaphone\": [\n        \"string metaphone(string text[, int phones])\",\n        \"Break english phrases down into their phonemes\"\n    ],\n    \"method_exists\": [\n        \"bool method_exists(object object, string method)\",\n        \"Checks if the class method exists\"\n    ],\n    \"mhash\": [\n        \"string mhash(int hash, string data [, string key])\",\n        \"Hash data with hash\"\n    ],\n    \"mhash_count\": [\n        \"int mhash_count()\",\n        \"Gets the number of available hashes\"\n    ],\n    \"mhash_get_block_size\": [\n        \"int mhash_get_block_size(int hash)\",\n        \"Gets the block size of hash\"\n    ],\n    \"mhash_get_hash_name\": [\n        \"string mhash_get_hash_name(int hash)\",\n        \"Gets the name of hash\"\n    ],\n    \"mhash_keygen_s2k\": [\n        \"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\n        \"Generates a key using hash functions\"\n    ],\n    \"microtime\": [\n        \"mixed microtime([bool get_as_float])\",\n        \"Returns either a string or a float containing the current time in seconds and microseconds\"\n    ],\n    \"mime_content_type\": [\n        \"string mime_content_type(string filename|resource stream)\",\n        \"Return content-type for file\"\n    ],\n    \"min\": [\n        \"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the lowest value in an array or a series of arguments\"\n    ],\n    \"mkdir\": [\n        \"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\n        \"Create a directory\"\n    ],\n    \"mktime\": [\n        \"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a date\"\n    ],\n    \"money_format\": [\n        \"string money_format(string format , float value)\",\n        \"Convert monetary value(s) to string\"\n    ],\n    \"move_uploaded_file\": [\n        \"bool move_uploaded_file(string path, string new_path)\",\n        \"Move a file if and only if it was created by an upload\"\n    ],\n    \"msg_get_queue\": [\n        \"resource msg_get_queue(int key [, int perms])\",\n        \"Attach to a message queue\"\n    ],\n    \"msg_queue_exists\": [\n        \"bool msg_queue_exists(int key)\",\n        \"Check whether a message queue exists\"\n    ],\n    \"msg_receive\": [\n        \"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_remove_queue\": [\n        \"bool msg_remove_queue(resource queue)\",\n        \"Destroy the queue\"\n    ],\n    \"msg_send\": [\n        \"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_set_queue\": [\n        \"bool msg_set_queue(resource queue, array data)\",\n        \"Set information for a message queue\"\n    ],\n    \"msg_stat_queue\": [\n        \"array msg_stat_queue(resource queue)\",\n        \"Returns information about a message queue\"\n    ],\n    \"msgfmt_create\": [\n        \"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\n        \"* Create formatter.\"\n    ],\n    \"msgfmt_format\": [\n        \"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_format_message\": [\n        \"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_get_error_code\": [\n        \"int msgfmt_get_error_code( MessageFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"msgfmt_get_error_message\": [\n        \"string msgfmt_get_error_message( MessageFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"msgfmt_get_locale\": [\n        \"string msgfmt_get_locale(MessageFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"msgfmt_get_pattern\": [\n        \"string msgfmt_get_pattern( MessageFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"msgfmt_parse\": [\n        \"array msgfmt_parse( MessageFormatter $nf, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"msgfmt_set_pattern\": [\n        \"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"mssql_bind\": [\n        \"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\n        \"Adds a parameter to a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_close\": [\n        \"bool mssql_close([resource conn_id])\",\n        \"Closes a connection to a MS-SQL server\"\n    ],\n    \"mssql_connect\": [\n        \"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a connection to a MS-SQL server\"\n    ],\n    \"mssql_data_seek\": [\n        \"bool mssql_data_seek(resource result_id, int offset)\",\n        \"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"\n    ],\n    \"mssql_execute\": [\n        \"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\n        \"Executes a stored procedure on a MS-SQL server database\"\n    ],\n    \"mssql_fetch_array\": [\n        \"array mssql_fetch_array(resource result_id [, int result_type])\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_assoc\": [\n        \"array mssql_fetch_assoc(resource result_id)\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_batch\": [\n        \"int mssql_fetch_batch(resource result_index)\",\n        \"Returns the next batch of records\"\n    ],\n    \"mssql_fetch_field\": [\n        \"object mssql_fetch_field(resource result_id [, int offset])\",\n        \"Gets information about certain fields in a query result\"\n    ],\n    \"mssql_fetch_object\": [\n        \"object mssql_fetch_object(resource result_id)\",\n        \"Returns a pseudo-object of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_row\": [\n        \"array mssql_fetch_row(resource result_id)\",\n        \"Returns an array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_field_length\": [\n        \"int mssql_field_length(resource result_id [, int offset])\",\n        \"Get the length of a MS-SQL field\"\n    ],\n    \"mssql_field_name\": [\n        \"string mssql_field_name(resource result_id [, int offset])\",\n        \"Returns the name of the field given by offset in the result set given by result_id\"\n    ],\n    \"mssql_field_seek\": [\n        \"bool mssql_field_seek(resource result_id, int offset)\",\n        \"Seeks to the specified field offset\"\n    ],\n    \"mssql_field_type\": [\n        \"string mssql_field_type(resource result_id [, int offset])\",\n        \"Returns the type of a field\"\n    ],\n    \"mssql_free_result\": [\n        \"bool mssql_free_result(resource result_index)\",\n        \"Free a MS-SQL result index\"\n    ],\n    \"mssql_free_statement\": [\n        \"bool mssql_free_statement(resource result_index)\",\n        \"Free a MS-SQL statement index\"\n    ],\n    \"mssql_get_last_message\": [\n        \"string mssql_get_last_message()\",\n        \"Gets the last message from the MS-SQL server\"\n    ],\n    \"mssql_guid_string\": [\n        \"string mssql_guid_string(string binary [,bool short_format])\",\n        \"Converts a 16 byte binary GUID to a string\"\n    ],\n    \"mssql_init\": [\n        \"int mssql_init(string sp_name [, resource conn_id])\",\n        \"Initializes a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_min_error_severity\": [\n        \"void mssql_min_error_severity(int severity)\",\n        \"Sets the lower error severity\"\n    ],\n    \"mssql_min_message_severity\": [\n        \"void mssql_min_message_severity(int severity)\",\n        \"Sets the lower message severity\"\n    ],\n    \"mssql_next_result\": [\n        \"bool mssql_next_result(resource result_id)\",\n        \"Move the internal result pointer to the next result\"\n    ],\n    \"mssql_num_fields\": [\n        \"int mssql_num_fields(resource mssql_result_index)\",\n        \"Returns the number of fields fetched in from the result id specified\"\n    ],\n    \"mssql_num_rows\": [\n        \"int mssql_num_rows(resource mssql_result_index)\",\n        \"Returns the number of rows fetched in from the result id specified\"\n    ],\n    \"mssql_pconnect\": [\n        \"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a persistent connection to a MS-SQL server\"\n    ],\n    \"mssql_query\": [\n        \"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\n        \"Perform an SQL query on a MS-SQL server database\"\n    ],\n    \"mssql_result\": [\n        \"string mssql_result(resource result_id, int row, mixed field)\",\n        \"Returns the contents of one cell from a MS-SQL result set\"\n    ],\n    \"mssql_rows_affected\": [\n        \"int mssql_rows_affected(resource conn_id)\",\n        \"Returns the number of records affected by the query\"\n    ],\n    \"mssql_select_db\": [\n        \"bool mssql_select_db(string database_name [, resource conn_id])\",\n        \"Select a MS-SQL database\"\n    ],\n    \"mt_getrandmax\": [\n        \"int mt_getrandmax()\",\n        \"Returns the maximum value a random number from Mersenne Twister can have\"\n    ],\n    \"mt_rand\": [\n        \"int mt_rand([int min, int max])\",\n        \"Returns a random number from Mersenne Twister\"\n    ],\n    \"mt_srand\": [\n        \"void mt_srand([int seed])\",\n        \"Seeds Mersenne Twister random number generator\"\n    ],\n    \"mysql_affected_rows\": [\n        \"int mysql_affected_rows([int link_identifier])\",\n        \"Gets number of affected rows in previous MySQL operation\"\n    ],\n    \"mysql_client_encoding\": [\n        \"string mysql_client_encoding([int link_identifier])\",\n        \"Returns the default character set for the current connection\"\n    ],\n    \"mysql_close\": [\n        \"bool mysql_close([int link_identifier])\",\n        \"Close a MySQL connection\"\n    ],\n    \"mysql_connect\": [\n        \"resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\n        \"Opens a connection to a MySQL Server\"\n    ],\n    \"mysql_create_db\": [\n        \"bool mysql_create_db(string database_name [, int link_identifier])\",\n        \"Create a MySQL database\"\n    ],\n    \"mysql_data_seek\": [\n        \"bool mysql_data_seek(resource result, int row_number)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysql_db_query\": [\n        \"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_drop_db\": [\n        \"bool mysql_drop_db(string database_name [, int link_identifier])\",\n        \"Drops (delete) a MySQL database\"\n    ],\n    \"mysql_errno\": [\n        \"int mysql_errno([int link_identifier])\",\n        \"Returns the number of the error message from previous MySQL operation\"\n    ],\n    \"mysql_error\": [\n        \"string mysql_error([int link_identifier])\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysql_escape_string\": [\n        \"string mysql_escape_string(string to_be_escaped)\",\n        \"Escape string for mysql query\"\n    ],\n    \"mysql_fetch_array\": [\n        \"array mysql_fetch_array(resource result [, int result_type])\",\n        \"Fetch a result row as an array (associative, numeric or both)\"\n    ],\n    \"mysql_fetch_assoc\": [\n        \"array mysql_fetch_assoc(resource result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysql_fetch_field\": [\n        \"object mysql_fetch_field(resource result [, int field_offset])\",\n        \"Gets column information from a result and return as an object\"\n    ],\n    \"mysql_fetch_lengths\": [\n        \"array mysql_fetch_lengths(resource result)\",\n        \"Gets max data size of each column in a result\"\n    ],\n    \"mysql_fetch_object\": [\n        \"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysql_fetch_row\": [\n        \"array mysql_fetch_row(resource result)\",\n        \"Gets a result row as an enumerated array\"\n    ],\n    \"mysql_field_flags\": [\n        \"string mysql_field_flags(resource result, int field_offset)\",\n        \"Gets the flags associated with the specified field in a result\"\n    ],\n    \"mysql_field_len\": [\n        \"int mysql_field_len(resource result, int field_offset)\",\n        \"Returns the length of the specified field\"\n    ],\n    \"mysql_field_name\": [\n        \"string mysql_field_name(resource result, int field_index)\",\n        \"Gets the name of the specified field in a result\"\n    ],\n    \"mysql_field_seek\": [\n        \"bool mysql_field_seek(resource result, int field_offset)\",\n        \"Sets result pointer to a specific field offset\"\n    ],\n    \"mysql_field_table\": [\n        \"string mysql_field_table(resource result, int field_offset)\",\n        \"Gets name of the table the specified field is in\"\n    ],\n    \"mysql_field_type\": [\n        \"string mysql_field_type(resource result, int field_offset)\",\n        \"Gets the type of the specified field in a result\"\n    ],\n    \"mysql_free_result\": [\n        \"bool mysql_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"mysql_get_client_info\": [\n        \"string mysql_get_client_info()\",\n        \"Returns a string that represents the client library version\"\n    ],\n    \"mysql_get_host_info\": [\n        \"string mysql_get_host_info([int link_identifier])\",\n        \"Returns a string describing the type of connection in use, including the server host name\"\n    ],\n    \"mysql_get_proto_info\": [\n        \"int mysql_get_proto_info([int link_identifier])\",\n        \"Returns the protocol version used by current connection\"\n    ],\n    \"mysql_get_server_info\": [\n        \"string mysql_get_server_info([int link_identifier])\",\n        \"Returns a string that represents the server version number\"\n    ],\n    \"mysql_info\": [\n        \"string mysql_info([int link_identifier])\",\n        \"Returns a string containing information about the most recent query\"\n    ],\n    \"mysql_insert_id\": [\n        \"int mysql_insert_id([int link_identifier])\",\n        \"Gets the ID generated from the previous INSERT operation\"\n    ],\n    \"mysql_list_dbs\": [\n        \"resource mysql_list_dbs([int link_identifier])\",\n        \"List databases available on a MySQL server\"\n    ],\n    \"mysql_list_fields\": [\n        \"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\n        \"List MySQL result fields\"\n    ],\n    \"mysql_list_processes\": [\n        \"resource mysql_list_processes([int link_identifier])\",\n        \"Returns a result set describing the current server threads\"\n    ],\n    \"mysql_list_tables\": [\n        \"resource mysql_list_tables(string database_name [, int link_identifier])\",\n        \"List tables in a MySQL database\"\n    ],\n    \"mysql_num_fields\": [\n        \"int mysql_num_fields(resource result)\",\n        \"Gets number of fields in a result\"\n    ],\n    \"mysql_num_rows\": [\n        \"int mysql_num_rows(resource result)\",\n        \"Gets number of rows in a result\"\n    ],\n    \"mysql_pconnect\": [\n        \"resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])\",\n        \"Opens a persistent connection to a MySQL Server\"\n    ],\n    \"mysql_ping\": [\n        \"bool mysql_ping([int link_identifier])\",\n        \"Ping a server connection. If no connection then reconnect.\"\n    ],\n    \"mysql_query\": [\n        \"resource mysql_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_real_escape_string\": [\n        \"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\n        \"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysql_result\": [\n        \"mixed mysql_result(resource result, int row [, mixed field])\",\n        \"Gets result data\"\n    ],\n    \"mysql_select_db\": [\n        \"bool mysql_select_db(string database_name [, int link_identifier])\",\n        \"Selects a MySQL database\"\n    ],\n    \"mysql_set_charset\": [\n        \"bool mysql_set_charset(string csname [, int link_identifier])\",\n        \"sets client character set\"\n    ],\n    \"mysql_stat\": [\n        \"string mysql_stat([int link_identifier])\",\n        \"Returns a string containing status information\"\n    ],\n    \"mysql_thread_id\": [\n        \"int mysql_thread_id([int link_identifier])\",\n        \"Returns the thread id of current connection\"\n    ],\n    \"mysql_unbuffered_query\": [\n        \"resource mysql_unbuffered_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL, without fetching and buffering the result rows\"\n    ],\n    \"mysqli_affected_rows\": [\n        \"mixed mysqli_affected_rows(object link)\",\n        \"Get number of affected rows in previous MySQL operation\"\n    ],\n    \"mysqli_autocommit\": [\n        \"bool mysqli_autocommit(object link, bool mode)\",\n        \"Turn auto commit on or of\"\n    ],\n    \"mysqli_cache_stats\": [\n        \"array mysqli_cache_stats()\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_change_user\": [\n        \"bool mysqli_change_user(object link, string user, string password, string database)\",\n        \"Change logged-in user of the active connection\"\n    ],\n    \"mysqli_character_set_name\": [\n        \"string mysqli_character_set_name(object link)\",\n        \"Returns the name of the character set used for this connection\"\n    ],\n    \"mysqli_close\": [\n        \"bool mysqli_close(object link)\",\n        \"Close connection\"\n    ],\n    \"mysqli_commit\": [\n        \"bool mysqli_commit(object link)\",\n        \"Commit outstanding actions and close transaction\"\n    ],\n    \"mysqli_connect\": [\n        \"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_connect_errno\": [\n        \"int mysqli_connect_errno()\",\n        \"Returns the numerical value of the error message from last connect command\"\n    ],\n    \"mysqli_connect_error\": [\n        \"string mysqli_connect_error()\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_data_seek\": [\n        \"bool mysqli_data_seek(object result, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_debug\": [\n        \"void mysqli_debug(string debug)\",\n        \"\"\n    ],\n    \"mysqli_dump_debug_info\": [\n        \"bool mysqli_dump_debug_info(object link)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_end\": [\n        \"void mysqli_embedded_server_end()\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_start\": [\n        \"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\n        \"initialize and start embedded server\"\n    ],\n    \"mysqli_errno\": [\n        \"int mysqli_errno(object link)\",\n        \"Returns the numerical value of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_error\": [\n        \"string mysqli_error(object link)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_fetch_all\": [\n        \"mixed mysqli_fetch_all(object result [,int resulttype])\",\n        \"Fetches all result rows as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_array\": [\n        \"mixed mysqli_fetch_array(object result [,int resulttype])\",\n        \"Fetch a result row as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_assoc\": [\n        \"mixed mysqli_fetch_assoc(object result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysqli_fetch_field\": [\n        \"mixed mysqli_fetch_field(object result)\",\n        \"Get column information from a result and return as an object\"\n    ],\n    \"mysqli_fetch_field_direct\": [\n        \"mixed mysqli_fetch_field_direct(object result, int offset)\",\n        \"Fetch meta-data for a single field\"\n    ],\n    \"mysqli_fetch_fields\": [\n        \"mixed mysqli_fetch_fields(object result)\",\n        \"Return array of objects containing field meta-data\"\n    ],\n    \"mysqli_fetch_lengths\": [\n        \"mixed mysqli_fetch_lengths(object result)\",\n        \"Get the length of each output in a result\"\n    ],\n    \"mysqli_fetch_object\": [\n        \"mixed mysqli_fetch_object(object result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysqli_fetch_row\": [\n        \"array mysqli_fetch_row(object result)\",\n        \"Get a result row as an enumerated array\"\n    ],\n    \"mysqli_field_count\": [\n        \"int mysqli_field_count(object link)\",\n        \"Fetch the number of fields returned by the last query for the given link\"\n    ],\n    \"mysqli_field_seek\": [\n        \"int mysqli_field_seek(object result, int fieldnr)\",\n        \"Set result pointer to a specified field offset\"\n    ],\n    \"mysqli_field_tell\": [\n        \"int mysqli_field_tell(object result)\",\n        \"Get current field offset of result pointer\"\n    ],\n    \"mysqli_free_result\": [\n        \"void mysqli_free_result(object result)\",\n        \"Free query result memory for the given result handle\"\n    ],\n    \"mysqli_get_charset\": [\n        \"object mysqli_get_charset(object link)\",\n        \"returns a character set object\"\n    ],\n    \"mysqli_get_client_info\": [\n        \"string mysqli_get_client_info()\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_client_stats\": [\n        \"array mysqli_get_client_stats()\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_client_version\": [\n        \"int mysqli_get_client_version()\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_connection_stats\": [\n        \"array mysqli_get_connection_stats()\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_host_info\": [\n        \"string mysqli_get_host_info(object link)\",\n        \"Get MySQL host info\"\n    ],\n    \"mysqli_get_proto_info\": [\n        \"int mysqli_get_proto_info(object link)\",\n        \"Get MySQL protocol information\"\n    ],\n    \"mysqli_get_server_info\": [\n        \"string mysqli_get_server_info(object link)\",\n        \"Get MySQL server info\"\n    ],\n    \"mysqli_get_server_version\": [\n        \"int mysqli_get_server_version(object link)\",\n        \"Return the MySQL version for the server referenced by the given link\"\n    ],\n    \"mysqli_get_warnings\": [\n        \"object mysqli_get_warnings(object link)\",\n        \"\"\n    ],\n    \"mysqli_info\": [\n        \"string mysqli_info(object link)\",\n        \"Get information about the most recent query\"\n    ],\n    \"mysqli_init\": [\n        \"resource mysqli_init()\",\n        \"Initialize mysqli and return a resource for use with mysql_real_connect\"\n    ],\n    \"mysqli_insert_id\": [\n        \"mixed mysqli_insert_id(object link)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_kill\": [\n        \"bool mysqli_kill(object link, int processid)\",\n        \"Kill a mysql process on the server\"\n    ],\n    \"mysqli_link_construct\": [\n        \"object mysqli_link_construct()\",\n        \"\"\n    ],\n    \"mysqli_more_results\": [\n        \"bool mysqli_more_results(object link)\",\n        \"check if there any more query results from a multi query\"\n    ],\n    \"mysqli_multi_query\": [\n        \"bool mysqli_multi_query(object link, string query)\",\n        \"allows to execute multiple queries\"\n    ],\n    \"mysqli_next_result\": [\n        \"bool mysqli_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_num_fields\": [\n        \"int mysqli_num_fields(object result)\",\n        \"Get number of fields in result\"\n    ],\n    \"mysqli_num_rows\": [\n        \"mixed mysqli_num_rows(object result)\",\n        \"Get number of rows in result\"\n    ],\n    \"mysqli_options\": [\n        \"bool mysqli_options(object link, int flags, mixed values)\",\n        \"Set options\"\n    ],\n    \"mysqli_ping\": [\n        \"bool mysqli_ping(object link)\",\n        \"Ping a server connection or reconnect if there is no connection\"\n    ],\n    \"mysqli_poll\": [\n        \"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\n        \"Poll connections\"\n    ],\n    \"mysqli_prepare\": [\n        \"mixed mysqli_prepare(object link, string query)\",\n        \"Prepare a SQL statement for execution\"\n    ],\n    \"mysqli_query\": [\n        \"mixed mysqli_query(object link, string query [,int resultmode])\",\n        \"\"\n    ],\n    \"mysqli_real_connect\": [\n        \"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_real_escape_string\": [\n        \"string mysqli_real_escape_string(object link, string escapestr)\",\n        \"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysqli_real_query\": [\n        \"bool mysqli_real_query(object link, string query)\",\n        \"Binary-safe version of mysql_query()\"\n    ],\n    \"mysqli_reap_async_query\": [\n        \"int mysqli_reap_async_query(object link)\",\n        \"Poll connections\"\n    ],\n    \"mysqli_refresh\": [\n        \"bool mysqli_refresh(object link, long options)\",\n        \"Flush tables or caches, or reset replication server information\"\n    ],\n    \"mysqli_report\": [\n        \"bool mysqli_report(int flags)\",\n        \"sets report level\"\n    ],\n    \"mysqli_rollback\": [\n        \"bool mysqli_rollback(object link)\",\n        \"Undo actions from current transaction\"\n    ],\n    \"mysqli_select_db\": [\n        \"bool mysqli_select_db(object link, string dbname)\",\n        \"Select a MySQL database\"\n    ],\n    \"mysqli_set_charset\": [\n        \"bool mysqli_set_charset(object link, string csname)\",\n        \"sets client character set\"\n    ],\n    \"mysqli_set_local_infile_default\": [\n        \"void mysqli_set_local_infile_default(object link)\",\n        \"unsets user defined handler for load local infile command\"\n    ],\n    \"mysqli_set_local_infile_handler\": [\n        \"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\n        \"Set callback functions for LOAD DATA LOCAL INFILE\"\n    ],\n    \"mysqli_sqlstate\": [\n        \"string mysqli_sqlstate(object link)\",\n        \"Returns the SQLSTATE error from previous MySQL operation\"\n    ],\n    \"mysqli_ssl_set\": [\n        \"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\n        \"\"\n    ],\n    \"mysqli_stat\": [\n        \"mixed mysqli_stat(object link)\",\n        \"Get current system status\"\n    ],\n    \"mysqli_stmt_affected_rows\": [\n        \"mixed mysqli_stmt_affected_rows(object stmt)\",\n        \"Return the number of rows affected in the last query for the given link\"\n    ],\n    \"mysqli_stmt_attr_get\": [\n        \"int mysqli_stmt_attr_get(object stmt, long attr)\",\n        \"\"\n    ],\n    \"mysqli_stmt_attr_set\": [\n        \"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\n        \"\"\n    ],\n    \"mysqli_stmt_bind_param\": [\n        \"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\n        \"Bind variables to a prepared statement as parameters\"\n    ],\n    \"mysqli_stmt_bind_result\": [\n        \"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\n        \"Bind variables to a prepared statement for result storage\"\n    ],\n    \"mysqli_stmt_close\": [\n        \"bool mysqli_stmt_close(object stmt)\",\n        \"Close statement\"\n    ],\n    \"mysqli_stmt_data_seek\": [\n        \"void mysqli_stmt_data_seek(object stmt, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_stmt_errno\": [\n        \"int mysqli_stmt_errno(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_error\": [\n        \"string mysqli_stmt_error(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_execute\": [\n        \"bool mysqli_stmt_execute(object stmt)\",\n        \"Execute a prepared statement\"\n    ],\n    \"mysqli_stmt_fetch\": [\n        \"mixed mysqli_stmt_fetch(object stmt)\",\n        \"Fetch results from a prepared statement into the bound variables\"\n    ],\n    \"mysqli_stmt_field_count\": [\n        \"int mysqli_stmt_field_count(object stmt) {\",\n        \"Return the number of result columns for the given statement\"\n    ],\n    \"mysqli_stmt_free_result\": [\n        \"void mysqli_stmt_free_result(object stmt)\",\n        \"Free stored result memory for the given statement handle\"\n    ],\n    \"mysqli_stmt_get_result\": [\n        \"object mysqli_stmt_get_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_stmt_get_warnings\": [\n        \"object mysqli_stmt_get_warnings(object link)\",\n        \"\"\n    ],\n    \"mysqli_stmt_init\": [\n        \"mixed mysqli_stmt_init(object link)\",\n        \"Initialize statement object\"\n    ],\n    \"mysqli_stmt_insert_id\": [\n        \"mixed mysqli_stmt_insert_id(object stmt)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_stmt_next_result\": [\n        \"bool mysqli_stmt_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_stmt_num_rows\": [\n        \"mixed mysqli_stmt_num_rows(object stmt)\",\n        \"Return the number of rows in statements result set\"\n    ],\n    \"mysqli_stmt_param_count\": [\n        \"int mysqli_stmt_param_count(object stmt)\",\n        \"Return the number of parameter for the given statement\"\n    ],\n    \"mysqli_stmt_prepare\": [\n        \"bool mysqli_stmt_prepare(object stmt, string query)\",\n        \"prepare server side statement with query\"\n    ],\n    \"mysqli_stmt_reset\": [\n        \"bool mysqli_stmt_reset(object stmt)\",\n        \"reset a prepared statement\"\n    ],\n    \"mysqli_stmt_result_metadata\": [\n        \"mixed mysqli_stmt_result_metadata(object stmt)\",\n        \"return result set from statement\"\n    ],\n    \"mysqli_stmt_send_long_data\": [\n        \"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\n        \"\"\n    ],\n    \"mysqli_stmt_sqlstate\": [\n        \"string mysqli_stmt_sqlstate(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_store_result\": [\n        \"bool mysqli_stmt_store_result(stmt)\",\n        \"\"\n    ],\n    \"mysqli_store_result\": [\n        \"object mysqli_store_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_thread_id\": [\n        \"int mysqli_thread_id(object link)\",\n        \"Return the current thread ID\"\n    ],\n    \"mysqli_thread_safe\": [\n        \"bool mysqli_thread_safe()\",\n        \"Return whether thread safety is given or not\"\n    ],\n    \"mysqli_use_result\": [\n        \"mixed mysqli_use_result(object link)\",\n        \"Directly retrieve query results - do not buffer results on client side\"\n    ],\n    \"mysqli_warning_count\": [\n        \"int mysqli_warning_count(object link)\",\n        \"Return number of warnings from the last query for the given link\"\n    ],\n    \"natcasesort\": [\n        \"void natcasesort(array &array_arg)\",\n        \"Sort an array using case-insensitive natural sort\"\n    ],\n    \"natsort\": [\n        \"void natsort(array &array_arg)\",\n        \"Sort an array using natural sort\"\n    ],\n    \"next\": [\n        \"mixed next(array array_arg)\",\n        \"Move array argument's internal pointer to the next element and return it\"\n    ],\n    \"ngettext\": [\n        \"string ngettext(string MSGID1, string MSGID2, int N)\",\n        \"Plural version of gettext()\"\n    ],\n    \"nl2br\": [\n        \"string nl2br(string str [, bool is_xhtml])\",\n        \"Converts newlines to HTML line breaks\"\n    ],\n    \"nl_langinfo\": [\n        \"string nl_langinfo(int item)\",\n        \"Query language and locale information\"\n    ],\n    \"normalizer_is_normalize\": [\n        \"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Test if a string is in a given normalization form.\"\n    ],\n    \"normalizer_normalize\": [\n        \"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Normalize a string.\"\n    ],\n    \"nsapi_request_headers\": [\n        \"array nsapi_request_headers()\",\n        \"Get all headers from the request\"\n    ],\n    \"nsapi_response_headers\": [\n        \"array nsapi_response_headers()\",\n        \"Get all headers from the response\"\n    ],\n    \"nsapi_virtual\": [\n        \"bool nsapi_virtual(string uri)\",\n        \"Perform an NSAPI sub-request\"\n    ],\n    \"number_format\": [\n        \"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\n        \"Formats a number with grouped thousands\"\n    ],\n    \"numfmt_create\": [\n        \"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\n        \"* Create number formatter.\"\n    ],\n    \"numfmt_format\": [\n        \"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\n        \"* Format a number.\"\n    ],\n    \"numfmt_format_currency\": [\n        \"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\n        \"* Format a number as currency.\"\n    ],\n    \"numfmt_get_attribute\": [\n        \"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_get_error_code\": [\n        \"int numfmt_get_error_code( NumberFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"numfmt_get_error_message\": [\n        \"string numfmt_get_error_message( NumberFormatter $nf )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"numfmt_get_locale\": [\n        \"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\n        \"* Get formatter locale.\"\n    ],\n    \"numfmt_get_pattern\": [\n        \"string numfmt_get_pattern( NumberFormatter $nf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"numfmt_get_symbol\": [\n        \"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter symbol value.\"\n    ],\n    \"numfmt_get_text_attribute\": [\n        \"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_parse\": [\n        \"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\n        \"* Parse a number.\"\n    ],\n    \"numfmt_parse_currency\": [\n        \"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\n        \"* Parse a number as currency.\"\n    ],\n    \"numfmt_parse_message\": [\n        \"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"numfmt_set_attribute\": [\n        \"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_set_pattern\": [\n        \"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"numfmt_set_symbol\": [\n        \"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\n        \"* Set formatter symbol value.\"\n    ],\n    \"numfmt_set_text_attribute\": [\n        \"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"ob_clean\": [\n        \"bool ob_clean()\",\n        \"Clean (delete) the current output buffer\"\n    ],\n    \"ob_end_clean\": [\n        \"bool ob_end_clean()\",\n        \"Clean the output buffer, and delete current output buffer\"\n    ],\n    \"ob_end_flush\": [\n        \"bool ob_end_flush()\",\n        \"Flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_flush\": [\n        \"bool ob_flush()\",\n        \"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"\n    ],\n    \"ob_get_clean\": [\n        \"bool ob_get_clean()\",\n        \"Get current buffer contents and delete current output buffer\"\n    ],\n    \"ob_get_contents\": [\n        \"string ob_get_contents()\",\n        \"Return the contents of the output buffer\"\n    ],\n    \"ob_get_flush\": [\n        \"bool ob_get_flush()\",\n        \"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_get_length\": [\n        \"int ob_get_length()\",\n        \"Return the length of the output buffer\"\n    ],\n    \"ob_get_level\": [\n        \"int ob_get_level()\",\n        \"Return the nesting level of the output buffer\"\n    ],\n    \"ob_get_status\": [\n        \"false|array ob_get_status([bool full_status])\",\n        \"Return the status of the active or all output buffers\"\n    ],\n    \"ob_gzhandler\": [\n        \"string ob_gzhandler(string str, int mode)\",\n        \"Encode str based on accept-encoding setting - designed to be called from ob_start()\"\n    ],\n    \"ob_iconv_handler\": [\n        \"string ob_iconv_handler(string contents, int status)\",\n        \"Returns str in output buffer converted to the iconv.output_encoding character set\"\n    ],\n    \"ob_implicit_flush\": [\n        \"void ob_implicit_flush([int flag])\",\n        \"Turn implicit flush on/off and is equivalent to calling flush() after every output call\"\n    ],\n    \"ob_list_handlers\": [\n        \"false|array ob_list_handlers()\",\n        \"*  List all output_buffers in an array\"\n    ],\n    \"ob_start\": [\n        \"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\n        \"Turn on Output Buffering (specifying an optional output handler).\"\n    ],\n    \"oci_bind_array_by_name\": [\n        \"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\n        \"Bind a PHP array to an Oracle PL/SQL type by name\"\n    ],\n    \"oci_bind_by_name\": [\n        \"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\n        \"Bind a PHP variable to an Oracle placeholder by name\"\n    ],\n    \"oci_cancel\": [\n        \"bool oci_cancel(resource stmt)\",\n        \"Cancel reading from a cursor\"\n    ],\n    \"oci_close\": [\n        \"bool oci_close(resource connection)\",\n        \"Disconnect from database\"\n    ],\n    \"oci_collection_append\": [\n        \"bool oci_collection_append(string value)\",\n        \"Append an object to the collection\"\n    ],\n    \"oci_collection_assign\": [\n        \"bool oci_collection_assign(object from)\",\n        \"Assign a collection from another existing collection\"\n    ],\n    \"oci_collection_element_assign\": [\n        \"bool oci_collection_element_assign(int index, string val)\",\n        \"Assign element val to collection at index ndx\"\n    ],\n    \"oci_collection_element_get\": [\n        \"string oci_collection_element_get(int ndx)\",\n        \"Retrieve the value at collection index ndx\"\n    ],\n    \"oci_collection_max\": [\n        \"int oci_collection_max()\",\n        \"Return the max value of a collection. For a varray this is the maximum length of the array\"\n    ],\n    \"oci_collection_size\": [\n        \"int oci_collection_size()\",\n        \"Return the size of a collection\"\n    ],\n    \"oci_collection_trim\": [\n        \"bool oci_collection_trim(int num)\",\n        \"Trim num elements from the end of a collection\"\n    ],\n    \"oci_commit\": [\n        \"bool oci_commit(resource connection)\",\n        \"Commit the current context\"\n    ],\n    \"oci_connect\": [\n        \"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_define_by_name\": [\n        \"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\n        \"Define a PHP variable to an Oracle column by name\"\n    ],\n    \"oci_error\": [\n        \"array oci_error([resource stmt|connection|global])\",\n        \"Return the last error of stmt|connection|global. If no error happened returns false.\"\n    ],\n    \"oci_execute\": [\n        \"bool oci_execute(resource stmt [, int mode])\",\n        \"Execute a parsed statement\"\n    ],\n    \"oci_fetch\": [\n        \"bool oci_fetch(resource stmt)\",\n        \"Prepare a new row of data for reading\"\n    ],\n    \"oci_fetch_all\": [\n        \"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\n        \"Fetch all rows of result data into an array\"\n    ],\n    \"oci_fetch_array\": [\n        \"array oci_fetch_array( resource stmt [, int mode ])\",\n        \"Fetch a result row as an array\"\n    ],\n    \"oci_fetch_assoc\": [\n        \"array oci_fetch_assoc( resource stmt )\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"oci_fetch_object\": [\n        \"object oci_fetch_object( resource stmt )\",\n        \"Fetch a result row as an object\"\n    ],\n    \"oci_fetch_row\": [\n        \"array oci_fetch_row( resource stmt )\",\n        \"Fetch a result row as an enumerated array\"\n    ],\n    \"oci_field_is_null\": [\n        \"bool oci_field_is_null(resource stmt, int col)\",\n        \"Tell whether a column is NULL\"\n    ],\n    \"oci_field_name\": [\n        \"string oci_field_name(resource stmt, int col)\",\n        \"Tell the name of a column\"\n    ],\n    \"oci_field_precision\": [\n        \"int oci_field_precision(resource stmt, int col)\",\n        \"Tell the precision of a column\"\n    ],\n    \"oci_field_scale\": [\n        \"int oci_field_scale(resource stmt, int col)\",\n        \"Tell the scale of a column\"\n    ],\n    \"oci_field_size\": [\n        \"int oci_field_size(resource stmt, int col)\",\n        \"Tell the maximum data size of a column\"\n    ],\n    \"oci_field_type\": [\n        \"mixed oci_field_type(resource stmt, int col)\",\n        \"Tell the data type of a column\"\n    ],\n    \"oci_field_type_raw\": [\n        \"int oci_field_type_raw(resource stmt, int col)\",\n        \"Tell the raw oracle data type of a column\"\n    ],\n    \"oci_free_collection\": [\n        \"bool oci_free_collection()\",\n        \"Deletes collection object\"\n    ],\n    \"oci_free_descriptor\": [\n        \"bool oci_free_descriptor()\",\n        \"Deletes large object description\"\n    ],\n    \"oci_free_statement\": [\n        \"bool oci_free_statement(resource stmt)\",\n        \"Free all resources associated with a statement\"\n    ],\n    \"oci_internal_debug\": [\n        \"void oci_internal_debug(int onoff)\",\n        \"Toggle internal debugging output for the OCI extension\"\n    ],\n    \"oci_lob_append\": [\n        \"bool oci_lob_append( object lob )\",\n        \"Appends data from a LOB to another LOB\"\n    ],\n    \"oci_lob_close\": [\n        \"bool oci_lob_close()\",\n        \"Closes lob descriptor\"\n    ],\n    \"oci_lob_copy\": [\n        \"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\n        \"Copies data from a LOB to another LOB\"\n    ],\n    \"oci_lob_eof\": [\n        \"bool oci_lob_eof()\",\n        \"Checks if EOF is reached\"\n    ],\n    \"oci_lob_erase\": [\n        \"int oci_lob_erase( [ int offset [, int length ] ] )\",\n        \"Erases a specified portion of the internal LOB, starting at a specified offset\"\n    ],\n    \"oci_lob_export\": [\n        \"bool oci_lob_export([string filename [, int start [, int length]]])\",\n        \"Writes a large object into a file\"\n    ],\n    \"oci_lob_flush\": [\n        \"bool oci_lob_flush( [ int flag ] )\",\n        \"Flushes the LOB buffer\"\n    ],\n    \"oci_lob_import\": [\n        \"bool oci_lob_import( string filename )\",\n        \"Loads file into a LOB\"\n    ],\n    \"oci_lob_is_equal\": [\n        \"bool oci_lob_is_equal( object lob1, object lob2 )\",\n        \"Tests to see if two LOB/FILE locators are equal\"\n    ],\n    \"oci_lob_load\": [\n        \"string oci_lob_load()\",\n        \"Loads a large object\"\n    ],\n    \"oci_lob_read\": [\n        \"string oci_lob_read( int length )\",\n        \"Reads particular part of a large object\"\n    ],\n    \"oci_lob_rewind\": [\n        \"bool oci_lob_rewind()\",\n        \"Rewind pointer of a LOB\"\n    ],\n    \"oci_lob_save\": [\n        \"bool oci_lob_save( string data [, int offset ])\",\n        \"Saves a large object\"\n    ],\n    \"oci_lob_seek\": [\n        \"bool oci_lob_seek( int offset [, int whence ])\",\n        \"Moves the pointer of a LOB\"\n    ],\n    \"oci_lob_size\": [\n        \"int oci_lob_size()\",\n        \"Returns size of a large object\"\n    ],\n    \"oci_lob_tell\": [\n        \"int oci_lob_tell()\",\n        \"Tells LOB pointer position\"\n    ],\n    \"oci_lob_truncate\": [\n        \"bool oci_lob_truncate( [ int length ])\",\n        \"Truncates a LOB\"\n    ],\n    \"oci_lob_write\": [\n        \"int oci_lob_write( string string [, int length ])\",\n        \"Writes data to current position of a LOB\"\n    ],\n    \"oci_lob_write_temporary\": [\n        \"bool oci_lob_write_temporary(string var [, int lob_type])\",\n        \"Writes temporary blob\"\n    ],\n    \"oci_new_collection\": [\n        \"object oci_new_collection(resource connection, string tdo [, string schema])\",\n        \"Initialize a new collection\"\n    ],\n    \"oci_new_connect\": [\n        \"resource oci_new_connect(string user, string pass [, string db])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_new_cursor\": [\n        \"resource oci_new_cursor(resource connection)\",\n        \"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"\n    ],\n    \"oci_new_descriptor\": [\n        \"object oci_new_descriptor(resource connection [, int type])\",\n        \"Initialize a new empty descriptor LOB/FILE (LOB is default)\"\n    ],\n    \"oci_num_fields\": [\n        \"int oci_num_fields(resource stmt)\",\n        \"Return the number of result columns in a statement\"\n    ],\n    \"oci_num_rows\": [\n        \"int oci_num_rows(resource stmt)\",\n        \"Return the row count of an OCI statement\"\n    ],\n    \"oci_parse\": [\n        \"resource oci_parse(resource connection, string query)\",\n        \"Parse a query and return a statement\"\n    ],\n    \"oci_password_change\": [\n        \"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\n        \"Changes the password of an account\"\n    ],\n    \"oci_pconnect\": [\n        \"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\n        \"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"\n    ],\n    \"oci_result\": [\n        \"string oci_result(resource stmt, mixed column)\",\n        \"Return a single column of result data\"\n    ],\n    \"oci_rollback\": [\n        \"bool oci_rollback(resource connection)\",\n        \"Rollback the current context\"\n    ],\n    \"oci_server_version\": [\n        \"string oci_server_version(resource connection)\",\n        \"Return a string containing server version information\"\n    ],\n    \"oci_set_action\": [\n        \"bool oci_set_action(resource connection, string value)\",\n        \"Sets the action attribute on the connection\"\n    ],\n    \"oci_set_client_identifier\": [\n        \"bool oci_set_client_identifier(resource connection, string value)\",\n        \"Sets the client identifier attribute on the connection\"\n    ],\n    \"oci_set_client_info\": [\n        \"bool oci_set_client_info(resource connection, string value)\",\n        \"Sets the client info attribute on the connection\"\n    ],\n    \"oci_set_edition\": [\n        \"bool oci_set_edition(string value)\",\n        \"Sets the edition attribute for all subsequent connections created\"\n    ],\n    \"oci_set_module_name\": [\n        \"bool oci_set_module_name(resource connection, string value)\",\n        \"Sets the module attribute on the connection\"\n    ],\n    \"oci_set_prefetch\": [\n        \"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\n        \"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"\n    ],\n    \"oci_statement_type\": [\n        \"string oci_statement_type(resource stmt)\",\n        \"Return the query type of an OCI statement\"\n    ],\n    \"ocifetchinto\": [\n        \"int ocifetchinto(resource stmt, array &output [, int mode])\",\n        \"Fetch a row of result data into an array\"\n    ],\n    \"ocigetbufferinglob\": [\n        \"bool ocigetbufferinglob()\",\n        \"Returns current state of buffering for a LOB\"\n    ],\n    \"ocisetbufferinglob\": [\n        \"bool ocisetbufferinglob( bool flag )\",\n        \"Enables/disables buffering for a LOB\"\n    ],\n    \"octdec\": [\n        \"int octdec(string octal_number)\",\n        \"Returns the decimal equivalent of an octal string\"\n    ],\n    \"odbc_autocommit\": [\n        \"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\n        \"Toggle autocommit mode or get status\"\n    ],\n    \"odbc_binmode\": [\n        \"bool odbc_binmode(int result_id, int mode)\",\n        \"Handle binary column data\"\n    ],\n    \"odbc_close\": [\n        \"void odbc_close(resource connection_id)\",\n        \"Close an ODBC connection\"\n    ],\n    \"odbc_close_all\": [\n        \"void odbc_close_all()\",\n        \"Close all ODBC connections\"\n    ],\n    \"odbc_columnprivileges\": [\n        \"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\n        \"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"\n    ],\n    \"odbc_columns\": [\n        \"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\n        \"Returns a result identifier that can be used to fetch a list of column names in specified tables\"\n    ],\n    \"odbc_commit\": [\n        \"bool odbc_commit(resource connection_id)\",\n        \"Commit an ODBC transaction\"\n    ],\n    \"odbc_connect\": [\n        \"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\n        \"Connect to a datasource\"\n    ],\n    \"odbc_cursor\": [\n        \"string odbc_cursor(resource result_id)\",\n        \"Get cursor name\"\n    ],\n    \"odbc_data_source\": [\n        \"array odbc_data_source(resource connection_id, int fetch_type)\",\n        \"Return information about the currently connected data source\"\n    ],\n    \"odbc_error\": [\n        \"string odbc_error([resource connection_id])\",\n        \"Get the last error code\"\n    ],\n    \"odbc_errormsg\": [\n        \"string odbc_errormsg([resource connection_id])\",\n        \"Get the last error message\"\n    ],\n    \"odbc_exec\": [\n        \"resource odbc_exec(resource connection_id, string query [, int flags])\",\n        \"Prepare and execute an SQL statement\"\n    ],\n    \"odbc_execute\": [\n        \"bool odbc_execute(resource result_id [, array parameters_array])\",\n        \"Execute a prepared statement\"\n    ],\n    \"odbc_fetch_array\": [\n        \"array odbc_fetch_array(int result [, int rownumber])\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"odbc_fetch_into\": [\n        \"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\n        \"Fetch one result row into an array\"\n    ],\n    \"odbc_fetch_object\": [\n        \"object odbc_fetch_object(int result [, int rownumber])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"odbc_fetch_row\": [\n        \"bool odbc_fetch_row(resource result_id [, int row_number])\",\n        \"Fetch a row\"\n    ],\n    \"odbc_field_len\": [\n        \"int odbc_field_len(resource result_id, int field_number)\",\n        \"Get the length (precision) of a column\"\n    ],\n    \"odbc_field_name\": [\n        \"string odbc_field_name(resource result_id, int field_number)\",\n        \"Get a column name\"\n    ],\n    \"odbc_field_num\": [\n        \"int odbc_field_num(resource result_id, string field_name)\",\n        \"Return column number\"\n    ],\n    \"odbc_field_scale\": [\n        \"int odbc_field_scale(resource result_id, int field_number)\",\n        \"Get the scale of a column\"\n    ],\n    \"odbc_field_type\": [\n        \"string odbc_field_type(resource result_id, int field_number)\",\n        \"Get the datatype of a column\"\n    ],\n    \"odbc_foreignkeys\": [\n        \"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\n        \"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"\n    ],\n    \"odbc_free_result\": [\n        \"bool odbc_free_result(resource result_id)\",\n        \"Free resources associated with a result\"\n    ],\n    \"odbc_gettypeinfo\": [\n        \"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\n        \"Returns a result identifier containing information about data types supported by the data source\"\n    ],\n    \"odbc_longreadlen\": [\n        \"bool odbc_longreadlen(int result_id, int length)\",\n        \"Handle LONG columns\"\n    ],\n    \"odbc_next_result\": [\n        \"bool odbc_next_result(resource result_id)\",\n        \"Checks if multiple results are avaiable\"\n    ],\n    \"odbc_num_fields\": [\n        \"int odbc_num_fields(resource result_id)\",\n        \"Get number of columns in a result\"\n    ],\n    \"odbc_num_rows\": [\n        \"int odbc_num_rows(resource result_id)\",\n        \"Get number of rows in a result\"\n    ],\n    \"odbc_pconnect\": [\n        \"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\n        \"Establish a persistent connection to a datasource\"\n    ],\n    \"odbc_prepare\": [\n        \"resource odbc_prepare(resource connection_id, string query)\",\n        \"Prepares a statement for execution\"\n    ],\n    \"odbc_primarykeys\": [\n        \"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\n        \"Returns a result identifier listing the column names that comprise the primary key for a table\"\n    ],\n    \"odbc_procedurecolumns\": [\n        \"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\n        \"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"\n    ],\n    \"odbc_procedures\": [\n        \"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\n        \"Returns a result identifier containg the list of procedure names in a datasource\"\n    ],\n    \"odbc_result\": [\n        \"mixed odbc_result(resource result_id, mixed field)\",\n        \"Get result data\"\n    ],\n    \"odbc_result_all\": [\n        \"int odbc_result_all(resource result_id [, string format])\",\n        \"Print result as HTML table\"\n    ],\n    \"odbc_rollback\": [\n        \"bool odbc_rollback(resource connection_id)\",\n        \"Rollback a transaction\"\n    ],\n    \"odbc_setoption\": [\n        \"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\n        \"Sets connection or statement options\"\n    ],\n    \"odbc_specialcolumns\": [\n        \"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\n        \"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"\n    ],\n    \"odbc_statistics\": [\n        \"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\n        \"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"\n    ],\n    \"odbc_tableprivileges\": [\n        \"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\n        \"Returns a result identifier containing a list of tables and the privileges associated with each table\"\n    ],\n    \"odbc_tables\": [\n        \"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\n        \"Call the SQLTables function\"\n    ],\n    \"opendir\": [\n        \"mixed opendir(string path[, resource context])\",\n        \"Open a directory and return a dir_handle\"\n    ],\n    \"openlog\": [\n        \"bool openlog(string ident, int option, int facility)\",\n        \"Open connection to system logger\"\n    ],\n    \"openssl_csr_export\": [\n        \"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\n        \"Exports a CSR to file or a var\"\n    ],\n    \"openssl_csr_export_to_file\": [\n        \"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\n        \"Exports a CSR to file\"\n    ],\n    \"openssl_csr_get_public_key\": [\n        \"mixed openssl_csr_get_public_key(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_get_subject\": [\n        \"mixed openssl_csr_get_subject(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_new\": [\n        \"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\n        \"Generates a privkey and CSR\"\n    ],\n    \"openssl_csr_sign\": [\n        \"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\n        \"Signs a cert with another CERT\"\n    ],\n    \"openssl_decrypt\": [\n        \"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\n        \"Takes raw or base64 encoded string and dectupt it using given method and key\"\n    ],\n    \"openssl_dh_compute_key\": [\n        \"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\n        \"Computes shared sicret for public value of remote DH key and local DH key\"\n    ],\n    \"openssl_digest\": [\n        \"string openssl_digest(string data, string method [, bool raw_output=false])\",\n        \"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"\n    ],\n    \"openssl_encrypt\": [\n        \"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\n        \"Encrypts given data with given method and key, returns raw or base64 encoded string\"\n    ],\n    \"openssl_error_string\": [\n        \"mixed openssl_error_string()\",\n        \"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"\n    ],\n    \"openssl_get_cipher_methods\": [\n        \"array openssl_get_cipher_methods([bool aliases = false])\",\n        \"Return array of available cipher methods\"\n    ],\n    \"openssl_get_md_methods\": [\n        \"array openssl_get_md_methods([bool aliases = false])\",\n        \"Return array of available digest methods\"\n    ],\n    \"openssl_open\": [\n        \"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\n        \"Opens data\"\n    ],\n    \"openssl_pkcs12_export\": [\n        \"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS12 to a var\"\n    ],\n    \"openssl_pkcs12_export_to_file\": [\n        \"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS to file\"\n    ],\n    \"openssl_pkcs12_read\": [\n        \"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\n        \"Parses a PKCS12 to an array\"\n    ],\n    \"openssl_pkcs7_decrypt\": [\n        \"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\n        \"Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"\n    ],\n    \"openssl_pkcs7_encrypt\": [\n        \"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\n        \"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"\n    ],\n    \"openssl_pkcs7_sign\": [\n        \"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\n        \"Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"\n    ],\n    \"openssl_pkcs7_verify\": [\n        \"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\n        \"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"\n    ],\n    \"openssl_pkey_export\": [\n        \"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\n        \"Gets an exportable representation of a key into a string or file\"\n    ],\n    \"openssl_pkey_export_to_file\": [\n        \"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\n        \"Gets an exportable representation of a key into a file\"\n    ],\n    \"openssl_pkey_free\": [\n        \"void openssl_pkey_free(int key)\",\n        \"Frees a key\"\n    ],\n    \"openssl_pkey_get_details\": [\n        \"resource openssl_pkey_get_details(resource key)\",\n        \"returns an array with the key details (bits, pkey, type)\"\n    ],\n    \"openssl_pkey_get_private\": [\n        \"int openssl_pkey_get_private(string key [, string passphrase])\",\n        \"Gets private keys\"\n    ],\n    \"openssl_pkey_get_public\": [\n        \"int openssl_pkey_get_public(mixed cert)\",\n        \"Gets public key from X.509 certificate\"\n    ],\n    \"openssl_pkey_new\": [\n        \"resource openssl_pkey_new([array configargs])\",\n        \"Generates a new private key\"\n    ],\n    \"openssl_private_decrypt\": [\n        \"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\n        \"Decrypts data with private key\"\n    ],\n    \"openssl_private_encrypt\": [\n        \"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with private key\"\n    ],\n    \"openssl_public_decrypt\": [\n        \"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\n        \"Decrypts data with public key\"\n    ],\n    \"openssl_public_encrypt\": [\n        \"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with public key\"\n    ],\n    \"openssl_random_pseudo_bytes\": [\n        \"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\n        \"Returns a string of the length specified filled with random pseudo bytes\"\n    ],\n    \"openssl_seal\": [\n        \"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\n        \"Seals data\"\n    ],\n    \"openssl_sign\": [\n        \"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\n        \"Signs data\"\n    ],\n    \"openssl_verify\": [\n        \"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\n        \"Verifys data\"\n    ],\n    \"openssl_x509_check_private_key\": [\n        \"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\n        \"Checks if a private key corresponds to a CERT\"\n    ],\n    \"openssl_x509_checkpurpose\": [\n        \"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\n        \"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"\n    ],\n    \"openssl_x509_export\": [\n        \"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_export_to_file\": [\n        \"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_free\": [\n        \"void openssl_x509_free(resource x509)\",\n        \"Frees X.509 certificates\"\n    ],\n    \"openssl_x509_parse\": [\n        \"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\n        \"Returns an array of the fields/values of the CERT\"\n    ],\n    \"openssl_x509_read\": [\n        \"resource openssl_x509_read(mixed cert)\",\n        \"Reads X.509 certificates\"\n    ],\n    \"ord\": [\n        \"int ord(string character)\",\n        \"Returns ASCII value of character\"\n    ],\n    \"output_add_rewrite_var\": [\n        \"bool output_add_rewrite_var(string name, string value)\",\n        \"Add URL rewriter values\"\n    ],\n    \"output_reset_rewrite_vars\": [\n        \"bool output_reset_rewrite_vars()\",\n        \"Reset(clear) URL rewriter values\"\n    ],\n    \"pack\": [\n        \"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Takes one or more arguments and packs them into a binary string according to the format argument\"\n    ],\n    \"parse_ini_file\": [\n        \"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration file\"\n    ],\n    \"parse_ini_string\": [\n        \"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration string\"\n    ],\n    \"parse_locale\": [\n        \"static array parse_locale($locale)\",\n        \"* parses a locale-id into an array the different parts of it\"\n    ],\n    \"parse_str\": [\n        \"void parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"parse_url\": [\n        \"mixed parse_url(string url, [int url_component])\",\n        \"Parse a URL and return its components\"\n    ],\n    \"passthru\": [\n        \"void passthru(string command [, int &return_value])\",\n        \"Execute an external program and display raw output\"\n    ],\n    \"pathinfo\": [\n        \"array pathinfo(string path[, int options])\",\n        \"Returns information about a certain string\"\n    ],\n    \"pclose\": [\n        \"int pclose(resource fp)\",\n        \"Close a file pointer opened by popen()\"\n    ],\n    \"pcnlt_sigwaitinfo\": [\n        \"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\n        \"Synchronously wait for queued signals\"\n    ],\n    \"pcntl_alarm\": [\n        \"int pcntl_alarm(int seconds)\",\n        \"Set an alarm clock for delivery of a signal\"\n    ],\n    \"pcntl_exec\": [\n        \"bool pcntl_exec(string path [, array args [, array envs]])\",\n        \"Executes specified program in current process space as defined by exec(2)\"\n    ],\n    \"pcntl_fork\": [\n        \"int pcntl_fork()\",\n        \"Forks the currently running process following the same behavior as the UNIX fork() system call\"\n    ],\n    \"pcntl_getpriority\": [\n        \"int pcntl_getpriority([int pid [, int process_identifier]])\",\n        \"Get the priority of any process\"\n    ],\n    \"pcntl_setpriority\": [\n        \"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\n        \"Change the priority of any process\"\n    ],\n    \"pcntl_signal\": [\n        \"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\n        \"Assigns a system signal handler to a PHP function\"\n    ],\n    \"pcntl_signal_dispatch\": [\n        \"bool pcntl_signal_dispatch()\",\n        \"Dispatch signals to signal handlers\"\n    ],\n    \"pcntl_sigprocmask\": [\n        \"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\n        \"Examine and change blocked signals\"\n    ],\n    \"pcntl_sigtimedwait\": [\n        \"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\n        \"Wait for queued signals\"\n    ],\n    \"pcntl_wait\": [\n        \"int pcntl_wait(int &status)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_waitpid\": [\n        \"int pcntl_waitpid(int pid, int &status, int options)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_wexitstatus\": [\n        \"int pcntl_wexitstatus(int status)\",\n        \"Returns the status code of a child's exit\"\n    ],\n    \"pcntl_wifexited\": [\n        \"bool pcntl_wifexited(int status)\",\n        \"Returns true if the child status code represents a successful exit\"\n    ],\n    \"pcntl_wifsignaled\": [\n        \"bool pcntl_wifsignaled(int status)\",\n        \"Returns true if the child status code represents a process that was terminated due to a signal\"\n    ],\n    \"pcntl_wifstopped\": [\n        \"bool pcntl_wifstopped(int status)\",\n        \"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"\n    ],\n    \"pcntl_wstopsig\": [\n        \"int pcntl_wstopsig(int status)\",\n        \"Returns the number of the signal that caused the process to stop who's status code is passed\"\n    ],\n    \"pcntl_wtermsig\": [\n        \"int pcntl_wtermsig(int status)\",\n        \"Returns the number of the signal that terminated the process who's status code is passed\"\n    ],\n    \"pdo_drivers\": [\n        \"array pdo_drivers()\",\n        \"Return array of available PDO drivers\"\n    ],\n    \"pfsockopen\": [\n        \"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open persistent Internet or Unix domain socket connection\"\n    ],\n    \"pg_affected_rows\": [\n        \"int pg_affected_rows(resource result)\",\n        \"Returns the number of affected tuples\"\n    ],\n    \"pg_cancel_query\": [\n        \"bool pg_cancel_query(resource connection)\",\n        \"Cancel request\"\n    ],\n    \"pg_client_encoding\": [\n        \"string pg_client_encoding([resource connection])\",\n        \"Get the current client encoding\"\n    ],\n    \"pg_close\": [\n        \"bool pg_close([resource connection])\",\n        \"Close a PostgreSQL connection\"\n    ],\n    \"pg_connect\": [\n        \"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a PostgreSQL connection\"\n    ],\n    \"pg_connection_busy\": [\n        \"bool pg_connection_busy(resource connection)\",\n        \"Get connection is busy or not\"\n    ],\n    \"pg_connection_reset\": [\n        \"bool pg_connection_reset(resource connection)\",\n        \"Reset connection (reconnect)\"\n    ],\n    \"pg_connection_status\": [\n        \"int pg_connection_status(resource connnection)\",\n        \"Get connection status\"\n    ],\n    \"pg_convert\": [\n        \"array pg_convert(resource db, string table, array values[, int options])\",\n        \"Check and convert values for PostgreSQL SQL statement\"\n    ],\n    \"pg_copy_from\": [\n        \"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\n        \"Copy table from array\"\n    ],\n    \"pg_copy_to\": [\n        \"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\n        \"Copy table to array\"\n    ],\n    \"pg_dbname\": [\n        \"string pg_dbname([resource connection])\",\n        \"Get the database name\"\n    ],\n    \"pg_delete\": [\n        \"mixed pg_delete(resource db, string table, array ids[, int options])\",\n        \"Delete records has ids (id => value)\"\n    ],\n    \"pg_end_copy\": [\n        \"bool pg_end_copy([resource connection])\",\n        \"Sync with backend. Completes the Copy command\"\n    ],\n    \"pg_escape_bytea\": [\n        \"string pg_escape_bytea([resource connection,] string data)\",\n        \"Escape binary for bytea type\"\n    ],\n    \"pg_escape_string\": [\n        \"string pg_escape_string([resource connection,] string data)\",\n        \"Escape string for text/char type\"\n    ],\n    \"pg_execute\": [\n        \"resource pg_execute([resource connection,] string stmtname, array params)\",\n        \"Execute a prepared query\"\n    ],\n    \"pg_fetch_all\": [\n        \"array pg_fetch_all(resource result)\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_all_columns\": [\n        \"array pg_fetch_all_columns(resource result [, int column_number])\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_array\": [\n        \"array pg_fetch_array(resource result [, int row [, int result_type]])\",\n        \"Fetch a row as an array\"\n    ],\n    \"pg_fetch_assoc\": [\n        \"array pg_fetch_assoc(resource result [, int row])\",\n        \"Fetch a row as an assoc array\"\n    ],\n    \"pg_fetch_object\": [\n        \"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\n        \"Fetch a row as an object\"\n    ],\n    \"pg_fetch_result\": [\n        \"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\n        \"Returns values from a result identifier\"\n    ],\n    \"pg_fetch_row\": [\n        \"array pg_fetch_row(resource result [, int row [, int result_type]])\",\n        \"Get a row as an enumerated array\"\n    ],\n    \"pg_field_is_null\": [\n        \"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\n        \"Test if a field is NULL\"\n    ],\n    \"pg_field_name\": [\n        \"string pg_field_name(resource result, int field_number)\",\n        \"Returns the name of the field\"\n    ],\n    \"pg_field_num\": [\n        \"int pg_field_num(resource result, string field_name)\",\n        \"Returns the field number of the named field\"\n    ],\n    \"pg_field_prtlen\": [\n        \"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\n        \"Returns the printed length\"\n    ],\n    \"pg_field_size\": [\n        \"int pg_field_size(resource result, int field_number)\",\n        \"Returns the internal size of the field\"\n    ],\n    \"pg_field_table\": [\n        \"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\n        \"Returns the name of the table field belongs to, or table's oid if oid_only is true\"\n    ],\n    \"pg_field_type\": [\n        \"string pg_field_type(resource result, int field_number)\",\n        \"Returns the type name for the given field\"\n    ],\n    \"pg_field_type_oid\": [\n        \"string pg_field_type_oid(resource result, int field_number)\",\n        \"Returns the type oid for the given field\"\n    ],\n    \"pg_free_result\": [\n        \"bool pg_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"pg_get_notify\": [\n        \"array pg_get_notify([resource connection[, result_type]])\",\n        \"Get asynchronous notification\"\n    ],\n    \"pg_get_pid\": [\n        \"int pg_get_pid([resource connection)\",\n        \"Get backend(server) pid\"\n    ],\n    \"pg_get_result\": [\n        \"resource pg_get_result(resource connection)\",\n        \"Get asynchronous query result\"\n    ],\n    \"pg_host\": [\n        \"string pg_host([resource connection])\",\n        \"Returns the host name associated with the connection\"\n    ],\n    \"pg_insert\": [\n        \"mixed pg_insert(resource db, string table, array values[, int options])\",\n        \"Insert values (filed => value) to table\"\n    ],\n    \"pg_last_error\": [\n        \"string pg_last_error([resource connection])\",\n        \"Get the error message string\"\n    ],\n    \"pg_last_notice\": [\n        \"string pg_last_notice(resource connection)\",\n        \"Returns the last notice set by the backend\"\n    ],\n    \"pg_last_oid\": [\n        \"string pg_last_oid(resource result)\",\n        \"Returns the last object identifier\"\n    ],\n    \"pg_lo_close\": [\n        \"bool pg_lo_close(resource large_object)\",\n        \"Close a large object\"\n    ],\n    \"pg_lo_create\": [\n        \"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\n        \"Create a large object\"\n    ],\n    \"pg_lo_export\": [\n        \"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\n        \"Export large object direct to filesystem\"\n    ],\n    \"pg_lo_import\": [\n        \"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\n        \"Import large object direct from filesystem\"\n    ],\n    \"pg_lo_open\": [\n        \"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\n        \"Open a large object and return fd\"\n    ],\n    \"pg_lo_read\": [\n        \"string pg_lo_read(resource large_object [, int len])\",\n        \"Read a large object\"\n    ],\n    \"pg_lo_read_all\": [\n        \"int pg_lo_read_all(resource large_object)\",\n        \"Read a large object and send straight to browser\"\n    ],\n    \"pg_lo_seek\": [\n        \"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\n        \"Seeks position of large object\"\n    ],\n    \"pg_lo_tell\": [\n        \"int pg_lo_tell(resource large_object)\",\n        \"Returns current position of large object\"\n    ],\n    \"pg_lo_unlink\": [\n        \"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\n        \"Delete a large object\"\n    ],\n    \"pg_lo_write\": [\n        \"int pg_lo_write(resource large_object, string buf [, int len])\",\n        \"Write a large object\"\n    ],\n    \"pg_meta_data\": [\n        \"array pg_meta_data(resource db, string table)\",\n        \"Get meta_data\"\n    ],\n    \"pg_num_fields\": [\n        \"int pg_num_fields(resource result)\",\n        \"Return the number of fields in the result\"\n    ],\n    \"pg_num_rows\": [\n        \"int pg_num_rows(resource result)\",\n        \"Return the number of rows in the result\"\n    ],\n    \"pg_options\": [\n        \"string pg_options([resource connection])\",\n        \"Get the options associated with the connection\"\n    ],\n    \"pg_parameter_status\": [\n        \"string|false pg_parameter_status([resource connection,] string param_name)\",\n        \"Returns the value of a server parameter\"\n    ],\n    \"pg_pconnect\": [\n        \"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a persistent PostgreSQL connection\"\n    ],\n    \"pg_ping\": [\n        \"bool pg_ping([resource connection])\",\n        \"Ping database. If connection is bad, try to reconnect.\"\n    ],\n    \"pg_port\": [\n        \"int pg_port([resource connection])\",\n        \"Return the port number associated with the connection\"\n    ],\n    \"pg_prepare\": [\n        \"resource pg_prepare([resource connection,] string stmtname, string query)\",\n        \"Prepare a query for future execution\"\n    ],\n    \"pg_put_line\": [\n        \"bool pg_put_line([resource connection,] string query)\",\n        \"Send null-terminated string to backend server\"\n    ],\n    \"pg_query\": [\n        \"resource pg_query([resource connection,] string query)\",\n        \"Execute a query\"\n    ],\n    \"pg_query_params\": [\n        \"resource pg_query_params([resource connection,] string query, array params)\",\n        \"Execute a query\"\n    ],\n    \"pg_result_error\": [\n        \"string pg_result_error(resource result)\",\n        \"Get error message associated with result\"\n    ],\n    \"pg_result_error_field\": [\n        \"string pg_result_error_field(resource result, int fieldcode)\",\n        \"Get error message field associated with result\"\n    ],\n    \"pg_result_seek\": [\n        \"bool pg_result_seek(resource result, int offset)\",\n        \"Set internal row offset\"\n    ],\n    \"pg_result_status\": [\n        \"mixed pg_result_status(resource result[, long result_type])\",\n        \"Get status of query result\"\n    ],\n    \"pg_select\": [\n        \"mixed pg_select(resource db, string table, array ids[, int options])\",\n        \"Select records that has ids (id => value)\"\n    ],\n    \"pg_send_execute\": [\n        \"bool pg_send_execute(resource connection, string stmtname, array params)\",\n        \"Executes prevriously prepared stmtname asynchronously\"\n    ],\n    \"pg_send_prepare\": [\n        \"bool pg_send_prepare(resource connection, string stmtname, string query)\",\n        \"Asynchronously prepare a query for future execution\"\n    ],\n    \"pg_send_query\": [\n        \"bool pg_send_query(resource connection, string query)\",\n        \"Send asynchronous query\"\n    ],\n    \"pg_send_query_params\": [\n        \"bool pg_send_query_params(resource connection, string query, array params)\",\n        \"Send asynchronous parameterized query\"\n    ],\n    \"pg_set_client_encoding\": [\n        \"int pg_set_client_encoding([resource connection,] string encoding)\",\n        \"Set client encoding\"\n    ],\n    \"pg_set_error_verbosity\": [\n        \"int pg_set_error_verbosity([resource connection,] int verbosity)\",\n        \"Set error verbosity\"\n    ],\n    \"pg_trace\": [\n        \"bool pg_trace(string filename [, string mode [, resource connection]])\",\n        \"Enable tracing a PostgreSQL connection\"\n    ],\n    \"pg_transaction_status\": [\n        \"int pg_transaction_status(resource connnection)\",\n        \"Get transaction status\"\n    ],\n    \"pg_tty\": [\n        \"string pg_tty([resource connection])\",\n        \"Return the tty name associated with the connection\"\n    ],\n    \"pg_unescape_bytea\": [\n        \"string pg_unescape_bytea(string data)\",\n        \"Unescape binary for bytea type\"\n    ],\n    \"pg_untrace\": [\n        \"bool pg_untrace([resource connection])\",\n        \"Disable tracing of a PostgreSQL connection\"\n    ],\n    \"pg_update\": [\n        \"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\n        \"Update table using values (field => value) and ids (id => value)\"\n    ],\n    \"pg_version\": [\n        \"array pg_version([resource connection])\",\n        \"Returns an array with client, protocol and server version (when available)\"\n    ],\n    \"php_egg_logo_guid\": [\n        \"string php_egg_logo_guid()\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_ini_loaded_file\": [\n        \"string php_ini_loaded_file()\",\n        \"Return the actual loaded ini filename\"\n    ],\n    \"php_ini_scanned_files\": [\n        \"string php_ini_scanned_files()\",\n        \"Return comma-separated string of .ini files parsed from the additional ini dir\"\n    ],\n    \"php_logo_guid\": [\n        \"string php_logo_guid()\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_real_logo_guid\": [\n        \"string php_real_logo_guid()\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_sapi_name\": [\n        \"string php_sapi_name()\",\n        \"Return the current SAPI module name\"\n    ],\n    \"php_snmpv3\": [\n        \"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\n        \"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"\n    ],\n    \"php_strip_whitespace\": [\n        \"string php_strip_whitespace(string file_name)\",\n        \"Return source with stripped comments and whitespace\"\n    ],\n    \"php_uname\": [\n        \"string php_uname()\",\n        \"Return information about the system PHP was built on\"\n    ],\n    \"phpcredits\": [\n        \"void phpcredits([int flag])\",\n        \"Prints the list of people who've contributed to the PHP project\"\n    ],\n    \"phpinfo\": [\n        \"void phpinfo([int what])\",\n        \"Output a page of useful information about PHP and the current request\"\n    ],\n    \"phpversion\": [\n        \"string phpversion([string extension])\",\n        \"Return the current PHP version\"\n    ],\n    \"pi\": [\n        \"float pi()\",\n        \"Returns an approximation of pi\"\n    ],\n    \"png2wbmp\": [\n        \"bool png2wbmp(string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert PNG image to WBMP image\"\n    ],\n    \"popen\": [\n        \"resource popen(string command, string mode)\",\n        \"Execute a command and open either a read or a write pipe to it\"\n    ],\n    \"posix_access\": [\n        \"bool posix_access(string file [, int mode])\",\n        \"Determine accessibility of a file (POSIX.1 5.6.3)\"\n    ],\n    \"posix_ctermid\": [\n        \"string posix_ctermid()\",\n        \"Generate terminal path name (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_get_last_error\": [\n        \"int posix_get_last_error()\",\n        \"Retrieve the error number set by the last posix function which failed.\"\n    ],\n    \"posix_getcwd\": [\n        \"string posix_getcwd()\",\n        \"Get working directory pathname (POSIX.1, 5.2.2)\"\n    ],\n    \"posix_getegid\": [\n        \"int posix_getegid()\",\n        \"Get the current effective group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_geteuid\": [\n        \"int posix_geteuid()\",\n        \"Get the current effective user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgid\": [\n        \"int posix_getgid()\",\n        \"Get the current group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgrgid\": [\n        \"array posix_getgrgid(long gid)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgrnam\": [\n        \"array posix_getgrnam(string groupname)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgroups\": [\n        \"array posix_getgroups()\",\n        \"Get supplementary group id's (POSIX.1, 4.2.3)\"\n    ],\n    \"posix_getlogin\": [\n        \"string posix_getlogin()\",\n        \"Get user name (POSIX.1, 4.2.4)\"\n    ],\n    \"posix_getpgid\": [\n        \"int posix_getpgid()\",\n        \"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"\n    ],\n    \"posix_getpgrp\": [\n        \"int posix_getpgrp()\",\n        \"Get current process group id (POSIX.1, 4.3.1)\"\n    ],\n    \"posix_getpid\": [\n        \"int posix_getpid()\",\n        \"Get the current process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getppid\": [\n        \"int posix_getppid()\",\n        \"Get the parent process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getpwnam\": [\n        \"array posix_getpwnam(string groupname)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getpwuid\": [\n        \"array posix_getpwuid(long uid)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getrlimit\": [\n        \"array posix_getrlimit()\",\n        \"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"\n    ],\n    \"posix_getsid\": [\n        \"int posix_getsid()\",\n        \"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"\n    ],\n    \"posix_getuid\": [\n        \"int posix_getuid()\",\n        \"Get the current user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_initgroups\": [\n        \"bool posix_initgroups(string name, int base_group_id)\",\n        \"Calculate the group access list for the user specified in name.\"\n    ],\n    \"posix_isatty\": [\n        \"bool posix_isatty(int fd)\",\n        \"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_kill\": [\n        \"bool posix_kill(int pid, int sig)\",\n        \"Send a signal to a process (POSIX.1, 3.3.2)\"\n    ],\n    \"posix_mkfifo\": [\n        \"bool posix_mkfifo(string pathname, int mode)\",\n        \"Make a FIFO special file (POSIX.1, 5.4.2)\"\n    ],\n    \"posix_mknod\": [\n        \"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\n        \"Make a special or ordinary file (POSIX.1)\"\n    ],\n    \"posix_setegid\": [\n        \"bool posix_setegid(long uid)\",\n        \"Set effective group id\"\n    ],\n    \"posix_seteuid\": [\n        \"bool posix_seteuid(long uid)\",\n        \"Set effective user id\"\n    ],\n    \"posix_setgid\": [\n        \"bool posix_setgid(int uid)\",\n        \"Set group id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_setpgid\": [\n        \"bool posix_setpgid(int pid, int pgid)\",\n        \"Set process group id for job control (POSIX.1, 4.3.3)\"\n    ],\n    \"posix_setsid\": [\n        \"int posix_setsid()\",\n        \"Create session and set process group id (POSIX.1, 4.3.2)\"\n    ],\n    \"posix_setuid\": [\n        \"bool posix_setuid(long uid)\",\n        \"Set user id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_strerror\": [\n        \"string posix_strerror(int errno)\",\n        \"Retrieve the system error message associated with the given errno.\"\n    ],\n    \"posix_times\": [\n        \"array posix_times()\",\n        \"Get process times (POSIX.1, 4.5.2)\"\n    ],\n    \"posix_ttyname\": [\n        \"string posix_ttyname(int fd)\",\n        \"Determine terminal device name (POSIX.1, 4.7.2)\"\n    ],\n    \"posix_uname\": [\n        \"array posix_uname()\",\n        \"Get system name (POSIX.1, 4.4.1)\"\n    ],\n    \"pow\": [\n        \"number pow(number base, number exponent)\",\n        \"Returns base raised to the power of exponent. Returns integer result when possible\"\n    ],\n    \"preg_filter\": [\n        \"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement and only return matches.\"\n    ],\n    \"preg_grep\": [\n        \"array preg_grep(string regex, array input [, int flags])\",\n        \"Searches array and returns entries which match regex\"\n    ],\n    \"preg_last_error\": [\n        \"int preg_last_error()\",\n        \"Returns the error code of the last regexp execution.\"\n    ],\n    \"preg_match\": [\n        \"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\n        \"Perform a Perl-style regular expression match\"\n    ],\n    \"preg_match_all\": [\n        \"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\n        \"Perform a Perl-style global regular expression match\"\n    ],\n    \"preg_quote\": [\n        \"string preg_quote(string str [, string delim_char])\",\n        \"Quote regular expression characters plus an optional character\"\n    ],\n    \"preg_replace\": [\n        \"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement.\"\n    ],\n    \"preg_replace_callback\": [\n        \"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement using replacement callback.\"\n    ],\n    \"preg_split\": [\n        \"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\n        \"Split string into an array using a perl-style regular expression as a delimiter\"\n    ],\n    \"prev\": [\n        \"mixed prev(array array_arg)\",\n        \"Move array argument's internal pointer to the previous element and return it\"\n    ],\n    \"print\": [\n        \"int print(string arg)\",\n        \"Output a string\"\n    ],\n    \"print_r\": [\n        \"mixed print_r(mixed var [, bool return])\",\n        \"Prints out or returns information about the specified variable\"\n    ],\n    \"printf\": [\n        \"int printf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string\"\n    ],\n    \"proc_close\": [\n        \"int proc_close(resource process)\",\n        \"close a process opened by proc_open\"\n    ],\n    \"proc_get_status\": [\n        \"array proc_get_status(resource process)\",\n        \"get information about a process opened by proc_open\"\n    ],\n    \"proc_nice\": [\n        \"bool proc_nice(int priority)\",\n        \"Change the priority of the current process\"\n    ],\n    \"proc_open\": [\n        \"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\n        \"Run a process with more control over it's file descriptors\"\n    ],\n    \"proc_terminate\": [\n        \"bool proc_terminate(resource process [, long signal])\",\n        \"kill a process opened by proc_open\"\n    ],\n    \"property_exists\": [\n        \"bool property_exists(mixed object_or_class, string property_name)\",\n        \"Checks if the object or class has a property\"\n    ],\n    \"pspell_add_to_personal\": [\n        \"bool pspell_add_to_personal(int pspell, string word)\",\n        \"Adds a word to a personal list\"\n    ],\n    \"pspell_add_to_session\": [\n        \"bool pspell_add_to_session(int pspell, string word)\",\n        \"Adds a word to the current session\"\n    ],\n    \"pspell_check\": [\n        \"bool pspell_check(int pspell, string word)\",\n        \"Returns true if word is valid\"\n    ],\n    \"pspell_clear_session\": [\n        \"bool pspell_clear_session(int pspell)\",\n        \"Clears the current session\"\n    ],\n    \"pspell_config_create\": [\n        \"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\n        \"Create a new config to be used later to create a manager\"\n    ],\n    \"pspell_config_data_dir\": [\n        \"bool pspell_config_data_dir(int conf, string directory)\",\n        \"location of language data files\"\n    ],\n    \"pspell_config_dict_dir\": [\n        \"bool pspell_config_dict_dir(int conf, string directory)\",\n        \"location of the main word list\"\n    ],\n    \"pspell_config_ignore\": [\n        \"bool pspell_config_ignore(int conf, int ignore)\",\n        \"Ignore words <= n chars\"\n    ],\n    \"pspell_config_mode\": [\n        \"bool pspell_config_mode(int conf, long mode)\",\n        \"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"\n    ],\n    \"pspell_config_personal\": [\n        \"bool pspell_config_personal(int conf, string personal)\",\n        \"Use a personal dictionary for this config\"\n    ],\n    \"pspell_config_repl\": [\n        \"bool pspell_config_repl(int conf, string repl)\",\n        \"Use a personal dictionary with replacement pairs for this config\"\n    ],\n    \"pspell_config_runtogether\": [\n        \"bool pspell_config_runtogether(int conf, bool runtogether)\",\n        \"Consider run-together words as valid components\"\n    ],\n    \"pspell_config_save_repl\": [\n        \"bool pspell_config_save_repl(int conf, bool save)\",\n        \"Save replacement pairs when personal list is saved for this config\"\n    ],\n    \"pspell_new\": [\n        \"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary\"\n    ],\n    \"pspell_new_config\": [\n        \"int pspell_new_config(int config)\",\n        \"Load a dictionary based on the given config\"\n    ],\n    \"pspell_new_personal\": [\n        \"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary with a personal wordlist\"\n    ],\n    \"pspell_save_wordlist\": [\n        \"bool pspell_save_wordlist(int pspell)\",\n        \"Saves the current (personal) wordlist\"\n    ],\n    \"pspell_store_replacement\": [\n        \"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\n        \"Notify the dictionary of a user-selected replacement\"\n    ],\n    \"pspell_suggest\": [\n        \"array pspell_suggest(int pspell, string word)\",\n        \"Returns array of suggestions\"\n    ],\n    \"putenv\": [\n        \"bool putenv(string setting)\",\n        \"Set the value of an environment variable\"\n    ],\n    \"quoted_printable_decode\": [\n        \"string quoted_printable_decode(string str)\",\n        \"Convert a quoted-printable string to an 8 bit string\"\n    ],\n    \"quoted_printable_encode\": [\n        \"string quoted_printable_encode(string str)\",\n        \"\"\n    ],\n    \"quotemeta\": [\n        \"string quotemeta(string str)\",\n        \"Quotes meta characters\"\n    ],\n    \"rad2deg\": [\n        \"float rad2deg(float number)\",\n        \"Converts the radian number to the equivalent number in degrees\"\n    ],\n    \"rand\": [\n        \"int rand([int min, int max])\",\n        \"Returns a random number\"\n    ],\n    \"range\": [\n        \"array range(mixed low, mixed high[, int step])\",\n        \"Create an array containing the range of integers or characters from low to high (inclusive)\"\n    ],\n    \"rawurldecode\": [\n        \"string rawurldecode(string str)\",\n        \"Decodes URL-encodes string\"\n    ],\n    \"rawurlencode\": [\n        \"string rawurlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"readdir\": [\n        \"string readdir([resource dir_handle])\",\n        \"Read directory entry from dir_handle\"\n    ],\n    \"readfile\": [\n        \"int readfile(string filename [, bool use_include_path[, resource context]])\",\n        \"Output a file or a URL\"\n    ],\n    \"readgzfile\": [\n        \"int readgzfile(string filename [, int use_include_path])\",\n        \"Output a .gz-file\"\n    ],\n    \"readline\": [\n        \"string readline([string prompt])\",\n        \"Reads a line\"\n    ],\n    \"readline_add_history\": [\n        \"bool readline_add_history(string prompt)\",\n        \"Adds a line to the history\"\n    ],\n    \"readline_callback_handler_install\": [\n        \"void readline_callback_handler_install(string prompt, mixed callback)\",\n        \"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"\n    ],\n    \"readline_callback_handler_remove\": [\n        \"bool readline_callback_handler_remove()\",\n        \"Removes a previously installed callback handler and restores terminal settings\"\n    ],\n    \"readline_callback_read_char\": [\n        \"void readline_callback_read_char()\",\n        \"Informs the readline callback interface that a character is ready for input\"\n    ],\n    \"readline_clear_history\": [\n        \"bool readline_clear_history()\",\n        \"Clears the history\"\n    ],\n    \"readline_completion_function\": [\n        \"bool readline_completion_function(string funcname)\",\n        \"Readline completion function?\"\n    ],\n    \"readline_info\": [\n        \"mixed readline_info([string varname [, string newvalue]])\",\n        \"Gets/sets various internal readline variables.\"\n    ],\n    \"readline_list_history\": [\n        \"array readline_list_history()\",\n        \"Lists the history\"\n    ],\n    \"readline_on_new_line\": [\n        \"void readline_on_new_line()\",\n        \"Inform readline that the cursor has moved to a new line\"\n    ],\n    \"readline_read_history\": [\n        \"bool readline_read_history([string filename])\",\n        \"Reads the history\"\n    ],\n    \"readline_redisplay\": [\n        \"void readline_redisplay()\",\n        \"Ask readline to redraw the display\"\n    ],\n    \"readline_write_history\": [\n        \"bool readline_write_history([string filename])\",\n        \"Writes the history\"\n    ],\n    \"readlink\": [\n        \"string readlink(string filename)\",\n        \"Return the target of a symbolic link\"\n    ],\n    \"realpath\": [\n        \"string realpath(string path)\",\n        \"Return the resolved path\"\n    ],\n    \"realpath_cache_get\": [\n        \"bool realpath_cache_get()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"realpath_cache_size\": [\n        \"bool realpath_cache_size()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"recode_file\": [\n        \"bool recode_file(string request, resource input, resource output)\",\n        \"Recode file input into file output according to request\"\n    ],\n    \"recode_string\": [\n        \"string recode_string(string request, string str)\",\n        \"Recode string str according to request string\"\n    ],\n    \"register_shutdown_function\": [\n        \"void register_shutdown_function(string function_name)\",\n        \"Register a user-level function to be called on request termination\"\n    ],\n    \"register_tick_function\": [\n        \"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\n        \"Registers a tick callback function\"\n    ],\n    \"rename\": [\n        \"bool rename(string old_name, string new_name[, resource context])\",\n        \"Rename a file\"\n    ],\n    \"require\": [\n        \"bool require(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"require_once\": [\n        \"bool require_once(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"reset\": [\n        \"mixed reset(array array_arg)\",\n        \"Set array argument's internal pointer to the first element and return it\"\n    ],\n    \"restore_error_handler\": [\n        \"void restore_error_handler()\",\n        \"Restores the previously defined error handler function\"\n    ],\n    \"restore_exception_handler\": [\n        \"void restore_exception_handler()\",\n        \"Restores the previously defined exception handler function\"\n    ],\n    \"restore_include_path\": [\n        \"void restore_include_path()\",\n        \"Restore the value of the include_path configuration option\"\n    ],\n    \"rewind\": [\n        \"bool rewind(resource fp)\",\n        \"Rewind the position of a file pointer\"\n    ],\n    \"rewinddir\": [\n        \"void rewinddir([resource dir_handle])\",\n        \"Rewind dir_handle back to the start\"\n    ],\n    \"rmdir\": [\n        \"bool rmdir(string dirname[, resource context])\",\n        \"Remove a directory\"\n    ],\n    \"round\": [\n        \"float round(float number [, int precision [, int mode]])\",\n        \"Returns the number rounded to specified precision\"\n    ],\n    \"rsort\": [\n        \"bool rsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order\"\n    ],\n    \"rtrim\": [\n        \"string rtrim(string str [, string character_mask])\",\n        \"Removes trailing whitespace\"\n    ],\n    \"scandir\": [\n        \"array scandir(string dir [, int sorting_order [, resource context]])\",\n        \"List files & directories inside the specified path\"\n    ],\n    \"sem_acquire\": [\n        \"bool sem_acquire(resource id)\",\n        \"Acquires the semaphore with the given id, blocking if necessary\"\n    ],\n    \"sem_get\": [\n        \"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\n        \"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"\n    ],\n    \"sem_release\": [\n        \"bool sem_release(resource id)\",\n        \"Releases the semaphore with the given id\"\n    ],\n    \"sem_remove\": [\n        \"bool sem_remove(resource id)\",\n        \"Removes semaphore from Unix systems\"\n    ],\n    \"serialize\": [\n        \"string serialize(mixed variable)\",\n        \"Returns a string representation of variable (which can later be unserialized)\"\n    ],\n    \"session_cache_expire\": [\n        \"int session_cache_expire([int new_cache_expire])\",\n        \"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"\n    ],\n    \"session_cache_limiter\": [\n        \"string session_cache_limiter([string new_cache_limiter])\",\n        \"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"\n    ],\n    \"session_decode\": [\n        \"bool session_decode(string data)\",\n        \"Deserializes data and reinitializes the variables\"\n    ],\n    \"session_destroy\": [\n        \"bool session_destroy()\",\n        \"Destroy the current session and all data associated with it\"\n    ],\n    \"session_encode\": [\n        \"string session_encode()\",\n        \"Serializes the current setup and returns the serialized representation\"\n    ],\n    \"session_get_cookie_params\": [\n        \"array session_get_cookie_params()\",\n        \"Return the session cookie parameters\"\n    ],\n    \"session_id\": [\n        \"string session_id([string newid])\",\n        \"Return the current session id. If newid is given, the session id is replaced with newid\"\n    ],\n    \"session_is_registered\": [\n        \"bool session_is_registered(string varname)\",\n        \"Checks if a variable is registered in session\"\n    ],\n    \"session_module_name\": [\n        \"string session_module_name([string newname])\",\n        \"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"\n    ],\n    \"session_name\": [\n        \"string session_name([string newname])\",\n        \"Return the current session name. If newname is given, the session name is replaced with newname\"\n    ],\n    \"session_regenerate_id\": [\n        \"bool session_regenerate_id([bool delete_old_session])\",\n        \"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"\n    ],\n    \"session_register\": [\n        \"bool session_register(mixed var_names [, mixed ...])\",\n        \"Adds varname(s) to the list of variables which are freezed at the session end\"\n    ],\n    \"session_save_path\": [\n        \"string session_save_path([string newname])\",\n        \"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"\n    ],\n    \"session_set_cookie_params\": [\n        \"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\n        \"Set session cookie parameters\"\n    ],\n    \"session_set_save_handler\": [\n        \"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\n        \"Sets user-level functions\"\n    ],\n    \"session_start\": [\n        \"bool session_start()\",\n        \"Begin session - reinitializes freezed variables, registers browsers etc\"\n    ],\n    \"session_unregister\": [\n        \"bool session_unregister(string varname)\",\n        \"Removes varname from the list of variables which are freezed at the session end\"\n    ],\n    \"session_unset\": [\n        \"void session_unset()\",\n        \"Unset all registered variables\"\n    ],\n    \"session_write_close\": [\n        \"void session_write_close()\",\n        \"Write session data and end session\"\n    ],\n    \"set_error_handler\": [\n        \"string set_error_handler(string error_handler [, int error_types])\",\n        \"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"\n    ],\n    \"set_exception_handler\": [\n        \"string set_exception_handler(callable exception_handler)\",\n        \"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"\n    ],\n    \"set_include_path\": [\n        \"string set_include_path(string new_include_path)\",\n        \"Sets the include_path configuration option\"\n    ],\n    \"set_magic_quotes_runtime\": [\n        \"bool set_magic_quotes_runtime(int new_setting)\",\n        \"Set the current active configuration setting of magic_quotes_runtime and return previous\"\n    ],\n    \"set_time_limit\": [\n        \"bool set_time_limit(int seconds)\",\n        \"Sets the maximum time a script can run\"\n    ],\n    \"setcookie\": [\n        \"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie\"\n    ],\n    \"setlocale\": [\n        \"string setlocale(mixed category, string locale [, string ...])\",\n        \"Set locale information\"\n    ],\n    \"setrawcookie\": [\n        \"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie with no url encoding of the value\"\n    ],\n    \"settype\": [\n        \"bool settype(mixed var, string type)\",\n        \"Set the type of the variable\"\n    ],\n    \"sha1\": [\n        \"string sha1(string str [, bool raw_output])\",\n        \"Calculate the sha1 hash of a string\"\n    ],\n    \"sha1_file\": [\n        \"string sha1_file(string filename [, bool raw_output])\",\n        \"Calculate the sha1 hash of given filename\"\n    ],\n    \"shell_exec\": [\n        \"string shell_exec(string cmd)\",\n        \"Execute command via shell and return complete output as string\"\n    ],\n    \"shm_attach\": [\n        \"int shm_attach(int key [, int memsize [, int perm]])\",\n        \"Creates or open a shared memory segment\"\n    ],\n    \"shm_detach\": [\n        \"bool shm_detach(resource shm_identifier)\",\n        \"Disconnects from shared memory segment\"\n    ],\n    \"shm_get_var\": [\n        \"mixed shm_get_var(resource id, int variable_key)\",\n        \"Returns a variable from shared memory\"\n    ],\n    \"shm_has_var\": [\n        \"bool shm_has_var(resource id, int variable_key)\",\n        \"Checks whether a specific entry exists\"\n    ],\n    \"shm_put_var\": [\n        \"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\n        \"Inserts or updates a variable in shared memory\"\n    ],\n    \"shm_remove\": [\n        \"bool shm_remove(resource shm_identifier)\",\n        \"Removes shared memory from Unix systems\"\n    ],\n    \"shm_remove_var\": [\n        \"bool shm_remove_var(resource id, int variable_key)\",\n        \"Removes variable from shared memory\"\n    ],\n    \"shmop_close\": [\n        \"void shmop_close(int shmid)\",\n        \"closes a shared memory segment\"\n    ],\n    \"shmop_delete\": [\n        \"bool shmop_delete(int shmid)\",\n        \"mark segment for deletion\"\n    ],\n    \"shmop_open\": [\n        \"int shmop_open(int key, string flags, int mode, int size)\",\n        \"gets and attaches a shared memory segment\"\n    ],\n    \"shmop_read\": [\n        \"string shmop_read(int shmid, int start, int count)\",\n        \"reads from a shm segment\"\n    ],\n    \"shmop_size\": [\n        \"int shmop_size(int shmid)\",\n        \"returns the shm size\"\n    ],\n    \"shmop_write\": [\n        \"int shmop_write(int shmid, string data, int offset)\",\n        \"writes to a shared memory segment\"\n    ],\n    \"shuffle\": [\n        \"bool shuffle(array array_arg)\",\n        \"Randomly shuffle the contents of an array\"\n    ],\n    \"similar_text\": [\n        \"int similar_text(string str1, string str2 [, float percent])\",\n        \"Calculates the similarity between two strings\"\n    ],\n    \"simplexml_import_dom\": [\n        \"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"simplexml_load_file\": [\n        \"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a filename and return a simplexml_element object to allow for processing\"\n    ],\n    \"simplexml_load_string\": [\n        \"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a string and return a simplexml_element object to allow for processing\"\n    ],\n    \"sin\": [\n        \"float sin(float number)\",\n        \"Returns the sine of the number in radians\"\n    ],\n    \"sinh\": [\n        \"float sinh(float number)\",\n        \"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2\"\n    ],\n    \"sleep\": [\n        \"void sleep(int seconds)\",\n        \"Delay for a given number of seconds\"\n    ],\n    \"smfi_addheader\": [\n        \"bool smfi_addheader(string headerf, string headerv)\",\n        \"Adds a header to the current message.\"\n    ],\n    \"smfi_addrcpt\": [\n        \"bool smfi_addrcpt(string rcpt)\",\n        \"Add a recipient to the message envelope.\"\n    ],\n    \"smfi_chgheader\": [\n        \"bool smfi_chgheader(string headerf, string headerv)\",\n        \"Changes a header's value for the current message.\"\n    ],\n    \"smfi_delrcpt\": [\n        \"bool smfi_delrcpt(string rcpt)\",\n        \"Removes the named recipient from the current message's envelope.\"\n    ],\n    \"smfi_getsymval\": [\n        \"string smfi_getsymval(string macro)\",\n        \"Returns the value of the given macro or NULL if the macro is not defined.\"\n    ],\n    \"smfi_replacebody\": [\n        \"bool smfi_replacebody(string body)\",\n        \"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"\n    ],\n    \"smfi_setflags\": [\n        \"void smfi_setflags(long flags)\",\n        \"Sets the flags describing the actions the filter may take.\"\n    ],\n    \"smfi_setreply\": [\n        \"bool smfi_setreply(string rcode, string xcode, string message)\",\n        \"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"\n    ],\n    \"smfi_settimeout\": [\n        \"void smfi_settimeout(long timeout)\",\n        \"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"\n    ],\n    \"snmp2_get\": [\n        \"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_getnext\": [\n        \"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_real_walk\": [\n        \"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp2_set\": [\n        \"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmp2_walk\": [\n        \"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"snmp3_get\": [\n        \"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_getnext\": [\n        \"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_real_walk\": [\n        \"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_set\": [\n        \"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_walk\": [\n        \"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp_get_quick_print\": [\n        \"bool snmp_get_quick_print()\",\n        \"Return the current status of quick_print\"\n    ],\n    \"snmp_get_valueretrieval\": [\n        \"int snmp_get_valueretrieval()\",\n        \"Return the method how the SNMP values will be returned\"\n    ],\n    \"snmp_read_mib\": [\n        \"int snmp_read_mib(string filename)\",\n        \"Reads and parses a MIB file into the active MIB tree.\"\n    ],\n    \"snmp_set_enum_print\": [\n        \"void snmp_set_enum_print(int enum_print)\",\n        \"Return all values that are enums with their enum value instead of the raw integer\"\n    ],\n    \"snmp_set_oid_output_format\": [\n        \"void snmp_set_oid_output_format(int oid_format)\",\n        \"Set the OID output format.\"\n    ],\n    \"snmp_set_quick_print\": [\n        \"void snmp_set_quick_print(int quick_print)\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp_set_valueretrieval\": [\n        \"void snmp_set_valueretrieval(int method)\",\n        \"Specify the method how the SNMP values will be returned\"\n    ],\n    \"snmpget\": [\n        \"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmpgetnext\": [\n        \"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmprealwalk\": [\n        \"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmpset\": [\n        \"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmpwalk\": [\n        \"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"socket_accept\": [\n        \"resource socket_accept(resource socket)\",\n        \"Accepts a connection on the listening socket fd\"\n    ],\n    \"socket_bind\": [\n        \"bool socket_bind(resource socket, string addr [, int port])\",\n        \"Binds an open socket to a listening port, port is only specified in AF_INET family.\"\n    ],\n    \"socket_clear_error\": [\n        \"void socket_clear_error([resource socket])\",\n        \"Clears the error on the socket or the last error code.\"\n    ],\n    \"socket_close\": [\n        \"void socket_close(resource socket)\",\n        \"Closes a file descriptor\"\n    ],\n    \"socket_connect\": [\n        \"bool socket_connect(resource socket, string addr [, int port])\",\n        \"Opens a connection to addr:port on the socket specified by socket\"\n    ],\n    \"socket_create\": [\n        \"resource socket_create(int domain, int type, int protocol)\",\n        \"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"\n    ],\n    \"socket_create_listen\": [\n        \"resource socket_create_listen(int port[, int backlog])\",\n        \"Opens a socket on port to accept connections\"\n    ],\n    \"socket_create_pair\": [\n        \"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\n        \"Creates a pair of indistinguishable sockets and stores them in fds.\"\n    ],\n    \"socket_get_option\": [\n        \"mixed socket_get_option(resource socket, int level, int optname)\",\n        \"Gets socket options for the socket\"\n    ],\n    \"socket_getpeername\": [\n        \"bool socket_getpeername(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_getsockname\": [\n        \"bool socket_getsockname(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_last_error\": [\n        \"int socket_last_error([resource socket])\",\n        \"Returns the last socket error (either the last used or the provided socket resource)\"\n    ],\n    \"socket_listen\": [\n        \"bool socket_listen(resource socket[, int backlog])\",\n        \"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"\n    ],\n    \"socket_read\": [\n        \"string socket_read(resource socket, int length [, int type])\",\n        \"Reads a maximum of length bytes from socket\"\n    ],\n    \"socket_recv\": [\n        \"int socket_recv(resource socket, string &buf, int len, int flags)\",\n        \"Receives data from a connected socket\"\n    ],\n    \"socket_recvfrom\": [\n        \"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\n        \"Receives data from a socket, connected or not\"\n    ],\n    \"socket_select\": [\n        \"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"socket_send\": [\n        \"int socket_send(resource socket, string buf, int len, int flags)\",\n        \"Sends data to a connected socket\"\n    ],\n    \"socket_sendto\": [\n        \"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\n        \"Sends a message to a socket, whether it is connected or not\"\n    ],\n    \"socket_set_block\": [\n        \"bool socket_set_block(resource socket)\",\n        \"Sets blocking mode on a socket resource\"\n    ],\n    \"socket_set_nonblock\": [\n        \"bool socket_set_nonblock(resource socket)\",\n        \"Sets nonblocking mode on a socket resource\"\n    ],\n    \"socket_set_option\": [\n        \"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\n        \"Sets socket options for the socket\"\n    ],\n    \"socket_shutdown\": [\n        \"bool socket_shutdown(resource socket[, int how])\",\n        \"Shuts down a socket for receiving, sending, or both.\"\n    ],\n    \"socket_strerror\": [\n        \"string socket_strerror(int errno)\",\n        \"Returns a string describing an error\"\n    ],\n    \"socket_write\": [\n        \"int socket_write(resource socket, string buf[, int length])\",\n        \"Writes the buffer to the socket resource, length is optional\"\n    ],\n    \"solid_fetch_prev\": [\n        \"bool solid_fetch_prev(resource result_id)\",\n        \"\"\n    ],\n    \"sort\": [\n        \"bool sort(array &array_arg [, int sort_flags])\",\n        \"Sort an array\"\n    ],\n    \"soundex\": [\n        \"string soundex(string str)\",\n        \"Calculate the soundex key of a string\"\n    ],\n    \"spl_autoload\": [\n        \"void spl_autoload(string class_name [, string file_extensions])\",\n        \"Default implementation for __autoload()\"\n    ],\n    \"spl_autoload_call\": [\n        \"void spl_autoload_call(string class_name)\",\n        \"Try all registerd autoload function to load the requested class\"\n    ],\n    \"spl_autoload_extensions\": [\n        \"string spl_autoload_extensions([string file_extensions])\",\n        \"Register and return default file extensions for spl_autoload\"\n    ],\n    \"spl_autoload_functions\": [\n        \"false|array spl_autoload_functions()\",\n        \"Return all registered __autoload() functionns\"\n    ],\n    \"spl_autoload_register\": [\n        \"bool spl_autoload_register([mixed autoload_function = \\\"spl_autoload\\\" [, throw = true [, prepend]]])\",\n        \"Register given function as __autoload() implementation\"\n    ],\n    \"spl_autoload_unregister\": [\n        \"bool spl_autoload_unregister(mixed autoload_function)\",\n        \"Unregister given function as __autoload() implementation\"\n    ],\n    \"spl_classes\": [\n        \"array spl_classes()\",\n        \"Return an array containing the names of all clsses and interfaces defined in SPL\"\n    ],\n    \"spl_object_hash\": [\n        \"string spl_object_hash(object obj)\",\n        \"Return hash id for given object\"\n    ],\n    \"split\": [\n        \"array split(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression\"\n    ],\n    \"spliti\": [\n        \"array spliti(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression case-insensitive\"\n    ],\n    \"sprintf\": [\n        \"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Return a formatted string\"\n    ],\n    \"sql_regcase\": [\n        \"string sql_regcase(string string)\",\n        \"Make regular expression for case insensitive match\"\n    ],\n    \"sqlite_array_query\": [\n        \"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\n        \"Executes a query against a given database and returns an array of arrays.\"\n    ],\n    \"sqlite_busy_timeout\": [\n        \"void sqlite_busy_timeout(resource db, int ms)\",\n        \"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"\n    ],\n    \"sqlite_changes\": [\n        \"int sqlite_changes(resource db)\",\n        \"Returns the number of rows that were changed by the most recent SQL statement.\"\n    ],\n    \"sqlite_close\": [\n        \"void sqlite_close(resource db)\",\n        \"Closes an open sqlite database.\"\n    ],\n    \"sqlite_column\": [\n        \"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\n        \"Fetches a column from the current row of a result set.\"\n    ],\n    \"sqlite_create_aggregate\": [\n        \"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\n        \"Registers an aggregate function for queries.\"\n    ],\n    \"sqlite_create_function\": [\n        \"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",\n        \"Registers a \\\"regular\\\" function for queries.\"\n    ],\n    \"sqlite_current\": [\n        \"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the current row from a result set as an array.\"\n    ],\n    \"sqlite_error_string\": [\n        \"string sqlite_error_string(int error_code)\",\n        \"Returns the textual description of an error code.\"\n    ],\n    \"sqlite_escape_string\": [\n        \"string sqlite_escape_string(string item)\",\n        \"Escapes a string for use as a query parameter.\"\n    ],\n    \"sqlite_exec\": [\n        \"bool sqlite_exec(string query, resource db[, string &error_message])\",\n        \"Executes a result-less query against a given database\"\n    ],\n    \"sqlite_factory\": [\n        \"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_fetch_all\": [\n        \"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches all rows from a result set as an array of arrays.\"\n    ],\n    \"sqlite_fetch_array\": [\n        \"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the next row from a result set as an array.\"\n    ],\n    \"sqlite_fetch_column_types\": [\n        \"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\n        \"Return an array of column types from a particular table.\"\n    ],\n    \"sqlite_fetch_object\": [\n        \"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\n        \"Fetches the next row from a result set as an object.\"\n    ],\n    \"sqlite_fetch_single\": [\n        \"string sqlite_fetch_single(resource result [, bool decode_binary])\",\n        \"Fetches the first column of a result set as a string.\"\n    ],\n    \"sqlite_field_name\": [\n        \"string sqlite_field_name(resource result, int field_index)\",\n        \"Returns the name of a particular field of a result set.\"\n    ],\n    \"sqlite_has_prev\": [\n        \"bool sqlite_has_prev(resource result)\",\n        \"* Returns whether a previous row is available.\"\n    ],\n    \"sqlite_key\": [\n        \"int sqlite_key(resource result)\",\n        \"Return the current row index of a buffered result.\"\n    ],\n    \"sqlite_last_error\": [\n        \"int sqlite_last_error(resource db)\",\n        \"Returns the error code of the last error for a database.\"\n    ],\n    \"sqlite_last_insert_rowid\": [\n        \"int sqlite_last_insert_rowid(resource db)\",\n        \"Returns the rowid of the most recently inserted row.\"\n    ],\n    \"sqlite_libencoding\": [\n        \"string sqlite_libencoding()\",\n        \"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"\n    ],\n    \"sqlite_libversion\": [\n        \"string sqlite_libversion()\",\n        \"Returns the version of the linked SQLite library.\"\n    ],\n    \"sqlite_next\": [\n        \"bool sqlite_next(resource result)\",\n        \"Seek to the next row number of a result set.\"\n    ],\n    \"sqlite_num_fields\": [\n        \"int sqlite_num_fields(resource result)\",\n        \"Returns the number of fields in a result set.\"\n    ],\n    \"sqlite_num_rows\": [\n        \"int sqlite_num_rows(resource result)\",\n        \"Returns the number of rows in a buffered result set.\"\n    ],\n    \"sqlite_open\": [\n        \"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_popen\": [\n        \"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\n        \"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_prev\": [\n        \"bool sqlite_prev(resource result)\",\n        \"* Seek to the previous row number of a result set.\"\n    ],\n    \"sqlite_query\": [\n        \"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\n        \"Executes a query against a given database and returns a result handle.\"\n    ],\n    \"sqlite_rewind\": [\n        \"bool sqlite_rewind(resource result)\",\n        \"Seek to the first row number of a buffered result set.\"\n    ],\n    \"sqlite_seek\": [\n        \"bool sqlite_seek(resource result, int row)\",\n        \"Seek to a particular row number of a buffered result set.\"\n    ],\n    \"sqlite_single_query\": [\n        \"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\n        \"Executes a query and returns either an array for one single column or the value of the first row.\"\n    ],\n    \"sqlite_udf_decode_binary\": [\n        \"string sqlite_udf_decode_binary(string data)\",\n        \"Decode binary encoding on a string parameter passed to an UDF.\"\n    ],\n    \"sqlite_udf_encode_binary\": [\n        \"string sqlite_udf_encode_binary(string data)\",\n        \"Apply binary encoding (if required) to a string to return from an UDF.\"\n    ],\n    \"sqlite_unbuffered_query\": [\n        \"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\n        \"Executes a query that does not prefetch and buffer all data.\"\n    ],\n    \"sqlite_valid\": [\n        \"bool sqlite_valid(resource result)\",\n        \"Returns whether more rows are available.\"\n    ],\n    \"sqrt\": [\n        \"float sqrt(float number)\",\n        \"Returns the square root of the number\"\n    ],\n    \"srand\": [\n        \"void srand([int seed])\",\n        \"Seeds random number generator\"\n    ],\n    \"sscanf\": [\n        \"mixed sscanf(string str, string format [, string ...])\",\n        \"Implements an ANSI C compatible sscanf\"\n    ],\n    \"stat\": [\n        \"array stat(string filename)\",\n        \"Give information about a file\"\n    ],\n    \"str_getcsv\": [\n        \"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\n        \"Parse a CSV string into an array\"\n    ],\n    \"str_ireplace\": [\n        \"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace / case-insensitive\"\n    ],\n    \"str_pad\": [\n        \"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\n        \"Returns input string padded on the left or right to specified length with pad_string\"\n    ],\n    \"str_repeat\": [\n        \"string str_repeat(string input, int mult)\",\n        \"Returns the input string repeat mult times\"\n    ],\n    \"str_replace\": [\n        \"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace\"\n    ],\n    \"str_rot13\": [\n        \"string str_rot13(string str)\",\n        \"Perform the rot13 transform on a string\"\n    ],\n    \"str_shuffle\": [\n        \"void str_shuffle(string str)\",\n        \"Shuffles string. One permutation of all possible is created\"\n    ],\n    \"str_split\": [\n        \"array str_split(string str [, int split_length])\",\n        \"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"\n    ],\n    \"str_word_count\": [\n        \"mixed str_word_count(string str, [int format [, string charlist]])\",\n        \"Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, 'word' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \\\"'\\\" and \\\"-\\\" characters.\"\n    ],\n    \"strcasecmp\": [\n        \"int strcasecmp(string str1, string str2)\",\n        \"Binary safe case-insensitive string comparison\"\n    ],\n    \"strchr\": [\n        \"string strchr(string haystack, string needle)\",\n        \"An alias for strstr\"\n    ],\n    \"strcmp\": [\n        \"int strcmp(string str1, string str2)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strcoll\": [\n        \"int strcoll(string str1, string str2)\",\n        \"Compares two strings using the current locale\"\n    ],\n    \"strcspn\": [\n        \"int strcspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"\n    ],\n    \"stream_bucket_append\": [\n        \"void stream_bucket_append(resource brigade, resource bucket)\",\n        \"Append bucket to brigade\"\n    ],\n    \"stream_bucket_make_writeable\": [\n        \"object stream_bucket_make_writeable(resource brigade)\",\n        \"Return a bucket object from the brigade for operating on\"\n    ],\n    \"stream_bucket_new\": [\n        \"resource stream_bucket_new(resource stream, string buffer)\",\n        \"Create a new bucket for use on the current stream\"\n    ],\n    \"stream_bucket_prepend\": [\n        \"void stream_bucket_prepend(resource brigade, resource bucket)\",\n        \"Prepend bucket to brigade\"\n    ],\n    \"stream_context_create\": [\n        \"resource stream_context_create([array options[, array params]])\",\n        \"Create a file context and optionally set parameters\"\n    ],\n    \"stream_context_get_default\": [\n        \"resource stream_context_get_default([array options])\",\n        \"Get a handle on the default file/stream context and optionally set parameters\"\n    ],\n    \"stream_context_get_options\": [\n        \"array stream_context_get_options(resource context|resource stream)\",\n        \"Retrieve options for a stream/wrapper/context\"\n    ],\n    \"stream_context_get_params\": [\n        \"array stream_context_get_params(resource context|resource stream)\",\n        \"Get parameters of a file context\"\n    ],\n    \"stream_context_set_default\": [\n        \"resource stream_context_set_default(array options)\",\n        \"Set default file/stream context, returns the context as a resource\"\n    ],\n    \"stream_context_set_option\": [\n        \"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\n        \"Set an option for a wrapper\"\n    ],\n    \"stream_context_set_params\": [\n        \"bool stream_context_set_params(resource context|resource stream, array options)\",\n        \"Set parameters for a file context\"\n    ],\n    \"stream_copy_to_stream\": [\n        \"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\n        \"Reads up to maxlen bytes from source stream and writes them to dest stream.\"\n    ],\n    \"stream_filter_append\": [\n        \"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Append a filter to a stream\"\n    ],\n    \"stream_filter_prepend\": [\n        \"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Prepend a filter to a stream\"\n    ],\n    \"stream_filter_register\": [\n        \"bool stream_filter_register(string filtername, string classname)\",\n        \"Registers a custom filter handler class\"\n    ],\n    \"stream_filter_remove\": [\n        \"bool stream_filter_remove(resource stream_filter)\",\n        \"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"\n    ],\n    \"stream_get_contents\": [\n        \"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\n        \"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"\n    ],\n    \"stream_get_filters\": [\n        \"array stream_get_filters()\",\n        \"Returns a list of registered filters\"\n    ],\n    \"stream_get_line\": [\n        \"string stream_get_line(resource stream, int maxlen [, string ending])\",\n        \"Read up to maxlen bytes from a stream or until the ending string is found\"\n    ],\n    \"stream_get_meta_data\": [\n        \"array stream_get_meta_data(resource fp)\",\n        \"Retrieves header/meta data from streams/file pointers\"\n    ],\n    \"stream_get_transports\": [\n        \"array stream_get_transports()\",\n        \"Retrieves list of registered socket transports\"\n    ],\n    \"stream_get_wrappers\": [\n        \"array stream_get_wrappers()\",\n        \"Retrieves list of registered stream wrappers\"\n    ],\n    \"stream_is_local\": [\n        \"bool stream_is_local(resource stream|string url)\",\n        \"\"\n    ],\n    \"stream_resolve_include_path\": [\n        \"string stream_resolve_include_path(string filename)\",\n        \"Determine what file will be opened by calls to fopen() with a relative path\"\n    ],\n    \"stream_select\": [\n        \"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"stream_set_blocking\": [\n        \"bool stream_set_blocking(resource socket, int mode)\",\n        \"Set blocking/non-blocking mode on a socket or stream\"\n    ],\n    \"stream_set_timeout\": [\n        \"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\n        \"Set timeout on stream read to seconds + microseonds\"\n    ],\n    \"stream_set_write_buffer\": [\n        \"int stream_set_write_buffer(resource fp, int buffer)\",\n        \"Set file write buffer\"\n    ],\n    \"stream_socket_accept\": [\n        \"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\n        \"Accept a client connection from a server socket\"\n    ],\n    \"stream_socket_client\": [\n        \"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\n        \"Open a client connection to a remote address\"\n    ],\n    \"stream_socket_enable_crypto\": [\n        \"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\n        \"Enable or disable a specific kind of crypto on the stream\"\n    ],\n    \"stream_socket_get_name\": [\n        \"string stream_socket_get_name(resource stream, bool want_peer)\",\n        \"Returns either the locally bound or remote name for a socket stream\"\n    ],\n    \"stream_socket_pair\": [\n        \"array stream_socket_pair(int domain, int type, int protocol)\",\n        \"Creates a pair of connected, indistinguishable socket streams\"\n    ],\n    \"stream_socket_recvfrom\": [\n        \"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\n        \"Receives data from a socket stream\"\n    ],\n    \"stream_socket_sendto\": [\n        \"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\n        \"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"\n    ],\n    \"stream_socket_server\": [\n        \"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\n        \"Create a server socket bound to localaddress\"\n    ],\n    \"stream_socket_shutdown\": [\n        \"int stream_socket_shutdown(resource stream, int how)\",\n        \"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"\n    ],\n    \"stream_supports_lock\": [\n        \"bool stream_supports_lock(resource stream)\",\n        \"Tells whether the stream supports locking through flock().\"\n    ],\n    \"stream_wrapper_register\": [\n        \"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\n        \"Registers a custom URL protocol handler class\"\n    ],\n    \"stream_wrapper_restore\": [\n        \"bool stream_wrapper_restore(string protocol)\",\n        \"Restore the original protocol handler, overriding if necessary\"\n    ],\n    \"stream_wrapper_unregister\": [\n        \"bool stream_wrapper_unregister(string protocol)\",\n        \"Unregister a wrapper for the life of the current request.\"\n    ],\n    \"strftime\": [\n        \"string strftime(string format [, int timestamp])\",\n        \"Format a local time/date according to locale settings\"\n    ],\n    \"strip_tags\": [\n        \"string strip_tags(string str [, string allowable_tags])\",\n        \"Strips HTML and PHP tags from a string\"\n    ],\n    \"stripcslashes\": [\n        \"string stripcslashes(string str)\",\n        \"Strips backslashes from a string. Uses C-style conventions\"\n    ],\n    \"stripos\": [\n        \"int stripos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"stripslashes\": [\n        \"string stripslashes(string str)\",\n        \"Strips backslashes from a string\"\n    ],\n    \"stristr\": [\n        \"string stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"strlen\": [\n        \"int strlen(string str)\",\n        \"Get string length\"\n    ],\n    \"strnatcasecmp\": [\n        \"int strnatcasecmp(string s1, string s2)\",\n        \"Returns the result of case-insensitive string comparison using 'natural' algorithm\"\n    ],\n    \"strnatcmp\": [\n        \"int strnatcmp(string s1, string s2)\",\n        \"Returns the result of string comparison using 'natural' algorithm\"\n    ],\n    \"strncasecmp\": [\n        \"int strncasecmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strncmp\": [\n        \"int strncmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strpbrk\": [\n        \"array strpbrk(string haystack, string char_list)\",\n        \"Search a string for any of a set of characters\"\n    ],\n    \"strpos\": [\n        \"int strpos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another\"\n    ],\n    \"strptime\": [\n        \"string strptime(string timestamp, string format)\",\n        \"Parse a time/date generated with strftime()\"\n    ],\n    \"strrchr\": [\n        \"string strrchr(string haystack, string needle)\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"strrev\": [\n        \"string strrev(string str)\",\n        \"Reverse a string\"\n    ],\n    \"strripos\": [\n        \"int strripos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strrpos\": [\n        \"int strrpos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strspn\": [\n        \"int strspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"\n    ],\n    \"strstr\": [\n        \"string strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"strtok\": [\n        \"string strtok([string str,] string token)\",\n        \"Tokenize a string\"\n    ],\n    \"strtolower\": [\n        \"string strtolower(string str)\",\n        \"Makes a string lowercase\"\n    ],\n    \"strtotime\": [\n        \"int strtotime(string time [, int now ])\",\n        \"Convert string representation of date and time to a timestamp\"\n    ],\n    \"strtoupper\": [\n        \"string strtoupper(string str)\",\n        \"Makes a string uppercase\"\n    ],\n    \"strtr\": [\n        \"string strtr(string str, string from[, string to])\",\n        \"Translates characters in str using given translation tables\"\n    ],\n    \"strval\": [\n        \"string strval(mixed var)\",\n        \"Get the string value of a variable\"\n    ],\n    \"substr\": [\n        \"string substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"substr_compare\": [\n        \"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\n        \"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"\n    ],\n    \"substr_count\": [\n        \"int substr_count(string haystack, string needle [, int offset [, int length]])\",\n        \"Returns the number of times a substring occurs in the string\"\n    ],\n    \"substr_replace\": [\n        \"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\n        \"Replaces part of a string with another string\"\n    ],\n    \"sybase_affected_rows\": [\n        \"int sybase_affected_rows([resource link_id])\",\n        \"Get number of affected rows in last query\"\n    ],\n    \"sybase_close\": [\n        \"bool sybase_close([resource link_id])\",\n        \"Close Sybase connection\"\n    ],\n    \"sybase_connect\": [\n        \"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\n        \"Open Sybase server connection\"\n    ],\n    \"sybase_data_seek\": [\n        \"bool sybase_data_seek(resource result, int offset)\",\n        \"Move internal row pointer\"\n    ],\n    \"sybase_deadlock_retry_count\": [\n        \"void sybase_deadlock_retry_count(int retry_count)\",\n        \"Sets deadlock retry count\"\n    ],\n    \"sybase_fetch_array\": [\n        \"array sybase_fetch_array(resource result)\",\n        \"Fetch row as array\"\n    ],\n    \"sybase_fetch_assoc\": [\n        \"array sybase_fetch_assoc(resource result)\",\n        \"Fetch row as array without numberic indices\"\n    ],\n    \"sybase_fetch_field\": [\n        \"object sybase_fetch_field(resource result [, int offset])\",\n        \"Get field information\"\n    ],\n    \"sybase_fetch_object\": [\n        \"object sybase_fetch_object(resource result [, mixed object])\",\n        \"Fetch row as object\"\n    ],\n    \"sybase_fetch_row\": [\n        \"array sybase_fetch_row(resource result)\",\n        \"Get row as enumerated array\"\n    ],\n    \"sybase_field_seek\": [\n        \"bool sybase_field_seek(resource result, int offset)\",\n        \"Set field offset\"\n    ],\n    \"sybase_free_result\": [\n        \"bool sybase_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"sybase_get_last_message\": [\n        \"string sybase_get_last_message()\",\n        \"Returns the last message from server (over min_message_severity)\"\n    ],\n    \"sybase_min_client_severity\": [\n        \"void sybase_min_client_severity(int severity)\",\n        \"Sets minimum client severity\"\n    ],\n    \"sybase_min_server_severity\": [\n        \"void sybase_min_server_severity(int severity)\",\n        \"Sets minimum server severity\"\n    ],\n    \"sybase_num_fields\": [\n        \"int sybase_num_fields(resource result)\",\n        \"Get number of fields in result\"\n    ],\n    \"sybase_num_rows\": [\n        \"int sybase_num_rows(resource result)\",\n        \"Get number of rows in result\"\n    ],\n    \"sybase_pconnect\": [\n        \"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\n        \"Open persistent Sybase connection\"\n    ],\n    \"sybase_query\": [\n        \"int sybase_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"sybase_result\": [\n        \"string sybase_result(resource result, int row, mixed field)\",\n        \"Get result data\"\n    ],\n    \"sybase_select_db\": [\n        \"bool sybase_select_db(string database [, resource link_id])\",\n        \"Select Sybase database\"\n    ],\n    \"sybase_set_message_handler\": [\n        \"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\n        \"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"\n    ],\n    \"sybase_unbuffered_query\": [\n        \"int sybase_unbuffered_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"symlink\": [\n        \"int symlink(string target, string link)\",\n        \"Create a symbolic link\"\n    ],\n    \"sys_get_temp_dir\": [\n        \"string sys_get_temp_dir()\",\n        \"Returns directory path used for temporary files\"\n    ],\n    \"sys_getloadavg\": [\n        \"array sys_getloadavg()\",\n        \"\"\n    ],\n    \"syslog\": [\n        \"bool syslog(int priority, string message)\",\n        \"Generate a system log message\"\n    ],\n    \"system\": [\n        \"int system(string command [, int &return_value])\",\n        \"Execute an external program and display output\"\n    ],\n    \"tan\": [\n        \"float tan(float number)\",\n        \"Returns the tangent of the number in radians\"\n    ],\n    \"tanh\": [\n        \"float tanh(float number)\",\n        \"Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)\"\n    ],\n    \"tempnam\": [\n        \"string tempnam(string dir, string prefix)\",\n        \"Create a unique filename in a directory\"\n    ],\n    \"textdomain\": [\n        \"string textdomain(string domain)\",\n        \"Set the textdomain to \\\"domain\\\". Returns the current domain\"\n    ],\n    \"tidy_access_count\": [\n        \"int tidy_access_count()\",\n        \"Returns the Number of Tidy accessibility warnings encountered for specified document.\"\n    ],\n    \"tidy_clean_repair\": [\n        \"bool tidy_clean_repair()\",\n        \"Execute configured cleanup and repair operations on parsed markup\"\n    ],\n    \"tidy_config_count\": [\n        \"int tidy_config_count()\",\n        \"Returns the Number of Tidy configuration errors encountered for specified document.\"\n    ],\n    \"tidy_diagnose\": [\n        \"bool tidy_diagnose()\",\n        \"Run configured diagnostics on parsed and repaired markup.\"\n    ],\n    \"tidy_error_count\": [\n        \"int tidy_error_count()\",\n        \"Returns the Number of Tidy errors encountered for specified document.\"\n    ],\n    \"tidy_get_body\": [\n        \"TidyNode tidy_get_body(resource tidy)\",\n        \"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_config\": [\n        \"array tidy_get_config()\",\n        \"Get current Tidy configuarion\"\n    ],\n    \"tidy_get_error_buffer\": [\n        \"string tidy_get_error_buffer([bool detailed])\",\n        \"Return warnings and errors which occured parsing the specified document\"\n    ],\n    \"tidy_get_head\": [\n        \"TidyNode tidy_get_head()\",\n        \"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html\": [\n        \"TidyNode tidy_get_html()\",\n        \"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html_ver\": [\n        \"int tidy_get_html_ver()\",\n        \"Get the Detected HTML version for the specified document.\"\n    ],\n    \"tidy_get_opt_doc\": [\n        \"string tidy_get_opt_doc(tidy resource, string optname)\",\n        \"Returns the documentation for the given option name\"\n    ],\n    \"tidy_get_output\": [\n        \"string tidy_get_output()\",\n        \"Return a string representing the parsed tidy markup\"\n    ],\n    \"tidy_get_release\": [\n        \"string tidy_get_release()\",\n        \"Get release date (version) for Tidy library\"\n    ],\n    \"tidy_get_root\": [\n        \"TidyNode tidy_get_root()\",\n        \"Returns a TidyNode Object representing the root of the tidy parse tree\"\n    ],\n    \"tidy_get_status\": [\n        \"int tidy_get_status()\",\n        \"Get status of specfied document.\"\n    ],\n    \"tidy_getopt\": [\n        \"mixed tidy_getopt(string option)\",\n        \"Returns the value of the specified configuration option for the tidy document.\"\n    ],\n    \"tidy_is_xhtml\": [\n        \"bool tidy_is_xhtml()\",\n        \"Indicates if the document is a XHTML document.\"\n    ],\n    \"tidy_is_xml\": [\n        \"bool tidy_is_xml()\",\n        \"Indicates if the document is a generic (non HTML/XHTML) XML document.\"\n    ],\n    \"tidy_parse_file\": [\n        \"bool tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\n        \"Parse markup in file or URI\"\n    ],\n    \"tidy_parse_string\": [\n        \"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\n        \"Parse a document stored in a string\"\n    ],\n    \"tidy_repair_file\": [\n        \"bool tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\n        \"Repair a file using an optionally provided configuration file\"\n    ],\n    \"tidy_repair_string\": [\n        \"bool tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\n        \"Repair a string using an optionally provided configuration file\"\n    ],\n    \"tidy_warning_count\": [\n        \"int tidy_warning_count()\",\n        \"Returns the Number of Tidy warnings encountered for specified document.\"\n    ],\n    \"time\": [\n        \"int time()\",\n        \"Return current UNIX timestamp\"\n    ],\n    \"time_nanosleep\": [\n        \"mixed time_nanosleep(long seconds, long nanoseconds)\",\n        \"Delay for a number of seconds and nano seconds\"\n    ],\n    \"time_sleep_until\": [\n        \"mixed time_sleep_until(float timestamp)\",\n        \"Make the script sleep until the specified time\"\n    ],\n    \"timezone_abbreviations_list\": [\n        \"array timezone_abbreviations_list()\",\n        \"Returns associative array containing dst, offset and the timezone name\"\n    ],\n    \"timezone_identifiers_list\": [\n        \"array timezone_identifiers_list([long what[, string country]])\",\n        \"Returns numerically index array with all timezone identifiers.\"\n    ],\n    \"timezone_location_get\": [\n        \"array timezone_location_get()\",\n        \"Returns location information for a timezone, including country code, latitude/longitude and comments\"\n    ],\n    \"timezone_name_from_abbr\": [\n        \"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\n        \"Returns the timezone name from abbrevation\"\n    ],\n    \"timezone_name_get\": [\n        \"string timezone_name_get(DateTimeZone object)\",\n        \"Returns the name of the timezone.\"\n    ],\n    \"timezone_offset_get\": [\n        \"long timezone_offset_get(DateTimeZone object, DateTime object)\",\n        \"Returns the timezone offset.\"\n    ],\n    \"timezone_open\": [\n        \"DateTimeZone timezone_open(string timezone)\",\n        \"Returns new DateTimeZone object\"\n    ],\n    \"timezone_transitions_get\": [\n        \"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\n        \"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"\n    ],\n    \"timezone_version_get\": [\n        \"array timezone_version_get()\",\n        \"Returns the Olson database version number.\"\n    ],\n    \"tmpfile\": [\n        \"resource tmpfile()\",\n        \"Create a temporary file that will be deleted automatically after use\"\n    ],\n    \"token_get_all\": [\n        \"array token_get_all(string source)\",\n        \"\"\n    ],\n    \"token_name\": [\n        \"string token_name(int type)\",\n        \"\"\n    ],\n    \"touch\": [\n        \"bool touch(string filename [, int time [, int atime]])\",\n        \"Set modification time of file\"\n    ],\n    \"trigger_error\": [\n        \"void trigger_error(string messsage [, int error_type])\",\n        \"Generates a user-level error/warning/notice message\"\n    ],\n    \"trim\": [\n        \"string trim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning and end of a string\"\n    ],\n    \"uasort\": [\n        \"bool uasort(array array_arg, string cmp_function)\",\n        \"Sort an array with a user-defined comparison function and maintain index association\"\n    ],\n    \"ucfirst\": [\n        \"string ucfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"ucwords\": [\n        \"string ucwords(string str)\",\n        \"Uppercase the first character of every word in a string\"\n    ],\n    \"uksort\": [\n        \"bool uksort(array array_arg, string cmp_function)\",\n        \"Sort an array by keys using a user-defined comparison function\"\n    ],\n    \"umask\": [\n        \"int umask([int mask])\",\n        \"Return or change the umask\"\n    ],\n    \"uniqid\": [\n        \"string uniqid([string prefix [, bool more_entropy]])\",\n        \"Generates a unique ID\"\n    ],\n    \"unixtojd\": [\n        \"int unixtojd([int timestamp])\",\n        \"Convert UNIX timestamp to Julian Day\"\n    ],\n    \"unlink\": [\n        \"bool unlink(string filename[, context context])\",\n        \"Delete a file\"\n    ],\n    \"unpack\": [\n        \"array unpack(string format, string input)\",\n        \"Unpack binary string into named array elements according to format argument\"\n    ],\n    \"unregister_tick_function\": [\n        \"void unregister_tick_function(string function_name)\",\n        \"Unregisters a tick callback function\"\n    ],\n    \"unserialize\": [\n        \"mixed unserialize(string variable_representation)\",\n        \"Takes a string representation of variable and recreates it\"\n    ],\n    \"unset\": [\n        \"void unset(mixed var [, mixed var])\",\n        \"Unset a given variable\"\n    ],\n    \"urldecode\": [\n        \"string urldecode(string str)\",\n        \"Decodes URL-encoded string\"\n    ],\n    \"urlencode\": [\n        \"string urlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"usleep\": [\n        \"void usleep(int micro_seconds)\",\n        \"Delay for a given number of micro seconds\"\n    ],\n    \"usort\": [\n        \"bool usort(array array_arg, string cmp_function)\",\n        \"Sort an array by values using a user-defined comparison function\"\n    ],\n    \"utf8_decode\": [\n        \"string utf8_decode(string data)\",\n        \"Converts a UTF-8 encoded string to ISO-8859-1\"\n    ],\n    \"utf8_encode\": [\n        \"string utf8_encode(string data)\",\n        \"Encodes an ISO-8859-1 string to UTF-8\"\n    ],\n    \"var_dump\": [\n        \"void var_dump(mixed var)\",\n        \"Dumps a string representation of variable to output\"\n    ],\n    \"var_export\": [\n        \"string var_export(mixed var [, bool return])\",\n        \"Outputs or returns a string representation of a variable\"\n    ],\n    \"variant_abs\": [\n        \"mixed variant_abs(mixed left)\",\n        \"Returns the absolute value of a variant\"\n    ],\n    \"variant_add\": [\n        \"mixed variant_add(mixed left, mixed right)\",\n        \"\\\"Adds\\\" two variant values together and returns the result\"\n    ],\n    \"variant_and\": [\n        \"mixed variant_and(mixed left, mixed right)\",\n        \"performs a bitwise AND operation between two variants and returns the result\"\n    ],\n    \"variant_cast\": [\n        \"object variant_cast(object variant, int type)\",\n        \"Convert a variant into a new variant object of another type\"\n    ],\n    \"variant_cat\": [\n        \"mixed variant_cat(mixed left, mixed right)\",\n        \"concatenates two variant values together and returns the result\"\n    ],\n    \"variant_cmp\": [\n        \"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\n        \"Compares two variants\"\n    ],\n    \"variant_date_from_timestamp\": [\n        \"object variant_date_from_timestamp(int timestamp)\",\n        \"Returns a variant date representation of a unix timestamp\"\n    ],\n    \"variant_date_to_timestamp\": [\n        \"int variant_date_to_timestamp(object variant)\",\n        \"Converts a variant date/time value to unix timestamp\"\n    ],\n    \"variant_div\": [\n        \"mixed variant_div(mixed left, mixed right)\",\n        \"Returns the result from dividing two variants\"\n    ],\n    \"variant_eqv\": [\n        \"mixed variant_eqv(mixed left, mixed right)\",\n        \"Performs a bitwise equivalence on two variants\"\n    ],\n    \"variant_fix\": [\n        \"mixed variant_fix(mixed left)\",\n        \"Returns the integer part ? of a variant\"\n    ],\n    \"variant_get_type\": [\n        \"int variant_get_type(object variant)\",\n        \"Returns the VT_XXX type code for a variant\"\n    ],\n    \"variant_idiv\": [\n        \"mixed variant_idiv(mixed left, mixed right)\",\n        \"Converts variants to integers and then returns the result from dividing them\"\n    ],\n    \"variant_imp\": [\n        \"mixed variant_imp(mixed left, mixed right)\",\n        \"Performs a bitwise implication on two variants\"\n    ],\n    \"variant_int\": [\n        \"mixed variant_int(mixed left)\",\n        \"Returns the integer portion of a variant\"\n    ],\n    \"variant_mod\": [\n        \"mixed variant_mod(mixed left, mixed right)\",\n        \"Divides two variants and returns only the remainder\"\n    ],\n    \"variant_mul\": [\n        \"mixed variant_mul(mixed left, mixed right)\",\n        \"multiplies the values of the two variants and returns the result\"\n    ],\n    \"variant_neg\": [\n        \"mixed variant_neg(mixed left)\",\n        \"Performs logical negation on a variant\"\n    ],\n    \"variant_not\": [\n        \"mixed variant_not(mixed left)\",\n        \"Performs bitwise not negation on a variant\"\n    ],\n    \"variant_or\": [\n        \"mixed variant_or(mixed left, mixed right)\",\n        \"Performs a logical disjunction on two variants\"\n    ],\n    \"variant_pow\": [\n        \"mixed variant_pow(mixed left, mixed right)\",\n        \"Returns the result of performing the power function with two variants\"\n    ],\n    \"variant_round\": [\n        \"mixed variant_round(mixed left, int decimals)\",\n        \"Rounds a variant to the specified number of decimal places\"\n    ],\n    \"variant_set\": [\n        \"void variant_set(object variant, mixed value)\",\n        \"Assigns a new value for a variant object\"\n    ],\n    \"variant_set_type\": [\n        \"void variant_set_type(object variant, int type)\",\n        \"Convert a variant into another type.  Variant is modified \\\"in-place\\\"\"\n    ],\n    \"variant_sub\": [\n        \"mixed variant_sub(mixed left, mixed right)\",\n        \"subtracts the value of the right variant from the left variant value and returns the result\"\n    ],\n    \"variant_xor\": [\n        \"mixed variant_xor(mixed left, mixed right)\",\n        \"Performs a logical exclusion on two variants\"\n    ],\n    \"version_compare\": [\n        \"int version_compare(string ver1, string ver2 [, string oper])\",\n        \"Compares two \\\"PHP-standardized\\\" version number strings\"\n    ],\n    \"vfprintf\": [\n        \"int vfprintf(resource stream, string format, array args)\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"virtual\": [\n        \"bool virtual(string filename)\",\n        \"Perform an Apache sub-request\"\n    ],\n    \"vprintf\": [\n        \"int vprintf(string format, array args)\",\n        \"Output a formatted string\"\n    ],\n    \"vsprintf\": [\n        \"string vsprintf(string format, array args)\",\n        \"Return a formatted string\"\n    ],\n    \"wddx_add_vars\": [\n        \"int wddx_add_vars(resource packet_id, mixed var_names [, mixed ...])\",\n        \"Serializes given variables and adds them to packet given by packet_id\"\n    ],\n    \"wddx_deserialize\": [\n        \"mixed wddx_deserialize(mixed packet)\",\n        \"Deserializes given packet and returns a PHP value\"\n    ],\n    \"wddx_packet_end\": [\n        \"string wddx_packet_end(resource packet_id)\",\n        \"Ends specified WDDX packet and returns the string containing the packet\"\n    ],\n    \"wddx_packet_start\": [\n        \"resource wddx_packet_start([string comment])\",\n        \"Starts a WDDX packet with optional comment and returns the packet id\"\n    ],\n    \"wddx_serialize_value\": [\n        \"string wddx_serialize_value(mixed var [, string comment])\",\n        \"Creates a new packet and serializes the given value\"\n    ],\n    \"wddx_serialize_vars\": [\n        \"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\n        \"Creates a new packet and serializes given variables into a struct\"\n    ],\n    \"wordwrap\": [\n        \"string wordwrap(string str [, int width [, string break [, bool cut]]])\",\n        \"Wraps buffer to selected number of characters using string break char\"\n    ],\n    \"xml_error_string\": [\n        \"string xml_error_string(int code)\",\n        \"Get XML parser error string\"\n    ],\n    \"xml_get_current_byte_index\": [\n        \"int xml_get_current_byte_index(resource parser)\",\n        \"Get current byte index for an XML parser\"\n    ],\n    \"xml_get_current_column_number\": [\n        \"int xml_get_current_column_number(resource parser)\",\n        \"Get current column number for an XML parser\"\n    ],\n    \"xml_get_current_line_number\": [\n        \"int xml_get_current_line_number(resource parser)\",\n        \"Get current line number for an XML parser\"\n    ],\n    \"xml_get_error_code\": [\n        \"int xml_get_error_code(resource parser)\",\n        \"Get XML parser error code\"\n    ],\n    \"xml_parse\": [\n        \"int xml_parse(resource parser, string data [, int isFinal])\",\n        \"Start parsing an XML document\"\n    ],\n    \"xml_parse_into_struct\": [\n        \"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\n        \"Parsing a XML document\"\n    ],\n    \"xml_parser_create\": [\n        \"resource xml_parser_create([string encoding])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_create_ns\": [\n        \"resource xml_parser_create_ns([string encoding [, string sep]])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_free\": [\n        \"int xml_parser_free(resource parser)\",\n        \"Free an XML parser\"\n    ],\n    \"xml_parser_get_option\": [\n        \"int xml_parser_get_option(resource parser, int option)\",\n        \"Get options from an XML parser\"\n    ],\n    \"xml_parser_set_option\": [\n        \"int xml_parser_set_option(resource parser, int option, mixed value)\",\n        \"Set options in an XML parser\"\n    ],\n    \"xml_set_character_data_handler\": [\n        \"int xml_set_character_data_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_default_handler\": [\n        \"int xml_set_default_handler(resource parser, string hdl)\",\n        \"Set up default handler\"\n    ],\n    \"xml_set_element_handler\": [\n        \"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\n        \"Set up start and end element handlers\"\n    ],\n    \"xml_set_end_namespace_decl_handler\": [\n        \"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_external_entity_ref_handler\": [\n        \"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\n        \"Set up external entity reference handler\"\n    ],\n    \"xml_set_notation_decl_handler\": [\n        \"int xml_set_notation_decl_handler(resource parser, string hdl)\",\n        \"Set up notation declaration handler\"\n    ],\n    \"xml_set_object\": [\n        \"int xml_set_object(resource parser, object &obj)\",\n        \"Set up object which should be used for callbacks\"\n    ],\n    \"xml_set_processing_instruction_handler\": [\n        \"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\n        \"Set up processing instruction (PI) handler\"\n    ],\n    \"xml_set_start_namespace_decl_handler\": [\n        \"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_unparsed_entity_decl_handler\": [\n        \"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\n        \"Set up unparsed entity declaration handler\"\n    ],\n    \"xmlrpc_decode\": [\n        \"array xmlrpc_decode(string xml [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_decode_request\": [\n        \"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_encode\": [\n        \"string xmlrpc_encode(mixed value)\",\n        \"Generates XML for a PHP value\"\n    ],\n    \"xmlrpc_encode_request\": [\n        \"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\n        \"Generates XML for a method request\"\n    ],\n    \"xmlrpc_get_type\": [\n        \"string xmlrpc_get_type(mixed value)\",\n        \"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"\n    ],\n    \"xmlrpc_is_fault\": [\n        \"bool xmlrpc_is_fault(array)\",\n        \"Determines if an array value represents an XMLRPC fault.\"\n    ],\n    \"xmlrpc_parse_method_descriptions\": [\n        \"array xmlrpc_parse_method_descriptions(string xml)\",\n        \"Decodes XML into a list of method descriptions\"\n    ],\n    \"xmlrpc_server_add_introspection_data\": [\n        \"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\n        \"Adds introspection documentation\"\n    ],\n    \"xmlrpc_server_call_method\": [\n        \"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\n        \"Parses XML requests and call methods\"\n    ],\n    \"xmlrpc_server_create\": [\n        \"resource xmlrpc_server_create()\",\n        \"Creates an xmlrpc server\"\n    ],\n    \"xmlrpc_server_destroy\": [\n        \"int xmlrpc_server_destroy(resource server)\",\n        \"Destroys server resources\"\n    ],\n    \"xmlrpc_server_register_introspection_callback\": [\n        \"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\n        \"Register a PHP function to generate documentation\"\n    ],\n    \"xmlrpc_server_register_method\": [\n        \"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\n        \"Register a PHP function to handle method matching method_name\"\n    ],\n    \"xmlrpc_set_type\": [\n        \"bool xmlrpc_set_type(string value, string type)\",\n        \"Sets xmlrpc type, base64 or datetime, for a PHP string value\"\n    ],\n    \"xmlwriter_end_attribute\": [\n        \"bool xmlwriter_end_attribute(resource xmlwriter)\",\n        \"End attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_cdata\": [\n        \"bool xmlwriter_end_cdata(resource xmlwriter)\",\n        \"End current CDATA - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_comment\": [\n        \"bool xmlwriter_end_comment(resource xmlwriter)\",\n        \"Create end comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_document\": [\n        \"bool xmlwriter_end_document(resource xmlwriter)\",\n        \"End current document - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd\": [\n        \"bool xmlwriter_end_dtd(resource xmlwriter)\",\n        \"End current DTD - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_attlist\": [\n        \"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\n        \"End current DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_element\": [\n        \"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\n        \"End current DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_entity\": [\n        \"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\n        \"End current DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_element\": [\n        \"bool xmlwriter_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_pi\": [\n        \"bool xmlwriter_end_pi(resource xmlwriter)\",\n        \"End current PI - returns FALSE on error\"\n    ],\n    \"xmlwriter_flush\": [\n        \"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\n        \"Output current buffer\"\n    ],\n    \"xmlwriter_full_end_element\": [\n        \"bool xmlwriter_full_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_open_memory\": [\n        \"resource xmlwriter_open_memory()\",\n        \"Create new xmlwriter using memory for string output\"\n    ],\n    \"xmlwriter_open_uri\": [\n        \"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\n        \"Create new xmlwriter using source uri for output\"\n    ],\n    \"xmlwriter_output_memory\": [\n        \"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\n        \"Output current buffer as string\"\n    ],\n    \"xmlwriter_set_indent\": [\n        \"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\n        \"Toggle indentation on/off - returns FALSE on error\"\n    ],\n    \"xmlwriter_set_indent_string\": [\n        \"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\n        \"Set string used for indenting - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute\": [\n        \"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\n        \"Create start attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute_ns\": [\n        \"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_cdata\": [\n        \"bool xmlwriter_start_cdata(resource xmlwriter)\",\n        \"Create start CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_comment\": [\n        \"bool xmlwriter_start_comment(resource xmlwriter)\",\n        \"Create start comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_document\": [\n        \"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\n        \"Create document tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd\": [\n        \"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\n        \"Create start DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_attlist\": [\n        \"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\n        \"Create start DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_element\": [\n        \"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\n        \"Create start DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_entity\": [\n        \"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\n        \"Create start DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element\": [\n        \"bool xmlwriter_start_element(resource xmlwriter, string name)\",\n        \"Create start element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element_ns\": [\n        \"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_pi\": [\n        \"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\n        \"Create start PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_text\": [\n        \"bool xmlwriter_text(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute\": [\n        \"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\n        \"Write full attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute_ns\": [\n        \"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\n        \"Write full namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_cdata\": [\n        \"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\n        \"Write full CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_comment\": [\n        \"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\n        \"Write full comment tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd\": [\n        \"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\n        \"Write full DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_attlist\": [\n        \"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\n        \"Write full DTD AttList tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_element\": [\n        \"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\n        \"Write full DTD element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_entity\": [\n        \"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\n        \"Write full DTD Entity tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element\": [\n        \"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\n        \"Write full element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element_ns\": [\n        \"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\n        \"Write full namespaced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_pi\": [\n        \"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\n        \"Write full PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_raw\": [\n        \"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xsl_xsltprocessor_get_parameter\": [\n        \"string xsl_xsltprocessor_get_parameter(string namespace, string name)\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_has_exslt_support\": [\n        \"bool xsl_xsltprocessor_has_exslt_support()\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_import_stylesheet\": [\n        \"void xsl_xsltprocessor_import_stylesheet(domdocument doc)\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_register_php_functions\": [\n        \"void xsl_xsltprocessor_register_php_functions([mixed $restrict])\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_remove_parameter\": [\n        \"bool xsl_xsltprocessor_remove_parameter(string namespace, string name)\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_parameter\": [\n        \"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value])\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_profiling\": [\n        \"bool xsl_xsltprocessor_set_profiling(string filename)\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_transform_to_doc\": [\n        \"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc)\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_transform_to_uri\": [\n        \"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri)\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_transform_to_xml\": [\n        \"string xsl_xsltprocessor_transform_to_xml(domdocument doc)\",\n        \"\"\n    ],\n    \"zend_logo_guid\": [\n        \"string zend_logo_guid()\",\n        \"Return the special ID used to request the Zend logo in phpinfo screens\"\n    ],\n    \"zend_version\": [\n        \"string zend_version()\",\n        \"Get the version of the Zend Engine\"\n    ],\n    \"zip_close\": [\n        \"void zip_close(resource zip)\",\n        \"Close a Zip archive\"\n    ],\n    \"zip_entry_close\": [\n        \"void zip_entry_close(resource zip_ent)\",\n        \"Close a zip entry\"\n    ],\n    \"zip_entry_compressedsize\": [\n        \"int zip_entry_compressedsize(resource zip_entry)\",\n        \"Return the compressed size of a ZZip entry\"\n    ],\n    \"zip_entry_compressionmethod\": [\n        \"string zip_entry_compressionmethod(resource zip_entry)\",\n        \"Return a string containing the compression method used on a particular entry\"\n    ],\n    \"zip_entry_filesize\": [\n        \"int zip_entry_filesize(resource zip_entry)\",\n        \"Return the actual filesize of a ZZip entry\"\n    ],\n    \"zip_entry_name\": [\n        \"string zip_entry_name(resource zip_entry)\",\n        \"Return the name given a ZZip entry\"\n    ],\n    \"zip_entry_open\": [\n        \"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\n        \"Open a Zip File, pointed by the resource entry\"\n    ],\n    \"zip_entry_read\": [\n        \"mixed zip_entry_read(resource zip_entry [, int len])\",\n        \"Read from an open directory entry\"\n    ],\n    \"zip_open\": [\n        \"resource zip_open(string filename)\",\n        \"Create new zip using source uri for output\"\n    ],\n    \"zip_read\": [\n        \"resource zip_read(resource zip)\",\n        \"Returns the next file in the archive\"\n    ],\n    \"zlib_get_coding_type\": [\n        \"string zlib_get_coding_type()\",\n        \"Returns the coding type used for output compression\"\n    ],\n    \"array_column\": [\n        \"array_column(array $array, int|string|null $column_key, int|string|null $index_key = null): array\",\n        \"Return the values from a single column in the input array\"\n    ],\n    \"boolval\": [\n        \"boolval(mixed $value): bool\",\n        \"Get the boolean value of a variable\"\n    ],\n    \"bzclose\": [\n        \"bzclose(resource $bz): bool\",\n        \"Close a bzip2 file\"\n    ],\n    \"bzflush\": [\n        \"bzflush(resource $bz): bool\",\n        \"Do nothing\"\n    ],\n    \"bzwrite\": [\n        \"bzwrite(resource $bz, string $data, ?int $length = null): int|false\",\n        \"Binary safe bzip2 file write\"\n    ],\n    \"checkdnsrr\": [\n        \"checkdnsrr(string $hostname, string $type = &quot;MX&quot;): bool\",\n        \"Check DNS records corresponding to a given Internet host name or IP address\"\n    ],\n    \"chop\": [\n        \"chop()\",\n        \"Alias of rtrim()\"\n    ],\n    \"class_uses\": [\n        \"class_uses(object|string $object_or_class, bool $autoload = true): array|false\",\n        \"\"\n    ],\n    \"curl_escape\": [\n        \"curl_escape(CurlHandle $handle, string $string): string|false\",\n        \"URL encodes the given string\"\n    ],\n    \"curl_file_create\": [\n        \"curl_file_create()\",\n        \"Create a CURLFile object\"\n    ],\n    \"curl_multi_errno\": [\n        \"curl_multi_errno(CurlMultiHandle $multi_handle): int\",\n        \"Return the last multi curl error number\"\n    ],\n    \"curl_multi_setopt\": [\n        \"curl_multi_setopt(CurlMultiHandle $multi_handle, int $option, mixed $value): bool\",\n        \"Set an option for the cURL multi handle\"\n    ],\n    \"curl_multi_strerror\": [\n        \"curl_multi_strerror(int $error_code): ?string\",\n        \"Return string describing error code\"\n    ],\n    \"curl_pause\": [\n        \"curl_pause(CurlHandle $handle, int $flags): int\",\n        \"Pause and unpause a connection\"\n    ],\n    \"curl_reset\": [\n        \"curl_reset(CurlHandle $handle): void\",\n        \"Reset all options of a libcurl session handle\"\n    ],\n    \"curl_share_close\": [\n        \"curl_share_close(CurlShareHandle $share_handle): void\",\n        \"Close a cURL share handle\"\n    ],\n    \"curl_share_errno\": [\n        \"curl_share_errno(CurlShareHandle $share_handle): int\",\n        \"Return the last share curl error number\"\n    ],\n    \"curl_share_init\": [\n        \"curl_share_init(): CurlShareHandle\",\n        \"Initialize a cURL share handle\"\n    ],\n    \"curl_share_setopt\": [\n        \"curl_share_setopt(CurlShareHandle $share_handle, int $option, mixed $value): bool\",\n        \"Set an option for a cURL share handle\"\n    ],\n    \"curl_share_strerror\": [\n        \"curl_share_strerror(int $error_code): ?string\",\n        \"Return string describing the given error code\"\n    ],\n    \"curl_strerror\": [\n        \"curl_strerror(int $error_code): ?string\",\n        \"Return string describing the given error code\"\n    ],\n    \"curl_unescape\": [\n        \"curl_unescape(CurlHandle $handle, string $string): string|false\",\n        \"Decodes the given URL encoded string\"\n    ],\n    \"date_create_immutable_from_format\": [\n        \"date_create_immutable_from_format()\",\n        \"Alias of DateTimeImmutable::createFromFormat()\"\n    ],\n    \"date_create_immutable\": [\n        \"date_create_immutable()\",\n        \"Alias of DateTimeImmutable::__construct()\"\n    ],\n    \"deflate_add\": [\n        \"deflate_add(DeflateContext $context, string $data, int $flush_mode = ZLIB_SYNC_FLUSH): string|false\",\n        \"Incrementally deflate data\"\n    ],\n    \"deflate_init\": [\n        \"deflate_init(int $encoding, array $options = []): DeflateContext|false\",\n        \"Initialize an incremental deflate context\"\n    ],\n    \"delete\": [\n        \"delete()\",\n        \"See unlink()\"\n    ],\n    \"diskfreespace\": [\n        \"diskfreespace()\",\n        \"Alias of disk_free_space()\"\n    ],\n    \"doubleval\": [\n        \"doubleval()\",\n        \"Alias of floatval()\"\n    ],\n    \"enchant_dict_add\": [\n        \"enchant_dict_add(EnchantDictionary $dictionary, string $word): void\",\n        \"Add a word to personal word list\"\n    ],\n    \"enchant_dict_is_added\": [\n        \"enchant_dict_is_added(EnchantDictionary $dictionary, string $word): bool\",\n        \"Whether or not &#039;word&#039; exists in this spelling-session\"\n    ],\n    \"error_clear_last\": [\n        \"error_clear_last(): void\",\n        \"Clear the most recent error\"\n    ],\n    \"eval\": [\n        \"eval(string $code): mixed\",\n        \"Evaluate a string as PHP code\"\n    ],\n    \"expect_expectl\": [\n        \"expect_expectl(resource $expect, array $cases, array &$match = ?): int\",\n        \"\"\n    ],\n    \"expect_popen\": [\n        \"expect_popen(string $command): resource\",\n        \"\"\n    ],\n    \"fdiv\": [\n        \"fdiv(float $num1, float $num2): float\",\n        \"Divides two numbers, according to IEEE 754\"\n    ],\n    \"filter_id\": [\n        \"filter_id(string $name): int|false\",\n        \"Returns the filter ID belonging to a named filter\"\n    ],\n    \"filter_list\": [\n        \"filter_list(): array\",\n        \"Returns a list of all supported filters\"\n    ],\n    \"forward_static_call_array\": [\n        \"forward_static_call_array(callable $callback, array $args): mixed\",\n        \"Call a static method and pass the arguments as array\"\n    ],\n    \"fputs\": [\n        \"fputs()\",\n        \"Alias of fwrite()\"\n    ],\n    \"ftp_append\": [\n        \"ftp_append(FTP\\\\Connection $ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY): bool\",\n        \"Append the contents of a file to another file on the FTP server\"\n    ],\n    \"ftp_mlsd\": [\n        \"ftp_mlsd(FTP\\\\Connection $ftp, string $directory): array|false\",\n        \"Returns a list of files in the given directory\"\n    ],\n    \"ftp_quit\": [\n        \"ftp_quit()\",\n        \"Alias of ftp_close()\"\n    ],\n    \"gc_mem_caches\": [\n        \"gc_mem_caches(): int\",\n        \"\"\n    ],\n    \"gc_status\": [\n        \"gc_status(): array\",\n        \"Gets information about the garbage collector\"\n    ],\n    \"get_debug_type\": [\n        \"get_debug_type(mixed $value): string\",\n        \"Gets the type name of a variable in a way that is suitable for debugging\"\n    ],\n    \"get_declared_traits\": [\n        \"get_declared_traits(): array\",\n        \"Returns an array of all declared traits\"\n    ],\n    \"get_required_files\": [\n        \"get_required_files()\",\n        \"Alias of get_included_files()\"\n    ],\n    \"get_resource_id\": [\n        \"get_resource_id(resource $resource): int\",\n        \"\"\n    ],\n    \"get_resources\": [\n        \"get_resources(?string $type = null): array\",\n        \"Returns active resources\"\n    ],\n    \"getimagesizefromstring\": [\n        \"getimagesizefromstring(string $string, array &$image_info = null): array|false\",\n        \"Get the size of an image from a string\"\n    ],\n    \"getmxrr\": [\n        \"getmxrr(string $hostname, array &$hosts, array &$weights = null): bool\",\n        \"Get MX records corresponding to a given Internet host name\"\n    ],\n    \"gmp_binomial\": [\n        \"gmp_binomial(GMP|int|string $n, int $k): GMP\",\n        \"Calculates binomial coefficient\"\n    ],\n    \"gmp_div\": [\n        \"gmp_div()\",\n        \"Alias of gmp_div_q()\"\n    ],\n    \"gmp_export\": [\n        \"gmp_export(GMP|int|string $num, int $word_size = 1, int $flags = GMP_MSW_FIRST | GMP_NATIVE_ENDIAN): string\",\n        \"Export to a binary string\"\n    ],\n    \"gmp_import\": [\n        \"gmp_import(string $data, int $word_size = 1, int $flags = GMP_MSW_FIRST | GMP_NATIVE_ENDIAN): GMP\",\n        \"Import from a binary string\"\n    ],\n    \"gmp_kronecker\": [\n        \"gmp_kronecker(GMP|int|string $num1, GMP|int|string $num2): int\",\n        \"Kronecker symbol\"\n    ],\n    \"gmp_lcm\": [\n        \"gmp_lcm(GMP|int|string $num1, GMP|int|string $num2): GMP\",\n        \"Calculate LCM\"\n    ],\n    \"gmp_perfect_power\": [\n        \"gmp_perfect_power(GMP|int|string $num): bool\",\n        \"Perfect power check\"\n    ],\n    \"gmp_random_bits\": [\n        \"gmp_random_bits(int $bits): GMP\",\n        \"Random number\"\n    ],\n    \"gmp_random_range\": [\n        \"gmp_random_range(GMP|int|string $min, GMP|int|string $max): GMP\",\n        \"Random number\"\n    ],\n    \"gmp_random_seed\": [\n        \"gmp_random_seed(GMP|int|string $seed): void\",\n        \"Sets the RNG seed\"\n    ],\n    \"gmp_root\": [\n        \"gmp_root(GMP|int|string $num, int $nth): GMP\",\n        \"Take the integer part of nth root\"\n    ],\n    \"gmp_rootrem\": [\n        \"gmp_rootrem(GMP|int|string $num, int $nth): array\",\n        \"Take the integer part and remainder of nth root\"\n    ],\n    \"gzclose\": [\n        \"gzclose(resource $stream): bool\",\n        \"Close an open gz-file pointer\"\n    ],\n    \"gzdecode\": [\n        \"gzdecode(string $data, int $max_length = 0): string|false\",\n        \"Decodes a gzip compressed string\"\n    ],\n    \"gzeof\": [\n        \"gzeof(resource $stream): bool\",\n        \"Test for EOF on a gz-file pointer\"\n    ],\n    \"gzgetc\": [\n        \"gzgetc(resource $stream): string|false\",\n        \"Get character from gz-file pointer\"\n    ],\n    \"gzgets\": [\n        \"gzgets(resource $stream, ?int $length = null): string|false\",\n        \"Get line from file pointer\"\n    ],\n    \"gzgetss\": [\n        \"gzgetss(resource $zp, int $length, string $allowable_tags = ?): string\",\n        \"\"\n    ],\n    \"gzpassthru\": [\n        \"gzpassthru(resource $stream): int\",\n        \"\"\n    ],\n    \"gzputs\": [\n        \"gzputs()\",\n        \"Alias of gzwrite()\"\n    ],\n    \"gzread\": [\n        \"gzread(resource $stream, int $length): string|false\",\n        \"Binary-safe gz-file read\"\n    ],\n    \"gzrewind\": [\n        \"gzrewind(resource $stream): bool\",\n        \"Rewind the position of a gz-file pointer\"\n    ],\n    \"gzseek\": [\n        \"gzseek(resource $stream, int $offset, int $whence = SEEK_SET): int\",\n        \"Seek on a gz-file pointer\"\n    ],\n    \"gztell\": [\n        \"gztell(resource $stream): int|false\",\n        \"Tell gz-file pointer read/write position\"\n    ],\n    \"gzwrite\": [\n        \"gzwrite(resource $stream, string $data, ?int $length = null): int|false\",\n        \"Binary-safe gz-file write\"\n    ],\n    \"halt_compiler\": [\n        \"__halt_compiler(): void\",\n        \"\"\n    ],\n    \"hash_equals\": [\n        \"hash_equals(string $known_string, string $user_string): bool\",\n        \"Timing attack safe string comparison\"\n    ],\n    \"hash_hkdf\": [\n        \"hash_hkdf(string $algo, string $key, int $length = 0, string $info = \\\"\\\", string $salt = \\\"\\\"): string\",\n        \"Generate a HKDF key derivation of a supplied key input\"\n    ],\n    \"hash_hmac_algos\": [\n        \"hash_hmac_algos(): array\",\n        \"Return a list of registered hashing algorithms suitable for hash_hmac\"\n    ],\n    \"hash_pbkdf2\": [\n        \"hash_pbkdf2(string $algo, string $password, string $salt, int $iterations, int $length = 0, bool $binary = false): string\",\n        \"Generate a PBKDF2 key derivation of a supplied password\"\n    ],\n    \"header_register_callback\": [\n        \"header_register_callback(callable $callback): bool\",\n        \"Call a header function\"\n    ],\n    \"hex2bin\": [\n        \"hex2bin(string $string): string|false\",\n        \"Decodes a hexadecimally encoded binary string\"\n    ],\n    \"hrtime\": [\n        \"hrtime(bool $as_number = false): array|int|float|false\",\n        \"Get the system&#039;s high resolution time\"\n    ],\n    \"http_response_code\": [\n        \"http_response_code(int $response_code = 0): int|bool\",\n        \"Get or Set the HTTP response code\"\n    ],\n    \"imageaffine\": [\n        \"imageaffine(GdImage $image, array $affine, ?array $clip = null): GdImage|false\",\n        \"Return an image containing the affine transformed src image, using an optional clipping area\"\n    ],\n    \"imageaffinematrixconcat\": [\n        \"imageaffinematrixconcat(array $matrix1, array $matrix2): array|false\",\n        \"Concatenate two affine transformation matrices\"\n    ],\n    \"imageaffinematrixget\": [\n        \"imageaffinematrixget(int $type, array|float $options): array|false\",\n        \"Get an affine transformation matrix\"\n    ],\n    \"imagebmp\": [\n        \"imagebmp(GdImage $image, resource|string|null $file = null, bool $compressed = true): bool\",\n        \"Output a BMP image to browser or file\"\n    ],\n    \"imagecreatefrombmp\": [\n        \"imagecreatefrombmp(string $filename): GdImage|false\",\n        \"Create a new image from file or URL\"\n    ],\n    \"imagecreatefromwebp\": [\n        \"imagecreatefromwebp(string $filename): GdImage|false\",\n        \"Create a new image from file or URL\"\n    ],\n    \"imagecrop\": [\n        \"imagecrop(GdImage $image, array $rectangle): GdImage|false\",\n        \"Crop an image to the given rectangle\"\n    ],\n    \"imagecropauto\": [\n        \"imagecropauto(GdImage $image, int $mode = IMG_CROP_DEFAULT, float $threshold = 0.5, int $color = -1): GdImage|false\",\n        \"Crop an image automatically using one of the available modes\"\n    ],\n    \"imageflip\": [\n        \"imageflip(GdImage $image, int $mode): bool\",\n        \"Flips an image using a given mode\"\n    ],\n    \"imagegetclip\": [\n        \"imagegetclip(GdImage $image): array\",\n        \"Get the clipping rectangle\"\n    ],\n    \"imagegetinterpolation\": [\n        \"imagegetinterpolation(GdImage $image): int\",\n        \"Get the interpolation method\"\n    ],\n    \"imageopenpolygon\": [\n        \"imageopenpolygon(GdImage $image, array $points, int $color): bool\",\n        \"Draws an open polygon\"\n    ],\n    \"imagepalettetotruecolor\": [\n        \"imagepalettetotruecolor(GdImage $image): bool\",\n        \"Converts a palette based image to true color\"\n    ],\n    \"imageresolution\": [\n        \"imageresolution(GdImage $image, ?int $resolution_x = null, ?int $resolution_y = null): array|bool\",\n        \"Get or set the resolution of the image\"\n    ],\n    \"imagescale\": [\n        \"imagescale(GdImage $image, int $width, int $height = -1, int $mode = IMG_BILINEAR_FIXED): GdImage|false\",\n        \"Scale an image using the given new width and height\"\n    ],\n    \"imagesetclip\": [\n        \"imagesetclip(GdImage $image, int $x1, int $y1, int $x2, int $y2): bool\",\n        \"Set the clipping rectangle\"\n    ],\n    \"imagesetinterpolation\": [\n        \"imagesetinterpolation(GdImage $image, int $method = IMG_BILINEAR_FIXED): bool\",\n        \"Set the interpolation method\"\n    ],\n    \"imagewebp\": [\n        \"imagewebp(GdImage $image, resource|string|null $file = null, int $quality = -1): bool\",\n        \"Output a WebP image to browser or file\"\n    ],\n    \"imap_create\": [\n        \"\",\n        \"Alias of imap_createmailbox()\"\n    ],\n    \"imap_fetchmime\": [\n        \"imap_fetchmime(IMAP\\\\Connection $imap, int $message_num, string $section, int $flags = 0): string|false\",\n        \"Fetch MIME headers for a particular section of the message\"\n    ],\n    \"imap_fetchtext\": [\n        \"imap_fetchtext()\",\n        \"Alias of imap_body()\"\n    ],\n    \"imap_header\": [\n        \"imap_header()\",\n        \"Alias of imap_headerinfo()\"\n    ],\n    \"imap_listmailbox\": [\n        \"imap_listmailbox()\",\n        \"Alias of imap_list()\"\n    ],\n    \"imap_listsubscribed\": [\n        \"imap_listsubscribed()\",\n        \"Alias of imap_lsub()\"\n    ],\n    \"imap_rename\": [\n        \"imap_rename()\",\n        \"Alias of imap_renamemailbox()\"\n    ],\n    \"imap_scan\": [\n        \"imap_scan()\",\n        \"Alias of imap_listscan()\"\n    ],\n    \"imap_scanmailbox\": [\n        \"imap_scanmailbox()\",\n        \"Alias of imap_listscan()\"\n    ],\n    \"ini_alter\": [\n        \"ini_alter()\",\n        \"Alias of ini_set()\"\n    ],\n    \"intdiv\": [\n        \"intdiv(int $num1, int $num2): int\",\n        \"Integer division\"\n    ],\n    \"is_double\": [\n        \"is_double()\",\n        \"Alias of is_float()\"\n    ],\n    \"is_int\": [\n        \"is_int(mixed $value): bool\",\n        \"Find whether the type of a variable is integer\"\n    ],\n    \"is_integer\": [\n        \"is_integer()\",\n        \"Alias of is_int()\"\n    ],\n    \"is_iterable\": [\n        \"is_iterable(mixed $value): bool\",\n        \"\"\n    ],\n    \"is_real\": [\n        \"is_real()\",\n        \"Alias of is_float()\"\n    ],\n    \"is_soap_fault\": [\n        \"is_soap_fault(mixed $object): bool\",\n        \"Checks if a SOAP call has failed\"\n    ],\n    \"is_tainted\": [\n        \"is_tainted(string $string): bool\",\n        \"Checks whether a string is tainted\"\n    ],\n    \"is_writeable\": [\n        \"is_writeable()\",\n        \"Alias of is_writable()\"\n    ],\n    \"json_last_error_msg\": [\n        \"json_last_error_msg(): string\",\n        \"Returns the error string of the last json_encode() or json_decode() call\"\n    ],\n    \"key_exists\": [\n        \"key_exists()\",\n        \"Alias of array_key_exists()\"\n    ],\n    \"lchown\": [\n        \"lchown(string $filename, string|int $user): bool\",\n        \"Changes user ownership of symlink\"\n    ],\n    \"libxml_set_external_entity_loader\": [\n        \"libxml_set_external_entity_loader(?callable $resolver_function): bool\",\n        \"Changes the default external entity loader\"\n    ],\n    \"mb_chr\": [\n        \"mb_chr(int $codepoint, ?string $encoding = null): string|false\",\n        \"Return character by Unicode code point value\"\n    ],\n    \"mb_ereg_replace_callback\": [\n        \"mb_ereg_replace_callback(string $pattern, callable $callback, string $string, ?string $options = null): string|false|null\",\n        \"\"\n    ],\n    \"mb_ord\": [\n        \"mb_ord(string $string, ?string $encoding = null): int|false\",\n        \"Get Unicode code point of character\"\n    ],\n    \"mb_scrub\": [\n        \"mb_scrub(string $string, ?string $encoding = null): string\",\n        \"Description\"\n    ],\n    \"mb_str_split\": [\n        \"mb_str_split(string $string, int $length = 1, ?string $encoding = null): array\",\n        \"Given a multibyte string, return an array of its characters\"\n    ],\n    \"memcache_debug\": [\n        \"memcache_debug(bool $on_off): bool\",\n        \"Turn debug output on/off\"\n    ],\n    \"mysql_db_name\": [\n        \"mysql_db_name(resource $result, int $row, mixed $field = NULL): string\",\n        \"Retrieves database name from the call to mysql_list_dbs()\"\n    ],\n    \"mysql_tablename\": [\n        \"mysql_tablename(resource $result, int $i): string|false\",\n        \"Get table name of field\"\n    ],\n    \"mysql_xdevapi_expression\": [\n        \"mysql_xdevapi\\\\expression(string $expression): object\",\n        \"Bind prepared statement variables as parameters\"\n    ],\n    \"mysql_xdevapi_getsession\": [\n        \"mysql_xdevapi\\\\getSession(string $uri): mysql_xdevapi\\\\Session\",\n        \"Connect to a MySQL server\"\n    ],\n    \"mysqli_escape_string\": [\n        \"mysqli_escape_string()\",\n        \"Alias of mysqli_real_escape_string()\"\n    ],\n    \"mysqli_execute\": [\n        \"mysqli_execute()\",\n        \"Alias for mysqli_stmt_execute()\"\n    ],\n    \"mysqli_get_links_stats\": [\n        \"mysqli_get_links_stats(): array\",\n        \"Return information about open and cached links\"\n    ],\n    \"mysqli_set_opt\": [\n        \"mysqli_set_opt()\",\n        \"Alias of mysqli_options()\"\n    ],\n    \"ob_tidyhandler\": [\n        \"ob_tidyhandler(string $input, int $mode = ?): string\",\n        \"ob_start callback function to repair the buffer\"\n    ],\n    \"odbc_do\": [\n        \"odbc_do()\",\n        \"Alias of odbc_exec()\"\n    ],\n    \"odbc_field_precision\": [\n        \"odbc_field_precision()\",\n        \"Alias of odbc_field_len()\"\n    ],\n    \"opcache_compile_file\": [\n        \"opcache_compile_file(string $filename): bool\",\n        \"Compiles and caches a PHP script without executing it\"\n    ],\n    \"opcache_get_configuration\": [\n        \"opcache_get_configuration(): array|false\",\n        \"Get configuration information about the cache\"\n    ],\n    \"opcache_get_status\": [\n        \"opcache_get_status(bool $include_scripts = true): array|false\",\n        \"Get status information about the cache\"\n    ],\n    \"opcache_invalidate\": [\n        \"opcache_invalidate(string $filename, bool $force = false): bool\",\n        \"Invalidates a cached script\"\n    ],\n    \"opcache_is_script_cached\": [\n        \"opcache_is_script_cached(string $filename): bool\",\n        \"Tells whether a script is cached in OPCache\"\n    ],\n    \"opcache_reset\": [\n        \"opcache_reset(): bool\",\n        \"Resets the contents of the opcode cache\"\n    ],\n    \"password_algos\": [\n        \"password_algos(): array\",\n        \"Get available password hashing algorithm IDs\"\n    ],\n    \"password_get_info\": [\n        \"password_get_info(string $hash): array\",\n        \"Returns information about the given hash\"\n    ],\n    \"password_hash\": [\n        \"password_hash(string $password, string|int|null $algo, array $options = []): string\",\n        \"Creates a password hash\"\n    ],\n    \"password_needs_rehash\": [\n        \"password_needs_rehash(string $hash, string|int|null $algo, array $options = []): bool\",\n        \"Checks if the given hash matches the given options\"\n    ],\n    \"password_verify\": [\n        \"password_verify(string $password, string $hash): bool\",\n        \"Verifies that a password matches a hash\"\n    ],\n    \"pcntl_async_signals\": [\n        \"pcntl_async_signals(?bool $enable = null): bool\",\n        \"Enable/disable asynchronous signal handling or return the old setting\"\n    ],\n    \"pcntl_errno\": [\n        \"pcntl_errno()\",\n        \"Alias of pcntl_get_last_error()\"\n    ],\n    \"pcntl_get_last_error\": [\n        \"pcntl_get_last_error(): int\",\n        \"Retrieve the error number set by the last pcntl function which failed\"\n    ],\n    \"pcntl_signal_get_handler\": [\n        \"pcntl_signal_get_handler(int $signal): callable|int\",\n        \"Get the current handler for specified signal\"\n    ],\n    \"pcntl_sigwaitinfo\": [\n        \"pcntl_sigwaitinfo(array $signals, array &$info = []): int|false\",\n        \"Waits for signals\"\n    ],\n    \"pcntl_strerror\": [\n        \"pcntl_strerror(int $error_code): string\",\n        \"Retrieve the system error message associated with the given errno\"\n    ],\n    \"pg_connect_poll\": [\n        \"pg_connect_poll(PgSql\\\\Connection $connection): int\",\n        \"\"\n    ],\n    \"pg_consume_input\": [\n        \"pg_consume_input(PgSql\\\\Connection $connection): bool\",\n        \"Reads input on the connection\"\n    ],\n    \"pg_escape_identifier\": [\n        \"pg_escape_identifier(PgSql\\\\Connection $connection = ?, string $data): string\",\n        \"\"\n    ],\n    \"pg_escape_literal\": [\n        \"pg_escape_literal(PgSql\\\\Connection $connection = ?, string $data): string\",\n        \"\"\n    ],\n    \"pg_flush\": [\n        \"pg_flush(PgSql\\\\Connection $connection): int|bool\",\n        \"Flush outbound query data on the connection\"\n    ],\n    \"pg_lo_truncate\": [\n        \"pg_lo_truncate(PgSql\\\\Lob $lob, int $size): bool\",\n        \"\"\n    ],\n    \"pg_socket\": [\n        \"pg_socket(PgSql\\\\Connection $connection): resource|false\",\n        \"\"\n    ],\n    \"pos\": [\n        \"pos()\",\n        \"Alias of current()\"\n    ],\n    \"posix_errno\": [\n        \"posix_errno()\",\n        \"Alias of posix_get_last_error()\"\n    ],\n    \"posix_setrlimit\": [\n        \"posix_setrlimit(int $resource, int $soft_limit, int $hard_limit): bool\",\n        \"Set system resource limits\"\n    ],\n    \"preg_last_error_msg\": [\n        \"preg_last_error_msg(): string\",\n        \"Returns the error message of the last PCRE regex execution\"\n    ],\n    \"preg_replace_callback_array\": [\n        \"preg_replace_callback_array(array $pattern, string|array $subject, int $limit = -1, int &$count = null, int $flags = 0): string|array|null\",\n        \"Perform a regular expression search and replace using callbacks\"\n    ],\n    \"ps_translate\": [\n        \"ps_translate(resource $psdoc, float $x, float $y): bool\",\n        \"Sets translation\"\n    ],\n    \"random_bytes\": [\n        \"random_bytes(int $length): string\",\n        \"Generates cryptographically secure pseudo-random bytes\"\n    ],\n    \"random_int\": [\n        \"random_int(int $min, int $max): int\",\n        \"Generates cryptographically secure pseudo-random integers\"\n    ],\n    \"read_exif_data\": [\n        \"read_exif_data()\",\n        \"Alias of exif_read_data()\"\n    ],\n    \"recode\": [\n        \"recode()\",\n        \"Alias of recode_string()\"\n    ],\n    \"session_abort\": [\n        \"session_abort(): bool\",\n        \"Discard session array changes and finish session\"\n    ],\n    \"session_commit\": [\n        \"session_commit()\",\n        \"Alias of session_write_close()\"\n    ],\n    \"session_create_id\": [\n        \"session_create_id(string $prefix = \\\"\\\"): string|false\",\n        \"Create new session id\"\n    ],\n    \"session_gc\": [\n        \"session_gc(): int|false\",\n        \"Perform session data garbage collection\"\n    ],\n    \"session_register_shutdown\": [\n        \"session_register_shutdown(): void\",\n        \"Session shutdown function\"\n    ],\n    \"session_reset\": [\n        \"session_reset(): bool\",\n        \"Re-initialize session array with original values\"\n    ],\n    \"session_status\": [\n        \"session_status(): int\",\n        \"Returns the current session status\"\n    ],\n    \"set_file_buffer\": [\n        \"set_file_buffer()\",\n        \"Alias of stream_set_write_buffer()\"\n    ],\n    \"show_source\": [\n        \"show_source()\",\n        \"Alias of highlight_file()\"\n    ],\n    \"sizeof\": [\n        \"sizeof()\",\n        \"Alias of count()\"\n    ],\n    \"snmp_set_oid_numeric_print\": [\n        \"snmp_set_oid_numeric_print(int $format): bool\",\n        \"\"\n    ],\n    \"snmpwalkoid\": [\n        \"snmpwalkoid(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|false\",\n        \"\"\n    ],\n    \"socket_addrinfo_bind\": [\n        \"socket_addrinfo_bind(AddressInfo $address): Socket|false\",\n        \"Create and bind to a socket from a given addrinfo\"\n    ],\n    \"socket_addrinfo_connect\": [\n        \"socket_addrinfo_connect(AddressInfo $address): Socket|false\",\n        \"Create and connect to a socket from a given addrinfo\"\n    ],\n    \"socket_addrinfo_explain\": [\n        \"socket_addrinfo_explain(AddressInfo $address): array\",\n        \"Get information about addrinfo\"\n    ],\n    \"socket_addrinfo_lookup\": [\n        \"socket_addrinfo_lookup(string $host, ?string $service = null, array $hints = []): array|false\",\n        \"Get array with contents of getaddrinfo about the given hostname\"\n    ],\n    \"socket_cmsg_space\": [\n        \"socket_cmsg_space(int $level, int $type, int $num = 0): ?int\",\n        \"Calculate message buffer size\"\n    ],\n    \"socket_export_stream\": [\n        \"socket_export_stream(Socket $socket): resource|false\",\n        \"Export a socket into a stream that encapsulates a socket\"\n    ],\n    \"socket_get_status\": [\n        \"socket_get_status()\",\n        \"Alias of stream_get_meta_data()\"\n    ],\n    \"socket_getopt\": [\n        \"socket_getopt()\",\n        \"Alias of socket_get_option()\"\n    ],\n    \"socket_import_stream\": [\n        \"socket_import_stream(resource $stream): Socket|false\",\n        \"Import a stream\"\n    ],\n    \"socket_recvmsg\": [\n        \"socket_recvmsg(Socket $socket, array &$message, int $flags = 0): int|false\",\n        \"Read a message\"\n    ],\n    \"socket_sendmsg\": [\n        \"socket_sendmsg(Socket $socket, array $message, int $flags = 0): int|false\",\n        \"Send a message\"\n    ],\n    \"socket_set_blocking\": [\n        \"socket_set_blocking()\",\n        \"Alias of stream_set_blocking()\"\n    ],\n    \"socket_set_timeout\": [\n        \"socket_set_timeout()\",\n        \"Alias of stream_set_timeout()\"\n    ],\n    \"socket_setopt\": [\n        \"socket_setopt()\",\n        \"Alias of socket_set_option()\"\n    ],\n    \"socket_wsaprotocol_info_export\": [\n        \"socket_wsaprotocol_info_export(Socket $socket, int $process_id): string|false\",\n        \"Exports the WSAPROTOCOL_INFO Structure\"\n    ],\n    \"socket_wsaprotocol_info_import\": [\n        \"socket_wsaprotocol_info_import(string $info_id): Socket|false\",\n        \"Imports a Socket from another Process\"\n    ],\n    \"socket_wsaprotocol_info_release\": [\n        \"socket_wsaprotocol_info_release(string $info_id): bool\",\n        \"Releases an exported WSAPROTOCOL_INFO Structure\"\n    ],\n    \"spl_object_id\": [\n        \"spl_object_id(object $object): int\",\n        \"\"\n    ],\n    \"sqlsrv_begin_transaction\": [\n        \"sqlsrv_begin_transaction(resource $conn): bool\",\n        \"Begins a database transaction\"\n    ],\n    \"sqlsrv_cancel\": [\n        \"sqlsrv_cancel(resource $stmt): bool\",\n        \"Cancels a statement\"\n    ],\n    \"sqlsrv_client_info\": [\n        \"sqlsrv_client_info(resource $conn): array\",\n        \"Returns information about the client and specified connection\"\n    ],\n    \"sqlsrv_close\": [\n        \"sqlsrv_close(resource $conn): bool\",\n        \"Closes an open connection and releases resourses associated with the connection\"\n    ],\n    \"sqlsrv_commit\": [\n        \"sqlsrv_commit(resource $conn): bool\",\n        \"Commits a transaction that was begun with sqlsrv_begin_transaction()\"\n    ],\n    \"sqlsrv_configure\": [\n        \"sqlsrv_configure(string $setting, mixed $value): bool\",\n        \"Changes the driver error handling and logging configurations\"\n    ],\n    \"sqlsrv_connect\": [\n        \"sqlsrv_connect(string $serverName, array $connectionInfo = ?): resource\",\n        \"Opens a connection to a Microsoft SQL Server database\"\n    ],\n    \"sqlsrv_errors\": [\n        \"sqlsrv_errors(int $errorsOrWarnings = ?): mixed\",\n        \"Returns error and warning information about the last SQLSRV operation performed\"\n    ],\n    \"sqlsrv_execute\": [\n        \"sqlsrv_execute(resource $stmt): bool\",\n        \"Executes a statement prepared with sqlsrv_prepare()\"\n    ],\n    \"sqlsrv_fetch_array\": [\n        \"sqlsrv_fetch_array(resource $stmt, int $fetchType = ?, int $row = ?, int $offset = ?): array\",\n        \"Returns a row as an array\"\n    ],\n    \"sqlsrv_fetch_object\": [\n        \"sqlsrv_fetch_object(resource $stmt, string $className = ?, array $ctorParams = ?, int $row = ?, int $offset = ?): mixed\",\n        \"Retrieves the next row of data in a result set as an object\"\n    ],\n    \"sqlsrv_fetch\": [\n        \"sqlsrv_fetch(resource $stmt, int $row = ?, int $offset = ?): mixed\",\n        \"Makes the next row in a result set available for reading\"\n    ],\n    \"sqlsrv_field_metadata\": [\n        \"sqlsrv_field_metadata(resource $stmt): mixed\",\n        \"\"\n    ],\n    \"sqlsrv_free_stmt\": [\n        \"sqlsrv_free_stmt(resource $stmt): bool\",\n        \"Frees all resources for the specified statement\"\n    ],\n    \"sqlsrv_get_config\": [\n        \"sqlsrv_get_config(string $setting): mixed\",\n        \"Returns the value of the specified configuration setting\"\n    ],\n    \"sqlsrv_get_field\": [\n        \"sqlsrv_get_field(resource $stmt, int $fieldIndex, int $getAsType = ?): mixed\",\n        \"Gets field data from the currently selected row\"\n    ],\n    \"sqlsrv_has_rows\": [\n        \"sqlsrv_has_rows(resource $stmt): bool\",\n        \"Indicates whether the specified statement has rows\"\n    ],\n    \"sqlsrv_next_result\": [\n        \"sqlsrv_next_result(resource $stmt): mixed\",\n        \"Makes the next result of the specified statement active\"\n    ],\n    \"sqlsrv_num_fields\": [\n        \"sqlsrv_num_fields(resource $stmt): mixed\",\n        \"Retrieves the number of fields (columns) on a statement\"\n    ],\n    \"sqlsrv_num_rows\": [\n        \"sqlsrv_num_rows(resource $stmt): mixed\",\n        \"Retrieves the number of rows in a result set\"\n    ],\n    \"sqlsrv_prepare\": [\n        \"sqlsrv_prepare(resource $conn, string $sql, array $params = ?, array $options = ?): mixed\",\n        \"Prepares a query for execution\"\n    ],\n    \"sqlsrv_query\": [\n        \"sqlsrv_query(resource $conn, string $sql, array $params = ?, array $options = ?): mixed\",\n        \"Prepares and executes a query\"\n    ],\n    \"sqlsrv_rollback\": [\n        \"sqlsrv_rollback(resource $conn): bool\",\n        \"\"\n    ],\n    \"sqlsrv_rows_affected\": [\n        \"sqlsrv_rows_affected(resource $stmt): int|false\",\n        \"\"\n    ],\n    \"sqlsrv_send_stream_data\": [\n        \"sqlsrv_send_stream_data(resource $stmt): bool\",\n        \"Sends data from parameter streams to the server\"\n    ],\n    \"sqlsrv_server_info\": [\n        \"sqlsrv_server_info(resource $conn): array\",\n        \"Returns information about the server\"\n    ],\n    \"str_contains\": [\n        \"str_contains(string $haystack, string $needle): bool\",\n        \"Determine if a string contains a given substring\"\n    ],\n    \"str_ends_with\": [\n        \"str_ends_with(string $haystack, string $needle): bool\",\n        \"Checks if a string ends with a given substring\"\n    ],\n    \"str_starts_with\": [\n        \"str_starts_with(string $haystack, string $needle): bool\",\n        \"Checks if a string starts with a given substring\"\n    ],\n    \"stream_isatty\": [\n        \"stream_isatty(resource $stream): bool\",\n        \"Check if a stream is a TTY\"\n    ],\n    \"stream_notification_callback\": [\n        \"stream_notification_callback(int $notification_code, int $severity, string $message, int $message_code, int $bytes_transferred, int $bytes_max): void\",\n        \"A callback function for the notification context parameter\"\n    ],\n    \"stream_register_wrapper\": [\n        \"stream_register_wrapper()\",\n        \"Alias of stream_wrapper_register()\"\n    ],\n    \"stream_set_chunk_size\": [\n        \"stream_set_chunk_size(resource $stream, int $size): int\",\n        \"Set the stream chunk size\"\n    ],\n    \"stream_set_read_buffer\": [\n        \"stream_set_read_buffer(resource $stream, int $size): int\",\n        \"Set read file buffering on the given stream\"\n    ],\n    \"tcpwrap_check\": [\n        \"tcpwrap_check(string $daemon, string $address, string $user = ?, bool $nodns = false): bool\",\n        \"Performs a tcpwrap check\"\n    ],\n    \"trait_exists\": [\n        \"trait_exists(string $trait, bool $autoload = true): bool\",\n        \"Checks if the trait exists\"\n    ],\n    \"use_soap_error_handler\": [\n        \"use_soap_error_handler(bool $enable = true): bool\",\n        \"Set whether to use the SOAP error handler\"\n    ],\n    \"user_error\": [\n        \"user_error()\",\n        \"Alias of trigger_error()\"\n    ],\n    \"yaml_emit_file\": [\n        \"yaml_emit_file(string $filename, mixed $data, int $encoding = YAML_ANY_ENCODING, int $linebreak = YAML_ANY_BREAK, array $callbacks = null): bool\",\n        \"Send the YAML representation of a value to a file\"\n    ],\n    \"yaml_emit\": [\n        \"yaml_emit(mixed $data, int $encoding = YAML_ANY_ENCODING, int $linebreak = YAML_ANY_BREAK, array $callbacks = null): string\",\n        \"Returns the YAML representation of a value\"\n    ],\n    \"yaml_parse_file\": [\n        \"yaml_parse_file(string $filename, int $pos = 0, int &$ndocs = ?, array $callbacks = null): mixed\",\n        \"Parse a YAML stream from a file\"\n    ],\n    \"yaml_parse_url\": [\n        \"yaml_parse_url(string $url, int $pos = 0, int &$ndocs = ?, array $callbacks = null): mixed\",\n        \"Parse a Yaml stream from a URL\"\n    ],\n    \"yaml_parse\": [\n        \"yaml_parse(string $input, int $pos = 0, int &$ndocs = ?, array $callbacks = null): mixed\",\n        \"Parse a YAML stream\"\n    ],\n    \"zlib_decode\": [\n        \"zlib_decode(string $data, int $max_length = 0): string|false\",\n        \"Uncompress any raw/gzip/zlib encoded data\"\n    ],\n    \"zlib_encode\": [\n        \"zlib_encode(string $data, int $encoding, int $level = -1): string|false\",\n        \"Compress data with the specified encoding\"\n    ]\n};\nvar variableMap = {\n    \"$_COOKIE\": {\n        type: \"array\"\n    },\n    \"$_ENV\": {\n        type: \"array\"\n    },\n    \"$_FILES\": {\n        type: \"array\"\n    },\n    \"$_GET\": {\n        type: \"array\"\n    },\n    \"$_POST\": {\n        type: \"array\"\n    },\n    \"$_REQUEST\": {\n        type: \"array\"\n    },\n    \"$_SERVER\": {\n        type: \"array\",\n        value: {\n            \"DOCUMENT_ROOT\": 1,\n            \"GATEWAY_INTERFACE\": 1,\n            \"HTTP_ACCEPT\": 1,\n            \"HTTP_ACCEPT_CHARSET\": 1,\n            \"HTTP_ACCEPT_ENCODING\": 1,\n            \"HTTP_ACCEPT_LANGUAGE\": 1,\n            \"HTTP_CONNECTION\": 1,\n            \"HTTP_HOST\": 1,\n            \"HTTP_REFERER\": 1,\n            \"HTTP_USER_AGENT\": 1,\n            \"PATH_TRANSLATED\": 1,\n            \"PHP_SELF\": 1,\n            \"QUERY_STRING\": 1,\n            \"REMOTE_ADDR\": 1,\n            \"REMOTE_PORT\": 1,\n            \"REQUEST_METHOD\": 1,\n            \"REQUEST_URI\": 1,\n            \"SCRIPT_FILENAME\": 1,\n            \"SCRIPT_NAME\": 1,\n            \"SERVER_ADMIN\": 1,\n            \"SERVER_NAME\": 1,\n            \"SERVER_PORT\": 1,\n            \"SERVER_PROTOCOL\": 1,\n            \"SERVER_SIGNATURE\": 1,\n            \"SERVER_SOFTWARE\": 1,\n            \"argv\": 1,\n            \"argc\": 1\n        }\n    },\n    \"$_SESSION\": {\n        type: \"array\"\n    },\n    \"$GLOBALS\": {\n        type: \"array\"\n    },\n    '$argv': {\n        type: \"array\"\n    },\n    '$argc': {\n        type: \"int\"\n    }\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type) > -1;\n}\nvar PhpCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (token.type === 'support.php_tag' && token.value === '<?')\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (token.type === 'identifier') {\n            if (token.index > 0) {\n                var prevToken = session.getTokenAt(pos.row, token.start);\n                if (prevToken.type === 'support.php_tag') {\n                    return this.getTagCompletions(state, session, pos, prefix);\n                }\n            }\n            return this.getFunctionCompletions(state, session, pos, prefix);\n        }\n        if (is(token, \"variable\"))\n            return this.getVariableCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (token.type === 'string' && /(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(line))\n            return this.getArrayKeyCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return [{\n                caption: 'php',\n                value: 'php',\n                meta: \"php tag\",\n                score: 1000000\n            }, {\n                caption: '=',\n                value: '=',\n                meta: \"php tag\",\n                score: 1000000\n            }];\n    };\n    this.getFunctionCompletions = function (state, session, pos, prefix) {\n        var functions = Object.keys(functionMap);\n        return functions.map(function (func) {\n            return {\n                caption: func,\n                snippet: func + '($0)',\n                meta: \"php function\",\n                score: 1000000,\n                docHTML: functionMap[func][1]\n            };\n        });\n    };\n    this.getVariableCompletions = function (state, session, pos, prefix) {\n        var variables = Object.keys(variableMap);\n        return variables.map(function (variable) {\n            return {\n                caption: variable,\n                value: variable,\n                meta: \"php variable\",\n                score: 1000000\n            };\n        });\n    };\n    this.getArrayKeyCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var variable = line.match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];\n        if (!variableMap[variable]) {\n            return [];\n        }\n        var keys = [];\n        if (variableMap[variable].type === 'array' && variableMap[variable].value)\n            keys = Object.keys(variableMap[variable].value);\n        return keys.map(function (key) {\n            return {\n                caption: key,\n                value: key,\n                meta: \"php array key\",\n                score: 1000000\n            };\n        });\n    };\n}).call(PhpCompletions.prototype);\nexports.PhpCompletions = PhpCompletions;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/php_completions\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PhpHighlightRules = require(\"./php_highlight_rules\").PhpHighlightRules;\nvar PhpLangHighlightRules = require(\"./php_highlight_rules\").PhpLangHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar PhpCompletions = require(\"./php_completions\").PhpCompletions;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar unicode = require(\"../unicode\");\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar PhpMode = function (opts) {\n    this.HighlightRules = PhpLangHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.$completer = new PhpCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(PhpMode, TextMode);\n(function () {\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"_]+\", \"g\");\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"_]|\\\\s])+\", \"g\");\n    this.lineCommentStart = [\"//\", \"#\"];\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState != \"doc-start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.$id = \"ace/mode/php-inline\";\n}).call(PhpMode.prototype);\nvar Mode = function (opts) {\n    if (opts && opts.inline) {\n        var mode = new PhpMode();\n        mode.createWorker = this.createWorker;\n        mode.inlinePhp = true;\n        return mode;\n    }\n    HtmlMode.call(this);\n    this.HighlightRules = PhpHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"php-\": PhpMode\n    });\n    this.foldingRules.subModes[\"php-\"] = new CStyleFoldMode();\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/php_worker\", \"PhpWorker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.inlinePhp)\n            worker.call(\"setOptions\", [{ inline: true }]);\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/php\";\n    this.snippetFileId = \"ace/snippets/php\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/php\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-php_laravel_blade.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar PhpLangHighlightRules = function () {\n    var docComment = DocCommentHighlightRules;\n    var builtinFunctions = lang.arrayToMap('abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|\\\naggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|\\\napache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|\\\napache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|\\\napc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|\\\napc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|\\\napd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|\\\napd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|\\\narray_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|\\\narray_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|\\\narray_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|\\\narray_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|\\\narray_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|\\\narray_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|\\\natan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|\\\nbbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|\\\nbcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|\\\nbcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|\\\nbcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|\\\nbindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|\\\ncachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|\\\ncairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|\\\ncairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|\\\ncairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|\\\ncairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|\\\ncairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|\\\ncairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|\\\ncairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|\\\ncairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|\\\ncairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|\\\ncairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|\\\ncairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|\\\ncairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|\\\ncairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|\\\ncairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|\\\ncairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|\\\ncairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|\\\ncairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|\\\ncairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|\\\ncairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|\\\ncairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|\\\ncairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|\\\ncairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|\\\ncairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|\\\ncairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|\\\ncairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|\\\ncairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|\\\ncal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|\\\nchdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|\\\nclass_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|\\\nclasskit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|\\\ncom_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|\\\ncom_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|\\\nconvert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|\\\ncounter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|\\\ncrack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|\\\nctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|\\\ncubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|\\\ncubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|\\\ncubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|\\\ncubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|\\\ncubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|\\\ncubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|\\\ncubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|\\\ncubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|\\\ncubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|\\\ncubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|\\\ncubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|\\\ncurl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|\\\ncurl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|\\\ncurl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|\\\ndate_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|\\\ndate_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|\\\ndate_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|\\\ndateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|\\\ndb2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|\\\ndb2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|\\\ndb2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|\\\ndb2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|\\\ndb2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|\\\ndb2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|\\\ndba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|\\\ndbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|\\\ndbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|\\\ndbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|\\\ndbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|\\\ndbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|\\\ndbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|\\\ndbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|\\\ndbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|\\\ndefine_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|\\\ndio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|\\\ndns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|\\\ndomattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|\\\ndomdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|\\\ndomdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|\\\ndomdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|\\\ndomdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|\\\ndomdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|\\\ndomelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|\\\ndomelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|\\\ndomexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|\\\ndomnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|\\\ndomnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|\\\ndomnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|\\\ndomnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|\\\ndomnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|\\\ndomtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|\\\ndomxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|\\\ndomxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|\\\nenchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|\\\nenchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|\\\nenchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|\\\nenchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|\\\neregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|\\\nevent_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|\\\nevent_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|\\\nevent_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|\\\nevent_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|\\\nexpm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|\\\nfam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|\\\nfbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|\\\nfbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|\\\nfbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|\\\nfbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|\\\nfbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|\\\nfbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|\\\nfbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|\\\nfbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|\\\nfdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|\\\nfdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|\\\nfdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|\\\nfdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|\\\nfile_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|\\\nfilepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|\\\nfiletype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|\\\nfinfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|\\\nforward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|\\\nftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|\\\nftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|\\\nftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|\\\nfunc_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|\\\ngearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|\\\ngeoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|\\\ngeoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|\\\nget_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|\\\nget_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|\\\nget_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|\\\nget_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|\\\ngetcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|\\\ngethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|\\\ngetmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|\\\ngetrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|\\\ngettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|\\\ngmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|\\\ngmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|\\\ngmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|\\\ngnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|\\\ngnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|\\\ngnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|\\\ngrapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|\\\ngupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|\\\ngupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|\\\ngupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|\\\ngupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|\\\ngupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|\\\ngupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|\\\ngupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|\\\ngupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|\\\ngupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|\\\ngzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|\\\nhalt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|\\\nharuannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|\\\nharudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|\\\nharudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|\\\nharudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|\\\nharudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|\\\nharudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|\\\nharudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|\\\nharudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|\\\nharudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|\\\nharuencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|\\\nharufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|\\\nharufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|\\\nharuimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|\\\nharuoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|\\\nharupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|\\\nharupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|\\\nharupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|\\\nharupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|\\\nharupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|\\\nharupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|\\\nharupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|\\\nharupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|\\\nharupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|\\\nharupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|\\\nharupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|\\\nharupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|\\\nharupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|\\\nharupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|\\\nhash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|\\\nheader_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|\\\nhtml_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|\\\nhttp_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|\\\nhttp_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|\\\nhttp_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|\\\nhttp_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|\\\nhttp_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|\\\nhttp_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|\\\nhttp_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|\\\nhttp_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|\\\nhttpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|\\\nhttpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|\\\nhttpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|\\\nhttpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|\\\nhttpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|\\\nhttpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|\\\nhttpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|\\\nhttpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|\\\nhttpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|\\\nhttprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|\\\nhttprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|\\\nhttprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|\\\nhttprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|\\\nhttprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|\\\nhttprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|\\\nhttprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|\\\nhttprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|\\\nhttprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|\\\nhttprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|\\\nhttprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|\\\nhttprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|\\\nhttprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|\\\nhttpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|\\\nhttpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|\\\nhttpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|\\\nhttpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|\\\nhttpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|\\\nhttpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|\\\nhttpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|\\\nhw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|\\\nhw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|\\\nhw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|\\\nhw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|\\\nhw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|\\\nhw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|\\\nhw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|\\\nhwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|\\\nhwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|\\\nhwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|\\\nhwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|\\\nhwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|\\\nhwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|\\\nhwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|\\\nibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|\\\nibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|\\\nibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|\\\nibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|\\\nibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|\\\nibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|\\\nibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|\\\niconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|\\\nid3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|\\\nidn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|\\\nifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|\\\nifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|\\\nifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|\\\nifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|\\\niis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|\\\niis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|\\\niis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|\\\nimagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|\\\nimagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|\\\nimagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|\\\nimagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|\\\nimagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|\\\nimagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|\\\nimagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|\\\nimagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|\\\nimagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|\\\nimagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|\\\nimagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|\\\nimagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|\\\nimagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|\\\nimagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|\\\nimagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|\\\nimagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|\\\nimagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|\\\nimagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|\\\nimagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|\\\nimagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|\\\nimagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|\\\nimagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|\\\nimagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|\\\nimagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|\\\nimagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|\\\nimagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|\\\nimagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|\\\nimagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|\\\nimagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|\\\nimagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|\\\nimagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|\\\nimagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|\\\nimagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|\\\nimagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|\\\nimagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|\\\nimagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|\\\nimagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|\\\nimagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|\\\nimagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|\\\nimagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|\\\nimagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|\\\nimagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|\\\nimagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|\\\nimagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|\\\nimagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|\\\nimagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|\\\nimagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|\\\nimagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|\\\nimagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|\\\nimagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|\\\nimagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|\\\nimagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|\\\nimagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|\\\nimagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|\\\nimagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|\\\nimagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|\\\nimagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|\\\nimagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|\\\nimagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|\\\nimagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|\\\nimagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|\\\nimagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|\\\nimagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|\\\nimagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|\\\nimagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|\\\nimagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|\\\nimagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|\\\nimagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|\\\nimagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|\\\nimagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|\\\nimagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|\\\nimagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|\\\nimagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|\\\nimagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|\\\nimagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|\\\nimagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|\\\nimagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|\\\nimagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|\\\nimagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|\\\nimagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|\\\nimagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|\\\nimagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|\\\nimagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|\\\nimagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|\\\nimagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|\\\nimagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|\\\nimagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|\\\nimagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|\\\nimagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|\\\nimagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|\\\nimagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|\\\nimagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|\\\nimagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|\\\nimagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|\\\nimagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|\\\nimagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|\\\nimagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|\\\nimagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|\\\nimagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|\\\nimagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|\\\nimagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|\\\nimagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|\\\nimap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|\\\nimap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|\\\nimap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|\\\nimap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|\\\nimap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|\\\nimap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|\\\nimap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|\\\nimap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|\\\ninclude_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|\\\ningres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|\\\ningres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|\\\ningres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|\\\ningres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|\\\ningres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|\\\ninotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|\\\nintldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|\\\nis_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|\\\nis_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|\\\niscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|\\\niterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|\\\njddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|\\\njson_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|\\\nkadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|\\\nkadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|\\\nldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|\\\nldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|\\\nldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|\\\nldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|\\\nldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|\\\nlibxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|\\\nlimititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|\\\nlzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|\\\nm_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|\\\nm_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|\\\nm_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|\\\nm_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|\\\nmailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|\\\nmailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|\\\nmailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|\\\nmaxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|\\\nmaxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|\\\nmaxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|\\\nmaxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|\\\nmaxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|\\\nmaxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|\\\nmaxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|\\\nmaxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|\\\nmaxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|\\\nmaxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|\\\nmaxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|\\\nmaxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|\\\nmaxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|\\\nmaxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|\\\nmaxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|\\\nmb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|\\\nmb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|\\\nmb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|\\\nmb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|\\\nmb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|\\\nmb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|\\\nmb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|\\\nmcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|\\\nmcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|\\\nmcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|\\\nmcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|\\\nmcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|\\\nmcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|\\\nmdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|\\\nmhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|\\\nming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|\\\nmongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|\\\nmongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|\\\nmongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|\\\nmqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|\\\nmqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|\\\nmsession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|\\\nmsession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|\\\nmsg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|\\\nmsql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|\\\nmsql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|\\\nmsql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|\\\nmsql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|\\\nmssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|\\\nmssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|\\\nmssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|\\\nmssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|\\\nmssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|\\\nmysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|\\\nmysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|\\\nmysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|\\\nmysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|\\\nmysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|\\\nmysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_affected_rows|\\\nmysqli_autocommit|mysqli_bind_param|mysqli_bind_result|mysqli_cache_stats|mysqli_change_user|mysqli_character_set_name|\\\nmysqli_client_encoding|mysqli_close|mysqli_commit|mysqli_connect|mysqli_connect_errno|mysqli_connect_error|mysqli_data_seek|\\\nmysqli_debug|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_dump_debug_info|mysqli_embedded_server_end|\\\nmysqli_embedded_server_start|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_errno|mysqli_error|mysqli_escape_string|\\\nmysqli_execute|mysqli_fetch|mysqli_fetch_all|mysqli_fetch_array|mysqli_fetch_assoc|mysqli_fetch_field|mysqli_fetch_field_direct|\\\nmysqli_fetch_fields|mysqli_fetch_lengths|mysqli_fetch_object|mysqli_fetch_row|mysqli_field_count|mysqli_field_seek|mysqli_field_tell|\\\nmysqli_free_result|mysqli_get_charset|mysqli_get_client_info|mysqli_get_client_stats|mysqli_get_client_version|mysqli_get_connection_stats|\\\nmysqli_get_host_info|mysqli_get_metadata|mysqli_get_proto_info|mysqli_get_server_info|mysqli_get_server_version|mysqli_get_warnings|\\\nmysqli_info|mysqli_init|mysqli_insert_id|mysqli_kill|mysqli_link_construct|mysqli_master_query|mysqli_more_results|mysqli_multi_query|\\\nmysqli_next_result|mysqli_num_fields|mysqli_num_rows|mysqli_options|mysqli_param_count|mysqli_ping|mysqli_poll|mysqli_prepare|\\\nmysqli_query|mysqli_real_connect|mysqli_real_escape_string|mysqli_real_query|mysqli_reap_async_query|mysqli_refresh|mysqli_report|\\\nmysqli_result|mysqli_rollback|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_select_db|mysqli_send_long_data|\\\nmysqli_send_query|mysqli_set_charset|mysqli_set_local_infile_default|mysqli_set_local_infile_handler|mysqli_set_opt|mysqli_slave_query|\\\nmysqli_sqlstate|mysqli_ssl_set|mysqli_stat|mysqli_stmt|mysqli_stmt_affected_rows|mysqli_stmt_attr_get|mysqli_stmt_attr_set|\\\nmysqli_stmt_bind_param|mysqli_stmt_bind_result|mysqli_stmt_close|mysqli_stmt_data_seek|mysqli_stmt_errno|mysqli_stmt_error|\\\nmysqli_stmt_execute|mysqli_stmt_fetch|mysqli_stmt_field_count|mysqli_stmt_free_result|mysqli_stmt_get_result|mysqli_stmt_get_warnings|\\\nmysqli_stmt_init|mysqli_stmt_insert_id|mysqli_stmt_next_result|mysqli_stmt_num_rows|mysqli_stmt_param_count|mysqli_stmt_prepare|\\\nmysqli_stmt_reset|mysqli_stmt_result_metadata|mysqli_stmt_send_long_data|mysqli_stmt_sqlstate|mysqli_stmt_store_result|mysqli_store_result|\\\nmysqli_thread_id|mysqli_thread_safe|mysqli_use_result|mysqli_warning|mysqli_warning_count|mysqlnd_ms_get_stats|\\\nmysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|\\\nmysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|\\\nncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|\\\nncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|\\\nncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|\\\nncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|\\\nncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|\\\nncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|\\\nncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|\\\nncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|\\\nncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|\\\nncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|\\\nncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|\\\nncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|\\\nncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|\\\nncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|\\\nncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|\\\nncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|\\\nncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|\\\nncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|\\\nncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|\\\nncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|\\\nncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|\\\nncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|\\\nnewt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|\\\nnewt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|\\\nnewt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|\\\nnewt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|\\\nnewt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|\\\nnewt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|\\\nnewt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|\\\nnewt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|\\\nnewt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|\\\nnewt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|\\\nnewt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|\\\nnewt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|\\\nnewt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|\\\nnewt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|\\\nnewt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|\\\nnewt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|\\\nnewt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|\\\nnewt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|\\\nnewt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|\\\nnotes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|\\\nnotes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|\\\nnumberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|\\\nob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|\\\nob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|\\\noci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|\\\noci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|\\\noci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|\\\noci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|\\\noci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|\\\noci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|\\\noci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|\\\noci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|\\\noci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|\\\nocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|\\\nocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|\\\nocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|\\\nociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|\\\nocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|\\\noctdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|\\\nodbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|\\\nodbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|\\\nodbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|\\\nodbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|\\\nodbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|\\\nopenal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|\\\nopenal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|\\\nopenal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|\\\nopenlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|\\\nopenssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|\\\nopenssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|\\\nopenssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|\\\nopenssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|\\\nopenssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|\\\nopenssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|\\\nopenssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|\\\noutofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|\\\novrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|\\\novrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|\\\novrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|\\\nparse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|\\\npcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|\\\npcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|\\\npdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|\\\npdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|\\\npdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|\\\npdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|\\\npdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|\\\npdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|\\\npdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|\\\npdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|\\\npdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|\\\npdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|\\\npdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|\\\npdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|\\\npdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|\\\npdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|\\\npdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|\\\npdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|\\\npdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|\\\npdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|\\\npdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|\\\npdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|\\\npdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|\\\npdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|\\\npdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|\\\npdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|\\\npg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|\\\npg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|\\\npg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|\\\npg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|\\\npg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|\\\npg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|\\\npg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|\\\npg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|\\\npg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|\\\nphp_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|\\\npng2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|\\\nposix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|\\\nposix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|\\\nposix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|\\\npreg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|\\\nprinter_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|\\\nprinter_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|\\\nprinter_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|\\\nprinter_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|\\\nprinter_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|\\\nps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|\\\nps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|\\\nps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|\\\nps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|\\\nps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|\\\nps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|\\\nps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|\\\nps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|\\\nps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|\\\npspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|\\\npspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|\\\npspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|\\\npx_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|\\\npx_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|\\\npx_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|\\\nradius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|\\\nradius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|\\\nradius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|\\\nradius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|\\\nrararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|\\\nreadline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|\\\nreadline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|\\\nreadline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|\\\nrecursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|\\\nrecursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|\\\nreflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|\\\nregexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|\\\nresourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|\\\nrpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|\\\nrrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|\\\nrunkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|\\\nrunkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|\\\nrunkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|\\\nrunkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|\\\nsamconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|\\\nsamconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|\\\nsammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|\\\nsca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|\\\nsdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|\\\nsdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|\\\nsdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|\\\nsdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|\\\nsdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|\\\nsdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|\\\nsdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|\\\nsdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|\\\nsdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|\\\nsdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|\\\nsdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|\\\nsdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|\\\nsdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|\\\nsdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|\\\nsdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|\\\nsdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|\\\nsdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|\\\nsem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|\\\nsession_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|\\\nsession_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|\\\nsession_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|\\\nsession_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|\\\nset_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|\\\nsetstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|\\\nshm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|\\\nsimilar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|\\\nsnmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|\\\nsnmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|\\\nsnmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|\\\nsoapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|\\\nsocket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|\\\nsocket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|\\\nsocket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|\\\nsolrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|\\\nsolrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|\\\nsolrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|\\\nspl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|\\\nsplfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|\\\nsplpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|\\\nsqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|\\\nsqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|\\\nsqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|\\\nsqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|\\\nsqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|\\\nsqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|\\\nssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|\\\nssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|\\\nssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|\\\nssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|\\\nstats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|\\\nstats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|\\\nstats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|\\\nstats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|\\\nstats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|\\\nstats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|\\\nstats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|\\\nstats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|\\\nstats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|\\\nstats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|\\\nstats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|\\\nstats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|\\\nstr_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|\\\nstream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|\\\nstream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|\\\nstream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|\\\nstream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|\\\nstream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|\\\nstream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|\\\nstream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|\\\nstream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|\\\nstripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|\\\nstrstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|\\\nsvn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|\\\nsvn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|\\\nsvn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|\\\nsvn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|\\\nsvn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|\\\nsvn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|\\\nswf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|\\\nswf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|\\\nswf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|\\\nswf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|\\\nswf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|\\\nswf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|\\\nswf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|\\\nswf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|\\\nswfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|\\\nswfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|\\\nswish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|\\\nswishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|\\\nswishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|\\\nsybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|\\\nsybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|\\\nsybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|\\\nsybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|\\\ntcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|\\\ntidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|\\\ntime_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|\\\ntimezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|\\\ntokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|\\\nucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|\\\nudm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|\\\nudm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|\\\nuksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|\\\nurldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|\\\nvariant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|\\\nvariant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|\\\nvariant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|\\\nvpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|\\\nvpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|\\\nvpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|\\\nw32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|\\\nwddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|\\\nwin32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|\\\nwin32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|\\\nwincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|\\\nwincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|\\\nwincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|\\\nwincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|\\\nxattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|\\\nxdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|\\\nxdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|\\\nxhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|\\\nxml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|\\\nxml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|\\\nxml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|\\\nxml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|\\\nxmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|\\\nxmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|\\\nxmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|\\\nxmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|\\\nxmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|\\\nxmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|\\\nxmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|\\\nxmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|\\\nxmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|\\\nxmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|\\\nxmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|\\\nxpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|\\\nxslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|\\\nxslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|\\\nyaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|\\\nyaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|\\\nyaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|\\\nyp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|\\\nzip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|\\\nziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|\\\nziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|\\\nziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|\\\nziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|\\\nziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|\\\nziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type'.split('|'));\n    var keywords = lang.arrayToMap('abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|\\\nendif|endswitch|endwhile|extends|final|finally|for|foreach|function|global|goto|if|implements|instanceof|insteadof|interface|namespace|new|or|private|protected|\\\npublic|static|switch|throw|trait|try|use|var|while|xor|yield'.split('|'));\n    var languageConstructs = lang.arrayToMap(('__halt_compiler|die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset').split('|'));\n    var builtinConstants = lang.arrayToMap(('true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__|__TRAIT__').split('|'));\n    var builtinVariables = lang.arrayToMap('$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|\\\n$http_response_header|$argc|$argv'.split('|'));\n    var builtinFunctionsDeprecated = lang.arrayToMap('key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|\\\ncom_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|\\\ncubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|\\\nhw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|\\\nmaxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|\\\nmysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|\\\nmysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|\\\nmysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|\\\nmysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|\\\nmysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|\\\nmysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|\\\nocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|\\\nocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|\\\nocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|\\\nocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|\\\nociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|\\\nPDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|\\\nPDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|\\\nPDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|\\\nPDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|\\\nPDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|\\\nPDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|\\\nPDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|\\\nPDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|\\\npx_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregister\\\nset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|\\\nsql_regcase'.split('|'));\n    var keywordsDeprecated = lang.arrayToMap(('cfunction|old_function').split('|'));\n    var futureReserved = lang.arrayToMap([]);\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: /(?:#|\\/\\/)(?:[^?]|\\?[^>])*/\n            },\n            docComment.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token: \"string\",\n                regex: '\"',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: \"'\",\n                next: \"qstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|\" +\n                    \"ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|\" +\n                    \"HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|\" +\n                    \"L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|\" +\n                    \"VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"\n            }, {\n                token: [\"keyword\", \"text\", \"support.class\"],\n                regex: \"\\\\b(new)(\\\\s+)(\\\\w+)\"\n            }, {\n                token: [\"support.class\", \"keyword.operator\"],\n                regex: \"\\\\b(\\\\w+)(::)\"\n            }, {\n                token: \"constant.language\",\n                regex: \"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|\" +\n                    \"SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|\" +\n                    \"O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|\" +\n                    \"R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|\" +\n                    \"YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|\" +\n                    \"ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|\" +\n                    \"T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|\" +\n                    \"HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|\" +\n                    \"I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|\" +\n                    \"O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|\" +\n                    \"L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|\" +\n                    \"M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|\" +\n                    \"OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                    \"P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                    \"RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|\" +\n                    \"T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"\n            }, {\n                token: function (value) {\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (builtinConstants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (builtinVariables.hasOwnProperty(value))\n                        return \"variable.language\";\n                    else if (futureReserved.hasOwnProperty(value))\n                        return \"invalid.illegal\";\n                    else if (builtinFunctions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (value == \"debugger\")\n                        return \"invalid.deprecated\";\n                    else if (value.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/))\n                        return \"variable\";\n                    return \"identifier\";\n                },\n                regex: /[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            }, {\n                onMatch: function (value, currentSate, state) {\n                    value = value.substr(3);\n                    if (value[0] == \"'\" || value[0] == '\"')\n                        value = value.slice(1, -1);\n                    state.unshift(this.next, value);\n                    return \"markup.list\";\n                },\n                regex: /<<<(?:\\w+|'\\w+'|\"\\w+\")$/,\n                next: \"heredoc\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|\\\\.=|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|/=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[,;]/\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"heredoc\": [\n            {\n                onMatch: function (value, currentState, stack) {\n                    if (stack[1] != value) {\n                        this.next = \"\";\n                        return \"string\";\n                    }\n                    stack.shift();\n                    stack.shift();\n                    this.next = this.nextState;\n                    return \"markup.list\";\n                },\n                regex: \"^\\\\w+(?=;?$)\",\n                nextState: \"start\"\n            }, {\n                token: \"string\",\n                regex: \".*\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: '\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'\n            }, {\n                token: \"variable\",\n                regex: /\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/\n            }, {\n                token: \"variable\",\n                regex: /\\$\\{[^\"\\}]+\\}?/ // this is wrong but ok for now\n            },\n            { token: \"string\", regex: '\"', next: \"start\" },\n            { defaultToken: \"string\" }\n        ],\n        \"qstring\": [\n            { token: \"constant.language.escape\", regex: /\\\\['\\\\]/ },\n            { token: \"string\", regex: \"'\", next: \"start\" },\n            { defaultToken: \"string\" }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\noop.inherits(PhpLangHighlightRules, TextHighlightRules);\nvar PhpHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var startRules = [\n        {\n            token: \"support.php_tag\",\n            regex: \"<\\\\?(?:php|=)?\",\n            push: \"php-start\"\n        }\n    ];\n    var endRules = [\n        {\n            token: \"support.php_tag\",\n            regex: \"\\\\?>\",\n            next: \"pop\"\n        }\n    ];\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n    this.embedRules(PhpLangHighlightRules, \"php-\", endRules, [\"start\"]);\n    this.normalizeRules();\n};\noop.inherits(PhpHighlightRules, HtmlHighlightRules);\nexports.PhpHighlightRules = PhpHighlightRules;\nexports.PhpLangHighlightRules = PhpLangHighlightRules;\n\n});\n\nace.define(\"ace/mode/php_laravel_blade_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/php_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar PhpHighlightRules = require(\"./php_highlight_rules\").PhpHighlightRules;\nvar PHPLaravelBladeHighlightRules = function () {\n    PhpHighlightRules.call(this);\n    var bladeRules = {\n        start: [{\n                include: \"bladeComments\"\n            }, {\n                include: \"directives\"\n            }, {\n                include: \"parenthesis\"\n            }],\n        comments: [{\n                include: \"bladeComments\"\n            }, {\n                token: \"punctuation.definition.comment.blade\",\n                regex: \"(\\\\/\\\\/(.)*)|(\\\\#(.)*)\"\n            }, {\n                token: \"punctuation.definition.comment.begin.php\",\n                regex: \"(?:\\\\/\\\\*)\",\n                push: [{\n                        token: \"punctuation.definition.comment.end.php\",\n                        regex: \"(?:\\\\*\\\\/)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.block.blade\"\n                    }]\n            }],\n        bladeComments: [{\n                token: \"punctuation.definition.comment.begin.blade\",\n                regex: \"(?:\\\\{\\\\{\\\\-\\\\-)\",\n                push: [{\n                        token: \"punctuation.definition.comment.end.blade\",\n                        regex: \"(?:\\\\-\\\\-\\\\}\\\\})\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.block.blade\"\n                    }]\n            }],\n        parenthesis: [{\n                token: \"parenthesis.begin.blade\",\n                regex: \"\\\\(\",\n                push: [{\n                        token: \"parenthesis.end.blade\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        include: \"strings\"\n                    }, {\n                        include: \"variables\"\n                    }, {\n                        include: \"lang\"\n                    }, {\n                        include: \"parenthesis\"\n                    }, {\n                        include: \"comments\"\n                    }, {\n                        defaultToken: \"source.blade\"\n                    }]\n            }],\n        directives: [{\n                token: [\"directive.declaration.blade\", \"keyword.directives.blade\"],\n                regex: \"(@)(endunless|endisset|endempty|endauth|endguest|endcomponent|endslot|endalert|endverbatim|endsection|show|php|endphp|endpush|endprepend|endenv|endforelse|isset|empty|component|slot|alert|json|verbatim|section|auth|guest|hasSection|forelse|includeIf|includeWhen|includeFirst|each|push|stack|prepend|inject|env|elseenv|unless|yield|extends|parent|include|acfrepeater|block|can|cannot|choice|debug|elsecan|elsecannot|embed|hipchat|lang|layout|macro|macrodef|minify|partial|render|servers|set|slack|story|task|unset|wpposts|acfend|after|append|breakpoint|endafter|endcan|endcannot|endembed|endmacro|endmarkdown|endminify|endpartial|endsetup|endstory|endtask|endunless|markdown|overwrite|setup|stop|wpempty|wpend|wpquery)\"\n            }, {\n                token: [\"directive.declaration.blade\", \"keyword.control.blade\"],\n                regex: \"(@)(if|else|elseif|endif|foreach|endforeach|switch|case|break|default|endswitch|for|endfor|while|endwhile|continue)\"\n            }, {\n                token: [\"directive.ignore.blade\", \"injections.begin.blade\"],\n                regex: \"(@?)(\\\\{\\\\{)\",\n                push: [{\n                        token: \"injections.end.blade\",\n                        regex: \"\\\\}\\\\}\",\n                        next: \"pop\"\n                    }, {\n                        include: \"strings\"\n                    }, {\n                        include: \"variables\"\n                    }, {\n                        include: \"comments\"\n                    }, {\n                        defaultToken: \"source.blade\"\n                    }]\n            }, {\n                token: \"injections.unescaped.begin.blade\",\n                regex: \"\\\\{\\\\!\\\\!\",\n                push: [{\n                        token: \"injections.unescaped.end.blade\",\n                        regex: \"\\\\!\\\\!\\\\}\",\n                        next: \"pop\"\n                    }, {\n                        include: \"strings\"\n                    }, {\n                        include: \"variables\"\n                    }, {\n                        defaultToken: \"source.blade\"\n                    }]\n            }\n        ],\n        lang: [{\n                token: \"keyword.operator.blade\",\n                regex: \"(?:!=|!|<=|>=|<|>|===|==|=|\\\\+\\\\+|\\\\;|\\\\,|%|&&|\\\\|\\\\|)|\\\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod|as)\\\\b\"\n            }, {\n                token: \"constant.language.blade\",\n                regex: \"\\\\b(?:TRUE|FALSE|true|false)\\\\b\"\n            }],\n        strings: [{\n                token: \"punctuation.definition.string.begin.blade\",\n                regex: \"\\\"\",\n                push: [{\n                        token: \"punctuation.definition.string.end.blade\",\n                        regex: \"\\\"\",\n                        next: \"pop\"\n                    }, {\n                        token: \"string.character.escape.blade\",\n                        regex: \"\\\\\\\\.\"\n                    }, {\n                        defaultToken: \"string.quoted.single.blade\"\n                    }]\n            }, {\n                token: \"punctuation.definition.string.begin.blade\",\n                regex: \"'\",\n                push: [{\n                        token: \"punctuation.definition.string.end.blade\",\n                        regex: \"'\",\n                        next: \"pop\"\n                    }, {\n                        token: \"string.character.escape.blade\",\n                        regex: \"\\\\\\\\.\"\n                    }, {\n                        defaultToken: \"string.quoted.double.blade\"\n                    }]\n            }],\n        variables: [{\n                token: \"variable.blade\",\n                regex: \"\\\\$([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"\n            }, {\n                token: [\"keyword.operator.blade\", \"constant.other.property.blade\"],\n                regex: \"(->)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"\n            }, {\n                token: [\"keyword.operator.blade\",\n                    \"meta.function-call.object.blade\",\n                    \"punctuation.definition.variable.blade\",\n                    \"variable.blade\",\n                    \"punctuation.definition.variable.blade\"\n                ],\n                regex: \"(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\\\()(.*?)(\\\\))\"\n            }]\n    };\n    var bladeStart = bladeRules.start;\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift.apply(this.$rules[rule], bladeStart);\n    }\n    Object.keys(bladeRules).forEach(function (x) {\n        if (!this.$rules[x])\n            this.$rules[x] = bladeRules[x];\n    }, this);\n    this.normalizeRules();\n};\noop.inherits(PHPLaravelBladeHighlightRules, PhpHighlightRules);\nexports.PHPLaravelBladeHighlightRules = PHPLaravelBladeHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/php_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/**\n * ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK *****\n */\n\"use strict\";\nvar functionMap = {\n    \"abs\": [\n        \"int abs(int number)\",\n        \"Return the absolute value of the number\"\n    ],\n    \"acos\": [\n        \"float acos(float number)\",\n        \"Return the arc cosine of the number in radians\"\n    ],\n    \"acosh\": [\n        \"float acosh(float number)\",\n        \"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"\n    ],\n    \"addGlob\": [\n        \"bool addGlob(string pattern[,int flags [, array options]])\",\n        \"Add files matching the glob pattern. See php's glob for the pattern syntax.\"\n    ],\n    \"addPattern\": [\n        \"bool addPattern(string pattern[, string path [, array options]])\",\n        \"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"\n    ],\n    \"addcslashes\": [\n        \"string addcslashes(string str, string charlist)\",\n        \"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"\n    ],\n    \"addslashes\": [\n        \"string addslashes(string str)\",\n        \"Escapes single quote, double quotes and backslash characters in a string with backslashes\"\n    ],\n    \"apache_child_terminate\": [\n        \"bool apache_child_terminate()\",\n        \"Terminate apache process after this request\"\n    ],\n    \"apache_get_modules\": [\n        \"array apache_get_modules()\",\n        \"Get a list of loaded Apache modules\"\n    ],\n    \"apache_get_version\": [\n        \"string apache_get_version()\",\n        \"Fetch Apache version\"\n    ],\n    \"apache_getenv\": [\n        \"bool apache_getenv(string variable [, bool walk_to_top])\",\n        \"Get an Apache subprocess_env variable\"\n    ],\n    \"apache_lookup_uri\": [\n        \"object apache_lookup_uri(string URI)\",\n        \"Perform a partial request of the given URI to obtain information about it\"\n    ],\n    \"apache_note\": [\n        \"string apache_note(string note_name [, string note_value])\",\n        \"Get and set Apache request notes\"\n    ],\n    \"apache_request_auth_name\": [\n        \"string apache_request_auth_name()\",\n        \"\"\n    ],\n    \"apache_request_auth_type\": [\n        \"string apache_request_auth_type()\",\n        \"\"\n    ],\n    \"apache_request_discard_request_body\": [\n        \"long apache_request_discard_request_body()\",\n        \"\"\n    ],\n    \"apache_request_err_headers_out\": [\n        \"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all headers that go out in case of an error or a subrequest\"\n    ],\n    \"apache_request_headers\": [\n        \"array apache_request_headers()\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"apache_request_headers_in\": [\n        \"array apache_request_headers_in()\",\n        \"* fetch all incoming request headers\"\n    ],\n    \"apache_request_headers_out\": [\n        \"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all outgoing request headers\"\n    ],\n    \"apache_request_is_initial_req\": [\n        \"bool apache_request_is_initial_req()\",\n        \"\"\n    ],\n    \"apache_request_log_error\": [\n        \"bool apache_request_log_error(string message, [long facility])\",\n        \"\"\n    ],\n    \"apache_request_meets_conditions\": [\n        \"long apache_request_meets_conditions()\",\n        \"\"\n    ],\n    \"apache_request_remote_host\": [\n        \"int apache_request_remote_host([int type])\",\n        \"\"\n    ],\n    \"apache_request_run\": [\n        \"long apache_request_run()\",\n        \"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"\n    ],\n    \"apache_request_satisfies\": [\n        \"long apache_request_satisfies()\",\n        \"\"\n    ],\n    \"apache_request_server_port\": [\n        \"int apache_request_server_port()\",\n        \"\"\n    ],\n    \"apache_request_set_etag\": [\n        \"void apache_request_set_etag()\",\n        \"\"\n    ],\n    \"apache_request_set_last_modified\": [\n        \"void apache_request_set_last_modified()\",\n        \"\"\n    ],\n    \"apache_request_some_auth_required\": [\n        \"bool apache_request_some_auth_required()\",\n        \"\"\n    ],\n    \"apache_request_sub_req_lookup_file\": [\n        \"object apache_request_sub_req_lookup_file(string file)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_sub_req_lookup_uri\": [\n        \"object apache_request_sub_req_lookup_uri(string uri)\",\n        \"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"\n    ],\n    \"apache_request_sub_req_method_uri\": [\n        \"object apache_request_sub_req_method_uri(string method, string uri)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_update_mtime\": [\n        \"long apache_request_update_mtime([int dependency_mtime])\",\n        \"\"\n    ],\n    \"apache_reset_timeout\": [\n        \"bool apache_reset_timeout()\",\n        \"Reset the Apache write timer\"\n    ],\n    \"apache_response_headers\": [\n        \"array apache_response_headers()\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"apache_setenv\": [\n        \"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\n        \"Set an Apache subprocess_env variable\"\n    ],\n    \"array_change_key_case\": [\n        \"array array_change_key_case(array input [, int case=CASE_LOWER])\",\n        \"Retuns an array with all string keys lowercased [or uppercased]\"\n    ],\n    \"array_chunk\": [\n        \"array array_chunk(array input, int size [, bool preserve_keys])\",\n        \"Split array into chunks\"\n    ],\n    \"array_combine\": [\n        \"array array_combine(array keys, array values)\",\n        \"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"\n    ],\n    \"array_count_values\": [\n        \"array array_count_values(array input)\",\n        \"Return the value as key and the frequency of that value in input as value\"\n    ],\n    \"array_diff\": [\n        \"array array_diff(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"\n    ],\n    \"array_diff_assoc\": [\n        \"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"\n    ],\n    \"array_diff_key\": [\n        \"array array_diff_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_diff_uassoc\": [\n        \"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"\n    ],\n    \"array_diff_ukey\": [\n        \"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_fill\": [\n        \"array array_fill(int start_key, int num, mixed val)\",\n        \"Create an array containing num elements starting with index start_key each initialized to val\"\n    ],\n    \"array_fill_keys\": [\n        \"array array_fill_keys(array keys, mixed val)\",\n        \"Create an array using the elements of the first parameter as keys each initialized to val\"\n    ],\n    \"array_filter\": [\n        \"array array_filter(array input [, mixed callback])\",\n        \"Filters elements from the array via the callback.\"\n    ],\n    \"array_flip\": [\n        \"array array_flip(array input)\",\n        \"Return array with key <-> value flipped\"\n    ],\n    \"array_intersect\": [\n        \"array array_intersect(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments\"\n    ],\n    \"array_intersect_assoc\": [\n        \"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"\n    ],\n    \"array_intersect_key\": [\n        \"array array_intersect_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"\n    ],\n    \"array_intersect_uassoc\": [\n        \"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"\n    ],\n    \"array_intersect_ukey\": [\n        \"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"\n    ],\n    \"array_key_exists\": [\n        \"bool array_key_exists(mixed key, array search)\",\n        \"Checks if the given key or index exists in the array\"\n    ],\n    \"array_keys\": [\n        \"array array_keys(array input [, mixed search_value[, bool strict]])\",\n        \"Return just the keys from the input array, optionally only for the specified search_value\"\n    ],\n    \"array_key_first\": [\n        \"mixed array_key_first(array arr)\",\n        \"Returns the first key of arr if the array is not empty; NULL otherwise\"\n    ],\n    \"array_key_last\": [\n        \"mixed array_key_last(array arr)\",\n        \"Returns the last key of arr if the array is not empty; NULL otherwise\"\n    ],\n    \"array_map\": [\n        \"array array_map(mixed callback, array input1 [, array input2 ,...])\",\n        \"Applies the callback to the elements in given arrays.\"\n    ],\n    \"array_merge\": [\n        \"array array_merge(array arr1, array arr2 [, array ...])\",\n        \"Merges elements from passed arrays into one array\"\n    ],\n    \"array_merge_recursive\": [\n        \"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively merges elements from passed arrays into one array\"\n    ],\n    \"array_multisort\": [\n        \"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\n        \"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"\n    ],\n    \"array_pad\": [\n        \"array array_pad(array input, int pad_size, mixed pad_value)\",\n        \"Returns a copy of input array padded with pad_value to size pad_size\"\n    ],\n    \"array_pop\": [\n        \"mixed array_pop(array stack)\",\n        \"Pops an element off the end of the array\"\n    ],\n    \"array_product\": [\n        \"mixed array_product(array input)\",\n        \"Returns the product of the array entries\"\n    ],\n    \"array_push\": [\n        \"int array_push(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the end of the array\"\n    ],\n    \"array_rand\": [\n        \"mixed array_rand(array input [, int num_req])\",\n        \"Return key/keys for random entry/entries in the array\"\n    ],\n    \"array_reduce\": [\n        \"mixed array_reduce(array input, mixed callback [, mixed initial])\",\n        \"Iteratively reduce the array to a single value via the callback.\"\n    ],\n    \"array_replace\": [\n        \"array array_replace(array arr1, array arr2 [, array ...])\",\n        \"Replaces elements from passed arrays into one array\"\n    ],\n    \"array_replace_recursive\": [\n        \"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively replaces elements from passed arrays into one array\"\n    ],\n    \"array_reverse\": [\n        \"array array_reverse(array input [, bool preserve keys])\",\n        \"Return input as a new array with the order of the entries reversed\"\n    ],\n    \"array_search\": [\n        \"mixed array_search(mixed needle, array haystack [, bool strict])\",\n        \"Searches the array for a given value and returns the corresponding key if successful\"\n    ],\n    \"array_shift\": [\n        \"mixed array_shift(array stack)\",\n        \"Pops an element off the beginning of the array\"\n    ],\n    \"array_slice\": [\n        \"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\n        \"Returns elements specified by offset and length\"\n    ],\n    \"array_splice\": [\n        \"array array_splice(array input, int offset [, int length [, array replacement]])\",\n        \"Removes the elements designated by offset and length and replace them with supplied array\"\n    ],\n    \"array_sum\": [\n        \"mixed array_sum(array input)\",\n        \"Returns the sum of the array entries\"\n    ],\n    \"array_udiff\": [\n        \"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"\n    ],\n    \"array_udiff_assoc\": [\n        \"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"\n    ],\n    \"array_udiff_uassoc\": [\n        \"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"\n    ],\n    \"array_uintersect\": [\n        \"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_assoc\": [\n        \"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_uassoc\": [\n        \"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"\n    ],\n    \"array_unique\": [\n        \"array array_unique(array input [, int sort_flags])\",\n        \"Removes duplicate values from array\"\n    ],\n    \"array_unshift\": [\n        \"int array_unshift(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the beginning of the array\"\n    ],\n    \"array_values\": [\n        \"array array_values(array input)\",\n        \"Return just the values from the input array\"\n    ],\n    \"array_walk\": [\n        \"bool array_walk(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function to every member of an array\"\n    ],\n    \"array_walk_recursive\": [\n        \"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function recursively to every member of an array\"\n    ],\n    \"arsort\": [\n        \"bool arsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order and maintain index association\"\n    ],\n    \"asin\": [\n        \"float asin(float number)\",\n        \"Returns the arc sine of the number in radians\"\n    ],\n    \"asinh\": [\n        \"float asinh(float number)\",\n        \"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"\n    ],\n    \"asort\": [\n        \"bool asort(array &array_arg [, int sort_flags])\",\n        \"Sort an array and maintain index association\"\n    ],\n    \"assert\": [\n        \"int assert(string|bool assertion)\",\n        \"Checks if assertion is false\"\n    ],\n    \"assert_options\": [\n        \"mixed assert_options(int what [, mixed value])\",\n        \"Set/get the various assert flags\"\n    ],\n    \"atan\": [\n        \"float atan(float number)\",\n        \"Returns the arc tangent of the number in radians\"\n    ],\n    \"atan2\": [\n        \"float atan2(float y, float x)\",\n        \"Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x\"\n    ],\n    \"atanh\": [\n        \"float atanh(float number)\",\n        \"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"\n    ],\n    \"attachIterator\": [\n        \"void attachIterator(Iterator iterator[, mixed info])\",\n        \"Attach a new iterator\"\n    ],\n    \"base64_decode\": [\n        \"string base64_decode(string str[, bool strict])\",\n        \"Decodes string using MIME base64 algorithm\"\n    ],\n    \"base64_encode\": [\n        \"string base64_encode(string str)\",\n        \"Encodes string using MIME base64 algorithm\"\n    ],\n    \"base_convert\": [\n        \"string base_convert(string number, int frombase, int tobase)\",\n        \"Converts a number in a string from any base <= 36 to any base <= 36\"\n    ],\n    \"basename\": [\n        \"string basename(string path [, string suffix])\",\n        \"Returns the filename component of the path\"\n    ],\n    \"bcadd\": [\n        \"string bcadd(string left_operand, string right_operand [, int scale])\",\n        \"Returns the sum of two arbitrary precision numbers\"\n    ],\n    \"bccomp\": [\n        \"int bccomp(string left_operand, string right_operand [, int scale])\",\n        \"Compares two arbitrary precision numbers\"\n    ],\n    \"bcdiv\": [\n        \"string bcdiv(string left_operand, string right_operand [, int scale])\",\n        \"Returns the quotient of two arbitrary precision numbers (division)\"\n    ],\n    \"bcmod\": [\n        \"string bcmod(string left_operand, string right_operand)\",\n        \"Returns the modulus of the two arbitrary precision operands\"\n    ],\n    \"bcmul\": [\n        \"string bcmul(string left_operand, string right_operand [, int scale])\",\n        \"Returns the multiplication of two arbitrary precision numbers\"\n    ],\n    \"bcpow\": [\n        \"string bcpow(string x, string y [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another\"\n    ],\n    \"bcpowmod\": [\n        \"string bcpowmod(string x, string y, string mod [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"\n    ],\n    \"bcscale\": [\n        \"bool bcscale(int scale)\",\n        \"Sets default scale parameter for all bc math functions\"\n    ],\n    \"bcsqrt\": [\n        \"string bcsqrt(string operand [, int scale])\",\n        \"Returns the square root of an arbitray precision number\"\n    ],\n    \"bcsub\": [\n        \"string bcsub(string left_operand, string right_operand [, int scale])\",\n        \"Returns the difference between two arbitrary precision numbers\"\n    ],\n    \"bin2hex\": [\n        \"string bin2hex(string data)\",\n        \"Converts the binary representation of data to hex\"\n    ],\n    \"bind_textdomain_codeset\": [\n        \"string bind_textdomain_codeset (string domain, string codeset)\",\n        \"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"\n    ],\n    \"bindec\": [\n        \"int bindec(string binary_number)\",\n        \"Returns the decimal equivalent of the binary number\"\n    ],\n    \"bindtextdomain\": [\n        \"string bindtextdomain(string domain_name, string dir)\",\n        \"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"\n    ],\n    \"birdstep_autocommit\": [\n        \"bool birdstep_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_close\": [\n        \"bool birdstep_close(int id)\",\n        \"\"\n    ],\n    \"birdstep_commit\": [\n        \"bool birdstep_commit(int index)\",\n        \"\"\n    ],\n    \"birdstep_connect\": [\n        \"int birdstep_connect(string server, string user, string pass)\",\n        \"\"\n    ],\n    \"birdstep_exec\": [\n        \"int birdstep_exec(int index, string exec_str)\",\n        \"\"\n    ],\n    \"birdstep_fetch\": [\n        \"bool birdstep_fetch(int index)\",\n        \"\"\n    ],\n    \"birdstep_fieldname\": [\n        \"string birdstep_fieldname(int index, int col)\",\n        \"\"\n    ],\n    \"birdstep_fieldnum\": [\n        \"int birdstep_fieldnum(int index)\",\n        \"\"\n    ],\n    \"birdstep_freeresult\": [\n        \"bool birdstep_freeresult(int index)\",\n        \"\"\n    ],\n    \"birdstep_off_autocommit\": [\n        \"bool birdstep_off_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_result\": [\n        \"mixed birdstep_result(int index, mixed col)\",\n        \"\"\n    ],\n    \"birdstep_rollback\": [\n        \"bool birdstep_rollback(int index)\",\n        \"\"\n    ],\n    \"bzcompress\": [\n        \"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\n        \"Compresses a string into BZip2 encoded data\"\n    ],\n    \"bzdecompress\": [\n        \"string bzdecompress(string source [, int small])\",\n        \"Decompresses BZip2 compressed data\"\n    ],\n    \"bzerrno\": [\n        \"int bzerrno(resource bz)\",\n        \"Returns the error number\"\n    ],\n    \"bzerror\": [\n        \"array bzerror(resource bz)\",\n        \"Returns the error number and error string in an associative array\"\n    ],\n    \"bzerrstr\": [\n        \"string bzerrstr(resource bz)\",\n        \"Returns the error string\"\n    ],\n    \"bzopen\": [\n        \"resource bzopen(string|int file|fp, string mode)\",\n        \"Opens a new BZip2 stream\"\n    ],\n    \"bzread\": [\n        \"string bzread(resource bz[, int length])\",\n        \"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"\n    ],\n    \"cal_days_in_month\": [\n        \"int cal_days_in_month(int calendar, int month, int year)\",\n        \"Returns the number of days in a month for a given year and calendar\"\n    ],\n    \"cal_from_jd\": [\n        \"array cal_from_jd(int jd, int calendar)\",\n        \"Converts from Julian Day Count to a supported calendar and return extended information\"\n    ],\n    \"cal_info\": [\n        \"array cal_info([int calendar])\",\n        \"Returns information about a particular calendar\"\n    ],\n    \"cal_to_jd\": [\n        \"int cal_to_jd(int calendar, int month, int day, int year)\",\n        \"Converts from a supported calendar to Julian Day Count\"\n    ],\n    \"call_user_func\": [\n        \"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"call_user_func_array\": [\n        \"mixed call_user_func_array(string function_name, array parameters)\",\n        \"Call a user function which is the first parameter with the arguments contained in array\"\n    ],\n    \"call_user_method\": [\n        \"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\n        \"Call a user method on a specific object or class\"\n    ],\n    \"call_user_method_array\": [\n        \"mixed call_user_method_array(string method_name, mixed object, array params)\",\n        \"Call a user method on a specific object or class using a parameter array\"\n    ],\n    \"ceil\": [\n        \"float ceil(float number)\",\n        \"Returns the next highest integer value of the number\"\n    ],\n    \"chdir\": [\n        \"bool chdir(string directory)\",\n        \"Change the current directory\"\n    ],\n    \"checkdate\": [\n        \"bool checkdate(int month, int day, int year)\",\n        \"Returns true(1) if it is a valid date in gregorian calendar\"\n    ],\n    \"chgrp\": [\n        \"bool chgrp(string filename, mixed group)\",\n        \"Change file group\"\n    ],\n    \"chmod\": [\n        \"bool chmod(string filename, int mode)\",\n        \"Change file mode\"\n    ],\n    \"chown\": [\n        \"bool chown(string filename, mixed user)\",\n        \"Change file owner\"\n    ],\n    \"chr\": [\n        \"string chr(int ascii)\",\n        \"Converts ASCII code to a character\"\n    ],\n    \"chroot\": [\n        \"bool chroot(string directory)\",\n        \"Change root directory\"\n    ],\n    \"chunk_split\": [\n        \"string chunk_split(string str [, int chunklen [, string ending]])\",\n        \"Returns split line\"\n    ],\n    \"class_alias\": [\n        \"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\n        \"Creates an alias for user defined class\"\n    ],\n    \"class_exists\": [\n        \"bool class_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"class_implements\": [\n        \"array class_implements(mixed what [, bool autoload ])\",\n        \"Return all classes and interfaces implemented by SPL\"\n    ],\n    \"class_parents\": [\n        \"array class_parents(object instance [, bool autoload = true])\",\n        \"Return an array containing the names of all parent classes\"\n    ],\n    \"clearstatcache\": [\n        \"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\n        \"Clear file stat cache\"\n    ],\n    \"closedir\": [\n        \"void closedir([resource dir_handle])\",\n        \"Close directory connection identified by the dir_handle\"\n    ],\n    \"closelog\": [\n        \"bool closelog()\",\n        \"Close connection to system logger\"\n    ],\n    \"collator_asort\": [\n        \"bool collator_asort( Collator $coll, array(string) $arr )\",\n        \"* Sort array using specified collator, maintaining index association.\"\n    ],\n    \"collator_compare\": [\n        \"int collator_compare( Collator $coll, string $str1, string $str2 )\",\n        \"* Compare two strings.\"\n    ],\n    \"collator_create\": [\n        \"Collator collator_create( string $locale )\",\n        \"* Create collator.\"\n    ],\n    \"collator_get_attribute\": [\n        \"int collator_get_attribute( Collator $coll, int $attr )\",\n        \"* Get collation attribute value.\"\n    ],\n    \"collator_get_error_code\": [\n        \"int collator_get_error_code( Collator $coll )\",\n        \"* Get collator's last error code.\"\n    ],\n    \"collator_get_error_message\": [\n        \"string collator_get_error_message( Collator $coll )\",\n        \"* Get text description for collator's last error code.\"\n    ],\n    \"collator_get_locale\": [\n        \"string collator_get_locale( Collator $coll, int $type )\",\n        \"* Gets the locale name of the collator.\"\n    ],\n    \"collator_get_sort_key\": [\n        \"bool collator_get_sort_key( Collator $coll, string $str )\",\n        \"* Get a sort key for a string from a Collator. }}}\"\n    ],\n    \"collator_get_strength\": [\n        \"int collator_get_strength(Collator coll)\",\n        \"* Returns the current collation strength.\"\n    ],\n    \"collator_set_attribute\": [\n        \"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\n        \"* Set collation attribute.\"\n    ],\n    \"collator_set_strength\": [\n        \"bool collator_set_strength(Collator coll, int strength)\",\n        \"* Set the collation strength.\"\n    ],\n    \"collator_sort\": [\n        \"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\n        \"* Sort array using specified collator.\"\n    ],\n    \"collator_sort_with_sort_keys\": [\n        \"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\n        \"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"\n    ],\n    \"com_create_guid\": [\n        \"string com_create_guid()\",\n        \"Generate a globally unique identifier (GUID)\"\n    ],\n    \"com_event_sink\": [\n        \"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\n        \"Connect events from a COM object to a PHP object\"\n    ],\n    \"com_get_active_object\": [\n        \"object com_get_active_object(string progid [, int code_page ])\",\n        \"Returns a handle to an already running instance of a COM object\"\n    ],\n    \"com_load_typelib\": [\n        \"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\n        \"Loads a Typelibrary and registers its constants\"\n    ],\n    \"com_message_pump\": [\n        \"bool com_message_pump([int timeoutms])\",\n        \"Process COM messages, sleeping for up to timeoutms milliseconds\"\n    ],\n    \"com_print_typeinfo\": [\n        \"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\n        \"Print out a PHP class definition for a dispatchable interface\"\n    ],\n    \"compact\": [\n        \"array compact(mixed var_names [, mixed ...])\",\n        \"Creates a hash containing variables and their values\"\n    ],\n    \"compose_locale\": [\n        \"static string compose_locale($array)\",\n        \"* Creates a locale by combining the parts of locale-ID passed  * }}}\"\n    ],\n    \"confirm_extname_compiled\": [\n        \"string confirm_extname_compiled(string arg)\",\n        \"Return a string to confirm that the module is compiled in\"\n    ],\n    \"connection_aborted\": [\n        \"int connection_aborted()\",\n        \"Returns true if client disconnected\"\n    ],\n    \"connection_status\": [\n        \"int connection_status()\",\n        \"Returns the connection status bitfield\"\n    ],\n    \"constant\": [\n        \"mixed constant(string const_name)\",\n        \"Given the name of a constant this function will return the constant's associated value\"\n    ],\n    \"convert_cyr_string\": [\n        \"string convert_cyr_string(string str, string from, string to)\",\n        \"Convert from one Cyrillic character set to another\"\n    ],\n    \"convert_uudecode\": [\n        \"string convert_uudecode(string data)\",\n        \"decode a uuencoded string\"\n    ],\n    \"convert_uuencode\": [\n        \"string convert_uuencode(string data)\",\n        \"uuencode a string\"\n    ],\n    \"copy\": [\n        \"bool copy(string source_file, string destination_file [, resource context])\",\n        \"Copy a file\"\n    ],\n    \"cos\": [\n        \"float cos(float number)\",\n        \"Returns the cosine of the number in radians\"\n    ],\n    \"cosh\": [\n        \"float cosh(float number)\",\n        \"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2\"\n    ],\n    \"count\": [\n        \"int count(mixed var [, int mode])\",\n        \"Count the number of elements in a variable (usually an array)\"\n    ],\n    \"count_chars\": [\n        \"mixed count_chars(string input [, int mode])\",\n        \"Returns info about what characters are used in input\"\n    ],\n    \"crc32\": [\n        \"string crc32(string str)\",\n        \"Calculate the crc32 polynomial of a string\"\n    ],\n    \"create_function\": [\n        \"string create_function(string args, string code)\",\n        \"Creates an anonymous function, and returns its name\"\n    ],\n    \"crypt\": [\n        \"string crypt(string str [, string salt])\",\n        \"Hash a string\"\n    ],\n    \"ctype_alnum\": [\n        \"bool ctype_alnum(mixed c)\",\n        \"Checks for alphanumeric character(s)\"\n    ],\n    \"ctype_alpha\": [\n        \"bool ctype_alpha(mixed c)\",\n        \"Checks for alphabetic character(s)\"\n    ],\n    \"ctype_cntrl\": [\n        \"bool ctype_cntrl(mixed c)\",\n        \"Checks for control character(s)\"\n    ],\n    \"ctype_digit\": [\n        \"bool ctype_digit(mixed c)\",\n        \"Checks for numeric character(s)\"\n    ],\n    \"ctype_graph\": [\n        \"bool ctype_graph(mixed c)\",\n        \"Checks for any printable character(s) except space\"\n    ],\n    \"ctype_lower\": [\n        \"bool ctype_lower(mixed c)\",\n        \"Checks for lowercase character(s)\"\n    ],\n    \"ctype_print\": [\n        \"bool ctype_print(mixed c)\",\n        \"Checks for printable character(s)\"\n    ],\n    \"ctype_punct\": [\n        \"bool ctype_punct(mixed c)\",\n        \"Checks for any printable character which is not whitespace or an alphanumeric character\"\n    ],\n    \"ctype_space\": [\n        \"bool ctype_space(mixed c)\",\n        \"Checks for whitespace character(s)\"\n    ],\n    \"ctype_upper\": [\n        \"bool ctype_upper(mixed c)\",\n        \"Checks for uppercase character(s)\"\n    ],\n    \"ctype_xdigit\": [\n        \"bool ctype_xdigit(mixed c)\",\n        \"Checks for character(s) representing a hexadecimal digit\"\n    ],\n    \"curl_close\": [\n        \"void curl_close(resource ch)\",\n        \"Close a cURL session\"\n    ],\n    \"curl_copy_handle\": [\n        \"resource curl_copy_handle(resource ch)\",\n        \"Copy a cURL handle along with all of it's preferences\"\n    ],\n    \"curl_errno\": [\n        \"int curl_errno(resource ch)\",\n        \"Return an integer containing the last error number\"\n    ],\n    \"curl_error\": [\n        \"string curl_error(resource ch)\",\n        \"Return a string contain the last error for the current session\"\n    ],\n    \"curl_exec\": [\n        \"bool curl_exec(resource ch)\",\n        \"Perform a cURL session\"\n    ],\n    \"curl_getinfo\": [\n        \"mixed curl_getinfo(resource ch [, int option])\",\n        \"Get information regarding a specific transfer\"\n    ],\n    \"curl_init\": [\n        \"resource curl_init([string url])\",\n        \"Initialize a cURL session\"\n    ],\n    \"curl_multi_add_handle\": [\n        \"int curl_multi_add_handle(resource mh, resource ch)\",\n        \"Add a normal cURL handle to a cURL multi handle\"\n    ],\n    \"curl_multi_close\": [\n        \"void curl_multi_close(resource mh)\",\n        \"Close a set of cURL handles\"\n    ],\n    \"curl_multi_exec\": [\n        \"int curl_multi_exec(resource mh, int &still_running)\",\n        \"Run the sub-connections of the current cURL handle\"\n    ],\n    \"curl_multi_getcontent\": [\n        \"string curl_multi_getcontent(resource ch)\",\n        \"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"\n    ],\n    \"curl_multi_info_read\": [\n        \"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\n        \"Get information about the current transfers\"\n    ],\n    \"curl_multi_init\": [\n        \"resource curl_multi_init()\",\n        \"Returns a new cURL multi handle\"\n    ],\n    \"curl_multi_remove_handle\": [\n        \"int curl_multi_remove_handle(resource mh, resource ch)\",\n        \"Remove a multi handle from a set of cURL handles\"\n    ],\n    \"curl_multi_select\": [\n        \"int curl_multi_select(resource mh[, double timeout])\",\n        \"Get all the sockets associated with the cURL extension, which can then be \\\"selected\\\"\"\n    ],\n    \"curl_setopt\": [\n        \"bool curl_setopt(resource ch, int option, mixed value)\",\n        \"Set an option for a cURL transfer\"\n    ],\n    \"curl_setopt_array\": [\n        \"bool curl_setopt_array(resource ch, array options)\",\n        \"Set an array of option for a cURL transfer\"\n    ],\n    \"curl_version\": [\n        \"array curl_version([int version])\",\n        \"Return cURL version information.\"\n    ],\n    \"current\": [\n        \"mixed current(array array_arg)\",\n        \"Return the element currently pointed to by the internal array pointer\"\n    ],\n    \"date\": [\n        \"string date(string format [, long timestamp])\",\n        \"Format a local date/time\"\n    ],\n    \"date_add\": [\n        \"DateTime date_add(DateTime object, DateInterval interval)\",\n        \"Adds an interval to the current date in object.\"\n    ],\n    \"date_create\": [\n        \"DateTime date_create([string time[, DateTimeZone object]])\",\n        \"Returns new DateTime object\"\n    ],\n    \"date_create_from_format\": [\n        \"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\n        \"Returns new DateTime object formatted according to the specified format\"\n    ],\n    \"date_date_set\": [\n        \"DateTime date_date_set(DateTime object, long year, long month, long day)\",\n        \"Sets the date.\"\n    ],\n    \"date_default_timezone_get\": [\n        \"string date_default_timezone_get()\",\n        \"Gets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_default_timezone_set\": [\n        \"bool date_default_timezone_set(string timezone_identifier)\",\n        \"Sets the default timezone used by all date/time functions in a script\"\n    ],\n    \"date_diff\": [\n        \"DateInterval date_diff(DateTime object [, bool absolute])\",\n        \"Returns the difference between two DateTime objects.\"\n    ],\n    \"date_format\": [\n        \"string date_format(DateTime object, string format)\",\n        \"Returns date formatted according to given format\"\n    ],\n    \"date_get_last_errors\": [\n        \"array date_get_last_errors()\",\n        \"Returns the warnings and errors found while parsing a date/time string.\"\n    ],\n    \"date_interval_create_from_date_string\": [\n        \"DateInterval date_interval_create_from_date_string(string time)\",\n        \"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"\n    ],\n    \"date_interval_format\": [\n        \"string date_interval_format(DateInterval object, string format)\",\n        \"Formats the interval.\"\n    ],\n    \"date_isodate_set\": [\n        \"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\n        \"Sets the ISO date.\"\n    ],\n    \"date_modify\": [\n        \"DateTime date_modify(DateTime object, string modify)\",\n        \"Alters the timestamp.\"\n    ],\n    \"date_offset_get\": [\n        \"long date_offset_get(DateTime object)\",\n        \"Returns the DST offset.\"\n    ],\n    \"date_parse\": [\n        \"array date_parse(string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_parse_from_format\": [\n        \"array date_parse_from_format(string format, string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_sub\": [\n        \"DateTime date_sub(DateTime object, DateInterval interval)\",\n        \"Subtracts an interval to the current date in object.\"\n    ],\n    \"date_sun_info\": [\n        \"array date_sun_info(long time, float latitude, float longitude)\",\n        \"Returns an array with information about sun set/rise and twilight begin/end\"\n    ],\n    \"date_sunrise\": [\n        \"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunrise for a given day and location\"\n    ],\n    \"date_sunset\": [\n        \"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunset for a given day and location\"\n    ],\n    \"date_time_set\": [\n        \"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\n        \"Sets the time.\"\n    ],\n    \"date_timestamp_get\": [\n        \"long date_timestamp_get(DateTime object)\",\n        \"Gets the Unix timestamp.\"\n    ],\n    \"date_timestamp_set\": [\n        \"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\n        \"Sets the date and time based on an Unix timestamp.\"\n    ],\n    \"date_timezone_get\": [\n        \"DateTimeZone date_timezone_get(DateTime object)\",\n        \"Return new DateTimeZone object relative to give DateTime\"\n    ],\n    \"date_timezone_set\": [\n        \"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\n        \"Sets the timezone for the DateTime object.\"\n    ],\n    \"datefmt_create\": [\n        \"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\n        \"* Create formatter.\"\n    ],\n    \"datefmt_format\": [\n        \"string datefmt_format( [mixed]int $args or array $args )\",\n        \"* Format the time value as a string. }}}\"\n    ],\n    \"datefmt_get_calendar\": [\n        \"string datefmt_get_calendar( IntlDateFormatter $mf )\",\n        \"* Get formatter calendar.\"\n    ],\n    \"datefmt_get_datetype\": [\n        \"string datefmt_get_datetype( IntlDateFormatter $mf )\",\n        \"* Get formatter datetype.\"\n    ],\n    \"datefmt_get_error_code\": [\n        \"int datefmt_get_error_code( IntlDateFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"datefmt_get_error_message\": [\n        \"string datefmt_get_error_message( IntlDateFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"datefmt_get_locale\": [\n        \"string datefmt_get_locale(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_get_pattern\": [\n        \"string datefmt_get_pattern( IntlDateFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"datefmt_get_timetype\": [\n        \"string datefmt_get_timetype( IntlDateFormatter $mf )\",\n        \"* Get formatter timetype.\"\n    ],\n    \"datefmt_get_timezone_id\": [\n        \"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\n        \"* Get formatter timezone_id.\"\n    ],\n    \"datefmt_isLenient\": [\n        \"string datefmt_isLenient(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_localtime\": [\n        \"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\n        \"* Parse the string $value to a localtime array  }}}\"\n    ],\n    \"datefmt_parse\": [\n        \"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\n        \"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"\n    ],\n    \"datefmt_setLenient\": [\n        \"string datefmt_setLenient(IntlDateFormatter $mf)\",\n        \"* Set formatter lenient.\"\n    ],\n    \"datefmt_set_calendar\": [\n        \"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\n        \"* Set formatter calendar.\"\n    ],\n    \"datefmt_set_pattern\": [\n        \"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"datefmt_set_timezone_id\": [\n        \"bool datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\n        \"* Set formatter timezone_id.\"\n    ],\n    \"dba_close\": [\n        \"void dba_close(resource handle)\",\n        \"Closes database\"\n    ],\n    \"dba_delete\": [\n        \"bool dba_delete(string key, resource handle)\",\n        \"Deletes the entry associated with key    If inifile: remove all other key lines\"\n    ],\n    \"dba_exists\": [\n        \"bool dba_exists(string key, resource handle)\",\n        \"Checks, if the specified key exists\"\n    ],\n    \"dba_fetch\": [\n        \"string dba_fetch(string key, [int skip ,] resource handle)\",\n        \"Fetches the data associated with key\"\n    ],\n    \"dba_firstkey\": [\n        \"string dba_firstkey(resource handle)\",\n        \"Resets the internal key pointer and returns the first key\"\n    ],\n    \"dba_handlers\": [\n        \"array dba_handlers([bool full_info])\",\n        \"List configured database handlers\"\n    ],\n    \"dba_insert\": [\n        \"bool dba_insert(string key, string value, resource handle)\",\n        \"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"\n    ],\n    \"dba_key_split\": [\n        \"array|false dba_key_split(string key)\",\n        \"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"\n    ],\n    \"dba_list\": [\n        \"array dba_list()\",\n        \"List opened databases\"\n    ],\n    \"dba_nextkey\": [\n        \"string dba_nextkey(resource handle)\",\n        \"Returns the next key\"\n    ],\n    \"dba_open\": [\n        \"resource dba_open(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode\"\n    ],\n    \"dba_optimize\": [\n        \"bool dba_optimize(resource handle)\",\n        \"Optimizes (e.g. clean up, vacuum) database\"\n    ],\n    \"dba_popen\": [\n        \"resource dba_popen(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode persistently\"\n    ],\n    \"dba_replace\": [\n        \"bool dba_replace(string key, string value, resource handle)\",\n        \"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"\n    ],\n    \"dba_sync\": [\n        \"bool dba_sync(resource handle)\",\n        \"Synchronizes database\"\n    ],\n    \"dcgettext\": [\n        \"string dcgettext(string domain_name, string msgid, long category)\",\n        \"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"\n    ],\n    \"dcngettext\": [\n        \"string dcngettext(string domain, string msgid1, string msgid2, int n, int category)\",\n        \"Plural version of dcgettext()\"\n    ],\n    \"debug_backtrace\": [\n        \"array debug_backtrace([bool provide_object])\",\n        \"Return backtrace as array\"\n    ],\n    \"debug_print_backtrace\": [\n        \"void debug_print_backtrace()\",\n        \"Prints a PHP backtrace\"\n    ],\n    \"debug_zval_dump\": [\n        \"void debug_zval_dump(mixed var)\",\n        \"Dumps a string representation of an internal Zend value to output\"\n    ],\n    \"decbin\": [\n        \"string decbin(int decimal_number)\",\n        \"Returns a string containing a binary representation of the number\"\n    ],\n    \"dechex\": [\n        \"string dechex(int decimal_number)\",\n        \"Returns a string containing a hexadecimal representation of the given number\"\n    ],\n    \"decoct\": [\n        \"string decoct(int decimal_number)\",\n        \"Returns a string containing an octal representation of the given number\"\n    ],\n    \"define\": [\n        \"bool define(string constant_name, mixed value, bool case_insensitive=false)\",\n        \"Define a new constant\"\n    ],\n    \"define_syslog_variables\": [\n        \"void define_syslog_variables()\",\n        \"Initializes all syslog-related variables\"\n    ],\n    \"defined\": [\n        \"bool defined(string constant_name)\",\n        \"Check whether a constant exists\"\n    ],\n    \"deg2rad\": [\n        \"float deg2rad(float number)\",\n        \"Converts the number in degrees to the radian equivalent\"\n    ],\n    \"dgettext\": [\n        \"string dgettext(string domain_name, string msgid)\",\n        \"Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist\"\n    ],\n    \"die\": [\n        \"void die([mixed status])\",\n        \"Output a message and terminate the current script\"\n    ],\n    \"dir\": [\n        \"object dir(string directory[, resource context])\",\n        \"Directory class with properties, handle and class and methods read, rewind and close\"\n    ],\n    \"dirname\": [\n        \"string dirname(string path)\",\n        \"Returns the directory name component of the path\"\n    ],\n    \"disk_free_space\": [\n        \"float disk_free_space(string path)\",\n        \"Get free disk space for filesystem that path is on\"\n    ],\n    \"disk_total_space\": [\n        \"float disk_total_space(string path)\",\n        \"Get total disk space for filesystem that path is on\"\n    ],\n    \"display_disabled_function\": [\n        \"void display_disabled_function()\",\n        \"Dummy function which displays an error when a disabled function is called.\"\n    ],\n    \"dl\": [\n        \"int dl(string extension_filename)\",\n        \"Load a PHP extension at runtime\"\n    ],\n    \"dngettext\": [\n        \"string dngettext(string domain, string msgid1, string msgid2, int count)\",\n        \"Plural version of dgettext()\"\n    ],\n    \"dns_check_record\": [\n        \"bool dns_check_record(string host [, string type])\",\n        \"Check DNS records corresponding to a given Internet host name or IP address\"\n    ],\n    \"dns_get_mx\": [\n        \"bool dns_get_mx(string hostname, array mxhosts [, array weight])\",\n        \"Get MX records corresponding to a given Internet host name\"\n    ],\n    \"dns_get_record\": [\n        \"array|false dns_get_record(string hostname [, int type[, array authns, array addtl]])\",\n        \"Get any Resource Record corresponding to a given Internet host name\"\n    ],\n    \"dom_attr_is_id\": [\n        \"bool dom_attr_is_id()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-isId Since: DOM Level 3\"\n    ],\n    \"dom_characterdata_append_data\": [\n        \"void dom_characterdata_append_data(string arg)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-32791A2F Since:\"\n    ],\n    \"dom_characterdata_delete_data\": [\n        \"void dom_characterdata_delete_data(int offset, int count)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7C603781 Since:\"\n    ],\n    \"dom_characterdata_insert_data\": [\n        \"void dom_characterdata_insert_data(int offset, string arg)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3EDB695F Since:\"\n    ],\n    \"dom_characterdata_replace_data\": [\n        \"void dom_characterdata_replace_data(int offset, int count, string arg)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-E5CBA7FB Since:\"\n    ],\n    \"dom_characterdata_substring_data\": [\n        \"string dom_characterdata_substring_data(int offset, int count)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6531BCCF Since:\"\n    ],\n    \"dom_document_adopt_node\": [\n        \"DOMNode dom_document_adopt_node(DOMNode source)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-adoptNode Since: DOM Level 3\"\n    ],\n    \"dom_document_create_attribute\": [\n        \"DOMAttr dom_document_create_attribute(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1084891198 Since:\"\n    ],\n    \"dom_document_create_attribute_ns\": [\n        \"DOMAttr dom_document_create_attribute_ns(string namespaceURI, string qualifiedName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_document_create_cdatasection\": [\n        \"DOMCdataSection dom_document_create_cdatasection(string data)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D26C0AF8 Since:\"\n    ],\n    \"dom_document_create_comment\": [\n        \"DOMComment dom_document_create_comment(string data)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1334481328 Since:\"\n    ],\n    \"dom_document_create_document_fragment\": [\n        \"DOMDocumentFragment dom_document_create_document_fragment()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-35CB04B5 Since:\"\n    ],\n    \"dom_document_create_element\": [\n        \"DOMElement dom_document_create_element(string tagName [, string value])\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-2141741547 Since:\"\n    ],\n    \"dom_document_create_element_ns\": [\n        \"DOMElement dom_document_create_element_ns(string namespaceURI, string qualifiedName [,string value])\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrElNS Since: DOM Level 2\"\n    ],\n    \"dom_document_create_entity_reference\": [\n        \"DOMEntityReference dom_document_create_entity_reference(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-392B75AE Since:\"\n    ],\n    \"dom_document_create_processing_instruction\": [\n        \"DOMProcessingInstruction dom_document_create_processing_instruction(string target, string data)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-135944439 Since:\"\n    ],\n    \"dom_document_create_text_node\": [\n        \"DOMText dom_document_create_text_node(string data)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1975348127 Since:\"\n    ],\n    \"dom_document_get_element_by_id\": [\n        \"DOMElement dom_document_get_element_by_id(string elementId)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBId Since: DOM Level 2\"\n    ],\n    \"dom_document_get_elements_by_tag_name\": [\n        \"DOMNodeList dom_document_get_elements_by_tag_name(string tagname)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C9094 Since:\"\n    ],\n    \"dom_document_get_elements_by_tag_name_ns\": [\n        \"DOMNodeList dom_document_get_elements_by_tag_name_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBTNNS Since: DOM Level 2\"\n    ],\n    \"dom_document_import_node\": [\n        \"DOMNode dom_document_import_node(DOMNode importedNode, bool deep)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Core-Document-importNode Since: DOM Level 2\"\n    ],\n    \"dom_document_load\": [\n        \"DOMNode dom_document_load(string source [, int options])\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-load Since: DOM Level 3\"\n    ],\n    \"dom_document_load_html\": [\n        \"DOMNode dom_document_load_html(string source)\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_load_html_file\": [\n        \"DOMNode dom_document_load_html_file(string source)\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_loadxml\": [\n        \"DOMNode dom_document_loadxml(string source [, int options])\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-loadXML Since: DOM Level 3\"\n    ],\n    \"dom_document_normalize_document\": [\n        \"void dom_document_normalize_document()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-normalizeDocument Since: DOM Level 3\"\n    ],\n    \"dom_document_relaxNG_validate_file\": [\n        \"bool dom_document_relaxNG_validate_file(string filename); */\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file\"\n    ],\n    \"dom_document_relaxNG_validate_xml\": [\n        \"bool dom_document_relaxNG_validate_xml(string source); */\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml\"\n    ],\n    \"dom_document_rename_node\": [\n        \"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"\n    ],\n    \"dom_document_save\": [\n        \"int dom_document_save(string file)\",\n        \"Convenience method to save to file\"\n    ],\n    \"dom_document_save_html\": [\n        \"string dom_document_save_html()\",\n        \"Convenience method to output as html\"\n    ],\n    \"dom_document_save_html_file\": [\n        \"int dom_document_save_html_file(string file)\",\n        \"Convenience method to save to file as html\"\n    ],\n    \"dom_document_savexml\": [\n        \"string dom_document_savexml([node n])\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"\n    ],\n    \"dom_document_schema_validate\": [\n        \"bool dom_document_schema_validate(string source); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate\"\n    ],\n    \"dom_document_schema_validate_file\": [\n        \"bool dom_document_schema_validate_file(string filename); */\",\n        \"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file\"\n    ],\n    \"dom_document_validate\": [\n        \"bool dom_document_validate()\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_xinclude\": [\n        \"int dom_document_xinclude([int options])\",\n        \"Substitutues xincludes in a DomDocument\"\n    ],\n    \"dom_domconfiguration_can_set_parameter\": [\n        \"bool dom_domconfiguration_can_set_parameter(string name, domuserdata value)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"\n    ],\n    \"dom_domconfiguration_get_parameter\": [\n        \"domdomuserdata dom_domconfiguration_get_parameter(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:\"\n    ],\n    \"dom_domconfiguration_set_parameter\": [\n        \"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:\"\n    ],\n    \"dom_domerrorhandler_handle_error\": [\n        \"dom_bool dom_domerrorhandler_handle_error(domerror error)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"\n    ],\n    \"dom_domimplementation_create_document\": [\n        \"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_create_document_type\": [\n        \"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_get_feature\": [\n        \"DOMNode dom_domimplementation_get_feature(string feature, string version)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_domimplementation_has_feature\": [\n        \"bool dom_domimplementation_has_feature(string feature, string version)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:\"\n    ],\n    \"dom_domimplementationlist_item\": [\n        \"domdomimplementation dom_domimplementationlist_item(int index)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementation\": [\n        \"domdomimplementation dom_domimplementationsource_get_domimplementation(string features)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementations\": [\n        \"domimplementationlist dom_domimplementationsource_get_domimplementations(string features)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:\"\n    ],\n    \"dom_domstringlist_item\": [\n        \"domstring dom_domstringlist_item(int index)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:\"\n    ],\n    \"dom_element_get_attribute\": [\n        \"string dom_element_get_attribute(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:\"\n    ],\n    \"dom_element_get_attribute_node\": [\n        \"DOMAttr dom_element_get_attribute_node(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:\"\n    ],\n    \"dom_element_get_attribute_node_ns\": [\n        \"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_attribute_ns\": [\n        \"string dom_element_get_attribute_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_elements_by_tag_name\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:\"\n    ],\n    \"dom_element_get_elements_by_tag_name_ns\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute\": [\n        \"bool dom_element_has_attribute(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute_ns\": [\n        \"bool dom_element_has_attribute_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_remove_attribute\": [\n        \"void dom_element_remove_attribute(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"\n    ],\n    \"dom_element_remove_attribute_node\": [\n        \"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:\"\n    ],\n    \"dom_element_remove_attribute_ns\": [\n        \"void dom_element_remove_attribute_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute\": [\n        \"void dom_element_set_attribute(string name, string value)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:\"\n    ],\n    \"dom_element_set_attribute_node\": [\n        \"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:\"\n    ],\n    \"dom_element_set_attribute_node_ns\": [\n        \"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute_ns\": [\n        \"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_id_attribute\": [\n        \"void dom_element_set_id_attribute(string name, bool isId)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_node\": [\n        \"void dom_element_set_id_attribute_node(attr idAttr, bool isId)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_ns\": [\n        \"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, bool isId)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"\n    ],\n    \"dom_import_simplexml\": [\n        \"somNode dom_import_simplexml(sxeobject node)\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"dom_namednodemap_get_named_item\": [\n        \"DOMNode dom_namednodemap_get_named_item(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:\"\n    ],\n    \"dom_namednodemap_get_named_item_ns\": [\n        \"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_item\": [\n        \"DOMNode dom_namednodemap_item(int index)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item\": [\n        \"DOMNode dom_namednodemap_remove_named_item(string name)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item_ns\": [\n        \"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_set_named_item\": [\n        \"DOMNode dom_namednodemap_set_named_item(DOMNode arg)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:\"\n    ],\n    \"dom_namednodemap_set_named_item_ns\": [\n        \"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namelist_get_name\": [\n        \"string dom_namelist_get_name(int index)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:\"\n    ],\n    \"dom_namelist_get_namespace_uri\": [\n        \"string dom_namelist_get_namespace_uri(int index)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:\"\n    ],\n    \"dom_node_append_child\": [\n        \"DomNode dom_node_append_child(DomNode newChild)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:\"\n    ],\n    \"dom_node_clone_node\": [\n        \"DomNode dom_node_clone_node(bool deep)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"\n    ],\n    \"dom_node_compare_document_position\": [\n        \"short dom_node_compare_document_position(DomNode other)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"\n    ],\n    \"dom_node_get_feature\": [\n        \"DomNode dom_node_get_feature(string feature, string version)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_node_get_user_data\": [\n        \"mixed dom_node_get_user_data(string key)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"\n    ],\n    \"dom_node_has_attributes\": [\n        \"bool dom_node_has_attributes()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"\n    ],\n    \"dom_node_has_child_nodes\": [\n        \"bool dom_node_has_child_nodes()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:\"\n    ],\n    \"dom_node_insert_before\": [\n        \"domnode dom_node_insert_before(DomNode newChild, DomNode refChild)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:\"\n    ],\n    \"dom_node_is_default_namespace\": [\n        \"bool dom_node_is_default_namespace(string namespaceURI)\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"\n    ],\n    \"dom_node_is_equal_node\": [\n        \"bool dom_node_is_equal_node(DomNode arg)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_same_node\": [\n        \"bool dom_node_is_same_node(DomNode other)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_supported\": [\n        \"bool dom_node_is_supported(string feature, string version)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"\n    ],\n    \"dom_node_lookup_namespace_uri\": [\n        \"string dom_node_lookup_namespace_uri(string prefix)\",\n        \"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"\n    ],\n    \"dom_node_lookup_prefix\": [\n        \"string dom_node_lookup_prefix(string namespaceURI)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"\n    ],\n    \"dom_node_normalize\": [\n        \"void dom_node_normalize()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:\"\n    ],\n    \"dom_node_remove_child\": [\n        \"DomNode dom_node_remove_child(DomNode oldChild)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:\"\n    ],\n    \"dom_node_replace_child\": [\n        \"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:\"\n    ],\n    \"dom_node_set_user_data\": [\n        \"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"\n    ],\n    \"dom_nodelist_item\": [\n        \"DOMNode dom_nodelist_item(int index)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:\"\n    ],\n    \"dom_string_extend_find_offset16\": [\n        \"int dom_string_extend_find_offset16(int offset32)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"\n    ],\n    \"dom_string_extend_find_offset32\": [\n        \"int dom_string_extend_find_offset32(int offset16)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"\n    ],\n    \"dom_text_is_whitespace_in_element_content\": [\n        \"bool dom_text_is_whitespace_in_element_content()\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"\n    ],\n    \"dom_text_replace_whole_text\": [\n        \"DOMText dom_text_replace_whole_text(string content)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"\n    ],\n    \"dom_text_split_text\": [\n        \"DOMText dom_text_split_text(int offset)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:\"\n    ],\n    \"dom_userdatahandler_handle\": [\n        \"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst)\",\n        \"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:\"\n    ],\n    \"dom_xpath_evaluate\": [\n        \"mixed dom_xpath_evaluate(string expr [,DOMNode context])\",\n        \"\"\n    ],\n    \"dom_xpath_query\": [\n        \"DOMNodeList dom_xpath_query(string expr [,DOMNode context])\",\n        \"\"\n    ],\n    \"dom_xpath_register_ns\": [\n        \"bool dom_xpath_register_ns(string prefix, string uri)\",\n        \"\"\n    ],\n    \"dom_xpath_register_php_functions\": [\n        \"void dom_xpath_register_php_functions()\",\n        \"\"\n    ],\n    \"each\": [\n        \"array each(array arr)\",\n        \"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"\n    ],\n    \"easter_date\": [\n        \"int easter_date([int year])\",\n        \"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"\n    ],\n    \"easter_days\": [\n        \"int easter_days([int year, [int method]])\",\n        \"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"\n    ],\n    \"echo\": [\n        \"void echo(string arg1 [, string ...])\",\n        \"Output one or more strings\"\n    ],\n    \"empty\": [\n        \"bool empty(mixed var)\",\n        \"Determine whether a variable is empty\"\n    ],\n    \"enchant_broker_describe\": [\n        \"array enchant_broker_describe(resource broker)\",\n        \"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"\n    ],\n    \"enchant_broker_dict_exists\": [\n        \"bool enchant_broker_dict_exists(resource broker, string tag)\",\n        \"Whether a dictionary exists or not. Using non-empty tag\"\n    ],\n    \"enchant_broker_free\": [\n        \"bool enchant_broker_free(resource broker)\",\n        \"Destroys the broker object and its dictionnaries\"\n    ],\n    \"enchant_broker_free_dict\": [\n        \"resource enchant_broker_free_dict(resource dict)\",\n        \"Free the dictionary resource\"\n    ],\n    \"enchant_broker_get_dict_path\": [\n        \"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\n        \"Get the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_get_error\": [\n        \"string enchant_broker_get_error(resource broker)\",\n        \"Returns the last error of the broker\"\n    ],\n    \"enchant_broker_init\": [\n        \"resource enchant_broker_init()\",\n        \"create a new broker object capable of requesting\"\n    ],\n    \"enchant_broker_list_dicts\": [\n        \"string enchant_broker_list_dicts(resource broker)\",\n        \"Lists the dictionaries available for the given broker\"\n    ],\n    \"enchant_broker_request_dict\": [\n        \"resource enchant_broker_request_dict(resource broker, string tag)\",\n        \"create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\\\"en_US\\\", \\\"de_DE\\\", ...)\"\n    ],\n    \"enchant_broker_request_pwl_dict\": [\n        \"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\n        \"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"\n    ],\n    \"enchant_broker_set_dict_path\": [\n        \"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\n        \"Set the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_set_ordering\": [\n        \"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\n        \"Declares a preference of dictionaries to use for the language  described/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"\n    ],\n    \"enchant_dict_add_to_personal\": [\n        \"void enchant_dict_add_to_personal(resource dict, string word)\",\n        \"add 'word' to personal word list\"\n    ],\n    \"enchant_dict_add_to_session\": [\n        \"void enchant_dict_add_to_session(resource dict, string word)\",\n        \"add 'word' to this spell-checking session\"\n    ],\n    \"enchant_dict_check\": [\n        \"bool enchant_dict_check(resource dict, string word)\",\n        \"If the word is correctly spelled return true, otherwise return false\"\n    ],\n    \"enchant_dict_describe\": [\n        \"array enchant_dict_describe(resource dict)\",\n        \"Describes an individual dictionary 'dict'\"\n    ],\n    \"enchant_dict_get_error\": [\n        \"string enchant_dict_get_error(resource dict)\",\n        \"Returns the last error of the current spelling-session\"\n    ],\n    \"enchant_dict_is_in_session\": [\n        \"bool enchant_dict_is_in_session(resource dict, string word)\",\n        \"whether or not 'word' exists in this spelling-session\"\n    ],\n    \"enchant_dict_quick_check\": [\n        \"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\n        \"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"\n    ],\n    \"enchant_dict_store_replacement\": [\n        \"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\n        \"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"\n    ],\n    \"enchant_dict_suggest\": [\n        \"array enchant_dict_suggest(resource dict, string word)\",\n        \"Will return a list of values if any of those pre-conditions are not met.\"\n    ],\n    \"end\": [\n        \"mixed end(array array_arg)\",\n        \"Advances array argument's internal pointer to the last element and return it\"\n    ],\n    \"ereg\": [\n        \"int ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match\"\n    ],\n    \"ereg_replace\": [\n        \"string ereg_replace(string pattern, string replacement, string string)\",\n        \"Replace regular expression\"\n    ],\n    \"eregi\": [\n        \"int eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match\"\n    ],\n    \"eregi_replace\": [\n        \"string eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression\"\n    ],\n    \"error_get_last\": [\n        \"array error_get_last()\",\n        \"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"\n    ],\n    \"error_log\": [\n        \"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\n        \"Send an error message somewhere\"\n    ],\n    \"error_reporting\": [\n        \"int error_reporting([int new_error_level])\",\n        \"Return the current error_reporting level, and if an argument was passed - change to the new level\"\n    ],\n    \"escapeshellarg\": [\n        \"string escapeshellarg(string arg)\",\n        \"Quote and escape an argument for use in a shell command\"\n    ],\n    \"escapeshellcmd\": [\n        \"string escapeshellcmd(string command)\",\n        \"Escape shell metacharacters\"\n    ],\n    \"exec\": [\n        \"string exec(string command [, array &output [, int &return_value]])\",\n        \"Execute an external program\"\n    ],\n    \"exif_imagetype\": [\n        \"int exif_imagetype(string imagefile)\",\n        \"Get the type of an image\"\n    ],\n    \"exif_read_data\": [\n        \"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\n        \"Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails\"\n    ],\n    \"exif_tagname\": [\n        \"string exif_tagname(index)\",\n        \"Get headername for index or false if not defined\"\n    ],\n    \"exif_thumbnail\": [\n        \"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\n        \"Reads the embedded thumbnail\"\n    ],\n    \"exit\": [\n        \"void exit([mixed status])\",\n        \"Output a message and terminate the current script\"\n    ],\n    \"exp\": [\n        \"float exp(float number)\",\n        \"Returns e raised to the power of the number\"\n    ],\n    \"explode\": [\n        \"array explode(string separator, string str [, int limit])\",\n        \"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"\n    ],\n    \"expm1\": [\n        \"float expm1(float number)\",\n        \"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"extension_loaded\": [\n        \"bool extension_loaded(string extension_name)\",\n        \"Returns true if the named extension is loaded\"\n    ],\n    \"extract\": [\n        \"int extract(array var_array [, int extract_type [, string prefix]])\",\n        \"Imports variables into symbol table from an array\"\n    ],\n    \"ezmlm_hash\": [\n        \"int ezmlm_hash(string addr)\",\n        \"Calculate EZMLM list hash value.\"\n    ],\n    \"fclose\": [\n        \"bool fclose(resource fp)\",\n        \"Close an open file pointer\"\n    ],\n    \"feof\": [\n        \"bool feof(resource fp)\",\n        \"Test for end-of-file on a file pointer\"\n    ],\n    \"fflush\": [\n        \"bool fflush(resource fp)\",\n        \"Flushes output\"\n    ],\n    \"fgetc\": [\n        \"string fgetc(resource fp)\",\n        \"Get a character from file pointer\"\n    ],\n    \"fgetcsv\": [\n        \"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\n        \"Get line from file pointer and parse for CSV fields\"\n    ],\n    \"fgets\": [\n        \"string fgets(resource fp[, int length])\",\n        \"Get a line from file pointer\"\n    ],\n    \"fgetss\": [\n        \"string fgetss(resource fp [, int length [, string allowable_tags]])\",\n        \"Get a line from file pointer and strip HTML tags\"\n    ],\n    \"file\": [\n        \"array file(string filename [, int flags[, resource context]])\",\n        \"Read entire file into an array\"\n    ],\n    \"file_exists\": [\n        \"bool file_exists(string filename)\",\n        \"Returns true if filename exists\"\n    ],\n    \"file_get_contents\": [\n        \"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\n        \"Read the entire file into a string\"\n    ],\n    \"file_put_contents\": [\n        \"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\n        \"Write/Create a file with contents data and return the number of bytes written\"\n    ],\n    \"fileatime\": [\n        \"int fileatime(string filename)\",\n        \"Get last access time of file\"\n    ],\n    \"filectime\": [\n        \"int filectime(string filename)\",\n        \"Get inode modification time of file\"\n    ],\n    \"filegroup\": [\n        \"int filegroup(string filename)\",\n        \"Get file group\"\n    ],\n    \"fileinode\": [\n        \"int fileinode(string filename)\",\n        \"Get file inode\"\n    ],\n    \"filemtime\": [\n        \"int filemtime(string filename)\",\n        \"Get last modification time of file\"\n    ],\n    \"fileowner\": [\n        \"int fileowner(string filename)\",\n        \"Get file owner\"\n    ],\n    \"fileperms\": [\n        \"int fileperms(string filename)\",\n        \"Get file permissions\"\n    ],\n    \"filesize\": [\n        \"int filesize(string filename)\",\n        \"Get file size\"\n    ],\n    \"filetype\": [\n        \"string filetype(string filename)\",\n        \"Get file type\"\n    ],\n    \"filter_has_var\": [\n        \"mixed filter_has_var(constant type, string variable_name)\",\n        \"* Returns true if the variable with the name 'name' exists in source.\"\n    ],\n    \"filter_input\": [\n        \"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\n        \"* Returns the filtered variable 'name'* from source `type`.\"\n    ],\n    \"filter_input_array\": [\n        \"mixed filter_input_array(constant type, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"filter_var\": [\n        \"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\n        \"* Returns the filtered version of the vriable.\"\n    ],\n    \"filter_var_array\": [\n        \"mixed filter_var_array(array data, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"finfo_buffer\": [\n        \"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\n        \"Return infromation about a string buffer.\"\n    ],\n    \"finfo_close\": [\n        \"resource finfo_close(resource finfo)\",\n        \"Close fileinfo resource.\"\n    ],\n    \"finfo_file\": [\n        \"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\n        \"Return information about a file.\"\n    ],\n    \"finfo_open\": [\n        \"resource finfo_open([int options [, string arg]])\",\n        \"Create a new fileinfo resource.\"\n    ],\n    \"finfo_set_flags\": [\n        \"bool finfo_set_flags(resource finfo, int options)\",\n        \"Set libmagic configuration options.\"\n    ],\n    \"floatval\": [\n        \"float floatval(mixed var)\",\n        \"Get the float value of a variable\"\n    ],\n    \"flock\": [\n        \"bool flock(resource fp, int operation [, int &wouldblock])\",\n        \"Portable file locking\"\n    ],\n    \"floor\": [\n        \"float floor(float number)\",\n        \"Returns the next lowest integer value from the number\"\n    ],\n    \"flush\": [\n        \"void flush()\",\n        \"Flush the output buffer\"\n    ],\n    \"fmod\": [\n        \"float fmod(float x, float y)\",\n        \"Returns the remainder of dividing x by y as a float\"\n    ],\n    \"fnmatch\": [\n        \"bool fnmatch(string pattern, string filename [, int flags])\",\n        \"Match filename against pattern\"\n    ],\n    \"fopen\": [\n        \"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\n        \"Open a file or a URL and return a file pointer\"\n    ],\n    \"forward_static_call\": [\n        \"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"fpassthru\": [\n        \"int fpassthru(resource fp)\",\n        \"Output all remaining data from a file pointer\"\n    ],\n    \"fprintf\": [\n        \"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"fputcsv\": [\n        \"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\n        \"Format line as CSV and write to file pointer\"\n    ],\n    \"fread\": [\n        \"string fread(resource fp, int length)\",\n        \"Binary-safe file read\"\n    ],\n    \"frenchtojd\": [\n        \"int frenchtojd(int month, int day, int year)\",\n        \"Converts a french republic calendar date to julian day count\"\n    ],\n    \"fscanf\": [\n        \"mixed fscanf(resource stream, string format [, string ...])\",\n        \"Implements a mostly ANSI compatible fscanf()\"\n    ],\n    \"fseek\": [\n        \"int fseek(resource fp, int offset [, int whence])\",\n        \"Seek on a file pointer\"\n    ],\n    \"fsockopen\": [\n        \"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open Internet or Unix domain socket connection\"\n    ],\n    \"fstat\": [\n        \"array fstat(resource fp)\",\n        \"Stat() on a filehandle\"\n    ],\n    \"ftell\": [\n        \"int ftell(resource fp)\",\n        \"Get file pointer's read/write position\"\n    ],\n    \"ftok\": [\n        \"int ftok(string pathname, string proj)\",\n        \"Convert a pathname and a project identifier to a System V IPC key\"\n    ],\n    \"ftp_alloc\": [\n        \"bool ftp_alloc(resource stream, int size[, &response])\",\n        \"Attempt to allocate space on the remote FTP server\"\n    ],\n    \"ftp_cdup\": [\n        \"bool ftp_cdup(resource stream)\",\n        \"Changes to the parent directory\"\n    ],\n    \"ftp_chdir\": [\n        \"bool ftp_chdir(resource stream, string directory)\",\n        \"Changes directories\"\n    ],\n    \"ftp_chmod\": [\n        \"int ftp_chmod(resource stream, int mode, string filename)\",\n        \"Sets permissions on a file\"\n    ],\n    \"ftp_close\": [\n        \"bool ftp_close(resource stream)\",\n        \"Closes the FTP stream\"\n    ],\n    \"ftp_connect\": [\n        \"resource ftp_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP stream\"\n    ],\n    \"ftp_delete\": [\n        \"bool ftp_delete(resource stream, string file)\",\n        \"Deletes a file\"\n    ],\n    \"ftp_exec\": [\n        \"bool ftp_exec(resource stream, string command)\",\n        \"Requests execution of a program on the FTP server\"\n    ],\n    \"ftp_fget\": [\n        \"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server and writes it to an open file\"\n    ],\n    \"ftp_fput\": [\n        \"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server\"\n    ],\n    \"ftp_get\": [\n        \"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server and writes it to a local file\"\n    ],\n    \"ftp_get_option\": [\n        \"mixed ftp_get_option(resource stream, int option)\",\n        \"Gets an FTP option\"\n    ],\n    \"ftp_login\": [\n        \"bool ftp_login(resource stream, string username, string password)\",\n        \"Logs into the FTP server\"\n    ],\n    \"ftp_mdtm\": [\n        \"int ftp_mdtm(resource stream, string filename)\",\n        \"Returns the last modification time of the file, or -1 on error\"\n    ],\n    \"ftp_mkdir\": [\n        \"string ftp_mkdir(resource stream, string directory)\",\n        \"Creates a directory and returns the absolute path for the new directory or false on error\"\n    ],\n    \"ftp_nb_continue\": [\n        \"int ftp_nb_continue(resource stream)\",\n        \"Continues retrieving/sending a file nbronously\"\n    ],\n    \"ftp_nb_fget\": [\n        \"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server asynchronly and writes it to an open file\"\n    ],\n    \"ftp_nb_fput\": [\n        \"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server nbronly\"\n    ],\n    \"ftp_nb_get\": [\n        \"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server nbhronly and writes it to a local file\"\n    ],\n    \"ftp_nb_put\": [\n        \"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_nlist\": [\n        \"array ftp_nlist(resource stream, string directory)\",\n        \"Returns an array of filenames in the given directory\"\n    ],\n    \"ftp_pasv\": [\n        \"bool ftp_pasv(resource stream, bool pasv)\",\n        \"Turns passive mode on or off\"\n    ],\n    \"ftp_put\": [\n        \"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_pwd\": [\n        \"string ftp_pwd(resource stream)\",\n        \"Returns the present working directory\"\n    ],\n    \"ftp_raw\": [\n        \"array ftp_raw(resource stream, string command)\",\n        \"Sends a literal command to the FTP server\"\n    ],\n    \"ftp_rawlist\": [\n        \"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\n        \"Returns a detailed listing of a directory as an array of output lines\"\n    ],\n    \"ftp_rename\": [\n        \"bool ftp_rename(resource stream, string src, string dest)\",\n        \"Renames the given file to a new path\"\n    ],\n    \"ftp_rmdir\": [\n        \"bool ftp_rmdir(resource stream, string directory)\",\n        \"Removes a directory\"\n    ],\n    \"ftp_set_option\": [\n        \"bool ftp_set_option(resource stream, int option, mixed value)\",\n        \"Sets an FTP option\"\n    ],\n    \"ftp_site\": [\n        \"bool ftp_site(resource stream, string cmd)\",\n        \"Sends a SITE command to the server\"\n    ],\n    \"ftp_size\": [\n        \"int ftp_size(resource stream, string filename)\",\n        \"Returns the size of the file, or -1 on error\"\n    ],\n    \"ftp_ssl_connect\": [\n        \"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP-SSL stream\"\n    ],\n    \"ftp_systype\": [\n        \"string ftp_systype(resource stream)\",\n        \"Returns the system type identifier\"\n    ],\n    \"ftruncate\": [\n        \"bool ftruncate(resource fp, int size)\",\n        \"Truncate file to 'size' length\"\n    ],\n    \"func_get_arg\": [\n        \"mixed func_get_arg(int arg_num)\",\n        \"Get the $arg_num'th argument that was passed to the function\"\n    ],\n    \"func_get_args\": [\n        \"array func_get_args()\",\n        \"Get an array of the arguments that were passed to the function\"\n    ],\n    \"func_num_args\": [\n        \"int func_num_args()\",\n        \"Get the number of arguments that were passed to the function\"\n    ],\n    \"function \": [\"\", \"\"],\n    \"foreach \": [\"\", \"\"],\n    \"function_exists\": [\n        \"bool function_exists(string function_name)\",\n        \"Checks if the function exists\"\n    ],\n    \"fwrite\": [\n        \"int fwrite(resource fp, string str [, int length])\",\n        \"Binary-safe file write\"\n    ],\n    \"gc_collect_cycles\": [\n        \"int gc_collect_cycles()\",\n        \"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"\n    ],\n    \"gc_disable\": [\n        \"void gc_disable()\",\n        \"Deactivates the circular reference collector\"\n    ],\n    \"gc_enable\": [\n        \"void gc_enable()\",\n        \"Activates the circular reference collector\"\n    ],\n    \"gc_enabled\": [\n        \"void gc_enabled()\",\n        \"Returns status of the circular reference collector\"\n    ],\n    \"gd_info\": [\n        \"array gd_info()\",\n        \"\"\n    ],\n    \"getKeywords\": [\n        \"static array getKeywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array  * }}}\"\n    ],\n    \"get_browser\": [\n        \"mixed get_browser([string browser_name [, bool return_array]])\",\n        \"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"\n    ],\n    \"get_called_class\": [\n        \"string get_called_class()\",\n        \"Retrieves the \\\"Late Static Binding\\\" class name\"\n    ],\n    \"get_cfg_var\": [\n        \"mixed get_cfg_var(string option_name)\",\n        \"Get the value of a PHP configuration option\"\n    ],\n    \"get_class\": [\n        \"string get_class([object object])\",\n        \"Retrieves the class name\"\n    ],\n    \"get_class_methods\": [\n        \"array get_class_methods(mixed class)\",\n        \"Returns an array of method names for class or class instance.\"\n    ],\n    \"get_class_vars\": [\n        \"array get_class_vars(string class_name)\",\n        \"Returns an array of default properties of the class.\"\n    ],\n    \"get_current_user\": [\n        \"string get_current_user()\",\n        \"Get the name of the owner of the current PHP script\"\n    ],\n    \"get_declared_classes\": [\n        \"array get_declared_classes()\",\n        \"Returns an array of all declared classes.\"\n    ],\n    \"get_declared_interfaces\": [\n        \"array get_declared_interfaces()\",\n        \"Returns an array of all declared interfaces.\"\n    ],\n    \"get_defined_constants\": [\n        \"array get_defined_constants([bool categorize])\",\n        \"Return an array containing the names and values of all defined constants\"\n    ],\n    \"get_defined_functions\": [\n        \"array get_defined_functions()\",\n        \"Returns an array of all defined functions\"\n    ],\n    \"get_defined_vars\": [\n        \"array get_defined_vars()\",\n        \"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"\n    ],\n    \"get_display_language\": [\n        \"static string get_display_language($locale[, $in_locale = null])\",\n        \"* gets the language for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_name\": [\n        \"static string get_display_name($locale[, $in_locale = null])\",\n        \"* gets the name for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_region\": [\n        \"static string get_display_region($locale, $in_locale = null)\",\n        \"* gets the region for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_script\": [\n        \"static string get_display_script($locale, $in_locale = null)\",\n        \"* gets the script for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_extension_funcs\": [\n        \"array get_extension_funcs(string extension_name)\",\n        \"Returns an array with the names of functions belonging to the named extension\"\n    ],\n    \"get_headers\": [\n        \"array get_headers(string url[, int format])\",\n        \"fetches all the headers sent by the server in response to a HTTP request\"\n    ],\n    \"get_html_translation_table\": [\n        \"array get_html_translation_table([int table [, int quote_style]])\",\n        \"Returns the internal translation table used by htmlspecialchars and htmlentities\"\n    ],\n    \"get_include_path\": [\n        \"string get_include_path()\",\n        \"Get the current include_path configuration option\"\n    ],\n    \"get_included_files\": [\n        \"array get_included_files()\",\n        \"Returns an array with the file names that were include_once()'d\"\n    ],\n    \"get_loaded_extensions\": [\n        \"array get_loaded_extensions([bool zend_extensions])\",\n        \"Return an array containing names of loaded extensions\"\n    ],\n    \"get_magic_quotes_gpc\": [\n        \"int get_magic_quotes_gpc()\",\n        \"Get the current active configuration setting of magic_quotes_gpc\"\n    ],\n    \"get_magic_quotes_runtime\": [\n        \"int get_magic_quotes_runtime()\",\n        \"Get the current active configuration setting of magic_quotes_runtime\"\n    ],\n    \"get_meta_tags\": [\n        \"array get_meta_tags(string filename [, bool use_include_path])\",\n        \"Extracts all meta tag content attributes from a file and returns an array\"\n    ],\n    \"get_object_vars\": [\n        \"array get_object_vars(object obj)\",\n        \"Returns an array of object properties\"\n    ],\n    \"get_parent_class\": [\n        \"string get_parent_class([mixed object])\",\n        \"Retrieves the parent class name for object or class or current scope.\"\n    ],\n    \"get_resource_type\": [\n        \"string get_resource_type(resource res)\",\n        \"Get the resource type name for a given resource\"\n    ],\n    \"getallheaders\": [\n        \"array getallheaders()\",\n        \"\"\n    ],\n    \"getcwd\": [\n        \"mixed getcwd()\",\n        \"Gets the current directory\"\n    ],\n    \"getdate\": [\n        \"array getdate([int timestamp])\",\n        \"Get date/time information\"\n    ],\n    \"getenv\": [\n        \"string getenv(string varname)\",\n        \"Get the value of an environment variable\"\n    ],\n    \"gethostbyaddr\": [\n        \"string gethostbyaddr(string ip_address)\",\n        \"Get the Internet host name corresponding to a given IP address\"\n    ],\n    \"gethostbyname\": [\n        \"string gethostbyname(string hostname)\",\n        \"Get the IP address corresponding to a given Internet host name\"\n    ],\n    \"gethostbynamel\": [\n        \"array gethostbynamel(string hostname)\",\n        \"Return a list of IP addresses that a given hostname resolves to.\"\n    ],\n    \"gethostname\": [\n        \"string gethostname()\",\n        \"Get the host name of the current machine\"\n    ],\n    \"getimagesize\": [\n        \"array getimagesize(string imagefile [, array info])\",\n        \"Get the size of an image as 4-element array\"\n    ],\n    \"getlastmod\": [\n        \"int getlastmod()\",\n        \"Get time of last page modification\"\n    ],\n    \"getmygid\": [\n        \"int getmygid()\",\n        \"Get PHP script owner's GID\"\n    ],\n    \"getmyinode\": [\n        \"int getmyinode()\",\n        \"Get the inode of the current script being parsed\"\n    ],\n    \"getmypid\": [\n        \"int getmypid()\",\n        \"Get current process ID\"\n    ],\n    \"getmyuid\": [\n        \"int getmyuid()\",\n        \"Get PHP script owner's UID\"\n    ],\n    \"getopt\": [\n        \"array getopt(string options [, array longopts])\",\n        \"Get options from the command line argument list\"\n    ],\n    \"getprotobyname\": [\n        \"int getprotobyname(string name)\",\n        \"Returns protocol number associated with name as per /etc/protocols\"\n    ],\n    \"getprotobynumber\": [\n        \"string getprotobynumber(int proto)\",\n        \"Returns protocol name associated with protocol number proto\"\n    ],\n    \"getrandmax\": [\n        \"int getrandmax()\",\n        \"Returns the maximum value a random number can have\"\n    ],\n    \"getrusage\": [\n        \"array getrusage([int who])\",\n        \"Returns an array of usage statistics\"\n    ],\n    \"getservbyname\": [\n        \"int getservbyname(string service, string protocol)\",\n        \"Returns port associated with service. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"getservbyport\": [\n        \"string getservbyport(int port, string protocol)\",\n        \"Returns service name associated with port. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"gettext\": [\n        \"string gettext(string msgid)\",\n        \"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"\n    ],\n    \"gettimeofday\": [\n        \"array gettimeofday([bool get_as_float])\",\n        \"Returns the current time as array\"\n    ],\n    \"gettype\": [\n        \"string gettype(mixed var)\",\n        \"Returns the type of the variable\"\n    ],\n    \"glob\": [\n        \"array glob(string pattern [, int flags])\",\n        \"Find pathnames matching a pattern\"\n    ],\n    \"gmdate\": [\n        \"string gmdate(string format [, long timestamp])\",\n        \"Format a GMT date/time\"\n    ],\n    \"gmmktime\": [\n        \"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a GMT date\"\n    ],\n    \"gmp_abs\": [\n        \"resource gmp_abs(resource a)\",\n        \"Calculates absolute value\"\n    ],\n    \"gmp_add\": [\n        \"resource gmp_add(resource a, resource b)\",\n        \"Add a and b\"\n    ],\n    \"gmp_and\": [\n        \"resource gmp_and(resource a, resource b)\",\n        \"Calculates logical AND of a and b\"\n    ],\n    \"gmp_clrbit\": [\n        \"void gmp_clrbit(resource &a, int index)\",\n        \"Clears bit in a\"\n    ],\n    \"gmp_cmp\": [\n        \"int gmp_cmp(resource a, resource b)\",\n        \"Compares two numbers\"\n    ],\n    \"gmp_com\": [\n        \"resource gmp_com(resource a)\",\n        \"Calculates one's complement of a\"\n    ],\n    \"gmp_div_q\": [\n        \"resource gmp_div_q(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient only\"\n    ],\n    \"gmp_div_qr\": [\n        \"array gmp_div_qr(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient and reminder\"\n    ],\n    \"gmp_div_r\": [\n        \"resource gmp_div_r(resource a, resource b [, int round])\",\n        \"Divide a by b, returns reminder only\"\n    ],\n    \"gmp_divexact\": [\n        \"resource gmp_divexact(resource a, resource b)\",\n        \"Divide a by b using exact division algorithm\"\n    ],\n    \"gmp_fact\": [\n        \"resource gmp_fact(int a)\",\n        \"Calculates factorial function\"\n    ],\n    \"gmp_gcd\": [\n        \"resource gmp_gcd(resource a, resource b)\",\n        \"Computes greatest common denominator (gcd) of a and b\"\n    ],\n    \"gmp_gcdext\": [\n        \"array gmp_gcdext(resource a, resource b)\",\n        \"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"\n    ],\n    \"gmp_hamdist\": [\n        \"int gmp_hamdist(resource a, resource b)\",\n        \"Calculates hamming distance between a and b\"\n    ],\n    \"gmp_init\": [\n        \"resource gmp_init(mixed number [, int base])\",\n        \"Initializes GMP number\"\n    ],\n    \"gmp_intval\": [\n        \"int gmp_intval(resource gmpnumber)\",\n        \"Gets signed long value of GMP number\"\n    ],\n    \"gmp_invert\": [\n        \"resource gmp_invert(resource a, resource b)\",\n        \"Computes the inverse of a modulo b\"\n    ],\n    \"gmp_jacobi\": [\n        \"int gmp_jacobi(resource a, resource b)\",\n        \"Computes Jacobi symbol\"\n    ],\n    \"gmp_legendre\": [\n        \"int gmp_legendre(resource a, resource b)\",\n        \"Computes Legendre symbol\"\n    ],\n    \"gmp_mod\": [\n        \"resource gmp_mod(resource a, resource b)\",\n        \"Computes a modulo b\"\n    ],\n    \"gmp_mul\": [\n        \"resource gmp_mul(resource a, resource b)\",\n        \"Multiply a and b\"\n    ],\n    \"gmp_neg\": [\n        \"resource gmp_neg(resource a)\",\n        \"Negates a number\"\n    ],\n    \"gmp_nextprime\": [\n        \"resource gmp_nextprime(resource a)\",\n        \"Finds next prime of a\"\n    ],\n    \"gmp_or\": [\n        \"resource gmp_or(resource a, resource b)\",\n        \"Calculates logical OR of a and b\"\n    ],\n    \"gmp_perfect_square\": [\n        \"bool gmp_perfect_square(resource a)\",\n        \"Checks if a is an exact square\"\n    ],\n    \"gmp_popcount\": [\n        \"int gmp_popcount(resource a)\",\n        \"Calculates the population count of a\"\n    ],\n    \"gmp_pow\": [\n        \"resource gmp_pow(resource base, int exp)\",\n        \"Raise base to power exp\"\n    ],\n    \"gmp_powm\": [\n        \"resource gmp_powm(resource base, resource exp, resource mod)\",\n        \"Raise base to power exp and take result modulo mod\"\n    ],\n    \"gmp_prob_prime\": [\n        \"int gmp_prob_prime(resource a[, int reps])\",\n        \"Checks if a is \\\"probably prime\\\"\"\n    ],\n    \"gmp_random\": [\n        \"resource gmp_random([int limiter])\",\n        \"Gets random number\"\n    ],\n    \"gmp_scan0\": [\n        \"int gmp_scan0(resource a, int start)\",\n        \"Finds first zero bit\"\n    ],\n    \"gmp_scan1\": [\n        \"int gmp_scan1(resource a, int start)\",\n        \"Finds first non-zero bit\"\n    ],\n    \"gmp_setbit\": [\n        \"void gmp_setbit(resource &a, int index[, bool set_clear])\",\n        \"Sets or clear bit in a\"\n    ],\n    \"gmp_sign\": [\n        \"int gmp_sign(resource a)\",\n        \"Gets the sign of the number\"\n    ],\n    \"gmp_sqrt\": [\n        \"resource gmp_sqrt(resource a)\",\n        \"Takes integer part of square root of a\"\n    ],\n    \"gmp_sqrtrem\": [\n        \"array gmp_sqrtrem(resource a)\",\n        \"Square root with remainder\"\n    ],\n    \"gmp_strval\": [\n        \"string gmp_strval(resource gmpnumber [, int base])\",\n        \"Gets string representation of GMP number\"\n    ],\n    \"gmp_sub\": [\n        \"resource gmp_sub(resource a, resource b)\",\n        \"Subtract b from a\"\n    ],\n    \"gmp_testbit\": [\n        \"bool gmp_testbit(resource a, int index)\",\n        \"Tests if bit is set in a\"\n    ],\n    \"gmp_xor\": [\n        \"resource gmp_xor(resource a, resource b)\",\n        \"Calculates logical exclusive OR of a and b\"\n    ],\n    \"gmstrftime\": [\n        \"string gmstrftime(string format [, int timestamp])\",\n        \"Format a GMT/UCT time/date according to locale settings\"\n    ],\n    \"grapheme_extract\": [\n        \"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\n        \"Function to extract a sequence of default grapheme clusters\"\n    ],\n    \"grapheme_stripos\": [\n        \"int grapheme_stripos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another, ignoring case differences\"\n    ],\n    \"grapheme_stristr\": [\n        \"string grapheme_stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_strlen\": [\n        \"int grapheme_strlen(string str)\",\n        \"Get number of graphemes in a string\"\n    ],\n    \"grapheme_strpos\": [\n        \"int grapheme_strpos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"grapheme_strripos\": [\n        \"int grapheme_strripos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another, ignoring case\"\n    ],\n    \"grapheme_strrpos\": [\n        \"int grapheme_strrpos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"grapheme_strstr\": [\n        \"string grapheme_strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_substr\": [\n        \"string grapheme_substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"gregoriantojd\": [\n        \"int gregoriantojd(int month, int day, int year)\",\n        \"Converts a gregorian calendar date to julian day count\"\n    ],\n    \"gzcompress\": [\n        \"string gzcompress(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzdeflate\": [\n        \"string gzdeflate(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzencode\": [\n        \"string gzencode(string data [, int level [, int encoding_mode]])\",\n        \"GZ encode a string\"\n    ],\n    \"gzfile\": [\n        \"array gzfile(string filename [, int use_include_path])\",\n        \"Read und uncompress entire .gz-file into an array\"\n    ],\n    \"gzinflate\": [\n        \"string gzinflate(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"gzopen\": [\n        \"resource gzopen(string filename, string mode [, int use_include_path])\",\n        \"Open a .gz-file and return a .gz-file pointer\"\n    ],\n    \"gzuncompress\": [\n        \"string gzuncompress(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"hash\": [\n        \"string hash(string algo, string data[, bool raw_output = false])\",\n        \"Generate a hash of a given input string Returns lowercase hexits by default\"\n    ],\n    \"hash_algos\": [\n        \"array hash_algos()\",\n        \"Return a list of registered hashing algorithms\"\n    ],\n    \"hash_copy\": [\n        \"resource hash_copy(resource context)\",\n        \"Copy hash resource\"\n    ],\n    \"hash_file\": [\n        \"string hash_file(string algo, string filename[, bool raw_output = false])\",\n        \"Generate a hash of a given file Returns lowercase hexits by default\"\n    ],\n    \"hash_final\": [\n        \"string hash_final(resource context[, bool raw_output=false])\",\n        \"Output resulting digest\"\n    ],\n    \"hash_hmac\": [\n        \"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_hmac_file\": [\n        \"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_init\": [\n        \"resource hash_init(string algo[, int options, string key])\",\n        \"Initialize a hashing context\"\n    ],\n    \"hash_update\": [\n        \"bool hash_update(resource context, string data)\",\n        \"Pump data into the hashing algorithm\"\n    ],\n    \"hash_update_file\": [\n        \"bool hash_update_file(resource context, string filename[, resource context])\",\n        \"Pump data into the hashing algorithm from a file\"\n    ],\n    \"hash_update_stream\": [\n        \"int hash_update_stream(resource context, resource handle[, integer length])\",\n        \"Pump data into the hashing algorithm from an open stream\"\n    ],\n    \"header\": [\n        \"void header(string header [, bool replace, [int http_response_code]])\",\n        \"Sends a raw HTTP header\"\n    ],\n    \"header_remove\": [\n        \"void header_remove([string name])\",\n        \"Removes an HTTP header previously set using header()\"\n    ],\n    \"headers_list\": [\n        \"array headers_list()\",\n        \"Return list of headers to be sent / already sent\"\n    ],\n    \"headers_sent\": [\n        \"bool headers_sent([string &$file [, int &$line]])\",\n        \"Returns true if headers have already been sent, false otherwise\"\n    ],\n    \"hebrev\": [\n        \"string hebrev(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text\"\n    ],\n    \"hebrevc\": [\n        \"string hebrevc(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text with newline conversion\"\n    ],\n    \"hexdec\": [\n        \"int hexdec(string hexadecimal_number)\",\n        \"Returns the decimal equivalent of the hexadecimal number\"\n    ],\n    \"highlight_file\": [\n        \"bool highlight_file(string file_name [, bool return] )\",\n        \"Syntax highlight a source file\"\n    ],\n    \"highlight_string\": [\n        \"bool highlight_string(string string [, bool return] )\",\n        \"Syntax highlight a string or optionally return it\"\n    ],\n    \"html_entity_decode\": [\n        \"string html_entity_decode(string string [, int quote_style][, string charset])\",\n        \"Convert all HTML entities to their applicable characters\"\n    ],\n    \"htmlentities\": [\n        \"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert all applicable characters to HTML entities\"\n    ],\n    \"htmlspecialchars\": [\n        \"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert special characters to HTML entities\"\n    ],\n    \"htmlspecialchars_decode\": [\n        \"string htmlspecialchars_decode(string string [, int quote_style])\",\n        \"Convert special HTML entities back to characters\"\n    ],\n    \"http_build_query\": [\n        \"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\n        \"Generates a form-encoded query string from an associative array or object.\"\n    ],\n    \"hypot\": [\n        \"float hypot(float num1, float num2)\",\n        \"Returns sqrt(num1*num1 + num2*num2)\"\n    ],\n    \"ibase_add_user\": [\n        \"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Add a user to security database\"\n    ],\n    \"ibase_affected_rows\": [\n        \"int ibase_affected_rows( [ resource link_identifier ] )\",\n        \"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"\n    ],\n    \"ibase_backup\": [\n        \"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\n        \"Initiates a backup task in the service manager and returns immediately\"\n    ],\n    \"ibase_blob_add\": [\n        \"bool ibase_blob_add(resource blob_handle, string data)\",\n        \"Add data into created blob\"\n    ],\n    \"ibase_blob_cancel\": [\n        \"bool ibase_blob_cancel(resource blob_handle)\",\n        \"Cancel creating blob\"\n    ],\n    \"ibase_blob_close\": [\n        \"string ibase_blob_close(resource blob_handle)\",\n        \"Close blob\"\n    ],\n    \"ibase_blob_create\": [\n        \"resource ibase_blob_create([resource link_identifier])\",\n        \"Create blob for adding data\"\n    ],\n    \"ibase_blob_echo\": [\n        \"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\n        \"Output blob contents to browser\"\n    ],\n    \"ibase_blob_get\": [\n        \"string ibase_blob_get(resource blob_handle, int len)\",\n        \"Get len bytes data from open blob\"\n    ],\n    \"ibase_blob_import\": [\n        \"string ibase_blob_import([ resource link_identifier, ] resource file)\",\n        \"Create blob, copy file in it, and close it\"\n    ],\n    \"ibase_blob_info\": [\n        \"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\n        \"Return blob length and other useful info\"\n    ],\n    \"ibase_blob_open\": [\n        \"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\n        \"Open blob for retrieving data parts\"\n    ],\n    \"ibase_close\": [\n        \"bool ibase_close([resource link_identifier])\",\n        \"Close an InterBase connection\"\n    ],\n    \"ibase_commit\": [\n        \"bool ibase_commit( resource link_identifier )\",\n        \"Commit transaction\"\n    ],\n    \"ibase_commit_ret\": [\n        \"bool ibase_commit_ret( resource link_identifier )\",\n        \"Commit transaction and retain the transaction context\"\n    ],\n    \"ibase_connect\": [\n        \"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a connection to an InterBase database\"\n    ],\n    \"ibase_db_info\": [\n        \"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\n        \"Request statistics about a database\"\n    ],\n    \"ibase_delete_user\": [\n        \"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Delete a user from security database\"\n    ],\n    \"ibase_drop_db\": [\n        \"bool ibase_drop_db([resource link_identifier])\",\n        \"Drop an InterBase database\"\n    ],\n    \"ibase_errcode\": [\n        \"int ibase_errcode()\",\n        \"Return error code\"\n    ],\n    \"ibase_errmsg\": [\n        \"string ibase_errmsg()\",\n        \"Return error message\"\n    ],\n    \"ibase_execute\": [\n        \"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a previously prepared query\"\n    ],\n    \"ibase_fetch_assoc\": [\n        \"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_fetch_object\": [\n        \"object ibase_fetch_object(resource result [, int fetch_flags])\",\n        \"Fetch a object from the results of a query\"\n    ],\n    \"ibase_fetch_row\": [\n        \"array ibase_fetch_row(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_field_info\": [\n        \"array ibase_field_info(resource query_result, int field_number)\",\n        \"Get information about a field\"\n    ],\n    \"ibase_free_event_handler\": [\n        \"bool ibase_free_event_handler(resource event)\",\n        \"Frees the event handler set by ibase_set_event_handler()\"\n    ],\n    \"ibase_free_query\": [\n        \"bool ibase_free_query(resource query)\",\n        \"Free memory used by a query\"\n    ],\n    \"ibase_free_result\": [\n        \"bool ibase_free_result(resource result)\",\n        \"Free the memory used by a result\"\n    ],\n    \"ibase_gen_id\": [\n        \"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\n        \"Increments the named generator and returns its new value\"\n    ],\n    \"ibase_maintain_db\": [\n        \"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\n        \"Execute a maintenance command on the database server\"\n    ],\n    \"ibase_modify_user\": [\n        \"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Modify a user in security database\"\n    ],\n    \"ibase_name_result\": [\n        \"bool ibase_name_result(resource result, string name)\",\n        \"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"\n    ],\n    \"ibase_num_fields\": [\n        \"int ibase_num_fields(resource query_result)\",\n        \"Get the number of fields in result\"\n    ],\n    \"ibase_num_params\": [\n        \"int ibase_num_params(resource query)\",\n        \"Get the number of params in a prepared query\"\n    ],\n    \"ibase_num_rows\": [\n        \"int ibase_num_rows( resource result_identifier )\",\n        \"Return the number of rows that are available in a result\"\n    ],\n    \"ibase_param_info\": [\n        \"array ibase_param_info(resource query, int field_number)\",\n        \"Get information about a parameter\"\n    ],\n    \"ibase_pconnect\": [\n        \"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a persistent connection to an InterBase database\"\n    ],\n    \"ibase_prepare\": [\n        \"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\n        \"Prepare a query for later execution\"\n    ],\n    \"ibase_query\": [\n        \"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a query\"\n    ],\n    \"ibase_restore\": [\n        \"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\n        \"Initiates a restore task in the service manager and returns immediately\"\n    ],\n    \"ibase_rollback\": [\n        \"bool ibase_rollback( resource link_identifier )\",\n        \"Rollback transaction\"\n    ],\n    \"ibase_rollback_ret\": [\n        \"bool ibase_rollback_ret( resource link_identifier )\",\n        \"Rollback transaction and retain the transaction context\"\n    ],\n    \"ibase_server_info\": [\n        \"string ibase_server_info(resource service_handle, int action)\",\n        \"Request information about a database server\"\n    ],\n    \"ibase_service_attach\": [\n        \"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\n        \"Connect to the service manager\"\n    ],\n    \"ibase_service_detach\": [\n        \"bool ibase_service_detach(resource service_handle)\",\n        \"Disconnect from the service manager\"\n    ],\n    \"ibase_set_event_handler\": [\n        \"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\n        \"Register the callback for handling each of the named events\"\n    ],\n    \"ibase_trans\": [\n        \"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\n        \"Start a transaction over one or several databases\"\n    ],\n    \"ibase_wait_event\": [\n        \"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\n        \"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"\n    ],\n    \"iconv\": [\n        \"string iconv(string in_charset, string out_charset, string str)\",\n        \"Returns str converted to the out_charset character set\"\n    ],\n    \"iconv_get_encoding\": [\n        \"mixed iconv_get_encoding([string type])\",\n        \"Get internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_mime_decode\": [\n        \"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\n        \"Decodes a mime header field\"\n    ],\n    \"iconv_mime_decode_headers\": [\n        \"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\n        \"Decodes multiple mime header fields\"\n    ],\n    \"iconv_mime_encode\": [\n        \"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\n        \"Composes a mime header field with field_name and field_value in a specified scheme\"\n    ],\n    \"iconv_set_encoding\": [\n        \"bool iconv_set_encoding(string type, string charset)\",\n        \"Sets internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_strlen\": [\n        \"int iconv_strlen(string str [, string charset])\",\n        \"Returns the character count of str\"\n    ],\n    \"iconv_strpos\": [\n        \"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\n        \"Finds position of first occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_strrpos\": [\n        \"int iconv_strrpos(string haystack, string needle [, string charset])\",\n        \"Finds position of last occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_substr\": [\n        \"string iconv_substr(string str, int offset, [int length, string charset])\",\n        \"Returns specified part of a string\"\n    ],\n    \"idate\": [\n        \"int idate(string format [, int timestamp])\",\n        \"Format a local time/date as integer\"\n    ],\n    \"idn_to_ascii\": [\n        \"int idn_to_ascii(string domain[, int options])\",\n        \"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"\n    ],\n    \"idn_to_utf8\": [\n        \"int idn_to_utf8(string domain[, int options])\",\n        \"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"\n    ],\n    \"ignore_user_abort\": [\n        \"int ignore_user_abort([string value])\",\n        \"Set whether we want to ignore a user abort event or not\"\n    ],\n    \"image2wbmp\": [\n        \"bool image2wbmp(resource im [, string filename [, int threshold]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"image_type_to_extension\": [\n        \"string image_type_to_extension(int imagetype [, bool include_dot])\",\n        \"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"image_type_to_mime_type\": [\n        \"string image_type_to_mime_type(int imagetype)\",\n        \"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"imagealphablending\": [\n        \"bool imagealphablending(resource im, bool on)\",\n        \"Turn alpha blending mode on or off for the given image\"\n    ],\n    \"imageantialias\": [\n        \"bool imageantialias(resource im, bool on)\",\n        \"Should antialiased functions used or not\"\n    ],\n    \"imagearc\": [\n        \"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\n        \"Draw a partial ellipse\"\n    ],\n    \"imagechar\": [\n        \"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character\"\n    ],\n    \"imagecharup\": [\n        \"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagecolorallocate\": [\n        \"int imagecolorallocate(resource im, int red, int green, int blue)\",\n        \"Allocate a color for an image\"\n    ],\n    \"imagecolorallocatealpha\": [\n        \"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Allocate a color with an alpha level.  Works for true color and palette based images\"\n    ],\n    \"imagecolorat\": [\n        \"int imagecolorat(resource im, int x, int y)\",\n        \"Get the index of the color of a pixel\"\n    ],\n    \"imagecolorclosest\": [\n        \"int imagecolorclosest(resource im, int red, int green, int blue)\",\n        \"Get the index of the closest color to the specified color\"\n    ],\n    \"imagecolorclosestalpha\": [\n        \"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find the closest matching colour with alpha transparency\"\n    ],\n    \"imagecolorclosesthwb\": [\n        \"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\n        \"Get the index of the color which has the hue, white and blackness nearest to the given color\"\n    ],\n    \"imagecolordeallocate\": [\n        \"bool imagecolordeallocate(resource im, int index)\",\n        \"De-allocate a color for an image\"\n    ],\n    \"imagecolorexact\": [\n        \"int imagecolorexact(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color\"\n    ],\n    \"imagecolorexactalpha\": [\n        \"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find exact match for colour with transparency\"\n    ],\n    \"imagecolormatch\": [\n        \"bool imagecolormatch(resource im1, resource im2)\",\n        \"Makes the colors of the palette version of an image more closely match the true color version\"\n    ],\n    \"imagecolorresolve\": [\n        \"int imagecolorresolve(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color or its closest possible alternative\"\n    ],\n    \"imagecolorresolvealpha\": [\n        \"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\"\n    ],\n    \"imagecolorset\": [\n        \"void imagecolorset(resource im, int col, int red, int green, int blue)\",\n        \"Set the color for the specified palette index\"\n    ],\n    \"imagecolorsforindex\": [\n        \"array imagecolorsforindex(resource im, int col)\",\n        \"Get the colors for an index\"\n    ],\n    \"imagecolorstotal\": [\n        \"int imagecolorstotal(resource im)\",\n        \"Find out the number of colors in an image's palette\"\n    ],\n    \"imagecolortransparent\": [\n        \"int imagecolortransparent(resource im [, int col])\",\n        \"Define a color as transparent\"\n    ],\n    \"imageconvolution\": [\n        \"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\n        \"Apply a 3x3 convolution matrix, using coefficient div and offset\"\n    ],\n    \"imagecopy\": [\n        \"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\n        \"Copy part of an image\"\n    ],\n    \"imagecopymerge\": [\n        \"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopymergegray\": [\n        \"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopyresampled\": [\n        \"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image using resampling to help ensure clarity\"\n    ],\n    \"imagecopyresized\": [\n        \"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image\"\n    ],\n    \"imagecreate\": [\n        \"resource imagecreate(int x_size, int y_size)\",\n        \"Create a new image\"\n    ],\n    \"imagecreatefromgd\": [\n        \"resource imagecreatefromgd(string filename)\",\n        \"Create a new image from GD file or URL\"\n    ],\n    \"imagecreatefromgd2\": [\n        \"resource imagecreatefromgd2(string filename)\",\n        \"Create a new image from GD2 file or URL\"\n    ],\n    \"imagecreatefromgd2part\": [\n        \"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\n        \"Create a new image from a given part of GD2 file or URL\"\n    ],\n    \"imagecreatefromgif\": [\n        \"resource imagecreatefromgif(string filename)\",\n        \"Create a new image from GIF file or URL\"\n    ],\n    \"imagecreatefromjpeg\": [\n        \"resource imagecreatefromjpeg(string filename)\",\n        \"Create a new image from JPEG file or URL\"\n    ],\n    \"imagecreatefrompng\": [\n        \"resource imagecreatefrompng(string filename)\",\n        \"Create a new image from PNG file or URL\"\n    ],\n    \"imagecreatefromstring\": [\n        \"resource imagecreatefromstring(string image)\",\n        \"Create a new image from the image stream in the string\"\n    ],\n    \"imagecreatefromwbmp\": [\n        \"resource imagecreatefromwbmp(string filename)\",\n        \"Create a new image from WBMP file or URL\"\n    ],\n    \"imagecreatefromxbm\": [\n        \"resource imagecreatefromxbm(string filename)\",\n        \"Create a new image from XBM file or URL\"\n    ],\n    \"imagecreatefromxpm\": [\n        \"resource imagecreatefromxpm(string filename)\",\n        \"Create a new image from XPM file or URL\"\n    ],\n    \"imagecreatetruecolor\": [\n        \"resource imagecreatetruecolor(int x_size, int y_size)\",\n        \"Create a new true color image\"\n    ],\n    \"imagedashedline\": [\n        \"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a dashed line\"\n    ],\n    \"imagedestroy\": [\n        \"bool imagedestroy(resource im)\",\n        \"Destroy an image\"\n    ],\n    \"imageellipse\": [\n        \"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefill\": [\n        \"bool imagefill(resource im, int x, int y, int col)\",\n        \"Flood fill\"\n    ],\n    \"imagefilledarc\": [\n        \"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\n        \"Draw a filled partial ellipse\"\n    ],\n    \"imagefilledellipse\": [\n        \"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefilledpolygon\": [\n        \"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a filled polygon\"\n    ],\n    \"imagefilledrectangle\": [\n        \"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a filled rectangle\"\n    ],\n    \"imagefilltoborder\": [\n        \"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\n        \"Flood fill to specific color\"\n    ],\n    \"imagefilter\": [\n        \"bool imagefilter(resource src_im, int filtertype, [args] )\",\n        \"Applies Filter an image using a custom angle\"\n    ],\n    \"imagefontheight\": [\n        \"int imagefontheight(int font)\",\n        \"Get font height\"\n    ],\n    \"imagefontwidth\": [\n        \"int imagefontwidth(int font)\",\n        \"Get font width\"\n    ],\n    \"imageftbbox\": [\n        \"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\n        \"Give the bounding box of a text using fonts via freetype2\"\n    ],\n    \"imagefttext\": [\n        \"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\n        \"Write text to the image using fonts via freetype2\"\n    ],\n    \"imagegammacorrect\": [\n        \"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\n        \"Apply a gamma correction to a GD image\"\n    ],\n    \"imagegd\": [\n        \"bool imagegd(resource im [, string filename])\",\n        \"Output GD image to browser or file\"\n    ],\n    \"imagegd2\": [\n        \"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\n        \"Output GD2 image to browser or file\"\n    ],\n    \"imagegif\": [\n        \"bool imagegif(resource im [, string filename])\",\n        \"Output GIF image to browser or file\"\n    ],\n    \"imagegrabscreen\": [\n        \"resource imagegrabscreen()\",\n        \"Grab a screenshot\"\n    ],\n    \"imagegrabwindow\": [\n        \"resource imagegrabwindow(int window_handle [, int client_area])\",\n        \"Grab a window or its client area using a windows handle (HWND property in COM instance)\"\n    ],\n    \"imageinterlace\": [\n        \"int imageinterlace(resource im [, int interlace])\",\n        \"Enable or disable interlace\"\n    ],\n    \"imageistruecolor\": [\n        \"bool imageistruecolor(resource im)\",\n        \"return true if the image uses truecolor\"\n    ],\n    \"imagejpeg\": [\n        \"bool imagejpeg(resource im [, string filename [, int quality]])\",\n        \"Output JPEG image to browser or file\"\n    ],\n    \"imagelayereffect\": [\n        \"bool imagelayereffect(resource im, int effect)\",\n        \"Set the alpha blending flag to use the bundled libgd layering effects\"\n    ],\n    \"imageline\": [\n        \"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a line\"\n    ],\n    \"imageloadfont\": [\n        \"int imageloadfont(string filename)\",\n        \"Load a new font\"\n    ],\n    \"imagepalettecopy\": [\n        \"void imagepalettecopy(resource dst, resource src)\",\n        \"Copy the palette from the src image onto the dst image\"\n    ],\n    \"imagepng\": [\n        \"bool imagepng(resource im [, string filename])\",\n        \"Output PNG image to browser or file\"\n    ],\n    \"imagepolygon\": [\n        \"bool imagepolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a polygon\"\n    ],\n    \"imagepsbbox\": [\n        \"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\n        \"Return the bounding box needed by a string if rasterized\"\n    ],\n    \"imagepscopyfont\": [\n        \"int imagepscopyfont(int font_index)\",\n        \"Make a copy of a font for purposes like extending or reenconding\"\n    ],\n    \"imagepsencodefont\": [\n        \"bool imagepsencodefont(resource font_index, string filename)\",\n        \"To change a fonts character encoding vector\"\n    ],\n    \"imagepsextendfont\": [\n        \"bool imagepsextendfont(resource font_index, float extend)\",\n        \"Extend or or condense if (extend < 1) a font\"\n    ],\n    \"imagepsfreefont\": [\n        \"bool imagepsfreefont(resource font_index)\",\n        \"Free memory used by a font\"\n    ],\n    \"imagepsloadfont\": [\n        \"resource imagepsloadfont(string pathname)\",\n        \"Load a new font from specified file\"\n    ],\n    \"imagepsslantfont\": [\n        \"bool imagepsslantfont(resource font_index, float slant)\",\n        \"Slant a font\"\n    ],\n    \"imagepstext\": [\n        \"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\n        \"Rasterize a string over an image\"\n    ],\n    \"imagerectangle\": [\n        \"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a rectangle\"\n    ],\n    \"imagerotate\": [\n        \"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\n        \"Rotate an image using a custom angle\"\n    ],\n    \"imagesavealpha\": [\n        \"bool imagesavealpha(resource im, bool on)\",\n        \"Include alpha channel to a saved image\"\n    ],\n    \"imagesetbrush\": [\n        \"bool imagesetbrush(resource image, resource brush)\",\n        \"Set the brush image to $brush when filling $image with the \\\"IMG_COLOR_BRUSHED\\\" color\"\n    ],\n    \"imagesetpixel\": [\n        \"bool imagesetpixel(resource im, int x, int y, int col)\",\n        \"Set a single pixel\"\n    ],\n    \"imagesetstyle\": [\n        \"bool imagesetstyle(resource im, array styles)\",\n        \"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"\n    ],\n    \"imagesetthickness\": [\n        \"bool imagesetthickness(resource im, int thickness)\",\n        \"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"\n    ],\n    \"imagesettile\": [\n        \"bool imagesettile(resource image, resource tile)\",\n        \"Set the tile image to $tile when filling $image with the \\\"IMG_COLOR_TILED\\\" color\"\n    ],\n    \"imagestring\": [\n        \"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string horizontally\"\n    ],\n    \"imagestringup\": [\n        \"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string vertically - rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagesx\": [\n        \"int imagesx(resource im)\",\n        \"Get image width\"\n    ],\n    \"imagesy\": [\n        \"int imagesy(resource im)\",\n        \"Get image height\"\n    ],\n    \"imagetruecolortopalette\": [\n        \"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\n        \"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"\n    ],\n    \"imagettfbbox\": [\n        \"array imagettfbbox(float size, float angle, string font_file, string text)\",\n        \"Give the bounding box of a text using TrueType fonts\"\n    ],\n    \"imagettftext\": [\n        \"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\n        \"Write text to the image using a TrueType font\"\n    ],\n    \"imagetypes\": [\n        \"int imagetypes()\",\n        \"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"\n    ],\n    \"imagewbmp\": [\n        \"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"imagexbm\": [\n        \"int imagexbm(int im, string filename [, int foreground])\",\n        \"Output XBM image to browser or file\"\n    ],\n    \"imap_8bit\": [\n        \"string imap_8bit(string text)\",\n        \"Convert an 8-bit string to a quoted-printable string\"\n    ],\n    \"imap_alerts\": [\n        \"array imap_alerts()\",\n        \"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"\n    ],\n    \"imap_append\": [\n        \"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\n        \"Append a new message to a specified mailbox\"\n    ],\n    \"imap_base64\": [\n        \"string imap_base64(string text)\",\n        \"Decode BASE64 encoded text\"\n    ],\n    \"imap_binary\": [\n        \"string imap_binary(string text)\",\n        \"Convert an 8bit string to a base64 string\"\n    ],\n    \"imap_body\": [\n        \"string imap_body(resource stream_id, int msg_no [, int options])\",\n        \"Read the message body\"\n    ],\n    \"imap_bodystruct\": [\n        \"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\n        \"Read the structure of a specified body section of a specific message\"\n    ],\n    \"imap_check\": [\n        \"object imap_check(resource stream_id)\",\n        \"Get mailbox properties\"\n    ],\n    \"imap_clearflag_full\": [\n        \"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Clears flags on messages\"\n    ],\n    \"imap_close\": [\n        \"bool imap_close(resource stream_id [, int options])\",\n        \"Close an IMAP stream\"\n    ],\n    \"imap_createmailbox\": [\n        \"bool imap_createmailbox(resource stream_id, string mailbox)\",\n        \"Create a new mailbox\"\n    ],\n    \"imap_delete\": [\n        \"bool imap_delete(resource stream_id, int msg_no [, int options])\",\n        \"Mark a message for deletion\"\n    ],\n    \"imap_deletemailbox\": [\n        \"bool imap_deletemailbox(resource stream_id, string mailbox)\",\n        \"Delete a mailbox\"\n    ],\n    \"imap_errors\": [\n        \"array imap_errors()\",\n        \"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"\n    ],\n    \"imap_expunge\": [\n        \"bool imap_expunge(resource stream_id)\",\n        \"Permanently delete all messages marked for deletion\"\n    ],\n    \"imap_fetch_overview\": [\n        \"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\n        \"Read an overview of the information in the headers of the given message sequence\"\n    ],\n    \"imap_fetchbody\": [\n        \"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\n        \"Get a specific body section\"\n    ],\n    \"imap_fetchheader\": [\n        \"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\n        \"Get the full unfiltered header for a message\"\n    ],\n    \"imap_fetchstructure\": [\n        \"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\n        \"Read the full structure of a message\"\n    ],\n    \"imap_gc\": [\n        \"bool imap_gc(resource stream_id, int flags)\",\n        \"This function garbage collects (purges) the cache of entries of a specific type.\"\n    ],\n    \"imap_get_quota\": [\n        \"array imap_get_quota(resource stream_id, string qroot)\",\n        \"Returns the quota set to the mailbox account qroot\"\n    ],\n    \"imap_get_quotaroot\": [\n        \"array imap_get_quotaroot(resource stream_id, string mbox)\",\n        \"Returns the quota set to the mailbox account mbox\"\n    ],\n    \"imap_getacl\": [\n        \"array imap_getacl(resource stream_id, string mailbox)\",\n        \"Gets the ACL for a given mailbox\"\n    ],\n    \"imap_getmailboxes\": [\n        \"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\n        \"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"\n    ],\n    \"imap_getsubscribed\": [\n        \"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"\n    ],\n    \"imap_headerinfo\": [\n        \"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\n        \"Read the headers of the message\"\n    ],\n    \"imap_headers\": [\n        \"array imap_headers(resource stream_id)\",\n        \"Returns headers for all messages in a mailbox\"\n    ],\n    \"imap_last_error\": [\n        \"string imap_last_error()\",\n        \"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"\n    ],\n    \"imap_list\": [\n        \"array imap_list(resource stream_id, string ref, string pattern)\",\n        \"Read the list of mailboxes\"\n    ],\n    \"imap_listscan\": [\n        \"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\n        \"Read list of mailboxes containing a certain string\"\n    ],\n    \"imap_lsub\": [\n        \"array imap_lsub(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes\"\n    ],\n    \"imap_mail\": [\n        \"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\n        \"Send an email message\"\n    ],\n    \"imap_mail_compose\": [\n        \"string imap_mail_compose(array envelope, array body)\",\n        \"Create a MIME message based on given envelope and body sections\"\n    ],\n    \"imap_mail_copy\": [\n        \"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\n        \"Copy specified message to a mailbox\"\n    ],\n    \"imap_mail_move\": [\n        \"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\n        \"Move specified message to a mailbox\"\n    ],\n    \"imap_mailboxmsginfo\": [\n        \"object imap_mailboxmsginfo(resource stream_id)\",\n        \"Returns info about the current mailbox\"\n    ],\n    \"imap_mime_header_decode\": [\n        \"array imap_mime_header_decode(string str)\",\n        \"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"\n    ],\n    \"imap_msgno\": [\n        \"int imap_msgno(resource stream_id, int unique_msg_id)\",\n        \"Get the sequence number associated with a UID\"\n    ],\n    \"imap_mutf7_to_utf8\": [\n        \"string imap_mutf7_to_utf8(string in)\",\n        \"Decode a modified UTF-7 string to UTF-8\"\n    ],\n    \"imap_num_msg\": [\n        \"int imap_num_msg(resource stream_id)\",\n        \"Gives the number of messages in the current mailbox\"\n    ],\n    \"imap_num_recent\": [\n        \"int imap_num_recent(resource stream_id)\",\n        \"Gives the number of recent messages in current mailbox\"\n    ],\n    \"imap_open\": [\n        \"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\n        \"Open an IMAP stream to a mailbox\"\n    ],\n    \"imap_ping\": [\n        \"bool imap_ping(resource stream_id)\",\n        \"Check if the IMAP stream is still active\"\n    ],\n    \"imap_qprint\": [\n        \"string imap_qprint(string text)\",\n        \"Convert a quoted-printable string to an 8-bit string\"\n    ],\n    \"imap_renamemailbox\": [\n        \"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\n        \"Rename a mailbox\"\n    ],\n    \"imap_reopen\": [\n        \"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\n        \"Reopen an IMAP stream to a new mailbox\"\n    ],\n    \"imap_rfc822_parse_adrlist\": [\n        \"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\n        \"Parses an address string\"\n    ],\n    \"imap_rfc822_parse_headers\": [\n        \"object imap_rfc822_parse_headers(string headers [, string default_host])\",\n        \"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"\n    ],\n    \"imap_rfc822_write_address\": [\n        \"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\n        \"Returns a properly formatted email address given the mailbox, host, and personal info\"\n    ],\n    \"imap_savebody\": [\n        \"bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \\\"\\\"[, int options = 0]])\",\n        \"Save a specific body section to a file\"\n    ],\n    \"imap_search\": [\n        \"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\n        \"Return a list of messages matching the given criteria\"\n    ],\n    \"imap_set_quota\": [\n        \"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\n        \"Will set the quota for qroot mailbox\"\n    ],\n    \"imap_setacl\": [\n        \"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\n        \"Sets the ACL for a given mailbox\"\n    ],\n    \"imap_setflag_full\": [\n        \"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Sets flags on messages\"\n    ],\n    \"imap_sort\": [\n        \"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\n        \"Sort an array of message headers, optionally including only messages that meet specified criteria.\"\n    ],\n    \"imap_status\": [\n        \"object imap_status(resource stream_id, string mailbox, int options)\",\n        \"Get status info from a mailbox\"\n    ],\n    \"imap_subscribe\": [\n        \"bool imap_subscribe(resource stream_id, string mailbox)\",\n        \"Subscribe to a mailbox\"\n    ],\n    \"imap_thread\": [\n        \"array imap_thread(resource stream_id [, int options])\",\n        \"Return threaded by REFERENCES tree\"\n    ],\n    \"imap_timeout\": [\n        \"mixed imap_timeout(int timeout_type [, int timeout])\",\n        \"Set or fetch imap timeout\"\n    ],\n    \"imap_uid\": [\n        \"int imap_uid(resource stream_id, int msg_no)\",\n        \"Get the unique message id associated with a standard sequential message number\"\n    ],\n    \"imap_undelete\": [\n        \"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\n        \"Remove the delete flag from a message\"\n    ],\n    \"imap_unsubscribe\": [\n        \"bool imap_unsubscribe(resource stream_id, string mailbox)\",\n        \"Unsubscribe from a mailbox\"\n    ],\n    \"imap_utf7_decode\": [\n        \"string imap_utf7_decode(string buf)\",\n        \"Decode a modified UTF-7 string\"\n    ],\n    \"imap_utf7_encode\": [\n        \"string imap_utf7_encode(string buf)\",\n        \"Encode a string in modified UTF-7\"\n    ],\n    \"imap_utf8\": [\n        \"string imap_utf8(string mime_encoded_text)\",\n        \"Convert a mime-encoded text to UTF-8\"\n    ],\n    \"imap_utf8_to_mutf7\": [\n        \"string imap_utf8_to_mutf7(string in)\",\n        \"Encode a UTF-8 string to modified UTF-7\"\n    ],\n    \"implode\": [\n        \"string implode([string glue,] array pieces)\",\n        \"Joins array elements placing glue string between items and return one string\"\n    ],\n    \"import_request_variables\": [\n        \"bool import_request_variables(string types [, string prefix])\",\n        \"Import GET/POST/Cookie variables into the global scope\"\n    ],\n    \"in_array\": [\n        \"bool in_array(mixed needle, array haystack [, bool strict])\",\n        \"Checks if the given value exists in the array\"\n    ],\n    \"include\": [\n        \"bool include(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"include_once\": [\n        \"bool include_once(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"inet_ntop\": [\n        \"string inet_ntop(string in_addr)\",\n        \"Converts a packed inet address to a human readable IP address string\"\n    ],\n    \"inet_pton\": [\n        \"string inet_pton(string ip_address)\",\n        \"Converts a human readable IP address to a packed binary string\"\n    ],\n    \"ini_get\": [\n        \"string ini_get(string varname)\",\n        \"Get a configuration option\"\n    ],\n    \"ini_get_all\": [\n        \"array ini_get_all([string extension[, bool details = true]])\",\n        \"Get all configuration options\"\n    ],\n    \"ini_restore\": [\n        \"void ini_restore(string varname)\",\n        \"Restore the value of a configuration option specified by varname\"\n    ],\n    \"ini_set\": [\n        \"string ini_set(string varname, string newvalue)\",\n        \"Set a configuration option, returns false on error and the old value of the configuration option on success\"\n    ],\n    \"interface_exists\": [\n        \"bool interface_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"intl_error_name\": [\n        \"string intl_error_name()\",\n        \"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"\n    ],\n    \"intl_get_error_code\": [\n        \"int intl_get_error_code()\",\n        \"* Get code of the last occured error.\"\n    ],\n    \"intl_get_error_message\": [\n        \"string intl_get_error_message()\",\n        \"* Get text description of the last occured error.\"\n    ],\n    \"intl_is_failure\": [\n        \"bool intl_is_failure()\",\n        \"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"\n    ],\n    \"intval\": [\n        \"int intval(mixed var [, int base])\",\n        \"Get the integer value of a variable using the optional base for the conversion\"\n    ],\n    \"ip2long\": [\n        \"int ip2long(string ip_address)\",\n        \"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"\n    ],\n    \"iptcembed\": [\n        \"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\n        \"Embed binary IPTC data into a JPEG image.\"\n    ],\n    \"iptcparse\": [\n        \"array iptcparse(string iptcdata)\",\n        \"Parse binary IPTC-data into associative array\"\n    ],\n    \"is_a\": [\n        \"bool is_a(object object, string class_name)\",\n        \"Returns true if the object is of this class or has this class as one of its parents\"\n    ],\n    \"is_array\": [\n        \"bool is_array(mixed var)\",\n        \"Returns true if variable is an array\"\n    ],\n    \"is_bool\": [\n        \"bool is_bool(mixed var)\",\n        \"Returns true if variable is a boolean\"\n    ],\n    \"is_callable\": [\n        \"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\n        \"Returns true if var is callable.\"\n    ],\n    \"is_countable\": [\n        \"bool is_countable(mixed var)\",\n        \"Returns true if var is countable, false otherwise\"\n    ],\n    \"is_dir\": [\n        \"bool is_dir(string filename)\",\n        \"Returns true if file is directory\"\n    ],\n    \"is_executable\": [\n        \"bool is_executable(string filename)\",\n        \"Returns true if file is executable\"\n    ],\n    \"is_file\": [\n        \"bool is_file(string filename)\",\n        \"Returns true if file is a regular file\"\n    ],\n    \"is_finite\": [\n        \"bool is_finite(float val)\",\n        \"Returns whether argument is finite\"\n    ],\n    \"is_float\": [\n        \"bool is_float(mixed var)\",\n        \"Returns true if variable is float point\"\n    ],\n    \"is_infinite\": [\n        \"bool is_infinite(float val)\",\n        \"Returns whether argument is infinite\"\n    ],\n    \"is_link\": [\n        \"bool is_link(string filename)\",\n        \"Returns true if file is symbolic link\"\n    ],\n    \"is_long\": [\n        \"bool is_long(mixed var)\",\n        \"Returns true if variable is a long (integer)\"\n    ],\n    \"is_nan\": [\n        \"bool is_nan(float val)\",\n        \"Returns whether argument is not a number\"\n    ],\n    \"is_null\": [\n        \"bool is_null(mixed var)\",\n        \"Returns true if variable is null\"\n    ],\n    \"is_numeric\": [\n        \"bool is_numeric(mixed value)\",\n        \"Returns true if value is a number or a numeric string\"\n    ],\n    \"is_object\": [\n        \"bool is_object(mixed var)\",\n        \"Returns true if variable is an object\"\n    ],\n    \"is_readable\": [\n        \"bool is_readable(string filename)\",\n        \"Returns true if file can be read\"\n    ],\n    \"is_resource\": [\n        \"bool is_resource(mixed var)\",\n        \"Returns true if variable is a resource\"\n    ],\n    \"is_scalar\": [\n        \"bool is_scalar(mixed value)\",\n        \"Returns true if value is a scalar\"\n    ],\n    \"is_string\": [\n        \"bool is_string(mixed var)\",\n        \"Returns true if variable is a string\"\n    ],\n    \"is_subclass_of\": [\n        \"bool is_subclass_of(object object, string class_name)\",\n        \"Returns true if the object has this class as one of its parents\"\n    ],\n    \"is_uploaded_file\": [\n        \"bool is_uploaded_file(string path)\",\n        \"Check if file was created by rfc1867 upload\"\n    ],\n    \"is_writable\": [\n        \"bool is_writable(string filename)\",\n        \"Returns true if file can be written\"\n    ],\n    \"isset\": [\n        \"bool isset(mixed var [, mixed var])\",\n        \"Determine whether a variable is set\"\n    ],\n    \"iterator_apply\": [\n        \"int iterator_apply(Traversable iterator, callable function [, array args = null)\",\n        \"Calls a function for every element in an iterator\"\n    ],\n    \"iterator_count\": [\n        \"int iterator_count(Traversable iterator)\",\n        \"Count the elements in an iterator\"\n    ],\n    \"iterator_to_array\": [\n        \"array iterator_to_array(Traversable iterator [, bool use_keys = true])\",\n        \"Copy the iterator into an array\"\n    ],\n    \"jddayofweek\": [\n        \"mixed jddayofweek(int juliandaycount [, int mode])\",\n        \"Returns name or number of day of week from julian day count\"\n    ],\n    \"jdmonthname\": [\n        \"string jdmonthname(int juliandaycount, int mode)\",\n        \"Returns name of month for julian day count\"\n    ],\n    \"jdtofrench\": [\n        \"string jdtofrench(int juliandaycount)\",\n        \"Converts a julian day count to a french republic calendar date\"\n    ],\n    \"jdtogregorian\": [\n        \"string jdtogregorian(int juliandaycount)\",\n        \"Converts a julian day count to a gregorian calendar date\"\n    ],\n    \"jdtojewish\": [\n        \"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\n        \"Converts a julian day count to a jewish calendar date\"\n    ],\n    \"jdtojulian\": [\n        \"string jdtojulian(int juliandaycount)\",\n        \"Convert a julian day count to a julian calendar date\"\n    ],\n    \"jdtounix\": [\n        \"int jdtounix(int jday)\",\n        \"Convert Julian Day to UNIX timestamp\"\n    ],\n    \"jewishtojd\": [\n        \"int jewishtojd(int month, int day, int year)\",\n        \"Converts a jewish calendar date to a julian day count\"\n    ],\n    \"join\": [\n        \"string join([string glue,] array pieces)\",\n        \"Returns a string containing a string representation of all the arrayelements in the same order, with the glue string between each element\"\n    ],\n    \"jpeg2wbmp\": [\n        \"bool jpeg2wbmp(string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert JPEG image to WBMP image\"\n    ],\n    \"json_decode\": [\n        \"mixed json_decode(string json [, bool assoc [, long depth]])\",\n        \"Decodes the JSON representation into a PHP value\"\n    ],\n    \"json_encode\": [\n        \"string json_encode(mixed data [, int options])\",\n        \"Returns the JSON representation of a value\"\n    ],\n    \"json_last_error\": [\n        \"int json_last_error()\",\n        \"Returns the error code of the last json_decode().\"\n    ],\n    \"juliantojd\": [\n        \"int juliantojd(int month, int day, int year)\",\n        \"Converts a julian calendar date to julian day count\"\n    ],\n    \"key\": [\n        \"mixed key(array array_arg)\",\n        \"Return the key of the element currently pointed to by the internal array pointer\"\n    ],\n    \"krsort\": [\n        \"bool krsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key value in reverse order\"\n    ],\n    \"ksort\": [\n        \"bool ksort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key\"\n    ],\n    \"lcfirst\": [\n        \"string lcfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"lcg_value\": [\n        \"float lcg_value()\",\n        \"Returns a value from the combined linear congruential generator\"\n    ],\n    \"lchgrp\": [\n        \"bool lchgrp(string filename, mixed group)\",\n        \"Change symlink group\"\n    ],\n    \"ldap_8859_to_t61\": [\n        \"string ldap_8859_to_t61(string value)\",\n        \"Translate 8859 characters to t61 characters\"\n    ],\n    \"ldap_add\": [\n        \"bool ldap_add(resource link, string dn, array entry)\",\n        \"Add entries to LDAP directory\"\n    ],\n    \"ldap_bind\": [\n        \"bool ldap_bind(resource link [, string dn [, string password]])\",\n        \"Bind to LDAP directory\"\n    ],\n    \"ldap_compare\": [\n        \"bool ldap_compare(resource link, string dn, string attr, string value)\",\n        \"Determine if an entry has a specific value for one of its attributes\"\n    ],\n    \"ldap_connect\": [\n        \"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\n        \"Connect to an LDAP server\"\n    ],\n    \"ldap_count_entries\": [\n        \"int ldap_count_entries(resource link, resource result)\",\n        \"Count the number of entries in a search result\"\n    ],\n    \"ldap_delete\": [\n        \"bool ldap_delete(resource link, string dn)\",\n        \"Delete an entry from a directory\"\n    ],\n    \"ldap_dn2ufn\": [\n        \"string ldap_dn2ufn(string dn)\",\n        \"Convert DN to User Friendly Naming format\"\n    ],\n    \"ldap_err2str\": [\n        \"string ldap_err2str(int errno)\",\n        \"Convert error number to error string\"\n    ],\n    \"ldap_errno\": [\n        \"int ldap_errno(resource link)\",\n        \"Get the current ldap error number\"\n    ],\n    \"ldap_error\": [\n        \"string ldap_error(resource link)\",\n        \"Get the current ldap error string\"\n    ],\n    \"ldap_explode_dn\": [\n        \"array ldap_explode_dn(string dn, int with_attrib)\",\n        \"Splits DN into its component parts\"\n    ],\n    \"ldap_first_attribute\": [\n        \"string ldap_first_attribute(resource link, resource result_entry)\",\n        \"Return first attribute\"\n    ],\n    \"ldap_first_entry\": [\n        \"resource ldap_first_entry(resource link, resource result)\",\n        \"Return first result id\"\n    ],\n    \"ldap_first_reference\": [\n        \"resource ldap_first_reference(resource link, resource result)\",\n        \"Return first reference\"\n    ],\n    \"ldap_free_result\": [\n        \"bool ldap_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"ldap_get_attributes\": [\n        \"array ldap_get_attributes(resource link, resource result_entry)\",\n        \"Get attributes from a search result entry\"\n    ],\n    \"ldap_get_dn\": [\n        \"string ldap_get_dn(resource link, resource result_entry)\",\n        \"Get the DN of a result entry\"\n    ],\n    \"ldap_get_entries\": [\n        \"array ldap_get_entries(resource link, resource result)\",\n        \"Get all result entries\"\n    ],\n    \"ldap_get_option\": [\n        \"bool ldap_get_option(resource link, int option, mixed retval)\",\n        \"Get the current value of various session-wide parameters\"\n    ],\n    \"ldap_get_values_len\": [\n        \"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\n        \"Get all values with lengths from a result entry\"\n    ],\n    \"ldap_list\": [\n        \"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Single-level search\"\n    ],\n    \"ldap_mod_add\": [\n        \"bool ldap_mod_add(resource link, string dn, array entry)\",\n        \"Add attribute values to current\"\n    ],\n    \"ldap_mod_del\": [\n        \"bool ldap_mod_del(resource link, string dn, array entry)\",\n        \"Delete attribute values\"\n    ],\n    \"ldap_mod_replace\": [\n        \"bool ldap_mod_replace(resource link, string dn, array entry)\",\n        \"Replace attribute values with new ones\"\n    ],\n    \"ldap_next_attribute\": [\n        \"string ldap_next_attribute(resource link, resource result_entry)\",\n        \"Get the next attribute in result\"\n    ],\n    \"ldap_next_entry\": [\n        \"resource ldap_next_entry(resource link, resource result_entry)\",\n        \"Get next result entry\"\n    ],\n    \"ldap_next_reference\": [\n        \"resource ldap_next_reference(resource link, resource reference_entry)\",\n        \"Get next reference\"\n    ],\n    \"ldap_parse_reference\": [\n        \"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\n        \"Extract information from reference entry\"\n    ],\n    \"ldap_parse_result\": [\n        \"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\n        \"Extract information from result\"\n    ],\n    \"ldap_read\": [\n        \"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Read an entry\"\n    ],\n    \"ldap_rename\": [\n        \"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn)\",\n        \"Modify the name of an entry\"\n    ],\n    \"ldap_sasl_bind\": [\n        \"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\n        \"Bind to LDAP directory using SASL\"\n    ],\n    \"ldap_search\": [\n        \"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Search LDAP tree under base_dn\"\n    ],\n    \"ldap_set_option\": [\n        \"bool ldap_set_option(resource link, int option, mixed newval)\",\n        \"Set the value of various session-wide parameters\"\n    ],\n    \"ldap_set_rebind_proc\": [\n        \"bool ldap_set_rebind_proc(resource link, string callback)\",\n        \"Set a callback function to do re-binds on referral chasing.\"\n    ],\n    \"ldap_sort\": [\n        \"bool ldap_sort(resource link, resource result, string sortfilter)\",\n        \"Sort LDAP result entries\"\n    ],\n    \"ldap_start_tls\": [\n        \"bool ldap_start_tls(resource link)\",\n        \"Start TLS\"\n    ],\n    \"ldap_t61_to_8859\": [\n        \"string ldap_t61_to_8859(string value)\",\n        \"Translate t61 characters to 8859 characters\"\n    ],\n    \"ldap_unbind\": [\n        \"bool ldap_unbind(resource link)\",\n        \"Unbind from LDAP directory\"\n    ],\n    \"leak\": [\n        \"void leak(int num_bytes=3)\",\n        \"Cause an intentional memory leak, for testing/debugging purposes\"\n    ],\n    \"levenshtein\": [\n        \"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\n        \"Calculate Levenshtein distance between two strings\"\n    ],\n    \"libxml_clear_errors\": [\n        \"void libxml_clear_errors()\",\n        \"Clear last error from libxml\"\n    ],\n    \"libxml_disable_entity_loader\": [\n        \"bool libxml_disable_entity_loader([bool disable])\",\n        \"Disable/Enable ability to load external entities\"\n    ],\n    \"libxml_get_errors\": [\n        \"object libxml_get_errors()\",\n        \"Retrieve array of errors\"\n    ],\n    \"libxml_get_last_error\": [\n        \"object libxml_get_last_error()\",\n        \"Retrieve last error from libxml\"\n    ],\n    \"libxml_set_streams_context\": [\n        \"void libxml_set_streams_context(resource streams_context)\",\n        \"Set the streams context for the next libxml document load or write\"\n    ],\n    \"libxml_use_internal_errors\": [\n        \"bool libxml_use_internal_errors([bool use_errors])\",\n        \"Disable libxml errors and allow user to fetch error information as needed\"\n    ],\n    \"link\": [\n        \"int link(string target, string link)\",\n        \"Create a hard link\"\n    ],\n    \"linkinfo\": [\n        \"int linkinfo(string filename)\",\n        \"Returns the st_dev field of the UNIX C stat structure describing the link\"\n    ],\n    \"litespeed_request_headers\": [\n        \"array litespeed_request_headers()\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"litespeed_response_headers\": [\n        \"array litespeed_response_headers()\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"locale_accept_from_http\": [\n        \"string locale_accept_from_http(string $http_accept)\",\n        null\n    ],\n    \"locale_canonicalize\": [\n        \"static string locale_canonicalize(Locale $loc, string $locale)\",\n        \"* @param string $locale The locale string to canonicalize\"\n    ],\n    \"locale_filter_matches\": [\n        \"bool locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\n        \"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"\n    ],\n    \"locale_get_all_variants\": [\n        \"static array locale_get_all_variants($locale)\",\n        \"* gets an array containing the list of variants, or null\"\n    ],\n    \"locale_get_default\": [\n        \"static string locale_get_default( )\",\n        \"Get default locale\"\n    ],\n    \"locale_get_keywords\": [\n        \"static array locale_get_keywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array\"\n    ],\n    \"locale_get_primary_language\": [\n        \"static string locale_get_primary_language($locale)\",\n        \"* gets the primary language for the $locale\"\n    ],\n    \"locale_get_region\": [\n        \"static string locale_get_region($locale)\",\n        \"* gets the region for the $locale\"\n    ],\n    \"locale_get_script\": [\n        \"static string locale_get_script($locale)\",\n        \"* gets the script for the $locale\"\n    ],\n    \"locale_lookup\": [\n        \"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\n        \"* Searchs the items in $langtag for the best match to the language * range\"\n    ],\n    \"locale_set_default\": [\n        \"static string locale_set_default( string $locale )\",\n        \"Set default locale\"\n    ],\n    \"localeconv\": [\n        \"array localeconv()\",\n        \"Returns numeric formatting information based on the current locale\"\n    ],\n    \"localtime\": [\n        \"array localtime([int timestamp [, bool associative_array]])\",\n        \"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"\n    ],\n    \"log\": [\n        \"float log(float number, [float base])\",\n        \"Returns the natural logarithm of the number, or the base log if base is specified\"\n    ],\n    \"log10\": [\n        \"float log10(float number)\",\n        \"Returns the base-10 logarithm of the number\"\n    ],\n    \"log1p\": [\n        \"float log1p(float number)\",\n        \"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"long2ip\": [\n        \"string long2ip(int proper_address)\",\n        \"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"\n    ],\n    \"lstat\": [\n        \"array lstat(string filename)\",\n        \"Give information about a file or symbolic link\"\n    ],\n    \"ltrim\": [\n        \"string ltrim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning of a string\"\n    ],\n    \"mail\": [\n        \"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"Send an email message\"\n    ],\n    \"max\": [\n        \"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the highest value in an array or a series of arguments\"\n    ],\n    \"mb_check_encoding\": [\n        \"bool mb_check_encoding([string var[, string encoding]])\",\n        \"Check if the string is valid for the specified encoding\"\n    ],\n    \"mb_convert_case\": [\n        \"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\n        \"Returns a case-folded version of sourcestring\"\n    ],\n    \"mb_convert_encoding\": [\n        \"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\n        \"Returns converted string in desired encoding\"\n    ],\n    \"mb_convert_kana\": [\n        \"string mb_convert_kana(string str [, string option] [, string encoding])\",\n        \"Conversion between full-width character and half-width character (Japanese)\"\n    ],\n    \"mb_convert_variables\": [\n        \"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\n        \"Converts the string resource in variables to desired encoding\"\n    ],\n    \"mb_decode_mimeheader\": [\n        \"string mb_decode_mimeheader(string string)\",\n        \"Decodes the MIME \\\"encoded-word\\\" in the string\"\n    ],\n    \"mb_decode_numericentity\": [\n        \"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts HTML numeric entities to character code\"\n    ],\n    \"mb_detect_encoding\": [\n        \"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\n        \"Encodings of the given string is returned (as a string)\"\n    ],\n    \"mb_detect_order\": [\n        \"bool|array mb_detect_order([mixed encoding-list])\",\n        \"Sets the current detect_order or Return the current detect_order as a array\"\n    ],\n    \"mb_encode_mimeheader\": [\n        \"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",\n        \"Converts the string to MIME \\\"encoded-word\\\" in the format of =?charset?(B|Q)?encoded_string?=\"\n    ],\n    \"mb_encode_numericentity\": [\n        \"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts specified characters to HTML numeric entities\"\n    ],\n    \"mb_encoding_aliases\": [\n        \"array mb_encoding_aliases(string encoding)\",\n        \"Returns an array of the aliases of a given encoding name\"\n    ],\n    \"mb_ereg\": [\n        \"int mb_ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_match\": [\n        \"bool mb_ereg_match(string pattern, string string [,string option])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_replace\": [\n        \"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\n        \"Replace regular expression for multibyte string\"\n    ],\n    \"mb_ereg_search\": [\n        \"bool mb_ereg_search([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_getpos\": [\n        \"int mb_ereg_search_getpos()\",\n        \"Get search start position\"\n    ],\n    \"mb_ereg_search_getregs\": [\n        \"array mb_ereg_search_getregs()\",\n        \"Get matched substring of the last time\"\n    ],\n    \"mb_ereg_search_init\": [\n        \"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\n        \"Initialize string and regular expression for search.\"\n    ],\n    \"mb_ereg_search_pos\": [\n        \"array mb_ereg_search_pos([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_regs\": [\n        \"array mb_ereg_search_regs([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_setpos\": [\n        \"bool mb_ereg_search_setpos(int position)\",\n        \"Set search start position\"\n    ],\n    \"mb_eregi\": [\n        \"int mb_eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match for multibyte string\"\n    ],\n    \"mb_eregi_replace\": [\n        \"string mb_eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression for multibyte string\"\n    ],\n    \"mb_get_info\": [\n        \"mixed mb_get_info([string type])\",\n        \"Returns the current settings of mbstring\"\n    ],\n    \"mb_http_input\": [\n        \"mixed mb_http_input([string type])\",\n        \"Returns the input encoding\"\n    ],\n    \"mb_http_output\": [\n        \"string mb_http_output([string encoding])\",\n        \"Sets the current output_encoding or returns the current output_encoding as a string\"\n    ],\n    \"mb_internal_encoding\": [\n        \"string mb_internal_encoding([string encoding])\",\n        \"Sets the current internal encoding or Returns the current internal encoding as a string\"\n    ],\n    \"mb_language\": [\n        \"string mb_language([string language])\",\n        \"Sets the current language or Returns the current language as a string\"\n    ],\n    \"mb_list_encodings\": [\n        \"mixed mb_list_encodings()\",\n        \"Returns an array of all supported entity encodings\"\n    ],\n    \"mb_output_handler\": [\n        \"string mb_output_handler(string contents, int status)\",\n        \"Returns string in output buffer converted to the http_output encoding\"\n    ],\n    \"mb_parse_str\": [\n        \"bool mb_parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"mb_preferred_mime_name\": [\n        \"string mb_preferred_mime_name(string encoding)\",\n        \"Return the preferred MIME name (charset) as a string\"\n    ],\n    \"mb_regex_encoding\": [\n        \"string mb_regex_encoding([string encoding])\",\n        \"Returns the current encoding for regex as a string.\"\n    ],\n    \"mb_regex_set_options\": [\n        \"string mb_regex_set_options([string options])\",\n        \"Set or get the default options for mbregex functions\"\n    ],\n    \"mb_send_mail\": [\n        \"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"*  Sends an email message with MIME scheme\"\n    ],\n    \"mb_split\": [\n        \"array mb_split(string pattern, string string [, int limit])\",\n        \"split multibyte string into array by regular expression\"\n    ],\n    \"mb_strcut\": [\n        \"string mb_strcut(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_strimwidth\": [\n        \"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\n        \"Trim the string in terminal width\"\n    ],\n    \"mb_stripos\": [\n        \"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_stristr\": [\n        \"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strlen\": [\n        \"int mb_strlen(string str [, string encoding])\",\n        \"Get character numbers of a string\"\n    ],\n    \"mb_strpos\": [\n        \"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"mb_strrchr\": [\n        \"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"mb_strrichr\": [\n        \"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another, case insensitive\"\n    ],\n    \"mb_strripos\": [\n        \"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of last occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strrpos\": [\n        \"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"mb_strstr\": [\n        \"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"mb_strtolower\": [\n        \"string mb_strtolower(string sourcestring [, string encoding])\",\n        \"*  Returns a lowercased version of sourcestring\"\n    ],\n    \"mb_strtoupper\": [\n        \"string mb_strtoupper(string sourcestring [, string encoding])\",\n        \"*  Returns a uppercased version of sourcestring\"\n    ],\n    \"mb_strwidth\": [\n        \"int mb_strwidth(string str [, string encoding])\",\n        \"Gets terminal width of a string\"\n    ],\n    \"mb_substitute_character\": [\n        \"mixed mb_substitute_character([mixed substchar])\",\n        \"Sets the current substitute_character or returns the current substitute_character\"\n    ],\n    \"mb_substr\": [\n        \"string mb_substr(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_substr_count\": [\n        \"int mb_substr_count(string haystack, string needle [, string encoding])\",\n        \"Count the number of substring occurrences\"\n    ],\n    \"mcrypt_cbc\": [\n        \"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\n        \"CBC crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_cfb\": [\n        \"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\n        \"CFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_create_iv\": [\n        \"string mcrypt_create_iv(int size, int source)\",\n        \"Create an initialization vector (IV)\"\n    ],\n    \"mcrypt_decrypt\": [\n        \"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_ecb\": [\n        \"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\n        \"ECB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_enc_get_algorithms_name\": [\n        \"string mcrypt_enc_get_algorithms_name(resource td)\",\n        \"Returns the name of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_block_size\": [\n        \"int mcrypt_enc_get_block_size(resource td)\",\n        \"Returns the block size of the cipher specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_iv_size\": [\n        \"int mcrypt_enc_get_iv_size(resource td)\",\n        \"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_key_size\": [\n        \"int mcrypt_enc_get_key_size(resource td)\",\n        \"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_modes_name\": [\n        \"string mcrypt_enc_get_modes_name(resource td)\",\n        \"Returns the name of the mode specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_supported_key_sizes\": [\n        \"array mcrypt_enc_get_supported_key_sizes(resource td)\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_enc_is_block_algorithm\": [\n        \"bool mcrypt_enc_is_block_algorithm(resource td)\",\n        \"Returns TRUE if the alrogithm is a block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_algorithm_mode\": [\n        \"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_mode\": [\n        \"bool mcrypt_enc_is_block_mode(resource td)\",\n        \"Returns TRUE if the mode outputs blocks\"\n    ],\n    \"mcrypt_enc_self_test\": [\n        \"int mcrypt_enc_self_test(resource td)\",\n        \"This function runs the self test on the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_encrypt\": [\n        \"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_generic\": [\n        \"string mcrypt_generic(resource td, string data)\",\n        \"This function encrypts the plaintext\"\n    ],\n    \"mcrypt_generic_deinit\": [\n        \"bool mcrypt_generic_deinit(resource td)\",\n        \"This function terminates encrypt specified by the descriptor td\"\n    ],\n    \"mcrypt_generic_init\": [\n        \"int mcrypt_generic_init(resource td, string key, string iv)\",\n        \"This function initializes all buffers for the specific module\"\n    ],\n    \"mcrypt_get_block_size\": [\n        \"int mcrypt_get_block_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_cipher_name\": [\n        \"string mcrypt_get_cipher_name(string cipher)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_iv_size\": [\n        \"int mcrypt_get_iv_size(string cipher, string module)\",\n        \"Get the IV size of cipher (Usually the same as the blocksize)\"\n    ],\n    \"mcrypt_get_key_size\": [\n        \"int mcrypt_get_key_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_list_algorithms\": [\n        \"array mcrypt_list_algorithms([string lib_dir])\",\n        \"List all algorithms in \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_list_modes\": [\n        \"array mcrypt_list_modes([string lib_dir])\",\n        \"List all modes \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_module_close\": [\n        \"bool mcrypt_module_close(resource td)\",\n        \"Free the descriptor td\"\n    ],\n    \"mcrypt_module_get_algo_block_size\": [\n        \"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\n        \"Returns the block size of the algorithm\"\n    ],\n    \"mcrypt_module_get_algo_key_size\": [\n        \"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\n        \"Returns the maximum supported key size of the algorithm\"\n    ],\n    \"mcrypt_module_get_supported_key_sizes\": [\n        \"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_module_is_block_algorithm\": [\n        \"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\n        \"Returns TRUE if the algorithm is a block algorithm\"\n    ],\n    \"mcrypt_module_is_block_algorithm_mode\": [\n        \"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_module_is_block_mode\": [\n        \"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode outputs blocks of bytes\"\n    ],\n    \"mcrypt_module_open\": [\n        \"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\n        \"Opens the module of the algorithm and the mode to be used\"\n    ],\n    \"mcrypt_module_self_test\": [\n        \"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",\n        \"Does a self test of the module \\\"module\\\"\"\n    ],\n    \"mcrypt_ofb\": [\n        \"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\n        \"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"md5\": [\n        \"string md5(string str, [ bool raw_output])\",\n        \"Calculate the md5 hash of a string\"\n    ],\n    \"md5_file\": [\n        \"string md5_file(string filename [, bool raw_output])\",\n        \"Calculate the md5 hash of given filename\"\n    ],\n    \"mdecrypt_generic\": [\n        \"string mdecrypt_generic(resource td, string data)\",\n        \"This function decrypts the plaintext\"\n    ],\n    \"memory_get_peak_usage\": [\n        \"int memory_get_peak_usage([real_usage])\",\n        \"Returns the peak allocated by PHP memory\"\n    ],\n    \"memory_get_usage\": [\n        \"int memory_get_usage([real_usage])\",\n        \"Returns the allocated by PHP memory\"\n    ],\n    \"metaphone\": [\n        \"string metaphone(string text[, int phones])\",\n        \"Break english phrases down into their phonemes\"\n    ],\n    \"method_exists\": [\n        \"bool method_exists(object object, string method)\",\n        \"Checks if the class method exists\"\n    ],\n    \"mhash\": [\n        \"string mhash(int hash, string data [, string key])\",\n        \"Hash data with hash\"\n    ],\n    \"mhash_count\": [\n        \"int mhash_count()\",\n        \"Gets the number of available hashes\"\n    ],\n    \"mhash_get_block_size\": [\n        \"int mhash_get_block_size(int hash)\",\n        \"Gets the block size of hash\"\n    ],\n    \"mhash_get_hash_name\": [\n        \"string mhash_get_hash_name(int hash)\",\n        \"Gets the name of hash\"\n    ],\n    \"mhash_keygen_s2k\": [\n        \"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\n        \"Generates a key using hash functions\"\n    ],\n    \"microtime\": [\n        \"mixed microtime([bool get_as_float])\",\n        \"Returns either a string or a float containing the current time in seconds and microseconds\"\n    ],\n    \"mime_content_type\": [\n        \"string mime_content_type(string filename|resource stream)\",\n        \"Return content-type for file\"\n    ],\n    \"min\": [\n        \"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the lowest value in an array or a series of arguments\"\n    ],\n    \"mkdir\": [\n        \"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\n        \"Create a directory\"\n    ],\n    \"mktime\": [\n        \"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a date\"\n    ],\n    \"money_format\": [\n        \"string money_format(string format , float value)\",\n        \"Convert monetary value(s) to string\"\n    ],\n    \"move_uploaded_file\": [\n        \"bool move_uploaded_file(string path, string new_path)\",\n        \"Move a file if and only if it was created by an upload\"\n    ],\n    \"msg_get_queue\": [\n        \"resource msg_get_queue(int key [, int perms])\",\n        \"Attach to a message queue\"\n    ],\n    \"msg_queue_exists\": [\n        \"bool msg_queue_exists(int key)\",\n        \"Check whether a message queue exists\"\n    ],\n    \"msg_receive\": [\n        \"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_remove_queue\": [\n        \"bool msg_remove_queue(resource queue)\",\n        \"Destroy the queue\"\n    ],\n    \"msg_send\": [\n        \"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_set_queue\": [\n        \"bool msg_set_queue(resource queue, array data)\",\n        \"Set information for a message queue\"\n    ],\n    \"msg_stat_queue\": [\n        \"array msg_stat_queue(resource queue)\",\n        \"Returns information about a message queue\"\n    ],\n    \"msgfmt_create\": [\n        \"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\n        \"* Create formatter.\"\n    ],\n    \"msgfmt_format\": [\n        \"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_format_message\": [\n        \"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_get_error_code\": [\n        \"int msgfmt_get_error_code( MessageFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"msgfmt_get_error_message\": [\n        \"string msgfmt_get_error_message( MessageFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"msgfmt_get_locale\": [\n        \"string msgfmt_get_locale(MessageFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"msgfmt_get_pattern\": [\n        \"string msgfmt_get_pattern( MessageFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"msgfmt_parse\": [\n        \"array msgfmt_parse( MessageFormatter $nf, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"msgfmt_set_pattern\": [\n        \"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"mssql_bind\": [\n        \"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\n        \"Adds a parameter to a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_close\": [\n        \"bool mssql_close([resource conn_id])\",\n        \"Closes a connection to a MS-SQL server\"\n    ],\n    \"mssql_connect\": [\n        \"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a connection to a MS-SQL server\"\n    ],\n    \"mssql_data_seek\": [\n        \"bool mssql_data_seek(resource result_id, int offset)\",\n        \"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"\n    ],\n    \"mssql_execute\": [\n        \"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\n        \"Executes a stored procedure on a MS-SQL server database\"\n    ],\n    \"mssql_fetch_array\": [\n        \"array mssql_fetch_array(resource result_id [, int result_type])\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_assoc\": [\n        \"array mssql_fetch_assoc(resource result_id)\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_batch\": [\n        \"int mssql_fetch_batch(resource result_index)\",\n        \"Returns the next batch of records\"\n    ],\n    \"mssql_fetch_field\": [\n        \"object mssql_fetch_field(resource result_id [, int offset])\",\n        \"Gets information about certain fields in a query result\"\n    ],\n    \"mssql_fetch_object\": [\n        \"object mssql_fetch_object(resource result_id)\",\n        \"Returns a pseudo-object of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_row\": [\n        \"array mssql_fetch_row(resource result_id)\",\n        \"Returns an array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_field_length\": [\n        \"int mssql_field_length(resource result_id [, int offset])\",\n        \"Get the length of a MS-SQL field\"\n    ],\n    \"mssql_field_name\": [\n        \"string mssql_field_name(resource result_id [, int offset])\",\n        \"Returns the name of the field given by offset in the result set given by result_id\"\n    ],\n    \"mssql_field_seek\": [\n        \"bool mssql_field_seek(resource result_id, int offset)\",\n        \"Seeks to the specified field offset\"\n    ],\n    \"mssql_field_type\": [\n        \"string mssql_field_type(resource result_id [, int offset])\",\n        \"Returns the type of a field\"\n    ],\n    \"mssql_free_result\": [\n        \"bool mssql_free_result(resource result_index)\",\n        \"Free a MS-SQL result index\"\n    ],\n    \"mssql_free_statement\": [\n        \"bool mssql_free_statement(resource result_index)\",\n        \"Free a MS-SQL statement index\"\n    ],\n    \"mssql_get_last_message\": [\n        \"string mssql_get_last_message()\",\n        \"Gets the last message from the MS-SQL server\"\n    ],\n    \"mssql_guid_string\": [\n        \"string mssql_guid_string(string binary [,bool short_format])\",\n        \"Converts a 16 byte binary GUID to a string\"\n    ],\n    \"mssql_init\": [\n        \"int mssql_init(string sp_name [, resource conn_id])\",\n        \"Initializes a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_min_error_severity\": [\n        \"void mssql_min_error_severity(int severity)\",\n        \"Sets the lower error severity\"\n    ],\n    \"mssql_min_message_severity\": [\n        \"void mssql_min_message_severity(int severity)\",\n        \"Sets the lower message severity\"\n    ],\n    \"mssql_next_result\": [\n        \"bool mssql_next_result(resource result_id)\",\n        \"Move the internal result pointer to the next result\"\n    ],\n    \"mssql_num_fields\": [\n        \"int mssql_num_fields(resource mssql_result_index)\",\n        \"Returns the number of fields fetched in from the result id specified\"\n    ],\n    \"mssql_num_rows\": [\n        \"int mssql_num_rows(resource mssql_result_index)\",\n        \"Returns the number of rows fetched in from the result id specified\"\n    ],\n    \"mssql_pconnect\": [\n        \"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a persistent connection to a MS-SQL server\"\n    ],\n    \"mssql_query\": [\n        \"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\n        \"Perform an SQL query on a MS-SQL server database\"\n    ],\n    \"mssql_result\": [\n        \"string mssql_result(resource result_id, int row, mixed field)\",\n        \"Returns the contents of one cell from a MS-SQL result set\"\n    ],\n    \"mssql_rows_affected\": [\n        \"int mssql_rows_affected(resource conn_id)\",\n        \"Returns the number of records affected by the query\"\n    ],\n    \"mssql_select_db\": [\n        \"bool mssql_select_db(string database_name [, resource conn_id])\",\n        \"Select a MS-SQL database\"\n    ],\n    \"mt_getrandmax\": [\n        \"int mt_getrandmax()\",\n        \"Returns the maximum value a random number from Mersenne Twister can have\"\n    ],\n    \"mt_rand\": [\n        \"int mt_rand([int min, int max])\",\n        \"Returns a random number from Mersenne Twister\"\n    ],\n    \"mt_srand\": [\n        \"void mt_srand([int seed])\",\n        \"Seeds Mersenne Twister random number generator\"\n    ],\n    \"mysql_affected_rows\": [\n        \"int mysql_affected_rows([int link_identifier])\",\n        \"Gets number of affected rows in previous MySQL operation\"\n    ],\n    \"mysql_client_encoding\": [\n        \"string mysql_client_encoding([int link_identifier])\",\n        \"Returns the default character set for the current connection\"\n    ],\n    \"mysql_close\": [\n        \"bool mysql_close([int link_identifier])\",\n        \"Close a MySQL connection\"\n    ],\n    \"mysql_connect\": [\n        \"resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\n        \"Opens a connection to a MySQL Server\"\n    ],\n    \"mysql_create_db\": [\n        \"bool mysql_create_db(string database_name [, int link_identifier])\",\n        \"Create a MySQL database\"\n    ],\n    \"mysql_data_seek\": [\n        \"bool mysql_data_seek(resource result, int row_number)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysql_db_query\": [\n        \"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_drop_db\": [\n        \"bool mysql_drop_db(string database_name [, int link_identifier])\",\n        \"Drops (delete) a MySQL database\"\n    ],\n    \"mysql_errno\": [\n        \"int mysql_errno([int link_identifier])\",\n        \"Returns the number of the error message from previous MySQL operation\"\n    ],\n    \"mysql_error\": [\n        \"string mysql_error([int link_identifier])\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysql_escape_string\": [\n        \"string mysql_escape_string(string to_be_escaped)\",\n        \"Escape string for mysql query\"\n    ],\n    \"mysql_fetch_array\": [\n        \"array mysql_fetch_array(resource result [, int result_type])\",\n        \"Fetch a result row as an array (associative, numeric or both)\"\n    ],\n    \"mysql_fetch_assoc\": [\n        \"array mysql_fetch_assoc(resource result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysql_fetch_field\": [\n        \"object mysql_fetch_field(resource result [, int field_offset])\",\n        \"Gets column information from a result and return as an object\"\n    ],\n    \"mysql_fetch_lengths\": [\n        \"array mysql_fetch_lengths(resource result)\",\n        \"Gets max data size of each column in a result\"\n    ],\n    \"mysql_fetch_object\": [\n        \"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysql_fetch_row\": [\n        \"array mysql_fetch_row(resource result)\",\n        \"Gets a result row as an enumerated array\"\n    ],\n    \"mysql_field_flags\": [\n        \"string mysql_field_flags(resource result, int field_offset)\",\n        \"Gets the flags associated with the specified field in a result\"\n    ],\n    \"mysql_field_len\": [\n        \"int mysql_field_len(resource result, int field_offset)\",\n        \"Returns the length of the specified field\"\n    ],\n    \"mysql_field_name\": [\n        \"string mysql_field_name(resource result, int field_index)\",\n        \"Gets the name of the specified field in a result\"\n    ],\n    \"mysql_field_seek\": [\n        \"bool mysql_field_seek(resource result, int field_offset)\",\n        \"Sets result pointer to a specific field offset\"\n    ],\n    \"mysql_field_table\": [\n        \"string mysql_field_table(resource result, int field_offset)\",\n        \"Gets name of the table the specified field is in\"\n    ],\n    \"mysql_field_type\": [\n        \"string mysql_field_type(resource result, int field_offset)\",\n        \"Gets the type of the specified field in a result\"\n    ],\n    \"mysql_free_result\": [\n        \"bool mysql_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"mysql_get_client_info\": [\n        \"string mysql_get_client_info()\",\n        \"Returns a string that represents the client library version\"\n    ],\n    \"mysql_get_host_info\": [\n        \"string mysql_get_host_info([int link_identifier])\",\n        \"Returns a string describing the type of connection in use, including the server host name\"\n    ],\n    \"mysql_get_proto_info\": [\n        \"int mysql_get_proto_info([int link_identifier])\",\n        \"Returns the protocol version used by current connection\"\n    ],\n    \"mysql_get_server_info\": [\n        \"string mysql_get_server_info([int link_identifier])\",\n        \"Returns a string that represents the server version number\"\n    ],\n    \"mysql_info\": [\n        \"string mysql_info([int link_identifier])\",\n        \"Returns a string containing information about the most recent query\"\n    ],\n    \"mysql_insert_id\": [\n        \"int mysql_insert_id([int link_identifier])\",\n        \"Gets the ID generated from the previous INSERT operation\"\n    ],\n    \"mysql_list_dbs\": [\n        \"resource mysql_list_dbs([int link_identifier])\",\n        \"List databases available on a MySQL server\"\n    ],\n    \"mysql_list_fields\": [\n        \"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\n        \"List MySQL result fields\"\n    ],\n    \"mysql_list_processes\": [\n        \"resource mysql_list_processes([int link_identifier])\",\n        \"Returns a result set describing the current server threads\"\n    ],\n    \"mysql_list_tables\": [\n        \"resource mysql_list_tables(string database_name [, int link_identifier])\",\n        \"List tables in a MySQL database\"\n    ],\n    \"mysql_num_fields\": [\n        \"int mysql_num_fields(resource result)\",\n        \"Gets number of fields in a result\"\n    ],\n    \"mysql_num_rows\": [\n        \"int mysql_num_rows(resource result)\",\n        \"Gets number of rows in a result\"\n    ],\n    \"mysql_pconnect\": [\n        \"resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])\",\n        \"Opens a persistent connection to a MySQL Server\"\n    ],\n    \"mysql_ping\": [\n        \"bool mysql_ping([int link_identifier])\",\n        \"Ping a server connection. If no connection then reconnect.\"\n    ],\n    \"mysql_query\": [\n        \"resource mysql_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_real_escape_string\": [\n        \"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\n        \"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysql_result\": [\n        \"mixed mysql_result(resource result, int row [, mixed field])\",\n        \"Gets result data\"\n    ],\n    \"mysql_select_db\": [\n        \"bool mysql_select_db(string database_name [, int link_identifier])\",\n        \"Selects a MySQL database\"\n    ],\n    \"mysql_set_charset\": [\n        \"bool mysql_set_charset(string csname [, int link_identifier])\",\n        \"sets client character set\"\n    ],\n    \"mysql_stat\": [\n        \"string mysql_stat([int link_identifier])\",\n        \"Returns a string containing status information\"\n    ],\n    \"mysql_thread_id\": [\n        \"int mysql_thread_id([int link_identifier])\",\n        \"Returns the thread id of current connection\"\n    ],\n    \"mysql_unbuffered_query\": [\n        \"resource mysql_unbuffered_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL, without fetching and buffering the result rows\"\n    ],\n    \"mysqli_affected_rows\": [\n        \"mixed mysqli_affected_rows(object link)\",\n        \"Get number of affected rows in previous MySQL operation\"\n    ],\n    \"mysqli_autocommit\": [\n        \"bool mysqli_autocommit(object link, bool mode)\",\n        \"Turn auto commit on or of\"\n    ],\n    \"mysqli_cache_stats\": [\n        \"array mysqli_cache_stats()\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_change_user\": [\n        \"bool mysqli_change_user(object link, string user, string password, string database)\",\n        \"Change logged-in user of the active connection\"\n    ],\n    \"mysqli_character_set_name\": [\n        \"string mysqli_character_set_name(object link)\",\n        \"Returns the name of the character set used for this connection\"\n    ],\n    \"mysqli_close\": [\n        \"bool mysqli_close(object link)\",\n        \"Close connection\"\n    ],\n    \"mysqli_commit\": [\n        \"bool mysqli_commit(object link)\",\n        \"Commit outstanding actions and close transaction\"\n    ],\n    \"mysqli_connect\": [\n        \"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_connect_errno\": [\n        \"int mysqli_connect_errno()\",\n        \"Returns the numerical value of the error message from last connect command\"\n    ],\n    \"mysqli_connect_error\": [\n        \"string mysqli_connect_error()\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_data_seek\": [\n        \"bool mysqli_data_seek(object result, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_debug\": [\n        \"void mysqli_debug(string debug)\",\n        \"\"\n    ],\n    \"mysqli_dump_debug_info\": [\n        \"bool mysqli_dump_debug_info(object link)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_end\": [\n        \"void mysqli_embedded_server_end()\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_start\": [\n        \"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\n        \"initialize and start embedded server\"\n    ],\n    \"mysqli_errno\": [\n        \"int mysqli_errno(object link)\",\n        \"Returns the numerical value of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_error\": [\n        \"string mysqli_error(object link)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_fetch_all\": [\n        \"mixed mysqli_fetch_all(object result [,int resulttype])\",\n        \"Fetches all result rows as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_array\": [\n        \"mixed mysqli_fetch_array(object result [,int resulttype])\",\n        \"Fetch a result row as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_assoc\": [\n        \"mixed mysqli_fetch_assoc(object result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysqli_fetch_field\": [\n        \"mixed mysqli_fetch_field(object result)\",\n        \"Get column information from a result and return as an object\"\n    ],\n    \"mysqli_fetch_field_direct\": [\n        \"mixed mysqli_fetch_field_direct(object result, int offset)\",\n        \"Fetch meta-data for a single field\"\n    ],\n    \"mysqli_fetch_fields\": [\n        \"mixed mysqli_fetch_fields(object result)\",\n        \"Return array of objects containing field meta-data\"\n    ],\n    \"mysqli_fetch_lengths\": [\n        \"mixed mysqli_fetch_lengths(object result)\",\n        \"Get the length of each output in a result\"\n    ],\n    \"mysqli_fetch_object\": [\n        \"mixed mysqli_fetch_object(object result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysqli_fetch_row\": [\n        \"array mysqli_fetch_row(object result)\",\n        \"Get a result row as an enumerated array\"\n    ],\n    \"mysqli_field_count\": [\n        \"int mysqli_field_count(object link)\",\n        \"Fetch the number of fields returned by the last query for the given link\"\n    ],\n    \"mysqli_field_seek\": [\n        \"int mysqli_field_seek(object result, int fieldnr)\",\n        \"Set result pointer to a specified field offset\"\n    ],\n    \"mysqli_field_tell\": [\n        \"int mysqli_field_tell(object result)\",\n        \"Get current field offset of result pointer\"\n    ],\n    \"mysqli_free_result\": [\n        \"void mysqli_free_result(object result)\",\n        \"Free query result memory for the given result handle\"\n    ],\n    \"mysqli_get_charset\": [\n        \"object mysqli_get_charset(object link)\",\n        \"returns a character set object\"\n    ],\n    \"mysqli_get_client_info\": [\n        \"string mysqli_get_client_info()\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_client_stats\": [\n        \"array mysqli_get_client_stats()\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_client_version\": [\n        \"int mysqli_get_client_version()\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_connection_stats\": [\n        \"array mysqli_get_connection_stats()\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_host_info\": [\n        \"string mysqli_get_host_info(object link)\",\n        \"Get MySQL host info\"\n    ],\n    \"mysqli_get_proto_info\": [\n        \"int mysqli_get_proto_info(object link)\",\n        \"Get MySQL protocol information\"\n    ],\n    \"mysqli_get_server_info\": [\n        \"string mysqli_get_server_info(object link)\",\n        \"Get MySQL server info\"\n    ],\n    \"mysqli_get_server_version\": [\n        \"int mysqli_get_server_version(object link)\",\n        \"Return the MySQL version for the server referenced by the given link\"\n    ],\n    \"mysqli_get_warnings\": [\n        \"object mysqli_get_warnings(object link)\",\n        \"\"\n    ],\n    \"mysqli_info\": [\n        \"string mysqli_info(object link)\",\n        \"Get information about the most recent query\"\n    ],\n    \"mysqli_init\": [\n        \"resource mysqli_init()\",\n        \"Initialize mysqli and return a resource for use with mysql_real_connect\"\n    ],\n    \"mysqli_insert_id\": [\n        \"mixed mysqli_insert_id(object link)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_kill\": [\n        \"bool mysqli_kill(object link, int processid)\",\n        \"Kill a mysql process on the server\"\n    ],\n    \"mysqli_link_construct\": [\n        \"object mysqli_link_construct()\",\n        \"\"\n    ],\n    \"mysqli_more_results\": [\n        \"bool mysqli_more_results(object link)\",\n        \"check if there any more query results from a multi query\"\n    ],\n    \"mysqli_multi_query\": [\n        \"bool mysqli_multi_query(object link, string query)\",\n        \"allows to execute multiple queries\"\n    ],\n    \"mysqli_next_result\": [\n        \"bool mysqli_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_num_fields\": [\n        \"int mysqli_num_fields(object result)\",\n        \"Get number of fields in result\"\n    ],\n    \"mysqli_num_rows\": [\n        \"mixed mysqli_num_rows(object result)\",\n        \"Get number of rows in result\"\n    ],\n    \"mysqli_options\": [\n        \"bool mysqli_options(object link, int flags, mixed values)\",\n        \"Set options\"\n    ],\n    \"mysqli_ping\": [\n        \"bool mysqli_ping(object link)\",\n        \"Ping a server connection or reconnect if there is no connection\"\n    ],\n    \"mysqli_poll\": [\n        \"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\n        \"Poll connections\"\n    ],\n    \"mysqli_prepare\": [\n        \"mixed mysqli_prepare(object link, string query)\",\n        \"Prepare a SQL statement for execution\"\n    ],\n    \"mysqli_query\": [\n        \"mixed mysqli_query(object link, string query [,int resultmode])\",\n        \"\"\n    ],\n    \"mysqli_real_connect\": [\n        \"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_real_escape_string\": [\n        \"string mysqli_real_escape_string(object link, string escapestr)\",\n        \"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysqli_real_query\": [\n        \"bool mysqli_real_query(object link, string query)\",\n        \"Binary-safe version of mysql_query()\"\n    ],\n    \"mysqli_reap_async_query\": [\n        \"int mysqli_reap_async_query(object link)\",\n        \"Poll connections\"\n    ],\n    \"mysqli_refresh\": [\n        \"bool mysqli_refresh(object link, long options)\",\n        \"Flush tables or caches, or reset replication server information\"\n    ],\n    \"mysqli_report\": [\n        \"bool mysqli_report(int flags)\",\n        \"sets report level\"\n    ],\n    \"mysqli_rollback\": [\n        \"bool mysqli_rollback(object link)\",\n        \"Undo actions from current transaction\"\n    ],\n    \"mysqli_select_db\": [\n        \"bool mysqli_select_db(object link, string dbname)\",\n        \"Select a MySQL database\"\n    ],\n    \"mysqli_set_charset\": [\n        \"bool mysqli_set_charset(object link, string csname)\",\n        \"sets client character set\"\n    ],\n    \"mysqli_set_local_infile_default\": [\n        \"void mysqli_set_local_infile_default(object link)\",\n        \"unsets user defined handler for load local infile command\"\n    ],\n    \"mysqli_set_local_infile_handler\": [\n        \"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\n        \"Set callback functions for LOAD DATA LOCAL INFILE\"\n    ],\n    \"mysqli_sqlstate\": [\n        \"string mysqli_sqlstate(object link)\",\n        \"Returns the SQLSTATE error from previous MySQL operation\"\n    ],\n    \"mysqli_ssl_set\": [\n        \"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\n        \"\"\n    ],\n    \"mysqli_stat\": [\n        \"mixed mysqli_stat(object link)\",\n        \"Get current system status\"\n    ],\n    \"mysqli_stmt_affected_rows\": [\n        \"mixed mysqli_stmt_affected_rows(object stmt)\",\n        \"Return the number of rows affected in the last query for the given link\"\n    ],\n    \"mysqli_stmt_attr_get\": [\n        \"int mysqli_stmt_attr_get(object stmt, long attr)\",\n        \"\"\n    ],\n    \"mysqli_stmt_attr_set\": [\n        \"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\n        \"\"\n    ],\n    \"mysqli_stmt_bind_param\": [\n        \"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\n        \"Bind variables to a prepared statement as parameters\"\n    ],\n    \"mysqli_stmt_bind_result\": [\n        \"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\n        \"Bind variables to a prepared statement for result storage\"\n    ],\n    \"mysqli_stmt_close\": [\n        \"bool mysqli_stmt_close(object stmt)\",\n        \"Close statement\"\n    ],\n    \"mysqli_stmt_data_seek\": [\n        \"void mysqli_stmt_data_seek(object stmt, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_stmt_errno\": [\n        \"int mysqli_stmt_errno(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_error\": [\n        \"string mysqli_stmt_error(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_execute\": [\n        \"bool mysqli_stmt_execute(object stmt)\",\n        \"Execute a prepared statement\"\n    ],\n    \"mysqli_stmt_fetch\": [\n        \"mixed mysqli_stmt_fetch(object stmt)\",\n        \"Fetch results from a prepared statement into the bound variables\"\n    ],\n    \"mysqli_stmt_field_count\": [\n        \"int mysqli_stmt_field_count(object stmt) {\",\n        \"Return the number of result columns for the given statement\"\n    ],\n    \"mysqli_stmt_free_result\": [\n        \"void mysqli_stmt_free_result(object stmt)\",\n        \"Free stored result memory for the given statement handle\"\n    ],\n    \"mysqli_stmt_get_result\": [\n        \"object mysqli_stmt_get_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_stmt_get_warnings\": [\n        \"object mysqli_stmt_get_warnings(object link)\",\n        \"\"\n    ],\n    \"mysqli_stmt_init\": [\n        \"mixed mysqli_stmt_init(object link)\",\n        \"Initialize statement object\"\n    ],\n    \"mysqli_stmt_insert_id\": [\n        \"mixed mysqli_stmt_insert_id(object stmt)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_stmt_next_result\": [\n        \"bool mysqli_stmt_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_stmt_num_rows\": [\n        \"mixed mysqli_stmt_num_rows(object stmt)\",\n        \"Return the number of rows in statements result set\"\n    ],\n    \"mysqli_stmt_param_count\": [\n        \"int mysqli_stmt_param_count(object stmt)\",\n        \"Return the number of parameter for the given statement\"\n    ],\n    \"mysqli_stmt_prepare\": [\n        \"bool mysqli_stmt_prepare(object stmt, string query)\",\n        \"prepare server side statement with query\"\n    ],\n    \"mysqli_stmt_reset\": [\n        \"bool mysqli_stmt_reset(object stmt)\",\n        \"reset a prepared statement\"\n    ],\n    \"mysqli_stmt_result_metadata\": [\n        \"mixed mysqli_stmt_result_metadata(object stmt)\",\n        \"return result set from statement\"\n    ],\n    \"mysqli_stmt_send_long_data\": [\n        \"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\n        \"\"\n    ],\n    \"mysqli_stmt_sqlstate\": [\n        \"string mysqli_stmt_sqlstate(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_store_result\": [\n        \"bool mysqli_stmt_store_result(stmt)\",\n        \"\"\n    ],\n    \"mysqli_store_result\": [\n        \"object mysqli_store_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_thread_id\": [\n        \"int mysqli_thread_id(object link)\",\n        \"Return the current thread ID\"\n    ],\n    \"mysqli_thread_safe\": [\n        \"bool mysqli_thread_safe()\",\n        \"Return whether thread safety is given or not\"\n    ],\n    \"mysqli_use_result\": [\n        \"mixed mysqli_use_result(object link)\",\n        \"Directly retrieve query results - do not buffer results on client side\"\n    ],\n    \"mysqli_warning_count\": [\n        \"int mysqli_warning_count(object link)\",\n        \"Return number of warnings from the last query for the given link\"\n    ],\n    \"natcasesort\": [\n        \"void natcasesort(array &array_arg)\",\n        \"Sort an array using case-insensitive natural sort\"\n    ],\n    \"natsort\": [\n        \"void natsort(array &array_arg)\",\n        \"Sort an array using natural sort\"\n    ],\n    \"next\": [\n        \"mixed next(array array_arg)\",\n        \"Move array argument's internal pointer to the next element and return it\"\n    ],\n    \"ngettext\": [\n        \"string ngettext(string MSGID1, string MSGID2, int N)\",\n        \"Plural version of gettext()\"\n    ],\n    \"nl2br\": [\n        \"string nl2br(string str [, bool is_xhtml])\",\n        \"Converts newlines to HTML line breaks\"\n    ],\n    \"nl_langinfo\": [\n        \"string nl_langinfo(int item)\",\n        \"Query language and locale information\"\n    ],\n    \"normalizer_is_normalize\": [\n        \"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Test if a string is in a given normalization form.\"\n    ],\n    \"normalizer_normalize\": [\n        \"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Normalize a string.\"\n    ],\n    \"nsapi_request_headers\": [\n        \"array nsapi_request_headers()\",\n        \"Get all headers from the request\"\n    ],\n    \"nsapi_response_headers\": [\n        \"array nsapi_response_headers()\",\n        \"Get all headers from the response\"\n    ],\n    \"nsapi_virtual\": [\n        \"bool nsapi_virtual(string uri)\",\n        \"Perform an NSAPI sub-request\"\n    ],\n    \"number_format\": [\n        \"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\n        \"Formats a number with grouped thousands\"\n    ],\n    \"numfmt_create\": [\n        \"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\n        \"* Create number formatter.\"\n    ],\n    \"numfmt_format\": [\n        \"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\n        \"* Format a number.\"\n    ],\n    \"numfmt_format_currency\": [\n        \"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\n        \"* Format a number as currency.\"\n    ],\n    \"numfmt_get_attribute\": [\n        \"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_get_error_code\": [\n        \"int numfmt_get_error_code( NumberFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"numfmt_get_error_message\": [\n        \"string numfmt_get_error_message( NumberFormatter $nf )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"numfmt_get_locale\": [\n        \"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\n        \"* Get formatter locale.\"\n    ],\n    \"numfmt_get_pattern\": [\n        \"string numfmt_get_pattern( NumberFormatter $nf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"numfmt_get_symbol\": [\n        \"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter symbol value.\"\n    ],\n    \"numfmt_get_text_attribute\": [\n        \"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_parse\": [\n        \"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\n        \"* Parse a number.\"\n    ],\n    \"numfmt_parse_currency\": [\n        \"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\n        \"* Parse a number as currency.\"\n    ],\n    \"numfmt_parse_message\": [\n        \"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"numfmt_set_attribute\": [\n        \"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_set_pattern\": [\n        \"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"numfmt_set_symbol\": [\n        \"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\n        \"* Set formatter symbol value.\"\n    ],\n    \"numfmt_set_text_attribute\": [\n        \"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"ob_clean\": [\n        \"bool ob_clean()\",\n        \"Clean (delete) the current output buffer\"\n    ],\n    \"ob_end_clean\": [\n        \"bool ob_end_clean()\",\n        \"Clean the output buffer, and delete current output buffer\"\n    ],\n    \"ob_end_flush\": [\n        \"bool ob_end_flush()\",\n        \"Flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_flush\": [\n        \"bool ob_flush()\",\n        \"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"\n    ],\n    \"ob_get_clean\": [\n        \"bool ob_get_clean()\",\n        \"Get current buffer contents and delete current output buffer\"\n    ],\n    \"ob_get_contents\": [\n        \"string ob_get_contents()\",\n        \"Return the contents of the output buffer\"\n    ],\n    \"ob_get_flush\": [\n        \"bool ob_get_flush()\",\n        \"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_get_length\": [\n        \"int ob_get_length()\",\n        \"Return the length of the output buffer\"\n    ],\n    \"ob_get_level\": [\n        \"int ob_get_level()\",\n        \"Return the nesting level of the output buffer\"\n    ],\n    \"ob_get_status\": [\n        \"false|array ob_get_status([bool full_status])\",\n        \"Return the status of the active or all output buffers\"\n    ],\n    \"ob_gzhandler\": [\n        \"string ob_gzhandler(string str, int mode)\",\n        \"Encode str based on accept-encoding setting - designed to be called from ob_start()\"\n    ],\n    \"ob_iconv_handler\": [\n        \"string ob_iconv_handler(string contents, int status)\",\n        \"Returns str in output buffer converted to the iconv.output_encoding character set\"\n    ],\n    \"ob_implicit_flush\": [\n        \"void ob_implicit_flush([int flag])\",\n        \"Turn implicit flush on/off and is equivalent to calling flush() after every output call\"\n    ],\n    \"ob_list_handlers\": [\n        \"false|array ob_list_handlers()\",\n        \"*  List all output_buffers in an array\"\n    ],\n    \"ob_start\": [\n        \"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\n        \"Turn on Output Buffering (specifying an optional output handler).\"\n    ],\n    \"oci_bind_array_by_name\": [\n        \"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\n        \"Bind a PHP array to an Oracle PL/SQL type by name\"\n    ],\n    \"oci_bind_by_name\": [\n        \"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\n        \"Bind a PHP variable to an Oracle placeholder by name\"\n    ],\n    \"oci_cancel\": [\n        \"bool oci_cancel(resource stmt)\",\n        \"Cancel reading from a cursor\"\n    ],\n    \"oci_close\": [\n        \"bool oci_close(resource connection)\",\n        \"Disconnect from database\"\n    ],\n    \"oci_collection_append\": [\n        \"bool oci_collection_append(string value)\",\n        \"Append an object to the collection\"\n    ],\n    \"oci_collection_assign\": [\n        \"bool oci_collection_assign(object from)\",\n        \"Assign a collection from another existing collection\"\n    ],\n    \"oci_collection_element_assign\": [\n        \"bool oci_collection_element_assign(int index, string val)\",\n        \"Assign element val to collection at index ndx\"\n    ],\n    \"oci_collection_element_get\": [\n        \"string oci_collection_element_get(int ndx)\",\n        \"Retrieve the value at collection index ndx\"\n    ],\n    \"oci_collection_max\": [\n        \"int oci_collection_max()\",\n        \"Return the max value of a collection. For a varray this is the maximum length of the array\"\n    ],\n    \"oci_collection_size\": [\n        \"int oci_collection_size()\",\n        \"Return the size of a collection\"\n    ],\n    \"oci_collection_trim\": [\n        \"bool oci_collection_trim(int num)\",\n        \"Trim num elements from the end of a collection\"\n    ],\n    \"oci_commit\": [\n        \"bool oci_commit(resource connection)\",\n        \"Commit the current context\"\n    ],\n    \"oci_connect\": [\n        \"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_define_by_name\": [\n        \"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\n        \"Define a PHP variable to an Oracle column by name\"\n    ],\n    \"oci_error\": [\n        \"array oci_error([resource stmt|connection|global])\",\n        \"Return the last error of stmt|connection|global. If no error happened returns false.\"\n    ],\n    \"oci_execute\": [\n        \"bool oci_execute(resource stmt [, int mode])\",\n        \"Execute a parsed statement\"\n    ],\n    \"oci_fetch\": [\n        \"bool oci_fetch(resource stmt)\",\n        \"Prepare a new row of data for reading\"\n    ],\n    \"oci_fetch_all\": [\n        \"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\n        \"Fetch all rows of result data into an array\"\n    ],\n    \"oci_fetch_array\": [\n        \"array oci_fetch_array( resource stmt [, int mode ])\",\n        \"Fetch a result row as an array\"\n    ],\n    \"oci_fetch_assoc\": [\n        \"array oci_fetch_assoc( resource stmt )\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"oci_fetch_object\": [\n        \"object oci_fetch_object( resource stmt )\",\n        \"Fetch a result row as an object\"\n    ],\n    \"oci_fetch_row\": [\n        \"array oci_fetch_row( resource stmt )\",\n        \"Fetch a result row as an enumerated array\"\n    ],\n    \"oci_field_is_null\": [\n        \"bool oci_field_is_null(resource stmt, int col)\",\n        \"Tell whether a column is NULL\"\n    ],\n    \"oci_field_name\": [\n        \"string oci_field_name(resource stmt, int col)\",\n        \"Tell the name of a column\"\n    ],\n    \"oci_field_precision\": [\n        \"int oci_field_precision(resource stmt, int col)\",\n        \"Tell the precision of a column\"\n    ],\n    \"oci_field_scale\": [\n        \"int oci_field_scale(resource stmt, int col)\",\n        \"Tell the scale of a column\"\n    ],\n    \"oci_field_size\": [\n        \"int oci_field_size(resource stmt, int col)\",\n        \"Tell the maximum data size of a column\"\n    ],\n    \"oci_field_type\": [\n        \"mixed oci_field_type(resource stmt, int col)\",\n        \"Tell the data type of a column\"\n    ],\n    \"oci_field_type_raw\": [\n        \"int oci_field_type_raw(resource stmt, int col)\",\n        \"Tell the raw oracle data type of a column\"\n    ],\n    \"oci_free_collection\": [\n        \"bool oci_free_collection()\",\n        \"Deletes collection object\"\n    ],\n    \"oci_free_descriptor\": [\n        \"bool oci_free_descriptor()\",\n        \"Deletes large object description\"\n    ],\n    \"oci_free_statement\": [\n        \"bool oci_free_statement(resource stmt)\",\n        \"Free all resources associated with a statement\"\n    ],\n    \"oci_internal_debug\": [\n        \"void oci_internal_debug(int onoff)\",\n        \"Toggle internal debugging output for the OCI extension\"\n    ],\n    \"oci_lob_append\": [\n        \"bool oci_lob_append( object lob )\",\n        \"Appends data from a LOB to another LOB\"\n    ],\n    \"oci_lob_close\": [\n        \"bool oci_lob_close()\",\n        \"Closes lob descriptor\"\n    ],\n    \"oci_lob_copy\": [\n        \"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\n        \"Copies data from a LOB to another LOB\"\n    ],\n    \"oci_lob_eof\": [\n        \"bool oci_lob_eof()\",\n        \"Checks if EOF is reached\"\n    ],\n    \"oci_lob_erase\": [\n        \"int oci_lob_erase( [ int offset [, int length ] ] )\",\n        \"Erases a specified portion of the internal LOB, starting at a specified offset\"\n    ],\n    \"oci_lob_export\": [\n        \"bool oci_lob_export([string filename [, int start [, int length]]])\",\n        \"Writes a large object into a file\"\n    ],\n    \"oci_lob_flush\": [\n        \"bool oci_lob_flush( [ int flag ] )\",\n        \"Flushes the LOB buffer\"\n    ],\n    \"oci_lob_import\": [\n        \"bool oci_lob_import( string filename )\",\n        \"Loads file into a LOB\"\n    ],\n    \"oci_lob_is_equal\": [\n        \"bool oci_lob_is_equal( object lob1, object lob2 )\",\n        \"Tests to see if two LOB/FILE locators are equal\"\n    ],\n    \"oci_lob_load\": [\n        \"string oci_lob_load()\",\n        \"Loads a large object\"\n    ],\n    \"oci_lob_read\": [\n        \"string oci_lob_read( int length )\",\n        \"Reads particular part of a large object\"\n    ],\n    \"oci_lob_rewind\": [\n        \"bool oci_lob_rewind()\",\n        \"Rewind pointer of a LOB\"\n    ],\n    \"oci_lob_save\": [\n        \"bool oci_lob_save( string data [, int offset ])\",\n        \"Saves a large object\"\n    ],\n    \"oci_lob_seek\": [\n        \"bool oci_lob_seek( int offset [, int whence ])\",\n        \"Moves the pointer of a LOB\"\n    ],\n    \"oci_lob_size\": [\n        \"int oci_lob_size()\",\n        \"Returns size of a large object\"\n    ],\n    \"oci_lob_tell\": [\n        \"int oci_lob_tell()\",\n        \"Tells LOB pointer position\"\n    ],\n    \"oci_lob_truncate\": [\n        \"bool oci_lob_truncate( [ int length ])\",\n        \"Truncates a LOB\"\n    ],\n    \"oci_lob_write\": [\n        \"int oci_lob_write( string string [, int length ])\",\n        \"Writes data to current position of a LOB\"\n    ],\n    \"oci_lob_write_temporary\": [\n        \"bool oci_lob_write_temporary(string var [, int lob_type])\",\n        \"Writes temporary blob\"\n    ],\n    \"oci_new_collection\": [\n        \"object oci_new_collection(resource connection, string tdo [, string schema])\",\n        \"Initialize a new collection\"\n    ],\n    \"oci_new_connect\": [\n        \"resource oci_new_connect(string user, string pass [, string db])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_new_cursor\": [\n        \"resource oci_new_cursor(resource connection)\",\n        \"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"\n    ],\n    \"oci_new_descriptor\": [\n        \"object oci_new_descriptor(resource connection [, int type])\",\n        \"Initialize a new empty descriptor LOB/FILE (LOB is default)\"\n    ],\n    \"oci_num_fields\": [\n        \"int oci_num_fields(resource stmt)\",\n        \"Return the number of result columns in a statement\"\n    ],\n    \"oci_num_rows\": [\n        \"int oci_num_rows(resource stmt)\",\n        \"Return the row count of an OCI statement\"\n    ],\n    \"oci_parse\": [\n        \"resource oci_parse(resource connection, string query)\",\n        \"Parse a query and return a statement\"\n    ],\n    \"oci_password_change\": [\n        \"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\n        \"Changes the password of an account\"\n    ],\n    \"oci_pconnect\": [\n        \"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\n        \"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"\n    ],\n    \"oci_result\": [\n        \"string oci_result(resource stmt, mixed column)\",\n        \"Return a single column of result data\"\n    ],\n    \"oci_rollback\": [\n        \"bool oci_rollback(resource connection)\",\n        \"Rollback the current context\"\n    ],\n    \"oci_server_version\": [\n        \"string oci_server_version(resource connection)\",\n        \"Return a string containing server version information\"\n    ],\n    \"oci_set_action\": [\n        \"bool oci_set_action(resource connection, string value)\",\n        \"Sets the action attribute on the connection\"\n    ],\n    \"oci_set_client_identifier\": [\n        \"bool oci_set_client_identifier(resource connection, string value)\",\n        \"Sets the client identifier attribute on the connection\"\n    ],\n    \"oci_set_client_info\": [\n        \"bool oci_set_client_info(resource connection, string value)\",\n        \"Sets the client info attribute on the connection\"\n    ],\n    \"oci_set_edition\": [\n        \"bool oci_set_edition(string value)\",\n        \"Sets the edition attribute for all subsequent connections created\"\n    ],\n    \"oci_set_module_name\": [\n        \"bool oci_set_module_name(resource connection, string value)\",\n        \"Sets the module attribute on the connection\"\n    ],\n    \"oci_set_prefetch\": [\n        \"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\n        \"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"\n    ],\n    \"oci_statement_type\": [\n        \"string oci_statement_type(resource stmt)\",\n        \"Return the query type of an OCI statement\"\n    ],\n    \"ocifetchinto\": [\n        \"int ocifetchinto(resource stmt, array &output [, int mode])\",\n        \"Fetch a row of result data into an array\"\n    ],\n    \"ocigetbufferinglob\": [\n        \"bool ocigetbufferinglob()\",\n        \"Returns current state of buffering for a LOB\"\n    ],\n    \"ocisetbufferinglob\": [\n        \"bool ocisetbufferinglob( bool flag )\",\n        \"Enables/disables buffering for a LOB\"\n    ],\n    \"octdec\": [\n        \"int octdec(string octal_number)\",\n        \"Returns the decimal equivalent of an octal string\"\n    ],\n    \"odbc_autocommit\": [\n        \"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\n        \"Toggle autocommit mode or get status\"\n    ],\n    \"odbc_binmode\": [\n        \"bool odbc_binmode(int result_id, int mode)\",\n        \"Handle binary column data\"\n    ],\n    \"odbc_close\": [\n        \"void odbc_close(resource connection_id)\",\n        \"Close an ODBC connection\"\n    ],\n    \"odbc_close_all\": [\n        \"void odbc_close_all()\",\n        \"Close all ODBC connections\"\n    ],\n    \"odbc_columnprivileges\": [\n        \"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\n        \"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"\n    ],\n    \"odbc_columns\": [\n        \"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\n        \"Returns a result identifier that can be used to fetch a list of column names in specified tables\"\n    ],\n    \"odbc_commit\": [\n        \"bool odbc_commit(resource connection_id)\",\n        \"Commit an ODBC transaction\"\n    ],\n    \"odbc_connect\": [\n        \"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\n        \"Connect to a datasource\"\n    ],\n    \"odbc_cursor\": [\n        \"string odbc_cursor(resource result_id)\",\n        \"Get cursor name\"\n    ],\n    \"odbc_data_source\": [\n        \"array odbc_data_source(resource connection_id, int fetch_type)\",\n        \"Return information about the currently connected data source\"\n    ],\n    \"odbc_error\": [\n        \"string odbc_error([resource connection_id])\",\n        \"Get the last error code\"\n    ],\n    \"odbc_errormsg\": [\n        \"string odbc_errormsg([resource connection_id])\",\n        \"Get the last error message\"\n    ],\n    \"odbc_exec\": [\n        \"resource odbc_exec(resource connection_id, string query [, int flags])\",\n        \"Prepare and execute an SQL statement\"\n    ],\n    \"odbc_execute\": [\n        \"bool odbc_execute(resource result_id [, array parameters_array])\",\n        \"Execute a prepared statement\"\n    ],\n    \"odbc_fetch_array\": [\n        \"array odbc_fetch_array(int result [, int rownumber])\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"odbc_fetch_into\": [\n        \"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\n        \"Fetch one result row into an array\"\n    ],\n    \"odbc_fetch_object\": [\n        \"object odbc_fetch_object(int result [, int rownumber])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"odbc_fetch_row\": [\n        \"bool odbc_fetch_row(resource result_id [, int row_number])\",\n        \"Fetch a row\"\n    ],\n    \"odbc_field_len\": [\n        \"int odbc_field_len(resource result_id, int field_number)\",\n        \"Get the length (precision) of a column\"\n    ],\n    \"odbc_field_name\": [\n        \"string odbc_field_name(resource result_id, int field_number)\",\n        \"Get a column name\"\n    ],\n    \"odbc_field_num\": [\n        \"int odbc_field_num(resource result_id, string field_name)\",\n        \"Return column number\"\n    ],\n    \"odbc_field_scale\": [\n        \"int odbc_field_scale(resource result_id, int field_number)\",\n        \"Get the scale of a column\"\n    ],\n    \"odbc_field_type\": [\n        \"string odbc_field_type(resource result_id, int field_number)\",\n        \"Get the datatype of a column\"\n    ],\n    \"odbc_foreignkeys\": [\n        \"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\n        \"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"\n    ],\n    \"odbc_free_result\": [\n        \"bool odbc_free_result(resource result_id)\",\n        \"Free resources associated with a result\"\n    ],\n    \"odbc_gettypeinfo\": [\n        \"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\n        \"Returns a result identifier containing information about data types supported by the data source\"\n    ],\n    \"odbc_longreadlen\": [\n        \"bool odbc_longreadlen(int result_id, int length)\",\n        \"Handle LONG columns\"\n    ],\n    \"odbc_next_result\": [\n        \"bool odbc_next_result(resource result_id)\",\n        \"Checks if multiple results are avaiable\"\n    ],\n    \"odbc_num_fields\": [\n        \"int odbc_num_fields(resource result_id)\",\n        \"Get number of columns in a result\"\n    ],\n    \"odbc_num_rows\": [\n        \"int odbc_num_rows(resource result_id)\",\n        \"Get number of rows in a result\"\n    ],\n    \"odbc_pconnect\": [\n        \"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\n        \"Establish a persistent connection to a datasource\"\n    ],\n    \"odbc_prepare\": [\n        \"resource odbc_prepare(resource connection_id, string query)\",\n        \"Prepares a statement for execution\"\n    ],\n    \"odbc_primarykeys\": [\n        \"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\n        \"Returns a result identifier listing the column names that comprise the primary key for a table\"\n    ],\n    \"odbc_procedurecolumns\": [\n        \"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\n        \"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"\n    ],\n    \"odbc_procedures\": [\n        \"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\n        \"Returns a result identifier containg the list of procedure names in a datasource\"\n    ],\n    \"odbc_result\": [\n        \"mixed odbc_result(resource result_id, mixed field)\",\n        \"Get result data\"\n    ],\n    \"odbc_result_all\": [\n        \"int odbc_result_all(resource result_id [, string format])\",\n        \"Print result as HTML table\"\n    ],\n    \"odbc_rollback\": [\n        \"bool odbc_rollback(resource connection_id)\",\n        \"Rollback a transaction\"\n    ],\n    \"odbc_setoption\": [\n        \"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\n        \"Sets connection or statement options\"\n    ],\n    \"odbc_specialcolumns\": [\n        \"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\n        \"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"\n    ],\n    \"odbc_statistics\": [\n        \"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\n        \"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"\n    ],\n    \"odbc_tableprivileges\": [\n        \"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\n        \"Returns a result identifier containing a list of tables and the privileges associated with each table\"\n    ],\n    \"odbc_tables\": [\n        \"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\n        \"Call the SQLTables function\"\n    ],\n    \"opendir\": [\n        \"mixed opendir(string path[, resource context])\",\n        \"Open a directory and return a dir_handle\"\n    ],\n    \"openlog\": [\n        \"bool openlog(string ident, int option, int facility)\",\n        \"Open connection to system logger\"\n    ],\n    \"openssl_csr_export\": [\n        \"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\n        \"Exports a CSR to file or a var\"\n    ],\n    \"openssl_csr_export_to_file\": [\n        \"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\n        \"Exports a CSR to file\"\n    ],\n    \"openssl_csr_get_public_key\": [\n        \"mixed openssl_csr_get_public_key(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_get_subject\": [\n        \"mixed openssl_csr_get_subject(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_new\": [\n        \"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\n        \"Generates a privkey and CSR\"\n    ],\n    \"openssl_csr_sign\": [\n        \"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\n        \"Signs a cert with another CERT\"\n    ],\n    \"openssl_decrypt\": [\n        \"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\n        \"Takes raw or base64 encoded string and dectupt it using given method and key\"\n    ],\n    \"openssl_dh_compute_key\": [\n        \"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\n        \"Computes shared sicret for public value of remote DH key and local DH key\"\n    ],\n    \"openssl_digest\": [\n        \"string openssl_digest(string data, string method [, bool raw_output=false])\",\n        \"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"\n    ],\n    \"openssl_encrypt\": [\n        \"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\n        \"Encrypts given data with given method and key, returns raw or base64 encoded string\"\n    ],\n    \"openssl_error_string\": [\n        \"mixed openssl_error_string()\",\n        \"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"\n    ],\n    \"openssl_get_cipher_methods\": [\n        \"array openssl_get_cipher_methods([bool aliases = false])\",\n        \"Return array of available cipher methods\"\n    ],\n    \"openssl_get_md_methods\": [\n        \"array openssl_get_md_methods([bool aliases = false])\",\n        \"Return array of available digest methods\"\n    ],\n    \"openssl_open\": [\n        \"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\n        \"Opens data\"\n    ],\n    \"openssl_pkcs12_export\": [\n        \"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS12 to a var\"\n    ],\n    \"openssl_pkcs12_export_to_file\": [\n        \"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS to file\"\n    ],\n    \"openssl_pkcs12_read\": [\n        \"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\n        \"Parses a PKCS12 to an array\"\n    ],\n    \"openssl_pkcs7_decrypt\": [\n        \"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\n        \"Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"\n    ],\n    \"openssl_pkcs7_encrypt\": [\n        \"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\n        \"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"\n    ],\n    \"openssl_pkcs7_sign\": [\n        \"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\n        \"Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"\n    ],\n    \"openssl_pkcs7_verify\": [\n        \"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\n        \"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"\n    ],\n    \"openssl_pkey_export\": [\n        \"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\n        \"Gets an exportable representation of a key into a string or file\"\n    ],\n    \"openssl_pkey_export_to_file\": [\n        \"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\n        \"Gets an exportable representation of a key into a file\"\n    ],\n    \"openssl_pkey_free\": [\n        \"void openssl_pkey_free(int key)\",\n        \"Frees a key\"\n    ],\n    \"openssl_pkey_get_details\": [\n        \"resource openssl_pkey_get_details(resource key)\",\n        \"returns an array with the key details (bits, pkey, type)\"\n    ],\n    \"openssl_pkey_get_private\": [\n        \"int openssl_pkey_get_private(string key [, string passphrase])\",\n        \"Gets private keys\"\n    ],\n    \"openssl_pkey_get_public\": [\n        \"int openssl_pkey_get_public(mixed cert)\",\n        \"Gets public key from X.509 certificate\"\n    ],\n    \"openssl_pkey_new\": [\n        \"resource openssl_pkey_new([array configargs])\",\n        \"Generates a new private key\"\n    ],\n    \"openssl_private_decrypt\": [\n        \"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\n        \"Decrypts data with private key\"\n    ],\n    \"openssl_private_encrypt\": [\n        \"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with private key\"\n    ],\n    \"openssl_public_decrypt\": [\n        \"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\n        \"Decrypts data with public key\"\n    ],\n    \"openssl_public_encrypt\": [\n        \"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with public key\"\n    ],\n    \"openssl_random_pseudo_bytes\": [\n        \"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\n        \"Returns a string of the length specified filled with random pseudo bytes\"\n    ],\n    \"openssl_seal\": [\n        \"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\n        \"Seals data\"\n    ],\n    \"openssl_sign\": [\n        \"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\n        \"Signs data\"\n    ],\n    \"openssl_verify\": [\n        \"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\n        \"Verifys data\"\n    ],\n    \"openssl_x509_check_private_key\": [\n        \"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\n        \"Checks if a private key corresponds to a CERT\"\n    ],\n    \"openssl_x509_checkpurpose\": [\n        \"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\n        \"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"\n    ],\n    \"openssl_x509_export\": [\n        \"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_export_to_file\": [\n        \"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_free\": [\n        \"void openssl_x509_free(resource x509)\",\n        \"Frees X.509 certificates\"\n    ],\n    \"openssl_x509_parse\": [\n        \"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\n        \"Returns an array of the fields/values of the CERT\"\n    ],\n    \"openssl_x509_read\": [\n        \"resource openssl_x509_read(mixed cert)\",\n        \"Reads X.509 certificates\"\n    ],\n    \"ord\": [\n        \"int ord(string character)\",\n        \"Returns ASCII value of character\"\n    ],\n    \"output_add_rewrite_var\": [\n        \"bool output_add_rewrite_var(string name, string value)\",\n        \"Add URL rewriter values\"\n    ],\n    \"output_reset_rewrite_vars\": [\n        \"bool output_reset_rewrite_vars()\",\n        \"Reset(clear) URL rewriter values\"\n    ],\n    \"pack\": [\n        \"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Takes one or more arguments and packs them into a binary string according to the format argument\"\n    ],\n    \"parse_ini_file\": [\n        \"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration file\"\n    ],\n    \"parse_ini_string\": [\n        \"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration string\"\n    ],\n    \"parse_locale\": [\n        \"static array parse_locale($locale)\",\n        \"* parses a locale-id into an array the different parts of it\"\n    ],\n    \"parse_str\": [\n        \"void parse_str(string encoded_string [, array result])\",\n        \"Parses GET/POST/COOKIE data and sets global variables\"\n    ],\n    \"parse_url\": [\n        \"mixed parse_url(string url, [int url_component])\",\n        \"Parse a URL and return its components\"\n    ],\n    \"passthru\": [\n        \"void passthru(string command [, int &return_value])\",\n        \"Execute an external program and display raw output\"\n    ],\n    \"pathinfo\": [\n        \"array pathinfo(string path[, int options])\",\n        \"Returns information about a certain string\"\n    ],\n    \"pclose\": [\n        \"int pclose(resource fp)\",\n        \"Close a file pointer opened by popen()\"\n    ],\n    \"pcnlt_sigwaitinfo\": [\n        \"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\n        \"Synchronously wait for queued signals\"\n    ],\n    \"pcntl_alarm\": [\n        \"int pcntl_alarm(int seconds)\",\n        \"Set an alarm clock for delivery of a signal\"\n    ],\n    \"pcntl_exec\": [\n        \"bool pcntl_exec(string path [, array args [, array envs]])\",\n        \"Executes specified program in current process space as defined by exec(2)\"\n    ],\n    \"pcntl_fork\": [\n        \"int pcntl_fork()\",\n        \"Forks the currently running process following the same behavior as the UNIX fork() system call\"\n    ],\n    \"pcntl_getpriority\": [\n        \"int pcntl_getpriority([int pid [, int process_identifier]])\",\n        \"Get the priority of any process\"\n    ],\n    \"pcntl_setpriority\": [\n        \"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\n        \"Change the priority of any process\"\n    ],\n    \"pcntl_signal\": [\n        \"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\n        \"Assigns a system signal handler to a PHP function\"\n    ],\n    \"pcntl_signal_dispatch\": [\n        \"bool pcntl_signal_dispatch()\",\n        \"Dispatch signals to signal handlers\"\n    ],\n    \"pcntl_sigprocmask\": [\n        \"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\n        \"Examine and change blocked signals\"\n    ],\n    \"pcntl_sigtimedwait\": [\n        \"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\n        \"Wait for queued signals\"\n    ],\n    \"pcntl_wait\": [\n        \"int pcntl_wait(int &status)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_waitpid\": [\n        \"int pcntl_waitpid(int pid, int &status, int options)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_wexitstatus\": [\n        \"int pcntl_wexitstatus(int status)\",\n        \"Returns the status code of a child's exit\"\n    ],\n    \"pcntl_wifexited\": [\n        \"bool pcntl_wifexited(int status)\",\n        \"Returns true if the child status code represents a successful exit\"\n    ],\n    \"pcntl_wifsignaled\": [\n        \"bool pcntl_wifsignaled(int status)\",\n        \"Returns true if the child status code represents a process that was terminated due to a signal\"\n    ],\n    \"pcntl_wifstopped\": [\n        \"bool pcntl_wifstopped(int status)\",\n        \"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"\n    ],\n    \"pcntl_wstopsig\": [\n        \"int pcntl_wstopsig(int status)\",\n        \"Returns the number of the signal that caused the process to stop who's status code is passed\"\n    ],\n    \"pcntl_wtermsig\": [\n        \"int pcntl_wtermsig(int status)\",\n        \"Returns the number of the signal that terminated the process who's status code is passed\"\n    ],\n    \"pdo_drivers\": [\n        \"array pdo_drivers()\",\n        \"Return array of available PDO drivers\"\n    ],\n    \"pfsockopen\": [\n        \"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open persistent Internet or Unix domain socket connection\"\n    ],\n    \"pg_affected_rows\": [\n        \"int pg_affected_rows(resource result)\",\n        \"Returns the number of affected tuples\"\n    ],\n    \"pg_cancel_query\": [\n        \"bool pg_cancel_query(resource connection)\",\n        \"Cancel request\"\n    ],\n    \"pg_client_encoding\": [\n        \"string pg_client_encoding([resource connection])\",\n        \"Get the current client encoding\"\n    ],\n    \"pg_close\": [\n        \"bool pg_close([resource connection])\",\n        \"Close a PostgreSQL connection\"\n    ],\n    \"pg_connect\": [\n        \"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a PostgreSQL connection\"\n    ],\n    \"pg_connection_busy\": [\n        \"bool pg_connection_busy(resource connection)\",\n        \"Get connection is busy or not\"\n    ],\n    \"pg_connection_reset\": [\n        \"bool pg_connection_reset(resource connection)\",\n        \"Reset connection (reconnect)\"\n    ],\n    \"pg_connection_status\": [\n        \"int pg_connection_status(resource connnection)\",\n        \"Get connection status\"\n    ],\n    \"pg_convert\": [\n        \"array pg_convert(resource db, string table, array values[, int options])\",\n        \"Check and convert values for PostgreSQL SQL statement\"\n    ],\n    \"pg_copy_from\": [\n        \"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\n        \"Copy table from array\"\n    ],\n    \"pg_copy_to\": [\n        \"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\n        \"Copy table to array\"\n    ],\n    \"pg_dbname\": [\n        \"string pg_dbname([resource connection])\",\n        \"Get the database name\"\n    ],\n    \"pg_delete\": [\n        \"mixed pg_delete(resource db, string table, array ids[, int options])\",\n        \"Delete records has ids (id => value)\"\n    ],\n    \"pg_end_copy\": [\n        \"bool pg_end_copy([resource connection])\",\n        \"Sync with backend. Completes the Copy command\"\n    ],\n    \"pg_escape_bytea\": [\n        \"string pg_escape_bytea([resource connection,] string data)\",\n        \"Escape binary for bytea type\"\n    ],\n    \"pg_escape_string\": [\n        \"string pg_escape_string([resource connection,] string data)\",\n        \"Escape string for text/char type\"\n    ],\n    \"pg_execute\": [\n        \"resource pg_execute([resource connection,] string stmtname, array params)\",\n        \"Execute a prepared query\"\n    ],\n    \"pg_fetch_all\": [\n        \"array pg_fetch_all(resource result)\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_all_columns\": [\n        \"array pg_fetch_all_columns(resource result [, int column_number])\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_array\": [\n        \"array pg_fetch_array(resource result [, int row [, int result_type]])\",\n        \"Fetch a row as an array\"\n    ],\n    \"pg_fetch_assoc\": [\n        \"array pg_fetch_assoc(resource result [, int row])\",\n        \"Fetch a row as an assoc array\"\n    ],\n    \"pg_fetch_object\": [\n        \"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\n        \"Fetch a row as an object\"\n    ],\n    \"pg_fetch_result\": [\n        \"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\n        \"Returns values from a result identifier\"\n    ],\n    \"pg_fetch_row\": [\n        \"array pg_fetch_row(resource result [, int row [, int result_type]])\",\n        \"Get a row as an enumerated array\"\n    ],\n    \"pg_field_is_null\": [\n        \"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\n        \"Test if a field is NULL\"\n    ],\n    \"pg_field_name\": [\n        \"string pg_field_name(resource result, int field_number)\",\n        \"Returns the name of the field\"\n    ],\n    \"pg_field_num\": [\n        \"int pg_field_num(resource result, string field_name)\",\n        \"Returns the field number of the named field\"\n    ],\n    \"pg_field_prtlen\": [\n        \"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\n        \"Returns the printed length\"\n    ],\n    \"pg_field_size\": [\n        \"int pg_field_size(resource result, int field_number)\",\n        \"Returns the internal size of the field\"\n    ],\n    \"pg_field_table\": [\n        \"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\n        \"Returns the name of the table field belongs to, or table's oid if oid_only is true\"\n    ],\n    \"pg_field_type\": [\n        \"string pg_field_type(resource result, int field_number)\",\n        \"Returns the type name for the given field\"\n    ],\n    \"pg_field_type_oid\": [\n        \"string pg_field_type_oid(resource result, int field_number)\",\n        \"Returns the type oid for the given field\"\n    ],\n    \"pg_free_result\": [\n        \"bool pg_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"pg_get_notify\": [\n        \"array pg_get_notify([resource connection[, result_type]])\",\n        \"Get asynchronous notification\"\n    ],\n    \"pg_get_pid\": [\n        \"int pg_get_pid([resource connection)\",\n        \"Get backend(server) pid\"\n    ],\n    \"pg_get_result\": [\n        \"resource pg_get_result(resource connection)\",\n        \"Get asynchronous query result\"\n    ],\n    \"pg_host\": [\n        \"string pg_host([resource connection])\",\n        \"Returns the host name associated with the connection\"\n    ],\n    \"pg_insert\": [\n        \"mixed pg_insert(resource db, string table, array values[, int options])\",\n        \"Insert values (filed => value) to table\"\n    ],\n    \"pg_last_error\": [\n        \"string pg_last_error([resource connection])\",\n        \"Get the error message string\"\n    ],\n    \"pg_last_notice\": [\n        \"string pg_last_notice(resource connection)\",\n        \"Returns the last notice set by the backend\"\n    ],\n    \"pg_last_oid\": [\n        \"string pg_last_oid(resource result)\",\n        \"Returns the last object identifier\"\n    ],\n    \"pg_lo_close\": [\n        \"bool pg_lo_close(resource large_object)\",\n        \"Close a large object\"\n    ],\n    \"pg_lo_create\": [\n        \"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\n        \"Create a large object\"\n    ],\n    \"pg_lo_export\": [\n        \"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\n        \"Export large object direct to filesystem\"\n    ],\n    \"pg_lo_import\": [\n        \"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\n        \"Import large object direct from filesystem\"\n    ],\n    \"pg_lo_open\": [\n        \"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\n        \"Open a large object and return fd\"\n    ],\n    \"pg_lo_read\": [\n        \"string pg_lo_read(resource large_object [, int len])\",\n        \"Read a large object\"\n    ],\n    \"pg_lo_read_all\": [\n        \"int pg_lo_read_all(resource large_object)\",\n        \"Read a large object and send straight to browser\"\n    ],\n    \"pg_lo_seek\": [\n        \"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\n        \"Seeks position of large object\"\n    ],\n    \"pg_lo_tell\": [\n        \"int pg_lo_tell(resource large_object)\",\n        \"Returns current position of large object\"\n    ],\n    \"pg_lo_unlink\": [\n        \"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\n        \"Delete a large object\"\n    ],\n    \"pg_lo_write\": [\n        \"int pg_lo_write(resource large_object, string buf [, int len])\",\n        \"Write a large object\"\n    ],\n    \"pg_meta_data\": [\n        \"array pg_meta_data(resource db, string table)\",\n        \"Get meta_data\"\n    ],\n    \"pg_num_fields\": [\n        \"int pg_num_fields(resource result)\",\n        \"Return the number of fields in the result\"\n    ],\n    \"pg_num_rows\": [\n        \"int pg_num_rows(resource result)\",\n        \"Return the number of rows in the result\"\n    ],\n    \"pg_options\": [\n        \"string pg_options([resource connection])\",\n        \"Get the options associated with the connection\"\n    ],\n    \"pg_parameter_status\": [\n        \"string|false pg_parameter_status([resource connection,] string param_name)\",\n        \"Returns the value of a server parameter\"\n    ],\n    \"pg_pconnect\": [\n        \"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a persistent PostgreSQL connection\"\n    ],\n    \"pg_ping\": [\n        \"bool pg_ping([resource connection])\",\n        \"Ping database. If connection is bad, try to reconnect.\"\n    ],\n    \"pg_port\": [\n        \"int pg_port([resource connection])\",\n        \"Return the port number associated with the connection\"\n    ],\n    \"pg_prepare\": [\n        \"resource pg_prepare([resource connection,] string stmtname, string query)\",\n        \"Prepare a query for future execution\"\n    ],\n    \"pg_put_line\": [\n        \"bool pg_put_line([resource connection,] string query)\",\n        \"Send null-terminated string to backend server\"\n    ],\n    \"pg_query\": [\n        \"resource pg_query([resource connection,] string query)\",\n        \"Execute a query\"\n    ],\n    \"pg_query_params\": [\n        \"resource pg_query_params([resource connection,] string query, array params)\",\n        \"Execute a query\"\n    ],\n    \"pg_result_error\": [\n        \"string pg_result_error(resource result)\",\n        \"Get error message associated with result\"\n    ],\n    \"pg_result_error_field\": [\n        \"string pg_result_error_field(resource result, int fieldcode)\",\n        \"Get error message field associated with result\"\n    ],\n    \"pg_result_seek\": [\n        \"bool pg_result_seek(resource result, int offset)\",\n        \"Set internal row offset\"\n    ],\n    \"pg_result_status\": [\n        \"mixed pg_result_status(resource result[, long result_type])\",\n        \"Get status of query result\"\n    ],\n    \"pg_select\": [\n        \"mixed pg_select(resource db, string table, array ids[, int options])\",\n        \"Select records that has ids (id => value)\"\n    ],\n    \"pg_send_execute\": [\n        \"bool pg_send_execute(resource connection, string stmtname, array params)\",\n        \"Executes prevriously prepared stmtname asynchronously\"\n    ],\n    \"pg_send_prepare\": [\n        \"bool pg_send_prepare(resource connection, string stmtname, string query)\",\n        \"Asynchronously prepare a query for future execution\"\n    ],\n    \"pg_send_query\": [\n        \"bool pg_send_query(resource connection, string query)\",\n        \"Send asynchronous query\"\n    ],\n    \"pg_send_query_params\": [\n        \"bool pg_send_query_params(resource connection, string query, array params)\",\n        \"Send asynchronous parameterized query\"\n    ],\n    \"pg_set_client_encoding\": [\n        \"int pg_set_client_encoding([resource connection,] string encoding)\",\n        \"Set client encoding\"\n    ],\n    \"pg_set_error_verbosity\": [\n        \"int pg_set_error_verbosity([resource connection,] int verbosity)\",\n        \"Set error verbosity\"\n    ],\n    \"pg_trace\": [\n        \"bool pg_trace(string filename [, string mode [, resource connection]])\",\n        \"Enable tracing a PostgreSQL connection\"\n    ],\n    \"pg_transaction_status\": [\n        \"int pg_transaction_status(resource connnection)\",\n        \"Get transaction status\"\n    ],\n    \"pg_tty\": [\n        \"string pg_tty([resource connection])\",\n        \"Return the tty name associated with the connection\"\n    ],\n    \"pg_unescape_bytea\": [\n        \"string pg_unescape_bytea(string data)\",\n        \"Unescape binary for bytea type\"\n    ],\n    \"pg_untrace\": [\n        \"bool pg_untrace([resource connection])\",\n        \"Disable tracing of a PostgreSQL connection\"\n    ],\n    \"pg_update\": [\n        \"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\n        \"Update table using values (field => value) and ids (id => value)\"\n    ],\n    \"pg_version\": [\n        \"array pg_version([resource connection])\",\n        \"Returns an array with client, protocol and server version (when available)\"\n    ],\n    \"php_egg_logo_guid\": [\n        \"string php_egg_logo_guid()\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_ini_loaded_file\": [\n        \"string php_ini_loaded_file()\",\n        \"Return the actual loaded ini filename\"\n    ],\n    \"php_ini_scanned_files\": [\n        \"string php_ini_scanned_files()\",\n        \"Return comma-separated string of .ini files parsed from the additional ini dir\"\n    ],\n    \"php_logo_guid\": [\n        \"string php_logo_guid()\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_real_logo_guid\": [\n        \"string php_real_logo_guid()\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_sapi_name\": [\n        \"string php_sapi_name()\",\n        \"Return the current SAPI module name\"\n    ],\n    \"php_snmpv3\": [\n        \"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\n        \"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"\n    ],\n    \"php_strip_whitespace\": [\n        \"string php_strip_whitespace(string file_name)\",\n        \"Return source with stripped comments and whitespace\"\n    ],\n    \"php_uname\": [\n        \"string php_uname()\",\n        \"Return information about the system PHP was built on\"\n    ],\n    \"phpcredits\": [\n        \"void phpcredits([int flag])\",\n        \"Prints the list of people who've contributed to the PHP project\"\n    ],\n    \"phpinfo\": [\n        \"void phpinfo([int what])\",\n        \"Output a page of useful information about PHP and the current request\"\n    ],\n    \"phpversion\": [\n        \"string phpversion([string extension])\",\n        \"Return the current PHP version\"\n    ],\n    \"pi\": [\n        \"float pi()\",\n        \"Returns an approximation of pi\"\n    ],\n    \"png2wbmp\": [\n        \"bool png2wbmp(string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert PNG image to WBMP image\"\n    ],\n    \"popen\": [\n        \"resource popen(string command, string mode)\",\n        \"Execute a command and open either a read or a write pipe to it\"\n    ],\n    \"posix_access\": [\n        \"bool posix_access(string file [, int mode])\",\n        \"Determine accessibility of a file (POSIX.1 5.6.3)\"\n    ],\n    \"posix_ctermid\": [\n        \"string posix_ctermid()\",\n        \"Generate terminal path name (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_get_last_error\": [\n        \"int posix_get_last_error()\",\n        \"Retrieve the error number set by the last posix function which failed.\"\n    ],\n    \"posix_getcwd\": [\n        \"string posix_getcwd()\",\n        \"Get working directory pathname (POSIX.1, 5.2.2)\"\n    ],\n    \"posix_getegid\": [\n        \"int posix_getegid()\",\n        \"Get the current effective group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_geteuid\": [\n        \"int posix_geteuid()\",\n        \"Get the current effective user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgid\": [\n        \"int posix_getgid()\",\n        \"Get the current group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgrgid\": [\n        \"array posix_getgrgid(long gid)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgrnam\": [\n        \"array posix_getgrnam(string groupname)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgroups\": [\n        \"array posix_getgroups()\",\n        \"Get supplementary group id's (POSIX.1, 4.2.3)\"\n    ],\n    \"posix_getlogin\": [\n        \"string posix_getlogin()\",\n        \"Get user name (POSIX.1, 4.2.4)\"\n    ],\n    \"posix_getpgid\": [\n        \"int posix_getpgid()\",\n        \"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"\n    ],\n    \"posix_getpgrp\": [\n        \"int posix_getpgrp()\",\n        \"Get current process group id (POSIX.1, 4.3.1)\"\n    ],\n    \"posix_getpid\": [\n        \"int posix_getpid()\",\n        \"Get the current process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getppid\": [\n        \"int posix_getppid()\",\n        \"Get the parent process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getpwnam\": [\n        \"array posix_getpwnam(string groupname)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getpwuid\": [\n        \"array posix_getpwuid(long uid)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getrlimit\": [\n        \"array posix_getrlimit()\",\n        \"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"\n    ],\n    \"posix_getsid\": [\n        \"int posix_getsid()\",\n        \"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"\n    ],\n    \"posix_getuid\": [\n        \"int posix_getuid()\",\n        \"Get the current user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_initgroups\": [\n        \"bool posix_initgroups(string name, int base_group_id)\",\n        \"Calculate the group access list for the user specified in name.\"\n    ],\n    \"posix_isatty\": [\n        \"bool posix_isatty(int fd)\",\n        \"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_kill\": [\n        \"bool posix_kill(int pid, int sig)\",\n        \"Send a signal to a process (POSIX.1, 3.3.2)\"\n    ],\n    \"posix_mkfifo\": [\n        \"bool posix_mkfifo(string pathname, int mode)\",\n        \"Make a FIFO special file (POSIX.1, 5.4.2)\"\n    ],\n    \"posix_mknod\": [\n        \"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\n        \"Make a special or ordinary file (POSIX.1)\"\n    ],\n    \"posix_setegid\": [\n        \"bool posix_setegid(long uid)\",\n        \"Set effective group id\"\n    ],\n    \"posix_seteuid\": [\n        \"bool posix_seteuid(long uid)\",\n        \"Set effective user id\"\n    ],\n    \"posix_setgid\": [\n        \"bool posix_setgid(int uid)\",\n        \"Set group id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_setpgid\": [\n        \"bool posix_setpgid(int pid, int pgid)\",\n        \"Set process group id for job control (POSIX.1, 4.3.3)\"\n    ],\n    \"posix_setsid\": [\n        \"int posix_setsid()\",\n        \"Create session and set process group id (POSIX.1, 4.3.2)\"\n    ],\n    \"posix_setuid\": [\n        \"bool posix_setuid(long uid)\",\n        \"Set user id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_strerror\": [\n        \"string posix_strerror(int errno)\",\n        \"Retrieve the system error message associated with the given errno.\"\n    ],\n    \"posix_times\": [\n        \"array posix_times()\",\n        \"Get process times (POSIX.1, 4.5.2)\"\n    ],\n    \"posix_ttyname\": [\n        \"string posix_ttyname(int fd)\",\n        \"Determine terminal device name (POSIX.1, 4.7.2)\"\n    ],\n    \"posix_uname\": [\n        \"array posix_uname()\",\n        \"Get system name (POSIX.1, 4.4.1)\"\n    ],\n    \"pow\": [\n        \"number pow(number base, number exponent)\",\n        \"Returns base raised to the power of exponent. Returns integer result when possible\"\n    ],\n    \"preg_filter\": [\n        \"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement and only return matches.\"\n    ],\n    \"preg_grep\": [\n        \"array preg_grep(string regex, array input [, int flags])\",\n        \"Searches array and returns entries which match regex\"\n    ],\n    \"preg_last_error\": [\n        \"int preg_last_error()\",\n        \"Returns the error code of the last regexp execution.\"\n    ],\n    \"preg_match\": [\n        \"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\n        \"Perform a Perl-style regular expression match\"\n    ],\n    \"preg_match_all\": [\n        \"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\n        \"Perform a Perl-style global regular expression match\"\n    ],\n    \"preg_quote\": [\n        \"string preg_quote(string str [, string delim_char])\",\n        \"Quote regular expression characters plus an optional character\"\n    ],\n    \"preg_replace\": [\n        \"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement.\"\n    ],\n    \"preg_replace_callback\": [\n        \"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement using replacement callback.\"\n    ],\n    \"preg_split\": [\n        \"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\n        \"Split string into an array using a perl-style regular expression as a delimiter\"\n    ],\n    \"prev\": [\n        \"mixed prev(array array_arg)\",\n        \"Move array argument's internal pointer to the previous element and return it\"\n    ],\n    \"print\": [\n        \"int print(string arg)\",\n        \"Output a string\"\n    ],\n    \"print_r\": [\n        \"mixed print_r(mixed var [, bool return])\",\n        \"Prints out or returns information about the specified variable\"\n    ],\n    \"printf\": [\n        \"int printf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string\"\n    ],\n    \"proc_close\": [\n        \"int proc_close(resource process)\",\n        \"close a process opened by proc_open\"\n    ],\n    \"proc_get_status\": [\n        \"array proc_get_status(resource process)\",\n        \"get information about a process opened by proc_open\"\n    ],\n    \"proc_nice\": [\n        \"bool proc_nice(int priority)\",\n        \"Change the priority of the current process\"\n    ],\n    \"proc_open\": [\n        \"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\n        \"Run a process with more control over it's file descriptors\"\n    ],\n    \"proc_terminate\": [\n        \"bool proc_terminate(resource process [, long signal])\",\n        \"kill a process opened by proc_open\"\n    ],\n    \"property_exists\": [\n        \"bool property_exists(mixed object_or_class, string property_name)\",\n        \"Checks if the object or class has a property\"\n    ],\n    \"pspell_add_to_personal\": [\n        \"bool pspell_add_to_personal(int pspell, string word)\",\n        \"Adds a word to a personal list\"\n    ],\n    \"pspell_add_to_session\": [\n        \"bool pspell_add_to_session(int pspell, string word)\",\n        \"Adds a word to the current session\"\n    ],\n    \"pspell_check\": [\n        \"bool pspell_check(int pspell, string word)\",\n        \"Returns true if word is valid\"\n    ],\n    \"pspell_clear_session\": [\n        \"bool pspell_clear_session(int pspell)\",\n        \"Clears the current session\"\n    ],\n    \"pspell_config_create\": [\n        \"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\n        \"Create a new config to be used later to create a manager\"\n    ],\n    \"pspell_config_data_dir\": [\n        \"bool pspell_config_data_dir(int conf, string directory)\",\n        \"location of language data files\"\n    ],\n    \"pspell_config_dict_dir\": [\n        \"bool pspell_config_dict_dir(int conf, string directory)\",\n        \"location of the main word list\"\n    ],\n    \"pspell_config_ignore\": [\n        \"bool pspell_config_ignore(int conf, int ignore)\",\n        \"Ignore words <= n chars\"\n    ],\n    \"pspell_config_mode\": [\n        \"bool pspell_config_mode(int conf, long mode)\",\n        \"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"\n    ],\n    \"pspell_config_personal\": [\n        \"bool pspell_config_personal(int conf, string personal)\",\n        \"Use a personal dictionary for this config\"\n    ],\n    \"pspell_config_repl\": [\n        \"bool pspell_config_repl(int conf, string repl)\",\n        \"Use a personal dictionary with replacement pairs for this config\"\n    ],\n    \"pspell_config_runtogether\": [\n        \"bool pspell_config_runtogether(int conf, bool runtogether)\",\n        \"Consider run-together words as valid components\"\n    ],\n    \"pspell_config_save_repl\": [\n        \"bool pspell_config_save_repl(int conf, bool save)\",\n        \"Save replacement pairs when personal list is saved for this config\"\n    ],\n    \"pspell_new\": [\n        \"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary\"\n    ],\n    \"pspell_new_config\": [\n        \"int pspell_new_config(int config)\",\n        \"Load a dictionary based on the given config\"\n    ],\n    \"pspell_new_personal\": [\n        \"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary with a personal wordlist\"\n    ],\n    \"pspell_save_wordlist\": [\n        \"bool pspell_save_wordlist(int pspell)\",\n        \"Saves the current (personal) wordlist\"\n    ],\n    \"pspell_store_replacement\": [\n        \"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\n        \"Notify the dictionary of a user-selected replacement\"\n    ],\n    \"pspell_suggest\": [\n        \"array pspell_suggest(int pspell, string word)\",\n        \"Returns array of suggestions\"\n    ],\n    \"putenv\": [\n        \"bool putenv(string setting)\",\n        \"Set the value of an environment variable\"\n    ],\n    \"quoted_printable_decode\": [\n        \"string quoted_printable_decode(string str)\",\n        \"Convert a quoted-printable string to an 8 bit string\"\n    ],\n    \"quoted_printable_encode\": [\n        \"string quoted_printable_encode(string str)\",\n        \"\"\n    ],\n    \"quotemeta\": [\n        \"string quotemeta(string str)\",\n        \"Quotes meta characters\"\n    ],\n    \"rad2deg\": [\n        \"float rad2deg(float number)\",\n        \"Converts the radian number to the equivalent number in degrees\"\n    ],\n    \"rand\": [\n        \"int rand([int min, int max])\",\n        \"Returns a random number\"\n    ],\n    \"range\": [\n        \"array range(mixed low, mixed high[, int step])\",\n        \"Create an array containing the range of integers or characters from low to high (inclusive)\"\n    ],\n    \"rawurldecode\": [\n        \"string rawurldecode(string str)\",\n        \"Decodes URL-encodes string\"\n    ],\n    \"rawurlencode\": [\n        \"string rawurlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"readdir\": [\n        \"string readdir([resource dir_handle])\",\n        \"Read directory entry from dir_handle\"\n    ],\n    \"readfile\": [\n        \"int readfile(string filename [, bool use_include_path[, resource context]])\",\n        \"Output a file or a URL\"\n    ],\n    \"readgzfile\": [\n        \"int readgzfile(string filename [, int use_include_path])\",\n        \"Output a .gz-file\"\n    ],\n    \"readline\": [\n        \"string readline([string prompt])\",\n        \"Reads a line\"\n    ],\n    \"readline_add_history\": [\n        \"bool readline_add_history(string prompt)\",\n        \"Adds a line to the history\"\n    ],\n    \"readline_callback_handler_install\": [\n        \"void readline_callback_handler_install(string prompt, mixed callback)\",\n        \"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"\n    ],\n    \"readline_callback_handler_remove\": [\n        \"bool readline_callback_handler_remove()\",\n        \"Removes a previously installed callback handler and restores terminal settings\"\n    ],\n    \"readline_callback_read_char\": [\n        \"void readline_callback_read_char()\",\n        \"Informs the readline callback interface that a character is ready for input\"\n    ],\n    \"readline_clear_history\": [\n        \"bool readline_clear_history()\",\n        \"Clears the history\"\n    ],\n    \"readline_completion_function\": [\n        \"bool readline_completion_function(string funcname)\",\n        \"Readline completion function?\"\n    ],\n    \"readline_info\": [\n        \"mixed readline_info([string varname [, string newvalue]])\",\n        \"Gets/sets various internal readline variables.\"\n    ],\n    \"readline_list_history\": [\n        \"array readline_list_history()\",\n        \"Lists the history\"\n    ],\n    \"readline_on_new_line\": [\n        \"void readline_on_new_line()\",\n        \"Inform readline that the cursor has moved to a new line\"\n    ],\n    \"readline_read_history\": [\n        \"bool readline_read_history([string filename])\",\n        \"Reads the history\"\n    ],\n    \"readline_redisplay\": [\n        \"void readline_redisplay()\",\n        \"Ask readline to redraw the display\"\n    ],\n    \"readline_write_history\": [\n        \"bool readline_write_history([string filename])\",\n        \"Writes the history\"\n    ],\n    \"readlink\": [\n        \"string readlink(string filename)\",\n        \"Return the target of a symbolic link\"\n    ],\n    \"realpath\": [\n        \"string realpath(string path)\",\n        \"Return the resolved path\"\n    ],\n    \"realpath_cache_get\": [\n        \"bool realpath_cache_get()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"realpath_cache_size\": [\n        \"bool realpath_cache_size()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"recode_file\": [\n        \"bool recode_file(string request, resource input, resource output)\",\n        \"Recode file input into file output according to request\"\n    ],\n    \"recode_string\": [\n        \"string recode_string(string request, string str)\",\n        \"Recode string str according to request string\"\n    ],\n    \"register_shutdown_function\": [\n        \"void register_shutdown_function(string function_name)\",\n        \"Register a user-level function to be called on request termination\"\n    ],\n    \"register_tick_function\": [\n        \"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\n        \"Registers a tick callback function\"\n    ],\n    \"rename\": [\n        \"bool rename(string old_name, string new_name[, resource context])\",\n        \"Rename a file\"\n    ],\n    \"require\": [\n        \"bool require(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"require_once\": [\n        \"bool require_once(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"reset\": [\n        \"mixed reset(array array_arg)\",\n        \"Set array argument's internal pointer to the first element and return it\"\n    ],\n    \"restore_error_handler\": [\n        \"void restore_error_handler()\",\n        \"Restores the previously defined error handler function\"\n    ],\n    \"restore_exception_handler\": [\n        \"void restore_exception_handler()\",\n        \"Restores the previously defined exception handler function\"\n    ],\n    \"restore_include_path\": [\n        \"void restore_include_path()\",\n        \"Restore the value of the include_path configuration option\"\n    ],\n    \"rewind\": [\n        \"bool rewind(resource fp)\",\n        \"Rewind the position of a file pointer\"\n    ],\n    \"rewinddir\": [\n        \"void rewinddir([resource dir_handle])\",\n        \"Rewind dir_handle back to the start\"\n    ],\n    \"rmdir\": [\n        \"bool rmdir(string dirname[, resource context])\",\n        \"Remove a directory\"\n    ],\n    \"round\": [\n        \"float round(float number [, int precision [, int mode]])\",\n        \"Returns the number rounded to specified precision\"\n    ],\n    \"rsort\": [\n        \"bool rsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order\"\n    ],\n    \"rtrim\": [\n        \"string rtrim(string str [, string character_mask])\",\n        \"Removes trailing whitespace\"\n    ],\n    \"scandir\": [\n        \"array scandir(string dir [, int sorting_order [, resource context]])\",\n        \"List files & directories inside the specified path\"\n    ],\n    \"sem_acquire\": [\n        \"bool sem_acquire(resource id)\",\n        \"Acquires the semaphore with the given id, blocking if necessary\"\n    ],\n    \"sem_get\": [\n        \"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\n        \"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"\n    ],\n    \"sem_release\": [\n        \"bool sem_release(resource id)\",\n        \"Releases the semaphore with the given id\"\n    ],\n    \"sem_remove\": [\n        \"bool sem_remove(resource id)\",\n        \"Removes semaphore from Unix systems\"\n    ],\n    \"serialize\": [\n        \"string serialize(mixed variable)\",\n        \"Returns a string representation of variable (which can later be unserialized)\"\n    ],\n    \"session_cache_expire\": [\n        \"int session_cache_expire([int new_cache_expire])\",\n        \"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"\n    ],\n    \"session_cache_limiter\": [\n        \"string session_cache_limiter([string new_cache_limiter])\",\n        \"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"\n    ],\n    \"session_decode\": [\n        \"bool session_decode(string data)\",\n        \"Deserializes data and reinitializes the variables\"\n    ],\n    \"session_destroy\": [\n        \"bool session_destroy()\",\n        \"Destroy the current session and all data associated with it\"\n    ],\n    \"session_encode\": [\n        \"string session_encode()\",\n        \"Serializes the current setup and returns the serialized representation\"\n    ],\n    \"session_get_cookie_params\": [\n        \"array session_get_cookie_params()\",\n        \"Return the session cookie parameters\"\n    ],\n    \"session_id\": [\n        \"string session_id([string newid])\",\n        \"Return the current session id. If newid is given, the session id is replaced with newid\"\n    ],\n    \"session_is_registered\": [\n        \"bool session_is_registered(string varname)\",\n        \"Checks if a variable is registered in session\"\n    ],\n    \"session_module_name\": [\n        \"string session_module_name([string newname])\",\n        \"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"\n    ],\n    \"session_name\": [\n        \"string session_name([string newname])\",\n        \"Return the current session name. If newname is given, the session name is replaced with newname\"\n    ],\n    \"session_regenerate_id\": [\n        \"bool session_regenerate_id([bool delete_old_session])\",\n        \"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"\n    ],\n    \"session_register\": [\n        \"bool session_register(mixed var_names [, mixed ...])\",\n        \"Adds varname(s) to the list of variables which are freezed at the session end\"\n    ],\n    \"session_save_path\": [\n        \"string session_save_path([string newname])\",\n        \"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"\n    ],\n    \"session_set_cookie_params\": [\n        \"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\n        \"Set session cookie parameters\"\n    ],\n    \"session_set_save_handler\": [\n        \"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\n        \"Sets user-level functions\"\n    ],\n    \"session_start\": [\n        \"bool session_start()\",\n        \"Begin session - reinitializes freezed variables, registers browsers etc\"\n    ],\n    \"session_unregister\": [\n        \"bool session_unregister(string varname)\",\n        \"Removes varname from the list of variables which are freezed at the session end\"\n    ],\n    \"session_unset\": [\n        \"void session_unset()\",\n        \"Unset all registered variables\"\n    ],\n    \"session_write_close\": [\n        \"void session_write_close()\",\n        \"Write session data and end session\"\n    ],\n    \"set_error_handler\": [\n        \"string set_error_handler(string error_handler [, int error_types])\",\n        \"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"\n    ],\n    \"set_exception_handler\": [\n        \"string set_exception_handler(callable exception_handler)\",\n        \"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"\n    ],\n    \"set_include_path\": [\n        \"string set_include_path(string new_include_path)\",\n        \"Sets the include_path configuration option\"\n    ],\n    \"set_magic_quotes_runtime\": [\n        \"bool set_magic_quotes_runtime(int new_setting)\",\n        \"Set the current active configuration setting of magic_quotes_runtime and return previous\"\n    ],\n    \"set_time_limit\": [\n        \"bool set_time_limit(int seconds)\",\n        \"Sets the maximum time a script can run\"\n    ],\n    \"setcookie\": [\n        \"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie\"\n    ],\n    \"setlocale\": [\n        \"string setlocale(mixed category, string locale [, string ...])\",\n        \"Set locale information\"\n    ],\n    \"setrawcookie\": [\n        \"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie with no url encoding of the value\"\n    ],\n    \"settype\": [\n        \"bool settype(mixed var, string type)\",\n        \"Set the type of the variable\"\n    ],\n    \"sha1\": [\n        \"string sha1(string str [, bool raw_output])\",\n        \"Calculate the sha1 hash of a string\"\n    ],\n    \"sha1_file\": [\n        \"string sha1_file(string filename [, bool raw_output])\",\n        \"Calculate the sha1 hash of given filename\"\n    ],\n    \"shell_exec\": [\n        \"string shell_exec(string cmd)\",\n        \"Execute command via shell and return complete output as string\"\n    ],\n    \"shm_attach\": [\n        \"int shm_attach(int key [, int memsize [, int perm]])\",\n        \"Creates or open a shared memory segment\"\n    ],\n    \"shm_detach\": [\n        \"bool shm_detach(resource shm_identifier)\",\n        \"Disconnects from shared memory segment\"\n    ],\n    \"shm_get_var\": [\n        \"mixed shm_get_var(resource id, int variable_key)\",\n        \"Returns a variable from shared memory\"\n    ],\n    \"shm_has_var\": [\n        \"bool shm_has_var(resource id, int variable_key)\",\n        \"Checks whether a specific entry exists\"\n    ],\n    \"shm_put_var\": [\n        \"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\n        \"Inserts or updates a variable in shared memory\"\n    ],\n    \"shm_remove\": [\n        \"bool shm_remove(resource shm_identifier)\",\n        \"Removes shared memory from Unix systems\"\n    ],\n    \"shm_remove_var\": [\n        \"bool shm_remove_var(resource id, int variable_key)\",\n        \"Removes variable from shared memory\"\n    ],\n    \"shmop_close\": [\n        \"void shmop_close(int shmid)\",\n        \"closes a shared memory segment\"\n    ],\n    \"shmop_delete\": [\n        \"bool shmop_delete(int shmid)\",\n        \"mark segment for deletion\"\n    ],\n    \"shmop_open\": [\n        \"int shmop_open(int key, string flags, int mode, int size)\",\n        \"gets and attaches a shared memory segment\"\n    ],\n    \"shmop_read\": [\n        \"string shmop_read(int shmid, int start, int count)\",\n        \"reads from a shm segment\"\n    ],\n    \"shmop_size\": [\n        \"int shmop_size(int shmid)\",\n        \"returns the shm size\"\n    ],\n    \"shmop_write\": [\n        \"int shmop_write(int shmid, string data, int offset)\",\n        \"writes to a shared memory segment\"\n    ],\n    \"shuffle\": [\n        \"bool shuffle(array array_arg)\",\n        \"Randomly shuffle the contents of an array\"\n    ],\n    \"similar_text\": [\n        \"int similar_text(string str1, string str2 [, float percent])\",\n        \"Calculates the similarity between two strings\"\n    ],\n    \"simplexml_import_dom\": [\n        \"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"simplexml_load_file\": [\n        \"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a filename and return a simplexml_element object to allow for processing\"\n    ],\n    \"simplexml_load_string\": [\n        \"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a string and return a simplexml_element object to allow for processing\"\n    ],\n    \"sin\": [\n        \"float sin(float number)\",\n        \"Returns the sine of the number in radians\"\n    ],\n    \"sinh\": [\n        \"float sinh(float number)\",\n        \"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2\"\n    ],\n    \"sleep\": [\n        \"void sleep(int seconds)\",\n        \"Delay for a given number of seconds\"\n    ],\n    \"smfi_addheader\": [\n        \"bool smfi_addheader(string headerf, string headerv)\",\n        \"Adds a header to the current message.\"\n    ],\n    \"smfi_addrcpt\": [\n        \"bool smfi_addrcpt(string rcpt)\",\n        \"Add a recipient to the message envelope.\"\n    ],\n    \"smfi_chgheader\": [\n        \"bool smfi_chgheader(string headerf, string headerv)\",\n        \"Changes a header's value for the current message.\"\n    ],\n    \"smfi_delrcpt\": [\n        \"bool smfi_delrcpt(string rcpt)\",\n        \"Removes the named recipient from the current message's envelope.\"\n    ],\n    \"smfi_getsymval\": [\n        \"string smfi_getsymval(string macro)\",\n        \"Returns the value of the given macro or NULL if the macro is not defined.\"\n    ],\n    \"smfi_replacebody\": [\n        \"bool smfi_replacebody(string body)\",\n        \"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"\n    ],\n    \"smfi_setflags\": [\n        \"void smfi_setflags(long flags)\",\n        \"Sets the flags describing the actions the filter may take.\"\n    ],\n    \"smfi_setreply\": [\n        \"bool smfi_setreply(string rcode, string xcode, string message)\",\n        \"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"\n    ],\n    \"smfi_settimeout\": [\n        \"void smfi_settimeout(long timeout)\",\n        \"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"\n    ],\n    \"snmp2_get\": [\n        \"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_getnext\": [\n        \"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_real_walk\": [\n        \"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp2_set\": [\n        \"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmp2_walk\": [\n        \"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"snmp3_get\": [\n        \"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_getnext\": [\n        \"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_real_walk\": [\n        \"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_set\": [\n        \"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_walk\": [\n        \"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp_get_quick_print\": [\n        \"bool snmp_get_quick_print()\",\n        \"Return the current status of quick_print\"\n    ],\n    \"snmp_get_valueretrieval\": [\n        \"int snmp_get_valueretrieval()\",\n        \"Return the method how the SNMP values will be returned\"\n    ],\n    \"snmp_read_mib\": [\n        \"int snmp_read_mib(string filename)\",\n        \"Reads and parses a MIB file into the active MIB tree.\"\n    ],\n    \"snmp_set_enum_print\": [\n        \"void snmp_set_enum_print(int enum_print)\",\n        \"Return all values that are enums with their enum value instead of the raw integer\"\n    ],\n    \"snmp_set_oid_output_format\": [\n        \"void snmp_set_oid_output_format(int oid_format)\",\n        \"Set the OID output format.\"\n    ],\n    \"snmp_set_quick_print\": [\n        \"void snmp_set_quick_print(int quick_print)\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp_set_valueretrieval\": [\n        \"void snmp_set_valueretrieval(int method)\",\n        \"Specify the method how the SNMP values will be returned\"\n    ],\n    \"snmpget\": [\n        \"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmpgetnext\": [\n        \"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmprealwalk\": [\n        \"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmpset\": [\n        \"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmpwalk\": [\n        \"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"socket_accept\": [\n        \"resource socket_accept(resource socket)\",\n        \"Accepts a connection on the listening socket fd\"\n    ],\n    \"socket_bind\": [\n        \"bool socket_bind(resource socket, string addr [, int port])\",\n        \"Binds an open socket to a listening port, port is only specified in AF_INET family.\"\n    ],\n    \"socket_clear_error\": [\n        \"void socket_clear_error([resource socket])\",\n        \"Clears the error on the socket or the last error code.\"\n    ],\n    \"socket_close\": [\n        \"void socket_close(resource socket)\",\n        \"Closes a file descriptor\"\n    ],\n    \"socket_connect\": [\n        \"bool socket_connect(resource socket, string addr [, int port])\",\n        \"Opens a connection to addr:port on the socket specified by socket\"\n    ],\n    \"socket_create\": [\n        \"resource socket_create(int domain, int type, int protocol)\",\n        \"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"\n    ],\n    \"socket_create_listen\": [\n        \"resource socket_create_listen(int port[, int backlog])\",\n        \"Opens a socket on port to accept connections\"\n    ],\n    \"socket_create_pair\": [\n        \"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\n        \"Creates a pair of indistinguishable sockets and stores them in fds.\"\n    ],\n    \"socket_get_option\": [\n        \"mixed socket_get_option(resource socket, int level, int optname)\",\n        \"Gets socket options for the socket\"\n    ],\n    \"socket_getpeername\": [\n        \"bool socket_getpeername(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_getsockname\": [\n        \"bool socket_getsockname(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_last_error\": [\n        \"int socket_last_error([resource socket])\",\n        \"Returns the last socket error (either the last used or the provided socket resource)\"\n    ],\n    \"socket_listen\": [\n        \"bool socket_listen(resource socket[, int backlog])\",\n        \"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"\n    ],\n    \"socket_read\": [\n        \"string socket_read(resource socket, int length [, int type])\",\n        \"Reads a maximum of length bytes from socket\"\n    ],\n    \"socket_recv\": [\n        \"int socket_recv(resource socket, string &buf, int len, int flags)\",\n        \"Receives data from a connected socket\"\n    ],\n    \"socket_recvfrom\": [\n        \"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\n        \"Receives data from a socket, connected or not\"\n    ],\n    \"socket_select\": [\n        \"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"socket_send\": [\n        \"int socket_send(resource socket, string buf, int len, int flags)\",\n        \"Sends data to a connected socket\"\n    ],\n    \"socket_sendto\": [\n        \"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\n        \"Sends a message to a socket, whether it is connected or not\"\n    ],\n    \"socket_set_block\": [\n        \"bool socket_set_block(resource socket)\",\n        \"Sets blocking mode on a socket resource\"\n    ],\n    \"socket_set_nonblock\": [\n        \"bool socket_set_nonblock(resource socket)\",\n        \"Sets nonblocking mode on a socket resource\"\n    ],\n    \"socket_set_option\": [\n        \"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\n        \"Sets socket options for the socket\"\n    ],\n    \"socket_shutdown\": [\n        \"bool socket_shutdown(resource socket[, int how])\",\n        \"Shuts down a socket for receiving, sending, or both.\"\n    ],\n    \"socket_strerror\": [\n        \"string socket_strerror(int errno)\",\n        \"Returns a string describing an error\"\n    ],\n    \"socket_write\": [\n        \"int socket_write(resource socket, string buf[, int length])\",\n        \"Writes the buffer to the socket resource, length is optional\"\n    ],\n    \"solid_fetch_prev\": [\n        \"bool solid_fetch_prev(resource result_id)\",\n        \"\"\n    ],\n    \"sort\": [\n        \"bool sort(array &array_arg [, int sort_flags])\",\n        \"Sort an array\"\n    ],\n    \"soundex\": [\n        \"string soundex(string str)\",\n        \"Calculate the soundex key of a string\"\n    ],\n    \"spl_autoload\": [\n        \"void spl_autoload(string class_name [, string file_extensions])\",\n        \"Default implementation for __autoload()\"\n    ],\n    \"spl_autoload_call\": [\n        \"void spl_autoload_call(string class_name)\",\n        \"Try all registerd autoload function to load the requested class\"\n    ],\n    \"spl_autoload_extensions\": [\n        \"string spl_autoload_extensions([string file_extensions])\",\n        \"Register and return default file extensions for spl_autoload\"\n    ],\n    \"spl_autoload_functions\": [\n        \"false|array spl_autoload_functions()\",\n        \"Return all registered __autoload() functionns\"\n    ],\n    \"spl_autoload_register\": [\n        \"bool spl_autoload_register([mixed autoload_function = \\\"spl_autoload\\\" [, throw = true [, prepend]]])\",\n        \"Register given function as __autoload() implementation\"\n    ],\n    \"spl_autoload_unregister\": [\n        \"bool spl_autoload_unregister(mixed autoload_function)\",\n        \"Unregister given function as __autoload() implementation\"\n    ],\n    \"spl_classes\": [\n        \"array spl_classes()\",\n        \"Return an array containing the names of all clsses and interfaces defined in SPL\"\n    ],\n    \"spl_object_hash\": [\n        \"string spl_object_hash(object obj)\",\n        \"Return hash id for given object\"\n    ],\n    \"split\": [\n        \"array split(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression\"\n    ],\n    \"spliti\": [\n        \"array spliti(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression case-insensitive\"\n    ],\n    \"sprintf\": [\n        \"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Return a formatted string\"\n    ],\n    \"sql_regcase\": [\n        \"string sql_regcase(string string)\",\n        \"Make regular expression for case insensitive match\"\n    ],\n    \"sqlite_array_query\": [\n        \"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\n        \"Executes a query against a given database and returns an array of arrays.\"\n    ],\n    \"sqlite_busy_timeout\": [\n        \"void sqlite_busy_timeout(resource db, int ms)\",\n        \"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"\n    ],\n    \"sqlite_changes\": [\n        \"int sqlite_changes(resource db)\",\n        \"Returns the number of rows that were changed by the most recent SQL statement.\"\n    ],\n    \"sqlite_close\": [\n        \"void sqlite_close(resource db)\",\n        \"Closes an open sqlite database.\"\n    ],\n    \"sqlite_column\": [\n        \"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\n        \"Fetches a column from the current row of a result set.\"\n    ],\n    \"sqlite_create_aggregate\": [\n        \"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\n        \"Registers an aggregate function for queries.\"\n    ],\n    \"sqlite_create_function\": [\n        \"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",\n        \"Registers a \\\"regular\\\" function for queries.\"\n    ],\n    \"sqlite_current\": [\n        \"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the current row from a result set as an array.\"\n    ],\n    \"sqlite_error_string\": [\n        \"string sqlite_error_string(int error_code)\",\n        \"Returns the textual description of an error code.\"\n    ],\n    \"sqlite_escape_string\": [\n        \"string sqlite_escape_string(string item)\",\n        \"Escapes a string for use as a query parameter.\"\n    ],\n    \"sqlite_exec\": [\n        \"bool sqlite_exec(string query, resource db[, string &error_message])\",\n        \"Executes a result-less query against a given database\"\n    ],\n    \"sqlite_factory\": [\n        \"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_fetch_all\": [\n        \"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches all rows from a result set as an array of arrays.\"\n    ],\n    \"sqlite_fetch_array\": [\n        \"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the next row from a result set as an array.\"\n    ],\n    \"sqlite_fetch_column_types\": [\n        \"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\n        \"Return an array of column types from a particular table.\"\n    ],\n    \"sqlite_fetch_object\": [\n        \"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\n        \"Fetches the next row from a result set as an object.\"\n    ],\n    \"sqlite_fetch_single\": [\n        \"string sqlite_fetch_single(resource result [, bool decode_binary])\",\n        \"Fetches the first column of a result set as a string.\"\n    ],\n    \"sqlite_field_name\": [\n        \"string sqlite_field_name(resource result, int field_index)\",\n        \"Returns the name of a particular field of a result set.\"\n    ],\n    \"sqlite_has_prev\": [\n        \"bool sqlite_has_prev(resource result)\",\n        \"* Returns whether a previous row is available.\"\n    ],\n    \"sqlite_key\": [\n        \"int sqlite_key(resource result)\",\n        \"Return the current row index of a buffered result.\"\n    ],\n    \"sqlite_last_error\": [\n        \"int sqlite_last_error(resource db)\",\n        \"Returns the error code of the last error for a database.\"\n    ],\n    \"sqlite_last_insert_rowid\": [\n        \"int sqlite_last_insert_rowid(resource db)\",\n        \"Returns the rowid of the most recently inserted row.\"\n    ],\n    \"sqlite_libencoding\": [\n        \"string sqlite_libencoding()\",\n        \"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"\n    ],\n    \"sqlite_libversion\": [\n        \"string sqlite_libversion()\",\n        \"Returns the version of the linked SQLite library.\"\n    ],\n    \"sqlite_next\": [\n        \"bool sqlite_next(resource result)\",\n        \"Seek to the next row number of a result set.\"\n    ],\n    \"sqlite_num_fields\": [\n        \"int sqlite_num_fields(resource result)\",\n        \"Returns the number of fields in a result set.\"\n    ],\n    \"sqlite_num_rows\": [\n        \"int sqlite_num_rows(resource result)\",\n        \"Returns the number of rows in a buffered result set.\"\n    ],\n    \"sqlite_open\": [\n        \"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_popen\": [\n        \"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\n        \"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_prev\": [\n        \"bool sqlite_prev(resource result)\",\n        \"* Seek to the previous row number of a result set.\"\n    ],\n    \"sqlite_query\": [\n        \"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\n        \"Executes a query against a given database and returns a result handle.\"\n    ],\n    \"sqlite_rewind\": [\n        \"bool sqlite_rewind(resource result)\",\n        \"Seek to the first row number of a buffered result set.\"\n    ],\n    \"sqlite_seek\": [\n        \"bool sqlite_seek(resource result, int row)\",\n        \"Seek to a particular row number of a buffered result set.\"\n    ],\n    \"sqlite_single_query\": [\n        \"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\n        \"Executes a query and returns either an array for one single column or the value of the first row.\"\n    ],\n    \"sqlite_udf_decode_binary\": [\n        \"string sqlite_udf_decode_binary(string data)\",\n        \"Decode binary encoding on a string parameter passed to an UDF.\"\n    ],\n    \"sqlite_udf_encode_binary\": [\n        \"string sqlite_udf_encode_binary(string data)\",\n        \"Apply binary encoding (if required) to a string to return from an UDF.\"\n    ],\n    \"sqlite_unbuffered_query\": [\n        \"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\n        \"Executes a query that does not prefetch and buffer all data.\"\n    ],\n    \"sqlite_valid\": [\n        \"bool sqlite_valid(resource result)\",\n        \"Returns whether more rows are available.\"\n    ],\n    \"sqrt\": [\n        \"float sqrt(float number)\",\n        \"Returns the square root of the number\"\n    ],\n    \"srand\": [\n        \"void srand([int seed])\",\n        \"Seeds random number generator\"\n    ],\n    \"sscanf\": [\n        \"mixed sscanf(string str, string format [, string ...])\",\n        \"Implements an ANSI C compatible sscanf\"\n    ],\n    \"stat\": [\n        \"array stat(string filename)\",\n        \"Give information about a file\"\n    ],\n    \"str_getcsv\": [\n        \"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\n        \"Parse a CSV string into an array\"\n    ],\n    \"str_ireplace\": [\n        \"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace / case-insensitive\"\n    ],\n    \"str_pad\": [\n        \"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\n        \"Returns input string padded on the left or right to specified length with pad_string\"\n    ],\n    \"str_repeat\": [\n        \"string str_repeat(string input, int mult)\",\n        \"Returns the input string repeat mult times\"\n    ],\n    \"str_replace\": [\n        \"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace\"\n    ],\n    \"str_rot13\": [\n        \"string str_rot13(string str)\",\n        \"Perform the rot13 transform on a string\"\n    ],\n    \"str_shuffle\": [\n        \"void str_shuffle(string str)\",\n        \"Shuffles string. One permutation of all possible is created\"\n    ],\n    \"str_split\": [\n        \"array str_split(string str [, int split_length])\",\n        \"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"\n    ],\n    \"str_word_count\": [\n        \"mixed str_word_count(string str, [int format [, string charlist]])\",\n        \"Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, 'word' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \\\"'\\\" and \\\"-\\\" characters.\"\n    ],\n    \"strcasecmp\": [\n        \"int strcasecmp(string str1, string str2)\",\n        \"Binary safe case-insensitive string comparison\"\n    ],\n    \"strchr\": [\n        \"string strchr(string haystack, string needle)\",\n        \"An alias for strstr\"\n    ],\n    \"strcmp\": [\n        \"int strcmp(string str1, string str2)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strcoll\": [\n        \"int strcoll(string str1, string str2)\",\n        \"Compares two strings using the current locale\"\n    ],\n    \"strcspn\": [\n        \"int strcspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"\n    ],\n    \"stream_bucket_append\": [\n        \"void stream_bucket_append(resource brigade, resource bucket)\",\n        \"Append bucket to brigade\"\n    ],\n    \"stream_bucket_make_writeable\": [\n        \"object stream_bucket_make_writeable(resource brigade)\",\n        \"Return a bucket object from the brigade for operating on\"\n    ],\n    \"stream_bucket_new\": [\n        \"resource stream_bucket_new(resource stream, string buffer)\",\n        \"Create a new bucket for use on the current stream\"\n    ],\n    \"stream_bucket_prepend\": [\n        \"void stream_bucket_prepend(resource brigade, resource bucket)\",\n        \"Prepend bucket to brigade\"\n    ],\n    \"stream_context_create\": [\n        \"resource stream_context_create([array options[, array params]])\",\n        \"Create a file context and optionally set parameters\"\n    ],\n    \"stream_context_get_default\": [\n        \"resource stream_context_get_default([array options])\",\n        \"Get a handle on the default file/stream context and optionally set parameters\"\n    ],\n    \"stream_context_get_options\": [\n        \"array stream_context_get_options(resource context|resource stream)\",\n        \"Retrieve options for a stream/wrapper/context\"\n    ],\n    \"stream_context_get_params\": [\n        \"array stream_context_get_params(resource context|resource stream)\",\n        \"Get parameters of a file context\"\n    ],\n    \"stream_context_set_default\": [\n        \"resource stream_context_set_default(array options)\",\n        \"Set default file/stream context, returns the context as a resource\"\n    ],\n    \"stream_context_set_option\": [\n        \"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\n        \"Set an option for a wrapper\"\n    ],\n    \"stream_context_set_params\": [\n        \"bool stream_context_set_params(resource context|resource stream, array options)\",\n        \"Set parameters for a file context\"\n    ],\n    \"stream_copy_to_stream\": [\n        \"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\n        \"Reads up to maxlen bytes from source stream and writes them to dest stream.\"\n    ],\n    \"stream_filter_append\": [\n        \"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Append a filter to a stream\"\n    ],\n    \"stream_filter_prepend\": [\n        \"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Prepend a filter to a stream\"\n    ],\n    \"stream_filter_register\": [\n        \"bool stream_filter_register(string filtername, string classname)\",\n        \"Registers a custom filter handler class\"\n    ],\n    \"stream_filter_remove\": [\n        \"bool stream_filter_remove(resource stream_filter)\",\n        \"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"\n    ],\n    \"stream_get_contents\": [\n        \"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\n        \"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"\n    ],\n    \"stream_get_filters\": [\n        \"array stream_get_filters()\",\n        \"Returns a list of registered filters\"\n    ],\n    \"stream_get_line\": [\n        \"string stream_get_line(resource stream, int maxlen [, string ending])\",\n        \"Read up to maxlen bytes from a stream or until the ending string is found\"\n    ],\n    \"stream_get_meta_data\": [\n        \"array stream_get_meta_data(resource fp)\",\n        \"Retrieves header/meta data from streams/file pointers\"\n    ],\n    \"stream_get_transports\": [\n        \"array stream_get_transports()\",\n        \"Retrieves list of registered socket transports\"\n    ],\n    \"stream_get_wrappers\": [\n        \"array stream_get_wrappers()\",\n        \"Retrieves list of registered stream wrappers\"\n    ],\n    \"stream_is_local\": [\n        \"bool stream_is_local(resource stream|string url)\",\n        \"\"\n    ],\n    \"stream_resolve_include_path\": [\n        \"string stream_resolve_include_path(string filename)\",\n        \"Determine what file will be opened by calls to fopen() with a relative path\"\n    ],\n    \"stream_select\": [\n        \"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"stream_set_blocking\": [\n        \"bool stream_set_blocking(resource socket, int mode)\",\n        \"Set blocking/non-blocking mode on a socket or stream\"\n    ],\n    \"stream_set_timeout\": [\n        \"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\n        \"Set timeout on stream read to seconds + microseonds\"\n    ],\n    \"stream_set_write_buffer\": [\n        \"int stream_set_write_buffer(resource fp, int buffer)\",\n        \"Set file write buffer\"\n    ],\n    \"stream_socket_accept\": [\n        \"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\n        \"Accept a client connection from a server socket\"\n    ],\n    \"stream_socket_client\": [\n        \"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\n        \"Open a client connection to a remote address\"\n    ],\n    \"stream_socket_enable_crypto\": [\n        \"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\n        \"Enable or disable a specific kind of crypto on the stream\"\n    ],\n    \"stream_socket_get_name\": [\n        \"string stream_socket_get_name(resource stream, bool want_peer)\",\n        \"Returns either the locally bound or remote name for a socket stream\"\n    ],\n    \"stream_socket_pair\": [\n        \"array stream_socket_pair(int domain, int type, int protocol)\",\n        \"Creates a pair of connected, indistinguishable socket streams\"\n    ],\n    \"stream_socket_recvfrom\": [\n        \"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\n        \"Receives data from a socket stream\"\n    ],\n    \"stream_socket_sendto\": [\n        \"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\n        \"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"\n    ],\n    \"stream_socket_server\": [\n        \"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\n        \"Create a server socket bound to localaddress\"\n    ],\n    \"stream_socket_shutdown\": [\n        \"int stream_socket_shutdown(resource stream, int how)\",\n        \"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"\n    ],\n    \"stream_supports_lock\": [\n        \"bool stream_supports_lock(resource stream)\",\n        \"Tells whether the stream supports locking through flock().\"\n    ],\n    \"stream_wrapper_register\": [\n        \"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\n        \"Registers a custom URL protocol handler class\"\n    ],\n    \"stream_wrapper_restore\": [\n        \"bool stream_wrapper_restore(string protocol)\",\n        \"Restore the original protocol handler, overriding if necessary\"\n    ],\n    \"stream_wrapper_unregister\": [\n        \"bool stream_wrapper_unregister(string protocol)\",\n        \"Unregister a wrapper for the life of the current request.\"\n    ],\n    \"strftime\": [\n        \"string strftime(string format [, int timestamp])\",\n        \"Format a local time/date according to locale settings\"\n    ],\n    \"strip_tags\": [\n        \"string strip_tags(string str [, string allowable_tags])\",\n        \"Strips HTML and PHP tags from a string\"\n    ],\n    \"stripcslashes\": [\n        \"string stripcslashes(string str)\",\n        \"Strips backslashes from a string. Uses C-style conventions\"\n    ],\n    \"stripos\": [\n        \"int stripos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"stripslashes\": [\n        \"string stripslashes(string str)\",\n        \"Strips backslashes from a string\"\n    ],\n    \"stristr\": [\n        \"string stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"strlen\": [\n        \"int strlen(string str)\",\n        \"Get string length\"\n    ],\n    \"strnatcasecmp\": [\n        \"int strnatcasecmp(string s1, string s2)\",\n        \"Returns the result of case-insensitive string comparison using 'natural' algorithm\"\n    ],\n    \"strnatcmp\": [\n        \"int strnatcmp(string s1, string s2)\",\n        \"Returns the result of string comparison using 'natural' algorithm\"\n    ],\n    \"strncasecmp\": [\n        \"int strncasecmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strncmp\": [\n        \"int strncmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strpbrk\": [\n        \"array strpbrk(string haystack, string char_list)\",\n        \"Search a string for any of a set of characters\"\n    ],\n    \"strpos\": [\n        \"int strpos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another\"\n    ],\n    \"strptime\": [\n        \"string strptime(string timestamp, string format)\",\n        \"Parse a time/date generated with strftime()\"\n    ],\n    \"strrchr\": [\n        \"string strrchr(string haystack, string needle)\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"strrev\": [\n        \"string strrev(string str)\",\n        \"Reverse a string\"\n    ],\n    \"strripos\": [\n        \"int strripos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strrpos\": [\n        \"int strrpos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strspn\": [\n        \"int strspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"\n    ],\n    \"strstr\": [\n        \"string strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"strtok\": [\n        \"string strtok([string str,] string token)\",\n        \"Tokenize a string\"\n    ],\n    \"strtolower\": [\n        \"string strtolower(string str)\",\n        \"Makes a string lowercase\"\n    ],\n    \"strtotime\": [\n        \"int strtotime(string time [, int now ])\",\n        \"Convert string representation of date and time to a timestamp\"\n    ],\n    \"strtoupper\": [\n        \"string strtoupper(string str)\",\n        \"Makes a string uppercase\"\n    ],\n    \"strtr\": [\n        \"string strtr(string str, string from[, string to])\",\n        \"Translates characters in str using given translation tables\"\n    ],\n    \"strval\": [\n        \"string strval(mixed var)\",\n        \"Get the string value of a variable\"\n    ],\n    \"substr\": [\n        \"string substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"substr_compare\": [\n        \"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\n        \"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"\n    ],\n    \"substr_count\": [\n        \"int substr_count(string haystack, string needle [, int offset [, int length]])\",\n        \"Returns the number of times a substring occurs in the string\"\n    ],\n    \"substr_replace\": [\n        \"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\n        \"Replaces part of a string with another string\"\n    ],\n    \"sybase_affected_rows\": [\n        \"int sybase_affected_rows([resource link_id])\",\n        \"Get number of affected rows in last query\"\n    ],\n    \"sybase_close\": [\n        \"bool sybase_close([resource link_id])\",\n        \"Close Sybase connection\"\n    ],\n    \"sybase_connect\": [\n        \"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\n        \"Open Sybase server connection\"\n    ],\n    \"sybase_data_seek\": [\n        \"bool sybase_data_seek(resource result, int offset)\",\n        \"Move internal row pointer\"\n    ],\n    \"sybase_deadlock_retry_count\": [\n        \"void sybase_deadlock_retry_count(int retry_count)\",\n        \"Sets deadlock retry count\"\n    ],\n    \"sybase_fetch_array\": [\n        \"array sybase_fetch_array(resource result)\",\n        \"Fetch row as array\"\n    ],\n    \"sybase_fetch_assoc\": [\n        \"array sybase_fetch_assoc(resource result)\",\n        \"Fetch row as array without numberic indices\"\n    ],\n    \"sybase_fetch_field\": [\n        \"object sybase_fetch_field(resource result [, int offset])\",\n        \"Get field information\"\n    ],\n    \"sybase_fetch_object\": [\n        \"object sybase_fetch_object(resource result [, mixed object])\",\n        \"Fetch row as object\"\n    ],\n    \"sybase_fetch_row\": [\n        \"array sybase_fetch_row(resource result)\",\n        \"Get row as enumerated array\"\n    ],\n    \"sybase_field_seek\": [\n        \"bool sybase_field_seek(resource result, int offset)\",\n        \"Set field offset\"\n    ],\n    \"sybase_free_result\": [\n        \"bool sybase_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"sybase_get_last_message\": [\n        \"string sybase_get_last_message()\",\n        \"Returns the last message from server (over min_message_severity)\"\n    ],\n    \"sybase_min_client_severity\": [\n        \"void sybase_min_client_severity(int severity)\",\n        \"Sets minimum client severity\"\n    ],\n    \"sybase_min_server_severity\": [\n        \"void sybase_min_server_severity(int severity)\",\n        \"Sets minimum server severity\"\n    ],\n    \"sybase_num_fields\": [\n        \"int sybase_num_fields(resource result)\",\n        \"Get number of fields in result\"\n    ],\n    \"sybase_num_rows\": [\n        \"int sybase_num_rows(resource result)\",\n        \"Get number of rows in result\"\n    ],\n    \"sybase_pconnect\": [\n        \"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\n        \"Open persistent Sybase connection\"\n    ],\n    \"sybase_query\": [\n        \"int sybase_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"sybase_result\": [\n        \"string sybase_result(resource result, int row, mixed field)\",\n        \"Get result data\"\n    ],\n    \"sybase_select_db\": [\n        \"bool sybase_select_db(string database [, resource link_id])\",\n        \"Select Sybase database\"\n    ],\n    \"sybase_set_message_handler\": [\n        \"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\n        \"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"\n    ],\n    \"sybase_unbuffered_query\": [\n        \"int sybase_unbuffered_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"symlink\": [\n        \"int symlink(string target, string link)\",\n        \"Create a symbolic link\"\n    ],\n    \"sys_get_temp_dir\": [\n        \"string sys_get_temp_dir()\",\n        \"Returns directory path used for temporary files\"\n    ],\n    \"sys_getloadavg\": [\n        \"array sys_getloadavg()\",\n        \"\"\n    ],\n    \"syslog\": [\n        \"bool syslog(int priority, string message)\",\n        \"Generate a system log message\"\n    ],\n    \"system\": [\n        \"int system(string command [, int &return_value])\",\n        \"Execute an external program and display output\"\n    ],\n    \"tan\": [\n        \"float tan(float number)\",\n        \"Returns the tangent of the number in radians\"\n    ],\n    \"tanh\": [\n        \"float tanh(float number)\",\n        \"Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)\"\n    ],\n    \"tempnam\": [\n        \"string tempnam(string dir, string prefix)\",\n        \"Create a unique filename in a directory\"\n    ],\n    \"textdomain\": [\n        \"string textdomain(string domain)\",\n        \"Set the textdomain to \\\"domain\\\". Returns the current domain\"\n    ],\n    \"tidy_access_count\": [\n        \"int tidy_access_count()\",\n        \"Returns the Number of Tidy accessibility warnings encountered for specified document.\"\n    ],\n    \"tidy_clean_repair\": [\n        \"bool tidy_clean_repair()\",\n        \"Execute configured cleanup and repair operations on parsed markup\"\n    ],\n    \"tidy_config_count\": [\n        \"int tidy_config_count()\",\n        \"Returns the Number of Tidy configuration errors encountered for specified document.\"\n    ],\n    \"tidy_diagnose\": [\n        \"bool tidy_diagnose()\",\n        \"Run configured diagnostics on parsed and repaired markup.\"\n    ],\n    \"tidy_error_count\": [\n        \"int tidy_error_count()\",\n        \"Returns the Number of Tidy errors encountered for specified document.\"\n    ],\n    \"tidy_get_body\": [\n        \"TidyNode tidy_get_body(resource tidy)\",\n        \"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_config\": [\n        \"array tidy_get_config()\",\n        \"Get current Tidy configuarion\"\n    ],\n    \"tidy_get_error_buffer\": [\n        \"string tidy_get_error_buffer([bool detailed])\",\n        \"Return warnings and errors which occured parsing the specified document\"\n    ],\n    \"tidy_get_head\": [\n        \"TidyNode tidy_get_head()\",\n        \"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html\": [\n        \"TidyNode tidy_get_html()\",\n        \"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html_ver\": [\n        \"int tidy_get_html_ver()\",\n        \"Get the Detected HTML version for the specified document.\"\n    ],\n    \"tidy_get_opt_doc\": [\n        \"string tidy_get_opt_doc(tidy resource, string optname)\",\n        \"Returns the documentation for the given option name\"\n    ],\n    \"tidy_get_output\": [\n        \"string tidy_get_output()\",\n        \"Return a string representing the parsed tidy markup\"\n    ],\n    \"tidy_get_release\": [\n        \"string tidy_get_release()\",\n        \"Get release date (version) for Tidy library\"\n    ],\n    \"tidy_get_root\": [\n        \"TidyNode tidy_get_root()\",\n        \"Returns a TidyNode Object representing the root of the tidy parse tree\"\n    ],\n    \"tidy_get_status\": [\n        \"int tidy_get_status()\",\n        \"Get status of specfied document.\"\n    ],\n    \"tidy_getopt\": [\n        \"mixed tidy_getopt(string option)\",\n        \"Returns the value of the specified configuration option for the tidy document.\"\n    ],\n    \"tidy_is_xhtml\": [\n        \"bool tidy_is_xhtml()\",\n        \"Indicates if the document is a XHTML document.\"\n    ],\n    \"tidy_is_xml\": [\n        \"bool tidy_is_xml()\",\n        \"Indicates if the document is a generic (non HTML/XHTML) XML document.\"\n    ],\n    \"tidy_parse_file\": [\n        \"bool tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\n        \"Parse markup in file or URI\"\n    ],\n    \"tidy_parse_string\": [\n        \"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\n        \"Parse a document stored in a string\"\n    ],\n    \"tidy_repair_file\": [\n        \"bool tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\n        \"Repair a file using an optionally provided configuration file\"\n    ],\n    \"tidy_repair_string\": [\n        \"bool tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\n        \"Repair a string using an optionally provided configuration file\"\n    ],\n    \"tidy_warning_count\": [\n        \"int tidy_warning_count()\",\n        \"Returns the Number of Tidy warnings encountered for specified document.\"\n    ],\n    \"time\": [\n        \"int time()\",\n        \"Return current UNIX timestamp\"\n    ],\n    \"time_nanosleep\": [\n        \"mixed time_nanosleep(long seconds, long nanoseconds)\",\n        \"Delay for a number of seconds and nano seconds\"\n    ],\n    \"time_sleep_until\": [\n        \"mixed time_sleep_until(float timestamp)\",\n        \"Make the script sleep until the specified time\"\n    ],\n    \"timezone_abbreviations_list\": [\n        \"array timezone_abbreviations_list()\",\n        \"Returns associative array containing dst, offset and the timezone name\"\n    ],\n    \"timezone_identifiers_list\": [\n        \"array timezone_identifiers_list([long what[, string country]])\",\n        \"Returns numerically index array with all timezone identifiers.\"\n    ],\n    \"timezone_location_get\": [\n        \"array timezone_location_get()\",\n        \"Returns location information for a timezone, including country code, latitude/longitude and comments\"\n    ],\n    \"timezone_name_from_abbr\": [\n        \"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\n        \"Returns the timezone name from abbrevation\"\n    ],\n    \"timezone_name_get\": [\n        \"string timezone_name_get(DateTimeZone object)\",\n        \"Returns the name of the timezone.\"\n    ],\n    \"timezone_offset_get\": [\n        \"long timezone_offset_get(DateTimeZone object, DateTime object)\",\n        \"Returns the timezone offset.\"\n    ],\n    \"timezone_open\": [\n        \"DateTimeZone timezone_open(string timezone)\",\n        \"Returns new DateTimeZone object\"\n    ],\n    \"timezone_transitions_get\": [\n        \"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\n        \"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"\n    ],\n    \"timezone_version_get\": [\n        \"array timezone_version_get()\",\n        \"Returns the Olson database version number.\"\n    ],\n    \"tmpfile\": [\n        \"resource tmpfile()\",\n        \"Create a temporary file that will be deleted automatically after use\"\n    ],\n    \"token_get_all\": [\n        \"array token_get_all(string source)\",\n        \"\"\n    ],\n    \"token_name\": [\n        \"string token_name(int type)\",\n        \"\"\n    ],\n    \"touch\": [\n        \"bool touch(string filename [, int time [, int atime]])\",\n        \"Set modification time of file\"\n    ],\n    \"trigger_error\": [\n        \"void trigger_error(string messsage [, int error_type])\",\n        \"Generates a user-level error/warning/notice message\"\n    ],\n    \"trim\": [\n        \"string trim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning and end of a string\"\n    ],\n    \"uasort\": [\n        \"bool uasort(array array_arg, string cmp_function)\",\n        \"Sort an array with a user-defined comparison function and maintain index association\"\n    ],\n    \"ucfirst\": [\n        \"string ucfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"ucwords\": [\n        \"string ucwords(string str)\",\n        \"Uppercase the first character of every word in a string\"\n    ],\n    \"uksort\": [\n        \"bool uksort(array array_arg, string cmp_function)\",\n        \"Sort an array by keys using a user-defined comparison function\"\n    ],\n    \"umask\": [\n        \"int umask([int mask])\",\n        \"Return or change the umask\"\n    ],\n    \"uniqid\": [\n        \"string uniqid([string prefix [, bool more_entropy]])\",\n        \"Generates a unique ID\"\n    ],\n    \"unixtojd\": [\n        \"int unixtojd([int timestamp])\",\n        \"Convert UNIX timestamp to Julian Day\"\n    ],\n    \"unlink\": [\n        \"bool unlink(string filename[, context context])\",\n        \"Delete a file\"\n    ],\n    \"unpack\": [\n        \"array unpack(string format, string input)\",\n        \"Unpack binary string into named array elements according to format argument\"\n    ],\n    \"unregister_tick_function\": [\n        \"void unregister_tick_function(string function_name)\",\n        \"Unregisters a tick callback function\"\n    ],\n    \"unserialize\": [\n        \"mixed unserialize(string variable_representation)\",\n        \"Takes a string representation of variable and recreates it\"\n    ],\n    \"unset\": [\n        \"void unset(mixed var [, mixed var])\",\n        \"Unset a given variable\"\n    ],\n    \"urldecode\": [\n        \"string urldecode(string str)\",\n        \"Decodes URL-encoded string\"\n    ],\n    \"urlencode\": [\n        \"string urlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"usleep\": [\n        \"void usleep(int micro_seconds)\",\n        \"Delay for a given number of micro seconds\"\n    ],\n    \"usort\": [\n        \"bool usort(array array_arg, string cmp_function)\",\n        \"Sort an array by values using a user-defined comparison function\"\n    ],\n    \"utf8_decode\": [\n        \"string utf8_decode(string data)\",\n        \"Converts a UTF-8 encoded string to ISO-8859-1\"\n    ],\n    \"utf8_encode\": [\n        \"string utf8_encode(string data)\",\n        \"Encodes an ISO-8859-1 string to UTF-8\"\n    ],\n    \"var_dump\": [\n        \"void var_dump(mixed var)\",\n        \"Dumps a string representation of variable to output\"\n    ],\n    \"var_export\": [\n        \"string var_export(mixed var [, bool return])\",\n        \"Outputs or returns a string representation of a variable\"\n    ],\n    \"variant_abs\": [\n        \"mixed variant_abs(mixed left)\",\n        \"Returns the absolute value of a variant\"\n    ],\n    \"variant_add\": [\n        \"mixed variant_add(mixed left, mixed right)\",\n        \"\\\"Adds\\\" two variant values together and returns the result\"\n    ],\n    \"variant_and\": [\n        \"mixed variant_and(mixed left, mixed right)\",\n        \"performs a bitwise AND operation between two variants and returns the result\"\n    ],\n    \"variant_cast\": [\n        \"object variant_cast(object variant, int type)\",\n        \"Convert a variant into a new variant object of another type\"\n    ],\n    \"variant_cat\": [\n        \"mixed variant_cat(mixed left, mixed right)\",\n        \"concatenates two variant values together and returns the result\"\n    ],\n    \"variant_cmp\": [\n        \"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\n        \"Compares two variants\"\n    ],\n    \"variant_date_from_timestamp\": [\n        \"object variant_date_from_timestamp(int timestamp)\",\n        \"Returns a variant date representation of a unix timestamp\"\n    ],\n    \"variant_date_to_timestamp\": [\n        \"int variant_date_to_timestamp(object variant)\",\n        \"Converts a variant date/time value to unix timestamp\"\n    ],\n    \"variant_div\": [\n        \"mixed variant_div(mixed left, mixed right)\",\n        \"Returns the result from dividing two variants\"\n    ],\n    \"variant_eqv\": [\n        \"mixed variant_eqv(mixed left, mixed right)\",\n        \"Performs a bitwise equivalence on two variants\"\n    ],\n    \"variant_fix\": [\n        \"mixed variant_fix(mixed left)\",\n        \"Returns the integer part ? of a variant\"\n    ],\n    \"variant_get_type\": [\n        \"int variant_get_type(object variant)\",\n        \"Returns the VT_XXX type code for a variant\"\n    ],\n    \"variant_idiv\": [\n        \"mixed variant_idiv(mixed left, mixed right)\",\n        \"Converts variants to integers and then returns the result from dividing them\"\n    ],\n    \"variant_imp\": [\n        \"mixed variant_imp(mixed left, mixed right)\",\n        \"Performs a bitwise implication on two variants\"\n    ],\n    \"variant_int\": [\n        \"mixed variant_int(mixed left)\",\n        \"Returns the integer portion of a variant\"\n    ],\n    \"variant_mod\": [\n        \"mixed variant_mod(mixed left, mixed right)\",\n        \"Divides two variants and returns only the remainder\"\n    ],\n    \"variant_mul\": [\n        \"mixed variant_mul(mixed left, mixed right)\",\n        \"multiplies the values of the two variants and returns the result\"\n    ],\n    \"variant_neg\": [\n        \"mixed variant_neg(mixed left)\",\n        \"Performs logical negation on a variant\"\n    ],\n    \"variant_not\": [\n        \"mixed variant_not(mixed left)\",\n        \"Performs bitwise not negation on a variant\"\n    ],\n    \"variant_or\": [\n        \"mixed variant_or(mixed left, mixed right)\",\n        \"Performs a logical disjunction on two variants\"\n    ],\n    \"variant_pow\": [\n        \"mixed variant_pow(mixed left, mixed right)\",\n        \"Returns the result of performing the power function with two variants\"\n    ],\n    \"variant_round\": [\n        \"mixed variant_round(mixed left, int decimals)\",\n        \"Rounds a variant to the specified number of decimal places\"\n    ],\n    \"variant_set\": [\n        \"void variant_set(object variant, mixed value)\",\n        \"Assigns a new value for a variant object\"\n    ],\n    \"variant_set_type\": [\n        \"void variant_set_type(object variant, int type)\",\n        \"Convert a variant into another type.  Variant is modified \\\"in-place\\\"\"\n    ],\n    \"variant_sub\": [\n        \"mixed variant_sub(mixed left, mixed right)\",\n        \"subtracts the value of the right variant from the left variant value and returns the result\"\n    ],\n    \"variant_xor\": [\n        \"mixed variant_xor(mixed left, mixed right)\",\n        \"Performs a logical exclusion on two variants\"\n    ],\n    \"version_compare\": [\n        \"int version_compare(string ver1, string ver2 [, string oper])\",\n        \"Compares two \\\"PHP-standardized\\\" version number strings\"\n    ],\n    \"vfprintf\": [\n        \"int vfprintf(resource stream, string format, array args)\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"virtual\": [\n        \"bool virtual(string filename)\",\n        \"Perform an Apache sub-request\"\n    ],\n    \"vprintf\": [\n        \"int vprintf(string format, array args)\",\n        \"Output a formatted string\"\n    ],\n    \"vsprintf\": [\n        \"string vsprintf(string format, array args)\",\n        \"Return a formatted string\"\n    ],\n    \"wddx_add_vars\": [\n        \"int wddx_add_vars(resource packet_id, mixed var_names [, mixed ...])\",\n        \"Serializes given variables and adds them to packet given by packet_id\"\n    ],\n    \"wddx_deserialize\": [\n        \"mixed wddx_deserialize(mixed packet)\",\n        \"Deserializes given packet and returns a PHP value\"\n    ],\n    \"wddx_packet_end\": [\n        \"string wddx_packet_end(resource packet_id)\",\n        \"Ends specified WDDX packet and returns the string containing the packet\"\n    ],\n    \"wddx_packet_start\": [\n        \"resource wddx_packet_start([string comment])\",\n        \"Starts a WDDX packet with optional comment and returns the packet id\"\n    ],\n    \"wddx_serialize_value\": [\n        \"string wddx_serialize_value(mixed var [, string comment])\",\n        \"Creates a new packet and serializes the given value\"\n    ],\n    \"wddx_serialize_vars\": [\n        \"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\n        \"Creates a new packet and serializes given variables into a struct\"\n    ],\n    \"wordwrap\": [\n        \"string wordwrap(string str [, int width [, string break [, bool cut]]])\",\n        \"Wraps buffer to selected number of characters using string break char\"\n    ],\n    \"xml_error_string\": [\n        \"string xml_error_string(int code)\",\n        \"Get XML parser error string\"\n    ],\n    \"xml_get_current_byte_index\": [\n        \"int xml_get_current_byte_index(resource parser)\",\n        \"Get current byte index for an XML parser\"\n    ],\n    \"xml_get_current_column_number\": [\n        \"int xml_get_current_column_number(resource parser)\",\n        \"Get current column number for an XML parser\"\n    ],\n    \"xml_get_current_line_number\": [\n        \"int xml_get_current_line_number(resource parser)\",\n        \"Get current line number for an XML parser\"\n    ],\n    \"xml_get_error_code\": [\n        \"int xml_get_error_code(resource parser)\",\n        \"Get XML parser error code\"\n    ],\n    \"xml_parse\": [\n        \"int xml_parse(resource parser, string data [, int isFinal])\",\n        \"Start parsing an XML document\"\n    ],\n    \"xml_parse_into_struct\": [\n        \"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\n        \"Parsing a XML document\"\n    ],\n    \"xml_parser_create\": [\n        \"resource xml_parser_create([string encoding])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_create_ns\": [\n        \"resource xml_parser_create_ns([string encoding [, string sep]])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_free\": [\n        \"int xml_parser_free(resource parser)\",\n        \"Free an XML parser\"\n    ],\n    \"xml_parser_get_option\": [\n        \"int xml_parser_get_option(resource parser, int option)\",\n        \"Get options from an XML parser\"\n    ],\n    \"xml_parser_set_option\": [\n        \"int xml_parser_set_option(resource parser, int option, mixed value)\",\n        \"Set options in an XML parser\"\n    ],\n    \"xml_set_character_data_handler\": [\n        \"int xml_set_character_data_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_default_handler\": [\n        \"int xml_set_default_handler(resource parser, string hdl)\",\n        \"Set up default handler\"\n    ],\n    \"xml_set_element_handler\": [\n        \"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\n        \"Set up start and end element handlers\"\n    ],\n    \"xml_set_end_namespace_decl_handler\": [\n        \"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_external_entity_ref_handler\": [\n        \"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\n        \"Set up external entity reference handler\"\n    ],\n    \"xml_set_notation_decl_handler\": [\n        \"int xml_set_notation_decl_handler(resource parser, string hdl)\",\n        \"Set up notation declaration handler\"\n    ],\n    \"xml_set_object\": [\n        \"int xml_set_object(resource parser, object &obj)\",\n        \"Set up object which should be used for callbacks\"\n    ],\n    \"xml_set_processing_instruction_handler\": [\n        \"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\n        \"Set up processing instruction (PI) handler\"\n    ],\n    \"xml_set_start_namespace_decl_handler\": [\n        \"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_unparsed_entity_decl_handler\": [\n        \"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\n        \"Set up unparsed entity declaration handler\"\n    ],\n    \"xmlrpc_decode\": [\n        \"array xmlrpc_decode(string xml [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_decode_request\": [\n        \"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_encode\": [\n        \"string xmlrpc_encode(mixed value)\",\n        \"Generates XML for a PHP value\"\n    ],\n    \"xmlrpc_encode_request\": [\n        \"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\n        \"Generates XML for a method request\"\n    ],\n    \"xmlrpc_get_type\": [\n        \"string xmlrpc_get_type(mixed value)\",\n        \"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"\n    ],\n    \"xmlrpc_is_fault\": [\n        \"bool xmlrpc_is_fault(array)\",\n        \"Determines if an array value represents an XMLRPC fault.\"\n    ],\n    \"xmlrpc_parse_method_descriptions\": [\n        \"array xmlrpc_parse_method_descriptions(string xml)\",\n        \"Decodes XML into a list of method descriptions\"\n    ],\n    \"xmlrpc_server_add_introspection_data\": [\n        \"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\n        \"Adds introspection documentation\"\n    ],\n    \"xmlrpc_server_call_method\": [\n        \"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\n        \"Parses XML requests and call methods\"\n    ],\n    \"xmlrpc_server_create\": [\n        \"resource xmlrpc_server_create()\",\n        \"Creates an xmlrpc server\"\n    ],\n    \"xmlrpc_server_destroy\": [\n        \"int xmlrpc_server_destroy(resource server)\",\n        \"Destroys server resources\"\n    ],\n    \"xmlrpc_server_register_introspection_callback\": [\n        \"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\n        \"Register a PHP function to generate documentation\"\n    ],\n    \"xmlrpc_server_register_method\": [\n        \"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\n        \"Register a PHP function to handle method matching method_name\"\n    ],\n    \"xmlrpc_set_type\": [\n        \"bool xmlrpc_set_type(string value, string type)\",\n        \"Sets xmlrpc type, base64 or datetime, for a PHP string value\"\n    ],\n    \"xmlwriter_end_attribute\": [\n        \"bool xmlwriter_end_attribute(resource xmlwriter)\",\n        \"End attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_cdata\": [\n        \"bool xmlwriter_end_cdata(resource xmlwriter)\",\n        \"End current CDATA - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_comment\": [\n        \"bool xmlwriter_end_comment(resource xmlwriter)\",\n        \"Create end comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_document\": [\n        \"bool xmlwriter_end_document(resource xmlwriter)\",\n        \"End current document - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd\": [\n        \"bool xmlwriter_end_dtd(resource xmlwriter)\",\n        \"End current DTD - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_attlist\": [\n        \"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\n        \"End current DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_element\": [\n        \"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\n        \"End current DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_entity\": [\n        \"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\n        \"End current DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_element\": [\n        \"bool xmlwriter_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_pi\": [\n        \"bool xmlwriter_end_pi(resource xmlwriter)\",\n        \"End current PI - returns FALSE on error\"\n    ],\n    \"xmlwriter_flush\": [\n        \"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\n        \"Output current buffer\"\n    ],\n    \"xmlwriter_full_end_element\": [\n        \"bool xmlwriter_full_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_open_memory\": [\n        \"resource xmlwriter_open_memory()\",\n        \"Create new xmlwriter using memory for string output\"\n    ],\n    \"xmlwriter_open_uri\": [\n        \"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\n        \"Create new xmlwriter using source uri for output\"\n    ],\n    \"xmlwriter_output_memory\": [\n        \"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\n        \"Output current buffer as string\"\n    ],\n    \"xmlwriter_set_indent\": [\n        \"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\n        \"Toggle indentation on/off - returns FALSE on error\"\n    ],\n    \"xmlwriter_set_indent_string\": [\n        \"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\n        \"Set string used for indenting - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute\": [\n        \"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\n        \"Create start attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute_ns\": [\n        \"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_cdata\": [\n        \"bool xmlwriter_start_cdata(resource xmlwriter)\",\n        \"Create start CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_comment\": [\n        \"bool xmlwriter_start_comment(resource xmlwriter)\",\n        \"Create start comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_document\": [\n        \"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\n        \"Create document tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd\": [\n        \"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\n        \"Create start DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_attlist\": [\n        \"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\n        \"Create start DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_element\": [\n        \"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\n        \"Create start DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_entity\": [\n        \"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\n        \"Create start DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element\": [\n        \"bool xmlwriter_start_element(resource xmlwriter, string name)\",\n        \"Create start element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element_ns\": [\n        \"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_pi\": [\n        \"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\n        \"Create start PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_text\": [\n        \"bool xmlwriter_text(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute\": [\n        \"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\n        \"Write full attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute_ns\": [\n        \"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\n        \"Write full namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_cdata\": [\n        \"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\n        \"Write full CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_comment\": [\n        \"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\n        \"Write full comment tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd\": [\n        \"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\n        \"Write full DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_attlist\": [\n        \"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\n        \"Write full DTD AttList tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_element\": [\n        \"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\n        \"Write full DTD element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_entity\": [\n        \"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\n        \"Write full DTD Entity tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element\": [\n        \"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\n        \"Write full element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element_ns\": [\n        \"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\n        \"Write full namespaced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_pi\": [\n        \"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\n        \"Write full PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_raw\": [\n        \"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xsl_xsltprocessor_get_parameter\": [\n        \"string xsl_xsltprocessor_get_parameter(string namespace, string name)\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_has_exslt_support\": [\n        \"bool xsl_xsltprocessor_has_exslt_support()\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_import_stylesheet\": [\n        \"void xsl_xsltprocessor_import_stylesheet(domdocument doc)\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_register_php_functions\": [\n        \"void xsl_xsltprocessor_register_php_functions([mixed $restrict])\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_remove_parameter\": [\n        \"bool xsl_xsltprocessor_remove_parameter(string namespace, string name)\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_parameter\": [\n        \"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value])\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_profiling\": [\n        \"bool xsl_xsltprocessor_set_profiling(string filename)\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_transform_to_doc\": [\n        \"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc)\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_transform_to_uri\": [\n        \"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri)\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_transform_to_xml\": [\n        \"string xsl_xsltprocessor_transform_to_xml(domdocument doc)\",\n        \"\"\n    ],\n    \"zend_logo_guid\": [\n        \"string zend_logo_guid()\",\n        \"Return the special ID used to request the Zend logo in phpinfo screens\"\n    ],\n    \"zend_version\": [\n        \"string zend_version()\",\n        \"Get the version of the Zend Engine\"\n    ],\n    \"zip_close\": [\n        \"void zip_close(resource zip)\",\n        \"Close a Zip archive\"\n    ],\n    \"zip_entry_close\": [\n        \"void zip_entry_close(resource zip_ent)\",\n        \"Close a zip entry\"\n    ],\n    \"zip_entry_compressedsize\": [\n        \"int zip_entry_compressedsize(resource zip_entry)\",\n        \"Return the compressed size of a ZZip entry\"\n    ],\n    \"zip_entry_compressionmethod\": [\n        \"string zip_entry_compressionmethod(resource zip_entry)\",\n        \"Return a string containing the compression method used on a particular entry\"\n    ],\n    \"zip_entry_filesize\": [\n        \"int zip_entry_filesize(resource zip_entry)\",\n        \"Return the actual filesize of a ZZip entry\"\n    ],\n    \"zip_entry_name\": [\n        \"string zip_entry_name(resource zip_entry)\",\n        \"Return the name given a ZZip entry\"\n    ],\n    \"zip_entry_open\": [\n        \"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\n        \"Open a Zip File, pointed by the resource entry\"\n    ],\n    \"zip_entry_read\": [\n        \"mixed zip_entry_read(resource zip_entry [, int len])\",\n        \"Read from an open directory entry\"\n    ],\n    \"zip_open\": [\n        \"resource zip_open(string filename)\",\n        \"Create new zip using source uri for output\"\n    ],\n    \"zip_read\": [\n        \"resource zip_read(resource zip)\",\n        \"Returns the next file in the archive\"\n    ],\n    \"zlib_get_coding_type\": [\n        \"string zlib_get_coding_type()\",\n        \"Returns the coding type used for output compression\"\n    ],\n    \"array_column\": [\n        \"array_column(array $array, int|string|null $column_key, int|string|null $index_key = null): array\",\n        \"Return the values from a single column in the input array\"\n    ],\n    \"boolval\": [\n        \"boolval(mixed $value): bool\",\n        \"Get the boolean value of a variable\"\n    ],\n    \"bzclose\": [\n        \"bzclose(resource $bz): bool\",\n        \"Close a bzip2 file\"\n    ],\n    \"bzflush\": [\n        \"bzflush(resource $bz): bool\",\n        \"Do nothing\"\n    ],\n    \"bzwrite\": [\n        \"bzwrite(resource $bz, string $data, ?int $length = null): int|false\",\n        \"Binary safe bzip2 file write\"\n    ],\n    \"checkdnsrr\": [\n        \"checkdnsrr(string $hostname, string $type = &quot;MX&quot;): bool\",\n        \"Check DNS records corresponding to a given Internet host name or IP address\"\n    ],\n    \"chop\": [\n        \"chop()\",\n        \"Alias of rtrim()\"\n    ],\n    \"class_uses\": [\n        \"class_uses(object|string $object_or_class, bool $autoload = true): array|false\",\n        \"\"\n    ],\n    \"curl_escape\": [\n        \"curl_escape(CurlHandle $handle, string $string): string|false\",\n        \"URL encodes the given string\"\n    ],\n    \"curl_file_create\": [\n        \"curl_file_create()\",\n        \"Create a CURLFile object\"\n    ],\n    \"curl_multi_errno\": [\n        \"curl_multi_errno(CurlMultiHandle $multi_handle): int\",\n        \"Return the last multi curl error number\"\n    ],\n    \"curl_multi_setopt\": [\n        \"curl_multi_setopt(CurlMultiHandle $multi_handle, int $option, mixed $value): bool\",\n        \"Set an option for the cURL multi handle\"\n    ],\n    \"curl_multi_strerror\": [\n        \"curl_multi_strerror(int $error_code): ?string\",\n        \"Return string describing error code\"\n    ],\n    \"curl_pause\": [\n        \"curl_pause(CurlHandle $handle, int $flags): int\",\n        \"Pause and unpause a connection\"\n    ],\n    \"curl_reset\": [\n        \"curl_reset(CurlHandle $handle): void\",\n        \"Reset all options of a libcurl session handle\"\n    ],\n    \"curl_share_close\": [\n        \"curl_share_close(CurlShareHandle $share_handle): void\",\n        \"Close a cURL share handle\"\n    ],\n    \"curl_share_errno\": [\n        \"curl_share_errno(CurlShareHandle $share_handle): int\",\n        \"Return the last share curl error number\"\n    ],\n    \"curl_share_init\": [\n        \"curl_share_init(): CurlShareHandle\",\n        \"Initialize a cURL share handle\"\n    ],\n    \"curl_share_setopt\": [\n        \"curl_share_setopt(CurlShareHandle $share_handle, int $option, mixed $value): bool\",\n        \"Set an option for a cURL share handle\"\n    ],\n    \"curl_share_strerror\": [\n        \"curl_share_strerror(int $error_code): ?string\",\n        \"Return string describing the given error code\"\n    ],\n    \"curl_strerror\": [\n        \"curl_strerror(int $error_code): ?string\",\n        \"Return string describing the given error code\"\n    ],\n    \"curl_unescape\": [\n        \"curl_unescape(CurlHandle $handle, string $string): string|false\",\n        \"Decodes the given URL encoded string\"\n    ],\n    \"date_create_immutable_from_format\": [\n        \"date_create_immutable_from_format()\",\n        \"Alias of DateTimeImmutable::createFromFormat()\"\n    ],\n    \"date_create_immutable\": [\n        \"date_create_immutable()\",\n        \"Alias of DateTimeImmutable::__construct()\"\n    ],\n    \"deflate_add\": [\n        \"deflate_add(DeflateContext $context, string $data, int $flush_mode = ZLIB_SYNC_FLUSH): string|false\",\n        \"Incrementally deflate data\"\n    ],\n    \"deflate_init\": [\n        \"deflate_init(int $encoding, array $options = []): DeflateContext|false\",\n        \"Initialize an incremental deflate context\"\n    ],\n    \"delete\": [\n        \"delete()\",\n        \"See unlink()\"\n    ],\n    \"diskfreespace\": [\n        \"diskfreespace()\",\n        \"Alias of disk_free_space()\"\n    ],\n    \"doubleval\": [\n        \"doubleval()\",\n        \"Alias of floatval()\"\n    ],\n    \"enchant_dict_add\": [\n        \"enchant_dict_add(EnchantDictionary $dictionary, string $word): void\",\n        \"Add a word to personal word list\"\n    ],\n    \"enchant_dict_is_added\": [\n        \"enchant_dict_is_added(EnchantDictionary $dictionary, string $word): bool\",\n        \"Whether or not &#039;word&#039; exists in this spelling-session\"\n    ],\n    \"error_clear_last\": [\n        \"error_clear_last(): void\",\n        \"Clear the most recent error\"\n    ],\n    \"eval\": [\n        \"eval(string $code): mixed\",\n        \"Evaluate a string as PHP code\"\n    ],\n    \"expect_expectl\": [\n        \"expect_expectl(resource $expect, array $cases, array &$match = ?): int\",\n        \"\"\n    ],\n    \"expect_popen\": [\n        \"expect_popen(string $command): resource\",\n        \"\"\n    ],\n    \"fdiv\": [\n        \"fdiv(float $num1, float $num2): float\",\n        \"Divides two numbers, according to IEEE 754\"\n    ],\n    \"filter_id\": [\n        \"filter_id(string $name): int|false\",\n        \"Returns the filter ID belonging to a named filter\"\n    ],\n    \"filter_list\": [\n        \"filter_list(): array\",\n        \"Returns a list of all supported filters\"\n    ],\n    \"forward_static_call_array\": [\n        \"forward_static_call_array(callable $callback, array $args): mixed\",\n        \"Call a static method and pass the arguments as array\"\n    ],\n    \"fputs\": [\n        \"fputs()\",\n        \"Alias of fwrite()\"\n    ],\n    \"ftp_append\": [\n        \"ftp_append(FTP\\\\Connection $ftp, string $remote_filename, string $local_filename, int $mode = FTP_BINARY): bool\",\n        \"Append the contents of a file to another file on the FTP server\"\n    ],\n    \"ftp_mlsd\": [\n        \"ftp_mlsd(FTP\\\\Connection $ftp, string $directory): array|false\",\n        \"Returns a list of files in the given directory\"\n    ],\n    \"ftp_quit\": [\n        \"ftp_quit()\",\n        \"Alias of ftp_close()\"\n    ],\n    \"gc_mem_caches\": [\n        \"gc_mem_caches(): int\",\n        \"\"\n    ],\n    \"gc_status\": [\n        \"gc_status(): array\",\n        \"Gets information about the garbage collector\"\n    ],\n    \"get_debug_type\": [\n        \"get_debug_type(mixed $value): string\",\n        \"Gets the type name of a variable in a way that is suitable for debugging\"\n    ],\n    \"get_declared_traits\": [\n        \"get_declared_traits(): array\",\n        \"Returns an array of all declared traits\"\n    ],\n    \"get_required_files\": [\n        \"get_required_files()\",\n        \"Alias of get_included_files()\"\n    ],\n    \"get_resource_id\": [\n        \"get_resource_id(resource $resource): int\",\n        \"\"\n    ],\n    \"get_resources\": [\n        \"get_resources(?string $type = null): array\",\n        \"Returns active resources\"\n    ],\n    \"getimagesizefromstring\": [\n        \"getimagesizefromstring(string $string, array &$image_info = null): array|false\",\n        \"Get the size of an image from a string\"\n    ],\n    \"getmxrr\": [\n        \"getmxrr(string $hostname, array &$hosts, array &$weights = null): bool\",\n        \"Get MX records corresponding to a given Internet host name\"\n    ],\n    \"gmp_binomial\": [\n        \"gmp_binomial(GMP|int|string $n, int $k): GMP\",\n        \"Calculates binomial coefficient\"\n    ],\n    \"gmp_div\": [\n        \"gmp_div()\",\n        \"Alias of gmp_div_q()\"\n    ],\n    \"gmp_export\": [\n        \"gmp_export(GMP|int|string $num, int $word_size = 1, int $flags = GMP_MSW_FIRST | GMP_NATIVE_ENDIAN): string\",\n        \"Export to a binary string\"\n    ],\n    \"gmp_import\": [\n        \"gmp_import(string $data, int $word_size = 1, int $flags = GMP_MSW_FIRST | GMP_NATIVE_ENDIAN): GMP\",\n        \"Import from a binary string\"\n    ],\n    \"gmp_kronecker\": [\n        \"gmp_kronecker(GMP|int|string $num1, GMP|int|string $num2): int\",\n        \"Kronecker symbol\"\n    ],\n    \"gmp_lcm\": [\n        \"gmp_lcm(GMP|int|string $num1, GMP|int|string $num2): GMP\",\n        \"Calculate LCM\"\n    ],\n    \"gmp_perfect_power\": [\n        \"gmp_perfect_power(GMP|int|string $num): bool\",\n        \"Perfect power check\"\n    ],\n    \"gmp_random_bits\": [\n        \"gmp_random_bits(int $bits): GMP\",\n        \"Random number\"\n    ],\n    \"gmp_random_range\": [\n        \"gmp_random_range(GMP|int|string $min, GMP|int|string $max): GMP\",\n        \"Random number\"\n    ],\n    \"gmp_random_seed\": [\n        \"gmp_random_seed(GMP|int|string $seed): void\",\n        \"Sets the RNG seed\"\n    ],\n    \"gmp_root\": [\n        \"gmp_root(GMP|int|string $num, int $nth): GMP\",\n        \"Take the integer part of nth root\"\n    ],\n    \"gmp_rootrem\": [\n        \"gmp_rootrem(GMP|int|string $num, int $nth): array\",\n        \"Take the integer part and remainder of nth root\"\n    ],\n    \"gzclose\": [\n        \"gzclose(resource $stream): bool\",\n        \"Close an open gz-file pointer\"\n    ],\n    \"gzdecode\": [\n        \"gzdecode(string $data, int $max_length = 0): string|false\",\n        \"Decodes a gzip compressed string\"\n    ],\n    \"gzeof\": [\n        \"gzeof(resource $stream): bool\",\n        \"Test for EOF on a gz-file pointer\"\n    ],\n    \"gzgetc\": [\n        \"gzgetc(resource $stream): string|false\",\n        \"Get character from gz-file pointer\"\n    ],\n    \"gzgets\": [\n        \"gzgets(resource $stream, ?int $length = null): string|false\",\n        \"Get line from file pointer\"\n    ],\n    \"gzgetss\": [\n        \"gzgetss(resource $zp, int $length, string $allowable_tags = ?): string\",\n        \"\"\n    ],\n    \"gzpassthru\": [\n        \"gzpassthru(resource $stream): int\",\n        \"\"\n    ],\n    \"gzputs\": [\n        \"gzputs()\",\n        \"Alias of gzwrite()\"\n    ],\n    \"gzread\": [\n        \"gzread(resource $stream, int $length): string|false\",\n        \"Binary-safe gz-file read\"\n    ],\n    \"gzrewind\": [\n        \"gzrewind(resource $stream): bool\",\n        \"Rewind the position of a gz-file pointer\"\n    ],\n    \"gzseek\": [\n        \"gzseek(resource $stream, int $offset, int $whence = SEEK_SET): int\",\n        \"Seek on a gz-file pointer\"\n    ],\n    \"gztell\": [\n        \"gztell(resource $stream): int|false\",\n        \"Tell gz-file pointer read/write position\"\n    ],\n    \"gzwrite\": [\n        \"gzwrite(resource $stream, string $data, ?int $length = null): int|false\",\n        \"Binary-safe gz-file write\"\n    ],\n    \"halt_compiler\": [\n        \"__halt_compiler(): void\",\n        \"\"\n    ],\n    \"hash_equals\": [\n        \"hash_equals(string $known_string, string $user_string): bool\",\n        \"Timing attack safe string comparison\"\n    ],\n    \"hash_hkdf\": [\n        \"hash_hkdf(string $algo, string $key, int $length = 0, string $info = \\\"\\\", string $salt = \\\"\\\"): string\",\n        \"Generate a HKDF key derivation of a supplied key input\"\n    ],\n    \"hash_hmac_algos\": [\n        \"hash_hmac_algos(): array\",\n        \"Return a list of registered hashing algorithms suitable for hash_hmac\"\n    ],\n    \"hash_pbkdf2\": [\n        \"hash_pbkdf2(string $algo, string $password, string $salt, int $iterations, int $length = 0, bool $binary = false): string\",\n        \"Generate a PBKDF2 key derivation of a supplied password\"\n    ],\n    \"header_register_callback\": [\n        \"header_register_callback(callable $callback): bool\",\n        \"Call a header function\"\n    ],\n    \"hex2bin\": [\n        \"hex2bin(string $string): string|false\",\n        \"Decodes a hexadecimally encoded binary string\"\n    ],\n    \"hrtime\": [\n        \"hrtime(bool $as_number = false): array|int|float|false\",\n        \"Get the system&#039;s high resolution time\"\n    ],\n    \"http_response_code\": [\n        \"http_response_code(int $response_code = 0): int|bool\",\n        \"Get or Set the HTTP response code\"\n    ],\n    \"imageaffine\": [\n        \"imageaffine(GdImage $image, array $affine, ?array $clip = null): GdImage|false\",\n        \"Return an image containing the affine transformed src image, using an optional clipping area\"\n    ],\n    \"imageaffinematrixconcat\": [\n        \"imageaffinematrixconcat(array $matrix1, array $matrix2): array|false\",\n        \"Concatenate two affine transformation matrices\"\n    ],\n    \"imageaffinematrixget\": [\n        \"imageaffinematrixget(int $type, array|float $options): array|false\",\n        \"Get an affine transformation matrix\"\n    ],\n    \"imagebmp\": [\n        \"imagebmp(GdImage $image, resource|string|null $file = null, bool $compressed = true): bool\",\n        \"Output a BMP image to browser or file\"\n    ],\n    \"imagecreatefrombmp\": [\n        \"imagecreatefrombmp(string $filename): GdImage|false\",\n        \"Create a new image from file or URL\"\n    ],\n    \"imagecreatefromwebp\": [\n        \"imagecreatefromwebp(string $filename): GdImage|false\",\n        \"Create a new image from file or URL\"\n    ],\n    \"imagecrop\": [\n        \"imagecrop(GdImage $image, array $rectangle): GdImage|false\",\n        \"Crop an image to the given rectangle\"\n    ],\n    \"imagecropauto\": [\n        \"imagecropauto(GdImage $image, int $mode = IMG_CROP_DEFAULT, float $threshold = 0.5, int $color = -1): GdImage|false\",\n        \"Crop an image automatically using one of the available modes\"\n    ],\n    \"imageflip\": [\n        \"imageflip(GdImage $image, int $mode): bool\",\n        \"Flips an image using a given mode\"\n    ],\n    \"imagegetclip\": [\n        \"imagegetclip(GdImage $image): array\",\n        \"Get the clipping rectangle\"\n    ],\n    \"imagegetinterpolation\": [\n        \"imagegetinterpolation(GdImage $image): int\",\n        \"Get the interpolation method\"\n    ],\n    \"imageopenpolygon\": [\n        \"imageopenpolygon(GdImage $image, array $points, int $color): bool\",\n        \"Draws an open polygon\"\n    ],\n    \"imagepalettetotruecolor\": [\n        \"imagepalettetotruecolor(GdImage $image): bool\",\n        \"Converts a palette based image to true color\"\n    ],\n    \"imageresolution\": [\n        \"imageresolution(GdImage $image, ?int $resolution_x = null, ?int $resolution_y = null): array|bool\",\n        \"Get or set the resolution of the image\"\n    ],\n    \"imagescale\": [\n        \"imagescale(GdImage $image, int $width, int $height = -1, int $mode = IMG_BILINEAR_FIXED): GdImage|false\",\n        \"Scale an image using the given new width and height\"\n    ],\n    \"imagesetclip\": [\n        \"imagesetclip(GdImage $image, int $x1, int $y1, int $x2, int $y2): bool\",\n        \"Set the clipping rectangle\"\n    ],\n    \"imagesetinterpolation\": [\n        \"imagesetinterpolation(GdImage $image, int $method = IMG_BILINEAR_FIXED): bool\",\n        \"Set the interpolation method\"\n    ],\n    \"imagewebp\": [\n        \"imagewebp(GdImage $image, resource|string|null $file = null, int $quality = -1): bool\",\n        \"Output a WebP image to browser or file\"\n    ],\n    \"imap_create\": [\n        \"\",\n        \"Alias of imap_createmailbox()\"\n    ],\n    \"imap_fetchmime\": [\n        \"imap_fetchmime(IMAP\\\\Connection $imap, int $message_num, string $section, int $flags = 0): string|false\",\n        \"Fetch MIME headers for a particular section of the message\"\n    ],\n    \"imap_fetchtext\": [\n        \"imap_fetchtext()\",\n        \"Alias of imap_body()\"\n    ],\n    \"imap_header\": [\n        \"imap_header()\",\n        \"Alias of imap_headerinfo()\"\n    ],\n    \"imap_listmailbox\": [\n        \"imap_listmailbox()\",\n        \"Alias of imap_list()\"\n    ],\n    \"imap_listsubscribed\": [\n        \"imap_listsubscribed()\",\n        \"Alias of imap_lsub()\"\n    ],\n    \"imap_rename\": [\n        \"imap_rename()\",\n        \"Alias of imap_renamemailbox()\"\n    ],\n    \"imap_scan\": [\n        \"imap_scan()\",\n        \"Alias of imap_listscan()\"\n    ],\n    \"imap_scanmailbox\": [\n        \"imap_scanmailbox()\",\n        \"Alias of imap_listscan()\"\n    ],\n    \"ini_alter\": [\n        \"ini_alter()\",\n        \"Alias of ini_set()\"\n    ],\n    \"intdiv\": [\n        \"intdiv(int $num1, int $num2): int\",\n        \"Integer division\"\n    ],\n    \"is_double\": [\n        \"is_double()\",\n        \"Alias of is_float()\"\n    ],\n    \"is_int\": [\n        \"is_int(mixed $value): bool\",\n        \"Find whether the type of a variable is integer\"\n    ],\n    \"is_integer\": [\n        \"is_integer()\",\n        \"Alias of is_int()\"\n    ],\n    \"is_iterable\": [\n        \"is_iterable(mixed $value): bool\",\n        \"\"\n    ],\n    \"is_real\": [\n        \"is_real()\",\n        \"Alias of is_float()\"\n    ],\n    \"is_soap_fault\": [\n        \"is_soap_fault(mixed $object): bool\",\n        \"Checks if a SOAP call has failed\"\n    ],\n    \"is_tainted\": [\n        \"is_tainted(string $string): bool\",\n        \"Checks whether a string is tainted\"\n    ],\n    \"is_writeable\": [\n        \"is_writeable()\",\n        \"Alias of is_writable()\"\n    ],\n    \"json_last_error_msg\": [\n        \"json_last_error_msg(): string\",\n        \"Returns the error string of the last json_encode() or json_decode() call\"\n    ],\n    \"key_exists\": [\n        \"key_exists()\",\n        \"Alias of array_key_exists()\"\n    ],\n    \"lchown\": [\n        \"lchown(string $filename, string|int $user): bool\",\n        \"Changes user ownership of symlink\"\n    ],\n    \"libxml_set_external_entity_loader\": [\n        \"libxml_set_external_entity_loader(?callable $resolver_function): bool\",\n        \"Changes the default external entity loader\"\n    ],\n    \"mb_chr\": [\n        \"mb_chr(int $codepoint, ?string $encoding = null): string|false\",\n        \"Return character by Unicode code point value\"\n    ],\n    \"mb_ereg_replace_callback\": [\n        \"mb_ereg_replace_callback(string $pattern, callable $callback, string $string, ?string $options = null): string|false|null\",\n        \"\"\n    ],\n    \"mb_ord\": [\n        \"mb_ord(string $string, ?string $encoding = null): int|false\",\n        \"Get Unicode code point of character\"\n    ],\n    \"mb_scrub\": [\n        \"mb_scrub(string $string, ?string $encoding = null): string\",\n        \"Description\"\n    ],\n    \"mb_str_split\": [\n        \"mb_str_split(string $string, int $length = 1, ?string $encoding = null): array\",\n        \"Given a multibyte string, return an array of its characters\"\n    ],\n    \"memcache_debug\": [\n        \"memcache_debug(bool $on_off): bool\",\n        \"Turn debug output on/off\"\n    ],\n    \"mysql_db_name\": [\n        \"mysql_db_name(resource $result, int $row, mixed $field = NULL): string\",\n        \"Retrieves database name from the call to mysql_list_dbs()\"\n    ],\n    \"mysql_tablename\": [\n        \"mysql_tablename(resource $result, int $i): string|false\",\n        \"Get table name of field\"\n    ],\n    \"mysql_xdevapi_expression\": [\n        \"mysql_xdevapi\\\\expression(string $expression): object\",\n        \"Bind prepared statement variables as parameters\"\n    ],\n    \"mysql_xdevapi_getsession\": [\n        \"mysql_xdevapi\\\\getSession(string $uri): mysql_xdevapi\\\\Session\",\n        \"Connect to a MySQL server\"\n    ],\n    \"mysqli_escape_string\": [\n        \"mysqli_escape_string()\",\n        \"Alias of mysqli_real_escape_string()\"\n    ],\n    \"mysqli_execute\": [\n        \"mysqli_execute()\",\n        \"Alias for mysqli_stmt_execute()\"\n    ],\n    \"mysqli_get_links_stats\": [\n        \"mysqli_get_links_stats(): array\",\n        \"Return information about open and cached links\"\n    ],\n    \"mysqli_set_opt\": [\n        \"mysqli_set_opt()\",\n        \"Alias of mysqli_options()\"\n    ],\n    \"ob_tidyhandler\": [\n        \"ob_tidyhandler(string $input, int $mode = ?): string\",\n        \"ob_start callback function to repair the buffer\"\n    ],\n    \"odbc_do\": [\n        \"odbc_do()\",\n        \"Alias of odbc_exec()\"\n    ],\n    \"odbc_field_precision\": [\n        \"odbc_field_precision()\",\n        \"Alias of odbc_field_len()\"\n    ],\n    \"opcache_compile_file\": [\n        \"opcache_compile_file(string $filename): bool\",\n        \"Compiles and caches a PHP script without executing it\"\n    ],\n    \"opcache_get_configuration\": [\n        \"opcache_get_configuration(): array|false\",\n        \"Get configuration information about the cache\"\n    ],\n    \"opcache_get_status\": [\n        \"opcache_get_status(bool $include_scripts = true): array|false\",\n        \"Get status information about the cache\"\n    ],\n    \"opcache_invalidate\": [\n        \"opcache_invalidate(string $filename, bool $force = false): bool\",\n        \"Invalidates a cached script\"\n    ],\n    \"opcache_is_script_cached\": [\n        \"opcache_is_script_cached(string $filename): bool\",\n        \"Tells whether a script is cached in OPCache\"\n    ],\n    \"opcache_reset\": [\n        \"opcache_reset(): bool\",\n        \"Resets the contents of the opcode cache\"\n    ],\n    \"password_algos\": [\n        \"password_algos(): array\",\n        \"Get available password hashing algorithm IDs\"\n    ],\n    \"password_get_info\": [\n        \"password_get_info(string $hash): array\",\n        \"Returns information about the given hash\"\n    ],\n    \"password_hash\": [\n        \"password_hash(string $password, string|int|null $algo, array $options = []): string\",\n        \"Creates a password hash\"\n    ],\n    \"password_needs_rehash\": [\n        \"password_needs_rehash(string $hash, string|int|null $algo, array $options = []): bool\",\n        \"Checks if the given hash matches the given options\"\n    ],\n    \"password_verify\": [\n        \"password_verify(string $password, string $hash): bool\",\n        \"Verifies that a password matches a hash\"\n    ],\n    \"pcntl_async_signals\": [\n        \"pcntl_async_signals(?bool $enable = null): bool\",\n        \"Enable/disable asynchronous signal handling or return the old setting\"\n    ],\n    \"pcntl_errno\": [\n        \"pcntl_errno()\",\n        \"Alias of pcntl_get_last_error()\"\n    ],\n    \"pcntl_get_last_error\": [\n        \"pcntl_get_last_error(): int\",\n        \"Retrieve the error number set by the last pcntl function which failed\"\n    ],\n    \"pcntl_signal_get_handler\": [\n        \"pcntl_signal_get_handler(int $signal): callable|int\",\n        \"Get the current handler for specified signal\"\n    ],\n    \"pcntl_sigwaitinfo\": [\n        \"pcntl_sigwaitinfo(array $signals, array &$info = []): int|false\",\n        \"Waits for signals\"\n    ],\n    \"pcntl_strerror\": [\n        \"pcntl_strerror(int $error_code): string\",\n        \"Retrieve the system error message associated with the given errno\"\n    ],\n    \"pg_connect_poll\": [\n        \"pg_connect_poll(PgSql\\\\Connection $connection): int\",\n        \"\"\n    ],\n    \"pg_consume_input\": [\n        \"pg_consume_input(PgSql\\\\Connection $connection): bool\",\n        \"Reads input on the connection\"\n    ],\n    \"pg_escape_identifier\": [\n        \"pg_escape_identifier(PgSql\\\\Connection $connection = ?, string $data): string\",\n        \"\"\n    ],\n    \"pg_escape_literal\": [\n        \"pg_escape_literal(PgSql\\\\Connection $connection = ?, string $data): string\",\n        \"\"\n    ],\n    \"pg_flush\": [\n        \"pg_flush(PgSql\\\\Connection $connection): int|bool\",\n        \"Flush outbound query data on the connection\"\n    ],\n    \"pg_lo_truncate\": [\n        \"pg_lo_truncate(PgSql\\\\Lob $lob, int $size): bool\",\n        \"\"\n    ],\n    \"pg_socket\": [\n        \"pg_socket(PgSql\\\\Connection $connection): resource|false\",\n        \"\"\n    ],\n    \"pos\": [\n        \"pos()\",\n        \"Alias of current()\"\n    ],\n    \"posix_errno\": [\n        \"posix_errno()\",\n        \"Alias of posix_get_last_error()\"\n    ],\n    \"posix_setrlimit\": [\n        \"posix_setrlimit(int $resource, int $soft_limit, int $hard_limit): bool\",\n        \"Set system resource limits\"\n    ],\n    \"preg_last_error_msg\": [\n        \"preg_last_error_msg(): string\",\n        \"Returns the error message of the last PCRE regex execution\"\n    ],\n    \"preg_replace_callback_array\": [\n        \"preg_replace_callback_array(array $pattern, string|array $subject, int $limit = -1, int &$count = null, int $flags = 0): string|array|null\",\n        \"Perform a regular expression search and replace using callbacks\"\n    ],\n    \"ps_translate\": [\n        \"ps_translate(resource $psdoc, float $x, float $y): bool\",\n        \"Sets translation\"\n    ],\n    \"random_bytes\": [\n        \"random_bytes(int $length): string\",\n        \"Generates cryptographically secure pseudo-random bytes\"\n    ],\n    \"random_int\": [\n        \"random_int(int $min, int $max): int\",\n        \"Generates cryptographically secure pseudo-random integers\"\n    ],\n    \"read_exif_data\": [\n        \"read_exif_data()\",\n        \"Alias of exif_read_data()\"\n    ],\n    \"recode\": [\n        \"recode()\",\n        \"Alias of recode_string()\"\n    ],\n    \"session_abort\": [\n        \"session_abort(): bool\",\n        \"Discard session array changes and finish session\"\n    ],\n    \"session_commit\": [\n        \"session_commit()\",\n        \"Alias of session_write_close()\"\n    ],\n    \"session_create_id\": [\n        \"session_create_id(string $prefix = \\\"\\\"): string|false\",\n        \"Create new session id\"\n    ],\n    \"session_gc\": [\n        \"session_gc(): int|false\",\n        \"Perform session data garbage collection\"\n    ],\n    \"session_register_shutdown\": [\n        \"session_register_shutdown(): void\",\n        \"Session shutdown function\"\n    ],\n    \"session_reset\": [\n        \"session_reset(): bool\",\n        \"Re-initialize session array with original values\"\n    ],\n    \"session_status\": [\n        \"session_status(): int\",\n        \"Returns the current session status\"\n    ],\n    \"set_file_buffer\": [\n        \"set_file_buffer()\",\n        \"Alias of stream_set_write_buffer()\"\n    ],\n    \"show_source\": [\n        \"show_source()\",\n        \"Alias of highlight_file()\"\n    ],\n    \"sizeof\": [\n        \"sizeof()\",\n        \"Alias of count()\"\n    ],\n    \"snmp_set_oid_numeric_print\": [\n        \"snmp_set_oid_numeric_print(int $format): bool\",\n        \"\"\n    ],\n    \"snmpwalkoid\": [\n        \"snmpwalkoid(string $hostname, string $community, array|string $object_id, int $timeout = -1, int $retries = -1): array|false\",\n        \"\"\n    ],\n    \"socket_addrinfo_bind\": [\n        \"socket_addrinfo_bind(AddressInfo $address): Socket|false\",\n        \"Create and bind to a socket from a given addrinfo\"\n    ],\n    \"socket_addrinfo_connect\": [\n        \"socket_addrinfo_connect(AddressInfo $address): Socket|false\",\n        \"Create and connect to a socket from a given addrinfo\"\n    ],\n    \"socket_addrinfo_explain\": [\n        \"socket_addrinfo_explain(AddressInfo $address): array\",\n        \"Get information about addrinfo\"\n    ],\n    \"socket_addrinfo_lookup\": [\n        \"socket_addrinfo_lookup(string $host, ?string $service = null, array $hints = []): array|false\",\n        \"Get array with contents of getaddrinfo about the given hostname\"\n    ],\n    \"socket_cmsg_space\": [\n        \"socket_cmsg_space(int $level, int $type, int $num = 0): ?int\",\n        \"Calculate message buffer size\"\n    ],\n    \"socket_export_stream\": [\n        \"socket_export_stream(Socket $socket): resource|false\",\n        \"Export a socket into a stream that encapsulates a socket\"\n    ],\n    \"socket_get_status\": [\n        \"socket_get_status()\",\n        \"Alias of stream_get_meta_data()\"\n    ],\n    \"socket_getopt\": [\n        \"socket_getopt()\",\n        \"Alias of socket_get_option()\"\n    ],\n    \"socket_import_stream\": [\n        \"socket_import_stream(resource $stream): Socket|false\",\n        \"Import a stream\"\n    ],\n    \"socket_recvmsg\": [\n        \"socket_recvmsg(Socket $socket, array &$message, int $flags = 0): int|false\",\n        \"Read a message\"\n    ],\n    \"socket_sendmsg\": [\n        \"socket_sendmsg(Socket $socket, array $message, int $flags = 0): int|false\",\n        \"Send a message\"\n    ],\n    \"socket_set_blocking\": [\n        \"socket_set_blocking()\",\n        \"Alias of stream_set_blocking()\"\n    ],\n    \"socket_set_timeout\": [\n        \"socket_set_timeout()\",\n        \"Alias of stream_set_timeout()\"\n    ],\n    \"socket_setopt\": [\n        \"socket_setopt()\",\n        \"Alias of socket_set_option()\"\n    ],\n    \"socket_wsaprotocol_info_export\": [\n        \"socket_wsaprotocol_info_export(Socket $socket, int $process_id): string|false\",\n        \"Exports the WSAPROTOCOL_INFO Structure\"\n    ],\n    \"socket_wsaprotocol_info_import\": [\n        \"socket_wsaprotocol_info_import(string $info_id): Socket|false\",\n        \"Imports a Socket from another Process\"\n    ],\n    \"socket_wsaprotocol_info_release\": [\n        \"socket_wsaprotocol_info_release(string $info_id): bool\",\n        \"Releases an exported WSAPROTOCOL_INFO Structure\"\n    ],\n    \"spl_object_id\": [\n        \"spl_object_id(object $object): int\",\n        \"\"\n    ],\n    \"sqlsrv_begin_transaction\": [\n        \"sqlsrv_begin_transaction(resource $conn): bool\",\n        \"Begins a database transaction\"\n    ],\n    \"sqlsrv_cancel\": [\n        \"sqlsrv_cancel(resource $stmt): bool\",\n        \"Cancels a statement\"\n    ],\n    \"sqlsrv_client_info\": [\n        \"sqlsrv_client_info(resource $conn): array\",\n        \"Returns information about the client and specified connection\"\n    ],\n    \"sqlsrv_close\": [\n        \"sqlsrv_close(resource $conn): bool\",\n        \"Closes an open connection and releases resourses associated with the connection\"\n    ],\n    \"sqlsrv_commit\": [\n        \"sqlsrv_commit(resource $conn): bool\",\n        \"Commits a transaction that was begun with sqlsrv_begin_transaction()\"\n    ],\n    \"sqlsrv_configure\": [\n        \"sqlsrv_configure(string $setting, mixed $value): bool\",\n        \"Changes the driver error handling and logging configurations\"\n    ],\n    \"sqlsrv_connect\": [\n        \"sqlsrv_connect(string $serverName, array $connectionInfo = ?): resource\",\n        \"Opens a connection to a Microsoft SQL Server database\"\n    ],\n    \"sqlsrv_errors\": [\n        \"sqlsrv_errors(int $errorsOrWarnings = ?): mixed\",\n        \"Returns error and warning information about the last SQLSRV operation performed\"\n    ],\n    \"sqlsrv_execute\": [\n        \"sqlsrv_execute(resource $stmt): bool\",\n        \"Executes a statement prepared with sqlsrv_prepare()\"\n    ],\n    \"sqlsrv_fetch_array\": [\n        \"sqlsrv_fetch_array(resource $stmt, int $fetchType = ?, int $row = ?, int $offset = ?): array\",\n        \"Returns a row as an array\"\n    ],\n    \"sqlsrv_fetch_object\": [\n        \"sqlsrv_fetch_object(resource $stmt, string $className = ?, array $ctorParams = ?, int $row = ?, int $offset = ?): mixed\",\n        \"Retrieves the next row of data in a result set as an object\"\n    ],\n    \"sqlsrv_fetch\": [\n        \"sqlsrv_fetch(resource $stmt, int $row = ?, int $offset = ?): mixed\",\n        \"Makes the next row in a result set available for reading\"\n    ],\n    \"sqlsrv_field_metadata\": [\n        \"sqlsrv_field_metadata(resource $stmt): mixed\",\n        \"\"\n    ],\n    \"sqlsrv_free_stmt\": [\n        \"sqlsrv_free_stmt(resource $stmt): bool\",\n        \"Frees all resources for the specified statement\"\n    ],\n    \"sqlsrv_get_config\": [\n        \"sqlsrv_get_config(string $setting): mixed\",\n        \"Returns the value of the specified configuration setting\"\n    ],\n    \"sqlsrv_get_field\": [\n        \"sqlsrv_get_field(resource $stmt, int $fieldIndex, int $getAsType = ?): mixed\",\n        \"Gets field data from the currently selected row\"\n    ],\n    \"sqlsrv_has_rows\": [\n        \"sqlsrv_has_rows(resource $stmt): bool\",\n        \"Indicates whether the specified statement has rows\"\n    ],\n    \"sqlsrv_next_result\": [\n        \"sqlsrv_next_result(resource $stmt): mixed\",\n        \"Makes the next result of the specified statement active\"\n    ],\n    \"sqlsrv_num_fields\": [\n        \"sqlsrv_num_fields(resource $stmt): mixed\",\n        \"Retrieves the number of fields (columns) on a statement\"\n    ],\n    \"sqlsrv_num_rows\": [\n        \"sqlsrv_num_rows(resource $stmt): mixed\",\n        \"Retrieves the number of rows in a result set\"\n    ],\n    \"sqlsrv_prepare\": [\n        \"sqlsrv_prepare(resource $conn, string $sql, array $params = ?, array $options = ?): mixed\",\n        \"Prepares a query for execution\"\n    ],\n    \"sqlsrv_query\": [\n        \"sqlsrv_query(resource $conn, string $sql, array $params = ?, array $options = ?): mixed\",\n        \"Prepares and executes a query\"\n    ],\n    \"sqlsrv_rollback\": [\n        \"sqlsrv_rollback(resource $conn): bool\",\n        \"\"\n    ],\n    \"sqlsrv_rows_affected\": [\n        \"sqlsrv_rows_affected(resource $stmt): int|false\",\n        \"\"\n    ],\n    \"sqlsrv_send_stream_data\": [\n        \"sqlsrv_send_stream_data(resource $stmt): bool\",\n        \"Sends data from parameter streams to the server\"\n    ],\n    \"sqlsrv_server_info\": [\n        \"sqlsrv_server_info(resource $conn): array\",\n        \"Returns information about the server\"\n    ],\n    \"str_contains\": [\n        \"str_contains(string $haystack, string $needle): bool\",\n        \"Determine if a string contains a given substring\"\n    ],\n    \"str_ends_with\": [\n        \"str_ends_with(string $haystack, string $needle): bool\",\n        \"Checks if a string ends with a given substring\"\n    ],\n    \"str_starts_with\": [\n        \"str_starts_with(string $haystack, string $needle): bool\",\n        \"Checks if a string starts with a given substring\"\n    ],\n    \"stream_isatty\": [\n        \"stream_isatty(resource $stream): bool\",\n        \"Check if a stream is a TTY\"\n    ],\n    \"stream_notification_callback\": [\n        \"stream_notification_callback(int $notification_code, int $severity, string $message, int $message_code, int $bytes_transferred, int $bytes_max): void\",\n        \"A callback function for the notification context parameter\"\n    ],\n    \"stream_register_wrapper\": [\n        \"stream_register_wrapper()\",\n        \"Alias of stream_wrapper_register()\"\n    ],\n    \"stream_set_chunk_size\": [\n        \"stream_set_chunk_size(resource $stream, int $size): int\",\n        \"Set the stream chunk size\"\n    ],\n    \"stream_set_read_buffer\": [\n        \"stream_set_read_buffer(resource $stream, int $size): int\",\n        \"Set read file buffering on the given stream\"\n    ],\n    \"tcpwrap_check\": [\n        \"tcpwrap_check(string $daemon, string $address, string $user = ?, bool $nodns = false): bool\",\n        \"Performs a tcpwrap check\"\n    ],\n    \"trait_exists\": [\n        \"trait_exists(string $trait, bool $autoload = true): bool\",\n        \"Checks if the trait exists\"\n    ],\n    \"use_soap_error_handler\": [\n        \"use_soap_error_handler(bool $enable = true): bool\",\n        \"Set whether to use the SOAP error handler\"\n    ],\n    \"user_error\": [\n        \"user_error()\",\n        \"Alias of trigger_error()\"\n    ],\n    \"yaml_emit_file\": [\n        \"yaml_emit_file(string $filename, mixed $data, int $encoding = YAML_ANY_ENCODING, int $linebreak = YAML_ANY_BREAK, array $callbacks = null): bool\",\n        \"Send the YAML representation of a value to a file\"\n    ],\n    \"yaml_emit\": [\n        \"yaml_emit(mixed $data, int $encoding = YAML_ANY_ENCODING, int $linebreak = YAML_ANY_BREAK, array $callbacks = null): string\",\n        \"Returns the YAML representation of a value\"\n    ],\n    \"yaml_parse_file\": [\n        \"yaml_parse_file(string $filename, int $pos = 0, int &$ndocs = ?, array $callbacks = null): mixed\",\n        \"Parse a YAML stream from a file\"\n    ],\n    \"yaml_parse_url\": [\n        \"yaml_parse_url(string $url, int $pos = 0, int &$ndocs = ?, array $callbacks = null): mixed\",\n        \"Parse a Yaml stream from a URL\"\n    ],\n    \"yaml_parse\": [\n        \"yaml_parse(string $input, int $pos = 0, int &$ndocs = ?, array $callbacks = null): mixed\",\n        \"Parse a YAML stream\"\n    ],\n    \"zlib_decode\": [\n        \"zlib_decode(string $data, int $max_length = 0): string|false\",\n        \"Uncompress any raw/gzip/zlib encoded data\"\n    ],\n    \"zlib_encode\": [\n        \"zlib_encode(string $data, int $encoding, int $level = -1): string|false\",\n        \"Compress data with the specified encoding\"\n    ]\n};\nvar variableMap = {\n    \"$_COOKIE\": {\n        type: \"array\"\n    },\n    \"$_ENV\": {\n        type: \"array\"\n    },\n    \"$_FILES\": {\n        type: \"array\"\n    },\n    \"$_GET\": {\n        type: \"array\"\n    },\n    \"$_POST\": {\n        type: \"array\"\n    },\n    \"$_REQUEST\": {\n        type: \"array\"\n    },\n    \"$_SERVER\": {\n        type: \"array\",\n        value: {\n            \"DOCUMENT_ROOT\": 1,\n            \"GATEWAY_INTERFACE\": 1,\n            \"HTTP_ACCEPT\": 1,\n            \"HTTP_ACCEPT_CHARSET\": 1,\n            \"HTTP_ACCEPT_ENCODING\": 1,\n            \"HTTP_ACCEPT_LANGUAGE\": 1,\n            \"HTTP_CONNECTION\": 1,\n            \"HTTP_HOST\": 1,\n            \"HTTP_REFERER\": 1,\n            \"HTTP_USER_AGENT\": 1,\n            \"PATH_TRANSLATED\": 1,\n            \"PHP_SELF\": 1,\n            \"QUERY_STRING\": 1,\n            \"REMOTE_ADDR\": 1,\n            \"REMOTE_PORT\": 1,\n            \"REQUEST_METHOD\": 1,\n            \"REQUEST_URI\": 1,\n            \"SCRIPT_FILENAME\": 1,\n            \"SCRIPT_NAME\": 1,\n            \"SERVER_ADMIN\": 1,\n            \"SERVER_NAME\": 1,\n            \"SERVER_PORT\": 1,\n            \"SERVER_PROTOCOL\": 1,\n            \"SERVER_SIGNATURE\": 1,\n            \"SERVER_SOFTWARE\": 1,\n            \"argv\": 1,\n            \"argc\": 1\n        }\n    },\n    \"$_SESSION\": {\n        type: \"array\"\n    },\n    \"$GLOBALS\": {\n        type: \"array\"\n    },\n    '$argv': {\n        type: \"array\"\n    },\n    '$argc': {\n        type: \"int\"\n    }\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type) > -1;\n}\nvar PhpCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (token.type === 'support.php_tag' && token.value === '<?')\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (token.type === 'identifier') {\n            if (token.index > 0) {\n                var prevToken = session.getTokenAt(pos.row, token.start);\n                if (prevToken.type === 'support.php_tag') {\n                    return this.getTagCompletions(state, session, pos, prefix);\n                }\n            }\n            return this.getFunctionCompletions(state, session, pos, prefix);\n        }\n        if (is(token, \"variable\"))\n            return this.getVariableCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (token.type === 'string' && /(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(line))\n            return this.getArrayKeyCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return [{\n                caption: 'php',\n                value: 'php',\n                meta: \"php tag\",\n                score: 1000000\n            }, {\n                caption: '=',\n                value: '=',\n                meta: \"php tag\",\n                score: 1000000\n            }];\n    };\n    this.getFunctionCompletions = function (state, session, pos, prefix) {\n        var functions = Object.keys(functionMap);\n        return functions.map(function (func) {\n            return {\n                caption: func,\n                snippet: func + '($0)',\n                meta: \"php function\",\n                score: 1000000,\n                docHTML: functionMap[func][1]\n            };\n        });\n    };\n    this.getVariableCompletions = function (state, session, pos, prefix) {\n        var variables = Object.keys(variableMap);\n        return variables.map(function (variable) {\n            return {\n                caption: variable,\n                value: variable,\n                meta: \"php variable\",\n                score: 1000000\n            };\n        });\n    };\n    this.getArrayKeyCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var variable = line.match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];\n        if (!variableMap[variable]) {\n            return [];\n        }\n        var keys = [];\n        if (variableMap[variable].type === 'array' && variableMap[variable].value)\n            keys = Object.keys(variableMap[variable].value);\n        return keys.map(function (key) {\n            return {\n                caption: key,\n                value: key,\n                meta: \"php array key\",\n                score: 1000000\n            };\n        });\n    };\n}).call(PhpCompletions.prototype);\nexports.PhpCompletions = PhpCompletions;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/php_completions\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PhpHighlightRules = require(\"./php_highlight_rules\").PhpHighlightRules;\nvar PhpLangHighlightRules = require(\"./php_highlight_rules\").PhpLangHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar PhpCompletions = require(\"./php_completions\").PhpCompletions;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar unicode = require(\"../unicode\");\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar PhpMode = function (opts) {\n    this.HighlightRules = PhpLangHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.$completer = new PhpCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(PhpMode, TextMode);\n(function () {\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"_]+\", \"g\");\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"_]|\\\\s])+\", \"g\");\n    this.lineCommentStart = [\"//\", \"#\"];\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState != \"doc-start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.$id = \"ace/mode/php-inline\";\n}).call(PhpMode.prototype);\nvar Mode = function (opts) {\n    if (opts && opts.inline) {\n        var mode = new PhpMode();\n        mode.createWorker = this.createWorker;\n        mode.inlinePhp = true;\n        return mode;\n    }\n    HtmlMode.call(this);\n    this.HighlightRules = PhpHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"php-\": PhpMode\n    });\n    this.foldingRules.subModes[\"php-\"] = new CStyleFoldMode();\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/php_worker\", \"PhpWorker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.inlinePhp)\n            worker.call(\"setOptions\", [{ inline: true }]);\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/php\";\n    this.snippetFileId = \"ace/snippets/php\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/php_laravel_blade\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/php_laravel_blade_highlight_rules\",\"ace/mode/php\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar PHPLaravelBladeHighlightRules = require(\"./php_laravel_blade_highlight_rules\").PHPLaravelBladeHighlightRules;\nvar PHPMode = require(\"./php\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlMode = require(\"./html\").Mode;\nvar Mode = function () {\n    PHPMode.call(this);\n    this.HighlightRules = PHPLaravelBladeHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"html-\": HtmlMode\n    });\n};\noop.inherits(Mode, PHPMode);\n(function () {\n    this.$id = \"ace/mode/php_laravel_blade\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/php_laravel_blade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-pig.js",
    "content": "ace.define(\"ace/mode/pig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from Pig.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PigHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                token: \"comment.block.pig\",\n                regex: /\\/\\*/,\n                push: [{\n                        token: \"comment.block.pig\",\n                        regex: /\\*\\//,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.block.pig\"\n                    }]\n            }, {\n                token: \"comment.line.double-dash.asciidoc\",\n                regex: /--.*$/\n            }, {\n                token: \"keyword.control.pig\",\n                regex: /\\b(?:ASSERT|LOAD|STORE|DUMP|FILTER|DISTINCT|FOREACH|GENERATE|STREAM|JOIN|COGROUP|GROUP|CROSS|ORDER|LIMIT|UNION|SPLIT|DESCRIBE|EXPLAIN|ILLUSTRATE|AS|BY|INTO|USING|LIMIT|PARALLEL|OUTER|INNER|DEFAULT|LEFT|SAMPLE|RANK|CUBE|ALL|KILL|QUIT|MAPREDUCE|ASC|DESC|THROUGH|SHIP|CACHE|DECLARE|CASE|WHEN|THEN|END|IN|PARTITION|FULL|IMPORT|IF|ONSCHEMA|INPUT|OUTPUT)\\b/,\n                caseInsensitive: true\n            }, {\n                token: \"storage.datatypes.pig\",\n                regex: /\\b(?:int|long|float|double|chararray|bytearray|boolean|datetime|biginteger|bigdecimal|tuple|bag|map)\\b/,\n                caseInsensitive: true\n            }, {\n                token: \"support.function.storage.pig\",\n                regex: /\\b(?:PigStorage|BinStorage|BinaryStorage|PigDump|HBaseStorage|JsonLoader|JsonStorage|AvroStorage|TextLoader|PigStreaming|TrevniStorage|AccumuloStorage)\\b/\n            }, {\n                token: \"support.function.udf.pig\",\n                regex: /\\b(?:DIFF|TOBAG|TOMAP|TOP|TOTUPLE|RANDOM|FLATTEN|flatten|CUBE|ROLLUP|IsEmpty|ARITY|PluckTuple|SUBTRACT|BagToString)\\b/\n            }, {\n                token: \"support.function.udf.math.pig\",\n                regex: /\\b(?:ABS|ACOS|ASIN|ATAN|CBRT|CEIL|COS|COSH|EXP|FLOOR|LOG|LOG10|ROUND|ROUND_TO|SIN|SINH|SQRT|TAN|TANH|AVG|COUNT|COUNT_STAR|MAX|MIN|SUM|COR|COV)\\b/\n            }, {\n                token: \"support.function.udf.string.pig\",\n                regex: /\\b(?:CONCAT|INDEXOF|LAST_INDEX_OF|LCFIRST|LOWER|REGEX_EXTRACT|REGEX_EXTRACT_ALL|REPLACE|SIZE|STRSPLIT|SUBSTRING|TOKENIZE|TRIM|UCFIRST|UPPER|LTRIM|RTRIM|ENDSWITH|STARTSWITH|TRIM)\\b/\n            }, {\n                token: \"support.function.udf.datetime.pig\",\n                regex: /\\b(?:AddDuration|CurrentTime|DaysBetween|GetDay|GetHour|GetMilliSecond|GetMinute|GetMonth|GetSecond|GetWeek|GetWeekYear|GetYear|HoursBetween|MilliSecondsBetween|MinutesBetween|MonthsBetween|SecondsBetween|SubtractDuration|ToDate|WeeksBetween|YearsBetween|ToMilliSeconds|ToString|ToUnixTime)\\b/\n            }, {\n                token: \"support.function.command.pig\",\n                regex: /\\b(?:cat|cd|copyFromLocal|copyToLocal|cp|ls|mkdir|mv|pwd|rm)\\b/\n            }, {\n                token: \"variable.pig\",\n                regex: /\\$[a_zA-Z0-9_]+/\n            }, {\n                token: \"constant.language.pig\",\n                regex: /\\b(?:NULL|true|false|stdin|stdout|stderr)\\b/,\n                caseInsensitive: true\n            }, {\n                token: \"constant.numeric.pig\",\n                regex: /\\b\\d+(?:\\.\\d+)?\\b/\n            }, {\n                token: \"keyword.operator.comparison.pig\",\n                regex: /!=|==|<|>|<=|>=|\\b(?:MATCHES|IS|OR|AND|NOT)\\b/,\n                caseInsensitive: true\n            }, {\n                token: \"keyword.operator.arithmetic.pig\",\n                regex: /\\+|\\-|\\*|\\/|\\%|\\?|:|::|\\.\\.|#/\n            }, {\n                token: \"string.quoted.double.pig\",\n                regex: /\"/,\n                push: [{\n                        token: \"string.quoted.double.pig\",\n                        regex: /\"/,\n                        next: \"pop\"\n                    }, {\n                        token: \"constant.character.escape.pig\",\n                        regex: /\\\\./\n                    }, {\n                        defaultToken: \"string.quoted.double.pig\"\n                    }]\n            }, {\n                token: \"string.quoted.single.pig\",\n                regex: /'/,\n                push: [{\n                        token: \"string.quoted.single.pig\",\n                        regex: /'/,\n                        next: \"pop\"\n                    }, {\n                        token: \"constant.character.escape.pig\",\n                        regex: /\\\\./\n                    }, {\n                        defaultToken: \"string.quoted.single.pig\"\n                    }]\n            }, {\n                todo: {\n                    token: [\n                        \"text\",\n                        \"keyword.parameter.pig\",\n                        \"text\",\n                        \"storage.type.parameter.pig\"\n                    ],\n                    regex: /^(\\s*)(set)(\\s+)(\\S+)/,\n                    caseInsensitive: true,\n                    push: [{\n                            token: \"text\",\n                            regex: /$/,\n                            next: \"pop\"\n                        }, {\n                            include: \"$self\"\n                        }]\n                }\n            }, {\n                token: [\n                    \"text\",\n                    \"keyword.alias.pig\",\n                    \"text\",\n                    \"storage.type.alias.pig\"\n                ],\n                regex: /(\\s*)(DEFINE|DECLARE|REGISTER)(\\s+)(\\S+)/,\n                caseInsensitive: true,\n                push: [{\n                        token: \"text\",\n                        regex: /;?$/,\n                        next: \"pop\"\n                    }]\n            }]\n    };\n    this.normalizeRules();\n};\nPigHighlightRules.metaData = {\n    fileTypes: [\"pig\"],\n    name: \"Pig\",\n    scopeName: \"source.pig\"\n};\noop.inherits(PigHighlightRules, TextHighlightRules);\nexports.PigHighlightRules = PigHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/pig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pig_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PigHighlightRules = require(\"./pig_highlight_rules\").PigHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = PigHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/pig\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/pig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-plain_text.js",
    "content": "ace.define(\"ace/mode/plain_text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar Behaviour = require(\"./behaviour\").Behaviour;\nvar Mode = function () {\n    this.HighlightRules = TextHighlightRules;\n    this.$behaviour = new Behaviour();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.type = \"text\";\n    this.getNextLineIndent = function (state, line, tab) {\n        return '';\n    };\n    this.$id = \"ace/mode/plain_text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/plain_text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-powershell.js",
    "content": "ace.define(\"ace/mode/powershell_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PowershellHighlightRules = function () {\n    var keywords = (\"begin|break|catch|continue|data|do|dynamicparam|else|elseif|end|exit|filter|\" +\n        \"finally|for|foreach|from|function|if|in|inlinescript|hidden|parallel|param|\" +\n        \"process|return|sequence|switch|throw|trap|try|until|while|workflow\");\n    var builtinFunctions = (\n    \"Get-AppBackgroundTask|Start-AppBackgroundTask|Unregister-AppBackgroundTask|Disable-AppBackgroundTaskDiagnosticLog|Enable-AppBackgroundTaskDiagnosticLog|Set-AppBackgroundTaskResourcePolicy|\" +\n        \"Get-AppLockerFileInformation|Get-AppLockerPolicy|New-AppLockerPolicy|Set-AppLockerPolicy|Test-AppLockerPolicy|\" +\n        \"Get-AppxLastError|Get-AppxLog|Add-AppxPackage|Add-AppxVolume|Dismount-AppxVolume|Get-AppxDefaultVolume|Get-AppxPackage|Get-AppxPackageManifest|Get-AppxVolume|Mount-AppxVolume|Move-AppxPackage|Remove-AppxPackage|Remove-AppxVolume|Set-AppxDefaultVolume|\" +\n        \"Clear-AssignedAccess|Get-AssignedAccess|Set-AssignedAccess|\" +\n        \"Add-BitLockerKeyProtector|Backup-BitLockerKeyProtector|Clear-BitLockerAutoUnlock|Disable-BitLocker|Disable-BitLockerAutoUnlock|Enable-BitLocker|Enable-BitLockerAutoUnlock|Get-BitLockerVolume|Lock-BitLocker|Remove-BitLockerKeyProtector|Resume-BitLocker|Suspend-BitLocker|Unlock-BitLocker|\" +\n        \"Add-BitsFile|Complete-BitsTransfer|Get-BitsTransfer|Remove-BitsTransfer|Resume-BitsTransfer|Set-BitsTransfer|Start-BitsTransfer|Suspend-BitsTransfer|\" +\n        \"Add-BCDataCacheExtension|Clear-BCCache|Disable-BC|Disable-BCDowngrading|Disable-BCServeOnBattery|Enable-BCDistributed|Enable-BCDowngrading|Enable-BCHostedClient|Enable-BCHostedServer|Enable-BCLocal|Enable-BCServeOnBattery|Export-BCCachePackage|Export-BCSecretKey|Get-BCClientConfiguration|Get-BCContentServerConfiguration|Get-BCDataCache|Get-BCDataCacheExtension|Get-BCHashCache|Get-BCHostedCacheServerConfiguration|Get-BCNetworkConfiguration|Get-BCStatus|Import-BCCachePackage|Import-BCSecretKey|Publish-BCFileContent|Publish-BCWebContent|Remove-BCDataCacheExtension|Reset-BC|Set-BCAuthentication|Set-BCCache|Set-BCDataCacheEntryMaxAge|Set-BCMinSMBLatency|Set-BCSecretKey|\" +\n        \"Export-BinaryMiLog|Get-CimAssociatedInstance|Get-CimClass|Get-CimInstance|Get-CimSession|Import-BinaryMiLog|Invoke-CimMethod|New-CimInstance|New-CimSession|New-CimSessionOption|Register-CimIndicationEvent|Remove-CimInstance|Remove-CimSession|Set-CimInstance|\" +\n        \"ConvertFrom-CIPolicy|\" +\n        \"Add-SignerRule|Edit-CIPolicyRule|Get-CIPolicy|Get-CIPolicyInfo|Get-SystemDriver|Merge-CIPolicy|New-CIPolicy|New-CIPolicyRule|Remove-CIPolicyRule|Set-CIPolicyVersion|Set-HVCIOptions|Set-RuleOption|\" +\n        \"Add-MpPreference|Get-MpComputerStatus|Get-MpPreference|Get-MpThreat|Get-MpThreatCatalog|Get-MpThreatDetection|Remove-MpPreference|Remove-MpThreat|Set-MpPreference|Start-MpScan|Start-MpWDOScan|Update-MpSignature|\" +\n        \"Disable-DAManualEntryPointSelection|Enable-DAManualEntryPointSelection|Get-DAClientExperienceConfiguration|Get-DAEntryPointTableItem|New-DAEntryPointTableItem|Remove-DAEntryPointTableItem|Rename-DAEntryPointTableItem|Reset-DAClientExperienceConfiguration|Reset-DAEntryPointTableItem|Set-DAClientExperienceConfiguration|Set-DAEntryPointTableItem|\" +\n        \"Add-ProvisionedAppxPackage|Apply-WindowsUnattend|Get-ProvisionedAppxPackage|Remove-ProvisionedAppxPackage|Add-AppxProvisionedPackage|Add-WindowsCapability|Add-WindowsDriver|Add-WindowsImage|Add-WindowsPackage|Clear-WindowsCorruptMountPoint|Disable-WindowsOptionalFeature|Dismount-WindowsImage|Enable-WindowsOptionalFeature|Expand-WindowsCustomDataImage|Expand-WindowsImage|Export-WindowsDriver|Export-WindowsImage|Get-AppxProvisionedPackage|Get-WIMBootEntry|Get-WindowsCapability|Get-WindowsDriver|Get-WindowsEdition|Get-WindowsImage|Get-WindowsImageContent|Get-WindowsOptionalFeature|Get-WindowsPackage|Mount-WindowsImage|New-WindowsCustomImage|New-WindowsImage|Optimize-WindowsImage|Remove-AppxProvisionedPackage|Remove-WindowsCapability|Remove-WindowsDriver|Remove-WindowsImage|Remove-WindowsPackage|Repair-WindowsImage|Save-WindowsImage|Set-AppXProvisionedDataFile|Set-WindowsEdition|Set-WindowsProductKey|Split-WindowsImage|Update-WIMBootEntry|Use-WindowsUnattend|\" +\n        \"Add-DnsClientNrptRule|Clear-DnsClientCache|Get-DnsClient|Get-DnsClientCache|Get-DnsClientGlobalSetting|Get-DnsClientNrptGlobal|Get-DnsClientNrptPolicy|Get-DnsClientNrptRule|Get-DnsClientServerAddress|Register-DnsClient|Remove-DnsClientNrptRule|Set-DnsClient|Set-DnsClientGlobalSetting|Set-DnsClientNrptGlobal|Set-DnsClientNrptRule|Set-DnsClientServerAddress|Resolve-DnsName|\" +\n        \"Add-EtwTraceProvider|Get-AutologgerConfig|Get-EtwTraceProvider|Get-EtwTraceSession|New-AutologgerConfig|New-EtwTraceSession|Remove-AutologgerConfig|Remove-EtwTraceProvider|Remove-EtwTraceSession|Send-EtwTraceSession|Set-AutologgerConfig|Set-EtwTraceProvider|Set-EtwTraceSession|\" +\n        \"Get-WinAcceptLanguageFromLanguageListOptOut|Get-WinCultureFromLanguageListOptOut|Get-WinDefaultInputMethodOverride|Get-WinHomeLocation|Get-WinLanguageBarOption|Get-WinSystemLocale|Get-WinUILanguageOverride|Get-WinUserLanguageList|New-WinUserLanguageList|Set-Culture|Set-WinAcceptLanguageFromLanguageListOptOut|Set-WinCultureFromLanguageListOptOut|Set-WinDefaultInputMethodOverride|Set-WinHomeLocation|Set-WinLanguageBarOption|Set-WinSystemLocale|Set-WinUILanguageOverride|Set-WinUserLanguageList|\" +\n        \"Connect-IscsiTarget|Disconnect-IscsiTarget|Get-IscsiConnection|Get-IscsiSession|Get-IscsiTarget|Get-IscsiTargetPortal|New-IscsiTargetPortal|Register-IscsiSession|Remove-IscsiTargetPortal|Set-IscsiChapSecret|Unregister-IscsiSession|Update-IscsiTarget|Update-IscsiTargetPortal|\" +\n        \"Get-IseSnippet|Import-IseSnippet|New-IseSnippet|\" +\n        \"Add-KdsRootKey|Clear-KdsCache|Get-KdsConfiguration|Get-KdsRootKey|Set-KdsConfiguration|Test-KdsRootKey|\" +\n        \"Compress-Archive|Expand-Archive|\" +\n        \"Export-Counter|Get-Counter|Get-WinEvent|Import-Counter|New-WinEvent|\" +\n        \"Start-Transcript|Stop-Transcript|\" +\n        \"Add-Computer|Add-Content|Checkpoint-Computer|Clear-Content|Clear-EventLog|Clear-Item|Clear-ItemProperty|Clear-RecycleBin|Complete-Transaction|Convert-Path|Copy-Item|Copy-ItemProperty|Debug-Process|Disable-ComputerRestore|Enable-ComputerRestore|Get-ChildItem|Get-Clipboard|Get-ComputerRestorePoint|Get-Content|Get-ControlPanelItem|Get-EventLog|Get-HotFix|Get-Item|Get-ItemProperty|Get-ItemPropertyValue|Get-Location|Get-Process|Get-PSDrive|Get-PSProvider|Get-Service|Get-Transaction|Get-WmiObject|Invoke-Item|Invoke-WmiMethod|Join-Path|Limit-EventLog|Move-Item|Move-ItemProperty|New-EventLog|New-Item|New-ItemProperty|New-PSDrive|New-Service|New-WebServiceProxy|Pop-Location|Push-Location|Register-WmiEvent|Remove-Computer|Remove-EventLog|Remove-Item|Remove-ItemProperty|Remove-PSDrive|Remove-WmiObject|Rename-Computer|Rename-Item|Rename-ItemProperty|Reset-ComputerMachinePassword|Resolve-Path|Restart-Computer|Restart-Service|Restore-Computer|Resume-Service|Set-Clipboard|Set-Content|Set-Item|Set-ItemProperty|Set-Location|Set-Service|Set-WmiInstance|Show-ControlPanelItem|Show-EventLog|Split-Path|Start-Process|Start-Service|Start-Transaction|Stop-Computer|Stop-Process|Stop-Service|Suspend-Service|Test-ComputerSecureChannel|Test-Connection|Test-Path|Undo-Transaction|Use-Transaction|Wait-Process|Write-EventLog|\" +\n        \"Export-ODataEndpointProxy|\" +\n        \"ConvertFrom-SecureString|ConvertTo-SecureString|Get-Acl|Get-AuthenticodeSignature|Get-CmsMessage|Get-Credential|Get-ExecutionPolicy|Get-PfxCertificate|Protect-CmsMessage|Set-Acl|Set-AuthenticodeSignature|Set-ExecutionPolicy|Unprotect-CmsMessage|\" +\n        \"ConvertFrom-SddlString|Format-Hex|Get-FileHash|Import-PowerShellDataFile|New-Guid|New-TemporaryFile|Add-Member|Add-Type|Clear-Variable|Compare-Object|ConvertFrom-Csv|ConvertFrom-Json|ConvertFrom-String|ConvertFrom-StringData|Convert-String|ConvertTo-Csv|ConvertTo-Html|ConvertTo-Json|ConvertTo-Xml|Debug-Runspace|Disable-PSBreakpoint|Disable-RunspaceDebug|Enable-PSBreakpoint|Enable-RunspaceDebug|Export-Alias|Export-Clixml|Export-Csv|Export-FormatData|Export-PSSession|Format-Custom|Format-List|Format-Table|Format-Wide|Get-Alias|Get-Culture|Get-Date|Get-Event|Get-EventSubscriber|Get-FormatData|Get-Host|Get-Member|Get-PSBreakpoint|Get-PSCallStack|Get-Random|Get-Runspace|Get-RunspaceDebug|Get-TraceSource|Get-TypeData|Get-UICulture|Get-Unique|Get-Variable|Group-Object|Import-Alias|Import-Clixml|Import-Csv|Import-LocalizedData|Import-PSSession|Invoke-Expression|Invoke-RestMethod|Invoke-WebRequest|Measure-Command|Measure-Object|New-Alias|New-Event|New-Object|New-TimeSpan|New-Variable|Out-File|Out-GridView|Out-Printer|Out-String|Read-Host|Register-EngineEvent|Register-ObjectEvent|Remove-Event|Remove-PSBreakpoint|Remove-TypeData|Remove-Variable|Select-Object|Select-String|Select-Xml|Send-MailMessage|Set-Alias|Set-Date|Set-PSBreakpoint|Set-TraceSource|Set-Variable|Show-Command|Sort-Object|Start-Sleep|Tee-Object|Trace-Command|Unblock-File|Unregister-Event|Update-FormatData|Update-List|Update-TypeData|Wait-Debugger|Wait-Event|Write-Debug|Write-Error|Write-Host|Write-Information|Write-Output|Write-Progress|Write-Verbose|Write-Warning|\" +\n        \"Connect-WSMan|Disable-WSManCredSSP|Disconnect-WSMan|Enable-WSManCredSSP|Get-WSManCredSSP|Get-WSManInstance|Invoke-WSManAction|New-WSManInstance|New-WSManSessionOption|Remove-WSManInstance|Set-WSManInstance|Set-WSManQuickConfig|Test-WSMan|\" +\n        \"Debug-MMAppPrelaunch|Disable-MMAgent|Enable-MMAgent|Get-MMAgent|Set-MMAgent|\" +\n        \"Add-DtcClusterTMMapping|Get-Dtc|Get-DtcAdvancedHostSetting|Get-DtcAdvancedSetting|Get-DtcClusterDefault|Get-DtcClusterTMMapping|Get-DtcDefault|Get-DtcLog|Get-DtcNetworkSetting|Get-DtcTransaction|Get-DtcTransactionsStatistics|Get-DtcTransactionsTraceSession|Get-DtcTransactionsTraceSetting|Install-Dtc|Remove-DtcClusterTMMapping|Reset-DtcLog|Set-DtcAdvancedHostSetting|Set-DtcAdvancedSetting|Set-DtcClusterDefault|Set-DtcClusterTMMapping|Set-DtcDefault|Set-DtcLog|Set-DtcNetworkSetting|Set-DtcTransaction|Set-DtcTransactionsTraceSession|Set-DtcTransactionsTraceSetting|Start-Dtc|Start-DtcTransactionsTraceSession|Stop-Dtc|Stop-DtcTransactionsTraceSession|Test-Dtc|Uninstall-Dtc|Write-DtcTransactionsTraceSession|Complete-DtcDiagnosticTransaction|Join-DtcDiagnosticResourceManager|New-DtcDiagnosticTransaction|Receive-DtcDiagnosticTransaction|Send-DtcDiagnosticTransaction|Start-DtcDiagnosticResourceManager|Stop-DtcDiagnosticResourceManager|Undo-DtcDiagnosticTransaction|\" +\n        \"Disable-NetAdapter|Disable-NetAdapterBinding|Disable-NetAdapterChecksumOffload|Disable-NetAdapterEncapsulatedPacketTaskOffload|Disable-NetAdapterIPsecOffload|Disable-NetAdapterLso|Disable-NetAdapterPacketDirect|Disable-NetAdapterPowerManagement|Disable-NetAdapterQos|Disable-NetAdapterRdma|Disable-NetAdapterRsc|Disable-NetAdapterRss|Disable-NetAdapterSriov|Disable-NetAdapterVmq|Enable-NetAdapter|Enable-NetAdapterBinding|Enable-NetAdapterChecksumOffload|Enable-NetAdapterEncapsulatedPacketTaskOffload|Enable-NetAdapterIPsecOffload|Enable-NetAdapterLso|Enable-NetAdapterPacketDirect|Enable-NetAdapterPowerManagement|Enable-NetAdapterQos|Enable-NetAdapterRdma|Enable-NetAdapterRsc|Enable-NetAdapterRss|Enable-NetAdapterSriov|Enable-NetAdapterVmq|Get-NetAdapter|Get-NetAdapterAdvancedProperty|Get-NetAdapterBinding|Get-NetAdapterChecksumOffload|Get-NetAdapterEncapsulatedPacketTaskOffload|Get-NetAdapterHardwareInfo|Get-NetAdapterIPsecOffload|Get-NetAdapterLso|Get-NetAdapterPacketDirect|Get-NetAdapterPowerManagement|Get-NetAdapterQos|Get-NetAdapterRdma|Get-NetAdapterRsc|Get-NetAdapterRss|Get-NetAdapterSriov|Get-NetAdapterSriovVf|Get-NetAdapterStatistics|Get-NetAdapterVmq|Get-NetAdapterVmqQueue|Get-NetAdapterVPort|New-NetAdapterAdvancedProperty|Remove-NetAdapterAdvancedProperty|Rename-NetAdapter|Reset-NetAdapterAdvancedProperty|Restart-NetAdapter|Set-NetAdapter|Set-NetAdapterAdvancedProperty|Set-NetAdapterBinding|Set-NetAdapterChecksumOffload|Set-NetAdapterEncapsulatedPacketTaskOffload|Set-NetAdapterIPsecOffload|Set-NetAdapterLso|Set-NetAdapterPacketDirect|Set-NetAdapterPowerManagement|Set-NetAdapterQos|Set-NetAdapterRdma|Set-NetAdapterRsc|Set-NetAdapterRss|Set-NetAdapterSriov|Set-NetAdapterVmq|\" +\n        \"Get-NetConnectionProfile|Set-NetConnectionProfile|\" +\n        \"Add-NetEventNetworkAdapter|Add-NetEventPacketCaptureProvider|Add-NetEventProvider|Add-NetEventVmNetworkAdapter|Add-NetEventVmSwitch|Add-NetEventWFPCaptureProvider|Get-NetEventNetworkAdapter|Get-NetEventPacketCaptureProvider|Get-NetEventProvider|Get-NetEventSession|Get-NetEventVmNetworkAdapter|Get-NetEventVmSwitch|Get-NetEventWFPCaptureProvider|New-NetEventSession|Remove-NetEventNetworkAdapter|Remove-NetEventPacketCaptureProvider|Remove-NetEventProvider|Remove-NetEventSession|Remove-NetEventVmNetworkAdapter|Remove-NetEventVmSwitch|Remove-NetEventWFPCaptureProvider|Set-NetEventPacketCaptureProvider|Set-NetEventProvider|Set-NetEventSession|Set-NetEventWFPCaptureProvider|Start-NetEventSession|Stop-NetEventSession|\" +\n        \"Add-NetLbfoTeamMember|Add-NetLbfoTeamNic|Get-NetLbfoTeam|Get-NetLbfoTeamMember|Get-NetLbfoTeamNic|New-NetLbfoTeam|Remove-NetLbfoTeam|Remove-NetLbfoTeamMember|Remove-NetLbfoTeamNic|Rename-NetLbfoTeam|Set-NetLbfoTeam|Set-NetLbfoTeamMember|Set-NetLbfoTeamNic|\" +\n        \"Add-NetNatExternalAddress|Add-NetNatStaticMapping|Get-NetNat|Get-NetNatExternalAddress|Get-NetNatGlobal|Get-NetNatSession|Get-NetNatStaticMapping|New-NetNat|Remove-NetNat|Remove-NetNatExternalAddress|Remove-NetNatStaticMapping|Set-NetNat|Set-NetNatGlobal|\" +\n        \"Get-NetQosPolicy|New-NetQosPolicy|Remove-NetQosPolicy|Set-NetQosPolicy|\" +\n        \"Copy-NetFirewallRule|Copy-NetIPsecMainModeCryptoSet|Copy-NetIPsecMainModeRule|Copy-NetIPsecPhase1AuthSet|Copy-NetIPsecPhase2AuthSet|Copy-NetIPsecQuickModeCryptoSet|Copy-NetIPsecRule|Disable-NetFirewallRule|Disable-NetIPsecMainModeRule|Disable-NetIPsecRule|Enable-NetFirewallRule|Enable-NetIPsecMainModeRule|Enable-NetIPsecRule|Find-NetIPsecRule|Get-NetFirewallAddressFilter|Get-NetFirewallApplicationFilter|Get-NetFirewallInterfaceFilter|Get-NetFirewallInterfaceTypeFilter|Get-NetFirewallPortFilter|Get-NetFirewallProfile|Get-NetFirewallRule|Get-NetFirewallSecurityFilter|Get-NetFirewallServiceFilter|Get-NetFirewallSetting|Get-NetIPsecDospSetting|Get-NetIPsecMainModeCryptoSet|Get-NetIPsecMainModeRule|Get-NetIPsecMainModeSA|Get-NetIPsecPhase1AuthSet|Get-NetIPsecPhase2AuthSet|Get-NetIPsecQuickModeCryptoSet|Get-NetIPsecQuickModeSA|Get-NetIPsecRule|New-NetFirewallRule|New-NetIPsecDospSetting|New-NetIPsecMainModeCryptoSet|New-NetIPsecMainModeRule|New-NetIPsecPhase1AuthSet|New-NetIPsecPhase2AuthSet|New-NetIPsecQuickModeCryptoSet|New-NetIPsecRule|Open-NetGPO|Remove-NetFirewallRule|Remove-NetIPsecDospSetting|Remove-NetIPsecMainModeCryptoSet|Remove-NetIPsecMainModeRule|Remove-NetIPsecMainModeSA|Remove-NetIPsecPhase1AuthSet|Remove-NetIPsecPhase2AuthSet|Remove-NetIPsecQuickModeCryptoSet|Remove-NetIPsecQuickModeSA|Remove-NetIPsecRule|Rename-NetFirewallRule|Rename-NetIPsecMainModeCryptoSet|Rename-NetIPsecMainModeRule|Rename-NetIPsecPhase1AuthSet|Rename-NetIPsecPhase2AuthSet|Rename-NetIPsecQuickModeCryptoSet|Rename-NetIPsecRule|Save-NetGPO|Set-NetFirewallAddressFilter|Set-NetFirewallApplicationFilter|Set-NetFirewallInterfaceFilter|Set-NetFirewallInterfaceTypeFilter|Set-NetFirewallPortFilter|Set-NetFirewallProfile|Set-NetFirewallRule|Set-NetFirewallSecurityFilter|Set-NetFirewallServiceFilter|Set-NetFirewallSetting|Set-NetIPsecDospSetting|Set-NetIPsecMainModeCryptoSet|Set-NetIPsecMainModeRule|Set-NetIPsecPhase1AuthSet|Set-NetIPsecPhase2AuthSet|Set-NetIPsecQuickModeCryptoSet|Set-NetIPsecRule|Show-NetFirewallRule|Show-NetIPsecRule|Sync-NetIPsecRule|Update-NetIPsecRule|Get-DAPolicyChange|New-NetIPsecAuthProposal|New-NetIPsecMainModeCryptoProposal|New-NetIPsecQuickModeCryptoProposal|\" +\n        \"Add-NetSwitchTeamMember|Get-NetSwitchTeam|Get-NetSwitchTeamMember|New-NetSwitchTeam|Remove-NetSwitchTeam|Remove-NetSwitchTeamMember|Rename-NetSwitchTeam|\" +\n        \"Find-NetRoute|Get-NetCompartment|Get-NetIPAddress|Get-NetIPConfiguration|Get-NetIPInterface|Get-NetIPv4Protocol|Get-NetIPv6Protocol|Get-NetNeighbor|Get-NetOffloadGlobalSetting|Get-NetPrefixPolicy|Get-NetRoute|Get-NetTCPConnection|Get-NetTCPSetting|Get-NetTransportFilter|Get-NetUDPEndpoint|Get-NetUDPSetting|New-NetIPAddress|New-NetNeighbor|New-NetRoute|New-NetTransportFilter|Remove-NetIPAddress|Remove-NetNeighbor|Remove-NetRoute|Remove-NetTransportFilter|Set-NetIPAddress|Set-NetIPInterface|Set-NetIPv4Protocol|Set-NetIPv6Protocol|Set-NetNeighbor|Set-NetOffloadGlobalSetting|Set-NetRoute|Set-NetTCPSetting|Set-NetUDPSetting|Test-NetConnection|\" +\n        \"Get-DAConnectionStatus|Get-NCSIPolicyConfiguration|Reset-NCSIPolicyConfiguration|Set-NCSIPolicyConfiguration|\" +\n        \"Disable-NetworkSwitchEthernetPort|Disable-NetworkSwitchFeature|Disable-NetworkSwitchVlan|Enable-NetworkSwitchEthernetPort|Enable-NetworkSwitchFeature|Enable-NetworkSwitchVlan|Get-NetworkSwitchEthernetPort|Get-NetworkSwitchFeature|Get-NetworkSwitchGlobalData|Get-NetworkSwitchVlan|New-NetworkSwitchVlan|Remove-NetworkSwitchEthernetPortIPAddress|Remove-NetworkSwitchVlan|Restore-NetworkSwitchConfiguration|Save-NetworkSwitchConfiguration|Set-NetworkSwitchEthernetPortIPAddress|Set-NetworkSwitchPortMode|Set-NetworkSwitchPortProperty|Set-NetworkSwitchVlanProperty|\" +\n        \"Add-NetIPHttpsCertBinding|Disable-NetDnsTransitionConfiguration|Disable-NetIPHttpsProfile|Disable-NetNatTransitionConfiguration|Enable-NetDnsTransitionConfiguration|Enable-NetIPHttpsProfile|Enable-NetNatTransitionConfiguration|Get-Net6to4Configuration|Get-NetDnsTransitionConfiguration|Get-NetDnsTransitionMonitoring|Get-NetIPHttpsConfiguration|Get-NetIPHttpsState|Get-NetIsatapConfiguration|Get-NetNatTransitionConfiguration|Get-NetNatTransitionMonitoring|Get-NetTeredoConfiguration|Get-NetTeredoState|New-NetIPHttpsConfiguration|New-NetNatTransitionConfiguration|Remove-NetIPHttpsCertBinding|Remove-NetIPHttpsConfiguration|Remove-NetNatTransitionConfiguration|Rename-NetIPHttpsConfiguration|Reset-Net6to4Configuration|Reset-NetDnsTransitionConfiguration|Reset-NetIPHttpsConfiguration|Reset-NetIsatapConfiguration|Reset-NetTeredoConfiguration|Set-Net6to4Configuration|Set-NetDnsTransitionConfiguration|Set-NetIPHttpsConfiguration|Set-NetIsatapConfiguration|Set-NetNatTransitionConfiguration|Set-NetTeredoConfiguration|\" +\n        \"Find-Package|Find-PackageProvider|Get-Package|Get-PackageProvider|Get-PackageSource|Import-PackageProvider|Install-Package|Install-PackageProvider|Register-PackageSource|Save-Package|Set-PackageSource|Uninstall-Package|Unregister-PackageSource|\" +\n        \"Clear-PcsvDeviceLog|Get-PcsvDevice|Get-PcsvDeviceLog|Restart-PcsvDevice|Set-PcsvDeviceBootConfiguration|Set-PcsvDeviceNetworkConfiguration|Set-PcsvDeviceUserPassword|Start-PcsvDevice|Stop-PcsvDevice|\" +\n        \"AfterAll|AfterEach|Assert-MockCalled|Assert-VerifiableMocks|BeforeAll|BeforeEach|Context|Describe|Get-MockDynamicParameters|Get-TestDriveItem|In|InModuleScope|Invoke-Mock|Invoke-Pester|It|Mock|New-Fixture|Set-DynamicParameterVariables|Setup|Should|\" +\n        \"Add-CertificateEnrollmentPolicyServer|Export-Certificate|Export-PfxCertificate|Get-Certificate|Get-CertificateAutoEnrollmentPolicy|Get-CertificateEnrollmentPolicyServer|Get-CertificateNotificationTask|Get-PfxData|Import-Certificate|Import-PfxCertificate|New-CertificateNotificationTask|New-SelfSignedCertificate|Remove-CertificateEnrollmentPolicyServer|Remove-CertificateNotificationTask|Set-CertificateAutoEnrollmentPolicy|Switch-Certificate|Test-Certificate|\" +\n        \"Disable-PnpDevice|Enable-PnpDevice|Get-PnpDevice|Get-PnpDeviceProperty|\" +\n        \"Find-DscResource|Find-Module|Find-Script|Get-InstalledModule|Get-InstalledScript|Get-PSRepository|Install-Module|Install-Script|New-ScriptFileInfo|Publish-Module|Publish-Script|Register-PSRepository|Save-Module|Save-Script|Set-PSRepository|Test-ScriptFileInfo|Uninstall-Module|Uninstall-Script|Unregister-PSRepository|Update-Module|Update-ModuleManifest|Update-Script|Update-ScriptFileInfo|\" +\n        \"Add-Printer|Add-PrinterDriver|Add-PrinterPort|Get-PrintConfiguration|Get-Printer|Get-PrinterDriver|Get-PrinterPort|Get-PrinterProperty|Get-PrintJob|Read-PrinterNfcTag|Remove-Printer|Remove-PrinterDriver|Remove-PrinterPort|Remove-PrintJob|Rename-Printer|Restart-PrintJob|Resume-PrintJob|Set-PrintConfiguration|Set-Printer|Set-PrinterProperty|Suspend-PrintJob|Write-PrinterNfcTag|\" +\n        \"Configuration|Disable-DscDebug|Enable-DscDebug|Get-DscConfiguration|Get-DscConfigurationStatus|Get-DscLocalConfigurationManager|Get-DscResource|New-DscChecksum|Remove-DscConfigurationDocument|Restore-DscConfiguration|Stop-DscConfiguration|Invoke-DscResource|Publish-DscConfiguration|Set-DscLocalConfigurationManager|Start-DscConfiguration|Test-DscConfiguration|Update-DscConfiguration|\" +\n        \"Disable-PSTrace|Disable-PSWSManCombinedTrace|Disable-WSManTrace|Enable-PSTrace|Enable-PSWSManCombinedTrace|Enable-WSManTrace|Get-LogProperties|Set-LogProperties|Start-Trace|Stop-Trace|\" +\n        \"PSConsoleHostReadline|Get-PSReadlineKeyHandler|Get-PSReadlineOption|Remove-PSReadlineKeyHandler|Set-PSReadlineKeyHandler|Set-PSReadlineOption|\" +\n        \"Add-JobTrigger|Disable-JobTrigger|Disable-ScheduledJob|Enable-JobTrigger|Enable-ScheduledJob|Get-JobTrigger|Get-ScheduledJob|Get-ScheduledJobOption|New-JobTrigger|New-ScheduledJobOption|Register-ScheduledJob|Remove-JobTrigger|Set-JobTrigger|Set-ScheduledJob|Set-ScheduledJobOption|Unregister-ScheduledJob|\" +\n        \"New-PSWorkflowSession|New-PSWorkflowExecutionOption|\" +\n        \"Invoke-AsWorkflow|\" +\n        \"Disable-ScheduledTask|Enable-ScheduledTask|Export-ScheduledTask|Get-ClusteredScheduledTask|Get-ScheduledTask|Get-ScheduledTaskInfo|New-ScheduledTask|New-ScheduledTaskAction|New-ScheduledTaskPrincipal|New-ScheduledTaskSettingsSet|New-ScheduledTaskTrigger|Register-ClusteredScheduledTask|Register-ScheduledTask|Set-ClusteredScheduledTask|Set-ScheduledTask|Start-ScheduledTask|Stop-ScheduledTask|Unregister-ClusteredScheduledTask|Unregister-ScheduledTask|\" +\n        \"Confirm-SecureBootUEFI|Format-SecureBootUEFI|Get-SecureBootPolicy|Get-SecureBootUEFI|Set-SecureBootUEFI|\" +\n        \"Block-SmbShareAccess|Close-SmbOpenFile|Close-SmbSession|Disable-SmbDelegation|Enable-SmbDelegation|Get-SmbBandwidthLimit|Get-SmbClientConfiguration|Get-SmbClientNetworkInterface|Get-SmbConnection|Get-SmbDelegation|Get-SmbMapping|Get-SmbMultichannelConnection|Get-SmbMultichannelConstraint|Get-SmbOpenFile|Get-SmbServerConfiguration|Get-SmbServerNetworkInterface|Get-SmbSession|Get-SmbShare|Get-SmbShareAccess|Grant-SmbShareAccess|New-SmbMapping|New-SmbMultichannelConstraint|New-SmbShare|Remove-SmbBandwidthLimit|Remove-SmbMapping|Remove-SmbMultichannelConstraint|Remove-SmbShare|Revoke-SmbShareAccess|Set-SmbBandwidthLimit|Set-SmbClientConfiguration|Set-SmbPathAcl|Set-SmbServerConfiguration|Set-SmbShare|Unblock-SmbShareAccess|Update-SmbMultichannelConnection|\" +\n        \"Move-SmbClient|Get-SmbWitnessClient|Move-SmbWitnessClient|\" +\n        \"Get-StartApps|Export-StartLayout|Import-StartLayout|\" +\n        \"Disable-PhysicalDiskIndication|Disable-StorageDiagnosticLog|Enable-PhysicalDiskIndication|Enable-StorageDiagnosticLog|Flush-Volume|Get-DiskSNV|Get-PhysicalDiskSNV|Get-StorageEnclosureSNV|Initialize-Volume|Write-FileSystemCache|Add-InitiatorIdToMaskingSet|Add-PartitionAccessPath|Add-PhysicalDisk|Add-TargetPortToMaskingSet|Add-VirtualDiskToMaskingSet|Block-FileShareAccess|Clear-Disk|Clear-FileStorageTier|Clear-StorageDiagnosticInfo|Connect-VirtualDisk|Debug-FileShare|Debug-StorageSubSystem|Debug-Volume|Disable-PhysicalDiskIdentification|Disable-StorageEnclosureIdentification|Disable-StorageHighAvailability|Disconnect-VirtualDisk|Dismount-DiskImage|Enable-PhysicalDiskIdentification|Enable-StorageEnclosureIdentification|Enable-StorageHighAvailability|Format-Volume|Get-DedupProperties|Get-Disk|Get-DiskImage|Get-DiskStorageNodeView|Get-FileIntegrity|Get-FileShare|Get-FileShareAccessControlEntry|Get-FileStorageTier|Get-InitiatorId|Get-InitiatorPort|Get-MaskingSet|Get-OffloadDataTransferSetting|Get-Partition|Get-PartitionSupportedSize|Get-PhysicalDisk|Get-PhysicalDiskStorageNodeView|Get-ResiliencySetting|Get-StorageAdvancedProperty|Get-StorageDiagnosticInfo|Get-StorageEnclosure|Get-StorageEnclosureStorageNodeView|Get-StorageEnclosureVendorData|Get-StorageFaultDomain|Get-StorageFileServer|Get-StorageFirmwareInformation|Get-StorageHealthAction|Get-StorageHealthReport|Get-StorageHealthSetting|Get-StorageJob|Get-StorageNode|Get-StoragePool|Get-StorageProvider|Get-StorageReliabilityCounter|Get-StorageSetting|Get-StorageSubSystem|Get-StorageTier|Get-StorageTierSupportedSize|Get-SupportedClusterSizes|Get-SupportedFileSystems|Get-TargetPort|Get-TargetPortal|Get-VirtualDisk|Get-VirtualDiskSupportedSize|Get-Volume|Get-VolumeCorruptionCount|Get-VolumeScrubPolicy|Grant-FileShareAccess|Hide-VirtualDisk|Initialize-Disk|Mount-DiskImage|New-FileShare|New-MaskingSet|New-Partition|New-StorageFileServer|New-StoragePool|New-StorageSubsystemVirtualDisk|New-StorageTier|New-VirtualDisk|New-VirtualDiskClone|New-VirtualDiskSnapshot|New-Volume|Optimize-StoragePool|Optimize-Volume|Register-StorageSubsystem|Remove-FileShare|Remove-InitiatorId|Remove-InitiatorIdFromMaskingSet|Remove-MaskingSet|Remove-Partition|Remove-PartitionAccessPath|Remove-PhysicalDisk|Remove-StorageFileServer|Remove-StorageHealthSetting|Remove-StoragePool|Remove-StorageTier|Remove-TargetPortFromMaskingSet|Remove-VirtualDisk|Remove-VirtualDiskFromMaskingSet|Rename-MaskingSet|Repair-FileIntegrity|Repair-VirtualDisk|Repair-Volume|Reset-PhysicalDisk|Reset-StorageReliabilityCounter|Resize-Partition|Resize-StorageTier|Resize-VirtualDisk|Revoke-FileShareAccess|Set-Disk|Set-FileIntegrity|Set-FileShare|Set-FileStorageTier|Set-InitiatorPort|Set-Partition|Set-PhysicalDisk|Set-ResiliencySetting|Set-StorageFileServer|Set-StorageHealthSetting|Set-StoragePool|Set-StorageProvider|Set-StorageSetting|Set-StorageSubSystem|Set-StorageTier|Set-VirtualDisk|Set-Volume|Set-VolumeScrubPolicy|Show-VirtualDisk|Start-StorageDiagnosticLog|Stop-StorageDiagnosticLog|Stop-StorageJob|Unblock-FileShareAccess|Unregister-StorageSubsystem|Update-Disk|Update-HostStorageCache|Update-StorageFirmware|Update-StoragePool|Update-StorageProviderCache|Write-VolumeCache|\" +\n        \"Disable-TlsCipherSuite|Disable-TlsSessionTicketKey|Enable-TlsCipherSuite|Enable-TlsSessionTicketKey|Export-TlsSessionTicketKey|Get-TlsCipherSuite|New-TlsSessionTicketKey|\" +\n        \"Get-TroubleshootingPack|Invoke-TroubleshootingPack|\" +\n        \"Clear-Tpm|ConvertTo-TpmOwnerAuth|Disable-TpmAutoProvisioning|Enable-TpmAutoProvisioning|Get-Tpm|Get-TpmEndorsementKeyInfo|Get-TpmSupportedFeature|Import-TpmOwnerAuth|Initialize-Tpm|Set-TpmOwnerAuth|Unblock-Tpm|\" +\n        \"Add-VpnConnection|Add-VpnConnectionRoute|Add-VpnConnectionTriggerApplication|Add-VpnConnectionTriggerDnsConfiguration|Add-VpnConnectionTriggerTrustedNetwork|Get-VpnConnection|Get-VpnConnectionTrigger|New-EapConfiguration|New-VpnServerAddress|Remove-VpnConnection|Remove-VpnConnectionRoute|Remove-VpnConnectionTriggerApplication|Remove-VpnConnectionTriggerDnsConfiguration|Remove-VpnConnectionTriggerTrustedNetwork|Set-VpnConnection|Set-VpnConnectionIPsecConfiguration|Set-VpnConnectionProxy|Set-VpnConnectionTriggerDnsConfiguration|Set-VpnConnectionTriggerTrustedNetwork|\" +\n        \"Add-OdbcDsn|Disable-OdbcPerfCounter|Disable-WdacBidTrace|Enable-OdbcPerfCounter|Enable-WdacBidTrace|Get-OdbcDriver|Get-OdbcDsn|Get-OdbcPerfCounter|Get-WdacBidTrace|Remove-OdbcDsn|Set-OdbcDriver|Set-OdbcDsn|\" +\n        \"Get-WindowsDeveloperLicense|Show-WindowsDeveloperLicenseRegistration|Unregister-WindowsDeveloperLicense|\" +\n        \"Disable-WindowsErrorReporting|Enable-WindowsErrorReporting|Get-WindowsErrorReporting|\" +\n        \"Get-WindowsSearchSetting|Set-WindowsSearchSetting|\" +\n        \"Get-WindowsUpdateLog\");\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords\n    }, \"identifier\");\n    var binaryOperatorsRe = (\n    \"eq|ne|gt|lt|le|ge|like|notlike|match|notmatch|contains|notcontains|in|notin|band|bor|bxor|bnot|\" +\n        \"ceq|cne|cgt|clt|cle|cge|clike|cnotlike|cmatch|cnotmatch|ccontains|cnotcontains|cin|cnotin|\" +\n        \"ieq|ine|igt|ilt|ile|ige|ilike|inotlike|imatch|inotmatch|icontains|inotcontains|iin|inotin|\" +\n        \"and|or|xor|not|\" +\n        \"split|join|replace|f|\" +\n        \"csplit|creplace|\" +\n        \"isplit|ireplace|\" +\n        \"is|isnot|as|\" +\n        \"shl|shr\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"comment.start\",\n                regex: \"<#\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"[$](?:[Tt]rue|[Ff]alse)\\\\b\"\n            }, {\n                token: \"constant.language\",\n                regex: \"[$][Nn]ull\\\\b\"\n            }, {\n                token: \"variable.instance\",\n                regex: \"[$][a-zA-Z][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\-(?:\" + binaryOperatorsRe + \")\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"&|\\\\+|\\\\-|\\\\*|\\\\/|\\\\%|\\\\=|\\\\>|\\\\&|\\\\!|\\\\|\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.end\",\n                regex: \"#>\",\n                next: \"start\"\n            }, {\n                token: \"doc.comment.tag\",\n                regex: \"^\\\\.\\\\w+\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n};\noop.inherits(PowershellHighlightRules, TextHighlightRules);\nexports.PowershellHighlightRules = PowershellHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/powershell\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/powershell_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PowershellHighlightRules = require(\"./powershell_highlight_rules\").PowershellHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = PowershellHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode({ start: \"^\\\\s*(<#)\", end: \"^[#\\\\s]>\\\\s*$\" });\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.blockComment = { start: \"<#\", end: \"#>\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.$id = \"ace/mode/powershell\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/powershell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-praat.js",
    "content": "ace.define(\"ace/mode/praat_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PraatHighlightRules = function () {\n    var keywords = (\"if|then|else|elsif|elif|endif|fi|\" +\n        \"endfor|endproc|\" + // related keywords specified below\n        \"while|endwhile|\" +\n        \"repeat|until|\" +\n        \"select|plus|minus|\" +\n        \"assert|asserterror\");\n    var predefinedVariables = (\"macintosh|windows|unix|\" +\n        \"praatVersion|praatVersion\\\\$\" +\n        \"pi|undefined|\" +\n        \"newline\\\\$|tab\\\\$|\" +\n        \"shellDirectory\\\\$|homeDirectory\\\\$|preferencesDirectory\\\\$|\" +\n        \"temporaryDirectory\\\\$|defaultDirectory\\\\$\");\n    var directives = (\"clearinfo|endSendPraat\");\n    var functions = (\n    \"writeInfo|writeInfoLine|appendInfo|appendInfoLine|info\\\\$|\" +\n        \"writeFile|writeFileLine|appendFile|appendFileLine|\" +\n        \"abs|round|floor|ceiling|min|max|imin|imax|\" +\n        \"sqrt|sin|cos|tan|arcsin|arccos|arctan|arctan2|sinc|sincpi|\" +\n        \"exp|ln|lnBeta|lnGamma|log10|log2|\" +\n        \"sinh|cosh|tanh|arcsinh|arccosh|arctanh|\" +\n        \"sigmoid|invSigmoid|erf|erfc|\" +\n        \"random(?:Uniform|Integer|Gauss|Poisson|Binomial)|\" +\n        \"gaussP|gaussQ|invGaussQ|incompleteGammaP|incompleteBeta|\" +\n        \"chiSquareP|chiSquareQ|invChiSquareQ|studentP|studentQ|invStudentQ|\" +\n        \"fisherP|fisherQ|invFisherQ|\" +\n        \"binomialP|binomialQ|invBinomialP|invBinomialQ|\" +\n        \"hertzToBark|barkToHerz|\" +\n        \"hertzToMel|melToHertz|\" +\n        \"hertzToSemitones|semitonesToHerz|\" +\n        \"erb|hertzToErb|erbToHertz|\" +\n        \"phonToDifferenceLimens|differenceLimensToPhon|\" +\n        \"soundPressureToPhon|\" +\n        \"beta|beta2|besselI|besselK|\" +\n        \"numberOfColumns|numberOfRows|\" +\n        \"selected|selected\\\\$|numberOfSelected|variableExists|\" +\n        \"index|rindex|startsWith|endsWith|\" +\n        \"index_regex|rindex_regex|replace_regex\\\\$|\" +\n        \"length|extractWord\\\\$|extractLine\\\\$|extractNumber|\" +\n        \"left\\\\$|right\\\\$|mid\\\\$|replace\\\\$|\" +\n        \"date\\\\$|fixed\\\\$|percent\\\\$|\" +\n        \"zero#|linear#|randomUniform#|randomInteger#|randomGauss#|\" +\n        \"beginPause|endPause|\" +\n        \"demoShow|demoWindowTitle|demoInput|demoWaitForInput|\" +\n        \"demoClicked|demoClickedIn|demoX|demoY|\" +\n        \"demoKeyPressed|demoKey\\\\$|\" +\n        \"demoExtraControlKeyPressed|demoShiftKeyPressed|\" +\n        \"demoCommandKeyPressed|demoOptionKeyPressed|\" +\n        \"environment\\\\$|chooseReadFile\\\\$|\" +\n        \"chooseDirectory\\\\$|createDirectory|fileReadable|deleteFile|\" +\n        \"selectObject|removeObject|plusObject|minusObject|\" +\n        \"runScript|exitScript|\" +\n        \"beginSendPraat|endSendPraat|\" +\n        \"objectsAreIdentical\");\n    var objectTypes = (\"Activation|AffineTransform|AmplitudeTier|Art|Artword|Autosegment|\" +\n        \"BarkFilter|CCA|Categories|Cepstrum|Cepstrumc|ChebyshevSeries|\" +\n        \"ClassificationTable|Cochleagram|Collection|Configuration|\" +\n        \"Confusion|ContingencyTable|Corpus|Correlation|Covariance|\" +\n        \"CrossCorrelationTable|CrossCorrelationTables|DTW|Diagonalizer|\" +\n        \"Discriminant|Dissimilarity|Distance|Distributions|DurationTier|\" +\n        \"EEG|ERP|ERPTier|Eigen|Excitation|Excitations|ExperimentMFC|FFNet|\" +\n        \"FeatureWeights|Formant|FormantFilter|FormantGrid|FormantPoint|\" +\n        \"FormantTier|GaussianMixture|HMM|HMM_Observation|\" +\n        \"HMM_ObservationSequence|HMM_State|HMM_StateSequence|Harmonicity|\" +\n        \"ISpline|Index|Intensity|IntensityTier|IntervalTier|KNN|KlattGrid|\" +\n        \"KlattTable|LFCC|LPC|Label|LegendreSeries|LinearRegression|\" +\n        \"LogisticRegression|LongSound|Ltas|MFCC|MSpline|ManPages|\" +\n        \"Manipulation|Matrix|MelFilter|MixingMatrix|Movie|Network|\" +\n        \"OTGrammar|OTHistory|OTMulti|PCA|PairDistribution|ParamCurve|\" +\n        \"Pattern|Permutation|Pitch|PitchTier|PointProcess|Polygon|\" +\n        \"Polynomial|Procrustes|RealPoint|RealTier|ResultsMFC|Roots|SPINET|\" +\n        \"SSCP|SVD|Salience|ScalarProduct|Similarity|SimpleString|\" +\n        \"SortedSetOfString|Sound|Speaker|Spectrogram|Spectrum|SpectrumTier|\" +\n        \"SpeechSynthesizer|SpellingChecker|Strings|StringsIndex|Table|\" +\n        \"TableOfReal|TextGrid|TextInterval|TextPoint|TextTier|Tier|\" +\n        \"Transition|VocalTract|Weight|WordList\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"string.interpolated\",\n                regex: /'((?:\\.?[a-z][a-zA-Z0-9_.]*)(?:\\$|#|:[0-9]+)?)'/\n            }, {\n                token: [\"text\", \"text\", \"keyword.operator\", \"text\", \"keyword\"],\n                regex: /(^\\s*)(?:(\\.?[a-z][a-zA-Z0-9_.]*\\$?\\s+)(=)(\\s+))?(stopwatch)/\n            }, {\n                token: [\"text\", \"keyword\", \"text\", \"string\"],\n                regex: /(^\\s*)(print(?:line|tab)?|echo|exit|pause|send(?:praat|socket)|include|execute|system(?:_nocheck)?)(\\s+)(.*)/\n            }, {\n                token: [\"text\", \"keyword\"],\n                regex: \"(^\\\\s*)(\" + directives + \")$\"\n            }, {\n                token: [\"text\", \"keyword.operator\", \"text\"],\n                regex: /(\\s+)((?:\\+|-|\\/|\\*|<|>)=?|==?|!=|%|\\^|\\||and|or|not)(\\s+)/\n            }, {\n                token: [\"text\", \"text\", \"keyword.operator\", \"text\", \"keyword\", \"text\", \"keyword\"],\n                regex: /(^\\s*)(?:(\\.?[a-z][a-zA-Z0-9_.]*\\$?\\s+)(=)(\\s+))?(?:((?:no)?warn|(?:unix_)?nocheck|noprogress)(\\s+))?((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/\n            }, {\n                token: [\"text\", \"keyword\", \"text\", \"keyword\"],\n                regex: /(^\\s*)((?:no(?:warn|check))?)(\\s*)(\\b(?:editor(?::?)|endeditor)\\b)/\n            }, {\n                token: [\"text\", \"keyword\", \"text\", \"keyword\"],\n                regex: /(^\\s*)(?:(demo)?(\\s+))((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/\n            }, {\n                token: [\"text\", \"keyword\", \"text\", \"keyword\"],\n                regex: /^(\\s*)(?:(demo)(\\s+))?(10|12|14|16|24)$/\n            }, {\n                token: [\"text\", \"support.function\", \"text\"],\n                regex: /(\\s*)(do\\$?)(\\s*:\\s*|\\s*\\(\\s*)/\n            }, {\n                token: \"entity.name.type\",\n                regex: \"(\" + objectTypes + \")\"\n            }, {\n                token: \"variable.language\",\n                regex: \"(\" + predefinedVariables + \")\"\n            }, {\n                token: [\"support.function\", \"text\"],\n                regex: \"((?:\" + functions + \")\\\\$?)(\\\\s*(?::|\\\\())\"\n            }, {\n                token: \"keyword\",\n                regex: /(\\bfor\\b)/,\n                next: \"for\"\n            }, {\n                token: \"keyword\",\n                regex: \"(\\\\b(?:\" + keywords + \")\\\\b)\"\n            }, {\n                token: \"string\",\n                regex: /\"[^\"]*\"/\n            }, {\n                token: \"string\",\n                regex: /\"[^\"]*$/,\n                next: \"brokenstring\"\n            }, {\n                token: [\"text\", \"keyword\", \"text\", \"entity.name.section\"],\n                regex: /(^\\s*)(\\bform\\b)(\\s+)(.*)/,\n                next: \"form\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /\\b[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/\n            }, {\n                token: [\"keyword\", \"text\", \"entity.name.function\"],\n                regex: /(procedure)(\\s+)([^:\\s]+)/\n            }, {\n                token: [\"entity.name.function\", \"text\"],\n                regex: /(@\\S+)(:|\\s*\\()/\n            }, {\n                token: [\"text\", \"keyword\", \"text\", \"entity.name.function\"],\n                regex: /(^\\s*)(call)(\\s+)(\\S+)/\n            }, {\n                token: \"comment\",\n                regex: /(^\\s*#|;).*$/\n            }, {\n                token: \"text\",\n                regex: /\\s+/\n            }\n        ],\n        \"form\": [\n            {\n                token: [\"keyword\", \"text\", \"constant.numeric\"],\n                regex: /((?:optionmenu|choice)\\s+)(\\S+:\\s+)([0-9]+)/\n            }, {\n                token: [\"keyword\", \"constant.numeric\"],\n                regex: /((?:option|button)\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/\n            }, {\n                token: [\"keyword\", \"string\"],\n                regex: /((?:option|button)\\s+)(.*)/\n            }, {\n                token: [\"keyword\", \"text\", \"string\"],\n                regex: /((?:sentence|text)\\s+)(\\S+\\s*)(.*)/\n            }, {\n                token: [\"keyword\", \"text\", \"string\", \"invalid.illegal\"],\n                regex: /(word\\s+)(\\S+\\s*)(\\S+)?(\\s.*)?/\n            }, {\n                token: [\"keyword\", \"text\", \"constant.language\"],\n                regex: /(boolean\\s+)(\\S+\\s*)(0|1|\"?(?:yes|no)\"?)/\n            }, {\n                token: [\"keyword\", \"text\", \"constant.numeric\"],\n                regex: /((?:real|natural|positive|integer)\\s+)(\\S+\\s*)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/\n            }, {\n                token: [\"keyword\", \"string\"],\n                regex: /(comment\\s+)(.*)/\n            }, {\n                token: \"keyword\",\n                regex: 'endform',\n                next: \"start\"\n            }\n        ],\n        \"for\": [\n            {\n                token: [\"keyword\", \"text\", \"constant.numeric\", \"text\"],\n                regex: /(from|to)(\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?)(\\s*)/\n            }, {\n                token: [\"keyword\", \"text\"],\n                regex: /(from|to)(\\s+\\S+\\s*)/\n            }, {\n                token: \"text\",\n                regex: /$/,\n                next: \"start\"\n            }\n        ],\n        \"brokenstring\": [\n            {\n                token: [\"text\", \"string\"],\n                regex: /(\\s*\\.{3})([^\"]*)/\n            }, {\n                token: \"string\",\n                regex: /\"/,\n                next: \"start\"\n            }\n        ]\n    };\n};\noop.inherits(PraatHighlightRules, TextHighlightRules);\nexports.PraatHighlightRules = PraatHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/praat\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/praat_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PraatHighlightRules = require(\"./praat_highlight_rules\").PraatHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = PraatHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/praat\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/praat\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-prisma.js",
    "content": "ace.define(\"ace/mode/prisma_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from ../convert.json (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PrismaHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                include: \"#triple_comment\"\n            }, {\n                include: \"#double_comment\"\n            }, {\n                include: \"#model_block_definition\"\n            }, {\n                include: \"#config_block_definition\"\n            }, {\n                include: \"#enum_block_definition\"\n            }, {\n                include: \"#type_definition\"\n            }],\n        \"#model_block_definition\": [{\n                token: [\n                    \"source.prisma.embedded.source\",\n                    \"storage.type.model.prisma\",\n                    \"source.prisma.embedded.source\",\n                    \"entity.name.type.model.prisma\",\n                    \"source.prisma.embedded.source\",\n                    \"punctuation.definition.tag.prisma\"\n                ],\n                regex: /^(\\s*)(model|type)(\\s+)([A-Za-z][\\w]*)(\\s+)({)/,\n                push: [{\n                        token: \"punctuation.definition.tag.prisma\",\n                        regex: /\\s*\\}/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#triple_comment\"\n                    }, {\n                        include: \"#double_comment\"\n                    }, {\n                        include: \"#field_definition\"\n                    }, {\n                        defaultToken: \"source.prisma.embedded.source\"\n                    }]\n            }],\n        \"#enum_block_definition\": [{\n                token: [\n                    \"source.prisma.embedded.source\",\n                    \"storage.type.enum.prisma\",\n                    \"source.prisma.embedded.source\",\n                    \"entity.name.type.enum.prisma\",\n                    \"source.prisma.embedded.source\",\n                    \"punctuation.definition.tag.prisma\"\n                ],\n                regex: /^(\\s*)(enum)(\\s+)([A-Za-z][\\w]*)(\\s+)({)/,\n                push: [{\n                        token: \"punctuation.definition.tag.prisma\",\n                        regex: /\\s*\\}/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#triple_comment\"\n                    }, {\n                        include: \"#double_comment\"\n                    }, {\n                        include: \"#enum_value_definition\"\n                    }, {\n                        defaultToken: \"source.prisma.embedded.source\"\n                    }]\n            }],\n        \"#config_block_definition\": [{\n                token: [\n                    \"source.prisma.embedded.source\",\n                    \"storage.type.config.prisma\",\n                    \"source.prisma.embedded.source\",\n                    \"entity.name.type.config.prisma\",\n                    \"source.prisma.embedded.source\",\n                    \"punctuation.definition.tag.prisma\"\n                ],\n                regex: /^(\\s*)(generator|datasource)(\\s+)([A-Za-z][\\w]*)(\\s+)({)/,\n                push: [{\n                        token: \"source.prisma.embedded.source\",\n                        regex: /\\s*\\}/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#triple_comment\"\n                    }, {\n                        include: \"#double_comment\"\n                    }, {\n                        include: \"#assignment\"\n                    }, {\n                        defaultToken: \"source.prisma.embedded.source\"\n                    }]\n            }],\n        \"#assignment\": [{\n                token: [\n                    \"text\",\n                    \"variable.other.assignment.prisma\",\n                    \"text\",\n                    \"keyword.operator.terraform\",\n                    \"text\"\n                ],\n                regex: /^(\\s*)(\\w+)(\\s*)(=)(\\s*)/,\n                push: [{\n                        token: \"text\",\n                        regex: /$/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#value\"\n                    }, {\n                        include: \"#double_comment_inline\"\n                    }]\n            }],\n        \"#field_definition\": [{\n                token: [\n                    \"text\",\n                    \"variable.other.assignment.prisma\",\n                    \"invalid.illegal.colon.prisma\",\n                    \"text\",\n                    \"support.type.primitive.prisma\",\n                    \"keyword.operator.list_type.prisma\",\n                    \"keyword.operator.optional_type.prisma\",\n                    \"invalid.illegal.required_type.prisma\"\n                ],\n                regex: /^(\\s*)(\\w+)((?:\\s*:)?)(\\s+)(\\w+)((?:\\[\\])?)((?:\\?)?)((?:\\!)?)/\n            }, {\n                include: \"#attribute_with_arguments\"\n            }, {\n                include: \"#attribute\"\n            }],\n        \"#type_definition\": [{\n                token: [\n                    \"text\",\n                    \"storage.type.type.prisma\",\n                    \"text\",\n                    \"entity.name.type.type.prisma\",\n                    \"text\",\n                    \"support.type.primitive.prisma\"\n                ],\n                regex: /^(\\s*)(type)(\\s+)(\\w+)(\\s*=\\s*)(\\w+)/\n            }, {\n                include: \"#attribute_with_arguments\"\n            }, {\n                include: \"#attribute\"\n            }],\n        \"#enum_value_definition\": [{\n                token: [\n                    \"text\",\n                    \"variable.other.assignment.prisma\",\n                    \"text\"\n                ],\n                regex: /^(\\s*)(\\w+)(\\s*$)/\n            }, {\n                include: \"#attribute_with_arguments\"\n            }, {\n                include: \"#attribute\"\n            }],\n        \"#attribute_with_arguments\": [{\n                token: [\n                    \"entity.name.function.attribute.prisma\",\n                    \"punctuation.definition.tag.prisma\"\n                ],\n                regex: /(@@?[\\w\\.]+)(\\()/,\n                push: [{\n                        token: \"punctuation.definition.tag.prisma\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#named_argument\"\n                    }, {\n                        include: \"#value\"\n                    }, {\n                        defaultToken: \"source.prisma.attribute.with_arguments\"\n                    }]\n            }],\n        \"#attribute\": [{\n                token: \"entity.name.function.attribute.prisma\",\n                regex: /@@?[\\w\\.]+/\n            }],\n        \"#array\": [{\n                token: \"source.prisma.array\",\n                regex: /\\[/,\n                push: [{\n                        token: \"source.prisma.array\",\n                        regex: /\\]/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#value\"\n                    }, {\n                        defaultToken: \"source.prisma.array\"\n                    }]\n            }],\n        \"#value\": [{\n                include: \"#array\"\n            }, {\n                include: \"#functional\"\n            }, {\n                include: \"#literal\"\n            }],\n        \"#functional\": [{\n                token: [\n                    \"support.function.functional.prisma\",\n                    \"punctuation.definition.tag.prisma\"\n                ],\n                regex: /(\\w+)(\\()/,\n                push: [{\n                        token: \"punctuation.definition.tag.prisma\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#value\"\n                    }, {\n                        defaultToken: \"source.prisma.functional\"\n                    }]\n            }],\n        \"#literal\": [{\n                include: \"#boolean\"\n            }, {\n                include: \"#number\"\n            }, {\n                include: \"#double_quoted_string\"\n            }, {\n                include: \"#identifier\"\n            }],\n        \"#identifier\": [{\n                token: \"support.constant.constant.prisma\",\n                regex: /\\b(?:\\w)+\\b/\n            }],\n        \"#map_key\": [{\n                token: [\n                    \"variable.parameter.key.prisma\",\n                    \"text\",\n                    \"punctuation.definition.separator.key-value.prisma\",\n                    \"text\"\n                ],\n                regex: /(\\w+)(\\s*)(:)(\\s*)/\n            }],\n        \"#named_argument\": [{\n                include: \"#map_key\"\n            }, {\n                include: \"#value\"\n            }],\n        \"#triple_comment\": [{\n                token: \"comment.prisma\",\n                regex: /\\/\\/\\//,\n                push: [{\n                        token: \"comment.prisma\",\n                        regex: /$/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.prisma\"\n                    }]\n            }],\n        \"#double_comment\": [{\n                token: \"comment.prisma\",\n                regex: /\\/\\//,\n                push: [{\n                        token: \"comment.prisma\",\n                        regex: /$/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.prisma\"\n                    }]\n            }],\n        \"#double_comment_inline\": [{\n                token: \"comment.prisma\",\n                regex: /\\/\\/[^$]*/\n            }],\n        \"#boolean\": [{\n                token: \"constant.language.boolean.prisma\",\n                regex: /\\b(?:true|false)\\b/\n            }],\n        \"#number\": [{\n                token: \"constant.numeric.prisma\",\n                regex: /(?:0(?:x|X)[0-9a-fA-F]*|(?:\\+|-)?\\b(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:[LlFfUuDdg]|UL|ul)?\\b/\n            }],\n        \"#double_quoted_string\": [{\n                token: \"string.quoted.double.start.prisma\",\n                regex: /\"/,\n                push: [{\n                        token: \"string.quoted.double.end.prisma\",\n                        regex: /\"/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#string_interpolation\"\n                    }, {\n                        token: \"string.quoted.double.prisma\",\n                        regex: /[\\w\\-\\/\\._\\\\%@:\\?=]+/\n                    }, {\n                        defaultToken: \"unnamed\"\n                    }]\n            }],\n        \"#string_interpolation\": [{\n                token: \"keyword.control.interpolation.start.prisma\",\n                regex: /\\$\\{/,\n                push: [{\n                        token: \"keyword.control.interpolation.end.prisma\",\n                        regex: /\\s*\\}/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#value\"\n                    }, {\n                        defaultToken: \"source.tag.embedded.source.prisma\"\n                    }]\n            }]\n    };\n    this.normalizeRules();\n};\nPrismaHighlightRules.metaData = {\n    name: \"Prisma\",\n    scopeName: \"source.prisma\"\n};\noop.inherits(PrismaHighlightRules, TextHighlightRules);\nexports.PrismaHighlightRules = PrismaHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/prisma\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/prisma_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PrismaHighlightRules = require(\"./prisma_highlight_rules\").PrismaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = PrismaHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/prisma\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/prisma\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-prolog.js",
    "content": "ace.define(\"ace/mode/prolog_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from https://raw.github.com/stephenroller/prolog-tmbundle/master/Syntaxes/Prolog.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PrologHighlightRules = function () {\n    this.$rules = { start: [{ include: '#comment' },\n            { include: '#basic_fact' },\n            { include: '#rule' },\n            { include: '#directive' },\n            { include: '#fact' }],\n        '#atom': [{ token: 'constant.other.atom.prolog',\n                regex: '\\\\b[a-z][a-zA-Z0-9_]*\\\\b' },\n            { token: 'constant.numeric.prolog',\n                regex: '-?\\\\d+(?:\\\\.\\\\d+)?' },\n            { include: '#string' }],\n        '#basic_elem': [{ include: '#comment' },\n            { include: '#statement' },\n            { include: '#constants' },\n            { include: '#operators' },\n            { include: '#builtins' },\n            { include: '#list' },\n            { include: '#atom' },\n            { include: '#variable' }],\n        '#basic_fact': [{ token: ['entity.name.function.fact.basic.prolog',\n                    'punctuation.end.fact.basic.prolog'],\n                regex: '([a-z]\\\\w*)(\\\\.)' }],\n        '#builtins': [{ token: 'support.function.builtin.prolog',\n                regex: '\\\\b(?:abolish|abort|ancestors|arg|ascii|assert[az]|atom(?:ic)?|body|char|close|conc|concat|consult|define|definition|dynamic|dump|fail|file|free|free_proc|functor|getc|goal|halt|head|head|integer|length|listing|match_args|member|next_clause|nl|nonvar|nth|number|cvars|nvars|offset|op|print?|prompt|putc|quoted|ratom|read|redefine|rename|retract(?:all)?|see|seeing|seen|skip|spy|statistics|system|tab|tell|telling|term|time|told|univ|unlink_clause|unspy_predicate|var|write)\\\\b' }],\n        '#comment': [{ token: ['punctuation.definition.comment.prolog',\n                    'comment.line.percentage.prolog'],\n                regex: '(%)(.*$)' },\n            { token: 'punctuation.definition.comment.prolog',\n                regex: '/\\\\*',\n                push: [{ token: 'punctuation.definition.comment.prolog',\n                        regex: '\\\\*/',\n                        next: 'pop' },\n                    { defaultToken: 'comment.block.prolog' }] }],\n        '#constants': [{ token: 'constant.language.prolog',\n                regex: '\\\\b(?:true|false|yes|no)\\\\b' }],\n        '#directive': [{ token: 'keyword.operator.directive.prolog',\n                regex: ':-',\n                push: [{ token: 'meta.directive.prolog', regex: '\\\\.', next: 'pop' },\n                    { include: '#comment' },\n                    { include: '#statement' },\n                    { defaultToken: 'meta.directive.prolog' }] }],\n        '#expr': [{ include: '#comments' },\n            { token: 'meta.expression.prolog',\n                regex: '\\\\(',\n                push: [{ token: 'meta.expression.prolog', regex: '\\\\)', next: 'pop' },\n                    { include: '#expr' },\n                    { defaultToken: 'meta.expression.prolog' }] },\n            { token: 'keyword.control.cutoff.prolog', regex: '!' },\n            { token: 'punctuation.control.and.prolog', regex: ',' },\n            { token: 'punctuation.control.or.prolog', regex: ';' },\n            { include: '#basic_elem' }],\n        '#fact': [{ token: ['entity.name.function.fact.prolog',\n                    'punctuation.begin.fact.parameters.prolog'],\n                regex: '([a-z]\\\\w*)(\\\\()(?!.*:-)',\n                push: [{ token: ['punctuation.end.fact.parameters.prolog',\n                            'punctuation.end.fact.prolog'],\n                        regex: '(\\\\))(\\\\.?)',\n                        next: 'pop' },\n                    { include: '#parameter' },\n                    { defaultToken: 'meta.fact.prolog' }] }],\n        '#list': [{ token: 'punctuation.begin.list.prolog',\n                regex: '\\\\[(?=.*\\\\])',\n                push: [{ token: 'punctuation.end.list.prolog',\n                        regex: '\\\\]',\n                        next: 'pop' },\n                    { include: '#comment' },\n                    { token: 'punctuation.separator.list.prolog', regex: ',' },\n                    { token: 'punctuation.concat.list.prolog',\n                        regex: '\\\\|',\n                        push: [{ token: 'meta.list.concat.prolog',\n                                regex: '(?=\\\\s*\\\\])',\n                                next: 'pop' },\n                            { include: '#basic_elem' },\n                            { defaultToken: 'meta.list.concat.prolog' }] },\n                    { include: '#basic_elem' },\n                    { defaultToken: 'meta.list.prolog' }] }],\n        '#operators': [{ token: 'keyword.operator.prolog',\n                regex: '\\\\\\\\\\\\+|\\\\bnot\\\\b|\\\\bis\\\\b|->|[><]|[><\\\\\\\\:=]?=|(?:=\\\\\\\\|\\\\\\\\=)=' }],\n        '#parameter': [{ token: 'variable.language.anonymous.prolog',\n                regex: '\\\\b_\\\\b' },\n            { token: 'variable.parameter.prolog',\n                regex: '\\\\b[A-Z_]\\\\w*\\\\b' },\n            { token: 'punctuation.separator.parameters.prolog', regex: ',' },\n            { include: '#basic_elem' },\n            { token: 'text', regex: '[^\\\\s]' }],\n        '#rule': [{ token: 'meta.rule.prolog',\n                regex: '(?=[a-z]\\\\w*.*:-)',\n                push: [{ token: 'punctuation.rule.end.prolog',\n                        regex: '\\\\.',\n                        next: 'pop' },\n                    { token: 'meta.rule.signature.prolog',\n                        regex: '(?=[a-z]\\\\w*.*:-)',\n                        push: [{ token: 'meta.rule.signature.prolog',\n                                regex: '(?=:-)',\n                                next: 'pop' },\n                            { token: 'entity.name.function.rule.prolog',\n                                regex: '[a-z]\\\\w*(?=\\\\(|\\\\s*:-)' },\n                            { token: 'punctuation.rule.parameters.begin.prolog',\n                                regex: '\\\\(',\n                                push: [{ token: 'punctuation.rule.parameters.end.prolog',\n                                        regex: '\\\\)',\n                                        next: 'pop' },\n                                    { include: '#parameter' },\n                                    { defaultToken: 'meta.rule.parameters.prolog' }] },\n                            { defaultToken: 'meta.rule.signature.prolog' }] },\n                    { token: 'keyword.operator.definition.prolog',\n                        regex: ':-',\n                        push: [{ token: 'meta.rule.definition.prolog',\n                                regex: '(?=\\\\.)',\n                                next: 'pop' },\n                            { include: '#comment' },\n                            { include: '#expr' },\n                            { defaultToken: 'meta.rule.definition.prolog' }] },\n                    { defaultToken: 'meta.rule.prolog' }] }],\n        '#statement': [{ token: 'meta.statement.prolog',\n                regex: '(?=[a-z]\\\\w*\\\\()',\n                push: [{ token: 'punctuation.end.statement.parameters.prolog',\n                        regex: '\\\\)',\n                        next: 'pop' },\n                    { include: '#builtins' },\n                    { include: '#atom' },\n                    { token: 'punctuation.begin.statement.parameters.prolog',\n                        regex: '\\\\(',\n                        push: [{ token: 'meta.statement.parameters.prolog',\n                                regex: '(?=\\\\))',\n                                next: 'pop' },\n                            { token: 'punctuation.separator.statement.prolog', regex: ',' },\n                            { include: '#basic_elem' },\n                            { defaultToken: 'meta.statement.parameters.prolog' }] },\n                    { defaultToken: 'meta.statement.prolog' }] }],\n        '#string': [{ token: 'punctuation.definition.string.begin.prolog',\n                regex: '\\'',\n                push: [{ token: 'punctuation.definition.string.end.prolog',\n                        regex: '\\'',\n                        next: 'pop' },\n                    { token: 'constant.character.escape.prolog', regex: '\\\\\\\\.' },\n                    { token: 'constant.character.escape.quote.prolog',\n                        regex: '\\'\\'' },\n                    { defaultToken: 'string.quoted.single.prolog' }] }],\n        '#variable': [{ token: 'variable.language.anonymous.prolog',\n                regex: '\\\\b_\\\\b' },\n            { token: 'variable.other.prolog',\n                regex: '\\\\b[A-Z_][a-zA-Z0-9_]*\\\\b' }] };\n    this.normalizeRules();\n};\nPrologHighlightRules.metaData = { fileTypes: ['plg', 'prolog'],\n    foldingStartMarker: '(%\\\\s*region \\\\w*)|([a-z]\\\\w*.*:- ?)',\n    foldingStopMarker: '(%\\\\s*end(\\\\s*region)?)|(?=\\\\.)',\n    keyEquivalent: '^~P',\n    name: 'Prolog',\n    scopeName: 'source.prolog' };\noop.inherits(PrologHighlightRules, TextHighlightRules);\nexports.PrologHighlightRules = PrologHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/prolog\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/prolog_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PrologHighlightRules = require(\"./prolog_highlight_rules\").PrologHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = PrologHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"%\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/prolog\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/prolog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-properties.js",
    "content": "ace.define(\"ace/mode/properties_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PropertiesHighlightRules = function () {\n    var escapeRe = /\\\\u[0-9a-fA-F]{4}|\\\\/;\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: /[!#].*$/\n            }, {\n                token: \"keyword\",\n                regex: /[=:]$/\n            }, {\n                token: \"keyword\",\n                regex: /[=:]/,\n                next: \"value\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapeRe\n            }, {\n                defaultToken: \"variable\"\n            }\n        ],\n        \"value\": [\n            {\n                regex: /\\\\$/,\n                token: \"string\",\n                next: \"value\"\n            }, {\n                regex: /$/,\n                token: \"string\",\n                next: \"start\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapeRe\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n};\noop.inherits(PropertiesHighlightRules, TextHighlightRules);\nexports.PropertiesHighlightRules = PropertiesHighlightRules;\n\n});\n\nace.define(\"ace/mode/properties\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/properties_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PropertiesHighlightRules = require(\"./properties_highlight_rules\").PropertiesHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = PropertiesHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/properties\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/properties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-protobuf.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar cFunctions = exports.cFunctions = \"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\";\nvar c_cppHighlightRules = function () {\n    var keywordControls = (\"break|case|continue|default|do|else|for|goto|if|_Pragma|\" +\n        \"return|switch|while|catch|operator|try|throw|using\");\n    var storageType = (\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|\" +\n        \"_Imaginary|int|int8_t|int16_t|int32_t|int64_t|long|short|signed|size_t|struct|typedef|uint8_t|uint16_t|uint32_t|uint64_t|union|unsigned|void|\" +\n        \"class|wchar_t|template|char16_t|char32_t\");\n    var storageModifiers = (\"const|extern|register|restrict|static|volatile|inline|private|\" +\n        \"protected|public|friend|explicit|virtual|export|mutable|typename|\" +\n        \"constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\");\n    var keywordOperators = (\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|\" +\n        \"const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\");\n    var builtinConstants = (\"NULL|true|false|TRUE|FALSE|nullptr\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\": keywordControls,\n        \"storage.type\": storageType,\n        \"storage.modifier\": storageModifiers,\n        \"keyword.operator\": keywordOperators,\n        \"variable.language\": \"this\",\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n        + /(\\d+\\$)?/.source // field (argument #)\n        + /[#0\\- +']*/.source // flags\n        + /[,;:_]?/.source // separator character (AltiVec)\n        + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n        + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n        + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n        + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"//$\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \"//\",\n                next: \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"string.start\",\n                regex: 'R\"\\\\(',\n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next: \"directive\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token: \"support.function.C99.c\",\n                regex: cFunctions\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"singleLineComment\": [\n            {\n                token: \"comment\",\n                regex: /\\\\$/,\n                next: \"singleLineComment\"\n            }, {\n                token: \"comment\",\n                regex: /$/,\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\": [\n            {\n                token: \"constant.other.multiline\",\n                regex: /\\\\/\n            },\n            {\n                token: \"constant.other.multiline\",\n                regex: /.*\\\\/\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*<.+?>\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: /[^\\\\\\/]+/,\n                next: \"start\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(c_cppHighlightRules, TextHighlightRules);\nexports.c_cppHighlightRules = c_cppHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar c_cppHighlightRules = require(\"./c_cpp_highlight_rules\").c_cppHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = c_cppHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/c_cpp\";\n    this.snippetFileId = \"ace/snippets/c_cpp\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/protobuf_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ProtobufHighlightRules = function () {\n    var builtinTypes = \"double|float|int32|int64|uint32|uint64|sint32|\" +\n        \"sint64|fixed32|fixed64|sfixed32|sfixed64|bool|\" +\n        \"string|bytes\";\n    var keywordDeclaration = \"message|required|optional|repeated|package|\" +\n        \"import|option|enum\";\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.declaration.protobuf\": keywordDeclaration,\n        \"support.type\": builtinTypes\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: /\\/\\/.*$/\n            }, {\n                token: \"comment\",\n                regex: /\\/\\*/,\n                next: \"comment\"\n            }, {\n                token: \"constant\",\n                regex: \"<[^>]+>\"\n            }, {\n                regex: \"=\",\n                token: \"keyword.operator.assignment.protobuf\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: '[\\'](?:(?:\\\\\\\\.)|(?:[^\\'\\\\\\\\]))*?[\\']'\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }],\n        \"comment\": [{\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(ProtobufHighlightRules, TextHighlightRules);\nexports.ProtobufHighlightRules = ProtobufHighlightRules;\n\n});\n\nace.define(\"ace/mode/protobuf\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/protobuf_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar CMode = require(\"./c_cpp\").Mode;\nvar ProtobufHighlightRules = require(\"./protobuf_highlight_rules\").ProtobufHighlightRules;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    CMode.call(this);\n    this.foldingRules = new CStyleFoldMode();\n    this.HighlightRules = ProtobufHighlightRules;\n};\noop.inherits(Mode, CMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/protobuf\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/protobuf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-puppet.js",
    "content": "ace.define(\"ace/mode/puppet_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PuppetHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: ['keyword.type.puppet', 'constant.class.puppet', 'keyword.inherits.puppet', 'constant.class.puppet'],\n                regex: \"^\\\\s*(class)(\\\\s+(?:[-_A-Za-z0-9\\\".]+::)*[-_A-Za-z0-9\\\".]+\\\\s*)(?:(inherits\\\\s*)(\\\\s+(?:[-_A-Za-z0-9\\\".]+::)*[-_A-Za-z0-9\\\".]+\\\\s*))?\"\n            },\n            {\n                token: ['storage.function.puppet', 'name.function.puppet', 'punctuation.lpar'],\n                regex: \"(^\\\\s*define)(\\\\s+[a-zA-Z0-9_:]+\\\\s*)(\\\\()\",\n                push: [{\n                        token: 'punctuation.rpar.puppet',\n                        regex: \"\\\\)\",\n                        next: 'pop'\n                    },\n                    { include: \"constants\" },\n                    { include: \"variable\" },\n                    { include: \"strings\" },\n                    { include: \"operators\" },\n                    { defaultToken: 'string' }]\n            },\n            {\n                token: [\"language.support.class\", \"keyword.operator\"],\n                regex: \"\\\\b([a-zA-Z_]+)(\\\\s+=>)\"\n            },\n            {\n                token: [\"exported.resource.puppet\", \"keyword.name.resource.puppet\", \"paren.lparen\"],\n                regex: \"(\\\\@\\\\@)?(\\\\s*[a-zA-Z_]*)(\\\\s*\\\\{)\"\n            },\n            {\n                token: \"qualified.variable.puppet\",\n                regex: \"(\\\\$([a-z][a-z0-9_]*)?(::[a-z][a-z0-9_]*)*::[a-z0-9_][a-zA-Z0-9_]*)\"\n            },\n            {\n                token: \"singleline.comment.puppet\",\n                regex: '#(.)*$'\n            },\n            {\n                token: \"multiline.comment.begin.puppet\",\n                regex: '^\\\\s*\\\\/\\\\*',\n                push: \"blockComment\"\n            },\n            {\n                token: \"keyword.control.puppet\",\n                regex: \"\\\\b(case|if|unless|else|elsif|in|default:|and|or)\\\\s+(?!::)\"\n            },\n            {\n                token: \"keyword.control.puppet\",\n                regex: \"\\\\b(import|default|inherits|include|require|contain|node|application|consumes|environment|site|function|produces)\\\\b\"\n            },\n            {\n                token: \"support.function.puppet\",\n                regex: \"\\\\b(lest|str2bool|escape|gsub|Timestamp|Timespan|with|alert|crit|debug|notice|sprintf|split|step|strftime|slice|shellquote|type|sha1|defined|scanf|reverse_each|regsubst|return|emerg|reduce|err|failed|fail|versioncmp|file|generate|then|info|realize|search|tag|tagged|template|epp|warning|hiera_include|each|assert_type|binary_file|create_resources|dig|digest|filter|lookup|find_file|fqdn_rand|hiera_array|hiera_hash|inline_epp|inline_template|map|match|md5|new|next)\\\\b\"\n            },\n            {\n                token: \"constant.types.puppet\",\n                regex: \"\\\\b(String|File|Package|Service|Class|Integer|Array|Catalogentry|Variant|Boolean|Undef|Number|Hash|Float|Numeric|NotUndef|Callable|Optional|Any|Regexp|Sensitive|Sensitive.new|Type|Resource|Default|Enum|Scalar|Collection|Data|Pattern|Tuple|Struct)\\\\b\"\n            },\n            {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            },\n            {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            },\n            { include: \"variable\" },\n            { include: \"constants\" },\n            { include: \"strings\" },\n            { include: \"operators\" },\n            {\n                token: \"regexp.begin.string.puppet\",\n                regex: \"\\\\s*(\\\\/(\\\\S)+)\\\\/\"\n            }\n        ],\n        blockComment: [{\n                regex: \"\\\\*\\\\/\",\n                token: \"multiline.comment.end.puppet\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment\"\n            }],\n        \"constants\": [\n            {\n                token: \"constant.language.puppet\",\n                regex: \"\\\\b(false|true|running|stopped|installed|purged|latest|file|directory|held|undef|present|absent|link|mounted|unmounted)\\\\b\"\n            }\n        ],\n        \"variable\": [\n            {\n                token: \"variable.puppet\",\n                regex: \"(\\\\$[a-z0-9_\\{][a-zA-Z0-9_]*)\"\n            }\n        ],\n        \"strings\": [\n            {\n                token: \"punctuation.quote.puppet\",\n                regex: \"'\",\n                push: [{\n                        token: 'punctuation.quote.puppet',\n                        regex: \"'\",\n                        next: 'pop'\n                    },\n                    { include: \"escaped_chars\" },\n                    { defaultToken: 'string' }]\n            },\n            {\n                token: \"punctuation.quote.puppet\",\n                regex: '\"',\n                push: [{\n                        token: 'punctuation.quote.puppet',\n                        regex: '\"',\n                        next: 'pop'\n                    },\n                    { include: \"escaped_chars\" },\n                    { include: \"variable\" },\n                    { defaultToken: 'string' }]\n            }\n        ],\n        \"escaped_chars\": [\n            {\n                token: \"constant.escaped_char.puppet\",\n                regex: \"\\\\\\\\.\"\n            }\n        ],\n        \"operators\": [\n            {\n                token: \"keyword.operator\",\n                regex: \"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=|::|,\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(PuppetHighlightRules, TextHighlightRules);\nexports.PuppetHighlightRules = PuppetHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/puppet\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/puppet_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PuppetHighlightRules = require(\"./puppet_highlight_rules\").PuppetHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function () {\n    TextMode.call(this);\n    this.HighlightRules = PuppetHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/puppet\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/puppet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-python.js",
    "content": "ace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n * TODO: python delimiters\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar PythonHighlightRules = function () {\n    var keywords = (\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|\" +\n        \"finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|\" +\n        \"raise|return|try|while|with|yield|async|await|nonlocal\");\n    var builtinConstants = (\"True|False|None|NotImplemented|Ellipsis|__debug__\");\n    var builtinFunctions = (\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|\" +\n        \"eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|\" +\n        \"binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|\" +\n        \"float|list|raw_input|unichr|callable|format|locals|reduce|unicode|\" +\n        \"chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|\" +\n        \"cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|\" +\n        \"__import__|complex|hash|min|apply|delattr|help|next|setattr|set|\" +\n        \"buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|\" +\n        \"ascii|breakpoint|bytes\");\n    var keywordMapper = this.createKeywordMapper({\n        \"invalid.deprecated\": \"debugger\",\n        \"support.function\": builtinFunctions,\n        \"variable.language\": \"self|cls\",\n        \"constant.language\": builtinConstants,\n        \"keyword\": keywords\n    }, \"identifier\");\n    var strPre = \"[uU]?\";\n    var strRawPre = \"[rR]\";\n    var strFormatPre = \"[fF]\";\n    var strRawFormatPre = \"(?:[rR][fF]|[fF][rR])\";\n    var decimalInteger = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var octInteger = \"(?:0[oO]?[0-7]+)\";\n    var hexInteger = \"(?:0[xX][\\\\dA-Fa-f]+)\";\n    var binInteger = \"(?:0[bB][01]+)\";\n    var integer = \"(?:\" + decimalInteger + \"|\" + octInteger + \"|\" + hexInteger + \"|\" + binInteger + \")\";\n    var exponent = \"(?:[eE][+-]?\\\\d+)\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + exponent + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var stringEscape = \"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"string\",\n                regex: strPre + '\"{3}',\n                next: \"qqstring3\"\n            }, {\n                token: \"string\",\n                regex: strPre + '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: strPre + \"'{3}\",\n                next: \"qstring3\"\n            }, {\n                token: \"string\",\n                regex: strPre + \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + '\"{3}',\n                next: \"rawqqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + '\"(?=.)',\n                next: \"rawqqstring\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + \"'{3}\",\n                next: \"rawqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawPre + \"'(?=.)\",\n                next: \"rawqstring\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + '\"{3}',\n                next: \"fqqstring3\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + '\"(?=.)',\n                next: \"fqqstring\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + \"'{3}\",\n                next: \"fqstring3\"\n            }, {\n                token: \"string\",\n                regex: strFormatPre + \"'(?=.)\",\n                next: \"fqstring\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + '\"{3}',\n                next: \"rfqqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + '\"(?=.)',\n                next: \"rfqqstring\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + \"'{3}\",\n                next: \"rfqstring3\"\n            }, {\n                token: \"string\",\n                regex: strRawFormatPre + \"'(?=.)\",\n                next: \"rfqstring\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|@|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n            }, {\n                token: \"punctuation\",\n                regex: \",|:|;|\\\\->|\\\\+=|\\\\-=|\\\\*=|\\\\/=|\\\\/\\\\/=|%=|@=|&=|\\\\|=|^=|>>=|<<=|\\\\*\\\\*=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)\\\\}]\"\n            }, {\n                token: [\"keyword\", \"text\", \"entity.name.function\"],\n                regex: \"(def|class)(\\\\s+)([\\\\u00BF-\\\\u1FFF\\\\u2C00-\\\\uD7FF\\\\w]+)\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                include: \"constants\"\n            }],\n        \"qqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqqstring3\": [{\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqstring3\": [{\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqqstring\": [{\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"rawqqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rawqstring\": [{\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"rawqstring\"\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqstring3\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"fqqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqstring\": [{\n                token: \"constant.language.escape\",\n                regex: stringEscape\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqqstring3\": [{\n                token: \"string\",\n                regex: '\"{3}',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqstring3\": [{\n                token: \"string\",\n                regex: \"'{3}\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqqstring\": [{\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"rfqqstring\"\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rfqstring\": [{\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"fqstringParRules\": [{\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]\\\\)]\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"string\",\n                regex: \"'[^']*'\"\n            }, {\n                token: \"string\",\n                regex: '\"[^\"]*\"'\n            }, {\n                token: \"function.support\",\n                regex: \"(!s|!r|!a)\"\n            }, {\n                include: \"constants\"\n            }, {\n                token: 'paren.rparen',\n                regex: \"}\",\n                next: 'pop'\n            }, {\n                token: 'paren.lparen',\n                regex: \"{\",\n                push: \"fqstringParRules\"\n            }],\n        \"constants\": [{\n                token: \"constant.numeric\",\n                regex: \"(?:\" + floatNumber + \"|\\\\d+)[jJ]\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"[lL]\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: [\"punctuation\", \"function.support\"],\n                regex: \"(\\\\.)([a-zA-Z_]+)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(PythonHighlightRules, TextHighlightRules);\nexports.PythonHighlightRules = PythonHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (markers) {\n    this.foldingStartMarker = new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\" + markers + \")(?:\\\\s*)(?:#.*)?$\");\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, match.index);\n            if (match[2])\n                return this.indentationBlock(session, row, match.index + match[2].length);\n            return this.indentationBlock(session, row);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/python\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/python_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PythonHighlightRules = require(\"./python_highlight_rules\").PythonHighlightRules;\nvar PythonFoldMode = require(\"./folding/pythonic\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n    this.HighlightRules = PythonHighlightRules;\n    this.foldingRules = new PythonFoldMode(\"\\\\:\");\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n    this.checkOutdent = function (state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n        if (!last)\n            return false;\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length - tab.length, row, indent.length));\n    };\n    this.$id = \"ace/mode/python\";\n    this.snippetFileId = \"ace/snippets/python\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/python\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-qml.js",
    "content": "ace.define(\"ace/mode/qml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar QmlHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static|\" +\n            \"readonly|string|int|bool|date|color|url|real|double|var|variant|\" +\n            \"height|width|anchors|parent|\" +\n            \"Abstract3DSeries|AbstractActionInput|AbstractAnimation|AbstractAxis|AbstractAxis3D|AbstractAxisInput|\" +\n            \"AbstractBarSeries|AbstractButton|AbstractClipAnimator|AbstractClipBlendNode|AbstractDataProxy|AbstractGraph3D|\" +\n            \"AbstractInputHandler3D|AbstractPhysicalDevice|AbstractRayCaster|AbstractSeries|AbstractSkeleton|AbstractTextureImage|\" +\n            \"Accelerometer|AccelerometerReading|Accessible|Action|ActionGroup|ActionInput|\" +\n            \"AdditiveClipBlend|Address|Affector|Age|AlphaCoverage|AlphaTest|\" +\n            \"Altimeter|AltimeterReading|AmbientLightReading|AmbientLightSensor|AmbientTemperatureReading|AmbientTemperatureSensor|\" +\n            \"AnalogAxisInput|AnchorAnimation|AnchorChanges|AngleDirection|AnimatedImage|AnimatedSprite|\" +\n            \"Animation|AnimationController|AnimationGroup|Animator|ApplicationWindow|ApplicationWindowStyle|\" +\n            \"AreaSeries|Armature|AttenuationModelInverse|AttenuationModelLinear|Attractor|Attribute|\" +\n            \"Audio|AudioCategory|AudioEngine|AudioListener|AudioSample|AuthenticationDialogRequest|\" +\n            \"Axis|AxisAccumulator|AxisSetting|BackspaceKey|Bar3DSeries|BarCategoryAxis|\" +\n            \"BarDataProxy|BarSeries|BarSet|Bars3D|BaseKey|Behavior|\" +\n            \"Binding|Blend|BlendEquation|BlendEquationArguments|BlendedClipAnimator|BlitFramebuffer|\" +\n            \"BluetoothDiscoveryModel|BluetoothService|BluetoothSocket|BorderImage|BorderImageMesh|BoxPlotSeries|\" +\n            \"BoxSet|BrightnessContrast|Buffer|BusyIndicator|BusyIndicatorStyle|Button|\" +\n            \"ButtonAxisInput|ButtonGroup|ButtonStyle|Calendar|CalendarStyle|Camera|\" +\n            \"Camera3D|CameraCapabilities|CameraCapture|CameraExposure|CameraFlash|CameraFocus|\" +\n            \"CameraImageProcessing|CameraLens|CameraRecorder|CameraSelector|CandlestickSeries|CandlestickSet|\" +\n            \"Canvas|Canvas3D|Canvas3DAbstractObject|Canvas3DActiveInfo|Canvas3DBuffer|Canvas3DContextAttributes|\" +\n            \"Canvas3DFrameBuffer|Canvas3DProgram|Canvas3DRenderBuffer|Canvas3DShader|Canvas3DShaderPrecisionFormat|Canvas3DTexture|\" +\n            \"Canvas3DTextureProvider|Canvas3DUniformLocation|CanvasGradient|CanvasImageData|CanvasPixelArray|Category|\" +\n            \"CategoryAxis|CategoryAxis3D|CategoryModel|CategoryRange|ChangeLanguageKey|ChartView|\" +\n            \"CheckBox|CheckBoxStyle|CheckDelegate|CircularGauge|CircularGaugeStyle|ClearBuffers|\" +\n            \"ClipAnimator|ClipPlane|CloseEvent|ColorAnimation|ColorDialog|ColorDialogRequest|\" +\n            \"ColorGradient|ColorGradientStop|ColorMask|ColorOverlay|Colorize|Column|\" +\n            \"ColumnLayout|ComboBox|ComboBoxStyle|Compass|CompassReading|Component|Component3D|\" +\n            \"ComputeCommand|ConeGeometry|ConeMesh|ConicalGradient|Connections|ContactDetail|\" +\n            \"ContactDetails|Container|Context2D|Context3D|ContextMenuRequest|Control|\" +\n            \"CoordinateAnimation|CuboidGeometry|CuboidMesh|CullFace|CumulativeDirection|\" +\n            \"Custom3DItem|Custom3DLabel|Custom3DVolume|CustomParticle|CylinderGeometry|CylinderMesh|\" +\n            \"Date|DateTimeAxis|DelayButton|DelayButtonStyle|DelegateChoice|DelegateChooser|DelegateModel|\" +\n            \"DelegateModelGroup|DepthTest|Desaturate|Dial|DialStyle|Dialog|DialogButtonBox|DiffuseMapMaterial|\" +\n            \"DiffuseSpecularMapMaterial|DiffuseSpecularMaterial|Direction|DirectionalBlur|DirectionalLight|DispatchCompute|\" +\n            \"Displace|DistanceReading|DistanceSensor|Dithering|DoubleValidator|Drag|DragEvent|DragHandler|Drawer|DropArea|\" +\n            \"DropShadow|DwmFeatures|DynamicParameter|EditorialModel|Effect|EllipseShape|Emitter|EnterKey|EnterKeyAction|\" +\n            \"Entity|EntityLoader|EnvironmentLight|EventConnection|EventPoint|EventTouchPoint|ExclusiveGroup|ExtendedAttributes|\" +\n            \"ExtrudedTextGeometry|ExtrudedTextMesh|FastBlur|FileDialog|FileDialogRequest|FillerKey|FilterKey|FinalState|\" +\n            \"FirstPersonCameraController|Flickable|Flipable|Flow|FocusScope|FolderListModel|FontDialog|FontLoader|\" +\n            \"FontMetrics|FormValidationMessageRequest|ForwardRenderer|Frame|FrameAction|FrameGraphNode|Friction|\" +\n            \"FrontFace|FrustumCulling|FullScreenRequest|GLStateDumpExt|GammaAdjust|Gauge|GaugeStyle|GaussianBlur|\" +\n            \"GeocodeModel|Geometry|GeometryRenderer|GestureEvent|Glow|GoochMaterial|Gradient|GradientStop|GraphicsApiFilter|\" +\n            \"GraphicsInfo|Gravity|Grid|GridLayout|GridMesh|GridView|GroupBox|GroupGoal|Gyroscope|GyroscopeReading|HBarModelMapper|\" +\n            \"HBoxPlotModelMapper|HCandlestickModelMapper|HPieModelMapper|HXYModelMapper|HandlerPoint|HandwritingInputPanel|\" +\n            \"HandwritingModeKey|HeightMapSurfaceDataProxy|HideKeyboardKey|HistoryState|HolsterReading|HolsterSensor|HorizontalBarSeries|\" +\n            \"|HorizontalPercentBarSeries|HorizontalStackedBarSeries|HoverHandler|HueSaturation|HumidityReading|HumiditySensor|\" +\n            \"IRProximityReading|IRProximitySensor|Icon|Image|ImageModel|ImageParticle|InnerShadow|InputChord|InputContext|InputEngine|\" +\n            \"InputHandler3D|InputMethod|InputModeKey|InputPanel|InputSequence|InputSettings|Instantiator|IntValidator|InvokedServices|\" +\n            \"Item|ItemDelegate|ItemGrabResult|ItemModelBarDataProxy|ItemModelScatterDataProxy|ItemModelSurfaceDataProxy|ItemParticle|\" +\n            \"ItemSelectionModel|IviApplication|IviSurface|JavaScriptDialogRequest|Joint|JumpList|JumpListCategory|JumpListDestination|\" +\n            \"JumpListLink|JumpListSeparator|Key|KeyEvent|KeyIcon|KeyNavigation|KeyPanel|KeyboardColumn|KeyboardDevice|KeyboardHandler|\" +\n            \"KeyboardLayout|KeyboardLayoutLoader|KeyboardRow|KeyboardStyle|KeyframeAnimation|Keys|Label|Layer|LayerFilter|Layout|\" +\n            \"LayoutMirroring|Legend|LerpBlend|LevelAdjust|LevelOfDetail|LevelOfDetailBoundingSphere|LevelOfDetailLoader|\" +\n            \"LevelOfDetailSwitch|LidReading|LidSensor|Light|Light3D|LightReading|LightSensor|LineSeries|LineShape|LineWidth|\" +\n            \"LinearGradient|ListElement|ListModel|ListView|Loader|Locale|Location|LogValueAxis|LogValueAxis3DFormatter|LoggingCategory|\" +\n            \"LogicalDevice|Magnetometer|MagnetometerReading|Map|MapCircle|MapCircleObject|MapCopyrightNotice|MapGestureArea|MapIconObject|\" +\n            \"MapItemGroup|MapItemView|MapObjectView|MapParameter|MapPinchEvent|MapPolygon|MapPolygonObject|MapPolyline|MapPolylineObject|\" +\n            \"MapQuickItem|MapRectangle|MapRoute|MapRouteObject|MapType|Margins|MaskShape|MaskedBlur|Material|Matrix4x4|MediaPlayer|\" +\n            \"MemoryBarrier|Menu|MenuBar|MenuBarItem|MenuBarStyle|MenuItem|MenuSeparator|MenuStyle|Mesh|MessageDialog|ModeKey|MorphTarget|\" +\n            \"MorphingAnimation|MouseArea|MouseDevice|MouseEvent|MouseHandler|MultiPointHandler|MultiPointTouchArea|MultiSampleAntiAliasing|\" +\n            \"Navigator|NdefFilter|NdefMimeRecord|NdefRecord|NdefTextRecord|NdefUriRecord|NearField|NoDepthMask|NoDraw|Node|NodeInstantiator|\" +\n            \"NormalDiffuseMapAlphaMaterial|NormalDiffuseMapMaterial|NormalDiffuseSpecularMapMaterial|Number|NumberAnimation|NumberKey|Object3D|\" +\n            \"ObjectModel|ObjectPicker|OpacityAnimator|OpacityMask|OpenGLInfo|OrbitCameraController|OrientationReading|OrientationSensor|Overlay|\" +\n            \"Package|Page|PageIndicator|Pane|ParallelAnimation|Parameter|ParentAnimation|ParentChange|Particle|ParticleGroup|ParticlePainter|\" +\n            \"ParticleSystem|Path|PathAngleArc|PathAnimation|PathArc|PathAttribute|PathCubic|PathCurve|PathElement|PathInterpolator|PathLine|\" +\n            \"PathMove|PathPercent|PathQuad|PathSvg|PathView|PauseAnimation|PerVertexColorMaterial|PercentBarSeries|PhongAlphaMaterial|\" +\n            \"PhongMaterial|PickEvent|PickLineEvent|PickPointEvent|PickTriangleEvent|PickingSettings|Picture|PieMenu|PieMenuStyle|PieSeries|\" +\n            \"PieSlice|PinchArea|PinchEvent|PinchHandler|Place|PlaceAttribute|PlaceSearchModel|PlaceSearchSuggestionModel|PlaneGeometry|\" +\n            \"PlaneMesh|PlayVariation|Playlist|PlaylistItem|Plugin|PluginParameter|PointDirection|PointHandler|PointLight|PointSize|\" +\n            \"PointerDevice|PointerDeviceHandler|PointerEvent|PointerHandler|PolarChartView|PolygonOffset|Popup|Position|PositionSource|\" +\n            \"Positioner|PressureReading|PressureSensor|Product|ProgressBar|ProgressBarStyle|PropertyAction|PropertyAnimation|PropertyChanges|\" +\n            \"ProximityFilter|ProximityReading|ProximitySensor|QAbstractState|QAbstractTransition|QSignalTransition|\" +\n            \"QVirtualKeyboardSelectionListModel|Qt|QtMultimedia|QtObject|QtPositioning|QuaternionAnimation|QuotaRequest|RadialBlur|\" +\n            \"RadialGradient|Radio|RadioButton|RadioButtonStyle|RadioData|RadioDelegate|RangeSlider|Ratings|RayCaster|Rectangle|\" +\n            \"RectangleShape|RectangularGlow|RecursiveBlur|RegExpValidator|RegisterProtocolHandlerRequest|RenderCapture|\" +\n            \"RenderCaptureReply|RenderPass|RenderPassFilter|RenderSettings|RenderState|RenderStateSet|RenderSurfaceSelector|\" +\n            \"RenderTarget|RenderTargetOutput|RenderTargetSelector|Repeater|ReviewModel|Rotation|RotationAnimation|RotationAnimator|\" +\n            \"RotationReading|RotationSensor|RoundButton|Route|RouteLeg|RouteManeuver|RouteModel|RouteQuery|RouteSegment|Row|\" +\n            \"RowLayout|Scale|ScaleAnimator|Scatter3D|Scatter3DSeries|ScatterDataProxy|ScatterSeries|Scene2D|Scene3D|SceneLoader|\" +\n            \"ScissorTest|Screen|ScreenRayCaster|ScriptAction|ScrollBar|ScrollIndicator|ScrollView|ScrollViewStyle|ScxmlStateMachine|\" +\n            \"SeamlessCubemap|SelectionListItem|Sensor|SensorGesture|SensorGlobal|SensorReading|SequentialAnimation|Settings|\" +\n            \"SettingsStore|ShaderEffect|ShaderEffectSource|ShaderProgram|ShaderProgramBuilder|Shape|ShellSurface|ShellSurfaceItem|\" +\n            \"ShiftHandler|ShiftKey|Shortcut|SignalSpy|SignalTransition|SinglePointHandler|Skeleton|SkeletonLoader|Slider|SliderStyle|\" +\n            \"SmoothedAnimation|SortPolicy|Sound|SoundEffect|SoundInstance|SpaceKey|SphereGeometry|SphereMesh|SpinBox|SpinBoxStyle|\" +\n            \"SplineSeries|SplitView|SpotLight|SpringAnimation|Sprite|SpriteGoal|SpriteSequence|Stack|StackLayout|StackView|\" +\n            \"StackViewDelegate|StackedBarSeries|State|StateChangeScript|StateGroup|StateMachine|StateMachineLoader|StatusBar|\" +\n            \"StatusBarStyle|StatusIndicator|StatusIndicatorStyle|StencilMask|StencilOperation|StencilOperationArguments|StencilTest|\" +\n            \"StencilTestArguments|Store|String|Supplier|Surface3D|Surface3DSeries|SurfaceDataProxy|SwipeDelegate|SwipeView|Switch|\" +\n            \"SwitchDelegate|SwitchStyle|SymbolModeKey|SystemPalette|Tab|TabBar|TabButton|TabView|TabViewStyle|TableView|TableViewColumn|\" +\n            \"TableViewStyle|TapHandler|TapReading|TapSensor|TargetDirection|TaskbarButton|Technique|TechniqueFilter|TestCase|Text|TextArea|\" +\n            \"TextAreaStyle|TextEdit|TextField|TextFieldStyle|TextInput|TextMetrics|TextureImage|TextureImageFactory|Theme3D|ThemeColor|\" +\n            \"ThresholdMask|ThumbnailToolBar|ThumbnailToolButton|TiltReading|TiltSensor|TimeoutTransition|Timer|ToggleButton|\" +\n            \"ToggleButtonStyle|ToolBar|ToolBarStyle|ToolButton|ToolSeparator|ToolTip|Torch|TorusGeometry|TorusMesh|TouchEventSequence|\" +\n            \"TouchInputHandler3D|TouchPoint|Trace|TraceCanvas|TraceInputArea|TraceInputKey|TraceInputKeyPanel|TrailEmitter|Transaction|\" +\n            \"Transform|Transition|Translate|TreeView|TreeViewStyle|Tumbler|TumblerColumn|TumblerStyle|Turbulence|UniformAnimator|User|\" +\n            \"VBarModelMapper|VBoxPlotModelMapper|VCandlestickModelMapper|VPieModelMapper|VXYModelMapper|ValueAxis|ValueAxis3D|\" +\n            \"ValueAxis3DFormatter|Vector3dAnimation|VertexBlendAnimation|Video|VideoOutput|ViewTransition|Viewport|\" +\n            \"VirtualKeyboardSettings|Wander|WavefrontMesh|WaylandClient|WaylandCompositor|WaylandHardwareLayer|\" +\n            \"WaylandOutput|WaylandQuickItem|WaylandSeat|WaylandSurface|WaylandView|Waypoint|\" +\n            \"WebChannel|WebEngine|WebEngineAction|WebEngineCertificateError|WebEngineDownloadItem|WebEngineHistory|\" +\n            \"WebEngineHistoryListModel|WebEngineLoadRequest|WebEngineNavigationRequest|WebEngineNewViewRequest|WebEngineProfile|WebEngineScript|\" +\n            \"WebEngineSettings|WebEngineView|WebSocket|WebSocketServer|WebView|WebViewLoadRequest|\" +\n            \"WheelEvent|Window|WlShell|WlShellSurface|WorkerScript|XAnimator|\" +\n            \"XYPoint|XYSeries|XdgDecorationManagerV1|XdgPopup|XdgPopupV5|XdgPopupV6|\" +\n            \"XdgShell|XdgShellV5|XdgShellV6|XdgSurface|XdgSurfaceV5|XdgSurfaceV6|\" +\n            \"XdgToplevel|XdgToplevelV6|XmlListModel|XmlRole|YAnimator|ZoomBlur\",\n        \"storage.type\": \"const|let|var|function|\" + // js\n            \"property|\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"print|console\\\\.log\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"string\",\n                regex: '\"',\n                next: \"string\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: \"text\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            }, {\n                token: \"comment.start\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\b\\\\w+\\\\b\"\n            }\n        ],\n        \"string\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.end\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n};\noop.inherits(QmlHighlightRules, TextHighlightRules);\nexports.QmlHighlightRules = QmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/qml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/qml_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar QmlHighlightRules = require(\"./qml_highlight_rules\").QmlHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = QmlHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\" };\n    this.$id = \"ace/mode/qml\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/qml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-r.js",
    "content": "ace.define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n * tex_highlight_rules.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TexHighlightRules = function (textClass) {\n    if (!textClass)\n        textClass = \"text\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"%.*$\"\n            }, {\n                token: textClass,\n                regex: \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",\n                next: \"nospell\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: textClass,\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"nospell\": [\n            {\n                token: \"comment\",\n                regex: \"%.*$\",\n                next: \"start\"\n            }, {\n                token: \"nospell.\" + textClass,\n                regex: \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n                next: \"start\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[\\\\])]\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"}\",\n                next: \"start\"\n            }, {\n                token: \"nospell.\" + textClass,\n                regex: \"\\\\s+\"\n            }, {\n                token: \"nospell.\" + textClass,\n                regex: \"\\\\w+\"\n            }\n        ]\n    };\n};\noop.inherits(TexHighlightRules, TextHighlightRules);\nexports.TexHighlightRules = TexHighlightRules;\n\n});\n\nace.define(\"ace/mode/r_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\"], function(require, exports, module){/*\n * r_highlight_rules.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TexHighlightRules = require(\"./tex_highlight_rules\").TexHighlightRules;\nvar RHighlightRules = function () {\n    var keywords = lang.arrayToMap((\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\")\n        .split(\"|\"));\n    var buildinConstants = lang.arrayToMap((\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|\" +\n        \"NA_complex_\").split(\"|\"));\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.sectionhead\",\n                regex: \"#+(?!').*(?:----|====|####)\\\\s*$\"\n            },\n            {\n                token: \"comment\",\n                regex: \"#+'\",\n                next: \"rd-start\"\n            },\n            {\n                token: \"comment\",\n                regex: \"#.*$\"\n            },\n            {\n                token: \"string\",\n                regex: '[\"]',\n                next: \"qqstring\"\n            },\n            {\n                token: \"string\",\n                regex: \"[']\",\n                next: \"qstring\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+[Li]?\\\\b\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"\\\\d+L\\\\b\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n                token: \"constant.language.boolean\",\n                regex: \"(?:TRUE|FALSE|T|F)\\\\b\"\n            },\n            {\n                token: \"identifier\",\n                regex: \"`.*?`\"\n            },\n            {\n                onMatch: function (value) {\n                    if (keywords[value])\n                        return \"keyword\";\n                    else if (buildinConstants[value])\n                        return \"constant.language\";\n                    else if (value == '...' || value.match(/^\\.\\.\\d+$/))\n                        return \"variable.language\";\n                    else\n                        return \"identifier\";\n                },\n                regex: \"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"\n            },\n            {\n                token: \"keyword.operator\",\n                regex: \"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"\n            },\n            {\n                token: \"keyword.operator\",\n                regex: \"%.*?%\"\n            },\n            {\n                token: \"paren.keyword.operator\",\n                regex: \"[[({]\"\n            },\n            {\n                token: \"paren.keyword.operator\",\n                regex: \"[\\\\])}]\"\n            },\n            {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next: \"start\"\n            },\n            {\n                token: \"string\",\n                regex: '.+'\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next: \"start\"\n            },\n            {\n                token: \"string\",\n                regex: '.+'\n            }\n        ]\n    };\n    var rdRules = new TexHighlightRules(\"comment\").getRules();\n    for (var i = 0; i < rdRules[\"start\"].length; i++) {\n        rdRules[\"start\"][i].token += \".virtual-comment\";\n    }\n    this.addRules(rdRules, \"rd-\");\n    this.$rules[\"rd-start\"].unshift({\n        token: \"text\",\n        regex: \"^\",\n        next: \"start\"\n    });\n    this.$rules[\"rd-start\"].unshift({\n        token: \"keyword\",\n        regex: \"@(?!@)[^ ]*\"\n    });\n    this.$rules[\"rd-start\"].unshift({\n        token: \"comment\",\n        regex: \"@@\"\n    });\n    this.$rules[\"rd-start\"].push({\n        token: \"comment\",\n        regex: \"[^%\\\\\\\\[({\\\\])}]+\"\n    });\n};\noop.inherits(RHighlightRules, TextHighlightRules);\nexports.RHighlightRules = RHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/r\",[\"require\",\"exports\",\"module\",\"ace/unicode\",\"ace/range\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/r_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){/*\n * r.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\n\"use strict\";\nvar unicode = require(\"../unicode\");\nvar Range = require(\"../range\").Range;\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar RHighlightRules = require(\"./r_highlight_rules\").RHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function () {\n    this.HighlightRules = RHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"._]+\", \"g\");\n    this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"._]|\\s])+\", \"g\");\n    this.$id = \"ace/mode/r\";\n    this.snippetFileId = \"ace/snippets/r\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/r\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-raku.js",
    "content": "ace.define(\"ace/mode/raku_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar RakuHighlightRules = function () {\n    var keywords = (\"my|our|class|role|grammar|is|does|sub|method|submethod|try|\" +\n        \"default|when|if|elsif|else|unless|with|orwith|without|for|given|proceed|\" +\n        \"succeed|loop|while|until|repeat|module|use|need|import|require|unit|\" +\n        \"constant|enum|multi|return|has|token|rule|make|made|proto|state|augment|\" +\n        \"but|anon|supersede|let|subset|gather|returns|return-rw|temp|\" +\n        \"BEGIN|CHECK|INIT|END|CLOSE|ENTER|LEAVE|KEEP|UNDO|PRE|POST|FIRST|NEXT|LAST|CATCH|CONTROL|QUIT|DOC\");\n    var types = (\"Any|Array|Associative|AST|atomicint|Attribute|Backtrace|Backtrace::Frame|\" +\n        \"Bag|Baggy|BagHash|Blob|Block|Bool|Buf|Callable|CallFrame|Cancellation|\" +\n        \"Capture|Channel|Code|compiler|Complex|ComplexStr|Cool|CurrentThreadScheduler|\" +\n        \"Cursor|Date|Dateish|DateTime|Distro|Duration|Encoding|Exception|Failure|\" +\n        \"FatRat|Grammar|Hash|HyperWhatever|Instant|Int|IntStr|IO|IO::ArgFiles|\" +\n        \"IO::CatHandle|IO::Handle|IO::Notification|IO::Path|IO::Path::Cygwin|\" +\n        \"IO::Path::QNX|IO::Path::Unix|IO::Path::Win32|IO::Pipe|IO::Socket|\" +\n        \"IO::Socket::Async|IO::Socket::INET|IO::Spec|IO::Spec::Cygwin|IO::Spec::QNX|\" +\n        \"IO::Spec::Unix|IO::Spec::Win32|IO::Special|Iterable|Iterator|Junction|Kernel|\" +\n        \"Label|List|Lock|Lock::Async|Macro|Map|Match|Metamodel::AttributeContainer|\" +\n        \"Metamodel::C3MRO|Metamodel::ClassHOW|Metamodel::EnumHOW|Metamodel::Finalization|\" +\n        \"Metamodel::MethodContainer|Metamodel::MROBasedMethodDispatch|Metamodel::MultipleInheritance|\" +\n        \"Metamodel::Naming|Metamodel::Primitives|Metamodel::PrivateMethodContainer|\" +\n        \"Metamodel::RoleContainer|Metamodel::Trusting|Method|Mix|MixHash|Mixy|Mu|\" +\n        \"NFC|NFD|NFKC|NFKD|Nil|Num|Numeric|NumStr|ObjAt|Order|Pair|Parameter|Perl|\" +\n        \"Pod::Block|Pod::Block::Code|Pod::Block::Comment|Pod::Block::Declarator|\" +\n        \"Pod::Block::Named|Pod::Block::Para|Pod::Block::Table|Pod::Heading|Pod::Item|\" +\n        \"Positional|PositionalBindFailover|Proc|Proc::Async|Promise|Proxy|PseudoStash|\" +\n        \"Raku|QuantHash|Range|Rat|Rational|RatStr|Real|Regex|Routine|Scalar|Scheduler|\" +\n        \"Semaphore|Seq|Set|SetHash|Setty|Signature|Slip|Stash|Str|StrDistance|Stringy|\" +\n        \"Sub|Submethod|Supplier|Supplier::Preserving|Supply|Systemic|Tap|Telemetry|\" +\n        \"Telemetry::Instrument::Thread|Telemetry::Instrument::Usage|Telemetry::Period|\" +\n        \"Telemetry::Sampler|Thread|ThreadPoolScheduler|UInt|Uni|utf8|Variable|Version|\" +\n        \"VM|Whatever|WhateverCode|WrapHandle|int|uint|num|str|\" +\n        \"int8|int16|int32|int64|uint8|uint16|uint32|uint64|long|longlong|num32|num64|size_t|bool|CArray|Pointer|\" +\n        \"Backtrace|Backtrace::Frame|Exception|Failure|X::AdHoc|X::Anon::Augment|X::Anon::Multi|\" +\n        \"X::Assignment::RO|X::Attribute::NoPackage|X::Attribute::Package|X::Attribute::Undeclared|\" +\n        \"X::Augment::NoSuchType|X::Bind|X::Bind::NativeType|X::Bind::Slice|X::Caller::NotDynamic|\" +\n        \"X::Channel::ReceiveOnClosed|X::Channel::SendOnClosed|X::Comp|X::Composition::NotComposable|\" +\n        \"X::Constructor::Positional|X::ControlFlow|X::ControlFlow::Return|X::DateTime::TimezoneClash|\" +\n        \"X::Declaration::Scope|X::Declaration::Scope::Multi|X::Does::TypeObject|X::Eval::NoSuchLang|\" +\n        \"X::Export::NameClash|X::IO|X::IO::Chdir|X::IO::Chmod|X::IO::Copy|X::IO::Cwd|X::IO::Dir|\" +\n        \"X::IO::DoesNotExist|X::IO::Link|X::IO::Mkdir|X::IO::Move|X::IO::Rename|X::IO::Rmdir|X::IO::Symlink|\" +\n        \"X::IO::Unlink|X::Inheritance::NotComposed|X::Inheritance::Unsupported|X::Method::InvalidQualifier|\" +\n        \"X::Method::NotFound|X::Method::Private::Permission|X::Method::Private::Unqualified|\" +\n        \"X::Mixin::NotComposable|X::NYI|X::NoDispatcher|X::Numeric::Real|X::OS|X::Obsolete|X::OutOfRange|\" +\n        \"X::Package::Stubbed|X::Parameter::Default|X::Parameter::MultipleTypeConstraints|\" +\n        \"X::Parameter::Placeholder|X::Parameter::Twigil|X::Parameter::WrongOrder|X::Phaser::Multiple|\" +\n        \"X::Phaser::PrePost|X::Placeholder::Block|X::Placeholder::Mainline|X::Pod|X::Proc::Async|\" +\n        \"X::Proc::Async::AlreadyStarted|X::Proc::Async::CharsOrBytes|X::Proc::Async::MustBeStarted|\" +\n        \"X::Proc::Async::OpenForWriting|X::Proc::Async::TapBeforeSpawn|X::Proc::Unsuccessful|\" +\n        \"X::Promise::CauseOnlyValidOnBroken|X::Promise::Vowed|X::Redeclaration|X::Role::Initialization|\" +\n        \"X::Seq::Consumed|X::Sequence::Deduction|X::Signature::NameClash|X::Signature::Placeholder|\" +\n        \"X::Str::Numeric|X::StubCode|X::Syntax|X::Syntax::Augment::WithoutMonkeyTyping|\" +\n        \"X::Syntax::Comment::Embedded|X::Syntax::Confused|X::Syntax::InfixInTermPosition|\" +\n        \"X::Syntax::Malformed|X::Syntax::Missing|X::Syntax::NegatedPair|X::Syntax::NoSelf|\" +\n        \"X::Syntax::Number::RadixOutOfRange|X::Syntax::P5|X::Syntax::Regex::Adverb|\" +\n        \"X::Syntax::Regex::SolitaryQuantifier|X::Syntax::Reserved|X::Syntax::Self::WithoutObject|\" +\n        \"X::Syntax::Signature::InvocantMarker|X::Syntax::Term::MissingInitializer|X::Syntax::UnlessElse|\" +\n        \"X::Syntax::Variable::Match|X::Syntax::Variable::Numeric|X::Syntax::Variable::Twigil|X::Temporal|\" +\n        \"X::Temporal::InvalidFormat|X::TypeCheck|X::TypeCheck::Assignment|X::TypeCheck::Binding|\" +\n        \"X::TypeCheck::Return|X::TypeCheck::Splice|X::Undeclared\");\n    var builtinFunctions = (\"abs|abs2rel|absolute|accept|ACCEPTS|accessed|acos|acosec|acosech|acosh|\" +\n        \"acotan|acotanh|acquire|act|action|actions|add|add_attribute|add_enum_value|\" +\n        \"add_fallback|add_method|add_parent|add_private_method|add_role|add_trustee|\" +\n        \"adverb|after|all|allocate|allof|allowed|alternative-names|annotations|antipair|\" +\n        \"antipairs|any|anyof|app_lifetime|append|arch|archname|args|arity|asec|asech|\" +\n        \"asin|asinh|ASSIGN-KEY|ASSIGN-POS|assuming|ast|at|atan|atan2|atanh|AT-KEY|\" +\n        \"atomic-assign|atomic-dec-fetch|atomic-fetch|atomic-fetch-add|atomic-fetch-dec|\" +\n        \"atomic-fetch-inc|atomic-fetch-sub|atomic-inc-fetch|AT-POS|attributes|auth|await|\" +\n        \"backtrace|Bag|BagHash|base|basename|base-repeating|batch|BIND-KEY|BIND-POS|\" +\n        \"bind-stderr|bind-stdin|bind-stdout|bind-udp|bits|bless|block|bool-only|\" +\n        \"bounds|break|Bridge|broken|BUILD|build-date|bytes|cache|callframe|calling-package|\" +\n        \"CALL-ME|callsame|callwith|can|cancel|candidates|cando|canonpath|caps|caption|\" +\n        \"Capture|cas|catdir|categorize|categorize-list|catfile|catpath|cause|ceiling|\" +\n        \"cglobal|changed|Channel|chars|chdir|child|child-name|child-typename|chmod|chomp|\" +\n        \"chop|chr|chrs|chunks|cis|classify|classify-list|cleanup|clone|close|closed|\" +\n        \"close-stdin|code|codes|collate|column|comb|combinations|command|comment|\" +\n        \"compiler|Complex|compose|compose_type|composer|condition|config|configure_destroy|\" +\n        \"configure_type_checking|conj|connect|constraints|construct|contains|contents|copy|\" +\n        \"cos|cosec|cosech|cosh|cotan|cotanh|count|count-only|cpu-cores|cpu-usage|CREATE|\" +\n        \"create_type|cross|cue|curdir|curupdir|d|Date|DateTime|day|daycount|day-of-month|\" +\n        \"day-of-week|day-of-year|days-in-month|declaration|decode|decoder|deepmap|\" +\n        \"defined|DEFINITE|delayed|DELETE-KEY|DELETE-POS|denominator|desc|DESTROY|destroyers|\" +\n        \"devnull|did-you-mean|die|dir|dirname|dir-sep|DISTROnames|do|done|duckmap|dynamic|\" +\n        \"e|eager|earlier|elems|emit|enclosing|encode|encoder|encoding|end|ends-with|enum_from_value|\" +\n        \"enum_value_list|enum_values|enums|eof|EVAL|EVALFILE|exception|excludes-max|excludes-min|\" +\n        \"EXISTS-KEY|EXISTS-POS|exit|exitcode|exp|expected|explicitly-manage|expmod|extension|f|\" +\n        \"fail|fc|feature|file|filename|find_method|find_method_qualified|finish|first|flat|flatmap|\" +\n        \"flip|floor|flush|fmt|format|formatter|freeze|from|from-list|from-loop|from-posix|full|\" +\n        \"full-barrier|get|get_value|getc|gist|got|grab|grabpairs|grep|handle|handled|handles|\" +\n        \"hardware|has_accessor|head|headers|hh-mm-ss|hidden|hides|hour|how|hyper|id|illegal|\" +\n        \"im|in|indent|index|indices|indir|infinite|infix|install_method_cache|\" +\n        \"Instant|instead|int-bounds|interval|in-timezone|invalid-str|invert|invocant|IO|\" +\n        \"IO::Notification.watch-path|is_trusted|is_type|isa|is-absolute|is-hidden|is-initial-thread|\" +\n        \"is-int|is-lazy|is-leap-year|isNaN|is-prime|is-relative|is-routine|is-setting|is-win|item|\" +\n        \"iterator|join|keep|kept|KERNELnames|key|keyof|keys|kill|kv|kxxv|l|lang|last|lastcall|later|\" +\n        \"lazy|lc|leading|level|line|lines|link|listen|live|local|lock|log|log10|lookup|lsb|\" +\n        \"MAIN|match|max|maxpairs|merge|message|method_table|methods|migrate|min|minmax|\" +\n        \"minpairs|minute|misplaced|Mix|MixHash|mkdir|mode|modified|month|move|mro|msb|multiness|\" +\n        \"name|named|named_names|narrow|nativecast|native-descriptor|nativesizeof|new|new_type|\" +\n        \"new-from-daycount|new-from-pairs|next|nextcallee|next-handle|nextsame|nextwith|NFC|NFD|\" +\n        \"NFKC|NFKD|nl-in|nl-out|nodemap|none|norm|not|note|now|nude|numerator|Numeric|of|\" +\n        \"offset|offset-in-hours|offset-in-minutes|old|on-close|one|on-switch|open|opened|\" +\n        \"operation|optional|ord|ords|orig|os-error|osname|out-buffer|pack|package|package-kind|\" +\n        \"package-name|packages|pair|pairs|pairup|parameter|params|parent|parent-name|parents|parse|\" +\n        \"parse-base|parsefile|parse-names|parts|path|path-sep|payload|peer-host|peer-port|periods|\" +\n        \"perl|permutations|phaser|pick|pickpairs|pid|placeholder|plus|polar|poll|polymod|pop|pos|\" +\n        \"positional|posix|postfix|postmatch|precomp-ext|precomp-target|pred|prefix|prematch|prepend|\" +\n        \"print|printf|print-nl|print-to|private|private_method_table|proc|produce|Promise|prompt|\" +\n        \"protect|pull-one|push|push-all|push-at-least|push-exactly|push-until-lazy|put|\" +\n        \"qualifier-type|quit|r|race|radix|raku|rand|range|raw|re|read|readchars|readonly|\" +\n        \"ready|Real|reallocate|reals|reason|rebless|receive|recv|redispatcher|redo|reduce|\" +\n        \"rel2abs|relative|release|rename|repeated|replacement|report|reserved|resolve|\" +\n        \"restore|result|resume|rethrow|reverse|right|rindex|rmdir|roles_to_compose|\" +\n        \"rolish|roll|rootdir|roots|rotate|rotor|round|roundrobin|routine-type|run|rwx|s|\" +\n        \"samecase|samemark|samewith|say|schedule-on|scheduler|scope|sec|sech|second|seek|\" +\n        \"self|send|Set|set_hidden|set_name|set_package|set_rw|set_value|SetHash|\" +\n        \"set-instruments|setup_finalization|shape|share|shell|shift|sibling|sigil|\" +\n        \"sign|signal|signals|signature|sin|sinh|sink|sink-all|skip|skip-at-least|\" +\n        \"skip-at-least-pull-one|skip-one|sleep|sleep-timer|sleep-until|Slip|slurp|\" +\n        \"slurp-rest|slurpy|snap|snapper|so|socket-host|socket-port|sort|source|\" +\n        \"source-package|spawn|SPEC|splice|split|splitdir|splitpath|sprintf|spurt|\" +\n        \"sqrt|squish|srand|stable|start|started|starts-with|status|stderr|stdout|\" +\n        \"sub_signature|subbuf|subbuf-rw|subname|subparse|subst|subst-mutate|\" +\n        \"substr|substr-eq|substr-rw|succ|sum|Supply|symlink|t|tail|take|take-rw|\" +\n        \"tan|tanh|tap|target|target-name|tc|tclc|tell|then|throttle|throw|timezone|\" +\n        \"tmpdir|to|today|toggle|to-posix|total|trailing|trans|tree|trim|trim-leading|\" +\n        \"trim-trailing|truncate|truncated-to|trusts|try_acquire|trying|twigil|type|\" +\n        \"type_captures|typename|uc|udp|uncaught_handler|unimatch|uniname|uninames|\" +\n        \"uniparse|uniprop|uniprops|unique|unival|univals|unlink|unlock|unpack|unpolar|\" +\n        \"unshift|unwrap|updir|USAGE|utc|val|value|values|VAR|variable|verbose-config|\" +\n        \"version|VMnames|volume|vow|w|wait|warn|watch|watch-path|week|weekday-of-month|\" +\n        \"week-number|week-year|WHAT|WHERE|WHEREFORE|WHICH|WHO|whole-second|WHY|\" +\n        \"wordcase|words|workaround|wrap|write|write-to|yada|year|yield|yyyy-mm-dd|\" +\n        \"z|zip|zip-latest|\" +\n        \"plan|done-testing|bail-out|todo|skip|skip-rest|diag|subtest|pass|flunk|ok|\" +\n        \"nok|cmp-ok|is-deeply|isnt|is-approx|like|unlike|use-ok|isa-ok|does-ok|\" +\n        \"can-ok|dies-ok|lives-ok|eval-dies-ok|eval-lives-ok|throws-like|fails-like|\" +\n        \"rw|required|native|repr|export|symbol\");\n    var constants_ascii = (\"pi|Inf|tau|time\");\n    var ops_txt = (\"eq|ne|gt|lt|le|ge|div|gcd|lcm|leg|cmp|ff|fff|\" +\n        \"x|before|after|Z|X|and|or|andthen|notandthen|orelse|xor\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"storage.type\": types,\n        \"constant.language\": constants_ascii,\n        \"support.function\": builtinFunctions,\n        \"keyword.operator\": ops_txt\n    }, \"identifier\");\n    var moduleName = \"[a-zA-Z_][a-zA-Z_0-9:-]*\\\\b\";\n    var hex = { token: \"constant.numeric\", regex: \"0x[0-9a-fA-F]+\\\\b\" };\n    var num_rat = { token: \"constant.numeric\", regex: \"[+-.]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\" };\n    var num_with_ = { token: \"constant.numeric\", regex: \"(?:\\\\d+_?\\\\d+)+\\\\b\" };\n    var complex_numbers = { token: \"constant.numeric\", regex: \"\\\\+?\\\\d+i\\\\b\" };\n    var booleans = { token: \"constant.language.boolean\", regex: \"(?:True|False)\\\\b\" };\n    var versions = { token: \"constant.other\", regex: \"v[0-9](?:\\\\.[a-zA-Z0-9*])*\\\\b\" };\n    var lang_keywords = { token: keywordMapper, regex: \"[a-zA-Z][\\\\:a-zA-Z0-9_-]*\\\\b\" };\n    var variables = { token: \"variable.language\", regex: \"[$@%&][?*!.]?[a-zA-Z0-9_-]+\\\\b\" };\n    var vars_special = { token: \"variable.language\", regex: \"\\\\$[/|!]?|@\\\\$/\" };\n    var ops_char = { token: \"keyword.operator\", regex: \"=|<|>|\\\\+|\\\\*|-|/|~|%|\\\\?|!|\\\\^|\\\\.|\\\\:|\\\\,|\" +\n            \"»|«|\\\\||\\\\&|⚛|∘\" };\n    var constants_unicode = { token: \"constant.language\", regex: \"𝑒|π|τ|∞\" };\n    var qstrings = { token: \"string.quoted.single\", regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\" };\n    var word_quoting = { token: \"string.quoted.single\", regex: \"[<](?:[a-zA-Z0-9 ])*[>]\" };\n    var regexp = {\n        token: \"string.regexp\",\n        regex: \"[m|rx]?[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n    };\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.block\",\n                regex: \"#[`|=]\\\\(.*\\\\)\"\n            }, {\n                token: \"comment.block\",\n                regex: \"#[`|=]\\\\[.*\\\\]\"\n            }, {\n                token: \"comment.doc\",\n                regex: \"^=(?:begin)\\\\b\",\n                next: \"block_comment\"\n            }, {\n                token: \"string.unquoted\",\n                regex: \"q[x|w]?\\\\:to/END/;\",\n                next: \"qheredoc\"\n            }, {\n                token: \"string.unquoted\",\n                regex: \"qq[x|w]?\\\\:to/END/;\",\n                next: \"qqheredoc\"\n            },\n            regexp,\n            qstrings,\n            {\n                token: \"string.quoted.double\",\n                regex: '\"',\n                next: \"qqstring\"\n            },\n            word_quoting,\n            {\n                token: [\"keyword\", \"text\", \"variable.module\"],\n                regex: \"(use)(\\\\s+)((?:\" + moduleName + \"\\\\.?)*)\"\n            },\n            hex,\n            num_rat,\n            num_with_,\n            complex_numbers,\n            booleans,\n            versions,\n            lang_keywords,\n            variables,\n            vars_special,\n            ops_char,\n            constants_unicode,\n            {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: '\\\\\\\\(?:[nrtef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'\n            },\n            variables,\n            vars_special,\n            {\n                token: \"lparen\",\n                regex: \"{\",\n                next: \"qqinterpolation\"\n            }, {\n                token: \"string.quoted.double\",\n                regex: '\"',\n                next: \"start\"\n            }, {\n                defaultToken: \"string.quoted.double\"\n            }\n        ],\n        \"qqinterpolation\": [\n            hex,\n            num_rat,\n            num_with_,\n            complex_numbers,\n            booleans,\n            versions,\n            lang_keywords,\n            variables,\n            vars_special,\n            ops_char,\n            constants_unicode,\n            qstrings,\n            regexp,\n            {\n                token: \"rparen\",\n                regex: \"}\",\n                next: \"qqstring\"\n            }\n        ],\n        \"block_comment\": [\n            {\n                token: \"comment.doc\",\n                regex: \"^=end +[a-zA-Z_0-9]*\",\n                next: \"start\"\n            },\n            {\n                defaultToken: \"comment.doc\"\n            }\n        ],\n        \"qheredoc\": [\n            {\n                token: \"string.unquoted\",\n                regex: \"END$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string.unquoted\"\n            }\n        ],\n        \"qqheredoc\": [\n            variables,\n            vars_special,\n            {\n                token: \"lparen\",\n                regex: \"{\",\n                next: \"qqheredocinterpolation\"\n            }, {\n                token: \"string.unquoted\",\n                regex: \"END$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string.unquoted\"\n            }\n        ],\n        \"qqheredocinterpolation\": [\n            hex,\n            num_rat,\n            num_with_,\n            complex_numbers,\n            booleans,\n            versions,\n            lang_keywords,\n            variables,\n            vars_special,\n            ops_char,\n            constants_unicode,\n            qstrings,\n            regexp,\n            {\n                token: \"rparen\",\n                regex: \"}\",\n                next: \"qqheredoc\"\n            }\n        ]\n    };\n};\noop.inherits(RakuHighlightRules, TextHighlightRules);\nexports.RakuHighlightRules = RakuHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/raku\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/raku_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RakuHighlightRules = require(\"./raku_highlight_rules\").RakuHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = RakuHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode({ start: \"^=(begin)\\\\b\", end: \"^=(end)\\\\b\" });\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.blockComment = [\n        { start: \"=begin\", end: \"=end\", lineStartOnly: true },\n        { start: \"=item\", end: \"=end\", lineStartOnly: true }\n    ];\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/raku\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/raku\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-razor.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/csharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CSharpHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \"abstract|async|await|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|partial|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\n        \"constant.language\": \"null|true|false\"\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: /'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))?'/\n            }, {\n                token: \"string\", start: '\"', end: '\"|$', next: [\n                    { token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/ },\n                    { token: \"invalid\", regex: /\\\\./ }\n                ]\n            }, {\n                token: \"string\", start: '@\"', end: '\"', next: [\n                    { token: \"constant.language.escape\", regex: '\"\"' }\n                ]\n            }, {\n                token: \"string\", start: /\\$\"/, end: '\"|$', next: [\n                    { token: \"constant.language.escape\", regex: /\\\\(:?$)|{{/ },\n                    { token: \"constant.language.escape\", regex: /\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/ },\n                    { token: \"invalid\", regex: /\\\\./ }\n                ]\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"keyword\",\n                regex: \"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(CSharpHighlightRules, TextHighlightRules);\nexports.CSharpHighlightRules = CSharpHighlightRules;\n\n});\n\nace.define(\"ace/mode/razor_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/csharp_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar CSharpHighlightRules = require(\"./csharp_highlight_rules\").CSharpHighlightRules;\nvar blockPrefix = 'razor-block-';\nvar RazorLangHighlightRules = function () {\n    CSharpHighlightRules.call(this);\n    var processPotentialCallback = function (value, stackItem) {\n        if (typeof stackItem === \"function\")\n            return stackItem(value);\n        return stackItem;\n    };\n    var inBraces = 'in-braces';\n    this.$rules.start.unshift({\n        regex: '[\\\\[({]',\n        onMatch: function (value, state, stack) {\n            var prefix = /razor-[^\\-]+-/.exec(state)[0];\n            stack.unshift(value);\n            stack.unshift(prefix + inBraces);\n            this.next = prefix + inBraces;\n            return 'paren.lparen';\n        }\n    }, {\n        start: \"@\\\\*\",\n        end: \"\\\\*@\",\n        token: \"comment\"\n    });\n    var parentCloseMap = {\n        '{': '}',\n        '[': ']',\n        '(': ')'\n    };\n    this.$rules[inBraces] = lang.deepCopy(this.$rules.start);\n    this.$rules[inBraces].unshift({\n        regex: '[\\\\])}]',\n        onMatch: function (value, state, stack) {\n            var open = stack[1];\n            if (parentCloseMap[open] !== value)\n                return 'invalid.illegal';\n            stack.shift(); // exit in-braces block\n            stack.shift(); // exit brace marker\n            this.next = processPotentialCallback(value, stack[0]) || 'start';\n            return 'paren.rparen';\n        }\n    });\n};\noop.inherits(RazorLangHighlightRules, CSharpHighlightRules);\nvar RazorHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var blockStartRule = {\n        regex: '@[({]|@functions{',\n        onMatch: function (value, state, stack) {\n            stack.unshift(value);\n            stack.unshift('razor-block-start');\n            this.next = 'razor-block-start';\n            return 'punctuation.block.razor';\n        }\n    };\n    var blockEndMap = {\n        '@{': '}',\n        '@(': ')',\n        '@functions{': '}'\n    };\n    var blockEndRule = {\n        regex: '[})]',\n        onMatch: function (value, state, stack) {\n            var blockStart = stack[1];\n            if (blockEndMap[blockStart] !== value)\n                return 'invalid.illegal';\n            stack.shift(); // exit razor block\n            stack.shift(); // remove block type marker\n            this.next = stack.shift() || 'start';\n            return 'punctuation.block.razor';\n        }\n    };\n    var shortStartRule = {\n        regex: \"@(?![{(])\",\n        onMatch: function (value, state, stack) {\n            stack.unshift(\"razor-short-start\");\n            this.next = \"razor-short-start\";\n            return 'punctuation.short.razor';\n        }\n    };\n    var shortEndRule = {\n        token: \"\",\n        regex: \"(?=[^A-Za-z_\\\\.()\\\\[\\\\]])\",\n        next: 'pop'\n    };\n    var ifStartRule = {\n        regex: \"@(?=if)\",\n        onMatch: function (value, state, stack) {\n            stack.unshift(function (value) {\n                if (value !== '}')\n                    return 'start';\n                return stack.shift() || 'start';\n            });\n            this.next = 'razor-block-start';\n            return 'punctuation.control.razor';\n        }\n    };\n    var razorStartRules = [\n        {\n            start: \"@\\\\*\",\n            end: \"\\\\*@\",\n            token: \"comment\"\n        },\n        {\n            token: [\"meta.directive.razor\", \"text\", \"identifier\"],\n            regex: \"^(\\\\s*@model)(\\\\s+)(.+)$\"\n        },\n        blockStartRule,\n        shortStartRule\n    ];\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], razorStartRules);\n    this.embedRules(RazorLangHighlightRules, \"razor-block-\", [blockEndRule], [\"start\"]);\n    this.embedRules(RazorLangHighlightRules, \"razor-short-\", [shortEndRule], [\"start\"]);\n    this.normalizeRules();\n};\noop.inherits(RazorHighlightRules, HtmlHighlightRules);\nexports.RazorHighlightRules = RazorHighlightRules;\nexports.RazorLangHighlightRules = RazorLangHighlightRules;\n\n});\n\nace.define(\"ace/mode/razor_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar keywords = [\n    \"abstract\", \"as\", \"base\", \"bool\",\n    \"break\", \"byte\", \"case\", \"catch\",\n    \"char\", \"checked\", \"class\", \"const\",\n    \"continue\", \"decimal\", \"default\", \"delegate\",\n    \"do\", \"double\", \"else\", \"enum\",\n    \"event\", \"explicit\", \"extern\", \"false\",\n    \"finally\", \"fixed\", \"float\", \"for\",\n    \"foreach\", \"goto\", \"if\", \"implicit\",\n    \"in\", \"int\", \"interface\", \"internal\",\n    \"is\", \"lock\", \"long\", \"namespace\",\n    \"new\", \"null\", \"object\", \"operator\",\n    \"out\", \"override\", \"params\", \"private\",\n    \"protected\", \"public\", \"readonly\", \"ref\",\n    \"return\", \"sbyte\", \"sealed\", \"short\",\n    \"sizeof\", \"stackalloc\", \"static\", \"string\",\n    \"struct\", \"switch\", \"this\", \"throw\",\n    \"true\", \"try\", \"typeof\", \"uint\",\n    \"ulong\", \"unchecked\", \"unsafe\", \"ushort\",\n    \"using\", \"var\", \"virtual\", \"void\",\n    \"volatile\", \"while\"\n];\nvar shortHands = [\n    \"Html\", \"Model\", \"Url\", \"Layout\"\n];\nvar RazorCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (state.lastIndexOf(\"razor-short-start\") == -1 && state.lastIndexOf(\"razor-block-start\") == -1)\n            return [];\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (state.lastIndexOf(\"razor-short-start\") != -1) {\n            return this.getShortStartCompletions(state, session, pos, prefix);\n        }\n        if (state.lastIndexOf(\"razor-block-start\") != -1) {\n            return this.getKeywordCompletions(state, session, pos, prefix);\n        }\n    };\n    this.getShortStartCompletions = function (state, session, pos, prefix) {\n        return shortHands.map(function (element) {\n            return {\n                value: element,\n                meta: \"keyword\",\n                score: 1000000\n            };\n        });\n    };\n    this.getKeywordCompletions = function (state, session, pos, prefix) {\n        return shortHands.concat(keywords).map(function (element) {\n            return {\n                value: element,\n                meta: \"keyword\",\n                score: 1000000\n            };\n        });\n    };\n}).call(RazorCompletions.prototype);\nexports.RazorCompletions = RazorCompletions;\n\n});\n\nace.define(\"ace/mode/razor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/razor_highlight_rules\",\"ace/mode/razor_completions\",\"ace/mode/html_completions\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar RazorHighlightRules = require(\"./razor_highlight_rules\").RazorHighlightRules;\nvar RazorCompletions = require(\"./razor_completions\").RazorCompletions;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.$highlightRules = new RazorHighlightRules();\n    this.$completer = new RazorCompletions();\n    this.$htmlCompleter = new HtmlCompletions();\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var razorToken = this.$completer.getCompletions(state, session, pos, prefix);\n        var htmlToken = this.$htmlCompleter.getCompletions(state, session, pos, prefix);\n        return razorToken.concat(htmlToken);\n    };\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.$id = \"ace/mode/razor\";\n    this.snippetFileId = \"ace/snippets/razor\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/razor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-rdoc.js",
    "content": "ace.define(\"ace/mode/latex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LatexHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"%.*$\"\n            }, {\n                token: [\"keyword\", \"lparen\", \"variable.parameter\", \"rparen\", \"lparen\", \"storage.type\", \"rparen\"],\n                regex: \"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"\n            }, {\n                token: [\"keyword\", \"lparen\", \"variable.parameter\", \"rparen\"],\n                regex: \"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"\n            }, {\n                token: [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n                regex: \"(\\\\\\\\begin)({)(verbatim)(})\",\n                next: \"verbatim\"\n            }, {\n                token: [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n                regex: \"(\\\\\\\\begin)({)(lstlisting)(})\",\n                next: \"lstlisting\"\n            }, {\n                token: [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n                regex: \"(\\\\\\\\(?:begin|end))({)([\\\\w*]*)(})\"\n            }, {\n                token: \"storage.type\",\n                regex: /\\\\verb\\b\\*?/,\n                next: [{\n                        token: [\"keyword.operator\", \"string\", \"keyword.operator\"],\n                        regex: \"(.)(.*?)(\\\\1|$)|\",\n                        next: \"start\"\n                    }]\n            }, {\n                token: \"storage.type\",\n                regex: \"\\\\\\\\[a-zA-Z]+\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"constant.character.escape\",\n                regex: \"\\\\\\\\[^a-zA-Z]?\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\${1,2}\",\n                next: \"equation\"\n            }],\n        \"equation\": [{\n                token: \"comment\",\n                regex: \"%.*$\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\${1,2}\",\n                next: \"start\"\n            }, {\n                token: \"constant.character.escape\",\n                regex: \"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"\n            }, {\n                token: \"error\",\n                regex: \"^\\\\s*$\",\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"verbatim\": [{\n                token: [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n                regex: \"(\\\\\\\\end)({)(verbatim)(})\",\n                next: \"start\"\n            }, {\n                defaultToken: \"text\"\n            }],\n        \"lstlisting\": [{\n                token: [\"storage.type\", \"lparen\", \"variable.parameter\", \"rparen\"],\n                regex: \"(\\\\\\\\end)({)(lstlisting)(})\",\n                next: \"start\"\n            }, {\n                defaultToken: \"text\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(LatexHighlightRules, TextHighlightRules);\nexports.LatexHighlightRules = LatexHighlightRules;\n\n});\n\nace.define(\"ace/mode/rdoc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/latex_highlight_rules\"], function(require, exports, module){/*\n * rdoc_highlight_rules.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar LaTeXHighlightRules = require(\"./latex_highlight_rules\");\nvar RDocHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"%.*$\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\",\n                next: \"nospell\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"nospell\": [\n            {\n                token: \"comment\",\n                regex: \"%.*$\",\n                next: \"start\"\n            }, {\n                token: \"nospell.text\",\n                regex: \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n                next: \"start\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[\\\\])]\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"}\",\n                next: \"start\"\n            }, {\n                token: \"nospell.text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"nospell.text\",\n                regex: \"\\\\w+\"\n            }\n        ]\n    };\n};\noop.inherits(RDocHighlightRules, TextHighlightRules);\nexports.RDocHighlightRules = RDocHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/rdoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rdoc_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){/*\n * rdoc.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RDocHighlightRules = require(\"./rdoc_highlight_rules\").RDocHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function (suppressHighlighting) {\n    this.HighlightRules = RDocHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.$id = \"ace/mode/rdoc\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/rdoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-red.js",
    "content": "ace.define(\"ace/mode/red_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar RedHighlightRules = function () {\n    var compoundKeywords = \"\";\n    this.$rules = {\n        \"start\": [\n            { token: \"keyword.operator\",\n                regex: /\\s([\\-+%/=<>*]|(?:\\*\\*\\|\\/\\/|==|>>>?|<>|<<|=>|<=|=\\?))(\\s|(?=:))/ },\n            { token: \"string.email\", regex: /\\w[-\\w._]*\\@\\w[-\\w._]*/ },\n            { token: \"value.time\", regex: /\\b\\d+:\\d+(:\\d+)?/ },\n            { token: \"string.url\", regex: /\\w[-\\w_]*\\:(\\/\\/)?\\w[-\\w._]*(:\\d+)?/ },\n            { token: \"value.date\", regex: /(\\b\\d{1,4}[-/]\\d{1,2}[-/]\\d{1,2}|\\d{1,2}[-/]\\d{1,2}[-/]\\d{1,4})\\b/ },\n            { token: \"value.tuple\", regex: /\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(\\.\\d{1,3}){0,9}/ },\n            { token: \"value.pair\", regex: /[+-]?\\d+x[-+]?\\d+/ },\n            { token: \"value.binary\", regex: /\\b2#{([01]{8})+}/ },\n            { token: \"value.binary\", regex: /\\b64#{([\\w/=+])+}/ },\n            { token: \"value.binary\", regex: /(16)?#{([\\dabcdefABCDEF][\\dabcdefABCDEF])*}/ },\n            { token: \"value.issue\", regex: /#\\w[-\\w'*.]*/ },\n            { token: \"value.numeric\", regex: /[+-]?\\d['\\d]*(?:\\.\\d+)?e[-+]?\\d{1,3}\\%?(?!\\w)/ },\n            { token: \"invalid.illegal\", regex: /[+-]?\\d['\\d]*(?:\\.\\d+)?\\%?[a-zA-Z]/ },\n            { token: \"value.numeric\", regex: /[+-]?\\d['\\d]*(?:\\.\\d+)?\\%?(?![a-zA-Z])/ },\n            { token: \"value.character\", regex: /#\"(\\^[-@/_~^\"HKLM\\[]|.)\"/ },\n            { token: \"string.file\", regex: /%[-\\w\\.\\/]+/ },\n            { token: \"string.tag\", regex: /</, next: \"tag\" },\n            { token: \"string\", regex: /\"/, next: \"string\" },\n            { token: \"string.other\", regex: \"{\", next: \"string.other\" },\n            { token: \"comment\", regex: \"comment [{]\", next: \"comment\" },\n            { token: \"comment\", regex: /;.+$/ },\n            { token: \"paren.map-start\", regex: \"#\\\\(\" },\n            { token: \"paren.block-start\", regex: \"[\\\\[]\" },\n            { token: \"paren.block-end\", regex: \"[\\\\]]\" },\n            { token: \"paren.parens-start\", regex: \"[(]\" },\n            { token: \"paren.parens-end\", regex: \"\\\\)\" },\n            { token: \"keyword\", regex: \"/local|/external\" },\n            { token: \"keyword.preprocessor\", regex: \"#(if|either|\" +\n                    \"switch|case|include|do|macrolocal|reset|process|trace)\" },\n            { token: \"constant.datatype!\", regex: \"(?:datatype|unset|none|logic|block|paren|string|\" +\n                    \"file|url|char|integer|float|word|set-word|lit-word|\" +\n                    \"get-word|refinement|issue|native|action|op|function|\" +\n                    \"path|lit-path|set-path|get-path|routine|bitset|point|\" +\n                    \"object|typeset|error|vector|hash|pair|percent|tuple|\" +\n                    \"map|binary|time|tag|email|handle|date|image|event|\" +\n                    \"series|any-type|number|any-object|scalar|\" +\n                    \"any-string|any-word|any-function|any-block|any-list|\" +\n                    \"any-path|immediate|all-word|internal|external|default)!(?![-!?\\\\w~])\" },\n            { token: \"keyword.function\", regex: \"\\\\b(?:collect|quote|on-parse-event|math|last|source|expand|\" +\n                    \"show|context|object|input|quit|dir|make-dir|cause-error|\" +\n                    \"error\\\\?|none\\\\?|block\\\\?|any-list\\\\?|word\\\\?|char\\\\?|\" +\n                    \"any-string\\\\?|series\\\\?|binary\\\\?|attempt|url\\\\?|\" +\n                    \"string\\\\?|suffix\\\\?|file\\\\?|object\\\\?|body-of|first|\" +\n                    \"second|third|mod|clean-path|dir\\\\?|to-red-file|\" +\n                    \"normalize-dir|list-dir|pad|empty\\\\?|dirize|offset\\\\?|\" +\n                    \"what-dir|expand-directives|load|split-path|change-dir|\" +\n                    \"to-file|path-thru|save|load-thru|View|float\\\\?|to-float|\" +\n                    \"charset|\\\\?|probe|set-word\\\\?|q|words-of|replace|repend|\" +\n                    \"react|function\\\\?|spec-of|unset\\\\?|halt|op\\\\?|\" +\n                    \"any-function\\\\?|to-paren|tag\\\\?|routine|class-of|\" +\n                    \"size-text|draw|handle\\\\?|link-tabs-to-parent|\" +\n                    \"link-sub-to-parent|on-face-deep-change*|\" +\n                    \"update-font-faces|do-actor|do-safe|do-events|pair\\\\?|\" +\n                    \"foreach-face|hex-to-rgb|issue\\\\?|alter|path\\\\?|\" +\n                    \"typeset\\\\?|datatype\\\\?|set-flag|layout|extract|image\\\\?|\" +\n                    \"get-word\\\\?|to-logic|to-set-word|to-block|center-face|\" +\n                    \"dump-face|request-font|request-file|request-dir|rejoin|\" +\n                    \"ellipsize-at|any-block\\\\?|any-object\\\\?|map\\\\?|keys-of|\" +\n                    \"a-an|also|parse-func-spec|help-string|what|routine\\\\?|\" +\n                    \"action\\\\?|native\\\\?|refinement\\\\?|common-substr|\" +\n                    \"red-complete-file|red-complete-path|unview|comment|\\\\?\\\\?|\" +\n                    \"fourth|fifth|values-of|bitset\\\\?|email\\\\?|get-path\\\\?|\" +\n                    \"hash\\\\?|integer\\\\?|lit-path\\\\?|lit-word\\\\?|logic\\\\?|\" +\n                    \"paren\\\\?|percent\\\\?|set-path\\\\?|time\\\\?|tuple\\\\?|date\\\\?|\" +\n                    \"vector\\\\?|any-path\\\\?|any-word\\\\?|number\\\\?|immediate\\\\?|\" +\n                    \"scalar\\\\?|all-word\\\\?|to-bitset|to-binary|to-char|to-email|\" +\n                    \"to-get-path|to-get-word|to-hash|to-integer|to-issue|\" +\n                    \"to-lit-path|to-lit-word|to-map|to-none|to-pair|to-path|\" +\n                    \"to-percent|to-refinement|to-set-path|to-string|to-tag|\" +\n                    \"to-time|to-typeset|to-tuple|to-unset|to-url|to-word|\" +\n                    \"to-image|to-date|parse-trace|modulo|eval-set-path|\" +\n                    \"extract-boot-args|flip-exe-flag|split|do-file|\" +\n                    \"exists-thru\\\\?|read-thru|do-thru|cos|sin|tan|acos|asin|\" +\n                    \"atan|atan2|sqrt|clear-reactions|dump-reactions|react\\\\?|\" +\n                    \"within\\\\?|overlap\\\\?|distance\\\\?|face\\\\?|metrics\\\\?|\" +\n                    \"get-scroller|insert-event-func|remove-event-func|\" +\n                    \"set-focus|help|fetch-help|about|ls|ll|pwd|cd|\" +\n                    \"red-complete-input|matrix)(?![-!?\\\\w~])\" },\n            { token: \"keyword.action\", regex: \"\\\\b(?:to|remove|copy|insert|change|clear|move|poke|put|\" +\n                    \"random|reverse|sort|swap|take|trim|add|subtract|\" +\n                    \"divide|multiply|make|reflect|form|mold|modify|\" +\n                    \"absolute|negate|power|remainder|round|even\\\\?|odd\\\\?|\" +\n                    \"and~|complement|or~|xor~|append|at|back|find|skip|\" +\n                    \"tail|head|head\\\\?|index\\\\?|length\\\\?|next|pick|\" +\n                    \"select|tail\\\\?|delete|read|write)(?![-_!?\\\\w~])\"\n            },\n            { token: \"keyword.native\", regex: \"\\\\b(?:not|any|set|uppercase|lowercase|checksum|\" +\n                    \"try|catch|browse|throw|all|as|\" +\n                    \"remove-each|func|function|does|has|do|reduce|\" +\n                    \"compose|get|print|prin|equal\\\\?|not-equal\\\\?|\" +\n                    \"strict-equal\\\\?|lesser\\\\?|greater\\\\?|lesser-or-equal\\\\?|\" +\n                    \"greater-or-equal\\\\?|same\\\\?|type\\\\?|stats|bind|in|parse|\" +\n                    \"union|unique|intersect|difference|exclude|\" +\n                    \"complement\\\\?|dehex|negative\\\\?|positive\\\\?|max|min|\" +\n                    \"shift|to-hex|sine|cosine|tangent|arcsine|arccosine|\" +\n                    \"arctangent|arctangent2|NaN\\\\?|zero\\\\?|log-2|log-10|log-e|\" +\n                    \"exp|square-root|construct|value\\\\?|as-pair|\" +\n                    \"extend|debase|enbase|to-local-file|\" +\n                    \"wait|unset|new-line|new-line\\\\?|context\\\\?|set-env|\" +\n                    \"get-env|list-env|now|sign\\\\?|call|size\\\\?)(?![-!?\\\\w~])\"\n            },\n            { token: \"keyword\", regex: \"\\\\b(?:Red(?=\\\\s+\\\\[)|object|context|make|self|keep)(?![-!?\\\\w~])\"\n            },\n            { token: \"variable.language\", regex: \"this\" },\n            { token: \"keyword.control\", regex: \"(?:while|if|return|case|unless|either|until|loop|repeat|\" +\n                    \"forever|foreach|forall|switch|break|continue|exit)(?![-!?\\\\w~])\" },\n            { token: \"constant.language\", regex: \"\\\\b(?:true|false|on|off|yes|none|no)(?![-!?\\\\w~])\" },\n            { token: \"constant.numeric\", regex: /\\bpi(?![^-_])/ },\n            { token: \"constant.character\", regex: \"\\\\b(space|tab|newline|cr|lf)(?![-!?\\\\w~])\" },\n            { token: \"keyword.operator\", regex: \"\\s(or|and|xor|is)\\s\" },\n            { token: \"variable.get-path\", regex: /:\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/ },\n            { token: \"variable.set-path\", regex: /\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*:/ },\n            { token: \"variable.lit-path\", regex: /'\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/ },\n            { token: \"variable.path\", regex: /\\w[-\\w'*.?!]*(\\/\\w[-\\w'*.?!]*)(\\/\\w[-\\w'*.?!]*)*/ },\n            { token: \"variable.refinement\", regex: /\\/\\w[-\\w'*.?!]*/ },\n            { token: \"keyword.view.style\", regex: \"\\\\b(?:window|base|button|text|field|area|check|\" +\n                    \"radio|progress|slider|camera|text-list|\" +\n                    \"drop-list|drop-down|panel|group-box|\" +\n                    \"tab-panel|h1|h2|h3|h4|h5|box|image|init)(?![-!?\\\\w~])\" },\n            { token: \"keyword.view.event\", regex: \"\\\\b(?:detect|on-detect|time|on-time|drawing|on-drawing|\" +\n                    \"scroll|on-scroll|down|on-down|up|on-up|mid-down|\" +\n                    \"on-mid-down|mid-up|on-mid-up|alt-down|on-alt-down|\" +\n                    \"alt-up|on-alt-up|aux-down|on-aux-down|aux-up|\" +\n                    \"on-aux-up|wheel|on-wheel|drag-start|on-drag-start|\" +\n                    \"drag|on-drag|drop|on-drop|click|on-click|dbl-click|\" +\n                    \"on-dbl-click|over|on-over|key|on-key|key-down|\" +\n                    \"on-key-down|key-up|on-key-up|ime|on-ime|focus|\" +\n                    \"on-focus|unfocus|on-unfocus|select|on-select|\" +\n                    \"change|on-change|enter|on-enter|menu|on-menu|close|\" +\n                    \"on-close|move|on-move|resize|on-resize|moving|\" +\n                    \"on-moving|resizing|on-resizing|zoom|on-zoom|pan|\" +\n                    \"on-pan|rotate|on-rotate|two-tap|on-two-tap|\" +\n                    \"press-tap|on-press-tap|create|on-create|created|on-created)(?![-!?\\\\w~])\" },\n            { token: \"keyword.view.option\", regex: \"\\\\b(?:all-over|center|color|default|disabled|down|\" +\n                    \"flags|focus|font|font-color|font-name|\" +\n                    \"font-size|hidden|hint|left|loose|name|\" +\n                    \"no-border|now|rate|react|select|size|space)(?![-!?\\\\w~])\" },\n            { token: \"constant.other.colour\", regex: \"\\\\b(?:Red|white|transparent|\" +\n                    \"black|gray|aqua|beige|blue|brick|brown|coal|coffee|\" +\n                    \"crimson|cyan|forest|gold|green|ivory|khaki|leaf|linen|\" +\n                    \"magenta|maroon|mint|navy|oldrab|olive|orange|papaya|\" +\n                    \"pewter|pink|purple|reblue|rebolor|sienna|silver|sky|\" +\n                    \"snow|tanned|teal|violet|water|wheat|yello|yellow|glass)(?![-!?\\\\w~])\" },\n            { token: \"variable.get-word\", regex: /\\:\\w[-\\w'*.?!]*/ },\n            { token: \"variable.set-word\", regex: /\\w[-\\w'*.?!]*\\:/ },\n            { token: \"variable.lit-word\", regex: /'\\w[-\\w'*.?!]*/ },\n            { token: \"variable.word\", regex: /\\b\\w+[-\\w'*.!?]*/ },\n            { caseInsensitive: true }\n        ],\n        \"string\": [\n            { token: \"string\", regex: /\"/, next: \"start\" },\n            { defaultToken: \"string\" }\n        ],\n        \"string.other\": [\n            { token: \"string.other\", regex: /}/, next: \"start\" },\n            { defaultToken: \"string.other\" }\n        ],\n        \"tag\": [\n            { token: \"string.tag\", regex: />/, next: \"start\" },\n            { defaultToken: \"string.tag\" }\n        ],\n        \"comment\": [\n            { token: \"comment\", regex: /}/, next: \"start\" },\n            { defaultToken: \"comment\" }\n        ]\n    };\n};\noop.inherits(RedHighlightRules, TextHighlightRules);\nexports.RedHighlightRules = RedHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/red\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/red_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RedHighlightRules = require(\"./red_highlight_rules\").RedHighlightRules;\nvar RedFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n    this.HighlightRules = RedHighlightRules;\n    this.foldingRules = new RedFoldMode();\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \";\";\n    this.blockComment = { start: \"comment {\", end: \"}\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\[\\(]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/red\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/red\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-redshift.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsonHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"variable\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n            }, {\n                token: \"string\",\n                regex: '\"',\n                next: \"string\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: \"text\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            }, {\n                token: \"comment.start\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[,]/\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"string\": [\n            {\n                token: \"constant.language.escape\",\n                regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.end\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n};\noop.inherits(JsonHighlightRules, TextHighlightRules);\nexports.JsonHighlightRules = JsonHighlightRules;\n\n});\n\nace.define(\"ace/mode/redshift_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/json_highlight_rules\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JsonHighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar RedshiftHighlightRules = function () {\n    var keywords = (\"aes128|aes256|all|allowoverwrite|analyse|analyze|and|any|array|as|asc|authorization|backup|\" +\n        \"between|binary|blanksasnull|both|bytedict|bzip2|case|cast|check|collate|column|constraint|create|credentials|\" +\n        \"cross|current_date|current_time|current_timestamp|current_user|current_user_id|default|deferrable|deflate|defrag|delta|\" +\n        \"delta32k|desc|disable|distinct|do|else|emptyasnull|enable|encode|encrypt|encryption|end|except|explicit|false|for|foreign|\" +\n        \"freeze|from|full|globaldict256|globaldict64k|grant|group|gzip|having|identity|ignore|ilike|in|initially|inner|intersect|into|is|\" +\n        \"isnull|join|leading|left|like|limit|localtime|localtimestamp|lun|luns|lzo|lzop|minus|mostly13|mostly32|mostly8|natural|new|not|notnull|\" +\n        \"null|nulls|off|offline|offset|old|on|only|open|or|order|outer|overlaps|parallel|partition|percent|permissions|placing|primary|raw|readratio|\" +\n        \"recover|references|rejectlog|resort|restore|right|select|session_user|similar|some|sysdate|system|table|tag|tdes|text255|text32k|then|timestamp|\" +\n        \"to|top|trailing|true|truncatecolumns|union|unique|user|using|verbose|wallet|when|where|with|without\");\n    var builtinFunctions = (\"current_schema|current_schemas|has_database_privilege|has_schema_privilege|has_table_privilege|age|current_time|current_timestamp|localtime|\" +\n        \"isfinite|now|ascii|get_bit|get_byte|octet_length|set_bit|set_byte|to_ascii|avg|count|listagg|max|min|stddev_samp|stddev_pop|sum|var_samp|var_pop|\" +\n        \"bit_and|bit_or|bool_and|bool_or|avg|count|cume_dist|dense_rank|first_value|last_value|lag|lead|listagg|max|median|min|nth_value|ntile|percent_rank|\" +\n        \"percentile_cont|percentile_disc|rank|ratio_to_report|row_number|case|coalesce|decode|greatest|least|nvl|nvl2|nullif|add_months|age|convert_timezone|\" +\n        \"current_date|timeofday|current_time|current_timestamp|date_cmp|date_cmp_timestamp|date_part_year|dateadd|datediff|date_part|date_trunc|extract|getdate|\" +\n        \"interval_cmp|isfinite|last_day|localtime|localtimestamp|months_between|next_day|now|sysdate|timestamp_cmp|timestamp_cmp_date|trunc|abs|acos|asin|atan|\" +\n        \"atan2|cbrt|ceiling|ceil|checksum|cos|cot|degrees|dexp|dlog1|dlog10|exp|floor|ln|log|mod|pi|power|radians|random|round|sin|sign|sqrt|tan|trunc|ascii|\" +\n        \"bpcharcmp|btrim|bttext_pattern_cmp|char_length|character_length|charindex|chr|concat|crc32|func_sha1|get_bit|get_byte|initcap|left|right|len|length|\" +\n        \"lower|lpad|rpad|ltrim|md5|octet_length|position|quote_ident|quote_literal|regexp_count|regexp_instr|regexp_replace|regexp_substr|repeat|replace|replicate|\" +\n        \"reverse|rtrim|set_bit|set_byte|split_part|strpos|strtol|substring|textlen|to_ascii|to_hex|translate|trim|upper|json_array_length|json_extract_array_element_text|\" +\n        \"json_extract_path_text|cast|convert|to_char|to_date|to_number|current_database|current_schema|current_schemas|current_user|current_user_id|has_database_privilege|\" +\n        \"has_schema_privilege|has_table_privilege|pg_backend_pid|pg_last_copy_count|pg_last_copy_id|pg_last_query_id|pg_last_unload_count|session_user|slice_num|user|version\");\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n    var sqlRules = [{\n            token: \"string\",\n            regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token: \"variable.language\",\n            regex: '\".*?\"'\n        }, {\n            token: \"constant.numeric\",\n            regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"[a-zA-Z_][a-zA-Z0-9_$]*\\\\b\" // TODO - Unicode in identifiers\n        }, {\n            token: \"keyword.operator\",\n            regex: \"!|!!|!~|!~\\\\*|!~~|!~~\\\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\\\&|\\\\&\\\\&|\\\\&<|\\\\&<\\\\||\\\\&>|\\\\*|\\\\+|\" +\n                \"\\\\-|/|<|<#>|<\\\\->|<<|<<=|<<\\\\||<=|<>|<\\\\?>|<@|<\\\\^|=|>|>=|>>|>>=|>\\\\^|\\\\?#|\\\\?\\\\-|\\\\?\\\\-\\\\||\" +\n                \"\\\\?\\\\||\\\\?\\\\|\\\\||@|@\\\\-@|@>|@@|@@@|\\\\^|\\\\||\\\\|\\\\&>|\\\\|/|\\\\|>>|\\\\|\\\\||\\\\|\\\\|/|~|~\\\\*|~<=~|~<~|\" +\n                \"~=|~>=~|~>~|~~|~~\\\\*\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"[\\\\(]\"\n        }, {\n            token: \"paren.rparen\",\n            regex: \"[\\\\)]\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }\n    ];\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"--.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"keyword.statementBegin\",\n                regex: \"^[a-zA-Z]+\",\n                next: \"statement\"\n            }, {\n                token: \"support.buildin\",\n                regex: \"^\\\\\\\\[\\\\S]+.*$\"\n            }\n        ],\n        \"statement\": [{\n                token: \"comment\",\n                regex: \"--.*$\"\n            }, {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"commentStatement\"\n            }, {\n                token: \"statementEnd\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\$json\\\\$\",\n                next: \"json-start\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\$[\\\\w_0-9]*\\\\$$\",\n                next: \"dollarSql\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next: \"dollarStatementString\"\n            }\n        ].concat(sqlRules),\n        \"dollarSql\": [{\n                token: \"comment\",\n                regex: \"--.*$\"\n            }, {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"commentDollarSql\"\n            }, {\n                token: \"string\",\n                regex: \"^\\\\$[\\\\w_0-9]*\\\\$\",\n                next: \"statement\"\n            }, {\n                token: \"string\",\n                regex: \"\\\\$[\\\\w_0-9]*\\\\$\",\n                next: \"dollarSqlString\"\n            }\n        ].concat(sqlRules),\n        \"comment\": [{\n                token: \"comment\",\n                regex: \".*?\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \".+\"\n            }\n        ],\n        \"commentStatement\": [{\n                token: \"comment\",\n                regex: \".*?\\\\*\\\\/\",\n                next: \"statement\"\n            }, {\n                token: \"comment\",\n                regex: \".+\"\n            }\n        ],\n        \"commentDollarSql\": [{\n                token: \"comment\",\n                regex: \".*?\\\\*\\\\/\",\n                next: \"dollarSql\"\n            }, {\n                token: \"comment\",\n                regex: \".+\"\n            }\n        ],\n        \"dollarStatementString\": [{\n                token: \"string\",\n                regex: \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next: \"statement\"\n            }, {\n                token: \"string\",\n                regex: \".+\"\n            }\n        ],\n        \"dollarSqlString\": [{\n                token: \"string\",\n                regex: \".*?\\\\$[\\\\w_0-9]*\\\\$\",\n                next: \"dollarSql\"\n            }, {\n                token: \"string\",\n                regex: \".+\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.embedRules(JsonHighlightRules, \"json-\", [{ token: \"string\", regex: \"\\\\$json\\\\$\", next: \"statement\" }]);\n};\noop.inherits(RedshiftHighlightRules, TextHighlightRules);\nexports.RedshiftHighlightRules = RedshiftHighlightRules;\n\n});\n\nace.define(\"ace/mode/redshift\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/redshift_highlight_rules\",\"ace/range\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar TextMode = require(\"../mode/text\").Mode;\nvar RedshiftHighlightRules = require(\"./redshift_highlight_rules\").RedshiftHighlightRules;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n    this.HighlightRules = RedshiftHighlightRules;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        if (state == \"start\" || state == \"keyword.statementEnd\") {\n            return \"\";\n        }\n        else {\n            return this.$getIndent(line); // Keep whatever indent the previous line has\n        }\n    };\n    this.$id = \"ace/mode/redshift\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/redshift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-rhtml.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n * tex_highlight_rules.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TexHighlightRules = function (textClass) {\n    if (!textClass)\n        textClass = \"text\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"%.*$\"\n            }, {\n                token: textClass,\n                regex: \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",\n                next: \"nospell\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: textClass,\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"nospell\": [\n            {\n                token: \"comment\",\n                regex: \"%.*$\",\n                next: \"start\"\n            }, {\n                token: \"nospell.\" + textClass,\n                regex: \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n                next: \"start\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[\\\\])]\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"}\",\n                next: \"start\"\n            }, {\n                token: \"nospell.\" + textClass,\n                regex: \"\\\\s+\"\n            }, {\n                token: \"nospell.\" + textClass,\n                regex: \"\\\\w+\"\n            }\n        ]\n    };\n};\noop.inherits(TexHighlightRules, TextHighlightRules);\nexports.TexHighlightRules = TexHighlightRules;\n\n});\n\nace.define(\"ace/mode/r_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\"], function(require, exports, module){/*\n * r_highlight_rules.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TexHighlightRules = require(\"./tex_highlight_rules\").TexHighlightRules;\nvar RHighlightRules = function () {\n    var keywords = lang.arrayToMap((\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\")\n        .split(\"|\"));\n    var buildinConstants = lang.arrayToMap((\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|\" +\n        \"NA_complex_\").split(\"|\"));\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.sectionhead\",\n                regex: \"#+(?!').*(?:----|====|####)\\\\s*$\"\n            },\n            {\n                token: \"comment\",\n                regex: \"#+'\",\n                next: \"rd-start\"\n            },\n            {\n                token: \"comment\",\n                regex: \"#.*$\"\n            },\n            {\n                token: \"string\",\n                regex: '[\"]',\n                next: \"qqstring\"\n            },\n            {\n                token: \"string\",\n                regex: \"[']\",\n                next: \"qstring\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+[Li]?\\\\b\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"\\\\d+L\\\\b\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"\n            },\n            {\n                token: \"constant.language.boolean\",\n                regex: \"(?:TRUE|FALSE|T|F)\\\\b\"\n            },\n            {\n                token: \"identifier\",\n                regex: \"`.*?`\"\n            },\n            {\n                onMatch: function (value) {\n                    if (keywords[value])\n                        return \"keyword\";\n                    else if (buildinConstants[value])\n                        return \"constant.language\";\n                    else if (value == '...' || value.match(/^\\.\\.\\d+$/))\n                        return \"variable.language\";\n                    else\n                        return \"identifier\";\n                },\n                regex: \"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"\n            },\n            {\n                token: \"keyword.operator\",\n                regex: \"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"\n            },\n            {\n                token: \"keyword.operator\",\n                regex: \"%.*?%\"\n            },\n            {\n                token: \"paren.keyword.operator\",\n                regex: \"[[({]\"\n            },\n            {\n                token: \"paren.keyword.operator\",\n                regex: \"[\\\\])}]\"\n            },\n            {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next: \"start\"\n            },\n            {\n                token: \"string\",\n                regex: '.+'\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next: \"start\"\n            },\n            {\n                token: \"string\",\n                regex: '.+'\n            }\n        ]\n    };\n    var rdRules = new TexHighlightRules(\"comment\").getRules();\n    for (var i = 0; i < rdRules[\"start\"].length; i++) {\n        rdRules[\"start\"][i].token += \".virtual-comment\";\n    }\n    this.addRules(rdRules, \"rd-\");\n    this.$rules[\"rd-start\"].unshift({\n        token: \"text\",\n        regex: \"^\",\n        next: \"start\"\n    });\n    this.$rules[\"rd-start\"].unshift({\n        token: \"keyword\",\n        regex: \"@(?!@)[^ ]*\"\n    });\n    this.$rules[\"rd-start\"].unshift({\n        token: \"comment\",\n        regex: \"@@\"\n    });\n    this.$rules[\"rd-start\"].push({\n        token: \"comment\",\n        regex: \"[^%\\\\\\\\[({\\\\])}]+\"\n    });\n};\noop.inherits(RHighlightRules, TextHighlightRules);\nexports.RHighlightRules = RHighlightRules;\n\n});\n\nace.define(\"ace/mode/rhtml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/r_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n * rhtml_highlight_rules.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar RHighlightRules = require(\"./r_highlight_rules\").RHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar RHtmlHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    this.$rules[\"start\"].unshift({\n        token: \"support.function.codebegin\",\n        regex: \"^<\" + \"!--\\\\s*begin.rcode\\\\s*(?:.*)\",\n        next: \"r-start\"\n    });\n    this.embedRules(RHighlightRules, \"r-\", [{\n            token: \"support.function.codeend\",\n            regex: \"^\\\\s*end.rcode\\\\s*-->\",\n            next: \"start\"\n        }], [\"start\"]);\n    this.normalizeRules();\n};\noop.inherits(RHtmlHighlightRules, TextHighlightRules);\nexports.RHtmlHighlightRules = RHtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/rhtml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/rhtml_highlight_rules\"], function(require, exports, module){/*\n * rhtml.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar RHtmlHighlightRules = require(\"./rhtml_highlight_rules\").RHtmlHighlightRules;\nvar Mode = function (doc, session) {\n    HtmlMode.call(this);\n    this.$session = session;\n    this.HighlightRules = RHtmlHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.insertChunkInfo = {\n        value: \"<!--begin.rcode\\n\\nend.rcode-->\\n\",\n        position: { row: 0, column: 15 }\n    };\n    this.getLanguageMode = function (position) {\n        return this.$session.getState(position.row).match(/^r-/) ? 'R' : 'HTML';\n    };\n    this.$id = \"ace/mode/rhtml\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/rhtml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-robot.js",
    "content": "ace.define(\"ace/mode/robot_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){'use strict';\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar RobotHighlightRules = function () {\n    var builtinConstantsRegex = new RegExp(/\\$\\{CURDIR\\}|\\$\\{TEMPDIR\\}|\\$\\{EXECDIR\\}|\\$\\{\\/\\}|\\$\\{\\:\\}|\\$\\{\\\\n\\}|\\$\\{true\\}|\\$\\{false\\}|\\$\\{none\\}|\\$\\{null\\}|\\$\\{space(?:\\s*\\*\\s+[0-9]+)?\\}|\\$\\{empty\\}|&\\{empty\\}|@\\{empty\\}|\\$\\{TEST NAME\\}|@\\{TEST[\\s_]TAGS\\}|\\$\\{TEST[\\s_]DOCUMENTATION\\}|\\$\\{TEST[\\s_]STATUS\\}|\\$\\{TEST[\\s_]MESSAGE\\}|\\$\\{PREV[\\s_]TEST[\\s_]NAME\\}|\\$\\{PREV[\\s_]TEST[\\s_]STATUS\\}|\\$\\{PREV[\\s_]TEST[\\s_]MESSAGE\\}|\\$\\{SUITE[\\s_]NAME\\}|\\$\\{SUITE[\\s_]SOURCE\\}|\\$\\{SUITE[\\s_]DOCUMENTATION\\}|&\\{SUITE[\\s_]METADATA\\}|\\$\\{SUITE[\\s_]STATUS\\}|\\$\\{SUITE[\\s_]MESSAGE\\}|\\$\\{KEYWORD[\\s_]STATUS\\}|\\$\\{KEYWORD[\\s_]MESSAGE\\}|\\$\\{LOG[\\s_]LEVEL\\}|\\$\\{OUTPUT[\\s_]FILE\\}|\\$\\{LOG[\\s_]FILE\\}|\\$\\{REPORT[\\s_]FILE\\}|\\$\\{DEBUG[\\s_]FILE\\}|\\$\\{OUTPUT[\\s_]DIR\\}/);\n    this.$rules = {\n        \"start\": [{\n                token: \"string.robot.header\",\n                regex: /^\\*{3}\\s+(?:settings?|metadata|(?:user )?keywords?|test ?cases?|tasks?|variables?)/,\n                caseInsensitive: true,\n                push: [{\n                        token: \"string.robot.header\",\n                        regex: /$/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string.robot.header\"\n                    }],\n                comment: \"start of a table\"\n            }, {\n                token: \"comment.robot\",\n                regex: /(?:^|\\s{2,}|\\t|\\|\\s{1,})(?=[^\\\\])#/,\n                push: [{\n                        token: \"comment.robot\",\n                        regex: /$/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment.robot\"\n                    }]\n            }, {\n                token: \"comment\",\n                regex: /^\\s*\\[?Documentation\\]?/,\n                caseInsensitive: true,\n                push: [{\n                        token: \"comment\",\n                        regex: /^(?!\\s*\\.\\.\\.)/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }, {\n                token: \"storage.type.method.robot\",\n                regex: /\\[(?:Arguments|Setup|Teardown|Precondition|Postcondition|Template|Return|Timeout)\\]/,\n                caseInsensitive: true,\n                comment: \"testcase settings\"\n            }, {\n                token: \"storage.type.method.robot\",\n                regex: /\\[Tags\\]/,\n                caseInsensitive: true,\n                push: [{\n                        token: \"storage.type.method.robot\",\n                        regex: /^(?!\\s*\\.\\.\\.)/,\n                        next: \"pop\"\n                    }, {\n                        token: \"comment\",\n                        regex: /^\\s*\\.\\.\\./\n                    }, {\n                        defaultToken: \"storage.type.method.robot\"\n                    }],\n                comment: \"test tags\"\n            }, {\n                token: \"constant.language\",\n                regex: builtinConstantsRegex,\n                caseInsensitive: true\n            }, {\n                token: \"entity.name.variable.wrapper\",\n                regex: /[$@&%]\\{\\{?/,\n                push: [{\n                        token: \"entity.name.variable.wrapper\",\n                        regex: /\\}\\}?(\\s?=)?/,\n                        next: \"pop\"\n                    }, {\n                        include: \"$self\"\n                    }, {\n                        token: \"entity.name.variable\",\n                        regex: /./\n                    }, {\n                        defaultToken: \"entity.name.variable\"\n                    }]\n            }, {\n                token: \"keyword.control.robot\",\n                regex: /^[^\\s\\t*$|]+|(?=^\\|)\\s+[^\\s\\t*$|]+/,\n                push: [{\n                        token: \"keyword.control.robot\",\n                        regex: /(?=\\s{2})|\\t|$|\\s+(?=\\|)/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"keyword.control.robot\"\n                    }]\n            }, {\n                token: \"constant.numeric.robot\",\n                regex: /\\b[0-9]+(?:\\.[0-9]+)?\\b/\n            }, {\n                token: \"keyword\",\n                regex: /\\s{2,}(for|in range|in|end|else if|if|else|with name)(\\s{2,}|$)/,\n                caseInsensitive: true\n            }, {\n                token: \"storage.type.function\",\n                regex: /^(?:\\s{2,}\\s+)[^ \\t*$@&%[.|]+/,\n                push: [{\n                        token: \"storage.type.function\",\n                        regex: /(?=\\s{2})|\\t|$|\\s+(?=\\|)/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"storage.type.function\"\n                    }]\n            }]\n    };\n    this.normalizeRules();\n};\nRobotHighlightRules.metadata = {\n    fileTypes: ['robot'],\n    name: 'Robot',\n    scopeName: 'source.robot'\n};\noop.inherits(RobotHighlightRules, TextHighlightRules);\nexports.RobotHighlightRules = RobotHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (markers) {\n    this.foldingStartMarker = new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\" + markers + \")(?:\\\\s*)(?:#.*)?$\");\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, match.index);\n            if (match[2])\n                return this.indentationBlock(session, row, match.index + match[2].length);\n            return this.indentationBlock(session, row);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/robot\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/robot_highlight_rules\",\"ace/mode/folding/pythonic\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RobotHighlightRules = require(\"./robot_highlight_rules\").RobotHighlightRules;\nvar FoldMode = require(\"./folding/pythonic\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = RobotHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/robot\";\n    this.snippetFileId = \"ace/snippets/robot\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/robot\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-rst.js",
    "content": "ace.define(\"ace/mode/rst_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar RSTHighlightRules = function () {\n    var tokens = {\n        title: \"markup.heading\",\n        list: \"markup.heading\",\n        table: \"constant\",\n        directive: \"keyword.operator\",\n        entity: \"string\",\n        link: \"markup.underline.list\",\n        bold: \"markup.bold\",\n        italic: \"markup.italic\",\n        literal: \"support.function\",\n        comment: \"comment\"\n    };\n    var startStringPrefix = \"(^|\\\\s|[\\\"'(<\\\\[{\\\\-/:])\";\n    var endStringSuffix = \"(?:$|(?=\\\\s|[\\\\\\\\.,;!?\\\\-/:\\\"')>\\\\]}]))\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: tokens.title,\n                regex: \"(^)([\\\\=\\\\-`:\\\\.'\\\"~\\\\^_\\\\*\\\\+#])(\\\\2{2,}\\\\s*$)\"\n            },\n            {\n                token: [\"text\", tokens.directive, tokens.literal],\n                regex: \"(^\\\\s*\\\\.\\\\. )([^: ]+::)(.*$)\",\n                next: \"codeblock\"\n            },\n            {\n                token: tokens.directive,\n                regex: \"::$\",\n                next: \"codeblock\"\n            },\n            {\n                token: [tokens.entity, tokens.link],\n                regex: \"(^\\\\.\\\\. _[^:]+:)(.*$)\"\n            },\n            {\n                token: [tokens.entity, tokens.link],\n                regex: \"(^__ )(https?://.*$)\"\n            },\n            {\n                token: tokens.entity,\n                regex: \"^\\\\.\\\\. \\\\[[^\\\\]]+\\\\] \"\n            },\n            {\n                token: tokens.comment,\n                regex: \"^\\\\.\\\\. .*$\",\n                next: \"comment\"\n            },\n            {\n                token: tokens.list,\n                regex: \"^\\\\s*[\\\\*\\\\+-] \"\n            },\n            {\n                token: tokens.list,\n                regex: \"^\\\\s*(?:[A-Za-z]|[0-9]+|[ivxlcdmIVXLCDM]+)\\\\. \"\n            },\n            {\n                token: tokens.list,\n                regex: \"^\\\\s*\\\\(?(?:[A-Za-z]|[0-9]+|[ivxlcdmIVXLCDM]+)\\\\) \"\n            },\n            {\n                token: tokens.table,\n                regex: \"^={2,}(?: +={2,})+$\"\n            },\n            {\n                token: tokens.table,\n                regex: \"^\\\\+-{2,}(?:\\\\+-{2,})+\\\\+$\"\n            },\n            {\n                token: tokens.table,\n                regex: \"^\\\\+={2,}(?:\\\\+={2,})+\\\\+$\"\n            },\n            {\n                token: [\"text\", tokens.literal],\n                regex: startStringPrefix + \"(``)(?=\\\\S)\",\n                next: \"code\"\n            },\n            {\n                token: [\"text\", tokens.bold],\n                regex: startStringPrefix + \"(\\\\*\\\\*)(?=\\\\S)\",\n                next: \"bold\"\n            },\n            {\n                token: [\"text\", tokens.italic],\n                regex: startStringPrefix + \"(\\\\*)(?=\\\\S)\",\n                next: \"italic\"\n            },\n            {\n                token: tokens.entity,\n                regex: \"\\\\|[\\\\w\\\\-]+?\\\\|\"\n            },\n            {\n                token: tokens.entity,\n                regex: \":[\\\\w-:]+:`\\\\S\",\n                next: \"entity\"\n            },\n            {\n                token: [\"text\", tokens.entity],\n                regex: startStringPrefix + \"(_`)(?=\\\\S)\",\n                next: \"entity\"\n            },\n            {\n                token: tokens.entity,\n                regex: \"_[A-Za-z0-9\\\\-]+?\"\n            },\n            {\n                token: [\"text\", tokens.link],\n                regex: startStringPrefix + \"(`)(?=\\\\S)\",\n                next: \"link\"\n            },\n            {\n                token: tokens.link,\n                regex: \"[A-Za-z0-9\\\\-]+?__?\"\n            },\n            {\n                token: tokens.link,\n                regex: \"\\\\[[^\\\\]]+?\\\\]_\"\n            },\n            {\n                token: tokens.link,\n                regex: \"https?://\\\\S+\"\n            },\n            {\n                token: tokens.table,\n                regex: \"\\\\|\"\n            }\n        ],\n        \"codeblock\": [\n            {\n                token: tokens.literal,\n                regex: \"^ +.+$\",\n                next: \"codeblock\"\n            },\n            {\n                token: tokens.literal,\n                regex: '^$',\n                next: \"codeblock\"\n            },\n            {\n                token: \"empty\",\n                regex: \"\",\n                next: \"start\"\n            }\n        ],\n        \"code\": [\n            {\n                token: tokens.literal,\n                regex: \"\\\\S``\" + endStringSuffix,\n                next: \"start\"\n            },\n            {\n                defaultToken: tokens.literal\n            }\n        ],\n        \"bold\": [\n            {\n                token: tokens.bold,\n                regex: \"\\\\S\\\\*\\\\*\" + endStringSuffix,\n                next: \"start\"\n            },\n            {\n                defaultToken: tokens.bold\n            }\n        ],\n        \"italic\": [\n            {\n                token: tokens.italic,\n                regex: \"\\\\S\\\\*\" + endStringSuffix,\n                next: \"start\"\n            },\n            {\n                defaultToken: tokens.italic\n            }\n        ],\n        \"entity\": [\n            {\n                token: tokens.entity,\n                regex: \"\\\\S`\" + endStringSuffix,\n                next: \"start\"\n            },\n            {\n                defaultToken: tokens.entity\n            }\n        ],\n        \"link\": [\n            {\n                token: tokens.link,\n                regex: \"\\\\S`__?\" + endStringSuffix,\n                next: \"start\"\n            },\n            {\n                defaultToken: tokens.link\n            }\n        ],\n        \"comment\": [\n            {\n                token: tokens.comment,\n                regex: \"^ +.+$\",\n                next: \"comment\"\n            },\n            {\n                token: tokens.comment,\n                regex: '^$',\n                next: \"comment\"\n            },\n            {\n                token: \"empty\",\n                regex: \"\",\n                next: \"start\"\n            }\n        ]\n    };\n};\noop.inherits(RSTHighlightRules, TextHighlightRules);\nexports.RSTHighlightRules = RSTHighlightRules;\n\n});\n\nace.define(\"ace/mode/rst\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rst_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RSTHighlightRules = require(\"./rst_highlight_rules\").RSTHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = RSTHighlightRules;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.type = \"text\";\n    this.$id = \"ace/mode/rst\";\n    this.snippetFileId = \"ace/snippets/rst\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/rst\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-ruby.js",
    "content": "ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token: \"constant.other.symbol.ruby\",\n    regex: \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\nexports.qString = {\n    token: \"string\",\n    regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\nexports.qqString = {\n    token: \"string\",\n    regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\nexports.tString = {\n    token: \"string\",\n    regex: \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\nvar constantNumericHex = exports.constantNumericHex = {\n    token: \"constant.numeric\",\n    regex: \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\nvar constantNumericBinary = exports.constantNumericBinary = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[bB][01](?:[01]|_(?=[01]))*)\\b/\n};\nvar constantNumericDecimal = exports.constantNumericDecimal = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[dD](?:[1-9](?:[\\d]|_(?=[\\d]))*|0))\\b/\n};\nvar constantNumericOctal = exports.constantNumericDecimal = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[oO]?(?:[1-7](?:[0-7]|_(?=[0-7]))*|0))\\b/\n};\nvar constantNumericRational = exports.constantNumericRational = {\n    token: \"constant.numeric\",\n    regex: /\\b([\\d]+(?:[./][\\d]+)?ri?)\\b/\n};\nvar constantNumericComplex = exports.constantNumericComplex = {\n    token: \"constant.numeric\",\n    regex: /\\b([\\d]i)\\b/\n};\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token: \"constant.numeric\",\n    regex: \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?i?\\\\b\"\n};\nvar instanceVariable = exports.instanceVariable = {\n    token: \"variable.instance\",\n    regex: \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\nvar RubyHighlightRules = function () {\n    var builtinFunctions = (\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many|p|warn|refine|using|module_function|extend|alias_method|\" +\n        \"private_class_method|remove_method|undef_method\");\n    var keywords = (\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|__ENCODING__|prepend\");\n    var buildinConstants = (\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING|RUBY_PATCHLEVEL|RUBY_REVISION|RUBY_COPYRIGHT|RUBY_ENGINE|RUBY_ENGINE_VERSION|RUBY_DESCRIPTION\");\n    var builtinVariables = (\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n    var escapedChars = \"\\\\\\\\(?:n(?:[1-7][0-7]{0,2}|0)|[nsrtvfbae'\\\"\\\\\\\\]|c(?:\\\\\\\\M-)?.|M-(?:\\\\\\\\C-|\\\\\\\\c)?.|C-(?:\\\\\\\\M-)?.|[0-7]{3}|x[\\\\da-fA-F]{2}|u[\\\\da-fA-F]{4}|u{[\\\\da-fA-F]{1,6}(?:\\\\s[\\\\da-fA-F]{1,6})*})\";\n    var closeParen = {\n        \"(\": \")\",\n        \"[\": \"]\",\n        \"{\": \"}\",\n        \"<\": \">\",\n        \"^\": \"^\",\n        \"|\": \"|\",\n        \"%\": \"%\"\n    };\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"comment.multiline\",\n                regex: \"^=begin(?=$|\\\\s.*$)\",\n                next: \"comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: /[/](?=.*\\/)/,\n                next: \"regex\"\n            },\n            [{\n                    token: [\"constant.other.symbol.ruby\", \"string.start\"],\n                    regex: /(:)?(\")/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: escapedChars\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /\"/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: \"string.start\",\n                    regex: /`/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: escapedChars\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /`/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: [\"constant.other.symbol.ruby\", \"string.start\"],\n                    regex: /(:)?(')/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: /\\\\['\\\\]/\n                        }, {\n                            token: \"string.end\",\n                            regex: /'/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: \"string.start\",\n                    regex: /%[qwx]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"qStateWithoutInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"string.start\",\n                    regex: /%[QWX]?([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"qStateWithInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"constant.other.symbol.ruby\",\n                    regex: /%[si]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"sStateWithoutInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"constant.other.symbol.ruby\",\n                    regex: /%[SI]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"sStateWithInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"string.regexp\",\n                    regex: /%[r]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"rState\";\n                        return this.token;\n                    }\n                }],\n            {\n                token: \"punctuation\",\n                regex: \"::\"\n            },\n            instanceVariable,\n            {\n                token: \"variable.global\",\n                regex: \"[$][a-zA-Z_\\\\d]+\"\n            }, {\n                token: \"support.class\",\n                regex: \"[A-Z][a-zA-Z_\\\\d]*\"\n            }, {\n                token: [\"punctuation.operator\", \"support.function\"],\n                regex: /(\\.)([a-zA-Z_\\d]+)(?=\\()/\n            }, {\n                token: [\"punctuation.operator\", \"identifier\"],\n                regex: /(\\.)([a-zA-Z_][a-zA-Z_\\d]*)/\n            }, {\n                token: \"string.character\",\n                regex: \"\\\\B\\\\?(?:\" + escapedChars + \"|\\\\S)\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /\\?(?=.+:)/\n            },\n            constantNumericRational,\n            constantNumericComplex,\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n            constantNumericBinary,\n            constantNumericDecimal,\n            constantNumericOctal,\n            {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"punctuation.separator.key-value\",\n                regex: \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch: function (value, currentState, stack) {\n                    var next = (value[2] == '-' || value[2] == '~') ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        { type: \"constant\", value: tokens[1] },\n                        { type: \"string\", value: tokens[2] },\n                        { type: \"support.class\", value: tokens[3] },\n                        { type: \"string\", value: tokens[4] }\n                    ];\n                },\n                regex: \"(<<[-~]?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }],\n                    indentedHeredoc: [{\n                            token: \"string\",\n                            regex: \"^ +\"\n                        }, {\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }]\n                }\n            }, {\n                regex: \"$\",\n                token: \"empty\",\n                next: function (currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\||\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\",\n                onMatch: function (value, currentState, stack) {\n                    this.next = '';\n                    if (value == \"}\" && stack.length > 1 && stack[1] != \"start\") {\n                        stack.shift();\n                        this.next = stack.shift();\n                    }\n                    return this.token;\n                }\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.multiline\",\n                regex: \"^=end(?=$|\\\\s.*$)\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \".+\"\n            }\n        ],\n        \"qStateWithInterpolation\": [{\n                token: \"string.start\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"string\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapedChars\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"string.end\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"string\";\n                }\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qStateWithoutInterpolation\": [{\n                token: \"string.start\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"string\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\['\\\\]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"string.end\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"string\";\n                }\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"sStateWithoutInterpolation\": [{\n                token: \"constant.other.symbol.ruby\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                token: \"constant.other.symbol.ruby\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                defaultToken: \"constant.other.symbol.ruby\"\n            }],\n        \"sStateWithInterpolation\": [{\n                token: \"constant.other.symbol.ruby\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapedChars\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"constant.other.symbol.ruby\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                defaultToken: \"constant.other.symbol.ruby\"\n            }],\n        \"rState\": [{\n                token: \"string.regexp\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.language.escape\";\n                }\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"string.regexp\",\n                regex: /\\//\n            }, {\n                token: \"string.regexp\",\n                regex: /[)\\]>}^|%][imxouesn]*/, onMatch: function (val, state, stack) {\n                    if (stack.length && val[0] === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.language.escape\";\n                }\n            },\n            { include: \"regex\" },\n            {\n                defaultToken: \"string.regexp\"\n            }],\n        \"regex\": [\n            {\n                token: \"regexp.keyword\",\n                regex: /\\\\[wWdDhHsS]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\[AGbBzZ]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\g<[a-zA-Z0-9]*>/\n            }, {\n                token: [\"constant.language.escape\", \"regexp.keyword\", \"constant.language.escape\"],\n                regex: /(\\\\p{\\^?)(Alnum|Alpha|Blank|Cntrl|Digit|Graph|Lower|Print|Punct|Space|Upper|XDigit|Word|ASCII|Any|Assigned|Arabic|Armenian|Balinese|Bengali|Bopomofo|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Ethiopic|Georgian|Glagolitic|Gothic|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hebrew|Hiragana|Inherited|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Lao|Latin|Lepcha|Limbu|Linear_B|Lycian|Lydian|Malayalam|Mongolian|Myanmar|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Italic|Old_Persian|Oriya|Osmanya|Phags_Pa|Phoenician|Rejang|Runic|Saurashtra|Shavian|Sinhala|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Ugaritic|Vai|Yi|Ll|Lm|Lt|Lu|Lo|Mn|Mc|Me|Nd|Nl|Pc|Pd|Ps|Pe|Pi|Pf|Po|No|Sm|Sc|Sk|So|Zs|Zl|Zp|Cc|Cf|Cn|Co|Cs|N|L|M|P|S|Z|C)(})/\n            }, {\n                token: [\"constant.language.escape\", \"invalid\", \"constant.language.escape\"],\n                regex: /(\\\\p{\\^?)([^/]*)(})/\n            }, {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: /[/][imxouesn]*/,\n                next: \"start\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?(?:[:=!>]|<'?[a-zA-Z]*'?>|<[=!])|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"regexp.keyword\",\n                regex: /\\[\\[:(?:alnum|alpha|blank|cntrl|digit|graph|lower|print|punct|space|upper|xdigit|word|ascii):\\]\\]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                push: \"regex_character_class\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.keyword\",\n                regex: /\\\\[wWdDhHsS]/\n            }, {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: /&?&?\\[\\^?/,\n                push: \"regex_character_class\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                defaultToken: \"string.regexp.characterclass\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(RubyHighlightRules, TextHighlightRules);\nexports.RubyHighlightRules = RubyHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar FoldMode = exports.FoldMode = function () {\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.indentKeywords = {\n        \"class\": 1,\n        \"def\": 1,\n        \"module\": 1,\n        \"do\": 1,\n        \"unless\": 1,\n        \"if\": 1,\n        \"while\": 1,\n        \"for\": 1,\n        \"until\": 1,\n        \"begin\": 1,\n        \"else\": 0,\n        \"elsif\": 0,\n        \"rescue\": 0,\n        \"ensure\": 0,\n        \"when\": 0,\n        \"end\": -1,\n        \"case\": 1,\n        \"=begin\": 1,\n        \"=end\": -1\n    };\n    this.foldingStartMarker = /(?:\\s|^)(def|do|while|class|unless|module|if|for|until|begin|else|elsif|case|rescue|ensure|when)\\b|({\\s*$)|(=begin)/;\n    this.foldingStopMarker = /(=end(?=$|\\s.*$))|(^\\s*})|\\b(end)\\b/;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n        if (isStart && !isEnd) {\n            var match = line.match(this.foldingStartMarker);\n            if (match[1]) {\n                if (match[1] == \"if\" || match[1] == \"else\" || match[1] == \"while\" || match[1] == \"until\" || match[1] == \"unless\") {\n                    if (match[1] == \"else\" && /^\\s*else\\s*$/.test(line) === false) {\n                        return;\n                    }\n                    if (/^\\s*(?:if|else|while|until|unless)\\s*/.test(line) === false) {\n                        return;\n                    }\n                }\n                if (match[1] == \"when\") {\n                    if (/\\sthen\\s/.test(line) === true) {\n                        return;\n                    }\n                }\n                if (session.getTokenAt(row, match.index + 2).type === \"keyword\")\n                    return \"start\";\n            }\n            else if (match[3]) {\n                if (session.getTokenAt(row, match.index + 1).type === \"comment.multiline\")\n                    return \"start\";\n            }\n            else {\n                return \"start\";\n            }\n        }\n        if (foldStyle != \"markbeginend\" || !isEnd || isStart && isEnd)\n            return \"\";\n        var match = line.match(this.foldingStopMarker);\n        if (match[3] === \"end\") {\n            if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                return \"end\";\n        }\n        else if (match[1]) {\n            if (session.getTokenAt(row, match.index + 1).type === \"comment.multiline\")\n                return \"end\";\n        }\n        else\n            return \"end\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1] || match[3])\n                return this.rubyBlock(session, row, match.index + 2);\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[3] === \"end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return this.rubyBlock(session, row, match.index + 1);\n            }\n            if (match[1] === \"=end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"comment.multiline\")\n                    return this.rubyBlock(session, row, match.index + 1);\n            }\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n    this.rubyBlock = function (session, row, column, tokenRange) {\n        var stream = new TokenIterator(session, row, column);\n        var token = stream.getCurrentToken();\n        if (!token || (token.type != \"keyword\" && token.type != \"comment.multiline\"))\n            return;\n        var val = token.value;\n        var line = session.getLine(row);\n        switch (token.value) {\n            case \"if\":\n            case \"unless\":\n            case \"while\":\n            case \"until\":\n                var checkToken = new RegExp(\"^\\\\s*\" + token.value);\n                if (!checkToken.test(line)) {\n                    return;\n                }\n                var dir = this.indentKeywords[val];\n                break;\n            case \"when\":\n                if (/\\sthen\\s/.test(line)) {\n                    return;\n                }\n            case \"elsif\":\n            case \"rescue\":\n            case \"ensure\":\n                var dir = 1;\n                break;\n            case \"else\":\n                var checkToken = new RegExp(\"^\\\\s*\" + token.value + \"\\\\s*$\");\n                if (!checkToken.test(line)) {\n                    return;\n                }\n                var dir = 1;\n                break;\n            default:\n                var dir = this.indentKeywords[val];\n                break;\n        }\n        var stack = [val];\n        if (!dir)\n            return;\n        var startColumn = dir === -1 ? session.getLine(row - 1).length : session.getLine(row).length;\n        var startRow = row;\n        var ranges = [];\n        ranges.push(stream.getCurrentTokenRange());\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        if (token.type == \"comment.multiline\") {\n            while (token = stream.step()) {\n                if (token.type !== \"comment.multiline\")\n                    continue;\n                if (dir == 1) {\n                    startColumn = 6;\n                    if (token.value == \"=end\") {\n                        break;\n                    }\n                }\n                else {\n                    if (token.value == \"=begin\") {\n                        break;\n                    }\n                }\n            }\n        }\n        else {\n            while (token = stream.step()) {\n                var ignore = false;\n                if (token.type !== \"keyword\")\n                    continue;\n                var level = dir * this.indentKeywords[token.value];\n                line = session.getLine(stream.getCurrentTokenRow());\n                switch (token.value) {\n                    case \"do\":\n                        for (var i = stream.$tokenIndex - 1; i >= 0; i--) {\n                            var prevToken = stream.$rowTokens[i];\n                            if (prevToken && (prevToken.value == \"while\" || prevToken.value == \"until\" || prevToken.value == \"for\")) {\n                                level = 0;\n                                break;\n                            }\n                        }\n                        break;\n                    case \"else\":\n                        var checkToken = new RegExp(\"^\\\\s*\" + token.value + \"\\\\s*$\");\n                        if (!checkToken.test(line) || val == \"case\") {\n                            level = 0;\n                            ignore = true;\n                        }\n                        break;\n                    case \"if\":\n                    case \"unless\":\n                    case \"while\":\n                    case \"until\":\n                        var checkToken = new RegExp(\"^\\\\s*\" + token.value);\n                        if (!checkToken.test(line)) {\n                            level = 0;\n                            ignore = true;\n                        }\n                        break;\n                    case \"when\":\n                        if (/\\sthen\\s/.test(line) || val == \"case\") {\n                            level = 0;\n                            ignore = true;\n                        }\n                        break;\n                }\n                if (level > 0) {\n                    stack.unshift(token.value);\n                }\n                else if (level <= 0 && ignore === false) {\n                    stack.shift();\n                    if (!stack.length) {\n                        if ((val == \"while\" || val == \"until\" || val == \"for\") && token.value != \"do\") {\n                            break;\n                        }\n                        if (token.value == \"do\" && dir == -1 && level != 0)\n                            break;\n                        if (token.value != \"do\")\n                            break;\n                    }\n                    if (level === 0) {\n                        stack.unshift(token.value);\n                    }\n                }\n            }\n        }\n        if (!token)\n            return null;\n        if (tokenRange) {\n            ranges.push(stream.getCurrentTokenRange());\n            return ranges;\n        }\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1) {\n            if (token.type === \"comment.multiline\") {\n                var endColumn = 6;\n            }\n            else {\n                var endColumn = session.getLine(row).length;\n            }\n            return new Range(row, endColumn, startRow - 1, startColumn);\n        }\n        else\n            return new Range(startRow, startColumn, row - 1, session.getLine(row - 1).length);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/ruby\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/ruby\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n    this.indentKeywords = this.foldingRules.indentKeywords;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when|elsif|unless|while|for|begin|rescue|ensure)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return /^\\s+(end|else|rescue|ensure)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length - tab.length, row, indent.length));\n        }\n    };\n    this.getMatching = function (session, row, column) {\n        if (row == undefined) {\n            var pos = session.selection.lead;\n            column = pos.column;\n            row = pos.row;\n        }\n        var startToken = session.getTokenAt(row, column);\n        if (startToken && startToken.value in this.indentKeywords)\n            return this.foldingRules.rubyBlock(session, row, column, true);\n    };\n    this.$id = \"ace/mode/ruby\";\n    this.snippetFileId = \"ace/snippets/ruby\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-rust.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/rust_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from https://raw.github.com/dbp/sublime-rust/master/Rust.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar stringEscape = /\\\\(?:[nrt0'\"\\\\]|x[\\da-fA-F]{2}|u\\{[\\da-fA-F]{6}\\})/.source;\nvar wordPattern = /[a-zA-Z_\\xa1-\\uffff][a-zA-Z0-9_\\xa1-\\uffff]*/.source;\nvar RustHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.source.rust\": \"abstract|alignof|as|async|await|become|box|break|catch|continue|const|crate|\"\n            + \"default|do|dyn|else|enum|extern|for|final|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|\"\n            + \"override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|\"\n            + \"unsafe|unsized|use|virtual|where|while|yield|try\",\n        \"storage.type.source.rust\": \"Self|isize|usize|char|bool|u8|u16|u32|u64|u128|f16|f32|f64|i8|i16|i32|i64|\"\n            + \"i128|str|option|either|c_float|c_double|c_void|FILE|fpos_t|DIR|dirent|c_char|c_schar|c_uchar|c_short|\"\n            + \"c_ushort|c_int|c_uint|c_long|c_ulong|size_t|ptrdiff_t|clock_t|time_t|c_longlong|c_ulonglong|intptr_t|\"\n            + \"uintptr_t|off_t|dev_t|ino_t|pid_t|mode_t|ssize_t\",\n        \"constant.language.source.rust\": \"true|false|Some|None|Ok|Err|FALSE|TRUE\",\n        \"support.constant.source.rust\": \"EXIT_FAILURE|EXIT_SUCCESS|RAND_MAX|EOF|SEEK_SET|SEEK_CUR|SEEK_END|_IOFBF|\"\n            + \"_IONBF|_IOLBF|\"\n            + \"BUFSIZ|FOPEN_MAX|FILENAME_MAX|L_tmpnam|TMP_MAX|O_RDONLY|O_WRONLY|O_RDWR|O_APPEND|O_CREAT|O_EXCL|O_TRUNC|\"\n            + \"S_IFIFO|S_IFCHR|S_IFBLK|S_IFDIR|S_IFREG|S_IFMT|S_IEXEC|S_IWRITE|S_IREAD|S_IRWXU|S_IXUSR|S_IWUSR|S_IRUSR|\"\n            + \"F_OK|R_OK|W_OK|X_OK|STDIN_FILENO|STDOUT_FILENO|STDERR_FILENO\",\n        \"constant.language\": \"macro_rules|mac_variant\"\n    }, \"identifier\");\n    this.$rules = {\n        start: [\n            {\n                token: 'variable.other.source.rust',\n                regex: '\\'' + wordPattern + '(?![\\\\\\'])'\n            }, {\n                token: 'string.quoted.single.source.rust',\n                regex: \"'(?:[^'\\\\\\\\]|\" + stringEscape + \")'\"\n            }, {\n                token: 'identifier',\n                regex: \"r#\" + wordPattern + \"\\\\b\"\n            }, {\n                stateName: \"bracketedComment\",\n                onMatch: function (value, currentState, stack) {\n                    stack.unshift(this.next, value.length - 1, currentState);\n                    return \"string.quoted.raw.source.rust\";\n                },\n                regex: /r#*\"/,\n                next: [\n                    {\n                        onMatch: function (value, currentState, stack) {\n                            var token = \"string.quoted.raw.source.rust\";\n                            if (value.length >= stack[1]) {\n                                if (value.length > stack[1])\n                                    token = \"invalid\";\n                                stack.shift();\n                                stack.shift();\n                                this.next = stack.shift();\n                            }\n                            else {\n                                this.next = \"\";\n                            }\n                            return token;\n                        },\n                        regex: /\"#*/,\n                        next: \"start\"\n                    }, {\n                        defaultToken: \"string.quoted.raw.source.rust\"\n                    }\n                ]\n            }, {\n                token: 'string.quoted.double.source.rust',\n                regex: '\"',\n                push: [\n                    {\n                        token: 'string.quoted.double.source.rust',\n                        regex: '\"',\n                        next: 'pop'\n                    }, {\n                        token: 'constant.character.escape.source.rust',\n                        regex: stringEscape\n                    }, { defaultToken: 'string.quoted.double.source.rust' }\n                ]\n            }, {\n                token: ['keyword.source.rust', 'text', 'entity.name.function.source.rust', 'punctuation'],\n                regex: '\\\\b(fn)(\\\\s+)((?:r#)?' + wordPattern + ')(<)',\n                push: \"generics\"\n            }, {\n                token: ['keyword.source.rust', 'text', 'entity.name.function.source.rust'],\n                regex: '\\\\b(fn)(\\\\s+)((?:r#)?' + wordPattern + ')'\n            }, {\n                token: ['support.constant', \"punctuation\"],\n                regex: \"(\" + wordPattern + '::)(<)',\n                push: \"generics\"\n            }, {\n                token: 'support.constant',\n                regex: wordPattern + '::'\n            }, {\n                token: 'variable.language.source.rust',\n                regex: '\\\\bself\\\\b'\n            }, DocCommentHighlightRules.getStartRule(\"doc-start\"), {\n                token: 'comment.line.doc.source.rust',\n                regex: '///.*$'\n            }, {\n                token: 'comment.line.doc.source.rust',\n                regex: '//!.*$'\n            }, {\n                token: 'comment.line.double-dash.source.rust',\n                regex: '//.*$'\n            }, {\n                token: 'comment.start.block.source.rust',\n                regex: '/\\\\*',\n                stateName: 'comment',\n                push: [\n                    {\n                        token: 'comment.start.block.source.rust',\n                        regex: '/\\\\*',\n                        push: 'comment'\n                    }, {\n                        token: 'comment.end.block.source.rust',\n                        regex: '\\\\*/',\n                        next: 'pop'\n                    }, { defaultToken: 'comment.block.source.rust' }\n                ]\n            }, {\n                token: [\"keyword.source.rust\", \"identifier\", \"punctuaction\"],\n                regex: \"(?:(impl)|(\" + wordPattern + \"))(<)\",\n                stateName: 'generics',\n                push: [\n                    {\n                        token: \"punctuaction\",\n                        regex: \"<\",\n                        push: \"generics\"\n                    }, {\n                        token: 'variable.other.source.rust',\n                        regex: '\\'' + wordPattern + '(?![\\\\\\'])'\n                    }, {\n                        token: \"storage.type.source.rust\",\n                        regex: \"\\\\b(u8|u16|u32|u64|u128|usize|i8|i16|i32|i64|i128|isize|char|bool)\\\\b\"\n                    }, {\n                        token: \"punctuation.operator\",\n                        regex: \"[,:]\"\n                    }, {\n                        token: \"keyword\",\n                        regex: \"\\\\b(?:const|dyn)\\\\b\"\n                    }, {\n                        token: \"punctuation\",\n                        regex: \">\",\n                        next: \"pop\"\n                    }, {\n                        token: \"paren.lparen\",\n                        regex: \"[(]\"\n                    }, {\n                        token: \"paren.rparen\",\n                        regex: \"[)]\"\n                    }, {\n                        token: \"identifier\",\n                        regex: \"\\\\b\" + wordPattern + \"\\\\b\"\n                    }, {\n                        token: 'keyword.operator',\n                        regex: \"=\"\n                    }\n                ]\n            }, {\n                token: keywordMapper,\n                regex: wordPattern\n            }, {\n                token: 'keyword.operator',\n                regex: /\\$|[-=]>|[-+%^=!&|<>]=?|[*/](?![*/])=?/\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: 'meta.preprocessor.source.rust',\n                regex: '\\\\b\\\\w\\\\(\\\\w\\\\)*!|#\\\\[[\\\\w=\\\\(\\\\)_]+\\\\]\\\\b'\n            }, {\n                token: 'constant.numeric.source.rust',\n                regex: /\\b(?:0x[a-fA-F0-9_]+|0o[0-7_]+|0b[01_]+|[0-9][0-9_]*(?!\\.))(?:[iu](?:size|8|16|32|64|128))?\\b/\n            }, {\n                token: 'constant.numeric.source.rust',\n                regex: /\\b(?:[0-9][0-9_]*)(?:\\.[0-9][0-9_]*)?(?:[Ee][+-][0-9][0-9_]*)?(?:f32|f64)?\\b/\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\nRustHighlightRules.metaData = { fileTypes: ['rs', 'rc'],\n    foldingStartMarker: '^.*\\\\bfn\\\\s*(\\\\w+\\\\s*)?\\\\([^\\\\)]*\\\\)(\\\\s*\\\\{[^\\\\}]*)?\\\\s*$',\n    foldingStopMarker: '^\\\\s*\\\\}',\n    name: 'Rust',\n    scopeName: 'source.rust' };\noop.inherits(RustHighlightRules, TextHighlightRules);\nexports.RustHighlightRules = RustHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/rust\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rust_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RustHighlightRules = require(\"./rust_highlight_rules\").RustHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = RustHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\", nestable: true };\n    this.$quotes = { '\"': '\"' };\n    this.$id = \"ace/mode/rust\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/rust\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-sac.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/sac_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar sacHighlightRules = function () {\n    var keywordControls = (\"break|continue|do|else|for|if|\" +\n        \"return|with|while|use|class|all|void\");\n    var storageType = (\"bool|char|complex|double|float|\" +\n        \"byte|int|short|long|longlong|\" +\n        \"ubyte|uint|ushort|ulong|ulonglong|\" +\n        \"struct|typedef\");\n    var storageModifiers = (\"inline|external|specialize\");\n    var keywordOperators = (\"step|width\");\n    var builtinConstants = (\"true|false\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword.control\": keywordControls,\n        \"storage.type\": storageType,\n        \"storage.modifier\": storageModifiers,\n        \"keyword.operator\": keywordOperators,\n        \"constant.language\": builtinConstants\n    }, \"identifier\");\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    var escapeRe = /\\\\(?:['\"?\\\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\\d]{2}|u[a-fA-F\\d]{4}U[a-fA-F\\d]{8}|.)/.source;\n    var formatRe = \"%\"\n        + /(\\d+\\$)?/.source // field (argument #)\n        + /[#0\\- +']*/.source // flags\n        + /[,;:_]?/.source // separator character (AltiVec)\n        + /((-?\\d+)|\\*(-?\\d+\\$)?)?/.source // minimum field width\n        + /(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?/.source // precision\n        + /(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source // length modifier\n        + /(\\[[^\"\\]]+\\]|[diouxXDOUeEfFgGaACcSspn%])/.source; // conversion type\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"//$\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \"//\",\n                next: \"singleLineComment\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: \"'(?:\" + escapeRe + \"|.)?'\"\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                stateName: \"qqstring\",\n                next: [\n                    { token: \"string\", regex: /\\\\\\s*$/, next: \"qqstring\" },\n                    { token: \"constant.language.escape\", regex: escapeRe },\n                    { token: \"constant.language.escape\", regex: formatRe },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"string.start\",\n                regex: 'R\"\\\\(',\n                stateName: \"rawString\",\n                next: [\n                    { token: \"string.end\", regex: '\\\\)\"', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",\n                next: \"directive\"\n            }, {\n                token: \"keyword\",\n                regex: \"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"\n            }, {\n                token: \"support.function\",\n                regex: \"fold|foldfix|genarray|modarray|propagate\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|<<=|>>=|>>>=|<>|&&|\\|\\||\\?:|[*%\\/+\\-&\\^|~!<>=]=?/\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"singleLineComment\": [\n            {\n                token: \"comment\",\n                regex: /\\\\$/,\n                next: \"singleLineComment\"\n            }, {\n                token: \"comment\",\n                regex: /$/,\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"directive\": [\n            {\n                token: \"constant.other.multiline\",\n                regex: /\\\\/\n            },\n            {\n                token: \"constant.other.multiline\",\n                regex: /.*\\\\/\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*<.+?>\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: '\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: \"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",\n                next: \"start\"\n            },\n            {\n                token: \"constant.other\",\n                regex: /[^\\\\\\/]+/,\n                next: \"start\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(sacHighlightRules, TextHighlightRules);\nexports.sacHighlightRules = sacHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sac\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sac_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SaCHighlightRules = require(\"./sac_highlight_rules\").sacHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = SaCHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/sac\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/sac\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-sass.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\nvar ScssHighlightRules = function () {\n    var properties = lang.arrayToMap(CssHighlightRules.supportType.split(\"|\"));\n    var functions = lang.arrayToMap((\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n        \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" +\n        \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" +\n        \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n        \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\"));\n    var constants = lang.arrayToMap(CssHighlightRules.supportConstant.split(\"|\"));\n    var colors = lang.arrayToMap(CssHighlightRules.supportConstantColor.split(\"|\"));\n    var keywords = lang.arrayToMap((\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\"));\n    var tags = lang.arrayToMap((\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" +\n        \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" +\n        \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" +\n        \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" +\n        \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" +\n        \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" +\n        \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" +\n        \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" +\n        \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\"));\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: '[\"].*\\\\\\\\$',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"string\",\n                regex: \"['].*\\\\\\\\$\",\n                next: \"qstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe + \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: [\"support.function\", \"string\", \"support.function\"],\n                regex: \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token: function (value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex: \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable\",\n                regex: \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ]\n    };\n};\noop.inherits(ScssHighlightRules, TextHighlightRules);\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\nace.define(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar SassHighlightRules = function () {\n    ScssHighlightRules.call(this);\n    var start = this.$rules.start;\n    if (start[1].token == \"comment\") {\n        start.splice(1, 1, {\n            onMatch: function (value, currentState, stack) {\n                stack.unshift(this.next, -1, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex: /^\\s*\\/\\*/,\n            next: \"comment\"\n        }, {\n            token: \"error.invalid\",\n            regex: \"/\\\\*|[{;}]\"\n        }, {\n            token: \"support.type\",\n            regex: /^\\s*:[\\w\\-]+\\s/\n        });\n        this.$rules.comment = [\n            { regex: /^\\s*/, onMatch: function (value, currentState, stack) {\n                    if (stack[1] === -1)\n                        stack[1] = Math.max(stack[2], value.length - 1);\n                    if (value.length <= stack[1]) { stack.shift();\n                        stack.shift();\n                        stack.shift();\n                        this.next = stack.shift();\n                        return \"text\";\n                    }\n                    else {\n                        this.next = \"\";\n                        return \"comment\";\n                    }\n                }, next: \"start\" },\n            { defaultToken: \"comment\" }\n        ];\n    }\n};\noop.inherits(SassHighlightRules, ScssHighlightRules);\nexports.SassHighlightRules = SassHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SassHighlightRules = require(\"./sass_highlight_rules\").SassHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = SassHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/sass\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/sass\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-scad.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/scad_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar scadHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": \"module|if|else|for\",\n        \"constant.language\": \"NULL\"\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: '[\"].*\\\\\\\\$',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"string\",\n                regex: \"['].*\\\\\\\\$\",\n                next: \"qstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant\",\n                regex: \"<[a-zA-Z0-9.]+>\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:use|include)\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\noop.inherits(scadHighlightRules, TextHighlightRules);\nexports.scadHighlightRules = scadHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/scad\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scad_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar scadHighlightRules = require(\"./scad_highlight_rules\").scadHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = scadHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/scad\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/scad\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-scala.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/scala_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ScalaHighlightRules = function () {\n    var keywords = (\"case|default|do|else|for|if|match|while|throw|return|try|trye|catch|finally|yield|\" +\n        \"abstract|class|def|extends|final|forSome|implicit|implicits|import|lazy|new|object|null|\" +\n        \"override|package|private|protected|sealed|super|this|trait|type|val|var|with|\" +\n        \"assert|assume|require|print|println|printf|readLine|readBoolean|readByte|readShort|\" + // package scala\n        \"readChar|readInt|readLong|readFloat|readDouble\" // package scala\n    );\n    var buildinConstants = (\"true|false\");\n    var langClasses = (\"AbstractMethodError|AssertionError|ClassCircularityError|\" +\n        \"ClassFormatError|Deprecated|EnumConstantNotPresentException|\" +\n        \"ExceptionInInitializerError|IllegalAccessError|\" +\n        \"IllegalThreadStateException|InstantiationError|InternalError|\" +\n        \"NegativeArraySizeException|NoSuchFieldError|Override|Process|\" +\n        \"ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|\" +\n        \"SuppressWarnings|TypeNotPresentException|UnknownError|\" +\n        \"UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|\" +\n        \"InstantiationException|IndexOutOfBoundsException|\" +\n        \"ArrayIndexOutOfBoundsException|CloneNotSupportedException|\" +\n        \"NoSuchFieldException|IllegalArgumentException|NumberFormatException|\" +\n        \"SecurityException|Void|InheritableThreadLocal|IllegalStateException|\" +\n        \"InterruptedException|NoSuchMethodException|IllegalAccessException|\" +\n        \"UnsupportedOperationException|Enum|StrictMath|Package|Compiler|\" +\n        \"Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|\" +\n        \"NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|\" +\n        \"NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|\" +\n        \"Character|Boolean|StackTraceElement|Appendable|StringBuffer|\" +\n        \"Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|\" +\n        \"StackOverflowError|OutOfMemoryError|VirtualMachineError|\" +\n        \"ArrayStoreException|ClassCastException|LinkageError|\" +\n        \"NoClassDefFoundError|ClassNotFoundException|RuntimeException|\" +\n        \"Exception|ThreadDeath|Error|Throwable|System|ClassLoader|\" +\n        \"Cloneable|Class|CharSequence|Comparable|String|Object|\" +\n        \"Unit|Any|AnyVal|AnyRef|Null|ScalaObject|Singleton|Seq|Iterable|List|\" +\n        \"Option|Array|Char|Byte|Int|Long|Nothing|\" +\n        \"App|Application|BufferedIterator|BigDecimal|BigInt|Console|Either|\" +\n        \"Enumeration|Equiv|Fractional|Function|IndexedSeq|Integral|Iterator|\" +\n        \"Map|Numeric|Nil|NotNull|Ordered|Ordering|PartialFunction|PartialOrdering|\" +\n        \"Product|Proxy|Range|Responder|Seq|Serializable|Set|Specializable|Stream|\" +\n        \"StringContext|Symbol|Traversable|TraversableOnce|Tuple|Vector|Pair|Triple\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"support.function\": langClasses,\n        \"constant.language\": buildinConstants\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token: \"string\",\n                regex: '\"\"\"',\n                next: \"tstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"string\"\n            }, {\n                token: \"symbol.constant\",\n                regex: \"'[\\\\w\\\\d_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"string\": [\n            {\n                token: \"escape\",\n                regex: '\\\\\\\\\"'\n            }, {\n                token: \"string\",\n                regex: '\"',\n                next: \"start\"\n            }, {\n                token: \"string.invalid\",\n                regex: '[^\"\\\\\\\\]*$',\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '[^\"\\\\\\\\]+'\n            }\n        ],\n        \"tstring\": [\n            {\n                token: \"string\",\n                regex: '\"{3,5}',\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\noop.inherits(ScalaHighlightRules, TextHighlightRules);\nexports.ScalaHighlightRules = ScalaHighlightRules;\n\n});\n\nace.define(\"ace/mode/scala\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/scala_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar ScalaHighlightRules = require(\"./scala_highlight_rules\").ScalaHighlightRules;\nvar Mode = function () {\n    JavaScriptMode.call(this);\n    this.HighlightRules = ScalaHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n(function () {\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.$id = \"ace/mode/scala\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/scala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-scheme.js",
    "content": "ace.define(\"ace/mode/scheme_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SchemeHighlightRules = function () {\n    var keywordControl = \"case|do|let|loop|if|else|when\";\n    var keywordOperator = \"eq?|eqv?|equal?|and|or|not|null?\";\n    var constantLanguage = \"#t|#f\";\n    var supportFunctions = \"cons|car|cdr|cond|lambda|lambda*|syntax-rules|format|set!|quote|eval|append|list|list?|member?|load\";\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control\": keywordControl,\n        \"keyword.operator\": keywordOperator,\n        \"constant.language\": constantLanguage,\n        \"support.function\": supportFunctions\n    }, \"identifier\", true);\n    this.$rules =\n        {\n            \"start\": [\n                {\n                    token: \"comment\",\n                    regex: \";.*$\"\n                },\n                {\n                    \"token\": [\"storage.type.function-type.scheme\", \"text\", \"entity.name.function.scheme\"],\n                    \"regex\": \"(?:\\\\b(?:(define|define-syntax|define-macro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"\n                },\n                {\n                    \"token\": \"punctuation.definition.constant.character.scheme\",\n                    \"regex\": \"#:\\\\S+\"\n                },\n                {\n                    \"token\": [\"punctuation.definition.variable.scheme\", \"variable.other.global.scheme\", \"punctuation.definition.variable.scheme\"],\n                    \"regex\": \"(\\\\*)(\\\\S*)(\\\\*)\"\n                },\n                {\n                    \"token\": \"constant.numeric\",\n                    \"regex\": \"#[xXoObB][0-9a-fA-F]+\"\n                },\n                {\n                    \"token\": \"constant.numeric\",\n                    \"regex\": \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\"\n                },\n                {\n                    \"token\": keywordMapper,\n                    \"regex\": \"[a-zA-Z_#][a-zA-Z0-9_\\\\-\\\\?\\\\!\\\\*]*\"\n                },\n                {\n                    \"token\": \"string\",\n                    \"regex\": '\"(?=.)',\n                    \"next\": \"qqstring\"\n                }\n            ],\n            \"qqstring\": [\n                {\n                    \"token\": \"constant.character.escape.scheme\",\n                    \"regex\": \"\\\\\\\\.\"\n                },\n                {\n                    \"token\": \"string\",\n                    \"regex\": '[^\"\\\\\\\\]+',\n                    \"merge\": true\n                }, {\n                    \"token\": \"string\",\n                    \"regex\": \"\\\\\\\\$\",\n                    \"next\": \"qqstring\",\n                    \"merge\": true\n                }, {\n                    \"token\": \"string\",\n                    \"regex\": '\"|$',\n                    \"next\": \"start\",\n                    \"merge\": true\n                }\n            ]\n        };\n};\noop.inherits(SchemeHighlightRules, TextHighlightRules);\nexports.SchemeHighlightRules = SchemeHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_parens_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingParensOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\)/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\))/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        var match = line.match(/^(\\s+)/);\n        if (match) {\n            return match[1];\n        }\n        return \"\";\n    };\n}).call(MatchingParensOutdent.prototype);\nexports.MatchingParensOutdent = MatchingParensOutdent;\n\n});\n\nace.define(\"ace/mode/scheme\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scheme_highlight_rules\",\"ace/mode/matching_parens_outdent\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SchemeHighlightRules = require(\"./scheme_highlight_rules\").SchemeHighlightRules;\nvar MatchingParensOutdent = require(\"./matching_parens_outdent\").MatchingParensOutdent;\nvar Mode = function () {\n    this.HighlightRules = SchemeHighlightRules;\n    this.$outdent = new MatchingParensOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \";\";\n    this.minorIndentFunctions = [\"define\", \"lambda\", \"define-macro\", \"define-syntax\", \"syntax-rules\", \"define-record-type\", \"define-structure\"];\n    this.$toIndent = function (str) {\n        return str.split('').map(function (ch) {\n            if (/\\s/.exec(ch)) {\n                return ch;\n            }\n            else {\n                return ' ';\n            }\n        }).join('');\n    };\n    this.$calculateIndent = function (line, tab) {\n        var baseIndent = this.$getIndent(line);\n        var delta = 0;\n        var isParen, ch;\n        for (var i = line.length - 1; i >= 0; i--) {\n            ch = line[i];\n            if (ch === '(') {\n                delta--;\n                isParen = true;\n            }\n            else if (ch === '(' || ch === '[' || ch === '{') {\n                delta--;\n                isParen = false;\n            }\n            else if (ch === ')' || ch === ']' || ch === '}') {\n                delta++;\n            }\n            if (delta < 0) {\n                break;\n            }\n        }\n        if (delta < 0 && isParen) {\n            i += 1;\n            var iBefore = i;\n            var fn = '';\n            while (true) {\n                ch = line[i];\n                if (ch === ' ' || ch === '\\t') {\n                    if (this.minorIndentFunctions.indexOf(fn) !== -1) {\n                        return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                    }\n                    else {\n                        return this.$toIndent(line.substring(0, i + 1));\n                    }\n                }\n                else if (ch === undefined) {\n                    return this.$toIndent(line.substring(0, iBefore - 1) + tab);\n                }\n                fn += line[i];\n                i++;\n            }\n        }\n        else if (delta < 0 && !isParen) {\n            return this.$toIndent(line.substring(0, i + 1));\n        }\n        else if (delta > 0) {\n            baseIndent = baseIndent.substring(0, baseIndent.length - tab.length);\n            return baseIndent;\n        }\n        else {\n            return baseIndent;\n        }\n    };\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$calculateIndent(line, tab);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/scheme\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/scheme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-scrypt.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/scrypt_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from ./tmthemes/tmscrypt.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar scryptHighlightRules = function () {\n    var keywords = (\"contract|library|loop|new|private|\" +\n        \"public|if|else|struct|type|\" +\n        \"require|static|const|import|exit|return|asm\");\n    var buildinConstants = (\"true|false\");\n    var langClasses = (\"function|auto|constructor|bytes|int|bool|SigHashPreimage|PrivKey|PubKey|Sig|Ripemd160|Sha1|Sha256|\" +\n        \"SigHashType|SigHashPreimage|OpCodeType\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"this\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            },\n            {\n                token: [\"support.function.math.scrypt\", \"text\", \"text\"],\n                regex: /\\b(abs|min|max|within|ripemd160|sha1|sha256|hash160|hash256|checkSig|checkMultiSig|num2bin|pack|unpack|len|reverseBytes|repeat)(\\s*)(\\()/\n            }, {\n                token: [\n                    \"entity.name.type.scrypt\",\n                    \"text\",\n                    \"text\",\n                    \"text\",\n                    \"variable.object.property.scrypt\"\n                ],\n                regex: /\\b(SigHash)(\\s*)(\\.)(\\s*)(ANYONECANPAY|ALL|FORKID|NONE|SINGLE)\\b/\n            },\n            {\n                token: [\n                    \"entity.name.type.scrypt\",\n                    \"text\",\n                    \"text\",\n                    \"text\",\n                    \"variable.object.property.scrypt\"\n                ],\n                regex: /\\b(OpCode)(\\s*)(\\.)(\\s*)(OP_PUSHDATA1|OP_PUSHDATA2|OP_PUSHDATA4|OP_0|OP_FALSE|OP_1NEGATE|OP_1|OP_TRUE|OP_2|OP_3|OP_4|OP_5|OP_6|OP_7|OP_8|OP_9|OP_10|OP_11|OP_12|OP_13|OP_14|OP_15|OP_16|OP_1ADD|OP_1SUB|OP_NEGATE|OP_ABS|OP_NOT|OP_0NOTEQUAL|OP_ADD|OP_SUB|OP_MUL|OP_DIV|OP_MOD|OP_LSHIFT|OP_RSHIFT|OP_BOOLAND|OP_BOOLOR|OP_NUMEQUAL|OP_NUMEQUALVERIFY|OP_NUMNOTEQUAL|OP_LESSTHAN|OP_GREATERTHAN|OP_LESSTHANOREQUAL|OP_GREATERTHANOREQUAL|OP_MIN|OP_MAX|OP_WITHIN|OP_CAT|OP_SPLIT|OP_BIN2NUM|OP_NUM2BIN|OP_SIZE|OP_NOP|OP_IF|OP_NOTIF|OP_ELSE|OP_ENDIF|OP_VERIFY|OP_RETURN|OP_TOALTSTACK|OP_FROMALTSTACK|OP_IFDUP|OP_DEPTH|OP_DROP|OP_DUP|OP_NIP|OP_OVER|OP_PICK|OP_ROLL|OP_ROT|OP_SWAP|OP_TUCK|OP_2DROP|OP_2DUP|OP_3DUP|OP_2OVER|OP_2ROT|OP_2SWAP|OP_RIPEMD160|OP_SHA1|OP_SHA256|OP_HASH160|OP_HASH256|OP_CODESEPARATOR|OP_CHECKSIG|OP_CHECKSIGVERIFY|OP_CHECKMULTISIG|OP_CHECKMULTISIGVERIFY|OP_INVERT|OP_AND|OP_OR|OP_XOR|OP_EQUAL|OP_EQUALVERIFY)\\b/\n            }, {\n                token: \"entity.name.type.scrypt\",\n                regex: /\\b(?:P2PKH|P2PK|Tx|HashPuzzleRipemd160|HashPuzzleSha1|HashPuzzleSha256|HashPuzzleHash160|OpCode|SigHash)\\b/\n            }, {\n                token: [\n                    \"punctuation.separator.period.scrypt\",\n                    'text',\n                    \"entity.name.function.scrypt\",\n                    \"text\",\n                    \"punctuation.definition.parameters.begin.bracket.round.scrypt\"\n                ],\n                regex: /(\\.)([^\\S$\\r]*)([\\w][\\w\\d]*)(\\s*)(\\()/,\n                push: [{\n                        token: \"punctuation.definition.parameters.end.bracket.round.scrypt\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"start\"\n                    }]\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\||\\\\^|\\\\*|\\\\/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?|\\\\:|\\\\*=|\\\\/=|%=|\\\\+=|\\\\-=|&=|\\\\|=|\\\\^=\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(scryptHighlightRules, TextHighlightRules);\nexports.scryptHighlightRules = scryptHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/scrypt\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scrypt_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar scryptHighlightRules = require(\"./scrypt_highlight_rules\").scryptHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = scryptHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\" };\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.$id = \"ace/mode/scrypt\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/scrypt\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-scss.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\nvar ScssHighlightRules = function () {\n    var properties = lang.arrayToMap(CssHighlightRules.supportType.split(\"|\"));\n    var functions = lang.arrayToMap((\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n        \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" +\n        \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" +\n        \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n        \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\"));\n    var constants = lang.arrayToMap(CssHighlightRules.supportConstant.split(\"|\"));\n    var colors = lang.arrayToMap(CssHighlightRules.supportConstantColor.split(\"|\"));\n    var keywords = lang.arrayToMap((\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\"));\n    var tags = lang.arrayToMap((\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" +\n        \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" +\n        \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" +\n        \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" +\n        \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" +\n        \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" +\n        \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" +\n        \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" +\n        \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\"));\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: '[\"].*\\\\\\\\$',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"string\",\n                regex: \"['].*\\\\\\\\$\",\n                next: \"qstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe + \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: [\"support.function\", \"string\", \"support.function\"],\n                regex: \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token: function (value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex: \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable\",\n                regex: \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ]\n    };\n};\noop.inherits(ScssHighlightRules, TextHighlightRules);\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\",\"ace/mode/css_completions\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar Mode = function () {\n    this.HighlightRules = ScssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.$id = \"ace/mode/scss\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/scss\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-sh.js",
    "content": "ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar reservedKeywords = exports.reservedKeywords = ('!|{|}|case|do|done|elif|else|' +\n    'esac|fi|for|if|in|then|until|while|' +\n    '&|;|export|local|read|typeset|unset|' +\n    'elif|select|set|function|declare|readonly');\nvar languageConstructs = exports.languageConstructs = ('[|]|alias|bg|bind|break|builtin|' +\n    'cd|command|compgen|complete|continue|' +\n    'dirs|disown|echo|enable|eval|exec|' +\n    'exit|fc|fg|getopts|hash|help|history|' +\n    'jobs|kill|let|logout|popd|printf|pushd|' +\n    'pwd|return|set|shift|shopt|source|' +\n    'suspend|test|times|trap|type|ulimit|' +\n    'umask|unalias|wait');\nvar ShHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n    this.$rules = {\n        \"start\": [{\n                token: \"constant\",\n                regex: /\\\\./\n            }, {\n                token: [\"text\", \"comment\"],\n                regex: /(^|\\s)(#.*)$/\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\(?:[$`\"\\\\]|$)/\n                    }, {\n                        include: \"variables\"\n                    }, {\n                        token: \"keyword.operator\",\n                        regex: /`/ // TODO highlight `\n                    }, {\n                        token: \"string.end\",\n                        regex: '\"',\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string\",\n                regex: \"\\\\$'\",\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n                    }, {\n                        token: \"string\",\n                        regex: \"'\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                regex: \"<<<\",\n                token: \"keyword.operator\"\n            }, {\n                stateName: \"heredoc\",\n                regex: \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n                onMatch: function (value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[4]);\n                    return [\n                        { type: \"constant\", value: tokens[1] },\n                        { type: \"text\", value: tokens[2] },\n                        { type: \"string\", value: tokens[3] },\n                        { type: \"support.class\", value: tokens[4] },\n                        { type: \"string\", value: tokens[5] }\n                    ];\n                },\n                rules: {\n                    heredoc: [{\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }],\n                    indentedHeredoc: [{\n                            token: \"string\",\n                            regex: \"^\\t+\"\n                        }, {\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }]\n                }\n            }, {\n                regex: \"$\",\n                token: \"empty\",\n                next: function (currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n                token: [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n                regex: /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n            }, {\n                token: \"variable.language\",\n                regex: builtinVariable\n            }, {\n                token: \"variable\",\n                regex: variable\n            }, {\n                include: \"variables\"\n            }, {\n                token: \"support.function\",\n                regex: func\n            }, {\n                token: \"support.function\",\n                regex: fileDescriptor\n            }, {\n                token: \"string\",\n                start: \"'\", end: \"'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \";\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)\\\\}]\",\n                next: \"pop\"\n            }],\n        variables: [{\n                token: \"variable\",\n                regex: /(\\$)(\\w+)/\n            }, {\n                token: [\"variable\", \"paren.lparen\"],\n                regex: /(\\$)(\\()/,\n                push: \"start\"\n            }, {\n                token: [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n                regex: /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n                push: \"start\"\n            }, {\n                token: \"variable\",\n                regex: /\\$[*@#?\\-$!0_]/\n            }, {\n                token: [\"variable\", \"paren.lparen\"],\n                regex: /(\\$)(\\{)/,\n                push: \"start\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(ShHighlightRules, TextHighlightRules);\nexports.ShHighlightRules = ShHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar Mode = function () {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n    this.checkOutdent = function (state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n        if (!last)\n            return false;\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length - tab.length, row, indent.length));\n    };\n    this.$id = \"ace/mode/sh\";\n    this.snippetFileId = \"ace/snippets/sh\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/sh\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-sjs.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/sjs_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SJSHighlightRules = function () {\n    var parent = new JavaScriptHighlightRules({ noES6: true });\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-6][0-7]?|\" + // oct\n        \"37[0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    var contextAware = function (f) {\n        f.isContextAware = true;\n        return f;\n    };\n    var ctxBegin = function (opts) {\n        return {\n            token: opts.token,\n            regex: opts.regex,\n            next: contextAware(function (currentState, stack) {\n                if (stack.length === 0)\n                    stack.unshift(currentState);\n                stack.unshift(opts.next);\n                return opts.next;\n            })\n        };\n    };\n    var ctxEnd = function (opts) {\n        return {\n            token: opts.token,\n            regex: opts.regex,\n            next: contextAware(function (currentState, stack) {\n                stack.shift();\n                return stack[0] || \"start\";\n            })\n        };\n    };\n    this.$rules = parent.$rules;\n    this.$rules.no_regex = [\n        {\n            token: \"keyword\",\n            regex: \"(waitfor|or|and|collapse|spawn|retract)\\\\b\"\n        },\n        {\n            token: \"keyword.operator\",\n            regex: \"(->|=>|\\\\.\\\\.)\"\n        },\n        {\n            token: \"variable.language\",\n            regex: \"(hold|default)\\\\b\"\n        },\n        ctxBegin({\n            token: \"string\",\n            regex: \"`\",\n            next: \"bstring\"\n        }),\n        ctxBegin({\n            token: \"string\",\n            regex: '\"',\n            next: \"qqstring\"\n        }),\n        ctxBegin({\n            token: \"string\",\n            regex: '\"',\n            next: \"qqstring\"\n        }),\n        {\n            token: [\"paren.lparen\", \"text\", \"paren.rparen\"],\n            regex: \"(\\\\{)(\\\\s*)(\\\\|)\",\n            next: \"block_arguments\"\n        }\n    ].concat(this.$rules.no_regex);\n    this.$rules.block_arguments = [\n        {\n            token: \"paren.rparen\",\n            regex: \"\\\\|\",\n            next: \"no_regex\"\n        }\n    ].concat(this.$rules.function_arguments);\n    this.$rules.bstring = [\n        {\n            token: \"constant.language.escape\",\n            regex: escapedRe\n        },\n        {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"bstring\"\n        },\n        ctxBegin({\n            token: \"paren.lparen\",\n            regex: \"\\\\$\\\\{\",\n            next: \"string_interp\"\n        }),\n        ctxBegin({\n            token: \"paren.lparen\",\n            regex: \"\\\\$\",\n            next: \"bstring_interp_single\"\n        }),\n        ctxEnd({\n            token: \"string\",\n            regex: \"`\"\n        }),\n        {\n            defaultToken: \"string\"\n        }\n    ];\n    this.$rules.qqstring = [\n        {\n            token: \"constant.language.escape\",\n            regex: escapedRe\n        },\n        {\n            token: \"string\",\n            regex: \"\\\\\\\\$\",\n            next: \"qqstring\"\n        },\n        ctxBegin({\n            token: \"paren.lparen\",\n            regex: \"#\\\\{\",\n            next: \"string_interp\"\n        }),\n        ctxEnd({\n            token: \"string\",\n            regex: '\"'\n        }),\n        {\n            defaultToken: \"string\"\n        }\n    ];\n    var embeddableRules = [];\n    for (var i = 0; i < this.$rules.no_regex.length; i++) {\n        var rule = this.$rules.no_regex[i];\n        var token = String(rule.token);\n        if (token.indexOf('paren') == -1 && (!rule.next || rule.next.isContextAware)) {\n            embeddableRules.push(rule);\n        }\n    }\n    this.$rules.string_interp = [\n        ctxEnd({\n            token: \"paren.rparen\",\n            regex: \"\\\\}\"\n        }),\n        ctxBegin({\n            token: \"paren.lparen\",\n            regex: '{',\n            next: \"string_interp\"\n        })\n    ].concat(embeddableRules);\n    this.$rules.bstring_interp_single = [\n        {\n            token: [\"identifier\", \"paren.lparen\"],\n            regex: '(\\\\w+)(\\\\()',\n            next: 'bstring_interp_single_call'\n        },\n        ctxEnd({\n            token: \"identifier\",\n            regex: \"\\\\w*\"\n        })\n    ];\n    this.$rules.bstring_interp_single_call = [\n        ctxBegin({\n            token: \"paren.lparen\",\n            regex: \"\\\\(\",\n            next: \"bstring_interp_single_call\"\n        }),\n        ctxEnd({\n            token: \"paren.rparen\",\n            regex: \"\\\\)\"\n        })\n    ].concat(embeddableRules);\n};\noop.inherits(SJSHighlightRules, TextHighlightRules);\nexports.SJSHighlightRules = SJSHighlightRules;\n\n});\n\nace.define(\"ace/mode/sjs\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/sjs_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JSMode = require(\"./javascript\").Mode;\nvar SJSHighlightRules = require(\"./sjs_highlight_rules\").SJSHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = SJSHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, JSMode);\n(function () {\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.$id = \"ace/mode/sjs\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/sjs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-slim.js",
    "content": "ace.define(\"ace/mode/slim_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar modes = require(\"../config\").$modes;\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SlimHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"keyword\",\n                regex: /^(\\s*)(\\w+):\\s*/,\n                onMatch: function (value, state, stack, line) {\n                    var indent = /^\\s*/.exec(line)[0];\n                    var m = value.match(/^(\\s*)(\\w+):/);\n                    var language = m[2];\n                    if (!/^(javascript|ruby|coffee|markdown|css|scss|sass|less)$/.test(language))\n                        language = \"\";\n                    stack.unshift(\"language-embed\", [], [indent, language], state);\n                    return this.token;\n                },\n                stateName: \"language-embed\",\n                next: [{\n                        token: \"string\",\n                        regex: /^(\\s*)/,\n                        onMatch: function (value, state, stack, line) {\n                            var indent = stack[2][0];\n                            if (indent.length >= value.length) {\n                                stack.splice(0, 3);\n                                this.next = stack.shift();\n                                return this.token;\n                            }\n                            this.next = \"\";\n                            return [{ type: \"text\", value: indent }];\n                        },\n                        next: \"\"\n                    }, {\n                        token: \"string\",\n                        regex: /.+/,\n                        onMatch: function (value, state, stack, line) {\n                            var indent = stack[2][0];\n                            var language = stack[2][1];\n                            var embedState = stack[1];\n                            if (modes[language]) {\n                                var data = modes[language].getTokenizer().getLineTokens(line.slice(indent.length), embedState.slice(0));\n                                stack[1] = data.state;\n                                return data.tokens;\n                            }\n                            return this.token;\n                        }\n                    }]\n            },\n            {\n                token: 'constant.begin.javascript.filter.slim',\n                regex: '^(\\\\s*)():$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(ruby):$'\n            }, {\n                token: 'constant.begin.coffeescript.filter.slim',\n                regex: '^(\\\\s*)():$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(markdown):$'\n            }, {\n                token: 'constant.begin.css.filter.slim',\n                regex: '^(\\\\s*)():$'\n            }, {\n                token: 'constant.begin.scss.filter.slim',\n                regex: '^(\\\\s*)():$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(sass):$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(less):$'\n            }, {\n                token: 'constant.begin..filter.slim',\n                regex: '^(\\\\s*)(erb):$'\n            }, {\n                token: 'keyword.html.tags.slim',\n                regex: '^(\\\\s*)((:?\\\\*(\\\\w)+)|doctype html|abbr|acronym|address|applet|area|article|aside|audio|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dialog|dfn|dir|div|dl|dt|embed|fieldset|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|link|li|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|source|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video|xmp|b|u|s|em|a)(?:([.#](\\\\w|\\\\.)+)+\\\\s?)?\\\\b'\n            }, {\n                token: 'keyword.slim',\n                regex: '^(\\\\s*)(?:([.#](\\\\w|\\\\.)+)+\\\\s?)'\n            }, {\n                token: \"string\",\n                regex: /^(\\s*)('|\\||\\/|(\\/!))\\s*/,\n                onMatch: function (val, state, stack, line) {\n                    var indent = /^\\s*/.exec(line)[0];\n                    if (stack.length < 1) {\n                        stack.push(this.next);\n                    }\n                    else {\n                        stack[0] = \"mlString\";\n                    }\n                    if (stack.length < 2) {\n                        stack.push(indent.length);\n                    }\n                    else {\n                        stack[1] = indent.length;\n                    }\n                    return this.token;\n                },\n                next: \"mlString\"\n            }, {\n                token: 'keyword.control.slim',\n                regex: '^(\\\\s*)(\\\\-|==|=)',\n                push: [{\n                        token: 'control.end.slim',\n                        regex: '$',\n                        next: \"pop\"\n                    }, {\n                        include: \"rubyline\"\n                    }, {\n                        include: \"misc\"\n                    }]\n            }, {\n                token: 'paren',\n                regex: '\\\\(',\n                push: [{\n                        token: 'paren',\n                        regex: '\\\\)',\n                        next: \"pop\"\n                    }, {\n                        include: \"misc\"\n                    }]\n            }, {\n                token: 'paren',\n                regex: '\\\\[',\n                push: [{\n                        token: 'paren',\n                        regex: '\\\\]',\n                        next: \"pop\"\n                    }, {\n                        include: \"misc\"\n                    }]\n            }, {\n                include: \"misc\"\n            }\n        ],\n        \"mlString\": [{\n                token: \"indent\",\n                regex: /^\\s*/,\n                onMatch: function (val, state, stack) {\n                    var curIndent = stack[1];\n                    if (curIndent >= val.length) {\n                        this.next = \"start\";\n                        stack.splice(0);\n                    }\n                    else {\n                        this.next = \"mlString\";\n                    }\n                    return this.token;\n                },\n                next: \"start\"\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"rubyline\": [{\n                token: \"keyword.operator.ruby.embedded.slim\",\n                regex: \"(==|=)(<>|><|<'|'<|<|>)?|-\"\n            }, {\n                token: \"list.ruby.operators.slim\",\n                regex: \"(\\\\b)(for|in|do|if|else|elsif|unless|while|yield|not|and|or)\\\\b\"\n            }, {\n                token: \"string\",\n                regex: \"['](.)*?[']\"\n            }, {\n                token: \"string\",\n                regex: \"[\\\"](.)*?[\\\"]\"\n            }],\n        \"misc\": [{\n                token: 'class.variable.slim',\n                regex: '\\\\@([a-zA-Z_][a-zA-Z0-9_]*)\\\\b'\n            }, {\n                token: \"list.meta.slim\",\n                regex: \"(\\\\b)(true|false|nil)(\\\\b)\"\n            }, {\n                token: 'keyword.operator.equals.slim',\n                regex: '='\n            }, {\n                token: \"string\",\n                regex: \"['](.)*?[']\"\n            }, {\n                token: \"string\",\n                regex: \"[\\\"](.)*?[\\\"]\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(SlimHighlightRules, TextHighlightRules);\nexports.SlimHighlightRules = SlimHighlightRules;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar Mode = function () {\n    this.HighlightRules = XmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.foldingRules = new XmlFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.voidElements = lang.arrayToMap([]);\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar modes = require(\"../config\").$modes;\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar escaped = function (ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n};\nvar MarkdownHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var codeBlockStartRule = {\n        token: \"support.function\",\n        regex: /^\\s*(```+[^`]*|~~~+[^~]*)$/,\n        onMatch: function (value, state, stack, line) {\n            var m = value.match(/^(\\s*)([`~]+)(.*)/);\n            var language = /[\\w-]+|$/.exec(m[3])[0];\n            if (!modes[language])\n                language = \"\";\n            stack.unshift(\"githubblock\", [], [m[1], m[2], language], state);\n            return this.token;\n        },\n        next: \"githubblock\"\n    };\n    var codeBlockRules = [{\n            token: \"support.function\",\n            regex: \".*\",\n            onMatch: function (value, state, stack, line) {\n                var embedState = stack[1];\n                var indent = stack[2][0];\n                var endMarker = stack[2][1];\n                var language = stack[2][2];\n                var m = /^(\\s*)(`+|~+)\\s*$/.exec(value);\n                if (m && m[1].length < indent.length + 3\n                    && m[2].length >= endMarker.length && m[2][0] == endMarker[0]) {\n                    stack.splice(0, 3);\n                    this.next = stack.shift();\n                    return this.token;\n                }\n                this.next = \"\";\n                if (language && modes[language]) {\n                    var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));\n                    stack[1] = data.state;\n                    return data.tokens;\n                }\n                return this.token;\n            }\n        }];\n    this.$rules[\"start\"].unshift({\n        token: \"empty_line\",\n        regex: '^$',\n        next: \"allowBlock\"\n    }, {\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, {\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token: function (value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex: /^#{1,6}(?=\\s|$)/,\n        next: \"header\"\n    }, codeBlockStartRule, {\n        token: \"string.blockquote\",\n        regex: \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next: \"blockquote\"\n    }, {\n        token: \"constant\",\n        regex: \"^ {0,3}(?:(?:\\\\* ?){3,}|(?:\\\\- ?){3,}|(?:\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, {\n        token: \"markup.list\",\n        regex: \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next: \"listblock-start\"\n    }, {\n        include: \"basic\"\n    });\n    this.addRules({\n        \"basic\": [{\n                token: \"constant.language.escape\",\n                regex: /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n            }, {\n                token: \"support.function\",\n                regex: \"(`+)(.*?[^`])(\\\\1)\"\n            }, {\n                token: [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n                regex: \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n            }, {\n                token: [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n                regex: \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\" + escaped(\"]\") + \")(\\\\])\"\n            }, {\n                token: [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n                regex: \"(\\\\!?\\\\[)(\" + // [\n                    escaped(\"]\") + // link text or alt text\n                    \")(\\\\]\\\\()\" + // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' + // href or image\n                    '(\\\\s*\"' + escaped('\"') + '\"\\\\s*)?' + // \"title\"\n                    \"(\\\\))\" // )\n            }, {\n                token: \"string.strong\",\n                regex: \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n            }, {\n                token: \"string.emphasis\",\n                regex: \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n            }, {\n                token: [\"text\", \"url\", \"text\"],\n                regex: \"(<)(\" +\n                    \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\" +\n                    \"|\" +\n                    \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\" +\n                    \")(>)\"\n            }],\n        \"allowBlock\": [\n            { token: \"support.function\", regex: \"^ {4}.+\", next: \"allowBlock\" },\n            { token: \"empty_line\", regex: '^$', next: \"allowBlock\" },\n            { token: \"empty\", regex: \"\", next: \"start\" }\n        ],\n        \"header\": [{\n                regex: \"$\",\n                next: \"start\"\n            }, {\n                include: \"basic\"\n            }, {\n                defaultToken: \"heading\"\n            }],\n        \"listblock-start\": [{\n                token: \"support.variable\",\n                regex: /(?:\\[[ x]\\])?/,\n                next: \"listblock\"\n            }],\n        \"listblock\": [{\n                token: \"empty_line\",\n                regex: \"^$\",\n                next: \"start\"\n            }, {\n                token: \"markup.list\",\n                regex: \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n                next: \"listblock-start\"\n            }, {\n                include: \"basic\", noEscape: true\n            },\n            codeBlockStartRule,\n            {\n                defaultToken: \"list\" //do not use markup.list to allow stling leading `*` differntly\n            }],\n        \"blockquote\": [{\n                token: \"empty_line\",\n                regex: \"^\\\\s*$\",\n                next: \"start\"\n            }, {\n                token: \"string.blockquote\",\n                regex: \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n                next: \"blockquote\"\n            }, {\n                include: \"basic\", noEscape: true\n            }, {\n                defaultToken: \"string.blockquote\"\n            }],\n        \"githubblock\": codeBlockRules\n    });\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /^(?:[=-]+\\s*$|#{1,6} |`{3})/;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (!this.foldingStartMarker.test(line))\n            return \"\";\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) == \"start\")\n                return \"end\";\n            return \"start\";\n        }\n        return \"start\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (!line.match(this.foldingStartMarker))\n            return;\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) !== \"start\") {\n                while (++row < maxRow) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(startRow, startColumn, row, 0);\n            }\n            else {\n                while (row-- > 0) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(row, line.length, startRow, 0);\n            }\n        }\n        var token;\n        function isHeading(row) {\n            token = session.getTokens(row)[0];\n            return token && token.type.lastIndexOf(heading, 0) === 0;\n        }\n        var heading = \"markup.heading\";\n        function getLevel() {\n            var ch = token.value[0];\n            if (ch == \"=\")\n                return 6;\n            if (ch == \"-\")\n                return 5;\n            return 7 - token.value.search(/[^#]|$/);\n        }\n        if (isHeading(row)) {\n            var startHeadingLevel = getLevel();\n            while (++row < maxRow) {\n                if (!isHeading(row))\n                    continue;\n                var level = getLevel();\n                if (level >= startHeadingLevel)\n                    break;\n            }\n            endRow = row - (!token || [\"=\", \"-\"].indexOf(token.value[0]) == -1 ? 1 : 2);\n            if (endRow > startRow) {\n                while (endRow > startRow && /^\\s*$/.test(session.getLine(endRow)))\n                    endRow--;\n            }\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar reservedKeywords = exports.reservedKeywords = ('!|{|}|case|do|done|elif|else|' +\n    'esac|fi|for|if|in|then|until|while|' +\n    '&|;|export|local|read|typeset|unset|' +\n    'elif|select|set|function|declare|readonly');\nvar languageConstructs = exports.languageConstructs = ('[|]|alias|bg|bind|break|builtin|' +\n    'cd|command|compgen|complete|continue|' +\n    'dirs|disown|echo|enable|eval|exec|' +\n    'exit|fc|fg|getopts|hash|help|history|' +\n    'jobs|kill|let|logout|popd|printf|pushd|' +\n    'pwd|return|set|shift|shopt|source|' +\n    'suspend|test|times|trap|type|ulimit|' +\n    'umask|unalias|wait');\nvar ShHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": reservedKeywords,\n        \"support.function.builtin\": languageConstructs,\n        \"invalid.deprecated\": \"debugger\"\n    }, \"identifier\");\n    var integer = \"(?:(?:[1-9]\\\\d*)|(?:0))\";\n    var fraction = \"(?:\\\\.\\\\d+)\";\n    var intPart = \"(?:\\\\d+)\";\n    var pointFloat = \"(?:(?:\" + intPart + \"?\" + fraction + \")|(?:\" + intPart + \"\\\\.))\";\n    var exponentFloat = \"(?:(?:\" + pointFloat + \"|\" + intPart + \")\" + \")\";\n    var floatNumber = \"(?:\" + exponentFloat + \"|\" + pointFloat + \")\";\n    var fileDescriptor = \"(?:&\" + intPart + \")\";\n    var variableName = \"[a-zA-Z_][a-zA-Z0-9_]*\";\n    var variable = \"(?:\" + variableName + \"(?==))\";\n    var builtinVariable = \"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\";\n    var func = \"(?:\" + variableName + \"\\\\s*\\\\(\\\\))\";\n    this.$rules = {\n        \"start\": [{\n                token: \"constant\",\n                regex: /\\\\./\n            }, {\n                token: [\"text\", \"comment\"],\n                regex: /(^|\\s)(#.*)$/\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\(?:[$`\"\\\\]|$)/\n                    }, {\n                        include: \"variables\"\n                    }, {\n                        token: \"keyword.operator\",\n                        regex: /`/ // TODO highlight `\n                    }, {\n                        token: \"string.end\",\n                        regex: '\"',\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string\",\n                regex: \"\\\\$'\",\n                push: [{\n                        token: \"constant.language.escape\",\n                        regex: /\\\\(?:[abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/\n                    }, {\n                        token: \"string\",\n                        regex: \"'\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                regex: \"<<<\",\n                token: \"keyword.operator\"\n            }, {\n                stateName: \"heredoc\",\n                regex: \"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",\n                onMatch: function (value, currentState, stack) {\n                    var next = value[2] == '-' ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[4]);\n                    return [\n                        { type: \"constant\", value: tokens[1] },\n                        { type: \"text\", value: tokens[2] },\n                        { type: \"string\", value: tokens[3] },\n                        { type: \"support.class\", value: tokens[4] },\n                        { type: \"string\", value: tokens[5] }\n                    ];\n                },\n                rules: {\n                    heredoc: [{\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }],\n                    indentedHeredoc: [{\n                            token: \"string\",\n                            regex: \"^\\t+\"\n                        }, {\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }]\n                }\n            }, {\n                regex: \"$\",\n                token: \"empty\",\n                next: function (currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n                token: [\"keyword\", \"text\", \"text\", \"text\", \"variable\"],\n                regex: /(declare|local|readonly)(\\s+)(?:(-[fixar]+)(\\s+))?([a-zA-Z_][a-zA-Z0-9_]*\\b)/\n            }, {\n                token: \"variable.language\",\n                regex: builtinVariable\n            }, {\n                token: \"variable\",\n                regex: variable\n            }, {\n                include: \"variables\"\n            }, {\n                token: \"support.function\",\n                regex: func\n            }, {\n                token: \"support.function\",\n                regex: fileDescriptor\n            }, {\n                token: \"string\",\n                start: \"'\", end: \"'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: floatNumber\n            }, {\n                token: \"constant.numeric\",\n                regex: integer + \"\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=|[%&|`]\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \";\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\[\\\\(\\\\{]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)\\\\}]\",\n                next: \"pop\"\n            }],\n        variables: [{\n                token: \"variable\",\n                regex: /(\\$)(\\w+)/\n            }, {\n                token: [\"variable\", \"paren.lparen\"],\n                regex: /(\\$)(\\()/,\n                push: \"start\"\n            }, {\n                token: [\"variable\", \"paren.lparen\", \"keyword.operator\", \"variable\", \"keyword.operator\"],\n                regex: /(\\$)(\\{)([#!]?)(\\w+|[*@#?\\-$!0_])(:[?+\\-=]?|##?|%%?|,,?\\/|\\^\\^?)?/,\n                push: \"start\"\n            }, {\n                token: \"variable\",\n                regex: /\\$[*@#?\\-$!0_]/\n            }, {\n                token: [\"variable\", \"paren.lparen\"],\n                regex: /(\\$)(\\{)/,\n                push: \"start\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(ShHighlightRules, TextHighlightRules);\nexports.ShHighlightRules = ShHighlightRules;\n\n});\n\nace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ShHighlightRules = require(\"./sh_highlight_rules\").ShHighlightRules;\nvar Range = require(\"../range\").Range;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar Mode = function () {\n    this.HighlightRules = ShHighlightRules;\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = new CstyleBehaviour();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    var outdents = {\n        \"pass\": 1,\n        \"return\": 1,\n        \"raise\": 1,\n        \"break\": 1,\n        \"continue\": 1\n    };\n    this.checkOutdent = function (state, line, input) {\n        if (input !== \"\\r\\n\" && input !== \"\\r\" && input !== \"\\n\")\n            return false;\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        if (!tokens)\n            return false;\n        do {\n            var last = tokens.pop();\n        } while (last && (last.type == \"comment\" || (last.type == \"text\" && last.value.match(/^\\s+$/))));\n        if (!last)\n            return false;\n        return (last.type == \"keyword\" && outdents[last.value]);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        row += 1;\n        var indent = this.$getIndent(doc.getLine(row));\n        var tab = doc.getTabString();\n        if (indent.slice(-tab.length) == tab)\n            doc.remove(new Range(row, indent.length - tab.length, row, indent.length));\n    };\n    this.$id = \"ace/mode/sh\";\n    this.snippetFileId = \"ace/snippets/sh\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\",\"ace/mode/javascript\",\"ace/mode/html\",\"ace/mode/sh\",\"ace/mode/sh\",\"ace/mode/xml\",\"ace/mode/css\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar XmlMode = require(\"./xml\").Mode;\nvar HtmlMode = require(\"./html\").Mode;\nvar MarkdownHighlightRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar MarkdownFoldMode = require(\"./folding/markdown\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = MarkdownHighlightRules;\n    this.createModeDelegates({\n        javascript: require(\"./javascript\").Mode,\n        html: require(\"./html\").Mode,\n        bash: require(\"./sh\").Mode,\n        sh: require(\"./sh\").Mode,\n        xml: require(\"./xml\").Mode,\n        css: require(\"./css\").Mode\n    });\n    this.foldingRules = new MarkdownFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.type = \"text\";\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.$quotes = { '\"': '\"', \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        if (state == \"listblock\") {\n            var match = /^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(line);\n            if (!match)\n                return \"\";\n            var marker = match[2];\n            if (!marker)\n                marker = parseInt(match[3], 10) + 1 + \".\";\n            return match[1] + marker + match[4];\n        }\n        else {\n            return this.$getIndent(line);\n        }\n    };\n    this.$id = \"ace/mode/markdown\";\n    this.snippetFileId = \"ace/snippets/markdown\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\noop.inherits(CoffeeHighlightRules, TextHighlightRules);\nfunction CoffeeHighlightRules() {\n    var identifier = \"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\";\n    var keywords = (\"this|throw|then|try|typeof|super|switch|return|break|by|continue|\" +\n        \"catch|class|in|instanceof|is|isnt|if|else|extends|for|own|\" +\n        \"finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|\" +\n        \"or|on|unless|until|and|yes|yield|export|import|default\");\n    var langConstant = (\"true|false|null|undefined|NaN|Infinity\");\n    var illegal = (\"case|const|function|var|void|with|enum|implements|\" +\n        \"interface|let|package|private|protected|public|static\");\n    var supportClass = (\"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|\" +\n        \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" +\n        \"SyntaxError|TypeError|URIError|\" +\n        \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n        \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\");\n    var supportFunction = (\"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|\" +\n        \"encodeURIComponent|decodeURI|decodeURIComponent|String|\");\n    var variableLanguage = (\"window|arguments|prototype|document\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": langConstant,\n        \"invalid.illegal\": illegal,\n        \"language.support.class\": supportClass,\n        \"language.support.function\": supportFunction,\n        \"variable.language\": variableLanguage\n    }, \"identifier\");\n    var functionRule = {\n        token: [\"paren.lparen\", \"variable.parameter\", \"paren.rparen\", \"text\", \"storage.type\"],\n        regex: /(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source\n    };\n    var stringEscape = /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;\n    this.$rules = {\n        start: [\n            {\n                token: \"constant.numeric\",\n                regex: \"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"\n            }, {\n                stateName: \"qdoc\",\n                token: \"string\", regex: \"'''\", next: [\n                    { token: \"string\", regex: \"'''\", next: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                stateName: \"qqdoc\",\n                token: \"string\",\n                regex: '\"\"\"',\n                next: [\n                    { token: \"string\", regex: '\"\"\"', next: \"start\" },\n                    { token: \"paren.string\", regex: '#{', push: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                stateName: \"qstring\",\n                token: \"string\", regex: \"'\", next: [\n                    { token: \"string\", regex: \"'\", next: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                stateName: \"qqstring\",\n                token: \"string.start\", regex: '\"', next: [\n                    { token: \"string.end\", regex: '\"', next: \"start\" },\n                    { token: \"paren.string\", regex: '#{', push: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                stateName: \"js\",\n                token: \"string\", regex: \"`\", next: [\n                    { token: \"string\", regex: \"`\", next: \"start\" },\n                    { token: \"constant.language.escape\", regex: stringEscape },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                regex: \"[{}]\", onMatch: function (val, state, stack) {\n                    this.next = \"\";\n                    if (val == \"{\" && stack.length) {\n                        stack.unshift(\"start\", state);\n                        return \"paren\";\n                    }\n                    if (val == \"}\" && stack.length) {\n                        stack.shift();\n                        this.next = stack.shift() || \"\";\n                        if (this.next.indexOf(\"string\") != -1)\n                            return \"paren.string\";\n                    }\n                    return \"paren\";\n                }\n            }, {\n                token: \"string.regex\",\n                regex: \"///\",\n                next: \"heregex\"\n            }, {\n                token: \"string.regex\",\n                regex: /(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/\n            }, {\n                token: \"comment\",\n                regex: \"###(?!#)\",\n                next: \"comment\"\n            }, {\n                token: \"comment\",\n                regex: \"#.*\"\n            }, {\n                token: [\"punctuation.operator\", \"text\", \"identifier\"],\n                regex: \"(\\\\.)(\\\\s*)(\" + illegal + \")\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\.{1,3}\"\n            }, {\n                token: [\"keyword\", \"text\", \"language.support.class\",\n                    \"text\", \"keyword\", \"text\", \"language.support.class\"],\n                regex: \"(class)(\\\\s+)(\" + identifier + \")(?:(\\\\s+)(extends)(\\\\s+)(\" + identifier + \"))?\"\n            }, {\n                token: [\"entity.name.function\", \"text\", \"keyword.operator\", \"text\"].concat(functionRule.token),\n                regex: \"(\" + identifier + \")(\\\\s*)([=:])(\\\\s*)\" + functionRule.regex\n            },\n            functionRule,\n            {\n                token: \"variable\",\n                regex: \"@(?:\" + identifier + \")?\"\n            }, {\n                token: keywordMapper,\n                regex: identifier\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\,|\\\\.\"\n            }, {\n                token: \"storage.type\",\n                regex: \"[\\\\-=]>\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[({[]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\]})]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        heregex: [{\n                token: \"string.regex\",\n                regex: '.*?///[imgy]{0,4}',\n                next: \"start\"\n            }, {\n                token: \"comment.regex\",\n                regex: \"\\\\s+(?:#.*)?\"\n            }, {\n                token: \"string.regex\",\n                regex: \"\\\\S+\"\n            }],\n        comment: [{\n                token: \"comment\",\n                regex: '###',\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }]\n    };\n    this.normalizeRules();\n}\nexports.CoffeeHighlightRules = CoffeeHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/coffee\",[\"require\",\"exports\",\"module\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/worker/worker_client\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Rules = require(\"./coffee_highlight_rules\").CoffeeHighlightRules;\nvar Outdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar TextMode = require(\"./text\").Mode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\nfunction Mode() {\n    this.HighlightRules = Rules;\n    this.$outdent = new Outdent();\n    this.foldingRules = new FoldMode();\n}\noop.inherits(Mode, TextMode);\n(function () {\n    var indenter = /(?:[({[=:]|[-=]>|\\b(?:else|try|(?:swi|ca)tch(?:\\s+[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?|finally))\\s*$|^\\s*(else\\b\\s*)?(?:if|for|while|loop)\\b(?!.*\\bthen\\b)/;\n    this.lineCommentStart = \"#\";\n    this.blockComment = { start: \"###\", end: \"###\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (!(tokens.length && tokens[tokens.length - 1].type === 'comment') &&\n            state === 'start' && indenter.test(line))\n            indent += tab;\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/coffee_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/coffee\";\n    this.snippetFileId = \"ace/snippets/coffee\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\nvar ScssHighlightRules = function () {\n    var properties = lang.arrayToMap(CssHighlightRules.supportType.split(\"|\"));\n    var functions = lang.arrayToMap((\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n        \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" +\n        \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" +\n        \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n        \"scale_color|transparentize|type_of|unit|unitless|unquote\").split(\"|\"));\n    var constants = lang.arrayToMap(CssHighlightRules.supportConstant.split(\"|\"));\n    var colors = lang.arrayToMap(CssHighlightRules.supportConstantColor.split(\"|\"));\n    var keywords = lang.arrayToMap((\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\"));\n    var tags = lang.arrayToMap((\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" +\n        \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" +\n        \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" +\n        \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" +\n        \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" +\n        \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" +\n        \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" +\n        \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" +\n        \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\"));\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: '[\"].*\\\\\\\\$',\n                next: \"qqstring\"\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"string\",\n                regex: \"['].*\\\\\\\\$\",\n                next: \"qstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe + \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: [\"support.function\", \"string\", \"support.function\"],\n                regex: \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token: function (value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex: \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable\",\n                regex: \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ]\n    };\n};\noop.inherits(ScssHighlightRules, TextHighlightRules);\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\nace.define(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\",\"ace/mode/css_completions\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar Mode = function () {\n    this.HighlightRules = ScssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.$id = \"ace/mode/scss\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar SassHighlightRules = function () {\n    ScssHighlightRules.call(this);\n    var start = this.$rules.start;\n    if (start[1].token == \"comment\") {\n        start.splice(1, 1, {\n            onMatch: function (value, currentState, stack) {\n                stack.unshift(this.next, -1, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex: /^\\s*\\/\\*/,\n            next: \"comment\"\n        }, {\n            token: \"error.invalid\",\n            regex: \"/\\\\*|[{;}]\"\n        }, {\n            token: \"support.type\",\n            regex: /^\\s*:[\\w\\-]+\\s/\n        });\n        this.$rules.comment = [\n            { regex: /^\\s*/, onMatch: function (value, currentState, stack) {\n                    if (stack[1] === -1)\n                        stack[1] = Math.max(stack[2], value.length - 1);\n                    if (value.length <= stack[1]) { stack.shift();\n                        stack.shift();\n                        stack.shift();\n                        this.next = stack.shift();\n                        return \"text\";\n                    }\n                    else {\n                        this.next = \"\";\n                        return \"comment\";\n                    }\n                }, next: \"start\" },\n            { defaultToken: \"comment\" }\n        ];\n    }\n};\noop.inherits(SassHighlightRules, ScssHighlightRules);\nexports.SassHighlightRules = SassHighlightRules;\n\n});\n\nace.define(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SassHighlightRules = require(\"./sass_highlight_rules\").SassHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = SassHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/sass\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require('./css_highlight_rules');\nvar LessHighlightRules = function () {\n    var keywordList = \"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|\" +\n        \"@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|\" +\n        \"or|and|when|not\";\n    var keywords = keywordList.split('|');\n    var properties = CssHighlightRules.supportType.split('|');\n    var keywordMapper = this.createKeywordMapper({\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"keyword\": keywordList,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"identifier\", true);\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: [\"support.function\", \"paren.lparen\", \"string\", \"paren.rparen\"],\n                regex: \"(url)(\\\\()(.*)(\\\\))\"\n            }, {\n                token: [\"support.function\", \"paren.lparen\"],\n                regex: \"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"\n            }, {\n                token: function (value) {\n                    if (keywords.indexOf(value.toLowerCase()) > -1)\n                        return \"keyword\";\n                    else\n                        return \"variable\";\n                },\n                regex: \"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"\n            }, {\n                token: \"variable\",\n                regex: \"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"\n            }, {\n                token: function (first, second) {\n                    if (properties.indexOf(first.toLowerCase()) > -1) {\n                        return [\"support.type.property\", \"text\"];\n                    }\n                    else {\n                        return [\"support.type.unknownProperty\", \"text\"];\n                    }\n                },\n                regex: \"([a-z0-9-_]+)(\\\\s*:)\"\n            }, {\n                token: \"keyword\",\n                regex: \"&\" // special case - always treat as keyword\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z_][a-z0-9-_]*\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(LessHighlightRules, TextHighlightRules);\nexports.LessHighlightRules = LessHighlightRules;\n\n});\n\nace.define(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/css_completions\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LessHighlightRules = require(\"./less_highlight_rules\").LessHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = LessHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(\"ruleset\", session, pos, prefix);\n    };\n    this.$id = \"ace/mode/less\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar constantOtherSymbol = exports.constantOtherSymbol = {\n    token: \"constant.other.symbol.ruby\",\n    regex: \"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"\n};\nexports.qString = {\n    token: \"string\",\n    regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n};\nexports.qqString = {\n    token: \"string\",\n    regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n};\nexports.tString = {\n    token: \"string\",\n    regex: \"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"\n};\nvar constantNumericHex = exports.constantNumericHex = {\n    token: \"constant.numeric\",\n    regex: \"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"\n};\nvar constantNumericBinary = exports.constantNumericBinary = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[bB][01](?:[01]|_(?=[01]))*)\\b/\n};\nvar constantNumericDecimal = exports.constantNumericDecimal = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[dD](?:[1-9](?:[\\d]|_(?=[\\d]))*|0))\\b/\n};\nvar constantNumericOctal = exports.constantNumericDecimal = {\n    token: \"constant.numeric\",\n    regex: /\\b(0[oO]?(?:[1-7](?:[0-7]|_(?=[0-7]))*|0))\\b/\n};\nvar constantNumericRational = exports.constantNumericRational = {\n    token: \"constant.numeric\",\n    regex: /\\b([\\d]+(?:[./][\\d]+)?ri?)\\b/\n};\nvar constantNumericComplex = exports.constantNumericComplex = {\n    token: \"constant.numeric\",\n    regex: /\\b([\\d]i)\\b/\n};\nvar constantNumericFloat = exports.constantNumericFloat = {\n    token: \"constant.numeric\",\n    regex: \"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?i?\\\\b\"\n};\nvar instanceVariable = exports.instanceVariable = {\n    token: \"variable.instance\",\n    regex: \"@{1,2}[a-zA-Z_\\\\d]+\"\n};\nvar RubyHighlightRules = function () {\n    var builtinFunctions = (\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|\" +\n        \"assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|\" +\n        \"assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|\" +\n        \"assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|\" +\n        \"assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|\" +\n        \"assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|\" +\n        \"attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|\" +\n        \"caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|\" +\n        \"exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|\" +\n        \"gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|\" +\n        \"link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|\" +\n        \"p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|\" +\n        \"raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|\" +\n        \"set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|\" +\n        \"throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|\" +\n        \"render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|\" +\n        \"content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|\" +\n        \"fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|\" +\n        \"time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|\" +\n        \"select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|\" +\n        \"file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|\" +\n        \"protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|\" +\n        \"send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|\" +\n        \"validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|\" +\n        \"validates_inclusion_of|validates_numericality_of|validates_with|validates_each|\" +\n        \"authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|\" +\n        \"filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|\" +\n        \"translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|\" +\n        \"cache|expire_fragment|expire_cache_for|observe|cache_sweeper|\" +\n        \"has_many|has_one|belongs_to|has_and_belongs_to_many|p|warn|refine|using|module_function|extend|alias_method|\" +\n        \"private_class_method|remove_method|undef_method\");\n    var keywords = (\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|\" +\n        \"__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|\" +\n        \"redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|__ENCODING__|prepend\");\n    var buildinConstants = (\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|\" +\n        \"RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING|RUBY_PATCHLEVEL|RUBY_REVISION|RUBY_COPYRIGHT|RUBY_ENGINE|RUBY_ENGINE_VERSION|RUBY_DESCRIPTION\");\n    var builtinVariables = (\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|\" +\n        \"$!|root_url|flash|session|cookies|params|request|response|logger|self\");\n    var keywordMapper = this.$keywords = this.createKeywordMapper({\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"variable.language\": builtinVariables,\n        \"support.function\": builtinFunctions,\n        \"invalid.deprecated\": \"debugger\" // TODO is this a remnant from js mode?\n    }, \"identifier\");\n    var escapedChars = \"\\\\\\\\(?:n(?:[1-7][0-7]{0,2}|0)|[nsrtvfbae'\\\"\\\\\\\\]|c(?:\\\\\\\\M-)?.|M-(?:\\\\\\\\C-|\\\\\\\\c)?.|C-(?:\\\\\\\\M-)?.|[0-7]{3}|x[\\\\da-fA-F]{2}|u[\\\\da-fA-F]{4}|u{[\\\\da-fA-F]{1,6}(?:\\\\s[\\\\da-fA-F]{1,6})*})\";\n    var closeParen = {\n        \"(\": \")\",\n        \"[\": \"]\",\n        \"{\": \"}\",\n        \"<\": \">\",\n        \"^\": \"^\",\n        \"|\": \"|\",\n        \"%\": \"%\"\n    };\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"comment.multiline\",\n                regex: \"^=begin(?=$|\\\\s.*$)\",\n                next: \"comment\"\n            }, {\n                token: \"string.regexp\",\n                regex: /[/](?=.*\\/)/,\n                next: \"regex\"\n            },\n            [{\n                    token: [\"constant.other.symbol.ruby\", \"string.start\"],\n                    regex: /(:)?(\")/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: escapedChars\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /\"/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: \"string.start\",\n                    regex: /`/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: escapedChars\n                        }, {\n                            token: \"paren.start\",\n                            regex: /#{/,\n                            push: \"start\"\n                        }, {\n                            token: \"string.end\",\n                            regex: /`/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: [\"constant.other.symbol.ruby\", \"string.start\"],\n                    regex: /(:)?(')/,\n                    push: [{\n                            token: \"constant.language.escape\",\n                            regex: /\\\\['\\\\]/\n                        }, {\n                            token: \"string.end\",\n                            regex: /'/,\n                            next: \"pop\"\n                        }, {\n                            defaultToken: \"string\"\n                        }]\n                }, {\n                    token: \"string.start\",\n                    regex: /%[qwx]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"qStateWithoutInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"string.start\",\n                    regex: /%[QWX]?([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"qStateWithInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"constant.other.symbol.ruby\",\n                    regex: /%[si]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"sStateWithoutInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"constant.other.symbol.ruby\",\n                    regex: /%[SI]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"sStateWithInterpolation\";\n                        return this.token;\n                    }\n                }, {\n                    token: \"string.regexp\",\n                    regex: /%[r]([(\\[<{^|%])/, onMatch: function (val, state, stack) {\n                        if (stack.length)\n                            stack = [];\n                        var paren = val[val.length - 1];\n                        stack.unshift(paren, state);\n                        this.next = \"rState\";\n                        return this.token;\n                    }\n                }],\n            {\n                token: \"punctuation\",\n                regex: \"::\"\n            },\n            instanceVariable,\n            {\n                token: \"variable.global\",\n                regex: \"[$][a-zA-Z_\\\\d]+\"\n            }, {\n                token: \"support.class\",\n                regex: \"[A-Z][a-zA-Z_\\\\d]*\"\n            }, {\n                token: [\"punctuation.operator\", \"support.function\"],\n                regex: /(\\.)([a-zA-Z_\\d]+)(?=\\()/\n            }, {\n                token: [\"punctuation.operator\", \"identifier\"],\n                regex: /(\\.)([a-zA-Z_][a-zA-Z_\\d]*)/\n            }, {\n                token: \"string.character\",\n                regex: \"\\\\B\\\\?(?:\" + escapedChars + \"|\\\\S)\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /\\?(?=.+:)/\n            },\n            constantNumericRational,\n            constantNumericComplex,\n            constantOtherSymbol,\n            constantNumericHex,\n            constantNumericFloat,\n            constantNumericBinary,\n            constantNumericDecimal,\n            constantNumericOctal,\n            {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"punctuation.separator.key-value\",\n                regex: \"=>\"\n            }, {\n                stateName: \"heredoc\",\n                onMatch: function (value, currentState, stack) {\n                    var next = (value[2] == '-' || value[2] == '~') ? \"indentedHeredoc\" : \"heredoc\";\n                    var tokens = value.split(this.splitRegex);\n                    stack.push(next, tokens[3]);\n                    return [\n                        { type: \"constant\", value: tokens[1] },\n                        { type: \"string\", value: tokens[2] },\n                        { type: \"support.class\", value: tokens[3] },\n                        { type: \"string\", value: tokens[4] }\n                    ];\n                },\n                regex: \"(<<[-~]?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",\n                rules: {\n                    heredoc: [{\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }],\n                    indentedHeredoc: [{\n                            token: \"string\",\n                            regex: \"^ +\"\n                        }, {\n                            onMatch: function (value, currentState, stack) {\n                                if (value === stack[1]) {\n                                    stack.shift();\n                                    stack.shift();\n                                    this.next = stack[0] || \"start\";\n                                    return \"support.class\";\n                                }\n                                this.next = \"\";\n                                return \"string\";\n                            },\n                            regex: \".*$\",\n                            next: \"start\"\n                        }]\n                }\n            }, {\n                regex: \"$\",\n                token: \"empty\",\n                next: function (currentState, stack) {\n                    if (stack[0] === \"heredoc\" || stack[0] === \"indentedHeredoc\")\n                        return stack[0];\n                    return currentState;\n                }\n            }, {\n                token: \"keyword.operator\",\n                regex: \"!|\\\\$|%|&|\\\\*|/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\||\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\",\n                onMatch: function (value, currentState, stack) {\n                    this.next = '';\n                    if (value == \"}\" && stack.length > 1 && stack[1] != \"start\") {\n                        stack.shift();\n                        this.next = stack.shift();\n                    }\n                    return this.token;\n                }\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.multiline\",\n                regex: \"^=end(?=$|\\\\s.*$)\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \".+\"\n            }\n        ],\n        \"qStateWithInterpolation\": [{\n                token: \"string.start\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"string\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapedChars\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"string.end\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"string\";\n                }\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"qStateWithoutInterpolation\": [{\n                token: \"string.start\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"string\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\['\\\\]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"string.end\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"string\";\n                }\n            }, {\n                defaultToken: \"string\"\n            }],\n        \"sStateWithoutInterpolation\": [{\n                token: \"constant.other.symbol.ruby\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                token: \"constant.other.symbol.ruby\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                defaultToken: \"constant.other.symbol.ruby\"\n            }],\n        \"sStateWithInterpolation\": [{\n                token: \"constant.other.symbol.ruby\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                token: \"constant.language.escape\",\n                regex: escapedChars\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\./\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"constant.other.symbol.ruby\",\n                regex: /[)\\]>}^|%]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.other.symbol.ruby\";\n                }\n            }, {\n                defaultToken: \"constant.other.symbol.ruby\"\n            }],\n        \"rState\": [{\n                token: \"string.regexp\",\n                regex: /[(\\[<{]/, onMatch: function (val, state, stack) {\n                    if (stack.length && val === stack[0]) {\n                        stack.unshift(val, state);\n                        return this.token;\n                    }\n                    return \"constant.language.escape\";\n                }\n            }, {\n                token: \"paren.start\",\n                regex: /#{/,\n                push: \"start\"\n            }, {\n                token: \"string.regexp\",\n                regex: /\\//\n            }, {\n                token: \"string.regexp\",\n                regex: /[)\\]>}^|%][imxouesn]*/, onMatch: function (val, state, stack) {\n                    if (stack.length && val[0] === closeParen[stack[0]]) {\n                        stack.shift();\n                        this.next = stack.shift();\n                        return this.token;\n                    }\n                    this.next = '';\n                    return \"constant.language.escape\";\n                }\n            },\n            { include: \"regex\" },\n            {\n                defaultToken: \"string.regexp\"\n            }],\n        \"regex\": [\n            {\n                token: \"regexp.keyword\",\n                regex: /\\\\[wWdDhHsS]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\[AGbBzZ]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\\\g<[a-zA-Z0-9]*>/\n            }, {\n                token: [\"constant.language.escape\", \"regexp.keyword\", \"constant.language.escape\"],\n                regex: /(\\\\p{\\^?)(Alnum|Alpha|Blank|Cntrl|Digit|Graph|Lower|Print|Punct|Space|Upper|XDigit|Word|ASCII|Any|Assigned|Arabic|Armenian|Balinese|Bengali|Bopomofo|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Ethiopic|Georgian|Glagolitic|Gothic|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hebrew|Hiragana|Inherited|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Lao|Latin|Lepcha|Limbu|Linear_B|Lycian|Lydian|Malayalam|Mongolian|Myanmar|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Italic|Old_Persian|Oriya|Osmanya|Phags_Pa|Phoenician|Rejang|Runic|Saurashtra|Shavian|Sinhala|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Ugaritic|Vai|Yi|Ll|Lm|Lt|Lu|Lo|Mn|Mc|Me|Nd|Nl|Pc|Pd|Ps|Pe|Pi|Pf|Po|No|Sm|Sc|Sk|So|Zs|Zl|Zp|Cc|Cf|Cn|Co|Cs|N|L|M|P|S|Z|C)(})/\n            }, {\n                token: [\"constant.language.escape\", \"invalid\", \"constant.language.escape\"],\n                regex: /(\\\\p{\\^?)([^/]*)(})/\n            }, {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: /[/][imxouesn]*/,\n                next: \"start\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?(?:[:=!>]|<'?[a-zA-Z]*'?>|<[=!])|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"regexp.keyword\",\n                regex: /\\[\\[:(?:alnum|alpha|blank|cntrl|digit|graph|lower|print|punct|space|upper|xdigit|word|ascii):\\]\\]/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                push: \"regex_character_class\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.keyword\",\n                regex: /\\\\[wWdDhHsS]/\n            }, {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: /&?&?\\[\\^?/,\n                push: \"regex_character_class\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                defaultToken: \"string.regexp.characterclass\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(RubyHighlightRules, TextHighlightRules);\nexports.RubyHighlightRules = RubyHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar FoldMode = exports.FoldMode = function () {\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.indentKeywords = {\n        \"class\": 1,\n        \"def\": 1,\n        \"module\": 1,\n        \"do\": 1,\n        \"unless\": 1,\n        \"if\": 1,\n        \"while\": 1,\n        \"for\": 1,\n        \"until\": 1,\n        \"begin\": 1,\n        \"else\": 0,\n        \"elsif\": 0,\n        \"rescue\": 0,\n        \"ensure\": 0,\n        \"when\": 0,\n        \"end\": -1,\n        \"case\": 1,\n        \"=begin\": 1,\n        \"=end\": -1\n    };\n    this.foldingStartMarker = /(?:\\s|^)(def|do|while|class|unless|module|if|for|until|begin|else|elsif|case|rescue|ensure|when)\\b|({\\s*$)|(=begin)/;\n    this.foldingStopMarker = /(=end(?=$|\\s.*$))|(^\\s*})|\\b(end)\\b/;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n        if (isStart && !isEnd) {\n            var match = line.match(this.foldingStartMarker);\n            if (match[1]) {\n                if (match[1] == \"if\" || match[1] == \"else\" || match[1] == \"while\" || match[1] == \"until\" || match[1] == \"unless\") {\n                    if (match[1] == \"else\" && /^\\s*else\\s*$/.test(line) === false) {\n                        return;\n                    }\n                    if (/^\\s*(?:if|else|while|until|unless)\\s*/.test(line) === false) {\n                        return;\n                    }\n                }\n                if (match[1] == \"when\") {\n                    if (/\\sthen\\s/.test(line) === true) {\n                        return;\n                    }\n                }\n                if (session.getTokenAt(row, match.index + 2).type === \"keyword\")\n                    return \"start\";\n            }\n            else if (match[3]) {\n                if (session.getTokenAt(row, match.index + 1).type === \"comment.multiline\")\n                    return \"start\";\n            }\n            else {\n                return \"start\";\n            }\n        }\n        if (foldStyle != \"markbeginend\" || !isEnd || isStart && isEnd)\n            return \"\";\n        var match = line.match(this.foldingStopMarker);\n        if (match[3] === \"end\") {\n            if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                return \"end\";\n        }\n        else if (match[1]) {\n            if (session.getTokenAt(row, match.index + 1).type === \"comment.multiline\")\n                return \"end\";\n        }\n        else\n            return \"end\";\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.doc.getLine(row);\n        var match = this.foldingStartMarker.exec(line);\n        if (match) {\n            if (match[1] || match[3])\n                return this.rubyBlock(session, row, match.index + 2);\n            return this.openingBracketBlock(session, \"{\", row, match.index);\n        }\n        var match = this.foldingStopMarker.exec(line);\n        if (match) {\n            if (match[3] === \"end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"keyword\")\n                    return this.rubyBlock(session, row, match.index + 1);\n            }\n            if (match[1] === \"=end\") {\n                if (session.getTokenAt(row, match.index + 1).type === \"comment.multiline\")\n                    return this.rubyBlock(session, row, match.index + 1);\n            }\n            return this.closingBracketBlock(session, \"}\", row, match.index + match[0].length);\n        }\n    };\n    this.rubyBlock = function (session, row, column, tokenRange) {\n        var stream = new TokenIterator(session, row, column);\n        var token = stream.getCurrentToken();\n        if (!token || (token.type != \"keyword\" && token.type != \"comment.multiline\"))\n            return;\n        var val = token.value;\n        var line = session.getLine(row);\n        switch (token.value) {\n            case \"if\":\n            case \"unless\":\n            case \"while\":\n            case \"until\":\n                var checkToken = new RegExp(\"^\\\\s*\" + token.value);\n                if (!checkToken.test(line)) {\n                    return;\n                }\n                var dir = this.indentKeywords[val];\n                break;\n            case \"when\":\n                if (/\\sthen\\s/.test(line)) {\n                    return;\n                }\n            case \"elsif\":\n            case \"rescue\":\n            case \"ensure\":\n                var dir = 1;\n                break;\n            case \"else\":\n                var checkToken = new RegExp(\"^\\\\s*\" + token.value + \"\\\\s*$\");\n                if (!checkToken.test(line)) {\n                    return;\n                }\n                var dir = 1;\n                break;\n            default:\n                var dir = this.indentKeywords[val];\n                break;\n        }\n        var stack = [val];\n        if (!dir)\n            return;\n        var startColumn = dir === -1 ? session.getLine(row - 1).length : session.getLine(row).length;\n        var startRow = row;\n        var ranges = [];\n        ranges.push(stream.getCurrentTokenRange());\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        if (token.type == \"comment.multiline\") {\n            while (token = stream.step()) {\n                if (token.type !== \"comment.multiline\")\n                    continue;\n                if (dir == 1) {\n                    startColumn = 6;\n                    if (token.value == \"=end\") {\n                        break;\n                    }\n                }\n                else {\n                    if (token.value == \"=begin\") {\n                        break;\n                    }\n                }\n            }\n        }\n        else {\n            while (token = stream.step()) {\n                var ignore = false;\n                if (token.type !== \"keyword\")\n                    continue;\n                var level = dir * this.indentKeywords[token.value];\n                line = session.getLine(stream.getCurrentTokenRow());\n                switch (token.value) {\n                    case \"do\":\n                        for (var i = stream.$tokenIndex - 1; i >= 0; i--) {\n                            var prevToken = stream.$rowTokens[i];\n                            if (prevToken && (prevToken.value == \"while\" || prevToken.value == \"until\" || prevToken.value == \"for\")) {\n                                level = 0;\n                                break;\n                            }\n                        }\n                        break;\n                    case \"else\":\n                        var checkToken = new RegExp(\"^\\\\s*\" + token.value + \"\\\\s*$\");\n                        if (!checkToken.test(line) || val == \"case\") {\n                            level = 0;\n                            ignore = true;\n                        }\n                        break;\n                    case \"if\":\n                    case \"unless\":\n                    case \"while\":\n                    case \"until\":\n                        var checkToken = new RegExp(\"^\\\\s*\" + token.value);\n                        if (!checkToken.test(line)) {\n                            level = 0;\n                            ignore = true;\n                        }\n                        break;\n                    case \"when\":\n                        if (/\\sthen\\s/.test(line) || val == \"case\") {\n                            level = 0;\n                            ignore = true;\n                        }\n                        break;\n                }\n                if (level > 0) {\n                    stack.unshift(token.value);\n                }\n                else if (level <= 0 && ignore === false) {\n                    stack.shift();\n                    if (!stack.length) {\n                        if ((val == \"while\" || val == \"until\" || val == \"for\") && token.value != \"do\") {\n                            break;\n                        }\n                        if (token.value == \"do\" && dir == -1 && level != 0)\n                            break;\n                        if (token.value != \"do\")\n                            break;\n                    }\n                    if (level === 0) {\n                        stack.unshift(token.value);\n                    }\n                }\n            }\n        }\n        if (!token)\n            return null;\n        if (tokenRange) {\n            ranges.push(stream.getCurrentTokenRange());\n            return ranges;\n        }\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1) {\n            if (token.type === \"comment.multiline\") {\n                var endColumn = 6;\n            }\n            else {\n                var endColumn = session.getLine(row).length;\n            }\n            return new Range(row, endColumn, startRow - 1, startColumn);\n        }\n        else\n            return new Range(startRow, startColumn, row - 1, session.getLine(row - 1).length);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/ruby\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar RubyHighlightRules = require(\"./ruby_highlight_rules\").RubyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/ruby\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = RubyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new FoldMode();\n    this.indentKeywords = this.foldingRules.indentKeywords;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            var startingClassOrMethod = line.match(/^\\s*(class|def|module)\\s.*$/);\n            var startingDoBlock = line.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/);\n            var startingConditional = line.match(/^\\s*(if|else|when|elsif|unless|while|for|begin|rescue|ensure)\\s*/);\n            if (match || startingClassOrMethod || startingDoBlock || startingConditional) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return /^\\s+(end|else|rescue|ensure)$/.test(line + input) || this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, session, row) {\n        var line = session.getLine(row);\n        if (/}/.test(line))\n            return this.$outdent.autoOutdent(session, row);\n        var indent = this.$getIndent(line);\n        var prevLine = session.getLine(row - 1);\n        var prevIndent = this.$getIndent(prevLine);\n        var tab = session.getTabString();\n        if (prevIndent.length <= indent.length) {\n            if (indent.slice(-tab.length) == tab)\n                session.remove(new Range(row, indent.length - tab.length, row, indent.length));\n        }\n    };\n    this.getMatching = function (session, row, column) {\n        if (row == undefined) {\n            var pos = session.selection.lead;\n            column = pos.column;\n            row = pos.row;\n        }\n        var startToken = session.getTokenAt(row, column);\n        if (startToken && startToken.value in this.indentKeywords)\n            return this.foldingRules.rubyBlock(session, row, column, true);\n    };\n    this.$id = \"ace/mode/ruby\";\n    this.snippetFileId = \"ace/snippets/ruby\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/slim\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/slim_highlight_rules\",\"ace/mode/javascript\",\"ace/mode/markdown\",\"ace/mode/coffee\",\"ace/mode/scss\",\"ace/mode/sass\",\"ace/mode/less\",\"ace/mode/ruby\",\"ace/mode/css\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SlimHighlightRules = require(\"./slim_highlight_rules\").SlimHighlightRules;\nvar Mode = function () {\n    TextMode.call(this);\n    this.HighlightRules = SlimHighlightRules;\n    this.createModeDelegates({\n        javascript: require(\"./javascript\").Mode,\n        markdown: require(\"./markdown\").Mode,\n        coffee: require(\"./coffee\").Mode,\n        scss: require(\"./scss\").Mode,\n        sass: require(\"./sass\").Mode,\n        less: require(\"./less\").Mode,\n        ruby: require(\"./ruby\").Mode,\n        css: require(\"./css\").Mode\n    });\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/slim\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/slim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-smarty.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/smarty_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from https://raw.github.com/amitsnyderman/sublime-smarty/master/Syntaxes/Smarty.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar SmartyHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var smartyRules = { start: [{ include: '#comments' },\n            { include: '#blocks' }],\n        '#blocks': [{ token: 'punctuation.section.embedded.begin.smarty',\n                regex: '\\\\{%?',\n                push: [{ token: 'punctuation.section.embedded.end.smarty',\n                        regex: '%?\\\\}',\n                        next: 'pop' },\n                    { include: '#strings' },\n                    { include: '#variables' },\n                    { include: '#lang' },\n                    { defaultToken: 'source.smarty' }] }],\n        '#comments': [{ token: ['punctuation.definition.comment.smarty',\n                    'comment.block.smarty'],\n                regex: '(\\\\{%?)(\\\\*)',\n                push: [{ token: 'comment.block.smarty', regex: '\\\\*%?\\\\}', next: 'pop' },\n                    { defaultToken: 'comment.block.smarty' }] }],\n        '#lang': [{ token: 'keyword.operator.smarty',\n                regex: '(?:!=|!|<=|>=|<|>|===|==|%|&&|\\\\|\\\\|)|\\\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod)\\\\b' },\n            { token: 'constant.language.smarty',\n                regex: '\\\\b(?:TRUE|FALSE|true|false)\\\\b' },\n            { token: 'keyword.control.smarty',\n                regex: '\\\\b(?:if|else|elseif|foreach|foreachelse|section|switch|case|break|default)\\\\b' },\n            { token: 'variable.parameter.smarty', regex: '\\\\b[a-zA-Z]+=' },\n            { token: 'support.function.built-in.smarty',\n                regex: '\\\\b(?:capture|config_load|counter|cycle|debug|eval|fetch|include_php|include|insert|literal|math|strip|rdelim|ldelim|assign|constant|block|html_[a-z_]*)\\\\b' },\n            { token: 'support.function.variable-modifier.smarty',\n                regex: '\\\\|(?:capitalize|cat|count_characters|count_paragraphs|count_sentences|count_words|date_format|default|escape|indent|lower|nl2br|regex_replace|replace|spacify|string_format|strip_tags|strip|truncate|upper|wordwrap)' }],\n        '#strings': [{ token: 'punctuation.definition.string.begin.smarty',\n                regex: '\\'',\n                push: [{ token: 'punctuation.definition.string.end.smarty',\n                        regex: '\\'',\n                        next: 'pop' },\n                    { token: 'constant.character.escape.smarty', regex: '\\\\\\\\.' },\n                    { defaultToken: 'string.quoted.single.smarty' }] },\n            { token: 'punctuation.definition.string.begin.smarty',\n                regex: '\"',\n                push: [{ token: 'punctuation.definition.string.end.smarty',\n                        regex: '\"',\n                        next: 'pop' },\n                    { token: 'constant.character.escape.smarty', regex: '\\\\\\\\.' },\n                    { defaultToken: 'string.quoted.double.smarty' }] }],\n        '#variables': [{ token: ['punctuation.definition.variable.smarty',\n                    'variable.other.global.smarty'],\n                regex: '\\\\b(\\\\$)(Smarty\\\\.)' },\n            { token: ['punctuation.definition.variable.smarty',\n                    'variable.other.smarty'],\n                regex: '(\\\\$)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b' },\n            { token: ['keyword.operator.smarty', 'variable.other.property.smarty'],\n                regex: '(->)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b' },\n            { token: ['keyword.operator.smarty',\n                    'meta.function-call.object.smarty',\n                    'punctuation.definition.variable.smarty',\n                    'variable.other.smarty',\n                    'punctuation.definition.variable.smarty'],\n                regex: '(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\\\()(.*?)(\\\\))' }] };\n    var smartyStart = smartyRules.start;\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift.apply(this.$rules[rule], smartyStart);\n    }\n    Object.keys(smartyRules).forEach(function (x) {\n        if (!this.$rules[x])\n            this.$rules[x] = smartyRules[x];\n    }, this);\n    this.normalizeRules();\n};\nSmartyHighlightRules.metaData = { fileTypes: ['tpl'],\n    foldingStartMarker: '\\\\{%?',\n    foldingStopMarker: '%?\\\\}',\n    name: 'Smarty',\n    scopeName: 'text.html.smarty' };\noop.inherits(SmartyHighlightRules, HtmlHighlightRules);\nexports.SmartyHighlightRules = SmartyHighlightRules;\n\n});\n\nace.define(\"ace/mode/smarty\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/smarty_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar SmartyHighlightRules = require(\"./smarty_highlight_rules\").SmartyHighlightRules;\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = SmartyHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.$id = \"ace/mode/smarty\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/smarty\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-smithy.js",
    "content": "ace.define(\"ace/mode/smithy_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from https://raw.githubusercontent.com/awslabs/smithy-vscode/master/syntaxes/smithy.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SmithyHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                include: \"#comment\"\n            }, {\n                token: [\n                    \"meta.keyword.statement.smithy\",\n                    \"variable.other.smithy\",\n                    \"text\",\n                    \"keyword.operator.smithy\"\n                ],\n                regex: /^(\\$)(\\s+.+)(\\s*)(=)/\n            }, {\n                token: [\n                    \"keyword.statement.smithy\",\n                    \"text\",\n                    \"entity.name.type.namespace.smithy\"\n                ],\n                regex: /^(namespace)(\\s+)([A-Z-a-z0-9_\\.#$-]+)/\n            }, {\n                token: [\n                    \"keyword.statement.smithy\",\n                    \"text\",\n                    \"keyword.statement.smithy\",\n                    \"text\",\n                    \"entity.name.type.smithy\"\n                ],\n                regex: /^(use)(\\s+)(shape|trait)(\\s+)([A-Z-a-z0-9_\\.#$-]+)\\b/\n            }, {\n                token: [\n                    \"keyword.statement.smithy\",\n                    \"variable.other.smithy\",\n                    \"text\",\n                    \"keyword.operator.smithy\"\n                ],\n                regex: /^(metadata)(\\s+.+)(\\s*)(=)/\n            }, {\n                token: [\n                    \"keyword.statement.smithy\",\n                    \"text\",\n                    \"entity.name.type.smithy\"\n                ],\n                regex: /^(apply|byte|short|integer|long|float|double|bigInteger|bigDecimal|boolean|blob|string|timestamp|service|resource|trait|list|map|set|structure|union|document)(\\s+)([A-Z-a-z0-9_\\.#$-]+)\\b/\n            }, {\n                token: [\n                    \"keyword.operator.smithy\",\n                    \"text\",\n                    \"entity.name.type.smithy\",\n                    \"text\",\n                    \"text\",\n                    \"support.function.smithy\",\n                    \"text\",\n                    \"text\",\n                    \"support.function.smithy\"\n                ],\n                regex: /^(operation)(\\s+)([A-Z-a-z0-9_\\.#$-]+)(\\(.*\\))(?:(\\s*)(->)(\\s*[A-Z-a-z0-9_\\.#$-]+))?(?:(\\s+)(errors))?/\n            }, {\n                include: \"#trait\"\n            }, {\n                token: [\n                    \"support.type.property-name.smithy\",\n                    \"punctuation.separator.dictionary.pair.smithy\"\n                ],\n                regex: /([A-Z-a-z0-9_\\.#$-]+)(:)/\n            }, {\n                include: \"#value\"\n            }, {\n                token: \"keyword.other.smithy\",\n                regex: /\\->/\n            }],\n        \"#comment\": [{\n                include: \"#doc_comment\"\n            }, {\n                include: \"#line_comment\"\n            }],\n        \"#doc_comment\": [{\n                token: \"comment.block.documentation.smithy\",\n                regex: /\\/\\/\\/.*/\n            }],\n        \"#line_comment\": [{\n                token: \"comment.line.double-slash.smithy\",\n                regex: /\\/\\/.*/\n            }],\n        \"#trait\": [{\n                token: [\n                    \"punctuation.definition.annotation.smithy\",\n                    \"storage.type.annotation.smithy\"\n                ],\n                regex: /(@)([0-9a-zA-Z\\.#-]+)/\n            }, {\n                token: [\n                    \"punctuation.definition.annotation.smithy\",\n                    \"punctuation.definition.object.end.smithy\",\n                    \"meta.structure.smithy\"\n                ],\n                regex: /(@)([0-9a-zA-Z\\.#-]+)(\\()/,\n                push: [{\n                        token: \"punctuation.definition.object.end.smithy\",\n                        regex: /\\)/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#value\"\n                    }, {\n                        include: \"#object_inner\"\n                    }, {\n                        defaultToken: \"meta.structure.smithy\"\n                    }]\n            }],\n        \"#value\": [{\n                include: \"#constant\"\n            }, {\n                include: \"#number\"\n            }, {\n                include: \"#string\"\n            }, {\n                include: \"#array\"\n            }, {\n                include: \"#object\"\n            }],\n        \"#array\": [{\n                token: \"punctuation.definition.array.begin.smithy\",\n                regex: /\\[/,\n                push: [{\n                        token: \"punctuation.definition.array.end.smithy\",\n                        regex: /\\]/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#comment\"\n                    }, {\n                        include: \"#value\"\n                    }, {\n                        token: \"punctuation.separator.array.smithy\",\n                        regex: /,/\n                    }, {\n                        token: \"invalid.illegal.expected-array-separator.smithy\",\n                        regex: /[^\\s\\]]/\n                    }, {\n                        defaultToken: \"meta.structure.array.smithy\"\n                    }]\n            }],\n        \"#constant\": [{\n                token: \"constant.language.smithy\",\n                regex: /\\b(?:true|false|null)\\b/\n            }],\n        \"#number\": [{\n                token: \"constant.numeric.smithy\",\n                regex: /-?(?:0|[1-9]\\d*)(?:(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)?/\n            }],\n        \"#object\": [{\n                token: \"punctuation.definition.dictionary.begin.smithy\",\n                regex: /\\{/,\n                push: [{\n                        token: \"punctuation.definition.dictionary.end.smithy\",\n                        regex: /\\}/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#trait\"\n                    }, {\n                        include: \"#object_inner\"\n                    }, {\n                        defaultToken: \"meta.structure.dictionary.smithy\"\n                    }]\n            }],\n        \"#object_inner\": [{\n                include: \"#comment\"\n            }, {\n                include: \"#string_key\"\n            }, {\n                token: \"punctuation.separator.dictionary.key-value.smithy\",\n                regex: /:/,\n                push: [{\n                        token: \"punctuation.separator.dictionary.pair.smithy\",\n                        regex: /,|(?=\\})/,\n                        next: \"pop\"\n                    }, {\n                        include: \"#value\"\n                    }, {\n                        token: \"invalid.illegal.expected-dictionary-separator.smithy\",\n                        regex: /[^\\s,]/\n                    }, {\n                        defaultToken: \"meta.structure.dictionary.value.smithy\"\n                    }]\n            }, {\n                token: \"invalid.illegal.expected-dictionary-separator.smithy\",\n                regex: /[^\\s\\}]/\n            }],\n        \"#string_key\": [{\n                include: \"#identifier_key\"\n            }, {\n                include: \"#dquote_key\"\n            }, {\n                include: \"#squote_key\"\n            }],\n        \"#identifier_key\": [{\n                token: \"support.type.property-name.smithy\",\n                regex: /[A-Z-a-z0-9_\\.#$-]+/\n            }],\n        \"#dquote_key\": [{\n                include: \"#dquote\"\n            }],\n        \"#squote_key\": [{\n                include: \"#squote\"\n            }],\n        \"#string\": [{\n                include: \"#textblock\"\n            }, {\n                include: \"#dquote\"\n            }, {\n                include: \"#squote\"\n            }, {\n                include: \"#identifier\"\n            }],\n        \"#textblock\": [{\n                token: \"punctuation.definition.string.begin.smithy\",\n                regex: /\"\"\"/,\n                push: [{\n                        token: \"punctuation.definition.string.end.smithy\",\n                        regex: /\"\"\"/,\n                        next: \"pop\"\n                    }, {\n                        token: \"constant.character.escape.smithy\",\n                        regex: /\\\\./\n                    }, {\n                        defaultToken: \"string.quoted.double.smithy\"\n                    }]\n            }],\n        \"#dquote\": [{\n                token: \"punctuation.definition.string.begin.smithy\",\n                regex: /\"/,\n                push: [{\n                        token: \"punctuation.definition.string.end.smithy\",\n                        regex: /\"/,\n                        next: \"pop\"\n                    }, {\n                        token: \"constant.character.escape.smithy\",\n                        regex: /\\\\./\n                    }, {\n                        defaultToken: \"string.quoted.double.smithy\"\n                    }]\n            }],\n        \"#squote\": [{\n                token: \"punctuation.definition.string.begin.smithy\",\n                regex: /'/,\n                push: [{\n                        token: \"punctuation.definition.string.end.smithy\",\n                        regex: /'/,\n                        next: \"pop\"\n                    }, {\n                        token: \"constant.character.escape.smithy\",\n                        regex: /\\\\./\n                    }, {\n                        defaultToken: \"string.quoted.single.smithy\"\n                    }]\n            }],\n        \"#identifier\": [{\n                token: \"storage.type.smithy\",\n                regex: /[A-Z-a-z_][A-Z-a-z0-9_\\.#$-]*/\n            }]\n    };\n    this.normalizeRules();\n};\nSmithyHighlightRules.metaData = {\n    name: \"Smithy\",\n    fileTypes: [\"smithy\"],\n    scopeName: \"source.smithy\",\n    foldingStartMarker: \"(\\\\{|\\\\[)\\\\s*\",\n    foldingStopMarker: \"\\\\s*(\\\\}|\\\\])\"\n};\noop.inherits(SmithyHighlightRules, TextHighlightRules);\nexports.SmithyHighlightRules = SmithyHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/smithy\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/smithy_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SmithyHighlightRules = require(\"./smithy_highlight_rules\").SmithyHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = SmithyHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.$quotes = { '\"': '\"' };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/smithy\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/smithy\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-snippets.js",
    "content": "ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SnippetHighlightRules = function () {\n    var builtins = \"SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|\" +\n        \"LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME\";\n    this.$rules = {\n        \"start\": [\n            { token: \"constant.language.escape\", regex: /\\\\[\\$}`\\\\]/ },\n            { token: \"keyword\", regex: \"\\\\$(?:TM_)?(?:\" + builtins + \")\\\\b\" },\n            { token: \"variable\", regex: \"\\\\$\\\\w+\" },\n            { onMatch: function (value, state, stack) {\n                    if (stack[1])\n                        stack[1]++;\n                    else\n                        stack.unshift(state, 1);\n                    return this.tokenName;\n                }, tokenName: \"markup.list\", regex: \"\\\\${\", next: \"varDecl\" },\n            { onMatch: function (value, state, stack) {\n                    if (!stack[1])\n                        return \"text\";\n                    stack[1]--;\n                    if (!stack[1])\n                        stack.splice(0, 2);\n                    return this.tokenName;\n                }, tokenName: \"markup.list\", regex: \"}\" },\n            { token: \"doc.comment\", regex: /^\\${2}-{5,}$/ }\n        ],\n        \"varDecl\": [\n            { regex: /\\d+\\b/, token: \"constant.numeric\" },\n            { token: \"keyword\", regex: \"(?:TM_)?(?:\" + builtins + \")\\\\b\" },\n            { token: \"variable\", regex: \"\\\\w+\" },\n            { regex: /:/, token: \"punctuation.operator\", next: \"start\" },\n            { regex: /\\//, token: \"string.regex\", next: \"regexp\" },\n            { regex: \"\", next: \"start\" }\n        ],\n        \"regexp\": [\n            { regex: /\\\\./, token: \"escape\" },\n            { regex: /\\[/, token: \"regex.start\", next: \"charClass\" },\n            { regex: \"/\", token: \"string.regex\", next: \"format\" },\n            { \"token\": \"string.regex\", regex: \".\" }\n        ],\n        charClass: [\n            { regex: \"\\\\.\", token: \"escape\" },\n            { regex: \"\\\\]\", token: \"regex.end\", next: \"regexp\" },\n            { \"token\": \"string.regex\", regex: \".\" }\n        ],\n        \"format\": [\n            { regex: /\\\\[ulULE]/, token: \"keyword\" },\n            { regex: /\\$\\d+/, token: \"variable\" },\n            { regex: \"/[gim]*:?\", token: \"string.regex\", next: \"start\" },\n            { \"token\": \"string\", regex: \".\" }\n        ]\n    };\n};\noop.inherits(SnippetHighlightRules, TextHighlightRules);\nexports.SnippetHighlightRules = SnippetHighlightRules;\nvar SnippetGroupHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            { token: \"text\", regex: \"^\\\\t\", next: \"sn-start\" },\n            { token: \"invalid\", regex: /^ \\s*/ },\n            { token: \"comment\", regex: /^#.*/ },\n            { token: \"constant.language.escape\", regex: \"^regex \", next: \"regex\" },\n            { token: \"constant.language.escape\", regex: \"^(trigger|endTrigger|name|snippet|guard|endGuard|tabTrigger|key)\\\\b\" }\n        ],\n        \"regex\": [\n            { token: \"text\", regex: \"\\\\.\" },\n            { token: \"keyword\", regex: \"/\" },\n            { token: \"empty\", regex: \"$\", next: \"start\" }\n        ]\n    };\n    this.embedRules(SnippetHighlightRules, \"sn-\", [\n        { token: \"text\", regex: \"^\\\\t\", next: \"sn-start\" },\n        { onMatch: function (value, state, stack) {\n                stack.splice(stack.length);\n                return this.tokenName;\n            }, tokenName: \"text\", regex: \"^(?!\\t)\", next: \"start\" }\n    ]);\n};\noop.inherits(SnippetGroupHighlightRules, TextHighlightRules);\nexports.SnippetGroupHighlightRules = SnippetGroupHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = SnippetGroupHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$indentWithTabs = true;\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/snippets\";\n    this.snippetFileId = \"ace/snippets/snippets\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/snippets\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-soy_template.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/soy_template_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from tm bundles\\SoyTemplate\\Syntaxes\\SoyTemplate.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar SoyTemplateHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var soyRules = { start: [{ include: '#template' },\n            { include: '#if' },\n            { include: '#comment-line' },\n            { include: '#comment-block' },\n            { include: '#comment-doc' },\n            { include: '#call' },\n            { include: '#css' },\n            { include: '#param' },\n            { include: '#print' },\n            { include: '#msg' },\n            { include: '#for' },\n            { include: '#foreach' },\n            { include: '#switch' },\n            { include: '#tag' },\n            { include: 'text.html.basic' }],\n        '#call': [{ token: ['punctuation.definition.tag.begin.soy',\n                    'meta.tag.call.soy'],\n                regex: '(\\\\{/?)(\\\\s*)(?=call|delcall)',\n                push: [{ token: 'punctuation.definition.tag.end.soy',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { include: '#string-quoted-single' },\n                    { include: '#string-quoted-double' },\n                    { token: ['entity.name.tag.soy', 'variable.parameter.soy'],\n                        regex: '(call|delcall)(\\\\s+[\\\\.\\\\w]+)' },\n                    { token: ['entity.other.attribute-name.soy',\n                            'text',\n                            'keyword.operator.soy'],\n                        regex: '\\\\b(data)(\\\\s*)(=)' },\n                    { defaultToken: 'meta.tag.call.soy' }] }],\n        '#comment-line': [{ token: ['comment.line.double-slash.soy',\n                    'comment.line.double-slash.soy'],\n                regex: '(//)(.*$)' }],\n        '#comment-block': [{ token: 'punctuation.definition.comment.begin.soy',\n                regex: '/\\\\*(?!\\\\*)',\n                push: [{ token: 'punctuation.definition.comment.end.soy',\n                        regex: '\\\\*/',\n                        next: 'pop' },\n                    { defaultToken: 'comment.block.soy' }] }],\n        '#comment-doc': [{ token: 'punctuation.definition.comment.begin.soy',\n                regex: '/\\\\*\\\\*(?!/)',\n                push: [{ token: 'punctuation.definition.comment.end.soy',\n                        regex: '\\\\*/',\n                        next: 'pop' },\n                    { token: ['support.type.soy', 'text', 'variable.parameter.soy'],\n                        regex: '(@param|@param\\\\?)(\\\\s+)(\\\\w+)' },\n                    { defaultToken: 'comment.block.documentation.soy' }] }],\n        '#css': [{ token: ['punctuation.definition.tag.begin.soy',\n                    'meta.tag.css.soy',\n                    'entity.name.tag.soy'],\n                regex: '(\\\\{/?)(\\\\s*)(css)\\\\b',\n                push: [{ token: 'punctuation.definition.tag.end.soy',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { token: 'support.constant.soy',\n                        regex: '\\\\b(?:LITERAL|REFERENCE|BACKEND_SPECIFIC|GOOG)\\\\b' },\n                    { defaultToken: 'meta.tag.css.soy' }] }],\n        '#for': [{ token: ['punctuation.definition.tag.begin.soy',\n                    'meta.tag.for.soy',\n                    'entity.name.tag.soy'],\n                regex: '(\\\\{/?)(\\\\s*)(for)\\\\b',\n                push: [{ token: 'punctuation.definition.tag.end.soy',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { token: 'keyword.operator.soy', regex: '\\\\bin\\\\b' },\n                    { token: 'support.function.soy', regex: '\\\\brange\\\\b' },\n                    { include: '#variable' },\n                    { include: '#number' },\n                    { include: '#primitive' },\n                    { defaultToken: 'meta.tag.for.soy' }] }],\n        '#foreach': [{ token: ['punctuation.definition.tag.begin.soy',\n                    'meta.tag.foreach.soy',\n                    'entity.name.tag.soy'],\n                regex: '(\\\\{/?)(\\\\s*)(foreach)\\\\b',\n                push: [{ token: 'punctuation.definition.tag.end.soy',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { token: 'keyword.operator.soy', regex: '\\\\bin\\\\b' },\n                    { include: '#variable' },\n                    { defaultToken: 'meta.tag.foreach.soy' }] }],\n        '#function': [{ token: 'support.function.soy',\n                regex: '\\\\b(?:isFirst|isLast|index|hasData|length|keys|round|floor|ceiling|min|max|randomInt)\\\\b' }],\n        '#if': [{ token: ['punctuation.definition.tag.begin.soy',\n                    'meta.tag.if.soy',\n                    'entity.name.tag.soy'],\n                regex: '(\\\\{/?)(\\\\s*)(if|elseif)\\\\b',\n                push: [{ token: 'punctuation.definition.tag.end.soy',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { include: '#variable' },\n                    { include: '#operator' },\n                    { include: '#function' },\n                    { include: '#string-quoted-single' },\n                    { include: '#string-quoted-double' },\n                    { defaultToken: 'meta.tag.if.soy' }] }],\n        '#namespace': [{ token: ['entity.name.tag.soy', 'text', 'variable.parameter.soy'],\n                regex: '(namespace|delpackage)(\\\\s+)([\\\\w\\\\.]+)' }],\n        '#number': [{ token: 'constant.numeric', regex: '[\\\\d]+' }],\n        '#operator': [{ token: 'keyword.operator.soy',\n                regex: '==|!=|\\\\band\\\\b|\\\\bor\\\\b|\\\\bnot\\\\b|-|\\\\+|/|\\\\?:' }],\n        '#param': [{ token: ['punctuation.definition.tag.begin.soy',\n                    'meta.tag.param.soy',\n                    'entity.name.tag.soy'],\n                regex: '(\\\\{/?)(\\\\s*)(param)',\n                push: [{ token: 'punctuation.definition.tag.end.soy',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { include: '#variable' },\n                    { token: ['entity.other.attribute-name.soy',\n                            'text',\n                            'keyword.operator.soy'],\n                        regex: '\\\\b([\\\\w]+)(\\\\s*)((?::)?)' },\n                    { defaultToken: 'meta.tag.param.soy' }] }],\n        '#primitive': [{ token: 'constant.language.soy',\n                regex: '\\\\b(?:null|false|true)\\\\b' }],\n        '#msg': [{ token: ['punctuation.definition.tag.begin.soy',\n                    'meta.tag.msg.soy',\n                    'entity.name.tag.soy'],\n                regex: '(\\\\{/?)(\\\\s*)(msg)\\\\b',\n                push: [{ token: 'punctuation.definition.tag.end.soy',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { include: '#string-quoted-single' },\n                    { include: '#string-quoted-double' },\n                    { token: ['entity.other.attribute-name.soy',\n                            'text',\n                            'keyword.operator.soy'],\n                        regex: '\\\\b(meaning|desc)(\\\\s*)(=)' },\n                    { defaultToken: 'meta.tag.msg.soy' }] }],\n        '#print': [{ token: ['punctuation.definition.tag.begin.soy',\n                    'meta.tag.print.soy',\n                    'entity.name.tag.soy'],\n                regex: '(\\\\{/?)(\\\\s*)(print)\\\\b',\n                push: [{ token: 'punctuation.definition.tag.end.soy',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { include: '#variable' },\n                    { include: '#print-parameter' },\n                    { include: '#number' },\n                    { include: '#primitive' },\n                    { include: '#attribute-lookup' },\n                    { defaultToken: 'meta.tag.print.soy' }] }],\n        '#print-parameter': [{ token: 'keyword.operator.soy', regex: '\\\\|' },\n            { token: 'variable.parameter.soy',\n                regex: 'noAutoescape|id|escapeHtml|escapeJs|insertWorkBreaks|truncate' }],\n        '#special-character': [{ token: 'support.constant.soy',\n                regex: '\\\\bsp\\\\b|\\\\bnil\\\\b|\\\\\\\\r|\\\\\\\\n|\\\\\\\\t|\\\\blb\\\\b|\\\\brb\\\\b' }],\n        '#string-quoted-double': [{ token: 'string.quoted.double', regex: '\"[^\"]*\"' }],\n        '#string-quoted-single': [{ token: 'string.quoted.single', regex: '\\'[^\\']*\\'' }],\n        '#switch': [{ token: ['punctuation.definition.tag.begin.soy',\n                    'meta.tag.switch.soy',\n                    'entity.name.tag.soy'],\n                regex: '(\\\\{/?)(\\\\s*)(switch|case)\\\\b',\n                push: [{ token: 'punctuation.definition.tag.end.soy',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { include: '#variable' },\n                    { include: '#function' },\n                    { include: '#number' },\n                    { include: '#string-quoted-single' },\n                    { include: '#string-quoted-double' },\n                    { defaultToken: 'meta.tag.switch.soy' }] }],\n        '#attribute-lookup': [{ token: 'punctuation.definition.attribute-lookup.begin.soy',\n                regex: '\\\\[',\n                push: [{ token: 'punctuation.definition.attribute-lookup.end.soy',\n                        regex: '\\\\]',\n                        next: 'pop' },\n                    { include: '#variable' },\n                    { include: '#function' },\n                    { include: '#operator' },\n                    { include: '#number' },\n                    { include: '#primitive' },\n                    { include: '#string-quoted-single' },\n                    { include: '#string-quoted-double' }] }],\n        '#tag': [{ token: 'punctuation.definition.tag.begin.soy',\n                regex: '\\\\{',\n                push: [{ token: 'punctuation.definition.tag.end.soy',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { include: '#namespace' },\n                    { include: '#variable' },\n                    { include: '#special-character' },\n                    { include: '#tag-simple' },\n                    { include: '#function' },\n                    { include: '#operator' },\n                    { include: '#attribute-lookup' },\n                    { include: '#number' },\n                    { include: '#primitive' },\n                    { include: '#print-parameter' }] }],\n        '#tag-simple': [{ token: 'entity.name.tag.soy',\n                regex: '{{\\\\s*(?:literal|else|ifempty|default)\\\\s*(?=\\\\})' }],\n        '#template': [{ token: ['punctuation.definition.tag.begin.soy',\n                    'meta.tag.template.soy'],\n                regex: '(\\\\{/?)(\\\\s*)(?=template|deltemplate)',\n                push: [{ token: 'punctuation.definition.tag.end.soy',\n                        regex: '\\\\}',\n                        next: 'pop' },\n                    { token: ['entity.name.tag.soy', 'text', 'entity.name.function.soy'],\n                        regex: '(template|deltemplate)(\\\\s+)([\\\\.\\\\w]+)',\n                        originalRegex: '(?<=template|deltemplate)\\\\s+([\\\\.\\\\w]+)' },\n                    { token: ['entity.other.attribute-name.soy',\n                            'text',\n                            'keyword.operator.soy',\n                            'text',\n                            'string.quoted.double.soy'],\n                        regex: '\\\\b(private)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\")' },\n                    { token: ['entity.other.attribute-name.soy',\n                            'text',\n                            'keyword.operator.soy',\n                            'text',\n                            'string.quoted.single.soy'],\n                        regex: '\\\\b(private)(\\\\s*)(=)(\\\\s*)(\\'true\\'|\\'false\\')' },\n                    { token: ['entity.other.attribute-name.soy',\n                            'text',\n                            'keyword.operator.soy',\n                            'text',\n                            'string.quoted.double.soy'],\n                        regex: '\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\"|\"contextual\")' },\n                    { token: ['entity.other.attribute-name.soy',\n                            'text',\n                            'keyword.operator.soy',\n                            'text',\n                            'string.quoted.single.soy'],\n                        regex: '\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)(\\'true\\'|\\'false\\'|\\'contextual\\')' },\n                    { defaultToken: 'meta.tag.template.soy' }] }],\n        '#variable': [{ token: 'variable.other.soy', regex: '\\\\$[\\\\w\\\\.]+' }] };\n    for (var i in soyRules) {\n        if (this.$rules[i]) {\n            this.$rules[i].unshift.apply(this.$rules[i], soyRules[i]);\n        }\n        else {\n            this.$rules[i] = soyRules[i];\n        }\n    }\n    this.normalizeRules();\n};\nSoyTemplateHighlightRules.metaData = { comment: 'SoyTemplate',\n    fileTypes: ['soy'],\n    firstLineMatch: '\\\\{\\\\s*namespace\\\\b',\n    foldingStartMarker: '\\\\{\\\\s*template\\\\s+[^\\\\}]*\\\\}',\n    foldingStopMarker: '\\\\{\\\\s*/\\\\s*template\\\\s*\\\\}',\n    name: 'SoyTemplate',\n    scopeName: 'source.soy' };\noop.inherits(SoyTemplateHighlightRules, HtmlHighlightRules);\nexports.SoyTemplateHighlightRules = SoyTemplateHighlightRules;\n\n});\n\nace.define(\"ace/mode/soy_template\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/soy_template_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar SoyTemplateHighlightRules = require(\"./soy_template_highlight_rules\").SoyTemplateHighlightRules;\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = SoyTemplateHighlightRules;\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/soy_template\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/soy_template\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-space.js",
    "content": "ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/space_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SpaceHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"empty_line\",\n                regex: / */,\n                next: \"key\"\n            },\n            {\n                token: \"empty_line\",\n                regex: /$/,\n                next: \"key\"\n            }\n        ],\n        \"key\": [\n            {\n                token: \"variable\",\n                regex: /\\S+/\n            },\n            {\n                token: \"empty_line\",\n                regex: /$/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: / /,\n                next: \"value\"\n            }\n        ],\n        \"value\": [\n            {\n                token: \"keyword.operator\",\n                regex: /$/,\n                next: \"start\"\n            },\n            {\n                token: \"string\",\n                regex: /[^$]/\n            }\n        ]\n    };\n};\noop.inherits(SpaceHighlightRules, TextHighlightRules);\nexports.SpaceHighlightRules = SpaceHighlightRules;\n\n});\n\nace.define(\"ace/mode/space\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/folding/coffee\",\"ace/mode/space_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar SpaceHighlightRules = require(\"./space_highlight_rules\").SpaceHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = SpaceHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/space\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/space\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-sparql.js",
    "content": "ace.define(\"ace/mode/sparql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from sparql.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SPARQLHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                include: \"#comments\"\n            }, {\n                include: \"#strings\"\n            }, {\n                include: \"#string-language-suffixes\"\n            }, {\n                include: \"#string-datatype-suffixes\"\n            }, {\n                include: \"#logic-operators\"\n            }, {\n                include: \"#relative-urls\"\n            }, {\n                include: \"#xml-schema-types\"\n            }, {\n                include: \"#rdf-schema-types\"\n            }, {\n                include: \"#owl-types\"\n            }, {\n                include: \"#qnames\"\n            }, {\n                include: \"#keywords\"\n            }, {\n                include: \"#built-in-functions\"\n            }, {\n                include: \"#variables\"\n            }, {\n                include: \"#boolean-literal\"\n            }, {\n                include: \"#punctuation-operators\"\n            }],\n        \"#boolean-literal\": [{\n                token: \"constant.language.boolean.sparql\",\n                regex: /true|false/\n            }],\n        \"#built-in-functions\": [{\n                token: \"support.function.sparql\",\n                regex: /[Aa][Bb][Ss]|[Aa][Vv][Gg]|[Bb][Nn][Oo][Dd][Ee]|[Bb][Oo][Uu][Nn][Dd]|[Cc][Ee][Ii][Ll]|[Cc][Oo][Aa][Ll][Ee][Ss][Cc][Ee]|[Cc][Oo][Nn][Cc][Aa][Tt]|[Cc][Oo][Nn][Tt][Aa][Ii][Nn][Ss]|[Cc][Oo][Uu][Nn][Tt]|[Dd][Aa][Tt][Aa][Tt][Yy][Pp][Ee]|[Dd][Aa][Yy]|[Ee][Nn][Cc][Oo][Dd][Ee]_[Ff][Oo][Rr]_[Uu][Rr][Ii]|[Ee][Xx][Ii][Ss][Tt][Ss]|[Ff][Ll][Oo][Oo][Rr]|[Gg][Rr][Oo][Uu][Pp]_[Cc][Oo][Nn][Cc][Aa][Tt]|[Hh][Oo][Uu][Rr][Ss]|[Ii][Ff]|[Ii][Rr][Ii]|[Ii][Ss][Bb][Ll][Aa][Nn][Kk]|[Ii][Ss][Ii][Rr][Ii]|[Ii][Ss][Ll][Ii][Tt][Ee][Rr][Aa][Ll]|[Ii][Ss][Nn][Uu][Mm][Ee][Rr][Ii][Cc]|[Ii][Ss][Uu][Rr][Ii]|[Ll][Aa][Nn][Gg]|[Ll][Aa][Nn][Gg][Mm][Aa][Tt][Cc][Hh][Ee][Ss]|[Ll][Cc][Aa][Ss][Ee]|[Mm][Aa][Xx]|[Mm][Dd]5|[Mm][Ii][Nn]|[Mm][Ii][Nn][Uu][Tt][Ee][Ss]|[Mm][Oo][Nn][Tt][Hh]|[Nn][Oo][Ww]|[Rr][Aa][Nn][Dd]|[Rr][Ee][Gg][Ee][Xx]|[Rr][Ee][Pp][Ll][Aa][Cc][Ee]|[Rr][Oo][Uu][Nn][Dd]|[Ss][Aa][Mm][Ee][Tt][Ee][Rr][Mm]|[Ss][Aa][Mm][Pp][Ll][Ee]|[Ss][Ee][Cc][Oo][Nn][Dd][Ss]|[Ss][Ee][Pp][Aa][Rr][Aa][Tt][Oo][Rr]|[Ss][Hh][Aa](?:1|256|384|512)|[Ss][Tt][Rr]|[Ss][Tt][Rr][Aa][Ff][Tt][Ee][Rr]|[Ss][Tt][Rr][Bb][Ee][Ff][Oo][Rr][Ee]|[Ss][Tt][Rr][Dd][Tt]|[Ss][Tt][Rr][Ee][Nn][Dd][Ss]|[Ss][Tt][Rr][Ll][Aa][Nn][Gg]|[Ss][Tt][Rr][Ll][Ee][Nn]|[Ss][Tt][Rr][Ss][Tt][Aa][Rr][Tt][Ss]|[Ss][Tt][Rr][Uu][Uu][Ii][Dd]|[Ss][Uu][Bb][Ss][Tt][Rr]|[Ss][Uu][Mm]|[Tt][Ii][Mm][Ee][Zz][Oo][Nn][Ee]|[Tt][Zz]|[Uu][Cc][Aa][Ss][Ee]|[Uu][Rr][Ii]|[Uu][Uu][Ii][Dd]|[Yy][Ee][Aa][Rr]/\n            }],\n        \"#comments\": [{\n                token: [\n                    \"punctuation.definition.comment.sparql\",\n                    \"comment.line.hash.sparql\"\n                ],\n                regex: /(#)(.*$)/\n            }],\n        \"#keywords\": [{\n                token: \"keyword.other.sparql\",\n                regex: /[Aa][Dd][Dd]|[Aa][Ll][Ll]|[Aa][Ss]|[As][Ss][Cc]|[Aa][Ss][Kk]|[Bb][Aa][Ss][Ee]|[Bb][Ii][Nn][Dd]|[Bb][Yy]|[Cc][Ll][Ee][Aa][Rr]|[Cc][Oo][Nn][Ss][Tt][Rr][Uu][Cc][Tt]|[Cc][Oo][Pp][Yy]|[Cc][Rr][Ee][Aa][Tt][Ee]|[Dd][Aa][Tt][Aa]|[Dd][Ee][Ff][Aa][Uu][Ll][Tt]|[Dd][Ee][Ll][Ee][Tt][Ee]|[Dd][Ee][Sc][Cc]|[Dd][Ee][Ss][Cc][Rr][Ii][Bb][Ee]|[Dd][Ii][Ss][Tt][Ii][Nn][Cc][Tt]|[Dd][Rr][Oo][Pp]|[Ff][Ii][Ll][Tt][Ee][Rr]|[Ff][Rr][Oo][Mm]|[Gg][Rr][Aa][Pp][Hh]|[Gg][Rr][Oo][Uu][Pp]|[Hh][Aa][Vv][Ii][Nn][Gg]|[Ii][Nn][Ss][Ee][Rr][Tt]|[Ll][Ii][Mm][Ii][Tt]|[Ll][Oo][Aa][Dd]|[Mm][Ii][Nn][Uu][Ss]|[Mm][Oo][Vv][Ee]|[Nn][Aa][Mm][Ee][Dd]|[Oo][Ff][Ff][Ss][Ee][Tt]|[Oo][Pp][Tt][Ii][Oo][Nn][Aa][Ll]|[Oo][Rr][Dd][Ee][Rr]|[Pp][Rr][Ee][Ff][Ii][Xx]|[Rr][Ee][Dd][Uu][Cc][Ee][Dd]|[Ss][Ee][Ll][Ee][Cc][Tt]|[Ss][Ee][Pp][Aa][Rr][Aa][Tt][Oo][Rr]|[Ss][Ee][Rr][Vv][Ii][Cc][Ee]|[Ss][Ii][Ll][Ee][Nn][Tt]|[Tt][Oo]|[Uu][Nn][Dd][Ee][Ff]|[Uu][Nn][Ii][Oo][Nn]|[Uu][Ss][Ii][Nn][Gg]|[Vv][Aa][Ll][Uu][Ee][Ss]|[Ww][He][Ee][Rr][Ee]|[Ww][Ii][Tt][Hh]/\n            }],\n        \"#logic-operators\": [{\n                token: \"keyword.operator.logical.sparql\",\n                regex: /\\|\\||&&|=|!=|<|>|<=|>=|(?:^|!?\\s)IN(?:!?\\s|$)|(?:^|!?\\s)NOT(?:!?\\s|$)|-|\\+|\\*|\\/|\\!/\n            }],\n        \"#owl-types\": [{\n                token: \"support.type.datatype.owl.sparql\",\n                regex: /owl:[a-zA-Z]+/\n            }],\n        \"#punctuation-operators\": [{\n                token: \"keyword.operator.punctuation.sparql\",\n                regex: /;|,|\\.|\\(|\\)|\\{|\\}|\\|/\n            }],\n        \"#qnames\": [{\n                token: \"entity.name.other.qname.sparql\",\n                regex: /(?:[a-zA-Z][-_a-zA-Z0-9]*)?:(?:[_a-zA-Z][-_a-zA-Z0-9]*)?/\n            }],\n        \"#rdf-schema-types\": [{\n                token: \"support.type.datatype.rdf.schema.sparql\",\n                regex: /rdfs?:[a-zA-Z]+|(?:^|\\s)a(?:\\s|$)/\n            }],\n        \"#relative-urls\": [{\n                token: \"string.quoted.other.relative.url.sparql\",\n                regex: /</,\n                push: [{\n                        token: \"string.quoted.other.relative.url.sparql\",\n                        regex: />/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string.quoted.other.relative.url.sparql\"\n                    }]\n            }],\n        \"#string-datatype-suffixes\": [{\n                token: \"keyword.operator.datatype.suffix.sparql\",\n                regex: /\\^\\^/\n            }],\n        \"#string-language-suffixes\": [{\n                token: [\n                    \"keyword.operator.language.suffix.sparql\",\n                    \"constant.language.suffix.sparql\"\n                ],\n                regex: /(?!\")(@)([a-z]+(?:\\-[a-z0-9]+)*)/\n            }],\n        \"#strings\": [{\n                token: \"string.quoted.triple.sparql\",\n                regex: /\"\"\"/,\n                push: [{\n                        token: \"string.quoted.triple.sparql\",\n                        regex: /\"\"\"/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string.quoted.triple.sparql\"\n                    }]\n            }, {\n                token: \"string.quoted.double.sparql\",\n                regex: /\"/,\n                push: [{\n                        token: \"string.quoted.double.sparql\",\n                        regex: /\"/,\n                        next: \"pop\"\n                    }, {\n                        token: \"invalid.string.newline\",\n                        regex: /$/\n                    }, {\n                        token: \"constant.character.escape.sparql\",\n                        regex: /\\\\./\n                    }, {\n                        defaultToken: \"string.quoted.double.sparql\"\n                    }]\n            }],\n        \"#variables\": [{\n                token: \"variable.other.sparql\",\n                regex: /(?:\\?|\\$)[-_a-zA-Z0-9]+/\n            }],\n        \"#xml-schema-types\": [{\n                token: \"support.type.datatype.schema.sparql\",\n                regex: /xsd?:[a-z][a-zA-Z]+/\n            }]\n    };\n    this.normalizeRules();\n};\nSPARQLHighlightRules.metaData = {\n    fileTypes: [\"rq\", \"sparql\"],\n    name: \"SPARQL\",\n    scopeName: \"source.sparql\"\n};\noop.inherits(SPARQLHighlightRules, TextHighlightRules);\nexports.SPARQLHighlightRules = SPARQLHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sparql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sparql_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SPARQLHighlightRules = require(\"./sparql_highlight_rules\").SPARQLHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = SPARQLHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/sparql\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/sparql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-sql.js",
    "content": "ace.define(\"ace/mode/sql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SqlHighlightRules = function () {\n    var keywords = (\"select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|\" +\n        \"when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|\" +\n        \"foreign|not|references|default|null|inner|cross|natural|database|drop|grant|distinct\");\n    var builtinConstants = (\"true|false\");\n    var builtinFunctions = (\"avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|\" +\n        \"coalesce|ifnull|isnull|nvl\");\n    var dataTypes = (\"int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|\" +\n        \"money|real|number|integer\");\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"storage.type\": dataTypes\n    }, \"identifier\", true);\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"--.*$\"\n            }, {\n                token: \"comment\",\n                start: \"/\\\\*\",\n                end: \"\\\\*/\"\n            }, {\n                token: \"string\",\n                regex: '\".*?\"'\n            }, {\n                token: \"string\",\n                regex: \"'.*?'\"\n            }, {\n                token: \"string\",\n                regex: \"`.*?`\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(SqlHighlightRules, TextHighlightRules);\nexports.SqlHighlightRules = SqlHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sql_highlight_rules\",\"ace/mode/folding/sql\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SqlHighlightRules = require(\"./sql_highlight_rules\").SqlHighlightRules;\nvar SqlFoldMode = require(\"./folding/sql\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = SqlHighlightRules;\n    this.foldingRules = new SqlFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/sql\";\n    this.snippetFileId = \"ace/snippets/sql\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/sql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-sqlserver.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/sqlserver_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SqlServerHighlightRules = function () {\n    var logicalOperators = \"ALL|AND|ANY|BETWEEN|EXISTS|IN|LIKE|NOT|OR|SOME\";\n    logicalOperators += \"|NULL|IS|APPLY|INNER|OUTER|LEFT|RIGHT|JOIN|CROSS\"; //SSMS colors these gray too\n    var builtinFunctions = (\n    \"OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|\" +\n        \"AVG|CHECKSUM_AGG|COUNT|COUNT_BIG|GROUPING|GROUPING_ID|MAX|MIN|STDEV|STDEVP|SUM|VAR|VARP|\" +\n        \"DENSE_RANK|NTILE|RANK|ROW_NUMBER\" +\n        \"@@DATEFIRST|@@DBTS|@@LANGID|@@LANGUAGE|@@LOCK_TIMEOUT|@@MAX_CONNECTIONS|@@MAX_PRECISION|@@NESTLEVEL|@@OPTIONS|@@REMSERVER|@@SERVERNAME|@@SERVICENAME|@@SPID|@@TEXTSIZE|@@VERSION|\" +\n        \"CAST|CONVERT|PARSE|TRY_CAST|TRY_CONVERT|TRY_PARSE\" +\n        \"@@CURSOR_ROWS|@@FETCH_STATUS|CURSOR_STATUS|\" +\n        \"@@DATEFIRST|@@LANGUAGE|CURRENT_TIMESTAMP|DATEADD|DATEDIFF|DATEFROMPARTS|DATENAME|DATEPART|DATETIME2FROMPARTS|DATETIMEFROMPARTS|DATETIMEOFFSETFROMPARTS|DAY|EOMONTH|GETDATE|GETUTCDATE|ISDATE|MONTH|SET DATEFIRST|SET DATEFORMAT|SET LANGUAGE|SMALLDATETIMEFROMPARTS|SP_HELPLANGUAGE|SWITCHOFFSET|SYSDATETIME|SYSDATETIMEOFFSET|SYSUTCDATETIME|TIMEFROMPARTS|TODATETIMEOFFSET|YEAR|\" +\n        \"CHOOSE|IIF|\" +\n        \"ABS|ACOS|ASIN|ATAN|ATN2|CEILING|COS|COT|DEGREES|EXP|FLOOR|LOG|LOG10|PI|POWER|RADIANS|RAND|ROUND|SIGN|SIN|SQRT|SQUARE|TAN|\" +\n        \"@@PROCID|APPLOCK_MODE|APPLOCK_TEST|APP_NAME|ASSEMBLYPROPERTY|COLUMNPROPERTY|COL_LENGTH|COL_NAME|DATABASEPROPERTYEX|DATABASE_PRINCIPAL_ID|DB_ID|DB_NAME|FILEGROUPPROPERTY|FILEGROUP_ID|FILEGROUP_NAME|FILEPROPERTY|FILE_ID|FILE_IDEX|FILE_NAME|FULLTEXTCATALOGPROPERTY|FULLTEXTSERVICEPROPERTY|INDEXKEY_PROPERTY|INDEXPROPERTY|INDEX_COL|OBJECTPROPERTY|OBJECTPROPERTYEX|OBJECT_DEFINITION|OBJECT_ID|OBJECT_NAME|OBJECT_SCHEMA_NAME|ORIGINAL_DB_NAME|PARSENAME|SCHEMA_ID|SCHEMA_NAME|SCOPE_IDENTITY|SERVERPROPERTY|STATS_DATE|TYPEPROPERTY|TYPE_ID|TYPE_NAME|\" +\n        \"CERTENCODED|CERTPRIVATEKEY|CURRENT_USER|DATABASE_PRINCIPAL_ID|HAS_PERMS_BY_NAME|IS_MEMBER|IS_ROLEMEMBER|IS_SRVROLEMEMBER|ORIGINAL_LOGIN|PERMISSIONS|PWDCOMPARE|PWDENCRYPT|SCHEMA_ID|SCHEMA_NAME|SESSION_USER|SUSER_ID|SUSER_NAME|SUSER_SID|SUSER_SNAME|SYS.FN_BUILTIN_PERMISSIONS|SYS.FN_GET_AUDIT_FILE|SYS.FN_MY_PERMISSIONS|SYSTEM_USER|USER_ID|USER_NAME|\" +\n        \"ASCII|CHAR|CHARINDEX|CONCAT|DIFFERENCE|FORMAT|LEN|LOWER|LTRIM|NCHAR|PATINDEX|QUOTENAME|REPLACE|REPLICATE|REVERSE|RTRIM|SOUNDEX|SPACE|STR|STUFF|SUBSTRING|UNICODE|UPPER|\" +\n        \"$PARTITION|@@ERROR|@@IDENTITY|@@PACK_RECEIVED|@@ROWCOUNT|@@TRANCOUNT|BINARY_CHECKSUM|CHECKSUM|CONNECTIONPROPERTY|CONTEXT_INFO|CURRENT_REQUEST_ID|ERROR_LINE|ERROR_MESSAGE|ERROR_NUMBER|ERROR_PROCEDURE|ERROR_SEVERITY|ERROR_STATE|FORMATMESSAGE|GETANSINULL|GET_FILESTREAM_TRANSACTION_CONTEXT|HOST_ID|HOST_NAME|ISNULL|ISNUMERIC|MIN_ACTIVE_ROWVERSION|NEWID|NEWSEQUENTIALID|ROWCOUNT_BIG|XACT_STATE|\" +\n        \"@@CONNECTIONS|@@CPU_BUSY|@@IDLE|@@IO_BUSY|@@PACKET_ERRORS|@@PACK_RECEIVED|@@PACK_SENT|@@TIMETICKS|@@TOTAL_ERRORS|@@TOTAL_READ|@@TOTAL_WRITE|FN_VIRTUALFILESTATS|\" +\n        \"PATINDEX|TEXTPTR|TEXTVALID|\" +\n        \"COALESCE|NULLIF\");\n    var dataTypes = (\"BIGINT|BINARY|BIT|CHAR|CURSOR|DATE|DATETIME|DATETIME2|DATETIMEOFFSET|DECIMAL|FLOAT|HIERARCHYID|IMAGE|INTEGER|INT|MONEY|NCHAR|NTEXT|NUMERIC|NVARCHAR|REAL|SMALLDATETIME|SMALLINT|SMALLMONEY|SQL_VARIANT|TABLE|TEXT|TIME|TIMESTAMP|TINYINT|UNIQUEIDENTIFIER|VARBINARY|VARCHAR|XML\");\n    var builtInStoredProcedures = \"sp_addextendedproc|sp_addextendedproperty|sp_addmessage|sp_addtype|sp_addumpdevice|sp_add_data_file_recover_suspect_db|sp_add_log_file_recover_suspect_db|sp_altermessage|sp_attach_db|sp_attach_single_file_db|sp_autostats|sp_bindefault|sp_bindrule|sp_bindsession|sp_certify_removable|sp_clean_db_file_free_space|sp_clean_db_free_space|sp_configure|sp_control_plan_guide|sp_createstats|sp_create_plan_guide|sp_create_plan_guide_from_handle|sp_create_removable|sp_cycle_errorlog|sp_datatype_info|sp_dbcmptlevel|sp_dbmmonitoraddmonitoring|sp_dbmmonitorchangealert|sp_dbmmonitorchangemonitoring|sp_dbmmonitordropalert|sp_dbmmonitordropmonitoring|sp_dbmmonitorhelpalert|sp_dbmmonitorhelpmonitoring|sp_dbmmonitorresults|sp_db_increased_partitions|sp_delete_backuphistory|sp_depends|sp_describe_first_result_set|sp_describe_undeclared_parameters|sp_detach_db|sp_dropdevice|sp_dropextendedproc|sp_dropextendedproperty|sp_dropmessage|sp_droptype|sp_execute|sp_executesql|sp_getapplock|sp_getbindtoken|sp_help|sp_helpconstraint|sp_helpdb|sp_helpdevice|sp_helpextendedproc|sp_helpfile|sp_helpfilegroup|sp_helpindex|sp_helplanguage|sp_helpserver|sp_helpsort|sp_helpstats|sp_helptext|sp_helptrigger|sp_indexoption|sp_invalidate_textptr|sp_lock|sp_monitor|sp_prepare|sp_prepexec|sp_prepexecrpc|sp_procoption|sp_recompile|sp_refreshview|sp_releaseapplock|sp_rename|sp_renamedb|sp_resetstatus|sp_sequence_get_range|sp_serveroption|sp_setnetname|sp_settriggerorder|sp_spaceused|sp_tableoption|sp_unbindefault|sp_unbindrule|sp_unprepare|sp_updateextendedproperty|sp_updatestats|sp_validname|sp_who|sys.sp_merge_xtp_checkpoint_files|sys.sp_xtp_bind_db_resource_pool|sys.sp_xtp_checkpoint_force_garbage_collection|sys.sp_xtp_control_proc_exec_stats|sys.sp_xtp_control_query_exec_stats|sys.sp_xtp_unbind_db_resource_pool\";\n    var keywords = \"ABSOLUTE|ACTION|ADA|ADD|ADMIN|AFTER|AGGREGATE|ALIAS|ALL|ALLOCATE|ALTER|AND|ANY|ARE|ARRAY|AS|ASC|ASENSITIVE|ASSERTION|ASYMMETRIC|AT|ATOMIC|AUTHORIZATION|BACKUP|BEFORE|BEGIN|BETWEEN|BIT_LENGTH|BLOB|BOOLEAN|BOTH|BREADTH|BREAK|BROWSE|BULK|BY|CALL|CALLED|CARDINALITY|CASCADE|CASCADED|CASE|CATALOG|CHARACTER|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CHECKPOINT|CLASS|CLOB|CLOSE|CLUSTERED|COALESCE|COLLATE|COLLATION|COLLECT|COLUMN|COMMIT|COMPLETION|COMPUTE|CONDITION|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONSTRUCTOR|CONTAINS|CONTAINSTABLE|CONTINUE|CORR|CORRESPONDING|COVAR_POP|COVAR_SAMP|CREATE|CROSS|CUBE|CUME_DIST|CURRENT|CURRENT_CATALOG|CURRENT_DATE|CURRENT_DEFAULT_TRANSFORM_GROUP|CURRENT_PATH|CURRENT_ROLE|CURRENT_SCHEMA|CURRENT_TIME|CURRENT_TRANSFORM_GROUP_FOR_TYPE|CYCLE|DATA|DATABASE|DBCC|DEALLOCATE|DEC|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DENY|DEPTH|DEREF|DESC|DESCRIBE|DESCRIPTOR|DESTROY|DESTRUCTOR|DETERMINISTIC|DIAGNOSTICS|DICTIONARY|DISCONNECT|DISK|DISTINCT|DISTRIBUTED|DOMAIN|DOUBLE|DROP|DUMP|DYNAMIC|EACH|ELEMENT|ELSE|END|END-EXEC|EQUALS|ERRLVL|ESCAPE|EVERY|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXISTS|EXIT|EXTERNAL|EXTRACT|FETCH|FILE|FILLFACTOR|FILTER|FIRST|FOR|FOREIGN|FORTRAN|FOUND|FREE|FREETEXT|FREETEXTTABLE|FROM|FULL|FULLTEXTTABLE|FUNCTION|FUSION|GENERAL|GET|GLOBAL|GO|GOTO|GRANT|GROUP|HAVING|HOLD|HOLDLOCK|HOST|HOUR|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IGNORE|IMMEDIATE|IN|INCLUDE|INDEX|INDICATOR|INITIALIZE|INITIALLY|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INTEGER|INTERSECT|INTERSECTION|INTERVAL|INTO|IS|ISOLATION|ITERATE|JOIN|KEY|KILL|LANGUAGE|LARGE|LAST|LATERAL|LEADING|LESS|LEVEL|LIKE|LIKE_REGEX|LIMIT|LINENO|LN|LOAD|LOCAL|LOCALTIME|LOCALTIMESTAMP|LOCATOR|MAP|MATCH|MEMBER|MERGE|METHOD|MINUTE|MOD|MODIFIES|MODIFY|MODULE|MULTISET|NAMES|NATIONAL|NATURAL|NCLOB|NEW|NEXT|NO|NOCHECK|NONCLUSTERED|NONE|NORMALIZE|NOT|NULL|NULLIF|OBJECT|OCCURRENCES_REGEX|OCTET_LENGTH|OF|OFF|OFFSETS|OLD|ON|ONLY|OPEN|OPERATION|OPTION|OR|ORDER|ORDINALITY|OUT|OUTER|OUTPUT|OVER|OVERLAPS|OVERLAY|PAD|PARAMETER|PARAMETERS|PARTIAL|PARTITION|PASCAL|PATH|PERCENT|PERCENTILE_CONT|PERCENTILE_DISC|PERCENT_RANK|PIVOT|PLAN|POSITION|POSITION_REGEX|POSTFIX|PRECISION|PREFIX|PREORDER|PREPARE|PRESERVE|PRIMARY|PRINT|PRIOR|PRIVILEGES|PROC|PROCEDURE|PUBLIC|RAISERROR|RANGE|READ|READS|READTEXT|RECONFIGURE|RECURSIVE|REF|REFERENCES|REFERENCING|REGR_AVGX|REGR_AVGY|REGR_COUNT|REGR_INTERCEPT|REGR_R2|REGR_SLOPE|REGR_SXX|REGR_SXY|REGR_SYY|RELATIVE|RELEASE|REPLICATION|RESTORE|RESTRICT|RESULT|RETURN|RETURNS|REVERT|REVOKE|ROLE|ROLLBACK|ROLLUP|ROUTINE|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SAVEPOINT|SCHEMA|SCOPE|SCROLL|SEARCH|SECOND|SECTION|SECURITYAUDIT|SELECT|SEMANTICKEYPHRASETABLE|SEMANTICSIMILARITYDETAILSTABLE|SEMANTICSIMILARITYTABLE|SENSITIVE|SEQUENCE|SESSION|SET|SETS|SETUSER|SHUTDOWN|SIMILAR|SIZE|SOME|SPECIFIC|SPECIFICTYPE|SQL|SQLCA|SQLCODE|SQLERROR|SQLEXCEPTION|SQLSTATE|SQLWARNING|START|STATE|STATEMENT|STATIC|STATISTICS|STDDEV_POP|STDDEV_SAMP|STRUCTURE|SUBMULTISET|SUBSTRING_REGEX|SYMMETRIC|SYSTEM|TABLESAMPLE|TEMPORARY|TERMINATE|TEXTSIZE|THAN|THEN|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TOP|TRAILING|TRAN|TRANSACTION|TRANSLATE|TRANSLATE_REGEX|TRANSLATION|TREAT|TRIGGER|TRIM|TRUNCATE|TSEQUAL|UESCAPE|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNPIVOT|UPDATE|UPDATETEXT|USAGE|USE|USER|USING|VALUE|VALUES|VARIABLE|VARYING|VAR_POP|VAR_SAMP|VIEW|WAITFOR|WHEN|WHENEVER|WHERE|WHILE|WIDTH_BUCKET|WINDOW|WITH|WITHIN|WITHIN GROUP|WITHOUT|WORK|WRITE|WRITETEXT|XMLAGG|XMLATTRIBUTES|XMLBINARY|XMLCAST|XMLCOMMENT|XMLCONCAT|XMLDOCUMENT|XMLELEMENT|XMLEXISTS|XMLFOREST|XMLITERATE|XMLNAMESPACES|XMLPARSE|XMLPI|XMLQUERY|XMLSERIALIZE|XMLTABLE|XMLTEXT|XMLVALIDATE|ZONE\";\n    keywords += \"|KEEPIDENTITY|KEEPDEFAULTS|IGNORE_CONSTRAINTS|IGNORE_TRIGGERS|XLOCK|FORCESCAN|FORCESEEK|HOLDLOCK|NOLOCK|NOWAIT|PAGLOCK|READCOMMITTED|READCOMMITTEDLOCK|READPAST|READUNCOMMITTED|REPEATABLEREAD|ROWLOCK|SERIALIZABLE|SNAPSHOT|SPATIAL_WINDOW_MAX_CELLS|TABLOCK|TABLOCKX|UPDLOCK|XLOCK|IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX|EXPAND|VIEWS|FAST|FORCE|KEEP|KEEPFIXED|MAXDOP|MAXRECURSION|OPTIMIZE|PARAMETERIZATION|SIMPLE|FORCED|RECOMPILE|ROBUST|PLAN|SPATIAL_WINDOW_MAX_CELLS|NOEXPAND|HINT\";\n    keywords += \"|LOOP|HASH|MERGE|REMOTE\";\n    keywords += \"|TRY|CATCH|THROW\";\n    keywords += \"|TYPE\";\n    keywords = keywords.split('|');\n    keywords = keywords.filter(function (value, index, self) {\n        return logicalOperators.split('|').indexOf(value) === -1 && builtinFunctions.split('|').indexOf(value) === -1 && dataTypes.split('|').indexOf(value) === -1;\n    });\n    keywords = keywords.sort().join('|');\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language\": logicalOperators,\n        \"storage.type\": dataTypes,\n        \"support.function\": builtinFunctions,\n        \"support.storedprocedure\": builtInStoredProcedures,\n        \"keyword\": keywords\n    }, \"identifier\", true);\n    var setStatements = \"SET ANSI_DEFAULTS|SET ANSI_NULLS|SET ANSI_NULL_DFLT_OFF|SET ANSI_NULL_DFLT_ON|SET ANSI_PADDING|SET ANSI_WARNINGS|SET ARITHABORT|SET ARITHIGNORE|SET CONCAT_NULL_YIELDS_NULL|SET CURSOR_CLOSE_ON_COMMIT|SET DATEFIRST|SET DATEFORMAT|SET DEADLOCK_PRIORITY|SET FIPS_FLAGGER|SET FMTONLY|SET FORCEPLAN|SET IDENTITY_INSERT|SET IMPLICIT_TRANSACTIONS|SET LANGUAGE|SET LOCK_TIMEOUT|SET NOCOUNT|SET NOEXEC|SET NUMERIC_ROUNDABORT|SET OFFSETS|SET PARSEONLY|SET QUERY_GOVERNOR_COST_LIMIT|SET QUOTED_IDENTIFIER|SET REMOTE_PROC_TRANSACTIONS|SET ROWCOUNT|SET SHOWPLAN_ALL|SET SHOWPLAN_TEXT|SET SHOWPLAN_XML|SET STATISTICS IO|SET STATISTICS PROFILE|SET STATISTICS TIME|SET STATISTICS XML|SET TEXTSIZE|SET XACT_ABORT\".split('|');\n    var isolationLevels = \"READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SNAPSHOP|SERIALIZABLE\".split('|');\n    for (var i = 0; i < isolationLevels.length; i++) {\n        setStatements.push('SET TRANSACTION ISOLATION LEVEL ' + isolationLevels[i]);\n    }\n    this.$rules = {\n        start: [{\n                token: \"string.start\",\n                regex: \"'\",\n                next: [{\n                        token: \"constant.language.escape\",\n                        regex: /''/\n                    }, {\n                        token: \"string.end\",\n                        next: \"start\",\n                        regex: \"'\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"), {\n                token: \"comment\",\n                regex: \"--.*$\"\n            }, {\n                token: \"comment\",\n                start: \"/\\\\*\",\n                end: \"\\\\*/\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"@{0,2}[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b(?!])\" //up to 2 @symbols for some built in functions\n            }, {\n                token: \"constant.class\",\n                regex: \"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=|\\\\*\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)]\"\n            }, {\n                token: \"punctuation\",\n                regex: \",|;\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }],\n        comment: [\n            DocCommentHighlightRules.getTagRule(), {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"comment\",\n                caseInsensitive: true\n            }\n        ]\n    };\n    for (var i = 0; i < setStatements.length; i++) {\n        this.$rules.start.unshift({\n            token: \"set.statement\",\n            regex: setStatements[i]\n        });\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n    var completions = [];\n    var addCompletions = function (arr, meta) {\n        arr.forEach(function (v) {\n            completions.push({\n                name: v,\n                value: v,\n                score: 0,\n                meta: meta\n            });\n        });\n    };\n    addCompletions(builtInStoredProcedures.split('|'), 'procedure');\n    addCompletions(logicalOperators.split('|'), 'operator');\n    addCompletions(builtinFunctions.split('|'), 'function');\n    addCompletions(dataTypes.split('|'), 'type');\n    addCompletions(setStatements, 'statement');\n    addCompletions(keywords.split('|'), 'keyword');\n    this.completions = completions;\n};\noop.inherits(SqlServerHighlightRules, TextHighlightRules);\nexports.SqlHighlightRules = SqlServerHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /(\\bCASE\\b|\\bBEGIN\\b)|^\\s*(\\/\\*)/i;\n    this.startRegionRe = /^\\s*(\\/\\*|--)#?region\\b/;\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.getBeginEndBlock(session, row, i, match[1]);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        return;\n    };\n    this.getBeginEndBlock = function (session, row, column, matchSequence) {\n        var start = {\n            row: row,\n            column: column + matchSequence.length\n        };\n        var maxRow = session.getLength();\n        var line;\n        var depth = 1;\n        var re = /(\\bCASE\\b|\\bBEGIN\\b)|(\\bEND\\b)/i;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth++;\n            else\n                depth--;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > start.row) {\n            return new Range(start.row, start.column, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sqlserver_highlight_rules\",\"ace/mode/folding/sqlserver\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SqlServerHighlightRules = require(\"./sqlserver_highlight_rules\").SqlHighlightRules;\nvar SqlServerFoldMode = require(\"./folding/sqlserver\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = SqlServerHighlightRules;\n    this.foldingRules = new SqlServerFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return session.$mode.$highlightRules.completions;\n    };\n    this.$id = \"ace/mode/sqlserver\";\n    this.snippetFileId = \"ace/snippets/sqlserver\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-stylus.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/stylus_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY Stylus.tmlanguage (UUID: 60519324-6A3A-4382-9E0B-546993A3869A) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\");\nvar StylusHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.type\": CssHighlightRules.supportType,\n        \"support.function\": CssHighlightRules.supportFunction,\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        start: [\n            {\n                token: \"comment\",\n                regex: /\\/\\/.*$/\n            },\n            {\n                token: \"comment\",\n                regex: /\\/\\*/,\n                next: \"comment\"\n            },\n            {\n                token: [\"entity.name.function.stylus\", \"text\"],\n                regex: \"^([-a-zA-Z_][-\\\\w]*)?(\\\\()\"\n            },\n            {\n                token: [\"entity.other.attribute-name.class.stylus\"],\n                regex: \"\\\\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*\"\n            },\n            {\n                token: [\"entity.language.stylus\"],\n                regex: \"^ *&\"\n            },\n            {\n                token: [\"variable.language.stylus\"],\n                regex: \"(arguments)\"\n            },\n            {\n                token: [\"keyword.stylus\"],\n                regex: \"@[-\\\\w]+\"\n            },\n            {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: CssHighlightRules.pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: CssHighlightRules.pseudoClasses\n            },\n            {\n                token: [\"entity.name.tag.stylus\"],\n                regex: \"(?:\\\\b)(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(?:h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)(?:\\\\b)\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"#[a-fA-F0-9]{6}\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: \"#[a-fA-F0-9]{3}\"\n            },\n            {\n                token: [\"punctuation.definition.entity.stylus\", \"entity.other.attribute-name.id.stylus\"],\n                regex: \"(#)([a-zA-Z][a-zA-Z0-9_-]*)\"\n            },\n            {\n                token: \"meta.vendor-prefix.stylus\",\n                regex: \"-webkit-|-moz\\\\-|-ms-|-o-\"\n            },\n            {\n                token: \"keyword.control.stylus\",\n                regex: \"(?:!important|for|in|return|true|false|null|if|else|unless|return)\\\\b\"\n            },\n            {\n                token: \"keyword.operator.stylus\",\n                regex: \"!|~|\\\\+|-|(?:\\\\*)?\\\\*|\\\\/|%|(?:\\\\.)\\\\.\\\\.|<|>|(?:=|:|\\\\?|\\\\+|-|\\\\*|\\\\/|%|<|>)?=|!=\"\n            },\n            {\n                token: \"keyword.operator.stylus\",\n                regex: \"(?:in|is(?:nt)?|not)\\\\b\"\n            },\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            },\n            {\n                token: \"constant.numeric\",\n                regex: CssHighlightRules.numRe\n            },\n            {\n                token: \"keyword\",\n                regex: \"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\\\\b\"\n            },\n            {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                defaultToken: \"comment\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: '[^\"\\\\\\\\]+'\n            },\n            {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qqstring\"\n            },\n            {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"string\",\n                regex: \"[^'\\\\\\\\]+\"\n            },\n            {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qstring\"\n            },\n            {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"start\"\n            }\n        ]\n    };\n};\noop.inherits(StylusHighlightRules, TextHighlightRules);\nexports.StylusHighlightRules = StylusHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/stylus\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/stylus_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar StylusHighlightRules = require(\"./stylus_highlight_rules\").StylusHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = StylusHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/stylus\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/stylus\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-svg.js",
    "content": "ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar Mode = function () {\n    this.HighlightRules = XmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.foldingRules = new XmlFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.voidElements = lang.arrayToMap([]);\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/svg_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar SvgHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.embedTagRules(JavaScriptHighlightRules, \"js-\", \"script\");\n    this.normalizeRules();\n};\noop.inherits(SvgHighlightRules, XmlHighlightRules);\nexports.SvgHighlightRules = SvgHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/svg\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/xml\",\"ace/mode/javascript\",\"ace/mode/svg_highlight_rules\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar XmlMode = require(\"./xml\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar SvgHighlightRules = require(\"./svg_highlight_rules\").SvgHighlightRules;\nvar MixedFoldMode = require(\"./folding/mixed\").FoldMode;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    XmlMode.call(this);\n    this.HighlightRules = SvgHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode\n    });\n    this.foldingRules = new MixedFoldMode(new XmlFoldMode(), {\n        \"js-\": new CStyleFoldMode()\n    });\n};\noop.inherits(Mode, XmlMode);\n(function () {\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.$id = \"ace/mode/svg\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/svg\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-swift.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/swift_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SwiftHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"\",\n        \"keyword\": \"__COLUMN__|__FILE__|__FUNCTION__|__LINE__\"\n            + \"|as|associativity|break|case|class|continue|default|deinit|didSet\"\n            + \"|do|dynamicType|else|enum|extension|fallthrough|for|func|get|if|import\"\n            + \"|in|infix|init|inout|is|left|let|let|mutating|new|none|nonmutating\"\n            + \"|operator|override|postfix|precedence|prefix|protocol|return|right\"\n            + \"|safe|Self|self|set|struct|subscript|switch|Type|typealias\"\n            + \"|unowned|unsafe|var|weak|where|while|willSet\"\n            + \"|convenience|dynamic|final|infix|lazy|mutating|nonmutating|optional|override|postfix\"\n            + \"|prefix|required|static|guard|defer\",\n        \"storage.type\": \"bool|double|Double\"\n            + \"|extension|float|Float|int|Int|open|internal|fileprivate|private|public|string|String\",\n        \"constant.language\": \"false|Infinity|NaN|nil|no|null|null|off|on|super|this|true|undefined|yes\",\n        \"support.function\": \"\"\n    }, \"identifier\");\n    function string(start, options) {\n        var nestable = options.nestable || options.interpolation;\n        var interpStart = options.interpolation && options.interpolation.nextState || \"start\";\n        var mainRule = {\n            regex: start + (options.multiline ? \"\" : \"(?=.)\"),\n            token: \"string.start\"\n        };\n        var nextState = [\n            options.escape && {\n                regex: options.escape,\n                token: \"character.escape\"\n            },\n            options.interpolation && {\n                token: \"paren.quasi.start\",\n                regex: lang.escapeRegExp(options.interpolation.lead + options.interpolation.open),\n                push: interpStart\n            },\n            options.error && {\n                regex: options.error,\n                token: \"error.invalid\"\n            },\n            {\n                regex: start + (options.multiline ? \"\" : \"|$\"),\n                token: \"string.end\",\n                next: nestable ? \"pop\" : \"start\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ].filter(Boolean);\n        if (nestable)\n            mainRule.push = nextState;\n        else\n            mainRule.next = nextState;\n        if (!options.interpolation)\n            return mainRule;\n        var open = options.interpolation.open;\n        var close = options.interpolation.close;\n        var counter = {\n            regex: \"[\" + lang.escapeRegExp(open + close) + \"]\",\n            onMatch: function (val, state, stack) {\n                this.next = val == open ? this.nextState : \"\";\n                if (val == open && stack.length) {\n                    stack.unshift(\"start\", state);\n                    return \"paren\";\n                }\n                if (val == close && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == open ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: interpStart\n        };\n        return [counter, mainRule];\n    }\n    function comments() {\n        return [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\/(?=.)\",\n                next: [\n                    DocCommentHighlightRules.getTagRule(),\n                    { token: \"comment\", regex: \"$|^\", next: \"start\" },\n                    { defaultToken: \"comment\", caseInsensitive: true }\n                ]\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment.start\",\n                regex: /\\/\\*/,\n                stateName: \"nested_comment\",\n                push: [\n                    DocCommentHighlightRules.getTagRule(),\n                    { token: \"comment.start\", regex: /\\/\\*/, push: \"nested_comment\" },\n                    { token: \"comment.end\", regex: \"\\\\*\\\\/\", next: \"pop\" },\n                    { defaultToken: \"comment\", caseInsensitive: true }\n                ]\n            }\n        ];\n    }\n    this.$rules = {\n        start: [\n            string('\"\"\"', {\n                escape: /\\\\(?:[0\\\\tnr\"']|u{[a-fA-F1-9]{0,8}})/,\n                interpolation: { lead: \"\\\\\", open: \"(\", close: \")\" },\n                error: /\\\\./,\n                multiline: true\n            }),\n            string('\"', {\n                escape: /\\\\(?:[0\\\\tnr\"']|u{[a-fA-F1-9]{0,8}})/,\n                interpolation: { lead: \"\\\\\", open: \"(\", close: \")\" },\n                error: /\\\\./,\n                multiline: false\n            }),\n            comments(),\n            {\n                regex: /@[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                token: \"variable.parameter\"\n            },\n            {\n                regex: /[a-zA-Z_$][a-zA-Z_$\\d\\u0080-\\ufffe]*/,\n                token: keywordMapper\n            },\n            {\n                token: \"constant.numeric\",\n                regex: /[+-]?(?:0(?:b[01]+|o[0-7]+|x[\\da-fA-F])|\\d+(?:(?:\\.\\d*)?(?:[PpEe][+-]?\\d+)?)\\b)/\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n    this.normalizeRules();\n};\noop.inherits(SwiftHighlightRules, TextHighlightRules);\nexports.HighlightRules = SwiftHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/swift\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/swift_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./swift_highlight_rules\").HighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = HighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = new CstyleBehaviour();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\", nestable: true };\n    this.$id = \"ace/mode/swift\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/swift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-tcl.js",
    "content": "ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/tcl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TclHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"#.*\\\\\\\\$\",\n                next: \"commentfollow\"\n            }, {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"support.function\",\n                regex: '[\\\\\\\\]$',\n                next: \"splitlineStart\"\n            }, {\n                token: \"text\",\n                regex: /\\\\(?:[\"{}\\[\\]$\\\\])/\n            }, {\n                token: \"text\",\n                regex: '^|[^{][;][^}]|[/\\r/]',\n                next: \"commandItem\"\n            }, {\n                token: \"string\",\n                regex: '[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: '[ ]*[\"]',\n                next: \"qqstring\"\n            }, {\n                token: \"variable.instance\",\n                regex: \"[$]\",\n                next: \"variable\"\n            }, {\n                token: \"support.function\",\n                regex: \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"\n            }, {\n                token: \"identifier\",\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[{]\",\n                next: \"commandItem\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"commandItem\": [\n            {\n                token: \"comment\",\n                regex: \"#.*\\\\\\\\$\",\n                next: \"commentfollow\"\n            }, {\n                token: \"comment\",\n                regex: \"#.*$\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"variable.instance\",\n                regex: \"[$]\",\n                next: \"variable\"\n            }, {\n                token: \"support.function\",\n                regex: \"(?:[:][:])[a-zA-Z0-9_/]+(?:[:][:])\",\n                next: \"commandItem\"\n            }, {\n                token: \"support.function\",\n                regex: \"[a-zA-Z0-9_/]+(?:[:][:])\",\n                next: \"commandItem\"\n            }, {\n                token: \"support.function\",\n                regex: \"(?:[:][:])\",\n                next: \"commandItem\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"support.function\",\n                regex: \"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"\n            }, {\n                token: \"keyword\",\n                regex: \"[a-zA-Z0-9_/]+\",\n                next: \"start\"\n            }\n        ],\n        \"commentfollow\": [\n            {\n                token: \"comment\",\n                regex: \".*\\\\\\\\$\",\n                next: \"commentfollow\"\n            }, {\n                token: \"comment\",\n                regex: '.+',\n                next: \"start\"\n            }\n        ],\n        \"splitlineStart\": [\n            {\n                token: \"text\",\n                regex: \"^.\",\n                next: \"start\"\n            }\n        ],\n        \"variable\": [\n            {\n                token: \"variable.instance\",\n                regex: \"[a-zA-Z_\\\\d]+(?:[(][a-zA-Z_\\\\d]+[)])?\",\n                next: \"start\"\n            }, {\n                token: \"variable.instance\",\n                regex: \"{?[a-zA-Z_\\\\d]+}?\",\n                next: \"start\"\n            }\n        ],\n        \"qqstring\": [{\n                token: \"string\",\n                regex: '(?:[^\\\\\\\\]|\\\\\\\\.)*?[\"]',\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }]\n    };\n};\noop.inherits(TclHighlightRules, TextHighlightRules);\nexports.TclHighlightRules = TclHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/tcl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/folding/cstyle\",\"ace/mode/tcl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar TclHighlightRules = require(\"./tcl_highlight_rules\").TclHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n    this.HighlightRules = TclHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new CStyleFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/tcl\";\n    this.snippetFileId = \"ace/snippets/tcl\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/tcl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-terraform.js",
    "content": "ace.define(\"ace/mode/terraform_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TerraformHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: ['storage.function.terraform'],\n                regex: '\\\\b(output|resource|data|variable|module|export)\\\\b'\n            },\n            {\n                token: \"variable.terraform\",\n                regex: \"\\\\$\\\\s\",\n                push: [\n                    {\n                        token: \"keyword.terraform\",\n                        regex: \"(-var-file|-var)\"\n                    },\n                    {\n                        token: \"variable.terraform\",\n                        regex: \"\\\\n|$\",\n                        next: \"pop\"\n                    },\n                    { include: \"strings\" },\n                    { include: \"variables\" },\n                    { include: \"operators\" },\n                    { defaultToken: \"text\" }\n                ]\n            },\n            {\n                token: \"language.support.class\",\n                regex: \"\\\\b(timeouts|provider|connection|provisioner|lifecycleprovider|atlas)\\\\b\"\n            },\n            {\n                token: \"singleline.comment.terraform\",\n                regex: '#.*$'\n            },\n            {\n                token: \"singleline.comment.terraform\",\n                regex: '//.*$'\n            },\n            {\n                token: \"multiline.comment.begin.terraform\",\n                regex: /\\/\\*/,\n                push: \"blockComment\"\n            },\n            {\n                token: \"storage.function.terraform\",\n                regex: \"^\\\\s*(locals|terraform)\\\\s*{\"\n            },\n            {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            },\n            {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            },\n            { include: \"constants\" },\n            { include: \"strings\" },\n            { include: \"operators\" },\n            { include: \"variables\" }\n        ],\n        blockComment: [{\n                regex: /\\*\\//,\n                token: \"multiline.comment.end.terraform\",\n                next: \"pop\"\n            }, {\n                defaultToken: \"comment\"\n            }],\n        \"constants\": [\n            {\n                token: \"constant.language.terraform\",\n                regex: \"\\\\b(true|false|yes|no|on|off|EOF)\\\\b\"\n            },\n            {\n                token: \"constant.numeric.terraform\",\n                regex: \"(\\\\b([0-9]+)([kKmMgG]b?)?\\\\b)|(\\\\b(0x[0-9A-Fa-f]+)([kKmMgG]b?)?\\\\b)\"\n            }\n        ],\n        \"variables\": [\n            {\n                token: [\"variable.assignment.terraform\", \"keyword.operator\"],\n                regex: \"\\\\b([a-zA-Z_]+)(\\\\s*=)\"\n            }\n        ],\n        \"interpolated_variables\": [\n            {\n                token: \"variable.terraform\",\n                regex: \"\\\\b(var|self|count|path|local)\\\\b(?:\\\\.*[a-zA-Z_-]*)?\"\n            }\n        ],\n        \"strings\": [\n            {\n                token: \"punctuation.quote.terraform\",\n                regex: \"'\",\n                push: [{\n                        token: 'punctuation.quote.terraform',\n                        regex: \"'\",\n                        next: 'pop'\n                    },\n                    { include: \"escaped_chars\" },\n                    { defaultToken: 'string' }]\n            },\n            {\n                token: \"punctuation.quote.terraform\",\n                regex: '\"',\n                push: [{\n                        token: 'punctuation.quote.terraform',\n                        regex: '\"',\n                        next: 'pop'\n                    },\n                    { include: \"interpolation\" },\n                    { include: \"escaped_chars\" },\n                    { defaultToken: 'string' }]\n            }\n        ],\n        \"escaped_chars\": [\n            {\n                token: \"constant.escaped_char.terraform\",\n                regex: \"\\\\\\\\.\"\n            }\n        ],\n        \"operators\": [\n            {\n                token: \"keyword.operator\",\n                regex: \"\\\\?|:|==|!=|>|<|>=|<=|&&|\\\\|\\\\\\||!|%|&|\\\\*|\\\\+|\\\\-|/|=\"\n            }\n        ],\n        \"interpolation\": [\n            {\n                token: \"punctuation.interpolated.begin.terraform\",\n                regex: \"\\\\$?\\\\$\\\\{\",\n                push: [{\n                        token: \"punctuation.interpolated.end.terraform\",\n                        regex: \"\\\\}\",\n                        next: \"pop\"\n                    },\n                    { include: \"interpolated_variables\" },\n                    { include: \"operators\" },\n                    { include: \"constants\" },\n                    { include: \"strings\" },\n                    { include: \"functions\" },\n                    { include: \"parenthesis\" },\n                    { defaultToken: \"punctuation\" }\n                ]\n            }\n        ],\n        \"functions\": [\n            {\n                token: \"keyword.function.terraform\",\n                regex: \"\\\\b(abs|basename|base64decode|base64encode|base64gzip|base64sha256|base64sha512|bcrypt|ceil|chomp|chunklist|cidrhost|cidrnetmask|cidrsubnet|coalesce|coalescelist|compact|concat|contains|dirname|distinct|element|file|floor|flatten|format|formatlist|indent|index|join|jsonencode|keys|length|list|log|lookup|lower|map|matchkeys|max|merge|min|md5|pathexpand|pow|replace|rsadecrypt|sha1|sha256|sha512|signum|slice|sort|split|substr|timestamp|timeadd|title|transpose|trimspace|upper|urlencode|uuid|values|zipmap)\\\\b\"\n            }\n        ],\n        \"parenthesis\": [\n            {\n                token: \"paren.lparen\",\n                regex: \"\\\\[\"\n            },\n            {\n                token: \"paren.rparen\",\n                regex: \"\\\\]\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(TerraformHighlightRules, TextHighlightRules);\nexports.TerraformHighlightRules = TerraformHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/terraform\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/terraform_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TerraformHighlightRules = require(\"./terraform_highlight_rules\").TerraformHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function () {\n    TextMode.call(this);\n    this.HighlightRules = TerraformHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = [\"#\", \"//\"];\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$id = \"ace/mode/terraform\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/terraform\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-tex.js",
    "content": "ace.define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n * tex_highlight_rules.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TexHighlightRules = function (textClass) {\n    if (!textClass)\n        textClass = \"text\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"%.*$\"\n            }, {\n                token: textClass,\n                regex: \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",\n                next: \"nospell\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: textClass,\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"nospell\": [\n            {\n                token: \"comment\",\n                regex: \"%.*$\",\n                next: \"start\"\n            }, {\n                token: \"nospell.\" + textClass,\n                regex: \"\\\\\\\\[$&%#\\\\{\\\\}]\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\\\\\(?:[a-zA-Z0-9]+|[^a-zA-Z0-9])\",\n                next: \"start\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"[\\\\])]\"\n            }, {\n                token: \"paren.keyword.operator\",\n                regex: \"}\",\n                next: \"start\"\n            }, {\n                token: \"nospell.\" + textClass,\n                regex: \"\\\\s+\"\n            }, {\n                token: \"nospell.\" + textClass,\n                regex: \"\\\\w+\"\n            }\n        ]\n    };\n};\noop.inherits(TexHighlightRules, TextHighlightRules);\nexports.TexHighlightRules = TexHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/tex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){/*\n * tex.js\n *\n * Copyright (C) 2009-11 by RStudio, Inc.\n *\n * The Initial Developer of the Original Code is\n * Ajax.org B.V.\n * Portions created by the Initial Developer are Copyright (C) 2010\n * the Initial Developer. All Rights Reserved.\n *\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n *\n */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TexHighlightRules = require(\"./tex_highlight_rules\").TexHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function (suppressHighlighting) {\n    if (suppressHighlighting)\n        this.HighlightRules = TextHighlightRules;\n    else\n        this.HighlightRules = TexHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"%\";\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.allowAutoInsert = function () {\n        return false;\n    };\n    this.$id = \"ace/mode/tex\";\n    this.snippetFileId = \"ace/snippets/tex\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/tex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-text.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/mode/text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-textile.js",
    "content": "ace.define(\"ace/mode/textile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TextileHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: function (value) {\n                    if (value.charAt(0) == \"h\")\n                        return \"markup.heading.\" + value.charAt(1);\n                    else\n                        return \"markup.heading\";\n                },\n                regex: \"h1|h2|h3|h4|h5|h6|bq|p|bc|pre\",\n                next: \"blocktag\"\n            },\n            {\n                token: \"keyword\",\n                regex: \"[\\\\*]+|[#]+\"\n            },\n            {\n                token: \"text\",\n                regex: \".+\"\n            }\n        ],\n        \"blocktag\": [\n            {\n                token: \"keyword\",\n                regex: \"\\\\. \",\n                next: \"start\"\n            },\n            {\n                token: \"keyword\",\n                regex: \"\\\\(\",\n                next: \"blocktagproperties\"\n            }\n        ],\n        \"blocktagproperties\": [\n            {\n                token: \"keyword\",\n                regex: \"\\\\)\",\n                next: \"blocktag\"\n            },\n            {\n                token: \"string\",\n                regex: \"[a-zA-Z0-9\\\\-_]+\"\n            },\n            {\n                token: \"keyword\",\n                regex: \"#\"\n            }\n        ]\n    };\n};\noop.inherits(TextileHighlightRules, TextHighlightRules);\nexports.TextileHighlightRules = TextileHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/textile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/textile_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextileHighlightRules = require(\"./textile_highlight_rules\").TextileHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function () {\n    this.HighlightRules = TextileHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.type = \"text\";\n    this.getNextLineIndent = function (state, line, tab) {\n        if (state == \"intag\")\n            return tab;\n        return \"\";\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/textile\";\n    this.snippetFileId = \"ace/snippets/textile\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/textile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-toml.js",
    "content": "ace.define(\"ace/mode/toml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TomlHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.toml\",\n                regex: /#.*$/\n            },\n            {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            },\n            {\n                token: [\"variable.keygroup.toml\"],\n                regex: \"(?:^\\\\s*)(\\\\[\\\\[([^\\\\]]+)\\\\]\\\\])\"\n            },\n            {\n                token: [\"variable.keygroup.toml\"],\n                regex: \"(?:^\\\\s*)(\\\\[([^\\\\]]+)\\\\])\"\n            },\n            {\n                token: keywordMapper,\n                regex: identifierRe\n            },\n            {\n                token: \"support.date.toml\",\n                regex: \"\\\\d{4}-\\\\d{2}-\\\\d{2}(T)\\\\d{2}:\\\\d{2}:\\\\d{2}(Z)\"\n            },\n            {\n                token: \"constant.numeric.toml\",\n                regex: \"-?\\\\d+(\\\\.?\\\\d+)?\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                next: \"qqstring\"\n            },\n            {\n                token: \"constant.language.escape\",\n                regex: '\\\\\\\\[0tnr\"\\\\\\\\]'\n            },\n            {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"start\"\n            },\n            {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n};\noop.inherits(TomlHighlightRules, TextHighlightRules);\nexports.TomlHighlightRules = TomlHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function () {\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/;\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var re = this.foldingStartMarker;\n        var line = session.getLine(row);\n        var m = line.match(re);\n        if (!m)\n            return;\n        var startName = m[1] + \".\";\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            if (/^\\s*$/.test(line))\n                continue;\n            m = line.match(re);\n            if (m && m[1].lastIndexOf(startName, 0) !== 0)\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/toml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/toml_highlight_rules\",\"ace/mode/folding/ini\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TomlHighlightRules = require(\"./toml_highlight_rules\").TomlHighlightRules;\nvar FoldMode = require(\"./folding/ini\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = TomlHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/toml\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/toml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-tsx.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/typescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode_highlight_rules.tmpl.js (UUID: 21e323af-f665-4161-96e7-5087d262557e) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar TypeScriptHighlightRules = function (options) {\n    var tsRules = [\n        {\n            token: [\"storage.type\", \"text\", \"entity.name.function.ts\"],\n            regex: \"(function)(\\\\s+)([a-zA-Z0-9\\$_\\u00a1-\\uffff][a-zA-Z0-9\\d\\$_\\u00a1-\\uffff]*)\"\n        },\n        {\n            token: \"keyword\",\n            regex: \"(?:\\\\b(constructor|declare|interface|as|AS|public|private|extends|export|super|readonly|module|namespace|abstract|implements)\\\\b)\"\n        },\n        {\n            token: [\"keyword\", \"storage.type.variable.ts\"],\n            regex: \"(class|type)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*)\"\n        },\n        {\n            token: \"keyword\",\n            regex: \"\\\\b(?:super|export|import|keyof|infer)\\\\b\"\n        },\n        {\n            token: [\"storage.type.variable.ts\"],\n            regex: \"(?:\\\\b(this\\\\.|string\\\\b|bool\\\\b|boolean\\\\b|number\\\\b|true\\\\b|false\\\\b|undefined\\\\b|any\\\\b|null\\\\b|(?:unique )?symbol\\\\b|object\\\\b|never\\\\b|enum\\\\b))\"\n        }\n    ];\n    var JSRules = new JavaScriptHighlightRules({ jsx: (options && options.jsx) == true }).getRules();\n    JSRules.no_regex = tsRules.concat(JSRules.no_regex);\n    this.$rules = JSRules;\n};\noop.inherits(TypeScriptHighlightRules, JavaScriptHighlightRules);\nexports.TypeScriptHighlightRules = TypeScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/typescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/typescript_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar jsMode = require(\"./javascript\").Mode;\nvar TypeScriptHighlightRules = require(\"./typescript_highlight_rules\").TypeScriptHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function () {\n    this.HighlightRules = TypeScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, jsMode);\n(function () {\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.$id = \"ace/mode/typescript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/tsx\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/typescript\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar tsMode = require(\"./typescript\").Mode;\nvar Mode = function () {\n    tsMode.call(this);\n    this.$highlightRuleConfig = { jsx: true };\n};\noop.inherits(Mode, tsMode);\n(function () {\n    this.$id = \"ace/mode/tsx\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/tsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-turtle.js",
    "content": "ace.define(\"ace/mode/turtle_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from turtle.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TurtleHighlightRules = function () {\n    this.$rules = {\n        start: [{\n                include: \"#comments\"\n            }, {\n                include: \"#strings\"\n            }, {\n                include: \"#base-prefix-declarations\"\n            }, {\n                include: \"#string-language-suffixes\"\n            }, {\n                include: \"#string-datatype-suffixes\"\n            }, {\n                include: \"#relative-urls\"\n            }, {\n                include: \"#xml-schema-types\"\n            }, {\n                include: \"#rdf-schema-types\"\n            }, {\n                include: \"#owl-types\"\n            }, {\n                include: \"#qnames\"\n            }, {\n                include: \"#punctuation-operators\"\n            }],\n        \"#base-prefix-declarations\": [{\n                token: \"keyword.other.prefix.turtle\",\n                regex: /@(?:base|prefix)/\n            }],\n        \"#comments\": [{\n                token: [\n                    \"punctuation.definition.comment.turtle\",\n                    \"comment.line.hash.turtle\"\n                ],\n                regex: /(#)(.*$)/\n            }],\n        \"#owl-types\": [{\n                token: \"support.type.datatype.owl.turtle\",\n                regex: /owl:[a-zA-Z]+/\n            }],\n        \"#punctuation-operators\": [{\n                token: \"keyword.operator.punctuation.turtle\",\n                regex: /;|,|\\.|\\(|\\)|\\[|\\]/\n            }],\n        \"#qnames\": [{\n                token: \"entity.name.other.qname.turtle\",\n                regex: /(?:[a-zA-Z][-_a-zA-Z0-9]*)?:(?:[_a-zA-Z][-_a-zA-Z0-9]*)?/\n            }],\n        \"#rdf-schema-types\": [{\n                token: \"support.type.datatype.rdf.schema.turtle\",\n                regex: /rdfs?:[a-zA-Z]+|(?:^|\\s)a(?:\\s|$)/\n            }],\n        \"#relative-urls\": [{\n                token: \"string.quoted.other.relative.url.turtle\",\n                regex: /</,\n                push: [{\n                        token: \"string.quoted.other.relative.url.turtle\",\n                        regex: />/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string.quoted.other.relative.url.turtle\"\n                    }]\n            }],\n        \"#string-datatype-suffixes\": [{\n                token: \"keyword.operator.datatype.suffix.turtle\",\n                regex: /\\^\\^/\n            }],\n        \"#string-language-suffixes\": [{\n                token: [\n                    \"keyword.operator.language.suffix.turtle\",\n                    \"constant.language.suffix.turtle\"\n                ],\n                regex: /(?!\")(@)([a-z]+(?:\\-[a-z0-9]+)*)/\n            }],\n        \"#strings\": [{\n                token: \"string.quoted.triple.turtle\",\n                regex: /\"\"\"/,\n                push: [{\n                        token: \"string.quoted.triple.turtle\",\n                        regex: /\"\"\"/,\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string.quoted.triple.turtle\"\n                    }]\n            }, {\n                token: \"string.quoted.double.turtle\",\n                regex: /\"/,\n                push: [{\n                        token: \"string.quoted.double.turtle\",\n                        regex: /\"/,\n                        next: \"pop\"\n                    }, {\n                        token: \"invalid.string.newline\",\n                        regex: /$/\n                    }, {\n                        token: \"constant.character.escape.turtle\",\n                        regex: /\\\\./\n                    }, {\n                        defaultToken: \"string.quoted.double.turtle\"\n                    }]\n            }],\n        \"#xml-schema-types\": [{\n                token: \"support.type.datatype.xml.schema.turtle\",\n                regex: /xsd?:[a-z][a-zA-Z]+/\n            }]\n    };\n    this.normalizeRules();\n};\nTurtleHighlightRules.metaData = {\n    fileTypes: [\"ttl\", \"nt\"],\n    name: \"Turtle\",\n    scopeName: \"source.turtle\"\n};\noop.inherits(TurtleHighlightRules, TextHighlightRules);\nexports.TurtleHighlightRules = TurtleHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/turtle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/turtle_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TurtleHighlightRules = require(\"./turtle_highlight_rules\").TurtleHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = TurtleHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.$id = \"ace/mode/turtle\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/turtle\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-twig.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/twig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar TwigHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var tags = \"autoescape|block|do|embed|extends|filter|flush|for|from|if|import|include|macro|sandbox|set|spaceless|use|verbatim\";\n    tags = tags + \"|end\" + tags.replace(/\\|/g, \"|end\");\n    var filters = \"abs|batch|capitalize|convert_encoding|date|date_modify|default|e|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|slice|sort|split|striptags|title|trim|upper|url_encode\";\n    var functions = \"attribute|constant|cycle|date|dump|parent|random|range|template_from_string\";\n    var tests = \"constant|divisibleby|sameas|defined|empty|even|iterable|odd\";\n    var constants = \"null|none|true|false\";\n    var operators = \"b-and|b-xor|b-or|in|is|and|or|not\";\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control.twig\": tags,\n        \"support.function.twig\": [filters, functions, tests].join(\"|\"),\n        \"keyword.operator.twig\": operators,\n        \"constant.language.twig\": constants\n    }, \"identifier\");\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift({\n            token: \"variable.other.readwrite.local.twig\",\n            regex: \"\\\\{\\\\{-?\",\n            push: \"twig-start\"\n        }, {\n            token: \"meta.tag.twig\",\n            regex: \"\\\\{%-?\",\n            push: \"twig-start\"\n        }, {\n            token: \"comment.block.twig\",\n            regex: \"\\\\{#-?\",\n            push: \"twig-comment\"\n        });\n    }\n    this.$rules[\"twig-comment\"] = [{\n            token: \"comment.block.twig\",\n            regex: \".*-?#\\\\}\",\n            next: \"pop\"\n        }];\n    this.$rules[\"twig-start\"] = [{\n            token: \"variable.other.readwrite.local.twig\",\n            regex: \"-?\\\\}\\\\}\",\n            next: \"pop\"\n        }, {\n            token: \"meta.tag.twig\",\n            regex: \"-?%\\\\}\",\n            next: \"pop\"\n        }, {\n            token: \"string\",\n            regex: \"'\",\n            next: \"twig-qstring\"\n        }, {\n            token: \"string\",\n            regex: '\"',\n            next: \"twig-qqstring\"\n        }, {\n            token: \"constant.numeric\",\n            regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token: \"constant.numeric\",\n            regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token: \"constant.language.boolean\",\n            regex: \"(?:true|false)\\\\b\"\n        }, {\n            token: keywordMapper,\n            regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token: \"keyword.operator.assignment\",\n            regex: \"=|~\"\n        }, {\n            token: \"keyword.operator.comparison\",\n            regex: \"==|!=|<|>|>=|<=|===\"\n        }, {\n            token: \"keyword.operator.arithmetic\",\n            regex: \"\\\\+|-|/|%|//|\\\\*|\\\\*\\\\*\"\n        }, {\n            token: \"keyword.operator.other\",\n            regex: \"\\\\.\\\\.|\\\\|\"\n        }, {\n            token: \"punctuation.operator\",\n            regex: /\\?|:|,|;|\\./\n        }, {\n            token: \"paren.lparen\",\n            regex: /[\\[\\({]/\n        }, {\n            token: \"paren.rparen\",\n            regex: /[\\])}]/\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }];\n    this.$rules[\"twig-qqstring\"] = [{\n            token: \"constant.language.escape\",\n            regex: /\\\\[\\\\\"$#ntr]|#{[^\"}]*}/\n        }, {\n            token: \"string\",\n            regex: '\"',\n            next: \"twig-start\"\n        }, {\n            defaultToken: \"string\"\n        }\n    ];\n    this.$rules[\"twig-qstring\"] = [{\n            token: \"constant.language.escape\",\n            regex: /\\\\[\\\\'ntr]}/\n        }, {\n            token: \"string\",\n            regex: \"'\",\n            next: \"twig-start\"\n        }, {\n            defaultToken: \"string\"\n        }\n    ];\n    this.normalizeRules();\n};\noop.inherits(TwigHighlightRules, TextHighlightRules);\nexports.TwigHighlightRules = TwigHighlightRules;\n\n});\n\nace.define(\"ace/mode/twig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/twig_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar TwigHighlightRules = require(\"./twig_highlight_rules\").TwigHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = TwigHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.blockComment = { start: \"{#\", end: \"#}\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/twig\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/twig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-typescript.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/typescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode_highlight_rules.tmpl.js (UUID: 21e323af-f665-4161-96e7-5087d262557e) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar TypeScriptHighlightRules = function (options) {\n    var tsRules = [\n        {\n            token: [\"storage.type\", \"text\", \"entity.name.function.ts\"],\n            regex: \"(function)(\\\\s+)([a-zA-Z0-9\\$_\\u00a1-\\uffff][a-zA-Z0-9\\d\\$_\\u00a1-\\uffff]*)\"\n        },\n        {\n            token: \"keyword\",\n            regex: \"(?:\\\\b(constructor|declare|interface|as|AS|public|private|extends|export|super|readonly|module|namespace|abstract|implements)\\\\b)\"\n        },\n        {\n            token: [\"keyword\", \"storage.type.variable.ts\"],\n            regex: \"(class|type)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*)\"\n        },\n        {\n            token: \"keyword\",\n            regex: \"\\\\b(?:super|export|import|keyof|infer)\\\\b\"\n        },\n        {\n            token: [\"storage.type.variable.ts\"],\n            regex: \"(?:\\\\b(this\\\\.|string\\\\b|bool\\\\b|boolean\\\\b|number\\\\b|true\\\\b|false\\\\b|undefined\\\\b|any\\\\b|null\\\\b|(?:unique )?symbol\\\\b|object\\\\b|never\\\\b|enum\\\\b))\"\n        }\n    ];\n    var JSRules = new JavaScriptHighlightRules({ jsx: (options && options.jsx) == true }).getRules();\n    JSRules.no_regex = tsRules.concat(JSRules.no_regex);\n    this.$rules = JSRules;\n};\noop.inherits(TypeScriptHighlightRules, JavaScriptHighlightRules);\nexports.TypeScriptHighlightRules = TypeScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/typescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/typescript_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar jsMode = require(\"./javascript\").Mode;\nvar TypeScriptHighlightRules = require(\"./typescript_highlight_rules\").TypeScriptHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function () {\n    this.HighlightRules = TypeScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, jsMode);\n(function () {\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.$id = \"ace/mode/typescript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/typescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-vala.js",
    "content": "ace.define(\"ace/mode/vala_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/* This file was autogenerated from https://raw.githubusercontent.com/technosophos/Vala-TMBundle/master/Syntaxes/Vala.tmLanguage (uuid: ) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ValaHighlightRules = function () {\n    this.$rules = { start: [{ token: ['meta.using.vala',\n                    'keyword.other.using.vala',\n                    'meta.using.vala',\n                    'storage.modifier.using.vala',\n                    'meta.using.vala',\n                    'punctuation.terminator.vala'],\n                regex: '^(\\\\s*)(using)\\\\b(?:(\\\\s*)([^ ;$]+)(\\\\s*)((?:;)?))?' },\n            { include: '#code' }],\n        '#all-types': [{ include: '#primitive-arrays' },\n            { include: '#primitive-types' },\n            { include: '#object-types' }],\n        '#annotations': [{ token: ['storage.type.annotation.vala',\n                    'punctuation.definition.annotation-arguments.begin.vala'],\n                regex: '(@[^ (]+)(\\\\()',\n                push: [{ token: 'punctuation.definition.annotation-arguments.end.vala',\n                        regex: '\\\\)',\n                        next: 'pop' },\n                    { token: ['constant.other.key.vala',\n                            'text',\n                            'keyword.operator.assignment.vala'],\n                        regex: '(\\\\w*)(\\\\s*)(=)' },\n                    { include: '#code' },\n                    { token: 'punctuation.seperator.property.vala', regex: ',' },\n                    { defaultToken: 'meta.declaration.annotation.vala' }] },\n            { token: 'storage.type.annotation.vala', regex: '@\\\\w*' }],\n        '#anonymous-classes-and-new': [{ token: 'keyword.control.new.vala',\n                regex: '\\\\bnew\\\\b',\n                push_disabled: [{ token: 'text',\n                        regex: '(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)',\n                        TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                        originalRegex: '(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)',\n                        next: 'pop' },\n                    { token: ['storage.type.vala', 'text'],\n                        regex: '(\\\\w+)(\\\\s*)(?=\\\\[)',\n                        push: [{ token: 'text', regex: '}|(?=;|\\\\))', next: 'pop' },\n                            { token: 'text',\n                                regex: '\\\\[',\n                                push: [{ token: 'text', regex: '\\\\]', next: 'pop' },\n                                    { include: '#code' }] },\n                            { token: 'text',\n                                regex: '{',\n                                push: [{ token: 'text', regex: '(?=})', next: 'pop' },\n                                    { include: '#code' }] }] },\n                    { token: 'text',\n                        regex: '(?=\\\\w.*\\\\()',\n                        push: [{ token: 'text',\n                                regex: '(?<=\\\\))',\n                                TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                                originalRegex: '(?<=\\\\))',\n                                next: 'pop' },\n                            { include: '#object-types' },\n                            { token: 'text',\n                                regex: '\\\\(',\n                                push: [{ token: 'text', regex: '\\\\)', next: 'pop' },\n                                    { include: '#code' }] }] },\n                    { token: 'meta.inner-class.vala',\n                        regex: '{',\n                        push: [{ token: 'meta.inner-class.vala', regex: '}', next: 'pop' },\n                            { include: '#class-body' },\n                            { defaultToken: 'meta.inner-class.vala' }] }] }],\n        '#assertions': [{ token: ['keyword.control.assert.vala',\n                    'meta.declaration.assertion.vala'],\n                regex: '\\\\b(assert|requires|ensures)(\\\\s)',\n                push: [{ token: 'meta.declaration.assertion.vala',\n                        regex: '$',\n                        next: 'pop' },\n                    { token: 'keyword.operator.assert.expression-seperator.vala',\n                        regex: ':' },\n                    { include: '#code' },\n                    { defaultToken: 'meta.declaration.assertion.vala' }] }],\n        '#class': [{ token: 'meta.class.vala',\n                regex: '(?=\\\\w?[\\\\w\\\\s]*(?:class|(?:@)?interface|enum|struct|namespace)\\\\s+\\\\w+)',\n                push: [{ token: 'paren.vala',\n                        regex: '}',\n                        next: 'pop' },\n                    { include: '#storage-modifiers' },\n                    { include: '#comments' },\n                    { token: ['storage.modifier.vala',\n                            'meta.class.identifier.vala',\n                            'entity.name.type.class.vala'],\n                        regex: '(class|(?:@)?interface|enum|struct|namespace)(\\\\s+)([\\\\w\\\\.]+)' },\n                    { token: 'storage.modifier.extends.vala',\n                        regex: ':',\n                        push: [{ token: 'meta.definition.class.inherited.classes.vala',\n                                regex: '(?={|,)',\n                                next: 'pop' },\n                            { include: '#object-types-inherited' },\n                            { include: '#comments' },\n                            { defaultToken: 'meta.definition.class.inherited.classes.vala' }] },\n                    { token: ['storage.modifier.implements.vala',\n                            'meta.definition.class.implemented.interfaces.vala'],\n                        regex: '(,)(\\\\s)',\n                        push: [{ token: 'meta.definition.class.implemented.interfaces.vala',\n                                regex: '(?=\\\\{)',\n                                next: 'pop' },\n                            { include: '#object-types-inherited' },\n                            { include: '#comments' },\n                            { defaultToken: 'meta.definition.class.implemented.interfaces.vala' }] },\n                    { token: 'paren.vala',\n                        regex: '{',\n                        push: [{ token: 'paren.vala', regex: '(?=})', next: 'pop' },\n                            { include: '#class-body' },\n                            { defaultToken: 'meta.class.body.vala' }] },\n                    { defaultToken: 'meta.class.vala' }],\n                comment: 'attempting to put namespace in here.' }],\n        '#class-body': [{ include: '#comments' },\n            { include: '#class' },\n            { include: '#enums' },\n            { include: '#methods' },\n            { include: '#annotations' },\n            { include: '#storage-modifiers' },\n            { include: '#code' }],\n        '#code': [{ include: '#comments' },\n            { include: '#class' },\n            { token: 'text',\n                regex: '{',\n                push: [{ token: 'text', regex: '}', next: 'pop' },\n                    { include: '#code' }] },\n            { include: '#assertions' },\n            { include: '#parens' },\n            { include: '#constants-and-special-vars' },\n            { include: '#anonymous-classes-and-new' },\n            { include: '#keywords' },\n            { include: '#storage-modifiers' },\n            { include: '#strings' },\n            { include: '#all-types' }],\n        '#comments': [{ token: 'punctuation.definition.comment.vala',\n                regex: '/\\\\*\\\\*/' },\n            { include: 'text.html.javadoc' },\n            { include: '#comments-inline' }],\n        '#comments-inline': [{ token: 'punctuation.definition.comment.vala',\n                regex: '/\\\\*',\n                push: [{ token: 'punctuation.definition.comment.vala',\n                        regex: '\\\\*/',\n                        next: 'pop' },\n                    { defaultToken: 'comment.block.vala' }] },\n            { token: ['text',\n                    'punctuation.definition.comment.vala',\n                    'comment.line.double-slash.vala'],\n                regex: '(\\\\s*)(//)(.*$)' }],\n        '#constants-and-special-vars': [{ token: 'constant.language.vala',\n                regex: '\\\\b(?:true|false|null)\\\\b' },\n            { token: 'variable.language.vala',\n                regex: '\\\\b(?:this|base)\\\\b' },\n            { token: 'constant.numeric.vala',\n                regex: '\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\\\b' },\n            { token: ['keyword.operator.dereference.vala', 'constant.other.vala'],\n                regex: '((?:\\\\.)?)\\\\b([A-Z][A-Z0-9_]+)(?!<|\\\\.class|\\\\s*\\\\w+\\\\s*=)\\\\b' }],\n        '#enums': [{ token: 'text',\n                regex: '^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))',\n                push: [{ token: 'text', regex: '(?=;|})', next: 'pop' },\n                    { token: 'constant.other.enum.vala',\n                        regex: '\\\\w+',\n                        push: [{ token: 'meta.enum.vala', regex: '(?=,|;|})', next: 'pop' },\n                            { include: '#parens' },\n                            { token: 'text',\n                                regex: '{',\n                                push: [{ token: 'text', regex: '}', next: 'pop' },\n                                    { include: '#class-body' }] },\n                            { defaultToken: 'meta.enum.vala' }] }] }],\n        '#keywords': [{ token: 'keyword.control.catch-exception.vala',\n                regex: '\\\\b(?:try|catch|finally|throw)\\\\b' },\n            { token: 'keyword.control.vala', regex: '\\\\?|:|\\\\?\\\\?' },\n            { token: 'keyword.control.vala',\n                regex: '\\\\b(?:return|break|case|continue|default|do|while|for|foreach|switch|if|else|in|yield|get|set|value)\\\\b' },\n            { token: 'keyword.operator.vala',\n                regex: '\\\\b(?:typeof|is|as)\\\\b' },\n            { token: 'keyword.operator.comparison.vala',\n                regex: '==|!=|<=|>=|<>|<|>' },\n            { token: 'keyword.operator.assignment.vala', regex: '=' },\n            { token: 'keyword.operator.increment-decrement.vala',\n                regex: '\\\\-\\\\-|\\\\+\\\\+' },\n            { token: 'keyword.operator.arithmetic.vala',\n                regex: '\\\\-|\\\\+|\\\\*|\\\\/|%' },\n            { token: 'keyword.operator.logical.vala', regex: '!|&&|\\\\|\\\\|' },\n            { token: 'keyword.operator.dereference.vala',\n                regex: '\\\\.(?=\\\\S)',\n                originalRegex: '(?<=\\\\S)\\\\.(?=\\\\S)' },\n            { token: 'punctuation.terminator.vala', regex: ';' },\n            { token: 'keyword.operator.ownership', regex: 'owned|unowned' }],\n        '#methods': [{ token: 'meta.method.vala',\n                regex: '(?!new)(?=\\\\w.*\\\\s+)(?=[^=]+\\\\()',\n                push: [{ token: 'paren.vala', regex: '}|(?=;)', next: 'pop' },\n                    { include: '#storage-modifiers' },\n                    { token: ['entity.name.function.vala', 'meta.method.identifier.vala'],\n                        regex: '([\\\\~\\\\w\\\\.]+)(\\\\s*\\\\()',\n                        push: [{ token: 'meta.method.identifier.vala',\n                                regex: '\\\\)',\n                                next: 'pop' },\n                            { include: '#parameters' },\n                            { defaultToken: 'meta.method.identifier.vala' }] },\n                    { token: 'meta.method.return-type.vala',\n                        regex: '(?=\\\\w.*\\\\s+\\\\w+\\\\s*\\\\()',\n                        push: [{ token: 'meta.method.return-type.vala',\n                                regex: '(?=\\\\w+\\\\s*\\\\()',\n                                next: 'pop' },\n                            { include: '#all-types' },\n                            { defaultToken: 'meta.method.return-type.vala' }] },\n                    { include: '#throws' },\n                    { token: 'paren.vala',\n                        regex: '{',\n                        push: [{ token: 'paren.vala', regex: '(?=})', next: 'pop' },\n                            { include: '#code' },\n                            { defaultToken: 'meta.method.body.vala' }] },\n                    { defaultToken: 'meta.method.vala' }] }],\n        '#namespace': [{ token: 'text',\n                regex: '^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))',\n                push: [{ token: 'text', regex: '(?=;|})', next: 'pop' },\n                    { token: 'constant.other.namespace.vala',\n                        regex: '\\\\w+',\n                        push: [{ token: 'meta.namespace.vala', regex: '(?=,|;|})', next: 'pop' },\n                            { include: '#parens' },\n                            { token: 'text',\n                                regex: '{',\n                                push: [{ token: 'text', regex: '}', next: 'pop' },\n                                    { include: '#code' }] },\n                            { defaultToken: 'meta.namespace.vala' }] }],\n                comment: 'This is not quite right. See the class grammar right now' }],\n        '#object-types': [{ token: 'storage.type.generic.vala',\n                regex: '\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<',\n                push: [{ token: 'storage.type.generic.vala',\n                        regex: '>|[^\\\\w\\\\s,\\\\?<\\\\[()\\\\]]',\n                        TODO: 'FIXME: regexp doesn\\'t have js equivalent',\n                        originalRegex: '>|[^\\\\w\\\\s,\\\\?<\\\\[(?:[,]+)\\\\]]',\n                        next: 'pop' },\n                    { include: '#object-types' },\n                    { token: 'storage.type.generic.vala',\n                        regex: '<',\n                        push: [{ token: 'storage.type.generic.vala',\n                                regex: '>|[^\\\\w\\\\s,\\\\[\\\\]<]',\n                                next: 'pop' },\n                            { defaultToken: 'storage.type.generic.vala' }],\n                        comment: 'This is just to support <>\\'s with no actual type prefix' },\n                    { defaultToken: 'storage.type.generic.vala' }] },\n            { token: 'storage.type.object.array.vala',\n                regex: '\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*(?=\\\\[)',\n                push: [{ token: 'storage.type.object.array.vala',\n                        regex: '(?=[^\\\\]\\\\s])',\n                        next: 'pop' },\n                    { token: 'text',\n                        regex: '\\\\[',\n                        push: [{ token: 'text', regex: '\\\\]', next: 'pop' },\n                            { include: '#code' }] },\n                    { defaultToken: 'storage.type.object.array.vala' }] },\n            { token: ['storage.type.vala',\n                    'keyword.operator.dereference.vala',\n                    'storage.type.vala'],\n                regex: '\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*\\\\b)' }],\n        '#object-types-inherited': [{ token: 'entity.other.inherited-class.vala',\n                regex: '\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<',\n                push: [{ token: 'entity.other.inherited-class.vala',\n                        regex: '>|[^\\\\w\\\\s,<]',\n                        next: 'pop' },\n                    { include: '#object-types' },\n                    { token: 'storage.type.generic.vala',\n                        regex: '<',\n                        push: [{ token: 'storage.type.generic.vala',\n                                regex: '>|[^\\\\w\\\\s,<]',\n                                next: 'pop' },\n                            { defaultToken: 'storage.type.generic.vala' }],\n                        comment: 'This is just to support <>\\'s with no actual type prefix' },\n                    { defaultToken: 'entity.other.inherited-class.vala' }] },\n            { token: ['entity.other.inherited-class.vala',\n                    'keyword.operator.dereference.vala',\n                    'entity.other.inherited-class.vala'],\n                regex: '\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*)' }],\n        '#parameters': [{ token: 'storage.modifier.vala', regex: 'final' },\n            { include: '#primitive-arrays' },\n            { include: '#primitive-types' },\n            { include: '#object-types' },\n            { token: 'variable.parameter.vala', regex: '\\\\w+' }],\n        '#parens': [{ token: 'text',\n                regex: '\\\\(',\n                push: [{ token: 'text', regex: '\\\\)', next: 'pop' },\n                    { include: '#code' }] }],\n        '#primitive-arrays': [{ token: 'storage.type.primitive.array.vala',\n                regex: '\\\\b(?:bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|int8|int16|int32|int64|uint8|uint16|uint32|uint64)(?:\\\\[\\\\])*\\\\b' }],\n        '#primitive-types': [{ token: 'storage.type.primitive.vala',\n                regex: '\\\\b(?:var|bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\\\\b',\n                comment: 'var is not really a primitive, but acts like one in most cases' }],\n        '#storage-modifiers': [{ token: 'storage.modifier.vala',\n                regex: '\\\\b(?:public|private|protected|internal|static|final|sealed|virtual|override|abstract|readonly|volatile|dynamic|async|unsafe|out|ref|weak|owned|unowned|const)\\\\b',\n                comment: 'Not sure about unsafe and readonly' }],\n        '#strings': [{ token: 'punctuation.definition.string.begin.vala',\n                regex: '@\"',\n                push: [{ token: 'punctuation.definition.string.end.vala',\n                        regex: '\"',\n                        next: 'pop' },\n                    { token: 'constant.character.escape.vala',\n                        regex: '\\\\\\\\.|%[\\\\w\\\\.\\\\-]+|\\\\$(?:\\\\w+|\\\\([\\\\w\\\\s\\\\+\\\\-\\\\*\\\\/]+\\\\))' },\n                    { defaultToken: 'string.quoted.interpolated.vala' }] },\n            { token: 'punctuation.definition.string.begin.vala',\n                regex: '\"',\n                push: [{ token: 'punctuation.definition.string.end.vala',\n                        regex: '\"',\n                        next: 'pop' },\n                    { token: 'constant.character.escape.vala', regex: '\\\\\\\\.' },\n                    { token: 'constant.character.escape.vala',\n                        regex: '%[\\\\w\\\\.\\\\-]+' },\n                    { defaultToken: 'string.quoted.double.vala' }] },\n            { token: 'punctuation.definition.string.begin.vala',\n                regex: '\\'',\n                push: [{ token: 'punctuation.definition.string.end.vala',\n                        regex: '\\'',\n                        next: 'pop' },\n                    { token: 'constant.character.escape.vala', regex: '\\\\\\\\.' },\n                    { defaultToken: 'string.quoted.single.vala' }] },\n            { token: 'punctuation.definition.string.begin.vala',\n                regex: '\"\"\"',\n                push: [{ token: 'punctuation.definition.string.end.vala',\n                        regex: '\"\"\"',\n                        next: 'pop' },\n                    { token: 'constant.character.escape.vala',\n                        regex: '%[\\\\w\\\\.\\\\-]+' },\n                    { defaultToken: 'string.quoted.triple.vala' }] }],\n        '#throws': [{ token: 'storage.modifier.vala',\n                regex: 'throws',\n                push: [{ token: 'meta.throwables.vala', regex: '(?={|;)', next: 'pop' },\n                    { include: '#object-types' },\n                    { defaultToken: 'meta.throwables.vala' }] }],\n        '#values': [{ include: '#strings' },\n            { include: '#object-types' },\n            { include: '#constants-and-special-vars' }] };\n    this.normalizeRules();\n};\nValaHighlightRules.metaData = {\n    comment: 'Based heavily on the Java bundle\\'s language syntax. TODO:\\n* Closures\\n* Delegates\\n* Properties: Better support for properties.\\n* Annotations\\n* Error domains\\n* Named arguments\\n* Array slicing, negative indexes, multidimensional\\n* construct blocks\\n* lock blocks?\\n* regex literals\\n* DocBlock syntax highlighting. (Currently importing javadoc)\\n* Folding rule for comments.\\n',\n    fileTypes: ['vala'],\n    foldingStartMarker: '(\\\\{\\\\s*(//.*)?$|^\\\\s*// \\\\{\\\\{\\\\{)',\n    foldingStopMarker: '^\\\\s*(\\\\}|// \\\\}\\\\}\\\\}$)',\n    name: 'Vala',\n    scopeName: 'source.vala'\n};\noop.inherits(ValaHighlightRules, TextHighlightRules);\nexports.ValaHighlightRules = ValaHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/vala\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/vala_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar ValaHighlightRules = require(\"./vala_highlight_rules\").ValaHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Mode = function () {\n    this.HighlightRules = ValaHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/vala\";\n    this.snippetFileId = \"ace/snippets/vala\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/vala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-vbscript.js",
    "content": "ace.define(\"ace/mode/vbscript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode_highlight_rules.tmpl.js (UUID: 7F9C9343-D48E-4E7D-BFE8-F680714DCD3E) */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar VBScriptHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control.asp\": \"If|Then|Else|ElseIf|End|While|Wend|For|To|Each|Case|Select|Return\"\n            + \"|Continue|Do|Until|Loop|Next|With|Exit|Function|Property|Type|Enum|Sub|IIf|Class\",\n        \"storage.type.asp\": \"Dim|Call|Const|Redim|Set|Let|Get|New|Randomize|Option|Explicit|Preserve|Erase|Execute|ExecuteGlobal\",\n        \"storage.modifier.asp\": \"Private|Public|Default\",\n        \"keyword.operator.asp\": \"Mod|And|Not|Or|Xor|As|Eqv|Imp|Is\",\n        \"constant.language.asp\": \"Empty|False|Nothing|Null|True\",\n        \"variable.language.vb.asp\": \"Me\",\n        \"support.class.vb.asp\": \"RegExp\",\n        \"support.class.asp\": \"Application|ObjectContext|Request|Response|Server|Session\",\n        \"support.class.collection.asp\": \"Contents|StaticObjects|ClientCertificate|Cookies|Form|QueryString|ServerVariables\",\n        \"support.constant.asp\": \"TotalBytes|Buffer|CacheControl|Charset|ContentType|Expires|ExpiresAbsolute\"\n            + \"|IsClientConnected|PICS|Status|ScriptTimeout|CodePage|LCID|SessionID|Timeout\",\n        \"support.function.asp\": \"Lock|Unlock|SetAbort|SetComplete|BinaryRead|AddHeader|AppendToLog\"\n            + \"|BinaryWrite|Clear|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon|Convert|Regex\",\n        \"support.function.event.asp\": \"Application_OnEnd|Application_OnStart\"\n            + \"|OnTransactionAbort|OnTransactionCommit|Session_OnEnd|Session_OnStart\",\n        \"support.function.vb.asp\": \"Array|Add|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng\"\n            + \"|Conversions|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial\"\n            + \"|DateValue|Day|Derived|Math|Escape|Eval|Exists|Exp|Filter|FormatCurrency\"\n            + \"|FormatDateTime|FormatNumber|FormatPercent|GetLocale|GetObject|GetRef|Hex\"\n            + \"|Hour|InputBox|InStr|InStrRev|Int|Fix|IsArray|IsDate|IsEmpty|IsNull|IsNumeric\"\n            + \"|IsObject|Item|Items|Join|Keys|LBound|LCase|Left|Len|LoadPicture|Log|LTrim|RTrim\"\n            + \"|Trim|Maths|Mid|Minute|Month|MonthName|MsgBox|Now|Oct|Remove|RemoveAll|Replace\"\n            + \"|RGB|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion\"\n            + \"|ScriptEngineMinorVersion|Second|SetLocale|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse\"\n            + \"|Tan|Time|Timer|TimeSerial|TimeValue|TypeName|UBound|UCase|Unescape|VarType|Weekday|WeekdayName|Year\"\n            + \"|AscB|AscW|ChrB|ChrW|InStrB|LeftB|LenB|MidB|RightB|Abs|GetUILanguage\",\n        \"support.type.vb.asp\": \"vbTrue|vbFalse|vbCr|vbCrLf|vbFormFeed|vbLf|vbNewLine|vbNullChar|vbNullString\"\n            + \"|vbTab|vbVerticalTab|vbBinaryCompare|vbTextCompare|vbSunday|vbMonday|vbTuesday|vbWednesday\"\n            + \"|vbThursday|vbFriday|vbSaturday|vbUseSystemDayOfWeek|vbFirstJan1|vbFirstFourDays|vbFirstFullWeek\"\n            + \"|vbGeneralDate|vbLongDate|vbShortDate|vbLongTime|vbShortTime|vbObjectError|vbEmpty|vbNull|vbInteger\"\n            + \"|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant\"\n            + \"|vbDataObject|vbDecimal|vbByte|vbArray|vbOKOnly|vbOKCancel|vbAbortRetryIgnore|vbYesNoCancel|vbYesNo\"\n            + \"|vbRetryCancel|vbCritical|vbQuestion|vbExclamation|vbInformation|vbDefaultButton1|vbDefaultButton2\"\n            + \"|vbDefaultButton3|vbDefaultButton4|vbApplicationModal|vbSystemModal|vbOK|vbCancel|vbAbort|vbRetry|vbIgnore|vbYes|vbNo\"\n            + \"|vbUseDefault\"\n    }, \"identifier\", true);\n    this.$rules = {\n        \"start\": [\n            {\n                token: [\n                    \"meta.ending-space\"\n                ],\n                regex: \"$\"\n            },\n            {\n                token: [null],\n                regex: \"^(?=\\\\t)\",\n                next: \"state_3\"\n            },\n            {\n                token: [null],\n                regex: \"^(?= )\",\n                next: \"state_4\"\n            },\n            {\n                token: [\n                    \"text\",\n                    \"storage.type.function.asp\",\n                    \"text\",\n                    \"entity.name.function.asp\",\n                    \"text\",\n                    \"punctuation.definition.parameters.asp\",\n                    \"variable.parameter.function.asp\",\n                    \"punctuation.definition.parameters.asp\"\n                ],\n                regex: \"^(\\\\s*)(Function|Sub)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()([^)]*)(\\\\))\"\n            },\n            {\n                token: \"punctuation.definition.comment.asp\",\n                regex: \"'|REM(?=\\\\s|$)\",\n                next: \"comment\",\n                caseInsensitive: true\n            },\n            {\n                token: \"storage.type.asp\",\n                regex: \"On\\\\s+Error\\\\s+(?:Resume\\\\s+Next|GoTo)\\\\b\",\n                caseInsensitive: true\n            },\n            {\n                token: \"punctuation.definition.string.begin.asp\",\n                regex: '\"',\n                next: \"string\"\n            },\n            {\n                token: [\n                    \"punctuation.definition.variable.asp\"\n                ],\n                regex: \"(\\\\$)[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b\\\\s*\"\n            },\n            {\n                token: \"constant.numeric.asp\",\n                regex: \"-?\\\\b(?:(?:0(?:x|X)[0-9a-fA-F]*)|(?:(?:[0-9]+\\\\.?[0-9]*)|(?:\\\\.[0-9]+))(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"\n            },\n            {\n                regex: \"\\\\w+\",\n                token: keywordMapper\n            },\n            {\n                token: [\"entity.name.function.asp\"],\n                regex: \"(?:(\\\\b[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b)(?=\\\\(\\\\)?))\"\n            },\n            {\n                token: [\"keyword.operator.asp\"],\n                regex: \"\\\\-|\\\\+|\\\\*|\\\\/|\\\\>|\\\\<|\\\\=|\\\\&|\\\\\\\\|\\\\^\"\n            }\n        ],\n        \"state_3\": [\n            {\n                token: [\n                    \"meta.odd-tab.tabs\",\n                    \"meta.even-tab.tabs\"\n                ],\n                regex: \"(\\\\t)(\\\\t)?\"\n            },\n            {\n                token: \"meta.leading-space\",\n                regex: \"(?=[^\\\\t])\",\n                next: \"start\"\n            },\n            {\n                token: \"meta.leading-space\",\n                regex: \".\",\n                next: \"state_3\"\n            }\n        ],\n        \"state_4\": [\n            {\n                token: [\"meta.odd-tab.spaces\", \"meta.even-tab.spaces\"],\n                regex: \"(  )(  )?\"\n            },\n            {\n                token: \"meta.leading-space\",\n                regex: \"(?=[^ ])\",\n                next: \"start\"\n            },\n            {\n                defaultToken: \"meta.leading-space\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment.line.apostrophe.asp\",\n                regex: \"$\",\n                next: \"start\"\n            },\n            {\n                defaultToken: \"comment.line.apostrophe.asp\"\n            }\n        ],\n        \"string\": [\n            {\n                token: \"constant.character.escape.apostrophe.asp\",\n                regex: '\"\"'\n            },\n            {\n                token: \"string.quoted.double.asp\",\n                regex: '\"',\n                next: \"start\"\n            },\n            {\n                defaultToken: \"string.quoted.double.asp\"\n            }\n        ]\n    };\n};\noop.inherits(VBScriptHighlightRules, TextHighlightRules);\nexports.VBScriptHighlightRules = VBScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/vbscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.indentKeywords = {\n        \"class\": 1,\n        \"function\": 1,\n        \"sub\": 1,\n        \"if\": 1,\n        \"select\": 1,\n        \"do\": 1,\n        \"for\": 1,\n        \"while\": 1,\n        \"with\": 1,\n        \"property\": 1,\n        \"else\": 1,\n        \"elseif\": 1,\n        \"end\": -1,\n        \"loop\": -1,\n        \"next\": -1,\n        \"wend\": -1\n    };\n    this.foldingStartMarker = /(?:\\s|^)(class|function|sub|if|select|do|for|while|with|property|else|elseif)\\b/i;\n    this.foldingStopMarker = /\\b(end|loop|next|wend)\\b/i;\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n        if (isStart || isEnd) {\n            var match = (isEnd) ? this.foldingStopMarker.exec(line) : this.foldingStartMarker.exec(line);\n            var keyword = match && match[1].toLowerCase();\n            if (keyword) {\n                var type = session.getTokenAt(row, match.index + 2).type;\n                if (type === \"keyword.control.asp\" || type === \"storage.type.function.asp\")\n                    return this.vbsBlock(session, row, match.index + 2);\n            }\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var isStart = this.foldingStartMarker.test(line);\n        var isEnd = this.foldingStopMarker.test(line);\n        if (isStart && !isEnd) {\n            var match = this.foldingStartMarker.exec(line);\n            var keyword = match && match[1].toLowerCase();\n            if (keyword) {\n                var type = session.getTokenAt(row, match.index + 2).type;\n                if (type == \"keyword.control.asp\" || type == \"storage.type.function.asp\") {\n                    if (keyword == \"if\" && !/then\\s*('|$)/i.test(line))\n                        return \"\";\n                    return \"start\";\n                }\n            }\n        }\n        return \"\";\n    };\n    this.vbsBlock = function (session, row, column, tokenRange) {\n        var stream = new TokenIterator(session, row, column);\n        var endOpenings = {\n            \"class\": 1,\n            \"function\": 1,\n            \"sub\": 1,\n            \"if\": 1,\n            \"select\": 1,\n            \"with\": 1,\n            \"property\": 1,\n            \"else\": 1,\n            \"elseif\": 1\n        };\n        var token = stream.getCurrentToken();\n        if (!token || (token.type != \"keyword.control.asp\" && token.type != \"storage.type.function.asp\"))\n            return;\n        var startTokenValue = token.value.toLowerCase();\n        var val = token.value.toLowerCase();\n        var stack = [val];\n        var dir = this.indentKeywords[val];\n        if (!dir)\n            return;\n        var firstRange = stream.getCurrentTokenRange();\n        switch (val) {\n            case \"property\":\n            case \"sub\":\n            case \"function\":\n            case \"if\":\n            case \"select\":\n            case \"do\":\n            case \"for\":\n            case \"class\":\n            case \"while\":\n            case \"with\":\n                var line = session.getLine(row);\n                var singleLineCondition = /^\\s*If\\s+.*\\s+Then(?!')\\s+(?!')\\S/i.test(line);\n                if (singleLineCondition)\n                    return;\n                var checkToken = new RegExp(\"(?:^|\\\\s)\" + val, \"i\");\n                var endTest = /^\\s*End\\s(If|Sub|Select|Function|Class|With|Property)\\s*/i.test(line);\n                if (!checkToken.test(line) && !endTest) {\n                    return;\n                }\n                if (endTest) {\n                    var tokenRange = stream.getCurrentTokenRange();\n                    stream.step = stream.stepBackward;\n                    stream.step();\n                    stream.step();\n                    token = stream.getCurrentToken();\n                    if (token) {\n                        val = token.value.toLowerCase();\n                        if (val == \"end\") {\n                            firstRange = stream.getCurrentTokenRange();\n                            firstRange = new Range(firstRange.start.row, firstRange.start.column, tokenRange.start.row, tokenRange.end.column);\n                        }\n                    }\n                    dir = -1;\n                }\n                break;\n            case \"end\":\n                var tokenPos = stream.getCurrentTokenPosition();\n                firstRange = stream.getCurrentTokenRange();\n                stream.step = stream.stepForward;\n                stream.step();\n                stream.step();\n                token = stream.getCurrentToken();\n                if (token) {\n                    val = token.value.toLowerCase();\n                    if (val in endOpenings) {\n                        startTokenValue = val;\n                        var nextTokenPos = stream.getCurrentTokenPosition();\n                        var endColumn = nextTokenPos.column + val.length;\n                        firstRange = new Range(tokenPos.row, tokenPos.column, nextTokenPos.row, endColumn);\n                    }\n                }\n                stream.step = stream.stepBackward;\n                stream.step();\n                stream.step();\n                break;\n        }\n        var startColumn = dir === -1 ? session.getLine(row - 1).length : session.getLine(row).length;\n        var startRow = row;\n        var ranges = [];\n        ranges.push(firstRange);\n        stream.step = dir === -1 ? stream.stepBackward : stream.stepForward;\n        while (token = stream.step()) {\n            var outputRange = null;\n            var ignore = false;\n            if (token.type != \"keyword.control.asp\" && token.type != \"storage.type.function.asp\")\n                continue;\n            val = token.value.toLowerCase();\n            var level = dir * this.indentKeywords[val];\n            switch (val) {\n                case \"property\":\n                case \"sub\":\n                case \"function\":\n                case \"if\":\n                case \"select\":\n                case \"do\":\n                case \"for\":\n                case \"class\":\n                case \"while\":\n                case \"with\":\n                    var line = session.getLine(stream.getCurrentTokenRow());\n                    var singleLineCondition = /^\\s*If\\s+.*\\s+Then(?!')\\s+(?!')\\S/i.test(line);\n                    if (singleLineCondition) {\n                        level = 0;\n                        ignore = true;\n                    }\n                    var checkToken = new RegExp(\"^\\\\s* end\\\\s+\" + val, \"i\");\n                    if (checkToken.test(line)) {\n                        level = 0;\n                        ignore = true;\n                    }\n                    break;\n                case \"elseif\":\n                case \"else\":\n                    level = 0;\n                    if (startTokenValue != \"elseif\") {\n                        ignore = true;\n                    }\n                    break;\n            }\n            if (level > 0) {\n                stack.unshift(val);\n            }\n            else if (level <= 0 && ignore === false) {\n                stack.shift();\n                if (!stack.length) {\n                    switch (val) {\n                        case \"end\":\n                            var tokenPos = stream.getCurrentTokenPosition();\n                            outputRange = stream.getCurrentTokenRange();\n                            stream.step();\n                            stream.step();\n                            token = stream.getCurrentToken();\n                            if (token) {\n                                val = token.value.toLowerCase();\n                                if (val in endOpenings) {\n                                    if ((startTokenValue == \"else\" || startTokenValue == \"elseif\")) {\n                                        if (val !== \"if\") {\n                                            ranges.shift();\n                                        }\n                                    }\n                                    else {\n                                        if (val != startTokenValue)\n                                            ranges.shift();\n                                    }\n                                    var nextTokenPos = stream.getCurrentTokenPosition();\n                                    var endColumn = nextTokenPos.column + val.length;\n                                    outputRange = new Range(tokenPos.row, tokenPos.column, nextTokenPos.row, endColumn);\n                                }\n                                else {\n                                    ranges.shift();\n                                }\n                            }\n                            else {\n                                ranges.shift();\n                            }\n                            stream.step = stream.stepBackward;\n                            stream.step();\n                            stream.step();\n                            token = stream.getCurrentToken();\n                            val = token.value.toLowerCase();\n                            break;\n                        case \"select\":\n                        case \"sub\":\n                        case \"if\":\n                        case \"function\":\n                        case \"class\":\n                        case \"with\":\n                        case \"property\":\n                            if (val != startTokenValue)\n                                ranges.shift();\n                            break;\n                        case \"do\":\n                            if (startTokenValue != \"loop\")\n                                ranges.shift();\n                            break;\n                        case \"loop\":\n                            if (startTokenValue != \"do\")\n                                ranges.shift();\n                            break;\n                        case \"for\":\n                            if (startTokenValue != \"next\")\n                                ranges.shift();\n                            break;\n                        case \"next\":\n                            if (startTokenValue != \"for\")\n                                ranges.shift();\n                            break;\n                        case \"while\":\n                            if (startTokenValue != \"wend\")\n                                ranges.shift();\n                            break;\n                        case \"wend\":\n                            if (startTokenValue != \"while\")\n                                ranges.shift();\n                            break;\n                    }\n                    break;\n                }\n                if (level === 0) {\n                    stack.unshift(val);\n                }\n            }\n        }\n        if (!token)\n            return null;\n        if (tokenRange) {\n            if (!outputRange) {\n                ranges.push(stream.getCurrentTokenRange());\n            }\n            else {\n                ranges.push(outputRange);\n            }\n            return ranges;\n        }\n        var row = stream.getCurrentTokenRow();\n        if (dir === -1) {\n            var endColumn = session.getLine(row).length;\n            return new Range(row, endColumn, startRow - 1, startColumn);\n        }\n        else\n            return new Range(startRow, startColumn, row - 1, session.getLine(row - 1).length);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/vbscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/vbscript_highlight_rules\",\"ace/mode/folding/vbscript\",\"ace/range\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar VBScriptHighlightRules = require(\"./vbscript_highlight_rules\").VBScriptHighlightRules;\nvar FoldMode = require(\"./folding/vbscript\").FoldMode;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n    this.HighlightRules = VBScriptHighlightRules;\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n    this.indentKeywords = this.foldingRules.indentKeywords;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = [\"'\", \"REM\"];\n    var outdentKeywords = [\n        \"else\",\n        \"elseif\",\n        \"end\",\n        \"loop\",\n        \"next\",\n        \"wend\"\n    ];\n    function getNetIndentLevel(tokens, line, indentKeywords) {\n        var level = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (token.type == \"keyword.control.asp\" || token.type == \"storage.type.function.asp\") {\n                var val = token.value.toLowerCase();\n                if (val in indentKeywords) {\n                    switch (val) {\n                        case \"property\":\n                        case \"sub\":\n                        case \"function\":\n                        case \"select\":\n                        case \"do\":\n                        case \"for\":\n                        case \"class\":\n                        case \"while\":\n                        case \"with\":\n                        case \"if\":\n                            var checkToken = new RegExp(\"^\\\\s* end\\\\s+\" + val, \"i\");\n                            var singleLineCondition = /^\\s*If\\s+.*\\s+Then(?!')\\s+(?!')\\S/i.test(line);\n                            if (!singleLineCondition && !checkToken.test(line))\n                                level += indentKeywords[val];\n                            break;\n                        default:\n                            level += indentKeywords[val];\n                            break;\n                    }\n                }\n            }\n        }\n        if (level < 0) {\n            return -1;\n        }\n        else if (level > 0) {\n            return 1;\n        }\n        else {\n            return 0;\n        }\n    }\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var level = 0;\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        if (state == \"start\") {\n            level = getNetIndentLevel(tokens, line, this.indentKeywords);\n        }\n        if (level > 0) {\n            return indent + tab;\n        }\n        else if (level < 0 && indent.substr(indent.length - tab.length) == tab) {\n            if (!this.checkOutdent(state, line, \"\\n\")) {\n                return indent.substr(0, indent.length - tab.length);\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        if (input != \"\\n\" && input != \"\\r\" && input != \"\\r\\n\")\n            return false;\n        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;\n        if (!tokens || !tokens.length)\n            return false;\n        var val = tokens[0].value.toLowerCase();\n        return ((tokens[0].type == \"keyword.control.asp\" || tokens[0].type == \"storage.type.function.asp\") && outdentKeywords.indexOf(val) != -1);\n    };\n    this.getMatching = function (session, row, column, tokenRange) {\n        if (row == undefined) {\n            var pos = session.selection.lead;\n            column = pos.column;\n            row = pos.row;\n        }\n        if (tokenRange == undefined)\n            tokenRange = true;\n        var startToken = session.getTokenAt(row, column);\n        if (startToken) {\n            var val = startToken.value.toLowerCase();\n            if (val in this.indentKeywords)\n                return this.foldingRules.vbsBlock(session, row, column, tokenRange);\n        }\n    };\n    this.autoOutdent = function (state, session, row) {\n        var line = session.getLine(row);\n        var column = line.match(/^\\s*/)[0].length;\n        if (!column || !row)\n            return;\n        var startRange = this.getMatching(session, row, column + 1, false);\n        if (!startRange || startRange.start.row == row)\n            return;\n        var indent = this.$getIndent(session.getLine(startRange.start.row));\n        if (indent.length != column) {\n            session.replace(new Range(row, 0, row, column), indent);\n            session.outdentRows(new Range(row + 1, 0, row + 1, 0));\n        }\n    };\n    this.$id = \"ace/mode/vbscript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/vbscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-velocity.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/velocity_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar VelocityHighlightRules = function () {\n    HtmlHighlightRules.call(this);\n    var builtinConstants = lang.arrayToMap(('true|false|null').split('|'));\n    var builtinFunctions = lang.arrayToMap((\"_DateTool|_DisplayTool|_EscapeTool|_FieldTool|_MathTool|_NumberTool|_SerializerTool|_SortTool|_StringTool|_XPathTool\").split('|'));\n    var builtinVariables = lang.arrayToMap(('$contentRoot|$foreach').split('|'));\n    var keywords = lang.arrayToMap((\"#set|#macro|#include|#parse|\" +\n        \"#if|#elseif|#else|#foreach|\" +\n        \"#break|#end|#stop\").split('|'));\n    this.$rules.start.push({\n        token: \"comment\",\n        regex: \"##.*$\"\n    }, {\n        token: \"comment.block\",\n        regex: \"#\\\\*\",\n        next: \"vm_comment\"\n    }, {\n        token: \"string.regexp\",\n        regex: \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n    }, {\n        token: \"string\",\n        regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n    }, {\n        token: \"string\",\n        regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n    }, {\n        token: \"constant.numeric\",\n        regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n    }, {\n        token: \"constant.numeric\",\n        regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n    }, {\n        token: \"constant.language.boolean\",\n        regex: \"(?:true|false)\\\\b\"\n    }, {\n        token: function (value) {\n            if (keywords.hasOwnProperty(value))\n                return \"keyword\";\n            else if (builtinConstants.hasOwnProperty(value))\n                return \"constant.language\";\n            else if (builtinVariables.hasOwnProperty(value))\n                return \"variable.language\";\n            else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1)))\n                return \"support.function\";\n            else if (value == \"debugger\")\n                return \"invalid.deprecated\";\n            else if (value.match(/^(\\$[a-zA-Z_][a-zA-Z0-9_]*)$/))\n                return \"variable\";\n            return \"identifier\";\n        },\n        regex: \"[a-zA-Z$#][a-zA-Z0-9_]*\\\\b\"\n    }, {\n        token: \"keyword.operator\",\n        regex: \"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"\n    }, {\n        token: \"lparen\",\n        regex: \"[[({]\"\n    }, {\n        token: \"rparen\",\n        regex: \"[\\\\])}]\"\n    }, {\n        token: \"text\",\n        regex: \"\\\\s+\"\n    });\n    this.$rules[\"vm_comment\"] = [\n        {\n            token: \"comment\",\n            regex: \"\\\\*#|-->\",\n            next: \"start\"\n        }, {\n            defaultToken: \"comment\"\n        }\n    ];\n    this.$rules[\"vm_start\"] = [\n        {\n            token: \"variable\",\n            regex: \"}\",\n            next: \"pop\"\n        }, {\n            token: \"string.regexp\",\n            regex: \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"\n        }, {\n            token: \"string\",\n            regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token: \"string\",\n            regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token: \"constant.numeric\",\n            regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n        }, {\n            token: \"constant.numeric\",\n            regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n        }, {\n            token: \"constant.language.boolean\",\n            regex: \"(?:true|false)\\\\b\"\n        }, {\n            token: function (value) {\n                if (keywords.hasOwnProperty(value))\n                    return \"keyword\";\n                else if (builtinConstants.hasOwnProperty(value))\n                    return \"constant.language\";\n                else if (builtinVariables.hasOwnProperty(value))\n                    return \"variable.language\";\n                else if (builtinFunctions.hasOwnProperty(value) || builtinFunctions.hasOwnProperty(value.substring(1)))\n                    return \"support.function\";\n                else if (value == \"debugger\")\n                    return \"invalid.deprecated\";\n                else if (value.match(/^(\\$[a-zA-Z_$][a-zA-Z0-9_]*)$/))\n                    return \"variable\";\n                return \"identifier\";\n            },\n            regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n        }, {\n            token: \"keyword.operator\",\n            regex: \"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"\n        }, {\n            token: \"lparen\",\n            regex: \"[[({]\"\n        }, {\n            token: \"rparen\",\n            regex: \"[\\\\])}]\"\n        }, {\n            token: \"text\",\n            regex: \"\\\\s+\"\n        }\n    ];\n    for (var i in this.$rules) {\n        this.$rules[i].unshift({\n            token: \"variable\",\n            regex: \"\\\\${\",\n            push: \"vm_start\"\n        });\n    }\n    this.normalizeRules();\n};\noop.inherits(VelocityHighlightRules, TextHighlightRules);\nexports.VelocityHighlightRules = VelocityHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/velocity\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"##\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"##\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"##\" && next[indent] == \"##\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"##\" && prev[indent] == \"##\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/velocity\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/velocity_highlight_rules\",\"ace/mode/folding/velocity\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar VelocityHighlightRules = require(\"./velocity_highlight_rules\").VelocityHighlightRules;\nvar FoldMode = require(\"./folding/velocity\").FoldMode;\nvar Mode = function () {\n    HtmlMode.call(this);\n    this.HighlightRules = VelocityHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, HtmlMode);\n(function () {\n    this.lineCommentStart = \"##\";\n    this.blockComment = { start: \"#*\", end: \"*#\" };\n    this.$id = \"ace/mode/velocity\";\n    this.snippetFileId = \"ace/snippets/velocity\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/velocity\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-verilog.js",
    "content": "ace.define(\"ace/mode/verilog_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar VerilogHighlightRules = function () {\n    var keywords = \"always|and|assign|automatic|begin|buf|bufif0|bufif1|case|casex|casez|cell|cmos|config|\" +\n        \"deassign|default|defparam|design|disable|edge|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|\" +\n        \"endprimitive|endspecify|endtable|endtask|event|for|force|forever|fork|function|generate|genvar|highz0|\" +\n        \"highz1|if|ifnone|incdir|include|initial|inout|input|instance|integer|join|large|liblist|library|localparam|\" +\n        \"macromodule|medium|module|nand|negedge|nmos|nor|noshowcancelled|not|notif0|notif1|or|output|parameter|pmos|\" +\n        \"posedge|primitive|pull0|pull1|pulldown|pullup|pulsestyle_onevent|pulsestyle_ondetect|rcmos|real|realtime|\" +\n        \"reg|release|repeat|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|showcancelled|signed|small|specify|specparam|\" +\n        \"strong0|strong1|supply0|supply1|table|task|time|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|\" +\n        \"unsigned|use|vectored|wait|wand|weak0|weak1|while|wire|wor|xnor|xor\" +\n        \"begin|bufif0|bufif1|case|casex|casez|config|else|end|endcase|endconfig|endfunction|\" +\n        \"endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|for|forever|function|generate|if|ifnone|\" +\n        \"macromodule|module|primitive|repeat|specify|table|task|while\";\n    var builtinConstants = (\"true|false|null\");\n    var builtinFunctions = (\"count|min|max|avg|sum|rank|now|coalesce|main\");\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": builtinFunctions,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants\n    }, \"identifier\", true);\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"//.*$\"\n            }, {\n                token: \"comment.start\",\n                regex: \"/\\\\*\",\n                next: [\n                    { token: \"comment.end\", regex: \"\\\\*/\", next: \"start\" },\n                    { defaultToken: \"comment\" }\n                ]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                next: [\n                    { token: \"constant.language.escape\", regex: /\\\\(?:[ntvfa\\\\\"]|[0-7]{1,3}|\\x[a-fA-F\\d]{1,2}|)/, consumeLineEnd: true },\n                    { token: \"string.end\", regex: '\"|$', next: \"start\" },\n                    { defaultToken: \"string\" }\n                ]\n            }, {\n                token: \"string\",\n                regex: \"'^[']'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[\\\\(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\)]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(VerilogHighlightRules, TextHighlightRules);\nexports.VerilogHighlightRules = VerilogHighlightRules;\n\n});\n\nace.define(\"ace/mode/verilog\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/verilog_highlight_rules\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar VerilogHighlightRules = require(\"./verilog_highlight_rules\").VerilogHighlightRules;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n    this.HighlightRules = VerilogHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"' };\n    this.$id = \"ace/mode/verilog\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/verilog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-vhdl.js",
    "content": "ace.define(\"ace/mode/vhdl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar VHDLHighlightRules = function () {\n    var keywords = \"access|after|alias|all|architecture|assert|attribute|\" +\n        \"begin|block|body|buffer|bus|case|component|configuration|\" +\n        \"context|disconnect|downto|else|elsif|end|entity|exit|\" +\n        \"file|for|force|function|generate|generic|group|guarded|\" +\n        \"if|impure|in|inertial|inout|is|label|library|linkage|\" +\n        \"literal|loop|map|new|next|of|on|or|open|others|out|\" +\n        \"package|parameter|port|postponed|procedure|process|\" +\n        \"protected|pure|range|record|register|reject|release|\" +\n        \"report|return|select|severity|shared|signal|subtype|then|\" +\n        \"to|transport|type|unaffected|units|until|use|variable|\" +\n        \"wait|when|while|with\";\n    var storageType = \"bit|bit_vector|boolean|character|integer|line|natural|\" +\n        \"positive|real|register|signed|std_logic|\" +\n        \"std_logic_vector|string||text|time|unsigned\";\n    var storageModifiers = \"array|constant\";\n    var keywordOperators = \"abs|and|mod|nand|nor|not|rem|rol|ror|sla|sll|sra\" +\n        \"srl|xnor|xor\";\n    var builtinConstants = (\"true|false|null\");\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.operator\": keywordOperators,\n        \"keyword\": keywords,\n        \"constant.language\": builtinConstants,\n        \"storage.modifier\": storageModifiers,\n        \"storage.type\": storageType\n    }, \"identifier\", true);\n    this.$rules = {\n        \"start\": [{\n                token: \"comment\",\n                regex: \"--.*$\"\n            }, {\n                token: \"string\",\n                regex: '\".*?\"'\n            }, {\n                token: \"string\",\n                regex: \"'.*?'\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token: \"keyword\",\n                regex: \"\\\\s*(?:library|package|use)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"&|\\\\*|\\\\+|\\\\-|\\\\/|<|=|>|\\\\||=>|\\\\*\\\\*|:=|\\\\/=|>=|<=|<>\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"\\\\'|\\\\:|\\\\,|\\\\;|\\\\.\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[(]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }]\n    };\n};\noop.inherits(VHDLHighlightRules, TextHighlightRules);\nexports.VHDLHighlightRules = VHDLHighlightRules;\n\n});\n\nace.define(\"ace/mode/vhdl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/vhdl_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar VHDLHighlightRules = require(\"./vhdl_highlight_rules\").VHDLHighlightRules;\nvar Mode = function () {\n    this.HighlightRules = VHDLHighlightRules;\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"--\";\n    this.$id = \"ace/mode/vhdl\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/vhdl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-visualforce.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|flex-end|flex-start|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\nvar CssHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n    this.$rules = {\n        \"start\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"ruleset\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\"\n            }, {\n                token: \"string\",\n                regex: \"@(?!viewport)\",\n                next: \"media\"\n            }, {\n                token: \"keyword\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"keyword\",\n                regex: \"%\"\n            }, {\n                token: \"variable\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"string\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                caseInsensitive: true\n            }],\n        \"media\": [{\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: \"paren.lparen\",\n                regex: \"\\\\{\",\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex: \";\",\n                next: \"start\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n                    + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n                    + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n            }],\n        \"comments\": [{\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                push: [{\n                        token: \"comment\",\n                        regex: \"\\\\*\\\\/\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"comment\"\n                    }]\n            }],\n        \"ruleset\": [{\n                regex: \"-(webkit|ms|moz|o)-\",\n                token: \"text\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[:;]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"\\\\}\",\n                next: \"start\"\n            }, {\n                include: [\"strings\", \"url\", \"comments\"]\n            }, {\n                token: [\"constant.numeric\", \"keyword\"],\n                regex: \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)\"\n            }, {\n                token: \"constant.numeric\",\n                regex: numRe\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{6}\"\n            }, {\n                token: \"constant.numeric\",\n                regex: \"#[a-f0-9]{3}\"\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n                regex: pseudoElements\n            }, {\n                token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n                regex: pseudoClasses\n            }, {\n                include: \"url\"\n            }, {\n                token: keywordMapper,\n                regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n            }, {\n                caseInsensitive: true\n            }],\n        url: [{\n                token: \"support.function\",\n                regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n                push: [{\n                        token: \"support.function\",\n                        regex: \"\\\\)\",\n                        next: \"pop\"\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        strings: [{\n                token: \"string.start\",\n                regex: \"'\",\n                push: [{\n                        token: \"string.end\",\n                        regex: \"'|$\",\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }, {\n                token: \"string.start\",\n                regex: '\"',\n                push: [{\n                        token: \"string.end\",\n                        regex: '\"|$',\n                        next: \"pop\"\n                    }, {\n                        include: \"escapes\"\n                    }, {\n                        token: \"constant.language.escape\",\n                        regex: /\\\\$/,\n                        consumeLineEnd: true\n                    }, {\n                        defaultToken: \"string\"\n                    }]\n            }],\n        escapes: [{\n                token: \"constant.language.escape\",\n                regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n            }]\n    };\n    this.normalizeRules();\n};\noop.inherits(CssHighlightRules, TextHighlightRules);\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar propertyMap = {\n    \"background\": { \"#$0\": 1 },\n    \"background-color\": { \"#$0\": 1, \"transparent\": 1, \"fixed\": 1 },\n    \"background-image\": { \"url('/$0')\": 1 },\n    \"background-repeat\": { \"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1 },\n    \"background-position\": { \"bottom\": 2, \"center\": 2, \"left\": 2, \"right\": 2, \"top\": 2, \"inherit\": 2 },\n    \"background-attachment\": { \"scroll\": 1, \"fixed\": 1 },\n    \"background-size\": { \"cover\": 1, \"contain\": 1 },\n    \"background-clip\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"background-origin\": { \"border-box\": 1, \"padding-box\": 1, \"content-box\": 1 },\n    \"border\": { \"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1 },\n    \"border-color\": { \"#$0\": 1 },\n    \"border-style\": { \"solid\": 2, \"dashed\": 2, \"dotted\": 2, \"double\": 2, \"groove\": 2, \"hidden\": 2, \"inherit\": 2, \"inset\": 2, \"none\": 2, \"outset\": 2, \"ridged\": 2 },\n    \"border-collapse\": { \"collapse\": 1, \"separate\": 1 },\n    \"bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"clear\": { \"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1 },\n    \"color\": { \"#$0\": 1, \"rgb(#$00,0,0)\": 1 },\n    \"cursor\": { \"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1 },\n    \"display\": { \"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1 },\n    \"empty-cells\": { \"show\": 1, \"hide\": 1 },\n    \"float\": { \"left\": 1, \"right\": 1, \"none\": 1 },\n    \"font-family\": { \"Arial\": 2, \"Comic Sans MS\": 2, \"Consolas\": 2, \"Courier New\": 2, \"Courier\": 2, \"Georgia\": 2, \"Monospace\": 2, \"Sans-Serif\": 2, \"Segoe UI\": 2, \"Tahoma\": 2, \"Times New Roman\": 2, \"Trebuchet MS\": 2, \"Verdana\": 1 },\n    \"font-size\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"font-weight\": { \"bold\": 1, \"normal\": 1 },\n    \"font-style\": { \"italic\": 1, \"normal\": 1 },\n    \"font-variant\": { \"normal\": 1, \"small-caps\": 1 },\n    \"height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"letter-spacing\": { \"normal\": 1 },\n    \"line-height\": { \"normal\": 1 },\n    \"list-style-type\": { \"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1 },\n    \"margin\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"margin-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"max-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-height\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"min-width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"overflow\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-x\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"overflow-y\": { \"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1 },\n    \"padding\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-bottom\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"padding-left\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"page-break-after\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"page-break-before\": { \"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1 },\n    \"position\": { \"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1 },\n    \"right\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"table-layout\": { \"fixed\": 1, \"auto\": 1 },\n    \"text-decoration\": { \"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1 },\n    \"text-align\": { \"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1 },\n    \"text-transform\": { \"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1 },\n    \"top\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"vertical-align\": { \"top\": 1, \"bottom\": 1 },\n    \"visibility\": { \"hidden\": 1, \"visible\": 1 },\n    \"white-space\": { \"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1 },\n    \"width\": { \"px\": 1, \"em\": 1, \"%\": 1 },\n    \"word-spacing\": { \"normal\": 1 },\n    \"filter\": { \"alpha(opacity=$0100)\": 1 },\n    \"text-shadow\": { \"$02px 2px 2px #777\": 1 },\n    \"text-overflow\": { \"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1 },\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-moz-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 },\n    \"-webkit-transform\": { \"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\nvar CssCompletions = function () {\n};\n(function () {\n    this.completionsDefined = false;\n    this.defineCompletions = function () {\n        if (document) {\n            var style = document.createElement('c').style;\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n                var name = i.replace(/[A-Z]/g, function (x) {\n                    return '-' + x.toLowerCase();\n                });\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n        this.completionsDefined = true;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n        if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            var inParens = /\\([^)]*$/.test(line);\n            if (inParens) {\n                line = line.substr(line.lastIndexOf('(') + 1);\n            }\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            }\n            else {\n                return this.getPropertyCompletions(state, session, pos, prefix, inParens);\n            }\n        }\n        return [];\n    };\n    this.getPropertyCompletions = function (state, session, pos, prefix, skipSemicolon) {\n        skipSemicolon = skipSemicolon || false;\n        var properties = Object.keys(propertyMap);\n        return properties.map(function (property) {\n            return {\n                caption: property,\n                snippet: property + ': $0' + (skipSemicolon ? '' : ';'),\n                meta: \"property\",\n                score: 1000000\n            };\n        });\n    };\n    this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: 1000000\n            };\n        });\n    };\n}).call(CssCompletions.prototype);\nexports.CssCompletions = CssCompletions;\n\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar CssBehaviour = function () {\n    this.inherit(CstyleBehaviour);\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n                if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n                    return {\n                        text: ':;',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column++;\n                    return range;\n                }\n            }\n        }\n    });\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                    text: '',\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === '!' && editor.selection.isEmpty()) {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n                return {\n                    text: '!important',\n                    selection: [10, 10]\n                };\n            }\n        }\n    });\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\nexports.CssBehaviour = CssBehaviour;\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.foldingRules = \"cStyle\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/css\";\n    this.snippetFileId = \"ace/snippets/css\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar tagMap = lang.createMap({\n    a: 'anchor',\n    button: 'form',\n    form: 'form',\n    img: 'image',\n    input: 'form',\n    label: 'form',\n    option: 'form',\n    script: 'script',\n    select: 'form',\n    textarea: 'form',\n    style: 'style',\n    table: 'table',\n    tbody: 'table',\n    td: 'table',\n    tfoot: 'table',\n    th: 'table',\n    tr: 'table'\n});\nvar HtmlHighlightRules = function () {\n    XmlHighlightRules.call(this);\n    this.addRules({\n        attributes: [{\n                include: \"tag_whitespace\"\n            }, {\n                token: \"entity.other.attribute-name.xml\",\n                regex: \"[-_a-zA-Z0-9:.]+\"\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\",\n                push: [{\n                        include: \"tag_whitespace\"\n                    }, {\n                        token: \"string.unquoted.attribute-value.html\",\n                        regex: \"[^<>='\\\"`\\\\s]+\",\n                        next: \"pop\"\n                    }, {\n                        token: \"empty\",\n                        regex: \"\",\n                        next: \"pop\"\n                    }]\n            }, {\n                include: \"attribute_value\"\n            }],\n        tag: [{\n                token: function (start, tag) {\n                    var group = tagMap[tag];\n                    return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                        \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n                },\n                regex: \"(</?)([-_a-zA-Z0-9:.]+)\",\n                next: \"tag_stuff\"\n            }],\n        tag_stuff: [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n        ]\n    });\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({ jsx: false }).getRules(), \"js-\", \"script\");\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\nexports.HtmlHighlightRules = HtmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.$getMode = function (state) {\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    this.$tryMode = function (state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        return (this.$tryMode(session.getState(row - 1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row));\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row - 1));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\nvar globalAttributes = commonAttributes.concat(eventAttributes);\nvar attributeMap = {\n    \"a\": { \"href\": 1, \"target\": { \"_blank\": 1, \"top\": 1 }, \"ping\": 1, \"rel\": { \"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1 }, \"media\": 1, \"hreflang\": 1, \"type\": 1 },\n    \"abbr\": {},\n    \"address\": {},\n    \"area\": { \"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1 },\n    \"article\": { \"pubdate\": 1 },\n    \"aside\": {},\n    \"audio\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"b\": {},\n    \"base\": { \"href\": 1, \"target\": 1 },\n    \"bdi\": {},\n    \"bdo\": {},\n    \"blockquote\": { \"cite\": 1 },\n    \"body\": { \"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1 },\n    \"br\": {},\n    \"button\": { \"autofocus\": 1, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": { \"button\": 1, \"submit\": 1 } },\n    \"canvas\": { \"width\": 1, \"height\": 1 },\n    \"caption\": {},\n    \"cite\": {},\n    \"code\": {},\n    \"col\": { \"span\": 1 },\n    \"colgroup\": { \"span\": 1 },\n    \"command\": { \"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1 },\n    \"data\": {},\n    \"datalist\": {},\n    \"dd\": {},\n    \"del\": { \"cite\": 1, \"datetime\": 1 },\n    \"details\": { \"open\": 1 },\n    \"dfn\": {},\n    \"dialog\": { \"open\": 1 },\n    \"div\": {},\n    \"dl\": {},\n    \"dt\": {},\n    \"em\": {},\n    \"embed\": { \"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1 },\n    \"fieldset\": { \"disabled\": 1, \"form\": 1, \"name\": 1 },\n    \"figcaption\": {},\n    \"figure\": {},\n    \"footer\": {},\n    \"form\": { \"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": { \"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1 }, \"method\": { \"get\": 1, \"post\": 1 }, \"name\": 1, \"novalidate\": 1, \"target\": { \"_blank\": 1, \"top\": 1 } },\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"head\": {},\n    \"header\": {},\n    \"hr\": {},\n    \"html\": { \"manifest\": 1 },\n    \"i\": {},\n    \"iframe\": { \"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": { \"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1 }, \"seamless\": { \"seamless\": 1 } },\n    \"img\": { \"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1 },\n    \"input\": {\n        \"type\": { \"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1 },\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": { \"on\": 1, \"off\": 1 }, \"autofocus\": { \"autofocus\": 1 }, \"checked\": { \"checked\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"formaction\": 1, \"formenctype\": { \"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1 }, \"formmethod\": { \"get\": 1, \"post\": 1 }, \"formnovalidate\": { \"formnovalidate\": 1 }, \"formtarget\": { \"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1 }, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1\n    },\n    \"ins\": { \"cite\": 1, \"datetime\": 1 },\n    \"kbd\": {},\n    \"keygen\": { \"autofocus\": 1, \"challenge\": { \"challenge\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"keytype\": { \"rsa\": 1, \"dsa\": 1, \"ec\": 1 }, \"name\": 1 },\n    \"label\": { \"form\": 1, \"for\": 1 },\n    \"legend\": {},\n    \"li\": { \"value\": 1 },\n    \"link\": { \"href\": 1, \"hreflang\": 1, \"rel\": { \"stylesheet\": 1, \"icon\": 1 }, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"type\": { \"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1 }, \"sizes\": 1 },\n    \"main\": {},\n    \"map\": { \"name\": 1 },\n    \"mark\": {},\n    \"math\": {},\n    \"menu\": { \"type\": 1, \"label\": 1 },\n    \"meta\": { \"http-equiv\": { \"content-type\": 1 }, \"name\": { \"description\": 1, \"keywords\": 1 }, \"content\": { \"text/html; charset=UTF-8\": 1 }, \"charset\": 1 },\n    \"meter\": { \"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1 },\n    \"nav\": {},\n    \"noscript\": { \"href\": 1 },\n    \"object\": { \"param\": 1, \"data\": 1, \"type\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1 },\n    \"ol\": { \"start\": 1, \"reversed\": 1 },\n    \"optgroup\": { \"disabled\": 1, \"label\": 1 },\n    \"option\": { \"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1 },\n    \"output\": { \"for\": 1, \"form\": 1, \"name\": 1 },\n    \"p\": {},\n    \"param\": { \"name\": 1, \"value\": 1 },\n    \"pre\": {},\n    \"progress\": { \"value\": 1, \"max\": 1 },\n    \"q\": { \"cite\": 1 },\n    \"rp\": {},\n    \"rt\": {},\n    \"ruby\": {},\n    \"s\": {},\n    \"samp\": {},\n    \"script\": { \"charset\": 1, \"type\": { \"text/javascript\": 1 }, \"src\": 1, \"defer\": 1, \"async\": 1 },\n    \"select\": { \"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": { \"multiple\": 1 }, \"name\": 1, \"size\": 1, \"readonly\": { \"readonly\": 1 } },\n    \"small\": {},\n    \"source\": { \"src\": 1, \"type\": 1, \"media\": 1 },\n    \"span\": {},\n    \"strong\": {},\n    \"style\": { \"type\": 1, \"media\": { \"all\": 1, \"screen\": 1, \"print\": 1 }, \"scoped\": 1 },\n    \"sub\": {},\n    \"sup\": {},\n    \"svg\": {},\n    \"table\": { \"summary\": 1 },\n    \"tbody\": {},\n    \"td\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1 },\n    \"textarea\": { \"autofocus\": { \"autofocus\": 1 }, \"disabled\": { \"disabled\": 1 }, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": { \"readonly\": 1 }, \"required\": { \"required\": 1 }, \"rows\": 1, \"cols\": 1, \"wrap\": { \"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1 } },\n    \"tfoot\": {},\n    \"th\": { \"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1 },\n    \"thead\": {},\n    \"time\": { \"datetime\": 1 },\n    \"title\": {},\n    \"tr\": {},\n    \"track\": { \"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1 },\n    \"section\": {},\n    \"summary\": {},\n    \"u\": {},\n    \"ul\": {},\n    \"var\": {},\n    \"video\": { \"src\": 1, \"autobuffer\": 1, \"autoplay\": { \"autoplay\": 1 }, \"loop\": { \"loop\": 1 }, \"controls\": { \"controls\": 1 }, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": { \"muted\": 1 }, \"preload\": { \"auto\": 1, \"metadata\": 1, \"none\": 1 } },\n    \"wbr\": {}\n};\nvar elements = Object.keys(attributeMap);\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")) {\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\nvar HtmlCompletions = function () {\n};\n(function () {\n    this.getCompletions = function (state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n        return [];\n    };\n    this.getTagCompletions = function (state, session, pos, prefix) {\n        return elements.map(function (element) {\n            return {\n                value: element,\n                meta: \"tag\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function (attribute) {\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: 1000000\n            };\n        });\n    };\n    this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: 1000000\n            };\n        });\n    };\n    this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n        return values.map(function (value) {\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: 1000000\n            };\n        });\n    };\n}).call(HtmlCompletions.prototype);\nexports.HtmlCompletions = HtmlCompletions;\n\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\nvar Mode = function (options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.voidElements = lang.arrayToMap(voidElements);\n    this.getNextLineIndent = function (state, line, tab) {\n        return this.$getIndent(line);\n    };\n    this.checkOutdent = function (state, line, input) {\n        return false;\n    };\n    this.getCompletions = function (state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n    this.createWorker = function (session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{ context: this.fragmentContext }]);\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/html\";\n    this.snippetFileId = \"ace/snippets/html\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/visualforce_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"], function(require, exports, module){/* global define */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlHighlightRules = require(\"../mode/html_highlight_rules\").HtmlHighlightRules;\nfunction string(options) {\n    return {\n        token: options.token + \".start\",\n        regex: options.start,\n        push: [{\n                token: \"constant.language.escape\",\n                regex: options.escape\n            }, {\n                token: options.token + \".end\",\n                regex: options.start,\n                next: \"pop\"\n            }, {\n                defaultToken: options.token\n            }]\n    };\n}\nvar VisualforceHighlightRules = function () {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"$Action|$Api|$Component|$ComponentLabel|$CurrentPage|$FieldSet|$Label|$Label|\" +\n            \"$ObjectType|$Organization|$Page|$Permission|$Profile|$Resource|$SControl|\" +\n            \"$Setup|$Site|$System.OriginDateTime|$User|$UserRole|\" +\n            \"Site|UITheme|UIThemeDisplayed\",\n        \"keyword\": \"\",\n        \"storage.type\": \"\",\n        \"constant.language\": \"true|false|null|TRUE|FALSE|NULL\",\n        \"support.function\": \"DATE|DATEVALUE|DATETIMEVALUE|DAY|MONTH|NOW|TODAY|YEAR|BLANKVALUE|ISBLANK|\" +\n            \"NULLVALUE|PRIORVALUE|AND|CASE|IF|ISCHANGED|ISNEW|ISNUMBER|NOT|OR|ABS|\" +\n            \"CEILING|EXP|FLOOR|LN|LOG|MAX|MIN|MOD|ROUND|SQRT|BEGINS|BR|CASESAFEID|\" +\n            \"CONTAINS|FIND|GETSESSIONID|HTMLENCODE|ISPICKVAL|JSENCODE|JSINHTMLENCODE|\" +\n            \"LEFT|LEN|LOWER|LPAD|MID|RIGHT|RPAD|SUBSTITUTE|TEXT|TRIM|UPPER|URLENCODE|VALUE|\" +\n            \"GETRECORDIDS|INCLUDE|LINKTO|REGEX|REQUIRESCRIPT|URLFOR|VLOOKUP|HTMLENCODE|JSENCODE|\" +\n            \"JSINHTMLENCODE|URLENCODE\"\n    }, \"identifier\");\n    HtmlHighlightRules.call(this);\n    var hbs = {\n        token: \"keyword.start\",\n        regex: \"{!\",\n        push: \"Visualforce\"\n    };\n    for (var key in this.$rules) {\n        this.$rules[key].unshift(hbs);\n    }\n    this.$rules.Visualforce = [\n        string({\n            start: '\"',\n            escape: /\\\\[btnfr\"'\\\\]/,\n            token: \"string\",\n            multiline: true\n        }),\n        string({\n            start: \"'\",\n            escape: /\\\\[btnfr\"'\\\\]/,\n            token: \"string\",\n            multiline: true\n        }),\n        {\n            token: \"comment.start\",\n            regex: \"\\\\/\\\\*\",\n            push: [\n                { token: \"comment.end\", regex: \"\\\\*\\\\/|(?=})\", next: \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"keyword.end\",\n            regex: \"}\",\n            next: \"pop\"\n        }, {\n            token: keywordMapper,\n            regex: /[a-zA-Z$_\\u00a1-\\uffff][a-zA-Z\\d$_\\u00a1-\\uffff]*\\b/\n        }, {\n            token: \"keyword.operator\",\n            regex: /==|<>|!=|<=|>=|&&|\\|\\||[+\\-*/^()=<>&]/\n        }, {\n            token: \"punctuation.operator\",\n            regex: /[?:,;.]/\n        }, {\n            token: \"paren.lparen\",\n            regex: /[\\[({]/\n        }, {\n            token: \"paren.rparen\",\n            regex: /[\\])}]/\n        }\n    ];\n    this.normalizeRules();\n};\noop.inherits(VisualforceHighlightRules, HtmlHighlightRules);\nexports.VisualforceHighlightRules = VisualforceHighlightRules;\n\n});\n\nace.define(\"ace/mode/visualforce\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/visualforce_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\"], function(require, exports, module){/* caption: Visualforce; extensions: component,page,vfp */\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar VisualforceHighlightRules = require(\"./visualforce_highlight_rules\").VisualforceHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nfunction VisualforceMode() {\n    HtmlMode.call(this);\n    this.HighlightRules = VisualforceHighlightRules;\n    this.foldingRules = new HtmlFoldMode();\n    this.$behaviour = new XmlBehaviour();\n}\noop.inherits(VisualforceMode, HtmlMode);\nVisualforceMode.prototype.emmetConfig = {\n    profile: \"xhtml\"\n};\nexports.Mode = VisualforceMode;\n\n});                (function() {\n                    ace.require([\"ace/mode/visualforce\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-wollok.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar DocCommentHighlightRules = function () {\n    this.$rules = {\n        \"start\": [{\n                token: \"comment.doc.tag\",\n                regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n            },\n            DocCommentHighlightRules.getTagRule(),\n            {\n                defaultToken: \"comment.doc\",\n                caseInsensitive: true\n            }]\n    };\n};\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\nDocCommentHighlightRules.getTagRule = function (start) {\n    return {\n        token: \"comment.doc.tag.storage.type\",\n        regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n};\nDocCommentHighlightRules.getStartRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\/\\\\*(?=\\\\*)\",\n        next: start\n    };\n};\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token: \"comment.doc\",\n        regex: \"\\\\*\\\\/\",\n        next: start\n    };\n};\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\nvar JavaScriptHighlightRules = function (options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n            \"Namespace|QName|XML|XMLList|\" + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n            \"SyntaxError|TypeError|URIError|\" +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\" +\n            \"JSON|Math|\" + // Other\n            \"this|arguments|prototype|window|document\",\n        \"keyword\": \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\": \"const|let|var|function\",\n        \"constant.language\": \"null|Infinity|NaN|undefined\",\n        \"support.function\": \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n    this.$rules = {\n        \"no_regex\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token: \"string\",\n                regex: \"'(?=.)\",\n                next: \"qstring\"\n            }, {\n                token: \"string\",\n                regex: '\"(?=.)',\n                next: \"qqstring\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"keyword\",\n                regex: \"from(?=\\\\s*('|\\\"))\"\n            }, {\n                token: \"keyword\",\n                regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next: \"start\"\n            }, {\n                token: [\"support.constant\"],\n                regex: /that\\b/\n            }, {\n                token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token: keywordMapper,\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/,\n                next: \"property\"\n            }, {\n                token: \"storage.type\",\n                regex: /=>/,\n                next: \"start\"\n            }, {\n                token: \"keyword.operator\",\n                regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next: \"start\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[?:,;.]/,\n                next: \"start\"\n            }, {\n                token: \"paren.lparen\",\n                regex: /[\\[({]/,\n                next: \"start\"\n            }, {\n                token: \"paren.rparen\",\n                regex: /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }, {\n                token: [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: /[.](?![.])/\n            }, {\n                token: \"support.function\",\n                regex: /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token: \"support.function.dom\",\n                regex: /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token: \"support.constant\",\n                regex: /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token: \"identifier\",\n                regex: identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+|^$\",\n                next: \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token: \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token: \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: '\"|$',\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\": [\n            {\n                token: \"constant.language.escape\",\n                regex: escapedRe\n            }, {\n                token: \"string\",\n                regex: \"\\\\\\\\$\",\n                consumeLineEnd: true\n            }, {\n                token: \"string\",\n                regex: \"'|$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function (val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token: \"string.quasi.start\",\n            regex: /`/,\n            push: [{\n                    token: \"constant.language.escape\",\n                    regex: escapedRe\n                }, {\n                    token: \"paren.quasi.start\",\n                    regex: /\\${/,\n                    push: \"start\"\n                }, {\n                    token: \"string.quasi.end\",\n                    regex: /`/,\n                    next: \"pop\"\n                }, {\n                    defaultToken: \"string.quasi\"\n                }]\n        });\n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n    this.normalizeRules();\n};\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch: function (val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            }\n            else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                    type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                    value: val.slice(0, offset)\n                }, {\n                    type: \"meta.tag.tag-name.xml\",\n                    value: val.substr(offset)\n                }];\n        },\n        regex: \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        { include: \"reference\" },\n        { defaultToken: \"string\" }\n    ];\n    this.$rules.jsxAttributes = [{\n            token: \"meta.tag.punctuation.tag-close.xml\",\n            regex: \"/?>\",\n            onMatch: function (value, currentState, stack) {\n                if (currentState == stack[0])\n                    stack.shift();\n                if (value.length == 2) {\n                    if (stack[0] == this.nextState)\n                        stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.splice(0, 2);\n                    }\n                }\n                this.next = stack[0] || \"start\";\n                return [{ type: this.token, value: value }];\n            },\n            nextState: \"jsx\"\n        },\n        jsxJsRule,\n        comments(\"jsxAttributes\"),\n        {\n            token: \"entity.other.attribute-name.xml\",\n            regex: tagRegex\n        }, {\n            token: \"keyword.operator.attribute-equals.xml\",\n            regex: \"=\"\n        }, {\n            token: \"text.tag-whitespace.xml\",\n            regex: \"\\\\s+\"\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: \"'\",\n            stateName: \"jsx_attr_q\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        }, {\n            token: \"string.attribute-value.xml\",\n            regex: '\"',\n            stateName: \"jsx_attr_qq\",\n            push: [\n                { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                { include: \"reference\" },\n                { defaultToken: \"string.attribute-value.xml\" }\n            ]\n        },\n        jsxTag\n    ];\n    this.$rules.reference = [{\n            token: \"constant.language.escape.reference.xml\",\n            regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }];\n}\nfunction comments(next) {\n    return [\n        {\n            token: \"comment\",\n            regex: /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"\\\\*\\\\/\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }, {\n            token: \"comment\",\n            regex: \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                { token: \"comment\", regex: \"$|^\", next: next || \"pop\" },\n                { defaultToken: \"comment\", caseInsensitive: true }\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = JavaScriptHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"//\";\n    this.blockComment = { start: \"/*\", end: \"*/\" };\n    this.$quotes = { '\"': '\"', \"'\": \"'\", \"`\": \"`\" };\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n        if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n            return indent;\n        }\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/javascript\";\n    this.snippetFileId = \"ace/snippets/javascript\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/wollok_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar WollokHighlightRules = function () {\n    var keywords = (\"test|describe|package|inherits|false|import|else|or|class|and|not|native|override|program|self|try|const|var|catch|object|super|throw|if|null|return|true|new|constructor|method|mixin\");\n    var buildinConstants = (\"null|assert|console\");\n    var langClasses = (\"Object|Pair|String|Boolean|Number|Integer|Double|Collection|Set|List|Exception|Range\" +\n        \"|StackTraceElement\");\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\": \"self\",\n        \"keyword\": keywords,\n        \"constant.language\": buildinConstants,\n        \"support.function\": langClasses\n    }, \"identifier\");\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\/.*$\"\n            },\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            {\n                token: \"comment\",\n                regex: \"\\\\/\\\\*\",\n                next: \"comment\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /0(?:[xX][0-9a-fA-F][0-9a-fA-F_]*|[bB][01][01_]*)[LlSsDdFfYy]?\\b/\n            }, {\n                token: \"constant.numeric\",\n                regex: /[+-]?\\d[\\d_]*(?:(?:\\.[\\d_]*)?(?:[eE][+-]?[\\d_]+)?)?[LlSsDdFfYy]?\\b/\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"(?:true|false)\\\\b\"\n            }, {\n                token: keywordMapper,\n                regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"===|&&|\\\\*=|\\\\.\\\\.|\\\\*\\\\*|#|!|%|\\\\*|\\\\?:|\\\\+|\\\\/|,|\\\\+=|\\\\-|\\\\.\\\\.<|!==|:|\\\\/=|\\\\?\\\\.|\\\\+\\\\+|>|=|<|>=|=>|==|\\\\]|\\\\[|\\\\-=|\\\\->|\\\\||\\\\-\\\\-|<>|!=|%=|\\\\|\"\n            }, {\n                token: \"lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: \"\\\\s+\"\n            }\n        ],\n        \"comment\": [\n            {\n                token: \"comment\",\n                regex: \".*?\\\\*\\\\/\",\n                next: \"start\"\n            }, {\n                token: \"comment\",\n                regex: \".+\"\n            }\n        ]\n    };\n    this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"start\")]);\n};\noop.inherits(WollokHighlightRules, TextHighlightRules);\nexports.WollokHighlightRules = WollokHighlightRules;\n\n});\n\nace.define(\"ace/mode/wollok\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/wollok_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar WollokHighlightRules = require(\"./wollok_highlight_rules\").WollokHighlightRules;\nvar Mode = function () {\n    JavaScriptMode.call(this);\n    this.HighlightRules = WollokHighlightRules;\n};\noop.inherits(Mode, JavaScriptMode);\n(function () {\n    this.createWorker = function (session) {\n        return null;\n    };\n    this.$id = \"ace/mode/wollok\";\n    this.snippetFileId = \"ace/snippets/wollok\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/wollok\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-xml.js",
    "content": "ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XmlHighlightRules = function (normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n    this.$rules = {\n        start: [\n            { token: \"string.cdata.xml\", regex: \"<\\\\!\\\\[CDATA\\\\[\", next: \"cdata\" },\n            {\n                token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex: \"(<\\\\?)(\" + tagRegex + \")\", next: \"processing_instruction\"\n            },\n            { token: \"comment.start.xml\", regex: \"<\\\\!--\", next: \"comment\" },\n            {\n                token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next: \"doctype\", caseInsensitive: true\n            },\n            { include: \"tag\" },\n            { token: \"text.end-tag-open.xml\", regex: \"</\" },\n            { token: \"text.tag-open.xml\", regex: \"<\" },\n            { include: \"reference\" },\n            { defaultToken: \"text.xml\" }\n        ],\n        processing_instruction: [{\n                token: \"entity.other.attribute-name.decl-attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.decl-attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"whitespace\"\n            }, {\n                include: \"string\"\n            }, {\n                token: \"punctuation.xml-decl.xml\",\n                regex: \"\\\\?>\",\n                next: \"start\"\n            }],\n        doctype: [\n            { include: \"whitespace\" },\n            { include: \"string\" },\n            { token: \"xml-pe.doctype.xml\", regex: \">\", next: \"start\" },\n            { token: \"xml-pe.xml\", regex: \"[-_a-zA-Z0-9:]+\" },\n            { token: \"punctuation.int-subset\", regex: \"\\\\[\", push: \"int_subset\" }\n        ],\n        int_subset: [{\n                token: \"text.xml\",\n                regex: \"\\\\s+\"\n            }, {\n                token: \"punctuation.int-subset.xml\",\n                regex: \"]\",\n                next: \"pop\"\n            }, {\n                token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n                regex: \"(<\\\\!)(\" + tagRegex + \")\",\n                push: [{\n                        token: \"text\",\n                        regex: \"\\\\s+\"\n                    },\n                    {\n                        token: \"punctuation.markup-decl.xml\",\n                        regex: \">\",\n                        next: \"pop\"\n                    },\n                    { include: \"string\" }]\n            }],\n        cdata: [\n            { token: \"string.cdata.xml\", regex: \"\\\\]\\\\]>\", next: \"start\" },\n            { token: \"text.xml\", regex: \"\\\\s+\" },\n            { token: \"text.xml\", regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\" }\n        ],\n        comment: [\n            { token: \"comment.end.xml\", regex: \"-->\", next: \"start\" },\n            { defaultToken: \"comment.xml\" }\n        ],\n        reference: [{\n                token: \"constant.language.escape.reference.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        attr_reference: [{\n                token: \"constant.language.escape.reference.attribute-value.xml\",\n                regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n            }],\n        tag: [{\n                token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n                regex: \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n                next: [\n                    { include: \"attributes\" },\n                    { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\" }\n                ]\n            }],\n        tag_whitespace: [\n            { token: \"text.tag-whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        whitespace: [\n            { token: \"text.whitespace.xml\", regex: \"\\\\s+\" }\n        ],\n        string: [{\n                token: \"string.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.xml\", regex: \"'\", next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }, {\n                token: \"string.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.xml\", regex: '\"', next: \"pop\" },\n                    { defaultToken: \"string.xml\" }\n                ]\n            }],\n        attributes: [{\n                token: \"entity.other.attribute-name.xml\",\n                regex: tagRegex\n            }, {\n                token: \"keyword.operator.attribute-equals.xml\",\n                regex: \"=\"\n            }, {\n                include: \"tag_whitespace\"\n            }, {\n                include: \"attribute_value\"\n            }],\n        attribute_value: [{\n                token: \"string.attribute-value.xml\",\n                regex: \"'\",\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: \"'\", next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }, {\n                token: \"string.attribute-value.xml\",\n                regex: '\"',\n                push: [\n                    { token: \"string.attribute-value.xml\", regex: '\"', next: \"pop\" },\n                    { include: \"attr_reference\" },\n                    { defaultToken: \"string.attribute-value.xml\" }\n                ]\n            }]\n    };\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n(function () {\n    this.embedTagRules = function (HighlightRules, prefix, tag) {\n        this.$rules.tag.unshift({\n            token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                { include: \"attributes\" },\n                { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: prefix + \"start\" }\n            ]\n        });\n        this.$rules[tag + \"-end\"] = [\n            { include: \"attributes\" },\n            { token: \"meta.tag.punctuation.tag-close.xml\", regex: \"/?>\", next: \"start\",\n                onMatch: function (value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n                } }\n        ];\n        this.embedRules(HighlightRules, prefix, [{\n                token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n                regex: \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n                next: tag + \"-end\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"<\\\\!\\\\[CDATA\\\\[\"\n            }, {\n                token: \"string.cdata.xml\",\n                regex: \"\\\\]\\\\]>\"\n            }]);\n    };\n}).call(TextHighlightRules.prototype);\noop.inherits(XmlHighlightRules, TextHighlightRules);\nexports.XmlHighlightRules = XmlHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n};\noop.inherits(FoldMode, BaseFoldMode);\nvar Tag = function () {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = { row: 0, column: 0 };\n    this.end = { row: 0, column: 0 };\n};\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n(function () {\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n        if (!tag)\n            return this.getCommentFoldWidget(session, row);\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle === \"markbeginend\" ? \"end\" : \"\";\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n        return \"start\";\n    };\n    this.getCommentFoldWidget = function (session, row) {\n        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))\n            return \"start\";\n        return \"\";\n    };\n    this._getFirstTagInLine = function (session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            }\n            else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n        return null;\n    };\n    this._findEndTagInLine = function (session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var tags = session.getMatchingTags({ row: row, column: 0 });\n        if (tags) {\n            return new Range(tags.openTag.end.row, tags.openTag.end.column, tags.closeTag.start.row, tags.closeTag.start.column);\n        }\n        else {\n            return this.getCommentFoldWidget(session, row)\n                && session.getCommentFoldRange(row, session.getLine(row).length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar Mode = function () {\n    this.HighlightRules = XmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.foldingRules = new XmlFoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.voidElements = lang.arrayToMap([]);\n    this.blockComment = { start: \"<!--\", end: \"-->\" };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"error\", function (e) {\n            session.setAnnotations(e.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/xml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-xquery.js",
    "content": "ace.define(\"ace/mode/xquery/xquery_lexer\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\":[function(_dereq_,module,exports){\n                                                            var XQueryTokenizer = exports.XQueryTokenizer = function XQueryTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? XQueryTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = XQueryTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [XQueryTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n    switch (l1)\n    {\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 56:                        // '<?'\n      shift(56);                    // '<?'\n      break;\n    case 40:                        // '(#'\n      shift(40);                    // '(#'\n      break;\n    case 42:                        // '(:~'\n      shift(42);                    // '(:~'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    case 274:                       // '}'\n      shift(274);                   // '}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 39:                        // '('\n      shift(39);                    // '('\n      break;\n    case 43:                        // ')'\n      shift(43);                    // ')'\n      break;\n    case 49:                        // '/'\n      shift(49);                    // '/'\n      break;\n    case 62:                        // '['\n      shift(62);                    // '['\n      break;\n    case 63:                        // ']'\n      shift(63);                    // ']'\n      break;\n    case 46:                        // ','\n      shift(46);                    // ','\n      break;\n    case 48:                        // '.'\n      shift(48);                    // '.'\n      break;\n    case 53:                        // ';'\n      shift(53);                    // ';'\n      break;\n    case 51:                        // ':'\n      shift(51);                    // ':'\n      break;\n    case 34:                        // '!'\n      shift(34);                    // '!'\n      break;\n    case 273:                       // '|'\n      shift(273);                   // '|'\n      break;\n    case 2:                         // Annotation\n      shift(2);                     // Annotation\n      break;\n    case 1:                         // ModuleDecl\n      shift(1);                     // ModuleDecl\n      break;\n    case 3:                         // OptionDecl\n      shift(3);                     // OptionDecl\n      break;\n    case 12:                        // AttrTest\n      shift(12);                    // AttrTest\n      break;\n    case 13:                        // Wildcard\n      shift(13);                    // Wildcard\n      break;\n    case 15:                        // IntegerLiteral\n      shift(15);                    // IntegerLiteral\n      break;\n    case 16:                        // DecimalLiteral\n      shift(16);                    // DecimalLiteral\n      break;\n    case 17:                        // DoubleLiteral\n      shift(17);                    // DoubleLiteral\n      break;\n    case 5:                         // Variable\n      shift(5);                     // Variable\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 4:                         // Operator\n      shift(4);                     // Operator\n      break;\n    case 33:                        // EOF\n      shift(33);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 58:                        // '>'\n      shift(58);                    // '>'\n      break;\n    case 50:                        // '/>'\n      shift(50);                    // '/>'\n      break;\n    case 27:                        // QName\n      shift(27);                    // QName\n      break;\n    case 57:                        // '='\n      shift(57);                    // '='\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n    switch (l1)\n    {\n    case 23:                        // ElementContentChar\n      shift(23);                    // ElementContentChar\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 7:                         // EndTag\n      shift(7);                     // EndTag\n      break;\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n    switch (l1)\n    {\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 25:                        // AposAttrContentChar\n      shift(25);                    // AposAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n    switch (l1)\n    {\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 24:                        // QuotAttrContentChar\n      shift(24);                    // QuotAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 11:                        // CDataSectionContents\n      shift(11);                    // CDataSectionContents\n      break;\n    case 64:                        // ']]>'\n      shift(64);                    // ']]>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 9:                         // DirCommentContents\n      shift(9);                     // DirCommentContents\n      break;\n    case 47:                        // '-->'\n      shift(47);                    // '-->'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 10:                        // DirPIContents\n      shift(10);                    // DirPIContents\n      break;\n    case 59:                        // '?'\n      shift(59);                    // '?'\n      break;\n    case 60:                        // '?>'\n      shift(60);                    // '?>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 8:                         // PragmaContents\n      shift(8);                     // PragmaContents\n      break;\n    case 36:                        // '#'\n      shift(36);                    // '#'\n      break;\n    case 37:                        // '#)'\n      shift(37);                    // '#)'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 30:                        // CommentContents\n      shift(30);                    // CommentContents\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(5);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 31:                        // DocTag\n      shift(31);                    // DocTag\n      break;\n    case 32:                        // DocCommentContents\n      shift(32);                    // DocCommentContents\n      break;\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(6);                  // PredefinedEntityRef | EscapeQuot | QuotChar | CharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 21:                        // QuotChar\n      shift(21);                    // QuotChar\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 22:                        // AposChar\n      shift(22);                    // AposChar\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 14:                        // EQName^Token\n      shift(14);                    // EQName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 26:                        // NCName^Token\n      shift(26);                    // NCName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(XQueryTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 28)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = XQueryTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = XQueryTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = XQueryTokenizer.MAP1[(c0 & 15) + XQueryTokenizer.MAP1[(c1 & 31) + XQueryTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (XQueryTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (XQueryTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = XQueryTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = XQueryTokenizer.TRANSITION[(i0 & 15) + XQueryTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nXQueryTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 276; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2062 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = XQueryTokenizer.EXPECTED[(i0 & 3) + XQueryTokenizer.EXPECTED[(i1 & 3) + XQueryTokenizer.EXPECTED[(i2 & 3) + XQueryTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(XQueryTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nXQueryTokenizer.MAP0 =\n[ 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35\n];\n\nXQueryTokenizer.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65\n];\n\nXQueryTokenizer.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 35, 31, 35, 31, 31, 35\n];\n\nXQueryTokenizer.INITIAL =\n[ 1, 2, 36867, 45060, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nXQueryTokenizer.TRANSITION =\n[ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22908, 18836, 17152, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18579, 21711, 17152, 19008, 19233, 20367, 19008, 28684, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20116, 18836, 18637, 19008, 19233, 21267, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18763, 18778, 18794, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18821, 22923, 18906, 19008, 19233, 17431, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18937, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19054, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 18953, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21843, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21696, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22429, 20131, 18720, 19008, 19233, 20367, 19008, 17173, 23559, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 18087, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 21242, 19111, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19024, 18836, 18609, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19081, 22444, 18987, 19008, 19233, 20367, 19008, 19065, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21992, 22007, 18987, 19008, 19233, 20367, 19008, 18690, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22414, 18836, 18987, 19008, 19233, 30651, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19138, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19280, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 19172, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21783, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19218, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21651, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19249, 19265, 19307, 18888, 27857, 30536, 24401, 31444, 23357, 18888, 19351, 18888, 18890, 27211, 19370, 27211, 27211, 19392, 24401, 31911, 24401, 24401, 25467, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 17994, 24060, 18888, 18888, 18888, 18890, 19468, 27211, 27211, 27211, 27211, 19484, 35367, 19520, 24401, 24401, 24401, 19628, 18888, 29855, 18888, 18888, 23086, 27211, 19538, 27211, 27211, 30756, 24012, 24401, 19560, 24401, 24401, 26750, 18888, 18888, 19327, 27855, 27211, 27211, 19580, 17590, 24017, 24401, 24401, 19600, 25665, 18888, 18888, 28518, 27211, 27212, 24016, 19620, 19868, 28435, 25722, 18889, 19644, 27211, 32888, 35852, 19868, 31018, 19694, 19376, 19717, 22215, 19735, 22098, 19751, 35203, 19776, 19797, 19817, 19840, 25783, 31738, 24135, 19701, 19856, 31015, 23516, 31008, 28311, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21768, 18836, 19307, 18888, 27857, 27904, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19888, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22399, 18836, 19918, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21666, 18836, 19307, 18888, 27857, 27525, 24401, 29183, 21467, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19946, 24401, 24401, 24401, 24401, 32382, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19998, 24401, 24401, 24401, 24401, 31500, 18467, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 20021, 24401, 24401, 24401, 24401, 24401, 34271, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 32926, 29908, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 20050, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20101, 19039, 20191, 20412, 20903, 17569, 20309, 20872, 25633, 20623, 20505, 20218, 20242, 17189, 17208, 17281, 20355, 20265, 20306, 20328, 20383, 22490, 20796, 20619, 21354, 20654, 20410, 20956, 21232, 20765, 17421, 20535, 17192, 18127, 22459, 20312, 25531, 22470, 20309, 20428, 18964, 20466, 20491, 21342, 21070, 20521, 20682, 17714, 18326, 17543, 17559, 17585, 22497, 20559, 19504, 20279, 20575, 20290, 20475, 20604, 20639, 20226, 20670, 17661, 21190, 17703, 21176, 17730, 19494, 20698, 20711, 22480, 21046, 21116, 18971, 21130, 20727, 20755, 17675, 17753, 17832, 17590, 25518, 20394, 20781, 20831, 20202, 20847, 21401, 17292, 17934, 17979, 18549, 20863, 20588, 25542, 20888, 20919, 18072, 18117, 20935, 20972, 21032, 21062, 21086, 18239, 21102, 18563, 21146, 21162, 21206, 18351, 20949, 20902, 18340, 21222, 21258, 21283, 18360, 20249, 17405, 21295, 21311, 21327, 20739, 20343, 21370, 21386, 21417, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21977, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 21452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 21504, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 36501, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 28674, 21946, 17617, 36473, 18223, 17237, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 21575, 21534, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 21560, 30628, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21798, 18836, 21612, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21636, 18836, 18987, 19008, 19233, 17902, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21753, 19096, 21903, 19008, 19233, 20367, 19008, 19291, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17379, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 21931, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18280, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21962, 18594, 18987, 19008, 19233, 22043, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21681, 21858, 18987, 19008, 19233, 20367, 19008, 21544, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 32319, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 22231, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 31678, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 33588, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 35019, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22248, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22324, 18836, 22059, 18888, 27857, 30501, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 34365, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22354, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 27086, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 19930, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22309, 22513, 18987, 19008, 19233, 20367, 19008, 19122, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 22544, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22608, 18836, 22988, 23004, 27585, 23020, 23036, 23067, 22087, 18888, 18888, 18888, 23083, 27211, 27211, 27211, 23102, 22121, 24401, 24401, 24401, 23122, 31386, 26154, 19674, 18888, 28119, 28232, 19424, 23705, 27211, 27211, 23142, 23173, 23189, 23212, 24401, 24401, 23246, 34427, 31693, 23262, 18888, 23290, 23308, 27783, 27620, 23327, 35263, 35107, 33383, 23346, 18193, 23393, 32748, 23968, 24401, 23414, 35153, 23463, 18888, 33913, 23442, 23482, 27211, 27211, 23532, 23552, 21431, 23575, 24401, 24401, 23604, 26095, 23635, 23657, 18888, 33482, 23685, 33251, 27211, 22187, 18851, 23721, 35536, 24401, 18887, 23750, 32641, 27211, 23769, 23787, 20080, 33012, 24384, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 23803, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 28224, 31826, 23823, 26917, 34978, 23850, 26493, 25782, 23878, 23914, 23516, 31008, 22105, 19419, 27963, 19659, 29781, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22623, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 28909, 25783, 27211, 27211, 27211, 34048, 23933, 22164, 24401, 24401, 24401, 28409, 23949, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 26583, 18888, 18888, 18888, 35585, 23984, 27211, 27211, 27211, 24005, 22201, 24033, 24401, 24401, 24401, 24052, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 26496, 24076, 24126, 24151, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22638, 18836, 22059, 19678, 27857, 24185, 24401, 24201, 24217, 26592, 18888, 18888, 18890, 24252, 24268, 27211, 27211, 22121, 24287, 24303, 24401, 24401, 30613, 19781, 35432, 36007, 32649, 18888, 25783, 24322, 28966, 23771, 27211, 35072, 22164, 24358, 32106, 26829, 24400, 31500, 31693, 18888, 18888, 18888, 24801, 18890, 27211, 27211, 27211, 27211, 24418, 19484, 24401, 24401, 24401, 24401, 20167, 31181, 18888, 18888, 18888, 27833, 23086, 27211, 27211, 33540, 27211, 30756, 21431, 24401, 24401, 22972, 24401, 26095, 18888, 36131, 18888, 27855, 27211, 24440, 27211, 22187, 22968, 24401, 24459, 24401, 31699, 28454, 18888, 34528, 34570, 35779, 24478, 24402, 24494, 25659, 18888, 36228, 27211, 27211, 24515, 30981, 23734, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 24538, 31017, 27856, 31741, 30059, 23377, 24563, 19837, 25782, 19760, 31015, 23516, 25374, 22105, 19419, 29793, 24579, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22653, 18836, 22059, 25756, 19982, 34097, 23196, 29183, 24614, 24110, 23641, 24673, 26103, 24697, 24443, 24713, 28558, 22121, 24748, 24462, 24764, 23398, 30613, 18888, 18888, 18888, 18888, 24798, 25783, 27211, 27211, 27211, 34232, 35072, 22164, 24401, 24401, 24401, 33302, 31500, 22559, 24106, 24232, 18888, 18888, 34970, 24817, 30411, 27211, 27211, 32484, 19484, 29750, 35127, 24401, 24401, 19872, 31181, 24852, 18888, 18888, 24871, 29221, 27211, 27211, 32072, 27211, 30756, 34441, 24401, 24401, 31571, 24401, 26095, 33141, 27802, 27011, 27855, 25295, 25607, 24888, 22187, 22968, 19195, 34593, 24906, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 33663, 27211, 27211, 24924, 24947, 23588, 31018, 18890, 27211, 31833, 22135, 19447, 23086, 23330, 19828, 30904, 31042, 24972, 19840, 25000, 31738, 30898, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 25016, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22668, 18836, 25041, 25057, 31320, 25073, 25089, 25105, 22087, 34796, 24236, 36138, 34870, 34125, 25121, 23106, 35497, 22248, 36613, 25137, 30671, 27365, 30613, 25153, 26447, 25199, 25233, 22574, 23274, 25249, 25265, 25281, 25318, 25344, 25360, 25400, 25428, 25452, 26731, 25504, 31693, 23669, 25558, 27407, 25575, 28599, 25934, 25599, 27211, 28180, 27304, 25623, 25839, 25649, 24401, 34820, 25681, 25698, 22586, 27775, 30190, 25745, 25778, 25799, 25817, 28995, 33569, 30756, 21518, 33443, 25837, 25855, 25893, 26095, 31254, 26677, 30136, 27855, 25930, 25950, 27211, 22187, 22968, 25966, 25986, 24401, 23428, 27763, 36330, 26959, 26002, 26029, 26045, 26085, 26119, 26170, 26203, 26222, 26239, 30527, 26372, 26274, 28404, 31018, 33757, 27211, 34262, 26316, 36729, 26345, 26366, 35337, 31017, 26388, 26407, 30954, 26350, 33861, 26434, 26463, 26479, 26512, 23516, 33189, 26531, 26547, 27963, 31293, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22683, 18836, 26568, 26181, 26608, 34097, 26643, 29183, 22087, 26669, 18888, 18888, 18890, 26693, 27211, 27211, 27211, 22121, 26720, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 26774, 25783, 27211, 27211, 27211, 26619, 35072, 22164, 24401, 24401, 24401, 21596, 31500, 31693, 18888, 18888, 33978, 18888, 18890, 27211, 27211, 25801, 27211, 27211, 19484, 24401, 24401, 24401, 26792, 24401, 31181, 18888, 18888, 18888, 35464, 23086, 27211, 27211, 27211, 26809, 30756, 21431, 24401, 24401, 24401, 26828, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 31948, 18889, 35707, 27211, 19719, 26845, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 26905, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 24984, 31088, 19419, 26945, 27651, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22698, 18836, 26999, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23051, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 27033, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 27056, 18888, 18890, 27211, 27211, 30320, 27211, 27211, 27075, 24401, 24401, 29032, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 33986, 27855, 27211, 27211, 27102, 17590, 24017, 24401, 24401, 27123, 27144, 36254, 27162, 27210, 27228, 28500, 18187, 34842, 33426, 27244, 35980, 27277, 27302, 27320, 36048, 34013, 20999, 31882, 21478, 27895, 27356, 30287, 27381, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 26329, 30087, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 27406, 27423, 27445, 35294, 27461, 22087, 18888, 18888, 30140, 18890, 27211, 27211, 27989, 27211, 22121, 24401, 24401, 25682, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 34042, 27211, 27211, 27211, 27211, 29700, 22164, 24401, 24401, 24401, 24401, 27128, 31693, 27477, 18888, 18888, 18888, 18890, 27194, 27211, 27211, 27211, 27211, 19484, 35299, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 27059, 23086, 27211, 27211, 27211, 33366, 30756, 24012, 24401, 24401, 24401, 35044, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 20815, 27211, 30818, 19960, 33969, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22713, 18836, 22059, 27496, 27516, 27541, 35231, 27557, 22087, 29662, 26292, 23292, 27573, 24836, 27601, 27211, 27636, 22121, 35544, 27686, 24401, 27721, 18866, 18888, 27799, 18888, 27818, 22071, 27853, 32260, 27211, 26013, 27873, 27920, 22164, 29419, 24401, 29946, 33413, 26742, 27751, 26881, 18888, 18888, 27261, 36776, 27936, 27211, 27211, 27211, 27988, 28005, 28031, 28052, 24401, 24401, 28069, 28088, 28135, 25488, 28152, 26069, 28167, 27211, 28340, 24657, 28196, 30756, 31523, 24401, 28212, 34176, 36174, 24956, 28248, 28266, 28290, 21488, 33077, 28327, 28356, 17590, 20986, 23126, 28391, 28425, 28102, 28451, 28470, 28490, 28516, 28534, 20034, 33728, 25868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 30241, 28274, 28553, 28574, 19406, 28590, 23086, 23330, 19828, 19452, 28615, 28660, 26147, 25783, 31738, 19837, 25782, 19760, 29613, 35958, 29276, 22105, 19419, 27963, 23157, 28700, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 22528, 18888, 18888, 18888, 18888, 18890, 27333, 27211, 27211, 27211, 27211, 19484, 30853, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22728, 18836, 28747, 28782, 28817, 28841, 28857, 28880, 28896, 24161, 28943, 32011, 36261, 27340, 28961, 29492, 28982, 29011, 24522, 29027, 25436, 29048, 23051, 27500, 29090, 29110, 30713, 18888, 23512, 29130, 25183, 27211, 29155, 28927, 27033, 29173, 23230, 24401, 29199, 35373, 31693, 18888, 18888, 25583, 32629, 29218, 27211, 27211, 31461, 30692, 29237, 27075, 24401, 24401, 24401, 29262, 29302, 19628, 18888, 34329, 18888, 18888, 23086, 27211, 29329, 27211, 27211, 30756, 24012, 35933, 24401, 24401, 24401, 27705, 31612, 18888, 18888, 29346, 29374, 27211, 35650, 17590, 21436, 29393, 24401, 25970, 18887, 33895, 18888, 27211, 32528, 27212, 24016, 32769, 19868, 25659, 18888, 26889, 27211, 27211, 29412, 23889, 24371, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31768, 19840, 25783, 31738, 19837, 29435, 29508, 31102, 29550, 29606, 22105, 30300, 29462, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22743, 18836, 22059, 29629, 29473, 34097, 33285, 29183, 29651, 27254, 18888, 29678, 33329, 32535, 27211, 29694, 29716, 22121, 19202, 24401, 32742, 29741, 18866, 26776, 33921, 28474, 18888, 18888, 25783, 29766, 27211, 29809, 27211, 35072, 22164, 35825, 24401, 29828, 24401, 24036, 36769, 25217, 18888, 18888, 29848, 18890, 27211, 29871, 27211, 26258, 27211, 29894, 24401, 29929, 24401, 36587, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 29725, 29962, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18473, 18888, 18888, 19584, 27211, 27212, 24016, 29982, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19902, 19447, 32052, 19544, 19828, 29998, 30097, 30031, 19840, 25783, 30047, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 30075, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22758, 18836, 30121, 30156, 30206, 30257, 30273, 30336, 22087, 35624, 32837, 25762, 18890, 29878, 34934, 26812, 27211, 22121, 24931, 23223, 29202, 24401, 18866, 34373, 30352, 18888, 18888, 18888, 23447, 24828, 27211, 27211, 27211, 35072, 30370, 35052, 24401, 24401, 24401, 24036, 29523, 18888, 18888, 27146, 18888, 31308, 30386, 27211, 27211, 30405, 30558, 19484, 30427, 24401, 24401, 29938, 35686, 19628, 28766, 30447, 34506, 35614, 23086, 28731, 30482, 30517, 30552, 30756, 24012, 20156, 30574, 30598, 30667, 26283, 33464, 28945, 27670, 30687, 32915, 33504, 25328, 17590, 23963, 20450, 33837, 21016, 32397, 26300, 30708, 30729, 27885, 30748, 21588, 36373, 30779, 26653, 24628, 33220, 32514, 30806, 31835, 25412, 25906, 26515, 18890, 28825, 31833, 26133, 19447, 28304, 31730, 23834, 26057, 30869, 30885, 32181, 30920, 30942, 32797, 25782, 30970, 31015, 23516, 31008, 30997, 31034, 27963, 19659, 29450, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22773, 18836, 31058, 31074, 32463, 31125, 31141, 31197, 22087, 18888, 29534, 35471, 36738, 27211, 24342, 31213, 24424, 22121, 24401, 20175, 31229, 31917, 27736, 31245, 34334, 27175, 18888, 29094, 27286, 27211, 31278, 31336, 27211, 31355, 31371, 24401, 31402, 31418, 24401, 31437, 31693, 18888, 31619, 32841, 18888, 18890, 27211, 27211, 31460, 31477, 27211, 19484, 24401, 24401, 31497, 36581, 24401, 33020, 18888, 18888, 18888, 18888, 30007, 27211, 27211, 27211, 27211, 31516, 32310, 24401, 24401, 24401, 24401, 31539, 18888, 28762, 18888, 24651, 35740, 27211, 27211, 28644, 31565, 35796, 24401, 24401, 19318, 32188, 18888, 24334, 28366, 27212, 29966, 29832, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 31587, 19868, 31635, 32435, 33693, 30105, 31663, 20005, 31715, 31757, 31784, 31812, 30015, 31851, 31878, 25783, 31898, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 31933, 30221, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22788, 18836, 22059, 25729, 30466, 31968, 24306, 31984, 32000, 32807, 35160, 27017, 29590, 34941, 19801, 29377, 33700, 22121, 27040, 30431, 29396, 28864, 29565, 18888, 18888, 18888, 32027, 18888, 25783, 27211, 27211, 23698, 27211, 35072, 22164, 24401, 24401, 30845, 24401, 24036, 32045, 18888, 26929, 18888, 18888, 18890, 27211, 31481, 32068, 27211, 27211, 32088, 24401, 33058, 32122, 24401, 24401, 33736, 18888, 18888, 33162, 18888, 23086, 27211, 27211, 29484, 27211, 28375, 32144, 24401, 24401, 33831, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 36704, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 33107, 22171, 33224, 24271, 32169, 31017, 27856, 31741, 19840, 25783, 31738, 30234, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 32204, 32232, 32252, 32677, 33295, 29074, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23619, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 32276, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 32299, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 33886, 18889, 36065, 27211, 19719, 35326, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22803, 18836, 32335, 31647, 34666, 32351, 32367, 32417, 22087, 18888, 32433, 19335, 32451, 27211, 32479, 27107, 32500, 22121, 24401, 32551, 20085, 32572, 18866, 22287, 23753, 18888, 18888, 32602, 32665, 27211, 32693, 27211, 26972, 32713, 32729, 24401, 32764, 24401, 25877, 32785, 34768, 18888, 27390, 32823, 24594, 24855, 32857, 24890, 32878, 32904, 27211, 32942, 32977, 24401, 33000, 29313, 24401, 30790, 26206, 27666, 33904, 18888, 23086, 36353, 27211, 33036, 27211, 30756, 24012, 32153, 24401, 33056, 24401, 35861, 18888, 18888, 30354, 27972, 27211, 27211, 33800, 17590, 20145, 24401, 24401, 34638, 20811, 18888, 18888, 33074, 27211, 27212, 36167, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 34616, 24169, 33093, 33123, 33157, 27856, 31741, 23862, 26552, 34302, 19837, 25782, 19760, 31015, 23516, 31008, 33178, 19973, 27963, 23497, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22818, 18836, 33205, 28113, 33240, 34097, 33275, 29183, 22087, 33318, 35438, 18888, 18890, 33345, 26391, 33382, 27211, 22121, 33399, 28072, 33442, 24401, 18866, 22232, 18888, 33459, 18888, 18888, 33480, 33498, 25175, 27211, 27211, 26704, 22164, 24775, 35239, 24401, 24401, 25914, 29580, 18888, 18888, 31109, 25211, 33520, 33539, 27211, 27211, 33556, 36284, 19484, 33585, 24401, 24401, 33604, 32556, 19628, 18888, 18888, 31262, 33658, 23086, 27211, 27211, 33679, 27211, 30756, 24012, 24401, 24401, 33716, 24401, 26854, 27480, 18888, 33752, 27855, 33259, 34701, 27211, 17590, 32102, 24782, 23807, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 33773, 36105, 19868, 25659, 18888, 23368, 27211, 29157, 19719, 23889, 34454, 29286, 18890, 33794, 25302, 33816, 19447, 34079, 33853, 31862, 31017, 27856, 31741, 33877, 28920, 33937, 19837, 30461, 34002, 22276, 36041, 34029, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22833, 18836, 34064, 32616, 34113, 34141, 34157, 34192, 34208, 32216, 36013, 31549, 31952, 34224, 34248, 34287, 29330, 34350, 34389, 34413, 34481, 26793, 18866, 26187, 29635, 22293, 18888, 36654, 25783, 34522, 34544, 34566, 25821, 35072, 22164, 34586, 34609, 34632, 19604, 24036, 36644, 36674, 24681, 18888, 32401, 34654, 31339, 34682, 34698, 27211, 34717, 34753, 28053, 34812, 34836, 24401, 33619, 19628, 34858, 32236, 34906, 24598, 33523, 27612, 34890, 34922, 24732, 29246, 36717, 33634, 34465, 32984, 34168, 26750, 34957, 18888, 18888, 34994, 35010, 27211, 33040, 17590, 29913, 35035, 24401, 36304, 25482, 30171, 35883, 35068, 35088, 26627, 20441, 31173, 35123, 35143, 35176, 24640, 30492, 29358, 19719, 35192, 35219, 25384, 28801, 35255, 35279, 32586, 34496, 23086, 23330, 29061, 31017, 27856, 31741, 19840, 25783, 31738, 24547, 25164, 35315, 31796, 35353, 34316, 22105, 19419, 27963, 24091, 28630, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22848, 18836, 22059, 34782, 34088, 35389, 21008, 35405, 35421, 35454, 18888, 18888, 23466, 35487, 27211, 27211, 27211, 35513, 31154, 24401, 24401, 24401, 35560, 18888, 26863, 36664, 35601, 24872, 25783, 30389, 23536, 26250, 35647, 35666, 22164, 19522, 19564, 30582, 35682, 27697, 35575, 29114, 18888, 18888, 18888, 18890, 27211, 35702, 27211, 27211, 27211, 35723, 24401, 35527, 24401, 24401, 24401, 19628, 30184, 18888, 18888, 18888, 23086, 35739, 27211, 27211, 27211, 29139, 22938, 24401, 24401, 24401, 24401, 23898, 35756, 18888, 18888, 25025, 35778, 27211, 27211, 17590, 20064, 35795, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 23917, 18890, 34550, 31833, 22262, 19447, 23086, 23330, 26418, 31017, 27856, 31741, 19840, 25783, 35812, 19837, 27187, 35841, 33135, 23516, 31008, 22105, 22148, 28712, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22863, 18836, 22059, 35877, 28723, 34097, 31164, 29183, 22087, 26758, 18888, 22592, 18890, 23989, 27211, 29812, 27211, 22121, 33778, 24401, 31421, 24401, 18866, 18888, 18888, 26872, 18888, 18888, 25783, 27211, 30732, 27211, 27211, 35072, 22164, 24401, 24908, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22878, 18836, 22059, 27837, 27857, 35899, 24401, 35915, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31602, 18888, 18888, 18888, 18888, 26223, 27211, 27211, 27211, 27211, 27211, 19484, 35931, 24401, 24401, 24401, 24401, 19628, 18888, 28136, 18888, 18888, 35949, 27211, 32862, 27211, 32697, 30756, 24012, 24401, 32283, 24401, 32128, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22893, 18836, 22059, 35974, 34882, 34097, 33960, 29183, 35996, 18888, 23311, 18888, 36029, 27211, 27211, 36064, 36081, 22121, 24401, 24401, 36104, 33950, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 36121, 18888, 25559, 18888, 18888, 18890, 27211, 27211, 30313, 27211, 27211, 36154, 24401, 24401, 34397, 24401, 24401, 19628, 28250, 18888, 18888, 18888, 23086, 30926, 27211, 27211, 27211, 26983, 24012, 33642, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 19354, 27857, 36190, 24401, 36206, 22087, 18888, 18888, 18888, 18007, 27211, 27211, 27211, 24724, 22121, 24401, 24401, 24401, 30827, 18866, 18888, 36222, 18888, 28795, 18888, 25783, 35100, 27211, 27429, 27211, 35072, 22164, 30836, 24401, 24499, 24401, 24036, 31693, 18888, 36244, 18888, 18888, 18890, 27211, 36088, 27211, 27211, 27211, 19484, 24401, 28036, 24401, 24401, 24401, 19628, 18888, 18888, 35631, 18888, 35762, 27211, 27211, 36277, 27211, 34730, 24012, 24401, 24401, 36300, 24401, 36320, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 25712, 18888, 18888, 36346, 27211, 27212, 19184, 24402, 19868, 25659, 32029, 18889, 27211, 33359, 19719, 23889, 36369, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22384, 18836, 36389, 19008, 19233, 20367, 36434, 17173, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36453, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22369, 18836, 18987, 19008, 19233, 20367, 19008, 21737, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21813, 18836, 36489, 19008, 19233, 20367, 19008, 17173, 17737, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17768, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20543, 22022, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36517, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 19307, 18888, 27857, 30756, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 36567, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 36603, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 36629, 36690, 18720, 19008, 19233, 20367, 19008, 17454, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17223, 17308, 17327, 17346, 18918, 36754, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352, 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744, 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984, 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2158592, 2404352, 2412544, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280, 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592, 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0, 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744, 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877, 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592, 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744, 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 172310, 279, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632, 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744, 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744, 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 1508, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2207744, 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592, 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744, 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592, 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232, 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0, 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592, 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128, 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736, 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768, 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97, 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520, 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640, 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728, 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592, 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744, 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, 2801664, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730, 2158730, 2158730, 2158730, 2572426, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744, 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672, 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592, 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0, 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18, 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592, 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592, 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27, 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528, 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 130, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730, 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0, 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550, 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144, 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97, 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877, 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97, 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 0, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67, 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67, 67, 67, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97, 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97, 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97, 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602, 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730, 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548, 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0, 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877, 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453, 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730, 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877, 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613, 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730, 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611, 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498, 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744, 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2158877, 2502941, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877, 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877, 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877, 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730, 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730, 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290, 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2502656, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877, 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877, 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946, 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2707741, 2732317, 2158877, 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877, 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877, 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357, 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517, 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18, 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730, 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693, 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821, 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97, 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97, 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877, 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205, 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866, 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730, 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685, 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730, 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730, 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629, 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744, 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744, 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877, 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825, 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080, 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730, 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877, 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554, 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730, 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962, 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658, 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730, 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0, 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0, 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126, 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592, 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078, 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2029, 45, 67, 67, 67, 67, 2033, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 1527, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97, 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694, 45, 45, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0, 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078, 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127, 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877, 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592, 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45, 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97, 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646, 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793, 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67, 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592, 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67, 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0, 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67, 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0, 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457, 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579, 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0, 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45, 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97, 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67, 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146, 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97, 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648, 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67, 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 680, 45, 45, 45, 45, 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45, 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802, 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 810, 67, 67, 67, 67, 67, 67, 67, 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838, 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45, 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97, 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199, 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877, 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730, 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113, 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97, 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97, 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97, 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67, 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97, 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 97, 1648, 97, 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67, 67, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45, 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67, 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97, 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 287, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376, 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97, 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45, 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97, 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45, 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97, 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45, 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 351, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205, 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 67, 67, 67, 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67, 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67, 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0, 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45, 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 67, 67, 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124, 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45, 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45, 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 97, 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45, 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67, 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97, 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45, 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883, 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45, 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67, 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67, 67, 67, 1279, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67, 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 794, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0, 1307, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 2001, 0, 97, 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 1439, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060, 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67, 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105, 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67, 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97, 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0, 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45, 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97, 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67, 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 97, 97, 347, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45, 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67, 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0, 0, 0, 28809, 53532, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97, 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67, 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67, 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0, 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67, 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67, 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162, 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0, 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 67, 259, 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97, 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45, 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45, 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67, 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45, 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1723, 0, 921, 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45, 45, 45, 45, 45, 45, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45, 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67, 1814, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 2044, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1811, 45, 67, 67, 67, 67, 67, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225, 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112, 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0, 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97, 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45, 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67, 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 97, 97, 97, 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97, 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 712, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45, 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67, 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940, 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97, 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67, 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97, 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97, 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 1827, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97, 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67, 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97, 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67, 67, 480, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562, 97, 97, 573, 97, 97, 577, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45, 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97, 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161, 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67, 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97, 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45, 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45, 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175, 0, 0, 0, 0, 45, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45, 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97, 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346, 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45, 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67, 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315, 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45, 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45, 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67, 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 97, 1494, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125, 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67, 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97, 97, 97, 1776, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 67, 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995, 67, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 67, 67, 265, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 67, 67, 67, 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 540, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97, 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 45, 697, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45, 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97, 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97, 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1559, 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592, 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850, 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45, 45, 946, 45, 45, 45, 950, 45, 45, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320, 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67\n];\n\nXQueryTokenizer.EXPECTED =\n[ 290, 300, 304, 353, 296, 309, 305, 319, 315, 324, 328, 352, 354, 334, 338, 330, 320, 345, 349, 293, 358, 362, 341, 366, 312, 370, 374, 378, 382, 386, 390, 394, 398, 737, 402, 634, 439, 604, 634, 634, 634, 634, 408, 634, 634, 634, 404, 634, 634, 634, 457, 634, 634, 963, 634, 634, 413, 634, 634, 634, 634, 634, 634, 634, 663, 418, 422, 903, 902, 426, 431, 548, 634, 437, 521, 919, 443, 615, 409, 449, 455, 624, 731, 751, 634, 461, 465, 672, 470, 469, 474, 481, 485, 477, 489, 493, 629, 542, 497, 505, 603, 602, 991, 648, 510, 804, 634, 515, 958, 526, 525, 530, 768, 634, 546, 552, 711, 710, 593, 558, 562, 618, 566, 570, 574, 578, 582, 586, 590, 608, 612, 660, 822, 821, 634, 622, 596, 444, 628, 533, 724, 633, 640, 653, 647, 652, 536, 1008, 451, 450, 445, 657, 670, 676, 685, 689, 693, 697, 701, 704, 707, 715, 719, 798, 815, 634, 723, 762, 996, 634, 728, 969, 730, 735, 908, 634, 741, 679, 889, 511, 747, 634, 750, 755, 499, 666, 499, 501, 759, 772, 776, 780, 634, 787, 784, 797, 802, 809, 808, 427, 814, 1006, 517, 634, 519, 853, 634, 813, 850, 793, 634, 819, 826, 833, 832, 837, 843, 847, 857, 861, 863, 867, 871, 875, 879, 883, 643, 887, 539, 980, 979, 634, 893, 944, 634, 900, 896, 634, 907, 933, 506, 912, 917, 828, 433, 636, 635, 554, 961, 923, 930, 927, 937, 941, 634, 634, 634, 974, 948, 952, 985, 913, 968, 967, 743, 634, 973, 839, 634, 978, 599, 634, 984, 989, 765, 444, 995, 1000, 634, 1003, 790, 955, 1012, 681, 634, 634, 634, 634, 634, 414, 1016, 1020, 1024, 1085, 1027, 1090, 1090, 1046, 1080, 1137, 1108, 1215, 1049, 1032, 1039, 1085, 1085, 1085, 1085, 1058, 1062, 1068, 1085, 1086, 1090, 1090, 1091, 1072, 1064, 1107, 1090, 1090, 1090, 1118, 1123, 1138, 1078, 1074, 1084, 1085, 1085, 1085, 1087, 1090, 1062, 1052, 1060, 1114, 1062, 1104, 1085, 1085, 1090, 1090, 1028, 1122, 1063, 1128, 1139, 1127, 1158, 1085, 1085, 1151, 1090, 1090, 1090, 1095, 1090, 1132, 1073, 1136, 1143, 1061, 1150, 1085, 1155, 1098, 1101, 1146, 1162, 1169, 1101, 1185, 1151, 1090, 1110, 1173, 1054, 1087, 1109, 1177, 1165, 1089, 1204, 1184, 1107, 1189, 1193, 1088, 1197, 1180, 1201, 1208, 1042, 1212, 1219, 1223, 1227, 1231, 1235, 1245, 1777, 1527, 1686, 1686, 1238, 1686, 1254, 1686, 1686, 1686, 1294, 1669, 1686, 1686, 1686, 1322, 1625, 1534, 1268, 1624, 1275, 1281, 1443, 1292, 1300, 1686, 1686, 1686, 1350, 1826, 1306, 1686, 1686, 1240, 2032, 1317, 1321, 1686, 1686, 1253, 1686, 1326, 1686, 1686, 1686, 1418, 1709, 1446, 1686, 1686, 1686, 1492, 1686, 1295, 1447, 1686, 1686, 1258, 1686, 1736, 1686, 1686, 1520, 1355, 1686, 1288, 1348, 1361, 1686, 1359, 1686, 1364, 1498, 1368, 1302, 1362, 1381, 1389, 1395, 1486, 1686, 1371, 1377, 1370, 1686, 1375, 1382, 1384, 1402, 1408, 1385, 1383, 1619, 1413, 1423, 1428, 1433, 1686, 1686, 1270, 1686, 1338, 1686, 1440, 1686, 1686, 1686, 1499, 1465, 1686, 1686, 1686, 1639, 1473, 1884, 1686, 1686, 1293, 1864, 1686, 1686, 1296, 1321, 1483, 1686, 1686, 1686, 1646, 1686, 1748, 1496, 1686, 1418, 1675, 1686, 1418, 1702, 1686, 1418, 1981, 1686, 1429, 1409, 1427, 1504, 1692, 1686, 1686, 1313, 1448, 1651, 1508, 1686, 1686, 1340, 1686, 1903, 1686, 1686, 1435, 1513, 1686, 1283, 1287, 1519, 1686, 1524, 1363, 1568, 1938, 1539, 1566, 1579, 1479, 1533, 1538, 1553, 1544, 1552, 1557, 1563, 1574, 1557, 1583, 1589, 1590, 1759, 1594, 1603, 1607, 1611, 1686, 1436, 1514, 1686, 1434, 1656, 1686, 1434, 1680, 1686, 1453, 1686, 1686, 1686, 1559, 1617, 1686, 1770, 1418, 1623, 1769, 1629, 1686, 1515, 1335, 1686, 1285, 1686, 1671, 1921, 1650, 1686, 1686, 1344, 1308, 1666, 1686, 1686, 1686, 1659, 1685, 1686, 1686, 1686, 1686, 1241, 1686, 1686, 1844, 1691, 1686, 1630, 1977, 1970, 1362, 1686, 1686, 1686, 1693, 1698, 1686, 1686, 1686, 1697, 1686, 1764, 1715, 1686, 1634, 1638, 1686, 1599, 1585, 1686, 1271, 1686, 1269, 1686, 1721, 1686, 1686, 1354, 1686, 1801, 1686, 1799, 1686, 1640, 1686, 1686, 1461, 1686, 1686, 1732, 1686, 1944, 1686, 1740, 1686, 1746, 1415, 1396, 1686, 1598, 1547, 1417, 1597, 1416, 1577, 1546, 1397, 1577, 1547, 1548, 1570, 1398, 1753, 1686, 1652, 1509, 1686, 1686, 1686, 1757, 1686, 1419, 1686, 1763, 1418, 1768, 1781, 1686, 1686, 1686, 1705, 1686, 2048, 1792, 1686, 1686, 1686, 1735, 1686, 1797, 1686, 1686, 1404, 1686, 1639, 1815, 1686, 1686, 1418, 2017, 1820, 1686, 1686, 1803, 1686, 1686, 1686, 1736, 1489, 1686, 1686, 1825, 1338, 1260, 1263, 1686, 1686, 1785, 1686, 1686, 1728, 1686, 1686, 1749, 1497, 1830, 1830, 1262, 1248, 1261, 1329, 1260, 1264, 1329, 1248, 1249, 1259, 1540, 1849, 1842, 1686, 1686, 1835, 1686, 1686, 1816, 1686, 1686, 1831, 1882, 1848, 1686, 1686, 1686, 1774, 2071, 1854, 1686, 1686, 1469, 1884, 1686, 1821, 1859, 1686, 1686, 1350, 1883, 1686, 1686, 1686, 1781, 1391, 1875, 1686, 1686, 1613, 1644, 1686, 1686, 1889, 1686, 1686, 1662, 1884, 1686, 1885, 1890, 1686, 1686, 1686, 1894, 1686, 1686, 1678, 1686, 1907, 1686, 1686, 1529, 1914, 1686, 1838, 1686, 1686, 1881, 1686, 1686, 1872, 1876, 1836, 1919, 1686, 1837, 1692, 1910, 1686, 1925, 1928, 1742, 1686, 1811, 1811, 1930, 1810, 1929, 1935, 1928, 1900, 1942, 1867, 1868, 1931, 1035, 1788, 1948, 1952, 1956, 1960, 1964, 1686, 1976, 1686, 1686, 1686, 2065, 1686, 1992, 2037, 1686, 1686, 1998, 2009, 1972, 2002, 1686, 1686, 1686, 2077, 1300, 2023, 1686, 1686, 1686, 1807, 2031, 1686, 1686, 1686, 1860, 1500, 2032, 1686, 1686, 1686, 2083, 1686, 2036, 1686, 1277, 1276, 2042, 1877, 1686, 1686, 2041, 1686, 1686, 2027, 2037, 2012, 1686, 2012, 1855, 1850, 1686, 2046, 1686, 1686, 2054, 1996, 1686, 1897, 1309, 2059, 2052, 1686, 2058, 1686, 1686, 2081, 1686, 1717, 1477, 1686, 1331, 1686, 1686, 1687, 1686, 1860, 1681, 1686, 1686, 1686, 1966, 1724, 1686, 1686, 1686, 1984, 2015, 1686, 1686, 1686, 1988, 1686, 2063, 1686, 1686, 1686, 2005, 1686, 1727, 1686, 1686, 1711, 1457, 2069, 1686, 1686, 1686, 2019, 2075, 1686, 1686, 1915, 1686, 1686, 1793, 1874, 1686, 1686, 1491, 1362, 1449, 1686, 1686, 1460, 2098, 2087, 2091, 2095, 2184, 2102, 2113, 2780, 2117, 2134, 2142, 2281, 2146, 2146, 2146, 2304, 2296, 2181, 2639, 2591, 2872, 2592, 2873, 2313, 2195, 2200, 2281, 2146, 2273, 2226, 2204, 2152, 2219, 2276, 2167, 2177, 2276, 2235, 2276, 2276, 2230, 2281, 2276, 2296, 2276, 2293, 2276, 2276, 2276, 2276, 2234, 2276, 2311, 2314, 2210, 2199, 2217, 2222, 2276, 2276, 2276, 2240, 2276, 2294, 2276, 2276, 2173, 2276, 2198, 2281, 2281, 2281, 2281, 2282, 2146, 2146, 2146, 2146, 2205, 2146, 2204, 2248, 2276, 2235, 2276, 2297, 2276, 2276, 2276, 2277, 2256, 2281, 2283, 2146, 2146, 2146, 2275, 2276, 2295, 2276, 2276, 2293, 2146, 2304, 2264, 2269, 2221, 2276, 2276, 2276, 2293, 2295, 2276, 2276, 2276, 2295, 2263, 2205, 2268, 2220, 2172, 2276, 2276, 2276, 2296, 2276, 2276, 2296, 2294, 2276, 2276, 2278, 2281, 2281, 2280, 2281, 2281, 2281, 2283, 2206, 2223, 2276, 2276, 2279, 2281, 2281, 2146, 2273, 2276, 2276, 2281, 2281, 2281, 2276, 2292, 2276, 2298, 2225, 2276, 2298, 2169, 2224, 2292, 2298, 2171, 2229, 2281, 2281, 2171, 2236, 2281, 2281, 2281, 2146, 2275, 2225, 2292, 2299, 2276, 2229, 2281, 2146, 2276, 2290, 2297, 2283, 2146, 2146, 2274, 2224, 2227, 2298, 2225, 2297, 2276, 2230, 2170, 2230, 2282, 2146, 2147, 2151, 2156, 2288, 2276, 2230, 2303, 2308, 2236, 2284, 2228, 2318, 2318, 2318, 2326, 2335, 2339, 2343, 2349, 2416, 2693, 2357, 2592, 2109, 2592, 2592, 2162, 2943, 2823, 2646, 2592, 2361, 2592, 2122, 2592, 2592, 2122, 2470, 2592, 2592, 2592, 2109, 2107, 2592, 2592, 2592, 2123, 2592, 2592, 2592, 2125, 2592, 2413, 2592, 2592, 2592, 2127, 2592, 2592, 2414, 2592, 2592, 2592, 2130, 2952, 2592, 2594, 2592, 2592, 2212, 2609, 2252, 2592, 2592, 2592, 2446, 2434, 2592, 2592, 2592, 2212, 2446, 2450, 2456, 2431, 2435, 2592, 2592, 2243, 2478, 2448, 2439, 2946, 2592, 2592, 2592, 2368, 2809, 2813, 2450, 2441, 2212, 2812, 2449, 2440, 2947, 2592, 2592, 2592, 2345, 2451, 2457, 2948, 2592, 2124, 2592, 2592, 2650, 2823, 2449, 2455, 2946, 2592, 2128, 2592, 2592, 2649, 2952, 2592, 2810, 2448, 2461, 2991, 2467, 2592, 2592, 2329, 2817, 2474, 2990, 2466, 2592, 2592, 2373, 2447, 2992, 2469, 2592, 2592, 2592, 2373, 2447, 2477, 2468, 2592, 2592, 2353, 2469, 2592, 2495, 2592, 2592, 2415, 2483, 2592, 2415, 2496, 2592, 2592, 2352, 2592, 2592, 2352, 2352, 2469, 2592, 2592, 2363, 2331, 2494, 2592, 2592, 2592, 2375, 2592, 2375, 2415, 2504, 2592, 2592, 2367, 2372, 2503, 2592, 2592, 2592, 2389, 2418, 2415, 2592, 2592, 2373, 2592, 2592, 2592, 2593, 2732, 2417, 2415, 2592, 2417, 2520, 2592, 2592, 2592, 2390, 2521, 2521, 2592, 2592, 2592, 2401, 2599, 2585, 2526, 2531, 2120, 2592, 2212, 2426, 2450, 2463, 2948, 2592, 2592, 2592, 2213, 2389, 2527, 2532, 2121, 2542, 2551, 2105, 2592, 2213, 2592, 2592, 2592, 2558, 2538, 2544, 2553, 2557, 2537, 2543, 2552, 2421, 2572, 2576, 2546, 2543, 2547, 2592, 2592, 2373, 2615, 2575, 2545, 2105, 2592, 2244, 2479, 2592, 2129, 2592, 2592, 2628, 2690, 2469, 2562, 2566, 2592, 2592, 2592, 2415, 2928, 2934, 2401, 2570, 2574, 2564, 2572, 2585, 2590, 2592, 2592, 2585, 2965, 2592, 2592, 2592, 2445, 2251, 2592, 2592, 2592, 2474, 2592, 2609, 2892, 2592, 2362, 2592, 2592, 2138, 2851, 2159, 2592, 2592, 2592, 2509, 2888, 2892, 2592, 2592, 2592, 2490, 2418, 2891, 2592, 2592, 2376, 2592, 2592, 2374, 2592, 2889, 2388, 2592, 2373, 2373, 2890, 2592, 2592, 2387, 2592, 2887, 2505, 2892, 2592, 2373, 2610, 2388, 2592, 2592, 2376, 2373, 2592, 2887, 2891, 2592, 2374, 2592, 2592, 2608, 2159, 2614, 2620, 2592, 2592, 2394, 2594, 2887, 2399, 2592, 2887, 2397, 2508, 2374, 2507, 2592, 2375, 2592, 2592, 2592, 2595, 2508, 2506, 2592, 2506, 2505, 2505, 2592, 2507, 2637, 2505, 2592, 2592, 2401, 2661, 2592, 2643, 2592, 2592, 2417, 2592, 2655, 2592, 2592, 2592, 2510, 2414, 2656, 2592, 2592, 2592, 2516, 2592, 2593, 2660, 2665, 2880, 2592, 2592, 2592, 2522, 2767, 2666, 2881, 2592, 2592, 2420, 2571, 2696, 2592, 2592, 2592, 2580, 2572, 2686, 2632, 2698, 2592, 2383, 2514, 2592, 2163, 2932, 2465, 2685, 2631, 2697, 2592, 2388, 2592, 2592, 2212, 2604, 2671, 2632, 2678, 2592, 2401, 2405, 2409, 2592, 2592, 2592, 2679, 2592, 2592, 2592, 2592, 2108, 2677, 2591, 2592, 2592, 2592, 2419, 2592, 2683, 2187, 2191, 2469, 2671, 2189, 2467, 2592, 2401, 2629, 2633, 2702, 2468, 2592, 2592, 2421, 2536, 2703, 2469, 2592, 2592, 2422, 2573, 2593, 2672, 2467, 2592, 2402, 2406, 2592, 2402, 2979, 2592, 2592, 2626, 2673, 2467, 2592, 2446, 2259, 2947, 2592, 2377, 2709, 2592, 2592, 2522, 2862, 2713, 2468, 2592, 2592, 2581, 2572, 2562, 2374, 2374, 2592, 2376, 2721, 2724, 2592, 2592, 2624, 2373, 2731, 2592, 2592, 2592, 2626, 2732, 2592, 2592, 2592, 2755, 2656, 2726, 2736, 2741, 2592, 2486, 2593, 2381, 2592, 2727, 2737, 2742, 2715, 2747, 2753, 2592, 2498, 2469, 2873, 2743, 2592, 2592, 2592, 2791, 2759, 2763, 2592, 2592, 2627, 2704, 2592, 2592, 2522, 2789, 2593, 2761, 2753, 2592, 2498, 2863, 2592, 2592, 2767, 2592, 2592, 2592, 2792, 2789, 2592, 2592, 2592, 2803, 2126, 2592, 2592, 2592, 2811, 2122, 2592, 2592, 2592, 2834, 2777, 2592, 2592, 2592, 2848, 2936, 2591, 2489, 2797, 2592, 2592, 2670, 2631, 2490, 2798, 2592, 2592, 2592, 2963, 2807, 2592, 2592, 2592, 2965, 2838, 2592, 2592, 2592, 2975, 2330, 2818, 2829, 2592, 2498, 2939, 2592, 2498, 2592, 2791, 2331, 2819, 2830, 2592, 2592, 2592, 2982, 2834, 2817, 2828, 2106, 2592, 2592, 2592, 2405, 2405, 2817, 2828, 2592, 2592, 2415, 2849, 2842, 2592, 2522, 2773, 2592, 2522, 2868, 2592, 2580, 2600, 2586, 2137, 2850, 2843, 2592, 2592, 2855, 2937, 2844, 2592, 2592, 2592, 2987, 2936, 2591, 2592, 2592, 2684, 2630, 2592, 2856, 2938, 2592, 2592, 2860, 2939, 2592, 2592, 2872, 2592, 2861, 2591, 2592, 2592, 2887, 2616, 2592, 2867, 2592, 2592, 2708, 2592, 2498, 2469, 2498, 2497, 2785, 2773, 2499, 2783, 2770, 2877, 2877, 2877, 2772, 2592, 2592, 2345, 2885, 2592, 2592, 2592, 2715, 2762, 2515, 2896, 2592, 2592, 2715, 2917, 2516, 2897, 2592, 2592, 2592, 2901, 2906, 2911, 2592, 2592, 2956, 2960, 2715, 2902, 2907, 2912, 2593, 2916, 2920, 2820, 2922, 2822, 2592, 2592, 2715, 2927, 2921, 2821, 2106, 2592, 2592, 2974, 2408, 2321, 2821, 2106, 2592, 2592, 2983, 2592, 2593, 2404, 2408, 2592, 2592, 2717, 2749, 2716, 2928, 2322, 2822, 2593, 2926, 2919, 2820, 2934, 2823, 2592, 2592, 2592, 2651, 2824, 2592, 2592, 2592, 2130, 2952, 2592, 2592, 2592, 2592, 2964, 2592, 2592, 2716, 2748, 2592, 2969, 2592, 2592, 2716, 2918, 2368, 2970, 2592, 2592, 2592, 2403, 2407, 2592, 2592, 2787, 2211, 2404, 2409, 2592, 2592, 2802, 2837, 2987, 2592, 2592, 2592, 2809, 2427, 2592, 2793, 2592, 2592, 2809, 2447, 1073741824, 0x80000000, 539754496, 542375936, 402653184, 554434560, 571736064, 545521856, 268451840, 335544320, 268693630, 512, 2048, 256, 1024, 0, 1024, 0, 1073741824, 0x80000000, 0, 0, 0, 8388608, 0, 0, 1073741824, 1073741824, 0, 0x80000000, 537133056, 4194304, 1048576, 268435456, -1073741824, 0, 0, 0, 1048576, 0, 0, 0, 1572864, 0, 0, 0, 4194304, 0, 134217728, 16777216, 0, 0, 32, 64, 98304, 0, 33554432, 8388608, 192, 67108864, 67108864, 67108864, 67108864, 16, 32, 4, 0, 8192, 196608, 196608, 229376, 80, 4096, 524288, 8388608, 0, 0, 32, 128, 256, 24576, 24600, 24576, 24576, 2, 24576, 24576, 24576, 24584, 24592, 24576, 24578, 24576, 24578, 24576, 24576, 16, 512, 2048, 2048, 256, 4096, 32768, 1048576, 4194304, 67108864, 134217728, 268435456, 262144, 134217728, 0, 128, 128, 64, 16384, 16384, 16384, 67108864, 32, 32, 4, 4, 4096, 262144, 134217728, 0, 0, 0, 2, 0, 8192, 131072, 131072, 4096, 4096, 4096, 4096, 24576, 24576, 24576, 8, 8, 24576, 24576, 16384, 16384, 16384, 24576, 24584, 24576, 24576, 24576, 16384, 24576, 536870912, 262144, 0, 0, 32, 2048, 8192, 4, 4096, 4096, 4096, 786432, 8388608, 16777216, 0, 128, 16384, 16384, 16384, 32768, 65536, 2097152, 32, 32, 32, 32, 4, 4, 4, 4, 4, 4096, 67108864, 67108864, 67108864, 24576, 24576, 24576, 24576, 0, 16384, 16384, 16384, 16384, 67108864, 67108864, 8, 67108864, 24576, 8, 8, 8, 24576, 24576, 24576, 24578, 24576, 24576, 24576, 2, 2, 2, 16384, 67108864, 67108864, 67108864, 32, 67108864, 8, 8, 24576, 2048, 0x80000000, 536870912, 262144, 262144, 262144, 67108864, 8, 24576, 16384, 32768, 1048576, 4194304, 25165824, 67108864, 24576, 32770, 2, 4, 112, 512, 98304, 524288, 50, 402653186, 1049090, 1049091, 10, 66, 100925514, 10, 66, 12582914, 0, 0, -1678194207, -1678194207, -1041543218, 0, 32768, 0, 0, 32, 65536, 268435456, 1, 1, 513, 1048577, 0, 12582912, 0, 0, 0, 4, 1792, 0, 0, 0, 7, 29360128, 0, 0, 0, 8, 0, 0, 0, 12, 1, 1, 0, 0, -604102721, -604102721, 4194304, 8388608, 0, 0, 0, 31, 925600, 997981306, 997981306, 997981306, 0, 0, 2048, 8388608, 0, 0, 1, 2, 4, 32, 64, 512, 8192, 0, 0, 0, 245760, 997720064, 0, 0, 0, 32, 0, 0, 0, 3, 12, 16, 32, 8, 112, 3072, 12288, 16384, 32768, 65536, 131072, 7864320, 16777216, 973078528, 0, 0, 65536, 131072, 3670016, 4194304, 16777216, 33554432, 2, 8, 48, 2048, 8192, 16384, 32768, 65536, 131072, 524288, 131072, 524288, 3145728, 4194304, 16777216, 33554432, 65536, 131072, 2097152, 4194304, 16777216, 33554432, 134217728, 268435456, 536870912, 0, 0, 0, 1024, 0, 8, 48, 2048, 8192, 65536, 33554432, 268435456, 536870912, 65536, 268435456, 536870912, 0, 0, 32768, 0, 0, 126, 623104, 65011712, 0, 32, 65536, 536870912, 0, 0, 65536, 524288, 0, 32, 65536, 0, 0, 0, 2048, 0, 0, 0, 15482, 245760, -604102721, 0, 0, 0, 18913, 33062912, 925600, -605028352, 0, 0, 0, 65536, 31, 8096, 131072, 786432, 3145728, 3145728, 12582912, 50331648, 134217728, 268435456, 160, 256, 512, 7168, 131072, 786432, 131072, 786432, 1048576, 2097152, 12582912, 16777216, 268435456, 1073741824, 0x80000000, 12582912, 16777216, 33554432, 268435456, 1073741824, 0x80000000, 3, 12, 16, 160, 256, 7168, 786432, 1048576, 12582912, 16777216, 268435456, 1073741824, 0, 8, 16, 32, 128, 256, 512, 7168, 786432, 1048576, 2097152, 0, 1, 2, 8, 16, 7168, 786432, 1048576, 8388608, 16777216, 16777216, 1073741824, 0, 0, 0, 0, 1, 0, 0, 8, 32, 128, 256, 7168, 8, 32, 0, 3072, 0, 8, 32, 3072, 4096, 524288, 8, 32, 0, 0, 3072, 4096, 0, 2048, 524288, 8388608, 8, 2048, 0, 0, 1, 12, 256, 4096, 32768, 262144, 1048576, 4194304, 67108864, 0, 2048, 0, 2048, 2048, 1073741824, -58805985, -58805985, -58805985, 0, 0, 262144, 0, 0, 32, 4194304, 16777216, 134217728, 4382, 172032, -58982400, 0, 0, 2, 28, 256, 4096, 8192, 8192, 32768, 131072, 262144, 524288, 1, 2, 12, 256, 4096, 0, 0, 4194304, 67108864, 134217728, 805306368, 1073741824, 0, 0, 1, 2, 12, 16, 256, 4096, 1048576, 67108864, 134217728, 268435456, 0, 512, 1048576, 4194304, 201326592, 1879048192, 0, 0, 12, 256, 4096, 134217728, 268435456, 536870912, 12, 256, 268435456, 536870912, 0, 12, 256, 0, 0, 1, 32, 64, 512, 0, 0, 205236961, 205236961, 0, 0, 0, 1, 96, 640, 1, 10976, 229376, 204996608, 0, 640, 2048, 8192, 229376, 1572864, 1572864, 2097152, 201326592, 0, 0, 0, 64, 512, 2048, 229376, 1572864, 201326592, 1572864, 201326592, 0, 0, 1, 4382, 0, 1, 32, 2048, 65536, 131072, 1572864, 201326592, 131072, 1572864, 134217728, 0, 0, 524288, 524288, 0, 0, 0, -68582786, -68582786, -68582786, 0, 0, 2097152, 524288, 0, 524288, 0, 0, 65536, 131072, 1572864, 0, 0, 2, 4, 0, 0, 65011712, -134217728, 0, 0, 0, 0, 2, 4, 120, 512, -268435456, 0, 0, 0, 2, 8, 48, 64, 2048, 8192, 98304, 524288, 2097152, 4194304, 25165824, 33554432, 134217728, 268435456, 0x80000000, 0, 0, 25165824, 33554432, 134217728, 1879048192, 0x80000000, 0, 0, 4, 112, 512, 622592, 65011712, 134217728, -268435456, 16777216, 33554432, 134217728, 1610612736, 0, 0, 0, 64, 98304, 524288, 4194304, 16777216, 33554432, 0, 98304, 524288, 16777216, 33554432, 0, 65536, 524288, 33554432, 536870912, 1073741824, 0, 65536, 524288, 536870912, 1073741824, 0, 0, 65536, 524288, 536870912, 0, 524288, 0, 524288, 524288, 1048576, 2086666240, 0x80000000, 0, -1678194207, 0, 0, 0, 8, 32, 2048, 524288, 8388608, 0, 0, 33062912, 436207616, 0x80000000, 0, 0, 32, 64, 2432, 16384, 32768, 32768, 524288, 3145728, 4194304, 25165824, 25165824, 167772160, 268435456, 0x80000000, 0, 32, 64, 384, 2048, 16384, 32768, 1048576, 2097152, 4194304, 25165824, 32, 64, 128, 256, 2048, 16384, 2048, 16384, 1048576, 4194304, 16777216, 33554432, 134217728, 536870912, 1073741824, 0, 0, 2048, 16384, 4194304, 16777216, 33554432, 134217728, 805306368, 0, 0, 16777216, 134217728, 268435456, 0x80000000, 0, 622592, 622592, 622592, 8807, 8807, 434791, 0, 0, 16777216, 0, 0, 0, 7, 608, 8192, 0, 0, 0, 3, 4, 96, 512, 32, 64, 8192, 0, 0, 16777216, 134217728, 0, 0, 2, 4, 8192, 16384, 65536, 2097152, 33554432, 268435456\n];\n\nXQueryTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"QuotChar\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TokenHandler = function(code) {\n    var input = code;\n    this.tokens = [];\n \n    this.reset = function() {\n        input = input;\n        this.tokens = [];\n    };\n    \n    this.startNonterminal = function() {};\n    this.endNonterminal = function() {};\n\n    this.terminal = function(name, begin, end) {\n        this.tokens.push({\n            name: name,\n            value: input.substring(begin, end)\n        });\n    };\n\n    this.whitespace = function(begin, end) {\n        this.tokens.push({\n            name: 'WS',\n            value: input.substring(begin, end)\n        });\n    };\n};\n\nexports.Lexer = function(Tokenizer, Rules) {\n\n    this.tokens = [];\n  \n    this.getLineTokens = function(line, state) {\n        state = (state === 'start' || !state) ? '[\"start\"]' : state;\n        var stack = JSON.parse(state);\n        var h = new TokenHandler(line);\n        var tokenizer = new Tokenizer(line, h);\n        var tokens = [];\n    \n        while(true) {\n            var currentState = stack[stack.length - 1];\n            try {\n                h.tokens = [];\n                tokenizer['parse_' + currentState]();\n                var info = null;\n        \n                if(h.tokens.length > 1 && h.tokens[0].name === 'WS') {\n                    tokens.push({\n                        type: 'text',\n                        value: h.tokens[0].value\n                    });\n                    h.tokens.splice(0, 1);\n                }\n        \n                var token = h.tokens[0];\n                var rules  = Rules[currentState];\n                for(var k = 0; k < rules.length; k++) {\n                    var rule = Rules[currentState][k];\n                    if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) {\n                        info = rule;\n                        break;\n                    }\n                }\n        \n                if(token.name === 'EOF') { break; }\n                if(token.value === '') { throw 'Encountered empty string lexical rule.'; }\n        \n                tokens.push({\n                    type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token),\n                    value: token.value\n                });\n        \n                if(info && info.next) {\n                    info.next(stack);\n                }\n      \n            } catch(e) {\n                if(e instanceof tokenizer.ParseException) {\n                    var index = 0;\n                    for(var i=0; i < tokens.length; i++) {\n                        index += tokens[i].value.length;\n                    }\n                    tokens.push({ type: 'text', value: line.substring(index) });\n                    return {\n                        tokens: tokens,\n                        state: JSON.stringify(['start'])\n                    };\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        return {\n            tokens: tokens,\n            state: JSON.stringify(stack)\n        };\n    };\n};\n},{}],\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar XQueryTokenizer = _dereq_('./XQueryTokenizer').XQueryTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict'.split('|');\n\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotChar', token: 'string' }\n    ]\n};\n    \nexports.XQueryLexer = function(){ return new Lexer(XQueryTokenizer, Rules); };\n},{\"./XQueryTokenizer\":\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}]},{},[\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\"]);\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nfunction is(token, type) {\n    return token && token.type.lastIndexOf(type + \".xml\") > -1;\n}\nvar XmlBehaviour = function () {\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n            if (!token)\n                token = iterator.stepBackward();\n            if (!token)\n                return;\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n    this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n                if (position.column < tokenEndColumn)\n                    return;\n                if (position.column == tokenEndColumn) {\n                    var nextToken = iterator.stepForward();\n                    if (nextToken && is(nextToken, \"attribute-value\"))\n                        return;\n                    iterator.stepBackward();\n                }\n            }\n            if (/^\\s*>/.test(session.getLine(position.row).slice(position.column)))\n                return;\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                return;\n            return {\n                text: \">\" + \"</\" + element + \">\",\n                selection: [1, 1]\n            };\n        }\n    });\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n                if (!token) {\n                    return;\n                }\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    }\n                    else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n};\noop.inherits(XmlBehaviour, Behaviour);\nexports.XmlBehaviour = XmlBehaviour;\n\n});\n\nace.define(\"ace/mode/behaviour/xquery\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require('../behaviour').Behaviour;\nvar CstyleBehaviour = require('./cstyle').CstyleBehaviour;\nvar XmlBehaviour = require(\"../behaviour/xml\").XmlBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nfunction hasType(token, type) {\n    var hasType = true;\n    var typeList = token.type.split('.');\n    var needleList = type.split('.');\n    needleList.forEach(function (needle) {\n        if (typeList.indexOf(needle) == -1) {\n            hasType = false;\n            return false;\n        }\n    });\n    return hasType;\n}\nvar XQueryBehaviour = function () {\n    this.inherit(CstyleBehaviour, [\"braces\", \"parens\", \"string_dquotes\"]); // Get string behaviour\n    this.inherit(XmlBehaviour); // Get xml behaviour\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken();\n            var atCursor = false;\n            var state = JSON.parse(state).pop();\n            if ((token && token.value === '>') || state !== \"StartTag\")\n                return;\n            if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))) {\n                do {\n                    token = iterator.stepBackward();\n                } while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));\n            }\n            else {\n                atCursor = true;\n            }\n            var previous = iterator.stepBackward();\n            if (!token || !hasType(token, 'meta.tag') || (previous !== null && previous.value.match('/'))) {\n                return;\n            }\n            var tag = token.value.substring(1);\n            if (atCursor) {\n                var tag = tag.substring(0, position.column - token.start);\n            }\n            return {\n                text: '>' + '</' + tag + '>',\n                selection: [1, 1]\n            };\n        }\n    });\n};\noop.inherits(XQueryBehaviour, Behaviour);\nexports.XQueryBehaviour = XQueryBehaviour;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/xquery\",[\"require\",\"exports\",\"module\",\"ace/worker/worker_client\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/xquery/xquery_lexer\",\"ace/range\",\"ace/mode/behaviour/xquery\",\"ace/mode/folding/cstyle\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar XQueryLexer = require(\"./xquery/xquery_lexer\").XQueryLexer;\nvar Range = require(\"../range\").Range;\nvar XQueryBehaviour = require(\"./behaviour/xquery\").XQueryBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Anchor = require(\"../anchor\").Anchor;\n\nvar Mode = function() {\n    this.$tokenizer   = new XQueryLexer();\n    this.$behaviour   = new XQueryBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n    this.$highlightRules = new TextHighlightRules();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    \n    this.completer = {\n        getCompletions: function(editor, session, pos, prefix, callback) {\n            if (!session.$worker)\n                return callback();\n            session.$worker.emit(\"complete\", { data: { pos: pos, prefix: prefix } });\n            session.$worker.on(\"complete\", function(e){\n                callback(null, e.data);\n            });\n        }\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var match = line.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);\n        if (match)\n            indent += tab;\n        return indent;\n    };\n    \n    this.checkOutdent = function(state, line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return (/^\\s*[\\}\\)]/).test(input);\n    };\n    \n    this.autoOutdent = function(state, doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*[\\}\\)])/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.toggleCommentLines = function(state, doc, startRow, endRow) {\n        var i, line;\n        var outdent = true;\n        var re = /^\\s*\\(:(.*):\\)/;\n\n        for (i=startRow; i<= endRow; i++) {\n            if (!re.test(doc.getLine(i))) {\n                outdent = false;\n                break;\n            }\n        }\n\n        var range = new Range(0, 0, 0, 0);\n        for (i=startRow; i<= endRow; i++) {\n            line = doc.getLine(i);\n            range.start.row  = i;\n            range.end.row    = i;\n            range.end.column = line.length;\n\n            doc.replace(range, outdent ? line.match(re)[1] : \"(:\" + line + \":)\");\n        }\n    };\n    \n    this.createWorker = function(session) {\n        \n      var worker = new WorkerClient([\"ace\"], \"ace/mode/xquery_worker\", \"XQueryWorker\");\n        var that = this;\n\n        worker.attachToDocument(session.getDocument());\n        \n        worker.on(\"ok\", function(e) {\n          session.clearAnnotations();\n        });\n        \n        worker.on(\"markers\", function(e) {\n          session.clearAnnotations();\n          that.addMarkers(e.data, session);\n        });\n \n        worker.on(\"highlight\", function(tokens) {\n          that.$tokenizer.tokens = tokens.data.tokens;\n          that.$tokenizer.lines  = session.getDocument().getAllLines();\n          \n          var rows = Object.keys(that.$tokenizer.tokens);\n          for(var i=0; i < rows.length; i++) {\n            var row = parseInt(rows[i]);\n            delete session.bgTokenizer.lines[row];\n            delete session.bgTokenizer.states[row];\n            session.bgTokenizer.fireUpdateEvent(row, row);\n          }\n        });\n        \n        return worker;\n    };\n\n    this.removeMarkers = function(session) {\n        var markers = session.getMarkers(false);\n        for (var id in markers) {\n            if (markers[id].clazz.indexOf('language_highlight_') === 0) {\n                session.removeMarker(id);\n            }\n        }\n        for (var i = 0; i < session.markerAnchors.length; i++) {\n            session.markerAnchors[i].detach();\n        }\n        session.markerAnchors = [];\n    };\n\n    this.addMarkers = function(annos, mySession) {\n        var _self = this;\n        \n        if (!mySession.markerAnchors) mySession.markerAnchors = [];\n        this.removeMarkers(mySession);\n        mySession.languageAnnos = [];\n        annos.forEach(function(anno) {\n            var anchor = new Anchor(mySession.getDocument(), anno.pos.sl, anno.pos.sc || 0);\n            mySession.markerAnchors.push(anchor);\n            var markerId;\n            var colDiff = anno.pos.ec - anno.pos.sc;\n            var rowDiff = anno.pos.el - anno.pos.sl;\n            var gutterAnno = {\n                guttertext: anno.message,\n                type: anno.level || \"warning\",\n                text: anno.message\n            };\n\n            function updateFloat(single) {\n                if (markerId)\n                    mySession.removeMarker(markerId);\n                gutterAnno.row = anchor.row;\n                if (anno.pos.sc !== undefined && anno.pos.ec !== undefined) {\n                    var range = new Range(anno.pos.sl, anno.pos.sc, anno.pos.el, anno.pos.ec);\n                    markerId = mySession.addMarker(range, \"language_highlight_\" + (anno.type ? anno.type : \"default\"));\n                }\n                if (single) mySession.setAnnotations(mySession.languageAnnos);\n            }\n            updateFloat();\n            anchor.on(\"change\", function() {\n                updateFloat(true);\n            });\n            if (anno.message) mySession.languageAnnos.push(gutterAnno);\n        });\n        mySession.setAnnotations(mySession.languageAnnos);\n    };    \n        \n    this.$id = \"ace/mode/xquery\";\n    this.snippetFileId = \"ace/snippets/xquery\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});                (function() {\n                    ace.require([\"ace/mode/xquery\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-yaml.js",
    "content": "ace.define(\"ace/mode/yaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar YamlHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment\",\n                regex: \"#.*$\"\n            }, {\n                token: \"list.markup\",\n                regex: /^(?:-{3}|\\.{3})\\s*(?=#|$)/\n            }, {\n                token: \"list.markup\",\n                regex: /^\\s*[\\-?](?:$|\\s)/\n            }, {\n                token: \"constant\",\n                regex: \"!![\\\\w//]+\"\n            }, {\n                token: \"constant.language\",\n                regex: \"[&\\\\*][a-zA-Z0-9-_]+\"\n            }, {\n                token: [\"meta.tag\", \"keyword\"],\n                regex: /^(\\s*\\w[^\\s:]*?)(:(?=\\s|$))/\n            }, {\n                token: [\"meta.tag\", \"keyword\"],\n                regex: /(\\w[^\\s:]*?)(\\s*:(?=\\s|$))/\n            }, {\n                token: \"keyword.operator\",\n                regex: \"<<\\\\w*:\\\\w*\"\n            }, {\n                token: \"keyword.operator\",\n                regex: \"-\\\\s*(?=[{])\"\n            }, {\n                token: \"string\",\n                regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token: \"string\",\n                regex: /[|>][-+\\d]*(?:$|\\s+(?:$|#))/,\n                onMatch: function (val, state, stack, line) {\n                    line = line.replace(/ #.*/, \"\");\n                    var indent = /^ *((:\\s*)?-(\\s*[^|>])?)?/.exec(line)[0]\n                        .replace(/\\S\\s*$/, \"\").length;\n                    var indentationIndicator = parseInt(/\\d+[\\s+-]*$/.exec(line));\n                    if (indentationIndicator) {\n                        indent += indentationIndicator - 1;\n                        this.next = \"mlString\";\n                    }\n                    else {\n                        this.next = \"mlStringPre\";\n                    }\n                    if (!stack.length) {\n                        stack.push(this.next);\n                        stack.push(indent);\n                    }\n                    else {\n                        stack[0] = this.next;\n                        stack[1] = indent;\n                    }\n                    return this.token;\n                },\n                next: \"mlString\"\n            }, {\n                token: \"string\",\n                regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token: \"constant.numeric\",\n                regex: /(\\b|[+\\-\\.])[\\d_]+(?:(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)(?=[^\\d-\\w]|$)$/\n            }, {\n                token: \"constant.numeric\",\n                regex: /[+\\-]?\\.inf\\b|NaN\\b|0x[\\dA-Fa-f_]+|0b[10_]+/\n            }, {\n                token: \"constant.language.boolean\",\n                regex: \"\\\\b(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"\n            }, {\n                token: \"paren.lparen\",\n                regex: \"[[({]\"\n            }, {\n                token: \"paren.rparen\",\n                regex: \"[\\\\])}]\"\n            }, {\n                token: \"text\",\n                regex: /[^\\s,:\\[\\]\\{\\}]+/\n            }\n        ],\n        \"mlStringPre\": [\n            {\n                token: \"indent\",\n                regex: /^ *$/\n            }, {\n                token: \"indent\",\n                regex: /^ */,\n                onMatch: function (val, state, stack) {\n                    var curIndent = stack[1];\n                    if (curIndent >= val.length) {\n                        this.next = \"start\";\n                        stack.shift();\n                        stack.shift();\n                    }\n                    else {\n                        stack[1] = val.length - 1;\n                        this.next = stack[0] = \"mlString\";\n                    }\n                    return this.token;\n                },\n                next: \"mlString\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"mlString\": [\n            {\n                token: \"indent\",\n                regex: /^ *$/\n            }, {\n                token: \"indent\",\n                regex: /^ */,\n                onMatch: function (val, state, stack) {\n                    var curIndent = stack[1];\n                    if (curIndent >= val.length) {\n                        this.next = \"start\";\n                        stack.splice(0);\n                    }\n                    else {\n                        this.next = \"mlString\";\n                    }\n                    return this.token;\n                },\n                next: \"mlString\"\n            }, {\n                token: \"string\",\n                regex: '.+'\n            }\n        ]\n    };\n    this.normalizeRules();\n};\noop.inherits(YamlHighlightRules, TextHighlightRules);\nexports.YamlHighlightRules = YamlHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar MatchingBraceOutdent = function () { };\n(function () {\n    this.checkOutdent = function (line, input) {\n        if (!/^\\s+$/.test(line))\n            return false;\n        return /^\\s*\\}/.test(input);\n    };\n    this.autoOutdent = function (doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n        if (!match)\n            return 0;\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({ row: row, column: column });\n        if (!openBracePos || openBracePos.row == row)\n            return 0;\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column - 1), indent);\n    };\n    this.$getIndent = function (line) {\n        return line.match(/^\\s*/)[0];\n    };\n}).call(MatchingBraceOutdent.prototype);\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.getFoldWidgetRange = function (session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n            if (level == -1)\n                continue;\n            if (line[level] != \"#\")\n                break;\n            endRow = row;\n        }\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent != -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        }\n        else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n        if (prevIndent != -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/yaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/yaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\",\"ace/worker/worker_client\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar YamlHighlightRules = require(\"./yaml_highlight_rules\").YamlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar Mode = function () {\n    this.HighlightRules = YamlHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new FoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = [\"#\"];\n    this.getNextLineIndent = function (state, line, tab) {\n        var indent = this.$getIndent(line);\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n        return indent;\n    };\n    this.checkOutdent = function (state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n    this.autoOutdent = function (state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.createWorker = function (session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/yaml_worker\", \"YamlWorker\");\n        worker.attachToDocument(session.getDocument());\n        worker.on(\"annotate\", function (results) {\n            session.setAnnotations(results.data);\n        });\n        worker.on(\"terminate\", function () {\n            session.clearAnnotations();\n        });\n        return worker;\n    };\n    this.$id = \"ace/mode/yaml\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/yaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/mode-zeek.js",
    "content": "ace.define(\"ace/mode/zeek_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar ZeekHighlightRules = function () {\n    this.$rules = {\n        \"start\": [\n            {\n                token: \"comment.line\",\n                regex: \"#.*$\"\n            },\n            {\n                token: \"string.double\",\n                regex: /\"/,\n                next: \"string-state\"\n            },\n            {\n                token: \"string.regexp\",\n                regex: \"(/)(?=.*/)\",\n                next: \"pattern-state\"\n            },\n            {\n                token: [\"keyword.other\", \"meta.preprocessor\"],\n                regex: /(@(?:load-plugin|load-sigs|load|unload))(.*$)/\n            },\n            {\n                token: \"keyword.other\",\n                regex: /@(?:DEBUG|DIR|FILENAME|deprecated|if|ifdef|ifndef|else|endif)/\n            },\n            {\n                token: [\n                    \"keyword.other\",\n                    \"meta.preprocessor\",\n                    \"keyword.operator\",\n                    \"meta.preprocessor\"\n                ],\n                regex: /(@prefixes)(\\s*)(\\+?=)(.*$)/\n            },\n            {\n                token: \"storage.modifier.attribute\",\n                regex: /\\&\\b(?:redef|priority|log|optional|default|add_func|delete_func|expire_func|read_expire|write_expire|create_expire|synchronized|persistent|rotate_interval|rotate_size|encrypt|raw_output|mergeable|error_handler|type_column|deprecated)\\b/\n            },\n            {\n                token: \"constant.language\",\n                regex: /\\b(?:T|F)\\b/\n            },\n            {\n                token: \"constant.numeric.port\",\n                regex: /\\b\\d{1,5}\\/(?:udp|tcp|icmp|unknown)\\b/\n            },\n            {\n                token: \"constant.numeric.addr\",\n                regex: /\\b(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{1,2})\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{1,2})\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{1,2})\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{1,2})\\b/,\n                comment: \"IPv4 address\"\n            },\n            {\n                token: \"constant.numeric.addr\",\n                regex: /\\[(?:[0-9a-fA-F]{0,4}:){2,7}(?:[0-9a-fA-F]{0,4})?(?:(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{1,2})\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{1,2})\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{1,2})\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{1,2}))?\\]/,\n                comment: \"IPv6 address\"\n            },\n            {\n                token: \"constant.numeric.float.decimal.interval\",\n                regex: /(?:(?:\\d*\\.\\d*(?:[eE][+-]?\\d+)?|\\d*[eE][+-]?\\d+|\\d*\\.\\d*)|\\d+)\\s*(?:day|hr|min|msec|usec|sec)s?/\n            },\n            {\n                token: \"constant.numeric.float.decimal\",\n                regex: /\\d*\\.\\d*(?:[eE][+-]?\\d+)?|\\d*[eE][+-]?\\d+|\\d*\\.\\d*/\n            },\n            {\n                token: \"constant.numeric.hostname\",\n                regex: /\\b[A-Za-z0-9][A-Za-z0-9\\-]*(?:\\.[A-Za-z0-9][A-Za-z0-9\\-]*)+\\b/\n            },\n            {\n                token: \"constant.numeric.integer.hexadecimal\",\n                regex: /\\b0x[0-9a-fA-F]+\\b/\n            },\n            {\n                token: \"constant.numeric.integer.decimal\",\n                regex: /\\b\\d+\\b/\n            },\n            {\n                token: \"keyword.operator\",\n                regex: /==|!=|<=|<|>=|>/\n            },\n            {\n                token: \"keyword.operator\",\n                regex: /(&&)|(\\|\\|)|(!)/\n            },\n            {\n                token: \"keyword.operator\",\n                regex: /=|\\+=|-=/\n            },\n            {\n                token: \"keyword.operator\",\n                regex: /\\+\\+|\\+|--|-|\\*|\\/|%/\n            },\n            {\n                token: \"keyword.operator\",\n                regex: /&|\\||\\^|~/\n            },\n            {\n                token: \"keyword.operator\",\n                regex: /\\b(?:in|as|is)\\b/\n            },\n            {\n                token: \"punctuation.terminator\",\n                regex: /;/\n            },\n            {\n                token: \"punctuation.accessor\",\n                regex: /\\??\\$/\n            },\n            {\n                token: \"punctuation.accessor\",\n                regex: /::/\n            },\n            {\n                token: \"keyword.operator\",\n                regex: /\\?/\n            },\n            {\n                token: \"punctuation.separator\",\n                regex: /:/\n            },\n            {\n                token: \"punctuation.separator\",\n                regex: /,/\n            },\n            {\n                token: [\n                    \"keyword.other\",\n                    \"meta.namespace\",\n                    \"entity.name.namespace\"\n                ],\n                regex: /(module)(\\s+)([A-Za-z_][A-Za-z_0-9]*(?:::[A-Za-z_][A-Za-z_0-9]*)*)/\n            },\n            {\n                token: \"keyword.other\",\n                regex: /\\bexport\\b/\n            },\n            {\n                token: \"keyword.control.conditional\",\n                regex: /\\b(?:if|else)\\b/\n            },\n            {\n                token: \"keyword.control\",\n                regex: /\\b(?:for|while)\\b/\n            },\n            {\n                token: \"keyword.control\",\n                regex: /\\b(?:return|break|next|continue|fallthrough)\\b/\n            },\n            {\n                token: \"keyword.control\",\n                regex: /\\b(?:switch|default|case)\\b/\n            },\n            {\n                token: \"keyword.other\",\n                regex: /\\b(?:add|delete)\\b/\n            },\n            {\n                token: \"keyword.other\",\n                regex: /\\bprint\\b/\n            },\n            {\n                token: \"keyword.control\",\n                regex: /\\b(?:when|timeout|schedule)\\b/\n            },\n            {\n                token: [\n                    \"keyword.other\",\n                    \"meta.struct.record\",\n                    \"entity.name.struct.record\",\n                    \"meta.struct.record\",\n                    \"punctuation.separator\",\n                    \"meta.struct.record\",\n                    \"storage.type.struct.record\"\n                ],\n                regex: /\\b(type)(\\s+)([A-Za-z_][A-Za-z_0-9]*(?:::[A-Za-z_][A-Za-z_0-9]*)*)(\\s*)(:)(\\s*\\b)(record)\\b/\n            },\n            {\n                token: [\n                    \"keyword.other\",\n                    \"meta.enum\",\n                    \"entity.name.enum\",\n                    \"meta.enum\",\n                    \"punctuation.separator\",\n                    \"meta.enum\",\n                    \"storage.type.enum\"\n                ],\n                regex: /\\b(type)(\\s+)([A-Za-z_][A-Za-z_0-9]*(?:::[A-Za-z_][A-Za-z_0-9]*)*)(\\s*)(:)(\\s*\\b)(enum)\\b/\n            },\n            {\n                token: [\n                    \"keyword.other\",\n                    \"meta.type\",\n                    \"entity.name.type\",\n                    \"meta.type\",\n                    \"punctuation.separator\"\n                ],\n                regex: /\\b(type)(\\s+)([A-Za-z_][A-Za-z_0-9]*(?:::[A-Za-z_][A-Za-z_0-9]*)*)(\\s*)(:)/\n            },\n            {\n                token: [\n                    \"keyword.other\",\n                    \"meta.struct.record\",\n                    \"storage.type.struct.record\",\n                    \"meta.struct.record\",\n                    \"entity.name.struct.record\"\n                ],\n                regex: /\\b(redef)(\\s+)(record)(\\s+)([A-Za-z_][A-Za-z_0-9]*(?:::[A-Za-z_][A-Za-z_0-9]*)*)\\b/\n            },\n            {\n                token: [\n                    \"keyword.other\",\n                    \"meta.enum\",\n                    \"storage.type.enum\",\n                    \"meta.enum\",\n                    \"entity.name.enum\"\n                ],\n                regex: /\\b(redef)(\\s+)(enum)(\\s+)([A-Za-z_][A-Za-z_0-9]*(?:::[A-Za-z_][A-Za-z_0-9]*)*)\\b/\n            },\n            {\n                token: [\n                    \"storage.type\",\n                    \"text\",\n                    \"entity.name.function.event\"\n                ],\n                regex: /\\b(event)(\\s+)([A-Za-z_][A-Za-z_0-9]*(?:::[A-Za-z_][A-Za-z_0-9]*)*)(?=s*\\()/\n            },\n            {\n                token: [\n                    \"storage.type\",\n                    \"text\",\n                    \"entity.name.function.hook\"\n                ],\n                regex: /\\b(hook)(\\s+)([A-Za-z_][A-Za-z_0-9]*(?:::[A-Za-z_][A-Za-z_0-9]*)*)(?=s*\\()/\n            },\n            {\n                token: [\n                    \"storage.type\",\n                    \"text\",\n                    \"entity.name.function\"\n                ],\n                regex: /\\b(function)(\\s+)([A-Za-z_][A-Za-z_0-9]*(?:::[A-Za-z_][A-Za-z_0-9]*)*)(?=s*\\()/\n            },\n            {\n                token: \"keyword.other\",\n                regex: /\\bredef\\b/\n            },\n            {\n                token: \"storage.type\",\n                regex: /\\bany\\b/\n            },\n            {\n                token: \"storage.type\",\n                regex: /\\b(?:enum|record|set|table|vector)\\b/\n            },\n            {\n                token: [\n                    \"storage.type\",\n                    \"text\",\n                    \"keyword.operator\",\n                    \"text\",\n                    \"storage.type\"\n                ],\n                regex: /\\b(opaque)(\\s+)(of)(\\s+)([A-Za-z_][A-Za-z_0-9]*(?:::[A-Za-z_][A-Za-z_0-9]*)*)\\b/\n            },\n            {\n                token: \"keyword.operator\",\n                regex: /\\bof\\b/\n            },\n            {\n                token: \"storage.type\",\n                regex: /\\b(?:addr|bool|count|double|file|int|interval|pattern|port|string|subnet|time)\\b/\n            },\n            {\n                token: \"storage.type\",\n                regex: /\\b(?:function|hook|event)\\b/\n            },\n            {\n                token: \"storage.modifier\",\n                regex: /\\b(?:global|local|const|option)\\b/\n            },\n            {\n                token: \"entity.name.function.call\",\n                regex: /\\b[A-Za-z_][A-Za-z_0-9]*(?:::[A-Za-z_][A-Za-z_0-9]*)*(?=s*\\()/\n            },\n            {\n                token: \"punctuation.section.block.begin\",\n                regex: /\\{/\n            },\n            {\n                token: \"punctuation.section.block.end\",\n                regex: /\\}/\n            },\n            {\n                token: \"punctuation.section.brackets.begin\",\n                regex: /\\[/\n            },\n            {\n                token: \"punctuation.section.brackets.end\",\n                regex: /\\]/\n            },\n            {\n                token: \"punctuation.section.parens.begin\",\n                regex: /\\(/\n            },\n            {\n                token: \"punctuation.section.parens.end\",\n                regex: /\\)/\n            }\n        ],\n        \"string-state\": [\n            {\n                token: \"constant.character.escape\",\n                regex: /\\\\./\n            },\n            {\n                token: \"string.double\",\n                regex: /\"/,\n                next: \"start\"\n            },\n            {\n                token: \"constant.other.placeholder\",\n                regex: /%-?[0-9]*(\\.[0-9]+)?[DTdxsefg]/\n            },\n            {\n                token: \"string.double\",\n                regex: \".\"\n            }\n        ],\n        \"pattern-state\": [\n            {\n                token: \"constant.character.escape\",\n                regex: /\\\\./\n            },\n            {\n                token: \"string.regexp\",\n                regex: \"/\",\n                next: \"start\"\n            },\n            {\n                token: \"string.regexp\",\n                regex: \".\"\n            }\n        ] // state: pattern-state\n    };\n    this.normalizeRules();\n};\nZeekHighlightRules.metaData = {\n    fileTypes: [\"bro\", \"zeek\"],\n    name: \"Zeek\",\n    scopeName: \"source.zeek\"\n};\noop.inherits(ZeekHighlightRules, TextHighlightRules);\nexports.ZeekHighlightRules = ZeekHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n        this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n    this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function (session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n        return fw;\n    };\n    this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                }\n                else if (foldStyle != \"all\")\n                    range = null;\n            }\n            return range;\n        }\n        if (foldStyle === \"markbegin\")\n            return;\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    this.getSectionRange = function (session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                }\n                else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                }\n                else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function (session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m)\n                continue;\n            if (m[1])\n                depth--;\n            else\n                depth++;\n            if (!depth)\n                break;\n        }\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/zeek\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/zeek_highlight_rules\",\"ace/mode/folding/cstyle\"], function(require, exports, module){/*\n  THIS FILE WAS AUTOGENERATED BY mode.tmpl.js\n*/\n\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ZeekHighlightRules = require(\"./zeek_highlight_rules\").ZeekHighlightRules;\nvar FoldMode = require(\"./folding/cstyle\").FoldMode;\nvar Mode = function () {\n    this.HighlightRules = ZeekHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n(function () {\n    this.lineCommentStart = \"#\";\n    this.$id = \"ace/mode/zeek\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});                (function() {\n                    ace.require([\"ace/mode/zeek\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/abap.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/abap\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/abc.js",
    "content": "ace.define(\"ace/snippets/abc.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"\\nsnippet zupfnoter.print\\n\\t%%%%hn.print {\\\"startpos\\\": ${1:pos_y}, \\\"t\\\":\\\"${2:title}\\\", \\\"v\\\":[${3:voices}], \\\"s\\\":[[${4:syncvoices}1,2]], \\\"f\\\":[${5:flowlines}],  \\\"sf\\\":[${6:subflowlines}], \\\"j\\\":[${7:jumplines}]}\\n\\nsnippet zupfnoter.note\\n\\t%%%%hn.note {\\\"pos\\\": [${1:pos_x},${2:pos_y}], \\\"text\\\": \\\"${3:text}\\\", \\\"style\\\": \\\"${4:style}\\\"}\\n\\nsnippet zupfnoter.annotation\\n\\t%%%%hn.annotation {\\\"id\\\": \\\"${1:id}\\\", \\\"pos\\\": [${2:pos}], \\\"text\\\": \\\"${3:text}\\\"}\\n\\nsnippet zupfnoter.lyrics\\n\\t%%%%hn.lyrics {\\\"pos\\\": [${1:x_pos},${2:y_pos}]}\\n\\nsnippet zupfnoter.legend\\n\\t%%%%hn.legend {\\\"pos\\\": [${1:x_pos},${2:y_pos}]}\\n\\n\\n\\nsnippet zupfnoter.target\\n\\t\\\"^:${1:target}\\\"\\n\\nsnippet zupfnoter.goto\\n\\t\\\"^@${1:target}@${2:distance}\\\"\\n\\nsnippet zupfnoter.annotationref\\n\\t\\\"^#${1:target}\\\"\\n\\nsnippet zupfnoter.annotation\\n\\t\\\"^!${1:text}@${2:x_offset},${3:y_offset}\\\"\\n\\n\\n\";\n\n});\n\nace.define(\"ace/snippets/abc\",[\"require\",\"exports\",\"module\",\"ace/snippets/abc.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./abc.snippets\");\nexports.scope = \"abc\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/abc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/actionscript.js",
    "content": "ace.define(\"ace/snippets/actionscript.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet main\\n\\tpackage {\\n\\t\\timport flash.display.*;\\n\\t\\timport flash.Events.*;\\n\\t\\n\\t\\tpublic class Main extends Sprite {\\n\\t\\t\\tpublic function Main (\\t) {\\n\\t\\t\\t\\ttrace(\\\"start\\\");\\n\\t\\t\\t\\tstage.scaleMode = StageScaleMode.NO_SCALE;\\n\\t\\t\\t\\tstage.addEventListener(Event.RESIZE, resizeListener);\\n\\t\\t\\t}\\n\\t\\n\\t\\t\\tprivate function resizeListener (e:Event):void {\\n\\t\\t\\t\\ttrace(\\\"The application window changed size!\\\");\\n\\t\\t\\t\\ttrace(\\\"New width:  \\\" + stage.stageWidth);\\n\\t\\t\\t\\ttrace(\\\"New height: \\\" + stage.stageHeight);\\n\\t\\t\\t}\\n\\t\\n\\t\\t}\\n\\t\\n\\t}\\nsnippet class\\n\\t${1:public|internal} class ${2:name} ${3:extends } {\\n\\t\\tpublic function $2 (\\t) {\\n\\t\\t\\t(\\\"start\\\");\\n\\t\\t}\\n\\t}\\nsnippet all\\n\\tpackage name {\\n\\n\\t\\t${1:public|internal|final} class ${2:name} ${3:extends } {\\n\\t\\t\\tprivate|public| static const FOO = \\\"abc\\\";\\n\\t\\t\\tprivate|public| static var BAR = \\\"abc\\\";\\n\\n\\t\\t\\t// class initializer - no JIT !! one time setup\\n\\t\\t\\tif Cababilities.os == \\\"Linux|MacOS\\\" {\\n\\t\\t\\t\\tFOO = \\\"other\\\";\\n\\t\\t\\t}\\n\\n\\t\\t\\t// constructor:\\n\\t\\t\\tpublic function $2 (\\t){\\n\\t\\t\\t\\tsuper2();\\n\\t\\t\\t\\ttrace(\\\"start\\\");\\n\\t\\t\\t}\\n\\t\\t\\tpublic function name (a, b...){\\n\\t\\t\\t\\tsuper.name(..);\\n\\t\\t\\t\\tlable:break\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tfunction A(){\\n\\t\\t// A can only be accessed within this file\\n\\t}\\nsnippet switch\\n\\tswitch(${1}){\\n\\t\\tcase ${2}:\\n\\t\\t\\t${3}\\n\\t\\tbreak;\\n\\t\\tdefault:\\n\\t}\\nsnippet case\\n\\t\\tcase ${1}:\\n\\t\\t\\t${2}\\n\\t\\tbreak;\\nsnippet package\\n\\tpackage ${1:package}{\\n\\t\\t${2}\\n\\t}\\nsnippet wh\\n\\twhile ${1:cond}{\\n\\t\\t${2}\\n\\t}\\nsnippet do\\n\\tdo {\\n\\t\\t${2}\\n\\t} while (${1:cond})\\nsnippet while\\n\\twhile ${1:cond}{\\n\\t\\t${2}\\n\\t}\\nsnippet for enumerate names\\n\\tfor (${1:var} in ${2:object}){\\n\\t\\t${3}\\n\\t}\\nsnippet for enumerate values\\n\\tfor each (${1:var} in ${2:object}){\\n\\t\\t${3}\\n\\t}\\nsnippet get_set\\n\\tfunction get ${1:name} {\\n\\t\\treturn ${2}\\n\\t}\\n\\tfunction set $1 (newValue) {\\n\\t\\t${3}\\n\\t}\\nsnippet interface\\n\\tinterface name {\\n\\t\\tfunction method(${1}):${2:returntype};\\n\\t}\\nsnippet try\\n\\ttry {\\n\\t\\t${1}\\n\\t} catch (error:ErrorType) {\\n\\t\\t${2}\\n\\t} finally {\\n\\t\\t${3}\\n\\t}\\n# For Loop (same as c.snippet)\\nsnippet for for (..) {..}\\n\\tfor (${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\\n\\t\\t${4:/* code */}\\n\\t}\\n# Custom For Loop\\nsnippet forr\\n\\tfor (${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) {\\n\\t\\t${5:/* code */}\\n\\t}\\n# If Condition\\nsnippet if\\n\\tif (${1:/* condition */}) {\\n\\t\\t${2:/* code */}\\n\\t}\\nsnippet el\\n\\telse {\\n\\t\\t${1}\\n\\t}\\n# Ternary conditional\\nsnippet t\\n\\t${1:/* condition */} ? ${2:a} : ${3:b}\\nsnippet fun\\n\\tfunction ${1:function_name}(${2})${3}\\n\\t{\\n\\t\\t${4:/* code */}\\n\\t}\\n# FlxSprite (usefull when using the flixel library)\\nsnippet FlxSprite\\n\\tpackage\\n\\t{\\n\\t\\timport org.flixel.*\\n\\n\\t\\tpublic class ${1:ClassName} extends ${2:FlxSprite}\\n\\t\\t{\\n\\t\\t\\tpublic function $1(${3: X:Number, Y:Number}):void\\n\\t\\t\\t{\\n\\t\\t\\t\\tsuper(X,Y);\\n\\t\\t\\t\\t${4: //code...}\\n\\t\\t\\t}\\n\\n\\t\\t\\toverride public function update():void\\n\\t\\t\\t{\\n\\t\\t\\t\\tsuper.update();\\n\\t\\t\\t\\t${5: //code...}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\";\n\n});\n\nace.define(\"ace/snippets/actionscript\",[\"require\",\"exports\",\"module\",\"ace/snippets/actionscript.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./actionscript.snippets\");\nexports.scope = \"actionscript\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/actionscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/ada.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/ada\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/alda.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/alda\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/apache_conf.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/apache_conf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/apex.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/apex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/applescript.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/applescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/aql.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/aql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/asciidoc.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/asciidoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/asl.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/asl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/assembly_x86.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/assembly_x86\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/autohotkey.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/autohotkey\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/batchfile.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/batchfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/bibtex.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/bibtex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/c9search.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/c9search\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/c_cpp.js",
    "content": "ace.define(\"ace/snippets/c_cpp.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"## STL Collections\\n# std::array\\nsnippet array\\n\\tstd::array<${1:T}, ${2:N}> ${3};${4}\\n# std::vector\\nsnippet vector\\n\\tstd::vector<${1:T}> ${2};${3}\\n# std::deque\\nsnippet deque\\n\\tstd::deque<${1:T}> ${2};${3}\\n# std::forward_list\\nsnippet flist\\n\\tstd::forward_list<${1:T}> ${2};${3}\\n# std::list\\nsnippet list\\n\\tstd::list<${1:T}> ${2};${3}\\n# std::set\\nsnippet set\\n\\tstd::set<${1:T}> ${2};${3}\\n# std::map\\nsnippet map\\n\\tstd::map<${1:Key}, ${2:T}> ${3};${4}\\n# std::multiset\\nsnippet mset\\n\\tstd::multiset<${1:T}> ${2};${3}\\n# std::multimap\\nsnippet mmap\\n\\tstd::multimap<${1:Key}, ${2:T}> ${3};${4}\\n# std::unordered_set\\nsnippet uset\\n\\tstd::unordered_set<${1:T}> ${2};${3}\\n# std::unordered_map\\nsnippet umap\\n\\tstd::unordered_map<${1:Key}, ${2:T}> ${3};${4}\\n# std::unordered_multiset\\nsnippet umset\\n\\tstd::unordered_multiset<${1:T}> ${2};${3}\\n# std::unordered_multimap\\nsnippet ummap\\n\\tstd::unordered_multimap<${1:Key}, ${2:T}> ${3};${4}\\n# std::stack\\nsnippet stack\\n\\tstd::stack<${1:T}> ${2};${3}\\n# std::queue\\nsnippet queue\\n\\tstd::queue<${1:T}> ${2};${3}\\n# std::priority_queue\\nsnippet pqueue\\n\\tstd::priority_queue<${1:T}> ${2};${3}\\n##\\n## Access Modifiers\\n# private\\nsnippet pri\\n\\tprivate\\n# protected\\nsnippet pro\\n\\tprotected\\n# public\\nsnippet pub\\n\\tpublic\\n# friend\\nsnippet fr\\n\\tfriend\\n# mutable\\nsnippet mu\\n\\tmutable\\n## \\n## Class\\n# class\\nsnippet cl\\n\\tclass ${1:`Filename('$1', 'name')`} \\n\\t{\\n\\tpublic:\\n\\t\\t$1(${2});\\n\\t\\t~$1();\\n\\n\\tprivate:\\n\\t\\t${3:/* data */}\\n\\t};\\n# member function implementation\\nsnippet mfun\\n\\t${4:void} ${1:`Filename('$1', 'ClassName')`}::${2:memberFunction}(${3}) {\\n\\t\\t${5:/* code */}\\n\\t}\\n# namespace\\nsnippet ns\\n\\tnamespace ${1:`Filename('', 'my')`} {\\n\\t\\t${2}\\n\\t} /* namespace $1 */\\n##\\n## Input/Output\\n# std::cout\\nsnippet cout\\n\\tstd::cout << ${1} << std::endl;${2}\\n# std::cin\\nsnippet cin\\n\\tstd::cin >> ${1};${2}\\n##\\n## Iteration\\n# for i \\nsnippet fori\\n\\tfor (int ${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\\n\\t\\t${4:/* code */}\\n\\t}${5}\\n\\n# foreach\\nsnippet fore\\n\\tfor (${1:auto} ${2:i} : ${3:container}) {\\n\\t\\t${4:/* code */}\\n\\t}${5}\\n# iterator\\nsnippet iter\\n\\tfor (${1:std::vector}<${2:type}>::${3:const_iterator} ${4:i} = ${5:container}.begin(); $4 != $5.end(); ++$4) {\\n\\t\\t${6}\\n\\t}${7}\\n\\n# auto iterator\\nsnippet itera\\n\\tfor (auto ${1:i} = $1.begin(); $1 != $1.end(); ++$1) {\\n\\t\\t${2:std::cout << *$1 << std::endl;}\\n\\t}${3}\\n##\\n## Lambdas\\n# lamda (one line)\\nsnippet ld\\n\\t[${1}](${2}){${3:/* code */}}${4}\\n# lambda (multi-line)\\nsnippet lld\\n\\t[${1}](${2}){\\n\\t\\t${3:/* code */}\\n\\t}${4}\\n\";\n\n});\n\nace.define(\"ace/snippets/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/snippets/c_cpp.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./c_cpp.snippets\");\nexports.scope = \"c_cpp\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/c_cpp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/cirru.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/cirru\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/clojure.js",
    "content": "ace.define(\"ace/snippets/clojure.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet comm\\n\\t(comment\\n\\t  ${1}\\n\\t  )\\nsnippet condp\\n\\t(condp ${1:pred} ${2:expr}\\n\\t  ${3})\\nsnippet def\\n\\t(def ${1})\\nsnippet defm\\n\\t(defmethod ${1:multifn} \\\"${2:doc-string}\\\" ${3:dispatch-val} [${4:args}]\\n\\t  ${5})\\nsnippet defmm\\n\\t(defmulti ${1:name} \\\"${2:doc-string}\\\" ${3:dispatch-fn})\\nsnippet defma\\n\\t(defmacro ${1:name} \\\"${2:doc-string}\\\" ${3:dispatch-fn})\\nsnippet defn\\n\\t(defn ${1:name} \\\"${2:doc-string}\\\" [${3:arg-list}]\\n\\t  ${4})\\nsnippet defp\\n\\t(defprotocol ${1:name}\\n\\t  ${2})\\nsnippet defr\\n\\t(defrecord ${1:name} [${2:fields}]\\n\\t  ${3:protocol}\\n\\t  ${4})\\nsnippet deft\\n\\t(deftest ${1:name}\\n\\t    (is (= ${2:assertion})))\\n\\t  ${3})\\nsnippet is\\n\\t(is (= ${1} ${2}))\\nsnippet defty\\n\\t(deftype ${1:Name} [${2:fields}]\\n\\t  ${3:Protocol}\\n\\t  ${4})\\nsnippet doseq\\n\\t(doseq [${1:elem} ${2:coll}]\\n\\t  ${3})\\nsnippet fn\\n\\t(fn [${1:arg-list}] ${2})\\nsnippet if\\n\\t(if ${1:test-expr}\\n\\t  ${2:then-expr}\\n\\t  ${3:else-expr})\\nsnippet if-let \\n\\t(if-let [${1:result} ${2:test-expr}]\\n\\t\\t(${3:then-expr} $1)\\n\\t\\t(${4:else-expr}))\\nsnippet imp\\n\\t(:import [${1:package}])\\n\\t& {:keys [${1:keys}] :or {${2:defaults}}}\\nsnippet let\\n\\t(let [${1:name} ${2:expr}]\\n\\t\\t${3})\\nsnippet letfn\\n\\t(letfn [(${1:name) [${2:args}]\\n\\t          ${3})])\\nsnippet map\\n\\t(map ${1:func} ${2:coll})\\nsnippet mapl\\n\\t(map #(${1:lambda}) ${2:coll})\\nsnippet met\\n\\t(${1:name} [${2:this} ${3:args}]\\n\\t  ${4})\\nsnippet ns\\n\\t(ns ${1:name}\\n\\t  ${2})\\nsnippet dotimes\\n\\t(dotimes [_ 10]\\n\\t  (time\\n\\t    (dotimes [_ ${1:times}]\\n\\t      ${2})))\\nsnippet pmethod\\n\\t(${1:name} [${2:this} ${3:args}])\\nsnippet refer\\n\\t(:refer-clojure :exclude [${1}])\\nsnippet require\\n\\t(:require [${1:namespace} :as [${2}]])\\nsnippet use\\n\\t(:use [${1:namespace} :only [${2}]])\\nsnippet print\\n\\t(println ${1})\\nsnippet reduce\\n\\t(reduce ${1:(fn [p n] ${3})} ${2})\\nsnippet when\\n\\t(when ${1:test} ${2:body})\\nsnippet when-let\\n\\t(when-let [${1:result} ${2:test}]\\n\\t\\t${3:body})\\n\";\n\n});\n\nace.define(\"ace/snippets/clojure\",[\"require\",\"exports\",\"module\",\"ace/snippets/clojure.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./clojure.snippets\");\nexports.scope = \"clojure\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/clojure\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/cobol.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/cobol\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/coffee.js",
    "content": "ace.define(\"ace/snippets/coffee.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# Closure loop\\nsnippet forindo\\n\\tfor ${1:name} in ${2:array}\\n\\t\\tdo ($1) ->\\n\\t\\t\\t${3:// body}\\n# Array comprehension\\nsnippet fora\\n\\tfor ${1:name} in ${2:array}\\n\\t\\t${3:// body...}\\n# Object comprehension\\nsnippet foro\\n\\tfor ${1:key}, ${2:value} of ${3:object}\\n\\t\\t${4:// body...}\\n# Range comprehension (inclusive)\\nsnippet forr\\n\\tfor ${1:name} in [${2:start}..${3:finish}]\\n\\t\\t${4:// body...}\\nsnippet forrb\\n\\tfor ${1:name} in [${2:start}..${3:finish}] by ${4:step}\\n\\t\\t${5:// body...}\\n# Range comprehension (exclusive)\\nsnippet forrex\\n\\tfor ${1:name} in [${2:start}...${3:finish}]\\n\\t\\t${4:// body...}\\nsnippet forrexb\\n\\tfor ${1:name} in [${2:start}...${3:finish}] by ${4:step}\\n\\t\\t${5:// body...}\\n# Function\\nsnippet fun\\n\\t(${1:args}) ->\\n\\t\\t${2:// body...}\\n# Function (bound)\\nsnippet bfun\\n\\t(${1:args}) =>\\n\\t\\t${2:// body...}\\n# Class\\nsnippet cla class ..\\n\\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\t\\t${2}\\nsnippet cla class .. constructor: ..\\n\\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\t\\tconstructor: (${2:args}) ->\\n\\t\\t\\t${3}\\n\\n\\t\\t${4}\\nsnippet cla class .. extends ..\\n\\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} extends ${2:ParentClass}\\n\\t\\t${3}\\nsnippet cla class .. extends .. constructor: ..\\n\\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} extends ${2:ParentClass}\\n\\t\\tconstructor: (${3:args}) ->\\n\\t\\t\\t${4}\\n\\n\\t\\t${5}\\n# If\\nsnippet if\\n\\tif ${1:condition}\\n\\t\\t${2:// body...}\\n# If __ Else\\nsnippet ife\\n\\tif ${1:condition}\\n\\t\\t${2:// body...}\\n\\telse\\n\\t\\t${3:// body...}\\n# Else if\\nsnippet elif\\n\\telse if ${1:condition}\\n\\t\\t${2:// body...}\\n# Ternary If\\nsnippet ifte\\n\\tif ${1:condition} then ${2:value} else ${3:other}\\n# Unless\\nsnippet unl\\n\\t${1:action} unless ${2:condition}\\n# Switch\\nsnippet swi\\n\\tswitch ${1:object}\\n\\t\\twhen ${2:value}\\n\\t\\t\\t${3:// body...}\\n\\n# Log\\nsnippet log\\n\\tconsole.log ${1}\\n# Try __ Catch\\nsnippet try\\n\\ttry\\n\\t\\t${1}\\n\\tcatch ${2:error}\\n\\t\\t${3}\\n# Require\\nsnippet req\\n\\t${2:$1} = require '${1:sys}'${3}\\n# Export\\nsnippet exp\\n\\t${1:root} = exports ? this\\n\";\n\n});\n\nace.define(\"ace/snippets/coffee\",[\"require\",\"exports\",\"module\",\"ace/snippets/coffee.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./coffee.snippets\");\nexports.scope = \"coffee\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/coffee\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/coldfusion.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/coldfusion\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/crystal.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/crystal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/csharp.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/csharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/csound_document.js",
    "content": "ace.define(\"ace/snippets/csound_document.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# <CsoundSynthesizer>\\nsnippet synth\\n\\t<CsoundSynthesizer>\\n\\t<CsInstruments>\\n\\t${1}\\n\\t</CsInstruments>\\n\\t<CsScore>\\n\\te\\n\\t</CsScore>\\n\\t</CsoundSynthesizer>\\n\";\n\n});\n\nace.define(\"ace/snippets/csound_document\",[\"require\",\"exports\",\"module\",\"ace/snippets/csound_document.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./csound_document.snippets\");\nexports.scope = \"csound_document\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/csound_document\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/csound_orchestra.js",
    "content": "ace.define(\"ace/snippets/csound_orchestra.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# else\\nsnippet else\\n\\telse\\n\\t\\t${1:/* statements */}\\n# elseif\\nsnippet elseif\\n\\telseif ${1:/* condition */} then\\n\\t\\t${2:/* statements */}\\n# if\\nsnippet if\\n\\tif ${1:/* condition */} then\\n\\t\\t${2:/* statements */}\\n\\tendif\\n# instrument block\\nsnippet instr\\n\\tinstr ${1:name}\\n\\t\\t${2:/* statements */}\\n\\tendin\\n# i-time while loop\\nsnippet iwhile\\n\\ti${1:Index} = ${2:0}\\n\\twhile i${1:Index} < ${3:/* count */} do\\n\\t\\t${4:/* statements */}\\n\\t\\ti${1:Index} += 1\\n\\tod\\n# k-rate while loop\\nsnippet kwhile\\n\\tk${1:Index} = ${2:0}\\n\\twhile k${1:Index} < ${3:/* count */} do\\n\\t\\t${4:/* statements */}\\n\\t\\tk${1:Index} += 1\\n\\tod\\n# opcode\\nsnippet opcode\\n\\topcode ${1:name}, ${2:/* output types */ 0}, ${3:/* input types */ 0}\\n\\t\\t${4:/* statements */}\\n\\tendop\\n# until loop\\nsnippet until\\n\\tuntil ${1:/* condition */} do\\n\\t\\t${2:/* statements */}\\n\\tod\\n# while loop\\nsnippet while\\n\\twhile ${1:/* condition */} do\\n\\t\\t${2:/* statements */}\\n\\tod\\n\";\n\n});\n\nace.define(\"ace/snippets/csound_orchestra\",[\"require\",\"exports\",\"module\",\"ace/snippets/csound_orchestra.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./csound_orchestra.snippets\");\nexports.scope = \"csound_orchestra\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/csound_orchestra\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/csound_score.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/csound_score\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/csp.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/csp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/css.js",
    "content": "ace.define(\"ace/snippets/css.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet .\\n\\t${1} {\\n\\t\\t${2}\\n\\t}\\nsnippet !\\n\\t !important\\nsnippet bdi:m+\\n\\t-moz-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\nsnippet bdi:m\\n\\t-moz-border-image: ${1};\\nsnippet bdrz:m\\n\\t-moz-border-radius: ${1};\\nsnippet bxsh:m+\\n\\t-moz-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet bxsh:m\\n\\t-moz-box-shadow: ${1};\\nsnippet bdi:w+\\n\\t-webkit-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\nsnippet bdi:w\\n\\t-webkit-border-image: ${1};\\nsnippet bdrz:w\\n\\t-webkit-border-radius: ${1};\\nsnippet bxsh:w+\\n\\t-webkit-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet bxsh:w\\n\\t-webkit-box-shadow: ${1};\\nsnippet @f\\n\\t@font-face {\\n\\t\\tfont-family: ${1};\\n\\t\\tsrc: url(${2});\\n\\t}\\nsnippet @i\\n\\t@import url(${1});\\nsnippet @m\\n\\t@media ${1:print} {\\n\\t\\t${2}\\n\\t}\\nsnippet bg+\\n\\tbackground: #${1:FFF} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\\nsnippet bga\\n\\tbackground-attachment: ${1};\\nsnippet bga:f\\n\\tbackground-attachment: fixed;\\nsnippet bga:s\\n\\tbackground-attachment: scroll;\\nsnippet bgbk\\n\\tbackground-break: ${1};\\nsnippet bgbk:bb\\n\\tbackground-break: bounding-box;\\nsnippet bgbk:c\\n\\tbackground-break: continuous;\\nsnippet bgbk:eb\\n\\tbackground-break: each-box;\\nsnippet bgcp\\n\\tbackground-clip: ${1};\\nsnippet bgcp:bb\\n\\tbackground-clip: border-box;\\nsnippet bgcp:cb\\n\\tbackground-clip: content-box;\\nsnippet bgcp:nc\\n\\tbackground-clip: no-clip;\\nsnippet bgcp:pb\\n\\tbackground-clip: padding-box;\\nsnippet bgc\\n\\tbackground-color: #${1:FFF};\\nsnippet bgc:t\\n\\tbackground-color: transparent;\\nsnippet bgi\\n\\tbackground-image: url(${1});\\nsnippet bgi:n\\n\\tbackground-image: none;\\nsnippet bgo\\n\\tbackground-origin: ${1};\\nsnippet bgo:bb\\n\\tbackground-origin: border-box;\\nsnippet bgo:cb\\n\\tbackground-origin: content-box;\\nsnippet bgo:pb\\n\\tbackground-origin: padding-box;\\nsnippet bgpx\\n\\tbackground-position-x: ${1};\\nsnippet bgpy\\n\\tbackground-position-y: ${1};\\nsnippet bgp\\n\\tbackground-position: ${1:0} ${2:0};\\nsnippet bgr\\n\\tbackground-repeat: ${1};\\nsnippet bgr:n\\n\\tbackground-repeat: no-repeat;\\nsnippet bgr:x\\n\\tbackground-repeat: repeat-x;\\nsnippet bgr:y\\n\\tbackground-repeat: repeat-y;\\nsnippet bgr:r\\n\\tbackground-repeat: repeat;\\nsnippet bgz\\n\\tbackground-size: ${1};\\nsnippet bgz:a\\n\\tbackground-size: auto;\\nsnippet bgz:ct\\n\\tbackground-size: contain;\\nsnippet bgz:cv\\n\\tbackground-size: cover;\\nsnippet bg\\n\\tbackground: ${1};\\nsnippet bg:ie\\n\\tfilter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1}',sizingMethod='${2:crop}');\\nsnippet bg:n\\n\\tbackground: none;\\nsnippet bd+\\n\\tborder: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdb+\\n\\tborder-bottom: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdbc\\n\\tborder-bottom-color: #${1:000};\\nsnippet bdbi\\n\\tborder-bottom-image: url(${1});\\nsnippet bdbi:n\\n\\tborder-bottom-image: none;\\nsnippet bdbli\\n\\tborder-bottom-left-image: url(${1});\\nsnippet bdbli:c\\n\\tborder-bottom-left-image: continue;\\nsnippet bdbli:n\\n\\tborder-bottom-left-image: none;\\nsnippet bdblrz\\n\\tborder-bottom-left-radius: ${1};\\nsnippet bdbri\\n\\tborder-bottom-right-image: url(${1});\\nsnippet bdbri:c\\n\\tborder-bottom-right-image: continue;\\nsnippet bdbri:n\\n\\tborder-bottom-right-image: none;\\nsnippet bdbrrz\\n\\tborder-bottom-right-radius: ${1};\\nsnippet bdbs\\n\\tborder-bottom-style: ${1};\\nsnippet bdbs:n\\n\\tborder-bottom-style: none;\\nsnippet bdbw\\n\\tborder-bottom-width: ${1};\\nsnippet bdb\\n\\tborder-bottom: ${1};\\nsnippet bdb:n\\n\\tborder-bottom: none;\\nsnippet bdbk\\n\\tborder-break: ${1};\\nsnippet bdbk:c\\n\\tborder-break: close;\\nsnippet bdcl\\n\\tborder-collapse: ${1};\\nsnippet bdcl:c\\n\\tborder-collapse: collapse;\\nsnippet bdcl:s\\n\\tborder-collapse: separate;\\nsnippet bdc\\n\\tborder-color: #${1:000};\\nsnippet bdci\\n\\tborder-corner-image: url(${1});\\nsnippet bdci:c\\n\\tborder-corner-image: continue;\\nsnippet bdci:n\\n\\tborder-corner-image: none;\\nsnippet bdf\\n\\tborder-fit: ${1};\\nsnippet bdf:c\\n\\tborder-fit: clip;\\nsnippet bdf:of\\n\\tborder-fit: overwrite;\\nsnippet bdf:ow\\n\\tborder-fit: overwrite;\\nsnippet bdf:r\\n\\tborder-fit: repeat;\\nsnippet bdf:sc\\n\\tborder-fit: scale;\\nsnippet bdf:sp\\n\\tborder-fit: space;\\nsnippet bdf:st\\n\\tborder-fit: stretch;\\nsnippet bdi\\n\\tborder-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\nsnippet bdi:n\\n\\tborder-image: none;\\nsnippet bdl+\\n\\tborder-left: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdlc\\n\\tborder-left-color: #${1:000};\\nsnippet bdli\\n\\tborder-left-image: url(${1});\\nsnippet bdli:n\\n\\tborder-left-image: none;\\nsnippet bdls\\n\\tborder-left-style: ${1};\\nsnippet bdls:n\\n\\tborder-left-style: none;\\nsnippet bdlw\\n\\tborder-left-width: ${1};\\nsnippet bdl\\n\\tborder-left: ${1};\\nsnippet bdl:n\\n\\tborder-left: none;\\nsnippet bdlt\\n\\tborder-length: ${1};\\nsnippet bdlt:a\\n\\tborder-length: auto;\\nsnippet bdrz\\n\\tborder-radius: ${1};\\nsnippet bdr+\\n\\tborder-right: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdrc\\n\\tborder-right-color: #${1:000};\\nsnippet bdri\\n\\tborder-right-image: url(${1});\\nsnippet bdri:n\\n\\tborder-right-image: none;\\nsnippet bdrs\\n\\tborder-right-style: ${1};\\nsnippet bdrs:n\\n\\tborder-right-style: none;\\nsnippet bdrw\\n\\tborder-right-width: ${1};\\nsnippet bdr\\n\\tborder-right: ${1};\\nsnippet bdr:n\\n\\tborder-right: none;\\nsnippet bdsp\\n\\tborder-spacing: ${1};\\nsnippet bds\\n\\tborder-style: ${1};\\nsnippet bds:ds\\n\\tborder-style: dashed;\\nsnippet bds:dtds\\n\\tborder-style: dot-dash;\\nsnippet bds:dtdtds\\n\\tborder-style: dot-dot-dash;\\nsnippet bds:dt\\n\\tborder-style: dotted;\\nsnippet bds:db\\n\\tborder-style: double;\\nsnippet bds:g\\n\\tborder-style: groove;\\nsnippet bds:h\\n\\tborder-style: hidden;\\nsnippet bds:i\\n\\tborder-style: inset;\\nsnippet bds:n\\n\\tborder-style: none;\\nsnippet bds:o\\n\\tborder-style: outset;\\nsnippet bds:r\\n\\tborder-style: ridge;\\nsnippet bds:s\\n\\tborder-style: solid;\\nsnippet bds:w\\n\\tborder-style: wave;\\nsnippet bdt+\\n\\tborder-top: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdtc\\n\\tborder-top-color: #${1:000};\\nsnippet bdti\\n\\tborder-top-image: url(${1});\\nsnippet bdti:n\\n\\tborder-top-image: none;\\nsnippet bdtli\\n\\tborder-top-left-image: url(${1});\\nsnippet bdtli:c\\n\\tborder-corner-image: continue;\\nsnippet bdtli:n\\n\\tborder-corner-image: none;\\nsnippet bdtlrz\\n\\tborder-top-left-radius: ${1};\\nsnippet bdtri\\n\\tborder-top-right-image: url(${1});\\nsnippet bdtri:c\\n\\tborder-top-right-image: continue;\\nsnippet bdtri:n\\n\\tborder-top-right-image: none;\\nsnippet bdtrrz\\n\\tborder-top-right-radius: ${1};\\nsnippet bdts\\n\\tborder-top-style: ${1};\\nsnippet bdts:n\\n\\tborder-top-style: none;\\nsnippet bdtw\\n\\tborder-top-width: ${1};\\nsnippet bdt\\n\\tborder-top: ${1};\\nsnippet bdt:n\\n\\tborder-top: none;\\nsnippet bdw\\n\\tborder-width: ${1};\\nsnippet bd\\n\\tborder: ${1};\\nsnippet bd:n\\n\\tborder: none;\\nsnippet b\\n\\tbottom: ${1};\\nsnippet b:a\\n\\tbottom: auto;\\nsnippet bxsh+\\n\\tbox-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet bxsh\\n\\tbox-shadow: ${1};\\nsnippet bxsh:n\\n\\tbox-shadow: none;\\nsnippet bxz\\n\\tbox-sizing: ${1};\\nsnippet bxz:bb\\n\\tbox-sizing: border-box;\\nsnippet bxz:cb\\n\\tbox-sizing: content-box;\\nsnippet cps\\n\\tcaption-side: ${1};\\nsnippet cps:b\\n\\tcaption-side: bottom;\\nsnippet cps:t\\n\\tcaption-side: top;\\nsnippet cl\\n\\tclear: ${1};\\nsnippet cl:b\\n\\tclear: both;\\nsnippet cl:l\\n\\tclear: left;\\nsnippet cl:n\\n\\tclear: none;\\nsnippet cl:r\\n\\tclear: right;\\nsnippet cp\\n\\tclip: ${1};\\nsnippet cp:a\\n\\tclip: auto;\\nsnippet cp:r\\n\\tclip: rect(${1:0} ${2:0} ${3:0} ${4:0});\\nsnippet c\\n\\tcolor: #${1:000};\\nsnippet ct\\n\\tcontent: ${1};\\nsnippet ct:a\\n\\tcontent: attr(${1});\\nsnippet ct:cq\\n\\tcontent: close-quote;\\nsnippet ct:c\\n\\tcontent: counter(${1});\\nsnippet ct:cs\\n\\tcontent: counters(${1});\\nsnippet ct:ncq\\n\\tcontent: no-close-quote;\\nsnippet ct:noq\\n\\tcontent: no-open-quote;\\nsnippet ct:n\\n\\tcontent: normal;\\nsnippet ct:oq\\n\\tcontent: open-quote;\\nsnippet coi\\n\\tcounter-increment: ${1};\\nsnippet cor\\n\\tcounter-reset: ${1};\\nsnippet cur\\n\\tcursor: ${1};\\nsnippet cur:a\\n\\tcursor: auto;\\nsnippet cur:c\\n\\tcursor: crosshair;\\nsnippet cur:d\\n\\tcursor: default;\\nsnippet cur:ha\\n\\tcursor: hand;\\nsnippet cur:he\\n\\tcursor: help;\\nsnippet cur:m\\n\\tcursor: move;\\nsnippet cur:p\\n\\tcursor: pointer;\\nsnippet cur:t\\n\\tcursor: text;\\nsnippet d\\n\\tdisplay: ${1};\\nsnippet d:mib\\n\\tdisplay: -moz-inline-box;\\nsnippet d:mis\\n\\tdisplay: -moz-inline-stack;\\nsnippet d:b\\n\\tdisplay: block;\\nsnippet d:cp\\n\\tdisplay: compact;\\nsnippet d:ib\\n\\tdisplay: inline-block;\\nsnippet d:itb\\n\\tdisplay: inline-table;\\nsnippet d:i\\n\\tdisplay: inline;\\nsnippet d:li\\n\\tdisplay: list-item;\\nsnippet d:n\\n\\tdisplay: none;\\nsnippet d:ri\\n\\tdisplay: run-in;\\nsnippet d:tbcp\\n\\tdisplay: table-caption;\\nsnippet d:tbc\\n\\tdisplay: table-cell;\\nsnippet d:tbclg\\n\\tdisplay: table-column-group;\\nsnippet d:tbcl\\n\\tdisplay: table-column;\\nsnippet d:tbfg\\n\\tdisplay: table-footer-group;\\nsnippet d:tbhg\\n\\tdisplay: table-header-group;\\nsnippet d:tbrg\\n\\tdisplay: table-row-group;\\nsnippet d:tbr\\n\\tdisplay: table-row;\\nsnippet d:tb\\n\\tdisplay: table;\\nsnippet ec\\n\\tempty-cells: ${1};\\nsnippet ec:h\\n\\tempty-cells: hide;\\nsnippet ec:s\\n\\tempty-cells: show;\\nsnippet exp\\n\\texpression()\\nsnippet fl\\n\\tfloat: ${1};\\nsnippet fl:l\\n\\tfloat: left;\\nsnippet fl:n\\n\\tfloat: none;\\nsnippet fl:r\\n\\tfloat: right;\\nsnippet f+\\n\\tfont: ${1:1em} ${2:Arial},${3:sans-serif};\\nsnippet fef\\n\\tfont-effect: ${1};\\nsnippet fef:eb\\n\\tfont-effect: emboss;\\nsnippet fef:eg\\n\\tfont-effect: engrave;\\nsnippet fef:n\\n\\tfont-effect: none;\\nsnippet fef:o\\n\\tfont-effect: outline;\\nsnippet femp\\n\\tfont-emphasize-position: ${1};\\nsnippet femp:a\\n\\tfont-emphasize-position: after;\\nsnippet femp:b\\n\\tfont-emphasize-position: before;\\nsnippet fems\\n\\tfont-emphasize-style: ${1};\\nsnippet fems:ac\\n\\tfont-emphasize-style: accent;\\nsnippet fems:c\\n\\tfont-emphasize-style: circle;\\nsnippet fems:ds\\n\\tfont-emphasize-style: disc;\\nsnippet fems:dt\\n\\tfont-emphasize-style: dot;\\nsnippet fems:n\\n\\tfont-emphasize-style: none;\\nsnippet fem\\n\\tfont-emphasize: ${1};\\nsnippet ff\\n\\tfont-family: ${1};\\nsnippet ff:c\\n\\tfont-family: ${1:'Monotype Corsiva','Comic Sans MS'},cursive;\\nsnippet ff:f\\n\\tfont-family: ${1:Capitals,Impact},fantasy;\\nsnippet ff:m\\n\\tfont-family: ${1:Monaco,'Courier New'},monospace;\\nsnippet ff:ss\\n\\tfont-family: ${1:Helvetica,Arial},sans-serif;\\nsnippet ff:s\\n\\tfont-family: ${1:Georgia,'Times New Roman'},serif;\\nsnippet fza\\n\\tfont-size-adjust: ${1};\\nsnippet fza:n\\n\\tfont-size-adjust: none;\\nsnippet fz\\n\\tfont-size: ${1};\\nsnippet fsm\\n\\tfont-smooth: ${1};\\nsnippet fsm:aw\\n\\tfont-smooth: always;\\nsnippet fsm:a\\n\\tfont-smooth: auto;\\nsnippet fsm:n\\n\\tfont-smooth: never;\\nsnippet fst\\n\\tfont-stretch: ${1};\\nsnippet fst:c\\n\\tfont-stretch: condensed;\\nsnippet fst:e\\n\\tfont-stretch: expanded;\\nsnippet fst:ec\\n\\tfont-stretch: extra-condensed;\\nsnippet fst:ee\\n\\tfont-stretch: extra-expanded;\\nsnippet fst:n\\n\\tfont-stretch: normal;\\nsnippet fst:sc\\n\\tfont-stretch: semi-condensed;\\nsnippet fst:se\\n\\tfont-stretch: semi-expanded;\\nsnippet fst:uc\\n\\tfont-stretch: ultra-condensed;\\nsnippet fst:ue\\n\\tfont-stretch: ultra-expanded;\\nsnippet fs\\n\\tfont-style: ${1};\\nsnippet fs:i\\n\\tfont-style: italic;\\nsnippet fs:n\\n\\tfont-style: normal;\\nsnippet fs:o\\n\\tfont-style: oblique;\\nsnippet fv\\n\\tfont-variant: ${1};\\nsnippet fv:n\\n\\tfont-variant: normal;\\nsnippet fv:sc\\n\\tfont-variant: small-caps;\\nsnippet fw\\n\\tfont-weight: ${1};\\nsnippet fw:b\\n\\tfont-weight: bold;\\nsnippet fw:br\\n\\tfont-weight: bolder;\\nsnippet fw:lr\\n\\tfont-weight: lighter;\\nsnippet fw:n\\n\\tfont-weight: normal;\\nsnippet f\\n\\tfont: ${1};\\nsnippet h\\n\\theight: ${1};\\nsnippet h:a\\n\\theight: auto;\\nsnippet l\\n\\tleft: ${1};\\nsnippet l:a\\n\\tleft: auto;\\nsnippet lts\\n\\tletter-spacing: ${1};\\nsnippet lh\\n\\tline-height: ${1};\\nsnippet lisi\\n\\tlist-style-image: url(${1});\\nsnippet lisi:n\\n\\tlist-style-image: none;\\nsnippet lisp\\n\\tlist-style-position: ${1};\\nsnippet lisp:i\\n\\tlist-style-position: inside;\\nsnippet lisp:o\\n\\tlist-style-position: outside;\\nsnippet list\\n\\tlist-style-type: ${1};\\nsnippet list:c\\n\\tlist-style-type: circle;\\nsnippet list:dclz\\n\\tlist-style-type: decimal-leading-zero;\\nsnippet list:dc\\n\\tlist-style-type: decimal;\\nsnippet list:d\\n\\tlist-style-type: disc;\\nsnippet list:lr\\n\\tlist-style-type: lower-roman;\\nsnippet list:n\\n\\tlist-style-type: none;\\nsnippet list:s\\n\\tlist-style-type: square;\\nsnippet list:ur\\n\\tlist-style-type: upper-roman;\\nsnippet lis\\n\\tlist-style: ${1};\\nsnippet lis:n\\n\\tlist-style: none;\\nsnippet mb\\n\\tmargin-bottom: ${1};\\nsnippet mb:a\\n\\tmargin-bottom: auto;\\nsnippet ml\\n\\tmargin-left: ${1};\\nsnippet ml:a\\n\\tmargin-left: auto;\\nsnippet mr\\n\\tmargin-right: ${1};\\nsnippet mr:a\\n\\tmargin-right: auto;\\nsnippet mt\\n\\tmargin-top: ${1};\\nsnippet mt:a\\n\\tmargin-top: auto;\\nsnippet m\\n\\tmargin: ${1};\\nsnippet m:4\\n\\tmargin: ${1:0} ${2:0} ${3:0} ${4:0};\\nsnippet m:3\\n\\tmargin: ${1:0} ${2:0} ${3:0};\\nsnippet m:2\\n\\tmargin: ${1:0} ${2:0};\\nsnippet m:0\\n\\tmargin: 0;\\nsnippet m:a\\n\\tmargin: auto;\\nsnippet mah\\n\\tmax-height: ${1};\\nsnippet mah:n\\n\\tmax-height: none;\\nsnippet maw\\n\\tmax-width: ${1};\\nsnippet maw:n\\n\\tmax-width: none;\\nsnippet mih\\n\\tmin-height: ${1};\\nsnippet miw\\n\\tmin-width: ${1};\\nsnippet op\\n\\topacity: ${1};\\nsnippet op:ie\\n\\tfilter: progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100});\\nsnippet op:ms\\n\\t-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100})';\\nsnippet orp\\n\\torphans: ${1};\\nsnippet o+\\n\\toutline: ${1:1px} ${2:solid} #${3:000};\\nsnippet oc\\n\\toutline-color: ${1:#000};\\nsnippet oc:i\\n\\toutline-color: invert;\\nsnippet oo\\n\\toutline-offset: ${1};\\nsnippet os\\n\\toutline-style: ${1};\\nsnippet ow\\n\\toutline-width: ${1};\\nsnippet o\\n\\toutline: ${1};\\nsnippet o:n\\n\\toutline: none;\\nsnippet ovs\\n\\toverflow-style: ${1};\\nsnippet ovs:a\\n\\toverflow-style: auto;\\nsnippet ovs:mq\\n\\toverflow-style: marquee;\\nsnippet ovs:mv\\n\\toverflow-style: move;\\nsnippet ovs:p\\n\\toverflow-style: panner;\\nsnippet ovs:s\\n\\toverflow-style: scrollbar;\\nsnippet ovx\\n\\toverflow-x: ${1};\\nsnippet ovx:a\\n\\toverflow-x: auto;\\nsnippet ovx:h\\n\\toverflow-x: hidden;\\nsnippet ovx:s\\n\\toverflow-x: scroll;\\nsnippet ovx:v\\n\\toverflow-x: visible;\\nsnippet ovy\\n\\toverflow-y: ${1};\\nsnippet ovy:a\\n\\toverflow-y: auto;\\nsnippet ovy:h\\n\\toverflow-y: hidden;\\nsnippet ovy:s\\n\\toverflow-y: scroll;\\nsnippet ovy:v\\n\\toverflow-y: visible;\\nsnippet ov\\n\\toverflow: ${1};\\nsnippet ov:a\\n\\toverflow: auto;\\nsnippet ov:h\\n\\toverflow: hidden;\\nsnippet ov:s\\n\\toverflow: scroll;\\nsnippet ov:v\\n\\toverflow: visible;\\nsnippet pb\\n\\tpadding-bottom: ${1};\\nsnippet pl\\n\\tpadding-left: ${1};\\nsnippet pr\\n\\tpadding-right: ${1};\\nsnippet pt\\n\\tpadding-top: ${1};\\nsnippet p\\n\\tpadding: ${1};\\nsnippet p:4\\n\\tpadding: ${1:0} ${2:0} ${3:0} ${4:0};\\nsnippet p:3\\n\\tpadding: ${1:0} ${2:0} ${3:0};\\nsnippet p:2\\n\\tpadding: ${1:0} ${2:0};\\nsnippet p:0\\n\\tpadding: 0;\\nsnippet pgba\\n\\tpage-break-after: ${1};\\nsnippet pgba:aw\\n\\tpage-break-after: always;\\nsnippet pgba:a\\n\\tpage-break-after: auto;\\nsnippet pgba:l\\n\\tpage-break-after: left;\\nsnippet pgba:r\\n\\tpage-break-after: right;\\nsnippet pgbb\\n\\tpage-break-before: ${1};\\nsnippet pgbb:aw\\n\\tpage-break-before: always;\\nsnippet pgbb:a\\n\\tpage-break-before: auto;\\nsnippet pgbb:l\\n\\tpage-break-before: left;\\nsnippet pgbb:r\\n\\tpage-break-before: right;\\nsnippet pgbi\\n\\tpage-break-inside: ${1};\\nsnippet pgbi:a\\n\\tpage-break-inside: auto;\\nsnippet pgbi:av\\n\\tpage-break-inside: avoid;\\nsnippet pos\\n\\tposition: ${1};\\nsnippet pos:a\\n\\tposition: absolute;\\nsnippet pos:f\\n\\tposition: fixed;\\nsnippet pos:r\\n\\tposition: relative;\\nsnippet pos:s\\n\\tposition: static;\\nsnippet q\\n\\tquotes: ${1};\\nsnippet q:en\\n\\tquotes: '\\\\201C' '\\\\201D' '\\\\2018' '\\\\2019';\\nsnippet q:n\\n\\tquotes: none;\\nsnippet q:ru\\n\\tquotes: '\\\\00AB' '\\\\00BB' '\\\\201E' '\\\\201C';\\nsnippet rz\\n\\tresize: ${1};\\nsnippet rz:b\\n\\tresize: both;\\nsnippet rz:h\\n\\tresize: horizontal;\\nsnippet rz:n\\n\\tresize: none;\\nsnippet rz:v\\n\\tresize: vertical;\\nsnippet r\\n\\tright: ${1};\\nsnippet r:a\\n\\tright: auto;\\nsnippet tbl\\n\\ttable-layout: ${1};\\nsnippet tbl:a\\n\\ttable-layout: auto;\\nsnippet tbl:f\\n\\ttable-layout: fixed;\\nsnippet tal\\n\\ttext-align-last: ${1};\\nsnippet tal:a\\n\\ttext-align-last: auto;\\nsnippet tal:c\\n\\ttext-align-last: center;\\nsnippet tal:l\\n\\ttext-align-last: left;\\nsnippet tal:r\\n\\ttext-align-last: right;\\nsnippet ta\\n\\ttext-align: ${1};\\nsnippet ta:c\\n\\ttext-align: center;\\nsnippet ta:l\\n\\ttext-align: left;\\nsnippet ta:r\\n\\ttext-align: right;\\nsnippet td\\n\\ttext-decoration: ${1};\\nsnippet td:l\\n\\ttext-decoration: line-through;\\nsnippet td:n\\n\\ttext-decoration: none;\\nsnippet td:o\\n\\ttext-decoration: overline;\\nsnippet td:u\\n\\ttext-decoration: underline;\\nsnippet te\\n\\ttext-emphasis: ${1};\\nsnippet te:ac\\n\\ttext-emphasis: accent;\\nsnippet te:a\\n\\ttext-emphasis: after;\\nsnippet te:b\\n\\ttext-emphasis: before;\\nsnippet te:c\\n\\ttext-emphasis: circle;\\nsnippet te:ds\\n\\ttext-emphasis: disc;\\nsnippet te:dt\\n\\ttext-emphasis: dot;\\nsnippet te:n\\n\\ttext-emphasis: none;\\nsnippet th\\n\\ttext-height: ${1};\\nsnippet th:a\\n\\ttext-height: auto;\\nsnippet th:f\\n\\ttext-height: font-size;\\nsnippet th:m\\n\\ttext-height: max-size;\\nsnippet th:t\\n\\ttext-height: text-size;\\nsnippet ti\\n\\ttext-indent: ${1};\\nsnippet ti:-\\n\\ttext-indent: -9999px;\\nsnippet tj\\n\\ttext-justify: ${1};\\nsnippet tj:a\\n\\ttext-justify: auto;\\nsnippet tj:d\\n\\ttext-justify: distribute;\\nsnippet tj:ic\\n\\ttext-justify: inter-cluster;\\nsnippet tj:ii\\n\\ttext-justify: inter-ideograph;\\nsnippet tj:iw\\n\\ttext-justify: inter-word;\\nsnippet tj:k\\n\\ttext-justify: kashida;\\nsnippet tj:t\\n\\ttext-justify: tibetan;\\nsnippet to+\\n\\ttext-outline: ${1:0} ${2:0} #${3:000};\\nsnippet to\\n\\ttext-outline: ${1};\\nsnippet to:n\\n\\ttext-outline: none;\\nsnippet tr\\n\\ttext-replace: ${1};\\nsnippet tr:n\\n\\ttext-replace: none;\\nsnippet tsh+\\n\\ttext-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet tsh\\n\\ttext-shadow: ${1};\\nsnippet tsh:n\\n\\ttext-shadow: none;\\nsnippet tt\\n\\ttext-transform: ${1};\\nsnippet tt:c\\n\\ttext-transform: capitalize;\\nsnippet tt:l\\n\\ttext-transform: lowercase;\\nsnippet tt:n\\n\\ttext-transform: none;\\nsnippet tt:u\\n\\ttext-transform: uppercase;\\nsnippet tw\\n\\ttext-wrap: ${1};\\nsnippet tw:no\\n\\ttext-wrap: none;\\nsnippet tw:n\\n\\ttext-wrap: normal;\\nsnippet tw:s\\n\\ttext-wrap: suppress;\\nsnippet tw:u\\n\\ttext-wrap: unrestricted;\\nsnippet t\\n\\ttop: ${1};\\nsnippet t:a\\n\\ttop: auto;\\nsnippet va\\n\\tvertical-align: ${1};\\nsnippet va:bl\\n\\tvertical-align: baseline;\\nsnippet va:b\\n\\tvertical-align: bottom;\\nsnippet va:m\\n\\tvertical-align: middle;\\nsnippet va:sub\\n\\tvertical-align: sub;\\nsnippet va:sup\\n\\tvertical-align: super;\\nsnippet va:tb\\n\\tvertical-align: text-bottom;\\nsnippet va:tt\\n\\tvertical-align: text-top;\\nsnippet va:t\\n\\tvertical-align: top;\\nsnippet v\\n\\tvisibility: ${1};\\nsnippet v:c\\n\\tvisibility: collapse;\\nsnippet v:h\\n\\tvisibility: hidden;\\nsnippet v:v\\n\\tvisibility: visible;\\nsnippet whsc\\n\\twhite-space-collapse: ${1};\\nsnippet whsc:ba\\n\\twhite-space-collapse: break-all;\\nsnippet whsc:bs\\n\\twhite-space-collapse: break-strict;\\nsnippet whsc:k\\n\\twhite-space-collapse: keep-all;\\nsnippet whsc:l\\n\\twhite-space-collapse: loose;\\nsnippet whsc:n\\n\\twhite-space-collapse: normal;\\nsnippet whs\\n\\twhite-space: ${1};\\nsnippet whs:n\\n\\twhite-space: normal;\\nsnippet whs:nw\\n\\twhite-space: nowrap;\\nsnippet whs:pl\\n\\twhite-space: pre-line;\\nsnippet whs:pw\\n\\twhite-space: pre-wrap;\\nsnippet whs:p\\n\\twhite-space: pre;\\nsnippet wid\\n\\twidows: ${1};\\nsnippet w\\n\\twidth: ${1};\\nsnippet w:a\\n\\twidth: auto;\\nsnippet wob\\n\\tword-break: ${1};\\nsnippet wob:ba\\n\\tword-break: break-all;\\nsnippet wob:bs\\n\\tword-break: break-strict;\\nsnippet wob:k\\n\\tword-break: keep-all;\\nsnippet wob:l\\n\\tword-break: loose;\\nsnippet wob:n\\n\\tword-break: normal;\\nsnippet wos\\n\\tword-spacing: ${1};\\nsnippet wow\\n\\tword-wrap: ${1};\\nsnippet wow:no\\n\\tword-wrap: none;\\nsnippet wow:n\\n\\tword-wrap: normal;\\nsnippet wow:s\\n\\tword-wrap: suppress;\\nsnippet wow:u\\n\\tword-wrap: unrestricted;\\nsnippet z\\n\\tz-index: ${1};\\nsnippet z:a\\n\\tz-index: auto;\\nsnippet zoo\\n\\tzoom: 1;\\n\";\n\n});\n\nace.define(\"ace/snippets/css\",[\"require\",\"exports\",\"module\",\"ace/snippets/css.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./css.snippets\");\nexports.scope = \"css\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/css\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/curly.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/curly\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/d.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/d\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/dart.js",
    "content": "ace.define(\"ace/snippets/dart.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet lib\\n\\tlibrary ${1};\\n\\t${2}\\nsnippet im\\n\\timport '${1}';\\n\\t${2}\\nsnippet pa\\n\\tpart '${1}';\\n\\t${2}\\nsnippet pao\\n\\tpart of ${1};\\n\\t${2}\\nsnippet main\\n\\tvoid main() {\\n\\t  ${1:/* code */}\\n\\t}\\nsnippet st\\n\\tstatic ${1}\\nsnippet fi\\n\\tfinal ${1}\\nsnippet re\\n\\treturn ${1}\\nsnippet br\\n\\tbreak;\\nsnippet th\\n\\tthrow ${1}\\nsnippet cl\\n\\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\nsnippet imp\\n\\timplements ${1}\\nsnippet ext\\n\\textends ${1}\\nsnippet if\\n\\tif (${1:true}) {\\n\\t  ${2}\\n\\t}\\nsnippet ife\\n\\tif (${1:true}) {\\n\\t  ${2}\\n\\t} else {\\n\\t  ${3}\\n\\t}\\nsnippet el\\n\\telse\\nsnippet sw\\n\\tswitch (${1}) {\\n\\t  ${2}\\n\\t}\\nsnippet cs\\n\\tcase ${1}:\\n\\t  ${2}\\nsnippet de\\n\\tdefault:\\n\\t  ${1}\\nsnippet for\\n\\tfor (var ${2:i} = 0, len = ${1:things}.length; $2 < len; ${3:++}$2) {\\n\\t  ${4:$1[$2]}\\n\\t}\\nsnippet fore\\n\\tfor (final ${2:item} in ${1:itemList}) {\\n\\t  ${3:/* code */}\\n\\t}\\nsnippet wh\\n\\twhile (${1:/* condition */}) {\\n\\t  ${2:/* code */}\\n\\t}\\nsnippet dowh\\n\\tdo {\\n\\t  ${2:/* code */}\\n\\t} while (${1:/* condition */});\\nsnippet as\\n\\tassert(${1:/* condition */});\\nsnippet try\\n\\ttry {\\n\\t  ${2}\\n\\t} catch (${1:Exception e}) {\\n\\t}\\nsnippet tryf\\n\\ttry {\\n\\t  ${2}\\n\\t} catch (${1:Exception e}) {\\n\\t} finally {\\n\\t}\\n\";\n\n});\n\nace.define(\"ace/snippets/dart\",[\"require\",\"exports\",\"module\",\"ace/snippets/dart.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./dart.snippets\");\nexports.scope = \"dart\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/dart\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/diff.js",
    "content": "ace.define(\"ace/snippets/diff.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# DEP-3 (http://dep.debian.net/deps/dep3/) style patch header\\nsnippet header DEP-3 style header\\n\\tDescription: ${1}\\n\\tOrigin: ${2:vendor|upstream|other}, ${3:url of the original patch}\\n\\tBug: ${4:url in upstream bugtracker}\\n\\tForwarded: ${5:no|not-needed|url}\\n\\tAuthor: ${6:`g:snips_author`}\\n\\tReviewed-by: ${7:name and email}\\n\\tLast-Update: ${8:`strftime(\\\"%Y-%m-%d\\\")`}\\n\\tApplied-Upstream: ${9:upstream version|url|commit}\\n\\n\";\n\n});\n\nace.define(\"ace/snippets/diff\",[\"require\",\"exports\",\"module\",\"ace/snippets/diff.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./diff.snippets\");\nexports.scope = \"diff\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/diff\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/django.js",
    "content": "ace.define(\"ace/snippets/django.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# Model Fields\\n\\n# Note: Optional arguments are using defaults that match what Django will use\\n# as a default, e.g. with max_length fields.  Doing this as a form of self\\n# documentation and to make it easy to know whether you should override the\\n# default or not.\\n\\n# Note: Optional arguments that are booleans will use the opposite since you\\n# can either not specify them, or override them, e.g. auto_now_add=False.\\n\\nsnippet auto\\n\\t${1:FIELDNAME} = models.AutoField(${2})\\nsnippet bool\\n\\t${1:FIELDNAME} = models.BooleanField(${2:default=True})\\nsnippet char\\n\\t${1:FIELDNAME} = models.CharField(max_length=${2}${3:, blank=True})\\nsnippet comma\\n\\t${1:FIELDNAME} = models.CommaSeparatedIntegerField(max_length=${2}${3:, blank=True})\\nsnippet date\\n\\t${1:FIELDNAME} = models.DateField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\nsnippet datetime\\n\\t${1:FIELDNAME} = models.DateTimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\nsnippet decimal\\n\\t${1:FIELDNAME} = models.DecimalField(max_digits=${2}, decimal_places=${3})\\nsnippet email\\n\\t${1:FIELDNAME} = models.EmailField(max_length=${2:75}${3:, blank=True})\\nsnippet file\\n\\t${1:FIELDNAME} = models.FileField(upload_to=${2:path/for/upload}${3:, max_length=100})\\nsnippet filepath\\n\\t${1:FIELDNAME} = models.FilePathField(path=${2:\\\"/abs/path/to/dir\\\"}${3:, max_length=100}${4:, match=\\\"*.ext\\\"}${5:, recursive=True}${6:, blank=True, })\\nsnippet float\\n\\t${1:FIELDNAME} = models.FloatField(${2})\\nsnippet image\\n\\t${1:FIELDNAME} = models.ImageField(upload_to=${2:path/for/upload}${3:, height_field=height, width_field=width}${4:, max_length=100})\\nsnippet int\\n\\t${1:FIELDNAME} = models.IntegerField(${2})\\nsnippet ip\\n\\t${1:FIELDNAME} = models.IPAddressField(${2})\\nsnippet nullbool\\n\\t${1:FIELDNAME} = models.NullBooleanField(${2})\\nsnippet posint\\n\\t${1:FIELDNAME} = models.PositiveIntegerField(${2})\\nsnippet possmallint\\n\\t${1:FIELDNAME} = models.PositiveSmallIntegerField(${2})\\nsnippet slug\\n\\t${1:FIELDNAME} = models.SlugField(max_length=${2:50}${3:, blank=True})\\nsnippet smallint\\n\\t${1:FIELDNAME} = models.SmallIntegerField(${2})\\nsnippet text\\n\\t${1:FIELDNAME} = models.TextField(${2:blank=True})\\nsnippet time\\n\\t${1:FIELDNAME} = models.TimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\nsnippet url\\n\\t${1:FIELDNAME} = models.URLField(${2:verify_exists=False}${3:, max_length=200}${4:, blank=True})\\nsnippet xml\\n\\t${1:FIELDNAME} = models.XMLField(schema_path=${2:None}${3:, blank=True})\\n# Relational Fields\\nsnippet fk\\n\\t${1:FIELDNAME} = models.ForeignKey(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, to_field=''})\\nsnippet m2m\\n\\t${1:FIELDNAME} = models.ManyToManyField(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, symmetrical=False}${6:, through=''}${7:, db_table=''})\\nsnippet o2o\\n\\t${1:FIELDNAME} = models.OneToOneField(${2:OtherModel}${3:, parent_link=True}${4:, related_name=''}${5:, limit_choices_to=}${6:, to_field=''})\\n\\n# Code Skeletons\\n\\nsnippet form\\n\\tclass ${1:FormName}(forms.Form):\\n\\t\\t\\\"\\\"\\\"${2:docstring}\\\"\\\"\\\"\\n\\t\\t${3}\\n\\nsnippet model\\n\\tclass ${1:ModelName}(models.Model):\\n\\t\\t\\\"\\\"\\\"${2:docstring}\\\"\\\"\\\"\\n\\t\\t${3}\\n\\t\\t\\n\\t\\tclass Meta:\\n\\t\\t\\t${4}\\n\\t\\t\\n\\t\\tdef __unicode__(self):\\n\\t\\t\\t${5}\\n\\t\\t\\n\\t\\tdef save(self, force_insert=False, force_update=False):\\n\\t\\t\\t${6}\\n\\t\\t\\n\\t\\t@models.permalink\\n\\t\\tdef get_absolute_url(self):\\n\\t\\t\\treturn ('${7:view_or_url_name}' ${8})\\n\\nsnippet modeladmin\\n\\tclass ${1:ModelName}Admin(admin.ModelAdmin):\\n\\t\\t${2}\\n\\t\\n\\tadmin.site.register($1, $1Admin)\\n\\t\\nsnippet tabularinline\\n\\tclass ${1:ModelName}Inline(admin.TabularInline):\\n\\t\\tmodel = $1\\n\\nsnippet stackedinline\\n\\tclass ${1:ModelName}Inline(admin.StackedInline):\\n\\t\\tmodel = $1\\n\\nsnippet r2r\\n\\treturn render_to_response('${1:template.html}', {\\n\\t\\t\\t${2}\\n\\t\\t}${3:, context_instance=RequestContext(request)}\\n\\t)\\n\";\n\n});\n\nace.define(\"ace/snippets/django\",[\"require\",\"exports\",\"module\",\"ace/snippets/django.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./django.snippets\");\nexports.scope = \"django\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/django\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/dockerfile.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/dockerfile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/dot.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/dot\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/drools.js",
    "content": "ace.define(\"ace/snippets/drools.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"\\nsnippet rule\\n\\trule \\\"${1?:rule_name}\\\"\\n\\twhen\\n\\t\\t${2:// when...} \\n\\tthen\\n\\t\\t${3:// then...}\\n\\tend\\n\\nsnippet query\\n\\tquery ${1?:query_name}\\n\\t\\t${2:// find} \\n\\tend\\n\\t\\nsnippet declare\\n\\tdeclare ${1?:type_name}\\n\\t\\t${2:// attributes} \\n\\tend\\n\\n\";\n\n});\n\nace.define(\"ace/snippets/drools\",[\"require\",\"exports\",\"module\",\"ace/snippets/drools.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./drools.snippets\");\nexports.scope = \"drools\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/drools\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/edifact.js",
    "content": "ace.define(\"ace/snippets/edifact.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"## Access Modifiers\\nsnippet u\\n\\tUN\\nsnippet un\\n\\tUNB\\nsnippet pr\\n\\tprivate\\n##\\n## Annotations\\nsnippet before\\n\\t@Before\\n\\tstatic void ${1:intercept}(${2:args}) { ${3} }\\nsnippet mm\\n\\t@ManyToMany\\n\\t${1}\\nsnippet mo\\n\\t@ManyToOne\\n\\t${1}\\nsnippet om\\n\\t@OneToMany${1:(cascade=CascadeType.ALL)}\\n\\t${2}\\nsnippet oo\\n\\t@OneToOne\\n\\t${1}\\n##\\n## Basic Java packages and import\\nsnippet im\\n\\timport\\nsnippet j.b\\n\\tjava.beans.\\nsnippet j.i\\n\\tjava.io.\\nsnippet j.m\\n\\tjava.math.\\nsnippet j.n\\n\\tjava.net.\\nsnippet j.u\\n\\tjava.util.\\n##\\n## Class\\nsnippet cl\\n\\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\nsnippet in\\n\\tinterface ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2:extends Parent}${3}\\nsnippet tc\\n\\tpublic class ${1:`Filename()`} extends ${2:TestCase}\\n##\\n## Class Enhancements\\nsnippet ext\\n\\textends \\nsnippet imp\\n\\timplements\\n##\\n## Comments\\nsnippet /*\\n\\t/*\\n\\t * ${1}\\n\\t */\\n##\\n## Constants\\nsnippet co\\n\\tstatic public final ${1:String} ${2:var} = ${3};${4}\\nsnippet cos\\n\\tstatic public final String ${1:var} = \\\"${2}\\\";${3}\\n##\\n## Control Statements\\nsnippet case\\n\\tcase ${1}:\\n\\t\\t${2}\\nsnippet def\\n\\tdefault:\\n\\t\\t${2}\\nsnippet el\\n\\telse\\nsnippet elif\\n\\telse if (${1}) ${2}\\nsnippet if\\n\\tif (${1}) ${2}\\nsnippet sw\\n\\tswitch (${1}) {\\n\\t\\t${2}\\n\\t}\\n##\\n## Create a Method\\nsnippet m\\n\\t${1:void} ${2:method}(${3}) ${4:throws }${5}\\n##\\n## Create a Variable\\nsnippet v\\n\\t${1:String} ${2:var}${3: = null}${4};${5}\\n##\\n## Enhancements to Methods, variables, classes, etc.\\nsnippet ab\\n\\tabstract\\nsnippet fi\\n\\tfinal\\nsnippet st\\n\\tstatic\\nsnippet sy\\n\\tsynchronized\\n##\\n## Error Methods\\nsnippet err\\n\\tSystem.err.print(\\\"${1:Message}\\\");\\nsnippet errf\\n\\tSystem.err.printf(\\\"${1:Message}\\\", ${2:exception});\\nsnippet errln\\n\\tSystem.err.println(\\\"${1:Message}\\\");\\n##\\n## Exception Handling\\nsnippet as\\n\\tassert ${1:test} : \\\"${2:Failure message}\\\";${3}\\nsnippet ca\\n\\tcatch(${1:Exception} ${2:e}) ${3}\\nsnippet thr\\n\\tthrow\\nsnippet ths\\n\\tthrows\\nsnippet try\\n\\ttry {\\n\\t\\t${3}\\n\\t} catch(${1:Exception} ${2:e}) {\\n\\t}\\nsnippet tryf\\n\\ttry {\\n\\t\\t${3}\\n\\t} catch(${1:Exception} ${2:e}) {\\n\\t} finally {\\n\\t}\\n##\\n## Find Methods\\nsnippet findall\\n\\tList<${1:listName}> ${2:items} = ${1}.findAll();${3}\\nsnippet findbyid\\n\\t${1:var} ${2:item} = ${1}.findById(${3});${4}\\n##\\n## Javadocs\\nsnippet /**\\n\\t/**\\n\\t * ${1}\\n\\t */\\nsnippet @au\\n\\t@author `system(\\\"grep \\\\`id -un\\\\` /etc/passwd | cut -d \\\\\\\":\\\\\\\" -f5 | cut -d \\\\\\\",\\\\\\\" -f1\\\")`\\nsnippet @br\\n\\t@brief ${1:Description}\\nsnippet @fi\\n\\t@file ${1:`Filename()`}.java\\nsnippet @pa\\n\\t@param ${1:param}\\nsnippet @re\\n\\t@return ${1:param}\\n##\\n## Logger Methods\\nsnippet debug\\n\\tLogger.debug(${1:param});${2}\\nsnippet error\\n\\tLogger.error(${1:param});${2}\\nsnippet info\\n\\tLogger.info(${1:param});${2}\\nsnippet warn\\n\\tLogger.warn(${1:param});${2}\\n##\\n## Loops\\nsnippet enfor\\n\\tfor (${1} : ${2}) ${3}\\nsnippet for\\n\\tfor (${1}; ${2}; ${3}) ${4}\\nsnippet wh\\n\\twhile (${1}) ${2}\\n##\\n## Main method\\nsnippet main\\n\\tpublic static void main (String[] args) {\\n\\t\\t${1:/* code */}\\n\\t}\\n##\\n## Print Methods\\nsnippet print\\n\\tSystem.out.print(\\\"${1:Message}\\\");\\nsnippet printf\\n\\tSystem.out.printf(\\\"${1:Message}\\\", ${2:args});\\nsnippet println\\n\\tSystem.out.println(${1});\\n##\\n## Render Methods\\nsnippet ren\\n\\trender(${1:param});${2}\\nsnippet rena\\n\\trenderArgs.put(\\\"${1}\\\", ${2});${3}\\nsnippet renb\\n\\trenderBinary(${1:param});${2}\\nsnippet renj\\n\\trenderJSON(${1:param});${2}\\nsnippet renx\\n\\trenderXml(${1:param});${2}\\n##\\n## Setter and Getter Methods\\nsnippet set\\n\\t${1:public} void set${3:}(${2:String} ${4:}){\\n\\t\\tthis.$4 = $4;\\n\\t}\\nsnippet get\\n\\t${1:public} ${2:String} get${3:}(){\\n\\t\\treturn this.${4:};\\n\\t}\\n##\\n## Terminate Methods or Loops\\nsnippet re\\n\\treturn\\nsnippet br\\n\\tbreak;\\n##\\n## Test Methods\\nsnippet t\\n\\tpublic void test${1:Name}() throws Exception {\\n\\t\\t${2}\\n\\t}\\nsnippet test\\n\\t@Test\\n\\tpublic void test${1:Name}() throws Exception {\\n\\t\\t${2}\\n\\t}\\n##\\n## Utils\\nsnippet Sc\\n\\tScanner\\n##\\n## Miscellaneous\\nsnippet action\\n\\tpublic static void ${1:index}(${2:args}) { ${3} }\\nsnippet rnf\\n\\tnotFound(${1:param});${2}\\nsnippet rnfin\\n\\tnotFoundIfNull(${1:param});${2}\\nsnippet rr\\n\\tredirect(${1:param});${2}\\nsnippet ru\\n\\tunauthorized(${1:param});${2}\\nsnippet unless\\n\\t(unless=${1:param});${2}\\n\";\n\n});\n\nace.define(\"ace/snippets/edifact\",[\"require\",\"exports\",\"module\",\"ace/snippets/edifact.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./edifact.snippets\");\nexports.scope = \"edifact\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/edifact\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/eiffel.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/eiffel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/ejs.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/ejs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/elixir.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/elm.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/elm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/erlang.js",
    "content": "ace.define(\"ace/snippets/erlang.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# module and export all\\nsnippet mod\\n\\t-module(${1:`Filename('', 'my')`}).\\n\\t\\n\\t-compile([export_all]).\\n\\t\\n\\tstart() ->\\n\\t    ${2}\\n\\t\\n\\tstop() ->\\n\\t    ok.\\n# define directive\\nsnippet def\\n\\t-define(${1:macro}, ${2:body}).${3}\\n# export directive\\nsnippet exp\\n\\t-export([${1:function}/${2:arity}]).\\n# include directive\\nsnippet inc\\n\\t-include(\\\"${1:file}\\\").${2}\\n# behavior directive\\nsnippet beh\\n\\t-behaviour(${1:behaviour}).${2}\\n# if expression\\nsnippet if\\n\\tif\\n\\t    ${1:guard} ->\\n\\t        ${2:body}\\n\\tend\\n# case expression\\nsnippet case\\n\\tcase ${1:expression} of\\n\\t    ${2:pattern} ->\\n\\t        ${3:body};\\n\\tend\\n# anonymous function\\nsnippet fun\\n\\tfun (${1:Parameters}) -> ${2:body} end${3}\\n# try...catch\\nsnippet try\\n\\ttry\\n\\t    ${1}\\n\\tcatch\\n\\t    ${2:_:_} -> ${3:got_some_exception}\\n\\tend\\n# record directive\\nsnippet rec\\n\\t-record(${1:record}, {\\n\\t    ${2:field}=${3:value}}).${4}\\n# todo comment\\nsnippet todo\\n\\t%% TODO: ${1}\\n## Snippets below (starting with '%') are in EDoc format.\\n## See http://www.erlang.org/doc/apps/edoc/chapter.html#id56887 for more details\\n# doc comment\\nsnippet %d\\n\\t%% @doc ${1}\\n# end of doc comment\\nsnippet %e\\n\\t%% @end\\n# specification comment\\nsnippet %s\\n\\t%% @spec ${1}\\n# private function marker\\nsnippet %p\\n\\t%% @private\\n# OTP application\\nsnippet application\\n\\t-module(${1:`Filename('', 'my')`}).\\n\\n\\t-behaviour(application).\\n\\n\\t-export([start/2, stop/1]).\\n\\n\\tstart(_Type, _StartArgs) ->\\n\\t    case ${2:root_supervisor}:start_link() of\\n\\t        {ok, Pid} ->\\n\\t            {ok, Pid};\\n\\t        Other ->\\n\\t\\t          {error, Other}\\n\\t    end.\\n\\n\\tstop(_State) ->\\n\\t    ok.\\t\\n# OTP supervisor\\nsnippet supervisor\\n\\t-module(${1:`Filename('', 'my')`}).\\n\\n\\t-behaviour(supervisor).\\n\\n\\t%% API\\n\\t-export([start_link/0]).\\n\\n\\t%% Supervisor callbacks\\n\\t-export([init/1]).\\n\\n\\t-define(SERVER, ?MODULE).\\n\\n\\tstart_link() ->\\n\\t    supervisor:start_link({local, ?SERVER}, ?MODULE, []).\\n\\n\\tinit([]) ->\\n\\t    Server = {${2:my_server}, {$2, start_link, []},\\n\\t      permanent, 2000, worker, [$2]},\\n\\t    Children = [Server],\\n\\t    RestartStrategy = {one_for_one, 0, 1},\\n\\t    {ok, {RestartStrategy, Children}}.\\n# OTP gen_server\\nsnippet gen_server\\n\\t-module(${1:`Filename('', 'my')`}).\\n\\n\\t-behaviour(gen_server).\\n\\n\\t%% API\\n\\t-export([\\n\\t         start_link/0\\n\\t        ]).\\n\\n\\t%% gen_server callbacks\\n\\t-export([init/1, handle_call/3, handle_cast/2, handle_info/2,\\n\\t         terminate/2, code_change/3]).\\n\\n\\t-define(SERVER, ?MODULE).\\n\\n\\t-record(state, {}).\\n\\n\\t%%%===================================================================\\n\\t%%% API\\n\\t%%%===================================================================\\n\\n\\tstart_link() ->\\n\\t    gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).\\n\\n\\t%%%===================================================================\\n\\t%%% gen_server callbacks\\n\\t%%%===================================================================\\n\\n\\tinit([]) ->\\n\\t    {ok, #state{}}.\\n\\n\\thandle_call(_Request, _From, State) ->\\n\\t    Reply = ok,\\n\\t    {reply, Reply, State}.\\n\\n\\thandle_cast(_Msg, State) ->\\n\\t    {noreply, State}.\\n\\n\\thandle_info(_Info, State) ->\\n\\t    {noreply, State}.\\n\\n\\tterminate(_Reason, _State) ->\\n\\t    ok.\\n\\n\\tcode_change(_OldVsn, State, _Extra) ->\\n\\t    {ok, State}.\\n\\n\\t%%%===================================================================\\n\\t%%% Internal functions\\n\\t%%%===================================================================\\n\\n\";\n\n});\n\nace.define(\"ace/snippets/erlang\",[\"require\",\"exports\",\"module\",\"ace/snippets/erlang.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./erlang.snippets\");\nexports.scope = \"erlang\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/erlang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/forth.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/forth\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/fortran.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/fortran\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/fsharp.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/fsharp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/fsl.js",
    "content": "ace.define(\"ace/snippets/fsl.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet header\\n\\tmachine_name     : \\\"\\\";\\n\\tmachine_author   : \\\"\\\";\\n\\tmachine_license  : MIT;\\n\\tmachine_comment  : \\\"\\\";\\n\\tmachine_language : en;\\n\\tmachine_version  : 1.0.0;\\n\\tfsl_version      : 1.0.0;\\n\\tstart_states     : [];\\n\";\n\n});\n\nace.define(\"ace/snippets/fsl\",[\"require\",\"exports\",\"module\",\"ace/snippets/fsl.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./fsl.snippets\");\nexports.scope = \"fsl\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/fsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/ftl.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/ftl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/gcode.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/gcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/gherkin.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/gherkin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/gitignore.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/gitignore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/glsl.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/glsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/gobstones.js",
    "content": "ace.define(\"ace/snippets/gobstones.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# scope: gobstones\\n\\n# program\\nsnippet program\\n\\tprogram {\\n\\t\\t${1:// cuerpo...}\\n\\t}\\n\\n# interactive program\\nsnippet interactive program\\n\\tinteractive program {\\n\\t\\t${1:INIT} -> { ${2:// cuerpo...} }\\n\\t\\t${3:TIMEOUT(${4:5000}) -> { ${5:// cuerpo...} }\\n\\t\\t${6:K_ENTER} -> { ${7:// cuerpo...} }\\n\\t\\t_ -> {}\\n\\t}\\n\\n# procedure\\nsnippet procedure\\n\\tprocedure ${1:Nombre}(${2:parametros}) {\\n\\t\\t${3:// cuerpo...}\\n\\t}\\n\\n# function\\nsnippet function\\n\\tfunction ${1:nombre}(${2:parametros}) {\\n\\t\\treturn (${3:expresi\\u00F3n..})\\n\\t}\\n\\n# return\\nsnippet return\\n\\treturn (${1:expresi\\u00F3n...})\\n\\n# type\\nsnippet type\\n\\ttype ${1:Nombre}\\n\\n# is variant\\nsnippet is variant\\n\\tis variant {\\n\\t\\tcase ${1:NombreDelValor1} {}\\n\\t\\tcase ${2:NombreDelValor2} {}\\n\\t\\tcase ${3:NombreDelValor3} {}\\n\\t\\tcase ${4:NombreDelValor4} {}\\n\\t}\\n\\n# is record\\nsnippet is record\\n\\tis record {\\n\\t\\tfield ${1:campo1} // ${2:Tipo}\\n\\t\\tfield ${3:campo2} // ${4:Tipo}\\n\\t\\tfield ${5:campo3} // ${6:Tipo}\\n\\t\\tfield ${7:campo4} // ${8:Tipo}\\n\\t}\\n\\n# type _ is variant\\nsnippet type _ is variant\\n\\ttype ${1:Nombre} is variant {\\n\\t\\tcase ${2:NombreDelValor1} {}\\n\\t\\tcase ${3:NombreDelValor2} {}\\n\\t\\tcase ${4:NombreDelValor3} {}\\n\\t\\tcase ${5:NombreDelValor4} {}\\n\\t}\\n\\n# type _ is record\\nsnippet type _ is record\\n\\ttype ${1:Nombre} is record {\\n\\t\\tfield ${2:campo1} // ${3:Tipo}\\n\\t\\tfield ${4:campo2} // ${5:Tipo}\\n\\t\\tfield ${6:campo3} // ${7:Tipo}\\n\\t\\tfield ${8:campo4} // ${9:Tipo}\\n\\t}\\n\\n# repeat\\nsnippet repeat\\n\\trepeat ${1:cantidad} {\\n\\t\\t${2:// cuerpo...}\\n\\t}\\n\\n# foreach\\nsnippet foreach\\n\\tforeach ${1:\\u00EDndice} in ${2:lista} {\\n\\t\\t${3:// cuerpo...}\\n\\t}\\n\\n# while\\nsnippet while\\n\\twhile (${1?:condici\\u00F3n}) {\\n\\t\\t${2:// cuerpo...}\\n\\t}\\n\\n# if\\nsnippet if\\n\\tif (${1?:condici\\u00F3n}) {\\n\\t\\t${2:// cuerpo...}\\n\\t}\\n\\n# elseif\\nsnippet elseif\\n\\telseif (${1?:condici\\u00F3n}) {\\n\\t\\t${2:// cuerpo...}\\n\\t}\\n\\n# else\\nsnippet else\\n\\telse {\\n\\t\\t${1:// cuerpo...}\\n\\t}\\n\\n# if (con else)\\nsnippet if (con else)\\n\\tif (${1:condici\\u00F3n}) {\\n\\t\\t${2:// cuerpo...}\\n\\t} else {\\n\\t\\t${3:// cuerpo....}\\n\\t}\\n\\n# if (con elseif)\\nsnippet if (con elseif)\\n\\tif (${1:condici\\u00F3n}) {\\n\\t\\t${2:// cuerpo...}\\n\\t} elseif (${3:condici\\u00F3n}) {\\n\\t\\t${4:// cuerpo...}\\n\\t}\\n\\n# if (con elseif y else)\\nsnippet if (con elseif y else)\\n\\tif (${1:condici\\u00F3n}) {\\n\\t\\t${2:// cuerpo...}\\n\\t} elseif (${3:condici\\u00F3n}) {\\n\\t\\t${4:// cuerpo...}\\n\\t} else {\\n\\t\\t${5:// cuerpo....}\\n\\t}\\n\\n# if (con 3 elseif)\\nsnippet if (con 3 elseif)\\n\\tif (${1:condici\\u00F3n}) {\\n\\t\\t${2:// cuerpo...}\\n\\t} elseif (${3:condici\\u00F3n}) {\\n\\t\\t${4:// cuerpo...}\\n\\t} elseif (${5:condici\\u00F3n}) {\\n\\t\\t${6:// cuerpo...}\\n\\t} elseif (${7:condici\\u00F3n}) {\\n\\t\\t${8:// cuerpo...}\\n\\t}\\n\\n# choose (2 valores)\\nsnippet choose (2 valores)\\n\\tchoose\\n\\t\\t${1:Valor1} when (${2:condici\\u00F3n})\\n\\t\\t${3:Valor2} otherwise\\n\\n# choose (2 valores y boom)\\nsnippet choose (2 valores y boom)\\n\\tchoose\\n\\t\\t${1:Valor1} when (${2:condici\\u00F3n})\\n\\t\\t${3:Valor2} when (${4:condici\\u00F3n})\\n\\t\\t${5:Valor3} when (${6:condici\\u00F3n})\\n\\t\\t${7:Valor4} when (${8:condici\\u00F3n})\\n\\t\\tboom(\\\"${9:No es un valor v\\u00E1lido}\\\") otherwise\\n\\n# matching (4 valores)\\nsnippet matching (4 valores)\\n\\tmatching (${1:variable}) select\\n\\t\\t${2:Valor1} on ${3:opci\\u00F3n1}\\n\\t\\t${4:Valor2} on ${5:opci\\u00F3n2}\\n\\t\\t${6:Valor3} on ${7:opci\\u00F3n3}\\n\\t\\t${8:Valor4} on ${9:opci\\u00F3n4}\\n\\t\\tboom(\\\"${10:No es un valor v\\u00E1lido}\\\") otherwise\\n\\n# select (4 casos)\\nsnippet select (4 casos)\\n\\tselect\\n\\t\\t${1:Valor1} on (${2:opci\\u00F3n1})\\n\\t\\t${3:Valor2} on (${4:opci\\u00F3n2})\\n\\t\\t${5:Valor3} on (${6:opci\\u00F3n3})\\n\\t\\t${7:Valor4} on (${8:opci\\u00F3n4})\\n\\t\\tboom(\\\"${9:No es un valor v\\u00E1lido}\\\") otherwise\\n\\n# switch\\nsnippet switch\\n\\tswitch (${1:variable}) {\\n\\t\\t${2:Valor1} -> {${3:// cuerpo...}}\\n\\t\\t${4:Valor2} -> {${5:// cuerpo...}}\\n\\t\\t${6:Valor3} -> {${7:// cuerpo...}}\\n\\t\\t${8:Valor4} -> {${9:// cuerpo...}}\\n\\t\\t_ -> {${10:// cuerpo...}}\\n\\t}\\n\\n# Poner\\nsnippet Poner\\n\\tPoner(${1:color})\\n\\n# Sacar\\nsnippet Sacar\\n\\tSacar(${1:color})\\n\\n# Mover\\nsnippet Mover\\n\\tMover(${1:direcci\\u00F3n})\\n\\n# IrAlBorde\\nsnippet IrAlBorde\\n\\tIrAlBorde(${1:direcci\\u00F3n})\\n\\n# VaciarTablero\\nsnippet VaciarTablero\\n\\tVaciarTablero()\\n\\n# BOOM\\nsnippet BOOM\\n\\tBOOM(\\\"${1:Mensaje de error}\\\")\\n\\n# hayBolitas\\nsnippet hayBolitas\\n\\thayBolitas(${1:color})\\n\\n# nroBolitas\\nsnippet nroBolitas\\n\\tnroBolitas(${1:color})\\n\\n# puedeMover\\nsnippet puedeMover\\n\\tpuedeMover(${1:direcci\\u00F3n})\\n\\n# siguiente\\nsnippet siguiente\\n\\tsiguiente(${1:color|direcci\\u00F3n})\\n\\n# previo\\nsnippet previo\\n\\tprevio(${1:color|direcci\\u00F3n})\\n\\n# opuesto\\nsnippet opuesto\\n\\topuesto(${1:direcci\\u00F3n})\\n\\n# minDir\\nsnippet minDir\\n\\tminDir()\\n\\n# maxDir\\nsnippet maxDir\\n\\tmaxDir()\\n\\n# minColor\\nsnippet minColor\\n\\tminDir()\\n\\n# maxColor\\nsnippet maxColor\\n\\tmaxDir()\\n\\n# minBool\\nsnippet minBool\\n\\tminBool()\\n\\n# maxBool\\nsnippet maxBool\\n\\tmaxBool()\\n\\n# primero\\nsnippet primero\\n\\tprimero(${1:lista})\\n\\n# sinElPrimero\\nsnippet sinElPrimero\\n\\tsinElPrimero(${1:lista})\\n\\n# esVac\\u00EDa\\nsnippet esVac\\u00EDa\\n\\tesVac\\u00EDa(${1:lista})\\n\\n# boom\\nsnippet boom\\n\\tboom(\\\"${1:Mensaje de error}\\\")\\n\\n# Azul\\nsnippet Azul\\n\\tAzul\\n\\n# Negro\\nsnippet Negro\\n\\tNegro\\n\\n# Rojo\\nsnippet Rojo\\n\\tRojo\\n\\n# Verde\\nsnippet Verde\\n\\tVerde\\n\\n# Norte\\nsnippet Norte\\n\\tNorte\\n\\n# Este\\nsnippet Este\\n\\tEste\\n\\n# Sur\\nsnippet Sur\\n\\tSur\\n\\n# Oeste\\nsnippet Oeste\\n\\tOeste\\n\\n# True\\nsnippet True\\n\\tTrue\\n\\n# False\\nsnippet False\\n\\tFalse\\n\\n# INIT\\nsnippet INIT\\n\\tINIT -> {$1:// cuerpo...}\\n\\n# TIMEOUT\\nsnippet TIMEOUT\\n\\tTIMEOUT(${1:5000}) -> {$2:// cuerpo...}\\n\\n# K_A\\nsnippet K_A\\n\\tK_A -> { ${1://cuerpo...} }\\n# K_CTRL_A\\nsnippet K_CTRL_A\\n\\tK_CTRL_A -> { ${1://cuerpo...} }\\n# K_ALT_A\\nsnippet K_ALT_A\\n\\tK_ALT_A -> { ${1://cuerpo...} }\\n# K_SHIFT_A\\nsnippet K_SHIFT_A\\n\\tK_SHIFT_A -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_A\\nsnippet K_CTRL_ALT_A\\n\\tK_CTRL_ALT_A -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_A\\nsnippet K_CTRL_SHIFT_A\\n\\tK_CTRL_SHIFT_A -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_A\\nsnippet K_CTRL_ALT_SHIFT_A\\n\\tK_CTRL_ALT_SHIFT_A -> { ${1://cuerpo...} }\\n\\n# K_B\\nsnippet K_B\\n\\tK_B -> { ${1://cuerpo...} }\\n# K_CTRL_B\\nsnippet K_CTRL_B\\n\\tK_CTRL_B -> { ${1://cuerpo...} }\\n# K_ALT_B\\nsnippet K_ALT_B\\n\\tK_ALT_B -> { ${1://cuerpo...} }\\n# K_SHIFT_B\\nsnippet K_SHIFT_B\\n\\tK_SHIFT_B -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_B\\nsnippet K_CTRL_ALT_B\\n\\tK_CTRL_ALT_B -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_B\\nsnippet K_CTRL_SHIFT_B\\n\\tK_CTRL_SHIFT_B -> { ${1://cuerpo...} }\\n# K_ALT_SHIFT_C\\nsnippet K_ALT_SHIFT_C\\n\\tK_ALT_SHIFT_C -> { ${1://cuerpo...} }\\n# K_CTRL_BLT_SHIFT_B\\nsnippet K_CTRL_BLT_SHIFT_B\\n\\tK_CTRL_ALT_SHIFT_B -> { ${1://cuerpo...} }\\n\\n# K_C\\nsnippet K_C\\n\\tK_C -> { ${1://cuerpo...} }\\n# K_CTRL_C\\nsnippet K_CTRL_C\\n\\tK_CTRL_C -> { ${1://cuerpo...} }\\n# K_ALT_C\\nsnippet K_ALT_C\\n\\tK_ALT_C -> { ${1://cuerpo...} }\\n# K_SHIFT_C\\nsnippet K_SHIFT_C\\n\\tK_SHIFT_C -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_C\\nsnippet K_CTRL_ALT_C\\n\\tK_CTRL_ALT_C -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_C\\nsnippet K_CTRL_SHIFT_C\\n\\tK_CTRL_SHIFT_C -> { ${1://cuerpo...} }\\n# K_ALT_SHIFT_C\\nsnippet K_ALT_SHIFT_C\\n\\tK_ALT_SHIFT_C -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_C\\nsnippet K_CTRL_ALT_SHIFT_C\\n\\tK_CTRL_ALT_SHIFT_C -> { ${1://cuerpo...} }\\n\\n# K_D\\nsnippet K_D\\n\\tK_D -> { ${1://cuerpo...} }\\n# K_CTRL_D\\nsnippet K_CTRL_D\\n\\tK_CTRL_D -> { ${1://cuerpo...} }\\n# K_ALT_D\\nsnippet K_ALT_D\\n\\tK_DLT_D -> { ${1://cuerpo...} }\\n# K_SHIFT_D\\nsnippet K_SHIFT_D\\n\\tK_SHIFT_D -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_D\\nsnippet K_CTRL_ALT_D\\n\\tK_CTRL_DLT_D -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_D\\nsnippet K_CTRL_SHIFT_D\\n\\tK_CTRL_SHIFT_D -> { ${1://cuerpo...} }\\n# K_ALT_SHIFT_D\\nsnippet K_ALT_SHIFT_D\\n\\tK_ALT_SHIFT_D -> { ${1://cuerpo...} }\\n# K_CTRL_DLT_SHIFT_D\\nsnippet K_CTRL_DLT_SHIFT_D\\n\\tK_CTRL_ALT_SHIFT_D -> { ${1://cuerpo...} }\\n\\n# K_E\\nsnippet K_E\\n\\tK_E -> { ${1://cuerpo...} }\\n# K_CTRL_E\\nsnippet K_CTRL_E\\n\\tK_CTRL_E -> { ${1://cuerpo...} }\\n# K_ALT_E\\nsnippet K_ALT_E\\n\\tK_ALT_E -> { ${1://cuerpo...} }\\n# K_SHIFT_E\\nsnippet K_SHIFT_E\\n\\tK_SHIFT_E -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_E\\nsnippet K_CTRL_ALT_E\\n\\tK_CTRL_ALT_E -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_E\\nsnippet K_CTRL_SHIFT_E\\n\\tK_CTRL_SHIFT_E -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_E\\nsnippet K_CTRL_ALT_SHIFT_E\\n\\tK_CTRL_ALT_SHIFT_E -> { ${1://cuerpo...} }\\n\\n# K_F\\nsnippet K_F\\n\\tK_F -> { ${1://cuerpo...} }\\n# K_CTRL_F\\nsnippet K_CTRL_F\\n\\tK_CTRL_F -> { ${1://cuerpo...} }\\n# K_ALT_F\\nsnippet K_ALT_F\\n\\tK_ALT_F -> { ${1://cuerpo...} }\\n# K_SHIFT_F\\nsnippet K_SHIFT_F\\n\\tK_SHIFT_F -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_F\\nsnippet K_CTRL_ALT_F\\n\\tK_CTRL_ALT_F -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_F\\nsnippet K_CTRL_SHIFT_F\\n\\tK_CTRL_SHIFT_F -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_F\\nsnippet K_CTRL_ALT_SHIFT_F\\n\\tK_CTRL_ALT_SHIFT_F -> { ${1://cuerpo...} }\\n\\n# K_G\\nsnippet K_G\\n\\tK_G -> { ${1://cuerpo...} }\\n# K_CTRL_G\\nsnippet K_CTRL_G\\n\\tK_CTRL_G -> { ${1://cuerpo...} }\\n# K_ALT_G\\nsnippet K_ALT_G\\n\\tK_ALT_G -> { ${1://cuerpo...} }\\n# K_SHIFT_G\\nsnippet K_SHIFT_G\\n\\tK_SHIFT_G -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_G\\nsnippet K_CTRL_ALT_G\\n\\tK_CTRL_ALT_G -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_G\\nsnippet K_CTRL_SHIFT_G\\n\\tK_CTRL_SHIFT_G -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_G\\nsnippet K_CTRL_ALT_SHIFT_G\\n\\tK_CTRL_ALT_SHIFT_G -> { ${1://cuerpo...} }\\n\\n# K_H\\nsnippet K_H\\n\\tK_H -> { ${1://cuerpo...} }\\n# K_CTRL_H\\nsnippet K_CTRL_H\\n\\tK_CTRL_H -> { ${1://cuerpo...} }\\n# K_ALT_H\\nsnippet K_ALT_H\\n\\tK_ALT_H -> { ${1://cuerpo...} }\\n# K_SHIFT_H\\nsnippet K_SHIFT_H\\n\\tK_SHIFT_H -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_H\\nsnippet K_CTRL_ALT_H\\n\\tK_CTRL_ALT_H -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_H\\nsnippet K_CTRL_SHIFT_H\\n\\tK_CTRL_SHIFT_H -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_H\\nsnippet K_CTRL_ALT_SHIFT_H\\n\\tK_CTRL_ALT_SHIFT_H -> { ${1://cuerpo...} }\\n\\n# K_I\\nsnippet K_I\\n\\tK_I -> { ${1://cuerpo...} }\\n# K_CTRL_I\\nsnippet K_CTRL_I\\n\\tK_CTRL_I -> { ${1://cuerpo...} }\\n# K_ALT_I\\nsnippet K_ALT_I\\n\\tK_ALT_I -> { ${1://cuerpo...} }\\n# K_SHIFT_I\\nsnippet K_SHIFT_I\\n\\tK_SHIFT_I -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_I\\nsnippet K_CTRL_ALT_I\\n\\tK_CTRL_ALT_I -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_I\\nsnippet K_CTRL_SHIFT_I\\n\\tK_CTRL_SHIFT_I -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_I\\nsnippet K_CTRL_ALT_SHIFT_I\\n\\tK_CTRL_ALT_SHIFT_I -> { ${1://cuerpo...} }\\n\\n# K_J\\nsnippet K_J\\n\\tK_J -> { ${1://cuerpo...} }\\n# K_CTRL_J\\nsnippet K_CTRL_J\\n\\tK_CTRL_J -> { ${1://cuerpo...} }\\n# K_ALT_J\\nsnippet K_ALT_J\\n\\tK_ALT_J -> { ${1://cuerpo...} }\\n# K_SHIFT_J\\nsnippet K_SHIFT_J\\n\\tK_SHIFT_J -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_J\\nsnippet K_CTRL_ALT_J\\n\\tK_CTRL_ALT_J -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_J\\nsnippet K_CTRL_SHIFT_J\\n\\tK_CTRL_SHIFT_J -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_J\\nsnippet K_CTRL_ALT_SHIFT_J\\n\\tK_CTRL_ALT_SHIFT_J -> { ${1://cuerpo...} }\\n\\n# K_K\\nsnippet K_K\\n\\tK_K -> { ${1://cuerpo...} }\\n# K_CTRL_K\\nsnippet K_CTRL_K\\n\\tK_CTRL_K -> { ${1://cuerpo...} }\\n# K_ALT_K\\nsnippet K_ALT_K\\n\\tK_ALT_K -> { ${1://cuerpo...} }\\n# K_SHIFT_K\\nsnippet K_SHIFT_K\\n\\tK_SHIFT_K -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_K\\nsnippet K_CTRL_ALT_K\\n\\tK_CTRL_ALT_K -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_K\\nsnippet K_CTRL_SHIFT_K\\n\\tK_CTRL_SHIFT_K -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_K\\nsnippet K_CTRL_ALT_SHIFT_K\\n\\tK_CTRL_ALT_SHIFT_K -> { ${1://cuerpo...} }\\n\\n# K_L\\nsnippet K_L\\n\\tK_L -> { ${1://cuerpo...} }\\n# K_CTRL_L\\nsnippet K_CTRL_L\\n\\tK_CTRL_L -> { ${1://cuerpo...} }\\n# K_ALT_L\\nsnippet K_ALT_L\\n\\tK_ALT_L -> { ${1://cuerpo...} }\\n# K_SHIFT_L\\nsnippet K_SHIFT_L\\n\\tK_SHIFT_L -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_L\\nsnippet K_CTRL_ALT_L\\n\\tK_CTRL_ALT_L -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_L\\nsnippet K_CTRL_SHIFT_L\\n\\tK_CTRL_SHIFT_L -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_L\\nsnippet K_CTRL_ALT_SHIFT_L\\n\\tK_CTRL_ALT_SHIFT_L -> { ${1://cuerpo...} }\\n\\n# K_M\\nsnippet K_M\\n\\tK_M -> { ${1://cuerpo...} }\\n# K_CTRL_M\\nsnippet K_CTRL_M\\n\\tK_CTRL_M -> { ${1://cuerpo...} }\\n# K_ALT_M\\nsnippet K_ALT_M\\n\\tK_ALT_M -> { ${1://cuerpo...} }\\n# K_SHIFT_M\\nsnippet K_SHIFT_M\\n\\tK_SHIFT_M -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_M\\nsnippet K_CTRL_ALT_M\\n\\tK_CTRL_ALT_M -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_M\\nsnippet K_CTRL_SHIFT_M\\n\\tK_CTRL_SHIFT_M -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_M\\nsnippet K_CTRL_ALT_SHIFT_M\\n\\tK_CTRL_ALT_SHIFT_M -> { ${1://cuerpo...} }\\n\\n# K_N\\nsnippet K_N\\n\\tK_N -> { ${1://cuerpo...} }\\n# K_CTRL_N\\nsnippet K_CTRL_N\\n\\tK_CTRL_N -> { ${1://cuerpo...} }\\n# K_ALT_N\\nsnippet K_ALT_N\\n\\tK_ALT_N -> { ${1://cuerpo...} }\\n# K_SHIFT_N\\nsnippet K_SHIFT_N\\n\\tK_SHIFT_N -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_N\\nsnippet K_CTRL_ALT_N\\n\\tK_CTRL_ALT_N -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_N\\nsnippet K_CTRL_SHIFT_N\\n\\tK_CTRL_SHIFT_N -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_N\\nsnippet K_CTRL_ALT_SHIFT_N\\n\\tK_CTRL_ALT_SHIFT_N -> { ${1://cuerpo...} }\\n\\n# K_\\u00D1\\nsnippet K_\\u00D1\\n\\tK_\\u00D1 -> { ${1://cuerpo...} }\\n# K_CTRL_\\u00D1\\nsnippet K_CTRL_\\u00D1\\n\\tK_CTRL_\\u00D1 -> { ${1://cuerpo...} }\\n# K_ALT_\\u00D1\\nsnippet K_ALT_\\u00D1\\n\\tK_ALT_\\u00D1 -> { ${1://cuerpo...} }\\n# K_SHIFT_\\u00D1\\nsnippet K_SHIFT_\\u00D1\\n\\tK_SHIFT_\\u00D1 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_\\u00D1\\nsnippet K_CTRL_ALT_\\u00D1\\n\\tK_CTRL_ALT_\\u00D1 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_\\u00D1\\nsnippet K_CTRL_SHIFT_\\u00D1\\n\\tK_CTRL_SHIFT_\\u00D1 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_\\u00D1\\nsnippet K_CTRL_ALT_SHIFT_\\u00D1\\n\\tK_CTRL_ALT_SHIFT_\\u00D1 -> { ${1://cuerpo...} }\\n\\n# K_O\\nsnippet K_O\\n\\tK_O -> { ${1://cuerpo...} }\\n# K_CTRL_O\\nsnippet K_CTRL_O\\n\\tK_CTRL_O -> { ${1://cuerpo...} }\\n# K_ALT_O\\nsnippet K_ALT_O\\n\\tK_ALT_O -> { ${1://cuerpo...} }\\n# K_SHIFT_O\\nsnippet K_SHIFT_O\\n\\tK_SHIFT_O -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_O\\nsnippet K_CTRL_ALT_O\\n\\tK_CTRL_ALT_O -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_O\\nsnippet K_CTRL_SHIFT_O\\n\\tK_CTRL_SHIFT_O -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_O\\nsnippet K_CTRL_ALT_SHIFT_O\\n\\tK_CTRL_ALT_SHIFT_O -> { ${1://cuerpo...} }\\n\\n# K_P\\nsnippet K_P\\n\\tK_P -> { ${1://cuerpo...} }\\n# K_CTRL_P\\nsnippet K_CTRL_P\\n\\tK_CTRL_P -> { ${1://cuerpo...} }\\n# K_ALT_P\\nsnippet K_ALT_P\\n\\tK_ALT_P -> { ${1://cuerpo...} }\\n# K_SHIFT_P\\nsnippet K_SHIFT_P\\n\\tK_SHIFT_P -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_P\\nsnippet K_CTRL_ALT_P\\n\\tK_CTRL_ALT_P -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_P\\nsnippet K_CTRL_SHIFT_P\\n\\tK_CTRL_SHIFT_P -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_P\\nsnippet K_CTRL_ALT_SHIFT_P\\n\\tK_CTRL_ALT_SHIFT_P -> { ${1://cuerpo...} }\\n\\n# K_Q\\nsnippet K_Q\\n\\tK_Q -> { ${1://cuerpo...} }\\n# K_CTRL_Q\\nsnippet K_CTRL_Q\\n\\tK_CTRL_Q -> { ${1://cuerpo...} }\\n# K_ALT_Q\\nsnippet K_ALT_Q\\n\\tK_ALT_Q -> { ${1://cuerpo...} }\\n# K_SHIFT_Q\\nsnippet K_SHIFT_Q\\n\\tK_SHIFT_Q -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_Q\\nsnippet K_CTRL_ALT_Q\\n\\tK_CTRL_ALT_Q -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_Q\\nsnippet K_CTRL_SHIFT_Q\\n\\tK_CTRL_SHIFT_Q -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_Q\\nsnippet K_CTRL_ALT_SHIFT_Q\\n\\tK_CTRL_ALT_SHIFT_Q -> { ${1://cuerpo...} }\\n\\n# K_R\\nsnippet K_R\\n\\tK_R -> { ${1://cuerpo...} }\\n# K_CTRL_R\\nsnippet K_CTRL_R\\n\\tK_CTRL_R -> { ${1://cuerpo...} }\\n# K_ALT_R\\nsnippet K_ALT_R\\n\\tK_ALT_R -> { ${1://cuerpo...} }\\n# K_SHIFT_R\\nsnippet K_SHIFT_R\\n\\tK_SHIFT_R -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_R\\nsnippet K_CTRL_ALT_R\\n\\tK_CTRL_ALT_R -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_R\\nsnippet K_CTRL_SHIFT_R\\n\\tK_CTRL_SHIFT_R -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_R\\nsnippet K_CTRL_ALT_SHIFT_R\\n\\tK_CTRL_ALT_SHIFT_R -> { ${1://cuerpo...} }\\n\\n# K_S\\nsnippet K_S\\n\\tK_S -> { ${1://cuerpo...} }\\n# K_CTRL_S\\nsnippet K_CTRL_S\\n\\tK_CTRL_S -> { ${1://cuerpo...} }\\n# K_ALT_S\\nsnippet K_ALT_S\\n\\tK_ALT_S -> { ${1://cuerpo...} }\\n# K_SHIFT_S\\nsnippet K_SHIFT_S\\n\\tK_SHIFT_S -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_S\\nsnippet K_CTRL_ALT_S\\n\\tK_CTRL_ALT_S -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_S\\nsnippet K_CTRL_SHIFT_S\\n\\tK_CTRL_SHIFT_S -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_S\\nsnippet K_CTRL_ALT_SHIFT_S\\n\\tK_CTRL_ALT_SHIFT_S -> { ${1://cuerpo...} }\\n\\n# K_T\\nsnippet K_T\\n\\tK_T -> { ${1://cuerpo...} }\\n# K_CTRL_T\\nsnippet K_CTRL_T\\n\\tK_CTRL_T -> { ${1://cuerpo...} }\\n# K_ALT_T\\nsnippet K_ALT_T\\n\\tK_ALT_T -> { ${1://cuerpo...} }\\n# K_SHIFT_T\\nsnippet K_SHIFT_T\\n\\tK_SHIFT_T -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_T\\nsnippet K_CTRL_ALT_T\\n\\tK_CTRL_ALT_T -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_T\\nsnippet K_CTRL_SHIFT_T\\n\\tK_CTRL_SHIFT_T -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_T\\nsnippet K_CTRL_ALT_SHIFT_T\\n\\tK_CTRL_ALT_SHIFT_T -> { ${1://cuerpo...} }\\n\\n# K_U\\nsnippet K_U\\n\\tK_U -> { ${1://cuerpo...} }\\n# K_CTRL_U\\nsnippet K_CTRL_U\\n\\tK_CTRL_U -> { ${1://cuerpo...} }\\n# K_ALT_U\\nsnippet K_ALT_U\\n\\tK_ALT_U -> { ${1://cuerpo...} }\\n# K_SHIFT_U\\nsnippet K_SHIFT_U\\n\\tK_SHIFT_U -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_U\\nsnippet K_CTRL_ALT_U\\n\\tK_CTRL_ALT_U -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_U\\nsnippet K_CTRL_SHIFT_U\\n\\tK_CTRL_SHIFT_U -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_U\\nsnippet K_CTRL_ALT_SHIFT_U\\n\\tK_CTRL_ALT_SHIFT_U -> { ${1://cuerpo...} }\\n\\n# K_V\\nsnippet K_V\\n\\tK_V -> { ${1://cuerpo...} }\\n# K_CTRL_V\\nsnippet K_CTRL_V\\n\\tK_CTRL_V -> { ${1://cuerpo...} }\\n# K_ALT_V\\nsnippet K_ALT_V\\n\\tK_ALT_V -> { ${1://cuerpo...} }\\n# K_SHIFT_V\\nsnippet K_SHIFT_V\\n\\tK_SHIFT_V -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_V\\nsnippet K_CTRL_ALT_V\\n\\tK_CTRL_ALT_V -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_V\\nsnippet K_CTRL_SHIFT_V\\n\\tK_CTRL_SHIFT_V -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_V\\nsnippet K_CTRL_ALT_SHIFT_V\\n\\tK_CTRL_ALT_SHIFT_V -> { ${1://cuerpo...} }\\n\\n# K_W\\nsnippet K_W\\n\\tK_W -> { ${1://cuerpo...} }\\n# K_CTRL_W\\nsnippet K_CTRL_W\\n\\tK_CTRL_W -> { ${1://cuerpo...} }\\n# K_ALT_W\\nsnippet K_ALT_W\\n\\tK_ALT_W -> { ${1://cuerpo...} }\\n# K_SHIFT_W\\nsnippet K_SHIFT_W\\n\\tK_SHIFT_W -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_W\\nsnippet K_CTRL_ALT_W\\n\\tK_CTRL_ALT_W -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_W\\nsnippet K_CTRL_SHIFT_W\\n\\tK_CTRL_SHIFT_W -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_W\\nsnippet K_CTRL_ALT_SHIFT_W\\n\\tK_CTRL_ALT_SHIFT_W -> { ${1://cuerpo...} }\\n\\n# K_X\\nsnippet K_X\\n\\tK_X -> { ${1://cuerpo...} }\\n# K_CTRL_X\\nsnippet K_CTRL_X\\n\\tK_CTRL_X -> { ${1://cuerpo...} }\\n# K_ALT_X\\nsnippet K_ALT_X\\n\\tK_ALT_X -> { ${1://cuerpo...} }\\n# K_SHIFT_X\\nsnippet K_SHIFT_X\\n\\tK_SHIFT_X -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_X\\nsnippet K_CTRL_ALT_X\\n\\tK_CTRL_ALT_X -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_X\\nsnippet K_CTRL_SHIFT_X\\n\\tK_CTRL_SHIFT_X -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_X\\nsnippet K_CTRL_ALT_SHIFT_X\\n\\tK_CTRL_ALT_SHIFT_X -> { ${1://cuerpo...} }\\n\\n# K_Y\\nsnippet K_Y\\n\\tK_Y -> { ${1://cuerpo...} }\\n# K_CTRL_Y\\nsnippet K_CTRL_Y\\n\\tK_CTRL_Y -> { ${1://cuerpo...} }\\n# K_ALT_Y\\nsnippet K_ALT_Y\\n\\tK_ALT_Y -> { ${1://cuerpo...} }\\n# K_SHIFT_Y\\nsnippet K_SHIFT_Y\\n\\tK_SHIFT_Y -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_Y\\nsnippet K_CTRL_ALT_Y\\n\\tK_CTRL_ALT_Y -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_Y\\nsnippet K_CTRL_SHIFT_Y\\n\\tK_CTRL_SHIFT_Y -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_Y\\nsnippet K_CTRL_ALT_SHIFT_Y\\n\\tK_CTRL_ALT_SHIFT_Y -> { ${1://cuerpo...} }\\n\\n# K_Z\\nsnippet K_Z\\n\\tK_Z -> { ${1://cuerpo...} }\\n# K_CTRL_Z\\nsnippet K_CTRL_Z\\n\\tK_CTRL_Z -> { ${1://cuerpo...} }\\n# K_ALT_Z\\nsnippet K_ALT_Z\\n\\tK_ALT_Z -> { ${1://cuerpo...} }\\n# K_SHIFT_Z\\nsnippet K_SHIFT_Z\\n\\tK_SHIFT_Z -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_Z\\nsnippet K_CTRL_ALT_Z\\n\\tK_CTRL_ALT_Z -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_Z\\nsnippet K_CTRL_SHIFT_Z\\n\\tK_CTRL_SHIFT_Z -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_Z\\nsnippet K_CTRL_ALT_SHIFT_Z\\n\\tK_CTRL_ALT_SHIFT_Z -> { ${1://cuerpo...} }\\n\\n# K_0\\nsnippet K_0\\n\\tK_0 -> { ${1://cuerpo...} }\\n# K_CTRL_0\\nsnippet K_CTRL_0\\n\\tK_CTRL_0 -> { ${1://cuerpo...} }\\n# K_ALT_0\\nsnippet K_ALT_0\\n\\tK_ALT_0 -> { ${1://cuerpo...} }\\n# K_SHIFT_0\\nsnippet K_SHIFT_0\\n\\tK_SHIFT_0 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_0\\nsnippet K_CTRL_ALT_0\\n\\tK_CTRL_ALT_0 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_0\\nsnippet K_CTRL_SHIFT_0\\n\\tK_CTRL_SHIFT_0 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_0\\nsnippet K_CTRL_ALT_SHIFT_0\\n\\tK_CTRL_ALT_SHIFT_0 -> { ${1://cuerpo...} }\\n\\n# K_1\\nsnippet K_1\\n\\tK_1 -> { ${1://cuerpo...} }\\n# K_CTRL_1\\nsnippet K_CTRL_1\\n\\tK_CTRL_1 -> { ${1://cuerpo...} }\\n# K_ALT_1\\nsnippet K_ALT_1\\n\\tK_ALT_1 -> { ${1://cuerpo...} }\\n# K_SHIFT_1\\nsnippet K_SHIFT_1\\n\\tK_SHIFT_1 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_1\\nsnippet K_CTRL_ALT_1\\n\\tK_CTRL_ALT_1 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_1\\nsnippet K_CTRL_SHIFT_1\\n\\tK_CTRL_SHIFT_1 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_1\\nsnippet K_CTRL_ALT_SHIFT_1\\n\\tK_CTRL_ALT_SHIFT_1 -> { ${1://cuerpo...} }\\n\\n# K_2\\nsnippet K_2\\n\\tK_2 -> { ${1://cuerpo...} }\\n# K_CTRL_2\\nsnippet K_CTRL_2\\n\\tK_CTRL_2 -> { ${1://cuerpo...} }\\n# K_ALT_2\\nsnippet K_ALT_2\\n\\tK_ALT_2 -> { ${1://cuerpo...} }\\n# K_SHIFT_2\\nsnippet K_SHIFT_2\\n\\tK_SHIFT_2 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_2\\nsnippet K_CTRL_ALT_2\\n\\tK_CTRL_ALT_2 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_2\\nsnippet K_CTRL_SHIFT_2\\n\\tK_CTRL_SHIFT_2 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_2\\nsnippet K_CTRL_ALT_SHIFT_2\\n\\tK_CTRL_ALT_SHIFT_2 -> { ${1://cuerpo...} }\\n\\n# K_3\\nsnippet K_3\\n\\tK_3 -> { ${1://cuerpo...} }\\n# K_CTRL_3\\nsnippet K_CTRL_3\\n\\tK_CTRL_3 -> { ${1://cuerpo...} }\\n# K_ALT_3\\nsnippet K_ALT_3\\n\\tK_ALT_3 -> { ${1://cuerpo...} }\\n# K_SHIFT_3\\nsnippet K_SHIFT_3\\n\\tK_SHIFT_3 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_3\\nsnippet K_CTRL_ALT_3\\n\\tK_CTRL_ALT_3 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_3\\nsnippet K_CTRL_SHIFT_3\\n\\tK_CTRL_SHIFT_3 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_3\\nsnippet K_CTRL_ALT_SHIFT_3\\n\\tK_CTRL_ALT_SHIFT_3 -> { ${1://cuerpo...} }\\n\\n# K_4\\nsnippet K_4\\n\\tK_4 -> { ${1://cuerpo...} }\\n# K_CTRL_4\\nsnippet K_CTRL_4\\n\\tK_CTRL_4 -> { ${1://cuerpo...} }\\n# K_ALT_4\\nsnippet K_ALT_4\\n\\tK_ALT_4 -> { ${1://cuerpo...} }\\n# K_SHIFT_4\\nsnippet K_SHIFT_4\\n\\tK_SHIFT_4 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_4\\nsnippet K_CTRL_ALT_4\\n\\tK_CTRL_ALT_4 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_4\\nsnippet K_CTRL_SHIFT_4\\n\\tK_CTRL_SHIFT_4 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_4\\nsnippet K_CTRL_ALT_SHIFT_4\\n\\tK_CTRL_ALT_SHIFT_4 -> { ${1://cuerpo...} }\\n\\n# K_5\\nsnippet K_5\\n\\tK_5 -> { ${1://cuerpo...} }\\n# K_CTRL_5\\nsnippet K_CTRL_5\\n\\tK_CTRL_5 -> { ${1://cuerpo...} }\\n# K_ALT_5\\nsnippet K_ALT_5\\n\\tK_ALT_5 -> { ${1://cuerpo...} }\\n# K_SHIFT_5\\nsnippet K_SHIFT_5\\n\\tK_SHIFT_5 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_5\\nsnippet K_CTRL_ALT_5\\n\\tK_CTRL_ALT_5 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_5\\nsnippet K_CTRL_SHIFT_5\\n\\tK_CTRL_SHIFT_5 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_5\\nsnippet K_CTRL_ALT_SHIFT_5\\n\\tK_CTRL_ALT_SHIFT_5 -> { ${1://cuerpo...} }\\n\\n# K_6\\nsnippet K_6\\n\\tK_6 -> { ${1://cuerpo...} }\\n# K_CTRL_6\\nsnippet K_CTRL_6\\n\\tK_CTRL_6 -> { ${1://cuerpo...} }\\n# K_ALT_6\\nsnippet K_ALT_6\\n\\tK_ALT_6 -> { ${1://cuerpo...} }\\n# K_SHIFT_6\\nsnippet K_SHIFT_6\\n\\tK_SHIFT_6 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_6\\nsnippet K_CTRL_ALT_6\\n\\tK_CTRL_ALT_6 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_6\\nsnippet K_CTRL_SHIFT_6\\n\\tK_CTRL_SHIFT_6 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_6\\nsnippet K_CTRL_ALT_SHIFT_6\\n\\tK_CTRL_ALT_SHIFT_6 -> { ${1://cuerpo...} }\\n\\n# K_7\\nsnippet K_7\\n\\tK_7 -> { ${1://cuerpo...} }\\n# K_CTRL_7\\nsnippet K_CTRL_7\\n\\tK_CTRL_7 -> { ${1://cuerpo...} }\\n# K_ALT_7\\nsnippet K_ALT_7\\n\\tK_ALT_7 -> { ${1://cuerpo...} }\\n# K_SHIFT_7\\nsnippet K_SHIFT_7\\n\\tK_SHIFT_7 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_7\\nsnippet K_CTRL_ALT_7\\n\\tK_CTRL_ALT_7 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_7\\nsnippet K_CTRL_SHIFT_7\\n\\tK_CTRL_SHIFT_7 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_7\\nsnippet K_CTRL_ALT_SHIFT_7\\n\\tK_CTRL_ALT_SHIFT_7 -> { ${1://cuerpo...} }\\n\\n# K_8\\nsnippet K_8\\n\\tK_8 -> { ${1://cuerpo...} }\\n# K_CTRL_8\\nsnippet K_CTRL_8\\n\\tK_CTRL_8 -> { ${1://cuerpo...} }\\n# K_ALT_8\\nsnippet K_ALT_8\\n\\tK_ALT_8 -> { ${1://cuerpo...} }\\n# K_SHIFT_8\\nsnippet K_SHIFT_8\\n\\tK_SHIFT_8 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_8\\nsnippet K_CTRL_ALT_8\\n\\tK_CTRL_ALT_8 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_8\\nsnippet K_CTRL_SHIFT_8\\n\\tK_CTRL_SHIFT_8 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_8\\nsnippet K_CTRL_ALT_SHIFT_8\\n\\tK_CTRL_ALT_SHIFT_8 -> { ${1://cuerpo...} }\\n\\n# K_9\\nsnippet K_9\\n\\tK_9 -> { ${1://cuerpo...} }\\n# K_CTRL_9\\nsnippet K_CTRL_9\\n\\tK_CTRL_9 -> { ${1://cuerpo...} }\\n# K_ALT_9\\nsnippet K_ALT_9\\n\\tK_ALT_9 -> { ${1://cuerpo...} }\\n# K_SHIFT_9\\nsnippet K_SHIFT_9\\n\\tK_SHIFT_9 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_9\\nsnippet K_CTRL_ALT_9\\n\\tK_CTRL_ALT_9 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_9\\nsnippet K_CTRL_SHIFT_9\\n\\tK_CTRL_SHIFT_9 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_9\\nsnippet K_CTRL_ALT_SHIFT_9\\n\\tK_CTRL_ALT_SHIFT_9 -> { ${1://cuerpo...} }\\n\\n# K_F1\\nsnippet K_F1\\n\\tK_F1 -> { ${1://cuerpo...} }\\n# K_CTRL_F1\\nsnippet K_CTRL_F1\\n\\tK_CTRL_F1 -> { ${1://cuerpo...} }\\n# K_ALT_F1\\nsnippet K_ALT_F1\\n\\tK_ALT_F1 -> { ${1://cuerpo...} }\\n# K_SHIFT_F1\\nsnippet K_SHIFT_F1\\n\\tK_SHIFT_F1 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_F1\\nsnippet K_CTRL_ALT_F1\\n\\tK_CTRL_ALT_F1 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_F1\\nsnippet K_CTRL_SHIFT_F1\\n\\tK_CTRL_SHIFT_F1 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_F1\\nsnippet K_CTRL_ALT_SHIFT_F1\\n\\tK_CTRL_ALT_SHIFT_F1 -> { ${1://cuerpo...} }\\n\\n# K_F2\\nsnippet K_F2\\n\\tK_F2 -> { ${1://cuerpo...} }\\n# K_CTRL_F2\\nsnippet K_CTRL_F2\\n\\tK_CTRL_F2 -> { ${1://cuerpo...} }\\n# K_ALT_F2\\nsnippet K_ALT_F2\\n\\tK_ALT_F2 -> { ${1://cuerpo...} }\\n# K_SHIFT_F2\\nsnippet K_SHIFT_F2\\n\\tK_SHIFT_F2 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_F2\\nsnippet K_CTRL_ALT_F2\\n\\tK_CTRL_ALT_F2 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_F2\\nsnippet K_CTRL_SHIFT_F2\\n\\tK_CTRL_SHIFT_F2 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_F2\\nsnippet K_CTRL_ALT_SHIFT_F2\\n\\tK_CTRL_ALT_SHIFT_F2 -> { ${1://cuerpo...} }\\n\\n# K_F3\\nsnippet K_F3\\n\\tK_F3 -> { ${1://cuerpo...} }\\n# K_CTRL_F3\\nsnippet K_CTRL_F3\\n\\tK_CTRL_F3 -> { ${1://cuerpo...} }\\n# K_ALT_F3\\nsnippet K_ALT_F3\\n\\tK_ALT_F3 -> { ${1://cuerpo...} }\\n# K_SHIFT_F3\\nsnippet K_SHIFT_F3\\n\\tK_SHIFT_F3 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_F3\\nsnippet K_CTRL_ALT_F3\\n\\tK_CTRL_ALT_F3 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_F3\\nsnippet K_CTRL_SHIFT_F3\\n\\tK_CTRL_SHIFT_F3 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_F3\\nsnippet K_CTRL_ALT_SHIFT_F3\\n\\tK_CTRL_ALT_SHIFT_F3 -> { ${1://cuerpo...} }\\n\\n# K_A\\nsnippet K_A\\n\\tK_A -> { ${1://cuerpo...} }\\n# K_CTRL_A\\nsnippet K_CTRL_A\\n\\tK_CTRL_A -> { ${1://cuerpo...} }\\n# K_ALT_A\\nsnippet K_ALT_A\\n\\tK_ALT_A -> { ${1://cuerpo...} }\\n# K_SHIFT_A\\nsnippet K_SHIFT_A\\n\\tK_SHIFT_A -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_A\\nsnippet K_CTRL_ALT_A\\n\\tK_CTRL_ALT_A -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_A\\nsnippet K_CTRL_SHIFT_A\\n\\tK_CTRL_SHIFT_A -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_A\\nsnippet K_CTRL_ALT_SHIFT_A\\n\\tK_CTRL_ALT_SHIFT_A -> { ${1://cuerpo...} }\\n\\n# K_F5\\nsnippet K_F5\\n\\tK_F5 -> { ${1://cuerpo...} }\\n# K_CTRL_F5\\nsnippet K_CTRL_F5\\n\\tK_CTRL_F5 -> { ${1://cuerpo...} }\\n# K_ALT_F5\\nsnippet K_ALT_F5\\n\\tK_ALT_F5 -> { ${1://cuerpo...} }\\n# K_SHIFT_F5\\nsnippet K_SHIFT_F5\\n\\tK_SHIFT_F5 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_F5\\nsnippet K_CTRL_ALT_F5\\n\\tK_CTRL_ALT_F5 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_F5\\nsnippet K_CTRL_SHIFT_F5\\n\\tK_CTRL_SHIFT_F5 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_F5\\nsnippet K_CTRL_ALT_SHIFT_F5\\n\\tK_CTRL_ALT_SHIFT_F5 -> { ${1://cuerpo...} }\\n\\n# K_F6\\nsnippet K_F6\\n\\tK_F6 -> { ${1://cuerpo...} }\\n# K_CTRL_F6\\nsnippet K_CTRL_F6\\n\\tK_CTRL_F6 -> { ${1://cuerpo...} }\\n# K_ALT_F6\\nsnippet K_ALT_F6\\n\\tK_ALT_F6 -> { ${1://cuerpo...} }\\n# K_SHIFT_F6\\nsnippet K_SHIFT_F6\\n\\tK_SHIFT_F6 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_F6\\nsnippet K_CTRL_ALT_F6\\n\\tK_CTRL_ALT_F6 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_F6\\nsnippet K_CTRL_SHIFT_F6\\n\\tK_CTRL_SHIFT_F6 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_F6\\nsnippet K_CTRL_ALT_SHIFT_F6\\n\\tK_CTRL_ALT_SHIFT_F6 -> { ${1://cuerpo...} }\\n\\n# K_F7\\nsnippet K_F7\\n\\tK_F7 -> { ${1://cuerpo...} }\\n# K_CTRL_F7\\nsnippet K_CTRL_F7\\n\\tK_CTRL_F7 -> { ${1://cuerpo...} }\\n# K_ALT_F7\\nsnippet K_ALT_F7\\n\\tK_ALT_F7 -> { ${1://cuerpo...} }\\n# K_SHIFT_F7\\nsnippet K_SHIFT_F7\\n\\tK_SHIFT_F7 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_F7\\nsnippet K_CTRL_ALT_F7\\n\\tK_CTRL_ALT_F7 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_F7\\nsnippet K_CTRL_SHIFT_F7\\n\\tK_CTRL_SHIFT_F7 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_F7\\nsnippet K_CTRL_ALT_SHIFT_F7\\n\\tK_CTRL_ALT_SHIFT_F7 -> { ${1://cuerpo...} }\\n\\n# K_F8\\nsnippet K_F8\\n\\tK_F8 -> { ${1://cuerpo...} }\\n# K_CTRL_F8\\nsnippet K_CTRL_F8\\n\\tK_CTRL_F8 -> { ${1://cuerpo...} }\\n# K_ALT_F8\\nsnippet K_ALT_F8\\n\\tK_ALT_F8 -> { ${1://cuerpo...} }\\n# K_SHIFT_F8\\nsnippet K_SHIFT_F8\\n\\tK_SHIFT_F8 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_F8\\nsnippet K_CTRL_ALT_F8\\n\\tK_CTRL_ALT_F8 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_F8\\nsnippet K_CTRL_SHIFT_F8\\n\\tK_CTRL_SHIFT_F8 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_F8\\nsnippet K_CTRL_ALT_SHIFT_F8\\n\\tK_CTRL_ALT_SHIFT_F8 -> { ${1://cuerpo...} }\\n\\n# K_F9\\nsnippet K_F9\\n\\tK_F9 -> { ${1://cuerpo...} }\\n# K_CTRL_F9\\nsnippet K_CTRL_F9\\n\\tK_CTRL_F9 -> { ${1://cuerpo...} }\\n# K_ALT_F9\\nsnippet K_ALT_F9\\n\\tK_ALT_F9 -> { ${1://cuerpo...} }\\n# K_SHIFT_F9\\nsnippet K_SHIFT_F9\\n\\tK_SHIFT_F9 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_F9\\nsnippet K_CTRL_ALT_F9\\n\\tK_CTRL_ALT_F9 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_F9\\nsnippet K_CTRL_SHIFT_F9\\n\\tK_CTRL_SHIFT_F9 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_F9\\nsnippet K_CTRL_ALT_SHIFT_F9\\n\\tK_CTRL_ALT_SHIFT_F9 -> { ${1://cuerpo...} }\\n\\n# K_F10\\nsnippet K_F10\\n\\tK_F10 -> { ${1://cuerpo...} }\\n# K_CTRL_F10\\nsnippet K_CTRL_F10\\n\\tK_CTRL_F10 -> { ${1://cuerpo...} }\\n# K_ALT_F10\\nsnippet K_ALT_F10\\n\\tK_ALT_F10 -> { ${1://cuerpo...} }\\n# K_SHIFT_F10\\nsnippet K_SHIFT_F10\\n\\tK_SHIFT_F10 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_F10\\nsnippet K_CTRL_ALT_F10\\n\\tK_CTRL_ALT_F10 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_F10\\nsnippet K_CTRL_SHIFT_F10\\n\\tK_CTRL_SHIFT_F10 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_F10\\nsnippet K_CTRL_ALT_SHIFT_F10\\n\\tK_CTRL_ALT_SHIFT_F10 -> { ${1://cuerpo...} }\\n\\n# K_F11\\nsnippet K_F11\\n\\tK_F11 -> { ${1://cuerpo...} }\\n# K_CTRL_F11\\nsnippet K_CTRL_F11\\n\\tK_CTRL_F11 -> { ${1://cuerpo...} }\\n# K_ALT_F11\\nsnippet K_ALT_F11\\n\\tK_ALT_F11 -> { ${1://cuerpo...} }\\n# K_SHIFT_F11\\nsnippet K_SHIFT_F11\\n\\tK_SHIFT_F11 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_F11\\nsnippet K_CTRL_ALT_F11\\n\\tK_CTRL_ALT_F11 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_F11\\nsnippet K_CTRL_SHIFT_F11\\n\\tK_CTRL_SHIFT_F11 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_F11\\nsnippet K_CTRL_ALT_SHIFT_F11\\n\\tK_CTRL_ALT_SHIFT_F11 -> { ${1://cuerpo...} }\\n\\n# K_F12\\nsnippet K_F12\\n\\tK_F12 -> { ${1://cuerpo...} }\\n# K_CTRL_F12\\nsnippet K_CTRL_F12\\n\\tK_CTRL_F12 -> { ${1://cuerpo...} }\\n# K_ALT_F12\\nsnippet K_ALT_F12\\n\\tK_ALT_F12 -> { ${1://cuerpo...} }\\n# K_SHIFT_F12\\nsnippet K_SHIFT_F12\\n\\tK_SHIFT_F12 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_F12\\nsnippet K_CTRL_ALT_F12\\n\\tK_CTRL_ALT_F12 -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_F12\\nsnippet K_CTRL_SHIFT_F12\\n\\tK_CTRL_SHIFT_F12 -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_F12\\nsnippet K_CTRL_ALT_SHIFT_F12\\n\\tK_CTRL_ALT_SHIFT_F12 -> { ${1://cuerpo...} }\\n\\n# K_RETURN\\nsnippet K_RETURN\\n\\tK_RETURN -> { ${1://cuerpo...} }\\n# K_CTRL_RETURN\\nsnippet K_CTRL_RETURN\\n\\tK_CTRL_RETURN -> { ${1://cuerpo...} }\\n# K_ALT_RETURN\\nsnippet K_ALT_RETURN\\n\\tK_ALT_RETURN -> { ${1://cuerpo...} }\\n# K_SHIFT_RETURN\\nsnippet K_SHIFT_RETURN\\n\\tK_SHIFT_RETURN -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_RETURN\\nsnippet K_CTRL_ALT_RETURN\\n\\tK_CTRL_ALT_RETURN -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_RETURN\\nsnippet K_CTRL_SHIFT_RETURN\\n\\tK_CTRL_SHIFT_RETURN -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_RETURN\\nsnippet K_CTRL_ALT_SHIFT_RETURN\\n\\tK_CTRL_ALT_SHIFT_RETURN -> { ${1://cuerpo...} }\\n\\n# K_SPACE\\nsnippet K_SPACE\\n\\tK_SPACE -> { ${1://cuerpo...} }\\n# K_CTRL_SPACE\\nsnippet K_CTRL_SPACE\\n\\tK_CTRL_SPACE -> { ${1://cuerpo...} }\\n# K_ALT_SPACE\\nsnippet K_ALT_SPACE\\n\\tK_ALT_SPACE -> { ${1://cuerpo...} }\\n# K_SHIFT_SPACE\\nsnippet K_SHIFT_SPACE\\n\\tK_SHIFT_SPACE -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SPACE\\nsnippet K_CTRL_ALT_SPACE\\n\\tK_CTRL_ALT_SPACE -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_SPACE\\nsnippet K_CTRL_SHIFT_SPACE\\n\\tK_CTRL_SHIFT_SPACE -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_SPACE\\nsnippet K_CTRL_ALT_SHIFT_SPACE\\n\\tK_CTRL_ALT_SHIFT_SPACE -> { ${1://cuerpo...} }\\n\\n# K_ESCAPE\\nsnippet K_ESCAPE\\n\\tK_ESCAPE -> { ${1://cuerpo...} }\\n# K_CTRL_ESCAPE\\nsnippet K_CTRL_ESCAPE\\n\\tK_CTRL_ESCAPE -> { ${1://cuerpo...} }\\n# K_ALT_ESCAPE\\nsnippet K_ALT_ESCAPE\\n\\tK_ALT_ESCAPE -> { ${1://cuerpo...} }\\n# K_SHIFT_ESCAPE\\nsnippet K_SHIFT_ESCAPE\\n\\tK_SHIFT_ESCAPE -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_ESCAPE\\nsnippet K_CTRL_ALT_ESCAPE\\n\\tK_CTRL_ALT_ESCAPE -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_ESCAPE\\nsnippet K_CTRL_SHIFT_ESCAPE\\n\\tK_CTRL_SHIFT_ESCAPE -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_ESCAPE\\nsnippet K_CTRL_ALT_SHIFT_ESCAPE\\n\\tK_CTRL_ALT_SHIFT_ESCAPE -> { ${1://cuerpo...} }\\n\\n# K_BACKSPACE\\nsnippet K_BACKSPACE\\n\\tK_BACKSPACE -> { ${1://cuerpo...} }\\n# K_CTRL_BACKSPACE\\nsnippet K_CTRL_BACKSPACE\\n\\tK_CTRL_BACKSPACE -> { ${1://cuerpo...} }\\n# K_ALT_BACKSPACE\\nsnippet K_ALT_BACKSPACE\\n\\tK_ALT_BACKSPACE -> { ${1://cuerpo...} }\\n# K_SHIFT_BACKSPACE\\nsnippet K_SHIFT_BACKSPACE\\n\\tK_SHIFT_BACKSPACE -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_BACKSPACE\\nsnippet K_CTRL_ALT_BACKSPACE\\n\\tK_CTRL_ALT_BACKSPACE -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_BACKSPACE\\nsnippet K_CTRL_SHIFT_BACKSPACE\\n\\tK_CTRL_SHIFT_BACKSPACE -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_BACKSPACE\\nsnippet K_CTRL_ALT_SHIFT_BACKSPACE\\n\\tK_CTRL_ALT_SHIFT_BACKSPACE -> { ${1://cuerpo...} }\\n\\n# K_TAB\\nsnippet K_TAB\\n\\tK_TAB -> { ${1://cuerpo...} }\\n# K_CTRL_TAB\\nsnippet K_CTRL_TAB\\n\\tK_CTRL_TAB -> { ${1://cuerpo...} }\\n# K_ALT_TAB\\nsnippet K_ALT_TAB\\n\\tK_ALT_TAB -> { ${1://cuerpo...} }\\n# K_SHIFT_TAB\\nsnippet K_SHIFT_TAB\\n\\tK_SHIFT_TAB -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_TAB\\nsnippet K_CTRL_ALT_TAB\\n\\tK_CTRL_ALT_TAB -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_TAB\\nsnippet K_CTRL_SHIFT_TAB\\n\\tK_CTRL_SHIFT_TAB -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_TAB\\nsnippet K_CTRL_ALT_SHIFT_TAB\\n\\tK_CTRL_ALT_SHIFT_TAB -> { ${1://cuerpo...} }\\n\\n# K_UP\\nsnippet K_UP\\n\\tK_UP -> { ${1://cuerpo...} }\\n# K_CTRL_UP\\nsnippet K_CTRL_UP\\n\\tK_CTRL_UP -> { ${1://cuerpo...} }\\n# K_ALT_UP\\nsnippet K_ALT_UP\\n\\tK_ALT_UP -> { ${1://cuerpo...} }\\n# K_SHIFT_UP\\nsnippet K_SHIFT_UP\\n\\tK_SHIFT_UP -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_UP\\nsnippet K_CTRL_ALT_UP\\n\\tK_CTRL_ALT_UP -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_UP\\nsnippet K_CTRL_SHIFT_UP\\n\\tK_CTRL_SHIFT_UP -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_UP\\nsnippet K_CTRL_ALT_SHIFT_UP\\n\\tK_CTRL_ALT_SHIFT_UP -> { ${1://cuerpo...} }\\n\\n# K_DOWN\\nsnippet K_DOWN\\n\\tK_DOWN -> { ${1://cuerpo...} }\\n# K_CTRL_DOWN\\nsnippet K_CTRL_DOWN\\n\\tK_CTRL_DOWN -> { ${1://cuerpo...} }\\n# K_ALT_DOWN\\nsnippet K_ALT_DOWN\\n\\tK_ALT_DOWN -> { ${1://cuerpo...} }\\n# K_SHIFT_DOWN\\nsnippet K_SHIFT_DOWN\\n\\tK_SHIFT_DOWN -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_DOWN\\nsnippet K_CTRL_ALT_DOWN\\n\\tK_CTRL_ALT_DOWN -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_DOWN\\nsnippet K_CTRL_SHIFT_DOWN\\n\\tK_CTRL_SHIFT_DOWN -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_DOWN\\nsnippet K_CTRL_ALT_SHIFT_DOWN\\n\\tK_CTRL_ALT_SHIFT_DOWN -> { ${1://cuerpo...} }\\n\\n# K_LEFT\\nsnippet K_LEFT\\n\\tK_LEFT -> { ${1://cuerpo...} }\\n# K_CTRL_LEFT\\nsnippet K_CTRL_LEFT\\n\\tK_CTRL_LEFT -> { ${1://cuerpo...} }\\n# K_ALT_LEFT\\nsnippet K_ALT_LEFT\\n\\tK_ALT_LEFT -> { ${1://cuerpo...} }\\n# K_SHIFT_LEFT\\nsnippet K_SHIFT_LEFT\\n\\tK_SHIFT_LEFT -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_LEFT\\nsnippet K_CTRL_ALT_LEFT\\n\\tK_CTRL_ALT_LEFT -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_LEFT\\nsnippet K_CTRL_SHIFT_LEFT\\n\\tK_CTRL_SHIFT_LEFT -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_LEFT\\nsnippet K_CTRL_ALT_SHIFT_LEFT\\n\\tK_CTRL_ALT_SHIFT_LEFT -> { ${1://cuerpo...} }\\n\\n# K_RIGHT\\nsnippet K_RIGHT\\n\\tK_RIGHT -> { ${1://cuerpo...} }\\n# K_CTRL_RIGHT\\nsnippet K_CTRL_RIGHT\\n\\tK_CTRL_RIGHT -> { ${1://cuerpo...} }\\n# K_ALT_RIGHT\\nsnippet K_ALT_RIGHT\\n\\tK_ALT_RIGHT -> { ${1://cuerpo...} }\\n# K_SHIFT_RIGHT\\nsnippet K_SHIFT_RIGHT\\n\\tK_SHIFT_RIGHT -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_RIGHT\\nsnippet K_CTRL_ALT_RIGHT\\n\\tK_CTRL_ALT_RIGHT -> { ${1://cuerpo...} }\\n# K_CTRL_SHIFT_RIGHT\\nsnippet K_CTRL_SHIFT_RIGHT\\n\\tK_CTRL_SHIFT_RIGHT -> { ${1://cuerpo...} }\\n# K_CTRL_ALT_SHIFT_RIGHT\\nsnippet K_CTRL_ALT_SHIFT_RIGHT\\n\\tK_CTRL_ALT_SHIFT_RIGHT -> { ${1://cuerpo...} }\\n\\n# recorrido (simple)\\nsnippet recorrido (simple)\\n\\t${1:// Ir al inicio}\\n\\twhile (not ${2:// es \\u00FAltimo elemento}) {\\n\\t\\t${3:// Procesar el elemento}\\n\\t\\t${4:// Ir al pr\\u00F3ximo elemento}\\n\\t}\\n\\t${5:// Finalizar}\\n\\n# recorrido (de acumulaci\\u00F3n)\\nsnippet recorrido (de acumulaci\\u00F3n)\\n\\t${1:// Ir al inicio}\\n\\t${2:cantidadVistos} := ${3:// contar elementos en lugar actual}\\n\\twhile (not ${4:// es \\u00FAltimo elemento}) {\\n\\t\\t${4:// Ir al pr\\u00F3ximo elemento}\\n\\t\\t${2:cantidadVistos} := ${2:cantidadVistos} + ${3:// contar elementos en lugar actual}\\n\\t}\\n\\treturn (${2:cantidadVistos})\\n\\n# recorrido (de b\\u00FAsqueda)\\nsnippet recorrido (de b\\u00FAsqueda)\\n\\t${1:// Ir al inicio}\\n\\twhile (not ${2:// encontr\\u00E9 lo que buscaba}) {\\n\\t\\t${3:// Ir al pr\\u00F3ximo elemento}\\n\\t}\\n\\treturn (${2:// encontr\\u00E9 lo que buscaba })\\n\\n# recorrido (de b\\u00FAsqueda con borde)\\nsnippet recorrido (de b\\u00FAsqueda con borde)\\n\\t${1:// Ir al inicio}\\n\\twhile (not ${2:// encontr\\u00E9 lo que buscaba} && not ${3:// es \\u00FAltimo elemento}) {\\n\\t\\t${4:// Ir al pr\\u00F3ximo elemento}\\n\\t}\\n\\treturn (${2:// encontr\\u00E9 lo que buscaba })\\n\\n# recorrido (de tipos enumerativos)\\nsnippet recorrido (de tipos enumerativos)\\n\\t${1:elementoActual} := ${2:minElemento()}\\n\\twhile (${1:elementoActual} /= ${3:maxElemento()}) {\\n\\t\\t${4:// Procesar con elemento actual}\\n\\t\\t${1:elementoActual} := siguiente(${1:elementoActual})\\n\\t}\\n\\t${4:// Procesar con elemento actual}\\n\\n# recorrido (de b\\u00FAsqueda sobre lista)\\nsnippet recorrido (de b\\u00FAsqueda sobre lista)\\n\\t${1:listaRecorrida} := ${2:lista}\\n\\twhile (primero(${1:listaRecorrida}) /= ${3://elemento buscado}) {\\n\\t\\t${1:elementoActual} := sinElPrimero(${1:elementoActual})\\n\\t}\\n\\treturn (primero(${1:listaRecorrida}))\\n\\n# recorrido (de b\\u00FAsqueda sobre lista con borde)\\nsnippet recorrido (de b\\u00FAsqueda sobre lista con borde)\\n\\t${1:listaRecorrida} := ${2:lista}\\n\\twhile (not esVac\\u00EDa(${1:listaRecorrida}) && primero(${1:listaRecorrida}) /= ${3://elemento buscado}) {\\n\\t\\t${1:elementoActual} := sinElPrimero(${1:elementoActual})\\n\\t}\\n\\treturn (not esVac\\u00EDa(${1:listaRecorrida}))\\n\\n# docs (procedimiento)\\nsnippet docs (procedimiento)\\n\\t/*\\n\\t\\t@PROP\\u00D3SITO: ${1:...}\\n\\t\\t@PRECONDICI\\u00D3N: ${2:...}\\n\\t*/\\n\\n# docs (procedimiento con par\\u00E1metros)\\nsnippet docs (procedimiento con par\\u00E1metros)\\n\\t/*\\n\\t\\t@PROP\\u00D3SITO: ${1:...}\\n\\t\\t@PRECONDICI\\u00D3N: ${2:...}\\n\\t\\t@PAR\\u00C1METROS:\\n\\t\\t\\t\\t* ${3:nombreDelPar\\u00E1metro} : ${4:Tipo} - ${5:descripci\\u00F3n}\\n\\t*/\\n\\n# docs (funci\\u00F3n)\\nsnippet docs (funci\\u00F3n)\\n\\t/*\\n\\t\\t@PROP\\u00D3SITO: ${1:...}\\n\\t\\t@PRECONDICI\\u00D3N: ${2:...}\\n\\t\\t@TIPO: ${3:...}\\n\\t*/\\n\\n# docs (funci\\u00F3n con par\\u00E1metros)\\nsnippet docs (funci\\u00F3n con par\\u00E1metros)\\n\\t/*\\n\\t\\t@PROP\\u00D3SITO: ${1:...}\\n\\t\\t@PRECONDICI\\u00D3N: ${2:...}\\n\\t\\t@PAR\\u00C1METROS:\\n\\t\\t\\t\\t* ${3:nombreDelPar\\u00E1metro} : ${4:Tipo} - ${5:descripci\\u00F3n}\\n\\t\\t@TIPO: ${6:...}\\n\\t*/\\n\";\n\n});\n\nace.define(\"ace/snippets/gobstones\",[\"require\",\"exports\",\"module\",\"ace/snippets/gobstones.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./gobstones.snippets\");\nexports.scope = \"gobstones\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/gobstones\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/golang.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/golang\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/graphqlschema.js",
    "content": "ace.define(\"ace/snippets/graphqlschema.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# Type Snippet\\ntrigger type\\nsnippet type\\n\\ttype ${1:type_name} {\\n\\t\\t${2:type_siblings}\\n\\t}\\n\\n# Input Snippet\\ntrigger input\\nsnippet input\\n\\tinput ${1:input_name} {\\n\\t\\t${2:input_siblings}\\n\\t}\\n\\n# Interface Snippet\\ntrigger interface\\nsnippet interface\\n\\tinterface ${1:interface_name} {\\n\\t\\t${2:interface_siblings}\\n\\t}\\n\\n# Interface Snippet\\ntrigger union\\nsnippet union\\n\\tunion ${1:union_name} = ${2:type} | ${3: type}\\n\\n# Enum Snippet\\ntrigger enum\\nsnippet enum\\n\\tenum ${1:enum_name} {\\n\\t\\t${2:enum_siblings}\\n\\t}\\n\";\n\n});\n\nace.define(\"ace/snippets/graphqlschema\",[\"require\",\"exports\",\"module\",\"ace/snippets/graphqlschema.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./graphqlschema.snippets\");\nexports.scope = \"graphqlschema\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/graphqlschema\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/groovy.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/groovy\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/haml.js",
    "content": "ace.define(\"ace/snippets/haml.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet t\\n\\t%table\\n\\t\\t%tr\\n\\t\\t\\t%th\\n\\t\\t\\t\\t${1:headers}\\n\\t\\t%tr\\n\\t\\t\\t%td\\n\\t\\t\\t\\t${2:headers}\\nsnippet ul\\n\\t%ul\\n\\t\\t%li\\n\\t\\t\\t${1:item}\\n\\t\\t%li\\nsnippet =rp\\n\\t= render :partial => '${1:partial}'\\nsnippet =rpl\\n\\t= render :partial => '${1:partial}', :locals => {}\\nsnippet =rpc\\n\\t= render :partial => '${1:partial}', :collection => @$1\\n\\n\";\n\n});\n\nace.define(\"ace/snippets/haml\",[\"require\",\"exports\",\"module\",\"ace/snippets/haml.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./haml.snippets\");\nexports.scope = \"haml\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/haml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/handlebars.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/handlebars\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/haskell.js",
    "content": "ace.define(\"ace/snippets/haskell.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet lang\\n\\t{-# LANGUAGE ${1:OverloadedStrings} #-}\\nsnippet info\\n\\t-- |\\n\\t-- Module      :  ${1:Module.Namespace}\\n\\t-- Copyright   :  ${2:Author} ${3:2011-2012}\\n\\t-- License     :  ${4:BSD3}\\n\\t--\\n\\t-- Maintainer  :  ${5:email@something.com}\\n\\t-- Stability   :  ${6:experimental}\\n\\t-- Portability :  ${7:unknown}\\n\\t--\\n\\t-- ${8:Description}\\n\\t--\\nsnippet import\\n\\timport           ${1:Data.Text}\\nsnippet import2\\n\\timport           ${1:Data.Text} (${2:head})\\nsnippet importq\\n\\timport qualified ${1:Data.Text} as ${2:T}\\nsnippet inst\\n\\tinstance ${1:Monoid} ${2:Type} where\\n\\t\\t${3}\\nsnippet type\\n\\ttype ${1:Type} = ${2:Type}\\nsnippet data\\n\\tdata ${1:Type} = ${2:$1} ${3:Int}\\nsnippet newtype\\n\\tnewtype ${1:Type} = ${2:$1} ${3:Int}\\nsnippet class\\n\\tclass ${1:Class} a where\\n\\t\\t${2}\\nsnippet module\\n\\tmodule `substitute(substitute(expand('%:r'), '[/\\\\\\\\]','.','g'),'^\\\\%(\\\\l*\\\\.\\\\)\\\\?','','')` (\\n\\t)\\twhere\\n\\t`expand('%') =~ 'Main' ? \\\"\\\\n\\\\nmain = do\\\\n  print \\\\\\\"hello world\\\\\\\"\\\" : \\\"\\\"`\\n\\nsnippet const\\n\\t${1:name} :: ${2:a}\\n\\t$1 = ${3:undefined}\\nsnippet fn\\n\\t${1:fn} :: ${2:a} -> ${3:a}\\n\\t$1 ${4} = ${5:undefined}\\nsnippet fn2\\n\\t${1:fn} :: ${2:a} -> ${3:a} -> ${4:a}\\n\\t$1 ${5} = ${6:undefined}\\nsnippet ap\\n\\t${1:map} ${2:fn} ${3:list}\\nsnippet do\\n\\tdo\\n\\t\\t\\nsnippet \\u03BB\\n\\t\\\\${1:x} -> ${2}\\nsnippet \\\\\\n\\t\\\\${1:x} -> ${2}\\nsnippet <-\\n\\t${1:a} <- ${2:m a}\\nsnippet \\u2190\\n\\t${1:a} <- ${2:m a}\\nsnippet ->\\n\\t${1:m a} -> ${2:a}\\nsnippet \\u2192\\n\\t${1:m a} -> ${2:a}\\nsnippet tup\\n\\t(${1:a}, ${2:b})\\nsnippet tup2\\n\\t(${1:a}, ${2:b}, ${3:c})\\nsnippet tup3\\n\\t(${1:a}, ${2:b}, ${3:c}, ${4:d})\\nsnippet rec\\n\\t${1:Record} { ${2:recFieldA} = ${3:undefined}\\n\\t\\t\\t\\t, ${4:recFieldB} = ${5:undefined}\\n\\t\\t\\t\\t}\\nsnippet case\\n\\tcase ${1:something} of\\n\\t\\t${2} -> ${3}\\nsnippet let\\n\\tlet ${1} = ${2}\\n\\tin ${3}\\nsnippet where\\n\\twhere\\n\\t\\t${1:fn} = ${2:undefined}\\n\";\n\n});\n\nace.define(\"ace/snippets/haskell\",[\"require\",\"exports\",\"module\",\"ace/snippets/haskell.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./haskell.snippets\");\nexports.scope = \"haskell\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/haskell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/haskell_cabal.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/haskell_cabal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/haxe.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/haxe\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/hjson.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/hjson\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/html.js",
    "content": "ace.define(\"ace/snippets/html.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# Some useful Unicode entities\\n# Non-Breaking Space\\nsnippet nbs\\n\\t&nbsp;\\n# \\u2190\\nsnippet left\\n\\t&#x2190;\\n# \\u2192\\nsnippet right\\n\\t&#x2192;\\n# \\u2191\\nsnippet up\\n\\t&#x2191;\\n# \\u2193\\nsnippet down\\n\\t&#x2193;\\n# \\u21A9\\nsnippet return\\n\\t&#x21A9;\\n# \\u21E4\\nsnippet backtab\\n\\t&#x21E4;\\n# \\u21E5\\nsnippet tab\\n\\t&#x21E5;\\n# \\u21E7\\nsnippet shift\\n\\t&#x21E7;\\n# \\u2303\\nsnippet ctrl\\n\\t&#x2303;\\n# \\u2305\\nsnippet enter\\n\\t&#x2305;\\n# \\u2318\\nsnippet cmd\\n\\t&#x2318;\\n# \\u2325\\nsnippet option\\n\\t&#x2325;\\n# \\u2326\\nsnippet delete\\n\\t&#x2326;\\n# \\u232B\\nsnippet backspace\\n\\t&#x232B;\\n# \\u238B\\nsnippet esc\\n\\t&#x238B;\\n# Generic Doctype\\nsnippet doctype HTML 4.01 Strict\\n\\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\nsnippet doctype HTML 4.01 Transitional\\n\\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\nsnippet doctype HTML 5\\n\\t<!DOCTYPE HTML>\\nsnippet doctype XHTML 1.0 Frameset\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\nsnippet doctype XHTML 1.0 Strict\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\nsnippet doctype XHTML 1.0 Transitional\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\nsnippet doctype XHTML 1.1\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n# HTML Doctype 4.01 Strict\\nsnippet docts\\n\\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\n# HTML Doctype 4.01 Transitional\\nsnippet doct\\n\\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\n# HTML Doctype 5\\nsnippet doct5\\n\\t<!DOCTYPE html>\\n# XHTML Doctype 1.0 Frameset\\nsnippet docxf\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Frameset//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\\\">\\n# XHTML Doctype 1.0 Strict\\nsnippet docxs\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n# XHTML Doctype 1.0 Transitional\\nsnippet docxt\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n# XHTML Doctype 1.1\\nsnippet docx\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n# html5shiv\\nsnippet html5shiv\\n\\t<!--[if lte IE 8]>\\n\\t\\t<script src=\\\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js\\\"></script>\\n\\t<![endif]-->\\nsnippet html5printshiv\\n\\t<!--[if lte IE 8]>\\n\\t\\t<script src=\\\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js\\\"></script>\\n\\t<![endif]-->\\n# Attributes\\nsnippet attr\\n\\t${1:attribute}=\\\"${2:property}\\\"\\nsnippet attr+\\n\\t${1:attribute}=\\\"${2:property}\\\" attr+${3}\\nsnippet .\\n\\tclass=\\\"${1}\\\"${2}\\nsnippet #\\n\\tid=\\\"${1}\\\"${2}\\nsnippet alt\\n\\talt=\\\"${1}\\\"${2}\\nsnippet charset\\n\\tcharset=\\\"${1:utf-8}\\\"${2}\\nsnippet data\\n\\tdata-${1}=\\\"${2:$1}\\\"${3}\\nsnippet for\\n\\tfor=\\\"${1}\\\"${2}\\nsnippet height\\n\\theight=\\\"${1}\\\"${2}\\nsnippet href\\n\\thref=\\\"${1:#}\\\"${2}\\nsnippet lang\\n\\tlang=\\\"${1:en}\\\"${2}\\nsnippet media\\n\\tmedia=\\\"${1}\\\"${2}\\nsnippet name\\n\\tname=\\\"${1}\\\"${2}\\nsnippet rel\\n\\trel=\\\"${1}\\\"${2}\\nsnippet scope\\n\\tscope=\\\"${1:row}\\\"${2}\\nsnippet src\\n\\tsrc=\\\"${1}\\\"${2}\\nsnippet title=\\n\\ttitle=\\\"${1}\\\"${2}\\nsnippet type\\n\\ttype=\\\"${1}\\\"${2}\\nsnippet value\\n\\tvalue=\\\"${1}\\\"${2}\\nsnippet width\\n\\twidth=\\\"${1}\\\"${2}\\n# Elements\\nsnippet a\\n\\t<a href=\\\"${1:#}\\\">${2:$1}</a>\\nsnippet a.\\n\\t<a class=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\nsnippet a#\\n\\t<a id=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\nsnippet a:ext\\n\\t<a href=\\\"http://${1:example.com}\\\">${2:$1}</a>\\nsnippet a:mail\\n\\t<a href=\\\"mailto:${1:joe@example.com}?subject=${2:feedback}\\\">${3:email me}</a>\\nsnippet abbr\\n\\t<abbr title=\\\"${1}\\\">${2}</abbr>\\nsnippet address\\n\\t<address>\\n\\t\\t${1}\\n\\t</address>\\nsnippet area\\n\\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\nsnippet area+\\n\\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\n\\tarea+${5}\\nsnippet area:c\\n\\t<area shape=\\\"circle\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\nsnippet area:d\\n\\t<area shape=\\\"default\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\nsnippet area:p\\n\\t<area shape=\\\"poly\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\nsnippet area:r\\n\\t<area shape=\\\"rect\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\nsnippet article\\n\\t<article>\\n\\t\\t${1}\\n\\t</article>\\nsnippet article.\\n\\t<article class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</article>\\nsnippet article#\\n\\t<article id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</article>\\nsnippet aside\\n\\t<aside>\\n\\t\\t${1}\\n\\t</aside>\\nsnippet aside.\\n\\t<aside class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</aside>\\nsnippet aside#\\n\\t<aside id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</aside>\\nsnippet audio\\n\\t<audio src=\\\"${1}>${2}</audio>\\nsnippet b\\n\\t<b>${1}</b>\\nsnippet base\\n\\t<base href=\\\"${1}\\\" target=\\\"${2}\\\" />\\nsnippet bdi\\n\\t<bdi>${1}</bdo>\\nsnippet bdo\\n\\t<bdo dir=\\\"${1}\\\">${2}</bdo>\\nsnippet bdo:l\\n\\t<bdo dir=\\\"ltr\\\">${1}</bdo>\\nsnippet bdo:r\\n\\t<bdo dir=\\\"rtl\\\">${1}</bdo>\\nsnippet blockquote\\n\\t<blockquote>\\n\\t\\t${1}\\n\\t</blockquote>\\nsnippet body\\n\\t<body>\\n\\t\\t${1}\\n\\t</body>\\nsnippet br\\n\\t<br />${1}\\nsnippet button\\n\\t<button type=\\\"${1:submit}\\\">${2}</button>\\nsnippet button.\\n\\t<button class=\\\"${1:button}\\\" type=\\\"${2:submit}\\\">${3}</button>\\nsnippet button#\\n\\t<button id=\\\"${1}\\\" type=\\\"${2:submit}\\\">${3}</button>\\nsnippet button:s\\n\\t<button type=\\\"submit\\\">${1}</button>\\nsnippet button:r\\n\\t<button type=\\\"reset\\\">${1}</button>\\nsnippet canvas\\n\\t<canvas id=\\\"${1:canvas}\\\"></canvas>\\nsnippet caption\\n\\t<caption>${1}</caption>\\nsnippet cite\\n\\t<cite>${1}</cite>\\nsnippet code\\n\\t<code>${1}</code>\\nsnippet col\\n\\t<col />${1}\\nsnippet col+\\n\\t<col />\\n\\tcol+${1}\\nsnippet colgroup\\n\\t<colgroup>\\n\\t\\t${1}\\n\\t</colgroup>\\nsnippet colgroup+\\n\\t<colgroup>\\n\\t\\t<col />\\n\\t\\tcol+${1}\\n\\t</colgroup>\\nsnippet command\\n\\t<command type=\\\"command\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\nsnippet command:c\\n\\t<command type=\\\"checkbox\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\nsnippet command:r\\n\\t<command type=\\\"radio\\\" radiogroup=\\\"${1}\\\" label=\\\"${2}\\\" icon=\\\"${3}\\\" />\\nsnippet datagrid\\n\\t<datagrid>\\n\\t\\t${1}\\n\\t</datagrid>\\nsnippet datalist\\n\\t<datalist>\\n\\t\\t${1}\\n\\t</datalist>\\nsnippet datatemplate\\n\\t<datatemplate>\\n\\t\\t${1}\\n\\t</datatemplate>\\nsnippet dd\\n\\t<dd>${1}</dd>\\nsnippet dd.\\n\\t<dd class=\\\"${1}\\\">${2}</dd>\\nsnippet dd#\\n\\t<dd id=\\\"${1}\\\">${2}</dd>\\nsnippet del\\n\\t<del>${1}</del>\\nsnippet details\\n\\t<details>${1}</details>\\nsnippet dfn\\n\\t<dfn>${1}</dfn>\\nsnippet dialog\\n\\t<dialog>\\n\\t\\t${1}\\n\\t</dialog>\\nsnippet div\\n\\t<div>\\n\\t\\t${1}\\n\\t</div>\\nsnippet div.\\n\\t<div class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</div>\\nsnippet div#\\n\\t<div id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</div>\\nsnippet dl\\n\\t<dl>\\n\\t\\t${1}\\n\\t</dl>\\nsnippet dl.\\n\\t<dl class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</dl>\\nsnippet dl#\\n\\t<dl id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</dl>\\nsnippet dl+\\n\\t<dl>\\n\\t\\t<dt>${1}</dt>\\n\\t\\t<dd>${2}</dd>\\n\\t\\tdt+${3}\\n\\t</dl>\\nsnippet dt\\n\\t<dt>${1}</dt>\\nsnippet dt.\\n\\t<dt class=\\\"${1}\\\">${2}</dt>\\nsnippet dt#\\n\\t<dt id=\\\"${1}\\\">${2}</dt>\\nsnippet dt+\\n\\t<dt>${1}</dt>\\n\\t<dd>${2}</dd>\\n\\tdt+${3}\\nsnippet em\\n\\t<em>${1}</em>\\nsnippet embed\\n\\t<embed src=${1} type=\\\"${2} />\\nsnippet fieldset\\n\\t<fieldset>\\n\\t\\t${1}\\n\\t</fieldset>\\nsnippet fieldset.\\n\\t<fieldset class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</fieldset>\\nsnippet fieldset#\\n\\t<fieldset id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</fieldset>\\nsnippet fieldset+\\n\\t<fieldset>\\n\\t\\t<legend><span>${1}</span></legend>\\n\\t\\t${2}\\n\\t</fieldset>\\n\\tfieldset+${3}\\nsnippet figcaption\\n\\t<figcaption>${1}</figcaption>\\nsnippet figure\\n\\t<figure>${1}</figure>\\nsnippet footer\\n\\t<footer>\\n\\t\\t${1}\\n\\t</footer>\\nsnippet footer.\\n\\t<footer class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</footer>\\nsnippet footer#\\n\\t<footer id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</footer>\\nsnippet form\\n\\t<form action=\\\"${1}\\\" method=\\\"${2:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\t\\t${3}\\n\\t</form>\\nsnippet form.\\n\\t<form class=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\t\\t${4}\\n\\t</form>\\nsnippet form#\\n\\t<form id=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\t\\t${4}\\n\\t</form>\\nsnippet h1\\n\\t<h1>${1}</h1>\\nsnippet h1.\\n\\t<h1 class=\\\"${1}\\\">${2}</h1>\\nsnippet h1#\\n\\t<h1 id=\\\"${1}\\\">${2}</h1>\\nsnippet h2\\n\\t<h2>${1}</h2>\\nsnippet h2.\\n\\t<h2 class=\\\"${1}\\\">${2}</h2>\\nsnippet h2#\\n\\t<h2 id=\\\"${1}\\\">${2}</h2>\\nsnippet h3\\n\\t<h3>${1}</h3>\\nsnippet h3.\\n\\t<h3 class=\\\"${1}\\\">${2}</h3>\\nsnippet h3#\\n\\t<h3 id=\\\"${1}\\\">${2}</h3>\\nsnippet h4\\n\\t<h4>${1}</h4>\\nsnippet h4.\\n\\t<h4 class=\\\"${1}\\\">${2}</h4>\\nsnippet h4#\\n\\t<h4 id=\\\"${1}\\\">${2}</h4>\\nsnippet h5\\n\\t<h5>${1}</h5>\\nsnippet h5.\\n\\t<h5 class=\\\"${1}\\\">${2}</h5>\\nsnippet h5#\\n\\t<h5 id=\\\"${1}\\\">${2}</h5>\\nsnippet h6\\n\\t<h6>${1}</h6>\\nsnippet h6.\\n\\t<h6 class=\\\"${1}\\\">${2}</h6>\\nsnippet h6#\\n\\t<h6 id=\\\"${1}\\\">${2}</h6>\\nsnippet head\\n\\t<head>\\n\\t\\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\n\\t\\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\t\\t${2}\\n\\t</head>\\nsnippet header\\n\\t<header>\\n\\t\\t${1}\\n\\t</header>\\nsnippet header.\\n\\t<header class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</header>\\nsnippet header#\\n\\t<header id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</header>\\nsnippet hgroup\\n\\t<hgroup>\\n\\t\\t${1}\\n\\t</hgroup>\\nsnippet hgroup.\\n\\t<hgroup class=\\\"${1}>\\n\\t\\t${2}\\n\\t</hgroup>\\nsnippet hr\\n\\t<hr />${1}\\nsnippet html\\n\\t<html>\\n\\t${1}\\n\\t</html>\\nsnippet xhtml\\n\\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\t${1}\\n\\t</html>\\nsnippet html5\\n\\t<!DOCTYPE html>\\n\\t<html>\\n\\t\\t<head>\\n\\t\\t\\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\t\\t\\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\t\\t\\t${2:meta}\\n\\t\\t</head>\\n\\t\\t<body>\\n\\t\\t\\t${3:body}\\n\\t\\t</body>\\n\\t</html>\\nsnippet xhtml5\\n\\t<!DOCTYPE html>\\n\\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\t\\t<head>\\n\\t\\t\\t<meta http-equiv=\\\"content-type\\\" content=\\\"application/xhtml+xml; charset=utf-8\\\" />\\n\\t\\t\\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\t\\t\\t${2:meta}\\n\\t\\t</head>\\n\\t\\t<body>\\n\\t\\t\\t${3:body}\\n\\t\\t</body>\\n\\t</html>\\nsnippet i\\n\\t<i>${1}</i>\\nsnippet iframe\\n\\t<iframe src=\\\"${1}\\\" frameborder=\\\"0\\\"></iframe>${2}\\nsnippet iframe.\\n\\t<iframe class=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\nsnippet iframe#\\n\\t<iframe id=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\nsnippet img\\n\\t<img src=\\\"${1}\\\" alt=\\\"${2}\\\" />${3}\\nsnippet img.\\n\\t<img class=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\nsnippet img#\\n\\t<img id=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\nsnippet input\\n\\t<input type=\\\"${1:text/submit/hidden/button/image}\\\" name=\\\"${2}\\\" id=\\\"${3:$2}\\\" value=\\\"${4}\\\" />${5}\\nsnippet input.\\n\\t<input class=\\\"${1}\\\" type=\\\"${2:text/submit/hidden/button/image}\\\" name=\\\"${3}\\\" id=\\\"${4:$3}\\\" value=\\\"${5}\\\" />${6}\\nsnippet input:text\\n\\t<input type=\\\"text\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:submit\\n\\t<input type=\\\"submit\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:hidden\\n\\t<input type=\\\"hidden\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:button\\n\\t<input type=\\\"button\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:image\\n\\t<input type=\\\"image\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" src=\\\"${3}\\\" alt=\\\"${4}\\\" />${5}\\nsnippet input:checkbox\\n\\t<input type=\\\"checkbox\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\nsnippet input:radio\\n\\t<input type=\\\"radio\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\nsnippet input:color\\n\\t<input type=\\\"color\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:date\\n\\t<input type=\\\"date\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:datetime\\n\\t<input type=\\\"datetime\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:datetime-local\\n\\t<input type=\\\"datetime-local\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:email\\n\\t<input type=\\\"email\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:file\\n\\t<input type=\\\"file\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:month\\n\\t<input type=\\\"month\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:number\\n\\t<input type=\\\"number\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:password\\n\\t<input type=\\\"password\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:range\\n\\t<input type=\\\"range\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:reset\\n\\t<input type=\\\"reset\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:search\\n\\t<input type=\\\"search\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:time\\n\\t<input type=\\\"time\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:url\\n\\t<input type=\\\"url\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:week\\n\\t<input type=\\\"week\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet ins\\n\\t<ins>${1}</ins>\\nsnippet kbd\\n\\t<kbd>${1}</kbd>\\nsnippet keygen\\n\\t<keygen>${1}</keygen>\\nsnippet label\\n\\t<label for=\\\"${2:$1}\\\">${1}</label>\\nsnippet label:i\\n\\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\t<input type=\\\"${3:text/submit/hidden/button}\\\" name=\\\"${4:$2}\\\" id=\\\"${5:$2}\\\" value=\\\"${6}\\\" />${7}\\nsnippet label:s\\n\\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\t<select name=\\\"${3:$2}\\\" id=\\\"${4:$2}\\\">\\n\\t\\t<option value=\\\"${5}\\\">${6:$5}</option>\\n\\t</select>\\nsnippet legend\\n\\t<legend>${1}</legend>\\nsnippet legend+\\n\\t<legend><span>${1}</span></legend>\\nsnippet li\\n\\t<li>${1}</li>\\nsnippet li.\\n\\t<li class=\\\"${1}\\\">${2}</li>\\nsnippet li+\\n\\t<li>${1}</li>\\n\\tli+${2}\\nsnippet lia\\n\\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\nsnippet lia+\\n\\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\n\\tlia+${3}\\nsnippet link\\n\\t<link rel=\\\"${1}\\\" href=\\\"${2}\\\" title=\\\"${3}\\\" type=\\\"${4}\\\" />${5}\\nsnippet link:atom\\n\\t<link rel=\\\"alternate\\\" href=\\\"${1:atom.xml}\\\" title=\\\"Atom\\\" type=\\\"application/atom+xml\\\" />${2}\\nsnippet link:css\\n\\t<link rel=\\\"stylesheet\\\" href=\\\"${2:style.css}\\\" type=\\\"text/css\\\" media=\\\"${3:all}\\\" />${4}\\nsnippet link:favicon\\n\\t<link rel=\\\"shortcut icon\\\" href=\\\"${1:favicon.ico}\\\" type=\\\"image/x-icon\\\" />${2}\\nsnippet link:rss\\n\\t<link rel=\\\"alternate\\\" href=\\\"${1:rss.xml}\\\" title=\\\"RSS\\\" type=\\\"application/atom+xml\\\" />${2}\\nsnippet link:touch\\n\\t<link rel=\\\"apple-touch-icon\\\" href=\\\"${1:favicon.png}\\\" />${2}\\nsnippet map\\n\\t<map name=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</map>\\nsnippet map.\\n\\t<map class=\\\"${1}\\\" name=\\\"${2}\\\">\\n\\t\\t${3}\\n\\t</map>\\nsnippet map#\\n\\t<map name=\\\"${1}\\\" id=\\\"${2:$1}>\\n\\t\\t${3}\\n\\t</map>\\nsnippet map+\\n\\t<map name=\\\"${1}\\\">\\n\\t\\t<area shape=\\\"${2}\\\" coords=\\\"${3}\\\" href=\\\"${4}\\\" alt=\\\"${5}\\\" />${6}\\n\\t</map>${7}\\nsnippet mark\\n\\t<mark>${1}</mark>\\nsnippet menu\\n\\t<menu>\\n\\t\\t${1}\\n\\t</menu>\\nsnippet menu:c\\n\\t<menu type=\\\"context\\\">\\n\\t\\t${1}\\n\\t</menu>\\nsnippet menu:t\\n\\t<menu type=\\\"toolbar\\\">\\n\\t\\t${1}\\n\\t</menu>\\nsnippet meta\\n\\t<meta http-equiv=\\\"${1}\\\" content=\\\"${2}\\\" />${3}\\nsnippet meta:compat\\n\\t<meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=${1:7,8,edge}\\\" />${3}\\nsnippet meta:refresh\\n\\t<meta http-equiv=\\\"refresh\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\nsnippet meta:utf\\n\\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\nsnippet meter\\n\\t<meter>${1}</meter>\\nsnippet nav\\n\\t<nav>\\n\\t\\t${1}\\n\\t</nav>\\nsnippet nav.\\n\\t<nav class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</nav>\\nsnippet nav#\\n\\t<nav id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</nav>\\nsnippet noscript\\n\\t<noscript>\\n\\t\\t${1}\\n\\t</noscript>\\nsnippet object\\n\\t<object data=\\\"${1}\\\" type=\\\"${2}\\\">\\n\\t\\t${3}\\n\\t</object>${4}\\n# Embed QT Movie\\nsnippet movie\\n\\t<object width=\\\"$2\\\" height=\\\"$3\\\" classid=\\\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\\\"\\n\\t codebase=\\\"http://www.apple.com/qtactivex/qtplugin.cab\\\">\\n\\t\\t<param name=\\\"src\\\" value=\\\"$1\\\" />\\n\\t\\t<param name=\\\"controller\\\" value=\\\"$4\\\" />\\n\\t\\t<param name=\\\"autoplay\\\" value=\\\"$5\\\" />\\n\\t\\t<embed src=\\\"${1:movie.mov}\\\"\\n\\t\\t\\twidth=\\\"${2:320}\\\" height=\\\"${3:240}\\\"\\n\\t\\t\\tcontroller=\\\"${4:true}\\\" autoplay=\\\"${5:true}\\\"\\n\\t\\t\\tscale=\\\"tofit\\\" cache=\\\"true\\\"\\n\\t\\t\\tpluginspage=\\\"http://www.apple.com/quicktime/download/\\\" />\\n\\t</object>${6}\\nsnippet ol\\n\\t<ol>\\n\\t\\t${1}\\n\\t</ol>\\nsnippet ol.\\n\\t<ol class=\\\"${1}>\\n\\t\\t${2}\\n\\t</ol>\\nsnippet ol#\\n\\t<ol id=\\\"${1}>\\n\\t\\t${2}\\n\\t</ol>\\nsnippet ol+\\n\\t<ol>\\n\\t\\t<li>${1}</li>\\n\\t\\tli+${2}\\n\\t</ol>\\nsnippet opt\\n\\t<option value=\\\"${1}\\\">${2:$1}</option>\\nsnippet opt+\\n\\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\topt+${3}\\nsnippet optt\\n\\t<option>${1}</option>\\nsnippet optgroup\\n\\t<optgroup>\\n\\t\\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\t\\topt+${3}\\n\\t</optgroup>\\nsnippet output\\n\\t<output>${1}</output>\\nsnippet p\\n\\t<p>${1}</p>\\nsnippet param\\n\\t<param name=\\\"${1}\\\" value=\\\"${2}\\\" />${3}\\nsnippet pre\\n\\t<pre>\\n\\t\\t${1}\\n\\t</pre>\\nsnippet progress\\n\\t<progress>${1}</progress>\\nsnippet q\\n\\t<q>${1}</q>\\nsnippet rp\\n\\t<rp>${1}</rp>\\nsnippet rt\\n\\t<rt>${1}</rt>\\nsnippet ruby\\n\\t<ruby>\\n\\t\\t<rp><rt>${1}</rt></rp>\\n\\t</ruby>\\nsnippet s\\n\\t<s>${1}</s>\\nsnippet samp\\n\\t<samp>\\n\\t\\t${1}\\n\\t</samp>\\nsnippet script\\n\\t<script type=\\\"text/javascript\\\" charset=\\\"utf-8\\\">\\n\\t\\t${1}\\n\\t</script>\\nsnippet scriptsrc\\n\\t<script src=\\\"${1}.js\\\" type=\\\"text/javascript\\\" charset=\\\"utf-8\\\"></script>\\nsnippet newscript\\n\\t<script type=\\\"application/javascript\\\" charset=\\\"utf-8\\\">\\n\\t\\t${1}\\n\\t</script>\\nsnippet newscriptsrc\\n\\t<script src=\\\"${1}.js\\\" type=\\\"application/javascript\\\" charset=\\\"utf-8\\\"></script>\\nsnippet section\\n\\t<section>\\n\\t\\t${1}\\n\\t</section>\\nsnippet section.\\n\\t<section class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</section>\\nsnippet section#\\n\\t<section id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</section>\\nsnippet select\\n\\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\t\\t${3}\\n\\t</select>\\nsnippet select.\\n\\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\" class=\\\"${3}>\\n\\t\\t${4}\\n\\t</select>\\nsnippet select+\\n\\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\t\\t<option value=\\\"${3}\\\">${4:$3}</option>\\n\\t\\topt+${5}\\n\\t</select>\\nsnippet small\\n\\t<small>${1}</small>\\nsnippet source\\n\\t<source src=\\\"${1}\\\" type=\\\"${2}\\\" media=\\\"${3}\\\" />\\nsnippet span\\n\\t<span>${1}</span>\\nsnippet strong\\n\\t<strong>${1}</strong>\\nsnippet style\\n\\t<style type=\\\"text/css\\\" media=\\\"${1:all}\\\">\\n\\t\\t${2}\\n\\t</style>\\nsnippet sub\\n\\t<sub>${1}</sub>\\nsnippet summary\\n\\t<summary>\\n\\t\\t${1}\\n\\t</summary>\\nsnippet sup\\n\\t<sup>${1}</sup>\\nsnippet table\\n\\t<table border=\\\"${1:0}\\\">\\n\\t\\t${2}\\n\\t</table>\\nsnippet table.\\n\\t<table class=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\t\\t${3}\\n\\t</table>\\nsnippet table#\\n\\t<table id=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\t\\t${3}\\n\\t</table>\\nsnippet tbody\\n\\t<tbody>\\n\\t\\t${1}\\n\\t</tbody>\\nsnippet td\\n\\t<td>${1}</td>\\nsnippet td.\\n\\t<td class=\\\"${1}\\\">${2}</td>\\nsnippet td#\\n\\t<td id=\\\"${1}\\\">${2}</td>\\nsnippet td+\\n\\t<td>${1}</td>\\n\\ttd+${2}\\nsnippet textarea\\n\\t<textarea name=\\\"${1}\\\" id=${2:$1} rows=\\\"${3:8}\\\" cols=\\\"${4:40}\\\">${5}</textarea>${6}\\nsnippet tfoot\\n\\t<tfoot>\\n\\t\\t${1}\\n\\t</tfoot>\\nsnippet th\\n\\t<th>${1}</th>\\nsnippet th.\\n\\t<th class=\\\"${1}\\\">${2}</th>\\nsnippet th#\\n\\t<th id=\\\"${1}\\\">${2}</th>\\nsnippet th+\\n\\t<th>${1}</th>\\n\\tth+${2}\\nsnippet thead\\n\\t<thead>\\n\\t\\t${1}\\n\\t</thead>\\nsnippet time\\n\\t<time datetime=\\\"${1}\\\" pubdate=\\\"${2:$1}>${3:$1}</time>\\nsnippet title\\n\\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\nsnippet tr\\n\\t<tr>\\n\\t\\t${1}\\n\\t</tr>\\nsnippet tr+\\n\\t<tr>\\n\\t\\t<td>${1}</td>\\n\\t\\ttd+${2}\\n\\t</tr>\\nsnippet track\\n\\t<track src=\\\"${1}\\\" srclang=\\\"${2}\\\" label=\\\"${3}\\\" default=\\\"${4:default}>${5}</track>${6}\\nsnippet ul\\n\\t<ul>\\n\\t\\t${1}\\n\\t</ul>\\nsnippet ul.\\n\\t<ul class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</ul>\\nsnippet ul#\\n\\t<ul id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</ul>\\nsnippet ul+\\n\\t<ul>\\n\\t\\t<li>${1}</li>\\n\\t\\tli+${2}\\n\\t</ul>\\nsnippet var\\n\\t<var>${1}</var>\\nsnippet video\\n\\t<video src=\\\"${1}\\\" height=\\\"${2}\\\" width=\\\"${3}\\\" preload=\\\"${5:none}\\\" autoplay=\\\"${6:autoplay}\\\">${7}</video>${8}\\nsnippet wbr\\n\\t<wbr />${1}\\n\";\n\n});\n\nace.define(\"ace/snippets/html\",[\"require\",\"exports\",\"module\",\"ace/snippets/html.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./html.snippets\");\nexports.scope = \"html\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/html\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/html_elixir.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/html_elixir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/html_ruby.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/html_ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/ini.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/ini\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/io.js",
    "content": "ace.define(\"ace/snippets/io\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.snippets = [\n    {\n        \"content\": \"assertEquals(${1:expected}, ${2:expr})\",\n        \"name\": \"assertEquals\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ae\"\n    },\n    {\n        \"content\": \"${1:${2:newValue} := ${3:Object} }clone do(\\n\\t$0\\n)\",\n        \"name\": \"clone do\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"cdo\"\n    },\n    {\n        \"content\": \"docSlot(\\\"${1:slotName}\\\", \\\"${2:documentation}\\\")\",\n        \"name\": \"docSlot\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ds\"\n    },\n    {\n        \"content\": \"(${1:header,}\\n\\t${2:body}\\n)$0\",\n        \"keyEquivalent\": \"@(\",\n        \"name\": \"Indented Bracketed Line\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"(\"\n    },\n    {\n        \"content\": \"\\n\\t$0\\n\",\n        \"keyEquivalent\": \"\\r\",\n        \"name\": \"Special: Return Inside Empty Parenthesis\",\n        \"scope\": \"io meta.empty-parenthesis.io, io meta.comma-parenthesis.io\"\n    },\n    {\n        \"content\": \"${1:methodName} := method(${2:args,}\\n\\t$0\\n)\",\n        \"name\": \"method\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"m\"\n    },\n    {\n        \"content\": \"newSlot(\\\"${1:slotName}\\\", ${2:defaultValue}, \\\"${3:docString}\\\")$0\",\n        \"name\": \"newSlot\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ns\"\n    },\n    {\n        \"content\": \"${1:name} := Object clone do(\\n\\t$0\\n)\",\n        \"name\": \"Object clone do\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ocdo\"\n    },\n    {\n        \"content\": \"test${1:SomeFeature} := method(\\n\\t$0\\n)\",\n        \"name\": \"testMethod\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ts\"\n    },\n    {\n        \"content\": \"${1:Something}Test := ${2:UnitTest} clone do(\\n\\t$0\\n)\",\n        \"name\": \"UnitTest\",\n        \"scope\": \"io\",\n        \"tabTrigger\": \"ut\"\n    }\n];\nexports.scope = \"io\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/io\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/ion.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/ion\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/jack.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/jack\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/jade.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/jade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/java.js",
    "content": "ace.define(\"ace/snippets/java.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"## Access Modifiers\\nsnippet po\\n\\tprotected\\nsnippet pu\\n\\tpublic\\nsnippet pr\\n\\tprivate\\n##\\n## Annotations\\nsnippet before\\n\\t@Before\\n\\tstatic void ${1:intercept}(${2:args}) { ${3} }\\nsnippet mm\\n\\t@ManyToMany\\n\\t${1}\\nsnippet mo\\n\\t@ManyToOne\\n\\t${1}\\nsnippet om\\n\\t@OneToMany${1:(cascade=CascadeType.ALL)}\\n\\t${2}\\nsnippet oo\\n\\t@OneToOne\\n\\t${1}\\n##\\n## Basic Java packages and import\\nsnippet im\\n\\timport\\nsnippet j.b\\n\\tjava.beans.\\nsnippet j.i\\n\\tjava.io.\\nsnippet j.m\\n\\tjava.math.\\nsnippet j.n\\n\\tjava.net.\\nsnippet j.u\\n\\tjava.util.\\n##\\n## Class\\nsnippet cl\\n\\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\nsnippet in\\n\\tinterface ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2:extends Parent}${3}\\nsnippet tc\\n\\tpublic class ${1:`Filename()`} extends ${2:TestCase}\\n##\\n## Class Enhancements\\nsnippet ext\\n\\textends \\nsnippet imp\\n\\timplements\\n##\\n## Comments\\nsnippet /*\\n\\t/*\\n\\t * ${1}\\n\\t */\\n##\\n## Constants\\nsnippet co\\n\\tstatic public final ${1:String} ${2:var} = ${3};${4}\\nsnippet cos\\n\\tstatic public final String ${1:var} = \\\"${2}\\\";${3}\\n##\\n## Control Statements\\nsnippet case\\n\\tcase ${1}:\\n\\t\\t${2}\\nsnippet def\\n\\tdefault:\\n\\t\\t${2}\\nsnippet el\\n\\telse\\nsnippet elif\\n\\telse if (${1}) ${2}\\nsnippet if\\n\\tif (${1}) ${2}\\nsnippet sw\\n\\tswitch (${1}) {\\n\\t\\t${2}\\n\\t}\\n##\\n## Create a Method\\nsnippet m\\n\\t${1:void} ${2:method}(${3}) ${4:throws }${5}\\n##\\n## Create a Variable\\nsnippet v\\n\\t${1:String} ${2:var}${3: = null}${4};${5}\\n##\\n## Enhancements to Methods, variables, classes, etc.\\nsnippet ab\\n\\tabstract\\nsnippet fi\\n\\tfinal\\nsnippet st\\n\\tstatic\\nsnippet sy\\n\\tsynchronized\\n##\\n## Error Methods\\nsnippet err\\n\\tSystem.err.print(\\\"${1:Message}\\\");\\nsnippet errf\\n\\tSystem.err.printf(\\\"${1:Message}\\\", ${2:exception});\\nsnippet errln\\n\\tSystem.err.println(\\\"${1:Message}\\\");\\n##\\n## Exception Handling\\nsnippet as\\n\\tassert ${1:test} : \\\"${2:Failure message}\\\";${3}\\nsnippet ca\\n\\tcatch(${1:Exception} ${2:e}) ${3}\\nsnippet thr\\n\\tthrow\\nsnippet ths\\n\\tthrows\\nsnippet try\\n\\ttry {\\n\\t\\t${3}\\n\\t} catch(${1:Exception} ${2:e}) {\\n\\t}\\nsnippet tryf\\n\\ttry {\\n\\t\\t${3}\\n\\t} catch(${1:Exception} ${2:e}) {\\n\\t} finally {\\n\\t}\\n##\\n## Find Methods\\nsnippet findall\\n\\tList<${1:listName}> ${2:items} = ${1}.findAll();${3}\\nsnippet findbyid\\n\\t${1:var} ${2:item} = ${1}.findById(${3});${4}\\n##\\n## Javadocs\\nsnippet /**\\n\\t/**\\n\\t * ${1}\\n\\t */\\nsnippet @au\\n\\t@author `system(\\\"grep \\\\`id -un\\\\` /etc/passwd | cut -d \\\\\\\":\\\\\\\" -f5 | cut -d \\\\\\\",\\\\\\\" -f1\\\")`\\nsnippet @br\\n\\t@brief ${1:Description}\\nsnippet @fi\\n\\t@file ${1:`Filename()`}.java\\nsnippet @pa\\n\\t@param ${1:param}\\nsnippet @re\\n\\t@return ${1:param}\\n##\\n## Logger Methods\\nsnippet debug\\n\\tLogger.debug(${1:param});${2}\\nsnippet error\\n\\tLogger.error(${1:param});${2}\\nsnippet info\\n\\tLogger.info(${1:param});${2}\\nsnippet warn\\n\\tLogger.warn(${1:param});${2}\\n##\\n## Loops\\nsnippet enfor\\n\\tfor (${1} : ${2}) ${3}\\nsnippet for\\n\\tfor (${1}; ${2}; ${3}) ${4}\\nsnippet wh\\n\\twhile (${1}) ${2}\\n##\\n## Main method\\nsnippet main\\n\\tpublic static void main (String[] args) {\\n\\t\\t${1:/* code */}\\n\\t}\\n##\\n## Print Methods\\nsnippet print\\n\\tSystem.out.print(\\\"${1:Message}\\\");\\nsnippet printf\\n\\tSystem.out.printf(\\\"${1:Message}\\\", ${2:args});\\nsnippet println\\n\\tSystem.out.println(${1});\\n##\\n## Render Methods\\nsnippet ren\\n\\trender(${1:param});${2}\\nsnippet rena\\n\\trenderArgs.put(\\\"${1}\\\", ${2});${3}\\nsnippet renb\\n\\trenderBinary(${1:param});${2}\\nsnippet renj\\n\\trenderJSON(${1:param});${2}\\nsnippet renx\\n\\trenderXml(${1:param});${2}\\n##\\n## Setter and Getter Methods\\nsnippet set\\n\\t${1:public} void set${3:}(${2:String} ${4:}){\\n\\t\\tthis.$4 = $4;\\n\\t}\\nsnippet get\\n\\t${1:public} ${2:String} get${3:}(){\\n\\t\\treturn this.${4:};\\n\\t}\\n##\\n## Terminate Methods or Loops\\nsnippet re\\n\\treturn\\nsnippet br\\n\\tbreak;\\n##\\n## Test Methods\\nsnippet t\\n\\tpublic void test${1:Name}() throws Exception {\\n\\t\\t${2}\\n\\t}\\nsnippet test\\n\\t@Test\\n\\tpublic void test${1:Name}() throws Exception {\\n\\t\\t${2}\\n\\t}\\n##\\n## Utils\\nsnippet Sc\\n\\tScanner\\n##\\n## Miscellaneous\\nsnippet action\\n\\tpublic static void ${1:index}(${2:args}) { ${3} }\\nsnippet rnf\\n\\tnotFound(${1:param});${2}\\nsnippet rnfin\\n\\tnotFoundIfNull(${1:param});${2}\\nsnippet rr\\n\\tredirect(${1:param});${2}\\nsnippet ru\\n\\tunauthorized(${1:param});${2}\\nsnippet unless\\n\\t(unless=${1:param});${2}\\n\";\n\n});\n\nace.define(\"ace/snippets/java\",[\"require\",\"exports\",\"module\",\"ace/snippets/java.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./java.snippets\");\nexports.scope = \"java\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/java\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/javascript.js",
    "content": "ace.define(\"ace/snippets/javascript.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# Prototype\\nsnippet proto\\n\\t${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\\n\\t\\t${4:// body...}\\n\\t};\\n# Function\\nsnippet fun\\n\\tfunction ${1?:function_name}(${2:argument}) {\\n\\t\\t${3:// body...}\\n\\t}\\n# Anonymous Function\\nregex /((=)\\\\s*|(:)\\\\s*|(\\\\()|\\\\b)/f/(\\\\))?/\\nsnippet f\\n\\tfunction${M1?: ${1:functionName}}($2) {\\n\\t\\t${0:$TM_SELECTED_TEXT}\\n\\t}${M2?;}${M3?,}${M4?)}\\n# Immediate function\\ntrigger \\\\(?f\\\\(\\nendTrigger \\\\)?\\nsnippet f(\\n\\t(function(${1}) {\\n\\t\\t${0:${TM_SELECTED_TEXT:/* code */}}\\n\\t}(${1}));\\n# if\\nsnippet if\\n\\tif (${1:true}) {\\n\\t\\t${0}\\n\\t}\\n# if ... else\\nsnippet ife\\n\\tif (${1:true}) {\\n\\t\\t${2}\\n\\t} else {\\n\\t\\t${0}\\n\\t}\\n# tertiary conditional\\nsnippet ter\\n\\t${1:/* condition */} ? ${2:a} : ${3:b}\\n# switch\\nsnippet switch\\n\\tswitch (${1:expression}) {\\n\\t\\tcase '${3:case}':\\n\\t\\t\\t${4:// code}\\n\\t\\t\\tbreak;\\n\\t\\t${5}\\n\\t\\tdefault:\\n\\t\\t\\t${2:// code}\\n\\t}\\n# case\\nsnippet case\\n\\tcase '${1:case}':\\n\\t\\t${2:// code}\\n\\t\\tbreak;\\n\\t${3}\\n\\n# while (...) {...}\\nsnippet wh\\n\\twhile (${1:/* condition */}) {\\n\\t\\t${0:/* code */}\\n\\t}\\n# try\\nsnippet try\\n\\ttry {\\n\\t\\t${0:/* code */}\\n\\t} catch (e) {}\\n# do...while\\nsnippet do\\n\\tdo {\\n\\t\\t${2:/* code */}\\n\\t} while (${1:/* condition */});\\n# Object Method\\nsnippet :f\\nregex /([,{[])|^\\\\s*/:f/\\n\\t${1:method_name}: function(${2:attribute}) {\\n\\t\\t${0}\\n\\t}${3:,}\\n# setTimeout function\\nsnippet setTimeout\\nregex /\\\\b/st|timeout|setTimeo?u?t?/\\n\\tsetTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\\n# Get Elements\\nsnippet gett\\n\\tgetElementsBy${1:TagName}('${2}')${3}\\n# Get Element\\nsnippet get\\n\\tgetElementBy${1:Id}('${2}')${3}\\n# console.log (Firebug)\\nsnippet cl\\n\\tconsole.log(${1});\\n# return\\nsnippet ret\\n\\treturn ${1:result}\\n# for (property in object ) { ... }\\nsnippet fori\\n\\tfor (var ${1:prop} in ${2:Things}) {\\n\\t\\t${0:$2[$1]}\\n\\t}\\n# hasOwnProperty\\nsnippet has\\n\\thasOwnProperty(${1})\\n# docstring\\nsnippet /**\\n\\t/**\\n\\t * ${1:description}\\n\\t *\\n\\t */\\nsnippet @par\\nregex /^\\\\s*\\\\*\\\\s*/@(para?m?)?/\\n\\t@param {${1:type}} ${2:name} ${3:description}\\nsnippet @ret\\n\\t@return {${1:type}} ${2:description}\\n# JSON.parse\\nsnippet jsonp\\n\\tJSON.parse(${1:jstr});\\n# JSON.stringify\\nsnippet jsons\\n\\tJSON.stringify(${1:object});\\n# self-defining function\\nsnippet sdf\\n\\tvar ${1:function_name} = function(${2:argument}) {\\n\\t\\t${3:// initial code ...}\\n\\n\\t\\t$1 = function($2) {\\n\\t\\t\\t${4:// main code}\\n\\t\\t};\\n\\t}\\n# singleton\\nsnippet sing\\n\\tfunction ${1:Singleton} (${2:argument}) {\\n\\t\\t// the cached instance\\n\\t\\tvar instance;\\n\\n\\t\\t// rewrite the constructor\\n\\t\\t$1 = function $1($2) {\\n\\t\\t\\treturn instance;\\n\\t\\t};\\n\\t\\t\\n\\t\\t// carry over the prototype properties\\n\\t\\t$1.prototype = this;\\n\\n\\t\\t// the instance\\n\\t\\tinstance = new $1();\\n\\n\\t\\t// reset the constructor pointer\\n\\t\\tinstance.constructor = $1;\\n\\n\\t\\t${3:// code ...}\\n\\n\\t\\treturn instance;\\n\\t}\\n# class\\nsnippet class\\nregex /^\\\\s*/clas{0,2}/\\n\\tvar ${1:class} = function(${20}) {\\n\\t\\t$40$0\\n\\t};\\n\\t\\n\\t(function() {\\n\\t\\t${60:this.prop = \\\"\\\"}\\n\\t}).call(${1:class}.prototype);\\n\\t\\n\\texports.${1:class} = ${1:class};\\n# \\nsnippet for-\\n\\tfor (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\\n\\t\\t${0:${2:Things}[${1:i}];}\\n\\t}\\n# for (...) {...}\\nsnippet for\\n\\tfor (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\\n\\t\\t${3:$2[$1]}$0\\n\\t}\\n# for (...) {...} (Improved Native For-Loop)\\nsnippet forr\\n\\tfor (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\\n\\t\\t${3:$2[$1]}$0\\n\\t}\\n\\n\\n#modules\\nsnippet def\\n\\tdefine(function(require, exports, module) {\\n\\t\\\"use strict\\\";\\n\\tvar ${1/.*\\\\///} = require(\\\"${1}\\\");\\n\\t\\n\\t$TM_SELECTED_TEXT\\n\\t});\\nsnippet req\\nguard ^\\\\s*\\n\\tvar ${1/.*\\\\///} = require(\\\"${1}\\\");\\n\\t$0\\nsnippet requ\\nguard ^\\\\s*\\n\\tvar ${1/.*\\\\/(.)/\\\\u$1/} = require(\\\"${1}\\\").${1/.*\\\\/(.)/\\\\u$1/};\\n\\t$0\\n\";\n\n});\n\nace.define(\"ace/snippets/javascript\",[\"require\",\"exports\",\"module\",\"ace/snippets/javascript.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./javascript.snippets\");\nexports.scope = \"javascript\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/javascript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/json.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/json\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/json5.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/json5\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/jsoniq.js",
    "content": "ace.define(\"ace/snippets/jsoniq.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {module.exports = 'snippet for\\n\\\n\tfor \\$\\${1:item} in \\${2:expr}\\n\\\nsnippet return\\n\\\n\treturn \\${1:expr}\\n\\\nsnippet import\\n\\\n\timport module namespace \\${1:ns} = \"\\${2:http://www.example.com/}\";\\n\\\nsnippet some\\n\\\n\tsome \\$\\${1:varname} in \\${2:expr} satisfies \\${3:expr}\\n\\\nsnippet every\\n\\\n\tevery \\$\\${1:varname} in \\${2:expr} satisfies \\${3:expr}\\n\\\nsnippet if\\n\\\n\tif(\\${1:true}) then \\${2:expr} else \\${3:true}\\n\\\nsnippet switch\\n\\\n\tswitch(\\${1:\"foo\"})\\n\\\n\tcase \\${2:\"foo\"}\\n\\\n\treturn \\${3:true}\\n\\\n\tdefault return \\${4:false}\\n\\\nsnippet try\\n\\\n\ttry { \\${1:expr} } catch \\${2:*} { \\${3:expr} }\\n\\\nsnippet tumbling\\n\\\n\tfor tumbling window \\$\\${1:varname} in \\${2:expr}\\n\\\n\tstart at \\$\\${3:start} when \\${4:expr}\\n\\\n\tend at \\$\\${5:end} when \\${6:expr}\\n\\\n\treturn \\${7:expr}\\n\\\nsnippet sliding\\n\\\n\tfor sliding window \\$\\${1:varname} in \\${2:expr}\\n\\\n\tstart at \\$\\${3:start} when \\${4:expr}\\n\\\n\tend at \\$\\${5:end} when \\${6:expr}\\n\\\n\treturn \\${7:expr}\\n\\\nsnippet let\\n\\\n\tlet \\$\\${1:varname} := \\${2:expr}\\n\\\nsnippet group\\n\\\n\tgroup by \\$\\${1:varname} := \\${2:expr}\\n\\\nsnippet order\\n\\\n\torder by \\${1:expr} \\${2:descending}\\n\\\nsnippet stable\\n\\\n\tstable order by \\${1:expr}\\n\\\nsnippet count\\n\\\n\tcount \\$\\${1:varname}\\n\\\nsnippet ordered\\n\\\n\tordered { \\${1:expr} }\\n\\\nsnippet unordered\\n\\\n\tunordered { \\${1:expr} }\\n\\\nsnippet treat \\n\\\n\ttreat as \\${1:expr}\\n\\\nsnippet castable\\n\\\n\tcastable as \\${1:atomicType}\\n\\\nsnippet cast\\n\\\n\tcast as \\${1:atomicType}\\n\\\nsnippet typeswitch\\n\\\n\ttypeswitch(\\${1:expr})\\n\\\n\tcase \\${2:type}  return \\${3:expr}\\n\\\n\tdefault return \\${4:expr}\\n\\\nsnippet var\\n\\\n\tdeclare variable \\$\\${1:varname} := \\${2:expr};\\n\\\nsnippet fn\\n\\\n\tdeclare function \\${1:ns}:\\${2:name}(){\\n\\\n\t\\${3:expr}\\n\\\n\t};\\n\\\nsnippet module\\n\\\n\tmodule namespace \\${1:ns} = \"\\${2:http://www.example.com}\";\\n\\\n';\n\n});\n\nace.define(\"ace/snippets/jsoniq\",[\"require\",\"exports\",\"module\",\"ace/snippets/jsoniq.snippets\"], function(require, exports, module) {\"use strict\";\n\nexports.snippetText = require(\"./jsoniq.snippets\");\nexports.scope = \"jsoniq\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/jsoniq\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/jsp.js",
    "content": "ace.define(\"ace/snippets/jsp.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet @page\\n\\t<%@page contentType=\\\"text/html\\\" pageEncoding=\\\"UTF-8\\\"%>\\nsnippet jstl\\n\\t<%@ taglib uri=\\\"http://java.sun.com/jsp/jstl/core\\\" prefix=\\\"c\\\" %>\\n\\t<%@ taglib uri=\\\"http://java.sun.com/jsp/jstl/functions\\\" prefix=\\\"fn\\\" %>\\nsnippet jstl:c\\n\\t<%@ taglib uri=\\\"http://java.sun.com/jsp/jstl/core\\\" prefix=\\\"c\\\" %>\\nsnippet jstl:fn\\n\\t<%@ taglib uri=\\\"http://java.sun.com/jsp/jstl/functions\\\" prefix=\\\"fn\\\" %>\\nsnippet cpath\\n\\t${pageContext.request.contextPath}\\nsnippet cout\\n\\t<c:out value=\\\"${1}\\\" default=\\\"${2}\\\" />\\nsnippet cset\\n\\t<c:set var=\\\"${1}\\\" value=\\\"${2}\\\" />\\nsnippet cremove\\n\\t<c:remove var=\\\"${1}\\\" scope=\\\"${2:page}\\\" />\\nsnippet ccatch\\n\\t<c:catch var=\\\"${1}\\\" />\\nsnippet cif\\n\\t<c:if test=\\\"${${1}}\\\">\\n\\t\\t${2}\\n\\t</c:if>\\nsnippet cchoose\\n\\t<c:choose>\\n\\t\\t${1}\\n\\t</c:choose>\\nsnippet cwhen\\n\\t<c:when test=\\\"${${1}}\\\">\\n\\t\\t${2}\\n\\t</c:when>\\nsnippet cother\\n\\t<c:otherwise>\\n\\t\\t${1}\\n\\t</c:otherwise>\\nsnippet cfore\\n\\t<c:forEach items=\\\"${${1}}\\\" var=\\\"${2}\\\" varStatus=\\\"${3}\\\">\\n\\t\\t${4:<c:out value=\\\"$2\\\" />}\\n\\t</c:forEach>\\nsnippet cfort\\n\\t<c:set var=\\\"${1}\\\">${2:item1,item2,item3}</c:set>\\n\\t<c:forTokens var=\\\"${3}\\\" items=\\\"${$1}\\\" delims=\\\"${4:,}\\\">\\n\\t\\t${5:<c:out value=\\\"$3\\\" />}\\n\\t</c:forTokens>\\nsnippet cparam\\n\\t<c:param name=\\\"${1}\\\" value=\\\"${2}\\\" />\\nsnippet cparam+\\n\\t<c:param name=\\\"${1}\\\" value=\\\"${2}\\\" />\\n\\tcparam+${3}\\nsnippet cimport\\n\\t<c:import url=\\\"${1}\\\" />\\nsnippet cimport+\\n\\t<c:import url=\\\"${1}\\\">\\n\\t\\t<c:param name=\\\"${2}\\\" value=\\\"${3}\\\" />\\n\\t\\tcparam+${4}\\n\\t</c:import>\\nsnippet curl\\n\\t<c:url value=\\\"${1}\\\" var=\\\"${2}\\\" />\\n\\t<a href=\\\"${$2}\\\">${3}</a>\\nsnippet curl+\\n\\t<c:url value=\\\"${1}\\\" var=\\\"${2}\\\">\\n\\t\\t<c:param name=\\\"${4}\\\" value=\\\"${5}\\\" />\\n\\t\\tcparam+${6}\\n\\t</c:url>\\n\\t<a href=\\\"${$2}\\\">${3}</a>\\nsnippet credirect\\n\\t<c:redirect url=\\\"${1}\\\" />\\nsnippet contains\\n\\t${fn:contains(${1:string}, ${2:substr})}\\nsnippet contains:i\\n\\t${fn:containsIgnoreCase(${1:string}, ${2:substr})}\\nsnippet endswith\\n\\t${fn:endsWith(${1:string}, ${2:suffix})}\\nsnippet escape\\n\\t${fn:escapeXml(${1:string})}\\nsnippet indexof\\n\\t${fn:indexOf(${1:string}, ${2:substr})}\\nsnippet join\\n\\t${fn:join(${1:collection}, ${2:delims})}\\nsnippet length\\n\\t${fn:length(${1:collection_or_string})}\\nsnippet replace\\n\\t${fn:replace(${1:string}, ${2:substr}, ${3:replace})}\\nsnippet split\\n\\t${fn:split(${1:string}, ${2:delims})}\\nsnippet startswith\\n\\t${fn:startsWith(${1:string}, ${2:prefix})}\\nsnippet substr\\n\\t${fn:substring(${1:string}, ${2:begin}, ${3:end})}\\nsnippet substr:a\\n\\t${fn:substringAfter(${1:string}, ${2:substr})}\\nsnippet substr:b\\n\\t${fn:substringBefore(${1:string}, ${2:substr})}\\nsnippet lc\\n\\t${fn:toLowerCase(${1:string})}\\nsnippet uc\\n\\t${fn:toUpperCase(${1:string})}\\nsnippet trim\\n\\t${fn:trim(${1:string})}\\n\";\n\n});\n\nace.define(\"ace/snippets/jsp\",[\"require\",\"exports\",\"module\",\"ace/snippets/jsp.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./jsp.snippets\");\nexports.scope = \"jsp\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/jsp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/jssm.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/jssm\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/jsx.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/jsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/julia.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/julia\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/kotlin.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/kotlin\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/latex.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/latex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/latte.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/latte\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/less.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/less\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/liquid.js",
    "content": "ace.define(\"ace/snippets/liquid.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"\\n# liquid specific snippets\\nsnippet ife\\n\\t{% if ${1:condition} %}\\n\\n\\t{% else %}\\n\\n\\t{% endif %}\\nsnippet if\\n\\t{% if ${1:condition} %}\\n\\t\\t\\n\\t{% endif %}\\nsnippet for\\n\\t{% for in ${1:iterator} %}\\n\\n\\t{% endfor %}\\nsnippet capture\\n\\t{% capture ${1} %}\\n\\n\\t{% endcapture %}\\nsnippet comment\\n\\t{% comment %}\\n\\t  ${1:comment}\\n\\t{% endcomment %}\\n\\n# Include html.snippets\\n# Some useful Unicode entities\\n# Non-Breaking Space\\nsnippet nbs\\n\\t&nbsp;\\n# \\u2190\\nsnippet left\\n\\t&#x2190;\\n# \\u2192\\nsnippet right\\n\\t&#x2192;\\n# \\u2191\\nsnippet up\\n\\t&#x2191;\\n# \\u2193\\nsnippet down\\n\\t&#x2193;\\n# \\u21A9\\nsnippet return\\n\\t&#x21A9;\\n# \\u21E4\\nsnippet backtab\\n\\t&#x21E4;\\n# \\u21E5\\nsnippet tab\\n\\t&#x21E5;\\n# \\u21E7\\nsnippet shift\\n\\t&#x21E7;\\n# \\u2303\\nsnippet ctrl\\n\\t&#x2303;\\n# \\u2305\\nsnippet enter\\n\\t&#x2305;\\n# \\u2318\\nsnippet cmd\\n\\t&#x2318;\\n# \\u2325\\nsnippet option\\n\\t&#x2325;\\n# \\u2326\\nsnippet delete\\n\\t&#x2326;\\n# \\u232B\\nsnippet backspace\\n\\t&#x232B;\\n# \\u238B\\nsnippet esc\\n\\t&#x238B;\\n# Generic Doctype\\nsnippet doctype HTML 4.01 Strict\\n\\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\nsnippet doctype HTML 4.01 Transitional\\n\\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\nsnippet doctype HTML 5\\n\\t<!DOCTYPE HTML>\\nsnippet doctype XHTML 1.0 Frameset\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\nsnippet doctype XHTML 1.0 Strict\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\nsnippet doctype XHTML 1.0 Transitional\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\nsnippet doctype XHTML 1.1\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n# HTML Doctype 4.01 Strict\\nsnippet docts\\n\\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\n# HTML Doctype 4.01 Transitional\\nsnippet doct\\n\\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\n# HTML Doctype 5\\nsnippet doct5\\n\\t<!DOCTYPE html>\\n# XHTML Doctype 1.0 Frameset\\nsnippet docxf\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Frameset//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\\\">\\n# XHTML Doctype 1.0 Strict\\nsnippet docxs\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n# XHTML Doctype 1.0 Transitional\\nsnippet docxt\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n# XHTML Doctype 1.1\\nsnippet docx\\n\\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n# html5shiv\\nsnippet html5shiv\\n\\t<!--[if lte IE 8]>\\n\\t\\t<script src=\\\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js\\\"></script>\\n\\t<![endif]-->\\nsnippet html5printshiv\\n\\t<!--[if lte IE 8]>\\n\\t\\t<script src=\\\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js\\\"></script>\\n\\t<![endif]-->\\n# Attributes\\nsnippet attr\\n\\t${1:attribute}=\\\"${2:property}\\\"\\nsnippet attr+\\n\\t${1:attribute}=\\\"${2:property}\\\" attr+${3}\\nsnippet .\\n\\tclass=\\\"${1}\\\"${2}\\nsnippet #\\n\\tid=\\\"${1}\\\"${2}\\nsnippet alt\\n\\talt=\\\"${1}\\\"${2}\\nsnippet charset\\n\\tcharset=\\\"${1:utf-8}\\\"${2}\\nsnippet data\\n\\tdata-${1}=\\\"${2:$1}\\\"${3}\\nsnippet for\\n\\tfor=\\\"${1}\\\"${2}\\nsnippet height\\n\\theight=\\\"${1}\\\"${2}\\nsnippet href\\n\\thref=\\\"${1:#}\\\"${2}\\nsnippet lang\\n\\tlang=\\\"${1:en}\\\"${2}\\nsnippet media\\n\\tmedia=\\\"${1}\\\"${2}\\nsnippet name\\n\\tname=\\\"${1}\\\"${2}\\nsnippet rel\\n\\trel=\\\"${1}\\\"${2}\\nsnippet scope\\n\\tscope=\\\"${1:row}\\\"${2}\\nsnippet src\\n\\tsrc=\\\"${1}\\\"${2}\\nsnippet title=\\n\\ttitle=\\\"${1}\\\"${2}\\nsnippet type\\n\\ttype=\\\"${1}\\\"${2}\\nsnippet value\\n\\tvalue=\\\"${1}\\\"${2}\\nsnippet width\\n\\twidth=\\\"${1}\\\"${2}\\n# Elements\\nsnippet a\\n\\t<a href=\\\"${1:#}\\\">${2:$1}</a>\\nsnippet a.\\n\\t<a class=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\nsnippet a#\\n\\t<a id=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\nsnippet a:ext\\n\\t<a href=\\\"http://${1:example.com}\\\">${2:$1}</a>\\nsnippet a:mail\\n\\t<a href=\\\"mailto:${1:joe@example.com}?subject=${2:feedback}\\\">${3:email me}</a>\\nsnippet abbr\\n\\t<abbr title=\\\"${1}\\\">${2}</abbr>\\nsnippet address\\n\\t<address>\\n\\t\\t${1}\\n\\t</address>\\nsnippet area\\n\\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\nsnippet area+\\n\\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\n\\tarea+${5}\\nsnippet area:c\\n\\t<area shape=\\\"circle\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\nsnippet area:d\\n\\t<area shape=\\\"default\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\nsnippet area:p\\n\\t<area shape=\\\"poly\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\nsnippet area:r\\n\\t<area shape=\\\"rect\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\nsnippet article\\n\\t<article>\\n\\t\\t${1}\\n\\t</article>\\nsnippet article.\\n\\t<article class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</article>\\nsnippet article#\\n\\t<article id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</article>\\nsnippet aside\\n\\t<aside>\\n\\t\\t${1}\\n\\t</aside>\\nsnippet aside.\\n\\t<aside class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</aside>\\nsnippet aside#\\n\\t<aside id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</aside>\\nsnippet audio\\n\\t<audio src=\\\"${1}>${2}</audio>\\nsnippet b\\n\\t<b>${1}</b>\\nsnippet base\\n\\t<base href=\\\"${1}\\\" target=\\\"${2}\\\" />\\nsnippet bdi\\n\\t<bdi>${1}</bdo>\\nsnippet bdo\\n\\t<bdo dir=\\\"${1}\\\">${2}</bdo>\\nsnippet bdo:l\\n\\t<bdo dir=\\\"ltr\\\">${1}</bdo>\\nsnippet bdo:r\\n\\t<bdo dir=\\\"rtl\\\">${1}</bdo>\\nsnippet blockquote\\n\\t<blockquote>\\n\\t\\t${1}\\n\\t</blockquote>\\nsnippet body\\n\\t<body>\\n\\t\\t${1}\\n\\t</body>\\nsnippet br\\n\\t<br />${1}\\nsnippet button\\n\\t<button type=\\\"${1:submit}\\\">${2}</button>\\nsnippet button.\\n\\t<button class=\\\"${1:button}\\\" type=\\\"${2:submit}\\\">${3}</button>\\nsnippet button#\\n\\t<button id=\\\"${1}\\\" type=\\\"${2:submit}\\\">${3}</button>\\nsnippet button:s\\n\\t<button type=\\\"submit\\\">${1}</button>\\nsnippet button:r\\n\\t<button type=\\\"reset\\\">${1}</button>\\nsnippet canvas\\n\\t<canvas>\\n\\t\\t${1}\\n\\t</canvas>\\nsnippet caption\\n\\t<caption>${1}</caption>\\nsnippet cite\\n\\t<cite>${1}</cite>\\nsnippet code\\n\\t<code>${1}</code>\\nsnippet col\\n\\t<col />${1}\\nsnippet col+\\n\\t<col />\\n\\tcol+${1}\\nsnippet colgroup\\n\\t<colgroup>\\n\\t\\t${1}\\n\\t</colgroup>\\nsnippet colgroup+\\n\\t<colgroup>\\n\\t\\t<col />\\n\\t\\tcol+${1}\\n\\t</colgroup>\\nsnippet command\\n\\t<command type=\\\"command\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\nsnippet command:c\\n\\t<command type=\\\"checkbox\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\nsnippet command:r\\n\\t<command type=\\\"radio\\\" radiogroup=\\\"${1}\\\" label=\\\"${2}\\\" icon=\\\"${3}\\\" />\\nsnippet datagrid\\n\\t<datagrid>\\n\\t\\t${1}\\n\\t</datagrid>\\nsnippet datalist\\n\\t<datalist>\\n\\t\\t${1}\\n\\t</datalist>\\nsnippet datatemplate\\n\\t<datatemplate>\\n\\t\\t${1}\\n\\t</datatemplate>\\nsnippet dd\\n\\t<dd>${1}</dd>\\nsnippet dd.\\n\\t<dd class=\\\"${1}\\\">${2}</dd>\\nsnippet dd#\\n\\t<dd id=\\\"${1}\\\">${2}</dd>\\nsnippet del\\n\\t<del>${1}</del>\\nsnippet details\\n\\t<details>${1}</details>\\nsnippet dfn\\n\\t<dfn>${1}</dfn>\\nsnippet dialog\\n\\t<dialog>\\n\\t\\t${1}\\n\\t</dialog>\\nsnippet div\\n\\t<div>\\n\\t\\t${1}\\n\\t</div>\\nsnippet div.\\n\\t<div class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</div>\\nsnippet div#\\n\\t<div id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</div>\\nsnippet dl\\n\\t<dl>\\n\\t\\t${1}\\n\\t</dl>\\nsnippet dl.\\n\\t<dl class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</dl>\\nsnippet dl#\\n\\t<dl id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</dl>\\nsnippet dl+\\n\\t<dl>\\n\\t\\t<dt>${1}</dt>\\n\\t\\t<dd>${2}</dd>\\n\\t\\tdt+${3}\\n\\t</dl>\\nsnippet dt\\n\\t<dt>${1}</dt>\\nsnippet dt.\\n\\t<dt class=\\\"${1}\\\">${2}</dt>\\nsnippet dt#\\n\\t<dt id=\\\"${1}\\\">${2}</dt>\\nsnippet dt+\\n\\t<dt>${1}</dt>\\n\\t<dd>${2}</dd>\\n\\tdt+${3}\\nsnippet em\\n\\t<em>${1}</em>\\nsnippet embed\\n\\t<embed src=${1} type=\\\"${2} />\\nsnippet fieldset\\n\\t<fieldset>\\n\\t\\t${1}\\n\\t</fieldset>\\nsnippet fieldset.\\n\\t<fieldset class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</fieldset>\\nsnippet fieldset#\\n\\t<fieldset id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</fieldset>\\nsnippet fieldset+\\n\\t<fieldset>\\n\\t\\t<legend><span>${1}</span></legend>\\n\\t\\t${2}\\n\\t</fieldset>\\n\\tfieldset+${3}\\nsnippet figcaption\\n\\t<figcaption>${1}</figcaption>\\nsnippet figure\\n\\t<figure>${1}</figure>\\nsnippet footer\\n\\t<footer>\\n\\t\\t${1}\\n\\t</footer>\\nsnippet footer.\\n\\t<footer class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</footer>\\nsnippet footer#\\n\\t<footer id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</footer>\\nsnippet form\\n\\t<form action=\\\"${1}\\\" method=\\\"${2:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\t\\t${3}\\n\\t</form>\\nsnippet form.\\n\\t<form class=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\t\\t${4}\\n\\t</form>\\nsnippet form#\\n\\t<form id=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\t\\t${4}\\n\\t</form>\\nsnippet h1\\n\\t<h1>${1}</h1>\\nsnippet h1.\\n\\t<h1 class=\\\"${1}\\\">${2}</h1>\\nsnippet h1#\\n\\t<h1 id=\\\"${1}\\\">${2}</h1>\\nsnippet h2\\n\\t<h2>${1}</h2>\\nsnippet h2.\\n\\t<h2 class=\\\"${1}\\\">${2}</h2>\\nsnippet h2#\\n\\t<h2 id=\\\"${1}\\\">${2}</h2>\\nsnippet h3\\n\\t<h3>${1}</h3>\\nsnippet h3.\\n\\t<h3 class=\\\"${1}\\\">${2}</h3>\\nsnippet h3#\\n\\t<h3 id=\\\"${1}\\\">${2}</h3>\\nsnippet h4\\n\\t<h4>${1}</h4>\\nsnippet h4.\\n\\t<h4 class=\\\"${1}\\\">${2}</h4>\\nsnippet h4#\\n\\t<h4 id=\\\"${1}\\\">${2}</h4>\\nsnippet h5\\n\\t<h5>${1}</h5>\\nsnippet h5.\\n\\t<h5 class=\\\"${1}\\\">${2}</h5>\\nsnippet h5#\\n\\t<h5 id=\\\"${1}\\\">${2}</h5>\\nsnippet h6\\n\\t<h6>${1}</h6>\\nsnippet h6.\\n\\t<h6 class=\\\"${1}\\\">${2}</h6>\\nsnippet h6#\\n\\t<h6 id=\\\"${1}\\\">${2}</h6>\\nsnippet head\\n\\t<head>\\n\\t\\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\n\\t\\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\t\\t${2}\\n\\t</head>\\nsnippet header\\n\\t<header>\\n\\t\\t${1}\\n\\t</header>\\nsnippet header.\\n\\t<header class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</header>\\nsnippet header#\\n\\t<header id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</header>\\nsnippet hgroup\\n\\t<hgroup>\\n\\t\\t${1}\\n\\t</hgroup>\\nsnippet hgroup.\\n\\t<hgroup class=\\\"${1}>\\n\\t\\t${2}\\n\\t</hgroup>\\nsnippet hr\\n\\t<hr />${1}\\nsnippet html\\n\\t<html>\\n\\t${1}\\n\\t</html>\\nsnippet xhtml\\n\\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\t${1}\\n\\t</html>\\nsnippet html5\\n\\t<!DOCTYPE html>\\n\\t<html>\\n\\t\\t<head>\\n\\t\\t\\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\t\\t\\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\t\\t\\t${2:meta}\\n\\t\\t</head>\\n\\t\\t<body>\\n\\t\\t\\t${3:body}\\n\\t\\t</body>\\n\\t</html>\\nsnippet xhtml5\\n\\t<!DOCTYPE html>\\n\\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\t\\t<head>\\n\\t\\t\\t<meta http-equiv=\\\"content-type\\\" content=\\\"application/xhtml+xml; charset=utf-8\\\" />\\n\\t\\t\\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\t\\t\\t${2:meta}\\n\\t\\t</head>\\n\\t\\t<body>\\n\\t\\t\\t${3:body}\\n\\t\\t</body>\\n\\t</html>\\nsnippet i\\n\\t<i>${1}</i>\\nsnippet iframe\\n\\t<iframe src=\\\"${1}\\\" frameborder=\\\"0\\\"></iframe>${2}\\nsnippet iframe.\\n\\t<iframe class=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\nsnippet iframe#\\n\\t<iframe id=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\nsnippet img\\n\\t<img src=\\\"${1}\\\" alt=\\\"${2}\\\" />${3}\\nsnippet img.\\n\\t<img class=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\nsnippet img#\\n\\t<img id=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\nsnippet input\\n\\t<input type=\\\"${1:text/submit/hidden/button/image}\\\" name=\\\"${2}\\\" id=\\\"${3:$2}\\\" value=\\\"${4}\\\" />${5}\\nsnippet input.\\n\\t<input class=\\\"${1}\\\" type=\\\"${2:text/submit/hidden/button/image}\\\" name=\\\"${3}\\\" id=\\\"${4:$3}\\\" value=\\\"${5}\\\" />${6}\\nsnippet input:text\\n\\t<input type=\\\"text\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:submit\\n\\t<input type=\\\"submit\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:hidden\\n\\t<input type=\\\"hidden\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:button\\n\\t<input type=\\\"button\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:image\\n\\t<input type=\\\"image\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" src=\\\"${3}\\\" alt=\\\"${4}\\\" />${5}\\nsnippet input:checkbox\\n\\t<input type=\\\"checkbox\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\nsnippet input:radio\\n\\t<input type=\\\"radio\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\nsnippet input:color\\n\\t<input type=\\\"color\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:date\\n\\t<input type=\\\"date\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:datetime\\n\\t<input type=\\\"datetime\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:datetime-local\\n\\t<input type=\\\"datetime-local\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:email\\n\\t<input type=\\\"email\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:file\\n\\t<input type=\\\"file\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:month\\n\\t<input type=\\\"month\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:number\\n\\t<input type=\\\"number\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:password\\n\\t<input type=\\\"password\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:range\\n\\t<input type=\\\"range\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:reset\\n\\t<input type=\\\"reset\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:search\\n\\t<input type=\\\"search\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:time\\n\\t<input type=\\\"time\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:url\\n\\t<input type=\\\"url\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet input:week\\n\\t<input type=\\\"week\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\nsnippet ins\\n\\t<ins>${1}</ins>\\nsnippet kbd\\n\\t<kbd>${1}</kbd>\\nsnippet keygen\\n\\t<keygen>${1}</keygen>\\nsnippet label\\n\\t<label for=\\\"${2:$1}\\\">${1}</label>\\nsnippet label:i\\n\\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\t<input type=\\\"${3:text/submit/hidden/button}\\\" name=\\\"${4:$2}\\\" id=\\\"${5:$2}\\\" value=\\\"${6}\\\" />${7}\\nsnippet label:s\\n\\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\t<select name=\\\"${3:$2}\\\" id=\\\"${4:$2}\\\">\\n\\t\\t<option value=\\\"${5}\\\">${6:$5}</option>\\n\\t</select>\\nsnippet legend\\n\\t<legend>${1}</legend>\\nsnippet legend+\\n\\t<legend><span>${1}</span></legend>\\nsnippet li\\n\\t<li>${1}</li>\\nsnippet li.\\n\\t<li class=\\\"${1}\\\">${2}</li>\\nsnippet li+\\n\\t<li>${1}</li>\\n\\tli+${2}\\nsnippet lia\\n\\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\nsnippet lia+\\n\\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\n\\tlia+${3}\\nsnippet link\\n\\t<link rel=\\\"${1}\\\" href=\\\"${2}\\\" title=\\\"${3}\\\" type=\\\"${4}\\\" />${5}\\nsnippet link:atom\\n\\t<link rel=\\\"alternate\\\" href=\\\"${1:atom.xml}\\\" title=\\\"Atom\\\" type=\\\"application/atom+xml\\\" />${2}\\nsnippet link:css\\n\\t<link rel=\\\"stylesheet\\\" href=\\\"${2:style.css}\\\" type=\\\"text/css\\\" media=\\\"${3:all}\\\" />${4}\\nsnippet link:favicon\\n\\t<link rel=\\\"shortcut icon\\\" href=\\\"${1:favicon.ico}\\\" type=\\\"image/x-icon\\\" />${2}\\nsnippet link:rss\\n\\t<link rel=\\\"alternate\\\" href=\\\"${1:rss.xml}\\\" title=\\\"RSS\\\" type=\\\"application/atom+xml\\\" />${2}\\nsnippet link:touch\\n\\t<link rel=\\\"apple-touch-icon\\\" href=\\\"${1:favicon.png}\\\" />${2}\\nsnippet map\\n\\t<map name=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</map>\\nsnippet map.\\n\\t<map class=\\\"${1}\\\" name=\\\"${2}\\\">\\n\\t\\t${3}\\n\\t</map>\\nsnippet map#\\n\\t<map name=\\\"${1}\\\" id=\\\"${2:$1}>\\n\\t\\t${3}\\n\\t</map>\\nsnippet map+\\n\\t<map name=\\\"${1}\\\">\\n\\t\\t<area shape=\\\"${2}\\\" coords=\\\"${3}\\\" href=\\\"${4}\\\" alt=\\\"${5}\\\" />${6}\\n\\t</map>${7}\\nsnippet mark\\n\\t<mark>${1}</mark>\\nsnippet menu\\n\\t<menu>\\n\\t\\t${1}\\n\\t</menu>\\nsnippet menu:c\\n\\t<menu type=\\\"context\\\">\\n\\t\\t${1}\\n\\t</menu>\\nsnippet menu:t\\n\\t<menu type=\\\"toolbar\\\">\\n\\t\\t${1}\\n\\t</menu>\\nsnippet meta\\n\\t<meta http-equiv=\\\"${1}\\\" content=\\\"${2}\\\" />${3}\\nsnippet meta:compat\\n\\t<meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=${1:7,8,edge}\\\" />${3}\\nsnippet meta:refresh\\n\\t<meta http-equiv=\\\"refresh\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\nsnippet meta:utf\\n\\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\nsnippet meter\\n\\t<meter>${1}</meter>\\nsnippet nav\\n\\t<nav>\\n\\t\\t${1}\\n\\t</nav>\\nsnippet nav.\\n\\t<nav class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</nav>\\nsnippet nav#\\n\\t<nav id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</nav>\\nsnippet noscript\\n\\t<noscript>\\n\\t\\t${1}\\n\\t</noscript>\\nsnippet object\\n\\t<object data=\\\"${1}\\\" type=\\\"${2}\\\">\\n\\t\\t${3}\\n\\t</object>${4}\\n# Embed QT Movie\\nsnippet movie\\n\\t<object width=\\\"$2\\\" height=\\\"$3\\\" classid=\\\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\\\"\\n\\t codebase=\\\"http://www.apple.com/qtactivex/qtplugin.cab\\\">\\n\\t\\t<param name=\\\"src\\\" value=\\\"$1\\\" />\\n\\t\\t<param name=\\\"controller\\\" value=\\\"$4\\\" />\\n\\t\\t<param name=\\\"autoplay\\\" value=\\\"$5\\\" />\\n\\t\\t<embed src=\\\"${1:movie.mov}\\\"\\n\\t\\t\\twidth=\\\"${2:320}\\\" height=\\\"${3:240}\\\"\\n\\t\\t\\tcontroller=\\\"${4:true}\\\" autoplay=\\\"${5:true}\\\"\\n\\t\\t\\tscale=\\\"tofit\\\" cache=\\\"true\\\"\\n\\t\\t\\tpluginspage=\\\"http://www.apple.com/quicktime/download/\\\" />\\n\\t</object>${6}\\nsnippet ol\\n\\t<ol>\\n\\t\\t${1}\\n\\t</ol>\\nsnippet ol.\\n\\t<ol class=\\\"${1}>\\n\\t\\t${2}\\n\\t</ol>\\nsnippet ol#\\n\\t<ol id=\\\"${1}>\\n\\t\\t${2}\\n\\t</ol>\\nsnippet ol+\\n\\t<ol>\\n\\t\\t<li>${1}</li>\\n\\t\\tli+${2}\\n\\t</ol>\\nsnippet opt\\n\\t<option value=\\\"${1}\\\">${2:$1}</option>\\nsnippet opt+\\n\\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\topt+${3}\\nsnippet optt\\n\\t<option>${1}</option>\\nsnippet optgroup\\n\\t<optgroup>\\n\\t\\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\t\\topt+${3}\\n\\t</optgroup>\\nsnippet output\\n\\t<output>${1}</output>\\nsnippet p\\n\\t<p>${1}</p>\\nsnippet param\\n\\t<param name=\\\"${1}\\\" value=\\\"${2}\\\" />${3}\\nsnippet pre\\n\\t<pre>\\n\\t\\t${1}\\n\\t</pre>\\nsnippet progress\\n\\t<progress>${1}</progress>\\nsnippet q\\n\\t<q>${1}</q>\\nsnippet rp\\n\\t<rp>${1}</rp>\\nsnippet rt\\n\\t<rt>${1}</rt>\\nsnippet ruby\\n\\t<ruby>\\n\\t\\t<rp><rt>${1}</rt></rp>\\n\\t</ruby>\\nsnippet s\\n\\t<s>${1}</s>\\nsnippet samp\\n\\t<samp>\\n\\t\\t${1}\\n\\t</samp>\\nsnippet script\\n\\t<script type=\\\"text/javascript\\\" charset=\\\"utf-8\\\">\\n\\t\\t${1}\\n\\t</script>\\nsnippet scriptsrc\\n\\t<script src=\\\"${1}.js\\\" type=\\\"text/javascript\\\" charset=\\\"utf-8\\\"></script>\\nsnippet newscript\\n\\t<script type=\\\"application/javascript\\\" charset=\\\"utf-8\\\">\\n\\t\\t${1}\\n\\t</script>\\nsnippet newscriptsrc\\n\\t<script src=\\\"${1}.js\\\" type=\\\"application/javascript\\\" charset=\\\"utf-8\\\"></script>\\nsnippet section\\n\\t<section>\\n\\t\\t${1}\\n\\t</section>\\nsnippet section.\\n\\t<section class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</section>\\nsnippet section#\\n\\t<section id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</section>\\nsnippet select\\n\\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\t\\t${3}\\n\\t</select>\\nsnippet select.\\n\\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\" class=\\\"${3}>\\n\\t\\t${4}\\n\\t</select>\\nsnippet select+\\n\\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\t\\t<option value=\\\"${3}\\\">${4:$3}</option>\\n\\t\\topt+${5}\\n\\t</select>\\nsnippet small\\n\\t<small>${1}</small>\\nsnippet source\\n\\t<source src=\\\"${1}\\\" type=\\\"${2}\\\" media=\\\"${3}\\\" />\\nsnippet span\\n\\t<span>${1}</span>\\nsnippet strong\\n\\t<strong>${1}</strong>\\nsnippet style\\n\\t<style type=\\\"text/css\\\" media=\\\"${1:all}\\\">\\n\\t\\t${2}\\n\\t</style>\\nsnippet sub\\n\\t<sub>${1}</sub>\\nsnippet summary\\n\\t<summary>\\n\\t\\t${1}\\n\\t</summary>\\nsnippet sup\\n\\t<sup>${1}</sup>\\nsnippet table\\n\\t<table border=\\\"${1:0}\\\">\\n\\t\\t${2}\\n\\t</table>\\nsnippet table.\\n\\t<table class=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\t\\t${3}\\n\\t</table>\\nsnippet table#\\n\\t<table id=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\t\\t${3}\\n\\t</table>\\nsnippet tbody\\n\\t<tbody>\\n\\t\\t${1}\\n\\t</tbody>\\nsnippet td\\n\\t<td>${1}</td>\\nsnippet td.\\n\\t<td class=\\\"${1}\\\">${2}</td>\\nsnippet td#\\n\\t<td id=\\\"${1}\\\">${2}</td>\\nsnippet td+\\n\\t<td>${1}</td>\\n\\ttd+${2}\\nsnippet textarea\\n\\t<textarea name=\\\"${1}\\\" id=${2:$1} rows=\\\"${3:8}\\\" cols=\\\"${4:40}\\\">${5}</textarea>${6}\\nsnippet tfoot\\n\\t<tfoot>\\n\\t\\t${1}\\n\\t</tfoot>\\nsnippet th\\n\\t<th>${1}</th>\\nsnippet th.\\n\\t<th class=\\\"${1}\\\">${2}</th>\\nsnippet th#\\n\\t<th id=\\\"${1}\\\">${2}</th>\\nsnippet th+\\n\\t<th>${1}</th>\\n\\tth+${2}\\nsnippet thead\\n\\t<thead>\\n\\t\\t${1}\\n\\t</thead>\\nsnippet time\\n\\t<time datetime=\\\"${1}\\\" pubdate=\\\"${2:$1}>${3:$1}</time>\\nsnippet title\\n\\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\nsnippet tr\\n\\t<tr>\\n\\t\\t${1}\\n\\t</tr>\\nsnippet tr+\\n\\t<tr>\\n\\t\\t<td>${1}</td>\\n\\t\\ttd+${2}\\n\\t</tr>\\nsnippet track\\n\\t<track src=\\\"${1}\\\" srclang=\\\"${2}\\\" label=\\\"${3}\\\" default=\\\"${4:default}>${5}</track>${6}\\nsnippet ul\\n\\t<ul>\\n\\t\\t${1}\\n\\t</ul>\\nsnippet ul.\\n\\t<ul class=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</ul>\\nsnippet ul#\\n\\t<ul id=\\\"${1}\\\">\\n\\t\\t${2}\\n\\t</ul>\\nsnippet ul+\\n\\t<ul>\\n\\t\\t<li>${1}</li>\\n\\t\\tli+${2}\\n\\t</ul>\\nsnippet var\\n\\t<var>${1}</var>\\nsnippet video\\n\\t<video src=\\\"${1} height=\\\"${2}\\\" width=\\\"${3}\\\" preload=\\\"${5:none}\\\" autoplay=\\\"${6:autoplay}>${7}</video>${8}\\nsnippet wbr\\n\\t<wbr />${1}\\n\";\n\n});\n\nace.define(\"ace/snippets/liquid\",[\"require\",\"exports\",\"module\",\"ace/snippets/liquid.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./liquid.snippets\");\nexports.scope = \"liquid\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/liquid\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/lisp.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/lisp\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/livescript.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/livescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/logiql.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/logiql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/logtalk.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/logtalk\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/lsl.js",
    "content": "ace.define(\"ace/snippets/lsl.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet @\\n\\t@${1:label};\\nsnippet CAMERA_ACTIVE\\n\\tCAMERA_ACTIVE, ${1:integer isActive}, $0\\nsnippet CAMERA_BEHINDNESS_ANGLE\\n\\tCAMERA_BEHINDNESS_ANGLE, ${1:float degrees}, $0\\nsnippet CAMERA_BEHINDNESS_LAG\\n\\tCAMERA_BEHINDNESS_LAG, ${1:float seconds}, $0\\nsnippet CAMERA_DISTANCE\\n\\tCAMERA_DISTANCE, ${1:float meters}, $0\\nsnippet CAMERA_FOCUS\\n\\tCAMERA_FOCUS, ${1:vector position}, $0\\nsnippet CAMERA_FOCUS_LAG\\n\\tCAMERA_FOCUS_LAG, ${1:float seconds}, $0\\nsnippet CAMERA_FOCUS_LOCKED\\n\\tCAMERA_FOCUS_LOCKED, ${1:integer isLocked}, $0\\nsnippet CAMERA_FOCUS_OFFSET\\n\\tCAMERA_FOCUS_OFFSET, ${1:vector meters}, $0\\nsnippet CAMERA_FOCUS_THRESHOLD\\n\\tCAMERA_FOCUS_THRESHOLD, ${1:float meters}, $0\\nsnippet CAMERA_PITCH\\n\\tCAMERA_PITCH, ${1:float degrees}, $0\\nsnippet CAMERA_POSITION\\n\\tCAMERA_POSITION, ${1:vector position}, $0\\nsnippet CAMERA_POSITION_LAG\\n\\tCAMERA_POSITION_LAG, ${1:float seconds}, $0\\nsnippet CAMERA_POSITION_LOCKED\\n\\tCAMERA_POSITION_LOCKED, ${1:integer isLocked}, $0\\nsnippet CAMERA_POSITION_THRESHOLD\\n\\tCAMERA_POSITION_THRESHOLD, ${1:float meters}, $0\\nsnippet CHARACTER_AVOIDANCE_MODE\\n\\tCHARACTER_AVOIDANCE_MODE, ${1:integer flags}, $0\\nsnippet CHARACTER_DESIRED_SPEED\\n\\tCHARACTER_DESIRED_SPEED, ${1:float speed}, $0\\nsnippet CHARACTER_DESIRED_TURN_SPEED\\n\\tCHARACTER_DESIRED_TURN_SPEED, ${1:float speed}, $0\\nsnippet CHARACTER_LENGTH\\n\\tCHARACTER_LENGTH, ${1:float length}, $0\\nsnippet CHARACTER_MAX_TURN_RADIUS\\n\\tCHARACTER_MAX_TURN_RADIUS, ${1:float radius}, $0\\nsnippet CHARACTER_ORIENTATION\\n\\tCHARACTER_ORIENTATION, ${1:integer orientation}, $0\\nsnippet CHARACTER_RADIUS\\n\\tCHARACTER_RADIUS, ${1:float radius}, $0\\nsnippet CHARACTER_STAY_WITHIN_PARCEL\\n\\tCHARACTER_STAY_WITHIN_PARCEL, ${1:boolean stay}, $0\\nsnippet CHARACTER_TYPE\\n\\tCHARACTER_TYPE, ${1:integer type}, $0\\nsnippet HTTP_BODY_MAXLENGTH\\n\\tHTTP_BODY_MAXLENGTH, ${1:integer length}, $0\\nsnippet HTTP_CUSTOM_HEADER\\n\\tHTTP_CUSTOM_HEADER, ${1:string name}, ${2:string value}, $0\\nsnippet HTTP_METHOD\\n\\tHTTP_METHOD, ${1:string method}, $0\\nsnippet HTTP_MIMETYPE\\n\\tHTTP_MIMETYPE, ${1:string mimeType}, $0\\nsnippet HTTP_PRAGMA_NO_CACHE\\n\\tHTTP_PRAGMA_NO_CACHE, ${1:integer send_header}, $0\\nsnippet HTTP_VERBOSE_THROTTLE\\n\\tHTTP_VERBOSE_THROTTLE, ${1:integer noisy}, $0\\nsnippet HTTP_VERIFY_CERT\\n\\tHTTP_VERIFY_CERT, ${1:integer verify}, $0\\nsnippet RC_DATA_FLAGS\\n\\tRC_DATA_FLAGS, ${1:integer flags}, $0\\nsnippet RC_DETECT_PHANTOM\\n\\tRC_DETECT_PHANTOM, ${1:integer dectedPhantom}, $0\\nsnippet RC_MAX_HITS\\n\\tRC_MAX_HITS, ${1:integer maxHits}, $0\\nsnippet RC_REJECT_TYPES\\n\\tRC_REJECT_TYPES, ${1:integer filterMask}, $0\\nsnippet at_rot_target\\n\\tat_rot_target(${1:integer handle}, ${2:rotation targetrot}, ${3:rotation ourrot})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet at_target\\n\\tat_target(${1:integer tnum}, ${2:vector targetpos}, ${3:vector ourpos})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet attach\\n\\tattach(${1:key id})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet changed\\n\\tchanged(${1:integer change})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet collision\\n\\tcollision(${1:integer index})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet collision_end\\n\\tcollision_end(${1:integer index})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet collision_start\\n\\tcollision_start(${1:integer index})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet control\\n\\tcontrol(${1:key id}, ${2:integer level}, ${3:integer edge})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet dataserver\\n\\tdataserver(${1:key query_id}, ${2:string data})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet do\\n\\tdo\\n\\t{\\n\\t\\t$0\\n\\t}\\n\\twhile (${1:condition});\\nsnippet else\\n\\telse\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet email\\n\\temail(${1:string time}, ${2:string address}, ${3:string subject}, ${4:string message}, ${5:integer num_left})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet experience_permissions\\n\\texperience_permissions(${1:key agent_id})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet experience_permissions_denied\\n\\texperience_permissions_denied(${1:key agent_id}, ${2:integer reason})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet for\\n\\tfor (${1:start}; ${3:condition}; ${3:step})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet http_request\\n\\thttp_request(${1:key request_id}, ${2:string method}, ${3:string body})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet http_response\\n\\thttp_response(${1:key request_id}, ${2:integer status}, ${3:list metadata}, ${4:string body})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet if\\n\\tif (${1:condition})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet jump\\n\\tjump ${1:label};\\nsnippet land_collision\\n\\tland_collision(${1:vector pos})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet land_collision_end\\n\\tland_collision_end(${1:vector pos})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet land_collision_start\\n\\tland_collision_start(${1:vector pos})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet link_message\\n\\tlink_message(${1:integer sender_num}, ${2:integer num}, ${3:string str}, ${4:key id})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet listen\\n\\tlisten(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string message})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet llAbs\\n\\tllAbs(${1:integer val})\\nsnippet llAcos\\n\\tllAcos(${1:float val})\\nsnippet llAddToLandBanList\\n\\tllAddToLandBanList(${1:key agent}, ${2:float hours});\\n\\t$0\\nsnippet llAddToLandPassList\\n\\tllAddToLandPassList(${1:key agent}, ${2:float hours});\\n\\t$0\\nsnippet llAdjustSoundVolume\\n\\tllAdjustSoundVolume(${1:float volume});\\n\\t$0\\nsnippet llAgentInExperience\\n\\tllAgentInExperience(${1:key agent})\\nsnippet llAllowInventoryDrop\\n\\tllAllowInventoryDrop(${1:integer add});\\n\\t$0\\nsnippet llAngleBetween\\n\\tllAngleBetween(${1:rotation a}, ${2:rotation b})\\nsnippet llApplyImpulse\\n\\tllApplyImpulse(${1:vector force}, ${2:integer local});\\n\\t$0\\nsnippet llApplyRotationalImpulse\\n\\tllApplyRotationalImpulse(${1:vector force}, ${2:integer local});\\n\\t$0\\nsnippet llAsin\\n\\tllAsin(${1:float val})\\nsnippet llAtan2\\n\\tllAtan2(${1:float y}, ${2:float x})\\nsnippet llAttachToAvatar\\n\\tllAttachToAvatar(${1:integer attach_point});\\n\\t$0\\nsnippet llAttachToAvatarTemp\\n\\tllAttachToAvatarTemp(${1:integer attach_point});\\n\\t$0\\nsnippet llAvatarOnLinkSitTarget\\n\\tllAvatarOnLinkSitTarget(${1:integer link})\\nsnippet llAvatarOnSitTarget\\n\\tllAvatarOnSitTarget()\\nsnippet llAxes2Rot\\n\\tllAxes2Rot(${1:vector fwd}, ${2:vector left}, ${3:vector up})\\nsnippet llAxisAngle2Rot\\n\\tllAxisAngle2Rot(${1:vector axis}, ${2:float angle})\\nsnippet llBase64ToInteger\\n\\tllBase64ToInteger(${1:string str})\\nsnippet llBase64ToString\\n\\tllBase64ToString(${1:string str})\\nsnippet llBreakAllLinks\\n\\tllBreakAllLinks();\\n\\t$0\\nsnippet llBreakLink\\n\\tllBreakLink(${1:integer link});\\n\\t$0\\nsnippet llCastRay\\n\\tllCastRay(${1:vector start}, ${2:vector end}, ${3:list options});\\n\\t$0\\nsnippet llCeil\\n\\tllCeil(${1:float val})\\nsnippet llClearCameraParams\\n\\tllClearCameraParams();\\n\\t$0\\nsnippet llClearLinkMedia\\n\\tllClearLinkMedia(${1:integer link}, ${2:integer face});\\n\\t$0\\nsnippet llClearPrimMedia\\n\\tllClearPrimMedia(${1:integer face});\\n\\t$0\\nsnippet llCloseRemoteDataChannel\\n\\tllCloseRemoteDataChannel(${1:key channel});\\n\\t$0\\nsnippet llCollisionFilter\\n\\tllCollisionFilter(${1:string name}, ${2:key id}, ${3:integer accept});\\n\\t$0\\nsnippet llCollisionSound\\n\\tllCollisionSound(${1:string impact_sound}, ${2:float impact_volume});\\n\\t$0\\nsnippet llCos\\n\\tllCos(${1:float theta})\\nsnippet llCreateCharacter\\n\\tllCreateCharacter(${1:list options});\\n\\t$0\\nsnippet llCreateKeyValue\\n\\tllCreateKeyValue(${1:string k})\\nsnippet llCreateLink\\n\\tllCreateLink(${1:key target}, ${2:integer parent});\\n\\t$0\\nsnippet llCSV2List\\n\\tllCSV2List(${1:string src})\\nsnippet llDataSizeKeyValue\\n\\tllDataSizeKeyValue()\\nsnippet llDeleteCharacter\\n\\tllDeleteCharacter();\\n\\t$0\\nsnippet llDeleteKeyValue\\n\\tllDeleteKeyValue(${1:string k})\\nsnippet llDeleteSubList\\n\\tllDeleteSubList(${1:list src}, ${2:integer start}, ${3:integer end})\\nsnippet llDeleteSubString\\n\\tllDeleteSubString(${1:string src}, ${2:integer start}, ${3:integer end})\\nsnippet llDetachFromAvatar\\n\\tllDetachFromAvatar();\\n\\t$0\\nsnippet llDetectedGrab\\n\\tllDetectedGrab(${1:integer number})\\nsnippet llDetectedGroup\\n\\tllDetectedGroup(${1:integer number})\\nsnippet llDetectedKey\\n\\tllDetectedKey(${1:integer number})\\nsnippet llDetectedLinkNumber\\n\\tllDetectedLinkNumber(${1:integer number})\\nsnippet llDetectedName\\n\\tllDetectedName(${1:integer number})\\nsnippet llDetectedOwner\\n\\tllDetectedOwner(${1:integer number})\\nsnippet llDetectedPos\\n\\tllDetectedPosl(${1:integer number})\\nsnippet llDetectedRot\\n\\tllDetectedRot(${1:integer number})\\nsnippet llDetectedTouchBinormal\\n\\tllDetectedTouchBinormal(${1:integer number})\\nsnippet llDetectedTouchFace\\n\\tllDetectedTouchFace(${1:integer number})\\nsnippet llDetectedTouchNormal\\n\\tllDetectedTouchNormal(${1:integer number})\\nsnippet llDetectedTouchPos\\n\\tllDetectedTouchPos(${1:integer number})\\nsnippet llDetectedTouchST\\n\\tllDetectedTouchST(${1:integer number})\\nsnippet llDetectedTouchUV\\n\\tllDetectedTouchUV(${1:integer number})\\nsnippet llDetectedType\\n\\tllDetectedType(${1:integer number})\\nsnippet llDetectedVel\\n\\tllDetectedVel(${1:integer number})\\nsnippet llDialog\\n\\tllDialog(${1:key agent}, ${2:string message}, ${3:list buttons}, ${4:integer channel});\\n\\t$0\\nsnippet llDie\\n\\tllDie();\\n\\t$0\\nsnippet llDumpList2String\\n\\tllDumpList2String(${1:list src}, ${2:string separator})\\nsnippet llEdgeOfWorld\\n\\tllEdgeOfWorld(${1:vector pos}, ${2:vector dir})\\nsnippet llEjectFromLand\\n\\tllEjectFromLand(${1:key agent});\\n\\t$0\\nsnippet llEmail\\n\\tllEmail(${1:string address}, ${2:string subject}, ${3:string message});\\n\\t$0\\nsnippet llEscapeURL\\n\\tllEscapeURL(${1:string url})\\nsnippet llEuler2Rot\\n\\tllEuler2Rot(${1:vector v})\\nsnippet llExecCharacterCmd\\n\\tllExecCharacterCmd(${1:integer command}, ${2:list options});\\n\\t$0\\nsnippet llEvade\\n\\tllEvade(${1:key target}, ${2:list options});\\n\\t$0\\nsnippet llFabs\\n\\tllFabs(${1:float val})\\nsnippet llFleeFrom\\n\\tllFleeFrom(${1:vector position}, ${2:float distance}, ${3:list options});\\n\\t$0\\nsnippet llFloor\\n\\tllFloor(${1:float val})\\nsnippet llForceMouselook\\n\\tllForceMouselook(${1:integer mouselook});\\n\\t$0\\nsnippet llFrand\\n\\tllFrand(${1:float mag})\\nsnippet llGenerateKey\\n\\tllGenerateKey()\\nsnippet llGetAccel\\n\\tllGetAccel()\\nsnippet llGetAgentInfo\\n\\tllGetAgentInfo(${1:key id})\\nsnippet llGetAgentLanguage\\n\\tllGetAgentLanguage(${1:key agent})\\nsnippet llGetAgentList\\n\\tllGetAgentList(${1:integer scope}, ${2:list options})\\nsnippet llGetAgentSize\\n\\tllGetAgentSize(${1:key agent})\\nsnippet llGetAlpha\\n\\tllGetAlpha(${1:integer face})\\nsnippet llGetAndResetTime\\n\\tllGetAndResetTime()\\nsnippet llGetAnimation\\n\\tllGetAnimation(${1:key id})\\nsnippet llGetAnimationList\\n\\tllGetAnimationList(${1:key agent})\\nsnippet llGetAnimationOverride\\n\\tllGetAnimationOverride(${1:string anim_state})\\nsnippet llGetAttached\\n\\tllGetAttached()\\nsnippet llGetAttachedList\\n\\tllGetAttachedList(${1:key id})\\nsnippet llGetBoundingBox\\n\\tllGetBoundingBox(${1:key object})\\nsnippet llGetCameraPos\\n\\tllGetCameraPos()\\nsnippet llGetCameraRot\\n\\tllGetCameraRot()\\nsnippet llGetCenterOfMass\\n\\tllGetCenterOfMass()\\nsnippet llGetClosestNavPoint\\n\\tllGetClosestNavPoint(${1:vector point}, ${2:list options})\\nsnippet llGetColor\\n\\tllGetColor(${1:integer face})\\nsnippet llGetCreator\\n\\tllGetCreator()\\nsnippet llGetDate\\n\\tllGetDate()\\nsnippet llGetDisplayName\\n\\tllGetDisplayName(${1:key id})\\nsnippet llGetEnergy\\n\\tllGetEnergy()\\nsnippet llGetEnv\\n\\tllGetEnv(${1:string name})\\nsnippet llGetExperienceDetails\\n\\tllGetExperienceDetails(${1:key experience_id})\\nsnippet llGetExperienceErrorMessage\\n\\tllGetExperienceErrorMessage(${1:integer error})\\nsnippet llGetForce\\n\\tllGetForce()\\nsnippet llGetFreeMemory\\n\\tllGetFreeMemory()\\nsnippet llGetFreeURLs\\n\\tllGetFreeURLs()\\nsnippet llGetGeometricCenter\\n\\tllGetGeometricCenter()\\nsnippet llGetGMTclock\\n\\tllGetGMTclock()\\nsnippet llGetHTTPHeader\\n\\tllGetHTTPHeader(${1:key request_id}, ${2:string header})\\nsnippet llGetInventoryCreator\\n\\tllGetInventoryCreator(${1:string item})\\nsnippet llGetInventoryKey\\n\\tllGetInventoryKey(${1:string name})\\nsnippet llGetInventoryName\\n\\tllGetInventoryName(${1:integer type}, ${2:integer number})\\nsnippet llGetInventoryNumber\\n\\tllGetInventoryNumber(${1:integer type})\\nsnippet llGetInventoryPermMask\\n\\tllGetInventoryPermMask(${1:string item}, ${2:integer mask})\\nsnippet llGetInventoryType\\n\\tllGetInventoryType(${1:string name})\\nsnippet llGetKey\\n\\tllGetKey()\\nsnippet llGetLandOwnerAt\\n\\tllGetLandOwnerAt(${1:vector pos})\\nsnippet llGetLinkKey\\n\\tllGetLinkKey(${1:integer link})\\nsnippet llGetLinkMedia\\n\\tllGetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params})\\nsnippet llGetLinkName\\n\\tllGetLinkName(${1:integer link})\\nsnippet llGetLinkNumber\\n\\tllGetLinkNumber()\\nsnippet llGetLinkNumberOfSides\\n\\tllGetLinkNumberOfSides(${1:integer link})\\nsnippet llGetLinkPrimitiveParams\\n\\tllGetLinkPrimitiveParams(${1:integer link}, ${2:list params})\\nsnippet llGetListEntryType\\n\\tllGetListEntryType(${1:list src}, ${2:integer index})\\nsnippet llGetListLength\\n\\tllGetListLength(${1:list src})\\nsnippet llGetLocalPos\\n\\tllGetLocalPos()\\nsnippet llGetLocalRot\\n\\tllGetLocalRot()\\nsnippet llGetMass\\n\\tllGetMass()\\nsnippet llGetMassMKS\\n\\tllGetMassMKS()\\nsnippet llGetMaxScaleFactor\\n\\tllGetMaxScaleFactor()\\nsnippet llGetMemoryLimit\\n\\tllGetMemoryLimit()\\nsnippet llGetMinScaleFactor\\n\\tllGetMinScaleFactor()\\nsnippet llGetNextEmail\\n\\tllGetNextEmail(${1:string address}, ${2:string subject});\\n\\t$0\\nsnippet llGetNotecardLine\\n\\tllGetNotecardLine(${1:string name}, ${2:integer line})\\nsnippet llGetNumberOfNotecardLines\\n\\tllGetNumberOfNotecardLines(${1:string name})\\nsnippet llGetNumberOfPrims\\n\\tllGetNumberOfPrims()\\nsnippet llGetNumberOfSides\\n\\tllGetNumberOfSides()\\nsnippet llGetObjectDesc\\n\\tllGetObjectDesc()\\nsnippet llGetObjectDetails\\n\\tllGetObjectDetails(${1:key id}, ${2:list params})\\nsnippet llGetObjectMass\\n\\tllGetObjectMass(${1:key id})\\nsnippet llGetObjectName\\n\\tllGetObjectName()\\nsnippet llGetObjectPermMask\\n\\tllGetObjectPermMask(${1:integer mask})\\nsnippet llGetObjectPrimCount\\n\\tllGetObjectPrimCount(${1:key prim})\\nsnippet llGetOmega\\n\\tllGetOmega()\\nsnippet llGetOwner\\n\\tllGetOwner()\\nsnippet llGetOwnerKey\\n\\tllGetOwnerKey(${1:key id})\\nsnippet llGetParcelDetails\\n\\tllGetParcelDetails(${1:vector pos}, ${2:list params})\\nsnippet llGetParcelFlags\\n\\tllGetParcelFlags(${1:vector pos})\\nsnippet llGetParcelMaxPrims\\n\\tllGetParcelMaxPrims(${1:vector pos}, ${2:integer sim_wide})\\nsnippet llGetParcelMusicURL\\n\\tllGetParcelMusicURL()\\nsnippet llGetParcelPrimCount\\n\\tllGetParcelPrimCount(${1:vector pos}, ${2:integer category}, ${3:integer sim_wide})\\nsnippet llGetParcelPrimOwners\\n\\tllGetParcelPrimOwners(${1:vector pos})\\nsnippet llGetPermissions\\n\\tllGetPermissions()\\nsnippet llGetPermissionsKey\\n\\tllGetPermissionsKey()\\nsnippet llGetPhysicsMaterial\\n\\tllGetPhysicsMaterial()\\nsnippet llGetPos\\n\\tllGetPos()\\nsnippet llGetPrimitiveParams\\n\\tllGetPrimitiveParams(${1:list params})\\nsnippet llGetPrimMediaParams\\n\\tllGetPrimMediaParams(${1:integer face}, ${2:list params})\\nsnippet llGetRegionAgentCount\\n\\tllGetRegionAgentCount()\\nsnippet llGetRegionCorner\\n\\tllGetRegionCorner()\\nsnippet llGetRegionFlags\\n\\tllGetRegionFlags()\\nsnippet llGetRegionFPS\\n\\tllGetRegionFPS()\\nsnippet llGetRegionName\\n\\tllGetRegionName()\\nsnippet llGetRegionTimeDilation\\n\\tllGetRegionTimeDilation()\\nsnippet llGetRootPosition\\n\\tllGetRootPosition()\\nsnippet llGetRootRotation\\n\\tllGetRootRotation()\\nsnippet llGetRot\\n\\tllGetRot()\\nsnippet llGetScale\\n\\tllGetScale()\\nsnippet llGetScriptName\\n\\tllGetScriptName()\\nsnippet llGetScriptState\\n\\tllGetScriptState(${1:string script})\\nsnippet llGetSimStats\\n\\tllGetSimStats(${1:integer stat_type})\\nsnippet llGetSimulatorHostname\\n\\tllGetSimulatorHostname()\\nsnippet llGetSPMaxMemory\\n\\tllGetSPMaxMemory()\\nsnippet llGetStartParameter\\n\\tllGetStartParameter()\\nsnippet llGetStaticPath\\n\\tllGetStaticPath(${1:vector start}, ${2:vector end}, ${3:float radius}, ${4:list params})\\nsnippet llGetStatus\\n\\tllGetStatus(${1:integer status})\\nsnippet llGetSubString\\n\\tllGetSubString(${1:string src}, ${2:integer start}, ${3:integer end})\\nsnippet llGetSunDirection\\n\\tllGetSunDirection()\\nsnippet llGetTexture\\n\\tllGetTexture(${1:integer face})\\nsnippet llGetTextureOffset\\n\\tllGetTextureOffset(${1:integer face})\\nsnippet llGetTextureRot\\n\\tllGetTextureRot(${1:integer face})\\nsnippet llGetTextureScale\\n\\tllGetTextureScale(${1:integer face})\\nsnippet llGetTime\\n\\tllGetTime()\\nsnippet llGetTimeOfDay\\n\\tllGetTimeOfDay()\\nsnippet llGetTimestamp\\n\\tllGetTimestamp()\\nsnippet llGetTorque\\n\\tllGetTorque()\\nsnippet llGetUnixTime\\n\\tllGetUnixTime()\\nsnippet llGetUsedMemory\\n\\tllGetUsedMemory()\\nsnippet llGetUsername\\n\\tllGetUsername(${1:key id})\\nsnippet llGetVel\\n\\tllGetVel()\\nsnippet llGetWallclock\\n\\tllGetWallclock()\\nsnippet llGiveInventory\\n\\tllGiveInventory(${1:key destination}, ${2:string inventory});\\n\\t$0\\nsnippet llGiveInventoryList\\n\\tllGiveInventoryList(${1:key target}, ${2:string folder}, ${3:list inventory});\\n\\t$0\\nsnippet llGiveMoney\\n\\tllGiveMoney(${1:key destination}, ${2:integer amount})\\nsnippet llGround\\n\\tllGround(${1:vector offset})\\nsnippet llGroundContour\\n\\tllGroundContour(${1:vector offset})\\nsnippet llGroundNormal\\n\\tllGroundNormal(${1:vector offset})\\nsnippet llGroundRepel\\n\\tllGroundRepel(${1:float height}, ${2:integer water}, ${3:float tau});\\n\\t$0\\nsnippet llGroundSlope\\n\\tllGroundSlope(${1:vector offset})\\nsnippet llHTTPRequest\\n\\tllHTTPRequest(${1:string url}, ${2:list parameters}, ${3:string body})\\nsnippet llHTTPResponse\\n\\tllHTTPResponse(${1:key request_id}, ${2:integer status}, ${3:string body});\\n\\t$0\\nsnippet llInsertString\\n\\tllInsertString(${1:string dst}, ${2:integer pos}, ${3:string src})\\nsnippet llInstantMessage\\n\\tllInstantMessage(${1:key user}, ${2:string message});\\n\\t$0\\nsnippet llIntegerToBase64\\n\\tllIntegerToBase64(${1:integer number})\\nsnippet llJson2List\\n\\tllJson2List(${1:string json})\\nsnippet llJsonGetValue\\n\\tllJsonGetValue(${1:string json}, ${2:list specifiers})\\nsnippet llJsonSetValue\\n\\tllJsonSetValue(${1:string json}, ${2:list specifiers}, ${3:string newValue})\\nsnippet llJsonValueType\\n\\tllJsonValueType(${1:string json}, ${2:list specifiers})\\nsnippet llKey2Name\\n\\tllKey2Name(${1:key id})\\nsnippet llKeyCountKeyValue\\n\\tllKeyCountKeyValue()\\nsnippet llKeysKeyValue\\n\\tllKeysKeyValue(${1:integer first}, ${2:integer count})\\nsnippet llLinkParticleSystem\\n\\tllLinkParticleSystem(${1:integer link}, ${2:list rules});\\n\\t$0\\nsnippet llLinkSitTarget\\n\\tllLinkSitTarget(${1:integer link}, ${2:vector offset}, ${3:rotation rot});\\n\\t$0\\nsnippet llList2CSV\\n\\tllList2CSV(${1:list src})\\nsnippet llList2Float\\n\\tllList2Float(${1:list src}, ${2:integer index})\\nsnippet llList2Integer\\n\\tllList2Integer(${1:list src}, ${2:integer index})\\nsnippet llList2Json\\n\\tllList2Json(${1:string type}, ${2:list values})\\nsnippet llList2Key\\n\\tllList2Key(${1:list src}, ${2:integer index})\\nsnippet llList2List\\n\\tllList2List(${1:list src}, ${2:integer start}, ${3:integer end})\\nsnippet llList2ListStrided\\n\\tllList2ListStrided(${1:list src}, ${2:integer start}, ${3:integer end}, ${4:integer stride})\\nsnippet llList2Rot\\n\\tllList2Rot(${1:list src}, ${2:integer index})\\nsnippet llList2String\\n\\tllList2String(${1:list src}, ${2:integer index})\\nsnippet llList2Vector\\n\\tllList2Vector(${1:list src}, ${2:integer index})\\nsnippet llListen\\n\\tllListen(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string msg})\\nsnippet llListenControl\\n\\tllListenControl(${1:integer handle}, ${2:integer active});\\n\\t$0\\nsnippet llListenRemove\\n\\tllListenRemove(${1:integer handle});\\n\\t$0\\nsnippet llListFindList\\n\\tllListFindList(${1:list src}, ${2:list test})\\nsnippet llListInsertList\\n\\tllListInsertList(${1:list dest}, ${2:list src}, ${3:integer start})\\nsnippet llListRandomize\\n\\tllListRandomize(${1:list src}, ${2:integer stride})\\nsnippet llListReplaceList\\n\\tllListReplaceList(${1:list dest}, ${2:list src}, ${3:integer start}, ${4:integer end})\\nsnippet llListSort\\n\\tllListSort(${1:list src}, ${2:integer stride}, ${3:integer ascending})\\nsnippet llListStatistics\\n\\tllListStatistics(${1:integer operation}, ${2:list src})\\nsnippet llLoadURL\\n\\tllLoadURL(${1:key agent}, ${2:string message}, ${3:string url});\\n\\t$0\\nsnippet llLog\\n\\tllLog(${1:float val})\\nsnippet llLog10\\n\\tllLog10(${1:float val})\\nsnippet llLookAt\\n\\tllLookAt(${1:vector target}, ${2:float strength}, ${3:float damping});\\n\\t$0\\nsnippet llLoopSound\\n\\tllLoopSound(${1:string sound}, ${2:float volume});\\n\\t$0\\nsnippet llLoopSoundMaster\\n\\tllLoopSoundMaster(${1:string sound}, ${2:float volume});\\n\\t$0\\nsnippet llLoopSoundSlave\\n\\tllLoopSoundSlave(${1:string sound}, ${2:float volume});\\n\\t$0\\nsnippet llManageEstateAccess\\n\\tllManageEstateAccess(${1:integer action}, ${2:key agent})\\nsnippet llMapDestination\\n\\tllMapDestination(${1:string simname}, ${2:vector pos}, ${3:vector look_at});\\n\\t$0\\nsnippet llMD5String\\n\\tllMD5String(${1:string src}, ${2:integer nonce})\\nsnippet llMessageLinked\\n\\tllMessageLinked(${1:integer link}, ${2:integer num}, ${3:string str}, ${4:key id});\\n\\t$0\\nsnippet llMinEventDelay\\n\\tllMinEventDelay(${1:float delay});\\n\\t$0\\nsnippet llModifyLand\\n\\tllModifyLand(${1:integer action}, ${2:integer brush});\\n\\t$0\\nsnippet llModPow\\n\\tllModPow(${1:integer a}, ${2:integer b}, ${3:integer c})\\nsnippet llMoveToTarget\\n\\tllMoveToTarget(${1:vector target}, ${2:float tau});\\n\\t$0\\nsnippet llNavigateTo\\n\\tllNavigateTo(${1:vector pos}, ${2:list options});\\n\\t$0\\nsnippet llOffsetTexture\\n\\tllOffsetTexture(${1:float u}, ${2:float v}, ${3:integer face});\\n\\t$0\\nsnippet llOpenRemoteDataChannel\\n\\tllOpenRemoteDataChannel();\\n\\t$0\\nsnippet llOverMyLand\\n\\tllOverMyLand(${1:key id})\\nsnippet llOwnerSay\\n\\tllOwnerSay(${1:string msg});\\n\\t$0\\nsnippet llParcelMediaCommandList\\n\\tllParcelMediaCommandList(${1:list commandList});\\n\\t$0\\nsnippet llParcelMediaQuery\\n\\tllParcelMediaQuery(${1:list query})\\nsnippet llParseString2List\\n\\tllParseString2List(${1:string src}, ${2:list separators}, ${3:list spacers})\\nsnippet llParseStringKeepNulls\\n\\tllParseStringKeepNulls(${1:string src}, ${2:list separators}, ${3:list spacers})\\nsnippet llParticleSystem\\n\\tllParticleSystem(${1:list rules});\\n\\t$0\\nsnippet llPassCollisions\\n\\tllPassCollisions(${1:integer pass});\\n\\t$0\\nsnippet llPassTouches\\n\\tllPassTouches(${1:integer pass});\\n\\t$0\\nsnippet llPatrolPoints\\n\\tllPatrolPoints(${1:list patrolPoints}, ${2:list options});\\n\\t$0\\nsnippet llPlaySound\\n\\tllPlaySound(${1:string sound}, ${2:float volume});\\n\\t$0\\nsnippet llPlaySoundSlave\\n\\tllPlaySoundSlave(${1:string sound}, ${2:float volume});\\n\\t$0\\nsnippet llPow\\n\\tllPow(${1:float base}, ${2:float exponent})\\nsnippet llPreloadSound\\n\\tllPreloadSound(${1:string sound});\\n\\t$0\\nsnippet llPursue\\n\\tllPursue(${1:key target}, ${2:list options});\\n\\t$0\\nsnippet llPushObject\\n\\tllPushObject(${1:key target}, ${2:vector impulse}, ${3:vector ang_impulse}, ${4:integer local});\\n\\t$0\\nsnippet llReadKeyValue\\n\\tllReadKeyValue(${1:string k})\\nsnippet llRegionSay\\n\\tllRegionSay(${1:integer channel}, ${2:string msg});\\n\\t$0\\nsnippet llRegionSayTo\\n\\tllRegionSayTo(${1:key target}, ${2:integer channel}, ${3:string msg});\\n\\t$0\\nsnippet llReleaseControls\\n\\tllReleaseControls();\\n\\t$0\\nsnippet llReleaseURL\\n\\tllReleaseURL(${1:string url});\\n\\t$0\\nsnippet llRemoteDataReply\\n\\tllRemoteDataReply(${1:key channel}, ${2:key message_id}, ${3:string sdata}, ${4:integer idata});\\n\\t$0\\nsnippet llRemoteLoadScriptPin\\n\\tllRemoteLoadScriptPin(${1:key target}, ${2:string name}, ${3:integer pin}, ${4:integer running}, ${5:integer start_param});\\n\\t$0\\nsnippet llRemoveFromLandBanList\\n\\tllRemoveFromLandBanList(${1:key agent});\\n\\t$0\\nsnippet llRemoveFromLandPassList\\n\\tllRemoveFromLandPassList(${1:key agent});\\n\\t$0\\nsnippet llRemoveInventory\\n\\tllRemoveInventory(${1:string item});\\n\\t$0\\nsnippet llRemoveVehicleFlags\\n\\tllRemoveVehicleFlags(${1:integer flags});\\n\\t$0\\nsnippet llRequestAgentData\\n\\tllRequestAgentData(${1:key id}, ${2:integer data})\\nsnippet llRequestDisplayName\\n\\tllRequestDisplayName(${1:key id})\\nsnippet llRequestExperiencePermissions\\n\\tllRequestExperiencePermissions(${1:key agent}, ${2:string name})\\nsnippet llRequestInventoryData\\n\\tllRequestInventoryData(${1:string name})\\nsnippet llRequestPermissions\\n\\tllRequestPermissions(${1:key agent}, ${2:integer permissions})\\nsnippet llRequestSecureURL\\n\\tllRequestSecureURL()\\nsnippet llRequestSimulatorData\\n\\tllRequestSimulatorData(${1:string region}, ${2:integer data})\\nsnippet llRequestURL\\n\\tllRequestURL()\\nsnippet llRequestUsername\\n\\tllRequestUsername(${1:key id})\\nsnippet llResetAnimationOverride\\n\\tllResetAnimationOverride(${1:string anim_state});\\n\\t$0\\nsnippet llResetLandBanList\\n\\tllResetLandBanList();\\n\\t$0\\nsnippet llResetLandPassList\\n\\tllResetLandPassList();\\n\\t$0\\nsnippet llResetOtherScript\\n\\tllResetOtherScript(${1:string name});\\n\\t$0\\nsnippet llResetScript\\n\\tllResetScript();\\n\\t$0\\nsnippet llResetTime\\n\\tllResetTime();\\n\\t$0\\nsnippet llReturnObjectsByID\\n\\tllReturnObjectsByID(${1:list objects})\\nsnippet llReturnObjectsByOwner\\n\\tllReturnObjectsByOwner(${1:key owner}, ${2:integer scope})\\nsnippet llRezAtRoot\\n\\tllRezAtRoot(${1:string inventory}, ${2:vector position}, ${3:vector velocity}, ${4:rotation rot}, ${5:integer param});\\n\\t$0\\nsnippet llRezObject\\n\\tllRezObject(${1:string inventory}, ${2:vector pos}, ${3:vector vel}, ${4:rotation rot}, ${5:integer param});\\n\\t$0\\nsnippet llRot2Angle\\n\\tllRot2Angle(${1:rotation rot})\\nsnippet llRot2Axis\\n\\tllRot2Axis(${1:rotation rot})\\nsnippet llRot2Euler\\n\\tllRot2Euler(${1:rotation quat})\\nsnippet llRot2Fwd\\n\\tllRot2Fwd(${1:rotation q})\\nsnippet llRot2Left\\n\\tllRot2Left(${1:rotation q})\\nsnippet llRot2Up\\n\\tllRot2Up(${1:rotation q})\\nsnippet llRotateTexture\\n\\tllRotateTexture(${1:float angle}, ${2:integer face});\\n\\t$0\\nsnippet llRotBetween\\n\\tllRotBetween(${1:vector start}, ${2:vector end})\\nsnippet llRotLookAt\\n\\tllRotLookAt(${1:rotation target_direction}, ${2:float strength}, ${3:float damping});\\n\\t$0\\nsnippet llRotTarget\\n\\tllRotTarget(${1:rotation rot}, ${2:float error})\\nsnippet llRotTargetRemove\\n\\tllRotTargetRemove(${1:integer handle});\\n\\t$0\\nsnippet llRound\\n\\tllRound(${1:float val})\\nsnippet llSameGroup\\n\\tllSameGroup(${1:key group})\\nsnippet llSay\\n\\tllSay(${1:integer channel}, ${2:string msg});\\n\\t$0\\nsnippet llScaleByFactor\\n\\tllScaleByFactor(${1:float scaling_factor})\\nsnippet llScaleTexture\\n\\tllScaleTexture(${1:float u}, ${2:float v}, ${3:integer face});\\n\\t$0\\nsnippet llScriptDanger\\n\\tllScriptDanger(${1:vector pos})\\nsnippet llScriptProfiler\\n\\tllScriptProfiler(${1:integer flags});\\n\\t$0\\nsnippet llSendRemoteData\\n\\tllSendRemoteData(${1:key channel}, ${2:string dest}, ${3:integer idata}, ${4:string sdata})\\nsnippet llSensor\\n\\tllSensor(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc});\\n\\t$0\\nsnippet llSensorRepeat\\n\\tllSensorRepeat(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc}, ${6:float rate});\\n\\t$0\\nsnippet llSetAlpha\\n\\tllSetAlpha(${1:float alpha}, ${2:integer face});\\n\\t$0\\nsnippet llSetAngularVelocity\\n\\tllSetAngularVelocity(${1:vector force}, ${2:integer local});\\n\\t$0\\nsnippet llSetAnimationOverride\\n\\tllSetAnimationOverride(${1:string anim_state}, ${2:string anim})\\nsnippet llSetBuoyancy\\n\\tllSetBuoyancy(${1:float buoyancy});\\n\\t$0\\nsnippet llSetCameraAtOffset\\n\\tllSetCameraAtOffset(${1:vector offset});\\n\\t$0\\nsnippet llSetCameraEyeOffset\\n\\tllSetCameraEyeOffset(${1:vector offset});\\n\\t$0\\nsnippet llSetCameraParams\\n\\tllSetCameraParams(${1:list rules});\\n\\t$0\\nsnippet llSetClickAction\\n\\tllSetClickAction(${1:integer action});\\n\\t$0\\nsnippet llSetColor\\n\\tllSetColor(${1:vector color}, ${2:integer face});\\n\\t$0\\nsnippet llSetContentType\\n\\tllSetContentType(${1:key request_id}, ${2:integer content_type});\\n\\t$0\\nsnippet llSetDamage\\n\\tllSetDamage(${1:float damage});\\n\\t$0\\nsnippet llSetForce\\n\\tllSetForce(${1:vector force}, ${2:integer local});\\n\\t$0\\nsnippet llSetForceAndTorque\\n\\tllSetForceAndTorque(${1:vector force}, ${2:vector torque}, ${3:integer local});\\n\\t$0\\nsnippet llSetHoverHeight\\n\\tllSetHoverHeight(${1:float height}, ${2:integer water}, ${3:float tau});\\n\\t$0\\nsnippet llSetKeyframedMotion\\n\\tllSetKeyframedMotion(${1:list keyframes}, ${2:list options});\\n\\t$0\\nsnippet llSetLinkAlpha\\n\\tllSetLinkAlpha(${1:integer link}, ${2:float alpha}, ${3:integer face});\\n\\t$0\\nsnippet llSetLinkCamera\\n\\tllSetLinkCamera(${1:integer link}, ${2:vector eye}, ${3:vector at});\\n\\t$0\\nsnippet llSetLinkColor\\n\\tllSetLinkColor(${1:integer link}, ${2:vector color}, ${3:integer face});\\n\\t$0\\nsnippet llSetLinkMedia\\n\\tllSetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params});\\n\\t$0\\nsnippet llSetLinkPrimitiveParams\\n\\tllSetLinkPrimitiveParams(${1:integer link}, ${2:list rules});\\n\\t$0\\nsnippet llSetLinkPrimitiveParamsFast\\n\\tllSetLinkPrimitiveParamsFast(${1:integer link}, ${2:list rules});\\n\\t$0\\nsnippet llSetLinkTexture\\n\\tllSetLinkTexture(${1:integer link}, ${2:string texture}, ${3:integer face});\\n\\t$0\\nsnippet llSetLinkTextureAnim\\n\\tllSetLinkTextureAnim(${1:integer link}, ${2:integer mode}, ${3:integer face}, ${4:integer sizex}, ${5:integer sizey}, ${6:float start}, ${7:float length}, ${8:float rate});\\n\\t$0\\nsnippet llSetLocalRot\\n\\tllSetLocalRot(${1:rotation rot});\\n\\t$0\\nsnippet llSetMemoryLimit\\n\\tllSetMemoryLimit(${1:integer limit})\\nsnippet llSetObjectDesc\\n\\tllSetObjectDesc(${1:string description});\\n\\t$0\\nsnippet llSetObjectName\\n\\tllSetObjectName(${1:string name});\\n\\t$0\\nsnippet llSetParcelMusicURL\\n\\tllSetParcelMusicURL(${1:string url});\\n\\t$0\\nsnippet llSetPayPrice\\n\\tllSetPayPrice(${1:integer price}, [${2:integer price_button_a}, ${3:integer price_button_b}, ${4:integer price_button_c}, ${5:integer price_button_d}]);\\n\\t$0\\nsnippet llSetPhysicsMaterial\\n\\tllSetPhysicsMaterial(${1:integer mask}, ${2:float gravity_multiplier}, ${3:float restitution}, ${4:float friction}, ${5:float density});\\n\\t$0\\nsnippet llSetPos\\n\\tllSetPos(${1:vector pos});\\n\\t$0\\nsnippet llSetPrimitiveParams\\n\\tllSetPrimitiveParams(${1:list rules});\\n\\t$0\\nsnippet llSetPrimMediaParams\\n\\tllSetPrimMediaParams(${1:integer face}, ${2:list params});\\n\\t$0\\nsnippet llSetRegionPos\\n\\tllSetRegionPos(${1:vector position})\\nsnippet llSetRemoteScriptAccessPin\\n\\tllSetRemoteScriptAccessPin(${1:integer pin});\\n\\t$0\\nsnippet llSetRot\\n\\tllSetRot(${1:rotation rot});\\n\\t$0\\nsnippet llSetScale\\n\\tllSetScale(${1:vector size});\\n\\t$0\\nsnippet llSetScriptState\\n\\tllSetScriptState(${1:string name}, ${2:integer run});\\n\\t$0\\nsnippet llSetSitText\\n\\tllSetSitText(${1:string text});\\n\\t$0\\nsnippet llSetSoundQueueing\\n\\tllSetSoundQueueing(${1:integer queue});\\n\\t$0\\nsnippet llSetSoundRadius\\n\\tllSetSoundRadius(${1:float radius});\\n\\t$0\\nsnippet llSetStatus\\n\\tllSetStatus(${1:integer status}, ${2:integer value});\\n\\t$0\\nsnippet llSetText\\n\\tllSetText(${1:string text}, ${2:vector color}, ${3:float alpha});\\n\\t$0\\nsnippet llSetTexture\\n\\tllSetTexture(${1:string texture}, ${2:integer face});\\n\\t$0\\nsnippet llSetTextureAnim\\n\\tllSetTextureAnim(${1:integer mode}, ${2:integer face}, ${3:integer sizex}, ${4:integer sizey}, ${5:float start}, ${6:float length}, ${7:float rate});\\n\\t$0\\nsnippet llSetTimerEvent\\n\\tllSetTimerEvent(${1:float sec});\\n\\t$0\\nsnippet llSetTorque\\n\\tllSetTorque(${1:vector torque}, ${2:integer local});\\n\\t$0\\nsnippet llSetTouchText\\n\\tllSetTouchText(${1:string text});\\n\\t$0\\nsnippet llSetVehicleFlags\\n\\tllSetVehicleFlags(${1:integer flags});\\n\\t$0\\nsnippet llSetVehicleFloatParam\\n\\tllSetVehicleFloatParam(${1:integer param}, ${2:float value});\\n\\t$0\\nsnippet llSetVehicleRotationParam\\n\\tllSetVehicleRotationParam(${1:integer param}, ${2:rotation rot});\\n\\t$0\\nsnippet llSetVehicleType\\n\\tllSetVehicleType(${1:integer type});\\n\\t$0\\nsnippet llSetVehicleVectorParam\\n\\tllSetVehicleVectorParam(${1:integer param}, ${2:vector vec});\\n\\t$0\\nsnippet llSetVelocity\\n\\tllSetVelocity(${1:vector force}, ${2:integer local});\\n\\t$0\\nsnippet llSHA1String\\n\\tllSHA1String(${1:string src})\\nsnippet llShout\\n\\tllShout(${1:integer channel}, ${2:string msg});\\n\\t$0\\nsnippet llSin\\n\\tllSin(${1:float theta})\\nsnippet llSitTarget\\n\\tllSitTarget(${1:vector offset}, ${2:rotation rot});\\n\\t$0\\nsnippet llSleep\\n\\tllSleep(${1:float sec});\\n\\t$0\\nsnippet llSqrt\\n\\tllSqrt(${1:float val})\\nsnippet llStartAnimation\\n\\tllStartAnimation(${1:string anim});\\n\\t$0\\nsnippet llStopAnimation\\n\\tllStopAnimation(${1:string anim});\\n\\t$0\\nsnippet llStopHover\\n\\tllStopHover();\\n\\t$0\\nsnippet llStopLookAt\\n\\tllStopLookAt();\\n\\t$0\\nsnippet llStopMoveToTarget\\n\\tllStopMoveToTarget();\\n\\t$0\\nsnippet llStopSound\\n\\tllStopSound();\\n\\t$0\\nsnippet llStringLength\\n\\tllStringLength(${1:string str})\\nsnippet llStringToBase64\\n\\tllStringToBase64(${1:string str})\\nsnippet llStringTrim\\n\\tllStringTrim(${1:string src}, ${2:integer type})\\nsnippet llSubStringIndex\\n\\tllSubStringIndex(${1:string source}, ${2:string pattern})\\nsnippet llTakeControls\\n\\tllTakeControls(${1:integer controls}, ${2:integer accept}, ${3:integer pass_on});\\n\\t$0\\nsnippet llTan\\n\\tllTan(${1:float theta})\\nsnippet llTarget\\n\\tllTarget(${1:vector position}, ${2:float range})\\nsnippet llTargetOmega\\n\\tllTargetOmega(${1:vector axis}, ${2:float spinrate}, ${3:float gain});\\n\\t$0\\nsnippet llTargetRemove\\n\\tllTargetRemove(${1:integer handle});\\n\\t$0\\nsnippet llTeleportAgent\\n\\tllTeleportAgent(${1:key agent}, ${2:string landmark}, ${3:vector position}, ${4:vector look_at});\\n\\t$0\\nsnippet llTeleportAgentGlobalCoords\\n\\tllTeleportAgentGlobalCoords(${1:key agent}, ${2:vector global_coordinates}, ${3:vector region_coordinates}, ${4:vector look_at});\\n\\t$0\\nsnippet llTeleportAgentHome\\n\\tllTeleportAgentHome(${1:key agent});\\n\\t$0\\nsnippet llTextBox\\n\\tllTextBox(${1:key agent}, ${2:string message}, ${3:integer channel});\\n\\t$0\\nsnippet llToLower\\n\\tllToLower(${1:string src})\\nsnippet llToUpper\\n\\tllToUpper(${1:string src})\\nsnippet llTransferLindenDollars\\n\\tllTransferLindenDollars(${1:key destination}, ${2:integer amount})\\nsnippet llTriggerSound\\n\\tllTriggerSound(${1:string sound}, ${2:float volume});\\n\\t$0\\nsnippet llTriggerSoundLimited\\n\\tllTriggerSoundLimited(${1:string sound}, ${2:float volume}, ${3:vector top_north_east}, ${4:vector bottom_south_west});\\n\\t$0\\nsnippet llUnescapeURL\\n\\tllUnescapeURL(${1:string url})\\nsnippet llUnSit\\n\\tllUnSit(${1:key id});\\n\\t$0\\nsnippet llUpdateCharacter\\n\\tllUpdateCharacter(${1:list options})\\nsnippet llUpdateKeyValue\\n\\tllUpdateKeyValue(${1:string k}, ${2:string v}, ${3:integer checked}, ${4:string ov})\\nsnippet llVecDist\\n\\tllVecDist(${1:vector vec_a}, ${2:vector vec_b})\\nsnippet llVecMag\\n\\tllVecMag(${1:vector vec})\\nsnippet llVecNorm\\n\\tllVecNorm(${1:vector vec})\\nsnippet llVolumeDetect\\n\\tllVolumeDetect(${1:integer detect});\\n\\t$0\\nsnippet llWanderWithin\\n\\tllWanderWithin(${1:vector origin}, ${2:vector dist}, ${3:list options});\\n\\t$0\\nsnippet llWater\\n\\tllWater(${1:vector offset});\\n\\t$0\\nsnippet llWhisper\\n\\tllWhisper(${1:integer channel}, ${2:string msg});\\n\\t$0\\nsnippet llWind\\n\\tllWind(${1:vector offset});\\n\\t$0\\nsnippet llXorBase64\\n\\tllXorBase64(${1:string str1}, ${2:string str2})\\nsnippet money\\n\\tmoney(${1:key id}, ${2:integer amount})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet object_rez\\n\\tobject_rez(${1:key id})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet on_rez\\n\\ton_rez(${1:integer start_param})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet path_update\\n\\tpath_update(${1:integer type}, ${2:list reserved})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet remote_data\\n\\tremote_data(${1:integer event_type}, ${2:key channel}, ${3:key message_id}, ${4:string sender}, ${5:integer idata}, ${6:string sdata})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet run_time_permissions\\n\\trun_time_permissions(${1:integer perm})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet sensor\\n\\tsensor(${1:integer index})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet state\\n\\tstate ${1:name}\\nsnippet touch\\n\\ttouch(${1:integer index})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet touch_end\\n\\ttouch_end(${1:integer index})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet touch_start\\n\\ttouch_start(${1:integer index})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet transaction_result\\n\\ttransaction_result(${1:key id}, ${2:integer success}, ${3:string data})\\n\\t{\\n\\t\\t$0\\n\\t}\\nsnippet while\\n\\twhile (${1:condition})\\n\\t{\\n\\t\\t$0\\n\\t}\\n\";\n\n});\n\nace.define(\"ace/snippets/lsl\",[\"require\",\"exports\",\"module\",\"ace/snippets/lsl.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./lsl.snippets\");\nexports.scope = \"lsl\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/lsl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/lua.js",
    "content": "ace.define(\"ace/snippets/lua.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet #!\\n\\t#!/usr/bin/env lua\\n\\t$1\\nsnippet local\\n\\tlocal ${1:x} = ${2:1}\\nsnippet fun\\n\\tfunction ${1:fname}(${2:...})\\n\\t\\t${3:-- body}\\n\\tend\\nsnippet for\\n\\tfor ${1:i}=${2:1},${3:10} do\\n\\t\\t${4:print(i)}\\n\\tend\\nsnippet forp\\n\\tfor ${1:i},${2:v} in pairs(${3:table_name}) do\\n\\t   ${4:-- body}\\n\\tend\\nsnippet fori\\n\\tfor ${1:i},${2:v} in ipairs(${3:table_name}) do\\n\\t   ${4:-- body}\\n\\tend\\n\";\n\n});\n\nace.define(\"ace/snippets/lua\",[\"require\",\"exports\",\"module\",\"ace/snippets/lua.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./lua.snippets\");\nexports.scope = \"lua\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/lua\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/luapage.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/luapage\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/lucene.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/lucene\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/makefile.js",
    "content": "ace.define(\"ace/snippets/makefile.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet ifeq\\n\\tifeq (${1:cond0},${2:cond1})\\n\\t\\t${3:code}\\n\\tendif\\n\";\n\n});\n\nace.define(\"ace/snippets/makefile\",[\"require\",\"exports\",\"module\",\"ace/snippets/makefile.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./makefile.snippets\");\nexports.scope = \"makefile\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/makefile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/markdown.js",
    "content": "ace.define(\"ace/snippets/markdown.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# Markdown\\n\\n# Includes octopress (http://octopress.org/) snippets\\n\\nsnippet [\\n\\t[${1:text}](http://${2:address} \\\"${3:title}\\\")\\nsnippet [*\\n\\t[${1:link}](${2:`@*`} \\\"${3:title}\\\")${4}\\n\\nsnippet [:\\n\\t[${1:id}]: http://${2:url} \\\"${3:title}\\\"\\nsnippet [:*\\n\\t[${1:id}]: ${2:`@*`} \\\"${3:title}\\\"\\n\\nsnippet ![\\n\\t![${1:alttext}](${2:/images/image.jpg} \\\"${3:title}\\\")\\nsnippet ![*\\n\\t![${1:alt}](${2:`@*`} \\\"${3:title}\\\")${4}\\n\\nsnippet ![:\\n\\t![${1:id}]: ${2:url} \\\"${3:title}\\\"\\nsnippet ![:*\\n\\t![${1:id}]: ${2:`@*`} \\\"${3:title}\\\"\\n\\nsnippet ===\\nregex /^/=+/=*//\\n\\t${PREV_LINE/./=/g}\\n\\t\\n\\t${0}\\nsnippet ---\\nregex /^/-+/-*//\\n\\t${PREV_LINE/./-/g}\\n\\t\\n\\t${0}\\nsnippet blockquote\\n\\t{% blockquote %}\\n\\t${1:quote}\\n\\t{% endblockquote %}\\n\\nsnippet blockquote-author\\n\\t{% blockquote ${1:author}, ${2:title} %}\\n\\t${3:quote}\\n\\t{% endblockquote %}\\n\\nsnippet blockquote-link\\n\\t{% blockquote ${1:author} ${2:URL} ${3:link_text} %}\\n\\t${4:quote}\\n\\t{% endblockquote %}\\n\\nsnippet bt-codeblock-short\\n\\t```\\n\\t${1:code_snippet}\\n\\t```\\n\\nsnippet bt-codeblock-full\\n\\t``` ${1:language} ${2:title} ${3:URL} ${4:link_text}\\n\\t${5:code_snippet}\\n\\t```\\n\\nsnippet codeblock-short\\n\\t{% codeblock %}\\n\\t${1:code_snippet}\\n\\t{% endcodeblock %}\\n\\nsnippet codeblock-full\\n\\t{% codeblock ${1:title} lang:${2:language} ${3:URL} ${4:link_text} %}\\n\\t${5:code_snippet}\\n\\t{% endcodeblock %}\\n\\nsnippet gist-full\\n\\t{% gist ${1:gist_id} ${2:filename} %}\\n\\nsnippet gist-short\\n\\t{% gist ${1:gist_id} %}\\n\\nsnippet img\\n\\t{% img ${1:class} ${2:URL} ${3:width} ${4:height} ${5:title_text} ${6:alt_text} %}\\n\\nsnippet youtube\\n\\t{% youtube ${1:video_id} %}\\n\\n# The quote should appear only once in the text. It is inherently part of it.\\n# See http://octopress.org/docs/plugins/pullquote/ for more info.\\n\\nsnippet pullquote\\n\\t{% pullquote %}\\n\\t${1:text} {\\\" ${2:quote} \\\"} ${3:text}\\n\\t{% endpullquote %}\\n\";\n\n});\n\nace.define(\"ace/snippets/markdown\",[\"require\",\"exports\",\"module\",\"ace/snippets/markdown.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./markdown.snippets\");\nexports.scope = \"markdown\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/markdown\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/mask.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/mask\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/matlab.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/matlab\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/maze.js",
    "content": "ace.define(\"ace/snippets/maze.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet >\\ndescription assignment\\nscope maze\\n\\t-> ${1}= ${2}\\n\\nsnippet >\\ndescription if\\nscope maze\\n\\t-> IF ${2:**} THEN %${3:L} ELSE %${4:R}\\n\";\n\n});\n\nace.define(\"ace/snippets/maze\",[\"require\",\"exports\",\"module\",\"ace/snippets/maze.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./maze.snippets\");\nexports.scope = \"maze\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/maze\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/mediawiki.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/mediawiki\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/mel.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/mel\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/mips.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/mips\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/mixal.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/mixal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/mushcode.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/mushcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/mysql.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/mysql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/nginx.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/nginx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/nim.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/nim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/nix.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/nix\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/nsis.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/nsis\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/nunjucks.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/nunjucks\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/objectivec.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/objectivec\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/ocaml.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/ocaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/partiql.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/partiql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/pascal.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/pascal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/perl.js",
    "content": "ace.define(\"ace/snippets/perl.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# #!/usr/bin/perl\\nsnippet #!\\n\\t#!/usr/bin/env perl\\n\\n# Hash Pointer\\nsnippet .\\n\\t =>\\n# Function\\nsnippet sub\\n\\tsub ${1:function_name} {\\n\\t\\t${2:#body ...}\\n\\t}\\n# Conditional\\nsnippet if\\n\\tif (${1}) {\\n\\t\\t${2:# body...}\\n\\t}\\n# Conditional if..else\\nsnippet ife\\n\\tif (${1}) {\\n\\t\\t${2:# body...}\\n\\t}\\n\\telse {\\n\\t\\t${3:# else...}\\n\\t}\\n# Conditional if..elsif..else\\nsnippet ifee\\n\\tif (${1}) {\\n\\t\\t${2:# body...}\\n\\t}\\n\\telsif (${3}) {\\n\\t\\t${4:# elsif...}\\n\\t}\\n\\telse {\\n\\t\\t${5:# else...}\\n\\t}\\n# Conditional One-line\\nsnippet xif\\n\\t${1:expression} if ${2:condition};${3}\\n# Unless conditional\\nsnippet unless\\n\\tunless (${1}) {\\n\\t\\t${2:# body...}\\n\\t}\\n# Unless conditional One-line\\nsnippet xunless\\n\\t${1:expression} unless ${2:condition};${3}\\n# Try/Except\\nsnippet eval\\n\\tlocal $@;\\n\\teval {\\n\\t\\t${1:# do something risky...}\\n\\t};\\n\\tif (my $e = $@) {\\n\\t\\t${2:# handle failure...}\\n\\t}\\n# While Loop\\nsnippet wh\\n\\twhile (${1}) {\\n\\t\\t${2:# body...}\\n\\t}\\n# While Loop One-line\\nsnippet xwh\\n\\t${1:expression} while ${2:condition};${3}\\n# C-style For Loop\\nsnippet cfor\\n\\tfor (my $${2:var} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\\t\\t${4:# body...}\\n\\t}\\n# For loop one-line\\nsnippet xfor\\n\\t${1:expression} for @${2:array};${3}\\n# Foreach Loop\\nsnippet for\\n\\tforeach my $${1:x} (@${2:array}) {\\n\\t\\t${3:# body...}\\n\\t}\\n# Foreach Loop One-line\\nsnippet fore\\n\\t${1:expression} foreach @${2:array};${3}\\n# Package\\nsnippet package\\n\\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`};\\n\\n\\t${2}\\n\\n\\t1;\\n\\n\\t__END__\\n# Package syntax perl >= 5.14\\nsnippet packagev514\\n\\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`} ${2:0.99};\\n\\n\\t${3}\\n\\n\\t1;\\n\\n\\t__END__\\n#moose\\nsnippet moose\\n\\tuse Moose;\\n\\tuse namespace::autoclean;\\n\\t${1:#}BEGIN {extends '${2:ParentClass}'};\\n\\n\\t${3}\\n# parent\\nsnippet parent\\n\\tuse parent qw(${1:Parent Class});\\n# Read File\\nsnippet slurp\\n\\tmy $${1:var} = do { local $/; open my $file, '<', \\\"${2:file}\\\"; <$file> };\\n\\t${3}\\n# strict warnings\\nsnippet strwar\\n\\tuse strict;\\n\\tuse warnings;\\n# older versioning with perlcritic bypass\\nsnippet vers\\n\\t## no critic\\n\\tour $VERSION = '${1:version}';\\n\\teval $VERSION;\\n\\t## use critic\\n# new 'switch' like feature\\nsnippet switch\\n\\tuse feature 'switch';\\n\\n# Anonymous subroutine\\nsnippet asub\\n\\tsub {\\n\\t \\t${1:# body }\\n\\t}\\n\\n\\n\\n# Begin block\\nsnippet begin\\n\\tBEGIN {\\n\\t\\t${1:# begin body}\\n\\t}\\n\\n# call package function with some parameter\\nsnippet pkgmv\\n\\t__PACKAGE__->${1:package_method}(${2:var})\\n\\n# call package function without a parameter\\nsnippet pkgm\\n\\t__PACKAGE__->${1:package_method}()\\n\\n# call package \\\"get_\\\" function without a parameter\\nsnippet pkget\\n\\t__PACKAGE__->get_${1:package_method}()\\n\\n# call package function with a parameter\\nsnippet pkgetv\\n\\t__PACKAGE__->get_${1:package_method}(${2:var})\\n\\n# complex regex\\nsnippet qrx\\n\\tqr/\\n\\t     ${1:regex}\\n\\t/xms\\n\\n#simpler regex\\nsnippet qr/\\n\\tqr/${1:regex}/x\\n\\n#given\\nsnippet given\\n\\tgiven ($${1:var}) {\\n\\t\\t${2:# cases}\\n\\t\\t${3:# default}\\n\\t}\\n\\n# switch-like case\\nsnippet when\\n\\twhen (${1:case}) {\\n\\t\\t${2:# body}\\n\\t}\\n\\n# hash slice\\nsnippet hslice\\n\\t@{ ${1:hash}  }{ ${2:array} }\\n\\n\\n# map\\nsnippet map\\n\\tmap {  ${2: body }    }  ${1: @array } ;\\n\\n\\n\\n# Pod stub\\nsnippet ppod\\n\\t=head1 NAME\\n\\n\\t${1:ClassName} - ${2:ShortDesc}\\n\\n\\t=head1 SYNOPSIS\\n\\n\\t  use $1;\\n\\n\\t  ${3:# synopsis...}\\n\\n\\t=head1 DESCRIPTION\\n\\n\\t${4:# longer description...}\\n\\n\\n\\t=head1 INTERFACE\\n\\n\\n\\t=head1 DEPENDENCIES\\n\\n\\n\\t=head1 SEE ALSO\\n\\n\\n# Heading for a subroutine stub\\nsnippet psub\\n\\t=head2 ${1:MethodName}\\n\\n\\t${2:Summary....}\\n\\n# Heading for inline subroutine pod\\nsnippet psubi\\n\\t=head2 ${1:MethodName}\\n\\n\\t${2:Summary...}\\n\\n\\n\\t=cut\\n# inline documented subroutine\\nsnippet subpod\\n\\t=head2 $1\\n\\n\\tSummary of $1\\n\\n\\t=cut\\n\\n\\tsub ${1:subroutine_name} {\\n\\t\\t${2:# body...}\\n\\t}\\n# Subroutine signature\\nsnippet parg\\n\\t=over 2\\n\\n\\t=item\\n\\tArguments\\n\\n\\n\\t=over 3\\n\\n\\t=item\\n\\tC<${1:DataStructure}>\\n\\n\\t  ${2:Sample}\\n\\n\\n\\t=back\\n\\n\\n\\t=item\\n\\tReturn\\n\\n\\t=over 3\\n\\n\\n\\t=item\\n\\tC<${3:...return data}>\\n\\n\\n\\t=back\\n\\n\\n\\t=back\\n\\n\\n\\n# Moose has\\nsnippet has\\n\\thas ${1:attribute} => (\\n\\t\\tis\\t    => '${2:ro|rw}',\\n\\t\\tisa \\t=> '${3:Str|Int|HashRef|ArrayRef|etc}',\\n\\t\\tdefault => sub {\\n\\t\\t\\t${4:defaultvalue}\\n\\t\\t},\\n\\t\\t${5:# other attributes}\\n\\t);\\n\\n\\n# override\\nsnippet override\\n\\toverride ${1:attribute} => sub {\\n\\t\\t${2:# my $self = shift;};\\n\\t\\t${3:# my ($self, $args) = @_;};\\n\\t};\\n\\n\\n# use test classes\\nsnippet tuse\\n\\tuse Test::More;\\n\\tuse Test::Deep; # (); # uncomment to stop prototype errors\\n\\tuse Test::Exception;\\n\\n# local test lib\\nsnippet tlib\\n\\tuse lib qw{ ./t/lib };\\n\\n#test methods\\nsnippet tmeths\\n\\t$ENV{TEST_METHOD} = '${1:regex}';\\n\\n# runtestclass\\nsnippet trunner\\n\\tuse ${1:test_class};\\n\\t$1->runtests();\\n\\n# Test::Class-style test\\nsnippet tsub\\n\\tsub t${1:number}_${2:test_case} :Test(${3:num_of_tests}) {\\n\\t\\tmy $self = shift;\\n\\t\\t${4:#  body}\\n\\n\\t}\\n\\n# Test::Routine-style test\\nsnippet trsub\\n\\ttest ${1:test_name} => { description => '${2:Description of test.}'} => sub {\\n\\t\\tmy ($self) = @_;\\n\\t\\t${3:# test code}\\n\\t};\\n\\n#prep test method\\nsnippet tprep\\n\\tsub prep${1:number}_${2:test_case} :Test(startup) {\\n\\t\\tmy $self = shift;\\n\\t\\t${4:#  body}\\n\\t}\\n\\n# cause failures to print stack trace\\nsnippet debug_trace\\n\\tuse Carp; # 'verbose';\\n\\t# cloak \\\"die\\\"\\n\\t# warn \\\"warning\\\"\\n\\t$SIG{'__DIE__'} = sub {\\n\\t\\trequire Carp; Carp::confess\\n\\t};\\n\\n\";\n\n});\n\nace.define(\"ace/snippets/perl\",[\"require\",\"exports\",\"module\",\"ace/snippets/perl.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./perl.snippets\");\nexports.scope = \"perl\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/perl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/pgsql.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/pgsql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/php.js",
    "content": "ace.define(\"ace/snippets/php.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet ec\\n\\techo ${1};\\nsnippet ns\\n\\tnamespace ${1:Foo\\\\Bar\\\\Baz};\\n\\t${2}\\nsnippet use\\n\\tuse ${1:Foo\\\\Bar\\\\Baz};\\n\\t${2}\\nsnippet c\\n\\t${1:abstract }class ${2:$FILENAME}\\n\\t{\\n\\t\\t${3}\\n\\t}\\nsnippet i\\n\\tinterface ${1:$FILENAME}\\n\\t{\\n\\t\\t${2}\\n\\t}\\nsnippet t.\\n\\t$this->${1}\\nsnippet f\\n\\tfunction ${1:foo}(${2:array }${3:$bar})\\n\\t{\\n\\t\\t${4}\\n\\t}\\n# method\\nsnippet m\\n\\t${1:abstract }${2:protected}${3: static} function ${4:foo}(${5:array }${6:$bar})\\n\\t{\\n\\t\\t${7}\\n\\t}\\n# setter method\\nsnippet sm\\n\\t/**\\n\\t * Sets the value of ${1:foo}\\n\\t *\\n\\t * @param ${2:$1} $$1 ${3:description}\\n\\t *\\n\\t * @return ${4:$FILENAME}\\n\\t */\\n\\t${5:public} function set${6:$2}(${7:$2 }$$1)\\n\\t{\\n\\t\\t$this->${8:$1} = $$1;\\n\\t\\treturn $this;\\n\\t}${9}\\n# getter method\\nsnippet gm\\n\\t/**\\n\\t * Gets the value of ${1:foo}\\n\\t *\\n\\t * @return ${2:$1}\\n\\t */\\n\\t${3:public} function get${4:$2}()\\n\\t{\\n\\t\\treturn $this->${5:$1};\\n\\t}${6}\\n#setter\\nsnippet $s\\n\\t${1:$foo}->set${2:Bar}(${3});\\n#getter\\nsnippet $g\\n\\t${1:$foo}->get${2:Bar}();\\n\\n# Tertiary conditional\\nsnippet =?:\\n\\t$${1:foo} = ${2:true} ? ${3:a} : ${4};\\nsnippet ?:\\n\\t${1:true} ? ${2:a} : ${3}\\n\\nsnippet C\\n\\t$_COOKIE['${1:variable}']${2}\\nsnippet E\\n\\t$_ENV['${1:variable}']${2}\\nsnippet F\\n\\t$_FILES['${1:variable}']${2}\\nsnippet G\\n\\t$_GET['${1:variable}']${2}\\nsnippet P\\n\\t$_POST['${1:variable}']${2}\\nsnippet R\\n\\t$_REQUEST['${1:variable}']${2}\\nsnippet S\\n\\t$_SERVER['${1:variable}']${2}\\nsnippet SS\\n\\t$_SESSION['${1:variable}']${2}\\n\\n# the following are old ones\\nsnippet inc\\n\\tinclude '${1:file}';${2}\\nsnippet inc1\\n\\tinclude_once '${1:file}';${2}\\nsnippet req\\n\\trequire '${1:file}';${2}\\nsnippet req1\\n\\trequire_once '${1:file}';${2}\\n# Start Docblock\\nsnippet /*\\n\\t/**\\n\\t * ${1}\\n\\t */\\n# Class - post doc\\nsnippet doc_cp\\n\\t/**\\n\\t * ${1:undocumented class}\\n\\t *\\n\\t * @package ${2:default}\\n\\t * @subpackage ${3:default}\\n\\t * @author ${4:`g:snips_author`}\\n\\t */${5}\\n# Class Variable - post doc\\nsnippet doc_vp\\n\\t/**\\n\\t * ${1:undocumented class variable}\\n\\t *\\n\\t * @var ${2:string}\\n\\t */${3}\\n# Class Variable\\nsnippet doc_v\\n\\t/**\\n\\t * ${3:undocumented class variable}\\n\\t *\\n\\t * @var ${4:string}\\n\\t */\\n\\t${1:var} $${2};${5}\\n# Class\\nsnippet doc_c\\n\\t/**\\n\\t * ${3:undocumented class}\\n\\t *\\n\\t * @package ${4:default}\\n\\t * @subpackage ${5:default}\\n\\t * @author ${6:`g:snips_author`}\\n\\t */\\n\\t${1:}class ${2:}\\n\\t{\\n\\t\\t${7}\\n\\t} // END $1class $2\\n# Constant Definition - post doc\\nsnippet doc_dp\\n\\t/**\\n\\t * ${1:undocumented constant}\\n\\t */${2}\\n# Constant Definition\\nsnippet doc_d\\n\\t/**\\n\\t * ${3:undocumented constant}\\n\\t */\\n\\tdefine(${1}, ${2});${4}\\n# Function - post doc\\nsnippet doc_fp\\n\\t/**\\n\\t * ${1:undocumented function}\\n\\t *\\n\\t * @return ${2:void}\\n\\t * @author ${3:`g:snips_author`}\\n\\t */${4}\\n# Function signature\\nsnippet doc_s\\n\\t/**\\n\\t * ${4:undocumented function}\\n\\t *\\n\\t * @return ${5:void}\\n\\t * @author ${6:`g:snips_author`}\\n\\t */\\n\\t${1}function ${2}(${3});${7}\\n# Function\\nsnippet doc_f\\n\\t/**\\n\\t * ${4:undocumented function}\\n\\t *\\n\\t * @return ${5:void}\\n\\t * @author ${6:`g:snips_author`}\\n\\t */\\n\\t${1}function ${2}(${3})\\n\\t{${7}\\n\\t}\\n# Header\\nsnippet doc_h\\n\\t/**\\n\\t * ${1}\\n\\t *\\n\\t * @author ${2:`g:snips_author`}\\n\\t * @version ${3:$Id$}\\n\\t * @copyright ${4:$2}, `strftime('%d %B, %Y')`\\n\\t * @package ${5:default}\\n\\t */\\n\\n# Interface\\nsnippet interface\\n\\t/**\\n\\t * ${2:undocumented class}\\n\\t *\\n\\t * @package ${3:default}\\n\\t * @author ${4:`g:snips_author`}\\n\\t */\\n\\tinterface ${1:$FILENAME}\\n\\t{\\n\\t\\t${5}\\n\\t}\\n# class ...\\nsnippet class\\n\\t/**\\n\\t * ${1}\\n\\t */\\n\\tclass ${2:$FILENAME}\\n\\t{\\n\\t\\t${3}\\n\\t\\t/**\\n\\t\\t * ${4}\\n\\t\\t */\\n\\t\\t${5:public} function ${6:__construct}(${7:argument})\\n\\t\\t{\\n\\t\\t\\t${8:// code...}\\n\\t\\t}\\n\\t}\\n# define(...)\\nsnippet def\\n\\tdefine('${1}'${2});${3}\\n# defined(...)\\nsnippet def?\\n\\t${1}defined('${2}')${3}\\nsnippet wh\\n\\twhile (${1:/* condition */}) {\\n\\t\\t${2:// code...}\\n\\t}\\n# do ... while\\nsnippet do\\n\\tdo {\\n\\t\\t${2:// code... }\\n\\t} while (${1:/* condition */});\\nsnippet if\\n\\tif (${1:/* condition */}) {\\n\\t\\t${2:// code...}\\n\\t}\\nsnippet ife\\n\\tif (${1:/* condition */}) {\\n\\t\\t${2:// code...}\\n\\t} else {\\n\\t\\t${3:// code...}\\n\\t}\\n\\t${4}\\nsnippet else\\n\\telse {\\n\\t\\t${1:// code...}\\n\\t}\\nsnippet elseif\\n\\telseif (${1:/* condition */}) {\\n\\t\\t${2:// code...}\\n\\t}\\nsnippet switch\\n\\tswitch ($${1:variable}) {\\n\\t\\tcase '${2:value}':\\n\\t\\t\\t${3:// code...}\\n\\t\\t\\tbreak;\\n\\t\\t${5}\\n\\t\\tdefault:\\n\\t\\t\\t${4:// code...}\\n\\t\\t\\tbreak;\\n\\t}\\nsnippet case\\n\\tcase '${1:value}':\\n\\t\\t${2:// code...}\\n\\t\\tbreak;${3}\\nsnippet for\\n\\tfor ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\\t\\t${4: // code...}\\n\\t}\\nsnippet foreach\\n\\tforeach ($${1:variable} as $${2:value}) {\\n\\t\\t${3:// code...}\\n\\t}\\nsnippet foreachk\\n\\tforeach ($${1:variable} as $${2:key} => $${3:value}) {\\n\\t\\t${4:// code...}\\n\\t}\\n# $... = array (...)\\nsnippet array\\n\\t$${1:arrayName} = array('${2}' => ${3});${4}\\nsnippet try\\n\\ttry {\\n\\t\\t${2}\\n\\t} catch (${1:Exception} $e) {\\n\\t}\\n# lambda with closure\\nsnippet lambda\\n\\t${1:static }function (${2:args}) use (${3:&$x, $y /*put vars in scope (closure) */}) {\\n\\t\\t${4}\\n\\t};\\n# pre_dump();\\nsnippet pd\\n\\techo '<pre>'; var_dump(${1}); echo '</pre>';\\n# pre_dump(); die();\\nsnippet pdd\\n\\techo '<pre>'; var_dump(${1}); echo '</pre>'; die(${2:});\\nsnippet vd\\n\\tvar_dump(${1});\\nsnippet vdd\\n\\tvar_dump(${1}); die(${2:});\\nsnippet http_redirect\\n\\theader (\\\"HTTP/1.1 301 Moved Permanently\\\");\\n\\theader (\\\"Location: \\\".URL);\\n\\texit();\\n# Getters & Setters\\nsnippet gs\\n\\t/**\\n\\t * Gets the value of ${1:foo}\\n\\t *\\n\\t * @return ${2:$1}\\n\\t */\\n\\tpublic function get${3:$2}()\\n\\t{\\n\\t\\treturn $this->${4:$1};\\n\\t}\\n\\n\\t/**\\n\\t * Sets the value of $1\\n\\t *\\n\\t * @param $2 $$1 ${5:description}\\n\\t *\\n\\t * @return ${6:$FILENAME}\\n\\t */\\n\\tpublic function set$3(${7:$2 }$$1)\\n\\t{\\n\\t\\t$this->$4 = $$1;\\n\\t\\treturn $this;\\n\\t}${8}\\n# anotation, get, and set, useful for doctrine\\nsnippet ags\\n\\t/**\\n\\t * ${1:description}\\n\\t *\\n\\t * @${7}\\n\\t */\\n\\t${2:protected} $${3:foo};\\n\\n\\tpublic function get${4:$3}()\\n\\t{\\n\\t\\treturn $this->$3;\\n\\t}\\n\\n\\tpublic function set$4(${5:$4 }$${6:$3})\\n\\t{\\n\\t\\t$this->$3 = $$6;\\n\\t\\treturn $this;\\n\\t}\\nsnippet rett\\n\\treturn true;\\nsnippet retf\\n\\treturn false;\\nscope html\\nsnippet <?\\n\\t<?php\\n\\n\\t${1}\\nsnippet <?e\\n\\t<?php echo ${1} ?>\\n# this one is for php5.4\\nsnippet <?=\\n\\t<?=${1}?>\\nsnippet ifil\\n\\t<?php if (${1:/* condition */}): ?>\\n\\t\\t${2:<!-- code... -->}\\n\\t<?php endif; ?>\\nsnippet ifeil\\n\\t<?php if (${1:/* condition */}): ?>\\n\\t\\t${2:<!-- html... -->}\\n\\t<?php else: ?>\\n\\t\\t${3:<!-- html... -->}\\n\\t<?php endif; ?>\\n\\t${4}\\nsnippet foreachil\\n\\t<?php foreach ($${1:variable} as $${2:value}): ?>\\n\\t\\t${3:<!-- html... -->}\\n\\t<?php endforeach; ?>\\nsnippet foreachkil\\n\\t<?php foreach ($${1:variable} as $${2:key} => $${3:value}): ?>\\n\\t\\t${4:<!-- html... -->}\\n\\t<?php endforeach; ?>\\nscope html-tag\\nsnippet ifil\\\\n\\\\\\n\\t<?php if (${1:true}): ?>${2:code}<?php endif; ?>\\nsnippet ifeil\\\\n\\\\\\n\\t<?php if (${1:true}): ?>${2:code}<?php else: ?>${3:code}<?php endif; ?>${4}\\n\";\n\n});\n\nace.define(\"ace/snippets/php\",[\"require\",\"exports\",\"module\",\"ace/snippets/php.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./php.snippets\");\nexports.scope = \"php\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/php\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/php_laravel_blade.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/php_laravel_blade\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/pig.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/pig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/plain_text.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/plain_text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/powershell.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/powershell\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/praat.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/praat\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/prisma.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/prisma\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/prolog.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/prolog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/properties.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/properties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/protobuf.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/protobuf\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/puppet.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/puppet\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/python.js",
    "content": "ace.define(\"ace/snippets/python.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet #!\\n\\t#!/usr/bin/env python\\nsnippet imp\\n\\timport ${1:module}\\nsnippet from\\n\\tfrom ${1:package} import ${2:module}\\n# Module Docstring\\nsnippet docs\\n\\t'''\\n\\tFile: ${1:FILENAME:file_name}\\n\\tAuthor: ${2:author}\\n\\tDescription: ${3}\\n\\t'''\\nsnippet wh\\n\\twhile ${1:condition}:\\n\\t\\t${2:# TODO: write code...}\\n# dowh - does the same as do...while in other languages\\nsnippet dowh\\n\\twhile True:\\n\\t\\t${1:# TODO: write code...}\\n\\t\\tif ${2:condition}:\\n\\t\\t\\tbreak\\nsnippet with\\n\\twith ${1:expr} as ${2:var}:\\n\\t\\t${3:# TODO: write code...}\\n# New Class\\nsnippet cl\\n\\tclass ${1:ClassName}(${2:object}):\\n\\t\\t\\\"\\\"\\\"${3:docstring for $1}\\\"\\\"\\\"\\n\\t\\tdef __init__(self, ${4:arg}):\\n\\t\\t\\t${5:super($1, self).__init__()}\\n\\t\\t\\tself.$4 = $4\\n\\t\\t\\t${6}\\n# New Function\\nsnippet def\\n\\tdef ${1:fname}(${2:`indent('.') ? 'self' : ''`}):\\n\\t\\t\\\"\\\"\\\"${3:docstring for $1}\\\"\\\"\\\"\\n\\t\\t${4:# TODO: write code...}\\nsnippet deff\\n\\tdef ${1:fname}(${2:`indent('.') ? 'self' : ''`}):\\n\\t\\t${3:# TODO: write code...}\\n# New Method\\nsnippet defs\\n\\tdef ${1:mname}(self, ${2:arg}):\\n\\t\\t${3:# TODO: write code...}\\n# New Property\\nsnippet property\\n\\tdef ${1:foo}():\\n\\t\\tdoc = \\\"${2:The $1 property.}\\\"\\n\\t\\tdef fget(self):\\n\\t\\t\\t${3:return self._$1}\\n\\t\\tdef fset(self, value):\\n\\t\\t\\t${4:self._$1 = value}\\n# Ifs\\nsnippet if\\n\\tif ${1:condition}:\\n\\t\\t${2:# TODO: write code...}\\nsnippet el\\n\\telse:\\n\\t\\t${1:# TODO: write code...}\\nsnippet ei\\n\\telif ${1:condition}:\\n\\t\\t${2:# TODO: write code...}\\n# For\\nsnippet for\\n\\tfor ${1:item} in ${2:items}:\\n\\t\\t${3:# TODO: write code...}\\n# Encodes\\nsnippet cutf8\\n\\t# -*- coding: utf-8 -*-\\nsnippet clatin1\\n\\t# -*- coding: latin-1 -*-\\nsnippet cascii\\n\\t# -*- coding: ascii -*-\\n# Lambda\\nsnippet ld\\n\\t${1:var} = lambda ${2:vars} : ${3:action}\\nsnippet .\\n\\tself.\\nsnippet try Try/Except\\n\\ttry:\\n\\t\\t${1:# TODO: write code...}\\n\\texcept ${2:Exception}, ${3:e}:\\n\\t\\t${4:raise $3}\\nsnippet try Try/Except/Else\\n\\ttry:\\n\\t\\t${1:# TODO: write code...}\\n\\texcept ${2:Exception}, ${3:e}:\\n\\t\\t${4:raise $3}\\n\\telse:\\n\\t\\t${5:# TODO: write code...}\\nsnippet try Try/Except/Finally\\n\\ttry:\\n\\t\\t${1:# TODO: write code...}\\n\\texcept ${2:Exception}, ${3:e}:\\n\\t\\t${4:raise $3}\\n\\tfinally:\\n\\t\\t${5:# TODO: write code...}\\nsnippet try Try/Except/Else/Finally\\n\\ttry:\\n\\t\\t${1:# TODO: write code...}\\n\\texcept ${2:Exception}, ${3:e}:\\n\\t\\t${4:raise $3}\\n\\telse:\\n\\t\\t${5:# TODO: write code...}\\n\\tfinally:\\n\\t\\t${6:# TODO: write code...}\\n# if __name__ == '__main__':\\nsnippet ifmain\\n\\tif __name__ == '__main__':\\n\\t\\t${1:main()}\\n# __magic__\\nsnippet _\\n\\t__${1:init}__${2}\\n# python debugger (pdb)\\nsnippet pdb\\n\\timport pdb; pdb.set_trace()\\n# ipython debugger (ipdb)\\nsnippet ipdb\\n\\timport ipdb; ipdb.set_trace()\\n# ipython debugger (pdbbb)\\nsnippet pdbbb\\n\\timport pdbpp; pdbpp.set_trace()\\nsnippet pprint\\n\\timport pprint; pprint.pprint(${1})${2}\\nsnippet \\\"\\n\\t\\\"\\\"\\\"\\n\\t${1:doc}\\n\\t\\\"\\\"\\\"\\n# test function/method\\nsnippet test\\n\\tdef test_${1:description}(${2:self}):\\n\\t\\t${3:# TODO: write code...}\\n# test case\\nsnippet testcase\\n\\tclass ${1:ExampleCase}(unittest.TestCase):\\n\\t\\t\\n\\t\\tdef test_${2:description}(self):\\n\\t\\t\\t${3:# TODO: write code...}\\nsnippet fut\\n\\tfrom __future__ import ${1}\\n#getopt\\nsnippet getopt\\n\\ttry:\\n\\t\\t# Short option syntax: \\\"hv:\\\"\\n\\t\\t# Long option syntax: \\\"help\\\" or \\\"verbose=\\\"\\n\\t\\topts, args = getopt.getopt(sys.argv[1:], \\\"${1:short_options}\\\", [${2:long_options}])\\n\\t\\n\\texcept getopt.GetoptError, err:\\n\\t\\t# Print debug info\\n\\t\\tprint str(err)\\n\\t\\t${3:error_action}\\n\\n\\tfor option, argument in opts:\\n\\t\\tif option in (\\\"-h\\\", \\\"--help\\\"):\\n\\t\\t\\t${4}\\n\\t\\telif option in (\\\"-v\\\", \\\"--verbose\\\"):\\n\\t\\t\\tverbose = argument\\n\";\n\n});\n\nace.define(\"ace/snippets/python\",[\"require\",\"exports\",\"module\",\"ace/snippets/python.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./python.snippets\");\nexports.scope = \"python\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/python\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/qml.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/qml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/r.js",
    "content": "ace.define(\"ace/snippets/r.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet #!\\n\\t#!/usr/bin/env Rscript\\n\\n# includes\\nsnippet lib\\n\\tlibrary(${1:package})\\nsnippet req\\n\\trequire(${1:package})\\nsnippet source\\n\\tsource('${1:file}')\\n\\n# conditionals\\nsnippet if\\n\\tif (${1:condition}) {\\n\\t\\t${2:code}\\n\\t}\\nsnippet el\\n\\telse {\\n\\t\\t${1:code}\\n\\t}\\nsnippet ei\\n\\telse if (${1:condition}) {\\n\\t\\t${2:code}\\n\\t}\\n\\n# functions\\nsnippet fun\\n\\t${1:name} = function (${2:variables}) {\\n\\t\\t${3:code}\\n\\t}\\nsnippet ret\\n\\treturn(${1:code})\\n\\n# dataframes, lists, etc\\nsnippet df\\n\\t${1:name}[${2:rows}, ${3:cols}]\\nsnippet c\\n\\tc(${1:items})\\nsnippet li\\n\\tlist(${1:items})\\nsnippet mat\\n\\tmatrix(${1:data}, nrow=${2:rows}, ncol=${3:cols})\\n\\n# apply functions\\nsnippet apply\\n\\tapply(${1:array}, ${2:margin}, ${3:function})\\nsnippet lapply\\n\\tlapply(${1:list}, ${2:function})\\nsnippet sapply\\n\\tsapply(${1:list}, ${2:function})\\nsnippet vapply\\n\\tvapply(${1:list}, ${2:function}, ${3:type})\\nsnippet mapply\\n\\tmapply(${1:function}, ${2:...})\\nsnippet tapply\\n\\ttapply(${1:vector}, ${2:index}, ${3:function})\\nsnippet rapply\\n\\trapply(${1:list}, ${2:function})\\n\\n# plyr functions\\nsnippet dd\\n\\tddply(${1:frame}, ${2:variables}, ${3:function})\\nsnippet dl\\n\\tdlply(${1:frame}, ${2:variables}, ${3:function})\\nsnippet da\\n\\tdaply(${1:frame}, ${2:variables}, ${3:function})\\nsnippet d_\\n\\td_ply(${1:frame}, ${2:variables}, ${3:function})\\n\\nsnippet ad\\n\\tadply(${1:array}, ${2:margin}, ${3:function})\\nsnippet al\\n\\talply(${1:array}, ${2:margin}, ${3:function})\\nsnippet aa\\n\\taaply(${1:array}, ${2:margin}, ${3:function})\\nsnippet a_\\n\\ta_ply(${1:array}, ${2:margin}, ${3:function})\\n\\nsnippet ld\\n\\tldply(${1:list}, ${2:function})\\nsnippet ll\\n\\tllply(${1:list}, ${2:function})\\nsnippet la\\n\\tlaply(${1:list}, ${2:function})\\nsnippet l_\\n\\tl_ply(${1:list}, ${2:function})\\n\\nsnippet md\\n\\tmdply(${1:matrix}, ${2:function})\\nsnippet ml\\n\\tmlply(${1:matrix}, ${2:function})\\nsnippet ma\\n\\tmaply(${1:matrix}, ${2:function})\\nsnippet m_\\n\\tm_ply(${1:matrix}, ${2:function})\\n\\n# plot functions\\nsnippet pl\\n\\tplot(${1:x}, ${2:y})\\nsnippet ggp\\n\\tggplot(${1:data}, aes(${2:aesthetics}))\\nsnippet img\\n\\t${1:(jpeg,bmp,png,tiff)}(filename=\\\"${2:filename}\\\", width=${3}, height=${4}, unit=\\\"${5}\\\")\\n\\t${6:plot}\\n\\tdev.off()\\n\\n# statistical test functions\\nsnippet fis\\n\\tfisher.test(${1:x}, ${2:y})\\nsnippet chi\\n\\tchisq.test(${1:x}, ${2:y})\\nsnippet tt\\n\\tt.test(${1:x}, ${2:y})\\nsnippet wil\\n\\twilcox.test(${1:x}, ${2:y})\\nsnippet cor\\n\\tcor.test(${1:x}, ${2:y})\\nsnippet fte\\n\\tvar.test(${1:x}, ${2:y})\\nsnippet kvt \\n\\tkv.test(${1:x}, ${2:y})\\n\";\n\n});\n\nace.define(\"ace/snippets/r\",[\"require\",\"exports\",\"module\",\"ace/snippets/r.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./r.snippets\");\nexports.scope = \"r\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/r\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/raku.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/raku\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/razor.js",
    "content": "ace.define(\"ace/snippets/razor.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet if\\n(${1} == ${2}) {\\n\\t${3}\\n}\";\n\n});\n\nace.define(\"ace/snippets/razor\",[\"require\",\"exports\",\"module\",\"ace/snippets/razor.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./razor.snippets\");\nexports.scope = \"razor\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/razor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/rdoc.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/rdoc\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/red.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/red\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/redshift.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/redshift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/rhtml.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/rhtml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/robot.js",
    "content": "ace.define(\"ace/snippets/robot.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# scope: robot\\n### Sections\\nsnippet settingssection\\ndescription *** Settings *** section\\n\\t*** Settings ***\\n\\tLibrary    ${1}\\n\\nsnippet keywordssection\\ndescription *** Keywords *** section\\n\\t*** Keywords ***\\n\\t${1:Keyword Name}\\n\\t    [Arguments]    \\\\${${2:Example Arg 1}}\\n\\t\\nsnippet testcasessection\\ndescription *** Test Cases *** section\\n\\t*** Test Cases ***\\n\\t${1:First Test Case}\\n\\t    ${2:Log    Example Arg}\\n\\nsnippet variablessection\\ndescription *** Variables *** section\\n\\t*** Variables ***\\n\\t\\\\${${1:Variable Name}}=    ${2:Variable Value}\\n\\n### Helpful keywords\\nsnippet testcase\\ndescription A test case\\n\\t${1:Test Case Name}\\n\\t    ${2:Log    Example log message}\\n\\t\\nsnippet keyword\\ndescription A keyword\\n\\t${1:Example Keyword}\\n\\t    [Arguments]    \\\\${${2:Example Arg 1}}\\n\\n### Built Ins\\nsnippet forinr\\ndescription For In Range Loop\\n\\tFOR    \\\\${${1:Index}}    IN RANGE     \\\\${${2:10}}\\n\\t    Log     \\\\${${1:Index}}\\n\\tEND\\n\\nsnippet forin\\ndescription For In Loop\\n\\tFOR    \\\\${${1:Item}}    IN     @{${2:List Variable}}\\n\\t    Log     \\\\${${1:Item}}\\n\\tEND\\n\\nsnippet if\\ndescription If Statement\\n\\tIF    ${1:condition}\\n\\t    ${2:Do something}\\n\\tEND\\n\\nsnippet else\\ndescription If Statement\\n\\tIF    ${1:Condition}\\n\\t    ${2:Do something}\\n\\tELSE\\n\\t    ${3:Otherwise do this}\\n\\tEND\\n\\nsnippet elif\\ndescription Else-If Statement\\n\\tIF    ${1:Condition 1}\\n\\t    ${2:Do something}\\n\\tELSE IF    ${3:Condition 2}\\n\\t    ${4:Do something else}\\n\\tEND\\n\";\n\n});\n\nace.define(\"ace/snippets/robot\",[\"require\",\"exports\",\"module\",\"ace/snippets/robot.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./robot.snippets\");\nexports.scope = \"robot\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/robot\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/rst.js",
    "content": "ace.define(\"ace/snippets/rst.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# rst\\n\\nsnippet :\\n\\t:${1:field name}: ${2:field body}\\nsnippet *\\n\\t*${1:Emphasis}*\\nsnippet **\\n\\t**${1:Strong emphasis}**\\nsnippet _\\n\\t\\\\`${1:hyperlink-name}\\\\`_\\n\\t.. _\\\\`$1\\\\`: ${2:link-block}\\nsnippet =\\n\\t${1:Title}\\n\\t=====${2:=}\\n\\t${3}\\nsnippet -\\n\\t${1:Title}\\n\\t-----${2:-}\\n\\t${3}\\nsnippet cont:\\n\\t.. contents::\\n\\t\\n\";\n\n});\n\nace.define(\"ace/snippets/rst\",[\"require\",\"exports\",\"module\",\"ace/snippets/rst.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./rst.snippets\");\nexports.scope = \"rst\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/rst\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/ruby.js",
    "content": "ace.define(\"ace/snippets/ruby.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"########################################\\n# Ruby snippets - for Rails, see below #\\n########################################\\n\\n# encoding for Ruby 1.9\\nsnippet enc\\n\\t# encoding: utf-8\\n\\n# #!/usr/bin/env ruby\\nsnippet #!\\n\\t#!/usr/bin/env ruby\\n\\t# encoding: utf-8\\n\\n# New Block\\nsnippet =b\\n\\t=begin rdoc\\n\\t\\t${1}\\n\\t=end\\nsnippet y\\n\\t:yields: ${1:arguments}\\nsnippet rb\\n\\t#!/usr/bin/env ruby -wKU\\nsnippet beg\\n\\tbegin\\n\\t\\t${3}\\n\\trescue ${1:Exception} => ${2:e}\\n\\tend\\n\\nsnippet req require\\n\\trequire \\\"${1}\\\"${2}\\nsnippet #\\n\\t# =>\\nsnippet end\\n\\t__END__\\nsnippet case\\n\\tcase ${1:object}\\n\\twhen ${2:condition}\\n\\t\\t${3}\\n\\tend\\nsnippet when\\n\\twhen ${1:condition}\\n\\t\\t${2}\\nsnippet def\\n\\tdef ${1:method_name}\\n\\t\\t${2}\\n\\tend\\nsnippet deft\\n\\tdef test_${1:case_name}\\n\\t\\t${2}\\n\\tend\\nsnippet if\\n\\tif ${1:condition}\\n\\t\\t${2}\\n\\tend\\nsnippet ife\\n\\tif ${1:condition}\\n\\t\\t${2}\\n\\telse\\n\\t\\t${3}\\n\\tend\\nsnippet elsif\\n\\telsif ${1:condition}\\n\\t\\t${2}\\nsnippet unless\\n\\tunless ${1:condition}\\n\\t\\t${2}\\n\\tend\\nsnippet while\\n\\twhile ${1:condition}\\n\\t\\t${2}\\n\\tend\\nsnippet for\\n\\tfor ${1:e} in ${2:c}\\n\\t\\t${3}\\n\\tend\\nsnippet until\\n\\tuntil ${1:condition}\\n\\t\\t${2}\\n\\tend\\nsnippet cla class .. end\\n\\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\t\\t${2}\\n\\tend\\nsnippet cla class .. initialize .. end\\n\\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\t\\tdef initialize(${2:args})\\n\\t\\t\\t${3}\\n\\t\\tend\\n\\tend\\nsnippet cla class .. < ParentClass .. initialize .. end\\n\\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} < ${2:ParentClass}\\n\\t\\tdef initialize(${3:args})\\n\\t\\t\\t${4}\\n\\t\\tend\\n\\tend\\nsnippet cla ClassName = Struct .. do .. end\\n\\t${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} = Struct.new(:${2:attr_names}) do\\n\\t\\tdef ${3:method_name}\\n\\t\\t\\t${4}\\n\\t\\tend\\n\\tend\\nsnippet cla class BlankSlate .. initialize .. end\\n\\tclass ${1:BlankSlate}\\n\\t\\tinstance_methods.each { |meth| undef_method(meth) unless meth =~ /\\\\A__/ }\\n\\tend\\nsnippet cla class << self .. end\\n\\tclass << ${1:self}\\n\\t\\t${2}\\n\\tend\\n# class .. < DelegateClass .. initialize .. end\\nsnippet cla-\\n\\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} < DelegateClass(${2:ParentClass})\\n\\t\\tdef initialize(${3:args})\\n\\t\\t\\tsuper(${4:del_obj})\\n\\n\\t\\t\\t${5}\\n\\t\\tend\\n\\tend\\nsnippet mod module .. end\\n\\tmodule ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\t\\t${2}\\n\\tend\\nsnippet mod module .. module_function .. end\\n\\tmodule ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\t\\tmodule_function\\n\\n\\t\\t${2}\\n\\tend\\nsnippet mod module .. ClassMethods .. end\\n\\tmodule ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\\t\\tmodule ClassMethods\\n\\t\\t\\t${2}\\n\\t\\tend\\n\\n\\t\\tmodule InstanceMethods\\n\\n\\t\\tend\\n\\n\\t\\tdef self.included(receiver)\\n\\t\\t\\treceiver.extend         ClassMethods\\n\\t\\t\\treceiver.send :include, InstanceMethods\\n\\t\\tend\\n\\tend\\n# attr_reader\\nsnippet r\\n\\tattr_reader :${1:attr_names}\\n# attr_writer\\nsnippet w\\n\\tattr_writer :${1:attr_names}\\n# attr_accessor\\nsnippet rw\\n\\tattr_accessor :${1:attr_names}\\nsnippet atp\\n\\tattr_protected :${1:attr_names}\\nsnippet ata\\n\\tattr_accessible :${1:attr_names}\\n# include Enumerable\\nsnippet Enum\\n\\tinclude Enumerable\\n\\n\\tdef each(&block)\\n\\t\\t${1}\\n\\tend\\n# include Comparable\\nsnippet Comp\\n\\tinclude Comparable\\n\\n\\tdef <=>(other)\\n\\t\\t${1}\\n\\tend\\n# extend Forwardable\\nsnippet Forw-\\n\\textend Forwardable\\n# def self\\nsnippet defs\\n\\tdef self.${1:class_method_name}\\n\\t\\t${2}\\n\\tend\\n# def method_missing\\nsnippet defmm\\n\\tdef method_missing(meth, *args, &blk)\\n\\t\\t${1}\\n\\tend\\nsnippet defd\\n\\tdef_delegator :${1:@del_obj}, :${2:del_meth}, :${3:new_name}\\nsnippet defds\\n\\tdef_delegators :${1:@del_obj}, :${2:del_methods}\\nsnippet am\\n\\talias_method :${1:new_name}, :${2:old_name}\\nsnippet app\\n\\tif __FILE__ == $PROGRAM_NAME\\n\\t\\t${1}\\n\\tend\\n# usage_if()\\nsnippet usai\\n\\tif ARGV.${1}\\n\\t\\tabort \\\"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\\\"${3}\\n\\tend\\n# usage_unless()\\nsnippet usau\\n\\tunless ARGV.${1}\\n\\t\\tabort \\\"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\\\"${3}\\n\\tend\\nsnippet array\\n\\tArray.new(${1:10}) { |${2:i}| ${3} }\\nsnippet hash\\n\\tHash.new { |${1:hash}, ${2:key}| $1[$2] = ${3} }\\nsnippet file File.foreach() { |line| .. }\\n\\tFile.foreach(${1:\\\"path/to/file\\\"}) { |${2:line}| ${3} }\\nsnippet file File.read()\\n\\tFile.read(${1:\\\"path/to/file\\\"})${2}\\nsnippet Dir Dir.global() { |file| .. }\\n\\tDir.glob(${1:\\\"dir/glob/*\\\"}) { |${2:file}| ${3} }\\nsnippet Dir Dir[\\\"..\\\"]\\n\\tDir[${1:\\\"glob/**/*.rb\\\"}]${2}\\nsnippet dir\\n\\tFilename.dirname(__FILE__)\\nsnippet deli\\n\\tdelete_if { |${1:e}| ${2} }\\nsnippet fil\\n\\tfill(${1:range}) { |${2:i}| ${3} }\\n# flatten_once()\\nsnippet flao\\n\\tinject(Array.new) { |${1:arr}, ${2:a}| $1.push(*$2)}${3}\\nsnippet zip\\n\\tzip(${1:enums}) { |${2:row}| ${3} }\\n# downto(0) { |n| .. }\\nsnippet dow\\n\\tdownto(${1:0}) { |${2:n}| ${3} }\\nsnippet ste\\n\\tstep(${1:2}) { |${2:n}| ${3} }\\nsnippet tim\\n\\ttimes { |${1:n}| ${2} }\\nsnippet upt\\n\\tupto(${1:1.0/0.0}) { |${2:n}| ${3} }\\nsnippet loo\\n\\tloop { ${1} }\\nsnippet ea\\n\\teach { |${1:e}| ${2} }\\nsnippet ead\\n\\teach do |${1:e}|\\n\\t\\t${2}\\n\\tend\\nsnippet eab\\n\\teach_byte { |${1:byte}| ${2} }\\nsnippet eac- each_char { |chr| .. }\\n\\teach_char { |${1:chr}| ${2} }\\nsnippet eac- each_cons(..) { |group| .. }\\n\\teach_cons(${1:2}) { |${2:group}| ${3} }\\nsnippet eai\\n\\teach_index { |${1:i}| ${2} }\\nsnippet eaid\\n\\teach_index do |${1:i}|\\n\\t\\t${2}\\n\\tend\\nsnippet eak\\n\\teach_key { |${1:key}| ${2} }\\nsnippet eakd\\n\\teach_key do |${1:key}|\\n\\t\\t${2}\\n\\tend\\nsnippet eal\\n\\teach_line { |${1:line}| ${2} }\\nsnippet eald\\n\\teach_line do |${1:line}|\\n\\t\\t${2}\\n\\tend\\nsnippet eap\\n\\teach_pair { |${1:name}, ${2:val}| ${3} }\\nsnippet eapd\\n\\teach_pair do |${1:name}, ${2:val}|\\n\\t\\t${3}\\n\\tend\\nsnippet eas-\\n\\teach_slice(${1:2}) { |${2:group}| ${3} }\\nsnippet easd-\\n\\teach_slice(${1:2}) do |${2:group}|\\n\\t\\t${3}\\n\\tend\\nsnippet eav\\n\\teach_value { |${1:val}| ${2} }\\nsnippet eavd\\n\\teach_value do |${1:val}|\\n\\t\\t${2}\\n\\tend\\nsnippet eawi\\n\\teach_with_index { |${1:e}, ${2:i}| ${3} }\\nsnippet eawid\\n\\teach_with_index do |${1:e},${2:i}|\\n\\t\\t${3}\\n\\tend\\nsnippet reve\\n\\treverse_each { |${1:e}| ${2} }\\nsnippet reved\\n\\treverse_each do |${1:e}|\\n\\t\\t${2}\\n\\tend\\nsnippet inj\\n\\tinject(${1:init}) { |${2:mem}, ${3:var}| ${4} }\\nsnippet injd\\n\\tinject(${1:init}) do |${2:mem}, ${3:var}|\\n\\t\\t${4}\\n\\tend\\nsnippet map\\n\\tmap { |${1:e}| ${2} }\\nsnippet mapd\\n\\tmap do |${1:e}|\\n\\t\\t${2}\\n\\tend\\nsnippet mapwi-\\n\\tenum_with_index.map { |${1:e}, ${2:i}| ${3} }\\nsnippet sor\\n\\tsort { |a, b| ${1} }\\nsnippet sorb\\n\\tsort_by { |${1:e}| ${2} }\\nsnippet ran\\n\\tsort_by { rand }\\nsnippet all\\n\\tall? { |${1:e}| ${2} }\\nsnippet any\\n\\tany? { |${1:e}| ${2} }\\nsnippet cl\\n\\tclassify { |${1:e}| ${2} }\\nsnippet col\\n\\tcollect { |${1:e}| ${2} }\\nsnippet cold\\n\\tcollect do |${1:e}|\\n\\t\\t${2}\\n\\tend\\nsnippet det\\n\\tdetect { |${1:e}| ${2} }\\nsnippet detd\\n\\tdetect do |${1:e}|\\n\\t\\t${2}\\n\\tend\\nsnippet fet\\n\\tfetch(${1:name}) { |${2:key}| ${3} }\\nsnippet fin\\n\\tfind { |${1:e}| ${2} }\\nsnippet find\\n\\tfind do |${1:e}|\\n\\t\\t${2}\\n\\tend\\nsnippet fina\\n\\tfind_all { |${1:e}| ${2} }\\nsnippet finad\\n\\tfind_all do |${1:e}|\\n\\t\\t${2}\\n\\tend\\nsnippet gre\\n\\tgrep(${1:/pattern/}) { |${2:match}| ${3} }\\nsnippet sub\\n\\t${1:g}sub(${2:/pattern/}) { |${3:match}| ${4} }\\nsnippet sca\\n\\tscan(${1:/pattern/}) { |${2:match}| ${3} }\\nsnippet scad\\n\\tscan(${1:/pattern/}) do |${2:match}|\\n\\t\\t${3}\\n\\tend\\nsnippet max\\n\\tmax { |a, b| ${1} }\\nsnippet min\\n\\tmin { |a, b| ${1} }\\nsnippet par\\n\\tpartition { |${1:e}| ${2} }\\nsnippet pard\\n\\tpartition do |${1:e}|\\n\\t\\t${2}\\n\\tend\\nsnippet rej\\n\\treject { |${1:e}| ${2} }\\nsnippet rejd\\n\\treject do |${1:e}|\\n\\t\\t${2}\\n\\tend\\nsnippet sel\\n\\tselect { |${1:e}| ${2} }\\nsnippet seld\\n\\tselect do |${1:e}|\\n\\t\\t${2}\\n\\tend\\nsnippet lam\\n\\tlambda { |${1:args}| ${2} }\\nsnippet doo\\n\\tdo\\n\\t\\t${1}\\n\\tend\\nsnippet dov\\n\\tdo |${1:variable}|\\n\\t\\t${2}\\n\\tend\\nsnippet :\\n\\t:${1:key} => ${2:\\\"value\\\"}${3}\\nsnippet ope\\n\\topen(${1:\\\"path/or/url/or/pipe\\\"}, \\\"${2:w}\\\") { |${3:io}| ${4} }\\n# path_from_here()\\nsnippet fpath\\n\\tFile.join(File.dirname(__FILE__), *%2[${1:rel path here}])${2}\\n# unix_filter {}\\nsnippet unif\\n\\tARGF.each_line${1} do |${2:line}|\\n\\t\\t${3}\\n\\tend\\n# option_parse {}\\nsnippet optp\\n\\trequire \\\"optparse\\\"\\n\\n\\toptions = {${1:default => \\\"args\\\"}}\\n\\n\\tARGV.options do |opts|\\n\\t\\topts.banner = \\\"Usage: #{File.basename($PROGRAM_NAME)}\\nsnippet opt\\n\\topts.on( \\\"-${1:o}\\\", \\\"--${2:long-option-name}\\\", ${3:String},\\n\\t         \\\"${4:Option description.}\\\") do |${5:opt}|\\n\\t\\t${6}\\n\\tend\\nsnippet tc\\n\\trequire \\\"test/unit\\\"\\n\\n\\trequire \\\"${1:library_file_name}\\\"\\n\\n\\tclass Test${2:$1} < Test::Unit::TestCase\\n\\t\\tdef test_${3:case_name}\\n\\t\\t\\t${4}\\n\\t\\tend\\n\\tend\\nsnippet ts\\n\\trequire \\\"test/unit\\\"\\n\\n\\trequire \\\"tc_${1:test_case_file}\\\"\\n\\trequire \\\"tc_${2:test_case_file}\\\"${3}\\nsnippet as\\n\\tassert ${1:test}, \\\"${2:Failure message.}\\\"${3}\\nsnippet ase\\n\\tassert_equal ${1:expected}, ${2:actual}${3}\\nsnippet asne\\n\\tassert_not_equal ${1:unexpected}, ${2:actual}${3}\\nsnippet asid\\n\\tassert_in_delta ${1:expected_float}, ${2:actual_float}, ${3:2 ** -20}${4}\\nsnippet asio\\n\\tassert_instance_of ${1:ExpectedClass}, ${2:actual_instance}${3}\\nsnippet asko\\n\\tassert_kind_of ${1:ExpectedKind}, ${2:actual_instance}${3}\\nsnippet asn\\n\\tassert_nil ${1:instance}${2}\\nsnippet asnn\\n\\tassert_not_nil ${1:instance}${2}\\nsnippet asm\\n\\tassert_match /${1:expected_pattern}/, ${2:actual_string}${3}\\nsnippet asnm\\n\\tassert_no_match /${1:unexpected_pattern}/, ${2:actual_string}${3}\\nsnippet aso\\n\\tassert_operator ${1:left}, :${2:operator}, ${3:right}${4}\\nsnippet asr\\n\\tassert_raise ${1:Exception} { ${2} }\\nsnippet asrd\\n\\tassert_raise ${1:Exception} do\\n\\t\\t${2}\\n\\tend\\nsnippet asnr\\n\\tassert_nothing_raised ${1:Exception} { ${2} }\\nsnippet asnrd\\n\\tassert_nothing_raised ${1:Exception} do\\n\\t\\t${2}\\n\\tend\\nsnippet asrt\\n\\tassert_respond_to ${1:object}, :${2:method}${3}\\nsnippet ass assert_same(..)\\n\\tassert_same ${1:expected}, ${2:actual}${3}\\nsnippet ass assert_send(..)\\n\\tassert_send [${1:object}, :${2:message}, ${3:args}]${4}\\nsnippet asns\\n\\tassert_not_same ${1:unexpected}, ${2:actual}${3}\\nsnippet ast\\n\\tassert_throws :${1:expected} { ${2} }\\nsnippet astd\\n\\tassert_throws :${1:expected} do\\n\\t\\t${2}\\n\\tend\\nsnippet asnt\\n\\tassert_nothing_thrown { ${1} }\\nsnippet asntd\\n\\tassert_nothing_thrown do\\n\\t\\t${1}\\n\\tend\\nsnippet fl\\n\\tflunk \\\"${1:Failure message.}\\\"${2}\\n# Benchmark.bmbm do .. end\\nsnippet bm-\\n\\tTESTS = ${1:10_000}\\n\\tBenchmark.bmbm do |results|\\n\\t\\t${2}\\n\\tend\\nsnippet rep\\n\\tresults.report(\\\"${1:name}:\\\") { TESTS.times { ${2} }}\\n# Marshal.dump(.., file)\\nsnippet Md\\n\\tFile.open(${1:\\\"path/to/file.dump\\\"}, \\\"wb\\\") { |${2:file}| Marshal.dump(${3:obj}, $2) }${4}\\n# Mashal.load(obj)\\nsnippet Ml\\n\\tFile.open(${1:\\\"path/to/file.dump\\\"}, \\\"rb\\\") { |${2:file}| Marshal.load($2) }${3}\\n# deep_copy(..)\\nsnippet deec\\n\\tMarshal.load(Marshal.dump(${1:obj_to_copy}))${2}\\nsnippet Pn-\\n\\tPStore.new(${1:\\\"file_name.pstore\\\"})${2}\\nsnippet tra\\n\\ttransaction(${1:true}) { ${2} }\\n# xmlread(..)\\nsnippet xml-\\n\\tREXML::Document.new(File.read(${1:\\\"path/to/file\\\"}))${2}\\n# xpath(..) { .. }\\nsnippet xpa\\n\\telements.each(${1:\\\"//Xpath\\\"}) do |${2:node}|\\n\\t\\t${3}\\n\\tend\\n# class_from_name()\\nsnippet clafn\\n\\tsplit(\\\"::\\\").inject(Object) { |par, const| par.const_get(const) }\\n# singleton_class()\\nsnippet sinc\\n\\tclass << self; self end\\nsnippet nam\\n\\tnamespace :${1:`Filename()`} do\\n\\t\\t${2}\\n\\tend\\nsnippet tas\\n\\tdesc \\\"${1:Task description}\\\"\\n\\ttask :${2:task_name => [:dependent, :tasks]} do\\n\\t\\t${3}\\n\\tend\\n# block\\nsnippet b\\n\\t{ |${1:var}| ${2} }\\nsnippet begin\\n\\tbegin\\n\\t\\traise 'A test exception.'\\n\\trescue Exception => e\\n\\t\\tputs e.message\\n\\t\\tputs e.backtrace.inspect\\n\\telse\\n\\t\\t# other exception\\n\\tensure\\n\\t\\t# always executed\\n\\tend\\n\\n#debugging\\nsnippet debug\\n\\trequire 'ruby-debug'; debugger; true;\\nsnippet pry\\n\\trequire 'pry'; binding.pry\\n\\n#############################################\\n# Rails snippets - for pure Ruby, see above #\\n#############################################\\nsnippet art\\n\\tassert_redirected_to ${1::action => \\\"${2:index}\\\"}\\nsnippet artnp\\n\\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1}, ${4:@$2})\\nsnippet artnpp\\n\\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1})\\nsnippet artp\\n\\tassert_redirected_to ${1:model}_path(${2:@$1})\\nsnippet artpp\\n\\tassert_redirected_to ${1:model}s_path\\nsnippet asd\\n\\tassert_difference \\\"${1:Model}.${2:count}\\\", $1 do\\n\\t\\t${3}\\n\\tend\\nsnippet asnd\\n\\tassert_no_difference \\\"${1:Model}.${2:count}\\\" do\\n\\t\\t${3}\\n\\tend\\nsnippet asre\\n\\tassert_response :${1:success}, @response.body${2}\\nsnippet asrj\\n\\tassert_rjs :${1:replace}, \\\"${2:dom id}\\\"\\nsnippet ass assert_select(..)\\n\\tassert_select '${1:path}', :${2:text} => '${3:inner_html' ${4:do}\\nsnippet bf\\n\\tbefore_filter :${1:method}\\nsnippet bt\\n\\tbelongs_to :${1:association}\\nsnippet crw\\n\\tcattr_accessor :${1:attr_names}\\nsnippet defcreate\\n\\tdef create\\n\\t\\t@${1:model_class_name} = ${2:ModelClassName}.new(params[:$1])\\n\\n\\t\\trespond_to do |wants|\\n\\t\\t\\tif @$1.save\\n\\t\\t\\t\\tflash[:notice] = '$2 was successfully created.'\\n\\t\\t\\t\\twants.html { redirect_to(@$1) }\\n\\t\\t\\t\\twants.xml  { render :xml => @$1, :status => :created, :location => @$1 }\\n\\t\\t\\telse\\n\\t\\t\\t\\twants.html { render :action => \\\"new\\\" }\\n\\t\\t\\t\\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\\n\\t\\t\\tend\\n\\t\\tend\\n\\tend${3}\\nsnippet defdestroy\\n\\tdef destroy\\n\\t\\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\t\\t@$1.destroy\\n\\n\\t\\trespond_to do |wants|\\n\\t\\t\\twants.html { redirect_to($1s_url) }\\n\\t\\t\\twants.xml  { head :ok }\\n\\t\\tend\\n\\tend${3}\\nsnippet defedit\\n\\tdef edit\\n\\t\\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\tend\\nsnippet defindex\\n\\tdef index\\n\\t\\t@${1:model_class_name} = ${2:ModelClassName}.all\\n\\n\\t\\trespond_to do |wants|\\n\\t\\t\\twants.html # index.html.erb\\n\\t\\t\\twants.xml  { render :xml => @$1s }\\n\\t\\tend\\n\\tend${3}\\nsnippet defnew\\n\\tdef new\\n\\t\\t@${1:model_class_name} = ${2:ModelClassName}.new\\n\\n\\t\\trespond_to do |wants|\\n\\t\\t\\twants.html # new.html.erb\\n\\t\\t\\twants.xml  { render :xml => @$1 }\\n\\t\\tend\\n\\tend${3}\\nsnippet defshow\\n\\tdef show\\n\\t\\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\n\\t\\trespond_to do |wants|\\n\\t\\t\\twants.html # show.html.erb\\n\\t\\t\\twants.xml  { render :xml => @$1 }\\n\\t\\tend\\n\\tend${3}\\nsnippet defupdate\\n\\tdef update\\n\\t\\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\n\\t\\trespond_to do |wants|\\n\\t\\t\\tif @$1.update_attributes(params[:$1])\\n\\t\\t\\t\\tflash[:notice] = '$2 was successfully updated.'\\n\\t\\t\\t\\twants.html { redirect_to(@$1) }\\n\\t\\t\\t\\twants.xml  { head :ok }\\n\\t\\t\\telse\\n\\t\\t\\t\\twants.html { render :action => \\\"edit\\\" }\\n\\t\\t\\t\\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\\n\\t\\t\\tend\\n\\t\\tend\\n\\tend${3}\\nsnippet flash\\n\\tflash[:${1:notice}] = \\\"${2}\\\"\\nsnippet habtm\\n\\thas_and_belongs_to_many :${1:object}, :join_table => \\\"${2:table_name}\\\", :foreign_key => \\\"${3}_id\\\"${4}\\nsnippet hm\\n\\thas_many :${1:object}\\nsnippet hmd\\n\\thas_many :${1:other}s, :class_name => \\\"${2:$1}\\\", :foreign_key => \\\"${3:$1}_id\\\", :dependent => :destroy${4}\\nsnippet hmt\\n\\thas_many :${1:object}, :through => :${2:object}\\nsnippet ho\\n\\thas_one :${1:object}\\nsnippet i18\\n\\tI18n.t('${1:type.key}')${2}\\nsnippet ist\\n\\t<%= image_submit_tag(\\\"${1:agree.png}\\\", :id => \\\"${2:id}\\\"${3} %>\\nsnippet log\\n\\tRails.logger.${1:debug} ${2}\\nsnippet log2\\n\\tRAILS_DEFAULT_LOGGER.${1:debug} ${2}\\nsnippet logd\\n\\tlogger.debug { \\\"${1:message}\\\" }${2}\\nsnippet loge\\n\\tlogger.error { \\\"${1:message}\\\" }${2}\\nsnippet logf\\n\\tlogger.fatal { \\\"${1:message}\\\" }${2}\\nsnippet logi\\n\\tlogger.info { \\\"${1:message}\\\" }${2}\\nsnippet logw\\n\\tlogger.warn { \\\"${1:message}\\\" }${2}\\nsnippet mapc\\n\\t${1:map}.${2:connect} '${3:controller/:action/:id}'\\nsnippet mapca\\n\\t${1:map}.catch_all \\\"*${2:anything}\\\", :controller => \\\"${3:default}\\\", :action => \\\"${4:error}\\\"${5}\\nsnippet mapr\\n\\t${1:map}.resource :${2:resource}\\nsnippet maprs\\n\\t${1:map}.resources :${2:resource}\\nsnippet mapwo\\n\\t${1:map}.with_options :${2:controller} => '${3:thing}' do |$3|\\n\\t\\t${4}\\n\\tend\\nsnippet mbs\\n\\tbefore_save :${1:method}\\nsnippet mcht\\n\\tchange_table :${1:table_name} do |t|\\n\\t\\t${2}\\n\\tend\\nsnippet mp\\n\\tmap(&:${1:id})\\nsnippet mrw\\n\\tmattr_accessor :${1:attr_names}\\nsnippet oa\\n\\torder(\\\"${1:field}\\\")\\nsnippet od\\n\\torder(\\\"${1:field} DESC\\\")\\nsnippet pa\\n\\tparams[:${1:id}]${2}\\nsnippet ra\\n\\trender :action => \\\"${1:action}\\\"\\nsnippet ral\\n\\trender :action => \\\"${1:action}\\\", :layout => \\\"${2:layoutname}\\\"\\nsnippet rest\\n\\trespond_to do |wants|\\n\\t\\twants.${1:html} { ${2} }\\n\\tend\\nsnippet rf\\n\\trender :file => \\\"${1:filepath}\\\"\\nsnippet rfu\\n\\trender :file => \\\"${1:filepath}\\\", :use_full_path => ${2:false}\\nsnippet ri\\n\\trender :inline => \\\"${1:<%= 'hello' %>}\\\"\\nsnippet ril\\n\\trender :inline => \\\"${1:<%= 'hello' %>}\\\", :locals => { ${2::name} => \\\"${3:value}\\\"${4} }\\nsnippet rit\\n\\trender :inline => \\\"${1:<%= 'hello' %>}\\\", :type => ${2::rxml}\\nsnippet rjson\\n\\trender :json => ${1:text to render}\\nsnippet rl\\n\\trender :layout => \\\"${1:layoutname}\\\"\\nsnippet rn\\n\\trender :nothing => ${1:true}\\nsnippet rns\\n\\trender :nothing => ${1:true}, :status => ${2:401}\\nsnippet rp\\n\\trender :partial => \\\"${1:item}\\\"\\nsnippet rpc\\n\\trender :partial => \\\"${1:item}\\\", :collection => ${2:@$1s}\\nsnippet rpl\\n\\trender :partial => \\\"${1:item}\\\", :locals => { :${2:$1} => ${3:@$1}\\nsnippet rpo\\n\\trender :partial => \\\"${1:item}\\\", :object => ${2:@$1}\\nsnippet rps\\n\\trender :partial => \\\"${1:item}\\\", :status => ${2:500}\\nsnippet rt\\n\\trender :text => \\\"${1:text to render}\\\"\\nsnippet rtl\\n\\trender :text => \\\"${1:text to render}\\\", :layout => \\\"${2:layoutname}\\\"\\nsnippet rtlt\\n\\trender :text => \\\"${1:text to render}\\\", :layout => ${2:true}\\nsnippet rts\\n\\trender :text => \\\"${1:text to render}\\\", :status => ${2:401}\\nsnippet ru\\n\\trender :update do |${1:page}|\\n\\t\\t$1.${2}\\n\\tend\\nsnippet rxml\\n\\trender :xml => ${1:text to render}\\nsnippet sc\\n\\tscope :${1:name}, :where(:@${2:field} => ${3:value})\\nsnippet sl\\n\\tscope :${1:name}, lambda do |${2:value}|\\n\\t\\twhere(\\\"${3:field = ?}\\\", ${4:bind var})\\n\\tend\\nsnippet sha1\\n\\tDigest::SHA1.hexdigest(${1:string})\\nsnippet sweeper\\n\\tclass ${1:ModelClassName}Sweeper < ActionController::Caching::Sweeper\\n\\t\\tobserve $1\\n\\n\\t\\tdef after_save(${2:model_class_name})\\n\\t\\t\\texpire_cache($2)\\n\\t\\tend\\n\\n\\t\\tdef after_destroy($2)\\n\\t\\t\\texpire_cache($2)\\n\\t\\tend\\n\\n\\t\\tdef expire_cache($2)\\n\\t\\t\\texpire_page\\n\\t\\tend\\n\\tend\\nsnippet tcb\\n\\tt.boolean :${1:title}\\n\\t${2}\\nsnippet tcbi\\n\\tt.binary :${1:title}, :limit => ${2:2}.megabytes\\n\\t${3}\\nsnippet tcd\\n\\tt.decimal :${1:title}, :precision => ${2:10}, :scale => ${3:2}\\n\\t${4}\\nsnippet tcda\\n\\tt.date :${1:title}\\n\\t${2}\\nsnippet tcdt\\n\\tt.datetime :${1:title}\\n\\t${2}\\nsnippet tcf\\n\\tt.float :${1:title}\\n\\t${2}\\nsnippet tch\\n\\tt.change :${1:name}, :${2:string}, :${3:limit} => ${4:80}\\n\\t${5}\\nsnippet tci\\n\\tt.integer :${1:title}\\n\\t${2}\\nsnippet tcl\\n\\tt.integer :lock_version, :null => false, :default => 0\\n\\t${1}\\nsnippet tcr\\n\\tt.references :${1:taggable}, :polymorphic => { :default => '${2:Photo}' }\\n\\t${3}\\nsnippet tcs\\n\\tt.string :${1:title}\\n\\t${2}\\nsnippet tct\\n\\tt.text :${1:title}\\n\\t${2}\\nsnippet tcti\\n\\tt.time :${1:title}\\n\\t${2}\\nsnippet tcts\\n\\tt.timestamp :${1:title}\\n\\t${2}\\nsnippet tctss\\n\\tt.timestamps\\n\\t${1}\\nsnippet va\\n\\tvalidates_associated :${1:attribute}\\nsnippet vao\\n\\tvalidates_acceptance_of :${1:terms}\\nsnippet vc\\n\\tvalidates_confirmation_of :${1:attribute}\\nsnippet ve\\n\\tvalidates_exclusion_of :${1:attribute}, :in => ${2:%w( mov avi )}\\nsnippet vf\\n\\tvalidates_format_of :${1:attribute}, :with => /${2:regex}/\\nsnippet vi\\n\\tvalidates_inclusion_of :${1:attribute}, :in => %w(${2: mov avi })\\nsnippet vl\\n\\tvalidates_length_of :${1:attribute}, :within => ${2:3}..${3:20}\\nsnippet vn\\n\\tvalidates_numericality_of :${1:attribute}\\nsnippet vpo\\n\\tvalidates_presence_of :${1:attribute}\\nsnippet vu\\n\\tvalidates_uniqueness_of :${1:attribute}\\nsnippet wants\\n\\twants.${1:js|xml|html} { ${2} }\\nsnippet wc\\n\\twhere(${1:\\\"conditions\\\"}${2:, bind_var})\\nsnippet wh\\n\\twhere(${1:field} => ${2:value})\\nsnippet xdelete\\n\\txhr :delete, :${1:destroy}, :id => ${2:1}${3}\\nsnippet xget\\n\\txhr :get, :${1:show}, :id => ${2:1}${3}\\nsnippet xpost\\n\\txhr :post, :${1:create}, :${2:object} => { ${3} }\\nsnippet xput\\n\\txhr :put, :${1:update}, :id => ${2:1}, :${3:object} => { ${4} }${5}\\nsnippet test\\n\\ttest \\\"should ${1:do something}\\\" do\\n\\t\\t${2}\\n\\tend\\n#migrations\\nsnippet mac\\n\\tadd_column :${1:table_name}, :${2:column_name}, :${3:data_type}\\nsnippet mrc\\n\\tremove_column :${1:table_name}, :${2:column_name}\\nsnippet mrnc\\n\\trename_column :${1:table_name}, :${2:old_column_name}, :${3:new_column_name}\\nsnippet mcc\\n\\tchange_column :${1:table}, :${2:column}, :${3:type}\\nsnippet mccc\\n\\tt.column :${1:title}, :${2:string}\\nsnippet mct\\n\\tcreate_table :${1:table_name} do |t|\\n\\t\\tt.column :${2:name}, :${3:type}\\n\\tend\\nsnippet migration\\n\\tclass ${1:class_name} < ActiveRecord::Migration\\n\\t\\tdef self.up\\n\\t\\t\\t${2}\\n\\t\\tend\\n\\n\\t\\tdef self.down\\n\\t\\tend\\n\\tend\\n\\nsnippet trc\\n\\tt.remove :${1:column}\\nsnippet tre\\n\\tt.rename :${1:old_column_name}, :${2:new_column_name}\\n\\t${3}\\nsnippet tref\\n\\tt.references :${1:model}\\n\\n#rspec\\nsnippet it\\n\\tit \\\"${1:spec_name}\\\" do\\n\\t\\t${2}\\n\\tend\\nsnippet itp\\n\\tit \\\"${1:spec_name}\\\"\\n\\t${2}\\nsnippet desc\\n\\tdescribe ${1:class_name} do\\n\\t\\t${2}\\n\\tend\\nsnippet cont\\n\\tcontext \\\"${1:message}\\\" do\\n\\t\\t${2}\\n\\tend\\nsnippet bef\\n\\tbefore :${1:each} do\\n\\t\\t${2}\\n\\tend\\nsnippet aft\\n\\tafter :${1:each} do\\n\\t\\t${2}\\n\\tend\\n\";\n\n});\n\nace.define(\"ace/snippets/ruby\",[\"require\",\"exports\",\"module\",\"ace/snippets/ruby.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./ruby.snippets\");\nexports.scope = \"ruby\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/ruby\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/rust.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/rust\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/sac.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/sac\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/sass.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/sass\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/scad.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/scad\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/scala.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/scala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/scheme.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/scheme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/scrypt.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/scrypt\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/scss.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/scss\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/sh.js",
    "content": "ace.define(\"ace/snippets/sh.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# Shebang. Executing bash via /usr/bin/env makes scripts more portable.\\nsnippet #!\\n\\t#!/usr/bin/env bash\\n\\t\\nsnippet if\\n\\tif [[ ${1:condition} ]]; then\\n\\t\\t${2:#statements}\\n\\tfi\\nsnippet elif\\n\\telif [[ ${1:condition} ]]; then\\n\\t\\t${2:#statements}\\nsnippet for\\n\\tfor (( ${2:i} = 0; $2 < ${1:count}; $2++ )); do\\n\\t\\t${3:#statements}\\n\\tdone\\nsnippet fori\\n\\tfor ${1:needle} in ${2:haystack} ; do\\n\\t\\t${3:#statements}\\n\\tdone\\nsnippet wh\\n\\twhile [[ ${1:condition} ]]; do\\n\\t\\t${2:#statements}\\n\\tdone\\nsnippet until\\n\\tuntil [[ ${1:condition} ]]; do\\n\\t\\t${2:#statements}\\n\\tdone\\nsnippet case\\n\\tcase ${1:word} in\\n\\t\\t${2:pattern})\\n\\t\\t\\t${3};;\\n\\tesac\\nsnippet go \\n\\twhile getopts '${1:o}' ${2:opts} \\n\\tdo \\n\\t\\tcase $$2 in\\n\\t\\t${3:o0})\\n\\t\\t\\t${4:#staments};;\\n\\t\\tesac\\n\\tdone\\n# Set SCRIPT_DIR variable to directory script is located.\\nsnippet sdir\\n\\tSCRIPT_DIR=\\\"$( cd \\\"$( dirname \\\"${BASH_SOURCE[0]}\\\" )\\\" && pwd )\\\"\\n# getopt\\nsnippet getopt\\n\\t__ScriptVersion=\\\"${1:version}\\\"\\n\\n\\t#===  FUNCTION  ================================================================\\n\\t#         NAME:  usage\\n\\t#  DESCRIPTION:  Display usage information.\\n\\t#===============================================================================\\n\\tfunction usage ()\\n\\t{\\n\\t\\t\\tcat <<- EOT\\n\\n\\t  Usage :  $${0:0} [options] [--] \\n\\n\\t  Options: \\n\\t  -h|help       Display this message\\n\\t  -v|version    Display script version\\n\\n\\tEOT\\n\\t}    # ----------  end of function usage  ----------\\n\\n\\t#-----------------------------------------------------------------------\\n\\t#  Handle command line arguments\\n\\t#-----------------------------------------------------------------------\\n\\n\\twhile getopts \\\":hv\\\" opt\\n\\tdo\\n\\t  case $opt in\\n\\n\\t\\th|help     )  usage; exit 0   ;;\\n\\n\\t\\tv|version  )  echo \\\"$${0:0} -- Version $__ScriptVersion\\\"; exit 0   ;;\\n\\n\\t\\t\\\\? )  echo -e \\\"\\\\n  Option does not exist : $OPTARG\\\\n\\\"\\n\\t\\t\\t  usage; exit 1   ;;\\n\\n\\t  esac    # --- end of case ---\\n\\tdone\\n\\tshift $(($OPTIND-1))\\n\\n\";\n\n});\n\nace.define(\"ace/snippets/sh\",[\"require\",\"exports\",\"module\",\"ace/snippets/sh.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./sh.snippets\");\nexports.scope = \"sh\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/sh\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/sjs.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/sjs\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/slim.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/slim\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/smarty.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/smarty\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/smithy.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/smithy\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/snippets.js",
    "content": "ace.define(\"ace/snippets/snippets.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# snippets for making snippets :)\\nsnippet snip\\n\\tsnippet ${1:trigger}\\n\\t\\t${2}\\nsnippet msnip\\n\\tsnippet ${1:trigger} ${2:description}\\n\\t\\t${3}\\nsnippet v\\n\\t{VISUAL}\\n\";\n\n});\n\nace.define(\"ace/snippets/snippets\",[\"require\",\"exports\",\"module\",\"ace/snippets/snippets.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./snippets.snippets\");\nexports.scope = \"snippets\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/snippets\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/soy_template.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/soy_template\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/space.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/space\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/sparql.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/sparql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/sql.js",
    "content": "ace.define(\"ace/snippets/sql.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"snippet tbl\\n\\tcreate table ${1:table} (\\n\\t\\t${2:columns}\\n\\t);\\nsnippet col\\n\\t${1:name}\\t${2:type}\\t${3:default ''}\\t${4:not null}\\nsnippet ccol\\n\\t${1:name}\\tvarchar2(${2:size})\\t${3:default ''}\\t${4:not null}\\nsnippet ncol\\n\\t${1:name}\\tnumber\\t${3:default 0}\\t${4:not null}\\nsnippet dcol\\n\\t${1:name}\\tdate\\t${3:default sysdate}\\t${4:not null}\\nsnippet ind\\n\\tcreate index ${3:$1_$2} on ${1:table}(${2:column});\\nsnippet uind\\n\\tcreate unique index ${1:name} on ${2:table}(${3:column});\\nsnippet tblcom\\n\\tcomment on table ${1:table} is '${2:comment}';\\nsnippet colcom\\n\\tcomment on column ${1:table}.${2:column} is '${3:comment}';\\nsnippet addcol\\n\\talter table ${1:table} add (${2:column} ${3:type});\\nsnippet seq\\n\\tcreate sequence ${1:name} start with ${2:1} increment by ${3:1} minvalue ${4:1};\\nsnippet s*\\n\\tselect * from ${1:table}\\n\";\n\n});\n\nace.define(\"ace/snippets/sql\",[\"require\",\"exports\",\"module\",\"ace/snippets/sql.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./sql.snippets\");\nexports.scope = \"sql\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/sql\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/sqlserver.js",
    "content": "ace.define(\"ace/snippets/sqlserver.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# ISNULL\\nsnippet isnull\\n\\tISNULL(${1:check_expression}, ${2:replacement_value})\\n# FORMAT\\nsnippet format\\n\\tFORMAT(${1:value}, ${2:format})\\n# CAST\\nsnippet cast\\n\\tCAST(${1:expression} AS ${2:data_type})\\n# CONVERT\\nsnippet convert\\n\\tCONVERT(${1:data_type}, ${2:expression})\\n# DATEPART\\nsnippet datepart\\n\\tDATEPART(${1:datepart}, ${2:date})\\n# DATEDIFF\\nsnippet datediff\\n\\tDATEDIFF(${1:datepart}, ${2:startdate}, ${3:enddate})\\n# DATEADD\\nsnippet dateadd\\n\\tDATEADD(${1:datepart}, ${2:number}, ${3:date})\\n# DATEFROMPARTS \\nsnippet datefromparts\\n\\tDATEFROMPARTS(${1:year}, ${2:month}, ${3:day})\\n# OBJECT_DEFINITION\\nsnippet objectdef\\n\\tSELECT OBJECT_DEFINITION(OBJECT_ID('${1:sys.server_permissions /*object name*/}'))\\n# STUFF XML\\nsnippet stuffxml\\n\\tSTUFF((SELECT ', ' + ${1:ColumnName}\\n\\t\\tFROM ${2:TableName}\\n\\t\\tWHERE ${3:WhereClause}\\n\\t\\tFOR XML PATH('')), 1, 1, '') AS ${4:Alias}\\n\\t${5:/*https://msdn.microsoft.com/en-us/library/ms188043.aspx*/}\\n# Create Procedure\\nsnippet createproc\\n\\t-- =============================================\\n\\t-- Author:\\t\\t${1:Author}\\n\\t-- Create date: ${2:Date}\\n\\t-- Description:\\t${3:Description}\\n\\t-- =============================================\\n\\tCREATE PROCEDURE ${4:Procedure_Name}\\n\\t\\t${5:/*Add the parameters for the stored procedure here*/}\\n\\tAS\\n\\tBEGIN\\n\\t\\t-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.\\n\\t\\tSET NOCOUNT ON;\\n\\t\\t\\n\\t\\t${6:/*Add the T-SQL statements to compute the return value here*/}\\n\\t\\t\\n\\tEND\\n\\tGO\\n# Create Scalar Function\\nsnippet createfn\\n\\t-- =============================================\\n\\t-- Author:\\t\\t${1:Author}\\n\\t-- Create date: ${2:Date}\\n\\t-- Description:\\t${3:Description}\\n\\t-- =============================================\\n\\tCREATE FUNCTION ${4:Scalar_Function_Name}\\n\\t\\t-- Add the parameters for the function here\\n\\tRETURNS ${5:Function_Data_Type}\\n\\tAS\\n\\tBEGIN\\n\\t\\tDECLARE @Result ${5:Function_Data_Type}\\n\\t\\t\\n\\t\\t${6:/*Add the T-SQL statements to compute the return value here*/}\\n\\t\\t\\n\\tEND\\n\\tGO\";\n\n});\n\nace.define(\"ace/snippets/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/snippets/sqlserver.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./sqlserver.snippets\");\nexports.scope = \"sqlserver\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/stylus.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/stylus\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/svg.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/svg\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/swift.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/swift\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/tcl.js",
    "content": "ace.define(\"ace/snippets/tcl.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# #!/usr/bin/env tclsh\\nsnippet #!\\n\\t#!/usr/bin/env tclsh\\n\\t\\n# Process\\nsnippet pro\\n\\tproc ${1:function_name} {${2:args}} {\\n\\t\\t${3:#body ...}\\n\\t}\\n#xif\\nsnippet xif\\n\\t${1:expr}? ${2:true} : ${3:false}\\n# Conditional\\nsnippet if\\n\\tif {${1}} {\\n\\t\\t${2:# body...}\\n\\t}\\n# Conditional if..else\\nsnippet ife\\n\\tif {${1}} {\\n\\t\\t${2:# body...}\\n\\t} else {\\n\\t\\t${3:# else...}\\n\\t}\\n# Conditional if..elsif..else\\nsnippet ifee\\n\\tif {${1}} {\\n\\t\\t${2:# body...}\\n\\t} elseif {${3}} {\\n\\t\\t${4:# elsif...}\\n\\t} else {\\n\\t\\t${5:# else...}\\n\\t}\\n# If catch then\\nsnippet ifc\\n\\tif { [catch {${1:#do something...}} ${2:err}] } {\\n\\t\\t${3:# handle failure...}\\n\\t}\\n# Catch\\nsnippet catch\\n\\tcatch {${1}} ${2:err} ${3:options}\\n# While Loop\\nsnippet wh\\n\\twhile {${1}} {\\n\\t\\t${2:# body...}\\n\\t}\\n# For Loop\\nsnippet for\\n\\tfor {set ${2:var} 0} {$$2 < ${1:count}} {${3:incr} $2} {\\n\\t\\t${4:# body...}\\n\\t}\\n# Foreach Loop\\nsnippet fore\\n\\tforeach ${1:x} {${2:#list}} {\\n\\t\\t${3:# body...}\\n\\t}\\n# after ms script...\\nsnippet af\\n\\tafter ${1:ms} ${2:#do something}\\n# after cancel id\\nsnippet afc\\n\\tafter cancel ${1:id or script}\\n# after idle\\nsnippet afi\\n\\tafter idle ${1:script}\\n# after info id\\nsnippet afin\\n\\tafter info ${1:id}\\n# Expr\\nsnippet exp\\n\\texpr {${1:#expression here}}\\n# Switch\\nsnippet sw\\n\\tswitch ${1:var} {\\n\\t\\t${3:pattern 1} {\\n\\t\\t\\t${4:#do something}\\n\\t\\t}\\n\\t\\tdefault {\\n\\t\\t\\t${2:#do something}\\n\\t\\t}\\n\\t}\\n# Case\\nsnippet ca\\n\\t${1:pattern} {\\n\\t\\t${2:#do something}\\n\\t}${3}\\n# Namespace eval\\nsnippet ns\\n\\tnamespace eval ${1:path} {${2:#script...}}\\n# Namespace current\\nsnippet nsc\\n\\tnamespace current\\n\";\n\n});\n\nace.define(\"ace/snippets/tcl\",[\"require\",\"exports\",\"module\",\"ace/snippets/tcl.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./tcl.snippets\");\nexports.scope = \"tcl\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/tcl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/terraform.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/terraform\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/tex.js",
    "content": "ace.define(\"ace/snippets/tex.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"#PREAMBLE\\n#newcommand\\nsnippet nc\\n\\t\\\\newcommand{\\\\${1:cmd}}[${2:opt}]{${3:realcmd}}${4}\\n#usepackage\\nsnippet up\\n\\t\\\\usepackage[${1:[options}]{${2:package}}\\n#newunicodechar\\nsnippet nuc\\n\\t\\\\newunicodechar{${1}}{${2:\\\\ensuremath}${3:tex-substitute}}}\\n#DeclareMathOperator\\nsnippet dmo\\n\\t\\\\DeclareMathOperator{${1}}{${2}}\\n\\n#DOCUMENT\\n# \\\\begin{}...\\\\end{}\\nsnippet begin\\n\\t\\\\begin{${1:env}}\\n\\t\\t${2}\\n\\t\\\\end{$1}\\n# Tabular\\nsnippet tab\\n\\t\\\\begin{${1:tabular}}{${2:c}}\\n\\t${3}\\n\\t\\\\end{$1}\\nsnippet thm\\n\\t\\\\begin[${1:author}]{${2:thm}}\\n\\t${3}\\n\\t\\\\end{$1}\\nsnippet center\\n\\t\\\\begin{center}\\n\\t\\t${1}\\n\\t\\\\end{center}\\n# Align(ed)\\nsnippet ali\\n\\t\\\\begin{align${1:ed}}\\n\\t\\t${2}\\n\\t\\\\end{align$1}\\n# Gather(ed)\\nsnippet gat\\n\\t\\\\begin{gather${1:ed}}\\n\\t\\t${2}\\n\\t\\\\end{gather$1}\\n# Equation\\nsnippet eq\\n\\t\\\\begin{equation}\\n\\t\\t${1}\\n\\t\\\\end{equation}\\n# Equation\\nsnippet eq*\\n\\t\\\\begin{equation*}\\n\\t\\t${1}\\n\\t\\\\end{equation*}\\n# Unnumbered Equation\\nsnippet \\\\\\n\\t\\\\[\\n\\t\\t${1}\\n\\t\\\\]\\n# Enumerate\\nsnippet enum\\n\\t\\\\begin{enumerate}\\n\\t\\t\\\\item ${1}\\n\\t\\\\end{enumerate}\\n# Itemize\\nsnippet itemize\\n\\t\\\\begin{itemize}\\n\\t\\t\\\\item ${1}\\n\\t\\\\end{itemize}\\n# Description\\nsnippet desc\\n\\t\\\\begin{description}\\n\\t\\t\\\\item[${1}] ${2}\\n\\t\\\\end{description}\\n# Matrix\\nsnippet mat\\n\\t\\\\begin{${1:p/b/v/V/B/small}matrix}\\n\\t\\t${2}\\n\\t\\\\end{$1matrix}\\n# Cases\\nsnippet cas\\n\\t\\\\begin{cases}\\n\\t\\t${1:equation}, &\\\\text{ if }${2:case}\\\\\\\\\\n\\t\\t${3}\\n\\t\\\\end{cases}\\n# Split\\nsnippet spl\\n\\t\\\\begin{split}\\n\\t\\t${1}\\n\\t\\\\end{split}\\n# Part\\nsnippet part\\n\\t\\\\part{${1:part name}} % (fold)\\n\\t\\\\label{prt:${2:$1}}\\n\\t${3}\\n\\t% part $2 (end)\\n# Chapter\\nsnippet cha\\n\\t\\\\chapter{${1:chapter name}}\\n\\t\\\\label{cha:${2:$1}}\\n\\t${3}\\n# Section\\nsnippet sec\\n\\t\\\\section{${1:section name}}\\n\\t\\\\label{sec:${2:$1}}\\n\\t${3}\\n# Sub Section\\nsnippet sub\\n\\t\\\\subsection{${1:subsection name}}\\n\\t\\\\label{sub:${2:$1}}\\n\\t${3}\\n# Sub Sub Section\\nsnippet subs\\n\\t\\\\subsubsection{${1:subsubsection name}}\\n\\t\\\\label{ssub:${2:$1}}\\n\\t${3}\\n# Paragraph\\nsnippet par\\n\\t\\\\paragraph{${1:paragraph name}}\\n\\t\\\\label{par:${2:$1}}\\n\\t${3}\\n# Sub Paragraph\\nsnippet subp\\n\\t\\\\subparagraph{${1:subparagraph name}}\\n\\t\\\\label{subp:${2:$1}}\\n\\t${3}\\n#References\\nsnippet itd\\n\\t\\\\item[${1:description}] ${2:item}\\nsnippet figure\\n\\t${1:Figure}~\\\\ref{${2:fig:}}${3}\\nsnippet table\\n\\t${1:Table}~\\\\ref{${2:tab:}}${3}\\nsnippet listing\\n\\t${1:Listing}~\\\\ref{${2:list}}${3}\\nsnippet section\\n\\t${1:Section}~\\\\ref{${2:sec:}}${3}\\nsnippet page\\n\\t${1:page}~\\\\pageref{${2}}${3}\\nsnippet index\\n\\t\\\\index{${1:index}}${2}\\n#Citations\\nsnippet cite\\n\\t\\\\cite[${1}]{${2}}${3}\\nsnippet fcite\\n\\t\\\\footcite[${1}]{${2}}${3}\\n#Formating text: italic, bold, underline, small capital, emphase ..\\nsnippet it\\n\\t\\\\textit{${1:text}}\\nsnippet bf\\n\\t\\\\textbf{${1:text}}\\nsnippet under\\n\\t\\\\underline{${1:text}}\\nsnippet emp\\n\\t\\\\emph{${1:text}}\\nsnippet sc\\n\\t\\\\textsc{${1:text}}\\n#Choosing font\\nsnippet sf\\n\\t\\\\textsf{${1:text}}\\nsnippet rm\\n\\t\\\\textrm{${1:text}}\\nsnippet tt\\n\\t\\\\texttt{${1:text}}\\n#misc\\nsnippet ft\\n\\t\\\\footnote{${1:text}}\\nsnippet fig\\n\\t\\\\begin{figure}\\n\\t\\\\begin{center}\\n\\t    \\\\includegraphics[scale=${1}]{Figures/${2}}\\n\\t\\\\end{center}\\n\\t\\\\caption{${3}}\\n\\t\\\\label{fig:${4}}\\n\\t\\\\end{figure}\\nsnippet tikz\\n\\t\\\\begin{figure}\\n\\t\\\\begin{center}\\n\\t\\\\begin{tikzpicture}[scale=${1:1}]\\n\\t\\t${2}\\n\\t\\\\end{tikzpicture}\\n\\t\\\\end{center}\\n\\t\\\\caption{${3}}\\n\\t\\\\label{fig:${4}}\\n\\t\\\\end{figure}\\n#math\\nsnippet stackrel\\n\\t\\\\stackrel{${1:above}}{${2:below}} ${3}\\nsnippet frac\\n\\t\\\\frac{${1:num}}{${2:denom}}\\nsnippet sum\\n\\t\\\\sum^{${1:n}}_{${2:i=1}}{${3}}\";\n\n});\n\nace.define(\"ace/snippets/tex\",[\"require\",\"exports\",\"module\",\"ace/snippets/tex.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./tex.snippets\");\nexports.scope = \"tex\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/tex\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/text.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/text\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/textile.js",
    "content": "ace.define(\"ace/snippets/textile.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# Jekyll post header\\nsnippet header\\n\\t---\\n\\ttitle: ${1:title}\\n\\tlayout: post\\n\\tdate: ${2:date} ${3:hour:minute:second} -05:00\\n\\t---\\n\\n# Image\\nsnippet img\\n\\t!${1:url}(${2:title}):${3:link}!\\n\\n# Table\\nsnippet |\\n\\t|${1}|${2}\\n\\n# Link\\nsnippet link\\n\\t\\\"${1:link text}\\\":${2:url}\\n\\n# Acronym\\nsnippet (\\n\\t(${1:Expand acronym})${2}\\n\\n# Footnote\\nsnippet fn\\n\\t[${1:ref number}] ${3}\\n\\n\\tfn$1. ${2:footnote}\\n\\t\\n\";\n\n});\n\nace.define(\"ace/snippets/textile\",[\"require\",\"exports\",\"module\",\"ace/snippets/textile.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./textile.snippets\");\nexports.scope = \"textile\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/textile\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/toml.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/toml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/tsx.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/tsx\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/turtle.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/turtle\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/twig.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/twig\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/typescript.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/typescript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/vala.js",
    "content": "ace.define(\"ace/snippets/vala\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.snippets = [\n    {\n        \"content\": \"case ${1:condition}:\\n\\t$0\\n\\tbreak;\\n\",\n        \"name\": \"case\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"case\"\n    },\n    {\n        \"content\": \"/**\\n * ${6}\\n */\\n${1:public} class ${2:MethodName}${3: : GLib.Object} {\\n\\n\\t/**\\n\\t * ${7}\\n\\t */\\n\\tpublic ${2}(${4}) {\\n\\t\\t${5}\\n\\t}\\n\\n\\t$0\\n}\",\n        \"name\": \"class\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"class\"\n    },\n    {\n        \"content\": \"(${1}) => {\\n\\t${0}\\n}\\n\",\n        \"name\": \"closure\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"=>\"\n    },\n    {\n        \"content\": \"/*\\n * $0\\n */\",\n        \"name\": \"Comment (multiline)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"/*\"\n    },\n    {\n        \"content\": \"Console.WriteLine($1);\\n$0\",\n        \"name\": \"Console.WriteLine (writeline)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"writeline\"\n    },\n    {\n        \"content\": \"[DBus(name = \\\"$0\\\")]\",\n        \"name\": \"DBus annotation\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"[DBus\"\n    },\n    {\n        \"content\": \"delegate ${1:void} ${2:DelegateName}($0);\",\n        \"name\": \"delegate\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"delegate\"\n    },\n    {\n        \"content\": \"do {\\n\\t$0\\n} while ($1);\\n\",\n        \"name\": \"do while\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"dowhile\"\n    },\n    {\n        \"content\": \"/**\\n * $0\\n */\",\n        \"name\": \"DocBlock\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"/**\"\n    },\n    {\n        \"content\": \"else if ($1) {\\n\\t$0\\n}\\n\",\n        \"name\": \"else if (elseif)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"elseif\"\n    },\n    {\n        \"content\": \"else {\\n\\t$0\\n}\",\n        \"name\": \"else\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"else\"\n    },\n    {\n        \"content\": \"enum {$1:EnumName} {\\n\\t$0\\n}\",\n        \"name\": \"enum\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"enum\"\n    },\n    {\n        \"content\": \"public errordomain ${1:Error} {\\n\\t$0\\n}\",\n        \"name\": \"error domain\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"errordomain\"\n    },\n    {\n        \"content\": \"for ($1;$2;$3) {\\n\\t$0\\n}\",\n        \"name\": \"for\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"for\"\n    },\n    {\n        \"content\": \"foreach ($1 in $2) {\\n\\t$0\\n}\",\n        \"name\": \"foreach\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"foreach\"\n    },\n    {\n        \"content\": \"Gee.ArrayList<${1:G}>($0);\",\n        \"name\": \"Gee.ArrayList\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"ArrayList\"\n    },\n    {\n        \"content\": \"Gee.HashMap<${1:K},${2:V}>($0);\",\n        \"name\": \"Gee.HashMap\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"HashMap\"\n    },\n    {\n        \"content\": \"Gee.HashSet<${1:G}>($0);\",\n        \"name\": \"Gee.HashSet\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"HashSet\"\n    },\n    {\n        \"content\": \"if ($1) {\\n\\t$0\\n}\",\n        \"name\": \"if\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"if\"\n    },\n    {\n        \"content\": \"interface ${1:InterfaceName}{$2: : SuperInterface} {\\n\\t$0\\n}\",\n        \"name\": \"interface\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"interface\"\n    },\n    {\n        \"content\": \"public static int main(string [] argv) {\\n\\t${0}\\n\\treturn 0;\\n}\",\n        \"name\": \"Main function\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"main\"\n    },\n    {\n        \"content\": \"namespace $1 {\\n\\t$0\\n}\\n\",\n        \"name\": \"namespace (ns)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"ns\"\n    },\n    {\n        \"content\": \"stdout.printf($0);\",\n        \"name\": \"printf\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"printf\"\n    },\n    {\n        \"content\": \"${1:public} ${2:Type} ${3:Name} {\\n\\tset {\\n\\t\\t$0\\n\\t}\\n\\tget {\\n\\n\\t}\\n}\",\n        \"name\": \"property (prop)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"prop\"\n    },\n    {\n        \"content\": \"${1:public} ${2:Type} ${3:Name} {\\n\\tget {\\n\\t\\t$0\\n\\t}\\n}\",\n        \"name\": \"read-only property (roprop)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"roprop\"\n    },\n    {\n        \"content\": \"@\\\"${1:\\\\$var}\\\"\",\n        \"name\": \"String template (@)\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"@\"\n    },\n    {\n        \"content\": \"struct ${1:StructName} {\\n\\t$0\\n}\",\n        \"name\": \"struct\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"struct\"\n    },\n    {\n        \"content\": \"switch ($1) {\\n\\t$0\\n}\",\n        \"name\": \"switch\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"switch\"\n    },\n    {\n        \"content\": \"try {\\n\\t$2\\n} catch (${1:Error} e) {\\n\\t$0\\n}\",\n        \"name\": \"try/catch\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"try\"\n    },\n    {\n        \"content\": \"\\\"\\\"\\\"$0\\\"\\\"\\\";\",\n        \"name\": \"Verbatim string (\\\"\\\"\\\")\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"verbatim\"\n    },\n    {\n        \"content\": \"while ($1) {\\n\\t$0\\n}\",\n        \"name\": \"while\",\n        \"scope\": \"vala\",\n        \"tabTrigger\": \"while\"\n    }\n];\nexports.scope = \"\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/vala\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/vbscript.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/vbscript\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/velocity.js",
    "content": "ace.define(\"ace/snippets/velocity.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"# macro\\nsnippet #macro\\n\\t#macro ( ${1:macroName} ${2:\\\\$var1, [\\\\$var2, ...]} )\\n\\t\\t${3:## macro code}\\n\\t#end\\n# foreach\\nsnippet #foreach\\n\\t#foreach ( ${1:\\\\$item} in ${2:\\\\$collection} )\\n\\t\\t${3:## foreach code}\\n\\t#end\\n# if\\nsnippet #if\\n\\t#if ( ${1:true} )\\n\\t\\t${0}\\n\\t#end\\n# if ... else\\nsnippet #ife\\n\\t#if ( ${1:true} )\\n\\t\\t${2}\\n\\t#else\\n\\t\\t${0}\\n\\t#end\\n#import\\nsnippet #import\\n\\t#import ( \\\"${1:path/to/velocity/format}\\\" )\\n# set\\nsnippet #set\\n\\t#set ( $${1:var} = ${0} )\\n\";\n\n});\n\nace.define(\"ace/snippets/velocity\",[\"require\",\"exports\",\"module\",\"ace/snippets/velocity.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./velocity.snippets\");\nexports.scope = \"velocity\";\nexports.includeScopes = [\"html\", \"javascript\", \"css\"];\n\n});                (function() {\n                    ace.require([\"ace/snippets/velocity\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/verilog.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/verilog\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/vhdl.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/vhdl\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/visualforce.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/visualforce\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/wollok.js",
    "content": "ace.define(\"ace/snippets/wollok.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"##\\n## Basic Java packages and import\\nsnippet im\\n\\timport\\nsnippet w.l\\n\\twollok.lang\\nsnippet w.i\\n\\twollok.lib\\n\\n## Class and object\\nsnippet cl\\n\\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\nsnippet obj\\n\\tobject ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2:inherits Parent}${3}\\nsnippet te\\n\\ttest ${1:`Filename(\\\"\\\", \\\"untitled\\\")`}\\n\\n##\\n## Enhancements\\nsnippet inh\\n\\tinherits\\n\\n##\\n## Comments\\nsnippet /*\\n\\t/*\\n\\t * ${1}\\n\\t */\\n\\n##\\n## Control Statements\\nsnippet el\\n\\telse\\nsnippet if\\n\\tif (${1}) ${2}\\n\\n##\\n## Create a Method\\nsnippet m\\n\\tmethod ${1:method}(${2}) ${5}\\n\\n##  \\n## Tests\\nsnippet as\\n\\tassert.equals(${1:expected}, ${2:actual})\\n\\n##\\n## Exceptions\\nsnippet ca\\n\\tcatch ${1:e} : (${2:Exception} ) ${3}\\nsnippet thr\\n\\tthrow\\nsnippet try\\n\\ttry {\\n\\t\\t${3}\\n\\t} catch ${1:e} : ${2:Exception} {\\n\\t}\\n\\n##\\n## Javadocs\\nsnippet /**\\n\\t/**\\n\\t * ${1}\\n\\t */\\n\\n##\\n## Print Methods\\nsnippet print\\n\\tconsole.println(\\\"${1:Message}\\\")\\n\\n##\\n## Setter and Getter Methods\\nsnippet set\\n\\tmethod set${1:}(${2:}) {\\n\\t\\t$1 = $2\\n\\t}\\nsnippet get\\n\\tmethod get${1:}() {\\n\\t\\treturn ${1:};\\n\\t}\\n\\n##\\n## Terminate Methods or Loops\\nsnippet re\\n\\treturn\";\n\n});\n\nace.define(\"ace/snippets/wollok\",[\"require\",\"exports\",\"module\",\"ace/snippets/wollok.snippets\"], function(require, exports, module){\"use strict\";\nexports.snippetText = require(\"./wollok.snippets\");\nexports.scope = \"wollok\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/wollok\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/xml.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/xml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/xquery.js",
    "content": "ace.define(\"ace/snippets/xquery.snippets\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {module.exports = 'snippet for\\n\\\n\tfor \\$\\${1:item} in \\${2:expr}\\n\\\nsnippet return\\n\\\n\treturn \\${1:expr}\\n\\\nsnippet import\\n\\\n\timport module namespace \\${1:ns} = \"\\${2:http://www.example.com/}\";\\n\\\nsnippet some\\n\\\n\tsome \\$\\${1:varname} in \\${2:expr} satisfies \\${3:expr}\\n\\\nsnippet every\\n\\\n\tevery \\$\\${1:varname} in \\${2:expr} satisfies \\${3:expr}\\n\\\nsnippet if\\n\\\n\tif(\\${1:true}) then \\${2:expr} else \\${3:true}\\n\\\nsnippet switch\\n\\\n\tswitch(\\${1:\"foo\"})\\n\\\n\tcase \\${2:\"foo\"}\\n\\\n\treturn \\${3:true}\\n\\\n\tdefault return \\${4:false}\\n\\\nsnippet try\\n\\\n\ttry { \\${1:expr} } catch \\${2:*} { \\${3:expr} }\\n\\\nsnippet tumbling\\n\\\n\tfor tumbling window \\$\\${1:varname} in \\${2:expr}\\n\\\n\tstart at \\$\\${3:start} when \\${4:expr}\\n\\\n\tend at \\$\\${5:end} when \\${6:expr}\\n\\\n\treturn \\${7:expr}\\n\\\nsnippet sliding\\n\\\n\tfor sliding window \\$\\${1:varname} in \\${2:expr}\\n\\\n\tstart at \\$\\${3:start} when \\${4:expr}\\n\\\n\tend at \\$\\${5:end} when \\${6:expr}\\n\\\n\treturn \\${7:expr}\\n\\\nsnippet let\\n\\\n\tlet \\$\\${1:varname} := \\${2:expr}\\n\\\nsnippet group\\n\\\n\tgroup by \\$\\${1:varname} := \\${2:expr}\\n\\\nsnippet order\\n\\\n\torder by \\${1:expr} \\${2:descending}\\n\\\nsnippet stable\\n\\\n\tstable order by \\${1:expr}\\n\\\nsnippet count\\n\\\n\tcount \\$\\${1:varname}\\n\\\nsnippet ordered\\n\\\n\tordered { \\${1:expr} }\\n\\\nsnippet unordered\\n\\\n\tunordered { \\${1:expr} }\\n\\\nsnippet treat \\n\\\n\ttreat as \\${1:expr}\\n\\\nsnippet castable\\n\\\n\tcastable as \\${1:atomicType}\\n\\\nsnippet cast\\n\\\n\tcast as \\${1:atomicType}\\n\\\nsnippet typeswitch\\n\\\n\ttypeswitch(\\${1:expr})\\n\\\n\tcase \\${2:type}  return \\${3:expr}\\n\\\n\tdefault return \\${4:expr}\\n\\\nsnippet var\\n\\\n\tdeclare variable \\$\\${1:varname} := \\${2:expr};\\n\\\nsnippet fn\\n\\\n\tdeclare function \\${1:ns}:\\${2:name}(){\\n\\\n\t\\${3:expr}\\n\\\n\t};\\n\\\nsnippet module\\n\\\n\tmodule namespace \\${1:ns} = \"\\${2:http://www.example.com}\";\\n\\\n';\n\n});\n\nace.define(\"ace/snippets/xquery\",[\"require\",\"exports\",\"module\",\"ace/snippets/xquery.snippets\"], function(require, exports, module) {\"use strict\";\n\nexports.snippetText = require(\"./xquery.snippets\");\nexports.scope = \"xquery\";\n\n});                (function() {\n                    ace.require([\"ace/snippets/xquery\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/yaml.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/yaml\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/snippets/zeek.js",
    "content": "\n;                (function() {\n                    ace.require([\"ace/snippets/zeek\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-ambiance.js",
    "content": "ace.define(\"ace/theme/ambiance.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-ambiance .ace_gutter {\\n  background-color: #3d3d3d;\\n  background-image: linear-gradient(left, #3D3D3D, #333);\\n  background-repeat: repeat-x;\\n  border-right: 1px solid #4d4d4d;\\n  text-shadow: 0px 1px 1px #4d4d4d;\\n  color: #222;\\n}\\n\\n.ace-ambiance .ace_gutter-layer {\\n  background: repeat left top;\\n}\\n\\n.ace-ambiance .ace_gutter-active-line {\\n  background-color: #3F3F3F;\\n}\\n\\n.ace-ambiance .ace_fold-widget {\\n  text-align: center;\\n}\\n\\n.ace-ambiance .ace_fold-widget:hover {\\n  color: #777;\\n}\\n\\n.ace-ambiance .ace_fold-widget.ace_start,\\n.ace-ambiance .ace_fold-widget.ace_end,\\n.ace-ambiance .ace_fold-widget.ace_closed{\\n  background: none !important;\\n  border: none;\\n  box-shadow: none;\\n}\\n\\n.ace-ambiance .ace_fold-widget.ace_start:after {\\n  content: '\\u25BE'\\n}\\n\\n.ace-ambiance .ace_fold-widget.ace_end:after {\\n  content: '\\u25B4'\\n}\\n\\n.ace-ambiance .ace_fold-widget.ace_closed:after {\\n  content: '\\u2023'\\n}\\n\\n.ace-ambiance .ace_print-margin {\\n  border-left: 1px dotted #2D2D2D;\\n  right: 0;\\n  background: #262626;\\n}\\n\\n.ace-ambiance .ace_scroller {\\n  -webkit-box-shadow: inset 0 0 10px black;\\n  -moz-box-shadow: inset 0 0 10px black;\\n  -o-box-shadow: inset 0 0 10px black;\\n  box-shadow: inset 0 0 10px black;\\n}\\n\\n.ace-ambiance {\\n  color: #E6E1DC;\\n  background-color: #202020;\\n}\\n\\n.ace-ambiance .ace_cursor {\\n  border-left: 1px solid #7991E8;\\n}\\n\\n.ace-ambiance .ace_overwrite-cursors .ace_cursor {\\n  border: 1px solid #FFE300;\\n  background: #766B13;\\n}\\n\\n.ace-ambiance.normal-mode .ace_cursor-layer {\\n  z-index: 0;\\n}\\n \\n.ace-ambiance .ace_marker-layer .ace_selection {\\n  background: rgba(221, 240, 255, 0.20);\\n}\\n\\n.ace-ambiance .ace_marker-layer .ace_selected-word {\\n  border-radius: 4px;\\n  border: 8px solid #3f475d;\\n  box-shadow: 0 0 4px black;\\n}\\n\\n.ace-ambiance .ace_marker-layer .ace_step {\\n  background: rgb(198, 219, 174);\\n}\\n\\n.ace-ambiance .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(255, 255, 255, 0.25);\\n}\\n\\n.ace-ambiance .ace_marker-layer .ace_active-line {\\n  background: rgba(255, 255, 255, 0.031);\\n}\\n\\n.ace-ambiance .ace_invisible {\\n  color: #333;\\n}\\n\\n.ace-ambiance .ace_paren {\\n  color: #24C2C7;\\n}\\n\\n.ace-ambiance .ace_keyword {\\n  color: #cda869;\\n}\\n\\n.ace-ambiance .ace_keyword.ace_operator {\\n  color: #fa8d6a;\\n}\\n\\n.ace-ambiance .ace_punctuation.ace_operator {\\n  color: #fa8d6a;\\n}\\n\\n.ace-ambiance .ace_identifier {\\n}\\n\\n.ace-ambiance .ace-statement {\\n  color: #cda869;\\n}\\n\\n.ace-ambiance .ace_constant {\\n  color: #CF7EA9;\\n}\\n\\n.ace-ambiance .ace_constant.ace_language {\\n  color: #CF7EA9;\\n}\\n\\n.ace-ambiance .ace_constant.ace_library {\\n  \\n}\\n\\n.ace-ambiance .ace_constant.ace_numeric {\\n  color: #78CF8A;\\n}\\n\\n.ace-ambiance .ace_invalid {\\n  text-decoration: underline;\\n}\\n\\n.ace-ambiance .ace_invalid.ace_illegal {\\n  color:#F8F8F8;\\n  background-color: rgba(86, 45, 86, 0.75);\\n}\\n\\n.ace-ambiance .ace_invalid,\\n.ace-ambiance .ace_deprecated {\\n  text-decoration: underline;\\n  font-style: italic;\\n  color: #D2A8A1;\\n}\\n\\n.ace-ambiance .ace_support {\\n  color: #9B859D;\\n}\\n\\n.ace-ambiance .ace_support.ace_function {\\n  color: #DAD085;\\n}\\n\\n.ace-ambiance .ace_function.ace_buildin {\\n  color: #9b859d;\\n}\\n\\n.ace-ambiance .ace_string {\\n  color: #8f9d6a;\\n}\\n\\n.ace-ambiance .ace_string.ace_regexp {\\n  color: #DAD085;\\n}\\n\\n.ace-ambiance .ace_comment {\\n  font-style: italic;\\n  color: #555;\\n}\\n\\n.ace-ambiance .ace_comment.ace_doc {\\n}\\n\\n.ace-ambiance .ace_comment.ace_doc.ace_tag {\\n  color: #666;\\n  font-style: normal;\\n}\\n\\n.ace-ambiance .ace_definition,\\n.ace-ambiance .ace_type {\\n  color: #aac6e3;\\n}\\n\\n.ace-ambiance .ace_variable {\\n  color: #9999cc;\\n}\\n\\n.ace-ambiance .ace_variable.ace_language {\\n  color: #9b859d;\\n}\\n\\n.ace-ambiance .ace_xml-pe {\\n  color: #494949;\\n}\\n\\n.ace-ambiance .ace_gutter-layer,\\n.ace-ambiance .ace_text-layer {\\n  background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace-ambiance .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\\n.ace-ambiance .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACAQMAAACjTyRkAAAABlBMVEUAAADCwsK76u2xAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjYGBoAAAAhACBGFbxzQAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/ambiance\",[\"require\",\"exports\",\"module\",\"ace/theme/ambiance.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-ambiance\";\nexports.cssText = require(\"./ambiance.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/ambiance\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-chaos.js",
    "content": "ace.define(\"ace/theme/chaos.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-chaos .ace_gutter {\\n  background: #141414;\\n  color: #595959;\\n  border-right: 1px solid #282828;\\n}\\n.ace-chaos .ace_gutter-cell.ace_warning {\\n  background-image: none;\\n  background: #FC0;\\n  border-left: none;\\n  padding-left: 0;\\n  color: #000;\\n}\\n.ace-chaos .ace_gutter-cell.ace_error {\\n  background-position: -6px center;\\n  background-image: none;\\n  background: #F10;\\n  border-left: none;\\n  padding-left: 0;\\n  color: #000;\\n}\\n.ace-chaos .ace_print-margin {\\n  border-left: 1px solid #555;\\n  right: 0;\\n  background: #1D1D1D;\\n}\\n.ace-chaos {\\n  background-color: #161616;\\n  color: #E6E1DC;\\n}\\n\\n.ace-chaos .ace_cursor {\\n  border-left: 2px solid #FFFFFF;\\n}\\n.ace-chaos .ace_cursor.ace_overwrite {\\n  border-left: 0px;\\n  border-bottom: 1px solid #FFFFFF;\\n}\\n.ace-chaos .ace_marker-layer .ace_selection {\\n  background: #494836;\\n}\\n.ace-chaos .ace_marker-layer .ace_step {\\n  background: rgb(198, 219, 174);\\n}\\n.ace-chaos .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #FCE94F;\\n}\\n.ace-chaos .ace_marker-layer .ace_active-line {\\n  background: #333;\\n}\\n.ace-chaos .ace_gutter-active-line {\\n  background-color: #222;\\n}\\n.ace-chaos .ace_invisible {\\n  color: #404040;\\n}\\n.ace-chaos .ace_keyword {\\n  color:#00698F;\\n}\\n.ace-chaos .ace_keyword.ace_operator {\\n  color:#FF308F;\\n}\\n.ace-chaos .ace_constant {\\n  color:#1EDAFB;\\n}\\n.ace-chaos .ace_constant.ace_language {\\n  color:#FDC251;\\n}\\n.ace-chaos .ace_constant.ace_library {\\n  color:#8DFF0A;\\n}\\n.ace-chaos .ace_constant.ace_numeric {\\n  color:#58C554;\\n}\\n.ace-chaos .ace_invalid {\\n  color:#FFFFFF;\\n  background-color:#990000;\\n}\\n.ace-chaos .ace_invalid.ace_deprecated {\\n  color:#FFFFFF;\\n  background-color:#990000;\\n}\\n.ace-chaos .ace_support {\\n  color: #999;\\n}\\n.ace-chaos .ace_support.ace_function {\\n  color:#00AEEF;\\n}\\n.ace-chaos .ace_function {\\n  color:#00AEEF;\\n}\\n.ace-chaos .ace_string {\\n  color:#58C554;\\n}\\n.ace-chaos .ace_comment {\\n  color:#555;\\n  font-style:italic;\\n  padding-bottom: 0px;\\n}\\n.ace-chaos .ace_variable {\\n  color:#997744;\\n}\\n.ace-chaos .ace_meta.ace_tag {\\n  color:#BE53E6;\\n}\\n.ace-chaos .ace_entity.ace_other.ace_attribute-name {\\n  color:#FFFF89;\\n}\\n.ace-chaos .ace_markup.ace_underline {\\n  text-decoration: underline;\\n}\\n.ace-chaos .ace_fold-widget {\\n  text-align: center;\\n}\\n\\n.ace-chaos .ace_fold-widget:hover {\\n  color: #777;\\n}\\n\\n.ace-chaos .ace_fold-widget.ace_start,\\n.ace-chaos .ace_fold-widget.ace_end,\\n.ace-chaos .ace_fold-widget.ace_closed{\\n  background: none !important;\\n  border: none;\\n  box-shadow: none;\\n}\\n\\n.ace-chaos .ace_fold-widget.ace_start:after {\\n  content: '\\u25BE'\\n}\\n\\n.ace-chaos .ace_fold-widget.ace_end:after {\\n  content: '\\u25B4'\\n}\\n\\n.ace-chaos .ace_fold-widget.ace_closed:after {\\n  content: '\\u2023'\\n}\\n\\n.ace-chaos .ace_indent-guide {\\n  border-right:1px dotted #333333;\\n  margin-right:-1px;\\n}\\n\\n.ace-chaos .ace_indent-guide-active {\\n  border-right:1px dotted #afafaf;\\n  margin-right:-1px;\\n}\\n\\n.ace-chaos .ace_fold { \\n  background: #222; \\n  border-radius: 3px; \\n  color: #7AF; \\n  border: none; \\n}\\n.ace-chaos .ace_fold:hover {\\n  background: #CCC; \\n  color: #000;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/chaos\",[\"require\",\"exports\",\"module\",\"ace/theme/chaos.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-chaos\";\nexports.cssText = require(\"./chaos.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/chaos\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-chrome.js",
    "content": "ace.define(\"ace/theme/chrome.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-chrome .ace_gutter {\\n  background: #ebebeb;\\n  color: #333;\\n  overflow : hidden;\\n}\\n\\n.ace-chrome .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8;\\n}\\n\\n.ace-chrome {\\n  background-color: #FFFFFF;\\n  color: black;\\n}\\n\\n.ace-chrome .ace_cursor {\\n  color: black;\\n}\\n\\n.ace-chrome .ace_invisible {\\n  color: rgb(191, 191, 191);\\n}\\n\\n.ace-chrome .ace_constant.ace_buildin {\\n  color: rgb(88, 72, 246);\\n}\\n\\n.ace-chrome .ace_constant.ace_language {\\n  color: rgb(88, 92, 246);\\n}\\n\\n.ace-chrome .ace_constant.ace_library {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-chrome .ace_invalid {\\n  background-color: rgb(153, 0, 0);\\n  color: white;\\n}\\n\\n.ace-chrome .ace_fold {\\n}\\n\\n.ace-chrome .ace_support.ace_function {\\n  color: rgb(60, 76, 114);\\n}\\n\\n.ace-chrome .ace_support.ace_constant {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-chrome .ace_support.ace_type,\\n.ace-chrome .ace_support.ace_class\\n.ace-chrome .ace_support.ace_other {\\n  color: rgb(109, 121, 222);\\n}\\n\\n.ace-chrome .ace_variable.ace_parameter {\\n  font-style:italic;\\n  color:#FD971F;\\n}\\n.ace-chrome .ace_keyword.ace_operator {\\n  color: rgb(104, 118, 135);\\n}\\n\\n.ace-chrome .ace_comment {\\n  color: #236e24;\\n}\\n\\n.ace-chrome .ace_comment.ace_doc {\\n  color: #236e24;\\n}\\n\\n.ace-chrome .ace_comment.ace_doc.ace_tag {\\n  color: #236e24;\\n}\\n\\n.ace-chrome .ace_constant.ace_numeric {\\n  color: rgb(0, 0, 205);\\n}\\n\\n.ace-chrome .ace_variable {\\n  color: rgb(49, 132, 149);\\n}\\n\\n.ace-chrome .ace_xml-pe {\\n  color: rgb(104, 104, 91);\\n}\\n\\n.ace-chrome .ace_entity.ace_name.ace_function {\\n  color: #0000A2;\\n}\\n\\n\\n.ace-chrome .ace_heading {\\n  color: rgb(12, 7, 255);\\n}\\n\\n.ace-chrome .ace_list {\\n  color:rgb(185, 6, 144);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_selection {\\n  background: rgb(181, 213, 255);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_step {\\n  background: rgb(252, 255, 0);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_stack {\\n  background: rgb(164, 229, 101);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_active-line {\\n  background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-chrome .ace_gutter-active-line {\\n    background-color : #dcdcdc;\\n}\\n\\n.ace-chrome .ace_marker-layer .ace_selected-word {\\n  background: rgb(250, 250, 255);\\n  border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-chrome .ace_storage,\\n.ace-chrome .ace_keyword,\\n.ace-chrome .ace_meta.ace_tag {\\n  color: rgb(147, 15, 128);\\n}\\n\\n.ace-chrome .ace_string.ace_regex {\\n  color: rgb(255, 0, 0)\\n}\\n\\n.ace-chrome .ace_string {\\n  color: #1A1AA6;\\n}\\n\\n.ace-chrome .ace_entity.ace_other.ace_attribute-name {\\n  color: #994409;\\n}\\n\\n.ace-chrome .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n  \\n.ace-chrome .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/chrome\",[\"require\",\"exports\",\"module\",\"ace/theme/chrome.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-chrome\";\nexports.cssText = require(\"./chrome.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/chrome\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-cloud9_day.js",
    "content": "ace.define(\"ace/theme/cloud9_day.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-cloud9-day .ace_gutter {\\n    background: #ECECEC;\\n    color: #333;\\n}\\n\\n.ace-cloud9-day .ace_print-margin {\\n    width: 1px;\\n    background: #e8e8e8;\\n}\\n\\n.ace-cloud9-day .ace_fold {\\n    background-color: #6B72E6;\\n}\\n\\n.ace-cloud9-day {\\n    background-color: #FBFBFB;\\n    color: black;\\n}\\n\\n.ace-cloud9-day .ace_cursor {\\n    color: black;\\n}\\n\\n.ace-cloud9-day .ace_invisible {\\n    color: rgb(191, 191, 191);\\n}\\n\\n.ace-cloud9-day .ace_storage,\\n.ace-cloud9-day .ace_keyword {\\n    color: rgb(24, 122, 234);\\n}\\n\\n.ace-cloud9-day .ace_constant {\\n    color: rgb(197, 6, 11);\\n}\\n\\n.ace-cloud9-day .ace_constant.ace_buildin {\\n    color: rgb(88, 72, 246);\\n}\\n\\n.ace-cloud9-day .ace_constant.ace_language {\\n    color: rgb(88, 92, 246);\\n}\\n\\n.ace-cloud9-day .ace_constant.ace_library {\\n    color: rgb(6, 150, 14);\\n}\\n\\n.ace-cloud9-day .ace_invalid {\\n    background-color: rgba(255, 0, 0, 0.1);\\n    color: red;\\n}\\n\\n.ace-cloud9-day .ace_support.ace_function {\\n    color: rgb(60, 76, 114);\\n}\\n\\n.ace-cloud9-day .ace_support.ace_constant {\\n    color: rgb(6, 150, 14);\\n}\\n\\n.ace-cloud9-day .ace_support.ace_type,\\n.ace-cloud9-day .ace_support.ace_class {\\n    color: rgb(109, 121, 222);\\n}\\n\\n.ace-cloud9-day .ace_keyword.ace_operator {\\n    color: rgb(104, 118, 135);\\n}\\n\\n.ace-cloud9-day .ace_string {\\n    color: rgb(3, 106, 7);\\n}\\n\\n.ace-cloud9-day .ace_comment {\\n    color: rgb(76, 136, 107);\\n}\\n\\n.ace-cloud9-day .ace_comment.ace_doc {\\n    color: rgb(0, 102, 255);\\n}\\n\\n.ace-cloud9-day .ace_comment.ace_doc.ace_tag {\\n    color: rgb(128, 159, 191);\\n}\\n\\n.ace-cloud9-day .ace_constant.ace_numeric {\\n    color: rgb(0, 0, 205);\\n}\\n\\n.ace-cloud9-day .ace_variable {\\n    color: rgb(49, 132, 149);\\n}\\n\\n.ace-cloud9-day .ace_xml-pe {\\n    color: rgb(104, 104, 91);\\n}\\n\\n.ace-cloud9-day .ace_entity.ace_name.ace_function {\\n    color: #0000A2;\\n}\\n\\n\\n.ace-cloud9-day .ace_heading {\\n    color: rgb(12, 7, 255);\\n}\\n\\n.ace-cloud9-day .ace_list {\\n    color: rgb(185, 6, 144);\\n}\\n\\n.ace-cloud9-day .ace_meta.ace_tag {\\n    color: rgb(0, 22, 142);\\n}\\n\\n.ace-cloud9-day .ace_string.ace_regex {\\n    color: rgb(255, 0, 0)\\n}\\n\\n.ace-cloud9-day .ace_marker-layer .ace_selection {\\n    background: rgb(181, 213, 255);\\n}\\n\\n.ace-cloud9-day.ace_multiselect .ace_selection.ace_start {\\n    box-shadow: 0 0 3px 0px white;\\n}\\n\\n.ace-cloud9-day .ace_marker-layer .ace_step {\\n    background: rgb(247, 237, 137);\\n}\\n\\n.ace-cloud9-day .ace_marker-layer .ace_stack {\\n    background: #BAE0A0;\\n}\\n\\n.ace-cloud9-day .ace_marker-layer .ace_bracket {\\n    margin: -1px 0 0 -1px;\\n    border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-cloud9-day .ace_marker-layer .ace_active-line {\\n    background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-cloud9-day .ace_gutter-active-line {\\n    background-color: #E5E5E5;\\n}\\n\\n.ace-cloud9-day .ace_marker-layer .ace_selected-word {\\n    background: rgb(250, 250, 255);\\n    border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-cloud9-day .ace_indent-guide {\\n    background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-cloud9-day .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n} \\n\";\n\n});\n\nace.define(\"ace/theme/cloud9_day\",[\"require\",\"exports\",\"module\",\"ace/theme/cloud9_day.css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-cloud9-day\";\nexports.cssText = require(\"./cloud9_day.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});                (function() {\n                    ace.require([\"ace/theme/cloud9_day\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-cloud9_night.js",
    "content": "ace.define(\"ace/theme/cloud9_night.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-cloud9-night .ace_gutter {\\n    background: #303130;\\n    color: #eee\\n}\\n\\n.ace-cloud9-night .ace_print-margin {\\n    width: 1px;\\n    background: #222\\n}\\n\\n.ace-cloud9-night {\\n    background-color: #181818;\\n    color: #EBEBEB\\n}\\n\\n.ace-cloud9-night .ace_cursor {\\n    color: #9F9F9F\\n}\\n\\n.ace-cloud9-night .ace_marker-layer .ace_selection {\\n    background: #424242\\n}\\n\\n.ace-cloud9-night.ace_multiselect .ace_selection.ace_start {\\n    box-shadow: 0 0 3px 0px #000000;\\n    border-radius: 2px\\n}\\n\\n.ace-cloud9-night .ace_marker-layer .ace_step {\\n    background: rgb(102, 82, 0)\\n}\\n\\n.ace-cloud9-night .ace_marker-layer .ace_bracket {\\n    margin: -1px 0 0 -1px;\\n    border: 1px solid #888888\\n}\\n\\n.ace-cloud9-night .ace_marker-layer .ace_highlight {\\n    border: 1px solid rgb(110, 119, 0);\\n    border-bottom: 0;\\n    box-shadow: inset 0 -1px rgb(110, 119, 0);\\n    margin: -1px 0 0 -1px;\\n    background: rgba(255, 235, 0, 0.1);\\n}\\n\\n.ace-cloud9-night .ace_marker-layer .ace_active-line {\\n    background: #292929\\n}\\n\\n.ace-cloud9-night .ace_gutter-active-line {\\n    background-color: #3D3D3D\\n}\\n\\n.ace-cloud9-night .ace_stack {\\n    background-color: rgb(66, 90, 44)\\n}\\n\\n.ace-cloud9-night .ace_marker-layer .ace_selected-word {\\n    border: 1px solid #888888\\n}\\n\\n.ace-cloud9-night .ace_invisible {\\n    color: #343434\\n}\\n\\n.ace-cloud9-night .ace_keyword,\\n.ace-cloud9-night .ace_meta,\\n.ace-cloud9-night .ace_storage,\\n.ace-cloud9-night .ace_storage.ace_type,\\n.ace-cloud9-night .ace_support.ace_type {\\n    color: #C397D8\\n}\\n\\n.ace-cloud9-night .ace_keyword.ace_operator {\\n    color: #70C0B1\\n}\\n\\n.ace-cloud9-night .ace_constant.ace_character,\\n.ace-cloud9-night .ace_constant.ace_language,\\n.ace-cloud9-night .ace_constant.ace_numeric,\\n.ace-cloud9-night .ace_keyword.ace_other.ace_unit,\\n.ace-cloud9-night .ace_support.ace_constant,\\n.ace-cloud9-night .ace_variable.ace_parameter {\\n    color: #E78C45\\n}\\n\\n.ace-cloud9-night .ace_constant.ace_other {\\n    color: #EEEEEE\\n}\\n\\n.ace-cloud9-night .ace_invalid {\\n    color: #CED2CF;\\n    background-color: #DF5F5F\\n}\\n\\n.ace-cloud9-night .ace_invalid.ace_deprecated {\\n    color: #CED2CF;\\n    background-color: #B798BF\\n}\\n\\n.ace-cloud9-night .ace_fold {\\n    background-color: #7AA6DA;\\n    border-color: #DEDEDE\\n}\\n\\n.ace-cloud9-night .ace_entity.ace_name.ace_function,\\n.ace-cloud9-night .ace_support.ace_function,\\n.ace-cloud9-night .ace_variable:not(.ace_parameter),\\n.ace-cloud9-night .ace_constant:not(.ace_numeric) {\\n    color: #7AA6DA\\n}\\n\\n.ace-cloud9-night .ace_support.ace_class,\\n.ace-cloud9-night .ace_support.ace_type {\\n    color: #E7C547\\n}\\n\\n.ace-cloud9-night .ace_heading,\\n.ace-cloud9-night .ace_markup.ace_heading,\\n.ace-cloud9-night .ace_string {\\n    color: #B9CA4A\\n}\\n\\n.ace-cloud9-night .ace_entity.ace_name.ace_tag,\\n.ace-cloud9-night .ace_entity.ace_other.ace_attribute-name,\\n.ace-cloud9-night .ace_meta.ace_tag,\\n.ace-cloud9-night .ace_string.ace_regexp,\\n.ace-cloud9-night .ace_variable {\\n    color: #D54E53\\n}\\n\\n.ace-cloud9-night .ace_comment {\\n    color: #969896\\n}\\n\\n.ace-cloud9-night .ace_c9searchresults.ace_keyword {\\n    color: #C2C280;\\n}\\n\\n.ace-cloud9-night .ace_indent-guide {\\n    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-cloud9-night .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/cloud9_night\",[\"require\",\"exports\",\"module\",\"ace/theme/cloud9_night.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-cloud9-night\";\nexports.cssText = require(\"./cloud9_night.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});                (function() {\n                    ace.require([\"ace/theme/cloud9_night\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-cloud9_night_low_color.js",
    "content": "ace.define(\"ace/theme/cloud9_night_low_color.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-cloud9-night-low-color .ace_gutter {\\n    background: #303130;\\n    color: #eee\\n}\\n\\n.ace-cloud9-night-low-color .ace_print-margin {\\n    width: 1px;\\n    background: #222\\n}\\n\\n.ace-cloud9-night-low-color {\\n    background-color: #181818;\\n    color: #EBEBEB\\n}\\n\\n.ace-cloud9-night-low-color .ace_cursor {\\n    color: #9F9F9F\\n}\\n\\n.ace-cloud9-night-low-color .ace_marker-layer .ace_selection {\\n    background: #424242\\n}\\n\\n.ace-cloud9-night-low-color.ace_multiselect .ace_selection.ace_start {\\n    box-shadow: 0 0 3px 0px #000000;\\n    border-radius: 2px\\n}\\n\\n.ace-cloud9-night-low-color .ace_marker-layer .ace_step {\\n    background: rgb(102, 82, 0)\\n}\\n\\n.ace-cloud9-night-low-color .ace_marker-layer .ace_bracket {\\n    margin: -1px 0 0 -1px;\\n    border: 1px solid #888888\\n}\\n\\n.ace-cloud9-night-low-color .ace_marker-layer .ace_highlight {\\n    border: 1px solid rgb(110, 119, 0);\\n    border-bottom: 0;\\n    box-shadow: inset 0 -1px rgb(110, 119, 0);\\n    margin: -1px 0 0 -1px;\\n    background: rgba(255, 235, 0, 0.1);\\n}\\n\\n.ace-cloud9-night-low-color .ace_marker-layer .ace_active-line {\\n    background: #292929\\n}\\n\\n.ace-cloud9-night-low-color .ace_gutter-active-line {\\n    background-color: #3D3D3D\\n}\\n\\n.ace-cloud9-night-low-color .ace_stack {\\n    background-color: rgb(66, 90, 44)\\n}\\n\\n.ace-cloud9-night-low-color .ace_marker-layer .ace_selected-word {\\n    border: 1px solid #888888\\n}\\n\\n.ace-cloud9-night-low-color .ace_invisible {\\n    color: #343434\\n}\\n\\n.ace-cloud9-night-low-color .ace_keyword,\\n.ace-cloud9-night-low-color .ace_meta,\\n.ace-cloud9-night-low-color .ace_storage {\\n    color: #C397D8\\n}\\n\\n.ace-cloud9-night-low-color .ace_keyword.ace_operator {\\n    color: #70C0B1\\n}\\n\\n.ace-cloud9-night-low-color .ace_constant.ace_character,\\n.ace-cloud9-night-low-color .ace_constant.ace_language,\\n.ace-cloud9-night-low-color .ace_constant.ace_numeric,\\n.ace-cloud9-night-low-color .ace_keyword.ace_other.ace_unit {\\n    color: #DAA637\\n}\\n\\n.ace-cloud9-night-low-color .ace_constant.ace_other {\\n    color: #EEEEEE\\n}\\n\\n.ace-cloud9-night-low-color .ace_invalid {\\n    color: #CED2CF;\\n    background-color: #DF5F5F\\n}\\n\\n.ace-cloud9-night-low-color .ace_invalid.ace_deprecated {\\n    color: #CED2CF;\\n    background-color: #B798BF\\n}\\n\\n.ace-cloud9-night-low-color .ace_fold {\\n    background-color: #7AA6DA;\\n    border-color: #DEDEDE\\n}\\n\\n.ace-cloud9-night-low-color .ace_entity.ace_name.ace_function,\\n.ace-cloud9-night-low-color .ace_support.ace_function,\\n.ace-cloud9-night-low-color .ace_variable:not(.ace_parameter),\\n.ace-cloud9-night-low-color .ace_constant:not(.ace_numeric) {\\n    color: #7AA6DA\\n}\\n\\n.ace-cloud9-night-low-color .ace_support.ace_class,\\n.ace-cloud9-night-low-color .ace_support.ace_type {\\n    color: #E7C547\\n}\\n\\n.ace-cloud9-night-low-color .ace_heading,\\n.ace-cloud9-night-low-color .ace_markup.ace_heading,\\n.ace-cloud9-night-low-color .ace_string {\\n    color: #B9CA4A\\n}\\n\\n.ace-cloud9-night-low-color .ace_comment {\\n    color: #969896\\n}\\n\\n.ace-cloud9-night-low-color .ace_c9searchresults.ace_keyword {\\n    color: #C2C280;\\n}\\n\\n.ace-cloud9-night-low-color .ace_indent-guide {\\n    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-cloud9-night-low-color .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/cloud9_night_low_color\",[\"require\",\"exports\",\"module\",\"ace/theme/cloud9_night_low_color.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-cloud9-night-low-color\";\nexports.cssText = require(\"./cloud9_night_low_color.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});                (function() {\n                    ace.require([\"ace/theme/cloud9_night_low_color\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-clouds.js",
    "content": "ace.define(\"ace/theme/clouds.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-clouds .ace_gutter {\\n  background: #ebebeb;\\n  color: #333\\n}\\n\\n.ace-clouds .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8\\n}\\n\\n.ace-clouds {\\n  background-color: #FFFFFF;\\n  color: #000000\\n}\\n\\n.ace-clouds .ace_cursor {\\n  color: #000000\\n}\\n\\n.ace-clouds .ace_marker-layer .ace_selection {\\n  background: #BDD5FC\\n}\\n\\n.ace-clouds.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #FFFFFF;\\n}\\n\\n.ace-clouds .ace_marker-layer .ace_step {\\n  background: rgb(255, 255, 0)\\n}\\n\\n.ace-clouds .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #BFBFBF\\n}\\n\\n.ace-clouds .ace_marker-layer .ace_active-line {\\n  background: #FFFBD1\\n}\\n\\n.ace-clouds .ace_gutter-active-line {\\n  background-color : #dcdcdc\\n}\\n\\n.ace-clouds .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #BDD5FC\\n}\\n\\n.ace-clouds .ace_invisible {\\n  color: #BFBFBF\\n}\\n\\n.ace-clouds .ace_keyword,\\n.ace-clouds .ace_meta,\\n.ace-clouds .ace_support.ace_constant.ace_property-value {\\n  color: #AF956F\\n}\\n\\n.ace-clouds .ace_keyword.ace_operator {\\n  color: #484848\\n}\\n\\n.ace-clouds .ace_keyword.ace_other.ace_unit {\\n  color: #96DC5F\\n}\\n\\n.ace-clouds .ace_constant.ace_language {\\n  color: #39946A\\n}\\n\\n.ace-clouds .ace_constant.ace_numeric {\\n  color: #46A609\\n}\\n\\n.ace-clouds .ace_constant.ace_character.ace_entity {\\n  color: #BF78CC\\n}\\n\\n.ace-clouds .ace_invalid {\\n  background-color: #FF002A\\n}\\n\\n.ace-clouds .ace_fold {\\n  background-color: #AF956F;\\n  border-color: #000000\\n}\\n\\n.ace-clouds .ace_storage,\\n.ace-clouds .ace_support.ace_class,\\n.ace-clouds .ace_support.ace_function,\\n.ace-clouds .ace_support.ace_other,\\n.ace-clouds .ace_support.ace_type {\\n  color: #C52727\\n}\\n\\n.ace-clouds .ace_string {\\n  color: #5D90CD\\n}\\n\\n.ace-clouds .ace_comment {\\n  color: #BCC8BA\\n}\\n\\n.ace-clouds .ace_entity.ace_name.ace_tag,\\n.ace-clouds .ace_entity.ace_other.ace_attribute-name {\\n  color: #606060\\n}\\n\\n.ace-clouds .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y\\n}\\n\\n.ace-clouds .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n} \\n\";\n\n});\n\nace.define(\"ace/theme/clouds\",[\"require\",\"exports\",\"module\",\"ace/theme/clouds.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-clouds\";\nexports.cssText = require(\"./clouds.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/clouds\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-clouds_midnight.js",
    "content": "ace.define(\"ace/theme/clouds_midnight.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-clouds-midnight .ace_gutter {\\n  background: #232323;\\n  color: #929292\\n}\\n\\n.ace-clouds-midnight .ace_print-margin {\\n  width: 1px;\\n  background: #232323\\n}\\n\\n.ace-clouds-midnight {\\n  background-color: #191919;\\n  color: #929292\\n}\\n\\n.ace-clouds-midnight .ace_cursor {\\n  color: #7DA5DC\\n}\\n\\n.ace-clouds-midnight .ace_marker-layer .ace_selection {\\n  background: #000000\\n}\\n\\n.ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #191919;\\n}\\n\\n.ace-clouds-midnight .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-clouds-midnight .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #BFBFBF\\n}\\n\\n.ace-clouds-midnight .ace_marker-layer .ace_active-line {\\n  background: rgba(215, 215, 215, 0.031)\\n}\\n\\n.ace-clouds-midnight .ace_gutter-active-line {\\n  background-color: rgba(215, 215, 215, 0.031)\\n}\\n\\n.ace-clouds-midnight .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #000000\\n}\\n\\n.ace-clouds-midnight .ace_invisible {\\n  color: #666\\n}\\n\\n.ace-clouds-midnight .ace_keyword,\\n.ace-clouds-midnight .ace_meta,\\n.ace-clouds-midnight .ace_support.ace_constant.ace_property-value {\\n  color: #927C5D\\n}\\n\\n.ace-clouds-midnight .ace_keyword.ace_operator {\\n  color: #4B4B4B\\n}\\n\\n.ace-clouds-midnight .ace_keyword.ace_other.ace_unit {\\n  color: #366F1A\\n}\\n\\n.ace-clouds-midnight .ace_constant.ace_language {\\n  color: #39946A\\n}\\n\\n.ace-clouds-midnight .ace_constant.ace_numeric {\\n  color: #46A609\\n}\\n\\n.ace-clouds-midnight .ace_constant.ace_character.ace_entity {\\n  color: #A165AC\\n}\\n\\n.ace-clouds-midnight .ace_invalid {\\n  color: #FFFFFF;\\n  background-color: #E92E2E\\n}\\n\\n.ace-clouds-midnight .ace_fold {\\n  background-color: #927C5D;\\n  border-color: #929292\\n}\\n\\n.ace-clouds-midnight .ace_storage,\\n.ace-clouds-midnight .ace_support.ace_class,\\n.ace-clouds-midnight .ace_support.ace_function,\\n.ace-clouds-midnight .ace_support.ace_other,\\n.ace-clouds-midnight .ace_support.ace_type {\\n  color: #E92E2E\\n}\\n\\n.ace-clouds-midnight .ace_string {\\n  color: #5D90CD\\n}\\n\\n.ace-clouds-midnight .ace_comment {\\n  color: #3C403B\\n}\\n\\n.ace-clouds-midnight .ace_entity.ace_name.ace_tag,\\n.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {\\n  color: #606060\\n}\\n\\n.ace-clouds-midnight .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-clouds-midnight .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/clouds_midnight\",[\"require\",\"exports\",\"module\",\"ace/theme/clouds_midnight.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-clouds-midnight\";\nexports.cssText = require(\"./clouds_midnight.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/clouds_midnight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-cobalt.js",
    "content": "ace.define(\"ace/theme/cobalt.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-cobalt .ace_gutter {\\n  background: #011e3a;\\n  color: rgb(128,145,160)\\n}\\n\\n.ace-cobalt .ace_print-margin {\\n  width: 1px;\\n  background: #555555\\n}\\n\\n.ace-cobalt {\\n  background-color: #002240;\\n  color: #FFFFFF\\n}\\n\\n.ace-cobalt .ace_cursor {\\n  color: #FFFFFF\\n}\\n\\n.ace-cobalt .ace_marker-layer .ace_selection {\\n  background: rgba(179, 101, 57, 0.75)\\n}\\n\\n.ace-cobalt.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #002240;\\n}\\n\\n.ace-cobalt .ace_marker-layer .ace_step {\\n  background: rgb(127, 111, 19)\\n}\\n\\n.ace-cobalt .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(255, 255, 255, 0.15)\\n}\\n\\n.ace-cobalt .ace_marker-layer .ace_active-line {\\n  background: rgba(0, 0, 0, 0.35)\\n}\\n\\n.ace-cobalt .ace_gutter-active-line {\\n  background-color: rgba(0, 0, 0, 0.35)\\n}\\n\\n.ace-cobalt .ace_marker-layer .ace_selected-word {\\n  border: 1px solid rgba(179, 101, 57, 0.75)\\n}\\n\\n.ace-cobalt .ace_invisible {\\n  color: rgba(255, 255, 255, 0.15)\\n}\\n\\n.ace-cobalt .ace_keyword,\\n.ace-cobalt .ace_meta {\\n  color: #FF9D00\\n}\\n\\n.ace-cobalt .ace_constant,\\n.ace-cobalt .ace_constant.ace_character,\\n.ace-cobalt .ace_constant.ace_character.ace_escape,\\n.ace-cobalt .ace_constant.ace_other {\\n  color: #FF628C\\n}\\n\\n.ace-cobalt .ace_invalid {\\n  color: #F8F8F8;\\n  background-color: #800F00\\n}\\n\\n.ace-cobalt .ace_support {\\n  color: #80FFBB\\n}\\n\\n.ace-cobalt .ace_support.ace_constant {\\n  color: #EB939A\\n}\\n\\n.ace-cobalt .ace_fold {\\n  background-color: #FF9D00;\\n  border-color: #FFFFFF\\n}\\n\\n.ace-cobalt .ace_support.ace_function {\\n  color: #FFB054\\n}\\n\\n.ace-cobalt .ace_storage {\\n  color: #FFEE80\\n}\\n\\n.ace-cobalt .ace_entity {\\n  color: #FFDD00\\n}\\n\\n.ace-cobalt .ace_string {\\n  color: #3AD900\\n}\\n\\n.ace-cobalt .ace_string.ace_regexp {\\n  color: #80FFC2\\n}\\n\\n.ace-cobalt .ace_comment {\\n  font-style: italic;\\n  color: #0088FF\\n}\\n\\n.ace-cobalt .ace_heading,\\n.ace-cobalt .ace_markup.ace_heading {\\n  color: #C8E4FD;\\n  background-color: #001221\\n}\\n\\n.ace-cobalt .ace_list,\\n.ace-cobalt .ace_markup.ace_list {\\n  background-color: #130D26\\n}\\n\\n.ace-cobalt .ace_variable {\\n  color: #CCCCCC\\n}\\n\\n.ace-cobalt .ace_variable.ace_language {\\n  color: #FF80E1\\n}\\n\\n.ace-cobalt .ace_meta.ace_tag {\\n  color: #9EFFFF\\n}\\n\\n.ace-cobalt .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHCLSvkPAAP3AgSDTRd4AAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-cobalt .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/cobalt\",[\"require\",\"exports\",\"module\",\"ace/theme/cobalt.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-cobalt\";\nexports.cssText = require(\"./cobalt.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/cobalt\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-crimson_editor.js",
    "content": "ace.define(\"ace/theme/crimson_editor.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-crimson-editor .ace_gutter {\\n  background: #ebebeb;\\n  color: #333;\\n  overflow : hidden;\\n}\\n\\n.ace-crimson-editor .ace_gutter-layer {\\n  width: 100%;\\n  text-align: right;\\n}\\n\\n.ace-crimson-editor .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8;\\n}\\n\\n.ace-crimson-editor {\\n  background-color: #FFFFFF;\\n  color: rgb(64, 64, 64);\\n}\\n\\n.ace-crimson-editor .ace_cursor {\\n  color: black;\\n}\\n\\n.ace-crimson-editor .ace_invisible {\\n  color: rgb(191, 191, 191);\\n}\\n\\n.ace-crimson-editor .ace_identifier {\\n  color: black;\\n}\\n\\n.ace-crimson-editor .ace_keyword {\\n  color: blue;\\n}\\n\\n.ace-crimson-editor .ace_constant.ace_buildin {\\n  color: rgb(88, 72, 246);\\n}\\n\\n.ace-crimson-editor .ace_constant.ace_language {\\n  color: rgb(255, 156, 0);\\n}\\n\\n.ace-crimson-editor .ace_constant.ace_library {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-crimson-editor .ace_invalid {\\n  text-decoration: line-through;\\n  color: rgb(224, 0, 0);\\n}\\n\\n.ace-crimson-editor .ace_fold {\\n}\\n\\n.ace-crimson-editor .ace_support.ace_function {\\n  color: rgb(192, 0, 0);\\n}\\n\\n.ace-crimson-editor .ace_support.ace_constant {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-crimson-editor .ace_support.ace_type,\\n.ace-crimson-editor .ace_support.ace_class {\\n  color: rgb(109, 121, 222);\\n}\\n\\n.ace-crimson-editor .ace_keyword.ace_operator {\\n  color: rgb(49, 132, 149);\\n}\\n\\n.ace-crimson-editor .ace_string {\\n  color: rgb(128, 0, 128);\\n}\\n\\n.ace-crimson-editor .ace_comment {\\n  color: rgb(76, 136, 107);\\n}\\n\\n.ace-crimson-editor .ace_comment.ace_doc {\\n  color: rgb(0, 102, 255);\\n}\\n\\n.ace-crimson-editor .ace_comment.ace_doc.ace_tag {\\n  color: rgb(128, 159, 191);\\n}\\n\\n.ace-crimson-editor .ace_constant.ace_numeric {\\n  color: rgb(0, 0, 64);\\n}\\n\\n.ace-crimson-editor .ace_variable {\\n  color: rgb(0, 64, 128);\\n}\\n\\n.ace-crimson-editor .ace_xml-pe {\\n  color: rgb(104, 104, 91);\\n}\\n\\n.ace-crimson-editor .ace_marker-layer .ace_selection {\\n  background: rgb(181, 213, 255);\\n}\\n\\n.ace-crimson-editor .ace_marker-layer .ace_step {\\n  background: rgb(252, 255, 0);\\n}\\n\\n.ace-crimson-editor .ace_marker-layer .ace_stack {\\n  background: rgb(164, 229, 101);\\n}\\n\\n.ace-crimson-editor .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-crimson-editor .ace_marker-layer .ace_active-line {\\n  background: rgb(232, 242, 254);\\n}\\n\\n.ace-crimson-editor .ace_gutter-active-line {\\n    background-color : #dcdcdc;\\n}\\n\\n.ace-crimson-editor .ace_meta.ace_tag {\\n  color:rgb(28, 2, 255);\\n}\\n\\n.ace-crimson-editor .ace_marker-layer .ace_selected-word {\\n  background: rgb(250, 250, 255);\\n  border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-crimson-editor .ace_string.ace_regex {\\n  color: rgb(192, 0, 192);\\n}\\n\\n.ace-crimson-editor .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-crimson-editor .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n} \\n\";\n\n});\n\nace.define(\"ace/theme/crimson_editor\",[\"require\",\"exports\",\"module\",\"ace/theme/crimson_editor.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssText = require(\"./crimson_editor.css\");\nexports.cssClass = \"ace-crimson-editor\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/crimson_editor\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-dawn.js",
    "content": "ace.define(\"ace/theme/dawn.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-dawn .ace_gutter {\\n  background: #ebebeb;\\n  color: #333\\n}\\n\\n.ace-dawn .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8\\n}\\n\\n.ace-dawn {\\n  background-color: #F9F9F9;\\n  color: #080808\\n}\\n\\n.ace-dawn .ace_cursor {\\n  color: #000000\\n}\\n\\n.ace-dawn .ace_marker-layer .ace_selection {\\n  background: rgba(39, 95, 255, 0.30)\\n}\\n\\n.ace-dawn.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #F9F9F9;\\n}\\n\\n.ace-dawn .ace_marker-layer .ace_step {\\n  background: rgb(255, 255, 0)\\n}\\n\\n.ace-dawn .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(75, 75, 126, 0.50)\\n}\\n\\n.ace-dawn .ace_marker-layer .ace_active-line {\\n  background: rgba(36, 99, 180, 0.12)\\n}\\n\\n.ace-dawn .ace_gutter-active-line {\\n  background-color : #dcdcdc\\n}\\n\\n.ace-dawn .ace_marker-layer .ace_selected-word {\\n  border: 1px solid rgba(39, 95, 255, 0.30)\\n}\\n\\n.ace-dawn .ace_invisible {\\n  color: rgba(75, 75, 126, 0.50)\\n}\\n\\n.ace-dawn .ace_keyword,\\n.ace-dawn .ace_meta {\\n  color: #794938\\n}\\n\\n.ace-dawn .ace_constant,\\n.ace-dawn .ace_constant.ace_character,\\n.ace-dawn .ace_constant.ace_character.ace_escape,\\n.ace-dawn .ace_constant.ace_other {\\n  color: #811F24\\n}\\n\\n.ace-dawn .ace_invalid.ace_illegal {\\n  text-decoration: underline;\\n  font-style: italic;\\n  color: #F8F8F8;\\n  background-color: #B52A1D\\n}\\n\\n.ace-dawn .ace_invalid.ace_deprecated {\\n  text-decoration: underline;\\n  font-style: italic;\\n  color: #B52A1D\\n}\\n\\n.ace-dawn .ace_support {\\n  color: #691C97\\n}\\n\\n.ace-dawn .ace_support.ace_constant {\\n  color: #B4371F\\n}\\n\\n.ace-dawn .ace_fold {\\n  background-color: #794938;\\n  border-color: #080808\\n}\\n\\n.ace-dawn .ace_list,\\n.ace-dawn .ace_markup.ace_list,\\n.ace-dawn .ace_support.ace_function {\\n  color: #693A17\\n}\\n\\n.ace-dawn .ace_storage {\\n  font-style: italic;\\n  color: #A71D5D\\n}\\n\\n.ace-dawn .ace_string {\\n  color: #0B6125\\n}\\n\\n.ace-dawn .ace_string.ace_regexp {\\n  color: #CF5628\\n}\\n\\n.ace-dawn .ace_comment {\\n  font-style: italic;\\n  color: #5A525F\\n}\\n\\n.ace-dawn .ace_heading,\\n.ace-dawn .ace_markup.ace_heading {\\n  color: #19356D\\n}\\n\\n.ace-dawn .ace_variable {\\n  color: #234A97\\n}\\n\\n.ace-dawn .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-dawn .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n} \\n\";\n\n});\n\nace.define(\"ace/theme/dawn\",[\"require\",\"exports\",\"module\",\"ace/theme/dawn.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-dawn\";\nexports.cssText = require(\"./dawn.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/dawn\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-dracula.js",
    "content": "ace.define(\"ace/theme/dracula.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"/*\\n * Copyright \\u00A9 2017 Zeno Rocha <hi@zenorocha.com>\\n *\\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \\u201CSoftware\\u201D), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n *\\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n *\\n * THE SOFTWARE IS PROVIDED \\u201CAS IS\\u201D, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n */\\n\\n.ace-dracula .ace_gutter {\\n  background: #282a36;\\n  color: rgb(144,145,148)\\n}\\n\\n.ace-dracula .ace_print-margin {\\n  width: 1px;\\n  background: #44475a\\n}\\n\\n.ace-dracula {\\n  background-color: #282a36;\\n  color: #f8f8f2\\n}\\n\\n.ace-dracula .ace_cursor {\\n  color: #f8f8f0\\n}\\n\\n.ace-dracula .ace_marker-layer .ace_selection {\\n  background: #44475a\\n}\\n\\n.ace-dracula.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #282a36;\\n  border-radius: 2px\\n}\\n\\n.ace-dracula .ace_marker-layer .ace_step {\\n  background: rgb(198, 219, 174)\\n}\\n\\n.ace-dracula .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #a29709\\n}\\n\\n.ace-dracula .ace_marker-layer .ace_active-line {\\n  background: #44475a\\n}\\n\\n.ace-dracula .ace_gutter-active-line {\\n  background-color: #44475a\\n}\\n\\n.ace-dracula .ace_marker-layer .ace_selected-word {\\n  box-shadow: 0px 0px 0px 1px #a29709;\\n  border-radius: 3px;\\n}\\n\\n.ace-dracula .ace_fold {\\n  background-color: #50fa7b;\\n  border-color: #f8f8f2\\n}\\n\\n.ace-dracula .ace_keyword {\\n  color: #ff79c6\\n}\\n\\n.ace-dracula .ace_constant.ace_language {\\n  color: #bd93f9\\n}\\n\\n.ace-dracula .ace_constant.ace_numeric {\\n  color: #bd93f9\\n}\\n\\n.ace-dracula .ace_constant.ace_character {\\n  color: #bd93f9\\n}\\n\\n.ace-dracula .ace_constant.ace_character.ace_escape {\\n  color: #ff79c6\\n}\\n\\n.ace-dracula .ace_constant.ace_other {\\n  color: #bd93f9\\n}\\n\\n.ace-dracula .ace_support.ace_function {\\n  color: #8be9fd\\n}\\n\\n.ace-dracula .ace_support.ace_constant {\\n  color: #6be5fd\\n}\\n\\n.ace-dracula .ace_support.ace_class {\\n  font-style: italic;\\n  color: #66d9ef\\n}\\n\\n.ace-dracula .ace_support.ace_type {\\n  font-style: italic;\\n  color: #66d9ef\\n}\\n\\n.ace-dracula .ace_storage {\\n  color: #ff79c6\\n}\\n\\n.ace-dracula .ace_storage.ace_type {\\n  font-style: italic;\\n  color: #8be9fd\\n}\\n\\n.ace-dracula .ace_invalid {\\n  color: #F8F8F0;\\n  background-color: #ff79c6\\n}\\n\\n.ace-dracula .ace_invalid.ace_deprecated {\\n  color: #F8F8F0;\\n  background-color: #bd93f9\\n}\\n\\n.ace-dracula .ace_string {\\n  color: #f1fa8c\\n}\\n\\n.ace-dracula .ace_comment {\\n  color: #6272a4\\n}\\n\\n.ace-dracula .ace_variable {\\n  color: #50fa7b\\n}\\n\\n.ace-dracula .ace_variable.ace_parameter {\\n  font-style: italic;\\n  color: #ffb86c\\n}\\n\\n.ace-dracula .ace_entity.ace_other.ace_attribute-name {\\n  color: #50fa7b\\n}\\n\\n.ace-dracula .ace_entity.ace_name.ace_function {\\n  color: #50fa7b\\n}\\n\\n.ace-dracula .ace_entity.ace_name.ace_tag {\\n  color: #ff79c6\\n}\\n.ace-dracula .ace_invisible {\\n  color: #626680;\\n}\\n\\n.ace-dracula .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-dracula .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACAQMAAACjTyRkAAAABlBMVEUAAADCwsK76u2xAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjYGBoAAAAhACBGFbxzQAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/dracula\",[\"require\",\"exports\",\"module\",\"ace/theme/dracula.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-dracula\";\nexports.cssText = require(\"./dracula.css\");\nexports.$selectionColorConflict = true;\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/dracula\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-dreamweaver.js",
    "content": "ace.define(\"ace/theme/dreamweaver.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-dreamweaver .ace_gutter {\\n  background: #e8e8e8;\\n  color: #333;\\n}\\n\\n.ace-dreamweaver .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8;\\n}\\n\\n.ace-dreamweaver {\\n  background-color: #FFFFFF;\\n  color: black;\\n}\\n\\n.ace-dreamweaver .ace_fold {\\n    background-color: #757AD8;\\n}\\n\\n.ace-dreamweaver .ace_cursor {\\n  color: black;\\n}\\n        \\n.ace-dreamweaver .ace_invisible {\\n  color: rgb(191, 191, 191);\\n}\\n\\n.ace-dreamweaver .ace_storage,\\n.ace-dreamweaver .ace_keyword {\\n  color: blue;\\n}\\n\\n.ace-dreamweaver .ace_constant.ace_buildin {\\n  color: rgb(88, 72, 246);\\n}\\n\\n.ace-dreamweaver .ace_constant.ace_language {\\n  color: rgb(88, 92, 246);\\n}\\n\\n.ace-dreamweaver .ace_constant.ace_library {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-dreamweaver .ace_invalid {\\n  background-color: rgb(153, 0, 0);\\n  color: white;\\n}\\n\\n.ace-dreamweaver .ace_support.ace_function {\\n  color: rgb(60, 76, 114);\\n}\\n\\n.ace-dreamweaver .ace_support.ace_constant {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-dreamweaver .ace_support.ace_type,\\n.ace-dreamweaver .ace_support.ace_class {\\n  color: #009;\\n}\\n\\n.ace-dreamweaver .ace_support.ace_php_tag {\\n  color: #f00;\\n}\\n\\n.ace-dreamweaver .ace_keyword.ace_operator {\\n  color: rgb(104, 118, 135);\\n}\\n\\n.ace-dreamweaver .ace_string {\\n  color: #00F;\\n}\\n\\n.ace-dreamweaver .ace_comment {\\n  color: rgb(76, 136, 107);\\n}\\n\\n.ace-dreamweaver .ace_comment.ace_doc {\\n  color: rgb(0, 102, 255);\\n}\\n\\n.ace-dreamweaver .ace_comment.ace_doc.ace_tag {\\n  color: rgb(128, 159, 191);\\n}\\n\\n.ace-dreamweaver .ace_constant.ace_numeric {\\n  color: rgb(0, 0, 205);\\n}\\n\\n.ace-dreamweaver .ace_variable {\\n  color: #06F\\n}\\n\\n.ace-dreamweaver .ace_xml-pe {\\n  color: rgb(104, 104, 91);\\n}\\n\\n.ace-dreamweaver .ace_entity.ace_name.ace_function {\\n  color: #00F;\\n}\\n\\n\\n.ace-dreamweaver .ace_heading {\\n  color: rgb(12, 7, 255);\\n}\\n\\n.ace-dreamweaver .ace_list {\\n  color:rgb(185, 6, 144);\\n}\\n\\n.ace-dreamweaver .ace_marker-layer .ace_selection {\\n  background: rgb(181, 213, 255);\\n}\\n\\n.ace-dreamweaver .ace_marker-layer .ace_step {\\n  background: rgb(252, 255, 0);\\n}\\n\\n.ace-dreamweaver .ace_marker-layer .ace_stack {\\n  background: rgb(164, 229, 101);\\n}\\n\\n.ace-dreamweaver .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-dreamweaver .ace_marker-layer .ace_active-line {\\n  background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-dreamweaver .ace_gutter-active-line {\\n  background-color : #DCDCDC;\\n}\\n\\n.ace-dreamweaver .ace_marker-layer .ace_selected-word {\\n  background: rgb(250, 250, 255);\\n  border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-dreamweaver .ace_meta.ace_tag {\\n  color:#009;\\n}\\n\\n.ace-dreamweaver .ace_meta.ace_tag.ace_anchor {\\n  color:#060;\\n}\\n\\n.ace-dreamweaver .ace_meta.ace_tag.ace_form {\\n  color:#F90;\\n}\\n\\n.ace-dreamweaver .ace_meta.ace_tag.ace_image {\\n  color:#909;\\n}\\n\\n.ace-dreamweaver .ace_meta.ace_tag.ace_script {\\n  color:#900;\\n}\\n\\n.ace-dreamweaver .ace_meta.ace_tag.ace_style {\\n  color:#909;\\n}\\n\\n.ace-dreamweaver .ace_meta.ace_tag.ace_table {\\n  color:#099;\\n}\\n\\n.ace-dreamweaver .ace_string.ace_regex {\\n  color: rgb(255, 0, 0)\\n}\\n\\n.ace-dreamweaver .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-dreamweaver .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n} \\n\";\n\n});\n\nace.define(\"ace/theme/dreamweaver\",[\"require\",\"exports\",\"module\",\"ace/theme/dreamweaver.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-dreamweaver\";\nexports.cssText = require(\"./dreamweaver.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/dreamweaver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-eclipse.js",
    "content": "ace.define(\"ace/theme/eclipse.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-eclipse .ace_gutter {\\n  background: #ebebeb;\\n  border-right: 1px solid rgb(159, 159, 159);\\n  color: rgb(136, 136, 136);\\n}\\n\\n.ace-eclipse .ace_print-margin {\\n  width: 1px;\\n  background: #ebebeb;\\n}\\n\\n.ace-eclipse {\\n  background-color: #FFFFFF;\\n  color: black;\\n}\\n\\n.ace-eclipse .ace_fold {\\n    background-color: rgb(60, 76, 114);\\n}\\n\\n.ace-eclipse .ace_cursor {\\n  color: black;\\n}\\n\\n.ace-eclipse .ace_storage,\\n.ace-eclipse .ace_keyword,\\n.ace-eclipse .ace_variable {\\n  color: rgb(127, 0, 85);\\n}\\n\\n.ace-eclipse .ace_constant.ace_buildin {\\n  color: rgb(88, 72, 246);\\n}\\n\\n.ace-eclipse .ace_constant.ace_library {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-eclipse .ace_function {\\n  color: rgb(60, 76, 114);\\n}\\n\\n.ace-eclipse .ace_string {\\n  color: rgb(42, 0, 255);\\n}\\n\\n.ace-eclipse .ace_comment {\\n  color: rgb(113, 150, 130);\\n}\\n\\n.ace-eclipse .ace_comment.ace_doc {\\n  color: rgb(63, 95, 191);\\n}\\n\\n.ace-eclipse .ace_comment.ace_doc.ace_tag {\\n  color: rgb(127, 159, 191);\\n}\\n\\n.ace-eclipse .ace_constant.ace_numeric {\\n  color: darkblue;\\n}\\n\\n.ace-eclipse .ace_tag {\\n  color: rgb(25, 118, 116);\\n}\\n\\n.ace-eclipse .ace_type {\\n  color: rgb(127, 0, 127);\\n}\\n\\n.ace-eclipse .ace_xml-pe {\\n  color: rgb(104, 104, 91);\\n}\\n\\n.ace-eclipse .ace_marker-layer .ace_selection {\\n  background: rgb(181, 213, 255);\\n}\\n\\n.ace-eclipse .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-eclipse .ace_meta.ace_tag {\\n  color:rgb(25, 118, 116);\\n}\\n\\n.ace-eclipse .ace_invisible {\\n  color: #ddd;\\n}\\n\\n.ace-eclipse .ace_entity.ace_other.ace_attribute-name {\\n  color:rgb(127, 0, 127);\\n}\\n.ace-eclipse .ace_marker-layer .ace_step {\\n  background: rgb(255, 255, 0);\\n}\\n\\n.ace-eclipse .ace_active-line {\\n  background: rgb(232, 242, 254);\\n}\\n\\n.ace-eclipse .ace_gutter-active-line {\\n  background-color : #DADADA;\\n}\\n\\n.ace-eclipse .ace_marker-layer .ace_selected-word {\\n  border: 1px solid rgb(181, 213, 255);\\n}\\n\\n.ace-eclipse .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-eclipse .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n} \\n\";\n\n});\n\nace.define(\"ace/theme/eclipse\",[\"require\",\"exports\",\"module\",\"ace/theme/eclipse.css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssText = require(\"./eclipse.css\");\nexports.cssClass = \"ace-eclipse\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/eclipse\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-github.js",
    "content": "ace.define(\"ace/theme/github.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"/* CSS style content from github's default pygments highlighter template.\\n   Cursor and selection styles from textmate.css. */\\n.ace-github .ace_gutter {\\n  background: #e8e8e8;\\n  color: #AAA;\\n}\\n\\n.ace-github  {\\n  background: #fff;\\n  color: #000;\\n}\\n\\n.ace-github .ace_keyword {\\n  font-weight: bold;\\n}\\n\\n.ace-github .ace_string {\\n  color: #D14;\\n}\\n\\n.ace-github .ace_variable.ace_class {\\n  color: teal;\\n}\\n\\n.ace-github .ace_constant.ace_numeric {\\n  color: #099;\\n}\\n\\n.ace-github .ace_constant.ace_buildin {\\n  color: #0086B3;\\n}\\n\\n.ace-github .ace_support.ace_function {\\n  color: #0086B3;\\n}\\n\\n.ace-github .ace_comment {\\n  color: #998;\\n  font-style: italic;\\n}\\n\\n.ace-github .ace_variable.ace_language  {\\n  color: #0086B3;\\n}\\n\\n.ace-github .ace_paren {\\n  font-weight: bold;\\n}\\n\\n.ace-github .ace_boolean {\\n  font-weight: bold;\\n}\\n\\n.ace-github .ace_string.ace_regexp {\\n  color: #009926;\\n  font-weight: normal;\\n}\\n\\n.ace-github .ace_variable.ace_instance {\\n  color: teal;\\n}\\n\\n.ace-github .ace_constant.ace_language {\\n  font-weight: bold;\\n}\\n\\n.ace-github .ace_cursor {\\n  color: black;\\n}\\n\\n.ace-github.ace_focus .ace_marker-layer .ace_active-line {\\n  background: rgb(255, 255, 204);\\n}\\n.ace-github .ace_marker-layer .ace_active-line {\\n  background: rgb(245, 245, 245);\\n}\\n\\n.ace-github .ace_marker-layer .ace_selection {\\n  background: rgb(181, 213, 255);\\n}\\n\\n.ace-github.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px white;\\n}\\n/* bold keywords cause cursor issues for some fonts */\\n/* this disables bold style for editor and keeps for static highlighter */\\n.ace-github.ace_nobold .ace_line > span {\\n    font-weight: normal !important;\\n}\\n\\n.ace-github .ace_marker-layer .ace_step {\\n  background: rgb(252, 255, 0);\\n}\\n\\n.ace-github .ace_marker-layer .ace_stack {\\n  background: rgb(164, 229, 101);\\n}\\n\\n.ace-github .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-github .ace_gutter-active-line {\\n    background-color : rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-github .ace_marker-layer .ace_selected-word {\\n  background: rgb(250, 250, 255);\\n  border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-github .ace_invisible {\\n  color: #BFBFBF\\n}\\n\\n.ace-github .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8;\\n}\\n\\n.ace-github .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-github .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/github\",[\"require\",\"exports\",\"module\",\"ace/theme/github.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-github\";\nexports.cssText = require(\"./github.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/github\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-gob.js",
    "content": "ace.define(\"ace/theme/gob.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-gob .ace_gutter {\\n  background: #0B1818;\\n  color: #03EE03\\n}\\n\\n.ace-gob .ace_print-margin {\\n  width: 1px;\\n  background: #131313\\n}\\n\\n.ace-gob {\\n  background-color: #0B0B0B;\\n  color: #00FF00\\n}\\n\\n.ace-gob .ace_cursor {\\n  border-color: rgba(16, 248, 255, 0.90);\\n  background-color: rgba(16, 240, 248, 0.70);\\n  opacity: 0.4;\\n}\\n\\n.ace-gob .ace_marker-layer .ace_selection {\\n  background: rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-gob.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #141414;\\n}\\n\\n.ace-gob .ace_marker-layer .ace_step {\\n  background: rgb(16, 128, 0)\\n}\\n\\n.ace-gob .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(64, 255, 255, 0.25)\\n}\\n\\n.ace-gob .ace_marker-layer .ace_active-line {\\n  background: rgba(255, 255, 255, 0.04)\\n}\\n\\n.ace-gob .ace_gutter-active-line {\\n  background-color: rgba(255, 255, 255, 0.04)\\n}\\n\\n.ace-gob .ace_marker-layer .ace_selected-word {\\n  border: 1px solid rgba(192, 240, 255, 0.20)\\n}\\n\\n.ace-gob .ace_invisible {\\n  color: rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-gob .ace_keyword,\\n.ace-gob .ace_meta {\\n  color: #10D8E8\\n}\\n\\n.ace-gob .ace_constant,\\n.ace-gob .ace_constant.ace_character,\\n.ace-gob .ace_constant.ace_character.ace_escape,\\n.ace-gob .ace_constant.ace_other,\\n.ace-gob .ace_heading,\\n.ace-gob .ace_markup.ace_heading,\\n.ace-gob .ace_support.ace_constant {\\n  color: #10F0A0\\n}\\n\\n.ace-gob .ace_invalid.ace_illegal {\\n  color: #F8F8F8;\\n  background-color: rgba(86, 45, 86, 0.75)\\n}\\n\\n.ace-gob .ace_invalid.ace_deprecated {\\n  text-decoration: underline;\\n  font-style: italic;\\n  color: #20F8C0\\n}\\n\\n.ace-gob .ace_support {\\n  color: #20E8B0\\n}\\n\\n.ace-gob .ace_fold {\\n  background-color: #50B8B8;\\n  border-color: #70F8F8\\n}\\n\\n.ace-gob .ace_support.ace_function {\\n  color: #00F800\\n}\\n\\n.ace-gob .ace_list,\\n.ace-gob .ace_markup.ace_list,\\n.ace-gob .ace_storage {\\n  color: #10FF98\\n}\\n\\n.ace-gob .ace_entity.ace_name.ace_function,\\n.ace-gob .ace_meta.ace_tag,\\n.ace-gob .ace_variable {\\n  color: #00F868\\n}\\n\\n.ace-gob .ace_string {\\n  color: #10F060\\n}\\n\\n.ace-gob .ace_string.ace_regexp {\\n  color: #20F090;\\n}\\n\\n.ace-gob .ace_comment {\\n  font-style: italic;\\n  color: #00E060;\\n}\\n\\n.ace-gob .ace_variable {\\n  color: #00F888;\\n}\\n\\n.ace-gob .ace_xml-pe {\\n  color: #488858;\\n}\\n\\n.ace-gob .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-gob .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/gob\",[\"require\",\"exports\",\"module\",\"ace/theme/gob.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-gob\";\nexports.cssText = require(\"./gob.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/gob\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-gruvbox.js",
    "content": "ace.define(\"ace/theme/gruvbox.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-gruvbox .ace_gutter-active-line {\\n  background-color: #3C3836;\\n}\\n\\n.ace-gruvbox {\\n  color: #EBDAB4;\\n  background-color: #1D2021;\\n}\\n\\n.ace-gruvbox .ace_invisible {\\n  color: #504945;\\n}\\n\\n.ace-gruvbox .ace_marker-layer .ace_selection {\\n  background: rgba(179, 101, 57, 0.75)\\n}\\n\\n.ace-gruvbox.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #002240;\\n}\\n\\n.ace-gruvbox .ace_keyword {\\n  color: #8ec07c;\\n}\\n\\n.ace-gruvbox .ace_comment {\\n  font-style: italic;\\n  color: #928375;\\n}\\n\\n.ace-gruvbox .ace-statement {\\n  color: red;\\n}\\n\\n.ace-gruvbox .ace_variable {\\n  color: #84A598;\\n}\\n\\n.ace-gruvbox .ace_variable.ace_language {\\n  color: #D2879B;\\n}\\n\\n.ace-gruvbox .ace_constant {\\n  color: #C2859A;\\n}\\n\\n.ace-gruvbox .ace_constant.ace_language {\\n  color: #C2859A;\\n}\\n\\n.ace-gruvbox .ace_constant.ace_numeric {\\n  color: #C2859A;\\n}\\n\\n.ace-gruvbox .ace_string {\\n  color: #B8BA37;\\n}\\n\\n.ace-gruvbox .ace_support {\\n  color: #F9BC41;\\n}\\n\\n.ace-gruvbox .ace_support.ace_function {\\n  color: #F84B3C;\\n}\\n\\n.ace-gruvbox .ace_storage {\\n  color: #8FBF7F;\\n}\\n\\n.ace-gruvbox .ace_keyword.ace_operator {\\n  color: #EBDAB4;\\n}\\n\\n.ace-gruvbox .ace_punctuation.ace_operator {\\n  color: yellow;\\n}\\n\\n.ace-gruvbox .ace_marker-layer .ace_active-line {\\n  background: #3C3836;\\n}\\n\\n.ace-gruvbox .ace_marker-layer .ace_selected-word {\\n  border-radius: 4px;\\n  border: 8px solid #3f475d;\\n}\\n\\n.ace-gruvbox .ace_print-margin {\\n  width: 5px;\\n  background: #3C3836;\\n}\\n\\n.ace-gruvbox .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\\n.ace-gruvbox .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/gruvbox\",[\"require\",\"exports\",\"module\",\"ace/theme/gruvbox.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-gruvbox\";\nexports.cssText = require(\"./gruvbox.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/gruvbox\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-gruvbox_dark_hard.js",
    "content": "ace.define(\"ace/theme/gruvbox_dark_hard.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-gruvbox-dark-hard .ace_gutter {\\n  background: #1d2021;\\n  color: rgb(132,126,106)\\n}\\n\\n.ace-gruvbox-dark-hard .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8\\n}\\n\\n.ace-gruvbox-dark-hard {\\n  background-color: #1d2021;\\n  color: rgba(235, 219, 178, 0.50)\\n}\\n\\n.ace-gruvbox-dark-hard .ace_cursor {\\n  color: #a89984\\n}\\n\\n.ace-gruvbox-dark-hard .ace_marker-layer .ace_selection {\\n  background: #3c3836\\n}\\n\\n.ace-gruvbox-dark-hard.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #1d2021;\\n  border-radius: 2px\\n}\\n\\n.ace-gruvbox-dark-hard .ace_marker-layer .ace_step {\\n  background: rgb(198, 219, 174)\\n}\\n\\n.ace-gruvbox-dark-hard .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(235, 219, 178, 0.15)\\n}\\n\\n.ace-gruvbox-dark-hard .ace_marker-layer .ace_active-line {\\n  background: #3c3836\\n}\\n\\n.ace-gruvbox-dark-hard .ace_gutter-active-line {\\n  background-color: #3c3836\\n}\\n\\n.ace-gruvbox-dark-hard .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #3c3836\\n}\\n\\n.ace-gruvbox-dark-hard .ace_fold {\\n  background-color: #b8bb26;\\n  border-color: rgba(235, 219, 178, 0.50)\\n}\\n\\n.ace-gruvbox-dark-hard .ace_keyword {\\n  color: #fb4934\\n}\\n\\n.ace-gruvbox-dark-hard .ace_keyword.ace_operator {\\n  color: #8ec07c\\n}\\n\\n.ace-gruvbox-dark-hard .ace_keyword.ace_other.ace_unit {\\n  color: #b16286\\n}\\n\\n.ace-gruvbox-dark-hard .ace_constant {\\n  color: #d3869b\\n}\\n\\n.ace-gruvbox-dark-hard .ace_constant.ace_numeric {\\n  color: #d3869b\\n}\\n\\n.ace-gruvbox-dark-hard .ace_constant.ace_character.ace_escape {\\n  color: #fb4934\\n}\\n\\n.ace-gruvbox-dark-hard .ace_constant.ace_other {\\n  color: #d3869b\\n}\\n\\n.ace-gruvbox-dark-hard .ace_support.ace_function {\\n  color: #8ec07c\\n}\\n\\n.ace-gruvbox-dark-hard .ace_support.ace_constant {\\n  color: #d3869b\\n}\\n\\n.ace-gruvbox-dark-hard .ace_support.ace_constant.ace_property-value {\\n  color: #f9f5d7\\n}\\n\\n.ace-gruvbox-dark-hard .ace_support.ace_class {\\n  color: #fabd2f\\n}\\n\\n.ace-gruvbox-dark-hard .ace_support.ace_type {\\n  color: #fabd2f\\n}\\n\\n.ace-gruvbox-dark-hard .ace_storage {\\n  color: #fb4934\\n}\\n\\n.ace-gruvbox-dark-hard .ace_invalid {\\n  color: #f9f5d7;\\n  background-color: #fb4934\\n}\\n\\n.ace-gruvbox-dark-hard .ace_string {\\n  color: #b8bb26\\n}\\n\\n.ace-gruvbox-dark-hard .ace_string.ace_regexp {\\n  color: #b8bb26\\n}\\n\\n.ace-gruvbox-dark-hard .ace_comment {\\n  font-style: italic;\\n  color: #928374\\n}\\n\\n.ace-gruvbox-dark-hard .ace_variable {\\n  color: #83a598\\n}\\n\\n.ace-gruvbox-dark-hard .ace_variable.ace_language {\\n  color: #d3869b\\n}\\n\\n.ace-gruvbox-dark-hard .ace_variable.ace_parameter {\\n  color: #f9f5d7\\n}\\n\\n.ace-gruvbox-dark-hard .ace_meta.ace_tag {\\n  color: #f9f5d7\\n}\\n\\n.ace-gruvbox-dark-hard .ace_entity.ace_other.ace_attribute-name {\\n  color: #fabd2f\\n}\\n\\n.ace-gruvbox-dark-hard .ace_entity.ace_name.ace_function {\\n  color: #b8bb26\\n}\\n\\n.ace-gruvbox-dark-hard .ace_entity.ace_name.ace_tag {\\n  color: #83a598\\n}\\n\\n.ace-gruvbox-dark-hard .ace_markup.ace_heading {\\n  color: #b8bb26\\n}\\n\\n.ace-gruvbox-dark-hard .ace_markup.ace_list {\\n  color: #83a598\\n}\\n\\n.ace-gruvbox-dark-hard .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/gruvbox_dark_hard\",[\"require\",\"exports\",\"module\",\"ace/theme/gruvbox_dark_hard.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-gruvbox-dark-hard\";\nexports.cssText = require(\"./gruvbox_dark_hard.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});                (function() {\n                    ace.require([\"ace/theme/gruvbox_dark_hard\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-gruvbox_light_hard.js",
    "content": "ace.define(\"ace/theme/gruvbox_light_hard.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-gruvbox-light-hard .ace_gutter {\\n  background: #f9f5d7;\\n  color: rgb(155,151,135)\\n}\\n\\n.ace-gruvbox-light-hard .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8\\n}\\n\\n.ace-gruvbox-light-hard {\\n  background-color: #f9f5d7;\\n  color: rgba(60, 56, 54, 0.50)\\n}\\n\\n.ace-gruvbox-light-hard .ace_cursor {\\n  color: #7c6f64\\n}\\n\\n.ace-gruvbox-light-hard .ace_marker-layer .ace_selection {\\n  background: #ebdbb2\\n}\\n\\n.ace-gruvbox-light-hard.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #f9f5d7;\\n  border-radius: 2px\\n}\\n\\n.ace-gruvbox-light-hard .ace_marker-layer .ace_step {\\n  background: rgb(198, 219, 174)\\n}\\n\\n.ace-gruvbox-light-hard .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(60, 56, 54, 0.15)\\n}\\n\\n.ace-gruvbox-light-hard .ace_marker-layer .ace_active-line {\\n  background: #ebdbb2\\n}\\n\\n.ace-gruvbox-light-hard .ace_gutter-active-line {\\n  background-color: #ebdbb2\\n}\\n\\n.ace-gruvbox-light-hard .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #ebdbb2\\n}\\n\\n.ace-gruvbox-light-hard .ace_fold {\\n  background-color: #79740e;\\n  border-color: rgba(60, 56, 54, 0.50)\\n}\\n\\n.ace-gruvbox-light-hard .ace_keyword {\\n  color: #9d0006\\n}\\n\\n.ace-gruvbox-light-hard .ace_keyword.ace_operator {\\n  color: #427b58\\n}\\n\\n.ace-gruvbox-light-hard .ace_keyword.ace_other.ace_unit {\\n  color: #b16286\\n}\\n\\n.ace-gruvbox-light-hard .ace_constant {\\n  color: #8f3f71\\n}\\n\\n.ace-gruvbox-light-hard .ace_constant.ace_numeric {\\n  color: #8f3f71\\n}\\n\\n.ace-gruvbox-light-hard .ace_constant.ace_character.ace_escape {\\n  color: #9d0006\\n}\\n\\n.ace-gruvbox-light-hard .ace_constant.ace_other {\\n  color: #8f3f71\\n}\\n\\n.ace-gruvbox-light-hard .ace_support.ace_function {\\n  color: #427b58\\n}\\n\\n.ace-gruvbox-light-hard .ace_support.ace_constant {\\n  color: #8f3f71\\n}\\n\\n.ace-gruvbox-light-hard .ace_support.ace_constant.ace_property-value {\\n  color: #1d2021\\n}\\n\\n.ace-gruvbox-light-hard .ace_support.ace_class {\\n  color: #b57614\\n}\\n\\n.ace-gruvbox-light-hard .ace_support.ace_type {\\n  color: #b57614\\n}\\n\\n.ace-gruvbox-light-hard .ace_storage {\\n  color: #9d0006\\n}\\n\\n.ace-gruvbox-light-hard .ace_invalid {\\n  color: #1d2021;\\n  background-color: #9d0006\\n}\\n\\n.ace-gruvbox-light-hard .ace_string {\\n  color: #79740e\\n}\\n\\n.ace-gruvbox-light-hard .ace_string.ace_regexp {\\n  color: #79740e\\n}\\n\\n.ace-gruvbox-light-hard .ace_comment {\\n  font-style: italic;\\n  color: #928374\\n}\\n\\n.ace-gruvbox-light-hard .ace_variable {\\n  color: #076678\\n}\\n\\n.ace-gruvbox-light-hard .ace_variable.ace_language {\\n  color: #8f3f71\\n}\\n\\n.ace-gruvbox-light-hard .ace_variable.ace_parameter {\\n  color: #1d2021\\n}\\n\\n.ace-gruvbox-light-hard .ace_meta.ace_tag {\\n  color: #1d2021\\n}\\n\\n.ace-gruvbox-light-hard .ace_entity.ace_other.ace_attribute-name {\\n  color: #b57614\\n}\\n\\n.ace-gruvbox-light-hard .ace_entity.ace_name.ace_function {\\n  color: #79740e\\n}\\n\\n.ace-gruvbox-light-hard .ace_entity.ace_name.ace_tag {\\n  color: #076678\\n}\\n\\n.ace-gruvbox-light-hard .ace_markup.ace_heading {\\n  color: #79740e\\n}\\n\\n.ace-gruvbox-light-hard .ace_markup.ace_list {\\n  color: #076678\\n}\\n\\n.ace-gruvbox-light-hard .ace_indent-guide {\\n    background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-gruvbox-light-hard .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n} \\n\";\n\n});\n\nace.define(\"ace/theme/gruvbox_light_hard\",[\"require\",\"exports\",\"module\",\"ace/theme/gruvbox_light_hard.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-gruvbox-light-hard\";\nexports.cssText = require(\"./gruvbox_light_hard.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});                (function() {\n                    ace.require([\"ace/theme/gruvbox_light_hard\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-idle_fingers.js",
    "content": "ace.define(\"ace/theme/idle_fingers.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-idle-fingers .ace_gutter {\\n  background: #3b3b3b;\\n  color: rgb(153,153,153)\\n}\\n\\n.ace-idle-fingers .ace_print-margin {\\n  width: 1px;\\n  background: #3b3b3b\\n}\\n\\n.ace-idle-fingers {\\n  background-color: #323232;\\n  color: #FFFFFF\\n}\\n\\n.ace-idle-fingers .ace_cursor {\\n  color: #91FF00\\n}\\n\\n.ace-idle-fingers .ace_marker-layer .ace_selection {\\n  background: rgba(90, 100, 126, 0.88)\\n}\\n\\n.ace-idle-fingers.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #323232;\\n}\\n\\n.ace-idle-fingers .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-idle-fingers .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #404040\\n}\\n\\n.ace-idle-fingers .ace_marker-layer .ace_active-line {\\n  background: #353637\\n}\\n\\n.ace-idle-fingers .ace_gutter-active-line {\\n  background-color: #353637\\n}\\n\\n.ace-idle-fingers .ace_marker-layer .ace_selected-word {\\n  border: 1px solid rgba(90, 100, 126, 0.88)\\n}\\n\\n.ace-idle-fingers .ace_invisible {\\n  color: #404040\\n}\\n\\n.ace-idle-fingers .ace_keyword,\\n.ace-idle-fingers .ace_meta {\\n  color: #CC7833\\n}\\n\\n.ace-idle-fingers .ace_constant,\\n.ace-idle-fingers .ace_constant.ace_character,\\n.ace-idle-fingers .ace_constant.ace_character.ace_escape,\\n.ace-idle-fingers .ace_constant.ace_other,\\n.ace-idle-fingers .ace_support.ace_constant {\\n  color: #6C99BB\\n}\\n\\n.ace-idle-fingers .ace_invalid {\\n  color: #FFFFFF;\\n  background-color: #FF0000\\n}\\n\\n.ace-idle-fingers .ace_fold {\\n  background-color: #CC7833;\\n  border-color: #FFFFFF\\n}\\n\\n.ace-idle-fingers .ace_support.ace_function {\\n  color: #B83426\\n}\\n\\n.ace-idle-fingers .ace_variable.ace_parameter {\\n  font-style: italic\\n}\\n\\n.ace-idle-fingers .ace_string {\\n  color: #A5C261\\n}\\n\\n.ace-idle-fingers .ace_string.ace_regexp {\\n  color: #CCCC33\\n}\\n\\n.ace-idle-fingers .ace_comment {\\n  font-style: italic;\\n  color: #BC9458\\n}\\n\\n.ace-idle-fingers .ace_meta.ace_tag {\\n  color: #FFE5BB\\n}\\n\\n.ace-idle-fingers .ace_entity.ace_name {\\n  color: #FFC66D\\n}\\n\\n.ace-idle-fingers .ace_collab.ace_user1 {\\n  color: #323232;\\n  background-color: #FFF980\\n}\\n\\n.ace-idle-fingers .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMwMjLyZYiPj/8PAAreAwAI1+g0AAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-idle-fingers .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/idle_fingers\",[\"require\",\"exports\",\"module\",\"ace/theme/idle_fingers.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-idle-fingers\";\nexports.cssText = require(\"./idle_fingers.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/idle_fingers\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-iplastic.js",
    "content": "ace.define(\"ace/theme/iplastic.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-iplastic .ace_gutter {\\n  background: #dddddd;\\n  color: #666666\\n}\\n\\n.ace-iplastic .ace_print-margin {\\n  width: 1px;\\n  background: #bbbbbb\\n}\\n\\n.ace-iplastic {\\n  background-color: #eeeeee;\\n  color: #333333\\n}\\n\\n.ace-iplastic .ace_cursor {\\n  color: #333\\n}\\n\\n.ace-iplastic .ace_marker-layer .ace_selection {\\n  background: #BAD6FD;\\n}\\n\\n.ace-iplastic.ace_multiselect .ace_selection.ace_start {\\n  border-radius: 4px\\n}\\n\\n.ace-iplastic .ace_marker-layer .ace_step {\\n  background: #444444\\n}\\n\\n.ace-iplastic .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #49483E;\\n  background: #FFF799\\n}\\n\\n.ace-iplastic .ace_marker-layer .ace_active-line {\\n  background: #e5e5e5\\n}\\n\\n.ace-iplastic .ace_gutter-active-line {\\n  background-color: #eeeeee\\n}\\n\\n.ace-iplastic .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #555555;\\n  border-radius:4px\\n}\\n\\n.ace-iplastic .ace_invisible {\\n  color: #999999\\n}\\n\\n.ace-iplastic .ace_entity.ace_name.ace_tag,\\n.ace-iplastic .ace_keyword,\\n.ace-iplastic .ace_meta.ace_tag,\\n.ace-iplastic .ace_storage {\\n  color: #0000FF\\n}\\n\\n.ace-iplastic .ace_punctuation,\\n.ace-iplastic .ace_punctuation.ace_tag {\\n  color: #000\\n}\\n\\n.ace-iplastic .ace_constant {\\n  color: #333333;\\n  font-weight: 700\\n}\\n\\n.ace-iplastic .ace_constant.ace_character,\\n.ace-iplastic .ace_constant.ace_language,\\n.ace-iplastic .ace_constant.ace_numeric,\\n.ace-iplastic .ace_constant.ace_other {\\n  color: #0066FF;\\n  font-weight: 700\\n}\\n\\n.ace-iplastic .ace_constant.ace_numeric{\\n  font-weight: 100\\n}\\n\\n.ace-iplastic .ace_invalid {\\n  color: #F8F8F0;\\n  background-color: #F92672\\n}\\n\\n.ace-iplastic .ace_invalid.ace_deprecated {\\n  color: #F8F8F0;\\n  background-color: #AE81FF\\n}\\n\\n.ace-iplastic .ace_support.ace_constant,\\n.ace-iplastic .ace_support.ace_function {\\n  color: #333333;\\n  font-weight: 700\\n}\\n\\n.ace-iplastic .ace_fold {\\n  background-color: #464646;\\n  border-color: #F8F8F2\\n}\\n\\n.ace-iplastic .ace_storage.ace_type,\\n.ace-iplastic .ace_support.ace_class,\\n.ace-iplastic .ace_support.ace_type {\\n  color: #3333fc;\\n  font-weight: 700\\n}\\n\\n.ace-iplastic .ace_entity.ace_name.ace_function,\\n.ace-iplastic .ace_entity.ace_other,\\n.ace-iplastic .ace_entity.ace_other.ace_attribute-name,\\n.ace-iplastic .ace_variable {\\n  color: #3366cc;\\n  font-style: italic\\n}\\n\\n.ace-iplastic .ace_variable.ace_parameter {\\n  font-style: italic;\\n  color: #2469E0\\n}\\n\\n.ace-iplastic .ace_string {\\n  color: #a55f03\\n}\\n\\n.ace-iplastic .ace_comment {\\n  color: #777777;\\n  font-style: italic\\n}\\n\\n.ace-iplastic .ace_fold-widget {\\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==);\\n}\\n\\n.ace-iplastic .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAABlJREFUeNpi+P//PwMzMzPzfwAAAAD//wMAGRsECSML/RIAAAAASUVORK5CYII=) right repeat-y\\n}\\n\\n.ace-iplastic .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/iplastic\",[\"require\",\"exports\",\"module\",\"ace/theme/iplastic.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-iplastic\";\nexports.cssText = require(\"./iplastic.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/iplastic\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-katzenmilch.js",
    "content": "ace.define(\"ace/theme/katzenmilch.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-katzenmilch .ace_gutter,\\n/* THIS THEME WAS AUTOGENERATED BY Theme.tmpl.css (UUID: ) */\\n\\n.ace-katzenmilch .ace_gutter {\\n  background: #e8e8e8;\\n  color: #333\\n}\\n\\n.ace-katzenmilch .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8\\n}\\n\\n.ace-katzenmilch {\\n  background-color: #f3f2f3;\\n  color: rgba(15, 0, 9, 1.0)\\n}\\n\\n.ace-katzenmilch .ace_cursor {\\n  border-left: 2px solid #100011\\n}\\n\\n.ace-katzenmilch .ace_overwrite-cursors .ace_cursor {\\n  border-left: 0px;\\n  border-bottom: 1px solid #100011\\n}\\n\\n.ace-katzenmilch .ace_marker-layer .ace_selection {\\n  background: rgba(100, 5, 208, 0.27)\\n}\\n\\n.ace-katzenmilch.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #f3f2f3;\\n}\\n\\n.ace-katzenmilch .ace_marker-layer .ace_step {\\n  background: rgb(198, 219, 174)\\n}\\n\\n.ace-katzenmilch .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(0, 0, 0, 0.33);\\n}\\n\\n.ace-katzenmilch .ace_marker-layer .ace_active-line {\\n  background: rgb(232, 242, 254)\\n}\\n\\n.ace-katzenmilch .ace_gutter-active-line {\\n  background-color: rgb(232, 242, 254)\\n}\\n\\n.ace-katzenmilch .ace_marker-layer .ace_selected-word {\\n  border: 1px solid rgba(100, 5, 208, 0.27)\\n}\\n\\n.ace-katzenmilch .ace_invisible {\\n  color: #BFBFBF\\n}\\n\\n.ace-katzenmilch .ace_fold {\\n  background-color: rgba(2, 95, 73, 0.97);\\n  border-color: rgba(15, 0, 9, 1.0)\\n}\\n\\n.ace-katzenmilch .ace_keyword {\\n  color: #674Aa8;\\n  rbackground-color: rgba(163, 170, 216, 0.055)\\n}\\n\\n.ace-katzenmilch .ace_constant.ace_language {\\n  color: #7D7e52;\\n  rbackground-color: rgba(189, 190, 130, 0.059)\\n}\\n\\n.ace-katzenmilch .ace_constant.ace_numeric {\\n  color: rgba(79, 130, 123, 0.93);\\n  rbackground-color: rgba(119, 194, 187, 0.059)\\n}\\n\\n.ace-katzenmilch .ace_constant.ace_character,\\n.ace-katzenmilch .ace_constant.ace_other {\\n  color: rgba(2, 95, 105, 1.0);\\n  rbackground-color: rgba(127, 34, 153, 0.063)\\n}\\n\\n.ace-katzenmilch .ace_support.ace_function {\\n  color: #9D7e62;\\n  rbackground-color: rgba(189, 190, 130, 0.039)\\n}\\n\\n.ace-katzenmilch .ace_support.ace_class {\\n  color: rgba(239, 106, 167, 1.0);\\n  rbackground-color: rgba(239, 106, 167, 0.063)\\n}\\n\\n.ace-katzenmilch .ace_storage {\\n  color: rgba(123, 92, 191, 1.0);\\n  rbackground-color: rgba(139, 93, 223, 0.051)\\n}\\n\\n.ace-katzenmilch .ace_invalid {\\n  color: #DFDFD5;\\n  rbackground-color: #CC1B27\\n}\\n\\n.ace-katzenmilch .ace_string {\\n  color: #5a5f9b;\\n  rbackground-color: rgba(170, 175, 219, 0.035)\\n}\\n\\n.ace-katzenmilch .ace_comment {\\n  font-style: italic;\\n  color: rgba(64, 79, 80, 0.67);\\n  rbackground-color: rgba(95, 15, 255, 0.0078)\\n}\\n\\n.ace-katzenmilch .ace_entity.ace_name.ace_function,\\n.ace-katzenmilch .ace_variable {\\n  color: rgba(2, 95, 73, 0.97);\\n  rbackground-color: rgba(34, 255, 73, 0.12)\\n}\\n\\n.ace-katzenmilch .ace_variable.ace_language {\\n  color: #316fcf;\\n  rbackground-color: rgba(58, 175, 255, 0.039)\\n}\\n\\n.ace-katzenmilch .ace_variable.ace_parameter {\\n  font-style: italic;\\n  color: rgba(51, 150, 159, 0.87);\\n  rbackground-color: rgba(5, 214, 249, 0.043)\\n}\\n\\n.ace-katzenmilch .ace_entity.ace_other.ace_attribute-name {\\n  color: rgba(73, 70, 194, 0.93);\\n  rbackground-color: rgba(73, 134, 194, 0.035)\\n}\\n\\n.ace-katzenmilch .ace_entity.ace_name.ace_tag {\\n  color: #3976a2;\\n  rbackground-color: rgba(73, 166, 210, 0.039)\\n}\\n\\n.ace-katzenmilch .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-katzenmilch .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/katzenmilch\",[\"require\",\"exports\",\"module\",\"ace/theme/katzenmilch.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-katzenmilch\";\nexports.cssText = require(\"./katzenmilch.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/katzenmilch\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-kr_theme.js",
    "content": "ace.define(\"ace/theme/kr_theme.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-kr-theme .ace_gutter {\\n  background: #1c1917;\\n  color: #FCFFE0\\n}\\n\\n.ace-kr-theme .ace_print-margin {\\n  width: 1px;\\n  background: #1c1917\\n}\\n\\n.ace-kr-theme {\\n  background-color: #0B0A09;\\n  color: #FCFFE0\\n}\\n\\n.ace-kr-theme .ace_cursor {\\n  color: #FF9900\\n}\\n\\n.ace-kr-theme .ace_marker-layer .ace_selection {\\n  background: rgba(170, 0, 255, 0.45)\\n}\\n\\n.ace-kr-theme.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #0B0A09;\\n}\\n\\n.ace-kr-theme .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-kr-theme .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(255, 177, 111, 0.32)\\n}\\n\\n.ace-kr-theme .ace_marker-layer .ace_active-line {\\n  background: #38403D\\n}\\n\\n.ace-kr-theme .ace_gutter-active-line {\\n  background-color : #38403D\\n}\\n\\n.ace-kr-theme .ace_marker-layer .ace_selected-word {\\n  border: 1px solid rgba(170, 0, 255, 0.45)\\n}\\n\\n.ace-kr-theme .ace_invisible {\\n  color: rgba(255, 177, 111, 0.32)\\n}\\n\\n.ace-kr-theme .ace_keyword,\\n.ace-kr-theme .ace_meta {\\n  color: #949C8B\\n}\\n\\n.ace-kr-theme .ace_constant,\\n.ace-kr-theme .ace_constant.ace_character,\\n.ace-kr-theme .ace_constant.ace_character.ace_escape,\\n.ace-kr-theme .ace_constant.ace_other {\\n  color: rgba(210, 117, 24, 0.76)\\n}\\n\\n.ace-kr-theme .ace_invalid {\\n  color: #F8F8F8;\\n  background-color: #A41300\\n}\\n\\n.ace-kr-theme .ace_support {\\n  color: #9FC28A\\n}\\n\\n.ace-kr-theme .ace_support.ace_constant {\\n  color: #C27E66\\n}\\n\\n.ace-kr-theme .ace_fold {\\n  background-color: #949C8B;\\n  border-color: #FCFFE0\\n}\\n\\n.ace-kr-theme .ace_support.ace_function {\\n  color: #85873A\\n}\\n\\n.ace-kr-theme .ace_storage {\\n  color: #FFEE80\\n}\\n\\n.ace-kr-theme .ace_string {\\n  color: rgba(164, 161, 181, 0.8)\\n}\\n\\n.ace-kr-theme .ace_string.ace_regexp {\\n  color: rgba(125, 255, 192, 0.65)\\n}\\n\\n.ace-kr-theme .ace_comment {\\n  font-style: italic;\\n  color: #706D5B\\n}\\n\\n.ace-kr-theme .ace_variable {\\n  color: #D1A796\\n}\\n\\n.ace-kr-theme .ace_list,\\n.ace-kr-theme .ace_markup.ace_list {\\n  background-color: #0F0040\\n}\\n\\n.ace-kr-theme .ace_variable.ace_language {\\n  color: #FF80E1\\n}\\n\\n.ace-kr-theme .ace_meta.ace_tag {\\n  color: #BABD9C\\n}\\n\\n.ace-kr-theme .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-kr-theme .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/kr_theme\",[\"require\",\"exports\",\"module\",\"ace/theme/kr_theme.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-kr-theme\";\nexports.cssText = require(\"./kr_theme.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/kr_theme\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-kuroir.js",
    "content": "ace.define(\"ace/theme/kuroir.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"/* THIS THEME WAS AUTOGENERATED BY Theme.tmpl.css (UUID: 467560D0-6ACE-4409-82FD-4791420837AC) */\\n\\n.ace-kuroir .ace_gutter {\\n  background: #e8e8e8;\\n  color: #333;\\n}\\n\\n.ace-kuroir .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8;\\n}\\n\\n.ace-kuroir {\\n  background-color: #E8E9E8;\\n  color: #363636;\\n}\\n\\n.ace-kuroir .ace_cursor {\\n  color: #202020;\\n}\\n\\n.ace-kuroir .ace_marker-layer .ace_selection {\\n  background: rgba(245, 170, 0, 0.57);\\n}\\n\\n.ace-kuroir.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #E8E9E8;\\n}\\n\\n.ace-kuroir .ace_marker-layer .ace_step {\\n  background: rgb(198, 219, 174);\\n}\\n\\n.ace-kuroir .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(0, 0, 0, 0.29);\\n}\\n\\n.ace-kuroir .ace_marker-layer .ace_active-line {\\n  background: rgba(203, 220, 47, 0.22);\\n}\\n\\n.ace-kuroir .ace_gutter-active-line {\\n  background-color: rgba(203, 220, 47, 0.22);\\n}\\n\\n.ace-kuroir .ace_marker-layer .ace_selected-word {\\n  border: 1px solid rgba(245, 170, 0, 0.57);\\n}\\n\\n.ace-kuroir .ace_invisible {\\n  color: #BFBFBF\\n}\\n\\n.ace-kuroir .ace_fold {\\n  border-color: #363636;\\n}\\n\\n\\n\\n\\n\\n.ace-kuroir .ace_constant{color:#CD6839;}.ace-kuroir .ace_constant.ace_numeric{color:#9A5925;}.ace-kuroir .ace_support{color:#104E8B;}.ace-kuroir .ace_support.ace_function{color:#005273;}.ace-kuroir .ace_support.ace_constant{color:#CF6A4C;}.ace-kuroir .ace_storage{color:#A52A2A;}.ace-kuroir .ace_invalid.ace_illegal{color:#FD1224;\\nbackground-color:rgba(255, 6, 0, 0.15);}.ace-kuroir .ace_invalid.ace_deprecated{text-decoration:underline;\\nfont-style:italic;\\ncolor:#FD1732;\\nbackground-color:#E8E9E8;}.ace-kuroir .ace_string{color:#639300;}.ace-kuroir .ace_string.ace_regexp{color:#417E00;\\nbackground-color:#C9D4BE;}.ace-kuroir .ace_comment{color:rgba(148, 148, 148, 0.91);\\nbackground-color:rgba(220, 220, 220, 0.56);}.ace-kuroir .ace_variable{color:#009ACD;}.ace-kuroir .ace_meta.ace_tag{color:#005273;}.ace-kuroir .ace_markup.ace_heading{color:#B8012D;\\nbackground-color:rgba(191, 97, 51, 0.051);}.ace-kuroir .ace_markup.ace_list{color:#8F5B26;}\\n\\n.ace-kuroir .ace_indent-guide {\\n    background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-kuroir .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n} \\n\";\n\n});\n\nace.define(\"ace/theme/kuroir\",[\"require\",\"exports\",\"module\",\"ace/theme/kuroir.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-kuroir\";\nexports.cssText = require(\"./kuroir.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/kuroir\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-merbivore.js",
    "content": "ace.define(\"ace/theme/merbivore.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-merbivore .ace_gutter {\\n  background: #202020;\\n  color: #E6E1DC\\n}\\n\\n.ace-merbivore .ace_print-margin {\\n  width: 1px;\\n  background: #555651\\n}\\n\\n.ace-merbivore {\\n  background-color: #161616;\\n  color: #E6E1DC\\n}\\n\\n.ace-merbivore .ace_cursor {\\n  color: #FFFFFF\\n}\\n\\n.ace-merbivore .ace_marker-layer .ace_selection {\\n  background: #454545\\n}\\n\\n.ace-merbivore.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #161616;\\n}\\n\\n.ace-merbivore .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-merbivore .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #404040\\n}\\n\\n.ace-merbivore .ace_marker-layer .ace_active-line {\\n  background: #333435\\n}\\n\\n.ace-merbivore .ace_gutter-active-line {\\n  background-color: #333435\\n}\\n\\n.ace-merbivore .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #454545\\n}\\n\\n.ace-merbivore .ace_invisible {\\n  color: #404040\\n}\\n\\n.ace-merbivore .ace_entity.ace_name.ace_tag,\\n.ace-merbivore .ace_keyword,\\n.ace-merbivore .ace_meta,\\n.ace-merbivore .ace_meta.ace_tag,\\n.ace-merbivore .ace_storage,\\n.ace-merbivore .ace_support.ace_function {\\n  color: #FC6F09\\n}\\n\\n.ace-merbivore .ace_constant,\\n.ace-merbivore .ace_constant.ace_character,\\n.ace-merbivore .ace_constant.ace_character.ace_escape,\\n.ace-merbivore .ace_constant.ace_other,\\n.ace-merbivore .ace_support.ace_type {\\n  color: #1EDAFB\\n}\\n\\n.ace-merbivore .ace_constant.ace_character.ace_escape {\\n  color: #519F50\\n}\\n\\n.ace-merbivore .ace_constant.ace_language {\\n  color: #FDC251\\n}\\n\\n.ace-merbivore .ace_constant.ace_library,\\n.ace-merbivore .ace_string,\\n.ace-merbivore .ace_support.ace_constant {\\n  color: #8DFF0A\\n}\\n\\n.ace-merbivore .ace_constant.ace_numeric {\\n  color: #58C554\\n}\\n\\n.ace-merbivore .ace_invalid {\\n  color: #FFFFFF;\\n  background-color: #990000\\n}\\n\\n.ace-merbivore .ace_fold {\\n  background-color: #FC6F09;\\n  border-color: #E6E1DC\\n}\\n\\n.ace-merbivore .ace_comment {\\n  font-style: italic;\\n  color: #AD2EA4\\n}\\n\\n.ace-merbivore .ace_entity.ace_other.ace_attribute-name {\\n  color: #FFFF89\\n}\\n\\n.ace-merbivore .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-merbivore .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/merbivore\",[\"require\",\"exports\",\"module\",\"ace/theme/merbivore.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-merbivore\";\nexports.cssText = require(\"./merbivore.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/merbivore\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-merbivore_soft.js",
    "content": "ace.define(\"ace/theme/merbivore_soft.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-merbivore-soft .ace_gutter {\\n  background: #262424;\\n  color: #E6E1DC\\n}\\n\\n.ace-merbivore-soft .ace_print-margin {\\n  width: 1px;\\n  background: #262424\\n}\\n\\n.ace-merbivore-soft {\\n  background-color: #1C1C1C;\\n  color: #E6E1DC\\n}\\n\\n.ace-merbivore-soft .ace_cursor {\\n  color: #FFFFFF\\n}\\n\\n.ace-merbivore-soft .ace_marker-layer .ace_selection {\\n  background: #494949\\n}\\n\\n.ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #1C1C1C;\\n}\\n\\n.ace-merbivore-soft .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-merbivore-soft .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #404040\\n}\\n\\n.ace-merbivore-soft .ace_marker-layer .ace_active-line {\\n  background: #333435\\n}\\n\\n.ace-merbivore-soft .ace_gutter-active-line {\\n  background-color: #333435\\n}\\n\\n.ace-merbivore-soft .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #494949\\n}\\n\\n.ace-merbivore-soft .ace_invisible {\\n  color: #404040\\n}\\n\\n.ace-merbivore-soft .ace_entity.ace_name.ace_tag,\\n.ace-merbivore-soft .ace_keyword,\\n.ace-merbivore-soft .ace_meta,\\n.ace-merbivore-soft .ace_meta.ace_tag,\\n.ace-merbivore-soft .ace_storage {\\n  color: #FC803A\\n}\\n\\n.ace-merbivore-soft .ace_constant,\\n.ace-merbivore-soft .ace_constant.ace_character,\\n.ace-merbivore-soft .ace_constant.ace_character.ace_escape,\\n.ace-merbivore-soft .ace_constant.ace_other,\\n.ace-merbivore-soft .ace_support.ace_type {\\n  color: #68C1D8\\n}\\n\\n.ace-merbivore-soft .ace_constant.ace_character.ace_escape {\\n  color: #B3E5B4\\n}\\n\\n.ace-merbivore-soft .ace_constant.ace_language {\\n  color: #E1C582\\n}\\n\\n.ace-merbivore-soft .ace_constant.ace_library,\\n.ace-merbivore-soft .ace_string,\\n.ace-merbivore-soft .ace_support.ace_constant {\\n  color: #8EC65F\\n}\\n\\n.ace-merbivore-soft .ace_constant.ace_numeric {\\n  color: #7FC578\\n}\\n\\n.ace-merbivore-soft .ace_invalid,\\n.ace-merbivore-soft .ace_invalid.ace_deprecated {\\n  color: #FFFFFF;\\n  background-color: #FE3838\\n}\\n\\n.ace-merbivore-soft .ace_fold {\\n  background-color: #FC803A;\\n  border-color: #E6E1DC\\n}\\n\\n.ace-merbivore-soft .ace_comment,\\n.ace-merbivore-soft .ace_meta {\\n  font-style: italic;\\n  color: #AC4BB8\\n}\\n\\n.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {\\n  color: #EAF1A3\\n}\\n\\n.ace-merbivore-soft .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-merbivore-soft .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/merbivore_soft\",[\"require\",\"exports\",\"module\",\"ace/theme/merbivore_soft.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-merbivore-soft\";\nexports.cssText = require(\"./merbivore_soft.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/merbivore_soft\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-mono_industrial.js",
    "content": "ace.define(\"ace/theme/mono_industrial.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-mono-industrial .ace_gutter {\\n  background: #1d2521;\\n  color: #C5C9C9\\n}\\n\\n.ace-mono-industrial .ace_print-margin {\\n  width: 1px;\\n  background: #555651\\n}\\n\\n.ace-mono-industrial {\\n  background-color: #222C28;\\n  color: #FFFFFF\\n}\\n\\n.ace-mono-industrial .ace_cursor {\\n  color: #FFFFFF\\n}\\n\\n.ace-mono-industrial .ace_marker-layer .ace_selection {\\n  background: rgba(145, 153, 148, 0.40)\\n}\\n\\n.ace-mono-industrial.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #222C28;\\n}\\n\\n.ace-mono-industrial .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-mono-industrial .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(102, 108, 104, 0.50)\\n}\\n\\n.ace-mono-industrial .ace_marker-layer .ace_active-line {\\n  background: rgba(12, 13, 12, 0.25)\\n}\\n\\n.ace-mono-industrial .ace_gutter-active-line {\\n  background-color: rgba(12, 13, 12, 0.25)\\n}\\n\\n.ace-mono-industrial .ace_marker-layer .ace_selected-word {\\n  border: 1px solid rgba(145, 153, 148, 0.40)\\n}\\n\\n.ace-mono-industrial .ace_invisible {\\n  color: rgba(102, 108, 104, 0.50)\\n}\\n\\n.ace-mono-industrial .ace_string {\\n  background-color: #151C19;\\n  color: #FFFFFF\\n}\\n\\n.ace-mono-industrial .ace_keyword,\\n.ace-mono-industrial .ace_meta {\\n  color: #A39E64\\n}\\n\\n.ace-mono-industrial .ace_constant,\\n.ace-mono-industrial .ace_constant.ace_character,\\n.ace-mono-industrial .ace_constant.ace_character.ace_escape,\\n.ace-mono-industrial .ace_constant.ace_numeric,\\n.ace-mono-industrial .ace_constant.ace_other {\\n  color: #E98800\\n}\\n\\n.ace-mono-industrial .ace_entity.ace_name.ace_function,\\n.ace-mono-industrial .ace_keyword.ace_operator,\\n.ace-mono-industrial .ace_variable {\\n  color: #A8B3AB\\n}\\n\\n.ace-mono-industrial .ace_invalid {\\n  color: #FFFFFF;\\n  background-color: rgba(153, 0, 0, 0.68)\\n}\\n\\n.ace-mono-industrial .ace_support.ace_constant {\\n  color: #C87500\\n}\\n\\n.ace-mono-industrial .ace_fold {\\n  background-color: #A8B3AB;\\n  border-color: #FFFFFF\\n}\\n\\n.ace-mono-industrial .ace_support.ace_function {\\n  color: #588E60\\n}\\n\\n.ace-mono-industrial .ace_entity.ace_name,\\n.ace-mono-industrial .ace_support.ace_class,\\n.ace-mono-industrial .ace_support.ace_type {\\n  color: #5778B6\\n}\\n\\n.ace-mono-industrial .ace_storage {\\n  color: #C23B00\\n}\\n\\n.ace-mono-industrial .ace_variable.ace_language,\\n.ace-mono-industrial .ace_variable.ace_parameter {\\n  color: #648BD2\\n}\\n\\n.ace-mono-industrial .ace_comment {\\n  color: #666C68;\\n  background-color: #151C19\\n}\\n\\n.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {\\n  color: #909993\\n}\\n\\n.ace-mono-industrial .ace_entity.ace_name.ace_tag {\\n  color: #A65EFF\\n}\\n\\n.ace-mono-industrial .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ1NbwZfALD/4PAAlTArlEC4r/AAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-mono-industrial .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/mono_industrial\",[\"require\",\"exports\",\"module\",\"ace/theme/mono_industrial.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-mono-industrial\";\nexports.cssText = require(\"./mono_industrial.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/mono_industrial\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-monokai.js",
    "content": "ace.define(\"ace/theme/monokai.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-monokai .ace_gutter {\\n  background: #2F3129;\\n  color: #8F908A\\n}\\n\\n.ace-monokai .ace_print-margin {\\n  width: 1px;\\n  background: #555651\\n}\\n\\n.ace-monokai {\\n  background-color: #272822;\\n  color: #F8F8F2\\n}\\n\\n.ace-monokai .ace_cursor {\\n  color: #F8F8F0\\n}\\n\\n.ace-monokai .ace_marker-layer .ace_selection {\\n  background: #49483E\\n}\\n\\n.ace-monokai.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #272822;\\n}\\n\\n.ace-monokai .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-monokai .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #49483E\\n}\\n\\n.ace-monokai .ace_marker-layer .ace_active-line {\\n  background: #202020\\n}\\n\\n.ace-monokai .ace_gutter-active-line {\\n  background-color: #272727\\n}\\n\\n.ace-monokai .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #49483E\\n}\\n\\n.ace-monokai .ace_invisible {\\n  color: #52524d\\n}\\n\\n.ace-monokai .ace_entity.ace_name.ace_tag,\\n.ace-monokai .ace_keyword,\\n.ace-monokai .ace_meta.ace_tag,\\n.ace-monokai .ace_storage {\\n  color: #F92672\\n}\\n\\n.ace-monokai .ace_punctuation,\\n.ace-monokai .ace_punctuation.ace_tag {\\n  color: #fff\\n}\\n\\n.ace-monokai .ace_constant.ace_character,\\n.ace-monokai .ace_constant.ace_language,\\n.ace-monokai .ace_constant.ace_numeric,\\n.ace-monokai .ace_constant.ace_other {\\n  color: #AE81FF\\n}\\n\\n.ace-monokai .ace_invalid {\\n  color: #F8F8F0;\\n  background-color: #F92672\\n}\\n\\n.ace-monokai .ace_invalid.ace_deprecated {\\n  color: #F8F8F0;\\n  background-color: #AE81FF\\n}\\n\\n.ace-monokai .ace_support.ace_constant,\\n.ace-monokai .ace_support.ace_function {\\n  color: #66D9EF\\n}\\n\\n.ace-monokai .ace_fold {\\n  background-color: #A6E22E;\\n  border-color: #F8F8F2\\n}\\n\\n.ace-monokai .ace_storage.ace_type,\\n.ace-monokai .ace_support.ace_class,\\n.ace-monokai .ace_support.ace_type {\\n  font-style: italic;\\n  color: #66D9EF\\n}\\n\\n.ace-monokai .ace_entity.ace_name.ace_function,\\n.ace-monokai .ace_entity.ace_other,\\n.ace-monokai .ace_entity.ace_other.ace_attribute-name,\\n.ace-monokai .ace_variable {\\n  color: #A6E22E\\n}\\n\\n.ace-monokai .ace_variable.ace_parameter {\\n  font-style: italic;\\n  color: #FD971F\\n}\\n\\n.ace-monokai .ace_string {\\n  color: #E6DB74\\n}\\n\\n.ace-monokai .ace_comment {\\n  color: #75715E\\n}\\n\\n.ace-monokai .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-monokai .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/monokai\",[\"require\",\"exports\",\"module\",\"ace/theme/monokai.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-monokai\";\nexports.cssText = require(\"./monokai.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/monokai\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-nord_dark.js",
    "content": "ace.define(\"ace/theme/nord_dark.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-nord-dark .ace_gutter {\\n  color: #616e88;\\n}\\n\\n.ace-nord-dark .ace_print-margin {\\n  width: 1px;\\n  background: #4c566a;\\n}\\n\\n.ace-nord-dark {\\n  background-color: #2e3440;\\n  color: #d8dee9;\\n}\\n\\n.ace-nord-dark .ace_entity.ace_other.ace_attribute-name,\\n.ace-nord-dark .ace_storage {\\n  color: #d8dee9;\\n}\\n\\n.ace-nord-dark .ace_cursor {\\n  color: #d8dee9;\\n}\\n\\n.ace-nord-dark .ace_string.ace_regexp {\\n  color: #bf616a;\\n}\\n\\n.ace-nord-dark .ace_marker-layer .ace_active-line {\\n  background: #434c5ecc;\\n}\\n.ace-nord-dark .ace_marker-layer .ace_selection {\\n  background: #434c5ecc;\\n}\\n\\n.ace-nord-dark.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #2e3440;\\n}\\n\\n.ace-nord-dark .ace_marker-layer .ace_step {\\n  background: #ebcb8b;\\n}\\n\\n.ace-nord-dark .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #88c0d066;\\n}\\n\\n.ace-nord-dark .ace_gutter-active-line {\\n  background-color: #434c5ecc;\\n}\\n\\n.ace-nord-dark .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #88c0d066;\\n}\\n\\n.ace-nord-dark .ace_invisible {\\n  color: #4c566a;\\n}\\n\\n.ace-nord-dark .ace_keyword,\\n.ace-nord-dark .ace_meta,\\n.ace-nord-dark .ace_support.ace_class,\\n.ace-nord-dark .ace_support.ace_type {\\n  color: #81a1c1;\\n}\\n\\n.ace-nord-dark .ace_constant.ace_character,\\n.ace-nord-dark .ace_constant.ace_other {\\n  color: #d8dee9;\\n}\\n\\n.ace-nord-dark .ace_constant.ace_language {\\n  color: #5e81ac;\\n}\\n\\n.ace-nord-dark .ace_constant.ace_escape {\\n  color: #ebcB8b;\\n}\\n\\n.ace-nord-dark .ace_constant.ace_numeric {\\n  color: #b48ead;\\n}\\n\\n.ace-nord-dark .ace_fold {\\n  background-color: #4c566a;\\n  border-color: #d8dee9;\\n}\\n\\n.ace-nord-dark .ace_entity.ace_name.ace_function,\\n.ace-nord-dark .ace_entity.ace_name.ace_tag,\\n.ace-nord-dark .ace_support.ace_function,\\n.ace-nord-dark .ace_variable,\\n.ace-nord-dark .ace_variable.ace_language {\\n  color: #8fbcbb;\\n}\\n\\n.ace-nord-dark .ace_string {\\n  color: #a3be8c;\\n}\\n\\n.ace-nord-dark .ace_comment {\\n  color: #616e88;\\n}\\n\\n.ace-nord-dark .ace_indent-guide {\\n  box-shadow: inset -1px 0 0 0 #434c5eb3;\\n}\\n\\n.ace-nord-dark .ace_indent-guide-active {\\n  box-shadow: inset -1px 0 0 0 #8395b8b3;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/nord_dark\",[\"require\",\"exports\",\"module\",\"ace/theme/nord_dark.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-nord-dark\";\nexports.cssText = require(\"./nord_dark.css\");\nexports.$selectionColorConflict = true;\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/nord_dark\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-one_dark.js",
    "content": "ace.define(\"ace/theme/one_dark.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-one-dark .ace_gutter {\\n    background: #282c34;\\n    color: #6a6f7a\\n}\\n\\n.ace-one-dark .ace_print-margin {\\n    width: 1px;\\n    background: #e8e8e8\\n}\\n\\n.ace-one-dark {\\n    background-color: #282c34;\\n    color: #abb2bf\\n}\\n\\n.ace-one-dark .ace_cursor {\\n    color: #528bff\\n}\\n\\n.ace-one-dark .ace_marker-layer .ace_selection {\\n    background: #3d4350\\n}\\n\\n.ace-one-dark.ace_multiselect .ace_selection.ace_start {\\n    box-shadow: 0 0 3px 0 #282c34;\\n    border-radius: 2px\\n}\\n\\n.ace-one-dark .ace_marker-layer .ace_step {\\n    background: #c6dbae\\n}\\n\\n.ace-one-dark .ace_marker-layer .ace_bracket {\\n    margin: -1px 0 0 -1px;\\n    border: 1px solid #747369\\n}\\n\\n.ace-one-dark .ace_marker-layer .ace_active-line {\\n    background: rgba(76, 87, 103, .19)\\n}\\n\\n.ace-one-dark .ace_gutter-active-line {\\n    background-color: rgba(76, 87, 103, .19)\\n}\\n\\n.ace-one-dark .ace_marker-layer .ace_selected-word {\\n    border: 1px solid #3d4350\\n}\\n\\n.ace-one-dark .ace_fold {\\n    background-color: #61afef;\\n    border-color: #abb2bf\\n}\\n\\n.ace-one-dark .ace_keyword {\\n    color: #c678dd\\n}\\n\\n.ace-one-dark .ace_keyword.ace_operator {\\n    color: #c678dd\\n}\\n\\n.ace-one-dark .ace_keyword.ace_other.ace_unit {\\n    color: #d19a66\\n}\\n\\n.ace-one-dark .ace_constant.ace_language {\\n    color: #d19a66\\n}\\n\\n.ace-one-dark .ace_constant.ace_numeric {\\n    color: #d19a66\\n}\\n\\n.ace-one-dark .ace_constant.ace_character {\\n    color: #56b6c2\\n}\\n\\n.ace-one-dark .ace_constant.ace_other {\\n    color: #56b6c2\\n}\\n\\n.ace-one-dark .ace_support.ace_function {\\n    color: #61afef\\n}\\n\\n.ace-one-dark .ace_support.ace_constant {\\n    color: #d19a66\\n}\\n\\n.ace-one-dark .ace_support.ace_class {\\n    color: #e5c07b\\n}\\n\\n.ace-one-dark .ace_support.ace_type {\\n    color: #e5c07b\\n}\\n\\n.ace-one-dark .ace_storage {\\n    color: #c678dd\\n}\\n\\n.ace-one-dark .ace_storage.ace_type {\\n    color: #c678dd\\n}\\n\\n.ace-one-dark .ace_invalid {\\n    color: #fff;\\n    background-color: #f2777a\\n}\\n\\n.ace-one-dark .ace_invalid.ace_deprecated {\\n    color: #272b33;\\n    background-color: #d27b53\\n}\\n\\n.ace-one-dark .ace_string {\\n    color: #98c379\\n}\\n\\n.ace-one-dark .ace_string.ace_regexp {\\n    color: #e06c75\\n}\\n\\n.ace-one-dark .ace_comment {\\n    font-style: italic;\\n    color: #5c6370\\n}\\n\\n.ace-one-dark .ace_variable {\\n    color: #e06c75\\n}\\n\\n.ace-one-dark .ace_variable.ace_parameter {\\n    color: #d19a66\\n}\\n\\n.ace-one-dark .ace_meta.ace_tag {\\n    color: #e06c75\\n}\\n\\n.ace-one-dark .ace_entity.ace_other.ace_attribute-name {\\n    color: #e06c75\\n}\\n\\n.ace-one-dark .ace_entity.ace_name.ace_function {\\n    color: #61afef\\n}\\n\\n.ace-one-dark .ace_entity.ace_name.ace_tag {\\n    color: #e06c75\\n}\\n\\n.ace-one-dark .ace_markup.ace_heading {\\n    color: #98c379\\n}\\n\\n.ace-one-dark .ace_indent-guide {\\n    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-one-dark .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/one_dark\",[\"require\",\"exports\",\"module\",\"ace/theme/one_dark.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-one-dark\";\nexports.cssText = require(\"./one_dark.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/one_dark\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-pastel_on_dark.js",
    "content": "ace.define(\"ace/theme/pastel_on_dark.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-pastel-on-dark .ace_gutter {\\n  background: #353030;\\n  color: #8F938F\\n}\\n\\n.ace-pastel-on-dark .ace_print-margin {\\n  width: 1px;\\n  background: #353030\\n}\\n\\n.ace-pastel-on-dark {\\n  background-color: #2C2828;\\n  color: #8F938F\\n}\\n\\n.ace-pastel-on-dark .ace_cursor {\\n  color: #A7A7A7\\n}\\n\\n.ace-pastel-on-dark .ace_marker-layer .ace_selection {\\n  background: rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #2C2828;\\n}\\n\\n.ace-pastel-on-dark .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-pastel-on-dark .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-pastel-on-dark .ace_marker-layer .ace_active-line {\\n  background: rgba(255, 255, 255, 0.031)\\n}\\n\\n.ace-pastel-on-dark .ace_gutter-active-line {\\n  background-color: rgba(255, 255, 255, 0.031)\\n}\\n\\n.ace-pastel-on-dark .ace_marker-layer .ace_selected-word {\\n  border: 1px solid rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-pastel-on-dark .ace_invisible {\\n  color: rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-pastel-on-dark .ace_keyword,\\n.ace-pastel-on-dark .ace_meta {\\n  color: #757aD8\\n}\\n\\n.ace-pastel-on-dark .ace_constant,\\n.ace-pastel-on-dark .ace_constant.ace_character,\\n.ace-pastel-on-dark .ace_constant.ace_character.ace_escape,\\n.ace-pastel-on-dark .ace_constant.ace_other {\\n  color: #4FB7C5\\n}\\n\\n.ace-pastel-on-dark .ace_keyword.ace_operator {\\n  color: #797878\\n}\\n\\n.ace-pastel-on-dark .ace_constant.ace_character {\\n  color: #AFA472\\n}\\n\\n.ace-pastel-on-dark .ace_constant.ace_language {\\n  color: #DE8E30\\n}\\n\\n.ace-pastel-on-dark .ace_constant.ace_numeric {\\n  color: #CCCCCC\\n}\\n\\n.ace-pastel-on-dark .ace_invalid,\\n.ace-pastel-on-dark .ace_invalid.ace_illegal {\\n  color: #F8F8F8;\\n  background-color: rgba(86, 45, 86, 0.75)\\n}\\n\\n.ace-pastel-on-dark .ace_invalid.ace_deprecated {\\n  text-decoration: underline;\\n  font-style: italic;\\n  color: #D2A8A1\\n}\\n\\n.ace-pastel-on-dark .ace_fold {\\n  background-color: #757aD8;\\n  border-color: #8F938F\\n}\\n\\n.ace-pastel-on-dark .ace_support.ace_function {\\n  color: #AEB2F8\\n}\\n\\n.ace-pastel-on-dark .ace_string {\\n  color: #66A968\\n}\\n\\n.ace-pastel-on-dark .ace_string.ace_regexp {\\n  color: #E9C062\\n}\\n\\n.ace-pastel-on-dark .ace_comment {\\n  color: #A6C6FF\\n}\\n\\n.ace-pastel-on-dark .ace_variable {\\n  color: #BEBF55\\n}\\n\\n.ace-pastel-on-dark .ace_variable.ace_language {\\n  color: #C1C144\\n}\\n\\n.ace-pastel-on-dark .ace_xml-pe {\\n  color: #494949\\n}\\n\\n.ace-pastel-on-dark .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-pastel-on-dark .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/pastel_on_dark\",[\"require\",\"exports\",\"module\",\"ace/theme/pastel_on_dark.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-pastel-on-dark\";\nexports.cssText = require(\"./pastel_on_dark.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/pastel_on_dark\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-solarized_dark.js",
    "content": "ace.define(\"ace/theme/solarized_dark.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-solarized-dark .ace_gutter {\\n  background: #01313f;\\n  color: #d0edf7\\n}\\n\\n.ace-solarized-dark .ace_print-margin {\\n  width: 1px;\\n  background: #33555E\\n}\\n\\n.ace-solarized-dark {\\n  background-color: #002B36;\\n  color: #93A1A1\\n}\\n\\n.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,\\n.ace-solarized-dark .ace_storage {\\n  color: #93A1A1\\n}\\n\\n.ace-solarized-dark .ace_cursor,\\n.ace-solarized-dark .ace_string.ace_regexp {\\n  color: #D30102\\n}\\n\\n.ace-solarized-dark .ace_marker-layer .ace_active-line,\\n.ace-solarized-dark .ace_marker-layer .ace_selection {\\n  background: rgba(255, 255, 255, 0.1)\\n}\\n\\n.ace-solarized-dark.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #002B36;\\n}\\n\\n.ace-solarized-dark .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-solarized-dark .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(147, 161, 161, 0.50)\\n}\\n\\n.ace-solarized-dark .ace_gutter-active-line {\\n  background-color: #0d3440\\n}\\n\\n.ace-solarized-dark .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #073642\\n}\\n\\n.ace-solarized-dark .ace_invisible {\\n  color: rgba(147, 161, 161, 0.50)\\n}\\n\\n.ace-solarized-dark .ace_keyword,\\n.ace-solarized-dark .ace_meta,\\n.ace-solarized-dark .ace_support.ace_class,\\n.ace-solarized-dark .ace_support.ace_type {\\n  color: #859900\\n}\\n\\n.ace-solarized-dark .ace_constant.ace_character,\\n.ace-solarized-dark .ace_constant.ace_other {\\n  color: #CB4B16\\n}\\n\\n.ace-solarized-dark .ace_constant.ace_language {\\n  color: #B58900\\n}\\n\\n.ace-solarized-dark .ace_constant.ace_numeric {\\n  color: #D33682\\n}\\n\\n.ace-solarized-dark .ace_fold {\\n  background-color: #268BD2;\\n  border-color: #93A1A1\\n}\\n\\n.ace-solarized-dark .ace_entity.ace_name.ace_function,\\n.ace-solarized-dark .ace_entity.ace_name.ace_tag,\\n.ace-solarized-dark .ace_support.ace_function,\\n.ace-solarized-dark .ace_variable,\\n.ace-solarized-dark .ace_variable.ace_language {\\n  color: #268BD2\\n}\\n\\n.ace-solarized-dark .ace_string {\\n  color: #2AA198\\n}\\n\\n.ace-solarized-dark .ace_comment {\\n  font-style: italic;\\n  color: #657B83\\n}\\n\\n.ace-solarized-dark .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-solarized-dark .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/solarized_dark\",[\"require\",\"exports\",\"module\",\"ace/theme/solarized_dark.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-solarized-dark\";\nexports.cssText = require(\"./solarized_dark.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/solarized_dark\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-solarized_light.js",
    "content": "ace.define(\"ace/theme/solarized_light.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-solarized-light .ace_gutter {\\n  background: #fbf1d3;\\n  color: #333\\n}\\n\\n.ace-solarized-light .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8\\n}\\n\\n.ace-solarized-light {\\n  background-color: #FDF6E3;\\n  color: #586E75\\n}\\n\\n.ace-solarized-light .ace_cursor {\\n  color: #000000\\n}\\n\\n.ace-solarized-light .ace_marker-layer .ace_selection {\\n  background: rgba(7, 54, 67, 0.09)\\n}\\n\\n.ace-solarized-light.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #FDF6E3;\\n}\\n\\n.ace-solarized-light .ace_marker-layer .ace_step {\\n  background: rgb(255, 255, 0)\\n}\\n\\n.ace-solarized-light .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(147, 161, 161, 0.50)\\n}\\n\\n.ace-solarized-light .ace_marker-layer .ace_active-line {\\n  background: #EEE8D5\\n}\\n\\n.ace-solarized-light .ace_gutter-active-line {\\n  background-color : #EDE5C1\\n}\\n\\n.ace-solarized-light .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #7f9390\\n}\\n\\n.ace-solarized-light .ace_invisible {\\n  color: rgba(147, 161, 161, 0.50)\\n}\\n\\n.ace-solarized-light .ace_keyword,\\n.ace-solarized-light .ace_meta,\\n.ace-solarized-light .ace_support.ace_class,\\n.ace-solarized-light .ace_support.ace_type {\\n  color: #859900\\n}\\n\\n.ace-solarized-light .ace_constant.ace_character,\\n.ace-solarized-light .ace_constant.ace_other {\\n  color: #CB4B16\\n}\\n\\n.ace-solarized-light .ace_constant.ace_language {\\n  color: #B58900\\n}\\n\\n.ace-solarized-light .ace_constant.ace_numeric {\\n  color: #D33682\\n}\\n\\n.ace-solarized-light .ace_fold {\\n  background-color: #268BD2;\\n  border-color: #586E75\\n}\\n\\n.ace-solarized-light .ace_entity.ace_name.ace_function,\\n.ace-solarized-light .ace_entity.ace_name.ace_tag,\\n.ace-solarized-light .ace_support.ace_function,\\n.ace-solarized-light .ace_variable,\\n.ace-solarized-light .ace_variable.ace_language {\\n  color: #268BD2\\n}\\n\\n.ace-solarized-light .ace_storage {\\n  color: #073642\\n}\\n\\n.ace-solarized-light .ace_string {\\n  color: #2AA198\\n}\\n\\n.ace-solarized-light .ace_string.ace_regexp {\\n  color: #D30102\\n}\\n\\n.ace-solarized-light .ace_comment,\\n.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {\\n  color: #93A1A1\\n}\\n\\n.ace-solarized-light .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-solarized-light .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n} \\n\";\n\n});\n\nace.define(\"ace/theme/solarized_light\",[\"require\",\"exports\",\"module\",\"ace/theme/solarized_light.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-solarized-light\";\nexports.cssText = require(\"./solarized_light.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/solarized_light\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-sqlserver.js",
    "content": "ace.define(\"ace/theme/sqlserver.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-sqlserver .ace_gutter {\\n    background: #ebebeb;\\n    color: #333;\\n    overflow: hidden;\\n}\\n\\n.ace-sqlserver .ace_print-margin {\\n    width: 1px;\\n    background: #e8e8e8;\\n}\\n\\n.ace-sqlserver {\\n    background-color: #FFFFFF;\\n    color: black;\\n}\\n\\n.ace-sqlserver .ace_identifier {\\n    color: black;\\n}\\n\\n.ace-sqlserver .ace_keyword {\\n    color: #0000FF;\\n}\\n\\n.ace-sqlserver .ace_numeric {\\n    color: black;\\n}\\n\\n.ace-sqlserver .ace_storage {\\n    color: #11B7BE;\\n}\\n\\n.ace-sqlserver .ace_keyword.ace_operator,\\n.ace-sqlserver .ace_lparen,\\n.ace-sqlserver .ace_rparen,\\n.ace-sqlserver .ace_punctuation {\\n    color: #808080;\\n}\\n\\n.ace-sqlserver .ace_set.ace_statement {\\n    color: #0000FF;\\n    text-decoration: underline;\\n}\\n\\n.ace-sqlserver .ace_cursor {\\n    color: black;\\n}\\n\\n.ace-sqlserver .ace_invisible {\\n    color: rgb(191, 191, 191);\\n}\\n\\n.ace-sqlserver .ace_constant.ace_buildin {\\n    color: rgb(88, 72, 246);\\n}\\n\\n.ace-sqlserver .ace_constant.ace_language {\\n    color: #979797;\\n}\\n\\n.ace-sqlserver .ace_constant.ace_library {\\n    color: rgb(6, 150, 14);\\n}\\n\\n.ace-sqlserver .ace_invalid {\\n    background-color: rgb(153, 0, 0);\\n    color: white;\\n}\\n\\n.ace-sqlserver .ace_support.ace_function {\\n    color: #FF00FF;\\n}\\n\\n.ace-sqlserver .ace_support.ace_constant {\\n    color: rgb(6, 150, 14);\\n}\\n\\n.ace-sqlserver .ace_class {\\n    color: #008080;\\n}\\n\\n.ace-sqlserver .ace_support.ace_other {\\n    color: #6D79DE;\\n}\\n\\n.ace-sqlserver .ace_variable.ace_parameter {\\n    font-style: italic;\\n    color: #FD971F;\\n}\\n\\n.ace-sqlserver .ace_comment {\\n    color: #008000;\\n}\\n\\n.ace-sqlserver .ace_constant.ace_numeric {\\n    color: black;\\n}\\n\\n.ace-sqlserver .ace_variable {\\n    color: rgb(49, 132, 149);\\n}\\n\\n.ace-sqlserver .ace_xml-pe {\\n    color: rgb(104, 104, 91);\\n}\\n\\n.ace-sqlserver .ace_support.ace_storedprocedure {\\n    color: #800000;\\n}\\n\\n.ace-sqlserver .ace_heading {\\n    color: rgb(12, 7, 255);\\n}\\n\\n.ace-sqlserver .ace_list {\\n    color: rgb(185, 6, 144);\\n}\\n\\n.ace-sqlserver .ace_marker-layer .ace_selection {\\n    background: rgb(181, 213, 255);\\n}\\n\\n.ace-sqlserver .ace_marker-layer .ace_step {\\n    background: rgb(252, 255, 0);\\n}\\n\\n.ace-sqlserver .ace_marker-layer .ace_stack {\\n    background: rgb(164, 229, 101);\\n}\\n\\n.ace-sqlserver .ace_marker-layer .ace_bracket {\\n    margin: -1px 0 0 -1px;\\n    border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-sqlserver .ace_marker-layer .ace_active-line {\\n    background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-sqlserver .ace_gutter-active-line {\\n    background-color: #dcdcdc;\\n}\\n\\n.ace-sqlserver .ace_marker-layer .ace_selected-word {\\n    background: rgb(250, 250, 255);\\n    border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-sqlserver .ace_meta.ace_tag {\\n    color: #0000FF;\\n}\\n\\n.ace-sqlserver .ace_string.ace_regex {\\n    color: #FF0000;\\n}\\n\\n.ace-sqlserver .ace_string {\\n    color: #FF0000;\\n}\\n\\n.ace-sqlserver .ace_entity.ace_other.ace_attribute-name {\\n    color: #994409;\\n}\\n\\n.ace-sqlserver .ace_indent-guide {\\n    background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-sqlserver .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n} \\n\";\n\n});\n\nace.define(\"ace/theme/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/theme/sqlserver.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-sqlserver\";\nexports.cssText = require(\"./sqlserver.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/sqlserver\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-terminal.js",
    "content": "ace.define(\"ace/theme/terminal.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-terminal-theme .ace_gutter {\\n  background: #1a0005;\\n  color: steelblue\\n}\\n\\n.ace-terminal-theme .ace_print-margin {\\n  width: 1px;\\n  background: #1a1a1a\\n}\\n\\n.ace-terminal-theme {\\n  background-color: black;\\n  color: #DEDEDE\\n}\\n\\n.ace-terminal-theme .ace_cursor {\\n  color: #9F9F9F\\n}\\n\\n.ace-terminal-theme .ace_marker-layer .ace_selection {\\n  background: #424242\\n}\\n\\n.ace-terminal-theme.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px black;\\n}\\n\\n.ace-terminal-theme .ace_marker-layer .ace_step {\\n  background: rgb(0, 0, 0)\\n}\\n\\n.ace-terminal-theme .ace_marker-layer .ace_bracket {\\n  background: #090;\\n}\\n\\n.ace-terminal-theme .ace_marker-layer .ace_bracket-start {\\n  background: #090;\\n}\\n\\n.ace-terminal-theme .ace_marker-layer .ace_bracket-unmatched {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #900\\n}\\n\\n.ace-terminal-theme .ace_marker-layer .ace_active-line {\\n  background: #2A2A2A\\n}\\n\\n.ace-terminal-theme .ace_gutter-active-line {\\n  background-color: #2A112A\\n}\\n\\n.ace-terminal-theme .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #424242\\n}\\n\\n.ace-terminal-theme .ace_invisible {\\n  color: #343434\\n}\\n\\n.ace-terminal-theme .ace_keyword,\\n.ace-terminal-theme .ace_meta,\\n.ace-terminal-theme .ace_storage,\\n.ace-terminal-theme .ace_storage.ace_type,\\n.ace-terminal-theme .ace_support.ace_type {\\n  color: tomato\\n}\\n\\n.ace-terminal-theme .ace_keyword.ace_operator {\\n  color: deeppink\\n}\\n\\n.ace-terminal-theme .ace_constant.ace_character,\\n.ace-terminal-theme .ace_constant.ace_language,\\n.ace-terminal-theme .ace_constant.ace_numeric,\\n.ace-terminal-theme .ace_keyword.ace_other.ace_unit,\\n.ace-terminal-theme .ace_support.ace_constant,\\n.ace-terminal-theme .ace_variable.ace_parameter {\\n  color: #E78C45\\n}\\n\\n.ace-terminal-theme .ace_constant.ace_other {\\n  color: gold\\n}\\n\\n.ace-terminal-theme .ace_invalid {\\n  color: yellow;\\n  background-color: red\\n}\\n\\n.ace-terminal-theme .ace_invalid.ace_deprecated {\\n  color: #CED2CF;\\n  background-color: #B798BF\\n}\\n\\n.ace-terminal-theme .ace_fold {\\n  background-color: #7AA6DA;\\n  border-color: #DEDEDE\\n}\\n\\n.ace-terminal-theme .ace_entity.ace_name.ace_function,\\n.ace-terminal-theme .ace_support.ace_function,\\n.ace-terminal-theme .ace_variable {\\n  color: #7AA6DA\\n}\\n\\n.ace-terminal-theme .ace_support.ace_class,\\n.ace-terminal-theme .ace_support.ace_type {\\n  color: #E7C547\\n}\\n\\n.ace-terminal-theme .ace_heading,\\n.ace-terminal-theme .ace_string {\\n  color: #B9CA4A\\n}\\n\\n.ace-terminal-theme .ace_entity.ace_name.ace_tag,\\n.ace-terminal-theme .ace_entity.ace_other.ace_attribute-name,\\n.ace-terminal-theme .ace_meta.ace_tag,\\n.ace-terminal-theme .ace_string.ace_regexp,\\n.ace-terminal-theme .ace_variable {\\n  color: #D54E53\\n}\\n\\n.ace-terminal-theme .ace_comment {\\n  color: orangered\\n}\\n\\n.ace-terminal-theme .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;\\n}\\n\\n.ace-terminal-theme .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/terminal\",[\"require\",\"exports\",\"module\",\"ace/theme/terminal.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-terminal-theme\";\nexports.cssText = require(\"./terminal.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/terminal\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-textmate.js",
    "content": "ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate.css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate.css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/textmate\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-tomorrow.js",
    "content": "ace.define(\"ace/theme/tomorrow.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tomorrow .ace_gutter {\\n  background: #f6f6f6;\\n  color: #4D4D4C\\n}\\n\\n.ace-tomorrow .ace_print-margin {\\n  width: 1px;\\n  background: #f6f6f6\\n}\\n\\n.ace-tomorrow {\\n  background-color: #FFFFFF;\\n  color: #4D4D4C\\n}\\n\\n.ace-tomorrow .ace_cursor {\\n  color: #AEAFAD\\n}\\n\\n.ace-tomorrow .ace_marker-layer .ace_selection {\\n  background: #D6D6D6\\n}\\n\\n.ace-tomorrow.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #FFFFFF;\\n}\\n\\n.ace-tomorrow .ace_marker-layer .ace_step {\\n  background: rgb(255, 255, 0)\\n}\\n\\n.ace-tomorrow .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #D1D1D1\\n}\\n\\n.ace-tomorrow .ace_marker-layer .ace_active-line {\\n  background: #EFEFEF\\n}\\n\\n.ace-tomorrow .ace_gutter-active-line {\\n  background-color : #dcdcdc\\n}\\n\\n.ace-tomorrow .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #D6D6D6\\n}\\n\\n.ace-tomorrow .ace_invisible {\\n  color: #D1D1D1\\n}\\n\\n.ace-tomorrow .ace_keyword,\\n.ace-tomorrow .ace_meta,\\n.ace-tomorrow .ace_storage,\\n.ace-tomorrow .ace_storage.ace_type,\\n.ace-tomorrow .ace_support.ace_type {\\n  color: #8959A8\\n}\\n\\n.ace-tomorrow .ace_keyword.ace_operator {\\n  color: #3E999F\\n}\\n\\n.ace-tomorrow .ace_constant.ace_character,\\n.ace-tomorrow .ace_constant.ace_language,\\n.ace-tomorrow .ace_constant.ace_numeric,\\n.ace-tomorrow .ace_keyword.ace_other.ace_unit,\\n.ace-tomorrow .ace_support.ace_constant,\\n.ace-tomorrow .ace_variable.ace_parameter {\\n  color: #F5871F\\n}\\n\\n.ace-tomorrow .ace_constant.ace_other {\\n  color: #666969\\n}\\n\\n.ace-tomorrow .ace_invalid {\\n  color: #FFFFFF;\\n  background-color: #C82829\\n}\\n\\n.ace-tomorrow .ace_invalid.ace_deprecated {\\n  color: #FFFFFF;\\n  background-color: #8959A8\\n}\\n\\n.ace-tomorrow .ace_fold {\\n  background-color: #4271AE;\\n  border-color: #4D4D4C\\n}\\n\\n.ace-tomorrow .ace_entity.ace_name.ace_function,\\n.ace-tomorrow .ace_support.ace_function,\\n.ace-tomorrow .ace_variable {\\n  color: #4271AE\\n}\\n\\n.ace-tomorrow .ace_support.ace_class,\\n.ace-tomorrow .ace_support.ace_type {\\n  color: #C99E00\\n}\\n\\n.ace-tomorrow .ace_heading,\\n.ace-tomorrow .ace_markup.ace_heading,\\n.ace-tomorrow .ace_string {\\n  color: #718C00\\n}\\n\\n.ace-tomorrow .ace_entity.ace_name.ace_tag,\\n.ace-tomorrow .ace_entity.ace_other.ace_attribute-name,\\n.ace-tomorrow .ace_meta.ace_tag,\\n.ace-tomorrow .ace_string.ace_regexp,\\n.ace-tomorrow .ace_variable {\\n  color: #C82829\\n}\\n\\n.ace-tomorrow .ace_comment {\\n  color: #8E908C\\n}\\n\\n.ace-tomorrow .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y\\n}\\n\\n.ace-tomorrow .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n} \\n\";\n\n});\n\nace.define(\"ace/theme/tomorrow\",[\"require\",\"exports\",\"module\",\"ace/theme/tomorrow.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-tomorrow\";\nexports.cssText = require(\"./tomorrow.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/tomorrow\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-tomorrow_night.js",
    "content": "ace.define(\"ace/theme/tomorrow_night.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tomorrow-night .ace_gutter {\\n  background: #25282c;\\n  color: #C5C8C6\\n}\\n\\n.ace-tomorrow-night .ace_print-margin {\\n  width: 1px;\\n  background: #25282c\\n}\\n\\n.ace-tomorrow-night {\\n  background-color: #1D1F21;\\n  color: #C5C8C6\\n}\\n\\n.ace-tomorrow-night .ace_cursor {\\n  color: #AEAFAD\\n}\\n\\n.ace-tomorrow-night .ace_marker-layer .ace_selection {\\n  background: #373B41\\n}\\n\\n.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #1D1F21;\\n}\\n\\n.ace-tomorrow-night .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-tomorrow-night .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #4B4E55\\n}\\n\\n.ace-tomorrow-night .ace_marker-layer .ace_active-line {\\n  background: #282A2E\\n}\\n\\n.ace-tomorrow-night .ace_gutter-active-line {\\n  background-color: #282A2E\\n}\\n\\n.ace-tomorrow-night .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #373B41\\n}\\n\\n.ace-tomorrow-night .ace_invisible {\\n  color: #4B4E55\\n}\\n\\n.ace-tomorrow-night .ace_keyword,\\n.ace-tomorrow-night .ace_meta,\\n.ace-tomorrow-night .ace_storage,\\n.ace-tomorrow-night .ace_storage.ace_type,\\n.ace-tomorrow-night .ace_support.ace_type {\\n  color: #B294BB\\n}\\n\\n.ace-tomorrow-night .ace_keyword.ace_operator {\\n  color: #8ABEB7\\n}\\n\\n.ace-tomorrow-night .ace_constant.ace_character,\\n.ace-tomorrow-night .ace_constant.ace_language,\\n.ace-tomorrow-night .ace_constant.ace_numeric,\\n.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,\\n.ace-tomorrow-night .ace_support.ace_constant,\\n.ace-tomorrow-night .ace_variable.ace_parameter {\\n  color: #DE935F\\n}\\n\\n.ace-tomorrow-night .ace_constant.ace_other {\\n  color: #CED1CF\\n}\\n\\n.ace-tomorrow-night .ace_invalid {\\n  color: #CED2CF;\\n  background-color: #DF5F5F\\n}\\n\\n.ace-tomorrow-night .ace_invalid.ace_deprecated {\\n  color: #CED2CF;\\n  background-color: #B798BF\\n}\\n\\n.ace-tomorrow-night .ace_fold {\\n  background-color: #81A2BE;\\n  border-color: #C5C8C6\\n}\\n\\n.ace-tomorrow-night .ace_entity.ace_name.ace_function,\\n.ace-tomorrow-night .ace_support.ace_function,\\n.ace-tomorrow-night .ace_variable {\\n  color: #81A2BE\\n}\\n\\n.ace-tomorrow-night .ace_support.ace_class,\\n.ace-tomorrow-night .ace_support.ace_type {\\n  color: #F0C674\\n}\\n\\n.ace-tomorrow-night .ace_heading,\\n.ace-tomorrow-night .ace_markup.ace_heading,\\n.ace-tomorrow-night .ace_string {\\n  color: #B5BD68\\n}\\n\\n.ace-tomorrow-night .ace_entity.ace_name.ace_tag,\\n.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,\\n.ace-tomorrow-night .ace_meta.ace_tag,\\n.ace-tomorrow-night .ace_string.ace_regexp,\\n.ace-tomorrow-night .ace_variable {\\n  color: #CC6666\\n}\\n\\n.ace-tomorrow-night .ace_comment {\\n  color: #969896\\n}\\n\\n.ace-tomorrow-night .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-tomorrow-night .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/tomorrow_night\",[\"require\",\"exports\",\"module\",\"ace/theme/tomorrow_night.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night\";\nexports.cssText = require(\"./tomorrow_night.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/tomorrow_night\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-tomorrow_night_blue.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_blue.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tomorrow-night-blue .ace_gutter {\\n  background: #00204b;\\n  color: #7388b5\\n}\\n\\n.ace-tomorrow-night-blue .ace_print-margin {\\n  width: 1px;\\n  background: #00204b\\n}\\n\\n.ace-tomorrow-night-blue {\\n  background-color: #002451;\\n  color: #FFFFFF\\n}\\n\\n.ace-tomorrow-night-blue .ace_constant.ace_other,\\n.ace-tomorrow-night-blue .ace_cursor {\\n  color: #FFFFFF\\n}\\n\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {\\n  background: #003F8E\\n}\\n\\n.ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #002451;\\n}\\n\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_step {\\n  background: rgb(127, 111, 19)\\n}\\n\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #404F7D\\n}\\n\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {\\n  background: #00346E\\n}\\n\\n.ace-tomorrow-night-blue .ace_gutter-active-line {\\n  background-color: #022040\\n}\\n\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #003F8E\\n}\\n\\n.ace-tomorrow-night-blue .ace_invisible {\\n  color: #404F7D\\n}\\n\\n.ace-tomorrow-night-blue .ace_keyword,\\n.ace-tomorrow-night-blue .ace_meta,\\n.ace-tomorrow-night-blue .ace_storage,\\n.ace-tomorrow-night-blue .ace_storage.ace_type,\\n.ace-tomorrow-night-blue .ace_support.ace_type {\\n  color: #EBBBFF\\n}\\n\\n.ace-tomorrow-night-blue .ace_keyword.ace_operator {\\n  color: #99FFFF\\n}\\n\\n.ace-tomorrow-night-blue .ace_constant.ace_character,\\n.ace-tomorrow-night-blue .ace_constant.ace_language,\\n.ace-tomorrow-night-blue .ace_constant.ace_numeric,\\n.ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,\\n.ace-tomorrow-night-blue .ace_support.ace_constant,\\n.ace-tomorrow-night-blue .ace_variable.ace_parameter {\\n  color: #FFC58F\\n}\\n\\n.ace-tomorrow-night-blue .ace_invalid {\\n  color: #FFFFFF;\\n  background-color: #F99DA5\\n}\\n\\n.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {\\n  color: #FFFFFF;\\n  background-color: #EBBBFF\\n}\\n\\n.ace-tomorrow-night-blue .ace_fold {\\n  background-color: #BBDAFF;\\n  border-color: #FFFFFF\\n}\\n\\n.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,\\n.ace-tomorrow-night-blue .ace_support.ace_function,\\n.ace-tomorrow-night-blue .ace_variable {\\n  color: #BBDAFF\\n}\\n\\n.ace-tomorrow-night-blue .ace_support.ace_class,\\n.ace-tomorrow-night-blue .ace_support.ace_type {\\n  color: #FFEEAD\\n}\\n\\n.ace-tomorrow-night-blue .ace_heading,\\n.ace-tomorrow-night-blue .ace_markup.ace_heading,\\n.ace-tomorrow-night-blue .ace_string {\\n  color: #D1F1A9\\n}\\n\\n.ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,\\n.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,\\n.ace-tomorrow-night-blue .ace_meta.ace_tag,\\n.ace-tomorrow-night-blue .ace_string.ace_regexp,\\n.ace-tomorrow-night-blue .ace_variable {\\n  color: #FF9DA4\\n}\\n\\n.ace-tomorrow-night-blue .ace_comment {\\n  color: #7285B7\\n}\\n\\n.ace-tomorrow-night-blue .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-tomorrow-night-blue .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/tomorrow_night_blue\",[\"require\",\"exports\",\"module\",\"ace/theme/tomorrow_night_blue.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-blue\";\nexports.cssText = require(\"./tomorrow_night_blue.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/tomorrow_night_blue\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-tomorrow_night_bright.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_bright.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tomorrow-night-bright .ace_gutter {\\n  background: #1a1a1a;\\n  color: #DEDEDE\\n}\\n\\n.ace-tomorrow-night-bright .ace_print-margin {\\n  width: 1px;\\n  background: #1a1a1a\\n}\\n\\n.ace-tomorrow-night-bright {\\n  background-color: #000000;\\n  color: #DEDEDE\\n}\\n\\n.ace-tomorrow-night-bright .ace_cursor {\\n  color: #9F9F9F\\n}\\n\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_selection {\\n  background: #424242\\n}\\n\\n.ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #000000;\\n}\\n\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #888888\\n}\\n\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_highlight {\\n  border: 1px solid rgb(110, 119, 0);\\n  border-bottom: 0;\\n  box-shadow: inset 0 -1px rgb(110, 119, 0);\\n  margin: -1px 0 0 -1px;\\n  background: rgba(255, 235, 0, 0.1)\\n}\\n\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_active-line {\\n  background: #2A2A2A\\n}\\n\\n.ace-tomorrow-night-bright .ace_gutter-active-line {\\n  background-color: #2A2A2A\\n}\\n\\n.ace-tomorrow-night-bright .ace_stack {\\n  background-color: rgb(66, 90, 44)\\n}\\n\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #888888\\n}\\n\\n.ace-tomorrow-night-bright .ace_invisible {\\n  color: #343434\\n}\\n\\n.ace-tomorrow-night-bright .ace_keyword,\\n.ace-tomorrow-night-bright .ace_meta,\\n.ace-tomorrow-night-bright .ace_storage,\\n.ace-tomorrow-night-bright .ace_storage.ace_type,\\n.ace-tomorrow-night-bright .ace_support.ace_type {\\n  color: #C397D8\\n}\\n\\n.ace-tomorrow-night-bright .ace_keyword.ace_operator {\\n  color: #70C0B1\\n}\\n\\n.ace-tomorrow-night-bright .ace_constant.ace_character,\\n.ace-tomorrow-night-bright .ace_constant.ace_language,\\n.ace-tomorrow-night-bright .ace_constant.ace_numeric,\\n.ace-tomorrow-night-bright .ace_keyword.ace_other.ace_unit,\\n.ace-tomorrow-night-bright .ace_support.ace_constant,\\n.ace-tomorrow-night-bright .ace_variable.ace_parameter {\\n  color: #E78C45\\n}\\n\\n.ace-tomorrow-night-bright .ace_constant.ace_other {\\n  color: #EEEEEE\\n}\\n\\n.ace-tomorrow-night-bright .ace_invalid {\\n  color: #CED2CF;\\n  background-color: #DF5F5F\\n}\\n\\n.ace-tomorrow-night-bright .ace_invalid.ace_deprecated {\\n  color: #CED2CF;\\n  background-color: #B798BF\\n}\\n\\n.ace-tomorrow-night-bright .ace_fold {\\n  background-color: #7AA6DA;\\n  border-color: #DEDEDE\\n}\\n\\n.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function,\\n.ace-tomorrow-night-bright .ace_support.ace_function,\\n.ace-tomorrow-night-bright .ace_variable {\\n  color: #7AA6DA\\n}\\n\\n.ace-tomorrow-night-bright .ace_support.ace_class,\\n.ace-tomorrow-night-bright .ace_support.ace_type {\\n  color: #E7C547\\n}\\n\\n.ace-tomorrow-night-bright .ace_heading,\\n.ace-tomorrow-night-bright .ace_markup.ace_heading,\\n.ace-tomorrow-night-bright .ace_string {\\n  color: #B9CA4A\\n}\\n\\n.ace-tomorrow-night-bright .ace_entity.ace_name.ace_tag,\\n.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name,\\n.ace-tomorrow-night-bright .ace_meta.ace_tag,\\n.ace-tomorrow-night-bright .ace_string.ace_regexp,\\n.ace-tomorrow-night-bright .ace_variable {\\n  color: #D54E53\\n}\\n\\n.ace-tomorrow-night-bright .ace_comment {\\n  color: #969896\\n}\\n\\n.ace-tomorrow-night-bright .ace_c9searchresults.ace_keyword {\\n  color: #C2C280\\n}\\n\\n.ace-tomorrow-night-bright .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-tomorrow-night-bright .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/tomorrow_night_bright\",[\"require\",\"exports\",\"module\",\"ace/theme/tomorrow_night_bright.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-bright\";\nexports.cssText = require(\"./tomorrow_night_bright.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/tomorrow_night_bright\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-tomorrow_night_eighties.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_eighties.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tomorrow-night-eighties .ace_gutter {\\n  background: #272727;\\n  color: #CCC\\n}\\n\\n.ace-tomorrow-night-eighties .ace_print-margin {\\n  width: 1px;\\n  background: #272727\\n}\\n\\n.ace-tomorrow-night-eighties {\\n  background-color: #2D2D2D;\\n  color: #CCCCCC\\n}\\n\\n.ace-tomorrow-night-eighties .ace_constant.ace_other,\\n.ace-tomorrow-night-eighties .ace_cursor {\\n  color: #CCCCCC\\n}\\n\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {\\n  background: #515151\\n}\\n\\n.ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #2D2D2D;\\n}\\n\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #6A6A6A\\n}\\n\\n.ace-tomorrow-night-bright .ace_stack {\\n  background: rgb(66, 90, 44)\\n}\\n\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {\\n  background: #393939\\n}\\n\\n.ace-tomorrow-night-eighties .ace_gutter-active-line {\\n  background-color: #393939\\n}\\n\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #515151\\n}\\n\\n.ace-tomorrow-night-eighties .ace_invisible {\\n  color: #6A6A6A\\n}\\n\\n.ace-tomorrow-night-eighties .ace_keyword,\\n.ace-tomorrow-night-eighties .ace_meta,\\n.ace-tomorrow-night-eighties .ace_storage,\\n.ace-tomorrow-night-eighties .ace_storage.ace_type,\\n.ace-tomorrow-night-eighties .ace_support.ace_type {\\n  color: #CC99CC\\n}\\n\\n.ace-tomorrow-night-eighties .ace_keyword.ace_operator {\\n  color: #66CCCC\\n}\\n\\n.ace-tomorrow-night-eighties .ace_constant.ace_character,\\n.ace-tomorrow-night-eighties .ace_constant.ace_language,\\n.ace-tomorrow-night-eighties .ace_constant.ace_numeric,\\n.ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,\\n.ace-tomorrow-night-eighties .ace_support.ace_constant,\\n.ace-tomorrow-night-eighties .ace_variable.ace_parameter {\\n  color: #F99157\\n}\\n\\n.ace-tomorrow-night-eighties .ace_invalid {\\n  color: #CDCDCD;\\n  background-color: #F2777A\\n}\\n\\n.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {\\n  color: #CDCDCD;\\n  background-color: #CC99CC\\n}\\n\\n.ace-tomorrow-night-eighties .ace_fold {\\n  background-color: #6699CC;\\n  border-color: #CCCCCC\\n}\\n\\n.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,\\n.ace-tomorrow-night-eighties .ace_support.ace_function,\\n.ace-tomorrow-night-eighties .ace_variable {\\n  color: #6699CC\\n}\\n\\n.ace-tomorrow-night-eighties .ace_support.ace_class,\\n.ace-tomorrow-night-eighties .ace_support.ace_type {\\n  color: #FFCC66\\n}\\n\\n.ace-tomorrow-night-eighties .ace_heading,\\n.ace-tomorrow-night-eighties .ace_markup.ace_heading,\\n.ace-tomorrow-night-eighties .ace_string {\\n  color: #99CC99\\n}\\n\\n.ace-tomorrow-night-eighties .ace_comment {\\n  color: #999999\\n}\\n\\n.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,\\n.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,\\n.ace-tomorrow-night-eighties .ace_meta.ace_tag,\\n.ace-tomorrow-night-eighties .ace_variable {\\n  color: #F2777A\\n}\\n\\n.ace-tomorrow-night-eighties .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-tomorrow-night-eighties .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/tomorrow_night_eighties\",[\"require\",\"exports\",\"module\",\"ace/theme/tomorrow_night_eighties.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-eighties\";\nexports.cssText = require(\"./tomorrow_night_eighties.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/tomorrow_night_eighties\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-twilight.js",
    "content": "ace.define(\"ace/theme/twilight.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-twilight .ace_gutter {\\n  background: #232323;\\n  color: #E2E2E2\\n}\\n\\n.ace-twilight .ace_print-margin {\\n  width: 1px;\\n  background: #232323\\n}\\n\\n.ace-twilight {\\n  background-color: #141414;\\n  color: #F8F8F8\\n}\\n\\n.ace-twilight .ace_cursor {\\n  color: #A7A7A7\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_selection {\\n  background: rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-twilight.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #141414;\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_active-line {\\n  background: rgba(255, 255, 255, 0.031)\\n}\\n\\n.ace-twilight .ace_gutter-active-line {\\n  background-color: rgba(255, 255, 255, 0.031)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_selected-word {\\n  border: 1px solid rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-twilight .ace_invisible {\\n  color: rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-twilight .ace_keyword,\\n.ace-twilight .ace_meta {\\n  color: #CDA869\\n}\\n\\n.ace-twilight .ace_constant,\\n.ace-twilight .ace_constant.ace_character,\\n.ace-twilight .ace_constant.ace_character.ace_escape,\\n.ace-twilight .ace_constant.ace_other,\\n.ace-twilight .ace_heading,\\n.ace-twilight .ace_markup.ace_heading,\\n.ace-twilight .ace_support.ace_constant {\\n  color: #CF6A4C\\n}\\n\\n.ace-twilight .ace_invalid.ace_illegal {\\n  color: #F8F8F8;\\n  background-color: rgba(86, 45, 86, 0.75)\\n}\\n\\n.ace-twilight .ace_invalid.ace_deprecated {\\n  text-decoration: underline;\\n  font-style: italic;\\n  color: #D2A8A1\\n}\\n\\n.ace-twilight .ace_support {\\n  color: #9B859D\\n}\\n\\n.ace-twilight .ace_fold {\\n  background-color: #AC885B;\\n  border-color: #F8F8F8\\n}\\n\\n.ace-twilight .ace_support.ace_function {\\n  color: #DAD085\\n}\\n\\n.ace-twilight .ace_list,\\n.ace-twilight .ace_markup.ace_list,\\n.ace-twilight .ace_storage {\\n  color: #F9EE98\\n}\\n\\n.ace-twilight .ace_entity.ace_name.ace_function,\\n.ace-twilight .ace_meta.ace_tag {\\n  color: #AC885B\\n}\\n\\n.ace-twilight .ace_string {\\n  color: #8F9D6A\\n}\\n\\n.ace-twilight .ace_string.ace_regexp {\\n  color: #E9C062\\n}\\n\\n.ace-twilight .ace_comment {\\n  font-style: italic;\\n  color: #5F5A60\\n}\\n\\n.ace-twilight .ace_variable {\\n  color: #7587A6\\n}\\n\\n.ace-twilight .ace_xml-pe {\\n  color: #494949\\n}\\n\\n.ace-twilight .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-twilight .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/twilight\",[\"require\",\"exports\",\"module\",\"ace/theme/twilight.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-twilight\";\nexports.cssText = require(\"./twilight.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/twilight\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-vibrant_ink.js",
    "content": "ace.define(\"ace/theme/vibrant_ink.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-vibrant-ink .ace_gutter {\\n  background: #1a1a1a;\\n  color: #BEBEBE\\n}\\n\\n.ace-vibrant-ink .ace_print-margin {\\n  width: 1px;\\n  background: #1a1a1a\\n}\\n\\n.ace-vibrant-ink {\\n  background-color: #0F0F0F;\\n  color: #FFFFFF\\n}\\n\\n.ace-vibrant-ink .ace_cursor {\\n  color: #FFFFFF\\n}\\n\\n.ace-vibrant-ink .ace_marker-layer .ace_selection {\\n  background: #6699CC\\n}\\n\\n.ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #0F0F0F;\\n}\\n\\n.ace-vibrant-ink .ace_marker-layer .ace_step {\\n  background: rgb(102, 82, 0)\\n}\\n\\n.ace-vibrant-ink .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #404040\\n}\\n\\n.ace-vibrant-ink .ace_marker-layer .ace_active-line {\\n  background: #333333\\n}\\n\\n.ace-vibrant-ink .ace_gutter-active-line {\\n  background-color: #333333\\n}\\n\\n.ace-vibrant-ink .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #6699CC\\n}\\n\\n.ace-vibrant-ink .ace_invisible {\\n  color: #404040\\n}\\n\\n.ace-vibrant-ink .ace_keyword,\\n.ace-vibrant-ink .ace_meta {\\n  color: #FF6600\\n}\\n\\n.ace-vibrant-ink .ace_constant,\\n.ace-vibrant-ink .ace_constant.ace_character,\\n.ace-vibrant-ink .ace_constant.ace_character.ace_escape,\\n.ace-vibrant-ink .ace_constant.ace_other {\\n  color: #339999\\n}\\n\\n.ace-vibrant-ink .ace_constant.ace_numeric {\\n  color: #99CC99\\n}\\n\\n.ace-vibrant-ink .ace_invalid,\\n.ace-vibrant-ink .ace_invalid.ace_deprecated {\\n  color: #CCFF33;\\n  background-color: #000000\\n}\\n\\n.ace-vibrant-ink .ace_fold {\\n  background-color: #FFCC00;\\n  border-color: #FFFFFF\\n}\\n\\n.ace-vibrant-ink .ace_entity.ace_name.ace_function,\\n.ace-vibrant-ink .ace_support.ace_function,\\n.ace-vibrant-ink .ace_variable {\\n  color: #FFCC00\\n}\\n\\n.ace-vibrant-ink .ace_variable.ace_parameter {\\n  font-style: italic\\n}\\n\\n.ace-vibrant-ink .ace_string {\\n  color: #66FF00\\n}\\n\\n.ace-vibrant-ink .ace_string.ace_regexp {\\n  color: #44B4CC\\n}\\n\\n.ace-vibrant-ink .ace_comment {\\n  color: #9933CC\\n}\\n\\n.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {\\n  font-style: italic;\\n  color: #99CC99\\n}\\n\\n.ace-vibrant-ink .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYNDTc/oPAALPAZ7hxlbYAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-vibrant-ink .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/vibrant_ink\",[\"require\",\"exports\",\"module\",\"ace/theme/vibrant_ink.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = true;\nexports.cssClass = \"ace-vibrant-ink\";\nexports.cssText = require(\"./vibrant_ink.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/vibrant_ink\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/theme-xcode.js",
    "content": "ace.define(\"ace/theme/xcode.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"/* THIS THEME WAS AUTOGENERATED BY Theme.tmpl.css (UUID: EE3AD170-2B7F-4DE1-B724-C75F13FE0085) */\\n\\n.ace-xcode .ace_gutter {\\n  background: #e8e8e8;\\n  color: #333\\n}\\n\\n.ace-xcode .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8\\n}\\n\\n.ace-xcode {\\n  background-color: #FFFFFF;\\n  color: #000000\\n}\\n\\n.ace-xcode .ace_cursor {\\n  color: #000000\\n}\\n\\n.ace-xcode .ace_marker-layer .ace_selection {\\n  background: #B5D5FF\\n}\\n\\n.ace-xcode.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px #FFFFFF;\\n}\\n\\n.ace-xcode .ace_marker-layer .ace_step {\\n  background: rgb(198, 219, 174)\\n}\\n\\n.ace-xcode .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid #BFBFBF\\n}\\n\\n.ace-xcode .ace_marker-layer .ace_active-line {\\n  background: rgba(0, 0, 0, 0.071)\\n}\\n\\n.ace-xcode .ace_gutter-active-line {\\n  background-color: rgba(0, 0, 0, 0.071)\\n}\\n\\n.ace-xcode .ace_marker-layer .ace_selected-word {\\n  border: 1px solid #B5D5FF\\n}\\n\\n.ace-xcode .ace_constant.ace_language,\\n.ace-xcode .ace_keyword,\\n.ace-xcode .ace_meta,\\n.ace-xcode .ace_variable.ace_language {\\n  color: #C800A4\\n}\\n\\n.ace-xcode .ace_invisible {\\n  color: #BFBFBF\\n}\\n\\n.ace-xcode .ace_constant.ace_character,\\n.ace-xcode .ace_constant.ace_other {\\n  color: #275A5E\\n}\\n\\n.ace-xcode .ace_constant.ace_numeric {\\n  color: #3A00DC\\n}\\n\\n.ace-xcode .ace_entity.ace_other.ace_attribute-name,\\n.ace-xcode .ace_support.ace_constant,\\n.ace-xcode .ace_support.ace_function {\\n  color: #450084\\n}\\n\\n.ace-xcode .ace_fold {\\n  background-color: #C800A4;\\n  border-color: #000000\\n}\\n\\n.ace-xcode .ace_entity.ace_name.ace_tag,\\n.ace-xcode .ace_support.ace_class,\\n.ace-xcode .ace_support.ace_type {\\n  color: #790EAD\\n}\\n\\n.ace-xcode .ace_storage {\\n  color: #C900A4\\n}\\n\\n.ace-xcode .ace_string {\\n  color: #DF0002\\n}\\n\\n.ace-xcode .ace_comment {\\n  color: #008E00\\n}\\n\\n.ace-xcode .ace_indent-guide {\\n  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y\\n}\\n\\n.ace-xcode .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n} \\n\";\n\n});\n\nace.define(\"ace/theme/xcode\",[\"require\",\"exports\",\"module\",\"ace/theme/xcode.css\",\"ace/lib/dom\"], function(require, exports, module){exports.isDark = false;\nexports.cssClass = \"ace-xcode\";\nexports.cssText = require(\"./xcode.css\");\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});                (function() {\n                    ace.require([\"ace/theme/xcode\"], function(m) {\n                        if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n                            module.exports = m;\n                        }\n                    });\n                })();\n            "
  },
  {
    "path": "publishable/assets/js/ace/libs/worker-base.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err && err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err && err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        sender = window.sender = window.initSender();\n        var clazz = this.require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function () {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    this.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    }\n    else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n    }\n    else {\n        this.insert({ row: 0, column: 0 }, textOrLines);\n    }\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    this.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function (text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    }\n    else {\n        this.$split = function (text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function () {\n        return this.$lines.length;\n    };\n    this.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    this.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    this.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    this.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    this.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    this.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    this.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    this.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    this.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    this.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    this.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\n\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                var d, err; \n                if (Array.isArray(data[i+1])) {\n                    d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                \n                if ((d.action == \"insert\" ? d.start : d.end).row >= doc.$lines.length) {\n                    err = new Error(\"Invalid delta\");\n                    err.data = {\n                        path: _self.$path,\n                        linesLength: doc.$lines.length,\n                        start: d.start,\n                        end: d.end\n                    };\n                    throw err;\n                }\n\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n"
  },
  {
    "path": "publishable/assets/js/ace/libs/worker-coffee.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err && err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err && err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        sender = window.sender = window.initSender();\n        var clazz = this.require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function () {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    this.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    }\n    else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n    }\n    else {\n        this.insert({ row: 0, column: 0 }, textOrLines);\n    }\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    this.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function (text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    }\n    else {\n        this.$split = function (text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function () {\n        return this.$lines.length;\n    };\n    this.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    this.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    this.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    this.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    this.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    this.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    this.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    this.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    this.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    this.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    this.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\n\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                var d, err; \n                if (Array.isArray(data[i+1])) {\n                    d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                \n                if ((d.action == \"insert\" ? d.start : d.end).row >= doc.$lines.length) {\n                    err = new Error(\"Invalid delta\");\n                    err.data = {\n                        path: _self.$path,\n                        linesLength: doc.$lines.length,\n                        start: d.start,\n                        end: d.end\n                    };\n                    throw err;\n                }\n\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/coffee/coffee\",[], function(require, exports, module) {\nfunction define(f) { module.exports = f() }; define.amd = {};\nvar _typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},_get=function e(a,t,o){null===a&&(a=Function.prototype);var n=Object.getOwnPropertyDescriptor(a,t);if(n===void 0){var r=Object.getPrototypeOf(a);return null===r?void 0:e(r,t,o)}if(\"value\"in n)return n.value;var l=n.get;return void 0===l?void 0:l.call(o)},_slicedToArray=function(){function e(e,a){var t=[],o=!0,n=!1,r=void 0;try{for(var l=e[Symbol.iterator](),s;!(o=(s=l.next()).done)&&(t.push(s.value),!(a&&t.length===a));o=!0);}catch(e){n=!0,r=e}finally{try{!o&&l[\"return\"]&&l[\"return\"]()}finally{if(n)throw r}}return t}return function(a,t){if(Array.isArray(a))return a;if(Symbol.iterator in Object(a))return e(a,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),_createClass=function(){function e(e,a){for(var t=0,o;t<a.length;t++)o=a[t],o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(a,t,o){return t&&e(a.prototype,t),o&&e(a,o),a}}();function _toArray(e){return Array.isArray(e)?e:Array.from(e)}function _possibleConstructorReturn(e,a){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return a&&(\"object\"==typeof a||\"function\"==typeof a)?a:e}function _inherits(e,a){if(\"function\"!=typeof a&&null!==a)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof a);e.prototype=Object.create(a&&a.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),a&&(Object.setPrototypeOf?Object.setPrototypeOf(e,a):e.__proto__=a)}function _classCallCheck(e,a){if(!(e instanceof a))throw new TypeError(\"Cannot call a class as a function\")}function _toConsumableArray(e){if(Array.isArray(e)){for(var a=0,t=Array(e.length);a<e.length;a++)t[a]=e[a];return t}return Array.from(e)}(function(root){var CoffeeScript=function(){function require(e){return require[e]}var _Mathabs=Math.abs,_StringfromCharCode=String.fromCharCode,_Mathfloor=Math.floor;return require[\"../../package.json\"]=function(){return{name:\"coffeescript\",description:\"Unfancy JavaScript\",keywords:[\"javascript\",\"language\",\"coffeescript\",\"compiler\"],author:\"Jeremy Ashkenas\",version:\"2.2.1\",license:\"MIT\",engines:{node:\">=6\"},directories:{lib:\"./lib/coffeescript\"},main:\"./lib/coffeescript/index\",browser:\"./lib/coffeescript/browser\",bin:{coffee:\"./bin/coffee\",cake:\"./bin/cake\"},files:[\"bin\",\"lib\",\"register.js\",\"repl.js\"],scripts:{test:\"node ./bin/cake test\",\"test-harmony\":\"node --harmony ./bin/cake test\"},homepage:\"http://coffeescript.org\",bugs:\"https://github.com/jashkenas/coffeescript/issues\",repository:{type:\"git\",url:\"git://github.com/jashkenas/coffeescript.git\"},devDependencies:{\"babel-core\":\"~6.26.0\",\"babel-preset-babili\":\"~0.1.4\",\"babel-preset-env\":\"~1.6.1\",\"babel-preset-minify\":\"^0.3.0\",codemirror:\"^5.32.0\",docco:\"~0.8.0\",\"highlight.js\":\"~9.12.0\",jison:\">=0.4.18\",\"markdown-it\":\"~8.4.0\",underscore:\"~1.8.3\",webpack:\"~3.10.0\"},dependencies:{}}}(),require[\"./helpers\"]=function(){var e={};return function(){var a,t,o,n,r,l,s,i;e.starts=function(e,a,t){return a===e.substr(t,a.length)},e.ends=function(e,a,t){var o;return o=a.length,a===e.substr(e.length-o-(t||0),o)},e.repeat=s=function(e,a){var t;for(t=\"\";0<a;)1&a&&(t+=e),a>>>=1,e+=e;return t},e.compact=function(e){var a,t,o,n;for(n=[],a=0,o=e.length;a<o;a++)t=e[a],t&&n.push(t);return n},e.count=function(e,a){var t,o;if(t=o=0,!a.length)return 1/0;for(;o=1+e.indexOf(a,o);)t++;return t},e.merge=function(e,a){return n(n({},e),a)},n=e.extend=function(e,a){var t,o;for(t in a)o=a[t],e[t]=o;return e},e.flatten=r=function flatten(e){var a,t,o,n;for(t=[],o=0,n=e.length;o<n;o++)a=e[o],\"[object Array]\"===Object.prototype.toString.call(a)?t=t.concat(r(a)):t.push(a);return t},e.del=function(e,a){var t;return t=e[a],delete e[a],t},e.some=null==(l=Array.prototype.some)?function(a){var t,e,o,n;for(n=this,e=0,o=n.length;e<o;e++)if(t=n[e],a(t))return!0;return!1}:l,e.invertLiterate=function(e){var a,t,o,n,r,l,s,i,d;for(i=[],a=/^\\s*$/,o=/^[\\t ]/,s=/^(?:\\t?| {0,3})(?:[\\*\\-\\+]|[0-9]{1,9}\\.)[ \\t]/,n=!1,d=e.split(\"\\n\"),t=0,r=d.length;t<r;t++)l=d[t],a.test(l)?(n=!1,i.push(l)):n||s.test(l)?(n=!0,i.push(\"# \"+l)):!n&&o.test(l)?i.push(l):(n=!0,i.push(\"# \"+l));return i.join(\"\\n\")},t=function(e,a){return a?{first_line:e.first_line,first_column:e.first_column,last_line:a.last_line,last_column:a.last_column}:e},o=function(e){return e.first_line+\"x\"+e.first_column+\"-\"+e.last_line+\"x\"+e.last_column},e.addDataToNode=function(e,n,r){return function(l){var s,i,d,c,p,u;if(null!=(null==l?void 0:l.updateLocationDataIfMissing)&&null!=n&&l.updateLocationDataIfMissing(t(n,r)),!e.tokenComments)for(e.tokenComments={},c=e.parser.tokens,s=0,i=c.length;s<i;s++)if(p=c[s],!!p.comments)if(u=o(p[2]),null==e.tokenComments[u])e.tokenComments[u]=p.comments;else{var m;(m=e.tokenComments[u]).push.apply(m,_toConsumableArray(p.comments))}return null!=l.locationData&&(d=o(l.locationData),null!=e.tokenComments[d]&&a(e.tokenComments[d],l)),l}},e.attachCommentsToNode=a=function(e,a){var t;if(null!=e&&0!==e.length)return null==a.comments&&(a.comments=[]),(t=a.comments).push.apply(t,_toConsumableArray(e))},e.locationDataToString=function(e){var a;return\"2\"in e&&\"first_line\"in e[2]?a=e[2]:\"first_line\"in e&&(a=e),a?a.first_line+1+\":\"+(a.first_column+1)+\"-\"+(a.last_line+1+\":\"+(a.last_column+1)):\"No location data\"},e.baseFileName=function(e){var a=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],t=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2],o,n;return(n=t?/\\\\|\\//:/\\//,o=e.split(n),e=o[o.length-1],!(a&&0<=e.indexOf(\".\")))?e:(o=e.split(\".\"),o.pop(),\"coffee\"===o[o.length-1]&&1<o.length&&o.pop(),o.join(\".\"))},e.isCoffee=function(e){return/\\.((lit)?coffee|coffee\\.md)$/.test(e)},e.isLiterate=function(e){return/\\.(litcoffee|coffee\\.md)$/.test(e)},e.throwSyntaxError=function(e,a){var t;throw t=new SyntaxError(e),t.location=a,t.toString=i,t.stack=t.toString(),t},e.updateSyntaxError=function(e,a,t){return e.toString===i&&(e.code||(e.code=a),e.filename||(e.filename=t),e.stack=e.toString()),e},i=function(){var e,a,t,o,n,r,l,i,d,c,p,u,m,h;if(!(this.code&&this.location))return Error.prototype.toString.call(this);var g=this.location;return l=g.first_line,r=g.first_column,d=g.last_line,i=g.last_column,null==d&&(d=l),null==i&&(i=r),n=this.filename||\"[stdin]\",e=this.code.split(\"\\n\")[l],h=r,o=l===d?i+1:e.length,c=e.slice(0,h).replace(/[^\\s]/g,\" \")+s(\"^\",o-h),\"undefined\"!=typeof process&&null!==process&&(t=(null==(p=process.stdout)?void 0:p.isTTY)&&(null==(u=process.env)||!u.NODE_DISABLE_COLORS)),(null==(m=this.colorful)?t:m)&&(a=function(e){return\"\u001b[1;31m\"+e+\"\u001b[0m\"},e=e.slice(0,h)+a(e.slice(h,o))+e.slice(o),c=a(c)),n+\":\"+(l+1)+\":\"+(r+1)+\": error: \"+this.message+\"\\n\"+e+\"\\n\"+c},e.nameWhitespaceCharacter=function(e){return\" \"===e?\"space\":\"\\n\"===e?\"newline\":\"\\r\"===e?\"carriage return\":\"\\t\"===e?\"tab\":e}}.call(this),{exports:e}.exports}(),require[\"./rewriter\"]=function(){var e={};return function(){var a=[].indexOf,t=require(\"./helpers\"),o,n,r,l,s,d,c,p,u,m,h,i,g,f,y,T,N,v,k,b,$,_,C;for(C=t.throwSyntaxError,$=function(e,a){var t,o,n,r,l;if(e.comments){if(a.comments&&0!==a.comments.length){for(l=[],r=e.comments,o=0,n=r.length;o<n;o++)t=r[o],t.unshift?l.push(t):a.comments.push(t);a.comments=l.concat(a.comments)}else a.comments=e.comments;return delete e.comments}},N=function(e,a,t,o){var n;return n=[e,a],n.generated=!0,t&&(n.origin=t),o&&$(o,n),n},e.Rewriter=f=function(){var e=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"rewrite\",value:function rewrite(e){var a,o,n;return this.tokens=e,(\"undefined\"!=typeof process&&null!==process?null==(a=process.env)?void 0:a.DEBUG_TOKEN_STREAM:void 0)&&(process.env.DEBUG_REWRITTEN_TOKEN_STREAM&&console.log(\"Initial token stream:\"),console.log(function(){var e,a,t,o;for(t=this.tokens,o=[],e=0,a=t.length;e<a;e++)n=t[e],o.push(n[0]+\"/\"+n[1]+(n.comments?\"*\":\"\"));return o}.call(this).join(\" \"))),this.removeLeadingNewlines(),this.closeOpenCalls(),this.closeOpenIndexes(),this.normalizeLines(),this.tagPostfixConditionals(),this.addImplicitBracesAndParens(),this.addParensToChainedDoIife(),this.rescueStowawayComments(),this.addLocationDataToGeneratedTokens(),this.enforceValidCSXAttributes(),this.fixOutdentLocationData(),(\"undefined\"!=typeof process&&null!==process?null==(o=process.env)?void 0:o.DEBUG_REWRITTEN_TOKEN_STREAM:void 0)&&(process.env.DEBUG_TOKEN_STREAM&&console.log(\"Rewritten token stream:\"),console.log(function(){var e,a,t,o;for(t=this.tokens,o=[],e=0,a=t.length;e<a;e++)n=t[e],o.push(n[0]+\"/\"+n[1]+(n.comments?\"*\":\"\"));return o}.call(this).join(\" \"))),this.tokens}},{key:\"scanTokens\",value:function scanTokens(e){var a,t,o;for(o=this.tokens,a=0;t=o[a];)a+=e.call(this,t,a,o);return!0}},{key:\"detectEnd\",value:function detectEnd(e,t,o){var n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{},r,l,s,i,p;for(p=this.tokens,r=0;i=p[e];){if(0===r&&t.call(this,i,e))return o.call(this,i,e);if((l=i[0],0<=a.call(c,l))?r+=1:(s=i[0],0<=a.call(d,s))&&(r-=1),0>r)return n.returnOnNegativeLevel?void 0:o.call(this,i,e);e+=1}return e-1}},{key:\"removeLeadingNewlines\",value:function removeLeadingNewlines(){var e,a,t,o,n,r,l,s,i;for(l=this.tokens,e=a=0,n=l.length;a<n;e=++a){var d=_slicedToArray(l[e],1);if(i=d[0],\"TERMINATOR\"!==i)break}if(0!==e){for(s=this.tokens.slice(0,e),t=0,r=s.length;t<r;t++)o=s[t],$(o,this.tokens[e]);return this.tokens.splice(0,e)}}},{key:\"closeOpenCalls\",value:function closeOpenCalls(){var e,a;return a=function(e){var a;return\")\"===(a=e[0])||\"CALL_END\"===a},e=function(e){return e[0]=\"CALL_END\"},this.scanTokens(function(t,o){return\"CALL_START\"===t[0]&&this.detectEnd(o+1,a,e),1})}},{key:\"closeOpenIndexes\",value:function closeOpenIndexes(){var e,a;return a=function(e){var a;return\"]\"===(a=e[0])||\"INDEX_END\"===a},e=function(e){return e[0]=\"INDEX_END\"},this.scanTokens(function(t,o){return\"INDEX_START\"===t[0]&&this.detectEnd(o+1,a,e),1})}},{key:\"indexOfTag\",value:function indexOfTag(e){var t,o,n,r,l;t=0;for(var s=arguments.length,i=Array(1<s?s-1:0),d=1;d<s;d++)i[d-1]=arguments[d];for(o=n=0,r=i.length;0<=r?0<=n&&n<r:0>=n&&n>r;o=0<=r?++n:--n)if(null!=i[o]&&(\"string\"==typeof i[o]&&(i[o]=[i[o]]),l=this.tag(e+o+t),0>a.call(i[o],l)))return-1;return e+o+t-1}},{key:\"looksObjectish\",value:function looksObjectish(e){var t,o;return-1!==this.indexOfTag(e,\"@\",null,\":\")||-1!==this.indexOfTag(e,null,\":\")||(o=this.indexOfTag(e,c),!!(-1!==o&&(t=null,this.detectEnd(o+1,function(e){var t;return t=e[0],0<=a.call(d,t)},function(e,a){return t=a}),\":\"===this.tag(t+1))))}},{key:\"findTagsBackwards\",value:function findTagsBackwards(e,t){var o,n,r,l,s,i,p;for(o=[];0<=e&&(o.length||(l=this.tag(e),0>a.call(t,l))&&((s=this.tag(e),0>a.call(c,s))||this.tokens[e].generated)&&(i=this.tag(e),0>a.call(g,i)));)(n=this.tag(e),0<=a.call(d,n))&&o.push(this.tag(e)),(r=this.tag(e),0<=a.call(c,r))&&o.length&&o.pop(),e-=1;return p=this.tag(e),0<=a.call(t,p)}},{key:\"addImplicitBracesAndParens\",value:function addImplicitBracesAndParens(){var e,t;return e=[],t=null,this.scanTokens(function(o,l,f){var i=this,y=_slicedToArray(o,1),T,v,b,$,_,C,D,E,x,I,S,A,R,k,O,L,F,w,P,j,M,U,V,s,B,G,H,W,X,Y,q,z,J;J=y[0];var K=P=0<l?f[l-1]:[],Z=_slicedToArray(K,1);w=Z[0];var Q=L=l<f.length-1?f[l+1]:[],ee=_slicedToArray(Q,1);if(O=ee[0],W=function(){return e[e.length-1]},X=l,b=function(e){return l-X+e},I=function(e){var a;return null==e||null==(a=e[2])?void 0:a.ours},A=function(e){return I(e)&&\"{\"===(null==e?void 0:e[0])},S=function(e){return I(e)&&\"(\"===(null==e?void 0:e[0])},C=function(){return I(W())},D=function(){return S(W())},x=function(){return A(W())},E=function(){var e;return C()&&\"CONTROL\"===(null==(e=W())?void 0:e[0])},Y=function(a){return e.push([\"(\",a,{ours:!0}]),f.splice(a,0,N(\"CALL_START\",\"(\",[\"\",\"implicit function call\",o[2]],P))},T=function(){return e.pop(),f.splice(l,0,N(\"CALL_END\",\")\",[\"\",\"end of input\",o[2]],P)),l+=1},q=function(a){var t=!(1<arguments.length&&void 0!==arguments[1])||arguments[1],n;return e.push([\"{\",a,{sameLine:!0,startsLine:t,ours:!0}]),n=new String(\"{\"),n.generated=!0,f.splice(a,0,N(\"{\",n,o,P))},v=function(a){return a=null==a?l:a,e.pop(),f.splice(a,0,N(\"}\",\"}\",o,P)),l+=1},$=function(e){var a;return a=null,i.detectEnd(e,function(e){return\"TERMINATOR\"===e[0]},function(e,t){return a=t},{returnOnNegativeLevel:!0}),null!=a&&i.looksObjectish(a+1)},(D()||x())&&0<=a.call(r,J)||x()&&\":\"===w&&\"FOR\"===J)return e.push([\"CONTROL\",l,{ours:!0}]),b(1);if(\"INDENT\"===J&&C()){if(\"=>\"!==w&&\"->\"!==w&&\"[\"!==w&&\"(\"!==w&&\",\"!==w&&\"{\"!==w&&\"ELSE\"!==w&&\"=\"!==w)for(;D()||x()&&\":\"!==w;)D()?T():v();return E()&&e.pop(),e.push([J,l]),b(1)}if(0<=a.call(c,J))return e.push([J,l]),b(1);if(0<=a.call(d,J)){for(;C();)D()?T():x()?v():e.pop();t=e.pop()}if(_=function(){var e,t,n,r;return(n=i.findTagsBackwards(l,[\"FOR\"])&&i.findTagsBackwards(l,[\"FORIN\",\"FOROF\",\"FORFROM\"]),e=n||i.findTagsBackwards(l,[\"WHILE\",\"UNTIL\",\"LOOP\",\"LEADING_WHEN\"]),!!e)&&(t=!1,r=o[2].first_line,i.detectEnd(l,function(e){var t;return t=e[0],0<=a.call(g,t)},function(e,a){var o=f[a-1]||[],n=_slicedToArray(o,3),l;return w=n[0],l=n[2].first_line,t=r===l&&(\"->\"===w||\"=>\"===w)},{returnOnNegativeLevel:!0}),t)},(0<=a.call(m,J)&&o.spaced||\"?\"===J&&0<l&&!f[l-1].spaced)&&(0<=a.call(p,O)||\"...\"===O&&(j=this.tag(l+2),0<=a.call(p,j))&&!this.findTagsBackwards(l,[\"INDEX_START\",\"[\"])||0<=a.call(h,O)&&!L.spaced&&!L.newLine)&&!_())return\"?\"===J&&(J=o[0]=\"FUNC_EXIST\"),Y(l+1),b(2);if(0<=a.call(m,J)&&-1<this.indexOfTag(l+1,\"INDENT\")&&this.looksObjectish(l+2)&&!this.findTagsBackwards(l,[\"CLASS\",\"EXTENDS\",\"IF\",\"CATCH\",\"SWITCH\",\"LEADING_WHEN\",\"FOR\",\"WHILE\",\"UNTIL\"]))return Y(l+1),e.push([\"INDENT\",l+2]),b(3);if(\":\"===J){if(V=function(){var e;switch(!1){case e=this.tag(l-1),0>a.call(d,e):return t[1];case\"@\"!==this.tag(l-2):return l-2;default:return l-1}}.call(this),z=0>=V||(M=this.tag(V-1),0<=a.call(g,M))||f[V-1].newLine,W()){var ae=W(),te=_slicedToArray(ae,2);if(H=te[0],B=te[1],(\"{\"===H||\"INDENT\"===H&&\"{\"===this.tag(B-1))&&(z||\",\"===this.tag(V-1)||\"{\"===this.tag(V-1)))return b(1)}return q(V,!!z),b(2)}if(0<=a.call(g,J))for(R=e.length-1;0<=R&&(G=e[R],!!I(G));R+=-1)A(G)&&(G[2].sameLine=!1);if(k=\"OUTDENT\"===w||P.newLine,0<=a.call(u,J)||0<=a.call(n,J)&&k||(\"..\"===J||\"...\"===J)&&this.findTagsBackwards(l,[\"INDEX_START\"]))for(;C();){var oe=W(),ne=_slicedToArray(oe,3);H=ne[0],B=ne[1];var re=ne[2];if(s=re.sameLine,z=re.startsLine,D()&&\",\"!==w||\",\"===w&&\"TERMINATOR\"===J&&null==O)T();else if(x()&&s&&\"TERMINATOR\"!==J&&\":\"!==w&&!((\"POST_IF\"===J||\"FOR\"===J||\"WHILE\"===J||\"UNTIL\"===J)&&z&&$(l+1)))v();else if(x()&&\"TERMINATOR\"===J&&\",\"!==w&&!(z&&this.looksObjectish(l+1)))v();else break}if(\",\"===J&&!this.looksObjectish(l+1)&&x()&&\"FOROF\"!==(U=this.tag(l+2))&&\"FORIN\"!==U&&(\"TERMINATOR\"!==O||!this.looksObjectish(l+2)))for(F=\"OUTDENT\"===O?1:0;x();)v(l+F);return b(1)})}},{key:\"enforceValidCSXAttributes\",value:function enforceValidCSXAttributes(){return this.scanTokens(function(e,a,t){var o,n;return e.csxColon&&(o=t[a+1],\"STRING_START\"!==(n=o[0])&&\"STRING\"!==n&&\"(\"!==n&&C(\"expected wrapped or quoted JSX attribute\",o[2])),1})}},{key:\"rescueStowawayComments\",value:function rescueStowawayComments(){var e,t,o;return e=function(e,a,t,o){return\"TERMINATOR\"!==t[a][0]&&t[o](N(\"TERMINATOR\",\"\\n\",t[a])),t[o](N(\"JS\",\"\",t[a],e))},o=function(t,o,n){var r,s,i,d,c,p,u;for(s=o;s!==n.length&&(c=n[s][0],0<=a.call(l,c));)s++;if(!(s===n.length||(p=n[s][0],0<=a.call(l,p)))){for(u=t.comments,i=0,d=u.length;i<d;i++)r=u[i],r.unshift=!0;return $(t,n[s]),1}return s=n.length-1,e(t,s,n,\"push\"),1},t=function(t,o,n){var r,s,i;for(r=o;-1!==r&&(s=n[r][0],0<=a.call(l,s));)r--;return-1===r||(i=n[r][0],0<=a.call(l,i))?(e(t,0,n,\"unshift\"),3):($(t,n[r]),1)},this.scanTokens(function(e,n,r){var s,i,d,c,p;if(!e.comments)return 1;if(p=1,d=e[0],0<=a.call(l,d)){for(s={comments:[]},i=e.comments.length-1;-1!==i;)!1===e.comments[i].newLine&&!1===e.comments[i].here&&(s.comments.unshift(e.comments[i]),e.comments.splice(i,1)),i--;0!==s.comments.length&&(p=t(s,n-1,r)),0!==e.comments.length&&o(e,n,r)}else{for(s={comments:[]},i=e.comments.length-1;-1!==i;)!e.comments[i].newLine||e.comments[i].unshift||\"JS\"===e[0]&&e.generated||(s.comments.unshift(e.comments[i]),e.comments.splice(i,1)),i--;0!==s.comments.length&&(p=o(s,n+1,r))}return 0===(null==(c=e.comments)?void 0:c.length)&&delete e.comments,p})}},{key:\"addLocationDataToGeneratedTokens\",value:function addLocationDataToGeneratedTokens(){return this.scanTokens(function(e,a,t){var o,n,r,l,s,i;if(e[2])return 1;if(!(e.generated||e.explicit))return 1;if(\"{\"===e[0]&&(r=null==(s=t[a+1])?void 0:s[2])){var d=r;n=d.first_line,o=d.first_column}else if(l=null==(i=t[a-1])?void 0:i[2]){var c=l;n=c.last_line,o=c.last_column}else n=o=0;return e[2]={first_line:n,first_column:o,last_line:n,last_column:o},1})}},{key:\"fixOutdentLocationData\",value:function fixOutdentLocationData(){return this.scanTokens(function(e,a,t){var o;return\"OUTDENT\"===e[0]||e.generated&&\"CALL_END\"===e[0]||e.generated&&\"}\"===e[0]?(o=t[a-1][2],e[2]={first_line:o.last_line,first_column:o.last_column,last_line:o.last_line,last_column:o.last_column},1):1})}},{key:\"addParensToChainedDoIife\",value:function addParensToChainedDoIife(){var e,t,o;return t=function(e,a){return\"OUTDENT\"===this.tag(a-1)},e=function(e,t){var r;if(r=e[0],!(0>a.call(n,r)))return this.tokens.splice(o,0,N(\"(\",\"(\",this.tokens[o])),this.tokens.splice(t+1,0,N(\")\",\")\",this.tokens[t]))},o=null,this.scanTokens(function(a,n){var r,l;return\"do\"===a[1]?(o=n,r=n+1,\"PARAM_START\"===this.tag(n+1)&&(r=null,this.detectEnd(n+1,function(e,a){return\"PARAM_END\"===this.tag(a-1)},function(e,a){return r=a})),null==r||\"->\"!==(l=this.tag(r))&&\"=>\"!==l||\"INDENT\"!==this.tag(r+1))?1:(this.detectEnd(r+1,t,e),2):1})}},{key:\"normalizeLines\",value:function normalizeLines(){var e=this,t,o,r,l,d,c,p,u,m;return m=d=u=null,p=null,c=null,l=[],r=function(e,t){var o,r,l,i;return\";\"!==e[1]&&(o=e[0],0<=a.call(y,o))&&!(\"TERMINATOR\"===e[0]&&(r=this.tag(t+1),0<=a.call(s,r)))&&!(\"ELSE\"===e[0]&&(\"THEN\"!==m||c||p))&&(\"CATCH\"!==(l=e[0])&&\"FINALLY\"!==l||\"->\"!==m&&\"=>\"!==m)||(i=e[0],0<=a.call(n,i))&&(this.tokens[t-1].newLine||\"OUTDENT\"===this.tokens[t-1][0])},t=function(e,a){return\"ELSE\"===e[0]&&\"THEN\"===m&&l.pop(),this.tokens.splice(\",\"===this.tag(a-1)?a-1:a,0,u)},o=function(a,t){var o,n,r;if(r=l.length,!(0<r))return t;o=l.pop();var s=e.indentation(a[o]),i=_slicedToArray(s,2);return n=i[1],n[1]=2*r,a.splice(t,0,n),n[1]=2,a.splice(t+1,0,n),e.detectEnd(t+2,function(e){var a;return\"OUTDENT\"===(a=e[0])||\"TERMINATOR\"===a},function(e,t){if(\"OUTDENT\"===this.tag(t)&&\"OUTDENT\"===this.tag(t+1))return a.splice(t,2)}),t+2},this.scanTokens(function(e,n,i){var h=_slicedToArray(e,1),g,f,y,k,N,v;if(v=h[0],g=(\"->\"===v||\"=>\"===v)&&this.findTagsBackwards(n,[\"IF\",\"WHILE\",\"FOR\",\"UNTIL\",\"SWITCH\",\"WHEN\",\"LEADING_WHEN\",\"[\",\"INDEX_START\"])&&!this.findTagsBackwards(n,[\"THEN\",\"..\",\"...\"]),\"TERMINATOR\"===v){if(\"ELSE\"===this.tag(n+1)&&\"OUTDENT\"!==this.tag(n-1))return i.splice.apply(i,[n,1].concat(_toConsumableArray(this.indentation()))),1;if(k=this.tag(n+1),0<=a.call(s,k))return i.splice(n,1),0}if(\"CATCH\"===v)for(f=y=1;2>=y;f=++y)if(\"OUTDENT\"===(N=this.tag(n+f))||\"TERMINATOR\"===N||\"FINALLY\"===N)return i.splice.apply(i,[n+f,0].concat(_toConsumableArray(this.indentation()))),2+f;if((\"->\"===v||\"=>\"===v)&&(\",\"===this.tag(n+1)||\".\"===this.tag(n+1)&&e.newLine)){var b=this.indentation(i[n]),$=_slicedToArray(b,2);return d=$[0],u=$[1],i.splice(n+1,0,d,u),1}if(0<=a.call(T,v)&&\"INDENT\"!==this.tag(n+1)&&(\"ELSE\"!==v||\"IF\"!==this.tag(n+1))&&!g){m=v;var _=this.indentation(i[n]),C=_slicedToArray(_,2);return d=C[0],u=C[1],\"THEN\"===m&&(d.fromThen=!0),\"THEN\"===v&&(p=this.findTagsBackwards(n,[\"LEADING_WHEN\"])&&\"IF\"===this.tag(n+1),c=this.findTagsBackwards(n,[\"IF\"])&&\"IF\"===this.tag(n+1)),\"THEN\"===v&&this.findTagsBackwards(n,[\"IF\"])&&l.push(n),\"ELSE\"===v&&\"OUTDENT\"!==this.tag(n-1)&&(n=o(i,n)),i.splice(n+1,0,d),this.detectEnd(n+2,r,t),\"THEN\"===v&&i.splice(n,1),1}return 1})}},{key:\"tagPostfixConditionals\",value:function tagPostfixConditionals(){var e,t,o;return o=null,t=function(e,t){var o=_slicedToArray(e,1),n,r;r=o[0];var l=_slicedToArray(this.tokens[t-1],1);return n=l[0],\"TERMINATOR\"===r||\"INDENT\"===r&&0>a.call(T,n)},e=function(e){if(\"INDENT\"!==e[0]||e.generated&&!e.fromThen)return o[0]=\"POST_\"+o[0]},this.scanTokens(function(a,n){return\"IF\"===a[0]?(o=a,this.detectEnd(n+1,t,e),1):1})}},{key:\"indentation\",value:function indentation(e){var a,t;return a=[\"INDENT\",2],t=[\"OUTDENT\",2],e?(a.generated=t.generated=!0,a.origin=t.origin=e):a.explicit=t.explicit=!0,[a,t]}},{key:\"tag\",value:function tag(e){var a;return null==(a=this.tokens[e])?void 0:a[0]}}]),e}();return e.prototype.generate=N,e}.call(this),o=[[\"(\",\")\"],[\"[\",\"]\"],[\"{\",\"}\"],[\"INDENT\",\"OUTDENT\"],[\"CALL_START\",\"CALL_END\"],[\"PARAM_START\",\"PARAM_END\"],[\"INDEX_START\",\"INDEX_END\"],[\"STRING_START\",\"STRING_END\"],[\"REGEX_START\",\"REGEX_END\"]],e.INVERSES=i={},c=[],d=[],v=0,b=o.length;v<b;v++){var D=_slicedToArray(o[v],2);k=D[0],_=D[1],c.push(i[_]=k),d.push(i[k]=_)}s=[\"CATCH\",\"THEN\",\"ELSE\",\"FINALLY\"].concat(d),m=[\"IDENTIFIER\",\"PROPERTY\",\"SUPER\",\")\",\"CALL_END\",\"]\",\"INDEX_END\",\"@\",\"THIS\"],p=[\"IDENTIFIER\",\"CSX_TAG\",\"PROPERTY\",\"NUMBER\",\"INFINITY\",\"NAN\",\"STRING\",\"STRING_START\",\"REGEX\",\"REGEX_START\",\"JS\",\"NEW\",\"PARAM_START\",\"CLASS\",\"IF\",\"TRY\",\"SWITCH\",\"THIS\",\"UNDEFINED\",\"NULL\",\"BOOL\",\"UNARY\",\"YIELD\",\"AWAIT\",\"UNARY_MATH\",\"SUPER\",\"THROW\",\"@\",\"->\",\"=>\",\"[\",\"(\",\"{\",\"--\",\"++\"],h=[\"+\",\"-\"],u=[\"POST_IF\",\"FOR\",\"WHILE\",\"UNTIL\",\"WHEN\",\"BY\",\"LOOP\",\"TERMINATOR\"],T=[\"ELSE\",\"->\",\"=>\",\"TRY\",\"FINALLY\",\"THEN\"],y=[\"TERMINATOR\",\"CATCH\",\"FINALLY\",\"ELSE\",\"OUTDENT\",\"LEADING_WHEN\"],g=[\"TERMINATOR\",\"INDENT\",\"OUTDENT\"],n=[\".\",\"?.\",\"::\",\"?::\"],r=[\"IF\",\"TRY\",\"FINALLY\",\"CATCH\",\"CLASS\",\"SWITCH\"],l=[\"(\",\")\",\"[\",\"]\",\"{\",\"}\",\".\",\"..\",\"...\",\",\",\"=\",\"++\",\"--\",\"?\",\"AS\",\"AWAIT\",\"CALL_START\",\"CALL_END\",\"DEFAULT\",\"ELSE\",\"EXTENDS\",\"EXPORT\",\"FORIN\",\"FOROF\",\"FORFROM\",\"IMPORT\",\"INDENT\",\"INDEX_SOAK\",\"LEADING_WHEN\",\"OUTDENT\",\"PARAM_END\",\"REGEX_START\",\"REGEX_END\",\"RETURN\",\"STRING_END\",\"THROW\",\"UNARY\",\"YIELD\"].concat(h.concat(u.concat(n.concat(r))))}.call(this),{exports:e}.exports}(),require[\"./lexer\"]=function(){var e={};return function(){var a=[].indexOf,t=[].slice,o=require(\"./rewriter\"),n,r,l,s,i,d,c,p,u,m,h,g,f,y,k,T,N,v,b,$,_,C,D,E,x,I,S,A,R,O,L,F,w,P,j,M,U,V,B,G,H,W,X,Y,q,z,J,K,Z,Q,ee,ae,te,oe,ne,re,le,se,ie,de,ce,pe,ue,me,he,ge,fe,ye,ke,Te,Ne,ve,be,$e;z=o.Rewriter,S=o.INVERSES;var _e=require(\"./helpers\");he=_e.count,be=_e.starts,me=_e.compact,ve=_e.repeat,ge=_e.invertLiterate,Ne=_e.merge,ue=_e.attachCommentsToNode,Te=_e.locationDataToString,$e=_e.throwSyntaxError,e.Lexer=w=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"tokenize\",value:function tokenize(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t,o,n,r;for(this.literate=a.literate,this.indent=0,this.baseIndent=0,this.indebt=0,this.outdebt=0,this.indents=[],this.indentLiteral=\"\",this.ends=[],this.tokens=[],this.seenFor=!1,this.seenImport=!1,this.seenExport=!1,this.importSpecifierList=!1,this.exportSpecifierList=!1,this.csxDepth=0,this.csxObjAttribute={},this.chunkLine=a.line||0,this.chunkColumn=a.column||0,e=this.clean(e),n=0;this.chunk=e.slice(n);){t=this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.stringToken()||this.numberToken()||this.csxToken()||this.regexToken()||this.jsToken()||this.literalToken();var l=this.getLineAndColumnFromChunk(t),s=_slicedToArray(l,2);if(this.chunkLine=s[0],this.chunkColumn=s[1],n+=t,a.untilBalanced&&0===this.ends.length)return{tokens:this.tokens,index:n}}return this.closeIndentation(),(o=this.ends.pop())&&this.error(\"missing \"+o.tag,(null==(r=o.origin)?o:r)[2]),!1===a.rewrite?this.tokens:(new z).rewrite(this.tokens)}},{key:\"clean\",value:function clean(e){return e.charCodeAt(0)===n&&(e=e.slice(1)),e=e.replace(/\\r/g,\"\").replace(re,\"\"),pe.test(e)&&(e=\"\\n\"+e,this.chunkLine--),this.literate&&(e=ge(e)),e}},{key:\"identifierToken\",value:function identifierToken(){var e,t,o,n,r,s,p,u,m,h,f,y,k,T,N,v,b,$,_,C,E,x,I,S,A,O,F,w;if(p=this.atCSXTag(),A=p?g:D,!(m=A.exec(this.chunk)))return 0;var P=m,j=_slicedToArray(P,3);if(u=j[0],r=j[1],t=j[2],s=r.length,h=void 0,\"own\"===r&&\"FOR\"===this.tag())return this.token(\"OWN\",r),r.length;if(\"from\"===r&&\"YIELD\"===this.tag())return this.token(\"FROM\",r),r.length;if(\"as\"===r&&this.seenImport){if(\"*\"===this.value())this.tokens[this.tokens.length-1][0]=\"IMPORT_ALL\";else if(k=this.value(!0),0<=a.call(c,k)){f=this.prev();var M=[\"IDENTIFIER\",this.value(!0)];f[0]=M[0],f[1]=M[1]}if(\"DEFAULT\"===(T=this.tag())||\"IMPORT_ALL\"===T||\"IDENTIFIER\"===T)return this.token(\"AS\",r),r.length}if(\"as\"===r&&this.seenExport){if(\"IDENTIFIER\"===(v=this.tag())||\"DEFAULT\"===v)return this.token(\"AS\",r),r.length;if(b=this.value(!0),0<=a.call(c,b)){f=this.prev();var U=[\"IDENTIFIER\",this.value(!0)];return f[0]=U[0],f[1]=U[1],this.token(\"AS\",r),r.length}}if(\"default\"===r&&this.seenExport&&(\"EXPORT\"===($=this.tag())||\"AS\"===$))return this.token(\"DEFAULT\",r),r.length;if(\"do\"===r&&(S=/^(\\s*super)(?!\\(\\))/.exec(this.chunk.slice(3)))){this.token(\"SUPER\",\"super\"),this.token(\"CALL_START\",\"(\"),this.token(\"CALL_END\",\")\");var V=S,B=_slicedToArray(V,2);return u=B[0],O=B[1],O.length+3}if(f=this.prev(),F=t||null!=f&&(\".\"===(_=f[0])||\"?.\"===_||\"::\"===_||\"?::\"===_||!f.spaced&&\"@\"===f[0])?\"PROPERTY\":\"IDENTIFIER\",\"IDENTIFIER\"===F&&(0<=a.call(R,r)||0<=a.call(c,r))&&!(this.exportSpecifierList&&0<=a.call(c,r))?(F=r.toUpperCase(),\"WHEN\"===F&&(C=this.tag(),0<=a.call(L,C))?F=\"LEADING_WHEN\":\"FOR\"===F?this.seenFor=!0:\"UNLESS\"===F?F=\"IF\":\"IMPORT\"===F?this.seenImport=!0:\"EXPORT\"===F?this.seenExport=!0:0<=a.call(le,F)?F=\"UNARY\":0<=a.call(Y,F)&&(\"INSTANCEOF\"!==F&&this.seenFor?(F=\"FOR\"+F,this.seenFor=!1):(F=\"RELATION\",\"!\"===this.value()&&(h=this.tokens.pop(),r=\"!\"+r)))):\"IDENTIFIER\"===F&&this.seenFor&&\"from\"===r&&fe(f)?(F=\"FORFROM\",this.seenFor=!1):\"PROPERTY\"===F&&f&&(f.spaced&&(E=f[0],0<=a.call(l,E))&&/^[gs]et$/.test(f[1])&&1<this.tokens.length&&\".\"!==(x=this.tokens[this.tokens.length-2][0])&&\"?.\"!==x&&\"@\"!==x?this.error(\"'\"+f[1]+\"' cannot be used as a keyword, or as a function call without parentheses\",f[2]):2<this.tokens.length&&(y=this.tokens[this.tokens.length-2],(\"@\"===(I=f[0])||\"THIS\"===I)&&y&&y.spaced&&/^[gs]et$/.test(y[1])&&\".\"!==(N=this.tokens[this.tokens.length-3][0])&&\"?.\"!==N&&\"@\"!==N&&this.error(\"'\"+y[1]+\"' cannot be used as a keyword, or as a function call without parentheses\",y[2]))),\"IDENTIFIER\"===F&&0<=a.call(q,r)&&this.error(\"reserved word '\"+r+\"'\",{length:r.length}),\"PROPERTY\"===F||this.exportSpecifierList||(0<=a.call(i,r)&&(e=r,r=d[r]),F=function(){return\"!\"===r?\"UNARY\":\"==\"===r||\"!=\"===r?\"COMPARE\":\"true\"===r||\"false\"===r?\"BOOL\":\"break\"===r||\"continue\"===r||\"debugger\"===r?\"STATEMENT\":\"&&\"===r||\"||\"===r?r:F}()),w=this.token(F,r,0,s),e&&(w.origin=[F,e,w[2]]),h){var G=[h[2].first_line,h[2].first_column];w[2].first_line=G[0],w[2].first_column=G[1]}return t&&(o=u.lastIndexOf(p?\"=\":\":\"),n=this.token(\":\",\":\",o,t.length),p&&(n.csxColon=!0)),p&&\"IDENTIFIER\"===F&&\":\"!==f[0]&&this.token(\",\",\",\",0,0,w),u.length}},{key:\"numberToken\",value:function numberToken(){var e,a,t,o,n,r;if(!(t=U.exec(this.chunk)))return 0;switch(o=t[0],a=o.length,!1){case!/^0[BOX]/.test(o):this.error(\"radix prefix in '\"+o+\"' must be lowercase\",{offset:1});break;case!/^(?!0x).*E/.test(o):this.error(\"exponential notation in '\"+o+\"' must be indicated with a lowercase 'e'\",{offset:o.indexOf(\"E\")});break;case!/^0\\d*[89]/.test(o):this.error(\"decimal literal '\"+o+\"' must not be prefixed with '0'\",{length:a});break;case!/^0\\d+/.test(o):this.error(\"octal literal '\"+o+\"' must be prefixed with '0o'\",{length:a})}return e=function(){switch(o.charAt(1)){case\"b\":return 2;case\"o\":return 8;case\"x\":return 16;default:return null}}(),n=null==e?parseFloat(o):parseInt(o.slice(2),e),r=Infinity===n?\"INFINITY\":\"NUMBER\",this.token(r,o,0,a),a}},{key:\"stringToken\",value:function stringToken(){var e=this,a=oe.exec(this.chunk)||[],t=_slicedToArray(a,1),o,n,r,l,s,d,c,i,p,u,m,h,g,f,y,k;if(h=t[0],!h)return 0;m=this.prev(),m&&\"from\"===this.value()&&(this.seenImport||this.seenExport)&&(m[0]=\"FROM\"),f=function(){return\"'\"===h?te:'\"'===h?Q:\"'''\"===h?b:'\"\"\"'===h?N:void 0}(),d=3===h.length;var T=this.matchWithInterpolations(f,h);if(k=T.tokens,s=T.index,o=k.length-1,r=h.charAt(0),d){for(i=null,l=function(){var e,a,t;for(t=[],c=e=0,a=k.length;e<a;c=++e)y=k[c],\"NEOSTRING\"===y[0]&&t.push(y[1]);return t}().join(\"#{}\");u=v.exec(l);)n=u[1],(null===i||0<(g=n.length)&&g<i.length)&&(i=n);i&&(p=RegExp(\"\\\\n\"+i,\"g\")),this.mergeInterpolationTokens(k,{delimiter:r},function(a,t){return a=e.formatString(a,{delimiter:h}),p&&(a=a.replace(p,\"\\n\")),0===t&&(a=a.replace(O,\"\")),t===o&&(a=a.replace(ne,\"\")),a})}else this.mergeInterpolationTokens(k,{delimiter:r},function(a,t){return a=e.formatString(a,{delimiter:h}),a=a.replace(K,function(e,n){return 0===t&&0===n||t===o&&n+e.length===a.length?\"\":\" \"}),a});return this.atCSXTag()&&this.token(\",\",\",\",0,0,this.prev),s}},{key:\"commentToken\",value:function commentToken(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.chunk,t,o,n,r,l,s,i,d,c,u,m;if(!(i=e.match(p)))return 0;var h=i,g=_slicedToArray(h,2);return t=g[0],l=g[1],r=null,c=/^\\s*\\n+\\s*#/.test(t),l?(d=T.exec(t),d&&this.error(\"block comments cannot contain \"+d[0],{offset:d.index,length:d[0].length}),e=e.replace(\"###\"+l+\"###\",\"\"),e=e.replace(/^\\n+/,\"\"),this.lineToken(e),n=l,0<=a.call(n,\"\\n\")&&(n=n.replace(RegExp(\"\\\\n\"+ve(\" \",this.indent),\"g\"),\"\\n\")),r=[n]):(n=t.replace(/^(\\n*)/,\"\"),n=n.replace(/^([ |\\t]*)#/gm,\"\"),r=n.split(\"\\n\")),o=function(){var e,a,t;for(t=[],s=e=0,a=r.length;e<a;s=++e)n=r[s],t.push({content:n,here:null!=l,newLine:c||0!==s});return t}(),m=this.prev(),m?ue(o,m):(o[0].newLine=!0,this.lineToken(this.chunk.slice(t.length)),u=this.makeToken(\"JS\",\"\"),u.generated=!0,u.comments=o,this.tokens.push(u),this.newlineToken(0)),t.length}},{key:\"jsToken\",value:function jsToken(){var e,a;return\"`\"===this.chunk.charAt(0)&&(e=C.exec(this.chunk)||A.exec(this.chunk))?(a=e[1].replace(/\\\\+(`|$)/g,function(e){return e.slice(-Math.ceil(e.length/2))}),this.token(\"JS\",a,0,e[0].length),e[0].length):0}},{key:\"regexToken\",value:function regexToken(){var e=this,t,o,n,r,s,i,d,c,p,u,m,h,g,f,y,k;switch(!1){case!(u=W.exec(this.chunk)):this.error(\"regular expressions cannot begin with \"+u[2],{offset:u.index+u[1].length});break;case!(u=this.matchWithInterpolations($,\"///\")):var T=u;if(k=T.tokens,d=T.index,r=this.chunk.slice(0,d).match(/\\s+(#(?!{).*)/g),r)for(c=0,p=r.length;c<p;c++)n=r[c],this.commentToken(n);break;case!(u=G.exec(this.chunk)):var N=u,v=_slicedToArray(N,3);if(y=v[0],t=v[1],o=v[2],this.validateEscapes(t,{isRegex:!0,offsetInChunk:1}),d=y.length,h=this.prev(),h)if(h.spaced&&(g=h[0],0<=a.call(l,g))){if(!o||B.test(y))return 0}else if(f=h[0],0<=a.call(M,f))return 0;o||this.error(\"missing / (unclosed regex)\");break;default:return 0}var b=H.exec(this.chunk.slice(d)),_=_slicedToArray(b,1);switch(i=_[0],s=d+i.length,m=this.makeToken(\"REGEX\",null,0,s),!1){case!!ce.test(i):this.error(\"invalid regular expression flags \"+i,{offset:d,length:i.length});break;case!(y||1===k.length):t=t?this.formatRegex(t,{flags:i,delimiter:\"/\"}):this.formatHeregex(k[0][1],{flags:i}),this.token(\"REGEX\",\"\"+this.makeDelimitedLiteral(t,{delimiter:\"/\"})+i,0,s,m);break;default:this.token(\"REGEX_START\",\"(\",0,0,m),this.token(\"IDENTIFIER\",\"RegExp\",0,0),this.token(\"CALL_START\",\"(\",0,0),this.mergeInterpolationTokens(k,{delimiter:'\"',double:!0},function(a){return e.formatHeregex(a,{flags:i})}),i&&(this.token(\",\",\",\",d-1,0),this.token(\"STRING\",'\"'+i+'\"',d-1,i.length)),this.token(\")\",\")\",s-1,0),this.token(\"REGEX_END\",\")\",s-1,0)}return s}},{key:\"lineToken\",value:function lineToken(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:this.chunk,a,t,o,n,r,l,s,i,d;if(!(n=j.exec(e)))return 0;if(o=n[0],i=this.prev(),a=null!=i&&\"\\\\\"===i[0],a&&this.seenFor||(this.seenFor=!1),this.importSpecifierList||(this.seenImport=!1),this.exportSpecifierList||(this.seenExport=!1),d=o.length-1-o.lastIndexOf(\"\\n\"),s=this.unfinished(),l=0<d?o.slice(-d):\"\",!/^(.?)\\1*$/.exec(l))return this.error(\"mixed indentation\",{offset:o.length}),o.length;if(r=Math.min(l.length,this.indentLiteral.length),l.slice(0,r)!==this.indentLiteral.slice(0,r))return this.error(\"indentation mismatch\",{offset:o.length}),o.length;if(d-this.indebt===this.indent)return s?this.suppressNewlines():this.newlineToken(0),o.length;if(d>this.indent){if(s)return this.indebt=d-this.indent,this.suppressNewlines(),o.length;if(!this.tokens.length)return this.baseIndent=this.indent=d,this.indentLiteral=l,o.length;t=d-this.indent+this.outdebt,this.token(\"INDENT\",t,o.length-d,d),this.indents.push(t),this.ends.push({tag:\"OUTDENT\"}),this.outdebt=this.indebt=0,this.indent=d,this.indentLiteral=l}else d<this.baseIndent?this.error(\"missing indentation\",{offset:o.length}):(this.indebt=0,this.outdentToken(this.indent-d,s,o.length));return o.length}},{key:\"outdentToken\",value:function outdentToken(e,t,o){var n,r,l,s;for(n=this.indent-e;0<e;)l=this.indents[this.indents.length-1],l?this.outdebt&&e<=this.outdebt?(this.outdebt-=e,e=0):(r=this.indents.pop()+this.outdebt,o&&(s=this.chunk[o],0<=a.call(E,s))&&(n-=r-e,e=r),this.outdebt=0,this.pair(\"OUTDENT\"),this.token(\"OUTDENT\",e,0,o),e-=r):this.outdebt=e=0;return r&&(this.outdebt-=e),this.suppressSemicolons(),\"TERMINATOR\"===this.tag()||t||this.token(\"TERMINATOR\",\"\\n\",o,0),this.indent=n,this.indentLiteral=this.indentLiteral.slice(0,n),this}},{key:\"whitespaceToken\",value:function whitespaceToken(){var e,a,t;return(e=pe.exec(this.chunk))||(a=\"\\n\"===this.chunk.charAt(0))?(t=this.prev(),t&&(t[e?\"spaced\":\"newLine\"]=!0),e?e[0].length:0):0}},{key:\"newlineToken\",value:function newlineToken(e){return this.suppressSemicolons(),\"TERMINATOR\"!==this.tag()&&this.token(\"TERMINATOR\",\"\\n\",e,0),this}},{key:\"suppressNewlines\",value:function suppressNewlines(){var e;return e=this.prev(),\"\\\\\"===e[1]&&(e.comments&&1<this.tokens.length&&ue(e.comments,this.tokens[this.tokens.length-2]),this.tokens.pop()),this}},{key:\"csxToken\",value:function csxToken(){var e=this,t,o,n,r,l,s,i,d,c,p,m,h,g,T;if(l=this.chunk[0],m=0<this.tokens.length?this.tokens[this.tokens.length-1][0]:\"\",\"<\"===l){if(d=y.exec(this.chunk.slice(1))||f.exec(this.chunk.slice(1)),!(d&&(0<this.csxDepth||!(p=this.prev())||p.spaced||(h=p[0],0>a.call(u,h)))))return 0;var N=d,v=_slicedToArray(N,3);return i=v[0],s=v[1],o=v[2],c=this.token(\"CSX_TAG\",s,1,s.length),this.token(\"CALL_START\",\"(\"),this.token(\"[\",\"[\"),this.ends.push({tag:\"/>\",origin:c,name:s}),this.csxDepth++,s.length+1}if(n=this.atCSXTag()){if(\"/>\"===this.chunk.slice(0,2))return this.pair(\"/>\"),this.token(\"]\",\"]\",0,2),this.token(\"CALL_END\",\")\",0,2),this.csxDepth--,2;if(\"{\"===l)return\":\"===m?(g=this.token(\"(\",\"(\"),this.csxObjAttribute[this.csxDepth]=!1):(g=this.token(\"{\",\"{\"),this.csxObjAttribute[this.csxDepth]=!0),this.ends.push({tag:\"}\",origin:g}),1;if(\">\"===l){this.pair(\"/>\"),c=this.token(\"]\",\"]\"),this.token(\",\",\",\");var b=this.matchWithInterpolations(I,\">\",\"</\",k);return T=b.tokens,r=b.index,this.mergeInterpolationTokens(T,{delimiter:'\"'},function(a){return e.formatString(a,{delimiter:\">\"})}),d=y.exec(this.chunk.slice(r))||f.exec(this.chunk.slice(r)),d&&d[1]===n.name||this.error(\"expected corresponding CSX closing tag for \"+n.name,n.origin[2]),t=r+n.name.length,\">\"!==this.chunk[t]&&this.error(\"missing closing > after tag name\",{offset:t,length:1}),this.token(\"CALL_END\",\")\",r,n.name.length+1),this.csxDepth--,t+1}return 0}return this.atCSXTag(1)?\"}\"===l?(this.pair(l),this.csxObjAttribute[this.csxDepth]?(this.token(\"}\",\"}\"),this.csxObjAttribute[this.csxDepth]=!1):this.token(\")\",\")\"),this.token(\",\",\",\"),1):0:0}},{key:\"atCSXTag\",value:function atCSXTag(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,a,t,o;if(0===this.csxDepth)return!1;for(a=this.ends.length-1;\"OUTDENT\"===(null==(o=this.ends[a])?void 0:o.tag)||0<e--;)a--;return t=this.ends[a],\"/>\"===(null==t?void 0:t.tag)&&t}},{key:\"literalToken\",value:function literalToken(){var e,t,o,n,r,i,d,c,p,u,g,f,y;if(e=V.exec(this.chunk)){var k=e,T=_slicedToArray(k,1);y=T[0],s.test(y)&&this.tagParameters()}else y=this.chunk.charAt(0);if(g=y,n=this.prev(),n&&0<=a.call([\"=\"].concat(_toConsumableArray(h)),y)&&(u=!1,\"=\"!==y||\"||\"!==(r=n[1])&&\"&&\"!==r||n.spaced||(n[0]=\"COMPOUND_ASSIGN\",n[1]+=\"=\",n=this.tokens[this.tokens.length-2],u=!0),n&&\"PROPERTY\"!==n[0]&&(o=null==(i=n.origin)?n:i,t=ye(n[1],o[1]),t&&this.error(t,o[2])),u))return y.length;if(\"{\"===y&&this.seenImport?this.importSpecifierList=!0:this.importSpecifierList&&\"}\"===y?this.importSpecifierList=!1:\"{\"===y&&\"EXPORT\"===(null==n?void 0:n[0])?this.exportSpecifierList=!0:this.exportSpecifierList&&\"}\"===y&&(this.exportSpecifierList=!1),\";\"===y)(d=null==n?void 0:n[0],0<=a.call([\"=\"].concat(_toConsumableArray(ie)),d))&&this.error(\"unexpected ;\"),this.seenFor=this.seenImport=this.seenExport=!1,g=\"TERMINATOR\";else if(\"*\"===y&&\"EXPORT\"===(null==n?void 0:n[0]))g=\"EXPORT_ALL\";else if(0<=a.call(P,y))g=\"MATH\";else if(0<=a.call(m,y))g=\"COMPARE\";else if(0<=a.call(h,y))g=\"COMPOUND_ASSIGN\";else if(0<=a.call(le,y))g=\"UNARY\";else if(0<=a.call(se,y))g=\"UNARY_MATH\";else if(0<=a.call(J,y))g=\"SHIFT\";else if(\"?\"===y&&(null==n?void 0:n.spaced))g=\"BIN?\";else if(n)if(\"(\"===y&&!n.spaced&&(c=n[0],0<=a.call(l,c)))\"?\"===n[0]&&(n[0]=\"FUNC_EXIST\"),g=\"CALL_START\";else if(\"[\"===y&&((p=n[0],0<=a.call(x,p))&&!n.spaced||\"::\"===n[0]))switch(g=\"INDEX_START\",n[0]){case\"?\":n[0]=\"INDEX_SOAK\"}return f=this.makeToken(g,y),\"(\"===y||\"{\"===y||\"[\"===y?this.ends.push({tag:S[y],origin:f}):\")\"===y||\"}\"===y||\"]\"===y?this.pair(y):void 0,this.tokens.push(this.makeToken(g,y)),y.length}},{key:\"tagParameters\",value:function tagParameters(){var e,a,t,o,n;if(\")\"!==this.tag())return this;for(t=[],n=this.tokens,e=n.length,a=n[--e],a[0]=\"PARAM_END\";o=n[--e];)switch(o[0]){case\")\":t.push(o);break;case\"(\":case\"CALL_START\":if(t.length)t.pop();else return\"(\"===o[0]?(o[0]=\"PARAM_START\",this):(a[0]=\"CALL_END\",this)}return this}},{key:\"closeIndentation\",value:function closeIndentation(){return this.outdentToken(this.indent)}},{key:\"matchWithInterpolations\",value:function matchWithInterpolations(a,o,n,r){var l,s,i,d,c,p,u,m,h,g,f,y,k,T,N,v,b,$,_,C,D,E;if(null==n&&(n=o),null==r&&(r=/^#\\{/),E=[],v=o.length,this.chunk.slice(0,v)!==o)return null;for(C=this.chunk.slice(v);;){var x=a.exec(C),I=_slicedToArray(x,1);if(D=I[0],this.validateEscapes(D,{isRegex:\"/\"===o.charAt(0),offsetInChunk:v}),E.push(this.makeToken(\"NEOSTRING\",D,v)),C=C.slice(D.length),v+=D.length,!(T=r.exec(C)))break;var S=T,A=_slicedToArray(S,1);f=A[0],g=f.length-1;var R=this.getLineAndColumnFromChunk(v+g),O=_slicedToArray(R,2);k=O[0],u=O[1],_=C.slice(g);var L=(new e).tokenize(_,{line:k,column:u,untilBalanced:!0});if(N=L.tokens,h=L.index,h+=g,c=\"}\"===C[h-1],c){var F,w,P,j;F=N,w=_slicedToArray(F,1),b=w[0],F,P=t.call(N,-1),j=_slicedToArray(P,1),p=j[0],P,b[0]=b[1]=\"(\",p[0]=p[1]=\")\",p.origin=[\"\",\"end of interpolation\",p[2]]}\"TERMINATOR\"===(null==($=N[1])?void 0:$[0])&&N.splice(1,1),c||(b=this.makeToken(\"(\",\"(\",v,0),p=this.makeToken(\")\",\")\",v+h,0),N=[b].concat(_toConsumableArray(N),[p])),E.push([\"TOKENS\",N]),C=C.slice(h),v+=h}return C.slice(0,n.length)!==n&&this.error(\"missing \"+n,{length:o.length}),l=E,s=_slicedToArray(l,1),m=s[0],l,i=t.call(E,-1),d=_slicedToArray(i,1),y=d[0],i,m[2].first_column-=o.length,\"\\n\"===y[1].substr(-1)?(y[2].last_line+=1,y[2].last_column=n.length-1):y[2].last_column+=n.length,0===y[1].length&&(y[2].last_column-=1),{tokens:E,index:v+n.length}}},{key:\"mergeInterpolationTokens\",value:function mergeInterpolationTokens(e,a,o){var n,r,l,s,i,d,c,p,u,m,h,g,f,y,k,T,N,v,b;for(1<e.length&&(h=this.token(\"STRING_START\",\"(\",0,0)),l=this.tokens.length,s=i=0,p=e.length;i<p;s=++i){var $;T=e[s];var _=T,C=_slicedToArray(_,2);switch(k=C[0],b=C[1],k){case\"TOKENS\":if(2===b.length){if(!(b[0].comments||b[1].comments))continue;for(g=0===this.csxDepth?this.makeToken(\"STRING\",\"''\"):this.makeToken(\"JS\",\"\"),g[2]=b[0][2],d=0,u=b.length;d<u;d++){var D;(v=b[d],!!v.comments)&&(null==g.comments&&(g.comments=[]),(D=g.comments).push.apply(D,_toConsumableArray(v.comments)))}b.splice(1,0,g)}m=b[0],N=b;break;case\"NEOSTRING\":if(n=o.call(this,T[1],s),0===n.length)if(0===s)r=this.tokens.length;else continue;2===s&&null!=r&&this.tokens.splice(r,2),T[0]=\"STRING\",T[1]=this.makeDelimitedLiteral(n,a),m=T,N=[T]}this.tokens.length>l&&(f=this.token(\"+\",\"+\"),f[2]={first_line:m[2].first_line,first_column:m[2].first_column,last_line:m[2].first_line,last_column:m[2].first_column}),($=this.tokens).push.apply($,_toConsumableArray(N))}if(h){var E=t.call(e,-1),x=_slicedToArray(E,1);return c=x[0],h.origin=[\"STRING\",null,{first_line:h[2].first_line,first_column:h[2].first_column,last_line:c[2].last_line,last_column:c[2].last_column}],h[2]=h.origin[2],y=this.token(\"STRING_END\",\")\"),y[2]={first_line:c[2].last_line,first_column:c[2].last_column,last_line:c[2].last_line,last_column:c[2].last_column}}}},{key:\"pair\",value:function pair(e){var a,o,n,r,l,s,i;if(l=this.ends,a=t.call(l,-1),o=_slicedToArray(a,1),r=o[0],a,e!==(i=null==r?void 0:r.tag)){var d,c;return\"OUTDENT\"!==i&&this.error(\"unmatched \"+e),s=this.indents,d=t.call(s,-1),c=_slicedToArray(d,1),n=c[0],d,this.outdentToken(n,!0),this.pair(e)}return this.ends.pop()}},{key:\"getLineAndColumnFromChunk\",value:function getLineAndColumnFromChunk(e){var a,o,n,r,l;if(0===e)return[this.chunkLine,this.chunkColumn];if(l=e>=this.chunk.length?this.chunk:this.chunk.slice(0,+(e-1)+1||9e9),n=he(l,\"\\n\"),a=this.chunkColumn,0<n){var s,i;r=l.split(\"\\n\"),s=t.call(r,-1),i=_slicedToArray(s,1),o=i[0],s,a=o.length}else a+=l.length;return[this.chunkLine+n,a]}},{key:\"makeToken\",value:function makeToken(e,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0,o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:a.length,n,r,l;r={};var s=this.getLineAndColumnFromChunk(t),i=_slicedToArray(s,2);r.first_line=i[0],r.first_column=i[1],n=0<o?o-1:0;var d=this.getLineAndColumnFromChunk(t+n),c=_slicedToArray(d,2);return r.last_line=c[0],r.last_column=c[1],l=[e,a,r],l}},{key:\"token\",value:function(e,a,t,o,n){var r;return r=this.makeToken(e,a,t,o),n&&(r.origin=n),this.tokens.push(r),r}},{key:\"tag\",value:function tag(){var e,a,o,n;return o=this.tokens,e=t.call(o,-1),a=_slicedToArray(e,1),n=a[0],e,null==n?void 0:n[0]}},{key:\"value\",value:function value(){var e=!!(0<arguments.length&&void 0!==arguments[0])&&arguments[0],a,o,n,r,l;return n=this.tokens,a=t.call(n,-1),o=_slicedToArray(a,1),l=o[0],a,e&&null!=(null==l?void 0:l.origin)?null==(r=l.origin)?void 0:r[1]:null==l?void 0:l[1]}},{key:\"prev\",value:function prev(){return this.tokens[this.tokens.length-1]}},{key:\"unfinished\",value:function unfinished(){var e;return F.test(this.chunk)||(e=this.tag(),0<=a.call(ie,e))}},{key:\"formatString\",value:function formatString(e,a){return this.replaceUnicodeCodePointEscapes(e.replace(ae,\"$1\"),a)}},{key:\"formatHeregex\",value:function formatHeregex(e,a){return this.formatRegex(e.replace(_,\"$1$2\"),Ne(a,{delimiter:\"///\"}))}},{key:\"formatRegex\",value:function formatRegex(e,a){return this.replaceUnicodeCodePointEscapes(e,a)}},{key:\"unicodeCodePointToUnicodeEscapes\",value:function unicodeCodePointToUnicodeEscapes(e){var a,t,o;return(o=function(e){var a;return a=e.toString(16),\"\\\\u\"+ve(\"0\",4-a.length)+a},65536>e)?o(e):(a=_Mathfloor((e-65536)/1024)+55296,t=(e-65536)%1024+56320,\"\"+o(a)+o(t))}},{key:\"replaceUnicodeCodePointEscapes\",value:function replaceUnicodeCodePointEscapes(e,t){var o=this,n;return n=null!=t.flags&&0>a.call(t.flags,\"u\"),e.replace(de,function(e,a,r,l){var s;return a?a:(s=parseInt(r,16),1114111<s&&o.error(\"unicode code point escapes greater than \\\\u{10ffff} are not allowed\",{offset:l+t.delimiter.length,length:r.length+4}),n?o.unicodeCodePointToUnicodeEscapes(s):e)})}},{key:\"validateEscapes\",value:function validateEscapes(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t,o,n,r,l,s,i,d,c,p;if(r=a.isRegex?X:ee,l=r.exec(e),!!l)return l[0],t=l[1],i=l[2],o=l[3],p=l[4],c=l[5],s=i?\"octal escape sequences are not allowed\":\"invalid escape sequence\",n=\"\\\\\"+(i||o||p||c),this.error(s+\" \"+n,{offset:(null==(d=a.offsetInChunk)?0:d)+l.index+t.length,length:n.length})}},{key:\"makeDelimitedLiteral\",value:function makeDelimitedLiteral(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t;return\"\"===e&&\"/\"===a.delimiter&&(e=\"(?:)\"),t=RegExp(\"(\\\\\\\\\\\\\\\\)|(\\\\\\\\0(?=[1-7]))|\\\\\\\\?(\"+a.delimiter+\")|\\\\\\\\?(?:(\\\\n)|(\\\\r)|(\\\\u2028)|(\\\\u2029))|(\\\\\\\\.)\",\"g\"),e=e.replace(t,function(e,t,o,n,r,l,s,i,d){switch(!1){case!t:return a.double?t+t:t;case!o:return\"\\\\x00\";case!n:return\"\\\\\"+n;case!r:return\"\\\\n\";case!l:return\"\\\\r\";case!s:return\"\\\\u2028\";case!i:return\"\\\\u2029\";case!d:return a.double?\"\\\\\"+d:d}}),\"\"+a.delimiter+e+a.delimiter}},{key:\"suppressSemicolons\",value:function suppressSemicolons(){var e,t,o;for(o=[];\";\"===this.value();)this.tokens.pop(),(e=null==(t=this.prev())?void 0:t[0],0<=a.call([\"=\"].concat(_toConsumableArray(ie)),e))?o.push(this.error(\"unexpected ;\")):o.push(void 0);return o}},{key:\"error\",value:function error(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t,o,n,r,l,s,i;return l=\"first_line\"in a?a:(t=this.getLineAndColumnFromChunk(null==(s=a.offset)?0:s),o=_slicedToArray(t,2),r=o[0],n=o[1],t,{first_line:r,first_column:n,last_column:n+(null==(i=a.length)?1:i)-1}),$e(e,l)}}]),e}(),ye=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:e;switch(!1){case 0>a.call([].concat(_toConsumableArray(R),_toConsumableArray(c)),e):return\"keyword '\"+t+\"' can't be assigned\";case 0>a.call(Z,e):return\"'\"+t+\"' can't be assigned\";case 0>a.call(q,e):return\"reserved word '\"+t+\"' can't be assigned\";default:return!1}},e.isUnassignable=ye,fe=function(e){var a;return\"IDENTIFIER\"===e[0]?(\"from\"===e[1]&&(e[1][0]=\"IDENTIFIER\",!0),!0):\"FOR\"!==e[0]&&\"{\"!==(a=e[1])&&\"[\"!==a&&\",\"!==a&&\":\"!==a},R=[\"true\",\"false\",\"null\",\"this\",\"new\",\"delete\",\"typeof\",\"in\",\"instanceof\",\"return\",\"throw\",\"break\",\"continue\",\"debugger\",\"yield\",\"await\",\"if\",\"else\",\"switch\",\"for\",\"while\",\"do\",\"try\",\"catch\",\"finally\",\"class\",\"extends\",\"super\",\"import\",\"export\",\"default\"],c=[\"undefined\",\"Infinity\",\"NaN\",\"then\",\"unless\",\"until\",\"loop\",\"of\",\"by\",\"when\"],d={and:\"&&\",or:\"||\",is:\"==\",isnt:\"!=\",not:\"!\",yes:\"true\",no:\"false\",on:\"true\",off:\"false\"},i=function(){var e;for(ke in e=[],d)e.push(ke);return e}(),c=c.concat(i),q=[\"case\",\"function\",\"var\",\"void\",\"with\",\"const\",\"let\",\"enum\",\"native\",\"implements\",\"interface\",\"package\",\"private\",\"protected\",\"public\",\"static\"],Z=[\"arguments\",\"eval\"],e.JS_FORBIDDEN=R.concat(q).concat(Z),n=65279,D=/^(?!\\d)((?:(?!\\s)[$\\w\\x7f-\\uffff])+)([^\\n\\S]*:(?!:))?/,y=/^(?![\\d<])((?:(?!\\s)[\\.\\-$\\w\\x7f-\\uffff])+)/,f=/^()>/,g=/^(?!\\d)((?:(?!\\s)[\\-$\\w\\x7f-\\uffff])+)([^\\S]*=(?!=))?/,U=/^0b[01]+|^0o[0-7]+|^0x[\\da-f]+|^\\d*\\.?\\d+(?:e[+-]?\\d+)?/i,V=/^(?:[-=]>|[-+*\\/%<>&|^!?=]=|>>>=?|([-+:])\\1|([&|<>*\\/%])\\2=?|\\?(\\.|::)|\\.{2,3})/,pe=/^[^\\n\\S]+/,p=/^\\s*###([^#][\\s\\S]*?)(?:###[^\\n\\S]*|###$)|^(?:\\s*#(?!##[^#]).*)+/,s=/^[-=]>/,j=/^(?:\\n[^\\n\\S]*)+/,A=/^`(?!``)((?:[^`\\\\]|\\\\[\\s\\S])*)`/,C=/^```((?:[^`\\\\]|\\\\[\\s\\S]|`(?!``))*)```/,oe=/^(?:'''|\"\"\"|'|\")/,te=/^(?:[^\\\\']|\\\\[\\s\\S])*/,Q=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\\#(?!\\{))*/,b=/^(?:[^\\\\']|\\\\[\\s\\S]|'(?!''))*/,N=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\"(?!\"\")|\\#(?!\\{))*/,I=/^(?:[^\\{<])*/,k=/^(?:\\{|<(?!\\/))/,ae=/((?:\\\\\\\\)+)|\\\\[^\\S\\n]*\\n\\s*/g,K=/\\s*\\n\\s*/g,v=/\\n+([^\\n\\S]*)(?=\\S)/g,G=/^\\/(?!\\/)((?:[^[\\/\\n\\\\]|\\\\[^\\n]|\\[(?:\\\\[^\\n]|[^\\]\\n\\\\])*\\])*)(\\/)?/,H=/^\\w*/,ce=/^(?!.*(.).*\\1)[imguy]*$/,$=/^(?:[^\\\\\\/#\\s]|\\\\[\\s\\S]|\\/(?!\\/\\/)|\\#(?!\\{)|\\s+(?:#(?!\\{).*)?)*/,_=/((?:\\\\\\\\)+)|\\\\(\\s)|\\s+(?:#.*)?/g,W=/^(\\/|\\/{3}\\s*)(\\*)/,B=/^\\/=?\\s/,T=/\\*\\//,F=/^\\s*(?:,|\\??\\.(?![.\\d])|::)/,ee=/((?:^|[^\\\\])(?:\\\\\\\\)*)\\\\(?:(0[0-7]|[1-7])|(x(?![\\da-fA-F]{2}).{0,2})|(u\\{(?![\\da-fA-F]{1,}\\})[^}]*\\}?)|(u(?!\\{|[\\da-fA-F]{4}).{0,4}))/,X=/((?:^|[^\\\\])(?:\\\\\\\\)*)\\\\(?:(0[0-7])|(x(?![\\da-fA-F]{2}).{0,2})|(u\\{(?![\\da-fA-F]{1,}\\})[^}]*\\}?)|(u(?!\\{|[\\da-fA-F]{4}).{0,4}))/,de=/(\\\\\\\\)|\\\\u\\{([\\da-fA-F]+)\\}/g,O=/^[^\\n\\S]*\\n/,ne=/\\n[^\\n\\S]*$/,re=/\\s+$/,h=[\"-=\",\"+=\",\"/=\",\"*=\",\"%=\",\"||=\",\"&&=\",\"?=\",\"<<=\",\">>=\",\">>>=\",\"&=\",\"^=\",\"|=\",\"**=\",\"//=\",\"%%=\"],le=[\"NEW\",\"TYPEOF\",\"DELETE\",\"DO\"],se=[\"!\",\"~\"],J=[\"<<\",\">>\",\">>>\"],m=[\"==\",\"!=\",\"<\",\">\",\"<=\",\">=\"],P=[\"*\",\"/\",\"%\",\"//\",\"%%\"],Y=[\"IN\",\"OF\",\"INSTANCEOF\"],r=[\"TRUE\",\"FALSE\"],l=[\"IDENTIFIER\",\"PROPERTY\",\")\",\"]\",\"?\",\"@\",\"THIS\",\"SUPER\"],x=l.concat([\"NUMBER\",\"INFINITY\",\"NAN\",\"STRING\",\"STRING_END\",\"REGEX\",\"REGEX_END\",\"BOOL\",\"NULL\",\"UNDEFINED\",\"}\",\"::\"]),u=[\"IDENTIFIER\",\")\",\"]\",\"NUMBER\"],M=x.concat([\"++\",\"--\"]),L=[\"INDENT\",\"OUTDENT\",\"TERMINATOR\"],E=[\")\",\"}\",\"]\"],ie=[\"\\\\\",\".\",\"?.\",\"?::\",\"UNARY\",\"MATH\",\"UNARY_MATH\",\"+\",\"-\",\"**\",\"SHIFT\",\"RELATION\",\"COMPARE\",\"&\",\"^\",\"|\",\"&&\",\"||\",\"BIN?\",\"EXTENDS\"]}.call(this),{exports:e}.exports}(),require[\"./parser\"]=function(){var e={},a={exports:e},t=function(){function e(){this.yy={}}var a=function(e,a,t,o){for(t=t||{},o=e.length;o--;t[e[o]]=a);return t},t=[1,24],o=[1,56],n=[1,91],r=[1,92],l=[1,87],s=[1,93],i=[1,94],d=[1,89],c=[1,90],p=[1,64],u=[1,66],m=[1,67],h=[1,68],g=[1,69],f=[1,70],y=[1,72],k=[1,73],T=[1,58],N=[1,42],v=[1,36],b=[1,76],$=[1,77],_=[1,86],C=[1,54],D=[1,59],E=[1,60],x=[1,74],I=[1,75],S=[1,47],A=[1,55],R=[1,71],O=[1,81],L=[1,82],F=[1,83],w=[1,84],P=[1,53],j=[1,80],M=[1,38],U=[1,39],V=[1,40],B=[1,41],G=[1,43],H=[1,44],W=[1,95],X=[1,6,36,47,146],Y=[1,6,35,36,47,69,70,93,127,135,146,149,157],q=[1,113],z=[1,114],J=[1,115],K=[1,110],Z=[1,98],Q=[1,97],ee=[1,96],ae=[1,99],te=[1,100],oe=[1,101],ne=[1,102],re=[1,103],le=[1,104],se=[1,105],ie=[1,106],de=[1,107],ce=[1,108],pe=[1,109],ue=[1,117],me=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],he=[2,196],ge=[1,123],fe=[1,128],ye=[1,124],ke=[1,125],Te=[1,126],Ne=[1,129],ve=[1,122],be=[1,6,35,36,47,69,70,93,127,135,146,148,149,150,156,157,174],$e=[1,6,35,36,45,46,47,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],_e=[2,122],Ce=[2,126],De=[6,35,88,93],Ee=[2,99],xe=[1,141],Ie=[1,135],Se=[1,140],Ae=[1,144],Re=[1,149],Oe=[1,147],Le=[1,151],Fe=[1,155],we=[1,153],Pe=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],je=[2,119],Me=[1,6,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Ue=[2,31],Ve=[1,183],Be=[2,86],Ge=[1,187],He=[1,193],We=[1,208],Xe=[1,203],Ye=[1,212],qe=[1,209],ze=[1,214],Je=[1,215],Ke=[1,217],Ze=[14,32,35,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],Qe=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,111,125,126,127,135,146,148,149,150,156,157,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],ea=[1,228],aa=[2,142],ta=[1,250],oa=[1,245],na=[1,256],ra=[1,6,35,36,45,46,47,65,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],la=[1,6,33,35,36,45,46,47,61,65,69,70,80,81,83,88,93,101,102,103,105,109,111,117,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],sa=[1,6,35,36,45,46,47,52,65,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],ia=[1,286],da=[45,46,126],ca=[1,297],pa=[1,296],ua=[6,35],ma=[2,97],ha=[1,303],ga=[6,35,36,88,93],fa=[6,35,36,61,70,88,93],ya=[1,6,35,36,47,69,70,80,81,83,88,93,101,102,103,105,109,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],ka=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,183,184,185,186,187,188,189,190,191,192,193],Ta=[2,347],Na=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,183,185,186,187,188,189,190,191,192,193],va=[45,46,80,81,101,102,103,105,125,126],ba=[1,330],$a=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174],_a=[2,84],Ca=[1,346],Da=[1,348],Ea=[1,353],xa=[1,355],Ia=[6,35,69,93],Sa=[2,221],Aa=[2,222],Ra=[1,6,35,36,45,46,47,61,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Oa=[1,369],La=[6,14,32,35,36,38,39,43,45,46,49,50,54,55,56,57,58,59,68,69,70,77,84,85,86,90,91,93,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],Fa=[6,35,36,69,93],wa=[6,35,36,69,93,127],Pa=[1,6,35,36,45,46,47,61,65,69,70,80,81,83,88,93,101,102,103,105,109,111,125,126,127,135,146,148,149,150,156,157,164,165,166,174,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194],ja=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,157,174],Ma=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,149,157,174],Ua=[2,273],Va=[164,165,166],Ba=[93,164,165,166],Ga=[6,35,109],Ha=[1,393],Wa=[6,35,36,93,109],Xa=[6,35,36,65,93,109],Ya=[1,399],qa=[1,400],za=[6,35,36,61,65,70,80,81,93,109,126],Ja=[6,35,36,70,80,81,93,109,126],Ka=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,178,179,185,186,187,188,189,190,191,192,193],Za=[2,339],Qa=[2,338],et=[1,6,35,36,45,46,47,52,69,70,80,81,83,88,93,101,102,103,105,109,125,126,127,135,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],at=[1,422],tt=[14,32,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,83,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],ot=[2,207],nt=[6,35,36],rt=[2,98],lt=[1,431],st=[1,432],it=[1,6,35,36,47,69,70,80,81,83,88,93,101,102,103,105,109,127,135,142,143,146,148,149,150,156,157,169,171,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],dt=[1,312],ct=[36,169,171],pt=[1,6,36,47,69,70,83,88,93,109,127,135,146,149,157,174],ut=[1,467],mt=[1,473],ht=[1,6,35,36,47,69,70,93,127,135,146,149,157,174],gt=[2,113],ft=[1,486],yt=[1,487],kt=[6,35,36,69],Tt=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,169,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Nt=[1,6,35,36,47,69,70,93,127,135,146,149,157,169],vt=[2,286],bt=[2,287],$t=[2,302],_t=[1,510],Ct=[1,511],Dt=[6,35,36,109],Et=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,150,156,157,174],xt=[1,532],It=[6,35,36,93,127],St=[6,35,36,93],At=[1,6,35,36,47,69,70,83,88,93,109,127,135,142,146,148,149,150,156,157,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Rt=[35,93],Ot=[1,560],Lt=[1,561],Ft=[1,567],wt=[1,568],Pt=[2,258],jt=[2,261],Mt=[2,274],Ut=[1,617],Vt=[1,618],Bt=[2,288],Gt=[2,292],Ht=[2,289],Wt=[2,293],Xt=[2,290],Yt=[2,291],qt=[2,303],zt=[2,304],Jt=[1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,174],Kt=[2,294],Zt=[2,296],Qt=[2,298],eo=[2,300],ao=[2,295],to=[2,297],oo=[2,299],no=[2,301],ro={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Line:5,TERMINATOR:6,Expression:7,ExpressionLine:8,Statement:9,FuncDirective:10,YieldReturn:11,AwaitReturn:12,Return:13,STATEMENT:14,Import:15,Export:16,Value:17,Code:18,Operation:19,Assign:20,If:21,Try:22,While:23,For:24,Switch:25,Class:26,Throw:27,Yield:28,CodeLine:29,IfLine:30,OperationLine:31,YIELD:32,FROM:33,Block:34,INDENT:35,OUTDENT:36,Identifier:37,IDENTIFIER:38,CSX_TAG:39,Property:40,PROPERTY:41,AlphaNumeric:42,NUMBER:43,String:44,STRING:45,STRING_START:46,STRING_END:47,Regex:48,REGEX:49,REGEX_START:50,Invocation:51,REGEX_END:52,Literal:53,JS:54,UNDEFINED:55,NULL:56,BOOL:57,INFINITY:58,NAN:59,Assignable:60,\"=\":61,AssignObj:62,ObjAssignable:63,ObjRestValue:64,\":\":65,SimpleObjAssignable:66,ThisProperty:67,\"[\":68,\"]\":69,\"...\":70,ObjSpreadExpr:71,ObjSpreadIdentifier:72,Object:73,Parenthetical:74,Super:75,This:76,SUPER:77,Arguments:78,ObjSpreadAccessor:79,\".\":80,INDEX_START:81,IndexValue:82,INDEX_END:83,RETURN:84,AWAIT:85,PARAM_START:86,ParamList:87,PARAM_END:88,FuncGlyph:89,\"->\":90,\"=>\":91,OptComma:92,\",\":93,Param:94,ParamVar:95,Array:96,Splat:97,SimpleAssignable:98,Accessor:99,Range:100,\"?.\":101,\"::\":102,\"?::\":103,Index:104,INDEX_SOAK:105,Slice:106,\"{\":107,AssignList:108,\"}\":109,CLASS:110,EXTENDS:111,IMPORT:112,ImportDefaultSpecifier:113,ImportNamespaceSpecifier:114,ImportSpecifierList:115,ImportSpecifier:116,AS:117,DEFAULT:118,IMPORT_ALL:119,EXPORT:120,ExportSpecifierList:121,EXPORT_ALL:122,ExportSpecifier:123,OptFuncExist:124,FUNC_EXIST:125,CALL_START:126,CALL_END:127,ArgList:128,THIS:129,\"@\":130,Elisions:131,ArgElisionList:132,OptElisions:133,RangeDots:134,\"..\":135,Arg:136,ArgElision:137,Elision:138,SimpleArgs:139,TRY:140,Catch:141,FINALLY:142,CATCH:143,THROW:144,\"(\":145,\")\":146,WhileLineSource:147,WHILE:148,WHEN:149,UNTIL:150,WhileSource:151,Loop:152,LOOP:153,ForBody:154,ForLineBody:155,FOR:156,BY:157,ForStart:158,ForSource:159,ForLineSource:160,ForVariables:161,OWN:162,ForValue:163,FORIN:164,FOROF:165,FORFROM:166,SWITCH:167,Whens:168,ELSE:169,When:170,LEADING_WHEN:171,IfBlock:172,IF:173,POST_IF:174,IfBlockLine:175,UNARY:176,UNARY_MATH:177,\"-\":178,\"+\":179,\"--\":180,\"++\":181,\"?\":182,MATH:183,\"**\":184,SHIFT:185,COMPARE:186,\"&\":187,\"^\":188,\"|\":189,\"&&\":190,\"||\":191,\"BIN?\":192,RELATION:193,COMPOUND_ASSIGN:194,$accept:0,$end:1},terminals_:{2:\"error\",6:\"TERMINATOR\",14:\"STATEMENT\",32:\"YIELD\",33:\"FROM\",35:\"INDENT\",36:\"OUTDENT\",38:\"IDENTIFIER\",39:\"CSX_TAG\",41:\"PROPERTY\",43:\"NUMBER\",45:\"STRING\",46:\"STRING_START\",47:\"STRING_END\",49:\"REGEX\",50:\"REGEX_START\",52:\"REGEX_END\",54:\"JS\",55:\"UNDEFINED\",56:\"NULL\",57:\"BOOL\",58:\"INFINITY\",59:\"NAN\",61:\"=\",65:\":\",68:\"[\",69:\"]\",70:\"...\",77:\"SUPER\",80:\".\",81:\"INDEX_START\",83:\"INDEX_END\",84:\"RETURN\",85:\"AWAIT\",86:\"PARAM_START\",88:\"PARAM_END\",90:\"->\",91:\"=>\",93:\",\",101:\"?.\",102:\"::\",103:\"?::\",105:\"INDEX_SOAK\",107:\"{\",109:\"}\",110:\"CLASS\",111:\"EXTENDS\",112:\"IMPORT\",117:\"AS\",118:\"DEFAULT\",119:\"IMPORT_ALL\",120:\"EXPORT\",122:\"EXPORT_ALL\",125:\"FUNC_EXIST\",126:\"CALL_START\",127:\"CALL_END\",129:\"THIS\",130:\"@\",135:\"..\",140:\"TRY\",142:\"FINALLY\",143:\"CATCH\",144:\"THROW\",145:\"(\",146:\")\",148:\"WHILE\",149:\"WHEN\",150:\"UNTIL\",153:\"LOOP\",156:\"FOR\",157:\"BY\",162:\"OWN\",164:\"FORIN\",165:\"FOROF\",166:\"FORFROM\",167:\"SWITCH\",169:\"ELSE\",171:\"LEADING_WHEN\",173:\"IF\",174:\"POST_IF\",176:\"UNARY\",177:\"UNARY_MATH\",178:\"-\",179:\"+\",180:\"--\",181:\"++\",182:\"?\",183:\"MATH\",184:\"**\",185:\"SHIFT\",186:\"COMPARE\",187:\"&\",188:\"^\",189:\"|\",190:\"&&\",191:\"||\",192:\"BIN?\",193:\"RELATION\",194:\"COMPOUND_ASSIGN\"},productions_:[0,[3,0],[3,1],[4,1],[4,3],[4,2],[5,1],[5,1],[5,1],[5,1],[10,1],[10,1],[9,1],[9,1],[9,1],[9,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[8,1],[8,1],[8,1],[28,1],[28,2],[28,3],[34,2],[34,3],[37,1],[37,1],[40,1],[42,1],[42,1],[44,1],[44,3],[48,1],[48,3],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[20,3],[20,4],[20,5],[62,1],[62,1],[62,3],[62,5],[62,3],[62,5],[66,1],[66,1],[66,1],[66,3],[63,1],[63,1],[64,2],[64,2],[64,2],[64,2],[71,1],[71,1],[71,1],[71,1],[71,1],[71,2],[71,2],[71,2],[72,2],[72,2],[79,2],[79,3],[13,2],[13,4],[13,1],[11,3],[11,2],[12,3],[12,2],[18,5],[18,2],[29,5],[29,2],[89,1],[89,1],[92,0],[92,1],[87,0],[87,1],[87,3],[87,4],[87,6],[94,1],[94,2],[94,2],[94,3],[94,1],[95,1],[95,1],[95,1],[95,1],[97,2],[97,2],[98,1],[98,2],[98,2],[98,1],[60,1],[60,1],[60,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[75,3],[75,4],[99,2],[99,2],[99,2],[99,2],[99,1],[99,1],[104,3],[104,2],[82,1],[82,1],[73,4],[108,0],[108,1],[108,3],[108,4],[108,6],[26,1],[26,2],[26,3],[26,4],[26,2],[26,3],[26,4],[26,5],[15,2],[15,4],[15,4],[15,5],[15,7],[15,6],[15,9],[115,1],[115,3],[115,4],[115,4],[115,6],[116,1],[116,3],[116,1],[116,3],[113,1],[114,3],[16,3],[16,5],[16,2],[16,4],[16,5],[16,6],[16,3],[16,5],[16,4],[16,7],[121,1],[121,3],[121,4],[121,4],[121,6],[123,1],[123,3],[123,3],[123,1],[123,3],[51,3],[51,3],[51,3],[124,0],[124,1],[78,2],[78,4],[76,1],[76,1],[67,2],[96,2],[96,3],[96,4],[134,1],[134,1],[100,5],[100,5],[106,3],[106,2],[106,3],[106,2],[106,2],[106,1],[128,1],[128,3],[128,4],[128,4],[128,6],[136,1],[136,1],[136,1],[136,1],[132,1],[132,3],[132,4],[132,4],[132,6],[137,1],[137,2],[133,1],[133,2],[131,1],[131,2],[138,1],[139,1],[139,1],[139,3],[139,3],[22,2],[22,3],[22,4],[22,5],[141,3],[141,3],[141,2],[27,2],[27,4],[74,3],[74,5],[147,2],[147,4],[147,2],[147,4],[151,2],[151,4],[151,4],[151,2],[151,4],[151,4],[23,2],[23,2],[23,2],[23,2],[23,1],[152,2],[152,2],[24,2],[24,2],[24,2],[24,2],[154,2],[154,4],[154,2],[155,4],[155,2],[158,2],[158,3],[163,1],[163,1],[163,1],[163,1],[161,1],[161,3],[159,2],[159,2],[159,4],[159,4],[159,4],[159,4],[159,4],[159,4],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,6],[159,2],[159,4],[159,4],[160,2],[160,2],[160,4],[160,4],[160,4],[160,4],[160,4],[160,4],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,6],[160,2],[160,4],[160,4],[25,5],[25,5],[25,7],[25,7],[25,4],[25,6],[168,1],[168,2],[170,3],[170,4],[172,3],[172,5],[21,1],[21,3],[21,3],[21,3],[175,3],[175,5],[30,1],[30,3],[30,3],[30,3],[31,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,3],[19,5],[19,4]],performAction:function(e,a,t,o,n,r,l){var s=r.length-1;switch(n){case 1:return this.$=o.addDataToNode(o,l[s],l[s])(new o.Block);break;case 2:return this.$=r[s];break;case 3:this.$=o.addDataToNode(o,l[s],l[s])(o.Block.wrap([r[s]]));break;case 4:this.$=o.addDataToNode(o,l[s-2],l[s])(r[s-2].push(r[s]));break;case 5:this.$=r[s-1];break;case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 40:case 45:case 47:case 57:case 62:case 63:case 64:case 66:case 67:case 72:case 73:case 74:case 75:case 76:case 97:case 98:case 109:case 110:case 111:case 112:case 118:case 119:case 122:case 127:case 136:case 221:case 222:case 223:case 225:case 237:case 238:case 280:case 281:case 330:case 336:case 342:this.$=r[s];break;case 13:this.$=o.addDataToNode(o,l[s],l[s])(new o.StatementLiteral(r[s]));break;case 31:this.$=o.addDataToNode(o,l[s],l[s])(new o.Op(r[s],new o.Value(new o.Literal(\"\"))));break;case 32:case 346:case 347:case 348:case 351:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(r[s-1],r[s]));break;case 33:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Op(r[s-2].concat(r[s-1]),r[s]));break;case 34:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Block);break;case 35:case 83:case 137:this.$=o.addDataToNode(o,l[s-2],l[s])(r[s-1]);break;case 36:this.$=o.addDataToNode(o,l[s],l[s])(new o.IdentifierLiteral(r[s]));break;case 37:this.$=o.addDataToNode(o,l[s],l[s])(new o.CSXTag(r[s]));break;case 38:this.$=o.addDataToNode(o,l[s],l[s])(new o.PropertyName(r[s]));break;case 39:this.$=o.addDataToNode(o,l[s],l[s])(new o.NumberLiteral(r[s]));break;case 41:this.$=o.addDataToNode(o,l[s],l[s])(new o.StringLiteral(r[s]));break;case 42:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.StringWithInterpolations(r[s-1]));break;case 43:this.$=o.addDataToNode(o,l[s],l[s])(new o.RegexLiteral(r[s]));break;case 44:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.RegexWithInterpolations(r[s-1].args));break;case 46:this.$=o.addDataToNode(o,l[s],l[s])(new o.PassthroughLiteral(r[s]));break;case 48:this.$=o.addDataToNode(o,l[s],l[s])(new o.UndefinedLiteral(r[s]));break;case 49:this.$=o.addDataToNode(o,l[s],l[s])(new o.NullLiteral(r[s]));break;case 50:this.$=o.addDataToNode(o,l[s],l[s])(new o.BooleanLiteral(r[s]));break;case 51:this.$=o.addDataToNode(o,l[s],l[s])(new o.InfinityLiteral(r[s]));break;case 52:this.$=o.addDataToNode(o,l[s],l[s])(new o.NaNLiteral(r[s]));break;case 53:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Assign(r[s-2],r[s]));break;case 54:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Assign(r[s-3],r[s]));break;case 55:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Assign(r[s-4],r[s-1]));break;case 56:case 115:case 120:case 121:case 123:case 124:case 125:case 126:case 128:case 282:case 283:this.$=o.addDataToNode(o,l[s],l[s])(new o.Value(r[s]));break;case 58:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Assign(o.addDataToNode(o,l[s-2])(new o.Value(r[s-2])),r[s],\"object\",{operatorToken:o.addDataToNode(o,l[s-1])(new o.Literal(r[s-1]))}));break;case 59:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Assign(o.addDataToNode(o,l[s-4])(new o.Value(r[s-4])),r[s-1],\"object\",{operatorToken:o.addDataToNode(o,l[s-3])(new o.Literal(r[s-3]))}));break;case 60:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Assign(o.addDataToNode(o,l[s-2])(new o.Value(r[s-2])),r[s],null,{operatorToken:o.addDataToNode(o,l[s-1])(new o.Literal(r[s-1]))}));break;case 61:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Assign(o.addDataToNode(o,l[s-4])(new o.Value(r[s-4])),r[s-1],null,{operatorToken:o.addDataToNode(o,l[s-3])(new o.Literal(r[s-3]))}));break;case 65:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Value(new o.ComputedPropertyName(r[s-1])));break;case 68:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Splat(new o.Value(r[s-1])));break;case 69:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Splat(new o.Value(r[s])));break;case 70:case 113:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Splat(r[s-1]));break;case 71:case 114:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Splat(r[s]));break;case 77:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.SuperCall(o.addDataToNode(o,l[s-1])(new o.Super),r[s],!1,r[s-1]));break;case 78:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Call(new o.Value(r[s-1]),r[s]));break;case 79:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Call(r[s-1],r[s]));break;case 80:case 81:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Value(r[s-1]).add(r[s]));break;case 82:case 131:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Access(r[s]));break;case 84:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Return(r[s]));break;case 85:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Return(new o.Value(r[s-1])));break;case 86:this.$=o.addDataToNode(o,l[s],l[s])(new o.Return);break;case 87:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.YieldReturn(r[s]));break;case 88:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.YieldReturn);break;case 89:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.AwaitReturn(r[s]));break;case 90:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.AwaitReturn);break;case 91:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Code(r[s-3],r[s],r[s-1],o.addDataToNode(o,l[s-4])(new o.Literal(r[s-4]))));break;case 92:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Code([],r[s],r[s-1]));break;case 93:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Code(r[s-3],o.addDataToNode(o,l[s])(o.Block.wrap([r[s]])),r[s-1],o.addDataToNode(o,l[s-4])(new o.Literal(r[s-4]))));break;case 94:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Code([],o.addDataToNode(o,l[s])(o.Block.wrap([r[s]])),r[s-1]));break;case 95:case 96:this.$=o.addDataToNode(o,l[s],l[s])(new o.FuncGlyph(r[s]));break;case 99:case 142:case 232:this.$=o.addDataToNode(o,l[s],l[s])([]);break;case 100:case 143:case 162:case 183:case 216:case 230:case 234:case 284:this.$=o.addDataToNode(o,l[s],l[s])([r[s]]);break;case 101:case 144:case 163:case 184:case 217:case 226:this.$=o.addDataToNode(o,l[s-2],l[s])(r[s-2].concat(r[s]));break;case 102:case 145:case 164:case 185:case 218:this.$=o.addDataToNode(o,l[s-3],l[s])(r[s-3].concat(r[s]));break;case 103:case 146:case 166:case 187:case 220:this.$=o.addDataToNode(o,l[s-5],l[s])(r[s-5].concat(r[s-2]));break;case 104:this.$=o.addDataToNode(o,l[s],l[s])(new o.Param(r[s]));break;case 105:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Param(r[s-1],null,!0));break;case 106:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Param(r[s],null,!0));break;case 107:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Param(r[s-2],r[s]));break;case 108:case 224:this.$=o.addDataToNode(o,l[s],l[s])(new o.Expansion);break;case 116:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s-1].add(r[s]));break;case 117:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Value(r[s-1]).add(r[s]));break;case 129:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Super(o.addDataToNode(o,l[s])(new o.Access(r[s])),[],!1,r[s-2]));break;case 130:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Super(o.addDataToNode(o,l[s-1])(new o.Index(r[s-1])),[],!1,r[s-3]));break;case 132:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Access(r[s],\"soak\"));break;case 133:this.$=o.addDataToNode(o,l[s-1],l[s])([o.addDataToNode(o,l[s-1])(new o.Access(new o.PropertyName(\"prototype\"))),o.addDataToNode(o,l[s])(new o.Access(r[s]))]);break;case 134:this.$=o.addDataToNode(o,l[s-1],l[s])([o.addDataToNode(o,l[s-1])(new o.Access(new o.PropertyName(\"prototype\"),\"soak\")),o.addDataToNode(o,l[s])(new o.Access(r[s]))]);break;case 135:this.$=o.addDataToNode(o,l[s],l[s])(new o.Access(new o.PropertyName(\"prototype\")));break;case 138:this.$=o.addDataToNode(o,l[s-1],l[s])(o.extend(r[s],{soak:!0}));break;case 139:this.$=o.addDataToNode(o,l[s],l[s])(new o.Index(r[s]));break;case 140:this.$=o.addDataToNode(o,l[s],l[s])(new o.Slice(r[s]));break;case 141:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Obj(r[s-2],r[s-3].generated));break;case 147:this.$=o.addDataToNode(o,l[s],l[s])(new o.Class);break;case 148:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Class(null,null,r[s]));break;case 149:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Class(null,r[s]));break;case 150:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Class(null,r[s-1],r[s]));break;case 151:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Class(r[s]));break;case 152:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Class(r[s-1],null,r[s]));break;case 153:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Class(r[s-2],r[s]));break;case 154:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Class(r[s-3],r[s-1],r[s]));break;case 155:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.ImportDeclaration(null,r[s]));break;case 156:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.ImportDeclaration(new o.ImportClause(r[s-2],null),r[s]));break;case 157:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.ImportDeclaration(new o.ImportClause(null,r[s-2]),r[s]));break;case 158:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.ImportDeclaration(new o.ImportClause(null,new o.ImportSpecifierList([])),r[s]));break;case 159:this.$=o.addDataToNode(o,l[s-6],l[s])(new o.ImportDeclaration(new o.ImportClause(null,new o.ImportSpecifierList(r[s-4])),r[s]));break;case 160:this.$=o.addDataToNode(o,l[s-5],l[s])(new o.ImportDeclaration(new o.ImportClause(r[s-4],r[s-2]),r[s]));break;case 161:this.$=o.addDataToNode(o,l[s-8],l[s])(new o.ImportDeclaration(new o.ImportClause(r[s-7],new o.ImportSpecifierList(r[s-4])),r[s]));break;case 165:case 186:case 199:case 219:this.$=o.addDataToNode(o,l[s-3],l[s])(r[s-2]);break;case 167:this.$=o.addDataToNode(o,l[s],l[s])(new o.ImportSpecifier(r[s]));break;case 168:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ImportSpecifier(r[s-2],r[s]));break;case 169:this.$=o.addDataToNode(o,l[s],l[s])(new o.ImportSpecifier(new o.Literal(r[s])));break;case 170:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ImportSpecifier(new o.Literal(r[s-2]),r[s]));break;case 171:this.$=o.addDataToNode(o,l[s],l[s])(new o.ImportDefaultSpecifier(r[s]));break;case 172:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ImportNamespaceSpecifier(new o.Literal(r[s-2]),r[s]));break;case 173:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportNamedDeclaration(new o.ExportSpecifierList([])));break;case 174:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.ExportNamedDeclaration(new o.ExportSpecifierList(r[s-2])));break;case 175:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.ExportNamedDeclaration(r[s]));break;case 176:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.ExportNamedDeclaration(new o.Assign(r[s-2],r[s],null,{moduleDeclaration:\"export\"})));break;case 177:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.ExportNamedDeclaration(new o.Assign(r[s-3],r[s],null,{moduleDeclaration:\"export\"})));break;case 178:this.$=o.addDataToNode(o,l[s-5],l[s])(new o.ExportNamedDeclaration(new o.Assign(r[s-4],r[s-1],null,{moduleDeclaration:\"export\"})));break;case 179:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportDefaultDeclaration(r[s]));break;case 180:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.ExportDefaultDeclaration(new o.Value(r[s-1])));break;case 181:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.ExportAllDeclaration(new o.Literal(r[s-2]),r[s]));break;case 182:this.$=o.addDataToNode(o,l[s-6],l[s])(new o.ExportNamedDeclaration(new o.ExportSpecifierList(r[s-4]),r[s]));break;case 188:this.$=o.addDataToNode(o,l[s],l[s])(new o.ExportSpecifier(r[s]));break;case 189:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportSpecifier(r[s-2],r[s]));break;case 190:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportSpecifier(r[s-2],new o.Literal(r[s])));break;case 191:this.$=o.addDataToNode(o,l[s],l[s])(new o.ExportSpecifier(new o.Literal(r[s])));break;case 192:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.ExportSpecifier(new o.Literal(r[s-2]),r[s]));break;case 193:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.TaggedTemplateCall(r[s-2],r[s],r[s-1]));break;case 194:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Call(r[s-2],r[s],r[s-1]));break;case 195:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.SuperCall(o.addDataToNode(o,l[s-2])(new o.Super),r[s],r[s-1],r[s-2]));break;case 196:this.$=o.addDataToNode(o,l[s],l[s])(!1);break;case 197:this.$=o.addDataToNode(o,l[s],l[s])(!0);break;case 198:this.$=o.addDataToNode(o,l[s-1],l[s])([]);break;case 200:case 201:this.$=o.addDataToNode(o,l[s],l[s])(new o.Value(new o.ThisLiteral(r[s])));break;case 202:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Value(o.addDataToNode(o,l[s-1])(new o.ThisLiteral(r[s-1])),[o.addDataToNode(o,l[s])(new o.Access(r[s]))],\"this\"));break;case 203:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Arr([]));break;case 204:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Arr(r[s-1]));break;case 205:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Arr([].concat(r[s-2],r[s-1])));break;case 206:this.$=o.addDataToNode(o,l[s],l[s])(\"inclusive\");break;case 207:this.$=o.addDataToNode(o,l[s],l[s])(\"exclusive\");break;case 208:case 209:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Range(r[s-3],r[s-1],r[s-2]));break;case 210:case 212:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Range(r[s-2],r[s],r[s-1]));break;case 211:case 213:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Range(r[s-1],null,r[s]));break;case 214:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Range(null,r[s],r[s-1]));break;case 215:this.$=o.addDataToNode(o,l[s],l[s])(new o.Range(null,null,r[s]));break;case 227:this.$=o.addDataToNode(o,l[s-3],l[s])(r[s-3].concat(r[s-2],r[s]));break;case 228:this.$=o.addDataToNode(o,l[s-3],l[s])(r[s-2].concat(r[s-1]));break;case 229:this.$=o.addDataToNode(o,l[s-5],l[s])(r[s-5].concat(r[s-4],r[s-2],r[s-1]));break;case 231:case 235:case 331:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s-1].concat(r[s]));break;case 233:this.$=o.addDataToNode(o,l[s-1],l[s])([].concat(r[s]));break;case 236:this.$=o.addDataToNode(o,l[s],l[s])(new o.Elision);break;case 239:case 240:this.$=o.addDataToNode(o,l[s-2],l[s])([].concat(r[s-2],r[s]));break;case 241:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Try(r[s]));break;case 242:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Try(r[s-1],r[s][0],r[s][1]));break;case 243:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Try(r[s-2],null,null,r[s]));break;case 244:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Try(r[s-3],r[s-2][0],r[s-2][1],r[s]));break;case 245:this.$=o.addDataToNode(o,l[s-2],l[s])([r[s-1],r[s]]);break;case 246:this.$=o.addDataToNode(o,l[s-2],l[s])([o.addDataToNode(o,l[s-1])(new o.Value(r[s-1])),r[s]]);break;case 247:this.$=o.addDataToNode(o,l[s-1],l[s])([null,r[s]]);break;case 248:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Throw(r[s]));break;case 249:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Throw(new o.Value(r[s-1])));break;case 250:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Parens(r[s-1]));break;case 251:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Parens(r[s-2]));break;case 252:case 256:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.While(r[s]));break;case 253:case 257:case 258:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.While(r[s-2],{guard:r[s]}));break;case 254:case 259:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.While(r[s],{invert:!0}));break;case 255:case 260:case 261:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.While(r[s-2],{invert:!0,guard:r[s]}));break;case 262:case 263:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s-1].addBody(r[s]));break;case 264:case 265:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s].addBody(o.addDataToNode(o,l[s-1])(o.Block.wrap([r[s-1]]))));break;case 266:this.$=o.addDataToNode(o,l[s],l[s])(r[s]);break;case 267:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.While(o.addDataToNode(o,l[s-1])(new o.BooleanLiteral(\"true\"))).addBody(r[s]));break;case 268:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.While(o.addDataToNode(o,l[s-1])(new o.BooleanLiteral(\"true\"))).addBody(o.addDataToNode(o,l[s])(o.Block.wrap([r[s]]))));break;case 269:case 270:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.For(r[s-1],r[s]));break;case 271:case 272:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.For(r[s],r[s-1]));break;case 273:this.$=o.addDataToNode(o,l[s-1],l[s])({source:o.addDataToNode(o,l[s])(new o.Value(r[s]))});break;case 274:case 276:this.$=o.addDataToNode(o,l[s-3],l[s])({source:o.addDataToNode(o,l[s-2])(new o.Value(r[s-2])),step:r[s]});break;case 275:case 277:this.$=o.addDataToNode(o,l[s-1],l[s])(function(){return r[s].own=r[s-1].own,r[s].ownTag=r[s-1].ownTag,r[s].name=r[s-1][0],r[s].index=r[s-1][1],r[s]}());break;case 278:this.$=o.addDataToNode(o,l[s-1],l[s])(r[s]);break;case 279:this.$=o.addDataToNode(o,l[s-2],l[s])(function(){return r[s].own=!0,r[s].ownTag=o.addDataToNode(o,l[s-1])(new o.Literal(r[s-1])),r[s]}());break;case 285:this.$=o.addDataToNode(o,l[s-2],l[s])([r[s-2],r[s]]);break;case 286:case 305:this.$=o.addDataToNode(o,l[s-1],l[s])({source:r[s]});break;case 287:case 306:this.$=o.addDataToNode(o,l[s-1],l[s])({source:r[s],object:!0});break;case 288:case 289:case 307:case 308:this.$=o.addDataToNode(o,l[s-3],l[s])({source:r[s-2],guard:r[s]});break;case 290:case 291:case 309:case 310:this.$=o.addDataToNode(o,l[s-3],l[s])({source:r[s-2],guard:r[s],object:!0});break;case 292:case 293:case 311:case 312:this.$=o.addDataToNode(o,l[s-3],l[s])({source:r[s-2],step:r[s]});break;case 294:case 295:case 296:case 297:case 313:case 314:case 315:case 316:this.$=o.addDataToNode(o,l[s-5],l[s])({source:r[s-4],guard:r[s-2],step:r[s]});break;case 298:case 299:case 300:case 301:case 317:case 318:case 319:case 320:this.$=o.addDataToNode(o,l[s-5],l[s])({source:r[s-4],step:r[s-2],guard:r[s]});break;case 302:case 321:this.$=o.addDataToNode(o,l[s-1],l[s])({source:r[s],from:!0});break;case 303:case 304:case 322:case 323:this.$=o.addDataToNode(o,l[s-3],l[s])({source:r[s-2],guard:r[s],from:!0});break;case 324:case 325:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Switch(r[s-3],r[s-1]));break;case 326:case 327:this.$=o.addDataToNode(o,l[s-6],l[s])(new o.Switch(r[s-5],r[s-3],r[s-1]));break;case 328:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Switch(null,r[s-1]));break;case 329:this.$=o.addDataToNode(o,l[s-5],l[s])(new o.Switch(null,r[s-3],r[s-1]));break;case 332:this.$=o.addDataToNode(o,l[s-2],l[s])([[r[s-1],r[s]]]);break;case 333:this.$=o.addDataToNode(o,l[s-3],l[s])([[r[s-2],r[s-1]]]);break;case 334:case 340:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.If(r[s-1],r[s],{type:r[s-2]}));break;case 335:case 341:this.$=o.addDataToNode(o,l[s-4],l[s])(r[s-4].addElse(o.addDataToNode(o,l[s-2],l[s])(new o.If(r[s-1],r[s],{type:r[s-2]}))));break;case 337:case 343:this.$=o.addDataToNode(o,l[s-2],l[s])(r[s-2].addElse(r[s]));break;case 338:case 339:case 344:case 345:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.If(r[s],o.addDataToNode(o,l[s-2])(o.Block.wrap([r[s-2]])),{type:r[s-1],statement:!0}));break;case 349:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"-\",r[s]));break;case 350:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"+\",r[s]));break;case 352:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"--\",r[s]));break;case 353:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"++\",r[s]));break;case 354:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"--\",r[s-1],null,!0));break;case 355:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Op(\"++\",r[s-1],null,!0));break;case 356:this.$=o.addDataToNode(o,l[s-1],l[s])(new o.Existence(r[s-1]));break;case 357:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Op(\"+\",r[s-2],r[s]));break;case 358:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Op(\"-\",r[s-2],r[s]));break;case 359:case 360:case 361:case 362:case 363:case 364:case 365:case 366:case 367:case 368:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Op(r[s-1],r[s-2],r[s]));break;case 369:this.$=o.addDataToNode(o,l[s-2],l[s])(function(){return\"!\"===r[s-1].charAt(0)?new o.Op(r[s-1].slice(1),r[s-2],r[s]).invert():new o.Op(r[s-1],r[s-2],r[s])}());break;case 370:this.$=o.addDataToNode(o,l[s-2],l[s])(new o.Assign(r[s-2],r[s],r[s-1]));break;case 371:this.$=o.addDataToNode(o,l[s-4],l[s])(new o.Assign(r[s-4],r[s-1],r[s-3]));break;case 372:this.$=o.addDataToNode(o,l[s-3],l[s])(new o.Assign(r[s-3],r[s],r[s-2]))}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{1:[3]},{1:[2,2],6:W},a(X,[2,3]),a(Y,[2,6],{151:111,154:112,158:116,148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,7]),a(Y,[2,8],{158:116,151:118,154:119,148:q,150:z,156:J,174:ue}),a(Y,[2,9]),a(me,[2,16],{124:120,99:121,104:127,45:he,46:he,126:he,80:ge,81:fe,101:ye,102:ke,103:Te,105:Ne,125:ve}),a(me,[2,17],{104:127,99:130,80:ge,81:fe,101:ye,102:ke,103:Te,105:Ne}),a(me,[2,18]),a(me,[2,19]),a(me,[2,20]),a(me,[2,21]),a(me,[2,22]),a(me,[2,23]),a(me,[2,24]),a(me,[2,25]),a(me,[2,26]),a(me,[2,27]),a(Y,[2,28]),a(Y,[2,29]),a(Y,[2,30]),a(be,[2,12]),a(be,[2,13]),a(be,[2,14]),a(be,[2,15]),a(Y,[2,10]),a(Y,[2,11]),a($e,_e,{61:[1,131]}),a($e,[2,123]),a($e,[2,124]),a($e,[2,125]),a($e,Ce),a($e,[2,127]),a($e,[2,128]),a(De,Ee,{87:132,94:133,95:134,37:136,67:137,96:138,73:139,38:n,39:r,68:xe,70:Ie,107:_,130:Se}),{5:143,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,34:142,35:Ae,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:145,8:146,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:150,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:156,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:157,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:158,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:[1,159],85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{17:161,18:162,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:163,67:79,68:y,73:62,74:31,75:35,76:34,77:k,86:Le,89:152,90:b,91:$,96:61,98:160,100:32,107:_,129:x,130:I,145:R},{17:161,18:162,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:163,67:79,68:y,73:62,74:31,75:35,76:34,77:k,86:Le,89:152,90:b,91:$,96:61,98:164,100:32,107:_,129:x,130:I,145:R},a(Pe,je,{180:[1,165],181:[1,166],194:[1,167]}),a(me,[2,336],{169:[1,168]}),{34:169,35:Ae},{34:170,35:Ae},{34:171,35:Ae},a(me,[2,266]),{34:172,35:Ae},{34:173,35:Ae},{7:174,8:175,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:[1,176],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Me,[2,147],{53:30,74:31,100:32,51:33,76:34,75:35,96:61,73:62,42:63,48:65,37:78,67:79,44:88,89:152,17:161,18:162,60:163,34:177,98:179,35:Ae,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,86:Le,90:b,91:$,107:_,111:[1,178],129:x,130:I,145:R}),{7:180,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,181],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a([1,6,35,36,47,69,70,93,127,135,146,148,149,150,156,157,174,182,183,184,185,186,187,188,189,190,191,192,193],Ue,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:182,14:t,32:Re,33:Ve,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:[1,184],85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),a(Y,[2,342],{169:[1,185]}),a([1,6,36,47,69,70,93,127,135,146,148,149,150,156,157,174],Be,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:186,14:t,32:Re,35:Ge,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),{37:192,38:n,39:r,44:188,45:s,46:i,107:[1,191],113:189,114:190,119:He},{26:195,37:196,38:n,39:r,107:[1,194],110:C,118:[1,197],122:[1,198]},a(Pe,[2,120]),a(Pe,[2,121]),a($e,[2,45]),a($e,[2,46]),a($e,[2,47]),a($e,[2,48]),a($e,[2,49]),a($e,[2,50]),a($e,[2,51]),a($e,[2,52]),{4:199,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,35:[1,200],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:201,8:202,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:We,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,69:Xe,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:204,132:205,136:210,137:207,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{80:ze,81:Je,124:213,125:ve,126:he},a($e,[2,200]),a($e,[2,201],{40:216,41:Ke}),a(Ze,[2,95]),a(Ze,[2,96]),a(Qe,[2,115]),a(Qe,[2,118]),{7:218,8:219,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:220,8:221,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:222,8:223,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:225,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,34:224,35:Ae,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{37:230,38:n,39:r,67:231,68:y,73:233,96:232,100:226,107:_,130:Se,161:227,162:ea,163:229},{159:234,160:235,164:[1,236],165:[1,237],166:[1,238]},a([6,35,93,109],aa,{44:88,108:239,62:240,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,38:n,39:r,41:Ke,43:l,45:s,46:i,68:ta,70:oa,77:na,107:_,129:x,130:I,145:R}),a(ra,[2,39]),a(ra,[2,40]),a($e,[2,43]),{17:161,18:162,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:257,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:163,67:79,68:y,73:62,74:31,75:35,76:34,77:k,86:Le,89:152,90:b,91:$,96:61,98:258,100:32,107:_,129:x,130:I,145:R},a(la,[2,36]),a(la,[2,37]),a(sa,[2,41]),{4:259,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(X,[2,5],{7:4,8:5,9:6,10:7,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,11:27,12:28,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,5:260,14:t,32:o,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:N,86:v,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:j,176:M,177:U,178:V,179:B,180:G,181:H}),a(me,[2,356]),{7:261,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:262,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:263,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:264,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:265,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:266,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:267,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:268,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:269,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:270,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:271,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:272,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:273,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:274,8:275,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(me,[2,265]),a(me,[2,270]),{7:220,8:276,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:222,8:277,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{37:230,38:n,39:r,67:231,68:y,73:233,96:232,100:278,107:_,130:Se,161:227,162:ea,163:229},{159:234,164:[1,279],165:[1,280],166:[1,281]},{7:282,8:283,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(me,[2,264]),a(me,[2,269]),{44:284,45:s,46:i,78:285,126:ia},a(Qe,[2,116]),a(da,[2,197]),{40:287,41:Ke},{40:288,41:Ke},a(Qe,[2,135],{40:289,41:Ke}),{40:290,41:Ke},a(Qe,[2,136]),{7:292,8:294,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:ca,73:62,74:31,75:35,76:34,77:k,82:291,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,106:293,107:_,110:C,112:D,120:E,129:x,130:I,134:295,135:pa,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{81:fe,104:298,105:Ne},a(Qe,[2,117]),{6:[1,300],7:299,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,301],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(ua,ma,{92:304,88:[1,302],93:ha}),a(ga,[2,100]),a(ga,[2,104],{61:[1,306],70:[1,305]}),a(ga,[2,108],{37:136,67:137,96:138,73:139,95:307,38:n,39:r,68:xe,107:_,130:Se}),a(fa,[2,109]),a(fa,[2,110]),a(fa,[2,111]),a(fa,[2,112]),{40:216,41:Ke},{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:We,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,69:Xe,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:204,132:205,136:210,137:207,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(ya,[2,92]),a(Y,[2,94]),{4:311,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,36:[1,310],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(ka,Ta,{151:111,154:112,158:116,182:ee}),a(Y,[2,346]),{7:158,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{148:q,150:z,151:118,154:119,156:J,158:116,174:ue},a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,182,183,184,185,186,187,188,189,190,191,192,193],Ue,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:182,14:t,32:Re,33:Ve,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),a(Na,[2,348],{151:111,154:112,158:116,182:ee,184:te}),a(De,Ee,{94:133,95:134,37:136,67:137,96:138,73:139,87:313,38:n,39:r,68:xe,70:Ie,107:_,130:Se}),{34:142,35:Ae},{7:314,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{148:q,150:z,151:118,154:119,156:J,158:116,174:[1,315]},{7:316,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Na,[2,349],{151:111,154:112,158:116,182:ee,184:te}),a(Na,[2,350],{151:111,154:112,158:116,182:ee,184:te}),a(ka,[2,351],{151:111,154:112,158:116,182:ee}),a(Y,[2,90],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:317,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:Be,150:Be,156:Be,174:Be,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),a(me,[2,352],{45:je,46:je,80:je,81:je,101:je,102:je,103:je,105:je,125:je,126:je}),a(da,he,{124:120,99:121,104:127,80:ge,81:fe,101:ye,102:ke,103:Te,105:Ne,125:ve}),{80:ge,81:fe,99:130,101:ye,102:ke,103:Te,104:127,105:Ne},a(va,_e),a(me,[2,353],{45:je,46:je,80:je,81:je,101:je,102:je,103:je,105:je,125:je,126:je}),a(me,[2,354]),a(me,[2,355]),{6:[1,320],7:318,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,319],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{34:321,35:Ae,173:[1,322]},a(me,[2,241],{141:323,142:[1,324],143:[1,325]}),a(me,[2,262]),a(me,[2,263]),a(me,[2,271]),a(me,[2,272]),{35:[1,326],148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[1,327]},{168:328,170:329,171:ba},a(me,[2,148]),{7:331,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Me,[2,151],{34:332,35:Ae,45:je,46:je,80:je,81:je,101:je,102:je,103:je,105:je,125:je,126:je,111:[1,333]}),a($a,[2,248],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{73:334,107:_},a($a,[2,32],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:335,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a([1,6,36,47,69,70,93,127,135,146,149,157],[2,88],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:336,14:t,32:Re,35:Ge,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:Be,150:Be,156:Be,174:Be,153:F,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),{34:337,35:Ae,173:[1,338]},a(be,_a,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{73:339,107:_},a(be,[2,155]),{33:[1,340],93:[1,341]},{33:[1,342]},{35:Ca,37:347,38:n,39:r,109:[1,343],115:344,116:345,118:Da},a([33,93],[2,171]),{117:[1,349]},{35:Ea,37:354,38:n,39:r,109:[1,350],118:xa,121:351,123:352},a(be,[2,175]),{61:[1,356]},{7:357,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,358],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{33:[1,359]},{6:W,146:[1,360]},{4:361,5:3,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Ia,Sa,{151:111,154:112,158:116,134:362,70:[1,363],135:pa,148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Ia,Aa,{134:364,70:ca,135:pa}),a(Ra,[2,203]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,69:[1,365],70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,136:367,138:366,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a([6,35,69],ma,{133:368,92:370,93:Oa}),a(La,[2,234]),a(Fa,[2,225]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:We,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:372,132:371,136:210,137:207,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(La,[2,236]),a(Fa,[2,230]),a(wa,[2,223]),a(wa,[2,224],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,98:45,172:46,151:48,147:49,152:50,154:51,155:52,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,89:152,9:154,7:373,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,77:k,84:T,85:Oe,86:Le,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H}),{78:374,126:ia},{40:375,41:Ke},{7:376,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Pa,[2,202]),a(Pa,[2,38]),{34:377,35:Ae,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{34:378,35:Ae},a(ja,[2,256],{151:111,154:112,158:116,148:q,149:[1,379],150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:[2,252],149:[1,380]},a(ja,[2,259],{151:111,154:112,158:116,148:q,149:[1,381],150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:[2,254],149:[1,382]},a(me,[2,267]),a(Ma,[2,268],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:Ua,157:[1,383]},a(Va,[2,278]),{37:230,38:n,39:r,67:231,68:xe,73:233,96:232,107:_,130:Se,161:384,163:229},a(Va,[2,284],{93:[1,385]}),a(Ba,[2,280]),a(Ba,[2,281]),a(Ba,[2,282]),a(Ba,[2,283]),a(me,[2,275]),{35:[2,277]},{7:386,8:387,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:388,8:389,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:390,8:391,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Ga,ma,{92:392,93:Ha}),a(Wa,[2,143]),a(Wa,[2,56],{65:[1,394]}),a(Wa,[2,57]),a(Xa,[2,66],{78:397,79:398,61:[1,395],70:[1,396],80:Ya,81:qa,126:ia}),a(Xa,[2,67]),{37:247,38:n,39:r,40:248,41:Ke,66:401,67:249,68:ta,71:402,72:251,73:252,74:253,75:254,76:255,77:na,107:_,129:x,130:I,145:R},{70:[1,403],78:404,79:405,80:Ya,81:qa,126:ia},a(za,[2,62]),a(za,[2,63]),a(za,[2,64]),{7:406,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Ja,[2,72]),a(Ja,[2,73]),a(Ja,[2,74]),a(Ja,[2,75]),a(Ja,[2,76]),{78:407,80:ze,81:Je,126:ia},a(va,Ce,{52:[1,408]}),a(va,je),{6:W,47:[1,409]},a(X,[2,4]),a(Ka,[2,357],{151:111,154:112,158:116,182:ee,183:ae,184:te}),a(Ka,[2,358],{151:111,154:112,158:116,182:ee,183:ae,184:te}),a(Na,[2,359],{151:111,154:112,158:116,182:ee,184:te}),a(Na,[2,360],{151:111,154:112,158:116,182:ee,184:te}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,185,186,187,188,189,190,191,192,193],[2,361],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,186,187,188,189,190,191,192],[2,362],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,187,188,189,190,191,192],[2,363],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,188,189,190,191,192],[2,364],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,189,190,191,192],[2,365],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,190,191,192],[2,366],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,191,192],[2,367],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,192],[2,368],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,193:pe}),a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,157,174,186,187,188,189,190,191,192,193],[2,369],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe}),a(Ma,Za,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,345]),{149:[1,410]},{149:[1,411]},a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,149,150,156,174,178,179,182,183,184,185,186,187,188,189,190,191,192,193],Ua,{157:[1,412]}),{7:413,8:414,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:415,8:416,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:417,8:418,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Ma,Qa,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,344]),a(et,[2,193]),a(et,[2,194]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:at,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,127:[1,419],128:420,129:x,130:I,136:421,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Qe,[2,131]),a(Qe,[2,132]),a(Qe,[2,133]),a(Qe,[2,134]),{83:[1,423]},{70:ca,83:[2,139],134:424,135:pa,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{83:[2,140]},{70:ca,134:425,135:pa},{7:426,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,83:[2,215],84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(tt,[2,206]),a(tt,ot),a(Qe,[2,138]),a($a,[2,53],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:427,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:428,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{89:429,90:b,91:$},a(nt,rt,{95:134,37:136,67:137,96:138,73:139,94:430,38:n,39:r,68:xe,70:Ie,107:_,130:Se}),{6:lt,35:st},a(ga,[2,105]),{7:433,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(ga,[2,106]),a(wa,Sa,{151:111,154:112,158:116,70:[1,434],148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(wa,Aa),a(it,[2,34]),{6:W,36:[1,435]},{7:436,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(ua,ma,{92:304,88:[1,437],93:ha}),a(ka,Ta,{151:111,154:112,158:116,182:ee}),{7:438,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{34:377,35:Ae,148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Y,[2,89],{151:111,154:112,158:116,148:_a,150:_a,156:_a,174:_a,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,[2,370],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:439,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:440,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(me,[2,337]),{7:441,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(me,[2,242],{142:[1,442]}),{34:443,35:Ae},{34:446,35:Ae,37:444,38:n,39:r,73:445,107:_},{168:447,170:329,171:ba},{168:448,170:329,171:ba},{36:[1,449],169:[1,450],170:451,171:ba},a(ct,[2,330]),{7:453,8:454,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,139:452,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(pt,[2,149],{151:111,154:112,158:116,34:455,35:Ae,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(me,[2,152]),{7:456,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{36:[1,457]},a($a,[2,33],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,87],{151:111,154:112,158:116,148:_a,150:_a,156:_a,174:_a,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Y,[2,343]),{7:459,8:458,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{36:[1,460]},{44:461,45:s,46:i},{107:[1,463],114:462,119:He},{44:464,45:s,46:i},{33:[1,465]},a(Ga,ma,{92:466,93:ut}),a(Wa,[2,162]),{35:Ca,37:347,38:n,39:r,115:468,116:345,118:Da},a(Wa,[2,167],{117:[1,469]}),a(Wa,[2,169],{117:[1,470]}),{37:471,38:n,39:r},a(be,[2,173]),a(Ga,ma,{92:472,93:mt}),a(Wa,[2,183]),{35:Ea,37:354,38:n,39:r,118:xa,121:474,123:352},a(Wa,[2,188],{117:[1,475]}),a(Wa,[2,191],{117:[1,476]}),{6:[1,478],7:477,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,479],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(ht,[2,179],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{73:480,107:_},{44:481,45:s,46:i},a($e,[2,250]),{6:W,36:[1,482]},{7:483,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a([14,32,38,39,43,45,46,49,50,54,55,56,57,58,59,68,77,84,85,86,90,91,107,110,112,120,129,130,140,144,145,148,150,153,156,167,173,176,177,178,179,180,181],ot,{6:gt,35:gt,69:gt,93:gt}),{7:484,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Ra,[2,204]),a(La,[2,235]),a(Fa,[2,231]),{6:ft,35:yt,69:[1,485]},a(kt,rt,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,138:206,136:210,97:211,7:308,8:309,137:488,131:489,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,70:Ye,77:k,84:T,85:Oe,86:v,90:b,91:$,93:qe,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:j,176:M,177:U,178:V,179:B,180:G,181:H}),a(kt,[2,232]),a(nt,ma,{92:370,133:490,93:Oa}),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,136:367,138:366,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(wa,[2,114],{151:111,154:112,158:116,148:q,150:z,156:J,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(et,[2,195]),a($e,[2,129]),{83:[1,491],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Tt,[2,334]),a(Nt,[2,340]),{7:492,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:493,8:494,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:495,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:496,8:497,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:498,8:499,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Va,[2,279]),{37:230,38:n,39:r,67:231,68:xe,73:233,96:232,107:_,130:Se,163:500},{35:vt,148:q,149:[1,501],150:z,151:111,154:112,156:J,157:[1,502],158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,305],149:[1,503],157:[1,504]},{35:bt,148:q,149:[1,505],150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,306],149:[1,506]},{35:$t,148:q,149:[1,507],150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,321],149:[1,508]},{6:_t,35:Ct,109:[1,509]},a(Dt,rt,{44:88,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,62:512,38:n,39:r,41:Ke,43:l,45:s,46:i,68:ta,70:oa,77:na,107:_,129:x,130:I,145:R}),{7:513,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,514],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:515,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,35:[1,516],37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Wa,[2,68]),a(Ja,[2,78]),a(Ja,[2,80]),{40:517,41:Ke},{7:292,8:294,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:ca,73:62,74:31,75:35,76:34,77:k,82:518,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,106:293,107:_,110:C,112:D,120:E,129:x,130:I,134:295,135:pa,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Wa,[2,69],{78:397,79:398,80:Ya,81:qa,126:ia}),a(Wa,[2,71],{78:404,79:405,80:Ya,81:qa,126:ia}),a(Wa,[2,70]),a(Ja,[2,79]),a(Ja,[2,81]),{69:[1,519],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Ja,[2,77]),a($e,[2,44]),a(sa,[2,42]),{7:520,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:521,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:522,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a([1,6,35,36,47,69,70,83,88,93,109,127,135,146,148,150,156,174],vt,{151:111,154:112,158:116,149:[1,523],157:[1,524],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,525],157:[1,526]},a(Et,bt,{151:111,154:112,158:116,149:[1,527],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,528]},a(Et,$t,{151:111,154:112,158:116,149:[1,529],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,530]},a(et,[2,198]),a([6,35,127],ma,{92:531,93:xt}),a(It,[2,216]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:at,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,128:533,129:x,130:I,136:421,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Qe,[2,137]),{7:534,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,83:[2,211],84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:535,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,83:[2,213],84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{83:[2,214],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a($a,[2,54],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{36:[1,536],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{5:538,7:4,8:5,9:6,10:7,11:27,12:28,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:o,34:537,35:Ae,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:N,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(ga,[2,101]),{37:136,38:n,39:r,67:137,68:xe,70:Ie,73:139,94:539,95:134,96:138,107:_,130:Se},a(St,Ee,{94:133,95:134,37:136,67:137,96:138,73:139,87:540,38:n,39:r,68:xe,70:Ie,107:_,130:Se}),a(ga,[2,107],{151:111,154:112,158:116,148:q,150:z,156:J,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(wa,gt),a(it,[2,35]),a(Ma,Za,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{89:541,90:b,91:$},a(Ma,Qa,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{36:[1,542],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a($a,[2,372],{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{34:543,35:Ae,148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{34:544,35:Ae},a(me,[2,243]),{34:545,35:Ae},{34:546,35:Ae},a(At,[2,247]),{36:[1,547],169:[1,548],170:451,171:ba},{36:[1,549],169:[1,550],170:451,171:ba},a(me,[2,328]),{34:551,35:Ae},a(ct,[2,331]),{34:552,35:Ae,93:[1,553]},a(Rt,[2,237],{151:111,154:112,158:116,148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Rt,[2,238]),a(me,[2,150]),a(pt,[2,153],{151:111,154:112,158:116,34:554,35:Ae,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(me,[2,249]),{34:555,35:Ae},{148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(be,[2,85]),a(be,[2,156]),{33:[1,556]},{35:Ca,37:347,38:n,39:r,115:557,116:345,118:Da},a(be,[2,157]),{44:558,45:s,46:i},{6:Ot,35:Lt,109:[1,559]},a(Dt,rt,{37:347,116:562,38:n,39:r,118:Da}),a(nt,ma,{92:563,93:ut}),{37:564,38:n,39:r},{37:565,38:n,39:r},{33:[2,172]},{6:Ft,35:wt,109:[1,566]},a(Dt,rt,{37:354,123:569,38:n,39:r,118:xa}),a(nt,ma,{92:570,93:mt}),{37:571,38:n,39:r,118:[1,572]},{37:573,38:n,39:r},a(ht,[2,176],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:574,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:575,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{36:[1,576]},a(be,[2,181]),{146:[1,577]},{69:[1,578],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{69:[1,579],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Ra,[2,205]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:372,136:210,137:580,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:We,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,93:qe,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,131:372,132:581,136:210,137:207,138:206,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Fa,[2,226]),a(kt,[2,233],{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,97:211,7:308,8:309,138:366,136:367,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,70:Ye,77:k,84:T,85:Oe,86:v,90:b,91:$,93:qe,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:j,176:M,177:U,178:V,179:B,180:G,181:H}),{6:ft,35:yt,36:[1,582]},a($e,[2,130]),a(Ma,[2,257],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:Pt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,253]},a(Ma,[2,260],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{35:jt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,255]},{35:Mt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,276]},a(Va,[2,285]),{7:583,8:584,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:585,8:586,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:587,8:588,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:589,8:590,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:591,8:592,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:593,8:594,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:595,8:596,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:597,8:598,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(Ra,[2,141]),{37:247,38:n,39:r,40:248,41:Ke,42:244,43:l,44:88,45:s,46:i,62:599,63:241,64:242,66:243,67:249,68:ta,70:oa,71:246,72:251,73:252,74:253,75:254,76:255,77:na,107:_,129:x,130:I,145:R},a(St,aa,{44:88,62:240,63:241,64:242,66:243,42:244,71:246,37:247,40:248,67:249,72:251,73:252,74:253,75:254,76:255,108:600,38:n,39:r,41:Ke,43:l,45:s,46:i,68:ta,70:oa,77:na,107:_,129:x,130:I,145:R}),a(Wa,[2,144]),a(Wa,[2,58],{151:111,154:112,158:116,148:q,150:z,156:J,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:601,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Wa,[2,60],{151:111,154:112,158:116,148:q,150:z,156:J,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:602,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(Ja,[2,82]),{83:[1,603]},a(za,[2,65]),a(Ma,Pt,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Ma,jt,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Ma,Mt,{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{7:604,8:605,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:606,8:607,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:608,8:609,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:610,8:611,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:612,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:613,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:614,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:615,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{6:Ut,35:Vt,127:[1,616]},a([6,35,36,127],rt,{17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,13:23,15:25,16:26,60:29,53:30,74:31,100:32,51:33,76:34,75:35,89:37,98:45,172:46,151:48,147:49,152:50,154:51,155:52,175:57,96:61,73:62,42:63,48:65,37:78,67:79,158:85,44:88,9:148,97:211,7:308,8:309,136:619,14:t,32:Re,38:n,39:r,43:l,45:s,46:i,49:d,50:c,54:p,55:u,56:m,57:h,58:g,59:f,68:y,70:Ye,77:k,84:T,85:Oe,86:v,90:b,91:$,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,148:O,150:L,153:F,156:w,167:P,173:j,176:M,177:U,178:V,179:B,180:G,181:H}),a(nt,ma,{92:620,93:xt}),{83:[2,210],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{83:[2,212],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(me,[2,55]),a(ya,[2,91]),a(Y,[2,93]),a(ga,[2,102]),a(nt,ma,{92:621,93:ha}),{34:537,35:Ae},a(me,[2,371]),a(Tt,[2,335]),a(me,[2,244]),a(At,[2,245]),a(At,[2,246]),a(me,[2,324]),{34:622,35:Ae},a(me,[2,325]),{34:623,35:Ae},{36:[1,624]},a(ct,[2,332],{6:[1,625]}),{7:626,8:627,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(me,[2,154]),a(Nt,[2,341]),{44:628,45:s,46:i},a(Ga,ma,{92:629,93:ut}),a(be,[2,158]),{33:[1,630]},{37:347,38:n,39:r,116:631,118:Da},{35:Ca,37:347,38:n,39:r,115:632,116:345,118:Da},a(Wa,[2,163]),{6:Ot,35:Lt,36:[1,633]},a(Wa,[2,168]),a(Wa,[2,170]),a(be,[2,174],{33:[1,634]}),{37:354,38:n,39:r,118:xa,123:635},{35:Ea,37:354,38:n,39:r,118:xa,121:636,123:352},a(Wa,[2,184]),{6:Ft,35:wt,36:[1,637]},a(Wa,[2,189]),a(Wa,[2,190]),a(Wa,[2,192]),a(ht,[2,177],{151:111,154:112,158:116,148:q,150:z,156:J,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{36:[1,638],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(be,[2,180]),a($e,[2,251]),a($e,[2,208]),a($e,[2,209]),a(Fa,[2,227]),a(nt,ma,{92:370,133:639,93:Oa}),a(Fa,[2,228]),{35:Bt,148:q,150:z,151:111,154:112,156:J,157:[1,640],158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,307],157:[1,641]},{35:Gt,148:q,149:[1,642],150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,311],149:[1,643]},{35:Ht,148:q,150:z,151:111,154:112,156:J,157:[1,644],158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,308],157:[1,645]},{35:Wt,148:q,149:[1,646],150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,312],149:[1,647]},{35:Xt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,309]},{35:Yt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,310]},{35:qt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,322]},{35:zt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,323]},a(Wa,[2,145]),a(nt,ma,{92:648,93:Ha}),{36:[1,649],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{36:[1,650],148:q,150:z,151:111,154:112,156:J,158:116,174:dt,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},a(Ja,[2,83]),a(Jt,Bt,{151:111,154:112,158:116,157:[1,651],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{157:[1,652]},a(Et,Gt,{151:111,154:112,158:116,149:[1,653],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,654]},a(Jt,Ht,{151:111,154:112,158:116,157:[1,655],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{157:[1,656]},a(Et,Wt,{151:111,154:112,158:116,149:[1,657],178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{149:[1,658]},a($a,Xt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,Yt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,qt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,zt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(et,[2,199]),{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,136:659,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:308,8:309,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,35:at,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,70:Ye,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,97:211,98:45,100:32,107:_,110:C,112:D,120:E,128:660,129:x,130:I,136:421,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},a(It,[2,217]),{6:Ut,35:Vt,36:[1,661]},{6:lt,35:st,36:[1,662]},{36:[1,663]},{36:[1,664]},a(me,[2,329]),a(ct,[2,333]),a(Rt,[2,239],{151:111,154:112,158:116,148:q,150:z,156:J,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a(Rt,[2,240]),a(be,[2,160]),{6:Ot,35:Lt,109:[1,665]},{44:666,45:s,46:i},a(Wa,[2,164]),a(nt,ma,{92:667,93:ut}),a(Wa,[2,165]),{44:668,45:s,46:i},a(Wa,[2,185]),a(nt,ma,{92:669,93:mt}),a(Wa,[2,186]),a(be,[2,178]),{6:ft,35:yt,36:[1,670]},{7:671,8:672,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:673,8:674,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:675,8:676,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:677,8:678,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:679,8:680,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:681,8:682,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:683,8:684,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{7:685,8:686,9:148,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,29:20,30:21,31:22,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:v,89:37,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:j,175:57,176:M,177:U,178:V,179:B,180:G,181:H},{6:_t,35:Ct,36:[1,687]},a(Wa,[2,59]),a(Wa,[2,61]),{7:688,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:689,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:690,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:691,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:692,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:693,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:694,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},{7:695,9:154,13:23,14:t,15:25,16:26,17:8,18:9,19:10,20:11,21:12,22:13,23:14,24:15,25:16,26:17,27:18,28:19,32:Re,37:78,38:n,39:r,42:63,43:l,44:88,45:s,46:i,48:65,49:d,50:c,51:33,53:30,54:p,55:u,56:m,57:h,58:g,59:f,60:29,67:79,68:y,73:62,74:31,75:35,76:34,77:k,84:T,85:Oe,86:Le,89:152,90:b,91:$,96:61,98:45,100:32,107:_,110:C,112:D,120:E,129:x,130:I,140:S,144:A,145:R,147:49,148:O,150:L,151:48,152:50,153:F,154:51,155:52,156:w,158:85,167:P,172:46,173:Fe,176:we,177:U,178:V,179:B,180:G,181:H},a(It,[2,218]),a(nt,ma,{92:696,93:xt}),a(It,[2,219]),a(ga,[2,103]),a(me,[2,326]),a(me,[2,327]),{33:[1,697]},a(be,[2,159]),{6:Ot,35:Lt,36:[1,698]},a(be,[2,182]),{6:Ft,35:wt,36:[1,699]},a(Fa,[2,229]),{35:Kt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,313]},{35:Zt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,315]},{35:Qt,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,317]},{35:eo,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,319]},{35:ao,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,314]},{35:to,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,316]},{35:oo,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,318]},{35:no,148:q,150:z,151:111,154:112,156:J,158:116,174:K,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe},{35:[2,320]},a(Wa,[2,146]),a($a,Kt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,Zt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,Qt,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,eo,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,ao,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,to,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,oo,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),a($a,no,{151:111,154:112,158:116,178:Z,179:Q,182:ee,183:ae,184:te,185:oe,186:ne,187:re,188:le,189:se,190:ie,191:de,192:ce,193:pe}),{6:Ut,35:Vt,36:[1,700]},{44:701,45:s,46:i},a(Wa,[2,166]),a(Wa,[2,187]),a(It,[2,220]),a(be,[2,161])],defaultActions:{235:[2,277],293:[2,140],471:[2,172],494:[2,253],497:[2,255],499:[2,276],592:[2,309],594:[2,310],596:[2,322],598:[2,323],672:[2,313],674:[2,315],676:[2,317],678:[2,319],680:[2,314],682:[2,316],684:[2,318],686:[2,320]},parseError:function(e,a){if(a.recoverable)this.trace(e);else{var t=new Error(e);throw t.hash=a,t}},parse:function(e){var a=this,t=[0],o=[null],n=[],l=this.table,s=\"\",i=0,d=0,c=0,u=1,m=n.slice.call(arguments,1),h=Object.create(this.lexer),g={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(g.yy[f]=this.yy[f]);h.setInput(e,g.yy),g.yy.lexer=h,g.yy.parser=this,\"undefined\"==typeof h.yylloc&&(h.yylloc={});var y=h.yylloc;n.push(y);var k=h.options&&h.options.ranges;this.parseError=\"function\"==typeof g.yy.parseError?g.yy.parseError:Object.getPrototypeOf(this).parseError;_token_stack:var T=function(){var e;return e=h.lex()||u,\"number\"!=typeof e&&(e=a.symbols_[e]||e),e};for(var N={},v,b,$,_,C,D,p,E,x;;){if($=t[t.length-1],this.defaultActions[$]?_=this.defaultActions[$]:((null===v||\"undefined\"==typeof v)&&(v=T()),_=l[$]&&l[$][v]),\"undefined\"==typeof _||!_.length||!_[0]){var I=\"\";for(D in x=[],l[$])this.terminals_[D]&&D>2&&x.push(\"'\"+this.terminals_[D]+\"'\");I=h.showPosition?\"Parse error on line \"+(i+1)+\":\\n\"+h.showPosition()+\"\\nExpecting \"+x.join(\", \")+\", got '\"+(this.terminals_[v]||v)+\"'\":\"Parse error on line \"+(i+1)+\": Unexpected \"+(v==u?\"end of input\":\"'\"+(this.terminals_[v]||v)+\"'\"),this.parseError(I,{text:h.match,token:this.terminals_[v]||v,line:h.yylineno,loc:y,expected:x})}if(_[0]instanceof Array&&1<_.length)throw new Error(\"Parse Error: multiple actions possible at state: \"+$+\", token: \"+v);switch(_[0]){case 1:t.push(v),o.push(h.yytext),n.push(h.yylloc),t.push(_[1]),v=null,b?(v=b,b=null):(d=h.yyleng,s=h.yytext,i=h.yylineno,y=h.yylloc,0<c&&c--);break;case 2:if(p=this.productions_[_[1]][1],N.$=o[o.length-p],N._$={first_line:n[n.length-(p||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(p||1)].first_column,last_column:n[n.length-1].last_column},k&&(N._$.range=[n[n.length-(p||1)].range[0],n[n.length-1].range[1]]),C=this.performAction.apply(N,[s,d,i,g.yy,_[1],o,n].concat(m)),\"undefined\"!=typeof C)return C;p&&(t=t.slice(0,2*(-1*p)),o=o.slice(0,-1*p),n=n.slice(0,-1*p)),t.push(this.productions_[_[1]][0]),o.push(N.$),n.push(N._$),E=l[t[t.length-2]][t[t.length-1]],t.push(E);break;case 3:return!0}}return!0}};return e.prototype=ro,ro.Parser=e,new e}();return\"undefined\"!=typeof require&&\"undefined\"!=typeof e&&(e.parser=t,e.Parser=t.Parser,e.parse=function(){return t.parse.apply(t,arguments)},e.main=function(){},require.main===a&&e.main(process.argv.slice(1))),a.exports}(),require[\"./scope\"]=function(){var e={};return function(){var a=[].indexOf,t;e.Scope=t=function(){function e(a,t,o,n){_classCallCheck(this,e);var r,l;this.parent=a,this.expressions=t,this.method=o,this.referencedVars=n,this.variables=[{name:\"arguments\",type:\"arguments\"}],this.comments={},this.positions={},this.parent||(this.utilities={}),this.root=null==(r=null==(l=this.parent)?void 0:l.root)?this:r}return _createClass(e,[{key:\"add\",value:function add(e,a,t){return this.shared&&!t?this.parent.add(e,a,t):Object.prototype.hasOwnProperty.call(this.positions,e)?this.variables[this.positions[e]].type=a:this.positions[e]=this.variables.push({name:e,type:a})-1}},{key:\"namedMethod\",value:function namedMethod(){var e;return(null==(e=this.method)?void 0:e.name)||!this.parent?this.method:this.parent.namedMethod()}},{key:\"find\",value:function find(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:\"var\";return!!this.check(e)||(this.add(e,a),!1)}},{key:\"parameter\",value:function parameter(e){return this.shared&&this.parent.check(e,!0)?void 0:this.add(e,\"param\")}},{key:\"check\",value:function check(e){var a;return!!(this.type(e)||(null==(a=this.parent)?void 0:a.check(e)))}},{key:\"temporary\",value:function temporary(e,a){var t=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2],o,n,r,l,s,i;return t?(i=e.charCodeAt(0),n=122,o=n-i,l=i+a%(o+1),r=_StringfromCharCode(l),s=_Mathfloor(a/(o+1)),\"\"+r+(s||\"\")):\"\"+e+(a||\"\")}},{key:\"type\",value:function type(e){var a,t,o,n;for(o=this.variables,a=0,t=o.length;a<t;a++)if(n=o[a],n.name===e)return n.type;return null}},{key:\"freeVariable\",value:function freeVariable(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},o,n,r;for(o=0;r=this.temporary(e,o,t.single),!!(this.check(r)||0<=a.call(this.root.referencedVars,r));)o++;return(null==(n=t.reserve)||n)&&this.add(r,\"var\",!0),r}},{key:\"assign\",value:function assign(e,a){return this.add(e,{value:a,assigned:!0},!0),this.hasAssignments=!0}},{key:\"hasDeclarations\",value:function hasDeclarations(){return!!this.declaredVariables().length}},{key:\"declaredVariables\",value:function declaredVariables(){var e;return function(){var a,t,o,n;for(o=this.variables,n=[],a=0,t=o.length;a<t;a++)e=o[a],\"var\"===e.type&&n.push(e.name);return n}.call(this).sort()}},{key:\"assignedVariables\",value:function assignedVariables(){var e,a,t,o,n;for(t=this.variables,o=[],e=0,a=t.length;e<a;e++)n=t[e],n.type.assigned&&o.push(n.name+\" = \"+n.type.value);return o}}]),e}()}.call(this),{exports:e}.exports}(),require[\"./nodes\"]=function(){var e={};return function(){var a=[].indexOf,t=[].splice,n=[].slice,r,s,d,o,l,c,i,p,u,m,h,g,f,y,k,T,N,v,b,$,_,C,D,E,x,I,S,A,R,O,L,F,w,P,j,M,U,V,B,G,H,W,X,Y,q,z,J,K,Z,Q,ee,ae,te,oe,ne,re,le,se,ie,de,ce,pe,ue,me,he,ge,fe,ye,ke,Te,Ne,ve,be,$e,_e,Ce,De,Ee,xe,Ie,Se,Ae,Re,Oe,Le,Fe,we,Pe,je,Me,Ue,Ve,Be,Ge,He,We,Xe,Ye,qe,ze,Je,Ke,Ze,Qe,ea,aa,ta,oa,na,ra,la,sa;Error.stackTraceLimit=Infinity;var ia=require(\"./scope\");ye=ia.Scope;var da=require(\"./lexer\");Je=da.isUnassignable,G=da.JS_FORBIDDEN;var ca=require(\"./helpers\");Ue=ca.compact,He=ca.flatten,Ge=ca.extend,Ze=ca.merge,Ve=ca.del,oa=ca.starts,Be=ca.ends,ta=ca.some,je=ca.addDataToNode,Me=ca.attachCommentsToNode,Ke=ca.locationDataToString,na=ca.throwSyntaxError,e.extend=Ge,e.addDataToNode=je,we=function(){return!0},te=function(){return!1},Ee=function(){return this},ae=function(){return this.negated=!this.negated,this},e.CodeFragment=g=function(){function e(a,t){_classCallCheck(this,e);var o;this.code=\"\"+t,this.type=(null==a||null==(o=a.constructor)?void 0:o.name)||\"unknown\",this.locationData=null==a?void 0:a.locationData,this.comments=null==a?void 0:a.comments}return _createClass(e,[{key:\"toString\",value:function toString(){return\"\"+this.code+(this.locationData?\": \"+Ke(this.locationData):\"\")}}]),e}(),We=function(e){var a;return function(){var t,o,n;for(n=[],t=0,o=e.length;t<o;t++)a=e[t],n.push(a.code);return n}().join(\"\")},e.Base=l=function(){var e=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:\"compile\",value:function compile(e,a){return We(this.compileToFragments(e,a))}},{key:\"compileWithoutComments\",value:function compileWithoutComments(e,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:\"compile\",o,n;return this.comments&&(this.ignoreTheseCommentsTemporarily=this.comments,delete this.comments),n=this.unwrapAll(),n.comments&&(n.ignoreTheseCommentsTemporarily=n.comments,delete n.comments),o=this[t](e,a),this.ignoreTheseCommentsTemporarily&&(this.comments=this.ignoreTheseCommentsTemporarily,delete this.ignoreTheseCommentsTemporarily),n.ignoreTheseCommentsTemporarily&&(n.comments=n.ignoreTheseCommentsTemporarily,delete n.ignoreTheseCommentsTemporarily),o}},{key:\"compileNodeWithoutComments\",value:function compileNodeWithoutComments(e,a){return this.compileWithoutComments(e,a,\"compileNode\")}},{key:\"compileToFragments\",value:function compileToFragments(e,a){var t,o;return e=Ge({},e),a&&(e.level=a),o=this.unfoldSoak(e)||this,o.tab=e.indent,t=e.level!==z&&o.isStatement(e)?o.compileClosure(e):o.compileNode(e),this.compileCommentFragments(e,o,t),t}},{key:\"compileToFragmentsWithoutComments\",value:function compileToFragmentsWithoutComments(e,a){return this.compileWithoutComments(e,a,\"compileToFragments\")}},{key:\"compileClosure\",value:function compileClosure(e){var a,t,o,n,l,s,i,d;switch((n=this.jumps())&&n.error(\"cannot use a pure statement in an expression\"),e.sharedScope=!0,o=new h([],c.wrap([this])),a=[],this.contains(function(e){return e instanceof _e})?o.bound=!0:((t=this.contains(qe))||this.contains(ze))&&(a=[new Ie],t?(l=\"apply\",a.push(new R(\"arguments\"))):l=\"call\",o=new Le(o,[new r(new pe(l))])),s=new u(o,a).compileNode(e),!1){case!(o.isGenerator||(null==(i=o.base)?void 0:i.isGenerator)):s.unshift(this.makeCode(\"(yield* \")),s.push(this.makeCode(\")\"));break;case!(o.isAsync||(null==(d=o.base)?void 0:d.isAsync)):s.unshift(this.makeCode(\"(await \")),s.push(this.makeCode(\")\"))}return s}},{key:\"compileCommentFragments\",value:function compileCommentFragments(e,t,o){var n,r,l,s,i,d,c,p;if(!t.comments)return o;for(p=function(e){var a;return e.unshift?la(o,e):(0!==o.length&&(a=o[o.length-1],e.newLine&&\"\"!==a.code&&!/\\n\\s*$/.test(a.code)&&(e.code=\"\\n\"+e.code)),o.push(e))},c=t.comments,i=0,d=c.length;i<d;i++)(l=c[i],!!(0>a.call(this.compiledComments,l)))&&(this.compiledComments.push(l),s=l.here?new S(l).compileNode(e):new J(l).compileNode(e),s.isHereComment&&!s.newLine||t.includeCommentFragments()?p(s):(0===o.length&&o.push(this.makeCode(\"\")),s.unshift?(null==(n=o[0]).precedingComments&&(n.precedingComments=[]),o[0].precedingComments.push(s)):(null==(r=o[o.length-1]).followingComments&&(r.followingComments=[]),o[o.length-1].followingComments.push(s))));return o}},{key:\"cache\",value:function cache(e,a,t){var o,n,r;return o=null==t?this.shouldCache():t(this),o?(n=new R(e.scope.freeVariable(\"ref\")),r=new d(n,this),a?[r.compileToFragments(e,a),[this.makeCode(n.value)]]:[r,n]):(n=a?this.compileToFragments(e,a):this,[n,n])}},{key:\"hoist\",value:function hoist(){var e,a,t;return this.hoisted=!0,t=new A(this),e=this.compileNode,a=this.compileToFragments,this.compileNode=function(a){return t.update(e,a)},this.compileToFragments=function(e){return t.update(a,e)},t}},{key:\"cacheToCodeFragments\",value:function cacheToCodeFragments(e){return[We(e[0]),We(e[1])]}},{key:\"makeReturn\",value:function makeReturn(e){var a;return a=this.unwrapAll(),e?new u(new K(e+\".push\"),[a]):new ge(a)}},{key:\"contains\",value:function contains(e){var a;return a=void 0,this.traverseChildren(!1,function(t){if(e(t))return a=t,!1}),a}},{key:\"lastNode\",value:function lastNode(e){return 0===e.length?null:e[e.length-1]}},{key:\"toString\",value:function toString(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:\"\",a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.constructor.name,t;return t=\"\\n\"+e+a,this.soak&&(t+=\"?\"),this.eachChild(function(a){return t+=a.toString(e+De)}),t}},{key:\"eachChild\",value:function eachChild(e){var a,t,o,n,r,l,s,i;if(!this.children)return this;for(s=this.children,o=0,r=s.length;o<r;o++)if(a=s[o],this[a])for(i=He([this[a]]),n=0,l=i.length;n<l;n++)if(t=i[n],!1===e(t))return this;return this}},{key:\"traverseChildren\",value:function traverseChildren(e,a){return this.eachChild(function(t){var o;if(o=a(t),!1!==o)return t.traverseChildren(e,a)})}},{key:\"replaceInContext\",value:function replaceInContext(e,a){var o,n,r,l,s,i,d,c,p,u;if(!this.children)return!1;for(p=this.children,s=0,d=p.length;s<d;s++)if(o=p[s],r=this[o])if(Array.isArray(r))for(l=i=0,c=r.length;i<c;l=++i){if(n=r[l],e(n))return t.apply(r,[l,l-l+1].concat(u=a(n,this))),u,!0;if(n.replaceInContext(e,a))return!0}else{if(e(r))return this[o]=a(r,this),!0;if(r.replaceInContext(e,a))return!0}}},{key:\"invert\",value:function invert(){return new se(\"!\",this)}},{key:\"unwrapAll\",value:function unwrapAll(){var e;for(e=this;e!==(e=e.unwrap());)continue;return e}},{key:\"updateLocationDataIfMissing\",value:function updateLocationDataIfMissing(e){return this.locationData&&!this.forceUpdateLocation?this:(delete this.forceUpdateLocation,this.locationData=e,this.eachChild(function(a){return a.updateLocationDataIfMissing(e)}))}},{key:\"error\",value:function error(e){return na(e,this.locationData)}},{key:\"makeCode\",value:function makeCode(e){return new g(this,e)}},{key:\"wrapInParentheses\",value:function wrapInParentheses(e){return[this.makeCode(\"(\")].concat(_toConsumableArray(e),[this.makeCode(\")\")])}},{key:\"wrapInBraces\",value:function wrapInBraces(e){return[this.makeCode(\"{\")].concat(_toConsumableArray(e),[this.makeCode(\"}\")])}},{key:\"joinFragmentArrays\",value:function joinFragmentArrays(e,a){var t,o,n,r,l;for(t=[],n=r=0,l=e.length;r<l;n=++r)o=e[n],n&&t.push(this.makeCode(a)),t=t.concat(o);return t}}]),e}();return e.prototype.children=[],e.prototype.isStatement=te,e.prototype.compiledComments=[],e.prototype.includeCommentFragments=te,e.prototype.jumps=te,e.prototype.shouldCache=we,e.prototype.isChainable=te,e.prototype.isAssignable=te,e.prototype.isNumber=te,e.prototype.unwrap=Ee,e.prototype.unfoldSoak=te,e.prototype.assigns=te,e}.call(this),e.HoistTarget=A=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.source=e,t.options={},t.targetFragments={fragments:[]},t}return _inherits(a,e),_createClass(a,null,[{key:\"expand\",value:function expand(e){var a,o,n,r;for(o=n=e.length-1;0<=n;o=n+=-1)a=e[o],a.fragments&&(t.apply(e,[o,o-o+1].concat(r=this.expand(a.fragments))),r);return e}}]),_createClass(a,[{key:\"isStatement\",value:function isStatement(e){return this.source.isStatement(e)}},{key:\"update\",value:function update(e,a){return this.targetFragments.fragments=e.call(this.source,Ze(a,this.options))}},{key:\"compileToFragments\",value:function compileToFragments(e,a){return this.options.indent=e.indent,this.options.level=null==a?e.level:a,[this.targetFragments]}},{key:\"compileNode\",value:function compileNode(e){return this.compileToFragments(e)}},{key:\"compileClosure\",value:function compileClosure(e){return this.compileToFragments(e)}}]),a}(l),e.Block=c=function(){var e=function(e){function t(e){_classCallCheck(this,t);var a=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return a.expressions=Ue(He(e||[])),a}return _inherits(t,e),_createClass(t,[{key:\"push\",value:function push(e){return this.expressions.push(e),this}},{key:\"pop\",value:function pop(){return this.expressions.pop()}},{key:\"unshift\",value:function unshift(e){return this.expressions.unshift(e),this}},{key:\"unwrap\",value:function unwrap(){return 1===this.expressions.length?this.expressions[0]:this}},{key:\"isEmpty\",value:function isEmpty(){return!this.expressions.length}},{key:\"isStatement\",value:function isStatement(e){var a,t,o,n;for(n=this.expressions,t=0,o=n.length;t<o;t++)if(a=n[t],a.isStatement(e))return!0;return!1}},{key:\"jumps\",value:function jumps(e){var a,t,o,n,r;for(r=this.expressions,t=0,n=r.length;t<n;t++)if(a=r[t],o=a.jumps(e))return o}},{key:\"makeReturn\",value:function makeReturn(e){var a,t;for(t=this.expressions.length;t--;){a=this.expressions[t],this.expressions[t]=a.makeReturn(e),a instanceof ge&&!a.expression&&this.expressions.splice(t,1);break}return this}},{key:\"compileToFragments\",value:function compileToFragments(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},a=arguments[1];return e.scope?_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileToFragments\",this).call(this,e,a):this.compileRoot(e)}},{key:\"compileNode\",value:function compileNode(e){var a,o,r,l,s,i,d,c,p,u;for(this.tab=e.indent,u=e.level===z,o=[],p=this.expressions,l=s=0,d=p.length;s<d;l=++s){if(c=p[l],c.hoisted){c.compileToFragments(e);continue}if(c=c.unfoldSoak(e)||c,c instanceof t)o.push(c.compileNode(e));else if(u){if(c.front=!0,r=c.compileToFragments(e),!c.isStatement(e)){r=Ye(r,this);var m=n.call(r,-1),h=_slicedToArray(m,1);i=h[0],\"\"===i.code||i.isComment||r.push(this.makeCode(\";\"))}o.push(r)}else o.push(c.compileToFragments(e,X))}return u?this.spaced?[].concat(this.joinFragmentArrays(o,\"\\n\\n\"),this.makeCode(\"\\n\")):this.joinFragmentArrays(o,\"\\n\"):(a=o.length?this.joinFragmentArrays(o,\", \"):[this.makeCode(\"void 0\")],1<o.length&&e.level>=X?this.wrapInParentheses(a):a)}},{key:\"compileRoot\",value:function compileRoot(e){var a,t,o,n,r,l;for(e.indent=e.bare?\"\":De,e.level=z,this.spaced=!0,e.scope=new ye(null,this,null,null==(r=e.referencedVars)?[]:r),l=e.locals||[],t=0,o=l.length;t<o;t++)n=l[t],e.scope.parameter(n);return a=this.compileWithDeclarations(e),A.expand(a),a=this.compileComments(a),e.bare?a:[].concat(this.makeCode(\"(function() {\\n\"),a,this.makeCode(\"\\n}).call(this);\\n\"))}},{key:\"compileWithDeclarations\",value:function compileWithDeclarations(e){var a,t,o,n,r,l,s,d,i,c,p,u,m,h,g,f,y;for(s=[],m=[],h=this.expressions,d=i=0,p=h.length;i<p&&(l=h[d],l=l.unwrap(),!!(l instanceof K));d=++i);if(e=Ze(e,{level:z}),d){g=this.expressions.splice(d,9e9);var k=[this.spaced,!1];y=k[0],this.spaced=k[1];var T=[this.compileNode(e),y];s=T[0],this.spaced=T[1],this.expressions=g}m=this.compileNode(e);var N=e;if(f=N.scope,f.expressions===this)if(r=e.scope.hasDeclarations(),a=f.hasAssignments,r||a){if(d&&s.push(this.makeCode(\"\\n\")),s.push(this.makeCode(this.tab+\"var \")),r)for(o=f.declaredVariables(),n=c=0,u=o.length;c<u;n=++c){if(t=o[n],s.push(this.makeCode(t)),Object.prototype.hasOwnProperty.call(e.scope.comments,t)){var v;(v=s).push.apply(v,_toConsumableArray(e.scope.comments[t]))}n!==o.length-1&&s.push(this.makeCode(\", \"))}a&&(r&&s.push(this.makeCode(\",\\n\"+(this.tab+De))),s.push(this.makeCode(f.assignedVariables().join(\",\\n\"+(this.tab+De))))),s.push(this.makeCode(\";\\n\"+(this.spaced?\"\\n\":\"\")))}else s.length&&m.length&&s.push(this.makeCode(\"\\n\"));return s.concat(m)}},{key:\"compileComments\",value:function compileComments(e){var t,o,n,s,i,d,c,p,u,l,m,h,g,f,y,k,T,N,r,v,b,$,_,C,D;for(i=c=0,l=e.length;c<l;i=++c){if(n=e[i],n.precedingComments){for(s=\"\",r=e.slice(0,i+1),p=r.length-1;0<=p;p+=-1)if(y=r[p],d=/^ {2,}/m.exec(y.code),d){s=d[0];break}else if(0<=a.call(y.code,\"\\n\"))break;for(t=\"\\n\"+s+function(){var e,a,t,r;for(t=n.precedingComments,r=[],e=0,a=t.length;e<a;e++)o=t[e],o.isHereComment&&o.multiline?r.push(ea(o.code,s,!1)):r.push(o.code);return r}().join(\"\\n\"+s).replace(/^(\\s*)$/gm,\"\"),v=e.slice(0,i+1),k=u=v.length-1;0<=u;k=u+=-1){if(y=v[k],g=y.code.lastIndexOf(\"\\n\"),-1===g)if(0===k)y.code=\"\\n\"+y.code,g=0;else if(y.isStringWithInterpolations&&\"{\"===y.code)t=t.slice(1)+\"\\n\",g=1;else continue;delete n.precedingComments,y.code=y.code.slice(0,g)+t+y.code.slice(g);break}}if(n.followingComments){if(_=n.followingComments[0].trail,s=\"\",!(_&&1===n.followingComments.length))for(f=!1,b=e.slice(i),T=0,m=b.length;T<m;T++)if(C=b[T],!f){if(0<=a.call(C.code,\"\\n\"))f=!0;else continue}else if(d=/^ {2,}/m.exec(C.code),d){s=d[0];break}else if(0<=a.call(C.code,\"\\n\"))break;for(t=1===i&&/^\\s+$/.test(e[0].code)?\"\":_?\" \":\"\\n\"+s,t+=function(){var e,a,t,r;for(t=n.followingComments,r=[],a=0,e=t.length;a<e;a++)o=t[a],o.isHereComment&&o.multiline?r.push(ea(o.code,s,!1)):r.push(o.code);return r}().join(\"\\n\"+s).replace(/^(\\s*)$/gm,\"\"),$=e.slice(i),D=N=0,h=$.length;N<h;D=++N){if(C=$[D],g=C.code.indexOf(\"\\n\"),-1===g)if(D===e.length-1)C.code+=\"\\n\",g=C.code.length;else if(C.isStringWithInterpolations&&\"}\"===C.code)t+=\"\\n\",g=0;else continue;delete n.followingComments,\"\\n\"===C.code&&(t=t.replace(/^\\n/,\"\")),C.code=C.code.slice(0,g)+t+C.code.slice(g);break}}}return e}}],[{key:\"wrap\",value:function wrap(e){return 1===e.length&&e[0]instanceof t?e[0]:new t(e)}}]),t}(l);return e.prototype.children=[\"expressions\"],e}.call(this),e.Literal=K=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.value=e,t}return _inherits(a,e),_createClass(a,[{key:\"assigns\",value:function assigns(e){return e===this.value}},{key:\"compileNode\",value:function compileNode(){return[this.makeCode(this.value)]}},{key:\"toString\",value:function toString(){return\" \"+(this.isStatement()?_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"toString\",this).call(this):this.constructor.name)+\": \"+this.value}}]),a}(l);return e.prototype.shouldCache=te,e}.call(this),e.NumberLiteral=re=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K),e.InfinityLiteral=B=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(){return[this.makeCode(\"2e308\")]}}]),a}(re),e.NaNLiteral=oe=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,\"NaN\"))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a;return a=[this.makeCode(\"0/0\")],e.level>=Y?this.wrapInParentheses(a):a}}]),a}(re),e.StringLiteral=ve=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(){var e;return e=this.csx?[this.makeCode(this.unquote(!0,!0))]:_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this)}},{key:\"unquote\",value:function unquote(){var e=!!(0<arguments.length&&void 0!==arguments[0])&&arguments[0],a=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],t;return t=this.value.slice(1,-1),e&&(t=t.replace(/\\\\\"/g,'\"')),a&&(t=t.replace(/\\\\n/g,\"\\n\")),t}}]),a}(K),e.RegexLiteral=me=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K),e.PassthroughLiteral=ce=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K),e.IdentifierLiteral=R=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"eachName\",value:function eachName(e){return e(this)}}]),a}(K);return e.prototype.isAssignable=we,e}.call(this),e.CSXTag=p=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(R),e.PropertyName=pe=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K);return e.prototype.isAssignable=we,e}.call(this),e.ComputedPropertyName=f=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return[this.makeCode(\"[\")].concat(_toConsumableArray(this.value.compileToFragments(e,X)),[this.makeCode(\"]\")])}}]),a}(pe),e.StatementLiteral=Ne=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"jumps\",value:function jumps(e){return\"break\"!==this.value||(null==e?void 0:e.loop)||(null==e?void 0:e.block)?\"continue\"!==this.value||null!=e&&e.loop?void 0:this:this}},{key:\"compileNode\",value:function compileNode(){return[this.makeCode(\"\"+this.tab+this.value+\";\")]}}]),a}(K);return e.prototype.isStatement=we,e.prototype.makeReturn=Ee,e}.call(this),e.ThisLiteral=Ie=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,\"this\"))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t;return a=(null==(t=e.scope.method)?void 0:t.bound)?e.scope.method.context:this.value,[this.makeCode(a)]}}]),a}(K),e.UndefinedLiteral=Oe=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,\"undefined\"))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return[this.makeCode(e.level>=H?\"(void 0)\":\"void 0\")]}}]),a}(K),e.NullLiteral=ne=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,\"null\"))}return _inherits(a,e),a}(K),e.BooleanLiteral=i=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(K),e.Return=ge=function(){var e=function(e){function t(e){_classCallCheck(this,t);var a=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return a.expression=e,a}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function compileToFragments(e,a){var o,n;return o=null==(n=this.expression)?void 0:n.makeReturn(),o&&!(o instanceof t)?o.compileToFragments(e,a):_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileToFragments\",this).call(this,e,a)}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r;if(t=[],this.expression){for(t=this.expression.compileToFragments(e,q),la(t,this.makeCode(this.tab+\"return \")),n=0,r=t.length;n<r;n++)if(o=t[n],o.isHereComment&&0<=a.call(o.code,\"\\n\"))o.code=ea(o.code,this.tab);else if(o.isLineComment)o.code=\"\"+this.tab+o.code;else break}else t.push(this.makeCode(this.tab+\"return\"));return t.push(this.makeCode(\";\")),t}}]),t}(l);return e.prototype.children=[\"expression\"],e.prototype.isStatement=we,e.prototype.makeReturn=Ee,e.prototype.jumps=Ee,e}.call(this),e.YieldReturn=Pe=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return null==e.scope.parent&&this.error(\"yield can only occur inside functions\"),_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this,e)}}]),a}(ge),e.AwaitReturn=o=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return null==e.scope.parent&&this.error(\"await can only occur inside functions\"),_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this,e)}}]),a}(ge),e.Value=Le=function(){var e=function(e){function a(e,t,o){var n=!!(3<arguments.length&&void 0!==arguments[3])&&arguments[3];_classCallCheck(this,a);var r=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this)),l,s;if(!t&&e instanceof a){var i;return i=e,_possibleConstructorReturn(r,i)}if(e instanceof de&&e.contains(function(e){return e instanceof Ne})){var d;return d=e.unwrap(),_possibleConstructorReturn(r,d)}return r.base=e,r.properties=t||[],o&&(r[o]=!0),r.isDefaultValue=n,(null==(l=r.base)?void 0:l.comments)&&r.base instanceof Ie&&null!=(null==(s=r.properties[0])?void 0:s.name)&&Qe(r.base,r.properties[0].name),r}return _inherits(a,e),_createClass(a,[{key:\"add\",value:function add(e){return this.properties=this.properties.concat(e),this.forceUpdateLocation=!0,this}},{key:\"hasProperties\",value:function hasProperties(){return 0!==this.properties.length}},{key:\"bareLiteral\",value:function bareLiteral(e){return!this.properties.length&&this.base instanceof e}},{key:\"isArray\",value:function isArray(){return this.bareLiteral(s)}},{key:\"isRange\",value:function isRange(){return this.bareLiteral(ue)}},{key:\"shouldCache\",value:function shouldCache(){return this.hasProperties()||this.base.shouldCache()}},{key:\"isAssignable\",value:function isAssignable(){return this.hasProperties()||this.base.isAssignable()}},{key:\"isNumber\",value:function isNumber(){return this.bareLiteral(re)}},{key:\"isString\",value:function isString(){return this.bareLiteral(ve)}},{key:\"isRegex\",value:function isRegex(){return this.bareLiteral(me)}},{key:\"isUndefined\",value:function isUndefined(){return this.bareLiteral(Oe)}},{key:\"isNull\",value:function isNull(){return this.bareLiteral(ne)}},{key:\"isBoolean\",value:function isBoolean(){return this.bareLiteral(i)}},{key:\"isAtomic\",value:function isAtomic(){var e,a,t,o;for(o=this.properties.concat(this.base),e=0,a=o.length;e<a;e++)if(t=o[e],t.soak||t instanceof u)return!1;return!0}},{key:\"isNotCallable\",value:function isNotCallable(){return this.isNumber()||this.isString()||this.isRegex()||this.isArray()||this.isRange()||this.isSplice()||this.isObject()||this.isUndefined()||this.isNull()||this.isBoolean()}},{key:\"isStatement\",value:function isStatement(e){return!this.properties.length&&this.base.isStatement(e)}},{key:\"assigns\",value:function assigns(e){return!this.properties.length&&this.base.assigns(e)}},{key:\"jumps\",value:function jumps(e){return!this.properties.length&&this.base.jumps(e)}},{key:\"isObject\",value:function isObject(e){return!this.properties.length&&this.base instanceof le&&(!e||this.base.generated)}},{key:\"isElision\",value:function isElision(){return!!(this.base instanceof s)&&this.base.hasElision()}},{key:\"isSplice\",value:function isSplice(){var e,a,t,o;return o=this.properties,e=n.call(o,-1),a=_slicedToArray(e,1),t=a[0],e,t instanceof ke}},{key:\"looksStatic\",value:function looksStatic(e){var a;return(this.this||this.base instanceof Ie||this.base.value===e)&&1===this.properties.length&&\"prototype\"!==(null==(a=this.properties[0].name)?void 0:a.value)}},{key:\"unwrap\",value:function unwrap(){return this.properties.length?this:this.base}},{key:\"cacheReference\",value:function cacheReference(e){var t,o,r,l,s,i,c;return(c=this.properties,t=n.call(c,-1),o=_slicedToArray(t,1),s=o[0],t,2>this.properties.length&&!this.base.shouldCache()&&(null==s||!s.shouldCache()))?[this,this]:(r=new a(this.base,this.properties.slice(0,-1)),r.shouldCache()&&(l=new R(e.scope.freeVariable(\"base\")),r=new a(new de(new d(l,r)))),!s)?[r,l]:(s.shouldCache()&&(i=new R(e.scope.freeVariable(\"name\")),s=new V(new d(i,s.index)),i=new V(i)),[r.add(s),new a(l||r.base,[i||s])])}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r;for(this.base.front=this.front,r=this.properties,a=r.length&&null!=this.base.cached?this.base.cached:this.base.compileToFragments(e,r.length?H:null),r.length&&fe.test(We(a))&&a.push(this.makeCode(\".\")),t=0,o=r.length;t<o;t++){var l;n=r[t],(l=a).push.apply(l,_toConsumableArray(n.compileToFragments(e)))}return a}},{key:\"unfoldSoak\",value:function unfoldSoak(e){var t=this;return null==this.unfoldedSoak?this.unfoldedSoak=function(){var o,n,r,l,s,i,c,p,u;if(r=t.base.unfoldSoak(e),r){var m;return(m=r.body.properties).push.apply(m,_toConsumableArray(t.properties)),r}for(p=t.properties,n=l=0,s=p.length;l<s;n=++l)if(i=p[n],!!i.soak)return i.soak=!1,o=new a(t.base,t.properties.slice(0,n)),u=new a(t.base,t.properties.slice(n)),o.shouldCache()&&(c=new R(e.scope.freeVariable(\"ref\")),o=new de(new d(c,o)),u.base=c),new O(new T(o),u,{soak:!0});return!1}():this.unfoldedSoak}},{key:\"eachName\",value:function eachName(e){return this.hasProperties()?e(this):this.base.isAssignable()?this.base.eachName(e):this.error(\"tried to assign to unassignable value\")}}]),a}(l);return e.prototype.children=[\"base\",\"properties\"],e}.call(this),e.HereComment=S=function(e){function t(e){var a=e.content,o=e.newLine,n=e.unshift;_classCallCheck(this,t);var r=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.content=a,r.newLine=o,r.unshift=n,r}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function compileNode(){var e,t,o,n,r,l,s,i,d;if(i=0<=a.call(this.content,\"\\n\"),t=/\\n\\s*[#|\\*]/.test(this.content),t&&(this.content=this.content.replace(/^([ \\t]*)#(?=\\s)/gm,\" *\")),i){for(n=\"\",d=this.content.split(\"\\n\"),o=0,l=d.length;o<l;o++)s=d[o],r=/^\\s*/.exec(s)[0],r.length>n.length&&(n=r);this.content=this.content.replace(RegExp(\"^(\"+r+\")\",\"gm\"),\"\")}return this.content=\"/*\"+this.content+(t?\" \":\"\")+\"*/\",e=this.makeCode(this.content),e.newLine=this.newLine,e.unshift=this.unshift,e.multiline=i,e.isComment=e.isHereComment=!0,e}}]),t}(l),e.LineComment=J=function(e){function a(e){var t=e.content,o=e.newLine,n=e.unshift;_classCallCheck(this,a);var r=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return r.content=t,r.newLine=o,r.unshift=n,r}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(){var e;return e=this.makeCode(/^\\s*$/.test(this.content)?\"\":\"//\"+this.content),e.newLine=this.newLine,e.unshift=this.unshift,e.trail=!this.newLine&&!this.unshift,e.isComment=e.isLineComment=!0,e}}]),a}(l),e.Call=u=function(){var e=function(e){function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[],o=arguments[2],n=arguments[3];_classCallCheck(this,a);var r=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this)),l;return r.variable=e,r.args=t,r.soak=o,r.token=n,r.isNew=!1,r.variable instanceof Le&&r.variable.isNotCallable()&&r.variable.error(\"literal is not a function\"),r.csx=r.variable.base instanceof p,\"RegExp\"===(null==(l=r.variable.base)?void 0:l.value)&&0!==r.args.length&&Qe(r.variable,r.args[0]),r}return _inherits(a,e),_createClass(a,[{key:\"updateLocationDataIfMissing\",value:function updateLocationDataIfMissing(e){var t,o;return this.locationData&&this.needsUpdatedStartLocation&&(this.locationData.first_line=e.first_line,this.locationData.first_column=e.first_column,t=(null==(o=this.variable)?void 0:o.base)||this.variable,t.needsUpdatedStartLocation&&(this.variable.locationData.first_line=e.first_line,this.variable.locationData.first_column=e.first_column,t.updateLocationDataIfMissing(e)),delete this.needsUpdatedStartLocation),_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"updateLocationDataIfMissing\",this).call(this,e)}},{key:\"newInstance\",value:function newInstance(){var e,t;return e=(null==(t=this.variable)?void 0:t.base)||this.variable,e instanceof a&&!e.isNew?e.newInstance():this.isNew=!0,this.needsUpdatedStartLocation=!0,this}},{key:\"unfoldSoak\",value:function unfoldSoak(e){var t,o,n,r,l,s,i,d;if(this.soak){if(this.variable instanceof $e)r=new K(this.variable.compile(e)),d=new Le(r),null==this.variable.accessor&&this.variable.error(\"Unsupported reference to 'super'\");else{if(o=ra(e,this,\"variable\"))return o;var c=new Le(this.variable).cacheReference(e),p=_slicedToArray(c,2);r=p[0],d=p[1]}return d=new a(d,this.args),d.isNew=this.isNew,r=new K(\"typeof \"+r.compile(e)+' === \"function\"'),new O(r,new Le(d),{soak:!0})}for(t=this,s=[];;){if(t.variable instanceof a){s.push(t),t=t.variable;continue}if(!(t.variable instanceof Le))break;if(s.push(t),!((t=t.variable.base)instanceof a))break}for(i=s.reverse(),n=0,l=i.length;n<l;n++)t=i[n],o&&(t.variable instanceof a?t.variable=o:t.variable.base=o),o=ra(e,t,\"variable\");return o}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,l,s,i,d,c,p,u,m,g,f,y;if(this.csx)return this.compileCSX(e);if(null!=(u=this.variable)&&(u.front=this.front),i=[],y=(null==(m=this.variable)||null==(g=m.properties)?void 0:g[0])instanceof r,n=function(){var e,a,t,n;for(t=this.args||[],n=[],e=0,a=t.length;e<a;e++)o=t[e],o instanceof h&&n.push(o);return n}.call(this),0<n.length&&y&&!this.variable.base.cached){var k=this.variable.base.cache(e,H,function(){return!1}),T=_slicedToArray(k,1);s=T[0],this.variable.base.cached=s}for(f=this.args,l=c=0,p=f.length;c<p;l=++c){var N;o=f[l],l&&i.push(this.makeCode(\", \")),(N=i).push.apply(N,_toConsumableArray(o.compileToFragments(e,X)))}return d=[],this.isNew&&(this.variable instanceof $e&&this.variable.error(\"Unsupported reference to 'super'\"),d.push(this.makeCode(\"new \"))),(a=d).push.apply(a,_toConsumableArray(this.variable.compileToFragments(e,H))),(t=d).push.apply(t,[this.makeCode(\"(\")].concat(_toConsumableArray(i),[this.makeCode(\")\")])),d}},{key:\"compileCSX\",value:function compileCSX(e){var a=_slicedToArray(this.args,2),t,o,n,r,l,i,d,c,p,u,m;if(r=a[0],l=a[1],r.base.csx=!0,null!=l&&(l.base.csx=!0),i=[this.makeCode(\"<\")],(t=i).push.apply(t,_toConsumableArray(m=this.variable.compileToFragments(e,H))),r.base instanceof s)for(u=r.base.objects,d=0,c=u.length;d<c;d++){var h;p=u[d],o=p.base,n=(null==o?void 0:o.properties)||[],(o instanceof le||o instanceof R)&&(!(o instanceof le)||o.generated||!(1<n.length)&&n[0]instanceof Te)||p.error('Unexpected token. Allowed CSX attributes are: id=\"val\", src={source}, {props...} or attribute.'),p.base instanceof le&&(p.base.csx=!0),i.push(this.makeCode(\" \")),(h=i).push.apply(h,_toConsumableArray(p.compileToFragments(e,q)))}if(l){var g,f;i.push(this.makeCode(\">\")),(g=i).push.apply(g,_toConsumableArray(l.compileNode(e,X))),(f=i).push.apply(f,[this.makeCode(\"</\")].concat(_toConsumableArray(m),[this.makeCode(\">\")]))}else i.push(this.makeCode(\" />\"));return i}}]),a}(l);return e.prototype.children=[\"variable\",\"args\"],e}.call(this),e.SuperCall=_e=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"isStatement\",value:function isStatement(e){var a;return(null==(a=this.expressions)?void 0:a.length)&&e.level===z}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r;if(null==(o=this.expressions)||!o.length)return _get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this,e);if(r=new K(We(_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileNode\",this).call(this,e))),n=new c(this.expressions.slice()),e.level>z){var l=r.cache(e,null,we),s=_slicedToArray(l,2);r=s[0],t=s[1],n.push(t)}return n.unshift(r),n.compileToFragments(e,e.level===z?e.level:X)}}]),a}(u);return e.prototype.children=u.prototype.children.concat([\"expressions\"]),e}.call(this),e.Super=$e=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.accessor=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l,s,i;if(t=e.scope.namedMethod(),(null==t?void 0:t.isMethod)||this.error(\"cannot use super outside of an instance method\"),null==t.ctor&&null==this.accessor){var c=t;o=c.name,i=c.variable,(o.shouldCache()||o instanceof V&&o.index.isAssignable())&&(n=new R(e.scope.parent.freeVariable(\"name\")),o.index=new d(n,o.index)),this.accessor=null==n?o:new V(n)}return(null==(r=this.accessor)||null==(l=r.name)?void 0:l.comments)&&(s=this.accessor.name.comments,delete this.accessor.name.comments),a=new Le(new K(\"super\"),this.accessor?[this.accessor]:[]).compileToFragments(e),s&&Me(s,this.accessor.name),a}}]),a}(l);return e.prototype.children=[\"accessor\"],e}.call(this),e.RegexWithInterpolations=he=function(e){function a(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,new Le(new R(\"RegExp\")),e,!1))}return _inherits(a,e),a}(u),e.TaggedTemplateCall=xe=function(e){function a(e,t,o){return _classCallCheck(this,a),t instanceof ve&&(t=new be(c.wrap([new Le(t)]))),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,e,[t],o))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){return this.variable.compileToFragments(e,H).concat(this.args[0].compileToFragments(e,X))}}]),a}(u),e.Extends=E=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.child=e,o.parent=t,o}return _inherits(a,e),_createClass(a,[{key:\"compileToFragments\",value:function compileToFragments(e){return new u(new Le(new K(sa(\"extend\",e))),[this.child,this.parent]).compileToFragments(e)}}]),a}(l);return e.prototype.children=[\"child\",\"parent\"],e}.call(this),e.Access=r=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.name=e,o.soak=\"soak\"===t,o}return _inherits(a,e),_createClass(a,[{key:\"compileToFragments\",value:function compileToFragments(e){var a,t;return a=this.name.compileToFragments(e),t=this.name.unwrap(),t instanceof pe?[this.makeCode(\".\")].concat(_toConsumableArray(a)):[this.makeCode(\"[\")].concat(_toConsumableArray(a),[this.makeCode(\"]\")])}}]),a}(l);return e.prototype.children=[\"name\"],e.prototype.shouldCache=te,e}.call(this),e.Index=V=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.index=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileToFragments\",value:function compileToFragments(e){return[].concat(this.makeCode(\"[\"),this.index.compileToFragments(e,q),this.makeCode(\"]\"))}},{key:\"shouldCache\",value:function shouldCache(){return this.index.shouldCache()}}]),a}(l);return e.prototype.children=[\"index\"],e}.call(this),e.Range=ue=function(){var e=function(e){function a(e,t,o){_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return n.from=e,n.to=t,n.exclusive=\"exclusive\"===o,n.equals=n.exclusive?\"\":\"=\",n}return _inherits(a,e),_createClass(a,[{key:\"compileVariables\",value:function compileVariables(e){var a,t;e=Ze(e,{top:!0}),a=Ve(e,\"shouldCache\");var o=this.cacheToCodeFragments(this.from.cache(e,X,a)),n=_slicedToArray(o,2);this.fromC=n[0],this.fromVar=n[1];var r=this.cacheToCodeFragments(this.to.cache(e,X,a)),l=_slicedToArray(r,2);if(this.toC=l[0],this.toVar=l[1],t=Ve(e,\"step\")){var s=this.cacheToCodeFragments(t.cache(e,X,a)),i=_slicedToArray(s,2);this.step=i[0],this.stepVar=i[1]}return this.fromNum=this.from.isNumber()?+this.fromVar:null,this.toNum=this.to.isNumber()?+this.toVar:null,this.stepNum=(null==t?void 0:t.isNumber())?+this.stepVar:null}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l,s,i,d,c,p,u,m,h,g;if(this.fromVar||this.compileVariables(e),!e.index)return this.compileArray(e);s=null!=this.fromNum&&null!=this.toNum,r=Ve(e,\"index\"),l=Ve(e,\"name\"),c=l&&l!==r,g=s&&!c?\"var \"+r+\" = \"+this.fromC:r+\" = \"+this.fromC,this.toC!==this.toVar&&(g+=\", \"+this.toC),this.step!==this.stepVar&&(g+=\", \"+this.step),d=r+\" <\"+this.equals,n=r+\" >\"+this.equals;var f=[this.fromNum,this.toNum];return o=f[0],m=f[1],p=this.stepNum?this.stepNum+\" !== 0\":this.stepVar+\" !== 0\",t=s?null==this.step?o<=m?d+\" \"+m:n+\" \"+m:(i=o+\" <= \"+r+\" && \"+d+\" \"+m,h=o+\" >= \"+r+\" && \"+n+\" \"+m,o<=m?p+\" && \"+i:p+\" && \"+h):(i=this.fromVar+\" <= \"+r+\" && \"+d+\" \"+this.toVar,h=this.fromVar+\" >= \"+r+\" && \"+n+\" \"+this.toVar,p+\" && (\"+this.fromVar+\" <= \"+this.toVar+\" ? \"+i+\" : \"+h+\")\"),a=this.stepVar?this.stepVar+\" > 0\":this.fromVar+\" <= \"+this.toVar,u=this.stepVar?r+\" += \"+this.stepVar:s?c?o<=m?\"++\"+r:\"--\"+r:o<=m?r+\"++\":r+\"--\":c?a+\" ? ++\"+r+\" : --\"+r:a+\" ? \"+r+\"++ : \"+r+\"--\",c&&(g=l+\" = \"+g),c&&(u=l+\" = \"+u),[this.makeCode(g+\"; \"+t+\"; \"+u)]}},{key:\"compileArray\",value:function compileArray(e){var a,t,o,n,r,l,s,i,d,c,p,u,m;return(s=null!=this.fromNum&&null!=this.toNum,s&&20>=_Mathabs(this.fromNum-this.toNum))?(c=function(){for(var e=[],a=p=this.fromNum,t=this.toNum;p<=t?a<=t:a>=t;p<=t?a++:a--)e.push(a);return e}.apply(this),this.exclusive&&c.pop(),[this.makeCode(\"[\"+c.join(\", \")+\"]\")]):(l=this.tab+De,r=e.scope.freeVariable(\"i\",{single:!0,reserve:!1}),u=e.scope.freeVariable(\"results\",{reserve:!1}),d=\"\\n\"+l+\"var \"+u+\" = [];\",s?(e.index=r,t=We(this.compileNode(e))):(m=r+\" = \"+this.fromC+(this.toC===this.toVar?\"\":\", \"+this.toC),o=this.fromVar+\" <= \"+this.toVar,t=\"var \"+m+\"; \"+o+\" ? \"+r+\" <\"+this.equals+\" \"+this.toVar+\" : \"+r+\" >\"+this.equals+\" \"+this.toVar+\"; \"+o+\" ? \"+r+\"++ : \"+r+\"--\"),i=\"{ \"+u+\".push(\"+r+\"); }\\n\"+l+\"return \"+u+\";\\n\"+e.indent,n=function(e){return null==e?void 0:e.contains(qe)},(n(this.from)||n(this.to))&&(a=\", arguments\"),[this.makeCode(\"(function() {\"+d+\"\\n\"+l+\"for (\"+t+\")\"+i+\"}).apply(this\"+(null==a?\"\":a)+\")\")])}}]),a}(l);return e.prototype.children=[\"from\",\"to\"],e}.call(this),e.Slice=ke=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.range=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a=this.range,t,o,n,r,l,s;return l=a.to,n=a.from,(null==n?void 0:n.shouldCache())&&(n=new Le(new de(n))),(null==l?void 0:l.shouldCache())&&(l=new Le(new de(l))),r=(null==n?void 0:n.compileToFragments(e,q))||[this.makeCode(\"0\")],l&&(t=l.compileToFragments(e,q),o=We(t),(this.range.exclusive||-1!=+o)&&(s=\", \"+(this.range.exclusive?o:l.isNumber()?\"\"+(+o+1):(t=l.compileToFragments(e,H),\"+\"+We(t)+\" + 1 || 9e9\")))),[this.makeCode(\".slice(\"+We(r)+(s||\"\")+\")\")]}}]),a}(l);return e.prototype.children=[\"range\"],e}.call(this),e.Obj=le=function(){var e=function(e){function a(e){var t=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],o=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2];_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return n.generated=t,n.lhs=o,n.objects=n.properties=e||[],n}return _inherits(a,e),_createClass(a,[{key:\"isAssignable\",value:function isAssignable(){var e,a,t,o,n;for(n=this.properties,e=0,a=n.length;e<a;e++)if(o=n[e],t=Je(o.unwrapAll().value),t&&o.error(t),o instanceof d&&\"object\"===o.context&&(o=o.value),!o.isAssignable())return!1;return!0}},{key:\"shouldCache\",value:function shouldCache(){return!this.isAssignable()}},{key:\"hasSplat\",value:function hasSplat(){var e,a,t,o;for(o=this.properties,e=0,a=o.length;e<a;e++)if(t=o[e],t instanceof Te)return!0;return!1}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r,i,c,p,u,m,h,l,g,y,k,T,N,v,b,$,_,C,D;if(b=this.properties,this.generated)for(c=0,g=b.length;c<g;c++)N=b[c],N instanceof Le&&N.error(\"cannot have an implicit value in an implicit object\");if(this.hasSplat()&&!this.csx)return this.compileSpread(e);if(n=e.indent+=De,l=this.lastNode(this.properties),this.csx)return this.compileCSXAttributes(e);if(this.lhs)for(u=0,y=b.length;u<y;u++)if(v=b[u],!!(v instanceof d)){var E=v;D=E.value,C=D.unwrapAll(),C instanceof s||C instanceof a?C.lhs=!0:C instanceof d&&(C.nestedLhs=!0)}for(i=!0,_=this.properties,h=0,k=_.length;h<k;h++)v=_[h],v instanceof d&&\"object\"===v.context&&(i=!1);for(t=[],t.push(this.makeCode(i?\"\":\"\\n\")),o=$=0,T=b.length;$<T;o=++$){var x;if(v=b[o],p=o===b.length-1?\"\":i?\", \":v===l?\"\\n\":\",\\n\",r=i?\"\":n,m=v instanceof d&&\"object\"===v.context?v.variable:v instanceof d?(this.lhs?void 0:v.operatorToken.error(\"unexpected \"+v.operatorToken.value),v.variable):v,m instanceof Le&&m.hasProperties()&&((\"object\"===v.context||!m.this)&&m.error(\"invalid object key\"),m=m.properties[0].name,v=new d(m,v,\"object\")),m===v)if(v.shouldCache()){var I=v.base.cache(e),S=_slicedToArray(I,2);m=S[0],D=S[1],m instanceof R&&(m=new pe(m.value)),v=new d(m,D,\"object\")}else if(!(m instanceof Le&&m.base instanceof f))\"function\"==typeof v.bareLiteral&&v.bareLiteral(R)||(v=new d(v,v,\"object\"));else if(v.base.value.shouldCache()){var A=v.base.value.cache(e),O=_slicedToArray(A,2);m=O[0],D=O[1],m instanceof R&&(m=new f(m.value)),v=new d(m,D,\"object\")}else v=new d(m,v.base.value,\"object\");r&&t.push(this.makeCode(r)),(x=t).push.apply(x,_toConsumableArray(v.compileToFragments(e,z))),p&&t.push(this.makeCode(p))}return t.push(this.makeCode(i?\"\":\"\\n\"+this.tab)),t=this.wrapInBraces(t),this.front?this.wrapInParentheses(t):t}},{key:\"assigns\",value:function assigns(e){var a,t,o,n;for(n=this.properties,a=0,t=n.length;a<t;a++)if(o=n[a],o.assigns(e))return!0;return!1}},{key:\"eachName\",value:function eachName(e){var a,t,o,n,r;for(n=this.properties,r=[],a=0,t=n.length;a<t;a++)o=n[a],o instanceof d&&\"object\"===o.context&&(o=o.value),o=o.unwrapAll(),null==o.eachName?r.push(void 0):r.push(o.eachName(e));return r}},{key:\"compileSpread\",value:function compileSpread(e){var t,o,n,r,l,s,i,d,c;for(i=this.properties,c=[],s=[],d=[],o=function(){if(s.length&&d.push(new a(s)),c.length){var e;(e=d).push.apply(e,_toConsumableArray(c))}return c=[],s=[]},n=0,r=i.length;n<r;n++)l=i[n],l instanceof Te?(c.push(new Le(l.name)),o()):s.push(l);return o(),d[0]instanceof a||d.unshift(new a),t=new Le(new K(sa(\"_extends\",e))),new u(t,d).compileToFragments(e)}},{key:\"compileCSXAttributes\",value:function compileCSXAttributes(e){var a,t,o,n,r,l,s;for(s=this.properties,a=[],t=o=0,r=s.length;o<r;t=++o){var i;l=s[t],l.csx=!0,n=t===s.length-1?\"\":\" \",l instanceof Te&&(l=new K(\"{\"+l.compile(e)+\"}\")),(i=a).push.apply(i,_toConsumableArray(l.compileToFragments(e,z))),a.push(this.makeCode(n))}return this.front?this.wrapInParentheses(a):a}}]),a}(l);return e.prototype.children=[\"properties\"],e}.call(this),e.Arr=s=function(){var e=function(e){function t(e){var a=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1];_classCallCheck(this,t);var o=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return o.lhs=a,o.objects=e||[],o}return _inherits(t,e),_createClass(t,[{key:\"hasElision\",value:function hasElision(){var e,a,t,o;for(o=this.objects,e=0,a=o.length;e<a;e++)if(t=o[e],t instanceof y)return!0;return!1}},{key:\"isAssignable\",value:function isAssignable(){var e,a,t,o,n;if(!this.objects.length)return!1;for(n=this.objects,e=a=0,t=n.length;a<t;e=++a){if(o=n[e],o instanceof Te&&e+1!==this.objects.length)return!1;if(!(o.isAssignable()&&(!o.isAtomic||o.isAtomic())))return!1}return!0}},{key:\"shouldCache\",value:function shouldCache(){return!this.isAssignable()}},{key:\"compileNode\",value:function compileNode(e){var o,n,s,i,d,c,p,u,m,h,g,l,f,y,k,T,N,v,b,$,_,C,r,D;if(!this.objects.length)return[this.makeCode(\"[]\")];for(e.indent+=De,d=function(e){return\",\"===We(e).trim()},$=!1,o=[],r=this.objects,v=m=0,l=r.length;m<l;v=++m)N=r[v],D=N.unwrapAll(),D.comments&&0===D.comments.filter(function(e){return!e.here}).length&&(D.includeCommentFragments=we),this.lhs&&(D instanceof t||D instanceof le)&&(D.lhs=!0);for(n=function(){var a,t,o,n;for(o=this.objects,n=[],a=0,t=o.length;a<t;a++)N=o[a],n.push(N.compileToFragments(e,X));return n}.call(this),b=n.length,p=!1,u=h=0,f=n.length;h<f;u=++h){var E;for(c=n[u],g=0,y=c.length;g<y;g++)s=c[g],s.isHereComment?s.code=s.code.trim():0!==u&&!1===p&&Xe(s)&&(p=!0);0!==u&&$&&(!d(c)||u===b-1)&&o.push(this.makeCode(\", \")),$=$||!d(c),(E=o).push.apply(E,_toConsumableArray(c))}if(p||0<=a.call(We(o),\"\\n\")){for(i=_=0,k=o.length;_<k;i=++_)s=o[i],s.isHereComment?s.code=ea(s.code,e.indent,!1)+\"\\n\"+e.indent:\", \"===s.code&&(null==s||!s.isElision)&&(s.code=\",\\n\"+e.indent);o.unshift(this.makeCode(\"[\\n\"+e.indent)),o.push(this.makeCode(\"\\n\"+this.tab+\"]\"))}else{for(C=0,T=o.length;C<T;C++)s=o[C],s.isHereComment&&(s.code+=\" \");o.unshift(this.makeCode(\"[\")),o.push(this.makeCode(\"]\"))}return o}},{key:\"assigns\",value:function assigns(e){var a,t,o,n;for(n=this.objects,a=0,t=n.length;a<t;a++)if(o=n[a],o.assigns(e))return!0;return!1}},{key:\"eachName\",value:function eachName(e){var a,t,o,n,r;for(n=this.objects,r=[],a=0,t=n.length;a<t;a++)o=n[a],o=o.unwrapAll(),r.push(o.eachName(e));return r}}]),t}(l);return e.prototype.children=[\"objects\"],e}.call(this),e.Class=m=function(){var e=function(e){function o(e,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:new c;_classCallCheck(this,o);var n=_possibleConstructorReturn(this,(o.__proto__||Object.getPrototypeOf(o)).call(this));return n.variable=e,n.parent=a,n.body=t,n}return _inherits(o,e),_createClass(o,[{key:\"compileNode\",value:function compileNode(e){var a,t,o;if(this.name=this.determineName(),a=this.walkBody(),this.parent instanceof Le&&!this.parent.hasProperties()&&(o=this.parent.base.value),this.hasNameClash=null!=this.name&&this.name===o,t=this,a||this.hasNameClash?t=new k(t,a):null==this.name&&e.level===z&&(t=new de(t)),this.boundMethods.length&&this.parent&&(null==this.variable&&(this.variable=new R(e.scope.freeVariable(\"_class\"))),null==this.variableRef)){var n=this.variable.cache(e),r=_slicedToArray(n,2);this.variable=r[0],this.variableRef=r[1]}this.variable&&(t=new d(this.variable,t,null,{moduleDeclaration:this.moduleDeclaration})),this.compileNode=this.compileClassDeclaration;try{return t.compileToFragments(e)}finally{delete this.compileNode}}},{key:\"compileClassDeclaration\",value:function compileClassDeclaration(e){var a,t,o;if((this.externalCtor||this.boundMethods.length)&&null==this.ctor&&(this.ctor=this.makeDefaultConstructor()),null!=(a=this.ctor)&&(a.noReturn=!0),this.boundMethods.length&&this.proxyBoundMethods(),e.indent+=De,o=[],o.push(this.makeCode(\"class \")),this.name&&o.push(this.makeCode(this.name)),null!=(null==(t=this.variable)?void 0:t.comments)&&this.compileCommentFragments(e,this.variable,o),this.name&&o.push(this.makeCode(\" \")),this.parent){var n;(n=o).push.apply(n,[this.makeCode(\"extends \")].concat(_toConsumableArray(this.parent.compileToFragments(e)),[this.makeCode(\" \")]))}if(o.push(this.makeCode(\"{\")),!this.body.isEmpty()){var r;this.body.spaced=!0,o.push(this.makeCode(\"\\n\")),(r=o).push.apply(r,_toConsumableArray(this.body.compileToFragments(e,z))),o.push(this.makeCode(\"\\n\"+this.tab))}return o.push(this.makeCode(\"}\")),o}},{key:\"determineName\",value:function determineName(){var e,t,o,l,s,i,d;return this.variable?(i=this.variable.properties,e=n.call(i,-1),t=_slicedToArray(e,1),d=t[0],e,s=d?d instanceof r&&d.name:this.variable.base,!(s instanceof R||s instanceof pe))?null:(l=s.value,d||(o=Je(l),o&&this.variable.error(o)),0<=a.call(G,l)?\"_\"+l:l):null}},{key:\"walkBody\",value:function walkBody(){var e,a,o,n,r,l,s,i,d,p,u,m,g,f,y,k,T,N;for(this.ctor=null,this.boundMethods=[],o=null,i=[],r=this.body.expressions,s=0,T=r.slice(),p=0,m=T.length;p<m;p++)if(n=T[p],n instanceof Le&&n.isObject(!0)){for(y=n.base.properties,l=[],a=0,N=0,k=function(){if(a>N)return l.push(new Le(new le(y.slice(N,a),!0)))};e=y[a];)(d=this.addInitializerExpression(e))&&(k(),l.push(d),i.push(d),N=a+1),a++;k(),t.apply(r,[s,s-s+1].concat(l)),l,s+=l.length}else(d=this.addInitializerExpression(n))&&(i.push(d),r[s]=d),s+=1;for(u=0,g=i.length;u<g;u++)f=i[u],f instanceof h&&(f.ctor?(this.ctor&&f.error(\"Cannot define more than one constructor in a class\"),this.ctor=f):f.isStatic&&f.bound?f.context=this.name:f.bound&&this.boundMethods.push(f));if(i.length!==r.length)return this.body.expressions=function(){var e,a,t;for(t=[],e=0,a=i.length;e<a;e++)n=i[e],t.push(n.hoist());return t}(),new c(r)}},{key:\"addInitializerExpression\",value:function addInitializerExpression(e){return e.unwrapAll()instanceof ce?e:this.validInitializerMethod(e)?this.addInitializerMethod(e):null}},{key:\"validInitializerMethod\",value:function validInitializerMethod(e){return!!(e instanceof d&&e.value instanceof h)&&(!(\"object\"!==e.context||e.variable.hasProperties())||e.variable.looksStatic(this.name)&&(this.name||!e.value.bound))}},{key:\"addInitializerMethod\",value:function addInitializerMethod(e){var a,t,o;return o=e.variable,a=e.value,a.isMethod=!0,a.isStatic=o.looksStatic(this.name),a.isStatic?a.name=o.properties[0]:(t=o.base,a.name=new(t.shouldCache()?V:r)(t),a.name.updateLocationDataIfMissing(t.locationData),\"constructor\"===t.value&&(a.ctor=this.parent?\"derived\":\"base\"),a.bound&&a.ctor&&a.error(\"Cannot define a constructor as a bound (fat arrow) function\")),a}},{key:\"makeDefaultConstructor\",value:function makeDefaultConstructor(){var e,a,t;return t=this.addInitializerMethod(new d(new Le(new pe(\"constructor\")),new h)),this.body.unshift(t),this.parent&&t.body.push(new _e(new $e,[new Te(new R(\"arguments\"))])),this.externalCtor&&(a=new Le(this.externalCtor,[new r(new pe(\"apply\"))]),e=[new Ie,new R(\"arguments\")],t.body.push(new u(a,e)),t.body.makeReturn()),t}},{key:\"proxyBoundMethods\",value:function proxyBoundMethods(){var e,a;return this.ctor.thisAssignments=function(){var t,o,n,l;for(n=this.boundMethods,l=[],t=0,o=n.length;t<o;t++)e=n[t],this.parent&&(e.classVariable=this.variableRef),a=new Le(new Ie,[e.name]),l.push(new d(a,new u(new Le(a,[new r(new pe(\"bind\"))]),[new Ie])));return l}.call(this),null}}]),o}(l);return e.prototype.children=[\"variable\",\"parent\",\"body\"],e}.call(this),e.ExecutableClassBody=k=function(){var e=function(e){function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:new c;_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.class=e,o.body=t,o}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,l,s,i,c,p,m,g,f;return(i=this.body.jumps())&&i.error(\"Class bodies cannot contain pure statements\"),(o=this.body.contains(qe))&&o.error(\"Class bodies shouldn't reference arguments\"),p=[],t=[new Ie],f=new h(p,this.body),c=new de(new u(new Le(f,[new r(new pe(\"call\"))]),t)),this.body.spaced=!0,e.classScope=f.makeScope(e.scope),this.name=null==(g=this.class.name)?e.classScope.freeVariable(this.defaultClassVariableName):g,s=new R(this.name),n=this.walkBody(),this.setContext(),this.class.hasNameClash&&(m=new R(e.classScope.freeVariable(\"superClass\")),f.params.push(new ie(m)),t.push(this.class.parent),this.class.parent=m),this.externalCtor&&(l=new R(e.classScope.freeVariable(\"ctor\",{reserve:!1})),this.class.externalCtor=l,this.externalCtor.variable.base=l),this.name===this.class.name?this.body.expressions.unshift(this.class):this.body.expressions.unshift(new d(new R(this.name),this.class)),(a=this.body.expressions).unshift.apply(a,_toConsumableArray(n)),this.body.push(s),c.compileToFragments(e)}},{key:\"walkBody\",value:function walkBody(){var e=this,a,t,o;for(a=[],o=0;(t=this.body.expressions[o])&&!!(t instanceof Le&&t.isString());)if(t.hoisted)o++;else{var n;(n=a).push.apply(n,_toConsumableArray(this.body.expressions.splice(o,1)))}return this.traverseChildren(!1,function(a){var t,o,n,r,l,s;if(a instanceof m||a instanceof A)return!1;if(t=!0,a instanceof c){for(s=a.expressions,o=n=0,r=s.length;n<r;o=++n)l=s[o],l instanceof Le&&l.isObject(!0)?(t=!1,a.expressions[o]=e.addProperties(l.base.properties)):l instanceof d&&l.variable.looksStatic(e.name)&&(l.value.isStatic=!0);a.expressions=He(a.expressions)}return t}),a}},{key:\"setContext\",value:function setContext(){var e=this;return this.body.traverseChildren(!1,function(a){return a instanceof Ie?a.value=e.name:a instanceof h&&a.bound&&a.isStatic?a.context=e.name:void 0})}},{key:\"addProperties\",value:function addProperties(e){var a,t,o,n,l,s,i;return l=function(){var l,c,p;for(p=[],l=0,c=e.length;l<c;l++)a=e[l],i=a.variable,t=null==i?void 0:i.base,s=a.value,delete a.context,\"constructor\"===t.value?(s instanceof h&&t.error(\"constructors must be defined at the top level of a class body\"),a=this.externalCtor=new d(new Le,s)):a.variable.this?a.value instanceof h&&(a.value.isStatic=!0):(o=new(t.shouldCache()?V:r)(t),n=new r(new pe(\"prototype\")),i=new Le(new Ie,[n,o]),a.variable=i),p.push(a);return p}.call(this),Ue(l)}}]),a}(l);return e.prototype.children=[\"class\",\"body\"],e.prototype.defaultClassVariableName=\"_Class\",e}.call(this),e.ModuleDeclaration=Z=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.clause=e,o.source=t,o.checkSource(),o}return _inherits(a,e),_createClass(a,[{key:\"checkSource\",value:function checkSource(){if(null!=this.source&&this.source instanceof be)return this.source.error(\"the name of the module to be imported from must be an uninterpolated string\")}},{key:\"checkScope\",value:function checkScope(e,a){if(0!==e.indent.length)return this.error(a+\" statements must be at top-level scope\")}}]),a}(l);return e.prototype.children=[\"clause\",\"source\"],e.prototype.isStatement=we,e.prototype.jumps=Ee,e.prototype.makeReturn=Ee,e}.call(this),e.ImportDeclaration=F=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t;if(this.checkScope(e,\"import\"),e.importedSymbols=[],a=[],a.push(this.makeCode(this.tab+\"import \")),null!=this.clause){var o;(o=a).push.apply(o,_toConsumableArray(this.clause.compileNode(e)))}return null!=(null==(t=this.source)?void 0:t.value)&&(null!==this.clause&&a.push(this.makeCode(\" from \")),a.push(this.makeCode(this.source.value))),a.push(this.makeCode(\";\")),a}}]),a}(Z),e.ImportClause=L=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.defaultBinding=e,o.namedImports=t,o}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a;if(a=[],null!=this.defaultBinding){var t;(t=a).push.apply(t,_toConsumableArray(this.defaultBinding.compileNode(e))),null!=this.namedImports&&a.push(this.makeCode(\", \"))}if(null!=this.namedImports){var o;(o=a).push.apply(o,_toConsumableArray(this.namedImports.compileNode(e)))}return a}}]),a}(l);return e.prototype.children=[\"defaultBinding\",\"namedImports\"],e}.call(this),e.ExportDeclaration=b=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t;return this.checkScope(e,\"export\"),a=[],a.push(this.makeCode(this.tab+\"export \")),this instanceof $&&a.push(this.makeCode(\"default \")),!(this instanceof $)&&(this.clause instanceof d||this.clause instanceof m)&&(this.clause instanceof m&&!this.clause.variable&&this.clause.error(\"anonymous classes cannot be exported\"),a.push(this.makeCode(\"var \")),this.clause.moduleDeclaration=\"export\"),a=null!=this.clause.body&&this.clause.body instanceof c?a.concat(this.clause.compileToFragments(e,z)):a.concat(this.clause.compileNode(e)),null!=(null==(t=this.source)?void 0:t.value)&&a.push(this.makeCode(\" from \"+this.source.value)),a.push(this.makeCode(\";\")),a}}]),a}(Z),e.ExportNamedDeclaration=_=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(b),e.ExportDefaultDeclaration=$=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(b),e.ExportAllDeclaration=v=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(b),e.ModuleSpecifierList=ee=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.specifiers=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l,s;if(a=[],e.indent+=De,t=function(){var a,t,o,n;for(o=this.specifiers,n=[],a=0,t=o.length;a<t;a++)s=o[a],n.push(s.compileToFragments(e,X));return n}.call(this),0!==this.specifiers.length){for(a.push(this.makeCode(\"{\\n\"+e.indent)),n=r=0,l=t.length;r<l;n=++r){var i;o=t[n],n&&a.push(this.makeCode(\",\\n\"+e.indent)),(i=a).push.apply(i,_toConsumableArray(o))}a.push(this.makeCode(\"\\n}\"))}else a.push(this.makeCode(\"{}\"));return a}}]),a}(l);return e.prototype.children=[\"specifiers\"],e}.call(this),e.ImportSpecifierList=M=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(ee),e.ExportSpecifierList=D=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(ee),e.ModuleSpecifier=Q=function(){var e=function(e){function a(e,t,o){_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this)),r,l;if(n.original=e,n.alias=t,n.moduleDeclarationType=o,n.original.comments||(null==(r=n.alias)?void 0:r.comments)){if(n.comments=[],n.original.comments){var s;(s=n.comments).push.apply(s,_toConsumableArray(n.original.comments))}if(null==(l=n.alias)?void 0:l.comments){var i;(i=n.comments).push.apply(i,_toConsumableArray(n.alias.comments))}}return n.identifier=null==n.alias?n.original.value:n.alias.value,n}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a;return e.scope.find(this.identifier,this.moduleDeclarationType),a=[],a.push(this.makeCode(this.original.value)),null!=this.alias&&a.push(this.makeCode(\" as \"+this.alias.value)),a}}]),a}(l);return e.prototype.children=[\"original\",\"alias\"],e}.call(this),e.ImportSpecifier=j=function(e){function t(e,a){return _classCallCheck(this,t),_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,a,\"import\"))}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function compileNode(e){var o;return(o=this.identifier,0<=a.call(e.importedSymbols,o))||e.scope.check(this.identifier)?this.error(\"'\"+this.identifier+\"' has already been declared\"):e.importedSymbols.push(this.identifier),_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"compileNode\",this).call(this,e)}}]),t}(Q),e.ImportDefaultSpecifier=w=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(j),e.ImportNamespaceSpecifier=P=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),a}(j),e.ExportSpecifier=C=function(e){function a(e,t){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this,e,t,\"export\"))}return _inherits(a,e),a}(Q),e.Assign=d=function(){var e=function(e){function n(e,a,t){var o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:{};_classCallCheck(this,n);var r=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return r.variable=e,r.value=a,r.context=t,r.param=o.param,r.subpattern=o.subpattern,r.operatorToken=o.operatorToken,r.moduleDeclaration=o.moduleDeclaration,r}return _inherits(n,e),_createClass(n,[{key:\"isStatement\",value:function isStatement(e){return(null==e?void 0:e.level)===z&&null!=this.context&&(this.moduleDeclaration||0<=a.call(this.context,\"?\"))}},{key:\"checkAssignability\",value:function checkAssignability(e,a){if(Object.prototype.hasOwnProperty.call(e.scope.positions,a.value)&&\"import\"===e.scope.variables[e.scope.positions[a.value]].type)return a.error(\"'\"+a.value+\"' is read-only\")}},{key:\"assigns\",value:function assigns(e){return this[\"object\"===this.context?\"value\":\"variable\"].assigns(e)}},{key:\"unfoldSoak\",value:function unfoldSoak(e){return ra(e,this,\"variable\")}},{key:\"compileNode\",value:function compileNode(e){var a=this,o,n,r,l,s,i,d,c,p,u,g,f,y,k,T;if(l=this.variable instanceof Le,l){if(this.variable.param=this.param,this.variable.isArray()||this.variable.isObject()){if(this.variable.base.lhs=!0,r=this.variable.contains(function(e){return e instanceof le&&e.hasSplat()}),!this.variable.isAssignable()||this.variable.isArray()&&r)return this.compileDestructuring(e);if(this.variable.isObject()&&r&&(i=this.compileObjectDestruct(e)),i)return i}if(this.variable.isSplice())return this.compileSplice(e);if(\"||=\"===(p=this.context)||\"&&=\"===p||\"?=\"===p)return this.compileConditional(e);if(\"**=\"===(u=this.context)||\"//=\"===u||\"%%=\"===u)return this.compileSpecialMath(e)}if(this.context||(T=this.variable.unwrapAll(),!T.isAssignable()&&this.variable.error(\"'\"+this.variable.compile(e)+\"' can't be assigned\"),T.eachName(function(t){var o,n,r;if(\"function\"!=typeof t.hasProperties||!t.hasProperties())return(r=Je(t.value),r&&t.error(r),a.checkAssignability(e,t),a.moduleDeclaration)?e.scope.add(t.value,a.moduleDeclaration):a.param?e.scope.add(t.value,\"alwaysDeclare\"===a.param?\"var\":\"param\"):(e.scope.find(t.value),t.comments&&!e.scope.comments[t.value]&&!(a.value instanceof m)&&t.comments.every(function(e){return e.here&&!e.multiline}))?(n=new R(t.value),n.comments=t.comments,o=[],a.compileCommentFragments(e,n,o),e.scope.comments[t.value]=o):void 0})),this.value instanceof h)if(this.value.isStatic)this.value.name=this.variable.properties[0];else if(2<=(null==(g=this.variable.properties)?void 0:g.length)){var N,v,b,$;f=this.variable.properties,N=f,v=_toArray(N),d=v.slice(0),N,b=t.call(d,-2),$=_slicedToArray(b,2),c=$[0],s=$[1],b,\"prototype\"===(null==(y=c.name)?void 0:y.value)&&(this.value.name=s)}return(this.csx&&(this.value.base.csxAttribute=!0),k=this.value.compileToFragments(e,X),n=this.variable.compileToFragments(e,X),\"object\"===this.context)?(this.variable.shouldCache()&&(n.unshift(this.makeCode(\"[\")),n.push(this.makeCode(\"]\"))),n.concat(this.makeCode(this.csx?\"=\":\": \"),k)):(o=n.concat(this.makeCode(\" \"+(this.context||\"=\")+\" \"),k),e.level>X||l&&this.variable.base instanceof le&&!this.nestedLhs&&!0!==this.param?this.wrapInParentheses(o):o)}},{key:\"compileObjectDestruct\",value:function compileObjectDestruct(e){var a,t,o,l,i,d,p,m,h,g,f,y;if(t=function(a){var t;if(a instanceof n){var o=a.variable.cache(e),r=_slicedToArray(o,2);return a.variable=r[0],t=r[1],t}return a},o=function(a){var o,r;return r=t(a),o=a instanceof n&&a.variable!==r,o||!r.isAssignable()?r:new K(\"'\"+r.compileWithoutComments(e)+\"'\")},h=function traverseRest(a,l){var i,d,c,u,m,g,f,y,p,k,T;for(k=[],T=void 0,null==l.properties&&(l=new Le(l)),d=c=0,u=a.length;c<u;d=++c)if(p=a[d],f=g=m=null,p instanceof n){if(\"function\"==typeof(i=p.value).isObject?i.isObject():void 0){if(\"object\"!==p.context)continue;m=p.value.base.properties}else if(p.value instanceof n&&p.value.variable.isObject()){m=p.value.variable.base.properties;var N=p.value.value.cache(e),v=_slicedToArray(N,2);p.value.value=v[0],f=v[1]}if(m){var b;g=new Le(l.base,l.properties.concat([new r(t(p))])),f&&(g=new Le(new se(\"?\",g,f))),(b=k).push.apply(b,_toConsumableArray(h(m,g)))}}else p instanceof Te&&(null!=T&&p.error(\"multiple rest elements are disallowed in object destructuring\"),T=d,k.push({name:p.name.unwrapAll(),source:l,excludeProps:new s(function(){var e,t,n;for(n=[],e=0,t=a.length;e<t;e++)y=a[e],y!==p&&n.push(o(y));return n}())}));return null!=T&&a.splice(T,1),k},y=this.value.shouldCache()?new R(e.scope.freeVariable(\"ref\",{reserve:!1})):this.value.base,p=h(this.variable.base.properties,y),!(p&&0<p.length))return!1;var k=this.value.cache(e),T=_slicedToArray(k,2);for(this.value=T[0],f=T[1],m=new c([this]),l=0,i=p.length;l<i;l++)d=p[l],g=new u(new Le(new K(sa(\"objectWithoutKeys\",e))),[d.source,d.excludeProps]),m.push(new n(new Le(d.name),g,null,{param:this.param?\"alwaysDeclare\":null}));return a=m.compileToFragments(e),e.level===z&&(a.shift(),a.pop()),a}},{key:\"compileDestructuring\",value:function compileDestructuring(e){var t=this,o,l,d,c,p,m,h,g,f,k,T,v,i,b,$,_,C,D,E,x,I,S,A,O,L,F,w,P,j,M,U,B,G,H;if(U=e.level===z,B=this.value,I=this.variable.base.objects,S=I.length,0===S)return d=B.compileToFragments(e),e.level>=Y?this.wrapInParentheses(d):d;var W=I,q=_slicedToArray(W,1);return E=q[0],1===S&&E instanceof N&&E.error(\"Destructuring assignment has no target\"),j=function(){var e,a,t;for(t=[],v=e=0,a=I.length;e<a;v=++e)E=I[v],E instanceof Te&&t.push(v);return t}(),g=function(){var e,a,t;for(t=[],v=e=0,a=I.length;e<a;v=++e)E=I[v],E instanceof N&&t.push(v);return t}(),M=[].concat(_toConsumableArray(j),_toConsumableArray(g)),1<M.length&&I[M.sort()[1]].error(\"multiple splats/expansions are disallowed in an assignment\"),_=0<(null==j?void 0:j.length),b=0<(null==g?void 0:g.length),$=this.variable.isObject(),i=this.variable.isArray(),G=B.compileToFragments(e,X),H=We(G),l=[],(!(B.unwrap()instanceof R)||this.variable.assigns(H))&&(O=e.scope.freeVariable(\"ref\"),l.push([this.makeCode(O+\" = \")].concat(_toConsumableArray(G))),G=[this.makeCode(O)],H=O),P=function(a){return function(t,o){var n=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2],l,s;return l=[new R(t),new re(o)],n&&l.push(new re(n)),s=new Le(new R(sa(a,e)),[new r(new pe(\"call\"))]),new Le(new u(s,l))}},c=P(\"slice\"),p=P(\"splice\"),T=function(e){var a,t,o;for(o=[],v=a=0,t=e.length;a<t;v=++a)E=e[v],E.base instanceof le&&E.base.hasSplat()&&o.push(v);return o},k=function(e){var a,t,o;for(o=[],v=a=0,t=e.length;a<t;v=++a)E=e[v],E instanceof n&&\"object\"===E.context&&o.push(v);return o},x=function(e){var a,t;for(a=0,t=e.length;a<t;a++)if(E=e[a],!E.isAssignable())return!0;return!1},m=function(e){return T(e).length||k(e).length||x(e)||1===S},D=function(o,s,i){var d,p,u,m,h,g,f,k;for(g=T(o),f=[],v=u=0,m=o.length;u<m;v=++u)if(E=o[v],!(E instanceof y)){if(E instanceof n&&\"object\"===E.context){var N=E;if(p=N.variable.base,s=N.value,s instanceof n){var b=s;s=b.variable}p=s.this?s.properties[0].name:new pe(s.unwrap().value),d=p.unwrap()instanceof pe,k=new Le(B,[new(d?r:V)(p)])}else s=function(){switch(!1){case!(E instanceof Te):return new Le(E.name);case 0>a.call(g,v):return new Le(E.base);default:return E}}(),k=function(){switch(!1){case!(E instanceof Te):return c(i,v);default:return new Le(new K(i),[new V(new re(v))])}}();h=Je(s.unwrap().value),h&&s.error(h),f.push(l.push(new n(s,k,null,{param:t.param,subpattern:!0}).compileToFragments(e,X)))}return f},o=function(a,o,r){var i;return o=new Le(new s(a,!0)),i=r instanceof Le?r:new Le(new K(r)),l.push(new n(o,i,null,{param:t.param,subpattern:!0}).compileToFragments(e,X))},A=function(e,a,t){return m(e)?D(e,a,t):o(e,a,t)},M.length?(h=M[0],C=I.slice(0,h+(_?1:0)),w=I.slice(h+1),0!==C.length&&A(C,G,H),0!==w.length&&(L=function(){switch(!1){case!_:return p(I[h].unwrapAll().value,-1*w.length);case!b:return c(H,-1*w.length)}}(),m(w)&&(F=L,L=e.scope.freeVariable(\"ref\"),l.push([this.makeCode(L+\" = \")].concat(_toConsumableArray(F.compileToFragments(e,X))))),A(w,G,L))):A(I,G,H),U||this.subpattern||l.push(G),f=this.joinFragmentArrays(l,\", \"),e.level<X?f:this.wrapInParentheses(f)}},{key:\"compileConditional\",value:function compileConditional(e){var t=this.variable.cacheReference(e),o=_slicedToArray(t,2),r,l,s;return l=o[0],s=o[1],l.properties.length||!(l.base instanceof K)||l.base instanceof Ie||e.scope.check(l.base.value)||this.variable.error('the variable \"'+l.base.value+\"\\\" can't be assigned with \"+this.context+\" because it has not been declared before\"),0<=a.call(this.context,\"?\")?(e.isExistentialEquals=!0,new O(new T(l),s,{type:\"if\"}).addElse(new n(s,this.value,\"=\")).compileToFragments(e)):(r=new se(this.context.slice(0,-1),l,new n(s,this.value,\"=\")).compileToFragments(e),e.level<=X?r:this.wrapInParentheses(r))}},{key:\"compileSpecialMath\",value:function compileSpecialMath(e){var a=this.variable.cacheReference(e),t=_slicedToArray(a,2),o,r;return o=t[0],r=t[1],new n(o,new se(this.context.slice(0,-1),r,this.value)).compileToFragments(e)}},{key:\"compileSplice\",value:function compileSplice(e){var a=this.variable.properties.pop(),t=a.range,o,n,r,l,s,i,d,c,p,u;if(r=t.from,d=t.to,n=t.exclusive,c=this.variable.unwrapAll(),c.comments&&(Qe(c,this),delete this.variable.comments),i=this.variable.compile(e),r){var m=this.cacheToCodeFragments(r.cache(e,Y)),h=_slicedToArray(m,2);l=h[0],s=h[1]}else l=s=\"0\";d?(null==r?void 0:r.isNumber())&&d.isNumber()?(d=d.compile(e)-s,!n&&(d+=1)):(d=d.compile(e,H)+\" - \"+s,!n&&(d+=\" + 1\")):d=\"9e9\";var g=this.value.cache(e,X),f=_slicedToArray(g,2);return p=f[0],u=f[1],o=[].concat(this.makeCode(sa(\"splice\",e)+\".apply(\"+i+\", [\"+l+\", \"+d+\"].concat(\"),p,this.makeCode(\")), \"),u),e.level>z?this.wrapInParentheses(o):o}},{key:\"eachName\",value:function eachName(e){return this.variable.unwrapAll().eachName(e)}}]),n}(l);return e.prototype.children=[\"variable\",\"value\"],e.prototype.isAssignable=we,e}.call(this),e.FuncGlyph=I=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.glyph=e,t}return _inherits(a,e),a}(l),e.Code=h=function(){var e=function(e){function t(e,a,n,r){_classCallCheck(this,t);var l=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),s;return l.funcGlyph=n,l.paramStart=r,l.params=e||[],l.body=a||new c,l.bound=\"=>\"===(null==(s=l.funcGlyph)?void 0:s.glyph),l.isGenerator=!1,l.isAsync=!1,l.isMethod=!1,l.body.traverseChildren(!1,function(e){if((e instanceof se&&e.isYield()||e instanceof Pe)&&(l.isGenerator=!0),(e instanceof se&&e.isAwait()||e instanceof o)&&(l.isAsync=!0),l.isGenerator&&l.isAsync)return e.error(\"function can't contain both yield and await\")}),l}return _inherits(t,e),_createClass(t,[{key:\"isStatement\",value:function isStatement(){return this.isMethod}},{key:\"makeScope\",value:function makeScope(e){return new ye(e,this.body,this)}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r,c,p,h,g,f,y,T,v,i,b,$,k,l,_,C,D,m,E,x,I,S,A,L,F,w,P,j,M,U,V,B,W,X,Y,q,z,J,Z,Q;for(this.ctor&&(this.isAsync&&this.name.error(\"Class constructor may not be async\"),this.isGenerator&&this.name.error(\"Class constructor may not be a generator\")),this.bound&&((null==(P=e.scope.method)?void 0:P.bound)&&(this.context=e.scope.method.context),!this.context&&(this.context=\"this\")),e.scope=Ve(e,\"classScope\")||this.makeScope(e.scope),e.scope.shared=Ve(e,\"sharedScope\"),e.indent+=De,delete e.bare,delete e.isExistentialEquals,L=[],g=[],J=null==(j=null==(M=this.thisAssignments)?void 0:M.slice())?[]:j,F=[],T=!1,y=!1,S=[],this.eachParamName(function(t,o,n,r){var l,s;if(0<=a.call(S,t)&&o.error(\"multiple parameters named '\"+t+\"'\"),S.push(t),o.this)return t=o.properties[0].name.value,0<=a.call(G,t)&&(t=\"_\"+t),s=new R(e.scope.freeVariable(t,{reserve:!1})),l=n.name instanceof le&&r instanceof d&&\"=\"===r.operatorToken.value?new d(new R(t),s,\"object\"):s,n.renameParam(o,l),J.push(new d(o,s))}),U=this.params,v=b=0,l=U.length;b<l;v=++b)I=U[v],I.splat||I instanceof N?(T?I.error(\"only one splat or expansion parameter is allowed per function definition\"):I instanceof N&&1===this.params.length&&I.error(\"an expansion parameter cannot be the only parameter in a function definition\"),T=!0,I.splat?(I.name instanceof s?(z=e.scope.freeVariable(\"arg\"),L.push(w=new Le(new R(z))),g.push(new d(new Le(I.name),w))):(L.push(w=I.asReference(e)),z=We(w.compileNodeWithoutComments(e))),I.shouldCache()&&g.push(new d(new Le(I.name),w))):(z=e.scope.freeVariable(\"args\"),L.push(new Le(new R(z)))),e.scope.parameter(z)):((I.shouldCache()||y)&&(I.assignedInBody=!0,y=!0,null==I.value?g.push(new d(new Le(I.name),I.asReference(e),null,{param:\"alwaysDeclare\"})):(h=new se(\"===\",I,new Oe),i=new d(new Le(I.name),I.value),g.push(new O(h,i)))),T?(F.push(I),null!=I.value&&!I.shouldCache()&&(h=new se(\"===\",I,new Oe),i=new d(new Le(I.name),I.value),g.push(new O(h,i))),null!=(null==(V=I.name)?void 0:V.value)&&e.scope.add(I.name.value,\"var\",!0)):(w=I.shouldCache()?I.asReference(e):null==I.value||I.assignedInBody?I:new d(new Le(I.name),I.value,null,{param:!0}),I.name instanceof s||I.name instanceof le?(I.name.lhs=!0,I.name instanceof le&&I.name.hasSplat()?(z=e.scope.freeVariable(\"arg\"),e.scope.parameter(z),w=new Le(new R(z)),g.push(new d(new Le(I.name),w,null,{param:\"alwaysDeclare\"})),null!=I.value&&!I.assignedInBody&&(w=new d(w,I.value,null,{param:!0}))):!I.shouldCache()&&I.name.eachName(function(a){return e.scope.parameter(a.value)})):(A=null==I.value?w:I,e.scope.parameter(We(A.compileToFragmentsWithoutComments(e)))),L.push(w)));if(0!==F.length&&g.unshift(new d(new Le(new s([new Te(new R(z))].concat(_toConsumableArray(function(){var a,t,o;for(o=[],a=0,t=F.length;a<t;a++)I=F[a],o.push(I.asReference(e));return o}())))),new Le(new R(z)))),Z=this.body.isEmpty(),!this.expandCtorSuper(J)){var ee;(ee=this.body.expressions).unshift.apply(ee,_toConsumableArray(J))}for((t=this.body.expressions).unshift.apply(t,_toConsumableArray(g)),this.isMethod&&this.bound&&!this.isStatic&&this.classVariable&&(c=new Le(new K(sa(\"boundMethodCheck\",e))),this.body.expressions.unshift(new u(c,[new Le(new Ie),this.classVariable]))),Z||this.noReturn||this.body.makeReturn(),this.bound&&this.isGenerator&&(Q=this.body.contains(function(e){return e instanceof se&&\"yield\"===e.operator}),(Q||this).error(\"yield cannot occur inside bound (fat arrow) functions\")),E=[],this.isMethod&&this.isStatic&&E.push(\"static\"),this.isAsync&&E.push(\"async\"),this.isMethod||this.bound?this.isGenerator&&E.push(\"*\"):E.push(\"function\"+(this.isGenerator?\"*\":\"\")),q=[this.makeCode(\"(\")],null!=(null==(B=this.paramStart)?void 0:B.comments)&&this.compileCommentFragments(e,this.paramStart,q),v=$=0,_=L.length;$<_;v=++$){var ae;if(I=L[v],0!==v&&q.push(this.makeCode(\", \")),T&&v===L.length-1&&q.push(this.makeCode(\"...\")),Y=e.scope.variables.length,(ae=q).push.apply(ae,_toConsumableArray(I.compileToFragments(e))),Y!==e.scope.variables.length){var te;f=e.scope.variables.splice(Y),(te=e.scope.parent.variables).push.apply(te,_toConsumableArray(f))}}if(q.push(this.makeCode(\")\")),null!=(null==(W=this.funcGlyph)?void 0:W.comments)){for(X=this.funcGlyph.comments,k=0,C=X.length;k<C;k++)p=X[k],p.unshift=!1;this.compileCommentFragments(e,this.funcGlyph,q)}if(this.body.isEmpty()||(r=this.body.compileWithDeclarations(e)),this.isMethod){var oe=[e.scope,e.scope.parent];m=oe[0],e.scope=oe[1],x=this.name.compileToFragments(e),\".\"===x[0].code&&x.shift(),e.scope=m}if(n=this.joinFragmentArrays(function(){var e,a,t;for(t=[],a=0,e=E.length;a<e;a++)D=E[a],t.push(this.makeCode(D));return t}.call(this),\" \"),E.length&&x&&n.push(this.makeCode(\" \")),x){var ne;(ne=n).push.apply(ne,_toConsumableArray(x))}if((o=n).push.apply(o,_toConsumableArray(q)),this.bound&&!this.isMethod&&n.push(this.makeCode(\" =>\")),n.push(this.makeCode(\" {\")),null==r?void 0:r.length){var re;(re=n).push.apply(re,[this.makeCode(\"\\n\")].concat(_toConsumableArray(r),[this.makeCode(\"\\n\"+this.tab)]))}return n.push(this.makeCode(\"}\")),this.isMethod?Ye(n,this):this.front||e.level>=H?this.wrapInParentheses(n):n}},{key:\"eachParamName\",value:function eachParamName(e){var a,t,o,n,r;for(n=this.params,r=[],a=0,t=n.length;a<t;a++)o=n[a],r.push(o.eachName(e));return r}},{key:\"traverseChildren\",value:function traverseChildren(e,a){if(e)return _get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"traverseChildren\",this).call(this,e,a)}},{key:\"replaceInContext\",value:function replaceInContext(e,a){return!!this.bound&&_get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),\"replaceInContext\",this).call(this,e,a)}},{key:\"expandCtorSuper\",value:function expandCtorSuper(e){var a=this,t,o,n,r;return!!this.ctor&&(this.eachSuperCall(c.wrap(this.params),function(e){return e.error(\"'super' is not allowed in constructor parameter defaults\")}),r=this.eachSuperCall(this.body,function(t){return\"base\"===a.ctor&&t.error(\"'super' is only allowed in derived class constructors\"),t.expressions=e}),t=e.length&&e.length!==(null==(n=this.thisAssignments)?void 0:n.length),\"derived\"===this.ctor&&!r&&t&&(o=e[0].variable,o.error(\"Can't use @params in derived class constructors without calling super\")),r)}},{key:\"eachSuperCall\",value:function eachSuperCall(e,a){var o=this,n;return n=!1,e.traverseChildren(!0,function(e){var r;return e instanceof _e?(!e.variable.accessor&&(r=e.args.filter(function(e){return!(e instanceof m)&&(!(e instanceof t)||e.bound)}),c.wrap(r).traverseChildren(!0,function(e){if(e.this)return e.error(\"Can't call super with @params in derived class constructors\")})),n=!0,a(e)):e instanceof Ie&&\"derived\"===o.ctor&&!n&&e.error(\"Can't reference 'this' before calling super in derived class constructors\"),!(e instanceof _e)&&(!(e instanceof t)||e.bound)}),n}}]),t}(l);return e.prototype.children=[\"params\",\"body\"],e.prototype.jumps=te,e}.call(this),e.Param=ie=function(){var e=function(e){function t(e,a,o){_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),r,l;return n.name=e,n.value=a,n.splat=o,r=Je(n.name.unwrapAll().value),r&&n.name.error(r),n.name instanceof le&&n.name.generated&&(l=n.name.objects[0].operatorToken,l.error(\"unexpected \"+l.value)),n}return _inherits(t,e),_createClass(t,[{key:\"compileToFragments\",value:function compileToFragments(e){return this.name.compileToFragments(e,X)}},{key:\"compileToFragmentsWithoutComments\",value:function compileToFragmentsWithoutComments(e){return this.name.compileToFragmentsWithoutComments(e,X)}},{key:\"asReference\",value:function asReference(e){var t,o;return this.reference?this.reference:(o=this.name,o.this?(t=o.properties[0].name.value,0<=a.call(G,t)&&(t=\"_\"+t),o=new R(e.scope.freeVariable(t))):o.shouldCache()&&(o=new R(e.scope.freeVariable(\"arg\"))),o=new Le(o),o.updateLocationDataIfMissing(this.locationData),this.reference=o)}},{key:\"shouldCache\",value:function shouldCache(){return this.name.shouldCache()}},{key:\"eachName\",value:function eachName(e){var a=this,t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:this.name,o,n,r,l,s,i,c,p;if(o=function(t){var o=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null;return e(\"@\"+t.properties[0].name.value,t,a,o)},t instanceof K)return e(t.value,t,this);if(t instanceof Le)return o(t);for(p=null==(c=t.objects)?[]:c,n=0,r=p.length;n<r;n++)i=p[n],l=i,i instanceof d&&null==i.context&&(i=i.variable),i instanceof d?(i=i.value instanceof d?i.value.variable:i.value,this.eachName(e,i.unwrap())):i instanceof Te?(s=i.name.unwrap(),e(s.value,s,this)):i instanceof Le?i.isArray()||i.isObject()?this.eachName(e,i.base):i.this?o(i,l):e(i.base.value,i.base,this):i instanceof y?i:!(i instanceof N)&&i.error(\"illegal parameter \"+i.compile())}},{key:\"renameParam\",value:function renameParam(e,a){var t,o;return t=function(a){return a===e},o=function(e,t){var o;return t instanceof le?(o=e,e.this&&(o=e.properties[0].name),e.this&&o.value===a.value?new Le(a):new d(new Le(o),a,\"object\")):a},this.replaceInContext(t,o)}}]),t}(l);return e.prototype.children=[\"name\",\"value\"],e}.call(this),e.Splat=Te=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.name=e.compile?e:new K(e),t}return _inherits(a,e),_createClass(a,[{key:\"isAssignable\",value:function isAssignable(){return this.name.isAssignable()&&(!this.name.isAtomic||this.name.isAtomic())}},{key:\"assigns\",value:function assigns(e){return this.name.assigns(e)}},{key:\"compileNode\",value:function compileNode(e){return[this.makeCode(\"...\")].concat(_toConsumableArray(this.name.compileToFragments(e,Y)))}},{key:\"unwrap\",value:function unwrap(){return this.name}}]),a}(l);return e.prototype.children=[\"name\"],e}.call(this),e.Expansion=N=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(){return this.error(\"Expansion must be used inside a destructuring assignment or parameter list\")}},{key:\"asReference\",value:function asReference(){return this}},{key:\"eachName\",value:function eachName(){}}]),a}(l);return e.prototype.shouldCache=te,e}.call(this),e.Elision=y=function(){var e=function(e){function a(){return _classCallCheck(this,a),_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).apply(this,arguments))}return _inherits(a,e),_createClass(a,[{key:\"compileToFragments\",value:function compileToFragments(e,t){var o;return o=_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"compileToFragments\",this).call(this,e,t),o.isElision=!0,o}},{key:\"compileNode\",value:function compileNode(){return[this.makeCode(\", \")]}},{key:\"asReference\",value:function asReference(){return this}},{key:\"eachName\",value:function eachName(){}}]),a}(l);return e.prototype.isAssignable=we,e.prototype.shouldCache=te,e}.call(this),e.While=Fe=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.condition=(null==t?void 0:t.invert)?e.invert():e,o.guard=null==t?void 0:t.guard,o}return _inherits(a,e),_createClass(a,[{key:\"makeReturn\",value:function makeReturn(e){return e?_get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"makeReturn\",this).call(this,e):(this.returns=!this.jumps(),this)}},{key:\"addBody\",value:function addBody(e){return this.body=e,this}},{key:\"jumps\",value:function jumps(){var e,a,t,o,n;if(e=this.body.expressions,!e.length)return!1;for(a=0,o=e.length;a<o;a++)if(n=e[a],t=n.jumps({loop:!0}))return t;return!1}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n;return e.indent+=De,n=\"\",t=this.body,t.isEmpty()?t=this.makeCode(\"\"):(this.returns&&(t.makeReturn(o=e.scope.freeVariable(\"results\")),n=\"\"+this.tab+o+\" = [];\\n\"),this.guard&&(1<t.expressions.length?t.expressions.unshift(new O(new de(this.guard).invert(),new Ne(\"continue\"))):this.guard&&(t=c.wrap([new O(this.guard,t)]))),t=[].concat(this.makeCode(\"\\n\"),t.compileToFragments(e,z),this.makeCode(\"\\n\"+this.tab))),a=[].concat(this.makeCode(n+this.tab+\"while (\"),this.condition.compileToFragments(e,q),this.makeCode(\") {\"),t,this.makeCode(\"}\")),this.returns&&a.push(this.makeCode(\"\\n\"+this.tab+\"return \"+o+\";\")),a}}]),a}(l);return e.prototype.children=[\"condition\",\"guard\",\"body\"],e.prototype.isStatement=we,e}.call(this),e.Op=se=function(){var e=function(e){function n(e,a,o,r){var l;_classCallCheck(this,n);var s=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this)),i;if(\"in\"===e){var d;return d=new U(a,o),_possibleConstructorReturn(s,d)}if(\"do\"===e){var c;return c=n.prototype.generateDo(a),_possibleConstructorReturn(s,c)}if(\"new\"===e){if((i=a.unwrap())instanceof u&&!i.do&&!i.isNew){var p;return p=i.newInstance(),_possibleConstructorReturn(s,p)}(a instanceof h&&a.bound||a.do)&&(a=new de(a))}return s.operator=t[e]||e,s.first=a,s.second=o,s.flip=!!r,l=s,_possibleConstructorReturn(s,l)}return _inherits(n,e),_createClass(n,[{key:\"isNumber\",value:function isNumber(){var e;return this.isUnary()&&(\"+\"===(e=this.operator)||\"-\"===e)&&this.first instanceof Le&&this.first.isNumber()}},{key:\"isAwait\",value:function isAwait(){return\"await\"===this.operator}},{key:\"isYield\",value:function isYield(){var e;return\"yield\"===(e=this.operator)||\"yield*\"===e}},{key:\"isUnary\",value:function isUnary(){return!this.second}},{key:\"shouldCache\",value:function shouldCache(){return!this.isNumber()}},{key:\"isChainable\",value:function isChainable(){var e;return\"<\"===(e=this.operator)||\">\"===e||\">=\"===e||\"<=\"===e||\"===\"===e||\"!==\"===e}},{key:\"invert\",value:function invert(){var e,a,t,r,l;if(this.isChainable()&&this.first.isChainable()){for(e=!0,a=this;a&&a.operator;)e&&(e=a.operator in o),a=a.first;if(!e)return new de(this).invert();for(a=this;a&&a.operator;)a.invert=!a.invert,a.operator=o[a.operator],a=a.first;return this}return(r=o[this.operator])?(this.operator=r,this.first.unwrap()instanceof n&&this.first.invert(),this):this.second?new de(this).invert():\"!\"===this.operator&&(t=this.first.unwrap())instanceof n&&(\"!\"===(l=t.operator)||\"in\"===l||\"instanceof\"===l)?t:new n(\"!\",this)}},{key:\"unfoldSoak\",value:function unfoldSoak(e){var a;return(\"++\"===(a=this.operator)||\"--\"===a||\"delete\"===a)&&ra(e,this,\"first\")}},{key:\"generateDo\",value:function generateDo(e){var a,t,o,n,r,l,s,i;for(l=[],t=e instanceof d&&(s=e.value.unwrap())instanceof h?s:e,i=t.params||[],o=0,n=i.length;o<n;o++)r=i[o],r.value?(l.push(r.value),delete r.value):l.push(r);return a=new u(e,l),a.do=!0,a}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l;if(t=this.isChainable()&&this.first.isChainable(),t||(this.first.front=this.front),\"delete\"===this.operator&&e.scope.check(this.first.unwrapAll().value)&&this.error(\"delete operand may not be argument or var\"),(\"--\"===(r=this.operator)||\"++\"===r)&&(n=Je(this.first.unwrapAll().value),n&&this.first.error(n)),this.isYield()||this.isAwait())return this.compileContinuation(e);if(this.isUnary())return this.compileUnary(e);if(t)return this.compileChain(e);switch(this.operator){case\"?\":return this.compileExistence(e,this.second.isDefaultValue);case\"**\":return this.compilePower(e);case\"//\":return this.compileFloorDivision(e);case\"%%\":return this.compileModulo(e);default:return o=this.first.compileToFragments(e,Y),l=this.second.compileToFragments(e,Y),a=[].concat(o,this.makeCode(\" \"+this.operator+\" \"),l),e.level<=Y?a:this.wrapInParentheses(a)}}},{key:\"compileChain\",value:function compileChain(e){var a=this.first.second.cache(e),t=_slicedToArray(a,2),o,n,r;return this.first.second=t[0],r=t[1],n=this.first.compileToFragments(e,Y),o=n.concat(this.makeCode(\" \"+(this.invert?\"&&\":\"||\")+\" \"),r.compileToFragments(e),this.makeCode(\" \"+this.operator+\" \"),this.second.compileToFragments(e,Y)),this.wrapInParentheses(o)}},{key:\"compileExistence\",value:function compileExistence(e,a){var t,o;return this.first.shouldCache()?(o=new R(e.scope.freeVariable(\"ref\")),t=new de(new d(o,this.first))):(t=this.first,o=t),new O(new T(t,a),o,{type:\"if\"}).addElse(this.second).compileToFragments(e)}},{key:\"compileUnary\",value:function compileUnary(e){var a,t,o;return(t=[],a=this.operator,t.push([this.makeCode(a)]),\"!\"===a&&this.first instanceof T)?(this.first.negated=!this.first.negated,this.first.compileToFragments(e)):e.level>=H?new de(this).compileToFragments(e):(o=\"+\"===a||\"-\"===a,(\"new\"===a||\"typeof\"===a||\"delete\"===a||o&&this.first instanceof n&&this.first.operator===a)&&t.push([this.makeCode(\" \")]),(o&&this.first instanceof n||\"new\"===a&&this.first.isStatement(e))&&(this.first=new de(this.first)),t.push(this.first.compileToFragments(e,Y)),this.flip&&t.reverse(),this.joinFragmentArrays(t,\"\"))}},{key:\"compileContinuation\",value:function compileContinuation(e){var t,o,n,r;return o=[],t=this.operator,null==e.scope.parent&&this.error(this.operator+\" can only occur inside functions\"),(null==(n=e.scope.method)?void 0:n.bound)&&e.scope.method.isGenerator&&this.error(\"yield cannot occur inside bound (fat arrow) functions\"),0<=a.call(Object.keys(this.first),\"expression\")&&!(this.first instanceof Se)?null!=this.first.expression&&o.push(this.first.expression.compileToFragments(e,Y)):(e.level>=q&&o.push([this.makeCode(\"(\")]),o.push([this.makeCode(t)]),\"\"!==(null==(r=this.first.base)?void 0:r.value)&&o.push([this.makeCode(\" \")]),o.push(this.first.compileToFragments(e,Y)),e.level>=q&&o.push([this.makeCode(\")\")])),this.joinFragmentArrays(o,\"\")}},{key:\"compilePower\",value:function compilePower(e){var a;return a=new Le(new R(\"Math\"),[new r(new pe(\"pow\"))]),new u(a,[this.first,this.second]).compileToFragments(e)}},{key:\"compileFloorDivision\",value:function compileFloorDivision(e){var a,t,o;return t=new Le(new R(\"Math\"),[new r(new pe(\"floor\"))]),o=this.second.shouldCache()?new de(this.second):this.second,a=new n(\"/\",this.first,o),new u(t,[a]).compileToFragments(e)}},{key:\"compileModulo\",value:function compileModulo(e){var a;return a=new Le(new K(sa(\"modulo\",e))),new u(a,[this.first,this.second]).compileToFragments(e)}},{key:\"toString\",value:function toString(e){return _get(n.prototype.__proto__||Object.getPrototypeOf(n.prototype),\"toString\",this).call(this,e,this.constructor.name+\" \"+this.operator)}}]),n}(l),t,o;return t={\"==\":\"===\",\"!=\":\"!==\",of:\"in\",yieldfrom:\"yield*\"},o={\"!==\":\"===\",\"===\":\"!==\"},e.prototype.children=[\"first\",\"second\"],e}.call(this),e.In=U=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return o.object=e,o.array=t,o}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r;if(this.array instanceof Le&&this.array.isArray()&&this.array.base.objects.length){for(r=this.array.base.objects,t=0,o=r.length;t<o;t++)if(n=r[t],!!(n instanceof Te)){a=!0;break}if(!a)return this.compileOrTest(e)}return this.compileLoopTest(e)}},{key:\"compileOrTest\",value:function compileOrTest(e){var a=this.object.cache(e,Y),t=_slicedToArray(a,2),o,n,r,l,s,i,d,c,p,u;p=t[0],d=t[1];var m=this.negated?[\" !== \",\" && \"]:[\" === \",\" || \"],h=_slicedToArray(m,2);for(o=h[0],n=h[1],u=[],c=this.array.base.objects,r=s=0,i=c.length;s<i;r=++s)l=c[r],r&&u.push(this.makeCode(n)),u=u.concat(r?d:p,this.makeCode(o),l.compileToFragments(e,H));return e.level<Y?u:this.wrapInParentheses(u)}},{key:\"compileLoopTest\",value:function compileLoopTest(e){var a=this.object.cache(e,X),t=_slicedToArray(a,2),o,n,r;return(r=t[0],n=t[1],o=[].concat(this.makeCode(sa(\"indexOf\",e)+\".call(\"),this.array.compileToFragments(e,X),this.makeCode(\", \"),n,this.makeCode(\") \"+(this.negated?\"< 0\":\">= 0\"))),We(r)===We(n))?o:(o=r.concat(this.makeCode(\", \"),o),e.level<X?o:this.wrapInParentheses(o))}},{key:\"toString\",value:function toString(e){return _get(a.prototype.__proto__||Object.getPrototypeOf(a.prototype),\"toString\",this).call(this,e,this.constructor.name+(this.negated?\"!\":\"\"))}}]),a}(l);return e.prototype.children=[\"object\",\"array\"],e.prototype.invert=ae,e}.call(this),e.Try=Ae=function(){var e=function(e){function a(e,t,o,n){_classCallCheck(this,a);var r=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return r.attempt=e,r.errorVariable=t,r.recovery=o,r.ensure=n,r}return _inherits(a,e),_createClass(a,[{key:\"jumps\",value:function jumps(e){var a;return this.attempt.jumps(e)||(null==(a=this.recovery)?void 0:a.jumps(e))}},{key:\"makeReturn\",value:function makeReturn(e){return this.attempt&&(this.attempt=this.attempt.makeReturn(e)),this.recovery&&(this.recovery=this.recovery.makeReturn(e)),this}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l;return e.indent+=De,l=this.attempt.compileToFragments(e,z),a=this.recovery?(o=e.scope.freeVariable(\"error\",{reserve:!1}),r=new R(o),this.errorVariable?(n=Je(this.errorVariable.unwrapAll().value),n?this.errorVariable.error(n):void 0,this.recovery.unshift(new d(this.errorVariable,r))):void 0,[].concat(this.makeCode(\" catch (\"),r.compileToFragments(e),this.makeCode(\") {\\n\"),this.recovery.compileToFragments(e,z),this.makeCode(\"\\n\"+this.tab+\"}\"))):this.ensure||this.recovery?[]:(o=e.scope.freeVariable(\"error\",{reserve:!1}),[this.makeCode(\" catch (\"+o+\") {}\")]),t=this.ensure?[].concat(this.makeCode(\" finally {\\n\"),this.ensure.compileToFragments(e,z),this.makeCode(\"\\n\"+this.tab+\"}\")):[],[].concat(this.makeCode(this.tab+\"try {\\n\"),l,this.makeCode(\"\\n\"+this.tab+\"}\"),a,t)}}]),a}(l);return e.prototype.children=[\"attempt\",\"recovery\",\"ensure\"],e.prototype.isStatement=we,e}.call(this),e.Throw=Se=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.expression=e,t}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a;return a=this.expression.compileToFragments(e,X),la(a,this.makeCode(\"throw \")),a.unshift(this.makeCode(this.tab)),a.push(this.makeCode(\";\")),a}}]),a}(l);return e.prototype.children=[\"expression\"],e.prototype.isStatement=we,e.prototype.jumps=te,e.prototype.makeReturn=Ee,e}.call(this),e.Existence=T=function(){var e=function(e){function t(e){var o=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1];_classCallCheck(this,t);var n=_possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)),r;return n.expression=e,n.comparisonTarget=o?\"undefined\":\"null\",r=[],n.expression.traverseChildren(!0,function(e){var t,o,n,l;if(e.comments){for(l=e.comments,o=0,n=l.length;o<n;o++)t=l[o],0>a.call(r,t)&&r.push(t);return delete e.comments}}),Me(r,n),Qe(n.expression,n),n}return _inherits(t,e),_createClass(t,[{key:\"compileNode\",value:function compileNode(e){var a,t,o;if(this.expression.front=this.front,o=this.expression.compile(e,Y),this.expression.unwrap()instanceof R&&!e.scope.check(o)){var n=this.negated?[\"===\",\"||\"]:[\"!==\",\"&&\"],r=_slicedToArray(n,2);a=r[0],t=r[1],o=\"typeof \"+o+\" \"+a+' \"undefined\"'+(\"undefined\"===this.comparisonTarget?\"\":\" \"+t+\" \"+o+\" \"+a+\" \"+this.comparisonTarget)}else a=\"null\"===this.comparisonTarget?this.negated?\"==\":\"!=\":this.negated?\"===\":\"!==\",o=o+\" \"+a+\" \"+this.comparisonTarget;return[this.makeCode(e.level<=W?o:\"(\"+o+\")\")]}}]),t}(l);return e.prototype.children=[\"expression\"],e.prototype.invert=ae,e}.call(this),e.Parens=de=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.body=e,t}return _inherits(a,e),_createClass(a,[{key:\"unwrap\",value:function unwrap(){return this.body}},{key:\"shouldCache\",value:function shouldCache(){return this.body.shouldCache()}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r;return(t=this.body.unwrap(),r=null==(n=t.comments)?void 0:n.some(function(e){return e.here&&!e.unshift&&!e.newLine}),t instanceof Le&&t.isAtomic()&&!this.csxAttribute&&!r)?(t.front=this.front,t.compileToFragments(e)):(o=t.compileToFragments(e,q),a=e.level<Y&&!r&&(t instanceof se||t.unwrap()instanceof u||t instanceof x&&t.returns)&&(e.level<W||3>=o.length),this.csxAttribute?this.wrapInBraces(o):a?o:this.wrapInParentheses(o))}}]),a}(l);return e.prototype.children=[\"body\"],e}.call(this),e.StringWithInterpolations=be=function(){var e=function(e){function a(e){_classCallCheck(this,a);var t=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.body=e,t}return _inherits(a,e),_createClass(a,[{key:\"unwrap\",value:function unwrap(){return this}},{key:\"shouldCache\",value:function shouldCache(){return this.body.shouldCache()}},{key:\"compileNode\",value:function compileNode(e){var t,o,n,r,l,s,i,d,c;if(this.csxAttribute)return c=new de(new a(this.body)),c.csxAttribute=!0,c.compileNode(e);for(r=this.body.unwrap(),n=[],d=[],r.traverseChildren(!1,function(e){var a,t,o,r,l,s;if(e instanceof ve){if(e.comments){var i;(i=d).push.apply(i,_toConsumableArray(e.comments)),delete e.comments}return n.push(e),!0}if(e instanceof de){if(0!==d.length){for(t=0,r=d.length;t<r;t++)a=d[t],a.unshift=!0,a.newLine=!0;Me(d,e)}return n.push(e),!1}if(e.comments){if(0!==n.length&&!(n[n.length-1]instanceof ve)){for(s=e.comments,o=0,l=s.length;o<l;o++)a=s[o],a.unshift=!1,a.newLine=!0;Me(e.comments,n[n.length-1])}else{var c;(c=d).push.apply(c,_toConsumableArray(e.comments))}delete e.comments}return!0}),l=[],this.csx||l.push(this.makeCode(\"`\")),s=0,i=n.length;s<i;s++)if(o=n[s],o instanceof ve){var p;o.value=o.unquote(!0,this.csx),this.csx||(o.value=o.value.replace(/(\\\\*)(`|\\$\\{)/g,function(e,a,t){return 0==a.length%2?a+\"\\\\\"+t:e})),(p=l).push.apply(p,_toConsumableArray(o.compileToFragments(e)))}else{var u;this.csx||l.push(this.makeCode(\"$\")),t=o.compileToFragments(e,q),(!this.isNestedTag(o)||t.some(function(e){return null!=e.comments}))&&(t=this.wrapInBraces(t),t[0].isStringWithInterpolations=!0,t[t.length-1].isStringWithInterpolations=!0),(u=l).push.apply(u,_toConsumableArray(t))}return this.csx||l.push(this.makeCode(\"`\")),l}},{key:\"isNestedTag\",value:function isNestedTag(e){var a,t,o;return t=null==(o=e.body)?void 0:o.expressions,a=null==t?void 0:t[0].unwrap(),this.csx&&t&&1===t.length&&a instanceof u&&a.csx}}]),a}(l);return e.prototype.children=[\"body\"],e}.call(this),e.For=x=function(){var e=function(e){function a(e,t){_classCallCheck(this,a);var o=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this)),n,r,l,s,i,d;if(o.source=t.source,o.guard=t.guard,o.step=t.step,o.name=t.name,o.index=t.index,o.body=c.wrap([e]),o.own=null!=t.own,o.object=null!=t.object,o.from=null!=t.from,o.from&&o.index&&o.index.error(\"cannot use index with for-from\"),o.own&&!o.object&&t.ownTag.error(\"cannot use own with for-\"+(o.from?\"from\":\"in\")),o.object){var p=[o.index,o.name];o.name=p[0],o.index=p[1]}for(((null==(s=o.index)?void 0:\"function\"==typeof s.isArray?s.isArray():void 0)||(null==(i=o.index)?void 0:\"function\"==typeof i.isObject?i.isObject():void 0))&&o.index.error(\"index cannot be a pattern matching expression\"),o.range=o.source instanceof Le&&o.source.base instanceof ue&&!o.source.properties.length&&!o.from,o.pattern=o.name instanceof Le,o.range&&o.index&&o.index.error(\"indexes do not apply to range loops\"),o.range&&o.pattern&&o.name.error(\"cannot pattern match over range loops\"),o.returns=!1,d=[\"source\",\"guard\",\"step\",\"name\",\"index\"],r=0,l=d.length;r<l;r++)(n=d[r],!!o[n])&&(o[n].traverseChildren(!0,function(e){var a,t,r,l;if(e.comments){for(l=e.comments,t=0,r=l.length;t<r;t++)a=l[t],a.newLine=a.unshift=!0;return Qe(e,o[n])}}),Qe(o[n],o));return o}return _inherits(a,e),_createClass(a,[{key:\"compileNode\",value:function compileNode(e){var a,t,o,r,l,s,i,p,u,m,h,g,f,y,k,T,N,v,b,$,_,C,D,E,x,I,S,A,L,F,w,P,j,M,U;if(o=c.wrap([this.body]),x=o.expressions,a=n.call(x,-1),t=_slicedToArray(a,1),$=t[0],a,(null==$?void 0:$.jumps())instanceof ge&&(this.returns=!1),F=this.range?this.source.base:this.source,L=e.scope,this.pattern||(C=this.name&&this.name.compile(e,X)),T=this.index&&this.index.compile(e,X),C&&!this.pattern&&L.find(C),T&&!(this.index instanceof Le)&&L.find(T),this.returns&&(A=L.freeVariable(\"results\")),this.from?this.pattern&&(N=L.freeVariable(\"x\",{single:!0})):N=this.object&&T||L.freeVariable(\"i\",{single:!0}),v=(this.range||this.from)&&C||T||N,b=v===N?\"\":v+\" = \",this.step&&!this.range){var V=this.cacheToCodeFragments(this.step.cache(e,X,aa)),B=_slicedToArray(V,2);w=B[0],j=B[1],this.step.isNumber()&&(P=+j)}return this.pattern&&(C=N),U=\"\",f=\"\",u=\"\",y=this.tab+De,this.range?h=F.compileToFragments(Ze(e,{index:N,name:C,step:this.step,shouldCache:aa})):(M=this.source.compile(e,X),(C||this.own)&&!(this.source.unwrap()instanceof R)&&(u+=\"\"+this.tab+(E=L.freeVariable(\"ref\"))+\" = \"+M+\";\\n\",M=E),C&&!this.pattern&&!this.from&&(D=C+\" = \"+M+\"[\"+v+\"]\"),!this.object&&!this.from&&(w!==j&&(u+=\"\"+this.tab+w+\";\\n\"),m=0>P,!(this.step&&null!=P&&m)&&(_=L.freeVariable(\"len\")),i=\"\"+b+N+\" = 0, \"+_+\" = \"+M+\".length\",p=\"\"+b+N+\" = \"+M+\".length - 1\",l=N+\" < \"+_,s=N+\" >= 0\",this.step?(null==P?(l=j+\" > 0 ? \"+l+\" : \"+s,i=\"(\"+j+\" > 0 ? (\"+i+\") : \"+p+\")\"):m&&(l=s,i=p),k=N+\" += \"+j):k=\"\"+(v===N?N+\"++\":\"++\"+N),h=[this.makeCode(i+\"; \"+l+\"; \"+b+k)])),this.returns&&(I=\"\"+this.tab+A+\" = [];\\n\",S=\"\\n\"+this.tab+\"return \"+A+\";\",o.makeReturn(A)),this.guard&&(1<o.expressions.length?o.expressions.unshift(new O(new de(this.guard).invert(),new Ne(\"continue\"))):this.guard&&(o=c.wrap([new O(this.guard,o)]))),this.pattern&&o.expressions.unshift(new d(this.name,this.from?new R(v):new K(M+\"[\"+v+\"]\"))),D&&(U=\"\\n\"+y+D+\";\"),this.object?(h=[this.makeCode(v+\" in \"+M)],this.own&&(f=\"\\n\"+y+\"if (!\"+sa(\"hasProp\",e)+\".call(\"+M+\", \"+v+\")) continue;\")):this.from&&(h=[this.makeCode(v+\" of \"+M)]),r=o.compileToFragments(Ze(e,{indent:y}),z),r&&0<r.length&&(r=[].concat(this.makeCode(\"\\n\"),r,this.makeCode(\"\\n\"))),g=[this.makeCode(u)],I&&g.push(this.makeCode(I)),g=g.concat(this.makeCode(this.tab),this.makeCode(\"for (\"),h,this.makeCode(\") {\"+f+U),r,this.makeCode(this.tab),this.makeCode(\"}\")),S&&g.push(this.makeCode(S)),g}}]),a}(Fe);return e.prototype.children=[\"body\",\"source\",\"guard\",\"step\"],e}.call(this),e.Switch=Ce=function(){var e=function(e){function a(e,t,o){_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return n.subject=e,n.cases=t,n.otherwise=o,n}return _inherits(a,e),_createClass(a,[{key:\"jumps\",value:function jumps(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{block:!0},a,t,o,n,r,l,s;for(l=this.cases,o=0,r=l.length;o<r;o++){var i=_slicedToArray(l[o],2);if(t=i[0],a=i[1],n=a.jumps(e))return n}return null==(s=this.otherwise)?void 0:s.jumps(e)}},{key:\"makeReturn\",value:function makeReturn(e){var a,t,o,n,r;for(n=this.cases,a=0,t=n.length;a<t;a++)o=n[a],o[1].makeReturn(e);return e&&(this.otherwise||(this.otherwise=new c([new K(\"void 0\")]))),null!=(r=this.otherwise)&&r.makeReturn(e),this}},{key:\"compileNode\",value:function compileNode(e){var a,t,o,n,r,l,s,i,d,c,p,u,m,h,g;for(i=e.indent+De,d=e.indent=i+De,l=[].concat(this.makeCode(this.tab+\"switch (\"),this.subject?this.subject.compileToFragments(e,q):this.makeCode(\"false\"),this.makeCode(\") {\\n\")),h=this.cases,s=c=0,u=h.length;c<u;s=++c){var f=_slicedToArray(h[s],2);for(n=f[0],a=f[1],g=He([n]),p=0,m=g.length;p<m;p++)o=g[p],this.subject||(o=o.invert()),l=l.concat(this.makeCode(i+\"case \"),o.compileToFragments(e,q),this.makeCode(\":\\n\"));if(0<(t=a.compileToFragments(e,z)).length&&(l=l.concat(t,this.makeCode(\"\\n\"))),s===this.cases.length-1&&!this.otherwise)break;(r=this.lastNode(a.expressions),!(r instanceof ge||r instanceof Se||r instanceof K&&r.jumps()&&\"debugger\"!==r.value))&&l.push(o.makeCode(d+\"break;\\n\"))}if(this.otherwise&&this.otherwise.expressions.length){var y;(y=l).push.apply(y,[this.makeCode(i+\"default:\\n\")].concat(_toConsumableArray(this.otherwise.compileToFragments(e,z)),[this.makeCode(\"\\n\")]))}return l.push(this.makeCode(this.tab+\"}\")),l}}]),a}(l);return e.prototype.children=[\"subject\",\"cases\",\"otherwise\"],e.prototype.isStatement=we,e}.call(this),e.If=O=function(){var e=function(e){function a(e,t){var o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};_classCallCheck(this,a);var n=_possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return n.body=t,n.condition=\"unless\"===o.type?e.invert():e,n.elseBody=null,n.isChain=!1,n.soak=o.soak,n.condition.comments&&Qe(n.condition,n),n}return _inherits(a,e),_createClass(a,[{key:\"bodyNode\",value:function bodyNode(){var e;return null==(e=this.body)?void 0:e.unwrap()}},{key:\"elseBodyNode\",value:function elseBodyNode(){var e;return null==(e=this.elseBody)?void 0:e.unwrap()}},{key:\"addElse\",value:function addElse(e){return this.isChain?this.elseBodyNode().addElse(e):(this.isChain=e instanceof a,this.elseBody=this.ensureBlock(e),this.elseBody.updateLocationDataIfMissing(e.locationData)),this}},{key:\"isStatement\",value:function isStatement(e){var a;return(null==e?void 0:e.level)===z||this.bodyNode().isStatement(e)||(null==(a=this.elseBodyNode())?void 0:a.isStatement(e))}},{key:\"jumps\",value:function jumps(e){var a;return this.body.jumps(e)||(null==(a=this.elseBody)?void 0:a.jumps(e))}},{key:\"compileNode\",value:function compileNode(e){return this.isStatement(e)?this.compileStatement(e):this.compileExpression(e)}},{key:\"makeReturn\",value:function makeReturn(e){return e&&(this.elseBody||(this.elseBody=new c([new K(\"void 0\")]))),this.body&&(this.body=new c([this.body.makeReturn(e)])),this.elseBody&&(this.elseBody=new c([this.elseBody.makeReturn(e)])),this}},{key:\"ensureBlock\",value:function ensureBlock(e){return e instanceof c?e:new c([e])}},{key:\"compileStatement\",value:function compileStatement(e){var t,o,n,r,l,s,i;return(n=Ve(e,\"chainChild\"),l=Ve(e,\"isExistentialEquals\"),l)?new a(this.condition.invert(),this.elseBodyNode(),{type:\"if\"}).compileToFragments(e):(i=e.indent+De,r=this.condition.compileToFragments(e,q),o=this.ensureBlock(this.body).compileToFragments(Ze(e,{indent:i})),s=[].concat(this.makeCode(\"if (\"),r,this.makeCode(\") {\\n\"),o,this.makeCode(\"\\n\"+this.tab+\"}\")),n||s.unshift(this.makeCode(this.tab)),!this.elseBody)?s:(t=s.concat(this.makeCode(\" else \")),this.isChain?(e.chainChild=!0,t=t.concat(this.elseBody.unwrap().compileToFragments(e,z))):t=t.concat(this.makeCode(\"{\\n\"),this.elseBody.compileToFragments(Ze(e,{indent:i}),z),this.makeCode(\"\\n\"+this.tab+\"}\")),t)}},{key:\"compileExpression\",value:function compileExpression(e){var a,t,o,n;return o=this.condition.compileToFragments(e,W),t=this.bodyNode().compileToFragments(e,X),a=this.elseBodyNode()?this.elseBodyNode().compileToFragments(e,X):[this.makeCode(\"void 0\")],n=o.concat(this.makeCode(\" ? \"),t,this.makeCode(\" : \"),a),e.level>=W?this.wrapInParentheses(n):n}},{key:\"unfoldSoak\",value:function unfoldSoak(){return this.soak&&this}}]),a}(l);return e.prototype.children=[\"condition\",\"body\",\"elseBody\"],e}.call(this),Re={modulo:function modulo(){return\"function(a, b) { return (+a % (b = +b) + b) % b; }\"},objectWithoutKeys:function objectWithoutKeys(){return\"function(o, ks) { var res = {}; for (var k in o) ([].indexOf.call(ks, k) < 0 && {}.hasOwnProperty.call(o, k)) && (res[k] = o[k]); return res; }\"},boundMethodCheck:function boundMethodCheck(){return\"function(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new Error('Bound instance method accessed before binding'); } }\"},_extends:function _extends(){return\"Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }\"},hasProp:function hasProp(){return\"{}.hasOwnProperty\"},indexOf:function(){return\"[].indexOf\"},slice:function slice(){return\"[].slice\"},splice:function(){return\"[].splice\"}},z=1,q=2,X=3,W=4,Y=5,H=6,De=\"  \",fe=/^[+-]?\\d+$/,sa=function(e,a){var t,o;return o=a.scope.root,e in o.utilities?o.utilities[e]:(t=o.freeVariable(e),o.assign(t,Re[e](a)),o.utilities[e]=t)},ea=function(e,a){var t=!(2<arguments.length&&void 0!==arguments[2])||arguments[2],o;return o=\"\\n\"===e[e.length-1],e=(t?a:\"\")+e.replace(/\\n/g,\"$&\"+a),e=e.replace(/\\s+$/,\"\"),o&&(e+=\"\\n\"),e},Ye=function(e,a){var t,o,n,r;for(o=n=0,r=e.length;n<r;o=++n)if(t=e[o],t.isHereComment)t.code=ea(t.code,a.tab);else{e.splice(o,0,a.makeCode(\"\"+a.tab));break}return e},Xe=function(e){var a,t,o,n;if(!e.comments)return!1;for(n=e.comments,t=0,o=n.length;t<o;t++)if(a=n[t],!1===a.here)return!0;return!1},Qe=function(e,a){if(null!=e&&e.comments)return Me(e.comments,a),delete e.comments},la=function(e,a){var t,o,n,r,l;for(n=!1,o=r=0,l=e.length;r<l;o=++r)if(t=e[o],!!!t.isComment){e.splice(o,0,a),n=!0;break}return n||e.push(a),e},qe=function(e){return e instanceof R&&\"arguments\"===e.value},ze=function(e){return e instanceof Ie||e instanceof h&&e.bound},aa=function(e){return e.shouldCache()||(\"function\"==typeof e.isAssignable?e.isAssignable():void 0)},ra=function(e,a,t){var o;if(o=a[t].unfoldSoak(e))return a[t]=o.body,o.body=new Le(a),o}}.call(this),{exports:e}.exports}(),require[\"./sourcemap\"]=function(){var e={exports:{}};return function(){var a,t;a=function(){function e(a){_classCallCheck(this,e),this.line=a,this.columns=[]}return _createClass(e,[{key:\"add\",value:function add(e,a){var t=_slicedToArray(a,2),o=t[0],n=t[1],r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return this.columns[e]&&r.noReplace?void 0:this.columns[e]={line:this.line,column:e,sourceLine:o,sourceColumn:n}}},{key:\"sourceLocation\",value:function sourceLocation(e){for(var a;!((a=this.columns[e])||0>=e);)e--;return a&&[a.sourceLine,a.sourceColumn]}}]),e}(),t=function(){var e=function(){function e(){_classCallCheck(this,e),this.lines=[]}return _createClass(e,[{key:\"add\",value:function add(e,t){var o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},n=_slicedToArray(t,2),r,l,s,i;return s=n[0],l=n[1],i=(r=this.lines)[s]||(r[s]=new a(s)),i.add(l,e,o)}},{key:\"sourceLocation\",value:function sourceLocation(e){for(var a=_slicedToArray(e,2),t=a[0],o=a[1],n;!((n=this.lines[t])||0>=t);)t--;return n&&n.sourceLocation(o)}},{key:\"generate\",value:function generate(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:null,t,o,n,r,l,s,i,d,c,p,u,m,h,g,f,y,k;for(k=0,r=0,s=0,l=0,m=!1,t=\"\",h=this.lines,p=o=0,i=h.length;o<i;p=++o)if(c=h[p],c)for(g=c.columns,n=0,d=g.length;n<d;n++)if(u=g[n],!!u){for(;k<u.line;)r=0,m=!1,t+=\";\",k++;m&&(t+=\",\",m=!1),t+=this.encodeVlq(u.column-r),r=u.column,t+=this.encodeVlq(0),t+=this.encodeVlq(u.sourceLine-s),s=u.sourceLine,t+=this.encodeVlq(u.sourceColumn-l),l=u.sourceColumn,m=!0}return f=e.sourceFiles?e.sourceFiles:e.filename?[e.filename]:[\"<anonymous>\"],y={version:3,file:e.generatedFile||\"\",sourceRoot:e.sourceRoot||\"\",sources:f,names:[],mappings:t},(e.sourceMap||e.inlineMap)&&(y.sourcesContent=[a]),y}},{key:\"encodeVlq\",value:function encodeVlq(e){var a,t,l,s;for(a=\"\",l=0>e?1:0,s=(_Mathabs(e)<<1)+l;s||!a;)t=s&r,s>>=n,s&&(t|=o),a+=this.encodeBase64(t);return a}},{key:\"encodeBase64\",value:function encodeBase64(e){return t[e]||function(){throw new Error(\"Cannot Base64 encode value: \"+e)}()}}]),e}(),t,o,n,r;return n=5,o=1<<n,r=o-1,t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",e}.call(this),e.exports=t}.call(this),e.exports}(),require[\"./coffeescript\"]=function(){var e={};return function(){var a=[].indexOf,t=require(\"./lexer\"),o,n,r,l,s,d,c,i,p,u,m,h,g,f,y;n=t.Lexer;var k=require(\"./parser\");h=k.parser,p=require(\"./helpers\"),r=require(\"./sourcemap\"),m=require(\"../../package.json\"),e.VERSION=m.version,e.FILE_EXTENSIONS=o=[\".coffee\",\".litcoffee\",\".coffee.md\"],e.helpers=p,l=function(e){switch(!1){case\"function\"!=typeof Buffer:return Buffer.from(e).toString(\"base64\");case\"function\"!=typeof btoa:return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,function(e,a){return _StringfromCharCode(\"0x\"+a)}));default:throw new Error(\"Unable to base64 encode inline sourcemap.\")}},y=function(e){return function(a){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},o;try{return e.call(this,a,t)}catch(e){if(o=e,\"string\"!=typeof a)throw o;throw p.updateSyntaxError(o,a,t.filename)}}},f={},g={},e.compile=d=y(function(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},t,o,n,d,c,m,y,k,T,i,N,v,b,$,_,C,D,E,x,I,S,A,R,O,L;if(a=Object.assign({},a),y=a.sourceMap||a.inlineMap||null==a.filename,d=a.filename||\"<anonymous>\",s(d,e),null==f[d]&&(f[d]=[]),f[d].push(e),y&&($=new r),S=u.tokenize(e,a),a.referencedVars=function(){var e,a,t;for(t=[],e=0,a=S.length;e<a;e++)I=S[e],\"IDENTIFIER\"===I[0]&&t.push(I[1]);return t}(),null==a.bare||!0!==a.bare)for(T=0,v=S.length;T<v;T++)if(I=S[T],\"IMPORT\"===(C=I[0])||\"EXPORT\"===C){a.bare=!0;break}for(m=h.parse(S).compileToFragments(a),o=0,a.header&&(o+=1),a.shiftLine&&(o+=1),t=0,N=\"\",i=0,b=m.length;i<b;i++)c=m[i],y&&(c.locationData&&!/^[;\\s]*$/.test(c.code)&&$.add([c.locationData.first_line,c.locationData.first_column],[o,t],{noReplace:!0}),_=p.count(c.code,\"\\n\"),o+=_,_?t=c.code.length-(c.code.lastIndexOf(\"\\n\")+1):t+=c.code.length),N+=c.code;if(a.header&&(k=\"Generated by CoffeeScript \"+this.VERSION,N=\"// \"+k+\"\\n\"+N),y&&(L=$.generate(a,e),null==g[d]&&(g[d]=[]),g[d].push($)),a.transpile){if(\"object\"!==_typeof(a.transpile))throw new Error(\"The transpile option must be given an object with options to pass to Babel\");A=a.transpile.transpile,delete a.transpile.transpile,R=Object.assign({},a.transpile),L&&null==R.inputSourceMap&&(R.inputSourceMap=L),O=A(N,R),N=O.code,L&&O.map&&(L=O.map)}return a.inlineMap&&(n=l(JSON.stringify(L)),E=\"//# sourceMappingURL=data:application/json;base64,\"+n,x=\"//# sourceURL=\"+(null==(D=a.filename)?\"coffeescript\":D),N=N+\"\\n\"+E+\"\\n\"+x),a.sourceMap?{js:N,sourceMap:$,v3SourceMap:JSON.stringify(L,null,2)}:N}),e.tokens=y(function(e,a){return u.tokenize(e,a)}),e.nodes=y(function(e,a){return\"string\"==typeof e?h.parse(u.tokenize(e,a)):h.parse(e)}),e.run=e.eval=e.register=function(){throw new Error(\"require index.coffee, not this file\")},u=new n,h.lexer={lex:function lex(){var e,a;if(a=h.tokens[this.pos++],a){var t=a,o=_slicedToArray(t,3);e=o[0],this.yytext=o[1],this.yylloc=o[2],h.errorToken=a.origin||a,this.yylineno=this.yylloc.first_line}else e=\"\";return e},setInput:function setInput(e){return h.tokens=e,this.pos=0},upcomingInput:function upcomingInput(){return\"\"}},h.yy=require(\"./nodes\"),h.yy.parseError=function(e,a){var t=a.token,o=h,n,r,l,s,i;s=o.errorToken,i=o.tokens;var d=s,c=_slicedToArray(d,3);return r=c[0],l=c[1],n=c[2],l=function(){switch(!1){case s!==i[i.length-1]:return\"end of input\";case\"INDENT\"!==r&&\"OUTDENT\"!==r:return\"indentation\";case\"IDENTIFIER\"!==r&&\"NUMBER\"!==r&&\"INFINITY\"!==r&&\"STRING\"!==r&&\"STRING_START\"!==r&&\"REGEX\"!==r&&\"REGEX_START\"!==r:return r.replace(/_START$/,\"\").toLowerCase();default:return p.nameWhitespaceCharacter(l)}}(),p.throwSyntaxError(\"unexpected \"+l,n)},c=function(e,a){var t,o,n,r,l,s,i,d,c,p,u,m;return r=void 0,n=\"\",e.isNative()?n=\"native\":(e.isEval()?(r=e.getScriptNameOrSourceURL(),!r&&(n=e.getEvalOrigin()+\", \")):r=e.getFileName(),r||(r=\"<anonymous>\"),d=e.getLineNumber(),o=e.getColumnNumber(),p=a(r,d,o),n=p?r+\":\"+p[0]+\":\"+p[1]:r+\":\"+d+\":\"+o),l=e.getFunctionName(),s=e.isConstructor(),i=!(e.isToplevel()||s),i?(c=e.getMethodName(),m=e.getTypeName(),l?(u=t=\"\",m&&l.indexOf(m)&&(u=m+\".\"),c&&l.indexOf(\".\"+c)!==l.length-c.length-1&&(t=\" [as \"+c+\"]\"),\"\"+u+l+t+\" (\"+n+\")\"):m+\".\"+(c||\"<anonymous>\")+\" (\"+n+\")\"):s?\"new \"+(l||\"<anonymous>\")+\" (\"+n+\")\":l?l+\" (\"+n+\")\":n},i=function(e,t,n){var r,l,s,i,c,u;if(!(\"<anonymous>\"===e||(i=e.slice(e.lastIndexOf(\".\")),0<=a.call(o,i))))return null;if(\"<anonymous>\"!==e&&null!=g[e])return g[e][g[e].length-1];if(null!=g[\"<anonymous>\"])for(c=g[\"<anonymous>\"],l=c.length-1;0<=l;l+=-1)if(s=c[l],u=s.sourceLocation([t-1,n-1]),null!=(null==u?void 0:u[0])&&null!=u[1])return s;return null==f[e]?null:(r=d(f[e][f[e].length-1],{filename:e,sourceMap:!0,literate:p.isLiterate(e)}),r.sourceMap)},Error.prepareStackTrace=function(a,t){var o,n,r;return r=function(e,a,t){var o,n;return n=i(e,a,t),null!=n&&(o=n.sourceLocation([a-1,t-1])),null==o?null:[o[0]+1,o[1]+1]},n=function(){var a,n,l;for(l=[],a=0,n=t.length;a<n&&(o=t[a],o.getFunction()!==e.run);a++)l.push(\"    at \"+c(o,r));return l}(),a.toString()+\"\\n\"+n.join(\"\\n\")+\"\\n\"},s=function(e,a){var t,o,n,r;if(o=a.split(/$/m)[0],r=null==o?void 0:o.match(/^#!\\s*([^\\s]+\\s*)(.*)/),t=null==r||null==(n=r[2])?void 0:n.split(/\\s/).filter(function(e){return\"\"!==e}),1<(null==t?void 0:t.length))return console.error(\"The script to be run begins with a shebang line with more than one\\nargument. This script will fail on platforms such as Linux which only\\nallow a single argument.\"),console.error(\"The shebang line was: '\"+o+\"' in file '\"+e+\"'\"),console.error(\"The arguments were: \"+JSON.stringify(t))}}.call(this),{exports:e}.exports}(),require[\"./browser\"]=function(){var exports={},module={exports:exports};return function(){var indexOf=[].indexOf,CoffeeScript,compile,runScripts;CoffeeScript=require(\"./coffeescript\"),compile=CoffeeScript.compile,CoffeeScript.eval=function(code){var options=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return null==options.bare&&(options.bare=!0),eval(compile(code,options))},CoffeeScript.run=function(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return a.bare=!0,a.shiftLine=!0,Function(compile(e,a))()},module.exports=CoffeeScript,\"undefined\"==typeof window||null===window||(\"undefined\"!=typeof btoa&&null!==btoa&&\"undefined\"!=typeof JSON&&null!==JSON&&(compile=function(e){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return a.inlineMap=!0,CoffeeScript.compile(e,a)}),CoffeeScript.load=function(e,a){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},o=!!(3<arguments.length&&void 0!==arguments[3])&&arguments[3],n;return t.sourceFiles=[e],n=window.ActiveXObject?new window.ActiveXObject(\"Microsoft.XMLHTTP\"):new window.XMLHttpRequest,n.open(\"GET\",e,!0),\"overrideMimeType\"in n&&n.overrideMimeType(\"text/plain\"),n.onreadystatechange=function(){var r,l;if(4===n.readyState){if(0!==(l=n.status)&&200!==l)throw new Error(\"Could not load \"+e);else if(r=[n.responseText,t],!o){var s;(s=CoffeeScript).run.apply(s,_toConsumableArray(r))}if(a)return a(r)}},n.send(null)},runScripts=function(){var e,a,t,o,n,r,l,i,s,d;for(d=window.document.getElementsByTagName(\"script\"),a=[\"text/coffeescript\",\"text/literate-coffeescript\"],e=function(){var e,t,o,n;for(n=[],e=0,t=d.length;e<t;e++)i=d[e],(o=i.type,0<=indexOf.call(a,o))&&n.push(i);return n}(),n=0,t=function execute(){var a;if(a=e[n],a instanceof Array){var o;return(o=CoffeeScript).run.apply(o,_toConsumableArray(a)),n++,t()}},o=r=0,l=e.length;r<l;o=++r)s=e[o],function(o,n){var r,l;return r={literate:o.type===a[1]},l=o.src||o.getAttribute(\"data-src\"),l?(r.filename=l,CoffeeScript.load(l,function(a){return e[n]=a,t()},r,!0)):(r.filename=o.id&&\"\"!==o.id?o.id:\"coffeescript\"+(0===n?\"\":n),r.sourceFiles=[\"embedded\"],e[n]=[o.innerHTML,r])}(s,o);return t()},window.addEventListener?window.addEventListener(\"DOMContentLoaded\",runScripts,!1):window.attachEvent(\"onload\",runScripts))}.call(this),module.exports}(),require[\"./browser\"]}();\"function\"==typeof define&&define.amd?define(function(){return CoffeeScript}):root.CoffeeScript=CoffeeScript})(this);\n});\n\nace.define(\"ace/mode/coffee_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar coffee = require(\"../mode/coffee/coffee\");\n\nwindow.addEventListener = function() {};\n\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(250);\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        try {\n            coffee.compile(value);\n        } catch(e) {\n            var loc = e.location;\n            if (loc) {\n                errors.push({\n                    row: loc.first_line,\n                    column: loc.first_column,\n                    endRow: loc.last_line,\n                    endColumn: loc.last_column,\n                    text: e.message,\n                    type: \"error\"\n                });\n            }\n        }\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n"
  },
  {
    "path": "publishable/assets/js/ace/libs/worker-css.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err && err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err && err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        sender = window.sender = window.initSender();\n        var clazz = this.require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\n\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function () {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    this.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    }\n    else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n    }\n    else {\n        this.insert({ row: 0, column: 0 }, textOrLines);\n    }\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    this.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function (text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    }\n    else {\n        this.$split = function (text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function () {\n        return this.$lines.length;\n    };\n    this.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    this.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    this.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    this.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    this.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    this.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    this.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    this.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    this.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    this.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    this.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                var d, err; \n                if (Array.isArray(data[i+1])) {\n                    d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                \n                if ((d.action == \"insert\" ? d.start : d.end).row >= doc.$lines.length) {\n                    err = new Error(\"Invalid delta\");\n                    err.data = {\n                        path: _self.$path,\n                        linesLength: doc.$lines.length,\n                        start: d.start,\n                        end: d.end\n                    };\n                    throw err;\n                }\n\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/css/csslint\",[], function(require, exports, module) {\n\nvar CSSLint = (function(){\n  var module = module || {},\n      exports = exports || {};\nvar parserlib = (function () {\nvar require;\nrequire=(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n\n\"use strict\";\n\nvar Colors = module.exports = {\n    __proto__               : null,\n    aliceblue               : \"#f0f8ff\",\n    antiquewhite            : \"#faebd7\",\n    aqua                    : \"#00ffff\",\n    aquamarine              : \"#7fffd4\",\n    azure                   : \"#f0ffff\",\n    beige                   : \"#f5f5dc\",\n    bisque                  : \"#ffe4c4\",\n    black                   : \"#000000\",\n    blanchedalmond          : \"#ffebcd\",\n    blue                    : \"#0000ff\",\n    blueviolet              : \"#8a2be2\",\n    brown                   : \"#a52a2a\",\n    burlywood               : \"#deb887\",\n    cadetblue               : \"#5f9ea0\",\n    chartreuse              : \"#7fff00\",\n    chocolate               : \"#d2691e\",\n    coral                   : \"#ff7f50\",\n    cornflowerblue          : \"#6495ed\",\n    cornsilk                : \"#fff8dc\",\n    crimson                 : \"#dc143c\",\n    cyan                    : \"#00ffff\",\n    darkblue                : \"#00008b\",\n    darkcyan                : \"#008b8b\",\n    darkgoldenrod           : \"#b8860b\",\n    darkgray                : \"#a9a9a9\",\n    darkgreen               : \"#006400\",\n    darkgrey                : \"#a9a9a9\",\n    darkkhaki               : \"#bdb76b\",\n    darkmagenta             : \"#8b008b\",\n    darkolivegreen          : \"#556b2f\",\n    darkorange              : \"#ff8c00\",\n    darkorchid              : \"#9932cc\",\n    darkred                 : \"#8b0000\",\n    darksalmon              : \"#e9967a\",\n    darkseagreen            : \"#8fbc8f\",\n    darkslateblue           : \"#483d8b\",\n    darkslategray           : \"#2f4f4f\",\n    darkslategrey           : \"#2f4f4f\",\n    darkturquoise           : \"#00ced1\",\n    darkviolet              : \"#9400d3\",\n    deeppink                : \"#ff1493\",\n    deepskyblue             : \"#00bfff\",\n    dimgray                 : \"#696969\",\n    dimgrey                 : \"#696969\",\n    dodgerblue              : \"#1e90ff\",\n    firebrick               : \"#b22222\",\n    floralwhite             : \"#fffaf0\",\n    forestgreen             : \"#228b22\",\n    fuchsia                 : \"#ff00ff\",\n    gainsboro               : \"#dcdcdc\",\n    ghostwhite              : \"#f8f8ff\",\n    gold                    : \"#ffd700\",\n    goldenrod               : \"#daa520\",\n    gray                    : \"#808080\",\n    green                   : \"#008000\",\n    greenyellow             : \"#adff2f\",\n    grey                    : \"#808080\",\n    honeydew                : \"#f0fff0\",\n    hotpink                 : \"#ff69b4\",\n    indianred               : \"#cd5c5c\",\n    indigo                  : \"#4b0082\",\n    ivory                   : \"#fffff0\",\n    khaki                   : \"#f0e68c\",\n    lavender                : \"#e6e6fa\",\n    lavenderblush           : \"#fff0f5\",\n    lawngreen               : \"#7cfc00\",\n    lemonchiffon            : \"#fffacd\",\n    lightblue               : \"#add8e6\",\n    lightcoral              : \"#f08080\",\n    lightcyan               : \"#e0ffff\",\n    lightgoldenrodyellow    : \"#fafad2\",\n    lightgray               : \"#d3d3d3\",\n    lightgreen              : \"#90ee90\",\n    lightgrey               : \"#d3d3d3\",\n    lightpink               : \"#ffb6c1\",\n    lightsalmon             : \"#ffa07a\",\n    lightseagreen           : \"#20b2aa\",\n    lightskyblue            : \"#87cefa\",\n    lightslategray          : \"#778899\",\n    lightslategrey          : \"#778899\",\n    lightsteelblue          : \"#b0c4de\",\n    lightyellow             : \"#ffffe0\",\n    lime                    : \"#00ff00\",\n    limegreen               : \"#32cd32\",\n    linen                   : \"#faf0e6\",\n    magenta                 : \"#ff00ff\",\n    maroon                  : \"#800000\",\n    mediumaquamarine        : \"#66cdaa\",\n    mediumblue              : \"#0000cd\",\n    mediumorchid            : \"#ba55d3\",\n    mediumpurple            : \"#9370db\",\n    mediumseagreen          : \"#3cb371\",\n    mediumslateblue         : \"#7b68ee\",\n    mediumspringgreen       : \"#00fa9a\",\n    mediumturquoise         : \"#48d1cc\",\n    mediumvioletred         : \"#c71585\",\n    midnightblue            : \"#191970\",\n    mintcream               : \"#f5fffa\",\n    mistyrose               : \"#ffe4e1\",\n    moccasin                : \"#ffe4b5\",\n    navajowhite             : \"#ffdead\",\n    navy                    : \"#000080\",\n    oldlace                 : \"#fdf5e6\",\n    olive                   : \"#808000\",\n    olivedrab               : \"#6b8e23\",\n    orange                  : \"#ffa500\",\n    orangered               : \"#ff4500\",\n    orchid                  : \"#da70d6\",\n    palegoldenrod           : \"#eee8aa\",\n    palegreen               : \"#98fb98\",\n    paleturquoise           : \"#afeeee\",\n    palevioletred           : \"#db7093\",\n    papayawhip              : \"#ffefd5\",\n    peachpuff               : \"#ffdab9\",\n    peru                    : \"#cd853f\",\n    pink                    : \"#ffc0cb\",\n    plum                    : \"#dda0dd\",\n    powderblue              : \"#b0e0e6\",\n    purple                  : \"#800080\",\n    rebeccapurple           : \"#663399\",\n    red                     : \"#ff0000\",\n    rosybrown               : \"#bc8f8f\",\n    royalblue               : \"#4169e1\",\n    saddlebrown             : \"#8b4513\",\n    salmon                  : \"#fa8072\",\n    sandybrown              : \"#f4a460\",\n    seagreen                : \"#2e8b57\",\n    seashell                : \"#fff5ee\",\n    sienna                  : \"#a0522d\",\n    silver                  : \"#c0c0c0\",\n    skyblue                 : \"#87ceeb\",\n    slateblue               : \"#6a5acd\",\n    slategray               : \"#708090\",\n    slategrey               : \"#708090\",\n    snow                    : \"#fffafa\",\n    springgreen             : \"#00ff7f\",\n    steelblue               : \"#4682b4\",\n    tan                     : \"#d2b48c\",\n    teal                    : \"#008080\",\n    thistle                 : \"#d8bfd8\",\n    tomato                  : \"#ff6347\",\n    turquoise               : \"#40e0d0\",\n    violet                  : \"#ee82ee\",\n    wheat                   : \"#f5deb3\",\n    white                   : \"#ffffff\",\n    whitesmoke              : \"#f5f5f5\",\n    yellow                  : \"#ffff00\",\n    yellowgreen             : \"#9acd32\",\n    currentColor            : \"The value of the 'color' property.\",\n    activeborder            : \"Active window border.\",\n    activecaption           : \"Active window caption.\",\n    appworkspace            : \"Background color of multiple document interface.\",\n    background              : \"Desktop background.\",\n    buttonface              : \"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttonhighlight         : \"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttonshadow            : \"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttontext              : \"Text on push buttons.\",\n    captiontext             : \"Text in caption, size box, and scrollbar arrow box.\",\n    graytext                : \"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.\",\n    greytext                : \"Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.\",\n    highlight               : \"Item(s) selected in a control.\",\n    highlighttext           : \"Text of item(s) selected in a control.\",\n    inactiveborder          : \"Inactive window border.\",\n    inactivecaption         : \"Inactive window caption.\",\n    inactivecaptiontext     : \"Color of text in an inactive caption.\",\n    infobackground          : \"Background color for tooltip controls.\",\n    infotext                : \"Text color for tooltip controls.\",\n    menu                    : \"Menu background.\",\n    menutext                : \"Text in menus.\",\n    scrollbar               : \"Scroll bar gray area.\",\n    threeddarkshadow        : \"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedface              : \"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedhighlight         : \"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedlightshadow       : \"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedshadow            : \"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    window                  : \"Window background.\",\n    windowframe             : \"Window frame.\",\n    windowtext              : \"Text in windows.\"\n};\n\n},{}],2:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = Combinator;\n\nvar SyntaxUnit = require(\"../util/SyntaxUnit\");\n\nvar Parser = require(\"./Parser\");\nfunction Combinator(text, line, col) {\n\n    SyntaxUnit.call(this, text, line, col, Parser.COMBINATOR_TYPE);\n    this.type = \"unknown\";\n    if (/^\\s+$/.test(text)) {\n        this.type = \"descendant\";\n    } else if (text === \">\") {\n        this.type = \"child\";\n    } else if (text === \"+\") {\n        this.type = \"adjacent-sibling\";\n    } else if (text === \"~\") {\n        this.type = \"sibling\";\n    }\n\n}\n\nCombinator.prototype = new SyntaxUnit();\nCombinator.prototype.constructor = Combinator;\n\n\n},{\"../util/SyntaxUnit\":26,\"./Parser\":6}],3:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = Matcher;\n\nvar StringReader = require(\"../util/StringReader\");\nvar SyntaxError = require(\"../util/SyntaxError\");\nfunction Matcher(matchFunc, toString) {\n    this.match = function(expression) {\n        var result;\n        expression.mark();\n        result = matchFunc(expression);\n        if (result) {\n            expression.drop();\n        } else {\n            expression.restore();\n        }\n        return result;\n    };\n    this.toString = typeof toString === \"function\" ? toString : function() {\n        return toString;\n    };\n}\nMatcher.prec = {\n    MOD:    5,\n    SEQ:    4,\n    ANDAND: 3,\n    OROR:   2,\n    ALT:    1\n};\nMatcher.parse = function(str) {\n    var reader, eat, expr, oror, andand, seq, mod, term, result;\n    reader = new StringReader(str);\n    eat = function(matcher) {\n        var result = reader.readMatch(matcher);\n        if (result === null) {\n            throw new SyntaxError(\n                \"Expected \" + matcher, reader.getLine(), reader.getCol());\n        }\n        return result;\n    };\n    expr = function() {\n        var m = [ oror() ];\n        while (reader.readMatch(\" | \") !== null) {\n            m.push(oror());\n        }\n        return m.length === 1 ? m[0] : Matcher.alt.apply(Matcher, m);\n    };\n    oror = function() {\n        var m = [ andand() ];\n        while (reader.readMatch(\" || \") !== null) {\n            m.push(andand());\n        }\n        return m.length === 1 ? m[0] : Matcher.oror.apply(Matcher, m);\n    };\n    andand = function() {\n        var m = [ seq() ];\n        while (reader.readMatch(\" && \") !== null) {\n            m.push(seq());\n        }\n        return m.length === 1 ? m[0] : Matcher.andand.apply(Matcher, m);\n    };\n    seq = function() {\n        var m = [ mod() ];\n        while (reader.readMatch(/^ (?![&|\\]])/) !== null) {\n            m.push(mod());\n        }\n        return m.length === 1 ? m[0] : Matcher.seq.apply(Matcher, m);\n    };\n    mod = function() {\n        var m = term();\n        if (reader.readMatch(\"?\") !== null) {\n            return m.question();\n        } else if (reader.readMatch(\"*\") !== null) {\n            return m.star();\n        } else if (reader.readMatch(\"+\") !== null) {\n            return m.plus();\n        } else if (reader.readMatch(\"#\") !== null) {\n            return m.hash();\n        } else if (reader.readMatch(/^\\{\\s*/) !== null) {\n            var min = eat(/^\\d+/);\n            eat(/^\\s*,\\s*/);\n            var max = eat(/^\\d+/);\n            eat(/^\\s*\\}/);\n            return m.braces(Number(min), Number(max));\n        }\n        return m;\n    };\n    term = function() {\n        if (reader.readMatch(\"[ \") !== null) {\n            var m = expr();\n            eat(\" ]\");\n            return m;\n        }\n        return Matcher.fromType(eat(/^[^ ?*+#{]+/));\n    };\n    result = expr();\n    if (!reader.eof()) {\n        throw new SyntaxError(\n            \"Expected end of string\", reader.getLine(), reader.getCol());\n    }\n    return result;\n};\nMatcher.cast = function(m) {\n    if (m instanceof Matcher) {\n        return m;\n    }\n    return Matcher.parse(m);\n};\nMatcher.fromType = function(type) {\n    var ValidationTypes = require(\"./ValidationTypes\");\n    return new Matcher(function(expression) {\n        return expression.hasNext() && ValidationTypes.isType(expression, type);\n    }, type);\n};\nMatcher.seq = function() {\n    var ms = Array.prototype.slice.call(arguments).map(Matcher.cast);\n    if (ms.length === 1) {\n        return ms[0];\n    }\n    return new Matcher(function(expression) {\n        var i, result = true;\n        for (i = 0; result && i < ms.length; i++) {\n            result = ms[i].match(expression);\n        }\n        return result;\n    }, function(prec) {\n        var p = Matcher.prec.SEQ;\n        var s = ms.map(function(m) {\n            return m.toString(p);\n        }).join(\" \");\n        if (prec > p) {\n            s = \"[ \" + s + \" ]\";\n        }\n        return s;\n    });\n};\nMatcher.alt = function() {\n    var ms = Array.prototype.slice.call(arguments).map(Matcher.cast);\n    if (ms.length === 1) {\n        return ms[0];\n    }\n    return new Matcher(function(expression) {\n        var i, result = false;\n        for (i = 0; !result && i < ms.length; i++) {\n            result = ms[i].match(expression);\n        }\n        return result;\n    }, function(prec) {\n        var p = Matcher.prec.ALT;\n        var s = ms.map(function(m) {\n            return m.toString(p);\n        }).join(\" | \");\n        if (prec > p) {\n            s = \"[ \" + s + \" ]\";\n        }\n        return s;\n    });\n};\nMatcher.many = function(required) {\n    var ms = Array.prototype.slice.call(arguments, 1).reduce(function(acc, v) {\n        if (v.expand) {\n            var ValidationTypes = require(\"./ValidationTypes\");\n            acc.push.apply(acc, ValidationTypes.complex[v.expand].options);\n        } else {\n            acc.push(Matcher.cast(v));\n        }\n        return acc;\n    }, []);\n\n    if (required === true) {\n        required = ms.map(function() {\n            return true;\n        });\n    }\n\n    var result = new Matcher(function(expression) {\n        var seen = [], max = 0, pass = 0;\n        var success = function(matchCount) {\n            if (pass === 0) {\n                max = Math.max(matchCount, max);\n                return matchCount === ms.length;\n            } else {\n                return matchCount === max;\n            }\n        };\n        var tryMatch = function(matchCount) {\n            for (var i = 0; i < ms.length; i++) {\n                if (seen[i]) {\n                    continue;\n                }\n                expression.mark();\n                if (ms[i].match(expression)) {\n                    seen[i] = true;\n                    if (tryMatch(matchCount + (required === false || required[i] ? 1 : 0))) {\n                        expression.drop();\n                        return true;\n                    }\n                    expression.restore();\n                    seen[i] = false;\n                } else {\n                    expression.drop();\n                }\n            }\n            return success(matchCount);\n        };\n        if (!tryMatch(0)) {\n            pass++;\n            tryMatch(0);\n        }\n\n        if (required === false) {\n            return max > 0;\n        }\n        for (var i = 0; i < ms.length; i++) {\n            if (required[i] && !seen[i]) {\n                return false;\n            }\n        }\n        return true;\n    }, function(prec) {\n        var p = required === false ? Matcher.prec.OROR : Matcher.prec.ANDAND;\n        var s = ms.map(function(m, i) {\n            if (required !== false && !required[i]) {\n                return m.toString(Matcher.prec.MOD) + \"?\";\n            }\n            return m.toString(p);\n        }).join(required === false ? \" || \" : \" && \");\n        if (prec > p) {\n            s = \"[ \" + s + \" ]\";\n        }\n        return s;\n    });\n    result.options = ms;\n    return result;\n};\nMatcher.andand = function() {\n    var args = Array.prototype.slice.call(arguments);\n    args.unshift(true);\n    return Matcher.many.apply(Matcher, args);\n};\nMatcher.oror = function() {\n    var args = Array.prototype.slice.call(arguments);\n    args.unshift(false);\n    return Matcher.many.apply(Matcher, args);\n};\nMatcher.prototype = {\n    constructor: Matcher,\n    match: function() {\n        throw new Error(\"unimplemented\");\n    },\n    toString: function() {\n        throw new Error(\"unimplemented\");\n    },\n    func: function() {\n        return this.match.bind(this);\n    },\n    then: function(m) {\n        return Matcher.seq(this, m);\n    },\n    or: function(m) {\n        return Matcher.alt(this, m);\n    },\n    andand: function(m) {\n        return Matcher.many(true, this, m);\n    },\n    oror: function(m) {\n        return Matcher.many(false, this, m);\n    },\n    star: function() {\n        return this.braces(0, Infinity, \"*\");\n    },\n    plus: function() {\n        return this.braces(1, Infinity, \"+\");\n    },\n    question: function() {\n        return this.braces(0, 1, \"?\");\n    },\n    hash: function() {\n        return this.braces(1, Infinity, \"#\", Matcher.cast(\",\"));\n    },\n    braces: function(min, max, marker, optSep) {\n        var m1 = this, m2 = optSep ? optSep.then(this) : this;\n        if (!marker) {\n            marker = \"{\" + min + \",\" + max + \"}\";\n        }\n        return new Matcher(function(expression) {\n            var result = true, i;\n            for (i = 0; i < max; i++) {\n                if (i > 0 && optSep) {\n                    result = m2.match(expression);\n                } else {\n                    result = m1.match(expression);\n                }\n                if (!result) {\n                    break;\n                }\n            }\n            return i >= min;\n        }, function() {\n            return m1.toString(Matcher.prec.MOD) + marker;\n        });\n    }\n};\n\n},{\"../util/StringReader\":24,\"../util/SyntaxError\":25,\"./ValidationTypes\":21}],4:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = MediaFeature;\n\nvar SyntaxUnit = require(\"../util/SyntaxUnit\");\n\nvar Parser = require(\"./Parser\");\nfunction MediaFeature(name, value) {\n\n    SyntaxUnit.call(this, \"(\" + name + (value !== null ? \":\" + value : \"\") + \")\", name.startLine, name.startCol, Parser.MEDIA_FEATURE_TYPE);\n    this.name = name;\n    this.value = value;\n}\n\nMediaFeature.prototype = new SyntaxUnit();\nMediaFeature.prototype.constructor = MediaFeature;\n\n\n},{\"../util/SyntaxUnit\":26,\"./Parser\":6}],5:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = MediaQuery;\n\nvar SyntaxUnit = require(\"../util/SyntaxUnit\");\n\nvar Parser = require(\"./Parser\");\nfunction MediaQuery(modifier, mediaType, features, line, col) {\n\n    SyntaxUnit.call(this, (modifier ? modifier + \" \" : \"\") + (mediaType ? mediaType : \"\") + (mediaType && features.length > 0 ? \" and \" : \"\") + features.join(\" and \"), line, col, Parser.MEDIA_QUERY_TYPE);\n    this.modifier = modifier;\n    this.mediaType = mediaType;\n    this.features = features;\n\n}\n\nMediaQuery.prototype = new SyntaxUnit();\nMediaQuery.prototype.constructor = MediaQuery;\n\n\n},{\"../util/SyntaxUnit\":26,\"./Parser\":6}],6:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = Parser;\n\nvar EventTarget = require(\"../util/EventTarget\");\nvar SyntaxError = require(\"../util/SyntaxError\");\nvar SyntaxUnit = require(\"../util/SyntaxUnit\");\n\nvar Combinator = require(\"./Combinator\");\nvar MediaFeature = require(\"./MediaFeature\");\nvar MediaQuery = require(\"./MediaQuery\");\nvar PropertyName = require(\"./PropertyName\");\nvar PropertyValue = require(\"./PropertyValue\");\nvar PropertyValuePart = require(\"./PropertyValuePart\");\nvar Selector = require(\"./Selector\");\nvar SelectorPart = require(\"./SelectorPart\");\nvar SelectorSubPart = require(\"./SelectorSubPart\");\nvar TokenStream = require(\"./TokenStream\");\nvar Tokens = require(\"./Tokens\");\nvar Validation = require(\"./Validation\");\nfunction Parser(options) {\n    EventTarget.call(this);\n\n\n    this.options = options || {};\n\n    this._tokenStream = null;\n}\nParser.DEFAULT_TYPE = 0;\nParser.COMBINATOR_TYPE = 1;\nParser.MEDIA_FEATURE_TYPE = 2;\nParser.MEDIA_QUERY_TYPE = 3;\nParser.PROPERTY_NAME_TYPE = 4;\nParser.PROPERTY_VALUE_TYPE = 5;\nParser.PROPERTY_VALUE_PART_TYPE = 6;\nParser.SELECTOR_TYPE = 7;\nParser.SELECTOR_PART_TYPE = 8;\nParser.SELECTOR_SUB_PART_TYPE = 9;\n\nParser.prototype = function() {\n\n    var proto = new EventTarget(),  // new prototype\n        prop,\n        additions =  {\n            __proto__: null,\n            constructor: Parser,\n            DEFAULT_TYPE : 0,\n            COMBINATOR_TYPE : 1,\n            MEDIA_FEATURE_TYPE : 2,\n            MEDIA_QUERY_TYPE : 3,\n            PROPERTY_NAME_TYPE : 4,\n            PROPERTY_VALUE_TYPE : 5,\n            PROPERTY_VALUE_PART_TYPE : 6,\n            SELECTOR_TYPE : 7,\n            SELECTOR_PART_TYPE : 8,\n            SELECTOR_SUB_PART_TYPE : 9,\n\n            _stylesheet: function() {\n\n                var tokenStream = this._tokenStream,\n                    count,\n                    token,\n                    tt;\n\n                this.fire(\"startstylesheet\");\n                this._charset();\n\n                this._skipCruft();\n                while (tokenStream.peek() === Tokens.IMPORT_SYM) {\n                    this._import();\n                    this._skipCruft();\n                }\n                while (tokenStream.peek() === Tokens.NAMESPACE_SYM) {\n                    this._namespace();\n                    this._skipCruft();\n                }\n                tt = tokenStream.peek();\n                while (tt > Tokens.EOF) {\n\n                    try {\n\n                        switch (tt) {\n                            case Tokens.MEDIA_SYM:\n                                this._media();\n                                this._skipCruft();\n                                break;\n                            case Tokens.PAGE_SYM:\n                                this._page();\n                                this._skipCruft();\n                                break;\n                            case Tokens.FONT_FACE_SYM:\n                                this._font_face();\n                                this._skipCruft();\n                                break;\n                            case Tokens.KEYFRAMES_SYM:\n                                this._keyframes();\n                                this._skipCruft();\n                                break;\n                            case Tokens.VIEWPORT_SYM:\n                                this._viewport();\n                                this._skipCruft();\n                                break;\n                            case Tokens.DOCUMENT_SYM:\n                                this._document();\n                                this._skipCruft();\n                                break;\n                            case Tokens.SUPPORTS_SYM:\n                                this._supports();\n                                this._skipCruft();\n                                break;\n                            case Tokens.UNKNOWN_SYM:  // unknown @ rule\n                                tokenStream.get();\n                                if (!this.options.strict) {\n                                    this.fire({\n                                        type:       \"error\",\n                                        error:      null,\n                                        message:    \"Unknown @ rule: \" + tokenStream.LT(0).value + \".\",\n                                        line:       tokenStream.LT(0).startLine,\n                                        col:        tokenStream.LT(0).startCol\n                                    });\n                                    count = 0;\n                                    while (tokenStream.advance([Tokens.LBRACE, Tokens.RBRACE]) === Tokens.LBRACE) {\n                                        count++;    // keep track of nesting depth\n                                    }\n\n                                    while (count) {\n                                        tokenStream.advance([Tokens.RBRACE]);\n                                        count--;\n                                    }\n\n                                } else {\n                                    throw new SyntaxError(\"Unknown @ rule.\", tokenStream.LT(0).startLine, tokenStream.LT(0).startCol);\n                                }\n                                break;\n                            case Tokens.S:\n                                this._readWhitespace();\n                                break;\n                            default:\n                                if (!this._ruleset()) {\n                                    switch (tt) {\n                                        case Tokens.CHARSET_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._charset(false);\n                                            throw new SyntaxError(\"@charset not allowed here.\", token.startLine, token.startCol);\n                                        case Tokens.IMPORT_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._import(false);\n                                            throw new SyntaxError(\"@import not allowed here.\", token.startLine, token.startCol);\n                                        case Tokens.NAMESPACE_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._namespace(false);\n                                            throw new SyntaxError(\"@namespace not allowed here.\", token.startLine, token.startCol);\n                                        default:\n                                            tokenStream.get();  // get the last token\n                                            this._unexpectedToken(tokenStream.token());\n                                    }\n\n                                }\n                        }\n                    } catch (ex) {\n                        if (ex instanceof SyntaxError && !this.options.strict) {\n                            this.fire({\n                                type:       \"error\",\n                                error:      ex,\n                                message:    ex.message,\n                                line:       ex.line,\n                                col:        ex.col\n                            });\n                        } else {\n                            throw ex;\n                        }\n                    }\n\n                    tt = tokenStream.peek();\n                }\n\n                if (tt !== Tokens.EOF) {\n                    this._unexpectedToken(tokenStream.token());\n                }\n\n                this.fire(\"endstylesheet\");\n            },\n\n            _charset: function(emit) {\n                var tokenStream = this._tokenStream,\n                    charset,\n                    token,\n                    line,\n                    col;\n\n                if (tokenStream.match(Tokens.CHARSET_SYM)) {\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this._readWhitespace();\n                    tokenStream.mustMatch(Tokens.STRING);\n\n                    token = tokenStream.token();\n                    charset = token.value;\n\n                    this._readWhitespace();\n                    tokenStream.mustMatch(Tokens.SEMICOLON);\n\n                    if (emit !== false) {\n                        this.fire({\n                            type:   \"charset\",\n                            charset:charset,\n                            line:   line,\n                            col:    col\n                        });\n                    }\n                }\n            },\n\n            _import: function(emit) {\n\n                var tokenStream = this._tokenStream,\n                    uri,\n                    importToken,\n                    mediaList   = [];\n                tokenStream.mustMatch(Tokens.IMPORT_SYM);\n                importToken = tokenStream.token();\n                this._readWhitespace();\n\n                tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);\n                uri = tokenStream.token().value.replace(/^(?:url\\()?[\"']?([^\"']+?)[\"']?\\)?$/, \"$1\");\n\n                this._readWhitespace();\n\n                mediaList = this._media_query_list();\n                tokenStream.mustMatch(Tokens.SEMICOLON);\n                this._readWhitespace();\n\n                if (emit !== false) {\n                    this.fire({\n                        type:   \"import\",\n                        uri:    uri,\n                        media:  mediaList,\n                        line:   importToken.startLine,\n                        col:    importToken.startCol\n                    });\n                }\n\n            },\n\n            _namespace: function(emit) {\n\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    prefix,\n                    uri;\n                tokenStream.mustMatch(Tokens.NAMESPACE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n                this._readWhitespace();\n                if (tokenStream.match(Tokens.IDENT)) {\n                    prefix = tokenStream.token().value;\n                    this._readWhitespace();\n                }\n\n                tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);\n                uri = tokenStream.token().value.replace(/(?:url\\()?[\"']([^\"']+)[\"']\\)?/, \"$1\");\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.SEMICOLON);\n                this._readWhitespace();\n\n                if (emit !== false) {\n                    this.fire({\n                        type:   \"namespace\",\n                        prefix: prefix,\n                        uri:    uri,\n                        line:   line,\n                        col:    col\n                    });\n                }\n\n            },\n\n            _supports: function(emit) {\n                var tokenStream = this._tokenStream,\n                    line,\n                    col;\n\n                if (tokenStream.match(Tokens.SUPPORTS_SYM)) {\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this._readWhitespace();\n                    this._supports_condition();\n                    this._readWhitespace();\n\n                    tokenStream.mustMatch(Tokens.LBRACE);\n                    this._readWhitespace();\n\n                    if (emit !== false) {\n                        this.fire({\n                            type:   \"startsupports\",\n                            line:   line,\n                            col:    col\n                        });\n                    }\n\n                    while (true) {\n                        if (!this._ruleset()) {\n                            break;\n                        }\n                    }\n\n                    tokenStream.mustMatch(Tokens.RBRACE);\n                    this._readWhitespace();\n\n                    this.fire({\n                        type:   \"endsupports\",\n                        line:   line,\n                        col:    col\n                    });\n                }\n            },\n\n            _supports_condition: function() {\n                var tokenStream = this._tokenStream,\n                    ident;\n\n                if (tokenStream.match(Tokens.IDENT)) {\n                    ident = tokenStream.token().value.toLowerCase();\n\n                    if (ident === \"not\") {\n                        tokenStream.mustMatch(Tokens.S);\n                        this._supports_condition_in_parens();\n                    } else {\n                        tokenStream.unget();\n                    }\n                } else {\n                    this._supports_condition_in_parens();\n                    this._readWhitespace();\n\n                    while (tokenStream.peek() === Tokens.IDENT) {\n                        ident = tokenStream.LT(1).value.toLowerCase();\n                        if (ident === \"and\" || ident === \"or\") {\n                            tokenStream.mustMatch(Tokens.IDENT);\n                            this._readWhitespace();\n                            this._supports_condition_in_parens();\n                            this._readWhitespace();\n                        }\n                    }\n                }\n            },\n\n            _supports_condition_in_parens: function() {\n                var tokenStream = this._tokenStream,\n                    ident;\n\n                if (tokenStream.match(Tokens.LPAREN)) {\n                    this._readWhitespace();\n                    if (tokenStream.match(Tokens.IDENT)) {\n                        ident = tokenStream.token().value.toLowerCase();\n                        if (ident === \"not\") {\n                            this._readWhitespace();\n                            this._supports_condition();\n                            this._readWhitespace();\n                            tokenStream.mustMatch(Tokens.RPAREN);\n                        } else {\n                            tokenStream.unget();\n                            this._supports_declaration_condition(false);\n                        }\n                    } else {\n                        this._supports_condition();\n                        this._readWhitespace();\n                        tokenStream.mustMatch(Tokens.RPAREN);\n                    }\n                } else {\n                    this._supports_declaration_condition();\n                }\n            },\n\n            _supports_declaration_condition: function(requireStartParen) {\n                var tokenStream = this._tokenStream;\n\n                if (requireStartParen !== false) {\n                    tokenStream.mustMatch(Tokens.LPAREN);\n                }\n                this._readWhitespace();\n                this._declaration();\n                tokenStream.mustMatch(Tokens.RPAREN);\n            },\n\n            _media: function() {\n                var tokenStream     = this._tokenStream,\n                    line,\n                    col,\n                    mediaList;  // = [];\n                tokenStream.mustMatch(Tokens.MEDIA_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                mediaList = this._media_query_list();\n\n                tokenStream.mustMatch(Tokens.LBRACE);\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startmedia\",\n                    media:  mediaList,\n                    line:   line,\n                    col:    col\n                });\n\n                while (true) {\n                    if (tokenStream.peek() === Tokens.PAGE_SYM) {\n                        this._page();\n                    } else if (tokenStream.peek() === Tokens.FONT_FACE_SYM) {\n                        this._font_face();\n                    } else if (tokenStream.peek() === Tokens.VIEWPORT_SYM) {\n                        this._viewport();\n                    } else if (tokenStream.peek() === Tokens.DOCUMENT_SYM) {\n                        this._document();\n                    } else if (tokenStream.peek() === Tokens.SUPPORTS_SYM) {\n                        this._supports();\n                    } else if (tokenStream.peek() === Tokens.MEDIA_SYM) {\n                        this._media();\n                    } else if (!this._ruleset()) {\n                        break;\n                    }\n                }\n\n                tokenStream.mustMatch(Tokens.RBRACE);\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"endmedia\",\n                    media:  mediaList,\n                    line:   line,\n                    col:    col\n                });\n            },\n            _media_query_list: function() {\n                var tokenStream = this._tokenStream,\n                    mediaList   = [];\n\n\n                this._readWhitespace();\n\n                if (tokenStream.peek() === Tokens.IDENT || tokenStream.peek() === Tokens.LPAREN) {\n                    mediaList.push(this._media_query());\n                }\n\n                while (tokenStream.match(Tokens.COMMA)) {\n                    this._readWhitespace();\n                    mediaList.push(this._media_query());\n                }\n\n                return mediaList;\n            },\n            _media_query: function() {\n                var tokenStream = this._tokenStream,\n                    type        = null,\n                    ident       = null,\n                    token       = null,\n                    expressions = [];\n\n                if (tokenStream.match(Tokens.IDENT)) {\n                    ident = tokenStream.token().value.toLowerCase();\n                    if (ident !== \"only\" && ident !== \"not\") {\n                        tokenStream.unget();\n                        ident = null;\n                    } else {\n                        token = tokenStream.token();\n                    }\n                }\n\n                this._readWhitespace();\n\n                if (tokenStream.peek() === Tokens.IDENT) {\n                    type = this._media_type();\n                    if (token === null) {\n                        token = tokenStream.token();\n                    }\n                } else if (tokenStream.peek() === Tokens.LPAREN) {\n                    if (token === null) {\n                        token = tokenStream.LT(1);\n                    }\n                    expressions.push(this._media_expression());\n                }\n\n                if (type === null && expressions.length === 0) {\n                    return null;\n                } else {\n                    this._readWhitespace();\n                    while (tokenStream.match(Tokens.IDENT)) {\n                        if (tokenStream.token().value.toLowerCase() !== \"and\") {\n                            this._unexpectedToken(tokenStream.token());\n                        }\n\n                        this._readWhitespace();\n                        expressions.push(this._media_expression());\n                    }\n                }\n\n                return new MediaQuery(ident, type, expressions, token.startLine, token.startCol);\n            },\n            _media_type: function() {\n                return this._media_feature();\n            },\n            _media_expression: function() {\n                var tokenStream = this._tokenStream,\n                    feature     = null,\n                    token,\n                    expression  = null;\n\n                tokenStream.mustMatch(Tokens.LPAREN);\n                this._readWhitespace();\n\n                feature = this._media_feature();\n                this._readWhitespace();\n\n                if (tokenStream.match(Tokens.COLON)) {\n                    this._readWhitespace();\n                    token = tokenStream.LT(1);\n                    expression = this._expression();\n                }\n\n                tokenStream.mustMatch(Tokens.RPAREN);\n                this._readWhitespace();\n\n                return new MediaFeature(feature, expression ? new SyntaxUnit(expression, token.startLine, token.startCol) : null);\n            },\n            _media_feature: function() {\n                var tokenStream = this._tokenStream;\n\n                this._readWhitespace();\n\n                tokenStream.mustMatch(Tokens.IDENT);\n\n                return SyntaxUnit.fromToken(tokenStream.token());\n            },\n            _page: function() {\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    identifier  = null,\n                    pseudoPage  = null;\n                tokenStream.mustMatch(Tokens.PAGE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                if (tokenStream.match(Tokens.IDENT)) {\n                    identifier = tokenStream.token().value;\n                    if (identifier.toLowerCase() === \"auto\") {\n                        this._unexpectedToken(tokenStream.token());\n                    }\n                }\n                if (tokenStream.peek() === Tokens.COLON) {\n                    pseudoPage = this._pseudo_page();\n                }\n\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startpage\",\n                    id:     identifier,\n                    pseudo: pseudoPage,\n                    line:   line,\n                    col:    col\n                });\n\n                this._readDeclarations(true, true);\n\n                this.fire({\n                    type:   \"endpage\",\n                    id:     identifier,\n                    pseudo: pseudoPage,\n                    line:   line,\n                    col:    col\n                });\n\n            },\n            _margin: function() {\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    marginSym   = this._margin_sym();\n\n                if (marginSym) {\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this.fire({\n                        type: \"startpagemargin\",\n                        margin: marginSym,\n                        line:   line,\n                        col:    col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type: \"endpagemargin\",\n                        margin: marginSym,\n                        line:   line,\n                        col:    col\n                    });\n                    return true;\n                } else {\n                    return false;\n                }\n            },\n            _margin_sym: function() {\n\n                var tokenStream = this._tokenStream;\n\n                if (tokenStream.match([Tokens.TOPLEFTCORNER_SYM, Tokens.TOPLEFT_SYM,\n                    Tokens.TOPCENTER_SYM, Tokens.TOPRIGHT_SYM, Tokens.TOPRIGHTCORNER_SYM,\n                    Tokens.BOTTOMLEFTCORNER_SYM, Tokens.BOTTOMLEFT_SYM,\n                    Tokens.BOTTOMCENTER_SYM, Tokens.BOTTOMRIGHT_SYM,\n                    Tokens.BOTTOMRIGHTCORNER_SYM, Tokens.LEFTTOP_SYM,\n                    Tokens.LEFTMIDDLE_SYM, Tokens.LEFTBOTTOM_SYM, Tokens.RIGHTTOP_SYM,\n                    Tokens.RIGHTMIDDLE_SYM, Tokens.RIGHTBOTTOM_SYM])) {\n                    return SyntaxUnit.fromToken(tokenStream.token());\n                } else {\n                    return null;\n                }\n\n            },\n\n            _pseudo_page: function() {\n\n                var tokenStream = this._tokenStream;\n\n                tokenStream.mustMatch(Tokens.COLON);\n                tokenStream.mustMatch(Tokens.IDENT);\n\n                return tokenStream.token().value;\n            },\n\n            _font_face: function() {\n                var tokenStream = this._tokenStream,\n                    line,\n                    col;\n                tokenStream.mustMatch(Tokens.FONT_FACE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startfontface\",\n                    line:   line,\n                    col:    col\n                });\n\n                this._readDeclarations(true);\n\n                this.fire({\n                    type:   \"endfontface\",\n                    line:   line,\n                    col:    col\n                });\n            },\n\n            _viewport: function() {\n                var tokenStream = this._tokenStream,\n                    line,\n                    col;\n\n                tokenStream.mustMatch(Tokens.VIEWPORT_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startviewport\",\n                    line:   line,\n                    col:    col\n                });\n\n                this._readDeclarations(true);\n\n                this.fire({\n                    type:   \"endviewport\",\n                    line:   line,\n                    col:    col\n                });\n\n            },\n\n            _document: function() {\n\n                var tokenStream = this._tokenStream,\n                    token,\n                    functions = [],\n                    prefix = \"\";\n\n                tokenStream.mustMatch(Tokens.DOCUMENT_SYM);\n                token = tokenStream.token();\n                if (/^@-([^-]+)-/.test(token.value)) {\n                    prefix = RegExp.$1;\n                }\n\n                this._readWhitespace();\n                functions.push(this._document_function());\n\n                while (tokenStream.match(Tokens.COMMA)) {\n                    this._readWhitespace();\n                    functions.push(this._document_function());\n                }\n\n                tokenStream.mustMatch(Tokens.LBRACE);\n                this._readWhitespace();\n\n                this.fire({\n                    type:      \"startdocument\",\n                    functions: functions,\n                    prefix:    prefix,\n                    line:      token.startLine,\n                    col:       token.startCol\n                });\n\n                var ok = true;\n                while (ok) {\n                    switch (tokenStream.peek()) {\n                        case Tokens.PAGE_SYM:\n                            this._page();\n                            break;\n                        case Tokens.FONT_FACE_SYM:\n                            this._font_face();\n                            break;\n                        case Tokens.VIEWPORT_SYM:\n                            this._viewport();\n                            break;\n                        case Tokens.MEDIA_SYM:\n                            this._media();\n                            break;\n                        case Tokens.KEYFRAMES_SYM:\n                            this._keyframes();\n                            break;\n                        case Tokens.DOCUMENT_SYM:\n                            this._document();\n                            break;\n                        default:\n                            ok = Boolean(this._ruleset());\n                    }\n                }\n\n                tokenStream.mustMatch(Tokens.RBRACE);\n                token = tokenStream.token();\n                this._readWhitespace();\n\n                this.fire({\n                    type:      \"enddocument\",\n                    functions: functions,\n                    prefix:    prefix,\n                    line:      token.startLine,\n                    col:       token.startCol\n                });\n            },\n\n            _document_function: function() {\n\n                var tokenStream = this._tokenStream,\n                    value;\n\n                if (tokenStream.match(Tokens.URI)) {\n                    value = tokenStream.token().value;\n                    this._readWhitespace();\n                } else {\n                    value = this._function();\n                }\n\n                return value;\n            },\n\n            _operator: function(inFunction) {\n\n                var tokenStream = this._tokenStream,\n                    token       = null;\n\n                if (tokenStream.match([Tokens.SLASH, Tokens.COMMA]) ||\n                    inFunction && tokenStream.match([Tokens.PLUS, Tokens.STAR, Tokens.MINUS])) {\n                    token =  tokenStream.token();\n                    this._readWhitespace();\n                }\n                return token ? PropertyValuePart.fromToken(token) : null;\n\n            },\n\n            _combinator: function() {\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    token;\n\n                if (tokenStream.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE])) {\n                    token = tokenStream.token();\n                    value = new Combinator(token.value, token.startLine, token.startCol);\n                    this._readWhitespace();\n                }\n\n                return value;\n            },\n\n            _unary_operator: function() {\n\n                var tokenStream = this._tokenStream;\n\n                if (tokenStream.match([Tokens.MINUS, Tokens.PLUS])) {\n                    return tokenStream.token().value;\n                } else {\n                    return null;\n                }\n            },\n\n            _property: function() {\n\n                var tokenStream  = this._tokenStream,\n                    value        = null,\n                    hack         = null,\n                    propertyName = \"\",\n                    token,\n                    line,\n                    col;\n                if (tokenStream.peek() === Tokens.STAR && this.options.starHack) {\n                    tokenStream.get();\n                    token = tokenStream.token();\n                    hack = token.value;\n                    line = token.startLine;\n                    col = token.startCol;\n                }\n                if (tokenStream.peek() === Tokens.MINUS) {\n                    tokenStream.get();\n                    token = tokenStream.token();\n                    propertyName = token.value;\n                    line = token.startLine;\n                    col = token.startCol;\n                }\n\n                if (tokenStream.match(Tokens.IDENT)) {\n                    token = tokenStream.token();\n                    propertyName += token.value;\n                    if (propertyName.charAt(0) === \"_\" && this.options.underscoreHack) {\n                        hack = \"_\";\n                        propertyName = propertyName.substring(1);\n                    }\n\n                    value = new PropertyName(propertyName, hack, line || token.startLine, col || token.startCol);\n                    this._readWhitespace();\n                } else {\n                    var tt = tokenStream.peek();\n                    if (tt !== Tokens.EOF && tt !== Tokens.RBRACE) {\n                        this._unexpectedToken(tokenStream.LT(1));\n                    }\n                }\n\n                return value;\n            },\n            _ruleset: function() {\n\n                var tokenStream = this._tokenStream,\n                    tt,\n                    selectors;\n                try {\n                    selectors = this._selectors_group();\n                } catch (ex) {\n                    if (ex instanceof SyntaxError && !this.options.strict) {\n                        this.fire({\n                            type:       \"error\",\n                            error:      ex,\n                            message:    ex.message,\n                            line:       ex.line,\n                            col:        ex.col\n                        });\n                        tt = tokenStream.advance([Tokens.RBRACE]);\n                        if (tt === Tokens.RBRACE) {\n                        } else {\n                            throw ex;\n                        }\n\n                    } else {\n                        throw ex;\n                    }\n                    return true;\n                }\n                if (selectors) {\n\n                    this.fire({\n                        type:       \"startrule\",\n                        selectors:  selectors,\n                        line:       selectors[0].line,\n                        col:        selectors[0].col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type:       \"endrule\",\n                        selectors:  selectors,\n                        line:       selectors[0].line,\n                        col:        selectors[0].col\n                    });\n\n                }\n\n                return selectors;\n\n            },\n            _selectors_group: function() {\n                var tokenStream = this._tokenStream,\n                    selectors   = [],\n                    selector;\n\n                selector = this._selector();\n                if (selector !== null) {\n\n                    selectors.push(selector);\n                    while (tokenStream.match(Tokens.COMMA)) {\n                        this._readWhitespace();\n                        selector = this._selector();\n                        if (selector !== null) {\n                            selectors.push(selector);\n                        } else {\n                            this._unexpectedToken(tokenStream.LT(1));\n                        }\n                    }\n                }\n\n                return selectors.length ? selectors : null;\n            },\n            _selector: function() {\n\n                var tokenStream = this._tokenStream,\n                    selector    = [],\n                    nextSelector = null,\n                    combinator  = null,\n                    ws          = null;\n                nextSelector = this._simple_selector_sequence();\n                if (nextSelector === null) {\n                    return null;\n                }\n\n                selector.push(nextSelector);\n\n                do {\n                    combinator = this._combinator();\n\n                    if (combinator !== null) {\n                        selector.push(combinator);\n                        nextSelector = this._simple_selector_sequence();\n                        if (nextSelector === null) {\n                            this._unexpectedToken(tokenStream.LT(1));\n                        } else {\n                            selector.push(nextSelector);\n                        }\n                    } else {\n                        if (this._readWhitespace()) {\n                            ws = new Combinator(tokenStream.token().value, tokenStream.token().startLine, tokenStream.token().startCol);\n                            combinator = this._combinator();\n                            nextSelector = this._simple_selector_sequence();\n                            if (nextSelector === null) {\n                                if (combinator !== null) {\n                                    this._unexpectedToken(tokenStream.LT(1));\n                                }\n                            } else {\n\n                                if (combinator !== null) {\n                                    selector.push(combinator);\n                                } else {\n                                    selector.push(ws);\n                                }\n\n                                selector.push(nextSelector);\n                            }\n                        } else {\n                            break;\n                        }\n\n                    }\n                } while (true);\n\n                return new Selector(selector, selector[0].line, selector[0].col);\n            },\n            _simple_selector_sequence: function() {\n\n                var tokenStream = this._tokenStream,\n                    elementName = null,\n                    modifiers   = [],\n                    selectorText = \"\",\n                    components  = [\n                        function() {\n                            return tokenStream.match(Tokens.HASH) ?\n                                    new SelectorSubPart(tokenStream.token().value, \"id\", tokenStream.token().startLine, tokenStream.token().startCol) :\n                                    null;\n                        },\n                        this._class,\n                        this._attrib,\n                        this._pseudo,\n                        this._negation\n                    ],\n                    i           = 0,\n                    len         = components.length,\n                    component   = null,\n                    line,\n                    col;\n                line = tokenStream.LT(1).startLine;\n                col = tokenStream.LT(1).startCol;\n\n                elementName = this._type_selector();\n                if (!elementName) {\n                    elementName = this._universal();\n                }\n\n                if (elementName !== null) {\n                    selectorText += elementName;\n                }\n\n                while (true) {\n                    if (tokenStream.peek() === Tokens.S) {\n                        break;\n                    }\n                    while (i < len && component === null) {\n                        component = components[i++].call(this);\n                    }\n\n                    if (component === null) {\n                        if (selectorText === \"\") {\n                            return null;\n                        } else {\n                            break;\n                        }\n                    } else {\n                        i = 0;\n                        modifiers.push(component);\n                        selectorText += component.toString();\n                        component = null;\n                    }\n                }\n\n\n                return selectorText !== \"\" ?\n                        new SelectorPart(elementName, modifiers, selectorText, line, col) :\n                        null;\n            },\n            _type_selector: function() {\n\n                var tokenStream = this._tokenStream,\n                    ns          = this._namespace_prefix(),\n                    elementName = this._element_name();\n\n                if (!elementName) {\n                    if (ns) {\n                        tokenStream.unget();\n                        if (ns.length > 1) {\n                            tokenStream.unget();\n                        }\n                    }\n\n                    return null;\n                } else {\n                    if (ns) {\n                        elementName.text = ns + elementName.text;\n                        elementName.col -= ns.length;\n                    }\n                    return elementName;\n                }\n            },\n            _class: function() {\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.DOT)) {\n                    tokenStream.mustMatch(Tokens.IDENT);\n                    token = tokenStream.token();\n                    return new SelectorSubPart(\".\" + token.value, \"class\", token.startLine, token.startCol - 1);\n                } else {\n                    return null;\n                }\n\n            },\n            _element_name: function() {\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.IDENT)) {\n                    token = tokenStream.token();\n                    return new SelectorSubPart(token.value, \"elementName\", token.startLine, token.startCol);\n\n                } else {\n                    return null;\n                }\n            },\n            _namespace_prefix: function() {\n                var tokenStream = this._tokenStream,\n                    value       = \"\";\n                if (tokenStream.LA(1) === Tokens.PIPE || tokenStream.LA(2) === Tokens.PIPE) {\n\n                    if (tokenStream.match([Tokens.IDENT, Tokens.STAR])) {\n                        value += tokenStream.token().value;\n                    }\n\n                    tokenStream.mustMatch(Tokens.PIPE);\n                    value += \"|\";\n\n                }\n\n                return value.length ? value : null;\n            },\n            _universal: function() {\n                var tokenStream = this._tokenStream,\n                    value       = \"\",\n                    ns;\n\n                ns = this._namespace_prefix();\n                if (ns) {\n                    value += ns;\n                }\n\n                if (tokenStream.match(Tokens.STAR)) {\n                    value += \"*\";\n                }\n\n                return value.length ? value : null;\n\n            },\n            _attrib: function() {\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    ns,\n                    token;\n\n                if (tokenStream.match(Tokens.LBRACKET)) {\n                    token = tokenStream.token();\n                    value = token.value;\n                    value += this._readWhitespace();\n\n                    ns = this._namespace_prefix();\n\n                    if (ns) {\n                        value += ns;\n                    }\n\n                    tokenStream.mustMatch(Tokens.IDENT);\n                    value += tokenStream.token().value;\n                    value += this._readWhitespace();\n\n                    if (tokenStream.match([Tokens.PREFIXMATCH, Tokens.SUFFIXMATCH, Tokens.SUBSTRINGMATCH,\n                        Tokens.EQUALS, Tokens.INCLUDES, Tokens.DASHMATCH])) {\n\n                        value += tokenStream.token().value;\n                        value += this._readWhitespace();\n\n                        tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);\n                        value += tokenStream.token().value;\n                        value += this._readWhitespace();\n                    }\n\n                    tokenStream.mustMatch(Tokens.RBRACKET);\n\n                    return new SelectorSubPart(value + \"]\", \"attribute\", token.startLine, token.startCol);\n                } else {\n                    return null;\n                }\n            },\n            _pseudo: function() {\n\n                var tokenStream = this._tokenStream,\n                    pseudo      = null,\n                    colons      = \":\",\n                    line,\n                    col;\n\n                if (tokenStream.match(Tokens.COLON)) {\n\n                    if (tokenStream.match(Tokens.COLON)) {\n                        colons += \":\";\n                    }\n\n                    if (tokenStream.match(Tokens.IDENT)) {\n                        pseudo = tokenStream.token().value;\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol - colons.length;\n                    } else if (tokenStream.peek() === Tokens.FUNCTION) {\n                        line = tokenStream.LT(1).startLine;\n                        col = tokenStream.LT(1).startCol - colons.length;\n                        pseudo = this._functional_pseudo();\n                    }\n\n                    if (pseudo) {\n                        pseudo = new SelectorSubPart(colons + pseudo, \"pseudo\", line, col);\n                    } else {\n                        var startLine = tokenStream.LT(1).startLine,\n                            startCol  = tokenStream.LT(0).startCol;\n                        throw new SyntaxError(\"Expected a `FUNCTION` or `IDENT` after colon at line \" + startLine + \", col \" + startCol + \".\", startLine, startCol);\n                    }\n                }\n\n                return pseudo;\n            },\n            _functional_pseudo: function() {\n\n                var tokenStream = this._tokenStream,\n                    value = null;\n\n                if (tokenStream.match(Tokens.FUNCTION)) {\n                    value = tokenStream.token().value;\n                    value += this._readWhitespace();\n                    value += this._expression();\n                    tokenStream.mustMatch(Tokens.RPAREN);\n                    value += \")\";\n                }\n\n                return value;\n            },\n            _expression: function() {\n\n                var tokenStream = this._tokenStream,\n                    value       = \"\";\n\n                while (tokenStream.match([Tokens.PLUS, Tokens.MINUS, Tokens.DIMENSION,\n                    Tokens.NUMBER, Tokens.STRING, Tokens.IDENT, Tokens.LENGTH,\n                    Tokens.FREQ, Tokens.ANGLE, Tokens.TIME,\n                    Tokens.RESOLUTION, Tokens.SLASH])) {\n\n                    value += tokenStream.token().value;\n                    value += this._readWhitespace();\n                }\n\n                return value.length ? value : null;\n\n            },\n            _negation: function() {\n\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    value       = \"\",\n                    arg,\n                    subpart     = null;\n\n                if (tokenStream.match(Tokens.NOT)) {\n                    value = tokenStream.token().value;\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n                    value += this._readWhitespace();\n                    arg = this._negation_arg();\n                    value += arg;\n                    value += this._readWhitespace();\n                    tokenStream.match(Tokens.RPAREN);\n                    value += tokenStream.token().value;\n\n                    subpart = new SelectorSubPart(value, \"not\", line, col);\n                    subpart.args.push(arg);\n                }\n\n                return subpart;\n            },\n            _negation_arg: function() {\n\n                var tokenStream = this._tokenStream,\n                    args        = [\n                        this._type_selector,\n                        this._universal,\n                        function() {\n                            return tokenStream.match(Tokens.HASH) ?\n                                    new SelectorSubPart(tokenStream.token().value, \"id\", tokenStream.token().startLine, tokenStream.token().startCol) :\n                                    null;\n                        },\n                        this._class,\n                        this._attrib,\n                        this._pseudo\n                    ],\n                    arg         = null,\n                    i           = 0,\n                    len         = args.length,\n                    line,\n                    col,\n                    part;\n\n                line = tokenStream.LT(1).startLine;\n                col = tokenStream.LT(1).startCol;\n\n                while (i < len && arg === null) {\n\n                    arg = args[i].call(this);\n                    i++;\n                }\n                if (arg === null) {\n                    this._unexpectedToken(tokenStream.LT(1));\n                }\n                if (arg.type === \"elementName\") {\n                    part = new SelectorPart(arg, [], arg.toString(), line, col);\n                } else {\n                    part = new SelectorPart(null, [arg], arg.toString(), line, col);\n                }\n\n                return part;\n            },\n\n            _declaration: function() {\n\n                var tokenStream  = this._tokenStream,\n                    property     = null,\n                    expr         = null,\n                    prio         = null,\n                    invalid      = null,\n                    propertyName = \"\";\n\n                property = this._property();\n                if (property !== null) {\n\n                    tokenStream.mustMatch(Tokens.COLON);\n                    this._readWhitespace();\n\n                    expr = this._expr();\n                    if (!expr || expr.length === 0) {\n                        this._unexpectedToken(tokenStream.LT(1));\n                    }\n\n                    prio = this._prio();\n                    propertyName = property.toString();\n                    if (this.options.starHack && property.hack === \"*\" ||\n                            this.options.underscoreHack && property.hack === \"_\") {\n\n                        propertyName = property.text;\n                    }\n\n                    try {\n                        this._validateProperty(propertyName, expr);\n                    } catch (ex) {\n                        invalid = ex;\n                    }\n\n                    this.fire({\n                        type:       \"property\",\n                        property:   property,\n                        value:      expr,\n                        important:  prio,\n                        line:       property.line,\n                        col:        property.col,\n                        invalid:    invalid\n                    });\n\n                    return true;\n                } else {\n                    return false;\n                }\n            },\n\n            _prio: function() {\n\n                var tokenStream = this._tokenStream,\n                    result      = tokenStream.match(Tokens.IMPORTANT_SYM);\n\n                this._readWhitespace();\n                return result;\n            },\n\n            _expr: function(inFunction) {\n\n                var values      = [],\n                    value       = null,\n                    operator    = null;\n\n                value = this._term(inFunction);\n                if (value !== null) {\n\n                    values.push(value);\n\n                    do {\n                        operator = this._operator(inFunction);\n                        if (operator) {\n                            values.push(operator);\n                        } /*else {\n                            values.push(new PropertyValue(valueParts, valueParts[0].line, valueParts[0].col));\n                            valueParts = [];\n                        }*/\n\n                        value = this._term(inFunction);\n\n                        if (value === null) {\n                            break;\n                        } else {\n                            values.push(value);\n                        }\n                    } while (true);\n                }\n\n                return values.length > 0 ? new PropertyValue(values, values[0].line, values[0].col) : null;\n            },\n\n            _term: function(inFunction) {\n\n                var tokenStream = this._tokenStream,\n                    unary       = null,\n                    value       = null,\n                    endChar     = null,\n                    part        = null,\n                    token,\n                    line,\n                    col;\n                unary = this._unary_operator();\n                if (unary !== null) {\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n                }\n                if (tokenStream.peek() === Tokens.IE_FUNCTION && this.options.ieFilters) {\n\n                    value = this._ie_function();\n                    if (unary === null) {\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                } else if (inFunction && tokenStream.match([Tokens.LPAREN, Tokens.LBRACE, Tokens.LBRACKET])) {\n\n                    token = tokenStream.token();\n                    endChar = token.endChar;\n                    value = token.value + this._expr(inFunction).text;\n                    if (unary === null) {\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                    tokenStream.mustMatch(Tokens.type(endChar));\n                    value += endChar;\n                    this._readWhitespace();\n                } else if (tokenStream.match([Tokens.NUMBER, Tokens.PERCENTAGE, Tokens.LENGTH,\n                    Tokens.ANGLE, Tokens.TIME,\n                    Tokens.FREQ, Tokens.STRING, Tokens.IDENT, Tokens.URI, Tokens.UNICODE_RANGE])) {\n\n                    value = tokenStream.token().value;\n                    if (unary === null) {\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                        part = PropertyValuePart.fromToken(tokenStream.token());\n                    }\n                    this._readWhitespace();\n                } else {\n                    token = this._hexcolor();\n                    if (token === null) {\n                        if (unary === null) {\n                            line = tokenStream.LT(1).startLine;\n                            col = tokenStream.LT(1).startCol;\n                        }\n                        if (value === null) {\n                            if (tokenStream.LA(3) === Tokens.EQUALS && this.options.ieFilters) {\n                                value = this._ie_function();\n                            } else {\n                                value = this._function();\n                            }\n                        }\n\n                    } else {\n                        value = token.value;\n                        if (unary === null) {\n                            line = token.startLine;\n                            col = token.startCol;\n                        }\n                    }\n\n                }\n\n                return part !== null ? part : value !== null ?\n                        new PropertyValuePart(unary !== null ? unary + value : value, line, col) :\n                        null;\n\n            },\n\n            _function: function() {\n\n                var tokenStream = this._tokenStream,\n                    functionText = null,\n                    expr        = null,\n                    lt;\n\n                if (tokenStream.match(Tokens.FUNCTION)) {\n                    functionText = tokenStream.token().value;\n                    this._readWhitespace();\n                    expr = this._expr(true);\n                    functionText += expr;\n                    if (this.options.ieFilters && tokenStream.peek() === Tokens.EQUALS) {\n                        do {\n\n                            if (this._readWhitespace()) {\n                                functionText += tokenStream.token().value;\n                            }\n                            if (tokenStream.LA(0) === Tokens.COMMA) {\n                                functionText += tokenStream.token().value;\n                            }\n\n                            tokenStream.match(Tokens.IDENT);\n                            functionText += tokenStream.token().value;\n\n                            tokenStream.match(Tokens.EQUALS);\n                            functionText += tokenStream.token().value;\n                            lt = tokenStream.peek();\n                            while (lt !== Tokens.COMMA && lt !== Tokens.S && lt !== Tokens.RPAREN) {\n                                tokenStream.get();\n                                functionText += tokenStream.token().value;\n                                lt = tokenStream.peek();\n                            }\n                        } while (tokenStream.match([Tokens.COMMA, Tokens.S]));\n                    }\n\n                    tokenStream.match(Tokens.RPAREN);\n                    functionText += \")\";\n                    this._readWhitespace();\n                }\n\n                return functionText;\n            },\n\n            _ie_function: function() {\n\n                var tokenStream = this._tokenStream,\n                    functionText = null,\n                    lt;\n                if (tokenStream.match([Tokens.IE_FUNCTION, Tokens.FUNCTION])) {\n                    functionText = tokenStream.token().value;\n\n                    do {\n\n                        if (this._readWhitespace()) {\n                            functionText += tokenStream.token().value;\n                        }\n                        if (tokenStream.LA(0) === Tokens.COMMA) {\n                            functionText += tokenStream.token().value;\n                        }\n\n                        tokenStream.match(Tokens.IDENT);\n                        functionText += tokenStream.token().value;\n\n                        tokenStream.match(Tokens.EQUALS);\n                        functionText += tokenStream.token().value;\n                        lt = tokenStream.peek();\n                        while (lt !== Tokens.COMMA && lt !== Tokens.S && lt !== Tokens.RPAREN) {\n                            tokenStream.get();\n                            functionText += tokenStream.token().value;\n                            lt = tokenStream.peek();\n                        }\n                    } while (tokenStream.match([Tokens.COMMA, Tokens.S]));\n\n                    tokenStream.match(Tokens.RPAREN);\n                    functionText += \")\";\n                    this._readWhitespace();\n                }\n\n                return functionText;\n            },\n\n            _hexcolor: function() {\n\n                var tokenStream = this._tokenStream,\n                    token = null,\n                    color;\n\n                if (tokenStream.match(Tokens.HASH)) {\n\n                    token = tokenStream.token();\n                    color = token.value;\n                    if (!/#[a-f0-9]{3,6}/i.test(color)) {\n                        throw new SyntaxError(\"Expected a hex color but found '\" + color + \"' at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n                    }\n                    this._readWhitespace();\n                }\n\n                return token;\n            },\n\n            _keyframes: function() {\n                var tokenStream = this._tokenStream,\n                    token,\n                    tt,\n                    name,\n                    prefix = \"\";\n\n                tokenStream.mustMatch(Tokens.KEYFRAMES_SYM);\n                token = tokenStream.token();\n                if (/^@-([^-]+)-/.test(token.value)) {\n                    prefix = RegExp.$1;\n                }\n\n                this._readWhitespace();\n                name = this._keyframe_name();\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.LBRACE);\n\n                this.fire({\n                    type:   \"startkeyframes\",\n                    name:   name,\n                    prefix: prefix,\n                    line:   token.startLine,\n                    col:    token.startCol\n                });\n\n                this._readWhitespace();\n                tt = tokenStream.peek();\n                while (tt === Tokens.IDENT || tt === Tokens.PERCENTAGE) {\n                    this._keyframe_rule();\n                    this._readWhitespace();\n                    tt = tokenStream.peek();\n                }\n\n                this.fire({\n                    type:   \"endkeyframes\",\n                    name:   name,\n                    prefix: prefix,\n                    line:   token.startLine,\n                    col:    token.startCol\n                });\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.RBRACE);\n                this._readWhitespace();\n\n            },\n\n            _keyframe_name: function() {\n                var tokenStream = this._tokenStream;\n\n                tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);\n                return SyntaxUnit.fromToken(tokenStream.token());\n            },\n\n            _keyframe_rule: function() {\n                var keyList = this._key_list();\n\n                this.fire({\n                    type:   \"startkeyframerule\",\n                    keys:   keyList,\n                    line:   keyList[0].line,\n                    col:    keyList[0].col\n                });\n\n                this._readDeclarations(true);\n\n                this.fire({\n                    type:   \"endkeyframerule\",\n                    keys:   keyList,\n                    line:   keyList[0].line,\n                    col:    keyList[0].col\n                });\n\n            },\n\n            _key_list: function() {\n                var tokenStream = this._tokenStream,\n                    keyList = [];\n                keyList.push(this._key());\n\n                this._readWhitespace();\n\n                while (tokenStream.match(Tokens.COMMA)) {\n                    this._readWhitespace();\n                    keyList.push(this._key());\n                    this._readWhitespace();\n                }\n\n                return keyList;\n            },\n\n            _key: function() {\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.PERCENTAGE)) {\n                    return SyntaxUnit.fromToken(tokenStream.token());\n                } else if (tokenStream.match(Tokens.IDENT)) {\n                    token = tokenStream.token();\n\n                    if (/from|to/i.test(token.value)) {\n                        return SyntaxUnit.fromToken(token);\n                    }\n\n                    tokenStream.unget();\n                }\n                this._unexpectedToken(tokenStream.LT(1));\n            },\n            _skipCruft: function() {\n                while (this._tokenStream.match([Tokens.S, Tokens.CDO, Tokens.CDC])) {\n                }\n            },\n            _readDeclarations: function(checkStart, readMargins) {\n                var tokenStream = this._tokenStream,\n                    tt;\n\n\n                this._readWhitespace();\n\n                if (checkStart) {\n                    tokenStream.mustMatch(Tokens.LBRACE);\n                }\n\n                this._readWhitespace();\n\n                try {\n\n                    while (true) {\n\n                        if (tokenStream.match(Tokens.SEMICOLON) || (readMargins && this._margin())) {\n                        } else if (this._declaration()) {\n                            if (!tokenStream.match(Tokens.SEMICOLON)) {\n                                break;\n                            }\n                        } else {\n                            break;\n                        }\n                        this._readWhitespace();\n                    }\n\n                    tokenStream.mustMatch(Tokens.RBRACE);\n                    this._readWhitespace();\n\n                } catch (ex) {\n                    if (ex instanceof SyntaxError && !this.options.strict) {\n                        this.fire({\n                            type:       \"error\",\n                            error:      ex,\n                            message:    ex.message,\n                            line:       ex.line,\n                            col:        ex.col\n                        });\n                        tt = tokenStream.advance([Tokens.SEMICOLON, Tokens.RBRACE]);\n                        if (tt === Tokens.SEMICOLON) {\n                            this._readDeclarations(false, readMargins);\n                        } else if (tt !== Tokens.EOF && tt !== Tokens.RBRACE) {\n                            throw ex;\n                        }\n\n                    } else {\n                        throw ex;\n                    }\n                }\n\n            },\n            _readWhitespace: function() {\n\n                var tokenStream = this._tokenStream,\n                    ws = \"\";\n\n                while (tokenStream.match(Tokens.S)) {\n                    ws += tokenStream.token().value;\n                }\n\n                return ws;\n            },\n            _unexpectedToken: function(token) {\n                throw new SyntaxError(\"Unexpected token '\" + token.value + \"' at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n            },\n            _verifyEnd: function() {\n                if (this._tokenStream.LA(1) !== Tokens.EOF) {\n                    this._unexpectedToken(this._tokenStream.LT(1));\n                }\n            },\n            _validateProperty: function(property, value) {\n                Validation.validate(property, value);\n            },\n\n            parse: function(input) {\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._stylesheet();\n            },\n\n            parseStyleSheet: function(input) {\n                return this.parse(input);\n            },\n\n            parseMediaQuery: function(input) {\n                this._tokenStream = new TokenStream(input, Tokens);\n                var result = this._media_query();\n                this._verifyEnd();\n                return result;\n            },\n            parsePropertyValue: function(input) {\n\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._expr();\n                this._readWhitespace();\n                this._verifyEnd();\n                return result;\n            },\n            parseRule: function(input) {\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._ruleset();\n                this._readWhitespace();\n                this._verifyEnd();\n                return result;\n            },\n            parseSelector: function(input) {\n\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._selector();\n                this._readWhitespace();\n                this._verifyEnd();\n                return result;\n            },\n            parseStyleAttribute: function(input) {\n                input += \"}\";   // for error recovery in _readDeclarations()\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readDeclarations();\n            }\n        };\n    for (prop in additions) {\n        if (Object.prototype.hasOwnProperty.call(additions, prop)) {\n            proto[prop] = additions[prop];\n        }\n    }\n\n    return proto;\n}();\n\n},{\"../util/EventTarget\":23,\"../util/SyntaxError\":25,\"../util/SyntaxUnit\":26,\"./Combinator\":2,\"./MediaFeature\":4,\"./MediaQuery\":5,\"./PropertyName\":8,\"./PropertyValue\":9,\"./PropertyValuePart\":11,\"./Selector\":13,\"./SelectorPart\":14,\"./SelectorSubPart\":15,\"./TokenStream\":17,\"./Tokens\":18,\"./Validation\":19}],7:[function(require,module,exports){\n\n\"use strict\";\n\nvar Properties = module.exports = {\n    __proto__: null,\n    \"align-items\"                       : \"flex-start | flex-end | center | baseline | stretch\",\n    \"align-content\"                     : \"flex-start | flex-end | center | space-between | space-around | stretch\",\n    \"align-self\"                        : \"auto | flex-start | flex-end | center | baseline | stretch\",\n    \"all\"                               : \"initial | inherit | unset\",\n    \"-webkit-align-items\"               : \"flex-start | flex-end | center | baseline | stretch\",\n    \"-webkit-align-content\"             : \"flex-start | flex-end | center | space-between | space-around | stretch\",\n    \"-webkit-align-self\"                : \"auto | flex-start | flex-end | center | baseline | stretch\",\n    \"alignment-adjust\"                  : \"auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | <percentage> | <length>\",\n    \"alignment-baseline\"                : \"auto | baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"animation\"                         : 1,\n    \"animation-delay\"                   : \"<time>#\",\n    \"animation-direction\"               : \"<single-animation-direction>#\",\n    \"animation-duration\"                : \"<time>#\",\n    \"animation-fill-mode\"               : \"[ none | forwards | backwards | both ]#\",\n    \"animation-iteration-count\"         : \"[ <number> | infinite ]#\",\n    \"animation-name\"                    : \"[ none | <single-animation-name> ]#\",\n    \"animation-play-state\"              : \"[ running | paused ]#\",\n    \"animation-timing-function\"         : 1,\n    \"-moz-animation-delay\"              : \"<time>#\",\n    \"-moz-animation-direction\"          : \"[ normal | alternate ]#\",\n    \"-moz-animation-duration\"           : \"<time>#\",\n    \"-moz-animation-iteration-count\"    : \"[ <number> | infinite ]#\",\n    \"-moz-animation-name\"               : \"[ none | <single-animation-name> ]#\",\n    \"-moz-animation-play-state\"         : \"[ running | paused ]#\",\n\n    \"-ms-animation-delay\"               : \"<time>#\",\n    \"-ms-animation-direction\"           : \"[ normal | alternate ]#\",\n    \"-ms-animation-duration\"            : \"<time>#\",\n    \"-ms-animation-iteration-count\"     : \"[ <number> | infinite ]#\",\n    \"-ms-animation-name\"                : \"[ none | <single-animation-name> ]#\",\n    \"-ms-animation-play-state\"          : \"[ running | paused ]#\",\n\n    \"-webkit-animation-delay\"           : \"<time>#\",\n    \"-webkit-animation-direction\"       : \"[ normal | alternate ]#\",\n    \"-webkit-animation-duration\"        : \"<time>#\",\n    \"-webkit-animation-fill-mode\"       : \"[ none | forwards | backwards | both ]#\",\n    \"-webkit-animation-iteration-count\" : \"[ <number> | infinite ]#\",\n    \"-webkit-animation-name\"            : \"[ none | <single-animation-name> ]#\",\n    \"-webkit-animation-play-state\"      : \"[ running | paused ]#\",\n\n    \"-o-animation-delay\"                : \"<time>#\",\n    \"-o-animation-direction\"            : \"[ normal | alternate ]#\",\n    \"-o-animation-duration\"             : \"<time>#\",\n    \"-o-animation-iteration-count\"      : \"[ <number> | infinite ]#\",\n    \"-o-animation-name\"                 : \"[ none | <single-animation-name> ]#\",\n    \"-o-animation-play-state\"           : \"[ running | paused ]#\",\n\n    \"appearance\"                        : \"none | auto\",\n    \"-moz-appearance\"                   : \"none | button | button-arrow-down | button-arrow-next | button-arrow-previous | button-arrow-up | button-bevel | button-focus | caret | checkbox | checkbox-container | checkbox-label | checkmenuitem | dualbutton | groupbox | listbox | listitem | menuarrow | menubar | menucheckbox | menuimage | menuitem | menuitemtext | menulist | menulist-button | menulist-text | menulist-textfield | menupopup | menuradio | menuseparator | meterbar | meterchunk | progressbar | progressbar-vertical | progresschunk | progresschunk-vertical | radio | radio-container | radio-label | radiomenuitem | range | range-thumb | resizer | resizerpanel | scale-horizontal | scalethumbend | scalethumb-horizontal | scalethumbstart | scalethumbtick | scalethumb-vertical | scale-vertical | scrollbarbutton-down | scrollbarbutton-left | scrollbarbutton-right | scrollbarbutton-up | scrollbarthumb-horizontal | scrollbarthumb-vertical | scrollbartrack-horizontal | scrollbartrack-vertical | searchfield | separator | sheet | spinner | spinner-downbutton | spinner-textfield | spinner-upbutton | splitter | statusbar | statusbarpanel | tab | tabpanel | tabpanels | tab-scroll-arrow-back | tab-scroll-arrow-forward | textfield | textfield-multiline | toolbar | toolbarbutton | toolbarbutton-dropdown | toolbargripper | toolbox | tooltip | treeheader | treeheadercell | treeheadersortarrow | treeitem | treeline | treetwisty | treetwistyopen | treeview | -moz-mac-unified-toolbar | -moz-win-borderless-glass | -moz-win-browsertabbar-toolbox | -moz-win-communicationstext | -moz-win-communications-toolbox | -moz-win-exclude-glass | -moz-win-glass | -moz-win-mediatext | -moz-win-media-toolbox | -moz-window-button-box | -moz-window-button-box-maximized | -moz-window-button-close | -moz-window-button-maximize | -moz-window-button-minimize | -moz-window-button-restore | -moz-window-frame-bottom | -moz-window-frame-left | -moz-window-frame-right | -moz-window-titlebar | -moz-window-titlebar-maximized\",\n    \"-ms-appearance\"                    : \"none | icon | window | desktop | workspace | document | tooltip | dialog | button | push-button | hyperlink | radio | radio-button | checkbox | menu-item | tab | menu | menubar | pull-down-menu | pop-up-menu | list-menu | radio-group | checkbox-group | outline-tree | range | field | combo-box | signature | password | normal\",\n    \"-webkit-appearance\"                : \"none | button | button-bevel | caps-lock-indicator | caret | checkbox | default-button | listbox | listitem | media-fullscreen-button | media-mute-button | media-play-button | media-seek-back-button | media-seek-forward-button | media-slider | media-sliderthumb | menulist | menulist-button | menulist-text | menulist-textfield | push-button | radio | searchfield | searchfield-cancel-button | searchfield-decoration | searchfield-results-button | searchfield-results-decoration | slider-horizontal | slider-vertical | sliderthumb-horizontal | sliderthumb-vertical | square-button | textarea | textfield | scrollbarbutton-down | scrollbarbutton-left | scrollbarbutton-right | scrollbarbutton-up | scrollbargripper-horizontal | scrollbargripper-vertical | scrollbarthumb-horizontal | scrollbarthumb-vertical | scrollbartrack-horizontal | scrollbartrack-vertical\",\n    \"-o-appearance\"                     : \"none | window | desktop | workspace | document | tooltip | dialog | button | push-button | hyperlink | radio | radio-button | checkbox | menu-item | tab | menu | menubar | pull-down-menu | pop-up-menu | list-menu | radio-group | checkbox-group | outline-tree | range | field | combo-box | signature | password | normal\",\n\n    \"azimuth\"                           : \"<azimuth>\",\n    \"backface-visibility\"               : \"visible | hidden\",\n    \"background\"                        : 1,\n    \"background-attachment\"             : \"<attachment>#\",\n    \"background-clip\"                   : \"<box>#\",\n    \"background-color\"                  : \"<color>\",\n    \"background-image\"                  : \"<bg-image>#\",\n    \"background-origin\"                 : \"<box>#\",\n    \"background-position\"               : \"<bg-position>\",\n    \"background-repeat\"                 : \"<repeat-style>#\",\n    \"background-size\"                   : \"<bg-size>#\",\n    \"baseline-shift\"                    : \"baseline | sub | super | <percentage> | <length>\",\n    \"behavior\"                          : 1,\n    \"binding\"                           : 1,\n    \"bleed\"                             : \"<length>\",\n    \"bookmark-label\"                    : \"<content> | <attr> | <string>\",\n    \"bookmark-level\"                    : \"none | <integer>\",\n    \"bookmark-state\"                    : \"open | closed\",\n    \"bookmark-target\"                   : \"none | <uri> | <attr>\",\n    \"border\"                            : \"<border-width> || <border-style> || <color>\",\n    \"border-bottom\"                     : \"<border-width> || <border-style> || <color>\",\n    \"border-bottom-color\"               : \"<color>\",\n    \"border-bottom-left-radius\"         :  \"<x-one-radius>\",\n    \"border-bottom-right-radius\"        :  \"<x-one-radius>\",\n    \"border-bottom-style\"               : \"<border-style>\",\n    \"border-bottom-width\"               : \"<border-width>\",\n    \"border-collapse\"                   : \"collapse | separate\",\n    \"border-color\"                      : \"<color>{1,4}\",\n    \"border-image\"                      : 1,\n    \"border-image-outset\"               : \"[ <length> | <number> ]{1,4}\",\n    \"border-image-repeat\"               : \"[ stretch | repeat | round | space ]{1,2}\",\n    \"border-image-slice\"                : \"<border-image-slice>\",\n    \"border-image-source\"               : \"<image> | none\",\n    \"border-image-width\"                : \"[ <length> | <percentage> | <number> | auto ]{1,4}\",\n    \"border-left\"                       : \"<border-width> || <border-style> || <color>\",\n    \"border-left-color\"                 : \"<color>\",\n    \"border-left-style\"                 : \"<border-style>\",\n    \"border-left-width\"                 : \"<border-width>\",\n    \"border-radius\"                     : \"<border-radius>\",\n    \"border-right\"                      : \"<border-width> || <border-style> || <color>\",\n    \"border-right-color\"                : \"<color>\",\n    \"border-right-style\"                : \"<border-style>\",\n    \"border-right-width\"                : \"<border-width>\",\n    \"border-spacing\"                    : \"<length>{1,2}\",\n    \"border-style\"                      : \"<border-style>{1,4}\",\n    \"border-top\"                        : \"<border-width> || <border-style> || <color>\",\n    \"border-top-color\"                  : \"<color>\",\n    \"border-top-left-radius\"            : \"<x-one-radius>\",\n    \"border-top-right-radius\"           : \"<x-one-radius>\",\n    \"border-top-style\"                  : \"<border-style>\",\n    \"border-top-width\"                  : \"<border-width>\",\n    \"border-width\"                      : \"<border-width>{1,4}\",\n    \"bottom\"                            : \"<margin-width>\",\n    \"-moz-box-align\"                    : \"start | end | center | baseline | stretch\",\n    \"-moz-box-decoration-break\"         : \"slice | clone\",\n    \"-moz-box-direction\"                : \"normal | reverse\",\n    \"-moz-box-flex\"                     : \"<number>\",\n    \"-moz-box-flex-group\"               : \"<integer>\",\n    \"-moz-box-lines\"                    : \"single | multiple\",\n    \"-moz-box-ordinal-group\"            : \"<integer>\",\n    \"-moz-box-orient\"                   : \"horizontal | vertical | inline-axis | block-axis\",\n    \"-moz-box-pack\"                     : \"start | end | center | justify\",\n    \"-o-box-decoration-break\"           : \"slice | clone\",\n    \"-webkit-box-align\"                 : \"start | end | center | baseline | stretch\",\n    \"-webkit-box-decoration-break\"      : \"slice | clone\",\n    \"-webkit-box-direction\"             : \"normal | reverse\",\n    \"-webkit-box-flex\"                  : \"<number>\",\n    \"-webkit-box-flex-group\"            : \"<integer>\",\n    \"-webkit-box-lines\"                 : \"single | multiple\",\n    \"-webkit-box-ordinal-group\"         : \"<integer>\",\n    \"-webkit-box-orient\"                : \"horizontal | vertical | inline-axis | block-axis\",\n    \"-webkit-box-pack\"                  : \"start | end | center | justify\",\n    \"box-decoration-break\"              : \"slice | clone\",\n    \"box-shadow\"                        : \"<box-shadow>\",\n    \"box-sizing\"                        : \"content-box | border-box\",\n    \"break-after\"                       : \"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\n    \"break-before\"                      : \"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\n    \"break-inside\"                      : \"auto | avoid | avoid-page | avoid-column\",\n    \"caption-side\"                      : \"top | bottom\",\n    \"clear\"                             : \"none | right | left | both\",\n    \"clip\"                              : \"<shape> | auto\",\n    \"-webkit-clip-path\"                 : \"<clip-source> | <clip-path> | none\",\n    \"clip-path\"                         : \"<clip-source> | <clip-path> | none\",\n    \"clip-rule\"                         : \"nonzero | evenodd\",\n    \"color\"                             : \"<color>\",\n    \"color-interpolation\"               : \"auto | sRGB | linearRGB\",\n    \"color-interpolation-filters\"       : \"auto | sRGB | linearRGB\",\n    \"color-profile\"                     : 1,\n    \"color-rendering\"                   : \"auto | optimizeSpeed | optimizeQuality\",\n    \"column-count\"                      : \"<integer> | auto\",                       // https    ://www.w3.org/TR/css3-multicol/\n    \"column-fill\"                       : \"auto | balance\",\n    \"column-gap\"                        : \"<length> | normal\",\n    \"column-rule\"                       : \"<border-width> || <border-style> || <color>\",\n    \"column-rule-color\"                 : \"<color>\",\n    \"column-rule-style\"                 : \"<border-style>\",\n    \"column-rule-width\"                 : \"<border-width>\",\n    \"column-span\"                       : \"none | all\",\n    \"column-width\"                      : \"<length> | auto\",\n    \"columns\"                           : 1,\n    \"content\"                           : 1,\n    \"counter-increment\"                 : 1,\n    \"counter-reset\"                     : 1,\n    \"crop\"                              : \"<shape> | auto\",\n    \"cue\"                               : \"cue-after | cue-before\",\n    \"cue-after\"                         : 1,\n    \"cue-before\"                        : 1,\n    \"cursor\"                            : 1,\n    \"direction\"                         : \"ltr | rtl\",\n    \"display\"                           : \"inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | grid | inline-grid | run-in | ruby | ruby-base | ruby-text | ruby-base-container | ruby-text-container | contents | none | -moz-box | -moz-inline-block | -moz-inline-box | -moz-inline-grid | -moz-inline-stack | -moz-inline-table | -moz-grid | -moz-grid-group | -moz-grid-line | -moz-groupbox | -moz-deck | -moz-popup | -moz-stack | -moz-marker | -webkit-box | -webkit-inline-box | -ms-flexbox | -ms-inline-flexbox | flex | -webkit-flex | inline-flex | -webkit-inline-flex\",\n    \"dominant-baseline\"                 : \"auto | use-script | no-change | reset-size | ideographic | alphabetic | hanging | mathematical | central | middle | text-after-edge | text-before-edge\",\n    \"drop-initial-after-adjust\"         : \"central | middle | after-edge | text-after-edge | ideographic | alphabetic | mathematical | <percentage> | <length>\",\n    \"drop-initial-after-align\"          : \"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"drop-initial-before-adjust\"        : \"before-edge | text-before-edge | central | middle | hanging | mathematical | <percentage> | <length>\",\n    \"drop-initial-before-align\"         : \"caps-height | baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"drop-initial-size\"                 : \"auto | line | <length> | <percentage>\",\n    \"drop-initial-value\"                : \"<integer>\",\n    \"elevation\"                         : \"<angle> | below | level | above | higher | lower\",\n    \"empty-cells\"                       : \"show | hide\",\n    \"enable-background\"                 : 1,\n    \"fill\"                              : \"<paint>\",\n    \"fill-opacity\"                      : \"<opacity-value>\",\n    \"fill-rule\"                         : \"nonzero | evenodd\",\n    \"filter\"                            : \"<filter-function-list> | none\",\n    \"fit\"                               : \"fill | hidden | meet | slice\",\n    \"fit-position\"                      : 1,\n    \"flex\"                              : \"<flex>\",\n    \"flex-basis\"                        : \"<width>\",\n    \"flex-direction\"                    : \"row | row-reverse | column | column-reverse\",\n    \"flex-flow\"                         : \"<flex-direction> || <flex-wrap>\",\n    \"flex-grow\"                         : \"<number>\",\n    \"flex-shrink\"                       : \"<number>\",\n    \"flex-wrap\"                         : \"nowrap | wrap | wrap-reverse\",\n    \"-webkit-flex\"                      : \"<flex>\",\n    \"-webkit-flex-basis\"                : \"<width>\",\n    \"-webkit-flex-direction\"            : \"row | row-reverse | column | column-reverse\",\n    \"-webkit-flex-flow\"                 : \"<flex-direction> || <flex-wrap>\",\n    \"-webkit-flex-grow\"                 : \"<number>\",\n    \"-webkit-flex-shrink\"               : \"<number>\",\n    \"-webkit-flex-wrap\"                 : \"nowrap | wrap | wrap-reverse\",\n    \"-ms-flex\"                          : \"<flex>\",\n    \"-ms-flex-align\"                    : \"start | end | center | stretch | baseline\",\n    \"-ms-flex-direction\"                : \"row | row-reverse | column | column-reverse\",\n    \"-ms-flex-order\"                    : \"<number>\",\n    \"-ms-flex-pack\"                     : \"start | end | center | justify | distribute\",\n    \"-ms-flex-wrap\"                     : \"nowrap | wrap | wrap-reverse\",\n    \"float\"                             : \"left | right | none\",\n    \"float-offset\"                      : 1,\n    \"flood-color\"                       : 1,\n    \"flood-opacity\"                     : \"<opacity-value>\",\n    \"font\"                              : \"<font-shorthand> | caption | icon | menu | message-box | small-caption | status-bar\",\n    \"font-family\"                       : \"<font-family>\",\n    \"font-feature-settings\"             : \"<feature-tag-value> | normal\",\n    \"font-kerning\"                      : \"auto | normal | none\",\n    \"font-size\"                         : \"<font-size>\",\n    \"font-size-adjust\"                  : \"<number> | none\",\n    \"font-stretch\"                      : \"<font-stretch>\",\n    \"font-style\"                        : \"<font-style>\",\n    \"font-variant\"                      : \"<font-variant> | normal | none\",\n    \"font-variant-alternates\"           : \"<font-variant-alternates> | normal\",\n    \"font-variant-caps\"                 : \"<font-variant-caps> | normal\",\n    \"font-variant-east-asian\"           : \"<font-variant-east-asian> | normal\",\n    \"font-variant-ligatures\"            : \"<font-variant-ligatures> | normal | none\",\n    \"font-variant-numeric\"              : \"<font-variant-numeric> | normal\",\n    \"font-variant-position\"             : \"normal | sub | super\",\n    \"font-weight\"                       : \"<font-weight>\",\n    \"gap\"                               : \"[ <length> | <percentage> ]{1,2}\",\n    \"glyph-orientation-horizontal\"      : \"<glyph-angle>\",\n    \"glyph-orientation-vertical\"        : \"auto | <glyph-angle>\",\n    \"grid\"                              : 1,\n    \"grid-area\"                         : 1,\n    \"grid-auto-columns\"                 : 1,\n    \"grid-auto-flow\"                    : 1,\n    \"grid-auto-position\"                : 1,\n    \"grid-auto-rows\"                    : 1,\n    \"grid-cell-stacking\"                : \"columns | rows | layer\",\n    \"grid-column\"                       : 1,\n    \"grid-columns\"                      : 1,\n    \"grid-column-align\"                 : \"start | end | center | stretch\",\n    \"grid-column-sizing\"                : 1,\n    \"grid-column-start\"                 : 1,\n    \"grid-column-end\"                   : 1,\n    \"grid-column-span\"                  : \"<integer>\",\n    \"grid-flow\"                         : \"none | rows | columns\",\n    \"grid-gap\"                          : \"[ <length> | <percentage> ]{1,2}\",\n    \"grid-layer\"                        : \"<integer>\",\n    \"grid-row\"                          : 1,\n    \"grid-rows\"                         : 1,\n    \"grid-row-align\"                    : \"start | end | center | stretch\",\n    \"grid-row-gap\"                      : 1,\n    \"grid-row-start\"                    : 1,\n    \"grid-row-end\"                      : 1,\n    \"grid-row-span\"                     : \"<integer>\",\n    \"grid-row-sizing\"                   : 1,\n    \"grid-template\"                     : 1,\n    \"grid-template-areas\"               : 1,\n    \"grid-template-columns\"             : 1,\n    \"grid-template-rows\"                : 1,\n    \"hanging-punctuation\"               : 1,\n    \"height\"                            : \"<margin-width> | <content-sizing>\",\n    \"hyphenate-after\"                   : \"<integer> | auto\",\n    \"hyphenate-before\"                  : \"<integer> | auto\",\n    \"hyphenate-character\"               : \"<string> | auto\",\n    \"hyphenate-lines\"                   : \"no-limit | <integer>\",\n    \"hyphenate-resource\"                : 1,\n    \"hyphens\"                           : \"none | manual | auto\",\n    \"icon\"                              : 1,\n    \"image-orientation\"                 : \"angle | auto\",\n    \"image-rendering\"                   : \"auto | optimizeSpeed | optimizeQuality\",\n    \"image-resolution\"                  : 1,\n    \"ime-mode\"                          : \"auto | normal | active | inactive | disabled\",\n    \"inline-box-align\"                  : \"last | <integer>\",\n    \"justify-content\"                   : \"flex-start | flex-end | center | space-between | space-around | space-evenly | stretch\",\n    \"-webkit-justify-content\"           : \"flex-start | flex-end | center | space-between | space-around | space-evenly | stretch\",\n    \"kerning\"                           : \"auto | <length>\",\n    \"left\"                              : \"<margin-width>\",\n    \"letter-spacing\"                    : \"<length> | normal\",\n    \"line-height\"                       : \"<line-height>\",\n    \"line-break\"                        : \"auto | loose | normal | strict\",\n    \"line-stacking\"                     : 1,\n    \"line-stacking-ruby\"                : \"exclude-ruby | include-ruby\",\n    \"line-stacking-shift\"               : \"consider-shifts | disregard-shifts\",\n    \"line-stacking-strategy\"            : \"inline-line-height | block-line-height | max-height | grid-height\",\n    \"list-style\"                        : 1,\n    \"list-style-image\"                  : \"<uri> | none\",\n    \"list-style-position\"               : \"inside | outside\",\n    \"list-style-type\"                   : \"disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none\",\n    \"margin\"                            : \"<margin-width>{1,4}\",\n    \"margin-bottom\"                     : \"<margin-width>\",\n    \"margin-left\"                       : \"<margin-width>\",\n    \"margin-right\"                      : \"<margin-width>\",\n    \"margin-top\"                        : \"<margin-width>\",\n    \"mark\"                              : 1,\n    \"mark-after\"                        : 1,\n    \"mark-before\"                       : 1,\n    \"marker\"                            : 1,\n    \"marker-end\"                        : 1,\n    \"marker-mid\"                        : 1,\n    \"marker-start\"                      : 1,\n    \"marks\"                             : 1,\n    \"marquee-direction\"                 : 1,\n    \"marquee-play-count\"                : 1,\n    \"marquee-speed\"                     : 1,\n    \"marquee-style\"                     : 1,\n    \"mask\"                              : 1,\n    \"max-height\"                        : \"<length> | <percentage> | <content-sizing> | none\",\n    \"max-width\"                         : \"<length> | <percentage> | <content-sizing> | none\",\n    \"min-height\"                        : \"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats\",\n    \"min-width\"                         : \"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats\",\n    \"mix-blend-mode\"                    : \"<blend-mode>\",\n    \"move-to\"                           : 1,\n    \"nav-down\"                          : 1,\n    \"nav-index\"                         : 1,\n    \"nav-left\"                          : 1,\n    \"nav-right\"                         : 1,\n    \"nav-up\"                            : 1,\n    \"object-fit\"                        : \"fill | contain | cover | none | scale-down\",\n    \"object-position\"                   : \"<position>\",\n    \"opacity\"                           : \"<opacity-value>\",\n    \"order\"                             : \"<integer>\",\n    \"-webkit-order\"                     : \"<integer>\",\n    \"orphans\"                           : \"<integer>\",\n    \"outline\"                           : 1,\n    \"outline-color\"                     : \"<color> | invert\",\n    \"outline-offset\"                    : 1,\n    \"outline-style\"                     : \"<border-style>\",\n    \"outline-width\"                     : \"<border-width>\",\n    \"overflow\"                          : \"visible | hidden | scroll | auto\",\n    \"overflow-style\"                    : 1,\n    \"overflow-wrap\"                     : \"normal | break-word\",\n    \"overflow-x\"                        : 1,\n    \"overflow-y\"                        : 1,\n    \"padding\"                           : \"<padding-width>{1,4}\",\n    \"padding-bottom\"                    : \"<padding-width>\",\n    \"padding-left\"                      : \"<padding-width>\",\n    \"padding-right\"                     : \"<padding-width>\",\n    \"padding-top\"                       : \"<padding-width>\",\n    \"page\"                              : 1,\n    \"page-break-after\"                  : \"auto | always | avoid | left | right\",\n    \"page-break-before\"                 : \"auto | always | avoid | left | right\",\n    \"page-break-inside\"                 : \"auto | avoid\",\n    \"page-policy\"                       : 1,\n    \"pause\"                             : 1,\n    \"pause-after\"                       : 1,\n    \"pause-before\"                      : 1,\n    \"perspective\"                       : 1,\n    \"perspective-origin\"                : 1,\n    \"phonemes\"                          : 1,\n    \"pitch\"                             : 1,\n    \"pitch-range\"                       : 1,\n    \"play-during\"                       : 1,\n    \"pointer-events\"                    : \"auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all\",\n    \"position\"                          : \"static | relative | absolute | fixed | sticky | -webkit-sticky\",\n    \"presentation-level\"                : 1,\n    \"punctuation-trim\"                  : 1,\n    \"quotes\"                            : 1,\n    \"rendering-intent\"                  : 1,\n    \"resize\"                            : 1,\n    \"rest\"                              : 1,\n    \"rest-after\"                        : 1,\n    \"rest-before\"                       : 1,\n    \"richness\"                          : 1,\n    \"right\"                             : \"<margin-width>\",\n    \"rotation\"                          : 1,\n    \"rotation-point\"                    : 1,\n    \"ruby-align\"                        : 1,\n    \"ruby-overhang\"                     : 1,\n    \"ruby-position\"                     : 1,\n    \"ruby-span\"                         : 1,\n    \"shape-rendering\"                   : \"auto | optimizeSpeed | crispEdges | geometricPrecision\",\n    \"size\"                              : 1,\n    \"speak\"                             : \"normal | none | spell-out\",\n    \"speak-header\"                      : \"once | always\",\n    \"speak-numeral\"                     : \"digits | continuous\",\n    \"speak-punctuation\"                 : \"code | none\",\n    \"speech-rate\"                       : 1,\n    \"src\"                               : 1,\n    \"stop-color\"                        : 1,\n    \"stop-opacity\"                      : \"<opacity-value>\",\n    \"stress\"                            : 1,\n    \"string-set\"                        : 1,\n    \"stroke\"                            : \"<paint>\",\n    \"stroke-dasharray\"                  : \"none | <dasharray>\",\n    \"stroke-dashoffset\"                 : \"<percentage> | <length>\",\n    \"stroke-linecap\"                    : \"butt | round | square\",\n    \"stroke-linejoin\"                   : \"miter | round | bevel\",\n    \"stroke-miterlimit\"                 : \"<miterlimit>\",\n    \"stroke-opacity\"                    : \"<opacity-value>\",\n    \"stroke-width\"                      : \"<percentage> | <length>\",\n\n    \"table-layout\"                      : \"auto | fixed\",\n    \"tab-size\"                          : \"<integer> | <length>\",\n    \"target\"                            : 1,\n    \"target-name\"                       : 1,\n    \"target-new\"                        : 1,\n    \"target-position\"                   : 1,\n    \"text-align\"                        : \"left | right | center | justify | match-parent | start | end\",\n    \"text-align-last\"                   : 1,\n    \"text-anchor\"                       : \"start | middle | end\",\n    \"text-decoration\"                   : \"<text-decoration-line> || <text-decoration-style> || <text-decoration-color>\",\n    \"text-decoration-color\"             : \"<text-decoration-color>\",\n    \"text-decoration-line\"              : \"<text-decoration-line>\",\n    \"text-decoration-style\"             : \"<text-decoration-style>\",\n    \"text-decoration-skip\"              : \"none | [ objects || spaces || ink || edges || box-decoration ]\",\n    \"-webkit-text-decoration-skip\"      : \"none | [ objects || spaces || ink || edges || box-decoration ]\",\n    \"text-underline-position\"           : \"auto | [ under || [ left | right ] ]\",\n    \"text-emphasis\"                     : 1,\n    \"text-height\"                       : 1,\n    \"text-indent\"                       : \"<length> | <percentage>\",\n    \"text-justify\"                      : \"auto | none | inter-word | inter-ideograph | inter-cluster | distribute | kashida\",\n    \"text-outline\"                      : 1,\n    \"text-overflow\"                     : 1,\n    \"text-rendering\"                    : \"auto | optimizeSpeed | optimizeLegibility | geometricPrecision\",\n    \"text-shadow\"                       : 1,\n    \"text-transform\"                    : \"capitalize | uppercase | lowercase | none\",\n    \"text-wrap\"                         : \"normal | none | avoid\",\n    \"top\"                               : \"<margin-width>\",\n    \"-ms-touch-action\"                  : \"auto | none | pan-x | pan-y | pan-left | pan-right | pan-up | pan-down | manipulation\",\n    \"touch-action\"                      : \"auto | none | pan-x | pan-y | pan-left | pan-right | pan-up | pan-down | manipulation\",\n    \"transform\"                         : 1,\n    \"transform-origin\"                  : 1,\n    \"transform-style\"                   : 1,\n    \"transition\"                        : 1,\n    \"transition-delay\"                  : 1,\n    \"transition-duration\"               : 1,\n    \"transition-property\"               : 1,\n    \"transition-timing-function\"        : 1,\n    \"unicode-bidi\"                      : \"normal | embed | isolate | bidi-override | isolate-override | plaintext\",\n    \"user-modify\"                       : \"read-only | read-write | write-only\",\n    \"user-select\"                       : \"auto | text | none | contain | all\",\n    \"vertical-align\"                    : \"auto | use-script | baseline | sub | super | top | text-top | central | middle | bottom | text-bottom | <percentage> | <length>\",\n    \"visibility\"                        : \"visible | hidden | collapse\",\n    \"voice-balance\"                     : 1,\n    \"voice-duration\"                    : 1,\n    \"voice-family\"                      : 1,\n    \"voice-pitch\"                       : 1,\n    \"voice-pitch-range\"                 : 1,\n    \"voice-rate\"                        : 1,\n    \"voice-stress\"                      : 1,\n    \"voice-volume\"                      : 1,\n    \"volume\"                            : 1,\n    \"white-space\"                       : \"normal | pre | nowrap | pre-wrap | pre-line | -pre-wrap | -o-pre-wrap | -moz-pre-wrap | -hp-pre-wrap\",   // https    ://perishablepress.com/wrapping-content/\n    \"white-space-collapse\"              : 1,\n    \"widows\"                            : \"<integer>\",\n    \"width\"                             : \"<length> | <percentage> | <content-sizing> | auto\",\n    \"will-change\"                       : \"<will-change>\",\n    \"word-break\"                        : \"normal | keep-all | break-all | break-word\",\n    \"word-spacing\"                      : \"<length> | normal\",\n    \"word-wrap\"                         : \"normal | break-word\",\n    \"writing-mode\"                      : \"horizontal-tb | vertical-rl | vertical-lr | lr-tb | rl-tb | tb-rl | bt-rl | tb-lr | bt-lr | lr-bt | rl-bt | lr | rl | tb\",\n    \"z-index\"                           : \"<integer> | auto\",\n    \"zoom\"                              : \"<number> | <percentage> | normal\"\n};\n\n},{}],8:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = PropertyName;\n\nvar SyntaxUnit = require(\"../util/SyntaxUnit\");\n\nvar Parser = require(\"./Parser\");\nfunction PropertyName(text, hack, line, col) {\n\n    SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_NAME_TYPE);\n    this.hack = hack;\n\n}\n\nPropertyName.prototype = new SyntaxUnit();\nPropertyName.prototype.constructor = PropertyName;\nPropertyName.prototype.toString = function() {\n    return (this.hack ? this.hack : \"\") + this.text;\n};\n\n},{\"../util/SyntaxUnit\":26,\"./Parser\":6}],9:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = PropertyValue;\n\nvar SyntaxUnit = require(\"../util/SyntaxUnit\");\n\nvar Parser = require(\"./Parser\");\nfunction PropertyValue(parts, line, col) {\n\n    SyntaxUnit.call(this, parts.join(\" \"), line, col, Parser.PROPERTY_VALUE_TYPE);\n    this.parts = parts;\n\n}\n\nPropertyValue.prototype = new SyntaxUnit();\nPropertyValue.prototype.constructor = PropertyValue;\n\n\n},{\"../util/SyntaxUnit\":26,\"./Parser\":6}],10:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = PropertyValueIterator;\nfunction PropertyValueIterator(value) {\n    this._i = 0;\n    this._parts = value.parts;\n    this._marks = [];\n    this.value = value;\n\n}\nPropertyValueIterator.prototype.count = function() {\n    return this._parts.length;\n};\nPropertyValueIterator.prototype.isFirst = function() {\n    return this._i === 0;\n};\nPropertyValueIterator.prototype.hasNext = function() {\n    return this._i < this._parts.length;\n};\nPropertyValueIterator.prototype.mark = function() {\n    this._marks.push(this._i);\n};\nPropertyValueIterator.prototype.peek = function(count) {\n    return this.hasNext() ? this._parts[this._i + (count || 0)] : null;\n};\nPropertyValueIterator.prototype.next = function() {\n    return this.hasNext() ? this._parts[this._i++] : null;\n};\nPropertyValueIterator.prototype.previous = function() {\n    return this._i > 0 ? this._parts[--this._i] : null;\n};\nPropertyValueIterator.prototype.restore = function() {\n    if (this._marks.length) {\n        this._i = this._marks.pop();\n    }\n};\nPropertyValueIterator.prototype.drop = function() {\n    this._marks.pop();\n};\n\n},{}],11:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = PropertyValuePart;\n\nvar SyntaxUnit = require(\"../util/SyntaxUnit\");\n\nvar Colors = require(\"./Colors\");\nvar Parser = require(\"./Parser\");\nvar Tokens = require(\"./Tokens\");\nfunction PropertyValuePart(text, line, col, optionalHint) {\n    var hint = optionalHint || {};\n\n    SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_VALUE_PART_TYPE);\n    this.type = \"unknown\";\n\n    var temp;\n    if (/^([+-]?[\\d.]+)([a-z]+)$/i.test(text)) {  // dimension\n        this.type = \"dimension\";\n        this.value = Number(RegExp.$1);\n        this.units = RegExp.$2;\n        switch (this.units.toLowerCase()) {\n\n            case \"em\":\n            case \"rem\":\n            case \"ex\":\n            case \"px\":\n            case \"cm\":\n            case \"mm\":\n            case \"in\":\n            case \"pt\":\n            case \"pc\":\n            case \"ch\":\n            case \"vh\":\n            case \"vw\":\n            case \"vmax\":\n            case \"vmin\":\n                this.type = \"length\";\n                break;\n\n            case \"fr\":\n                this.type = \"grid\";\n                break;\n\n            case \"deg\":\n            case \"rad\":\n            case \"grad\":\n            case \"turn\":\n                this.type = \"angle\";\n                break;\n\n            case \"ms\":\n            case \"s\":\n                this.type = \"time\";\n                break;\n\n            case \"hz\":\n            case \"khz\":\n                this.type = \"frequency\";\n                break;\n\n            case \"dpi\":\n            case \"dpcm\":\n                this.type = \"resolution\";\n                break;\n\n        }\n\n    } else if (/^([+-]?[\\d.]+)%$/i.test(text)) {  // percentage\n        this.type = \"percentage\";\n        this.value = Number(RegExp.$1);\n    } else if (/^([+-]?\\d+)$/i.test(text)) {  // integer\n        this.type = \"integer\";\n        this.value = Number(RegExp.$1);\n    } else if (/^([+-]?[\\d.]+)$/i.test(text)) {  // number\n        this.type = \"number\";\n        this.value = Number(RegExp.$1);\n\n    } else if (/^#([a-f0-9]{3,6})/i.test(text)) {  // hexcolor\n        this.type = \"color\";\n        temp = RegExp.$1;\n        if (temp.length === 3) {\n            this.red    = parseInt(temp.charAt(0) + temp.charAt(0), 16);\n            this.green  = parseInt(temp.charAt(1) + temp.charAt(1), 16);\n            this.blue   = parseInt(temp.charAt(2) + temp.charAt(2), 16);\n        } else {\n            this.red    = parseInt(temp.substring(0, 2), 16);\n            this.green  = parseInt(temp.substring(2, 4), 16);\n            this.blue   = parseInt(temp.substring(4, 6), 16);\n        }\n    } else if (/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i.test(text)) { // rgb() color with absolute numbers\n        this.type   = \"color\";\n        this.red    = Number(RegExp.$1);\n        this.green  = Number(RegExp.$2);\n        this.blue   = Number(RegExp.$3);\n    } else if (/^rgb\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)) { // rgb() color with percentages\n        this.type   = \"color\";\n        this.red    = Number(RegExp.$1) * 255 / 100;\n        this.green  = Number(RegExp.$2) * 255 / 100;\n        this.blue   = Number(RegExp.$3) * 255 / 100;\n    } else if (/^rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)/i.test(text)) { // rgba() color with absolute numbers\n        this.type   = \"color\";\n        this.red    = Number(RegExp.$1);\n        this.green  = Number(RegExp.$2);\n        this.blue   = Number(RegExp.$3);\n        this.alpha  = Number(RegExp.$4);\n    } else if (/^rgba\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d.]+)\\s*\\)/i.test(text)) { // rgba() color with percentages\n        this.type   = \"color\";\n        this.red    = Number(RegExp.$1) * 255 / 100;\n        this.green  = Number(RegExp.$2) * 255 / 100;\n        this.blue   = Number(RegExp.$3) * 255 / 100;\n        this.alpha  = Number(RegExp.$4);\n    } else if (/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)) { // hsl()\n        this.type   = \"color\";\n        this.hue    = Number(RegExp.$1);\n        this.saturation = Number(RegExp.$2) / 100;\n        this.lightness  = Number(RegExp.$3) / 100;\n    } else if (/^hsla\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d.]+)\\s*\\)/i.test(text)) { // hsla() color with percentages\n        this.type   = \"color\";\n        this.hue    = Number(RegExp.$1);\n        this.saturation = Number(RegExp.$2) / 100;\n        this.lightness  = Number(RegExp.$3) / 100;\n        this.alpha  = Number(RegExp.$4);\n    } else if (/^url\\((\"([^\\\\\"]|\\.)*\")\\)/i.test(text)) { // URI\n        this.type   = \"uri\";\n        this.uri    = PropertyValuePart.parseString(RegExp.$1);\n    } else if (/^([^(]+)\\(/i.test(text)) {\n        this.type   = \"function\";\n        this.name   = RegExp.$1;\n        this.value  = text;\n    } else if (/^\"([^\\n\\r\\f\\\\\"]|\\\\\\r\\n|\\\\[^\\r0-9a-f]|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\n\\r\\t\\f])?)*\"/i.test(text)) {    // double-quoted string\n        this.type   = \"string\";\n        this.value  = PropertyValuePart.parseString(text);\n    } else if (/^'([^\\n\\r\\f\\\\']|\\\\\\r\\n|\\\\[^\\r0-9a-f]|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\n\\r\\t\\f])?)*'/i.test(text)) {    // single-quoted string\n        this.type   = \"string\";\n        this.value  = PropertyValuePart.parseString(text);\n    } else if (Colors[text.toLowerCase()]) {  // named color\n        this.type   = \"color\";\n        temp        = Colors[text.toLowerCase()].substring(1);\n        this.red    = parseInt(temp.substring(0, 2), 16);\n        this.green  = parseInt(temp.substring(2, 4), 16);\n        this.blue   = parseInt(temp.substring(4, 6), 16);\n    } else if (/^[,/]$/.test(text)) {\n        this.type   = \"operator\";\n        this.value  = text;\n    } else if (/^-?[a-z_\\u00A0-\\uFFFF][a-z0-9\\-_\\u00A0-\\uFFFF]*$/i.test(text)) {\n        this.type   = \"identifier\";\n        this.value  = text;\n    }\n    this.wasIdent = Boolean(hint.ident);\n\n}\n\nPropertyValuePart.prototype = new SyntaxUnit();\nPropertyValuePart.prototype.constructor = PropertyValuePart;\nPropertyValuePart.parseString = function(str) {\n    str = str.slice(1, -1); // Strip surrounding single/double quotes\n    var replacer = function(match, esc) {\n        if (/^(\\n|\\r\\n|\\r|\\f)$/.test(esc)) {\n            return \"\";\n        }\n        var m = /^[0-9a-f]{1,6}/i.exec(esc);\n        if (m) {\n            var codePoint = parseInt(m[0], 16);\n            if (String.fromCodePoint) {\n                return String.fromCodePoint(codePoint);\n            } else {\n                return String.fromCharCode(codePoint);\n            }\n        }\n        return esc;\n    };\n    return str.replace(/\\\\(\\r\\n|[^\\r0-9a-f]|[0-9a-f]{1,6}(\\r\\n|[ \\n\\r\\t\\f])?)/ig,\n                       replacer);\n};\nPropertyValuePart.serializeString = function(value) {\n    var replacer = function(match, c) {\n        if (c === \"\\\"\") {\n            return \"\\\\\" + c;\n        }\n        var cp = String.codePointAt ? String.codePointAt(0) :\n            String.charCodeAt(0);\n        return \"\\\\\" + cp.toString(16) + \" \";\n    };\n    return \"\\\"\" + value.replace(/[\"\\r\\n\\f]/g, replacer) + \"\\\"\";\n};\nPropertyValuePart.fromToken = function(token) {\n    var part = new PropertyValuePart(token.value, token.startLine, token.startCol, {\n        ident: token.type === Tokens.IDENT\n    });\n    return part;\n};\n\n},{\"../util/SyntaxUnit\":26,\"./Colors\":1,\"./Parser\":6,\"./Tokens\":18}],12:[function(require,module,exports){\n\"use strict\";\n\nvar Pseudos = module.exports = {\n    __proto__:       null,\n    \":first-letter\": 1,\n    \":first-line\":   1,\n    \":before\":       1,\n    \":after\":        1\n};\n\nPseudos.ELEMENT = 1;\nPseudos.CLASS = 2;\n\nPseudos.isElement = function(pseudo) {\n    return pseudo.indexOf(\"::\") === 0 || Pseudos[pseudo.toLowerCase()] === Pseudos.ELEMENT;\n};\n\n},{}],13:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = Selector;\n\nvar SyntaxUnit = require(\"../util/SyntaxUnit\");\n\nvar Parser = require(\"./Parser\");\nvar Specificity = require(\"./Specificity\");\nfunction Selector(parts, line, col) {\n\n    SyntaxUnit.call(this, parts.join(\" \"), line, col, Parser.SELECTOR_TYPE);\n    this.parts = parts;\n    this.specificity = Specificity.calculate(this);\n\n}\n\nSelector.prototype = new SyntaxUnit();\nSelector.prototype.constructor = Selector;\n\n\n},{\"../util/SyntaxUnit\":26,\"./Parser\":6,\"./Specificity\":16}],14:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = SelectorPart;\n\nvar SyntaxUnit = require(\"../util/SyntaxUnit\");\n\nvar Parser = require(\"./Parser\");\nfunction SelectorPart(elementName, modifiers, text, line, col) {\n\n    SyntaxUnit.call(this, text, line, col, Parser.SELECTOR_PART_TYPE);\n    this.elementName = elementName;\n    this.modifiers = modifiers;\n\n}\n\nSelectorPart.prototype = new SyntaxUnit();\nSelectorPart.prototype.constructor = SelectorPart;\n\n\n},{\"../util/SyntaxUnit\":26,\"./Parser\":6}],15:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = SelectorSubPart;\n\nvar SyntaxUnit = require(\"../util/SyntaxUnit\");\n\nvar Parser = require(\"./Parser\");\nfunction SelectorSubPart(text, type, line, col) {\n\n    SyntaxUnit.call(this, text, line, col, Parser.SELECTOR_SUB_PART_TYPE);\n    this.type = type;\n    this.args = [];\n\n}\n\nSelectorSubPart.prototype = new SyntaxUnit();\nSelectorSubPart.prototype.constructor = SelectorSubPart;\n\n\n},{\"../util/SyntaxUnit\":26,\"./Parser\":6}],16:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = Specificity;\n\nvar Pseudos = require(\"./Pseudos\");\nvar SelectorPart = require(\"./SelectorPart\");\nfunction Specificity(a, b, c, d) {\n    this.a = a;\n    this.b = b;\n    this.c = c;\n    this.d = d;\n}\n\nSpecificity.prototype = {\n    constructor: Specificity,\n    compare: function(other) {\n        var comps = [\"a\", \"b\", \"c\", \"d\"],\n            i, len;\n\n        for (i = 0, len = comps.length; i < len; i++) {\n            if (this[comps[i]] < other[comps[i]]) {\n                return -1;\n            } else if (this[comps[i]] > other[comps[i]]) {\n                return 1;\n            }\n        }\n\n        return 0;\n    },\n    valueOf: function() {\n        return (this.a * 1000) + (this.b * 100) + (this.c * 10) + this.d;\n    },\n    toString: function() {\n        return this.a + \",\" + this.b + \",\" + this.c + \",\" + this.d;\n    }\n\n};\nSpecificity.calculate = function(selector) {\n\n    var i,\n        len,\n        part,\n        b = 0,\n        c = 0,\n        d = 0;\n\n    function updateValues(part) {\n\n        var i, j, len, num,\n            elementName = part.elementName ? part.elementName.text : \"\",\n            modifier;\n\n        if (elementName && elementName.charAt(elementName.length - 1) !== \"*\") {\n            d++;\n        }\n\n        for (i = 0, len = part.modifiers.length; i < len; i++) {\n            modifier = part.modifiers[i];\n            switch (modifier.type) {\n                case \"class\":\n                case \"attribute\":\n                    c++;\n                    break;\n\n                case \"id\":\n                    b++;\n                    break;\n\n                case \"pseudo\":\n                    if (Pseudos.isElement(modifier.text)) {\n                        d++;\n                    } else {\n                        c++;\n                    }\n                    break;\n\n                case \"not\":\n                    for (j = 0, num = modifier.args.length; j < num; j++) {\n                        updateValues(modifier.args[j]);\n                    }\n            }\n        }\n    }\n\n    for (i = 0, len = selector.parts.length; i < len; i++) {\n        part = selector.parts[i];\n\n        if (part instanceof SelectorPart) {\n            updateValues(part);\n        }\n    }\n\n    return new Specificity(0, b, c, d);\n};\n\n},{\"./Pseudos\":12,\"./SelectorPart\":14}],17:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = TokenStream;\n\nvar TokenStreamBase = require(\"../util/TokenStreamBase\");\n\nvar PropertyValuePart = require(\"./PropertyValuePart\");\nvar Tokens = require(\"./Tokens\");\n\nvar h = /^[0-9a-fA-F]$/,\n    nonascii = /^[\\u00A0-\\uFFFF]$/,\n    nl = /\\n|\\r\\n|\\r|\\f/,\n    whitespace = /\\u0009|\\u000a|\\u000c|\\u000d|\\u0020/;\n\n\nfunction isHexDigit(c) {\n    return c != null && h.test(c);\n}\n\nfunction isDigit(c) {\n    return c != null && /\\d/.test(c);\n}\n\nfunction isWhitespace(c) {\n    return c != null && whitespace.test(c);\n}\n\nfunction isNewLine(c) {\n    return c != null && nl.test(c);\n}\n\nfunction isNameStart(c) {\n    return c != null && /[a-z_\\u00A0-\\uFFFF\\\\]/i.test(c);\n}\n\nfunction isNameChar(c) {\n    return c != null && (isNameStart(c) || /[0-9\\-\\\\]/.test(c));\n}\n\nfunction isIdentStart(c) {\n    return c != null && (isNameStart(c) || /-\\\\/.test(c));\n}\n\nfunction mix(receiver, supplier) {\n    for (var prop in supplier) {\n        if (Object.prototype.hasOwnProperty.call(supplier, prop)) {\n            receiver[prop] = supplier[prop];\n        }\n    }\n    return receiver;\n}\n\nfunction wouldStartIdent(twoCodePoints) {\n    return typeof twoCodePoints === \"string\" &&\n        (twoCodePoints[0] === \"-\" && isNameStart(twoCodePoints[1]) || isNameStart(twoCodePoints[0]));\n}\n\nfunction wouldStartUnsignedNumber(twoCodePoints) {\n    return typeof twoCodePoints === \"string\" &&\n        (isDigit(twoCodePoints[0]) || (twoCodePoints[0] === \".\" && isDigit(twoCodePoints[1])));\n}\nfunction TokenStream(input) {\n    TokenStreamBase.call(this, input, Tokens);\n}\n\nTokenStream.prototype = mix(new TokenStreamBase(), {\n    _getToken: function() {\n\n        var c,\n            reader = this._reader,\n            token   = null,\n            startLine   = reader.getLine(),\n            startCol    = reader.getCol();\n\n        c = reader.read();\n\n        while (c) {\n            switch (c) {\n                case \"/\":\n\n                    if (reader.peek() === \"*\") {\n                        token = this.commentToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"|\":\n                case \"~\":\n                case \"^\":\n                case \"$\":\n                case \"*\":\n                    if (reader.peek() === \"=\") {\n                        token = this.comparisonToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"\\\"\":\n                case \"'\":\n                    token = this.stringToken(c, startLine, startCol);\n                    break;\n                case \"#\":\n                    if (isNameChar(reader.peek())) {\n                        token = this.hashToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \".\":\n                    if (isDigit(reader.peek())) {\n                        token = this.numberToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"-\":\n                    if (wouldStartUnsignedNumber(reader.peekCount(2))) {\n                        token = this.numberToken(c, startLine, startCol);\n                        break;\n                    } else if (reader.peekCount(2) === \"->\") {\n                        token = this.htmlCommentEndToken(c, startLine, startCol);\n                    } else {\n                        token = this._getDefaultToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"+\":\n                    if (wouldStartUnsignedNumber(reader.peekCount(2))) {\n                        token = this.numberToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"!\":\n                    token = this.importantToken(c, startLine, startCol);\n                    break;\n                case \"@\":\n                    token = this.atRuleToken(c, startLine, startCol);\n                    break;\n                case \":\":\n                    token = this.notToken(c, startLine, startCol);\n                    break;\n                case \"<\":\n                    token = this.htmlCommentStartToken(c, startLine, startCol);\n                    break;\n                case \"\\\\\":\n                    if (/[^\\r\\n\\f]/.test(reader.peek())) {\n                        token = this.identOrFunctionToken(this.readEscape(c, true), startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"U\":\n                case \"u\":\n                    if (reader.peek() === \"+\") {\n                        token = this.unicodeRangeToken(c, startLine, startCol);\n                    } else {\n                        token = this._getDefaultToken(c, startLine, startCol);\n                    }\n                    break;\n\n                default:\n                    token = this._getDefaultToken(c, startLine, startCol);\n\n            }\n            break;\n        }\n\n        if (!token && c === null) {\n            token = this.createToken(Tokens.EOF, null, startLine, startCol);\n        }\n\n        return token;\n    },\n    _getDefaultToken: function(c, startLine, startCol) {\n        var reader = this._reader,\n            token   = null;\n\n        if (isDigit(c)) {\n            token = this.numberToken(c, startLine, startCol);\n        } else\n        if (isWhitespace(c)) {\n            token = this.whitespaceToken(c, startLine, startCol);\n        } else\n        if (wouldStartIdent(c + reader.peekCount(1))) {\n            token = this.identOrFunctionToken(c, startLine, startCol);\n        } else {\n            token = this.charToken(c, startLine, startCol);\n        }\n\n        return token;\n    },\n    createToken: function(tt, value, startLine, startCol, options) {\n        var reader = this._reader;\n        options = options || {};\n\n        return {\n            value:      value,\n            type:       tt,\n            channel:    options.channel,\n            endChar:    options.endChar,\n            hide:       options.hide || false,\n            startLine:  startLine,\n            startCol:   startCol,\n            endLine:    reader.getLine(),\n            endCol:     reader.getCol()\n        };\n    },\n    atRuleToken: function(first, startLine, startCol) {\n        var rule    = first,\n            reader  = this._reader,\n            tt      = Tokens.CHAR,\n            ident;\n        reader.mark();\n        ident = this.readName();\n        rule = first + ident;\n        tt = Tokens.type(rule.toLowerCase());\n        if (tt === Tokens.CHAR || tt === Tokens.UNKNOWN) {\n            if (rule.length > 1) {\n                tt = Tokens.UNKNOWN_SYM;\n            } else {\n                tt = Tokens.CHAR;\n                rule = first;\n                reader.reset();\n            }\n        }\n\n        return this.createToken(tt, rule, startLine, startCol);\n    },\n    charToken: function(c, startLine, startCol) {\n        var tt = Tokens.type(c);\n        var opts = {};\n\n        if (tt === -1) {\n            tt = Tokens.CHAR;\n        } else {\n            opts.endChar = Tokens[tt].endChar;\n        }\n\n        return this.createToken(tt, c, startLine, startCol, opts);\n    },\n    commentToken: function(first, startLine, startCol) {\n        var comment = this.readComment(first);\n\n        return this.createToken(Tokens.COMMENT, comment, startLine, startCol);\n    },\n    comparisonToken: function(c, startLine, startCol) {\n        var reader  = this._reader,\n            comparison  = c + reader.read(),\n            tt      = Tokens.type(comparison) || Tokens.CHAR;\n\n        return this.createToken(tt, comparison, startLine, startCol);\n    },\n    hashToken: function(first, startLine, startCol) {\n        var name    = this.readName(first);\n\n        return this.createToken(Tokens.HASH, name, startLine, startCol);\n    },\n    htmlCommentStartToken: function(first, startLine, startCol) {\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(3);\n\n        if (text === \"<!--\") {\n            return this.createToken(Tokens.CDO, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n    htmlCommentEndToken: function(first, startLine, startCol) {\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(2);\n\n        if (text === \"-->\") {\n            return this.createToken(Tokens.CDC, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n    identOrFunctionToken: function(first, startLine, startCol) {\n        var reader  = this._reader,\n            ident   = this.readName(first),\n            tt      = Tokens.IDENT,\n            uriFns  = [\"url(\", \"url-prefix(\", \"domain(\"],\n            uri;\n        if (reader.peek() === \"(\") {\n            ident += reader.read();\n            if (uriFns.indexOf(ident.toLowerCase()) > -1) {\n                reader.mark();\n                uri = this.readURI(ident);\n                if (uri === null) {\n                    reader.reset();\n                    tt = Tokens.FUNCTION;\n                } else {\n                    tt = Tokens.URI;\n                    ident = uri;\n                }\n            } else {\n                tt = Tokens.FUNCTION;\n            }\n        } else if (reader.peek() === \":\") {  // might be an IE function\n            if (ident.toLowerCase() === \"progid\") {\n                ident += reader.readTo(\"(\");\n                tt = Tokens.IE_FUNCTION;\n            }\n        }\n\n        return this.createToken(tt, ident, startLine, startCol);\n    },\n    importantToken: function(first, startLine, startCol) {\n        var reader      = this._reader,\n            important   = first,\n            tt          = Tokens.CHAR,\n            temp,\n            c;\n\n        reader.mark();\n        c = reader.read();\n\n        while (c) {\n            if (c === \"/\") {\n                if (reader.peek() !== \"*\") {\n                    break;\n                } else {\n                    temp = this.readComment(c);\n                    if (temp === \"\") {    // broken!\n                        break;\n                    }\n                }\n            } else if (isWhitespace(c)) {\n                important += c + this.readWhitespace();\n            } else if (/i/i.test(c)) {\n                temp = reader.readCount(8);\n                if (/mportant/i.test(temp)) {\n                    important += c + temp;\n                    tt = Tokens.IMPORTANT_SYM;\n\n                }\n                break;  // we're done\n            } else {\n                break;\n            }\n\n            c = reader.read();\n        }\n\n        if (tt === Tokens.CHAR) {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        } else {\n            return this.createToken(tt, important, startLine, startCol);\n        }\n\n\n    },\n    notToken: function(first, startLine, startCol) {\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(4);\n\n        if (text.toLowerCase() === \":not(\") {\n            return this.createToken(Tokens.NOT, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n    numberToken: function(first, startLine, startCol) {\n        var reader  = this._reader,\n            value   = this.readNumber(first),\n            ident,\n            tt      = Tokens.NUMBER,\n            c       = reader.peek();\n\n        if (isIdentStart(c)) {\n            ident = this.readName(reader.read());\n            value += ident;\n\n            if (/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^fr$|^vmax$|^vmin$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(ident)) {\n                tt = Tokens.LENGTH;\n            } else if (/^deg|^rad$|^grad$|^turn$/i.test(ident)) {\n                tt = Tokens.ANGLE;\n            } else if (/^ms$|^s$/i.test(ident)) {\n                tt = Tokens.TIME;\n            } else if (/^hz$|^khz$/i.test(ident)) {\n                tt = Tokens.FREQ;\n            } else if (/^dpi$|^dpcm$/i.test(ident)) {\n                tt = Tokens.RESOLUTION;\n            } else {\n                tt = Tokens.DIMENSION;\n            }\n\n        } else if (c === \"%\") {\n            value += reader.read();\n            tt = Tokens.PERCENTAGE;\n        }\n\n        return this.createToken(tt, value, startLine, startCol);\n    },\n    stringToken: function(first, startLine, startCol) {\n        var delim   = first,\n            string  = first,\n            reader  = this._reader,\n            tt      = Tokens.STRING,\n            c       = reader.read(),\n            i;\n\n        while (c) {\n            string += c;\n\n            if (c === \"\\\\\") {\n                c = reader.read();\n                if (c === null) {\n                    break;  // premature EOF after backslash\n                } else if (/[^\\r\\n\\f0-9a-f]/i.test(c)) {\n                    string += c;\n                } else {\n                    for (i = 0; isHexDigit(c) && i < 6; i++) {\n                        string += c;\n                        c = reader.read();\n                    }\n                    if (c === \"\\r\" && reader.peek() === \"\\n\") {\n                        string += c;\n                        c = reader.read();\n                    }\n                    if (isWhitespace(c)) {\n                        string += c;\n                    } else {\n                        continue;\n                    }\n                }\n            } else if (c === delim) {\n                break; // delimiter found.\n            } else if (isNewLine(reader.peek())) {\n                tt = Tokens.INVALID;\n                break;\n            }\n            c = reader.read();\n        }\n        if (c === null) {\n            tt = Tokens.INVALID;\n        }\n\n        return this.createToken(tt, string, startLine, startCol);\n    },\n\n    unicodeRangeToken: function(first, startLine, startCol) {\n        var reader  = this._reader,\n            value   = first,\n            temp,\n            tt      = Tokens.CHAR;\n        if (reader.peek() === \"+\") {\n            reader.mark();\n            value += reader.read();\n            value += this.readUnicodeRangePart(true);\n            if (value.length === 2) {\n                reader.reset();\n            } else {\n\n                tt = Tokens.UNICODE_RANGE;\n                if (value.indexOf(\"?\") === -1) {\n\n                    if (reader.peek() === \"-\") {\n                        reader.mark();\n                        temp = reader.read();\n                        temp += this.readUnicodeRangePart(false);\n                        if (temp.length === 1) {\n                            reader.reset();\n                        } else {\n                            value += temp;\n                        }\n                    }\n\n                }\n            }\n        }\n\n        return this.createToken(tt, value, startLine, startCol);\n    },\n    whitespaceToken: function(first, startLine, startCol) {\n        var value   = first + this.readWhitespace();\n        return this.createToken(Tokens.S, value, startLine, startCol);\n    },\n\n    readUnicodeRangePart: function(allowQuestionMark) {\n        var reader  = this._reader,\n            part = \"\",\n            c       = reader.peek();\n        while (isHexDigit(c) && part.length < 6) {\n            reader.read();\n            part += c;\n            c = reader.peek();\n        }\n        if (allowQuestionMark) {\n            while (c === \"?\" && part.length < 6) {\n                reader.read();\n                part += c;\n                c = reader.peek();\n            }\n        }\n\n        return part;\n    },\n\n    readWhitespace: function() {\n        var reader  = this._reader,\n            whitespace = \"\",\n            c       = reader.peek();\n\n        while (isWhitespace(c)) {\n            reader.read();\n            whitespace += c;\n            c = reader.peek();\n        }\n\n        return whitespace;\n    },\n    readNumber: function(first) {\n        var reader  = this._reader,\n            number  = first,\n            hasDot  = first === \".\",\n            c       = reader.peek();\n\n\n        while (c) {\n            if (isDigit(c)) {\n                number += reader.read();\n            } else if (c === \".\") {\n                if (hasDot) {\n                    break;\n                } else {\n                    hasDot = true;\n                    number += reader.read();\n                }\n            } else {\n                break;\n            }\n\n            c = reader.peek();\n        }\n\n        return number;\n    },\n    readString: function() {\n        var token = this.stringToken(this._reader.read(), 0, 0);\n        return token.type === Tokens.INVALID ? null : token.value;\n    },\n    readURI: function(first) {\n        var reader  = this._reader,\n            uri     = first,\n            inner   = \"\",\n            c       = reader.peek();\n        while (c && isWhitespace(c)) {\n            reader.read();\n            c = reader.peek();\n        }\n        if (c === \"'\" || c === \"\\\"\") {\n            inner = this.readString();\n            if (inner !== null) {\n                inner = PropertyValuePart.parseString(inner);\n            }\n        } else {\n            inner = this.readUnquotedURL();\n        }\n\n        c = reader.peek();\n        while (c && isWhitespace(c)) {\n            reader.read();\n            c = reader.peek();\n        }\n        if (inner === null || c !== \")\") {\n            uri = null;\n        } else {\n            uri += PropertyValuePart.serializeString(inner) + reader.read();\n        }\n\n        return uri;\n    },\n    readUnquotedURL: function(first) {\n        var reader  = this._reader,\n            url     = first || \"\",\n            c;\n\n        for (c = reader.peek(); c; c = reader.peek()) {\n            if (nonascii.test(c) || /^[-!#$%&*-[\\]-~]$/.test(c)) {\n                url += c;\n                reader.read();\n            } else if (c === \"\\\\\") {\n                if (/^[^\\r\\n\\f]$/.test(reader.peek(2))) {\n                    url += this.readEscape(reader.read(), true);\n                } else {\n                    break; // bad escape sequence.\n                }\n            } else {\n                break; // bad character\n            }\n        }\n\n        return url;\n    },\n\n    readName: function(first) {\n        var reader  = this._reader,\n            ident   = first || \"\",\n            c;\n\n        for (c = reader.peek(); c; c = reader.peek()) {\n            if (c === \"\\\\\") {\n                if (/^[^\\r\\n\\f]$/.test(reader.peek(2))) {\n                    ident += this.readEscape(reader.read(), true);\n                } else {\n                    break;\n                }\n            } else if (isNameChar(c)) {\n                ident += reader.read();\n            } else {\n                break;\n            }\n        }\n\n        return ident;\n    },\n\n    readEscape: function(first, unescape) {\n        var reader  = this._reader,\n            cssEscape = first || \"\",\n            i       = 0,\n            c       = reader.peek();\n\n        if (isHexDigit(c)) {\n            do {\n                cssEscape += reader.read();\n                c = reader.peek();\n            } while (c && isHexDigit(c) && ++i < 6);\n        }\n\n        if (cssEscape.length === 1) {\n            if (/^[^\\r\\n\\f0-9a-f]$/.test(c)) {\n                reader.read();\n                if (unescape) {\n                    return c;\n                }\n            } else {\n                throw new Error(\"Bad escape sequence.\");\n            }\n        } else if (c === \"\\r\") {\n            reader.read();\n            if (reader.peek() === \"\\n\") {\n                c += reader.read();\n            }\n        } else if (/^[ \\t\\n\\f]$/.test(c)) {\n            reader.read();\n        } else {\n            c = \"\";\n        }\n\n        if (unescape) {\n            var cp = parseInt(cssEscape.slice(first.length), 16);\n            return String.fromCodePoint ? String.fromCodePoint(cp) :\n                String.fromCharCode(cp);\n        }\n        return cssEscape + c;\n    },\n\n    readComment: function(first) {\n        var reader  = this._reader,\n            comment = first || \"\",\n            c       = reader.read();\n\n        if (c === \"*\") {\n            while (c) {\n                comment += c;\n                if (comment.length > 2 && c === \"*\" && reader.peek() === \"/\") {\n                    comment += reader.read();\n                    break;\n                }\n\n                c = reader.read();\n            }\n\n            return comment;\n        } else {\n            return \"\";\n        }\n\n    }\n});\n\n},{\"../util/TokenStreamBase\":27,\"./PropertyValuePart\":11,\"./Tokens\":18}],18:[function(require,module,exports){\n\"use strict\";\n\nvar Tokens = module.exports = [\n    { name: \"CDO\" },\n    { name: \"CDC\" },\n    { name: \"S\", whitespace: true/*, channel: \"ws\"*/ },\n    { name: \"COMMENT\", comment: true, hide: true, channel: \"comment\" },\n    { name: \"INCLUDES\", text: \"~=\" },\n    { name: \"DASHMATCH\", text: \"|=\" },\n    { name: \"PREFIXMATCH\", text: \"^=\" },\n    { name: \"SUFFIXMATCH\", text: \"$=\" },\n    { name: \"SUBSTRINGMATCH\", text: \"*=\" },\n    { name: \"STRING\" },\n    { name: \"IDENT\" },\n    { name: \"HASH\" },\n    { name: \"IMPORT_SYM\", text: \"@import\" },\n    { name: \"PAGE_SYM\", text: \"@page\" },\n    { name: \"MEDIA_SYM\", text: \"@media\" },\n    { name: \"FONT_FACE_SYM\", text: \"@font-face\" },\n    { name: \"CHARSET_SYM\", text: \"@charset\" },\n    { name: \"NAMESPACE_SYM\", text: \"@namespace\" },\n    { name: \"SUPPORTS_SYM\", text: \"@supports\" },\n    { name: \"VIEWPORT_SYM\", text: [\"@viewport\", \"@-ms-viewport\", \"@-o-viewport\"] },\n    { name: \"DOCUMENT_SYM\", text: [\"@document\", \"@-moz-document\"] },\n    { name: \"UNKNOWN_SYM\" },\n    { name: \"KEYFRAMES_SYM\", text: [ \"@keyframes\", \"@-webkit-keyframes\", \"@-moz-keyframes\", \"@-o-keyframes\" ] },\n    { name: \"IMPORTANT_SYM\" },\n    { name: \"LENGTH\" },\n    { name: \"ANGLE\" },\n    { name: \"TIME\" },\n    { name: \"FREQ\" },\n    { name: \"DIMENSION\" },\n    { name: \"PERCENTAGE\" },\n    { name: \"NUMBER\" },\n    { name: \"URI\" },\n    { name: \"FUNCTION\" },\n    { name: \"UNICODE_RANGE\" },\n    { name: \"INVALID\" },\n    { name: \"PLUS\", text: \"+\" },\n    { name: \"GREATER\", text: \">\" },\n    { name: \"COMMA\", text: \",\" },\n    { name: \"TILDE\", text: \"~\" },\n    { name: \"NOT\" },\n    { name: \"TOPLEFTCORNER_SYM\", text: \"@top-left-corner\" },\n    { name: \"TOPLEFT_SYM\", text: \"@top-left\" },\n    { name: \"TOPCENTER_SYM\", text: \"@top-center\" },\n    { name: \"TOPRIGHT_SYM\", text: \"@top-right\" },\n    { name: \"TOPRIGHTCORNER_SYM\", text: \"@top-right-corner\" },\n    { name: \"BOTTOMLEFTCORNER_SYM\", text: \"@bottom-left-corner\" },\n    { name: \"BOTTOMLEFT_SYM\", text: \"@bottom-left\" },\n    { name: \"BOTTOMCENTER_SYM\", text: \"@bottom-center\" },\n    { name: \"BOTTOMRIGHT_SYM\", text: \"@bottom-right\" },\n    { name: \"BOTTOMRIGHTCORNER_SYM\", text: \"@bottom-right-corner\" },\n    { name: \"LEFTTOP_SYM\", text: \"@left-top\" },\n    { name: \"LEFTMIDDLE_SYM\", text: \"@left-middle\" },\n    { name: \"LEFTBOTTOM_SYM\", text: \"@left-bottom\" },\n    { name: \"RIGHTTOP_SYM\", text: \"@right-top\" },\n    { name: \"RIGHTMIDDLE_SYM\", text: \"@right-middle\" },\n    { name: \"RIGHTBOTTOM_SYM\", text: \"@right-bottom\" },\n    { name: \"RESOLUTION\", state: \"media\" },\n    { name: \"IE_FUNCTION\" },\n    { name: \"CHAR\" },\n    {\n        name: \"PIPE\",\n        text: \"|\"\n    },\n    {\n        name: \"SLASH\",\n        text: \"/\"\n    },\n    {\n        name: \"MINUS\",\n        text: \"-\"\n    },\n    {\n        name: \"STAR\",\n        text: \"*\"\n    },\n\n    {\n        name: \"LBRACE\",\n        endChar: \"}\",\n        text: \"{\"\n    },\n    {\n        name: \"RBRACE\",\n        text: \"}\"\n    },\n    {\n        name: \"LBRACKET\",\n        endChar: \"]\",\n        text: \"[\"\n    },\n    {\n        name: \"RBRACKET\",\n        text: \"]\"\n    },\n    {\n        name: \"EQUALS\",\n        text: \"=\"\n    },\n    {\n        name: \"COLON\",\n        text: \":\"\n    },\n    {\n        name: \"SEMICOLON\",\n        text: \";\"\n    },\n    {\n        name: \"LPAREN\",\n        endChar: \")\",\n        text: \"(\"\n    },\n    {\n        name: \"RPAREN\",\n        text: \")\"\n    },\n    {\n        name: \"DOT\",\n        text: \".\"\n    }\n];\n\n(function() {\n    var nameMap = [],\n        typeMap = Object.create(null);\n\n    Tokens.UNKNOWN = -1;\n    Tokens.unshift({ name:\"EOF\" });\n    for (var i = 0, len = Tokens.length; i < len; i++) {\n        nameMap.push(Tokens[i].name);\n        Tokens[Tokens[i].name] = i;\n        if (Tokens[i].text) {\n            if (Tokens[i].text instanceof Array) {\n                for (var j = 0; j < Tokens[i].text.length; j++) {\n                    typeMap[Tokens[i].text[j]] = i;\n                }\n            } else {\n                typeMap[Tokens[i].text] = i;\n            }\n        }\n    }\n\n    Tokens.name = function(tt) {\n        return nameMap[tt];\n    };\n\n    Tokens.type = function(c) {\n        return typeMap[c] || -1;\n    };\n})();\n\n},{}],19:[function(require,module,exports){\n\n\"use strict\";\n\nvar Matcher = require(\"./Matcher\");\nvar Properties = require(\"./Properties\");\nvar ValidationTypes = require(\"./ValidationTypes\");\nvar ValidationError = require(\"./ValidationError\");\nvar PropertyValueIterator = require(\"./PropertyValueIterator\");\n\nvar Validation = module.exports = {\n\n    validate: function(property, value) {\n        var name        = property.toString().toLowerCase(),\n            expression  = new PropertyValueIterator(value),\n            spec        = Properties[name],\n            part;\n\n        if (!spec) {\n            if (name.indexOf(\"-\") !== 0) {    // vendor prefixed are ok\n                throw new ValidationError(\"Unknown property '\" + property + \"'.\", property.line, property.col);\n            }\n        } else if (typeof spec !== \"number\") {\n            if (ValidationTypes.isAny(expression, \"inherit | initial | unset\")) {\n                if (expression.hasNext()) {\n                    part = expression.next();\n                    throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n                }\n                return;\n            }\n            this.singleProperty(spec, expression);\n\n        }\n\n    },\n\n    singleProperty: function(types, expression) {\n\n        var result      = false,\n            value       = expression.value,\n            part;\n\n        result = Matcher.parse(types).match(expression);\n\n        if (!result) {\n            if (expression.hasNext() && !expression.isFirst()) {\n                part = expression.peek();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (\" + ValidationTypes.describe(types) + \") but found '\" + value + \"'.\", value.line, value.col);\n            }\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n\n    }\n\n};\n\n},{\"./Matcher\":3,\"./Properties\":7,\"./PropertyValueIterator\":10,\"./ValidationError\":20,\"./ValidationTypes\":21}],20:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = ValidationError;\nfunction ValidationError(message, line, col) {\n    this.col = col;\n    this.line = line;\n    this.message = message;\n\n}\nValidationError.prototype = new Error();\n\n},{}],21:[function(require,module,exports){\n\"use strict\";\n\nvar ValidationTypes = module.exports;\n\nvar Matcher = require(\"./Matcher\");\n\nfunction copy(to, from) {\n    Object.keys(from).forEach(function(prop) {\n        to[prop] = from[prop];\n    });\n}\ncopy(ValidationTypes, {\n\n    isLiteral: function (part, literals) {\n        var text = part.text.toString().toLowerCase(),\n            args = literals.split(\" | \"),\n            i,\n            len,\n            found = false;\n\n        for (i = 0, len = args.length; i < len && !found; i++) {\n            if (args[i].charAt(0) === \"<\") {\n                found = this.simple[args[i]](part);\n            } else if (args[i].slice(-2) === \"()\") {\n                found = (part.type === \"function\" &&\n                         part.name === args[i].slice(0, -2));\n            } else if (text === args[i].toLowerCase()) {\n                found = true;\n            }\n        }\n\n        return found;\n    },\n\n    isSimple: function(type) {\n        return Boolean(this.simple[type]);\n    },\n\n    isComplex: function(type) {\n        return Boolean(this.complex[type]);\n    },\n\n    describe: function(type) {\n        if (this.complex[type] instanceof Matcher) {\n            return this.complex[type].toString(0);\n        }\n        return type;\n    },\n    isAny: function (expression, types) {\n        var args = types.split(\" | \"),\n            i,\n            len,\n            found = false;\n\n        for (i = 0, len = args.length; i < len && !found && expression.hasNext(); i++) {\n            found = this.isType(expression, args[i]);\n        }\n\n        return found;\n    },\n    isAnyOfGroup: function(expression, types) {\n        var args = types.split(\" || \"),\n            i,\n            len,\n            found = false;\n\n        for (i = 0, len = args.length; i < len && !found; i++) {\n            found = this.isType(expression, args[i]);\n        }\n\n        return found ? args[i - 1] : false;\n    },\n    isType: function (expression, type) {\n        var part = expression.peek(),\n            result = false;\n\n        if (type.charAt(0) !== \"<\") {\n            result = this.isLiteral(part, type);\n            if (result) {\n                expression.next();\n            }\n        } else if (this.simple[type]) {\n            result = this.simple[type](part);\n            if (result) {\n                expression.next();\n            }\n        } else if (this.complex[type] instanceof Matcher) {\n            result = this.complex[type].match(expression);\n        } else {\n            result = this.complex[type](expression);\n        }\n\n        return result;\n    },\n\n\n    simple: {\n        __proto__: null,\n\n        \"<absolute-size>\":\n            \"xx-small | x-small | small | medium | large | x-large | xx-large\",\n\n        \"<animateable-feature>\":\n            \"scroll-position | contents | <animateable-feature-name>\",\n\n        \"<animateable-feature-name>\": function(part) {\n            return this[\"<ident>\"](part) &&\n                !/^(unset|initial|inherit|will-change|auto|scroll-position|contents)$/i.test(part);\n        },\n\n        \"<angle>\": function(part) {\n            return part.type === \"angle\";\n        },\n\n        \"<attachment>\": \"scroll | fixed | local\",\n\n        \"<attr>\": \"attr()\",\n        \"<basic-shape>\": \"inset() | circle() | ellipse() | polygon()\",\n\n        \"<bg-image>\": \"<image> | <gradient> | none\",\n\n        \"<border-style>\":\n            \"none | hidden | dotted | dashed | solid | double | groove | \" +\n            \"ridge | inset | outset\",\n\n        \"<border-width>\": \"<length> | thin | medium | thick\",\n\n        \"<box>\": \"padding-box | border-box | content-box\",\n\n        \"<clip-source>\": \"<uri>\",\n\n        \"<color>\": function(part) {\n            return part.type === \"color\" || String(part) === \"transparent\" || String(part) === \"currentColor\";\n        },\n        \"<color-svg>\": function(part) {\n            return part.type === \"color\";\n        },\n\n        \"<content>\": \"content()\",\n        \"<content-sizing>\":\n            \"fill-available | -moz-available | -webkit-fill-available | \" +\n            \"max-content | -moz-max-content | -webkit-max-content | \" +\n            \"min-content | -moz-min-content | -webkit-min-content | \" +\n            \"fit-content | -moz-fit-content | -webkit-fit-content\",\n\n        \"<feature-tag-value>\": function(part) {\n            return part.type === \"function\" && /^[A-Z0-9]{4}$/i.test(part);\n        },\n        \"<filter-function>\":\n            \"blur() | brightness() | contrast() | custom() | \" +\n            \"drop-shadow() | grayscale() | hue-rotate() | invert() | \" +\n            \"opacity() | saturate() | sepia()\",\n\n        \"<flex-basis>\": \"<width>\",\n\n        \"<flex-direction>\": \"row | row-reverse | column | column-reverse\",\n\n        \"<flex-grow>\": \"<number>\",\n\n        \"<flex-shrink>\": \"<number>\",\n\n        \"<flex-wrap>\": \"nowrap | wrap | wrap-reverse\",\n\n        \"<font-size>\":\n            \"<absolute-size> | <relative-size> | <length> | <percentage>\",\n\n        \"<font-stretch>\":\n            \"normal | ultra-condensed | extra-condensed | condensed | \" +\n            \"semi-condensed | semi-expanded | expanded | extra-expanded | \" +\n            \"ultra-expanded\",\n\n        \"<font-style>\": \"normal | italic | oblique\",\n\n        \"<font-variant-caps>\":\n            \"small-caps | all-small-caps | petite-caps | all-petite-caps | \" +\n            \"unicase | titling-caps\",\n\n        \"<font-variant-css21>\": \"normal | small-caps\",\n\n        \"<font-weight>\":\n            \"normal | bold | bolder | lighter | \" +\n            \"100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900\",\n\n        \"<generic-family>\":\n            \"serif | sans-serif | cursive | fantasy | monospace\",\n\n        \"<geometry-box>\": \"<shape-box> | fill-box | stroke-box | view-box\",\n\n        \"<glyph-angle>\": function(part) {\n            return part.type === \"angle\" && part.units === \"deg\";\n        },\n\n        \"<gradient>\": function(part) {\n            return part.type === \"function\" && /^(?:-(?:ms|moz|o|webkit)-)?(?:repeating-)?(?:radial-|linear-)?gradient/i.test(part);\n        },\n\n        \"<icccolor>\":\n            \"cielab() | cielch() | cielchab() | \" +\n            \"icc-color() | icc-named-color()\",\n        \"<ident>\": function(part) {\n            return part.type === \"identifier\" || part.wasIdent;\n        },\n\n        \"<ident-not-generic-family>\": function(part) {\n            return this[\"<ident>\"](part) && !this[\"<generic-family>\"](part);\n        },\n\n        \"<image>\": \"<uri>\",\n\n        \"<integer>\": function(part) {\n            return part.type === \"integer\";\n        },\n\n        \"<length>\": function(part) {\n            if (part.type === \"function\" && /^(?:-(?:ms|moz|o|webkit)-)?calc/i.test(part)) {\n                return true;\n            } else {\n                return part.type === \"length\" || part.type === \"number\" || part.type === \"integer\" || String(part) === \"0\";\n            }\n        },\n\n        \"<line>\": function(part) {\n            return part.type === \"integer\";\n        },\n\n        \"<line-height>\": \"<number> | <length> | <percentage> | normal\",\n\n        \"<margin-width>\": \"<length> | <percentage> | auto\",\n\n        \"<miterlimit>\": function(part) {\n            return this[\"<number>\"](part) && part.value >= 1;\n        },\n\n        \"<nonnegative-length-or-percentage>\": function(part) {\n            return (this[\"<length>\"](part) || this[\"<percentage>\"](part)) &&\n                (String(part) === \"0\" || part.type === \"function\" || (part.value) >= 0);\n        },\n\n        \"<nonnegative-number-or-percentage>\": function(part) {\n            return (this[\"<number>\"](part) || this[\"<percentage>\"](part)) &&\n                (String(part) === \"0\" || part.type === \"function\" || (part.value) >= 0);\n        },\n\n        \"<number>\": function(part) {\n            return part.type === \"number\" || this[\"<integer>\"](part);\n        },\n\n        \"<opacity-value>\": function(part) {\n            return this[\"<number>\"](part) && part.value >= 0 && part.value <= 1;\n        },\n\n        \"<padding-width>\": \"<nonnegative-length-or-percentage>\",\n\n        \"<percentage>\": function(part) {\n            return part.type === \"percentage\" || String(part) === \"0\";\n        },\n\n        \"<relative-size>\": \"smaller | larger\",\n\n        \"<shape>\": \"rect() | inset-rect()\",\n\n        \"<shape-box>\": \"<box> | margin-box\",\n\n        \"<single-animation-direction>\":\n            \"normal | reverse | alternate | alternate-reverse\",\n\n        \"<single-animation-name>\": function(part) {\n            return this[\"<ident>\"](part) &&\n                /^-?[a-z_][-a-z0-9_]+$/i.test(part) &&\n                !/^(none|unset|initial|inherit)$/i.test(part);\n        },\n\n        \"<string>\": function(part) {\n            return part.type === \"string\";\n        },\n\n        \"<time>\": function(part) {\n            return part.type === \"time\";\n        },\n\n        \"<uri>\": function(part) {\n            return part.type === \"uri\";\n        },\n\n        \"<width>\": \"<margin-width>\"\n    },\n\n    complex: {\n        __proto__: null,\n\n        \"<azimuth>\":\n            \"<angle>\" +\n            \" | \" +\n            \"[ [ left-side | far-left | left | center-left | center | \" +\n            \"center-right | right | far-right | right-side ] || behind ]\" +\n            \" | \" +\n            \"leftwards | rightwards\",\n\n        \"<bg-position>\": \"<position>#\",\n\n        \"<bg-size>\":\n            \"[ <length> | <percentage> | auto ]{1,2} | cover | contain\",\n\n        \"<blend-mode>\":\n            \"normal | multiply | screen | overlay | darken | lighten | color-dodge | \" +\n            \"color-burn | hard-light | soft-light | difference | exclusion | hue | \" +\n            \"saturation | color | luminosity\",\n\n        \"<border-image-slice>\":\n        Matcher.many([true /* first element is required */],\n                     Matcher.cast(\"<nonnegative-number-or-percentage>\"),\n                     Matcher.cast(\"<nonnegative-number-or-percentage>\"),\n                     Matcher.cast(\"<nonnegative-number-or-percentage>\"),\n                     Matcher.cast(\"<nonnegative-number-or-percentage>\"),\n                     \"fill\"),\n\n        \"<border-radius>\":\n            \"<nonnegative-length-or-percentage>{1,4} \" +\n            \"[ / <nonnegative-length-or-percentage>{1,4} ]?\",\n\n        \"<box-shadow>\": \"none | <shadow>#\",\n\n        \"<clip-path>\": \"<basic-shape> || <geometry-box>\",\n\n        \"<dasharray>\":\n        Matcher.cast(\"<nonnegative-length-or-percentage>\")\n            .braces(1, Infinity, \"#\", Matcher.cast(\",\").question()),\n\n        \"<family-name>\":\n            \"<string> | <ident-not-generic-family> <ident>*\",\n\n        \"<filter-function-list>\": \"[ <filter-function> | <uri> ]+\",\n        \"<flex>\":\n            \"none | [ <flex-grow> <flex-shrink>? || <flex-basis> ]\",\n\n        \"<font-family>\": \"[ <generic-family> | <family-name> ]#\",\n\n        \"<font-shorthand>\":\n            \"[ <font-style> || <font-variant-css21> || \" +\n            \"<font-weight> || <font-stretch> ]? <font-size> \" +\n            \"[ / <line-height> ]? <font-family>\",\n\n        \"<font-variant-alternates>\":\n            \"stylistic() || \" +\n            \"historical-forms || \" +\n            \"styleset() || \" +\n            \"character-variant() || \" +\n            \"swash() || \" +\n            \"ornaments() || \" +\n            \"annotation()\",\n\n        \"<font-variant-ligatures>\":\n            \"[ common-ligatures | no-common-ligatures ] || \" +\n            \"[ discretionary-ligatures | no-discretionary-ligatures ] || \" +\n            \"[ historical-ligatures | no-historical-ligatures ] || \" +\n            \"[ contextual | no-contextual ]\",\n\n        \"<font-variant-numeric>\":\n            \"[ lining-nums | oldstyle-nums ] || \" +\n            \"[ proportional-nums | tabular-nums ] || \" +\n            \"[ diagonal-fractions | stacked-fractions ] || \" +\n            \"ordinal || slashed-zero\",\n\n        \"<font-variant-east-asian>\":\n            \"[ jis78 | jis83 | jis90 | jis04 | simplified | traditional ] || \" +\n            \"[ full-width | proportional-width ] || \" +\n            \"ruby\",\n        \"<paint>\": \"<paint-basic> | <uri> <paint-basic>?\",\n        \"<paint-basic>\": \"none | currentColor | <color-svg> <icccolor>?\",\n\n        \"<position>\":\n            \"[ center | [ left | right ] [ <percentage> | <length> ]? ] && \" +\n            \"[ center | [ top | bottom ] [ <percentage> | <length> ]? ]\" +\n            \" | \" +\n            \"[ left | center | right | <percentage> | <length> ] \" +\n            \"[ top | center | bottom | <percentage> | <length> ]\" +\n            \" | \" +\n            \"[ left | center | right | top | bottom | <percentage> | <length> ]\",\n\n        \"<repeat-style>\":\n            \"repeat-x | repeat-y | [ repeat | space | round | no-repeat ]{1,2}\",\n\n        \"<shadow>\":\n        Matcher.many([true /* length is required */],\n                     Matcher.cast(\"<length>\").braces(2, 4), \"inset\", \"<color>\"),\n\n        \"<text-decoration-color>\":\n           \"<color>\",\n\n        \"<text-decoration-line>\":\n            \"none | [ underline || overline || line-through || blink ]\",\n\n        \"<text-decoration-style>\":\n            \"solid | double | dotted | dashed | wavy\",\n\n        \"<will-change>\":\n            \"auto | <animateable-feature>#\",\n\n        \"<x-one-radius>\":\n            \"[ <length> | <percentage> ]{1,2}\"\n    }\n});\n\nObject.keys(ValidationTypes.simple).forEach(function(nt) {\n    var rule = ValidationTypes.simple[nt];\n    if (typeof rule === \"string\") {\n        ValidationTypes.simple[nt] = function(part) {\n            return ValidationTypes.isLiteral(part, rule);\n        };\n    }\n});\n\nObject.keys(ValidationTypes.complex).forEach(function(nt) {\n    var rule = ValidationTypes.complex[nt];\n    if (typeof rule === \"string\") {\n        ValidationTypes.complex[nt] = Matcher.parse(rule);\n    }\n});\nValidationTypes.complex[\"<font-variant>\"] =\n    Matcher.oror({ expand: \"<font-variant-ligatures>\" },\n                 { expand: \"<font-variant-alternates>\" },\n                 \"<font-variant-caps>\",\n                 { expand: \"<font-variant-numeric>\" },\n                 { expand: \"<font-variant-east-asian>\" });\n\n},{\"./Matcher\":3}],22:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n    Colors            : require(\"./Colors\"),\n    Combinator        : require(\"./Combinator\"),\n    Parser            : require(\"./Parser\"),\n    PropertyName      : require(\"./PropertyName\"),\n    PropertyValue     : require(\"./PropertyValue\"),\n    PropertyValuePart : require(\"./PropertyValuePart\"),\n    Matcher           : require(\"./Matcher\"),\n    MediaFeature      : require(\"./MediaFeature\"),\n    MediaQuery        : require(\"./MediaQuery\"),\n    Selector          : require(\"./Selector\"),\n    SelectorPart      : require(\"./SelectorPart\"),\n    SelectorSubPart   : require(\"./SelectorSubPart\"),\n    Specificity       : require(\"./Specificity\"),\n    TokenStream       : require(\"./TokenStream\"),\n    Tokens            : require(\"./Tokens\"),\n    ValidationError   : require(\"./ValidationError\")\n};\n\n},{\"./Colors\":1,\"./Combinator\":2,\"./Matcher\":3,\"./MediaFeature\":4,\"./MediaQuery\":5,\"./Parser\":6,\"./PropertyName\":8,\"./PropertyValue\":9,\"./PropertyValuePart\":11,\"./Selector\":13,\"./SelectorPart\":14,\"./SelectorSubPart\":15,\"./Specificity\":16,\"./TokenStream\":17,\"./Tokens\":18,\"./ValidationError\":20}],23:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = EventTarget;\nfunction EventTarget() {\n    this._listeners = Object.create(null);\n}\n\nEventTarget.prototype = {\n    constructor: EventTarget,\n    addListener: function(type, listener) {\n        if (!this._listeners[type]) {\n            this._listeners[type] = [];\n        }\n\n        this._listeners[type].push(listener);\n    },\n    fire: function(event) {\n        if (typeof event === \"string\") {\n            event = { type: event };\n        }\n        if (typeof event.target !== \"undefined\") {\n            event.target = this;\n        }\n\n        if (typeof event.type === \"undefined\") {\n            throw new Error(\"Event object missing 'type' property.\");\n        }\n\n        if (this._listeners[event.type]) {\n            var listeners = this._listeners[event.type].concat();\n            for (var i = 0, len = listeners.length; i < len; i++) {\n                listeners[i].call(this, event);\n            }\n        }\n    },\n    removeListener: function(type, listener) {\n        if (this._listeners[type]) {\n            var listeners = this._listeners[type];\n            for (var i = 0, len = listeners.length; i < len; i++) {\n                if (listeners[i] === listener) {\n                    listeners.splice(i, 1);\n                    break;\n                }\n            }\n\n\n        }\n    }\n};\n\n},{}],24:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = StringReader;\nfunction StringReader(text) {\n    this._input = text.replace(/(\\r\\n?|\\n)/g, \"\\n\");\n    this._line = 1;\n    this._col = 1;\n    this._cursor = 0;\n}\n\nStringReader.prototype = {\n    constructor: StringReader,\n    getCol: function() {\n        return this._col;\n    },\n    getLine: function() {\n        return this._line;\n    },\n    eof: function() {\n        return this._cursor === this._input.length;\n    },\n    peek: function(count) {\n        var c = null;\n        count = typeof count === \"undefined\" ? 1 : count;\n        if (this._cursor < this._input.length) {\n            c = this._input.charAt(this._cursor + count - 1);\n        }\n\n        return c;\n    },\n    read: function() {\n        var c = null;\n        if (this._cursor < this._input.length) {\n            if (this._input.charAt(this._cursor) === \"\\n\") {\n                this._line++;\n                this._col = 1;\n            } else {\n                this._col++;\n            }\n            c = this._input.charAt(this._cursor++);\n        }\n\n        return c;\n    },\n    mark: function() {\n        this._bookmark = {\n            cursor: this._cursor,\n            line:   this._line,\n            col:    this._col\n        };\n    },\n\n    reset: function() {\n        if (this._bookmark) {\n            this._cursor = this._bookmark.cursor;\n            this._line = this._bookmark.line;\n            this._col = this._bookmark.col;\n            delete this._bookmark;\n        }\n    },\n    peekCount: function(count) {\n        count = typeof count === \"undefined\" ? 1 : Math.max(count, 0);\n        return this._input.substring(this._cursor, this._cursor + count);\n    },\n    readTo: function(pattern) {\n\n        var buffer = \"\",\n            c;\n        while (buffer.length < pattern.length || buffer.lastIndexOf(pattern) !== buffer.length - pattern.length) {\n            c = this.read();\n            if (c) {\n                buffer += c;\n            } else {\n                throw new Error(\"Expected \\\"\" + pattern + \"\\\" at line \" + this._line  + \", col \" + this._col + \".\");\n            }\n        }\n\n        return buffer;\n\n    },\n    readWhile: function(filter) {\n\n        var buffer = \"\",\n            c = this.peek();\n\n        while (c !== null && filter(c)) {\n            buffer += this.read();\n            c = this.peek();\n        }\n\n        return buffer;\n\n    },\n    readMatch: function(matcher) {\n\n        var source = this._input.substring(this._cursor),\n            value = null;\n        if (typeof matcher === \"string\") {\n            if (source.slice(0, matcher.length) === matcher) {\n                value = this.readCount(matcher.length);\n            }\n        } else if (matcher instanceof RegExp) {\n            if (matcher.test(source)) {\n                value = this.readCount(RegExp.lastMatch.length);\n            }\n        }\n\n        return value;\n    },\n    readCount: function(count) {\n        var buffer = \"\";\n\n        while (count--) {\n            buffer += this.read();\n        }\n\n        return buffer;\n    }\n\n};\n\n},{}],25:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = SyntaxError;\nfunction SyntaxError(message, line, col) {\n    Error.call(this);\n    this.name = this.constructor.name;\n    this.col = col;\n    this.line = line;\n    this.message = message;\n\n}\nSyntaxError.prototype = Object.create(Error.prototype); // jshint ignore:line\nSyntaxError.prototype.constructor = SyntaxError; // jshint ignore:line\n\n},{}],26:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = SyntaxUnit;\nfunction SyntaxUnit(text, line, col, type) {\n    this.col = col;\n    this.line = line;\n    this.text = text;\n    this.type = type;\n}\nSyntaxUnit.fromToken = function(token) {\n    return new SyntaxUnit(token.value, token.startLine, token.startCol);\n};\n\nSyntaxUnit.prototype = {\n    constructor: SyntaxUnit,\n    valueOf: function() {\n        return this.toString();\n    },\n    toString: function() {\n        return this.text;\n    }\n\n};\n\n},{}],27:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = TokenStreamBase;\n\nvar StringReader = require(\"./StringReader\");\nvar SyntaxError = require(\"./SyntaxError\");\nfunction TokenStreamBase(input, tokenData) {\n    this._reader = new StringReader(input ? input.toString() : \"\");\n    this._token = null;\n    this._tokenData = tokenData;\n    this._lt = [];\n    this._ltIndex = 0;\n\n    this._ltIndexCache = [];\n}\nTokenStreamBase.createTokenData = function(tokens) {\n\n    var nameMap     = [],\n        typeMap     = Object.create(null),\n        tokenData   = tokens.concat([]),\n        i           = 0,\n        len         = tokenData.length + 1;\n\n    tokenData.UNKNOWN = -1;\n    tokenData.unshift({ name:\"EOF\" });\n\n    for (; i < len; i++) {\n        nameMap.push(tokenData[i].name);\n        tokenData[tokenData[i].name] = i;\n        if (tokenData[i].text) {\n            typeMap[tokenData[i].text] = i;\n        }\n    }\n\n    tokenData.name = function(tt) {\n        return nameMap[tt];\n    };\n\n    tokenData.type = function(c) {\n        return typeMap[c];\n    };\n\n    return tokenData;\n};\n\nTokenStreamBase.prototype = {\n    constructor: TokenStreamBase,\n    match: function(tokenTypes, channel) {\n        if (!(tokenTypes instanceof Array)) {\n            tokenTypes = [tokenTypes];\n        }\n\n        var tt  = this.get(channel),\n            i   = 0,\n            len = tokenTypes.length;\n\n        while (i < len) {\n            if (tt === tokenTypes[i++]) {\n                return true;\n            }\n        }\n        this.unget();\n        return false;\n    },\n    mustMatch: function(tokenTypes) {\n\n        var token;\n        if (!(tokenTypes instanceof Array)) {\n            tokenTypes = [tokenTypes];\n        }\n\n        if (!this.match.apply(this, arguments)) {\n            token = this.LT(1);\n            throw new SyntaxError(\"Expected \" + this._tokenData[tokenTypes[0]].name +\n                \" at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n        }\n    },\n    advance: function(tokenTypes, channel) {\n\n        while (this.LA(0) !== 0 && !this.match(tokenTypes, channel)) {\n            this.get();\n        }\n\n        return this.LA(0);\n    },\n    get: function(channel) {\n\n        var tokenInfo = this._tokenData,\n            i         = 0,\n            token,\n            info;\n        if (this._lt.length && this._ltIndex >= 0 && this._ltIndex < this._lt.length) {\n\n            i++;\n            this._token = this._lt[this._ltIndex++];\n            info = tokenInfo[this._token.type];\n            while ((typeof info.channel !== \"undefined\" && channel !== info.channel) &&\n                    this._ltIndex < this._lt.length) {\n                this._token = this._lt[this._ltIndex++];\n                info = tokenInfo[this._token.type];\n                i++;\n            }\n            if ((typeof info.channel === \"undefined\" || channel === info.channel) &&\n                    this._ltIndex <= this._lt.length) {\n                this._ltIndexCache.push(i);\n                return this._token.type;\n            }\n        }\n        token = this._getToken();\n        if (token.type > -1 && !tokenInfo[token.type].hide) {\n            token.channel = tokenInfo[token.type].channel;\n            this._token = token;\n            this._lt.push(token);\n            this._ltIndexCache.push(this._lt.length - this._ltIndex + i);\n            if (this._lt.length > 5) {\n                this._lt.shift();\n            }\n            if (this._ltIndexCache.length > 5) {\n                this._ltIndexCache.shift();\n            }\n            this._ltIndex = this._lt.length;\n        }\n        info = tokenInfo[token.type];\n        if (info &&\n                (info.hide ||\n                (typeof info.channel !== \"undefined\" && channel !== info.channel))) {\n            return this.get(channel);\n        } else {\n            return token.type;\n        }\n    },\n    LA: function(index) {\n        var total = index,\n            tt;\n        if (index > 0) {\n            if (index > 5) {\n                throw new Error(\"Too much lookahead.\");\n            }\n            while (total) {\n                tt = this.get();\n                total--;\n            }\n            while (total < index) {\n                this.unget();\n                total++;\n            }\n        } else if (index < 0) {\n\n            if (this._lt[this._ltIndex + index]) {\n                tt = this._lt[this._ltIndex + index].type;\n            } else {\n                throw new Error(\"Too much lookbehind.\");\n            }\n\n        } else {\n            tt = this._token.type;\n        }\n\n        return tt;\n\n    },\n    LT: function(index) {\n        this.LA(index);\n        return this._lt[this._ltIndex + index - 1];\n    },\n    peek: function() {\n        return this.LA(1);\n    },\n    token: function() {\n        return this._token;\n    },\n    tokenName: function(tokenType) {\n        if (tokenType < 0 || tokenType > this._tokenData.length) {\n            return \"UNKNOWN_TOKEN\";\n        } else {\n            return this._tokenData[tokenType].name;\n        }\n    },\n    tokenType: function(tokenName) {\n        return this._tokenData[tokenName] || -1;\n    },\n    unget: function() {\n        if (this._ltIndexCache.length) {\n            this._ltIndex -= this._ltIndexCache.pop();//--;\n            this._token = this._lt[this._ltIndex - 1];\n        } else {\n            throw new Error(\"Too much lookahead.\");\n        }\n    }\n\n};\n\n\n},{\"./StringReader\":24,\"./SyntaxError\":25}],28:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n    StringReader    : require(\"./StringReader\"),\n    SyntaxError     : require(\"./SyntaxError\"),\n    SyntaxUnit      : require(\"./SyntaxUnit\"),\n    EventTarget     : require(\"./EventTarget\"),\n    TokenStreamBase : require(\"./TokenStreamBase\")\n};\n\n},{\"./EventTarget\":23,\"./StringReader\":24,\"./SyntaxError\":25,\"./SyntaxUnit\":26,\"./TokenStreamBase\":27}],\"parserlib\":[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n    css  : require(\"./css\"),\n    util : require(\"./util\")\n};\n\n},{\"./css\":22,\"./util\":28}]},{},[]);\n\nreturn require('parserlib');\n})();\nvar clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n  return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n  nativeMap = Map;\n} catch(_) {\n  nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n  nativeSet = Set;\n} catch(_) {\n  nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n  nativePromise = Promise;\n} catch(_) {\n  nativePromise = function() {};\n}\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n  if (typeof circular === 'object') {\n    depth = circular.depth;\n    prototype = circular.prototype;\n    includeNonEnumerable = circular.includeNonEnumerable;\n    circular = circular.circular;\n  }\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n  function _clone(parent, depth) {\n    if (parent === null)\n      return null;\n\n    if (depth === 0)\n      return parent;\n\n    var child;\n    var proto;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      child = new nativeMap();\n    } else if (_instanceof(parent, nativeSet)) {\n      child = new nativeSet();\n    } else if (_instanceof(parent, nativePromise)) {\n      child = new nativePromise(function (resolve, reject) {\n        parent.then(function(value) {\n          resolve(_clone(value, depth - 1));\n        }, function(err) {\n          reject(_clone(err, depth - 1));\n        });\n      });\n    } else if (clone.__isArray(parent)) {\n      child = [];\n    } else if (clone.__isRegExp(parent)) {\n      child = new RegExp(parent.source, __getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (clone.__isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      if (Buffer.allocUnsafe) {\n        child = Buffer.allocUnsafe(parent.length);\n      } else {\n        child = new Buffer(parent.length);\n      }\n      parent.copy(child);\n      return child;\n    } else if (_instanceof(parent, Error)) {\n      child = Object.create(parent);\n    } else {\n      if (typeof prototype == 'undefined') {\n        proto = Object.getPrototypeOf(parent);\n        child = Object.create(proto);\n      }\n      else {\n        child = Object.create(prototype);\n        proto = prototype;\n      }\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      parent.forEach(function(value, key) {\n        var keyChild = _clone(key, depth - 1);\n        var valueChild = _clone(value, depth - 1);\n        child.set(keyChild, valueChild);\n      });\n    }\n    if (_instanceof(parent, nativeSet)) {\n      parent.forEach(function(value) {\n        var entryChild = _clone(value, depth - 1);\n        child.add(entryChild);\n      });\n    }\n\n    for (var i in parent) {\n      var attrs;\n      if (proto) {\n        attrs = Object.getOwnPropertyDescriptor(proto, i);\n      }\n\n      if (attrs && attrs.set == null) {\n        continue;\n      }\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(parent);\n      for (var i = 0; i < symbols.length; i++) {\n        var symbol = symbols[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n        if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n          continue;\n        }\n        child[symbol] = _clone(parent[symbol], depth - 1);\n        if (!descriptor.enumerable) {\n          Object.defineProperty(child, symbol, {\n            enumerable: false\n          });\n        }\n      }\n    }\n\n    if (includeNonEnumerable) {\n      var allPropertyNames = Object.getOwnPropertyNames(parent);\n      for (var i = 0; i < allPropertyNames.length; i++) {\n        var propertyName = allPropertyNames[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n        if (descriptor && descriptor.enumerable) {\n          continue;\n        }\n        child[propertyName] = _clone(parent[propertyName], depth - 1);\n        Object.defineProperty(child, propertyName, {\n          enumerable: false\n        });\n      }\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\nclone.clonePrototype = function clonePrototype(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\nfunction __objToStr(o) {\n  return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n  var flags = '';\n  if (re.global) flags += 'g';\n  if (re.ignoreCase) flags += 'i';\n  if (re.multiline) flags += 'm';\n  return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n  module.exports = clone;\n}\n\nvar CSSLint = (function() {\n    \"use strict\";\n\n    var rules           = [],\n        formatters      = [],\n        embeddedRuleset = /\\/\\*\\s*csslint([^\\*]*)\\*\\//,\n        api             = new parserlib.util.EventTarget();\n\n    api.version = \"1.0.5\";\n    api.addRule = function(rule) {\n        rules.push(rule);\n        rules[rule.id] = rule;\n    };\n    api.clearRules = function() {\n        rules = [];\n    };\n    api.getRules = function() {\n        return [].concat(rules).sort(function(a, b) {\n            return a.id > b.id ? 1 : 0;\n        });\n    };\n    api.getRuleset = function() {\n        var ruleset = {},\n            i = 0,\n            len = rules.length;\n\n        while (i < len) {\n            ruleset[rules[i++].id] = 1;    // by default, everything is a warning\n        }\n\n        return ruleset;\n    };\n    function applyEmbeddedRuleset(text, ruleset) {\n        var valueMap,\n            embedded = text && text.match(embeddedRuleset),\n            rules = embedded && embedded[1];\n\n        if (rules) {\n            valueMap = {\n                \"true\": 2,  // true is error\n                \"\": 1,      // blank is warning\n                \"false\": 0, // false is ignore\n\n                \"2\": 2,     // explicit error\n                \"1\": 1,     // explicit warning\n                \"0\": 0      // explicit ignore\n            };\n\n            rules.toLowerCase().split(\",\").forEach(function(rule) {\n                var pair = rule.split(\":\"),\n                    property = pair[0] || \"\",\n                    value = pair[1] || \"\";\n\n                ruleset[property.trim()] = valueMap[value.trim()];\n            });\n        }\n\n        return ruleset;\n    }\n    api.addFormatter = function(formatter) {\n        formatters[formatter.id] = formatter;\n    };\n    api.getFormatter = function(formatId) {\n        return formatters[formatId];\n    };\n    api.format = function(results, filename, formatId, options) {\n        var formatter = api.getFormatter(formatId),\n            result = null;\n\n        if (formatter) {\n            result = formatter.startFormat();\n            result += formatter.formatResults(results, filename, options || {});\n            result += formatter.endFormat();\n        }\n\n        return result;\n    };\n    api.hasFormat = function(formatId) {\n        return formatters.hasOwnProperty(formatId);\n    };\n    api.verify = function(text, ruleset) {\n\n        var i = 0,\n            reporter,\n            lines,\n            allow = {},\n            ignore = [],\n            report,\n            parser = new parserlib.css.Parser({\n                starHack: true,\n                ieFilters: true,\n                underscoreHack: true,\n                strict: false\n            });\n        lines = text.replace(/\\n\\r?/g, \"$split$\").split(\"$split$\");\n        CSSLint.Util.forEach(lines, function (line, lineno) {\n            var allowLine = line && line.match(/\\/\\*[ \\t]*csslint[ \\t]+allow:[ \\t]*([^\\*]*)\\*\\//i),\n                allowRules = allowLine && allowLine[1],\n                allowRuleset = {};\n\n            if (allowRules) {\n                allowRules.toLowerCase().split(\",\").forEach(function(allowRule) {\n                    allowRuleset[allowRule.trim()] = true;\n                });\n                if (Object.keys(allowRuleset).length > 0) {\n                    allow[lineno + 1] = allowRuleset;\n                }\n            }\n        });\n\n        var ignoreStart = null,\n            ignoreEnd = null;\n        CSSLint.Util.forEach(lines, function (line, lineno) {\n            if (ignoreStart === null && line.match(/\\/\\*[ \\t]*csslint[ \\t]+ignore:start[ \\t]*\\*\\//i)) {\n                ignoreStart = lineno;\n            }\n\n            if (line.match(/\\/\\*[ \\t]*csslint[ \\t]+ignore:end[ \\t]*\\*\\//i)) {\n                ignoreEnd = lineno;\n            }\n\n            if (ignoreStart !== null && ignoreEnd !== null) {\n                ignore.push([ignoreStart, ignoreEnd]);\n                ignoreStart = ignoreEnd = null;\n            }\n        });\n        if (ignoreStart !== null) {\n            ignore.push([ignoreStart, lines.length]);\n        }\n\n        if (!ruleset) {\n            ruleset = api.getRuleset();\n        }\n\n        if (embeddedRuleset.test(text)) {\n            ruleset = clone(ruleset);\n            ruleset = applyEmbeddedRuleset(text, ruleset);\n        }\n\n        reporter = new Reporter(lines, ruleset, allow, ignore);\n\n        ruleset.errors = 2;       // always report parsing errors as errors\n        for (i in ruleset) {\n            if (ruleset.hasOwnProperty(i) && ruleset[i]) {\n                if (rules[i]) {\n                    rules[i].init(parser, reporter);\n                }\n            }\n        }\n        try {\n            parser.parse(text);\n        } catch (ex) {\n            reporter.error(\"Fatal error, cannot continue: \" + ex.message, ex.line, ex.col, {});\n        }\n\n        report = {\n            messages    : reporter.messages,\n            stats       : reporter.stats,\n            ruleset     : reporter.ruleset,\n            allow       : reporter.allow,\n            ignore      : reporter.ignore\n        };\n        report.messages.sort(function (a, b) {\n            if (a.rollup && !b.rollup) {\n                return 1;\n            } else if (!a.rollup && b.rollup) {\n                return -1;\n            } else {\n                return a.line - b.line;\n            }\n        });\n\n        return report;\n    };\n\n    return api;\n\n})();\nfunction Reporter(lines, ruleset, allow, ignore) {\n    \"use strict\";\n    this.messages = [];\n    this.stats = [];\n    this.lines = lines;\n    this.ruleset = ruleset;\n    this.allow = allow;\n    if (!this.allow) {\n        this.allow = {};\n    }\n    this.ignore = ignore;\n    if (!this.ignore) {\n        this.ignore = [];\n    }\n}\n\nReporter.prototype = {\n    constructor: Reporter,\n    error: function(message, line, col, rule) {\n        \"use strict\";\n        this.messages.push({\n            type    : \"error\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule || {}\n        });\n    },\n    warn: function(message, line, col, rule) {\n        \"use strict\";\n        this.report(message, line, col, rule);\n    },\n    report: function(message, line, col, rule) {\n        \"use strict\";\n        if (this.allow.hasOwnProperty(line) && this.allow[line].hasOwnProperty(rule.id)) {\n            return;\n        }\n\n        if (this.isIgnored(line)) {\n            return;\n        }\n\n        this.messages.push({\n            type    : this.ruleset[rule.id] === 2 ? \"error\" : \"warning\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule\n        });\n    },\n    info: function(message, line, col, rule) {\n        \"use strict\";\n        this.messages.push({\n            type    : \"info\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule\n        });\n    },\n    rollupError: function(message, rule) {\n        \"use strict\";\n        this.messages.push({\n            type    : \"error\",\n            rollup  : true,\n            message : message,\n            rule    : rule\n        });\n    },\n    rollupWarn: function(message, rule) {\n        \"use strict\";\n        this.messages.push({\n            type    : \"warning\",\n            rollup  : true,\n            message : message,\n            rule    : rule\n        });\n    },\n    stat: function(name, value) {\n        \"use strict\";\n        this.stats[name] = value;\n    },\n    isIgnored: function(line) {\n        \"use strict\";\n        var ignore = false;\n        CSSLint.Util.forEach(this.ignore, function (range) {\n            if (range[0] <= line && line <= range[1]) {\n                ignore = true;\n            }\n        });\n        return ignore;\n    }\n};\nCSSLint._Reporter = Reporter;\nCSSLint.Util = {\n    mix: function(receiver, supplier) {\n        \"use strict\";\n        var prop;\n\n        for (prop in supplier) {\n            if (supplier.hasOwnProperty(prop)) {\n                receiver[prop] = supplier[prop];\n            }\n        }\n\n        return prop;\n    },\n    indexOf: function(values, value) {\n        \"use strict\";\n        if (values.indexOf) {\n            return values.indexOf(value);\n        } else {\n            for (var i=0, len=values.length; i < len; i++) {\n                if (values[i] === value) {\n                    return i;\n                }\n            }\n            return -1;\n        }\n    },\n    forEach: function(values, func) {\n        \"use strict\";\n        if (values.forEach) {\n            return values.forEach(func);\n        } else {\n            for (var i=0, len=values.length; i < len; i++) {\n                func(values[i], i, values);\n            }\n        }\n    }\n};\nCSSLint.addRule({\n    id: \"box-model\",\n    name: \"Beware of broken box size\",\n    desc: \"Don't use width or height when using padding or border.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Beware-of-box-model-size\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            widthProperties = {\n                border: 1,\n                \"border-left\": 1,\n                \"border-right\": 1,\n                padding: 1,\n                \"padding-left\": 1,\n                \"padding-right\": 1\n            },\n            heightProperties = {\n                border: 1,\n                \"border-bottom\": 1,\n                \"border-top\": 1,\n                padding: 1,\n                \"padding-bottom\": 1,\n                \"padding-top\": 1\n            },\n            properties,\n            boxSizing = false;\n\n        function startRule() {\n            properties = {};\n            boxSizing = false;\n        }\n\n        function endRule() {\n            var prop, value;\n\n            if (!boxSizing) {\n                if (properties.height) {\n                    for (prop in heightProperties) {\n                        if (heightProperties.hasOwnProperty(prop) && properties[prop]) {\n                            value = properties[prop].value;\n                            if (!(prop === \"padding\" && value.parts.length === 2 && value.parts[0].value === 0)) {\n                                reporter.report(\"Using height with \" + prop + \" can sometimes make elements larger than you expect.\", properties[prop].line, properties[prop].col, rule);\n                            }\n                        }\n                    }\n                }\n\n                if (properties.width) {\n                    for (prop in widthProperties) {\n                        if (widthProperties.hasOwnProperty(prop) && properties[prop]) {\n                            value = properties[prop].value;\n\n                            if (!(prop === \"padding\" && value.parts.length === 2 && value.parts[1].value === 0)) {\n                                reporter.report(\"Using width with \" + prop + \" can sometimes make elements larger than you expect.\", properties[prop].line, properties[prop].col, rule);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n        parser.addListener(\"startviewport\", startRule);\n\n        parser.addListener(\"property\", function(event) {\n            var name = event.property.text.toLowerCase();\n\n            if (heightProperties[name] || widthProperties[name]) {\n                if (!/^0\\S*$/.test(event.value) && !(name === \"border\" && event.value.toString() === \"none\")) {\n                    properties[name] = {\n                        line: event.property.line,\n                        col: event.property.col,\n                        value: event.value\n                    };\n                }\n            } else {\n                if (/^(width|height)/i.test(name) && /^(length|percentage)/.test(event.value.parts[0].type)) {\n                    properties[name] = 1;\n                } else if (name === \"box-sizing\") {\n                    boxSizing = true;\n                }\n            }\n\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n        parser.addListener(\"endviewport\", endRule);\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"bulletproof-font-face\",\n    name: \"Use the bulletproof @font-face syntax\",\n    desc: \"Use the bulletproof @font-face syntax to avoid 404's in old IE (http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax).\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Bulletproof-font-face\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            fontFaceRule = false,\n            firstSrc = true,\n            ruleFailed = false,\n            line, col;\n        parser.addListener(\"startfontface\", function() {\n            fontFaceRule = true;\n        });\n\n        parser.addListener(\"property\", function(event) {\n            if (!fontFaceRule) {\n                return;\n            }\n\n            var propertyName = event.property.toString().toLowerCase(),\n                value = event.value.toString();\n            line = event.line;\n            col = event.col;\n            if (propertyName === \"src\") {\n                var regex = /^\\s?url\\(['\"].+\\.eot\\?.*['\"]\\)\\s*format\\(['\"]embedded-opentype['\"]\\).*$/i;\n                if (!value.match(regex) && firstSrc) {\n                    ruleFailed = true;\n                    firstSrc = false;\n                } else if (value.match(regex) && !firstSrc) {\n                    ruleFailed = false;\n                }\n            }\n\n\n        });\n        parser.addListener(\"endfontface\", function() {\n            fontFaceRule = false;\n\n            if (ruleFailed) {\n                reporter.report(\"@font-face declaration doesn't follow the fontspring bulletproof syntax.\", line, col, rule);\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"compatible-vendor-prefixes\",\n    name: \"Require compatible vendor prefixes\",\n    desc: \"Include all compatible vendor prefixes to reach a wider range of users.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Require-compatible-vendor-prefixes\",\n    browsers: \"All\",\n    init: function (parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            compatiblePrefixes,\n            properties,\n            prop,\n            variations,\n            prefixed,\n            i,\n            len,\n            inKeyFrame = false,\n            arrayPush = Array.prototype.push,\n            applyTo = [];\n        compatiblePrefixes = {\n            \"animation\"                  : \"webkit\",\n            \"animation-delay\"            : \"webkit\",\n            \"animation-direction\"        : \"webkit\",\n            \"animation-duration\"         : \"webkit\",\n            \"animation-fill-mode\"        : \"webkit\",\n            \"animation-iteration-count\"  : \"webkit\",\n            \"animation-name\"             : \"webkit\",\n            \"animation-play-state\"       : \"webkit\",\n            \"animation-timing-function\"  : \"webkit\",\n            \"appearance\"                 : \"webkit moz\",\n            \"border-end\"                 : \"webkit moz\",\n            \"border-end-color\"           : \"webkit moz\",\n            \"border-end-style\"           : \"webkit moz\",\n            \"border-end-width\"           : \"webkit moz\",\n            \"border-image\"               : \"webkit moz o\",\n            \"border-radius\"              : \"webkit\",\n            \"border-start\"               : \"webkit moz\",\n            \"border-start-color\"         : \"webkit moz\",\n            \"border-start-style\"         : \"webkit moz\",\n            \"border-start-width\"         : \"webkit moz\",\n            \"box-align\"                  : \"webkit moz\",\n            \"box-direction\"              : \"webkit moz\",\n            \"box-flex\"                   : \"webkit moz\",\n            \"box-lines\"                  : \"webkit\",\n            \"box-ordinal-group\"          : \"webkit moz\",\n            \"box-orient\"                 : \"webkit moz\",\n            \"box-pack\"                   : \"webkit moz\",\n            \"box-sizing\"                 : \"\",\n            \"box-shadow\"                 : \"\",\n            \"column-count\"               : \"webkit moz ms\",\n            \"column-gap\"                 : \"webkit moz ms\",\n            \"column-rule\"                : \"webkit moz ms\",\n            \"column-rule-color\"          : \"webkit moz ms\",\n            \"column-rule-style\"          : \"webkit moz ms\",\n            \"column-rule-width\"          : \"webkit moz ms\",\n            \"column-width\"               : \"webkit moz ms\",\n            \"flex\"                       : \"webkit ms\",\n            \"flex-basis\"                 : \"webkit\",\n            \"flex-direction\"             : \"webkit ms\",\n            \"flex-flow\"                  : \"webkit\",\n            \"flex-grow\"                  : \"webkit\",\n            \"flex-shrink\"                : \"webkit\",\n            \"hyphens\"                    : \"epub moz\",\n            \"line-break\"                 : \"webkit ms\",\n            \"margin-end\"                 : \"webkit moz\",\n            \"margin-start\"               : \"webkit moz\",\n            \"marquee-speed\"              : \"webkit wap\",\n            \"marquee-style\"              : \"webkit wap\",\n            \"padding-end\"                : \"webkit moz\",\n            \"padding-start\"              : \"webkit moz\",\n            \"tab-size\"                   : \"moz o\",\n            \"text-size-adjust\"           : \"webkit ms\",\n            \"transform\"                  : \"webkit ms\",\n            \"transform-origin\"           : \"webkit ms\",\n            \"transition\"                 : \"\",\n            \"transition-delay\"           : \"\",\n            \"transition-duration\"        : \"\",\n            \"transition-property\"        : \"\",\n            \"transition-timing-function\" : \"\",\n            \"user-modify\"                : \"webkit moz\",\n            \"user-select\"                : \"webkit moz ms\",\n            \"word-break\"                 : \"epub ms\",\n            \"writing-mode\"               : \"epub ms\"\n        };\n\n\n        for (prop in compatiblePrefixes) {\n            if (compatiblePrefixes.hasOwnProperty(prop)) {\n                variations = [];\n                prefixed = compatiblePrefixes[prop].split(\" \");\n                for (i = 0, len = prefixed.length; i < len; i++) {\n                    variations.push(\"-\" + prefixed[i] + \"-\" + prop);\n                }\n                compatiblePrefixes[prop] = variations;\n                arrayPush.apply(applyTo, variations);\n            }\n        }\n\n        parser.addListener(\"startrule\", function () {\n            properties = [];\n        });\n\n        parser.addListener(\"startkeyframes\", function (event) {\n            inKeyFrame = event.prefix || true;\n        });\n\n        parser.addListener(\"endkeyframes\", function () {\n            inKeyFrame = false;\n        });\n\n        parser.addListener(\"property\", function (event) {\n            var name = event.property;\n            if (CSSLint.Util.indexOf(applyTo, name.text) > -1) {\n                if (!inKeyFrame || typeof inKeyFrame !== \"string\" ||\n                        name.text.indexOf(\"-\" + inKeyFrame + \"-\") !== 0) {\n                    properties.push(name);\n                }\n            }\n        });\n\n        parser.addListener(\"endrule\", function () {\n            if (!properties.length) {\n                return;\n            }\n\n            var propertyGroups = {},\n                i,\n                len,\n                name,\n                prop,\n                variations,\n                value,\n                full,\n                actual,\n                item,\n                propertiesSpecified;\n\n            for (i = 0, len = properties.length; i < len; i++) {\n                name = properties[i];\n\n                for (prop in compatiblePrefixes) {\n                    if (compatiblePrefixes.hasOwnProperty(prop)) {\n                        variations = compatiblePrefixes[prop];\n                        if (CSSLint.Util.indexOf(variations, name.text) > -1) {\n                            if (!propertyGroups[prop]) {\n                                propertyGroups[prop] = {\n                                    full: variations.slice(0),\n                                    actual: [],\n                                    actualNodes: []\n                                };\n                            }\n                            if (CSSLint.Util.indexOf(propertyGroups[prop].actual, name.text) === -1) {\n                                propertyGroups[prop].actual.push(name.text);\n                                propertyGroups[prop].actualNodes.push(name);\n                            }\n                        }\n                    }\n                }\n            }\n\n            for (prop in propertyGroups) {\n                if (propertyGroups.hasOwnProperty(prop)) {\n                    value = propertyGroups[prop];\n                    full = value.full;\n                    actual = value.actual;\n\n                    if (full.length > actual.length) {\n                        for (i = 0, len = full.length; i < len; i++) {\n                            item = full[i];\n                            if (CSSLint.Util.indexOf(actual, item) === -1) {\n                                propertiesSpecified = (actual.length === 1) ? actual[0] : (actual.length === 2) ? actual.join(\" and \") : actual.join(\", \");\n                                reporter.report(\"The property \" + item + \" is compatible with \" + propertiesSpecified + \" and should be included as well.\", value.actualNodes[0].line, value.actualNodes[0].col, rule);\n                            }\n                        }\n\n                    }\n                }\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"display-property-grouping\",\n    name: \"Require properties appropriate for display\",\n    desc: \"Certain properties shouldn't be used with certain display property values.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Require-properties-appropriate-for-display\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this;\n\n        var propertiesToCheck = {\n                display: 1,\n                \"float\": \"none\",\n                height: 1,\n                width: 1,\n                margin: 1,\n                \"margin-left\": 1,\n                \"margin-right\": 1,\n                \"margin-bottom\": 1,\n                \"margin-top\": 1,\n                padding: 1,\n                \"padding-left\": 1,\n                \"padding-right\": 1,\n                \"padding-bottom\": 1,\n                \"padding-top\": 1,\n                \"vertical-align\": 1\n            },\n            properties;\n\n        function reportProperty(name, display, msg) {\n            if (properties[name]) {\n                if (typeof propertiesToCheck[name] !== \"string\" || properties[name].value.toLowerCase() !== propertiesToCheck[name]) {\n                    reporter.report(msg || name + \" can't be used with display: \" + display + \".\", properties[name].line, properties[name].col, rule);\n                }\n            }\n        }\n\n        function startRule() {\n            properties = {};\n        }\n\n        function endRule() {\n\n            var display = properties.display ? properties.display.value : null;\n            if (display) {\n                switch (display) {\n\n                    case \"inline\":\n                        reportProperty(\"height\", display);\n                        reportProperty(\"width\", display);\n                        reportProperty(\"margin\", display);\n                        reportProperty(\"margin-top\", display);\n                        reportProperty(\"margin-bottom\", display);\n                        reportProperty(\"float\", display, \"display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).\");\n                        break;\n\n                    case \"block\":\n                        reportProperty(\"vertical-align\", display);\n                        break;\n\n                    case \"inline-block\":\n                        reportProperty(\"float\", display);\n                        break;\n\n                    default:\n                        if (display.indexOf(\"table-\") === 0) {\n                            reportProperty(\"margin\", display);\n                            reportProperty(\"margin-left\", display);\n                            reportProperty(\"margin-right\", display);\n                            reportProperty(\"margin-top\", display);\n                            reportProperty(\"margin-bottom\", display);\n                            reportProperty(\"float\", display);\n                        }\n                }\n            }\n\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startviewport\", startRule);\n\n        parser.addListener(\"property\", function(event) {\n            var name = event.property.text.toLowerCase();\n\n            if (propertiesToCheck[name]) {\n                properties[name] = {\n                    value: event.value.text,\n                    line: event.property.line,\n                    col: event.property.col\n                };\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endviewport\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"duplicate-background-images\",\n    name: \"Disallow duplicate background images\",\n    desc: \"Every background-image should be unique. Use a common class for e.g. sprites.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-duplicate-background-images\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            stack = {};\n\n        parser.addListener(\"property\", function(event) {\n            var name = event.property.text,\n                value = event.value,\n                i, len;\n\n            if (name.match(/background/i)) {\n                for (i=0, len=value.parts.length; i < len; i++) {\n                    if (value.parts[i].type === \"uri\") {\n                        if (typeof stack[value.parts[i].uri] === \"undefined\") {\n                            stack[value.parts[i].uri] = event;\n                        } else {\n                            reporter.report(\"Background image '\" + value.parts[i].uri + \"' was used multiple times, first declared at line \" + stack[value.parts[i].uri].line + \", col \" + stack[value.parts[i].uri].col + \".\", event.line, event.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"duplicate-properties\",\n    name: \"Disallow duplicate properties\",\n    desc: \"Duplicate properties must appear one after the other.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-duplicate-properties\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            properties,\n            lastProperty;\n\n        function startRule() {\n            properties = {};\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n        parser.addListener(\"startviewport\", startRule);\n\n        parser.addListener(\"property\", function(event) {\n            var property = event.property,\n                name = property.text.toLowerCase();\n\n            if (properties[name] && (lastProperty !== name || properties[name] === event.value.text)) {\n                reporter.report(\"Duplicate property '\" + event.property + \"' found.\", event.line, event.col, rule);\n            }\n\n            properties[name] = event.value.text;\n            lastProperty = name;\n\n        });\n\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"empty-rules\",\n    name: \"Disallow empty rules\",\n    desc: \"Rules without any properties specified should be removed.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-empty-rules\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            count = 0;\n\n        parser.addListener(\"startrule\", function() {\n            count=0;\n        });\n\n        parser.addListener(\"property\", function() {\n            count++;\n        });\n\n        parser.addListener(\"endrule\", function(event) {\n            var selectors = event.selectors;\n\n            if (count === 0) {\n                reporter.report(\"Rule is empty.\", selectors[0].line, selectors[0].col, rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"errors\",\n    name: \"Parsing Errors\",\n    desc: \"This rule looks for recoverable syntax errors.\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this;\n\n        parser.addListener(\"error\", function(event) {\n            reporter.error(event.message, event.line, event.col, rule);\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"floats\",\n    name: \"Disallow too many floats\",\n    desc: \"This rule tests if the float property is used too many times\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-too-many-floats\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this;\n        var count = 0;\n        parser.addListener(\"property\", function(event) {\n            if (!reporter.isIgnored(event.property.line)) {\n              if (event.property.text.toLowerCase() === \"float\" &&\n                      event.value.text.toLowerCase() !== \"none\") {\n                  count++;\n              }\n            }\n        });\n        parser.addListener(\"endstylesheet\", function() {\n            reporter.stat(\"floats\", count);\n            if (count >= 10) {\n                reporter.rollupWarn(\"Too many floats (\" + count + \"), you're probably using them for layout. Consider using a grid system instead.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"font-faces\",\n    name: \"Don't use too many web fonts\",\n    desc: \"Too many different web fonts in the same stylesheet.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Don%27t-use-too-many-web-fonts\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            count = 0;\n\n\n        parser.addListener(\"startfontface\", function(event) {\n            if (!reporter.isIgnored(event.line)) {\n                count++;\n            }\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            if (count > 5) {\n                reporter.rollupWarn(\"Too many @font-face declarations (\" + count + \").\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"font-sizes\",\n    name: \"Disallow too many font sizes\",\n    desc: \"Checks the number of font-size declarations.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Don%27t-use-too-many-font-size-declarations\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            count = 0;\n        parser.addListener(\"property\", function(event) {\n            if (!reporter.isIgnored(event.property.line)) {\n                if (event.property.toString() === \"font-size\") {\n                    count++;\n                }\n            }\n        });\n        parser.addListener(\"endstylesheet\", function() {\n            reporter.stat(\"font-sizes\", count);\n            if (count >= 10) {\n                reporter.rollupWarn(\"Too many font-size declarations (\" + count + \"), abstraction needed.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"gradients\",\n    name: \"Require all gradient definitions\",\n    desc: \"When using a vendor-prefixed gradient, make sure to use them all.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Require-all-gradient-definitions\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            gradients;\n\n        parser.addListener(\"startrule\", function() {\n            gradients = {\n                moz: 0,\n                webkit: 0,\n                oldWebkit: 0,\n                o: 0\n            };\n        });\n\n        parser.addListener(\"property\", function(event) {\n\n            if (/\\-(moz|o|webkit)(?:\\-(?:linear|radial))\\-gradient/i.test(event.value)) {\n                gradients[RegExp.$1] = 1;\n            } else if (/\\-webkit\\-gradient/i.test(event.value)) {\n                gradients.oldWebkit = 1;\n            }\n\n        });\n\n        parser.addListener(\"endrule\", function(event) {\n            var missing = [];\n\n            if (!gradients.moz) {\n                missing.push(\"Firefox 3.6+\");\n            }\n\n            if (!gradients.webkit) {\n                missing.push(\"Webkit (Safari 5+, Chrome)\");\n            }\n\n            if (!gradients.oldWebkit) {\n                missing.push(\"Old Webkit (Safari 4+, Chrome)\");\n            }\n\n            if (!gradients.o) {\n                missing.push(\"Opera 11.1+\");\n            }\n\n            if (missing.length && missing.length < 4) {\n                reporter.report(\"Missing vendor-prefixed CSS gradients for \" + missing.join(\", \") + \".\", event.selectors[0].line, event.selectors[0].col, rule);\n            }\n\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"ids\",\n    name: \"Disallow IDs in selectors\",\n    desc: \"Selectors should not contain IDs.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-IDs-in-selectors\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this;\n        parser.addListener(\"startrule\", function(event) {\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                idCount,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++) {\n                selector = selectors[i];\n                idCount = 0;\n\n                for (j=0; j < selector.parts.length; j++) {\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE) {\n                        for (k=0; k < part.modifiers.length; k++) {\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"id\") {\n                                idCount++;\n                            }\n                        }\n                    }\n                }\n\n                if (idCount === 1) {\n                    reporter.report(\"Don't use IDs in selectors.\", selector.line, selector.col, rule);\n                } else if (idCount > 1) {\n                    reporter.report(idCount + \" IDs in the selector, really?\", selector.line, selector.col, rule);\n                }\n            }\n\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"import-ie-limit\",\n    name: \"@import limit on IE6-IE9\",\n    desc: \"IE6-9 supports up to 31 @import per stylesheet\",\n    browsers: \"IE6, IE7, IE8, IE9\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            MAX_IMPORT_COUNT = 31,\n            count = 0;\n\n        function startPage() {\n            count = 0;\n        }\n\n        parser.addListener(\"startpage\", startPage);\n\n        parser.addListener(\"import\", function() {\n            count++;\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            if (count > MAX_IMPORT_COUNT) {\n                reporter.rollupError(\n                    \"Too many @import rules (\" + count + \"). IE6-9 supports up to 31 import per stylesheet.\",\n                    rule\n                );\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"import\",\n    name: \"Disallow @import\",\n    desc: \"Don't use @import, use <link> instead.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-%40import\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this;\n\n        parser.addListener(\"import\", function(event) {\n            reporter.report(\"@import prevents parallel downloads, use <link> instead.\", event.line, event.col, rule);\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"important\",\n    name: \"Disallow !important\",\n    desc: \"Be careful when using !important declaration\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-%21important\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            count = 0;\n        parser.addListener(\"property\", function(event) {\n            if (!reporter.isIgnored(event.line)) {\n                if (event.important === true) {\n                    count++;\n                    reporter.report(\"Use of !important\", event.line, event.col, rule);\n                }\n            }\n        });\n        parser.addListener(\"endstylesheet\", function() {\n            reporter.stat(\"important\", count);\n            if (count >= 10) {\n                reporter.rollupWarn(\"Too many !important declarations (\" + count + \"), try to use less than 10 to avoid specificity issues.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"known-properties\",\n    name: \"Require use of known properties\",\n    desc: \"Properties should be known (listed in CSS3 specification) or be a vendor-prefixed property.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Require-use-of-known-properties\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this;\n\n        parser.addListener(\"property\", function(event) {\n            if (event.invalid) {\n                reporter.report(event.invalid.message, event.line, event.col, rule);\n            }\n\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"order-alphabetical\",\n    name: \"Alphabetical order\",\n    desc: \"Assure properties are in alphabetical order\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            properties;\n\n        var startRule = function () {\n            properties = [];\n        };\n\n        var endRule = function(event) {\n            var currentProperties = properties.join(\",\"),\n                expectedProperties = properties.sort().join(\",\");\n\n            if (currentProperties !== expectedProperties) {\n                reporter.report(\"Rule doesn't have all its properties in alphabetical order.\", event.line, event.col, rule);\n            }\n        };\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n        parser.addListener(\"startviewport\", startRule);\n\n        parser.addListener(\"property\", function(event) {\n            var name = event.property.text,\n                lowerCasePrefixLessName = name.toLowerCase().replace(/^-.*?-/, \"\");\n\n            properties.push(lowerCasePrefixLessName);\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n        parser.addListener(\"endviewport\", endRule);\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"outline-none\",\n    name: \"Disallow outline: none\",\n    desc: \"Use of outline: none or outline: 0 should be limited to :focus rules.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-outline%3Anone\",\n    browsers: \"All\",\n    tags: [\"Accessibility\"],\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            lastRule;\n\n        function startRule(event) {\n            if (event.selectors) {\n                lastRule = {\n                    line: event.line,\n                    col: event.col,\n                    selectors: event.selectors,\n                    propCount: 0,\n                    outline: false\n                };\n            } else {\n                lastRule = null;\n            }\n        }\n\n        function endRule() {\n            if (lastRule) {\n                if (lastRule.outline) {\n                    if (lastRule.selectors.toString().toLowerCase().indexOf(\":focus\") === -1) {\n                        reporter.report(\"Outlines should only be modified using :focus.\", lastRule.line, lastRule.col, rule);\n                    } else if (lastRule.propCount === 1) {\n                        reporter.report(\"Outlines shouldn't be hidden unless other visual changes are made.\", lastRule.line, lastRule.col, rule);\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n        parser.addListener(\"startviewport\", startRule);\n\n        parser.addListener(\"property\", function(event) {\n            var name = event.property.text.toLowerCase(),\n                value = event.value;\n\n            if (lastRule) {\n                lastRule.propCount++;\n                if (name === \"outline\" && (value.toString() === \"none\" || value.toString() === \"0\")) {\n                    lastRule.outline = true;\n                }\n            }\n\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n        parser.addListener(\"endviewport\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"overqualified-elements\",\n    name: \"Disallow overqualified elements\",\n    desc: \"Don't use classes or IDs with elements (a.foo or a#foo).\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-overqualified-elements\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            classes = {};\n\n        parser.addListener(\"startrule\", function(event) {\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++) {\n                selector = selectors[i];\n\n                for (j=0; j < selector.parts.length; j++) {\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE) {\n                        for (k=0; k < part.modifiers.length; k++) {\n                            modifier = part.modifiers[k];\n                            if (part.elementName && modifier.type === \"id\") {\n                                reporter.report(\"Element (\" + part + \") is overqualified, just use \" + modifier + \" without element name.\", part.line, part.col, rule);\n                            } else if (modifier.type === \"class\") {\n\n                                if (!classes[modifier]) {\n                                    classes[modifier] = [];\n                                }\n                                classes[modifier].push({\n                                    modifier: modifier,\n                                    part: part\n                                });\n                            }\n                        }\n                    }\n                }\n            }\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n\n            var prop;\n            for (prop in classes) {\n                if (classes.hasOwnProperty(prop)) {\n                    if (classes[prop].length === 1 && classes[prop][0].part.elementName) {\n                        reporter.report(\"Element (\" + classes[prop][0].part + \") is overqualified, just use \" + classes[prop][0].modifier + \" without element name.\", classes[prop][0].part.line, classes[prop][0].part.col, rule);\n                    }\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"regex-selectors\",\n    name: \"Disallow selectors that look like regexs\",\n    desc: \"Selectors that look like regular expressions are slow and should be avoided.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-selectors-that-look-like-regular-expressions\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event) {\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++) {\n                selector = selectors[i];\n                for (j=0; j < selector.parts.length; j++) {\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE) {\n                        for (k=0; k < part.modifiers.length; k++) {\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"attribute\") {\n                                if (/([~\\|\\^\\$\\*]=)/.test(modifier)) {\n                                    reporter.report(\"Attribute selectors with \" + RegExp.$1 + \" are slow!\", modifier.line, modifier.col, rule);\n                                }\n                            }\n\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"rules-count\",\n    name: \"Rules Count\",\n    desc: \"Track how many rules there are.\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var count = 0;\n        parser.addListener(\"startrule\", function() {\n            count++;\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            reporter.stat(\"rule-count\", count);\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"selector-max-approaching\",\n    name: \"Warn when approaching the 4095 selector limit for IE\",\n    desc: \"Will warn when selector count is >= 3800 selectors.\",\n    browsers: \"IE\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this, count = 0;\n\n        parser.addListener(\"startrule\", function(event) {\n            count += event.selectors.length;\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            if (count >= 3800) {\n                reporter.report(\"You have \" + count + \" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\", 0, 0, rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"selector-max\",\n    name: \"Error when past the 4095 selector limit for IE\",\n    desc: \"Will error when selector count is > 4095.\",\n    browsers: \"IE\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this, count = 0;\n\n        parser.addListener(\"startrule\", function(event) {\n            count += event.selectors.length;\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            if (count > 4095) {\n                reporter.report(\"You have \" + count + \" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\", 0, 0, rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"selector-newline\",\n    name: \"Disallow new-line characters in selectors\",\n    desc: \"New-line characters in selectors are usually a forgotten comma and not a descendant combinator.\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this;\n\n        function startRule(event) {\n            var i, len, selector, p, n, pLen, part, part2, type, currentLine, nextLine,\n                selectors = event.selectors;\n\n            for (i = 0, len = selectors.length; i < len; i++) {\n                selector = selectors[i];\n                for (p = 0, pLen = selector.parts.length; p < pLen; p++) {\n                    for (n = p + 1; n < pLen; n++) {\n                        part = selector.parts[p];\n                        part2 = selector.parts[n];\n                        type = part.type;\n                        currentLine = part.line;\n                        nextLine = part2.line;\n\n                        if (type === \"descendant\" && nextLine > currentLine) {\n                            reporter.report(\"newline character found in selector (forgot a comma?)\", currentLine, selectors[i].parts[0].col, rule);\n                        }\n                    }\n                }\n\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n\n    }\n});\n\nCSSLint.addRule({\n    id: \"shorthand\",\n    name: \"Require shorthand properties\",\n    desc: \"Use shorthand properties where possible.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Require-shorthand-properties\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            prop, i, len,\n            propertiesToCheck = {},\n            properties,\n            mapping = {\n                \"margin\": [\n                    \"margin-top\",\n                    \"margin-bottom\",\n                    \"margin-left\",\n                    \"margin-right\"\n                ],\n                \"padding\": [\n                    \"padding-top\",\n                    \"padding-bottom\",\n                    \"padding-left\",\n                    \"padding-right\"\n                ]\n            };\n        for (prop in mapping) {\n            if (mapping.hasOwnProperty(prop)) {\n                for (i=0, len=mapping[prop].length; i < len; i++) {\n                    propertiesToCheck[mapping[prop][i]] = prop;\n                }\n            }\n        }\n\n        function startRule() {\n            properties = {};\n        }\n        function endRule(event) {\n\n            var prop, i, len, total;\n            for (prop in mapping) {\n                if (mapping.hasOwnProperty(prop)) {\n                    total=0;\n\n                    for (i=0, len=mapping[prop].length; i < len; i++) {\n                        total += properties[mapping[prop][i]] ? 1 : 0;\n                    }\n\n                    if (total === mapping[prop].length) {\n                        reporter.report(\"The properties \" + mapping[prop].join(\", \") + \" can be replaced by \" + prop + \".\", event.line, event.col, rule);\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"property\", function(event) {\n            var name = event.property.toString().toLowerCase();\n\n            if (propertiesToCheck[name]) {\n                properties[name] = 1;\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"star-property-hack\",\n    name: \"Disallow properties with a star prefix\",\n    desc: \"Checks for the star property hack (targets IE6/7)\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-star-hack\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this;\n        parser.addListener(\"property\", function(event) {\n            var property = event.property;\n\n            if (property.hack === \"*\") {\n                reporter.report(\"Property with star prefix found.\", event.property.line, event.property.col, rule);\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"text-indent\",\n    name: \"Disallow negative text-indent\",\n    desc: \"Checks for text indent less than -99px\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-negative-text-indent\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            textIndent,\n            direction;\n\n\n        function startRule() {\n            textIndent = false;\n            direction = \"inherit\";\n        }\n        function endRule() {\n            if (textIndent && direction !== \"ltr\") {\n                reporter.report(\"Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set direction for that item to ltr.\", textIndent.line, textIndent.col, rule);\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"property\", function(event) {\n            var name = event.property.toString().toLowerCase(),\n                value = event.value;\n\n            if (name === \"text-indent\" && value.parts[0].value < -99) {\n                textIndent = event.property;\n            } else if (name === \"direction\" && value.toString() === \"ltr\") {\n                direction = \"ltr\";\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"underscore-property-hack\",\n    name: \"Disallow properties with an underscore prefix\",\n    desc: \"Checks for the underscore property hack (targets IE6)\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-underscore-hack\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this;\n        parser.addListener(\"property\", function(event) {\n            var property = event.property;\n\n            if (property.hack === \"_\") {\n                reporter.report(\"Property with underscore prefix found.\", event.property.line, event.property.col, rule);\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"universal-selector\",\n    name: \"Disallow universal selector\",\n    desc: \"The universal selector (*) is known to be slow.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-universal-selector\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event) {\n            var selectors = event.selectors,\n                selector,\n                part,\n                i;\n\n            for (i=0; i < selectors.length; i++) {\n                selector = selectors[i];\n\n                part = selector.parts[selector.parts.length-1];\n                if (part.elementName === \"*\") {\n                    reporter.report(rule.desc, part.line, part.col, rule);\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"unqualified-attributes\",\n    name: \"Disallow unqualified attribute selectors\",\n    desc: \"Unqualified attribute selectors are known to be slow.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-unqualified-attribute-selectors\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event) {\n\n            var selectors = event.selectors,\n                selectorContainsClassOrId = false,\n                selector,\n                part,\n                modifier,\n                i, k;\n\n            for (i=0; i < selectors.length; i++) {\n                selector = selectors[i];\n\n                part = selector.parts[selector.parts.length-1];\n                if (part.type === parser.SELECTOR_PART_TYPE) {\n                    for (k=0; k < part.modifiers.length; k++) {\n                        modifier = part.modifiers[k];\n\n                        if (modifier.type === \"class\" || modifier.type === \"id\") {\n                            selectorContainsClassOrId = true;\n                            break;\n                        }\n                    }\n\n                    if (!selectorContainsClassOrId) {\n                        for (k=0; k < part.modifiers.length; k++) {\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"attribute\" && (!part.elementName || part.elementName === \"*\")) {\n                                reporter.report(rule.desc, part.line, part.col, rule);\n                            }\n                        }\n                    }\n                }\n\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"vendor-prefix\",\n    name: \"Require standard property with vendor prefix\",\n    desc: \"When using a vendor-prefixed property, make sure to include the standard one.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Require-standard-property-with-vendor-prefix\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this,\n            properties,\n            num,\n            propertiesToCheck = {\n                \"-webkit-border-radius\": \"border-radius\",\n                \"-webkit-border-top-left-radius\": \"border-top-left-radius\",\n                \"-webkit-border-top-right-radius\": \"border-top-right-radius\",\n                \"-webkit-border-bottom-left-radius\": \"border-bottom-left-radius\",\n                \"-webkit-border-bottom-right-radius\": \"border-bottom-right-radius\",\n\n                \"-o-border-radius\": \"border-radius\",\n                \"-o-border-top-left-radius\": \"border-top-left-radius\",\n                \"-o-border-top-right-radius\": \"border-top-right-radius\",\n                \"-o-border-bottom-left-radius\": \"border-bottom-left-radius\",\n                \"-o-border-bottom-right-radius\": \"border-bottom-right-radius\",\n\n                \"-moz-border-radius\": \"border-radius\",\n                \"-moz-border-radius-topleft\": \"border-top-left-radius\",\n                \"-moz-border-radius-topright\": \"border-top-right-radius\",\n                \"-moz-border-radius-bottomleft\": \"border-bottom-left-radius\",\n                \"-moz-border-radius-bottomright\": \"border-bottom-right-radius\",\n\n                \"-moz-column-count\": \"column-count\",\n                \"-webkit-column-count\": \"column-count\",\n\n                \"-moz-column-gap\": \"column-gap\",\n                \"-webkit-column-gap\": \"column-gap\",\n\n                \"-moz-column-rule\": \"column-rule\",\n                \"-webkit-column-rule\": \"column-rule\",\n\n                \"-moz-column-rule-style\": \"column-rule-style\",\n                \"-webkit-column-rule-style\": \"column-rule-style\",\n\n                \"-moz-column-rule-color\": \"column-rule-color\",\n                \"-webkit-column-rule-color\": \"column-rule-color\",\n\n                \"-moz-column-rule-width\": \"column-rule-width\",\n                \"-webkit-column-rule-width\": \"column-rule-width\",\n\n                \"-moz-column-width\": \"column-width\",\n                \"-webkit-column-width\": \"column-width\",\n\n                \"-webkit-column-span\": \"column-span\",\n                \"-webkit-columns\": \"columns\",\n\n                \"-moz-box-shadow\": \"box-shadow\",\n                \"-webkit-box-shadow\": \"box-shadow\",\n\n                \"-moz-transform\": \"transform\",\n                \"-webkit-transform\": \"transform\",\n                \"-o-transform\": \"transform\",\n                \"-ms-transform\": \"transform\",\n\n                \"-moz-transform-origin\": \"transform-origin\",\n                \"-webkit-transform-origin\": \"transform-origin\",\n                \"-o-transform-origin\": \"transform-origin\",\n                \"-ms-transform-origin\": \"transform-origin\",\n\n                \"-moz-box-sizing\": \"box-sizing\",\n                \"-webkit-box-sizing\": \"box-sizing\"\n            };\n        function startRule() {\n            properties = {};\n            num = 1;\n        }\n        function endRule() {\n            var prop,\n                i,\n                len,\n                needed,\n                actual,\n                needsStandard = [];\n\n            for (prop in properties) {\n                if (propertiesToCheck[prop]) {\n                    needsStandard.push({\n                        actual: prop,\n                        needed: propertiesToCheck[prop]\n                    });\n                }\n            }\n\n            for (i=0, len=needsStandard.length; i < len; i++) {\n                needed = needsStandard[i].needed;\n                actual = needsStandard[i].actual;\n\n                if (!properties[needed]) {\n                    reporter.report(\"Missing standard property '\" + needed + \"' to go along with '\" + actual + \"'.\", properties[actual][0].name.line, properties[actual][0].name.col, rule);\n                } else {\n                    if (properties[needed][0].pos < properties[actual][0].pos) {\n                        reporter.report(\"Standard property '\" + needed + \"' should come after vendor-prefixed property '\" + actual + \"'.\", properties[actual][0].name.line, properties[actual][0].name.col, rule);\n                    }\n                }\n            }\n\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n        parser.addListener(\"startviewport\", startRule);\n\n        parser.addListener(\"property\", function(event) {\n            var name = event.property.text.toLowerCase();\n\n            if (!properties[name]) {\n                properties[name] = [];\n            }\n\n            properties[name].push({\n                name: event.property,\n                value: event.value,\n                pos: num++\n            });\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n        parser.addListener(\"endviewport\", endRule);\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"zero-units\",\n    name: \"Disallow units for 0 values\",\n    desc: \"You don't need to specify units when a value is 0.\",\n    url: \"https://github.com/CSSLint/csslint/wiki/Disallow-units-for-zero-values\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        \"use strict\";\n        var rule = this;\n        parser.addListener(\"property\", function(event) {\n            var parts = event.value.parts,\n                i = 0,\n                len = parts.length;\n\n            while (i < len) {\n                if ((parts[i].units || parts[i].type === \"percentage\") && parts[i].value === 0 && parts[i].type !== \"time\") {\n                    reporter.report(\"Values of 0 shouldn't have units specified.\", parts[i].line, parts[i].col, rule);\n                }\n                i++;\n            }\n\n        });\n\n    }\n\n});\n\n(function() {\n    \"use strict\";\n    var xmlEscape = function(str) {\n        if (!str || str.constructor !== String) {\n            return \"\";\n        }\n\n        return str.replace(/[\"&><]/g, function(match) {\n            switch (match) {\n                case \"\\\"\":\n                    return \"&quot;\";\n                case \"&\":\n                    return \"&amp;\";\n                case \"<\":\n                    return \"&lt;\";\n                case \">\":\n                    return \"&gt;\";\n            }\n        });\n    };\n\n    CSSLint.addFormatter({\n        id: \"checkstyle-xml\",\n        name: \"Checkstyle XML format\",\n        startFormat: function() {\n            return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><checkstyle>\";\n        },\n        endFormat: function() {\n            return \"</checkstyle>\";\n        },\n        readError: function(filename, message) {\n            return \"<file name=\\\"\" + xmlEscape(filename) + \"\\\"><error line=\\\"0\\\" column=\\\"0\\\" severty=\\\"error\\\" message=\\\"\" + xmlEscape(message) + \"\\\"></error></file>\";\n        },\n        formatResults: function(results, filename/*, options*/) {\n            var messages = results.messages,\n                output = [];\n            var generateSource = function(rule) {\n                if (!rule || !(\"name\" in rule)) {\n                    return \"\";\n                }\n                return \"net.csslint.\" + rule.name.replace(/\\s/g, \"\");\n            };\n\n\n            if (messages.length > 0) {\n                output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n                CSSLint.Util.forEach(messages, function (message) {\n                    if (!message.rollup) {\n                        output.push(\"<error line=\\\"\" + message.line + \"\\\" column=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                          \" message=\\\"\" + xmlEscape(message.message) + \"\\\" source=\\\"\" + generateSource(message.rule) +\"\\\"/>\");\n                    }\n                });\n                output.push(\"</file>\");\n            }\n\n            return output.join(\"\");\n        }\n    });\n\n}());\n\nCSSLint.addFormatter({\n    id: \"compact\",\n    name: \"Compact, 'porcelain' format\",\n    startFormat: function() {\n        \"use strict\";\n        return \"\";\n    },\n    endFormat: function() {\n        \"use strict\";\n        return \"\";\n    },\n    formatResults: function(results, filename, options) {\n        \"use strict\";\n        var messages = results.messages,\n            output = \"\";\n        options = options || {};\n        var capitalize = function(str) {\n            return str.charAt(0).toUpperCase() + str.slice(1);\n        };\n\n        if (messages.length === 0) {\n            return options.quiet ? \"\" : filename + \": Lint Free!\";\n        }\n\n        CSSLint.Util.forEach(messages, function(message) {\n            if (message.rollup) {\n                output += filename + \": \" + capitalize(message.type) + \" - \" + message.message + \" (\" + message.rule.id + \")\\n\";\n            } else {\n                output += filename + \": line \" + message.line +\n                    \", col \" + message.col + \", \" + capitalize(message.type) + \" - \" + message.message + \" (\" + message.rule.id + \")\\n\";\n            }\n        });\n\n        return output;\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"csslint-xml\",\n    name: \"CSSLint XML format\",\n    startFormat: function() {\n        \"use strict\";\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><csslint>\";\n    },\n    endFormat: function() {\n        \"use strict\";\n        return \"</csslint>\";\n    },\n    formatResults: function(results, filename/*, options*/) {\n        \"use strict\";\n        var messages = results.messages,\n            output = [];\n        var escapeSpecialCharacters = function(str) {\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n            return str.replace(/\"/g, \"'\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n        };\n\n        if (messages.length > 0) {\n            output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n            CSSLint.Util.forEach(messages, function (message) {\n                if (message.rollup) {\n                    output.push(\"<issue severity=\\\"\" + message.type + \"\\\" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                } else {\n                    output.push(\"<issue line=\\\"\" + message.line + \"\\\" char=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                        \" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                }\n            });\n            output.push(\"</file>\");\n        }\n\n        return output.join(\"\");\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"json\",\n    name: \"JSON\",\n    startFormat: function() {\n        \"use strict\";\n        this.json = [];\n        return \"\";\n    },\n    endFormat: function() {\n        \"use strict\";\n        var ret = \"\";\n        if (this.json.length > 0) {\n            if (this.json.length === 1) {\n                ret = JSON.stringify(this.json[0]);\n            } else {\n                ret = JSON.stringify(this.json);\n            }\n        }\n        return ret;\n    },\n    formatResults: function(results, filename, options) {\n        \"use strict\";\n        if (results.messages.length > 0 || !options.quiet) {\n            this.json.push({\n                filename: filename,\n                messages: results.messages,\n                stats: results.stats\n            });\n        }\n        return \"\";\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"junit-xml\",\n    name: \"JUNIT XML format\",\n    startFormat: function() {\n        \"use strict\";\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><testsuites>\";\n    },\n    endFormat: function() {\n        \"use strict\";\n        return \"</testsuites>\";\n    },\n    formatResults: function(results, filename/*, options*/) {\n        \"use strict\";\n\n        var messages = results.messages,\n            output = [],\n            tests = {\n                \"error\": 0,\n                \"failure\": 0\n            };\n        var generateSource = function(rule) {\n            if (!rule || !(\"name\" in rule)) {\n                return \"\";\n            }\n            return \"net.csslint.\" + rule.name.replace(/\\s/g, \"\");\n        };\n        var escapeSpecialCharacters = function(str) {\n\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n\n            return str.replace(/\"/g, \"'\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\n        };\n\n        if (messages.length > 0) {\n\n            messages.forEach(function (message) {\n                var type = message.type === \"warning\" ? \"error\" : message.type;\n                if (!message.rollup) {\n                    output.push(\"<testcase time=\\\"0\\\" name=\\\"\" + generateSource(message.rule) + \"\\\">\");\n                    output.push(\"<\" + type + \" message=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\"><![CDATA[\" + message.line + \":\" + message.col + \":\" + escapeSpecialCharacters(message.evidence) + \"]]></\" + type + \">\");\n                    output.push(\"</testcase>\");\n\n                    tests[type] += 1;\n\n                }\n\n            });\n\n            output.unshift(\"<testsuite time=\\\"0\\\" tests=\\\"\" + messages.length + \"\\\" skipped=\\\"0\\\" errors=\\\"\" + tests.error + \"\\\" failures=\\\"\" + tests.failure + \"\\\" package=\\\"net.csslint\\\" name=\\\"\" + filename + \"\\\">\");\n            output.push(\"</testsuite>\");\n\n        }\n\n        return output.join(\"\");\n\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"lint-xml\",\n    name: \"Lint XML format\",\n    startFormat: function() {\n        \"use strict\";\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><lint>\";\n    },\n    endFormat: function() {\n        \"use strict\";\n        return \"</lint>\";\n    },\n    formatResults: function(results, filename/*, options*/) {\n        \"use strict\";\n        var messages = results.messages,\n            output = [];\n        var escapeSpecialCharacters = function(str) {\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n            return str.replace(/\"/g, \"'\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n        };\n\n        if (messages.length > 0) {\n\n            output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n            CSSLint.Util.forEach(messages, function (message) {\n                if (message.rollup) {\n                    output.push(\"<issue severity=\\\"\" + message.type + \"\\\" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                } else {\n                    var rule = \"\";\n                    if (message.rule && message.rule.id) {\n                        rule = \"rule=\\\"\" + escapeSpecialCharacters(message.rule.id) + \"\\\" \";\n                    }\n                    output.push(\"<issue \" + rule + \"line=\\\"\" + message.line + \"\\\" char=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                        \" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                }\n            });\n            output.push(\"</file>\");\n        }\n\n        return output.join(\"\");\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"text\",\n    name: \"Plain Text\",\n    startFormat: function() {\n        \"use strict\";\n        return \"\";\n    },\n    endFormat: function() {\n        \"use strict\";\n        return \"\";\n    },\n    formatResults: function(results, filename, options) {\n        \"use strict\";\n        var messages = results.messages,\n            output = \"\";\n        options = options || {};\n\n        if (messages.length === 0) {\n            return options.quiet ? \"\" : \"\\n\\ncsslint: No errors in \" + filename + \".\";\n        }\n\n        output = \"\\n\\ncsslint: There \";\n        if (messages.length === 1) {\n            output += \"is 1 problem\";\n        } else {\n            output += \"are \" + messages.length + \" problems\";\n        }\n        output += \" in \" + filename + \".\";\n\n        var pos = filename.lastIndexOf(\"/\"),\n            shortFilename = filename;\n\n        if (pos === -1) {\n            pos = filename.lastIndexOf(\"\\\\\");\n        }\n        if (pos > -1) {\n            shortFilename = filename.substring(pos+1);\n        }\n\n        CSSLint.Util.forEach(messages, function (message, i) {\n            output = output + \"\\n\\n\" + shortFilename;\n            if (message.rollup) {\n                output += \"\\n\" + (i+1) + \": \" + message.type;\n                output += \"\\n\" + message.message;\n            } else {\n                output += \"\\n\" + (i+1) + \": \" + message.type + \" at line \" + message.line + \", col \" + message.col;\n                output += \"\\n\" + message.message;\n                output += \"\\n\" + message.evidence;\n            }\n        });\n\n        return output;\n    }\n});\n\nreturn CSSLint;\n})();\n\n\nmodule.exports.CSSLint = CSSLint;\n\n});\n\nace.define(\"ace/mode/css_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar CSSLint = require(\"./css/csslint\").CSSLint;\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.ruleset = null;\n    this.setDisabledRules(\"ids|order-alphabetical\");\n    this.setInfoRules(\n      \"adjoining-classes|zero-units|gradients|box-model|\" +\n      \"import|outline-none|vendor-prefix\"\n    );\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n    this.setInfoRules = function(ruleNames) {\n        if (typeof ruleNames == \"string\")\n            ruleNames = ruleNames.split(\"|\");\n        this.infoRules = lang.arrayToMap(ruleNames);\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.setDisabledRules = function(ruleNames) {\n        if (!ruleNames) {\n            this.ruleset = null;\n        } else {\n            if (typeof ruleNames == \"string\")\n                ruleNames = ruleNames.split(\"|\");\n            var all = {};\n\n            CSSLint.getRules().forEach(function(x){\n                all[x.id] = true;\n            });\n            ruleNames.forEach(function(x) {\n                delete all[x];\n            });\n            \n            this.ruleset = all;\n        }\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return this.sender.emit(\"annotate\", []);\n        var infoRules = this.infoRules;\n\n        var result = CSSLint.verify(value, this.ruleset);\n        this.sender.emit(\"annotate\", result.messages.map(function(msg) {\n            return {\n                row: msg.line - 1,\n                column: msg.col - 1,\n                text: msg.message,\n                type: infoRules[msg.rule.id] ? \"info\" : msg.type,\n                rule: msg.rule.name\n            };\n        }));\n    };\n\n}).call(Worker.prototype);\n\n});\n"
  },
  {
    "path": "publishable/assets/js/ace/libs/worker-html.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err && err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err && err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        sender = window.sender = window.initSender();\n        var clazz = this.require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\n\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function () {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    this.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    }\n    else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n    }\n    else {\n        this.insert({ row: 0, column: 0 }, textOrLines);\n    }\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    this.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function (text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    }\n    else {\n        this.$split = function (text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function () {\n        return this.$lines.length;\n    };\n    this.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    this.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    this.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    this.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    this.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    this.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    this.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    this.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    this.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    this.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    this.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                var d, err; \n                if (Array.isArray(data[i+1])) {\n                    d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                \n                if ((d.action == \"insert\" ? d.start : d.end).row >= doc.$lines.length) {\n                    err = new Error(\"Invalid delta\");\n                    err.data = {\n                        path: _self.$path,\n                        linesLength: doc.$lines.length,\n                        start: d.start,\n                        end: d.end\n                    };\n                    throw err;\n                }\n\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/html/saxparser\",[], function(require, exports, module) {\nmodule.exports = (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({\n1:[function(_dereq_,module,exports){\nfunction isScopeMarker(node) {\n\tif (node.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\treturn node.localName === \"applet\"\n\t\t\t|| node.localName === \"caption\"\n\t\t\t|| node.localName === \"marquee\"\n\t\t\t|| node.localName === \"object\"\n\t\t\t|| node.localName === \"table\"\n\t\t\t|| node.localName === \"td\"\n\t\t\t|| node.localName === \"th\";\n\t}\n\tif (node.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\n\t\treturn node.localName === \"mi\"\n\t\t\t|| node.localName === \"mo\"\n\t\t\t|| node.localName === \"mn\"\n\t\t\t|| node.localName === \"ms\"\n\t\t\t|| node.localName === \"mtext\"\n\t\t\t|| node.localName === \"annotation-xml\";\n\t}\n\tif (node.namespaceURI === \"http://www.w3.org/2000/svg\") {\n\t\treturn node.localName === \"foreignObject\"\n\t\t\t|| node.localName === \"desc\"\n\t\t\t|| node.localName === \"title\";\n\t}\n}\n\nfunction isListItemScopeMarker(node) {\n\treturn isScopeMarker(node)\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'ol')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'ul');\n}\n\nfunction isTableScopeMarker(node) {\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'table')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\n}\n\nfunction isTableBodyScopeMarker(node) {\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tbody')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tfoot')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'thead')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\n}\n\nfunction isTableRowScopeMarker(node) {\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tr')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\n}\n\nfunction isButtonScopeMarker(node) {\n\treturn isScopeMarker(node)\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'button');\n}\n\nfunction isSelectScopeMarker(node) {\n\treturn !(node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'optgroup')\n\t\t&& !(node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'option');\n}\nfunction ElementStack() {\n\tthis.elements = [];\n\tthis.rootNode = null;\n\tthis.headElement = null;\n\tthis.bodyElement = null;\n}\nElementStack.prototype._inScope = function(localName, isMarker) {\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tvar node = this.elements[i];\n\t\tif (node.localName === localName)\n\t\t\treturn true;\n\t\tif (isMarker(node))\n\t\t\treturn false;\n\t}\n};\nElementStack.prototype.push = function(item) {\n\tthis.elements.push(item);\n};\nElementStack.prototype.pushHtmlElement = function(item) {\n\tthis.rootNode = item.node;\n\tthis.push(item);\n};\nElementStack.prototype.pushHeadElement = function(item) {\n\tthis.headElement = item.node;\n\tthis.push(item);\n};\nElementStack.prototype.pushBodyElement = function(item) {\n\tthis.bodyElement = item.node;\n\tthis.push(item);\n};\nElementStack.prototype.pop = function() {\n\treturn this.elements.pop();\n};\nElementStack.prototype.remove = function(item) {\n\tthis.elements.splice(this.elements.indexOf(item), 1);\n};\nElementStack.prototype.popUntilPopped = function(localName) {\n\tvar element;\n\tdo {\n\t\telement = this.pop();\n\t} while (element.localName != localName);\n};\n\nElementStack.prototype.popUntilTableScopeMarker = function() {\n\twhile (!isTableScopeMarker(this.top))\n\t\tthis.pop();\n};\n\nElementStack.prototype.popUntilTableBodyScopeMarker = function() {\n\twhile (!isTableBodyScopeMarker(this.top))\n\t\tthis.pop();\n};\n\nElementStack.prototype.popUntilTableRowScopeMarker = function() {\n\twhile (!isTableRowScopeMarker(this.top))\n\t\tthis.pop();\n};\nElementStack.prototype.item = function(index) {\n\treturn this.elements[index];\n};\nElementStack.prototype.contains = function(element) {\n\treturn this.elements.indexOf(element) !== -1;\n};\nElementStack.prototype.inScope = function(localName) {\n\treturn this._inScope(localName, isScopeMarker);\n};\nElementStack.prototype.inListItemScope = function(localName) {\n\treturn this._inScope(localName, isListItemScopeMarker);\n};\nElementStack.prototype.inTableScope = function(localName) {\n\treturn this._inScope(localName, isTableScopeMarker);\n};\nElementStack.prototype.inButtonScope = function(localName) {\n\treturn this._inScope(localName, isButtonScopeMarker);\n};\nElementStack.prototype.inSelectScope = function(localName) {\n\treturn this._inScope(localName, isSelectScopeMarker);\n};\nElementStack.prototype.hasNumberedHeaderElementInScope = function() {\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tvar node = this.elements[i];\n\t\tif (node.isNumberedHeader())\n\t\t\treturn true;\n\t\tif (isScopeMarker(node))\n\t\t\treturn false;\n\t}\n};\nElementStack.prototype.furthestBlockForFormattingElement = function(element) {\n\tvar furthestBlock = null;\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tvar node = this.elements[i];\n\t\tif (node.node === element)\n\t\t\tbreak;\n\t\tif (node.isSpecial())\n\t\t\tfurthestBlock = node;\n\t}\n    return furthestBlock;\n};\nElementStack.prototype.findIndex = function(localName) {\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tif (this.elements[i].localName == localName)\n\t\t\treturn i;\n\t}\n    return -1;\n};\n\nElementStack.prototype.remove_openElements_until = function(callback) {\n\tvar finished = false;\n\tvar element;\n\twhile (!finished) {\n\t\telement = this.elements.pop();\n\t\tfinished = callback(element);\n\t}\n\treturn element;\n};\n\nObject.defineProperty(ElementStack.prototype, 'top', {\n\tget: function() {\n\t\treturn this.elements[this.elements.length - 1];\n\t}\n});\n\nObject.defineProperty(ElementStack.prototype, 'length', {\n\tget: function() {\n\t\treturn this.elements.length;\n\t}\n});\n\nexports.ElementStack = ElementStack;\n\n},\n{}],\n2:[function(_dereq_,module,exports){\nvar entities  = _dereq_('html5-entities');\nvar InputStream = _dereq_('./InputStream').InputStream;\n\nvar namedEntityPrefixes = {};\nObject.keys(entities).forEach(function (entityKey) {\n\tfor (var i = 0; i < entityKey.length; i++) {\n\t\tnamedEntityPrefixes[entityKey.substring(0, i + 1)] = true;\n\t}\n});\n\nfunction isAlphaNumeric(c) {\n\treturn (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n}\n\nfunction isHexDigit(c) {\n\treturn (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');\n}\n\nfunction isDecimalDigit(c) {\n\treturn (c >= '0' && c <= '9');\n}\n\nvar EntityParser = {};\n\nEntityParser.consumeEntity = function(buffer, tokenizer, additionalAllowedCharacter) {\n\tvar decodedCharacter = '';\n\tvar consumedCharacters = '';\n\tvar ch = buffer.char();\n\tif (ch === InputStream.EOF)\n\t\treturn false;\n\tconsumedCharacters += ch;\n\tif (ch == '\\t' || ch == '\\n' || ch == '\\v' || ch == ' ' || ch == '<' || ch == '&') {\n\t\tbuffer.unget(consumedCharacters);\n\t\treturn false;\n\t}\n\tif (additionalAllowedCharacter === ch) {\n\t\tbuffer.unget(consumedCharacters);\n\t\treturn false;\n\t}\n\tif (ch == '#') {\n\t\tch = buffer.shift(1);\n\t\tif (ch === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-numeric-entity-but-got-eof\");\n\t\t\tbuffer.unget(consumedCharacters);\n\t\t\treturn false;\n\t\t}\n\t\tconsumedCharacters += ch;\n\t\tvar radix = 10;\n\t\tvar isDigit = isDecimalDigit;\n\t\tif (ch == 'x' || ch == 'X') {\n\t\t\tradix = 16;\n\t\t\tisDigit = isHexDigit;\n\t\t\tch = buffer.shift(1);\n\t\t\tif (ch === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"expected-numeric-entity-but-got-eof\");\n\t\t\t\tbuffer.unget(consumedCharacters);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconsumedCharacters += ch;\n\t\t}\n\t\tif (isDigit(ch)) {\n\t\t\tvar code = '';\n\t\t\twhile (ch !== InputStream.EOF && isDigit(ch)) {\n\t\t\t\tcode += ch;\n\t\t\t\tch = buffer.char();\n\t\t\t}\n\t\t\tcode = parseInt(code, radix);\n\t\t\tvar replacement = this.replaceEntityNumbers(code);\n\t\t\tif (replacement) {\n\t\t\t\ttokenizer._parseError(\"invalid-numeric-entity-replaced\");\n\t\t\t\tcode = replacement;\n\t\t\t}\n\t\t\tif (code > 0xFFFF && code <= 0x10FFFF) {\n\t\t        code -= 0x10000;\n\t\t        var first = ((0xffc00 & code) >> 10) + 0xD800;\n\t\t        var second = (0x3ff & code) + 0xDC00;\n\t\t\t\tdecodedCharacter = String.fromCharCode(first, second);\n\t\t\t} else\n\t\t\t\tdecodedCharacter = String.fromCharCode(code);\n\t\t\tif (ch !== ';') {\n\t\t\t\ttokenizer._parseError(\"numeric-entity-without-semicolon\");\n\t\t\t\tbuffer.unget(ch);\n\t\t\t}\n\t\t\treturn decodedCharacter;\n\t\t}\n\t\tbuffer.unget(consumedCharacters);\n\t\ttokenizer._parseError(\"expected-numeric-entity\");\n\t\treturn false;\n\t}\n\tif ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {\n\t\tvar mostRecentMatch = '';\n\t\twhile (namedEntityPrefixes[consumedCharacters]) {\n\t\t\tif (entities[consumedCharacters]) {\n\t\t\t\tmostRecentMatch = consumedCharacters;\n\t\t\t}\n\t\t\tif (ch == ';')\n\t\t\t\tbreak;\n\t\t\tch = buffer.char();\n\t\t\tif (ch === InputStream.EOF)\n\t\t\t\tbreak;\n\t\t\tconsumedCharacters += ch;\n\t\t}\n\t\tif (!mostRecentMatch) {\n\t\t\ttokenizer._parseError(\"expected-named-entity\");\n\t\t\tbuffer.unget(consumedCharacters);\n\t\t\treturn false;\n\t\t}\n\t\tdecodedCharacter = entities[mostRecentMatch];\n\t\tif (ch === ';' || !additionalAllowedCharacter || !(isAlphaNumeric(ch) || ch === '=')) {\n\t\t\tif (consumedCharacters.length > mostRecentMatch.length) {\n\t\t\t\tbuffer.unget(consumedCharacters.substring(mostRecentMatch.length));\n\t\t\t}\n\t\t\tif (ch !== ';') {\n\t\t\t\ttokenizer._parseError(\"named-entity-without-semicolon\");\n\t\t\t}\n\t\t\treturn decodedCharacter;\n\t\t}\n\t\tbuffer.unget(consumedCharacters);\n\t\treturn false;\n\t}\n};\n\nEntityParser.replaceEntityNumbers = function(c) {\n\tswitch(c) {\n\t\tcase 0x00: return 0xFFFD; // REPLACEMENT CHARACTER\n\t\tcase 0x13: return 0x0010; // Carriage return\n\t\tcase 0x80: return 0x20AC; // EURO SIGN\n\t\tcase 0x81: return 0x0081; // <control>\n\t\tcase 0x82: return 0x201A; // SINGLE LOW-9 QUOTATION MARK\n\t\tcase 0x83: return 0x0192; // LATIN SMALL LETTER F WITH HOOK\n\t\tcase 0x84: return 0x201E; // DOUBLE LOW-9 QUOTATION MARK\n\t\tcase 0x85: return 0x2026; // HORIZONTAL ELLIPSIS\n\t\tcase 0x86: return 0x2020; // DAGGER\n\t\tcase 0x87: return 0x2021; // DOUBLE DAGGER\n\t\tcase 0x88: return 0x02C6; // MODIFIER LETTER CIRCUMFLEX ACCENT\n\t\tcase 0x89: return 0x2030; // PER MILLE SIGN\n\t\tcase 0x8A: return 0x0160; // LATIN CAPITAL LETTER S WITH CARON\n\t\tcase 0x8B: return 0x2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK\n\t\tcase 0x8C: return 0x0152; // LATIN CAPITAL LIGATURE OE\n\t\tcase 0x8D: return 0x008D; // <control>\n\t\tcase 0x8E: return 0x017D; // LATIN CAPITAL LETTER Z WITH CARON\n\t\tcase 0x8F: return 0x008F; // <control>\n\t\tcase 0x90: return 0x0090; // <control>\n\t\tcase 0x91: return 0x2018; // LEFT SINGLE QUOTATION MARK\n\t\tcase 0x92: return 0x2019; // RIGHT SINGLE QUOTATION MARK\n\t\tcase 0x93: return 0x201C; // LEFT DOUBLE QUOTATION MARK\n\t\tcase 0x94: return 0x201D; // RIGHT DOUBLE QUOTATION MARK\n\t\tcase 0x95: return 0x2022; // BULLET\n\t\tcase 0x96: return 0x2013; // EN DASH\n\t\tcase 0x97: return 0x2014; // EM DASH\n\t\tcase 0x98: return 0x02DC; // SMALL TILDE\n\t\tcase 0x99: return 0x2122; // TRADE MARK SIGN\n\t\tcase 0x9A: return 0x0161; // LATIN SMALL LETTER S WITH CARON\n\t\tcase 0x9B: return 0x203A; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\n\t\tcase 0x9C: return 0x0153; // LATIN SMALL LIGATURE OE\n\t\tcase 0x9D: return 0x009D; // <control>\n\t\tcase 0x9E: return 0x017E; // LATIN SMALL LETTER Z WITH CARON\n\t\tcase 0x9F: return 0x0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS\n\t\tdefault:\n\t\t\tif ((c >= 0xD800 && c <= 0xDFFF) || c > 0x10FFFF) {\n\t\t\t\treturn 0xFFFD;\n\t\t\t} else if ((c >= 0x0001 && c <= 0x0008) || (c >= 0x000E && c <= 0x001F) ||\n\t\t\t\t(c >= 0x007F && c <= 0x009F) || (c >= 0xFDD0 && c <= 0xFDEF) ||\n\t\t\t\tc == 0x000B || c == 0xFFFE || c == 0x1FFFE || c == 0x2FFFFE ||\n\t\t\t\tc == 0x2FFFF || c == 0x3FFFE || c == 0x3FFFF || c == 0x4FFFE ||\n\t\t\t\tc == 0x4FFFF || c == 0x5FFFE || c == 0x5FFFF || c == 0x6FFFE ||\n\t\t\t\tc == 0x6FFFF || c == 0x7FFFE || c == 0x7FFFF || c == 0x8FFFE ||\n\t\t\t\tc == 0x8FFFF || c == 0x9FFFE || c == 0x9FFFF || c == 0xAFFFE ||\n\t\t\t\tc == 0xAFFFF || c == 0xBFFFE || c == 0xBFFFF || c == 0xCFFFE ||\n\t\t\t\tc == 0xCFFFF || c == 0xDFFFE || c == 0xDFFFF || c == 0xEFFFE ||\n\t\t\t\tc == 0xEFFFF || c == 0xFFFFE || c == 0xFFFFF || c == 0x10FFFE ||\n\t\t\t\tc == 0x10FFFF) {\n\t\t\t\treturn c;\n\t\t\t}\n\t}\n};\n\nexports.EntityParser = EntityParser;\n\n},\n{\"./InputStream\":3,\"html5-entities\":12}],\n3:[function(_dereq_,module,exports){\nfunction InputStream() {\n\tthis.data = '';\n\tthis.start = 0;\n\tthis.committed = 0;\n\tthis.eof = false;\n\tthis.lastLocation = {line: 0, column: 0};\n}\n\nInputStream.EOF = -1;\n\nInputStream.DRAIN = -2;\n\nInputStream.prototype = {\n\tslice: function() {\n\t\tif(this.start >= this.data.length) {\n\t\t\tif(!this.eof) throw InputStream.DRAIN;\n\t\t\treturn InputStream.EOF;\n\t\t}\n\t\treturn this.data.slice(this.start, this.data.length);\n\t},\n\tchar: function() {\n\t\tif(!this.eof && this.start >= this.data.length - 1) throw InputStream.DRAIN;\n\t\tif(this.start >= this.data.length) {\n\t\t\treturn InputStream.EOF;\n\t\t}\n\t\tvar ch = this.data[this.start++];\n\t\tif (ch === '\\r')\n\t\t\tch = '\\n';\n\t\treturn ch;\n\t},\n\tadvance: function(amount) {\n\t\tthis.start += amount;\n\t\tif(this.start >= this.data.length) {\n\t\t\tif(!this.eof) throw InputStream.DRAIN;\n\t\t\treturn InputStream.EOF;\n\t\t} else {\n\t\t\tif(this.committed > this.data.length / 2) {\n\t\t\t\tthis.lastLocation = this.location();\n\t\t\t\tthis.data = this.data.slice(this.committed);\n\t\t\t\tthis.start = this.start - this.committed;\n\t\t\t\tthis.committed = 0;\n\t\t\t}\n\t\t}\n\t},\n\tmatchWhile: function(re) {\n\t\tif(this.eof && this.start >= this.data.length ) return '';\n\t\tvar r = new RegExp(\"^\"+re+\"+\");\n\t\tvar m = r.exec(this.slice());\n\t\tif(m) {\n\t\t\tif(!this.eof && m[0].length == this.data.length - this.start) throw InputStream.DRAIN;\n\t\t\tthis.advance(m[0].length);\n\t\t\treturn m[0];\n\t\t} else {\n\t\t\treturn '';\n\t\t}\n\t},\n\tmatchUntil: function(re) {\n\t\tvar m, s;\n\t\ts = this.slice();\n\t\tif(s === InputStream.EOF) {\n\t\t\treturn '';\n\t\t} else if(m = new RegExp(re + (this.eof ? \"|$\" : \"\")).exec(s)) {\n\t\t\tvar t = this.data.slice(this.start, this.start + m.index);\n\t\t\tthis.advance(m.index);\n\t\t\treturn t.replace(/\\r/g, '\\n').replace(/\\n{2,}/g, '\\n');\n\t\t} else {\n\t\t\tthrow InputStream.DRAIN;\n\t\t}\n\t},\n\tappend: function(data) {\n\t\tthis.data += data;\n\t},\n\tshift: function(n) {\n\t\tif(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN;\n\t\tif(this.eof && this.start >= this.data.length) return InputStream.EOF;\n\t\tvar d = this.data.slice(this.start, this.start + n).toString();\n\t\tthis.advance(Math.min(n, this.data.length - this.start));\n\t\treturn d;\n\t},\n\tpeek: function(n) {\n\t\tif(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN;\n\t\tif(this.eof && this.start >= this.data.length) return InputStream.EOF;\n\t\treturn this.data.slice(this.start, Math.min(this.start + n, this.data.length)).toString();\n\t},\n\tlength: function() {\n\t\treturn this.data.length - this.start - 1;\n\t},\n\tunget: function(d) {\n\t\tif(d === InputStream.EOF) return;\n\t\tthis.start -= (d.length);\n\t},\n\tundo: function() {\n\t\tthis.start = this.committed;\n\t},\n\tcommit: function() {\n\t\tthis.committed = this.start;\n\t},\n\tlocation: function() {\n\t\tvar lastLine = this.lastLocation.line;\n\t\tvar lastColumn = this.lastLocation.column;\n\t\tvar read = this.data.slice(0, this.committed);\n\t\tvar newlines = read.match(/\\n/g);\n\t\tvar line = newlines ? lastLine + newlines.length : lastLine;\n\t\tvar column = newlines ? read.length - read.lastIndexOf('\\n') - 1 : lastColumn + read.length;\n\t\treturn {line: line, column: column};\n\t}\n};\n\nexports.InputStream = InputStream;\n\n},\n{}],\n4:[function(_dereq_,module,exports){\nvar SpecialElements = {\n\t\"http://www.w3.org/1999/xhtml\": [\n\t\t'address',\n\t\t'applet',\n\t\t'area',\n\t\t'article',\n\t\t'aside',\n\t\t'base',\n\t\t'basefont',\n\t\t'bgsound',\n\t\t'blockquote',\n\t\t'body',\n\t\t'br',\n\t\t'button',\n\t\t'caption',\n\t\t'center',\n\t\t'col',\n\t\t'colgroup',\n\t\t'dd',\n\t\t'details',\n\t\t'dir',\n\t\t'div',\n\t\t'dl',\n\t\t'dt',\n\t\t'embed',\n\t\t'fieldset',\n\t\t'figcaption',\n\t\t'figure',\n\t\t'footer',\n\t\t'form',\n\t\t'frame',\n\t\t'frameset',\n\t\t'h1',\n\t\t'h2',\n\t\t'h3',\n\t\t'h4',\n\t\t'h5',\n\t\t'h6',\n\t\t'head',\n\t\t'header',\n\t\t'hgroup',\n\t\t'hr',\n\t\t'html',\n\t\t'iframe',\n\t\t'img',\n\t\t'input',\n\t\t'isindex',\n\t\t'li',\n\t\t'link',\n\t\t'listing',\n\t\t'main',\n\t\t'marquee',\n\t\t'menu',\n\t\t'menuitem',\n\t\t'meta',\n\t\t'nav',\n\t\t'noembed',\n\t\t'noframes',\n\t\t'noscript',\n\t\t'object',\n\t\t'ol',\n\t\t'p',\n\t\t'param',\n\t\t'plaintext',\n\t\t'pre',\n\t\t'script',\n\t\t'section',\n\t\t'select',\n\t\t'source',\n\t\t'style',\n\t\t'summary',\n\t\t'table',\n\t\t'tbody',\n\t\t'td',\n\t\t'textarea',\n\t\t'tfoot',\n\t\t'th',\n\t\t'thead',\n\t\t'title',\n\t\t'tr',\n\t\t'track',\n\t\t'ul',\n\t\t'wbr',\n\t\t'xmp'\n\t],\n\t\"http://www.w3.org/1998/Math/MathML\": [\n\t\t'mi',\n\t\t'mo',\n\t\t'mn',\n\t\t'ms',\n\t\t'mtext',\n\t\t'annotation-xml'\n\t],\n\t\"http://www.w3.org/2000/svg\": [\n\t\t'foreignObject',\n\t\t'desc',\n\t\t'title'\n\t]\n};\n\n\nfunction StackItem(namespaceURI, localName, attributes, node) {\n\tthis.localName = localName;\n\tthis.namespaceURI = namespaceURI;\n\tthis.attributes = attributes;\n\tthis.node = node;\n}\nStackItem.prototype.isSpecial = function() {\n\treturn this.namespaceURI in SpecialElements &&\n\t\tSpecialElements[this.namespaceURI].indexOf(this.localName) > -1;\n};\n\nStackItem.prototype.isFosterParenting = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\treturn this.localName === 'table' ||\n\t\t\tthis.localName === 'tbody' ||\n\t\t\tthis.localName === 'tfoot' ||\n\t\t\tthis.localName === 'thead' ||\n\t\t\tthis.localName === 'tr';\n\t}\n\treturn false;\n};\n\nStackItem.prototype.isNumberedHeader = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\treturn this.localName === 'h1' ||\n\t\t\tthis.localName === 'h2' ||\n\t\t\tthis.localName === 'h3' ||\n\t\t\tthis.localName === 'h4' ||\n\t\t\tthis.localName === 'h5' ||\n\t\t\tthis.localName === 'h6';\n\t}\n\treturn false;\n};\n\nStackItem.prototype.isForeign = function() {\n\treturn this.namespaceURI != \"http://www.w3.org/1999/xhtml\";\n};\n\nfunction getAttribute(item, name) {\n\tfor (var i = 0; i < item.attributes.length; i++) {\n\t\tif (item.attributes[i].nodeName == name)\n\t\t\treturn item.attributes[i].nodeValue;\n\t}\n\treturn null;\n}\n\nStackItem.prototype.isHtmlIntegrationPoint = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\n\t\tif (this.localName !== \"annotation-xml\")\n\t\t\treturn false;\n\t\tvar encoding = getAttribute(this, 'encoding');\n\t\tif (!encoding)\n\t\t\treturn false;\n\t\tencoding = encoding.toLowerCase();\n\t\treturn encoding === \"text/html\" || encoding === \"application/xhtml+xml\";\n\t}\n\tif (this.namespaceURI === \"http://www.w3.org/2000/svg\") {\n\t\treturn this.localName === \"foreignObject\"\n\t\t\t|| this.localName === \"desc\"\n\t\t\t|| this.localName === \"title\";\n\t}\n\treturn false;\n};\n\nStackItem.prototype.isMathMLTextIntegrationPoint = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\n\t\treturn this.localName === \"mi\"\n\t\t\t|| this.localName === \"mo\"\n\t\t\t|| this.localName === \"mn\"\n\t\t\t|| this.localName === \"ms\"\n\t\t\t|| this.localName === \"mtext\";\n\t}\n\treturn false;\n};\n\nexports.StackItem = StackItem;\n\n},\n{}],\n5:[function(_dereq_,module,exports){\nvar InputStream = _dereq_('./InputStream').InputStream;\nvar EntityParser = _dereq_('./EntityParser').EntityParser;\n\nfunction isWhitespace(c){\n\treturn c === \" \" || c === \"\\n\" || c === \"\\t\" || c === \"\\r\" || c === \"\\f\";\n}\n\nfunction isAlpha(c) {\n\treturn (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');\n}\nfunction Tokenizer(tokenHandler) {\n\tthis._tokenHandler = tokenHandler;\n\tthis._state = Tokenizer.DATA;\n\tthis._inputStream = new InputStream();\n\tthis._currentToken = null;\n\tthis._temporaryBuffer = '';\n\tthis._additionalAllowedCharacter = '';\n}\n\nTokenizer.prototype._parseError = function(code, args) {\n\tthis._tokenHandler.parseError(code, args);\n};\n\nTokenizer.prototype._emitToken = function(token) {\n\tif (token.type === 'StartTag') {\n\t\tfor (var i = 1; i < token.data.length; i++) {\n\t\t\tif (!token.data[i].nodeName)\n\t\t\t\ttoken.data.splice(i--, 1);\n\t\t}\n\t} else if (token.type === 'EndTag') {\n\t\tif (token.selfClosing) {\n\t\t\tthis._parseError('self-closing-flag-on-end-tag');\n\t\t}\n\t\tif (token.data.length !== 0) {\n\t\t\tthis._parseError('attributes-in-end-tag');\n\t\t}\n\t}\n\tthis._tokenHandler.processToken(token);\n\tif (token.type === 'StartTag' && token.selfClosing && !this._tokenHandler.isSelfClosingFlagAcknowledged()) {\n\t\tthis._parseError('non-void-element-with-trailing-solidus', {name: token.name});\n\t}\n};\n\nTokenizer.prototype._emitCurrentToken = function() {\n\tthis._state = Tokenizer.DATA;\n\tthis._emitToken(this._currentToken);\n};\n\nTokenizer.prototype._currentAttribute = function() {\n\treturn this._currentToken.data[this._currentToken.data.length - 1];\n};\n\nTokenizer.prototype.setState = function(state) {\n\tthis._state = state;\n};\n\nTokenizer.prototype.tokenize = function(source) {\n\tTokenizer.DATA = data_state;\n\tTokenizer.RCDATA = rcdata_state;\n\tTokenizer.RAWTEXT = rawtext_state;\n\tTokenizer.SCRIPT_DATA = script_data_state;\n\tTokenizer.PLAINTEXT = plaintext_state;\n\n\n\tthis._state = Tokenizer.DATA;\n\n\tthis._inputStream.append(source);\n\n\tthis._tokenHandler.startTokenization(this);\n\n\tthis._inputStream.eof = true;\n\n\tvar tokenizer = this;\n\n\twhile (this._state.call(this, this._inputStream));\n\n\n\tfunction data_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(character_reference_in_data_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(tag_open_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"&|<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_data_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer);\n\t\ttokenizer.setState(data_state);\n\t\ttokenizer._emitToken({type: 'Characters', data: character || '&'});\n\t\treturn true;\n\t}\n\n\tfunction rcdata_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(character_reference_in_rcdata_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(rcdata_less_than_sign_state);\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"&|<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_rcdata_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer);\n\t\ttokenizer.setState(rcdata_state);\n\t\ttokenizer._emitToken({type: 'Characters', data: character || '&'});\n\t\treturn true;\n\t}\n\n\tfunction rawtext_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(rawtext_less_than_sign_state);\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction plaintext_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\n\tfunction script_data_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(rcdata_end_tag_open_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(rcdata_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(rawtext_end_tag_open_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(rawtext_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_end_tag_open_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<!'});\n\t\t\ttokenizer.setState(script_data_escape_start_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(script_data_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escape_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escape_start_dash_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escape_start_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_dash_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil('<|-|\\u0000');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_dash_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '>'});\n\t\t\ttokenizer.setState(script_data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_less_then_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '/') {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_escaped_end_tag_open_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<' + data});\n\t\t\tthis._temporaryBuffer = data;\n\t\t\ttokenizer.setState(script_data_double_escape_start_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer = data;\n\t\t\ttokenizer.setState(script_data_escaped_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' &&  appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escape_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) || data === '/' || data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tif (this._temporaryBuffer.toLowerCase() === 'script')\n\t\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t\telse\n\t\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_double_escaped_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_double_escaped_dash_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_dash_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\tbuffer.commit();\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '>'});\n\t\t\ttokenizer.setState(script_data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '/') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '/'});\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_double_escape_end_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escape_end_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) || data === '/' || data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tif (this._temporaryBuffer.toLowerCase() === 'script')\n\t\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t\telse\n\t\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"bare-less-than-sign-at-eof\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken = {type: 'StartTag', name: data.toLowerCase(), data: []};\n\t\t\ttokenizer.setState(tag_name_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer.setState(markup_declaration_open_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(close_tag_open_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-tag-name-but-got-right-bracket\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: \"<>\"});\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '?') {\n\t\t\ttokenizer._parseError(\"expected-tag-name-but-got-question-mark\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"expected-tag-name\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: \"<\"});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction close_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-eof\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: data.toLowerCase(), data: []};\n\t\t\ttokenizer.setState(tag_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-right-bracket\");\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-char\", {data: data}); // param 1 is datavars:\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction tag_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-tag-name');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.name += data.toLowerCase();\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.name += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.name += data;\n\t\t}\n\t\tbuffer.commit();\n\n\t\treturn true;\n\t}\n\n\tfunction before_attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-attribute-name-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data.toLowerCase(), nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"' || data === '=' || data === '<') {\n\t\t\ttokenizer._parseError(\"invalid-character-in-attribute-name\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: \"\\uFFFD\", nodeValue: \"\"});\n\t\t} else {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tvar leavingThisState = true;\n\t\tvar shouldEmit = false;\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-name\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\tshouldEmit = true;\n\t\t} else if (data === '=') {\n\t\t\ttokenizer.setState(before_attribute_value_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentAttribute().nodeName += data.toLowerCase();\n\t\t\tleavingThisState = false;\n\t\t} else if (data === '>') {\n\t\t\tshouldEmit = true;\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(after_attribute_name_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"invalid-character-in-attribute-name\");\n\t\t\ttokenizer._currentAttribute().nodeName += data;\n\t\t\tleavingThisState = false;\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeName += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeName += data;\n\t\t\tleavingThisState = false;\n\t\t}\n\n\t\tif (leavingThisState) {\n\t\t\tvar attributes = tokenizer._currentToken.data;\n\t\t\tvar currentAttribute = attributes[attributes.length - 1];\n\t\t\tfor (var i = attributes.length - 2; i >= 0; i--) {\n\t\t\t\tif (currentAttribute.nodeName === attributes[i].nodeName) {\n\t\t\t\t\ttokenizer._parseError(\"duplicate-attribute\", {name: currentAttribute.nodeName});\n\t\t\t\t\tcurrentAttribute.nodeName = null;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldEmit)\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-end-of-tag-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (data === '=') {\n\t\t\ttokenizer.setState(before_attribute_value_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"' || data === '<') {\n\t\t\ttokenizer._parseError(\"invalid-character-after-attribute-name\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: \"\\uFFFD\", nodeValue: \"\"});\n\t\t} else {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_attribute_value_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-attribute-value-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(attribute_value_double_quoted_state);\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t\tbuffer.unget(data);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(attribute_value_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-attribute-value-but-got-right-bracket\");\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '=' || data === '<' || data === '`') {\n\t\t\ttokenizer._parseError(\"unexpected-character-in-unquoted-attribute-value\");\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-value-double-quote\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_attribute_value_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = '\"';\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\tvar s = buffer.matchUntil('[\\0\"&]');\n\t\t\tdata = data + s;\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-value-single-quote\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_attribute_value_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = \"'\";\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeValue += data + buffer.matchUntil(\"\\u0000|['&]\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_unquoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = \">\";\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"' || data === \"'\" || data === '=' || data === '`' || data === '<') {\n\t\t\ttokenizer._parseError(\"unexpected-character-in-unquoted-attribute-value\");\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\tbuffer.commit();\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\tvar o = buffer.matchUntil(\"\\u0000|[\"+ \"\\t\\n\\v\\f\\x20\\r\" + \"&<>\\\"'=`\" +\"]\");\n\t\t\tif (o === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"eof-in-attribute-value-no-quotes\");\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t\t}\n\t\t\tbuffer.commit();\n\t\t\ttokenizer._currentAttribute().nodeValue += data + o;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_attribute_value_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer, this._additionalAllowedCharacter);\n\t\tthis._currentAttribute().nodeValue += character || '&';\n\t\tif (this._additionalAllowedCharacter === '\"')\n\t\t\ttokenizer.setState(attribute_value_double_quoted_state);\n\t\telse if (this._additionalAllowedCharacter === '\\'')\n\t\t\ttokenizer.setState(attribute_value_single_quoted_state);\n\t\telse if (this._additionalAllowedCharacter === '>')\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\treturn true;\n\t}\n\n\tfunction after_attribute_value_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-character-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction self_closing_tag_state(buffer) {\n\t\tvar c = buffer.char();\n\t\tif (c === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"unexpected-eof-after-solidus-in-tag\");\n\t\t\tbuffer.unget(c);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (c === '>') {\n\t\t\ttokenizer._currentToken.selfClosing = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-character-after-solidus-in-tag\");\n\t\t\tbuffer.unget(c);\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction bogus_comment_state(buffer) {\n\t\tvar data = buffer.matchUntil('>');\n\t\tdata = data.replace(/\\u0000/g, \"\\uFFFD\");\n\t\tbuffer.char();\n\t\ttokenizer._emitToken({type: 'Comment', data: data});\n\t\ttokenizer.setState(data_state);\n\t\treturn true;\n\t}\n\n\tfunction markup_declaration_open_state(buffer) {\n\t\tvar chars = buffer.shift(2);\n\t\tif (chars === '--') {\n\t\t\ttokenizer._currentToken = {type: 'Comment', data: ''};\n\t\t\ttokenizer.setState(comment_start_state);\n\t\t} else {\n\t\t\tvar newchars = buffer.shift(5);\n\t\t\tif (newchars === InputStream.EOF || chars === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"expected-dashes-or-doctype\");\n\t\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t\t\tbuffer.unget(chars);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tchars += newchars;\n\t\t\tif (chars.toUpperCase() === 'DOCTYPE') {\n\t\t\t\ttokenizer._currentToken = {type: 'Doctype', name: '', publicId: null, systemId: null, forceQuirks: false};\n\t\t\t\ttokenizer.setState(doctype_state);\n\t\t\t} else if (tokenizer._tokenHandler.isCdataSectionAllowed() && chars === '[CDATA[') {\n\t\t\t\ttokenizer.setState(cdata_section_state);\n\t\t\t} else {\n\t\t\t\ttokenizer._parseError(\"expected-dashes-or-doctype\");\n\t\t\t\tbuffer.unget(chars);\n\t\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction cdata_section_state(buffer) {\n\t\tvar data = buffer.matchUntil(']]>');\n\t\tbuffer.shift(3);\n\t\tif (data) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t}\n\t\ttokenizer.setState(data_state);\n\t\treturn true;\n\t}\n\n\tfunction comment_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_start_dash_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"incorrect-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_start_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"incorrect-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '-' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_dash_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += data;\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-end-dash\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"-\\uFFFD\";\n\t\t\ttokenizer.setState(comment_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '-' + data + buffer.matchUntil('\\u0000|-');\n\t\t\tbuffer.char();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-double-dash\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer._parseError(\"unexpected-bang-after-double-dash-in-comment\");\n\t\t\ttokenizer.setState(comment_end_bang_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._parseError(\"unexpected-dash-after-double-dash-in-comment\");\n\t\t\ttokenizer._currentToken.data += data;\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"--\\uFFFD\";\n\t\t\ttokenizer.setState(comment_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-comment\");\n\t\t\ttokenizer._currentToken.data += '--' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_bang_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-end-bang-state\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._currentToken.data += '--!';\n\t\t\ttokenizer.setState(comment_end_dash_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '--!' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-eof\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_name_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"need-space-after-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-eof\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-right-bracket\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (isAlpha(data))\n\t\t\t\tdata = data.toLowerCase();\n\t\t\ttokenizer._currentToken.name = data;\n\t\t\ttokenizer.setState(doctype_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._parseError(\"eof-in-doctype-name\");\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(after_doctype_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (isAlpha(data))\n\t\t\t\tdata = data.toLowerCase();\n\t\t\ttokenizer._currentToken.name += data;\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (['p', 'P'].indexOf(data) > -1) {\n\t\t\t\tvar expected = [['u', 'U'], ['b', 'B'], ['l', 'L'], ['i', 'I'], ['c', 'C']];\n\t\t\t\tvar matched = expected.every(function(expected){\n\t\t\t\t\tdata = buffer.char();\n\t\t\t\t\treturn expected.indexOf(data) > -1;\n\t\t\t\t});\n\t\t\t\tif (matched) {\n\t\t\t\t\ttokenizer.setState(after_doctype_public_keyword_state);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else if (['s', 'S'].indexOf(data) > -1) {\n\t\t\t\tvar expected = [['y', 'Y'], ['s', 'S'], ['t', 'T'], ['e', 'E'], ['m', 'M']];\n\t\t\t\tvar matched = expected.every(function(expected){\n\t\t\t\t\tdata = buffer.char();\n\t\t\t\t\treturn expected.indexOf(data) > -1;\n\t\t\t\t});\n\t\t\t\tif (matched) {\n\t\t\t\t\ttokenizer.setState(after_doctype_system_keyword_state);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\n\t\t\tif (data === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\t\tbuffer.unget(data);\n\t\t\t\ttokenizer.setState(data_state);\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t\t} else {\n\t\t\t\ttokenizer._parseError(\"expected-space-or-right-bracket-in-doctype\", {data: data});\n\t\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_public_keyword_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_public_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.publicId = '';\n\t\t\ttokenizer.setState(doctype_public_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.publicId = '';\n\t\t\ttokenizer.setState(doctype_public_identifier_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_public_identifier_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_doctype_public_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._currentToken.publicId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_public_identifier_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_doctype_public_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._currentToken.publicId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_public_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(between_doctype_public_and_system_identifiers_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction between_doctype_public_and_system_identifiers_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_system_keyword_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_system_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_system_identifier_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_doctype_system_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.systemId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_system_identifier_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_doctype_system_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.systemId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_system_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction bogus_doctype_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t}\n\t\treturn true;\n\t}\n};\n\nObject.defineProperty(Tokenizer.prototype, 'lineNumber', {\n\tget: function() {\n\t\treturn this._inputStream.location().line;\n\t}\n});\n\nObject.defineProperty(Tokenizer.prototype, 'columnNumber', {\n\tget: function() {\n\t\treturn this._inputStream.location().column;\n\t}\n});\n\nexports.Tokenizer = Tokenizer;\n\n},\n{\"./EntityParser\":2,\"./InputStream\":3}],\n6:[function(_dereq_,module,exports){\nvar assert = _dereq_('assert');\n\nvar messages = _dereq_('./messages.json');\nvar constants = _dereq_('./constants');\n\nvar EventEmitter = _dereq_('events').EventEmitter;\n\nvar Tokenizer = _dereq_('./Tokenizer').Tokenizer;\nvar ElementStack = _dereq_('./ElementStack').ElementStack;\nvar StackItem = _dereq_('./StackItem').StackItem;\n\nvar Marker = {};\n\nfunction isWhitespace(ch) {\n\treturn ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\" || ch === \"\\f\";\n}\n\nfunction isWhitespaceOrReplacementCharacter(ch) {\n\treturn isWhitespace(ch) || ch === '\\uFFFD';\n}\n\nfunction isAllWhitespace(characters) {\n\tfor (var i = 0; i < characters.length; i++) {\n\t\tvar ch = characters[i];\n\t\tif (!isWhitespace(ch))\n\t\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction isAllWhitespaceOrReplacementCharacters(characters) {\n\tfor (var i = 0; i < characters.length; i++) {\n\t\tvar ch = characters[i];\n\t\tif (!isWhitespaceOrReplacementCharacter(ch))\n\t\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction getAttribute(node, name) {\n\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\tvar attribute = node.attributes[i];\n\t\tif (attribute.nodeName === name) {\n\t\t\treturn attribute;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction CharacterBuffer(characters) {\n\tthis.characters = characters;\n\tthis.current = 0;\n\tthis.end = this.characters.length;\n}\n\nCharacterBuffer.prototype.skipAtMostOneLeadingNewline = function() {\n\tif (this.characters[this.current] === '\\n')\n\t\tthis.current++;\n};\n\nCharacterBuffer.prototype.skipLeadingWhitespace = function() {\n\twhile (isWhitespace(this.characters[this.current])) {\n\t\tif (++this.current == this.end)\n\t\t\treturn;\n\t}\n};\n\nCharacterBuffer.prototype.skipLeadingNonWhitespace = function() {\n\twhile (!isWhitespace(this.characters[this.current])) {\n\t\tif (++this.current == this.end)\n\t\t\treturn;\n\t}\n};\n\nCharacterBuffer.prototype.takeRemaining = function() {\n\treturn this.characters.substring(this.current);\n};\n\nCharacterBuffer.prototype.takeLeadingWhitespace = function() {\n\tvar start = this.current;\n\tthis.skipLeadingWhitespace();\n\tif (start === this.current)\n\t\treturn \"\";\n\treturn this.characters.substring(start, this.current - start);\n};\n\nObject.defineProperty(CharacterBuffer.prototype, 'length', {\n\tget: function(){\n\t\treturn this.end - this.current;\n\t}\n});\nfunction TreeBuilder() {\n\tthis.tokenizer = null;\n\tthis.errorHandler = null;\n\tthis.scriptingEnabled = false;\n\tthis.document = null;\n\tthis.head = null;\n\tthis.form = null;\n\tthis.openElements = new ElementStack();\n\tthis.activeFormattingElements = [];\n\tthis.insertionMode = null;\n\tthis.insertionModeName = \"\";\n\tthis.originalInsertionMode = \"\";\n\tthis.inQuirksMode = false; // TODO quirks mode\n\tthis.compatMode = \"no quirks\";\n\tthis.framesetOk = true;\n\tthis.redirectAttachToFosterParent = false;\n\tthis.selfClosingFlagAcknowledged = false;\n\tthis.context = \"\";\n\tthis.pendingTableCharacters = [];\n\tthis.shouldSkipLeadingNewline = false;\n\n\tvar tree = this;\n\tvar modes = this.insertionModes = {};\n\tmodes.base = {\n\t\tend_tag_handlers: {\"-default\": 'endTagOther'},\n\t\tstart_tag_handlers: {\"-default\": 'startTagOther'},\n\t\tprocessEOF: function() {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.openElements.length > 2) {\n\t\t\t\ttree.parseError('expected-closing-tag-but-got-eof');\n\t\t\t} else if (tree.openElements.length == 2 &&\n\t\t\t\ttree.openElements.item(1).localName != 'body') {\n\t\t\t\ttree.parseError('expected-closing-tag-but-got-eof');\n\t\t\t} else if (tree.context && tree.openElements.length > 1) {\n\t\t\t}\n\t\t},\n\t\tprocessComment: function(data) {\n\t\t\ttree.insertComment(data, tree.currentStackItem().node);\n\t\t},\n\t\tprocessDoctype: function(name, publicId, systemId, forceQuirks) {\n\t\t\ttree.parseError('unexpected-doctype');\n\t\t},\n\t\tprocessStartTag: function(name, attributes, selfClosing) {\n\t\t\tif (this[this.start_tag_handlers[name]]) {\n\t\t\t\tthis[this.start_tag_handlers[name]](name, attributes, selfClosing);\n\t\t\t} else if (this[this.start_tag_handlers[\"-default\"]]) {\n\t\t\t\tthis[this.start_tag_handlers[\"-default\"]](name, attributes, selfClosing);\n\t\t\t} else {\n\t\t\t\tthrow(new Error(\"No handler found for \"+name));\n\t\t\t}\n\t\t},\n\t\tprocessEndTag: function(name) {\n\t\t\tif (this[this.end_tag_handlers[name]]) {\n\t\t\t\tthis[this.end_tag_handlers[name]](name);\n\t\t\t} else if (this[this.end_tag_handlers[\"-default\"]]) {\n\t\t\t\tthis[this.end_tag_handlers[\"-default\"]](name);\n\t\t\t} else {\n\t\t\t\tthrow(new Error(\"No handler found for \"+name));\n\t\t\t}\n\t\t},\n\t\tstartTagHtml: function(name, attributes) {\n\t\t\tmodes.inBody.startTagHtml(name, attributes);\n\t\t}\n\t};\n\n\tmodes.initial = Object.create(modes.base);\n\n\tmodes.initial.processEOF = function() {\n\t\ttree.parseError(\"expected-doctype-but-got-eof\");\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.initial.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.initial.processDoctype = function(name, publicId, systemId, forceQuirks) {\n\t\ttree.insertDoctype(name || '', publicId || '', systemId || '');\n\n\t\tif (forceQuirks || name != 'html' || (publicId != null && ([\n\t\t\t\t\t\"+//silmaril//dtd html pro v0r11 19970101//\",\n\t\t\t\t\t\"-//advasoft ltd//dtd html 3.0 aswedit + extensions//\",\n\t\t\t\t\t\"-//as//dtd html 3.0 aswedit + extensions//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.1e//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.0//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.0//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.2 final//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.2//\",\n\t\t\t\t\t\"-//ietf//dtd html 3//\",\n\t\t\t\t\t\"-//ietf//dtd html level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\n\t\t\t\t\t\"-//ietf//dtd html//\",\n\t\t\t\t\t\"-//ietf//dtd html//\",\n\t\t\t\t\t\"-//ietf//dtd html//\",\n\t\t\t\t\t\"-//metrius//dtd metrius presentational//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 html strict//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 html//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 tables//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 html strict//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 html//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 tables//\",\n\t\t\t\t\t\"-//netscape comm. corp.//dtd html//\",\n\t\t\t\t\t\"-//netscape comm. corp.//dtd strict html//\",\n\t\t\t\t\t\"-//o'reilly and associates//dtd html 2.0//\",\n\t\t\t\t\t\"-//o'reilly and associates//dtd html extended 1.0//\",\n\t\t\t\t\t\"-//spyglass//dtd html 2.0 extended//\",\n\t\t\t\t\t\"-//sq//dtd html 2.0 hotmetal + extensions//\",\n\t\t\t\t\t\"-//sun microsystems corp.//dtd hotjava html//\",\n\t\t\t\t\t\"-//sun microsystems corp.//dtd hotjava strict html//\",\n\t\t\t\t\t\"-//w3c//dtd html 3 1995-03-24//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2 draft//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2 final//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2s draft//\",\n\t\t\t\t\t\"-//w3c//dtd html 4.0 frameset//\",\n\t\t\t\t\t\"-//w3c//dtd html 4.0 transitional//\",\n\t\t\t\t\t\"-//w3c//dtd html experimental 19960712//\",\n\t\t\t\t\t\"-//w3c//dtd html experimental 970421//\",\n\t\t\t\t\t\"-//w3c//dtd w3 html//\",\n\t\t\t\t\t\"-//w3o//dtd w3 html 3.0//\",\n\t\t\t\t\t\"-//webtechs//dtd mozilla html 2.0//\",\n\t\t\t\t\t\"-//webtechs//dtd mozilla html//\",\n\t\t\t\t\t\"html\"\n\t\t\t\t].some(publicIdStartsWith)\n\t\t\t\t|| [\n\t\t\t\t\t\"-//w3o//dtd w3 html strict 3.0//en//\",\n\t\t\t\t\t\"-/w3c/dtd html 4.0 transitional/en\",\n\t\t\t\t\t\"html\"\n\t\t\t\t].indexOf(publicId.toLowerCase()) > -1\n\t\t\t\t|| (systemId == null && [\n\t\t\t\t\t\"-//w3c//dtd html 4.01 transitional//\",\n\t\t\t\t\t\"-//w3c//dtd html 4.01 frameset//\"\n\t\t\t\t].some(publicIdStartsWith)))\n\t\t\t)\n\t\t\t|| (systemId != null && (systemId.toLowerCase() == \"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\"))\n\t\t) {\n\t\t\ttree.compatMode = \"quirks\";\n\t\t\ttree.parseError(\"quirky-doctype\");\n\t\t} else if (publicId != null && ([\n\t\t\t\t\"-//w3c//dtd xhtml 1.0 transitional//\",\n\t\t\t\t\"-//w3c//dtd xhtml 1.0 frameset//\"\n\t\t\t].some(publicIdStartsWith)\n\t\t\t|| (systemId != null && [\n\t\t\t\t\"-//w3c//dtd html 4.01 transitional//\",\n\t\t\t\t\"-//w3c//dtd html 4.01 frameset//\"\n\t\t\t].indexOf(publicId.toLowerCase()) > -1))\n\t\t) {\n\t\t\ttree.compatMode = \"limited quirks\";\n\t\t\ttree.parseError(\"almost-standards-doctype\");\n\t\t} else {\n\t\t\tif ((publicId == \"-//W3C//DTD HTML 4.0//EN\" && (systemId == null || systemId == \"http://www.w3.org/TR/REC-html40/strict.dtd\"))\n\t\t\t\t|| (publicId == \"-//W3C//DTD HTML 4.01//EN\" && (systemId == null || systemId == \"http://www.w3.org/TR/html4/strict.dtd\"))\n\t\t\t\t|| (publicId == \"-//W3C//DTD XHTML 1.0 Strict//EN\" && (systemId == \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"))\n\t\t\t\t|| (publicId == \"-//W3C//DTD XHTML 1.1//EN\" && (systemId == \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"))\n\t\t\t) {\n\t\t\t} else if (!((systemId == null || systemId == \"about:legacy-compat\") && publicId == null)) {\n\t\t\t\ttree.parseError(\"unknown-doctype\");\n\t\t\t}\n\t\t}\n\t\ttree.setInsertionMode('beforeHTML');\n\t\tfunction publicIdStartsWith(string) {\n\t\t\treturn publicId.toLowerCase().indexOf(string) === 0;\n\t\t}\n\t};\n\n\tmodes.initial.processCharacters = function(buffer) {\n\t\tbuffer.skipLeadingWhitespace();\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\ttree.parseError('expected-doctype-but-got-chars');\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.initial.processStartTag = function(name, attributes, selfClosing) {\n\t\ttree.parseError('expected-doctype-but-got-start-tag', {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.initial.processEndTag = function(name) {\n\t\ttree.parseError('expected-doctype-but-got-end-tag', {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.initial.anythingElse = function() {\n\t\ttree.compatMode = 'quirks';\n\t\ttree.setInsertionMode('beforeHTML');\n\t};\n\n\tmodes.beforeHTML = Object.create(modes.base);\n\n\tmodes.beforeHTML.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.beforeHTML.processEOF = function() {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.beforeHTML.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.beforeHTML.processCharacters = function(buffer) {\n\t\tbuffer.skipLeadingWhitespace();\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.beforeHTML.startTagHtml = function(name, attributes, selfClosing) {\n\t\ttree.insertHtmlElement(attributes);\n\t\ttree.setInsertionMode('beforeHead');\n\t};\n\n\tmodes.beforeHTML.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.beforeHTML.processEndTag = function(name) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.beforeHTML.anythingElse = function() {\n\t\ttree.insertHtmlElement();\n\t\ttree.setInsertionMode('beforeHead');\n\t};\n\n\tmodes.afterAfterBody = Object.create(modes.base);\n\n\tmodes.afterAfterBody.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.afterAfterBody.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.afterAfterBody.processDoctype = function(data) {\n\t\tmodes.inBody.processDoctype(data);\n\t};\n\n\tmodes.afterAfterBody.startTagHtml = function(data, attributes) {\n\t\tmodes.inBody.startTagHtml(data, attributes);\n\t};\n\n\tmodes.afterAfterBody.startTagOther = function(name, attributes, selfClosing) {\n\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.afterAfterBody.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.afterAfterBody.processCharacters = function(data) {\n\t\tif (!isAllWhitespace(data.characters)) {\n\t\t\ttree.parseError('unexpected-char-after-body');\n\t\t\ttree.setInsertionMode('inBody');\n\t\t\treturn tree.insertionMode.processCharacters(data);\n\t\t}\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.afterBody = Object.create(modes.base);\n\n\tmodes.afterBody.end_tag_handlers = {\n\t\thtml: 'endTagHtml',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.afterBody.processComment = function(data) {\n\t\ttree.insertComment(data, tree.openElements.rootNode);\n\t};\n\n\tmodes.afterBody.processCharacters = function(data) {\n\t\tif (!isAllWhitespace(data.characters)) {\n\t\t\ttree.parseError('unexpected-char-after-body');\n\t\t\ttree.setInsertionMode('inBody');\n\t\t\treturn tree.insertionMode.processCharacters(data);\n\t\t}\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.afterBody.processStartTag = function(name, attributes, selfClosing) {\n\t\ttree.parseError('unexpected-start-tag-after-body', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.afterBody.endTagHtml = function(name) {\n\t\tif (tree.context) {\n\t\t\ttree.parseError('end-html-in-innerhtml');\n\t\t} else {\n\t\t\ttree.setInsertionMode('afterAfterBody');\n\t\t}\n\t};\n\n\tmodes.afterBody.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag-after-body', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.afterFrameset = Object.create(modes.base);\n\n\tmodes.afterFrameset.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tnoframes: 'startTagNoframes',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.afterFrameset.end_tag_handlers = {\n\t\thtml: 'endTagHtml',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.afterFrameset.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tvar whitespace = \"\";\n\t\tfor (var i = 0; i < characters.length; i++) {\n\t\t\tvar ch = characters[i];\n\t\t\tif (isWhitespace(ch))\n\t\t\t\twhitespace += ch;\n\t\t}\n\t\tif (whitespace) {\n\t\t\ttree.insertText(whitespace);\n\t\t}\n\t\tif (whitespace.length < characters.length)\n\t\t\ttree.parseError('expected-eof-but-got-char');\n\t};\n\n\tmodes.afterFrameset.startTagNoframes = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.afterFrameset.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-after-frameset\", {name: name});\n\t};\n\n\tmodes.afterFrameset.endTagHtml = function(name) {\n\t\ttree.setInsertionMode('afterAfterFrameset');\n\t};\n\n\tmodes.afterFrameset.endTagOther = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-after-frameset\", {name: name});\n\t};\n\n\tmodes.beforeHead = Object.create(modes.base);\n\n\tmodes.beforeHead.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagHead',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.beforeHead.end_tag_handlers = {\n\t\thtml: 'endTagImplyHead',\n\t\thead: 'endTagImplyHead',\n\t\tbody: 'endTagImplyHead',\n\t\tbr: 'endTagImplyHead',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.beforeHead.processEOF = function() {\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.beforeHead.processCharacters = function(buffer) {\n\t\tbuffer.skipLeadingWhitespace();\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.beforeHead.startTagHead = function(name, attributes) {\n\t\ttree.insertHeadElement(attributes);\n\t\ttree.setInsertionMode('inHead');\n\t};\n\n\tmodes.beforeHead.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.beforeHead.endTagImplyHead = function(name) {\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.beforeHead.endTagOther = function(name) {\n\t\ttree.parseError('end-tag-after-implied-root', {name: name});\n\t};\n\n\tmodes.inHead = Object.create(modes.base);\n\n\tmodes.inHead.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagHead',\n\t\ttitle: 'startTagTitle',\n\t\tscript: 'startTagScript',\n\t\tstyle: 'startTagNoFramesStyle',\n\t\tnoscript: 'startTagNoScript',\n\t\tnoframes: 'startTagNoFramesStyle',\n\t\tbase: 'startTagBaseBasefontBgsoundLink',\n\t\tbasefont: 'startTagBaseBasefontBgsoundLink',\n\t\tbgsound: 'startTagBaseBasefontBgsoundLink',\n\t\tlink: 'startTagBaseBasefontBgsoundLink',\n\t\tmeta: 'startTagMeta',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inHead.end_tag_handlers = {\n\t\thead: 'endTagHead',\n\t\thtml: 'endTagHtmlBodyBr',\n\t\tbody: 'endTagHtmlBodyBr',\n\t\tbr: 'endTagHtmlBodyBr',\n\t\t\"-default\": 'endTagOther'\n\t};\n\n\tmodes.inHead.processEOF = function() {\n\t\tvar name = tree.currentStackItem().localName;\n\t\tif (['title', 'style', 'script'].indexOf(name) != -1) {\n\t\t\ttree.parseError(\"expected-named-closing-tag-but-got-eof\", {name: name});\n\t\t\ttree.popElement();\n\t\t}\n\n\t\tthis.anythingElse();\n\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.inHead.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.inHead.startTagHtml = function(name, attributes) {\n\t\tmodes.inBody.processStartTag(name, attributes);\n\t};\n\n\tmodes.inHead.startTagHead = function(name, attributes) {\n\t\ttree.parseError('two-heads-are-not-better-than-one');\n\t};\n\n\tmodes.inHead.startTagTitle = function(name, attributes) {\n\t\ttree.processGenericRCDATAStartTag(name, attributes);\n\t};\n\n\tmodes.inHead.startTagNoScript = function(name, attributes) {\n\t\tif (tree.scriptingEnabled)\n\t\t\treturn tree.processGenericRawTextStartTag(name, attributes);\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inHeadNoscript');\n\t};\n\n\tmodes.inHead.startTagNoFramesStyle = function(name, attributes) {\n\t\ttree.processGenericRawTextStartTag(name, attributes);\n\t};\n\n\tmodes.inHead.startTagScript = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t\ttree.tokenizer.setState(Tokenizer.SCRIPT_DATA);\n\t\ttree.originalInsertionMode = tree.insertionModeName;\n\t\ttree.setInsertionMode('text');\n\t};\n\n\tmodes.inHead.startTagBaseBasefontBgsoundLink = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inHead.startTagMeta = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inHead.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inHead.endTagHead = function(name) {\n\t\tif (tree.openElements.item(tree.openElements.length - 1).localName == 'head') {\n\t\t\ttree.openElements.pop();\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: 'head'});\n\t\t}\n\t\ttree.setInsertionMode('afterHead');\n\t};\n\n\tmodes.inHead.endTagHtmlBodyBr = function(name) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inHead.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.inHead.anythingElse = function() {\n\t\tthis.endTagHead('head');\n\t};\n\n\tmodes.afterHead = Object.create(modes.base);\n\n\tmodes.afterHead.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagHead',\n\t\tbody: 'startTagBody',\n\t\tframeset: 'startTagFrameset',\n\t\tbase: 'startTagFromHead',\n\t\tlink: 'startTagFromHead',\n\t\tmeta: 'startTagFromHead',\n\t\tscript: 'startTagFromHead',\n\t\tstyle: 'startTagFromHead',\n\t\ttitle: 'startTagFromHead',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.afterHead.end_tag_handlers = {\n\t\tbody: 'endTagBodyHtmlBr',\n\t\thtml: 'endTagBodyHtmlBr',\n\t\tbr: 'endTagBodyHtmlBr',\n\t\t\"-default\": 'endTagOther'\n\t};\n\n\tmodes.afterHead.processEOF = function() {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.afterHead.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.afterHead.startTagHtml = function(name, attributes) {\n\t\tmodes.inBody.processStartTag(name, attributes);\n\t};\n\n\tmodes.afterHead.startTagBody = function(name, attributes) {\n\t\ttree.framesetOk = false;\n\t\ttree.insertBodyElement(attributes);\n\t\ttree.setInsertionMode('inBody');\n\t};\n\n\tmodes.afterHead.startTagFrameset = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inFrameset');\n\t};\n\n\tmodes.afterHead.startTagFromHead = function(name, attributes, selfClosing) {\n\t\ttree.parseError(\"unexpected-start-tag-out-of-my-head\", {name: name});\n\t\ttree.openElements.push(tree.head);\n\t\tmodes.inHead.processStartTag(name, attributes, selfClosing);\n\t\ttree.openElements.remove(tree.head);\n\t};\n\n\tmodes.afterHead.startTagHead = function(name, attributes, selfClosing) {\n\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t};\n\n\tmodes.afterHead.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.afterHead.endTagBodyHtmlBr = function(name) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.afterHead.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.afterHead.anythingElse = function() {\n\t\ttree.insertBodyElement([]);\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.framesetOk = true;\n\t}\n\n\tmodes.inBody = Object.create(modes.base);\n\n\tmodes.inBody.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagMisplaced',\n\t\tbase: 'startTagProcessInHead',\n\t\tbasefont: 'startTagProcessInHead',\n\t\tbgsound: 'startTagProcessInHead',\n\t\tlink: 'startTagProcessInHead',\n\t\tmeta: 'startTagProcessInHead',\n\t\tnoframes: 'startTagProcessInHead',\n\t\tscript: 'startTagProcessInHead',\n\t\tstyle: 'startTagProcessInHead',\n\t\ttitle: 'startTagProcessInHead',\n\t\tbody: 'startTagBody',\n\t\tform: 'startTagForm',\n\t\tplaintext: 'startTagPlaintext',\n\t\ta: 'startTagA',\n\t\tbutton: 'startTagButton',\n\t\txmp: 'startTagXmp',\n\t\ttable: 'startTagTable',\n\t\thr: 'startTagHr',\n\t\timage: 'startTagImage',\n\t\tinput: 'startTagInput',\n\t\ttextarea: 'startTagTextarea',\n\t\tselect: 'startTagSelect',\n\t\tisindex: 'startTagIsindex',\n\t\tapplet:\t'startTagAppletMarqueeObject',\n\t\tmarquee:\t'startTagAppletMarqueeObject',\n\t\tobject:\t'startTagAppletMarqueeObject',\n\t\tli: 'startTagListItem',\n\t\tdd: 'startTagListItem',\n\t\tdt: 'startTagListItem',\n\t\taddress: 'startTagCloseP',\n\t\tarticle: 'startTagCloseP',\n\t\taside: 'startTagCloseP',\n\t\tblockquote: 'startTagCloseP',\n\t\tcenter: 'startTagCloseP',\n\t\tdetails: 'startTagCloseP',\n\t\tdir: 'startTagCloseP',\n\t\tdiv: 'startTagCloseP',\n\t\tdl: 'startTagCloseP',\n\t\tfieldset: 'startTagCloseP',\n\t\tfigcaption: 'startTagCloseP',\n\t\tfigure: 'startTagCloseP',\n\t\tfooter: 'startTagCloseP',\n\t\theader: 'startTagCloseP',\n\t\thgroup: 'startTagCloseP',\n\t\tmain: 'startTagCloseP',\n\t\tmenu: 'startTagCloseP',\n\t\tnav: 'startTagCloseP',\n\t\tol: 'startTagCloseP',\n\t\tp: 'startTagCloseP',\n\t\tsection: 'startTagCloseP',\n\t\tsummary: 'startTagCloseP',\n\t\tul: 'startTagCloseP',\n\t\tlisting: 'startTagPreListing',\n\t\tpre: 'startTagPreListing',\n\t\tb: 'startTagFormatting',\n\t\tbig: 'startTagFormatting',\n\t\tcode: 'startTagFormatting',\n\t\tem: 'startTagFormatting',\n\t\tfont: 'startTagFormatting',\n\t\ti: 'startTagFormatting',\n\t\ts: 'startTagFormatting',\n\t\tsmall: 'startTagFormatting',\n\t\tstrike: 'startTagFormatting',\n\t\tstrong: 'startTagFormatting',\n\t\ttt: 'startTagFormatting',\n\t\tu: 'startTagFormatting',\n\t\tnobr: 'startTagNobr',\n\t\tarea: 'startTagVoidFormatting',\n\t\tbr: 'startTagVoidFormatting',\n\t\tembed: 'startTagVoidFormatting',\n\t\timg: 'startTagVoidFormatting',\n\t\tkeygen: 'startTagVoidFormatting',\n\t\twbr: 'startTagVoidFormatting',\n\t\tparam: 'startTagParamSourceTrack',\n\t\tsource: 'startTagParamSourceTrack',\n\t\ttrack: 'startTagParamSourceTrack',\n\t\tiframe: 'startTagIFrame',\n\t\tnoembed: 'startTagRawText',\n\t\tnoscript: 'startTagRawText',\n\t\th1: 'startTagHeading',\n\t\th2: 'startTagHeading',\n\t\th3: 'startTagHeading',\n\t\th4: 'startTagHeading',\n\t\th5: 'startTagHeading',\n\t\th6: 'startTagHeading',\n\t\tcaption: 'startTagMisplaced',\n\t\tcol: 'startTagMisplaced',\n\t\tcolgroup: 'startTagMisplaced',\n\t\tframe: 'startTagMisplaced',\n\t\tframeset: 'startTagFrameset',\n\t\ttbody: 'startTagMisplaced',\n\t\ttd: 'startTagMisplaced',\n\t\ttfoot: 'startTagMisplaced',\n\t\tth: 'startTagMisplaced',\n\t\tthead: 'startTagMisplaced',\n\t\ttr: 'startTagMisplaced',\n\t\toption: 'startTagOptionOptgroup',\n\t\toptgroup: 'startTagOptionOptgroup',\n\t\tmath: 'startTagMath',\n\t\tsvg: 'startTagSVG',\n\t\trt: 'startTagRpRt',\n\t\trp: 'startTagRpRt',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inBody.end_tag_handlers = {\n\t\tp: 'endTagP',\n\t\tbody: 'endTagBody',\n\t\thtml: 'endTagHtml',\n\t\taddress: 'endTagBlock',\n\t\tarticle: 'endTagBlock',\n\t\taside: 'endTagBlock',\n\t\tblockquote: 'endTagBlock',\n\t\tbutton: 'endTagBlock',\n\t\tcenter: 'endTagBlock',\n\t\tdetails: 'endTagBlock',\n\t\tdir: 'endTagBlock',\n\t\tdiv: 'endTagBlock',\n\t\tdl: 'endTagBlock',\n\t\tfieldset: 'endTagBlock',\n\t\tfigcaption: 'endTagBlock',\n\t\tfigure: 'endTagBlock',\n\t\tfooter: 'endTagBlock',\n\t\theader: 'endTagBlock',\n\t\thgroup: 'endTagBlock',\n\t\tlisting: 'endTagBlock',\n\t\tmain: 'endTagBlock',\n\t\tmenu: 'endTagBlock',\n\t\tnav: 'endTagBlock',\n\t\tol: 'endTagBlock',\n\t\tpre: 'endTagBlock',\n\t\tsection: 'endTagBlock',\n\t\tsummary: 'endTagBlock',\n\t\tul: 'endTagBlock',\n\t\tform: 'endTagForm',\n\t\tapplet: 'endTagAppletMarqueeObject',\n\t\tmarquee: 'endTagAppletMarqueeObject',\n\t\tobject: 'endTagAppletMarqueeObject',\n\t\tdd: 'endTagListItem',\n\t\tdt: 'endTagListItem',\n\t\tli: 'endTagListItem',\n\t\th1: 'endTagHeading',\n\t\th2: 'endTagHeading',\n\t\th3: 'endTagHeading',\n\t\th4: 'endTagHeading',\n\t\th5: 'endTagHeading',\n\t\th6: 'endTagHeading',\n\t\ta: 'endTagFormatting',\n\t\tb: 'endTagFormatting',\n\t\tbig: 'endTagFormatting',\n\t\tcode: 'endTagFormatting',\n\t\tem: 'endTagFormatting',\n\t\tfont: 'endTagFormatting',\n\t\ti: 'endTagFormatting',\n\t\tnobr: 'endTagFormatting',\n\t\ts: 'endTagFormatting',\n\t\tsmall: 'endTagFormatting',\n\t\tstrike: 'endTagFormatting',\n\t\tstrong: 'endTagFormatting',\n\t\ttt: 'endTagFormatting',\n\t\tu: 'endTagFormatting',\n\t\tbr: 'endTagBr',\n\t\t\"-default\": 'endTagOther'\n\t};\n\n\tmodes.inBody.processCharacters = function(buffer) {\n\t\tif (tree.shouldSkipLeadingNewline) {\n\t\t\ttree.shouldSkipLeadingNewline = false;\n\t\t\tbuffer.skipAtMostOneLeadingNewline();\n\t\t}\n\t\ttree.reconstructActiveFormattingElements();\n\t\tvar characters = buffer.takeRemaining();\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError(\"invalid-codepoint\");\n\t\t\treturn '';\n\t\t});\n\t\tif (!characters)\n\t\t\treturn;\n\t\ttree.insertText(characters);\n\t\tif (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))\n\t\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagHtml = function(name, attributes) {\n\t\ttree.parseError('non-html-root');\n\t\ttree.addAttributesToElement(tree.openElements.rootNode, attributes);\n\t};\n\n\tmodes.inBody.startTagProcessInHead = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inBody.startTagBody = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag', {name: 'body'});\n\t\tif (tree.openElements.length == 1 ||\n\t\t\ttree.openElements.item(1).localName != 'body') {\n\t\t\tassert.ok(tree.context);\n\t\t} else {\n\t\t\ttree.framesetOk = false;\n\t\t\ttree.addAttributesToElement(tree.openElements.bodyElement, attributes);\n\t\t}\n\t};\n\n\tmodes.inBody.startTagFrameset = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag', {name: 'frameset'});\n\t\tif (tree.openElements.length == 1 ||\n\t\t\ttree.openElements.item(1).localName != 'body') {\n\t\t\tassert.ok(tree.context);\n\t\t} else if (tree.framesetOk) {\n\t\t\ttree.detachFromParent(tree.openElements.bodyElement);\n\t\t\twhile (tree.openElements.length > 1)\n\t\t\t\ttree.openElements.pop();\n\t\t\ttree.insertElement(name, attributes);\n\t\t\ttree.setInsertionMode('inFrameset');\n\t\t}\n\t};\n\n\tmodes.inBody.startTagCloseP = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagPreListing = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t\ttree.shouldSkipLeadingNewline = true;\n\t};\n\n\tmodes.inBody.startTagForm = function(name, attributes) {\n\t\tif (tree.form) {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t} else {\n\t\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\t\tthis.endTagP('p');\n\t\t\ttree.insertElement(name, attributes);\n\t\t\ttree.form = tree.currentStackItem();\n\t\t}\n\t};\n\n\tmodes.inBody.startTagRpRt = function(name, attributes) {\n\t\tif (tree.openElements.inScope('ruby')) {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != 'ruby') {\n\t\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t\t}\n\t\t}\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagListItem = function(name, attributes) {\n\t\tvar stopNames = {li: ['li'], dd: ['dd', 'dt'], dt: ['dd', 'dt']};\n\t\tvar stopName = stopNames[name];\n\n\t\tvar els = tree.openElements;\n\t\tfor (var i = els.length - 1; i >= 0; i--) {\n\t\t\tvar node = els.item(i);\n\t\t\tif (stopName.indexOf(node.localName) != -1) {\n\t\t\t\ttree.insertionMode.processEndTag(node.localName);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (node.isSpecial() && node.localName !== 'p' && node.localName !== 'address' && node.localName !== 'div')\n\t\t\t\tbreak;\n\t\t}\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagPlaintext = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.tokenizer.setState(Tokenizer.PLAINTEXT);\n\t};\n\n\tmodes.inBody.startTagHeading = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\tif (tree.currentStackItem().isNumberedHeader()) {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t\ttree.popElement();\n\t\t}\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagA = function(name, attributes) {\n\t\tvar activeA = tree.elementInActiveFormattingElements('a');\n\t\tif (activeA) {\n\t\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\", {startName: \"a\", endName: \"a\"});\n\t\t\ttree.adoptionAgencyEndTag('a');\n\t\t\tif (tree.openElements.contains(activeA))\n\t\t\t\ttree.openElements.remove(activeA);\n\t\t\ttree.removeElementFromActiveFormattingElements(activeA);\n\t\t}\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertFormattingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagFormatting = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertFormattingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagNobr = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\tif (tree.openElements.inScope('nobr')) {\n\t\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\", {startName: 'nobr', endName: 'nobr'});\n\t\t\tthis.processEndTag('nobr');\n\t\t\t\ttree.reconstructActiveFormattingElements();\n\t\t}\n\t\ttree.insertFormattingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagButton = function(name, attributes) {\n\t\tif (tree.openElements.inScope('button')) {\n\t\t\ttree.parseError('unexpected-start-tag-implies-end-tag', {startName: 'button', endName: 'button'});\n\t\t\tthis.processEndTag('button');\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\n\t\t} else {\n\t\t\ttree.framesetOk = false;\n\t\t\ttree.reconstructActiveFormattingElements();\n\t\t\ttree.insertElement(name, attributes);\n\t\t}\n\t};\n\n\tmodes.inBody.startTagAppletMarqueeObject = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.activeFormattingElements.push(Marker);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.endTagAppletMarqueeObject = function(name) {\n\t\tif (!tree.openElements.inScope(name)) {\n\t\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != name) {\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\t\t\t}\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t\ttree.clearActiveFormattingElements();\n\t\t}\n\t};\n\n\tmodes.inBody.startTagXmp = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.processEndTag('p');\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.processGenericRawTextStartTag(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagTable = function(name, attributes) {\n\t\tif (tree.compatMode !== \"quirks\")\n\t\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\t\tthis.processEndTag('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inTable');\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagVoidFormatting = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagParamSourceTrack = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagHr = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagImage = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag-treated-as', {originalName: 'image', newName: 'img'});\n\t\tthis.processStartTag('img', attributes);\n\t};\n\n\tmodes.inBody.startTagInput = function(name, attributes) {\n\t\tvar currentFramesetOk = tree.framesetOk;\n\t\tthis.startTagVoidFormatting(name, attributes);\n\t\tfor (var key in attributes) {\n\t\t\tif (attributes[key].nodeName == 'type') {\n\t\t\t\tif (attributes[key].nodeValue.toLowerCase() == 'hidden')\n\t\t\t\t\ttree.framesetOk = currentFramesetOk;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tmodes.inBody.startTagIsindex = function(name, attributes) {\n\t\ttree.parseError('deprecated-tag', {name: 'isindex'});\n\t\ttree.selfClosingFlagAcknowledged = true;\n\t\tif (tree.form)\n\t\t\treturn;\n\t\tvar formAttributes = [];\n\t\tvar inputAttributes = [];\n\t\tvar prompt = \"This is a searchable index. Enter search keywords: \";\n\t\tfor (var key in attributes) {\n\t\t\tswitch (attributes[key].nodeName) {\n\t\t\t\tcase 'action':\n\t\t\t\t\tformAttributes.push({nodeName: 'action',\n\t\t\t\t\t\tnodeValue: attributes[key].nodeValue});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'prompt':\n\t\t\t\t\tprompt = attributes[key].nodeValue;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'name':\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tinputAttributes.push({nodeName: attributes[key].nodeName,\n\t\t\t\t\t\tnodeValue: attributes[key].nodeValue});\n\t\t\t}\n\t\t}\n\t\tinputAttributes.push({nodeName: 'name', nodeValue: 'isindex'});\n\t\tthis.processStartTag('form', formAttributes);\n\t\tthis.processStartTag('hr');\n\t\tthis.processStartTag('label');\n\t\tthis.processCharacters(new CharacterBuffer(prompt));\n\t\tthis.processStartTag('input', inputAttributes);\n\t\tthis.processEndTag('label');\n\t\tthis.processStartTag('hr');\n\t\tthis.processEndTag('form');\n\t};\n\n\tmodes.inBody.startTagTextarea = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t\ttree.tokenizer.setState(Tokenizer.RCDATA);\n\t\ttree.originalInsertionMode = tree.insertionModeName;\n\t\ttree.shouldSkipLeadingNewline = true;\n\t\ttree.framesetOk = false;\n\t\ttree.setInsertionMode('text');\n\t};\n\n\tmodes.inBody.startTagIFrame = function(name, attributes) {\n\t\ttree.framesetOk = false;\n\t\tthis.startTagRawText(name, attributes);\n\t};\n\n\tmodes.inBody.startTagRawText = function(name, attributes) {\n\t\ttree.processGenericRawTextStartTag(name, attributes);\n\t};\n\n\tmodes.inBody.startTagSelect = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t\tvar insertionModeName = tree.insertionModeName;\n\t\tif (insertionModeName == 'inTable' ||\n\t\t\tinsertionModeName == 'inCaption' ||\n\t\t\tinsertionModeName == 'inColumnGroup' ||\n\t\t\tinsertionModeName == 'inTableBody' ||\n\t\t\tinsertionModeName == 'inRow' ||\n\t\t\tinsertionModeName == 'inCell') {\n\t\t\ttree.setInsertionMode('inSelectInTable');\n\t\t} else {\n\t\t\ttree.setInsertionMode('inSelect');\n\t\t}\n\t};\n\n\tmodes.inBody.startTagMisplaced = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag-ignored', {name: name});\n\t};\n\n\tmodes.inBody.endTagMisplaced = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\t};\n\n\tmodes.inBody.endTagBr = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-treated-as\", {originalName: \"br\", newName: \"br element\"});\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, []);\n\t\ttree.popElement();\n\t};\n\n\tmodes.inBody.startTagOptionOptgroup = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'option')\n\t\t\ttree.popElement();\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagOther = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.endTagOther = function(name) {\n\t\tvar node;\n\t\tfor (var i = tree.openElements.length - 1; i > 0; i--) {\n\t\t\tnode = tree.openElements.item(i);\n\t\t\tif (node.localName == name) {\n\t\t\t\ttree.generateImpliedEndTags(name);\n\t\t\t\tif (tree.currentStackItem().localName != name)\n\t\t\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\t\ttree.openElements.remove_openElements_until(function(x) {return x === node;});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (node.isSpecial()) {\n\t\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tmodes.inBody.startTagMath = function(name, attributes, selfClosing) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\tattributes = tree.adjustMathMLAttributes(attributes);\n\t\tattributes = tree.adjustForeignAttributes(attributes);\n\t\ttree.insertForeignElement(name, attributes, \"http://www.w3.org/1998/Math/MathML\", selfClosing);\n\t};\n\n\tmodes.inBody.startTagSVG = function(name, attributes, selfClosing) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\tattributes = tree.adjustSVGAttributes(attributes);\n\t\tattributes = tree.adjustForeignAttributes(attributes);\n\t\ttree.insertForeignElement(name, attributes, \"http://www.w3.org/2000/svg\", selfClosing);\n\t};\n\n\tmodes.inBody.endTagP = function(name) {\n\t\tif (!tree.openElements.inButtonScope('p')) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: 'p'});\n\t\t\tthis.startTagCloseP('p', []);\n\t\t\tthis.endTagP('p');\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags('p');\n\t\t\tif (tree.currentStackItem().localName != 'p')\n\t\t\t\ttree.parseError('unexpected-implied-end-tag', {name: 'p'});\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagBody = function(name) {\n\t\tif (!tree.openElements.inScope('body')) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\treturn;\n\t\t}\n\t\tif (tree.currentStackItem().localName != 'body') {\n\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\n\t\t\t\texpectedName: tree.currentStackItem().localName,\n\t\t\t\tgotName: name\n\t\t\t});\n\t\t}\n\t\ttree.setInsertionMode('afterBody');\n\t};\n\n\tmodes.inBody.endTagHtml = function(name) {\n\t\tif (!tree.openElements.inScope('body')) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\treturn;\n\t\t}\n\t\tif (tree.currentStackItem().localName != 'body') {\n\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\n\t\t\t\texpectedName: tree.currentStackItem().localName,\n\t\t\t\tgotName: name\n\t\t\t});\n\t\t}\n\t\ttree.setInsertionMode('afterBody');\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inBody.endTagBlock = function(name) {\n\t\tif (!tree.openElements.inScope(name)) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != name) {\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\t\t\t}\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagForm = function(name)  {\n\t\tvar node = tree.form;\n\t\ttree.form = null;\n\t\tif (!node || !tree.openElements.inScope(name)) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem() != node) {\n\t\t\t\ttree.parseError('end-tag-too-early-ignored', {name: 'form'});\n\t\t\t}\n\t\t\ttree.openElements.remove(node);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagListItem = function(name) {\n\t\tif (!tree.openElements.inListItemScope(name)) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags(name);\n\t\t\tif (tree.currentStackItem().localName != name)\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagHeading = function(name) {\n\t\tif (!tree.openElements.hasNumberedHeaderElementInScope()) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\treturn;\n\t\t}\n\t\ttree.generateImpliedEndTags();\n\t\tif (tree.currentStackItem().localName != name)\n\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\n\t\ttree.openElements.remove_openElements_until(function(e) {\n\t\t\treturn e.isNumberedHeader();\n\t\t});\n\t};\n\n\tmodes.inBody.endTagFormatting = function(name, attributes) {\n\t\tif (!tree.adoptionAgencyEndTag(name))\n\t\t\tthis.endTagOther(name, attributes);\n\t};\n\n\tmodes.inCaption = Object.create(modes.base);\n\n\tmodes.inCaption.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcaption: 'startTagTableElement',\n\t\tcol: 'startTagTableElement',\n\t\tcolgroup: 'startTagTableElement',\n\t\ttbody: 'startTagTableElement',\n\t\ttd: 'startTagTableElement',\n\t\ttfoot: 'startTagTableElement',\n\t\tthead: 'startTagTableElement',\n\t\ttr: 'startTagTableElement',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inCaption.end_tag_handlers = {\n\t\tcaption: 'endTagCaption',\n\t\ttable: 'endTagTable',\n\t\tbody: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttbody: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\ttfood: 'endTagIgnore',\n\t\tthead: 'endTagIgnore',\n\t\ttr: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inCaption.processCharacters = function(data) {\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.inCaption.startTagTableElement = function(name, attributes) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\tvar ignoreEndTag = !tree.openElements.inTableScope('caption');\n\t\ttree.insertionMode.processEndTag('caption');\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inCaption.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inCaption.endTagCaption = function(name) {\n\t\tif (!tree.openElements.inTableScope('caption')) {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != 'caption') {\n\t\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\n\t\t\t\t\tgotName: \"caption\",\n\t\t\t\t\texpectedName: tree.currentStackItem().localName\n\t\t\t\t});\n\t\t\t}\n\t\t\ttree.openElements.popUntilPopped('caption');\n\t\t\ttree.clearActiveFormattingElements();\n\t\t\ttree.setInsertionMode('inTable');\n\t\t}\n\t};\n\n\tmodes.inCaption.endTagTable = function(name) {\n\t\ttree.parseError(\"unexpected-end-table-in-caption\");\n\t\tvar ignoreEndTag = !tree.openElements.inTableScope('caption');\n\t\ttree.insertionMode.processEndTag('caption');\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inCaption.endTagIgnore = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.inCaption.endTagOther = function(name) {\n\t\tmodes.inBody.processEndTag(name);\n\t};\n\n\tmodes.inCell = Object.create(modes.base);\n\n\tmodes.inCell.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcaption: 'startTagTableOther',\n\t\tcol: 'startTagTableOther',\n\t\tcolgroup: 'startTagTableOther',\n\t\ttbody: 'startTagTableOther',\n\t\ttd: 'startTagTableOther',\n\t\ttfoot: 'startTagTableOther',\n\t\tth: 'startTagTableOther',\n\t\tthead: 'startTagTableOther',\n\t\ttr: 'startTagTableOther',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inCell.end_tag_handlers = {\n\t\ttd: 'endTagTableCell',\n\t\tth: 'endTagTableCell',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttable: 'endTagImply',\n\t\ttbody: 'endTagImply',\n\t\ttfoot: 'endTagImply',\n\t\tthead: 'endTagImply',\n\t\ttr: 'endTagImply',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inCell.processCharacters = function(data) {\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.inCell.startTagTableOther = function(name, attributes, selfClosing) {\n\t\tif (tree.openElements.inTableScope('td') || tree.openElements.inTableScope('th')) {\n\t\t\tthis.closeCell();\n\t\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inCell.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inCell.endTagTableCell = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\ttree.generateImpliedEndTags(name);\n\t\t\tif (tree.currentStackItem().localName != name.toLowerCase()) {\n\t\t\t\ttree.parseError('unexpected-cell-end-tag', {name: name});\n\t\t\t\ttree.openElements.popUntilPopped(name);\n\t\t\t} else {\n\t\t\t\ttree.popElement();\n\t\t\t}\n\t\t\ttree.clearActiveFormattingElements();\n\t\t\ttree.setInsertionMode('inRow');\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inCell.endTagIgnore = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.inCell.endTagImply = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.closeCell();\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inCell.endTagOther = function(name) {\n\t\tmodes.inBody.processEndTag(name);\n\t};\n\n\tmodes.inCell.closeCell = function() {\n\t\tif (tree.openElements.inTableScope('td')) {\n\t\t\tthis.endTagTableCell('td');\n\t\t} else if (tree.openElements.inTableScope('th')) {\n\t\t\tthis.endTagTableCell('th');\n\t\t}\n\t};\n\n\n\tmodes.inColumnGroup = Object.create(modes.base);\n\n\tmodes.inColumnGroup.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcol: 'startTagCol',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inColumnGroup.end_tag_handlers = {\n\t\tcolgroup: 'endTagColgroup',\n\t\tcol: 'endTagCol',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inColumnGroup.ignoreEndTagColgroup = function() {\n\t\treturn tree.currentStackItem().localName == 'html';\n\t};\n\n\tmodes.inColumnGroup.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\n\t\tthis.endTagColgroup('colgroup');\n\t\tif (!ignoreEndTag) tree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.inColumnGroup.startTagCol = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inColumnGroup.startTagOther = function(name, attributes, selfClosing) {\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\n\t\tthis.endTagColgroup('colgroup');\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inColumnGroup.endTagColgroup = function(name) {\n\t\tif (this.ignoreEndTagColgroup()) {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.popElement();\n\t\t\ttree.setInsertionMode('inTable');\n\t\t}\n\t};\n\n\tmodes.inColumnGroup.endTagCol = function(name) {\n\t\ttree.parseError(\"no-end-tag\", {name: 'col'});\n\t};\n\n\tmodes.inColumnGroup.endTagOther = function(name) {\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\n\t\tthis.endTagColgroup('colgroup');\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name) ;\n\t};\n\n\tmodes.inForeignContent = Object.create(modes.base);\n\n\tmodes.inForeignContent.processStartTag = function(name, attributes, selfClosing) {\n\t\tif (['b', 'big', 'blockquote', 'body', 'br', 'center', 'code', 'dd', 'div', 'dl', 'dt', 'em', 'embed', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'i', 'img', 'li', 'listing', 'menu', 'meta', 'nobr', 'ol', 'p', 'pre', 'ruby', 's', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'table', 'tt', 'u', 'ul', 'var'].indexOf(name) != -1\n\t\t\t\t|| (name == 'font' && attributes.some(function(attr){ return ['color', 'face', 'size'].indexOf(attr.nodeName) >= 0 }))) {\n\t\t\ttree.parseError('unexpected-html-element-in-foreign-content', {name: name});\n\t\t\twhile (tree.currentStackItem().isForeign()\n\t\t\t\t&& !tree.currentStackItem().isHtmlIntegrationPoint()\n\t\t\t\t&& !tree.currentStackItem().isMathMLTextIntegrationPoint()) {\n\t\t\t\ttree.openElements.pop();\n\t\t\t}\n\t\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t\t\treturn;\n\t\t}\n\t\tif (tree.currentStackItem().namespaceURI == \"http://www.w3.org/1998/Math/MathML\") {\n\t\t\tattributes = tree.adjustMathMLAttributes(attributes);\n\t\t}\n\t\tif (tree.currentStackItem().namespaceURI == \"http://www.w3.org/2000/svg\") {\n\t\t\tname = tree.adjustSVGTagNameCase(name);\n\t\t\tattributes = tree.adjustSVGAttributes(attributes);\n\t\t}\n\t\tattributes = tree.adjustForeignAttributes(attributes);\n\t\ttree.insertForeignElement(name, attributes, tree.currentStackItem().namespaceURI, selfClosing);\n\t};\n\n\tmodes.inForeignContent.processEndTag = function(name) {\n\t\tvar node = tree.currentStackItem();\n\t\tvar index = tree.openElements.length - 1;\n\t\tif (node.localName.toLowerCase() != name)\n\t\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\n\t\twhile (true) {\n\t\t\tif (index === 0)\n\t\t\t\tbreak;\n\t\t\tif (node.localName.toLowerCase() == name) {\n\t\t\t\twhile (tree.openElements.pop() != node);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tindex -= 1;\n\t\t\tnode = tree.openElements.item(index);\n\t\t\tif (node.isForeign()) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\ttree.insertionMode.processEndTag(name);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tmodes.inForeignContent.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError('invalid-codepoint');\n\t\t\treturn '\\uFFFD';\n\t\t});\n\t\tif (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))\n\t\t\ttree.framesetOk = false;\n\t\ttree.insertText(characters);\n\t};\n\n\tmodes.inHeadNoscript = Object.create(modes.base);\n\n\tmodes.inHeadNoscript.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tbasefont: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tbgsound: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tlink: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tmeta: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tnoframes: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tstyle: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\thead: 'startTagHeadNoscript',\n\t\tnoscript: 'startTagHeadNoscript',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inHeadNoscript.end_tag_handlers = {\n\t\tnoscript: 'endTagNoscript',\n\t\tbr: 'endTagBr',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inHeadNoscript.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\ttree.parseError(\"unexpected-char-in-frameset\");\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.inHeadNoscript.processComment = function(data) {\n\t\tmodes.inHead.processComment(data);\n\t};\n\n\tmodes.inHeadNoscript.startTagBasefontBgsoundLinkMetaNoframesStyle = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inHeadNoscript.startTagHeadNoscript = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inHeadNoscript.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inHeadNoscript.endTagBr = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name, attributes);\n\t};\n\n\tmodes.inHeadNoscript.endTagNoscript = function(name, attributes) {\n\t\ttree.popElement();\n\t\ttree.setInsertionMode('inHead');\n\t};\n\n\tmodes.inHeadNoscript.endTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inHeadNoscript.anythingElse = function() {\n\t\ttree.popElement();\n\t\ttree.setInsertionMode('inHead');\n\t};\n\n\n\tmodes.inFrameset = Object.create(modes.base);\n\n\tmodes.inFrameset.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tframeset: 'startTagFrameset',\n\t\tframe: 'startTagFrame',\n\t\tnoframes: 'startTagNoframes',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inFrameset.end_tag_handlers = {\n\t\tframeset: 'endTagFrameset',\n\t\tnoframes: 'endTagNoframes',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inFrameset.processCharacters = function(data) {\n\t\ttree.parseError(\"unexpected-char-in-frameset\");\n\t};\n\n\tmodes.inFrameset.startTagFrameset = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inFrameset.startTagFrame = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inFrameset.startTagNoframes = function(name, attributes) {\n\t\tmodes.inBody.processStartTag(name, attributes);\n\t};\n\n\tmodes.inFrameset.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inFrameset.endTagFrameset = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'html') {\n\t\t\ttree.parseError(\"unexpected-frameset-in-frameset-innerhtml\");\n\t\t} else {\n\t\t\ttree.popElement();\n\t\t}\n\n\t\tif (!tree.context && tree.currentStackItem().localName != 'frameset') {\n\t\t\ttree.setInsertionMode('afterFrameset');\n\t\t}\n\t};\n\n\tmodes.inFrameset.endTagNoframes = function(name) {\n\t\tmodes.inBody.processEndTag(name);\n\t};\n\n\tmodes.inFrameset.endTagOther = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inTable = Object.create(modes.base);\n\n\tmodes.inTable.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcaption: 'startTagCaption',\n\t\tcolgroup: 'startTagColgroup',\n\t\tcol: 'startTagCol',\n\t\ttable: 'startTagTable',\n\t\ttbody: 'startTagRowGroup',\n\t\ttfoot: 'startTagRowGroup',\n\t\tthead: 'startTagRowGroup',\n\t\ttd: 'startTagImplyTbody',\n\t\tth: 'startTagImplyTbody',\n\t\ttr: 'startTagImplyTbody',\n\t\tstyle: 'startTagStyleScript',\n\t\tscript: 'startTagStyleScript',\n\t\tinput: 'startTagInput',\n\t\tform: 'startTagForm',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inTable.end_tag_handlers = {\n\t\ttable: 'endTagTable',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttbody: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\ttfoot: 'endTagIgnore',\n\t\tth: 'endTagIgnore',\n\t\tthead: 'endTagIgnore',\n\t\ttr: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inTable.processCharacters =  function(data) {\n\t\tif (tree.currentStackItem().isFosterParenting()) {\n\t\t\tvar originalInsertionMode = tree.insertionModeName;\n\t\t\ttree.setInsertionMode('inTableText');\n\t\t\ttree.originalInsertionMode = originalInsertionMode;\n\t\t\ttree.insertionMode.processCharacters(data);\n\t\t} else {\n\t\t\ttree.redirectAttachToFosterParent = true;\n\t\t\tmodes.inBody.processCharacters(data);\n\t\t\ttree.redirectAttachToFosterParent = false;\n\t\t}\n\t};\n\n\tmodes.inTable.startTagCaption = function(name, attributes) {\n\t\ttree.openElements.popUntilTableScopeMarker();\n\t\ttree.activeFormattingElements.push(Marker);\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inCaption');\n\t};\n\n\tmodes.inTable.startTagColgroup = function(name, attributes) {\n\t\ttree.openElements.popUntilTableScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inColumnGroup');\n\t};\n\n\tmodes.inTable.startTagCol = function(name, attributes) {\n\t\tthis.startTagColgroup('colgroup', []);\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagRowGroup = function(name, attributes) {\n\t\ttree.openElements.popUntilTableScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inTableBody');\n\t};\n\n\tmodes.inTable.startTagImplyTbody = function(name, attributes) {\n\t\tthis.startTagRowGroup('tbody', []);\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagTable = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\",\n\t\t\t\t{startName: \"table\", endName: \"table\"});\n\t\ttree.insertionMode.processEndTag('table');\n\t\tif (!tree.context) tree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagStyleScript = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagInput = function(name, attributes) {\n\t\tfor (var key in attributes) {\n\t\t\tif (attributes[key].nodeName.toLowerCase() == 'type') {\n\t\t\t\tif (attributes[key].nodeValue.toLowerCase() == 'hidden') {\n\t\t\t\t\ttree.parseError(\"unexpected-hidden-input-in-table\");\n\t\t\t\t\ttree.insertElement(name, attributes);\n\t\t\t\t\ttree.openElements.pop();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.startTagOther(name, attributes);\n\t};\n\n\tmodes.inTable.startTagForm = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-form-in-table\");\n\t\tif (!tree.form) {\n\t\t\ttree.insertElement(name, attributes);\n\t\t\ttree.form = tree.currentStackItem();\n\t\t\ttree.openElements.pop();\n\t\t}\n\t};\n\n\tmodes.inTable.startTagOther = function(name, attributes, selfClosing) {\n\t\ttree.parseError(\"unexpected-start-tag-implies-table-voodoo\", {name: name});\n\t\ttree.redirectAttachToFosterParent = true;\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\n\t\ttree.redirectAttachToFosterParent = false;\n\t};\n\n\tmodes.inTable.endTagTable = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != name) {\n\t\t\t\ttree.parseError(\"end-tag-too-early-named\", {gotName: 'table', expectedName: tree.currentStackItem().localName});\n\t\t\t}\n\n\t\t\ttree.openElements.popUntilPopped('table');\n\t\t\ttree.resetInsertionMode();\n\t\t} else {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTable.endTagIgnore = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\t};\n\n\tmodes.inTable.endTagOther = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-implies-table-voodoo\", {name: name});\n\t\ttree.redirectAttachToFosterParent = true;\n\t\tmodes.inBody.processEndTag(name);\n\t\ttree.redirectAttachToFosterParent = false;\n\t};\n\n\tmodes.inTableText = Object.create(modes.base);\n\n\tmodes.inTableText.flushCharacters = function() {\n\t\tvar characters = tree.pendingTableCharacters.join('');\n\t\tif (!isAllWhitespace(characters)) {\n\t\t\ttree.redirectAttachToFosterParent = true;\n\t\t\ttree.reconstructActiveFormattingElements();\n\t\t\ttree.insertText(characters);\n\t\t\ttree.framesetOk = false;\n\t\t\ttree.redirectAttachToFosterParent = false;\n\t\t} else {\n\t\t\ttree.insertText(characters);\n\t\t}\n\t\ttree.pendingTableCharacters = [];\n\t};\n\n\tmodes.inTableText.processComment = function(data) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processComment(data);\n\t};\n\n\tmodes.inTableText.processEOF = function(data) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.inTableText.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError(\"invalid-codepoint\");\n\t\t\treturn '';\n\t\t});\n\t\tif (!characters)\n\t\t\treturn;\n\t\ttree.pendingTableCharacters.push(characters);\n\t};\n\n\tmodes.inTableText.processStartTag = function(name, attributes, selfClosing) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inTableText.processEndTag = function(name, attributes) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processEndTag(name, attributes);\n\t};\n\n\tmodes.inTableBody = Object.create(modes.base);\n\n\tmodes.inTableBody.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\ttr: 'startTagTr',\n\t\ttd: 'startTagTableCell',\n\t\tth: 'startTagTableCell',\n\t\tcaption: 'startTagTableOther',\n\t\tcol: 'startTagTableOther',\n\t\tcolgroup: 'startTagTableOther',\n\t\ttbody: 'startTagTableOther',\n\t\ttfoot: 'startTagTableOther',\n\t\tthead: 'startTagTableOther',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inTableBody.end_tag_handlers = {\n\t\ttable: 'endTagTable',\n\t\ttbody: 'endTagTableRowGroup',\n\t\ttfoot: 'endTagTableRowGroup',\n\t\tthead: 'endTagTableRowGroup',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\tth: 'endTagIgnore',\n\t\ttr: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inTableBody.processCharacters = function(data) {\n\t\tmodes.inTable.processCharacters(data);\n\t};\n\n\tmodes.inTableBody.startTagTr = function(name, attributes) {\n\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inRow');\n\t};\n\n\tmodes.inTableBody.startTagTableCell = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-cell-in-table-body\", {name: name});\n\t\tthis.startTagTr('tr', []);\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTableBody.startTagTableOther = function(name, attributes) {\n\t\tif (tree.openElements.inTableScope('tbody') ||  tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) {\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\t\tthis.endTagTableRowGroup(tree.currentStackItem().localName);\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTableBody.startTagOther = function(name, attributes) {\n\t\tmodes.inTable.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTableBody.endTagTableRowGroup = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\t\ttree.popElement();\n\t\t\ttree.setInsertionMode('inTable');\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag-in-table-body', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTableBody.endTagTable = function(name) {\n\t\tif (tree.openElements.inTableScope('tbody') ||  tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) {\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\t\tthis.endTagTableRowGroup(tree.currentStackItem().localName);\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTableBody.endTagIgnore = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-in-table-body\", {name: name});\n\t};\n\n\tmodes.inTableBody.endTagOther = function(name) {\n\t\tmodes.inTable.processEndTag(name);\n\t};\n\n\tmodes.inSelect = Object.create(modes.base);\n\n\tmodes.inSelect.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\toption: 'startTagOption',\n\t\toptgroup: 'startTagOptgroup',\n\t\tselect: 'startTagSelect',\n\t\tinput: 'startTagInput',\n\t\tkeygen: 'startTagInput',\n\t\ttextarea: 'startTagInput',\n\t\tscript: 'startTagScript',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inSelect.end_tag_handlers = {\n\t\toption: 'endTagOption',\n\t\toptgroup: 'endTagOptgroup',\n\t\tselect: 'endTagSelect',\n\t\tcaption: 'endTagTableElements',\n\t\ttable: 'endTagTableElements',\n\t\ttbody: 'endTagTableElements',\n\t\ttfoot: 'endTagTableElements',\n\t\tthead: 'endTagTableElements',\n\t\ttr: 'endTagTableElements',\n\t\ttd: 'endTagTableElements',\n\t\tth: 'endTagTableElements',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inSelect.processCharacters = function(buffer) {\n\t\tvar data = buffer.takeRemaining();\n\t\tdata = data.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError(\"invalid-codepoint\");\n\t\t\treturn '';\n\t\t});\n\t\tif (!data)\n\t\t\treturn;\n\t\ttree.insertText(data);\n\t};\n\n\tmodes.inSelect.startTagOption = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'option')\n\t\t\ttree.popElement();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inSelect.startTagOptgroup = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'option')\n\t\t\ttree.popElement();\n\t\tif (tree.currentStackItem().localName == 'optgroup')\n\t\t\ttree.popElement();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inSelect.endTagOption = function(name) {\n\t\tif (tree.currentStackItem().localName !== 'option') {\n\t\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\n\t\t\treturn;\n\t\t}\n\t\ttree.popElement();\n\t};\n\n\tmodes.inSelect.endTagOptgroup = function(name) {\n\t\tif (tree.currentStackItem().localName == 'option' && tree.openElements.item(tree.openElements.length - 2).localName == 'optgroup') {\n\t\t\ttree.popElement();\n\t\t}\n\t\tif (tree.currentStackItem().localName == 'optgroup') {\n\t\t\ttree.popElement();\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag-in-select', {name: 'optgroup'});\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagSelect = function(name) {\n\t\ttree.parseError(\"unexpected-select-in-select\");\n\t\tthis.endTagSelect('select');\n\t};\n\n\tmodes.inSelect.endTagSelect = function(name) {\n\t\tif (tree.openElements.inTableScope('select')) {\n\t\t\ttree.openElements.popUntilPopped('select');\n\t\t\ttree.resetInsertionMode();\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagInput = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-input-in-select\");\n\t\tif (tree.openElements.inSelectScope('select')) {\n\t\t\tthis.endTagSelect('select');\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagScript = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inSelect.endTagTableElements = function(name) {\n\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.endTagSelect('select');\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-select\", {name: name});\n\t};\n\n\tmodes.inSelect.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\n\t};\n\n\tmodes.inSelectInTable = Object.create(modes.base);\n\n\tmodes.inSelectInTable.start_tag_handlers = {\n\t\tcaption: 'startTagTable',\n\t\ttable: 'startTagTable',\n\t\ttbody: 'startTagTable',\n\t\ttfoot: 'startTagTable',\n\t\tthead: 'startTagTable',\n\t\ttr: 'startTagTable',\n\t\ttd: 'startTagTable',\n\t\tth: 'startTagTable',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inSelectInTable.end_tag_handlers = {\n\t\tcaption: 'endTagTable',\n\t\ttable: 'endTagTable',\n\t\ttbody: 'endTagTable',\n\t\ttfoot: 'endTagTable',\n\t\tthead: 'endTagTable',\n\t\ttr: 'endTagTable',\n\t\ttd: 'endTagTable',\n\t\tth: 'endTagTable',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inSelectInTable.processCharacters = function(data) {\n\t\tmodes.inSelect.processCharacters(data);\n\t};\n\n\tmodes.inSelectInTable.startTagTable = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-table-element-start-tag-in-select-in-table\", {name: name});\n\t\tthis.endTagOther(\"select\");\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inSelectInTable.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inSelect.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inSelectInTable.endTagTable = function(name) {\n\t\ttree.parseError(\"unexpected-table-element-end-tag-in-select-in-table\", {name: name});\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.endTagOther(\"select\");\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t}\n\t};\n\n\tmodes.inSelectInTable.endTagOther = function(name) {\n\t\tmodes.inSelect.processEndTag(name);\n\t};\n\n\tmodes.inRow = Object.create(modes.base);\n\n\tmodes.inRow.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\ttd: 'startTagTableCell',\n\t\tth: 'startTagTableCell',\n\t\tcaption: 'startTagTableOther',\n\t\tcol: 'startTagTableOther',\n\t\tcolgroup: 'startTagTableOther',\n\t\ttbody: 'startTagTableOther',\n\t\ttfoot: 'startTagTableOther',\n\t\tthead: 'startTagTableOther',\n\t\ttr: 'startTagTableOther',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inRow.end_tag_handlers = {\n\t\ttr: 'endTagTr',\n\t\ttable: 'endTagTable',\n\t\ttbody: 'endTagTableRowGroup',\n\t\ttfoot: 'endTagTableRowGroup',\n\t\tthead: 'endTagTableRowGroup',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\tth: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inRow.processCharacters = function(data) {\n\t\tmodes.inTable.processCharacters(data);\n\t};\n\n\tmodes.inRow.startTagTableCell = function(name, attributes) {\n\t\ttree.openElements.popUntilTableRowScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inCell');\n\t\ttree.activeFormattingElements.push(Marker);\n\t};\n\n\tmodes.inRow.startTagTableOther = function(name, attributes) {\n\t\tvar ignoreEndTag = this.ignoreEndTagTr();\n\t\tthis.endTagTr('tr');\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inRow.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inTable.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inRow.endTagTr = function(name) {\n\t\tif (this.ignoreEndTagTr()) {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.openElements.popUntilTableRowScopeMarker();\n\t\t\ttree.popElement();\n\t\t\ttree.setInsertionMode('inTableBody');\n\t\t}\n\t};\n\n\tmodes.inRow.endTagTable = function(name) {\n\t\tvar ignoreEndTag = this.ignoreEndTagTr();\n\t\tthis.endTagTr('tr');\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inRow.endTagTableRowGroup = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.endTagTr('tr');\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inRow.endTagIgnore = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-in-table-row\", {name: name});\n\t};\n\n\tmodes.inRow.endTagOther = function(name) {\n\t\tmodes.inTable.processEndTag(name);\n\t};\n\n\tmodes.inRow.ignoreEndTagTr = function() {\n\t\treturn !tree.openElements.inTableScope('tr');\n\t};\n\n\tmodes.afterAfterFrameset = Object.create(modes.base);\n\n\tmodes.afterAfterFrameset.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tnoframes: 'startTagNoFrames',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.afterAfterFrameset.processEOF = function() {};\n\n\tmodes.afterAfterFrameset.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.afterAfterFrameset.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tvar whitespace = \"\";\n\t\tfor (var i = 0; i < characters.length; i++) {\n\t\t\tvar ch = characters[i];\n\t\t\tif (isWhitespace(ch))\n\t\t\t\twhitespace += ch;\n\t\t}\n\t\tif (whitespace) {\n\t\t\ttree.reconstructActiveFormattingElements();\n\t\t\ttree.insertText(whitespace);\n\t\t}\n\t\tif (whitespace.length < characters.length)\n\t\t\ttree.parseError('expected-eof-but-got-char');\n\t};\n\n\tmodes.afterAfterFrameset.startTagNoFrames = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.afterAfterFrameset.startTagOther = function(name, attributes, selfClosing) {\n\t\ttree.parseError('expected-eof-but-got-start-tag', {name: name});\n\t};\n\n\tmodes.afterAfterFrameset.processEndTag = function(name, attributes) {\n\t\ttree.parseError('expected-eof-but-got-end-tag', {name: name});\n\t};\n\n\tmodes.text = Object.create(modes.base);\n\n\tmodes.text.start_tag_handlers = {\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.text.end_tag_handlers = {\n\t\tscript: 'endTagScript',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.text.processCharacters = function(buffer) {\n\t\tif (tree.shouldSkipLeadingNewline) {\n\t\t\ttree.shouldSkipLeadingNewline = false;\n\t\t\tbuffer.skipAtMostOneLeadingNewline();\n\t\t}\n\t\tvar data = buffer.takeRemaining();\n\t\tif (!data)\n\t\t\treturn;\n\t\ttree.insertText(data);\n\t};\n\n\tmodes.text.processEOF = function() {\n\t\ttree.parseError(\"expected-named-closing-tag-but-got-eof\",\n\t\t\t{name: tree.currentStackItem().localName});\n\t\ttree.openElements.pop();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.text.startTagOther = function(name) {\n\t\tthrow \"Tried to process start tag \" + name + \" in RCDATA/RAWTEXT mode\";\n\t};\n\n\tmodes.text.endTagScript = function(name) {\n\t\tvar node = tree.openElements.pop();\n\t\tassert.ok(node.localName == 'script');\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t};\n\n\tmodes.text.endTagOther = function(name) {\n\t\ttree.openElements.pop();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t};\n}\n\nTreeBuilder.prototype.setInsertionMode = function(name) {\n\tthis.insertionMode = this.insertionModes[name];\n\tthis.insertionModeName = name;\n};\nTreeBuilder.prototype.adoptionAgencyEndTag = function(name) {\n\tvar outerIterationLimit = 8;\n\tvar innerIterationLimit = 3;\n\tvar formattingElement;\n\n\tfunction isActiveFormattingElement(el) {\n\t\treturn el === formattingElement;\n\t}\n\n\tvar outerLoopCounter = 0;\n\n\twhile (outerLoopCounter++ < outerIterationLimit) {\n\t\tformattingElement = this.elementInActiveFormattingElements(name);\n\n\t\tif (!formattingElement || (this.openElements.contains(formattingElement) && !this.openElements.inScope(formattingElement.localName))) {\n\t\t\tthis.parseError('adoption-agency-1.1', {name: name});\n\t\t\treturn false;\n\t\t}\n\t\tif (!this.openElements.contains(formattingElement)) {\n\t\t\tthis.parseError('adoption-agency-1.2', {name: name});\n\t\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\n\t\t\treturn true;\n\t\t}\n\t\tif (!this.openElements.inScope(formattingElement.localName)) {\n\t\t\tthis.parseError('adoption-agency-4.4', {name: name});\n\t\t}\n\n\t\tif (formattingElement != this.currentStackItem()) {\n\t\t\tthis.parseError('adoption-agency-1.3', {name: name});\n\t\t}\n\t\tvar furthestBlock = this.openElements.furthestBlockForFormattingElement(formattingElement.node);\n\n\t\tif (!furthestBlock) {\n\t\t\tthis.openElements.remove_openElements_until(isActiveFormattingElement);\n\t\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\n\t\t\treturn true;\n\t\t}\n\n\t\tvar afeIndex = this.openElements.elements.indexOf(formattingElement);\n\t\tvar commonAncestor = this.openElements.item(afeIndex - 1);\n\n\t\tvar bookmark = this.activeFormattingElements.indexOf(formattingElement);\n\n\t\tvar node = furthestBlock;\n\t\tvar lastNode = furthestBlock;\n\t\tvar index = this.openElements.elements.indexOf(node);\n\n\t\tvar innerLoopCounter = 0;\n\t\twhile (innerLoopCounter++ < innerIterationLimit) {\n\t\t\tindex -= 1;\n\t\t\tnode = this.openElements.item(index);\n\t\t\tif (this.activeFormattingElements.indexOf(node) < 0) {\n\t\t\t\tthis.openElements.elements.splice(index, 1);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (node == formattingElement)\n\t\t\t\tbreak;\n\n\t\t\tif (lastNode == furthestBlock)\n\t\t\t\tbookmark = this.activeFormattingElements.indexOf(node) + 1;\n\n\t\t\tvar clone = this.createElement(node.namespaceURI, node.localName, node.attributes);\n\t\t\tvar newNode = new StackItem(node.namespaceURI, node.localName, node.attributes, clone);\n\n\t\t\tthis.activeFormattingElements[this.activeFormattingElements.indexOf(node)] = newNode;\n\t\t\tthis.openElements.elements[this.openElements.elements.indexOf(node)] = newNode;\n\n\t\t\tnode = newNode;\n\t\t\tthis.detachFromParent(lastNode.node);\n\t\t\tthis.attachNode(lastNode.node, node.node);\n\t\t\tlastNode = node;\n\t\t}\n\n\t\tthis.detachFromParent(lastNode.node);\n\t\tif (commonAncestor.isFosterParenting()) {\n\t\t\tthis.insertIntoFosterParent(lastNode.node);\n\t\t} else {\n\t\t\tthis.attachNode(lastNode.node, commonAncestor.node);\n\t\t}\n\n\t\tvar clone = this.createElement(\"http://www.w3.org/1999/xhtml\", formattingElement.localName, formattingElement.attributes);\n\t\tvar formattingClone = new StackItem(formattingElement.namespaceURI, formattingElement.localName, formattingElement.attributes, clone);\n\n\t\tthis.reparentChildren(furthestBlock.node, clone);\n\t\tthis.attachNode(clone, furthestBlock.node);\n\n\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\n\t\tthis.activeFormattingElements.splice(Math.min(bookmark, this.activeFormattingElements.length), 0, formattingClone);\n\n\t\tthis.openElements.remove(formattingElement);\n\t\tthis.openElements.elements.splice(this.openElements.elements.indexOf(furthestBlock) + 1, 0, formattingClone);\n\t}\n\n\treturn true;\n};\n\nTreeBuilder.prototype.start = function() {\n\tthrow \"Not mplemented\";\n};\n\nTreeBuilder.prototype.startTokenization = function(tokenizer) {\n\tthis.tokenizer = tokenizer;\n\tthis.compatMode = \"no quirks\";\n\tthis.originalInsertionMode = \"initial\";\n\tthis.framesetOk = true;\n\tthis.openElements = new ElementStack();\n\tthis.activeFormattingElements = [];\n\tthis.start();\n\tif (this.context) {\n\n\t\tswitch(this.context) {\n\t\tcase 'title':\n\t\tcase 'textarea':\n\t\t\tthis.tokenizer.setState(Tokenizer.RCDATA);\n\t\t\tbreak;\n\t\tcase 'style':\n\t\tcase 'xmp':\n\t\tcase 'iframe':\n\t\tcase 'noembed':\n\t\tcase 'noframes':\n\t\t\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\n\t\t\tbreak;\n\t\tcase 'script':\n\t\t\tthis.tokenizer.setState(Tokenizer.SCRIPT_DATA);\n\t\t\tbreak;\n\t\tcase 'noscript':\n\t\t\tif (this.scriptingEnabled)\n\t\t\t\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\n\t\t\tbreak;\n\t\tcase 'plaintext':\n\t\t\tthis.tokenizer.setState(Tokenizer.PLAINTEXT);\n\t\t\tbreak;\n\t\t}\n\t\tthis.insertHtmlElement();\n\n\t\tif (this.context === 'head') {\n\t\t\tthis.insertHeadElement();\n\t\t} else {\n\t\t\tthis.insertBodyElement();\n\t\t}\n\n\t\tthis.resetInsertionMode();\n\t} else {\n\t\tthis.setInsertionMode('initial');\n\t}\n};\n\nTreeBuilder.prototype.processToken = function(token) {\n\tthis.selfClosingFlagAcknowledged = false;\n\n\tvar currentNode = this.openElements.top || null;\n\tvar insertionMode;\n\tif (!currentNode || !currentNode.isForeign() ||\n\t\t(currentNode.isMathMLTextIntegrationPoint() &&\n\t\t\t((token.type == 'StartTag' &&\n\t\t\t\t\t!(token.name in {mglyph:0, malignmark:0})) ||\n\t\t\t\t(token.type === 'Characters'))\n\t\t) ||\n\t\t(currentNode.namespaceURI == \"http://www.w3.org/1998/Math/MathML\" &&\n\t\t\tcurrentNode.localName == 'annotation-xml' &&\n\t\t\ttoken.type == 'StartTag' && token.name == 'svg'\n\t\t) ||\n\t\t(currentNode.isHtmlIntegrationPoint() &&\n\t\t\ttoken.type in {StartTag:0, Characters:0}\n\t\t) ||\n\t\ttoken.type == 'EOF'\n\t) {\n\t\tinsertionMode = this.insertionMode;\n\t} else {\n\t\tinsertionMode = this.insertionModes.inForeignContent;\n\t}\n\tswitch(token.type) {\n\tcase 'Characters':\n\t\tvar buffer = new CharacterBuffer(token.data);\n\t\tinsertionMode.processCharacters(buffer);\n\t\tbreak;\n\tcase 'Comment':\n\t\tinsertionMode.processComment(token.data);\n\t\tbreak;\n\tcase 'StartTag':\n\t\tinsertionMode.processStartTag(token.name, token.data, token.selfClosing);\n\t\tbreak;\n\tcase 'EndTag':\n\t\tinsertionMode.processEndTag(token.name);\n\t\tbreak;\n\tcase 'Doctype':\n\t\tinsertionMode.processDoctype(token.name, token.publicId, token.systemId, token.forceQuirks);\n\t\tbreak;\n\tcase 'EOF':\n\t\tinsertionMode.processEOF();\n\t\tbreak;\n\t}\n};\nTreeBuilder.prototype.isCdataSectionAllowed = function() {\n\treturn this.openElements.length > 0 && this.currentStackItem().isForeign();\n};\nTreeBuilder.prototype.isSelfClosingFlagAcknowledged = function() {\n\treturn this.selfClosingFlagAcknowledged;\n};\n\nTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.attachNode = function(child, parent) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.detachFromParent = function(node) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.addAttributesToElement = function(element, attributes) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.insertHtmlElement = function(attributes) {\n\tvar root = this.createElement(\"http://www.w3.org/1999/xhtml\", 'html', attributes);\n\tthis.attachNode(root, this.document);\n\tthis.openElements.pushHtmlElement(new StackItem(\"http://www.w3.org/1999/xhtml\", 'html', attributes, root));\n\treturn root;\n};\n\nTreeBuilder.prototype.insertHeadElement = function(attributes) {\n\tvar element = this.createElement(\"http://www.w3.org/1999/xhtml\", \"head\", attributes);\n\tthis.head = new StackItem(\"http://www.w3.org/1999/xhtml\", \"head\", attributes, element);\n\tthis.attachNode(element, this.openElements.top.node);\n\tthis.openElements.pushHeadElement(this.head);\n\treturn element;\n};\n\nTreeBuilder.prototype.insertBodyElement = function(attributes) {\n\tvar element = this.createElement(\"http://www.w3.org/1999/xhtml\", \"body\", attributes);\n\tthis.attachNode(element, this.openElements.top.node);\n\tthis.openElements.pushBodyElement(new StackItem(\"http://www.w3.org/1999/xhtml\", \"body\", attributes, element));\n\treturn element;\n};\n\nTreeBuilder.prototype.insertIntoFosterParent = function(node) {\n\tvar tableIndex = this.openElements.findIndex('table');\n\tvar tableElement = this.openElements.item(tableIndex).node;\n\tif (tableIndex === 0)\n\t\treturn this.attachNode(node, tableElement);\n\tthis.attachNodeToFosterParent(node, tableElement, this.openElements.item(tableIndex - 1).node);\n};\n\nTreeBuilder.prototype.insertElement = function(name, attributes, namespaceURI, selfClosing) {\n\tif (!namespaceURI)\n\t\tnamespaceURI = \"http://www.w3.org/1999/xhtml\";\n\tvar element = this.createElement(namespaceURI, name, attributes);\n\tif (this.shouldFosterParent())\n\t\tthis.insertIntoFosterParent(element);\n\telse\n\t\tthis.attachNode(element, this.openElements.top.node);\n\tif (!selfClosing)\n\t\tthis.openElements.push(new StackItem(namespaceURI, name, attributes, element));\n};\n\nTreeBuilder.prototype.insertFormattingElement = function(name, attributes) {\n\tthis.insertElement(name, attributes, \"http://www.w3.org/1999/xhtml\");\n\tthis.appendElementToActiveFormattingElements(this.currentStackItem());\n};\n\nTreeBuilder.prototype.insertSelfClosingElement = function(name, attributes) {\n\tthis.selfClosingFlagAcknowledged = true;\n\tthis.insertElement(name, attributes, \"http://www.w3.org/1999/xhtml\", true);\n};\n\nTreeBuilder.prototype.insertForeignElement = function(name, attributes, namespaceURI, selfClosing) {\n\tif (selfClosing)\n\t\tthis.selfClosingFlagAcknowledged = true;\n\tthis.insertElement(name, attributes, namespaceURI, selfClosing);\n};\n\nTreeBuilder.prototype.insertComment = function(data, parent) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.insertText = function(data) {\n\tthrow new Error(\"Not implemented\");\n};\nTreeBuilder.prototype.currentStackItem = function() {\n\treturn this.openElements.top;\n};\nTreeBuilder.prototype.popElement = function() {\n\treturn this.openElements.pop();\n};\nTreeBuilder.prototype.shouldFosterParent = function() {\n\treturn this.redirectAttachToFosterParent && this.currentStackItem().isFosterParenting();\n};\nTreeBuilder.prototype.generateImpliedEndTags = function(exclude) {\n\tvar name = this.openElements.top.localName;\n\tif (['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'].indexOf(name) != -1 && name != exclude) {\n\t\tthis.popElement();\n\t\tthis.generateImpliedEndTags(exclude);\n\t}\n};\nTreeBuilder.prototype.reconstructActiveFormattingElements = function() {\n\tif (this.activeFormattingElements.length === 0)\n\t\treturn;\n\tvar i = this.activeFormattingElements.length - 1;\n\tvar entry = this.activeFormattingElements[i];\n\tif (entry == Marker || this.openElements.contains(entry))\n\t\treturn;\n\n\twhile (entry != Marker && !this.openElements.contains(entry)) {\n\t\ti -= 1;\n\t\tentry = this.activeFormattingElements[i];\n\t\tif (!entry)\n\t\t\tbreak;\n\t}\n\n\twhile (true) {\n\t\ti += 1;\n\t\tentry = this.activeFormattingElements[i];\n\t\tthis.insertElement(entry.localName, entry.attributes);\n\t\tvar element = this.currentStackItem();\n\t\tthis.activeFormattingElements[i] = element;\n\t\tif (element == this.activeFormattingElements[this.activeFormattingElements.length -1])\n\t\t\tbreak;\n\t}\n\n};\nTreeBuilder.prototype.ensureNoahsArkCondition = function(item) {\n\tvar kNoahsArkCapacity = 3;\n\tif (this.activeFormattingElements.length < kNoahsArkCapacity)\n\t\treturn;\n\tvar candidates = [];\n\tvar newItemAttributeCount = item.attributes.length;\n\tfor (var i = this.activeFormattingElements.length - 1; i >= 0; i--) {\n\t\tvar candidate = this.activeFormattingElements[i];\n\t\tif (candidate === Marker)\n\t\t\tbreak;\n\t\tif (item.localName !== candidate.localName || item.namespaceURI !== candidate.namespaceURI)\n\t\t\tcontinue;\n\t\tif (candidate.attributes.length != newItemAttributeCount)\n\t\t\tcontinue;\n\t\tcandidates.push(candidate);\n\t}\n\tif (candidates.length < kNoahsArkCapacity)\n\t\treturn;\n\n\tvar remainingCandidates = [];\n\tvar attributes = item.attributes;\n\tfor (var i = 0; i < attributes.length; i++) {\n\t\tvar attribute = attributes[i];\n\n\t\tfor (var j = 0; j < candidates.length; j++) {\n\t\t\tvar candidate = candidates[j];\n\t\t\tvar candidateAttribute = getAttribute(candidate, attribute.nodeName);\n\t\t\tif (candidateAttribute && candidateAttribute.nodeValue === attribute.nodeValue)\n\t\t\t\tremainingCandidates.push(candidate);\n\t\t}\n\t\tif (remainingCandidates.length < kNoahsArkCapacity)\n\t\t\treturn;\n\t\tcandidates = remainingCandidates;\n\t\tremainingCandidates = [];\n\t}\n\tfor (var i = kNoahsArkCapacity - 1; i < candidates.length; i++)\n\t\tthis.removeElementFromActiveFormattingElements(candidates[i]);\n};\nTreeBuilder.prototype.appendElementToActiveFormattingElements = function(item) {\n\tthis.ensureNoahsArkCondition(item);\n\tthis.activeFormattingElements.push(item);\n};\nTreeBuilder.prototype.removeElementFromActiveFormattingElements = function(item) {\n\tvar index = this.activeFormattingElements.indexOf(item);\n\tif (index >= 0)\n\t\tthis.activeFormattingElements.splice(index, 1);\n};\n\nTreeBuilder.prototype.elementInActiveFormattingElements = function(name) {\n\tvar els = this.activeFormattingElements;\n\tfor (var i = els.length - 1; i >= 0; i--) {\n\t\tif (els[i] == Marker) break;\n\t\tif (els[i].localName == name) return els[i];\n\t}\n\treturn false;\n};\n\nTreeBuilder.prototype.clearActiveFormattingElements = function() {\n    while (!(this.activeFormattingElements.length === 0 || this.activeFormattingElements.pop() == Marker));\n};\n\nTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) {\n\tthrow new Error(\"Not implemented\");\n};\nTreeBuilder.prototype.setFragmentContext = function(context) {\n\tthis.context = context;\n};\nTreeBuilder.prototype.parseError = function(code, args) {\n\tif (!this.errorHandler)\n\t\treturn;\n\tvar message = formatMessage(messages[code], args);\n\tthis.errorHandler.error(message, this.tokenizer._inputStream.location(), code);\n};\nTreeBuilder.prototype.resetInsertionMode = function() {\n\tvar fragmentAssigned = false;\n\tvar node = null;\n\tfor (var i = this.openElements.length - 1; i >= 0; i--) {\n\t\tnode = this.openElements.item(i);\n\t\tif (i === 0) {\n\t\t\tassert.ok(this.context);\n\t\t\tfragmentAssigned = true;\n\t\t\tnode = new StackItem(\"http://www.w3.org/1999/xhtml\", this.context, [], null);\n\t\t}\n\n\t\tif (node.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\t\tif (node.localName === 'select')\n\t\t\t\treturn this.setInsertionMode('inSelect');\n\t\t\tif (node.localName === 'td' || node.localName === 'th')\n\t\t\t\treturn this.setInsertionMode('inCell');\n\t\t\tif (node.localName === 'tr')\n\t\t\t\treturn this.setInsertionMode('inRow');\n\t\t\tif (node.localName === 'tbody' || node.localName === 'thead' || node.localName === 'tfoot')\n\t\t\t\treturn this.setInsertionMode('inTableBody');\n\t\t\tif (node.localName === 'caption')\n\t\t\t\treturn this.setInsertionMode('inCaption');\n\t\t\tif (node.localName === 'colgroup')\n\t\t\t\treturn this.setInsertionMode('inColumnGroup');\n\t\t\tif (node.localName === 'table')\n\t\t\t\treturn this.setInsertionMode('inTable');\n\t\t\tif (node.localName === 'head')\n\t\t\t\treturn this.setInsertionMode('inHead');\n\t\t\tif (node.localName === 'body')\n\t\t\t\treturn this.setInsertionMode('inBody');\n\t\t\tif (node.localName === 'frameset')\n\t\t\t\treturn this.setInsertionMode('inFrameset');\n\t\t\tif (node.localName === 'html')\n\t\t\t\tif (!this.openElements.headElement)\n\t\t\t\t\treturn this.setInsertionMode('beforeHead');\n\t\t\t\telse\n\t\t\t\t\treturn this.setInsertionMode('afterHead');\n\t\t}\n\n\t\tif (fragmentAssigned)\n\t\t\treturn this.setInsertionMode('inBody');\n\t}\n};\n\nTreeBuilder.prototype.processGenericRCDATAStartTag = function(name, attributes) {\n\tthis.insertElement(name, attributes);\n\tthis.tokenizer.setState(Tokenizer.RCDATA);\n\tthis.originalInsertionMode = this.insertionModeName;\n\tthis.setInsertionMode('text');\n};\n\nTreeBuilder.prototype.processGenericRawTextStartTag = function(name, attributes) {\n\tthis.insertElement(name, attributes);\n\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\n\tthis.originalInsertionMode = this.insertionModeName;\n\tthis.setInsertionMode('text');\n};\n\nTreeBuilder.prototype.adjustMathMLAttributes = function(attributes) {\n\tattributes.forEach(function(a) {\n\t\ta.namespaceURI = \"http://www.w3.org/1998/Math/MathML\";\n\t\tif (constants.MATHMLAttributeMap[a.nodeName])\n\t\t\ta.nodeName = constants.MATHMLAttributeMap[a.nodeName];\n\t});\n\treturn attributes;\n};\n\nTreeBuilder.prototype.adjustSVGTagNameCase = function(name) {\n\treturn constants.SVGTagMap[name] || name;\n};\n\nTreeBuilder.prototype.adjustSVGAttributes = function(attributes) {\n\tattributes.forEach(function(a) {\n\t\ta.namespaceURI = \"http://www.w3.org/2000/svg\";\n\t\tif (constants.SVGAttributeMap[a.nodeName])\n\t\t\ta.nodeName = constants.SVGAttributeMap[a.nodeName];\n\t});\n\treturn attributes;\n};\n\nTreeBuilder.prototype.adjustForeignAttributes = function(attributes) {\n\tfor (var i = 0; i < attributes.length; i++) {\n\t\tvar attribute = attributes[i];\n\t\tvar adjusted = constants.ForeignAttributeMap[attribute.nodeName];\n\t\tif (adjusted) {\n\t\t\tattribute.nodeName = adjusted.localName;\n\t\t\tattribute.prefix = adjusted.prefix;\n\t\t\tattribute.namespaceURI = adjusted.namespaceURI;\n\t\t}\n\t}\n\treturn attributes;\n};\n\nfunction formatMessage(format, args) {\n\treturn format.replace(new RegExp('{[0-9a-z-]+}', 'gi'), function(match) {\n\t\treturn args[match.slice(1, -1)] || match;\n\t});\n}\n\nexports.TreeBuilder = TreeBuilder;\n\n},\n{\"./ElementStack\":1,\"./StackItem\":4,\"./Tokenizer\":5,\"./constants\":7,\"./messages.json\":8,\"assert\":13,\"events\":16}],\n7:[function(_dereq_,module,exports){\nexports.SVGTagMap = {\n\t\"altglyph\": \"altGlyph\",\n\t\"altglyphdef\": \"altGlyphDef\",\n\t\"altglyphitem\": \"altGlyphItem\",\n\t\"animatecolor\": \"animateColor\",\n\t\"animatemotion\": \"animateMotion\",\n\t\"animatetransform\": \"animateTransform\",\n\t\"clippath\": \"clipPath\",\n\t\"feblend\": \"feBlend\",\n\t\"fecolormatrix\": \"feColorMatrix\",\n\t\"fecomponenttransfer\": \"feComponentTransfer\",\n\t\"fecomposite\": \"feComposite\",\n\t\"feconvolvematrix\": \"feConvolveMatrix\",\n\t\"fediffuselighting\": \"feDiffuseLighting\",\n\t\"fedisplacementmap\": \"feDisplacementMap\",\n\t\"fedistantlight\": \"feDistantLight\",\n\t\"feflood\": \"feFlood\",\n\t\"fefunca\": \"feFuncA\",\n\t\"fefuncb\": \"feFuncB\",\n\t\"fefuncg\": \"feFuncG\",\n\t\"fefuncr\": \"feFuncR\",\n\t\"fegaussianblur\": \"feGaussianBlur\",\n\t\"feimage\": \"feImage\",\n\t\"femerge\": \"feMerge\",\n\t\"femergenode\": \"feMergeNode\",\n\t\"femorphology\": \"feMorphology\",\n\t\"feoffset\": \"feOffset\",\n\t\"fepointlight\": \"fePointLight\",\n\t\"fespecularlighting\": \"feSpecularLighting\",\n\t\"fespotlight\": \"feSpotLight\",\n\t\"fetile\": \"feTile\",\n\t\"feturbulence\": \"feTurbulence\",\n\t\"foreignobject\": \"foreignObject\",\n\t\"glyphref\": \"glyphRef\",\n\t\"lineargradient\": \"linearGradient\",\n\t\"radialgradient\": \"radialGradient\",\n\t\"textpath\": \"textPath\"\n};\n\nexports.MATHMLAttributeMap = {\n\tdefinitionurl: 'definitionURL'\n};\n\nexports.SVGAttributeMap = {\n\tattributename:\t'attributeName',\n\tattributetype:\t'attributeType',\n\tbasefrequency:\t'baseFrequency',\n\tbaseprofile:\t'baseProfile',\n\tcalcmode:\t'calcMode',\n\tclippathunits:\t'clipPathUnits',\n\tcontentscripttype:\t'contentScriptType',\n\tcontentstyletype:\t'contentStyleType',\n\tdiffuseconstant:\t'diffuseConstant',\n\tedgemode:\t'edgeMode',\n\texternalresourcesrequired:\t'externalResourcesRequired',\n\tfilterres:\t'filterRes',\n\tfilterunits:\t'filterUnits',\n\tglyphref:\t'glyphRef',\n\tgradienttransform:\t'gradientTransform',\n\tgradientunits:\t'gradientUnits',\n\tkernelmatrix:\t'kernelMatrix',\n\tkernelunitlength:\t'kernelUnitLength',\n\tkeypoints:\t'keyPoints',\n\tkeysplines:\t'keySplines',\n\tkeytimes:\t'keyTimes',\n\tlengthadjust:\t'lengthAdjust',\n\tlimitingconeangle:\t'limitingConeAngle',\n\tmarkerheight:\t'markerHeight',\n\tmarkerunits:\t'markerUnits',\n\tmarkerwidth:\t'markerWidth',\n\tmaskcontentunits:\t'maskContentUnits',\n\tmaskunits:\t'maskUnits',\n\tnumoctaves:\t'numOctaves',\n\tpathlength:\t'pathLength',\n\tpatterncontentunits:\t'patternContentUnits',\n\tpatterntransform:\t'patternTransform',\n\tpatternunits:\t'patternUnits',\n\tpointsatx:\t'pointsAtX',\n\tpointsaty:\t'pointsAtY',\n\tpointsatz:\t'pointsAtZ',\n\tpreservealpha:\t'preserveAlpha',\n\tpreserveaspectratio:\t'preserveAspectRatio',\n\tprimitiveunits:\t'primitiveUnits',\n\trefx:\t'refX',\n\trefy:\t'refY',\n\trepeatcount:\t'repeatCount',\n\trepeatdur:\t'repeatDur',\n\trequiredextensions:\t'requiredExtensions',\n\trequiredfeatures:\t'requiredFeatures',\n\tspecularconstant:\t'specularConstant',\n\tspecularexponent:\t'specularExponent',\n\tspreadmethod:\t'spreadMethod',\n\tstartoffset:\t'startOffset',\n\tstddeviation:\t'stdDeviation',\n\tstitchtiles:\t'stitchTiles',\n\tsurfacescale:\t'surfaceScale',\n\tsystemlanguage:\t'systemLanguage',\n\ttablevalues:\t'tableValues',\n\ttargetx:\t'targetX',\n\ttargety:\t'targetY',\n\ttextlength:\t'textLength',\n\tviewbox:\t'viewBox',\n\tviewtarget:\t'viewTarget',\n\txchannelselector:\t'xChannelSelector',\n\tychannelselector:\t'yChannelSelector',\n\tzoomandpan:\t'zoomAndPan'\n};\n\nexports.ForeignAttributeMap = {\n\t\"xlink:actuate\": {prefix: \"xlink\", localName: \"actuate\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:arcrole\": {prefix: \"xlink\", localName: \"arcrole\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:href\": {prefix: \"xlink\", localName: \"href\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:role\": {prefix: \"xlink\", localName: \"role\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:show\": {prefix: \"xlink\", localName: \"show\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:title\": {prefix: \"xlink\", localName: \"title\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:type\": {prefix: \"xlink\", localName: \"title\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xml:base\": {prefix: \"xml\", localName: \"base\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xml:lang\": {prefix: \"xml\", localName: \"lang\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xml:space\": {prefix: \"xml\", localName: \"space\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xmlns\": {prefix: null, localName: \"xmlns\", namespaceURI: \"http://www.w3.org/2000/xmlns/\"},\n\t\"xmlns:xlink\": {prefix: \"xmlns\", localName: \"xlink\", namespaceURI: \"http://www.w3.org/2000/xmlns/\"},\n};\n},\n{}],\n8:[function(_dereq_,module,exports){\nmodule.exports={\n\t\"null-character\":\n\t\t\"Null character in input stream, replaced with U+FFFD.\",\n\t\"invalid-codepoint\":\n\t\t\"Invalid codepoint in stream\",\n\t\"incorrectly-placed-solidus\":\n\t\t\"Solidus (/) incorrectly placed in tag.\",\n\t\"incorrect-cr-newline-entity\":\n\t\t\"Incorrect CR newline entity, replaced with LF.\",\n\t\"illegal-windows-1252-entity\":\n\t\t\"Entity used with illegal number (windows-1252 reference).\",\n\t\"cant-convert-numeric-entity\":\n\t\t\"Numeric entity couldn't be converted to character (codepoint U+{charAsInt}).\",\n\t\"invalid-numeric-entity-replaced\":\n\t\t\"Numeric entity represents an illegal codepoint. Expanded to the C1 controls range.\",\n\t\"numeric-entity-without-semicolon\":\n\t\t\"Numeric entity didn't end with ';'.\",\n\t\"expected-numeric-entity-but-got-eof\":\n\t\t\"Numeric entity expected. Got end of file instead.\",\n\t\"expected-numeric-entity\":\n\t\t\"Numeric entity expected but none found.\",\n\t\"named-entity-without-semicolon\":\n\t\t\"Named entity didn't end with ';'.\",\n\t\"expected-named-entity\":\n\t\t\"Named entity expected. Got none.\",\n\t\"attributes-in-end-tag\":\n\t\t\"End tag contains unexpected attributes.\",\n\t\"self-closing-flag-on-end-tag\":\n\t\t\"End tag contains unexpected self-closing flag.\",\n\t\"bare-less-than-sign-at-eof\":\n\t\t\"End of file after <.\",\n\t\"expected-tag-name-but-got-right-bracket\":\n\t\t\"Expected tag name. Got '>' instead.\",\n\t\"expected-tag-name-but-got-question-mark\":\n\t\t\"Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)\",\n\t\"expected-tag-name\":\n\t\t\"Expected tag name. Got something else instead.\",\n\t\"expected-closing-tag-but-got-right-bracket\":\n\t\t\"Expected closing tag. Got '>' instead. Ignoring '</>'.\",\n\t\"expected-closing-tag-but-got-eof\":\n\t\t\"Expected closing tag. Unexpected end of file.\",\n\t\"expected-closing-tag-but-got-char\":\n\t\t\"Expected closing tag. Unexpected character '{data}' found.\",\n\t\"eof-in-tag-name\":\n\t\t\"Unexpected end of file in the tag name.\",\n\t\"expected-attribute-name-but-got-eof\":\n\t\t\"Unexpected end of file. Expected attribute name instead.\",\n\t\"eof-in-attribute-name\":\n\t\t\"Unexpected end of file in attribute name.\",\n\t\"invalid-character-in-attribute-name\":\n\t\t\"Invalid character in attribute name.\",\n\t\"duplicate-attribute\":\n\t\t\"Dropped duplicate attribute '{name}' on tag.\",\n\t\"expected-end-of-tag-but-got-eof\":\n\t\t\"Unexpected end of file. Expected = or end of tag.\",\n\t\"expected-attribute-value-but-got-eof\":\n\t\t\"Unexpected end of file. Expected attribute value.\",\n\t\"expected-attribute-value-but-got-right-bracket\":\n\t\t\"Expected attribute value. Got '>' instead.\",\n\t\"unexpected-character-in-unquoted-attribute-value\":\n\t\t\"Unexpected character in unquoted attribute\",\n\t\"invalid-character-after-attribute-name\":\n\t\t\"Unexpected character after attribute name.\",\n\t\"unexpected-character-after-attribute-value\":\n\t\t\"Unexpected character after attribute value.\",\n\t\"eof-in-attribute-value-double-quote\":\n\t\t\"Unexpected end of file in attribute value (\\\").\",\n\t\"eof-in-attribute-value-single-quote\":\n\t\t\"Unexpected end of file in attribute value (').\",\n\t\"eof-in-attribute-value-no-quotes\":\n\t\t\"Unexpected end of file in attribute value.\",\n\t\"eof-after-attribute-value\":\n\t\t\"Unexpected end of file after attribute value.\",\n\t\"unexpected-eof-after-solidus-in-tag\":\n\t\t\"Unexpected end of file in tag. Expected >.\",\n\t\"unexpected-character-after-solidus-in-tag\":\n\t\t\"Unexpected character after / in tag. Expected >.\",\n\t\"expected-dashes-or-doctype\":\n\t\t\"Expected '--' or 'DOCTYPE'. Not found.\",\n\t\"unexpected-bang-after-double-dash-in-comment\":\n\t\t\"Unexpected ! after -- in comment.\",\n\t\"incorrect-comment\":\n\t\t\"Incorrect comment.\",\n\t\"eof-in-comment\":\n\t\t\"Unexpected end of file in comment.\",\n\t\"eof-in-comment-end-dash\":\n\t\t\"Unexpected end of file in comment (-).\",\n\t\"unexpected-dash-after-double-dash-in-comment\":\n\t\t\"Unexpected '-' after '--' found in comment.\",\n\t\"eof-in-comment-double-dash\":\n\t\t\"Unexpected end of file in comment (--).\",\n\t\"eof-in-comment-end-bang-state\":\n\t\t\"Unexpected end of file in comment.\",\n\t\"unexpected-char-in-comment\":\n\t\t\"Unexpected character in comment found.\",\n\t\"need-space-after-doctype\":\n\t\t\"No space after literal string 'DOCTYPE'.\",\n\t\"expected-doctype-name-but-got-right-bracket\":\n\t\t\"Unexpected > character. Expected DOCTYPE name.\",\n\t\"expected-doctype-name-but-got-eof\":\n\t\t\"Unexpected end of file. Expected DOCTYPE name.\",\n\t\"eof-in-doctype-name\":\n\t\t\"Unexpected end of file in DOCTYPE name.\",\n\t\"eof-in-doctype\":\n\t\t\"Unexpected end of file in DOCTYPE.\",\n\t\"expected-space-or-right-bracket-in-doctype\":\n\t\t\"Expected space or '>'. Got '{data}'.\",\n\t\"unexpected-end-of-doctype\":\n\t\t\"Unexpected end of DOCTYPE.\",\n\t\"unexpected-char-in-doctype\":\n\t\t\"Unexpected character in DOCTYPE.\",\n\t\"eof-in-bogus-doctype\":\n\t\t\"Unexpected end of file in bogus doctype.\",\n\t\"eof-in-innerhtml\":\n\t\t\"Unexpected EOF in inner html mode.\",\n\t\"unexpected-doctype\":\n\t\t\"Unexpected DOCTYPE. Ignored.\",\n\t\"non-html-root\":\n\t\t\"html needs to be the first start tag.\",\n\t\"expected-doctype-but-got-eof\":\n\t\t\"Unexpected End of file. Expected DOCTYPE.\",\n\t\"unknown-doctype\":\n\t\t\"Erroneous DOCTYPE. Expected <!DOCTYPE html>.\",\n\t\"quirky-doctype\":\n\t\t\"Quirky doctype. Expected <!DOCTYPE html>.\",\n\t\"almost-standards-doctype\":\n\t\t\"Almost standards mode doctype. Expected <!DOCTYPE html>.\",\n\t\"obsolete-doctype\":\n\t\t\"Obsolete doctype. Expected <!DOCTYPE html>.\",\n\t\"expected-doctype-but-got-chars\":\n\t\t\"Non-space characters found without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\n\t\"expected-doctype-but-got-start-tag\":\n\t\t\"Start tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\n\t\"expected-doctype-but-got-end-tag\":\n\t\t\"End tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\n\t\"end-tag-after-implied-root\":\n\t\t\"Unexpected end tag ({name}) after the (implied) root element.\",\n\t\"expected-named-closing-tag-but-got-eof\":\n\t\t\"Unexpected end of file. Expected end tag ({name}).\",\n\t\"two-heads-are-not-better-than-one\":\n\t\t\"Unexpected start tag head in existing head. Ignored.\",\n\t\"unexpected-end-tag\":\n\t\t\"Unexpected end tag ({name}). Ignored.\",\n\t\"unexpected-implied-end-tag\":\n\t\t\"End tag {name} implied, but there were open elements.\",\n\t\"unexpected-start-tag-out-of-my-head\":\n\t\t\"Unexpected start tag ({name}) that can be in head. Moved.\",\n\t\"unexpected-start-tag\":\n\t\t\"Unexpected start tag ({name}).\",\n\t\"missing-end-tag\":\n\t\t\"Missing end tag ({name}).\",\n\t\"missing-end-tags\":\n\t\t\"Missing end tags ({name}).\",\n\t\"unexpected-start-tag-implies-end-tag\":\n\t\t\"Unexpected start tag ({startName}) implies end tag ({endName}).\",\n\t\"unexpected-start-tag-treated-as\":\n\t\t\"Unexpected start tag ({originalName}). Treated as {newName}.\",\n\t\"deprecated-tag\":\n\t\t\"Unexpected start tag {name}. Don't use it!\",\n\t\"unexpected-start-tag-ignored\":\n\t\t\"Unexpected start tag {name}. Ignored.\",\n\t\"expected-one-end-tag-but-got-another\":\n\t\t\"Unexpected end tag ({gotName}). Missing end tag ({expectedName}).\",\n\t\"end-tag-too-early\":\n\t\t\"End tag ({name}) seen too early. Expected other end tag.\",\n\t\"end-tag-too-early-named\":\n\t\t\"Unexpected end tag ({gotName}). Expected end tag ({expectedName}.\",\n\t\"end-tag-too-early-ignored\":\n\t\t\"End tag ({name}) seen too early. Ignored.\",\n\t\"adoption-agency-1.1\":\n\t\t\"End tag ({name}) violates step 1, paragraph 1 of the adoption agency algorithm.\",\n\t\"adoption-agency-1.2\":\n\t\t\"End tag ({name}) violates step 1, paragraph 2 of the adoption agency algorithm.\",\n\t\"adoption-agency-1.3\":\n\t\t\"End tag ({name}) violates step 1, paragraph 3 of the adoption agency algorithm.\",\n\t\"adoption-agency-4.4\":\n\t\t\"End tag ({name}) violates step 4, paragraph 4 of the adoption agency algorithm.\",\n\t\"unexpected-end-tag-treated-as\":\n\t\t\"Unexpected end tag ({originalName}). Treated as {newName}.\",\n\t\"no-end-tag\":\n\t\t\"This element ({name}) has no end tag.\",\n\t\"unexpected-implied-end-tag-in-table\":\n\t\t\"Unexpected implied end tag ({name}) in the table phase.\",\n\t\"unexpected-implied-end-tag-in-table-body\":\n\t\t\"Unexpected implied end tag ({name}) in the table body phase.\",\n\t\"unexpected-char-implies-table-voodoo\":\n\t\t\"Unexpected non-space characters in table context caused voodoo mode.\",\n\t\"unexpected-hidden-input-in-table\":\n\t\t\"Unexpected input with type hidden in table context.\",\n\t\"unexpected-form-in-table\":\n\t\t\"Unexpected form in table context.\",\n\t\"unexpected-start-tag-implies-table-voodoo\":\n\t\t\"Unexpected start tag ({name}) in table context caused voodoo mode.\",\n\t\"unexpected-end-tag-implies-table-voodoo\":\n\t\t\"Unexpected end tag ({name}) in table context caused voodoo mode.\",\n\t\"unexpected-cell-in-table-body\":\n\t\t\"Unexpected table cell start tag ({name}) in the table body phase.\",\n\t\"unexpected-cell-end-tag\":\n\t\t\"Got table cell end tag ({name}) while required end tags are missing.\",\n\t\"unexpected-end-tag-in-table-body\":\n\t\t\"Unexpected end tag ({name}) in the table body phase. Ignored.\",\n\t\"unexpected-implied-end-tag-in-table-row\":\n\t\t\"Unexpected implied end tag ({name}) in the table row phase.\",\n\t\"unexpected-end-tag-in-table-row\":\n\t\t\"Unexpected end tag ({name}) in the table row phase. Ignored.\",\n\t\"unexpected-select-in-select\":\n\t\t\"Unexpected select start tag in the select phase treated as select end tag.\",\n\t\"unexpected-input-in-select\":\n\t\t\"Unexpected input start tag in the select phase.\",\n\t\"unexpected-start-tag-in-select\":\n\t\t\"Unexpected start tag token ({name}) in the select phase. Ignored.\",\n\t\"unexpected-end-tag-in-select\":\n\t\t\"Unexpected end tag ({name}) in the select phase. Ignored.\",\n\t\"unexpected-table-element-start-tag-in-select-in-table\":\n\t\t\"Unexpected table element start tag ({name}) in the select in table phase.\",\n\t\"unexpected-table-element-end-tag-in-select-in-table\":\n\t\t\"Unexpected table element end tag ({name}) in the select in table phase.\",\n\t\"unexpected-char-after-body\":\n\t\t\"Unexpected non-space characters in the after body phase.\",\n\t\"unexpected-start-tag-after-body\":\n\t\t\"Unexpected start tag token ({name}) in the after body phase.\",\n\t\"unexpected-end-tag-after-body\":\n\t\t\"Unexpected end tag token ({name}) in the after body phase.\",\n\t\"unexpected-char-in-frameset\":\n\t\t\"Unepxected characters in the frameset phase. Characters ignored.\",\n\t\"unexpected-start-tag-in-frameset\":\n\t\t\"Unexpected start tag token ({name}) in the frameset phase. Ignored.\",\n\t\"unexpected-frameset-in-frameset-innerhtml\":\n\t\t\"Unexpected end tag token (frameset in the frameset phase (innerHTML).\",\n\t\"unexpected-end-tag-in-frameset\":\n\t\t\"Unexpected end tag token ({name}) in the frameset phase. Ignored.\",\n\t\"unexpected-char-after-frameset\":\n\t\t\"Unexpected non-space characters in the after frameset phase. Ignored.\",\n\t\"unexpected-start-tag-after-frameset\":\n\t\t\"Unexpected start tag ({name}) in the after frameset phase. Ignored.\",\n\t\"unexpected-end-tag-after-frameset\":\n\t\t\"Unexpected end tag ({name}) in the after frameset phase. Ignored.\",\n\t\"expected-eof-but-got-char\":\n\t\t\"Unexpected non-space characters. Expected end of file.\",\n\t\"expected-eof-but-got-start-tag\":\n\t\t\"Unexpected start tag ({name}). Expected end of file.\",\n\t\"expected-eof-but-got-end-tag\":\n\t\t\"Unexpected end tag ({name}). Expected end of file.\",\n\t\"unexpected-end-table-in-caption\":\n\t\t\"Unexpected end table tag in caption. Generates implied end caption.\",\n\t\"end-html-in-innerhtml\": \n\t\t\"Unexpected html end tag in inner html mode.\",\n\t\"eof-in-table\":\n\t\t\"Unexpected end of file. Expected table content.\",\n\t\"eof-in-script\":\n\t\t\"Unexpected end of file. Expected script content.\",\n\t\"non-void-element-with-trailing-solidus\":\n\t\t\"Trailing solidus not allowed on element {name}.\",\n\t\"unexpected-html-element-in-foreign-content\":\n\t\t\"HTML start tag \\\"{name}\\\" in a foreign namespace context.\",\n\t\"unexpected-start-tag-in-table\":\n\t\t\"Unexpected {name}. Expected table content.\"\n}\n},\n{}],\n9:[function(_dereq_,module,exports){\nvar SAXTreeBuilder = _dereq_('./SAXTreeBuilder').SAXTreeBuilder;\nvar Tokenizer = _dereq_('../Tokenizer').Tokenizer;\nvar TreeParser = _dereq_('./TreeParser').TreeParser;\n\nfunction SAXParser() {\n\tthis.contentHandler = null;\n\tthis._errorHandler = null;\n\tthis._treeBuilder = new SAXTreeBuilder();\n\tthis._tokenizer = new Tokenizer(this._treeBuilder);\n\tthis._scriptingEnabled = false;\n}\n\nSAXParser.prototype.parse = function(source, context) {\n\tif (context) {\n\t\tthis._treeBuilder.setFragmentContext(context);\n\t}\n\tthis._tokenizer.tokenize(source);\n\tvar document = this._treeBuilder.document;\n\tif (document) {\n\t\tnew TreeParser(this.contentHandler).parse(document);\n\t}\n};\n\nSAXParser.prototype.parseFragment = function(source, context) {\n\tthis._treeBuilder.setFragmentContext(context);\n\tthis._tokenizer.tokenize(source);\n\tvar fragment = this._treeBuilder.getFragment();\n\tif (fragment) {\n\t\tnew TreeParser(this.contentHandler).parse(fragment);\n\t}\n};\n\nObject.defineProperty(SAXParser.prototype, 'scriptingEnabled', {\n\tget: function() {\n\t\treturn this._scriptingEnabled;\n\t},\n\tset: function(value) {\n\t\tthis._scriptingEnabled = value;\n\t\tthis._treeBuilder.scriptingEnabled = value;\n\t}\n});\n\nObject.defineProperty(SAXParser.prototype, 'errorHandler', {\n\tget: function() {\n\t\treturn this._errorHandler;\n\t},\n\tset: function(value) {\n\t\tthis._errorHandler = value;\n\t\tthis._treeBuilder.errorHandler = value;\n\t}\n});\n\nexports.SAXParser = SAXParser;\n\n},\n{\"../Tokenizer\":5,\"./SAXTreeBuilder\":10,\"./TreeParser\":11}],\n10:[function(_dereq_,module,exports){\nvar util = _dereq_('util');\nvar TreeBuilder = _dereq_('../TreeBuilder').TreeBuilder;\n\nfunction SAXTreeBuilder() {\n\tTreeBuilder.call(this);\n}\n\nutil.inherits(SAXTreeBuilder, TreeBuilder);\n\nSAXTreeBuilder.prototype.start = function(tokenizer) {\n\tthis.document = new Document(this.tokenizer);\n};\n\nSAXTreeBuilder.prototype.end = function() {\n\tthis.document.endLocator = this.tokenizer;\n};\n\nSAXTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) {\n\tvar doctype = new DTD(this.tokenizer, name, publicId, systemId);\n\tdoctype.endLocator = this.tokenizer;\n\tthis.document.appendChild(doctype);\n};\n\nSAXTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) {\n\tvar element = new Element(this.tokenizer, namespaceURI, localName, localName, attributes || []);\n\treturn element;\n};\n\nSAXTreeBuilder.prototype.insertComment = function(data, parent) {\n\tif (!parent)\n\t\tparent = this.currentStackItem();\n\tvar comment = new Comment(this.tokenizer, data);\n\tparent.appendChild(comment);\n};\n\nSAXTreeBuilder.prototype.appendCharacters = function(parent, data) {\n\tvar text = new Characters(this.tokenizer, data);\n\tparent.appendChild(text);\n};\n\nSAXTreeBuilder.prototype.insertText = function(data) {\n\tif (this.redirectAttachToFosterParent && this.openElements.top.isFosterParenting()) {\n\t\tvar tableIndex = this.openElements.findIndex('table');\n\t\tvar tableItem = this.openElements.item(tableIndex);\n\t\tvar table = tableItem.node;\n\t\tif (tableIndex === 0) {\n\t\t\treturn this.appendCharacters(table, data);\n\t\t}\n\t\tvar text = new Characters(this.tokenizer, data);\n\t\tvar parent = table.parentNode;\n\t\tif (parent) {\n\t\t\tparent.insertBetween(text, table.previousSibling, table);\n\t\t\treturn;\n\t\t}\n\t\tvar stackParent = this.openElements.item(tableIndex - 1).node;\n\t\tstackParent.appendChild(text);\n\t\treturn;\n\t}\n\tthis.appendCharacters(this.currentStackItem().node, data);\n};\n\nSAXTreeBuilder.prototype.attachNode = function(node, parent) {\n\tparent.appendChild(node);\n};\n\nSAXTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) {\n\tvar parent = table.parentNode;\n\tif (parent)\n\t\tparent.insertBetween(child, table.previousSibling, table);\n\telse\n\t\tstackParent.appendChild(child);\n};\n\nSAXTreeBuilder.prototype.detachFromParent = function(element) {\n\telement.detach();\n};\n\nSAXTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) {\n\tnewParent.appendChildren(oldParent.firstChild);\n};\n\nSAXTreeBuilder.prototype.getFragment = function() {\n\tvar fragment = new DocumentFragment();\n\tthis.reparentChildren(this.openElements.rootNode, fragment);\n\treturn fragment;\n};\n\nfunction getAttribute(node, name) {\n\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\tvar attribute = node.attributes[i];\n\t\tif (attribute.nodeName === name)\n\t\t\treturn attribute.nodeValue;\n\t}\n}\n\nSAXTreeBuilder.prototype.addAttributesToElement = function(element, attributes) {\n\tfor (var i = 0; i < attributes.length; i++) {\n\t\tvar attribute = attributes[i];\n\t\tif (!getAttribute(element, attribute.nodeName))\n\t\t\telement.attributes.push(attribute);\n\t}\n};\n\nvar NodeType = {\n\tCDATA: 1,\n\tCHARACTERS: 2,\n\tCOMMENT: 3,\n\tDOCUMENT: 4,\n\tDOCUMENT_FRAGMENT: 5,\n\tDTD: 6,\n\tELEMENT: 7,\n\tENTITY: 8,\n\tIGNORABLE_WHITESPACE: 9,\n\tPROCESSING_INSTRUCTION: 10,\n\tSKIPPED_ENTITY: 11\n};\nfunction Node(locator) {\n\tif (!locator) {\n\t\tthis.columnNumber = -1;\n\t\tthis.lineNumber = -1;\n\t} else {\n\t\tthis.columnNumber = locator.columnNumber;\n\t\tthis.lineNumber = locator.lineNumber;\n\t}\n\tthis.parentNode = null;\n\tthis.nextSibling = null;\n\tthis.firstChild = null;\n}\nNode.prototype.visit = function(treeParser) {\n\tthrow new Error(\"Not Implemented\");\n};\nNode.prototype.revisit = function(treeParser) {\n\treturn;\n};\nNode.prototype.detach = function() {\n\tif (this.parentNode !== null) {\n\t\tthis.parentNode.removeChild(this);\n\t\tthis.parentNode = null;\n\t}\n};\n\nObject.defineProperty(Node.prototype, 'previousSibling', {\n\tget: function() {\n\t\tvar prev = null;\n\t\tvar next = this.parentNode.firstChild;\n\t\tfor(;;) {\n\t\t\tif (this == next) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tprev = next;\n\t\t\tnext = next.nextSibling;\n\t\t}\n\t}\n});\n\n\nfunction ParentNode(locator) {\n\tNode.call(this, locator);\n\tthis.lastChild = null;\n\tthis._endLocator = null;\n}\n\nParentNode.prototype = Object.create(Node.prototype);\nParentNode.prototype.insertBefore = function(child, sibling) {\n\tif (!sibling) {\n\t\treturn this.appendChild(child);\n\t}\n\tchild.detach();\n\tchild.parentNode = this;\n\tif (this.firstChild == sibling) {\n\t\tchild.nextSibling = sibling;\n\t\tthis.firstChild = child;\n\t} else {\n\t\tvar prev = this.firstChild;\n\t\tvar next = this.firstChild.nextSibling;\n\t\twhile (next != sibling) {\n\t\t\tprev = next;\n\t\t\tnext = next.nextSibling;\n\t\t}\n\t\tprev.nextSibling = child;\n\t\tchild.nextSibling = next;\n\t}\n\treturn child;\n};\n\nParentNode.prototype.insertBetween = function(child, prev, next) {\n\tif (!next) {\n\t\treturn this.appendChild(child);\n\t}\n\tchild.detach();\n\tchild.parentNode = this;\n\tchild.nextSibling = next;\n\tif (!prev) {\n\t\tfirstChild = child;\n\t} else {\n\t\tprev.nextSibling = child;\n\t}\n\treturn child;\n};\nParentNode.prototype.appendChild = function(child) {\n\tchild.detach();\n\tchild.parentNode = this;\n\tif (!this.firstChild) {\n\t\tthis.firstChild = child;\n\t} else {\n\t\tthis.lastChild.nextSibling = child;\n\t}\n\tthis.lastChild = child;\n\treturn child;\n};\nParentNode.prototype.appendChildren = function(parent) {\n\tvar child = parent.firstChild;\n\tif (!child) {\n\t\treturn;\n\t}\n\tvar another = parent;\n\tif (!this.firstChild) {\n\t\tthis.firstChild = child;\n\t} else {\n\t\tthis.lastChild.nextSibling = child;\n\t}\n\tthis.lastChild = another.lastChild;\n\tdo {\n\t\tchild.parentNode = this;\n\t} while ((child = child.nextSibling));\n\tanother.firstChild = null;\n\tanother.lastChild = null;\n};\nParentNode.prototype.removeChild = function(node) {\n\tif (this.firstChild == node) {\n\t\tthis.firstChild = node.nextSibling;\n\t\tif (this.lastChild == node) {\n\t\t\tthis.lastChild = null;\n\t\t}\n\t} else {\n\t\tvar prev = this.firstChild;\n\t\tvar next = this.firstChild.nextSibling;\n\t\twhile (next != node) {\n\t\t\tprev = next;\n\t\t\tnext = next.nextSibling;\n\t\t}\n\t\tprev.nextSibling = node.nextSibling;\n\t\tif (this.lastChild == node) {\n\t\t\tthis.lastChild = prev;\n\t\t}\n\t}\n\tnode.parentNode = null;\n\treturn node;\n};\n\nObject.defineProperty(ParentNode.prototype, 'endLocator', {\n\tget: function() {\n\t\treturn this._endLocator;\n\t},\n\tset: function(endLocator) {\n\t\tthis._endLocator = {\n\t\t\tlineNumber: endLocator.lineNumber,\n\t\t\tcolumnNumber: endLocator.columnNumber\n\t\t};\n\t}\n});\nfunction Document (locator) {\n\tParentNode.call(this, locator);\n\tthis.nodeType = NodeType.DOCUMENT;\n}\n\nDocument.prototype = Object.create(ParentNode.prototype);\nDocument.prototype.visit = function(treeParser) {\n\ttreeParser.startDocument(this);\n};\nDocument.prototype.revisit = function(treeParser) {\n\ttreeParser.endDocument(this.endLocator);\n};\nfunction DocumentFragment() {\n\tParentNode.call(this, new Locator());\n\tthis.nodeType = NodeType.DOCUMENT_FRAGMENT;\n}\n\nDocumentFragment.prototype = Object.create(ParentNode.prototype);\nDocumentFragment.prototype.visit = function(treeParser) {\n};\nfunction Element(locator, uri, localName, qName, atts, prefixMappings) {\n\tParentNode.call(this, locator);\n\tthis.uri = uri;\n\tthis.localName = localName;\n\tthis.qName = qName;\n\tthis.attributes = atts;\n\tthis.prefixMappings = prefixMappings;\n\tthis.nodeType = NodeType.ELEMENT;\n}\n\nElement.prototype = Object.create(ParentNode.prototype);\nElement.prototype.visit = function(treeParser) {\n\tif (this.prefixMappings) {\n\t\tfor (var key in prefixMappings) {\n\t\t\tvar mapping = prefixMappings[key];\n\t\t\ttreeParser.startPrefixMapping(mapping.getPrefix(),\n\t\t\t\t\tmapping.getUri(), this);\n\t\t}\n\t}\n\ttreeParser.startElement(this.uri, this.localName, this.qName, this.attributes, this);\n};\nElement.prototype.revisit = function(treeParser) {\n\ttreeParser.endElement(this.uri, this.localName, this.qName, this.endLocator);\n\tif (this.prefixMappings) {\n\t\tfor (var key in prefixMappings) {\n\t\t\tvar mapping = prefixMappings[key];\n\t\t\ttreeParser.endPrefixMapping(mapping.getPrefix(), this.endLocator);\n\t\t}\n\t}\n};\nfunction Characters(locator, data){\n\tNode.call(this, locator);\n\tthis.data = data;\n\tthis.nodeType = NodeType.CHARACTERS;\n}\n\nCharacters.prototype = Object.create(Node.prototype);\nCharacters.prototype.visit = function (treeParser) {\n\ttreeParser.characters(this.data, 0, this.data.length, this);\n};\nfunction IgnorableWhitespace(locator, data) {\n\tNode.call(this, locator);\n\tthis.data = data;\n\tthis.nodeType = NodeType.IGNORABLE_WHITESPACE;\n}\n\nIgnorableWhitespace.prototype = Object.create(Node.prototype);\nIgnorableWhitespace.prototype.visit = function(treeParser) {\n\ttreeParser.ignorableWhitespace(this.data, 0, this.data.length, this);\n};\nfunction Comment(locator, data) {\n\tNode.call(this, locator);\n\tthis.data = data;\n\tthis.nodeType = NodeType.COMMENT;\n}\n\nComment.prototype = Object.create(Node.prototype);\nComment.prototype.visit = function(treeParser) {\n\ttreeParser.comment(this.data, 0, this.data.length, this);\n};\nfunction CDATA(locator) {\n\tParentNode.call(this, locator);\n\tthis.nodeType = NodeType.CDATA;\n}\n\nCDATA.prototype = Object.create(ParentNode.prototype);\nCDATA.prototype.visit = function(treeParser) {\n\ttreeParser.startCDATA(this);\n};\nCDATA.prototype.revisit = function(treeParser) {\n\ttreeParser.endCDATA(this.endLocator);\n};\nfunction Entity(name) {\n\tParentNode.call(this);\n\tthis.name = name;\n\tthis.nodeType = NodeType.ENTITY;\n}\n\nEntity.prototype = Object.create(ParentNode.prototype);\nEntity.prototype.visit = function(treeParser) {\n\ttreeParser.startEntity(this.name, this);\n};\nEntity.prototype.revisit = function(treeParser) {\n\ttreeParser.endEntity(this.name);\n};\n\nfunction SkippedEntity(name) {\n\tNode.call(this);\n\tthis.name = name;\n\tthis.nodeType = NodeType.SKIPPED_ENTITY;\n}\n\nSkippedEntity.prototype = Object.create(Node.prototype);\nSkippedEntity.prototype.visit = function(treeParser) {\n\ttreeParser.skippedEntity(this.name, this);\n};\nfunction ProcessingInstruction(target, data) {\n\tNode.call(this);\n\tthis.target = target;\n\tthis.data = data;\n}\n\nProcessingInstruction.prototype = Object.create(Node.prototype);\nProcessingInstruction.prototype.visit = function(treeParser) {\n\ttreeParser.processingInstruction(this.target, this.data, this);\n};\nProcessingInstruction.prototype.getNodeType = function() {\n\treturn NodeType.PROCESSING_INSTRUCTION;\n};\nfunction DTD(name, publicIdentifier, systemIdentifier) {\n\tParentNode.call(this);\n\tthis.name = name;\n\tthis.publicIdentifier = publicIdentifier;\n\tthis.systemIdentifier = systemIdentifier;\n\tthis.nodeType = NodeType.DTD;\n}\n\nDTD.prototype = Object.create(ParentNode.prototype);\nDTD.prototype.visit = function(treeParser) {\n\ttreeParser.startDTD(this.name, this.publicIdentifier, this.systemIdentifier, this);\n};\nDTD.prototype.revisit = function(treeParser) {\n\ttreeParser.endDTD();\n};\n\nexports.SAXTreeBuilder = SAXTreeBuilder;\n\n},\n{\"../TreeBuilder\":6,\"util\":20}],\n11:[function(_dereq_,module,exports){\nfunction TreeParser(contentHandler, lexicalHandler){\n\tthis.contentHandler;\n\tthis.lexicalHandler;\n\tthis.locatorDelegate;\n\n\tif (!contentHandler) {\n\t\tthrow new IllegalArgumentException(\"contentHandler was null.\");\n\t}\n\tthis.contentHandler = contentHandler;\n\tif (!lexicalHandler) {\n\t\tthis.lexicalHandler = new NullLexicalHandler();\n\t} else {\n\t\tthis.lexicalHandler = lexicalHandler;\n\t}\n}\nTreeParser.prototype.parse = function(node) {\n\tthis.contentHandler.documentLocator = this;\n\tvar current = node;\n\tvar next;\n\tfor (;;) {\n\t\tcurrent.visit(this);\n\t\tif (next = current.firstChild) {\n\t\t\tcurrent = next;\n\t\t\tcontinue;\n\t\t}\n\t\tfor (;;) {\n\t\t\tcurrent.revisit(this);\n\t\t\tif (current == node) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (next = current.nextSibling) {\n\t\t\t\tcurrent = next;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent = current.parentNode;\n\t\t}\n\t}\n};\nTreeParser.prototype.characters = function(ch, start, length, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.characters(ch, start, length);\n};\nTreeParser.prototype.endDocument = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.endDocument();\n};\nTreeParser.prototype.endElement = function(uri, localName, qName, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.endElement(uri, localName, qName);\n};\nTreeParser.prototype.endPrefixMapping = function(prefix, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.endPrefixMapping(prefix);\n};\nTreeParser.prototype.ignorableWhitespace = function(ch, start, length, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.ignorableWhitespace(ch, start, length);\n};\nTreeParser.prototype.processingInstruction = function(target, data, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.processingInstruction(target, data);\n};\nTreeParser.prototype.skippedEntity = function(name, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.skippedEntity(name);\n};\nTreeParser.prototype.startDocument = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.startDocument();\n};\nTreeParser.prototype.startElement = function(uri, localName, qName, atts, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.startElement(uri, localName, qName, atts);\n};\nTreeParser.prototype.startPrefixMapping = function(prefix, uri, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.startPrefixMapping(prefix, uri);\n};\nTreeParser.prototype.comment = function(ch, start, length, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.comment(ch, start, length);\n};\nTreeParser.prototype.endCDATA = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.endCDATA();\n};\nTreeParser.prototype.endDTD = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.endDTD();\n};\nTreeParser.prototype.endEntity = function(name, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.endEntity(name);\n};\nTreeParser.prototype.startCDATA = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.startCDATA();\n};\nTreeParser.prototype.startDTD = function(name, publicId, systemId, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.startDTD(name, publicId, systemId);\n};\nTreeParser.prototype.startEntity = function(name, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.startEntity(name);\n};\n\nObject.defineProperty(TreeParser.prototype, 'columnNumber', {\n\tget: function() {\n\t\tif (!this.locatorDelegate)\n\t\t\treturn -1;\n\t\telse\n\t\t\treturn this.locatorDelegate.columnNumber;\n\t}\n});\n\nObject.defineProperty(TreeParser.prototype, 'lineNumber', {\n\tget: function() {\n\t\tif (!this.locatorDelegate)\n\t\t\treturn -1;\n\t\telse\n\t\t\treturn this.locatorDelegate.lineNumber;\n\t}\n});\nfunction NullLexicalHandler() {\n\n}\n\nNullLexicalHandler.prototype.comment = function() {};\nNullLexicalHandler.prototype.endCDATA = function() {};\nNullLexicalHandler.prototype.endDTD = function() {};\nNullLexicalHandler.prototype.endEntity = function() {};\nNullLexicalHandler.prototype.startCDATA = function() {};\nNullLexicalHandler.prototype.startDTD = function() {};\nNullLexicalHandler.prototype.startEntity = function() {};\n\nexports.TreeParser = TreeParser;\n\n},\n{}],\n12:[function(_dereq_,module,exports){\nmodule.exports = {\n\t\"Aacute;\": \"\\u00C1\",\n\t\"Aacute\": \"\\u00C1\",\n\t\"aacute;\": \"\\u00E1\",\n\t\"aacute\": \"\\u00E1\",\n\t\"Abreve;\": \"\\u0102\",\n\t\"abreve;\": \"\\u0103\",\n\t\"ac;\": \"\\u223E\",\n\t\"acd;\": \"\\u223F\",\n\t\"acE;\": \"\\u223E\\u0333\",\n\t\"Acirc;\": \"\\u00C2\",\n\t\"Acirc\": \"\\u00C2\",\n\t\"acirc;\": \"\\u00E2\",\n\t\"acirc\": \"\\u00E2\",\n\t\"acute;\": \"\\u00B4\",\n\t\"acute\": \"\\u00B4\",\n\t\"Acy;\": \"\\u0410\",\n\t\"acy;\": \"\\u0430\",\n\t\"AElig;\": \"\\u00C6\",\n\t\"AElig\": \"\\u00C6\",\n\t\"aelig;\": \"\\u00E6\",\n\t\"aelig\": \"\\u00E6\",\n\t\"af;\": \"\\u2061\",\n\t\"Afr;\": \"\\uD835\\uDD04\",\n\t\"afr;\": \"\\uD835\\uDD1E\",\n\t\"Agrave;\": \"\\u00C0\",\n\t\"Agrave\": \"\\u00C0\",\n\t\"agrave;\": \"\\u00E0\",\n\t\"agrave\": \"\\u00E0\",\n\t\"alefsym;\": \"\\u2135\",\n\t\"aleph;\": \"\\u2135\",\n\t\"Alpha;\": \"\\u0391\",\n\t\"alpha;\": \"\\u03B1\",\n\t\"Amacr;\": \"\\u0100\",\n\t\"amacr;\": \"\\u0101\",\n\t\"amalg;\": \"\\u2A3F\",\n\t\"amp;\": \"\\u0026\",\n\t\"amp\": \"\\u0026\",\n\t\"AMP;\": \"\\u0026\",\n\t\"AMP\": \"\\u0026\",\n\t\"andand;\": \"\\u2A55\",\n\t\"And;\": \"\\u2A53\",\n\t\"and;\": \"\\u2227\",\n\t\"andd;\": \"\\u2A5C\",\n\t\"andslope;\": \"\\u2A58\",\n\t\"andv;\": \"\\u2A5A\",\n\t\"ang;\": \"\\u2220\",\n\t\"ange;\": \"\\u29A4\",\n\t\"angle;\": \"\\u2220\",\n\t\"angmsdaa;\": \"\\u29A8\",\n\t\"angmsdab;\": \"\\u29A9\",\n\t\"angmsdac;\": \"\\u29AA\",\n\t\"angmsdad;\": \"\\u29AB\",\n\t\"angmsdae;\": \"\\u29AC\",\n\t\"angmsdaf;\": \"\\u29AD\",\n\t\"angmsdag;\": \"\\u29AE\",\n\t\"angmsdah;\": \"\\u29AF\",\n\t\"angmsd;\": \"\\u2221\",\n\t\"angrt;\": \"\\u221F\",\n\t\"angrtvb;\": \"\\u22BE\",\n\t\"angrtvbd;\": \"\\u299D\",\n\t\"angsph;\": \"\\u2222\",\n\t\"angst;\": \"\\u00C5\",\n\t\"angzarr;\": \"\\u237C\",\n\t\"Aogon;\": \"\\u0104\",\n\t\"aogon;\": \"\\u0105\",\n\t\"Aopf;\": \"\\uD835\\uDD38\",\n\t\"aopf;\": \"\\uD835\\uDD52\",\n\t\"apacir;\": \"\\u2A6F\",\n\t\"ap;\": \"\\u2248\",\n\t\"apE;\": \"\\u2A70\",\n\t\"ape;\": \"\\u224A\",\n\t\"apid;\": \"\\u224B\",\n\t\"apos;\": \"\\u0027\",\n\t\"ApplyFunction;\": \"\\u2061\",\n\t\"approx;\": \"\\u2248\",\n\t\"approxeq;\": \"\\u224A\",\n\t\"Aring;\": \"\\u00C5\",\n\t\"Aring\": \"\\u00C5\",\n\t\"aring;\": \"\\u00E5\",\n\t\"aring\": \"\\u00E5\",\n\t\"Ascr;\": \"\\uD835\\uDC9C\",\n\t\"ascr;\": \"\\uD835\\uDCB6\",\n\t\"Assign;\": \"\\u2254\",\n\t\"ast;\": \"\\u002A\",\n\t\"asymp;\": \"\\u2248\",\n\t\"asympeq;\": \"\\u224D\",\n\t\"Atilde;\": \"\\u00C3\",\n\t\"Atilde\": \"\\u00C3\",\n\t\"atilde;\": \"\\u00E3\",\n\t\"atilde\": \"\\u00E3\",\n\t\"Auml;\": \"\\u00C4\",\n\t\"Auml\": \"\\u00C4\",\n\t\"auml;\": \"\\u00E4\",\n\t\"auml\": \"\\u00E4\",\n\t\"awconint;\": \"\\u2233\",\n\t\"awint;\": \"\\u2A11\",\n\t\"backcong;\": \"\\u224C\",\n\t\"backepsilon;\": \"\\u03F6\",\n\t\"backprime;\": \"\\u2035\",\n\t\"backsim;\": \"\\u223D\",\n\t\"backsimeq;\": \"\\u22CD\",\n\t\"Backslash;\": \"\\u2216\",\n\t\"Barv;\": \"\\u2AE7\",\n\t\"barvee;\": \"\\u22BD\",\n\t\"barwed;\": \"\\u2305\",\n\t\"Barwed;\": \"\\u2306\",\n\t\"barwedge;\": \"\\u2305\",\n\t\"bbrk;\": \"\\u23B5\",\n\t\"bbrktbrk;\": \"\\u23B6\",\n\t\"bcong;\": \"\\u224C\",\n\t\"Bcy;\": \"\\u0411\",\n\t\"bcy;\": \"\\u0431\",\n\t\"bdquo;\": \"\\u201E\",\n\t\"becaus;\": \"\\u2235\",\n\t\"because;\": \"\\u2235\",\n\t\"Because;\": \"\\u2235\",\n\t\"bemptyv;\": \"\\u29B0\",\n\t\"bepsi;\": \"\\u03F6\",\n\t\"bernou;\": \"\\u212C\",\n\t\"Bernoullis;\": \"\\u212C\",\n\t\"Beta;\": \"\\u0392\",\n\t\"beta;\": \"\\u03B2\",\n\t\"beth;\": \"\\u2136\",\n\t\"between;\": \"\\u226C\",\n\t\"Bfr;\": \"\\uD835\\uDD05\",\n\t\"bfr;\": \"\\uD835\\uDD1F\",\n\t\"bigcap;\": \"\\u22C2\",\n\t\"bigcirc;\": \"\\u25EF\",\n\t\"bigcup;\": \"\\u22C3\",\n\t\"bigodot;\": \"\\u2A00\",\n\t\"bigoplus;\": \"\\u2A01\",\n\t\"bigotimes;\": \"\\u2A02\",\n\t\"bigsqcup;\": \"\\u2A06\",\n\t\"bigstar;\": \"\\u2605\",\n\t\"bigtriangledown;\": \"\\u25BD\",\n\t\"bigtriangleup;\": \"\\u25B3\",\n\t\"biguplus;\": \"\\u2A04\",\n\t\"bigvee;\": \"\\u22C1\",\n\t\"bigwedge;\": \"\\u22C0\",\n\t\"bkarow;\": \"\\u290D\",\n\t\"blacklozenge;\": \"\\u29EB\",\n\t\"blacksquare;\": \"\\u25AA\",\n\t\"blacktriangle;\": \"\\u25B4\",\n\t\"blacktriangledown;\": \"\\u25BE\",\n\t\"blacktriangleleft;\": \"\\u25C2\",\n\t\"blacktriangleright;\": \"\\u25B8\",\n\t\"blank;\": \"\\u2423\",\n\t\"blk12;\": \"\\u2592\",\n\t\"blk14;\": \"\\u2591\",\n\t\"blk34;\": \"\\u2593\",\n\t\"block;\": \"\\u2588\",\n\t\"bne;\": \"\\u003D\\u20E5\",\n\t\"bnequiv;\": \"\\u2261\\u20E5\",\n\t\"bNot;\": \"\\u2AED\",\n\t\"bnot;\": \"\\u2310\",\n\t\"Bopf;\": \"\\uD835\\uDD39\",\n\t\"bopf;\": \"\\uD835\\uDD53\",\n\t\"bot;\": \"\\u22A5\",\n\t\"bottom;\": \"\\u22A5\",\n\t\"bowtie;\": \"\\u22C8\",\n\t\"boxbox;\": \"\\u29C9\",\n\t\"boxdl;\": \"\\u2510\",\n\t\"boxdL;\": \"\\u2555\",\n\t\"boxDl;\": \"\\u2556\",\n\t\"boxDL;\": \"\\u2557\",\n\t\"boxdr;\": \"\\u250C\",\n\t\"boxdR;\": \"\\u2552\",\n\t\"boxDr;\": \"\\u2553\",\n\t\"boxDR;\": \"\\u2554\",\n\t\"boxh;\": \"\\u2500\",\n\t\"boxH;\": \"\\u2550\",\n\t\"boxhd;\": \"\\u252C\",\n\t\"boxHd;\": \"\\u2564\",\n\t\"boxhD;\": \"\\u2565\",\n\t\"boxHD;\": \"\\u2566\",\n\t\"boxhu;\": \"\\u2534\",\n\t\"boxHu;\": \"\\u2567\",\n\t\"boxhU;\": \"\\u2568\",\n\t\"boxHU;\": \"\\u2569\",\n\t\"boxminus;\": \"\\u229F\",\n\t\"boxplus;\": \"\\u229E\",\n\t\"boxtimes;\": \"\\u22A0\",\n\t\"boxul;\": \"\\u2518\",\n\t\"boxuL;\": \"\\u255B\",\n\t\"boxUl;\": \"\\u255C\",\n\t\"boxUL;\": \"\\u255D\",\n\t\"boxur;\": \"\\u2514\",\n\t\"boxuR;\": \"\\u2558\",\n\t\"boxUr;\": \"\\u2559\",\n\t\"boxUR;\": \"\\u255A\",\n\t\"boxv;\": \"\\u2502\",\n\t\"boxV;\": \"\\u2551\",\n\t\"boxvh;\": \"\\u253C\",\n\t\"boxvH;\": \"\\u256A\",\n\t\"boxVh;\": \"\\u256B\",\n\t\"boxVH;\": \"\\u256C\",\n\t\"boxvl;\": \"\\u2524\",\n\t\"boxvL;\": \"\\u2561\",\n\t\"boxVl;\": \"\\u2562\",\n\t\"boxVL;\": \"\\u2563\",\n\t\"boxvr;\": \"\\u251C\",\n\t\"boxvR;\": \"\\u255E\",\n\t\"boxVr;\": \"\\u255F\",\n\t\"boxVR;\": \"\\u2560\",\n\t\"bprime;\": \"\\u2035\",\n\t\"breve;\": \"\\u02D8\",\n\t\"Breve;\": \"\\u02D8\",\n\t\"brvbar;\": \"\\u00A6\",\n\t\"brvbar\": \"\\u00A6\",\n\t\"bscr;\": \"\\uD835\\uDCB7\",\n\t\"Bscr;\": \"\\u212C\",\n\t\"bsemi;\": \"\\u204F\",\n\t\"bsim;\": \"\\u223D\",\n\t\"bsime;\": \"\\u22CD\",\n\t\"bsolb;\": \"\\u29C5\",\n\t\"bsol;\": \"\\u005C\",\n\t\"bsolhsub;\": \"\\u27C8\",\n\t\"bull;\": \"\\u2022\",\n\t\"bullet;\": \"\\u2022\",\n\t\"bump;\": \"\\u224E\",\n\t\"bumpE;\": \"\\u2AAE\",\n\t\"bumpe;\": \"\\u224F\",\n\t\"Bumpeq;\": \"\\u224E\",\n\t\"bumpeq;\": \"\\u224F\",\n\t\"Cacute;\": \"\\u0106\",\n\t\"cacute;\": \"\\u0107\",\n\t\"capand;\": \"\\u2A44\",\n\t\"capbrcup;\": \"\\u2A49\",\n\t\"capcap;\": \"\\u2A4B\",\n\t\"cap;\": \"\\u2229\",\n\t\"Cap;\": \"\\u22D2\",\n\t\"capcup;\": \"\\u2A47\",\n\t\"capdot;\": \"\\u2A40\",\n\t\"CapitalDifferentialD;\": \"\\u2145\",\n\t\"caps;\": \"\\u2229\\uFE00\",\n\t\"caret;\": \"\\u2041\",\n\t\"caron;\": \"\\u02C7\",\n\t\"Cayleys;\": \"\\u212D\",\n\t\"ccaps;\": \"\\u2A4D\",\n\t\"Ccaron;\": \"\\u010C\",\n\t\"ccaron;\": \"\\u010D\",\n\t\"Ccedil;\": \"\\u00C7\",\n\t\"Ccedil\": \"\\u00C7\",\n\t\"ccedil;\": \"\\u00E7\",\n\t\"ccedil\": \"\\u00E7\",\n\t\"Ccirc;\": \"\\u0108\",\n\t\"ccirc;\": \"\\u0109\",\n\t\"Cconint;\": \"\\u2230\",\n\t\"ccups;\": \"\\u2A4C\",\n\t\"ccupssm;\": \"\\u2A50\",\n\t\"Cdot;\": \"\\u010A\",\n\t\"cdot;\": \"\\u010B\",\n\t\"cedil;\": \"\\u00B8\",\n\t\"cedil\": \"\\u00B8\",\n\t\"Cedilla;\": \"\\u00B8\",\n\t\"cemptyv;\": \"\\u29B2\",\n\t\"cent;\": \"\\u00A2\",\n\t\"cent\": \"\\u00A2\",\n\t\"centerdot;\": \"\\u00B7\",\n\t\"CenterDot;\": \"\\u00B7\",\n\t\"cfr;\": \"\\uD835\\uDD20\",\n\t\"Cfr;\": \"\\u212D\",\n\t\"CHcy;\": \"\\u0427\",\n\t\"chcy;\": \"\\u0447\",\n\t\"check;\": \"\\u2713\",\n\t\"checkmark;\": \"\\u2713\",\n\t\"Chi;\": \"\\u03A7\",\n\t\"chi;\": \"\\u03C7\",\n\t\"circ;\": \"\\u02C6\",\n\t\"circeq;\": \"\\u2257\",\n\t\"circlearrowleft;\": \"\\u21BA\",\n\t\"circlearrowright;\": \"\\u21BB\",\n\t\"circledast;\": \"\\u229B\",\n\t\"circledcirc;\": \"\\u229A\",\n\t\"circleddash;\": \"\\u229D\",\n\t\"CircleDot;\": \"\\u2299\",\n\t\"circledR;\": \"\\u00AE\",\n\t\"circledS;\": \"\\u24C8\",\n\t\"CircleMinus;\": \"\\u2296\",\n\t\"CirclePlus;\": \"\\u2295\",\n\t\"CircleTimes;\": \"\\u2297\",\n\t\"cir;\": \"\\u25CB\",\n\t\"cirE;\": \"\\u29C3\",\n\t\"cire;\": \"\\u2257\",\n\t\"cirfnint;\": \"\\u2A10\",\n\t\"cirmid;\": \"\\u2AEF\",\n\t\"cirscir;\": \"\\u29C2\",\n\t\"ClockwiseContourIntegral;\": \"\\u2232\",\n\t\"CloseCurlyDoubleQuote;\": \"\\u201D\",\n\t\"CloseCurlyQuote;\": \"\\u2019\",\n\t\"clubs;\": \"\\u2663\",\n\t\"clubsuit;\": \"\\u2663\",\n\t\"colon;\": \"\\u003A\",\n\t\"Colon;\": \"\\u2237\",\n\t\"Colone;\": \"\\u2A74\",\n\t\"colone;\": \"\\u2254\",\n\t\"coloneq;\": \"\\u2254\",\n\t\"comma;\": \"\\u002C\",\n\t\"commat;\": \"\\u0040\",\n\t\"comp;\": \"\\u2201\",\n\t\"compfn;\": \"\\u2218\",\n\t\"complement;\": \"\\u2201\",\n\t\"complexes;\": \"\\u2102\",\n\t\"cong;\": \"\\u2245\",\n\t\"congdot;\": \"\\u2A6D\",\n\t\"Congruent;\": \"\\u2261\",\n\t\"conint;\": \"\\u222E\",\n\t\"Conint;\": \"\\u222F\",\n\t\"ContourIntegral;\": \"\\u222E\",\n\t\"copf;\": \"\\uD835\\uDD54\",\n\t\"Copf;\": \"\\u2102\",\n\t\"coprod;\": \"\\u2210\",\n\t\"Coproduct;\": \"\\u2210\",\n\t\"copy;\": \"\\u00A9\",\n\t\"copy\": \"\\u00A9\",\n\t\"COPY;\": \"\\u00A9\",\n\t\"COPY\": \"\\u00A9\",\n\t\"copysr;\": \"\\u2117\",\n\t\"CounterClockwiseContourIntegral;\": \"\\u2233\",\n\t\"crarr;\": \"\\u21B5\",\n\t\"cross;\": \"\\u2717\",\n\t\"Cross;\": \"\\u2A2F\",\n\t\"Cscr;\": \"\\uD835\\uDC9E\",\n\t\"cscr;\": \"\\uD835\\uDCB8\",\n\t\"csub;\": \"\\u2ACF\",\n\t\"csube;\": \"\\u2AD1\",\n\t\"csup;\": \"\\u2AD0\",\n\t\"csupe;\": \"\\u2AD2\",\n\t\"ctdot;\": \"\\u22EF\",\n\t\"cudarrl;\": \"\\u2938\",\n\t\"cudarrr;\": \"\\u2935\",\n\t\"cuepr;\": \"\\u22DE\",\n\t\"cuesc;\": \"\\u22DF\",\n\t\"cularr;\": \"\\u21B6\",\n\t\"cularrp;\": \"\\u293D\",\n\t\"cupbrcap;\": \"\\u2A48\",\n\t\"cupcap;\": \"\\u2A46\",\n\t\"CupCap;\": \"\\u224D\",\n\t\"cup;\": \"\\u222A\",\n\t\"Cup;\": \"\\u22D3\",\n\t\"cupcup;\": \"\\u2A4A\",\n\t\"cupdot;\": \"\\u228D\",\n\t\"cupor;\": \"\\u2A45\",\n\t\"cups;\": \"\\u222A\\uFE00\",\n\t\"curarr;\": \"\\u21B7\",\n\t\"curarrm;\": \"\\u293C\",\n\t\"curlyeqprec;\": \"\\u22DE\",\n\t\"curlyeqsucc;\": \"\\u22DF\",\n\t\"curlyvee;\": \"\\u22CE\",\n\t\"curlywedge;\": \"\\u22CF\",\n\t\"curren;\": \"\\u00A4\",\n\t\"curren\": \"\\u00A4\",\n\t\"curvearrowleft;\": \"\\u21B6\",\n\t\"curvearrowright;\": \"\\u21B7\",\n\t\"cuvee;\": \"\\u22CE\",\n\t\"cuwed;\": \"\\u22CF\",\n\t\"cwconint;\": \"\\u2232\",\n\t\"cwint;\": \"\\u2231\",\n\t\"cylcty;\": \"\\u232D\",\n\t\"dagger;\": \"\\u2020\",\n\t\"Dagger;\": \"\\u2021\",\n\t\"daleth;\": \"\\u2138\",\n\t\"darr;\": \"\\u2193\",\n\t\"Darr;\": \"\\u21A1\",\n\t\"dArr;\": \"\\u21D3\",\n\t\"dash;\": \"\\u2010\",\n\t\"Dashv;\": \"\\u2AE4\",\n\t\"dashv;\": \"\\u22A3\",\n\t\"dbkarow;\": \"\\u290F\",\n\t\"dblac;\": \"\\u02DD\",\n\t\"Dcaron;\": \"\\u010E\",\n\t\"dcaron;\": \"\\u010F\",\n\t\"Dcy;\": \"\\u0414\",\n\t\"dcy;\": \"\\u0434\",\n\t\"ddagger;\": \"\\u2021\",\n\t\"ddarr;\": \"\\u21CA\",\n\t\"DD;\": \"\\u2145\",\n\t\"dd;\": \"\\u2146\",\n\t\"DDotrahd;\": \"\\u2911\",\n\t\"ddotseq;\": \"\\u2A77\",\n\t\"deg;\": \"\\u00B0\",\n\t\"deg\": \"\\u00B0\",\n\t\"Del;\": \"\\u2207\",\n\t\"Delta;\": \"\\u0394\",\n\t\"delta;\": \"\\u03B4\",\n\t\"demptyv;\": \"\\u29B1\",\n\t\"dfisht;\": \"\\u297F\",\n\t\"Dfr;\": \"\\uD835\\uDD07\",\n\t\"dfr;\": \"\\uD835\\uDD21\",\n\t\"dHar;\": \"\\u2965\",\n\t\"dharl;\": \"\\u21C3\",\n\t\"dharr;\": \"\\u21C2\",\n\t\"DiacriticalAcute;\": \"\\u00B4\",\n\t\"DiacriticalDot;\": \"\\u02D9\",\n\t\"DiacriticalDoubleAcute;\": \"\\u02DD\",\n\t\"DiacriticalGrave;\": \"\\u0060\",\n\t\"DiacriticalTilde;\": \"\\u02DC\",\n\t\"diam;\": \"\\u22C4\",\n\t\"diamond;\": \"\\u22C4\",\n\t\"Diamond;\": \"\\u22C4\",\n\t\"diamondsuit;\": \"\\u2666\",\n\t\"diams;\": \"\\u2666\",\n\t\"die;\": \"\\u00A8\",\n\t\"DifferentialD;\": \"\\u2146\",\n\t\"digamma;\": \"\\u03DD\",\n\t\"disin;\": \"\\u22F2\",\n\t\"div;\": \"\\u00F7\",\n\t\"divide;\": \"\\u00F7\",\n\t\"divide\": \"\\u00F7\",\n\t\"divideontimes;\": \"\\u22C7\",\n\t\"divonx;\": \"\\u22C7\",\n\t\"DJcy;\": \"\\u0402\",\n\t\"djcy;\": \"\\u0452\",\n\t\"dlcorn;\": \"\\u231E\",\n\t\"dlcrop;\": \"\\u230D\",\n\t\"dollar;\": \"\\u0024\",\n\t\"Dopf;\": \"\\uD835\\uDD3B\",\n\t\"dopf;\": \"\\uD835\\uDD55\",\n\t\"Dot;\": \"\\u00A8\",\n\t\"dot;\": \"\\u02D9\",\n\t\"DotDot;\": \"\\u20DC\",\n\t\"doteq;\": \"\\u2250\",\n\t\"doteqdot;\": \"\\u2251\",\n\t\"DotEqual;\": \"\\u2250\",\n\t\"dotminus;\": \"\\u2238\",\n\t\"dotplus;\": \"\\u2214\",\n\t\"dotsquare;\": \"\\u22A1\",\n\t\"doublebarwedge;\": \"\\u2306\",\n\t\"DoubleContourIntegral;\": \"\\u222F\",\n\t\"DoubleDot;\": \"\\u00A8\",\n\t\"DoubleDownArrow;\": \"\\u21D3\",\n\t\"DoubleLeftArrow;\": \"\\u21D0\",\n\t\"DoubleLeftRightArrow;\": \"\\u21D4\",\n\t\"DoubleLeftTee;\": \"\\u2AE4\",\n\t\"DoubleLongLeftArrow;\": \"\\u27F8\",\n\t\"DoubleLongLeftRightArrow;\": \"\\u27FA\",\n\t\"DoubleLongRightArrow;\": \"\\u27F9\",\n\t\"DoubleRightArrow;\": \"\\u21D2\",\n\t\"DoubleRightTee;\": \"\\u22A8\",\n\t\"DoubleUpArrow;\": \"\\u21D1\",\n\t\"DoubleUpDownArrow;\": \"\\u21D5\",\n\t\"DoubleVerticalBar;\": \"\\u2225\",\n\t\"DownArrowBar;\": \"\\u2913\",\n\t\"downarrow;\": \"\\u2193\",\n\t\"DownArrow;\": \"\\u2193\",\n\t\"Downarrow;\": \"\\u21D3\",\n\t\"DownArrowUpArrow;\": \"\\u21F5\",\n\t\"DownBreve;\": \"\\u0311\",\n\t\"downdownarrows;\": \"\\u21CA\",\n\t\"downharpoonleft;\": \"\\u21C3\",\n\t\"downharpoonright;\": \"\\u21C2\",\n\t\"DownLeftRightVector;\": \"\\u2950\",\n\t\"DownLeftTeeVector;\": \"\\u295E\",\n\t\"DownLeftVectorBar;\": \"\\u2956\",\n\t\"DownLeftVector;\": \"\\u21BD\",\n\t\"DownRightTeeVector;\": \"\\u295F\",\n\t\"DownRightVectorBar;\": \"\\u2957\",\n\t\"DownRightVector;\": \"\\u21C1\",\n\t\"DownTeeArrow;\": \"\\u21A7\",\n\t\"DownTee;\": \"\\u22A4\",\n\t\"drbkarow;\": \"\\u2910\",\n\t\"drcorn;\": \"\\u231F\",\n\t\"drcrop;\": \"\\u230C\",\n\t\"Dscr;\": \"\\uD835\\uDC9F\",\n\t\"dscr;\": \"\\uD835\\uDCB9\",\n\t\"DScy;\": \"\\u0405\",\n\t\"dscy;\": \"\\u0455\",\n\t\"dsol;\": \"\\u29F6\",\n\t\"Dstrok;\": \"\\u0110\",\n\t\"dstrok;\": \"\\u0111\",\n\t\"dtdot;\": \"\\u22F1\",\n\t\"dtri;\": \"\\u25BF\",\n\t\"dtrif;\": \"\\u25BE\",\n\t\"duarr;\": \"\\u21F5\",\n\t\"duhar;\": \"\\u296F\",\n\t\"dwangle;\": \"\\u29A6\",\n\t\"DZcy;\": \"\\u040F\",\n\t\"dzcy;\": \"\\u045F\",\n\t\"dzigrarr;\": \"\\u27FF\",\n\t\"Eacute;\": \"\\u00C9\",\n\t\"Eacute\": \"\\u00C9\",\n\t\"eacute;\": \"\\u00E9\",\n\t\"eacute\": \"\\u00E9\",\n\t\"easter;\": \"\\u2A6E\",\n\t\"Ecaron;\": \"\\u011A\",\n\t\"ecaron;\": \"\\u011B\",\n\t\"Ecirc;\": \"\\u00CA\",\n\t\"Ecirc\": \"\\u00CA\",\n\t\"ecirc;\": \"\\u00EA\",\n\t\"ecirc\": \"\\u00EA\",\n\t\"ecir;\": \"\\u2256\",\n\t\"ecolon;\": \"\\u2255\",\n\t\"Ecy;\": \"\\u042D\",\n\t\"ecy;\": \"\\u044D\",\n\t\"eDDot;\": \"\\u2A77\",\n\t\"Edot;\": \"\\u0116\",\n\t\"edot;\": \"\\u0117\",\n\t\"eDot;\": \"\\u2251\",\n\t\"ee;\": \"\\u2147\",\n\t\"efDot;\": \"\\u2252\",\n\t\"Efr;\": \"\\uD835\\uDD08\",\n\t\"efr;\": \"\\uD835\\uDD22\",\n\t\"eg;\": \"\\u2A9A\",\n\t\"Egrave;\": \"\\u00C8\",\n\t\"Egrave\": \"\\u00C8\",\n\t\"egrave;\": \"\\u00E8\",\n\t\"egrave\": \"\\u00E8\",\n\t\"egs;\": \"\\u2A96\",\n\t\"egsdot;\": \"\\u2A98\",\n\t\"el;\": \"\\u2A99\",\n\t\"Element;\": \"\\u2208\",\n\t\"elinters;\": \"\\u23E7\",\n\t\"ell;\": \"\\u2113\",\n\t\"els;\": \"\\u2A95\",\n\t\"elsdot;\": \"\\u2A97\",\n\t\"Emacr;\": \"\\u0112\",\n\t\"emacr;\": \"\\u0113\",\n\t\"empty;\": \"\\u2205\",\n\t\"emptyset;\": \"\\u2205\",\n\t\"EmptySmallSquare;\": \"\\u25FB\",\n\t\"emptyv;\": \"\\u2205\",\n\t\"EmptyVerySmallSquare;\": \"\\u25AB\",\n\t\"emsp13;\": \"\\u2004\",\n\t\"emsp14;\": \"\\u2005\",\n\t\"emsp;\": \"\\u2003\",\n\t\"ENG;\": \"\\u014A\",\n\t\"eng;\": \"\\u014B\",\n\t\"ensp;\": \"\\u2002\",\n\t\"Eogon;\": \"\\u0118\",\n\t\"eogon;\": \"\\u0119\",\n\t\"Eopf;\": \"\\uD835\\uDD3C\",\n\t\"eopf;\": \"\\uD835\\uDD56\",\n\t\"epar;\": \"\\u22D5\",\n\t\"eparsl;\": \"\\u29E3\",\n\t\"eplus;\": \"\\u2A71\",\n\t\"epsi;\": \"\\u03B5\",\n\t\"Epsilon;\": \"\\u0395\",\n\t\"epsilon;\": \"\\u03B5\",\n\t\"epsiv;\": \"\\u03F5\",\n\t\"eqcirc;\": \"\\u2256\",\n\t\"eqcolon;\": \"\\u2255\",\n\t\"eqsim;\": \"\\u2242\",\n\t\"eqslantgtr;\": \"\\u2A96\",\n\t\"eqslantless;\": \"\\u2A95\",\n\t\"Equal;\": \"\\u2A75\",\n\t\"equals;\": \"\\u003D\",\n\t\"EqualTilde;\": \"\\u2242\",\n\t\"equest;\": \"\\u225F\",\n\t\"Equilibrium;\": \"\\u21CC\",\n\t\"equiv;\": \"\\u2261\",\n\t\"equivDD;\": \"\\u2A78\",\n\t\"eqvparsl;\": \"\\u29E5\",\n\t\"erarr;\": \"\\u2971\",\n\t\"erDot;\": \"\\u2253\",\n\t\"escr;\": \"\\u212F\",\n\t\"Escr;\": \"\\u2130\",\n\t\"esdot;\": \"\\u2250\",\n\t\"Esim;\": \"\\u2A73\",\n\t\"esim;\": \"\\u2242\",\n\t\"Eta;\": \"\\u0397\",\n\t\"eta;\": \"\\u03B7\",\n\t\"ETH;\": \"\\u00D0\",\n\t\"ETH\": \"\\u00D0\",\n\t\"eth;\": \"\\u00F0\",\n\t\"eth\": \"\\u00F0\",\n\t\"Euml;\": \"\\u00CB\",\n\t\"Euml\": \"\\u00CB\",\n\t\"euml;\": \"\\u00EB\",\n\t\"euml\": \"\\u00EB\",\n\t\"euro;\": \"\\u20AC\",\n\t\"excl;\": \"\\u0021\",\n\t\"exist;\": \"\\u2203\",\n\t\"Exists;\": \"\\u2203\",\n\t\"expectation;\": \"\\u2130\",\n\t\"exponentiale;\": \"\\u2147\",\n\t\"ExponentialE;\": \"\\u2147\",\n\t\"fallingdotseq;\": \"\\u2252\",\n\t\"Fcy;\": \"\\u0424\",\n\t\"fcy;\": \"\\u0444\",\n\t\"female;\": \"\\u2640\",\n\t\"ffilig;\": \"\\uFB03\",\n\t\"fflig;\": \"\\uFB00\",\n\t\"ffllig;\": \"\\uFB04\",\n\t\"Ffr;\": \"\\uD835\\uDD09\",\n\t\"ffr;\": \"\\uD835\\uDD23\",\n\t\"filig;\": \"\\uFB01\",\n\t\"FilledSmallSquare;\": \"\\u25FC\",\n\t\"FilledVerySmallSquare;\": \"\\u25AA\",\n\t\"fjlig;\": \"\\u0066\\u006A\",\n\t\"flat;\": \"\\u266D\",\n\t\"fllig;\": \"\\uFB02\",\n\t\"fltns;\": \"\\u25B1\",\n\t\"fnof;\": \"\\u0192\",\n\t\"Fopf;\": \"\\uD835\\uDD3D\",\n\t\"fopf;\": \"\\uD835\\uDD57\",\n\t\"forall;\": \"\\u2200\",\n\t\"ForAll;\": \"\\u2200\",\n\t\"fork;\": \"\\u22D4\",\n\t\"forkv;\": \"\\u2AD9\",\n\t\"Fouriertrf;\": \"\\u2131\",\n\t\"fpartint;\": \"\\u2A0D\",\n\t\"frac12;\": \"\\u00BD\",\n\t\"frac12\": \"\\u00BD\",\n\t\"frac13;\": \"\\u2153\",\n\t\"frac14;\": \"\\u00BC\",\n\t\"frac14\": \"\\u00BC\",\n\t\"frac15;\": \"\\u2155\",\n\t\"frac16;\": \"\\u2159\",\n\t\"frac18;\": \"\\u215B\",\n\t\"frac23;\": \"\\u2154\",\n\t\"frac25;\": \"\\u2156\",\n\t\"frac34;\": \"\\u00BE\",\n\t\"frac34\": \"\\u00BE\",\n\t\"frac35;\": \"\\u2157\",\n\t\"frac38;\": \"\\u215C\",\n\t\"frac45;\": \"\\u2158\",\n\t\"frac56;\": \"\\u215A\",\n\t\"frac58;\": \"\\u215D\",\n\t\"frac78;\": \"\\u215E\",\n\t\"frasl;\": \"\\u2044\",\n\t\"frown;\": \"\\u2322\",\n\t\"fscr;\": \"\\uD835\\uDCBB\",\n\t\"Fscr;\": \"\\u2131\",\n\t\"gacute;\": \"\\u01F5\",\n\t\"Gamma;\": \"\\u0393\",\n\t\"gamma;\": \"\\u03B3\",\n\t\"Gammad;\": \"\\u03DC\",\n\t\"gammad;\": \"\\u03DD\",\n\t\"gap;\": \"\\u2A86\",\n\t\"Gbreve;\": \"\\u011E\",\n\t\"gbreve;\": \"\\u011F\",\n\t\"Gcedil;\": \"\\u0122\",\n\t\"Gcirc;\": \"\\u011C\",\n\t\"gcirc;\": \"\\u011D\",\n\t\"Gcy;\": \"\\u0413\",\n\t\"gcy;\": \"\\u0433\",\n\t\"Gdot;\": \"\\u0120\",\n\t\"gdot;\": \"\\u0121\",\n\t\"ge;\": \"\\u2265\",\n\t\"gE;\": \"\\u2267\",\n\t\"gEl;\": \"\\u2A8C\",\n\t\"gel;\": \"\\u22DB\",\n\t\"geq;\": \"\\u2265\",\n\t\"geqq;\": \"\\u2267\",\n\t\"geqslant;\": \"\\u2A7E\",\n\t\"gescc;\": \"\\u2AA9\",\n\t\"ges;\": \"\\u2A7E\",\n\t\"gesdot;\": \"\\u2A80\",\n\t\"gesdoto;\": \"\\u2A82\",\n\t\"gesdotol;\": \"\\u2A84\",\n\t\"gesl;\": \"\\u22DB\\uFE00\",\n\t\"gesles;\": \"\\u2A94\",\n\t\"Gfr;\": \"\\uD835\\uDD0A\",\n\t\"gfr;\": \"\\uD835\\uDD24\",\n\t\"gg;\": \"\\u226B\",\n\t\"Gg;\": \"\\u22D9\",\n\t\"ggg;\": \"\\u22D9\",\n\t\"gimel;\": \"\\u2137\",\n\t\"GJcy;\": \"\\u0403\",\n\t\"gjcy;\": \"\\u0453\",\n\t\"gla;\": \"\\u2AA5\",\n\t\"gl;\": \"\\u2277\",\n\t\"glE;\": \"\\u2A92\",\n\t\"glj;\": \"\\u2AA4\",\n\t\"gnap;\": \"\\u2A8A\",\n\t\"gnapprox;\": \"\\u2A8A\",\n\t\"gne;\": \"\\u2A88\",\n\t\"gnE;\": \"\\u2269\",\n\t\"gneq;\": \"\\u2A88\",\n\t\"gneqq;\": \"\\u2269\",\n\t\"gnsim;\": \"\\u22E7\",\n\t\"Gopf;\": \"\\uD835\\uDD3E\",\n\t\"gopf;\": \"\\uD835\\uDD58\",\n\t\"grave;\": \"\\u0060\",\n\t\"GreaterEqual;\": \"\\u2265\",\n\t\"GreaterEqualLess;\": \"\\u22DB\",\n\t\"GreaterFullEqual;\": \"\\u2267\",\n\t\"GreaterGreater;\": \"\\u2AA2\",\n\t\"GreaterLess;\": \"\\u2277\",\n\t\"GreaterSlantEqual;\": \"\\u2A7E\",\n\t\"GreaterTilde;\": \"\\u2273\",\n\t\"Gscr;\": \"\\uD835\\uDCA2\",\n\t\"gscr;\": \"\\u210A\",\n\t\"gsim;\": \"\\u2273\",\n\t\"gsime;\": \"\\u2A8E\",\n\t\"gsiml;\": \"\\u2A90\",\n\t\"gtcc;\": \"\\u2AA7\",\n\t\"gtcir;\": \"\\u2A7A\",\n\t\"gt;\": \"\\u003E\",\n\t\"gt\": \"\\u003E\",\n\t\"GT;\": \"\\u003E\",\n\t\"GT\": \"\\u003E\",\n\t\"Gt;\": \"\\u226B\",\n\t\"gtdot;\": \"\\u22D7\",\n\t\"gtlPar;\": \"\\u2995\",\n\t\"gtquest;\": \"\\u2A7C\",\n\t\"gtrapprox;\": \"\\u2A86\",\n\t\"gtrarr;\": \"\\u2978\",\n\t\"gtrdot;\": \"\\u22D7\",\n\t\"gtreqless;\": \"\\u22DB\",\n\t\"gtreqqless;\": \"\\u2A8C\",\n\t\"gtrless;\": \"\\u2277\",\n\t\"gtrsim;\": \"\\u2273\",\n\t\"gvertneqq;\": \"\\u2269\\uFE00\",\n\t\"gvnE;\": \"\\u2269\\uFE00\",\n\t\"Hacek;\": \"\\u02C7\",\n\t\"hairsp;\": \"\\u200A\",\n\t\"half;\": \"\\u00BD\",\n\t\"hamilt;\": \"\\u210B\",\n\t\"HARDcy;\": \"\\u042A\",\n\t\"hardcy;\": \"\\u044A\",\n\t\"harrcir;\": \"\\u2948\",\n\t\"harr;\": \"\\u2194\",\n\t\"hArr;\": \"\\u21D4\",\n\t\"harrw;\": \"\\u21AD\",\n\t\"Hat;\": \"\\u005E\",\n\t\"hbar;\": \"\\u210F\",\n\t\"Hcirc;\": \"\\u0124\",\n\t\"hcirc;\": \"\\u0125\",\n\t\"hearts;\": \"\\u2665\",\n\t\"heartsuit;\": \"\\u2665\",\n\t\"hellip;\": \"\\u2026\",\n\t\"hercon;\": \"\\u22B9\",\n\t\"hfr;\": \"\\uD835\\uDD25\",\n\t\"Hfr;\": \"\\u210C\",\n\t\"HilbertSpace;\": \"\\u210B\",\n\t\"hksearow;\": \"\\u2925\",\n\t\"hkswarow;\": \"\\u2926\",\n\t\"hoarr;\": \"\\u21FF\",\n\t\"homtht;\": \"\\u223B\",\n\t\"hookleftarrow;\": \"\\u21A9\",\n\t\"hookrightarrow;\": \"\\u21AA\",\n\t\"hopf;\": \"\\uD835\\uDD59\",\n\t\"Hopf;\": \"\\u210D\",\n\t\"horbar;\": \"\\u2015\",\n\t\"HorizontalLine;\": \"\\u2500\",\n\t\"hscr;\": \"\\uD835\\uDCBD\",\n\t\"Hscr;\": \"\\u210B\",\n\t\"hslash;\": \"\\u210F\",\n\t\"Hstrok;\": \"\\u0126\",\n\t\"hstrok;\": \"\\u0127\",\n\t\"HumpDownHump;\": \"\\u224E\",\n\t\"HumpEqual;\": \"\\u224F\",\n\t\"hybull;\": \"\\u2043\",\n\t\"hyphen;\": \"\\u2010\",\n\t\"Iacute;\": \"\\u00CD\",\n\t\"Iacute\": \"\\u00CD\",\n\t\"iacute;\": \"\\u00ED\",\n\t\"iacute\": \"\\u00ED\",\n\t\"ic;\": \"\\u2063\",\n\t\"Icirc;\": \"\\u00CE\",\n\t\"Icirc\": \"\\u00CE\",\n\t\"icirc;\": \"\\u00EE\",\n\t\"icirc\": \"\\u00EE\",\n\t\"Icy;\": \"\\u0418\",\n\t\"icy;\": \"\\u0438\",\n\t\"Idot;\": \"\\u0130\",\n\t\"IEcy;\": \"\\u0415\",\n\t\"iecy;\": \"\\u0435\",\n\t\"iexcl;\": \"\\u00A1\",\n\t\"iexcl\": \"\\u00A1\",\n\t\"iff;\": \"\\u21D4\",\n\t\"ifr;\": \"\\uD835\\uDD26\",\n\t\"Ifr;\": \"\\u2111\",\n\t\"Igrave;\": \"\\u00CC\",\n\t\"Igrave\": \"\\u00CC\",\n\t\"igrave;\": \"\\u00EC\",\n\t\"igrave\": \"\\u00EC\",\n\t\"ii;\": \"\\u2148\",\n\t\"iiiint;\": \"\\u2A0C\",\n\t\"iiint;\": \"\\u222D\",\n\t\"iinfin;\": \"\\u29DC\",\n\t\"iiota;\": \"\\u2129\",\n\t\"IJlig;\": \"\\u0132\",\n\t\"ijlig;\": \"\\u0133\",\n\t\"Imacr;\": \"\\u012A\",\n\t\"imacr;\": \"\\u012B\",\n\t\"image;\": \"\\u2111\",\n\t\"ImaginaryI;\": \"\\u2148\",\n\t\"imagline;\": \"\\u2110\",\n\t\"imagpart;\": \"\\u2111\",\n\t\"imath;\": \"\\u0131\",\n\t\"Im;\": \"\\u2111\",\n\t\"imof;\": \"\\u22B7\",\n\t\"imped;\": \"\\u01B5\",\n\t\"Implies;\": \"\\u21D2\",\n\t\"incare;\": \"\\u2105\",\n\t\"in;\": \"\\u2208\",\n\t\"infin;\": \"\\u221E\",\n\t\"infintie;\": \"\\u29DD\",\n\t\"inodot;\": \"\\u0131\",\n\t\"intcal;\": \"\\u22BA\",\n\t\"int;\": \"\\u222B\",\n\t\"Int;\": \"\\u222C\",\n\t\"integers;\": \"\\u2124\",\n\t\"Integral;\": \"\\u222B\",\n\t\"intercal;\": \"\\u22BA\",\n\t\"Intersection;\": \"\\u22C2\",\n\t\"intlarhk;\": \"\\u2A17\",\n\t\"intprod;\": \"\\u2A3C\",\n\t\"InvisibleComma;\": \"\\u2063\",\n\t\"InvisibleTimes;\": \"\\u2062\",\n\t\"IOcy;\": \"\\u0401\",\n\t\"iocy;\": \"\\u0451\",\n\t\"Iogon;\": \"\\u012E\",\n\t\"iogon;\": \"\\u012F\",\n\t\"Iopf;\": \"\\uD835\\uDD40\",\n\t\"iopf;\": \"\\uD835\\uDD5A\",\n\t\"Iota;\": \"\\u0399\",\n\t\"iota;\": \"\\u03B9\",\n\t\"iprod;\": \"\\u2A3C\",\n\t\"iquest;\": \"\\u00BF\",\n\t\"iquest\": \"\\u00BF\",\n\t\"iscr;\": \"\\uD835\\uDCBE\",\n\t\"Iscr;\": \"\\u2110\",\n\t\"isin;\": \"\\u2208\",\n\t\"isindot;\": \"\\u22F5\",\n\t\"isinE;\": \"\\u22F9\",\n\t\"isins;\": \"\\u22F4\",\n\t\"isinsv;\": \"\\u22F3\",\n\t\"isinv;\": \"\\u2208\",\n\t\"it;\": \"\\u2062\",\n\t\"Itilde;\": \"\\u0128\",\n\t\"itilde;\": \"\\u0129\",\n\t\"Iukcy;\": \"\\u0406\",\n\t\"iukcy;\": \"\\u0456\",\n\t\"Iuml;\": \"\\u00CF\",\n\t\"Iuml\": \"\\u00CF\",\n\t\"iuml;\": \"\\u00EF\",\n\t\"iuml\": \"\\u00EF\",\n\t\"Jcirc;\": \"\\u0134\",\n\t\"jcirc;\": \"\\u0135\",\n\t\"Jcy;\": \"\\u0419\",\n\t\"jcy;\": \"\\u0439\",\n\t\"Jfr;\": \"\\uD835\\uDD0D\",\n\t\"jfr;\": \"\\uD835\\uDD27\",\n\t\"jmath;\": \"\\u0237\",\n\t\"Jopf;\": \"\\uD835\\uDD41\",\n\t\"jopf;\": \"\\uD835\\uDD5B\",\n\t\"Jscr;\": \"\\uD835\\uDCA5\",\n\t\"jscr;\": \"\\uD835\\uDCBF\",\n\t\"Jsercy;\": \"\\u0408\",\n\t\"jsercy;\": \"\\u0458\",\n\t\"Jukcy;\": \"\\u0404\",\n\t\"jukcy;\": \"\\u0454\",\n\t\"Kappa;\": \"\\u039A\",\n\t\"kappa;\": \"\\u03BA\",\n\t\"kappav;\": \"\\u03F0\",\n\t\"Kcedil;\": \"\\u0136\",\n\t\"kcedil;\": \"\\u0137\",\n\t\"Kcy;\": \"\\u041A\",\n\t\"kcy;\": \"\\u043A\",\n\t\"Kfr;\": \"\\uD835\\uDD0E\",\n\t\"kfr;\": \"\\uD835\\uDD28\",\n\t\"kgreen;\": \"\\u0138\",\n\t\"KHcy;\": \"\\u0425\",\n\t\"khcy;\": \"\\u0445\",\n\t\"KJcy;\": \"\\u040C\",\n\t\"kjcy;\": \"\\u045C\",\n\t\"Kopf;\": \"\\uD835\\uDD42\",\n\t\"kopf;\": \"\\uD835\\uDD5C\",\n\t\"Kscr;\": \"\\uD835\\uDCA6\",\n\t\"kscr;\": \"\\uD835\\uDCC0\",\n\t\"lAarr;\": \"\\u21DA\",\n\t\"Lacute;\": \"\\u0139\",\n\t\"lacute;\": \"\\u013A\",\n\t\"laemptyv;\": \"\\u29B4\",\n\t\"lagran;\": \"\\u2112\",\n\t\"Lambda;\": \"\\u039B\",\n\t\"lambda;\": \"\\u03BB\",\n\t\"lang;\": \"\\u27E8\",\n\t\"Lang;\": \"\\u27EA\",\n\t\"langd;\": \"\\u2991\",\n\t\"langle;\": \"\\u27E8\",\n\t\"lap;\": \"\\u2A85\",\n\t\"Laplacetrf;\": \"\\u2112\",\n\t\"laquo;\": \"\\u00AB\",\n\t\"laquo\": \"\\u00AB\",\n\t\"larrb;\": \"\\u21E4\",\n\t\"larrbfs;\": \"\\u291F\",\n\t\"larr;\": \"\\u2190\",\n\t\"Larr;\": \"\\u219E\",\n\t\"lArr;\": \"\\u21D0\",\n\t\"larrfs;\": \"\\u291D\",\n\t\"larrhk;\": \"\\u21A9\",\n\t\"larrlp;\": \"\\u21AB\",\n\t\"larrpl;\": \"\\u2939\",\n\t\"larrsim;\": \"\\u2973\",\n\t\"larrtl;\": \"\\u21A2\",\n\t\"latail;\": \"\\u2919\",\n\t\"lAtail;\": \"\\u291B\",\n\t\"lat;\": \"\\u2AAB\",\n\t\"late;\": \"\\u2AAD\",\n\t\"lates;\": \"\\u2AAD\\uFE00\",\n\t\"lbarr;\": \"\\u290C\",\n\t\"lBarr;\": \"\\u290E\",\n\t\"lbbrk;\": \"\\u2772\",\n\t\"lbrace;\": \"\\u007B\",\n\t\"lbrack;\": \"\\u005B\",\n\t\"lbrke;\": \"\\u298B\",\n\t\"lbrksld;\": \"\\u298F\",\n\t\"lbrkslu;\": \"\\u298D\",\n\t\"Lcaron;\": \"\\u013D\",\n\t\"lcaron;\": \"\\u013E\",\n\t\"Lcedil;\": \"\\u013B\",\n\t\"lcedil;\": \"\\u013C\",\n\t\"lceil;\": \"\\u2308\",\n\t\"lcub;\": \"\\u007B\",\n\t\"Lcy;\": \"\\u041B\",\n\t\"lcy;\": \"\\u043B\",\n\t\"ldca;\": \"\\u2936\",\n\t\"ldquo;\": \"\\u201C\",\n\t\"ldquor;\": \"\\u201E\",\n\t\"ldrdhar;\": \"\\u2967\",\n\t\"ldrushar;\": \"\\u294B\",\n\t\"ldsh;\": \"\\u21B2\",\n\t\"le;\": \"\\u2264\",\n\t\"lE;\": \"\\u2266\",\n\t\"LeftAngleBracket;\": \"\\u27E8\",\n\t\"LeftArrowBar;\": \"\\u21E4\",\n\t\"leftarrow;\": \"\\u2190\",\n\t\"LeftArrow;\": \"\\u2190\",\n\t\"Leftarrow;\": \"\\u21D0\",\n\t\"LeftArrowRightArrow;\": \"\\u21C6\",\n\t\"leftarrowtail;\": \"\\u21A2\",\n\t\"LeftCeiling;\": \"\\u2308\",\n\t\"LeftDoubleBracket;\": \"\\u27E6\",\n\t\"LeftDownTeeVector;\": \"\\u2961\",\n\t\"LeftDownVectorBar;\": \"\\u2959\",\n\t\"LeftDownVector;\": \"\\u21C3\",\n\t\"LeftFloor;\": \"\\u230A\",\n\t\"leftharpoondown;\": \"\\u21BD\",\n\t\"leftharpoonup;\": \"\\u21BC\",\n\t\"leftleftarrows;\": \"\\u21C7\",\n\t\"leftrightarrow;\": \"\\u2194\",\n\t\"LeftRightArrow;\": \"\\u2194\",\n\t\"Leftrightarrow;\": \"\\u21D4\",\n\t\"leftrightarrows;\": \"\\u21C6\",\n\t\"leftrightharpoons;\": \"\\u21CB\",\n\t\"leftrightsquigarrow;\": \"\\u21AD\",\n\t\"LeftRightVector;\": \"\\u294E\",\n\t\"LeftTeeArrow;\": \"\\u21A4\",\n\t\"LeftTee;\": \"\\u22A3\",\n\t\"LeftTeeVector;\": \"\\u295A\",\n\t\"leftthreetimes;\": \"\\u22CB\",\n\t\"LeftTriangleBar;\": \"\\u29CF\",\n\t\"LeftTriangle;\": \"\\u22B2\",\n\t\"LeftTriangleEqual;\": \"\\u22B4\",\n\t\"LeftUpDownVector;\": \"\\u2951\",\n\t\"LeftUpTeeVector;\": \"\\u2960\",\n\t\"LeftUpVectorBar;\": \"\\u2958\",\n\t\"LeftUpVector;\": \"\\u21BF\",\n\t\"LeftVectorBar;\": \"\\u2952\",\n\t\"LeftVector;\": \"\\u21BC\",\n\t\"lEg;\": \"\\u2A8B\",\n\t\"leg;\": \"\\u22DA\",\n\t\"leq;\": \"\\u2264\",\n\t\"leqq;\": \"\\u2266\",\n\t\"leqslant;\": \"\\u2A7D\",\n\t\"lescc;\": \"\\u2AA8\",\n\t\"les;\": \"\\u2A7D\",\n\t\"lesdot;\": \"\\u2A7F\",\n\t\"lesdoto;\": \"\\u2A81\",\n\t\"lesdotor;\": \"\\u2A83\",\n\t\"lesg;\": \"\\u22DA\\uFE00\",\n\t\"lesges;\": \"\\u2A93\",\n\t\"lessapprox;\": \"\\u2A85\",\n\t\"lessdot;\": \"\\u22D6\",\n\t\"lesseqgtr;\": \"\\u22DA\",\n\t\"lesseqqgtr;\": \"\\u2A8B\",\n\t\"LessEqualGreater;\": \"\\u22DA\",\n\t\"LessFullEqual;\": \"\\u2266\",\n\t\"LessGreater;\": \"\\u2276\",\n\t\"lessgtr;\": \"\\u2276\",\n\t\"LessLess;\": \"\\u2AA1\",\n\t\"lesssim;\": \"\\u2272\",\n\t\"LessSlantEqual;\": \"\\u2A7D\",\n\t\"LessTilde;\": \"\\u2272\",\n\t\"lfisht;\": \"\\u297C\",\n\t\"lfloor;\": \"\\u230A\",\n\t\"Lfr;\": \"\\uD835\\uDD0F\",\n\t\"lfr;\": \"\\uD835\\uDD29\",\n\t\"lg;\": \"\\u2276\",\n\t\"lgE;\": \"\\u2A91\",\n\t\"lHar;\": \"\\u2962\",\n\t\"lhard;\": \"\\u21BD\",\n\t\"lharu;\": \"\\u21BC\",\n\t\"lharul;\": \"\\u296A\",\n\t\"lhblk;\": \"\\u2584\",\n\t\"LJcy;\": \"\\u0409\",\n\t\"ljcy;\": \"\\u0459\",\n\t\"llarr;\": \"\\u21C7\",\n\t\"ll;\": \"\\u226A\",\n\t\"Ll;\": \"\\u22D8\",\n\t\"llcorner;\": \"\\u231E\",\n\t\"Lleftarrow;\": \"\\u21DA\",\n\t\"llhard;\": \"\\u296B\",\n\t\"lltri;\": \"\\u25FA\",\n\t\"Lmidot;\": \"\\u013F\",\n\t\"lmidot;\": \"\\u0140\",\n\t\"lmoustache;\": \"\\u23B0\",\n\t\"lmoust;\": \"\\u23B0\",\n\t\"lnap;\": \"\\u2A89\",\n\t\"lnapprox;\": \"\\u2A89\",\n\t\"lne;\": \"\\u2A87\",\n\t\"lnE;\": \"\\u2268\",\n\t\"lneq;\": \"\\u2A87\",\n\t\"lneqq;\": \"\\u2268\",\n\t\"lnsim;\": \"\\u22E6\",\n\t\"loang;\": \"\\u27EC\",\n\t\"loarr;\": \"\\u21FD\",\n\t\"lobrk;\": \"\\u27E6\",\n\t\"longleftarrow;\": \"\\u27F5\",\n\t\"LongLeftArrow;\": \"\\u27F5\",\n\t\"Longleftarrow;\": \"\\u27F8\",\n\t\"longleftrightarrow;\": \"\\u27F7\",\n\t\"LongLeftRightArrow;\": \"\\u27F7\",\n\t\"Longleftrightarrow;\": \"\\u27FA\",\n\t\"longmapsto;\": \"\\u27FC\",\n\t\"longrightarrow;\": \"\\u27F6\",\n\t\"LongRightArrow;\": \"\\u27F6\",\n\t\"Longrightarrow;\": \"\\u27F9\",\n\t\"looparrowleft;\": \"\\u21AB\",\n\t\"looparrowright;\": \"\\u21AC\",\n\t\"lopar;\": \"\\u2985\",\n\t\"Lopf;\": \"\\uD835\\uDD43\",\n\t\"lopf;\": \"\\uD835\\uDD5D\",\n\t\"loplus;\": \"\\u2A2D\",\n\t\"lotimes;\": \"\\u2A34\",\n\t\"lowast;\": \"\\u2217\",\n\t\"lowbar;\": \"\\u005F\",\n\t\"LowerLeftArrow;\": \"\\u2199\",\n\t\"LowerRightArrow;\": \"\\u2198\",\n\t\"loz;\": \"\\u25CA\",\n\t\"lozenge;\": \"\\u25CA\",\n\t\"lozf;\": \"\\u29EB\",\n\t\"lpar;\": \"\\u0028\",\n\t\"lparlt;\": \"\\u2993\",\n\t\"lrarr;\": \"\\u21C6\",\n\t\"lrcorner;\": \"\\u231F\",\n\t\"lrhar;\": \"\\u21CB\",\n\t\"lrhard;\": \"\\u296D\",\n\t\"lrm;\": \"\\u200E\",\n\t\"lrtri;\": \"\\u22BF\",\n\t\"lsaquo;\": \"\\u2039\",\n\t\"lscr;\": \"\\uD835\\uDCC1\",\n\t\"Lscr;\": \"\\u2112\",\n\t\"lsh;\": \"\\u21B0\",\n\t\"Lsh;\": \"\\u21B0\",\n\t\"lsim;\": \"\\u2272\",\n\t\"lsime;\": \"\\u2A8D\",\n\t\"lsimg;\": \"\\u2A8F\",\n\t\"lsqb;\": \"\\u005B\",\n\t\"lsquo;\": \"\\u2018\",\n\t\"lsquor;\": \"\\u201A\",\n\t\"Lstrok;\": \"\\u0141\",\n\t\"lstrok;\": \"\\u0142\",\n\t\"ltcc;\": \"\\u2AA6\",\n\t\"ltcir;\": \"\\u2A79\",\n\t\"lt;\": \"\\u003C\",\n\t\"lt\": \"\\u003C\",\n\t\"LT;\": \"\\u003C\",\n\t\"LT\": \"\\u003C\",\n\t\"Lt;\": \"\\u226A\",\n\t\"ltdot;\": \"\\u22D6\",\n\t\"lthree;\": \"\\u22CB\",\n\t\"ltimes;\": \"\\u22C9\",\n\t\"ltlarr;\": \"\\u2976\",\n\t\"ltquest;\": \"\\u2A7B\",\n\t\"ltri;\": \"\\u25C3\",\n\t\"ltrie;\": \"\\u22B4\",\n\t\"ltrif;\": \"\\u25C2\",\n\t\"ltrPar;\": \"\\u2996\",\n\t\"lurdshar;\": \"\\u294A\",\n\t\"luruhar;\": \"\\u2966\",\n\t\"lvertneqq;\": \"\\u2268\\uFE00\",\n\t\"lvnE;\": \"\\u2268\\uFE00\",\n\t\"macr;\": \"\\u00AF\",\n\t\"macr\": \"\\u00AF\",\n\t\"male;\": \"\\u2642\",\n\t\"malt;\": \"\\u2720\",\n\t\"maltese;\": \"\\u2720\",\n\t\"Map;\": \"\\u2905\",\n\t\"map;\": \"\\u21A6\",\n\t\"mapsto;\": \"\\u21A6\",\n\t\"mapstodown;\": \"\\u21A7\",\n\t\"mapstoleft;\": \"\\u21A4\",\n\t\"mapstoup;\": \"\\u21A5\",\n\t\"marker;\": \"\\u25AE\",\n\t\"mcomma;\": \"\\u2A29\",\n\t\"Mcy;\": \"\\u041C\",\n\t\"mcy;\": \"\\u043C\",\n\t\"mdash;\": \"\\u2014\",\n\t\"mDDot;\": \"\\u223A\",\n\t\"measuredangle;\": \"\\u2221\",\n\t\"MediumSpace;\": \"\\u205F\",\n\t\"Mellintrf;\": \"\\u2133\",\n\t\"Mfr;\": \"\\uD835\\uDD10\",\n\t\"mfr;\": \"\\uD835\\uDD2A\",\n\t\"mho;\": \"\\u2127\",\n\t\"micro;\": \"\\u00B5\",\n\t\"micro\": \"\\u00B5\",\n\t\"midast;\": \"\\u002A\",\n\t\"midcir;\": \"\\u2AF0\",\n\t\"mid;\": \"\\u2223\",\n\t\"middot;\": \"\\u00B7\",\n\t\"middot\": \"\\u00B7\",\n\t\"minusb;\": \"\\u229F\",\n\t\"minus;\": \"\\u2212\",\n\t\"minusd;\": \"\\u2238\",\n\t\"minusdu;\": \"\\u2A2A\",\n\t\"MinusPlus;\": \"\\u2213\",\n\t\"mlcp;\": \"\\u2ADB\",\n\t\"mldr;\": \"\\u2026\",\n\t\"mnplus;\": \"\\u2213\",\n\t\"models;\": \"\\u22A7\",\n\t\"Mopf;\": \"\\uD835\\uDD44\",\n\t\"mopf;\": \"\\uD835\\uDD5E\",\n\t\"mp;\": \"\\u2213\",\n\t\"mscr;\": \"\\uD835\\uDCC2\",\n\t\"Mscr;\": \"\\u2133\",\n\t\"mstpos;\": \"\\u223E\",\n\t\"Mu;\": \"\\u039C\",\n\t\"mu;\": \"\\u03BC\",\n\t\"multimap;\": \"\\u22B8\",\n\t\"mumap;\": \"\\u22B8\",\n\t\"nabla;\": \"\\u2207\",\n\t\"Nacute;\": \"\\u0143\",\n\t\"nacute;\": \"\\u0144\",\n\t\"nang;\": \"\\u2220\\u20D2\",\n\t\"nap;\": \"\\u2249\",\n\t\"napE;\": \"\\u2A70\\u0338\",\n\t\"napid;\": \"\\u224B\\u0338\",\n\t\"napos;\": \"\\u0149\",\n\t\"napprox;\": \"\\u2249\",\n\t\"natural;\": \"\\u266E\",\n\t\"naturals;\": \"\\u2115\",\n\t\"natur;\": \"\\u266E\",\n\t\"nbsp;\": \"\\u00A0\",\n\t\"nbsp\": \"\\u00A0\",\n\t\"nbump;\": \"\\u224E\\u0338\",\n\t\"nbumpe;\": \"\\u224F\\u0338\",\n\t\"ncap;\": \"\\u2A43\",\n\t\"Ncaron;\": \"\\u0147\",\n\t\"ncaron;\": \"\\u0148\",\n\t\"Ncedil;\": \"\\u0145\",\n\t\"ncedil;\": \"\\u0146\",\n\t\"ncong;\": \"\\u2247\",\n\t\"ncongdot;\": \"\\u2A6D\\u0338\",\n\t\"ncup;\": \"\\u2A42\",\n\t\"Ncy;\": \"\\u041D\",\n\t\"ncy;\": \"\\u043D\",\n\t\"ndash;\": \"\\u2013\",\n\t\"nearhk;\": \"\\u2924\",\n\t\"nearr;\": \"\\u2197\",\n\t\"neArr;\": \"\\u21D7\",\n\t\"nearrow;\": \"\\u2197\",\n\t\"ne;\": \"\\u2260\",\n\t\"nedot;\": \"\\u2250\\u0338\",\n\t\"NegativeMediumSpace;\": \"\\u200B\",\n\t\"NegativeThickSpace;\": \"\\u200B\",\n\t\"NegativeThinSpace;\": \"\\u200B\",\n\t\"NegativeVeryThinSpace;\": \"\\u200B\",\n\t\"nequiv;\": \"\\u2262\",\n\t\"nesear;\": \"\\u2928\",\n\t\"nesim;\": \"\\u2242\\u0338\",\n\t\"NestedGreaterGreater;\": \"\\u226B\",\n\t\"NestedLessLess;\": \"\\u226A\",\n\t\"NewLine;\": \"\\u000A\",\n\t\"nexist;\": \"\\u2204\",\n\t\"nexists;\": \"\\u2204\",\n\t\"Nfr;\": \"\\uD835\\uDD11\",\n\t\"nfr;\": \"\\uD835\\uDD2B\",\n\t\"ngE;\": \"\\u2267\\u0338\",\n\t\"nge;\": \"\\u2271\",\n\t\"ngeq;\": \"\\u2271\",\n\t\"ngeqq;\": \"\\u2267\\u0338\",\n\t\"ngeqslant;\": \"\\u2A7E\\u0338\",\n\t\"nges;\": \"\\u2A7E\\u0338\",\n\t\"nGg;\": \"\\u22D9\\u0338\",\n\t\"ngsim;\": \"\\u2275\",\n\t\"nGt;\": \"\\u226B\\u20D2\",\n\t\"ngt;\": \"\\u226F\",\n\t\"ngtr;\": \"\\u226F\",\n\t\"nGtv;\": \"\\u226B\\u0338\",\n\t\"nharr;\": \"\\u21AE\",\n\t\"nhArr;\": \"\\u21CE\",\n\t\"nhpar;\": \"\\u2AF2\",\n\t\"ni;\": \"\\u220B\",\n\t\"nis;\": \"\\u22FC\",\n\t\"nisd;\": \"\\u22FA\",\n\t\"niv;\": \"\\u220B\",\n\t\"NJcy;\": \"\\u040A\",\n\t\"njcy;\": \"\\u045A\",\n\t\"nlarr;\": \"\\u219A\",\n\t\"nlArr;\": \"\\u21CD\",\n\t\"nldr;\": \"\\u2025\",\n\t\"nlE;\": \"\\u2266\\u0338\",\n\t\"nle;\": \"\\u2270\",\n\t\"nleftarrow;\": \"\\u219A\",\n\t\"nLeftarrow;\": \"\\u21CD\",\n\t\"nleftrightarrow;\": \"\\u21AE\",\n\t\"nLeftrightarrow;\": \"\\u21CE\",\n\t\"nleq;\": \"\\u2270\",\n\t\"nleqq;\": \"\\u2266\\u0338\",\n\t\"nleqslant;\": \"\\u2A7D\\u0338\",\n\t\"nles;\": \"\\u2A7D\\u0338\",\n\t\"nless;\": \"\\u226E\",\n\t\"nLl;\": \"\\u22D8\\u0338\",\n\t\"nlsim;\": \"\\u2274\",\n\t\"nLt;\": \"\\u226A\\u20D2\",\n\t\"nlt;\": \"\\u226E\",\n\t\"nltri;\": \"\\u22EA\",\n\t\"nltrie;\": \"\\u22EC\",\n\t\"nLtv;\": \"\\u226A\\u0338\",\n\t\"nmid;\": \"\\u2224\",\n\t\"NoBreak;\": \"\\u2060\",\n\t\"NonBreakingSpace;\": \"\\u00A0\",\n\t\"nopf;\": \"\\uD835\\uDD5F\",\n\t\"Nopf;\": \"\\u2115\",\n\t\"Not;\": \"\\u2AEC\",\n\t\"not;\": \"\\u00AC\",\n\t\"not\": \"\\u00AC\",\n\t\"NotCongruent;\": \"\\u2262\",\n\t\"NotCupCap;\": \"\\u226D\",\n\t\"NotDoubleVerticalBar;\": \"\\u2226\",\n\t\"NotElement;\": \"\\u2209\",\n\t\"NotEqual;\": \"\\u2260\",\n\t\"NotEqualTilde;\": \"\\u2242\\u0338\",\n\t\"NotExists;\": \"\\u2204\",\n\t\"NotGreater;\": \"\\u226F\",\n\t\"NotGreaterEqual;\": \"\\u2271\",\n\t\"NotGreaterFullEqual;\": \"\\u2267\\u0338\",\n\t\"NotGreaterGreater;\": \"\\u226B\\u0338\",\n\t\"NotGreaterLess;\": \"\\u2279\",\n\t\"NotGreaterSlantEqual;\": \"\\u2A7E\\u0338\",\n\t\"NotGreaterTilde;\": \"\\u2275\",\n\t\"NotHumpDownHump;\": \"\\u224E\\u0338\",\n\t\"NotHumpEqual;\": \"\\u224F\\u0338\",\n\t\"notin;\": \"\\u2209\",\n\t\"notindot;\": \"\\u22F5\\u0338\",\n\t\"notinE;\": \"\\u22F9\\u0338\",\n\t\"notinva;\": \"\\u2209\",\n\t\"notinvb;\": \"\\u22F7\",\n\t\"notinvc;\": \"\\u22F6\",\n\t\"NotLeftTriangleBar;\": \"\\u29CF\\u0338\",\n\t\"NotLeftTriangle;\": \"\\u22EA\",\n\t\"NotLeftTriangleEqual;\": \"\\u22EC\",\n\t\"NotLess;\": \"\\u226E\",\n\t\"NotLessEqual;\": \"\\u2270\",\n\t\"NotLessGreater;\": \"\\u2278\",\n\t\"NotLessLess;\": \"\\u226A\\u0338\",\n\t\"NotLessSlantEqual;\": \"\\u2A7D\\u0338\",\n\t\"NotLessTilde;\": \"\\u2274\",\n\t\"NotNestedGreaterGreater;\": \"\\u2AA2\\u0338\",\n\t\"NotNestedLessLess;\": \"\\u2AA1\\u0338\",\n\t\"notni;\": \"\\u220C\",\n\t\"notniva;\": \"\\u220C\",\n\t\"notnivb;\": \"\\u22FE\",\n\t\"notnivc;\": \"\\u22FD\",\n\t\"NotPrecedes;\": \"\\u2280\",\n\t\"NotPrecedesEqual;\": \"\\u2AAF\\u0338\",\n\t\"NotPrecedesSlantEqual;\": \"\\u22E0\",\n\t\"NotReverseElement;\": \"\\u220C\",\n\t\"NotRightTriangleBar;\": \"\\u29D0\\u0338\",\n\t\"NotRightTriangle;\": \"\\u22EB\",\n\t\"NotRightTriangleEqual;\": \"\\u22ED\",\n\t\"NotSquareSubset;\": \"\\u228F\\u0338\",\n\t\"NotSquareSubsetEqual;\": \"\\u22E2\",\n\t\"NotSquareSuperset;\": \"\\u2290\\u0338\",\n\t\"NotSquareSupersetEqual;\": \"\\u22E3\",\n\t\"NotSubset;\": \"\\u2282\\u20D2\",\n\t\"NotSubsetEqual;\": \"\\u2288\",\n\t\"NotSucceeds;\": \"\\u2281\",\n\t\"NotSucceedsEqual;\": \"\\u2AB0\\u0338\",\n\t\"NotSucceedsSlantEqual;\": \"\\u22E1\",\n\t\"NotSucceedsTilde;\": \"\\u227F\\u0338\",\n\t\"NotSuperset;\": \"\\u2283\\u20D2\",\n\t\"NotSupersetEqual;\": \"\\u2289\",\n\t\"NotTilde;\": \"\\u2241\",\n\t\"NotTildeEqual;\": \"\\u2244\",\n\t\"NotTildeFullEqual;\": \"\\u2247\",\n\t\"NotTildeTilde;\": \"\\u2249\",\n\t\"NotVerticalBar;\": \"\\u2224\",\n\t\"nparallel;\": \"\\u2226\",\n\t\"npar;\": \"\\u2226\",\n\t\"nparsl;\": \"\\u2AFD\\u20E5\",\n\t\"npart;\": \"\\u2202\\u0338\",\n\t\"npolint;\": \"\\u2A14\",\n\t\"npr;\": \"\\u2280\",\n\t\"nprcue;\": \"\\u22E0\",\n\t\"nprec;\": \"\\u2280\",\n\t\"npreceq;\": \"\\u2AAF\\u0338\",\n\t\"npre;\": \"\\u2AAF\\u0338\",\n\t\"nrarrc;\": \"\\u2933\\u0338\",\n\t\"nrarr;\": \"\\u219B\",\n\t\"nrArr;\": \"\\u21CF\",\n\t\"nrarrw;\": \"\\u219D\\u0338\",\n\t\"nrightarrow;\": \"\\u219B\",\n\t\"nRightarrow;\": \"\\u21CF\",\n\t\"nrtri;\": \"\\u22EB\",\n\t\"nrtrie;\": \"\\u22ED\",\n\t\"nsc;\": \"\\u2281\",\n\t\"nsccue;\": \"\\u22E1\",\n\t\"nsce;\": \"\\u2AB0\\u0338\",\n\t\"Nscr;\": \"\\uD835\\uDCA9\",\n\t\"nscr;\": \"\\uD835\\uDCC3\",\n\t\"nshortmid;\": \"\\u2224\",\n\t\"nshortparallel;\": \"\\u2226\",\n\t\"nsim;\": \"\\u2241\",\n\t\"nsime;\": \"\\u2244\",\n\t\"nsimeq;\": \"\\u2244\",\n\t\"nsmid;\": \"\\u2224\",\n\t\"nspar;\": \"\\u2226\",\n\t\"nsqsube;\": \"\\u22E2\",\n\t\"nsqsupe;\": \"\\u22E3\",\n\t\"nsub;\": \"\\u2284\",\n\t\"nsubE;\": \"\\u2AC5\\u0338\",\n\t\"nsube;\": \"\\u2288\",\n\t\"nsubset;\": \"\\u2282\\u20D2\",\n\t\"nsubseteq;\": \"\\u2288\",\n\t\"nsubseteqq;\": \"\\u2AC5\\u0338\",\n\t\"nsucc;\": \"\\u2281\",\n\t\"nsucceq;\": \"\\u2AB0\\u0338\",\n\t\"nsup;\": \"\\u2285\",\n\t\"nsupE;\": \"\\u2AC6\\u0338\",\n\t\"nsupe;\": \"\\u2289\",\n\t\"nsupset;\": \"\\u2283\\u20D2\",\n\t\"nsupseteq;\": \"\\u2289\",\n\t\"nsupseteqq;\": \"\\u2AC6\\u0338\",\n\t\"ntgl;\": \"\\u2279\",\n\t\"Ntilde;\": \"\\u00D1\",\n\t\"Ntilde\": \"\\u00D1\",\n\t\"ntilde;\": \"\\u00F1\",\n\t\"ntilde\": \"\\u00F1\",\n\t\"ntlg;\": \"\\u2278\",\n\t\"ntriangleleft;\": \"\\u22EA\",\n\t\"ntrianglelefteq;\": \"\\u22EC\",\n\t\"ntriangleright;\": \"\\u22EB\",\n\t\"ntrianglerighteq;\": \"\\u22ED\",\n\t\"Nu;\": \"\\u039D\",\n\t\"nu;\": \"\\u03BD\",\n\t\"num;\": \"\\u0023\",\n\t\"numero;\": \"\\u2116\",\n\t\"numsp;\": \"\\u2007\",\n\t\"nvap;\": \"\\u224D\\u20D2\",\n\t\"nvdash;\": \"\\u22AC\",\n\t\"nvDash;\": \"\\u22AD\",\n\t\"nVdash;\": \"\\u22AE\",\n\t\"nVDash;\": \"\\u22AF\",\n\t\"nvge;\": \"\\u2265\\u20D2\",\n\t\"nvgt;\": \"\\u003E\\u20D2\",\n\t\"nvHarr;\": \"\\u2904\",\n\t\"nvinfin;\": \"\\u29DE\",\n\t\"nvlArr;\": \"\\u2902\",\n\t\"nvle;\": \"\\u2264\\u20D2\",\n\t\"nvlt;\": \"\\u003C\\u20D2\",\n\t\"nvltrie;\": \"\\u22B4\\u20D2\",\n\t\"nvrArr;\": \"\\u2903\",\n\t\"nvrtrie;\": \"\\u22B5\\u20D2\",\n\t\"nvsim;\": \"\\u223C\\u20D2\",\n\t\"nwarhk;\": \"\\u2923\",\n\t\"nwarr;\": \"\\u2196\",\n\t\"nwArr;\": \"\\u21D6\",\n\t\"nwarrow;\": \"\\u2196\",\n\t\"nwnear;\": \"\\u2927\",\n\t\"Oacute;\": \"\\u00D3\",\n\t\"Oacute\": \"\\u00D3\",\n\t\"oacute;\": \"\\u00F3\",\n\t\"oacute\": \"\\u00F3\",\n\t\"oast;\": \"\\u229B\",\n\t\"Ocirc;\": \"\\u00D4\",\n\t\"Ocirc\": \"\\u00D4\",\n\t\"ocirc;\": \"\\u00F4\",\n\t\"ocirc\": \"\\u00F4\",\n\t\"ocir;\": \"\\u229A\",\n\t\"Ocy;\": \"\\u041E\",\n\t\"ocy;\": \"\\u043E\",\n\t\"odash;\": \"\\u229D\",\n\t\"Odblac;\": \"\\u0150\",\n\t\"odblac;\": \"\\u0151\",\n\t\"odiv;\": \"\\u2A38\",\n\t\"odot;\": \"\\u2299\",\n\t\"odsold;\": \"\\u29BC\",\n\t\"OElig;\": \"\\u0152\",\n\t\"oelig;\": \"\\u0153\",\n\t\"ofcir;\": \"\\u29BF\",\n\t\"Ofr;\": \"\\uD835\\uDD12\",\n\t\"ofr;\": \"\\uD835\\uDD2C\",\n\t\"ogon;\": \"\\u02DB\",\n\t\"Ograve;\": \"\\u00D2\",\n\t\"Ograve\": \"\\u00D2\",\n\t\"ograve;\": \"\\u00F2\",\n\t\"ograve\": \"\\u00F2\",\n\t\"ogt;\": \"\\u29C1\",\n\t\"ohbar;\": \"\\u29B5\",\n\t\"ohm;\": \"\\u03A9\",\n\t\"oint;\": \"\\u222E\",\n\t\"olarr;\": \"\\u21BA\",\n\t\"olcir;\": \"\\u29BE\",\n\t\"olcross;\": \"\\u29BB\",\n\t\"oline;\": \"\\u203E\",\n\t\"olt;\": \"\\u29C0\",\n\t\"Omacr;\": \"\\u014C\",\n\t\"omacr;\": \"\\u014D\",\n\t\"Omega;\": \"\\u03A9\",\n\t\"omega;\": \"\\u03C9\",\n\t\"Omicron;\": \"\\u039F\",\n\t\"omicron;\": \"\\u03BF\",\n\t\"omid;\": \"\\u29B6\",\n\t\"ominus;\": \"\\u2296\",\n\t\"Oopf;\": \"\\uD835\\uDD46\",\n\t\"oopf;\": \"\\uD835\\uDD60\",\n\t\"opar;\": \"\\u29B7\",\n\t\"OpenCurlyDoubleQuote;\": \"\\u201C\",\n\t\"OpenCurlyQuote;\": \"\\u2018\",\n\t\"operp;\": \"\\u29B9\",\n\t\"oplus;\": \"\\u2295\",\n\t\"orarr;\": \"\\u21BB\",\n\t\"Or;\": \"\\u2A54\",\n\t\"or;\": \"\\u2228\",\n\t\"ord;\": \"\\u2A5D\",\n\t\"order;\": \"\\u2134\",\n\t\"orderof;\": \"\\u2134\",\n\t\"ordf;\": \"\\u00AA\",\n\t\"ordf\": \"\\u00AA\",\n\t\"ordm;\": \"\\u00BA\",\n\t\"ordm\": \"\\u00BA\",\n\t\"origof;\": \"\\u22B6\",\n\t\"oror;\": \"\\u2A56\",\n\t\"orslope;\": \"\\u2A57\",\n\t\"orv;\": \"\\u2A5B\",\n\t\"oS;\": \"\\u24C8\",\n\t\"Oscr;\": \"\\uD835\\uDCAA\",\n\t\"oscr;\": \"\\u2134\",\n\t\"Oslash;\": \"\\u00D8\",\n\t\"Oslash\": \"\\u00D8\",\n\t\"oslash;\": \"\\u00F8\",\n\t\"oslash\": \"\\u00F8\",\n\t\"osol;\": \"\\u2298\",\n\t\"Otilde;\": \"\\u00D5\",\n\t\"Otilde\": \"\\u00D5\",\n\t\"otilde;\": \"\\u00F5\",\n\t\"otilde\": \"\\u00F5\",\n\t\"otimesas;\": \"\\u2A36\",\n\t\"Otimes;\": \"\\u2A37\",\n\t\"otimes;\": \"\\u2297\",\n\t\"Ouml;\": \"\\u00D6\",\n\t\"Ouml\": \"\\u00D6\",\n\t\"ouml;\": \"\\u00F6\",\n\t\"ouml\": \"\\u00F6\",\n\t\"ovbar;\": \"\\u233D\",\n\t\"OverBar;\": \"\\u203E\",\n\t\"OverBrace;\": \"\\u23DE\",\n\t\"OverBracket;\": \"\\u23B4\",\n\t\"OverParenthesis;\": \"\\u23DC\",\n\t\"para;\": \"\\u00B6\",\n\t\"para\": \"\\u00B6\",\n\t\"parallel;\": \"\\u2225\",\n\t\"par;\": \"\\u2225\",\n\t\"parsim;\": \"\\u2AF3\",\n\t\"parsl;\": \"\\u2AFD\",\n\t\"part;\": \"\\u2202\",\n\t\"PartialD;\": \"\\u2202\",\n\t\"Pcy;\": \"\\u041F\",\n\t\"pcy;\": \"\\u043F\",\n\t\"percnt;\": \"\\u0025\",\n\t\"period;\": \"\\u002E\",\n\t\"permil;\": \"\\u2030\",\n\t\"perp;\": \"\\u22A5\",\n\t\"pertenk;\": \"\\u2031\",\n\t\"Pfr;\": \"\\uD835\\uDD13\",\n\t\"pfr;\": \"\\uD835\\uDD2D\",\n\t\"Phi;\": \"\\u03A6\",\n\t\"phi;\": \"\\u03C6\",\n\t\"phiv;\": \"\\u03D5\",\n\t\"phmmat;\": \"\\u2133\",\n\t\"phone;\": \"\\u260E\",\n\t\"Pi;\": \"\\u03A0\",\n\t\"pi;\": \"\\u03C0\",\n\t\"pitchfork;\": \"\\u22D4\",\n\t\"piv;\": \"\\u03D6\",\n\t\"planck;\": \"\\u210F\",\n\t\"planckh;\": \"\\u210E\",\n\t\"plankv;\": \"\\u210F\",\n\t\"plusacir;\": \"\\u2A23\",\n\t\"plusb;\": \"\\u229E\",\n\t\"pluscir;\": \"\\u2A22\",\n\t\"plus;\": \"\\u002B\",\n\t\"plusdo;\": \"\\u2214\",\n\t\"plusdu;\": \"\\u2A25\",\n\t\"pluse;\": \"\\u2A72\",\n\t\"PlusMinus;\": \"\\u00B1\",\n\t\"plusmn;\": \"\\u00B1\",\n\t\"plusmn\": \"\\u00B1\",\n\t\"plussim;\": \"\\u2A26\",\n\t\"plustwo;\": \"\\u2A27\",\n\t\"pm;\": \"\\u00B1\",\n\t\"Poincareplane;\": \"\\u210C\",\n\t\"pointint;\": \"\\u2A15\",\n\t\"popf;\": \"\\uD835\\uDD61\",\n\t\"Popf;\": \"\\u2119\",\n\t\"pound;\": \"\\u00A3\",\n\t\"pound\": \"\\u00A3\",\n\t\"prap;\": \"\\u2AB7\",\n\t\"Pr;\": \"\\u2ABB\",\n\t\"pr;\": \"\\u227A\",\n\t\"prcue;\": \"\\u227C\",\n\t\"precapprox;\": \"\\u2AB7\",\n\t\"prec;\": \"\\u227A\",\n\t\"preccurlyeq;\": \"\\u227C\",\n\t\"Precedes;\": \"\\u227A\",\n\t\"PrecedesEqual;\": \"\\u2AAF\",\n\t\"PrecedesSlantEqual;\": \"\\u227C\",\n\t\"PrecedesTilde;\": \"\\u227E\",\n\t\"preceq;\": \"\\u2AAF\",\n\t\"precnapprox;\": \"\\u2AB9\",\n\t\"precneqq;\": \"\\u2AB5\",\n\t\"precnsim;\": \"\\u22E8\",\n\t\"pre;\": \"\\u2AAF\",\n\t\"prE;\": \"\\u2AB3\",\n\t\"precsim;\": \"\\u227E\",\n\t\"prime;\": \"\\u2032\",\n\t\"Prime;\": \"\\u2033\",\n\t\"primes;\": \"\\u2119\",\n\t\"prnap;\": \"\\u2AB9\",\n\t\"prnE;\": \"\\u2AB5\",\n\t\"prnsim;\": \"\\u22E8\",\n\t\"prod;\": \"\\u220F\",\n\t\"Product;\": \"\\u220F\",\n\t\"profalar;\": \"\\u232E\",\n\t\"profline;\": \"\\u2312\",\n\t\"profsurf;\": \"\\u2313\",\n\t\"prop;\": \"\\u221D\",\n\t\"Proportional;\": \"\\u221D\",\n\t\"Proportion;\": \"\\u2237\",\n\t\"propto;\": \"\\u221D\",\n\t\"prsim;\": \"\\u227E\",\n\t\"prurel;\": \"\\u22B0\",\n\t\"Pscr;\": \"\\uD835\\uDCAB\",\n\t\"pscr;\": \"\\uD835\\uDCC5\",\n\t\"Psi;\": \"\\u03A8\",\n\t\"psi;\": \"\\u03C8\",\n\t\"puncsp;\": \"\\u2008\",\n\t\"Qfr;\": \"\\uD835\\uDD14\",\n\t\"qfr;\": \"\\uD835\\uDD2E\",\n\t\"qint;\": \"\\u2A0C\",\n\t\"qopf;\": \"\\uD835\\uDD62\",\n\t\"Qopf;\": \"\\u211A\",\n\t\"qprime;\": \"\\u2057\",\n\t\"Qscr;\": \"\\uD835\\uDCAC\",\n\t\"qscr;\": \"\\uD835\\uDCC6\",\n\t\"quaternions;\": \"\\u210D\",\n\t\"quatint;\": \"\\u2A16\",\n\t\"quest;\": \"\\u003F\",\n\t\"questeq;\": \"\\u225F\",\n\t\"quot;\": \"\\u0022\",\n\t\"quot\": \"\\u0022\",\n\t\"QUOT;\": \"\\u0022\",\n\t\"QUOT\": \"\\u0022\",\n\t\"rAarr;\": \"\\u21DB\",\n\t\"race;\": \"\\u223D\\u0331\",\n\t\"Racute;\": \"\\u0154\",\n\t\"racute;\": \"\\u0155\",\n\t\"radic;\": \"\\u221A\",\n\t\"raemptyv;\": \"\\u29B3\",\n\t\"rang;\": \"\\u27E9\",\n\t\"Rang;\": \"\\u27EB\",\n\t\"rangd;\": \"\\u2992\",\n\t\"range;\": \"\\u29A5\",\n\t\"rangle;\": \"\\u27E9\",\n\t\"raquo;\": \"\\u00BB\",\n\t\"raquo\": \"\\u00BB\",\n\t\"rarrap;\": \"\\u2975\",\n\t\"rarrb;\": \"\\u21E5\",\n\t\"rarrbfs;\": \"\\u2920\",\n\t\"rarrc;\": \"\\u2933\",\n\t\"rarr;\": \"\\u2192\",\n\t\"Rarr;\": \"\\u21A0\",\n\t\"rArr;\": \"\\u21D2\",\n\t\"rarrfs;\": \"\\u291E\",\n\t\"rarrhk;\": \"\\u21AA\",\n\t\"rarrlp;\": \"\\u21AC\",\n\t\"rarrpl;\": \"\\u2945\",\n\t\"rarrsim;\": \"\\u2974\",\n\t\"Rarrtl;\": \"\\u2916\",\n\t\"rarrtl;\": \"\\u21A3\",\n\t\"rarrw;\": \"\\u219D\",\n\t\"ratail;\": \"\\u291A\",\n\t\"rAtail;\": \"\\u291C\",\n\t\"ratio;\": \"\\u2236\",\n\t\"rationals;\": \"\\u211A\",\n\t\"rbarr;\": \"\\u290D\",\n\t\"rBarr;\": \"\\u290F\",\n\t\"RBarr;\": \"\\u2910\",\n\t\"rbbrk;\": \"\\u2773\",\n\t\"rbrace;\": \"\\u007D\",\n\t\"rbrack;\": \"\\u005D\",\n\t\"rbrke;\": \"\\u298C\",\n\t\"rbrksld;\": \"\\u298E\",\n\t\"rbrkslu;\": \"\\u2990\",\n\t\"Rcaron;\": \"\\u0158\",\n\t\"rcaron;\": \"\\u0159\",\n\t\"Rcedil;\": \"\\u0156\",\n\t\"rcedil;\": \"\\u0157\",\n\t\"rceil;\": \"\\u2309\",\n\t\"rcub;\": \"\\u007D\",\n\t\"Rcy;\": \"\\u0420\",\n\t\"rcy;\": \"\\u0440\",\n\t\"rdca;\": \"\\u2937\",\n\t\"rdldhar;\": \"\\u2969\",\n\t\"rdquo;\": \"\\u201D\",\n\t\"rdquor;\": \"\\u201D\",\n\t\"rdsh;\": \"\\u21B3\",\n\t\"real;\": \"\\u211C\",\n\t\"realine;\": \"\\u211B\",\n\t\"realpart;\": \"\\u211C\",\n\t\"reals;\": \"\\u211D\",\n\t\"Re;\": \"\\u211C\",\n\t\"rect;\": \"\\u25AD\",\n\t\"reg;\": \"\\u00AE\",\n\t\"reg\": \"\\u00AE\",\n\t\"REG;\": \"\\u00AE\",\n\t\"REG\": \"\\u00AE\",\n\t\"ReverseElement;\": \"\\u220B\",\n\t\"ReverseEquilibrium;\": \"\\u21CB\",\n\t\"ReverseUpEquilibrium;\": \"\\u296F\",\n\t\"rfisht;\": \"\\u297D\",\n\t\"rfloor;\": \"\\u230B\",\n\t\"rfr;\": \"\\uD835\\uDD2F\",\n\t\"Rfr;\": \"\\u211C\",\n\t\"rHar;\": \"\\u2964\",\n\t\"rhard;\": \"\\u21C1\",\n\t\"rharu;\": \"\\u21C0\",\n\t\"rharul;\": \"\\u296C\",\n\t\"Rho;\": \"\\u03A1\",\n\t\"rho;\": \"\\u03C1\",\n\t\"rhov;\": \"\\u03F1\",\n\t\"RightAngleBracket;\": \"\\u27E9\",\n\t\"RightArrowBar;\": \"\\u21E5\",\n\t\"rightarrow;\": \"\\u2192\",\n\t\"RightArrow;\": \"\\u2192\",\n\t\"Rightarrow;\": \"\\u21D2\",\n\t\"RightArrowLeftArrow;\": \"\\u21C4\",\n\t\"rightarrowtail;\": \"\\u21A3\",\n\t\"RightCeiling;\": \"\\u2309\",\n\t\"RightDoubleBracket;\": \"\\u27E7\",\n\t\"RightDownTeeVector;\": \"\\u295D\",\n\t\"RightDownVectorBar;\": \"\\u2955\",\n\t\"RightDownVector;\": \"\\u21C2\",\n\t\"RightFloor;\": \"\\u230B\",\n\t\"rightharpoondown;\": \"\\u21C1\",\n\t\"rightharpoonup;\": \"\\u21C0\",\n\t\"rightleftarrows;\": \"\\u21C4\",\n\t\"rightleftharpoons;\": \"\\u21CC\",\n\t\"rightrightarrows;\": \"\\u21C9\",\n\t\"rightsquigarrow;\": \"\\u219D\",\n\t\"RightTeeArrow;\": \"\\u21A6\",\n\t\"RightTee;\": \"\\u22A2\",\n\t\"RightTeeVector;\": \"\\u295B\",\n\t\"rightthreetimes;\": \"\\u22CC\",\n\t\"RightTriangleBar;\": \"\\u29D0\",\n\t\"RightTriangle;\": \"\\u22B3\",\n\t\"RightTriangleEqual;\": \"\\u22B5\",\n\t\"RightUpDownVector;\": \"\\u294F\",\n\t\"RightUpTeeVector;\": \"\\u295C\",\n\t\"RightUpVectorBar;\": \"\\u2954\",\n\t\"RightUpVector;\": \"\\u21BE\",\n\t\"RightVectorBar;\": \"\\u2953\",\n\t\"RightVector;\": \"\\u21C0\",\n\t\"ring;\": \"\\u02DA\",\n\t\"risingdotseq;\": \"\\u2253\",\n\t\"rlarr;\": \"\\u21C4\",\n\t\"rlhar;\": \"\\u21CC\",\n\t\"rlm;\": \"\\u200F\",\n\t\"rmoustache;\": \"\\u23B1\",\n\t\"rmoust;\": \"\\u23B1\",\n\t\"rnmid;\": \"\\u2AEE\",\n\t\"roang;\": \"\\u27ED\",\n\t\"roarr;\": \"\\u21FE\",\n\t\"robrk;\": \"\\u27E7\",\n\t\"ropar;\": \"\\u2986\",\n\t\"ropf;\": \"\\uD835\\uDD63\",\n\t\"Ropf;\": \"\\u211D\",\n\t\"roplus;\": \"\\u2A2E\",\n\t\"rotimes;\": \"\\u2A35\",\n\t\"RoundImplies;\": \"\\u2970\",\n\t\"rpar;\": \"\\u0029\",\n\t\"rpargt;\": \"\\u2994\",\n\t\"rppolint;\": \"\\u2A12\",\n\t\"rrarr;\": \"\\u21C9\",\n\t\"Rrightarrow;\": \"\\u21DB\",\n\t\"rsaquo;\": \"\\u203A\",\n\t\"rscr;\": \"\\uD835\\uDCC7\",\n\t\"Rscr;\": \"\\u211B\",\n\t\"rsh;\": \"\\u21B1\",\n\t\"Rsh;\": \"\\u21B1\",\n\t\"rsqb;\": \"\\u005D\",\n\t\"rsquo;\": \"\\u2019\",\n\t\"rsquor;\": \"\\u2019\",\n\t\"rthree;\": \"\\u22CC\",\n\t\"rtimes;\": \"\\u22CA\",\n\t\"rtri;\": \"\\u25B9\",\n\t\"rtrie;\": \"\\u22B5\",\n\t\"rtrif;\": \"\\u25B8\",\n\t\"rtriltri;\": \"\\u29CE\",\n\t\"RuleDelayed;\": \"\\u29F4\",\n\t\"ruluhar;\": \"\\u2968\",\n\t\"rx;\": \"\\u211E\",\n\t\"Sacute;\": \"\\u015A\",\n\t\"sacute;\": \"\\u015B\",\n\t\"sbquo;\": \"\\u201A\",\n\t\"scap;\": \"\\u2AB8\",\n\t\"Scaron;\": \"\\u0160\",\n\t\"scaron;\": \"\\u0161\",\n\t\"Sc;\": \"\\u2ABC\",\n\t\"sc;\": \"\\u227B\",\n\t\"sccue;\": \"\\u227D\",\n\t\"sce;\": \"\\u2AB0\",\n\t\"scE;\": \"\\u2AB4\",\n\t\"Scedil;\": \"\\u015E\",\n\t\"scedil;\": \"\\u015F\",\n\t\"Scirc;\": \"\\u015C\",\n\t\"scirc;\": \"\\u015D\",\n\t\"scnap;\": \"\\u2ABA\",\n\t\"scnE;\": \"\\u2AB6\",\n\t\"scnsim;\": \"\\u22E9\",\n\t\"scpolint;\": \"\\u2A13\",\n\t\"scsim;\": \"\\u227F\",\n\t\"Scy;\": \"\\u0421\",\n\t\"scy;\": \"\\u0441\",\n\t\"sdotb;\": \"\\u22A1\",\n\t\"sdot;\": \"\\u22C5\",\n\t\"sdote;\": \"\\u2A66\",\n\t\"searhk;\": \"\\u2925\",\n\t\"searr;\": \"\\u2198\",\n\t\"seArr;\": \"\\u21D8\",\n\t\"searrow;\": \"\\u2198\",\n\t\"sect;\": \"\\u00A7\",\n\t\"sect\": \"\\u00A7\",\n\t\"semi;\": \"\\u003B\",\n\t\"seswar;\": \"\\u2929\",\n\t\"setminus;\": \"\\u2216\",\n\t\"setmn;\": \"\\u2216\",\n\t\"sext;\": \"\\u2736\",\n\t\"Sfr;\": \"\\uD835\\uDD16\",\n\t\"sfr;\": \"\\uD835\\uDD30\",\n\t\"sfrown;\": \"\\u2322\",\n\t\"sharp;\": \"\\u266F\",\n\t\"SHCHcy;\": \"\\u0429\",\n\t\"shchcy;\": \"\\u0449\",\n\t\"SHcy;\": \"\\u0428\",\n\t\"shcy;\": \"\\u0448\",\n\t\"ShortDownArrow;\": \"\\u2193\",\n\t\"ShortLeftArrow;\": \"\\u2190\",\n\t\"shortmid;\": \"\\u2223\",\n\t\"shortparallel;\": \"\\u2225\",\n\t\"ShortRightArrow;\": \"\\u2192\",\n\t\"ShortUpArrow;\": \"\\u2191\",\n\t\"shy;\": \"\\u00AD\",\n\t\"shy\": \"\\u00AD\",\n\t\"Sigma;\": \"\\u03A3\",\n\t\"sigma;\": \"\\u03C3\",\n\t\"sigmaf;\": \"\\u03C2\",\n\t\"sigmav;\": \"\\u03C2\",\n\t\"sim;\": \"\\u223C\",\n\t\"simdot;\": \"\\u2A6A\",\n\t\"sime;\": \"\\u2243\",\n\t\"simeq;\": \"\\u2243\",\n\t\"simg;\": \"\\u2A9E\",\n\t\"simgE;\": \"\\u2AA0\",\n\t\"siml;\": \"\\u2A9D\",\n\t\"simlE;\": \"\\u2A9F\",\n\t\"simne;\": \"\\u2246\",\n\t\"simplus;\": \"\\u2A24\",\n\t\"simrarr;\": \"\\u2972\",\n\t\"slarr;\": \"\\u2190\",\n\t\"SmallCircle;\": \"\\u2218\",\n\t\"smallsetminus;\": \"\\u2216\",\n\t\"smashp;\": \"\\u2A33\",\n\t\"smeparsl;\": \"\\u29E4\",\n\t\"smid;\": \"\\u2223\",\n\t\"smile;\": \"\\u2323\",\n\t\"smt;\": \"\\u2AAA\",\n\t\"smte;\": \"\\u2AAC\",\n\t\"smtes;\": \"\\u2AAC\\uFE00\",\n\t\"SOFTcy;\": \"\\u042C\",\n\t\"softcy;\": \"\\u044C\",\n\t\"solbar;\": \"\\u233F\",\n\t\"solb;\": \"\\u29C4\",\n\t\"sol;\": \"\\u002F\",\n\t\"Sopf;\": \"\\uD835\\uDD4A\",\n\t\"sopf;\": \"\\uD835\\uDD64\",\n\t\"spades;\": \"\\u2660\",\n\t\"spadesuit;\": \"\\u2660\",\n\t\"spar;\": \"\\u2225\",\n\t\"sqcap;\": \"\\u2293\",\n\t\"sqcaps;\": \"\\u2293\\uFE00\",\n\t\"sqcup;\": \"\\u2294\",\n\t\"sqcups;\": \"\\u2294\\uFE00\",\n\t\"Sqrt;\": \"\\u221A\",\n\t\"sqsub;\": \"\\u228F\",\n\t\"sqsube;\": \"\\u2291\",\n\t\"sqsubset;\": \"\\u228F\",\n\t\"sqsubseteq;\": \"\\u2291\",\n\t\"sqsup;\": \"\\u2290\",\n\t\"sqsupe;\": \"\\u2292\",\n\t\"sqsupset;\": \"\\u2290\",\n\t\"sqsupseteq;\": \"\\u2292\",\n\t\"square;\": \"\\u25A1\",\n\t\"Square;\": \"\\u25A1\",\n\t\"SquareIntersection;\": \"\\u2293\",\n\t\"SquareSubset;\": \"\\u228F\",\n\t\"SquareSubsetEqual;\": \"\\u2291\",\n\t\"SquareSuperset;\": \"\\u2290\",\n\t\"SquareSupersetEqual;\": \"\\u2292\",\n\t\"SquareUnion;\": \"\\u2294\",\n\t\"squarf;\": \"\\u25AA\",\n\t\"squ;\": \"\\u25A1\",\n\t\"squf;\": \"\\u25AA\",\n\t\"srarr;\": \"\\u2192\",\n\t\"Sscr;\": \"\\uD835\\uDCAE\",\n\t\"sscr;\": \"\\uD835\\uDCC8\",\n\t\"ssetmn;\": \"\\u2216\",\n\t\"ssmile;\": \"\\u2323\",\n\t\"sstarf;\": \"\\u22C6\",\n\t\"Star;\": \"\\u22C6\",\n\t\"star;\": \"\\u2606\",\n\t\"starf;\": \"\\u2605\",\n\t\"straightepsilon;\": \"\\u03F5\",\n\t\"straightphi;\": \"\\u03D5\",\n\t\"strns;\": \"\\u00AF\",\n\t\"sub;\": \"\\u2282\",\n\t\"Sub;\": \"\\u22D0\",\n\t\"subdot;\": \"\\u2ABD\",\n\t\"subE;\": \"\\u2AC5\",\n\t\"sube;\": \"\\u2286\",\n\t\"subedot;\": \"\\u2AC3\",\n\t\"submult;\": \"\\u2AC1\",\n\t\"subnE;\": \"\\u2ACB\",\n\t\"subne;\": \"\\u228A\",\n\t\"subplus;\": \"\\u2ABF\",\n\t\"subrarr;\": \"\\u2979\",\n\t\"subset;\": \"\\u2282\",\n\t\"Subset;\": \"\\u22D0\",\n\t\"subseteq;\": \"\\u2286\",\n\t\"subseteqq;\": \"\\u2AC5\",\n\t\"SubsetEqual;\": \"\\u2286\",\n\t\"subsetneq;\": \"\\u228A\",\n\t\"subsetneqq;\": \"\\u2ACB\",\n\t\"subsim;\": \"\\u2AC7\",\n\t\"subsub;\": \"\\u2AD5\",\n\t\"subsup;\": \"\\u2AD3\",\n\t\"succapprox;\": \"\\u2AB8\",\n\t\"succ;\": \"\\u227B\",\n\t\"succcurlyeq;\": \"\\u227D\",\n\t\"Succeeds;\": \"\\u227B\",\n\t\"SucceedsEqual;\": \"\\u2AB0\",\n\t\"SucceedsSlantEqual;\": \"\\u227D\",\n\t\"SucceedsTilde;\": \"\\u227F\",\n\t\"succeq;\": \"\\u2AB0\",\n\t\"succnapprox;\": \"\\u2ABA\",\n\t\"succneqq;\": \"\\u2AB6\",\n\t\"succnsim;\": \"\\u22E9\",\n\t\"succsim;\": \"\\u227F\",\n\t\"SuchThat;\": \"\\u220B\",\n\t\"sum;\": \"\\u2211\",\n\t\"Sum;\": \"\\u2211\",\n\t\"sung;\": \"\\u266A\",\n\t\"sup1;\": \"\\u00B9\",\n\t\"sup1\": \"\\u00B9\",\n\t\"sup2;\": \"\\u00B2\",\n\t\"sup2\": \"\\u00B2\",\n\t\"sup3;\": \"\\u00B3\",\n\t\"sup3\": \"\\u00B3\",\n\t\"sup;\": \"\\u2283\",\n\t\"Sup;\": \"\\u22D1\",\n\t\"supdot;\": \"\\u2ABE\",\n\t\"supdsub;\": \"\\u2AD8\",\n\t\"supE;\": \"\\u2AC6\",\n\t\"supe;\": \"\\u2287\",\n\t\"supedot;\": \"\\u2AC4\",\n\t\"Superset;\": \"\\u2283\",\n\t\"SupersetEqual;\": \"\\u2287\",\n\t\"suphsol;\": \"\\u27C9\",\n\t\"suphsub;\": \"\\u2AD7\",\n\t\"suplarr;\": \"\\u297B\",\n\t\"supmult;\": \"\\u2AC2\",\n\t\"supnE;\": \"\\u2ACC\",\n\t\"supne;\": \"\\u228B\",\n\t\"supplus;\": \"\\u2AC0\",\n\t\"supset;\": \"\\u2283\",\n\t\"Supset;\": \"\\u22D1\",\n\t\"supseteq;\": \"\\u2287\",\n\t\"supseteqq;\": \"\\u2AC6\",\n\t\"supsetneq;\": \"\\u228B\",\n\t\"supsetneqq;\": \"\\u2ACC\",\n\t\"supsim;\": \"\\u2AC8\",\n\t\"supsub;\": \"\\u2AD4\",\n\t\"supsup;\": \"\\u2AD6\",\n\t\"swarhk;\": \"\\u2926\",\n\t\"swarr;\": \"\\u2199\",\n\t\"swArr;\": \"\\u21D9\",\n\t\"swarrow;\": \"\\u2199\",\n\t\"swnwar;\": \"\\u292A\",\n\t\"szlig;\": \"\\u00DF\",\n\t\"szlig\": \"\\u00DF\",\n\t\"Tab;\": \"\\u0009\",\n\t\"target;\": \"\\u2316\",\n\t\"Tau;\": \"\\u03A4\",\n\t\"tau;\": \"\\u03C4\",\n\t\"tbrk;\": \"\\u23B4\",\n\t\"Tcaron;\": \"\\u0164\",\n\t\"tcaron;\": \"\\u0165\",\n\t\"Tcedil;\": \"\\u0162\",\n\t\"tcedil;\": \"\\u0163\",\n\t\"Tcy;\": \"\\u0422\",\n\t\"tcy;\": \"\\u0442\",\n\t\"tdot;\": \"\\u20DB\",\n\t\"telrec;\": \"\\u2315\",\n\t\"Tfr;\": \"\\uD835\\uDD17\",\n\t\"tfr;\": \"\\uD835\\uDD31\",\n\t\"there4;\": \"\\u2234\",\n\t\"therefore;\": \"\\u2234\",\n\t\"Therefore;\": \"\\u2234\",\n\t\"Theta;\": \"\\u0398\",\n\t\"theta;\": \"\\u03B8\",\n\t\"thetasym;\": \"\\u03D1\",\n\t\"thetav;\": \"\\u03D1\",\n\t\"thickapprox;\": \"\\u2248\",\n\t\"thicksim;\": \"\\u223C\",\n\t\"ThickSpace;\": \"\\u205F\\u200A\",\n\t\"ThinSpace;\": \"\\u2009\",\n\t\"thinsp;\": \"\\u2009\",\n\t\"thkap;\": \"\\u2248\",\n\t\"thksim;\": \"\\u223C\",\n\t\"THORN;\": \"\\u00DE\",\n\t\"THORN\": \"\\u00DE\",\n\t\"thorn;\": \"\\u00FE\",\n\t\"thorn\": \"\\u00FE\",\n\t\"tilde;\": \"\\u02DC\",\n\t\"Tilde;\": \"\\u223C\",\n\t\"TildeEqual;\": \"\\u2243\",\n\t\"TildeFullEqual;\": \"\\u2245\",\n\t\"TildeTilde;\": \"\\u2248\",\n\t\"timesbar;\": \"\\u2A31\",\n\t\"timesb;\": \"\\u22A0\",\n\t\"times;\": \"\\u00D7\",\n\t\"times\": \"\\u00D7\",\n\t\"timesd;\": \"\\u2A30\",\n\t\"tint;\": \"\\u222D\",\n\t\"toea;\": \"\\u2928\",\n\t\"topbot;\": \"\\u2336\",\n\t\"topcir;\": \"\\u2AF1\",\n\t\"top;\": \"\\u22A4\",\n\t\"Topf;\": \"\\uD835\\uDD4B\",\n\t\"topf;\": \"\\uD835\\uDD65\",\n\t\"topfork;\": \"\\u2ADA\",\n\t\"tosa;\": \"\\u2929\",\n\t\"tprime;\": \"\\u2034\",\n\t\"trade;\": \"\\u2122\",\n\t\"TRADE;\": \"\\u2122\",\n\t\"triangle;\": \"\\u25B5\",\n\t\"triangledown;\": \"\\u25BF\",\n\t\"triangleleft;\": \"\\u25C3\",\n\t\"trianglelefteq;\": \"\\u22B4\",\n\t\"triangleq;\": \"\\u225C\",\n\t\"triangleright;\": \"\\u25B9\",\n\t\"trianglerighteq;\": \"\\u22B5\",\n\t\"tridot;\": \"\\u25EC\",\n\t\"trie;\": \"\\u225C\",\n\t\"triminus;\": \"\\u2A3A\",\n\t\"TripleDot;\": \"\\u20DB\",\n\t\"triplus;\": \"\\u2A39\",\n\t\"trisb;\": \"\\u29CD\",\n\t\"tritime;\": \"\\u2A3B\",\n\t\"trpezium;\": \"\\u23E2\",\n\t\"Tscr;\": \"\\uD835\\uDCAF\",\n\t\"tscr;\": \"\\uD835\\uDCC9\",\n\t\"TScy;\": \"\\u0426\",\n\t\"tscy;\": \"\\u0446\",\n\t\"TSHcy;\": \"\\u040B\",\n\t\"tshcy;\": \"\\u045B\",\n\t\"Tstrok;\": \"\\u0166\",\n\t\"tstrok;\": \"\\u0167\",\n\t\"twixt;\": \"\\u226C\",\n\t\"twoheadleftarrow;\": \"\\u219E\",\n\t\"twoheadrightarrow;\": \"\\u21A0\",\n\t\"Uacute;\": \"\\u00DA\",\n\t\"Uacute\": \"\\u00DA\",\n\t\"uacute;\": \"\\u00FA\",\n\t\"uacute\": \"\\u00FA\",\n\t\"uarr;\": \"\\u2191\",\n\t\"Uarr;\": \"\\u219F\",\n\t\"uArr;\": \"\\u21D1\",\n\t\"Uarrocir;\": \"\\u2949\",\n\t\"Ubrcy;\": \"\\u040E\",\n\t\"ubrcy;\": \"\\u045E\",\n\t\"Ubreve;\": \"\\u016C\",\n\t\"ubreve;\": \"\\u016D\",\n\t\"Ucirc;\": \"\\u00DB\",\n\t\"Ucirc\": \"\\u00DB\",\n\t\"ucirc;\": \"\\u00FB\",\n\t\"ucirc\": \"\\u00FB\",\n\t\"Ucy;\": \"\\u0423\",\n\t\"ucy;\": \"\\u0443\",\n\t\"udarr;\": \"\\u21C5\",\n\t\"Udblac;\": \"\\u0170\",\n\t\"udblac;\": \"\\u0171\",\n\t\"udhar;\": \"\\u296E\",\n\t\"ufisht;\": \"\\u297E\",\n\t\"Ufr;\": \"\\uD835\\uDD18\",\n\t\"ufr;\": \"\\uD835\\uDD32\",\n\t\"Ugrave;\": \"\\u00D9\",\n\t\"Ugrave\": \"\\u00D9\",\n\t\"ugrave;\": \"\\u00F9\",\n\t\"ugrave\": \"\\u00F9\",\n\t\"uHar;\": \"\\u2963\",\n\t\"uharl;\": \"\\u21BF\",\n\t\"uharr;\": \"\\u21BE\",\n\t\"uhblk;\": \"\\u2580\",\n\t\"ulcorn;\": \"\\u231C\",\n\t\"ulcorner;\": \"\\u231C\",\n\t\"ulcrop;\": \"\\u230F\",\n\t\"ultri;\": \"\\u25F8\",\n\t\"Umacr;\": \"\\u016A\",\n\t\"umacr;\": \"\\u016B\",\n\t\"uml;\": \"\\u00A8\",\n\t\"uml\": \"\\u00A8\",\n\t\"UnderBar;\": \"\\u005F\",\n\t\"UnderBrace;\": \"\\u23DF\",\n\t\"UnderBracket;\": \"\\u23B5\",\n\t\"UnderParenthesis;\": \"\\u23DD\",\n\t\"Union;\": \"\\u22C3\",\n\t\"UnionPlus;\": \"\\u228E\",\n\t\"Uogon;\": \"\\u0172\",\n\t\"uogon;\": \"\\u0173\",\n\t\"Uopf;\": \"\\uD835\\uDD4C\",\n\t\"uopf;\": \"\\uD835\\uDD66\",\n\t\"UpArrowBar;\": \"\\u2912\",\n\t\"uparrow;\": \"\\u2191\",\n\t\"UpArrow;\": \"\\u2191\",\n\t\"Uparrow;\": \"\\u21D1\",\n\t\"UpArrowDownArrow;\": \"\\u21C5\",\n\t\"updownarrow;\": \"\\u2195\",\n\t\"UpDownArrow;\": \"\\u2195\",\n\t\"Updownarrow;\": \"\\u21D5\",\n\t\"UpEquilibrium;\": \"\\u296E\",\n\t\"upharpoonleft;\": \"\\u21BF\",\n\t\"upharpoonright;\": \"\\u21BE\",\n\t\"uplus;\": \"\\u228E\",\n\t\"UpperLeftArrow;\": \"\\u2196\",\n\t\"UpperRightArrow;\": \"\\u2197\",\n\t\"upsi;\": \"\\u03C5\",\n\t\"Upsi;\": \"\\u03D2\",\n\t\"upsih;\": \"\\u03D2\",\n\t\"Upsilon;\": \"\\u03A5\",\n\t\"upsilon;\": \"\\u03C5\",\n\t\"UpTeeArrow;\": \"\\u21A5\",\n\t\"UpTee;\": \"\\u22A5\",\n\t\"upuparrows;\": \"\\u21C8\",\n\t\"urcorn;\": \"\\u231D\",\n\t\"urcorner;\": \"\\u231D\",\n\t\"urcrop;\": \"\\u230E\",\n\t\"Uring;\": \"\\u016E\",\n\t\"uring;\": \"\\u016F\",\n\t\"urtri;\": \"\\u25F9\",\n\t\"Uscr;\": \"\\uD835\\uDCB0\",\n\t\"uscr;\": \"\\uD835\\uDCCA\",\n\t\"utdot;\": \"\\u22F0\",\n\t\"Utilde;\": \"\\u0168\",\n\t\"utilde;\": \"\\u0169\",\n\t\"utri;\": \"\\u25B5\",\n\t\"utrif;\": \"\\u25B4\",\n\t\"uuarr;\": \"\\u21C8\",\n\t\"Uuml;\": \"\\u00DC\",\n\t\"Uuml\": \"\\u00DC\",\n\t\"uuml;\": \"\\u00FC\",\n\t\"uuml\": \"\\u00FC\",\n\t\"uwangle;\": \"\\u29A7\",\n\t\"vangrt;\": \"\\u299C\",\n\t\"varepsilon;\": \"\\u03F5\",\n\t\"varkappa;\": \"\\u03F0\",\n\t\"varnothing;\": \"\\u2205\",\n\t\"varphi;\": \"\\u03D5\",\n\t\"varpi;\": \"\\u03D6\",\n\t\"varpropto;\": \"\\u221D\",\n\t\"varr;\": \"\\u2195\",\n\t\"vArr;\": \"\\u21D5\",\n\t\"varrho;\": \"\\u03F1\",\n\t\"varsigma;\": \"\\u03C2\",\n\t\"varsubsetneq;\": \"\\u228A\\uFE00\",\n\t\"varsubsetneqq;\": \"\\u2ACB\\uFE00\",\n\t\"varsupsetneq;\": \"\\u228B\\uFE00\",\n\t\"varsupsetneqq;\": \"\\u2ACC\\uFE00\",\n\t\"vartheta;\": \"\\u03D1\",\n\t\"vartriangleleft;\": \"\\u22B2\",\n\t\"vartriangleright;\": \"\\u22B3\",\n\t\"vBar;\": \"\\u2AE8\",\n\t\"Vbar;\": \"\\u2AEB\",\n\t\"vBarv;\": \"\\u2AE9\",\n\t\"Vcy;\": \"\\u0412\",\n\t\"vcy;\": \"\\u0432\",\n\t\"vdash;\": \"\\u22A2\",\n\t\"vDash;\": \"\\u22A8\",\n\t\"Vdash;\": \"\\u22A9\",\n\t\"VDash;\": \"\\u22AB\",\n\t\"Vdashl;\": \"\\u2AE6\",\n\t\"veebar;\": \"\\u22BB\",\n\t\"vee;\": \"\\u2228\",\n\t\"Vee;\": \"\\u22C1\",\n\t\"veeeq;\": \"\\u225A\",\n\t\"vellip;\": \"\\u22EE\",\n\t\"verbar;\": \"\\u007C\",\n\t\"Verbar;\": \"\\u2016\",\n\t\"vert;\": \"\\u007C\",\n\t\"Vert;\": \"\\u2016\",\n\t\"VerticalBar;\": \"\\u2223\",\n\t\"VerticalLine;\": \"\\u007C\",\n\t\"VerticalSeparator;\": \"\\u2758\",\n\t\"VerticalTilde;\": \"\\u2240\",\n\t\"VeryThinSpace;\": \"\\u200A\",\n\t\"Vfr;\": \"\\uD835\\uDD19\",\n\t\"vfr;\": \"\\uD835\\uDD33\",\n\t\"vltri;\": \"\\u22B2\",\n\t\"vnsub;\": \"\\u2282\\u20D2\",\n\t\"vnsup;\": \"\\u2283\\u20D2\",\n\t\"Vopf;\": \"\\uD835\\uDD4D\",\n\t\"vopf;\": \"\\uD835\\uDD67\",\n\t\"vprop;\": \"\\u221D\",\n\t\"vrtri;\": \"\\u22B3\",\n\t\"Vscr;\": \"\\uD835\\uDCB1\",\n\t\"vscr;\": \"\\uD835\\uDCCB\",\n\t\"vsubnE;\": \"\\u2ACB\\uFE00\",\n\t\"vsubne;\": \"\\u228A\\uFE00\",\n\t\"vsupnE;\": \"\\u2ACC\\uFE00\",\n\t\"vsupne;\": \"\\u228B\\uFE00\",\n\t\"Vvdash;\": \"\\u22AA\",\n\t\"vzigzag;\": \"\\u299A\",\n\t\"Wcirc;\": \"\\u0174\",\n\t\"wcirc;\": \"\\u0175\",\n\t\"wedbar;\": \"\\u2A5F\",\n\t\"wedge;\": \"\\u2227\",\n\t\"Wedge;\": \"\\u22C0\",\n\t\"wedgeq;\": \"\\u2259\",\n\t\"weierp;\": \"\\u2118\",\n\t\"Wfr;\": \"\\uD835\\uDD1A\",\n\t\"wfr;\": \"\\uD835\\uDD34\",\n\t\"Wopf;\": \"\\uD835\\uDD4E\",\n\t\"wopf;\": \"\\uD835\\uDD68\",\n\t\"wp;\": \"\\u2118\",\n\t\"wr;\": \"\\u2240\",\n\t\"wreath;\": \"\\u2240\",\n\t\"Wscr;\": \"\\uD835\\uDCB2\",\n\t\"wscr;\": \"\\uD835\\uDCCC\",\n\t\"xcap;\": \"\\u22C2\",\n\t\"xcirc;\": \"\\u25EF\",\n\t\"xcup;\": \"\\u22C3\",\n\t\"xdtri;\": \"\\u25BD\",\n\t\"Xfr;\": \"\\uD835\\uDD1B\",\n\t\"xfr;\": \"\\uD835\\uDD35\",\n\t\"xharr;\": \"\\u27F7\",\n\t\"xhArr;\": \"\\u27FA\",\n\t\"Xi;\": \"\\u039E\",\n\t\"xi;\": \"\\u03BE\",\n\t\"xlarr;\": \"\\u27F5\",\n\t\"xlArr;\": \"\\u27F8\",\n\t\"xmap;\": \"\\u27FC\",\n\t\"xnis;\": \"\\u22FB\",\n\t\"xodot;\": \"\\u2A00\",\n\t\"Xopf;\": \"\\uD835\\uDD4F\",\n\t\"xopf;\": \"\\uD835\\uDD69\",\n\t\"xoplus;\": \"\\u2A01\",\n\t\"xotime;\": \"\\u2A02\",\n\t\"xrarr;\": \"\\u27F6\",\n\t\"xrArr;\": \"\\u27F9\",\n\t\"Xscr;\": \"\\uD835\\uDCB3\",\n\t\"xscr;\": \"\\uD835\\uDCCD\",\n\t\"xsqcup;\": \"\\u2A06\",\n\t\"xuplus;\": \"\\u2A04\",\n\t\"xutri;\": \"\\u25B3\",\n\t\"xvee;\": \"\\u22C1\",\n\t\"xwedge;\": \"\\u22C0\",\n\t\"Yacute;\": \"\\u00DD\",\n\t\"Yacute\": \"\\u00DD\",\n\t\"yacute;\": \"\\u00FD\",\n\t\"yacute\": \"\\u00FD\",\n\t\"YAcy;\": \"\\u042F\",\n\t\"yacy;\": \"\\u044F\",\n\t\"Ycirc;\": \"\\u0176\",\n\t\"ycirc;\": \"\\u0177\",\n\t\"Ycy;\": \"\\u042B\",\n\t\"ycy;\": \"\\u044B\",\n\t\"yen;\": \"\\u00A5\",\n\t\"yen\": \"\\u00A5\",\n\t\"Yfr;\": \"\\uD835\\uDD1C\",\n\t\"yfr;\": \"\\uD835\\uDD36\",\n\t\"YIcy;\": \"\\u0407\",\n\t\"yicy;\": \"\\u0457\",\n\t\"Yopf;\": \"\\uD835\\uDD50\",\n\t\"yopf;\": \"\\uD835\\uDD6A\",\n\t\"Yscr;\": \"\\uD835\\uDCB4\",\n\t\"yscr;\": \"\\uD835\\uDCCE\",\n\t\"YUcy;\": \"\\u042E\",\n\t\"yucy;\": \"\\u044E\",\n\t\"yuml;\": \"\\u00FF\",\n\t\"yuml\": \"\\u00FF\",\n\t\"Yuml;\": \"\\u0178\",\n\t\"Zacute;\": \"\\u0179\",\n\t\"zacute;\": \"\\u017A\",\n\t\"Zcaron;\": \"\\u017D\",\n\t\"zcaron;\": \"\\u017E\",\n\t\"Zcy;\": \"\\u0417\",\n\t\"zcy;\": \"\\u0437\",\n\t\"Zdot;\": \"\\u017B\",\n\t\"zdot;\": \"\\u017C\",\n\t\"zeetrf;\": \"\\u2128\",\n\t\"ZeroWidthSpace;\": \"\\u200B\",\n\t\"Zeta;\": \"\\u0396\",\n\t\"zeta;\": \"\\u03B6\",\n\t\"zfr;\": \"\\uD835\\uDD37\",\n\t\"Zfr;\": \"\\u2128\",\n\t\"ZHcy;\": \"\\u0416\",\n\t\"zhcy;\": \"\\u0436\",\n\t\"zigrarr;\": \"\\u21DD\",\n\t\"zopf;\": \"\\uD835\\uDD6B\",\n\t\"Zopf;\": \"\\u2124\",\n\t\"Zscr;\": \"\\uD835\\uDCB5\",\n\t\"zscr;\": \"\\uD835\\uDCCF\",\n\t\"zwj;\": \"\\u200D\",\n\t\"zwnj;\": \"\\u200C\"\n};\n\n},\n{}],\n13:[function(_dereq_,module,exports){\nvar util = _dereq_('util/');\n\nvar pSlice = Array.prototype.slice;\nvar hasOwn = Object.prototype.hasOwnProperty;\n\nvar assert = module.exports = ok;\n\nassert.AssertionError = function AssertionError(options) {\n  this.name = 'AssertionError';\n  this.actual = options.actual;\n  this.expected = options.expected;\n  this.operator = options.operator;\n  if (options.message) {\n    this.message = options.message;\n    this.generatedMessage = false;\n  } else {\n    this.message = getMessage(this);\n    this.generatedMessage = true;\n  }\n  var stackStartFunction = options.stackStartFunction || fail;\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, stackStartFunction);\n  }\n  else {\n    var err = new Error();\n    if (err.stack) {\n      var out = err.stack;\n      var fn_name = stackStartFunction.name;\n      var idx = out.indexOf('\\n' + fn_name);\n      if (idx >= 0) {\n        var next_line = out.indexOf('\\n', idx + 1);\n        out = out.substring(next_line + 1);\n      }\n\n      this.stack = out;\n    }\n  }\n};\nutil.inherits(assert.AssertionError, Error);\n\nfunction replacer(key, value) {\n  if (util.isUndefined(value)) {\n    return '' + value;\n  }\n  if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) {\n    return value.toString();\n  }\n  if (util.isFunction(value) || util.isRegExp(value)) {\n    return value.toString();\n  }\n  return value;\n}\n\nfunction truncate(s, n) {\n  if (util.isString(s)) {\n    return s.length < n ? s : s.slice(0, n);\n  } else {\n    return s;\n  }\n}\n\nfunction getMessage(self) {\n  return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +\n         self.operator + ' ' +\n         truncate(JSON.stringify(self.expected, replacer), 128);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n  throw new assert.AssertionError({\n    message: message,\n    actual: actual,\n    expected: expected,\n    operator: operator,\n    stackStartFunction: stackStartFunction\n  });\n}\nassert.fail = fail;\n\nfunction ok(value, message) {\n  if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\nassert.equal = function equal(actual, expected, message) {\n  if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\nassert.notEqual = function notEqual(actual, expected, message) {\n  if (actual == expected) {\n    fail(actual, expected, message, '!=', assert.notEqual);\n  }\n};\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n  if (!_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n  }\n};\n\nfunction _deepEqual(actual, expected) {\n  if (actual === expected) {\n    return true;\n\n  } else if (util.isBuffer(actual) && util.isBuffer(expected)) {\n    if (actual.length != expected.length) return false;\n\n    for (var i = 0; i < actual.length; i++) {\n      if (actual[i] !== expected[i]) return false;\n    }\n\n    return true;\n  } else if (util.isDate(actual) && util.isDate(expected)) {\n    return actual.getTime() === expected.getTime();\n  } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n    return actual.source === expected.source &&\n           actual.global === expected.global &&\n           actual.multiline === expected.multiline &&\n           actual.lastIndex === expected.lastIndex &&\n           actual.ignoreCase === expected.ignoreCase;\n  } else if (!util.isObject(actual) && !util.isObject(expected)) {\n    return actual == expected;\n  } else {\n    return objEquiv(actual, expected);\n  }\n}\n\nfunction isArguments(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b) {\n  if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))\n    return false;\n  if (a.prototype !== b.prototype) return false;\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return _deepEqual(a, b);\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b),\n        key, i;\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  if (ka.length != kb.length)\n    return false;\n  ka.sort();\n  kb.sort();\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!_deepEqual(a[key], b[key])) return false;\n  }\n  return true;\n}\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n  if (_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n  }\n};\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n  if (actual !== expected) {\n    fail(actual, expected, message, '===', assert.strictEqual);\n  }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n  if (actual === expected) {\n    fail(actual, expected, message, '!==', assert.notStrictEqual);\n  }\n};\n\nfunction expectedException(actual, expected) {\n  if (!actual || !expected) {\n    return false;\n  }\n\n  if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n    return expected.test(actual);\n  } else if (actual instanceof expected) {\n    return true;\n  } else if (expected.call({}, actual) === true) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n  var actual;\n\n  if (util.isString(expected)) {\n    message = expected;\n    expected = null;\n  }\n\n  try {\n    block();\n  } catch (e) {\n    actual = e;\n  }\n\n  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n            (message ? ' ' + message : '.');\n\n  if (shouldThrow && !actual) {\n    fail(actual, expected, 'Missing expected exception' + message);\n  }\n\n  if (!shouldThrow && expectedException(actual, expected)) {\n    fail(actual, expected, 'Got unwanted exception' + message);\n  }\n\n  if ((shouldThrow && actual && expected &&\n      !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n    throw actual;\n  }\n}\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n  _throws.apply(this, [true].concat(pSlice.call(arguments)));\n};\nassert.doesNotThrow = function(block, /*optional*/message) {\n  _throws.apply(this, [false].concat(pSlice.call(arguments)));\n};\n\nassert.ifError = function(err) { if (err) {throw err;}};\n\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    if (hasOwn.call(obj, key)) keys.push(key);\n  }\n  return keys;\n};\n\n},\n{\"util/\":15}],\n14:[function(_dereq_,module,exports){\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n},\n{}],\n15:[function(_dereq_,module,exports){\n(function (process,global){\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\nexports.deprecate = function(fn, msg) {\n  if (isUndefined(global.process)) {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\nfunction inspect(obj, opts) {\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    ctx.showHidden = opts;\n  } else if (opts) {\n    exports._extend(ctx, opts);\n  }\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      value.inspect !== exports.inspect &&\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = _dereq_('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\nexports.inherits = _dereq_('inherits');\n\nexports._extend = function(origin, add) {\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n}).call(this,_dereq_(\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\"),typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},\n{\"./support/isBuffer\":14,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,\"inherits\":17}],\n16:[function(_dereq_,module,exports){\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\nEventEmitter.defaultMaxListeners = 10;\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        throw TypeError('Uncaught, unspecified \"error\" event.');\n      }\n      return false;\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    this._events[type].push(listener);\n  else\n    this._events[type] = [this._events[type], listener];\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      console.trace();\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},\n{}],\n17:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},\n{}],\n18:[function(_dereq_,module,exports){\n\nvar process = module.exports = {};\n\nprocess.nextTick = (function () {\n    var canSetImmediate = typeof window !== 'undefined'\n    && window.setImmediate;\n    var canPost = typeof window !== 'undefined'\n    && window.postMessage && window.addEventListener\n    ;\n\n    if (canSetImmediate) {\n        return function (f) { return window.setImmediate(f) };\n    }\n\n    if (canPost) {\n        var queue = [];\n        window.addEventListener('message', function (ev) {\n            var source = ev.source;\n            if ((source === window || source === null) && ev.data === 'process-tick') {\n                ev.stopPropagation();\n                if (queue.length > 0) {\n                    var fn = queue.shift();\n                    fn();\n                }\n            }\n        }, true);\n\n        return function nextTick(fn) {\n            queue.push(fn);\n            window.postMessage('process-tick', '*');\n        };\n    }\n\n    return function nextTick(fn) {\n        setTimeout(fn, 0);\n    };\n})();\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n}\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\n\n},\n{}],\n19:[function(_dereq_,module,exports){\nmodule.exports=_dereq_(14)\n},\n{}],\n20:[function(_dereq_,module,exports){\nmodule.exports=_dereq_(15)\n},\n{\"./support/isBuffer\":19,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,\"inherits\":17}]},{},[9])\n(9)\n\n});\n\nace.define(\"ace/mode/html_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar SAXParser = require(\"./html/saxparser\").SAXParser;\n\nvar errorTypes = {\n    \"expected-doctype-but-got-start-tag\": \"info\",\n    \"expected-doctype-but-got-chars\": \"info\",\n    \"non-html-root\": \"info\"\n};\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.context = null;\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.setOptions = function(options) {\n        this.context = options.context;\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return;\n        var parser = new SAXParser();\n        var errors = [];\n        var noop = function(){};\n        parser.contentHandler = {\n           startDocument: noop,\n           endDocument: noop,\n           startElement: noop,\n           endElement: noop,\n           characters: noop\n        };\n        parser.errorHandler = {\n            error: function(message, location, code) {\n                errors.push({\n                    row: location.line,\n                    column: location.column,\n                    text: message,\n                    type: errorTypes[code] || \"error\"\n                });\n            }\n        };\n\n        parser.parse(value, this.context);\n\n        this.sender.emit(\"error\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n"
  },
  {
    "path": "publishable/assets/js/ace/libs/worker-javascript.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err && err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err && err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        sender = window.sender = window.initSender();\n        var clazz = this.require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function () {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    this.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    }\n    else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n    }\n    else {\n        this.insert({ row: 0, column: 0 }, textOrLines);\n    }\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    this.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function (text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    }\n    else {\n        this.$split = function (text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function () {\n        return this.$lines.length;\n    };\n    this.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    this.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    this.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    this.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    this.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    this.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    this.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    this.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    this.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    this.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    this.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\n\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                var d, err; \n                if (Array.isArray(data[i+1])) {\n                    d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                \n                if ((d.action == \"insert\" ? d.start : d.end).row >= doc.$lines.length) {\n                    err = new Error(\"Invalid delta\");\n                    err.data = {\n                        path: _self.$path,\n                        linesLength: doc.$lines.length,\n                        start: d.start,\n                        end: d.end\n                    };\n                    throw err;\n                }\n\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/javascript/jshint\",[], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/../../../jshint/data/ascii-identifier-data.js\":[function(_dereq_,module,exports){\nvar identifierStartTable = [];\n\nfor (var i = 0; i < 128; i++) {\n  identifierStartTable[i] =\n    i === 36 ||           // $\n    i >= 65 && i <= 90 || // A-Z\n    i === 95 ||           // _\n    i >= 97 && i <= 122;  // a-z\n}\n\nvar identifierPartTable = [];\n\nfor (var i = 0; i < 128; i++) {\n  identifierPartTable[i] =\n    identifierStartTable[i] || // $, _, A-Z, a-z\n    i >= 48 && i <= 57;        // 0-9\n}\n\nmodule.exports = {\n  asciiIdentifierStartTable: identifierStartTable,\n  asciiIdentifierPartTable: identifierPartTable\n};\n\n},{}],\"/../../../jshint/data/es5-identifier-names.js\":[function(_dereq_,module,exports){\nmodule.exports = /^(?:[\\$A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0525\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCB\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA2D\\uFA30-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])(?:[\\$0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u0525\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0621-\\u065E\\u0660-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0900-\\u0939\\u093C-\\u094E\\u0950-\\u0955\\u0958-\\u0963\\u0966-\\u096F\\u0971\\u0972\\u0979-\\u097F\\u0981-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C82\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0D02\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC\\u0EDD\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F8B\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17B3\\u17B6-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BAA\\u1BAE-\\u1BB9\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF2\\u1D00-\\u1DE6\\u1DFD-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u2094\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF1\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCB\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA65F\\uA662-\\uA66F\\uA67C\\uA67D\\uA67F-\\uA697\\uA6A0-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7B\\uAA80-\\uAAC2\\uAADB-\\uAADD\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA2D\\uFA30-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE26\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])*$/;\n},{}],\"/../../../jshint/data/non-ascii-identifier-part-only.js\":[function(_dereq_,module,exports){\nvar str = '183,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,903,1155,1156,1157,1158,1159,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1471,1473,1474,1476,1477,1479,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1648,1750,1751,1752,1753,1754,1755,1756,1759,1760,1761,1762,1763,1764,1767,1768,1770,1771,1772,1773,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1809,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,2027,2028,2029,2030,2031,2032,2033,2034,2035,2045,2070,2071,2072,2073,2075,2076,2077,2078,2079,2080,2081,2082,2083,2085,2086,2087,2089,2090,2091,2092,2093,2137,2138,2139,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2362,2363,2364,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2385,2386,2387,2388,2389,2390,2391,2402,2403,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2433,2434,2435,2492,2494,2495,2496,2497,2498,2499,2500,2503,2504,2507,2508,2509,2519,2530,2531,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2558,2561,2562,2563,2620,2622,2623,2624,2625,2626,2631,2632,2635,2636,2637,2641,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2677,2689,2690,2691,2748,2750,2751,2752,2753,2754,2755,2756,2757,2759,2760,2761,2763,2764,2765,2786,2787,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2810,2811,2812,2813,2814,2815,2817,2818,2819,2876,2878,2879,2880,2881,2882,2883,2884,2887,2888,2891,2892,2893,2902,2903,2914,2915,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2946,3006,3007,3008,3009,3010,3014,3015,3016,3018,3019,3020,3021,3031,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3072,3073,3074,3075,3076,3134,3135,3136,3137,3138,3139,3140,3142,3143,3144,3146,3147,3148,3149,3157,3158,3170,3171,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3201,3202,3203,3260,3262,3263,3264,3265,3266,3267,3268,3270,3271,3272,3274,3275,3276,3277,3285,3286,3298,3299,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,3328,3329,3330,3331,3387,3388,3390,3391,3392,3393,3394,3395,3396,3398,3399,3400,3402,3403,3404,3405,3415,3426,3427,3430,3431,3432,3433,3434,3435,3436,3437,3438,3439,3458,3459,3530,3535,3536,3537,3538,3539,3540,3542,3544,3545,3546,3547,3548,3549,3550,3551,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3570,3571,3633,3636,3637,3638,3639,3640,3641,3642,3655,3656,3657,3658,3659,3660,3661,3662,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3761,3764,3765,3766,3767,3768,3769,3771,3772,3784,3785,3786,3787,3788,3789,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3864,3865,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3893,3895,3897,3902,3903,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3974,3975,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4038,4139,4140,4141,4142,4143,4144,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157,4158,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4182,4183,4184,4185,4190,4191,4192,4194,4195,4196,4199,4200,4201,4202,4203,4204,4205,4209,4210,4211,4212,4226,4227,4228,4229,4230,4231,4232,4233,4234,4235,4236,4237,4239,4240,4241,4242,4243,4244,4245,4246,4247,4248,4249,4250,4251,4252,4253,4957,4958,4959,4969,4970,4971,4972,4973,4974,4975,4976,4977,5906,5907,5908,5938,5939,5940,5970,5971,6002,6003,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6109,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121,6155,6156,6157,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6313,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,6470,6471,6472,6473,6474,6475,6476,6477,6478,6479,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6679,6680,6681,6682,6683,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6912,6913,6914,6915,6916,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6992,6993,6994,6995,6996,6997,6998,6999,7000,7001,7019,7020,7021,7022,7023,7024,7025,7026,7027,7040,7041,7042,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,7155,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7376,7377,7378,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400,7405,7410,7411,7412,7415,7416,7417,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7675,7676,7677,7678,7679,8204,8205,8255,8256,8276,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8417,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,11503,11504,11505,11647,11744,11745,11746,11747,11748,11749,11750,11751,11752,11753,11754,11755,11756,11757,11758,11759,11760,11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,12330,12331,12332,12333,12334,12335,12441,12442,42528,42529,42530,42531,42532,42533,42534,42535,42536,42537,42607,42612,42613,42614,42615,42616,42617,42618,42619,42620,42621,42654,42655,42736,42737,43010,43014,43019,43043,43044,43045,43046,43047,43136,43137,43188,43189,43190,43191,43192,43193,43194,43195,43196,43197,43198,43199,43200,43201,43202,43203,43204,43205,43216,43217,43218,43219,43220,43221,43222,43223,43224,43225,43232,43233,43234,43235,43236,43237,43238,43239,43240,43241,43242,43243,43244,43245,43246,43247,43248,43249,43263,43264,43265,43266,43267,43268,43269,43270,43271,43272,43273,43302,43303,43304,43305,43306,43307,43308,43309,43335,43336,43337,43338,43339,43340,43341,43342,43343,43344,43345,43346,43347,43392,43393,43394,43395,43443,43444,43445,43446,43447,43448,43449,43450,43451,43452,43453,43454,43455,43456,43472,43473,43474,43475,43476,43477,43478,43479,43480,43481,43493,43504,43505,43506,43507,43508,43509,43510,43511,43512,43513,43561,43562,43563,43564,43565,43566,43567,43568,43569,43570,43571,43572,43573,43574,43587,43596,43597,43600,43601,43602,43603,43604,43605,43606,43607,43608,43609,43643,43644,43645,43696,43698,43699,43700,43703,43704,43710,43711,43713,43755,43756,43757,43758,43759,43765,43766,44003,44004,44005,44006,44007,44008,44009,44010,44012,44013,44016,44017,44018,44019,44020,44021,44022,44023,44024,44025,64286,65024,65025,65026,65027,65028,65029,65030,65031,65032,65033,65034,65035,65036,65037,65038,65039,65056,65057,65058,65059,65060,65061,65062,65063,65064,65065,65066,65067,65068,65069,65070,65071,65075,65076,65101,65102,65103,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65343';\nvar arr = str.split(',').map(function(code) {\n  return parseInt(code, 10);\n});\nmodule.exports = arr;\n},{}],\"/../../../jshint/data/non-ascii-identifier-start.js\":[function(_dereq_,module,exports){\nvar str = '170,181,186,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,710,711,712,713,714,715,716,717,718,719,720,721,736,737,738,739,740,748,750,880,881,882,883,884,886,887,890,891,892,893,895,902,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1369,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1519,1520,1521,1522,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1646,1647,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1749,1765,1766,1774,1775,1786,1787,1788,1791,1808,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1969,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2036,2037,2042,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2074,2084,2088,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2230,2231,2232,2233,2234,2235,2236,2237,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2365,2384,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2437,2438,2439,2440,2441,2442,2443,2444,2447,2448,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2474,2475,2476,2477,2478,2479,2480,2482,2486,2487,2488,2489,2493,2510,2524,2525,2527,2528,2529,2544,2545,2556,2565,2566,2567,2568,2569,2570,2575,2576,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2602,2603,2604,2605,2606,2607,2608,2610,2611,2613,2614,2616,2617,2649,2650,2651,2652,2654,2674,2675,2676,2693,2694,2695,2696,2697,2698,2699,2700,2701,2703,2704,2705,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2730,2731,2732,2733,2734,2735,2736,2738,2739,2741,2742,2743,2744,2745,2749,2768,2784,2785,2809,2821,2822,2823,2824,2825,2826,2827,2828,2831,2832,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2858,2859,2860,2861,2862,2863,2864,2866,2867,2869,2870,2871,2872,2873,2877,2908,2909,2911,2912,2913,2929,2947,2949,2950,2951,2952,2953,2954,2958,2959,2960,2962,2963,2964,2965,2969,2970,2972,2974,2975,2979,2980,2984,2985,2986,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3024,3077,3078,3079,3080,3081,3082,3083,3084,3086,3087,3088,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3133,3160,3161,3162,3168,3169,3200,3205,3206,3207,3208,3209,3210,3211,3212,3214,3215,3216,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3253,3254,3255,3256,3257,3261,3294,3296,3297,3313,3314,3333,3334,3335,3336,3337,3338,3339,3340,3342,3343,3344,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3360,3361,3362,3363,3364,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3389,3406,3412,3413,3414,3423,3424,3425,3450,3451,3452,3453,3454,3455,3461,3462,3463,3464,3465,3466,3467,3468,3469,3470,3471,3472,3473,3474,3475,3476,3477,3478,3482,3483,3484,3485,3486,3487,3488,3489,3490,3491,3492,3493,3494,3495,3496,3497,3498,3499,3500,3501,3502,3503,3504,3505,3507,3508,3509,3510,3511,3512,3513,3514,3515,3517,3520,3521,3522,3523,3524,3525,3526,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3634,3635,3648,3649,3650,3651,3652,3653,3654,3713,3714,3716,3719,3720,3722,3725,3732,3733,3734,3735,3737,3738,3739,3740,3741,3742,3743,3745,3746,3747,3749,3751,3754,3755,3757,3758,3759,3760,3762,3763,3773,3776,3777,3778,3779,3780,3782,3804,3805,3806,3807,3840,3904,3905,3906,3907,3908,3909,3910,3911,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3976,3977,3978,3979,3980,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4159,4176,4177,4178,4179,4180,4181,4186,4187,4188,4189,4193,4197,4198,4206,4207,4208,4213,4214,4215,4216,4217,4218,4219,4220,4221,4222,4223,4224,4225,4238,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4295,4301,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,4343,4344,4345,4346,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,4490,4491,4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,4576,4577,4578,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642,4643,4644,4645,4646,4647,4648,4649,4650,4651,4652,4653,4654,4655,4656,4657,4658,4659,4660,4661,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672,4673,4674,4675,4676,4677,4678,4679,4680,4682,4683,4684,4685,4688,4689,4690,4691,4692,4693,4694,4696,4698,4699,4700,4701,4704,4705,4706,4707,4708,4709,4710,4711,4712,4713,4714,4715,4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4746,4747,4748,4749,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4786,4787,4788,4789,4792,4793,4794,4795,4796,4797,4798,4800,4802,4803,4804,4805,4808,4809,4810,4811,4812,4813,4814,4815,4816,4817,4818,4819,4820,4821,4822,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,4882,4883,4884,4885,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4992,4993,4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,5056,5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072,5073,5074,5075,5076,5077,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103,5104,5105,5106,5107,5108,5109,5112,5113,5114,5115,5116,5117,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193,5194,5195,5196,5197,5198,5199,5200,5201,5202,5203,5204,5205,5206,5207,5208,5209,5210,5211,5212,5213,5214,5215,5216,5217,5218,5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385,5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440,5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632,5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664,5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728,5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5743,5744,5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776,5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5792,5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5870,5871,5872,5873,5874,5875,5876,5877,5878,5879,5880,5888,5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5902,5903,5904,5905,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5952,5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5998,5999,6000,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6103,6108,6176,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6314,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,6426,6427,6428,6429,6430,6480,6481,6482,6483,6484,6485,6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505,6506,6507,6508,6509,6512,6513,6514,6515,6516,6528,6529,6530,6531,6532,6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6576,6577,6578,6579,6580,6581,6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6656,6657,6658,6659,6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6678,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6823,6917,6918,6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6981,6982,6983,6984,6985,6986,6987,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7086,7087,7098,7099,7100,7101,7102,7103,7104,7105,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,7139,7140,7141,7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7245,7246,7247,7258,7259,7260,7261,7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7296,7297,7298,7299,7300,7301,7302,7303,7304,7312,7313,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7357,7358,7359,7401,7402,7403,7404,7406,7407,7408,7409,7413,7414,7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695,7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807,7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7960,7961,7962,7963,7964,7965,7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,8000,8001,8002,8003,8004,8005,8008,8009,8010,8011,8012,8013,8016,8017,8018,8019,8020,8021,8022,8023,8025,8027,8029,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8118,8119,8120,8121,8122,8123,8124,8126,8130,8131,8132,8134,8135,8136,8137,8138,8139,8140,8144,8145,8146,8147,8150,8151,8152,8153,8154,8155,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8178,8179,8180,8182,8183,8184,8185,8186,8187,8188,8305,8319,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8450,8455,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8469,8472,8473,8474,8475,8476,8477,8484,8486,8488,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8508,8509,8510,8511,8517,8518,8519,8520,8521,8526,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,11264,11265,11266,11267,11268,11269,11270,11271,11272,11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288,11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304,11305,11306,11307,11308,11309,11310,11312,11313,11314,11315,11316,11317,11318,11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334,11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,11348,11349,11350,11351,11352,11353,11354,11355,11356,11357,11358,11360,11361,11362,11363,11364,11365,11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,11378,11379,11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395,11396,11397,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425,11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441,11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457,11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,11470,11471,11472,11473,11474,11475,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486,11487,11488,11489,11490,11491,11492,11499,11500,11501,11502,11506,11507,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,11530,11531,11532,11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548,11549,11550,11551,11552,11553,11554,11555,11556,11557,11559,11565,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578,11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,11592,11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,11605,11606,11607,11608,11609,11610,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622,11623,11631,11648,11649,11650,11651,11652,11653,11654,11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670,11680,11681,11682,11683,11684,11685,11686,11688,11689,11690,11691,11692,11693,11694,11696,11697,11698,11699,11700,11701,11702,11704,11705,11706,11707,11708,11709,11710,11712,11713,11714,11715,11716,11717,11718,11720,11721,11722,11723,11724,11725,11726,11728,11729,11730,11731,11732,11733,11734,11736,11737,11738,11739,11740,11741,11742,12293,12294,12295,12321,12322,12323,12324,12325,12326,12327,12328,12329,12337,12338,12339,12340,12341,12344,12345,12346,12347,12348,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12436,12437,12438,12443,12444,12445,12446,12447,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12540,12541,12542,12543,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,12586,12587,12588,12589,12590,12591,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,12704,12705,12706,12707,12708,12709,12710,12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726,12727,12728,12729,12730,12784,12785,12786,12787,12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321,13322,13323,13324,13325,13326,13327,13328,13329,13330,13331,13332,13333,13334,13335,13336,13337,13338,13339,13340,13341,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351,13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367,13368,13369,13370,13371,13372,13373,13374,13375,13376,13377,13378,13379,13380,13381,13382,13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398,13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414,13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430,13431,13432,13433,13434,13435,13436,13437,13438,13439,13440,13441,13442,13443,13444,13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,13458,13459,13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,13471,13472,13473,13474,13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490,13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506,13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522,13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538,13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554,13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570,13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586,13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602,13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618,13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634,13635,13636,13637,13638,13639,13640,13641,13642,13643,13644,13645,13646,13647,13648,13649,13650,13651,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664,13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680,13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696,13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712,13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728,13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744,13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760,13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,13775,13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791,13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807,13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823,13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839,13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855,13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871,13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887,13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903,13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919,13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935,13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951,13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967,13968,13969,13970,13971,13972,13973,13974,13975,13976,13977,13978,13979,13980,13981,13982,13983,13984,13985,13986,13987,13988,13989,13990,13991,13992,13993,13994,13995,13996,13997,13998,13999,14000,14001,14002,14003,14004,14005,14006,14007,14008,14009,14010,14011,14012,14013,14014,14015,14016,14017,14018,14019,14020,14021,14022,14023,14024,14025,14026,14027,14028,14029,14030,14031,14032,14033,14034,14035,14036,14037,14038,14039,14040,14041,14042,14043,14044,14045,14046,14047,14048,14049,14050,14051,14052,14053,14054,14055,14056,14057,14058,14059,14060,14061,14062,14063,14064,14065,14066,14067,14068,14069,14070,14071,14072,14073,14074,14075,14076,14077,14078,14079,14080,14081,14082,14083,14084,14085,14086,14087,14088,14089,14090,14091,14092,14093,14094,14095,14096,14097,14098,14099,14100,14101,14102,14103,14104,14105,14106,14107,14108,14109,14110,14111,14112,14113,14114,14115,14116,14117,14118,14119,14120,14121,14122,14123,14124,14125,14126,14127,14128,14129,14130,14131,14132,14133,14134,14135,14136,14137,14138,14139,14140,14141,14142,14143,14144,14145,14146,14147,14148,14149,14150,14151,14152,14153,14154,14155,14156,14157,14158,14159,14160,14161,14162,14163,14164,14165,14166,14167,14168,14169,14170,14171,14172,14173,14174,14175,14176,14177,14178,14179,14180,14181,14182,14183,14184,14185,14186,14187,14188,14189,14190,14191,14192,14193,14194,14195,14196,14197,14198,14199,14200,14201,14202,14203,14204,14205,14206,14207,14208,14209,14210,14211,14212,14213,14214,14215,14216,14217,14218,14219,14220,14221,14222,14223,14224,14225,14226,14227,14228,14229,14230,14231,14232,14233,14234,14235,14236,14237,14238,14239,14240,14241,14242,14243,14244,14245,14246,14247,14248,14249,14250,14251,14252,14253,14254,14255,14256,14257,14258,14259,14260,14261,14262,14263,14264,14265,14266,14267,14268,14269,14270,14271,14272,14273,14274,14275,14276,14277,14278,14279,14280,14281,14282,14283,14284,14285,14286,14287,14288,14289,14290,14291,14292,14293,14294,14295,14296,14297,14298,14299,14300,14301,14302,14303,14304,14305,14306,14307,14308,14309,14310,14311,14312,14313,14314,14315,14316,14317,14318,14319,14320,14321,14322,14323,14324,14325,14326,14327,14328,14329,14330,14331,14332,14333,14334,14335,14336,14337,14338,14339,14340,14341,14342,14343,14344,14345,14346,14347,14348,14349,14350,14351,14352,14353,14354,14355,14356,14357,14358,14359,14360,14361,14362,14363,14364,14365,14366,14367,14368,14369,14370,14371,14372,14373,14374,14375,14376,14377,14378,14379,14380,14381,14382,14383,14384,14385,14386,14387,14388,14389,14390,14391,14392,14393,14394,14395,14396,14397,14398,14399,14400,14401,14402,14403,14404,14405,14406,14407,14408,14409,14410,14411,14412,14413,14414,14415,14416,14417,14418,14419,14420,14421,14422,14423,14424,14425,14426,14427,14428,14429,14430,14431,14432,14433,14434,14435,14436,14437,14438,14439,14440,14441,14442,14443,14444,14445,14446,14447,14448,14449,14450,14451,14452,14453,14454,14455,14456,14457,14458,14459,14460,14461,14462,14463,14464,14465,14466,14467,14468,14469,14470,14471,14472,14473,14474,14475,14476,14477,14478,14479,14480,14481,14482,14483,14484,14485,14486,14487,14488,14489,14490,14491,14492,14493,14494,14495,14496,14497,14498,14499,14500,14501,14502,14503,14504,14505,14506,14507,14508,14509,14510,14511,14512,14513,14514,14515,14516,14517,14518,14519,14520,14521,14522,14523,14524,14525,14526,14527,14528,14529,14530,14531,14532,14533,14534,14535,14536,14537,14538,14539,14540,14541,14542,14543,14544,14545,14546,14547,14548,14549,14550,14551,14552,14553,14554,14555,14556,14557,14558,14559,14560,14561,14562,14563,14564,14565,14566,14567,14568,14569,14570,14571,14572,14573,14574,14575,14576,14577,14578,14579,14580,14581,14582,14583,14584,14585,14586,14587,14588,14589,14590,14591,14592,14593,14594,14595,14596,14597,14598,14599,14600,14601,14602,14603,14604,14605,14606,14607,14608,14609,14610,14611,14612,14613,14614,14615,14616,14617,14618,14619,14620,14621,14622,14623,14624,14625,14626,14627,14628,14629,14630,14631,14632,14633,14634,14635,14636,14637,14638,14639,14640,14641,14642,14643,14644,14645,14646,14647,14648,14649,14650,14651,14652,14653,14654,14655,14656,14657,14658,14659,14660,14661,14662,14663,14664,14665,14666,14667,14668,14669,14670,14671,14672,14673,14674,14675,14676,14677,14678,14679,14680,14681,14682,14683,14684,14685,14686,14687,14688,14689,14690,14691,14692,14693,14694,14695,14696,14697,14698,14699,14700,14701,14702,14703,14704,14705,14706,14707,14708,14709,14710,14711,14712,14713,14714,14715,14716,14717,14718,14719,14720,14721,14722,14723,14724,14725,14726,14727,14728,14729,14730,14731,14732,14733,14734,14735,14736,14737,14738,14739,14740,14741,14742,14743,14744,14745,14746,14747,14748,14749,14750,14751,14752,14753,14754,14755,14756,14757,14758,14759,14760,14761,14762,14763,14764,14765,14766,14767,14768,14769,14770,14771,14772,14773,14774,14775,14776,14777,14778,14779,14780,14781,14782,14783,14784,14785,14786,14787,14788,14789,14790,14791,14792,14793,14794,14795,14796,14797,14798,14799,14800,14801,14802,14803,14804,14805,14806,14807,14808,14809,14810,14811,14812,14813,14814,14815,14816,14817,14818,14819,14820,14821,14822,14823,14824,14825,14826,14827,14828,14829,14830,14831,14832,14833,14834,14835,14836,14837,14838,14839,14840,14841,14842,14843,14844,14845,14846,14847,14848,14849,14850,14851,14852,14853,14854,14855,14856,14857,14858,14859,14860,14861,14862,14863,14864,14865,14866,14867,14868,14869,14870,14871,14872,14873,14874,14875,14876,14877,14878,14879,14880,14881,14882,14883,14884,14885,14886,14887,14888,14889,14890,14891,14892,14893,14894,14895,14896,14897,14898,14899,14900,14901,14902,14903,14904,14905,14906,14907,14908,14909,14910,14911,14912,14913,14914,14915,14916,14917,14918,14919,14920,14921,14922,14923,14924,14925,14926,14927,14928,14929,14930,14931,14932,14933,14934,14935,14936,14937,14938,14939,14940,14941,14942,14943,14944,14945,14946,14947,14948,14949,14950,14951,14952,14953,14954,14955,14956,14957,14958,14959,14960,14961,14962,14963,14964,14965,14966,14967,14968,14969,14970,14971,14972,14973,14974,14975,14976,14977,14978,14979,14980,14981,14982,14983,14984,14985,14986,14987,14988,14989,14990,14991,14992,14993,14994,14995,14996,14997,14998,14999,15000,15001,15002,15003,15004,15005,15006,15007,15008,15009,15010,15011,15012,15013,15014,15015,15016,15017,15018,15019,15020,15021,15022,15023,15024,15025,15026,15027,15028,15029,15030,15031,15032,15033,15034,15035,15036,15037,15038,15039,15040,15041,15042,15043,15044,15045,15046,15047,15048,15049,15050,15051,15052,15053,15054,15055,15056,15057,15058,15059,15060,15061,15062,15063,15064,15065,15066,15067,15068,15069,15070,15071,15072,15073,15074,15075,15076,15077,15078,15079,15080,15081,15082,15083,15084,15085,15086,15087,15088,15089,15090,15091,15092,15093,15094,15095,15096,15097,15098,15099,15100,15101,15102,15103,15104,15105,15106,15107,15108,15109,15110,15111,15112,15113,15114,15115,15116,15117,15118,15119,15120,15121,15122,15123,15124,15125,15126,15127,15128,15129,15130,15131,15132,15133,15134,15135,15136,15137,15138,15139,15140,15141,15142,15143,15144,15145,15146,15147,15148,15149,15150,15151,15152,15153,15154,15155,15156,15157,15158,15159,15160,15161,15162,15163,15164,15165,15166,15167,15168,15169,15170,15171,15172,15173,15174,15175,15176,15177,15178,15179,15180,15181,15182,15183,15184,15185,15186,15187,15188,15189,15190,15191,15192,15193,15194,15195,15196,15197,15198,15199,15200,15201,15202,15203,15204,15205,15206,15207,15208,15209,15210,15211,15212,15213,15214,15215,15216,15217,15218,15219,15220,15221,15222,15223,15224,15225,15226,15227,15228,15229,15230,15231,15232,15233,15234,15235,15236,15237,15238,15239,15240,15241,15242,15243,15244,15245,15246,15247,15248,15249,15250,15251,15252,15253,15254,15255,15256,15257,15258,15259,15260,15261,15262,15263,15264,15265,15266,15267,15268,15269,15270,15271,15272,15273,15274,15275,15276,15277,15278,15279,15280,15281,15282,15283,15284,15285,15286,15287,15288,15289,15290,15291,15292,15293,15294,15295,15296,15297,15298,15299,15300,15301,15302,15303,15304,15305,15306,15307,15308,15309,15310,15311,15312,15313,15314,15315,15316,15317,15318,15319,15320,15321,15322,15323,15324,15325,15326,15327,15328,15329,15330,15331,15332,15333,15334,15335,15336,15337,15338,15339,15340,15341,15342,15343,15344,15345,15346,15347,15348,15349,15350,15351,15352,15353,15354,15355,15356,15357,15358,15359,15360,15361,15362,15363,15364,15365,15366,15367,15368,15369,15370,15371,15372,15373,15374,15375,15376,15377,15378,15379,15380,15381,15382,15383,15384,15385,15386,15387,15388,15389,15390,15391,15392,15393,15394,15395,15396,15397,15398,15399,15400,15401,15402,15403,15404,15405,15406,15407,15408,15409,15410,15411,15412,15413,15414,15415,15416,15417,15418,15419,15420,15421,15422,15423,15424,15425,15426,15427,15428,15429,15430,15431,15432,15433,15434,15435,15436,15437,15438,15439,15440,15441,15442,15443,15444,15445,15446,15447,15448,15449,15450,15451,15452,15453,15454,15455,15456,15457,15458,15459,15460,15461,15462,15463,15464,15465,15466,15467,15468,15469,15470,15471,15472,15473,15474,15475,15476,15477,15478,15479,15480,15481,15482,15483,15484,15485,15486,15487,15488,15489,15490,15491,15492,15493,15494,15495,15496,15497,15498,15499,15500,15501,15502,15503,15504,15505,15506,15507,15508,15509,15510,15511,15512,15513,15514,15515,15516,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15528,15529,15530,15531,15532,15533,15534,15535,15536,15537,15538,15539,15540,15541,15542,15543,15544,15545,15546,15547,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,15559,15560,15561,15562,15563,15564,15565,15566,15567,15568,15569,15570,15571,15572,15573,15574,15575,15576,15577,15578,15579,15580,15581,15582,15583,15584,15585,15586,15587,15588,15589,15590,15591,15592,15593,15594,15595,15596,15597,15598,15599,15600,15601,15602,15603,15604,15605,15606,15607,15608,15609,15610,15611,15612,15613,15614,15615,15616,15617,15618,15619,15620,15621,15622,15623,15624,15625,15626,15627,15628,15629,15630,15631,15632,15633,15634,15635,15636,15637,15638,15639,15640,15641,15642,15643,15644,15645,15646,15647,15648,15649,15650,15651,15652,15653,15654,15655,15656,15657,15658,15659,15660,15661,15662,15663,15664,15665,15666,15667,15668,15669,15670,15671,15672,15673,15674,15675,15676,15677,15678,15679,15680,15681,15682,15683,15684,15685,15686,15687,15688,15689,15690,15691,15692,15693,15694,15695,15696,15697,15698,15699,15700,15701,15702,15703,15704,15705,15706,15707,15708,15709,15710,15711,15712,15713,15714,15715,15716,15717,15718,15719,15720,15721,15722,15723,15724,15725,15726,15727,15728,15729,15730,15731,15732,15733,15734,15735,15736,15737,15738,15739,15740,15741,15742,15743,15744,15745,15746,15747,15748,15749,15750,15751,15752,15753,15754,15755,15756,15757,15758,15759,15760,15761,15762,15763,15764,15765,15766,15767,15768,15769,15770,15771,15772,15773,15774,15775,15776,15777,15778,15779,15780,15781,15782,15783,15784,15785,15786,15787,15788,15789,15790,15791,15792,15793,15794,15795,15796,15797,15798,15799,15800,15801,15802,15803,15804,15805,15806,15807,15808,15809,15810,15811,15812,15813,15814,15815,15816,15817,15818,15819,15820,15821,15822,15823,15824,15825,15826,15827,15828,15829,15830,15831,15832,15833,15834,15835,15836,15837,15838,15839,15840,15841,15842,15843,15844,15845,15846,15847,15848,15849,15850,15851,15852,15853,15854,15855,15856,15857,15858,15859,15860,15861,15862,15863,15864,15865,15866,15867,15868,15869,15870,15871,15872,15873,15874,15875,15876,15877,15878,15879,15880,15881,15882,15883,15884,15885,15886,15887,15888,15889,15890,15891,15892,15893,15894,15895,15896,15897,15898,15899,15900,15901,15902,15903,15904,15905,15906,15907,15908,15909,15910,15911,15912,15913,15914,15915,15916,15917,15918,15919,15920,15921,15922,15923,15924,15925,15926,15927,15928,15929,15930,15931,15932,15933,15934,15935,15936,15937,15938,15939,15940,15941,15942,15943,15944,15945,15946,15947,15948,15949,15950,15951,15952,15953,15954,15955,15956,15957,15958,15959,15960,15961,15962,15963,15964,15965,15966,15967,15968,15969,15970,15971,15972,15973,15974,15975,15976,15977,15978,15979,15980,15981,15982,15983,15984,15985,15986,15987,15988,15989,15990,15991,15992,15993,15994,15995,15996,15997,15998,15999,16000,16001,16002,16003,16004,16005,16006,16007,16008,16009,16010,16011,16012,16013,16014,16015,16016,16017,16018,16019,16020,16021,16022,16023,16024,16025,16026,16027,16028,16029,16030,16031,16032,16033,16034,16035,16036,16037,16038,16039,16040,16041,16042,16043,16044,16045,16046,16047,16048,16049,16050,16051,16052,16053,16054,16055,16056,16057,16058,16059,16060,16061,16062,16063,16064,16065,16066,16067,16068,16069,16070,16071,16072,16073,16074,16075,16076,16077,16078,16079,16080,16081,16082,16083,16084,16085,16086,16087,16088,16089,16090,16091,16092,16093,16094,16095,16096,16097,16098,16099,16100,16101,16102,16103,16104,16105,16106,16107,16108,16109,16110,16111,16112,16113,16114,16115,16116,16117,16118,16119,16120,16121,16122,16123,16124,16125,16126,16127,16128,16129,16130,16131,16132,16133,16134,16135,16136,16137,16138,16139,16140,16141,16142,16143,16144,16145,16146,16147,16148,16149,16150,16151,16152,16153,16154,16155,16156,16157,16158,16159,16160,16161,16162,16163,16164,16165,16166,16167,16168,16169,16170,16171,16172,16173,16174,16175,16176,16177,16178,16179,16180,16181,16182,16183,16184,16185,16186,16187,16188,16189,16190,16191,16192,16193,16194,16195,16196,16197,16198,16199,16200,16201,16202,16203,16204,16205,16206,16207,16208,16209,16210,16211,16212,16213,16214,16215,16216,16217,16218,16219,16220,16221,16222,16223,16224,16225,16226,16227,16228,16229,16230,16231,16232,16233,16234,16235,16236,16237,16238,16239,16240,16241,16242,16243,16244,16245,16246,16247,16248,16249,16250,16251,16252,16253,16254,16255,16256,16257,16258,16259,16260,16261,16262,16263,16264,16265,16266,16267,16268,16269,16270,16271,16272,16273,16274,16275,16276,16277,16278,16279,16280,16281,16282,16283,16284,16285,16286,16287,16288,16289,16290,16291,16292,16293,16294,16295,16296,16297,16298,16299,16300,16301,16302,16303,16304,16305,16306,16307,16308,16309,16310,16311,16312,16313,16314,16315,16316,16317,16318,16319,16320,16321,16322,16323,16324,16325,16326,16327,16328,16329,16330,16331,16332,16333,16334,16335,16336,16337,16338,16339,16340,16341,16342,16343,16344,16345,16346,16347,16348,16349,16350,16351,16352,16353,16354,16355,16356,16357,16358,16359,16360,16361,16362,16363,16364,16365,16366,16367,16368,16369,16370,16371,16372,16373,16374,16375,16376,16377,16378,16379,16380,16381,16382,16383,16384,16385,16386,16387,16388,16389,16390,16391,16392,16393,16394,16395,16396,16397,16398,16399,16400,16401,16402,16403,16404,16405,16406,16407,16408,16409,16410,16411,16412,16413,16414,16415,16416,16417,16418,16419,16420,16421,16422,16423,16424,16425,16426,16427,16428,16429,16430,16431,16432,16433,16434,16435,16436,16437,16438,16439,16440,16441,16442,16443,16444,16445,16446,16447,16448,16449,16450,16451,16452,16453,16454,16455,16456,16457,16458,16459,16460,16461,16462,16463,16464,16465,16466,16467,16468,16469,16470,16471,16472,16473,16474,16475,16476,16477,16478,16479,16480,16481,16482,16483,16484,16485,16486,16487,16488,16489,16490,16491,16492,16493,16494,16495,16496,16497,16498,16499,16500,16501,16502,16503,16504,16505,16506,16507,16508,16509,16510,16511,16512,16513,16514,16515,16516,16517,16518,16519,16520,16521,16522,16523,16524,16525,16526,16527,16528,16529,16530,16531,16532,16533,16534,16535,16536,16537,16538,16539,16540,16541,16542,16543,16544,16545,16546,16547,16548,16549,16550,16551,16552,16553,16554,16555,16556,16557,16558,16559,16560,16561,16562,16563,16564,16565,16566,16567,16568,16569,16570,16571,16572,16573,16574,16575,16576,16577,16578,16579,16580,16581,16582,16583,16584,16585,16586,16587,16588,16589,16590,16591,16592,16593,16594,16595,16596,16597,16598,16599,16600,16601,16602,16603,16604,16605,16606,16607,16608,16609,16610,16611,16612,16613,16614,16615,16616,16617,16618,16619,16620,16621,16622,16623,16624,16625,16626,16627,16628,16629,16630,16631,16632,16633,16634,16635,16636,16637,16638,16639,16640,16641,16642,16643,16644,16645,16646,16647,16648,16649,16650,16651,16652,16653,16654,16655,16656,16657,16658,16659,16660,16661,16662,16663,16664,16665,16666,16667,16668,16669,16670,16671,16672,16673,16674,16675,16676,16677,16678,16679,16680,16681,16682,16683,16684,16685,16686,16687,16688,16689,16690,16691,16692,16693,16694,16695,16696,16697,16698,16699,16700,16701,16702,16703,16704,16705,16706,16707,16708,16709,16710,16711,16712,16713,16714,16715,16716,16717,16718,16719,16720,16721,16722,16723,16724,16725,16726,16727,16728,16729,16730,16731,16732,16733,16734,16735,16736,16737,16738,16739,16740,16741,16742,16743,16744,16745,16746,16747,16748,16749,16750,16751,16752,16753,16754,16755,16756,16757,16758,16759,16760,16761,16762,16763,16764,16765,16766,16767,16768,16769,16770,16771,16772,16773,16774,16775,16776,16777,16778,16779,16780,16781,16782,16783,16784,16785,16786,16787,16788,16789,16790,16791,16792,16793,16794,16795,16796,16797,16798,16799,16800,16801,16802,16803,16804,16805,16806,16807,16808,16809,16810,16811,16812,16813,16814,16815,16816,16817,16818,16819,16820,16821,16822,16823,16824,16825,16826,16827,16828,16829,16830,16831,16832,16833,16834,16835,16836,16837,16838,16839,16840,16841,16842,16843,16844,16845,16846,16847,16848,16849,16850,16851,16852,16853,16854,16855,16856,16857,16858,16859,16860,16861,16862,16863,16864,16865,16866,16867,16868,16869,16870,16871,16872,16873,16874,16875,16876,16877,16878,16879,16880,16881,16882,16883,16884,16885,16886,16887,16888,16889,16890,16891,16892,16893,16894,16895,16896,16897,16898,16899,16900,16901,16902,16903,16904,16905,16906,16907,16908,16909,16910,16911,16912,16913,16914,16915,16916,16917,16918,16919,16920,16921,16922,16923,16924,16925,16926,16927,16928,16929,16930,16931,16932,16933,16934,16935,16936,16937,16938,16939,16940,16941,16942,16943,16944,16945,16946,16947,16948,16949,16950,16951,16952,16953,16954,16955,16956,16957,16958,16959,16960,16961,16962,16963,16964,16965,16966,16967,16968,16969,16970,16971,16972,16973,16974,16975,16976,16977,16978,16979,16980,16981,16982,16983,16984,16985,16986,16987,16988,16989,16990,16991,16992,16993,16994,16995,16996,16997,16998,16999,17000,17001,17002,17003,17004,17005,17006,17007,17008,17009,17010,17011,17012,17013,17014,17015,17016,17017,17018,17019,17020,17021,17022,17023,17024,17025,17026,17027,17028,17029,17030,17031,17032,17033,17034,17035,17036,17037,17038,17039,17040,17041,17042,17043,17044,17045,17046,17047,17048,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,17062,17063,17064,17065,17066,17067,17068,17069,17070,17071,17072,17073,17074,17075,17076,17077,17078,17079,17080,17081,17082,17083,17084,17085,17086,17087,17088,17089,17090,17091,17092,17093,17094,17095,17096,17097,17098,17099,17100,17101,17102,17103,17104,17105,17106,17107,17108,17109,17110,17111,17112,17113,17114,17115,17116,17117,17118,17119,17120,17121,17122,17123,17124,17125,17126,17127,17128,17129,17130,17131,17132,17133,17134,17135,17136,17137,17138,17139,17140,17141,17142,17143,17144,17145,17146,17147,17148,17149,17150,17151,17152,17153,17154,17155,17156,17157,17158,17159,17160,17161,17162,17163,17164,17165,17166,17167,17168,17169,17170,17171,17172,17173,17174,17175,17176,17177,17178,17179,17180,17181,17182,17183,17184,17185,17186,17187,17188,17189,17190,17191,17192,17193,17194,17195,17196,17197,17198,17199,17200,17201,17202,17203,17204,17205,17206,17207,17208,17209,17210,17211,17212,17213,17214,17215,17216,17217,17218,17219,17220,17221,17222,17223,17224,17225,17226,17227,17228,17229,17230,17231,17232,17233,17234,17235,17236,17237,17238,17239,17240,17241,17242,17243,17244,17245,17246,17247,17248,17249,17250,17251,17252,17253,17254,17255,17256,17257,17258,17259,17260,17261,17262,17263,17264,17265,17266,17267,17268,17269,17270,17271,17272,17273,17274,17275,17276,17277,17278,17279,17280,17281,17282,17283,17284,17285,17286,17287,17288,17289,17290,17291,17292,17293,17294,17295,17296,17297,17298,17299,17300,17301,17302,17303,17304,17305,17306,17307,17308,17309,17310,17311,17312,17313,17314,17315,17316,17317,17318,17319,17320,17321,17322,17323,17324,17325,17326,17327,17328,17329,17330,17331,17332,17333,17334,17335,17336,17337,17338,17339,17340,17341,17342,17343,17344,17345,17346,17347,17348,17349,17350,17351,17352,17353,17354,17355,17356,17357,17358,17359,17360,17361,17362,17363,17364,17365,17366,17367,17368,17369,17370,17371,17372,17373,17374,17375,17376,17377,17378,17379,17380,17381,17382,17383,17384,17385,17386,17387,17388,17389,17390,17391,17392,17393,17394,17395,17396,17397,17398,17399,17400,17401,17402,17403,17404,17405,17406,17407,17408,17409,17410,17411,17412,17413,17414,17415,17416,17417,17418,17419,17420,17421,17422,17423,17424,17425,17426,17427,17428,17429,17430,17431,17432,17433,17434,17435,17436,17437,17438,17439,17440,17441,17442,17443,17444,17445,17446,17447,17448,17449,17450,17451,17452,17453,17454,17455,17456,17457,17458,17459,17460,17461,17462,17463,17464,17465,17466,17467,17468,17469,17470,17471,17472,17473,17474,17475,17476,17477,17478,17479,17480,17481,17482,17483,17484,17485,17486,17487,17488,17489,17490,17491,17492,17493,17494,17495,17496,17497,17498,17499,17500,17501,17502,17503,17504,17505,17506,17507,17508,17509,17510,17511,17512,17513,17514,17515,17516,17517,17518,17519,17520,17521,17522,17523,17524,17525,17526,17527,17528,17529,17530,17531,17532,17533,17534,17535,17536,17537,17538,17539,17540,17541,17542,17543,17544,17545,17546,17547,17548,17549,17550,17551,17552,17553,17554,17555,17556,17557,17558,17559,17560,17561,17562,17563,17564,17565,17566,17567,17568,17569,17570,17571,17572,17573,17574,17575,17576,17577,17578,17579,17580,17581,17582,17583,17584,17585,17586,17587,17588,17589,17590,17591,17592,17593,17594,17595,17596,17597,17598,17599,17600,17601,17602,17603,17604,17605,17606,17607,17608,17609,17610,17611,17612,17613,17614,17615,17616,17617,17618,17619,17620,17621,17622,17623,17624,17625,17626,17627,17628,17629,17630,17631,17632,17633,17634,17635,17636,17637,17638,17639,17640,17641,17642,17643,17644,17645,17646,17647,17648,17649,17650,17651,17652,17653,17654,17655,17656,17657,17658,17659,17660,17661,17662,17663,17664,17665,17666,17667,17668,17669,17670,17671,17672,17673,17674,17675,17676,17677,17678,17679,17680,17681,17682,17683,17684,17685,17686,17687,17688,17689,17690,17691,17692,17693,17694,17695,17696,17697,17698,17699,17700,17701,17702,17703,17704,17705,17706,17707,17708,17709,17710,17711,17712,17713,17714,17715,17716,17717,17718,17719,17720,17721,17722,17723,17724,17725,17726,17727,17728,17729,17730,17731,17732,17733,17734,17735,17736,17737,17738,17739,17740,17741,17742,17743,17744,17745,17746,17747,17748,17749,17750,17751,17752,17753,17754,17755,17756,17757,17758,17759,17760,17761,17762,17763,17764,17765,17766,17767,17768,17769,17770,17771,17772,17773,17774,17775,17776,17777,17778,17779,17780,17781,17782,17783,17784,17785,17786,17787,17788,17789,17790,17791,17792,17793,17794,17795,17796,17797,17798,17799,17800,17801,17802,17803,17804,17805,17806,17807,17808,17809,17810,17811,17812,17813,17814,17815,17816,17817,17818,17819,17820,17821,17822,17823,17824,17825,17826,17827,17828,17829,17830,17831,17832,17833,17834,17835,17836,17837,17838,17839,17840,17841,17842,17843,17844,17845,17846,17847,17848,17849,17850,17851,17852,17853,17854,17855,17856,17857,17858,17859,17860,17861,17862,17863,17864,17865,17866,17867,17868,17869,17870,17871,17872,17873,17874,17875,17876,17877,17878,17879,17880,17881,17882,17883,17884,17885,17886,17887,17888,17889,17890,17891,17892,17893,17894,17895,17896,17897,17898,17899,17900,17901,17902,17903,17904,17905,17906,17907,17908,17909,17910,17911,17912,17913,17914,17915,17916,17917,17918,17919,17920,17921,17922,17923,17924,17925,17926,17927,17928,17929,17930,17931,17932,17933,17934,17935,17936,17937,17938,17939,17940,17941,17942,17943,17944,17945,17946,17947,17948,17949,17950,17951,17952,17953,17954,17955,17956,17957,17958,17959,17960,17961,17962,17963,17964,17965,17966,17967,17968,17969,17970,17971,17972,17973,17974,17975,17976,17977,17978,17979,17980,17981,17982,17983,17984,17985,17986,17987,17988,17989,17990,17991,17992,17993,17994,17995,17996,17997,17998,17999,18000,18001,18002,18003,18004,18005,18006,18007,18008,18009,18010,18011,18012,18013,18014,18015,18016,18017,18018,18019,18020,18021,18022,18023,18024,18025,18026,18027,18028,18029,18030,18031,18032,18033,18034,18035,18036,18037,18038,18039,18040,18041,18042,18043,18044,18045,18046,18047,18048,18049,18050,18051,18052,18053,18054,18055,18056,18057,18058,18059,18060,18061,18062,18063,18064,18065,18066,18067,18068,18069,18070,18071,18072,18073,18074,18075,18076,18077,18078,18079,18080,18081,18082,18083,18084,18085,18086,18087,18088,18089,18090,18091,18092,18093,18094,18095,18096,18097,18098,18099,18100,18101,18102,18103,18104,18105,18106,18107,18108,18109,18110,18111,18112,18113,18114,18115,18116,18117,18118,18119,18120,18121,18122,18123,18124,18125,18126,18127,18128,18129,18130,18131,18132,18133,18134,18135,18136,18137,18138,18139,18140,18141,18142,18143,18144,18145,18146,18147,18148,18149,18150,18151,18152,18153,18154,18155,18156,18157,18158,18159,18160,18161,18162,18163,18164,18165,18166,18167,18168,18169,18170,18171,18172,18173,18174,18175,18176,18177,18178,18179,18180,18181,18182,18183,18184,18185,18186,18187,18188,18189,18190,18191,18192,18193,18194,18195,18196,18197,18198,18199,18200,18201,18202,18203,18204,18205,18206,18207,18208,18209,18210,18211,18212,18213,18214,18215,18216,18217,18218,18219,18220,18221,18222,18223,18224,18225,18226,18227,18228,18229,18230,18231,18232,18233,18234,18235,18236,18237,18238,18239,18240,18241,18242,18243,18244,18245,18246,18247,18248,18249,18250,18251,18252,18253,18254,18255,18256,18257,18258,18259,18260,18261,18262,18263,18264,18265,18266,18267,18268,18269,18270,18271,18272,18273,18274,18275,18276,18277,18278,18279,18280,18281,18282,18283,18284,18285,18286,18287,18288,18289,18290,18291,18292,18293,18294,18295,18296,18297,18298,18299,18300,18301,18302,18303,18304,18305,18306,18307,18308,18309,18310,18311,18312,18313,18314,18315,18316,18317,18318,18319,18320,18321,18322,18323,18324,18325,18326,18327,18328,18329,18330,18331,18332,18333,18334,18335,18336,18337,18338,18339,18340,18341,18342,18343,18344,18345,18346,18347,18348,18349,18350,18351,18352,18353,18354,18355,18356,18357,18358,18359,18360,18361,18362,18363,18364,18365,18366,18367,18368,18369,18370,18371,18372,18373,18374,18375,18376,18377,18378,18379,18380,18381,18382,18383,18384,18385,18386,18387,18388,18389,18390,18391,18392,18393,18394,18395,18396,18397,18398,18399,18400,18401,18402,18403,18404,18405,18406,18407,18408,18409,18410,18411,18412,18413,18414,18415,18416,18417,18418,18419,18420,18421,18422,18423,18424,18425,18426,18427,18428,18429,18430,18431,18432,18433,18434,18435,18436,18437,18438,18439,18440,18441,18442,18443,18444,18445,18446,18447,18448,18449,18450,18451,18452,18453,18454,18455,18456,18457,18458,18459,18460,18461,18462,18463,18464,18465,18466,18467,18468,18469,18470,18471,18472,18473,18474,18475,18476,18477,18478,18479,18480,18481,18482,18483,18484,18485,18486,18487,18488,18489,18490,18491,18492,18493,18494,18495,18496,18497,18498,18499,18500,18501,18502,18503,18504,18505,18506,18507,18508,18509,18510,18511,18512,18513,18514,18515,18516,18517,18518,18519,18520,18521,18522,18523,18524,18525,18526,18527,18528,18529,18530,18531,18532,18533,18534,18535,18536,18537,18538,18539,18540,18541,18542,18543,18544,18545,18546,18547,18548,18549,18550,18551,18552,18553,18554,18555,18556,18557,18558,18559,18560,18561,18562,18563,18564,18565,18566,18567,18568,18569,18570,18571,18572,18573,18574,18575,18576,18577,18578,18579,18580,18581,18582,18583,18584,18585,18586,18587,18588,18589,18590,18591,18592,18593,18594,18595,18596,18597,18598,18599,18600,18601,18602,18603,18604,18605,18606,18607,18608,18609,18610,18611,18612,18613,18614,18615,18616,18617,18618,18619,18620,18621,18622,18623,18624,18625,18626,18627,18628,18629,18630,18631,18632,18633,18634,18635,18636,18637,18638,18639,18640,18641,18642,18643,18644,18645,18646,18647,18648,18649,18650,18651,18652,18653,18654,18655,18656,18657,18658,18659,18660,18661,18662,18663,18664,18665,18666,18667,18668,18669,18670,18671,18672,18673,18674,18675,18676,18677,18678,18679,18680,18681,18682,18683,18684,18685,18686,18687,18688,18689,18690,18691,18692,18693,18694,18695,18696,18697,18698,18699,18700,18701,18702,18703,18704,18705,18706,18707,18708,18709,18710,18711,18712,18713,18714,18715,18716,18717,18718,18719,18720,18721,18722,18723,18724,18725,18726,18727,18728,18729,18730,18731,18732,18733,18734,18735,18736,18737,18738,18739,18740,18741,18742,18743,18744,18745,18746,18747,18748,18749,18750,18751,18752,18753,18754,18755,18756,18757,18758,18759,18760,18761,18762,18763,18764,18765,18766,18767,18768,18769,18770,18771,18772,18773,18774,18775,18776,18777,18778,18779,18780,18781,18782,18783,18784,18785,18786,18787,18788,18789,18790,18791,18792,18793,18794,18795,18796,18797,18798,18799,18800,18801,18802,18803,18804,18805,18806,18807,18808,18809,18810,18811,18812,18813,18814,18815,18816,18817,18818,18819,18820,18821,18822,18823,18824,18825,18826,18827,18828,18829,18830,18831,18832,18833,18834,18835,18836,18837,18838,18839,18840,18841,18842,18843,18844,18845,18846,18847,18848,18849,18850,18851,18852,18853,18854,18855,18856,18857,18858,18859,18860,18861,18862,18863,18864,18865,18866,18867,18868,18869,18870,18871,18872,18873,18874,18875,18876,18877,18878,18879,18880,18881,18882,18883,18884,18885,18886,18887,18888,18889,18890,18891,18892,18893,18894,18895,18896,18897,18898,18899,18900,18901,18902,18903,18904,18905,18906,18907,18908,18909,18910,18911,18912,18913,18914,18915,18916,18917,18918,18919,18920,18921,18922,18923,18924,18925,18926,18927,18928,18929,18930,18931,18932,18933,18934,18935,18936,18937,18938,18939,18940,18941,18942,18943,18944,18945,18946,18947,18948,18949,18950,18951,18952,18953,18954,18955,18956,18957,18958,18959,18960,18961,18962,18963,18964,18965,18966,18967,18968,18969,18970,18971,18972,18973,18974,18975,18976,18977,18978,18979,18980,18981,18982,18983,18984,18985,18986,18987,18988,18989,18990,18991,18992,18993,18994,18995,18996,18997,18998,18999,19000,19001,19002,19003,19004,19005,19006,19007,19008,19009,19010,19011,19012,19013,19014,19015,19016,19017,19018,19019,19020,19021,19022,19023,19024,19025,19026,19027,19028,19029,19030,19031,19032,19033,19034,19035,19036,19037,19038,19039,19040,19041,19042,19043,19044,19045,19046,19047,19048,19049,19050,19051,19052,19053,19054,19055,19056,19057,19058,19059,19060,19061,19062,19063,19064,19065,19066,19067,19068,19069,19070,19071,19072,19073,19074,19075,19076,19077,19078,19079,19080,19081,19082,19083,19084,19085,19086,19087,19088,19089,19090,19091,19092,19093,19094,19095,19096,19097,19098,19099,19100,19101,19102,19103,19104,19105,19106,19107,19108,19109,19110,19111,19112,19113,19114,19115,19116,19117,19118,19119,19120,19121,19122,19123,19124,19125,19126,19127,19128,19129,19130,19131,19132,19133,19134,19135,19136,19137,19138,19139,19140,19141,19142,19143,19144,19145,19146,19147,19148,19149,19150,19151,19152,19153,19154,19155,19156,19157,19158,19159,19160,19161,19162,19163,19164,19165,19166,19167,19168,19169,19170,19171,19172,19173,19174,19175,19176,19177,19178,19179,19180,19181,19182,19183,19184,19185,19186,19187,19188,19189,19190,19191,19192,19193,19194,19195,19196,19197,19198,19199,19200,19201,19202,19203,19204,19205,19206,19207,19208,19209,19210,19211,19212,19213,19214,19215,19216,19217,19218,19219,19220,19221,19222,19223,19224,19225,19226,19227,19228,19229,19230,19231,19232,19233,19234,19235,19236,19237,19238,19239,19240,19241,19242,19243,19244,19245,19246,19247,19248,19249,19250,19251,19252,19253,19254,19255,19256,19257,19258,19259,19260,19261,19262,19263,19264,19265,19266,19267,19268,19269,19270,19271,19272,19273,19274,19275,19276,19277,19278,19279,19280,19281,19282,19283,19284,19285,19286,19287,19288,19289,19290,19291,19292,19293,19294,19295,19296,19297,19298,19299,19300,19301,19302,19303,19304,19305,19306,19307,19308,19309,19310,19311,19312,19313,19314,19315,19316,19317,19318,19319,19320,19321,19322,19323,19324,19325,19326,19327,19328,19329,19330,19331,19332,19333,19334,19335,19336,19337,19338,19339,19340,19341,19342,19343,19344,19345,19346,19347,19348,19349,19350,19351,19352,19353,19354,19355,19356,19357,19358,19359,19360,19361,19362,19363,19364,19365,19366,19367,19368,19369,19370,19371,19372,19373,19374,19375,19376,19377,19378,19379,19380,19381,19382,19383,19384,19385,19386,19387,19388,19389,19390,19391,19392,19393,19394,19395,19396,19397,19398,19399,19400,19401,19402,19403,19404,19405,19406,19407,19408,19409,19410,19411,19412,19413,19414,19415,19416,19417,19418,19419,19420,19421,19422,19423,19424,19425,19426,19427,19428,19429,19430,19431,19432,19433,19434,19435,19436,19437,19438,19439,19440,19441,19442,19443,19444,19445,19446,19447,19448,19449,19450,19451,19452,19453,19454,19455,19456,19457,19458,19459,19460,19461,19462,19463,19464,19465,19466,19467,19468,19469,19470,19471,19472,19473,19474,19475,19476,19477,19478,19479,19480,19481,19482,19483,19484,19485,19486,19487,19488,19489,19490,19491,19492,19493,19494,19495,19496,19497,19498,19499,19500,19501,19502,19503,19504,19505,19506,19507,19508,19509,19510,19511,19512,19513,19514,19515,19516,19517,19518,19519,19520,19521,19522,19523,19524,19525,19526,19527,19528,19529,19530,19531,19532,19533,19534,19535,19536,19537,19538,19539,19540,19541,19542,19543,19544,19545,19546,19547,19548,19549,19550,19551,19552,19553,19554,19555,19556,19557,19558,19559,19560,19561,19562,19563,19564,19565,19566,19567,19568,19569,19570,19571,19572,19573,19574,19575,19576,19577,19578,19579,19580,19581,19582,19583,19584,19585,19586,19587,19588,19589,19590,19591,19592,19593,19594,19595,19596,19597,19598,19599,19600,19601,19602,19603,19604,19605,19606,19607,19608,19609,19610,19611,19612,19613,19614,19615,19616,19617,19618,19619,19620,19621,19622,19623,19624,19625,19626,19627,19628,19629,19630,19631,19632,19633,19634,19635,19636,19637,19638,19639,19640,19641,19642,19643,19644,19645,19646,19647,19648,19649,19650,19651,19652,19653,19654,19655,19656,19657,19658,19659,19660,19661,19662,19663,19664,19665,19666,19667,19668,19669,19670,19671,19672,19673,19674,19675,19676,19677,19678,19679,19680,19681,19682,19683,19684,19685,19686,19687,19688,19689,19690,19691,19692,19693,19694,19695,19696,19697,19698,19699,19700,19701,19702,19703,19704,19705,19706,19707,19708,19709,19710,19711,19712,19713,19714,19715,19716,19717,19718,19719,19720,19721,19722,19723,19724,19725,19726,19727,19728,19729,19730,19731,19732,19733,19734,19735,19736,19737,19738,19739,19740,19741,19742,19743,19744,19745,19746,19747,19748,19749,19750,19751,19752,19753,19754,19755,19756,19757,19758,19759,19760,19761,19762,19763,19764,19765,19766,19767,19768,19769,19770,19771,19772,19773,19774,19775,19776,19777,19778,19779,19780,19781,19782,19783,19784,19785,19786,19787,19788,19789,19790,19791,19792,19793,19794,19795,19796,19797,19798,19799,19800,19801,19802,19803,19804,19805,19806,19807,19808,19809,19810,19811,19812,19813,19814,19815,19816,19817,19818,19819,19820,19821,19822,19823,19824,19825,19826,19827,19828,19829,19830,19831,19832,19833,19834,19835,19836,19837,19838,19839,19840,19841,19842,19843,19844,19845,19846,19847,19848,19849,19850,19851,19852,19853,19854,19855,19856,19857,19858,19859,19860,19861,19862,19863,19864,19865,19866,19867,19868,19869,19870,19871,19872,19873,19874,19875,19876,19877,19878,19879,19880,19881,19882,19883,19884,19885,19886,19887,19888,19889,19890,19891,19892,19893,19968,19969,19970,19971,19972,19973,19974,19975,19976,19977,19978,19979,19980,19981,19982,19983,19984,19985,19986,19987,19988,19989,19990,19991,19992,19993,19994,19995,19996,19997,19998,19999,20000,20001,20002,20003,20004,20005,20006,20007,20008,20009,20010,20011,20012,20013,20014,20015,20016,20017,20018,20019,20020,20021,20022,20023,20024,20025,20026,20027,20028,20029,20030,20031,20032,20033,20034,20035,20036,20037,20038,20039,20040,20041,20042,20043,20044,20045,20046,20047,20048,20049,20050,20051,20052,20053,20054,20055,20056,20057,20058,20059,20060,20061,20062,20063,20064,20065,20066,20067,20068,20069,20070,20071,20072,20073,20074,20075,20076,20077,20078,20079,20080,20081,20082,20083,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20094,20095,20096,20097,20098,20099,20100,20101,20102,20103,20104,20105,20106,20107,20108,20109,20110,20111,20112,20113,20114,20115,20116,20117,20118,20119,20120,20121,20122,20123,20124,20125,20126,20127,20128,20129,20130,20131,20132,20133,20134,20135,20136,20137,20138,20139,20140,20141,20142,20143,20144,20145,20146,20147,20148,20149,20150,20151,20152,20153,20154,20155,20156,20157,20158,20159,20160,20161,20162,20163,20164,20165,20166,20167,20168,20169,20170,20171,20172,20173,20174,20175,20176,20177,20178,20179,20180,20181,20182,20183,20184,20185,20186,20187,20188,20189,20190,20191,20192,20193,20194,20195,20196,20197,20198,20199,20200,20201,20202,20203,20204,20205,20206,20207,20208,20209,20210,20211,20212,20213,20214,20215,20216,20217,20218,20219,20220,20221,20222,20223,20224,20225,20226,20227,20228,20229,20230,20231,20232,20233,20234,20235,20236,20237,20238,20239,20240,20241,20242,20243,20244,20245,20246,20247,20248,20249,20250,20251,20252,20253,20254,20255,20256,20257,20258,20259,20260,20261,20262,20263,20264,20265,20266,20267,20268,20269,20270,20271,20272,20273,20274,20275,20276,20277,20278,20279,20280,20281,20282,20283,20284,20285,20286,20287,20288,20289,20290,20291,20292,20293,20294,20295,20296,20297,20298,20299,20300,20301,20302,20303,20304,20305,20306,20307,20308,20309,20310,20311,20312,20313,20314,20315,20316,20317,20318,20319,20320,20321,20322,20323,20324,20325,20326,20327,20328,20329,20330,20331,20332,20333,20334,20335,20336,20337,20338,20339,20340,20341,20342,20343,20344,20345,20346,20347,20348,20349,20350,20351,20352,20353,20354,20355,20356,20357,20358,20359,20360,20361,20362,20363,20364,20365,20366,20367,20368,20369,20370,20371,20372,20373,20374,20375,20376,20377,20378,20379,20380,20381,20382,20383,20384,20385,20386,20387,20388,20389,20390,20391,20392,20393,20394,20395,20396,20397,20398,20399,20400,20401,20402,20403,20404,20405,20406,20407,20408,20409,20410,20411,20412,20413,20414,20415,20416,20417,20418,20419,20420,20421,20422,20423,20424,20425,20426,20427,20428,20429,20430,20431,20432,20433,20434,20435,20436,20437,20438,20439,20440,20441,20442,20443,20444,20445,20446,20447,20448,20449,20450,20451,20452,20453,20454,20455,20456,20457,20458,20459,20460,20461,20462,20463,20464,20465,20466,20467,20468,20469,20470,20471,20472,20473,20474,20475,20476,20477,20478,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20492,20493,20494,20495,20496,20497,20498,20499,20500,20501,20502,20503,20504,20505,20506,20507,20508,20509,20510,20511,20512,20513,20514,20515,20516,20517,20518,20519,20520,20521,20522,20523,20524,20525,20526,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20538,20539,20540,20541,20542,20543,20544,20545,20546,20547,20548,20549,20550,20551,20552,20553,20554,20555,20556,20557,20558,20559,20560,20561,20562,20563,20564,20565,20566,20567,20568,20569,20570,20571,20572,20573,20574,20575,20576,20577,20578,20579,20580,20581,20582,20583,20584,20585,20586,20587,20588,20589,20590,20591,20592,20593,20594,20595,20596,20597,20598,20599,20600,20601,20602,20603,20604,20605,20606,20607,20608,20609,20610,20611,20612,20613,20614,20615,20616,20617,20618,20619,20620,20621,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20643,20644,20645,20646,20647,20648,20649,20650,20651,20652,20653,20654,20655,20656,20657,20658,20659,20660,20661,20662,20663,20664,20665,20666,20667,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20687,20688,20689,20690,20691,20692,20693,20694,20695,20696,20697,20698,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20710,20711,20712,20713,20714,20715,20716,20717,20718,20719,20720,20721,20722,20723,20724,20725,20726,20727,20728,20729,20730,20731,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20742,20743,20744,20745,20746,20747,20748,20749,20750,20751,20752,20753,20754,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20769,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20799,20800,20801,20802,20803,20804,20805,20806,20807,20808,20809,20810,20811,20812,20813,20814,20815,20816,20817,20818,20819,20820,20821,20822,20823,20824,20825,20826,20827,20828,20829,20830,20831,20832,20833,20834,20835,20836,20837,20838,20839,20840,20841,20842,20843,20844,20845,20846,20847,20848,20849,20850,20851,20852,20853,20854,20855,20856,20857,20858,20859,20860,20861,20862,20863,20864,20865,20866,20867,20868,20869,20870,20871,20872,20873,20874,20875,20876,20877,20878,20879,20880,20881,20882,20883,20884,20885,20886,20887,20888,20889,20890,20891,20892,20893,20894,20895,20896,20897,20898,20899,20900,20901,20902,20903,20904,20905,20906,20907,20908,20909,20910,20911,20912,20913,20914,20915,20916,20917,20918,20919,20920,20921,20922,20923,20924,20925,20926,20927,20928,20929,20930,20931,20932,20933,20934,20935,20936,20937,20938,20939,20940,20941,20942,20943,20944,20945,20946,20947,20948,20949,20950,20951,20952,20953,20954,20955,20956,20957,20958,20959,20960,20961,20962,20963,20964,20965,20966,20967,20968,20969,20970,20971,20972,20973,20974,20975,20976,20977,20978,20979,20980,20981,20982,20983,20984,20985,20986,20987,20988,20989,20990,20991,20992,20993,20994,20995,20996,20997,20998,20999,21000,21001,21002,21003,21004,21005,21006,21007,21008,21009,21010,21011,21012,21013,21014,21015,21016,21017,21018,21019,21020,21021,21022,21023,21024,21025,21026,21027,21028,21029,21030,21031,21032,21033,21034,21035,21036,21037,21038,21039,21040,21041,21042,21043,21044,21045,21046,21047,21048,21049,21050,21051,21052,21053,21054,21055,21056,21057,21058,21059,21060,21061,21062,21063,21064,21065,21066,21067,21068,21069,21070,21071,21072,21073,21074,21075,21076,21077,21078,21079,21080,21081,21082,21083,21084,21085,21086,21087,21088,21089,21090,21091,21092,21093,21094,21095,21096,21097,21098,21099,21100,21101,21102,21103,21104,21105,21106,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21117,21118,21119,21120,21121,21122,21123,21124,21125,21126,21127,21128,21129,21130,21131,21132,21133,21134,21135,21136,21137,21138,21139,21140,21141,21142,21143,21144,21145,21146,21147,21148,21149,21150,21151,21152,21153,21154,21155,21156,21157,21158,21159,21160,21161,21162,21163,21164,21165,21166,21167,21168,21169,21170,21171,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21182,21183,21184,21185,21186,21187,21188,21189,21190,21191,21192,21193,21194,21195,21196,21197,21198,21199,21200,21201,21202,21203,21204,21205,21206,21207,21208,21209,21210,21211,21212,21213,21214,21215,21216,21217,21218,21219,21220,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21232,21233,21234,21235,21236,21237,21238,21239,21240,21241,21242,21243,21244,21245,21246,21247,21248,21249,21250,21251,21252,21253,21254,21255,21256,21257,21258,21259,21260,21261,21262,21263,21264,21265,21266,21267,21268,21269,21270,21271,21272,21273,21274,21275,21276,21277,21278,21279,21280,21281,21282,21283,21284,21285,21286,21287,21288,21289,21290,21291,21292,21293,21294,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21305,21306,21307,21308,21309,21310,21311,21312,21313,21314,21315,21316,21317,21318,21319,21320,21321,21322,21323,21324,21325,21326,21327,21328,21329,21330,21331,21332,21333,21334,21335,21336,21337,21338,21339,21340,21341,21342,21343,21344,21345,21346,21347,21348,21349,21350,21351,21352,21353,21354,21355,21356,21357,21358,21359,21360,21361,21362,21363,21364,21365,21366,21367,21368,21369,21370,21371,21372,21373,21374,21375,21376,21377,21378,21379,21380,21381,21382,21383,21384,21385,21386,21387,21388,21389,21390,21391,21392,21393,21394,21395,21396,21397,21398,21399,21400,21401,21402,21403,21404,21405,21406,21407,21408,21409,21410,21411,21412,21413,21414,21415,21416,21417,21418,21419,21420,21421,21422,21423,21424,21425,21426,21427,21428,21429,21430,21431,21432,21433,21434,21435,21436,21437,21438,21439,21440,21441,21442,21443,21444,21445,21446,21447,21448,21449,21450,21451,21452,21453,21454,21455,21456,21457,21458,21459,21460,21461,21462,21463,21464,21465,21466,21467,21468,21469,21470,21471,21472,21473,21474,21475,21476,21477,21478,21479,21480,21481,21482,21483,21484,21485,21486,21487,21488,21489,21490,21491,21492,21493,21494,21495,21496,21497,21498,21499,21500,21501,21502,21503,21504,21505,21506,21507,21508,21509,21510,21511,21512,21513,21514,21515,21516,21517,21518,21519,21520,21521,21522,21523,21524,21525,21526,21527,21528,21529,21530,21531,21532,21533,21534,21535,21536,21537,21538,21539,21540,21541,21542,21543,21544,21545,21546,21547,21548,21549,21550,21551,21552,21553,21554,21555,21556,21557,21558,21559,21560,21561,21562,21563,21564,21565,21566,21567,21568,21569,21570,21571,21572,21573,21574,21575,21576,21577,21578,21579,21580,21581,21582,21583,21584,21585,21586,21587,21588,21589,21590,21591,21592,21593,21594,21595,21596,21597,21598,21599,21600,21601,21602,21603,21604,21605,21606,21607,21608,21609,21610,21611,21612,21613,21614,21615,21616,21617,21618,21619,21620,21621,21622,21623,21624,21625,21626,21627,21628,21629,21630,21631,21632,21633,21634,21635,21636,21637,21638,21639,21640,21641,21642,21643,21644,21645,21646,21647,21648,21649,21650,21651,21652,21653,21654,21655,21656,21657,21658,21659,21660,21661,21662,21663,21664,21665,21666,21667,21668,21669,21670,21671,21672,21673,21674,21675,21676,21677,21678,21679,21680,21681,21682,21683,21684,21685,21686,21687,21688,21689,21690,21691,21692,21693,21694,21695,21696,21697,21698,21699,21700,21701,21702,21703,21704,21705,21706,21707,21708,21709,21710,21711,21712,21713,21714,21715,21716,21717,21718,21719,21720,21721,21722,21723,21724,21725,21726,21727,21728,21729,21730,21731,21732,21733,21734,21735,21736,21737,21738,21739,21740,21741,21742,21743,21744,21745,21746,21747,21748,21749,21750,21751,21752,21753,21754,21755,21756,21757,21758,21759,21760,21761,21762,21763,21764,21765,21766,21767,21768,21769,21770,21771,21772,21773,21774,21775,21776,21777,21778,21779,21780,21781,21782,21783,21784,21785,21786,21787,21788,21789,21790,21791,21792,21793,21794,21795,21796,21797,21798,21799,21800,21801,21802,21803,21804,21805,21806,21807,21808,21809,21810,21811,21812,21813,21814,21815,21816,21817,21818,21819,21820,21821,21822,21823,21824,21825,21826,21827,21828,21829,21830,21831,21832,21833,21834,21835,21836,21837,21838,21839,21840,21841,21842,21843,21844,21845,21846,21847,21848,21849,21850,21851,21852,21853,21854,21855,21856,21857,21858,21859,21860,21861,21862,21863,21864,21865,21866,21867,21868,21869,21870,21871,21872,21873,21874,21875,21876,21877,21878,21879,21880,21881,21882,21883,21884,21885,21886,21887,21888,21889,21890,21891,21892,21893,21894,21895,21896,21897,21898,21899,21900,21901,21902,21903,21904,21905,21906,21907,21908,21909,21910,21911,21912,21913,21914,21915,21916,21917,21918,21919,21920,21921,21922,21923,21924,21925,21926,21927,21928,21929,21930,21931,21932,21933,21934,21935,21936,21937,21938,21939,21940,21941,21942,21943,21944,21945,21946,21947,21948,21949,21950,21951,21952,21953,21954,21955,21956,21957,21958,21959,21960,21961,21962,21963,21964,21965,21966,21967,21968,21969,21970,21971,21972,21973,21974,21975,21976,21977,21978,21979,21980,21981,21982,21983,21984,21985,21986,21987,21988,21989,21990,21991,21992,21993,21994,21995,21996,21997,21998,21999,22000,22001,22002,22003,22004,22005,22006,22007,22008,22009,22010,22011,22012,22013,22014,22015,22016,22017,22018,22019,22020,22021,22022,22023,22024,22025,22026,22027,22028,22029,22030,22031,22032,22033,22034,22035,22036,22037,22038,22039,22040,22041,22042,22043,22044,22045,22046,22047,22048,22049,22050,22051,22052,22053,22054,22055,22056,22057,22058,22059,22060,22061,22062,22063,22064,22065,22066,22067,22068,22069,22070,22071,22072,22073,22074,22075,22076,22077,22078,22079,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22092,22093,22094,22095,22096,22097,22098,22099,22100,22101,22102,22103,22104,22105,22106,22107,22108,22109,22110,22111,22112,22113,22114,22115,22116,22117,22118,22119,22120,22121,22122,22123,22124,22125,22126,22127,22128,22129,22130,22131,22132,22133,22134,22135,22136,22137,22138,22139,22140,22141,22142,22143,22144,22145,22146,22147,22148,22149,22150,22151,22152,22153,22154,22155,22156,22157,22158,22159,22160,22161,22162,22163,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22179,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22191,22192,22193,22194,22195,22196,22197,22198,22199,22200,22201,22202,22203,22204,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22218,22219,22220,22221,22222,22223,22224,22225,22226,22227,22228,22229,22230,22231,22232,22233,22234,22235,22236,22237,22238,22239,22240,22241,22242,22243,22244,22245,22246,22247,22248,22249,22250,22251,22252,22253,22254,22255,22256,22257,22258,22259,22260,22261,22262,22263,22264,22265,22266,22267,22268,22269,22270,22271,22272,22273,22274,22275,22276,22277,22278,22279,22280,22281,22282,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22300,22301,22302,22303,22304,22305,22306,22307,22308,22309,22310,22311,22312,22313,22314,22315,22316,22317,22318,22319,22320,22321,22322,22323,22324,22325,22326,22327,22328,22329,22330,22331,22332,22333,22334,22335,22336,22337,22338,22339,22340,22341,22342,22343,22344,22345,22346,22347,22348,22349,22350,22351,22352,22353,22354,22355,22356,22357,22358,22359,22360,22361,22362,22363,22364,22365,22366,22367,22368,22369,22370,22371,22372,22373,22374,22375,22376,22377,22378,22379,22380,22381,22382,22383,22384,22385,22386,22387,22388,22389,22390,22391,22392,22393,22394,22395,22396,22397,22398,22399,22400,22401,22402,22403,22404,22405,22406,22407,22408,22409,22410,22411,22412,22413,22414,22415,22416,22417,22418,22419,22420,22421,22422,22423,22424,22425,22426,22427,22428,22429,22430,22431,22432,22433,22434,22435,22436,22437,22438,22439,22440,22441,22442,22443,22444,22445,22446,22447,22448,22449,22450,22451,22452,22453,22454,22455,22456,22457,22458,22459,22460,22461,22462,22463,22464,22465,22466,22467,22468,22469,22470,22471,22472,22473,22474,22475,22476,22477,22478,22479,22480,22481,22482,22483,22484,22485,22486,22487,22488,22489,22490,22491,22492,22493,22494,22495,22496,22497,22498,22499,22500,22501,22502,22503,22504,22505,22506,22507,22508,22509,22510,22511,22512,22513,22514,22515,22516,22517,22518,22519,22520,22521,22522,22523,22524,22525,22526,22527,22528,22529,22530,22531,22532,22533,22534,22535,22536,22537,22538,22539,22540,22541,22542,22543,22544,22545,22546,22547,22548,22549,22550,22551,22552,22553,22554,22555,22556,22557,22558,22559,22560,22561,22562,22563,22564,22565,22566,22567,22568,22569,22570,22571,22572,22573,22574,22575,22576,22577,22578,22579,22580,22581,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22596,22597,22598,22599,22600,22601,22602,22603,22604,22605,22606,22607,22608,22609,22610,22611,22612,22613,22614,22615,22616,22617,22618,22619,22620,22621,22622,22623,22624,22625,22626,22627,22628,22629,22630,22631,22632,22633,22634,22635,22636,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22654,22655,22656,22657,22658,22659,22660,22661,22662,22663,22664,22665,22666,22667,22668,22669,22670,22671,22672,22673,22674,22675,22676,22677,22678,22679,22680,22681,22682,22683,22684,22685,22686,22687,22688,22689,22690,22691,22692,22693,22694,22695,22696,22697,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22716,22717,22718,22719,22720,22721,22722,22723,22724,22725,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22737,22738,22739,22740,22741,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22756,22757,22758,22759,22760,22761,22762,22763,22764,22765,22766,22767,22768,22769,22770,22771,22772,22773,22774,22775,22776,22777,22778,22779,22780,22781,22782,22783,22784,22785,22786,22787,22788,22789,22790,22791,22792,22793,22794,22795,22796,22797,22798,22799,22800,22801,22802,22803,22804,22805,22806,22807,22808,22809,22810,22811,22812,22813,22814,22815,22816,22817,22818,22819,22820,22821,22822,22823,22824,22825,22826,22827,22828,22829,22830,22831,22832,22833,22834,22835,22836,22837,22838,22839,22840,22841,22842,22843,22844,22845,22846,22847,22848,22849,22850,22851,22852,22853,22854,22855,22856,22857,22858,22859,22860,22861,22862,22863,22864,22865,22866,22867,22868,22869,22870,22871,22872,22873,22874,22875,22876,22877,22878,22879,22880,22881,22882,22883,22884,22885,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22899,22900,22901,22902,22903,22904,22905,22906,22907,22908,22909,22910,22911,22912,22913,22914,22915,22916,22917,22918,22919,22920,22921,22922,22923,22924,22925,22926,22927,22928,22929,22930,22931,22932,22933,22934,22935,22936,22937,22938,22939,22940,22941,22942,22943,22944,22945,22946,22947,22948,22949,22950,22951,22952,22953,22954,22955,22956,22957,22958,22959,22960,22961,22962,22963,22964,22965,22966,22967,22968,22969,22970,22971,22972,22973,22974,22975,22976,22977,22978,22979,22980,22981,22982,22983,22984,22985,22986,22987,22988,22989,22990,22991,22992,22993,22994,22995,22996,22997,22998,22999,23000,23001,23002,23003,23004,23005,23006,23007,23008,23009,23010,23011,23012,23013,23014,23015,23016,23017,23018,23019,23020,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23033,23034,23035,23036,23037,23038,23039,23040,23041,23042,23043,23044,23045,23046,23047,23048,23049,23050,23051,23052,23053,23054,23055,23056,23057,23058,23059,23060,23061,23062,23063,23064,23065,23066,23067,23068,23069,23070,23071,23072,23073,23074,23075,23076,23077,23078,23079,23080,23081,23082,23083,23084,23085,23086,23087,23088,23089,23090,23091,23092,23093,23094,23095,23096,23097,23098,23099,23100,23101,23102,23103,23104,23105,23106,23107,23108,23109,23110,23111,23112,23113,23114,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23125,23126,23127,23128,23129,23130,23131,23132,23133,23134,23135,23136,23137,23138,23139,23140,23141,23142,23143,23144,23145,23146,23147,23148,23149,23150,23151,23152,23153,23154,23155,23156,23157,23158,23159,23160,23161,23162,23163,23164,23165,23166,23167,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23186,23187,23188,23189,23190,23191,23192,23193,23194,23195,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23210,23211,23212,23213,23214,23215,23216,23217,23218,23219,23220,23221,23222,23223,23224,23225,23226,23227,23228,23229,23230,23231,23232,23233,23234,23235,23236,23237,23238,23239,23240,23241,23242,23243,23244,23245,23246,23247,23248,23249,23250,23251,23252,23253,23254,23255,23256,23257,23258,23259,23260,23261,23262,23263,23264,23265,23266,23267,23268,23269,23270,23271,23272,23273,23274,23275,23276,23277,23278,23279,23280,23281,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23305,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23318,23319,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23346,23347,23348,23349,23350,23351,23352,23353,23354,23355,23356,23357,23358,23359,23360,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23376,23377,23378,23379,23380,23381,23382,23383,23384,23385,23386,23387,23388,23389,23390,23391,23392,23393,23394,23395,23396,23397,23398,23399,23400,23401,23402,23403,23404,23405,23406,23407,23408,23409,23410,23411,23412,23413,23414,23415,23416,23417,23418,23419,23420,23421,23422,23423,23424,23425,23426,23427,23428,23429,23430,23431,23432,23433,23434,23435,23436,23437,23438,23439,23440,23441,23442,23443,23444,23445,23446,23447,23448,23449,23450,23451,23452,23453,23454,23455,23456,23457,23458,23459,23460,23461,23462,23463,23464,23465,23466,23467,23468,23469,23470,23471,23472,23473,23474,23475,23476,23477,23478,23479,23480,23481,23482,23483,23484,23485,23486,23487,23488,23489,23490,23491,23492,23493,23494,23495,23496,23497,23498,23499,23500,23501,23502,23503,23504,23505,23506,23507,23508,23509,23510,23511,23512,23513,23514,23515,23516,23517,23518,23519,23520,23521,23522,23523,23524,23525,23526,23527,23528,23529,23530,23531,23532,23533,23534,23535,23536,23537,23538,23539,23540,23541,23542,23543,23544,23545,23546,23547,23548,23549,23550,23551,23552,23553,23554,23555,23556,23557,23558,23559,23560,23561,23562,23563,23564,23565,23566,23567,23568,23569,23570,23571,23572,23573,23574,23575,23576,23577,23578,23579,23580,23581,23582,23583,23584,23585,23586,23587,23588,23589,23590,23591,23592,23593,23594,23595,23596,23597,23598,23599,23600,23601,23602,23603,23604,23605,23606,23607,23608,23609,23610,23611,23612,23613,23614,23615,23616,23617,23618,23619,23620,23621,23622,23623,23624,23625,23626,23627,23628,23629,23630,23631,23632,23633,23634,23635,23636,23637,23638,23639,23640,23641,23642,23643,23644,23645,23646,23647,23648,23649,23650,23651,23652,23653,23654,23655,23656,23657,23658,23659,23660,23661,23662,23663,23664,23665,23666,23667,23668,23669,23670,23671,23672,23673,23674,23675,23676,23677,23678,23679,23680,23681,23682,23683,23684,23685,23686,23687,23688,23689,23690,23691,23692,23693,23694,23695,23696,23697,23698,23699,23700,23701,23702,23703,23704,23705,23706,23707,23708,23709,23710,23711,23712,23713,23714,23715,23716,23717,23718,23719,23720,23721,23722,23723,23724,23725,23726,23727,23728,23729,23730,23731,23732,23733,23734,23735,23736,23737,23738,23739,23740,23741,23742,23743,23744,23745,23746,23747,23748,23749,23750,23751,23752,23753,23754,23755,23756,23757,23758,23759,23760,23761,23762,23763,23764,23765,23766,23767,23768,23769,23770,23771,23772,23773,23774,23775,23776,23777,23778,23779,23780,23781,23782,23783,23784,23785,23786,23787,23788,23789,23790,23791,23792,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23803,23804,23805,23806,23807,23808,23809,23810,23811,23812,23813,23814,23815,23816,23817,23818,23819,23820,23821,23822,23823,23824,23825,23826,23827,23828,23829,23830,23831,23832,23833,23834,23835,23836,23837,23838,23839,23840,23841,23842,23843,23844,23845,23846,23847,23848,23849,23850,23851,23852,23853,23854,23855,23856,23857,23858,23859,23860,23861,23862,23863,23864,23865,23866,23867,23868,23869,23870,23871,23872,23873,23874,23875,23876,23877,23878,23879,23880,23881,23882,23883,23884,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23896,23897,23898,23899,23900,23901,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23913,23914,23915,23916,23917,23918,23919,23920,23921,23922,23923,23924,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23938,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23961,23962,23963,23964,23965,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23991,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24005,24006,24007,24008,24009,24010,24011,24012,24013,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24027,24028,24029,24030,24031,24032,24033,24034,24035,24036,24037,24038,24039,24040,24041,24042,24043,24044,24045,24046,24047,24048,24049,24050,24051,24052,24053,24054,24055,24056,24057,24058,24059,24060,24061,24062,24063,24064,24065,24066,24067,24068,24069,24070,24071,24072,24073,24074,24075,24076,24077,24078,24079,24080,24081,24082,24083,24084,24085,24086,24087,24088,24089,24090,24091,24092,24093,24094,24095,24096,24097,24098,24099,24100,24101,24102,24103,24104,24105,24106,24107,24108,24109,24110,24111,24112,24113,24114,24115,24116,24117,24118,24119,24120,24121,24122,24123,24124,24125,24126,24127,24128,24129,24130,24131,24132,24133,24134,24135,24136,24137,24138,24139,24140,24141,24142,24143,24144,24145,24146,24147,24148,24149,24150,24151,24152,24153,24154,24155,24156,24157,24158,24159,24160,24161,24162,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24178,24179,24180,24181,24182,24183,24184,24185,24186,24187,24188,24189,24190,24191,24192,24193,24194,24195,24196,24197,24198,24199,24200,24201,24202,24203,24204,24205,24206,24207,24208,24209,24210,24211,24212,24213,24214,24215,24216,24217,24218,24219,24220,24221,24222,24223,24224,24225,24226,24227,24228,24229,24230,24231,24232,24233,24234,24235,24236,24237,24238,24239,24240,24241,24242,24243,24244,24245,24246,24247,24248,24249,24250,24251,24252,24253,24254,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24265,24266,24267,24268,24269,24270,24271,24272,24273,24274,24275,24276,24277,24278,24279,24280,24281,24282,24283,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24296,24297,24298,24299,24300,24301,24302,24303,24304,24305,24306,24307,24308,24309,24310,24311,24312,24313,24314,24315,24316,24317,24318,24319,24320,24321,24322,24323,24324,24325,24326,24327,24328,24329,24330,24331,24332,24333,24334,24335,24336,24337,24338,24339,24340,24341,24342,24343,24344,24345,24346,24347,24348,24349,24350,24351,24352,24353,24354,24355,24356,24357,24358,24359,24360,24361,24362,24363,24364,24365,24366,24367,24368,24369,24370,24371,24372,24373,24374,24375,24376,24377,24378,24379,24380,24381,24382,24383,24384,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24400,24401,24402,24403,24404,24405,24406,24407,24408,24409,24410,24411,24412,24413,24414,24415,24416,24417,24418,24419,24420,24421,24422,24423,24424,24425,24426,24427,24428,24429,24430,24431,24432,24433,24434,24435,24436,24437,24438,24439,24440,24441,24442,24443,24444,24445,24446,24447,24448,24449,24450,24451,24452,24453,24454,24455,24456,24457,24458,24459,24460,24461,24462,24463,24464,24465,24466,24467,24468,24469,24470,24471,24472,24473,24474,24475,24476,24477,24478,24479,24480,24481,24482,24483,24484,24485,24486,24487,24488,24489,24490,24491,24492,24493,24494,24495,24496,24497,24498,24499,24500,24501,24502,24503,24504,24505,24506,24507,24508,24509,24510,24511,24512,24513,24514,24515,24516,24517,24518,24519,24520,24521,24522,24523,24524,24525,24526,24527,24528,24529,24530,24531,24532,24533,24534,24535,24536,24537,24538,24539,24540,24541,24542,24543,24544,24545,24546,24547,24548,24549,24550,24551,24552,24553,24554,24555,24556,24557,24558,24559,24560,24561,24562,24563,24564,24565,24566,24567,24568,24569,24570,24571,24572,24573,24574,24575,24576,24577,24578,24579,24580,24581,24582,24583,24584,24585,24586,24587,24588,24589,24590,24591,24592,24593,24594,24595,24596,24597,24598,24599,24600,24601,24602,24603,24604,24605,24606,24607,24608,24609,24610,24611,24612,24613,24614,24615,24616,24617,24618,24619,24620,24621,24622,24623,24624,24625,24626,24627,24628,24629,24630,24631,24632,24633,24634,24635,24636,24637,24638,24639,24640,24641,24642,24643,24644,24645,24646,24647,24648,24649,24650,24651,24652,24653,24654,24655,24656,24657,24658,24659,24660,24661,24662,24663,24664,24665,24666,24667,24668,24669,24670,24671,24672,24673,24674,24675,24676,24677,24678,24679,24680,24681,24682,24683,24684,24685,24686,24687,24688,24689,24690,24691,24692,24693,24694,24695,24696,24697,24698,24699,24700,24701,24702,24703,24704,24705,24706,24707,24708,24709,24710,24711,24712,24713,24714,24715,24716,24717,24718,24719,24720,24721,24722,24723,24724,24725,24726,24727,24728,24729,24730,24731,24732,24733,24734,24735,24736,24737,24738,24739,24740,24741,24742,24743,24744,24745,24746,24747,24748,24749,24750,24751,24752,24753,24754,24755,24756,24757,24758,24759,24760,24761,24762,24763,24764,24765,24766,24767,24768,24769,24770,24771,24772,24773,24774,24775,24776,24777,24778,24779,24780,24781,24782,24783,24784,24785,24786,24787,24788,24789,24790,24791,24792,24793,24794,24795,24796,24797,24798,24799,24800,24801,24802,24803,24804,24805,24806,24807,24808,24809,24810,24811,24812,24813,24814,24815,24816,24817,24818,24819,24820,24821,24822,24823,24824,24825,24826,24827,24828,24829,24830,24831,24832,24833,24834,24835,24836,24837,24838,24839,24840,24841,24842,24843,24844,24845,24846,24847,24848,24849,24850,24851,24852,24853,24854,24855,24856,24857,24858,24859,24860,24861,24862,24863,24864,24865,24866,24867,24868,24869,24870,24871,24872,24873,24874,24875,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24895,24896,24897,24898,24899,24900,24901,24902,24903,24904,24905,24906,24907,24908,24909,24910,24911,24912,24913,24914,24915,24916,24917,24918,24919,24920,24921,24922,24923,24924,24925,24926,24927,24928,24929,24930,24931,24932,24933,24934,24935,24936,24937,24938,24939,24940,24941,24942,24943,24944,24945,24946,24947,24948,24949,24950,24951,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24971,24972,24973,24974,24975,24976,24977,24978,24979,24980,24981,24982,24983,24984,24985,24986,24987,24988,24989,24990,24991,24992,24993,24994,24995,24996,24997,24998,24999,25000,25001,25002,25003,25004,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25015,25016,25017,25018,25019,25020,25021,25022,25023,25024,25025,25026,25027,25028,25029,25030,25031,25032,25033,25034,25035,25036,25037,25038,25039,25040,25041,25042,25043,25044,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25062,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25077,25078,25079,25080,25081,25082,25083,25084,25085,25086,25087,25088,25089,25090,25091,25092,25093,25094,25095,25096,25097,25098,25099,25100,25101,25102,25103,25104,25105,25106,25107,25108,25109,25110,25111,25112,25113,25114,25115,25116,25117,25118,25119,25120,25121,25122,25123,25124,25125,25126,25127,25128,25129,25130,25131,25132,25133,25134,25135,25136,25137,25138,25139,25140,25141,25142,25143,25144,25145,25146,25147,25148,25149,25150,25151,25152,25153,25154,25155,25156,25157,25158,25159,25160,25161,25162,25163,25164,25165,25166,25167,25168,25169,25170,25171,25172,25173,25174,25175,25176,25177,25178,25179,25180,25181,25182,25183,25184,25185,25186,25187,25188,25189,25190,25191,25192,25193,25194,25195,25196,25197,25198,25199,25200,25201,25202,25203,25204,25205,25206,25207,25208,25209,25210,25211,25212,25213,25214,25215,25216,25217,25218,25219,25220,25221,25222,25223,25224,25225,25226,25227,25228,25229,25230,25231,25232,25233,25234,25235,25236,25237,25238,25239,25240,25241,25242,25243,25244,25245,25246,25247,25248,25249,25250,25251,25252,25253,25254,25255,25256,25257,25258,25259,25260,25261,25262,25263,25264,25265,25266,25267,25268,25269,25270,25271,25272,25273,25274,25275,25276,25277,25278,25279,25280,25281,25282,25283,25284,25285,25286,25287,25288,25289,25290,25291,25292,25293,25294,25295,25296,25297,25298,25299,25300,25301,25302,25303,25304,25305,25306,25307,25308,25309,25310,25311,25312,25313,25314,25315,25316,25317,25318,25319,25320,25321,25322,25323,25324,25325,25326,25327,25328,25329,25330,25331,25332,25333,25334,25335,25336,25337,25338,25339,25340,25341,25342,25343,25344,25345,25346,25347,25348,25349,25350,25351,25352,25353,25354,25355,25356,25357,25358,25359,25360,25361,25362,25363,25364,25365,25366,25367,25368,25369,25370,25371,25372,25373,25374,25375,25376,25377,25378,25379,25380,25381,25382,25383,25384,25385,25386,25387,25388,25389,25390,25391,25392,25393,25394,25395,25396,25397,25398,25399,25400,25401,25402,25403,25404,25405,25406,25407,25408,25409,25410,25411,25412,25413,25414,25415,25416,25417,25418,25419,25420,25421,25422,25423,25424,25425,25426,25427,25428,25429,25430,25431,25432,25433,25434,25435,25436,25437,25438,25439,25440,25441,25442,25443,25444,25445,25446,25447,25448,25449,25450,25451,25452,25453,25454,25455,25456,25457,25458,25459,25460,25461,25462,25463,25464,25465,25466,25467,25468,25469,25470,25471,25472,25473,25474,25475,25476,25477,25478,25479,25480,25481,25482,25483,25484,25485,25486,25487,25488,25489,25490,25491,25492,25493,25494,25495,25496,25497,25498,25499,25500,25501,25502,25503,25504,25505,25506,25507,25508,25509,25510,25511,25512,25513,25514,25515,25516,25517,25518,25519,25520,25521,25522,25523,25524,25525,25526,25527,25528,25529,25530,25531,25532,25533,25534,25535,25536,25537,25538,25539,25540,25541,25542,25543,25544,25545,25546,25547,25548,25549,25550,25551,25552,25553,25554,25555,25556,25557,25558,25559,25560,25561,25562,25563,25564,25565,25566,25567,25568,25569,25570,25571,25572,25573,25574,25575,25576,25577,25578,25579,25580,25581,25582,25583,25584,25585,25586,25587,25588,25589,25590,25591,25592,25593,25594,25595,25596,25597,25598,25599,25600,25601,25602,25603,25604,25605,25606,25607,25608,25609,25610,25611,25612,25613,25614,25615,25616,25617,25618,25619,25620,25621,25622,25623,25624,25625,25626,25627,25628,25629,25630,25631,25632,25633,25634,25635,25636,25637,25638,25639,25640,25641,25642,25643,25644,25645,25646,25647,25648,25649,25650,25651,25652,25653,25654,25655,25656,25657,25658,25659,25660,25661,25662,25663,25664,25665,25666,25667,25668,25669,25670,25671,25672,25673,25674,25675,25676,25677,25678,25679,25680,25681,25682,25683,25684,25685,25686,25687,25688,25689,25690,25691,25692,25693,25694,25695,25696,25697,25698,25699,25700,25701,25702,25703,25704,25705,25706,25707,25708,25709,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25720,25721,25722,25723,25724,25725,25726,25727,25728,25729,25730,25731,25732,25733,25734,25735,25736,25737,25738,25739,25740,25741,25742,25743,25744,25745,25746,25747,25748,25749,25750,25751,25752,25753,25754,25755,25756,25757,25758,25759,25760,25761,25762,25763,25764,25765,25766,25767,25768,25769,25770,25771,25772,25773,25774,25775,25776,25777,25778,25779,25780,25781,25782,25783,25784,25785,25786,25787,25788,25789,25790,25791,25792,25793,25794,25795,25796,25797,25798,25799,25800,25801,25802,25803,25804,25805,25806,25807,25808,25809,25810,25811,25812,25813,25814,25815,25816,25817,25818,25819,25820,25821,25822,25823,25824,25825,25826,25827,25828,25829,25830,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25856,25857,25858,25859,25860,25861,25862,25863,25864,25865,25866,25867,25868,25869,25870,25871,25872,25873,25874,25875,25876,25877,25878,25879,25880,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25893,25894,25895,25896,25897,25898,25899,25900,25901,25902,25903,25904,25905,25906,25907,25908,25909,25910,25911,25912,25913,25914,25915,25916,25917,25918,25919,25920,25921,25922,25923,25924,25925,25926,25927,25928,25929,25930,25931,25932,25933,25934,25935,25936,25937,25938,25939,25940,25941,25942,25943,25944,25945,25946,25947,25948,25949,25950,25951,25952,25953,25954,25955,25956,25957,25958,25959,25960,25961,25962,25963,25964,25965,25966,25967,25968,25969,25970,25971,25972,25973,25974,25975,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25991,25992,25993,25994,25995,25996,25997,25998,25999,26000,26001,26002,26003,26004,26005,26006,26007,26008,26009,26010,26011,26012,26013,26014,26015,26016,26017,26018,26019,26020,26021,26022,26023,26024,26025,26026,26027,26028,26029,26030,26031,26032,26033,26034,26035,26036,26037,26038,26039,26040,26041,26042,26043,26044,26045,26046,26047,26048,26049,26050,26051,26052,26053,26054,26055,26056,26057,26058,26059,26060,26061,26062,26063,26064,26065,26066,26067,26068,26069,26070,26071,26072,26073,26074,26075,26076,26077,26078,26079,26080,26081,26082,26083,26084,26085,26086,26087,26088,26089,26090,26091,26092,26093,26094,26095,26096,26097,26098,26099,26100,26101,26102,26103,26104,26105,26106,26107,26108,26109,26110,26111,26112,26113,26114,26115,26116,26117,26118,26119,26120,26121,26122,26123,26124,26125,26126,26127,26128,26129,26130,26131,26132,26133,26134,26135,26136,26137,26138,26139,26140,26141,26142,26143,26144,26145,26146,26147,26148,26149,26150,26151,26152,26153,26154,26155,26156,26157,26158,26159,26160,26161,26162,26163,26164,26165,26166,26167,26168,26169,26170,26171,26172,26173,26174,26175,26176,26177,26178,26179,26180,26181,26182,26183,26184,26185,26186,26187,26188,26189,26190,26191,26192,26193,26194,26195,26196,26197,26198,26199,26200,26201,26202,26203,26204,26205,26206,26207,26208,26209,26210,26211,26212,26213,26214,26215,26216,26217,26218,26219,26220,26221,26222,26223,26224,26225,26226,26227,26228,26229,26230,26231,26232,26233,26234,26235,26236,26237,26238,26239,26240,26241,26242,26243,26244,26245,26246,26247,26248,26249,26250,26251,26252,26253,26254,26255,26256,26257,26258,26259,26260,26261,26262,26263,26264,26265,26266,26267,26268,26269,26270,26271,26272,26273,26274,26275,26276,26277,26278,26279,26280,26281,26282,26283,26284,26285,26286,26287,26288,26289,26290,26291,26292,26293,26294,26295,26296,26297,26298,26299,26300,26301,26302,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26329,26330,26331,26332,26333,26334,26335,26336,26337,26338,26339,26340,26341,26342,26343,26344,26345,26346,26347,26348,26349,26350,26351,26352,26353,26354,26355,26356,26357,26358,26359,26360,26361,26362,26363,26364,26365,26366,26367,26368,26369,26370,26371,26372,26373,26374,26375,26376,26377,26378,26379,26380,26381,26382,26383,26384,26385,26386,26387,26388,26389,26390,26391,26392,26393,26394,26395,26396,26397,26398,26399,26400,26401,26402,26403,26404,26405,26406,26407,26408,26409,26410,26411,26412,26413,26414,26415,26416,26417,26418,26419,26420,26421,26422,26423,26424,26425,26426,26427,26428,26429,26430,26431,26432,26433,26434,26435,26436,26437,26438,26439,26440,26441,26442,26443,26444,26445,26446,26447,26448,26449,26450,26451,26452,26453,26454,26455,26456,26457,26458,26459,26460,26461,26462,26463,26464,26465,26466,26467,26468,26469,26470,26471,26472,26473,26474,26475,26476,26477,26478,26479,26480,26481,26482,26483,26484,26485,26486,26487,26488,26489,26490,26491,26492,26493,26494,26495,26496,26497,26498,26499,26500,26501,26502,26503,26504,26505,26506,26507,26508,26509,26510,26511,26512,26513,26514,26515,26516,26517,26518,26519,26520,26521,26522,26523,26524,26525,26526,26527,26528,26529,26530,26531,26532,26533,26534,26535,26536,26537,26538,26539,26540,26541,26542,26543,26544,26545,26546,26547,26548,26549,26550,26551,26552,26553,26554,26555,26556,26557,26558,26559,26560,26561,26562,26563,26564,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26575,26576,26577,26578,26579,26580,26581,26582,26583,26584,26585,26586,26587,26588,26589,26590,26591,26592,26593,26594,26595,26596,26597,26598,26599,26600,26601,26602,26603,26604,26605,26606,26607,26608,26609,26610,26611,26612,26613,26614,26615,26616,26617,26618,26619,26620,26621,26622,26623,26624,26625,26626,26627,26628,26629,26630,26631,26632,26633,26634,26635,26636,26637,26638,26639,26640,26641,26642,26643,26644,26645,26646,26647,26648,26649,26650,26651,26652,26653,26654,26655,26656,26657,26658,26659,26660,26661,26662,26663,26664,26665,26666,26667,26668,26669,26670,26671,26672,26673,26674,26675,26676,26677,26678,26679,26680,26681,26682,26683,26684,26685,26686,26687,26688,26689,26690,26691,26692,26693,26694,26695,26696,26697,26698,26699,26700,26701,26702,26703,26704,26705,26706,26707,26708,26709,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26720,26721,26722,26723,26724,26725,26726,26727,26728,26729,26730,26731,26732,26733,26734,26735,26736,26737,26738,26739,26740,26741,26742,26743,26744,26745,26746,26747,26748,26749,26750,26751,26752,26753,26754,26755,26756,26757,26758,26759,26760,26761,26762,26763,26764,26765,26766,26767,26768,26769,26770,26771,26772,26773,26774,26775,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26786,26787,26788,26789,26790,26791,26792,26793,26794,26795,26796,26797,26798,26799,26800,26801,26802,26803,26804,26805,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26816,26817,26818,26819,26820,26821,26822,26823,26824,26825,26826,26827,26828,26829,26830,26831,26832,26833,26834,26835,26836,26837,26838,26839,26840,26841,26842,26843,26844,26845,26846,26847,26848,26849,26850,26851,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26862,26863,26864,26865,26866,26867,26868,26869,26870,26871,26872,26873,26874,26875,26876,26877,26878,26879,26880,26881,26882,26883,26884,26885,26886,26887,26888,26889,26890,26891,26892,26893,26894,26895,26896,26897,26898,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26911,26912,26913,26914,26915,26916,26917,26918,26919,26920,26921,26922,26923,26924,26925,26926,26927,26928,26929,26930,26931,26932,26933,26934,26935,26936,26937,26938,26939,26940,26941,26942,26943,26944,26945,26946,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26964,26965,26966,26967,26968,26969,26970,26971,26972,26973,26974,26975,26976,26977,26978,26979,26980,26981,26982,26983,26984,26985,26986,26987,26988,26989,26990,26991,26992,26993,26994,26995,26996,26997,26998,26999,27000,27001,27002,27003,27004,27005,27006,27007,27008,27009,27010,27011,27012,27013,27014,27015,27016,27017,27018,27019,27020,27021,27022,27023,27024,27025,27026,27027,27028,27029,27030,27031,27032,27033,27034,27035,27036,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27047,27048,27049,27050,27051,27052,27053,27054,27055,27056,27057,27058,27059,27060,27061,27062,27063,27064,27065,27066,27067,27068,27069,27070,27071,27072,27073,27074,27075,27076,27077,27078,27079,27080,27081,27082,27083,27084,27085,27086,27087,27088,27089,27090,27091,27092,27093,27094,27095,27096,27097,27098,27099,27100,27101,27102,27103,27104,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27117,27118,27119,27120,27121,27122,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27133,27134,27135,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27146,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27159,27160,27161,27162,27163,27164,27165,27166,27167,27168,27169,27170,27171,27172,27173,27174,27175,27176,27177,27178,27179,27180,27181,27182,27183,27184,27185,27186,27187,27188,27189,27190,27191,27192,27193,27194,27195,27196,27197,27198,27199,27200,27201,27202,27203,27204,27205,27206,27207,27208,27209,27210,27211,27212,27213,27214,27215,27216,27217,27218,27219,27220,27221,27222,27223,27224,27225,27226,27227,27228,27229,27230,27231,27232,27233,27234,27235,27236,27237,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27249,27250,27251,27252,27253,27254,27255,27256,27257,27258,27259,27260,27261,27262,27263,27264,27265,27266,27267,27268,27269,27270,27271,27272,27273,27274,27275,27276,27277,27278,27279,27280,27281,27282,27283,27284,27285,27286,27287,27288,27289,27290,27291,27292,27293,27294,27295,27296,27297,27298,27299,27300,27301,27302,27303,27304,27305,27306,27307,27308,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27424,27425,27426,27427,27428,27429,27430,27431,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27442,27443,27444,27445,27446,27447,27448,27449,27450,27451,27452,27453,27454,27455,27456,27457,27458,27459,27460,27461,27462,27463,27464,27465,27466,27467,27468,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27481,27482,27483,27484,27485,27486,27487,27488,27489,27490,27491,27492,27493,27494,27495,27496,27497,27498,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27513,27514,27515,27516,27517,27518,27519,27520,27521,27522,27523,27524,27525,27526,27527,27528,27529,27530,27531,27532,27533,27534,27535,27536,27537,27538,27539,27540,27541,27542,27543,27544,27545,27546,27547,27548,27549,27550,27551,27552,27553,27554,27555,27556,27557,27558,27559,27560,27561,27562,27563,27564,27565,27566,27567,27568,27569,27570,27571,27572,27573,27574,27575,27576,27577,27578,27579,27580,27581,27582,27583,27584,27585,27586,27587,27588,27589,27590,27591,27592,27593,27594,27595,27596,27597,27598,27599,27600,27601,27602,27603,27604,27605,27606,27607,27608,27609,27610,27611,27612,27613,27614,27615,27616,27617,27618,27619,27620,27621,27622,27623,27624,27625,27626,27627,27628,27629,27630,27631,27632,27633,27634,27635,27636,27637,27638,27639,27640,27641,27642,27643,27644,27645,27646,27647,27648,27649,27650,27651,27652,27653,27654,27655,27656,27657,27658,27659,27660,27661,27662,27663,27664,27665,27666,27667,27668,27669,27670,27671,27672,27673,27674,27675,27676,27677,27678,27679,27680,27681,27682,27683,27684,27685,27686,27687,27688,27689,27690,27691,27692,27693,27694,27695,27696,27697,27698,27699,27700,27701,27702,27703,27704,27705,27706,27707,27708,27709,27710,27711,27712,27713,27714,27715,27716,27717,27718,27719,27720,27721,27722,27723,27724,27725,27726,27727,27728,27729,27730,27731,27732,27733,27734,27735,27736,27737,27738,27739,27740,27741,27742,27743,27744,27745,27746,27747,27748,27749,27750,27751,27752,27753,27754,27755,27756,27757,27758,27759,27760,27761,27762,27763,27764,27765,27766,27767,27768,27769,27770,27771,27772,27773,27774,27775,27776,27777,27778,27779,27780,27781,27782,27783,27784,27785,27786,27787,27788,27789,27790,27791,27792,27793,27794,27795,27796,27797,27798,27799,27800,27801,27802,27803,27804,27805,27806,27807,27808,27809,27810,27811,27812,27813,27814,27815,27816,27817,27818,27819,27820,27821,27822,27823,27824,27825,27826,27827,27828,27829,27830,27831,27832,27833,27834,27835,27836,27837,27838,27839,27840,27841,27842,27843,27844,27845,27846,27847,27848,27849,27850,27851,27852,27853,27854,27855,27856,27857,27858,27859,27860,27861,27862,27863,27864,27865,27866,27867,27868,27869,27870,27871,27872,27873,27874,27875,27876,27877,27878,27879,27880,27881,27882,27883,27884,27885,27886,27887,27888,27889,27890,27891,27892,27893,27894,27895,27896,27897,27898,27899,27900,27901,27902,27903,27904,27905,27906,27907,27908,27909,27910,27911,27912,27913,27914,27915,27916,27917,27918,27919,27920,27921,27922,27923,27924,27925,27926,27927,27928,27929,27930,27931,27932,27933,27934,27935,27936,27937,27938,27939,27940,27941,27942,27943,27944,27945,27946,27947,27948,27949,27950,27951,27952,27953,27954,27955,27956,27957,27958,27959,27960,27961,27962,27963,27964,27965,27966,27967,27968,27969,27970,27971,27972,27973,27974,27975,27976,27977,27978,27979,27980,27981,27982,27983,27984,27985,27986,27987,27988,27989,27990,27991,27992,27993,27994,27995,27996,27997,27998,27999,28000,28001,28002,28003,28004,28005,28006,28007,28008,28009,28010,28011,28012,28013,28014,28015,28016,28017,28018,28019,28020,28021,28022,28023,28024,28025,28026,28027,28028,28029,28030,28031,28032,28033,28034,28035,28036,28037,28038,28039,28040,28041,28042,28043,28044,28045,28046,28047,28048,28049,28050,28051,28052,28053,28054,28055,28056,28057,28058,28059,28060,28061,28062,28063,28064,28065,28066,28067,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092,28093,28094,28095,28096,28097,28098,28099,28100,28101,28102,28103,28104,28105,28106,28107,28108,28109,28110,28111,28112,28113,28114,28115,28116,28117,28118,28119,28120,28121,28122,28123,28124,28125,28126,28127,28128,28129,28130,28131,28132,28133,28134,28135,28136,28137,28138,28139,28140,28141,28142,28143,28144,28145,28146,28147,28148,28149,28150,28151,28152,28153,28154,28155,28156,28157,28158,28159,28160,28161,28162,28163,28164,28165,28166,28167,28168,28169,28170,28171,28172,28173,28174,28175,28176,28177,28178,28179,28180,28181,28182,28183,28184,28185,28186,28187,28188,28189,28190,28191,28192,28193,28194,28195,28196,28197,28198,28199,28200,28201,28202,28203,28204,28205,28206,28207,28208,28209,28210,28211,28212,28213,28214,28215,28216,28217,28218,28219,28220,28221,28222,28223,28224,28225,28226,28227,28228,28229,28230,28231,28232,28233,28234,28235,28236,28237,28238,28239,28240,28241,28242,28243,28244,28245,28246,28247,28248,28249,28250,28251,28252,28253,28254,28255,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28267,28268,28269,28270,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28286,28287,28288,28289,28290,28291,28292,28293,28294,28295,28296,28297,28298,28299,28300,28301,28302,28303,28304,28305,28306,28307,28308,28309,28310,28311,28312,28313,28314,28315,28316,28317,28318,28319,28320,28321,28322,28323,28324,28325,28326,28327,28328,28329,28330,28331,28332,28333,28334,28335,28336,28337,28338,28339,28340,28341,28342,28343,28344,28345,28346,28347,28348,28349,28350,28351,28352,28353,28354,28355,28356,28357,28358,28359,28360,28361,28362,28363,28364,28365,28366,28367,28368,28369,28370,28371,28372,28373,28374,28375,28376,28377,28378,28379,28380,28381,28382,28383,28384,28385,28386,28387,28388,28389,28390,28391,28392,28393,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28404,28405,28406,28407,28408,28409,28410,28411,28412,28413,28414,28415,28416,28417,28418,28419,28420,28421,28422,28423,28424,28425,28426,28427,28428,28429,28430,28431,28432,28433,28434,28435,28436,28437,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28448,28449,28450,28451,28452,28453,28454,28455,28456,28457,28458,28459,28460,28461,28462,28463,28464,28465,28466,28467,28468,28469,28470,28471,28472,28473,28474,28475,28476,28477,28478,28479,28480,28481,28482,28483,28484,28485,28486,28487,28488,28489,28490,28491,28492,28493,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28504,28505,28506,28507,28508,28509,28510,28511,28512,28513,28514,28515,28516,28517,28518,28519,28520,28521,28522,28523,28524,28525,28526,28527,28528,28529,28530,28531,28532,28533,28534,28535,28536,28537,28538,28539,28540,28541,28542,28543,28544,28545,28546,28547,28548,28549,28550,28551,28552,28553,28554,28555,28556,28557,28558,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28572,28573,28574,28575,28576,28577,28578,28579,28580,28581,28582,28583,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28595,28596,28597,28598,28599,28600,28601,28602,28603,28604,28605,28606,28607,28608,28609,28610,28611,28612,28613,28614,28615,28616,28617,28618,28619,28620,28621,28622,28623,28624,28625,28626,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28638,28639,28640,28641,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28654,28655,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28689,28690,28691,28692,28693,28694,28695,28696,28697,28698,28699,28700,28701,28702,28703,28704,28705,28706,28707,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28725,28726,28727,28728,28729,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28748,28749,28750,28751,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28766,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,28811,28812,28813,28814,28815,28816,28817,28818,28819,28820,28821,28822,28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28917,28918,28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28966,28967,28968,28969,28970,28971,28972,28973,28974,28975,28976,28977,28978,28979,28980,28981,28982,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28997,28998,28999,29000,29001,29002,29003,29004,29005,29006,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29051,29052,29053,29054,29055,29056,29057,29058,29059,29060,29061,29062,29063,29064,29065,29066,29067,29068,29069,29070,29071,29072,29073,29074,29075,29076,29077,29078,29079,29080,29081,29082,29083,29084,29085,29086,29087,29088,29089,29090,29091,29092,29093,29094,29095,29096,29097,29098,29099,29100,29101,29102,29103,29104,29105,29106,29107,29108,29109,29110,29111,29112,29113,29114,29115,29116,29117,29118,29119,29120,29121,29122,29123,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29134,29135,29136,29137,29138,29139,29140,29141,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29152,29153,29154,29155,29156,29157,29158,29159,29160,29161,29162,29163,29164,29165,29166,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29177,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29190,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29213,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29224,29225,29226,29227,29228,29229,29230,29231,29232,29233,29234,29235,29236,29237,29238,29239,29240,29241,29242,29243,29244,29245,29246,29247,29248,29249,29250,29251,29252,29253,29254,29255,29256,29257,29258,29259,29260,29261,29262,29263,29264,29265,29266,29267,29268,29269,29270,29271,29272,29273,29274,29275,29276,29277,29278,29279,29280,29281,29282,29283,29284,29285,29286,29287,29288,29289,29290,29291,29292,29293,29294,29295,29296,29297,29298,29299,29300,29301,29302,29303,29304,29305,29306,29307,29308,29309,29310,29311,29312,29313,29314,29315,29316,29317,29318,29319,29320,29321,29322,29323,29324,29325,29326,29327,29328,29329,29330,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29343,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29356,29357,29358,29359,29360,29361,29362,29363,29364,29365,29366,29367,29368,29369,29370,29371,29372,29373,29374,29375,29376,29377,29378,29379,29380,29381,29382,29383,29384,29385,29386,29387,29388,29389,29390,29391,29392,29393,29394,29395,29396,29397,29398,29399,29400,29401,29402,29403,29404,29405,29406,29407,29408,29409,29410,29411,29412,29413,29414,29415,29416,29417,29418,29419,29420,29421,29422,29423,29424,29425,29426,29427,29428,29429,29430,29431,29432,29433,29434,29435,29436,29437,29438,29439,29440,29441,29442,29443,29444,29445,29446,29447,29448,29449,29450,29451,29452,29453,29454,29455,29456,29457,29458,29459,29460,29461,29462,29463,29464,29465,29466,29467,29468,29469,29470,29471,29472,29473,29474,29475,29476,29477,29478,29479,29480,29481,29482,29483,29484,29485,29486,29487,29488,29489,29490,29491,29492,29493,29494,29495,29496,29497,29498,29499,29500,29501,29502,29503,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29517,29518,29519,29520,29521,29522,29523,29524,29525,29526,29527,29528,29529,29530,29531,29532,29533,29534,29535,29536,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29548,29549,29550,29551,29552,29553,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29566,29567,29568,29569,29570,29571,29572,29573,29574,29575,29576,29577,29578,29579,29580,29581,29582,29583,29584,29585,29586,29587,29588,29589,29590,29591,29592,29593,29594,29595,29596,29597,29598,29599,29600,29601,29602,29603,29604,29605,29606,29607,29608,29609,29610,29611,29612,29613,29614,29615,29616,29617,29618,29619,29620,29621,29622,29623,29624,29625,29626,29627,29628,29629,29630,29631,29632,29633,29634,29635,29636,29637,29638,29639,29640,29641,29642,29643,29644,29645,29646,29647,29648,29649,29650,29651,29652,29653,29654,29655,29656,29657,29658,29659,29660,29661,29662,29663,29664,29665,29666,29667,29668,29669,29670,29671,29672,29673,29674,29675,29676,29677,29678,29679,29680,29681,29682,29683,29684,29685,29686,29687,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29699,29700,29701,29702,29703,29704,29705,29706,29707,29708,29709,29710,29711,29712,29713,29714,29715,29716,29717,29718,29719,29720,29721,29722,29723,29724,29725,29726,29727,29728,29729,29730,29731,29732,29733,29734,29735,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29746,29747,29748,29749,29750,29751,29752,29753,29754,29755,29756,29757,29758,29759,29760,29761,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29781,29782,29783,29784,29785,29786,29787,29788,29789,29790,29791,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29805,29806,29807,29808,29809,29810,29811,29812,29813,29814,29815,29816,29817,29818,29819,29820,29821,29822,29823,29824,29825,29826,29827,29828,29829,29830,29831,29832,29833,29834,29835,29836,29837,29838,29839,29840,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29852,29853,29854,29855,29856,29857,29858,29859,29860,29861,29862,29863,29864,29865,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29882,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29906,29907,29908,29909,29910,29911,29912,29913,29914,29915,29916,29917,29918,29919,29920,29921,29922,29923,29924,29925,29926,29927,29928,29929,29930,29931,29932,29933,29934,29935,29936,29937,29938,29939,29940,29941,29942,29943,29944,29945,29946,29947,29948,29949,29950,29951,29952,29953,29954,29955,29956,29957,29958,29959,29960,29961,29962,29963,29964,29965,29966,29967,29968,29969,29970,29971,29972,29973,29974,29975,29976,29977,29978,29979,29980,29981,29982,29983,29984,29985,29986,29987,29988,29989,29990,29991,29992,29993,29994,29995,29996,29997,29998,29999,30000,30001,30002,30003,30004,30005,30006,30007,30008,30009,30010,30011,30012,30013,30014,30015,30016,30017,30018,30019,30020,30021,30022,30023,30024,30025,30026,30027,30028,30029,30030,30031,30032,30033,30034,30035,30036,30037,30038,30039,30040,30041,30042,30043,30044,30045,30046,30047,30048,30049,30050,30051,30052,30053,30054,30055,30056,30057,30058,30059,30060,30061,30062,30063,30064,30065,30066,30067,30068,30069,30070,30071,30072,30073,30074,30075,30076,30077,30078,30079,30080,30081,30082,30083,30084,30085,30086,30087,30088,30089,30090,30091,30092,30093,30094,30095,30096,30097,30098,30099,30100,30101,30102,30103,30104,30105,30106,30107,30108,30109,30110,30111,30112,30113,30114,30115,30116,30117,30118,30119,30120,30121,30122,30123,30124,30125,30126,30127,30128,30129,30130,30131,30132,30133,30134,30135,30136,30137,30138,30139,30140,30141,30142,30143,30144,30145,30146,30147,30148,30149,30150,30151,30152,30153,30154,30155,30156,30157,30158,30159,30160,30161,30162,30163,30164,30165,30166,30167,30168,30169,30170,30171,30172,30173,30174,30175,30176,30177,30178,30179,30180,30181,30182,30183,30184,30185,30186,30187,30188,30189,30190,30191,30192,30193,30194,30195,30196,30197,30198,30199,30200,30201,30202,30203,30204,30205,30206,30207,30208,30209,30210,30211,30212,30213,30214,30215,30216,30217,30218,30219,30220,30221,30222,30223,30224,30225,30226,30227,30228,30229,30230,30231,30232,30233,30234,30235,30236,30237,30238,30239,30240,30241,30242,30243,30244,30245,30246,30247,30248,30249,30250,30251,30252,30253,30254,30255,30256,30257,30258,30259,30260,30261,30262,30263,30264,30265,30266,30267,30268,30269,30270,30271,30272,30273,30274,30275,30276,30277,30278,30279,30280,30281,30282,30283,30284,30285,30286,30287,30288,30289,30290,30291,30292,30293,30294,30295,30296,30297,30298,30299,30300,30301,30302,30303,30304,30305,30306,30307,30308,30309,30310,30311,30312,30313,30314,30315,30316,30317,30318,30319,30320,30321,30322,30323,30324,30325,30326,30327,30328,30329,30330,30331,30332,30333,30334,30335,30336,30337,30338,30339,30340,30341,30342,30343,30344,30345,30346,30347,30348,30349,30350,30351,30352,30353,30354,30355,30356,30357,30358,30359,30360,30361,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30372,30373,30374,30375,30376,30377,30378,30379,30380,30381,30382,30383,30384,30385,30386,30387,30388,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30399,30400,30401,30402,30403,30404,30405,30406,30407,30408,30409,30410,30411,30412,30413,30414,30415,30416,30417,30418,30419,30420,30421,30422,30423,30424,30425,30426,30427,30428,30429,30430,30431,30432,30433,30434,30435,30436,30437,30438,30439,30440,30441,30442,30443,30444,30445,30446,30447,30448,30449,30450,30451,30452,30453,30454,30455,30456,30457,30458,30459,30460,30461,30462,30463,30464,30465,30466,30467,30468,30469,30470,30471,30472,30473,30474,30475,30476,30477,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30489,30490,30491,30492,30493,30494,30495,30496,30497,30498,30499,30500,30501,30502,30503,30504,30505,30506,30507,30508,30509,30510,30511,30512,30513,30514,30515,30516,30517,30518,30519,30520,30521,30522,30523,30524,30525,30526,30527,30528,30529,30530,30531,30532,30533,30534,30535,30536,30537,30538,30539,30540,30541,30542,30543,30544,30545,30546,30547,30548,30549,30550,30551,30552,30553,30554,30555,30556,30557,30558,30559,30560,30561,30562,30563,30564,30565,30566,30567,30568,30569,30570,30571,30572,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30585,30586,30587,30588,30589,30590,30591,30592,30593,30594,30595,30596,30597,30598,30599,30600,30601,30602,30603,30604,30605,30606,30607,30608,30609,30610,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30623,30624,30625,30626,30627,30628,30629,30630,30631,30632,30633,30634,30635,30636,30637,30638,30639,30640,30641,30642,30643,30644,30645,30646,30647,30648,30649,30650,30651,30652,30653,30654,30655,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30669,30670,30671,30672,30673,30674,30675,30676,30677,30678,30679,30680,30681,30682,30683,30684,30685,30686,30687,30688,30689,30690,30691,30692,30693,30694,30695,30696,30697,30698,30699,30700,30701,30702,30703,30704,30705,30706,30707,30708,30709,30710,30711,30712,30713,30714,30715,30716,30717,30718,30719,30720,30721,30722,30723,30724,30725,30726,30727,30728,30729,30730,30731,30732,30733,30734,30735,30736,30737,30738,30739,30740,30741,30742,30743,30744,30745,30746,30747,30748,30749,30750,30751,30752,30753,30754,30755,30756,30757,30758,30759,30760,30761,30762,30763,30764,30765,30766,30767,30768,30769,30770,30771,30772,30773,30774,30775,30776,30777,30778,30779,30780,30781,30782,30783,30784,30785,30786,30787,30788,30789,30790,30791,30792,30793,30794,30795,30796,30797,30798,30799,30800,30801,30802,30803,30804,30805,30806,30807,30808,30809,30810,30811,30812,30813,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30826,30827,30828,30829,30830,30831,30832,30833,30834,30835,30836,30837,30838,30839,30840,30841,30842,30843,30844,30845,30846,30847,30848,30849,30850,30851,30852,30853,30854,30855,30856,30857,30858,30859,30860,30861,30862,30863,30864,30865,30866,30867,30868,30869,30870,30871,30872,30873,30874,30875,30876,30877,30878,30879,30880,30881,30882,30883,30884,30885,30886,30887,30888,30889,30890,30891,30892,30893,30894,30895,30896,30897,30898,30899,30900,30901,30902,30903,30904,30905,30906,30907,30908,30909,30910,30911,30912,30913,30914,30915,30916,30917,30918,30919,30920,30921,30922,30923,30924,30925,30926,30927,30928,30929,30930,30931,30932,30933,30934,30935,30936,30937,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30952,30953,30954,30955,30956,30957,30958,30959,30960,30961,30962,30963,30964,30965,30966,30967,30968,30969,30970,30971,30972,30973,30974,30975,30976,30977,30978,30979,30980,30981,30982,30983,30984,30985,30986,30987,30988,30989,30990,30991,30992,30993,30994,30995,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31006,31007,31008,31009,31010,31011,31012,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31028,31029,31030,31031,31032,31033,31034,31035,31036,31037,31038,31039,31040,31041,31042,31043,31044,31045,31046,31047,31048,31049,31050,31051,31052,31053,31054,31055,31056,31057,31058,31059,31060,31061,31062,31063,31064,31065,31066,31067,31068,31069,31070,31071,31072,31073,31074,31075,31076,31077,31078,31079,31080,31081,31082,31083,31084,31085,31086,31087,31088,31089,31090,31091,31092,31093,31094,31095,31096,31097,31098,31099,31100,31101,31102,31103,31104,31105,31106,31107,31108,31109,31110,31111,31112,31113,31114,31115,31116,31117,31118,31119,31120,31121,31122,31123,31124,31125,31126,31127,31128,31129,31130,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31143,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31155,31156,31157,31158,31159,31160,31161,31162,31163,31164,31165,31166,31167,31168,31169,31170,31171,31172,31173,31174,31175,31176,31177,31178,31179,31180,31181,31182,31183,31184,31185,31186,31187,31188,31189,31190,31191,31192,31193,31194,31195,31196,31197,31198,31199,31200,31201,31202,31203,31204,31205,31206,31207,31208,31209,31210,31211,31212,31213,31214,31215,31216,31217,31218,31219,31220,31221,31222,31223,31224,31225,31226,31227,31228,31229,31230,31231,31232,31233,31234,31235,31236,31237,31238,31239,31240,31241,31242,31243,31244,31245,31246,31247,31248,31249,31250,31251,31252,31253,31254,31255,31256,31257,31258,31259,31260,31261,31262,31263,31264,31265,31266,31267,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31283,31284,31285,31286,31287,31288,31289,31290,31291,31292,31293,31294,31295,31296,31297,31298,31299,31300,31301,31302,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31313,31314,31315,31316,31317,31318,31319,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31344,31345,31346,31347,31348,31349,31350,31351,31352,31353,31354,31355,31356,31357,31358,31359,31360,31361,31362,31363,31364,31365,31366,31367,31368,31369,31370,31371,31372,31373,31374,31375,31376,31377,31378,31379,31380,31381,31382,31383,31384,31385,31386,31387,31388,31389,31390,31391,31392,31393,31394,31395,31396,31397,31398,31399,31400,31401,31402,31403,31404,31405,31406,31407,31408,31409,31410,31411,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31423,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31435,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31446,31447,31448,31449,31450,31451,31452,31453,31454,31455,31456,31457,31458,31459,31460,31461,31462,31463,31464,31465,31466,31467,31468,31469,31470,31471,31472,31473,31474,31475,31476,31477,31478,31479,31480,31481,31482,31483,31484,31485,31486,31487,31488,31489,31490,31491,31492,31493,31494,31495,31496,31497,31498,31499,31500,31501,31502,31503,31504,31505,31506,31507,31508,31509,31510,31511,31512,31513,31514,31515,31516,31517,31518,31519,31520,31521,31522,31523,31524,31525,31526,31527,31528,31529,31530,31531,31532,31533,31534,31535,31536,31537,31538,31539,31540,31541,31542,31543,31544,31545,31546,31547,31548,31549,31550,31551,31552,31553,31554,31555,31556,31557,31558,31559,31560,31561,31562,31563,31564,31565,31566,31567,31568,31569,31570,31571,31572,31573,31574,31575,31576,31577,31578,31579,31580,31581,31582,31583,31584,31585,31586,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31598,31599,31600,31601,31602,31603,31604,31605,31606,31607,31608,31609,31610,31611,31612,31613,31614,31615,31616,31617,31618,31619,31620,31621,31622,31623,31624,31625,31626,31627,31628,31629,31630,31631,31632,31633,31634,31635,31636,31637,31638,31639,31640,31641,31642,31643,31644,31645,31646,31647,31648,31649,31650,31651,31652,31653,31654,31655,31656,31657,31658,31659,31660,31661,31662,31663,31664,31665,31666,31667,31668,31669,31670,31671,31672,31673,31674,31675,31676,31677,31678,31679,31680,31681,31682,31683,31684,31685,31686,31687,31688,31689,31690,31691,31692,31693,31694,31695,31696,31697,31698,31699,31700,31701,31702,31703,31704,31705,31706,31707,31708,31709,31710,31711,31712,31713,31714,31715,31716,31717,31718,31719,31720,31721,31722,31723,31724,31725,31726,31727,31728,31729,31730,31731,31732,31733,31734,31735,31736,31737,31738,31739,31740,31741,31742,31743,31744,31745,31746,31747,31748,31749,31750,31751,31752,31753,31754,31755,31756,31757,31758,31759,31760,31761,31762,31763,31764,31765,31766,31767,31768,31769,31770,31771,31772,31773,31774,31775,31776,31777,31778,31779,31780,31781,31782,31783,31784,31785,31786,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31800,31801,31802,31803,31804,31805,31806,31807,31808,31809,31810,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31821,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31859,31860,31861,31862,31863,31864,31865,31866,31867,31868,31869,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31881,31882,31883,31884,31885,31886,31887,31888,31889,31890,31891,31892,31893,31894,31895,31896,31897,31898,31899,31900,31901,31902,31903,31904,31905,31906,31907,31908,31909,31910,31911,31912,31913,31914,31915,31916,31917,31918,31919,31920,31921,31922,31923,31924,31925,31926,31927,31928,31929,31930,31931,31932,31933,31934,31935,31936,31937,31938,31939,31940,31941,31942,31943,31944,31945,31946,31947,31948,31949,31950,31951,31952,31953,31954,31955,31956,31957,31958,31959,31960,31961,31962,31963,31964,31965,31966,31967,31968,31969,31970,31971,31972,31973,31974,31975,31976,31977,31978,31979,31980,31981,31982,31983,31984,31985,31986,31987,31988,31989,31990,31991,31992,31993,31994,31995,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32010,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32032,32033,32034,32035,32036,32037,32038,32039,32040,32041,32042,32043,32044,32045,32046,32047,32048,32049,32050,32051,32052,32053,32054,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32110,32111,32112,32113,32114,32115,32116,32117,32118,32119,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32166,32167,32168,32169,32170,32171,32172,32173,32174,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32315,32316,32317,32318,32319,32320,32321,32322,32323,32324,32325,32326,32327,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32386,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32411,32412,32413,32414,32415,32416,32417,32418,32419,32420,32421,32422,32423,32424,32425,32426,32427,32428,32429,32430,32431,32432,32433,32434,32435,32436,32437,32438,32439,32440,32441,32442,32443,32444,32445,32446,32447,32448,32449,32450,32451,32452,32453,32454,32455,32456,32457,32458,32459,32460,32461,32462,32463,32464,32465,32466,32467,32468,32469,32470,32471,32472,32473,32474,32475,32476,32477,32478,32479,32480,32481,32482,32483,32484,32485,32486,32487,32488,32489,32490,32491,32492,32493,32494,32495,32496,32497,32498,32499,32500,32501,32502,32503,32504,32505,32506,32507,32508,32509,32510,32511,32512,32513,32514,32515,32516,32517,32518,32519,32520,32521,32522,32523,32524,32525,32526,32527,32528,32529,32530,32531,32532,32533,32534,32535,32536,32537,32538,32539,32540,32541,32542,32543,32544,32545,32546,32547,32548,32549,32550,32551,32552,32553,32554,32555,32556,32557,32558,32559,32560,32561,32562,32563,32564,32565,32566,32567,32568,32569,32570,32571,32572,32573,32574,32575,32576,32577,32578,32579,32580,32581,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32592,32593,32594,32595,32596,32597,32598,32599,32600,32601,32602,32603,32604,32605,32606,32607,32608,32609,32610,32611,32612,32613,32614,32615,32616,32617,32618,32619,32620,32621,32622,32623,32624,32625,32626,32627,32628,32629,32630,32631,32632,32633,32634,32635,32636,32637,32638,32639,32640,32641,32642,32643,32644,32645,32646,32647,32648,32649,32650,32651,32652,32653,32654,32655,32656,32657,32658,32659,32660,32661,32662,32663,32664,32665,32666,32667,32668,32669,32670,32671,32672,32673,32674,32675,32676,32677,32678,32679,32680,32681,32682,32683,32684,32685,32686,32687,32688,32689,32690,32691,32692,32693,32694,32695,32696,32697,32698,32699,32700,32701,32702,32703,32704,32705,32706,32707,32708,32709,32710,32711,32712,32713,32714,32715,32716,32717,32718,32719,32720,32721,32722,32723,32724,32725,32726,32727,32728,32729,32730,32731,32732,32733,32734,32735,32736,32737,32738,32739,32740,32741,32742,32743,32744,32745,32746,32747,32748,32749,32750,32751,32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767,32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783,32784,32785,32786,32787,32788,32789,32790,32791,32792,32793,32794,32795,32796,32797,32798,32799,32800,32801,32802,32803,32804,32805,32806,32807,32808,32809,32810,32811,32812,32813,32814,32815,32816,32817,32818,32819,32820,32821,32822,32823,32824,32825,32826,32827,32828,32829,32830,32831,32832,32833,32834,32835,32836,32837,32838,32839,32840,32841,32842,32843,32844,32845,32846,32847,32848,32849,32850,32851,32852,32853,32854,32855,32856,32857,32858,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32873,32874,32875,32876,32877,32878,32879,32880,32881,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,32894,32895,32896,32897,32898,32899,32900,32901,32902,32903,32904,32905,32906,32907,32908,32909,32910,32911,32912,32913,32914,32915,32916,32917,32918,32919,32920,32921,32922,32923,32924,32925,32926,32927,32928,32929,32930,32931,32932,32933,32934,32935,32936,32937,32938,32939,32940,32941,32942,32943,32944,32945,32946,32947,32948,32949,32950,32951,32952,32953,32954,32955,32956,32957,32958,32959,32960,32961,32962,32963,32964,32965,32966,32967,32968,32969,32970,32971,32972,32973,32974,32975,32976,32977,32978,32979,32980,32981,32982,32983,32984,32985,32986,32987,32988,32989,32990,32991,32992,32993,32994,32995,32996,32997,32998,32999,33000,33001,33002,33003,33004,33005,33006,33007,33008,33009,33010,33011,33012,33013,33014,33015,33016,33017,33018,33019,33020,33021,33022,33023,33024,33025,33026,33027,33028,33029,33030,33031,33032,33033,33034,33035,33036,33037,33038,33039,33040,33041,33042,33043,33044,33045,33046,33047,33048,33049,33050,33051,33052,33053,33054,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33068,33069,33070,33071,33072,33073,33074,33075,33076,33077,33078,33079,33080,33081,33082,33083,33084,33085,33086,33087,33088,33089,33090,33091,33092,33093,33094,33095,33096,33097,33098,33099,33100,33101,33102,33103,33104,33105,33106,33107,33108,33109,33110,33111,33112,33113,33114,33115,33116,33117,33118,33119,33120,33121,33122,33123,33124,33125,33126,33127,33128,33129,33130,33131,33132,33133,33134,33135,33136,33137,33138,33139,33140,33141,33142,33143,33144,33145,33146,33147,33148,33149,33150,33151,33152,33153,33154,33155,33156,33157,33158,33159,33160,33161,33162,33163,33164,33165,33166,33167,33168,33169,33170,33171,33172,33173,33174,33175,33176,33177,33178,33179,33180,33181,33182,33183,33184,33185,33186,33187,33188,33189,33190,33191,33192,33193,33194,33195,33196,33197,33198,33199,33200,33201,33202,33203,33204,33205,33206,33207,33208,33209,33210,33211,33212,33213,33214,33215,33216,33217,33218,33219,33220,33221,33222,33223,33224,33225,33226,33227,33228,33229,33230,33231,33232,33233,33234,33235,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33251,33252,33253,33254,33255,33256,33257,33258,33259,33260,33261,33262,33263,33264,33265,33266,33267,33268,33269,33270,33271,33272,33273,33274,33275,33276,33277,33278,33279,33280,33281,33282,33283,33284,33285,33286,33287,33288,33289,33290,33291,33292,33293,33294,33295,33296,33297,33298,33299,33300,33301,33302,33303,33304,33305,33306,33307,33308,33309,33310,33311,33312,33313,33314,33315,33316,33317,33318,33319,33320,33321,33322,33323,33324,33325,33326,33327,33328,33329,33330,33331,33332,33333,33334,33335,33336,33337,33338,33339,33340,33341,33342,33343,33344,33345,33346,33347,33348,33349,33350,33351,33352,33353,33354,33355,33356,33357,33358,33359,33360,33361,33362,33363,33364,33365,33366,33367,33368,33369,33370,33371,33372,33373,33374,33375,33376,33377,33378,33379,33380,33381,33382,33383,33384,33385,33386,33387,33388,33389,33390,33391,33392,33393,33394,33395,33396,33397,33398,33399,33400,33401,33402,33403,33404,33405,33406,33407,33408,33409,33410,33411,33412,33413,33414,33415,33416,33417,33418,33419,33420,33421,33422,33423,33424,33425,33426,33427,33428,33429,33430,33431,33432,33433,33434,33435,33436,33437,33438,33439,33440,33441,33442,33443,33444,33445,33446,33447,33448,33449,33450,33451,33452,33453,33454,33455,33456,33457,33458,33459,33460,33461,33462,33463,33464,33465,33466,33467,33468,33469,33470,33471,33472,33473,33474,33475,33476,33477,33478,33479,33480,33481,33482,33483,33484,33485,33486,33487,33488,33489,33490,33491,33492,33493,33494,33495,33496,33497,33498,33499,33500,33501,33502,33503,33504,33505,33506,33507,33508,33509,33510,33511,33512,33513,33514,33515,33516,33517,33518,33519,33520,33521,33522,33523,33524,33525,33526,33527,33528,33529,33530,33531,33532,33533,33534,33535,33536,33537,33538,33539,33540,33541,33542,33543,33544,33545,33546,33547,33548,33549,33550,33551,33552,33553,33554,33555,33556,33557,33558,33559,33560,33561,33562,33563,33564,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33575,33576,33577,33578,33579,33580,33581,33582,33583,33584,33585,33586,33587,33588,33589,33590,33591,33592,33593,33594,33595,33596,33597,33598,33599,33600,33601,33602,33603,33604,33605,33606,33607,33608,33609,33610,33611,33612,33613,33614,33615,33616,33617,33618,33619,33620,33621,33622,33623,33624,33625,33626,33627,33628,33629,33630,33631,33632,33633,33634,33635,33636,33637,33638,33639,33640,33641,33642,33643,33644,33645,33646,33647,33648,33649,33650,33651,33652,33653,33654,33655,33656,33657,33658,33659,33660,33661,33662,33663,33664,33665,33666,33667,33668,33669,33670,33671,33672,33673,33674,33675,33676,33677,33678,33679,33680,33681,33682,33683,33684,33685,33686,33687,33688,33689,33690,33691,33692,33693,33694,33695,33696,33697,33698,33699,33700,33701,33702,33703,33704,33705,33706,33707,33708,33709,33710,33711,33712,33713,33714,33715,33716,33717,33718,33719,33720,33721,33722,33723,33724,33725,33726,33727,33728,33729,33730,33731,33732,33733,33734,33735,33736,33737,33738,33739,33740,33741,33742,33743,33744,33745,33746,33747,33748,33749,33750,33751,33752,33753,33754,33755,33756,33757,33758,33759,33760,33761,33762,33763,33764,33765,33766,33767,33768,33769,33770,33771,33772,33773,33774,33775,33776,33777,33778,33779,33780,33781,33782,33783,33784,33785,33786,33787,33788,33789,33790,33791,33792,33793,33794,33795,33796,33797,33798,33799,33800,33801,33802,33803,33804,33805,33806,33807,33808,33809,33810,33811,33812,33813,33814,33815,33816,33817,33818,33819,33820,33821,33822,33823,33824,33825,33826,33827,33828,33829,33830,33831,33832,33833,33834,33835,33836,33837,33838,33839,33840,33841,33842,33843,33844,33845,33846,33847,33848,33849,33850,33851,33852,33853,33854,33855,33856,33857,33858,33859,33860,33861,33862,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33873,33874,33875,33876,33877,33878,33879,33880,33881,33882,33883,33884,33885,33886,33887,33888,33889,33890,33891,33892,33893,33894,33895,33896,33897,33898,33899,33900,33901,33902,33903,33904,33905,33906,33907,33908,33909,33910,33911,33912,33913,33914,33915,33916,33917,33918,33919,33920,33921,33922,33923,33924,33925,33926,33927,33928,33929,33930,33931,33932,33933,33934,33935,33936,33937,33938,33939,33940,33941,33942,33943,33944,33945,33946,33947,33948,33949,33950,33951,33952,33953,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33967,33968,33969,33970,33971,33972,33973,33974,33975,33976,33977,33978,33979,33980,33981,33982,33983,33984,33985,33986,33987,33988,33989,33990,33991,33992,33993,33994,33995,33996,33997,33998,33999,34000,34001,34002,34003,34004,34005,34006,34007,34008,34009,34010,34011,34012,34013,34014,34015,34016,34017,34018,34019,34020,34021,34022,34023,34024,34025,34026,34027,34028,34029,34030,34031,34032,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34044,34045,34046,34047,34048,34049,34050,34051,34052,34053,34054,34055,34056,34057,34058,34059,34060,34061,34062,34063,34064,34065,34066,34067,34068,34069,34070,34071,34072,34073,34074,34075,34076,34077,34078,34079,34080,34081,34082,34083,34084,34085,34086,34087,34088,34089,34090,34091,34092,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34103,34104,34105,34106,34107,34108,34109,34110,34111,34112,34113,34114,34115,34116,34117,34118,34119,34120,34121,34122,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34134,34135,34136,34137,34138,34139,34140,34141,34142,34143,34144,34145,34146,34147,34148,34149,34150,34151,34152,34153,34154,34155,34156,34157,34158,34159,34160,34161,34162,34163,34164,34165,34166,34167,34168,34169,34170,34171,34172,34173,34174,34175,34176,34177,34178,34179,34180,34181,34182,34183,34184,34185,34186,34187,34188,34189,34190,34191,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34203,34204,34205,34206,34207,34208,34209,34210,34211,34212,34213,34214,34215,34216,34217,34218,34219,34220,34221,34222,34223,34224,34225,34226,34227,34228,34229,34230,34231,34232,34233,34234,34235,34236,34237,34238,34239,34240,34241,34242,34243,34244,34245,34246,34247,34248,34249,34250,34251,34252,34253,34254,34255,34256,34257,34258,34259,34260,34261,34262,34263,34264,34265,34266,34267,34268,34269,34270,34271,34272,34273,34274,34275,34276,34277,34278,34279,34280,34281,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,34297,34298,34299,34300,34301,34302,34303,34304,34305,34306,34307,34308,34309,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34321,34322,34323,34324,34325,34326,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34343,34344,34345,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34360,34361,34362,34363,34364,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34381,34382,34383,34384,34385,34386,34387,34388,34389,34390,34391,34392,34393,34394,34395,34396,34397,34398,34399,34400,34401,34402,34403,34404,34405,34406,34407,34408,34409,34410,34411,34412,34413,34414,34415,34416,34417,34418,34419,34420,34421,34422,34423,34424,34425,34426,34427,34428,34429,34430,34431,34432,34433,34434,34435,34436,34437,34438,34439,34440,34441,34442,34443,34444,34445,34446,34447,34448,34449,34450,34451,34452,34453,34454,34455,34456,34457,34458,34459,34460,34461,34462,34463,34464,34465,34466,34467,34468,34469,34470,34471,34472,34473,34474,34475,34476,34477,34478,34479,34480,34481,34482,34483,34484,34485,34486,34487,34488,34489,34490,34491,34492,34493,34494,34495,34496,34497,34498,34499,34500,34501,34502,34503,34504,34505,34506,34507,34508,34509,34510,34511,34512,34513,34514,34515,34516,34517,34518,34519,34520,34521,34522,34523,34524,34525,34526,34527,34528,34529,34530,34531,34532,34533,34534,34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34548,34549,34550,34551,34552,34553,34554,34555,34556,34557,34558,34559,34560,34561,34562,34563,34564,34565,34566,34567,34568,34569,34570,34571,34572,34573,34574,34575,34576,34577,34578,34579,34580,34581,34582,34583,34584,34585,34586,34587,34588,34589,34590,34591,34592,34593,34594,34595,34596,34597,34598,34599,34600,34601,34602,34603,34604,34605,34606,34607,34608,34609,34610,34611,34612,34613,34614,34615,34616,34617,34618,34619,34620,34621,34622,34623,34624,34625,34626,34627,34628,34629,34630,34631,34632,34633,34634,34635,34636,34637,34638,34639,34640,34641,34642,34643,34644,34645,34646,34647,34648,34649,34650,34651,34652,34653,34654,34655,34656,34657,34658,34659,34660,34661,34662,34663,34664,34665,34666,34667,34668,34669,34670,34671,34672,34673,34674,34675,34676,34677,34678,34679,34680,34681,34682,34683,34684,34685,34686,34687,34688,34689,34690,34691,34692,34693,34694,34695,34696,34697,34698,34699,34700,34701,34702,34703,34704,34705,34706,34707,34708,34709,34710,34711,34712,34713,34714,34715,34716,34717,34718,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729,34730,34731,34732,34733,34734,34735,34736,34737,34738,34739,34740,34741,34742,34743,34744,34745,34746,34747,34748,34749,34750,34751,34752,34753,34754,34755,34756,34757,34758,34759,34760,34761,34762,34763,34764,34765,34766,34767,34768,34769,34770,34771,34772,34773,34774,34775,34776,34777,34778,34779,34780,34781,34782,34783,34784,34785,34786,34787,34788,34789,34790,34791,34792,34793,34794,34795,34796,34797,34798,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34809,34810,34811,34812,34813,34814,34815,34816,34817,34818,34819,34820,34821,34822,34823,34824,34825,34826,34827,34828,34829,34830,34831,34832,34833,34834,34835,34836,34837,34838,34839,34840,34841,34842,34843,34844,34845,34846,34847,34848,34849,34850,34851,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34866,34867,34868,34869,34870,34871,34872,34873,34874,34875,34876,34877,34878,34879,34880,34881,34882,34883,34884,34885,34886,34887,34888,34889,34890,34891,34892,34893,34894,34895,34896,34897,34898,34899,34900,34901,34902,34903,34904,34905,34906,34907,34908,34909,34910,34911,34912,34913,34914,34915,34916,34917,34918,34919,34920,34921,34922,34923,34924,34925,34926,34927,34928,34929,34930,34931,34932,34933,34934,34935,34936,34937,34938,34939,34940,34941,34942,34943,34944,34945,34946,34947,34948,34949,34950,34951,34952,34953,34954,34955,34956,34957,34958,34959,34960,34961,34962,34963,34964,34965,34966,34967,34968,34969,34970,34971,34972,34973,34974,34975,34976,34977,34978,34979,34980,34981,34982,34983,34984,34985,34986,34987,34988,34989,34990,34991,34992,34993,34994,34995,34996,34997,34998,34999,35000,35001,35002,35003,35004,35005,35006,35007,35008,35009,35010,35011,35012,35013,35014,35015,35016,35017,35018,35019,35020,35021,35022,35023,35024,35025,35026,35027,35028,35029,35030,35031,35032,35033,35034,35035,35036,35037,35038,35039,35040,35041,35042,35043,35044,35045,35046,35047,35048,35049,35050,35051,35052,35053,35054,35055,35056,35057,35058,35059,35060,35061,35062,35063,35064,35065,35066,35067,35068,35069,35070,35071,35072,35073,35074,35075,35076,35077,35078,35079,35080,35081,35082,35083,35084,35085,35086,35087,35088,35089,35090,35091,35092,35093,35094,35095,35096,35097,35098,35099,35100,35101,35102,35103,35104,35105,35106,35107,35108,35109,35110,35111,35112,35113,35114,35115,35116,35117,35118,35119,35120,35121,35122,35123,35124,35125,35126,35127,35128,35129,35130,35131,35132,35133,35134,35135,35136,35137,35138,35139,35140,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35166,35167,35168,35169,35170,35171,35172,35173,35174,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35195,35196,35197,35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35265,35266,35267,35268,35269,35270,35271,35272,35273,35274,35275,35276,35277,35278,35279,35280,35281,35282,35283,35284,35285,35286,35287,35288,35289,35290,35291,35292,35293,35294,35295,35296,35297,35298,35299,35300,35301,35302,35303,35304,35305,35306,35307,35308,35309,35310,35311,35312,35313,35314,35315,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35328,35329,35330,35331,35332,35333,35334,35335,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35390,35391,35392,35393,35394,35395,35396,35397,35398,35399,35400,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35449,35450,35451,35452,35453,35454,35455,35456,35457,35458,35459,35460,35461,35462,35463,35464,35465,35466,35467,35468,35469,35470,35471,35472,35473,35474,35475,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35591,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35622,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35686,35687,35688,35689,35690,35691,35692,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35744,35745,35746,35747,35748,35749,35750,35751,35752,35753,35754,35755,35756,35757,35758,35759,35760,35761,35762,35763,35764,35765,35766,35767,35768,35769,35770,35771,35772,35773,35774,35775,35776,35777,35778,35779,35780,35781,35782,35783,35784,35785,35786,35787,35788,35789,35790,35791,35792,35793,35794,35795,35796,35797,35798,35799,35800,35801,35802,35803,35804,35805,35806,35807,35808,35809,35810,35811,35812,35813,35814,35815,35816,35817,35818,35819,35820,35821,35822,35823,35824,35825,35826,35827,35828,35829,35830,35831,35832,35833,35834,35835,35836,35837,35838,35839,35840,35841,35842,35843,35844,35845,35846,35847,35848,35849,35850,35851,35852,35853,35854,35855,35856,35857,35858,35859,35860,35861,35862,35863,35864,35865,35866,35867,35868,35869,35870,35871,35872,35873,35874,35875,35876,35877,35878,35879,35880,35881,35882,35883,35884,35885,35886,35887,35888,35889,35890,35891,35892,35893,35894,35895,35896,35897,35898,35899,35900,35901,35902,35903,35904,35905,35906,35907,35908,35909,35910,35911,35912,35913,35914,35915,35916,35917,35918,35919,35920,35921,35922,35923,35924,35925,35926,35927,35928,35929,35930,35931,35932,35933,35934,35935,35936,35937,35938,35939,35940,35941,35942,35943,35944,35945,35946,35947,35948,35949,35950,35951,35952,35953,35954,35955,35956,35957,35958,35959,35960,35961,35962,35963,35964,35965,35966,35967,35968,35969,35970,35971,35972,35973,35974,35975,35976,35977,35978,35979,35980,35981,35982,35983,35984,35985,35986,35987,35988,35989,35990,35991,35992,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36125,36126,36127,36128,36129,36130,36131,36132,36133,36134,36135,36136,36137,36138,36139,36140,36141,36142,36143,36144,36145,36146,36147,36148,36149,36150,36151,36152,36153,36154,36155,36156,36157,36158,36159,36160,36161,36162,36163,36164,36165,36166,36167,36168,36169,36170,36171,36172,36173,36174,36175,36176,36177,36178,36179,36180,36181,36182,36183,36184,36185,36186,36187,36188,36189,36190,36191,36192,36193,36194,36195,36196,36197,36198,36199,36200,36201,36202,36203,36204,36205,36206,36207,36208,36209,36210,36211,36212,36213,36214,36215,36216,36217,36218,36219,36220,36221,36222,36223,36224,36225,36226,36227,36228,36229,36230,36231,36232,36233,36234,36235,36236,36237,36238,36239,36240,36241,36242,36243,36244,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36255,36256,36257,36258,36259,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36273,36274,36275,36276,36277,36278,36279,36280,36281,36282,36283,36284,36285,36286,36287,36288,36289,36290,36291,36292,36293,36294,36295,36296,36297,36298,36299,36300,36301,36302,36303,36304,36305,36306,36307,36308,36309,36310,36311,36312,36313,36314,36315,36316,36317,36318,36319,36320,36321,36322,36323,36324,36325,36326,36327,36328,36329,36330,36331,36332,36333,36334,36335,36336,36337,36338,36339,36340,36341,36342,36343,36344,36345,36346,36347,36348,36349,36350,36351,36352,36353,36354,36355,36356,36357,36358,36359,36360,36361,36362,36363,36364,36365,36366,36367,36368,36369,36370,36371,36372,36373,36374,36375,36376,36377,36378,36379,36380,36381,36382,36383,36384,36385,36386,36387,36388,36389,36390,36391,36392,36393,36394,36395,36396,36397,36398,36399,36400,36401,36402,36403,36404,36405,36406,36407,36408,36409,36410,36411,36412,36413,36414,36415,36416,36417,36418,36419,36420,36421,36422,36423,36424,36425,36426,36427,36428,36429,36430,36431,36432,36433,36434,36435,36436,36437,36438,36439,36440,36441,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36454,36455,36456,36457,36458,36459,36460,36461,36462,36463,36464,36465,36466,36467,36468,36469,36470,36471,36472,36473,36474,36475,36476,36477,36478,36479,36480,36481,36482,36483,36484,36485,36486,36487,36488,36489,36490,36491,36492,36493,36494,36495,36496,36497,36498,36499,36500,36501,36502,36503,36504,36505,36506,36507,36508,36509,36510,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36523,36524,36525,36526,36527,36528,36529,36530,36531,36532,36533,36534,36535,36536,36537,36538,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36558,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36710,36711,36712,36713,36714,36715,36716,36717,36718,36719,36720,36721,36722,36723,36724,36725,36726,36727,36728,36729,36730,36731,36732,36733,36734,36735,36736,36737,36738,36739,36740,36741,36742,36743,36744,36745,36746,36747,36748,36749,36750,36751,36752,36753,36754,36755,36756,36757,36758,36759,36760,36761,36762,36763,36764,36765,36766,36767,36768,36769,36770,36771,36772,36773,36774,36775,36776,36777,36778,36779,36780,36781,36782,36783,36784,36785,36786,36787,36788,36789,36790,36791,36792,36793,36794,36795,36796,36797,36798,36799,36800,36801,36802,36803,36804,36805,36806,36807,36808,36809,36810,36811,36812,36813,36814,36815,36816,36817,36818,36819,36820,36821,36822,36823,36824,36825,36826,36827,36828,36829,36830,36831,36832,36833,36834,36835,36836,36837,36838,36839,36840,36841,36842,36843,36844,36845,36846,36847,36848,36849,36850,36851,36852,36853,36854,36855,36856,36857,36858,36859,36860,36861,36862,36863,36864,36865,36866,36867,36868,36869,36870,36871,36872,36873,36874,36875,36876,36877,36878,36879,36880,36881,36882,36883,36884,36885,36886,36887,36888,36889,36890,36891,36892,36893,36894,36895,36896,36897,36898,36899,36900,36901,36902,36903,36904,36905,36906,36907,36908,36909,36910,36911,36912,36913,36914,36915,36916,36917,36918,36919,36920,36921,36922,36923,36924,36925,36926,36927,36928,36929,36930,36931,36932,36933,36934,36935,36936,36937,36938,36939,36940,36941,36942,36943,36944,36945,36946,36947,36948,36949,36950,36951,36952,36953,36954,36955,36956,36957,36958,36959,36960,36961,36962,36963,36964,36965,36966,36967,36968,36969,36970,36971,36972,36973,36974,36975,36976,36977,36978,36979,36980,36981,36982,36983,36984,36985,36986,36987,36988,36989,36990,36991,36992,36993,36994,36995,36996,36997,36998,36999,37000,37001,37002,37003,37004,37005,37006,37007,37008,37009,37010,37011,37012,37013,37014,37015,37016,37017,37018,37019,37020,37021,37022,37023,37024,37025,37026,37027,37028,37029,37030,37031,37032,37033,37034,37035,37036,37037,37038,37039,37040,37041,37042,37043,37044,37045,37046,37047,37048,37049,37050,37051,37052,37053,37054,37055,37056,37057,37058,37059,37060,37061,37062,37063,37064,37065,37066,37067,37068,37069,37070,37071,37072,37073,37074,37075,37076,37077,37078,37079,37080,37081,37082,37083,37084,37085,37086,37087,37088,37089,37090,37091,37092,37093,37094,37095,37096,37097,37098,37099,37100,37101,37102,37103,37104,37105,37106,37107,37108,37109,37110,37111,37112,37113,37114,37115,37116,37117,37118,37119,37120,37121,37122,37123,37124,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37145,37146,37147,37148,37149,37150,37151,37152,37153,37154,37155,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37167,37168,37169,37170,37171,37172,37173,37174,37175,37176,37177,37178,37179,37180,37181,37182,37183,37184,37185,37186,37187,37188,37189,37190,37191,37192,37193,37194,37195,37196,37197,37198,37199,37200,37201,37202,37203,37204,37205,37206,37207,37208,37209,37210,37211,37212,37213,37214,37215,37216,37217,37218,37219,37220,37221,37222,37223,37224,37225,37226,37227,37228,37229,37230,37231,37232,37233,37234,37235,37236,37237,37238,37239,37240,37241,37242,37243,37244,37245,37246,37247,37248,37249,37250,37251,37252,37253,37254,37255,37256,37257,37258,37259,37260,37261,37262,37263,37264,37265,37266,37267,37268,37269,37270,37271,37272,37273,37274,37275,37276,37277,37278,37279,37280,37281,37282,37283,37284,37285,37286,37287,37288,37289,37290,37291,37292,37293,37294,37295,37296,37297,37298,37299,37300,37301,37302,37303,37304,37305,37306,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37319,37320,37321,37322,37323,37324,37325,37326,37327,37328,37329,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37340,37341,37342,37343,37344,37345,37346,37347,37348,37349,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37492,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37518,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,37544,37545,37546,37547,37548,37549,37550,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37576,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37694,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37738,37739,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37775,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37834,37835,37836,37837,37838,37839,37840,37841,37842,37843,37844,37845,37846,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37950,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37995,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38021,38022,38023,38024,38025,38026,38027,38028,38029,38030,38031,38032,38033,38034,38035,38036,38037,38038,38039,38040,38041,38042,38043,38044,38045,38046,38047,38048,38049,38050,38051,38052,38053,38054,38055,38056,38057,38058,38059,38060,38061,38062,38063,38064,38065,38066,38067,38068,38069,38070,38071,38072,38073,38074,38075,38076,38077,38078,38079,38080,38081,38082,38083,38084,38085,38086,38087,38088,38089,38090,38091,38092,38093,38094,38095,38096,38097,38098,38099,38100,38101,38102,38103,38104,38105,38106,38107,38108,38109,38110,38111,38112,38113,38114,38115,38116,38117,38118,38119,38120,38121,38122,38123,38124,38125,38126,38127,38128,38129,38130,38131,38132,38133,38134,38135,38136,38137,38138,38139,38140,38141,38142,38143,38144,38145,38146,38147,38148,38149,38150,38151,38152,38153,38154,38155,38156,38157,38158,38159,38160,38161,38162,38163,38164,38165,38166,38167,38168,38169,38170,38171,38172,38173,38174,38175,38176,38177,38178,38179,38180,38181,38182,38183,38184,38185,38186,38187,38188,38189,38190,38191,38192,38193,38194,38195,38196,38197,38198,38199,38200,38201,38202,38203,38204,38205,38206,38207,38208,38209,38210,38211,38212,38213,38214,38215,38216,38217,38218,38219,38220,38221,38222,38223,38224,38225,38226,38227,38228,38229,38230,38231,38232,38233,38234,38235,38236,38237,38238,38239,38240,38241,38242,38243,38244,38245,38246,38247,38248,38249,38250,38251,38252,38253,38254,38255,38256,38257,38258,38259,38260,38261,38262,38263,38264,38265,38266,38267,38268,38269,38270,38271,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38376,38377,38378,38379,38380,38381,38382,38383,38384,38385,38386,38387,38388,38389,38390,38391,38392,38393,38394,38395,38396,38397,38398,38399,38400,38401,38402,38403,38404,38405,38406,38407,38408,38409,38410,38411,38412,38413,38414,38415,38416,38417,38418,38419,38420,38421,38422,38423,38424,38425,38426,38427,38428,38429,38430,38431,38432,38433,38434,38435,38436,38437,38438,38439,38440,38441,38442,38443,38444,38445,38446,38447,38448,38449,38450,38451,38452,38453,38454,38455,38456,38457,38458,38459,38460,38461,38462,38463,38464,38465,38466,38467,38468,38469,38470,38471,38472,38473,38474,38475,38476,38477,38478,38479,38480,38481,38482,38483,38484,38485,38486,38487,38488,38489,38490,38491,38492,38493,38494,38495,38496,38497,38498,38499,38500,38501,38502,38503,38504,38505,38506,38507,38508,38509,38510,38511,38512,38513,38514,38515,38516,38517,38518,38519,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38533,38534,38535,38536,38537,38538,38539,38540,38541,38542,38543,38544,38545,38546,38547,38548,38549,38550,38551,38552,38553,38554,38555,38556,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38567,38568,38569,38570,38571,38572,38573,38574,38575,38576,38577,38578,38579,38580,38581,38582,38583,38584,38585,38586,38587,38588,38589,38590,38591,38592,38593,38594,38595,38596,38597,38598,38599,38600,38601,38602,38603,38604,38605,38606,38607,38608,38609,38610,38611,38612,38613,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38624,38625,38626,38627,38628,38629,38630,38631,38632,38633,38634,38635,38636,38637,38638,38639,38640,38641,38642,38643,38644,38645,38646,38647,38648,38649,38650,38651,38652,38653,38654,38655,38656,38657,38658,38659,38660,38661,38662,38663,38664,38665,38666,38667,38668,38669,38670,38671,38672,38673,38674,38675,38676,38677,38678,38679,38680,38681,38682,38683,38684,38685,38686,38687,38688,38689,38690,38691,38692,38693,38694,38695,38696,38697,38698,38699,38700,38701,38702,38703,38704,38705,38706,38707,38708,38709,38710,38711,38712,38713,38714,38715,38716,38717,38718,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38738,38739,38740,38741,38742,38743,38744,38745,38746,38747,38748,38749,38750,38751,38752,38753,38754,38755,38756,38757,38758,38759,38760,38761,38762,38763,38764,38765,38766,38767,38768,38769,38770,38771,38772,38773,38774,38775,38776,38777,38778,38779,38780,38781,38782,38783,38784,38785,38786,38787,38788,38789,38790,38791,38792,38793,38794,38795,38796,38797,38798,38799,38800,38801,38802,38803,38804,38805,38806,38807,38808,38809,38810,38811,38812,38813,38814,38815,38816,38817,38818,38819,38820,38821,38822,38823,38824,38825,38826,38827,38828,38829,38830,38831,38832,38833,38834,38835,38836,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38886,38887,38888,38889,38890,38891,38892,38893,38894,38895,38896,38897,38898,38899,38900,38901,38902,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,39023,39024,39025,39026,39027,39028,39029,39030,39031,39032,39033,39034,39035,39036,39037,39038,39039,39040,39041,39042,39043,39044,39045,39046,39047,39048,39049,39050,39051,39052,39053,39054,39055,39056,39057,39058,39059,39060,39061,39062,39063,39064,39065,39066,39067,39068,39069,39070,39071,39072,39073,39074,39075,39076,39077,39078,39079,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39118,39119,39120,39121,39122,39123,39124,39125,39126,39127,39128,39129,39130,39131,39132,39133,39134,39135,39136,39137,39138,39139,39140,39141,39142,39143,39144,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,39176,39177,39178,39179,39180,39181,39182,39183,39184,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39214,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39252,39253,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39267,39268,39269,39270,39271,39272,39273,39274,39275,39276,39277,39278,39279,39280,39281,39282,39283,39284,39285,39286,39287,39288,39289,39290,39291,39292,39293,39294,39295,39296,39297,39298,39299,39300,39301,39302,39303,39304,39305,39306,39307,39308,39309,39310,39311,39312,39313,39314,39315,39316,39317,39318,39319,39320,39321,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39333,39334,39335,39336,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39532,39533,39534,39535,39536,39537,39538,39539,39540,39541,39542,39543,39544,39545,39546,39547,39548,39549,39550,39551,39552,39553,39554,39555,39556,39557,39558,39559,39560,39561,39562,39563,39564,39565,39566,39567,39568,39569,39570,39571,39572,39573,39574,39575,39576,39577,39578,39579,39580,39581,39582,39583,39584,39585,39586,39587,39588,39589,39590,39591,39592,39593,39594,39595,39596,39597,39598,39599,39600,39601,39602,39603,39604,39605,39606,39607,39608,39609,39610,39611,39612,39613,39614,39615,39616,39617,39618,39619,39620,39621,39622,39623,39624,39625,39626,39627,39628,39629,39630,39631,39632,39633,39634,39635,39636,39637,39638,39639,39640,39641,39642,39643,39644,39645,39646,39647,39648,39649,39650,39651,39652,39653,39654,39655,39656,39657,39658,39659,39660,39661,39662,39663,39664,39665,39666,39667,39668,39669,39670,39671,39672,39673,39674,39675,39676,39677,39678,39679,39680,39681,39682,39683,39684,39685,39686,39687,39688,39689,39690,39691,39692,39693,39694,39695,39696,39697,39698,39699,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39711,39712,39713,39714,39715,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39727,39728,39729,39730,39731,39732,39733,39734,39735,39736,39737,39738,39739,39740,39741,39742,39743,39744,39745,39746,39747,39748,39749,39750,39751,39752,39753,39754,39755,39756,39757,39758,39759,39760,39761,39762,39763,39764,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40060,40061,40062,40063,40064,40065,40066,40067,40068,40069,40070,40071,40072,40073,40074,40075,40076,40077,40078,40079,40080,40081,40082,40083,40084,40085,40086,40087,40088,40089,40090,40091,40092,40093,40094,40095,40096,40097,40098,40099,40100,40101,40102,40103,40104,40105,40106,40107,40108,40109,40110,40111,40112,40113,40114,40115,40116,40117,40118,40119,40120,40121,40122,40123,40124,40125,40126,40127,40128,40129,40130,40131,40132,40133,40134,40135,40136,40137,40138,40139,40140,40141,40142,40143,40144,40145,40146,40147,40148,40149,40150,40151,40152,40153,40154,40155,40156,40157,40158,40159,40160,40161,40162,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40479,40480,40481,40482,40483,40484,40485,40486,40487,40488,40489,40490,40491,40492,40493,40494,40495,40496,40497,40498,40499,40500,40501,40502,40503,40504,40505,40506,40507,40508,40509,40510,40511,40512,40513,40514,40515,40516,40517,40518,40519,40520,40521,40522,40523,40524,40525,40526,40527,40528,40529,40530,40531,40532,40533,40534,40535,40536,40537,40538,40539,40540,40541,40542,40543,40544,40545,40546,40547,40548,40549,40550,40551,40552,40553,40554,40555,40556,40557,40558,40559,40560,40561,40562,40563,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40574,40575,40576,40577,40578,40579,40580,40581,40582,40583,40584,40585,40586,40587,40588,40589,40590,40591,40592,40593,40594,40595,40596,40597,40598,40599,40600,40601,40602,40603,40604,40605,40606,40607,40608,40609,40610,40611,40612,40613,40614,40615,40616,40617,40618,40619,40620,40621,40622,40623,40624,40625,40626,40627,40628,40629,40630,40631,40632,40633,40634,40635,40636,40637,40638,40639,40640,40641,40642,40643,40644,40645,40646,40647,40648,40649,40650,40651,40652,40653,40654,40655,40656,40657,40658,40659,40660,40661,40662,40663,40664,40665,40666,40667,40668,40669,40670,40671,40672,40673,40674,40675,40676,40677,40678,40679,40680,40681,40682,40683,40684,40685,40686,40687,40688,40689,40690,40691,40692,40693,40694,40695,40696,40697,40698,40699,40700,40701,40702,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40715,40716,40717,40718,40719,40720,40721,40722,40723,40724,40725,40726,40727,40728,40729,40730,40731,40732,40733,40734,40735,40736,40737,40738,40739,40740,40741,40742,40743,40744,40745,40746,40747,40748,40749,40750,40751,40752,40753,40754,40755,40756,40757,40758,40759,40760,40761,40762,40763,40764,40765,40766,40767,40768,40769,40770,40771,40772,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40784,40785,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40831,40832,40833,40834,40835,40836,40837,40838,40839,40840,40841,40842,40843,40844,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40857,40858,40859,40860,40861,40862,40863,40864,40865,40866,40867,40868,40869,40870,40871,40872,40873,40874,40875,40876,40877,40878,40879,40880,40881,40882,40883,40884,40885,40886,40887,40888,40889,40890,40891,40892,40893,40894,40895,40896,40897,40898,40899,40900,40901,40902,40903,40904,40905,40906,40907,40908,40909,40910,40911,40912,40913,40914,40915,40916,40917,40918,40919,40920,40921,40922,40923,40924,40925,40926,40927,40928,40929,40930,40931,40932,40933,40934,40935,40936,40937,40938,40939,40940,40941,40942,40943,40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975,40976,40977,40978,40979,40980,40981,40982,40983,40984,40985,40986,40987,40988,40989,40990,40991,40992,40993,40994,40995,40996,40997,40998,40999,41000,41001,41002,41003,41004,41005,41006,41007,41008,41009,41010,41011,41012,41013,41014,41015,41016,41017,41018,41019,41020,41021,41022,41023,41024,41025,41026,41027,41028,41029,41030,41031,41032,41033,41034,41035,41036,41037,41038,41039,41040,41041,41042,41043,41044,41045,41046,41047,41048,41049,41050,41051,41052,41053,41054,41055,41056,41057,41058,41059,41060,41061,41062,41063,41064,41065,41066,41067,41068,41069,41070,41071,41072,41073,41074,41075,41076,41077,41078,41079,41080,41081,41082,41083,41084,41085,41086,41087,41088,41089,41090,41091,41092,41093,41094,41095,41096,41097,41098,41099,41100,41101,41102,41103,41104,41105,41106,41107,41108,41109,41110,41111,41112,41113,41114,41115,41116,41117,41118,41119,41120,41121,41122,41123,41124,41125,41126,41127,41128,41129,41130,41131,41132,41133,41134,41135,41136,41137,41138,41139,41140,41141,41142,41143,41144,41145,41146,41147,41148,41149,41150,41151,41152,41153,41154,41155,41156,41157,41158,41159,41160,41161,41162,41163,41164,41165,41166,41167,41168,41169,41170,41171,41172,41173,41174,41175,41176,41177,41178,41179,41180,41181,41182,41183,41184,41185,41186,41187,41188,41189,41190,41191,41192,41193,41194,41195,41196,41197,41198,41199,41200,41201,41202,41203,41204,41205,41206,41207,41208,41209,41210,41211,41212,41213,41214,41215,41216,41217,41218,41219,41220,41221,41222,41223,41224,41225,41226,41227,41228,41229,41230,41231,41232,41233,41234,41235,41236,41237,41238,41239,41240,41241,41242,41243,41244,41245,41246,41247,41248,41249,41250,41251,41252,41253,41254,41255,41256,41257,41258,41259,41260,41261,41262,41263,41264,41265,41266,41267,41268,41269,41270,41271,41272,41273,41274,41275,41276,41277,41278,41279,41280,41281,41282,41283,41284,41285,41286,41287,41288,41289,41290,41291,41292,41293,41294,41295,41296,41297,41298,41299,41300,41301,41302,41303,41304,41305,41306,41307,41308,41309,41310,41311,41312,41313,41314,41315,41316,41317,41318,41319,41320,41321,41322,41323,41324,41325,41326,41327,41328,41329,41330,41331,41332,41333,41334,41335,41336,41337,41338,41339,41340,41341,41342,41343,41344,41345,41346,41347,41348,41349,41350,41351,41352,41353,41354,41355,41356,41357,41358,41359,41360,41361,41362,41363,41364,41365,41366,41367,41368,41369,41370,41371,41372,41373,41374,41375,41376,41377,41378,41379,41380,41381,41382,41383,41384,41385,41386,41387,41388,41389,41390,41391,41392,41393,41394,41395,41396,41397,41398,41399,41400,41401,41402,41403,41404,41405,41406,41407,41408,41409,41410,41411,41412,41413,41414,41415,41416,41417,41418,41419,41420,41421,41422,41423,41424,41425,41426,41427,41428,41429,41430,41431,41432,41433,41434,41435,41436,41437,41438,41439,41440,41441,41442,41443,41444,41445,41446,41447,41448,41449,41450,41451,41452,41453,41454,41455,41456,41457,41458,41459,41460,41461,41462,41463,41464,41465,41466,41467,41468,41469,41470,41471,41472,41473,41474,41475,41476,41477,41478,41479,41480,41481,41482,41483,41484,41485,41486,41487,41488,41489,41490,41491,41492,41493,41494,41495,41496,41497,41498,41499,41500,41501,41502,41503,41504,41505,41506,41507,41508,41509,41510,41511,41512,41513,41514,41515,41516,41517,41518,41519,41520,41521,41522,41523,41524,41525,41526,41527,41528,41529,41530,41531,41532,41533,41534,41535,41536,41537,41538,41539,41540,41541,41542,41543,41544,41545,41546,41547,41548,41549,41550,41551,41552,41553,41554,41555,41556,41557,41558,41559,41560,41561,41562,41563,41564,41565,41566,41567,41568,41569,41570,41571,41572,41573,41574,41575,41576,41577,41578,41579,41580,41581,41582,41583,41584,41585,41586,41587,41588,41589,41590,41591,41592,41593,41594,41595,41596,41597,41598,41599,41600,41601,41602,41603,41604,41605,41606,41607,41608,41609,41610,41611,41612,41613,41614,41615,41616,41617,41618,41619,41620,41621,41622,41623,41624,41625,41626,41627,41628,41629,41630,41631,41632,41633,41634,41635,41636,41637,41638,41639,41640,41641,41642,41643,41644,41645,41646,41647,41648,41649,41650,41651,41652,41653,41654,41655,41656,41657,41658,41659,41660,41661,41662,41663,41664,41665,41666,41667,41668,41669,41670,41671,41672,41673,41674,41675,41676,41677,41678,41679,41680,41681,41682,41683,41684,41685,41686,41687,41688,41689,41690,41691,41692,41693,41694,41695,41696,41697,41698,41699,41700,41701,41702,41703,41704,41705,41706,41707,41708,41709,41710,41711,41712,41713,41714,41715,41716,41717,41718,41719,41720,41721,41722,41723,41724,41725,41726,41727,41728,41729,41730,41731,41732,41733,41734,41735,41736,41737,41738,41739,41740,41741,41742,41743,41744,41745,41746,41747,41748,41749,41750,41751,41752,41753,41754,41755,41756,41757,41758,41759,41760,41761,41762,41763,41764,41765,41766,41767,41768,41769,41770,41771,41772,41773,41774,41775,41776,41777,41778,41779,41780,41781,41782,41783,41784,41785,41786,41787,41788,41789,41790,41791,41792,41793,41794,41795,41796,41797,41798,41799,41800,41801,41802,41803,41804,41805,41806,41807,41808,41809,41810,41811,41812,41813,41814,41815,41816,41817,41818,41819,41820,41821,41822,41823,41824,41825,41826,41827,41828,41829,41830,41831,41832,41833,41834,41835,41836,41837,41838,41839,41840,41841,41842,41843,41844,41845,41846,41847,41848,41849,41850,41851,41852,41853,41854,41855,41856,41857,41858,41859,41860,41861,41862,41863,41864,41865,41866,41867,41868,41869,41870,41871,41872,41873,41874,41875,41876,41877,41878,41879,41880,41881,41882,41883,41884,41885,41886,41887,41888,41889,41890,41891,41892,41893,41894,41895,41896,41897,41898,41899,41900,41901,41902,41903,41904,41905,41906,41907,41908,41909,41910,41911,41912,41913,41914,41915,41916,41917,41918,41919,41920,41921,41922,41923,41924,41925,41926,41927,41928,41929,41930,41931,41932,41933,41934,41935,41936,41937,41938,41939,41940,41941,41942,41943,41944,41945,41946,41947,41948,41949,41950,41951,41952,41953,41954,41955,41956,41957,41958,41959,41960,41961,41962,41963,41964,41965,41966,41967,41968,41969,41970,41971,41972,41973,41974,41975,41976,41977,41978,41979,41980,41981,41982,41983,41984,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,41997,41998,41999,42000,42001,42002,42003,42004,42005,42006,42007,42008,42009,42010,42011,42012,42013,42014,42015,42016,42017,42018,42019,42020,42021,42022,42023,42024,42025,42026,42027,42028,42029,42030,42031,42032,42033,42034,42035,42036,42037,42038,42039,42040,42041,42042,42043,42044,42045,42046,42047,42048,42049,42050,42051,42052,42053,42054,42055,42056,42057,42058,42059,42060,42061,42062,42063,42064,42065,42066,42067,42068,42069,42070,42071,42072,42073,42074,42075,42076,42077,42078,42079,42080,42081,42082,42083,42084,42085,42086,42087,42088,42089,42090,42091,42092,42093,42094,42095,42096,42097,42098,42099,42100,42101,42102,42103,42104,42105,42106,42107,42108,42109,42110,42111,42112,42113,42114,42115,42116,42117,42118,42119,42120,42121,42122,42123,42124,42192,42193,42194,42195,42196,42197,42198,42199,42200,42201,42202,42203,42204,42205,42206,42207,42208,42209,42210,42211,42212,42213,42214,42215,42216,42217,42218,42219,42220,42221,42222,42223,42224,42225,42226,42227,42228,42229,42230,42231,42232,42233,42234,42235,42236,42237,42240,42241,42242,42243,42244,42245,42246,42247,42248,42249,42250,42251,42252,42253,42254,42255,42256,42257,42258,42259,42260,42261,42262,42263,42264,42265,42266,42267,42268,42269,42270,42271,42272,42273,42274,42275,42276,42277,42278,42279,42280,42281,42282,42283,42284,42285,42286,42287,42288,42289,42290,42291,42292,42293,42294,42295,42296,42297,42298,42299,42300,42301,42302,42303,42304,42305,42306,42307,42308,42309,42310,42311,42312,42313,42314,42315,42316,42317,42318,42319,42320,42321,42322,42323,42324,42325,42326,42327,42328,42329,42330,42331,42332,42333,42334,42335,42336,42337,42338,42339,42340,42341,42342,42343,42344,42345,42346,42347,42348,42349,42350,42351,42352,42353,42354,42355,42356,42357,42358,42359,42360,42361,42362,42363,42364,42365,42366,42367,42368,42369,42370,42371,42372,42373,42374,42375,42376,42377,42378,42379,42380,42381,42382,42383,42384,42385,42386,42387,42388,42389,42390,42391,42392,42393,42394,42395,42396,42397,42398,42399,42400,42401,42402,42403,42404,42405,42406,42407,42408,42409,42410,42411,42412,42413,42414,42415,42416,42417,42418,42419,42420,42421,42422,42423,42424,42425,42426,42427,42428,42429,42430,42431,42432,42433,42434,42435,42436,42437,42438,42439,42440,42441,42442,42443,42444,42445,42446,42447,42448,42449,42450,42451,42452,42453,42454,42455,42456,42457,42458,42459,42460,42461,42462,42463,42464,42465,42466,42467,42468,42469,42470,42471,42472,42473,42474,42475,42476,42477,42478,42479,42480,42481,42482,42483,42484,42485,42486,42487,42488,42489,42490,42491,42492,42493,42494,42495,42496,42497,42498,42499,42500,42501,42502,42503,42504,42505,42506,42507,42508,42512,42513,42514,42515,42516,42517,42518,42519,42520,42521,42522,42523,42524,42525,42526,42527,42538,42539,42560,42561,42562,42563,42564,42565,42566,42567,42568,42569,42570,42571,42572,42573,42574,42575,42576,42577,42578,42579,42580,42581,42582,42583,42584,42585,42586,42587,42588,42589,42590,42591,42592,42593,42594,42595,42596,42597,42598,42599,42600,42601,42602,42603,42604,42605,42606,42623,42624,42625,42626,42627,42628,42629,42630,42631,42632,42633,42634,42635,42636,42637,42638,42639,42640,42641,42642,42643,42644,42645,42646,42647,42648,42649,42650,42651,42652,42653,42656,42657,42658,42659,42660,42661,42662,42663,42664,42665,42666,42667,42668,42669,42670,42671,42672,42673,42674,42675,42676,42677,42678,42679,42680,42681,42682,42683,42684,42685,42686,42687,42688,42689,42690,42691,42692,42693,42694,42695,42696,42697,42698,42699,42700,42701,42702,42703,42704,42705,42706,42707,42708,42709,42710,42711,42712,42713,42714,42715,42716,42717,42718,42719,42720,42721,42722,42723,42724,42725,42726,42727,42728,42729,42730,42731,42732,42733,42734,42735,42775,42776,42777,42778,42779,42780,42781,42782,42783,42786,42787,42788,42789,42790,42791,42792,42793,42794,42795,42796,42797,42798,42799,42800,42801,42802,42803,42804,42805,42806,42807,42808,42809,42810,42811,42812,42813,42814,42815,42816,42817,42818,42819,42820,42821,42822,42823,42824,42825,42826,42827,42828,42829,42830,42831,42832,42833,42834,42835,42836,42837,42838,42839,42840,42841,42842,42843,42844,42845,42846,42847,42848,42849,42850,42851,42852,42853,42854,42855,42856,42857,42858,42859,42860,42861,42862,42863,42864,42865,42866,42867,42868,42869,42870,42871,42872,42873,42874,42875,42876,42877,42878,42879,42880,42881,42882,42883,42884,42885,42886,42887,42888,42891,42892,42893,42894,42895,42896,42897,42898,42899,42900,42901,42902,42903,42904,42905,42906,42907,42908,42909,42910,42911,42912,42913,42914,42915,42916,42917,42918,42919,42920,42921,42922,42923,42924,42925,42926,42927,42928,42929,42930,42931,42932,42933,42934,42935,42936,42937,42999,43000,43001,43002,43003,43004,43005,43006,43007,43008,43009,43011,43012,43013,43015,43016,43017,43018,43020,43021,43022,43023,43024,43025,43026,43027,43028,43029,43030,43031,43032,43033,43034,43035,43036,43037,43038,43039,43040,43041,43042,43072,43073,43074,43075,43076,43077,43078,43079,43080,43081,43082,43083,43084,43085,43086,43087,43088,43089,43090,43091,43092,43093,43094,43095,43096,43097,43098,43099,43100,43101,43102,43103,43104,43105,43106,43107,43108,43109,43110,43111,43112,43113,43114,43115,43116,43117,43118,43119,43120,43121,43122,43123,43138,43139,43140,43141,43142,43143,43144,43145,43146,43147,43148,43149,43150,43151,43152,43153,43154,43155,43156,43157,43158,43159,43160,43161,43162,43163,43164,43165,43166,43167,43168,43169,43170,43171,43172,43173,43174,43175,43176,43177,43178,43179,43180,43181,43182,43183,43184,43185,43186,43187,43250,43251,43252,43253,43254,43255,43259,43261,43262,43274,43275,43276,43277,43278,43279,43280,43281,43282,43283,43284,43285,43286,43287,43288,43289,43290,43291,43292,43293,43294,43295,43296,43297,43298,43299,43300,43301,43312,43313,43314,43315,43316,43317,43318,43319,43320,43321,43322,43323,43324,43325,43326,43327,43328,43329,43330,43331,43332,43333,43334,43360,43361,43362,43363,43364,43365,43366,43367,43368,43369,43370,43371,43372,43373,43374,43375,43376,43377,43378,43379,43380,43381,43382,43383,43384,43385,43386,43387,43388,43396,43397,43398,43399,43400,43401,43402,43403,43404,43405,43406,43407,43408,43409,43410,43411,43412,43413,43414,43415,43416,43417,43418,43419,43420,43421,43422,43423,43424,43425,43426,43427,43428,43429,43430,43431,43432,43433,43434,43435,43436,43437,43438,43439,43440,43441,43442,43471,43488,43489,43490,43491,43492,43494,43495,43496,43497,43498,43499,43500,43501,43502,43503,43514,43515,43516,43517,43518,43520,43521,43522,43523,43524,43525,43526,43527,43528,43529,43530,43531,43532,43533,43534,43535,43536,43537,43538,43539,43540,43541,43542,43543,43544,43545,43546,43547,43548,43549,43550,43551,43552,43553,43554,43555,43556,43557,43558,43559,43560,43584,43585,43586,43588,43589,43590,43591,43592,43593,43594,43595,43616,43617,43618,43619,43620,43621,43622,43623,43624,43625,43626,43627,43628,43629,43630,43631,43632,43633,43634,43635,43636,43637,43638,43642,43646,43647,43648,43649,43650,43651,43652,43653,43654,43655,43656,43657,43658,43659,43660,43661,43662,43663,43664,43665,43666,43667,43668,43669,43670,43671,43672,43673,43674,43675,43676,43677,43678,43679,43680,43681,43682,43683,43684,43685,43686,43687,43688,43689,43690,43691,43692,43693,43694,43695,43697,43701,43702,43705,43706,43707,43708,43709,43712,43714,43739,43740,43741,43744,43745,43746,43747,43748,43749,43750,43751,43752,43753,43754,43762,43763,43764,43777,43778,43779,43780,43781,43782,43785,43786,43787,43788,43789,43790,43793,43794,43795,43796,43797,43798,43808,43809,43810,43811,43812,43813,43814,43816,43817,43818,43819,43820,43821,43822,43824,43825,43826,43827,43828,43829,43830,43831,43832,43833,43834,43835,43836,43837,43838,43839,43840,43841,43842,43843,43844,43845,43846,43847,43848,43849,43850,43851,43852,43853,43854,43855,43856,43857,43858,43859,43860,43861,43862,43863,43864,43865,43866,43868,43869,43870,43871,43872,43873,43874,43875,43876,43877,43888,43889,43890,43891,43892,43893,43894,43895,43896,43897,43898,43899,43900,43901,43902,43903,43904,43905,43906,43907,43908,43909,43910,43911,43912,43913,43914,43915,43916,43917,43918,43919,43920,43921,43922,43923,43924,43925,43926,43927,43928,43929,43930,43931,43932,43933,43934,43935,43936,43937,43938,43939,43940,43941,43942,43943,43944,43945,43946,43947,43948,43949,43950,43951,43952,43953,43954,43955,43956,43957,43958,43959,43960,43961,43962,43963,43964,43965,43966,43967,43968,43969,43970,43971,43972,43973,43974,43975,43976,43977,43978,43979,43980,43981,43982,43983,43984,43985,43986,43987,43988,43989,43990,43991,43992,43993,43994,43995,43996,43997,43998,43999,44000,44001,44002,44032,44033,44034,44035,44036,44037,44038,44039,44040,44041,44042,44043,44044,44045,44046,44047,44048,44049,44050,44051,44052,44053,44054,44055,44056,44057,44058,44059,44060,44061,44062,44063,44064,44065,44066,44067,44068,44069,44070,44071,44072,44073,44074,44075,44076,44077,44078,44079,44080,44081,44082,44083,44084,44085,44086,44087,44088,44089,44090,44091,44092,44093,44094,44095,44096,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44107,44108,44109,44110,44111,44112,44113,44114,44115,44116,44117,44118,44119,44120,44121,44122,44123,44124,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44144,44145,44146,44147,44148,44149,44150,44151,44152,44153,44154,44155,44156,44157,44158,44159,44160,44161,44162,44163,44164,44165,44166,44167,44168,44169,44170,44171,44172,44173,44174,44175,44176,44177,44178,44179,44180,44181,44182,44183,44184,44185,44186,44187,44188,44189,44190,44191,44192,44193,44194,44195,44196,44197,44198,44199,44200,44201,44202,44203,44204,44205,44206,44207,44208,44209,44210,44211,44212,44213,44214,44215,44216,44217,44218,44219,44220,44221,44222,44223,44224,44225,44226,44227,44228,44229,44230,44231,44232,44233,44234,44235,44236,44237,44238,44239,44240,44241,44242,44243,44244,44245,44246,44247,44248,44249,44250,44251,44252,44253,44254,44255,44256,44257,44258,44259,44260,44261,44262,44263,44264,44265,44266,44267,44268,44269,44270,44271,44272,44273,44274,44275,44276,44277,44278,44279,44280,44281,44282,44283,44284,44285,44286,44287,44288,44289,44290,44291,44292,44293,44294,44295,44296,44297,44298,44299,44300,44301,44302,44303,44304,44305,44306,44307,44308,44309,44310,44311,44312,44313,44314,44315,44316,44317,44318,44319,44320,44321,44322,44323,44324,44325,44326,44327,44328,44329,44330,44331,44332,44333,44334,44335,44336,44337,44338,44339,44340,44341,44342,44343,44344,44345,44346,44347,44348,44349,44350,44351,44352,44353,44354,44355,44356,44357,44358,44359,44360,44361,44362,44363,44364,44365,44366,44367,44368,44369,44370,44371,44372,44373,44374,44375,44376,44377,44378,44379,44380,44381,44382,44383,44384,44385,44386,44387,44388,44389,44390,44391,44392,44393,44394,44395,44396,44397,44398,44399,44400,44401,44402,44403,44404,44405,44406,44407,44408,44409,44410,44411,44412,44413,44414,44415,44416,44417,44418,44419,44420,44421,44422,44423,44424,44425,44426,44427,44428,44429,44430,44431,44432,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44444,44445,44446,44447,44448,44449,44450,44451,44452,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44471,44472,44473,44474,44475,44476,44477,44478,44479,44480,44481,44482,44483,44484,44485,44486,44487,44488,44489,44490,44491,44492,44493,44494,44495,44496,44497,44498,44499,44500,44501,44502,44503,44504,44505,44506,44507,44508,44509,44510,44511,44512,44513,44514,44515,44516,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44536,44537,44538,44539,44540,44541,44542,44543,44544,44545,44546,44547,44548,44549,44550,44551,44552,44553,44554,44555,44556,44557,44558,44559,44560,44561,44562,44563,44564,44565,44566,44567,44568,44569,44570,44571,44572,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44592,44593,44594,44595,44596,44597,44598,44599,44600,44601,44602,44603,44604,44605,44606,44607,44608,44609,44610,44611,44612,44613,44614,44615,44616,44617,44618,44619,44620,44621,44622,44623,44624,44625,44626,44627,44628,44629,44630,44631,44632,44633,44634,44635,44636,44637,44638,44639,44640,44641,44642,44643,44644,44645,44646,44647,44648,44649,44650,44651,44652,44653,44654,44655,44656,44657,44658,44659,44660,44661,44662,44663,44664,44665,44666,44667,44668,44669,44670,44671,44672,44673,44674,44675,44676,44677,44678,44679,44680,44681,44682,44683,44684,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44732,44733,44734,44735,44736,44737,44738,44739,44740,44741,44742,44743,44744,44745,44746,44747,44748,44749,44750,44751,44752,44753,44754,44755,44756,44757,44758,44759,44760,44761,44762,44763,44764,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44776,44777,44778,44779,44780,44781,44782,44783,44784,44785,44786,44787,44788,44789,44790,44791,44792,44793,44794,44795,44796,44797,44798,44799,44800,44801,44802,44803,44804,44805,44806,44807,44808,44809,44810,44811,44812,44813,44814,44815,44816,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,44836,44837,44838,44839,44840,44841,44842,44843,44844,44845,44846,44847,44848,44849,44850,44851,44852,44853,44854,44855,44856,44857,44858,44859,44860,44861,44862,44863,44864,44865,44866,44867,44868,44869,44870,44871,44872,44873,44874,44875,44876,44877,44878,44879,44880,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44892,44893,44894,44895,44896,44897,44898,44899,44900,44901,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44921,44922,44923,44924,44925,44926,44927,44928,44929,44930,44931,44932,44933,44934,44935,44936,44937,44938,44939,44940,44941,44942,44943,44944,44945,44946,44947,44948,44949,44950,44951,44952,44953,44954,44955,44956,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44984,44985,44986,44987,44988,44989,44990,44991,44992,44993,44994,44995,44996,44997,44998,44999,45000,45001,45002,45003,45004,45005,45006,45007,45008,45009,45010,45011,45012,45013,45014,45015,45016,45017,45018,45019,45020,45021,45022,45023,45024,45025,45026,45027,45028,45029,45030,45031,45032,45033,45034,45035,45036,45037,45038,45039,45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055,45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071,45072,45073,45074,45075,45076,45077,45078,45079,45080,45081,45082,45083,45084,45085,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45096,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45124,45125,45126,45127,45128,45129,45130,45131,45132,45133,45134,45135,45136,45137,45138,45139,45140,45141,45142,45143,45144,45145,45146,45147,45148,45149,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45180,45181,45182,45183,45184,45185,45186,45187,45188,45189,45190,45191,45192,45193,45194,45195,45196,45197,45198,45199,45200,45201,45202,45203,45204,45205,45206,45207,45208,45209,45210,45211,45212,45213,45214,45215,45216,45217,45218,45219,45220,45221,45222,45223,45224,45225,45226,45227,45228,45229,45230,45231,45232,45233,45234,45235,45236,45237,45238,45239,45240,45241,45242,45243,45244,45245,45246,45247,45248,45249,45250,45251,45252,45253,45254,45255,45256,45257,45258,45259,45260,45261,45262,45263,45264,45265,45266,45267,45268,45269,45270,45271,45272,45273,45274,45275,45276,45277,45278,45279,45280,45281,45282,45283,45284,45285,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45320,45321,45322,45323,45324,45325,45326,45327,45328,45329,45330,45331,45332,45333,45334,45335,45336,45337,45338,45339,45340,45341,45342,45343,45344,45345,45346,45347,45348,45349,45350,45351,45352,45353,45354,45355,45356,45357,45358,45359,45360,45361,45362,45363,45364,45365,45366,45367,45368,45369,45370,45371,45372,45373,45374,45375,45376,45377,45378,45379,45380,45381,45382,45383,45384,45385,45386,45387,45388,45389,45390,45391,45392,45393,45394,45395,45396,45397,45398,45399,45400,45401,45402,45403,45404,45405,45406,45407,45408,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45432,45433,45434,45435,45436,45437,45438,45439,45440,45441,45442,45443,45444,45445,45446,45447,45448,45449,45450,45451,45452,45453,45454,45455,45456,45457,45458,45459,45460,45461,45462,45463,45464,45465,45466,45467,45468,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45480,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45516,45517,45518,45519,45520,45521,45522,45523,45524,45525,45526,45527,45528,45529,45530,45531,45532,45533,45534,45535,45536,45537,45538,45539,45540,45541,45542,45543,45544,45545,45546,45547,45548,45549,45550,45551,45552,45553,45554,45555,45556,45557,45558,45559,45560,45561,45562,45563,45564,45565,45566,45567,45568,45569,45570,45571,45572,45573,45574,45575,45576,45577,45578,45579,45580,45581,45582,45583,45584,45585,45586,45587,45588,45589,45590,45591,45592,45593,45594,45595,45596,45597,45598,45599,45600,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45620,45621,45622,45623,45624,45625,45626,45627,45628,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45656,45657,45658,45659,45660,45661,45662,45663,45664,45665,45666,45667,45668,45669,45670,45671,45672,45673,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45684,45685,45686,45687,45688,45689,45690,45691,45692,45693,45694,45695,45696,45697,45698,45699,45700,45701,45702,45703,45704,45705,45706,45707,45708,45709,45710,45711,45712,45713,45714,45715,45716,45717,45718,45719,45720,45721,45722,45723,45724,45725,45726,45727,45728,45729,45730,45731,45732,45733,45734,45735,45736,45737,45738,45739,45740,45741,45742,45743,45744,45745,45746,45747,45748,45749,45750,45751,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45768,45769,45770,45771,45772,45773,45774,45775,45776,45777,45778,45779,45780,45781,45782,45783,45784,45785,45786,45787,45788,45789,45790,45791,45792,45793,45794,45795,45796,45797,45798,45799,45800,45801,45802,45803,45804,45805,45806,45807,45808,45809,45810,45811,45812,45813,45814,45815,45816,45817,45818,45819,45820,45821,45822,45823,45824,45825,45826,45827,45828,45829,45830,45831,45832,45833,45834,45835,45836,45837,45838,45839,45840,45841,45842,45843,45844,45845,45846,45847,45848,45849,45850,45851,45852,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45908,45909,45910,45911,45912,45913,45914,45915,45916,45917,45918,45919,45920,45921,45922,45923,45924,45925,45926,45927,45928,45929,45930,45931,45932,45933,45934,45935,45936,45937,45938,45939,45940,45941,45942,45943,45944,45945,45946,45947,45948,45949,45950,45951,45952,45953,45954,45955,45956,45957,45958,45959,45960,45961,45962,45963,45964,45965,45966,45967,45968,45969,45970,45971,45972,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45984,45985,45986,45987,45988,45989,45990,45991,45992,45993,45994,45995,45996,45997,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46020,46021,46022,46023,46024,46025,46026,46027,46028,46029,46030,46031,46032,46033,46034,46035,46036,46037,46038,46039,46040,46041,46042,46043,46044,46045,46046,46047,46048,46049,46050,46051,46052,46053,46054,46055,46056,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46076,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46096,46097,46098,46099,46100,46101,46102,46103,46104,46105,46106,46107,46108,46109,46110,46111,46112,46113,46114,46115,46116,46117,46118,46119,46120,46121,46122,46123,46124,46125,46126,46127,46128,46129,46130,46131,46132,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46160,46161,46162,46163,46164,46165,46166,46167,46168,46169,46170,46171,46172,46173,46174,46175,46176,46177,46178,46179,46180,46181,46182,46183,46184,46185,46186,46187,46188,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46208,46209,46210,46211,46212,46213,46214,46215,46216,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46237,46238,46239,46240,46241,46242,46243,46244,46245,46246,46247,46248,46249,46250,46251,46252,46253,46254,46255,46256,46257,46258,46259,46260,46261,46262,46263,46264,46265,46266,46267,46268,46269,46270,46271,46272,46273,46274,46275,46276,46277,46278,46279,46280,46281,46282,46283,46284,46285,46286,46287,46288,46289,46290,46291,46292,46293,46294,46295,46296,46297,46298,46299,46300,46301,46302,46303,46304,46305,46306,46307,46308,46309,46310,46311,46312,46313,46314,46315,46316,46317,46318,46319,46320,46321,46322,46323,46324,46325,46326,46327,46328,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46356,46357,46358,46359,46360,46361,46362,46363,46364,46365,46366,46367,46368,46369,46370,46371,46372,46373,46374,46375,46376,46377,46378,46379,46380,46381,46382,46383,46384,46385,46386,46387,46388,46389,46390,46391,46392,46393,46394,46395,46396,46397,46398,46399,46400,46401,46402,46403,46404,46405,46406,46407,46408,46409,46410,46411,46412,46413,46414,46415,46416,46417,46418,46419,46420,46421,46422,46423,46424,46425,46426,46427,46428,46429,46430,46431,46432,46433,46434,46435,46436,46437,46438,46439,46440,46441,46442,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46496,46497,46498,46499,46500,46501,46502,46503,46504,46505,46506,46507,46508,46509,46510,46511,46512,46513,46514,46515,46516,46517,46518,46519,46520,46521,46522,46523,46524,46525,46526,46527,46528,46529,46530,46531,46532,46533,46534,46535,46536,46537,46538,46539,46540,46541,46542,46543,46544,46545,46546,46547,46548,46549,46550,46551,46552,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46572,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46608,46609,46610,46611,46612,46613,46614,46615,46616,46617,46618,46619,46620,46621,46622,46623,46624,46625,46626,46627,46628,46629,46630,46631,46632,46633,46634,46635,46636,46637,46638,46639,46640,46641,46642,46643,46644,46645,46646,46647,46648,46649,46650,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46664,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46692,46693,46694,46695,46696,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46748,46749,46750,46751,46752,46753,46754,46755,46756,46757,46758,46759,46760,46761,46762,46763,46764,46765,46766,46767,46768,46769,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46804,46805,46806,46807,46808,46809,46810,46811,46812,46813,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46832,46833,46834,46835,46836,46837,46838,46839,46840,46841,46842,46843,46844,46845,46846,46847,46848,46849,46850,46851,46852,46853,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46888,46889,46890,46891,46892,46893,46894,46895,46896,46897,46898,46899,46900,46901,46902,46903,46904,46905,46906,46907,46908,46909,46910,46911,46912,46913,46914,46915,46916,46917,46918,46919,46920,46921,46922,46923,46924,46925,46926,46927,46928,46929,46930,46931,46932,46933,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46944,46945,46946,46947,46948,46949,46950,46951,46952,46953,46954,46955,46956,46957,46958,46959,46960,46961,46962,46963,46964,46965,46966,46967,46968,46969,46970,46971,46972,46973,46974,46975,46976,46977,46978,46979,46980,46981,46982,46983,46984,46985,46986,46987,46988,46989,46990,46991,46992,46993,46994,46995,46996,46997,46998,46999,47000,47001,47002,47003,47004,47005,47006,47007,47008,47009,47010,47011,47012,47013,47014,47015,47016,47017,47018,47019,47020,47021,47022,47023,47024,47025,47026,47027,47028,47029,47030,47031,47032,47033,47034,47035,47036,47037,47038,47039,47040,47041,47042,47043,47044,47045,47046,47047,47048,47049,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47084,47085,47086,47087,47088,47089,47090,47091,47092,47093,47094,47095,47096,47097,47098,47099,47100,47101,47102,47103,47104,47105,47106,47107,47108,47109,47110,47111,47112,47113,47114,47115,47116,47117,47118,47119,47120,47121,47122,47123,47124,47125,47126,47127,47128,47129,47130,47131,47132,47133,47134,47135,47136,47137,47138,47139,47140,47141,47142,47143,47144,47145,47146,47147,47148,47149,47150,47151,47152,47153,47154,47155,47156,47157,47158,47159,47160,47161,47162,47163,47164,47165,47166,47167,47168,47169,47170,47171,47172,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47185,47186,47187,47188,47189,47190,47191,47192,47193,47194,47195,47196,47197,47198,47199,47200,47201,47202,47203,47204,47205,47206,47207,47208,47209,47210,47211,47212,47213,47214,47215,47216,47217,47218,47219,47220,47221,47222,47223,47224,47225,47226,47227,47228,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47245,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,47264,47265,47266,47267,47268,47269,47270,47271,47272,47273,47274,47275,47276,47277,47278,47279,47280,47281,47282,47283,47284,47285,47286,47287,47288,47289,47290,47291,47292,47293,47294,47295,47296,47297,47298,47299,47300,47301,47302,47303,47304,47305,47306,47307,47308,47309,47310,47311,47312,47313,47314,47315,47316,47317,47318,47319,47320,47321,47322,47323,47324,47325,47326,47327,47328,47329,47330,47331,47332,47333,47334,47335,47336,47337,47338,47339,47340,47341,47342,47343,47344,47345,47346,47347,47348,47349,47350,47351,47352,47353,47354,47355,47356,47357,47358,47359,47360,47361,47362,47363,47364,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47384,47385,47386,47387,47388,47389,47390,47391,47392,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47420,47421,47422,47423,47424,47425,47426,47427,47428,47429,47430,47431,47432,47433,47434,47435,47436,47437,47438,47439,47440,47441,47442,47443,47444,47445,47446,47447,47448,47449,47450,47451,47452,47453,47454,47455,47456,47457,47458,47459,47460,47461,47462,47463,47464,47465,47466,47467,47468,47469,47470,47471,47472,47473,47474,47475,47476,47477,47478,47479,47480,47481,47482,47483,47484,47485,47486,47487,47488,47489,47490,47491,47492,47493,47494,47495,47496,47497,47498,47499,47500,47501,47502,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47532,47533,47534,47535,47536,47537,47538,47539,47540,47541,47542,47543,47544,47545,47546,47547,47548,47549,47550,47551,47552,47553,47554,47555,47556,47557,47558,47559,47560,47561,47562,47563,47564,47565,47566,47567,47568,47569,47570,47571,47572,47573,47574,47575,47576,47577,47578,47579,47580,47581,47582,47583,47584,47585,47586,47587,47588,47589,47590,47591,47592,47593,47594,47595,47596,47597,47598,47599,47600,47601,47602,47603,47604,47605,47606,47607,47608,47609,47610,47611,47612,47613,47614,47615,47616,47617,47618,47619,47620,47621,47622,47623,47624,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47637,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47672,47673,47674,47675,47676,47677,47678,47679,47680,47681,47682,47683,47684,47685,47686,47687,47688,47689,47690,47691,47692,47693,47694,47695,47696,47697,47698,47699,47700,47701,47702,47703,47704,47705,47706,47707,47708,47709,47710,47711,47712,47713,47714,47715,47716,47717,47718,47719,47720,47721,47722,47723,47724,47725,47726,47727,47728,47729,47730,47731,47732,47733,47734,47735,47736,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47747,47748,47749,47750,47751,47752,47753,47754,47755,47756,47757,47758,47759,47760,47761,47762,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47784,47785,47786,47787,47788,47789,47790,47791,47792,47793,47794,47795,47796,47797,47798,47799,47800,47801,47802,47803,47804,47805,47806,47807,47808,47809,47810,47811,47812,47813,47814,47815,47816,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47832,47833,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47868,47869,47870,47871,47872,47873,47874,47875,47876,47877,47878,47879,47880,47881,47882,47883,47884,47885,47886,47887,47888,47889,47890,47891,47892,47893,47894,47895,47896,47897,47898,47899,47900,47901,47902,47903,47904,47905,47906,47907,47908,47909,47910,47911,47912,47913,47914,47915,47916,47917,47918,47919,47920,47921,47922,47923,47924,47925,47926,47927,47928,47929,47930,47931,47932,47933,47934,47935,47936,47937,47938,47939,47940,47941,47942,47943,47944,47945,47946,47947,47948,47949,47950,47951,47952,47953,47954,47955,47956,47957,47958,47959,47960,47961,47962,47963,47964,47965,47966,47967,47968,47969,47970,47971,47972,47973,47974,47975,47976,47977,47978,47979,47980,47981,47982,47983,47984,47985,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48008,48009,48010,48011,48012,48013,48014,48015,48016,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48036,48037,48038,48039,48040,48041,48042,48043,48044,48045,48046,48047,48048,48049,48050,48051,48052,48053,48054,48055,48056,48057,48058,48059,48060,48061,48062,48063,48064,48065,48066,48067,48068,48069,48070,48071,48072,48073,48074,48075,48076,48077,48078,48079,48080,48081,48082,48083,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48120,48121,48122,48123,48124,48125,48126,48127,48128,48129,48130,48131,48132,48133,48134,48135,48136,48137,48138,48139,48140,48141,48142,48143,48144,48145,48146,48147,48148,48149,48150,48151,48152,48153,48154,48155,48156,48157,48158,48159,48160,48161,48162,48163,48164,48165,48166,48167,48168,48169,48170,48171,48172,48173,48174,48175,48176,48177,48178,48179,48180,48181,48182,48183,48184,48185,48186,48187,48188,48189,48190,48191,48192,48193,48194,48195,48196,48197,48198,48199,48200,48201,48202,48203,48204,48205,48206,48207,48208,48209,48210,48211,48212,48213,48214,48215,48216,48217,48218,48219,48220,48221,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48260,48261,48262,48263,48264,48265,48266,48267,48268,48269,48270,48271,48272,48273,48274,48275,48276,48277,48278,48279,48280,48281,48282,48283,48284,48285,48286,48287,48288,48289,48290,48291,48292,48293,48294,48295,48296,48297,48298,48299,48300,48301,48302,48303,48304,48305,48306,48307,48308,48309,48310,48311,48312,48313,48314,48315,48316,48317,48318,48319,48320,48321,48322,48323,48324,48325,48326,48327,48328,48329,48330,48331,48332,48333,48334,48335,48336,48337,48338,48339,48340,48341,48342,48343,48344,48345,48346,48347,48348,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48372,48373,48374,48375,48376,48377,48378,48379,48380,48381,48382,48383,48384,48385,48386,48387,48388,48389,48390,48391,48392,48393,48394,48395,48396,48397,48398,48399,48400,48401,48402,48403,48404,48405,48406,48407,48408,48409,48410,48411,48412,48413,48414,48415,48416,48417,48418,48419,48420,48421,48422,48423,48424,48425,48426,48427,48428,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,48442,48443,48444,48445,48446,48447,48448,48449,48450,48451,48452,48453,48454,48455,48456,48457,48458,48459,48460,48461,48462,48463,48464,48465,48466,48467,48468,48469,48470,48471,48472,48473,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48484,48485,48486,48487,48488,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48512,48513,48514,48515,48516,48517,48518,48519,48520,48521,48522,48523,48524,48525,48526,48527,48528,48529,48530,48531,48532,48533,48534,48535,48536,48537,48538,48539,48540,48541,48542,48543,48544,48545,48546,48547,48548,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48560,48561,48562,48563,48564,48565,48566,48567,48568,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48596,48597,48598,48599,48600,48601,48602,48603,48604,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48617,48618,48619,48620,48621,48622,48623,48624,48625,48626,48627,48628,48629,48630,48631,48632,48633,48634,48635,48636,48637,48638,48639,48640,48641,48642,48643,48644,48645,48646,48647,48648,48649,48650,48651,48652,48653,48654,48655,48656,48657,48658,48659,48660,48661,48662,48663,48664,48665,48666,48667,48668,48669,48670,48671,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48708,48709,48710,48711,48712,48713,48714,48715,48716,48717,48718,48719,48720,48721,48722,48723,48724,48725,48726,48727,48728,48729,48730,48731,48732,48733,48734,48735,48736,48737,48738,48739,48740,48741,48742,48743,48744,48745,48746,48747,48748,48749,48750,48751,48752,48753,48754,48755,48756,48757,48758,48759,48760,48761,48762,48763,48764,48765,48766,48767,48768,48769,48770,48771,48772,48773,48774,48775,48776,48777,48778,48779,48780,48781,48782,48783,48784,48785,48786,48787,48788,48789,48790,48791,48792,48793,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48808,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48848,48849,48850,48851,48852,48853,48854,48855,48856,48857,48858,48859,48860,48861,48862,48863,48864,48865,48866,48867,48868,48869,48870,48871,48872,48873,48874,48875,48876,48877,48878,48879,48880,48881,48882,48883,48884,48885,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48897,48898,48899,48900,48901,48902,48903,48904,48905,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48920,48921,48922,48923,48924,48925,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48960,48961,48962,48963,48964,48965,48966,48967,48968,48969,48970,48971,48972,48973,48974,48975,48976,48977,48978,48979,48980,48981,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49044,49045,49046,49047,49048,49049,49050,49051,49052,49053,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49072,49073,49074,49075,49076,49077,49078,49079,49080,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49093,49094,49095,49096,49097,49098,49099,49100,49101,49102,49103,49104,49105,49106,49107,49108,49109,49110,49111,49112,49113,49114,49115,49116,49117,49118,49119,49120,49121,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49212,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49233,49234,49235,49236,49237,49238,49239,49240,49241,49242,49243,49244,49245,49246,49247,49248,49249,49250,49251,49252,49253,49254,49255,49256,49257,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49296,49297,49298,49299,49300,49301,49302,49303,49304,49305,49306,49307,49308,49309,49310,49311,49312,49313,49314,49315,49316,49317,49318,49319,49320,49321,49322,49323,49324,49325,49326,49327,49328,49329,49330,49331,49332,49333,49334,49335,49336,49337,49338,49339,49340,49341,49342,49343,49344,49345,49346,49347,49348,49349,49350,49351,49352,49353,49354,49355,49356,49357,49358,49359,49360,49361,49362,49363,49364,49365,49366,49367,49368,49369,49370,49371,49372,49373,49374,49375,49376,49377,49378,49379,49380,49381,49382,49383,49384,49385,49386,49387,49388,49389,49390,49391,49392,49393,49394,49395,49396,49397,49398,49399,49400,49401,49402,49403,49404,49405,49406,49407,49408,49409,49410,49411,49412,49413,49414,49415,49416,49417,49418,49419,49420,49421,49422,49423,49424,49425,49426,49427,49428,49429,49430,49431,49432,49433,49434,49435,49436,49437,49438,49439,49440,49441,49442,49443,49444,49445,49446,49447,49448,49449,49450,49451,49452,49453,49454,49455,49456,49457,49458,49459,49460,49461,49462,49463,49464,49465,49466,49467,49468,49469,49470,49471,49472,49473,49474,49475,49476,49477,49478,49479,49480,49481,49482,49483,49484,49485,49486,49487,49488,49489,49490,49491,49492,49493,49494,49495,49496,49497,49498,49499,49500,49501,49502,49503,49504,49505,49506,49507,49508,49509,49510,49511,49512,49513,49514,49515,49516,49517,49518,49519,49520,49521,49522,49523,49524,49525,49526,49527,49528,49529,49530,49531,49532,49533,49534,49535,49536,49537,49538,49539,49540,49541,49542,49543,49544,49545,49546,49547,49548,49549,49550,49551,49552,49553,49554,49555,49556,49557,49558,49559,49560,49561,49562,49563,49564,49565,49566,49567,49568,49569,49570,49571,49572,49573,49574,49575,49576,49577,49578,49579,49580,49581,49582,49583,49584,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49597,49598,49599,49600,49601,49602,49603,49604,49605,49606,49607,49608,49609,49610,49611,49612,49613,49614,49615,49616,49617,49618,49619,49620,49621,49622,49623,49624,49625,49626,49627,49628,49629,49630,49631,49632,49633,49634,49635,49636,49637,49638,49639,49640,49641,49642,49643,49644,49645,49646,49647,49648,49649,49650,49651,49652,49653,49654,49655,49656,49657,49658,49659,49660,49661,49662,49663,49664,49665,49666,49667,49668,49669,49670,49671,49672,49673,49674,49675,49676,49677,49678,49679,49680,49681,49682,49683,49684,49685,49686,49687,49688,49689,49690,49691,49692,49693,49694,49695,49696,49697,49698,49699,49700,49701,49702,49703,49704,49705,49706,49707,49708,49709,49710,49711,49712,49713,49714,49715,49716,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,49734,49735,49736,49737,49738,49739,49740,49741,49742,49743,49744,49745,49746,49747,49748,49749,49750,49751,49752,49753,49754,49755,49756,49757,49758,49759,49760,49761,49762,49763,49764,49765,49766,49767,49768,49769,49770,49771,49772,49773,49774,49775,49776,49777,49778,49779,49780,49781,49782,49783,49784,49785,49786,49787,49788,49789,49790,49791,49792,49793,49794,49795,49796,49797,49798,49799,49800,49801,49802,49803,49804,49805,49806,49807,49808,49809,49810,49811,49812,49813,49814,49815,49816,49817,49818,49819,49820,49821,49822,49823,49824,49825,49826,49827,49828,49829,49830,49831,49832,49833,49834,49835,49836,49837,49838,49839,49840,49841,49842,49843,49844,49845,49846,49847,49848,49849,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49884,49885,49886,49887,49888,49889,49890,49891,49892,49893,49894,49895,49896,49897,49898,49899,49900,49901,49902,49903,49904,49905,49906,49907,49908,49909,49910,49911,49912,49913,49914,49915,49916,49917,49918,49919,49920,49921,49922,49923,49924,49925,49926,49927,49928,49929,49930,49931,49932,49933,49934,49935,49936,49937,49938,49939,49940,49941,49942,49943,49944,49945,49946,49947,49948,49949,49950,49951,49952,49953,49954,49955,49956,49957,49958,49959,49960,49961,49962,49963,49964,49965,49966,49967,49968,49969,49970,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49989,49990,49991,49992,49993,49994,49995,49996,49997,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50024,50025,50026,50027,50028,50029,50030,50031,50032,50033,50034,50035,50036,50037,50038,50039,50040,50041,50042,50043,50044,50045,50046,50047,50048,50049,50050,50051,50052,50053,50054,50055,50056,50057,50058,50059,50060,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50112,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50136,50137,50138,50139,50140,50141,50142,50143,50144,50145,50146,50147,50148,50149,50150,50151,50152,50153,50154,50155,50156,50157,50158,50159,50160,50161,50162,50163,50164,50165,50166,50167,50168,50169,50170,50171,50172,50173,50174,50175,50176,50177,50178,50179,50180,50181,50182,50183,50184,50185,50186,50187,50188,50189,50190,50191,50192,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,50203,50204,50205,50206,50207,50208,50209,50210,50211,50212,50213,50214,50215,50216,50217,50218,50219,50220,50221,50222,50223,50224,50225,50226,50227,50228,50229,50230,50231,50232,50233,50234,50235,50236,50237,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50248,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50276,50277,50278,50279,50280,50281,50282,50283,50284,50285,50286,50287,50288,50289,50290,50291,50292,50293,50294,50295,50296,50297,50298,50299,50300,50301,50302,50303,50304,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50324,50325,50326,50327,50328,50329,50330,50331,50332,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50360,50361,50362,50363,50364,50365,50366,50367,50368,50369,50370,50371,50372,50373,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,50400,50401,50402,50403,50404,50405,50406,50407,50408,50409,50410,50411,50412,50413,50414,50415,50416,50417,50418,50419,50420,50421,50422,50423,50424,50425,50426,50427,50428,50429,50430,50431,50432,50433,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50444,50445,50446,50447,50448,50449,50450,50451,50452,50453,50454,50455,50456,50457,50458,50459,50460,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50472,50473,50474,50475,50476,50477,50478,50479,50480,50481,50482,50483,50484,50485,50486,50487,50488,50489,50490,50491,50492,50493,50494,50495,50496,50497,50498,50499,50500,50501,50502,50503,50504,50505,50506,50507,50508,50509,50510,50511,50512,50513,50514,50515,50516,50517,50518,50519,50520,50521,50522,50523,50524,50525,50526,50527,50528,50529,50530,50531,50532,50533,50534,50535,50536,50537,50538,50539,50540,50541,50542,50543,50544,50545,50546,50547,50548,50549,50550,50551,50552,50553,50554,50555,50556,50557,50558,50559,50560,50561,50562,50563,50564,50565,50566,50567,50568,50569,50570,50571,50572,50573,50574,50575,50576,50577,50578,50579,50580,50581,50582,50583,50584,50585,50586,50587,50588,50589,50590,50591,50592,50593,50594,50595,50596,50597,50598,50599,50600,50601,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50612,50613,50614,50615,50616,50617,50618,50619,50620,50621,50622,50623,50624,50625,50626,50627,50628,50629,50630,50631,50632,50633,50634,50635,50636,50637,50638,50639,50640,50641,50642,50643,50644,50645,50646,50647,50648,50649,50650,50651,50652,50653,50654,50655,50656,50657,50658,50659,50660,50661,50662,50663,50664,50665,50666,50667,50668,50669,50670,50671,50672,50673,50674,50675,50676,50677,50678,50679,50680,50681,50682,50683,50684,50685,50686,50687,50688,50689,50690,50691,50692,50693,50694,50695,50696,50697,50698,50699,50700,50701,50702,50703,50704,50705,50706,50707,50708,50709,50710,50711,50712,50713,50714,50715,50716,50717,50718,50719,50720,50721,50722,50723,50724,50725,50726,50727,50728,50729,50730,50731,50732,50733,50734,50735,50736,50737,50738,50739,50740,50741,50742,50743,50744,50745,50746,50747,50748,50749,50750,50751,50752,50753,50754,50755,50756,50757,50758,50759,50760,50761,50762,50763,50764,50765,50766,50767,50768,50769,50770,50771,50772,50773,50774,50775,50776,50777,50778,50779,50780,50781,50782,50783,50784,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50796,50797,50798,50799,50800,50801,50802,50803,50804,50805,50806,50807,50808,50809,50810,50811,50812,50813,50814,50815,50816,50817,50818,50819,50820,50821,50822,50823,50824,50825,50826,50827,50828,50829,50830,50831,50832,50833,50834,50835,50836,50837,50838,50839,50840,50841,50842,50843,50844,50845,50846,50847,50848,50849,50850,50851,50852,50853,50854,50855,50856,50857,50858,50859,50860,50861,50862,50863,50864,50865,50866,50867,50868,50869,50870,50871,50872,50873,50874,50875,50876,50877,50878,50879,50880,50881,50882,50883,50884,50885,50886,50887,50888,50889,50890,50891,50892,50893,50894,50895,50896,50897,50898,50899,50900,50901,50902,50903,50904,50905,50906,50907,50908,50909,50910,50911,50912,50913,50914,50915,50916,50917,50918,50919,50920,50921,50922,50923,50924,50925,50926,50927,50928,50929,50930,50931,50932,50933,50934,50935,50936,50937,50938,50939,50940,50941,50942,50943,50944,50945,50946,50947,50948,50949,50950,50951,50952,50953,50954,50955,50956,50957,50958,50959,50960,50961,50962,50963,50964,50965,50966,50967,50968,50969,50970,50971,50972,50973,50974,50975,50976,50977,50978,50979,50980,50981,50982,50983,50984,50985,50986,50987,50988,50989,50990,50991,50992,50993,50994,50995,50996,50997,50998,50999,51000,51001,51002,51003,51004,51005,51006,51007,51008,51009,51010,51011,51012,51013,51014,51015,51016,51017,51018,51019,51020,51021,51022,51023,51024,51025,51026,51027,51028,51029,51030,51031,51032,51033,51034,51035,51036,51037,51038,51039,51040,51041,51042,51043,51044,51045,51046,51047,51048,51049,51050,51051,51052,51053,51054,51055,51056,51057,51058,51059,51060,51061,51062,51063,51064,51065,51066,51067,51068,51069,51070,51071,51072,51073,51074,51075,51076,51077,51078,51079,51080,51081,51082,51083,51084,51085,51086,51087,51088,51089,51090,51091,51092,51093,51094,51095,51096,51097,51098,51099,51100,51101,51102,51103,51104,51105,51106,51107,51108,51109,51110,51111,51112,51113,51114,51115,51116,51117,51118,51119,51120,51121,51122,51123,51124,51125,51126,51127,51128,51129,51130,51131,51132,51133,51134,51135,51136,51137,51138,51139,51140,51141,51142,51143,51144,51145,51146,51147,51148,51149,51150,51151,51152,51153,51154,51155,51156,51157,51158,51159,51160,51161,51162,51163,51164,51165,51166,51167,51168,51169,51170,51171,51172,51173,51174,51175,51176,51177,51178,51179,51180,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,51195,51196,51197,51198,51199,51200,51201,51202,51203,51204,51205,51206,51207,51208,51209,51210,51211,51212,51213,51214,51215,51216,51217,51218,51219,51220,51221,51222,51223,51224,51225,51226,51227,51228,51229,51230,51231,51232,51233,51234,51235,51236,51237,51238,51239,51240,51241,51242,51243,51244,51245,51246,51247,51248,51249,51250,51251,51252,51253,51254,51255,51256,51257,51258,51259,51260,51261,51262,51263,51264,51265,51266,51267,51268,51269,51270,51271,51272,51273,51274,51275,51276,51277,51278,51279,51280,51281,51282,51283,51284,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51312,51313,51314,51315,51316,51317,51318,51319,51320,51321,51322,51323,51324,51325,51326,51327,51328,51329,51330,51331,51332,51333,51334,51335,51336,51337,51338,51339,51340,51341,51342,51343,51344,51345,51346,51347,51348,51349,51350,51351,51352,51353,51354,51355,51356,51357,51358,51359,51360,51361,51362,51363,51364,51365,51366,51367,51368,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51388,51389,51390,51391,51392,51393,51394,51395,51396,51397,51398,51399,51400,51401,51402,51403,51404,51405,51406,51407,51408,51409,51410,51411,51412,51413,51414,51415,51416,51417,51418,51419,51420,51421,51422,51423,51424,51425,51426,51427,51428,51429,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51445,51446,51447,51448,51449,51450,51451,51452,51453,51454,51455,51456,51457,51458,51459,51460,51461,51462,51463,51464,51465,51466,51467,51468,51469,51470,51471,51472,51473,51474,51475,51476,51477,51478,51479,51480,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,51500,51501,51502,51503,51504,51505,51506,51507,51508,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,51528,51529,51530,51531,51532,51533,51534,51535,51536,51537,51538,51539,51540,51541,51542,51543,51544,51545,51546,51547,51548,51549,51550,51551,51552,51553,51554,51555,51556,51557,51558,51559,51560,51561,51562,51563,51564,51565,51566,51567,51568,51569,51570,51571,51572,51573,51574,51575,51576,51577,51578,51579,51580,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51592,51593,51594,51595,51596,51597,51598,51599,51600,51601,51602,51603,51604,51605,51606,51607,51608,51609,51610,51611,51612,51613,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51648,51649,51650,51651,51652,51653,51654,51655,51656,51657,51658,51659,51660,51661,51662,51663,51664,51665,51666,51667,51668,51669,51670,51671,51672,51673,51674,51675,51676,51677,51678,51679,51680,51681,51682,51683,51684,51685,51686,51687,51688,51689,51690,51691,51692,51693,51694,51695,51696,51697,51698,51699,51700,51701,51702,51703,51704,51705,51706,51707,51708,51709,51710,51711,51712,51713,51714,51715,51716,51717,51718,51719,51720,51721,51722,51723,51724,51725,51726,51727,51728,51729,51730,51731,51732,51733,51734,51735,51736,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,51750,51751,51752,51753,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,51783,51784,51785,51786,51787,51788,51789,51790,51791,51792,51793,51794,51795,51796,51797,51798,51799,51800,51801,51802,51803,51804,51805,51806,51807,51808,51809,51810,51811,51812,51813,51814,51815,51816,51817,51818,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51837,51838,51839,51840,51841,51842,51843,51844,51845,51846,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51864,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51900,51901,51902,51903,51904,51905,51906,51907,51908,51909,51910,51911,51912,51913,51914,51915,51916,51917,51918,51919,51920,51921,51922,51923,51924,51925,51926,51927,51928,51929,51930,51931,51932,51933,51934,51935,51936,51937,51938,51939,51940,51941,51942,51943,51944,51945,51946,51947,51948,51949,51950,51951,51952,51953,51954,51955,51956,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51976,51977,51978,51979,51980,51981,51982,51983,51984,51985,51986,51987,51988,51989,51990,51991,51992,51993,51994,51995,51996,51997,51998,51999,52000,52001,52002,52003,52004,52005,52006,52007,52008,52009,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52033,52034,52035,52036,52037,52038,52039,52040,52041,52042,52043,52044,52045,52046,52047,52048,52049,52050,52051,52052,52053,52054,52055,52056,52057,52058,52059,52060,52061,52062,52063,52064,52065,52066,52067,52068,52069,52070,52071,52072,52073,52074,52075,52076,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52088,52089,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52124,52125,52126,52127,52128,52129,52130,52131,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52152,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52180,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,52192,52193,52194,52195,52196,52197,52198,52199,52200,52201,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52236,52237,52238,52239,52240,52241,52242,52243,52244,52245,52246,52247,52248,52249,52250,52251,52252,52253,52254,52255,52256,52257,52258,52259,52260,52261,52262,52263,52264,52265,52266,52267,52268,52269,52270,52271,52272,52273,52274,52275,52276,52277,52278,52279,52280,52281,52282,52283,52284,52285,52286,52287,52288,52289,52290,52291,52292,52293,52294,52295,52296,52297,52298,52299,52300,52301,52302,52303,52304,52305,52306,52307,52308,52309,52310,52311,52312,52313,52314,52315,52316,52317,52318,52319,52320,52321,52322,52323,52324,52325,52326,52327,52328,52329,52330,52331,52332,52333,52334,52335,52336,52337,52338,52339,52340,52341,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,52372,52373,52374,52375,52376,52377,52378,52379,52380,52381,52382,52383,52384,52385,52386,52387,52388,52389,52390,52391,52392,52393,52394,52395,52396,52397,52398,52399,52400,52401,52402,52403,52404,52405,52406,52407,52408,52409,52410,52411,52412,52413,52414,52415,52416,52417,52418,52419,52420,52421,52422,52423,52424,52425,52426,52427,52428,52429,52430,52431,52432,52433,52434,52435,52436,52437,52438,52439,52440,52441,52442,52443,52444,52445,52446,52447,52448,52449,52450,52451,52452,52453,52454,52455,52456,52457,52458,52459,52460,52461,52462,52463,52464,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,52478,52479,52480,52481,52482,52483,52484,52485,52486,52487,52488,52489,52490,52491,52492,52493,52494,52495,52496,52497,52498,52499,52500,52501,52502,52503,52504,52505,52506,52507,52508,52509,52510,52511,52512,52513,52514,52515,52516,52517,52518,52519,52520,52521,52522,52523,52524,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52537,52538,52539,52540,52541,52542,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52572,52573,52574,52575,52576,52577,52578,52579,52580,52581,52582,52583,52584,52585,52586,52587,52588,52589,52590,52591,52592,52593,52594,52595,52596,52597,52598,52599,52600,52601,52602,52603,52604,52605,52606,52607,52608,52609,52610,52611,52612,52613,52614,52615,52616,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52628,52629,52630,52631,52632,52633,52634,52635,52636,52637,52638,52639,52640,52641,52642,52643,52644,52645,52646,52647,52648,52649,52650,52651,52652,52653,52654,52655,52656,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52676,52677,52678,52679,52680,52681,52682,52683,52684,52685,52686,52687,52688,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,52706,52707,52708,52709,52710,52711,52712,52713,52714,52715,52716,52717,52718,52719,52720,52721,52722,52723,52724,52725,52726,52727,52728,52729,52730,52731,52732,52733,52734,52735,52736,52737,52738,52739,52740,52741,52742,52743,52744,52745,52746,52747,52748,52749,52750,52751,52752,52753,52754,52755,52756,52757,52758,52759,52760,52761,52762,52763,52764,52765,52766,52767,52768,52769,52770,52771,52772,52773,52774,52775,52776,52777,52778,52779,52780,52781,52782,52783,52784,52785,52786,52787,52788,52789,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52824,52825,52826,52827,52828,52829,52830,52831,52832,52833,52834,52835,52836,52837,52838,52839,52840,52841,52842,52843,52844,52845,52846,52847,52848,52849,52850,52851,52852,52853,52854,52855,52856,52857,52858,52859,52860,52861,52862,52863,52864,52865,52866,52867,52868,52869,52870,52871,52872,52873,52874,52875,52876,52877,52878,52879,52880,52881,52882,52883,52884,52885,52886,52887,52888,52889,52890,52891,52892,52893,52894,52895,52896,52897,52898,52899,52900,52901,52902,52903,52904,52905,52906,52907,52908,52909,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,52923,52924,52925,52926,52927,52928,52929,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52964,52965,52966,52967,52968,52969,52970,52971,52972,52973,52974,52975,52976,52977,52978,52979,52980,52981,52982,52983,52984,52985,52986,52987,52988,52989,52990,52991,52992,52993,52994,52995,52996,52997,52998,52999,53000,53001,53002,53003,53004,53005,53006,53007,53008,53009,53010,53011,53012,53013,53014,53015,53016,53017,53018,53019,53020,53021,53022,53023,53024,53025,53026,53027,53028,53029,53030,53031,53032,53033,53034,53035,53036,53037,53038,53039,53040,53041,53042,53043,53044,53045,53046,53047,53048,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53076,53077,53078,53079,53080,53081,53082,53083,53084,53085,53086,53087,53088,53089,53090,53091,53092,53093,53094,53095,53096,53097,53098,53099,53100,53101,53102,53103,53104,53105,53106,53107,53108,53109,53110,53111,53112,53113,53114,53115,53116,53117,53118,53119,53120,53121,53122,53123,53124,53125,53126,53127,53128,53129,53130,53131,53132,53133,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53153,53154,53155,53156,53157,53158,53159,53160,53161,53162,53163,53164,53165,53166,53167,53168,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53188,53189,53190,53191,53192,53193,53194,53195,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53216,53217,53218,53219,53220,53221,53222,53223,53224,53225,53226,53227,53228,53229,53230,53231,53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247,53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263,53264,53265,53266,53267,53268,53269,53270,53271,53272,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,53293,53294,53295,53296,53297,53298,53299,53300,53301,53302,53303,53304,53305,53306,53307,53308,53309,53310,53311,53312,53313,53314,53315,53316,53317,53318,53319,53320,53321,53322,53323,53324,53325,53326,53327,53328,53329,53330,53331,53332,53333,53334,53335,53336,53337,53338,53339,53340,53341,53342,53343,53344,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53356,53357,53358,53359,53360,53361,53362,53363,53364,53365,53366,53367,53368,53369,53370,53371,53372,53373,53374,53375,53376,53377,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53412,53413,53414,53415,53416,53417,53418,53419,53420,53421,53422,53423,53424,53425,53426,53427,53428,53429,53430,53431,53432,53433,53434,53435,53436,53437,53438,53439,53440,53441,53442,53443,53444,53445,53446,53447,53448,53449,53450,53451,53452,53453,53454,53455,53456,53457,53458,53459,53460,53461,53462,53463,53464,53465,53466,53467,53468,53469,53470,53471,53472,53473,53474,53475,53476,53477,53478,53479,53480,53481,53482,53483,53484,53485,53486,53487,53488,53489,53490,53491,53492,53493,53494,53495,53496,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,53509,53510,53511,53512,53513,53514,53515,53516,53517,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53552,53553,53554,53555,53556,53557,53558,53559,53560,53561,53562,53563,53564,53565,53566,53567,53568,53569,53570,53571,53572,53573,53574,53575,53576,53577,53578,53579,53580,53581,53582,53583,53584,53585,53586,53587,53588,53589,53590,53591,53592,53593,53594,53595,53596,53597,53598,53599,53600,53601,53602,53603,53604,53605,53606,53607,53608,53609,53610,53611,53612,53613,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53628,53629,53630,53631,53632,53633,53634,53635,53636,53637,53638,53639,53640,53641,53642,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53664,53665,53666,53667,53668,53669,53670,53671,53672,53673,53674,53675,53676,53677,53678,53679,53680,53681,53682,53683,53684,53685,53686,53687,53688,53689,53690,53691,53692,53693,53694,53695,53696,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,53712,53713,53714,53715,53716,53717,53718,53719,53720,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,53739,53740,53741,53742,53743,53744,53745,53746,53747,53748,53749,53750,53751,53752,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,53767,53768,53769,53770,53771,53772,53773,53774,53775,53776,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,53802,53803,53804,53805,53806,53807,53808,53809,53810,53811,53812,53813,53814,53815,53816,53817,53818,53819,53820,53821,53822,53823,53824,53825,53826,53827,53828,53829,53830,53831,53832,53833,53834,53835,53836,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53852,53853,53854,53855,53856,53857,53858,53859,53860,53861,53862,53863,53864,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53888,53889,53890,53891,53892,53893,53894,53895,53896,53897,53898,53899,53900,53901,53902,53903,53904,53905,53906,53907,53908,53909,53910,53911,53912,53913,53914,53915,53916,53917,53918,53919,53920,53921,53922,53923,53924,53925,53926,53927,53928,53929,53930,53931,53932,53933,53934,53935,53936,53937,53938,53939,53940,53941,53942,53943,53944,53945,53946,53947,53948,53949,53950,53951,53952,53953,53954,53955,53956,53957,53958,53959,53960,53961,53962,53963,53964,53965,53966,53967,53968,53969,53970,53971,53972,53973,53974,53975,53976,53977,53978,53979,53980,53981,53982,53983,53984,53985,53986,53987,53988,53989,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54000,54001,54002,54003,54004,54005,54006,54007,54008,54009,54010,54011,54012,54013,54014,54015,54016,54017,54018,54019,54020,54021,54022,54023,54024,54025,54026,54027,54028,54029,54030,54031,54032,54033,54034,54035,54036,54037,54038,54039,54040,54041,54042,54043,54044,54045,54046,54047,54048,54049,54050,54051,54052,54053,54054,54055,54056,54057,54058,54059,54060,54061,54062,54063,54064,54065,54066,54067,54068,54069,54070,54071,54072,54073,54074,54075,54076,54077,54078,54079,54080,54081,54082,54083,54084,54085,54086,54087,54088,54089,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54140,54141,54142,54143,54144,54145,54146,54147,54148,54149,54150,54151,54152,54153,54154,54155,54156,54157,54158,54159,54160,54161,54162,54163,54164,54165,54166,54167,54168,54169,54170,54171,54172,54173,54174,54175,54176,54177,54178,54179,54180,54181,54182,54183,54184,54185,54186,54187,54188,54189,54190,54191,54192,54193,54194,54195,54196,54197,54198,54199,54200,54201,54202,54203,54204,54205,54206,54207,54208,54209,54210,54211,54212,54213,54214,54215,54216,54217,54218,54219,54220,54221,54222,54223,54224,54225,54226,54227,54228,54229,54230,54231,54232,54233,54234,54235,54236,54237,54238,54239,54240,54241,54242,54243,54244,54245,54246,54247,54248,54249,54250,54251,54252,54253,54254,54255,54256,54257,54258,54259,54260,54261,54262,54263,54264,54265,54266,54267,54268,54269,54270,54271,54272,54273,54274,54275,54276,54277,54278,54279,54280,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,54295,54296,54297,54298,54299,54300,54301,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,54328,54329,54330,54331,54332,54333,54334,54335,54336,54337,54338,54339,54340,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,54356,54357,54358,54359,54360,54361,54362,54363,54364,54365,54366,54367,54368,54369,54370,54371,54372,54373,54374,54375,54376,54377,54378,54379,54380,54381,54382,54383,54384,54385,54386,54387,54388,54389,54390,54391,54392,54393,54394,54395,54396,54397,54398,54399,54400,54401,54402,54403,54404,54405,54406,54407,54408,54409,54410,54411,54412,54413,54414,54415,54416,54417,54418,54419,54420,54421,54422,54423,54424,54425,54426,54427,54428,54429,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54441,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54476,54477,54478,54479,54480,54481,54482,54483,54484,54485,54486,54487,54488,54489,54490,54491,54492,54493,54494,54495,54496,54497,54498,54499,54500,54501,54502,54503,54504,54505,54506,54507,54508,54509,54510,54511,54512,54513,54514,54515,54516,54517,54518,54519,54520,54521,54522,54523,54524,54525,54526,54527,54528,54529,54530,54531,54532,54533,54534,54535,54536,54537,54538,54539,54540,54541,54542,54543,54544,54545,54546,54547,54548,54549,54550,54551,54552,54553,54554,54555,54556,54557,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,54584,54585,54586,54587,54588,54589,54590,54591,54592,54593,54594,54595,54596,54597,54598,54599,54600,54601,54602,54603,54604,54605,54606,54607,54608,54609,54610,54611,54612,54613,54614,54615,54616,54617,54618,54619,54620,54621,54622,54623,54624,54625,54626,54627,54628,54629,54630,54631,54632,54633,54634,54635,54636,54637,54638,54639,54640,54641,54642,54643,54644,54645,54646,54647,54648,54649,54650,54651,54652,54653,54654,54655,54656,54657,54658,54659,54660,54661,54662,54663,54664,54665,54666,54667,54668,54669,54670,54671,54672,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54693,54694,54695,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,54728,54729,54730,54731,54732,54733,54734,54735,54736,54737,54738,54739,54740,54741,54742,54743,54744,54745,54746,54747,54748,54749,54750,54751,54752,54753,54754,54755,54756,54757,54758,54759,54760,54761,54762,54763,54764,54765,54766,54767,54768,54769,54770,54771,54772,54773,54774,54775,54776,54777,54778,54779,54780,54781,54782,54783,54784,54785,54786,54787,54788,54789,54790,54791,54792,54793,54794,54795,54796,54797,54798,54799,54800,54801,54802,54803,54804,54805,54806,54807,54808,54809,54810,54811,54812,54813,54814,54815,54816,54817,54818,54819,54820,54821,54822,54823,54824,54825,54826,54827,54828,54829,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54840,54841,54842,54843,54844,54845,54846,54847,54848,54849,54850,54851,54852,54853,54854,54855,54856,54857,54858,54859,54860,54861,54862,54863,54864,54865,54866,54867,54868,54869,54870,54871,54872,54873,54874,54875,54876,54877,54878,54879,54880,54881,54882,54883,54884,54885,54886,54887,54888,54889,54890,54891,54892,54893,54894,54895,54896,54897,54898,54899,54900,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,54913,54914,54915,54916,54917,54918,54919,54920,54921,54922,54923,54924,54925,54926,54927,54928,54929,54930,54931,54932,54933,54934,54935,54936,54937,54938,54939,54940,54941,54942,54943,54944,54945,54946,54947,54948,54949,54950,54951,54952,54953,54954,54955,54956,54957,54958,54959,54960,54961,54962,54963,54964,54965,54966,54967,54968,54969,54970,54971,54972,54973,54974,54975,54976,54977,54978,54979,54980,54981,54982,54983,54984,54985,54986,54987,54988,54989,54990,54991,54992,54993,54994,54995,54996,54997,54998,54999,55000,55001,55002,55003,55004,55005,55006,55007,55008,55009,55010,55011,55012,55013,55014,55015,55016,55017,55018,55019,55020,55021,55022,55023,55024,55025,55026,55027,55028,55029,55030,55031,55032,55033,55034,55035,55036,55037,55038,55039,55040,55041,55042,55043,55044,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55057,55058,55059,55060,55061,55062,55063,55064,55065,55066,55067,55068,55069,55070,55071,55072,55073,55074,55075,55076,55077,55078,55079,55080,55081,55082,55083,55084,55085,55086,55087,55088,55089,55090,55091,55092,55093,55094,55095,55096,55097,55098,55099,55100,55101,55102,55103,55104,55105,55106,55107,55108,55109,55110,55111,55112,55113,55114,55115,55116,55117,55118,55119,55120,55121,55122,55123,55124,55125,55126,55127,55128,55129,55130,55131,55132,55133,55134,55135,55136,55137,55138,55139,55140,55141,55142,55143,55144,55145,55146,55147,55148,55149,55150,55151,55152,55153,55154,55155,55156,55157,55158,55159,55160,55161,55162,55163,55164,55165,55166,55167,55168,55169,55170,55171,55172,55173,55174,55175,55176,55177,55178,55179,55180,55181,55182,55183,55184,55185,55186,55187,55188,55189,55190,55191,55192,55193,55194,55195,55196,55197,55198,55199,55200,55201,55202,55203,55216,55217,55218,55219,55220,55221,55222,55223,55224,55225,55226,55227,55228,55229,55230,55231,55232,55233,55234,55235,55236,55237,55238,55243,55244,55245,55246,55247,55248,55249,55250,55251,55252,55253,55254,55255,55256,55257,55258,55259,55260,55261,55262,55263,55264,55265,55266,55267,55268,55269,55270,55271,55272,55273,55274,55275,55276,55277,55278,55279,55280,55281,55282,55283,55284,55285,55286,55287,55288,55289,55290,55291,63744,63745,63746,63747,63748,63749,63750,63751,63752,63753,63754,63755,63756,63757,63758,63759,63760,63761,63762,63763,63764,63765,63766,63767,63768,63769,63770,63771,63772,63773,63774,63775,63776,63777,63778,63779,63780,63781,63782,63783,63784,63785,63786,63787,63788,63789,63790,63791,63792,63793,63794,63795,63796,63797,63798,63799,63800,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,63812,63813,63814,63815,63816,63817,63818,63819,63820,63821,63822,63823,63824,63825,63826,63827,63828,63829,63830,63831,63832,63833,63834,63835,63836,63837,63838,63839,63840,63841,63842,63843,63844,63845,63846,63847,63848,63849,63850,63851,63852,63853,63854,63855,63856,63857,63858,63859,63860,63861,63862,63863,63864,63865,63866,63867,63868,63869,63870,63871,63872,63873,63874,63875,63876,63877,63878,63879,63880,63881,63882,63883,63884,63885,63886,63887,63888,63889,63890,63891,63892,63893,63894,63895,63896,63897,63898,63899,63900,63901,63902,63903,63904,63905,63906,63907,63908,63909,63910,63911,63912,63913,63914,63915,63916,63917,63918,63919,63920,63921,63922,63923,63924,63925,63926,63927,63928,63929,63930,63931,63932,63933,63934,63935,63936,63937,63938,63939,63940,63941,63942,63943,63944,63945,63946,63947,63948,63949,63950,63951,63952,63953,63954,63955,63956,63957,63958,63959,63960,63961,63962,63963,63964,63965,63966,63967,63968,63969,63970,63971,63972,63973,63974,63975,63976,63977,63978,63979,63980,63981,63982,63983,63984,63985,63986,63987,63988,63989,63990,63991,63992,63993,63994,63995,63996,63997,63998,63999,64000,64001,64002,64003,64004,64005,64006,64007,64008,64009,64010,64011,64012,64013,64014,64015,64016,64017,64018,64019,64020,64021,64022,64023,64024,64025,64026,64027,64028,64029,64030,64031,64032,64033,64034,64035,64036,64037,64038,64039,64040,64041,64042,64043,64044,64045,64046,64047,64048,64049,64050,64051,64052,64053,64054,64055,64056,64057,64058,64059,64060,64061,64062,64063,64064,64065,64066,64067,64068,64069,64070,64071,64072,64073,64074,64075,64076,64077,64078,64079,64080,64081,64082,64083,64084,64085,64086,64087,64088,64089,64090,64091,64092,64093,64094,64095,64096,64097,64098,64099,64100,64101,64102,64103,64104,64105,64106,64107,64108,64109,64112,64113,64114,64115,64116,64117,64118,64119,64120,64121,64122,64123,64124,64125,64126,64127,64128,64129,64130,64131,64132,64133,64134,64135,64136,64137,64138,64139,64140,64141,64142,64143,64144,64145,64146,64147,64148,64149,64150,64151,64152,64153,64154,64155,64156,64157,64158,64159,64160,64161,64162,64163,64164,64165,64166,64167,64168,64169,64170,64171,64172,64173,64174,64175,64176,64177,64178,64179,64180,64181,64182,64183,64184,64185,64186,64187,64188,64189,64190,64191,64192,64193,64194,64195,64196,64197,64198,64199,64200,64201,64202,64203,64204,64205,64206,64207,64208,64209,64210,64211,64212,64213,64214,64215,64216,64217,64256,64257,64258,64259,64260,64261,64262,64275,64276,64277,64278,64279,64285,64287,64288,64289,64290,64291,64292,64293,64294,64295,64296,64298,64299,64300,64301,64302,64303,64304,64305,64306,64307,64308,64309,64310,64312,64313,64314,64315,64316,64318,64320,64321,64323,64324,64326,64327,64328,64329,64330,64331,64332,64333,64334,64335,64336,64337,64338,64339,64340,64341,64342,64343,64344,64345,64346,64347,64348,64349,64350,64351,64352,64353,64354,64355,64356,64357,64358,64359,64360,64361,64362,64363,64364,64365,64366,64367,64368,64369,64370,64371,64372,64373,64374,64375,64376,64377,64378,64379,64380,64381,64382,64383,64384,64385,64386,64387,64388,64389,64390,64391,64392,64393,64394,64395,64396,64397,64398,64399,64400,64401,64402,64403,64404,64405,64406,64407,64408,64409,64410,64411,64412,64413,64414,64415,64416,64417,64418,64419,64420,64421,64422,64423,64424,64425,64426,64427,64428,64429,64430,64431,64432,64433,64467,64468,64469,64470,64471,64472,64473,64474,64475,64476,64477,64478,64479,64480,64481,64482,64483,64484,64485,64486,64487,64488,64489,64490,64491,64492,64493,64494,64495,64496,64497,64498,64499,64500,64501,64502,64503,64504,64505,64506,64507,64508,64509,64510,64511,64512,64513,64514,64515,64516,64517,64518,64519,64520,64521,64522,64523,64524,64525,64526,64527,64528,64529,64530,64531,64532,64533,64534,64535,64536,64537,64538,64539,64540,64541,64542,64543,64544,64545,64546,64547,64548,64549,64550,64551,64552,64553,64554,64555,64556,64557,64558,64559,64560,64561,64562,64563,64564,64565,64566,64567,64568,64569,64570,64571,64572,64573,64574,64575,64576,64577,64578,64579,64580,64581,64582,64583,64584,64585,64586,64587,64588,64589,64590,64591,64592,64593,64594,64595,64596,64597,64598,64599,64600,64601,64602,64603,64604,64605,64606,64607,64608,64609,64610,64611,64612,64613,64614,64615,64616,64617,64618,64619,64620,64621,64622,64623,64624,64625,64626,64627,64628,64629,64630,64631,64632,64633,64634,64635,64636,64637,64638,64639,64640,64641,64642,64643,64644,64645,64646,64647,64648,64649,64650,64651,64652,64653,64654,64655,64656,64657,64658,64659,64660,64661,64662,64663,64664,64665,64666,64667,64668,64669,64670,64671,64672,64673,64674,64675,64676,64677,64678,64679,64680,64681,64682,64683,64684,64685,64686,64687,64688,64689,64690,64691,64692,64693,64694,64695,64696,64697,64698,64699,64700,64701,64702,64703,64704,64705,64706,64707,64708,64709,64710,64711,64712,64713,64714,64715,64716,64717,64718,64719,64720,64721,64722,64723,64724,64725,64726,64727,64728,64729,64730,64731,64732,64733,64734,64735,64736,64737,64738,64739,64740,64741,64742,64743,64744,64745,64746,64747,64748,64749,64750,64751,64752,64753,64754,64755,64756,64757,64758,64759,64760,64761,64762,64763,64764,64765,64766,64767,64768,64769,64770,64771,64772,64773,64774,64775,64776,64777,64778,64779,64780,64781,64782,64783,64784,64785,64786,64787,64788,64789,64790,64791,64792,64793,64794,64795,64796,64797,64798,64799,64800,64801,64802,64803,64804,64805,64806,64807,64808,64809,64810,64811,64812,64813,64814,64815,64816,64817,64818,64819,64820,64821,64822,64823,64824,64825,64826,64827,64828,64829,64848,64849,64850,64851,64852,64853,64854,64855,64856,64857,64858,64859,64860,64861,64862,64863,64864,64865,64866,64867,64868,64869,64870,64871,64872,64873,64874,64875,64876,64877,64878,64879,64880,64881,64882,64883,64884,64885,64886,64887,64888,64889,64890,64891,64892,64893,64894,64895,64896,64897,64898,64899,64900,64901,64902,64903,64904,64905,64906,64907,64908,64909,64910,64911,64914,64915,64916,64917,64918,64919,64920,64921,64922,64923,64924,64925,64926,64927,64928,64929,64930,64931,64932,64933,64934,64935,64936,64937,64938,64939,64940,64941,64942,64943,64944,64945,64946,64947,64948,64949,64950,64951,64952,64953,64954,64955,64956,64957,64958,64959,64960,64961,64962,64963,64964,64965,64966,64967,65008,65009,65010,65011,65012,65013,65014,65015,65016,65017,65018,65019,65136,65137,65138,65139,65140,65142,65143,65144,65145,65146,65147,65148,65149,65150,65151,65152,65153,65154,65155,65156,65157,65158,65159,65160,65161,65162,65163,65164,65165,65166,65167,65168,65169,65170,65171,65172,65173,65174,65175,65176,65177,65178,65179,65180,65181,65182,65183,65184,65185,65186,65187,65188,65189,65190,65191,65192,65193,65194,65195,65196,65197,65198,65199,65200,65201,65202,65203,65204,65205,65206,65207,65208,65209,65210,65211,65212,65213,65214,65215,65216,65217,65218,65219,65220,65221,65222,65223,65224,65225,65226,65227,65228,65229,65230,65231,65232,65233,65234,65235,65236,65237,65238,65239,65240,65241,65242,65243,65244,65245,65246,65247,65248,65249,65250,65251,65252,65253,65254,65255,65256,65257,65258,65259,65260,65261,65262,65263,65264,65265,65266,65267,65268,65269,65270,65271,65272,65273,65274,65275,65276,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65382,65383,65384,65385,65386,65387,65388,65389,65390,65391,65392,65393,65394,65395,65396,65397,65398,65399,65400,65401,65402,65403,65404,65405,65406,65407,65408,65409,65410,65411,65412,65413,65414,65415,65416,65417,65418,65419,65420,65421,65422,65423,65424,65425,65426,65427,65428,65429,65430,65431,65432,65433,65434,65435,65436,65437,65438,65439,65440,65441,65442,65443,65444,65445,65446,65447,65448,65449,65450,65451,65452,65453,65454,65455,65456,65457,65458,65459,65460,65461,65462,65463,65464,65465,65466,65467,65468,65469,65470,65474,65475,65476,65477,65478,65479,65482,65483,65484,65485,65486,65487,65490,65491,65492,65493,65494,65495,65498,65499,65500';\nvar arr = str.split(',').map(function(code) {\n  return parseInt(code, 10);\n});\nmodule.exports = arr;\n},{}],\"/../../../jshint/node_modules/console-browserify/index.js\":[function(_dereq_,module,exports){\n(function (global){\nvar util = _dereq_(\"util\")\nvar assert = _dereq_(\"assert\")\nvar now = _dereq_(\"date-now\")\n\nvar slice = Array.prototype.slice\nvar console\nvar times = {}\n\nif (typeof global !== \"undefined\" && global.console) {\n    console = global.console\n} else if (typeof window !== \"undefined\" && window.console) {\n    console = window.console\n} else {\n    console = {}\n}\n\nvar functions = [\n    [log, \"log\"],\n    [info, \"info\"],\n    [warn, \"warn\"],\n    [error, \"error\"],\n    [time, \"time\"],\n    [timeEnd, \"timeEnd\"],\n    [trace, \"trace\"],\n    [dir, \"dir\"],\n    [consoleAssert, \"assert\"]\n]\n\nfor (var i = 0; i < functions.length; i++) {\n    var tuple = functions[i]\n    var f = tuple[0]\n    var name = tuple[1]\n\n    if (!console[name]) {\n        console[name] = f\n    }\n}\n\nmodule.exports = console\n\nfunction log() {}\n\nfunction info() {\n    console.log.apply(console, arguments)\n}\n\nfunction warn() {\n    console.log.apply(console, arguments)\n}\n\nfunction error() {\n    console.warn.apply(console, arguments)\n}\n\nfunction time(label) {\n    times[label] = now()\n}\n\nfunction timeEnd(label) {\n    var time = times[label]\n    if (!time) {\n        throw new Error(\"No such label: \" + label)\n    }\n\n    var duration = now() - time\n    console.log(label + \": \" + duration + \"ms\")\n}\n\nfunction trace() {\n    var err = new Error()\n    err.name = \"Trace\"\n    err.message = util.format.apply(null, arguments)\n    console.error(err.stack)\n}\n\nfunction dir(object) {\n    console.log(util.inspect(object) + \"\\n\")\n}\n\nfunction consoleAssert(expression) {\n    if (!expression) {\n        var arr = slice.call(arguments, 1)\n        assert.ok(false, util.format.apply(null, arr))\n    }\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"assert\":\"/node_modules/assert/assert.js\",\"date-now\":\"/../../../jshint/node_modules/date-now/index.js\",\"util\":\"/node_modules/util/util.js\"}],\"/../../../jshint/node_modules/date-now/index.js\":[function(_dereq_,module,exports){\nmodule.exports = now\n\nfunction now() {\n    return new Date().getTime()\n}\n\n},{}],\"/../../../jshint/node_modules/lodash.clone/index.js\":[function(_dereq_,module,exports){\n(function (global){\nvar LARGE_ARRAY_SIZE = 200;\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\nvar MAX_SAFE_INTEGER = 9007199254740991;\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\nvar reFlags = /\\w*$/;\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\nvar root = freeGlobal || freeSelf || Function('return this')();\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\nvar moduleExports = freeModule && freeModule.exports === freeExports;\nfunction addMapEntry(map, pair) {\n  map.set(pair[0], pair[1]);\n  return map;\n}\nfunction addSetEntry(set, value) {\n  set.add(value);\n  return set;\n}\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\nfunction isHostObject(value) {\n  var result = false;\n  if (value != null && typeof value.toString != 'function') {\n    try {\n      result = !!(value + '');\n    } catch (e) {}\n  }\n  return result;\n}\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\nvar coreJsData = root['__core-js_shared__'];\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\nvar funcToString = funcProto.toString;\nvar hasOwnProperty = objectProto.hasOwnProperty;\nvar objectToString = objectProto.toString;\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    Symbol = root.Symbol,\n    Uint8Array = root.Uint8Array,\n    getPrototype = overArg(Object.getPrototypeOf, Object),\n    objectCreate = Object.create,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice;\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n    nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n    nativeKeys = overArg(Object.keys, Object);\nvar DataView = getNative(root, 'DataView'),\n    Map = getNative(root, 'Map'),\n    Promise = getNative(root, 'Promise'),\n    Set = getNative(root, 'Set'),\n    WeakMap = getNative(root, 'WeakMap'),\n    nativeCreate = getNative(Object, 'create');\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\nfunction Hash(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\nfunction hashDelete(key) {\n  return this.has(key) && delete this.__data__[key];\n}\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\nfunction listCacheClear() {\n  this.__data__ = [];\n}\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  return true;\n}\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\nfunction mapCacheClear() {\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\nfunction mapCacheDelete(key) {\n  return getMapData(this, key)['delete'](key);\n}\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\nfunction mapCacheSet(key, value) {\n  getMapData(this, key).set(key, value);\n  return this;\n}\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\nfunction Stack(entries) {\n  this.__data__ = new ListCache(entries);\n}\nfunction stackClear() {\n  this.__data__ = new ListCache;\n}\nfunction stackDelete(key) {\n  return this.__data__['delete'](key);\n}\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\nfunction stackSet(key, value) {\n  var cache = this.__data__;\n  if (cache instanceof ListCache) {\n    var pairs = cache.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      return this;\n    }\n    cache = this.__data__ = new MapCache(pairs);\n  }\n  cache.set(key, value);\n  return this;\n}\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\nfunction arrayLikeKeys(value, inherited) {\n  var result = (isArray(value) || isArguments(value))\n    ? baseTimes(value.length, String)\n    : [];\n\n  var length = result.length,\n      skipIndexes = !!length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    object[key] = value;\n  }\n}\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n  var result;\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      if (isHostObject(value)) {\n        return object ? value : {};\n      }\n      result = initCloneObject(isFunc ? {} : value);\n      if (!isDeep) {\n        return copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, baseClone, isDeep);\n    }\n  }\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (!isArr) {\n    var props = isFull ? getAllKeys(value) : keys(value);\n  }\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n  });\n  return result;\n}\nfunction baseCreate(proto) {\n  return isObject(proto) ? objectCreate(proto) : {};\n}\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\nfunction baseGetTag(value) {\n  return objectToString.call(value);\n}\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var result = new buffer.constructor(buffer.length);\n  buffer.copy(result);\n  return result;\n}\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\nfunction cloneMap(map, isDeep, cloneFunc) {\n  var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n  return arrayReduce(array, addMapEntry, new map.constructor);\n}\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\nfunction cloneSet(set, isDeep, cloneFunc) {\n  var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n  return arrayReduce(array, addSetEntry, new set.constructor);\n}\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\nfunction copyObject(source, props, object, customizer) {\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    assignValue(object, key, newValue === undefined ? source[key] : newValue);\n  }\n  return object;\n}\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\nvar getTag = baseGetTag;\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = objectToString.call(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : undefined;\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = array.constructor(length);\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return cloneMap(object, isDeep, cloneFunc);\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return cloneSet(object, isDeep, cloneFunc);\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\nfunction clone(value) {\n  return baseClone(value, false, true);\n}\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\nfunction isArguments(value) {\n  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\nvar isArray = Array.isArray;\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\nvar isBuffer = nativeIsBuffer || stubFalse;\nfunction isFunction(value) {\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\nfunction stubArray() {\n  return [];\n}\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = clone;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],\"/../../../jshint/node_modules/lodash.slice/index.js\":[function(_dereq_,module,exports){\nvar INFINITY = 1 / 0,\n    MAX_SAFE_INTEGER = 9007199254740991,\n    MAX_INTEGER = 1.7976931348623157e+308,\n    NAN = 0 / 0;\nvar funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    symbolTag = '[object Symbol]';\nvar reTrim = /^\\s+|\\s+$/g;\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\nvar reIsBinary = /^0b[01]+$/i;\nvar reIsOctal = /^0o[0-7]+$/i;\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\nvar freeParseInt = parseInt;\nvar objectProto = Object.prototype;\nvar objectToString = objectProto.toString;\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\nfunction slice(array, start, end) {\n  var length = array ? array.length : 0;\n  if (!length) {\n    return [];\n  }\n  if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n    start = 0;\n    end = length;\n  }\n  else {\n    start = start == null ? 0 : toInteger(start);\n    end = end === undefined ? length : toInteger(end);\n  }\n  return baseSlice(array, start, end);\n}\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\nfunction isFunction(value) {\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = slice;\n\n},{}],\"/../../../jshint/node_modules/underscore/underscore-umd.js\":[function(_dereq_,module,exports){\n(function (global){\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define('underscore', factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {\n    var current = global._;\n    var exports = global._ = factory();\n    exports.noConflict = function () { global._ = current; return exports; };\n  }()));\n}(this, (function () {\n  var VERSION = '1.13.4';\n  var root = (typeof self == 'object' && self.self === self && self) ||\n            (typeof global == 'object' && global.global === global && global) ||\n            Function('return this')() ||\n            {};\n  var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n  var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n  var push = ArrayProto.push,\n      slice = ArrayProto.slice,\n      toString = ObjProto.toString,\n      hasOwnProperty = ObjProto.hasOwnProperty;\n  var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n      supportsDataView = typeof DataView !== 'undefined';\n  var nativeIsArray = Array.isArray,\n      nativeKeys = Object.keys,\n      nativeCreate = Object.create,\n      nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n  var _isNaN = isNaN,\n      _isFinite = isFinite;\n  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n    'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n  function restArguments(func, startIndex) {\n    startIndex = startIndex == null ? func.length - 1 : +startIndex;\n    return function() {\n      var length = Math.max(arguments.length - startIndex, 0),\n          rest = Array(length),\n          index = 0;\n      for (; index < length; index++) {\n        rest[index] = arguments[index + startIndex];\n      }\n      switch (startIndex) {\n        case 0: return func.call(this, rest);\n        case 1: return func.call(this, arguments[0], rest);\n        case 2: return func.call(this, arguments[0], arguments[1], rest);\n      }\n      var args = Array(startIndex + 1);\n      for (index = 0; index < startIndex; index++) {\n        args[index] = arguments[index];\n      }\n      args[startIndex] = rest;\n      return func.apply(this, args);\n    };\n  }\n  function isObject(obj) {\n    var type = typeof obj;\n    return type === 'function' || (type === 'object' && !!obj);\n  }\n  function isNull(obj) {\n    return obj === null;\n  }\n  function isUndefined(obj) {\n    return obj === void 0;\n  }\n  function isBoolean(obj) {\n    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n  }\n  function isElement(obj) {\n    return !!(obj && obj.nodeType === 1);\n  }\n  function tagTester(name) {\n    var tag = '[object ' + name + ']';\n    return function(obj) {\n      return toString.call(obj) === tag;\n    };\n  }\n\n  var isString = tagTester('String');\n\n  var isNumber = tagTester('Number');\n\n  var isDate = tagTester('Date');\n\n  var isRegExp = tagTester('RegExp');\n\n  var isError = tagTester('Error');\n\n  var isSymbol = tagTester('Symbol');\n\n  var isArrayBuffer = tagTester('ArrayBuffer');\n\n  var isFunction = tagTester('Function');\n  var nodelist = root.document && root.document.childNodes;\n  if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n    isFunction = function(obj) {\n      return typeof obj == 'function' || false;\n    };\n  }\n\n  var isFunction$1 = isFunction;\n\n  var hasObjectTag = tagTester('Object');\n  var hasStringTagBug = (\n        supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n      ),\n      isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n\n  var isDataView = tagTester('DataView');\n  function ie10IsDataView(obj) {\n    return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);\n  }\n\n  var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);\n  var isArray = nativeIsArray || tagTester('Array');\n  function has$1(obj, key) {\n    return obj != null && hasOwnProperty.call(obj, key);\n  }\n\n  var isArguments = tagTester('Arguments');\n  (function() {\n    if (!isArguments(arguments)) {\n      isArguments = function(obj) {\n        return has$1(obj, 'callee');\n      };\n    }\n  }());\n\n  var isArguments$1 = isArguments;\n  function isFinite$1(obj) {\n    return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n  }\n  function isNaN$1(obj) {\n    return isNumber(obj) && _isNaN(obj);\n  }\n  function constant(value) {\n    return function() {\n      return value;\n    };\n  }\n  function createSizePropertyCheck(getSizeProperty) {\n    return function(collection) {\n      var sizeProperty = getSizeProperty(collection);\n      return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n    }\n  }\n  function shallowProperty(key) {\n    return function(obj) {\n      return obj == null ? void 0 : obj[key];\n    };\n  }\n  var getByteLength = shallowProperty('byteLength');\n  var isBufferLike = createSizePropertyCheck(getByteLength);\n  var typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\n  function isTypedArray(obj) {\n    return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :\n                  isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n  }\n\n  var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);\n  var getLength = shallowProperty('length');\n  function emulatedSet(keys) {\n    var hash = {};\n    for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n    return {\n      contains: function(key) { return hash[key] === true; },\n      push: function(key) {\n        hash[key] = true;\n        return keys.push(key);\n      }\n    };\n  }\n  function collectNonEnumProps(obj, keys) {\n    keys = emulatedSet(keys);\n    var nonEnumIdx = nonEnumerableProps.length;\n    var constructor = obj.constructor;\n    var proto = (isFunction$1(constructor) && constructor.prototype) || ObjProto;\n    var prop = 'constructor';\n    if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n    while (nonEnumIdx--) {\n      prop = nonEnumerableProps[nonEnumIdx];\n      if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n        keys.push(prop);\n      }\n    }\n  }\n  function keys(obj) {\n    if (!isObject(obj)) return [];\n    if (nativeKeys) return nativeKeys(obj);\n    var keys = [];\n    for (var key in obj) if (has$1(obj, key)) keys.push(key);\n    if (hasEnumBug) collectNonEnumProps(obj, keys);\n    return keys;\n  }\n  function isEmpty(obj) {\n    if (obj == null) return true;\n    var length = getLength(obj);\n    if (typeof length == 'number' && (\n      isArray(obj) || isString(obj) || isArguments$1(obj)\n    )) return length === 0;\n    return getLength(keys(obj)) === 0;\n  }\n  function isMatch(object, attrs) {\n    var _keys = keys(attrs), length = _keys.length;\n    if (object == null) return !length;\n    var obj = Object(object);\n    for (var i = 0; i < length; i++) {\n      var key = _keys[i];\n      if (attrs[key] !== obj[key] || !(key in obj)) return false;\n    }\n    return true;\n  }\n  function _$1(obj) {\n    if (obj instanceof _$1) return obj;\n    if (!(this instanceof _$1)) return new _$1(obj);\n    this._wrapped = obj;\n  }\n\n  _$1.VERSION = VERSION;\n  _$1.prototype.value = function() {\n    return this._wrapped;\n  };\n  _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;\n\n  _$1.prototype.toString = function() {\n    return String(this._wrapped);\n  };\n  function toBufferView(bufferSource) {\n    return new Uint8Array(\n      bufferSource.buffer || bufferSource,\n      bufferSource.byteOffset || 0,\n      getByteLength(bufferSource)\n    );\n  }\n  var tagDataView = '[object DataView]';\n  function eq(a, b, aStack, bStack) {\n    if (a === b) return a !== 0 || 1 / a === 1 / b;\n    if (a == null || b == null) return false;\n    if (a !== a) return b !== b;\n    var type = typeof a;\n    if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n    return deepEq(a, b, aStack, bStack);\n  }\n  function deepEq(a, b, aStack, bStack) {\n    if (a instanceof _$1) a = a._wrapped;\n    if (b instanceof _$1) b = b._wrapped;\n    var className = toString.call(a);\n    if (className !== toString.call(b)) return false;\n    if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {\n      if (!isDataView$1(b)) return false;\n      className = tagDataView;\n    }\n    switch (className) {\n      case '[object RegExp]':\n      case '[object String]':\n        return '' + a === '' + b;\n      case '[object Number]':\n        if (+a !== +a) return +b !== +b;\n        return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n      case '[object Date]':\n      case '[object Boolean]':\n        return +a === +b;\n      case '[object Symbol]':\n        return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n      case '[object ArrayBuffer]':\n      case tagDataView:\n        return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n    }\n\n    var areArrays = className === '[object Array]';\n    if (!areArrays && isTypedArray$1(a)) {\n        var byteLength = getByteLength(a);\n        if (byteLength !== getByteLength(b)) return false;\n        if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n        areArrays = true;\n    }\n    if (!areArrays) {\n      if (typeof a != 'object' || typeof b != 'object') return false;\n      var aCtor = a.constructor, bCtor = b.constructor;\n      if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&\n                               isFunction$1(bCtor) && bCtor instanceof bCtor)\n                          && ('constructor' in a && 'constructor' in b)) {\n        return false;\n      }\n    }\n    aStack = aStack || [];\n    bStack = bStack || [];\n    var length = aStack.length;\n    while (length--) {\n      if (aStack[length] === a) return bStack[length] === b;\n    }\n    aStack.push(a);\n    bStack.push(b);\n    if (areArrays) {\n      length = a.length;\n      if (length !== b.length) return false;\n      while (length--) {\n        if (!eq(a[length], b[length], aStack, bStack)) return false;\n      }\n    } else {\n      var _keys = keys(a), key;\n      length = _keys.length;\n      if (keys(b).length !== length) return false;\n      while (length--) {\n        key = _keys[length];\n        if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n      }\n    }\n    aStack.pop();\n    bStack.pop();\n    return true;\n  }\n  function isEqual(a, b) {\n    return eq(a, b);\n  }\n  function allKeys(obj) {\n    if (!isObject(obj)) return [];\n    var keys = [];\n    for (var key in obj) keys.push(key);\n    if (hasEnumBug) collectNonEnumProps(obj, keys);\n    return keys;\n  }\n  function ie11fingerprint(methods) {\n    var length = getLength(methods);\n    return function(obj) {\n      if (obj == null) return false;\n      var keys = allKeys(obj);\n      if (getLength(keys)) return false;\n      for (var i = 0; i < length; i++) {\n        if (!isFunction$1(obj[methods[i]])) return false;\n      }\n      return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);\n    };\n  }\n  var forEachName = 'forEach',\n      hasName = 'has',\n      commonInit = ['clear', 'delete'],\n      mapTail = ['get', hasName, 'set'];\n  var mapMethods = commonInit.concat(forEachName, mapTail),\n      weakMapMethods = commonInit.concat(mapTail),\n      setMethods = ['add'].concat(commonInit, forEachName, hasName);\n\n  var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n\n  var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n\n  var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n\n  var isWeakSet = tagTester('WeakSet');\n  function values(obj) {\n    var _keys = keys(obj);\n    var length = _keys.length;\n    var values = Array(length);\n    for (var i = 0; i < length; i++) {\n      values[i] = obj[_keys[i]];\n    }\n    return values;\n  }\n  function pairs(obj) {\n    var _keys = keys(obj);\n    var length = _keys.length;\n    var pairs = Array(length);\n    for (var i = 0; i < length; i++) {\n      pairs[i] = [_keys[i], obj[_keys[i]]];\n    }\n    return pairs;\n  }\n  function invert(obj) {\n    var result = {};\n    var _keys = keys(obj);\n    for (var i = 0, length = _keys.length; i < length; i++) {\n      result[obj[_keys[i]]] = _keys[i];\n    }\n    return result;\n  }\n  function functions(obj) {\n    var names = [];\n    for (var key in obj) {\n      if (isFunction$1(obj[key])) names.push(key);\n    }\n    return names.sort();\n  }\n  function createAssigner(keysFunc, defaults) {\n    return function(obj) {\n      var length = arguments.length;\n      if (defaults) obj = Object(obj);\n      if (length < 2 || obj == null) return obj;\n      for (var index = 1; index < length; index++) {\n        var source = arguments[index],\n            keys = keysFunc(source),\n            l = keys.length;\n        for (var i = 0; i < l; i++) {\n          var key = keys[i];\n          if (!defaults || obj[key] === void 0) obj[key] = source[key];\n        }\n      }\n      return obj;\n    };\n  }\n  var extend = createAssigner(allKeys);\n  var extendOwn = createAssigner(keys);\n  var defaults = createAssigner(allKeys, true);\n  function ctor() {\n    return function(){};\n  }\n  function baseCreate(prototype) {\n    if (!isObject(prototype)) return {};\n    if (nativeCreate) return nativeCreate(prototype);\n    var Ctor = ctor();\n    Ctor.prototype = prototype;\n    var result = new Ctor;\n    Ctor.prototype = null;\n    return result;\n  }\n  function create(prototype, props) {\n    var result = baseCreate(prototype);\n    if (props) extendOwn(result, props);\n    return result;\n  }\n  function clone(obj) {\n    if (!isObject(obj)) return obj;\n    return isArray(obj) ? obj.slice() : extend({}, obj);\n  }\n  function tap(obj, interceptor) {\n    interceptor(obj);\n    return obj;\n  }\n  function toPath$1(path) {\n    return isArray(path) ? path : [path];\n  }\n  _$1.toPath = toPath$1;\n  function toPath(path) {\n    return _$1.toPath(path);\n  }\n  function deepGet(obj, path) {\n    var length = path.length;\n    for (var i = 0; i < length; i++) {\n      if (obj == null) return void 0;\n      obj = obj[path[i]];\n    }\n    return length ? obj : void 0;\n  }\n  function get(object, path, defaultValue) {\n    var value = deepGet(object, toPath(path));\n    return isUndefined(value) ? defaultValue : value;\n  }\n  function has(obj, path) {\n    path = toPath(path);\n    var length = path.length;\n    for (var i = 0; i < length; i++) {\n      var key = path[i];\n      if (!has$1(obj, key)) return false;\n      obj = obj[key];\n    }\n    return !!length;\n  }\n  function identity(value) {\n    return value;\n  }\n  function matcher(attrs) {\n    attrs = extendOwn({}, attrs);\n    return function(obj) {\n      return isMatch(obj, attrs);\n    };\n  }\n  function property(path) {\n    path = toPath(path);\n    return function(obj) {\n      return deepGet(obj, path);\n    };\n  }\n  function optimizeCb(func, context, argCount) {\n    if (context === void 0) return func;\n    switch (argCount == null ? 3 : argCount) {\n      case 1: return function(value) {\n        return func.call(context, value);\n      };\n      case 3: return function(value, index, collection) {\n        return func.call(context, value, index, collection);\n      };\n      case 4: return function(accumulator, value, index, collection) {\n        return func.call(context, accumulator, value, index, collection);\n      };\n    }\n    return function() {\n      return func.apply(context, arguments);\n    };\n  }\n  function baseIteratee(value, context, argCount) {\n    if (value == null) return identity;\n    if (isFunction$1(value)) return optimizeCb(value, context, argCount);\n    if (isObject(value) && !isArray(value)) return matcher(value);\n    return property(value);\n  }\n  function iteratee(value, context) {\n    return baseIteratee(value, context, Infinity);\n  }\n  _$1.iteratee = iteratee;\n  function cb(value, context, argCount) {\n    if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);\n    return baseIteratee(value, context, argCount);\n  }\n  function mapObject(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    var _keys = keys(obj),\n        length = _keys.length,\n        results = {};\n    for (var index = 0; index < length; index++) {\n      var currentKey = _keys[index];\n      results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n    }\n    return results;\n  }\n  function noop(){}\n  function propertyOf(obj) {\n    if (obj == null) return noop;\n    return function(path) {\n      return get(obj, path);\n    };\n  }\n  function times(n, iteratee, context) {\n    var accum = Array(Math.max(0, n));\n    iteratee = optimizeCb(iteratee, context, 1);\n    for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n    return accum;\n  }\n  function random(min, max) {\n    if (max == null) {\n      max = min;\n      min = 0;\n    }\n    return min + Math.floor(Math.random() * (max - min + 1));\n  }\n  var now = Date.now || function() {\n    return new Date().getTime();\n  };\n  function createEscaper(map) {\n    var escaper = function(match) {\n      return map[match];\n    };\n    var source = '(?:' + keys(map).join('|') + ')';\n    var testRegexp = RegExp(source);\n    var replaceRegexp = RegExp(source, 'g');\n    return function(string) {\n      string = string == null ? '' : '' + string;\n      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n    };\n  }\n  var escapeMap = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#x27;',\n    '`': '&#x60;'\n  };\n  var _escape = createEscaper(escapeMap);\n  var unescapeMap = invert(escapeMap);\n  var _unescape = createEscaper(unescapeMap);\n  var templateSettings = _$1.templateSettings = {\n    evaluate: /<%([\\s\\S]+?)%>/g,\n    interpolate: /<%=([\\s\\S]+?)%>/g,\n    escape: /<%-([\\s\\S]+?)%>/g\n  };\n  var noMatch = /(.)^/;\n  var escapes = {\n    \"'\": \"'\",\n    '\\\\': '\\\\',\n    '\\r': 'r',\n    '\\n': 'n',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n  function escapeChar(match) {\n    return '\\\\' + escapes[match];\n  }\n  var bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n  function template(text, settings, oldSettings) {\n    if (!settings && oldSettings) settings = oldSettings;\n    settings = defaults({}, settings, _$1.templateSettings);\n    var matcher = RegExp([\n      (settings.escape || noMatch).source,\n      (settings.interpolate || noMatch).source,\n      (settings.evaluate || noMatch).source\n    ].join('|') + '|$', 'g');\n    var index = 0;\n    var source = \"__p+='\";\n    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n      source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n      index = offset + match.length;\n\n      if (escape) {\n        source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n      } else if (interpolate) {\n        source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n      } else if (evaluate) {\n        source += \"';\\n\" + evaluate + \"\\n__p+='\";\n      }\n      return match;\n    });\n    source += \"';\\n\";\n\n    var argument = settings.variable;\n    if (argument) {\n      if (!bareIdentifier.test(argument)) throw new Error(\n        'variable is not a bare identifier: ' + argument\n      );\n    } else {\n      source = 'with(obj||{}){\\n' + source + '}\\n';\n      argument = 'obj';\n    }\n\n    source = \"var __t,__p='',__j=Array.prototype.join,\" +\n      \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n      source + 'return __p;\\n';\n\n    var render;\n    try {\n      render = new Function(argument, '_', source);\n    } catch (e) {\n      e.source = source;\n      throw e;\n    }\n\n    var template = function(data) {\n      return render.call(this, data, _$1);\n    };\n    template.source = 'function(' + argument + '){\\n' + source + '}';\n\n    return template;\n  }\n  function result(obj, path, fallback) {\n    path = toPath(path);\n    var length = path.length;\n    if (!length) {\n      return isFunction$1(fallback) ? fallback.call(obj) : fallback;\n    }\n    for (var i = 0; i < length; i++) {\n      var prop = obj == null ? void 0 : obj[path[i]];\n      if (prop === void 0) {\n        prop = fallback;\n        i = length; // Ensure we don't continue iterating.\n      }\n      obj = isFunction$1(prop) ? prop.call(obj) : prop;\n    }\n    return obj;\n  }\n  var idCounter = 0;\n  function uniqueId(prefix) {\n    var id = ++idCounter + '';\n    return prefix ? prefix + id : id;\n  }\n  function chain(obj) {\n    var instance = _$1(obj);\n    instance._chain = true;\n    return instance;\n  }\n  function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n    var self = baseCreate(sourceFunc.prototype);\n    var result = sourceFunc.apply(self, args);\n    if (isObject(result)) return result;\n    return self;\n  }\n  var partial = restArguments(function(func, boundArgs) {\n    var placeholder = partial.placeholder;\n    var bound = function() {\n      var position = 0, length = boundArgs.length;\n      var args = Array(length);\n      for (var i = 0; i < length; i++) {\n        args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n      }\n      while (position < arguments.length) args.push(arguments[position++]);\n      return executeBound(func, bound, this, this, args);\n    };\n    return bound;\n  });\n\n  partial.placeholder = _$1;\n  var bind = restArguments(function(func, context, args) {\n    if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');\n    var bound = restArguments(function(callArgs) {\n      return executeBound(func, bound, context, this, args.concat(callArgs));\n    });\n    return bound;\n  });\n  var isArrayLike = createSizePropertyCheck(getLength);\n  function flatten$1(input, depth, strict, output) {\n    output = output || [];\n    if (!depth && depth !== 0) {\n      depth = Infinity;\n    } else if (depth <= 0) {\n      return output.concat(input);\n    }\n    var idx = output.length;\n    for (var i = 0, length = getLength(input); i < length; i++) {\n      var value = input[i];\n      if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {\n        if (depth > 1) {\n          flatten$1(value, depth - 1, strict, output);\n          idx = output.length;\n        } else {\n          var j = 0, len = value.length;\n          while (j < len) output[idx++] = value[j++];\n        }\n      } else if (!strict) {\n        output[idx++] = value;\n      }\n    }\n    return output;\n  }\n  var bindAll = restArguments(function(obj, keys) {\n    keys = flatten$1(keys, false, false);\n    var index = keys.length;\n    if (index < 1) throw new Error('bindAll must be passed function names');\n    while (index--) {\n      var key = keys[index];\n      obj[key] = bind(obj[key], obj);\n    }\n    return obj;\n  });\n  function memoize(func, hasher) {\n    var memoize = function(key) {\n      var cache = memoize.cache;\n      var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n      if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);\n      return cache[address];\n    };\n    memoize.cache = {};\n    return memoize;\n  }\n  var delay = restArguments(function(func, wait, args) {\n    return setTimeout(function() {\n      return func.apply(null, args);\n    }, wait);\n  });\n  var defer = partial(delay, _$1, 1);\n  function throttle(func, wait, options) {\n    var timeout, context, args, result;\n    var previous = 0;\n    if (!options) options = {};\n\n    var later = function() {\n      previous = options.leading === false ? 0 : now();\n      timeout = null;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    };\n\n    var throttled = function() {\n      var _now = now();\n      if (!previous && options.leading === false) previous = _now;\n      var remaining = wait - (_now - previous);\n      context = this;\n      args = arguments;\n      if (remaining <= 0 || remaining > wait) {\n        if (timeout) {\n          clearTimeout(timeout);\n          timeout = null;\n        }\n        previous = _now;\n        result = func.apply(context, args);\n        if (!timeout) context = args = null;\n      } else if (!timeout && options.trailing !== false) {\n        timeout = setTimeout(later, remaining);\n      }\n      return result;\n    };\n\n    throttled.cancel = function() {\n      clearTimeout(timeout);\n      previous = 0;\n      timeout = context = args = null;\n    };\n\n    return throttled;\n  }\n  function debounce(func, wait, immediate) {\n    var timeout, previous, args, result, context;\n\n    var later = function() {\n      var passed = now() - previous;\n      if (wait > passed) {\n        timeout = setTimeout(later, wait - passed);\n      } else {\n        timeout = null;\n        if (!immediate) result = func.apply(context, args);\n        if (!timeout) args = context = null;\n      }\n    };\n\n    var debounced = restArguments(function(_args) {\n      context = this;\n      args = _args;\n      previous = now();\n      if (!timeout) {\n        timeout = setTimeout(later, wait);\n        if (immediate) result = func.apply(context, args);\n      }\n      return result;\n    });\n\n    debounced.cancel = function() {\n      clearTimeout(timeout);\n      timeout = args = context = null;\n    };\n\n    return debounced;\n  }\n  function wrap(func, wrapper) {\n    return partial(wrapper, func);\n  }\n  function negate(predicate) {\n    return function() {\n      return !predicate.apply(this, arguments);\n    };\n  }\n  function compose() {\n    var args = arguments;\n    var start = args.length - 1;\n    return function() {\n      var i = start;\n      var result = args[start].apply(this, arguments);\n      while (i--) result = args[i].call(this, result);\n      return result;\n    };\n  }\n  function after(times, func) {\n    return function() {\n      if (--times < 1) {\n        return func.apply(this, arguments);\n      }\n    };\n  }\n  function before(times, func) {\n    var memo;\n    return function() {\n      if (--times > 0) {\n        memo = func.apply(this, arguments);\n      }\n      if (times <= 1) func = null;\n      return memo;\n    };\n  }\n  var once = partial(before, 2);\n  function findKey(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var _keys = keys(obj), key;\n    for (var i = 0, length = _keys.length; i < length; i++) {\n      key = _keys[i];\n      if (predicate(obj[key], key, obj)) return key;\n    }\n  }\n  function createPredicateIndexFinder(dir) {\n    return function(array, predicate, context) {\n      predicate = cb(predicate, context);\n      var length = getLength(array);\n      var index = dir > 0 ? 0 : length - 1;\n      for (; index >= 0 && index < length; index += dir) {\n        if (predicate(array[index], index, array)) return index;\n      }\n      return -1;\n    };\n  }\n  var findIndex = createPredicateIndexFinder(1);\n  var findLastIndex = createPredicateIndexFinder(-1);\n  function sortedIndex(array, obj, iteratee, context) {\n    iteratee = cb(iteratee, context, 1);\n    var value = iteratee(obj);\n    var low = 0, high = getLength(array);\n    while (low < high) {\n      var mid = Math.floor((low + high) / 2);\n      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n    }\n    return low;\n  }\n  function createIndexFinder(dir, predicateFind, sortedIndex) {\n    return function(array, item, idx) {\n      var i = 0, length = getLength(array);\n      if (typeof idx == 'number') {\n        if (dir > 0) {\n          i = idx >= 0 ? idx : Math.max(idx + length, i);\n        } else {\n          length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n        }\n      } else if (sortedIndex && idx && length) {\n        idx = sortedIndex(array, item);\n        return array[idx] === item ? idx : -1;\n      }\n      if (item !== item) {\n        idx = predicateFind(slice.call(array, i, length), isNaN$1);\n        return idx >= 0 ? idx + i : -1;\n      }\n      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n        if (array[idx] === item) return idx;\n      }\n      return -1;\n    };\n  }\n  var indexOf = createIndexFinder(1, findIndex, sortedIndex);\n  var lastIndexOf = createIndexFinder(-1, findLastIndex);\n  function find(obj, predicate, context) {\n    var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n    var key = keyFinder(obj, predicate, context);\n    if (key !== void 0 && key !== -1) return obj[key];\n  }\n  function findWhere(obj, attrs) {\n    return find(obj, matcher(attrs));\n  }\n  function each(obj, iteratee, context) {\n    iteratee = optimizeCb(iteratee, context);\n    var i, length;\n    if (isArrayLike(obj)) {\n      for (i = 0, length = obj.length; i < length; i++) {\n        iteratee(obj[i], i, obj);\n      }\n    } else {\n      var _keys = keys(obj);\n      for (i = 0, length = _keys.length; i < length; i++) {\n        iteratee(obj[_keys[i]], _keys[i], obj);\n      }\n    }\n    return obj;\n  }\n  function map(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    var _keys = !isArrayLike(obj) && keys(obj),\n        length = (_keys || obj).length,\n        results = Array(length);\n    for (var index = 0; index < length; index++) {\n      var currentKey = _keys ? _keys[index] : index;\n      results[index] = iteratee(obj[currentKey], currentKey, obj);\n    }\n    return results;\n  }\n  function createReduce(dir) {\n    var reducer = function(obj, iteratee, memo, initial) {\n      var _keys = !isArrayLike(obj) && keys(obj),\n          length = (_keys || obj).length,\n          index = dir > 0 ? 0 : length - 1;\n      if (!initial) {\n        memo = obj[_keys ? _keys[index] : index];\n        index += dir;\n      }\n      for (; index >= 0 && index < length; index += dir) {\n        var currentKey = _keys ? _keys[index] : index;\n        memo = iteratee(memo, obj[currentKey], currentKey, obj);\n      }\n      return memo;\n    };\n\n    return function(obj, iteratee, memo, context) {\n      var initial = arguments.length >= 3;\n      return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n    };\n  }\n  var reduce = createReduce(1);\n  var reduceRight = createReduce(-1);\n  function filter(obj, predicate, context) {\n    var results = [];\n    predicate = cb(predicate, context);\n    each(obj, function(value, index, list) {\n      if (predicate(value, index, list)) results.push(value);\n    });\n    return results;\n  }\n  function reject(obj, predicate, context) {\n    return filter(obj, negate(cb(predicate)), context);\n  }\n  function every(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var _keys = !isArrayLike(obj) && keys(obj),\n        length = (_keys || obj).length;\n    for (var index = 0; index < length; index++) {\n      var currentKey = _keys ? _keys[index] : index;\n      if (!predicate(obj[currentKey], currentKey, obj)) return false;\n    }\n    return true;\n  }\n  function some(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var _keys = !isArrayLike(obj) && keys(obj),\n        length = (_keys || obj).length;\n    for (var index = 0; index < length; index++) {\n      var currentKey = _keys ? _keys[index] : index;\n      if (predicate(obj[currentKey], currentKey, obj)) return true;\n    }\n    return false;\n  }\n  function contains(obj, item, fromIndex, guard) {\n    if (!isArrayLike(obj)) obj = values(obj);\n    if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n    return indexOf(obj, item, fromIndex) >= 0;\n  }\n  var invoke = restArguments(function(obj, path, args) {\n    var contextPath, func;\n    if (isFunction$1(path)) {\n      func = path;\n    } else {\n      path = toPath(path);\n      contextPath = path.slice(0, -1);\n      path = path[path.length - 1];\n    }\n    return map(obj, function(context) {\n      var method = func;\n      if (!method) {\n        if (contextPath && contextPath.length) {\n          context = deepGet(context, contextPath);\n        }\n        if (context == null) return void 0;\n        method = context[path];\n      }\n      return method == null ? method : method.apply(context, args);\n    });\n  });\n  function pluck(obj, key) {\n    return map(obj, property(key));\n  }\n  function where(obj, attrs) {\n    return filter(obj, matcher(attrs));\n  }\n  function max(obj, iteratee, context) {\n    var result = -Infinity, lastComputed = -Infinity,\n        value, computed;\n    if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n      obj = isArrayLike(obj) ? obj : values(obj);\n      for (var i = 0, length = obj.length; i < length; i++) {\n        value = obj[i];\n        if (value != null && value > result) {\n          result = value;\n        }\n      }\n    } else {\n      iteratee = cb(iteratee, context);\n      each(obj, function(v, index, list) {\n        computed = iteratee(v, index, list);\n        if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n          result = v;\n          lastComputed = computed;\n        }\n      });\n    }\n    return result;\n  }\n  function min(obj, iteratee, context) {\n    var result = Infinity, lastComputed = Infinity,\n        value, computed;\n    if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n      obj = isArrayLike(obj) ? obj : values(obj);\n      for (var i = 0, length = obj.length; i < length; i++) {\n        value = obj[i];\n        if (value != null && value < result) {\n          result = value;\n        }\n      }\n    } else {\n      iteratee = cb(iteratee, context);\n      each(obj, function(v, index, list) {\n        computed = iteratee(v, index, list);\n        if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n          result = v;\n          lastComputed = computed;\n        }\n      });\n    }\n    return result;\n  }\n  var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n  function toArray(obj) {\n    if (!obj) return [];\n    if (isArray(obj)) return slice.call(obj);\n    if (isString(obj)) {\n      return obj.match(reStrSymbol);\n    }\n    if (isArrayLike(obj)) return map(obj, identity);\n    return values(obj);\n  }\n  function sample(obj, n, guard) {\n    if (n == null || guard) {\n      if (!isArrayLike(obj)) obj = values(obj);\n      return obj[random(obj.length - 1)];\n    }\n    var sample = toArray(obj);\n    var length = getLength(sample);\n    n = Math.max(Math.min(n, length), 0);\n    var last = length - 1;\n    for (var index = 0; index < n; index++) {\n      var rand = random(index, last);\n      var temp = sample[index];\n      sample[index] = sample[rand];\n      sample[rand] = temp;\n    }\n    return sample.slice(0, n);\n  }\n  function shuffle(obj) {\n    return sample(obj, Infinity);\n  }\n  function sortBy(obj, iteratee, context) {\n    var index = 0;\n    iteratee = cb(iteratee, context);\n    return pluck(map(obj, function(value, key, list) {\n      return {\n        value: value,\n        index: index++,\n        criteria: iteratee(value, key, list)\n      };\n    }).sort(function(left, right) {\n      var a = left.criteria;\n      var b = right.criteria;\n      if (a !== b) {\n        if (a > b || a === void 0) return 1;\n        if (a < b || b === void 0) return -1;\n      }\n      return left.index - right.index;\n    }), 'value');\n  }\n  function group(behavior, partition) {\n    return function(obj, iteratee, context) {\n      var result = partition ? [[], []] : {};\n      iteratee = cb(iteratee, context);\n      each(obj, function(value, index) {\n        var key = iteratee(value, index, obj);\n        behavior(result, value, key);\n      });\n      return result;\n    };\n  }\n  var groupBy = group(function(result, value, key) {\n    if (has$1(result, key)) result[key].push(value); else result[key] = [value];\n  });\n  var indexBy = group(function(result, value, key) {\n    result[key] = value;\n  });\n  var countBy = group(function(result, value, key) {\n    if (has$1(result, key)) result[key]++; else result[key] = 1;\n  });\n  var partition = group(function(result, value, pass) {\n    result[pass ? 0 : 1].push(value);\n  }, true);\n  function size(obj) {\n    if (obj == null) return 0;\n    return isArrayLike(obj) ? obj.length : keys(obj).length;\n  }\n  function keyInObj(value, key, obj) {\n    return key in obj;\n  }\n  var pick = restArguments(function(obj, keys) {\n    var result = {}, iteratee = keys[0];\n    if (obj == null) return result;\n    if (isFunction$1(iteratee)) {\n      if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n      keys = allKeys(obj);\n    } else {\n      iteratee = keyInObj;\n      keys = flatten$1(keys, false, false);\n      obj = Object(obj);\n    }\n    for (var i = 0, length = keys.length; i < length; i++) {\n      var key = keys[i];\n      var value = obj[key];\n      if (iteratee(value, key, obj)) result[key] = value;\n    }\n    return result;\n  });\n  var omit = restArguments(function(obj, keys) {\n    var iteratee = keys[0], context;\n    if (isFunction$1(iteratee)) {\n      iteratee = negate(iteratee);\n      if (keys.length > 1) context = keys[1];\n    } else {\n      keys = map(flatten$1(keys, false, false), String);\n      iteratee = function(value, key) {\n        return !contains(keys, key);\n      };\n    }\n    return pick(obj, iteratee, context);\n  });\n  function initial(array, n, guard) {\n    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n  }\n  function first(array, n, guard) {\n    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n    if (n == null || guard) return array[0];\n    return initial(array, array.length - n);\n  }\n  function rest(array, n, guard) {\n    return slice.call(array, n == null || guard ? 1 : n);\n  }\n  function last(array, n, guard) {\n    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n    if (n == null || guard) return array[array.length - 1];\n    return rest(array, Math.max(0, array.length - n));\n  }\n  function compact(array) {\n    return filter(array, Boolean);\n  }\n  function flatten(array, depth) {\n    return flatten$1(array, depth, false);\n  }\n  var difference = restArguments(function(array, rest) {\n    rest = flatten$1(rest, true, true);\n    return filter(array, function(value){\n      return !contains(rest, value);\n    });\n  });\n  var without = restArguments(function(array, otherArrays) {\n    return difference(array, otherArrays);\n  });\n  function uniq(array, isSorted, iteratee, context) {\n    if (!isBoolean(isSorted)) {\n      context = iteratee;\n      iteratee = isSorted;\n      isSorted = false;\n    }\n    if (iteratee != null) iteratee = cb(iteratee, context);\n    var result = [];\n    var seen = [];\n    for (var i = 0, length = getLength(array); i < length; i++) {\n      var value = array[i],\n          computed = iteratee ? iteratee(value, i, array) : value;\n      if (isSorted && !iteratee) {\n        if (!i || seen !== computed) result.push(value);\n        seen = computed;\n      } else if (iteratee) {\n        if (!contains(seen, computed)) {\n          seen.push(computed);\n          result.push(value);\n        }\n      } else if (!contains(result, value)) {\n        result.push(value);\n      }\n    }\n    return result;\n  }\n  var union = restArguments(function(arrays) {\n    return uniq(flatten$1(arrays, true, true));\n  });\n  function intersection(array) {\n    var result = [];\n    var argsLength = arguments.length;\n    for (var i = 0, length = getLength(array); i < length; i++) {\n      var item = array[i];\n      if (contains(result, item)) continue;\n      var j;\n      for (j = 1; j < argsLength; j++) {\n        if (!contains(arguments[j], item)) break;\n      }\n      if (j === argsLength) result.push(item);\n    }\n    return result;\n  }\n  function unzip(array) {\n    var length = (array && max(array, getLength).length) || 0;\n    var result = Array(length);\n\n    for (var index = 0; index < length; index++) {\n      result[index] = pluck(array, index);\n    }\n    return result;\n  }\n  var zip = restArguments(unzip);\n  function object(list, values) {\n    var result = {};\n    for (var i = 0, length = getLength(list); i < length; i++) {\n      if (values) {\n        result[list[i]] = values[i];\n      } else {\n        result[list[i][0]] = list[i][1];\n      }\n    }\n    return result;\n  }\n  function range(start, stop, step) {\n    if (stop == null) {\n      stop = start || 0;\n      start = 0;\n    }\n    if (!step) {\n      step = stop < start ? -1 : 1;\n    }\n\n    var length = Math.max(Math.ceil((stop - start) / step), 0);\n    var range = Array(length);\n\n    for (var idx = 0; idx < length; idx++, start += step) {\n      range[idx] = start;\n    }\n\n    return range;\n  }\n  function chunk(array, count) {\n    if (count == null || count < 1) return [];\n    var result = [];\n    var i = 0, length = array.length;\n    while (i < length) {\n      result.push(slice.call(array, i, i += count));\n    }\n    return result;\n  }\n  function chainResult(instance, obj) {\n    return instance._chain ? _$1(obj).chain() : obj;\n  }\n  function mixin(obj) {\n    each(functions(obj), function(name) {\n      var func = _$1[name] = obj[name];\n      _$1.prototype[name] = function() {\n        var args = [this._wrapped];\n        push.apply(args, arguments);\n        return chainResult(this, func.apply(_$1, args));\n      };\n    });\n    return _$1;\n  }\n  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n    var method = ArrayProto[name];\n    _$1.prototype[name] = function() {\n      var obj = this._wrapped;\n      if (obj != null) {\n        method.apply(obj, arguments);\n        if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n          delete obj[0];\n        }\n      }\n      return chainResult(this, obj);\n    };\n  });\n  each(['concat', 'join', 'slice'], function(name) {\n    var method = ArrayProto[name];\n    _$1.prototype[name] = function() {\n      var obj = this._wrapped;\n      if (obj != null) obj = method.apply(obj, arguments);\n      return chainResult(this, obj);\n    };\n  });\n\n  var allExports = {\n    __proto__: null,\n    VERSION: VERSION,\n    restArguments: restArguments,\n    isObject: isObject,\n    isNull: isNull,\n    isUndefined: isUndefined,\n    isBoolean: isBoolean,\n    isElement: isElement,\n    isString: isString,\n    isNumber: isNumber,\n    isDate: isDate,\n    isRegExp: isRegExp,\n    isError: isError,\n    isSymbol: isSymbol,\n    isArrayBuffer: isArrayBuffer,\n    isDataView: isDataView$1,\n    isArray: isArray,\n    isFunction: isFunction$1,\n    isArguments: isArguments$1,\n    isFinite: isFinite$1,\n    isNaN: isNaN$1,\n    isTypedArray: isTypedArray$1,\n    isEmpty: isEmpty,\n    isMatch: isMatch,\n    isEqual: isEqual,\n    isMap: isMap,\n    isWeakMap: isWeakMap,\n    isSet: isSet,\n    isWeakSet: isWeakSet,\n    keys: keys,\n    allKeys: allKeys,\n    values: values,\n    pairs: pairs,\n    invert: invert,\n    functions: functions,\n    methods: functions,\n    extend: extend,\n    extendOwn: extendOwn,\n    assign: extendOwn,\n    defaults: defaults,\n    create: create,\n    clone: clone,\n    tap: tap,\n    get: get,\n    has: has,\n    mapObject: mapObject,\n    identity: identity,\n    constant: constant,\n    noop: noop,\n    toPath: toPath$1,\n    property: property,\n    propertyOf: propertyOf,\n    matcher: matcher,\n    matches: matcher,\n    times: times,\n    random: random,\n    now: now,\n    escape: _escape,\n    unescape: _unescape,\n    templateSettings: templateSettings,\n    template: template,\n    result: result,\n    uniqueId: uniqueId,\n    chain: chain,\n    iteratee: iteratee,\n    partial: partial,\n    bind: bind,\n    bindAll: bindAll,\n    memoize: memoize,\n    delay: delay,\n    defer: defer,\n    throttle: throttle,\n    debounce: debounce,\n    wrap: wrap,\n    negate: negate,\n    compose: compose,\n    after: after,\n    before: before,\n    once: once,\n    findKey: findKey,\n    findIndex: findIndex,\n    findLastIndex: findLastIndex,\n    sortedIndex: sortedIndex,\n    indexOf: indexOf,\n    lastIndexOf: lastIndexOf,\n    find: find,\n    detect: find,\n    findWhere: findWhere,\n    each: each,\n    forEach: each,\n    map: map,\n    collect: map,\n    reduce: reduce,\n    foldl: reduce,\n    inject: reduce,\n    reduceRight: reduceRight,\n    foldr: reduceRight,\n    filter: filter,\n    select: filter,\n    reject: reject,\n    every: every,\n    all: every,\n    some: some,\n    any: some,\n    contains: contains,\n    includes: contains,\n    include: contains,\n    invoke: invoke,\n    pluck: pluck,\n    where: where,\n    max: max,\n    min: min,\n    shuffle: shuffle,\n    sample: sample,\n    sortBy: sortBy,\n    groupBy: groupBy,\n    indexBy: indexBy,\n    countBy: countBy,\n    partition: partition,\n    toArray: toArray,\n    size: size,\n    pick: pick,\n    omit: omit,\n    first: first,\n    head: first,\n    take: first,\n    initial: initial,\n    last: last,\n    rest: rest,\n    tail: rest,\n    drop: rest,\n    compact: compact,\n    flatten: flatten,\n    without: without,\n    uniq: uniq,\n    unique: uniq,\n    union: union,\n    intersection: intersection,\n    difference: difference,\n    unzip: unzip,\n    transpose: unzip,\n    zip: zip,\n    object: object,\n    range: range,\n    chunk: chunk,\n    mixin: mixin,\n    'default': _$1\n  };\n  var _ = mixin(allExports);\n  _._ = _;\n\n  return _;\n\n})));\n\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],\"/../../../jshint/src/jshint.js\":[function(_dereq_,module,exports){\n\nvar _            = _dereq_(\"underscore\");\n_.clone          = _dereq_(\"lodash.clone\");\nvar events       = _dereq_(\"events\");\nvar vars         = _dereq_(\"./vars.js\");\nvar messages     = _dereq_(\"./messages.js\");\nvar Lexer        = _dereq_(\"./lex.js\").Lexer;\nvar reg          = _dereq_(\"./reg.js\");\nvar state        = _dereq_(\"./state.js\").state;\nvar style        = _dereq_(\"./style.js\");\nvar options      = _dereq_(\"./options.js\");\nvar scopeManager = _dereq_(\"./scope-manager.js\");\nvar prodParams   = _dereq_(\"./prod-params.js\");\nvar console = _dereq_(\"console-browserify\");\n\nvar JSHINT = (function() {\n  \"use strict\";\n\n  var api, // Extension API\n    bang = {\n      \"<\"  : true,\n      \"<=\" : true,\n      \"==\" : true,\n      \"===\": true,\n      \"!==\": true,\n      \"!=\" : true,\n      \">\"  : true,\n      \">=\" : true,\n      \"+\"  : true,\n      \"-\"  : true,\n      \"*\"  : true,\n      \"/\"  : true,\n      \"%\"  : true\n    },\n\n    declared, // Globals that were declared using /*global ... */ syntax.\n\n    functions, // All of the functions\n\n    inblock,\n    indent,\n    lookahead,\n    lex,\n    member,\n    membersOnly,\n    predefined,    // Global variables defined by option\n\n    extraModules = [],\n    emitter = new events.EventEmitter();\n\n  function checkOption(name, isStable, t) {\n    var type, validNames;\n\n    if (isStable) {\n      type = \"\";\n      validNames = options.validNames;\n    } else {\n      type = \"unstable \";\n      validNames = options.unstableNames;\n    }\n\n    name = name.trim();\n\n    if (/^[+-]W\\d{3}$/g.test(name)) {\n      return true;\n    }\n\n    if (validNames.indexOf(name) === -1) {\n      if (t.type !== \"jslint\" && !_.has(options.removed, name)) {\n        error(\"E001\", t, type, name);\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  function isString(obj) {\n    return Object.prototype.toString.call(obj) === \"[object String]\";\n  }\n\n  function isIdentifier(tkn, value) {\n    if (!tkn)\n      return false;\n\n    if (!tkn.identifier || tkn.value !== value)\n      return false;\n\n    return true;\n  }\n  function isReserved(context, token) {\n    if (!token.reserved) {\n      return false;\n    }\n    var meta = token.meta;\n\n    if (meta && meta.isFutureReservedWord) {\n      if (state.inES5()) {\n        if (!meta.es5) {\n          return false;\n        }\n\n        if (token.isProperty) {\n          return false;\n        }\n      }\n    } else if (meta && meta.es5 && !state.inES5()) {\n      return false;\n    }\n    if (meta && meta.strictOnly && state.inES5()) {\n      if (!state.option.strict && !state.isStrict()) {\n        return false;\n      }\n    }\n\n    if (token.id === \"await\" && (!(context & prodParams.async) && !state.option.module)) {\n      return false;\n    }\n\n    if (token.id === \"yield\" && (!(context & prodParams.yield))) {\n      return state.isStrict();\n    }\n\n    return true;\n  }\n\n  function supplant(str, data) {\n    return str.replace(/\\{([^{}]*)\\}/g, function(a, b) {\n      var r = data[b];\n      return typeof r === \"string\" || typeof r === \"number\" ? r : a;\n    });\n  }\n\n  function combine(dest, src) {\n    Object.keys(src).forEach(function(name) {\n      if (_.has(JSHINT.blacklist, name)) return;\n      dest[name] = src[name];\n    });\n  }\n\n  function processenforceall() {\n    if (state.option.enforceall) {\n      for (var enforceopt in options.bool.enforcing) {\n        if (state.option[enforceopt] === undefined &&\n            !options.noenforceall[enforceopt]) {\n          state.option[enforceopt] = true;\n        }\n      }\n      for (var relaxopt in options.bool.relaxing) {\n        if (state.option[relaxopt] === undefined) {\n          state.option[relaxopt] = false;\n        }\n      }\n    }\n  }\n  function applyOptions() {\n    var badESOpt = null;\n    processenforceall();\n    badESOpt = state.inferEsVersion();\n    if (badESOpt) {\n      quit(\"E059\", state.tokens.next, \"esversion\", badESOpt);\n    }\n\n    if (state.inES5()) {\n      combine(predefined, vars.ecmaIdentifiers[5]);\n    }\n\n    if (state.inES6()) {\n      combine(predefined, vars.ecmaIdentifiers[6]);\n    }\n\n    if (state.inES8()) {\n      combine(predefined, vars.ecmaIdentifiers[8]);\n    }\n\n    if (state.inES11()) {\n      combine(predefined, vars.ecmaIdentifiers[11]);\n    }\n    if (state.option.strict === \"global\" && \"globalstrict\" in state.option) {\n      quit(\"E059\", state.tokens.next, \"strict\", \"globalstrict\");\n    }\n\n    if (state.option.module) {\n      if (!state.inES6()) {\n        warning(\"W134\", state.tokens.next, \"module\", 6);\n      }\n    }\n\n    if (state.option.regexpu) {\n      if (!state.inES6()) {\n        warning(\"W134\", state.tokens.next, \"regexpu\", 6);\n      }\n    }\n\n    if (state.option.couch) {\n      combine(predefined, vars.couch);\n    }\n\n    if (state.option.qunit) {\n      combine(predefined, vars.qunit);\n    }\n\n    if (state.option.rhino) {\n      combine(predefined, vars.rhino);\n    }\n\n    if (state.option.shelljs) {\n      combine(predefined, vars.shelljs);\n      combine(predefined, vars.node);\n    }\n    if (state.option.typed) {\n      combine(predefined, vars.typed);\n    }\n\n    if (state.option.phantom) {\n      combine(predefined, vars.phantom);\n    }\n\n    if (state.option.prototypejs) {\n      combine(predefined, vars.prototypejs);\n    }\n\n    if (state.option.node) {\n      combine(predefined, vars.node);\n      combine(predefined, vars.typed);\n    }\n\n    if (state.option.devel) {\n      combine(predefined, vars.devel);\n    }\n\n    if (state.option.dojo) {\n      combine(predefined, vars.dojo);\n    }\n\n    if (state.option.browser) {\n      combine(predefined, vars.browser);\n      combine(predefined, vars.typed);\n    }\n\n    if (state.option.browserify) {\n      combine(predefined, vars.browser);\n      combine(predefined, vars.typed);\n      combine(predefined, vars.browserify);\n    }\n\n    if (state.option.nonstandard) {\n      combine(predefined, vars.nonstandard);\n    }\n\n    if (state.option.jasmine) {\n      combine(predefined, vars.jasmine);\n    }\n\n    if (state.option.jquery) {\n      combine(predefined, vars.jquery);\n    }\n\n    if (state.option.mootools) {\n      combine(predefined, vars.mootools);\n    }\n\n    if (state.option.worker) {\n      combine(predefined, vars.worker);\n    }\n\n    if (state.option.wsh) {\n      combine(predefined, vars.wsh);\n    }\n\n    if (state.option.yui) {\n      combine(predefined, vars.yui);\n    }\n\n    if (state.option.mocha) {\n      combine(predefined, vars.mocha);\n    }\n  }\n  function quit(code, token, a, b) {\n    var percentage = Math.floor((token.line / state.lines.length) * 100);\n    var message = messages.errors[code].desc;\n\n    var exception = {\n      name: \"JSHintError\",\n      line: token.line,\n      character: token.from,\n      message: message + \" (\" + percentage + \"% scanned).\",\n      raw: message,\n      code: code,\n      a: a,\n      b: b\n    };\n\n    exception.reason = supplant(message, exception) + \" (\" + percentage +\n      \"% scanned).\";\n\n    throw exception;\n  }\n\n  function removeIgnoredMessages() {\n    var ignored = state.ignoredLines;\n\n    if (_.isEmpty(ignored)) return;\n    JSHINT.errors = _.reject(JSHINT.errors, function(err) { return ignored[err.line] });\n  }\n\n  function warning(code, t, a, b, c, d) {\n    var ch, l, w, msg;\n\n    if (/^W\\d{3}$/.test(code)) {\n      if (state.ignored[code])\n        return;\n\n      msg = messages.warnings[code];\n    } else if (/E\\d{3}/.test(code)) {\n      msg = messages.errors[code];\n    } else if (/I\\d{3}/.test(code)) {\n      msg = messages.info[code];\n    }\n\n    t = t || state.tokens.next || {};\n    if (t.id === \"(end)\") {  // `~\n      t = state.tokens.curr;\n    }\n\n    l = t.line;\n    ch = t.from;\n\n    w = {\n      id: \"(error)\",\n      raw: msg.desc,\n      code: msg.code,\n      evidence: state.lines[l - 1] || \"\",\n      line: l,\n      character: ch,\n      scope: JSHINT.scope,\n      a: a,\n      b: b,\n      c: c,\n      d: d\n    };\n\n    w.reason = supplant(msg.desc, w);\n    JSHINT.errors.push(w);\n\n    removeIgnoredMessages();\n\n    var errors = JSHINT.errors.filter(function(e) { return /E\\d{3}/.test(e.code); });\n    if (errors.length >= state.option.maxerr) {\n      quit(\"E043\", t);\n    }\n    return w;\n  }\n\n  function warningAt(m, l, ch, a, b, c, d) {\n    return warning(m, {\n      line: l,\n      from: ch\n    }, a, b, c, d);\n  }\n\n  function error(m, t, a, b, c, d) {\n    warning(m, t, a, b, c, d);\n  }\n\n  function errorAt(m, l, ch, a, b, c, d) {\n    return error(m, {\n      line: l,\n      from: ch\n    }, a, b, c, d);\n  }\n  function addEvalCode(elem, token) {\n    JSHINT.internals.push({\n      id: \"(internal)\",\n      elem: elem,\n      token: token,\n      code: token.value.replace(/([^\\\\])(\\\\*)\\2\\\\n/g, \"$1\\n\")\n    });\n  }\n  function lintingDirective(directiveToken, previous) {\n    var body = directiveToken.body.split(\",\")\n      .map(function(s) { return s.trim(); });\n    var predef = {};\n\n    if (directiveToken.type === \"falls through\") {\n      previous.caseFallsThrough = true;\n      return;\n    }\n\n    if (directiveToken.type === \"globals\") {\n      body.forEach(function(item, idx) {\n        var parts = item.split(\":\");\n        var key = parts[0].trim();\n\n        if (key === \"-\" || !key.length) {\n          if (idx > 0 && idx === body.length - 1) {\n            return;\n          }\n          error(\"E002\", directiveToken);\n          return;\n        }\n\n        if (key.charAt(0) === \"-\") {\n          key = key.slice(1);\n\n          JSHINT.blacklist[key] = key;\n          delete predefined[key];\n        } else {\n          predef[key] = parts.length > 1 && parts[1].trim() === \"true\";\n        }\n      });\n\n      combine(predefined, predef);\n\n      for (var key in predef) {\n        if (_.has(predef, key)) {\n          declared[key] = directiveToken;\n        }\n      }\n    }\n\n    if (directiveToken.type === \"exported\") {\n      body.forEach(function(e, idx) {\n        if (!e.length) {\n          if (idx > 0 && idx === body.length - 1) {\n            return;\n          }\n          error(\"E002\", directiveToken);\n          return;\n        }\n\n        state.funct[\"(scope)\"].addExported(e);\n      });\n    }\n\n    if (directiveToken.type === \"members\") {\n      membersOnly = membersOnly || {};\n\n      body.forEach(function(m) {\n        var ch1 = m.charAt(0);\n        var ch2 = m.charAt(m.length - 1);\n\n        if (ch1 === ch2 && (ch1 === \"\\\"\" || ch1 === \"'\")) {\n          m = m\n            .substr(1, m.length - 2)\n            .replace(\"\\\\\\\"\", \"\\\"\");\n        }\n\n        membersOnly[m] = false;\n      });\n    }\n\n    var numvals = [\n      \"maxstatements\",\n      \"maxparams\",\n      \"maxdepth\",\n      \"maxcomplexity\",\n      \"maxerr\",\n      \"maxlen\",\n      \"indent\"\n    ];\n\n    if (directiveToken.type === \"jshint\" || directiveToken.type === \"jslint\" ||\n      directiveToken.type === \"jshint.unstable\") {\n      body.forEach(function(item) {\n        var parts = item.split(\":\");\n        var key = parts[0].trim();\n        var val = parts.length > 1 ? parts[1].trim() : \"\";\n        var numberVal;\n\n        if (!checkOption(key, directiveToken.type !== \"jshint.unstable\", directiveToken)) {\n          return;\n        }\n\n        if (numvals.indexOf(key) >= 0) {\n          if (val !== \"false\") {\n            numberVal = +val;\n\n            if (typeof numberVal !== \"number\" || !isFinite(numberVal) ||\n              numberVal <= 0 || Math.floor(numberVal) !== numberVal) {\n              error(\"E032\", directiveToken, val);\n              return;\n            }\n\n            state.option[key] = numberVal;\n          } else {\n            state.option[key] = key === \"indent\" ? 4 : false;\n          }\n\n          return;\n        }\n\n        if (key === \"validthis\") {\n\n          if (state.funct[\"(global)\"])\n            return void error(\"E009\");\n\n          if (val !== \"true\" && val !== \"false\")\n            return void error(\"E002\", directiveToken);\n\n          state.option.validthis = (val === \"true\");\n          return;\n        }\n\n        if (key === \"quotmark\") {\n          switch (val) {\n          case \"true\":\n          case \"false\":\n            state.option.quotmark = (val === \"true\");\n            break;\n          case \"double\":\n          case \"single\":\n            state.option.quotmark = val;\n            break;\n          default:\n            error(\"E002\", directiveToken);\n          }\n          return;\n        }\n\n        if (key === \"shadow\") {\n          switch (val) {\n          case \"true\":\n            state.option.shadow = true;\n            break;\n          case \"outer\":\n            state.option.shadow = \"outer\";\n            break;\n          case \"false\":\n          case \"inner\":\n            state.option.shadow = \"inner\";\n            break;\n          default:\n            error(\"E002\", directiveToken);\n          }\n          return;\n        }\n\n        if (key === \"unused\") {\n          switch (val) {\n          case \"true\":\n            state.option.unused = true;\n            break;\n          case \"false\":\n            state.option.unused = false;\n            break;\n          case \"vars\":\n          case \"strict\":\n            state.option.unused = val;\n            break;\n          default:\n            error(\"E002\", directiveToken);\n          }\n          return;\n        }\n\n        if (key === \"latedef\") {\n          switch (val) {\n          case \"true\":\n            state.option.latedef = true;\n            break;\n          case \"false\":\n            state.option.latedef = false;\n            break;\n          case \"nofunc\":\n            state.option.latedef = \"nofunc\";\n            break;\n          default:\n            error(\"E002\", directiveToken);\n          }\n          return;\n        }\n\n        if (key === \"ignore\") {\n          switch (val) {\n          case \"line\":\n            state.ignoredLines[directiveToken.line] = true;\n            removeIgnoredMessages();\n            break;\n          default:\n            error(\"E002\", directiveToken);\n          }\n          return;\n        }\n\n        if (key === \"strict\") {\n          switch (val) {\n          case \"true\":\n            state.option.strict = true;\n            break;\n          case \"false\":\n            state.option.strict = false;\n            break;\n          case \"global\":\n          case \"implied\":\n            state.option.strict = val;\n            break;\n          default:\n            error(\"E002\", directiveToken);\n          }\n          return;\n        }\n\n        if (key === \"module\") {\n          if (!hasParsedCode(state.funct)) {\n            error(\"E055\", directiveToken, \"module\");\n          }\n        }\n\n        if (key === \"esversion\") {\n          switch (val) {\n          case \"3\":\n          case \"5\":\n          case \"6\":\n          case \"7\":\n          case \"8\":\n          case \"9\":\n          case \"10\":\n          case \"11\":\n            state.option.moz = false;\n            state.option.esversion = +val;\n            break;\n          case \"2015\":\n          case \"2016\":\n          case \"2017\":\n          case \"2018\":\n          case \"2019\":\n          case \"2020\":\n            state.option.moz = false;\n            state.option.esversion = +val - 2009;\n            break;\n          default:\n            error(\"E002\", directiveToken);\n          }\n          if (!hasParsedCode(state.funct)) {\n            error(\"E055\", directiveToken, \"esversion\");\n          }\n          return;\n        }\n\n        var match = /^([+-])(W\\d{3})$/g.exec(key);\n        if (match) {\n          state.ignored[match[2]] = (match[1] === \"-\");\n          return;\n        }\n\n        var tn;\n        if (val === \"true\" || val === \"false\") {\n          if (directiveToken.type === \"jslint\") {\n            tn = options.renamed[key] || key;\n            state.option[tn] = (val === \"true\");\n\n            if (options.inverted[tn] !== undefined) {\n              state.option[tn] = !state.option[tn];\n            }\n          } else if (directiveToken.type === \"jshint.unstable\") {\n            state.option.unstable[key] = (val === \"true\");\n          } else {\n            state.option[key] = (val === \"true\");\n          }\n\n          return;\n        }\n\n        error(\"E002\", directiveToken);\n      });\n\n      applyOptions();\n    }\n  }\n  function peek(p) {\n    var i = p || 0, j = lookahead.length, t;\n\n    if (i < j) {\n      return lookahead[i];\n    }\n\n    while (j <= i) {\n      t = lex.token();\n      if (!t) {\n        if (!lookahead.length) {\n          return state.tokens.next;\n        }\n\n        return lookahead[j - 1];\n      }\n\n      lookahead[j] = t;\n      j += 1;\n    }\n\n    return t;\n  }\n\n  function peekIgnoreEOL() {\n    var i = 0;\n    var t;\n    do {\n      t = peek(i++);\n    } while (t.id === \"(endline)\");\n    return t;\n  }\n  function advance(expected, relatedToken) {\n    var nextToken = state.tokens.next;\n\n    if (expected && nextToken.id !== expected) {\n      if (relatedToken) {\n        if (nextToken.id === \"(end)\") {\n          error(\"E019\", relatedToken, relatedToken.id);\n        } else {\n          error(\"E020\", nextToken, expected, relatedToken.id,\n            relatedToken.line, nextToken.value);\n        }\n      } else if (nextToken.type !== \"(identifier)\" || nextToken.value !== expected) {\n        error(\"E021\", nextToken, expected, nextToken.value);\n      }\n    }\n\n    state.tokens.prev = state.tokens.curr;\n    state.tokens.curr = state.tokens.next;\n    for (;;) {\n      state.tokens.next = lookahead.shift() || lex.token();\n\n      if (!state.tokens.next) { // No more tokens left, give up\n        quit(\"E041\", state.tokens.curr);\n      }\n\n      if (state.tokens.next.id === \"(end)\" || state.tokens.next.id === \"(error)\") {\n        return;\n      }\n\n      if (state.tokens.next.check) {\n        state.tokens.next.check();\n      }\n\n      if (state.tokens.next.isSpecial) {\n        lintingDirective(state.tokens.next, state.tokens.curr);\n      } else {\n        if (state.tokens.next.id !== \"(endline)\") {\n          break;\n        }\n      }\n    }\n  }\n  function isOperator(token) {\n    return token.first || token.right || token.left || token.id === \"yield\" || token.id === \"await\";\n  }\n\n  function isEndOfExpr(context, curr, next) {\n    if (arguments.length <= 1) {\n      curr = state.tokens.curr;\n      next = state.tokens.next;\n    }\n\n    if (next.id === \"in\" && context & prodParams.noin) {\n      return true;\n    }\n\n    if (next.id === \";\" || next.id === \"}\" || next.id === \":\") {\n      return true;\n    }\n\n    if (next.infix === curr.infix ||\n      (curr.id === \"yield\" && curr.rbp < next.rbp)) {\n      return !sameLine(curr, next);\n    }\n\n    return false;\n  }\n  function expression(context, rbp) {\n    var left, isArray = false, isObject = false;\n    var initial = context & prodParams.initial;\n    var curr;\n\n    context &= ~prodParams.initial;\n\n    state.nameStack.push();\n\n    if (state.tokens.next.id === \"(end)\")\n      error(\"E006\", state.tokens.curr);\n\n    advance();\n\n    if (initial) {\n      state.funct[\"(verb)\"] = state.tokens.curr.value;\n      state.tokens.curr.beginsStmt = true;\n    }\n\n    curr = state.tokens.curr;\n\n    if (initial && curr.fud && (!curr.useFud || curr.useFud(context))) {\n      left = state.tokens.curr.fud(context);\n    } else {\n      if (state.tokens.curr.nud) {\n        left = state.tokens.curr.nud(context, rbp);\n      } else {\n        error(\"E030\", state.tokens.curr, state.tokens.curr.id);\n      }\n\n      while (rbp < state.tokens.next.lbp && !isEndOfExpr(context)) {\n        isArray = state.tokens.curr.value === \"Array\";\n        isObject = state.tokens.curr.value === \"Object\";\n        if (left && (left.value || (left.first && left.first.value))) {\n          if (left.value !== \"new\" ||\n            (left.first && left.first.value && left.first.value === \".\")) {\n            isArray = false;\n            if (left.value !== state.tokens.curr.value) {\n              isObject = false;\n            }\n          }\n        }\n\n        advance();\n\n        if (isArray && state.tokens.curr.id === \"(\" && state.tokens.next.id === \")\") {\n          warning(\"W009\", state.tokens.curr);\n        }\n\n        if (isObject && state.tokens.curr.id === \"(\" && state.tokens.next.id === \")\") {\n          warning(\"W010\", state.tokens.curr);\n        }\n\n        if (left && state.tokens.curr.led) {\n          left = state.tokens.curr.led(context, left);\n        } else {\n          error(\"E033\", state.tokens.curr, state.tokens.curr.id);\n        }\n      }\n    }\n\n    state.nameStack.pop();\n\n    return left;\n  }\n\n  function sameLine(first, second) {\n    return first.line === (second.startLine || second.line);\n  }\n\n  function nobreaknonadjacent(left, right) {\n    if (!state.option.laxbreak && !sameLine(left, right)) {\n      warning(\"W014\", right, right.value);\n    }\n  }\n\n  function nolinebreak(t) {\n    if (!sameLine(t, state.tokens.next)) {\n      warning(\"E022\", t, t.value);\n    }\n  }\n  function checkComma(opts) {\n    var prev = state.tokens.prev;\n    var curr = state.tokens.curr;\n    opts = opts || {};\n\n    if (!sameLine(prev, curr)) {\n      if (!state.option.laxcomma) {\n        if (checkComma.first) {\n          warning(\"I001\", curr);\n          checkComma.first = false;\n        }\n        warning(\"W014\", prev, curr.value);\n      }\n    }\n\n    if (state.tokens.next.identifier && !(opts.property && state.inES5())) {\n      switch (state.tokens.next.value) {\n      case \"break\":\n      case \"case\":\n      case \"catch\":\n      case \"continue\":\n      case \"default\":\n      case \"do\":\n      case \"else\":\n      case \"finally\":\n      case \"for\":\n      case \"if\":\n      case \"in\":\n      case \"instanceof\":\n      case \"return\":\n      case \"switch\":\n      case \"throw\":\n      case \"try\":\n      case \"var\":\n      case \"let\":\n      case \"while\":\n      case \"with\":\n        error(\"E024\", state.tokens.next, state.tokens.next.value);\n        return false;\n      }\n    }\n\n    if (state.tokens.next.type === \"(punctuator)\") {\n      switch (state.tokens.next.value) {\n      case \"}\":\n      case \"]\":\n      case \",\":\n      case \")\":\n        if (opts.allowTrailing) {\n          return true;\n        }\n\n        error(\"E024\", state.tokens.next, state.tokens.next.value);\n        return false;\n      }\n    }\n    return true;\n  }\n  function symbol(s, p) {\n    var x = state.syntax[s];\n    if (!x || typeof x !== \"object\") {\n      state.syntax[s] = x = {\n        id: s,\n        lbp: p,\n        rbp: p,\n        value: s\n      };\n    }\n    return x;\n  }\n  function delim(s) {\n    var x = symbol(s, 0);\n    x.delim = true;\n    return x;\n  }\n  function stmt(s, f) {\n    var x = delim(s);\n    x.identifier = x.reserved = true;\n    x.fud = f;\n    return x;\n  }\n  function blockstmt(s, f) {\n    var x = stmt(s, f);\n    x.block = true;\n    return x;\n  }\n  function reserveName(x) {\n    var c = x.id.charAt(0);\n    if ((c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\")) {\n      x.identifier = x.reserved = true;\n    }\n    return x;\n  }\n  function prefix(s, f) {\n    var x = symbol(s, 150);\n    reserveName(x);\n\n    x.nud = (typeof f === \"function\") ? f : function(context) {\n      this.arity = \"unary\";\n      this.right = expression(context, 150);\n\n      if (this.id === \"++\" || this.id === \"--\") {\n        if (state.option.plusplus) {\n          warning(\"W016\", this, this.id);\n        }\n\n        if (this.right) {\n          checkLeftSideAssign(context, this.right, this);\n        }\n      }\n\n      return this;\n    };\n\n    return x;\n  }\n  function type(s, f) {\n    var x = symbol(s, 0);\n    x.type = s;\n    x.nud = f;\n    return x;\n  }\n  function reserve(name, func) {\n    var x = type(name, func);\n    x.identifier = true;\n    x.reserved = true;\n    return x;\n  }\n  function FutureReservedWord(name, meta) {\n    var x = type(name, state.syntax[\"(identifier)\"].nud);\n\n    meta = meta || {};\n    meta.isFutureReservedWord = true;\n\n    x.value = name;\n    x.identifier = true;\n    x.reserved = true;\n    x.meta = meta;\n\n    return x;\n  }\n  function infix(s, f, p, w) {\n    var x = symbol(s, p);\n    reserveName(x);\n    x.infix = true;\n    x.led = function(context, left) {\n      if (!w) {\n        nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n      }\n      if ((s === \"in\" || s === \"instanceof\") && left.id === \"!\") {\n        warning(\"W018\", left, \"!\");\n      }\n      if (typeof f === \"function\") {\n        return f(context, left, this);\n      } else {\n        this.left = left;\n        this.right = expression(context, p);\n        return this;\n      }\n    };\n    return x;\n  }\n  function application(s) {\n    var x = symbol(s, 42);\n\n    x.infix = true;\n    x.led = function(context, left) {\n      nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n\n      this.left = left;\n      this.right = doFunction(context, { type: \"arrow\", loneArg: left });\n      return this;\n    };\n    return x;\n  }\n  function relation(s, f) {\n    var x = symbol(s, 100);\n\n    x.infix = true;\n    x.led = function(context, left) {\n      nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n      this.left = left;\n      var right = this.right = expression(context, 100);\n\n      if (isIdentifier(left, \"NaN\") || isIdentifier(right, \"NaN\")) {\n        warning(\"W019\", this);\n      } else if (f) {\n        f.apply(this, [context, left, right]);\n      }\n\n      if (!left || !right) {\n        quit(\"E041\", state.tokens.curr);\n      }\n\n      if (left.id === \"!\") {\n        warning(\"W018\", left, \"!\");\n      }\n\n      if (right.id === \"!\") {\n        warning(\"W018\", right, \"!\");\n      }\n\n      return this;\n    };\n    return x;\n  }\n  function beginsUnaryExpression(token) {\n    return token.arity === \"unary\" && token.id !== \"++\" && token.id !== \"--\";\n  }\n\n  var typeofValues = {};\n  typeofValues.legacy = [\n    \"xml\",\n    \"unknown\"\n  ];\n  typeofValues.es3 = [\n    \"undefined\", \"boolean\", \"number\", \"string\", \"function\", \"object\",\n  ];\n  typeofValues.es3 = typeofValues.es3.concat(typeofValues.legacy);\n  typeofValues.es6 = typeofValues.es3.concat(\"symbol\", \"bigint\");\n  function isTypoTypeof(left, right, state) {\n    var values;\n\n    if (state.option.notypeof)\n      return false;\n\n    if (!left || !right)\n      return false;\n\n    values = state.inES6() ? typeofValues.es6 : typeofValues.es3;\n\n    if (right.type === \"(identifier)\" && right.value === \"typeof\" && left.type === \"(string)\") {\n      if (left.value === \"bigint\") {\n        if (!state.inES11()) {\n          warning(\"W119\", left, \"BigInt\", \"11\");\n        }\n\n        return false;\n      }\n\n      return !_.includes(values, left.value);\n    }\n\n    return false;\n  }\n  function isGlobalEval(left, state) {\n    var isGlobal = false;\n    if (left.type === \"this\" && state.funct[\"(context)\"] === null) {\n      isGlobal = true;\n    }\n    else if (left.type === \"(identifier)\") {\n      if (state.option.node && left.value === \"global\") {\n        isGlobal = true;\n      }\n\n      else if (state.option.browser && (left.value === \"window\" || left.value === \"document\")) {\n        isGlobal = true;\n      }\n    }\n\n    return isGlobal;\n  }\n  function findNativePrototype(left) {\n    var natives = [\n      \"Array\", \"ArrayBuffer\", \"Boolean\", \"Collator\", \"DataView\", \"Date\",\n      \"DateTimeFormat\", \"Error\", \"EvalError\", \"Float32Array\", \"Float64Array\",\n      \"Function\", \"Infinity\", \"Intl\", \"Int16Array\", \"Int32Array\", \"Int8Array\",\n      \"Iterator\", \"Number\", \"NumberFormat\", \"Object\", \"RangeError\",\n      \"ReferenceError\", \"RegExp\", \"StopIteration\", \"String\", \"SyntaxError\",\n      \"TypeError\", \"Uint16Array\", \"Uint32Array\", \"Uint8Array\", \"Uint8ClampedArray\",\n      \"URIError\"\n    ];\n\n    function walkPrototype(obj) {\n      if (typeof obj !== \"object\") return;\n      return obj.right === \"prototype\" ? obj : walkPrototype(obj.left);\n    }\n\n    function walkNative(obj) {\n      while (!obj.identifier && typeof obj.left === \"object\")\n        obj = obj.left;\n\n      if (obj.identifier && natives.indexOf(obj.value) >= 0 &&\n          state.funct[\"(scope)\"].isPredefined(obj.value)) {\n        return obj.value;\n      }\n    }\n\n    var prototype = walkPrototype(left);\n    if (prototype) return walkNative(prototype);\n  }\n  function checkLeftSideAssign(context, left, assignToken, options) {\n\n    var allowDestructuring = options && options.allowDestructuring;\n\n    assignToken = assignToken || left;\n\n    if (state.option.freeze) {\n      var nativeObject = findNativePrototype(left);\n      if (nativeObject)\n        warning(\"W121\", left, nativeObject);\n    }\n\n    if (left.identifier && !left.isMetaProperty) {\n      state.funct[\"(scope)\"].block.reassign(left.value, left);\n    }\n\n    if (left.id === \".\") {\n      if (!left.left || left.left.value === \"arguments\" && !state.isStrict()) {\n        warning(\"W143\", assignToken);\n      }\n\n      state.nameStack.set(state.tokens.prev);\n      return true;\n    } else if (left.id === \"{\" || left.id === \"[\") {\n      if (!allowDestructuring || !left.destructAssign) {\n        if (left.id === \"{\" || !left.left) {\n          warning(\"E031\", assignToken);\n        } else if (left.left.value === \"arguments\" && !state.isStrict()) {\n          warning(\"W143\", assignToken);\n        }\n      }\n\n      if (left.id === \"[\") {\n        state.nameStack.set(left.right);\n      }\n\n      return true;\n    } else if (left.identifier && !isReserved(context, left) && !left.isMetaProperty) {\n      if (state.funct[\"(scope)\"].bindingtype(left.value) === \"exception\") {\n        warning(\"W022\", left);\n      }\n\n      if (left.value === \"eval\" && state.isStrict()) {\n        error(\"E031\", assignToken);\n        return false;\n      } else if (left.value === \"arguments\") {\n        if (!state.isStrict()) {\n          warning(\"W143\", assignToken);\n        } else {\n          error(\"E031\", assignToken);\n          return false;\n        }\n      }\n      state.nameStack.set(left);\n      return true;\n    }\n\n    error(\"E031\", assignToken);\n\n    return false;\n  }\n  function assignop(s, f) {\n    var x = infix(s, typeof f === \"function\" ? f : function(context, left, that) {\n      that.left = left;\n\n      checkLeftSideAssign(context, left, that, { allowDestructuring: true });\n\n      that.right = expression(context, 10);\n\n      return that;\n    }, 20);\n\n    x.exps = true;\n    x.assign = true;\n\n    return x;\n  }\n  function bitwise(s, f, p) {\n    var x = symbol(s, p);\n    reserveName(x);\n    x.infix = true;\n    x.led = (typeof f === \"function\") ? f : function(context, left) {\n      if (state.option.bitwise) {\n        warning(\"W016\", this, this.id);\n      }\n      this.left = left;\n      this.right = expression(context, p);\n      return this;\n    };\n    return x;\n  }\n  function bitwiseassignop(s) {\n    symbol(s, 20).exps = true;\n    return infix(s, function(context, left, that) {\n      if (state.option.bitwise) {\n        warning(\"W016\", that, that.id);\n      }\n\n      checkLeftSideAssign(context, left, that);\n\n      that.right = expression(context, 10);\n\n      return that;\n    }, 20);\n  }\n  function suffix(s) {\n    var x = symbol(s, 150);\n\n    x.led = function(context, left) {\n      if (state.option.plusplus) {\n        warning(\"W016\", this, this.id);\n      }\n\n      checkLeftSideAssign(context, left, this);\n\n      this.left = left;\n      return this;\n    };\n    return x;\n  }\n  function optionalidentifier(context, isName, preserve) {\n    if (!state.tokens.next.identifier) {\n      return;\n    }\n\n    if (!preserve) {\n      advance();\n    }\n\n    var curr = state.tokens.curr;\n\n    if (isReserved(context, curr) && !(isName && state.inES5())) {\n      warning(\"W024\", state.tokens.curr, state.tokens.curr.id);\n    }\n\n    return curr.value;\n  }\n  function spreadrest(operation) {\n    if (!checkPunctuator(state.tokens.next, \"...\")) {\n      return false;\n    }\n\n    if (!state.inES6(true)) {\n      warning(\"W119\", state.tokens.next, operation + \" operator\", \"6\");\n    }\n    advance();\n\n    if (checkPunctuator(state.tokens.next, \"...\")) {\n      warning(\"E024\", state.tokens.next, \"...\");\n      while (checkPunctuator(state.tokens.next, \"...\")) {\n        advance();\n      }\n    }\n\n    return true;\n  }\n  function identifier(context, isName) {\n    var i = optionalidentifier(context, isName, false);\n    if (i) {\n      return i;\n    }\n\n    error(\"E030\", state.tokens.next, state.tokens.next.value);\n    if (state.tokens.next.id !== \";\") {\n      advance();\n    }\n  }\n  function reachable(controlToken) {\n    var i = 0, t;\n    if (state.tokens.next.id !== \";\" || controlToken.inBracelessBlock) {\n      return;\n    }\n    for (;;) {\n      do {\n        t = peek(i);\n        i += 1;\n      } while (t.id !== \"(end)\" && t.id === \"(comment)\");\n\n      if (t.reach) {\n        return;\n      }\n\n      if (t.id !== \"(endline)\") {\n        if (isFunction(t, i)) {\n          if (state.option.latedef === true) {\n            warning(\"W026\", t);\n          }\n          break;\n        }\n\n        warning(\"W027\", t, t.value, controlToken.value);\n        break;\n      }\n    }\n\n    function isFunction(t, i) {\n      if (t.id === \"function\") {\n        return true;\n      }\n      if (t.id === \"async\") {\n        t = peek(i);\n        return t.id === \"function\";\n      }\n    }\n  }\n  function parseFinalSemicolon(stmt) {\n    if (state.tokens.next.id !== \";\") {\n      if (state.tokens.next.isUnclosed) return advance();\n\n      var isSameLine = sameLine(state.tokens.curr, state.tokens.next) &&\n                       state.tokens.next.id !== \"(end)\";\n      var blockEnd = checkPunctuator(state.tokens.next, \"}\");\n\n      if (isSameLine && !blockEnd && !(stmt.id === \"do\" && state.inES6(true))) {\n        errorAt(\"E058\", state.tokens.curr.line, state.tokens.curr.character);\n      } else if (!state.option.asi) {\n        if (!(blockEnd && isSameLine && state.option.lastsemic)) {\n          warningAt(\"W033\", state.tokens.curr.line, state.tokens.curr.character);\n        }\n      }\n    } else {\n      advance(\";\");\n    }\n  }\n  function statement(context) {\n    var i = indent, r, t = state.tokens.next, hasOwnScope = false;\n\n    context |= prodParams.initial;\n\n    if (t.id === \";\") {\n      advance(\";\");\n      return;\n    }\n    var res = isReserved(context, t);\n\n    if (res && t.meta && t.meta.isFutureReservedWord && !t.fud) {\n      warning(\"W024\", t, t.id);\n      res = false;\n    }\n\n    if (t.identifier && !res && peek().id === \":\") {\n      advance();\n      advance(\":\");\n\n      hasOwnScope = true;\n      state.funct[\"(scope)\"].stack();\n      state.funct[\"(scope)\"].block.addLabel(t.value, { token: state.tokens.curr });\n\n      if (!state.tokens.next.labelled && state.tokens.next.value !== \"{\") {\n        warning(\"W028\", state.tokens.next, t.value, state.tokens.next.value);\n      }\n\n      t = state.tokens.next;\n    }\n\n    if (t.id === \"{\") {\n      var iscase = (state.funct[\"(verb)\"] === \"case\" && state.tokens.curr.value === \":\");\n      block(context, true, true, false, false, iscase);\n\n      if (hasOwnScope) {\n        state.funct[\"(scope)\"].unstack();\n      }\n\n      return;\n    }\n\n    r = expression(context, 0);\n\n    if (r && !(r.identifier && r.value === \"function\") &&\n        !(r.type === \"(punctuator)\" && r.left &&\n          r.left.identifier && r.left.value === \"function\")) {\n      if (!state.isStrict() && state.stmtMissingStrict()) {\n        warning(\"E007\");\n      }\n    }\n\n    if (!t.block) {\n      if (!state.option.expr && (!r || !r.exps)) {\n        warning(\"W030\", state.tokens.curr);\n      } else if (state.option.nonew && r && r.left && r.id === \"(\" && r.left.id === \"new\") {\n        warning(\"W031\", t);\n      }\n\n      parseFinalSemicolon(t);\n    }\n\n    indent = i;\n    if (hasOwnScope) {\n      state.funct[\"(scope)\"].unstack();\n    }\n    return r;\n  }\n  function statements(context) {\n    var a = [], p;\n\n    while (!state.tokens.next.reach && state.tokens.next.id !== \"(end)\") {\n      if (state.tokens.next.id === \";\") {\n        p = peek();\n\n        if (!p || (p.id !== \"(\" && p.id !== \"[\")) {\n          warning(\"W032\");\n        }\n\n        advance(\";\");\n      } else {\n        a.push(statement(context));\n      }\n    }\n    return a;\n  }\n  function directives() {\n    var current = state.tokens.next;\n    while (state.tokens.next.id === \"(string)\") {\n      var next = peekIgnoreEOL();\n      if (!isEndOfExpr(0, current, next)) {\n        break;\n      }\n      current = next;\n\n      advance();\n      var directive = state.tokens.curr.value;\n      if (state.directive[directive] ||\n          (directive === \"use strict\" && state.option.strict === \"implied\")) {\n        warning(\"W034\", state.tokens.curr, directive);\n      }\n      if (directive === \"use strict\" && state.inES7() &&\n        !state.funct[\"(global)\"] && state.funct[\"(hasSimpleParams)\"] === false) {\n        error(\"E065\", state.tokens.curr);\n      }\n\n      state.directive[directive] = state.tokens.curr;\n\n      parseFinalSemicolon(current);\n    }\n\n    if (state.isStrict()) {\n      state.option.undef = true;\n    }\n  }\n  function block(context, ordinary, stmt, isfunc, isfatarrow, iscase) {\n    var a,\n      b = inblock,\n      old_indent = indent,\n      m,\n      t,\n      d;\n\n    inblock = ordinary;\n\n    t = state.tokens.next;\n\n    var metrics = state.funct[\"(metrics)\"];\n    metrics.nestedBlockDepth += 1;\n    metrics.verifyMaxNestedBlockDepthPerFunction();\n\n    if (state.tokens.next.id === \"{\") {\n      advance(\"{\");\n      state.funct[\"(scope)\"].stack();\n\n      if (state.tokens.next.id !== \"}\") {\n        indent += state.option.indent;\n        while (!ordinary && state.tokens.next.from > indent) {\n          indent += state.option.indent;\n        }\n\n        if (isfunc) {\n          m = {};\n          for (d in state.directive) {\n            m[d] = state.directive[d];\n          }\n          directives();\n\n          state.funct[\"(isStrict)\"] = state.isStrict();\n\n          if (state.option.strict && state.funct[\"(context)\"][\"(global)\"]) {\n            if (!m[\"use strict\"] && !state.isStrict()) {\n              warning(\"E007\");\n            }\n          }\n        }\n\n        a = statements(context);\n\n        metrics.statementCount += a.length;\n\n        indent -= state.option.indent;\n      } else if (isfunc) {\n        state.funct[\"(isStrict)\"] = state.isStrict();\n      }\n\n      advance(\"}\", t);\n\n      if (isfunc) {\n        state.funct[\"(scope)\"].validateParams(isfatarrow);\n        if (m) {\n          state.directive = m;\n        }\n      }\n\n      state.funct[\"(scope)\"].unstack();\n\n      indent = old_indent;\n    } else if (!ordinary) {\n      if (isfunc) {\n        state.funct[\"(scope)\"].stack();\n\n        if (stmt && !isfatarrow && !state.inMoz()) {\n          error(\"W118\", state.tokens.curr, \"function closure expressions\");\n        }\n\n        if (isfatarrow) {\n          state.funct[\"(scope)\"].validateParams(true);\n        }\n\n        var expr = expression(context, 10);\n\n        if (state.option.noreturnawait && context & prodParams.async &&\n            expr.identifier && expr.value === \"await\") {\n          warning(\"W146\", expr);\n        }\n\n        if (state.option.strict && state.funct[\"(context)\"][\"(global)\"]) {\n          if (!state.isStrict()) {\n            warning(\"E007\");\n          }\n        }\n\n        state.funct[\"(scope)\"].unstack();\n      } else {\n        error(\"E021\", state.tokens.next, \"{\", state.tokens.next.value);\n      }\n    } else {\n\n      state.funct[\"(scope)\"].stack();\n\n      if (!stmt || state.option.curly) {\n        warning(\"W116\", state.tokens.next, \"{\", state.tokens.next.value);\n      }\n      var supportsFnDecl = state.funct[\"(verb)\"] === \"if\" ||\n        state.tokens.curr.id === \"else\";\n\n      state.tokens.next.inBracelessBlock = true;\n      indent += state.option.indent;\n      a = [statement(context)];\n      indent -= state.option.indent;\n\n      if (a[0] && a[0].declaration &&\n        !(supportsFnDecl && a[0].id === \"function\")) {\n        error(\"E048\", a[0], a[0].id[0].toUpperCase() + a[0].id.slice(1));\n      }\n\n      state.funct[\"(scope)\"].unstack();\n    }\n    switch (state.funct[\"(verb)\"]) {\n    case \"break\":\n    case \"continue\":\n    case \"return\":\n    case \"throw\":\n      if (iscase) {\n        break;\n      }\n    default:\n      state.funct[\"(verb)\"] = null;\n    }\n\n    inblock = b;\n    if (ordinary && state.option.noempty && (!a || a.length === 0)) {\n      warning(\"W035\", state.tokens.prev);\n    }\n    metrics.nestedBlockDepth -= 1;\n    return a;\n  }\n  function countMember(m) {\n    if (membersOnly && typeof membersOnly[m] !== \"boolean\") {\n      warning(\"W036\", state.tokens.curr, m);\n    }\n    if (typeof member[m] === \"number\") {\n      member[m] += 1;\n    } else {\n      member[m] = 1;\n    }\n  }\n\n  type(\"(number)\", function() {\n    if (state.tokens.next.id === \".\") {\n      warning(\"W005\", this);\n    }\n\n    return this;\n  });\n\n  type(\"(string)\", function() {\n    return this;\n  });\n\n  state.syntax[\"(identifier)\"] = {\n    type: \"(identifier)\",\n    lbp: 0,\n    identifier: true,\n\n    nud: function(context) {\n      var v = this.value;\n      var isLoneArrowParam = state.tokens.next.id === \"=>\";\n\n      if (isReserved(context, this)) {\n        warning(\"W024\", this, v);\n      } else if (!isLoneArrowParam && !state.funct[\"(comparray)\"].check(v)) {\n        state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n      }\n\n      return this;\n    },\n\n    led: function() {\n      error(\"E033\", state.tokens.next, state.tokens.next.value);\n    }\n  };\n\n  var baseTemplateSyntax = {\n    identifier: false,\n    template: true,\n  };\n  state.syntax[\"(template)\"] = _.extend({\n    lbp: 155,\n    type: \"(template)\",\n    nud: doTemplateLiteral,\n    led: doTemplateLiteral,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(template middle)\"] = _.extend({\n    lbp: 0,\n    type: \"(template middle)\",\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(template tail)\"] = _.extend({\n    lbp: 0,\n    type: \"(template tail)\",\n    tail: true,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(no subst template)\"] = _.extend({\n    lbp: 155,\n    type: \"(template)\",\n    nud: doTemplateLiteral,\n    led: doTemplateLiteral,\n    noSubst: true,\n    tail: true // mark as tail, since it's always the last component\n  }, baseTemplateSyntax);\n\n  type(\"(regexp)\", function() {\n    return this;\n  });\n\n  delim(\"(endline)\");\n  (function(x) {\n    x.line = x.from = 0;\n  })(delim(\"(begin)\"));\n  delim(\"(end)\").reach = true;\n  delim(\"(error)\").reach = true;\n  delim(\"}\").reach = true;\n  delim(\")\");\n  delim(\"]\");\n  delim(\"\\\"\").reach = true;\n  delim(\"'\").reach = true;\n  delim(\";\");\n  delim(\":\").reach = true;\n  delim(\"#\");\n\n  reserve(\"else\");\n  reserve(\"case\").reach = true;\n  reserve(\"catch\");\n  reserve(\"default\").reach = true;\n  reserve(\"finally\");\n  reserve(\"true\", function() { return this; });\n  reserve(\"false\", function() { return this; });\n  reserve(\"null\", function() { return this; });\n  reserve(\"this\", function() {\n    if (state.isStrict() && !isMethod() &&\n        !state.option.validthis && ((state.funct[\"(statement)\"] &&\n        state.funct[\"(name)\"].charAt(0) > \"Z\") || state.funct[\"(global)\"])) {\n      warning(\"W040\", this);\n    }\n\n    return this;\n  });\n\n  (function(superSymbol) {\n    superSymbol.rbp = 161;\n  })(reserve(\"super\", function() {\n    superNud.call(state.tokens.curr, this);\n\n    return this;\n  }));\n\n  assignop(\"=\", \"assign\");\n  assignop(\"+=\", \"assignadd\");\n  assignop(\"-=\", \"assignsub\");\n  assignop(\"*=\", \"assignmult\");\n  assignop(\"/=\", \"assigndiv\").nud = function() {\n    error(\"E014\");\n  };\n  assignop(\"%=\", \"assignmod\");\n  assignop(\"**=\", function(context, left, that) {\n    if (!state.inES7()) {\n      warning(\"W119\", that, \"Exponentiation operator\", \"7\");\n    }\n\n    that.left = left;\n\n    checkLeftSideAssign(context, left, that);\n\n    that.right = expression(context, 10);\n\n    return that;\n  });\n\n  bitwiseassignop(\"&=\");\n  bitwiseassignop(\"|=\");\n  bitwiseassignop(\"^=\");\n  bitwiseassignop(\"<<=\");\n  bitwiseassignop(\">>=\");\n  bitwiseassignop(\">>>=\");\n  infix(\",\", function(context, left, that) {\n    if (state.option.nocomma) {\n      warning(\"W127\", that);\n    }\n\n    that.left = left;\n\n    if (checkComma()) {\n      that.right = expression(context, 10);\n    } else {\n      that.right = null;\n    }\n\n    return that;\n  }, 10, true);\n\n  infix(\"?\", function(context, left, that) {\n    increaseComplexityCount();\n    that.left = left;\n    that.right = expression(context & ~prodParams.noin, 10);\n    advance(\":\");\n    expression(context, 10);\n    return that;\n  }, 30);\n\n  infix(\"||\", function(context, left, that) {\n    increaseComplexityCount();\n    that.left = left;\n    that.right = expression(context, 40);\n    return that;\n  }, 40);\n\n  var andPrecedence = 50;\n  infix(\"&&\", function(context, left, that) {\n    increaseComplexityCount();\n    that.left = left;\n    that.right = expression(context, andPrecedence);\n    return that;\n  }, andPrecedence);\n\n  infix(\"??\", function(context, left, that) {\n    if (!left.paren && (left.id === \"||\" || left.id === \"&&\")) {\n      error(\"E024\", that, \"??\");\n    }\n\n    if (!state.inES11()) {\n      warning(\"W119\", that, \"nullish coalescing\", \"11\");\n    }\n\n    increaseComplexityCount();\n    that.left = left;\n    var right = that.right = expression(context, 39);\n\n    if (!right) {\n      error(\"E024\", state.tokens.next, state.tokens.next.id);\n    } else if (!right.paren && (right.id === \"||\" || right.id === \"&&\")) {\n      error(\"E024\", that.right, that.right.id);\n    }\n\n    return that;\n  }, 39);\n  infix(\"**\", function(context, left, that) {\n    if (!state.inES7()) {\n      warning(\"W119\", that, \"Exponentiation operator\", \"7\");\n    }\n    if (!left.paren && beginsUnaryExpression(left)) {\n      error(\"E024\", that, \"**\");\n    }\n\n    that.left = left;\n    that.right = expression(context, that.rbp);\n    return that;\n  }, 150);\n  state.syntax[\"**\"].rbp = 140;\n  bitwise(\"|\", \"bitor\", 70);\n  bitwise(\"^\", \"bitxor\", 80);\n  bitwise(\"&\", \"bitand\", 90);\n  relation(\"==\", function(context, left, right) {\n    var eqnull = state.option.eqnull &&\n      ((left && left.value) === \"null\" || (right && right.value) === \"null\");\n\n    switch (true) {\n      case !eqnull && state.option.eqeqeq:\n        this.from = this.character;\n        warning(\"W116\", this, \"===\", \"==\");\n        break;\n      case isTypoTypeof(right, left, state):\n        warning(\"W122\", this, right.value);\n        break;\n      case isTypoTypeof(left, right, state):\n        warning(\"W122\", this, left.value);\n        break;\n    }\n\n    return this;\n  });\n  relation(\"===\", function(context, left, right) {\n    if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"!=\", function(context, left, right) {\n    var eqnull = state.option.eqnull &&\n        ((left && left.value) === \"null\" || (right && right.value) === \"null\");\n\n    if (!eqnull && state.option.eqeqeq) {\n      this.from = this.character;\n      warning(\"W116\", this, \"!==\", \"!=\");\n    } else if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"!==\", function(context, left, right) {\n    if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"<\");\n  relation(\">\");\n  relation(\"<=\");\n  relation(\">=\");\n  bitwise(\"<<\", \"shiftleft\", 120);\n  bitwise(\">>\", \"shiftright\", 120);\n  bitwise(\">>>\", \"shiftrightunsigned\", 120);\n  infix(\"in\", \"in\", 120);\n  infix(\"instanceof\", function(context, left, token) {\n    var right;\n    var scope = state.funct[\"(scope)\"];\n    token.left = left;\n    token.right = right = expression(context, 120);\n    if (!right) {\n      return token;\n    }\n\n    if (right.id === \"(number)\" ||\n        right.id === \"(string)\" ||\n        right.value === \"null\" ||\n        (right.value === \"undefined\" && !scope.has(\"undefined\")) ||\n        right.arity === \"unary\" ||\n        right.id === \"{\" ||\n        (right.id === \"[\" && !right.right) ||\n        right.id === \"(regexp)\" ||\n        (right.id === \"(template)\" && !right.tag)) {\n      error(\"E060\");\n    }\n\n    if (right.id === \"function\") {\n      warning(\"W139\");\n    }\n\n    return token;\n  }, 120);\n  infix(\"+\", function(context, left, that) {\n    var next = state.tokens.next;\n    var right;\n    that.left = left;\n    that.right = right = expression(context, 130);\n\n    if (left && right && left.id === \"(string)\" && right.id === \"(string)\") {\n      left.value += right.value;\n      left.character = right.character;\n      if (!state.option.scripturl && reg.javascriptURL.test(left.value)) {\n        warning(\"W050\", left);\n      }\n      return left;\n    }\n\n    if (next.id === \"+\" || next.id === \"++\") {\n      warning(\"W007\", that.right);\n    }\n\n    return that;\n  }, 130);\n  prefix(\"+\", function(context) {\n    var next = state.tokens.next;\n    this.arity = \"unary\";\n    this.right = expression(context, 150);\n\n    if (next.id === \"+\" || next.id === \"++\") {\n      warning(\"W007\", this.right);\n    }\n\n    return this;\n  });\n  infix(\"-\", function(context, left, that) {\n    var next = state.tokens.next;\n    that.left = left;\n    that.right = expression(context, 130);\n\n    if (next.id === \"-\" || next.id === \"--\") {\n      warning(\"W006\", that.right);\n    }\n\n    return that;\n  }, 130);\n  prefix(\"-\", function(context) {\n    var next = state.tokens.next;\n    this.arity = \"unary\";\n    this.right = expression(context, 150);\n\n    if (next.id === \"-\" || next.id === \"--\") {\n      warning(\"W006\", this.right);\n    }\n\n    return this;\n  });\n  infix(\"*\", \"mult\", 140);\n  infix(\"/\", \"div\", 140);\n  infix(\"%\", \"mod\", 140);\n\n  suffix(\"++\");\n  prefix(\"++\", \"preinc\");\n  state.syntax[\"++\"].exps = true;\n\n  suffix(\"--\");\n  prefix(\"--\", \"predec\");\n  state.syntax[\"--\"].exps = true;\n\n  prefix(\"delete\", function(context) {\n    this.arity = \"unary\";\n    var p = expression(context, 150);\n    if (!p) {\n      return this;\n    }\n\n    if (p.id !== \".\" && p.id !== \"[\") {\n      warning(\"W051\");\n    }\n    this.first = p;\n    if (p.identifier && !state.isStrict()) {\n      p.forgiveUndef = true;\n    }\n    return this;\n  }).exps = true;\n\n  prefix(\"~\", function(context) {\n    if (state.option.bitwise) {\n      warning(\"W016\", this, \"~\");\n    }\n    this.arity = \"unary\";\n    this.right = expression(context, 150);\n    return this;\n  });\n\n  infix(\"...\");\n\n  prefix(\"!\", function(context) {\n    this.arity = \"unary\";\n    this.right = expression(context, 150);\n\n    if (!this.right) { // '!' followed by nothing? Give up.\n      quit(\"E041\", this);\n    }\n\n    if (bang[this.right.id] === true) {\n      warning(\"W018\", this, \"!\");\n    }\n    return this;\n  });\n\n  prefix(\"typeof\", function(context) {\n    this.arity = \"unary\";\n    var p = expression(context, 150);\n    this.first = this.right = p;\n\n    if (!p) { // 'typeof' followed by nothing? Give up.\n      quit(\"E041\", this);\n    }\n    if (p.identifier) {\n      p.forgiveUndef = true;\n    }\n    return this;\n  });\n  prefix(\"new\", function(context) {\n    var mp = metaProperty(context, \"target\", function() {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.prev, \"new.target\", \"6\");\n      }\n      var inFunction, c = state.funct;\n      while (c) {\n        inFunction = !c[\"(global)\"];\n        if (!c[\"(arrow)\"]) { break; }\n        c = c[\"(context)\"];\n      }\n      if (!inFunction) {\n        warning(\"W136\", state.tokens.prev, \"new.target\");\n      }\n    });\n    if (mp) { return mp; }\n\n    var opening = state.tokens.next;\n    var c = expression(context, 155), i;\n\n    if (!c) {\n      return this;\n    }\n\n    if (!c.paren && c.rbp > 160) {\n      error(\"E024\", opening, opening.value);\n    }\n\n    if (c.id !== \"function\") {\n      if (c.identifier) {\n        switch (c.value) {\n        case \"Number\":\n        case \"String\":\n        case \"Boolean\":\n        case \"Math\":\n        case \"JSON\":\n          warning(\"W053\", state.tokens.prev, c.value);\n          break;\n        case \"Symbol\":\n          if (state.inES6()) {\n            warning(\"W053\", state.tokens.prev, c.value);\n          }\n          break;\n        case \"Function\":\n          if (!state.option.evil) {\n            warning(\"W054\");\n          }\n          break;\n        case \"Date\":\n        case \"RegExp\":\n        case \"this\":\n          break;\n        default:\n          i = c.value.substr(0, 1);\n          if (state.option.newcap && (i < \"A\" || i > \"Z\") &&\n            !state.funct[\"(scope)\"].isPredefined(c.value)) {\n            warning(\"W055\", state.tokens.curr);\n          }\n        }\n      } else {\n        if (c.id === \"?.\" && !c.paren) {\n          error(\"E024\", c, \"?.\");\n        } else if (c.id !== \".\" && c.id !== \"[\" && c.id !== \"(\") {\n          warning(\"W056\", state.tokens.curr);\n        }\n      }\n    } else {\n      if (!state.option.supernew)\n        warning(\"W057\", this);\n    }\n    if (state.tokens.next.id !== \"(\" && !state.option.supernew) {\n      warning(\"W058\", state.tokens.curr, state.tokens.curr.value);\n    }\n    this.first = this.right = c;\n    return this;\n  });\n  state.syntax[\"new\"].exps = true;\n\n\n  var classDeclaration = blockstmt(\"class\", function(context) {\n    var className, classNameToken;\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, \"class\", \"6\");\n    }\n    state.inClassBody = true;\n    if (state.tokens.next.identifier && state.tokens.next.value !== \"extends\") {\n      classNameToken = state.tokens.next;\n      className = classNameToken.value;\n      identifier(context);\n      state.funct[\"(scope)\"].addbinding(className, {\n        type: \"class\",\n        initialized: false,\n        token: classNameToken\n      });\n    }\n    if (state.tokens.next.value === \"extends\") {\n      advance(\"extends\");\n      expression(context, 0);\n    }\n\n    if (classNameToken) {\n      this.name = classNameToken;\n      state.funct[\"(scope)\"].initialize(className);\n    } else {\n      this.name = null;\n    }\n\n    state.funct[\"(scope)\"].stack();\n    classBody(this, context);\n    return this;\n  });\n  classDeclaration.exps = true;\n  classDeclaration.declaration = true;\n  prefix(\"class\", function(context) {\n    var className, classNameToken;\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, \"class\", \"6\");\n    }\n    state.inClassBody = true;\n    if (state.tokens.next.identifier && state.tokens.next.value !== \"extends\") {\n      classNameToken = state.tokens.next;\n      className = classNameToken.value;\n      identifier(context);\n    }\n    if (state.tokens.next.value === \"extends\") {\n      advance(\"extends\");\n      expression(context, 0);\n    }\n\n    state.funct[\"(scope)\"].stack();\n    if (classNameToken) {\n      this.name = classNameToken;\n      state.funct[\"(scope)\"].addbinding(className, {\n        type: \"class\",\n        initialized: true,\n        token: classNameToken\n      });\n      state.funct[\"(scope)\"].block.use(className, classNameToken);\n    } else {\n      this.name = null;\n    }\n\n    classBody(this, context);\n    return this;\n  });\n\n  function classBody(classToken, context) {\n    var props = Object.create(null);\n    var name, accessorType, token, isStatic, inGenerator, hasConstructor;\n    if (state.tokens.next.value === \"{\") {\n      advance(\"{\");\n    } else {\n      warning(\"W116\", state.tokens.curr, \"identifier\", state.tokens.next.type); //?\n      advance();\n    }\n\n    while (state.tokens.next.value !== \"}\") {\n      isStatic = false;\n      inGenerator = false;\n      context &= ~prodParams.preAsync;\n\n      if (state.tokens.next.value === \"static\" &&\n        !checkPunctuator(peek(), \"(\")) {\n        isStatic = true;\n        advance();\n      }\n\n      if (state.tokens.next.value === \"async\") {\n        if (!checkPunctuator(peek(), \"(\")) {\n          context |= prodParams.preAsync;\n          advance();\n\n          nolinebreak(state.tokens.curr);\n\n          if (checkPunctuator(state.tokens.next, \"*\")) {\n            inGenerator = true;\n            advance(\"*\");\n\n            if (!state.inES9()) {\n              warning(\"W119\", state.tokens.next, \"async generators\", \"9\");\n            }\n          }\n\n          if (!state.inES8()) {\n            warning(\"W119\", state.tokens.curr, \"async functions\", \"8\");\n          }\n        }\n      }\n\n      if (state.tokens.next.value === \"*\") {\n        inGenerator = true;\n        advance();\n      }\n\n      token = state.tokens.next;\n\n      if ((token.value === \"set\" || token.value === \"get\") && !checkPunctuator(peek(), \"(\")) {\n        if (inGenerator) {\n          error(\"E024\", token, token.value);\n        }\n        accessorType = token.value;\n        advance();\n        token = state.tokens.next;\n\n        if (!isStatic && token.value === \"constructor\") {\n          error(\"E049\", token, \"class \" + accessorType + \"ter method\", token.value);\n        } else if (isStatic && token.value === \"prototype\") {\n          error(\"E049\", token, \"static class \" + accessorType + \"ter method\", token.value);\n        }\n      } else {\n        accessorType = null;\n      }\n\n      switch (token.value) {\n        case \";\":\n          warning(\"W032\", token);\n          advance();\n          break;\n        case \"constructor\":\n          if (isStatic) {\n            name = propertyName(context);\n            saveProperty(props, name, token, true, isStatic);\n            doMethod(classToken, context, name, inGenerator);\n          } else {\n            if (inGenerator || context & prodParams.preAsync) {\n              error(\"E024\", token, token.value);\n            } else if (hasConstructor) {\n              error(\"E024\", token, token.value);\n            } else {\n              hasConstructor = !accessorType && !isStatic;\n            }\n            advance();\n            doMethod(classToken, context, state.nameStack.infer());\n          }\n          break;\n        case \"[\":\n          name = computedPropertyName(context);\n          doMethod(classToken, context, name, inGenerator);\n          break;\n        default:\n          name = propertyName(context);\n          if (name === undefined) {\n            error(\"E024\", token, token.value);\n            advance();\n            break;\n          }\n\n          if (accessorType) {\n            saveAccessor(accessorType, props, name, token, true, isStatic);\n            name = state.nameStack.infer();\n          } else {\n            if (isStatic && name === \"prototype\") {\n              error(\"E049\", token, \"static class method\", name);\n            }\n\n            saveProperty(props, name, token, true, isStatic);\n          }\n\n          doMethod(classToken, context, name, inGenerator);\n          break;\n      }\n    }\n    advance(\"}\");\n    checkProperties(props);\n\n    state.inClassBody = false;\n    state.funct[\"(scope)\"].unstack();\n  }\n\n  function doMethod(classToken, context, name, generator) {\n    if (generator) {\n      if (!state.inES6()) {\n        warning(\"W119\", state.tokens.curr, \"function*\", \"6\");\n      }\n    }\n\n    if (state.tokens.next.value !== \"(\") {\n      error(\"E054\", state.tokens.next, state.tokens.next.value);\n      advance();\n      if (state.tokens.next.value === \"{\") {\n        advance();\n        if (state.tokens.next.value === \"}\") {\n          warning(\"W116\", state.tokens.next, \"(\", state.tokens.next.value);\n          advance();\n          identifier(context);\n          advance();\n        }\n        return;\n      } else {\n        while (state.tokens.next.value !== \"(\") {\n          advance();\n        }\n      }\n    }\n\n    doFunction(context, { name: name,\n        type: generator ? \"generator\" : null,\n        isMethod: true,\n        statement: classToken });\n  }\n\n  prefix(\"void\").exps = true;\n\n  infix(\".\", function(context, left, that) {\n    var m = identifier(context, true);\n\n    if (typeof m === \"string\") {\n      countMember(m);\n    }\n\n    that.left = left;\n    that.right = m;\n\n    if (m && m === \"hasOwnProperty\" && state.tokens.next.value === \"=\") {\n      warning(\"W001\");\n    }\n\n    if (left && left.value === \"arguments\" && (m === \"callee\" || m === \"caller\")) {\n      if (state.option.noarg)\n        warning(\"W059\", left, m);\n      else if (state.isStrict())\n        error(\"E008\");\n    } else if (!state.option.evil && left && left.value === \"document\" &&\n        (m === \"write\" || m === \"writeln\")) {\n      warning(\"W060\", left);\n    }\n\n    if (!state.option.evil && (m === \"eval\" || m === \"execScript\")) {\n      if (isGlobalEval(left, state)) {\n        warning(\"W061\");\n      }\n    }\n\n    return that;\n  }, 160, true);\n\n  infix(\"?.\", function(context, left, that) {\n    if (!state.inES11()) {\n      warning(\"W119\", state.tokens.curr, \"Optional chaining\", \"11\");\n    }\n\n\n    if (checkPunctuator(state.tokens.next, \"[\")) {\n      that.left = left;\n      advance();\n      that.right = state.tokens.curr.led(context, left);\n    } else if (checkPunctuator(state.tokens.next, \"(\")) {\n      that.left = left;\n      advance();\n      that.right = state.tokens.curr.led(context, left);\n      that.exps = true;\n    } else {\n      state.syntax[\".\"].led.call(that, context, left);\n    }\n\n    if (state.tokens.next.type === \"(template)\") {\n      error(\"E024\", state.tokens.next, \"`\");\n    }\n\n    return that;\n  }, 160, true);\n  function isTypicalCallExpression(token) {\n    return token.identifier || token.id === \".\" || token.id === \"[\" ||\n      token.id === \"=>\" || token.id === \"(\" || token.id === \"&&\" ||\n      token.id === \"||\" || token.id === \"?\" || token.id === \"async\" ||\n      token.id === \"?.\" || (state.inES6() && token[\"(name)\"]);\n  }\n\n  infix(\"(\", function(context, left, that) {\n    if (state.option.immed && left && !left.immed && left.id === \"function\") {\n      warning(\"W062\");\n    }\n\n    if (state.option.asi && checkPunctuators(state.tokens.prev, [\")\", \"]\"]) &&\n      !sameLine(state.tokens.prev, state.tokens.curr)) {\n      warning(\"W014\", state.tokens.curr, state.tokens.curr.id);\n    }\n\n    var n = 0;\n    var p = [];\n\n    if (left) {\n      if (left.type === \"(identifier)\") {\n        var newcapRe = /^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/;\n        var newcapIgnore = [\n          \"Array\", \"Boolean\", \"Date\", \"Error\", \"Function\", \"Number\",\n          \"Object\", \"RegExp\", \"String\", \"Symbol\"\n        ];\n        if (newcapRe.test(left.value) && newcapIgnore.indexOf(left.value) === -1) {\n          if (left.value === \"Math\") {\n            warning(\"W063\", left);\n          } else if (state.option.newcap) {\n            warning(\"W064\", left);\n          }\n        }\n      }\n    }\n\n    if (state.tokens.next.id !== \")\") {\n      for (;;) {\n        spreadrest(\"spread\");\n\n        p[p.length] = expression(context, 10);\n        n += 1;\n        if (state.tokens.next.id !== \",\") {\n          break;\n        }\n        advance(\",\");\n        checkComma({ allowTrailing: true });\n\n        if (state.tokens.next.id === \")\") {\n          if (!state.inES8()) {\n            warning(\"W119\", state.tokens.curr, \"Trailing comma in arguments lists\", \"8\");\n          }\n\n          break;\n        }\n      }\n    }\n\n    advance(\")\");\n\n    if (typeof left === \"object\") {\n      if (!state.inES5() && left.value === \"parseInt\" && n === 1) {\n        warning(\"W065\", state.tokens.curr);\n      }\n      if (!state.option.evil) {\n        if (left.value === \"eval\" || left.value === \"Function\" ||\n            left.value === \"execScript\") {\n          warning(\"W061\", left);\n        } else if (p[0] && p[0].id === \"(string)\" &&\n             (left.value === \"setTimeout\" ||\n            left.value === \"setInterval\")) {\n          warning(\"W066\", left);\n          addEvalCode(left, p[0]);\n        } else if (p[0] && p[0].id === \"(string)\" &&\n             left.value === \".\" &&\n             left.left.value === \"window\" &&\n             (left.right === \"setTimeout\" ||\n            left.right === \"setInterval\")) {\n          warning(\"W066\", left);\n          addEvalCode(left, p[0]);\n        }\n      }\n      if (!isTypicalCallExpression(left)) {\n        warning(\"W067\", that);\n      }\n    }\n\n    that.left = left;\n    return that;\n  }, 155, true).exps = true;\n\n  function peekThroughParens(parens) {\n    var pn = state.tokens.next;\n    var i = -1;\n    var pn1;\n\n    do {\n      if (pn.value === \"(\") {\n        parens += 1;\n      } else if (pn.value === \")\") {\n        parens -= 1;\n      }\n\n      i += 1;\n      pn1 = pn;\n      pn = peek(i);\n    } while (!(parens === 0 && pn1.value === \")\") && pn.type !== \"(end)\");\n\n    return pn;\n  }\n\n  prefix(\"(\", function(context, rbp) {\n    var ret, triggerFnExpr, first, last;\n    var opening = state.tokens.curr;\n    var preceeding = state.tokens.prev;\n    var isNecessary = !state.option.singleGroups;\n    var pn = peekThroughParens(1);\n\n    if (state.tokens.next.id === \"function\") {\n      triggerFnExpr = state.tokens.next.immed = true;\n    }\n    if (pn.value === \"=>\") {\n      pn.funct = doFunction(context, { type: \"arrow\", parsedOpening: true });\n      return pn;\n    }\n    if (state.tokens.next.id === \")\") {\n      advance(\")\");\n      return;\n    }\n\n    ret = expression(context, 0);\n\n    advance(\")\", this);\n\n    if (!ret) {\n      return;\n    }\n\n    ret.paren = true;\n\n    if (state.option.immed && ret && ret.id === \"function\") {\n      if (state.tokens.next.id !== \"(\" &&\n        state.tokens.next.id !== \".\" && state.tokens.next.id !== \"[\") {\n        warning(\"W068\", this);\n      }\n    }\n\n    if (ret.id === \",\") {\n      first = ret.left;\n      while (first.id === \",\") {\n        first = first.left;\n      }\n\n      last = ret.right;\n    } else {\n      first = last = ret;\n\n      if (!isNecessary) {\n        if (!triggerFnExpr) {\n          triggerFnExpr = ret.id === \"async\";\n        }\n\n        isNecessary =\n          (opening.beginsStmt && (ret.id === \"{\" || triggerFnExpr)) ||\n          (triggerFnExpr &&\n            (!isEndOfExpr() || state.tokens.prev.id !== \"}\")) ||\n          (ret.id === \"=>\" && !isEndOfExpr()) ||\n          (ret.id === \"{\" && preceeding.id === \"=>\") ||\n          (beginsUnaryExpression(ret) && state.tokens.next.id === \"**\") ||\n          (preceeding.id === \"??\" && (ret.id === \"&&\" || ret.id === \"||\")) ||\n          (ret.type === \"(number)\" &&\n            checkPunctuator(pn, \".\") && /^\\d+$/.test(ret.value)) ||\n          (opening.beginsStmt && ret.id === \"=\" && ret.left.id === \"{\") ||\n          (ret.id === \"?.\" &&\n              (preceeding.id === \"new\" || state.tokens.next.type === \"(template)\"));\n      }\n    }\n    if (!isNecessary && (isOperator(first) || first !== last)) {\n      isNecessary =\n        (rbp > first.lbp) ||\n        (rbp > 0 && rbp === first.lbp) ||\n        (!isEndOfExpr() && last.rbp < state.tokens.next.lbp);\n    }\n\n    if (!isNecessary) {\n      warning(\"W126\", opening);\n    }\n\n    return ret;\n  });\n\n  application(\"=>\").rbp = 161;\n\n  infix(\"[\", function(context, left, that) {\n    var e, s, canUseDot;\n\n    if (state.option.asi && checkPunctuators(state.tokens.prev, [\")\", \"]\"]) &&\n      !sameLine(state.tokens.prev, state.tokens.curr)) {\n      warning(\"W014\", state.tokens.curr, state.tokens.curr.id);\n    }\n\n    e = expression(context & ~prodParams.noin, 0);\n\n    if (e && e.type === \"(string)\") {\n      if (!state.option.evil && (e.value === \"eval\" || e.value === \"execScript\")) {\n        if (isGlobalEval(left, state)) {\n          warning(\"W061\");\n        }\n      }\n\n      countMember(e.value);\n      if (!state.option.sub && reg.identifier.test(e.value)) {\n        s = state.syntax[e.value];\n\n        if (s) {\n          canUseDot = !isReserved(context, s);\n        } else {\n          canUseDot = e.value !== \"eval\" && e.value !== \"arguments\";\n        }\n\n        if (canUseDot) {\n          warning(\"W069\", state.tokens.prev, e.value);\n        }\n      }\n    }\n    advance(\"]\", that);\n\n    if (e && e.value === \"hasOwnProperty\" && state.tokens.next.value === \"=\") {\n      warning(\"W001\");\n    }\n\n    that.left = left;\n    that.right = e;\n    return that;\n  }, 160, true);\n\n  function comprehensiveArrayExpression(context) {\n    var res = {};\n    res.exps = true;\n    state.funct[\"(comparray)\"].stack();\n    var reversed = false;\n    if (state.tokens.next.value !== \"for\") {\n      reversed = true;\n      if (!state.inMoz()) {\n        warning(\"W116\", state.tokens.next, \"for\", state.tokens.next.value);\n      }\n      state.funct[\"(comparray)\"].setState(\"use\");\n      res.right = expression(context, 10);\n    }\n\n    advance(\"for\");\n    if (state.tokens.next.value === \"each\") {\n      advance(\"each\");\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"for each\");\n      }\n    }\n    advance(\"(\");\n    state.funct[\"(comparray)\"].setState(\"define\");\n    res.left = expression(context, 130);\n    if (_.includes([\"in\", \"of\"], state.tokens.next.value)) {\n      advance();\n    } else {\n      error(\"E045\", state.tokens.curr);\n    }\n    state.funct[\"(comparray)\"].setState(\"generate\");\n    expression(context, 10);\n\n    advance(\")\");\n    if (state.tokens.next.value === \"if\") {\n      advance(\"if\");\n      advance(\"(\");\n      state.funct[\"(comparray)\"].setState(\"filter\");\n      expression(context, 10);\n      advance(\")\");\n    }\n\n    if (!reversed) {\n      state.funct[\"(comparray)\"].setState(\"use\");\n      res.right = expression(context, 10);\n    }\n\n    advance(\"]\");\n    state.funct[\"(comparray)\"].unstack();\n    return res;\n  }\n\n  prefix(\"[\", function(context) {\n    var blocktype = lookupBlockType();\n    if (blocktype.isCompArray) {\n      if (!state.option.esnext && !state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"array comprehension\");\n      }\n      return comprehensiveArrayExpression(context);\n    } else if (blocktype.isDestAssign) {\n      this.destructAssign = destructuringPattern(context, {\n          openingParsed: true,\n          assignment: true\n        });\n      return this;\n    }\n    var b = !sameLine(state.tokens.curr, state.tokens.next);\n    this.first = [];\n    if (b) {\n      indent += state.option.indent;\n      if (state.tokens.next.from === indent + state.option.indent) {\n        indent += state.option.indent;\n      }\n    }\n    while (state.tokens.next.id !== \"(end)\") {\n      while (state.tokens.next.id === \",\") {\n        if (!state.option.elision) {\n          if (!state.inES5()) {\n            warning(\"W070\");\n          } else {\n            warning(\"W128\");\n            do {\n              advance(\",\");\n            } while (state.tokens.next.id === \",\");\n            continue;\n          }\n        }\n        advance(\",\");\n      }\n\n      if (state.tokens.next.id === \"]\") {\n        break;\n      }\n\n      spreadrest(\"spread\");\n\n      this.first.push(expression(context, 10));\n      if (state.tokens.next.id === \",\") {\n        advance(\",\");\n        checkComma({ allowTrailing: true });\n        if (state.tokens.next.id === \"]\" && !state.inES5()) {\n          warning(\"W070\", state.tokens.curr);\n          break;\n        }\n      } else {\n        if (state.option.trailingcomma && state.inES5()) {\n          warningAt(\"W140\", state.tokens.curr.line, state.tokens.curr.character);\n        }\n        break;\n      }\n    }\n    if (b) {\n      indent -= state.option.indent;\n    }\n    advance(\"]\", this);\n    return this;\n  });\n\n\n  function isMethod() {\n    return !!state.funct[\"(method)\"];\n  }\n  function propertyName(context) {\n    var id = optionalidentifier(context, true);\n\n    if (!id) {\n      if (state.tokens.next.id === \"(string)\") {\n        id = state.tokens.next.value;\n        advance();\n      } else if (state.tokens.next.id === \"(number)\") {\n        id = state.tokens.next.value.toString();\n        advance();\n      }\n    }\n\n    if (id === \"hasOwnProperty\") {\n      warning(\"W001\");\n    }\n\n    return id;\n  }\n  function functionparams(context, options) {\n    var next;\n    var paramsIds = [];\n    var ident;\n    var tokens = [];\n    var t;\n    var pastDefault = false;\n    var pastRest = false;\n    var arity = 0;\n    var loneArg = options && options.loneArg;\n    var hasDestructuring = false;\n\n    if (loneArg && loneArg.identifier === true) {\n      state.funct[\"(scope)\"].addParam(loneArg.value, loneArg);\n      return { arity: 1, params: [ loneArg.value ], isSimple: true };\n    }\n\n    next = state.tokens.next;\n\n    if (!options || !options.parsedOpening) {\n      advance(\"(\");\n    }\n\n    if (state.tokens.next.id === \")\") {\n      advance(\")\");\n      return;\n    }\n\n    function addParam(addParamArgs) {\n      state.funct[\"(scope)\"].addParam.apply(state.funct[\"(scope)\"], addParamArgs);\n    }\n\n    for (;;) {\n      arity++;\n      var currentParams = [];\n\n      pastRest = spreadrest(\"rest\");\n\n      if (_.includes([\"{\", \"[\"], state.tokens.next.id)) {\n        hasDestructuring = true;\n        tokens = destructuringPattern(context);\n        for (t in tokens) {\n          t = tokens[t];\n          if (t.id) {\n            paramsIds.push(t.id);\n            currentParams.push([t.id, t.token]);\n          }\n        }\n      } else {\n        ident = identifier(context);\n\n        if (ident) {\n          paramsIds.push(ident);\n          currentParams.push([ident, state.tokens.curr]);\n        } else {\n          while (!checkPunctuators(state.tokens.next, [\",\", \")\"])) advance();\n        }\n      }\n      if (pastDefault) {\n        if (state.tokens.next.id !== \"=\") {\n          error(\"W138\", state.tokens.curr);\n        }\n      }\n      if (state.tokens.next.id === \"=\") {\n        if (!state.inES6()) {\n          warning(\"W119\", state.tokens.next, \"default parameters\", \"6\");\n        }\n\n        if (pastRest) {\n          error(\"E062\", state.tokens.next);\n        }\n\n        advance(\"=\");\n        pastDefault = true;\n        expression(context, 10);\n      }\n      currentParams.forEach(addParam);\n      if (state.tokens.next.id === \",\") {\n        if (pastRest) {\n          warning(\"W131\", state.tokens.next);\n        }\n        advance(\",\");\n        checkComma({ allowTrailing: true });\n      }\n\n      if (state.tokens.next.id === \")\") {\n        if (state.tokens.curr.id === \",\" && !state.inES8()) {\n          warning(\"W119\", state.tokens.curr, \"Trailing comma in function parameters\", \"8\");\n        }\n\n        advance(\")\", next);\n        return {\n          arity: arity,\n          params: paramsIds,\n          isSimple: !hasDestructuring && !pastRest && !pastDefault\n        };\n      }\n    }\n  }\n  function functor(name, token, overwrites) {\n    var funct = {\n      \"(name)\"      : name,\n      \"(breakage)\"  : 0,\n      \"(loopage)\"   : 0,\n      \"(isStrict)\"  : \"unknown\",\n\n      \"(global)\"    : false,\n\n      \"(line)\"      : null,\n      \"(character)\" : null,\n      \"(metrics)\"   : null,\n      \"(statement)\" : null,\n      \"(context)\"   : null,\n      \"(scope)\"     : null,\n      \"(comparray)\" : null,\n      \"(yielded)\"   : null,\n      \"(arrow)\"     : null,\n      \"(async)\"     : null,\n      \"(params)\"    : null\n    };\n\n    if (token) {\n      _.extend(funct, {\n        \"(line)\"     : token.line,\n        \"(character)\": token.character,\n        \"(metrics)\"  : createMetrics(token)\n      });\n    }\n\n    _.extend(funct, overwrites);\n\n    if (funct[\"(context)\"]) {\n      funct[\"(scope)\"] = funct[\"(context)\"][\"(scope)\"];\n      funct[\"(comparray)\"]  = funct[\"(context)\"][\"(comparray)\"];\n    }\n\n    return funct;\n  }\n  function hasParsedCode(funct) {\n    return funct[\"(global)\"] && !funct[\"(verb)\"];\n  }\n  function doTemplateLiteral(context, leftOrRbp) {\n    var ctx = this.context;\n    var noSubst = this.noSubst;\n    var depth = this.depth;\n    var left = typeof leftOrRbp === \"number\" ? null : leftOrRbp;\n\n    if (!noSubst) {\n      while (!end()) {\n        if (!state.tokens.next.template || state.tokens.next.depth > depth) {\n          expression(context, 0); // should probably have different rbp?\n        } else {\n          advance();\n        }\n      }\n    }\n\n    return {\n      id: \"(template)\",\n      type: \"(template)\",\n      tag: left\n    };\n\n    function end() {\n      if (state.tokens.curr.template && state.tokens.curr.tail &&\n          state.tokens.curr.context === ctx) {\n        return true;\n      }\n      var complete = (state.tokens.next.template && state.tokens.next.tail &&\n                      state.tokens.next.context === ctx);\n      if (complete) advance();\n      return complete || state.tokens.next.isUnclosed;\n    }\n  }\n  function doFunction(context, options) {\n    var f, token, name, statement, classExprBinding, isGenerator, isArrow,\n      isMethod, ignoreLoopFunc;\n    var oldOption = state.option;\n    var oldIgnored = state.ignored;\n    var isAsync = context & prodParams.preAsync;\n\n    if (options) {\n      name = options.name;\n      statement = options.statement;\n      classExprBinding = options.classExprBinding;\n      isGenerator = options.type === \"generator\";\n      isArrow = options.type === \"arrow\";\n      isMethod = options.isMethod;\n      ignoreLoopFunc = options.ignoreLoopFunc;\n    }\n\n    context &= ~prodParams.noin;\n    context &= ~prodParams.tryClause;\n\n    if (isAsync) {\n      context |= prodParams.async;\n    } else {\n      context &= ~prodParams.async;\n    }\n\n    if (isGenerator) {\n      context |= prodParams.yield;\n    } else if (!isArrow) {\n      context &= ~prodParams.yield;\n    }\n    context &= ~prodParams.preAsync;\n\n    state.option = Object.create(state.option);\n    state.ignored = Object.create(state.ignored);\n\n    state.funct = functor(name || state.nameStack.infer(), state.tokens.next, {\n      \"(statement)\": statement,\n      \"(context)\":   state.funct,\n      \"(arrow)\":     isArrow,\n      \"(method)\":    isMethod,\n      \"(async)\":     isAsync\n    });\n\n    f = state.funct;\n    token = state.tokens.curr;\n\n    functions.push(state.funct);\n    state.funct[\"(scope)\"].stack(\"functionouter\");\n    var internallyAccessibleName = !isMethod && (name || classExprBinding);\n    if (internallyAccessibleName) {\n      state.funct[\"(scope)\"].block.add(internallyAccessibleName,\n        classExprBinding ? \"class\" : \"function\", state.tokens.curr, false);\n    }\n\n    if (!isArrow) {\n      state.funct[\"(scope)\"].funct.add(\"arguments\", \"var\", token, false);\n    }\n    state.funct[\"(scope)\"].stack(\"functionparams\");\n\n    var paramsInfo = functionparams(context, options);\n\n    if (paramsInfo) {\n      state.funct[\"(params)\"] = paramsInfo.params;\n      state.funct[\"(hasSimpleParams)\"] = paramsInfo.isSimple;\n      state.funct[\"(metrics)\"].arity = paramsInfo.arity;\n      state.funct[\"(metrics)\"].verifyMaxParametersPerFunction();\n    } else {\n      state.funct[\"(params)\"] = [];\n      state.funct[\"(metrics)\"].arity = 0;\n      state.funct[\"(hasSimpleParams)\"] = true;\n    }\n\n    if (isArrow) {\n      context &= ~prodParams.yield;\n\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.curr, \"arrow function syntax (=>)\", \"6\");\n      }\n\n      if (!options.loneArg) {\n        advance(\"=>\");\n      }\n    }\n\n    block(context, false, true, true, isArrow);\n\n    if (!state.option.noyield && isGenerator && !state.funct[\"(yielded)\"]) {\n      warning(\"W124\", state.tokens.curr);\n    }\n\n    state.funct[\"(metrics)\"].verifyMaxStatementsPerFunction();\n    state.funct[\"(metrics)\"].verifyMaxComplexityPerFunction();\n    state.funct[\"(unusedOption)\"] = state.option.unused;\n    state.option = oldOption;\n    state.ignored = oldIgnored;\n    state.funct[\"(last)\"] = state.tokens.curr.line;\n    state.funct[\"(lastcharacter)\"] = state.tokens.curr.character;\n    state.funct[\"(scope)\"].unstack(); // also does usage and label checks\n    state.funct[\"(scope)\"].unstack();\n\n    state.funct = state.funct[\"(context)\"];\n\n    if (!ignoreLoopFunc && !state.option.loopfunc && state.funct[\"(loopage)\"]) {\n      if (f[\"(outerMutables)\"]) {\n        warning(\"W083\", token, f[\"(outerMutables)\"].join(\", \"));\n      }\n    }\n\n    return f;\n  }\n\n  function createMetrics(functionStartToken) {\n    return {\n      statementCount: 0,\n      nestedBlockDepth: -1,\n      ComplexityCount: 1,\n      arity: 0,\n\n      verifyMaxStatementsPerFunction: function() {\n        if (state.option.maxstatements &&\n          this.statementCount > state.option.maxstatements) {\n          warning(\"W071\", functionStartToken, this.statementCount);\n        }\n      },\n\n      verifyMaxParametersPerFunction: function() {\n        if (_.isNumber(state.option.maxparams) &&\n          this.arity > state.option.maxparams) {\n          warning(\"W072\", functionStartToken, this.arity);\n        }\n      },\n\n      verifyMaxNestedBlockDepthPerFunction: function() {\n        if (state.option.maxdepth &&\n          this.nestedBlockDepth > 0 &&\n          this.nestedBlockDepth === state.option.maxdepth + 1) {\n          warning(\"W073\", null, this.nestedBlockDepth);\n        }\n      },\n\n      verifyMaxComplexityPerFunction: function() {\n        var max = state.option.maxcomplexity;\n        var cc = this.ComplexityCount;\n        if (max && cc > max) {\n          warning(\"W074\", functionStartToken, cc);\n        }\n      }\n    };\n  }\n\n  function increaseComplexityCount() {\n    state.funct[\"(metrics)\"].ComplexityCount += 1;\n  }\n\n  function checkCondAssignment(token) {\n    if (!token || token.paren) {\n      return;\n    }\n\n    if (token.id === \",\") {\n      checkCondAssignment(token.right);\n      return;\n    }\n\n    switch (token.id) {\n    case \"=\":\n    case \"+=\":\n    case \"-=\":\n    case \"*=\":\n    case \"%=\":\n    case \"&=\":\n    case \"|=\":\n    case \"^=\":\n    case \"/=\":\n      if (!state.option.boss) {\n        warning(\"W084\", token);\n      }\n    }\n  }\n  function checkProperties(props) {\n    if (state.inES5()) {\n      for (var name in props) {\n        if (props[name] && props[name].setterToken && !props[name].getterToken &&\n          !props[name].static) {\n          warning(\"W078\", props[name].setterToken);\n        }\n      }\n    }\n  }\n\n  function metaProperty(context, name, c) {\n    if (checkPunctuator(state.tokens.next, \".\")) {\n      var left = state.tokens.curr.id;\n      advance(\".\");\n      var id = identifier(context);\n      state.tokens.curr.isMetaProperty = true;\n      if (name !== id) {\n        error(\"E057\", state.tokens.prev, left, id);\n      } else {\n        c();\n      }\n      return state.tokens.curr;\n    }\n  }\n  (function(x) {\n    x.nud = function(context) {\n      var b, f, i, params, t, isGeneratorMethod = false, nextVal;\n      var props = Object.create(null); // All properties, including accessors\n      var isAsyncMethod = false;\n\n      b = !sameLine(state.tokens.curr, state.tokens.next);\n      if (b) {\n        indent += state.option.indent;\n        if (state.tokens.next.from === indent + state.option.indent) {\n          indent += state.option.indent;\n        }\n      }\n\n      var blocktype = lookupBlockType();\n      if (blocktype.isDestAssign) {\n        this.destructAssign = destructuringPattern(context, {\n            openingParsed: true,\n            assignment: true\n          });\n        return this;\n      }\n      state.inObjectBody = true;\n      for (;;) {\n        if (state.tokens.next.id === \"}\") {\n          break;\n        }\n\n        nextVal = state.tokens.next.value;\n        if (state.tokens.next.identifier &&\n            (peekIgnoreEOL().id === \",\" || peekIgnoreEOL().id === \"}\")) {\n          if (!state.inES6()) {\n            warning(\"W104\", state.tokens.next, \"object short notation\", \"6\");\n          }\n          t = expression(context, 10);\n          i = t && t.value;\n          if (t) {\n            saveProperty(props, i, t);\n          }\n\n        } else if (peek().id !== \":\" && (nextVal === \"get\" || nextVal === \"set\")) {\n          advance(nextVal);\n\n          if (!state.inES5()) {\n            error(\"E034\");\n          }\n\n          if (state.tokens.next.id === \"[\") {\n            i = computedPropertyName(context);\n          } else {\n            i = propertyName(context);\n            if (!i && !state.inES6()) {\n              error(\"E035\");\n            }\n          }\n          if (i) {\n            saveAccessor(nextVal, props, i, state.tokens.curr);\n          }\n\n          t = state.tokens.next;\n          f = doFunction(context, { isMethod: true });\n          params = f[\"(params)\"];\n          if (nextVal === \"get\" && i && params.length) {\n            warning(\"W076\", t, params[0], i);\n          } else if (nextVal === \"set\" && i && f[\"(metrics)\"].arity !== 1) {\n            warning(\"W077\", t, i);\n          }\n\n        } else if (spreadrest(\"spread\")) {\n          if (!state.inES9()) {\n            warning(\"W119\", state.tokens.next, \"object spread property\", \"9\");\n          }\n\n          expression(context, 10);\n        } else {\n          if (state.tokens.next.id === \"async\" && !checkPunctuators(peek(), [\"(\", \":\"])) {\n            if (!state.inES8()) {\n              warning(\"W119\", state.tokens.next, \"async functions\", \"8\");\n            }\n\n            isAsyncMethod = true;\n            advance();\n\n            nolinebreak(state.tokens.curr);\n          } else {\n            isAsyncMethod = false;\n          }\n\n          if (state.tokens.next.value === \"*\" && state.tokens.next.type === \"(punctuator)\") {\n            if (isAsyncMethod && !state.inES9()) {\n              warning(\"W119\", state.tokens.next, \"async generators\", \"9\");\n            } else if (!state.inES6()) {\n              warning(\"W104\", state.tokens.next, \"generator functions\", \"6\");\n            }\n\n            advance(\"*\");\n            isGeneratorMethod = true;\n          } else {\n            isGeneratorMethod = false;\n          }\n\n          if (state.tokens.next.id === \"[\") {\n            i = computedPropertyName(context);\n            state.nameStack.set(i);\n          } else {\n            state.nameStack.set(state.tokens.next);\n            i = propertyName(context);\n            saveProperty(props, i, state.tokens.next);\n\n            if (typeof i !== \"string\") {\n              break;\n            }\n          }\n\n          if (state.tokens.next.value === \"(\") {\n            if (!state.inES6()) {\n              warning(\"W104\", state.tokens.curr, \"concise methods\", \"6\");\n            }\n\n            doFunction(isAsyncMethod ? context | prodParams.preAsync : context, {\n              isMethod: true,\n              type: isGeneratorMethod ? \"generator\" : null\n            });\n          } else {\n            advance(\":\");\n            expression(context, 10);\n          }\n        }\n\n        countMember(i);\n\n        if (state.tokens.next.id === \",\") {\n          advance(\",\");\n          checkComma({ allowTrailing: true, property: true });\n          if (state.tokens.next.id === \",\") {\n            warning(\"W070\", state.tokens.curr);\n          } else if (state.tokens.next.id === \"}\" && !state.inES5()) {\n            warning(\"W070\", state.tokens.curr);\n          }\n        } else {\n          if (state.option.trailingcomma && state.inES5()) {\n            warningAt(\"W140\", state.tokens.curr.line, state.tokens.curr.character);\n          }\n          break;\n        }\n      }\n      if (b) {\n        indent -= state.option.indent;\n      }\n      advance(\"}\", this);\n\n      checkProperties(props);\n      state.inObjectBody = false;\n\n      return this;\n    };\n    x.fud = function() {\n      error(\"E036\", state.tokens.curr);\n    };\n  }(delim(\"{\")));\n\n  function destructuringPattern(context, options) {\n    var isAssignment = options && options.assignment;\n\n    context &= ~prodParams.noin;\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr,\n        isAssignment ? \"destructuring assignment\" : \"destructuring binding\", \"6\");\n    }\n\n    return destructuringPatternRecursive(context, options);\n  }\n\n  function destructuringPatternRecursive(context, options) {\n    var ids, idx;\n    var identifiers = [];\n    var openingParsed = options && options.openingParsed;\n    var isAssignment = options && options.assignment;\n    var recursiveOptions = isAssignment ? { assignment: isAssignment } : null;\n    var firstToken = openingParsed ? state.tokens.curr : state.tokens.next;\n\n    var nextInnerDE = function() {\n      var ident;\n      if (checkPunctuators(state.tokens.next, [\"[\", \"{\"])) {\n        ids = destructuringPatternRecursive(context, recursiveOptions);\n        for (idx = 0; idx < ids.length; idx++) {\n          identifiers.push({ id: ids[idx].id, token: ids[idx].token });\n        }\n      } else if (checkPunctuator(state.tokens.next, \",\")) {\n        identifiers.push({ id: null, token: state.tokens.curr });\n      } else if (checkPunctuator(state.tokens.next, \"(\")) {\n        advance(\"(\");\n        nextInnerDE();\n        advance(\")\");\n      } else {\n        if (isAssignment) {\n          var assignTarget = expression(context, 20);\n          if (assignTarget) {\n            checkLeftSideAssign(context, assignTarget);\n            if (assignTarget.identifier) {\n              ident = assignTarget.value;\n            }\n          }\n        } else {\n          ident = identifier(context);\n        }\n        if (ident) {\n          identifiers.push({ id: ident, token: state.tokens.curr });\n        }\n      }\n    };\n\n    var assignmentProperty = function(context) {\n      var id, expr;\n\n      if (checkPunctuator(state.tokens.next, \"[\")) {\n        advance(\"[\");\n        expression(context, 10);\n        advance(\"]\");\n        advance(\":\");\n        nextInnerDE();\n      } else if (state.tokens.next.id === \"(string)\" ||\n                 state.tokens.next.id === \"(number)\") {\n        advance();\n        advance(\":\");\n        nextInnerDE();\n      } else {\n        var isRest = spreadrest(\"rest\");\n\n        if (isRest) {\n          if (!state.inES9()) {\n            warning(\"W119\", state.tokens.next, \"object rest property\", \"9\");\n          }\n          if (state.tokens.next.type === \"(identifier)\") {\n            id = identifier(context);\n          } else {\n            expr = expression(context, 10);\n            error(\"E030\", expr, expr.value);\n          }\n        } else {\n          id = identifier(context);\n        }\n\n        if (!isRest && checkPunctuator(state.tokens.next, \":\")) {\n          advance(\":\");\n          nextInnerDE();\n        } else if (id) {\n          if (isAssignment) {\n            checkLeftSideAssign(context, state.tokens.curr);\n          }\n          identifiers.push({ id: id, token: state.tokens.curr });\n        }\n\n        if (isRest && checkPunctuator(state.tokens.next, \",\")) {\n          warning(\"W130\", state.tokens.next);\n        }\n      }\n    };\n\n    var id, value;\n    if (checkPunctuator(firstToken, \"[\")) {\n      if (!openingParsed) {\n        advance(\"[\");\n      }\n      if (checkPunctuator(state.tokens.next, \"]\")) {\n        warning(\"W137\", state.tokens.curr);\n      }\n      var element_after_rest = false;\n      while (!checkPunctuator(state.tokens.next, \"]\")) {\n        var isRest = spreadrest(\"rest\");\n\n        nextInnerDE();\n\n        if (isRest && !element_after_rest &&\n            checkPunctuator(state.tokens.next, \",\")) {\n          warning(\"W130\", state.tokens.next);\n          element_after_rest = true;\n        }\n        if (!isRest && checkPunctuator(state.tokens.next, \"=\")) {\n          if (checkPunctuator(state.tokens.prev, \"...\")) {\n            advance(\"]\");\n          } else {\n            advance(\"=\");\n          }\n          id = state.tokens.prev;\n          value = expression(context, 10);\n          if (value && value.identifier && value.value === \"undefined\") {\n            warning(\"W080\", id, id.value);\n          }\n        }\n        if (!checkPunctuator(state.tokens.next, \"]\")) {\n          advance(\",\");\n        }\n      }\n      advance(\"]\");\n    } else if (checkPunctuator(firstToken, \"{\")) {\n\n      if (!openingParsed) {\n        advance(\"{\");\n      }\n      if (checkPunctuator(state.tokens.next, \"}\")) {\n        warning(\"W137\", state.tokens.curr);\n      }\n      while (!checkPunctuator(state.tokens.next, \"}\")) {\n        assignmentProperty(context);\n        if (checkPunctuator(state.tokens.next, \"=\")) {\n          advance(\"=\");\n          id = state.tokens.prev;\n          value = expression(context, 10);\n          if (value && value.identifier && value.value === \"undefined\") {\n            warning(\"W080\", id, id.value);\n          }\n        }\n        if (!checkPunctuator(state.tokens.next, \"}\")) {\n          advance(\",\");\n          if (checkPunctuator(state.tokens.next, \"}\")) {\n            break;\n          }\n        }\n      }\n      advance(\"}\");\n    }\n    return identifiers;\n  }\n\n  function destructuringPatternMatch(tokens, value) {\n    var first = value.first;\n\n    if (!first)\n      return;\n\n    _.zip(tokens, Array.isArray(first) ? first : [ first ]).forEach(function(val) {\n      var token = val[0];\n      var value = val[1];\n\n      if (token && value)\n        token.first = value;\n      else if (token && token.first && !value)\n        warning(\"W080\", token.first, token.first.value);\n    });\n  }\n\n  function blockVariableStatement(type, statement, context) {\n\n    var noin = context & prodParams.noin;\n    var isLet = type === \"let\";\n    var isConst = type === \"const\";\n    var tokens, lone, value, letblock;\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, type, \"6\");\n    }\n\n    if (isLet && isMozillaLet()) {\n      advance(\"(\");\n      state.funct[\"(scope)\"].stack();\n      letblock = true;\n      statement.declaration = false;\n    }\n\n    statement.first = [];\n    for (;;) {\n      var names = [];\n      if (_.includes([\"{\", \"[\"], state.tokens.next.value)) {\n        tokens = destructuringPattern(context);\n        lone = false;\n      } else {\n        tokens = [ { id: identifier(context), token: state.tokens.curr } ];\n        lone = true;\n      }\n      if (!noin && isConst && state.tokens.next.id !== \"=\") {\n        warning(\"E012\", state.tokens.curr, state.tokens.curr.value);\n      }\n\n      for (var t in tokens) {\n        if (tokens.hasOwnProperty(t)) {\n          t = tokens[t];\n          if (t.id === \"let\") {\n            warning(\"W024\", t.token, t.id);\n          }\n\n          if (state.funct[\"(scope)\"].block.isGlobal()) {\n            if (predefined[t.id] === false) {\n              warning(\"W079\", t.token, t.id);\n            }\n          }\n          if (t.id) {\n            state.funct[\"(scope)\"].addbinding(t.id, {\n              type: type,\n              token: t.token });\n            names.push(t.token);\n          }\n        }\n      }\n\n      if (state.tokens.next.id === \"=\") {\n        statement.hasInitializer = true;\n\n        advance(\"=\");\n        if (!noin && peek(0).id === \"=\" && state.tokens.next.identifier) {\n          warning(\"W120\", state.tokens.next, state.tokens.next.value);\n        }\n        var id = state.tokens.prev;\n        value = expression(context, 10);\n        if (value) {\n          if (value.identifier && value.value === \"undefined\") {\n            warning(\"W080\", id, id.value);\n          }\n          if (!lone) {\n            destructuringPatternMatch(names, value);\n          }\n        }\n      }\n      if (state.tokens.next.value !== \"in\" && state.tokens.next.value !== \"of\") {\n        for (t in tokens) {\n          if (tokens.hasOwnProperty(t)) {\n            t = tokens[t];\n            state.funct[\"(scope)\"].initialize(t.id);\n          }\n        }\n      }\n\n      statement.first = statement.first.concat(names);\n\n      if (state.tokens.next.id !== \",\") {\n        break;\n      }\n\n      statement.hasComma = true;\n      advance(\",\");\n      checkComma();\n    }\n    if (letblock) {\n      advance(\")\");\n      block(context, true, true);\n      statement.block = true;\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    return statement;\n  }\n\n  var conststatement = stmt(\"const\", function(context) {\n    return blockVariableStatement(\"const\", this, context);\n  });\n  conststatement.exps = true;\n  conststatement.declaration = true;\n  function isMozillaLet() {\n    return state.tokens.next.id === \"(\" && state.inMoz();\n  }\n  var letstatement = stmt(\"let\", function(context) {\n    return blockVariableStatement(\"let\", this, context);\n  });\n  letstatement.nud = function(context, rbp) {\n    if (isMozillaLet()) {\n      state.funct[\"(scope)\"].stack();\n      advance(\"(\");\n      state.tokens.prev.fud(context);\n      advance(\")\");\n      expression(context, rbp);\n      state.funct[\"(scope)\"].unstack();\n    } else {\n      this.exps = false;\n      return state.syntax[\"(identifier)\"].nud.apply(this, arguments);\n    }\n  };\n  letstatement.meta = { es5: true, isFutureReservedWord: false, strictOnly: true };\n  letstatement.exps = true;\n  letstatement.declaration = true;\n  letstatement.useFud = function(context) {\n    var next = state.tokens.next;\n    var nextIsBindingName;\n\n    if (this.line !== next.line && !state.inES6()) {\n      return false;\n    }\n    nextIsBindingName = next.identifier && (!isReserved(context, next) ||\n      next.id === \"let\");\n\n    return nextIsBindingName || checkPunctuators(next, [\"{\", \"[\"]) ||\n      isMozillaLet();\n  };\n\n  var varstatement = stmt(\"var\", function(context) {\n    var noin = context & prodParams.noin;\n    var tokens, lone, value, id;\n\n    this.first = [];\n    for (;;) {\n      var names = [];\n      if (_.includes([\"{\", \"[\"], state.tokens.next.value)) {\n        tokens = destructuringPattern(context);\n        lone = false;\n      } else {\n        tokens = [];\n        id = identifier(context);\n\n        if (id) {\n          tokens.push({ id: id, token: state.tokens.curr });\n        }\n\n        lone = true;\n      }\n\n      if (state.option.varstmt) {\n        warning(\"W132\", this);\n      }\n\n\n      for (var t in tokens) {\n        if (tokens.hasOwnProperty(t)) {\n          t = tokens[t];\n          if (state.funct[\"(global)\"] && !state.impliedClosure()) {\n            if (predefined[t.id] === false) {\n              warning(\"W079\", t.token, t.id);\n            } else if (state.option.futurehostile === false) {\n              if ((!state.inES5() && vars.ecmaIdentifiers[5][t.id] === false) ||\n                (!state.inES6() && vars.ecmaIdentifiers[6][t.id] === false)) {\n                warning(\"W129\", t.token, t.id);\n              }\n            }\n          }\n          if (t.id) {\n            state.funct[\"(scope)\"].addbinding(t.id, {\n              type: \"var\",\n              token: t.token });\n\n            names.push(t.token);\n          }\n        }\n      }\n\n      if (state.tokens.next.id === \"=\") {\n        this.hasInitializer = true;\n\n        state.nameStack.set(state.tokens.curr);\n\n        advance(\"=\");\n        if (peek(0).id === \"=\" && state.tokens.next.identifier) {\n          if (!noin &&\n              !state.funct[\"(params)\"] ||\n              state.funct[\"(params)\"].indexOf(state.tokens.next.value) === -1) {\n            warning(\"W120\", state.tokens.next, state.tokens.next.value);\n          }\n        }\n        id = state.tokens.prev;\n        value = expression(context, 10);\n        if (value) {\n          if (!state.funct[\"(loopage)\"] && value.identifier &&\n            value.value === \"undefined\") {\n            warning(\"W080\", id, id.value);\n          }\n          if (!lone) {\n            destructuringPatternMatch(names, value);\n          }\n        }\n      }\n\n      this.first = this.first.concat(names);\n\n      if (state.tokens.next.id !== \",\") {\n        break;\n      }\n      this.hasComma = true;\n      advance(\",\");\n      checkComma();\n    }\n\n    return this;\n  });\n  varstatement.exps = true;\n\n  blockstmt(\"function\", function(context) {\n    var inexport = context & prodParams.export;\n    var generator = false;\n    var isAsync = context & prodParams.preAsync;\n    var labelType = \"\";\n\n    if (isAsync) {\n      labelType = \"async \";\n    }\n\n    if (state.tokens.next.value === \"*\") {\n      if (isAsync && !state.inES9()) {\n        warning(\"W119\", state.tokens.prev, \"async generators\", \"9\");\n      } else if (!isAsync && !state.inES6(true)) {\n        warning(\"W119\", state.tokens.next, \"function*\", \"6\");\n      }\n\n      advance(\"*\");\n      labelType += \"generator \";\n      generator = true;\n    }\n\n    labelType += \"function\";\n\n    if (inblock) {\n      warning(\"W082\", state.tokens.curr);\n    }\n    this.name = optionalidentifier(context) ? state.tokens.curr : null;\n\n    if (!this.name) {\n      if (!inexport) {\n        warning(\"W025\");\n      }\n    } else {\n      state.funct[\"(scope)\"].addbinding(this.name.value, {\n        type: labelType,\n        token: state.tokens.curr,\n        initialized: true });\n    }\n\n    var f = doFunction(context, {\n      name: this.name && this.name.value,\n      statement: this,\n      type: generator ? \"generator\" : null,\n      ignoreLoopFunc: inblock // a declaration may already have warned\n    });\n    var enablesStrictMode = f[\"(isStrict)\"] && !state.isStrict();\n    if (this.name && (f[\"(name)\"] === \"arguments\" || f[\"(name)\"] === \"eval\") &&\n      enablesStrictMode) {\n      error(\"E008\", this.name);\n    }\n    if (state.tokens.next.id === \"(\" && peek().id === \")\" && peek(1).id !== \"=>\" &&\n      state.tokens.next.line === state.tokens.curr.line) {\n      error(\"E039\");\n    }\n    return this;\n  }).declaration = true;\n\n  prefix(\"function\", function(context) {\n    var generator = false;\n    var isAsync = context & prodParams.preAsync;\n\n    if (state.tokens.next.value === \"*\") {\n      if (isAsync && !state.inES9()) {\n        warning(\"W119\", state.tokens.prev, \"async generators\", \"9\");\n      } else if (!isAsync && !state.inES6(true)) {\n        warning(\"W119\", state.tokens.curr, \"function*\", \"6\");\n      }\n\n      advance(\"*\");\n      generator = true;\n    }\n    this.name = optionalidentifier(isAsync ? context | prodParams.async : context) ?\n      state.tokens.curr : null;\n\n    var f = doFunction(context, {\n      name: this.name && this.name.value,\n      type: generator ? \"generator\" : null\n    });\n\n    if (generator && this.name && this.name.value === \"yield\") {\n      error(\"E024\", this.name, \"yield\");\n    }\n\n    if (this.name && (f[\"(name)\"] === \"arguments\" || f[\"(name)\"] === \"eval\") &&\n      f[\"(isStrict)\"]) {\n      error(\"E008\", this.name);\n    }\n\n    return this;\n  });\n\n  blockstmt(\"if\", function(context) {\n    var t = state.tokens.next;\n    increaseComplexityCount();\n    advance(\"(\");\n    var expr = expression(context, 0);\n\n    if (!expr) {\n      quit(\"E041\", this);\n    }\n\n    checkCondAssignment(expr);\n    var forinifcheck = null;\n    if (state.option.forin && state.forinifcheckneeded) {\n      state.forinifcheckneeded = false; // We only need to analyze the first if inside the loop\n      forinifcheck = state.forinifchecks[state.forinifchecks.length - 1];\n      if (expr.type === \"(punctuator)\" && expr.value === \"!\") {\n        forinifcheck.type = \"(negative)\";\n      } else {\n        forinifcheck.type = \"(positive)\";\n      }\n    }\n\n    advance(\")\", t);\n    var s = block(context, true, true);\n    if (forinifcheck && forinifcheck.type === \"(negative)\") {\n      if (s && s[0] && s[0].type === \"(identifier)\" && s[0].value === \"continue\") {\n        forinifcheck.type = \"(negative-with-continue)\";\n      }\n    }\n\n    if (state.tokens.next.id === \"else\") {\n      advance(\"else\");\n      if (state.tokens.next.id === \"if\" || state.tokens.next.id === \"switch\") {\n        statement(context);\n      } else {\n        block(context, true, true);\n      }\n    }\n    return this;\n  });\n\n  blockstmt(\"try\", function(context) {\n    var b;\n    var hasParameter = false;\n\n    function catchParameter() {\n      advance(\"(\");\n\n      if (checkPunctuators(state.tokens.next, [\"[\", \"{\"])) {\n        var tokens = destructuringPattern(context);\n        _.each(tokens, function(token) {\n          if (token.id) {\n            state.funct[\"(scope)\"].addParam(token.id, token.token, \"exception\");\n          }\n        });\n      } else if (state.tokens.next.type !== \"(identifier)\") {\n        warning(\"E030\", state.tokens.next, state.tokens.next.value);\n      } else {\n        state.funct[\"(scope)\"].addParam(identifier(context), state.tokens.curr, \"exception\");\n      }\n\n      if (state.tokens.next.value === \"if\") {\n        if (!state.inMoz()) {\n          warning(\"W118\", state.tokens.curr, \"catch filter\");\n        }\n        advance(\"if\");\n        expression(context, 0);\n      }\n\n      advance(\")\");\n    }\n\n    block(context | prodParams.tryClause, true);\n\n    while (state.tokens.next.id === \"catch\") {\n      increaseComplexityCount();\n      if (b && (!state.inMoz())) {\n        warning(\"W118\", state.tokens.next, \"multiple catch blocks\");\n      }\n      advance(\"catch\");\n      if (state.tokens.next.id !== \"{\") {\n        state.funct[\"(scope)\"].stack(\"catchparams\");\n        hasParameter = true;\n        catchParameter();\n      } else if (!state.inES10()) {\n        warning(\"W119\", state.tokens.curr, \"optional catch binding\", \"10\");\n      }\n      block(context, false);\n\n      if (hasParameter) {\n        state.funct[\"(scope)\"].unstack();\n        hasParameter = false;\n      }\n      b = true;\n    }\n\n    if (state.tokens.next.id === \"finally\") {\n      advance(\"finally\");\n      block(context, true);\n      return;\n    }\n\n    if (!b) {\n      error(\"E021\", state.tokens.next, \"catch\", state.tokens.next.value);\n    }\n\n    return this;\n  });\n\n  blockstmt(\"while\", function(context) {\n    var t = state.tokens.next;\n    state.funct[\"(breakage)\"] += 1;\n    state.funct[\"(loopage)\"] += 1;\n    increaseComplexityCount();\n    advance(\"(\");\n    checkCondAssignment(expression(context, 0));\n    advance(\")\", t);\n    block(context, true, true);\n    state.funct[\"(breakage)\"] -= 1;\n    state.funct[\"(loopage)\"] -= 1;\n    return this;\n  }).labelled = true;\n\n  blockstmt(\"with\", function(context) {\n    var t = state.tokens.next;\n    if (state.isStrict()) {\n      error(\"E010\", state.tokens.curr);\n    } else if (!state.option.withstmt) {\n      warning(\"W085\", state.tokens.curr);\n    }\n\n    advance(\"(\");\n    expression(context, 0);\n    advance(\")\", t);\n    block(context, true, true);\n\n    return this;\n  });\n\n  blockstmt(\"switch\", function(context) {\n    var t = state.tokens.next;\n    var g = false;\n    var noindent = false;\n    var seenCase = false;\n\n    state.funct[\"(breakage)\"] += 1;\n    advance(\"(\");\n    checkCondAssignment(expression(context, 0));\n    advance(\")\", t);\n    t = state.tokens.next;\n    advance(\"{\");\n    state.funct[\"(scope)\"].stack();\n\n    if (state.tokens.next.from === indent)\n      noindent = true;\n\n    if (!noindent)\n      indent += state.option.indent;\n\n    for (;;) {\n      switch (state.tokens.next.id) {\n      case \"case\":\n        switch (state.funct[\"(verb)\"]) {\n        case \"yield\":\n        case \"break\":\n        case \"case\":\n        case \"continue\":\n        case \"return\":\n        case \"switch\":\n        case \"throw\":\n          break;\n        case \"default\":\n          if (state.option.leanswitch) {\n            warning(\"W145\", state.tokens.next);\n          }\n\n          break;\n        default:\n          if (!state.tokens.curr.caseFallsThrough) {\n            warning(\"W086\", state.tokens.curr, \"case\");\n          }\n        }\n\n        advance(\"case\");\n        expression(context, 0);\n        seenCase = true;\n        increaseComplexityCount();\n        g = true;\n        advance(\":\");\n        state.funct[\"(verb)\"] = \"case\";\n        break;\n      case \"default\":\n        switch (state.funct[\"(verb)\"]) {\n        case \"yield\":\n        case \"break\":\n        case \"continue\":\n        case \"return\":\n        case \"throw\":\n          break;\n        case \"case\":\n          if (state.option.leanswitch) {\n            warning(\"W145\", state.tokens.curr);\n          }\n\n          break;\n        default:\n          if (seenCase && !state.tokens.curr.caseFallsThrough) {\n            warning(\"W086\", state.tokens.curr, \"default\");\n          }\n        }\n\n        advance(\"default\");\n        g = true;\n        advance(\":\");\n        state.funct[\"(verb)\"] = \"default\";\n        break;\n      case \"}\":\n        if (!noindent)\n          indent -= state.option.indent;\n\n        advance(\"}\", t);\n        state.funct[\"(scope)\"].unstack();\n        state.funct[\"(breakage)\"] -= 1;\n        state.funct[\"(verb)\"] = undefined;\n        return;\n      case \"(end)\":\n        error(\"E023\", state.tokens.next, \"}\");\n        return;\n      default:\n        indent += state.option.indent;\n        if (g) {\n          switch (state.tokens.curr.id) {\n          case \",\":\n            error(\"E040\");\n            return;\n          case \":\":\n            g = false;\n            statements(context);\n            break;\n          default:\n            error(\"E025\", state.tokens.curr);\n            return;\n          }\n        } else {\n          if (state.tokens.curr.id === \":\") {\n            advance(\":\");\n            error(\"E024\", state.tokens.curr, \":\");\n            statements(context);\n          } else {\n            error(\"E021\", state.tokens.next, \"case\", state.tokens.next.value);\n            return;\n          }\n        }\n        indent -= state.option.indent;\n      }\n    }\n  }).labelled = true;\n\n  stmt(\"debugger\", function() {\n    if (!state.option.debug) {\n      warning(\"W087\", this);\n    }\n    return this;\n  }).exps = true;\n\n  (function() {\n    var x = stmt(\"do\", function(context) {\n      state.funct[\"(breakage)\"] += 1;\n      state.funct[\"(loopage)\"] += 1;\n      increaseComplexityCount();\n\n      this.first = block(context, true, true);\n      advance(\"while\");\n      var t = state.tokens.next;\n      advance(\"(\");\n      checkCondAssignment(expression(context, 0));\n      advance(\")\", t);\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n      return this;\n    });\n    x.labelled = true;\n    x.exps = true;\n  }());\n\n  blockstmt(\"for\", function(context) {\n    var s, t = state.tokens.next;\n    var letscope = false;\n    var isAsync = false;\n    var foreachtok = null;\n\n    if (t.value === \"each\") {\n      foreachtok = t;\n      advance(\"each\");\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"for each\");\n      }\n    }\n\n    if (state.tokens.next.identifier && state.tokens.next.value === \"await\") {\n      advance(\"await\");\n      isAsync = true;\n\n      if (!(context & prodParams.async)) {\n        error(\"E024\", state.tokens.curr, \"await\");\n      } else if (!state.inES9()) {\n        warning(\"W119\", state.tokens.curr, \"asynchronous iteration\", \"9\");\n      }\n    }\n\n    increaseComplexityCount();\n    advance(\"(\");\n    var nextop; // contains the token of the \"in\" or \"of\" operator\n    var comma; // First comma punctuator at level 0\n    var initializer; // First initializer at level 0\n    var bindingPower;\n    var targets;\n    var target;\n    var decl;\n    var afterNext = peek();\n\n    var headContext = context | prodParams.noin;\n\n    if (state.tokens.next.id === \"var\") {\n      advance(\"var\");\n      decl = state.tokens.curr.fud(headContext);\n      comma = decl.hasComma ? decl : null;\n      initializer = decl.hasInitializer ? decl : null;\n    } else if (state.tokens.next.id === \"const\" ||\n      (state.tokens.next.id === \"let\" &&\n        ((afterNext.identifier && afterNext.id !== \"in\") ||\n         checkPunctuators(afterNext, [\"{\", \"[\"])))) {\n      advance(state.tokens.next.id);\n      letscope = true;\n      state.funct[\"(scope)\"].stack();\n      decl = state.tokens.curr.fud(headContext);\n      comma = decl.hasComma ? decl : null;\n      initializer = decl.hasInitializer ? decl : null;\n    } else if (!checkPunctuator(state.tokens.next, \";\")) {\n      targets = [];\n\n      while (state.tokens.next.value !== \"in\" &&\n        state.tokens.next.value !== \"of\" &&\n        !checkPunctuator(state.tokens.next, \";\")) {\n\n        if (checkPunctuators(state.tokens.next, [\"{\", \"[\"])) {\n          destructuringPattern(headContext, { assignment: true })\n            .forEach(function(elem) {\n              this.push(elem.token);\n            }, targets);\n          if (checkPunctuator(state.tokens.next, \"=\")) {\n            advance(\"=\");\n            initializer = state.tokens.curr;\n            expression(headContext, 10);\n          }\n        } else {\n          target = expression(headContext, 10);\n\n          if (target) {\n            if (target.type === \"(identifier)\") {\n              targets.push(target);\n            } else if (checkPunctuator(target, \"=\")) {\n              initializer = target;\n              targets.push(target);\n            }\n          }\n        }\n\n        if (checkPunctuator(state.tokens.next, \",\")) {\n          advance(\",\");\n\n          if (!comma) {\n            comma = state.tokens.curr;\n          }\n        }\n      }\n      if (!initializer && !comma) {\n        targets.forEach(function(token) {\n          if (!state.funct[\"(scope)\"].has(token.value)) {\n            warning(\"W088\", token, token.value);\n          }\n        });\n      }\n    }\n\n    nextop = state.tokens.next;\n\n    if (isAsync && nextop.value !== \"of\") {\n      error(\"E066\", nextop);\n    }\n    if (_.includes([\"in\", \"of\"], nextop.value)) {\n      if (nextop.value === \"of\") {\n        bindingPower = 20;\n\n        if (!state.inES6()) {\n          warning(\"W104\", nextop, \"for of\", \"6\");\n        }\n      } else {\n        bindingPower = 0;\n      }\n      if (comma) {\n        error(\"W133\", comma, nextop.value, \"more than one ForBinding\");\n      }\n      if (initializer) {\n        error(\"W133\", initializer, nextop.value, \"initializer is forbidden\");\n      }\n      if (target && !comma && !initializer) {\n        checkLeftSideAssign(context, target, nextop);\n      }\n\n      advance(nextop.value);\n      expression(context, bindingPower);\n      advance(\")\", t);\n\n      if (nextop.value === \"in\" && state.option.forin) {\n        state.forinifcheckneeded = true;\n\n        if (state.forinifchecks === undefined) {\n          state.forinifchecks = [];\n        }\n        state.forinifchecks.push({\n          type: \"(none)\"\n        });\n      }\n\n      state.funct[\"(breakage)\"] += 1;\n      state.funct[\"(loopage)\"] += 1;\n\n      s = block(context, true, true);\n\n      if (nextop.value === \"in\" && state.option.forin) {\n        if (state.forinifchecks && state.forinifchecks.length > 0) {\n          var check = state.forinifchecks.pop();\n\n          if (// No if statement or not the first statement in loop body\n              s && s.length > 0 && (typeof s[0] !== \"object\" || s[0].value !== \"if\") ||\n              check.type === \"(positive)\" && s.length > 1 ||\n              check.type === \"(negative)\") {\n            warning(\"W089\", this);\n          }\n        }\n        state.forinifcheckneeded = false;\n      }\n\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n\n    } else {\n      if (foreachtok) {\n        error(\"E045\", foreachtok);\n      }\n\n      advance(\";\");\n      if (decl && decl.first && decl.first[0]) {\n        if (decl.value === \"const\"  && !decl.hasInitializer) {\n          warning(\"E012\", decl, decl.first[0].value);\n        }\n\n        decl.first.forEach(function(token) {\n          state.funct[\"(scope)\"].initialize(token.value);\n        });\n      }\n      state.funct[\"(loopage)\"] += 1;\n      if (state.tokens.next.id !== \";\") {\n        checkCondAssignment(expression(context, 0));\n      }\n\n      advance(\";\");\n      if (state.tokens.next.id === \";\") {\n        error(\"E021\", state.tokens.next, \")\", \";\");\n      }\n      if (state.tokens.next.id !== \")\") {\n        for (;;) {\n          expression(context, 0);\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          advance(\",\");\n          checkComma();\n        }\n      }\n      advance(\")\", t);\n      state.funct[\"(breakage)\"] += 1;\n      block(context, true, true);\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n    }\n    if (letscope) {\n      state.funct[\"(scope)\"].unstack();\n    }\n    return this;\n  }).labelled = true;\n\n\n  stmt(\"break\", function() {\n    var v = state.tokens.next.value;\n\n    if (state.tokens.next.identifier &&\n        sameLine(state.tokens.curr, state.tokens.next)) {\n      if (!state.funct[\"(scope)\"].funct.hasLabel(v)) {\n        warning(\"W090\", state.tokens.next, v);\n      }\n      this.first = state.tokens.next;\n      advance();\n    } else {\n      if (state.funct[\"(breakage)\"] === 0)\n        warning(\"W052\", state.tokens.next, this.value);\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n\n  stmt(\"continue\", function() {\n    var v = state.tokens.next.value;\n\n    if (state.funct[\"(breakage)\"] === 0 || !state.funct[\"(loopage)\"]) {\n      warning(\"W052\", state.tokens.next, this.value);\n    }\n\n    if (state.tokens.next.identifier) {\n      if (sameLine(state.tokens.curr, state.tokens.next)) {\n        if (!state.funct[\"(scope)\"].funct.hasLabel(v)) {\n          warning(\"W090\", state.tokens.next, v);\n        }\n        this.first = state.tokens.next;\n        advance();\n      }\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n\n  stmt(\"return\", function(context) {\n    if (sameLine(this, state.tokens.next)) {\n      if (state.tokens.next.id !== \";\" && !state.tokens.next.reach) {\n        this.first = expression(context, 0);\n\n        if (this.first &&\n            this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n            !this.first.paren && !state.option.boss) {\n          warning(\"W093\", this.first);\n        }\n\n        if (state.option.noreturnawait && context & prodParams.async &&\n            !(context & prodParams.tryClause) &&\n            this.first.identifier && this.first.value === \"await\") {\n          warning(\"W146\", this.first);\n        }\n      }\n    } else {\n      if (state.tokens.next.type === \"(punctuator)\" &&\n        [\"[\", \"{\", \"+\", \"-\"].indexOf(state.tokens.next.value) > -1) {\n        nolinebreak(this); // always warn (Line breaking error)\n      }\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n  prefix(\"await\", function(context) {\n    if (context & prodParams.async) {\n      if (!state.funct[\"(params)\"]) {\n        error(\"E024\", this, \"await\");\n      }\n\n      expression(context, 10);\n      return this;\n    } else {\n      this.exps = false;\n      return state.syntax[\"(identifier)\"].nud.apply(this, arguments);\n    }\n  }).exps = true;\n\n  (function(asyncSymbol) {\n    asyncSymbol.meta = { es5: true, isFutureReservedWord: true, strictOnly: true };\n    asyncSymbol.isFunc = function() {\n      var next = state.tokens.next;\n      var afterParens;\n\n      if (this.line !== next.line) {\n        return false;\n      }\n\n      if (next.id === \"function\") {\n        return true;\n      }\n\n      if (next.id === \"(\") {\n        afterParens = peekThroughParens(0);\n\n        return afterParens.id === \"=>\";\n      }\n\n      if (next.identifier) {\n        return peek().id === \"=>\";\n      }\n\n      return false;\n    };\n    asyncSymbol.useFud = asyncSymbol.isFunc;\n    asyncSymbol.fud = function(context) {\n      if (!state.inES8()) {\n        warning(\"W119\", this, \"async functions\", \"8\");\n      }\n      context |= prodParams.preAsync;\n      context |= prodParams.initial;\n      this.func = expression(context, 0);\n      this.block = this.func.block;\n      this.exps = this.func.exps;\n      return this;\n    };\n    asyncSymbol.exps = true;\n    delete asyncSymbol.reserved;\n  }(prefix(\"async\", function(context, rbp) {\n    if (this.isFunc(context)) {\n      if (!state.inES8()) {\n        warning(\"W119\", this, \"async functions\", \"8\");\n      }\n\n      context |= prodParams.preAsync;\n      this.func = expression(context, rbp);\n      this.identifier = false;\n      return this;\n    }\n\n    this.exps = false;\n    return state.syntax[\"(identifier)\"].nud.apply(this, arguments);\n  })));\n\n  (function(yieldSymbol) {\n    yieldSymbol.rbp = yieldSymbol.lbp = 25;\n    yieldSymbol.exps = true;\n  })(prefix(\"yield\", function(context) {\n    if (state.inMoz()) {\n      return mozYield.call(this, context);\n    }\n\n    if (!(context & prodParams.yield)) {\n      this.exps = false;\n      return state.syntax[\"(identifier)\"].nud.apply(this, arguments);\n    }\n\n    var prev = state.tokens.prev;\n    if (!state.funct[\"(params)\"]) {\n      error(\"E024\", this, \"yield\");\n    }\n\n    if (!this.beginsStmt && prev.lbp > 30 && !checkPunctuators(prev, [\"(\"])) {\n      error(\"E061\", this);\n    }\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, \"yield\", \"6\");\n    }\n    state.funct[\"(yielded)\"] = true;\n\n    if (state.tokens.next.value === \"*\") {\n      advance(\"*\");\n    }\n    if (state.tokens.curr.value === \"*\" || sameLine(state.tokens.curr, state.tokens.next)) {\n      if (state.tokens.next.nud) {\n\n        nobreaknonadjacent(state.tokens.curr, state.tokens.next);\n        this.first = expression(context, 10);\n\n        if (this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n            !this.first.paren && !state.option.boss) {\n          warning(\"W093\", this.first);\n        }\n      } else if (state.tokens.next.led) {\n        if (state.tokens.next.id !== \",\") {\n          error(\"W017\", state.tokens.next);\n        }\n      }\n    }\n\n    return this;\n  }));\n  var mozYield = function(context) {\n    var prev = state.tokens.prev;\n    if (state.inES6(true) && !(context & prodParams.yield)) {\n      error(\"E046\", state.tokens.curr, \"yield\");\n    }\n    state.funct[\"(yielded)\"] = true;\n    var delegatingYield = false;\n\n    if (state.tokens.next.value === \"*\") {\n      delegatingYield = true;\n      advance(\"*\");\n    }\n\n    if (sameLine(this, state.tokens.next)) {\n      if (delegatingYield ||\n          (state.tokens.next.id !== \";\" && !state.option.asi &&\n           !state.tokens.next.reach && state.tokens.next.nud)) {\n\n        nobreaknonadjacent(state.tokens.curr, state.tokens.next);\n        this.first = expression(context, 10);\n\n        if (this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n            !this.first.paren && !state.option.boss) {\n          warning(\"W093\", this.first);\n        }\n      }\n      if (state.tokens.next.id !== \")\" &&\n          (prev.lbp > 30 || (!prev.assign && !isEndOfExpr()))) {\n        error(\"E050\", this);\n      }\n    } else if (!state.option.asi) {\n      nolinebreak(this); // always warn (Line breaking error)\n    }\n    return this;\n  };\n\n  stmt(\"throw\", function(context) {\n    nolinebreak(this);\n    this.first = expression(context, 20);\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n  prefix(\"import\", function(context) {\n    var mp = metaProperty(context, \"meta\", function() {\n      if (!state.inES11(true)) {\n        warning(\"W119\", state.tokens.prev, \"import.meta\", \"11\");\n      }\n      if (!state.option.module) {\n        error(\"E070\", state.tokens.prev);\n      }\n    });\n\n    if (mp) {\n      return mp;\n    }\n\n    if (!checkPunctuator(state.tokens.next, \"(\")) {\n      return state.syntax[\"(identifier)\"].nud.call(this, context);\n    }\n\n    if (!state.inES11()) {\n      warning(\"W119\", state.tokens.curr, \"dynamic import\", \"11\");\n    }\n\n    advance(\"(\");\n    expression(context, 10);\n    advance(\")\");\n    return this;\n  });\n\n  var importSymbol = stmt(\"import\", function(context) {\n    if (!state.funct[\"(scope)\"].block.isGlobal()) {\n      error(\"E053\", state.tokens.curr, \"Import\");\n    }\n\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"import\", \"6\");\n    }\n\n    if (state.tokens.next.type === \"(string)\") {\n      advance(\"(string)\");\n      return this;\n    }\n\n    if (state.tokens.next.identifier) {\n      this.name = identifier(context);\n      state.funct[\"(scope)\"].addbinding(this.name, {\n        type: \"import\",\n        initialized: true,\n        token: state.tokens.curr });\n\n      if (state.tokens.next.value === \",\") {\n        advance(\",\");\n      } else {\n        advance(\"from\");\n        advance(\"(string)\");\n        return this;\n      }\n    }\n\n    if (state.tokens.next.id === \"*\") {\n      advance(\"*\");\n      advance(\"as\");\n      if (state.tokens.next.identifier) {\n        this.name = identifier(context);\n        state.funct[\"(scope)\"].addbinding(this.name, {\n          type: \"import\",\n          initialized: true,\n          token: state.tokens.curr });\n      }\n    } else {\n      advance(\"{\");\n      for (;;) {\n        if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        }\n        var importName;\n        if (peek().value === \"as\") {\n          identifier(context, true);\n          advance(\"as\");\n          importName = identifier(context);\n        } else {\n          importName = identifier(context);\n        }\n        state.funct[\"(scope)\"].addbinding(importName, {\n          type: \"import\",\n          initialized: true,\n          token: state.tokens.curr });\n\n        if (state.tokens.next.value === \",\") {\n          advance(\",\");\n        } else if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        } else {\n          error(\"E024\", state.tokens.next, state.tokens.next.value);\n          break;\n        }\n      }\n    }\n    advance(\"from\");\n    advance(\"(string)\");\n\n    return this;\n  });\n  importSymbol.exps = true;\n  importSymbol.reserved = true;\n  importSymbol.meta = { isFutureReservedWord: true, es5: true };\n  importSymbol.useFud = function() {\n    return !(checkPunctuators(state.tokens.next, [\".\", \"(\"]));\n  };\n  importSymbol.rbp = 161;\n\n  stmt(\"export\", function(context) {\n    var ok = true;\n    var token;\n    var moduleSpecifier;\n    context = context | prodParams.export;\n\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"export\", \"6\");\n      ok = false;\n    }\n\n    if (!state.funct[\"(scope)\"].block.isGlobal()) {\n      error(\"E053\", state.tokens.curr, \"Export\");\n      ok = false;\n    }\n\n    if (state.tokens.next.value === \"*\") {\n      advance(\"*\");\n\n      if (state.tokens.next.value === \"as\") {\n        if (!state.inES11()) {\n          warning(\"W119\", state.tokens.curr, \"export * as ns from\", \"11\");\n        }\n        advance(\"as\");\n        identifier(context, true);\n        state.funct[\"(scope)\"].setExported(null, state.tokens.curr);\n      }\n\n      advance(\"from\");\n      advance(\"(string)\");\n      return this;\n    }\n\n    if (state.tokens.next.type === \"default\") {\n      state.nameStack.set(state.tokens.next);\n\n      advance(\"default\");\n      var def = state.tokens.curr;\n      var exportType = state.tokens.next.id;\n      if (exportType === \"function\") {\n        this.block = true;\n        advance(\"function\");\n        token = state.syntax[\"function\"].fud(context);\n        state.funct[\"(scope)\"].setExported(token.name, def);\n      } else if (exportType === \"async\" && peek().id === \"function\") {\n        this.block = true;\n        advance(\"async\");\n        advance(\"function\");\n        token = state.syntax[\"function\"].fud(context | prodParams.preAsync);\n        state.funct[\"(scope)\"].setExported(token.name, def);\n      } else if (exportType === \"class\") {\n        this.block = true;\n        advance(\"class\");\n        token = state.syntax[\"class\"].fud(context);\n        state.funct[\"(scope)\"].setExported(token.name, def);\n      } else {\n        expression(context, 10);\n        state.funct[\"(scope)\"].setExported(null, def);\n      }\n      return this;\n    }\n    if (state.tokens.next.value === \"{\") {\n      advance(\"{\");\n      var exportedTokens = [];\n      while (!checkPunctuator(state.tokens.next, \"}\")) {\n        if (!state.tokens.next.identifier) {\n          error(\"E030\", state.tokens.next, state.tokens.next.value);\n        }\n        advance();\n\n        if (state.tokens.next.value === \"as\") {\n          advance(\"as\");\n          if (!state.tokens.next.identifier) {\n            error(\"E030\", state.tokens.next, state.tokens.next.value);\n          }\n          exportedTokens.push({\n            local: state.tokens.prev,\n            export: state.tokens.next\n          });\n          advance();\n        } else {\n          exportedTokens.push({\n            local: state.tokens.curr,\n            export: state.tokens.curr\n          });\n        }\n\n        if (!checkPunctuator(state.tokens.next, \"}\")) {\n          advance(\",\");\n        }\n      }\n      advance(\"}\");\n      if (state.tokens.next.value === \"from\") {\n        advance(\"from\");\n        moduleSpecifier = state.tokens.next;\n        advance(\"(string)\");\n      } else if (ok) {\n        exportedTokens.forEach(function(x) {\n          state.funct[\"(scope)\"].setExported(x.local, x.export);\n        });\n      }\n\n      if (exportedTokens.length === 0) {\n        if (moduleSpecifier) {\n          warning(\"W142\", this, \"export\", moduleSpecifier.value);\n        } else {\n          warning(\"W141\", this, \"export\");\n        }\n      }\n\n      return this;\n    } else if (state.tokens.next.id === \"var\") {\n      advance(\"var\");\n      token = state.tokens.curr.fud(context);\n      token.first.forEach(function(binding) {\n        state.funct[\"(scope)\"].setExported(binding, binding);\n      });\n    } else if (state.tokens.next.id === \"let\") {\n      advance(\"let\");\n      token = state.tokens.curr.fud(context);\n      token.first.forEach(function(binding) {\n        state.funct[\"(scope)\"].setExported(binding, binding);\n      });\n    } else if (state.tokens.next.id === \"const\") {\n      advance(\"const\");\n      token = state.tokens.curr.fud(context);\n      token.first.forEach(function(binding) {\n        state.funct[\"(scope)\"].setExported(binding, binding);\n      });\n    } else if (state.tokens.next.id === \"function\") {\n      this.block = true;\n      advance(\"function\");\n      token = state.syntax[\"function\"].fud(context);\n      state.funct[\"(scope)\"].setExported(token.name, token.name);\n    } else if (state.tokens.next.id === \"async\" && peek().id === \"function\") {\n      this.block = true;\n      advance(\"async\");\n      advance(\"function\");\n      token = state.syntax[\"function\"].fud(context | prodParams.preAsync);\n      state.funct[\"(scope)\"].setExported(token.name, token.name);\n    } else if (state.tokens.next.id === \"class\") {\n      this.block = true;\n      advance(\"class\");\n      token = state.syntax[\"class\"].fud(context);\n      state.funct[\"(scope)\"].setExported(token.name, token.name);\n    } else {\n      error(\"E024\", state.tokens.next, state.tokens.next.value);\n    }\n\n    return this;\n  }).exps = true;\n  function supportsSuper(type, funct) {\n    if (type === \"call\" && funct[\"(async)\"]) {\n      return false;\n    }\n\n    if (type === \"property\" && funct[\"(method)\"]) {\n      return true;\n    }\n\n    if (type === \"call\" && funct[\"(statement)\"] &&\n      funct[\"(statement)\"].id === \"class\") {\n      return true;\n    }\n\n    if (funct[\"(arrow)\"]) {\n      return supportsSuper(type, funct[\"(context)\"]);\n    }\n\n    return false;\n  }\n\n  var superNud = function() {\n    var next = state.tokens.next;\n\n    if (checkPunctuators(next, [\"[\", \".\"])) {\n      if (!supportsSuper(\"property\", state.funct)) {\n        error(\"E063\", this);\n      }\n    } else if (checkPunctuator(next, \"(\")) {\n      if (!supportsSuper(\"call\", state.funct)) {\n        error(\"E064\", this);\n      }\n    } else {\n      error(\"E024\", next, next.value || next.id);\n    }\n\n    return this;\n  };\n\n  FutureReservedWord(\"abstract\");\n  FutureReservedWord(\"boolean\");\n  FutureReservedWord(\"byte\");\n  FutureReservedWord(\"char\");\n  FutureReservedWord(\"double\");\n  FutureReservedWord(\"enum\", { es5: true });\n  FutureReservedWord(\"export\", { es5: true });\n  FutureReservedWord(\"extends\", { es5: true });\n  FutureReservedWord(\"final\");\n  FutureReservedWord(\"float\");\n  FutureReservedWord(\"goto\");\n  FutureReservedWord(\"implements\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"int\");\n  FutureReservedWord(\"interface\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"long\");\n  FutureReservedWord(\"native\");\n  FutureReservedWord(\"package\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"private\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"protected\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"public\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"short\");\n  FutureReservedWord(\"static\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"synchronized\");\n  FutureReservedWord(\"transient\");\n  FutureReservedWord(\"volatile\");\n\n  var lookupBlockType = function() {\n    var pn, pn1, prev;\n    var i = -1;\n    var bracketStack = 0;\n    var ret = {};\n    if (checkPunctuators(state.tokens.curr, [\"[\", \"{\"])) {\n      bracketStack += 1;\n    }\n    do {\n      prev = i === -1 ? state.tokens.curr : pn;\n      pn = i === -1 ? state.tokens.next : peek(i);\n      pn1 = peek(i + 1);\n      i = i + 1;\n      if (checkPunctuators(pn, [\"[\", \"{\"])) {\n        bracketStack += 1;\n      } else if (checkPunctuators(pn, [\"]\", \"}\"])) {\n        bracketStack -= 1;\n      }\n      if (bracketStack === 1 && pn.identifier && pn.value === \"for\" &&\n          !checkPunctuator(prev, \".\")) {\n        ret.isCompArray = true;\n        ret.notJson = true;\n        break;\n      }\n      if (bracketStack === 0 && checkPunctuators(pn, [\"}\", \"]\"])) {\n        if (pn1.value === \"=\") {\n          ret.isDestAssign = true;\n          ret.notJson = true;\n          break;\n        } else if (pn1.value === \".\") {\n          ret.notJson = true;\n          break;\n        }\n      }\n      if (checkPunctuator(pn, \";\")) {\n        ret.notJson = true;\n      }\n    } while (bracketStack > 0 && pn.id !== \"(end)\");\n    return ret;\n  };\n  function saveProperty(props, name, tkn, isClass, isStatic, isComputed) {\n    if (tkn.identifier) {\n      name = tkn.value;\n    }\n    var key = name;\n    if (isClass && isStatic) {\n      key = \"static \" + name;\n    }\n\n    if (props[key] && name !== \"__proto__\" && !isComputed) {\n      var msg = [\"key\", \"class method\", \"static class method\"];\n      msg = msg[(isClass || false) + (isStatic || false)];\n      warning(\"W075\", state.tokens.next, msg, name);\n    } else {\n      props[key] = Object.create(null);\n    }\n\n    props[key].basic = true;\n    props[key].basictkn = tkn;\n  }\n  function saveAccessor(accessorType, props, name, tkn, isClass, isStatic) {\n    var flagName = accessorType === \"get\" ? \"getterToken\" : \"setterToken\";\n    var key = name;\n    state.tokens.curr.accessorType = accessorType;\n    state.nameStack.set(tkn);\n    if (isClass && isStatic) {\n      key = \"static \" + name;\n    }\n\n    if (props[key]) {\n      if ((props[key].basic || props[key][flagName]) && name !== \"__proto__\") {\n        var msg = \"\";\n        if (isClass) {\n          if (isStatic) {\n            msg += \"static \";\n          }\n          msg += accessorType + \"ter method\";\n        } else {\n          msg = \"key\";\n        }\n        warning(\"W075\", state.tokens.next, msg, name);\n      }\n    } else {\n      props[key] = Object.create(null);\n    }\n\n    props[key][flagName] = tkn;\n    if (isStatic) {\n      props[key].static = true;\n    }\n  }\n  function computedPropertyName(context) {\n    advance(\"[\");\n    state.tokens.curr.delim = true;\n    state.tokens.curr.lbp = 0;\n\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"computed property names\", \"6\");\n    }\n    var value = expression(context & ~prodParams.noin, 10);\n    advance(\"]\");\n    return value;\n  }\n  function checkPunctuators(token, values) {\n    if (token.type === \"(punctuator)\") {\n      return _.includes(values, token.value);\n    }\n    return false;\n  }\n  function checkPunctuator(token, value) {\n    return token.type === \"(punctuator)\" && token.value === value;\n  }\n  function destructuringAssignOrJsonValue(context) {\n\n    var block = lookupBlockType();\n    if (block.notJson) {\n      if (!state.inES6() && block.isDestAssign) {\n        warning(\"W104\", state.tokens.curr, \"destructuring assignment\", \"6\");\n      }\n      statements(context);\n    } else {\n      state.option.laxbreak = true;\n      state.jsonMode = true;\n      jsonValue();\n    }\n  }\n  var arrayComprehension = function() {\n    var CompArray = function() {\n      this.mode = \"use\";\n      this.variables = [];\n    };\n    var _carrays = [];\n    var _current;\n    function declare(v) {\n      var l = _current.variables.filter(function(elt) {\n        if (elt.value === v) {\n          elt.undef = false;\n          return v;\n        }\n      }).length;\n      return l !== 0;\n    }\n    function use(v) {\n      var l = _current.variables.filter(function(elt) {\n        if (elt.value === v && !elt.undef) {\n          if (elt.unused === true) {\n            elt.unused = false;\n          }\n          return v;\n        }\n      }).length;\n      return (l === 0);\n    }\n    return { stack: function() {\n          _current = new CompArray();\n          _carrays.push(_current);\n        },\n        unstack: function() {\n          _current.variables.filter(function(v) {\n            if (v.unused)\n              warning(\"W098\", v.token, v.token.raw_text || v.value);\n            if (v.undef)\n              state.funct[\"(scope)\"].block.use(v.value, v.token);\n          });\n          _carrays.splice(-1, 1);\n          _current = _carrays[_carrays.length - 1];\n        },\n        setState: function(s) {\n          if (_.includes([\"use\", \"define\", \"generate\", \"filter\"], s))\n            _current.mode = s;\n        },\n        check: function(v) {\n          if (!_current) {\n            return;\n          }\n          if (_current && _current.mode === \"use\") {\n            if (use(v)) {\n              _current.variables.push({\n                token: state.tokens.curr,\n                value: v,\n                undef: true,\n                unused: false\n              });\n            }\n            return true;\n          } else if (_current && _current.mode === \"define\") {\n            if (!declare(v)) {\n              _current.variables.push({\n                token: state.tokens.curr,\n                value: v,\n                undef: false,\n                unused: true\n              });\n            }\n            return true;\n          } else if (_current && _current.mode === \"generate\") {\n            state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n            return true;\n          } else if (_current && _current.mode === \"filter\") {\n            if (use(v)) {\n              state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n            }\n            return true;\n          }\n          return false;\n        }\n        };\n  };\n  function jsonValue() {\n    function jsonObject() {\n      var o = {}, t = state.tokens.next;\n      advance(\"{\");\n      if (state.tokens.next.id !== \"}\") {\n        for (;;) {\n          if (state.tokens.next.id === \"(end)\") {\n            error(\"E026\", state.tokens.next, t.line);\n          } else if (state.tokens.next.id === \"}\") {\n            warning(\"W094\", state.tokens.curr);\n            break;\n          } else if (state.tokens.next.id === \",\") {\n            error(\"E028\", state.tokens.next);\n          } else if (state.tokens.next.id !== \"(string)\") {\n            warning(\"W095\", state.tokens.next, state.tokens.next.value);\n          }\n          if (o[state.tokens.next.value] === true) {\n            warning(\"W075\", state.tokens.next, \"key\", state.tokens.next.value);\n          } else if ((state.tokens.next.value === \"__proto__\" &&\n            !state.option.proto) || (state.tokens.next.value === \"__iterator__\" &&\n            !state.option.iterator)) {\n            warning(\"W096\", state.tokens.next, state.tokens.next.value);\n          } else {\n            o[state.tokens.next.value] = true;\n          }\n          advance();\n          advance(\":\");\n          jsonValue();\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          advance(\",\");\n        }\n      }\n      advance(\"}\");\n    }\n\n    function jsonArray() {\n      var t = state.tokens.next;\n      advance(\"[\");\n      if (state.tokens.next.id !== \"]\") {\n        for (;;) {\n          if (state.tokens.next.id === \"(end)\") {\n            error(\"E027\", state.tokens.next, t.line);\n          } else if (state.tokens.next.id === \"]\") {\n            warning(\"W094\", state.tokens.curr);\n            break;\n          } else if (state.tokens.next.id === \",\") {\n            error(\"E028\", state.tokens.next);\n          }\n          jsonValue();\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          advance(\",\");\n        }\n      }\n      advance(\"]\");\n    }\n\n    switch (state.tokens.next.id) {\n    case \"{\":\n      jsonObject();\n      break;\n    case \"[\":\n      jsonArray();\n      break;\n    case \"true\":\n    case \"false\":\n    case \"null\":\n    case \"(number)\":\n    case \"(string)\":\n      advance();\n      break;\n    case \"-\":\n      advance(\"-\");\n      advance(\"(number)\");\n      break;\n    default:\n      error(\"E003\", state.tokens.next);\n    }\n  }\n  function lintEvalCode(internals, options, globals) {\n    var priorErrorCount, idx, jdx, internal;\n\n    for (idx = 0; idx < internals.length; idx += 1) {\n      internal = internals[idx];\n      options.scope = internal.elem;\n      priorErrorCount = JSHINT.errors.length;\n\n      itself(internal.code, options, globals);\n\n      for (jdx = priorErrorCount; jdx < JSHINT.errors.length; jdx += 1) {\n        JSHINT.errors[jdx].line += internal.token.line - 1;\n      }\n    }\n  }\n\n  var escapeRegex = function(str) {\n    return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n  };\n  var itself = function(s, o, g) {\n    var x, reIgnoreStr, reIgnore;\n    var optionKeys, newOptionObj, newIgnoredObj;\n\n    o = _.clone(o);\n    state.reset();\n    newOptionObj = state.option;\n    newIgnoredObj = state.ignored;\n\n    if (o && o.scope) {\n      JSHINT.scope = o.scope;\n    } else {\n      JSHINT.errors = [];\n      JSHINT.internals = [];\n      JSHINT.blacklist = {};\n      JSHINT.scope = \"(main)\";\n    }\n\n    predefined = Object.create(null);\n    combine(predefined, vars.ecmaIdentifiers[3]);\n    combine(predefined, vars.reservedVars);\n\n    declared = Object.create(null);\n    var exported = Object.create(null); // Variables that live outside the current file\n\n    function each(obj, cb) {\n      if (!obj)\n        return;\n\n      if (!Array.isArray(obj) && typeof obj === \"object\")\n        obj = Object.keys(obj);\n\n      obj.forEach(cb);\n    }\n\n    if (o) {\n\n      each([o.predef, o.globals], function(dict) {\n        each(dict, function(item) {\n          var slice, prop;\n\n          if (item[0] === \"-\") {\n            slice = item.slice(1);\n            JSHINT.blacklist[slice] = slice;\n            delete predefined[slice];\n          } else {\n            prop = Object.getOwnPropertyDescriptor(dict, item);\n            predefined[item] = prop ? prop.value : false;\n          }\n        });\n      });\n\n      each(o.exported || null, function(item) {\n        exported[item] = true;\n      });\n\n      delete o.predef;\n      delete o.exported;\n\n      optionKeys = Object.keys(o);\n      for (x = 0; x < optionKeys.length; x++) {\n        if (/^-W\\d{3}$/g.test(optionKeys[x])) {\n          newIgnoredObj[optionKeys[x].slice(1)] = true;\n        } else {\n          var optionKey = optionKeys[x];\n          newOptionObj[optionKey] = o[optionKey];\n        }\n      }\n    }\n\n    state.option = newOptionObj;\n    state.ignored = newIgnoredObj;\n\n    state.option.indent = state.option.indent || 4;\n    state.option.maxerr = state.option.maxerr || 50;\n\n    indent = 1;\n\n    var scopeManagerInst = scopeManager(state, predefined, exported, declared);\n    scopeManagerInst.on(\"warning\", function(ev) {\n      warning.apply(null, [ ev.code, ev.token].concat(ev.data));\n    });\n\n    scopeManagerInst.on(\"error\", function(ev) {\n      error.apply(null, [ ev.code, ev.token ].concat(ev.data));\n    });\n\n    state.funct = functor(\"(global)\", null, {\n      \"(global)\"    : true,\n      \"(scope)\"     : scopeManagerInst,\n      \"(comparray)\" : arrayComprehension(),\n      \"(metrics)\"   : createMetrics(state.tokens.next)\n    });\n\n    functions = [state.funct];\n    member = {};\n    membersOnly = null;\n    inblock = false;\n    lookahead = [];\n\n    if (!isString(s) && !Array.isArray(s)) {\n      errorAt(\"E004\", 0);\n      return false;\n    }\n\n    api = {\n      get isJSON() {\n        return state.jsonMode;\n      },\n\n      getOption: function(name) {\n        return state.option[name] || null;\n      },\n\n      getCache: function(name) {\n        return state.cache[name];\n      },\n\n      setCache: function(name, value) {\n        state.cache[name] = value;\n      },\n\n      warn: function(code, data) {\n        warningAt.apply(null, [ code, data.line, data.char ].concat(data.data));\n      },\n\n      on: function(names, listener) {\n        names.split(\" \").forEach(function(name) {\n          emitter.on(name, listener);\n        }.bind(this));\n      }\n    };\n\n    emitter.removeAllListeners();\n    (extraModules || []).forEach(function(func) {\n      func(api);\n    });\n\n    state.tokens.prev = state.tokens.curr = state.tokens.next = state.syntax[\"(begin)\"];\n    if (o && o.ignoreDelimiters) {\n\n      if (!Array.isArray(o.ignoreDelimiters)) {\n        o.ignoreDelimiters = [o.ignoreDelimiters];\n      }\n\n      o.ignoreDelimiters.forEach(function(delimiterPair) {\n        if (!delimiterPair.start || !delimiterPair.end)\n            return;\n\n        reIgnoreStr = escapeRegex(delimiterPair.start) +\n                      \"[\\\\s\\\\S]*?\" +\n                      escapeRegex(delimiterPair.end);\n\n        reIgnore = new RegExp(reIgnoreStr, \"ig\");\n\n        s = s.replace(reIgnore, function(match) {\n          return match.replace(/./g, \" \");\n        });\n      });\n    }\n\n    lex = new Lexer(s);\n\n    lex.on(\"warning\", function(ev) {\n      warningAt.apply(null, [ ev.code, ev.line, ev.character].concat(ev.data));\n    });\n\n    lex.on(\"error\", function(ev) {\n      errorAt.apply(null, [ ev.code, ev.line, ev.character ].concat(ev.data));\n    });\n\n    lex.on(\"fatal\", function(ev) {\n      quit(\"E041\", ev);\n    });\n\n    lex.on(\"Identifier\", function(ev) {\n      emitter.emit(\"Identifier\", ev);\n    });\n\n    lex.on(\"String\", function(ev) {\n      emitter.emit(\"String\", ev);\n    });\n\n    lex.on(\"Number\", function(ev) {\n      emitter.emit(\"Number\", ev);\n    });\n    var name;\n    for (name in o) {\n      if (_.has(o, name)) {\n        checkOption(name, true, state.tokens.curr);\n      }\n    }\n    if (o) {\n      for (name in o.unstable) {\n        if (_.has(o.unstable, name)) {\n          checkOption(name, false, state.tokens.curr);\n        }\n      }\n    }\n\n    try {\n      applyOptions();\n      combine(predefined, g || {});\n      checkComma.first = true;\n\n      advance();\n      switch (state.tokens.next.id) {\n      case \"{\":\n      case \"[\":\n        destructuringAssignOrJsonValue(0);\n        break;\n      default:\n        directives();\n\n        if (state.directive[\"use strict\"]) {\n          if (!state.allowsGlobalUsd()) {\n            warning(\"W097\", state.directive[\"use strict\"]);\n          }\n        }\n\n        statements(0);\n      }\n\n      if (state.tokens.next.id !== \"(end)\") {\n        quit(\"E041\", state.tokens.curr);\n      }\n\n      state.funct[\"(scope)\"].unstack();\n\n    } catch (err) {\n      if (err && err.name === \"JSHintError\") {\n        var nt = state.tokens.next || {};\n        JSHINT.errors.push({\n          scope     : \"(main)\",\n          raw       : err.raw,\n          code      : err.code,\n          reason    : err.reason,\n          line      : err.line || nt.line,\n          character : err.character || nt.from\n        });\n      } else {\n        throw err;\n      }\n    }\n    if (JSHINT.scope === \"(main)\") {\n      lintEvalCode(JSHINT.internals, o || {}, g);\n    }\n\n    return JSHINT.errors.length === 0;\n  };\n  itself.addModule = function(func) {\n    extraModules.push(func);\n  };\n\n  itself.addModule(style.register);\n  itself.data = function() {\n    var data = {\n      functions: [],\n      options: state.option\n    };\n\n    var fu, f, i, n, globals;\n\n    if (itself.errors.length) {\n      data.errors = itself.errors;\n    }\n\n    if (state.jsonMode) {\n      data.json = true;\n    }\n\n    var impliedGlobals = state.funct[\"(scope)\"].getImpliedGlobals();\n    if (impliedGlobals.length > 0) {\n      data.implieds = impliedGlobals;\n    }\n\n    globals = state.funct[\"(scope)\"].getUsedOrDefinedGlobals();\n    if (globals.length > 0) {\n      data.globals = globals;\n    }\n\n    for (i = 1; i < functions.length; i += 1) {\n      f = functions[i];\n      fu = {};\n\n      fu.name = f[\"(name)\"];\n      fu.param = f[\"(params)\"];\n      fu.line = f[\"(line)\"];\n      fu.character = f[\"(character)\"];\n      fu.last = f[\"(last)\"];\n      fu.lastcharacter = f[\"(lastcharacter)\"];\n\n      fu.metrics = {\n        complexity: f[\"(metrics)\"].ComplexityCount,\n        parameters: f[\"(metrics)\"].arity,\n        statements: f[\"(metrics)\"].statementCount\n      };\n\n      data.functions.push(fu);\n    }\n\n    var unuseds = state.funct[\"(scope)\"].getUnuseds();\n    if (unuseds.length > 0) {\n      data.unused = unuseds;\n    }\n\n    for (n in member) {\n      if (typeof member[n] === \"number\") {\n        data.member = member;\n        break;\n      }\n    }\n\n    return data;\n  };\n\n  itself.jshint = itself;\n\n  return itself;\n}());\nif (typeof exports === \"object\" && exports) {\n  exports.JSHINT = JSHINT;\n}\n\n},{\"./lex.js\":\"/../../../jshint/src/lex.js\",\"./messages.js\":\"/../../../jshint/src/messages.js\",\"./options.js\":\"/../../../jshint/src/options.js\",\"./prod-params.js\":\"/../../../jshint/src/prod-params.js\",\"./reg.js\":\"/../../../jshint/src/reg.js\",\"./scope-manager.js\":\"/../../../jshint/src/scope-manager.js\",\"./state.js\":\"/../../../jshint/src/state.js\",\"./style.js\":\"/../../../jshint/src/style.js\",\"./vars.js\":\"/../../../jshint/src/vars.js\",\"console-browserify\":\"/../../../jshint/node_modules/console-browserify/index.js\",\"events\":\"/node_modules/events/events.js\",\"lodash.clone\":\"/../../../jshint/node_modules/lodash.clone/index.js\",\"underscore\":\"/../../../jshint/node_modules/underscore/underscore-umd.js\"}],\"/../../../jshint/src/lex.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\n\nvar _      = _dereq_(\"underscore\");\nvar events = _dereq_(\"events\");\nvar reg    = _dereq_(\"./reg.js\");\nvar state  = _dereq_(\"./state.js\").state;\n\nvar unicodeData = _dereq_(\"../data/ascii-identifier-data.js\");\nvar asciiIdentifierStartTable = unicodeData.asciiIdentifierStartTable;\nvar asciiIdentifierPartTable = unicodeData.asciiIdentifierPartTable;\nvar nonAsciiIdentifierStartTable = _dereq_(\"../data/non-ascii-identifier-start.js\");\nvar nonAsciiIdentifierPartTable = _dereq_(\"../data/non-ascii-identifier-part-only.js\");\nvar es5IdentifierNames;\n\nvar Token = {\n  Identifier: 1,\n  Punctuator: 2,\n  NumericLiteral: 3,\n  StringLiteral: 4,\n  Comment: 5,\n  Keyword: 6,\n  RegExp: 9,\n  TemplateHead: 10,\n  TemplateMiddle: 11,\n  TemplateTail: 12,\n  NoSubstTemplate: 13\n};\n\nvar Context = {\n  Block: 1,\n  Template: 2\n};\n\nfunction isHex(str) {\n  return /^[0-9a-fA-F]+$/.test(str);\n}\n\nfunction isHexDigit(str) {\n  return str.length === 1 && isHex(str);\n}\n\nfunction asyncTrigger() {\n  var _checks = [];\n\n  return {\n    push: function(fn) {\n      _checks.push(fn);\n    },\n\n    check: function() {\n      for (var check = 0; check < _checks.length; ++check) {\n        _checks[check]();\n      }\n\n      _checks.splice(0, _checks.length);\n    }\n  };\n}\nfunction Lexer(source) {\n  var lines = source;\n\n  if (typeof lines === \"string\") {\n    lines = lines\n      .replace(/\\r\\n/g, \"\\n\")\n      .replace(/\\r/g, \"\\n\")\n      .split(\"\\n\");\n  }\n\n  if (lines[0] && lines[0].substr(0, 2) === \"#!\") {\n    if (lines[0].indexOf(\"node\") !== -1) {\n      state.option.node = true;\n    }\n    lines[0] = \"\";\n  }\n\n  this.emitter = new events.EventEmitter();\n  this.source = source;\n  this.setLines(lines);\n  this.prereg = true;\n\n  this.line = 0;\n  this.char = 1;\n  this.from = 1;\n  this.input = \"\";\n  this.inComment = false;\n  this.context = [];\n  this.templateStarts = [];\n\n  for (var i = 0; i < state.option.indent; i += 1) {\n    state.tab += \" \";\n  }\n}\n\nLexer.prototype = {\n  _lines: [],\n\n  inContext: function(ctxType) {\n    return this.context.length > 0 && this.context[this.context.length - 1].type === ctxType;\n  },\n\n  pushContext: function(ctxType) {\n    this.context.push({ type: ctxType });\n  },\n\n  popContext: function() {\n    return this.context.pop();\n  },\n\n  currentContext: function() {\n    return this.context.length > 0 && this.context[this.context.length - 1];\n  },\n\n  getLines: function() {\n    this._lines = state.lines;\n    return this._lines;\n  },\n\n  setLines: function(val) {\n    this._lines = val;\n    state.lines = this._lines;\n  },\n  peek: function(i) {\n    return this.input.charAt(i || 0);\n  },\n  skip: function(i) {\n    i = i || 1;\n    this.char += i;\n    this.input = this.input.slice(i);\n  },\n  on: function(names, listener) {\n    names.split(\" \").forEach(function(name) {\n      this.emitter.on(name, listener);\n    }.bind(this));\n  },\n  trigger: function() {\n    this.emitter.emit.apply(this.emitter, Array.prototype.slice.call(arguments));\n  },\n  triggerAsync: function(type, args, checks, fn) {\n    checks.push(function() {\n      if (fn()) {\n        this.trigger(type, args);\n      }\n    }.bind(this));\n  },\n  scanPunctuator: function() {\n    var ch1 = this.peek();\n    var ch2, ch3, ch4;\n\n    switch (ch1) {\n    case \".\":\n      if ((/^[0-9]$/).test(this.peek(1))) {\n        return null;\n      }\n      if (this.peek(1) === \".\" && this.peek(2) === \".\") {\n        return {\n          type: Token.Punctuator,\n          value: \"...\"\n        };\n      }\n    case \"(\":\n    case \")\":\n    case \";\":\n    case \",\":\n    case \"[\":\n    case \"]\":\n    case \":\":\n    case \"~\":\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"{\":\n      this.pushContext(Context.Block);\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"}\":\n      if (this.inContext(Context.Block)) {\n        this.popContext();\n      }\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"#\":\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"\":\n      return null;\n    }\n\n    ch2 = this.peek(1);\n    ch3 = this.peek(2);\n\n    if (ch1 === \"?\") {\n      if (ch2 === \".\" && !reg.decimalDigit.test(ch3)) {\n        return {\n          type: Token.Punctuator,\n          value: \"?.\"\n        };\n      }\n\n      return {\n        type: Token.Punctuator,\n        value: ch2 === \"?\" ? \"??\" : \"?\"\n      };\n    }\n\n    ch4 = this.peek(3);\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \">\" && ch4 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>>=\"\n      };\n    }\n\n    if (ch1 === \"=\" && ch2 === \"=\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"===\"\n      };\n    }\n\n    if (ch1 === \"!\" && ch2 === \"=\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"!==\"\n      };\n    }\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \">\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>>\"\n      };\n    }\n\n    if (ch1 === \"<\" && ch2 === \"<\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"<<=\"\n      };\n    }\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>=\"\n      };\n    }\n    if (ch1 === \"=\" && ch2 === \">\") {\n      return {\n        type: Token.Punctuator,\n        value: ch1 + ch2\n      };\n    }\n    if (ch1 === ch2 && (\"+-<>&|*\".indexOf(ch1) >= 0)) {\n      if (ch1 === \"*\" && ch3 === \"=\") {\n        return {\n          type: Token.Punctuator,\n          value: ch1 + ch2 + ch3\n        };\n      }\n\n      return {\n        type: Token.Punctuator,\n        value: ch1 + ch2\n      };\n    }\n    if (\"<>=!+-*%&|^/\".indexOf(ch1) >= 0) {\n      if (ch2 === \"=\") {\n        return {\n          type: Token.Punctuator,\n          value: ch1 + ch2\n        };\n      }\n\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    }\n\n    return null;\n  },\n  scanComments: function(checks) {\n    var ch1 = this.peek();\n    var ch2 = this.peek(1);\n    var rest = this.input.substr(2);\n    var startLine = this.line;\n    var startChar = this.char;\n    var self = this;\n\n    function commentToken(label, body, opt) {\n      var special = [\n        \"jshint\", \"jshint.unstable\", \"jslint\", \"members\", \"member\", \"globals\",\n        \"global\", \"exported\"\n      ];\n      var isSpecial = false;\n      var value = label + body;\n      var commentType = \"plain\";\n      opt = opt || {};\n\n      if (opt.isMultiline) {\n        value += \"*/\";\n      }\n\n      body = body.replace(/\\n/g, \" \");\n\n      if (label === \"/*\" && reg.fallsThrough.test(body)) {\n        isSpecial = true;\n        commentType = \"falls through\";\n      }\n\n      special.forEach(function(str) {\n        if (isSpecial) {\n          return;\n        }\n        if (label === \"//\" && str !== \"jshint\" && str !== \"jshint.unstable\") {\n          return;\n        }\n\n        if (body.charAt(str.length) === \" \" && body.substr(0, str.length) === str) {\n          isSpecial = true;\n          label = label + str;\n          body = body.substr(str.length);\n        }\n\n        if (!isSpecial && body.charAt(0) === \" \" && body.charAt(str.length + 1) === \" \" &&\n          body.substr(1, str.length) === str) {\n          isSpecial = true;\n          label = label + \" \" + str;\n          body = body.substr(str.length + 1);\n        }\n        var strIndex = body.indexOf(str);\n        if (!isSpecial && strIndex >= 0 && body.charAt(strIndex + str.length) === \" \") {\n          var isAllWhitespace = body.substr(0, strIndex).trim().length === 0;\n          if (isAllWhitespace) {\n            isSpecial = true;\n            body = body.substr(str.length + strIndex);\n          }\n        }\n\n        if (!isSpecial) {\n          return;\n        }\n\n        switch (str) {\n        case \"member\":\n          commentType = \"members\";\n          break;\n        case \"global\":\n          commentType = \"globals\";\n          break;\n        default:\n          var options = body.split(\":\").map(function(v) {\n            return v.replace(/^\\s+/, \"\").replace(/\\s+$/, \"\");\n          });\n\n          if (options.length === 2) {\n            switch (options[0]) {\n            case \"ignore\":\n              switch (options[1]) {\n              case \"start\":\n                self.ignoringLinterErrors = true;\n                isSpecial = false;\n                break;\n              case \"end\":\n                self.ignoringLinterErrors = false;\n                isSpecial = false;\n                break;\n              }\n            }\n          }\n\n          commentType = str;\n        }\n      });\n\n      return {\n        type: Token.Comment,\n        commentType: commentType,\n        value: value,\n        body: body,\n        isSpecial: isSpecial,\n        isMalformed: opt.isMalformed || false\n      };\n    }\n    if (ch1 === \"*\" && ch2 === \"/\") {\n      this.trigger(\"error\", {\n        code: \"E018\",\n        line: startLine,\n        character: startChar\n      });\n\n      this.skip(2);\n      return null;\n    }\n    if (ch1 !== \"/\" || (ch2 !== \"*\" && ch2 !== \"/\")) {\n      return null;\n    }\n    if (ch2 === \"/\") {\n      this.skip(this.input.length); // Skip to the EOL.\n      return commentToken(\"//\", rest);\n    }\n\n    var body = \"\";\n    if (ch2 === \"*\") {\n      this.inComment = true;\n      this.skip(2);\n\n      while (this.peek() !== \"*\" || this.peek(1) !== \"/\") {\n        if (this.peek() === \"\") { // End of Line\n          body += \"\\n\";\n          if (!this.nextLine(checks)) {\n            this.trigger(\"error\", {\n              code: \"E017\",\n              line: startLine,\n              character: startChar\n            });\n\n            this.inComment = false;\n            return commentToken(\"/*\", body, {\n              isMultiline: true,\n              isMalformed: true\n            });\n          }\n        } else {\n          body += this.peek();\n          this.skip();\n        }\n      }\n\n      this.skip(2);\n      this.inComment = false;\n      return commentToken(\"/*\", body, { isMultiline: true });\n    }\n  },\n  scanKeyword: function() {\n    var result = /^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input);\n    var keywords = [\n      \"if\", \"in\", \"do\", \"var\", \"for\", \"new\",\n      \"try\", \"let\", \"this\", \"else\", \"case\",\n      \"void\", \"with\", \"enum\", \"while\", \"break\",\n      \"catch\", \"throw\", \"const\", \"yield\", \"class\",\n      \"super\", \"return\", \"typeof\", \"delete\",\n      \"switch\", \"export\", \"import\", \"default\",\n      \"finally\", \"extends\", \"function\", \"continue\",\n      \"debugger\", \"instanceof\", \"true\", \"false\", \"null\", \"async\", \"await\"\n    ];\n\n    if (result && keywords.indexOf(result[0]) >= 0) {\n      return {\n        type: Token.Keyword,\n        value: result[0]\n      };\n    }\n\n    return null;\n  },\n  scanIdentifier: function(checks) {\n    var id = \"\";\n    var index = 0;\n    var char, value;\n\n    function isNonAsciiIdentifierStart(code) {\n      return nonAsciiIdentifierStartTable.indexOf(code) > -1;\n    }\n\n    function isNonAsciiIdentifierPart(code) {\n      return isNonAsciiIdentifierStart(code) || nonAsciiIdentifierPartTable.indexOf(code) > -1;\n    }\n\n    var readUnicodeEscapeSequence = function() {\n      index += 1;\n\n      if (this.peek(index) !== \"u\") {\n        return null;\n      }\n\n      var sequence = this.peek(index + 1) + this.peek(index + 2) +\n        this.peek(index + 3) + this.peek(index + 4);\n      var code;\n\n      if (isHex(sequence)) {\n        code = parseInt(sequence, 16);\n\n        if (asciiIdentifierPartTable[code] || isNonAsciiIdentifierPart(code)) {\n          index += 5;\n          return \"\\\\u\" + sequence;\n        }\n\n        return null;\n      }\n\n      return null;\n    }.bind(this);\n\n    var getIdentifierStart = function() {\n      var chr = this.peek(index);\n      var code = chr.charCodeAt(0);\n\n      if (code === 92) {\n        return readUnicodeEscapeSequence();\n      }\n\n      if (code < 128) {\n        if (asciiIdentifierStartTable[code]) {\n          index += 1;\n          return chr;\n        }\n\n        return null;\n      }\n\n      if (isNonAsciiIdentifierStart(code)) {\n        index += 1;\n        return chr;\n      }\n\n      return null;\n    }.bind(this);\n\n    var getIdentifierPart = function() {\n      var chr = this.peek(index);\n      var code = chr.charCodeAt(0);\n\n      if (code === 92) {\n        return readUnicodeEscapeSequence();\n      }\n\n      if (code < 128) {\n        if (asciiIdentifierPartTable[code]) {\n          index += 1;\n          return chr;\n        }\n\n        return null;\n      }\n\n      if (isNonAsciiIdentifierPart(code)) {\n        index += 1;\n        return chr;\n      }\n\n      return null;\n    }.bind(this);\n\n    function removeEscapeSequences(id) {\n      return id.replace(/\\\\u([0-9a-fA-F]{4})/g, function(m0, codepoint) {\n        return String.fromCharCode(parseInt(codepoint, 16));\n      });\n    }\n\n    char = getIdentifierStart();\n    if (char === null) {\n      return null;\n    }\n\n    id = char;\n    for (;;) {\n      char = getIdentifierPart();\n\n      if (char === null) {\n        break;\n      }\n\n      id += char;\n    }\n\n    value = removeEscapeSequences(id);\n\n    if (!state.inES6(true)) {\n      es5IdentifierNames = _dereq_(\"../data/es5-identifier-names.js\");\n\n      if (!es5IdentifierNames.test(value)) {\n        this.triggerAsync(\n          \"warning\",\n          {\n            code: \"W119\",\n            line: this.line,\n            character: this.char,\n            data: [\"unicode 8\", \"6\"]\n          },\n          checks,\n          function() { return true; }\n        );\n      }\n    }\n\n    return {\n      type: Token.Identifier,\n      value: value,\n      text: id,\n      tokenLength: id.length\n    };\n  },\n  scanNumericLiteral: function(checks) {\n    var index = 0;\n    var value = \"\";\n    var length = this.input.length;\n    var char = this.peek(index);\n    var isAllowedDigit = isDecimalDigit;\n    var base = 10;\n    var isLegacy = false;\n    var isNonOctal = false;\n\n    function isDecimalDigit(str) {\n      return (/^[0-9]$/).test(str);\n    }\n\n    function isOctalDigit(str) {\n      return (/^[0-7]$/).test(str);\n    }\n\n    function isNonOctalDigit(str) {\n      return str === \"8\" || str === \"9\";\n    }\n\n    function isBinaryDigit(str) {\n      return (/^[01]$/).test(str);\n    }\n\n    function isIdentifierStart(ch) {\n      return (ch === \"$\") || (ch === \"_\") || (ch === \"\\\\\") ||\n        (ch >= \"a\" && ch <= \"z\") || (ch >= \"A\" && ch <= \"Z\");\n    }\n\n    if (char !== \".\" && !isDecimalDigit(char)) {\n      return null;\n    }\n\n    if (char !== \".\") {\n      value = this.peek(index);\n      index += 1;\n      char = this.peek(index);\n\n      if (value === \"0\") {\n        if (char === \"x\" || char === \"X\") {\n          isAllowedDigit = isHexDigit;\n          base = 16;\n\n          index += 1;\n          value += char;\n        }\n        if (char === \"o\" || char === \"O\") {\n          isAllowedDigit = isOctalDigit;\n          base = 8;\n\n          if (!state.inES6(true)) {\n            this.triggerAsync(\n              \"warning\",\n              {\n                code: \"W119\",\n                line: this.line,\n                character: this.char,\n                data: [ \"Octal integer literal\", \"6\" ]\n              },\n              checks,\n              function() { return true; }\n            );\n          }\n\n          index += 1;\n          value += char;\n        }\n        if (char === \"b\" || char === \"B\") {\n          isAllowedDigit = isBinaryDigit;\n          base = 2;\n\n          if (!state.inES6(true)) {\n            this.triggerAsync(\n              \"warning\",\n              {\n                code: \"W119\",\n                line: this.line,\n                character: this.char,\n                data: [ \"Binary integer literal\", \"6\" ]\n              },\n              checks,\n              function() { return true; }\n            );\n          }\n\n          index += 1;\n          value += char;\n        }\n        if (isOctalDigit(char)) {\n          isAllowedDigit = isOctalDigit;\n          base = 8;\n          isLegacy = true;\n\n        } else if (isDecimalDigit(char)) {\n          isNonOctal = true;\n        }\n      }\n\n      while (index < length) {\n        char = this.peek(index);\n\n        if (isLegacy && isNonOctalDigit(char)) {\n          base = 10;\n          isLegacy = false;\n          isNonOctal = true;\n          isAllowedDigit = isDecimalDigit;\n        }\n\n        if (!isAllowedDigit(char)) {\n          break;\n        }\n        value += char;\n        index += 1;\n      }\n\n      var isBigInt = this.peek(index) === 'n';\n\n      if (isAllowedDigit !== isDecimalDigit || isBigInt) {\n        if (isBigInt) {\n          this.triggerAsync(\n            \"warning\",\n            {\n              code: \"W119\",\n              line: this.line,\n              character: this.char,\n              data: [ \"BigInt\", \"11\" ]\n            },\n            checks,\n            function() { return !state.inES11(); }\n          );\n\n          if (isLegacy || isNonOctal) {\n            this.triggerAsync(\n              \"error\",\n              {\n                code: \"E067\",\n                line: this.line,\n                character: this.char,\n                data: [value + char]\n              },\n              checks,\n              function() { return true; }\n            );\n          }\n\n          value += char;\n          index += 1;\n        } else if (!isLegacy && value.length <= 2) { // 0x\n          return {\n            type: Token.NumericLiteral,\n            value: value,\n            isMalformed: true\n          };\n        }\n\n        if (index < length) {\n          char = this.peek(index);\n          if (isIdentifierStart(char)) {\n            return null;\n          }\n        }\n\n        return {\n          type: Token.NumericLiteral,\n          value: value,\n          base: base,\n          isLegacy: isLegacy,\n          isMalformed: false\n        };\n      }\n    }\n\n    if (char === \".\") {\n      value += char;\n      index += 1;\n\n      while (index < length) {\n        char = this.peek(index);\n        if (!isDecimalDigit(char)) {\n          break;\n        }\n        value += char;\n        index += 1;\n      }\n    }\n\n    if (char === \"e\" || char === \"E\") {\n      value += char;\n      index += 1;\n      char = this.peek(index);\n\n      if (char === \"+\" || char === \"-\") {\n        value += this.peek(index);\n        index += 1;\n      }\n\n      char = this.peek(index);\n      if (isDecimalDigit(char)) {\n        value += char;\n        index += 1;\n\n        while (index < length) {\n          char = this.peek(index);\n          if (!isDecimalDigit(char)) {\n            break;\n          }\n          value += char;\n          index += 1;\n        }\n      } else {\n        return null;\n      }\n    }\n\n    if (index < length) {\n      char = this.peek(index);\n      if (isIdentifierStart(char)) {\n        return null;\n      }\n    }\n    this.triggerAsync(\"warning\", {\n      code: \"W045\",\n      line: this.line,\n      character: this.char + value.length,\n      data: [ value ]\n    }, checks, function() { return !isFinite(value); });\n\n    return {\n      type: Token.NumericLiteral,\n      value: value,\n      base: base,\n      isNonOctal: isNonOctal,\n      isMalformed: false\n    };\n  },\n  scanEscapeSequence: function(checks) {\n    var allowNewLine = false;\n    var jump = 1;\n    this.skip();\n    var char = this.peek();\n\n    switch (char) {\n    case \"'\":\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\'\" ]\n      }, checks, function() {return state.jsonMode; });\n      break;\n    case \"b\":\n      char = \"\\\\b\";\n      break;\n    case \"f\":\n      char = \"\\\\f\";\n      break;\n    case \"n\":\n      char = \"\\\\n\";\n      break;\n    case \"r\":\n      char = \"\\\\r\";\n      break;\n    case \"t\":\n      char = \"\\\\t\";\n      break;\n    case \"0\":\n      char = \"\\\\0\";\n      var n = parseInt(this.peek(1), 10);\n      this.triggerAsync(\"warning\", {\n        code: \"W115\",\n        line: this.line,\n        character: this.char\n      }, checks,\n      function() { return n >= 0 && n <= 7 && state.isStrict(); });\n      break;\n    case \"1\":\n    case \"2\":\n    case \"3\":\n    case \"4\":\n    case \"5\":\n    case \"6\":\n    case \"7\":\n      char = \"\\\\\" + char;\n      this.triggerAsync(\"warning\", {\n        code: \"W115\",\n        line: this.line,\n        character: this.char\n      }, checks,\n      function() { return state.isStrict(); });\n      break;\n    case \"u\":\n      var sequence = this.input.substr(1, 4);\n      var code = parseInt(sequence, 16);\n      if (!isHex(sequence)) {\n        this.trigger(\"warning\", {\n          code: \"W052\",\n          line: this.line,\n          character: this.char,\n          data: [ \"u\" + sequence ]\n        });\n      }\n      char = String.fromCharCode(code);\n      jump = 5;\n      break;\n    case \"v\":\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\v\" ]\n      }, checks, function() { return state.jsonMode; });\n\n      char = \"\\v\";\n      break;\n    case \"x\":\n      var  x = parseInt(this.input.substr(1, 2), 16);\n\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\x-\" ]\n      }, checks, function() { return state.jsonMode; });\n\n      char = String.fromCharCode(x);\n      jump = 3;\n      break;\n    case \"\\\\\":\n      char = \"\\\\\\\\\";\n      break;\n    case \"/\":\n      break;\n    case \"\":\n      allowNewLine = true;\n      char = \"\";\n      break;\n    }\n\n    return { char: char, jump: jump, allowNewLine: allowNewLine };\n  },\n  scanTemplateLiteral: function(checks) {\n    var tokenType;\n    var value = \"\";\n    var ch;\n    var startLine = this.line;\n    var startChar = this.char;\n    var depth = this.templateStarts.length;\n\n    if (this.peek() === \"`\") {\n      if (!state.inES6(true)) {\n        this.triggerAsync(\n          \"warning\",\n          {\n            code: \"W119\",\n            line: this.line,\n            character: this.char,\n            data: [\"template literal syntax\", \"6\"]\n          },\n          checks,\n          function() { return true; }\n        );\n      }\n      tokenType = Token.TemplateHead;\n      this.templateStarts.push({ line: this.line, char: this.char });\n      depth = this.templateStarts.length;\n      this.skip(1);\n      this.pushContext(Context.Template);\n    } else if (this.inContext(Context.Template) && this.peek() === \"}\") {\n      tokenType = Token.TemplateMiddle;\n    } else {\n      return null;\n    }\n\n    while (this.peek() !== \"`\") {\n      while ((ch = this.peek()) === \"\") {\n        value += \"\\n\";\n        if (!this.nextLine(checks)) {\n          var startPos = this.templateStarts.pop();\n          this.trigger(\"error\", {\n            code: \"E052\",\n            line: startPos.line,\n            character: startPos.char\n          });\n          return {\n            type: tokenType,\n            value: value,\n            startLine: startLine,\n            startChar: startChar,\n            isUnclosed: true,\n            depth: depth,\n            context: this.popContext()\n          };\n        }\n      }\n\n      if (ch === '$' && this.peek(1) === '{') {\n        value += '${';\n        this.skip(2);\n        return {\n          type: tokenType,\n          value: value,\n          startLine: startLine,\n          startChar: startChar,\n          isUnclosed: false,\n          depth: depth,\n          context: this.currentContext()\n        };\n      } else if (ch === '\\\\') {\n        var escape = this.scanEscapeSequence(checks);\n        value += escape.char;\n        this.skip(escape.jump);\n      } else if (ch !== '`') {\n        value += ch;\n        this.skip(1);\n      }\n    }\n    tokenType = tokenType === Token.TemplateHead ? Token.NoSubstTemplate : Token.TemplateTail;\n    this.skip(1);\n    this.templateStarts.pop();\n\n    return {\n      type: tokenType,\n      value: value,\n      startLine: startLine,\n      startChar: startChar,\n      isUnclosed: false,\n      depth: depth,\n      context: this.popContext()\n    };\n  },\n  scanStringLiteral: function(checks) {\n    var quote = this.peek();\n    if (quote !== \"\\\"\" && quote !== \"'\") {\n      return null;\n    }\n    this.triggerAsync(\"warning\", {\n      code: \"W108\",\n      line: this.line,\n      character: this.char // +1?\n    }, checks, function() { return state.jsonMode && quote !== \"\\\"\"; });\n\n    var value = \"\";\n    var startLine = this.line;\n    var startChar = this.char;\n    var allowNewLine = false;\n\n    this.skip();\n\n    while (this.peek() !== quote) {\n      if (this.peek() === \"\") { // End Of Line\n\n        if (!allowNewLine) {\n          this.trigger(\"warning\", {\n            code: \"W112\",\n            line: this.line,\n            character: this.char\n          });\n        } else {\n          allowNewLine = false;\n\n          this.triggerAsync(\"warning\", {\n            code: \"W043\",\n            line: this.line,\n            character: this.char\n          }, checks, function() { return !state.option.multistr; });\n\n          this.triggerAsync(\"warning\", {\n            code: \"W042\",\n            line: this.line,\n            character: this.char\n          }, checks, function() { return state.jsonMode && state.option.multistr; });\n        }\n\n        if (!this.nextLine(checks)) {\n          return {\n            type: Token.StringLiteral,\n            value: value,\n            startLine: startLine,\n            startChar: startChar,\n            isUnclosed: true,\n            quote: quote\n          };\n        }\n\n      } else { // Any character other than End Of Line\n\n        allowNewLine = false;\n        var char = this.peek();\n        var jump = 1; // A length of a jump, after we're done\n\n        if (char < \" \") {\n          this.triggerAsync(\n            \"warning\",\n            {\n              code: \"W113\",\n              line: this.line,\n              character: this.char,\n              data: [ \"<non-printable>\" ]\n            },\n            checks,\n            function() { return true; }\n          );\n        }\n        if (char === \"\\\\\") {\n          var parsed = this.scanEscapeSequence(checks);\n          char = parsed.char;\n          jump = parsed.jump;\n          allowNewLine = parsed.allowNewLine;\n        }\n        if (char !== \"\") {\n          value += char;\n          this.skip(jump);\n        }\n      }\n    }\n\n    this.skip();\n    return {\n      type: Token.StringLiteral,\n      value: value,\n      startLine: startLine,\n      startChar: startChar,\n      isUnclosed: false,\n      quote: quote\n    };\n  },\n  scanRegExp: function(checks) {\n    var index = 0;\n    var length = this.input.length;\n    var char = this.peek();\n    var value = char;\n    var body = \"\";\n    var groupReferences = [];\n    var allFlags = \"\";\n    var es5Flags = \"\";\n    var malformed = false;\n    var isCharSet = false;\n    var isCharSetRange = false;\n    var isGroup = false;\n    var isQuantifiable = false;\n    var hasInvalidQuantifier = false;\n    var escapedChars = \"\";\n    var hasUFlag = function() { return allFlags.indexOf(\"u\") > -1; };\n    var escapeSequence;\n    var groupCount = 0;\n    var terminated, malformedDesc;\n\n    var scanRegexpEscapeSequence = function() {\n      var next, sequence;\n      index += 1;\n      char = this.peek(index);\n\n      if (reg.nonzeroDigit.test(char)) {\n        sequence = char;\n        next = this.peek(index + 1);\n        while (reg.nonzeroDigit.test(next) || next === \"0\") {\n          index += 1;\n          char = next;\n          sequence += char;\n          body += char;\n          value += char;\n          next = this.peek(index + 1);\n        }\n        groupReferences.push(Number(sequence));\n        return sequence;\n      }\n\n      escapedChars += char;\n\n      if (char === \"u\" && this.peek(index + 1) === \"{\") {\n        var x = index + 2;\n        sequence = \"u{\";\n        next = this.peek(x);\n        while (isHex(next)) {\n          sequence += next;\n          x += 1;\n          next = this.peek(x);\n        }\n\n        if (next !== \"}\") {\n          this.triggerAsync(\n            \"error\",\n            {\n              code: \"E016\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Invalid Unicode escape sequence\" ]\n            },\n            checks,\n            hasUFlag\n          );\n        } else if (sequence.length > 2) {\n          sequence += \"}\";\n          body += sequence;\n          value += sequence;\n          index = x + 1;\n          return sequence;\n        }\n      }\n\n      if (char === \"p\" || char === \"P\") {\n        var y = index + 2;\n        sequence = \"\";\n        next = \"\";\n\n        if (this.peek(index + 1) === \"{\") {\n          next = this.peek(y);\n          while (next && next !== \"}\") {\n            sequence += next;\n            y += 1;\n            next = this.peek(y);\n          }\n        }\n        if (!sequence || !_dereq_(\"./validate-unicode-escape-sequence\")(sequence)) {\n          this.triggerAsync(\n            \"error\",\n            {\n              code: \"E016\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Invalid Unicode property escape sequence\" ]\n            },\n            checks,\n            hasUFlag\n          );\n        }\n\n        if (sequence) {\n          sequence = char + \"{\" + sequence + \"}\";\n          body += sequence;\n          value += sequence;\n          index = y + 1;\n\n          if (!state.inES9()) {\n            this.triggerAsync(\n              \"warning\",\n              {\n                code: \"W119\",\n                line: this.line,\n                character: this.char,\n                data: [ \"Unicode property escape\", \"9\" ]\n              },\n              checks,\n              hasUFlag\n            );\n          }\n\n          return sequence;\n        }\n      }\n      if (char < \" \") {\n        malformed = true;\n        this.triggerAsync(\n          \"warning\",\n          {\n            code: \"W048\",\n            line: this.line,\n            character: this.char\n          },\n          checks,\n          function() { return true; }\n        );\n      }\n      if (char === \"<\") {\n        malformed = true;\n        this.triggerAsync(\n          \"warning\",\n          {\n            code: \"W049\",\n            line: this.line,\n            character: this.char,\n            data: [ char ]\n          },\n          checks,\n          function() { return true; }\n        );\n      } else if (char === \"0\" && reg.decimalDigit.test(this.peek(index + 1))) {\n        this.triggerAsync(\n          \"error\",\n          {\n            code: \"E016\",\n            line: this.line,\n            character: this.char,\n            data: [ \"Invalid decimal escape sequence\" ]\n          },\n          checks,\n          hasUFlag\n        );\n      }\n\n      index += 1;\n      body += char;\n      value += char;\n\n      return char;\n    }.bind(this);\n\n    var checkQuantifier = function() {\n      var lookahead = index;\n      var lowerBound = \"\";\n      var upperBound = \"\";\n      var next;\n\n      next = this.peek(lookahead + 1);\n\n      while (reg.decimalDigit.test(next)) {\n        lookahead += 1;\n        lowerBound += next;\n        next = this.peek(lookahead + 1);\n      }\n\n      if (!lowerBound) {\n        return false;\n      }\n\n      if (next === \"}\") {\n        return true;\n      }\n\n      if (next !== \",\") {\n        return false;\n      }\n\n      lookahead += 1;\n      next = this.peek(lookahead + 1);\n\n      while (reg.decimalDigit.test(next)) {\n        lookahead += 1;\n        upperBound += next;\n        next = this.peek(lookahead + 1);\n      }\n\n      if (next !== \"}\") {\n        return false;\n      }\n\n      if (upperBound) {\n        return Number(lowerBound) <= Number(upperBound);\n      }\n\n      return true;\n    }.bind(this);\n\n    var translateUFlag = function(body) {\n      var astralSubstitute = \"\\uFFFF\";\n\n      return body\n        .replace(/\\\\u\\{([0-9a-fA-F]+)\\}|\\\\u([a-fA-F0-9]{4})/g, function($0, $1, $2) {\n          var codePoint = parseInt($1 || $2, 16);\n          var literal;\n\n          if (codePoint > 0x10FFFF) {\n            malformed = true;\n            this.trigger(\"error\", {\n              code: \"E016\",\n              line: this.line,\n              character: this.char,\n              data: [ char ]\n            });\n\n            return;\n          }\n          literal = String.fromCharCode(codePoint);\n\n          if (reg.regexpSyntaxChars.test(literal)) {\n            return $0;\n          }\n\n          if (codePoint <= 0xFFFF) {\n            return String.fromCharCode(codePoint);\n          }\n          return astralSubstitute;\n        }.bind(this))\n        .replace(\n          /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n          astralSubstitute\n        );\n    }.bind(this);\n    if (!this.prereg || char !== \"/\") {\n      return null;\n    }\n\n    index += 1;\n    terminated = false;\n\n    while (index < length) {\n      isCharSetRange &= char === \"-\";\n      char = this.peek(index);\n      value += char;\n      body += char;\n\n      if (isCharSet) {\n        if (char === \"]\") {\n          if (this.peek(index - 1) !== \"\\\\\" || this.peek(index - 2) === \"\\\\\") {\n            isCharSet = false;\n          }\n        } else if (char === \"-\") {\n          isCharSetRange = true;\n        }\n      }\n\n      if (char === \"\\\\\") {\n        escapeSequence = scanRegexpEscapeSequence();\n\n        if (isCharSet && (this.peek(index) === \"-\" || isCharSetRange) &&\n          reg.regexpCharClasses.test(escapeSequence)) {\n          this.triggerAsync(\n            \"error\",\n            {\n              code: \"E016\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Character class used in range\" ]\n            },\n            checks,\n            hasUFlag\n          );\n        }\n\n        continue;\n      }\n\n      if (isCharSet) {\n        index += 1;\n        continue;\n      }\n\n      if (char === \"{\" && !hasInvalidQuantifier) {\n        hasInvalidQuantifier = !checkQuantifier();\n      }\n\n      if (char === \"[\") {\n        isCharSet = true;\n        index += 1;\n        continue;\n      } else if (char === \"(\") {\n        isGroup = true;\n\n        if (this.peek(index + 1) === \"?\" &&\n          (this.peek(index + 2) === \"=\" || this.peek(index + 2) === \"!\")) {\n          isQuantifiable = true;\n        }\n      } else if (char === \")\") {\n        if (isQuantifiable) {\n          isQuantifiable = false;\n\n          if (reg.regexpQuantifiers.test(this.peek(index + 1))) {\n            this.triggerAsync(\n              \"error\",\n              {\n                code: \"E016\",\n                line: this.line,\n                character: this.char,\n                data: [ \"Quantified quantifiable\" ]\n              },\n              checks,\n              hasUFlag\n            );\n          }\n        } else {\n          groupCount += 1;\n        }\n\n        isGroup = false;\n      } else if (char === \"/\") {\n        body = body.substr(0, body.length - 1);\n        terminated = true;\n        index += 1;\n        break;\n      }\n\n      index += 1;\n    }\n\n    if (!terminated) {\n      this.trigger(\"error\", {\n        code: \"E015\",\n        line: this.line,\n        character: this.from\n      });\n\n      return void this.trigger(\"fatal\", {\n        line: this.line,\n        from: this.from\n      });\n    }\n\n    while (index < length) {\n      char = this.peek(index);\n      if (!/[gimyus]/.test(char)) {\n        break;\n      }\n      if (char === \"y\") {\n        if (!state.inES6(true)) {\n          this.triggerAsync(\n            \"warning\",\n            {\n              code: \"W119\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Sticky RegExp flag\", \"6\" ]\n            },\n            checks,\n            function() { return true; }\n          );\n        }\n      } else if (char === \"u\") {\n        if (!state.inES6(true)) {\n          this.triggerAsync(\n            \"warning\",\n            {\n              code: \"W119\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Unicode RegExp flag\", \"6\" ]\n            },\n            checks,\n            function() { return true; }\n          );\n        }\n\n        var hasInvalidEscape = (function(groupReferences, groupCount, escapedChars, reg) {\n          var hasInvalidGroup = groupReferences.some(function(groupReference) {\n            if (groupReference > groupCount) {\n              return true;\n            }\n          });\n\n          if (hasInvalidGroup) {\n            return true;\n          }\n\n          return !escapedChars.split(\"\").every(function(escapedChar) {\n              return escapedChar === \"u\" ||\n                escapedChar === \"/\" ||\n                escapedChar === \"0\" ||\n                reg.regexpControlEscapes.test(escapedChar) ||\n                reg.regexpCharClasses.test(escapedChar) ||\n                reg.regexpSyntaxChars.test(escapedChar);\n            });\n        }(groupReferences, groupCount, escapedChars, reg));\n\n        if (hasInvalidEscape) {\n          malformedDesc = \"Invalid escape\";\n        } else if (hasInvalidQuantifier) {\n          malformedDesc = \"Invalid quantifier\";\n        }\n\n        body = translateUFlag(body);\n      } else if (char === \"s\") {\n        if (!state.inES9()) {\n          this.triggerAsync(\n            \"warning\",\n            {\n              code: \"W119\",\n              line: this.line,\n              character: this.char,\n              data: [ \"DotAll RegExp flag\", \"9\" ]\n            },\n            checks,\n            function() { return true; }\n          );\n        }\n        if (value.indexOf(\"s\") > -1) {\n          malformedDesc = \"Duplicate RegExp flag\";\n        }\n      } else {\n        es5Flags += char;\n      }\n\n      if (allFlags.indexOf(char) > -1) {\n        malformedDesc = \"Duplicate RegExp flag\";\n      }\n      allFlags += char;\n\n      value += char;\n      allFlags += char;\n      index += 1;\n    }\n\n    if (allFlags.indexOf(\"u\") === -1) {\n      this.triggerAsync(\"warning\", {\n        code: \"W147\",\n        line: this.line,\n        character: this.char\n      }, checks, function() { return state.option.regexpu; });\n    }\n\n    try {\n      new RegExp(body, es5Flags);\n    } catch (err) {\n      malformedDesc = err.message;\n    }\n\n    if (malformedDesc) {\n      malformed = true;\n      this.trigger(\"error\", {\n        code: \"E016\",\n        line: this.line,\n        character: this.char,\n        data: [ malformedDesc ]\n      });\n    } else if (allFlags.indexOf(\"s\") > -1 && !reg.regexpDot.test(body)) {\n      this.trigger(\"warning\", {\n        code: \"W148\",\n        line: this.line,\n        character: this.char\n      });\n    }\n\n    return {\n      type: Token.RegExp,\n      value: value,\n      isMalformed: malformed\n    };\n  },\n  scanNonBreakingSpaces: function() {\n    return state.option.nonbsp ?\n      this.input.search(/(\\u00A0)/) : -1;\n  },\n  next: function(checks) {\n    this.from = this.char;\n    while (reg.whitespace.test(this.peek())) {\n      this.from += 1;\n      this.skip();\n    }\n\n    var match = this.scanComments(checks) ||\n      this.scanStringLiteral(checks) ||\n      this.scanTemplateLiteral(checks);\n\n    if (match) {\n      return match;\n    }\n\n    match =\n      this.scanRegExp(checks) ||\n      this.scanPunctuator() ||\n      this.scanKeyword() ||\n      this.scanIdentifier(checks) ||\n      this.scanNumericLiteral(checks);\n\n    if (match) {\n      this.skip(match.tokenLength || match.value.length);\n      return match;\n    }\n\n    return null;\n  },\n  nextLine: function(checks) {\n    var char;\n\n    if (this.line >= this.getLines().length) {\n      return false;\n    }\n\n    this.input = this.getLines()[this.line];\n    this.line += 1;\n    this.char = 1;\n    this.from = 1;\n\n    var inputTrimmed = this.input.trim();\n\n    var startsWith = function() {\n      return _.some(arguments, function(prefix) {\n        return inputTrimmed.indexOf(prefix) === 0;\n      });\n    };\n\n    var endsWith = function() {\n      return _.some(arguments, function(suffix) {\n        return inputTrimmed.indexOf(suffix, inputTrimmed.length - suffix.length) !== -1;\n      });\n    };\n    if (this.ignoringLinterErrors === true) {\n      if (!startsWith(\"/*\", \"//\") && !(this.inComment && endsWith(\"*/\"))) {\n        this.input = \"\";\n      }\n    }\n\n    char = this.scanNonBreakingSpaces();\n    if (char >= 0) {\n      this.triggerAsync(\n        \"warning\",\n        { code: \"W125\", line: this.line, character: char + 1 },\n        checks,\n        function() { return true; }\n      );\n    }\n\n    this.input = this.input.replace(/\\t/g, state.tab);\n\n    if (!this.ignoringLinterErrors && state.option.maxlen &&\n      state.option.maxlen < this.input.length) {\n      var inComment = this.inComment ||\n        startsWith.call(inputTrimmed, \"//\") ||\n        startsWith.call(inputTrimmed, \"/*\");\n\n      var shouldTriggerError = !inComment || !reg.maxlenException.test(inputTrimmed);\n\n      if (shouldTriggerError) {\n        this.triggerAsync(\n          \"warning\",\n          { code: \"W101\", line: this.line, character: this.input.length },\n          checks,\n          function() { return true; }\n        );\n      }\n    }\n\n    return true;\n  },\n  token: function() {\n    var checks = asyncTrigger();\n    var token;\n    var create = function(type, value, isProperty, token) {\n      var obj;\n\n      if (type !== \"(endline)\" && type !== \"(end)\") {\n        this.prereg = false;\n      }\n\n      if (type === \"(punctuator)\") {\n        switch (value) {\n        case \".\":\n        case \")\":\n        case \"~\":\n        case \"#\":\n        case \"]\":\n        case \"}\":\n        case \"++\":\n        case \"--\":\n          this.prereg = false;\n          break;\n        default:\n          this.prereg = true;\n        }\n\n        obj = Object.create(state.syntax[value] || state.syntax[\"(error)\"]);\n      }\n\n      if (type === \"(identifier)\") {\n        if (value === \"return\" || value === \"case\" || value === \"yield\" ||\n            value === \"typeof\" || value === \"instanceof\" || value === \"void\" ||\n            value === \"await\" || value === \"new\" || value === \"delete\" ||\n            value === \"default\" || value === \"extends\") {\n          this.prereg = true;\n        }\n\n        if (_.has(state.syntax, value)) {\n          obj = Object.create(state.syntax[value] || state.syntax[\"(error)\"]);\n        }\n      }\n\n      if (type === \"(template)\" || type === \"(template middle)\") {\n        this.prereg = true;\n      }\n\n      if (!obj) {\n        obj = Object.create(state.syntax[type]);\n      }\n\n      obj.identifier = (type === \"(identifier)\");\n      obj.type = obj.type || type;\n      obj.value = value;\n      obj.line = this.line;\n      obj.character = this.char;\n      obj.from = this.from;\n      if (obj.identifier && token) obj.raw_text = token.text || token.value;\n      if (token && token.startLine && token.startLine !== this.line) {\n        obj.startLine = token.startLine;\n      }\n      if (token && token.context) {\n        obj.context = token.context;\n      }\n      if (token && token.depth) {\n        obj.depth = token.depth;\n      }\n      if (token && token.isUnclosed) {\n        obj.isUnclosed = token.isUnclosed;\n      }\n\n      if (isProperty && obj.identifier) {\n        obj.isProperty = isProperty;\n      }\n\n      obj.check = checks.check;\n\n      return obj;\n    }.bind(this);\n\n    for (;;) {\n      if (!this.input.length) {\n        if (this.nextLine(checks)) {\n          return create(\"(endline)\", \"\");\n        }\n\n        if (this.exhausted) {\n          return null;\n        }\n\n        this.exhausted = true;\n        return create(\"(end)\", \"\");\n      }\n\n      token = this.next(checks);\n\n      if (!token) {\n        if (this.input.length) {\n          this.trigger(\"error\", {\n            code: \"E024\",\n            line: this.line,\n            character: this.char,\n            data: [ this.peek() ]\n          });\n\n          this.input = \"\";\n        }\n\n        continue;\n      }\n\n      switch (token.type) {\n      case Token.StringLiteral:\n        this.triggerAsync(\"String\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value,\n          quote: token.quote\n        }, checks, function() { return true; });\n\n        return create(\"(string)\", token.value, null, token);\n\n      case Token.TemplateHead:\n        this.trigger(\"TemplateHead\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template)\", token.value, null, token);\n\n      case Token.TemplateMiddle:\n        this.trigger(\"TemplateMiddle\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template middle)\", token.value, null, token);\n\n      case Token.TemplateTail:\n        this.trigger(\"TemplateTail\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template tail)\", token.value, null, token);\n\n      case Token.NoSubstTemplate:\n        this.trigger(\"NoSubstTemplate\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(no subst template)\", token.value, null, token);\n\n      case Token.Identifier:\n        this.triggerAsync(\"Identifier\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          name: token.value,\n          raw_name: token.text,\n          isProperty: state.tokens.curr.id === \".\"\n        }, checks, function() { return true; });\n      case Token.Keyword:\n        return create(\"(identifier)\", token.value, state.tokens.curr.id === \".\", token);\n\n      case Token.NumericLiteral:\n        if (token.isMalformed) {\n          this.trigger(\"error\", {\n            code: \"E067\",\n            line: this.line,\n            character: this.char,\n            data: [ token.value ]\n          });\n        }\n\n        this.triggerAsync(\"warning\", {\n          code: \"W114\",\n          line: this.line,\n          character: this.char,\n          data: [ \"0x-\" ]\n        }, checks, function() { return token.base === 16 && state.jsonMode; });\n\n        this.triggerAsync(\"warning\", {\n          code: \"W115\",\n          line: this.line,\n          character: this.char\n        }, checks, function() {\n          return state.isStrict() && token.base === 8 && token.isLegacy;\n        });\n\n        this.triggerAsync(\"error\", {\n          code: \"E068\",\n          line: this.line,\n          character: this.char\n        }, checks, function() {\n          return state.isStrict() && token.isNonOctal;\n        });\n\n        this.trigger(\"Number\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          value: token.value,\n          base: token.base,\n          isMalformed: token.isMalformed\n        });\n\n        return create(\"(number)\", token.value);\n\n      case Token.RegExp:\n        return create(\"(regexp)\", token.value);\n\n      case Token.Comment:\n        if (token.isSpecial) {\n          return {\n            id: '(comment)',\n            value: token.value,\n            body: token.body,\n            type: token.commentType,\n            isSpecial: token.isSpecial,\n            line: this.line,\n            character: this.char,\n            from: this.from\n          };\n        }\n\n        break;\n\n      default:\n        return create(\"(punctuator)\", token.value);\n      }\n    }\n  }\n};\n\nexports.Lexer = Lexer;\nexports.Context = Context;\n\n},{\"../data/ascii-identifier-data.js\":\"/../../../jshint/data/ascii-identifier-data.js\",\"../data/es5-identifier-names.js\":\"/../../../jshint/data/es5-identifier-names.js\",\"../data/non-ascii-identifier-part-only.js\":\"/../../../jshint/data/non-ascii-identifier-part-only.js\",\"../data/non-ascii-identifier-start.js\":\"/../../../jshint/data/non-ascii-identifier-start.js\",\"./reg.js\":\"/../../../jshint/src/reg.js\",\"./state.js\":\"/../../../jshint/src/state.js\",\"./validate-unicode-escape-sequence\":\"/../../../jshint/src/validate-unicode-escape-sequence.js\",\"events\":\"/node_modules/events/events.js\",\"underscore\":\"/../../../jshint/node_modules/underscore/underscore-umd.js\"}],\"/../../../jshint/src/messages.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nvar _ = _dereq_(\"underscore\");\n\nvar errors = {\n  E001: \"Bad {a}option: '{b}'.\",\n  E002: \"Bad option value.\",\n  E003: \"Expected a JSON value.\",\n  E004: \"Input is neither a string nor an array of strings.\",\n  E005: \"Input is empty.\",\n  E006: \"Unexpected early end of program.\",\n  E007: \"Missing \\\"use strict\\\" statement.\",\n  E008: \"Strict violation.\",\n  E009: \"Option 'validthis' can't be used in a global scope.\",\n  E010: \"'with' is not allowed in strict mode.\",\n  E011: \"'{a}' has already been declared.\",\n  E012: \"const '{a}' is initialized to 'undefined'.\",\n  E013: \"Attempting to override '{a}' which is a constant.\",\n  E014: \"A regular expression literal can be confused with '/='.\",\n  E015: \"Unclosed regular expression.\",\n  E016: \"Invalid regular expression.\",\n  E017: \"Unclosed comment.\",\n  E018: \"Unbegun comment.\",\n  E019: \"Unmatched '{a}'.\",\n  E020: \"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.\",\n  E021: \"Expected '{a}' and instead saw '{b}'.\",\n  E022: \"Line breaking error '{a}'.\",\n  E023: \"Missing '{a}'.\",\n  E024: \"Unexpected '{a}'.\",\n  E025: \"Missing ':' on a case clause.\",\n  E026: \"Missing '}' to match '{' from line {a}.\",\n  E027: \"Missing ']' to match '[' from line {a}.\",\n  E028: \"Illegal comma.\",\n  E029: \"Unclosed string.\",\n  E030: \"Expected an identifier and instead saw '{a}'.\",\n  E031: \"Bad assignment.\", // FIXME: Rephrase\n  E032: \"Expected a small integer or 'false' and instead saw '{a}'.\",\n  E033: \"Expected an operator and instead saw '{a}'.\",\n  E034: \"get/set are ES5 features.\",\n  E035: \"Missing property name.\",\n  E036: \"Expected to see a statement and instead saw a block.\",\n  E037: null,\n  E038: null,\n  E039: \"Function declarations are not invocable. Wrap the whole function invocation in parens.\",\n  E040: \"Each value should have its own case label.\",\n  E041: \"Unrecoverable syntax error.\",\n  E042: \"Stopping.\",\n  E043: \"Too many errors.\",\n  E044: null,\n  E045: \"Invalid for each loop.\",\n  E046: \"Yield expressions may only occur within generator functions.\",\n  E047: null,\n  E048: \"{a} declaration not directly within block.\",\n  E049: \"A {a} cannot be named '{b}'.\",\n  E050: \"Mozilla requires the yield expression to be parenthesized here.\",\n  E051: null,\n  E052: \"Unclosed template literal.\",\n  E053: \"{a} declarations are only allowed at the top level of module scope.\",\n  E054: \"Class properties must be methods. Expected '(' but instead saw '{a}'.\",\n  E055: \"The '{a}' option cannot be set after any executable code.\",\n  E056: \"'{a}' was used before it was declared, which is illegal for '{b}' variables.\",\n  E057: \"Invalid meta property: '{a}.{b}'.\",\n  E058: \"Missing semicolon.\",\n  E059: \"Incompatible values for the '{a}' and '{b}' linting options.\",\n  E060: \"Non-callable values cannot be used as the second operand to instanceof.\",\n  E061: \"Invalid position for 'yield' expression (consider wrapping in parenthesis).\",\n  E062: \"Rest parameter does not a support default value.\",\n  E063: \"Super property may only be used within method bodies.\",\n  E064: \"Super call may only be used within class method bodies.\",\n  E065: \"Functions defined outside of strict mode with non-simple parameter lists may not \" +\n    \"enable strict mode.\",\n  E066: \"Asynchronous iteration is only available with for-of loops.\",\n  E067: \"Malformed numeric literal: '{a}'.\",\n  E068: \"Decimals with leading zeros are not allowed in strict mode.\",\n  E069: \"Duplicate exported binding: '{a}'.\",\n  E070: \"import.meta may only be used in module code.\"\n};\n\nvar warnings = {\n  W001: \"'hasOwnProperty' is a really bad name.\",\n  W002: \"Value of '{a}' may be overwritten in IE 8 and earlier.\",\n  W003: \"'{a}' was used before it was defined.\",\n  W004: \"'{a}' is already defined.\",\n  W005: \"A dot following a number can be confused with a decimal point.\",\n  W006: \"Confusing minuses.\",\n  W007: \"Confusing plusses.\",\n  W008: \"A leading decimal point can be confused with a dot: '{a}'.\",\n  W009: \"The array literal notation [] is preferable.\",\n  W010: \"The object literal notation {} is preferable.\",\n  W011: null,\n  W012: null,\n  W013: null,\n  W014: \"Misleading line break before '{a}'; readers may interpret this as an expression boundary.\",\n  W015: null,\n  W016: \"Unexpected use of '{a}'.\",\n  W017: \"Bad operand.\",\n  W018: \"Confusing use of '{a}'.\",\n  W019: \"Use the isNaN function to compare with NaN.\",\n  W020: \"Read only.\",\n  W021: \"Reassignment of '{a}', which is a {b}. \" +\n    \"Use 'var' or 'let' to declare bindings that may change.\",\n  W022: \"Do not assign to the exception parameter.\",\n  W023: null,\n  W024: \"Expected an identifier and instead saw '{a}' (a reserved word).\",\n  W025: \"Missing name in function declaration.\",\n  W026: \"Inner functions should be listed at the top of the outer function.\",\n  W027: \"Unreachable '{a}' after '{b}'.\",\n  W028: \"Label '{a}' on {b} statement.\",\n  W030: \"Expected an assignment or function call and instead saw an expression.\",\n  W031: \"Do not use 'new' for side effects.\",\n  W032: \"Unnecessary semicolon.\",\n  W033: \"Missing semicolon.\",\n  W034: \"Unnecessary directive \\\"{a}\\\".\",\n  W035: \"Empty block.\",\n  W036: \"Unexpected /*member '{a}'.\",\n  W037: \"'{a}' is a statement label.\",\n  W038: \"'{a}' used out of scope.\",\n  W039: null,\n  W040: \"If a strict mode function is executed using function invocation, \" +\n    \"its 'this' value will be undefined.\",\n  W041: null,\n  W042: \"Avoid EOL escaping.\",\n  W043: \"Bad escaping of EOL. Use option multistr if needed.\",\n  W044: \"Bad or unnecessary escaping.\", /* TODO(caitp): remove W044 */\n  W045: \"Value described by numeric literal cannot be accurately \" +\n    \"represented with a number value: '{a}'.\",\n  W046: \"Don't use extra leading zeros '{a}'.\",\n  W047: \"A trailing decimal point can be confused with a dot: '{a}'.\",\n  W048: \"Unexpected control character in regular expression.\",\n  W049: \"Unexpected escaped character '{a}' in regular expression.\",\n  W050: \"JavaScript URL.\",\n  W051: \"Variables should not be deleted.\",\n  W052: \"Unexpected '{a}'.\",\n  W053: \"Do not use {a} as a constructor.\",\n  W054: \"The Function constructor is a form of eval.\",\n  W055: \"A constructor name should start with an uppercase letter.\",\n  W056: \"Bad constructor.\",\n  W057: \"Weird construction. Is 'new' necessary?\",\n  W058: \"Missing '()' invoking a constructor.\",\n  W059: \"Avoid arguments.{a}.\",\n  W060: \"document.write can be a form of eval.\",\n  W061: \"eval can be harmful.\",\n  W062: \"Wrap an immediate function invocation in parens \" +\n    \"to assist the reader in understanding that the expression \" +\n    \"is the result of a function, and not the function itself.\",\n  W063: \"Math is not a function.\",\n  W064: \"Missing 'new' prefix when invoking a constructor.\",\n  W065: \"Missing radix parameter.\",\n  W066: \"Implied eval. Consider passing a function instead of a string.\",\n  W067: \"Unorthodox function invocation.\",\n  W068: \"Wrapping non-IIFE function literals in parens is unnecessary.\",\n  W069: \"['{a}'] is better written in dot notation.\",\n  W070: \"Extra comma. (it breaks older versions of IE)\",\n  W071: \"This function has too many statements. ({a})\",\n  W072: \"This function has too many parameters. ({a})\",\n  W073: \"Blocks are nested too deeply. ({a})\",\n  W074: \"This function's cyclomatic complexity is too high. ({a})\",\n  W075: \"Duplicate {a} '{b}'.\",\n  W076: \"Unexpected parameter '{a}' in get {b} function.\",\n  W077: \"Expected a single parameter in set {a} function.\",\n  W078: \"Setter is defined without getter.\",\n  W079: \"Redefinition of '{a}'.\",\n  W080: \"It's not necessary to initialize '{a}' to 'undefined'.\",\n  W081: null,\n  W082: \"Function declarations should not be placed in blocks. \" +\n    \"Use a function expression or move the statement to the top of \" +\n    \"the outer function.\",\n  W083: \"Functions declared within loops referencing an outer scoped \" +\n    \"variable may lead to confusing semantics. ({a})\",\n  W084: \"Assignment in conditional expression\",\n  W085: \"Don't use 'with'.\",\n  W086: \"Expected a 'break' statement before '{a}'.\",\n  W087: \"Forgotten 'debugger' statement?\",\n  W088: \"Creating global 'for' variable. Should be 'for (var {a} ...'.\",\n  W089: \"The body of a for in should be wrapped in an if statement to filter \" +\n    \"unwanted properties from the prototype.\",\n  W090: \"'{a}' is not a statement label.\",\n  W091: null,\n  W093: \"Did you mean to return a conditional instead of an assignment?\",\n  W094: \"Unexpected comma.\",\n  W095: \"Expected a string and instead saw {a}.\",\n  W096: \"The '{a}' key may produce unexpected results.\",\n  W097: \"Use the function form of \\\"use strict\\\".\",\n  W098: \"'{a}' is defined but never used.\",\n  W099: null,\n  W100: null,\n  W101: \"Line is too long.\",\n  W102: null,\n  W103: \"The '{a}' property is deprecated.\",\n  W104: \"'{a}' is available in ES{b} (use 'esversion: {b}') or Mozilla JS extensions (use moz).\",\n  W105: null,\n  W106: \"Identifier '{a}' is not in camel case.\",\n  W107: \"Script URL.\",\n  W108: \"Strings must use doublequote.\",\n  W109: \"Strings must use singlequote.\",\n  W110: \"Mixed double and single quotes.\",\n  W112: \"Unclosed string.\",\n  W113: \"Control character in string: {a}.\",\n  W114: \"Avoid {a}.\",\n  W115: \"Octal literals are not allowed in strict mode.\",\n  W116: \"Expected '{a}' and instead saw '{b}'.\",\n  W117: \"'{a}' is not defined.\",\n  W118: \"'{a}' is only available in Mozilla JavaScript extensions (use moz option).\",\n  W119: \"'{a}' is only available in ES{b} (use 'esversion: {b}').\",\n  W120: \"You might be leaking a variable ({a}) here.\",\n  W121: \"Extending prototype of native object: '{a}'.\",\n  W122: \"Invalid typeof value '{a}'\",\n  W123: \"'{a}' is already defined in outer scope.\",\n  W124: \"A generator function should contain at least one yield expression.\",\n  W125: \"This line contains non-breaking spaces: http://jshint.com/docs/options/#nonbsp\",\n  W126: \"Unnecessary grouping operator.\",\n  W127: \"Unexpected use of a comma operator.\",\n  W128: \"Empty array elements require elision=true.\",\n  W129: \"'{a}' is defined in a future version of JavaScript. Use a \" +\n    \"different variable name to avoid migration issues.\",\n  W130: \"Invalid element after rest element.\",\n  W131: \"Invalid parameter after rest parameter.\",\n  W132: \"`var` declarations are forbidden. Use `let` or `const` instead.\",\n  W133: \"Invalid for-{a} loop left-hand-side: {b}.\",\n  W134: \"The '{a}' option is only available when linting ECMAScript {b} code.\",\n  W135: \"{a} may not be supported by non-browser environments.\",\n  W136: \"'{a}' must be in function scope.\",\n  W137: \"Empty destructuring: this is unnecessary and can be removed.\",\n  W138: \"Regular parameters should not come after default parameters.\",\n  W139: \"Function expressions should not be used as the second operand to instanceof.\",\n  W140: \"Missing comma.\",\n  W141: \"Empty {a}: this is unnecessary and can be removed.\",\n  W142: \"Empty {a}: consider replacing with `import '{b}';`.\",\n  W143: \"Assignment to properties of a mapped arguments object may cause \" +\n    \"unexpected changes to formal parameters.\",\n  W144: \"'{a}' is a non-standard language feature. Enable it using the '{b}' unstable option.\",\n  W145: \"Superfluous 'case' clause.\",\n  W146: \"Unnecessary `await` expression.\",\n  W147: \"Regular expressions should include the 'u' flag.\",\n  W148: \"Unnecessary RegExp 's' flag.\"\n};\n\nvar info = {\n  I001: \"Comma warnings can be turned off with 'laxcomma'.\",\n  I002: null,\n  I003: \"ES5 option is now set per default\"\n};\n\nexports.errors = {};\nexports.warnings = {};\nexports.info = {};\n\n_.each(errors, function(desc, code) {\n  exports.errors[code] = { code: code, desc: desc };\n});\n\n_.each(warnings, function(desc, code) {\n  exports.warnings[code] = { code: code, desc: desc };\n});\n\n_.each(info, function(desc, code) {\n  exports.info[code] = { code: code, desc: desc };\n});\n\n},{\"underscore\":\"/../../../jshint/node_modules/underscore/underscore-umd.js\"}],\"/../../../jshint/src/name-stack.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction NameStack() {\n  this._stack = [];\n}\n\nObject.defineProperty(NameStack.prototype, \"length\", {\n  get: function() {\n    return this._stack.length;\n  }\n});\nNameStack.prototype.push = function() {\n  this._stack.push(null);\n};\nNameStack.prototype.pop = function() {\n  this._stack.pop();\n};\nNameStack.prototype.set = function(token) {\n  this._stack[this.length - 1] = token;\n};\nNameStack.prototype.infer = function() {\n  var nameToken = this._stack[this.length - 1];\n  var prefix = \"\";\n  var type;\n  if (!nameToken || nameToken.type === \"class\") {\n    nameToken = this._stack[this.length - 2];\n  }\n\n  if (!nameToken) {\n    return \"(empty)\";\n  }\n\n  type = nameToken.type;\n\n  if (type !== \"(string)\" && type !== \"(number)\" && type !== \"(identifier)\" && type !== \"default\") {\n    return \"(expression)\";\n  }\n\n  if (nameToken.accessorType) {\n    prefix = nameToken.accessorType + \" \";\n  }\n\n  return prefix + nameToken.value;\n};\n\nmodule.exports = NameStack;\n\n},{}],\"/../../../jshint/src/options.js\":[function(_dereq_,module,exports){\n\"use strict\";\nexports.bool = {\n  enforcing: {\n    bitwise     : true,\n    freeze      : true,\n    camelcase   : true,\n    curly       : true,\n    eqeqeq      : true,\n    futurehostile: true,\n    es3         : true,\n    es5         : true,\n    forin       : true,\n    immed       : true,\n    leanswitch  : true,\n    newcap      : true,\n    noarg       : true,\n    nocomma     : true,\n    noempty     : true,\n    nonbsp      : true,\n    nonew       : true,\n    noreturnawait: true,\n    regexpu     : true,\n    undef       : true,\n    singleGroups: false,\n    varstmt: false,\n    enforceall : false,\n    trailingcomma: false\n  },\n  relaxing: {\n    asi         : true,\n    multistr    : true,\n    debug       : true,\n    boss        : true,\n    evil        : true,\n    funcscope   : true,\n    globalstrict: true,\n    iterator    : true,\n    notypeof    : true,\n    plusplus    : true,\n    proto       : true,\n    scripturl   : true,\n    sub         : true,\n    supernew    : true,\n    laxbreak    : true,\n    laxcomma    : true,\n    validthis   : true,\n    withstmt    : true,\n    moz         : true,\n    noyield     : true,\n    eqnull      : true,\n    lastsemic   : true,\n    loopfunc    : true,\n    expr        : true,\n    esnext      : true,\n    elision     : true,\n  },\n  environments: {\n    mootools    : true,\n    couch       : true,\n    jasmine     : true,\n    jquery      : true,\n    node        : true,\n    qunit       : true,\n    rhino       : true,\n    shelljs     : true,\n    prototypejs : true,\n    yui         : true,\n    mocha       : true,\n    module      : true,\n    wsh         : true,\n    worker      : true,\n    nonstandard : true,\n    browser     : true,\n    browserify  : true,\n    devel       : true,\n    dojo        : true,\n    typed       : true,\n    phantom     : true\n  },\n  obsolete: {\n    onecase     : true, // if one case switch statements should be allowed\n    regexp      : true, // if the . should not be allowed in regexp literals\n    regexdash   : true  // if unescaped first/last dash (-) inside brackets\n  }\n};\nexports.val = {\n  maxlen       : false,\n  indent       : false,\n  maxerr       : false,\n  predef       : false,\n  globals      : false,\n  quotmark     : false,\n\n  scope        : false,\n  maxstatements: false,\n  maxdepth     : false,\n  maxparams    : false,\n  maxcomplexity: false,\n  shadow       : false,\n  strict      : true,\n  unused       : true,\n  latedef      : false,\n\n  ignore       : false, // start/end ignoring lines of code, bypassing the lexer\n\n  ignoreDelimiters: false, // array of start/end delimiters used to ignore\n  esversion: 5\n};\nexports.unstable = {\n};\nexports.inverted = {\n  bitwise : true,\n  forin   : true,\n  newcap  : true,\n  plusplus: true,\n  regexp  : true,\n  undef   : true,\n  eqeqeq  : true,\n  strict  : true\n};\n\nexports.validNames = Object.keys(exports.val)\n  .concat(Object.keys(exports.bool.relaxing))\n  .concat(Object.keys(exports.bool.enforcing))\n  .concat(Object.keys(exports.bool.obsolete))\n  .concat(Object.keys(exports.bool.environments))\n  .concat([\"unstable\"]);\n\nexports.unstableNames = Object.keys(exports.unstable);\nexports.renamed = {\n  eqeq   : \"eqeqeq\",\n  windows: \"wsh\",\n  sloppy : \"strict\"\n};\n\nexports.removed = {\n  nomen: true,\n  onevar: true,\n  passfail: true,\n  white: true,\n  gcl: true,\n  smarttabs: true,\n  trailing: true\n};\nexports.noenforceall = {\n  varstmt: true,\n  strict: true,\n  regexpu: true\n};\n\n},{}],\"/../../../jshint/src/prod-params.js\":[function(_dereq_,module,exports){\nmodule.exports = {\n  export: 1,\n  noin: 2,\n  initial: 4,\n\n  preAsync: 8,\n\n  async: 16,\n  tryClause: 32,\n  yield: 64\n};\n\n},{}],\"/../../../jshint/src/reg.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\nexports.unsafeString =\n  /@cc|<\\/?|script|\\]\\s*\\]|<\\s*!|&lt/i;\nexports.needEsc =\n  /[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\n\nexports.needEscGlobal =\n  /[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\nexports.starSlash = /\\*\\//;\nexports.identifier = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;\nexports.javascriptURL = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;\nexports.fallsThrough = /^\\s*falls?\\sthrough\\s*$/;\nexports.maxlenException = /^(?:(?:\\/\\/|\\/\\*|\\*) ?)?[^ ]+$/;\nexports.whitespace = /[ \\f\\n\\r\\t\\v\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]/;\n\nexports.nonzeroDigit = /^[1-9]$/;\n\nexports.decimalDigit = /^[0-9]$/;\n\nexports.regexpSyntaxChars = /[\\^$\\\\.*+?()[\\]{}|]/;\n\nexports.regexpQuantifiers = /[*+?{]/;\n\nexports.regexpControlEscapes = /[fnrtv]/;\n\nexports.regexpCharClasses = /[dDsSwWpP]/;\nexports.regexpDot = /(^|[^\\\\])(\\\\\\\\)*\\./;\n\n},{}],\"/../../../jshint/src/scope-manager.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nvar _      = _dereq_(\"underscore\");\n_.slice    = _dereq_(\"lodash.slice\");\nvar events = _dereq_(\"events\");\nvar marker = {};\nvar scopeManager = function(state, predefined, exported, declared) {\n\n  var _current;\n  var _scopeStack = [];\n\n  function _newScope(type) {\n    _current = {\n      \"(bindings)\": Object.create(null),\n      \"(usages)\": Object.create(null),\n      \"(labels)\": Object.create(null),\n      \"(parent)\": _current,\n      \"(type)\": type,\n      \"(params)\": (type === \"functionparams\" || type === \"catchparams\") ? [] : null\n    };\n    _scopeStack.push(_current);\n  }\n\n  _newScope(\"global\");\n  _current[\"(predefined)\"] = predefined;\n\n  var _currentFunctBody = _current; // this is the block after the params = function\n\n  var usedPredefinedAndGlobals = Object.create(null);\n  var impliedGlobals = Object.create(null);\n  var unuseds = [];\n  var esModuleExports = [];\n  var emitter = new events.EventEmitter();\n\n  function warning(code, token) {\n    emitter.emit(\"warning\", {\n      code: code,\n      token: token,\n      data: _.slice(arguments, 2)\n    });\n  }\n\n  function error(code, token) {\n    emitter.emit(\"warning\", {\n      code: code,\n      token: token,\n      data: _.slice(arguments, 2)\n    });\n  }\n\n  function _setupUsages(bindingName) {\n    if (!_current[\"(usages)\"][bindingName]) {\n      _current[\"(usages)\"][bindingName] = {\n        \"(modified)\": [],\n        \"(reassigned)\": [],\n        \"(tokens)\": []\n      };\n    }\n  }\n\n  var _getUnusedOption = function(unused_opt) {\n    if (unused_opt === undefined) {\n      unused_opt = state.option.unused;\n    }\n\n    if (unused_opt === true) {\n      unused_opt = \"last-param\";\n    }\n\n    return unused_opt;\n  };\n\n  var _warnUnused = function(name, tkn, type, unused_opt) {\n    var line = tkn.line;\n    var chr  = tkn.from;\n    var raw_name = tkn.raw_text || name;\n\n    unused_opt = _getUnusedOption(unused_opt);\n\n    var warnable_types = {\n      \"vars\": [\"var\"],\n      \"last-param\": [\"var\", \"param\"],\n      \"strict\": [\"var\", \"param\", \"last-param\"]\n    };\n\n    if (unused_opt) {\n      if (warnable_types[unused_opt] && warnable_types[unused_opt].indexOf(type) !== -1) {\n        warning(\"W098\", { line: line, from: chr }, raw_name);\n      }\n    }\n    if (unused_opt || type === \"var\") {\n      unuseds.push({\n        name: name,\n        line: line,\n        character: chr\n      });\n    }\n  };\n  function _checkForUnused() {\n    if (_current[\"(type)\"] !== \"functionparams\") {\n      var currentBindings = _current[\"(bindings)\"];\n      for (var bindingName in currentBindings) {\n        if (currentBindings[bindingName][\"(type)\"] !== \"exception\" &&\n          currentBindings[bindingName][\"(unused)\"]) {\n          _warnUnused(bindingName, currentBindings[bindingName][\"(token)\"], \"var\");\n        }\n      }\n      return;\n    }\n    var params = _current[\"(params)\"];\n\n    var param = params.pop();\n    var unused_opt;\n\n    while (param) {\n      var binding = _current[\"(bindings)\"][param];\n\n      unused_opt = _getUnusedOption(state.funct[\"(unusedOption)\"]);\n      if (param === \"undefined\")\n        return;\n\n      if (binding[\"(unused)\"]) {\n        _warnUnused(param, binding[\"(token)\"], \"param\", state.funct[\"(unusedOption)\"]);\n      } else if (unused_opt === \"last-param\") {\n        return;\n      }\n\n      param = params.pop();\n    }\n  }\n  function _getBinding(bindingName) {\n    for (var i = _scopeStack.length - 1 ; i >= 0; --i) {\n      var scopeBindings = _scopeStack[i][\"(bindings)\"];\n      if (scopeBindings[bindingName]) {\n        return scopeBindings;\n      }\n    }\n  }\n  function usedSoFarInCurrentFunction(bindingName) {\n    for (var i = _scopeStack.length - 1; i >= 0; i--) {\n      var current = _scopeStack[i];\n      if (current[\"(usages)\"][bindingName]) {\n        return current[\"(usages)\"][bindingName];\n      }\n      if (current === _currentFunctBody) {\n        break;\n      }\n    }\n    return false;\n  }\n\n  function _checkOuterShadow(bindingName, token) {\n    if (state.option.shadow !== \"outer\") {\n      return;\n    }\n\n    var isGlobal = _currentFunctBody[\"(type)\"] === \"global\",\n      isNewFunction = _current[\"(type)\"] === \"functionparams\";\n\n    var outsideCurrentFunction = !isGlobal;\n    for (var i = 0; i < _scopeStack.length; i++) {\n      var stackItem = _scopeStack[i];\n\n      if (!isNewFunction && _scopeStack[i + 1] === _currentFunctBody) {\n        outsideCurrentFunction = false;\n      }\n      if (outsideCurrentFunction && stackItem[\"(bindings)\"][bindingName]) {\n        warning(\"W123\", token, bindingName);\n      }\n      if (stackItem[\"(labels)\"][bindingName]) {\n        warning(\"W123\", token, bindingName);\n      }\n    }\n  }\n\n  function _latedefWarning(type, bindingName, token) {\n    var isFunction;\n\n    if (state.option.latedef) {\n      isFunction = type === \"function\" || type === \"generator function\" ||\n        type === \"async function\";\n      if ((state.option.latedef === true && isFunction) || !isFunction) {\n        warning(\"W003\", token, bindingName);\n      }\n    }\n  }\n\n  var scopeManagerInst = {\n\n    on: function(names, listener) {\n      names.split(\" \").forEach(function(name) {\n        emitter.on(name, listener);\n      });\n    },\n\n    isPredefined: function(bindingName) {\n      return !this.has(bindingName) && _.has(_scopeStack[0][\"(predefined)\"], bindingName);\n    },\n    stack: function(type) {\n      var previousScope = _current;\n      _newScope(type);\n\n      if (!type && previousScope[\"(type)\"] === \"functionparams\") {\n\n        _current[\"(isFuncBody)\"] = true;\n        _currentFunctBody = _current;\n      }\n    },\n    unstack: function() {\n      var subScope = _scopeStack.length > 1 ? _scopeStack[_scopeStack.length - 2] : null;\n      var isUnstackingFunctionBody = _current === _currentFunctBody,\n        isUnstackingFunctionParams = _current[\"(type)\"] === \"functionparams\",\n        isUnstackingFunctionOuter = _current[\"(type)\"] === \"functionouter\";\n\n      var i, j, isImmutable, isFunction;\n      var currentUsages = _current[\"(usages)\"];\n      var currentBindings = _current[\"(bindings)\"];\n      var usedBindingNameList = Object.keys(currentUsages);\n      if (currentUsages.__proto__ && usedBindingNameList.indexOf(\"__proto__\") === -1) {\n        usedBindingNameList.push(\"__proto__\");\n      }\n\n      for (i = 0; i < usedBindingNameList.length; i++) {\n        var usedBindingName = usedBindingNameList[i];\n\n        var usage = currentUsages[usedBindingName];\n        var usedBinding = currentBindings[usedBindingName];\n        if (usedBinding) {\n          var usedBindingType = usedBinding[\"(type)\"];\n          isImmutable = usedBindingType === \"const\" || usedBindingType === \"import\";\n\n          if (usedBinding[\"(useOutsideOfScope)\"] && !state.option.funcscope) {\n            var usedTokens = usage[\"(tokens)\"];\n            for (j = 0; j < usedTokens.length; j++) {\n              if (usedBinding[\"(function)\"] === usedTokens[j][\"(function)\"]) {\n                error(\"W038\", usedTokens[j], usedBindingName);\n              }\n            }\n          }\n          _current[\"(bindings)\"][usedBindingName][\"(unused)\"] = false;\n          if (isImmutable && usage[\"(modified)\"]) {\n            for (j = 0; j < usage[\"(modified)\"].length; j++) {\n              error(\"E013\", usage[\"(modified)\"][j], usedBindingName);\n            }\n          }\n\n          isFunction = usedBindingType === \"function\" ||\n            usedBindingType === \"generator function\" ||\n            usedBindingType === \"async function\";\n          if ((isFunction || usedBindingType === \"class\") && usage[\"(reassigned)\"]) {\n            for (j = 0; j < usage[\"(reassigned)\"].length; j++) {\n              if (!usage[\"(reassigned)\"][j].ignoreW021) {\n                warning(\"W021\", usage[\"(reassigned)\"][j], usedBindingName, usedBindingType);\n              }\n            }\n          }\n          continue;\n        }\n\n        if (subScope) {\n          var bindingType = this.bindingtype(usedBindingName);\n          isImmutable = bindingType === \"const\" ||\n            (bindingType === null && _scopeStack[0][\"(predefined)\"][usedBindingName] === false);\n          if (isUnstackingFunctionOuter && !isImmutable) {\n            if (!state.funct[\"(outerMutables)\"]) {\n              state.funct[\"(outerMutables)\"] = [];\n            }\n            state.funct[\"(outerMutables)\"].push(usedBindingName);\n          }\n          if (!subScope[\"(usages)\"][usedBindingName]) {\n            subScope[\"(usages)\"][usedBindingName] = usage;\n            if (isUnstackingFunctionBody) {\n              subScope[\"(usages)\"][usedBindingName][\"(onlyUsedSubFunction)\"] = true;\n            }\n          } else {\n            var subScopeUsage = subScope[\"(usages)\"][usedBindingName];\n            subScopeUsage[\"(modified)\"] = subScopeUsage[\"(modified)\"].concat(usage[\"(modified)\"]);\n            subScopeUsage[\"(tokens)\"] = subScopeUsage[\"(tokens)\"].concat(usage[\"(tokens)\"]);\n            subScopeUsage[\"(reassigned)\"] =\n              subScopeUsage[\"(reassigned)\"].concat(usage[\"(reassigned)\"]);\n          }\n        } else {\n          if (typeof _current[\"(predefined)\"][usedBindingName] === \"boolean\") {\n            delete declared[usedBindingName];\n            usedPredefinedAndGlobals[usedBindingName] = marker;\n            if (_current[\"(predefined)\"][usedBindingName] === false && usage[\"(reassigned)\"]) {\n              for (j = 0; j < usage[\"(reassigned)\"].length; j++) {\n                if (!usage[\"(reassigned)\"][j].ignoreW020) {\n                  warning(\"W020\", usage[\"(reassigned)\"][j]);\n                }\n              }\n            }\n          }\n          else {\n            for (j = 0; j < usage[\"(tokens)\"].length; j++) {\n              var undefinedToken = usage[\"(tokens)\"][j];\n              if (!undefinedToken.forgiveUndef) {\n                if (state.option.undef && !undefinedToken.ignoreUndef) {\n                  warning(\"W117\", undefinedToken, usedBindingName);\n                }\n                if (impliedGlobals[usedBindingName]) {\n                  impliedGlobals[usedBindingName].line.push(undefinedToken.line);\n                } else {\n                  impliedGlobals[usedBindingName] = {\n                    name: usedBindingName,\n                    line: [undefinedToken.line]\n                  };\n                }\n              }\n            }\n          }\n        }\n      }\n      if (!subScope) {\n        Object.keys(declared)\n          .forEach(function(bindingNotUsed) {\n            _warnUnused(bindingNotUsed, declared[bindingNotUsed], \"var\");\n          });\n      }\n      if (subScope && !isUnstackingFunctionBody &&\n        !isUnstackingFunctionParams && !isUnstackingFunctionOuter) {\n        var bindingNames = Object.keys(currentBindings);\n        for (i = 0; i < bindingNames.length; i++) {\n\n          var defBindingName = bindingNames[i];\n          var defBinding = currentBindings[defBindingName];\n\n          if (!defBinding[\"(blockscoped)\"] && defBinding[\"(type)\"] !== \"exception\") {\n            var shadowed = subScope[\"(bindings)\"][defBindingName];\n            if (shadowed) {\n              shadowed[\"(unused)\"] &= defBinding[\"(unused)\"];\n            } else {\n              defBinding[\"(useOutsideOfScope)\"] =\n                _currentFunctBody[\"(type)\"] !== \"global\" &&\n                !this.funct.has(defBindingName, { excludeCurrent: true });\n\n              subScope[\"(bindings)\"][defBindingName] = defBinding;\n            }\n\n            delete currentBindings[defBindingName];\n          }\n        }\n      }\n\n      _checkForUnused();\n\n      _scopeStack.pop();\n      if (isUnstackingFunctionBody) {\n        _currentFunctBody = _scopeStack[_.findLastIndex(_scopeStack, function(scope) {\n          return scope[\"(isFuncBody)\"] || scope[\"(type)\"] === \"global\";\n        })];\n      }\n\n      _current = subScope;\n    },\n    addParam: function(bindingName, token, type) {\n      type = type || \"param\";\n\n      if (type === \"exception\") {\n        var previouslyDefinedBindingType = this.funct.bindingtype(bindingName);\n        if (previouslyDefinedBindingType && previouslyDefinedBindingType !== \"exception\") {\n          if (!state.option.node) {\n            warning(\"W002\", state.tokens.next, bindingName);\n          }\n        }\n\n        if (state.isStrict() && (bindingName === \"arguments\" || bindingName === \"eval\")) {\n          warning(\"E008\", token);\n        }\n      }\n      if (_.has(_current[\"(bindings)\"], bindingName)) {\n        _current[\"(bindings)\"][bindingName].duplicated = true;\n      } else {\n        _checkOuterShadow(bindingName, token);\n\n        _current[\"(bindings)\"][bindingName] = {\n          \"(type)\" : type,\n          \"(token)\": token,\n          \"(unused)\": true };\n\n        _current[\"(params)\"].push(bindingName);\n      }\n\n      if (_.has(_current[\"(usages)\"], bindingName)) {\n        var usage = _current[\"(usages)\"][bindingName];\n        if (usage[\"(onlyUsedSubFunction)\"]) {\n          _latedefWarning(type, bindingName, token);\n        } else {\n          warning(\"W003\", token, bindingName);\n        }\n      }\n    },\n\n    validateParams: function(isArrow) {\n      var isStrict = state.isStrict();\n      var currentFunctParamScope = _currentFunctBody[\"(parent)\"];\n      var isSimple = state.funct['(hasSimpleParams)'];\n      var isMethod = state.funct[\"(method)\"];\n\n      if (!currentFunctParamScope[\"(params)\"]) {\n        return;\n      }\n\n      currentFunctParamScope[\"(params)\"].forEach(function(bindingName) {\n        var binding = currentFunctParamScope[\"(bindings)\"][bindingName];\n\n        if (binding.duplicated) {\n          if (isStrict || isArrow || isMethod || !isSimple) {\n            warning(\"E011\", binding[\"(token)\"], bindingName);\n          } else if (state.option.shadow !== true) {\n            warning(\"W004\", binding[\"(token)\"], bindingName);\n          }\n        }\n\n        if (isStrict && (bindingName === \"arguments\" || bindingName === \"eval\")) {\n          warning(\"E008\", binding[\"(token)\"]);\n        }\n      });\n    },\n\n    getUsedOrDefinedGlobals: function() {\n      var list = Object.keys(usedPredefinedAndGlobals);\n      if (usedPredefinedAndGlobals.__proto__ === marker &&\n        list.indexOf(\"__proto__\") === -1) {\n        list.push(\"__proto__\");\n      }\n\n      return list;\n    },\n    getImpliedGlobals: function() {\n      var values = _.values(impliedGlobals);\n      var hasProto = false;\n      if (impliedGlobals.__proto__) {\n        hasProto = values.some(function(value) {\n          return value.name === \"__proto__\";\n        });\n        if (!hasProto) {\n          values.push(impliedGlobals.__proto__);\n        }\n      }\n\n      return values;\n    },\n    getUnuseds: function() {\n      return unuseds;\n    },\n    has: function(bindingName) {\n      return Boolean(_getBinding(bindingName));\n    },\n    bindingtype: function(bindingName) {\n      var scopeBindings = _getBinding(bindingName);\n      if (scopeBindings) {\n        return scopeBindings[bindingName][\"(type)\"];\n      }\n      return null;\n    },\n    addExported: function(bindingName) {\n      var globalBindings = _scopeStack[0][\"(bindings)\"];\n      if (_.has(declared, bindingName)) {\n        delete declared[bindingName];\n      } else if (_.has(globalBindings, bindingName)) {\n        globalBindings[bindingName][\"(unused)\"] = false;\n      } else {\n        for (var i = 1; i < _scopeStack.length; i++) {\n          var scope = _scopeStack[i];\n          if (!scope[\"(type)\"]) {\n            if (_.has(scope[\"(bindings)\"], bindingName) &&\n                !scope[\"(bindings)\"][bindingName][\"(blockscoped)\"]) {\n              scope[\"(bindings)\"][bindingName][\"(unused)\"] = false;\n              return;\n            }\n          } else {\n            break;\n          }\n        }\n        exported[bindingName] = true;\n      }\n    },\n    setExported: function(localName, exportName) {\n      if (exportName) {\n        if (esModuleExports.indexOf(exportName.value) > -1) {\n          error(\"E069\", exportName, exportName.value);\n        }\n\n        esModuleExports.push(exportName.value);\n      }\n\n      if (localName) {\n        this.block.use(localName.value, localName);\n      }\n    },\n    initialize: function(bindingName) {\n      if (_current[\"(bindings)\"][bindingName]) {\n        _current[\"(bindings)\"][bindingName][\"(initialized)\"] = true;\n      }\n    },\n    addbinding: function(bindingName, opts) {\n\n      var type  = opts.type;\n      var token = opts.token;\n      var isblockscoped = type === \"let\" || type === \"const\" ||\n        type === \"class\" || type === \"import\" || type === \"generator function\" ||\n        type === \"async function\" || type === \"async generator function\";\n      var ishoisted = type === \"function\" || type === \"generator function\" ||\n        type === \"async function\" || type === \"import\";\n      var isexported    = (isblockscoped ? _current : _currentFunctBody)[\"(type)\"] === \"global\" &&\n                          _.has(exported, bindingName);\n      _checkOuterShadow(bindingName, token);\n\n      if (state.isStrict() && (bindingName === \"arguments\" || bindingName === \"eval\")) {\n        warning(\"E008\", token);\n      }\n\n      if (isblockscoped) {\n\n        var declaredInCurrentScope = _current[\"(bindings)\"][bindingName];\n        if (!declaredInCurrentScope && _current === _currentFunctBody &&\n          _current[\"(type)\"] !== \"global\") {\n          declaredInCurrentScope = !!_currentFunctBody[\"(parent)\"][\"(bindings)\"][bindingName];\n        }\n        if (!declaredInCurrentScope && _current[\"(usages)\"][bindingName]) {\n          var usage = _current[\"(usages)\"][bindingName];\n          if (usage[\"(onlyUsedSubFunction)\"] || ishoisted) {\n            _latedefWarning(type, bindingName, token);\n          } else if (!ishoisted) {\n            warning(\"E056\", token, bindingName, type);\n          }\n        }\n        if (declaredInCurrentScope &&\n          (!ishoisted || (_current[\"(type)\"] !== \"global\" || type === \"import\"))) {\n          warning(\"E011\", token, bindingName);\n        }\n        else if (state.option.shadow === \"outer\") {\n          if (scopeManagerInst.funct.has(bindingName)) {\n            warning(\"W004\", token, bindingName);\n          }\n        }\n\n        scopeManagerInst.block.add(\n          bindingName, type, token, !isexported, opts.initialized\n        );\n\n      } else {\n\n        var declaredInCurrentFunctionScope = scopeManagerInst.funct.has(bindingName);\n        if (!declaredInCurrentFunctionScope && usedSoFarInCurrentFunction(bindingName)) {\n          _latedefWarning(type, bindingName, token);\n        }\n        if (scopeManagerInst.funct.has(bindingName, { onlyBlockscoped: true })) {\n          warning(\"E011\", token, bindingName);\n        } else if (state.option.shadow !== true) {\n          if (declaredInCurrentFunctionScope && bindingName !== \"__proto__\") {\n            if (_currentFunctBody[\"(type)\"] !== \"global\") {\n              warning(\"W004\", token, bindingName);\n            }\n          }\n        }\n\n        scopeManagerInst.funct.add(bindingName, type, token, !isexported);\n\n        if (_currentFunctBody[\"(type)\"] === \"global\" && !state.impliedClosure()) {\n          usedPredefinedAndGlobals[bindingName] = marker;\n        }\n      }\n    },\n\n    funct: {\n      bindingtype: function(bindingName, options) {\n        var onlyBlockscoped = options && options.onlyBlockscoped;\n        var excludeParams = options && options.excludeParams;\n        var currentScopeIndex = _scopeStack.length - (options && options.excludeCurrent ? 2 : 1);\n        for (var i = currentScopeIndex; i >= 0; i--) {\n          var current = _scopeStack[i];\n          if (current[\"(bindings)\"][bindingName] &&\n            (!onlyBlockscoped || current[\"(bindings)\"][bindingName][\"(blockscoped)\"])) {\n            return current[\"(bindings)\"][bindingName][\"(type)\"];\n          }\n          var scopeCheck = excludeParams ? _scopeStack[ i - 1 ] : current;\n          if (scopeCheck && scopeCheck[\"(type)\"] === \"functionparams\") {\n            return null;\n          }\n        }\n        return null;\n      },\n      hasLabel: function(labelName) {\n        for (var i = _scopeStack.length - 1; i >= 0; i--) {\n          var current = _scopeStack[i];\n\n          if (current[\"(labels)\"][labelName]) {\n            return true;\n          }\n          if (current[\"(type)\"] === \"functionparams\") {\n            return false;\n          }\n        }\n        return false;\n      },\n      has: function(bindingName, options) {\n        return Boolean(this.bindingtype(bindingName, options));\n      },\n      add: function(bindingName, type, tok, unused) {\n        _current[\"(bindings)\"][bindingName] = {\n          \"(type)\" : type,\n          \"(token)\": tok,\n          \"(blockscoped)\": false,\n          \"(function)\": _currentFunctBody,\n          \"(unused)\": unused };\n      }\n    },\n\n    block: {\n      isGlobal: function() {\n        return _current[\"(type)\"] === \"global\";\n      },\n      use: function(bindingName, token) {\n        var paramScope = _currentFunctBody[\"(parent)\"];\n        if (paramScope && paramScope[\"(bindings)\"][bindingName] &&\n          paramScope[\"(bindings)\"][bindingName][\"(type)\"] === \"param\") {\n          if (!scopeManagerInst.funct.has(bindingName,\n                { excludeParams: true, onlyBlockscoped: true })) {\n            paramScope[\"(bindings)\"][bindingName][\"(unused)\"] = false;\n          }\n        }\n\n        if (token && (state.ignored.W117 || state.option.undef === false)) {\n          token.ignoreUndef = true;\n        }\n\n        _setupUsages(bindingName);\n\n        _current[\"(usages)\"][bindingName][\"(onlyUsedSubFunction)\"] = false;\n\n        if (token) {\n          token[\"(function)\"] = _currentFunctBody;\n          _current[\"(usages)\"][bindingName][\"(tokens)\"].push(token);\n        }\n        var binding = _current[\"(bindings)\"][bindingName];\n        if (binding && binding[\"(blockscoped)\"] && !binding[\"(initialized)\"]) {\n          error(\"E056\", token, bindingName, binding[\"(type)\"]);\n        }\n      },\n\n      reassign: function(bindingName, token) {\n        token.ignoreW020 = state.ignored.W020;\n        token.ignoreW021 = state.ignored.W021;\n\n        this.modify(bindingName, token);\n\n        _current[\"(usages)\"][bindingName][\"(reassigned)\"].push(token);\n      },\n\n      modify: function(bindingName, token) {\n\n        _setupUsages(bindingName);\n\n        _current[\"(usages)\"][bindingName][\"(onlyUsedSubFunction)\"] = false;\n        _current[\"(usages)\"][bindingName][\"(modified)\"].push(token);\n      },\n      add: function(bindingName, type, tok, unused, initialized) {\n        _current[\"(bindings)\"][bindingName] = {\n          \"(type)\" : type,\n          \"(token)\": tok,\n          \"(initialized)\": !!initialized,\n          \"(blockscoped)\": true,\n          \"(unused)\": unused };\n      },\n\n      addLabel: function(labelName, opts) {\n        var token = opts.token;\n        if (scopeManagerInst.funct.hasLabel(labelName)) {\n          warning(\"E011\", token, labelName);\n        }\n        else if (state.option.shadow === \"outer\") {\n          if (scopeManagerInst.funct.has(labelName)) {\n            warning(\"W004\", token, labelName);\n          } else {\n            _checkOuterShadow(labelName, token);\n          }\n        }\n        _current[\"(labels)\"][labelName] = token;\n      }\n    }\n  };\n  return scopeManagerInst;\n};\n\nmodule.exports = scopeManager;\n\n},{\"events\":\"/node_modules/events/events.js\",\"lodash.slice\":\"/../../../jshint/node_modules/lodash.slice/index.js\",\"underscore\":\"/../../../jshint/node_modules/underscore/underscore-umd.js\"}],\"/../../../jshint/src/state.js\":[function(_dereq_,module,exports){\n\"use strict\";\nvar NameStack = _dereq_(\"./name-stack.js\");\n\nvar state = {\n  syntax: {},\n  isStrict: function() {\n    return !!this.directive[\"use strict\"] || this.inClassBody ||\n      this.option.module || this.option.strict === \"implied\";\n  },\n  stmtMissingStrict: function() {\n    if (this.option.strict === \"global\") {\n      return true;\n    }\n\n    if (this.option.strict === false) {\n      return false;\n    }\n\n    if (this.option.globalstrict) {\n      return true;\n    }\n\n    return false;\n  },\n\n  allowsGlobalUsd: function() {\n    return this.option.strict === \"global\" || this.option.globalstrict ||\n      this.option.module || this.impliedClosure();\n  },\n  impliedClosure: function() {\n    return this.option.node || this.option.phantom || this.option.browserify;\n  },\n\n  inMoz: function() {\n    return this.option.moz;\n  },\n  inES11: function() {\n    return this.esVersion >= 11;\n  },\n  inES10: function() {\n    return this.esVersion >= 10;\n  },\n  inES9: function() {\n    return this.esVersion >= 9;\n  },\n  inES8: function() {\n    return this.esVersion >= 8;\n  },\n  inES7: function() {\n    return this.esVersion >= 7;\n  },\n  inES6: function(strict) {\n    if (!strict && this.option.moz) {\n      return true;\n    }\n\n    return this.esVersion >= 6;\n  },\n  inES5: function() {\n    return !this.esVersion || this.esVersion >= 5 || this.option.moz;\n  },\n  inferEsVersion: function() {\n    var badOpt = null;\n\n    if (this.option.esversion) {\n      if (this.option.es3) {\n        badOpt = \"es3\";\n      } else if (this.option.es5) {\n        badOpt = \"es5\";\n      } else if (this.option.esnext) {\n        badOpt = \"esnext\";\n      }\n\n      if (badOpt) {\n        return badOpt;\n      }\n\n      if (this.option.esversion === 2015) {\n        this.esVersion = 6;\n      } else {\n        this.esVersion = this.option.esversion;\n      }\n    } else if (this.option.es3) {\n      this.esVersion = 3;\n    } else if (this.option.esnext) {\n      this.esVersion = 6;\n    }\n\n    return null;\n  },\n\n  reset: function() {\n    this.tokens = {\n      prev: null,\n      next: null,\n      curr: null\n    };\n\n    this.option = { unstable: {} };\n    this.esVersion = 5;\n    this.funct = null;\n    this.ignored = {};\n    this.directive = Object.create(null);\n    this.jsonMode = false;\n    this.lines = [];\n    this.tab = \"\";\n    this.cache = {}; // Node.JS doesn't have Map. Sniff.\n    this.ignoredLines = {};\n    this.forinifcheckneeded = false;\n    this.nameStack = new NameStack();\n    this.inClassBody = false;\n  }\n};\n\nexports.state = state;\n\n},{\"./name-stack.js\":\"/../../../jshint/src/name-stack.js\"}],\"/../../../jshint/src/style.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.register = function(linter) {\n\n  linter.on(\"Identifier\", function style_scanProto(data) {\n    if (linter.getOption(\"proto\")) {\n      return;\n    }\n\n    if (data.name === \"__proto__\") {\n      linter.warn(\"W103\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.name, \"6\" ]\n      });\n    }\n  });\n\n  linter.on(\"Identifier\", function style_scanIterator(data) {\n    if (linter.getOption(\"iterator\")) {\n      return;\n    }\n\n    if (data.name === \"__iterator__\") {\n      linter.warn(\"W103\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.name ]\n      });\n    }\n  });\n\n  linter.on(\"Identifier\", function style_scanCamelCase(data) {\n    if (!linter.getOption(\"camelcase\")) {\n      return;\n    }\n\n    if (data.name.replace(/^_+|_+$/g, \"\").indexOf(\"_\") > -1 && !data.name.match(/^[A-Z0-9_]*$/)) {\n      linter.warn(\"W106\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.name ]\n      });\n    }\n  });\n\n  linter.on(\"String\", function style_scanQuotes(data) {\n    var quotmark = linter.getOption(\"quotmark\");\n    var code;\n\n    if (!quotmark) {\n      return;\n    }\n\n    if (quotmark === \"single\" && data.quote !== \"'\") {\n      code = \"W109\";\n    }\n\n    if (quotmark === \"double\" && data.quote !== \"\\\"\") {\n      code = \"W108\";\n    }\n\n    if (quotmark === true) {\n      if (!linter.getCache(\"quotmark\")) {\n        linter.setCache(\"quotmark\", data.quote);\n      }\n\n      if (linter.getCache(\"quotmark\") !== data.quote) {\n        code = \"W110\";\n      }\n    }\n\n    if (code) {\n      linter.warn(code, {\n        line: data.line,\n        char: data.char,\n      });\n    }\n  });\n\n  linter.on(\"Number\", function style_scanNumbers(data) {\n    if (data.value.charAt(0) === \".\") {\n      linter.warn(\"W008\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n\n    if (data.value.substr(data.value.length - 1) === \".\") {\n      linter.warn(\"W047\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n\n    if (/^00+/.test(data.value)) {\n      linter.warn(\"W046\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n  });\n\n  linter.on(\"String\", function style_scanJavaScriptURLs(data) {\n    var re = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;\n\n    if (linter.getOption(\"scripturl\")) {\n      return;\n    }\n\n    if (re.test(data.value)) {\n      linter.warn(\"W107\", {\n        line: data.line,\n        char: data.char\n      });\n    }\n  });\n};\n\n},{}],\"/../../../jshint/src/validate-unicode-escape-sequence.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\n\nmodule.exports = function validate(sequence) {\n  var equalSignIndex = sequence.indexOf(\"=\");\n\n  if (equalSignIndex === -1) {\n    return sequence in names.binary || sequence in values.general;\n  }\n\n  var name = sequence.substr(0, equalSignIndex);\n  var value = sequence.substr(equalSignIndex + 1);\n\n  if (name === \"General_Category\" || name === \"gc\") {\n    return value in values.general;\n  } if (name === \"Script\" || name === \"sc\" || name === \"Script_Extensions\" || name === \"scx\") {\n    return value in values.script;\n  }\n\n  return false;\n};\n\n\nvar names = {\n  nonBinary: Object.create(null),\n  binary: Object.create(null)\n};\nvar values = {\n  general: Object.create(null),\n  script: Object.create(null)\n};\n\nvar nb = names.nonBinary;\nnb.General_Category = true;\nnb.gc = true;\nnb.Script = true;\nnb.sc = true;\nnb.Script_Extensions = true;\nnb.scx = true;\n\nvar b = names.binary;\nb.ASCII = true;\nb.ASCII_Hex_Digit = true;\nb.AHex = true;\nb.Alphabetic = true;\nb.Alpha = true;\nb.Any = true;\nb.Assigned = true;\nb.Bidi_Control = true;\nb.Bidi_C = true;\nb.Bidi_Mirrored = true;\nb.Bidi_M = true;\nb.Case_Ignorable = true;\nb.CI = true;\nb.Cased = true;\nb.Changes_When_Casefolded = true;\nb.CWCF = true;\nb.Changes_When_Casemapped = true;\nb.CWCM = true;\nb.Changes_When_Lowercased = true;\nb.CWL = true;\nb.Changes_When_NFKC_Casefolded = true;\nb.CWKCF = true;\nb.Changes_When_Titlecased = true;\nb.CWT = true;\nb.Changes_When_Uppercased = true;\nb.CWU = true;\nb.Dash = true;\nb.Default_Ignorable_Code_Point = true;\nb.DI = true;\nb.Deprecated = true;\nb.Dep = true;\nb.Diacritic = true;\nb.Dia = true;\nb.Emoji = true;\nb.Emoji_Component = true;\nb.EComp = true;\nb.Emoji_Modifier = true;\nb.EMod = true;\nb.Emoji_Modifier_Base = true;\nb.EBase = true;\nb.Emoji_Presentation = true;\nb.EPres = true;\nb.Extended_Pictographic = true;\nb.ExtPict = true;\nb.Extender = true;\nb.Ext = true;\nb.Grapheme_Base = true;\nb.Gr_Base = true;\nb.Grapheme_Extend = true;\nb.Gr_Ext = true;\nb.Hex_Digit = true;\nb.Hex = true;\nb.IDS_Binary_Operator = true;\nb.IDSB = true;\nb.IDS_Trinary_Operator = true;\nb.IDST = true;\nb.ID_Continue = true;\nb.IDC = true;\nb.ID_Start = true;\nb.IDS = true;\nb.Ideographic = true;\nb.Ideo = true;\nb.Join_Control = true;\nb.Join_C = true;\nb.Logical_Order_Exception = true;\nb.LOE = true;\nb.Lowercase = true;\nb.Lower = true;\nb.Math = true;\nb.Noncharacter_Code_Point = true;\nb.NChar = true;\nb.Pattern_Syntax = true;\nb.Pat_Syn = true;\nb.Pattern_White_Space = true;\nb.Pat_WS = true;\nb.Quotation_Mark = true;\nb.QMark = true;\nb.Radical = true;\nb.Regional_Indicator = true;\nb.RI = true;\nb.Sentence_Terminal = true;\nb.STerm = true;\nb.Soft_Dotted = true;\nb.SD = true;\nb.Terminal_Punctuation = true;\nb.Term = true;\nb.Unified_Ideograph = true;\nb.UIdeo = true;\nb.Uppercase = true;\nb.Upper = true;\nb.Variation_Selector = true;\nb.VS = true;\nb.White_Space = true;\nb.space = true;\nb.XID_Continue = true;\nb.XIDC = true;\nb.XID_Start = true;\nb.XIDS = true;\n\nvar g = values.general;\ng.Cased_Letter = true;\ng.LC = true;\ng.Close_Punctuation = true;\ng.Pe = true;\ng.Connector_Punctuation = true;\ng.Pc = true;\ng.Control = true;\ng.Cc = true;\ng.cntrl = true;\ng.Currency_Symbol = true;\ng.Sc = true;\ng.Dash_Punctuation = true;\ng.Pd = true;\ng.Decimal_Number = true;\ng.Nd = true;\ng.digit = true;\ng.Enclosing_Mark = true;\ng.Me = true;\ng.Final_Punctuation = true;\ng.Pf = true;\ng.Format = true;\ng.Cf = true;\ng.Initial_Punctuation = true;\ng.Pi = true;\ng.Letter = true;\ng.L = true;\ng.Letter_Number = true;\ng.Nl = true;\ng.Line_Separator = true;\ng.Zl = true;\ng.Lowercase_Letter = true;\ng.Ll = true;\ng.Mark = true;\ng.M = true;\ng.Combining_Mark = true;\ng.Math_Symbol = true;\ng.Sm = true;\ng.Modifier_Letter = true;\ng.Lm = true;\ng.Modifier_Symbol = true;\ng.Sk = true;\ng.Nonspacing_Mark = true;\ng.Mn = true;\ng.Number = true;\ng.N = true;\ng.Open_Punctuation = true;\ng.Ps = true;\ng.Other = true;\ng.C = true;\ng.Other_Letter = true;\ng.Lo = true;\ng.Other_Number = true;\ng.No = true;\ng.Other_Punctuation = true;\ng.Po = true;\ng.Other_Symbol = true;\ng.So = true;\ng.Paragraph_Separator = true;\ng.Zp = true;\ng.Private_Use = true;\ng.Co = true;\ng.Punctuation = true;\ng.P = true;\ng.punct = true;\ng.Separator = true;\ng.Z = true;\ng.Space_Separator = true;\ng.Zs = true;\ng.Spacing_Mark = true;\ng.Mc = true;\ng.Surrogate = true;\ng.Cs = true;\ng.Symbol = true;\ng.S = true;\ng.Titlecase_Letter = true;\ng.Lt = true;\ng.Unassigned = true;\ng.Cn = true;\ng.Uppercase_Letter = true;\ng.Lu = true;\n\nvar s = values.script;\ns.Adlam = true;\ns.Adlm = true;\ns.Ahom = true;\ns.Anatolian_Hieroglyphs = true;\ns.Hluw = true;\ns.Arabic = true;\ns.Arab = true;\ns.Armenian = true;\ns.Armn = true;\ns.Avestan = true;\ns.Avst = true;\ns.Balinese = true;\ns.Bali = true;\ns.Bamum = true;\ns.Bamu = true;\ns.Bassa_Vah = true;\ns.Bass = true;\ns.Batak = true;\ns.Batk = true;\ns.Bengali = true;\ns.Beng = true;\ns.Bhaiksuki = true;\ns.Bhks = true;\ns.Bopomofo = true;\ns.Bopo = true;\ns.Brahmi = true;\ns.Brah = true;\ns.Braille = true;\ns.Brai = true;\ns.Buginese = true;\ns.Bugi = true;\ns.Buhid = true;\ns.Buhd = true;\ns.Canadian_Aboriginal = true;\ns.Cans = true;\ns.Carian = true;\ns.Cari = true;\ns.Caucasian_Albanian = true;\ns.Aghb = true;\ns.Chakma = true;\ns.Cakm = true;\ns.Cham = true;\ns.Chorasmian = true;\ns.Chrs = true;\ns.Cherokee = true;\ns.Cher = true;\ns.Common = true;\ns.Zyyy = true;\ns.Coptic = true;\ns.Copt = true;\ns.Qaac = true;\ns.Cuneiform = true;\ns.Xsux = true;\ns.Cypriot = true;\ns.Cprt = true;\ns.Cyrillic = true;\ns.Cyrl = true;\ns.Deseret = true;\ns.Dsrt = true;\ns.Devanagari = true;\ns.Deva = true;\ns.Dives_Akuru = true;\ns.Diak = true;\ns.Dogra = true;\ns.Dogr = true;\ns.Duployan = true;\ns.Dupl = true;\ns.Egyptian_Hieroglyphs = true;\ns.Egyp = true;\ns.Elbasan = true;\ns.Elba = true;\ns.Elymaic = true;\ns.Elym = true;\ns.Ethiopic = true;\ns.Ethi = true;\ns.Georgian = true;\ns.Geor = true;\ns.Glagolitic = true;\ns.Glag = true;\ns.Gothic = true;\ns.Goth = true;\ns.Grantha = true;\ns.Gran = true;\ns.Greek = true;\ns.Grek = true;\ns.Gujarati = true;\ns.Gujr = true;\ns.Gunjala_Gondi = true;\ns.Gong = true;\ns.Gurmukhi = true;\ns.Guru = true;\ns.Han = true;\ns.Hani = true;\ns.Hangul = true;\ns.Hang = true;\ns.Hanifi_Rohingya = true;\ns.Rohg = true;\ns.Hanunoo = true;\ns.Hano = true;\ns.Hatran = true;\ns.Hatr = true;\ns.Hebrew = true;\ns.Hebr = true;\ns.Hiragana = true;\ns.Hira = true;\ns.Imperial_Aramaic = true;\ns.Armi = true;\ns.Inherited = true;\ns.Zinh = true;\ns.Qaai = true;\ns.Inscriptional_Pahlavi = true;\ns.Phli = true;\ns.Inscriptional_Parthian = true;\ns.Prti = true;\ns.Javanese = true;\ns.Java = true;\ns.Kaithi = true;\ns.Kthi = true;\ns.Kannada = true;\ns.Knda = true;\ns.Katakana = true;\ns.Kana = true;\ns.Kayah_Li = true;\ns.Kali = true;\ns.Kharoshthi = true;\ns.Khar = true;\ns.Khitan_Small_Script = true;\ns.Kits = true;\ns.Khmer = true;\ns.Khmr = true;\ns.Khojki = true;\ns.Khoj = true;\ns.Khudawadi = true;\ns.Sind = true;\ns.Lao = true;\ns.Laoo = true;\ns.Latin = true;\ns.Latn = true;\ns.Lepcha = true;\ns.Lepc = true;\ns.Limbu = true;\ns.Limb = true;\ns.Linear_A = true;\ns.Lina = true;\ns.Linear_B = true;\ns.Linb = true;\ns.Lisu = true;\ns.Lycian = true;\ns.Lyci = true;\ns.Lydian = true;\ns.Lydi = true;\ns.Mahajani = true;\ns.Mahj = true;\ns.Makasar = true;\ns.Maka = true;\ns.Malayalam = true;\ns.Mlym = true;\ns.Mandaic = true;\ns.Mand = true;\ns.Manichaean = true;\ns.Mani = true;\ns.Marchen = true;\ns.Marc = true;\ns.Medefaidrin = true;\ns.Medf = true;\ns.Masaram_Gondi = true;\ns.Gonm = true;\ns.Meetei_Mayek = true;\ns.Mtei = true;\ns.Mende_Kikakui = true;\ns.Mend = true;\ns.Meroitic_Cursive = true;\ns.Merc = true;\ns.Meroitic_Hieroglyphs = true;\ns.Mero = true;\ns.Miao = true;\ns.Plrd = true;\ns.Modi = true;\ns.Mongolian = true;\ns.Mong = true;\ns.Mro = true;\ns.Mroo = true;\ns.Multani = true;\ns.Mult = true;\ns.Myanmar = true;\ns.Mymr = true;\ns.Nabataean = true;\ns.Nbat = true;\ns.Nandinagari = true;\ns.Nand = true;\ns.New_Tai_Lue = true;\ns.Talu = true;\ns.Newa = true;\ns.Nko = true;\ns.Nkoo = true;\ns.Nushu = true;\ns.Nshu = true;\ns.Nyiakeng_Puachue_Hmong = true;\ns.Hmnp = true;\ns.Ogham = true;\ns.Ogam = true;\ns.Ol_Chiki = true;\ns.Olck = true;\ns.Old_Hungarian = true;\ns.Hung = true;\ns.Old_Italic = true;\ns.Ital = true;\ns.Old_North_Arabian = true;\ns.Narb = true;\ns.Old_Permic = true;\ns.Perm = true;\ns.Old_Persian = true;\ns.Xpeo = true;\ns.Old_Sogdian = true;\ns.Sogo = true;\ns.Old_South_Arabian = true;\ns.Sarb = true;\ns.Old_Turkic = true;\ns.Orkh = true;\ns.Oriya = true;\ns.Orya = true;\ns.Osage = true;\ns.Osge = true;\ns.Osmanya = true;\ns.Osma = true;\ns.Pahawh_Hmong = true;\ns.Hmng = true;\ns.Palmyrene = true;\ns.Palm = true;\ns.Pau_Cin_Hau = true;\ns.Pauc = true;\ns.Phags_Pa = true;\ns.Phag = true;\ns.Phoenician = true;\ns.Phnx = true;\ns.Psalter_Pahlavi = true;\ns.Phlp = true;\ns.Rejang = true;\ns.Rjng = true;\ns.Runic = true;\ns.Runr = true;\ns.Samaritan = true;\ns.Samr = true;\ns.Saurashtra = true;\ns.Saur = true;\ns.Sharada = true;\ns.Shrd = true;\ns.Shavian = true;\ns.Shaw = true;\ns.Siddham = true;\ns.Sidd = true;\ns.SignWriting = true;\ns.Sgnw = true;\ns.Sinhala = true;\ns.Sinh = true;\ns.Sogdian = true;\ns.Sogd = true;\ns.Sora_Sompeng = true;\ns.Sora = true;\ns.Soyombo = true;\ns.Soyo = true;\ns.Sundanese = true;\ns.Sund = true;\ns.Syloti_Nagri = true;\ns.Sylo = true;\ns.Syriac = true;\ns.Syrc = true;\ns.Tagalog = true;\ns.Tglg = true;\ns.Tagbanwa = true;\ns.Tagb = true;\ns.Tai_Le = true;\ns.Tale = true;\ns.Tai_Tham = true;\ns.Lana = true;\ns.Tai_Viet = true;\ns.Tavt = true;\ns.Takri = true;\ns.Takr = true;\ns.Tamil = true;\ns.Taml = true;\ns.Tangut = true;\ns.Tang = true;\ns.Telugu = true;\ns.Telu = true;\ns.Thaana = true;\ns.Thaa = true;\ns.Thai = true;\ns.Tibetan = true;\ns.Tibt = true;\ns.Tifinagh = true;\ns.Tfng = true;\ns.Tirhuta = true;\ns.Tirh = true;\ns.Ugaritic = true;\ns.Ugar = true;\ns.Vai = true;\ns.Vaii = true;\ns.Wancho = true;\ns.Wcho = true;\ns.Warang_Citi = true;\ns.Wara = true;\ns.Yezidi = true;\ns.Yezi = true;\ns.Yi = true;\ns.Yiii = true;\ns.Zanabazar_Square = true;\ns.Zanb = true;\n\n},{}],\"/../../../jshint/src/vars.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\n\nexports.reservedVars = {\n  NaN       : false,\n  undefined : false\n};\n\nexports.ecmaIdentifiers = {\n  3: {\n    Array              : false,\n    Boolean            : false,\n    Date               : false,\n    decodeURI          : false,\n    decodeURIComponent : false,\n    encodeURI          : false,\n    encodeURIComponent : false,\n    Error              : false,\n    \"eval\"             : false,\n    EvalError          : false,\n    Function           : false,\n    hasOwnProperty     : false,\n    Infinity           : false,\n    isFinite           : false,\n    isNaN              : false,\n    Math               : false,\n    Number             : false,\n    Object             : false,\n    parseInt           : false,\n    parseFloat         : false,\n    RangeError         : false,\n    ReferenceError     : false,\n    RegExp             : false,\n    String             : false,\n    SyntaxError        : false,\n    TypeError          : false,\n    URIError           : false\n  },\n  5: {\n    JSON               : false\n  },\n  6: {\n    ArrayBuffer        : false,\n    DataView           : false,\n    Float32Array       : false,\n    Float64Array       : false,\n    Int8Array          : false,\n    Int16Array         : false,\n    Int32Array         : false,\n    Map                : false,\n    Promise            : false,\n    Proxy              : false,\n    Reflect            : false,\n    Set                : false,\n    Symbol             : false,\n    Uint8Array         : false,\n    Uint16Array        : false,\n    Uint32Array        : false,\n    Uint8ClampedArray  : false,\n    WeakMap            : false,\n    WeakSet            : false\n  },\n  8: {\n    Atomics            : false,\n    SharedArrayBuffer  : false\n  },\n  11: {\n    BigInt             : false,\n    globalThis         : false\n  }\n};\n\nexports.browser = {\n  Audio                : false,\n  Blob                 : false,\n  addEventListener     : false, // EventTarget\n  applicationCache     : false,\n  atob                 : false, // WindowOrWorkerGlobalScope\n  blur                 : false,\n  btoa                 : false, // WindowOrWorkerGlobalScope\n  cancelAnimationFrame : false,\n  CanvasGradient       : false,\n  CanvasPattern        : false,\n  CanvasRenderingContext2D: false,\n  CSS                  : false,\n  CSSImportRule        : false,\n  CSSGroupingRule      : false,\n  CSSMarginRule        : false,\n  CSSMediaRule         : false,\n  CSSNamespaceRule     : false,\n  CSSPageRule          : false,\n  CSSRule              : false,\n  CSSRuleList          : false,\n  CSSStyleDeclaration  : false,\n  CSSStyleRule         : false,\n  CSSStyleSheet        : false,\n  clearInterval        : false, // WindowOrWorkerGlobalScope\n  clearTimeout         : false, // WindowOrWorkerGlobalScope\n  close                : false,\n  closed               : false,\n  Comment              : false,\n  CompositionEvent     : false,\n  createImageBitmap    : false, // WindowOrWorkerGlobalScope\n  CustomEvent          : false,\n  DOMParser            : false,\n  defaultStatus        : false,\n  dispatchEvent        : false, // EventTarget\n  Document             : false,\n  document             : false,\n  DocumentFragment     : false,\n  Element              : false,\n  ElementTimeControl   : false,\n  Event                : false,\n  event                : false,\n  fetch                : false,\n  File                 : false,\n  FileList             : false,\n  FileReader           : false,\n  FormData             : false,\n  focus                : false,\n  frames               : false,\n  getComputedStyle     : false,\n  Headers              : false,\n  HTMLAnchorElement    : false,\n  HTMLAreaElement      : false,\n  HTMLAudioElement     : false,\n  HTMLBaseElement      : false,\n  HTMLBlockquoteElement: false,\n  HTMLBodyElement      : false,\n  HTMLBRElement        : false,\n  HTMLButtonElement    : false,\n  HTMLCanvasElement    : false,\n  HTMLCollection       : false,\n  HTMLDataElement      : false,\n  HTMLDataListElement  : false,\n  HTMLDetailsElement   : false,\n  HTMLDialogElement    : false,\n  HTMLDirectoryElement : false,\n  HTMLDivElement       : false,\n  HTMLDListElement     : false,\n  HTMLElement          : false,\n  HTMLEmbedElement     : false,\n  HTMLFieldSetElement  : false,\n  HTMLFontElement      : false,\n  HTMLFormElement      : false,\n  HTMLFrameElement     : false,\n  HTMLFrameSetElement  : false,\n  HTMLHeadElement      : false,\n  HTMLHeadingElement   : false,\n  HTMLHRElement        : false,\n  HTMLHtmlElement      : false,\n  HTMLIFrameElement    : false,\n  HTMLImageElement     : false,\n  HTMLInputElement     : false,\n  HTMLIsIndexElement   : false,\n  HTMLLabelElement     : false,\n  HTMLLayerElement     : false,\n  HTMLLegendElement    : false,\n  HTMLLIElement        : false,\n  HTMLLinkElement      : false,\n  HTMLMapElement       : false,\n  HTMLMarqueeElement   : false,\n  HTMLMediaElement     : false,\n  HTMLMenuElement      : false,\n  HTMLMetaElement      : false,\n  HTMLMeterElement     : false,\n  HTMLModElement       : false,\n  HTMLObjectElement    : false,\n  HTMLOListElement     : false,\n  HTMLOptGroupElement  : false,\n  HTMLOptionElement    : false,\n  HTMLParagraphElement : false,\n  HTMLParamElement     : false,\n  HTMLPictureElement   : false,\n  HTMLPreElement       : false,\n  HTMLProgressElement  : false,\n  HTMLQuoteElement     : false,\n  HTMLScriptElement    : false,\n  HTMLSelectElement    : false,\n  HTMLSlotElement      : false,\n  HTMLSourceElement    : false,\n  HTMLStyleElement     : false,\n  HTMLTableCaptionElement: false,\n  HTMLTableCellElement : false,\n  HTMLTableColElement  : false,\n  HTMLTableElement     : false,\n  HTMLTableRowElement  : false,\n  HTMLTableSectionElement: false,\n  HTMLTemplateElement  : false,\n  HTMLTextAreaElement  : false,\n  HTMLTimeElement      : false,\n  HTMLTitleElement     : false,\n  HTMLTrackElement     : false,\n  HTMLUListElement     : false,\n  HTMLVideoElement     : false,\n  history              : false,\n  Image                : false,\n  IntersectionObserver : false,\n  Intl                 : false,\n  length               : false,\n  localStorage         : false,\n  location             : false,\n  matchMedia           : false,\n  MediaList            : false,\n  MediaRecorder        : false,\n  MessageChannel       : false,\n  MessageEvent         : false,\n  MessagePort          : false,\n  MouseEvent           : false,\n  moveBy               : false,\n  moveTo               : false,\n  MutationObserver     : false,\n  name                 : false,\n  Node                 : false,\n  NodeFilter           : false,\n  NodeList             : false,\n  Notification         : false,\n  navigator            : false,\n  onbeforeunload       : true,\n  onblur               : true,\n  onerror              : true,\n  onfocus              : true,\n  onload               : true,\n  onresize             : true,\n  onunload             : true,\n  open                 : false,\n  openDatabase         : false,\n  opener               : false,\n  Option               : false,\n  origin               : false, // WindowOrWorkerGlobalScope\n  parent               : false,\n  performance          : false,\n  print                : false,\n  queueMicrotask       : false, // WindowOrWorkerGlobalScope\n  Range                : false,\n  requestAnimationFrame : false,\n  removeEventListener  : false, // EventTarget\n  Request              : false,\n  resizeBy             : false,\n  resizeTo             : false,\n  Response             : false,\n  screen               : false,\n  scroll               : false,\n  scrollBy             : false,\n  scrollTo             : false,\n  sessionStorage       : false,\n  setInterval          : false, // WindowOrWorkerGlobalScope\n  setTimeout           : false, // WindowOrWorkerGlobalScope\n  SharedWorker         : false,\n  status               : false,\n  Storage              : false,\n  StyleSheet           : false,\n  SVGAElement          : false,\n  SVGAltGlyphDefElement: false,\n  SVGAltGlyphElement   : false,\n  SVGAltGlyphItemElement: false,\n  SVGAngle             : false,\n  SVGAnimateColorElement: false,\n  SVGAnimateElement    : false,\n  SVGAnimateMotionElement: false,\n  SVGAnimateTransformElement: false,\n  SVGAnimatedAngle     : false,\n  SVGAnimatedBoolean   : false,\n  SVGAnimatedEnumeration: false,\n  SVGAnimatedInteger   : false,\n  SVGAnimatedLength    : false,\n  SVGAnimatedLengthList: false,\n  SVGAnimatedNumber    : false,\n  SVGAnimatedNumberList: false,\n  SVGAnimatedPathData  : false,\n  SVGAnimatedPoints    : false,\n  SVGAnimatedPreserveAspectRatio: false,\n  SVGAnimatedRect      : false,\n  SVGAnimatedString    : false,\n  SVGAnimatedTransformList: false,\n  SVGAnimationElement  : false,\n  SVGCSSRule           : false,\n  SVGCircleElement     : false,\n  SVGClipPathElement   : false,\n  SVGColor             : false,\n  SVGColorProfileElement: false,\n  SVGColorProfileRule  : false,\n  SVGComponentTransferFunctionElement: false,\n  SVGCursorElement     : false,\n  SVGDefsElement       : false,\n  SVGDescElement       : false,\n  SVGDocument          : false,\n  SVGElement           : false,\n  SVGElementInstance   : false,\n  SVGElementInstanceList: false,\n  SVGEllipseElement    : false,\n  SVGExternalResourcesRequired: false,\n  SVGFEBlendElement    : false,\n  SVGFEColorMatrixElement: false,\n  SVGFEComponentTransferElement: false,\n  SVGFECompositeElement: false,\n  SVGFEConvolveMatrixElement: false,\n  SVGFEDiffuseLightingElement: false,\n  SVGFEDisplacementMapElement: false,\n  SVGFEDistantLightElement: false,\n  SVGFEFloodElement    : false,\n  SVGFEFuncAElement    : false,\n  SVGFEFuncBElement    : false,\n  SVGFEFuncGElement    : false,\n  SVGFEFuncRElement    : false,\n  SVGFEGaussianBlurElement: false,\n  SVGFEImageElement    : false,\n  SVGFEMergeElement    : false,\n  SVGFEMergeNodeElement: false,\n  SVGFEMorphologyElement: false,\n  SVGFEOffsetElement   : false,\n  SVGFEPointLightElement: false,\n  SVGFESpecularLightingElement: false,\n  SVGFESpotLightElement: false,\n  SVGFETileElement     : false,\n  SVGFETurbulenceElement: false,\n  SVGFilterElement     : false,\n  SVGFilterPrimitiveStandardAttributes: false,\n  SVGFitToViewBox      : false,\n  SVGFontElement       : false,\n  SVGFontFaceElement   : false,\n  SVGFontFaceFormatElement: false,\n  SVGFontFaceNameElement: false,\n  SVGFontFaceSrcElement: false,\n  SVGFontFaceUriElement: false,\n  SVGForeignObjectElement: false,\n  SVGGElement          : false,\n  SVGGlyphElement      : false,\n  SVGGlyphRefElement   : false,\n  SVGGradientElement   : false,\n  SVGHKernElement      : false,\n  SVGICCColor          : false,\n  SVGImageElement      : false,\n  SVGLangSpace         : false,\n  SVGLength            : false,\n  SVGLengthList        : false,\n  SVGLineElement       : false,\n  SVGLinearGradientElement: false,\n  SVGLocatable         : false,\n  SVGMPathElement      : false,\n  SVGMarkerElement     : false,\n  SVGMaskElement       : false,\n  SVGMatrix            : false,\n  SVGMetadataElement   : false,\n  SVGMissingGlyphElement: false,\n  SVGNumber            : false,\n  SVGNumberList        : false,\n  SVGPaint             : false,\n  SVGPathElement       : false,\n  SVGPathSeg           : false,\n  SVGPathSegArcAbs     : false,\n  SVGPathSegArcRel     : false,\n  SVGPathSegClosePath  : false,\n  SVGPathSegCurvetoCubicAbs: false,\n  SVGPathSegCurvetoCubicRel: false,\n  SVGPathSegCurvetoCubicSmoothAbs: false,\n  SVGPathSegCurvetoCubicSmoothRel: false,\n  SVGPathSegCurvetoQuadraticAbs: false,\n  SVGPathSegCurvetoQuadraticRel: false,\n  SVGPathSegCurvetoQuadraticSmoothAbs: false,\n  SVGPathSegCurvetoQuadraticSmoothRel: false,\n  SVGPathSegLinetoAbs  : false,\n  SVGPathSegLinetoHorizontalAbs: false,\n  SVGPathSegLinetoHorizontalRel: false,\n  SVGPathSegLinetoRel  : false,\n  SVGPathSegLinetoVerticalAbs: false,\n  SVGPathSegLinetoVerticalRel: false,\n  SVGPathSegList       : false,\n  SVGPathSegMovetoAbs  : false,\n  SVGPathSegMovetoRel  : false,\n  SVGPatternElement    : false,\n  SVGPoint             : false,\n  SVGPointList         : false,\n  SVGPolygonElement    : false,\n  SVGPolylineElement   : false,\n  SVGPreserveAspectRatio: false,\n  SVGRadialGradientElement: false,\n  SVGRect              : false,\n  SVGRectElement       : false,\n  SVGRenderingIntent   : false,\n  SVGSVGElement        : false,\n  SVGScriptElement     : false,\n  SVGSetElement        : false,\n  SVGStopElement       : false,\n  SVGStringList        : false,\n  SVGStylable          : false,\n  SVGStyleElement      : false,\n  SVGSwitchElement     : false,\n  SVGSymbolElement     : false,\n  SVGTRefElement       : false,\n  SVGTSpanElement      : false,\n  SVGTests             : false,\n  SVGTextContentElement: false,\n  SVGTextElement       : false,\n  SVGTextPathElement   : false,\n  SVGTextPositioningElement: false,\n  SVGTitleElement      : false,\n  SVGTransform         : false,\n  SVGTransformList     : false,\n  SVGTransformable     : false,\n  SVGURIReference      : false,\n  SVGUnitTypes         : false,\n  SVGUseElement        : false,\n  SVGVKernElement      : false,\n  SVGViewElement       : false,\n  SVGViewSpec          : false,\n  SVGZoomAndPan        : false,\n  Text                 : false,\n  TextDecoder          : false,\n  TextEncoder          : false,\n  TimeEvent            : false,\n  top                  : false,\n  URL                  : false,\n  URLSearchParams      : false,\n  WebGLActiveInfo      : false,\n  WebGLBuffer          : false,\n  WebGLContextEvent    : false,\n  WebGLFramebuffer     : false,\n  WebGLProgram         : false,\n  WebGLRenderbuffer    : false,\n  WebGLRenderingContext: false,\n  WebGLShader          : false,\n  WebGLShaderPrecisionFormat: false,\n  WebGLTexture         : false,\n  WebGLUniformLocation : false,\n  WebSocket            : false,\n  window               : false,\n  Window               : false,\n  Worker               : false,\n  XDomainRequest       : false,\n  XMLDocument          : false,\n  XMLHttpRequest       : false,\n  XMLSerializer        : false,\n  XPathEvaluator       : false,\n  XPathException       : false,\n  XPathExpression      : false,\n  XPathNamespace       : false,\n  XPathNSResolver      : false,\n  XPathResult          : false\n};\n\nexports.devel = {\n  alert  : false,\n  confirm: false,\n  console: false,\n  Debug  : false,\n  opera  : false,\n  prompt : false\n};\n\nexports.worker = {\n  addEventListener    : true, // EventTarget\n  atob                : true, // WindowOrWorkerGlobalScope\n  btoa                : true, // WindowOrWorkerGlobalScope\n  clearInterval       : true, // WindowOrWorkerGlobalScope\n  clearTimeout        : true, // WindowOrWorkerGlobalScope\n  createImageBitmap   : true, // WindowOrWorkerGlobalScope\n  dispatchEvent       : true, // EventTarget\n  importScripts       : true,\n  onmessage           : true,\n  origin              : true, // WindowOrWorkerGlobalScope\n  postMessage         : true,\n  queueMicrotask      : true, // WindowOrWorkerGlobalScope\n  removeEventListener : true, // EventTarget\n  self                : true,\n  setInterval         : true, // WindowOrWorkerGlobalScope\n  setTimeout          : true, // WindowOrWorkerGlobalScope\n  FileReaderSync      : true\n};\nexports.nonstandard = {\n  escape  : false,\n  unescape: false\n};\n\nexports.couch = {\n  \"require\" : false,\n  respond   : false,\n  getRow    : false,\n  emit      : false,\n  send      : false,\n  start     : false,\n  sum       : false,\n  log       : false,\n  exports   : false,\n  module    : false,\n  provides  : false\n};\n\nexports.node = {\n  __filename    : false,\n  __dirname     : false,\n  arguments     : false,\n  GLOBAL        : false,\n  global        : false,\n  module        : false,\n  require       : false,\n  Intl          : false,\n\n  Buffer         : true,\n  console        : true,\n  exports        : true,\n  process        : true,\n  setTimeout     : true,\n  clearTimeout   : true,\n  setInterval    : true,\n  clearInterval  : true,\n  setImmediate   : true, // v0.9.1+\n  clearImmediate : true, // v0.9.1+\n  URL            : true, // v10.0.0+\n  URLSearchParams: true  // v10.0.0+\n};\n\nexports.browserify = {\n  __filename    : false,\n  __dirname     : false,\n  global        : false,\n  module        : false,\n  require       : false,\n  Buffer        : true,\n  exports       : true,\n  process       : true\n};\n\nexports.phantom = {\n  phantom      : true,\n  require      : true,\n  WebPage      : true,\n  console      : true, // in examples, but undocumented\n  exports      : true  // v1.7+\n};\n\nexports.qunit = {\n  asyncTest      : false,\n  deepEqual      : false,\n  equal          : false,\n  expect         : false,\n  module         : false,\n  notDeepEqual   : false,\n  notEqual       : false,\n  notOk          : false,\n  notPropEqual   : false,\n  notStrictEqual : false,\n  ok             : false,\n  propEqual      : false,\n  QUnit          : false,\n  raises         : false,\n  start          : false,\n  stop           : false,\n  strictEqual    : false,\n  test           : false,\n  \"throws\"       : false\n};\n\nexports.rhino = {\n  arguments    : false,\n  defineClass  : false,\n  deserialize  : false,\n  gc           : false,\n  help         : false,\n  importClass  : false,\n  importPackage: false,\n  \"java\"       : false,\n  load         : false,\n  loadClass    : false,\n  Packages     : false,\n  print        : false,\n  quit         : false,\n  readFile     : false,\n  readUrl      : false,\n  runCommand   : false,\n  seal         : false,\n  serialize    : false,\n  spawn        : false,\n  sync         : false,\n  toint32      : false,\n  version      : false\n};\n\nexports.shelljs = {\n  target       : false,\n  echo         : false,\n  exit         : false,\n  cd           : false,\n  pwd          : false,\n  ls           : false,\n  find         : false,\n  cp           : false,\n  rm           : false,\n  mv           : false,\n  mkdir        : false,\n  test         : false,\n  cat          : false,\n  sed          : false,\n  grep         : false,\n  which        : false,\n  dirs         : false,\n  pushd        : false,\n  popd         : false,\n  env          : false,\n  exec         : false,\n  chmod        : false,\n  config       : false,\n  error        : false,\n  tempdir      : false\n};\n\nexports.typed = {\n  ArrayBuffer         : false,\n  ArrayBufferView     : false,\n  DataView            : false,\n  Float32Array        : false,\n  Float64Array        : false,\n  Int16Array          : false,\n  Int32Array          : false,\n  Int8Array           : false,\n  Uint16Array         : false,\n  Uint32Array         : false,\n  Uint8Array          : false,\n  Uint8ClampedArray   : false\n};\n\nexports.wsh = {\n  ActiveXObject            : true,\n  Enumerator               : true,\n  GetObject                : true,\n  ScriptEngine             : true,\n  ScriptEngineBuildVersion : true,\n  ScriptEngineMajorVersion : true,\n  ScriptEngineMinorVersion : true,\n  VBArray                  : true,\n  WSH                      : true,\n  WScript                  : true,\n  XDomainRequest           : true\n};\n\nexports.dojo = {\n  dojo     : false,\n  dijit    : false,\n  dojox    : false,\n  define   : false,\n  \"require\": false\n};\n\nexports.jquery = {\n  \"$\"    : false,\n  jQuery : false\n};\n\nexports.mootools = {\n  \"$\"           : false,\n  \"$$\"          : false,\n  Asset         : false,\n  Browser       : false,\n  Chain         : false,\n  Class         : false,\n  Color         : false,\n  Cookie        : false,\n  Core          : false,\n  Document      : false,\n  DomReady      : false,\n  DOMEvent      : false,\n  DOMReady      : false,\n  Drag          : false,\n  Element       : false,\n  Elements      : false,\n  Event         : false,\n  Events        : false,\n  Fx            : false,\n  Group         : false,\n  Hash          : false,\n  HtmlTable     : false,\n  IFrame        : false,\n  IframeShim    : false,\n  InputValidator: false,\n  instanceOf    : false,\n  Keyboard      : false,\n  Locale        : false,\n  Mask          : false,\n  MooTools      : false,\n  Native        : false,\n  Options       : false,\n  OverText      : false,\n  Request       : false,\n  Scroller      : false,\n  Slick         : false,\n  Slider        : false,\n  Sortables     : false,\n  Spinner       : false,\n  Swiff         : false,\n  Tips          : false,\n  Type          : false,\n  typeOf        : false,\n  URI           : false,\n  Window        : false\n};\n\nexports.prototypejs = {\n  \"$\"               : false,\n  \"$$\"              : false,\n  \"$A\"              : false,\n  \"$F\"              : false,\n  \"$H\"              : false,\n  \"$R\"              : false,\n  \"$break\"          : false,\n  \"$continue\"       : false,\n  \"$w\"              : false,\n  Abstract          : false,\n  Ajax              : false,\n  Class             : false,\n  Enumerable        : false,\n  Element           : false,\n  Event             : false,\n  Field             : false,\n  Form              : false,\n  Hash              : false,\n  Insertion         : false,\n  ObjectRange       : false,\n  PeriodicalExecuter: false,\n  Position          : false,\n  Prototype         : false,\n  Selector          : false,\n  Template          : false,\n  Toggle            : false,\n  Try               : false,\n  Autocompleter     : false,\n  Builder           : false,\n  Control           : false,\n  Draggable         : false,\n  Draggables        : false,\n  Droppables        : false,\n  Effect            : false,\n  Sortable          : false,\n  SortableObserver  : false,\n  Sound             : false,\n  Scriptaculous     : false\n};\n\nexports.yui = {\n  YUI       : false,\n  Y         : false,\n  YUI_config: false\n};\n\nexports.mocha = {\n  mocha       : false,\n  describe    : false,\n  xdescribe   : false,\n  context     : false,\n  xcontext    : false,\n  it          : false,\n  xit         : false,\n  specify     : false,\n  xspecify    : false,\n  before      : false,\n  after       : false,\n  beforeEach  : false,\n  afterEach   : false,\n  suite         : false,\n  test          : false,\n  setup         : false,\n  teardown      : false,\n  suiteSetup    : false,\n  suiteTeardown : false\n};\n\nexports.jasmine = {\n  jasmine     : false,\n  describe    : false,\n  xdescribe   : false,\n  it          : false,\n  xit         : false,\n  beforeEach  : false,\n  afterEach   : false,\n  setFixtures : false,\n  loadFixtures: false,\n  spyOn       : false,\n  expect      : false,\n  runs        : false,\n  waitsFor    : false,\n  waits       : false,\n  beforeAll   : false,\n  afterAll    : false,\n  fail        : false,\n  fdescribe   : false,\n  fit         : false,\n  pending     : false,\n  spyOnProperty: false\n};\n\n},{}],\"/node_modules/assert/assert.js\":[function(_dereq_,module,exports){\nvar util = _dereq_('util/');\n\nvar pSlice = Array.prototype.slice;\nvar hasOwn = Object.prototype.hasOwnProperty;\n\nvar assert = module.exports = ok;\n\nassert.AssertionError = function AssertionError(options) {\n  this.name = 'AssertionError';\n  this.actual = options.actual;\n  this.expected = options.expected;\n  this.operator = options.operator;\n  if (options.message) {\n    this.message = options.message;\n    this.generatedMessage = false;\n  } else {\n    this.message = getMessage(this);\n    this.generatedMessage = true;\n  }\n  var stackStartFunction = options.stackStartFunction || fail;\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, stackStartFunction);\n  }\n  else {\n    var err = new Error();\n    if (err.stack) {\n      var out = err.stack;\n      var fn_name = stackStartFunction.name;\n      var idx = out.indexOf('\\n' + fn_name);\n      if (idx >= 0) {\n        var next_line = out.indexOf('\\n', idx + 1);\n        out = out.substring(next_line + 1);\n      }\n\n      this.stack = out;\n    }\n  }\n};\nutil.inherits(assert.AssertionError, Error);\n\nfunction replacer(key, value) {\n  if (util.isUndefined(value)) {\n    return '' + value;\n  }\n  if (util.isNumber(value) && !isFinite(value)) {\n    return value.toString();\n  }\n  if (util.isFunction(value) || util.isRegExp(value)) {\n    return value.toString();\n  }\n  return value;\n}\n\nfunction truncate(s, n) {\n  if (util.isString(s)) {\n    return s.length < n ? s : s.slice(0, n);\n  } else {\n    return s;\n  }\n}\n\nfunction getMessage(self) {\n  return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +\n         self.operator + ' ' +\n         truncate(JSON.stringify(self.expected, replacer), 128);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n  throw new assert.AssertionError({\n    message: message,\n    actual: actual,\n    expected: expected,\n    operator: operator,\n    stackStartFunction: stackStartFunction\n  });\n}\nassert.fail = fail;\n\nfunction ok(value, message) {\n  if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\nassert.equal = function equal(actual, expected, message) {\n  if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\nassert.notEqual = function notEqual(actual, expected, message) {\n  if (actual == expected) {\n    fail(actual, expected, message, '!=', assert.notEqual);\n  }\n};\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n  if (!_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n  }\n};\n\nfunction _deepEqual(actual, expected) {\n  if (actual === expected) {\n    return true;\n\n  } else if (util.isBuffer(actual) && util.isBuffer(expected)) {\n    if (actual.length != expected.length) return false;\n\n    for (var i = 0; i < actual.length; i++) {\n      if (actual[i] !== expected[i]) return false;\n    }\n\n    return true;\n  } else if (util.isDate(actual) && util.isDate(expected)) {\n    return actual.getTime() === expected.getTime();\n  } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n    return actual.source === expected.source &&\n           actual.global === expected.global &&\n           actual.multiline === expected.multiline &&\n           actual.lastIndex === expected.lastIndex &&\n           actual.ignoreCase === expected.ignoreCase;\n  } else if (!util.isObject(actual) && !util.isObject(expected)) {\n    return actual == expected;\n  } else {\n    return objEquiv(actual, expected);\n  }\n}\n\nfunction isArguments(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b) {\n  if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))\n    return false;\n  if (a.prototype !== b.prototype) return false;\n  if (util.isPrimitive(a) || util.isPrimitive(b)) {\n    return a === b;\n  }\n  var aIsArgs = isArguments(a),\n      bIsArgs = isArguments(b);\n  if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n    return false;\n  if (aIsArgs) {\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return _deepEqual(a, b);\n  }\n  var ka = objectKeys(a),\n      kb = objectKeys(b),\n      key, i;\n  if (ka.length != kb.length)\n    return false;\n  ka.sort();\n  kb.sort();\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!_deepEqual(a[key], b[key])) return false;\n  }\n  return true;\n}\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n  if (_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n  }\n};\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n  if (actual !== expected) {\n    fail(actual, expected, message, '===', assert.strictEqual);\n  }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n  if (actual === expected) {\n    fail(actual, expected, message, '!==', assert.notStrictEqual);\n  }\n};\n\nfunction expectedException(actual, expected) {\n  if (!actual || !expected) {\n    return false;\n  }\n\n  if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n    return expected.test(actual);\n  } else if (actual instanceof expected) {\n    return true;\n  } else if (expected.call({}, actual) === true) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n  var actual;\n\n  if (util.isString(expected)) {\n    message = expected;\n    expected = null;\n  }\n\n  try {\n    block();\n  } catch (e) {\n    actual = e;\n  }\n\n  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n            (message ? ' ' + message : '.');\n\n  if (shouldThrow && !actual) {\n    fail(actual, expected, 'Missing expected exception' + message);\n  }\n\n  if (!shouldThrow && expectedException(actual, expected)) {\n    fail(actual, expected, 'Got unwanted exception' + message);\n  }\n\n  if ((shouldThrow && actual && expected &&\n      !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n    throw actual;\n  }\n}\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n  _throws.apply(this, [true].concat(pSlice.call(arguments)));\n};\nassert.doesNotThrow = function(block, /*optional*/message) {\n  _throws.apply(this, [false].concat(pSlice.call(arguments)));\n};\n\nassert.ifError = function(err) { if (err) {throw err;}};\n\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    if (hasOwn.call(obj, key)) keys.push(key);\n  }\n  return keys;\n};\n\n},{\"util/\":\"/node_modules/assert/node_modules/util/util.js\"}],\"/node_modules/assert/node_modules/inherits/inherits_browser.js\":[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},{}],\"/node_modules/assert/node_modules/util/support/isBufferBrowser.js\":[function(_dereq_,module,exports){\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n},{}],\"/node_modules/assert/node_modules/util/util.js\":[function(_dereq_,module,exports){\n(function (process,global){\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\nexports.deprecate = function(fn, msg) {\n  if (isUndefined(global.process)) {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\nfunction inspect(obj, opts) {\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    ctx.showHidden = opts;\n  } else if (opts) {\n    exports._extend(ctx, opts);\n  }\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      value.inspect !== exports.inspect &&\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = _dereq_('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\nexports.inherits = _dereq_('inherits');\n\nexports._extend = function(origin, add) {\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n}).call(this,_dereq_('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./support/isBuffer\":\"/node_modules/assert/node_modules/util/support/isBufferBrowser.js\",\"_process\":\"/node_modules/process/browser.js\",\"inherits\":\"/node_modules/assert/node_modules/inherits/inherits_browser.js\"}],\"/node_modules/events/events.js\":[function(_dereq_,module,exports){\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\nEventEmitter.defaultMaxListeners = 10;\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      }\n      throw TypeError('Uncaught, unspecified \"error\" event.');\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    this._events[type].push(listener);\n  else\n    this._events[type] = [this._events[type], listener];\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},{}],\"/node_modules/process/browser.js\":[function(_dereq_,module,exports){\nvar process = module.exports = {};\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        return setTimeout(fun, 0);\n    }\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        return clearTimeout(marker);\n    }\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],\"/node_modules/util/node_modules/inherits/inherits_browser.js\":[function(_dereq_,module,exports){\narguments[4][\"/node_modules/assert/node_modules/inherits/inherits_browser.js\"][0].apply(exports,arguments)\n},{}],\"/node_modules/util/support/isBufferBrowser.js\":[function(_dereq_,module,exports){\narguments[4][\"/node_modules/assert/node_modules/util/support/isBufferBrowser.js\"][0].apply(exports,arguments)\n},{}],\"/node_modules/util/util.js\":[function(_dereq_,module,exports){\narguments[4][\"/node_modules/assert/node_modules/util/util.js\"][0].apply(exports,arguments)\n},{\"./support/isBuffer\":\"/node_modules/util/support/isBufferBrowser.js\",\"_process\":\"/node_modules/process/browser.js\",\"inherits\":\"/node_modules/util/node_modules/inherits/inherits_browser.js\"}]},{},[\"/../../../jshint/src/jshint.js\"]);\n\n});\n\nace.define(\"ace/mode/javascript_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar lint = require(\"./javascript/jshint\").JSHINT;\n\nfunction startRegex(arr) {\n    return RegExp(\"^(\" + arr.join(\"|\") + \")\");\n}\n\nvar disabledWarningsRe = startRegex([\n    \"Bad for in variable '(.+)'.\",\n    'Missing \"use strict\"'\n]);\nvar errorsRe = startRegex([\n    \"Unexpected\",\n    \"Expected \",\n    \"Confusing (plus|minus)\",\n    \"\\\\{a\\\\} unterminated regular expression\",\n    \"Unclosed \",\n    \"Unmatched \",\n    \"Unbegun comment\",\n    \"Bad invocation\",\n    \"Missing space after\",\n    \"Missing operator at\"\n]);\nvar infoRe = startRegex([\n    \"Expected an assignment\",\n    \"Bad escapement of EOL\",\n    \"Unexpected comma\",\n    \"Unexpected space\",\n    \"Missing radix parameter.\",\n    \"A leading decimal point can\",\n    \"\\\\['{a}'\\\\] is better written in dot notation.\",\n    \"'{a}' used out of scope\"\n]);\n\nvar JavaScriptWorker = exports.JavaScriptWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n    this.setOptions();\n};\n\noop.inherits(JavaScriptWorker, Mirror);\n\n(function() {\n    this.setOptions = function(options) {\n        this.options = options || {\n            esnext: true,\n            moz: true,\n            devel: true,\n            browser: true,\n            node: true,\n            laxcomma: true,\n            laxbreak: true,\n            lastsemic: true,\n            onevar: false,\n            passfail: false,\n            maxerr: 100,\n            expr: true,\n            multistr: true,\n            globalstrict: true\n        };\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.changeOptions = function(newOptions) {\n        oop.mixin(this.options, newOptions);\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        value = value.replace(/^#!.*\\n/, \"\\n\");\n        if (!value)\n            return this.sender.emit(\"annotate\", []);\n\n        var errors = [];\n        lint(value, this.options, this.options.globals);\n        var results = lint.errors;\n\n        var errorAdded = false;\n        for (var i = 0; i < results.length; i++) {\n            var error = results[i];\n            if (!error)\n                continue;\n            var raw = error.raw;\n            var type = \"warning\";\n\n            if (raw == \"Missing semicolon.\") {\n                var str = error.evidence.substr(error.character);\n                str = str.charAt(str.search(/\\S/));\n                if (str && /[\\w\\d{(['\"]/.test(str)) {\n                    error.reason = 'Missing \";\" before statement';\n                    type = \"error\";\n                } else {\n                    type = \"info\";\n                }\n            }\n            else if (disabledWarningsRe.test(raw)) {\n                continue;\n            }\n            else if (infoRe.test(raw)) {\n                type = \"info\";\n            }\n            else if (errorsRe.test(raw)) {\n                errorAdded  = true;\n                type = \"error\";\n            }\n            else if (raw == \"'{a}' is not defined.\") {\n                type = \"warning\";\n            }\n            else if (raw == \"'{a}' is defined but never used.\") {\n                type = \"info\";\n            }\n\n            errors.push({\n                row: error.line-1,\n                column: error.character-1,\n                text: error.reason,\n                type: type,\n                raw: raw\n            });\n\n            if (errorAdded) {\n            }\n        }\n\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(JavaScriptWorker.prototype);\n\n});\n"
  },
  {
    "path": "publishable/assets/js/ace/libs/worker-json.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err && err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err && err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        sender = window.sender = window.initSender();\n        var clazz = this.require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function () {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    this.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    }\n    else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n    }\n    else {\n        this.insert({ row: 0, column: 0 }, textOrLines);\n    }\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    this.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function (text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    }\n    else {\n        this.$split = function (text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function () {\n        return this.$lines.length;\n    };\n    this.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    this.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    this.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    this.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    this.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    this.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    this.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    this.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    this.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    this.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    this.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\n\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                var d, err; \n                if (Array.isArray(data[i+1])) {\n                    d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                \n                if ((d.action == \"insert\" ? d.start : d.end).row >= doc.$lines.length) {\n                    err = new Error(\"Invalid delta\");\n                    err.data = {\n                        path: _self.$path,\n                        linesLength: doc.$lines.length,\n                        start: d.start,\n                        end: d.end\n                    };\n                    throw err;\n                }\n\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/json/json_parse\",[], function(require, exports, module) {\n\"use strict\";\n\n    var at,     // The index of the current character\n        ch,     // The current character\n        escapee = {\n            '\"':  '\"',\n            '\\\\': '\\\\',\n            '/':  '/',\n            b:    '\\b',\n            f:    '\\f',\n            n:    '\\n',\n            r:    '\\r',\n            t:    '\\t'\n        },\n        text,\n\n        error = function (m) {\n\n            throw {\n                name:    'SyntaxError',\n                message: m,\n                at:      at,\n                text:    text\n            };\n        },\n\n        next = function (c) {\n\n            if (c && c !== ch) {\n                error(\"Expected '\" + c + \"' instead of '\" + ch + \"'\");\n            }\n\n            ch = text.charAt(at);\n            at += 1;\n            return ch;\n        },\n\n        number = function () {\n\n            var number,\n                string = '';\n\n            if (ch === '-') {\n                string = '-';\n                next('-');\n            }\n            while (ch >= '0' && ch <= '9') {\n                string += ch;\n                next();\n            }\n            if (ch === '.') {\n                string += '.';\n                while (next() && ch >= '0' && ch <= '9') {\n                    string += ch;\n                }\n            }\n            if (ch === 'e' || ch === 'E') {\n                string += ch;\n                next();\n                if (ch === '-' || ch === '+') {\n                    string += ch;\n                    next();\n                }\n                while (ch >= '0' && ch <= '9') {\n                    string += ch;\n                    next();\n                }\n            }\n            number = +string;\n            if (isNaN(number)) {\n                error(\"Bad number\");\n            } else {\n                return number;\n            }\n        },\n\n        string = function () {\n\n            var hex,\n                i,\n                string = '',\n                uffff;\n\n            if (ch === '\"') {\n                while (next()) {\n                    if (ch === '\"') {\n                        next();\n                        return string;\n                    } else if (ch === '\\\\') {\n                        next();\n                        if (ch === 'u') {\n                            uffff = 0;\n                            for (i = 0; i < 4; i += 1) {\n                                hex = parseInt(next(), 16);\n                                if (!isFinite(hex)) {\n                                    break;\n                                }\n                                uffff = uffff * 16 + hex;\n                            }\n                            string += String.fromCharCode(uffff);\n                        } else if (typeof escapee[ch] === 'string') {\n                            string += escapee[ch];\n                        } else {\n                            break;\n                        }\n                    } else if (ch == \"\\n\" || ch == \"\\r\") {\n                        break;\n                    } else {\n                        string += ch;\n                    }\n                }\n            }\n            error(\"Bad string\");\n        },\n\n        white = function () {\n\n            while (ch && ch <= ' ') {\n                next();\n            }\n        },\n\n        word = function () {\n\n            switch (ch) {\n            case 't':\n                next('t');\n                next('r');\n                next('u');\n                next('e');\n                return true;\n            case 'f':\n                next('f');\n                next('a');\n                next('l');\n                next('s');\n                next('e');\n                return false;\n            case 'n':\n                next('n');\n                next('u');\n                next('l');\n                next('l');\n                return null;\n            }\n            error(\"Unexpected '\" + ch + \"'\");\n        },\n\n        value,  // Place holder for the value function.\n\n        array = function () {\n\n            var array = [];\n\n            if (ch === '[') {\n                next('[');\n                white();\n                if (ch === ']') {\n                    next(']');\n                    return array;   // empty array\n                }\n                while (ch) {\n                    array.push(value());\n                    white();\n                    if (ch === ']') {\n                        next(']');\n                        return array;\n                    }\n                    next(',');\n                    white();\n                }\n            }\n            error(\"Bad array\");\n        },\n\n        object = function () {\n\n            var key,\n                object = {};\n\n            if (ch === '{') {\n                next('{');\n                white();\n                if (ch === '}') {\n                    next('}');\n                    return object;   // empty object\n                }\n                while (ch) {\n                    key = string();\n                    white();\n                    next(':');\n                    if (Object.hasOwnProperty.call(object, key)) {\n                        error('Duplicate key \"' + key + '\"');\n                    }\n                    object[key] = value();\n                    white();\n                    if (ch === '}') {\n                        next('}');\n                        return object;\n                    }\n                    next(',');\n                    white();\n                }\n            }\n            error(\"Bad object\");\n        };\n\n    value = function () {\n\n        white();\n        switch (ch) {\n        case '{':\n            return object();\n        case '[':\n            return array();\n        case '\"':\n            return string();\n        case '-':\n            return number();\n        default:\n            return ch >= '0' && ch <= '9' ? number() : word();\n        }\n    };\n\n    return function (source, reviver) {\n        var result;\n\n        text = source;\n        at = 0;\n        ch = ' ';\n        result = value();\n        white();\n        if (ch) {\n            error(\"Syntax error\");\n        }\n\n        return typeof reviver === 'function' ? function walk(holder, key) {\n            var k, v, value = holder[key];\n            if (value && typeof value === 'object') {\n                for (k in value) {\n                    if (Object.hasOwnProperty.call(value, k)) {\n                        v = walk(value, k);\n                        if (v !== undefined) {\n                            value[k] = v;\n                        } else {\n                            delete value[k];\n                        }\n                    }\n                }\n            }\n            return reviver.call(holder, key, value);\n        }({'': result}, '') : result;\n    };\n});\n\nace.define(\"ace/mode/json_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar parse = require(\"./json/json_parse\");\n\nvar JsonWorker = exports.JsonWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(200);\n};\n\noop.inherits(JsonWorker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        try {\n            if (value)\n                parse(value);\n        } catch (e) {\n            var pos = this.doc.indexToPosition(e.at-1);\n            errors.push({\n                row: pos.row,\n                column: pos.column,\n                text: e.message,\n                type: \"error\"\n            });\n        }\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(JsonWorker.prototype);\n\n});\n"
  },
  {
    "path": "publishable/assets/js/ace/libs/worker-lua.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err && err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err && err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        sender = window.sender = window.initSender();\n        var clazz = this.require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function () {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    this.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    }\n    else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n    }\n    else {\n        this.insert({ row: 0, column: 0 }, textOrLines);\n    }\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    this.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function (text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    }\n    else {\n        this.$split = function (text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function () {\n        return this.$lines.length;\n    };\n    this.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    this.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    this.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    this.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    this.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    this.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    this.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    this.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    this.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    this.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    this.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\n\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                var d, err; \n                if (Array.isArray(data[i+1])) {\n                    d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                \n                if ((d.action == \"insert\" ? d.start : d.end).row >= doc.$lines.length) {\n                    err = new Error(\"Invalid delta\");\n                    err.data = {\n                        path: _self.$path,\n                        linesLength: doc.$lines.length,\n                        start: d.start,\n                        end: d.end\n                    };\n                    throw err;\n                }\n\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/lua/luaparse\",[], function(require, exports, module) {\n\n(function (root, name, factory) {\n   factory(exports)\n}(this, 'luaparse', function (exports) {\n  'use strict';\n\n  exports.version = \"0.3.1\";\n\n  var input, options, length, features, encodingMode;\n  var defaultOptions = exports.defaultOptions = {\n      wait: false\n    , comments: true\n    , scope: false\n    , locations: false\n    , ranges: false\n    , onCreateNode: null\n    , onCreateScope: null\n    , onDestroyScope: null\n    , onLocalDeclaration: null\n    , luaVersion: '5.3'\n    , encodingMode: 'none'\n  };\n\n  function encodeUTF8(codepoint, highMask) {\n    highMask = highMask || 0;\n\n    if (codepoint < 0x80) {\n      return String.fromCharCode(codepoint);\n    } else if (codepoint < 0x800) {\n      return String.fromCharCode(\n        highMask | 0xc0 |  (codepoint >>  6)        ,\n        highMask | 0x80 | ( codepoint        & 0x3f)\n      );\n    } else if (codepoint < 0x10000) {\n      return String.fromCharCode(\n        highMask | 0xe0 |  (codepoint >> 12)        ,\n        highMask | 0x80 | ((codepoint >>  6) & 0x3f),\n        highMask | 0x80 | ( codepoint        & 0x3f)\n      );\n    } else /* istanbul ignore else */ if (codepoint < 0x110000) {\n      return String.fromCharCode(\n        highMask | 0xf0 |  (codepoint >> 18)        ,\n        highMask | 0x80 | ((codepoint >> 12) & 0x3f),\n        highMask | 0x80 | ((codepoint >>  6) & 0x3f),\n        highMask | 0x80 | ( codepoint        & 0x3f)\n      );\n    } else {\n      return null;\n    }\n  }\n\n  function toHex(num, digits) {\n    var result = num.toString(16);\n    while (result.length < digits)\n      result = '0' + result;\n    return result;\n  }\n\n  function checkChars(rx) {\n    return function (s) {\n      var m = rx.exec(s);\n      if (!m)\n        return s;\n      raise(null, errors.invalidCodeUnit, toHex(m[0].charCodeAt(0), 4).toUpperCase());\n    };\n  }\n\n  var encodingModes = {\n    'pseudo-latin1': {\n      fixup: checkChars(/[^\\x00-\\xff]/),\n      encodeByte: function (value) {\n        if (value === null)\n          return '';\n        return String.fromCharCode(value);\n      },\n      encodeUTF8: function (codepoint) {\n        return encodeUTF8(codepoint);\n      },\n    },\n    'x-user-defined': {\n      fixup: checkChars(/[^\\x00-\\x7f\\uf780-\\uf7ff]/),\n      encodeByte: function (value) {\n        if (value === null)\n          return '';\n        if (value >= 0x80)\n          return String.fromCharCode(value | 0xf700);\n        return String.fromCharCode(value);\n      },\n      encodeUTF8: function (codepoint) {\n        return encodeUTF8(codepoint, 0xf700);\n      }\n    },\n    'none': {\n      discardStrings: true,\n      fixup: function (s) {\n        return s;\n      },\n      encodeByte: function (value) {\n        return '';\n      },\n      encodeUTF8: function (codepoint) {\n        return '';\n      }\n    }\n  };\n\n  var EOF = 1, StringLiteral = 2, Keyword = 4, Identifier = 8\n    , NumericLiteral = 16, Punctuator = 32, BooleanLiteral = 64\n    , NilLiteral = 128, VarargLiteral = 256;\n\n  exports.tokenTypes = { EOF: EOF, StringLiteral: StringLiteral\n    , Keyword: Keyword, Identifier: Identifier, NumericLiteral: NumericLiteral\n    , Punctuator: Punctuator, BooleanLiteral: BooleanLiteral\n    , NilLiteral: NilLiteral, VarargLiteral: VarargLiteral\n  };\n\n  var errors = exports.errors = {\n      unexpected: 'unexpected %1 \\'%2\\' near \\'%3\\''\n    , unexpectedEOF: 'unexpected symbol near \\'<eof>\\''\n    , expected: '\\'%1\\' expected near \\'%2\\''\n    , expectedToken: '%1 expected near \\'%2\\''\n    , unfinishedString: 'unfinished string near \\'%1\\''\n    , malformedNumber: 'malformed number near \\'%1\\''\n    , decimalEscapeTooLarge: 'decimal escape too large near \\'%1\\''\n    , invalidEscape: 'invalid escape sequence near \\'%1\\''\n    , hexadecimalDigitExpected: 'hexadecimal digit expected near \\'%1\\''\n    , braceExpected: 'missing \\'%1\\' near \\'%2\\''\n    , tooLargeCodepoint: 'UTF-8 value too large near \\'%1\\''\n    , unfinishedLongString: 'unfinished long string (starting at line %1) near \\'%2\\''\n    , unfinishedLongComment: 'unfinished long comment (starting at line %1) near \\'%2\\''\n    , ambiguousSyntax: 'ambiguous syntax (function call x new statement) near \\'%1\\''\n    , noLoopToBreak: 'no loop to break near \\'%1\\''\n    , labelAlreadyDefined: 'label \\'%1\\' already defined on line %2'\n    , labelNotVisible: 'no visible label \\'%1\\' for <goto>'\n    , gotoJumpInLocalScope: '<goto %1> jumps into the scope of local \\'%2\\''\n    , cannotUseVararg: 'cannot use \\'...\\' outside a vararg function near \\'%1\\''\n    , invalidCodeUnit: 'code unit U+%1 is not allowed in the current encoding mode'\n  };\n\n  var ast = exports.ast = {\n      labelStatement: function(label) {\n      return {\n          type: 'LabelStatement'\n        , label: label\n      };\n    }\n\n    , breakStatement: function() {\n      return {\n          type: 'BreakStatement'\n      };\n    }\n\n    , gotoStatement: function(label) {\n      return {\n          type: 'GotoStatement'\n        , label: label\n      };\n    }\n\n    , returnStatement: function(args) {\n      return {\n          type: 'ReturnStatement'\n        , 'arguments': args\n      };\n    }\n\n    , ifStatement: function(clauses) {\n      return {\n          type: 'IfStatement'\n        , clauses: clauses\n      };\n    }\n    , ifClause: function(condition, body) {\n      return {\n          type: 'IfClause'\n        , condition: condition\n        , body: body\n      };\n    }\n    , elseifClause: function(condition, body) {\n      return {\n          type: 'ElseifClause'\n        , condition: condition\n        , body: body\n      };\n    }\n    , elseClause: function(body) {\n      return {\n          type: 'ElseClause'\n        , body: body\n      };\n    }\n\n    , whileStatement: function(condition, body) {\n      return {\n          type: 'WhileStatement'\n        , condition: condition\n        , body: body\n      };\n    }\n\n    , doStatement: function(body) {\n      return {\n          type: 'DoStatement'\n        , body: body\n      };\n    }\n\n    , repeatStatement: function(condition, body) {\n      return {\n          type: 'RepeatStatement'\n        , condition: condition\n        , body: body\n      };\n    }\n\n    , localStatement: function(variables, init) {\n      return {\n          type: 'LocalStatement'\n        , variables: variables\n        , init: init\n      };\n    }\n\n    , assignmentStatement: function(variables, init) {\n      return {\n          type: 'AssignmentStatement'\n        , variables: variables\n        , init: init\n      };\n    }\n\n    , callStatement: function(expression) {\n      return {\n          type: 'CallStatement'\n        , expression: expression\n      };\n    }\n\n    , functionStatement: function(identifier, parameters, isLocal, body) {\n      return {\n          type: 'FunctionDeclaration'\n        , identifier: identifier\n        , isLocal: isLocal\n        , parameters: parameters\n        , body: body\n      };\n    }\n\n    , forNumericStatement: function(variable, start, end, step, body) {\n      return {\n          type: 'ForNumericStatement'\n        , variable: variable\n        , start: start\n        , end: end\n        , step: step\n        , body: body\n      };\n    }\n\n    , forGenericStatement: function(variables, iterators, body) {\n      return {\n          type: 'ForGenericStatement'\n        , variables: variables\n        , iterators: iterators\n        , body: body\n      };\n    }\n\n    , chunk: function(body) {\n      return {\n          type: 'Chunk'\n        , body: body\n      };\n    }\n\n    , identifier: function(name) {\n      return {\n          type: 'Identifier'\n        , name: name\n      };\n    }\n\n    , literal: function(type, value, raw) {\n      type = (type === StringLiteral) ? 'StringLiteral'\n        : (type === NumericLiteral) ? 'NumericLiteral'\n        : (type === BooleanLiteral) ? 'BooleanLiteral'\n        : (type === NilLiteral) ? 'NilLiteral'\n        : 'VarargLiteral';\n\n      return {\n          type: type\n        , value: value\n        , raw: raw\n      };\n    }\n\n    , tableKey: function(key, value) {\n      return {\n          type: 'TableKey'\n        , key: key\n        , value: value\n      };\n    }\n    , tableKeyString: function(key, value) {\n      return {\n          type: 'TableKeyString'\n        , key: key\n        , value: value\n      };\n    }\n    , tableValue: function(value) {\n      return {\n          type: 'TableValue'\n        , value: value\n      };\n    }\n\n\n    , tableConstructorExpression: function(fields) {\n      return {\n          type: 'TableConstructorExpression'\n        , fields: fields\n      };\n    }\n    , binaryExpression: function(operator, left, right) {\n      var type = ('and' === operator || 'or' === operator) ?\n        'LogicalExpression' :\n        'BinaryExpression';\n\n      return {\n          type: type\n        , operator: operator\n        , left: left\n        , right: right\n      };\n    }\n    , unaryExpression: function(operator, argument) {\n      return {\n          type: 'UnaryExpression'\n        , operator: operator\n        , argument: argument\n      };\n    }\n    , memberExpression: function(base, indexer, identifier) {\n      return {\n          type: 'MemberExpression'\n        , indexer: indexer\n        , identifier: identifier\n        , base: base\n      };\n    }\n\n    , indexExpression: function(base, index) {\n      return {\n          type: 'IndexExpression'\n        , base: base\n        , index: index\n      };\n    }\n\n    , callExpression: function(base, args) {\n      return {\n          type: 'CallExpression'\n        , base: base\n        , 'arguments': args\n      };\n    }\n\n    , tableCallExpression: function(base, args) {\n      return {\n          type: 'TableCallExpression'\n        , base: base\n        , 'arguments': args\n      };\n    }\n\n    , stringCallExpression: function(base, argument) {\n      return {\n          type: 'StringCallExpression'\n        , base: base\n        , argument: argument\n      };\n    }\n\n    , comment: function(value, raw) {\n      return {\n          type: 'Comment'\n        , value: value\n        , raw: raw\n      };\n    }\n  };\n\n  function finishNode(node) {\n    if (trackLocations) {\n      var location = locations.pop();\n      location.complete();\n      location.bless(node);\n    }\n    if (options.onCreateNode) options.onCreateNode(node);\n    return node;\n  }\n\n  var slice = Array.prototype.slice\n    , toString = Object.prototype.toString\n    ;\n\n  var indexOf = /* istanbul ignore next */ function (array, element) {\n    for (var i = 0, length = array.length; i < length; ++i) {\n      if (array[i] === element) return i;\n    }\n    return -1;\n  };\n  if (Array.prototype.indexOf)\n    indexOf = function (array, element) {\n      return array.indexOf(element);\n    };\n\n  function indexOfObject(array, property, element) {\n    for (var i = 0, length = array.length; i < length; ++i) {\n      if (array[i][property] === element) return i;\n    }\n    return -1;\n  }\n\n  function sprintf(format) {\n    var args = slice.call(arguments, 1);\n    format = format.replace(/%(\\d)/g, function (match, index) {\n      return '' + args[index - 1] || /* istanbul ignore next */ '';\n    });\n    return format;\n  }\n\n  var assign = /* istanbul ignore next */ function (dest) {\n    var args = slice.call(arguments, 1)\n      , src, prop;\n\n    for (var i = 0, length = args.length; i < length; ++i) {\n      src = args[i];\n      for (prop in src)\n        if (Object.prototype.hasOwnProperty.call(src, prop)) {\n          dest[prop] = src[prop];\n        }\n    }\n\n    return dest;\n  };\n  if (Object.assign)\n    assign = Object.assign;\n\n  exports.SyntaxError = SyntaxError;\n\n  function fixupError(e) {\n    if (!Object.create)\n      return e;\n    return Object.create(e, {\n      'line': { 'writable': true, value: e.line },\n      'index': { 'writable': true, value: e.index },\n      'column': { 'writable': true, value: e.column }\n    });\n  }\n\n  function raise(token) {\n    var message = sprintf.apply(null, slice.call(arguments, 1))\n      , error, col;\n\n    if (token === null || typeof token.line === 'undefined') {\n      col = index - lineStart + 1;\n      error = fixupError(new SyntaxError(sprintf('[%1:%2] %3', line, col, message)));\n      error.index = index;\n      error.line = line;\n      error.column = col;\n    } else {\n      col = token.range[0] - token.lineStart;\n      error = fixupError(new SyntaxError(sprintf('[%1:%2] %3', token.line, col, message)));\n      error.line = token.line;\n      error.index = token.range[0];\n      error.column = col;\n    }\n    throw error;\n  }\n\n  function tokenValue(token) {\n    var raw = input.slice(token.range[0], token.range[1]);\n    if (raw)\n      return raw;\n    return token.value;\n  }\n\n  function raiseUnexpectedToken(type, token) {\n    raise(token, errors.expectedToken, type, tokenValue(token));\n  }\n\n  function unexpected(found) {\n    var near = tokenValue(lookahead);\n    if ('undefined' !== typeof found.type) {\n      var type;\n      switch (found.type) {\n        case StringLiteral:   type = 'string';      break;\n        case Keyword:         type = 'keyword';     break;\n        case Identifier:      type = 'identifier';  break;\n        case NumericLiteral:  type = 'number';      break;\n        case Punctuator:      type = 'symbol';      break;\n        case BooleanLiteral:  type = 'boolean';     break;\n        case NilLiteral:\n          return raise(found, errors.unexpected, 'symbol', 'nil', near);\n        case EOF:\n          return raise(found, errors.unexpectedEOF);\n      }\n      return raise(found, errors.unexpected, type, tokenValue(found), near);\n    }\n    return raise(found, errors.unexpected, 'symbol', found, near);\n  }\n\n  var index\n    , token\n    , previousToken\n    , lookahead\n    , comments\n    , tokenStart\n    , line\n    , lineStart;\n\n  exports.lex = lex;\n\n  function lex() {\n    skipWhiteSpace();\n    while (45 === input.charCodeAt(index) &&\n           45 === input.charCodeAt(index + 1)) {\n      scanComment();\n      skipWhiteSpace();\n    }\n    if (index >= length) return {\n        type : EOF\n      , value: '<eof>'\n      , line: line\n      , lineStart: lineStart\n      , range: [index, index]\n    };\n\n    var charCode = input.charCodeAt(index)\n      , next = input.charCodeAt(index + 1);\n    tokenStart = index;\n    if (isIdentifierStart(charCode)) return scanIdentifierOrKeyword();\n\n    switch (charCode) {\n      case 39: case 34: // '\"\n        return scanStringLiteral();\n\n      case 48: case 49: case 50: case 51: case 52: case 53:\n      case 54: case 55: case 56: case 57: // 0-9\n        return scanNumericLiteral();\n\n      case 46: // .\n        if (isDecDigit(next)) return scanNumericLiteral();\n        if (46 === next) {\n          if (46 === input.charCodeAt(index + 2)) return scanVarargLiteral();\n          return scanPunctuator('..');\n        }\n        return scanPunctuator('.');\n\n      case 61: // =\n        if (61 === next) return scanPunctuator('==');\n        return scanPunctuator('=');\n\n      case 62: // >\n        if (features.bitwiseOperators)\n          if (62 === next) return scanPunctuator('>>');\n        if (61 === next) return scanPunctuator('>=');\n        return scanPunctuator('>');\n\n      case 60: // <\n        if (features.bitwiseOperators)\n          if (60 === next) return scanPunctuator('<<');\n        if (61 === next) return scanPunctuator('<=');\n        return scanPunctuator('<');\n\n      case 126: // ~\n        if (61 === next) return scanPunctuator('~=');\n        if (!features.bitwiseOperators)\n          break;\n        return scanPunctuator('~');\n\n      case 58: // :\n        if (features.labels)\n          if (58 === next) return scanPunctuator('::');\n        return scanPunctuator(':');\n\n      case 91: // [\n        if (91 === next || 61 === next) return scanLongStringLiteral();\n        return scanPunctuator('[');\n\n      case 47: // /\n        if (features.integerDivision)\n          if (47 === next) return scanPunctuator('//');\n        return scanPunctuator('/');\n\n      case 38: case 124: // & |\n        if (!features.bitwiseOperators)\n          break;\n      case 42: case 94: case 37: case 44: case 123: case 125:\n      case 93: case 40: case 41: case 59: case 35: case 45:\n      case 43: // * ^ % , { } ] ( ) ; # - +\n        return scanPunctuator(input.charAt(index));\n    }\n\n    return unexpected(input.charAt(index));\n  }\n\n  function consumeEOL() {\n    var charCode = input.charCodeAt(index)\n      , peekCharCode = input.charCodeAt(index + 1);\n\n    if (isLineTerminator(charCode)) {\n      if (10 === charCode && 13 === peekCharCode) ++index;\n      if (13 === charCode && 10 === peekCharCode) ++index;\n      ++line;\n      lineStart = ++index;\n\n      return true;\n    }\n    return false;\n  }\n\n  function skipWhiteSpace() {\n    while (index < length) {\n      var charCode = input.charCodeAt(index);\n      if (isWhiteSpace(charCode)) {\n        ++index;\n      } else if (!consumeEOL()) {\n        break;\n      }\n    }\n  }\n\n  function scanIdentifierOrKeyword() {\n    var value, type;\n    while (isIdentifierPart(input.charCodeAt(++index)));\n    value = encodingMode.fixup(input.slice(tokenStart, index));\n    if (isKeyword(value)) {\n      type = Keyword;\n    } else if ('true' === value || 'false' === value) {\n      type = BooleanLiteral;\n      value = ('true' === value);\n    } else if ('nil' === value) {\n      type = NilLiteral;\n      value = null;\n    } else {\n      type = Identifier;\n    }\n\n    return {\n        type: type\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanPunctuator(value) {\n    index += value.length;\n    return {\n        type: Punctuator\n      , value: value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanVarargLiteral() {\n    index += 3;\n    return {\n        type: VarargLiteral\n      , value: '...'\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanStringLiteral() {\n    var delimiter = input.charCodeAt(index++)\n      , beginLine = line\n      , beginLineStart = lineStart\n      , stringStart = index\n      , string = encodingMode.discardStrings ? null : ''\n      , charCode;\n\n    for (;;) {\n      charCode = input.charCodeAt(index++);\n      if (delimiter === charCode) break;\n      if (index > length || isLineTerminator(charCode)) {\n        string += input.slice(stringStart, index - 1);\n        raise(null, errors.unfinishedString, input.slice(tokenStart, index - 1));\n      }\n      if (92 === charCode) { // backslash\n        if (!encodingMode.discardStrings) {\n          var beforeEscape = input.slice(stringStart, index - 1);\n          string += encodingMode.fixup(beforeEscape);\n        }\n        var escapeValue = readEscapeSequence();\n        if (!encodingMode.discardStrings)\n          string += escapeValue;\n        stringStart = index;\n      }\n    }\n    if (!encodingMode.discardStrings) {\n      string += encodingMode.encodeByte(null);\n      string += encodingMode.fixup(input.slice(stringStart, index - 1));\n    }\n\n    return {\n        type: StringLiteral\n      , value: string\n      , line: beginLine\n      , lineStart: beginLineStart\n      , lastLine: line\n      , lastLineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanLongStringLiteral() {\n    var beginLine = line\n      , beginLineStart = lineStart\n      , string = readLongString(false);\n    if (false === string) raise(token, errors.expected, '[', tokenValue(token));\n\n    return {\n        type: StringLiteral\n      , value: encodingMode.discardStrings ? null : encodingMode.fixup(string)\n      , line: beginLine\n      , lineStart: beginLineStart\n      , lastLine: line\n      , lastLineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function scanNumericLiteral() {\n    var character = input.charAt(index)\n      , next = input.charAt(index + 1);\n\n    var literal = ('0' === character && 'xX'.indexOf(next || null) >= 0) ?\n      readHexLiteral() : readDecLiteral();\n\n    var foundImaginaryUnit = readImaginaryUnitSuffix()\n      , foundInt64Suffix = readInt64Suffix();\n\n    if (foundInt64Suffix && (foundImaginaryUnit || literal.hasFractionPart)) {\n      raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n    }\n\n    return {\n        type: NumericLiteral\n      , value: literal.value\n      , line: line\n      , lineStart: lineStart\n      , range: [tokenStart, index]\n    };\n  }\n\n  function readImaginaryUnitSuffix() {\n    if (!features.imaginaryNumbers) return;\n    if ('iI'.indexOf(input.charAt(index) || null) >= 0) {\n      ++index;\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  function readInt64Suffix() {\n    if (!features.integerSuffixes) return;\n\n    if ('uU'.indexOf(input.charAt(index) || null) >= 0) {\n      ++index;\n      if ('lL'.indexOf(input.charAt(index) || null) >= 0) {\n        ++index;\n        if ('lL'.indexOf(input.charAt(index) || null) >= 0) {\n          ++index;\n          return 'ULL';\n        } else {\n          raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n        }\n      } else {\n        raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n      }\n    } else if ('lL'.indexOf(input.charAt(index) || null) >= 0) {\n        ++index;\n        if ('lL'.indexOf(input.charAt(index) || null) >= 0) {\n          ++index;\n          return 'LL';\n        } else {\n          raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n        }\n    }\n  }\n\n  function readHexLiteral() {\n    var fraction = 0 // defaults to 0 as it gets summed\n      , binaryExponent = 1 // defaults to 1 as it gets multiplied\n      , binarySign = 1 // positive\n      , digit, fractionStart, exponentStart, digitStart;\n\n    digitStart = index += 2; // Skip 0x part\n    if (!isHexDigit(input.charCodeAt(index)))\n      raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n\n    while (isHexDigit(input.charCodeAt(index))) ++index;\n    digit = parseInt(input.slice(digitStart, index), 16);\n    var foundFraction = false;\n    if ('.' === input.charAt(index)) {\n      foundFraction = true;\n      fractionStart = ++index;\n\n      while (isHexDigit(input.charCodeAt(index))) ++index;\n      fraction = input.slice(fractionStart, index);\n      fraction = (fractionStart === index) ? 0\n        : parseInt(fraction, 16) / Math.pow(16, index - fractionStart);\n    }\n    var foundBinaryExponent = false;\n    if ('pP'.indexOf(input.charAt(index) || null) >= 0) {\n      foundBinaryExponent = true;\n      ++index;\n      if ('+-'.indexOf(input.charAt(index) || null) >= 0)\n        binarySign = ('+' === input.charAt(index++)) ? 1 : -1;\n\n      exponentStart = index;\n      if (!isDecDigit(input.charCodeAt(index)))\n        raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n\n      while (isDecDigit(input.charCodeAt(index))) ++index;\n      binaryExponent = input.slice(exponentStart, index);\n      binaryExponent = Math.pow(2, binaryExponent * binarySign);\n    }\n\n    return {\n      value: (digit + fraction) * binaryExponent,\n      hasFractionPart: foundFraction || foundBinaryExponent\n    };\n  }\n\n  function readDecLiteral() {\n    while (isDecDigit(input.charCodeAt(index))) ++index;\n    var foundFraction = false;\n    if ('.' === input.charAt(index)) {\n      foundFraction = true;\n      ++index;\n      while (isDecDigit(input.charCodeAt(index))) ++index;\n    }\n    var foundExponent = false;\n    if ('eE'.indexOf(input.charAt(index) || null) >= 0) {\n      foundExponent = true;\n      ++index;\n      if ('+-'.indexOf(input.charAt(index) || null) >= 0) ++index;\n      if (!isDecDigit(input.charCodeAt(index)))\n        raise(null, errors.malformedNumber, input.slice(tokenStart, index));\n\n      while (isDecDigit(input.charCodeAt(index))) ++index;\n    }\n\n    return {\n      value: parseFloat(input.slice(tokenStart, index)),\n      hasFractionPart: foundFraction || foundExponent\n    };\n  }\n\n  function readUnicodeEscapeSequence() {\n    var sequenceStart = index++;\n\n    if (input.charAt(index++) !== '{')\n      raise(null, errors.braceExpected, '{', '\\\\' + input.slice(sequenceStart, index));\n    if (!isHexDigit(input.charCodeAt(index)))\n      raise(null, errors.hexadecimalDigitExpected, '\\\\' + input.slice(sequenceStart, index));\n\n    while (input.charCodeAt(index) === 0x30) ++index;\n    var escStart = index;\n\n    while (isHexDigit(input.charCodeAt(index))) {\n      ++index;\n      if (index - escStart > 6)\n        raise(null, errors.tooLargeCodepoint, '\\\\' + input.slice(sequenceStart, index));\n    }\n\n    var b = input.charAt(index++);\n    if (b !== '}') {\n      if ((b === '\"') || (b === \"'\"))\n        raise(null, errors.braceExpected, '}', '\\\\' + input.slice(sequenceStart, index--));\n      else\n        raise(null, errors.hexadecimalDigitExpected, '\\\\' + input.slice(sequenceStart, index));\n    }\n\n    var codepoint = parseInt(input.slice(escStart, index - 1) || '0', 16);\n    var frag = '\\\\' + input.slice(sequenceStart, index);\n\n    if (codepoint > 0x10ffff) {\n      raise(null, errors.tooLargeCodepoint, frag);\n    }\n\n    return encodingMode.encodeUTF8(codepoint, frag);\n  }\n  function readEscapeSequence() {\n    var sequenceStart = index;\n    switch (input.charAt(index)) {\n      case 'a': ++index; return '\\x07';\n      case 'n': ++index; return '\\n';\n      case 'r': ++index; return '\\r';\n      case 't': ++index; return '\\t';\n      case 'v': ++index; return '\\x0b';\n      case 'b': ++index; return '\\b';\n      case 'f': ++index; return '\\f';\n      case '\\r':\n      case '\\n':\n        consumeEOL();\n        return '\\n';\n\n      case '0': case '1': case '2': case '3': case '4':\n      case '5': case '6': case '7': case '8': case '9':\n        while (isDecDigit(input.charCodeAt(index)) && index - sequenceStart < 3) ++index;\n\n        var frag = input.slice(sequenceStart, index);\n        var ddd = parseInt(frag, 10);\n        if (ddd > 255) {\n          raise(null, errors.decimalEscapeTooLarge, '\\\\' + ddd);\n        }\n        return encodingMode.encodeByte(ddd, '\\\\' + frag);\n\n      case 'z':\n        if (features.skipWhitespaceEscape) {\n          ++index;\n          skipWhiteSpace();\n          return '';\n        }\n        break;\n\n      case 'x':\n        if (features.hexEscapes) {\n          if (isHexDigit(input.charCodeAt(index + 1)) &&\n              isHexDigit(input.charCodeAt(index + 2))) {\n            index += 3;\n            return encodingMode.encodeByte(parseInt(input.slice(sequenceStart + 1, index), 16), '\\\\' + input.slice(sequenceStart, index));\n          }\n          raise(null, errors.hexadecimalDigitExpected, '\\\\' + input.slice(sequenceStart, index + 2));\n        }\n        break;\n\n      case 'u':\n        if (features.unicodeEscapes)\n          return readUnicodeEscapeSequence();\n        break;\n\n      case '\\\\': case '\"': case \"'\":\n        return input.charAt(index++);\n    }\n\n    if (features.strictEscapes)\n      raise(null, errors.invalidEscape, '\\\\' + input.slice(sequenceStart, index + 1));\n    return input.charAt(index++);\n  }\n\n  function scanComment() {\n    tokenStart = index;\n    index += 2; // --\n\n    var character = input.charAt(index)\n      , content = ''\n      , isLong = false\n      , commentStart = index\n      , lineStartComment = lineStart\n      , lineComment = line;\n\n    if ('[' === character) {\n      content = readLongString(true);\n      if (false === content) content = character;\n      else isLong = true;\n    }\n    if (!isLong) {\n      while (index < length) {\n        if (isLineTerminator(input.charCodeAt(index))) break;\n        ++index;\n      }\n      if (options.comments) content = input.slice(commentStart, index);\n    }\n\n    if (options.comments) {\n      var node = ast.comment(content, input.slice(tokenStart, index));\n      if (options.locations) {\n        node.loc = {\n            start: { line: lineComment, column: tokenStart - lineStartComment }\n          , end: { line: line, column: index - lineStart }\n        };\n      }\n      if (options.ranges) {\n        node.range = [tokenStart, index];\n      }\n      if (options.onCreateNode) options.onCreateNode(node);\n      comments.push(node);\n    }\n  }\n\n  function readLongString(isComment) {\n    var level = 0\n      , content = ''\n      , terminator = false\n      , character, stringStart, firstLine = line;\n\n    ++index; // [\n    while ('=' === input.charAt(index + level)) ++level;\n    if ('[' !== input.charAt(index + level)) return false;\n\n    index += level + 1;\n    if (isLineTerminator(input.charCodeAt(index))) consumeEOL();\n\n    stringStart = index;\n    while (index < length) {\n      while (isLineTerminator(input.charCodeAt(index))) consumeEOL();\n\n      character = input.charAt(index++);\n      if (']' === character) {\n        terminator = true;\n        for (var i = 0; i < level; ++i) {\n          if ('=' !== input.charAt(index + i)) terminator = false;\n        }\n        if (']' !== input.charAt(index + level)) terminator = false;\n      }\n      if (terminator) {\n        content += input.slice(stringStart, index - 1);\n        index += level + 1;\n        return content;\n      }\n    }\n\n    raise(null, isComment ?\n                errors.unfinishedLongComment :\n                errors.unfinishedLongString,\n          firstLine, '<eof>');\n  }\n\n  function next() {\n    previousToken = token;\n    token = lookahead;\n    lookahead = lex();\n  }\n\n  function consume(value) {\n    if (value === token.value) {\n      next();\n      return true;\n    }\n    return false;\n  }\n\n  function expect(value) {\n    if (value === token.value) next();\n    else raise(token, errors.expected, value, tokenValue(token));\n  }\n\n  function isWhiteSpace(charCode) {\n    return 9 === charCode || 32 === charCode || 0xB === charCode || 0xC === charCode;\n  }\n\n  function isLineTerminator(charCode) {\n    return 10 === charCode || 13 === charCode;\n  }\n\n  function isDecDigit(charCode) {\n    return charCode >= 48 && charCode <= 57;\n  }\n\n  function isHexDigit(charCode) {\n    return (charCode >= 48 && charCode <= 57) || (charCode >= 97 && charCode <= 102) || (charCode >= 65 && charCode <= 70);\n  }\n\n  function isIdentifierStart(charCode) {\n    if ((charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || 95 === charCode)\n      return true;\n    if (features.extendedIdentifiers && charCode >= 128)\n      return true;\n    return false;\n  }\n\n  function isIdentifierPart(charCode) {\n    if ((charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || 95 === charCode || (charCode >= 48 && charCode <= 57))\n      return true;\n    if (features.extendedIdentifiers && charCode >= 128)\n      return true;\n    return false;\n  }\n\n  function isKeyword(id) {\n    switch (id.length) {\n      case 2:\n        return 'do' === id || 'if' === id || 'in' === id || 'or' === id;\n      case 3:\n        return 'and' === id || 'end' === id || 'for' === id || 'not' === id;\n      case 4:\n        if ('else' === id || 'then' === id)\n          return true;\n        if (features.labels && !features.contextualGoto)\n          return ('goto' === id);\n        return false;\n      case 5:\n        return 'break' === id || 'local' === id || 'until' === id || 'while' === id;\n      case 6:\n        return 'elseif' === id || 'repeat' === id || 'return' === id;\n      case 8:\n        return 'function' === id;\n    }\n    return false;\n  }\n\n  function isUnary(token) {\n    if (Punctuator === token.type) return '#-~'.indexOf(token.value) >= 0;\n    if (Keyword === token.type) return 'not' === token.value;\n    return false;\n  }\n\n  function isBlockFollow(token) {\n    if (EOF === token.type) return true;\n    if (Keyword !== token.type) return false;\n    switch (token.value) {\n      case 'else': case 'elseif':\n      case 'end': case 'until':\n        return true;\n      default:\n        return false;\n    }\n  }\n  var scopes\n    , scopeDepth\n    , globals;\n  function createScope() {\n    var scope = scopes[scopeDepth++].slice();\n    scopes.push(scope);\n    if (options.onCreateScope) options.onCreateScope();\n  }\n  function destroyScope() {\n    var scope = scopes.pop();\n    --scopeDepth;\n    if (options.onDestroyScope) options.onDestroyScope();\n  }\n  function scopeIdentifierName(name) {\n    if (options.onLocalDeclaration) options.onLocalDeclaration(name);\n    if (-1 !== indexOf(scopes[scopeDepth], name)) return;\n    scopes[scopeDepth].push(name);\n  }\n  function scopeIdentifier(node) {\n    scopeIdentifierName(node.name);\n    attachScope(node, true);\n  }\n  function attachScope(node, isLocal) {\n    if (!isLocal && -1 === indexOfObject(globals, 'name', node.name))\n      globals.push(node);\n\n    node.isLocal = isLocal;\n  }\n  function scopeHasName(name) {\n    return (-1 !== indexOf(scopes[scopeDepth], name));\n  }\n\n  var locations = []\n    , trackLocations;\n\n  function createLocationMarker() {\n    return new Marker(token);\n  }\n\n  function Marker(token) {\n    if (options.locations) {\n      this.loc = {\n          start: {\n            line: token.line\n          , column: token.range[0] - token.lineStart\n        }\n        , end: {\n            line: 0\n          , column: 0\n        }\n      };\n    }\n    if (options.ranges) this.range = [token.range[0], 0];\n  }\n  Marker.prototype.complete = function() {\n    if (options.locations) {\n      this.loc.end.line = previousToken.lastLine || previousToken.line;\n      this.loc.end.column = previousToken.range[1] - (previousToken.lastLineStart || previousToken.lineStart);\n    }\n    if (options.ranges) {\n      this.range[1] = previousToken.range[1];\n    }\n  };\n\n  Marker.prototype.bless = function (node) {\n    if (this.loc) {\n      var loc = this.loc;\n      node.loc = {\n        start: {\n          line: loc.start.line,\n          column: loc.start.column\n        },\n        end: {\n          line: loc.end.line,\n          column: loc.end.column\n        }\n      };\n    }\n    if (this.range) {\n      node.range = [\n        this.range[0],\n        this.range[1]\n      ];\n    }\n  };\n  function markLocation() {\n    if (trackLocations) locations.push(createLocationMarker());\n  }\n  function pushLocation(marker) {\n    if (trackLocations) locations.push(marker);\n  }\n\n  function FullFlowContext() {\n    this.scopes = [];\n    this.pendingGotos = [];\n  }\n\n  FullFlowContext.prototype.isInLoop = function () {\n    var i = this.scopes.length;\n    while (i --> 0) {\n      if (this.scopes[i].isLoop)\n        return true;\n    }\n    return false;\n  };\n\n  FullFlowContext.prototype.pushScope = function (isLoop) {\n    var scope = {\n      labels: {},\n      locals: [],\n      deferredGotos: [],\n      isLoop: !!isLoop\n    };\n    this.scopes.push(scope);\n  };\n\n  FullFlowContext.prototype.popScope = function () {\n    for (var i = 0; i < this.pendingGotos.length; ++i) {\n      var theGoto = this.pendingGotos[i];\n      if (theGoto.maxDepth >= this.scopes.length)\n        if (--theGoto.maxDepth <= 0)\n          raise(theGoto.token, errors.labelNotVisible, theGoto.target);\n    }\n\n    this.scopes.pop();\n  };\n\n  FullFlowContext.prototype.addGoto = function (target, token) {\n    var localCounts = [];\n\n    for (var i = 0; i < this.scopes.length; ++i) {\n      var scope = this.scopes[i];\n      localCounts.push(scope.locals.length);\n      if (Object.prototype.hasOwnProperty.call(scope.labels, target))\n        return;\n    }\n\n    this.pendingGotos.push({\n      maxDepth: this.scopes.length,\n      target: target,\n      token: token,\n      localCounts: localCounts\n    });\n  };\n\n  FullFlowContext.prototype.addLabel = function (name, token) {\n    var scope = this.currentScope();\n\n    if (Object.prototype.hasOwnProperty.call(scope.labels, name)) {\n      raise(token, errors.labelAlreadyDefined, name, scope.labels[name].line);\n    } else {\n      var newGotos = [];\n\n      for (var i = 0; i < this.pendingGotos.length; ++i) {\n        var theGoto = this.pendingGotos[i];\n\n        if (theGoto.maxDepth >= this.scopes.length && theGoto.target === name) {\n          if (theGoto.localCounts[this.scopes.length - 1] < scope.locals.length) {\n            scope.deferredGotos.push(theGoto);\n          }\n          continue;\n        }\n\n        newGotos.push(theGoto);\n      }\n\n      this.pendingGotos = newGotos;\n    }\n\n    scope.labels[name] = {\n      localCount: scope.locals.length,\n      line: token.line\n    };\n  };\n\n  FullFlowContext.prototype.addLocal = function (name, token) {\n    this.currentScope().locals.push({\n      name: name,\n      token: token\n    });\n  };\n\n  FullFlowContext.prototype.currentScope = function () {\n    return this.scopes[this.scopes.length - 1];\n  };\n\n  FullFlowContext.prototype.raiseDeferredErrors = function () {\n    var scope = this.currentScope();\n    var bads = scope.deferredGotos;\n    for (var i = 0; i < bads.length; ++i) {\n      var theGoto = bads[i];\n      raise(theGoto.token, errors.gotoJumpInLocalScope, theGoto.target, scope.locals[theGoto.localCounts[this.scopes.length - 1]].name);\n    }\n  };\n\n  function LoopFlowContext() {\n    this.level = 0;\n    this.loopLevels = [];\n  }\n\n  LoopFlowContext.prototype.isInLoop = function () {\n    return !!this.loopLevels.length;\n  };\n\n  LoopFlowContext.prototype.pushScope = function (isLoop) {\n    ++this.level;\n    if (isLoop)\n      this.loopLevels.push(this.level);\n  };\n\n  LoopFlowContext.prototype.popScope = function () {\n    var levels = this.loopLevels;\n    var levlen = levels.length;\n    if (levlen) {\n      if (levels[levlen - 1] === this.level)\n        levels.pop();\n    }\n    --this.level;\n  };\n\n  LoopFlowContext.prototype.addGoto =\n  LoopFlowContext.prototype.addLabel =\n  function () { throw new Error('This should never happen'); };\n\n  LoopFlowContext.prototype.addLocal =\n  LoopFlowContext.prototype.raiseDeferredErrors =\n  function () {};\n\n  function makeFlowContext() {\n    return features.labels ? new FullFlowContext() : new LoopFlowContext();\n  }\n\n  function parseChunk() {\n    next();\n    markLocation();\n    if (options.scope) createScope();\n    var flowContext = makeFlowContext();\n    flowContext.allowVararg = true;\n    flowContext.pushScope();\n    var body = parseBlock(flowContext);\n    flowContext.popScope();\n    if (options.scope) destroyScope();\n    if (EOF !== token.type) unexpected(token);\n    if (trackLocations && !body.length) previousToken = token;\n    return finishNode(ast.chunk(body));\n  }\n\n  function parseBlock(flowContext) {\n    var block = []\n      , statement;\n\n    while (!isBlockFollow(token)) {\n      if ('return' === token.value || (!features.relaxedBreak && 'break' === token.value)) {\n        block.push(parseStatement(flowContext));\n        break;\n      }\n      statement = parseStatement(flowContext);\n      consume(';');\n      if (statement) block.push(statement);\n    }\n    return block;\n  }\n\n  function parseStatement(flowContext) {\n    markLocation();\n\n    if (Punctuator === token.type) {\n      if (consume('::')) return parseLabelStatement(flowContext);\n    }\n    if (features.emptyStatement) {\n      if (consume(';')) {\n        if (trackLocations) locations.pop();\n        return;\n      }\n    }\n\n    flowContext.raiseDeferredErrors();\n\n    if (Keyword === token.type) {\n      switch (token.value) {\n        case 'local':    next(); return parseLocalStatement(flowContext);\n        case 'if':       next(); return parseIfStatement(flowContext);\n        case 'return':   next(); return parseReturnStatement(flowContext);\n        case 'function': next();\n          var name = parseFunctionName();\n          return parseFunctionDeclaration(name);\n        case 'while':    next(); return parseWhileStatement(flowContext);\n        case 'for':      next(); return parseForStatement(flowContext);\n        case 'repeat':   next(); return parseRepeatStatement(flowContext);\n        case 'break':    next();\n          if (!flowContext.isInLoop())\n            raise(token, errors.noLoopToBreak, token.value);\n          return parseBreakStatement();\n        case 'do':       next(); return parseDoStatement(flowContext);\n        case 'goto':     next(); return parseGotoStatement(flowContext);\n      }\n    }\n\n    if (features.contextualGoto &&\n        token.type === Identifier && token.value === 'goto' &&\n        lookahead.type === Identifier && lookahead.value !== 'goto') {\n      next(); return parseGotoStatement(flowContext);\n    }\n    if (trackLocations) locations.pop();\n\n    return parseAssignmentOrCallStatement(flowContext);\n  }\n\n  function parseLabelStatement(flowContext) {\n    var nameToken = token\n      , label = parseIdentifier();\n\n    if (options.scope) {\n      scopeIdentifierName('::' + nameToken.value + '::');\n      attachScope(label, true);\n    }\n\n    expect('::');\n\n    flowContext.addLabel(nameToken.value, nameToken);\n    return finishNode(ast.labelStatement(label));\n  }\n\n  function parseBreakStatement() {\n    return finishNode(ast.breakStatement());\n  }\n\n  function parseGotoStatement(flowContext) {\n    var name = token.value\n      , gotoToken = previousToken\n      , label = parseIdentifier();\n\n    flowContext.addGoto(name, gotoToken);\n    return finishNode(ast.gotoStatement(label));\n  }\n\n  function parseDoStatement(flowContext) {\n    if (options.scope) createScope();\n    flowContext.pushScope();\n    var body = parseBlock(flowContext);\n    flowContext.popScope();\n    if (options.scope) destroyScope();\n    expect('end');\n    return finishNode(ast.doStatement(body));\n  }\n\n  function parseWhileStatement(flowContext) {\n    var condition = parseExpectedExpression(flowContext);\n    expect('do');\n    if (options.scope) createScope();\n    flowContext.pushScope(true);\n    var body = parseBlock(flowContext);\n    flowContext.popScope();\n    if (options.scope) destroyScope();\n    expect('end');\n    return finishNode(ast.whileStatement(condition, body));\n  }\n\n  function parseRepeatStatement(flowContext) {\n    if (options.scope) createScope();\n    flowContext.pushScope(true);\n    var body = parseBlock(flowContext);\n    expect('until');\n    flowContext.raiseDeferredErrors();\n    var condition = parseExpectedExpression(flowContext);\n    flowContext.popScope();\n    if (options.scope) destroyScope();\n    return finishNode(ast.repeatStatement(condition, body));\n  }\n\n  function parseReturnStatement(flowContext) {\n    var expressions = [];\n\n    if ('end' !== token.value) {\n      var expression = parseExpression(flowContext);\n      if (null != expression) expressions.push(expression);\n      while (consume(',')) {\n        expression = parseExpectedExpression(flowContext);\n        expressions.push(expression);\n      }\n      consume(';'); // grammar tells us ; is optional here.\n    }\n    return finishNode(ast.returnStatement(expressions));\n  }\n\n  function parseIfStatement(flowContext) {\n    var clauses = []\n      , condition\n      , body\n      , marker;\n    if (trackLocations) {\n      marker = locations[locations.length - 1];\n      locations.push(marker);\n    }\n    condition = parseExpectedExpression(flowContext);\n    expect('then');\n    if (options.scope) createScope();\n    flowContext.pushScope();\n    body = parseBlock(flowContext);\n    flowContext.popScope();\n    if (options.scope) destroyScope();\n    clauses.push(finishNode(ast.ifClause(condition, body)));\n\n    if (trackLocations) marker = createLocationMarker();\n    while (consume('elseif')) {\n      pushLocation(marker);\n      condition = parseExpectedExpression(flowContext);\n      expect('then');\n      if (options.scope) createScope();\n      flowContext.pushScope();\n      body = parseBlock(flowContext);\n      flowContext.popScope();\n      if (options.scope) destroyScope();\n      clauses.push(finishNode(ast.elseifClause(condition, body)));\n      if (trackLocations) marker = createLocationMarker();\n    }\n\n    if (consume('else')) {\n      if (trackLocations) {\n        marker = new Marker(previousToken);\n        locations.push(marker);\n      }\n      if (options.scope) createScope();\n      flowContext.pushScope();\n      body = parseBlock(flowContext);\n      flowContext.popScope();\n      if (options.scope) destroyScope();\n      clauses.push(finishNode(ast.elseClause(body)));\n    }\n\n    expect('end');\n    return finishNode(ast.ifStatement(clauses));\n  }\n\n  function parseForStatement(flowContext) {\n    var variable = parseIdentifier()\n      , body;\n\n    if (options.scope) {\n      createScope();\n      scopeIdentifier(variable);\n    }\n    if (consume('=')) {\n      var start = parseExpectedExpression(flowContext);\n      expect(',');\n      var end = parseExpectedExpression(flowContext);\n      var step = consume(',') ? parseExpectedExpression(flowContext) : null;\n\n      expect('do');\n      flowContext.pushScope(true);\n      body = parseBlock(flowContext);\n      flowContext.popScope();\n      expect('end');\n      if (options.scope) destroyScope();\n\n      return finishNode(ast.forNumericStatement(variable, start, end, step, body));\n    }\n    else {\n      var variables = [variable];\n      while (consume(',')) {\n        variable = parseIdentifier();\n        if (options.scope) scopeIdentifier(variable);\n        variables.push(variable);\n      }\n      expect('in');\n      var iterators = [];\n      do {\n        var expression = parseExpectedExpression(flowContext);\n        iterators.push(expression);\n      } while (consume(','));\n\n      expect('do');\n      flowContext.pushScope(true);\n      body = parseBlock(flowContext);\n      flowContext.popScope();\n      expect('end');\n      if (options.scope) destroyScope();\n\n      return finishNode(ast.forGenericStatement(variables, iterators, body));\n    }\n  }\n\n  function parseLocalStatement(flowContext) {\n    var name\n      , declToken = previousToken;\n\n    if (Identifier === token.type) {\n      var variables = []\n        , init = [];\n\n      do {\n        name = parseIdentifier();\n\n        variables.push(name);\n        flowContext.addLocal(name.name, declToken);\n      } while (consume(','));\n\n      if (consume('=')) {\n        do {\n          var expression = parseExpectedExpression(flowContext);\n          init.push(expression);\n        } while (consume(','));\n      }\n      if (options.scope) {\n        for (var i = 0, l = variables.length; i < l; ++i) {\n          scopeIdentifier(variables[i]);\n        }\n      }\n\n      return finishNode(ast.localStatement(variables, init));\n    }\n    if (consume('function')) {\n      name = parseIdentifier();\n      flowContext.addLocal(name.name, declToken);\n\n      if (options.scope) {\n        scopeIdentifier(name);\n        createScope();\n      }\n      return parseFunctionDeclaration(name, true);\n    } else {\n      raiseUnexpectedToken('<name>', token);\n    }\n  }\n\n  function parseAssignmentOrCallStatement(flowContext) {\n    var previous = token\n      , marker, startMarker;\n    var lvalue, base, name;\n\n    var targets = [];\n\n    if (trackLocations) startMarker = createLocationMarker();\n\n    do {\n      if (trackLocations) marker = createLocationMarker();\n\n      if (Identifier === token.type) {\n        name = token.value;\n        base = parseIdentifier();\n        if (options.scope) attachScope(base, scopeHasName(name));\n        lvalue = true;\n      } else if ('(' === token.value) {\n        next();\n        base = parseExpectedExpression(flowContext);\n        expect(')');\n        lvalue = false;\n      } else {\n        return unexpected(token);\n      }\n\n      both: for (;;) {\n        var newBase;\n\n        switch (StringLiteral === token.type ? '\"' : token.value) {\n        case '.':\n        case '[':\n          lvalue = true;\n          break;\n        case ':':\n        case '(':\n        case '{':\n        case '\"':\n          lvalue = null;\n          break;\n        default:\n          break both;\n        }\n\n        base = parsePrefixExpressionPart(base, marker, flowContext);\n      }\n\n      targets.push(base);\n\n      if (',' !== token.value)\n        break;\n\n      if (!lvalue) {\n        return unexpected(token);\n      }\n\n      next();\n    } while (true);\n\n    if (targets.length === 1 && lvalue === null) {\n      pushLocation(marker);\n      return finishNode(ast.callStatement(targets[0]));\n    } else if (!lvalue) {\n      return unexpected(token);\n    }\n\n    expect('=');\n\n    var values = [];\n\n    do {\n      values.push(parseExpectedExpression(flowContext));\n    } while (consume(','));\n\n    pushLocation(startMarker);\n    return finishNode(ast.assignmentStatement(targets, values));\n  }\n\n  function parseIdentifier() {\n    markLocation();\n    var identifier = token.value;\n    if (Identifier !== token.type) raiseUnexpectedToken('<name>', token);\n    next();\n    return finishNode(ast.identifier(identifier));\n  }\n\n  function parseFunctionDeclaration(name, isLocal) {\n    var flowContext = makeFlowContext();\n    flowContext.pushScope();\n\n    var parameters = [];\n    expect('(');\n    if (!consume(')')) {\n      while (true) {\n        if (Identifier === token.type) {\n          var parameter = parseIdentifier();\n          if (options.scope) scopeIdentifier(parameter);\n\n          parameters.push(parameter);\n\n          if (consume(',')) continue;\n        }\n        else if (VarargLiteral === token.type) {\n          flowContext.allowVararg = true;\n          parameters.push(parsePrimaryExpression(flowContext));\n        } else {\n          raiseUnexpectedToken('<name> or \\'...\\'', token);\n        }\n        expect(')');\n        break;\n      }\n    }\n\n    var body = parseBlock(flowContext);\n    flowContext.popScope();\n    expect('end');\n    if (options.scope) destroyScope();\n\n    isLocal = isLocal || false;\n    return finishNode(ast.functionStatement(name, parameters, isLocal, body));\n  }\n\n  function parseFunctionName() {\n    var base, name, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    base = parseIdentifier();\n\n    if (options.scope) {\n      attachScope(base, scopeHasName(base.name));\n      createScope();\n    }\n\n    while (consume('.')) {\n      pushLocation(marker);\n      name = parseIdentifier();\n      base = finishNode(ast.memberExpression(base, '.', name));\n    }\n\n    if (consume(':')) {\n      pushLocation(marker);\n      name = parseIdentifier();\n      base = finishNode(ast.memberExpression(base, ':', name));\n      if (options.scope) scopeIdentifierName('self');\n    }\n\n    return base;\n  }\n\n  function parseTableConstructor(flowContext) {\n    var fields = []\n      , key, value;\n\n    while (true) {\n      markLocation();\n      if (Punctuator === token.type && consume('[')) {\n        key = parseExpectedExpression(flowContext);\n        expect(']');\n        expect('=');\n        value = parseExpectedExpression(flowContext);\n        fields.push(finishNode(ast.tableKey(key, value)));\n      } else if (Identifier === token.type) {\n        if ('=' === lookahead.value) {\n          key = parseIdentifier();\n          next();\n          value = parseExpectedExpression(flowContext);\n          fields.push(finishNode(ast.tableKeyString(key, value)));\n        } else {\n          value = parseExpectedExpression(flowContext);\n          fields.push(finishNode(ast.tableValue(value)));\n        }\n      } else {\n        if (null == (value = parseExpression(flowContext))) {\n          locations.pop();\n          break;\n        }\n        fields.push(finishNode(ast.tableValue(value)));\n      }\n      if (',;'.indexOf(token.value) >= 0) {\n        next();\n        continue;\n      }\n      break;\n    }\n    expect('}');\n    return finishNode(ast.tableConstructorExpression(fields));\n  }\n\n  function parseExpression(flowContext) {\n    var expression = parseSubExpression(0, flowContext);\n    return expression;\n  }\n\n  function parseExpectedExpression(flowContext) {\n    var expression = parseExpression(flowContext);\n    if (null == expression) raiseUnexpectedToken('<expression>', token);\n    else return expression;\n  }\n\n  function binaryPrecedence(operator) {\n    var charCode = operator.charCodeAt(0)\n      , length = operator.length;\n\n    if (1 === length) {\n      switch (charCode) {\n        case 94: return 12; // ^\n        case 42: case 47: case 37: return 10; // * / %\n        case 43: case 45: return 9; // + -\n        case 38: return 6; // &\n        case 126: return 5; // ~\n        case 124: return 4; // |\n        case 60: case 62: return 3; // < >\n      }\n    } else if (2 === length) {\n      switch (charCode) {\n        case 47: return 10; // //\n        case 46: return 8; // ..\n        case 60: case 62:\n            if('<<' === operator || '>>' === operator) return 7; // << >>\n            return 3; // <= >=\n        case 61: case 126: return 3; // == ~=\n        case 111: return 1; // or\n      }\n    } else if (97 === charCode && 'and' === operator) return 2;\n    return 0;\n  }\n\n  function parseSubExpression(minPrecedence, flowContext) {\n    var operator = token.value\n      , expression, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    if (isUnary(token)) {\n      markLocation();\n      next();\n      var argument = parseSubExpression(10, flowContext);\n      if (argument == null) raiseUnexpectedToken('<expression>', token);\n      expression = finishNode(ast.unaryExpression(operator, argument));\n    }\n    if (null == expression) {\n      expression = parsePrimaryExpression(flowContext);\n      if (null == expression) {\n        expression = parsePrefixExpression(flowContext);\n      }\n    }\n    if (null == expression) return null;\n\n    var precedence;\n    while (true) {\n      operator = token.value;\n\n      precedence = (Punctuator === token.type || Keyword === token.type) ?\n        binaryPrecedence(operator) : 0;\n\n      if (precedence === 0 || precedence <= minPrecedence) break;\n      if ('^' === operator || '..' === operator) --precedence;\n      next();\n      var right = parseSubExpression(precedence, flowContext);\n      if (null == right) raiseUnexpectedToken('<expression>', token);\n      if (trackLocations) locations.push(marker);\n      expression = finishNode(ast.binaryExpression(operator, expression, right));\n\n    }\n    return expression;\n  }\n\n  function parsePrefixExpressionPart(base, marker, flowContext) {\n    var expression, identifier;\n\n    if (Punctuator === token.type) {\n      switch (token.value) {\n        case '[':\n          pushLocation(marker);\n          next();\n          expression = parseExpectedExpression(flowContext);\n          expect(']');\n          return finishNode(ast.indexExpression(base, expression));\n        case '.':\n          pushLocation(marker);\n          next();\n          identifier = parseIdentifier();\n          return finishNode(ast.memberExpression(base, '.', identifier));\n        case ':':\n          pushLocation(marker);\n          next();\n          identifier = parseIdentifier();\n          base = finishNode(ast.memberExpression(base, ':', identifier));\n          pushLocation(marker);\n          return parseCallExpression(base, flowContext);\n        case '(': case '{': // args\n          pushLocation(marker);\n          return parseCallExpression(base, flowContext);\n      }\n    } else if (StringLiteral === token.type) {\n      pushLocation(marker);\n      return parseCallExpression(base, flowContext);\n    }\n\n    return null;\n  }\n\n  function parsePrefixExpression(flowContext) {\n    var base, name, marker;\n\n    if (trackLocations) marker = createLocationMarker();\n    if (Identifier === token.type) {\n      name = token.value;\n      base = parseIdentifier();\n      if (options.scope) attachScope(base, scopeHasName(name));\n    } else if (consume('(')) {\n      base = parseExpectedExpression(flowContext);\n      expect(')');\n    } else {\n      return null;\n    }\n    for (;;) {\n      var newBase = parsePrefixExpressionPart(base, marker, flowContext);\n      if (newBase === null)\n        break;\n      base = newBase;\n    }\n\n    return base;\n  }\n\n  function parseCallExpression(base, flowContext) {\n    if (Punctuator === token.type) {\n      switch (token.value) {\n        case '(':\n          if (!features.emptyStatement) {\n            if (token.line !== previousToken.line)\n              raise(null, errors.ambiguousSyntax, token.value);\n          }\n          next();\n          var expressions = [];\n          var expression = parseExpression(flowContext);\n          if (null != expression) expressions.push(expression);\n          while (consume(',')) {\n            expression = parseExpectedExpression(flowContext);\n            expressions.push(expression);\n          }\n\n          expect(')');\n          return finishNode(ast.callExpression(base, expressions));\n\n        case '{':\n          markLocation();\n          next();\n          var table = parseTableConstructor(flowContext);\n          return finishNode(ast.tableCallExpression(base, table));\n      }\n    } else if (StringLiteral === token.type) {\n      return finishNode(ast.stringCallExpression(base, parsePrimaryExpression(flowContext)));\n    }\n\n    raiseUnexpectedToken('function arguments', token);\n  }\n\n  function parsePrimaryExpression(flowContext) {\n    var literals = StringLiteral | NumericLiteral | BooleanLiteral | NilLiteral | VarargLiteral\n      , value = token.value\n      , type = token.type\n      , marker;\n\n    if (trackLocations) marker = createLocationMarker();\n\n    if (type === VarargLiteral && !flowContext.allowVararg) {\n      raise(token, errors.cannotUseVararg, token.value);\n    }\n\n    if (type & literals) {\n      pushLocation(marker);\n      var raw = input.slice(token.range[0], token.range[1]);\n      next();\n      return finishNode(ast.literal(type, value, raw));\n    } else if (Keyword === type && 'function' === value) {\n      pushLocation(marker);\n      next();\n      if (options.scope) createScope();\n      return parseFunctionDeclaration(null);\n    } else if (consume('{')) {\n      pushLocation(marker);\n      return parseTableConstructor(flowContext);\n    }\n  }\n\n  exports.parse = parse;\n\n  var versionFeatures = {\n    '5.1': {\n    },\n    '5.2': {\n      labels: true,\n      emptyStatement: true,\n      hexEscapes: true,\n      skipWhitespaceEscape: true,\n      strictEscapes: true,\n      relaxedBreak: true\n    },\n    '5.3': {\n      labels: true,\n      emptyStatement: true,\n      hexEscapes: true,\n      skipWhitespaceEscape: true,\n      strictEscapes: true,\n      unicodeEscapes: true,\n      bitwiseOperators: true,\n      integerDivision: true,\n      relaxedBreak: true\n    },\n    'LuaJIT': {\n      labels: true,\n      contextualGoto: true,\n      hexEscapes: true,\n      skipWhitespaceEscape: true,\n      strictEscapes: true,\n      unicodeEscapes: true,\n      imaginaryNumbers: true,\n      integerSuffixes: true\n    }\n  };\n\n  function parse(_input, _options) {\n    if ('undefined' === typeof _options && 'object' === typeof _input) {\n      _options = _input;\n      _input = undefined;\n    }\n    if (!_options) _options = {};\n\n    input = _input || '';\n    options = assign({}, defaultOptions, _options);\n    index = 0;\n    line = 1;\n    lineStart = 0;\n    length = input.length;\n    scopes = [[]];\n    scopeDepth = 0;\n    globals = [];\n    locations = [];\n\n    if (!Object.prototype.hasOwnProperty.call(versionFeatures, options.luaVersion)) {\n      throw new Error(sprintf(\"Lua version '%1' not supported\", options.luaVersion));\n    }\n\n    features = assign({}, versionFeatures[options.luaVersion]);\n    if (options.extendedIdentifiers !== void 0)\n      features.extendedIdentifiers = !!options.extendedIdentifiers;\n\n    if (!Object.prototype.hasOwnProperty.call(encodingModes, options.encodingMode)) {\n      throw new Error(sprintf(\"Encoding mode '%1' not supported\", options.encodingMode));\n    }\n\n    encodingMode = encodingModes[options.encodingMode];\n\n    if (options.comments) comments = [];\n    if (!options.wait) return end();\n    return exports;\n  }\n  exports.write = write;\n\n  function write(_input) {\n    input += String(_input);\n    length = input.length;\n    return exports;\n  }\n  exports.end = end;\n\n  function end(_input) {\n    if ('undefined' !== typeof _input) write(_input);\n    if (input && input.substr(0, 2) === '#!') input = input.replace(/^.*/, function (line) {\n      return line.replace(/./g, ' ');\n    });\n\n    length = input.length;\n    trackLocations = options.locations || options.ranges;\n    lookahead = lex();\n\n    var chunk = parseChunk();\n    if (options.comments) chunk.comments = comments;\n    if (options.scope) chunk.globals = globals;\n    if (locations.length > 0)\n      throw new Error('Location tracking failed. This is most likely a bug in luaparse');\n\n    return chunk;\n  }\n\n}));\n\n});\n\nace.define(\"ace/mode/lua_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar luaparse = require(\"../mode/lua/luaparse\");\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        try {\n            luaparse.parse(value);\n        } catch(e) {\n            if (e instanceof luaparse.SyntaxError) {\n                errors.push({\n                    row: e.line - 1,\n                    column: e.column,\n                    text: e.message,\n                    type: \"error\"\n                });\n            }\n        }\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n"
  },
  {
    "path": "publishable/assets/js/ace/libs/worker-php.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err && err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err && err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        sender = window.sender = window.initSender();\n        var clazz = this.require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function () {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    this.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    }\n    else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n    }\n    else {\n        this.insert({ row: 0, column: 0 }, textOrLines);\n    }\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    this.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function (text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    }\n    else {\n        this.$split = function (text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function () {\n        return this.$lines.length;\n    };\n    this.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    this.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    this.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    this.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    this.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    this.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    this.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    this.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    this.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    this.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    this.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\n\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                var d, err; \n                if (Array.isArray(data[i+1])) {\n                    d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                \n                if ((d.action == \"insert\" ? d.start : d.end).row >= doc.$lines.length) {\n                    err = new Error(\"Invalid delta\");\n                    err.data = {\n                        path: _self.$path,\n                        linesLength: doc.$lines.length,\n                        start: d.start,\n                        end: d.end\n                    };\n                    throw err;\n                }\n\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/php/php\",[], function (require, exports, module) {\n\n\tvar PHP = {Constants: {}};\n\n\tPHP.Constants.T_THROW = 317\n\tPHP.Constants.T_INCLUDE = 272\n\tPHP.Constants.T_INCLUDE_ONCE = 273\n\tPHP.Constants.T_EVAL = 274\n\tPHP.Constants.T_REQUIRE = 275\n\tPHP.Constants.T_REQUIRE_ONCE = 276\n\tPHP.Constants.T_LOGICAL_OR = 277\n\tPHP.Constants.T_LOGICAL_XOR = 278\n\tPHP.Constants.T_LOGICAL_AND = 279\n\tPHP.Constants.T_PRINT = 280\n\tPHP.Constants.T_YIELD = 281\n\tPHP.Constants.T_DOUBLE_ARROW = 386\n\tPHP.Constants.T_YIELD_FROM = 282\n\tPHP.Constants.T_PLUS_EQUAL = 352\n\tPHP.Constants.T_MINUS_EQUAL = 353\n\tPHP.Constants.T_MUL_EQUAL = 354\n\tPHP.Constants.T_DIV_EQUAL = 355\n\tPHP.Constants.T_CONCAT_EQUAL = 356\n\tPHP.Constants.T_MOD_EQUAL = 357\n\tPHP.Constants.T_AND_EQUAL = 358\n\tPHP.Constants.T_OR_EQUAL = 359\n\tPHP.Constants.T_XOR_EQUAL = 360\n\tPHP.Constants.T_SL_EQUAL = 361\n\tPHP.Constants.T_SR_EQUAL = 362\n\tPHP.Constants.T_POW_EQUAL = 402\n\tPHP.Constants.T_COALESCE_EQUAL = 363\n\tPHP.Constants.T_COALESCE = 400\n\tPHP.Constants.T_BOOLEAN_OR = 364\n\tPHP.Constants.T_BOOLEAN_AND = 365\n\tPHP.Constants.T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG = 404\n\tPHP.Constants.T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG = 403\n\tPHP.Constants.T_IS_EQUAL = 366\n\tPHP.Constants.T_IS_NOT_EQUAL = 367\n\tPHP.Constants.T_IS_IDENTICAL = 368\n\tPHP.Constants.T_IS_NOT_IDENTICAL = 369\n\tPHP.Constants.T_SPACESHIP = 372\n\tPHP.Constants.T_IS_SMALLER_OR_EQUAL = 370\n\tPHP.Constants.T_IS_GREATER_OR_EQUAL = 371\n\tPHP.Constants.T_SL = 373\n\tPHP.Constants.T_SR = 374\n\tPHP.Constants.T_INSTANCEOF = 283\n\tPHP.Constants.T_INC = 375\n\tPHP.Constants.T_DEC = 376\n\tPHP.Constants.T_INT_CAST = 377\n\tPHP.Constants.T_DOUBLE_CAST = 378\n\tPHP.Constants.T_STRING_CAST = 379\n\tPHP.Constants.T_ARRAY_CAST = 380\n\tPHP.Constants.T_OBJECT_CAST = 381\n\tPHP.Constants.T_BOOL_CAST = 382\n\tPHP.Constants.T_UNSET_CAST = 383\n\tPHP.Constants.T_POW = 401\n\tPHP.Constants.T_NEW = 284\n\tPHP.Constants.T_CLONE = 285\n\tPHP.Constants.T_EXIT = 286\n\tPHP.Constants.T_IF = 287\n\tPHP.Constants.T_ELSEIF = 288\n\tPHP.Constants.T_ELSE = 289\n\tPHP.Constants.T_ENDIF = 290\n\tPHP.Constants.T_LNUMBER = 260\n\tPHP.Constants.T_DNUMBER = 261\n\tPHP.Constants.T_STRING = 262\n\tPHP.Constants.T_STRING_VARNAME = 270\n\tPHP.Constants.T_VARIABLE = 266\n\tPHP.Constants.T_NUM_STRING = 271\n\tPHP.Constants.T_INLINE_HTML = 267\n\tPHP.Constants.T_ENCAPSED_AND_WHITESPACE = 268\n\tPHP.Constants.T_CONSTANT_ENCAPSED_STRING = 269\n\tPHP.Constants.T_ECHO = 291\n\tPHP.Constants.T_DO = 292\n\tPHP.Constants.T_WHILE = 293\n\tPHP.Constants.T_ENDWHILE = 294\n\tPHP.Constants.T_FOR = 295\n\tPHP.Constants.T_ENDFOR = 296\n\tPHP.Constants.T_FOREACH = 297\n\tPHP.Constants.T_ENDFOREACH = 298\n\tPHP.Constants.T_DECLARE = 299\n\tPHP.Constants.T_ENDDECLARE = 300\n\tPHP.Constants.T_AS = 301\n\tPHP.Constants.T_SWITCH = 302\n\tPHP.Constants.T_MATCH = 306\n\tPHP.Constants.T_ENDSWITCH = 303\n\tPHP.Constants.T_CASE = 304\n\tPHP.Constants.T_DEFAULT = 305\n\tPHP.Constants.T_BREAK = 307\n\tPHP.Constants.T_CONTINUE = 308\n\tPHP.Constants.T_GOTO = 309\n\tPHP.Constants.T_FUNCTION = 310\n\tPHP.Constants.T_FN = 311\n\tPHP.Constants.T_CONST = 312\n\tPHP.Constants.T_RETURN = 313\n\tPHP.Constants.T_TRY = 314\n\tPHP.Constants.T_CATCH = 315\n\tPHP.Constants.T_FINALLY = 316\n\tPHP.Constants.T_THROW = 317\n\tPHP.Constants.T_USE = 318\n\tPHP.Constants.T_INSTEADOF = 319\n\tPHP.Constants.T_GLOBAL = 320\n\tPHP.Constants.T_STATIC = 321\n\tPHP.Constants.T_ABSTRACT = 322\n\tPHP.Constants.T_FINAL = 323\n\tPHP.Constants.T_PRIVATE = 324\n\tPHP.Constants.T_PROTECTED = 325\n\tPHP.Constants.T_PUBLIC = 326\n\tPHP.Constants.T_READONLY = 327\n\tPHP.Constants.T_VAR = 328\n\tPHP.Constants.T_UNSET = 329\n\tPHP.Constants.T_ISSET = 330\n\tPHP.Constants.T_EMPTY = 331\n\tPHP.Constants.T_HALT_COMPILER = 332\n\tPHP.Constants.T_CLASS = 333\n\tPHP.Constants.T_TRAIT = 334\n\tPHP.Constants.T_INTERFACE = 335\n\tPHP.Constants.T_ENUM = 336\n\tPHP.Constants.T_EXTENDS = 337\n\tPHP.Constants.T_IMPLEMENTS = 338\n\tPHP.Constants.T_OBJECT_OPERATOR = 384\n\tPHP.Constants.T_NULLSAFE_OBJECT_OPERATOR = 385\n\tPHP.Constants.T_DOUBLE_ARROW = 386\n\tPHP.Constants.T_LIST = 340\n\tPHP.Constants.T_ARRAY = 341\n\tPHP.Constants.T_CALLABLE = 342\n\tPHP.Constants.T_CLASS_C = 346\n\tPHP.Constants.T_TRAIT_C = 347\n\tPHP.Constants.T_METHOD_C = 348\n\tPHP.Constants.T_FUNC_C = 349\n\tPHP.Constants.T_LINE = 343\n\tPHP.Constants.T_FILE = 344\n\tPHP.Constants.T_START_HEREDOC = 393\n\tPHP.Constants.T_END_HEREDOC = 394\n\tPHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES = 395\n\tPHP.Constants.T_CURLY_OPEN = 396\n\tPHP.Constants.T_PAAMAYIM_NEKUDOTAYIM = 397\n\tPHP.Constants.T_NAMESPACE = 339\n\tPHP.Constants.T_NS_C = 350\n\tPHP.Constants.T_DIR = 345\n\tPHP.Constants.T_NS_SEPARATOR = 398\n\tPHP.Constants.T_ELLIPSIS = 399\n\tPHP.Constants.T_NAME_FULLY_QUALIFIED = 263\n\tPHP.Constants.T_NAME_QUALIFIED = 265\n\tPHP.Constants.T_NAME_RELATIVE = 264\n\tPHP.Constants.T_ATTRIBUTE = 351\n\tPHP.Constants.T_ENUM = 336\n\tPHP.Constants.T_BAD_CHARACTER = 405\n\tPHP.Constants.T_COMMENT = 387\n\tPHP.Constants.T_DOC_COMMENT = 388\n\tPHP.Constants.T_OPEN_TAG = 389\n\tPHP.Constants.T_OPEN_TAG_WITH_ECHO = 390\n\tPHP.Constants.T_CLOSE_TAG = 391\n\tPHP.Constants.T_WHITESPACE = 392\n\n\tPHP.Lexer = function (src, ini) {\n\t\tvar heredoc, heredocEndAllowed,\n\n\t\t\tstateStack = ['INITIAL'], stackPos = 0,\n\t\t\tswapState = function (state) {\n\t\t\t\tstateStack[stackPos] = state;\n\t\t\t},\n\t\t\tpushState = function (state) {\n\t\t\t\tstateStack[++stackPos] = state;\n\t\t\t},\n\t\t\tpopState = function () {\n\t\t\t\t--stackPos;\n\t\t\t},\n\n\t\t\tshortOpenTag = ini === undefined || /^(on|true|1)$/i.test(ini.short_open_tag),\n\t\t\topenTag = shortOpenTag\n\t\t\t\t? /^(\\<\\?php(?:\\r\\n|[ \\t\\r\\n])|<\\?|\\<script language\\=('|\")?php('|\")?\\>)/i\n\t\t\t\t: /^(\\<\\?php(?:\\r\\n|[ \\t\\r\\n])|\\<script language\\=('|\")?php('|\")?\\>)/i,\n\t\t\tinlineHtml = shortOpenTag\n\t\t\t\t? /[^<]*(?:<(?!\\?|script language\\=('|\")?php('|\")?\\>)[^<]*)*/i\n\t\t\t\t: /[^<]*(?:<(?!\\?=|\\?php[ \\t\\r\\n]|script language\\=('|\")?php('|\")?\\>)[^<]*)*/i,\n\t\t\tlabelRegexPart = '[a-zA-Z_\\\\x7f-\\\\uffff][a-zA-Z0-9_\\\\x7f-\\\\uffff]*',\n\t\t\tstringRegexPart = function (quote) {\n\t\t\t\treturn '[^' + quote + '\\\\\\\\${]*(?:(?:\\\\\\\\[\\\\s\\\\S]|\\\\$(?!\\\\{|[a-zA-Z_\\\\x7f-\\\\uffff])|\\\\{(?!\\\\$))[^' + quote + '\\\\\\\\${]*)*';\n\t\t\t},\n\n\t\t\tsharedStringTokens = [\n\t\t\t\t{\n\t\t\t\t\tvalue: PHP.Constants.T_VARIABLE,\n\t\t\t\t\tre: new RegExp('^\\\\$' + labelRegexPart + '(?=\\\\[)'),\n\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\tpushState('VAR_OFFSET');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: PHP.Constants.T_VARIABLE,\n\t\t\t\t\tre: new RegExp('^\\\\$' + labelRegexPart + '(?=->' + labelRegexPart + ')'),\n\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\tpushState('LOOKING_FOR_PROPERTY');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: PHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES,\n\t\t\t\t\tre: new RegExp('^\\\\$\\\\{(?=' + labelRegexPart + '[\\\\[}])'),\n\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\tpushState('LOOKING_FOR_VARNAME');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: PHP.Constants.T_VARIABLE,\n\t\t\t\t\tre: new RegExp('^\\\\$' + labelRegexPart)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: PHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES,\n\t\t\t\t\tre: /^\\$\\{/,\n\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\tpushState('IN_SCRIPTING');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: PHP.Constants.T_CURLY_OPEN,\n\t\t\t\t\tre: /^\\{(?=\\$)/,\n\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\tpushState('IN_SCRIPTING');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\tdata = {\n\t\t\t\t'INITIAL': [\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_OPEN_TAG_WITH_ECHO,\n\t\t\t\t\t\tre: /^<\\?=/i,\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tswapState('IN_SCRIPTING');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_OPEN_TAG,\n\t\t\t\t\t\tre: openTag,\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tswapState('IN_SCRIPTING');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_INLINE_HTML,\n\t\t\t\t\t\tre: inlineHtml\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\t'IN_SCRIPTING': [\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_WHITESPACE,\n\t\t\t\t\t\tre: /^[ \\n\\r\\t]+/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ABSTRACT,\n\t\t\t\t\t\tre: /^abstract\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_LOGICAL_AND,\n\t\t\t\t\t\tre: /^and\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ARRAY,\n\t\t\t\t\t\tre: /^array\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_AS,\n\t\t\t\t\t\tre: /^as\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_BREAK,\n\t\t\t\t\t\tre: /^break\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_CALLABLE,\n\t\t\t\t\t\tre: /^callable\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_CASE,\n\t\t\t\t\t\tre: /^case\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_CATCH,\n\t\t\t\t\t\tre: /^catch\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_CLASS,\n\t\t\t\t\t\tre: /^class\\b/i,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_CLONE,\n\t\t\t\t\t\tre: /^clone\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_CONST,\n\t\t\t\t\t\tre: /^const\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_CONTINUE,\n\t\t\t\t\t\tre: /^continue\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_DECLARE,\n\t\t\t\t\t\tre: /^declare\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_DEFAULT,\n\t\t\t\t\t\tre: /^default\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_DO,\n\t\t\t\t\t\tre: /^do\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ECHO,\n\t\t\t\t\t\tre: /^echo\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ELSE,\n\t\t\t\t\t\tre: /^else\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ELSEIF,\n\t\t\t\t\t\tre: /^elseif\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ENUM,\n\t\t\t\t\t\tre: /^enum\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ENDDECLARE,\n\t\t\t\t\t\tre: /^enddeclare\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ENDFOR,\n\t\t\t\t\t\tre: /^endfor\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ENDFOREACH,\n\t\t\t\t\t\tre: /^endforeach\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ENDIF,\n\t\t\t\t\t\tre: /^endif\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ENDSWITCH,\n\t\t\t\t\t\tre: /^endswitch\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ENDWHILE,\n\t\t\t\t\t\tre: /^endwhile\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ENUM,\n\t\t\t\t\t\tre: /^enum\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_EMPTY,\n\t\t\t\t\t\tre: /^empty\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_EVAL,\n\t\t\t\t\t\tre: /^eval\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_EXIT,\n\t\t\t\t\t\tre: /^(?:exit|die)\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_EXTENDS,\n\t\t\t\t\t\tre: /^extends\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_FINAL,\n\t\t\t\t\t\tre: /^final\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_FINALLY,\n\t\t\t\t\t\tre: /^finally\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_FN,\n\t\t\t\t\t\tre: /^fn\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_FOR,\n\t\t\t\t\t\tre: /^for\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_FOREACH,\n\t\t\t\t\t\tre: /^foreach\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_FUNCTION,\n\t\t\t\t\t\tre: /^function\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_GLOBAL,\n\t\t\t\t\t\tre: /^global\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_GOTO,\n\t\t\t\t\t\tre: /^goto\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_IF,\n\t\t\t\t\t\tre: /^if\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_IMPLEMENTS,\n\t\t\t\t\t\tre: /^implements\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_INCLUDE,\n\t\t\t\t\t\tre: /^include\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_INCLUDE_ONCE,\n\t\t\t\t\t\tre: /^include_once\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_INSTANCEOF,\n\t\t\t\t\t\tre: /^instanceof\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_INSTEADOF,\n\t\t\t\t\t\tre: /^insteadof\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_INTERFACE,\n\t\t\t\t\t\tre: /^interface\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ISSET,\n\t\t\t\t\t\tre: /^isset\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_LIST,\n\t\t\t\t\t\tre: /^list\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_MATCH,\n\t\t\t\t\t\tre: /^match\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_NEW,\n\t\t\t\t\t\tre: /^new\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_LOGICAL_OR,\n\t\t\t\t\t\tre: /^or\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_PRINT,\n\t\t\t\t\t\tre: /^print\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_PRIVATE,\n\t\t\t\t\t\tre: /^private\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_PROTECTED,\n\t\t\t\t\t\tre: /^protected\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_PUBLIC,\n\t\t\t\t\t\tre: /^public\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_READONLY,\n\t\t\t\t\t\tre: /^readonly\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_REQUIRE,\n\t\t\t\t\t\tre: /^require\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_REQUIRE_ONCE,\n\t\t\t\t\t\tre: /^require_once\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_STATIC,\n\t\t\t\t\t\tre: /^static\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_SWITCH,\n\t\t\t\t\t\tre: /^switch\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_THROW,\n\t\t\t\t\t\tre: /^throw\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_TRAIT,\n\t\t\t\t\t\tre: /^trait\\b/i,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_TRY,\n\t\t\t\t\t\tre: /^try\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_UNSET,\n\t\t\t\t\t\tre: /^unset\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_USE,\n\t\t\t\t\t\tre: /^use\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_VAR,\n\t\t\t\t\t\tre: /^var\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_WHILE,\n\t\t\t\t\t\tre: /^while\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_LOGICAL_XOR,\n\t\t\t\t\t\tre: /^xor\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_YIELD_FROM,\n\t\t\t\t\t\tre: /^yield\\s+from\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_YIELD,\n\t\t\t\t\t\tre: /^yield\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_RETURN,\n\t\t\t\t\t\tre: /^return\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_METHOD_C,\n\t\t\t\t\t\tre: /^__METHOD__\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_LINE,\n\t\t\t\t\t\tre: /^__LINE__\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_FILE,\n\t\t\t\t\t\tre: /^__FILE__\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_FUNC_C,\n\t\t\t\t\t\tre: /^__FUNCTION__\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_NS_C,\n\t\t\t\t\t\tre: /^__NAMESPACE__\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_TRAIT_C,\n\t\t\t\t\t\tre: /^__TRAIT__\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_DIR,\n\t\t\t\t\t\tre: /^__DIR__\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_CLASS_C,\n\t\t\t\t\t\tre: /^__CLASS__\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_AND_EQUAL,\n\t\t\t\t\t\tre: /^&=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ARRAY_CAST,\n\t\t\t\t\t\tre: /^\\([ \\t]*array[ \\t]*\\)/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_BOOL_CAST,\n\t\t\t\t\t\tre: /^\\([ \\t]*(?:bool|boolean)[ \\t]*\\)/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_DOUBLE_CAST,\n\t\t\t\t\t\tre: /^\\([ \\t]*(?:real|float|double)[ \\t]*\\)/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_INT_CAST,\n\t\t\t\t\t\tre: /^\\([ \\t]*(?:int|integer)[ \\t]*\\)/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_OBJECT_CAST,\n\t\t\t\t\t\tre: /^\\([ \\t]*object[ \\t]*\\)/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_STRING_CAST,\n\t\t\t\t\t\tre: /^\\([ \\t]*(?:binary|string)[ \\t]*\\)/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_UNSET_CAST,\n\t\t\t\t\t\tre: /^\\([ \\t]*unset[ \\t]*\\)/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_BOOLEAN_AND,\n\t\t\t\t\t\tre: /^&&/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG,\n\t\t\t\t\t\tre: /^&(?=[$])/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG,\n\t\t\t\t\t\tre: /^(&)(?=[^\\$|^&])/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_BOOLEAN_OR,\n\t\t\t\t\t\tre: /^\\|\\|/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_CLOSE_TAG,\n\t\t\t\t\t\tre: /^(?:\\?>|<\\/script>)(\\r\\n|\\r|\\n)?/i,\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tswapState('INITIAL');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_DOUBLE_ARROW,\n\t\t\t\t\t\tre: /^=>/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_PAAMAYIM_NEKUDOTAYIM,\n\t\t\t\t\t\tre: /^::/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_INC,\n\t\t\t\t\t\tre: /^\\+\\+/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_DEC,\n\t\t\t\t\t\tre: /^--/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_CONCAT_EQUAL,\n\t\t\t\t\t\tre: /^\\.=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_DIV_EQUAL,\n\t\t\t\t\t\tre: /^\\/=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_XOR_EQUAL,\n\t\t\t\t\t\tre: /^\\^=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_MUL_EQUAL,\n\t\t\t\t\t\tre: /^\\*=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_MOD_EQUAL,\n\t\t\t\t\t\tre: /^%=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_SL_EQUAL,\n\t\t\t\t\t\tre: /^<<=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_START_HEREDOC,\n\t\t\t\t\t\tre: new RegExp('^[bB]?<<<[ \\\\t]*\\'(' + labelRegexPart + ')\\'(?:\\\\r\\\\n|\\\\r|\\\\n)'),\n\t\t\t\t\t\tfunc: function (result) {\n\t\t\t\t\t\t\theredoc = result[1];\n\t\t\t\t\t\t\tswapState('NOWDOC');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_START_HEREDOC,\n\t\t\t\t\t\tre: new RegExp('^[bB]?<<<[ \\\\t]*(\"?)(' + labelRegexPart + ')\\\\1(?:\\\\r\\\\n|\\\\r|\\\\n)'),\n\t\t\t\t\t\tfunc: function (result) {\n\t\t\t\t\t\t\theredoc = result[2];\n\t\t\t\t\t\t\theredocEndAllowed = true;\n\t\t\t\t\t\t\tswapState('HEREDOC');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_SL,\n\t\t\t\t\t\tre: /^<</\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_SPACESHIP,\n\t\t\t\t\t\tre: /^<=>/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_IS_SMALLER_OR_EQUAL,\n\t\t\t\t\t\tre: /^<=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_SR_EQUAL,\n\t\t\t\t\t\tre: /^>>=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_SR,\n\t\t\t\t\t\tre: /^>>/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_IS_GREATER_OR_EQUAL,\n\t\t\t\t\t\tre: /^>=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_OR_EQUAL,\n\t\t\t\t\t\tre: /^\\|=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_PLUS_EQUAL,\n\t\t\t\t\t\tre: /^\\+=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_MINUS_EQUAL,\n\t\t\t\t\t\tre: /^-=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_OBJECT_OPERATOR,\n\t\t\t\t\t\tre: new RegExp('^->(?=[ \\n\\r\\t]*' + labelRegexPart + ')'),\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tpushState('LOOKING_FOR_PROPERTY');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_OBJECT_OPERATOR,\n\t\t\t\t\t\tre: /^->/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ELLIPSIS,\n\t\t\t\t\t\tre: /^\\.\\.\\./\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_POW_EQUAL,\n\t\t\t\t\t\tre: /^\\*\\*=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_POW,\n\t\t\t\t\t\tre: /^\\*\\*/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_COALESCE_EQUAL,\n\t\t\t\t\t\tre: /^\\?\\?=/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_COALESCE,\n\t\t\t\t\t\tre: /^\\?\\?/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_NULLSAFE_OBJECT_OPERATOR,\n\t\t\t\t\t\tre: /^\\?->/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_NAME_FULLY_QUALIFIED,\n\t\t\t\t\t\tre: /^\\\\\\w+(?:\\\\\\w+)*/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_NAME_QUALIFIED,\n\t\t\t\t\t\tre: /^\\w+\\\\\\w+(?:\\\\\\w+)*/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_NAME_RELATIVE,\n\t\t\t\t\t\tre: /^namespace\\\\\\w+(?:\\\\\\w+)*/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_NAMESPACE,\n\t\t\t\t\t\tre: /^namespace\\b/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ATTRIBUTE,\n\t\t\t\t\t\tre: /^#\\[([\\S\\s]*?)]/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_COMMENT,\n\t\t\t\t\t\tre: /^\\/\\*([\\S\\s]*?)(?:\\*\\/|$)/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_COMMENT,\n\t\t\t\t\t\tre: /^(?:\\/\\/|#)[^\\r\\n?]*(?:\\?(?!>)[^\\r\\n?]*)*(?:\\r\\n|\\r|\\n)?/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_IS_IDENTICAL,\n\t\t\t\t\t\tre: /^===/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_IS_EQUAL,\n\t\t\t\t\t\tre: /^==/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_IS_NOT_IDENTICAL,\n\t\t\t\t\t\tre: /^!==/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_IS_NOT_EQUAL,\n\t\t\t\t\t\tre: /^(!=|<>)/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_DNUMBER,\n\t\t\t\t\t\tre: /^(?:[0-9]+\\.[0-9]*|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_DNUMBER,\n\t\t\t\t\t\tre: /^[0-9]+[eE][+-]?[0-9]+/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_LNUMBER,\n\t\t\t\t\t\tre: /^(?:0x[0-9A-F]+|0b[01]+|[0-9]+)/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_VARIABLE,\n\t\t\t\t\t\tre: new RegExp('^\\\\$' + labelRegexPart)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_CONSTANT_ENCAPSED_STRING,\n\t\t\t\t\t\tre: /^[bB]?'[^'\\\\]*(?:\\\\[\\s\\S][^'\\\\]*)*'/,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_CONSTANT_ENCAPSED_STRING,\n\t\t\t\t\t\tre: new RegExp('^[bB]?\"' + stringRegexPart('\"') + '\"')\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: -1,\n\t\t\t\t\t\tre: /^[bB]?\"/,\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tswapState('DOUBLE_QUOTES');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: -1,\n\t\t\t\t\t\tre: /^`/,\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tswapState('BACKTICKS');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_NS_SEPARATOR,\n\t\t\t\t\t\tre: /^\\\\/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_STRING,\n\t\t\t\t\t\tre: /^[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: -1,\n\t\t\t\t\t\tre: /^\\{/,\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tpushState('IN_SCRIPTING');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: -1,\n\t\t\t\t\t\tre: /^\\}/,\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tif (stackPos > 0) {\n\t\t\t\t\t\t\t\tpopState();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: -1,\n\t\t\t\t\t\tre: /^[\\[\\];:?()!.,><=+-/*|&@^%\"'$~]/\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'DOUBLE_QUOTES': sharedStringTokens.concat([\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: -1,\n\t\t\t\t\t\tre: /^\"/,\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tswapState('IN_SCRIPTING');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n\t\t\t\t\t\tre: new RegExp('^' + stringRegexPart('\"'))\n\t\t\t\t\t}\n\t\t\t\t]),\n\t\t\t\t'BACKTICKS': sharedStringTokens.concat([\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: -1,\n\t\t\t\t\t\tre: /^`/,\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tswapState('IN_SCRIPTING');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n\t\t\t\t\t\tre: new RegExp('^' + stringRegexPart('`'))\n\t\t\t\t\t}\n\t\t\t\t]),\n\t\t\t\t'VAR_OFFSET': [\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: -1,\n\t\t\t\t\t\tre: /^\\]/,\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tpopState();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_NUM_STRING,\n\t\t\t\t\t\tre: /^(?:0x[0-9A-F]+|0b[01]+|[0-9]+)/i\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_VARIABLE,\n\t\t\t\t\t\tre: new RegExp('^\\\\$' + labelRegexPart)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_STRING,\n\t\t\t\t\t\tre: new RegExp('^' + labelRegexPart)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: -1,\n\t\t\t\t\t\tre: /^[;:,.\\[()|^&+-/*=%!~$<>?@{}\"`]/\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'LOOKING_FOR_PROPERTY': [\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_OBJECT_OPERATOR,\n\t\t\t\t\t\tre: /^->/\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_STRING,\n\t\t\t\t\t\tre: new RegExp('^' + labelRegexPart),\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tpopState();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_WHITESPACE,\n\t\t\t\t\t\tre: /^[ \\n\\r\\t]+/\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'LOOKING_FOR_VARNAME': [\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_STRING_VARNAME,\n\t\t\t\t\t\tre: new RegExp('^' + labelRegexPart + '(?=[\\\\[}])'),\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tswapState('IN_SCRIPTING');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'NOWDOC': [\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_END_HEREDOC,\n\t\t\t\t\t\tmatchFunc: function (src) {\n\t\t\t\t\t\t\tvar re = new RegExp('^' + heredoc + '(?=;?[\\\\r\\\\n])');\n\t\t\t\t\t\t\tif (src.match(re)) {\n\t\t\t\t\t\t\t\treturn [src.substr(0, heredoc.length)];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tswapState('IN_SCRIPTING');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n\t\t\t\t\t\tmatchFunc: function (src) {\n\t\t\t\t\t\t\tvar re = new RegExp('[\\\\r\\\\n]' + heredoc + '(?=;?[\\\\r\\\\n])');\n\t\t\t\t\t\t\tvar result = re.exec(src);\n\t\t\t\t\t\t\tvar end = result ? result.index + 1 : src.length;\n\t\t\t\t\t\t\treturn [src.substring(0, end)];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t'HEREDOC': sharedStringTokens.concat([\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_END_HEREDOC,\n\t\t\t\t\t\tmatchFunc: function (src) {\n\t\t\t\t\t\t\tif (!heredocEndAllowed) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar re = new RegExp('^' + heredoc + '(?=;?[\\\\r\\\\n])');\n\t\t\t\t\t\t\tif (src.match(re)) {\n\t\t\t\t\t\t\t\treturn [src.substr(0, heredoc.length)];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunc: function () {\n\t\t\t\t\t\t\tswapState('IN_SCRIPTING');\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: PHP.Constants.T_ENCAPSED_AND_WHITESPACE,\n\t\t\t\t\t\tmatchFunc: function (src) {\n\t\t\t\t\t\t\tvar end = src.length;\n\t\t\t\t\t\t\tvar re = new RegExp('^' + stringRegexPart(''));\n\t\t\t\t\t\t\tvar result = re.exec(src);\n\t\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\t\tend = result[0].length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tre = new RegExp('([\\\\r\\\\n])' + heredoc + '(?=;?[\\\\r\\\\n])');\n\t\t\t\t\t\t\tresult = re.exec(src.substring(0, end));\n\t\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\t\tend = result.index + 1;\n\t\t\t\t\t\t\t\theredocEndAllowed = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\theredocEndAllowed = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (end == 0) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn [src.substring(0, end)];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t};\n\n\t\tvar results = [],\n\t\t\tline = 1,\n\t\t\tcancel = true;\n\n\t\tif (src === null) {\n\t\t\treturn results;\n\t\t}\n\n\t\tif (typeof src !== \"string\") {\n\t\t\tsrc = src.toString();\n\t\t}\n\n\t\twhile (src.length > 0 && cancel === true) {\n\t\t\tvar state = stateStack[stackPos];\n\t\t\tvar tokens = data[state];\n\t\t\tcancel = tokens.some(function (token) {\n\t\t\t\tvar result = token.matchFunc !== undefined\n\t\t\t\t\t? token.matchFunc(src)\n\t\t\t\t\t: src.match(token.re);\n\t\t\t\tif (result !== null) {\n\t\t\t\t\tif (result[0].length == 0) {\n\t\t\t\t\t\tthrow new Error(\"empty match\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (token.func !== undefined) {\n\t\t\t\t\t\ttoken.func(result);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (token.value === -1) {\n\t\t\t\t\t\tresults.push(result[0]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar resultString = result[0];\n\t\t\t\t\t\tresults.push([\n\t\t\t\t\t\t\tparseInt(token.value, 10),\n\t\t\t\t\t\t\tresultString,\n\t\t\t\t\t\t\tline\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tline += resultString.split('\\n').length - 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tsrc = src.substring(result[0].length);\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\n\t\treturn results;\n\t};\n\n\n\tPHP.Parser = function (preprocessedTokens, evaluate) {\n\n\t\tvar yybase = this.yybase,\n\t\t\tyydefault = this.yydefault,\n\t\t\tyycheck = this.yycheck,\n\t\t\tyyaction = this.yyaction,\n\t\t\tyylen = this.yylen,\n\t\t\tyygbase = this.yygbase,\n\t\t\tyygcheck = this.yygcheck,\n\t\t\tyyp = this.yyp,\n\t\t\tyygoto = this.yygoto,\n\t\t\tyylhs = this.yylhs,\n\t\t\tterminals = this.terminals,\n\t\t\ttranslate = this.translate,\n\t\t\tyygdefault = this.yygdefault;\n\n\n\t\tthis.pos = -1;\n\t\tthis.line = 1;\n\n\t\tthis.tokenMap = this.createTokenMap();\n\n\t\tthis.dropTokens = {};\n\t\tthis.dropTokens[PHP.Constants.T_WHITESPACE] = 1;\n\t\tthis.dropTokens[PHP.Constants.T_OPEN_TAG] = 1;\n\t\tvar tokens = [];\n\t\tpreprocessedTokens.forEach(function (token, index) {\n\t\t\tif (typeof token === \"object\" && token[0] === PHP.Constants.T_OPEN_TAG_WITH_ECHO) {\n\t\t\t\ttokens.push([\n\t\t\t\t\tPHP.Constants.T_OPEN_TAG,\n\t\t\t\t\ttoken[1],\n\t\t\t\t\ttoken[2]\n\t\t\t\t]);\n\t\t\t\ttokens.push([\n\t\t\t\t\tPHP.Constants.T_ECHO,\n\t\t\t\t\ttoken[1],\n\t\t\t\t\ttoken[2]\n\t\t\t\t]);\n\t\t\t} else {\n\t\t\t\ttokens.push(token);\n\t\t\t}\n\t\t});\n\t\tthis.tokens = tokens;\n\t\tvar tokenId = this.TOKEN_NONE;\n\t\tthis.startAttributes = {\n\t\t\t'startLine': 1\n\t\t};\n\n\t\tthis.endAttributes = {};\n\t\tvar attributeStack = [this.startAttributes];\n\t\tvar state = 0;\n\t\tvar stateStack = [state];\n\t\tthis.yyastk = [];\n\t\tthis.stackPos = 0;\n\n\t\tvar yyn;\n\n\t\tvar origTokenId;\n\n\n\t\tfor (; ;) {\n\n\t\t\tif (yybase[state] === 0) {\n\t\t\t\tyyn = yydefault[state];\n\t\t\t} else {\n\t\t\t\tif (tokenId === this.TOKEN_NONE) {\n\t\t\t\t\torigTokenId = this.getNextToken();\n\t\t\t\t\ttokenId = (origTokenId >= 0 && origTokenId < this.TOKEN_MAP_SIZE) ? translate[origTokenId] : this.TOKEN_INVALID;\n\n\t\t\t\t\tattributeStack[this.stackPos] = this.startAttributes;\n\t\t\t\t}\n\n\t\t\t\tif (((yyn = yybase[state] + tokenId) >= 0\n\t\t\t\t\t\t&& yyn < this.YYLAST && yycheck[yyn] === tokenId\n\t\t\t\t\t\t|| (state < this.YY2TBLSTATE\n\t\t\t\t\t\t\t&& (yyn = yybase[state + this.YYNLSTATES] + tokenId) >= 0\n\t\t\t\t\t\t\t&& yyn < this.YYLAST\n\t\t\t\t\t\t\t&& yycheck[yyn] === tokenId))\n\t\t\t\t\t&& (yyn = yyaction[yyn]) !== this.YYDEFAULT) {\n\t\t\t\t\tif (yyn > 0) {\n\t\t\t\t\t\t++this.stackPos;\n\n\t\t\t\t\t\tstateStack[this.stackPos] = state = yyn;\n\t\t\t\t\t\tthis.yyastk[this.stackPos] = this.tokenValue;\n\t\t\t\t\t\tattributeStack[this.stackPos] = this.startAttributes;\n\t\t\t\t\t\ttokenId = this.TOKEN_NONE;\n\n\t\t\t\t\t\tif (yyn < this.YYNLSTATES)\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tyyn -= this.YYNLSTATES;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyyn = -yyn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tyyn = yydefault[state];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (; ;) {\n\n\t\t\t\tif (yyn === 0) {\n\t\t\t\t\treturn this.yyval;\n\t\t\t\t} else if (yyn !== this.YYUNEXPECTED) {\n\t\t\t\t\tfor (var attr in this.endAttributes) {\n\t\t\t\t\t\tattributeStack[this.stackPos - yylen[yyn]][attr] = this.endAttributes[attr];\n\t\t\t\t\t}\n\t\t\t\t\tthis.stackPos -= yylen[yyn];\n\t\t\t\t\tyyn = yylhs[yyn];\n\t\t\t\t\tif ((yyp = yygbase[yyn] + stateStack[this.stackPos]) >= 0\n\t\t\t\t\t\t&& yyp < this.YYGLAST\n\t\t\t\t\t\t&& yygcheck[yyp] === yyn) {\n\t\t\t\t\t\tstate = yygoto[yyp];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = yygdefault[yyn];\n\t\t\t\t\t}\n\n\t\t\t\t\t++this.stackPos;\n\n\t\t\t\t\tstateStack[this.stackPos] = state;\n\t\t\t\t\tthis.yyastk[this.stackPos] = this.yyval;\n\t\t\t\t\tattributeStack[this.stackPos] = this.startAttributes;\n\t\t\t\t} else {\n\t\t\t\t\tif (evaluate !== true) {\n\n\t\t\t\t\t\tvar expected = [];\n\n\t\t\t\t\t\tfor (var i = 0; i < this.TOKEN_MAP_SIZE; ++i) {\n\t\t\t\t\t\t\tif ((yyn = yybase[state] + i) >= 0 && yyn < this.YYLAST && yycheck[yyn] == i\n\t\t\t\t\t\t\t\t|| state < this.YY2TBLSTATE\n\t\t\t\t\t\t\t\t&& (yyn = yybase[state + this.YYNLSTATES] + i)\n\t\t\t\t\t\t\t\t&& yyn < this.YYLAST && yycheck[yyn] == i\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tif (yyaction[yyn] != this.YYUNEXPECTED) {\n\t\t\t\t\t\t\t\t\tif (expected.length == 4) {\n\t\t\t\t\t\t\t\t\t\texpected = [];\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\texpected.push(this.terminals[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar expectedString = '';\n\t\t\t\t\t\tif (expected.length) {\n\t\t\t\t\t\t\texpectedString = ', expecting ' + expected.join(' or ');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow new PHP.ParseError('syntax error, unexpected ' + terminals[tokenId] + expectedString, this.startAttributes['startLine']);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn this.startAttributes['startLine'];\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif (state < this.YYNLSTATES)\n\t\t\t\t\tbreak;\n\t\t\t\tyyn = state - this.YYNLSTATES;\n\t\t\t}\n\t\t}\n\t};\n\n\tPHP.ParseError = function (msg, line) {\n\t\tthis.message = msg;\n\t\tthis.line = line;\n\t};\n\n\tPHP.Parser.prototype.getNextToken = function () {\n\n\t\tthis.startAttributes = {};\n\t\tthis.endAttributes = {};\n\n\t\tvar token,\n\t\t\ttmp;\n\n\t\twhile (this.tokens[++this.pos] !== undefined) {\n\t\t\ttoken = this.tokens[this.pos];\n\n\t\t\tif (typeof token === \"string\") {\n\t\t\t\tthis.startAttributes['startLine'] = this.line;\n\t\t\t\tthis.endAttributes['endLine'] = this.line;\n\t\t\t\tif ('b\"' === token) {\n\t\t\t\t\tthis.tokenValue = 'b\"';\n\t\t\t\t\treturn '\"'.charCodeAt(0);\n\t\t\t\t} else {\n\t\t\t\t\tthis.tokenValue = token;\n\t\t\t\t\treturn token.charCodeAt(0);\n\t\t\t\t}\n\t\t\t} else {\n\n\n\t\t\t\tthis.line += ((tmp = token[1].match(/\\n/g)) === null) ? 0 : tmp.length;\n\n\t\t\t\tif (PHP.Constants.T_COMMENT === token[0]) {\n\n\t\t\t\t\tif (!Array.isArray(this.startAttributes['comments'])) {\n\t\t\t\t\t\tthis.startAttributes['comments'] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.startAttributes['comments'].push({\n\t\t\t\t\t\ttype: \"comment\",\n\t\t\t\t\t\tcomment: token[1],\n\t\t\t\t\t\tline: token[2]\n\t\t\t\t\t});\n\n\t\t\t\t}\n\t\t\t\telse if (PHP.Constants.T_ATTRIBUTE === token[0]) {\n\t\t\t\t\tthis.tokenValue = token[1];\n\t\t\t\t\tthis.startAttributes['startLine'] = token[2];\n\t\t\t\t\tthis.endAttributes['endLine'] = this.line;\n\t\t\t\t} else if (PHP.Constants.T_DOC_COMMENT === token[0]) {\n\t\t\t\t\tthis.startAttributes['comments'].push(new PHPParser_Comment_Doc(token[1], token[2]));\n\t\t\t\t} else if (this.dropTokens[token[0]] === undefined) {\n\t\t\t\t\tthis.tokenValue = token[1];\n\t\t\t\t\tthis.startAttributes['startLine'] = token[2];\n\t\t\t\t\tthis.endAttributes['endLine'] = this.line;\n\n\t\t\t\t\treturn this.tokenMap[token[0]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.startAttributes['startLine'] = this.line;\n\t\treturn 0;\n\t};\n\n\tPHP.Parser.prototype.tokenName = function (token) {\n\t\tvar constants = [\"T_THROW\",\"T_INCLUDE\",\"T_INCLUDE_ONCE\",\"T_EVAL\",\"T_REQUIRE\",\"T_REQUIRE_ONCE\",\"T_LOGICAL_OR\",\"T_LOGICAL_XOR\",\"T_LOGICAL_AND\",\"T_PRINT\",\"T_YIELD\",\"T_DOUBLE_ARROW\",\"T_YIELD_FROM\",\"T_PLUS_EQUAL\",\"T_MINUS_EQUAL\",\"T_MUL_EQUAL\",\"T_DIV_EQUAL\",\"T_CONCAT_EQUAL\",\"T_MOD_EQUAL\",\"T_AND_EQUAL\",\"T_OR_EQUAL\",\"T_XOR_EQUAL\",\"T_SL_EQUAL\",\"T_SR_EQUAL\",\"T_POW_EQUAL\",\"T_COALESCE_EQUAL\",\"T_COALESCE\",\"T_BOOLEAN_OR\",\"T_BOOLEAN_AND\",\"T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG\",\"T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG\",\"T_IS_EQUAL\",\"T_IS_NOT_EQUAL\",\"T_IS_IDENTICAL\",\"T_IS_NOT_IDENTICAL\",\"T_SPACESHIP\",\"T_IS_SMALLER_OR_EQUAL\",\"T_IS_GREATER_OR_EQUAL\",\"T_SL\",\"T_SR\",\"T_INSTANCEOF\",\"T_INC\",\"T_DEC\",\"T_INT_CAST\",\"T_DOUBLE_CAST\",\"T_STRING_CAST\",\"T_ARRAY_CAST\",\"T_OBJECT_CAST\",\"T_BOOL_CAST\",\"T_UNSET_CAST\",\"T_POW\",\"T_NEW\",\"T_CLONE\",\"T_EXIT\",\"T_IF\",\"T_ELSEIF\",\"T_ELSE\",\"T_ENDIF\",\"T_LNUMBER\",\"T_DNUMBER\",\"T_STRING\",\"T_STRING_VARNAME\",\"T_VARIABLE\",\"T_NUM_STRING\",\"T_INLINE_HTML\",\"T_ENCAPSED_AND_WHITESPACE\",\"T_CONSTANT_ENCAPSED_STRING\",\"T_ECHO\",\"T_DO\",\"T_WHILE\",\"T_ENDWHILE\",\"T_FOR\",\"T_ENDFOR\",\"T_FOREACH\",\"T_ENDFOREACH\",\"T_DECLARE\",\"T_ENDDECLARE\",\"T_AS\",\"T_SWITCH\",\"T_MATCH\",\"T_ENDSWITCH\",\"T_CASE\",\"T_DEFAULT\",\"T_BREAK\",\"T_CONTINUE\",\"T_GOTO\",\"T_FUNCTION\",\"T_FN\",\"T_CONST\",\"T_RETURN\",\"T_TRY\",\"T_CATCH\",\"T_FINALLY\",\"T_THROW\",\"T_USE\",\"T_INSTEADOF\",\"T_GLOBAL\",\"T_STATIC\",\"T_ABSTRACT\",\"T_FINAL\",\"T_PRIVATE\",\"T_PROTECTED\",\"T_PUBLIC\",\"T_READONLY\",\"T_VAR\",\"T_UNSET\",\"T_ISSET\",\"T_EMPTY\",\"T_HALT_COMPILER\",\"T_CLASS\",\"T_TRAIT\",\"T_INTERFACE\",\"T_ENUM\",\"T_EXTENDS\",\"T_IMPLEMENTS\",\"T_OBJECT_OPERATOR\",\"T_NULLSAFE_OBJECT_OPERATOR\",\"T_DOUBLE_ARROW\",\"T_LIST\",\"T_ARRAY\",\"T_CALLABLE\",\"T_CLASS_C\",\"T_TRAIT_C\",\"T_METHOD_C\",\"T_FUNC_C\",\"T_LINE\",\"T_FILE\",\"T_START_HEREDOC\",\"T_END_HEREDOC\",\"T_DOLLAR_OPEN_CURLY_BRACES\",\"T_CURLY_OPEN\",\"T_PAAMAYIM_NEKUDOTAYIM\",\"T_NAMESPACE\",\"T_NS_C\",\"T_DIR\",\"T_NS_SEPARATOR\",\"T_ELLIPSIS\",\"T_NAME_FULLY_QUALIFIED\",\"T_NAME_QUALIFIED\",\"T_NAME_RELATIVE\",\"T_ATTRIBUTE\",\"T_ENUM\",\"T_BAD_CHARACTER\",\"T_COMMENT\",\"T_DOC_COMMENT\",\"T_OPEN_TAG\",\"T_OPEN_TAG_WITH_ECHO\",\"T_CLOSE_TAG\",\"T_WHITESPACE\"];\n\t\tvar current = \"UNKNOWN\";\n\t\tconstants.some(function (constant) {\n\t\t\tif (PHP.Constants[constant] === token) {\n\t\t\t\tcurrent = constant;\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\treturn current;\n\t};\n\n\tPHP.Parser.prototype.createTokenMap = function () {\n\t\tvar tokenMap = {},\n\t\t\tname,\n\t\t\ti;\n\t\tfor (i = 256; i < 1000; ++i) {\n\t\t\tif (PHP.Constants.T_OPEN_TAG_WITH_ECHO === i) {\n\t\t\t\ttokenMap[i] = PHP.Constants.T_ECHO;\n\t\t\t} else if (PHP.Constants.T_CLOSE_TAG === i) {\n\t\t\t\ttokenMap[i] = 59;\n\t\t\t} else if ('UNKNOWN' !== (name = this.tokenName(i))) {\n\t\t\t\ttokenMap[i] = this[name];\n\t\t\t}\n\t\t}\n\t\treturn tokenMap;\n\t};\n\n\tPHP.Parser.prototype.TOKEN_NONE    = -1;\n\tPHP.Parser.prototype.TOKEN_INVALID = 175;\n\n\tPHP.Parser.prototype.TOKEN_MAP_SIZE = 403;\n\n\tPHP.Parser.prototype.YYLAST       = 1196;\n\tPHP.Parser.prototype.YY2TBLSTATE  = 420;\n\tPHP.Parser.prototype.YYGLAST      = 545;\n\tPHP.Parser.prototype.YYNLSTATES   = 710;\n\tPHP.Parser.prototype.YYUNEXPECTED = 32767;\n\tPHP.Parser.prototype.YYDEFAULT    = -32766;\n\tPHP.Parser.prototype.YYERRTOK = 256;\n\tPHP.Parser.prototype.T_THROW = 257;\n\tPHP.Parser.prototype.T_INCLUDE = 258;\n\tPHP.Parser.prototype.T_INCLUDE_ONCE = 259;\n\tPHP.Parser.prototype.T_EVAL = 260;\n\tPHP.Parser.prototype.T_REQUIRE = 261;\n\tPHP.Parser.prototype.T_REQUIRE_ONCE = 262;\n\tPHP.Parser.prototype.T_LOGICAL_OR = 263;\n\tPHP.Parser.prototype.T_LOGICAL_XOR = 264;\n\tPHP.Parser.prototype.T_LOGICAL_AND = 265;\n\tPHP.Parser.prototype.T_PRINT = 266;\n\tPHP.Parser.prototype.T_YIELD = 267;\n\tPHP.Parser.prototype.T_DOUBLE_ARROW = 268;\n\tPHP.Parser.prototype.T_YIELD_FROM = 269;\n\tPHP.Parser.prototype.T_PLUS_EQUAL = 270;\n\tPHP.Parser.prototype.T_MINUS_EQUAL = 271;\n\tPHP.Parser.prototype.T_MUL_EQUAL = 272;\n\tPHP.Parser.prototype.T_DIV_EQUAL = 273;\n\tPHP.Parser.prototype.T_CONCAT_EQUAL = 274;\n\tPHP.Parser.prototype.T_MOD_EQUAL = 275;\n\tPHP.Parser.prototype.T_AND_EQUAL = 276;\n\tPHP.Parser.prototype.T_OR_EQUAL = 277;\n\tPHP.Parser.prototype.T_XOR_EQUAL = 278;\n\tPHP.Parser.prototype.T_SL_EQUAL = 279;\n\tPHP.Parser.prototype.T_SR_EQUAL = 280;\n\tPHP.Parser.prototype.T_POW_EQUAL = 281;\n\tPHP.Parser.prototype.T_COALESCE_EQUAL = 282;\n\tPHP.Parser.prototype.T_COALESCE = 283;\n\tPHP.Parser.prototype.T_BOOLEAN_OR = 284;\n\tPHP.Parser.prototype.T_BOOLEAN_AND = 285;\n\tPHP.Parser.prototype.T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG = 286;\n\tPHP.Parser.prototype.T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG = 287;\n\tPHP.Parser.prototype.T_IS_EQUAL = 288;\n\tPHP.Parser.prototype.T_IS_NOT_EQUAL = 289;\n\tPHP.Parser.prototype.T_IS_IDENTICAL = 290;\n\tPHP.Parser.prototype.T_IS_NOT_IDENTICAL = 291;\n\tPHP.Parser.prototype.T_SPACESHIP = 292;\n\tPHP.Parser.prototype.T_IS_SMALLER_OR_EQUAL = 293;\n\tPHP.Parser.prototype.T_IS_GREATER_OR_EQUAL = 294;\n\tPHP.Parser.prototype.T_SL = 295;\n\tPHP.Parser.prototype.T_SR = 296;\n\tPHP.Parser.prototype.T_INSTANCEOF = 297;\n\tPHP.Parser.prototype.T_INC = 298;\n\tPHP.Parser.prototype.T_DEC = 299;\n\tPHP.Parser.prototype.T_INT_CAST = 300;\n\tPHP.Parser.prototype.T_DOUBLE_CAST = 301;\n\tPHP.Parser.prototype.T_STRING_CAST = 302;\n\tPHP.Parser.prototype.T_ARRAY_CAST = 303;\n\tPHP.Parser.prototype.T_OBJECT_CAST = 304;\n\tPHP.Parser.prototype.T_BOOL_CAST = 305;\n\tPHP.Parser.prototype.T_UNSET_CAST = 306;\n\tPHP.Parser.prototype.T_POW = 307;\n\tPHP.Parser.prototype.T_NEW = 308;\n\tPHP.Parser.prototype.T_CLONE = 309;\n\tPHP.Parser.prototype.T_EXIT = 310;\n\tPHP.Parser.prototype.T_IF = 311;\n\tPHP.Parser.prototype.T_ELSEIF = 312;\n\tPHP.Parser.prototype.T_ELSE = 313;\n\tPHP.Parser.prototype.T_ENDIF = 314;\n\tPHP.Parser.prototype.T_LNUMBER = 315;\n\tPHP.Parser.prototype.T_DNUMBER = 316;\n\tPHP.Parser.prototype.T_STRING = 317;\n\tPHP.Parser.prototype.T_STRING_VARNAME = 318;\n\tPHP.Parser.prototype.T_VARIABLE = 319;\n\tPHP.Parser.prototype.T_NUM_STRING = 320;\n\tPHP.Parser.prototype.T_INLINE_HTML = 321;\n\tPHP.Parser.prototype.T_ENCAPSED_AND_WHITESPACE = 322;\n\tPHP.Parser.prototype.T_CONSTANT_ENCAPSED_STRING = 323;\n\tPHP.Parser.prototype.T_ECHO = 324;\n\tPHP.Parser.prototype.T_DO = 325;\n\tPHP.Parser.prototype.T_WHILE = 326;\n\tPHP.Parser.prototype.T_ENDWHILE = 327;\n\tPHP.Parser.prototype.T_FOR = 328;\n\tPHP.Parser.prototype.T_ENDFOR = 329;\n\tPHP.Parser.prototype.T_FOREACH = 330;\n\tPHP.Parser.prototype.T_ENDFOREACH = 331;\n\tPHP.Parser.prototype.T_DECLARE = 332;\n\tPHP.Parser.prototype.T_ENDDECLARE = 333;\n\tPHP.Parser.prototype.T_AS = 334;\n\tPHP.Parser.prototype.T_SWITCH = 335;\n\tPHP.Parser.prototype.T_MATCH = 336;\n\tPHP.Parser.prototype.T_ENDSWITCH = 337;\n\tPHP.Parser.prototype.T_CASE = 338;\n\tPHP.Parser.prototype.T_DEFAULT = 339;\n\tPHP.Parser.prototype.T_BREAK = 340;\n\tPHP.Parser.prototype.T_CONTINUE = 341;\n\tPHP.Parser.prototype.T_GOTO = 342;\n\tPHP.Parser.prototype.T_FUNCTION = 343;\n\tPHP.Parser.prototype.T_FN = 344;\n\tPHP.Parser.prototype.T_CONST = 345;\n\tPHP.Parser.prototype.T_RETURN = 346;\n\tPHP.Parser.prototype.T_TRY = 347;\n\tPHP.Parser.prototype.T_CATCH = 348;\n\tPHP.Parser.prototype.T_FINALLY = 349;\n\tPHP.Parser.prototype.T_USE = 350;\n\tPHP.Parser.prototype.T_INSTEADOF = 351;\n\tPHP.Parser.prototype.T_GLOBAL = 352;\n\tPHP.Parser.prototype.T_STATIC = 353;\n\tPHP.Parser.prototype.T_ABSTRACT = 354;\n\tPHP.Parser.prototype.T_FINAL = 355;\n\tPHP.Parser.prototype.T_PRIVATE = 356;\n\tPHP.Parser.prototype.T_PROTECTED = 357;\n\tPHP.Parser.prototype.T_PUBLIC = 358;\n\tPHP.Parser.prototype.T_READONLY = 359;\n\tPHP.Parser.prototype.T_VAR = 360;\n\tPHP.Parser.prototype.T_UNSET = 361;\n\tPHP.Parser.prototype.T_ISSET = 362;\n\tPHP.Parser.prototype.T_EMPTY = 363;\n\tPHP.Parser.prototype.T_HALT_COMPILER = 364;\n\tPHP.Parser.prototype.T_CLASS = 365;\n\tPHP.Parser.prototype.T_TRAIT = 366;\n\tPHP.Parser.prototype.T_INTERFACE = 367;\n\tPHP.Parser.prototype.T_ENUM = 368;\n\tPHP.Parser.prototype.T_EXTENDS = 369;\n\tPHP.Parser.prototype.T_IMPLEMENTS = 370;\n\tPHP.Parser.prototype.T_OBJECT_OPERATOR = 371;\n\tPHP.Parser.prototype.T_NULLSAFE_OBJECT_OPERATOR = 372;\n\tPHP.Parser.prototype.T_LIST = 373;\n\tPHP.Parser.prototype.T_ARRAY = 374;\n\tPHP.Parser.prototype.T_CALLABLE = 375;\n\tPHP.Parser.prototype.T_CLASS_C = 376;\n\tPHP.Parser.prototype.T_TRAIT_C = 377;\n\tPHP.Parser.prototype.T_METHOD_C = 378;\n\tPHP.Parser.prototype.T_FUNC_C = 379;\n\tPHP.Parser.prototype.T_LINE = 380;\n\tPHP.Parser.prototype.T_FILE = 381;\n\tPHP.Parser.prototype.T_START_HEREDOC = 382;\n\tPHP.Parser.prototype.T_END_HEREDOC = 383;\n\tPHP.Parser.prototype.T_DOLLAR_OPEN_CURLY_BRACES = 384;\n\tPHP.Parser.prototype.T_CURLY_OPEN = 385;\n\tPHP.Parser.prototype.T_PAAMAYIM_NEKUDOTAYIM = 386;\n\tPHP.Parser.prototype.T_NAMESPACE = 387;\n\tPHP.Parser.prototype.T_NS_C = 388;\n\tPHP.Parser.prototype.T_DIR = 389;\n\tPHP.Parser.prototype.T_NS_SEPARATOR = 390;\n\tPHP.Parser.prototype.T_ELLIPSIS = 391;\n\tPHP.Parser.prototype.T_NAME_FULLY_QUALIFIED = 392;\n\tPHP.Parser.prototype.T_NAME_QUALIFIED = 393;\n\tPHP.Parser.prototype.T_NAME_RELATIVE = 394;\n\tPHP.Parser.prototype.T_ATTRIBUTE = 395;\n\tPHP.Parser.prototype.T_BAD_CHARACTER = 396;\n\tPHP.Parser.prototype.T_COMMENT = 397;\n\tPHP.Parser.prototype.T_DOC_COMMENT = 398;\n\tPHP.Parser.prototype.T_OPEN_TAG = 399;\n\tPHP.Parser.prototype.T_OPEN_TAG_WITH_ECHO = 400;\n\tPHP.Parser.prototype.T_CLOSE_TAG = 401;\n\tPHP.Parser.prototype.T_WHITESPACE = 402;\n\tPHP.Parser.prototype.terminals = [\n\t\t\"EOF\",\n\t\t\"error\",\n\t\t\"T_THROW\",\n\t\t\"T_INCLUDE\",\n\t\t\"T_INCLUDE_ONCE\",\n\t\t\"T_EVAL\",\n\t\t\"T_REQUIRE\",\n\t\t\"T_REQUIRE_ONCE\",\n\t\t\"','\",\n\t\t\"T_LOGICAL_OR\",\n\t\t\"T_LOGICAL_XOR\",\n\t\t\"T_LOGICAL_AND\",\n\t\t\"T_PRINT\",\n\t\t\"T_YIELD\",\n\t\t\"T_DOUBLE_ARROW\",\n\t\t\"T_YIELD_FROM\",\n\t\t\"'='\",\n\t\t\"T_PLUS_EQUAL\",\n\t\t\"T_MINUS_EQUAL\",\n\t\t\"T_MUL_EQUAL\",\n\t\t\"T_DIV_EQUAL\",\n\t\t\"T_CONCAT_EQUAL\",\n\t\t\"T_MOD_EQUAL\",\n\t\t\"T_AND_EQUAL\",\n\t\t\"T_OR_EQUAL\",\n\t\t\"T_XOR_EQUAL\",\n\t\t\"T_SL_EQUAL\",\n\t\t\"T_SR_EQUAL\",\n\t\t\"T_POW_EQUAL\",\n\t\t\"T_COALESCE_EQUAL\",\n\t\t\"'?'\",\n\t\t\"':'\",\n\t\t\"T_COALESCE\",\n\t\t\"T_BOOLEAN_OR\",\n\t\t\"T_BOOLEAN_AND\",\n\t\t\"'|'\",\n\t\t\"'^'\",\n\t\t\"T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG\",\n\t\t\"T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG\",\n\t\t\"T_IS_EQUAL\",\n\t\t\"T_IS_NOT_EQUAL\",\n\t\t\"T_IS_IDENTICAL\",\n\t\t\"T_IS_NOT_IDENTICAL\",\n\t\t\"T_SPACESHIP\",\n\t\t\"'<'\",\n\t\t\"T_IS_SMALLER_OR_EQUAL\",\n\t\t\"'>'\",\n\t\t\"T_IS_GREATER_OR_EQUAL\",\n\t\t\"T_SL\",\n\t\t\"T_SR\",\n\t\t\"'+'\",\n\t\t\"'-'\",\n\t\t\"'.'\",\n\t\t\"'*'\",\n\t\t\"'/'\",\n\t\t\"'%'\",\n\t\t\"'!'\",\n\t\t\"T_INSTANCEOF\",\n\t\t\"'~'\",\n\t\t\"T_INC\",\n\t\t\"T_DEC\",\n\t\t\"T_INT_CAST\",\n\t\t\"T_DOUBLE_CAST\",\n\t\t\"T_STRING_CAST\",\n\t\t\"T_ARRAY_CAST\",\n\t\t\"T_OBJECT_CAST\",\n\t\t\"T_BOOL_CAST\",\n\t\t\"T_UNSET_CAST\",\n\t\t\"'@'\",\n\t\t\"T_POW\",\n\t\t\"'['\",\n\t\t\"T_NEW\",\n\t\t\"T_CLONE\",\n\t\t\"T_EXIT\",\n\t\t\"T_IF\",\n\t\t\"T_ELSEIF\",\n\t\t\"T_ELSE\",\n\t\t\"T_ENDIF\",\n\t\t\"T_LNUMBER\",\n\t\t\"T_DNUMBER\",\n\t\t\"T_STRING\",\n\t\t\"T_STRING_VARNAME\",\n\t\t\"T_VARIABLE\",\n\t\t\"T_NUM_STRING\",\n\t\t\"T_INLINE_HTML\",\n\t\t\"T_ENCAPSED_AND_WHITESPACE\",\n\t\t\"T_CONSTANT_ENCAPSED_STRING\",\n\t\t\"T_ECHO\",\n\t\t\"T_DO\",\n\t\t\"T_WHILE\",\n\t\t\"T_ENDWHILE\",\n\t\t\"T_FOR\",\n\t\t\"T_ENDFOR\",\n\t\t\"T_FOREACH\",\n\t\t\"T_ENDFOREACH\",\n\t\t\"T_DECLARE\",\n\t\t\"T_ENDDECLARE\",\n\t\t\"T_AS\",\n\t\t\"T_SWITCH\",\n\t\t\"T_MATCH\",\n\t\t\"T_ENDSWITCH\",\n\t\t\"T_CASE\",\n\t\t\"T_DEFAULT\",\n\t\t\"T_BREAK\",\n\t\t\"T_CONTINUE\",\n\t\t\"T_GOTO\",\n\t\t\"T_FUNCTION\",\n\t\t\"T_FN\",\n\t\t\"T_CONST\",\n\t\t\"T_RETURN\",\n\t\t\"T_TRY\",\n\t\t\"T_CATCH\",\n\t\t\"T_FINALLY\",\n\t\t\"T_USE\",\n\t\t\"T_INSTEADOF\",\n\t\t\"T_GLOBAL\",\n\t\t\"T_STATIC\",\n\t\t\"T_ABSTRACT\",\n\t\t\"T_FINAL\",\n\t\t\"T_PRIVATE\",\n\t\t\"T_PROTECTED\",\n\t\t\"T_PUBLIC\",\n\t\t\"T_READONLY\",\n\t\t\"T_VAR\",\n\t\t\"T_UNSET\",\n\t\t\"T_ISSET\",\n\t\t\"T_EMPTY\",\n\t\t\"T_HALT_COMPILER\",\n\t\t\"T_CLASS\",\n\t\t\"T_TRAIT\",\n\t\t\"T_INTERFACE\",\n\t\t\"T_ENUM\",\n\t\t\"T_EXTENDS\",\n\t\t\"T_IMPLEMENTS\",\n\t\t\"T_OBJECT_OPERATOR\",\n\t\t\"T_NULLSAFE_OBJECT_OPERATOR\",\n\t\t\"T_LIST\",\n\t\t\"T_ARRAY\",\n\t\t\"T_CALLABLE\",\n\t\t\"T_CLASS_C\",\n\t\t\"T_TRAIT_C\",\n\t\t\"T_METHOD_C\",\n\t\t\"T_FUNC_C\",\n\t\t\"T_LINE\",\n\t\t\"T_FILE\",\n\t\t\"T_START_HEREDOC\",\n\t\t\"T_END_HEREDOC\",\n\t\t\"T_DOLLAR_OPEN_CURLY_BRACES\",\n\t\t\"T_CURLY_OPEN\",\n\t\t\"T_PAAMAYIM_NEKUDOTAYIM\",\n\t\t\"T_NAMESPACE\",\n\t\t\"T_NS_C\",\n\t\t\"T_DIR\",\n\t\t\"T_NS_SEPARATOR\",\n\t\t\"T_ELLIPSIS\",\n\t\t\"T_NAME_FULLY_QUALIFIED\",\n\t\t\"T_NAME_QUALIFIED\",\n\t\t\"T_NAME_RELATIVE\",\n\t\t\"T_ATTRIBUTE\",\n\t\t\"';'\",\n\t\t\"']'\",\n\t\t\"'{'\",\n\t\t\"'}'\",\n\t\t\"'('\",\n\t\t\"')'\",\n\t\t\"'`'\",\n\t\t\"'\\\"'\",\n\t\t\"'$'\",\n\t\t\"T_BAD_CHARACTER\",\n\t\t\"T_COMMENT\",\n\t\t\"T_DOC_COMMENT\",\n\t\t\"T_OPEN_TAG\",\n\t\t\"T_OPEN_TAG_WITH_ECHO\",\n\t\t\"T_CLOSE_TAG\",\n\t\t\"T_WHITESPACE\"\n\t\t, \"???\"\n\t];\n\tPHP.Parser.prototype.translate = [\n\t\t0,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,   56,  166,  175,  167,   55,  175,  175,\n\t\t163,  164,   53,   50,    8,   51,   52,   54,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,   31,  159,\n\t\t44,   16,   46,   30,   68,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,   70,  175,  160,   36,  175,  165,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  161,   35,  162,   58,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,  175,  175,  175,  175,\n\t\t175,  175,  175,  175,  175,  175,    1,    2,    3,    4,\n\t\t5,    6,    7,    9,   10,   11,   12,   13,   14,   15,\n\t\t17,   18,   19,   20,   21,   22,   23,   24,   25,   26,\n\t\t27,   28,   29,   32,   33,   34,   37,   38,   39,   40,\n\t\t41,   42,   43,   45,   47,   48,   49,   57,   59,   60,\n\t\t61,   62,   63,   64,   65,   66,   67,   69,   71,   72,\n\t\t73,   74,   75,   76,   77,   78,   79,   80,   81,   82,\n\t\t83,   84,   85,   86,   87,   88,   89,   90,   91,   92,\n\t\t93,   94,   95,   96,   97,   98,   99,  100,  101,  102,\n\t\t103,  104,  105,  106,  107,  108,  109,  110,  111,  112,\n\t\t113,  114,  115,  116,  117,  118,  119,  120,  121,  122,\n\t\t123,  124,  125,  126,  127,  128,  129,  130,  131,  132,\n\t\t133,  134,  135,  136,  137,  138,  139,  140,  141,  142,\n\t\t143,  144,  145,  146,  147,  148,  149,  150,  151,  152,\n\t\t153,  154,  155,  156,  157,  158,  168,  169,  170,  171,\n\t\t172,  173,  174\n\t];\n\n\tPHP.Parser.prototype.yyaction = [\n\t\t132,  133,  134,  569,  135,  136,    0,  722,  723,  724,\n\t\t137,   37,  834,  911,  835,  469,-32766,-32766,-32766,-32767,\n\t\t-32767,-32767,-32767,  101,  102,  103,  104,  105, 1068, 1069,\n\t\t1070, 1067, 1066, 1065, 1071,  716,  715,-32766,-32766,-32766,\n\t\t-32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,\n\t\t-32767,  545,  546,-32766,-32766,  725,-32766,-32766,-32766,  998,\n\t\t999,  806,  922,  447,  448,  449,  370,  371,    2,  267,\n\t\t138,  396,  729,  730,  731,  732,  414,-32766,  420,-32766,\n\t\t-32766,-32766,-32766,-32766,  990,  733,  734,  735,  736,  737,\n\t\t738,  739,  740,  741,  742,  743,  763,  570,  764,  765,\n\t\t766,  767,  755,  756,  336,  337,  758,  759,  744,  745,\n\t\t746,  748,  749,  750,  346,  790,  791,  792,  793,  794,\n\t\t795,  751,  752,  571,  572,  784,  775,  773,  774,  787,\n\t\t770,  771,  283,  420,  573,  574,  769,  575,  576,  577,\n\t\t578,  579,  580,  598, -575,  470,   14,  798,  772,  581,\n\t\t582, -575,  139,-32766,-32766,-32766,  132,  133,  134,  569,\n\t\t135,  136, 1017,  722,  723,  724,  137,   37, 1060,-32766,\n\t\t-32766,-32766, 1303,  696,-32766, 1304,-32766,-32766,-32766,-32766,\n\t\t-32766,-32766,-32766, 1068, 1069, 1070, 1067, 1066, 1065, 1071,\n\t\t-32766,  716,  715,  372,  371, 1258,-32766,-32766,-32766, -572,\n\t\t106,  107,  108,  414,  270,  891, -572,  240, 1193, 1192,\n\t\t1194,  725,-32766,-32766,-32766, 1046,  109,-32766,-32766,-32766,\n\t\t-32766,  986,  985,  984,  987,  267,  138,  396,  729,  730,\n\t\t731,  732,   12,-32766,  420,-32766,-32766,-32766,-32766,  998,\n\t\t999,  733,  734,  735,  736,  737,  738,  739,  740,  741,\n\t\t742,  743,  763,  570,  764,  765,  766,  767,  755,  756,\n\t\t336,  337,  758,  759,  744,  745,  746,  748,  749,  750,\n\t\t346,  790,  791,  792,  793,  794,  795,  751,  752,  571,\n\t\t572,  784,  775,  773,  774,  787,  770,  771,  881,  321,\n\t\t573,  574,  769,  575,  576,  577,  578,  579,  580,-32766,\n\t\t82,   83,   84, -575,  772,  581,  582, -575,  148,  747,\n\t\t717,  718,  719,  720,  721, 1278,  722,  723,  724,  760,\n\t\t761,   36, 1277,   85,   86,   87,   88,   89,   90,   91,\n\t\t92,   93,   94,   95,   96,   97,   98,   99,  100,  101,\n\t\t102,  103,  104,  105,  106,  107,  108,  996,  270,  150,\n\t\t-32766,-32766,-32766,  455,  456,   81,   34, -264, -572, 1016,\n\t\t109,  320, -572,  893,  725,  682,  803,  128,  998,  999,\n\t\t592,-32766, 1044,-32766,-32766,-32766,  809,  151,  726,  727,\n\t\t728,  729,  730,  731,  732,  -88, 1198,  796,  278, -526,\n\t\t283,-32766,-32766,-32766,  733,  734,  735,  736,  737,  738,\n\t\t739,  740,  741,  742,  743,  763,  786,  764,  765,  766,\n\t\t767,  755,  756,  757,  785,  758,  759,  744,  745,  746,\n\t\t748,  749,  750,  789,  790,  791,  792,  793,  794,  795,\n\t\t751,  752,  753,  754,  784,  775,  773,  774,  787,  770,\n\t\t771,  144,  804,  762,  768,  769,  776,  777,  779,  778,\n\t\t780,  781, -314, -526, -526, -193, -192,  772,  783,  782,\n\t\t49,   50,   51,  500,   52,   53,  239,  807, -526,  -86,\n\t\t54,   55, -111,   56,  996,  253,-32766, -111,  800, -111,\n\t\t-526,  541, -532, -352,  300, -352,  304, -111, -111, -111,\n\t\t-111, -111, -111, -111, -111,  998,  999,  998,  999,  153,\n\t\t-32766,-32766,-32766, 1191,  807,  126,  306, 1293,   57,   58,\n\t\t103,  104,  105, -111,   59, 1218,   60,  246,  247,   61,\n\t\t62,   63,   64,   65,   66,   67,   68, -525,   27,  268,\n\t\t69,  436,  501, -328,  808,  -86, 1224, 1225,  502, 1189,\n\t\t807, 1198, 1230,  293, 1222,   41,   24,  503,   74,  504,\n\t\t953,  505,  320,  506,  802,  154,  507,  508,  279,  684,\n\t\t280,   43,   44,  437,  367,  366,  891,   45,  509,   35,\n\t\t249,  -16, -566,  358,  332,  318, -566, 1198, 1193, 1192,\n\t\t1194, -527,  510,  511,  512,  333, -524, 1274,   48,  716,\n\t\t715, -525, -525,  334,  513,  514,  807, 1212, 1213, 1214,\n\t\t1215, 1209, 1210,  292,  360,  284, -525,  285, -314, 1216,\n\t\t1211, -193, -192, 1193, 1192, 1194,  293,  891, -525,  364,\n\t\t-531,   70,  807,  316,  317,  320,   31,  110,  111,  112,\n\t\t113,  114,  115,  116,  117,  118,  119,  120,  121,  122,\n\t\t-153, -153, -153,  638,   25, -527, -527,  687,  379,  881,\n\t\t-524, -524,  296,  297,  891, -153,  432, -153,  807, -153,\n\t\t-527, -153,  716,  715,  433, -524,  798,  363, -111, 1105,\n\t\t1107,  365, -527,  434,  891,  140,  435, -524,  954,  127,\n\t\t-524,  320, -111, -111,  688,  813,  381, -529,   11,  834,\n\t\t155,  835,  867, -111, -111, -111, -111,   47,  293,-32766,\n\t\t881,  654,  655,   74,  689, 1191, 1045,  320,  708,  149,\n\t\t399,  157,-32766,-32766,-32766,   32,-32766,  -79,-32766,  123,\n\t\t-32766,  716,  715,-32766,  893,  891,  682, -153,-32766,-32766,\n\t\t-32766,  716,  715,  891,-32766,-32766,  124,  881,  129,   74,\n\t\t-32766,  411,  130,  320, -524, -524,  143,  141,  -75,-32766,\n\t\t158, -529, -529,  320,   27,  691,  159,  881,  160, -524,\n\t\t161,  294,  295,  698,  368,  369,  807,  -73,-32766,  -72,\n\t\t1222, -524,  373,  374, 1191,  893,  -71,  682, -529,   73,\n\t\t-70,-32766,-32766,-32766,  -69,-32766,  -68,-32766,  125,-32766,\n\t\t630,  631,-32766,  -67,  -66,  -47,  -51,-32766,-32766,-32766,\n\t\t-18,  147,  271,-32766,-32766,  277,  697,  700,  881,-32766,\n\t\t411,  890,  893,  146,  682,  282,  881,  907,-32766,  281,\n\t\t513,  514,  286, 1212, 1213, 1214, 1215, 1209, 1210,  326,\n\t\t131,  145,  939,  287,  682, 1216, 1211,  109,  270,-32766,\n\t\t798,  807,-32766,  662,  639, 1191,  657,   72,  675, 1075,\n\t\t317,  320,-32766,-32766,-32766, 1305,-32766,  301,-32766,  628,\n\t\t-32766,  431,  543,-32766,-32766,  923,  555,  924,-32766,-32766,\n\t\t-32766, 1229,  549,-32766,-32766,-32766,   -4,  891, -490, 1191,\n\t\t-32766,  411,  644,  893,  299,  682,-32766,-32766,-32766,-32766,\n\t\t-32766,  893,-32766,  682,-32766,   13, 1231,-32766,  452,  480,\n\t\t645,  909,-32766,-32766,-32766,-32766,  658, -480,-32766,-32766,\n\t\t0, 1191,    0,    0,-32766,  411,    0,  298,-32766,-32766,\n\t\t-32766,  305,-32766,-32766,-32766,    0,-32766,    0,  806,-32766,\n\t\t0,    0,    0,  475,-32766,-32766,-32766,-32766,    0,    7,\n\t\t-32766,-32766,   16, 1191,  561,  596,-32766,  411, 1219,  891,\n\t\t-32766,-32766,-32766,  362,-32766,-32766,-32766,  818,-32766, -267,\n\t\t881,-32766,   39,  293,    0,    0,-32766,-32766,-32766,   40,\n\t\t705,  706,-32766,-32766,  872,  963,  940,  947,-32766,  411,\n\t\t937,  948,  365,  870,  427,  891,  935,-32766, 1049,  291,\n\t\t1244, 1052, 1053, -111, -111, 1050, 1051, 1057, -560, 1262,\n\t\t1296,  633,    0,  826, -111, -111, -111, -111,   33,  315,\n\t\t-32766,  361,  683,  686,  690,  692, 1191,  693,  694,  695,\n\t\t699,  685,  320,-32766,-32766,-32766,    9,-32766,  702,-32766,\n\t\t868,-32766,  881, 1300,-32766,  893, 1302,  682,   -4,-32766,\n\t\t-32766,-32766,  829,  828,  837,-32766,-32766,  916, -242, -242,\n\t\t-242,-32766,  411,  955,  365,   27,  836, 1301,  915,  917,\n\t\t-32766,  914, 1177,  900,  910, -111, -111,  807,  881,  898,\n\t\t945, 1222,  946, 1299, 1256,  867, -111, -111, -111, -111,\n\t\t1245, 1263, 1269, 1272, -241, -241, -241, -558, -532, -531,\n\t\t365, -530,    1,   28,   29,   38,   42,   46,   71,    0,\n\t\t75, -111, -111,   76,   77,   78,   79,  893,   80,  682,\n\t\t-242,  867, -111, -111, -111, -111,  142,  152,  156,  245,\n\t\t322,  347,  514,  348, 1212, 1213, 1214, 1215, 1209, 1210,\n\t\t349,  350,  351,  352,  353,  354, 1216, 1211,  355,  356,\n\t\t357,  359,  428,  893, -265,  682, -241, -264,   72,    0,\n\t\t18,  317,  320,   19,   20,   21,   23,  398,  471,  472,\n\t\t479,  482,  483,  484,  485,  489,  490,  491,  498,  669,\n\t\t1202, 1145, 1220, 1019, 1018, 1181, -269, -103,   17,   22,\n\t\t26,  290,  397,  589,  593,  620,  674, 1149, 1197, 1146,\n\t\t1275,    0, -494, 1162,    0, 1223\n\t];\n\n\tPHP.Parser.prototype.yycheck = [\n\t\t2,    3,    4,    5,    6,    7,    0,    9,   10,   11,\n\t\t12,   13,  106,    1,  108,   31,    9,   10,   11,   44,\n\t\t45,   46,   47,   48,   49,   50,   51,   52,  116,  117,\n\t\t118,  119,  120,  121,  122,   37,   38,   30,  116,   32,\n\t\t33,   34,   35,   36,   37,   38,   39,   40,   41,   42,\n\t\t43,  117,  118,    9,   10,   57,    9,   10,   11,  137,\n\t\t138,  155,  128,  129,  130,  131,  106,  107,    8,   71,\n\t\t72,   73,   74,   75,   76,   77,  116,   30,   80,   32,\n\t\t33,   34,   35,   36,    1,   87,   88,   89,   90,   91,\n\t\t92,   93,   94,   95,   96,   97,   98,   99,  100,  101,\n\t\t102,  103,  104,  105,  106,  107,  108,  109,  110,  111,\n\t\t112,  113,  114,  115,  116,  117,  118,  119,  120,  121,\n\t\t122,  123,  124,  125,  126,  127,  128,  129,  130,  131,\n\t\t132,  133,   30,   80,  136,  137,  138,  139,  140,  141,\n\t\t142,  143,  144,   51,    1,  161,  101,   80,  150,  151,\n\t\t152,    8,  154,    9,   10,   11,    2,    3,    4,    5,\n\t\t6,    7,  164,    9,   10,   11,   12,   13,  123,    9,\n\t\t10,   11,   80,  161,   30,   83,   32,   33,   34,   35,\n\t\t36,   37,   38,  116,  117,  118,  119,  120,  121,  122,\n\t\t30,   37,   38,  106,  107,    1,    9,   10,   11,    1,\n\t\t53,   54,   55,  116,   57,    1,    8,   14,  155,  156,\n\t\t157,   57,    9,   10,   11,  162,   69,   30,  116,   32,\n\t\t33,  119,  120,  121,  122,   71,   72,   73,   74,   75,\n\t\t76,   77,    8,   30,   80,   32,   33,   34,   35,  137,\n\t\t138,   87,   88,   89,   90,   91,   92,   93,   94,   95,\n\t\t96,   97,   98,   99,  100,  101,  102,  103,  104,  105,\n\t\t106,  107,  108,  109,  110,  111,  112,  113,  114,  115,\n\t\t116,  117,  118,  119,  120,  121,  122,  123,  124,  125,\n\t\t126,  127,  128,  129,  130,  131,  132,  133,   84,   70,\n\t\t136,  137,  138,  139,  140,  141,  142,  143,  144,    9,\n\t\t9,   10,   11,  160,  150,  151,  152,  164,  154,    2,\n\t\t3,    4,    5,    6,    7,    1,    9,   10,   11,   12,\n\t\t13,   30,    8,   32,   33,   34,   35,   36,   37,   38,\n\t\t39,   40,   41,   42,   43,   44,   45,   46,   47,   48,\n\t\t49,   50,   51,   52,   53,   54,   55,  116,   57,   14,\n\t\t9,   10,   11,  134,  135,  161,    8,  164,  160,    1,\n\t\t69,  167,  164,  159,   57,  161,   80,    8,  137,  138,\n\t\t1,   30,    1,   32,   33,   34,    1,   14,   71,   72,\n\t\t73,   74,   75,   76,   77,   31,    1,   80,   30,   70,\n\t\t30,    9,   10,   11,   87,   88,   89,   90,   91,   92,\n\t\t93,   94,   95,   96,   97,   98,   99,  100,  101,  102,\n\t\t103,  104,  105,  106,  107,  108,  109,  110,  111,  112,\n\t\t113,  114,  115,  116,  117,  118,  119,  120,  121,  122,\n\t\t123,  124,  125,  126,  127,  128,  129,  130,  131,  132,\n\t\t133,    8,  156,  136,  137,  138,  139,  140,  141,  142,\n\t\t143,  144,    8,  134,  135,    8,    8,  150,  151,  152,\n\t\t2,    3,    4,    5,    6,    7,   97,   82,  149,   31,\n\t\t12,   13,  101,   15,  116,    8,  116,  106,   80,  108,\n\t\t161,   85,  163,  106,  113,  108,    8,  116,  117,  118,\n\t\t119,  120,  121,  122,  123,  137,  138,  137,  138,   14,\n\t\t9,   10,   11,   80,   82,   14,    8,   85,   50,   51,\n\t\t50,   51,   52,  128,   56,    1,   58,   59,   60,   61,\n\t\t62,   63,   64,   65,   66,   67,   68,   70,   70,   71,\n\t\t72,   73,   74,  162,  159,   97,   78,   79,   80,  116,\n\t\t82,    1,  146,  158,   86,   87,   88,   89,  163,   91,\n\t\t31,   93,  167,   95,  156,   14,   98,   99,   35,  161,\n\t\t37,  103,  104,  105,  106,  107,    1,  109,  110,  147,\n\t\t148,   31,  160,  115,  116,    8,  164,    1,  155,  156,\n\t\t157,   70,  124,  125,  126,    8,   70,    1,   70,   37,\n\t\t38,  134,  135,    8,  136,  137,   82,  139,  140,  141,\n\t\t142,  143,  144,  145,    8,   35,  149,   37,  164,  151,\n\t\t152,  164,  164,  155,  156,  157,  158,    1,  161,    8,\n\t\t163,  163,   82,  165,  166,  167,   16,   17,   18,   19,\n\t\t20,   21,   22,   23,   24,   25,   26,   27,   28,   29,\n\t\t75,   76,   77,   75,   76,  134,  135,   31,    8,   84,\n\t\t134,  135,  134,  135,    1,   90,    8,   92,   82,   94,\n\t\t149,   96,   37,   38,    8,  149,   80,  149,  128,   59,\n\t\t60,  106,  161,    8,    1,  161,    8,  161,  159,  161,\n\t\t70,  167,  117,  118,   31,    8,  106,   70,  108,  106,\n\t\t14,  108,  127,  128,  129,  130,  131,   70,  158,   74,\n\t\t84,   75,   76,  163,   31,   80,  159,  167,  161,  101,\n\t\t102,   14,   87,   88,   89,   14,   91,   31,   93,   16,\n\t\t95,   37,   38,   98,  159,    1,  161,  162,  103,  104,\n\t\t105,   37,   38,    1,  109,  110,   16,   84,   16,  163,\n\t\t115,  116,   16,  167,  134,  135,   16,  161,   31,  124,\n\t\t16,  134,  135,  167,   70,   31,   16,   84,   16,  149,\n\t\t16,  134,  135,   31,  106,  107,   82,   31,   74,   31,\n\t\t86,  161,  106,  107,   80,  159,   31,  161,  161,  154,\n\t\t31,   87,   88,   89,   31,   91,   31,   93,  161,   95,\n\t\t111,  112,   98,   31,   31,   31,   31,  103,  104,  105,\n\t\t31,   31,   31,  109,  110,   31,   31,   31,   84,  115,\n\t\t116,   31,  159,   31,  161,   37,   84,   38,  124,   35,\n\t\t136,  137,   35,  139,  140,  141,  142,  143,  144,   35,\n\t\t31,   70,  159,   37,  161,  151,  152,   69,   57,   74,\n\t\t80,   82,   85,   77,   90,   80,   94,  163,   92,   82,\n\t\t166,  167,   87,   88,   89,   83,   91,  114,   93,  113,\n\t\t95,  128,   85,   98,  116,  128,  153,  128,  103,  104,\n\t\t105,  146,   89,   74,  109,  110,    0,    1,  149,   80,\n\t\t115,  116,   96,  159,  133,  161,   87,   88,   89,  124,\n\t\t91,  159,   93,  161,   95,   97,  146,   98,   97,   97,\n\t\t100,  154,  103,  104,  105,   74,  100,  149,  109,  110,\n\t\t-1,   80,   -1,   -1,  115,  116,   -1,  132,   87,   88,\n\t\t89,  132,   91,  124,   93,   -1,   95,   -1,  155,   98,\n\t\t-1,   -1,   -1,  102,  103,  104,  105,   74,   -1,  149,\n\t\t109,  110,  149,   80,   81,  153,  115,  116,  160,    1,\n\t\t87,   88,   89,  149,   91,  124,   93,  160,   95,  164,\n\t\t84,   98,  159,  158,   -1,   -1,  103,  104,  105,  159,\n\t\t159,  159,  109,  110,  159,  159,  159,  159,  115,  116,\n\t\t159,  159,  106,  159,  108,    1,  159,  124,  159,  113,\n\t\t160,  159,  159,  117,  118,  159,  159,  159,  163,  160,\n\t\t160,  160,   -1,  127,  128,  129,  130,  131,  161,  161,\n\t\t74,  161,  161,  161,  161,  161,   80,  161,  161,  161,\n\t\t161,  161,  167,   87,   88,   89,  150,   91,  162,   93,\n\t\t162,   95,   84,  162,   98,  159,  162,  161,  162,  103,\n\t\t104,  105,  162,  162,  162,  109,  110,  162,  100,  101,\n\t\t102,  115,  116,  162,  106,   70,  162,  162,  162,  162,\n\t\t124,  162,  162,  162,  162,  117,  118,   82,   84,  162,\n\t\t162,   86,  162,  162,  162,  127,  128,  129,  130,  131,\n\t\t162,  162,  162,  162,  100,  101,  102,  163,  163,  163,\n\t\t106,  163,  163,  163,  163,  163,  163,  163,  163,   -1,\n\t\t163,  117,  118,  163,  163,  163,  163,  159,  163,  161,\n\t\t162,  127,  128,  129,  130,  131,  163,  163,  163,  163,\n\t\t163,  163,  137,  163,  139,  140,  141,  142,  143,  144,\n\t\t163,  163,  163,  163,  163,  163,  151,  152,  163,  163,\n\t\t163,  163,  163,  159,  164,  161,  162,  164,  163,   -1,\n\t\t164,  166,  167,  164,  164,  164,  164,  164,  164,  164,\n\t\t164,  164,  164,  164,  164,  164,  164,  164,  164,  164,\n\t\t164,  164,  164,  164,  164,  164,  164,  164,  164,  164,\n\t\t164,  164,  164,  164,  164,  164,  164,  164,  164,  164,\n\t\t164,   -1,  165,  165,   -1,  166\n\t];\n\n\tPHP.Parser.prototype.yybase = [\n\t\t0,   -2,  154,  565,  876,  948,  984,  514,   53,  398,\n\t\t837,  307,  307,   67,  307,  307,  307,  653,  724,  724,\n\t\t732,  724,  616,  673,  204,  204,  204,  625,  625,  625,\n\t\t625,  694,  694,  831,  831,  863,  799,  765,  936,  936,\n\t\t936,  936,  936,  936,  936,  936,  936,  936,  936,  936,\n\t\t936,  936,  936,  936,  936,  936,  936,  936,  936,  936,\n\t\t936,  936,  936,  936,  936,  936,  936,  936,  936,  936,\n\t\t936,  936,  936,  936,  936,  936,  936,  936,  936,  936,\n\t\t936,  936,  936,  936,  936,  936,  936,  936,  936,  936,\n\t\t936,  936,  936,  936,  936,  936,  936,  936,  936,  936,\n\t\t936,  936,  936,  936,  936,  936,  936,  936,  936,  936,\n\t\t936,  936,  936,  936,  936,  936,  936,  936,  936,  936,\n\t\t936,  936,  936,  936,  936,  936,  936,  936,  936,  936,\n\t\t936,  936,  936,  936,  936,  936,  936,  936,  936,  936,\n\t\t936,  936,  936,  936,  936,  936,  936,  936,  936,  936,\n\t\t936,  936,  936,  936,  936,  936,  936,  936,  936,  936,\n\t\t936,  936,  375,  519,  369,  701, 1017, 1023, 1019, 1024,\n\t\t1015, 1014, 1018, 1020, 1025,  911,  912,  782,  918,  919,\n\t\t920,  921, 1021,  841, 1016, 1022,  291,  291,  291,  291,\n\t\t291,  291,  291,  291,  291,  291,  291,  291,  291,  291,\n\t\t291,  291,  291,  291,  291,  291,  291,  291,  291,  291,\n\t\t291,  291,  290,  491,   44,  382,  382,  382,  382,  382,\n\t\t382,  382,  382,  382,  382,  382,  382,  382,  382,  382,\n\t\t382,  382,  382,  382,  382,  160,  160,  160,  187,  684,\n\t\t684,  341,  203,  610,   47,  985,  985,  985,  985,  985,\n\t\t985,  985,  985,  985,  985,  144,  144,    7,    7,    7,\n\t\t7,    7,  371,  -25,  -25,  -25,  -25,  540,  385,  102,\n\t\t576,  358,   45,  377,  460,  460,  360,  231,  231,  231,\n\t\t231,  231,  231,  -78,  -78,  -78,  -78,  -78,  -66,  319,\n\t\t457,  -94,  396,  423,  586,  586,  586,  586,  423,  423,\n\t\t423,  423,  750, 1029,  423,  423,  423,  511,  516,  516,\n\t\t518,  147,  147,  147,  516,  583,  777,  422,  583,  422,\n\t\t194,   92,  748,  -40,   87,  412,  748,  617,  627,  198,\n\t\t143,  773,  658,  773, 1013,  757,  764,  717,  838,  860,\n\t\t1026,  800,  908,  806,  910,  219,  686, 1012, 1012, 1012,\n\t\t1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012,  855,  552,\n\t\t1013,  286,  855,  855,  855,  552,  552,  552,  552,  552,\n\t\t552,  552,  552,  552,  552,  679,  286,  568,  626,  286,\n\t\t794,  552,  375,  758,  375,  375,  375,  375,  958,  375,\n\t\t375,  375,  375,  375,  375,  970,  769,  -16,  375,  519,\n\t\t12,   12,  547,   83,   12,   12,   12,   12,  375,  375,\n\t\t375,  658,  781,  713,  666,  792,  448,  781,  781,  781,\n\t\t438,  444,  193,  447,  570,  523,  580,  760,  760,  767,\n\t\t929,  929,  760,  759,  760,  767,  934,  760,  929,  805,\n\t\t359,  648,  577,  611,  656,  929,  478,  760,  760,  760,\n\t\t760,  665,  760,  467,  433,  760,  760,  785,  774,  789,\n\t\t60,  929,  929,  929,  789,  596,  751,  751,  751,  811,\n\t\t812,  746,  771,  567,  498,  677,  348,  779,  771,  771,\n\t\t760,  640,  746,  771,  746,  771,  747,  771,  771,  771,\n\t\t746,  771,  759,  585,  771,  734,  668,  224,  771,    6,\n\t\t935,  937,  354,  940,  932,  941,  979,  942,  943,  851,\n\t\t956,  933,  945,  931,  930,  780,  703,  720,  790,  729,\n\t\t928,  768,  768,  768,  925,  768,  768,  768,  768,  768,\n\t\t768,  768,  768,  703,  788,  804,  733,  783,  960,  722,\n\t\t726,  725,  868, 1027, 1028,  737,  739,  958, 1006,  953,\n\t\t803,  730,  992,  967,  866,  848,  968,  969,  993, 1007,\n\t\t1008,  871,  761,  874,  880,  797,  971,  852,  768,  935,\n\t\t943,  933,  945,  931,  930,  763,  762,  753,  755,  749,\n\t\t745,  736,  738,  770, 1009,  924,  835,  830,  970,  926,\n\t\t703,  839,  986,  847,  994,  995,  850,  801,  772,  840,\n\t\t881,  972,  975,  976,  853, 1010,  810,  989,  795,  996,\n\t\t802,  882,  997,  998,  999, 1000,  885,  854,  856,  857,\n\t\t815,  754,  980,  786,  891,  335,  787,  796,  978,  363,\n\t\t957,  858,  894,  895, 1001, 1002, 1003,  896,  954,  816,\n\t\t990,  752,  991,  983,  817,  818,  485,  784,  778,  541,\n\t\t676,  897,  899,  900,  955,  775,  766,  821,  822, 1011,\n\t\t901,  697,  824,  740,  902, 1005,  742,  744,  756,  859,\n\t\t793,  743,  798,  977,  776,  827,  907,  829,  832,  833,\n\t\t1004,  836,    0,    0,    0,    0,    0,    0,    0,    0,\n\t\t0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n\t\t0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n\t\t0,  458,  458,  458,  458,  458,  458,  307,  307,  307,\n\t\t307,    0,    0,  307,    0,    0,    0,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  458,  458,  458,  458,  458,  458,  458,  458,\n\t\t458,  458,  291,  291,  291,  291,  291,  291,  291,  291,\n\t\t291,  291,  291,  291,  291,  291,  291,  291,  291,  291,\n\t\t291,  291,  291,  291,  291,  291,    0,    0,    0,    0,\n\t\t0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n\t\t0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n\t\t0,    0,  291,  291,  291,  291,  291,  291,  291,  291,\n\t\t291,  291,  291,  291,  291,  291,  291,  291,  291,  291,\n\t\t291,  291,  291,  291,  291,  291,  291,  291,  291,  423,\n\t\t423,  291,  291,    0,  291,  423,  423,  423,  423,  423,\n\t\t423,  423,  423,  423,  423,  291,  291,  291,  291,  291,\n\t\t291,  291,  805,  147,  147,  147,  147,  423,  423,  423,\n\t\t423,  423,  -88,  -88,  147,  147,  423,  423,  423,  423,\n\t\t423,  423,  423,  423,  423,  423,  423,  423,    0,    0,\n\t\t0,  286,  422,    0,  759,  759,  759,  759,    0,    0,\n\t\t0,    0,  422,  422,    0,    0,    0,    0,    0,    0,\n\t\t0,    0,    0,    0,    0,  286,  422,    0,  286,    0,\n\t\t759,  759,  423,  805,  805,  314,  423,    0,    0,    0,\n\t\t0,  286,  759,  286,  552,  422,  552,  552,   12,  375,\n\t\t314,  608,  608,  608,  608,    0,  658,  805,  805,  805,\n\t\t805,  805,  805,  805,  805,  805,  805,  805,  759,    0,\n\t\t805,    0,  759,  759,  759,    0,    0,    0,    0,    0,\n\t\t0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n\t\t759,    0,    0,  929,    0,    0,    0,    0,  760,    0,\n\t\t0,    0,    0,    0,    0,  760,  934,    0,    0,    0,\n\t\t0,    0,    0,  759,    0,    0,    0,    0,    0,    0,\n\t\t0,    0,  768,  801,    0,  801,    0,  768,  768,  768\n\t];\n\n\tPHP.Parser.prototype.yydefault = [\n\t\t3,32767,  103,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,  101,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,  578,  578,  578,\n\t\t578,32767,32767,  246,  103,32767,32767,  454,  372,  372,\n\t\t372,32767,32767,  522,  522,  522,  522,  522,  522,32767,\n\t\t32767,32767,32767,32767,32767,  454,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,  101,32767,\n\t\t32767,32767,   37,    7,    8,   10,   11,   50,   17,  310,\n\t\t32767,32767,32767,32767,  103,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,  571,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,  458,  437,  438,  440,\n\t\t441,  371,  523,  577,  313,  574,  370,  146,  325,  315,\n\t\t234,  316,  250,  459,  251,  460,  463,  464,  211,  279,\n\t\t367,  150,  401,  455,  403,  453,  457,  402,  377,  382,\n\t\t383,  384,  385,  386,  387,  388,  389,  390,  391,  392,\n\t\t393,  394,  375,  376,  456,  434,  433,  432,  399,32767,\n\t\t32767,  400,  404,  374,  407,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,  103,32767,  405,  406,  423,  424,  421,\n\t\t422,  425,32767,  426,  427,  428,  429,32767,32767,  302,\n\t\t32767,32767,  351,  349,  414,  415,  302,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,  516,\n\t\t431,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,  103,32767,  101,  518,  396,  398,\n\t\t486,  409,  410,  408,  378,32767,  493,32767,  103,  495,\n\t\t32767,32767,32767,  112,32767,32767,32767,  517,32767,  524,\n\t\t524,32767,  479,  101,  194,32767,  194,  194,32767,32767,\n\t\t32767,32767,32767,32767,32767,  585,  479,  111,  111,  111,\n\t\t111,  111,  111,  111,  111,  111,  111,  111,32767,  194,\n\t\t111,32767,32767,32767,  101,  194,  194,  194,  194,  194,\n\t\t194,  194,  194,  194,  194,  189,32767,  260,  262,  103,\n\t\t539,  194,32767,  498,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,  491,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,  479,  419,  139,32767,  139,  524,  411,  412,  413,\n\t\t481,  524,  524,  524,  298,  281,32767,32767,32767,32767,\n\t\t496,  496,  101,  101,  101,  101,  491,32767,32767,  112,\n\t\t100,  100,  100,  100,  100,  104,  102,32767,32767,32767,\n\t\t32767,  100,32767,  102,  102,32767,32767,  217,  208,  215,\n\t\t102,32767,  543,  544,  215,  102,  219,  219,  219,  239,\n\t\t239,  470,  304,  102,  100,  102,  102,  196,  304,  304,\n\t\t32767,  102,  470,  304,  470,  304,  198,  304,  304,  304,\n\t\t470,  304,32767,  102,  304,  210,  100,  100,  304,32767,\n\t\t32767,32767,  481,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,  511,32767,  528,\n\t\t541,  417,  418,  420,  526,  442,  443,  444,  445,  446,\n\t\t447,  448,  450,  573,32767,  485,32767,32767,32767,32767,\n\t\t324,  583,32767,  583,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,  584,32767,  524,32767,32767,32767,32767,  416,    9,\n\t\t76,   43,   44,   52,   58,  502,  503,  504,  505,  499,\n\t\t500,  506,  501,32767,32767,  507,  549,32767,32767,  525,\n\t\t576,32767,32767,32767,32767,32767,32767,  139,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,  511,32767,\n\t\t137,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,  524,32767,32767,32767,  300,  301,32767,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,  524,32767,32767,32767,  283,  284,32767,\n\t\t32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,32767,  278,32767,32767,  366,32767,32767,32767,\n\t\t32767,  345,32767,32767,32767,32767,32767,32767,32767,32767,\n\t\t32767,32767,  152,  152,    3,    3,  327,  152,  152,  152,\n\t\t327,  152,  327,  327,  327,  152,  152,  152,  152,  152,\n\t\t152,  272,  184,  254,  257,  239,  239,  152,  337,  152\n\t];\n\n\tPHP.Parser.prototype.yygoto = [\n\t\t194,  194,  670,  422,  643,  463, 1264, 1265, 1022,  416,\n\t\t308,  309,  329,  563,  314,  421,  330,  423,  622,  801,\n\t\t678,  637,  586,  651,  652,  653,  165,  165,  165,  165,\n\t\t218,  195,  191,  191,  175,  177,  213,  191,  191,  191,\n\t\t191,  191,  192,  192,  192,  192,  192,  192,  186,  187,\n\t\t188,  189,  190,  215,  213,  216,  521,  522,  412,  523,\n\t\t525,  526,  527,  528,  529,  530,  531,  532, 1091,  166,\n\t\t167,  168,  193,  169,  170,  171,  164,  172,  173,  174,\n\t\t176,  212,  214,  217,  235,  238,  241,  242,  244,  255,\n\t\t256,  257,  258,  259,  260,  261,  263,  264,  265,  266,\n\t\t274,  275,  311,  312,  313,  417,  418,  419,  568,  219,\n\t\t220,  221,  222,  223,  224,  225,  226,  227,  228,  229,\n\t\t230,  231,  232,  233,  178,  234,  179,  196,  197,  198,\n\t\t236,  186,  187,  188,  189,  190,  215, 1091,  199,  180,\n\t\t181,  182,  200,  196,  183,  237,  201,  199,  163,  202,\n\t\t203,  184,  204,  205,  206,  185,  207,  208,  209,  210,\n\t\t211,  323,  323,  323,  323,  827,  608,  608,  824,  547,\n\t\t538,  342, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221,\n\t\t1221, 1221, 1239, 1239,  288,  288,  288,  288, 1239, 1239,\n\t\t1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,  388,  538,\n\t\t547,  556,  557,  395,  566,  588,  602,  603,  832,  825,\n\t\t880,  875,  876,  889,   15,  833,  877,  830,  878,  879,\n\t\t831,  799,  251,  251,  883,  919,  992, 1000, 1004, 1001,\n\t\t1005, 1237, 1237,  938, 1043, 1039, 1040, 1237, 1237, 1237,\n\t\t1237, 1237, 1237, 1237, 1237, 1237, 1237,  858,  248,  248,\n\t\t248,  248,  250,  252,  533,  533,  533,  533,  487,  590,\n\t\t488, 1190, 1190,  997, 1190,  997,  494, 1290, 1290,  560,\n\t\t997,  997,  997,  997,  997,  997,  997,  997,  997,  997,\n\t\t997,  997, 1261, 1261, 1290, 1261,  340, 1190,  930,  402,\n\t\t677, 1279, 1190, 1190, 1190, 1190,  959,  345, 1190, 1190,\n\t\t1190, 1271, 1271, 1271, 1271,  606,  640,  345,  345, 1273,\n\t\t1273, 1273, 1273,  820,  820,  805,  896,  884,  840,  885,\n\t\t897,  345,  345,    5,  345,    6, 1306,  384,  535,  535,\n\t\t559,  535,  415,  852,  597, 1257,  839,  540,  524,  524,\n\t\t345, 1289, 1289,  642,  524,  524,  524,  524,  524,  524,\n\t\t524,  524,  524,  524,  445,  805, 1140,  805, 1289,  932,\n\t\t932,  932,  932, 1063, 1064,  445,  926,  933,  386,  390,\n\t\t548,  587,  591, 1030, 1292,  331,  554, 1259, 1259, 1030,\n\t\t704,  621,  623,  823,  641, 1250,  319,  303,  660,  664,\n\t\t973,  668,  676,  969,  429,  553,  962,  936,  936,  934,\n\t\t936,  703,  601,  537,  971,  966,  343,  344,  663,  817,\n\t\t595,  609,  612,  613,  614,  615,  634,  635,  636,  680,\n\t\t439, 1186,  845,  454,  454,  439,  439, 1266, 1267,  820,\n\t\t901, 1079,  454,  394,  539,  551, 1183,  605,  540,  539,\n\t\t842,  551,  978,  272,  387,  618,  619,  981,  536,  536,\n\t\t844,  707,  646,  957,  567,  457,  458,  459,  838,  850,\n\t\t254,  254, 1297, 1298,  400,  401,  976,  976,  464,  649,\n\t\t1182,  650, 1028,  404,  405,  406, 1187,  661,  424, 1032,\n\t\t407,  564,  600,  815,  338,  424,  854,  848,  853,  841,\n\t\t1027, 1031, 1009, 1002, 1006, 1003, 1007, 1185,  941, 1188,\n\t\t1247, 1248,  943,    0, 1074,  439,  439,  439,  439,  439,\n\t\t439,  439,  439,  439,  439,  439,    0,  468,  439,  585,\n\t\t1056,  931,  681,  667,  667,    0,  495,  673, 1054, 1171,\n\t\t912,    0,    0, 1172, 1175,  913, 1176,    0,    0,    0,\n\t\t0,    0,    0, 1072,  857\n\t];\n\n\tPHP.Parser.prototype.yygcheck = [\n\t\t42,   42,   72,   65,   65,  166,  166,  166,  119,   65,\n\t\t65,   65,   65,   65,   65,   65,   65,   65,   65,    7,\n\t\t9,   84,  122,   84,   84,   84,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   23,   23,   23,   23,   15,  104,  104,   26,   75,\n\t\t75,   93,  104,  104,  104,  104,  104,  104,  104,  104,\n\t\t104,  104,  160,  160,   24,   24,   24,   24,  160,  160,\n\t\t160,  160,  160,  160,  160,  160,  160,  160,   75,   75,\n\t\t75,   75,   75,   75,   75,   75,   75,   75,   15,   27,\n\t\t15,   15,   15,   15,   75,   15,   15,   15,   15,   15,\n\t\t15,    6,    5,    5,   15,   87,   87,   87,   87,   87,\n\t\t87,  161,  161,   49,   15,   15,   15,  161,  161,  161,\n\t\t161,  161,  161,  161,  161,  161,  161,   45,    5,    5,\n\t\t5,    5,    5,    5,  103,  103,  103,  103,  147,  103,\n\t\t147,   72,   72,   72,   72,   72,  147,  173,  173,  162,\n\t\t72,   72,   72,   72,   72,   72,   72,   72,   72,   72,\n\t\t72,   72,  122,  122,  173,  122,  169,   72,   89,   89,\n\t\t89,  171,   72,   72,   72,   72,   99,   14,   72,   72,\n\t\t72,    9,    9,    9,    9,   55,   55,   14,   14,  122,\n\t\t122,  122,  122,   22,   22,   12,   72,   64,   35,   64,\n\t\t72,   14,   14,   46,   14,   46,   14,   61,   19,   19,\n\t\t100,   19,   13,   35,   13,  122,   35,   14,  163,  163,\n\t\t14,  172,  172,   63,  163,  163,  163,  163,  163,  163,\n\t\t163,  163,  163,  163,   19,   12,  143,   12,  172,   19,\n\t\t19,   19,   19,  136,  136,   19,   19,   19,   58,   58,\n\t\t58,   58,   58,  122,  172,   29,   48,  122,  122,  122,\n\t\t48,   48,   48,   25,   48,   14,  159,  159,   48,   48,\n\t\t48,   48,   48,   48,  109,    9,   25,   25,   25,   25,\n\t\t25,   25,    9,   25,   25,   25,   93,   93,   14,   18,\n\t\t79,   79,   79,   79,   79,   79,   79,   79,   79,   79,\n\t\t23,   20,   39,  141,  141,   23,   23,  168,  168,   22,\n\t\t17,   17,  141,   28,    9,    9,  152,   17,   14,    9,\n\t\t37,    9,   17,   24,    9,   83,   83,  106,   24,   24,\n\t\t17,   95,   17,   17,    9,    9,    9,    9,   17,    9,\n\t\t5,    5,    9,    9,   80,   80,  103,  103,  149,   80,\n\t\t17,   80,  121,   80,   80,   80,   20,   80,  113,  124,\n\t\t80,    2,    2,   20,   80,  113,   41,    9,   16,   16,\n\t\t16,   16,  113,  113,  113,  113,  113,   14,   16,   20,\n\t\t20,   20,   92,   -1,  139,   23,   23,   23,   23,   23,\n\t\t23,   23,   23,   23,   23,   23,   -1,   82,   23,    8,\n\t\t8,   16,    8,    8,    8,   -1,    8,    8,    8,   78,\n\t\t78,   -1,   -1,   78,   78,   78,   78,   -1,   -1,   -1,\n\t\t-1,   -1,   -1,   16,   16\n\t];\n\n\tPHP.Parser.prototype.yygbase = [\n\t\t0,    0, -203,    0,    0,  221,  208,   10,  512,    7,\n\t\t0,    0,   24,    1,    5, -174,   47,  -23,  105,   61,\n\t\t38,    0,  -10,  158,  181,  379,  164,  205,  102,   84,\n\t\t0,    0,    0,    0,    0,  -43,    0,  107,    0,  104,\n\t\t0,   54,   -1,    0,    0,  235, -384,    0, -307,  210,\n\t\t0,    0,    0,    0,    0,  266,    0,    0,  324,    0,\n\t\t0,  286,    0,  103,  298, -236,    0,    0,    0,    0,\n\t\t0,    0,   -6,    0,    0, -167,    0,    0,  129,   62,\n\t\t-14,    0,   53,  -22, -669,    0,    0,  -52,    0,  -11,\n\t\t0,    0,   68, -299,    0,   52,    0,    0,    0,  262,\n\t\t288,    0,    0,  227,  -73,    0,   87,    0,    0,  118,\n\t\t0,    0,    0,  209,    0,    0,    0,    0,    0,    6,\n\t\t0,  108,   15,    0,   46,    0,    0,    0,    0,    0,\n\t\t0,    0,    0,    0,    0,    0,   91,    0,    0,   69,\n\t\t0,  390,    0,   86,    0,    0,    0, -224,    0,   37,\n\t\t0,    0,   77,    0,    0,    0,    0,    0,    0,   70,\n\t\t-57,   -8,  241,   99,    0,    0, -290,    0,   65,  257,\n\t\t0,  261,   39,  -35,    0,    0\n\t];\n\n\tPHP.Parser.prototype.yygdefault = [\n\t\t-32768,  499,  711,    4,  712,  905,  788,  797,  583,  515,\n\t\t679,  339,  610,  413, 1255,  882, 1078,  565,  816, 1199,\n\t\t1207,  446,  819,  324,  701,  864,  865,  866,  391,  376,\n\t\t382,  389,  632,  611,  481,  851,  442,  843,  473,  846,\n\t\t441,  855,  162,  410,  497,  859,    3,  861,  542,  892,\n\t\t377,  869,  378,  656,  871,  550,  873,  874,  385,  392,\n\t\t393, 1083,  558,  607,  886,  243,  552,  887,  375,  888,\n\t\t895,  380,  383,  665,  453,  492,  486,  403, 1058,  594,\n\t\t629,  450,  467,  617,  616,  604,  466,  425,  408,  928,\n\t\t474,  451,  942,  341,  950,  709, 1090,  624,  476,  958,\n\t\t625,  965,  968,  516,  517,  465,  980,  269,  983,  477,\n\t\t1015,  647,  648,  995,  626,  627, 1013,  460,  584, 1021,\n\t\t443, 1029, 1243,  444, 1033,  262, 1036,  276,  409,  426,\n\t\t1041, 1042,    8, 1048,  671,  672,   10,  273,  496, 1073,\n\t\t666,  440, 1089,  430, 1159, 1161,  544,  478, 1179, 1178,\n\t\t659,  493, 1184, 1246,  438,  518,  461,  310,  519,  302,\n\t\t327,  307,  534,  289,  328,  520,  462, 1252, 1260,  325,\n\t\t30, 1280, 1291,  335,  562,  599\n\t];\n\n\tPHP.Parser.prototype.yylhs = [\n\t\t0,    1,    3,    3,    2,    5,    5,    6,    6,    6,\n\t\t6,    6,    6,    6,    6,    6,    6,    6,    6,    6,\n\t\t6,    6,    6,    6,    6,    6,    6,    6,    6,    6,\n\t\t6,    6,    6,    6,    6,    6,    6,    6,    6,    6,\n\t\t6,    6,    6,    6,    6,    6,    6,    6,    6,    6,\n\t\t6,    6,    6,    6,    6,    6,    6,    6,    6,    6,\n\t\t6,    6,    6,    6,    6,    6,    6,    6,    6,    6,\n\t\t6,    6,    6,    6,    6,    6,    6,    6,    7,    7,\n\t\t7,    7,    7,    7,    7,    7,    8,    8,    9,   10,\n\t\t11,   11,   11,   12,   12,   13,   13,   14,   15,   15,\n\t\t16,   16,   17,   17,   18,   18,   21,   21,   22,   23,\n\t\t23,   24,   24,    4,    4,    4,    4,    4,    4,    4,\n\t\t4,    4,    4,    4,   29,   29,   30,   30,   32,   34,\n\t\t34,   28,   36,   36,   33,   38,   38,   35,   35,   37,\n\t\t37,   39,   39,   31,   40,   40,   41,   43,   44,   44,\n\t\t45,   46,   46,   48,   47,   47,   47,   47,   49,   49,\n\t\t49,   49,   49,   49,   49,   49,   49,   49,   49,   49,\n\t\t49,   49,   49,   49,   49,   49,   49,   49,   49,   49,\n\t\t49,   49,   25,   25,   68,   68,   71,   71,   70,   69,\n\t\t69,   62,   74,   74,   75,   75,   76,   76,   77,   77,\n\t\t78,   78,   26,   26,   27,   27,   27,   27,   86,   86,\n\t\t88,   88,   81,   81,   81,   82,   82,   85,   85,   83,\n\t\t83,   89,   90,   90,   56,   56,   64,   64,   67,   67,\n\t\t67,   66,   91,   91,   92,   57,   57,   57,   57,   93,\n\t\t93,   94,   94,   95,   95,   96,   97,   97,   98,   98,\n\t\t99,   99,   54,   54,   50,   50,  101,   52,   52,  102,\n\t\t51,   51,   53,   53,   63,   63,   63,   63,   79,   79,\n\t\t105,  105,  107,  107,  108,  108,  108,  108,  106,  106,\n\t\t106,  110,  110,  110,  110,   87,   87,  113,  113,  113,\n\t\t111,  111,  114,  114,  112,  112,  115,  115,  116,  116,\n\t\t116,  116,  109,  109,   80,   80,   80,   20,   20,   20,\n\t\t118,  117,  117,  119,  119,  119,  119,   59,  120,  120,\n\t\t121,   60,  123,  123,  124,  124,  125,  125,   84,  126,\n\t\t126,  126,  126,  126,  126,  131,  131,  132,  132,  133,\n\t\t133,  133,  133,  133,  134,  135,  135,  130,  130,  127,\n\t\t127,  129,  129,  137,  137,  136,  136,  136,  136,  136,\n\t\t136,  136,  128,  138,  138,  140,  139,  139,   61,  100,\n\t\t141,  141,   55,   55,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,   42,   42,   42,\n\t\t42,   42,   42,   42,   42,   42,   42,  148,  142,  142,\n\t\t147,  147,  150,  151,  151,  152,  153,  153,  153,   19,\n\t\t19,   72,   72,   72,   72,  143,  143,  143,  143,  155,\n\t\t155,  144,  144,  146,  146,  146,  149,  149,  160,  160,\n\t\t160,  160,  160,  160,  160,  160,  160,  161,  161,  104,\n\t\t163,  163,  163,  163,  145,  145,  145,  145,  145,  145,\n\t\t145,  145,   58,   58,  158,  158,  158,  158,  164,  164,\n\t\t154,  154,  154,  165,  165,  165,  165,  165,  165,   73,\n\t\t73,   65,   65,   65,   65,  122,  122,  122,  122,  168,\n\t\t167,  157,  157,  157,  157,  157,  157,  157,  156,  156,\n\t\t156,  166,  166,  166,  166,  103,  162,  170,  170,  169,\n\t\t169,  171,  171,  171,  171,  171,  171,  171,  171,  159,\n\t\t159,  159,  159,  173,  174,  172,  172,  172,  172,  172,\n\t\t172,  172,  172,  175,  175,  175,  175\n\t];\n\n\tPHP.Parser.prototype.yylen = [\n\t\t1,    1,    2,    0,    1,    1,    1,    1,    1,    1,\n\t\t1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n\t\t1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n\t\t1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n\t\t1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n\t\t1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n\t\t1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n\t\t1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n\t\t1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n\t\t1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n\t\t0,    1,    0,    1,    1,    2,    1,    3,    4,    1,\n\t\t2,    0,    1,    1,    1,    1,    1,    3,    5,    4,\n\t\t3,    4,    2,    3,    1,    1,    7,    6,    2,    3,\n\t\t1,    2,    3,    1,    2,    3,    1,    1,    3,    1,\n\t\t3,    1,    2,    2,    3,    1,    3,    2,    3,    1,\n\t\t3,    2,    0,    1,    1,    1,    1,    1,    3,    7,\n\t\t10,    5,    7,    9,    5,    3,    3,    3,    3,    3,\n\t\t3,    1,    2,    5,    7,    9,    6,    5,    6,    3,\n\t\t2,    1,    1,    1,    0,    2,    1,    3,    8,    0,\n\t\t4,    2,    1,    3,    0,    1,    0,    1,    0,    1,\n\t\t3,    1,    8,    9,    8,    7,    6,    8,    0,    2,\n\t\t0,    2,    1,    2,    2,    0,    2,    0,    2,    0,\n\t\t2,    2,    1,    3,    1,    4,    1,    4,    1,    1,\n\t\t4,    2,    1,    3,    3,    3,    4,    4,    5,    0,\n\t\t2,    4,    3,    1,    1,    7,    0,    2,    1,    3,\n\t\t3,    4,    1,    4,    0,    2,    5,    0,    2,    6,\n\t\t0,    2,    0,    3,    1,    2,    1,    1,    2,    0,\n\t\t1,    3,    0,    2,    1,    1,    1,    1,    6,    8,\n\t\t6,    1,    2,    1,    1,    1,    1,    1,    1,    1,\n\t\t3,    3,    3,    3,    3,    3,    3,    3,    1,    2,\n\t\t1,    1,    0,    1,    0,    2,    2,    2,    4,    3,\n\t\t1,    1,    3,    1,    2,    2,    3,    2,    3,    1,\n\t\t1,    2,    3,    1,    1,    3,    2,    0,    1,    5,\n\t\t5,   10,    3,    5,    1,    1,    3,    0,    2,    4,\n\t\t5,    4,    4,    4,    3,    1,    1,    1,    1,    1,\n\t\t1,    0,    1,    1,    2,    1,    1,    1,    1,    1,\n\t\t1,    1,    2,    1,    3,    1,    1,    3,    2,    2,\n\t\t3,    1,    0,    1,    1,    3,    3,    3,    4,    1,\n\t\t1,    2,    3,    3,    3,    3,    3,    3,    3,    3,\n\t\t3,    3,    3,    3,    3,    2,    2,    2,    2,    3,\n\t\t3,    3,    3,    3,    3,    3,    3,    3,    3,    3,\n\t\t3,    3,    3,    3,    3,    3,    3,    2,    2,    2,\n\t\t2,    3,    3,    3,    3,    3,    3,    3,    3,    3,\n\t\t3,    3,    5,    4,    3,    4,    4,    2,    2,    4,\n\t\t2,    2,    2,    2,    2,    2,    2,    2,    2,    2,\n\t\t2,    1,    3,    2,    1,    2,    4,    2,    2,    8,\n\t\t9,    8,    9,    9,   10,    9,   10,    8,    3,    2,\n\t\t0,    4,    2,    1,    3,    2,    2,    2,    4,    1,\n\t\t1,    1,    1,    1,    1,    1,    1,    3,    1,    1,\n\t\t1,    0,    3,    0,    1,    1,    0,    1,    1,    1,\n\t\t1,    1,    1,    1,    1,    1,    1,    3,    3,    3,\n\t\t4,    1,    1,    3,    1,    1,    1,    1,    1,    3,\n\t\t2,    3,    0,    1,    1,    3,    1,    1,    1,    1,\n\t\t1,    3,    1,    1,    4,    4,    1,    4,    4,    0,\n\t\t1,    1,    1,    3,    3,    1,    4,    2,    2,    1,\n\t\t3,    1,    4,    4,    3,    3,    3,    3,    1,    3,\n\t\t1,    1,    3,    1,    1,    4,    1,    1,    1,    3,\n\t\t1,    1,    2,    1,    3,    4,    3,    2,    0,    2,\n\t\t2,    1,    2,    1,    1,    1,    4,    3,    3,    3,\n\t\t3,    6,    3,    1,    1,    2,    1\n\t];\n\n\n\n\texports.PHP = PHP;\n});\n\nace.define(\"ace/mode/php_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar PHP = require(\"./php/php\").PHP;\n\nvar PhpWorker = exports.PhpWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n};\n\noop.inherits(PhpWorker, Mirror);\n\n(function() {\n    this.setOptions = function(opts) {\n        this.inlinePhp = opts && opts.inline;\n    };\n    \n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        if (this.inlinePhp)\n            value = \"<?\" + value + \"?>\";\n\n        var tokens = PHP.Lexer(value, {short_open_tag: 1});\n        try {\n            new PHP.Parser(tokens);\n        } catch(e) {\n            errors.push({\n                row: e.line - 1,\n                column: null,\n                text: e.message.charAt(0).toUpperCase() + e.message.substring(1),\n                type: \"error\"\n            });\n        }\n\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(PhpWorker.prototype);\n\n});\n"
  },
  {
    "path": "publishable/assets/js/ace/libs/worker-xml.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err && err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err && err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        sender = window.sender = window.initSender();\n        var clazz = this.require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\n\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function () {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    this.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    }\n    else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n    }\n    else {\n        this.insert({ row: 0, column: 0 }, textOrLines);\n    }\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    this.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function (text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    }\n    else {\n        this.$split = function (text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function () {\n        return this.$lines.length;\n    };\n    this.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    this.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    this.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    this.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    this.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    this.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    this.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    this.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    this.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    this.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    this.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                var d, err; \n                if (Array.isArray(data[i+1])) {\n                    d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                \n                if ((d.action == \"insert\" ? d.start : d.end).row >= doc.$lines.length) {\n                    err = new Error(\"Invalid delta\");\n                    err.data = {\n                        path: _self.$path,\n                        linesLength: doc.$lines.length,\n                        start: d.start,\n                        end: d.end\n                    };\n                    throw err;\n                }\n\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/xml/sax\",[], function(require, exports, module) {\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\u00B7\\u0300-\\u036F\\\\ux203F-\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring \nvar S_ATTR_S=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_V = 4;//attr value(no quot value only)\nvar S_E = 5;//attr value end and no space(quot end)\nvar S_S = 6;//(attr value end || tag end ) && (space offer)\nvar S_C = 7;//closed el<el />\n\nfunction XMLReader(){\n\t\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n  function fixedFromCharCode(code) {\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif(k in entityMap){\n\t\t\treturn entityMap[k]; \n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\tlocator&&position(start);\n\t\tdomBuilder.characters(xt,0,end-start);\n\t\tstart = end\n\t}\n\tfunction position(start,m){\n\t\twhile(start>=endPos && (m = linePattern.exec(source))){\n\t\t\tstartPos = m.index;\n\t\t\tendPos = startPos + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t}\n\t\tlocator.columnNumber = start-startPos+1;\n\t}\n\tvar startPos = 0;\n\tvar endPos = 0;\n\tvar linePattern = /.+(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\t\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\tvar i = source.indexOf('<',start);\n\t\tif(i<0){\n\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\tvar doc = domBuilder.document;\n    \t\t\tvar text = doc.createTextNode(source.substr(start));\n    \t\t\tdoc.appendChild(text);\n    \t\t\tdomBuilder.currentElement = text;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif(i>start){\n\t\t\tappendText(i);\n\t\t}\n\t\tswitch(source.charAt(i+1)){\n\t\tcase '/':\n\t\t\tvar end = source.indexOf('>',i+3);\n\t\t\tvar tagName = source.substring(i+2,end);\n\t\t\tvar config;\n\t\t\tif (parseStack.length > 1) {\n\t\t\t\tconfig = parseStack.pop();\n\t\t\t} else {\n\t\t\t\terrorHandler.fatalError(\"end tag name not found for: \"+tagName);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\n\t        if(config.tagName != tagName){\n\t            errorHandler.fatalError(\"end tag name: \" + tagName + \" does not match the current start tagName: \"+config.tagName );\n\t        }\n\t\t\tdomBuilder.endElement(config.uri,config.localName,tagName);\n\t\t\tif(localNSMap){\n\t\t\t\tfor(var prefix in localNSMap){\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix) ;\n\t\t\t\t}\n\t\t\t}\n\t\t\tend++;\n\t\t\tbreak;\n\t\tcase '?':// <?...?>\n\t\t\tlocator&&position(i);\n\t\t\tend = parseInstruction(source,i,domBuilder);\n\t\t\tbreak;\n\t\tcase '!':// <!doctype,<![CDATA,<!--\n\t\t\tlocator&&position(i);\n\t\t\tend = parseDCC(source,i,domBuilder,errorHandler);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ttry{\n\t\t\t\tlocator&&position(i);\n\t\t\t\t\n\t\t\t\tvar el = new ElementAttributes();\n\t\t\t\tvar end = parseElementStartPart(source,i,el,entityReplacer,errorHandler);\n\t\t\t\tvar len = el.length;\n\t\t\t\tif(len && locator){\n\t\t\t\t\tvar backup = copyLocator(locator,{});\n\t\t\t\t\tfor(var i = 0;i<len;i++){\n\t\t\t\t\t\tvar a = el[i];\n\t\t\t\t\t\tposition(a.offset);\n\t\t\t\t\t\ta.offset = copyLocator(locator,{});\n\t\t\t\t\t}\n\t\t\t\t\tcopyLocator(backup,locator);\n\t\t\t\t}\n\t\t\t\tif(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tif(!entityMap.nbsp){\n\t\t\t\t\t\terrorHandler.warning('unclosed xml attribute');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tappendElement(el,domBuilder,parseStack);\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){\n\t\t\t\t\tend = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)\n\t\t\t\t}else{\n\t\t\t\t\tend++;\n\t\t\t\t}\n\t\t\t}catch(e){\n\t\t\t\terrorHandler.error('element parse error: '+e);\n\t\t\t\tend = -1;\n\t\t\t}\n\n\t\t}\n\t\tif(end<0){\n\t\t\tappendText(i+1);\n\t\t}else{\n\t\t\tstart = end;\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n\t\n}\nfunction parseElementStartPart(source,start,el,entityReplacer,errorHandler){\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_S){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\tthrow new Error('attribute equal must after attrName');\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ){//equal\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t\tel.add(attrName,value,start-1);\n\t\t\t\t\ts = S_E;\n\t\t\t\t}else{\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_V){\n\t\t\t\tvalue = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tel.add(attrName,value,start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_E\n\t\t\t}else{\n\t\t\t\tthrow new Error('attribute value must after \"=\"');\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_E:\n\t\t\tcase S_S:\n\t\t\tcase S_C:\n\t\t\t\ts = S_C;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_V:\n\t\t\tcase S_ATTR:\n\t\t\tcase S_ATTR_S:\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\")\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_E:\n\t\t\tcase S_S:\n\t\t\tcase S_C:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_V://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed  = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_S:\n\t\t\t\tif(s === S_ATTR_S){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_V){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\tel.add(attrName,value.replace(/&#?\\w+;/g,entityReplacer),start)\n\t\t\t\t}else{\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\tel.add(value,value,start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_S;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_S;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_V:\n\t\t\t\t\tvar value = source.slice(start,p).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\tel.add(attrName,value,start)\n\t\t\t\tcase S_E:\n\t\t\t\t\ts = S_S;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{//not space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_ATTR_S:\n\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead!!')\n\t\t\t\t\tel.add(attrName,attrName,start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_E:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_S:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_V;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_C:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tp++;\n\t}\n}\nfunction appendElement(el,domBuilder,parseStack){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\tvar currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\ta.localName = localName ;\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = 'http://www.w3.org/2000/xmlns/'\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value) \n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = 'http://www.w3.org/XML/1998/namespace';\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix]\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor(prefix in localNSMap){\n\t\t\t\tdomBuilder.endPrefixMapping(prefix) \n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\tparseStack.push(el);\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\treturn elEndStart;\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\tpos = closeMap[tagName] = source.lastIndexOf('</'+tagName+'>')\n\t}\n\treturn pos<elStartEnd;\n}\nfunction _copy(source,target){\n\tfor(var n in source){target[n] = source[n]}\n}\nfunction parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'\n\tvar next= source.charAt(start+2)\n\tswitch(next){\n\tcase '-':\n\t\tif(source.charAt(start + 3) === '-'){\n\t\t\tvar end = source.indexOf('-->',start+4);\n\t\t\tif(end>start){\n\t\t\t\tdomBuilder.comment(source,start+4,end-start-4);\n\t\t\t\treturn end+3;\n\t\t\t}else{\n\t\t\t\terrorHandler.error(\"Unclosed comment\");\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}else{\n\t\t\treturn -1;\n\t\t}\n\tdefault:\n\t\tif(source.substr(start+3,6) == 'CDATA['){\n\t\t\tvar end = source.indexOf(']]>',start+9);\n\t\t\tif (end > start) {\n\t\t\t\tdomBuilder.startCDATA();\n\t\t\t\tdomBuilder.characters(source,start+9,end-start-9);\n\t\t\t\tdomBuilder.endCDATA() \n\t\t\t\treturn end+3;\n\t\t\t} else {\n\t\t\t\terrorHandler.error(\"Unclosed CDATA\");\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t\tvar matchs = split(source,start);\n\t\tvar len = matchs.length;\n\t\tif(len>1 && /!doctype/i.test(matchs[0][0])){\n\t\t\tvar name = matchs[1][0];\n\t\t\tvar pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0]\n\t\t\tvar sysid = len>4 && matchs[4][0];\n\t\t\tvar lastMatch = matchs[len-1]\n\t\t\tdomBuilder.startDTD(name,pubid && pubid.replace(/^(['\"])(.*?)\\1$/,'$2'),\n\t\t\t\t\tsysid && sysid.replace(/^(['\"])(.*?)\\1$/,'$2'));\n\t\t\tdomBuilder.endDTD();\n\t\t\t\n\t\t\treturn lastMatch.index+lastMatch[0].length\n\t\t}\n\t}\n\treturn -1;\n}\n\n\n\nfunction parseInstruction(source,start,domBuilder){\n\tvar end = source.indexOf('?>',start);\n\tif(end){\n\t\tvar match = source.substring(start,end).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);\n\t\tif(match){\n\t\t\tvar len = match[0].length;\n\t\t\tdomBuilder.processingInstruction(match[1], match[2]) ;\n\t\t\treturn end+2;\n\t\t}else{//error\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn -1;\n}\nfunction ElementAttributes(source){\n\t\n}\nElementAttributes.prototype = {\n\tsetTagName:function(tagName){\n\t\tif(!tagNamePattern.test(tagName)){\n\t\t\tthrow new Error('invalid tagName:'+tagName)\n\t\t}\n\t\tthis.tagName = tagName\n\t},\n\tadd:function(qName,value,offset){\n\t\tif(!tagNamePattern.test(qName)){\n\t\t\tthrow new Error('invalid attribute:'+qName)\n\t\t}\n\t\tthis[this.length++] = {qName:qName,value:value,offset:offset}\n\t},\n\tlength:0,\n\tgetLocalName:function(i){return this[i].localName},\n\tgetOffset:function(i){return this[i].offset},\n\tgetQName:function(i){return this[i].qName},\n\tgetURI:function(i){return this[i].uri},\n\tgetValue:function(i){return this[i].value}\n}\n\n\n\n\nfunction _set_proto_(thiz,parent){\n\tthiz.__proto__ = parent;\n\treturn thiz;\n}\nif(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){\n\t_set_proto_ = function(thiz,parent){\n\t\tfunction p(){};\n\t\tp.prototype = parent;\n\t\tp = new p();\n\t\tfor(parent in thiz){\n\t\t\tp[parent] = thiz[parent];\n\t\t}\n\t\treturn p;\n\t}\n}\n\nfunction split(source,start){\n\tvar match;\n\tvar buf = [];\n\tvar reg = /'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;\n\treg.lastIndex = start;\n\treg.exec(source);//skip <\n\twhile(match = reg.exec(source)){\n\t\tbuf.push(match);\n\t\tif(match[1])return buf;\n\t}\n}\n\nreturn XMLReader;\n});\n\nace.define(\"ace/mode/xml/dom\",[], function(require, exports, module) {\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tdest[p] = src[p];\n\t}\n}\nfunction _extends(Class,Super){\n\tvar t = function(){};\n\tvar pt = Class.prototype;\n\tif(Object.create){\n\t\tvar ppt = Object.create(Super.prototype);\n\t\tpt.__proto__ = ppt;\n\t}\n\tif(!(pt instanceof Super)){\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class);\n\t\t}\n\t\tpt.constructor = Class;\n\t}\n}\nvar htmlns = 'http://www.w3.org/1999/xhtml' ;\nvar NodeType = {};\nvar ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;\nvar ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;\nvar TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;\nvar CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;\nvar ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;\nvar ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;\nvar DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;\nvar DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;\nvar DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;\nvar NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;\nvar ExceptionCode = {};\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]=\"Attribute in use\"),10);\nvar INVALID_STATE_ERR        \t= ExceptionCode.INVALID_STATE_ERR        \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR               \t= ExceptionCode.SYNTAX_ERR               \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR            \t= ExceptionCode.NAMESPACE_ERR           \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR       \t= ExceptionCode.INVALID_ACCESS_ERR      \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\nfunction NodeList() {\n};\nNodeList.prototype = {\n\tlength:0,\n\titem: function(index) {\n\t\treturn this[index] || null;\n\t}\n};\nfunction LiveNodeList(node,refresh){\n\tthis._node = node;\n\tthis._refresh = refresh;\n\t_updateLiveList(this);\n}\nfunction _updateLiveList(list){\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif(list._inc != inc){\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list,'length',ls.length);\n\t\tcopy(ls,list);\n\t\tlist._inc = inc;\n\t}\n}\nLiveNodeList.prototype.item = function(i){\n\t_updateLiveList(this);\n\treturn this[i];\n}\n\n_extends(LiveNodeList,NodeList);\nfunction NamedNodeMap() {\n};\n\nfunction _findNodeIndex(list,node){\n\tvar i = list.length;\n\twhile(i--){\n\t\tif(list[i] === node){return i}\n\t}\n}\n\nfunction _addNamedNode(el,list,newAttr,oldAttr){\n\tif(oldAttr){\n\t\tlist[_findNodeIndex(list,oldAttr)] = newAttr;\n\t}else{\n\t\tlist[list.length++] = newAttr;\n\t}\n\tif(el){\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif(doc){\n\t\t\toldAttr && _onRemoveAttribute(doc,el,oldAttr);\n\t\t\t_onAddAttribute(doc,el,newAttr);\n\t\t}\n\t}\n}\nfunction _removeNamedNode(el,list,attr){\n\tvar i = _findNodeIndex(list,attr);\n\tif(i>=0){\n\t\tvar lastIndex = list.length-1;\n\t\twhile(i<lastIndex){\n\t\t\tlist[i] = list[++i];\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif(el){\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif(doc){\n\t\t\t\t_onRemoveAttribute(doc,el,attr);\n\t\t\t\tattr.ownerElement = null;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tthrow new DOMException(NOT_FOUND_ERR,new Error());\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength:0,\n\titem:NodeList.prototype.item,\n\tgetNamedItem: function(key) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\nfunction DOMImplementation(/* Object */ features) {\n\tthis._features = {};\n\tif (features) {\n\t\tfor (var feature in features) {\n\t\t\t this._features = features[feature];\n\t\t}\n\t}\n};\n\nDOMImplementation.prototype = {\n\thasFeature: function(/* string */ feature, /* string */ version) {\n\t\tvar versions = this._features[feature.toLowerCase()];\n\t\tif (versions && (!version || version in versions)) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t},\n\tcreateDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype;\n\t\tif(doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif(qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI,qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\tcreateDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId;\n\t\tnode.systemId = systemId;\n\t\treturn node;\n\t}\n};\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\tthis.insertBefore(newChild,oldChild);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n    hasAttributes:function(){\n    \treturn this.attributes.length>0;\n    },\n    lookupPrefix:function(namespaceURI){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\tif(map){\n    \t\t\tfor(var n in map){\n    \t\t\t\tif(map[n] == namespaceURI){\n    \t\t\t\t\treturn n;\n    \t\t\t\t}\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == 2?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    lookupNamespaceURI:function(prefix){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\tif(map){\n    \t\t\tif(prefix in map){\n    \t\t\t\treturn map[prefix] ;\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == 2?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    isDefaultNamespace:function(namespaceURI){\n    \tvar prefix = this.lookupPrefix(namespaceURI);\n    \treturn prefix == null;\n    }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '&lt;' ||\n         c == '>' && '&gt;' ||\n         c == '&' && '&amp;' ||\n         c == '\"' && '&quot;' ||\n         '&#'+c.charCodeAt()+';';\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n        }while(node=node.nextSibling)\n    }\n}\n\n\n\nfunction Document(){\n}\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns == 'http://www.w3.org/2000/xmlns/'){\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns == 'http://www.w3.org/2000/xmlns/'){\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:''];\n\t}\n}\nfunction _onUpdateChild(doc,el,newChild){\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\tvar cs = el.childNodes;\n\t\tif(newChild){\n\t\t\tcs[cs.length++] = newChild;\n\t\t}else{\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile(child){\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild =child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t}\n\t}\n}\nfunction _removeChild(parentNode,child){\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif(previous){\n\t\tprevious.nextSibling = next;\n\t}else{\n\t\tparentNode.firstChild = next\n\t}\n\tif(next){\n\t\tnext.previousSibling = previous;\n\t}else{\n\t\tparentNode.lastChild = previous;\n\t}\n\t_onUpdateChild(parentNode.ownerDocument,parentNode);\n\treturn child;\n}\nfunction _insertBefore(parentNode,newChild,nextChild){\n\tvar cp = newChild.parentNode;\n\tif(cp){\n\t\tcp.removeChild(newChild);//remove and update\n\t}\n\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = newChild.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn newChild;\n\t\t}\n\t\tvar newLast = newChild.lastChild;\n\t}else{\n\t\tnewFirst = newLast = newChild;\n\t}\n\tvar pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = nextChild;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparentNode.firstChild = newFirst;\n\t}\n\tif(nextChild == null){\n\t\tparentNode.lastChild = newLast;\n\t}else{\n\t\tnextChild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parentNode;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);\n\tif (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnewChild.firstChild = newChild.lastChild = null;\n\t}\n\treturn newChild;\n}\nfunction _appendSingleChild(parentNode,newChild){\n\tvar cp = newChild.parentNode;\n\tif(cp){\n\t\tvar pre = parentNode.lastChild;\n\t\tcp.removeChild(newChild);//remove and update\n\t\tvar pre = parentNode.lastChild;\n\t}\n\tvar pre = parentNode.lastChild;\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = pre;\n\tnewChild.nextSibling = null;\n\tif(pre){\n\t\tpre.nextSibling = newChild;\n\t}else{\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument,parentNode,newChild);\n\treturn newChild;\n}\nDocument.prototype = {\n\tnodeName :  '#document',\n\tnodeType :  DOCUMENT_NODE,\n\tdoctype :  null,\n\tdocumentElement :  null,\n\t_inc : 1,\n\n\tinsertBefore :  function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\tif(this.documentElement == null && newChild.nodeType == 1){\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;\n\t},\n\tremoveChild :  function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == 1){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn rtv;\n\t},\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data);\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.target = target;\n\t\tnode.nodeValue= node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr);\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr);\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\t},\n\tappendChild:function(newChild){\n\t\t\tthrow new Error(ExceptionMessage[3]);\n\t\treturn Node.prototype.appendChild.apply(this,arguments);\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n}\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n}\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n}\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n}\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n}\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node){\n\tvar buf = [];\n\tserializeToString(node,buf);\n\treturn buf.join('');\n}\nNode.prototype.toString =function(){\n\treturn XMLSerializer.prototype.serializeToString(this);\n}\nfunction serializeToString(node,buf){\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\t\tvar isHTML = htmlns === node.namespaceURI;\n\t\tbuf.push('<',nodeName);\n\t\tfor(var i=0;i<len;i++){\n\t\t\tserializeToString(attrs.item(i),buf);\n\t\t}\n\t\tif(child || isHTML && !/^(?:meta|link|img|br|hr|input|button)$/i.test(nodeName)){\n\t\t\tbuf.push('>');\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\tif(child){\n\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child,buf);\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('</',nodeName,'>');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child,buf);\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn buf.push(' ',node.name,'=\"',node.value.replace(/[<&\"]/g,_xmlEncoder),'\"');\n\tcase TEXT_NODE:\n\t\treturn buf.push(node.data.replace(/[<&]/g,_xmlEncoder));\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '<![CDATA[',node.data,']]>');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"<!--\",node.data,\"-->\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('<!DOCTYPE ',node.name);\n\t\tif(pubid){\n\t\t\tbuf.push(' PUBLIC \"',pubid);\n\t\t\tif (sysid && sysid!='.') {\n\t\t\t\tbuf.push( '\" \"',sysid);\n\t\t\t}\n\t\t\tbuf.push('\">');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM \"',sysid,'\">');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"<?\",node.target,\" \",node.data,\"?>\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t\tbreak;\n\t}\n\tif(!node2){\n\t\tnode2 = node.cloneNode(false);//false\n\t}\n\tnode2.ownerDocument = doc;\n\tnode2.parentNode = null;\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(importNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\nfunction cloneNode(doc,node,deep){\n\tvar node2 = new node.constructor();\n\tfor(var n in node){\n\t\tvar v = node[n];\n\t\tif(typeof v != 'object' ){\n\t\t\tif(v != node2[n]){\n\t\t\t\tnode2[n] = v;\n\t\t\t}\n\t\t}\n\t}\n\tif(node.childNodes){\n\t\tnode2.childNodes = new NodeList();\n\t}\n\tnode2.ownerDocument = doc;\n\tswitch (node2.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tvar attrs\t= node.attributes;\n\t\tvar attrs2\t= node2.attributes = new NamedNodeMap();\n\t\tvar len = attrs.length;\n\t\tattrs2._ownerElement = node2;\n\t\tfor(var i=0;i<len;i++){\n\t\t\tnode2.setAttributeNode(cloneNode(doc,attrs.item(i),true));\n\t\t}\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t}\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(cloneNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n\nfunction __set__(object,key,value){\n\tobject[key] = value;\n}\nfunction getTextContent(node){\n\tswitch(node.nodeType){\n\tcase 1:\n\tcase 11:\n\t\tvar buf = [];\n\t\tnode = node.firstChild;\n\t\twhile(node){\n\t\t\tif(node.nodeType!==7 && node.nodeType !==8){\n\t\t\t\tbuf.push(getTextContent(node));\n\t\t\t}\n\t\t\tnode = node.nextSibling;\n\t\t}\n\t\treturn buf.join('');\n\tdefault:\n\t\treturn node.nodeValue;\n\t}\n}\ntry{\n\tif(Object.defineProperty){\n\t\tObject.defineProperty(LiveNodeList.prototype,'length',{\n\t\t\tget:function(){\n\t\t\t\t_updateLiveList(this);\n\t\t\t\treturn this.$$length;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(Node.prototype,'textContent',{\n\t\t\tget:function(){\n\t\t\t\treturn getTextContent(this);\n\t\t\t},\n\t\t\tset:function(data){\n\t\t\t\tswitch(this.nodeType){\n\t\t\t\tcase 1:\n\t\t\t\tcase 11:\n\t\t\t\t\twhile(this.firstChild){\n\t\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif(data || String(data)){\n\t\t\t\t\t\tthis.appendChild(this.ownerDocument.createTextNode(data));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.data = data;\n\t\t\t\t\tthis.value = value;\n\t\t\t\t\tthis.nodeValue = data;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t__set__ = function(object,key,value){\n\t\t\tobject['$$'+key] = value;\n\t\t};\n\t}\n}catch(e){//ie8\n}\n\nreturn DOMImplementation;\n});\n\nace.define(\"ace/mode/xml/dom-parser\",[], function(require, exports, module) {\n\t'use strict';\n\n\tvar XMLReader = require('./sax'),\n\t\tDOMImplementation = require('./dom');\n\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n\t\n}\nDOMParser.prototype.parseFromString = function(source,mimeType){\t\n\tvar options = this.options;\n\tvar sax =  new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar entityMap = {'lt':'<','gt':'>','amp':'&','quot':'\"','apos':\"'\"}\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\t\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(/\\/x?html?$/.test(mimeType)){\n\t\tentityMap.nbsp = '\\xa0';\n\t\tentityMap.copy = '\\xa9';\n\t\tdefaultNSMap['']= 'http://www.w3.org/1999/xhtml';\n\t}\n\tif(source){\n\t\tsax.parse(source,defaultNSMap,entityMap);\n\t}else{\n\t\tsax.errorHandler.error(\"invalid document source\");\n\t}\n\treturn domBuilder.document;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn){\n\t\t\tif(isCallback){\n\t\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t\t}else{\n\t\t\t\tvar i=arguments.length;\n\t\t\t\twhile(--i){\n\t\t\t\t\tif(fn = errorImpl[arguments[i]]){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn(msg+_locator(locator), msg, locator);\n\t\t}||function(){};\n\t}\n\tbuild('warning','warn');\n\tbuild('error','warn','warning');\n\tbuild('fatalError','warn','warning','error');\n\treturn errorHandler;\n}\nfunction DOMHandler() {\n    this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n} \nDOMHandler.prototype = {\n\tstartDocument : function() {\n    \tthis.document = new DOMImplementation().createDocument(null, null, null);\n    \tif (this.locator) {\n        \tthis.document.documentURI = this.locator.systemId;\n    \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.document;\n\t    var el = doc.createElementNS(namespaceURI, qName||localName);\n\t    var len = attrs.length;\n\t    appendElement(this, el);\n\t    this.currentElement = el;\n\t    \n\t\tthis.locator && position(this.locator,el)\n\t    for (var i = 0 ; i < len; i++) {\n\t        var namespaceURI = attrs.getURI(i);\n\t        var value = attrs.getValue(i);\n\t        var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tif( attr.getOffset){\n\t\t\t\tposition(attr.getOffset(1),attr)\n\t\t\t}\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t    }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t    var tagName = current.tagName;\n\t    this.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t    var ins = this.document.createProcessingInstruction(target, data);\n\t    this.locator && position(this.locator,ins)\n\t    appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\tif(this.currentElement && chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.document.createCDATASection(chars);\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.document.createTextNode(chars);\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.document.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t    if(this.locator = locator){// && !('lineNumber' in locator)){\n\t    \tlocator.lineNumber = 0;\n\t    }\n\t},\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t    var comm = this.document.createComment(chars);\n\t    this.locator && position(this.locator,comm)\n\t    appendElement(this, comm);\n\t},\n\t\n\tstartCDATA:function() {\n\t    this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t    this.cdata = false;\n\t},\n\t\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.document.implementation;\n\t    if (impl && impl.createDocumentType) {\n\t        var dt = impl.createDocumentType(name, publicId, systemId);\n\t        this.locator && position(this.locator,dt)\n\t        appendElement(this, dt);\n\t    }\n\t},\n\twarning:function(error) {\n\t\tconsole.warn(error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error(error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tconsole.error(error,_locator(this.locator));\n\t    throw error;\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\nfunction appendElement (hander,node) {\n    if (!hander.currentElement) {\n        hander.document.appendChild(node);\n    } else {\n        hander.currentElement.appendChild(node);\n    }\n}//appendChild and setAttributeNS are preformance key\n\nreturn {\n\t\tDOMParser: DOMParser\n\t };\n});\n\nace.define(\"ace/mode/xml_worker\",[], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar DOMParser = require(\"./xml/dom-parser\").DOMParser;\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.context = null;\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.setOptions = function(options) {\n        this.context = options.context;\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return;\n        var parser = new DOMParser();\n        var errors = [];\n        parser.options.errorHandler = {\n            fatalError: function(fullMsg, errorMsg, locator) {\n                errors.push({\n                    row: locator.lineNumber,\n                    column: locator.columnNumber,\n                    text: errorMsg,\n                    type: \"error\"\n                });\n            },\n            error: function(fullMsg, errorMsg, locator) {\n                errors.push({\n                    row: locator.lineNumber,\n                    column: locator.columnNumber,\n                    text: errorMsg,\n                    type: \"error\"\n                });\n            },\n            warning: function(fullMsg, errorMsg, locator) {\n                errors.push({\n                    row: locator.lineNumber,\n                    column: locator.columnNumber,\n                    text: errorMsg,\n                    type: \"warning\"\n                });\n            }\n        };\n        \n        parser.parseFromString(value);\n        this.sender.emit(\"error\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n"
  },
  {
    "path": "publishable/assets/js/ace/libs/worker-xquery.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err && err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err && err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        sender = window.sender = window.initSender();\n        var clazz = this.require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function () {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    this.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    }\n    else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n    }\n    else {\n        this.insert({ row: 0, column: 0 }, textOrLines);\n    }\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    this.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function (text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    }\n    else {\n        this.$split = function (text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function () {\n        return this.$lines.length;\n    };\n    this.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    this.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    this.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    this.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    this.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    this.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    this.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    this.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    this.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    this.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    this.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\n\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                var d, err; \n                if (Array.isArray(data[i+1])) {\n                    d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                \n                if ((d.action == \"insert\" ? d.start : d.end).row >= doc.$lines.length) {\n                    err = new Error(\"Invalid delta\");\n                    err.data = {\n                        path: _self.$path,\n                        linesLength: doc.$lines.length,\n                        start: d.start,\n                        end: d.end\n                    };\n                    throw err;\n                }\n\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/xquery/xqlint\",[], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/xqlint/lib/compiler/errors.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar init = function(that, code, message, pos, type){\n    if(!code) {\n        throw new Error(type + ' code is missing.');\n    }\n    \n    if(!message) {\n        throw new Error(type + ' message is missing.');\n    }\n    \n    if(!pos) {\n        throw new Error(type + ' position is missing.');\n    }\n\n    that.getCode = function(){\n        return code;\n    };\n    \n    that.getMessage = function(){\n        return message;\n    };\n\n    that.getPos = function(){\n        return pos;\n    };\n};\n\nvar StaticError = {};\nvar StaticWarning = {};\nStaticError.prototype = new Error();\nStaticWarning.prototype = new Error();\n\nexports.StaticError = StaticError.prototype.constructor = function(code, message, pos) {\n    init(this, code, message, pos, 'Error');\n};\n\nexports.StaticWarning = StaticWarning.prototype.constructor = function(code, message, pos) {\n    init(this, code, message, pos, 'Warning');\n};\n},{}],\"/node_modules/xqlint/lib/compiler/handlers.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TreeOps = _dereq_('../tree_ops').TreeOps;\nvar Errors = _dereq_('./errors');\nvar StaticWarning = Errors.StaticWarning;\nexports.ModuleDecl = function(translator, rootSctx, node){\n    var prefix = '';\n    return {\n        NCName: function(ncname){\n            prefix = TreeOps.flatten(ncname);\n        },\n\n        URILiteral: function(uri) {\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            translator.apply(function(){\n                rootSctx.moduleNamespace = uri;\n                rootSctx.addNamespace(uri, prefix, node.pos, 'moduleDecl');\n            });\n        }\n    };\n};\n\nexports.ModuleImport = function(translator, rootSctx, node) {\n    var prefix = '';\n    var moduleURI;\n\n    return {\n        NCName: function(ncname){\n            prefix = TreeOps.flatten(ncname);\n        },\n\n        URILiteral: function(uri) {\n            if(moduleURI !== undefined) {\n                return;\n            }\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            moduleURI = uri;\n            translator.apply(function(){\n                rootSctx.importModule(uri, prefix, node.pos);\n            });\n        }\n    };\n};\n\nexports.SchemaImport = function(translator, rootSctx, node) {\n    var prefix = '';\n    var schemaURI;\n    \n    return {\n        SchemaPrefix: function(schemaPrefix) {\n            var SchemaPrefixHandler = function () {\n                this.NCName = function (ncname) {\n                    prefix = TreeOps.flatten(ncname);\n                };\n            };\n            translator.visitChildren(schemaPrefix, new SchemaPrefixHandler());\n        },\n\n        URILiteral: function(uri) {\n            if(schemaURI !== undefined) {\n                return;\n            }\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            schemaURI = uri;\n            translator.apply(function(){\n                rootSctx.addNamespace(uri, prefix, node.pos, 'schema');\n            });\n        }\n    };\n};\n\nexports.DefaultNamespaceDecl = function(translator, rootSctx, node) {\n    var fn = false;\n    var ns = '';\n\n    return {\n        TOKEN: function(token){\n            fn = fn ? true : (token.value === 'function');\n        },\n        URILiteral: function(uri){\n            ns = TreeOps.flatten(uri);\n            ns = ns.substring(1, ns.length - 1);\n            if(!fn) {\n                translator.apply(function(){\n                    throw new StaticWarning('W06', 'Avoid default element namespace declarations.', node.pos);\n                });\n                rootSctx.defaultElementNamespace = ns;\n            } else {\n                rootSctx.defaultFunctionNamespace = ns;\n            }\n        }\n    };\n};\n\nexports.NamespaceDecl = function(translator, rootSctx, node) {\n    var prefix = '';\n    return {\n        NCName: function(ncname) {\n            prefix = TreeOps.flatten(ncname);\n        },\n        URILiteral: function(uri) {\n            uri = TreeOps.flatten(uri);\n            uri = uri.substring(1, uri.length - 1);\n            translator.apply(function(){\n                rootSctx.addNamespace(uri, prefix, node.pos, 'declare');\n            });\n        }\n    };\n};\nexports.VarHandler = function(translator, sctx, node){\n    var EQNameHandler = function(eqname){\n        var value = TreeOps.flatten(eqname);\n        translator.apply(function(){\n            var qname = sctx.resolveQName(value, eqname.pos);\n            sctx.addVariable(qname, node.name, eqname.pos);\n        });\n    };\n    return {\n        ExprSingle: function(){ return true; },\n        VarValue: function(){ return true; },\n        VarDefaultValue: function(){ return true; },\n        VarName: EQNameHandler,\n        EQName: EQNameHandler\n    };\n};\n\nexports.VarRefHandler = function(translator, sctx, node){\n    return {\n        VarName: function(eqname){\n            var value = TreeOps.flatten(eqname);\n            translator.apply(function(){\n                var qname = sctx.resolveQName(value, node.pos);\n                if(qname.uri !== '') {\n                    sctx.root.namespaces[qname.uri].used = true;\n                }\n                sctx.addVarRef(qname, eqname.pos);\n            });\n        }\n    };\n};\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\"}],\"/node_modules/xqlint/lib/compiler/schema_built-in_types.js\":[function(_dereq_,module,exports){\n'use strict';\nexports.getSchemaBuiltinTypes = function(){\n    var ns = 'http://www.w3.org/2001/XMLSchema';\n    var SchemaBuiltinTypes = {};\n    SchemaBuiltinTypes[ns] = {\n        variables: {},\n        functions: {}\n    };\n    SchemaBuiltinTypes[ns].functions[ns + '#string#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'string', arity: 1, eqname: { uri: ns, name: 'string' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#boolean#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'boolean', arity: 1, eqname: { uri: ns, name: 'boolean' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#decimal#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'decimal', arity: 1, eqname: { uri: ns, name: 'decimal' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#float#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'float', arity: 1, eqname: { uri: ns, name: 'float' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#double#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'double', arity: 1, eqname: { uri: ns, name: 'double' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#duration#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'duration', arity: 1, eqname: { uri: ns, name: 'duration' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#dateTime#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'dateTime', arity: 1, eqname: { uri: ns, name: 'dateTime' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#time#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'time', arity: 1, eqname: { uri: ns, name: 'time' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#date#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'date', arity: 1, eqname: { uri: ns, name: 'date' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gYearMonth#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gYearMonth', arity: 1, eqname: { uri: ns, name: 'gYearMonth' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gYear#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gYear', arity: 1, eqname: { uri: ns, name: 'gYear' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gMonthDay#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gMonthDay', arity: 1, eqname: { uri: ns, name: 'gMonthDay' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gDay#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gDay', arity: 1, eqname: { uri: ns, name: 'gDay' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#gMonth#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'gMonth', arity: 1, eqname: { uri: ns, name: 'gMonth' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#hexBinary#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'hexBinary', arity: 1, eqname: { uri: ns, name: 'hexBinary' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#base64Binary#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'base64Binary', arity: 1, eqname: { uri: ns, name: 'base64Binary' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#anyURI#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'anyURI', arity: 1, eqname: { uri: ns, name: 'anyURI' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#QName#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'QName', arity: 1, eqname: { uri: ns, name: 'QName' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#normalizedString#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'normalizedString', arity: 1, eqname: { uri: ns, name: 'normalizedString' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#token#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'token', arity: 1, eqname: { uri: ns, name: 'token' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#language#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'language', arity: 1, eqname: { uri: ns, name: 'language' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#NMTOKEN#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'NMTOKEN', arity: 1, eqname: { uri: ns, name: 'NMTOKEN' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#Name#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'Name', arity: 1, eqname: { uri: ns, name: 'Name' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#NCName#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'NCName', arity: 1, eqname: { uri: ns, name: 'NCName' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#ID#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'ID', arity: 1, eqname: { uri: ns, name: 'ID' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#IDREF#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'IDREF', arity: 1, eqname: { uri: ns, name: 'IDREF' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#ENTITY#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'ENTITY', arity: 1, eqname: { uri: ns, name: 'ENTITY' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#integer#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'integer', arity: 1, eqname: { uri: ns, name: 'integer' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#nonPositiveInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'nonPositiveInteger', arity: 1, eqname: { uri: ns, name: 'nonPositiveInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#negativeInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'negativeInteger', arity: 1, eqname: { uri: ns, name: 'negativeInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#long#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'long', arity: 1, eqname: { uri: ns, name: 'long' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#int#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'int', arity: 1, eqname: { uri: ns, name: 'int' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#short#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'short', arity: 1, eqname: { uri: ns, name: 'short' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#byte#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'byte', arity: 1, eqname: { uri: ns, name: 'byte' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#nonNegativeInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'nonNegativeInteger', arity: 1, eqname: { uri: ns, name: 'nonNegativeInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedLong#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedLong', arity: 1, eqname: { uri: ns, name: 'unsignedLong' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedInt#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedInt', arity: 1, eqname: { uri: ns, name: 'unsignedInt' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedShort#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedShort', arity: 1, eqname: { uri: ns, name: 'unsignedShort' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#unsignedByte#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'unsignedByte', arity: 1, eqname: { uri: ns, name: 'unsignedByte' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#positiveInteger#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'positiveInteger', arity: 1, eqname: { uri: ns, name: 'positiveInteger' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#yearMonthDuration#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'yearMonthDuration', arity: 1, eqname: { uri: ns, name: 'yearMonthDuration' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#dayTimeDuration#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'dayTimeDuration', arity: 1, eqname: { uri: ns, name: 'dayTimeDuration' } };\n    SchemaBuiltinTypes[ns].functions[ns + '#untypedAtomic#1'] = { params: ['$arg as xs:anyAtomicType?'], annotations: [], name: 'untypedAtomic', arity: 1, eqname: { uri: ns, name: 'untypedAtomic' } };\n    return SchemaBuiltinTypes;\n};\n},{}],\"/node_modules/xqlint/lib/compiler/static_context.js\":[function(_dereq_,module,exports){\nexports.StaticContext = function (parent, pos) {\n    'use strict';\n    \n    var TreeOps = _dereq_('../tree_ops').TreeOps;\n    \n    var Errors = _dereq_('./errors');\n    var StaticError = Errors.StaticError;\n    var StaticWarning = Errors.StaticWarning;\n    \n    var getSchemaBuiltinTypes = _dereq_('./schema_built-in_types').getSchemaBuiltinTypes;\n    \n    var emptyPos = { sl:0, sc: 0, el: 0, ec: 0 };\n    var namespaces = {};\n    \n    var getVarKey = function(qname) {\n        return qname.uri + '#' + qname.name;\n    };\n\n    var getFnKey = function(qname, arity) {\n        return getVarKey(qname) + '#' + arity;\n    };\n\n    if(!parent) {\n        namespaces['http://jsoniq.org/functions'] = {\n            prefixes: ['jn'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.28msec.com/modules/collections'] = {\n            prefixes: ['db'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.28msec.com/modules/store'] = {\n            prefixes: ['store'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://jsoniq.org/function-library'] = {\n            prefixes: ['libjn'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.w3.org/2005/xpath-functions'] = {\n            prefixes: ['fn'],\n            pos: emptyPos,\n            type: 'module',\n            override: true\n        };\n        namespaces['http://www.w3.org/2005/xquery-local-functions'] = {\n            prefixes: ['local'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://www.w3.org/2001/XMLSchema-instance'] = {\n            prefixes: ['xsi'],\n            pos: emptyPos,\n            type: 'declare'\n        };\n        namespaces['http://www.w3.org/2001/XMLSchema'] = {\n            prefixes: ['xs'],\n            pos: emptyPos,\n            type: 'declare'\n        };\n        namespaces['http://www.w3.org/XML/1998/namespace'] = {\n            prefixes: ['xml'],\n            pos: emptyPos,\n            type: 'declare'\n        };\n        namespaces['http://zorba.io/annotations'] = {\n            prefixes: ['an'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://www.28msec.com/annotations/rest'] = {\n            prefixes: ['rest'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://www.w3.org/2005/xqt-errors'] = {\n            prefixes: ['err'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n        namespaces['http://zorba.io/errors'] = {\n            prefixes: ['zerr'],\n            pos: emptyPos,\n            type: 'declare',\n            override: true\n        };\n    }\n\n    var s = {\n        parent: parent,\n        children: [],\n        pos: pos,\n        setModuleResolver: function(resolver){\n            this.root.moduleResolver = resolver;\n            return this;\n        },\n        setModules: function(index){\n            if(this !== this.root){\n                throw new Error('setModules() not invoked from the root static context.');\n            }\n            this.moduleResolver = function(uri){\n                return index[uri];\n            };\n            var that = this;\n            Object.keys(this.namespaces).forEach(function(uri){\n                var ns = that.namespaces[uri];\n                if(ns.type === 'module') {\n                    var mod = that.moduleResolver(uri);\n                    if(mod.variables) {\n                        TreeOps.concat(that.variables, mod.variables);\n                    }\n                    if(mod.functions) {\n                        TreeOps.concat(that.functions, mod.functions);\n                    }\n                }\n            });\n            return this;\n        },\n        setModulesFromXQDoc: function(xqdoc){\n            if(this !== this.root){\n                throw new Error('setModulesFromXQDoc() not invoked from the root static context.');\n            }\n            var index = {};\n            Object.keys(xqdoc).forEach(function(uri) {\n                var mod = xqdoc[uri];\n                var variables = {};\n                var functions = {};\n                mod.functions.forEach(function(fn){\n                    functions[uri + '#' + fn.name + '#' + fn.arity] = {\n                        params: [],\n                        annotations: [],\n                        name: fn.name,\n                        arity: fn.arity,\n                        eqname: { uri: uri, name: fn.name }\n                    };\n                    fn.parameters.forEach(function(param){\n                        functions[uri + '#' + fn.name + '#' + fn.arity].params.push('$' + param.name);\n                    });\n                });\n                mod.variables.forEach(function(variable){\n                    var name = variable.name.substring(variable.name.indexOf(':') + 1);\n                    variables[uri + '#' + name] = { type: 'VarDecl', annotations: [], eqname: { uri: uri, name: name } };\n                });\n                index[uri] = {\n                    variables: variables,\n                    functions: functions\n                };\n            });\n            this.root.moduleResolver = function(uri){\n                return index[uri];\n            };\n            var that = this;\n            Object.keys(this.namespaces).forEach(function(uri){\n                var ns = that.namespaces[uri];\n                if(ns.type === 'module') {\n                    var mod = that.moduleResolver(uri);\n                    if(mod.variables) {\n                        TreeOps.concat(that.variables, mod.variables);\n                    }\n                    if(mod.functions) {\n                        TreeOps.concat(that.functions, mod.functions);\n                    }\n                }\n            });\n            return this;\n        },\n        moduleNamespace: '',\n        description: '',\n        defaultFunctionNamespace: 'http://www.w3.org/2005/xpath-functions',\n        defaultFunctionNamespaces: [\n            'http://www.28msec.com/modules/collections',\n            'http://www.28msec.com/modules/store',\n            'http://jsoniq.org/functions',\n            'http://jsoniq.org/function-library',\n            'http://www.w3.org/2001/XMLSchema' //Built-in type constructors\n        ],\n        defaultElementNamespace: '',\n        namespaces: namespaces,\n        availableModuleNamespaces: [],\n        importModule: function(uri, prefix, pos) {\n            if(this !== this.root){\n                throw new Error('Function not invoked from the root static context.');\n            }\n            this.addNamespace(uri, prefix, pos, 'module');\n            if(this.moduleResolver) {\n                try {\n                    var mod = this.moduleResolver(uri, []);\n                    if(mod.variables) {\n                        TreeOps.concat(this.variables, mod.variables);\n                    }\n                    if(mod.functions) {\n                        TreeOps.concat(this.functions, mod.functions);\n                    }\n                } catch(e) {\n                    throw new StaticError('XQST0059', 'module \"' + uri + '\" not found', pos);\n                }\n            }\n            return this;\n        },\n\n        getAvailableModuleNamespaces: function(){\n            return this.root.availableModuleNamespaces;\n        },\n\n        getPrefixesByNamespace: function(uri){\n            return this.root.namespaces[uri].prefixes;\n        },\n\n        addNamespace: function (uri, prefix, pos, type) {\n            if(prefix === '' && type === 'module') {\n                throw new StaticWarning('W01', 'Avoid this type of import. Use import module namespace instead', pos);\n            }\n            if (uri === '') {\n                throw new StaticError('XQST0088', 'empty target namespace in module import or module declaration', pos);\n            }\n            var namespace = this.getNamespace(uri);\n            if (namespace && namespace.type === type && type !== 'declare' && !namespace.override) {\n                throw new StaticError('XQST0047', '\"' + uri + '\": duplicate target namespace', pos);\n            }\n            namespace = this.getNamespaceByPrefix(prefix);\n            if (namespace && !namespace.override) {\n                throw new StaticError('XQST0033', '\"' + prefix + '\": namespace prefix already bound to \"' + namespace.uri + '\"', pos);\n            }\n\n            namespace = this.namespaces[uri];\n            var prefixes = [prefix];\n            if(namespace) {\n                prefixes = prefixes.concat(this.namespaces[uri].prefixes);\n            }\n            this.namespaces[uri] = {\n                prefixes: prefixes,\n                pos: pos,\n                type: type\n            };\n\n            if (namespace) {\n                throw new StaticWarning('W02', '\"' + uri + '\" already bound to the \"' + namespace.prefixes.join(', ') + '\" prefix', pos);\n            }\n\n        },\n\n        getNamespaces: function(){\n            return this.root.namespaces;\n        },\n        \n        getNamespace: function (uri) {\n            var that = this;\n            while (that) {\n                var namespace = that.namespaces[uri];\n                if (namespace) {\n                    return namespace;\n                }\n                that = that.parent;\n            }\n\n        },\n\n        getNamespaceByPrefix: function (prefix) {\n            var found = [];\n            var handler = function (uri) {\n                var namespace = that.namespaces[uri];\n                if (namespace.prefixes.indexOf(prefix) !== -1) {\n                    namespace.uri = uri;\n                    found.push(namespace);\n                }\n            };\n            var that = this;\n            while (that) {\n                Object.keys(that.namespaces).forEach(handler);\n                that = that.parent;\n            }\n            var result;\n            found.forEach(function(ns){\n                if(ns.type === 'moduleDecl') {\n                    result = ns;\n                }\n            });\n            if(result) {\n                return result;\n            } else {\n                return found[0];\n            }\n        },\n        \n        resolveQName: function(value, pos){\n            var qname = {\n                uri: '',\n                prefix: '',\n                name: ''\n            };\n            var idx;\n            if (value.substring(0, 2) === 'Q{') {\n                idx = value.indexOf('}');\n                qname.uri = value.substring(2, idx);\n                qname.name = value.substring(idx + 1);\n            } else {\n                idx = value.indexOf(':');\n                qname.prefix = value.substring(0, idx);\n                var namespace = this.getNamespaceByPrefix(qname.prefix);\n                if(!namespace && qname.prefix !== '' && ['fn', 'jn'].indexOf(qname.prefix) === -1) {\n                    throw new StaticError('XPST0081', '\"' + qname.prefix + '\": can not expand prefix of lexical QName to namespace URI', pos);\n                }\n                if(namespace) {\n                    qname.uri = namespace.uri;\n                }\n                qname.name = value.substring(idx + 1);\n            }\n            return qname;\n        },\n        \n        variables: {},\n        varRefs: {},\n        functionCalls: {},\n    \n        addVariable: function(qname, type, pos){\n            if(\n                type === 'VarDecl' && this.moduleNamespace !== '' &&\n                !(this.moduleNamespace === qname.uri || qname.uri === '')\n            ) {\n                throw new StaticError('XQST0048', '\"' + qname.prefix + ':' + qname.name + '\": Qname not library namespace', pos);\n            }\n            var key = getVarKey(qname);\n            if(type === 'VarDecl' && this.variables[key]) {\n                throw new StaticError('XQST0049', '\"' + qname.name + '\": duplicate variable declaration', pos);\n            }\n            this.variables[key] = {\n                type: type,\n                pos: pos,\n                qname: qname,\n                annotations: {}\n            };\n            return this;\n        },\n        \n        getVariables: function(){\n            var variables = {};\n            var that = this;\n            var handler = function(key){\n                if(!variables[key]){\n                    variables[key] = that.variables[key];\n                }\n            };\n            while(that){\n                Object.keys(that.variables).forEach(handler);\n                that = that.parent;\n            }\n            return variables;\n        },\n        \n        getVariable: function(qname) {\n            var key = getVarKey(qname);\n            var that = this;\n            while(that) {\n                if(that.variables[key]) {\n                    return that.variables[key];\n                }\n                that = that.parent;\n            }\n        },\n        \n        addVarRef: function(qname, pos){\n            var varDecl = this.getVariable(qname);\n            if(!varDecl && (qname.uri === '' || this.root.moduleResolver)) {\n                throw new StaticError('XPST0008', '\"' + qname.name + '\": undeclared variable', pos);\n            }\n            var key = getVarKey(qname);\n            this.varRefs[key] = true;\n        },\n        \n        addFunctionCall: function(qname, arity, pos){\n            var fn = this.getFunction(qname, arity);\n            if(!fn && (qname.uri === 'http://www.w3.org/2005/xquery-local-functions' || this.root.moduleResolver)){\n                if((qname.uri === 'http://www.w3.org/2005/xpath-functions' ||\n                    (qname.uri === '' && this.root.defaultFunctionNamespaces.concat(this.root.defaultFunctionNamespace).indexOf('http://www.w3.org/2005/xpath-functions') !== -1)) && qname.name === 'concat') {\n                } else if(!fn){\n                    throw new StaticError('XPST0008', '\"' + qname.name + '#' + arity + '\": undeclared function', pos);\n                }\n            }\n            var key = getFnKey(qname, arity);\n            this.functionCalls[key] = true;\n        },\n        \n        functions: getSchemaBuiltinTypes()['http://www.w3.org/2001/XMLSchema'].functions,\n\n        getFunctions: function(){\n            return this.root.functions;\n        },\n        \n        getFunction: function(qname, arity){\n            var key = getFnKey(qname, arity);\n            var fn;\n            if(qname.uri === '') {\n                var that = this;\n                this.root.defaultFunctionNamespaces.concat([this.root.defaultFunctionNamespace]).forEach(function(defaultFunctionNamespace){\n                    if(!fn){\n                        fn = that.getFunction({ uri: defaultFunctionNamespace, prefix: qname.prefix, name: qname.name }, arity);\n                    } else {\n                        return false;\n                    }\n                });\n                return fn;\n            } else {\n                return this.root.functions[key];\n            }\n        },\n        \n        addFunction: function(qname, pos, params) {\n            if(this !== this.root){\n                throw new Error('addFunction() not invoked from the root static context.');\n            }\n            var arity = params.length;\n            if(\n                this.moduleNamespace !== '' &&\n                !(this.moduleNamespace === qname.uri || (qname.uri === '' && this.defaultFunctionNamespace === this.moduleNamespace))\n            ) {\n                throw new StaticError('XQST0048', '\"' + qname.prefix + ':' + qname.name + '\": Qname not library namespace', pos);\n            }\n            var key = getFnKey(qname, arity);\n            if(this.functions[key]) {\n                throw new StaticError('XQST0034', '\"' + qname.name + '\": duplicate function declaration', pos);\n            }\n            this.functions[key] = {\n                pos: pos,\n                params: params\n            };\n            return this;\n        }\n        \n    };\n    s.root = parent ? parent.root : s;\n    return s;\n};\n\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\",\"./schema_built-in_types\":\"/node_modules/xqlint/lib/compiler/schema_built-in_types.js\"}],\"/node_modules/xqlint/lib/compiler/translator.js\":[function(_dereq_,module,exports){\nexports.Translator = function(rootStcx, ast){\n    'use strict';\n\n    var Errors = _dereq_('./errors');\n    var StaticError = Errors.StaticError;\n    var StaticWarning = Errors.StaticWarning;\n    \n    var TreeOps = _dereq_('../tree_ops').TreeOps;\n    var StaticContext = _dereq_('./static_context').StaticContext;\n    var Handlers = _dereq_('./handlers');\n    \n    var get = function(node, path){\n        var result = [];\n        if(path.length === 0){\n            return node;\n        }\n        node.children.forEach(function(child){\n            if(child.name === path[0] && path.length > 1) {\n                result = get(child, path.slice(1));\n            } else if(child.name === path[0]) {\n                result.push(child);\n            }\n        });\n        return result;\n    };\n    \n    var markers = [];\n    this.apply = function(fn) {\n        try {\n            fn();\n        } catch(e) {\n            if(e instanceof StaticError) {\n                addStaticError(e);\n            } else if(e instanceof StaticWarning) {\n                addWarning(e.getCode(), e.getMessage(), e.getPos());\n            } else {\n                throw e;\n            }\n        }\n    };\n\n    var addStaticError = function(e){\n        markers.push({\n            pos: e.getPos(),\n            type: 'error',\n            level: 'error',\n            message: '[' + e.getCode() + '] ' + e.getMessage()\n        });\n    };\n    \n    var addWarning = function(code, message, pos) {\n        markers.push({\n            pos: pos,\n            type: 'warning',\n            level: 'warning',\n            message: '[' + code + '] ' + message\n        });\n    };\n    \n    this.getMarkers = function(){\n        return markers;\n    };\n\n    var translator = this;\n\n    rootStcx.pos = ast.pos;\n    var sctx = rootStcx;\n    var pushSctx = function(pos){\n        sctx = new StaticContext(sctx, pos);\n        sctx.parent.children.push(sctx);\n    };\n    \n    var popSctx = function(pos){\n        if (pos !== undefined) {\n            sctx.pos.el = pos.el;\n            sctx.pos.ec = pos.ec;\n        }\n\n        Object.keys(sctx.varRefs).forEach(function(key){\n            if(!sctx.variables[key]) {\n                sctx.parent.varRefs[key] = true;\n            }\n        });\n        Object.keys(sctx.variables).forEach(function(key){\n            if(!sctx.varRefs[key] && sctx.variables[key].type !== 'GroupingVariable' && sctx.variables[key].type !== 'CatchVar') {\n                addWarning('W03', 'Unused variable \"$' + sctx.variables[key].qname.name + '\"', sctx.variables[key].pos);\n            }\n        });\n        \n        sctx = sctx.parent;\n    };\n    \n    this.visitOnly = function(node, names) {\n        node.children.forEach(function(child){\n            if (names.indexOf(child.name) !== -1){\n                translator.visit(child);\n            }\n        });\n    };\n    \n    this.getFirstChild = function(node, name) {\n        var result;\n        node.children.forEach(function(child){\n            if(child.name === name && result === undefined){\n                result = child;\n            }\n        });\n        return result;\n    };\n\n    this.XQuery = function(node) {\n        rootStcx.description = node.comment ? node.comment.description : undefined;\n    };\n    \n    this.ModuleDecl = function(node){\n        this.visitChildren(node, Handlers.ModuleDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.Prolog = function(node){\n        this.visitOnly(node, ['DefaultNamespaceDecl', 'Setter', 'NamespaceDecl', 'Import']);\n        ast.index.forEach(function(node){\n            if(node.name === 'VarDecl') {\n                node.children.forEach(function(child){\n                    if(child.name === 'VarName') {\n                        translator.apply(function(){\n                            var value = TreeOps.flatten(child);\n                            var qname = rootStcx.resolveQName(value, child.pos);\n                            rootStcx.addVariable(qname, node.name, child.pos);\n                        });\n                    }\n                });\n            } else if(node.name === 'FunctionDecl') {\n                var qname, pos, params = [];\n                node.children.forEach(function(child){\n                    if(child.name === 'EQName') {\n                        qname = child;\n                        pos = child.pos;\n                    } else if(child.name === 'ParamList'){\n                        child.children.forEach(function(c){\n                            if(c.name === 'Param') {\n                                params.push(TreeOps.flatten(c));\n                            }\n                        });\n                    }\n                });\n                translator.apply(function(){\n                    qname = TreeOps.flatten(qname);\n                    qname = rootStcx.resolveQName(qname, pos);\n                    rootStcx.addFunction(qname, pos, params);\n                });\n            }\n        });\n        this.visitOnly(node, ['ContextItemDecl', 'AnnotatedDecl', 'OptionDecl']);\n        return true;\n    };\n    \n    this.ModuleImport = function (node) {\n        this.visitChildren(node, Handlers.ModuleImport(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.SchemaImport = function (node) {\n        this.visitChildren(node, Handlers.SchemaImport(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.DefaultNamespaceDecl = function(node){\n        this.visitChildren(node, Handlers.DefaultNamespaceDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.NamespaceDecl = function (node) {\n        this.visitChildren(node, Handlers.NamespaceDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    var annotations = {};\n    this.AnnotatedDecl = function(node) {\n        annotations = {};\n        this.visitChildren(node, Handlers.NamespaceDecl(translator, rootStcx, node));\n        return true;\n    };\n    \n    this.CompatibilityAnnotation = function(){\n        annotations['http://www.w3.org/2012/xquery#updating'] = [];\n        return true;\n    };\n    \n    this.Annotation = function(node){\n        this.visitChildren(node, {\n            EQName: function(eqname){\n                var value = TreeOps.flatten(eqname);\n                translator.apply(function(){\n                    var qname = sctx.resolveQName(value, eqname.pos);\n                    annotations[qname.uri + '#' + qname.name] = [];\n                });\n            }\n        });\n        return true;\n    };\n    \n    this.VarDecl = function(node){\n        try {\n            var varname = translator.getFirstChild(node, 'VarName');\n            var value = TreeOps.flatten(varname);\n            var qname = sctx.resolveQName(value, varname.pos);\n            var variable = rootStcx.getVariable(qname);\n            if(variable) {\n                variable.annotations = annotations;\n                variable.description = node.getParent.comment ? node.getParent.comment.description : undefined;\n                variable.type = TreeOps.flatten(get(node, ['TypeDeclaration'])[0]).substring(2).trim();\n                var last = variable.type.substring(variable.type.length - 1);\n                if(last === '?') {\n                    variable.occurrence = 0;\n                    variable.type = variable.type.substring(0, variable.type.length - 1);\n                } else if(last === '*') {\n                    variable.occurrence = -1;\n                    variable.type = variable.type.substring(0, variable.type.length - 1);\n                } else if(last === '+') {\n                    variable.occurrence = 2;\n                    variable.type = variable.type.substring(0, variable.type.length - 1);\n                } else {\n                    variable.occurrence = 1;\n                }\n            }\n        } catch(e) {\n        }\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        return true;\n    };\n    \n    this.FunctionDecl = function(node) {\n        var isUpdating = annotations['http://www.w3.org/2012/xquery#updating'] !== undefined;\n        var typeDecl = get(node, ['ReturnType'])[0];\n        var name = get(node, ['EQName'])[0];\n        if(!typeDecl && !isUpdating){\n            addWarning('W05', 'Untyped return value', name.pos);\n        }\n        var isExternal = false;\n        node.children.forEach(function(child){\n            if(child.name === 'TOKEN' && child.value === 'external') {\n                isExternal = true;\n                return false;\n            }\n        });\n        if(!isExternal) {\n            pushSctx(node.pos);\n            this.visitChildren(node);\n            popSctx();\n        }\n        return true;\n    };\n    \n    this.VarRef = function(node) {\n        this.visitChildren(node, Handlers.VarRefHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.Param = function(node){\n        var typeDecl = get(node, ['TypeDeclaration'])[0];\n        if(!typeDecl){\n            addWarning('W05', 'Untyped function parameter', node.pos);\n        }\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.InlineFunctionExpr\t= function(node) {\n        pushSctx(node.pos);\n        this.visitChildren(node);\n        popSctx();\n        return true;\n    };\n    var statementCount = [];\n    var handleStatements = function(node) {\n        pushSctx(node.pos);\n        statementCount.push(0);\n        translator.visitChildren(node);\n        for (var i = 1; i <= statementCount[statementCount.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        statementCount.pop();\n        popSctx();\n    };\n\n    this.StatementsAndOptionalExpr = function (node) {\n        handleStatements(node);\n        return true;\n    };\n\n    this.StatementsAndExpr = function (node) {\n        handleStatements(node);\n        return true;\n    };\n\n    this.BlockStatement = function (node) {\n        handleStatements(node);\n        return true;\n    };\n    \n    this.VarDeclStatement = function(node){\n        pushSctx(node.pos);\n        statementCount[statementCount.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n    };\n    var clauses = [];\n    this.FLWORExpr = this.FLWORStatement = function (node) {\n        pushSctx(node.pos);\n        clauses.push(0);\n        this.visitChildren(node);\n        for(var i=1; i <= clauses[clauses.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        clauses.pop();\n        popSctx();\n        return true;\n    };\n    \n    this.ForBinding = function (node) {\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.LetBinding = function(node){\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.GroupingSpec = function(node){\n        var isVarDecl = false;\n        node.children.forEach(function(child){\n            if(child.value === ':=') {\n                isVarDecl = true;\n                return false;\n            }\n        });\n        if(isVarDecl) {\n            var groupingVariable = node.children[0];\n            this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n            pushSctx(node.pos);\n            clauses[clauses.length - 1]++;\n            this.visitChildren(groupingVariable, Handlers.VarHandler(translator, sctx, groupingVariable));\n            return true;\n        } else {\n            \n        }\n    };\n    \n    this.TumblingWindowClause = function (node) {\n        this.visitOnly(node, ['ExprSingle']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['WindowStartCondition', 'WindowEndCondition']);\n        return true;\n    };\n\n    this.WindowVars = function (node) {\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.SlidingWindowClause = function (node) {\n        this.visitOnly(node, ['ExprSingle', 'VarValue', 'VarDefaultValue']);\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['WindowStartCondition', 'WindowEndCondition']);\n        return true;\n    };\n\n    this.PositionalVar = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.PositionalVar = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.CurrentItem = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.PreviousItem = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.NextItem = function (node) {\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.CountClause = function (node) {\n        pushSctx(node.pos);\n        clauses[clauses.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n\n    this.CaseClause = function(node) {\n        pushSctx(node.pos);\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        this.visitOnly(node, ['ExprSingle']);\n        popSctx();\n        return true;\n    };\n    var copies = [];\n    this.TransformExpr = function (node) {\n        pushSctx(node.pos);\n        copies.push(0);\n        this.visitChildren(node);\n        for(var i=1; i <= copies[copies.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        copies.pop();\n        popSctx();\n        return true;\n    };\n    \n    this.TransformSpec = function(node) {\n        this.visitOnly(node, ['ExprSingle']);\n        pushSctx(node.pos);\n        copies[copies.length-1] += 1;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    var quantifiedDecls = [];\n    this.QuantifiedExpr = function (node) {\n        pushSctx(node.pos);\n        quantifiedDecls.push(0);\n        this.visitChildren(node);\n        for(var i=1; i <= quantifiedDecls[quantifiedDecls.length - 1]; i++) {\n            popSctx(node.pos);\n        }\n        quantifiedDecls.pop();\n        popSctx();\n        return true;\n    };\n    \n    this.QuantifiedVarDecl = function(node) {\n        this.visitOnly(node, ['ExprSingle']);\n        pushSctx(node.pos);\n        quantifiedDecls[quantifiedDecls.length - 1]++;\n        this.visitChildren(node, Handlers.VarHandler(translator, sctx, node));\n        return true;\n    };\n    \n    this.FunctionCall = function(node){\n        this.visitOnly(node, ['ArgumentList']);\n        var name = translator.getFirstChild(node, 'EQName');\n        var eqname = TreeOps.flatten(name);\n        var arity = get(node, ['ArgumentList', 'Argument']).length;\n        translator.apply(function(){\n            var qname = sctx.resolveQName(eqname, node.pos);\n            try {\n                if(qname.uri !== '') {\n                    sctx.root.namespaces[qname.uri].used = true;\n                }\n            } catch(e){\n            }\n            sctx.addFunctionCall(qname, arity, name.pos);\n        });\n        return true;\n    };\n    \n    this.TryClause = function(node){\n        pushSctx(node.pos);\n        this.visitChildren(node);\n        popSctx();\n        return true;\n    };\n    \n    this.CatchClause = function(node){\n        pushSctx(node.pos);\n        var prefix = 'err';\n        var uri = 'http://www.w3.org/2005/xqt-errors';\n        var emptyPos = { sl: 0, sc: 0, el: 0, ec: 0 };\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'code' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'description' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'value' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'module' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'line-number' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'column-number' }, 'CatchVar', emptyPos);\n        sctx.addVariable({ prefix: prefix, uri: uri, name: 'additional' }, 'CatchVar', emptyPos);\n        this.visitChildren(node);\n        popSctx();\n        return true;\n    };\n\n    this.Pragma = function(node){\n        var qname = TreeOps.flatten(get(node, ['EQName'])[0]);\n        qname = rootStcx.resolveQName(qname, node);\n        var value = TreeOps.flatten(get(node, ['PragmaContents'])[0]);\n        if (qname.name === 'xqlint' && qname.uri === 'http://xqlint.io') {\n            pushSctx(node.pos);\n            var commands = value.match(/[a-zA-Z]+\\(([^)]+)\\)/g);\n            commands.forEach(function (command) {\n                var name = command.substring(0, command.indexOf('('));\n                var args = command.substring(0, command.length - 1).substring(command.indexOf('(') + 1).split(',').map(function (val) {\n                    return val.trim();\n                });\n                if (name === 'varrefs') {\n                    args.forEach(function (arg) {\n                        var qname = sctx.resolveQName(arg.substring(1), node.pos);\n                        if (qname.uri !== '') {\n                            sctx.root.namespaces[qname.uri].used = true;\n                        }\n                        sctx.addVarRef(qname, node.pos);\n                    });\n                }\n            });\n            this.visitChildren(node);\n            popSctx();\n            return true;\n        }\n    };\n\n    this.visit = function (node) {\n        var name = node.name;\n        var skip = false;\n\n        if (typeof this[name] === 'function') {\n            skip = this[name](node) === true;\n        }\n\n        if (!skip) {\n            this.visitChildren(node);\n        }\n    };\n\n    this.visitChildren = function (node, handler) {\n        for (var i = 0; i < node.children.length; i++) {\n            var child = node.children[i];\n            if (handler !== undefined && typeof handler[child.name] === 'function') {\n                handler[child.name](child);\n            } else {\n                this.visit(child);\n            }\n        }\n    };\n\n    this.visit(ast);\n    Object.keys(rootStcx.variables).forEach(function(key){\n        if(!rootStcx.varRefs[key] && (rootStcx.variables[key].annotations['http://www.w3.org/2005/xpath-functions#private'] || rootStcx.moduleNamespace === '') && rootStcx.variables[key].pos) {\n            addWarning('W03', 'Unused variable \"' + rootStcx.variables[key].qname.name + '\"', rootStcx.variables[key].pos);\n        }\n    });\n    Object.keys(rootStcx.namespaces).forEach(function(uri){\n        var namespace = rootStcx.namespaces[uri];\n        if(namespace.used === undefined && !namespace.override && namespace.type === 'module') {\n            addWarning('W04', 'Unused module \"' + uri + '\"', namespace.pos);\n        }\n    });\n};\n\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./errors\":\"/node_modules/xqlint/lib/compiler/errors.js\",\"./handlers\":\"/node_modules/xqlint/lib/compiler/handlers.js\",\"./static_context\":\"/node_modules/xqlint/lib/compiler/static_context.js\"}],\"/node_modules/xqlint/lib/completion/completer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TreeOps = _dereq_('../tree_ops').TreeOps;\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$]/;\n\nfunction retrievePrecedingIdentifier(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos-1; i >= 0; i--) {\n        if (regex.test(text[i])) {\n            buf.push(text[i]);\n        } else {\n            break;\n        }\n    }\n    return buf.reverse().join('');\n}\n\nfunction prefixBinarySearch(items, prefix) {\n    var startIndex = 0;\n    var stopIndex = items.length - 1;\n    var middle = Math.floor((stopIndex + startIndex) / 2);\n    \n    while (stopIndex > startIndex && middle >= 0 && items[middle].indexOf(prefix) !== 0) {\n        if (prefix < items[middle]) {\n            stopIndex = middle - 1;\n        } else if (prefix > items[middle]) {\n            startIndex = middle + 1;\n        }\n        middle = Math.floor((stopIndex + startIndex) / 2);\n    }\n    while (middle > 0 && items[middle-1].indexOf(prefix) === 0) {\n        middle--;\n    }\n    return middle >= 0 ? middle : 0; // ensure we're not returning a negative index\n}\n\nvar uriRegex = /[a-zA-Z_0-9\\/\\.:\\-#]/;\nvar char = '-._A-Za-z0-9:\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02ff\\u0300-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203f\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD';\nvar nameChar = '[' + char + ']';\nvar varChar = '[' + char + '\\\\$]';\nvar nameCharRegExp = new RegExp(nameChar);\nvar varCharRegExp = new RegExp(varChar);\n\nvar varDeclLabels = {\n    'LetBinding': 'Let binding',\n    'Param': 'Function parameter',\n    'QuantifiedExpr': 'Quantified expression binding',\n    'VarDeclStatement': 'Local variable',\n    'ForBinding': 'For binding',\n    'TumblingWindowClause': 'Tumbling window binding',\n    'WindowVars': 'Window variable',\n    'SlidingWindowClause': 'Sliding window binding',\n    'PositionalVar': 'Positional variable',\n    'CurrentItem': 'Current item',\n    'PreviousItem': 'Previous item',\n    'NextItem': 'Next item',\n    'CountClause': 'Count binding',\n    'GroupingVariable': 'Grouping variable',\n    'VarDecl': 'Module variable'\n};\n\nvar findCompletions = function(prefix, allIdentifiers) {\n    allIdentifiers.sort();\n    var startIdx = prefixBinarySearch(allIdentifiers, prefix);\n    var matches = [];\n    for (var i = startIdx; i < allIdentifiers.length && allIdentifiers[i].indexOf(prefix) === 0; i++) {\n        matches.push(allIdentifiers[i]);\n    }\n    return matches;\n};\n\n\nvar completePrefix = function(identifier, pos, sctx){\n    var idx = identifier.indexOf(':');\n    if(idx === -1) {\n        var prefixes = [];\n        var namespaces = sctx.getNamespaces();\n        Object.keys(namespaces).forEach(function(key){\n            if(namespaces[key].type === 'module' || key === 'http://www.w3.org/2005/xquery-local-functions') {\n                prefixes.push(namespaces[key].prefixes[0]);\n            }\n        });\n        var matches = findCompletions(identifier, prefixes);\n        var match = function(name) {\n            return {\n                name: name + ':',\n                value: name + ':',\n                meta: 'prefix'\n            };\n        };\n        return matches.map(match);\n    } else {\n        return [];\n    }\n};\n\nvar completeFunction = function(identifier, pos, sctx){\n    var names = [];\n    var snippets = {};\n    var functions = sctx.getFunctions();\n    var uri = '';\n    var prefix = '';\n    var name = identifier;\n    var idx = identifier.indexOf(':');\n    var defaultNamespace = false;\n    if(idx !== -1){\n        prefix = identifier.substring(0, idx);\n        name = identifier.substring(idx + 1);\n        var ns = sctx.getNamespaceByPrefix(prefix);\n        if(ns){\n            uri = sctx.getNamespaceByPrefix(prefix).uri;\n        }\n    } else {\n        defaultNamespace = true;\n        uri = sctx.root.defaultFunctionNamespace;\n    }\n    Object.keys(functions).forEach(function(key){\n        var fn = functions[key];\n        var ns = key.substring(0, key.indexOf('#'));\n        var name = key.substring(key.indexOf('#') + 1);\n        name = name.substring(0, name.indexOf('#'));\n        if(ns !== uri) {\n            return;\n        }\n        if(!defaultNamespace){\n            name = sctx.getNamespaces()[ns].prefixes[0] + ':' + name;\n        }\n        name += '(';\n        var snippet = name;\n        snippet += fn.params.map(function(param, index){\n            return '${' + (index + 1) + ':\\\\' + param.split(' ')[0] + '}';\n        }).join(', ');\n        name += fn.params.join(', ');\n        name += ')';\n        snippet += ')';\n        names.push(name);\n        snippets[name] = snippet;\n    });\n    var matches = findCompletions(identifier, names);\n    var match = function(name) {\n        return {\n            name: name,\n            value: name,\n            meta: 'function',\n            priority: 4,\n            identifierRegex: nameCharRegExp,\n            snippet: snippets[name]\n        };\n    };\n    return matches.map(match);\n};\n\nvar completeVariable = function(identifier, pos, sctx){\n    var uri = '';\n    var prefix = '';\n    var idx = identifier.indexOf(':');\n    if(idx !== -1){\n        prefix = identifier.substring(0, idx);\n        uri = sctx.getNamespaceByPrefix(prefix).uri;\n    }\n    var decls = sctx.getVariables();\n    var names = [];\n    var types = {};\n    Object.keys(decls).forEach(function(key){\n        var i = key.indexOf('#');\n        var ns = key.substring(0, i);\n        var name = key.substring(i+1);\n        if(ns !== ''){\n            names.push(sctx.getPrefixesByNamespace(ns)[0] + ':' + name);\n            types[sctx.getPrefixesByNamespace(ns)[0] + ':' + name] = decls[key].type;\n        } else {\n            names.push(name);\n            types[name] = decls[key].type;\n        }\n    });\n    \n    var matches = findCompletions(identifier, names);\n    var match = function(name) {\n        return {\n            name: '$' + name,\n            value: '$' + name,\n            meta: varDeclLabels[types[name]],\n            priority: 4,\n            identifierRegex: varCharRegExp\n        };\n    };\n    return matches.map(match);\n};\n\nvar completeExpr = function(line, pos, sctx){\n    var identifier = retrievePrecedingIdentifier(line, pos.col, nameCharRegExp);\n    var before = line.substring(0, pos.col - (identifier.length === 0 ? 0 : identifier.length));\n    var isVar = before[before.length - 1] === '$';\n    if(isVar) {\n        return completeVariable(identifier, pos, sctx);\n    } else if(identifier !== '') {\n        return completeFunction(identifier, pos, sctx).concat(completePrefix(identifier, pos, sctx));\n    } else {\n        return completeVariable(identifier, pos, sctx).concat(completeFunction(identifier, pos, sctx)).concat(completePrefix(identifier, pos, sctx));\n    }\n};\n\nvar completeModuleUri = function(line, pos, sctx){\n    var identifier = retrievePrecedingIdentifier(line, pos.col, uriRegex);\n    var matches = findCompletions(identifier, sctx.getAvailableModuleNamespaces());\n    var match = function(uri) {\n        return {\n            name: uri,\n            value: uri,\n            meta: 'module',\n            priority: 4,\n            identifierRegex: uriRegex\n        };\n    };\n    return matches.map(match);\n};\n\nexports.complete = function(source, ast, rootSctx, pos){\n    var line = source.split('\\n')[pos.line];\n    var node = TreeOps.findNode(ast, pos);\n    var sctx = TreeOps.findNode(rootSctx, pos);\n    sctx = sctx ? sctx : rootSctx;\n    if(node && node.name === 'URILiteral' && node.getParent && node.getParent.name === 'ModuleImport'){\n        return completeModuleUri(line, pos, sctx);\n    } else {\n        return completeExpr(line, pos, sctx);\n    }\n};\n\n},{\"../tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\"}],\"/node_modules/xqlint/lib/formatter/style_checker.js\":[function(_dereq_,module,exports){\nexports.StyleChecker = function (ast, source) {\n    'use strict';\n\n    var tab = '    ';\n    var markers = [];\n    \n    this.getMarkers = function(){\n        return markers;\n    };\n\n    this.WS = function(node) {\n        var lines = node.value.split('\\n');\n        lines.forEach(function(line, index){\n            var isFirst = index === 0;\n            var isLast  = index === (lines.length - 1);\n\n            if(/\\r$/.test(line)) {\n                markers.push({\n                    pos: {\n                        sl: node.pos.sl + index,\n                        el: node.pos.sl + index,\n                        sc: line.length - 1,\n                        ec: line.length\n                    },\n                    type: 'warning',\n                    level: 'warning',\n                    message: '[SW01] Detected CRLF'\n                });\n            }\n            \n            var match = line.match(/\\t+/);\n            if(match !== null){\n                markers.push({\n                    pos: {\n                        sl: node.pos.sl + index,\n                        el: node.pos.sl + index,\n                        sc: match.index,\n                        ec: match.index + match[0].length\n                    },\n                    type: 'warning',\n                    level: 'warning',\n                    message: '[SW02] Tabs detected'\n                });\n            }\n\n            if((!isFirst) && isLast){\n                match = line.match(/^\\ +/);\n                if(match !== null) {\n                    var mod = match[0].length % tab.length;\n                    if(mod !== 0) {\n                        markers.push({\n                            pos: {\n                                sl: node.pos.sl + index,\n                                el: node.pos.sl + index,\n                                sc: match.index,\n                                ec: match.index + match[0].length\n                            },\n                            type: 'warning',\n                            level: 'warning',\n                            message: '[SW03] Unexcepted indentation of ' + match[0].length\n                        });\n                    }\n                }\n            }\n        });\n        return true;\n    };\n    \n    this.visit = function (node, index) {\n        var name = node.name;\n        var skip = false;\n\n        if (typeof this[name] === 'function') {\n            skip = this[name](node, index) === true;\n        }\n\n        if (!skip) {\n            this.visitChildren(node);\n        }\n    };\n\n    this.visitChildren = function (node, handler) {\n        for (var i = 0; i < node.children.length; i++) {\n            var child = node.children[i];\n            if (handler !== undefined && typeof handler[child.name] === 'function') {\n                handler[child.name](child);\n            } else {\n                this.visit(child);\n            }\n        }\n    };\n\n    source.split('\\n').forEach(function(line, index){\n        var match = line.match(/\\ +$/);\n        if(match){\n            markers.push({\n                pos: {\n                    sl: index,\n                    el: index,\n                    sc: match.index,\n                    ec: match.index + match[0].length\n                },\n                type: 'warning',\n                level: 'warning',\n                message: '[SW04] Trailing whitespace'\n            });\n        }\n    });\n    this.visit(ast);\n};\n},{}],\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\":[function(_dereq_,module,exports){\n                                                            var JSONiqTokenizer = exports.JSONiqTokenizer = function JSONiqTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? JSONiqTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = JSONiqTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [JSONiqTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n    switch (l1)\n    {\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 59:                        // '<?'\n      shift(59);                    // '<?'\n      break;\n    case 43:                        // '(#'\n      shift(43);                    // '(#'\n      break;\n    case 45:                        // '(:~'\n      shift(45);                    // '(:~'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    case 277:                       // '}'\n      shift(277);                   // '}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 42:                        // '('\n      shift(42);                    // '('\n      break;\n    case 46:                        // ')'\n      shift(46);                    // ')'\n      break;\n    case 52:                        // '/'\n      shift(52);                    // '/'\n      break;\n    case 65:                        // '['\n      shift(65);                    // '['\n      break;\n    case 66:                        // ']'\n      shift(66);                    // ']'\n      break;\n    case 49:                        // ','\n      shift(49);                    // ','\n      break;\n    case 51:                        // '.'\n      shift(51);                    // '.'\n      break;\n    case 56:                        // ';'\n      shift(56);                    // ';'\n      break;\n    case 54:                        // ':'\n      shift(54);                    // ':'\n      break;\n    case 36:                        // '!'\n      shift(36);                    // '!'\n      break;\n    case 276:                       // '|'\n      shift(276);                   // '|'\n      break;\n    case 40:                        // '$$'\n      shift(40);                    // '$$'\n      break;\n    case 5:                         // Annotation\n      shift(5);                     // Annotation\n      break;\n    case 4:                         // ModuleDecl\n      shift(4);                     // ModuleDecl\n      break;\n    case 6:                         // OptionDecl\n      shift(6);                     // OptionDecl\n      break;\n    case 15:                        // AttrTest\n      shift(15);                    // AttrTest\n      break;\n    case 16:                        // Wildcard\n      shift(16);                    // Wildcard\n      break;\n    case 18:                        // IntegerLiteral\n      shift(18);                    // IntegerLiteral\n      break;\n    case 19:                        // DecimalLiteral\n      shift(19);                    // DecimalLiteral\n      break;\n    case 20:                        // DoubleLiteral\n      shift(20);                    // DoubleLiteral\n      break;\n    case 8:                         // Variable\n      shift(8);                     // Variable\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 7:                         // Operator\n      shift(7);                     // Operator\n      break;\n    case 35:                        // EOF\n      shift(35);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 61:                        // '>'\n      shift(61);                    // '>'\n      break;\n    case 53:                        // '/>'\n      shift(53);                    // '/>'\n      break;\n    case 29:                        // QName\n      shift(29);                    // QName\n      break;\n    case 60:                        // '='\n      shift(60);                    // '='\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n    switch (l1)\n    {\n    case 25:                        // ElementContentChar\n      shift(25);                    // ElementContentChar\n      break;\n    case 9:                         // Tag\n      shift(9);                     // Tag\n      break;\n    case 10:                        // EndTag\n      shift(10);                    // EndTag\n      break;\n    case 58:                        // '<![CDATA['\n      shift(58);                    // '<![CDATA['\n      break;\n    case 57:                        // '<!--'\n      shift(57);                    // '<!--'\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n    switch (l1)\n    {\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 27:                        // AposAttrContentChar\n      shift(27);                    // AposAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n    switch (l1)\n    {\n    case 22:                        // EscapeQuot\n      shift(22);                    // EscapeQuot\n      break;\n    case 26:                        // QuotAttrContentChar\n      shift(26);                    // QuotAttrContentChar\n      break;\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 275:                       // '{{'\n      shift(275);                   // '{{'\n      break;\n    case 278:                       // '}}'\n      shift(278);                   // '}}'\n      break;\n    case 274:                       // '{'\n      shift(274);                   // '{'\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 14:                        // CDataSectionContents\n      shift(14);                    // CDataSectionContents\n      break;\n    case 67:                        // ']]>'\n      shift(67);                    // ']]>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 12:                        // DirCommentContents\n      shift(12);                    // DirCommentContents\n      break;\n    case 50:                        // '-->'\n      shift(50);                    // '-->'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 13:                        // DirPIContents\n      shift(13);                    // DirPIContents\n      break;\n    case 62:                        // '?'\n      shift(62);                    // '?'\n      break;\n    case 63:                        // '?>'\n      shift(63);                    // '?>'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 11:                        // PragmaContents\n      shift(11);                    // PragmaContents\n      break;\n    case 38:                        // '#'\n      shift(38);                    // '#'\n      break;\n    case 39:                        // '#)'\n      shift(39);                    // '#)'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    case 32:                        // CommentContents\n      shift(32);                    // CommentContents\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(6);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 33:                        // DocTag\n      shift(33);                    // DocTag\n      break;\n    case 34:                        // DocCommentContents\n      shift(34);                    // DocCommentContents\n      break;\n    case 55:                        // ':)'\n      shift(55);                    // ':)'\n      break;\n    case 44:                        // '(:'\n      shift(44);                    // '(:'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(5);                  // JSONChar | JSONCharRef | JSONPredefinedCharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 3:                         // JSONPredefinedCharRef\n      shift(3);                     // JSONPredefinedCharRef\n      break;\n    case 2:                         // JSONCharRef\n      shift(2);                     // JSONCharRef\n      break;\n    case 1:                         // JSONChar\n      shift(1);                     // JSONChar\n      break;\n    case 37:                        // '\"'\n      shift(37);                    // '\"'\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 21:                        // PredefinedEntityRef\n      shift(21);                    // PredefinedEntityRef\n      break;\n    case 31:                        // CharRef\n      shift(31);                    // CharRef\n      break;\n    case 23:                        // EscapeApos\n      shift(23);                    // EscapeApos\n      break;\n    case 24:                        // AposChar\n      shift(24);                    // AposChar\n      break;\n    case 41:                        // \"'\"\n      shift(41);                    // \"'\"\n      break;\n    default:\n      shift(35);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 17:                        // EQName^Token\n      shift(17);                    // EQName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 28:                        // NCName^Token\n      shift(28);                    // NCName^Token\n      break;\n    case 68:                        // 'after'\n      shift(68);                    // 'after'\n      break;\n    case 73:                        // 'and'\n      shift(73);                    // 'and'\n      break;\n    case 77:                        // 'as'\n      shift(77);                    // 'as'\n      break;\n    case 78:                        // 'ascending'\n      shift(78);                    // 'ascending'\n      break;\n    case 82:                        // 'before'\n      shift(82);                    // 'before'\n      break;\n    case 86:                        // 'case'\n      shift(86);                    // 'case'\n      break;\n    case 87:                        // 'cast'\n      shift(87);                    // 'cast'\n      break;\n    case 88:                        // 'castable'\n      shift(88);                    // 'castable'\n      break;\n    case 92:                        // 'collation'\n      shift(92);                    // 'collation'\n      break;\n    case 103:                       // 'count'\n      shift(103);                   // 'count'\n      break;\n    case 107:                       // 'default'\n      shift(107);                   // 'default'\n      break;\n    case 111:                       // 'descending'\n      shift(111);                   // 'descending'\n      break;\n    case 116:                       // 'div'\n      shift(116);                   // 'div'\n      break;\n    case 120:                       // 'else'\n      shift(120);                   // 'else'\n      break;\n    case 121:                       // 'empty'\n      shift(121);                   // 'empty'\n      break;\n    case 124:                       // 'end'\n      shift(124);                   // 'end'\n      break;\n    case 126:                       // 'eq'\n      shift(126);                   // 'eq'\n      break;\n    case 129:                       // 'except'\n      shift(129);                   // 'except'\n      break;\n    case 135:                       // 'for'\n      shift(135);                   // 'for'\n      break;\n    case 144:                       // 'ge'\n      shift(144);                   // 'ge'\n      break;\n    case 146:                       // 'group'\n      shift(146);                   // 'group'\n      break;\n    case 148:                       // 'gt'\n      shift(148);                   // 'gt'\n      break;\n    case 149:                       // 'idiv'\n      shift(149);                   // 'idiv'\n      break;\n    case 158:                       // 'instance'\n      shift(158);                   // 'instance'\n      break;\n    case 160:                       // 'intersect'\n      shift(160);                   // 'intersect'\n      break;\n    case 161:                       // 'into'\n      shift(161);                   // 'into'\n      break;\n    case 162:                       // 'is'\n      shift(162);                   // 'is'\n      break;\n    case 170:                       // 'le'\n      shift(170);                   // 'le'\n      break;\n    case 172:                       // 'let'\n      shift(172);                   // 'let'\n      break;\n    case 176:                       // 'lt'\n      shift(176);                   // 'lt'\n      break;\n    case 178:                       // 'mod'\n      shift(178);                   // 'mod'\n      break;\n    case 179:                       // 'modify'\n      shift(179);                   // 'modify'\n      break;\n    case 184:                       // 'ne'\n      shift(184);                   // 'ne'\n      break;\n    case 196:                       // 'only'\n      shift(196);                   // 'only'\n      break;\n    case 198:                       // 'or'\n      shift(198);                   // 'or'\n      break;\n    case 199:                       // 'order'\n      shift(199);                   // 'order'\n      break;\n    case 218:                       // 'return'\n      shift(218);                   // 'return'\n      break;\n    case 222:                       // 'satisfies'\n      shift(222);                   // 'satisfies'\n      break;\n    case 234:                       // 'stable'\n      shift(234);                   // 'stable'\n      break;\n    case 235:                       // 'start'\n      shift(235);                   // 'start'\n      break;\n    case 246:                       // 'to'\n      shift(246);                   // 'to'\n      break;\n    case 247:                       // 'treat'\n      shift(247);                   // 'treat'\n      break;\n    case 252:                       // 'union'\n      shift(252);                   // 'union'\n      break;\n    case 264:                       // 'where'\n      shift(264);                   // 'where'\n      break;\n    case 268:                       // 'with'\n      shift(268);                   // 'with'\n      break;\n    case 71:                        // 'ancestor'\n      shift(71);                    // 'ancestor'\n      break;\n    case 72:                        // 'ancestor-or-self'\n      shift(72);                    // 'ancestor-or-self'\n      break;\n    case 80:                        // 'attribute'\n      shift(80);                    // 'attribute'\n      break;\n    case 91:                        // 'child'\n      shift(91);                    // 'child'\n      break;\n    case 94:                        // 'comment'\n      shift(94);                    // 'comment'\n      break;\n    case 101:                       // 'copy'\n      shift(101);                   // 'copy'\n      break;\n    case 106:                       // 'declare'\n      shift(106);                   // 'declare'\n      break;\n    case 108:                       // 'delete'\n      shift(108);                   // 'delete'\n      break;\n    case 109:                       // 'descendant'\n      shift(109);                   // 'descendant'\n      break;\n    case 110:                       // 'descendant-or-self'\n      shift(110);                   // 'descendant-or-self'\n      break;\n    case 117:                       // 'document'\n      shift(117);                   // 'document'\n      break;\n    case 118:                       // 'document-node'\n      shift(118);                   // 'document-node'\n      break;\n    case 119:                       // 'element'\n      shift(119);                   // 'element'\n      break;\n    case 122:                       // 'empty-sequence'\n      shift(122);                   // 'empty-sequence'\n      break;\n    case 127:                       // 'every'\n      shift(127);                   // 'every'\n      break;\n    case 132:                       // 'first'\n      shift(132);                   // 'first'\n      break;\n    case 133:                       // 'following'\n      shift(133);                   // 'following'\n      break;\n    case 134:                       // 'following-sibling'\n      shift(134);                   // 'following-sibling'\n      break;\n    case 143:                       // 'function'\n      shift(143);                   // 'function'\n      break;\n    case 150:                       // 'if'\n      shift(150);                   // 'if'\n      break;\n    case 151:                       // 'import'\n      shift(151);                   // 'import'\n      break;\n    case 157:                       // 'insert'\n      shift(157);                   // 'insert'\n      break;\n    case 163:                       // 'item'\n      shift(163);                   // 'item'\n      break;\n    case 168:                       // 'last'\n      shift(168);                   // 'last'\n      break;\n    case 180:                       // 'module'\n      shift(180);                   // 'module'\n      break;\n    case 182:                       // 'namespace'\n      shift(182);                   // 'namespace'\n      break;\n    case 183:                       // 'namespace-node'\n      shift(183);                   // 'namespace-node'\n      break;\n    case 189:                       // 'node'\n      shift(189);                   // 'node'\n      break;\n    case 200:                       // 'ordered'\n      shift(200);                   // 'ordered'\n      break;\n    case 204:                       // 'parent'\n      shift(204);                   // 'parent'\n      break;\n    case 210:                       // 'preceding'\n      shift(210);                   // 'preceding'\n      break;\n    case 211:                       // 'preceding-sibling'\n      shift(211);                   // 'preceding-sibling'\n      break;\n    case 214:                       // 'processing-instruction'\n      shift(214);                   // 'processing-instruction'\n      break;\n    case 216:                       // 'rename'\n      shift(216);                   // 'rename'\n      break;\n    case 217:                       // 'replace'\n      shift(217);                   // 'replace'\n      break;\n    case 224:                       // 'schema-attribute'\n      shift(224);                   // 'schema-attribute'\n      break;\n    case 225:                       // 'schema-element'\n      shift(225);                   // 'schema-element'\n      break;\n    case 227:                       // 'self'\n      shift(227);                   // 'self'\n      break;\n    case 233:                       // 'some'\n      shift(233);                   // 'some'\n      break;\n    case 241:                       // 'switch'\n      shift(241);                   // 'switch'\n      break;\n    case 242:                       // 'text'\n      shift(242);                   // 'text'\n      break;\n    case 248:                       // 'try'\n      shift(248);                   // 'try'\n      break;\n    case 251:                       // 'typeswitch'\n      shift(251);                   // 'typeswitch'\n      break;\n    case 254:                       // 'unordered'\n      shift(254);                   // 'unordered'\n      break;\n    case 258:                       // 'validate'\n      shift(258);                   // 'validate'\n      break;\n    case 260:                       // 'variable'\n      shift(260);                   // 'variable'\n      break;\n    case 272:                       // 'xquery'\n      shift(272);                   // 'xquery'\n      break;\n    case 70:                        // 'allowing'\n      shift(70);                    // 'allowing'\n      break;\n    case 79:                        // 'at'\n      shift(79);                    // 'at'\n      break;\n    case 81:                        // 'base-uri'\n      shift(81);                    // 'base-uri'\n      break;\n    case 83:                        // 'boundary-space'\n      shift(83);                    // 'boundary-space'\n      break;\n    case 84:                        // 'break'\n      shift(84);                    // 'break'\n      break;\n    case 89:                        // 'catch'\n      shift(89);                    // 'catch'\n      break;\n    case 96:                        // 'construction'\n      shift(96);                    // 'construction'\n      break;\n    case 99:                        // 'context'\n      shift(99);                    // 'context'\n      break;\n    case 100:                       // 'continue'\n      shift(100);                   // 'continue'\n      break;\n    case 102:                       // 'copy-namespaces'\n      shift(102);                   // 'copy-namespaces'\n      break;\n    case 104:                       // 'decimal-format'\n      shift(104);                   // 'decimal-format'\n      break;\n    case 123:                       // 'encoding'\n      shift(123);                   // 'encoding'\n      break;\n    case 130:                       // 'exit'\n      shift(130);                   // 'exit'\n      break;\n    case 131:                       // 'external'\n      shift(131);                   // 'external'\n      break;\n    case 139:                       // 'ft-option'\n      shift(139);                   // 'ft-option'\n      break;\n    case 152:                       // 'in'\n      shift(152);                   // 'in'\n      break;\n    case 153:                       // 'index'\n      shift(153);                   // 'index'\n      break;\n    case 159:                       // 'integrity'\n      shift(159);                   // 'integrity'\n      break;\n    case 169:                       // 'lax'\n      shift(169);                   // 'lax'\n      break;\n    case 190:                       // 'nodes'\n      shift(190);                   // 'nodes'\n      break;\n    case 197:                       // 'option'\n      shift(197);                   // 'option'\n      break;\n    case 201:                       // 'ordering'\n      shift(201);                   // 'ordering'\n      break;\n    case 220:                       // 'revalidation'\n      shift(220);                   // 'revalidation'\n      break;\n    case 223:                       // 'schema'\n      shift(223);                   // 'schema'\n      break;\n    case 226:                       // 'score'\n      shift(226);                   // 'score'\n      break;\n    case 232:                       // 'sliding'\n      shift(232);                   // 'sliding'\n      break;\n    case 238:                       // 'strict'\n      shift(238);                   // 'strict'\n      break;\n    case 249:                       // 'tumbling'\n      shift(249);                   // 'tumbling'\n      break;\n    case 250:                       // 'type'\n      shift(250);                   // 'type'\n      break;\n    case 255:                       // 'updating'\n      shift(255);                   // 'updating'\n      break;\n    case 259:                       // 'value'\n      shift(259);                   // 'value'\n      break;\n    case 261:                       // 'version'\n      shift(261);                   // 'version'\n      break;\n    case 265:                       // 'while'\n      shift(265);                   // 'while'\n      break;\n    case 95:                        // 'constraint'\n      shift(95);                    // 'constraint'\n      break;\n    case 174:                       // 'loop'\n      shift(174);                   // 'loop'\n      break;\n    default:\n      shift(219);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(JSONiqTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 30)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = JSONiqTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = JSONiqTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = JSONiqTokenizer.MAP1[(c0 & 15) + JSONiqTokenizer.MAP1[(c1 & 31) + JSONiqTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (JSONiqTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (JSONiqTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = JSONiqTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = JSONiqTokenizer.TRANSITION[(i0 & 15) + JSONiqTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nJSONiqTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 279; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2066 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = JSONiqTokenizer.EXPECTED[(i0 & 3) + JSONiqTokenizer.EXPECTED[(i1 & 3) + JSONiqTokenizer.EXPECTED[(i2 & 3) + JSONiqTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(JSONiqTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nJSONiqTokenizer.MAP0 =\n[ 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37\n];\n\nJSONiqTokenizer.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 67, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 37, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 37, 31, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 31, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 31, 62, 63, 64, 65, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 31, 31, 37, 37, 37, 37, 37, 37, 37, 66, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66\n];\n\nJSONiqTokenizer.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 37, 31, 37, 31, 31, 37\n];\n\nJSONiqTokenizer.INITIAL =\n[ 1, 2, 49155, 57348, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nJSONiqTokenizer.TRANSITION =\n[ 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 17408, 19288, 17439, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19074, 36169, 17439, 36866, 17466, 36890, 36866, 22314, 19105, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22126, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17672, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19469, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 36919, 18234, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18419, 18432, 18304, 18448, 18485, 18523, 18553, 18583, 18599, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 18825, 18841, 18871, 18906, 18944, 18960, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22182, 19288, 19121, 36866, 17466, 18345, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19273, 19552, 19304, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19332, 17423, 19363, 36866, 17466, 17537, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 18614, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19391, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19427, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36154, 19288, 19457, 36866, 17466, 17740, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22780, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22375, 22197, 18469, 36866, 17466, 36890, 36866, 21991, 24018, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21331, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 19485, 19501, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19537, 22390, 19568, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19596, 19611, 19457, 36866, 17466, 36890, 36866, 18246, 19627, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22242, 20553, 19457, 36866, 17466, 36890, 36866, 18648, 30477, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36472, 19288, 19457, 36866, 17466, 17809, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 21770, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 19643, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 19672, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20538, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17975, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22345, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19726, 19742, 21529, 24035, 23112, 26225, 23511, 27749, 27397, 24035, 34360, 24035, 24036, 23114, 35166, 23114, 23114, 19758, 23511, 35247, 23511, 23511, 28447, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 19821, 23511, 23511, 23511, 23511, 23512, 19441, 36539, 24035, 24035, 24035, 24035, 19846, 19869, 23114, 23114, 23114, 28618, 32187, 19892, 23511, 23511, 23511, 34585, 20402, 36647, 24035, 24035, 24036, 23114, 33757, 23114, 23114, 23029, 20271, 23511, 27070, 23511, 23511, 30562, 24035, 24035, 29274, 26576, 23114, 23114, 31118, 23036, 29695, 23511, 23511, 32431, 23634, 30821, 24035, 23110, 19913, 23114, 23467, 31261, 23261, 34299, 19932, 24035, 32609, 19965, 35389, 19984, 27689, 19830, 29391, 29337, 20041, 22643, 35619, 33728, 20062, 20121, 20166, 35100, 26145, 20211, 23008, 19876, 20208, 20227, 25670, 20132, 26578, 27685, 20141, 20243, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36094, 19288, 19457, 36866, 17466, 21724, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22735, 19552, 20287, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22750, 19288, 21529, 24035, 23112, 28056, 23511, 29483, 28756, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 20327, 23511, 23511, 23511, 23511, 31156, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 20371, 23511, 23511, 23511, 23511, 27443, 20395, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 29457, 29700, 23511, 23511, 23511, 23511, 33444, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 28350, 20421, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 20447, 20475, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 20523, 22257, 20569, 20783, 21715, 17603, 20699, 20837, 20614, 20630, 21149, 20670, 21405, 17486, 17509, 17525, 18373, 19179, 20695, 20716, 20732, 20755, 19194, 18042, 21641, 20592, 20779, 20598, 21412, 17470, 17591, 20896, 17468, 17619, 20799, 20700, 21031, 20744, 20699, 20828, 18075, 21259, 20581, 20853, 18048, 20868, 20884, 17756, 17784, 17800, 17825, 17854, 21171, 21200, 20931, 20947, 21378, 20955, 20971, 18086, 20645, 21002, 20986, 18178, 17960, 18012, 18381, 18064, 29176, 21044, 21438, 21018, 21122, 21393, 21060, 21844, 21094, 20654, 17493, 18150, 18166, 18214, 25967, 20763, 21799, 21110, 21830, 21138, 21246, 21301, 18336, 18361, 21165, 21187, 20812, 21216, 21232, 21287, 21317, 18553, 21347, 21363, 21428, 21454, 21271, 21483, 21499, 21515, 21575, 21467, 18712, 21591, 21633, 21078, 18189, 18198, 20679, 21657, 21701, 21074, 21687, 21740, 21756, 21786, 21815, 21860, 21876, 21892, 21946, 21962, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36457, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 36813, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 21981, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 22151, 22007, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 27898, 17884, 18890, 17906, 17928, 22042, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 22070, 22112, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 22142, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36109, 19288, 18469, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22167, 19288, 19457, 36866, 17466, 17768, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22227, 36487, 22273, 36866, 17466, 36890, 36866, 19316, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18749, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 22304, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 19580, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22330, 19089, 19457, 36866, 17466, 18721, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22765, 19347, 19457, 36866, 17466, 36890, 36866, 18114, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34541, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 22540, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29908, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22561, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 23837, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22584, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 27443, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 22839, 23511, 23511, 23511, 23511, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36442, 19288, 21605, 24035, 23112, 28137, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 31568, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22690, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 27584, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 22659, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22360, 19552, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22675, 22811, 19457, 36866, 17466, 36890, 36866, 19133, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 22827, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36064, 19288, 22865, 22881, 32031, 22897, 22913, 22956, 29939, 24035, 24035, 24035, 23003, 23114, 23114, 23114, 23024, 22420, 23511, 23511, 23511, 23052, 29116, 23073, 29268, 24035, 25563, 26915, 23106, 23131, 23114, 23114, 23159, 23181, 23197, 23248, 23511, 23511, 23282, 23305, 22493, 32364, 24035, 33472, 30138, 26325, 31770, 33508, 27345, 33667, 23114, 23321, 23473, 23351, 35793, 36576, 23511, 23375, 22500, 24145, 24035, 29197, 20192, 24533, 23440, 23114, 19017, 23459, 22839, 23489, 23510, 23511, 33563, 23528, 32076, 25389, 24035, 26576, 23561, 23583, 23114, 32683, 22516, 23622, 23655, 23511, 23634, 35456, 37144, 23110, 23683, 34153, 20499, 32513, 25824, 23705, 24035, 24035, 23111, 23114, 19874, 27078, 33263, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 20507, 32241, 20150, 31862, 27464, 35108, 23727, 23007, 35895, 34953, 26578, 27685, 20141, 24569, 31691, 19787, 33967, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36427, 19552, 21605, 24035, 23112, 32618, 23511, 29483, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 27027, 26576, 23114, 23114, 23114, 31471, 23756, 22468, 23511, 23511, 23511, 34687, 23772, 22493, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34564, 23788, 24035, 24035, 24035, 21559, 23828, 23114, 23114, 23114, 25086, 22839, 23853, 23511, 23511, 23511, 23876, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 31761, 23909, 23953, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36049, 19288, 21605, 30825, 23112, 23987, 23511, 24003, 31001, 27617, 24034, 24035, 24036, 24052, 24089, 23114, 23114, 22420, 24109, 24168, 23511, 23511, 29116, 24188, 27609, 20017, 29516, 24035, 26576, 24222, 19968, 23114, 24252, 33811, 22468, 24270, 33587, 23511, 24320, 27443, 22493, 24035, 24035, 24035, 24035, 24339, 23113, 23114, 23114, 23114, 28128, 28618, 29700, 23511, 23511, 23511, 28276, 34564, 20402, 24035, 24035, 32929, 24036, 23114, 23114, 23114, 24357, 23029, 22839, 23511, 23511, 23511, 24377, 25645, 24035, 34112, 24035, 26576, 23114, 26643, 23114, 32683, 22516, 23511, 25638, 23511, 23711, 24035, 24395, 27809, 23114, 24414, 20499, 24432, 30917, 23628, 24035, 30680, 23111, 23114, 30233, 27078, 25748, 24452, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 24475, 19829, 26577, 26597, 26154, 24519, 24556, 24596, 23007, 20046, 20132, 26578, 24634, 20141, 24569, 31691, 24679, 24727, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36412, 19288, 21605, 19943, 34861, 32618, 26027, 29483, 32016, 32050, 36233, 24776, 35574, 24801, 24819, 32671, 31289, 22420, 24868, 24886, 20087, 26849, 29116, 19803, 24035, 24035, 24035, 36228, 26576, 23114, 23114, 23114, 24981, 33811, 22468, 23511, 23511, 23511, 29028, 27443, 22493, 24923, 27965, 24035, 24035, 32797, 24946, 23443, 23114, 23114, 29636, 24997, 22849, 28252, 23511, 23511, 23511, 25042, 25110, 24035, 24035, 34085, 24036, 25133, 23114, 23114, 25152, 23029, 22839, 25169, 23511, 36764, 23511, 25645, 30403, 24035, 25186, 26576, 31806, 24093, 25212, 32683, 22516, 32713, 26245, 34293, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 24035, 32406, 23111, 23114, 28676, 30944, 27689, 25234, 24035, 23112, 19872, 37063, 23266, 24036, 23114, 30243, 20379, 26100, 29218, 20211, 30105, 25257, 25284, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 24834, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36034, 19288, 21671, 25314, 25072, 25330, 25346, 25362, 29939, 29951, 35288, 29984, 23812, 27216, 25405, 25424, 30456, 22584, 26292, 25461, 25480, 31592, 29116, 25516, 34963, 25545, 27007, 25579, 33937, 25614, 25661, 25686, 34872, 25702, 25718, 25734, 25769, 25795, 25811, 25840, 22493, 26533, 25856, 24035, 25876, 30763, 27481, 25909, 23114, 28987, 25936, 25954, 29700, 25983, 23511, 31412, 26043, 26063, 22568, 29241, 29592, 26116, 31216, 35383, 26170, 34783, 26194, 26221, 22839, 26241, 26261, 22477, 26283, 26308, 27306, 31035, 24655, 26576, 29854, 33386, 26341, 32683, 22516, 32153, 30926, 26361, 19996, 26381, 35463, 26397, 26424, 34646, 26478, 35605, 31386, 26494, 35567, 31964, 22940, 23689, 25218, 30309, 32289, 19830, 33605, 23112, 32109, 27733, 27084, 24496, 35886, 35221, 26525, 36602, 26549, 26558, 26574, 26594, 26613, 26629, 26666, 26700, 26578, 27685, 23740, 24285, 31691, 26733, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36397, 19552, 18991, 25887, 28117, 32618, 26776, 29483, 29939, 26802, 24035, 24035, 24036, 28664, 23114, 23114, 23114, 22420, 30297, 23511, 23511, 23511, 29116, 19803, 24035, 24035, 24035, 25559, 26576, 23114, 23114, 23114, 30525, 33811, 22468, 23511, 23511, 23511, 28725, 27443, 22493, 24035, 24035, 27249, 24035, 24035, 23113, 23114, 23114, 26827, 23114, 28618, 29700, 23511, 23511, 26845, 23511, 34564, 20402, 24035, 24035, 26979, 24036, 23114, 23114, 23114, 24974, 23029, 22839, 23511, 23511, 23511, 26865, 25645, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 32683, 22516, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 20499, 23511, 23261, 23628, 33305, 24035, 25598, 23114, 19874, 34253, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 26886, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 26931, 24569, 26439, 26947, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36019, 19288, 26995, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 27043, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 27061, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 29978, 24035, 24035, 23113, 23114, 33114, 23114, 23114, 30010, 29700, 23511, 35913, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 27155, 26576, 23114, 23114, 30447, 23036, 29695, 23511, 23511, 30935, 20099, 24152, 25529, 27100, 34461, 27121, 22625, 29156, 26009, 27137, 30422, 31903, 31655, 28870, 27171, 32439, 31731, 19830, 27232, 22612, 27265, 26786, 25494, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 20342, 27288, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 27322, 27339, 28020, 27361, 27382, 29939, 24035, 24035, 32581, 24036, 23114, 23114, 23114, 27425, 22420, 23511, 23511, 23511, 27442, 28306, 19803, 24035, 24035, 24035, 24035, 26710, 23114, 23114, 23114, 23114, 32261, 22468, 23511, 23511, 23511, 23511, 35719, 24694, 29510, 24035, 24035, 24035, 24035, 26717, 23114, 23114, 23114, 23114, 28618, 32217, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 27459, 23114, 23114, 23114, 36252, 23029, 20271, 23511, 23511, 23511, 28840, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 27480, 34483, 28401, 29761, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36382, 19288, 21605, 27497, 27517, 28504, 28898, 27569, 29939, 29401, 27600, 27323, 27633, 19025, 27662, 23114, 27705, 22420, 20483, 27721, 23511, 27765, 28306, 19803, 23540, 24035, 24610, 27781, 27805, 26650, 23114, 28573, 32990, 25920, 22468, 26870, 23511, 26684, 34262, 34737, 25057, 34622, 24035, 24035, 23971, 24206, 27825, 27847, 23114, 23114, 27865, 27885, 35766, 27914, 23511, 23511, 32766, 32844, 27934, 28795, 26909, 27955, 26092, 27988, 25445, 28005, 28036, 28052, 21965, 23511, 32196, 19897, 28072, 28102, 36534, 21541, 23801, 28153, 28180, 28197, 28221, 23036, 32695, 28251, 28268, 28292, 23667, 34825, 23930, 24580, 28322, 28344, 31627, 28366, 25996, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 35625, 33477, 33359, 27674, 28393, 33992, 24036, 23114, 30243, 19829, 28417, 28433, 28463, 23008, 19876, 20208, 23007, 20046, 20132, 28489, 28520, 20141, 24569, 31691, 19787, 28550, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 24035, 23112, 32618, 23511, 31507, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 24694, 28589, 24035, 24035, 24035, 24035, 28608, 23114, 23114, 23114, 23114, 28618, 20431, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36004, 19288, 28634, 31951, 28565, 28702, 28718, 28741, 32544, 20175, 28792, 32086, 20105, 28811, 29059, 29862, 28856, 22420, 28886, 30354, 23359, 28922, 28306, 28952, 23888, 26320, 36506, 24035, 29331, 28968, 36609, 23114, 29003, 31661, 27061, 30649, 27366, 23511, 29023, 27918, 24694, 24035, 24035, 23893, 33094, 30867, 23113, 23114, 23114, 29044, 34184, 30010, 29700, 23511, 23511, 29081, 29102, 34585, 20402, 27789, 24035, 24035, 24036, 23114, 29132, 23114, 23114, 23029, 20271, 23511, 29153, 23511, 23511, 30562, 30174, 24035, 24035, 27409, 25438, 23114, 23114, 29172, 36668, 31332, 23511, 23511, 29192, 30144, 24035, 23110, 30203, 23114, 23467, 31544, 23261, 23628, 24035, 22545, 23111, 23114, 29213, 27078, 27689, 29234, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 29257, 23008, 19876, 20208, 28768, 29290, 29320, 34776, 29353, 20141, 22435, 29378, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36367, 19288, 21605, 34616, 19006, 32618, 31497, 31507, 36216, 20184, 24035, 34393, 29424, 34668, 23114, 34900, 29447, 22420, 30360, 23511, 37089, 29473, 28306, 19803, 29499, 24398, 24035, 24035, 26576, 31799, 29532, 29550, 23114, 33811, 22468, 32298, 29571, 31184, 23511, 23512, 37127, 36628, 29589, 24035, 24135, 24035, 23113, 29608, 23114, 27831, 29634, 28618, 29652, 30037, 23511, 24172, 29671, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 29555, 29690, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 29719, 24035, 23110, 29738, 23114, 23467, 34035, 29756, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 29777, 34364, 28181, 30243, 29799, 31920, 27272, 27185, 23008, 31126, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29828, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35989, 19552, 19687, 35139, 28649, 29878, 29894, 29924, 29939, 23224, 23085, 31969, 24036, 35173, 24752, 24803, 23114, 22420, 31190, 30318, 24870, 23511, 28306, 29967, 23967, 24035, 24035, 24035, 26576, 30000, 23114, 23114, 23114, 33811, 22468, 30026, 23511, 23511, 23511, 23512, 26078, 24035, 24035, 24035, 30053, 37137, 30071, 23114, 23114, 33368, 25136, 28618, 30723, 23511, 23511, 37096, 31356, 34585, 20402, 30092, 30127, 30160, 24036, 35740, 30219, 24960, 30259, 23029, 20271, 34042, 30285, 30342, 30376, 23289, 30055, 30400, 30419, 30438, 32640, 33532, 33514, 30472, 18792, 26267, 24323, 23057, 30493, 23639, 20008, 30196, 33188, 30517, 20075, 23511, 30541, 23628, 30578, 33928, 28776, 30594, 19874, 30610, 30637, 19830, 30677, 27646, 19872, 25779, 23266, 23232, 35016, 30243, 30696, 29812, 30712, 30746, 27206, 30779, 30807, 23007, 33395, 20132, 26578, 27685, 31703, 22928, 31691, 19787, 31079, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36352, 19288, 23335, 30841, 26131, 30888, 30904, 30986, 29939, 24035, 24704, 31017, 20025, 23114, 26178, 31051, 31095, 22420, 23511, 22524, 31142, 31172, 28534, 31206, 35497, 25196, 24035, 28592, 24503, 23114, 31239, 31285, 23114, 31305, 31321, 31355, 31372, 31407, 23511, 30556, 24694, 24035, 27501, 19805, 24035, 24035, 23113, 23114, 31428, 24066, 23114, 28618, 29700, 23511, 31837, 18809, 23511, 34585, 31448, 24035, 24035, 24035, 23090, 23114, 23114, 23114, 23114, 31619, 35038, 23511, 23511, 23511, 23511, 33714, 24035, 33085, 24035, 29431, 23114, 31467, 23114, 23143, 31487, 23511, 31523, 23511, 35195, 36783, 24035, 30111, 23567, 23114, 23467, 31543, 31560, 23628, 24035, 24035, 23111, 23114, 19874, 30953, 31584, 34508, 24035, 31608, 26345, 37055, 23266, 31643, 31677, 31719, 31747, 31786, 31822, 26898, 23008, 19876, 31859, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 31878, 31936, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35974, 19288, 21605, 27972, 35663, 31985, 29655, 32001, 36715, 24785, 25893, 23545, 31912, 19853, 19916, 25938, 24540, 22420, 31843, 29674, 29573, 32735, 28936, 19803, 24035, 24035, 32047, 24035, 26576, 23114, 23114, 27544, 23114, 33811, 22468, 23511, 23511, 32161, 23511, 23512, 32066, 24035, 33313, 24035, 24035, 24035, 23113, 27426, 32102, 23114, 23114, 28618, 32125, 23511, 32144, 23511, 23511, 33569, 20402, 24035, 27045, 24035, 24036, 23114, 23114, 28328, 23114, 30076, 32177, 23511, 23511, 30384, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23595, 32212, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 22635, 25753, 32233, 32257, 32277, 19829, 26577, 26597, 20211, 23008, 19876, 32322, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 32352, 35285, 32380, 34196, 33016, 30661, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 32404, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 32422, 23511, 23511, 23511, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 30269, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 19949, 24035, 23111, 32455, 19874, 31269, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36337, 19552, 19209, 21617, 26509, 32475, 32491, 32529, 29939, 24035, 32578, 25241, 32597, 23114, 32634, 29007, 32656, 22420, 23511, 32729, 26365, 32751, 28306, 32788, 32882, 24035, 24035, 32813, 36727, 23114, 33182, 23114, 27553, 33235, 32829, 23511, 32706, 23511, 28906, 28377, 26962, 32881, 32904, 32898, 32920, 24035, 32953, 23114, 32977, 26408, 23114, 28164, 33006, 23511, 33039, 35774, 23511, 32306, 20402, 33076, 30872, 24035, 24036, 25408, 33110, 28979, 23114, 23029, 20271, 35835, 33130, 33054, 23511, 30562, 33148, 24035, 24035, 33167, 23114, 23114, 33775, 23036, 20459, 23511, 23511, 25464, 24646, 24035, 24035, 22446, 23114, 23114, 25627, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 31391, 33204, 33220, 33251, 33287, 26577, 26597, 20211, 33329, 19876, 33345, 23007, 20046, 20132, 26578, 27685, 28473, 22599, 31691, 33411, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35959, 19288, 21907, 27243, 29843, 32618, 33427, 31507, 29939, 33460, 34090, 24035, 24036, 33493, 24416, 33530, 23114, 22420, 33548, 24379, 33585, 23511, 28306, 19803, 33603, 24202, 24035, 24035, 25593, 33749, 28205, 23114, 23114, 32388, 22468, 33853, 33060, 23511, 23511, 31339, 33621, 24035, 24035, 34397, 24618, 30757, 33663, 23114, 23114, 33683, 35684, 28618, 26678, 23511, 23511, 32506, 33699, 34585, 20402, 24035, 32562, 26973, 24036, 23114, 23114, 33377, 33773, 23029, 20271, 23511, 23511, 30621, 23511, 23860, 24035, 33791, 21553, 26576, 36558, 23114, 33809, 23036, 32857, 26047, 23511, 33827, 23634, 24035, 24035, 23110, 23114, 23114, 31252, 23511, 33845, 23628, 24035, 24459, 23111, 23114, 33869, 27078, 30791, 29783, 24035, 24742, 19872, 33895, 23266, 26462, 19710, 33879, 33919, 26577, 26597, 24123, 24930, 21930, 20208, 30501, 33953, 25268, 20252, 33983, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36322, 19552, 23390, 33634, 35154, 34008, 34024, 34058, 35544, 34106, 34128, 26811, 33151, 34144, 34169, 34212, 23114, 34228, 34244, 34278, 34315, 23511, 34331, 34347, 34380, 34413, 24035, 24663, 26576, 34429, 34453, 34477, 29534, 33811, 22468, 34499, 34524, 34557, 25170, 34580, 35436, 23937, 34601, 24035, 24341, 26453, 23113, 34638, 34662, 23114, 24236, 28618, 34684, 34703, 34729, 23511, 35352, 34753, 34799, 24035, 34815, 32558, 34848, 34888, 35814, 34923, 23165, 29137, 23606, 30326, 30730, 34939, 33023, 30562, 36848, 34979, 24035, 24847, 34996, 23114, 23114, 35032, 29695, 35054, 23511, 23511, 35091, 33296, 35124, 24296, 28235, 24361, 36276, 32772, 35067, 35189, 27301, 30855, 24852, 22452, 35211, 35237, 35316, 25500, 35270, 23405, 24304, 35304, 29362, 24036, 23114, 35332, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 35368, 28823, 23920, 32336, 35405, 20141, 24569, 31691, 35421, 35479, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35944, 22795, 21605, 33647, 35877, 35513, 30962, 35529, 34073, 35557, 24035, 24035, 20405, 31107, 23114, 23114, 23114, 35590, 34713, 23511, 23511, 23511, 35641, 19803, 29408, 32937, 25298, 24035, 35657, 23115, 27849, 24760, 35679, 26205, 22468, 23511, 35700, 24907, 24901, 35075, 31893, 34980, 24035, 24035, 24035, 24035, 23113, 35009, 23114, 23114, 23114, 28618, 35716, 30970, 23511, 23511, 23511, 34585, 23215, 24035, 24035, 24035, 24036, 35735, 23114, 23114, 23114, 27105, 35756, 35790, 23511, 23511, 23511, 35254, 35446, 24035, 24035, 31223, 35809, 23114, 23114, 23036, 36825, 35830, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 31031, 20355, 19872, 33903, 23266, 24036, 23114, 28686, 19829, 26577, 26597, 20211, 23008, 23424, 20208, 24711, 31065, 24486, 26578, 27685, 20141, 19773, 35851, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36307, 19288, 21605, 35494, 19702, 32618, 33437, 31507, 29939, 25117, 24035, 27939, 24036, 27869, 23114, 26829, 23114, 22420, 23494, 23511, 33132, 23511, 28306, 19803, 24035, 34832, 24035, 24035, 26576, 23114, 25153, 23114, 23114, 33811, 22468, 23511, 23511, 35911, 23511, 23512, 24694, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 35929, 19288, 21605, 25860, 23112, 36185, 23511, 36201, 29939, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 22420, 23511, 23511, 23511, 23511, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 26748, 24035, 24035, 24035, 24035, 24035, 36249, 23114, 23114, 23114, 23114, 28618, 28835, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 27151, 24035, 26760, 23114, 27989, 23114, 23114, 36268, 20271, 23511, 24436, 23511, 29703, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36292, 19288, 21605, 36503, 21922, 32618, 34534, 31507, 36522, 24035, 33793, 24035, 35864, 23114, 23114, 36555, 23417, 22420, 23511, 23511, 36574, 26020, 28306, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 33811, 22468, 23511, 23511, 23511, 23511, 23512, 36592, 24035, 24035, 36625, 24035, 24035, 23113, 23114, 32961, 23114, 23114, 29618, 29700, 23511, 29086, 23511, 23511, 34585, 20402, 36644, 24035, 24035, 24036, 29740, 23114, 23114, 23114, 29065, 36663, 31527, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36079, 19288, 21605, 31451, 23112, 36684, 23511, 36700, 29939, 24035, 24035, 24035, 30185, 23114, 23114, 23114, 27526, 22420, 23511, 23511, 23511, 32865, 28306, 19803, 36743, 24035, 27017, 24035, 26576, 27535, 23114, 31432, 23114, 33811, 22468, 33271, 23511, 32128, 23511, 23512, 24694, 24035, 27196, 24035, 24035, 24035, 23113, 32459, 23114, 23114, 23114, 28618, 29700, 33829, 36762, 23511, 23511, 34585, 20402, 24035, 36746, 24035, 29722, 23114, 23114, 34437, 23114, 34907, 20271, 23511, 23511, 18801, 23511, 23206, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 36837, 24035, 24035, 33739, 23114, 23114, 25094, 23511, 23261, 23628, 24035, 36780, 23111, 24073, 19874, 27078, 35344, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22720, 19288, 36799, 36866, 17466, 36890, 36864, 21991, 22211, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 17631, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 22705, 19288, 19457, 36866, 17466, 36890, 36866, 19375, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18855, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36124, 19288, 36951, 36866, 17466, 36890, 36866, 21991, 22404, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18567, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36979, 36995, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 19457, 36866, 17466, 36890, 36866, 21991, 22971, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18027, 22984, 17553, 17572, 22285, 18462, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 17619, 22083, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 36139, 19288, 21529, 24035, 23112, 23033, 23511, 31507, 25377, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 37040, 23511, 23511, 23511, 23511, 28086, 19803, 24035, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23114, 24254, 37079, 23511, 23511, 23511, 23511, 23512, 34766, 24035, 24035, 24035, 24035, 24035, 23113, 23114, 23114, 23114, 23114, 28618, 29700, 23511, 23511, 23511, 23511, 34585, 20402, 24035, 24035, 24035, 24036, 23114, 23114, 23114, 23114, 23029, 20271, 23511, 23511, 23511, 23511, 30562, 24035, 24035, 24035, 26576, 23114, 23114, 23114, 23036, 29695, 23511, 23511, 23511, 23634, 24035, 24035, 23110, 23114, 23114, 23467, 23511, 23261, 23628, 24035, 24035, 23111, 23114, 19874, 27078, 27689, 19830, 24035, 23112, 19872, 27741, 23266, 24036, 23114, 30243, 19829, 26577, 26597, 20211, 23008, 19876, 20208, 23007, 20046, 20132, 26578, 27685, 20141, 24569, 31691, 19787, 29304, 20268, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 37112, 37160, 18469, 36866, 17466, 36890, 36866, 17656, 37174, 22987, 17556, 17575, 22288, 17486, 17509, 17525, 18373, 18537, 22984, 17553, 17572, 22285, 18780, 17990, 18622, 19411, 20306, 17996, 17689, 17470, 17591, 20896, 17468, 36883, 36906, 36867, 19404, 20299, 36866, 17647, 17862, 18921, 19514, 17705, 20311, 37017, 17728, 17756, 17784, 17800, 17825, 17854, 18403, 18928, 19521, 17712, 37008, 37024, 17878, 18884, 17900, 17922, 17944, 18178, 17960, 18012, 18381, 18064, 18218, 17884, 18890, 17906, 17928, 18102, 25022, 18130, 36931, 36963, 17493, 18150, 18166, 18214, 25010, 25026, 18134, 36935, 18262, 18278, 18294, 18320, 18336, 18361, 18397, 18274, 22096, 18304, 18448, 18485, 18523, 18553, 18583, 19149, 18638, 18497, 19656, 18664, 18680, 18507, 18696, 19164, 18712, 18737, 17681, 22026, 20906, 20915, 22054, 17838, 17450, 22022, 18765, 19225, 18841, 18871, 18906, 19241, 19257, 18976, 19041, 19056, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 19058, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 0, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 127011, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2576384, 2215936, 2215936, 2215936, 2416640, 2424832, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2543616, 2215936, 2215936, 2215936, 2215936, 2215936, 2629632, 2215936, 2617344, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2691072, 2215936, 2707456, 2215936, 2715648, 2215936, 2723840, 2764800, 2215936, 2215936, 2797568, 2215936, 2822144, 2215936, 2215936, 2854912, 2215936, 2215936, 2215936, 2912256, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 180224, 0, 0, 2174976, 0, 0, 2170880, 2617344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2691072, 2170880, 2707456, 2170880, 2715648, 2170880, 2723840, 2764800, 2170880, 2170880, 2797568, 2170880, 2170880, 2797568, 2170880, 2822144, 2170880, 2170880, 2854912, 2170880, 2170880, 2170880, 2912256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2609152, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2654208, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 184599, 280, 0, 2174976, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 544, 0, 546, 0, 0, 2179072, 0, 0, 0, 552, 0, 0, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2158592, 2158592, 2232320, 2232320, 0, 2240512, 2240512, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 2768896, 2789376, 2813952, 2170880, 2170880, 2170880, 2875392, 2904064, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 167936, 0, 0, 0, 0, 2174976, 0, 0, 2215936, 2215936, 2514944, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2592768, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 32768, 0, 0, 0, 0, 0, 2174976, 32768, 0, 2633728, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2711552, 2215936, 2215936, 2215936, 2215936, 2215936, 2760704, 2768896, 2789376, 2813952, 2215936, 2215936, 2215936, 2875392, 2904064, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 65819, 2215936, 2215936, 3031040, 2215936, 3055616, 2215936, 2215936, 2215936, 2215936, 3092480, 2215936, 2215936, 3125248, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2170880, 2170880, 2494464, 2170880, 2170880, 0, 0, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 2699264, 2170880, 2727936, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2879488, 2170880, 2916352, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3026944, 2170880, 2170880, 3063808, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 3112960, 2170880, 2170880, 3133440, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 2379776, 2215936, 2523136, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2596864, 2215936, 2621440, 2215936, 2215936, 2641920, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 548, 0, 0, 0, 0, 287, 2170880, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3117056, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2699264, 2215936, 2727936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2879488, 2215936, 2916352, 2215936, 2215936, 0, 0, 0, 0, 188416, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 0, 2171019, 2171019, 2171019, 2400395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3031179, 2171019, 3055755, 2171019, 2171019, 2215936, 3133440, 2215936, 2215936, 2215936, 3162112, 2215936, 2215936, 3182592, 3186688, 2215936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2523275, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2597003, 2171019, 2621579, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 4337664, 28, 2170880, 2170880, 2170880, 2629632, 2170880, 2170880, 2170880, 2170880, 2719744, 2744320, 2170880, 2170880, 2170880, 2834432, 2838528, 2170880, 2908160, 2170880, 2170880, 2936832, 2215936, 2215936, 2215936, 2215936, 2719744, 2744320, 2215936, 2215936, 2215936, 2834432, 2838528, 2215936, 2908160, 2215936, 2215936, 2936832, 2215936, 2215936, 2985984, 2215936, 2994176, 2215936, 2215936, 3014656, 2215936, 3059712, 3076096, 3088384, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2445312, 2215936, 2465792, 2473984, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2171019, 2494603, 2171019, 2171019, 2215936, 2215936, 2215936, 3215360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3016168, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 124, 124, 0, 128, 128, 2170880, 2170880, 2170880, 3215360, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2535424, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 0, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2170880, 2170880, 3170304, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 2215936, 2215936, 2215936, 2535424, 2539520, 2215936, 2215936, 2588672, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 136, 0, 2215936, 2215936, 2920448, 2215936, 2215936, 2215936, 2990080, 2215936, 2215936, 2215936, 2215936, 3051520, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3108864, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3026944, 2215936, 2215936, 3063808, 2215936, 2215936, 3112960, 2215936, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2486272, 2170880, 2170880, 2506752, 2170880, 2170880, 2170880, 2537049, 2539520, 2170880, 2170880, 2588672, 2170880, 2170880, 2170880, 1508, 2170880, 2170880, 2170880, 1512, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2686976, 2748416, 2170880, 2170880, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3121152, 2170880, 2170880, 3145728, 3158016, 3166208, 2170880, 2420736, 2428928, 2170880, 2478080, 2170880, 2170880, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 0, 0, 3145728, 3158016, 3166208, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 0, 2170880, 2215936, 2215936, 2580480, 2215936, 2605056, 2637824, 2215936, 2215936, 2686976, 2748416, 2215936, 2215936, 2215936, 2924544, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 286, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2387968, 2392064, 2170880, 2170880, 2433024, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 1625, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 647, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2686976, 0, 0, 2748416, 2170880, 2170880, 0, 2170880, 2924544, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 0, 0, 28, 28, 2170880, 3141632, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2170880, 2420736, 2428928, 2752512, 2756608, 0, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2170880, 3141632, 2170880, 2170880, 2490368, 2215936, 2490368, 2215936, 2215936, 2215936, 2547712, 2555904, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 245760, 0, 3129344, 2170880, 2170880, 2490368, 2170880, 2170880, 2170880, 0, 0, 2547712, 2555904, 2170880, 2170880, 2170880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 45056, 0, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1482, 97, 97, 97, 97, 97, 97, 97, 1354, 97, 97, 97, 97, 97, 97, 97, 97, 1148, 97, 97, 97, 97, 97, 97, 97, 2584576, 2170880, 2170880, 1512, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2170880, 2850816, 2170880, 2170880, 2170880, 3022848, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 287, 2170880, 2215936, 3022848, 2170880, 2441216, 2170880, 2527232, 0, 0, 2170880, 2600960, 2170880, 0, 2850816, 2170880, 2170880, 2170880, 2170880, 2170880, 2523136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2596864, 2170880, 2621440, 2170880, 2170880, 2641920, 2170880, 2170880, 2170880, 3022848, 2170880, 2519040, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2453504, 2457600, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2514944, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2519040, 0, 2024, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 2024, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 2170880, 2215936, 2650112, 2965504, 2215936, 0, 0, 2170880, 2650112, 2965504, 2170880, 2551808, 2170880, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 141, 45, 45, 67, 67, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 0, 2551808, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2170880, 2215936, 0, 2170880, 2977792, 2977792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 29, 102432, 127011, 110630, 114730, 106539, 127011, 127011, 127011, 53264, 18, 18, 49172, 0, 0, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 136, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 4256099, 4256099, 24, 24, 0, 28, 28, 2170880, 2461696, 2170880, 2170880, 2170880, 2510848, 2170880, 2170880, 0, 2170880, 2170880, 2580480, 2170880, 2605056, 2637824, 2170880, 2170880, 2170880, 2547712, 2555904, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3129344, 2215936, 2215936, 543, 543, 545, 545, 0, 0, 2179072, 0, 550, 551, 551, 0, 287, 2171166, 2171166, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 645, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 149, 2584576, 2170880, 2170880, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2441216, 2170880, 2527232, 2170880, 2600960, 2519040, 0, 0, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 2396160, 2170880, 2170880, 2170880, 2170880, 3018752, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396160, 0, 0, 2170880, 2170880, 2170880, 2170880, 3018752, 2170880, 2650112, 2965504, 53264, 18, 49172, 57366, 24, 155648, 28, 102432, 155648, 155687, 114730, 106539, 0, 0, 155648, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 0, 0, 0, 0, 2220032, 0, 94208, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 208896, 18, 278528, 24, 24, 0, 28, 28, 53264, 18, 159765, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 139394, 28, 28, 102432, 131, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 32768, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 546, 0, 0, 2183168, 0, 0, 552, 832, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2170880, 2609152, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2654208, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 1084, 0, 1088, 0, 1092, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 937, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 644, 0, 0, 0, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 826, 0, 828, 0, 0, 2183168, 0, 0, 830, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2592768, 2170880, 2170880, 2170880, 2170880, 2633728, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2711552, 2170880, 2170880, 2170880, 2170880, 2170880, 2760704, 53264, 18, 49172, 57366, 24, 8192, 28, 172066, 172032, 110630, 172066, 106539, 0, 0, 172032, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 102432, 0, 98304, 0, 0, 2220032, 110630, 0, 0, 0, 0, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 45056, 0, 0, 0, 53264, 18, 49172, 57366, 25, 8192, 30, 102432, 0, 110630, 114730, 106539, 0, 0, 176219, 53264, 18, 18, 49172, 0, 57366, 0, 124, 124, 124, 0, 128, 128, 128, 128, 102432, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 0, 546, 0, 0, 2183168, 0, 65536, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2170880, 2998272, 2170880, 3010560, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3198976, 2215936, 0, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 143, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1824, 67, 1826, 67, 67, 67, 67, 17, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 120, 121, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 2179072, 548, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2033, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 978, 0, 546, 70179, 0, 2183168, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1013, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 67, 67, 67, 483, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1359, 97, 97, 97, 67, 67, 1584, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 45, 45, 45, 45, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 774, 67, 67, 1713, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1723, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 45, 1559, 45, 45, 1561, 45, 45, 45, 45, 45, 45, 45, 687, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1771, 1772, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 1827, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 1614, 97, 97, 97, 97, 97, 603, 97, 97, 605, 97, 97, 608, 97, 97, 97, 97, 0, 1532, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 450, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 1839, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 1883, 97, 1885, 97, 0, 1888, 0, 97, 97, 0, 97, 97, 1848, 97, 97, 97, 97, 1852, 45, 45, 45, 45, 45, 45, 45, 384, 391, 45, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 45, 45, 45, 45, 1237, 45, 45, 45, 45, 45, 45, 67, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1951, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1963, 97, 2023, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 1994, 67, 1995, 67, 67, 67, 67, 67, 67, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 0, 0, 0, 0, 2220032, 110630, 0, 0, 0, 114730, 106539, 137, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2793472, 2805760, 2170880, 2830336, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 281, 549, 0, 65820, 65820, 0, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2031, 2032, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1769, 67, 0, 546, 70179, 549, 549, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1858, 45, 641, 0, 0, 0, 0, 41606, 926, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 456, 67, 0, 0, 0, 1313, 0, 0, 0, 1096, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1110, 97, 97, 97, 97, 67, 67, 67, 67, 1301, 1476, 0, 0, 0, 0, 1307, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1486, 97, 1487, 97, 1313, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 97, 45, 1853, 45, 1855, 45, 45, 45, 45, 53264, 18, 49172, 57366, 26, 8192, 31, 102432, 0, 110630, 114730, 106539, 0, 0, 225368, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 18, 49172, 163840, 57366, 0, 24, 24, 229376, 0, 28, 28, 28, 229376, 102432, 0, 0, 0, 0, 2220167, 110630, 0, 0, 0, 114730, 106539, 0, 2171019, 2171019, 2171019, 2171019, 2592907, 2171019, 2171019, 2171019, 2171019, 2633867, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2654347, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3117195, 2171019, 2171019, 2171019, 2171019, 2240641, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 140, 2171019, 2171019, 2171019, 2416779, 2424971, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2617483, 2171019, 2171019, 2642059, 2171019, 2171019, 2171019, 2699403, 2171019, 2728075, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3215499, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2171019, 2822283, 2171019, 2171019, 2855051, 2171019, 2171019, 2171019, 2912395, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3002507, 2171019, 2171019, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2171166, 2171166, 2416926, 2425118, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2576670, 2171166, 2617630, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2691358, 2171166, 2707742, 2171166, 2715934, 2171166, 2724126, 2765086, 2171166, 2171166, 2797854, 2171166, 2822430, 2171166, 2171166, 2855198, 2171166, 2171166, 2171166, 2912542, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2793758, 2806046, 2171166, 2830622, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3109150, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2543902, 2171166, 2171166, 2171166, 2171166, 2171166, 2629918, 2793611, 2805899, 2171019, 2830475, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2171166, 2171166, 2171166, 2400542, 2171166, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 0, 2171166, 2920734, 2171166, 2171166, 2171166, 2990366, 2171166, 2171166, 2171166, 2171166, 3117342, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 0, 53264, 0, 18, 18, 4329472, 2232445, 0, 2240641, 4337664, 2711691, 2171019, 2171019, 2171019, 2171019, 2171019, 2760843, 2769035, 2789515, 2814091, 2171019, 2171019, 2171019, 2875531, 2904203, 2171019, 2171019, 3092619, 2171019, 2171019, 3125387, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3199115, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2453504, 2457600, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2793472, 2805760, 2215936, 2830336, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2494464, 2170880, 2170880, 2171166, 2171166, 2634014, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2711838, 2171166, 2171166, 2171166, 2171166, 2171166, 2760990, 2769182, 2789662, 2814238, 2171166, 2171166, 2171166, 2875678, 2904350, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3199262, 2171166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379915, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2445451, 2171019, 2465931, 2474123, 2171019, 2171019, 3113099, 2171019, 2171019, 3133579, 2171019, 2171019, 2171019, 3162251, 2171019, 2171019, 3182731, 3186827, 2171019, 2379776, 2879627, 2171019, 2916491, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3027083, 2171019, 2171019, 3063947, 2699550, 2171166, 2728222, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2879774, 2171166, 2916638, 2171166, 2171166, 2171166, 2171166, 2171166, 2609438, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2654494, 2171166, 2171166, 2171166, 2171166, 2171166, 2445598, 2171166, 2466078, 2474270, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2523422, 2171019, 2437259, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2543755, 2171019, 2171019, 2171019, 2584715, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2908299, 2171019, 2171019, 2936971, 2171019, 2171019, 2986123, 2171019, 2994315, 2171019, 2171019, 3014795, 2171019, 3059851, 3076235, 3088523, 2171166, 2171166, 2986270, 2171166, 2994462, 2171166, 2171166, 3014942, 2171166, 3059998, 3076382, 3088670, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3027230, 2171166, 2171166, 3064094, 2171166, 2171166, 3113246, 2171166, 2171166, 3133726, 2506891, 2171019, 2171019, 2171019, 2535563, 2539659, 2171019, 2171019, 2588811, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2691211, 2171019, 2707595, 2171019, 2715787, 2171019, 2723979, 2764939, 2171019, 2171019, 2797707, 2215936, 2215936, 3170304, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2453790, 2457886, 2171166, 2171166, 2171166, 2486558, 2171166, 2171166, 2507038, 2171166, 2171166, 2171166, 2535710, 2539806, 2171166, 2171166, 2588958, 2171166, 2171166, 2171166, 2171166, 2515230, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2593054, 2171166, 2171166, 2171166, 2171166, 3051806, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3170590, 0, 2388107, 2392203, 2171019, 2171019, 2433163, 2171019, 2461835, 2171019, 2171019, 2171019, 2510987, 2171019, 2171019, 2171019, 2171019, 2580619, 2171019, 2605195, 2637963, 2171019, 2171019, 2171019, 2920587, 2171019, 2171019, 2171019, 2990219, 2171019, 2171019, 2171019, 2171019, 3051659, 2171019, 2171019, 2171019, 2453643, 2457739, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2515083, 2171019, 2171019, 2171019, 2171019, 2646155, 2670731, 2752651, 2756747, 2846859, 2961547, 2171019, 2998411, 2171019, 3010699, 2171019, 2171019, 2687115, 2748555, 2171019, 2171019, 2171019, 2924683, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3121291, 2171019, 2171019, 2171019, 3170443, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2486272, 2215936, 2215936, 2506752, 3145867, 3158155, 3166347, 2387968, 2392064, 2215936, 2215936, 2433024, 2215936, 2461696, 2215936, 2215936, 2215936, 2510848, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 0, 553, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 3121152, 2215936, 2215936, 3145728, 3158016, 3166208, 2388254, 2392350, 2171166, 2171166, 2433310, 2171166, 2461982, 2171166, 2171166, 2171166, 2511134, 2171166, 2171166, 0, 2171166, 2171166, 2580766, 2171166, 2605342, 2638110, 2171166, 2171166, 2171166, 2171166, 3031326, 2171166, 3055902, 2171166, 2171166, 2171166, 2171166, 3092766, 2171166, 2171166, 3125534, 2171166, 2171166, 2171166, 3162398, 2171166, 2171166, 3182878, 3186974, 2171166, 0, 0, 0, 2171019, 2171019, 2171019, 2171019, 3109003, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2215936, 2215936, 2400256, 2215936, 2215936, 2215936, 2215936, 2171166, 2687262, 0, 0, 2748702, 2171166, 2171166, 0, 2171166, 2924830, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 2597150, 2171166, 2621726, 2171166, 2171166, 2642206, 2171166, 2171166, 2171166, 2171166, 3121438, 2171166, 2171166, 3146014, 3158302, 3166494, 2171019, 2420875, 2429067, 2171019, 2478219, 2171019, 2171019, 2171019, 2171019, 2547851, 2556043, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 3129483, 2215936, 2171019, 3141771, 2215936, 2420736, 2428928, 2215936, 2478080, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2646016, 2670592, 2752512, 2756608, 2846720, 2961408, 2215936, 2998272, 2215936, 3010560, 2215936, 2215936, 2215936, 3141632, 2171166, 2421022, 2429214, 2171166, 2478366, 2171166, 2171166, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2646302, 2670878, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 0, 45, 45, 45, 45, 45, 1405, 1406, 45, 45, 45, 45, 1409, 45, 45, 45, 45, 45, 1415, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1238, 45, 45, 45, 45, 67, 2752798, 2756894, 0, 2847006, 2961694, 2171166, 2998558, 2171166, 3010846, 2171166, 2171166, 2171166, 3141918, 2171019, 2171019, 2490507, 3129344, 2171166, 2171166, 2490654, 2171166, 2171166, 2171166, 0, 0, 2547998, 2556190, 2171166, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 167, 45, 45, 45, 45, 185, 187, 45, 45, 198, 45, 45, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171166, 3129630, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2576523, 2171019, 2171019, 2171019, 2171019, 2171019, 2609291, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3002368, 2215936, 2215936, 2171166, 2171166, 2494750, 2171166, 2171166, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 147, 2584576, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 0, 0, 0, 2171166, 2171166, 2171166, 3002654, 2171166, 2171166, 2171019, 2171019, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2175257, 0, 0, 2584862, 2171166, 2171166, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2171019, 2441355, 2171019, 2527371, 2171019, 2601099, 2171019, 2850955, 2171019, 2171019, 2171019, 3022987, 2215936, 2441216, 2215936, 2527232, 2215936, 2600960, 2215936, 2850816, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2179072, 0, 0, 0, 0, 69632, 287, 2170880, 2215936, 3022848, 2171166, 2441502, 2171166, 2527518, 0, 0, 2171166, 2601246, 2171166, 0, 2851102, 2171166, 2171166, 2171166, 2171166, 2720030, 2744606, 2171166, 2171166, 2171166, 2834718, 2838814, 2171166, 2908446, 2171166, 2171166, 2937118, 3023134, 2171019, 2519179, 2171019, 2171019, 2171019, 2171019, 2171019, 2215936, 2519040, 2215936, 2215936, 2215936, 2215936, 2215936, 2171166, 2171166, 2171166, 3215646, 0, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2171019, 2486411, 2171019, 2171019, 2171019, 2629771, 2171019, 2171019, 2171019, 2171019, 2719883, 2744459, 2171019, 2171019, 2171019, 2834571, 2838667, 2171019, 2519326, 0, 0, 2171166, 2171166, 0, 2171166, 2171166, 2171166, 2396299, 2171019, 2171019, 2171019, 2171019, 3018891, 2396160, 2215936, 2215936, 2215936, 2215936, 3018752, 2396446, 0, 0, 2171166, 2171166, 2171166, 2171166, 3019038, 2171019, 2650251, 2965643, 2171019, 2215936, 2650112, 2965504, 2215936, 0, 0, 2171166, 2650398, 2965790, 2171166, 2551947, 2171019, 2551808, 2215936, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 144, 45, 45, 67, 67, 67, 67, 67, 228, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1929, 97, 97, 97, 97, 0, 0, 0, 2552094, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2171019, 2215936, 0, 2171166, 2977931, 2977792, 2978078, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1321, 97, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 140, 0, 2379776, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2445312, 2170880, 2465792, 2473984, 2170880, 2170880, 2170880, 2584576, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2170880, 2170880, 2170880, 3162112, 2170880, 2170880, 3182592, 3186688, 2170880, 0, 140, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3002368, 2170880, 2170880, 2215936, 2215936, 2494464, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 3215360, 544, 0, 0, 0, 544, 0, 546, 0, 0, 0, 546, 0, 0, 2183168, 0, 0, 552, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 0, 2170880, 2170880, 2170880, 0, 2170880, 2920448, 2170880, 2170880, 2170880, 2990080, 2170880, 2170880, 552, 0, 0, 0, 552, 0, 287, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 18, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 644, 0, 2215936, 2215936, 3170304, 544, 0, 546, 0, 552, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 140, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 249856, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 151640, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 253952, 110630, 114730, 106539, 0, 0, 32856, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 192512, 53264, 18, 18, 49172, 0, 57366, 0, 2232445, 184320, 2232445, 0, 2240641, 2240641, 184320, 2240641, 102432, 0, 0, 0, 221184, 2220032, 110630, 0, 0, 0, 114730, 106539, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3108864, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2215936, 0, 0, 0, 45056, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 0, 53264, 0, 18, 18, 24, 24, 0, 127, 127, 53264, 18, 49172, 258071, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 32768, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 204800, 53264, 18, 49172, 57366, 24, 27, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 33, 0, 33, 33, 33, 0, 0, 0, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 16384, 28, 28, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2170880, 2170880, 2170880, 2416640, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2030, 45, 45, 45, 45, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1699, 67, 67, 67, 67, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 1358, 97, 97, 97, 641, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 45, 45, 45, 0, 1480, 0, 0, 0, 0, 1319, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1680, 45, 45, 45, 641, 0, 924, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 45, 45, 45, 45, 67, 67, 37139, 37139, 24853, 24853, 0, 70179, 282, 0, 0, 65820, 65820, 369, 287, 97, 0, 0, 97, 97, 0, 97, 2028, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1767, 67, 67, 67, 0, 0, 0, 0, 0, 0, 1612, 97, 97, 97, 97, 97, 97, 0, 1785, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1790, 97, 0, 0, 2170880, 2170880, 3051520, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3170304, 241664, 2387968, 2392064, 2170880, 2170880, 2433024, 53264, 19, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 274432, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 270336, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 1134711, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 1126440, 1126440, 1126440, 0, 0, 1126400, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 36, 110630, 114730, 106539, 0, 0, 217088, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 94, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 96, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 24666, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 126, 28, 28, 28, 28, 102432, 53264, 122, 123, 49172, 0, 57366, 0, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 2170880, 2170880, 4256099, 0, 0, 0, 0, 0, 0, 0, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 1319, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1109, 97, 97, 97, 97, 1113, 132, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 146, 150, 45, 45, 45, 45, 45, 175, 45, 180, 45, 186, 45, 189, 45, 45, 203, 67, 256, 67, 67, 270, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 293, 297, 97, 97, 97, 97, 97, 322, 97, 327, 97, 333, 97, 0, 0, 97, 2026, 0, 2027, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 336, 97, 97, 350, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 2424832, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2617344, 2170880, 45, 439, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 525, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 622, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 1527, 369, 648, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1239, 45, 45, 45, 67, 729, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 762, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 0, 0, 0, 1477, 0, 1086, 0, 0, 0, 1479, 0, 1090, 67, 67, 796, 67, 67, 799, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 67, 67, 811, 67, 67, 67, 67, 67, 816, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 833, 97, 97, 97, 97, 97, 97, 97, 97, 1380, 0, 0, 0, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 45, 45, 45, 45, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 97, 97, 97, 894, 97, 97, 897, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1382, 45, 45, 45, 97, 909, 97, 97, 97, 97, 97, 914, 97, 97, 97, 97, 97, 97, 97, 923, 67, 67, 1079, 67, 67, 67, 67, 67, 37689, 1085, 25403, 1089, 66365, 1093, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 148, 1114, 97, 97, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 97, 97, 606, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1173, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 145, 45, 45, 67, 67, 67, 67, 67, 1762, 67, 67, 67, 1766, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1934, 67, 67, 1255, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 67, 67, 67, 67, 1297, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 33344, 97, 97, 97, 1335, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 1377, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 670, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 67, 67, 1438, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 0, 0, 0, 1311, 0, 0, 0, 1317, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1322, 97, 97, 1491, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 1553, 45, 1504, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 97, 97, 0, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 1540, 45, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1700, 67, 67, 67, 97, 1648, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1541, 0, 97, 97, 97, 97, 0, 1940, 0, 97, 97, 97, 97, 97, 97, 45, 45, 2011, 45, 45, 45, 2015, 67, 67, 2017, 67, 67, 67, 2021, 97, 67, 67, 812, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 97, 97, 910, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 0, 0, 0, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 1188, 45, 45, 45, 45, 1414, 45, 45, 45, 1417, 45, 1419, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 453, 45, 45, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 1324, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 930, 45, 45, 45, 45, 97, 97, 97, 97, 1378, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 45, 67, 67, 1923, 67, 1925, 67, 67, 1927, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1985, 45, 45, 45, 45, 45, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 45, 946, 45, 45, 950, 45, 45, 45, 0, 97, 97, 97, 1939, 0, 0, 0, 97, 1943, 97, 97, 1945, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 990, 45, 45, 45, 67, 257, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 337, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 2170880, 2170880, 2170880, 2416640, 401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 459, 461, 67, 67, 67, 67, 67, 67, 67, 67, 475, 67, 480, 67, 67, 67, 67, 67, 67, 1054, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 484, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 67, 67, 97, 556, 558, 97, 97, 97, 97, 97, 97, 97, 97, 572, 97, 577, 97, 97, 0, 0, 1896, 97, 97, 97, 97, 97, 97, 1903, 45, 45, 45, 45, 983, 45, 45, 45, 45, 988, 45, 45, 45, 45, 45, 45, 1195, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1549, 45, 45, 45, 45, 45, 581, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1004, 45, 45, 45, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 761, 67, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 1071, 67, 67, 67, 67, 1076, 794, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 544, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 859, 97, 0, 0, 2025, 97, 20480, 97, 97, 2029, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1775, 67, 67, 67, 97, 97, 97, 97, 892, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1515, 97, 993, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 992, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1607, 67, 67, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 97, 45, 1556, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 696, 45, 1596, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 67, 97, 97, 97, 1621, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1346, 97, 97, 97, 97, 1740, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 45, 45, 67, 97, 97, 97, 97, 97, 97, 1836, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1984, 97, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 45, 45, 45, 45, 67, 739, 67, 67, 67, 67, 67, 744, 45, 45, 1909, 45, 45, 45, 45, 45, 45, 45, 67, 1917, 67, 1918, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 67, 67, 67, 67, 67, 97, 1930, 97, 1931, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 1580, 67, 67, 0, 97, 97, 1938, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 699, 45, 45, 45, 704, 45, 45, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 2006, 97, 97, 97, 97, 0, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 722, 723, 45, 45, 45, 45, 45, 45, 2045, 67, 67, 67, 2047, 0, 0, 97, 97, 97, 2051, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1957, 45, 67, 67, 67, 67, 67, 1836, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 67, 67, 1761, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 45, 45, 420, 45, 45, 422, 45, 45, 425, 45, 45, 45, 45, 45, 45, 45, 387, 45, 45, 45, 45, 397, 45, 45, 45, 67, 460, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 515, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 97, 0, 2039, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1426, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1689, 67, 67, 67, 97, 557, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 612, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 896, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 97, 45, 939, 45, 45, 45, 45, 943, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1916, 67, 67, 67, 67, 67, 45, 67, 67, 67, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 1019, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 804, 67, 67, 67, 67, 67, 1077, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2437120, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2543616, 2170880, 2170880, 2170880, 2170880, 2170880, 2629632, 1169, 97, 1171, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 936, 45, 45, 67, 67, 214, 67, 220, 67, 67, 233, 67, 243, 67, 248, 67, 67, 67, 67, 67, 67, 1298, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1617, 97, 0, 0, 0, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 45, 45, 45, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 1281, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 776, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 907, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 690, 45, 45, 695, 45, 45, 67, 67, 67, 67, 67, 1465, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1712, 97, 97, 97, 97, 1741, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1924, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1983, 97, 97, 45, 45, 1987, 45, 1988, 45, 0, 97, 97, 97, 97, 0, 0, 0, 1942, 97, 97, 97, 97, 97, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 711, 45, 45, 153, 45, 45, 166, 45, 176, 45, 181, 45, 45, 188, 191, 196, 45, 204, 255, 258, 263, 67, 271, 67, 67, 0, 37139, 24853, 0, 0, 0, 282, 41098, 65820, 97, 97, 97, 294, 97, 300, 97, 97, 313, 97, 323, 97, 328, 97, 97, 335, 338, 343, 97, 351, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1411, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 67, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1263, 67, 67, 67, 67, 67, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1526, 97, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 0, 97, 97, 1796, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1744, 45, 45, 45, 369, 0, 651, 45, 653, 45, 654, 45, 656, 45, 45, 45, 660, 45, 45, 45, 45, 1558, 45, 45, 45, 45, 45, 45, 45, 45, 1566, 45, 45, 681, 45, 683, 45, 45, 45, 45, 45, 45, 45, 45, 691, 692, 694, 45, 45, 45, 716, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 709, 45, 45, 712, 45, 714, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 726, 45, 45, 45, 733, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 747, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 1613, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 67, 764, 67, 67, 67, 67, 768, 67, 770, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1977, 67, 778, 779, 781, 67, 67, 67, 67, 67, 67, 788, 789, 67, 67, 792, 793, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 67, 67, 824, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 836, 97, 838, 97, 839, 97, 841, 97, 97, 97, 845, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 97, 97, 0, 1728, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1802, 45, 97, 97, 862, 97, 97, 97, 97, 866, 97, 868, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1788, 97, 97, 97, 0, 0, 97, 97, 876, 877, 879, 97, 97, 97, 97, 97, 97, 886, 887, 97, 97, 890, 891, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1646, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 97, 97, 922, 923, 45, 955, 45, 957, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 195, 45, 45, 45, 45, 45, 981, 982, 45, 45, 45, 45, 45, 45, 989, 45, 45, 45, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 67, 67, 1031, 67, 1033, 67, 67, 67, 67, 67, 67, 67, 817, 819, 67, 67, 67, 67, 67, 37689, 544, 67, 1065, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 1078, 67, 67, 1081, 1082, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 0, 2171166, 2171166, 2171166, 2171166, 2171166, 2437406, 2171166, 2171166, 97, 1115, 97, 1117, 97, 97, 97, 97, 97, 97, 1125, 97, 1127, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 1644, 97, 97, 97, 0, 97, 97, 97, 0, 97, 97, 1642, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1159, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1502, 97, 97, 97, 97, 97, 1172, 97, 97, 1175, 1176, 97, 97, 12288, 0, 925, 0, 1179, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 45, 935, 45, 45, 45, 1233, 45, 45, 45, 1236, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1873, 67, 67, 45, 45, 1218, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 1230, 45, 45, 67, 67, 215, 219, 222, 67, 230, 67, 67, 244, 246, 249, 67, 67, 67, 67, 67, 67, 1882, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1904, 45, 1905, 45, 67, 67, 67, 67, 67, 1258, 67, 1260, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 67, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 67, 818, 67, 67, 67, 67, 67, 67, 37689, 544, 67, 67, 1295, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 97, 97, 97, 1326, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 97, 97, 97, 97, 97, 1338, 97, 1340, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 1503, 97, 1363, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 578, 97, 1375, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1179, 0, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 45, 45, 45, 45, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1778, 97, 97, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 97, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 1554, 45, 1570, 1571, 45, 67, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 67, 1061, 67, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 1594, 67, 67, 67, 67, 67, 97, 2038, 0, 97, 97, 97, 97, 97, 2044, 45, 45, 45, 995, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 45, 45, 45, 1809, 45, 1811, 45, 45, 45, 45, 45, 67, 1610, 1611, 67, 1476, 0, 1478, 0, 1480, 0, 97, 97, 97, 97, 97, 97, 1618, 1647, 1649, 97, 97, 97, 1652, 97, 1654, 1655, 97, 0, 45, 45, 45, 1658, 45, 45, 67, 67, 216, 67, 67, 67, 67, 234, 67, 67, 67, 67, 252, 254, 1845, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 947, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1881, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1902, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1921, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 0, 97, 1937, 97, 97, 1940, 0, 0, 97, 97, 97, 97, 97, 97, 1947, 1948, 1949, 45, 45, 45, 1952, 45, 1954, 45, 45, 45, 45, 1959, 1960, 1961, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 67, 67, 1964, 67, 1966, 67, 67, 67, 67, 1971, 1972, 1973, 97, 0, 0, 0, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 884, 97, 97, 97, 889, 97, 97, 1978, 97, 0, 0, 1981, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 736, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 45, 67, 67, 67, 67, 0, 2049, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 933, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 97, 97, 288, 97, 97, 97, 97, 97, 97, 317, 97, 97, 97, 97, 97, 97, 0, 0, 97, 1787, 97, 97, 97, 97, 0, 0, 45, 45, 378, 45, 45, 45, 45, 45, 390, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 431, 433, 45, 45, 45, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 67, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 632, 97, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 67, 97, 97, 97, 97, 97, 97, 1837, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1897, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 97, 2010, 45, 45, 45, 45, 45, 45, 2016, 67, 67, 67, 67, 67, 67, 2022, 45, 2046, 67, 67, 67, 0, 0, 2050, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 0, 932, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 45, 45, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 701, 702, 45, 45, 705, 706, 45, 45, 45, 45, 45, 45, 703, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 45, 45, 45, 45, 45, 725, 45, 45, 45, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 834, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1799, 97, 97, 45, 45, 45, 1569, 45, 45, 45, 1572, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1306, 0, 67, 67, 67, 1598, 67, 67, 67, 67, 67, 67, 67, 67, 1606, 67, 67, 1609, 97, 97, 97, 1650, 97, 97, 1653, 97, 97, 97, 0, 45, 45, 1657, 45, 45, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1421, 45, 45, 45, 1703, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1711, 97, 97, 0, 1895, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 958, 45, 960, 45, 45, 45, 45, 45, 45, 45, 45, 1913, 45, 45, 1915, 67, 67, 67, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 481, 67, 45, 1749, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 45, 45, 45, 45, 173, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1773, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1886, 0, 0, 0, 97, 97, 67, 2035, 2036, 67, 67, 97, 0, 0, 97, 2041, 2042, 97, 97, 45, 45, 45, 45, 1662, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1397, 45, 45, 45, 45, 151, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 437, 205, 45, 67, 67, 67, 218, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 67, 97, 97, 97, 97, 298, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 97, 97, 97, 97, 97, 97, 352, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 365, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1427, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1435, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1037, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 923, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1919, 67, 1759, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 45, 154, 45, 162, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 964, 45, 45, 45, 206, 45, 67, 67, 67, 67, 221, 67, 229, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 67, 785, 67, 67, 67, 67, 67, 67, 67, 67, 802, 67, 67, 67, 807, 67, 67, 67, 97, 97, 97, 97, 353, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 402, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 45, 45, 674, 45, 45, 45, 45, 45, 45, 45, 45, 389, 45, 394, 45, 45, 398, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 447, 45, 45, 45, 454, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 488, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 67, 67, 67, 67, 67, 1774, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 67, 67, 523, 67, 67, 527, 67, 67, 67, 67, 67, 533, 67, 67, 67, 540, 97, 97, 97, 585, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 97, 97, 97, 97, 1784, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 620, 97, 97, 624, 97, 97, 97, 97, 97, 630, 97, 97, 97, 637, 713, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 45, 45, 45, 1197, 45, 45, 45, 45, 45, 45, 45, 45, 730, 732, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1581, 67, 45, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 775, 67, 67, 67, 67, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 67, 67, 67, 1080, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 287, 0, 2379776, 2170880, 2170880, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 920, 97, 97, 0, 0, 0, 0, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 45, 959, 45, 45, 45, 45, 45, 45, 45, 45, 45, 184, 45, 45, 45, 45, 202, 45, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1266, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1279, 67, 67, 67, 67, 67, 272, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1293, 67, 67, 67, 1296, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 281, 94, 0, 0, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 0, 97, 1376, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1384, 45, 45, 67, 208, 67, 67, 67, 67, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1069, 1070, 67, 67, 67, 67, 67, 67, 67, 0, 37140, 24854, 0, 0, 0, 0, 41098, 65821, 45, 1423, 45, 45, 45, 45, 45, 45, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1083, 37689, 0, 25403, 0, 66365, 0, 0, 0, 1436, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1830, 67, 1452, 1453, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 67, 67, 1461, 67, 67, 67, 1464, 67, 1466, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 1587, 67, 67, 67, 67, 67, 67, 67, 67, 1595, 1489, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 1505, 1506, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 1164, 97, 97, 97, 97, 97, 1516, 97, 97, 97, 1519, 97, 1521, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1301, 0, 0, 0, 1307, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 919, 97, 97, 97, 0, 97, 97, 97, 1781, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1792, 1860, 45, 1862, 1863, 45, 1865, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1875, 67, 1877, 1878, 67, 1880, 67, 97, 97, 97, 97, 97, 1887, 0, 1889, 97, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 237568, 0, 367, 0, 97, 1893, 0, 0, 0, 97, 1898, 1899, 97, 1901, 97, 45, 45, 45, 45, 45, 2014, 45, 67, 67, 67, 67, 67, 2020, 67, 97, 1989, 45, 1990, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1996, 67, 1997, 67, 67, 67, 67, 67, 273, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 97, 97, 97, 97, 0, 0, 97, 97, 2005, 0, 97, 2007, 97, 97, 18, 0, 139621, 0, 0, 0, 642, 0, 133, 364, 0, 0, 367, 41606, 0, 97, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 209, 67, 67, 67, 223, 67, 67, 67, 67, 67, 67, 67, 67, 67, 786, 67, 67, 67, 791, 67, 67, 45, 45, 940, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1016, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 0, 133, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 142, 45, 45, 67, 210, 67, 67, 67, 225, 67, 67, 239, 67, 67, 67, 250, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 476, 67, 67, 67, 67, 67, 67, 67, 1709, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1843, 0, 67, 259, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 289, 97, 97, 97, 303, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 97, 339, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 0, 358, 0, 0, 0, 0, 0, 0, 41098, 0, 140, 45, 45, 45, 45, 45, 1953, 45, 1955, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1687, 1688, 67, 67, 67, 67, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1203, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 477, 67, 67, 67, 67, 67, 67, 67, 1970, 97, 97, 97, 1974, 0, 0, 0, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1372, 97, 97, 97, 97, 67, 522, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 536, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 574, 97, 97, 97, 97, 97, 301, 97, 309, 97, 97, 97, 97, 97, 97, 97, 97, 97, 900, 97, 97, 97, 905, 97, 97, 97, 619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 633, 97, 97, 18, 0, 139621, 0, 0, 362, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 664, 67, 67, 67, 67, 750, 751, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1057, 1058, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 67, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 902, 97, 97, 97, 97, 67, 67, 1051, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1302, 0, 0, 0, 1308, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1139, 97, 97, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 1161, 97, 97, 97, 97, 97, 1166, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 67, 67, 67, 67, 1257, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1305, 0, 0, 97, 97, 1337, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1630, 97, 67, 1474, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2380062, 2171166, 2171166, 97, 1529, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 45, 45, 67, 67, 67, 67, 1707, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1891, 1739, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 1200, 45, 45, 45, 45, 97, 97, 1894, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 45, 45, 45, 67, 67, 1965, 67, 1967, 67, 67, 67, 97, 97, 97, 97, 0, 1976, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 97, 97, 1979, 0, 0, 97, 1982, 97, 97, 97, 1986, 45, 45, 45, 45, 45, 735, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 2000, 97, 97, 97, 2002, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1798, 97, 97, 97, 45, 45, 45, 2034, 67, 67, 67, 67, 97, 0, 0, 2040, 97, 97, 97, 97, 45, 45, 45, 45, 1752, 45, 45, 45, 1753, 1754, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 45, 45, 438, 45, 45, 45, 45, 45, 445, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1430, 67, 67, 67, 67, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 531, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1096, 97, 97, 97, 621, 97, 97, 97, 97, 97, 628, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 356, 28, 28, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 45, 942, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 708, 45, 45, 45, 45, 763, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 809, 810, 67, 67, 67, 67, 783, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1303, 0, 0, 0, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 45, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 67, 67, 67, 67, 1027, 67, 67, 67, 67, 1032, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 0, 25403, 0, 66365, 0, 0, 1097, 1064, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 67, 1098, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 331, 97, 97, 97, 97, 1158, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 1309, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1374, 97, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1240, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1252, 67, 97, 97, 97, 1635, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1800, 97, 45, 45, 45, 97, 97, 1793, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1743, 45, 45, 45, 1746, 45, 0, 97, 97, 97, 97, 97, 1851, 97, 45, 45, 45, 45, 1856, 45, 45, 45, 45, 1864, 45, 45, 67, 67, 1869, 67, 67, 67, 67, 1874, 67, 0, 97, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 45, 67, 211, 67, 67, 67, 67, 67, 67, 240, 67, 67, 67, 67, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 67, 67, 268, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 290, 97, 97, 97, 305, 97, 97, 319, 97, 97, 97, 330, 97, 97, 18, 640, 139621, 0, 641, 0, 0, 0, 0, 364, 0, 643, 367, 41606, 97, 97, 348, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 395, 45, 45, 45, 400, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 45, 972, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 745, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1086, 25403, 1090, 66365, 1094, 0, 0, 97, 843, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 1121, 97, 97, 97, 97, 1126, 97, 97, 97, 97, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1400, 45, 67, 67, 67, 1011, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 1304, 0, 0, 0, 1190, 45, 45, 1193, 1194, 45, 45, 45, 45, 45, 1199, 45, 1201, 45, 45, 45, 45, 1911, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 67, 67, 45, 1205, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1217, 45, 45, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 1229, 45, 45, 45, 1388, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1574, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 1254, 67, 67, 67, 67, 67, 1259, 67, 1261, 67, 67, 67, 67, 1265, 67, 67, 67, 67, 67, 67, 1708, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 1289, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 1087, 25403, 1091, 66365, 1095, 0, 0, 97, 97, 97, 97, 1339, 97, 1341, 97, 97, 97, 97, 1345, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 573, 97, 97, 97, 97, 97, 97, 1717, 97, 0, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1329, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 97, 97, 97, 1365, 97, 97, 97, 97, 1369, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1399, 45, 45, 45, 1413, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1669, 45, 1422, 45, 45, 1425, 45, 45, 1428, 45, 1429, 67, 67, 67, 67, 67, 67, 67, 67, 1468, 67, 67, 67, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 539, 67, 67, 1475, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 2170880, 2170880, 2170880, 2416640, 97, 97, 1530, 97, 0, 45, 45, 1534, 45, 45, 45, 45, 45, 45, 45, 45, 1956, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 67, 67, 1601, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 67, 1632, 97, 1634, 0, 97, 97, 97, 1640, 97, 97, 97, 1643, 97, 97, 1645, 97, 97, 97, 97, 97, 912, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1660, 1661, 45, 45, 45, 45, 1665, 1666, 45, 45, 45, 45, 45, 1670, 1692, 1693, 67, 67, 67, 67, 67, 1697, 67, 67, 67, 67, 67, 67, 67, 1702, 97, 97, 1714, 1715, 97, 97, 97, 97, 0, 1721, 1722, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 97, 97, 1362, 1726, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 1734, 97, 97, 97, 97, 97, 848, 849, 97, 97, 97, 97, 856, 97, 97, 97, 97, 97, 354, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 45, 45, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1681, 45, 0, 1846, 97, 97, 97, 97, 97, 97, 45, 45, 1854, 45, 45, 45, 45, 1859, 67, 67, 67, 1879, 67, 67, 97, 97, 1884, 97, 97, 0, 0, 0, 97, 97, 97, 1105, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 1347, 97, 1892, 97, 0, 0, 0, 97, 97, 97, 1900, 97, 97, 45, 45, 45, 45, 45, 997, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1002, 45, 45, 1005, 1006, 45, 67, 67, 67, 67, 67, 1926, 67, 67, 1928, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1737, 97, 0, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1944, 97, 97, 1946, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 190, 45, 45, 45, 152, 155, 45, 163, 45, 45, 177, 179, 182, 45, 45, 45, 193, 197, 45, 45, 45, 1672, 45, 45, 45, 45, 45, 1677, 45, 1679, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 67, 260, 264, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 295, 299, 302, 97, 310, 97, 97, 324, 326, 329, 97, 97, 97, 0, 97, 97, 1639, 0, 1641, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 97, 97, 97, 1523, 97, 97, 97, 97, 97, 97, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 97, 97, 312, 97, 97, 97, 97, 97, 97, 97, 97, 1123, 97, 97, 97, 97, 97, 97, 97, 340, 344, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 373, 375, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 435, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1410, 45, 45, 45, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 67, 67, 67, 67, 1969, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 0, 97, 2064, 2065, 0, 2066, 45, 521, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 465, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1933, 0, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 18, 640, 139621, 358, 641, 0, 0, 0, 0, 364, 0, 0, 367, 0, 618, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 97, 97, 881, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 569, 97, 97, 97, 97, 97, 369, 0, 45, 652, 45, 45, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1432, 67, 67, 67, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 67, 0, 1305, 0, 1311, 0, 1317, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 1724, 97, 97, 97, 777, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 535, 67, 67, 67, 67, 67, 67, 67, 814, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 837, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 97, 97, 97, 0, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1168, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 97, 97, 0, 1637, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1801, 45, 45, 97, 875, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1151, 1152, 97, 97, 97, 67, 67, 67, 1040, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 790, 67, 67, 67, 1180, 0, 649, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 200, 45, 45, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 67, 67, 67, 0, 0, 0, 1481, 0, 1094, 0, 0, 97, 1483, 97, 97, 97, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 1633, 97, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1381, 0, 0, 45, 45, 45, 45, 97, 97, 1727, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 636, 45, 45, 1760, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 67, 67, 1299, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1616, 97, 97, 1803, 45, 45, 45, 45, 1807, 45, 45, 45, 45, 45, 1813, 45, 45, 45, 67, 67, 1684, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 822, 67, 67, 37689, 544, 67, 67, 1818, 67, 67, 67, 67, 1822, 67, 67, 67, 67, 67, 1828, 67, 67, 67, 67, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2012, 2013, 45, 45, 67, 67, 67, 2018, 2019, 67, 67, 97, 67, 97, 97, 97, 1833, 97, 97, 0, 0, 97, 97, 1840, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 1733, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 1849, 97, 97, 97, 45, 45, 45, 45, 45, 1857, 45, 45, 45, 1910, 45, 1912, 45, 45, 1914, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 67, 1020, 67, 45, 1861, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1446, 67, 67, 67, 67, 67, 1876, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1890, 97, 97, 97, 97, 97, 1134, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 97, 97, 97, 580, 1935, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1906, 45, 67, 67, 67, 67, 2048, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 0, 0, 925, 41606, 0, 0, 0, 931, 45, 45, 45, 45, 45, 45, 1674, 45, 1676, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1871, 67, 67, 67, 67, 0, 97, 97, 45, 67, 0, 97, 2060, 2061, 0, 2063, 45, 67, 0, 97, 45, 45, 156, 45, 45, 45, 45, 45, 45, 45, 45, 45, 192, 45, 45, 45, 45, 1673, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 429, 45, 45, 45, 45, 67, 67, 67, 269, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 349, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 374, 45, 45, 67, 67, 213, 217, 67, 67, 67, 67, 67, 242, 67, 247, 67, 253, 45, 45, 698, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 399, 45, 45, 0, 0, 0, 0, 925, 41606, 0, 929, 0, 0, 45, 45, 45, 45, 45, 45, 1391, 45, 45, 1395, 45, 45, 45, 45, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 436, 45, 67, 67, 67, 67, 1041, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1776, 67, 67, 97, 97, 97, 1099, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 888, 97, 97, 97, 1131, 97, 97, 97, 97, 1135, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 97, 97, 883, 97, 97, 97, 97, 97, 97, 1310, 0, 0, 0, 1316, 0, 0, 0, 0, 1100, 0, 0, 0, 97, 97, 97, 97, 97, 1107, 97, 97, 97, 97, 97, 97, 97, 97, 1343, 97, 97, 97, 97, 97, 97, 1348, 0, 0, 1317, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1868, 67, 1870, 67, 67, 67, 67, 67, 1817, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 823, 67, 37689, 544, 67, 97, 1832, 97, 97, 1834, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 0, 1732, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1177, 0, 0, 925, 0, 0, 0, 0, 97, 97, 97, 97, 0, 0, 1941, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1991, 1992, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1998, 134, 0, 0, 0, 37, 110630, 0, 0, 0, 114730, 106539, 41098, 45, 45, 45, 45, 941, 45, 45, 944, 45, 45, 45, 45, 45, 45, 952, 45, 45, 207, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 67, 67, 67, 37689, 544, 369, 650, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1682, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 835, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1725, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 1036, 67, 67, 67, 265, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 97, 296, 97, 97, 97, 97, 314, 97, 97, 97, 97, 332, 334, 97, 97, 97, 97, 97, 1146, 1147, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 97, 97, 345, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 372, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 45, 45, 404, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 451, 452, 45, 45, 45, 67, 1683, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 67, 67, 490, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 1450, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 537, 538, 67, 67, 67, 67, 67, 506, 67, 67, 508, 67, 67, 511, 67, 67, 67, 67, 0, 1476, 0, 0, 0, 0, 0, 1478, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1484, 97, 97, 97, 97, 97, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1499, 97, 97, 97, 97, 97, 97, 97, 97, 97, 587, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 634, 635, 97, 97, 97, 97, 97, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 97, 97, 97, 369, 0, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 1001, 45, 45, 45, 45, 45, 45, 45, 45, 715, 45, 45, 45, 720, 45, 45, 45, 45, 45, 45, 45, 45, 728, 25403, 546, 70179, 0, 0, 66365, 66365, 552, 0, 97, 97, 97, 97, 97, 840, 97, 97, 97, 97, 97, 1174, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 0, 0, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 97, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 680, 45, 968, 45, 970, 45, 973, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 962, 45, 45, 45, 45, 45, 979, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 688, 45, 45, 45, 45, 45, 45, 45, 1007, 1008, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 1044, 67, 1046, 67, 1049, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 808, 67, 67, 0, 0, 0, 1102, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 97, 97, 97, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 1138, 97, 1140, 97, 1143, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 45, 1191, 45, 45, 45, 45, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 991, 45, 67, 67, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1048, 67, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 97, 1386, 45, 1387, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 455, 45, 457, 45, 45, 1424, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1433, 67, 1434, 67, 67, 67, 67, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 1593, 67, 67, 45, 45, 1805, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1814, 45, 45, 1816, 67, 67, 67, 67, 1820, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1829, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 821, 67, 67, 67, 37689, 544, 67, 1831, 97, 97, 97, 97, 1835, 0, 0, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1850, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 961, 45, 45, 45, 45, 965, 45, 967, 1907, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1920, 0, 1936, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 28672, 97, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2054, 97, 97, 291, 97, 97, 97, 97, 97, 97, 320, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 926, 1179, 0, 45, 377, 45, 45, 45, 381, 45, 45, 392, 45, 45, 396, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 45, 45, 45, 67, 67, 67, 67, 463, 67, 67, 67, 467, 67, 67, 478, 67, 67, 482, 67, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 1472, 67, 502, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1460, 67, 97, 97, 97, 97, 560, 97, 97, 97, 564, 97, 97, 575, 97, 97, 579, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 930, 97, 599, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 872, 97, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1758, 0, 362, 0, 0, 925, 41606, 0, 0, 0, 0, 45, 45, 934, 45, 45, 45, 164, 168, 174, 178, 45, 45, 45, 45, 45, 194, 45, 45, 45, 165, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 45, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1060, 67, 67, 67, 67, 67, 67, 1052, 1053, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1063, 97, 1157, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1167, 97, 97, 97, 97, 97, 1379, 97, 97, 97, 0, 0, 0, 45, 1383, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 1812, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1471, 67, 45, 1402, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 67, 1462, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 37689, 544, 97, 1517, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 1636, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 1705, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1842, 0, 0, 1779, 97, 97, 97, 1782, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1789, 97, 97, 0, 0, 0, 97, 1847, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 45, 737, 738, 67, 740, 67, 741, 67, 743, 67, 67, 67, 67, 67, 67, 1968, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 45, 67, 0, 97, 45, 67, 2062, 97, 45, 67, 0, 97, 45, 67, 67, 97, 97, 2001, 97, 0, 0, 2004, 97, 97, 0, 97, 97, 97, 97, 1797, 97, 97, 97, 97, 97, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 97, 292, 97, 97, 97, 97, 311, 315, 321, 325, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1330, 97, 97, 1333, 1334, 97, 341, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 0, 363, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 416, 45, 376, 45, 45, 45, 45, 382, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 45, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 414, 45, 45, 45, 418, 67, 67, 67, 462, 67, 67, 67, 67, 468, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 1604, 67, 67, 67, 67, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 1067, 67, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 274, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 67, 67, 504, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 517, 519, 541, 67, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 554, 97, 97, 97, 559, 97, 97, 97, 97, 565, 97, 97, 97, 97, 97, 97, 97, 1718, 0, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 906, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 597, 97, 97, 97, 97, 97, 1520, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 45, 1656, 45, 45, 45, 97, 97, 601, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 614, 616, 638, 97, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 369, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 661, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1815, 45, 67, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 678, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 977, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 697, 67, 67, 748, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1274, 67, 67, 67, 67, 67, 67, 67, 67, 765, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 780, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1777, 67, 97, 97, 97, 97, 97, 97, 846, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 97, 1742, 45, 45, 45, 45, 45, 45, 45, 1747, 97, 97, 97, 863, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 1178, 925, 0, 1179, 0, 97, 97, 97, 878, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 12288, 0, 925, 0, 1179, 0, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 954, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 963, 45, 45, 966, 45, 45, 157, 45, 45, 171, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 1022, 67, 67, 1026, 67, 67, 67, 1030, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 1605, 67, 67, 67, 1608, 67, 67, 67, 1039, 67, 67, 1042, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 67, 0, 1100, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 97, 97, 97, 97, 1116, 97, 97, 1120, 97, 97, 97, 1124, 97, 97, 97, 97, 97, 97, 562, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1133, 97, 97, 1136, 97, 97, 97, 97, 97, 97, 97, 97, 915, 917, 97, 97, 97, 97, 97, 0, 97, 1170, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 925, 0, 0, 0, 0, 0, 41606, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1993, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 1278, 67, 0, 0, 0, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1189, 1204, 45, 45, 45, 1207, 45, 45, 1209, 45, 1210, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 45, 689, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 805, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1249, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1300, 0, 0, 0, 0, 0, 1267, 67, 67, 1269, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 97, 1349, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 97, 0, 1980, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 677, 45, 45, 45, 45, 1401, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 953, 67, 1437, 67, 1440, 67, 67, 67, 67, 1445, 67, 67, 67, 1448, 67, 67, 67, 67, 67, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 67, 67, 67, 1473, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1320, 0, 834, 97, 97, 97, 97, 1490, 97, 1493, 97, 97, 97, 97, 1498, 97, 97, 97, 1501, 97, 97, 97, 0, 97, 1638, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 916, 97, 97, 97, 97, 97, 97, 0, 1528, 97, 97, 97, 0, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1932, 0, 0, 1555, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1567, 45, 45, 158, 45, 45, 172, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 67, 212, 67, 67, 67, 67, 231, 235, 241, 245, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 472, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1651, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 45, 45, 67, 1704, 67, 1706, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1841, 97, 0, 1844, 97, 97, 97, 97, 1716, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1385, 1748, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1757, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 97, 97, 1780, 97, 97, 97, 0, 0, 1786, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1730, 0, 97, 97, 97, 97, 97, 1736, 97, 1738, 67, 97, 97, 97, 97, 97, 97, 0, 1838, 97, 97, 97, 97, 97, 0, 0, 97, 1729, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 1165, 97, 97, 97, 45, 1950, 45, 45, 45, 45, 45, 45, 45, 45, 1958, 67, 67, 67, 1962, 67, 67, 67, 67, 67, 1246, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1710, 97, 97, 97, 1999, 67, 97, 97, 97, 97, 0, 2003, 97, 97, 97, 0, 97, 97, 2008, 2009, 45, 67, 67, 67, 67, 0, 0, 97, 97, 97, 97, 45, 2052, 67, 2053, 0, 0, 0, 0, 925, 41606, 0, 0, 930, 0, 45, 45, 45, 45, 45, 45, 1392, 45, 1394, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 1565, 45, 45, 45, 1568, 0, 97, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 28672, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 679, 45, 45, 67, 67, 266, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 346, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 0, 362, 0, 364, 0, 367, 41098, 369, 140, 371, 45, 45, 45, 379, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 449, 45, 45, 45, 45, 45, 67, 67, 542, 37139, 37139, 24853, 24853, 0, 70179, 0, 0, 0, 65820, 65820, 369, 287, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 97, 0, 1794, 1795, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 97, 639, 18, 0, 139621, 0, 0, 0, 0, 0, 0, 364, 0, 0, 367, 41606, 45, 731, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 251, 67, 67, 67, 67, 67, 798, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1073, 67, 67, 67, 860, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 873, 0, 0, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 921, 97, 0, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1250, 67, 67, 1253, 0, 0, 1312, 0, 0, 0, 1318, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 97, 1155, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1141, 97, 97, 67, 67, 1439, 67, 1441, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 67, 97, 97, 1492, 97, 1494, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 97, 67, 67, 67, 2037, 67, 97, 0, 0, 97, 97, 97, 2043, 97, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 232, 67, 67, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1975, 0, 0, 97, 874, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1142, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 65, 86, 117, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 63, 84, 115, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 61, 82, 113, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 59, 80, 111, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 57, 78, 109, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 55, 76, 107, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 53, 74, 105, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 51, 72, 103, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 49, 70, 101, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 47, 68, 99, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 45, 67, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 213085, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 0, 0, 44, 0, 0, 32863, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 41, 41, 41, 0, 0, 1138688, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 0, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 89, 53264, 18, 18, 49172, 0, 57366, 0, 24, 24, 24, 0, 127, 127, 127, 127, 102432, 67, 262, 67, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 342, 97, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 360, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 45, 45, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1292, 67, 67, 1294, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1615, 97, 97, 97, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 66, 87, 118, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 64, 85, 116, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 62, 83, 114, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 60, 81, 112, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 58, 79, 110, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 56, 77, 108, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 54, 75, 106, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 52, 73, 104, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 50, 71, 102, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 48, 69, 100, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 37, 110630, 114730, 106539, 46, 67, 98, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 233472, 53264, 18, 49172, 57366, 24, 8192, 28, 102432, 0, 110630, 114730, 106539, 0, 0, 69724, 53264, 18, 18, 49172, 0, 57366, 262144, 24, 24, 24, 0, 28, 28, 28, 28, 102432, 45, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 28, 139621, 359, 0, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 1389, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 45, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1449, 67, 67, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1154, 97, 0, 0, 0, 0, 925, 41606, 927, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 67, 67, 45, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 951, 45, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 45, 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1488, 67, 67, 267, 67, 67, 67, 67, 0, 37139, 24853, 0, 0, 0, 0, 41098, 65820, 97, 347, 97, 97, 97, 97, 0, 53264, 0, 18, 18, 24, 24, 0, 28, 28, 139621, 0, 361, 0, 0, 364, 0, 367, 41098, 369, 140, 45, 45, 45, 45, 734, 45, 45, 45, 67, 67, 67, 67, 67, 742, 67, 67, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1214, 45, 45, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1361, 97, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 45, 45, 0, 0, 0, 0, 2220032, 0, 0, 1130496, 0, 0, 0, 0, 2170880, 2171020, 2170880, 2170880, 18, 0, 0, 131072, 0, 0, 0, 90112, 0, 2220032, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 1485, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1390, 45, 1393, 45, 45, 45, 45, 1398, 45, 45, 45, 2170880, 2171167, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2576384, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 0, 0, 0, 0, 0, 2174976, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 2721252, 2744320, 2170880, 2170880, 2170880, 2834432, 2840040, 2170880, 2908160, 2170880, 2170880, 2936832, 2170880, 2170880, 2985984, 2170880, 2994176, 2170880, 2170880, 3014656, 2170880, 3059712, 3076096, 3088384, 2170880, 2170880, 2170880, 2170880, 0, 0, 0, 0, 2220032, 0, 0, 0, 1142784, 0, 0, 0, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3215360, 2215936, 2215936, 2215936, 2215936, 2215936, 2437120, 2215936, 2215936, 2215936, 3117056, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 2215936, 0, 543, 0, 545, 0, 0, 2183168, 0, 0, 831, 0, 2170880, 2170880, 2170880, 2400256, 2170880, 2170880, 2170880, 2170880, 3031040, 2170880, 3055616, 2170880, 2170880, 2170880, 2170880, 3092480, 2170880, 2170880, 3125248, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 2170880, 3198976, 2170880, 0, 0, 0, 0, 0, 0, 67, 67, 37139, 37139, 24853, 24853, 0, 0, 0, 0, 0, 65820, 65820, 0, 287, 97, 97, 97, 97, 97, 1783, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1791, 0, 0, 546, 70179, 0, 0, 0, 0, 552, 0, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 97, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 147456, 0, 0, 147456, 0, 0, 0, 0, 925, 41606, 0, 928, 0, 0, 45, 45, 45, 45, 45, 45, 998, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 1564, 45, 45, 45, 45, 0, 2158592, 2158592, 0, 0, 0, 0, 2232320, 2232320, 2232320, 0, 2240512, 2240512, 2240512, 2240512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170880, 2170880, 2170880, 2416640\n];\n\nJSONiqTokenizer.EXPECTED =\n[ 291, 300, 304, 341, 315, 309, 305, 295, 319, 323, 327, 329, 296, 333, 337, 339, 342, 346, 350, 294, 356, 360, 312, 367, 352, 371, 363, 375, 379, 383, 387, 391, 395, 726, 399, 405, 518, 684, 405, 405, 405, 405, 808, 405, 405, 405, 512, 405, 405, 405, 431, 405, 405, 406, 405, 405, 404, 405, 405, 405, 405, 405, 405, 405, 908, 631, 410, 415, 405, 414, 419, 608, 405, 429, 602, 405, 435, 443, 405, 441, 641, 478, 405, 447, 451, 450, 456, 643, 461, 460, 762, 679, 465, 469, 741, 473, 477, 482, 486, 492, 932, 931, 523, 498, 504, 720, 405, 510, 596, 405, 516, 941, 580, 522, 929, 527, 590, 589, 897, 939, 534, 538, 547, 551, 555, 559, 563, 567, 571, 969, 575, 708, 690, 689, 579, 584, 634, 405, 594, 731, 405, 600, 882, 405, 606, 895, 786, 452, 612, 405, 615, 620, 876, 624, 628, 638, 647, 651, 655, 659, 663, 667, 676, 683, 688, 695, 694, 791, 405, 699, 437, 405, 706, 714, 405, 712, 825, 870, 405, 718, 724, 769, 768, 823, 730, 735, 745, 751, 422, 755, 759, 425, 766, 902, 810, 587, 775, 888, 887, 405, 773, 992, 405, 779, 962, 405, 785, 781, 986, 790, 795, 797, 506, 500, 499, 801, 805, 814, 820, 829, 833, 837, 841, 845, 849, 853, 857, 861, 616, 865, 869, 868, 488, 405, 874, 816, 405, 880, 738, 405, 886, 892, 543, 405, 901, 906, 913, 912, 918, 494, 541, 922, 926, 936, 945, 949, 953, 957, 530, 966, 973, 960, 702, 701, 405, 979, 981, 405, 985, 747, 405, 990, 998, 914, 405, 996, 1004, 672, 975, 974, 1014, 1002, 1008, 670, 1012, 405, 405, 405, 405, 405, 401, 1018, 1022, 1026, 1106, 1071, 1111, 1111, 1111, 1082, 1145, 1030, 1101, 1034, 1038, 1106, 1106, 1106, 1106, 1046, 1206, 1052, 1106, 1072, 1111, 1111, 1042, 1134, 1065, 1111, 1112, 1056, 1160, 1207, 1062, 1204, 1208, 1069, 1106, 1106, 1106, 1076, 1111, 1207, 1161, 1122, 1205, 1064, 1094, 1106, 1106, 1107, 1111, 1111, 1111, 1078, 1086, 1207, 1092, 1098, 1046, 1058, 1106, 1106, 1110, 1111, 1111, 1116, 1120, 1161, 1126, 1202, 1104, 1106, 1145, 1146, 1129, 1138, 1088, 1151, 1048, 1157, 1153, 1132, 1141, 1165, 1107, 1111, 1172, 1179, 1109, 1183, 1175, 1143, 1147, 1187, 1108, 1191, 1195, 1144, 1199, 1168, 1212, 1216, 1220, 1224, 1228, 1232, 1236, 1557, 1247, 1241, 1241, 1038, 1434, 1241, 1241, 1241, 1241, 1254, 1275, 1617, 1241, 1280, 1287, 1241, 1241, 1241, 1287, 1241, 2114, 1291, 1241, 1243, 1241, 2049, 1824, 2094, 2095, 1520, 1309, 1241, 1241, 1302, 1241, 1321, 1311, 1241, 1241, 1313, 1778, 1325, 1336, 1241, 1241, 1325, 1330, 1353, 1241, 1241, 1695, 1354, 1241, 1241, 1241, 1294, 1686, 1331, 1241, 1696, 1368, 1241, 1338, 1370, 1241, 1392, 1399, 1364, 2017, 1406, 2016, 1405, 1716, 1406, 1407, 1422, 1417, 1421, 1241, 1241, 1241, 1349, 1426, 1241, 1774, 1756, 1241, 1773, 1241, 1241, 1345, 1964, 1812, 1432, 1241, 1241, 1345, 1993, 1459, 1241, 1241, 1241, 1395, 1848, 1767, 1465, 1241, 1241, 1394, 1847, 1242, 1477, 1241, 1241, 1428, 1241, 1445, 1492, 1241, 1241, 1438, 1241, 1499, 1241, 1241, 1241, 1455, 1241, 1818, 1448, 1241, 1250, 1241, 2026, 1623, 1449, 1241, 1612, 1616, 1241, 1614, 1241, 1257, 1241, 1241, 1985, 1292, 1586, 1512, 1241, 1517, 2050, 1526, 1674, 1519, 1524, 1647, 2051, 1532, 1537, 1551, 1544, 1550, 1555, 1561, 1571, 1578, 1584, 1590, 1591, 1653, 1595, 1602, 1606, 1610, 1634, 1628, 1640, 1633, 1645, 1241, 1241, 1241, 1469, 1241, 1970, 1651, 1241, 1270, 1241, 1241, 1819, 1449, 1241, 1293, 1664, 1241, 1241, 1481, 1485, 1574, 1672, 1241, 1241, 1513, 1317, 1487, 1684, 1241, 1241, 1533, 1299, 1694, 1241, 1241, 1295, 1241, 1241, 1241, 1546, 1700, 1241, 1241, 1707, 1241, 1713, 1241, 1849, 1715, 1241, 1720, 1241, 1276, 1267, 1241, 1241, 2107, 1657, 1864, 1241, 1881, 1241, 1326, 1292, 1241, 1685, 1358, 1724, 1338, 1241, 1363, 1362, 1342, 1340, 1361, 1339, 1833, 1372, 1360, 1833, 1833, 1342, 1343, 1835, 1341, 1731, 1738, 1344, 1241, 1745, 1241, 1379, 1241, 1241, 2092, 1241, 1388, 1761, 1754, 1241, 1386, 1241, 1400, 1760, 1241, 1241, 1241, 1598, 1734, 1241, 1241, 1241, 1635, 1645, 1241, 1780, 1766, 1241, 1241, 1332, 1771, 1241, 1241, 1629, 2079, 1241, 1242, 1784, 1241, 1241, 1680, 1639, 2063, 1790, 1241, 1241, 1741, 1241, 1241, 1800, 1241, 1241, 1762, 1473, 1241, 1806, 1241, 1241, 1786, 1240, 1709, 1241, 1241, 1241, 1668, 1811, 1241, 1940, 1241, 1401, 1974, 1241, 1408, 1413, 1382, 1241, 1816, 1241, 1241, 1802, 2086, 1811, 1241, 1817, 1945, 1823, 2095, 2095, 2047, 2094, 2046, 2080, 1241, 1409, 1312, 1376, 2096, 2048, 1241, 1241, 1807, 1241, 1241, 1241, 2035, 1241, 1241, 1828, 1241, 2057, 2061, 1241, 1241, 1843, 1241, 2059, 1241, 1241, 1241, 1690, 1847, 1241, 1241, 1241, 1703, 2102, 1848, 1241, 1241, 1853, 1292, 1848, 1241, 2016, 1857, 1241, 2002, 1868, 1241, 1436, 1241, 1241, 1271, 1305, 1241, 1874, 1241, 1241, 1884, 2037, 1892, 1241, 1890, 1241, 1461, 1241, 1241, 1795, 1241, 1241, 1891, 1241, 1878, 1241, 1888, 1241, 1888, 1905, 1896, 2087, 1912, 1903, 1241, 1911, 1906, 1916, 1905, 2027, 1863, 1925, 2088, 1859, 1861, 1922, 1927, 1931, 1935, 1494, 1241, 1241, 1918, 1907, 1939, 1917, 1944, 1949, 1241, 1241, 1451, 1955, 1241, 1241, 1241, 1796, 1727, 2061, 1241, 1241, 1899, 1241, 1660, 1968, 1241, 1241, 1951, 1678, 1978, 1241, 1241, 1241, 1839, 1241, 1241, 1984, 1982, 1241, 1488, 1241, 1241, 1624, 1450, 1989, 1241, 1241, 1241, 1870, 1995, 1292, 1241, 1241, 1958, 1261, 1241, 1996, 1241, 1241, 1241, 2039, 2008, 1241, 1241, 1750, 2000, 1241, 1256, 2001, 1960, 1241, 1564, 1241, 1504, 1241, 1241, 1442, 1241, 1241, 1564, 1528, 1263, 1241, 1508, 1241, 1241, 1468, 1498, 2006, 1540, 2015, 1539, 2014, 1748, 2013, 1539, 1831, 2014, 2012, 1500, 1567, 2022, 2021, 1241, 1580, 1241, 1241, 2033, 2037, 1791, 2045, 2031, 1241, 1621, 1241, 1641, 2044, 1241, 1241, 1241, 2093, 1241, 1241, 2055, 1241, 1241, 2067, 1241, 1283, 1241, 1241, 1241, 2101, 2071, 1241, 1241, 1241, 2073, 1848, 2040, 1241, 1241, 1241, 2077, 1241, 1241, 2106, 1241, 1241, 2084, 1241, 2111, 1241, 1241, 1381, 1380, 1241, 1241, 1241, 2100, 1241, 2129, 2118, 2122, 2126, 2197, 2133, 3010, 2825, 2145, 2698, 2156, 2226, 2160, 2161, 2165, 2174, 2293, 2194, 2630, 2201, 2203, 2152, 3019, 2226, 2263, 2209, 2213, 2218, 2269, 2292, 2269, 2269, 2184, 2226, 2238, 2148, 2151, 3017, 2245, 2214, 2269, 2269, 2185, 2226, 2292, 2269, 2291, 2269, 2269, 2269, 2292, 2205, 3019, 2226, 2226, 2160, 2160, 2160, 2261, 2160, 2160, 2160, 2262, 2276, 2160, 2160, 2277, 2216, 2283, 2216, 2269, 2269, 2268, 2269, 2267, 2269, 2269, 2269, 2271, 2568, 2292, 2269, 2293, 2269, 2182, 2190, 2269, 2186, 2226, 2226, 2226, 2226, 2227, 2160, 2160, 2160, 2160, 2263, 2160, 2275, 2277, 2282, 2215, 2217, 2269, 2269, 2291, 2269, 2269, 2293, 2291, 2269, 2220, 2269, 2295, 2294, 2269, 2269, 2305, 2233, 2262, 2278, 2218, 2269, 2234, 2226, 2226, 2228, 2160, 2160, 2160, 2289, 2220, 2294, 2294, 2269, 2269, 2304, 2269, 2160, 2160, 2287, 2269, 2269, 2305, 2269, 2269, 2312, 2269, 2269, 2225, 2226, 2160, 2287, 2289, 2219, 2304, 2295, 2314, 2234, 2226, 2314, 2269, 2226, 2226, 2160, 2288, 2219, 2222, 2304, 2296, 2269, 2224, 2160, 2160, 2269, 2302, 2294, 2314, 2224, 2226, 2288, 2220, 2294, 2269, 2290, 2269, 2269, 2293, 2269, 2269, 2269, 2269, 2270, 2221, 2313, 2225, 2227, 2160, 2300, 2269, 2225, 2261, 2309, 2234, 2229, 2223, 2318, 2318, 2318, 2328, 2336, 2340, 2344, 2350, 2637, 2712, 2358, 2362, 2372, 2135, 2378, 2398, 2135, 2135, 2135, 2135, 2136, 2417, 2241, 2135, 2378, 2135, 2135, 2980, 2984, 2135, 3006, 2135, 2135, 2135, 2945, 2931, 2425, 2400, 2135, 2135, 2135, 2954, 2135, 2481, 2433, 2135, 2135, 2988, 2824, 2135, 2135, 2482, 2434, 2135, 2135, 2440, 2445, 2452, 2135, 2135, 2998, 3002, 2961, 2441, 2446, 2453, 2463, 2974, 2135, 2135, 2135, 2140, 2642, 2709, 2459, 2470, 2465, 2135, 2135, 3005, 2135, 2135, 2987, 2823, 2458, 2469, 2464, 2975, 2135, 2135, 2135, 2353, 2488, 2447, 2324, 2974, 2135, 2409, 2459, 2448, 2135, 2961, 2487, 2446, 2476, 2323, 2973, 2135, 2135, 2135, 2354, 2476, 2974, 2135, 2135, 2135, 2957, 2135, 2135, 2960, 2135, 2135, 2135, 2363, 2409, 2459, 2474, 2465, 2487, 2571, 2973, 2135, 2135, 2168, 2973, 2135, 2135, 2135, 2959, 2135, 2135, 2135, 2506, 2135, 2957, 2488, 2170, 2135, 2135, 2135, 2960, 2135, 2818, 2493, 2135, 2135, 3033, 2135, 2135, 2135, 2934, 2819, 2494, 2135, 2135, 2135, 2976, 2780, 2499, 2135, 2135, 2135, 3000, 2968, 2135, 2935, 2135, 2135, 2135, 2364, 2507, 2135, 2135, 2934, 2135, 2135, 2780, 2492, 2507, 2135, 2135, 2506, 2780, 2135, 2135, 2782, 2780, 2135, 2782, 2135, 2783, 2374, 2514, 2135, 2135, 2135, 3007, 2530, 2974, 2135, 2135, 2135, 3008, 2135, 2135, 2134, 2135, 2526, 2531, 2975, 2135, 2135, 3042, 2581, 2575, 2956, 2135, 2135, 2135, 2394, 2135, 2508, 2535, 2840, 2844, 2495, 2135, 2135, 2136, 2684, 2537, 2842, 2846, 2135, 2136, 2561, 2581, 2551, 2536, 2841, 2845, 2975, 3043, 2582, 2843, 2555, 2135, 3040, 3044, 2538, 2844, 2975, 2135, 2135, 2253, 2644, 2672, 2542, 2554, 2135, 2135, 2346, 2873, 2551, 2555, 2135, 2135, 2135, 2381, 2559, 2565, 2538, 2553, 2135, 2560, 2914, 2576, 2590, 2135, 2135, 2135, 2408, 2136, 2596, 2624, 2135, 2135, 2135, 2409, 2135, 2618, 2597, 3008, 2135, 2135, 2380, 2956, 2601, 2135, 2135, 2135, 2410, 2620, 2624, 2135, 2136, 2383, 2135, 2135, 2783, 2623, 2135, 2135, 2393, 2888, 2136, 2621, 3008, 2135, 2618, 2618, 2622, 2135, 2135, 2405, 2414, 2619, 2384, 2624, 2135, 2136, 2950, 2135, 2138, 2135, 2139, 2135, 2604, 2623, 2135, 2140, 2878, 2665, 2957, 2622, 2135, 2135, 2428, 2762, 2606, 2612, 2135, 2135, 2501, 2586, 2604, 3038, 2135, 2604, 3036, 2387, 2958, 2386, 2135, 2141, 2135, 2421, 2387, 2385, 2135, 2385, 2384, 2384, 2135, 2386, 2628, 2384, 2135, 2135, 2501, 2596, 2591, 2135, 2135, 2135, 2400, 2135, 2634, 2135, 2135, 2559, 2580, 2575, 2648, 2135, 2135, 2135, 2429, 2649, 2135, 2135, 2135, 2435, 2654, 2658, 2135, 2135, 2135, 2436, 2649, 2178, 2659, 2135, 2135, 2595, 2601, 2669, 2677, 2135, 2135, 2616, 2957, 2879, 2665, 2691, 2135, 2363, 2367, 2900, 2878, 2664, 2690, 2975, 2877, 2643, 2670, 2974, 2671, 2975, 2135, 2135, 2619, 2608, 2669, 2673, 2135, 2135, 2653, 2177, 2672, 2135, 2135, 2135, 2486, 2168, 2251, 2255, 2695, 2974, 2709, 2135, 2135, 2135, 2487, 2169, 2399, 2716, 2975, 2135, 2363, 2770, 2776, 2640, 2717, 2135, 2135, 2729, 2135, 2135, 2641, 2718, 2135, 2135, 2135, 2505, 2135, 2640, 2257, 2974, 2135, 2727, 2975, 2135, 2365, 2332, 2895, 2957, 2135, 2959, 2135, 2365, 2749, 2754, 2959, 2958, 2958, 2135, 2380, 2793, 2799, 2135, 2735, 2738, 2135, 2381, 2135, 2135, 2940, 2974, 2135, 2744, 2135, 2135, 2739, 2519, 2976, 2745, 2135, 2135, 2135, 2509, 2755, 2135, 2135, 2135, 2510, 2772, 2778, 2135, 2135, 2740, 2520, 2135, 2771, 2777, 2135, 2135, 2759, 2750, 2792, 2798, 2135, 2135, 2781, 2392, 2779, 2135, 2135, 2135, 2521, 2135, 2679, 2248, 2135, 2135, 2681, 2480, 2135, 2135, 2786, 3000, 2135, 2679, 2683, 2135, 2135, 2416, 2135, 2135, 2135, 2525, 2135, 2730, 2135, 2135, 2135, 2560, 2581, 2135, 2805, 2135, 2135, 2804, 2962, 2832, 2974, 2135, 2382, 2135, 2135, 2958, 2135, 2135, 2960, 2135, 2829, 2833, 2975, 2961, 2965, 2969, 2973, 2968, 2972, 2135, 2135, 2135, 2641, 2135, 2515, 2966, 2970, 2851, 2478, 2135, 2135, 2808, 2135, 2809, 2135, 2135, 2135, 2722, 2852, 2479, 2135, 2135, 2815, 2135, 2135, 2766, 2853, 2480, 2135, 2857, 2479, 2135, 2388, 2723, 2135, 2364, 2331, 2894, 2858, 2480, 2135, 2135, 2850, 2478, 2135, 2135, 2135, 2806, 2864, 2135, 2399, 2256, 2974, 2865, 2135, 2135, 2862, 2135, 2135, 2135, 2685, 2807, 2865, 2135, 2135, 2807, 2863, 2135, 2135, 2135, 2686, 2884, 2807, 2135, 2809, 2807, 2135, 2135, 2807, 2806, 2705, 2810, 2808, 2700, 2869, 2702, 2702, 2702, 2704, 2883, 2135, 2135, 2135, 2730, 2884, 2135, 2135, 2135, 2731, 2321, 2546, 2135, 2135, 2876, 2255, 2889, 2322, 2547, 2135, 2401, 2135, 2135, 2135, 2949, 2367, 2893, 2544, 2973, 2906, 2973, 2135, 2135, 2877, 2663, 2368, 2901, 2907, 2974, 2366, 2899, 2905, 2972, 2920, 2974, 2135, 2135, 2911, 2900, 2920, 2363, 2913, 2918, 2465, 2941, 2975, 2135, 2135, 2924, 2928, 2974, 2945, 2931, 2135, 2135, 2135, 2765, 2136, 2955, 2135, 2135, 2939, 2931, 2380, 2135, 2135, 2380, 2135, 2135, 2135, 2780, 2507, 2137, 2135, 2137, 2135, 2139, 2135, 2806, 2810, 2135, 2135, 2135, 2992, 2135, 2135, 2962, 2966, 2970, 2974, 2135, 2135, 2787, 3014, 2135, 2521, 2993, 2135, 2135, 2135, 2803, 2135, 2135, 2135, 2618, 2607, 2997, 3001, 2135, 2135, 2963, 2967, 2971, 2975, 2135, 2135, 2791, 2797, 2135, 3009, 2999, 3003, 2787, 3001, 2135, 2135, 2964, 2968, 2785, 2999, 3003, 2135, 2135, 2135, 2804, 2785, 2999, 3004, 2135, 2135, 2135, 2807, 2135, 2135, 3023, 2135, 2135, 2135, 2811, 2135, 2135, 3027, 2135, 2135, 2135, 2837, 2968, 3028, 2135, 2135, 2135, 2875, 2135, 2784, 3029, 2135, 2408, 2457, 2446, 0, 14, 0, -2120220672, 1610612736, -2074083328, -2002780160, -2111830528, 1073872896, 1342177280, 1075807216, 4096, 16384, 2048, 8192, 0, 8192, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, -2145386496, 8388608, 1073741824, 0, 0x80000000, 0x80000000, 2097152, 2097152, 2097152, 536870912, 0, 0, 134217728, 33554432, 1536, 268435456, 268435456, 268435456, 268435456, 128, 256, 32, 0, 65536, 131072, 524288, 16777216, 268435456, 0x80000000, 1572864, 1835008, 640, 32768, 65536, 262144, 1048576, 2097152, 196608, 196800, 196608, 196608, 0, 131072, 131072, 131072, 196608, 196624, 196608, 196624, 196608, 196608, 128, 4096, 16384, 16384, 2048, 0, 4, 0, 0, 0x80000000, 2097152, 0, 1024, 32, 32, 0, 65536, 1572864, 1048576, 32768, 32768, 32768, 32768, 196608, 196608, 196608, 64, 64, 196608, 196608, 131072, 131072, 131072, 131072, 268435456, 268435456, 64, 196736, 196608, 196608, 196608, 131072, 196608, 196608, 16384, 4, 4, 4, 2, 32, 32, 65536, 1048576, 12582912, 1073741824, 0, 0, 2, 8, 16, 96, 2048, 32768, 0, 0, 131072, 268435456, 268435456, 268435456, 256, 256, 196608, 196672, 196608, 196608, 196608, 196608, 4, 0, 256, 256, 256, 256, 32, 32, 32768, 32, 32, 32, 32, 32768, 268435456, 268435456, 268435456, 196608, 196608, 196608, 196624, 196608, 196608, 196608, 16, 16, 16, 268435456, 196608, 64, 64, 64, 196608, 196608, 196608, 196672, 268435456, 64, 64, 196608, 196608, 16, 196608, 196608, 196608, 268435456, 64, 196608, 131072, 262144, 4194304, 25165824, 33554432, 134217728, 268435456, 268435456, 196608, 262152, 8, 256, 512, 3072, 16384, 200, -1073741816, 8392713, 40, 8392718, 520, 807404072, 40, 520, 100663304, 0, 0, -540651761, -540651761, 257589048, 0, 262144, 0, 0, 3, 8, 256, 0, 4, 6, 4100, 8388612, 0, 0, 0, 3, 4, 8, 256, 512, 1024, 0, 2097152, 0, 0, -537854471, -537854471, 0, 100663296, 0, 0, 1, 2, 0, 0, 0, 16384, 0, 0, 0, 96, 14336, 0, 0, 0, 7, 8, 234881024, 0, 0, 0, 8, 0, 0, 0, 0, 262144, 0, 0, 16, 64, 384, 512, 0, 1, 1, 0, 12582912, 0, 0, 0, 0, 33554432, 67108864, -606084144, -606084144, -606084138, 0, 0, 28, 32, 768, 1966080, -608174080, 0, 0, 0, 14, 35056, 16, 64, 896, 24576, 98304, 98304, 131072, 262144, 524288, 1048576, 4194304, 25165824, 1048576, 62914560, 134217728, -805306368, 0, 384, 512, 16384, 65536, 131072, 262144, 29360128, 33554432, 134217728, 268435456, 1073741824, 0x80000000, 262144, 524288, 1048576, 29360128, 33554432, 524288, 1048576, 16777216, 33554432, 134217728, 268435456, 1073741824, 0, 0, 0, 123856, 1966080, 0, 64, 384, 16384, 65536, 131072, 16384, 65536, 524288, 268435456, 0x80000000, 0, 0, 524288, 0x80000000, 0, 0, 1, 16, 0, 256, 524288, 0, 0, 0, 25, 96, 128, -537854471, 0, 0, 0, 32, 7404800, -545259520, 0, 0, 0, 60, 0, 249, 64768, 1048576, 6291456, 6291456, 25165824, 100663296, 402653184, 1073741824, 96, 128, 1280, 2048, 4096, 57344, 6291456, 57344, 6291456, 8388608, 16777216, 33554432, 201326592, 1342177280, 0x80000000, 0, 57344, 6291456, 8388608, 100663296, 134217728, 0x80000000, 0, 0, 0, 1, 8, 16, 64, 128, 64, 128, 256, 1024, 131072, 131072, 131072, 262144, 524288, 16777216, 57344, 6291456, 8388608, 67108864, 134217728, 64, 256, 1024, 2048, 4096, 57344, 64, 256, 0, 24576, 32768, 6291456, 67108864, 134217728, 0, 1, 64, 256, 24576, 32768, 4194304, 32768, 4194304, 67108864, 0, 0, 64, 256, 0, 0, 24576, 32768, 0, 16384, 4194304, 67108864, 64, 16384, 0, 0, 1, 64, 256, 16384, 4194304, 67108864, 0, 0, 0, 16384, 0, 16384, 16384, 0, -470447874, -470447874, -470447874, 0, 0, 128, 0, 0, 8, 96, 2048, 32768, 262144, 8388608, 35056, 1376256, -471859200, 0, 0, 14, 16, 224, 2048, 32768, 2097152, 4194304, 8388608, -486539264, 0, 96, 128, 2048, 32768, 262144, 2097152, 262144, 2097152, 8388608, 33554432, 536870912, 1073741824, 0x80000000, 0, 1610612736, 0x80000000, 0, 0, 1, 524288, 1048576, 12582912, 0, 0, 0, 151311, 264503296, 2097152, 8388608, 33554432, 1610612736, 0x80000000, 262144, 8388608, 33554432, 536870912, 67108864, 4194304, 0, 4194304, 0, 4194304, 4194304, 0, 0, 524288, 8388608, 536870912, 1073741824, 0x80000000, 1, 4097, 8388609, 96, 2048, 32768, 1073741824, 0x80000000, 0, 96, 2048, 0x80000000, 0, 0, 96, 2048, 0, 0, 1, 12582912, 0, 0, 0, 0, 1641895695, 1641895695, 0, 0, 0, 249, 7404800, 15, 87808, 1835008, 1639972864, 0, 768, 5120, 16384, 65536, 1835008, 1835008, 12582912, 16777216, 1610612736, 0, 3, 4, 8, 768, 4096, 65536, 0, 0, 256, 512, 786432, 8, 256, 512, 4096, 16384, 1835008, 16384, 1835008, 12582912, 1610612736, 0, 0, 0, 256, 0, 0, 0, 4, 8, 16, 32, 1, 2, 8, 256, 16384, 524288, 16384, 524288, 1048576, 12582912, 1610612736, 0, 0, 0, 8388608, 0, 0, 0, 524288, 4194304, 0, 0, 0, 8388608, -548662288, -548662288, -548662288, 0, 0, 256, 16384, 65536, 520093696, -1073741824, 0, 0, 0, 16777216, 0, 16, 32, 960, 4096, 4980736, 520093696, 1073741824, 0, 32, 896, 4096, 57344, 1048576, 6291456, 8388608, 16777216, 100663296, 134217728, 268435456, 0x80000000, 0, 512, 786432, 4194304, 33554432, 134217728, 268435456, 0, 786432, 4194304, 134217728, 268435456, 0, 524288, 4194304, 268435456, 0, 0, 0, 0, 0, 4194304, 4194304, -540651761, 0, 0, 0, 2, 4, 8, 16, 96, 128, 264503296, -805306368, 0, 0, 0, 8, 256, 512, 19456, 131072, 3072, 16384, 131072, 262144, 8388608, 16777216, 512, 1024, 2048, 16384, 131072, 262144, 131072, 262144, 8388608, 33554432, 201326592, 268435456, 0, 3, 4, 256, 1024, 2048, 57344, 16384, 131072, 8388608, 33554432, 134217728, 268435456, 0, 3, 256, 1024, 16384, 131072, 33554432, 134217728, 1073741824, 0x80000000, 0, 0, 256, 524288, 0x80000000, 0, 3, 256, 33554432, 134217728, 1073741824, 0, 1, 2, 33554432, 1, 2, 134217728, 1073741824, 0, 1, 2, 134217728, 0, 0, 0, 64, 0, 0, 0, 16, 32, 896, 4096, 786432, 4194304, 16777216, 33554432, 201326592, 268435456, 1073741824, 0x80000000, 0, 0, 0, 15, 0, 4980736, 4980736, 4980736, 70460, 70460, 3478332, 0, 0, 1008, 4984832, 520093696, 60, 4864, 65536, 0, 0, 0, 12, 16, 32, 256, 512, 4096, 65536, 0, 0, 0, 67108864, 0, 0, 0, 12, 0, 256, 512, 65536, 0, 0, 1024, 512, 131072, 131072, 4, 16, 32, 65536, 0, 4, 16, 32, 0, 0, 0, 4, 16, 0, 0, 16384, 67108864, 0, 0, 1, 24, 96, 128, 256, 1024\n];\n\nJSONiqTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"JSONChar\",\n  \"JSONCharRef\",\n  \"JSONPredefinedCharRef\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$$'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\":[function(_dereq_,module,exports){\n                                                            var XQueryTokenizer = exports.XQueryTokenizer = function XQueryTokenizer(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    end = e;\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? XQueryTokenizer.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = XQueryTokenizer.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [XQueryTokenizer.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_start = function()\n  {\n    eventHandler.startNonterminal(\"start\", e0);\n    lookahead1W(14);                // ModuleDecl | Annotation | OptionDecl | Operator | Variable | Tag | AttrTest |\n    switch (l1)\n    {\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 56:                        // '<?'\n      shift(56);                    // '<?'\n      break;\n    case 40:                        // '(#'\n      shift(40);                    // '(#'\n      break;\n    case 42:                        // '(:~'\n      shift(42);                    // '(:~'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    case 274:                       // '}'\n      shift(274);                   // '}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 39:                        // '('\n      shift(39);                    // '('\n      break;\n    case 43:                        // ')'\n      shift(43);                    // ')'\n      break;\n    case 49:                        // '/'\n      shift(49);                    // '/'\n      break;\n    case 62:                        // '['\n      shift(62);                    // '['\n      break;\n    case 63:                        // ']'\n      shift(63);                    // ']'\n      break;\n    case 46:                        // ','\n      shift(46);                    // ','\n      break;\n    case 48:                        // '.'\n      shift(48);                    // '.'\n      break;\n    case 53:                        // ';'\n      shift(53);                    // ';'\n      break;\n    case 51:                        // ':'\n      shift(51);                    // ':'\n      break;\n    case 34:                        // '!'\n      shift(34);                    // '!'\n      break;\n    case 273:                       // '|'\n      shift(273);                   // '|'\n      break;\n    case 2:                         // Annotation\n      shift(2);                     // Annotation\n      break;\n    case 1:                         // ModuleDecl\n      shift(1);                     // ModuleDecl\n      break;\n    case 3:                         // OptionDecl\n      shift(3);                     // OptionDecl\n      break;\n    case 12:                        // AttrTest\n      shift(12);                    // AttrTest\n      break;\n    case 13:                        // Wildcard\n      shift(13);                    // Wildcard\n      break;\n    case 15:                        // IntegerLiteral\n      shift(15);                    // IntegerLiteral\n      break;\n    case 16:                        // DecimalLiteral\n      shift(16);                    // DecimalLiteral\n      break;\n    case 17:                        // DoubleLiteral\n      shift(17);                    // DoubleLiteral\n      break;\n    case 5:                         // Variable\n      shift(5);                     // Variable\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 4:                         // Operator\n      shift(4);                     // Operator\n      break;\n    case 33:                        // EOF\n      shift(33);                    // EOF\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"start\", e0);\n  };\n\n  this.parse_StartTag = function()\n  {\n    eventHandler.startNonterminal(\"StartTag\", e0);\n    lookahead1W(8);                 // QName | S^WS | EOF | '\"' | \"'\" | '/>' | '=' | '>'\n    switch (l1)\n    {\n    case 58:                        // '>'\n      shift(58);                    // '>'\n      break;\n    case 50:                        // '/>'\n      shift(50);                    // '/>'\n      break;\n    case 27:                        // QName\n      shift(27);                    // QName\n      break;\n    case 57:                        // '='\n      shift(57);                    // '='\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"StartTag\", e0);\n  };\n\n  this.parse_TagContent = function()\n  {\n    eventHandler.startNonterminal(\"TagContent\", e0);\n    lookahead1(11);                 // Tag | EndTag | PredefinedEntityRef | ElementContentChar | CharRef | EOF |\n    switch (l1)\n    {\n    case 23:                        // ElementContentChar\n      shift(23);                    // ElementContentChar\n      break;\n    case 6:                         // Tag\n      shift(6);                     // Tag\n      break;\n    case 7:                         // EndTag\n      shift(7);                     // EndTag\n      break;\n    case 55:                        // '<![CDATA['\n      shift(55);                    // '<![CDATA['\n      break;\n    case 54:                        // '<!--'\n      shift(54);                    // '<!--'\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"TagContent\", e0);\n  };\n\n  this.parse_AposAttr = function()\n  {\n    eventHandler.startNonterminal(\"AposAttr\", e0);\n    lookahead1(10);                 // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | EOF | \"'\" |\n    switch (l1)\n    {\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 25:                        // AposAttrContentChar\n      shift(25);                    // AposAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposAttr\", e0);\n  };\n\n  this.parse_QuotAttr = function()\n  {\n    eventHandler.startNonterminal(\"QuotAttr\", e0);\n    lookahead1(9);                  // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | EOF | '\"' |\n    switch (l1)\n    {\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 24:                        // QuotAttrContentChar\n      shift(24);                    // QuotAttrContentChar\n      break;\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 272:                       // '{{'\n      shift(272);                   // '{{'\n      break;\n    case 275:                       // '}}'\n      shift(275);                   // '}}'\n      break;\n    case 271:                       // '{'\n      shift(271);                   // '{'\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotAttr\", e0);\n  };\n\n  this.parse_CData = function()\n  {\n    eventHandler.startNonterminal(\"CData\", e0);\n    lookahead1(1);                  // CDataSectionContents | EOF | ']]>'\n    switch (l1)\n    {\n    case 11:                        // CDataSectionContents\n      shift(11);                    // CDataSectionContents\n      break;\n    case 64:                        // ']]>'\n      shift(64);                    // ']]>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CData\", e0);\n  };\n\n  this.parse_XMLComment = function()\n  {\n    eventHandler.startNonterminal(\"XMLComment\", e0);\n    lookahead1(0);                  // DirCommentContents | EOF | '-->'\n    switch (l1)\n    {\n    case 9:                         // DirCommentContents\n      shift(9);                     // DirCommentContents\n      break;\n    case 47:                        // '-->'\n      shift(47);                    // '-->'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"XMLComment\", e0);\n  };\n\n  this.parse_PI = function()\n  {\n    eventHandler.startNonterminal(\"PI\", e0);\n    lookahead1(3);                  // DirPIContents | EOF | '?' | '?>'\n    switch (l1)\n    {\n    case 10:                        // DirPIContents\n      shift(10);                    // DirPIContents\n      break;\n    case 59:                        // '?'\n      shift(59);                    // '?'\n      break;\n    case 60:                        // '?>'\n      shift(60);                    // '?>'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"PI\", e0);\n  };\n\n  this.parse_Pragma = function()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    lookahead1(2);                  // PragmaContents | EOF | '#' | '#)'\n    switch (l1)\n    {\n    case 8:                         // PragmaContents\n      shift(8);                     // PragmaContents\n      break;\n    case 36:                        // '#'\n      shift(36);                    // '#'\n      break;\n    case 37:                        // '#)'\n      shift(37);                    // '#)'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  };\n\n  this.parse_Comment = function()\n  {\n    eventHandler.startNonterminal(\"Comment\", e0);\n    lookahead1(4);                  // CommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    case 30:                        // CommentContents\n      shift(30);                    // CommentContents\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"Comment\", e0);\n  };\n\n  this.parse_CommentDoc = function()\n  {\n    eventHandler.startNonterminal(\"CommentDoc\", e0);\n    lookahead1(5);                  // DocTag | DocCommentContents | EOF | '(:' | ':)'\n    switch (l1)\n    {\n    case 31:                        // DocTag\n      shift(31);                    // DocTag\n      break;\n    case 32:                        // DocCommentContents\n      shift(32);                    // DocCommentContents\n      break;\n    case 52:                        // ':)'\n      shift(52);                    // ':)'\n      break;\n    case 41:                        // '(:'\n      shift(41);                    // '(:'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"CommentDoc\", e0);\n  };\n\n  this.parse_QuotString = function()\n  {\n    eventHandler.startNonterminal(\"QuotString\", e0);\n    lookahead1(6);                  // PredefinedEntityRef | EscapeQuot | QuotChar | CharRef | EOF | '\"'\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 19:                        // EscapeQuot\n      shift(19);                    // EscapeQuot\n      break;\n    case 21:                        // QuotChar\n      shift(21);                    // QuotChar\n      break;\n    case 35:                        // '\"'\n      shift(35);                    // '\"'\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"QuotString\", e0);\n  };\n\n  this.parse_AposString = function()\n  {\n    eventHandler.startNonterminal(\"AposString\", e0);\n    lookahead1(7);                  // PredefinedEntityRef | EscapeApos | AposChar | CharRef | EOF | \"'\"\n    switch (l1)\n    {\n    case 18:                        // PredefinedEntityRef\n      shift(18);                    // PredefinedEntityRef\n      break;\n    case 29:                        // CharRef\n      shift(29);                    // CharRef\n      break;\n    case 20:                        // EscapeApos\n      shift(20);                    // EscapeApos\n      break;\n    case 22:                        // AposChar\n      shift(22);                    // AposChar\n      break;\n    case 38:                        // \"'\"\n      shift(38);                    // \"'\"\n      break;\n    default:\n      shift(33);                    // EOF\n    }\n    eventHandler.endNonterminal(\"AposString\", e0);\n  };\n\n  this.parse_Prefix = function()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    lookahead1W(13);                // NCName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  };\n\n  this.parse__EQName = function()\n  {\n    eventHandler.startNonterminal(\"_EQName\", e0);\n    lookahead1W(12);                // EQName^Token | S^WS | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    whitespace();\n    parse_EQName();\n    eventHandler.endNonterminal(\"_EQName\", e0);\n  };\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 14:                        // EQName^Token\n      shift(14);                    // EQName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 26:                        // NCName^Token\n      shift(26);                    // NCName^Token\n      break;\n    case 65:                        // 'after'\n      shift(65);                    // 'after'\n      break;\n    case 70:                        // 'and'\n      shift(70);                    // 'and'\n      break;\n    case 74:                        // 'as'\n      shift(74);                    // 'as'\n      break;\n    case 75:                        // 'ascending'\n      shift(75);                    // 'ascending'\n      break;\n    case 79:                        // 'before'\n      shift(79);                    // 'before'\n      break;\n    case 83:                        // 'case'\n      shift(83);                    // 'case'\n      break;\n    case 84:                        // 'cast'\n      shift(84);                    // 'cast'\n      break;\n    case 85:                        // 'castable'\n      shift(85);                    // 'castable'\n      break;\n    case 89:                        // 'collation'\n      shift(89);                    // 'collation'\n      break;\n    case 100:                       // 'count'\n      shift(100);                   // 'count'\n      break;\n    case 104:                       // 'default'\n      shift(104);                   // 'default'\n      break;\n    case 108:                       // 'descending'\n      shift(108);                   // 'descending'\n      break;\n    case 113:                       // 'div'\n      shift(113);                   // 'div'\n      break;\n    case 117:                       // 'else'\n      shift(117);                   // 'else'\n      break;\n    case 118:                       // 'empty'\n      shift(118);                   // 'empty'\n      break;\n    case 121:                       // 'end'\n      shift(121);                   // 'end'\n      break;\n    case 123:                       // 'eq'\n      shift(123);                   // 'eq'\n      break;\n    case 126:                       // 'except'\n      shift(126);                   // 'except'\n      break;\n    case 132:                       // 'for'\n      shift(132);                   // 'for'\n      break;\n    case 141:                       // 'ge'\n      shift(141);                   // 'ge'\n      break;\n    case 143:                       // 'group'\n      shift(143);                   // 'group'\n      break;\n    case 145:                       // 'gt'\n      shift(145);                   // 'gt'\n      break;\n    case 146:                       // 'idiv'\n      shift(146);                   // 'idiv'\n      break;\n    case 155:                       // 'instance'\n      shift(155);                   // 'instance'\n      break;\n    case 157:                       // 'intersect'\n      shift(157);                   // 'intersect'\n      break;\n    case 158:                       // 'into'\n      shift(158);                   // 'into'\n      break;\n    case 159:                       // 'is'\n      shift(159);                   // 'is'\n      break;\n    case 167:                       // 'le'\n      shift(167);                   // 'le'\n      break;\n    case 169:                       // 'let'\n      shift(169);                   // 'let'\n      break;\n    case 173:                       // 'lt'\n      shift(173);                   // 'lt'\n      break;\n    case 175:                       // 'mod'\n      shift(175);                   // 'mod'\n      break;\n    case 176:                       // 'modify'\n      shift(176);                   // 'modify'\n      break;\n    case 181:                       // 'ne'\n      shift(181);                   // 'ne'\n      break;\n    case 193:                       // 'only'\n      shift(193);                   // 'only'\n      break;\n    case 195:                       // 'or'\n      shift(195);                   // 'or'\n      break;\n    case 196:                       // 'order'\n      shift(196);                   // 'order'\n      break;\n    case 215:                       // 'return'\n      shift(215);                   // 'return'\n      break;\n    case 219:                       // 'satisfies'\n      shift(219);                   // 'satisfies'\n      break;\n    case 231:                       // 'stable'\n      shift(231);                   // 'stable'\n      break;\n    case 232:                       // 'start'\n      shift(232);                   // 'start'\n      break;\n    case 243:                       // 'to'\n      shift(243);                   // 'to'\n      break;\n    case 244:                       // 'treat'\n      shift(244);                   // 'treat'\n      break;\n    case 249:                       // 'union'\n      shift(249);                   // 'union'\n      break;\n    case 261:                       // 'where'\n      shift(261);                   // 'where'\n      break;\n    case 265:                       // 'with'\n      shift(265);                   // 'with'\n      break;\n    case 68:                        // 'ancestor'\n      shift(68);                    // 'ancestor'\n      break;\n    case 69:                        // 'ancestor-or-self'\n      shift(69);                    // 'ancestor-or-self'\n      break;\n    case 77:                        // 'attribute'\n      shift(77);                    // 'attribute'\n      break;\n    case 88:                        // 'child'\n      shift(88);                    // 'child'\n      break;\n    case 91:                        // 'comment'\n      shift(91);                    // 'comment'\n      break;\n    case 98:                        // 'copy'\n      shift(98);                    // 'copy'\n      break;\n    case 103:                       // 'declare'\n      shift(103);                   // 'declare'\n      break;\n    case 105:                       // 'delete'\n      shift(105);                   // 'delete'\n      break;\n    case 106:                       // 'descendant'\n      shift(106);                   // 'descendant'\n      break;\n    case 107:                       // 'descendant-or-self'\n      shift(107);                   // 'descendant-or-self'\n      break;\n    case 114:                       // 'document'\n      shift(114);                   // 'document'\n      break;\n    case 115:                       // 'document-node'\n      shift(115);                   // 'document-node'\n      break;\n    case 116:                       // 'element'\n      shift(116);                   // 'element'\n      break;\n    case 119:                       // 'empty-sequence'\n      shift(119);                   // 'empty-sequence'\n      break;\n    case 124:                       // 'every'\n      shift(124);                   // 'every'\n      break;\n    case 129:                       // 'first'\n      shift(129);                   // 'first'\n      break;\n    case 130:                       // 'following'\n      shift(130);                   // 'following'\n      break;\n    case 131:                       // 'following-sibling'\n      shift(131);                   // 'following-sibling'\n      break;\n    case 140:                       // 'function'\n      shift(140);                   // 'function'\n      break;\n    case 147:                       // 'if'\n      shift(147);                   // 'if'\n      break;\n    case 148:                       // 'import'\n      shift(148);                   // 'import'\n      break;\n    case 154:                       // 'insert'\n      shift(154);                   // 'insert'\n      break;\n    case 160:                       // 'item'\n      shift(160);                   // 'item'\n      break;\n    case 165:                       // 'last'\n      shift(165);                   // 'last'\n      break;\n    case 177:                       // 'module'\n      shift(177);                   // 'module'\n      break;\n    case 179:                       // 'namespace'\n      shift(179);                   // 'namespace'\n      break;\n    case 180:                       // 'namespace-node'\n      shift(180);                   // 'namespace-node'\n      break;\n    case 186:                       // 'node'\n      shift(186);                   // 'node'\n      break;\n    case 197:                       // 'ordered'\n      shift(197);                   // 'ordered'\n      break;\n    case 201:                       // 'parent'\n      shift(201);                   // 'parent'\n      break;\n    case 207:                       // 'preceding'\n      shift(207);                   // 'preceding'\n      break;\n    case 208:                       // 'preceding-sibling'\n      shift(208);                   // 'preceding-sibling'\n      break;\n    case 211:                       // 'processing-instruction'\n      shift(211);                   // 'processing-instruction'\n      break;\n    case 213:                       // 'rename'\n      shift(213);                   // 'rename'\n      break;\n    case 214:                       // 'replace'\n      shift(214);                   // 'replace'\n      break;\n    case 221:                       // 'schema-attribute'\n      shift(221);                   // 'schema-attribute'\n      break;\n    case 222:                       // 'schema-element'\n      shift(222);                   // 'schema-element'\n      break;\n    case 224:                       // 'self'\n      shift(224);                   // 'self'\n      break;\n    case 230:                       // 'some'\n      shift(230);                   // 'some'\n      break;\n    case 238:                       // 'switch'\n      shift(238);                   // 'switch'\n      break;\n    case 239:                       // 'text'\n      shift(239);                   // 'text'\n      break;\n    case 245:                       // 'try'\n      shift(245);                   // 'try'\n      break;\n    case 248:                       // 'typeswitch'\n      shift(248);                   // 'typeswitch'\n      break;\n    case 251:                       // 'unordered'\n      shift(251);                   // 'unordered'\n      break;\n    case 255:                       // 'validate'\n      shift(255);                   // 'validate'\n      break;\n    case 257:                       // 'variable'\n      shift(257);                   // 'variable'\n      break;\n    case 269:                       // 'xquery'\n      shift(269);                   // 'xquery'\n      break;\n    case 67:                        // 'allowing'\n      shift(67);                    // 'allowing'\n      break;\n    case 76:                        // 'at'\n      shift(76);                    // 'at'\n      break;\n    case 78:                        // 'base-uri'\n      shift(78);                    // 'base-uri'\n      break;\n    case 80:                        // 'boundary-space'\n      shift(80);                    // 'boundary-space'\n      break;\n    case 81:                        // 'break'\n      shift(81);                    // 'break'\n      break;\n    case 86:                        // 'catch'\n      shift(86);                    // 'catch'\n      break;\n    case 93:                        // 'construction'\n      shift(93);                    // 'construction'\n      break;\n    case 96:                        // 'context'\n      shift(96);                    // 'context'\n      break;\n    case 97:                        // 'continue'\n      shift(97);                    // 'continue'\n      break;\n    case 99:                        // 'copy-namespaces'\n      shift(99);                    // 'copy-namespaces'\n      break;\n    case 101:                       // 'decimal-format'\n      shift(101);                   // 'decimal-format'\n      break;\n    case 120:                       // 'encoding'\n      shift(120);                   // 'encoding'\n      break;\n    case 127:                       // 'exit'\n      shift(127);                   // 'exit'\n      break;\n    case 128:                       // 'external'\n      shift(128);                   // 'external'\n      break;\n    case 136:                       // 'ft-option'\n      shift(136);                   // 'ft-option'\n      break;\n    case 149:                       // 'in'\n      shift(149);                   // 'in'\n      break;\n    case 150:                       // 'index'\n      shift(150);                   // 'index'\n      break;\n    case 156:                       // 'integrity'\n      shift(156);                   // 'integrity'\n      break;\n    case 166:                       // 'lax'\n      shift(166);                   // 'lax'\n      break;\n    case 187:                       // 'nodes'\n      shift(187);                   // 'nodes'\n      break;\n    case 194:                       // 'option'\n      shift(194);                   // 'option'\n      break;\n    case 198:                       // 'ordering'\n      shift(198);                   // 'ordering'\n      break;\n    case 217:                       // 'revalidation'\n      shift(217);                   // 'revalidation'\n      break;\n    case 220:                       // 'schema'\n      shift(220);                   // 'schema'\n      break;\n    case 223:                       // 'score'\n      shift(223);                   // 'score'\n      break;\n    case 229:                       // 'sliding'\n      shift(229);                   // 'sliding'\n      break;\n    case 235:                       // 'strict'\n      shift(235);                   // 'strict'\n      break;\n    case 246:                       // 'tumbling'\n      shift(246);                   // 'tumbling'\n      break;\n    case 247:                       // 'type'\n      shift(247);                   // 'type'\n      break;\n    case 252:                       // 'updating'\n      shift(252);                   // 'updating'\n      break;\n    case 256:                       // 'value'\n      shift(256);                   // 'value'\n      break;\n    case 258:                       // 'version'\n      shift(258);                   // 'version'\n      break;\n    case 262:                       // 'while'\n      shift(262);                   // 'while'\n      break;\n    case 92:                        // 'constraint'\n      shift(92);                    // 'constraint'\n      break;\n    case 171:                       // 'loop'\n      shift(171);                   // 'loop'\n      break;\n    default:\n      shift(216);                   // 'returning'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(XQueryTokenizer.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = 0;\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      b0 = e0;\n      e0 = b1;\n      eventHandler.whitespace(b0, e0);\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 28)               // S^WS\n      {\n        break;\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function error(b, e, s, l, t)\n  {\n    throw new self.ParseException(b, e, s, l, t);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var eventHandler;\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = XQueryTokenizer.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = XQueryTokenizer.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = XQueryTokenizer.MAP1[(c0 & 15) + XQueryTokenizer.MAP1[(c1 & 31) + XQueryTokenizer.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (XQueryTokenizer.MAP2[m] > c0) hi = m - 1;\n          else if (XQueryTokenizer.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = XQueryTokenizer.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = XQueryTokenizer.TRANSITION[(i0 & 15) + XQueryTokenizer.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nXQueryTokenizer.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 276; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 2062 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = XQueryTokenizer.EXPECTED[(i0 & 3) + XQueryTokenizer.EXPECTED[(i1 & 3) + XQueryTokenizer.EXPECTED[(i2 & 3) + XQueryTokenizer.EXPECTED[i2 >> 2]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(XQueryTokenizer.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nXQueryTokenizer.MAP0 =\n[ 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35\n];\n\nXQueryTokenizer.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 347, 363, 379, 416, 416, 416, 408, 331, 323, 331, 323, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 433, 433, 433, 433, 433, 433, 433, 316, 331, 331, 331, 331, 331, 331, 331, 331, 394, 416, 416, 417, 415, 416, 416, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 330, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 416, 66, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 27, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 35, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 31, 31, 31, 31, 31, 31, 34, 35, 36, 35, 31, 35, 37, 38, 39, 40, 41, 42, 43, 44, 45, 31, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 31, 61, 62, 63, 64, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 31, 31, 35, 35, 35, 35, 35, 35, 35, 65, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65\n];\n\nXQueryTokenizer.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 35, 31, 35, 31, 31, 35\n];\n\nXQueryTokenizer.INITIAL =\n[ 1, 2, 36867, 45060, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n];\n\nXQueryTokenizer.TRANSITION =\n[ 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22908, 18836, 17152, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18579, 21711, 17152, 19008, 19233, 20367, 19008, 28684, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17365, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 17470, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18157, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 17848, 17880, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18023, 36545, 18621, 18039, 18056, 18072, 18117, 18143, 18173, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17687, 18805, 18421, 18437, 18101, 17393, 18489, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20116, 18836, 18637, 19008, 19233, 21267, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18763, 18778, 18794, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 18821, 22923, 18906, 19008, 19233, 17431, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18937, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19054, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 18953, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21843, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21696, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22429, 20131, 18720, 19008, 19233, 20367, 19008, 17173, 23559, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 18087, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 21242, 19111, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19024, 18836, 18609, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19081, 22444, 18987, 19008, 19233, 20367, 19008, 19065, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21992, 22007, 18987, 19008, 19233, 20367, 19008, 18690, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22414, 18836, 18987, 19008, 19233, 30651, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19138, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 19280, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 19172, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21783, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 19218, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21651, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 19249, 19265, 19307, 18888, 27857, 30536, 24401, 31444, 23357, 18888, 19351, 18888, 18890, 27211, 19370, 27211, 27211, 19392, 24401, 31911, 24401, 24401, 25467, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 17994, 24060, 18888, 18888, 18888, 18890, 19468, 27211, 27211, 27211, 27211, 19484, 35367, 19520, 24401, 24401, 24401, 19628, 18888, 29855, 18888, 18888, 23086, 27211, 19538, 27211, 27211, 30756, 24012, 24401, 19560, 24401, 24401, 26750, 18888, 18888, 19327, 27855, 27211, 27211, 19580, 17590, 24017, 24401, 24401, 19600, 25665, 18888, 18888, 28518, 27211, 27212, 24016, 19620, 19868, 28435, 25722, 18889, 19644, 27211, 32888, 35852, 19868, 31018, 19694, 19376, 19717, 22215, 19735, 22098, 19751, 35203, 19776, 19797, 19817, 19840, 25783, 31738, 24135, 19701, 19856, 31015, 23516, 31008, 28311, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21768, 18836, 19307, 18888, 27857, 27904, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19888, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19440, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22399, 18836, 19918, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21666, 18836, 19307, 18888, 27857, 27525, 24401, 29183, 21467, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 19946, 24401, 24401, 24401, 24401, 32382, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 19998, 24401, 24401, 24401, 24401, 31500, 18467, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 20021, 24401, 24401, 24401, 24401, 24401, 34271, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 32926, 29908, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 20050, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 20101, 19039, 20191, 20412, 20903, 17569, 20309, 20872, 25633, 20623, 20505, 20218, 20242, 17189, 17208, 17281, 20355, 20265, 20306, 20328, 20383, 22490, 20796, 20619, 21354, 20654, 20410, 20956, 21232, 20765, 17421, 20535, 17192, 18127, 22459, 20312, 25531, 22470, 20309, 20428, 18964, 20466, 20491, 21342, 21070, 20521, 20682, 17714, 18326, 17543, 17559, 17585, 22497, 20559, 19504, 20279, 20575, 20290, 20475, 20604, 20639, 20226, 20670, 17661, 21190, 17703, 21176, 17730, 19494, 20698, 20711, 22480, 21046, 21116, 18971, 21130, 20727, 20755, 17675, 17753, 17832, 17590, 25518, 20394, 20781, 20831, 20202, 20847, 21401, 17292, 17934, 17979, 18549, 20863, 20588, 25542, 20888, 20919, 18072, 18117, 20935, 20972, 21032, 21062, 21086, 18239, 21102, 18563, 21146, 21162, 21206, 18351, 20949, 20902, 18340, 21222, 21258, 21283, 18360, 20249, 17405, 21295, 21311, 21327, 20739, 20343, 21370, 21386, 21417, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21977, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 21452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 21504, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 36501, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 28674, 21946, 17617, 36473, 18223, 17237, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 21575, 21534, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 21560, 30628, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21798, 18836, 21612, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21636, 18836, 18987, 19008, 19233, 17902, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21753, 19096, 21903, 19008, 19233, 20367, 19008, 19291, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 17379, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 21931, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 18280, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21962, 18594, 18987, 19008, 19233, 22043, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21681, 21858, 18987, 19008, 19233, 20367, 19008, 21544, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 32319, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 22231, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 31678, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 33588, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 35019, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22248, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 31500, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 21431, 24401, 24401, 24401, 24401, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22324, 18836, 22059, 18888, 27857, 30501, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 34365, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22354, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 27086, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 19930, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22309, 22513, 18987, 19008, 19233, 20367, 19008, 19122, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 22544, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22608, 18836, 22988, 23004, 27585, 23020, 23036, 23067, 22087, 18888, 18888, 18888, 23083, 27211, 27211, 27211, 23102, 22121, 24401, 24401, 24401, 23122, 31386, 26154, 19674, 18888, 28119, 28232, 19424, 23705, 27211, 27211, 23142, 23173, 23189, 23212, 24401, 24401, 23246, 34427, 31693, 23262, 18888, 23290, 23308, 27783, 27620, 23327, 35263, 35107, 33383, 23346, 18193, 23393, 32748, 23968, 24401, 23414, 35153, 23463, 18888, 33913, 23442, 23482, 27211, 27211, 23532, 23552, 21431, 23575, 24401, 24401, 23604, 26095, 23635, 23657, 18888, 33482, 23685, 33251, 27211, 22187, 18851, 23721, 35536, 24401, 18887, 23750, 32641, 27211, 23769, 23787, 20080, 33012, 24384, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 23803, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 28224, 31826, 23823, 26917, 34978, 23850, 26493, 25782, 23878, 23914, 23516, 31008, 22105, 19419, 27963, 19659, 29781, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22623, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 28909, 25783, 27211, 27211, 27211, 34048, 23933, 22164, 24401, 24401, 24401, 28409, 23949, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 31181, 26583, 18888, 18888, 18888, 35585, 23984, 27211, 27211, 27211, 24005, 22201, 24033, 24401, 24401, 24401, 24052, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 26496, 24076, 24126, 24151, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22638, 18836, 22059, 19678, 27857, 24185, 24401, 24201, 24217, 26592, 18888, 18888, 18890, 24252, 24268, 27211, 27211, 22121, 24287, 24303, 24401, 24401, 30613, 19781, 35432, 36007, 32649, 18888, 25783, 24322, 28966, 23771, 27211, 35072, 22164, 24358, 32106, 26829, 24400, 31500, 31693, 18888, 18888, 18888, 24801, 18890, 27211, 27211, 27211, 27211, 24418, 19484, 24401, 24401, 24401, 24401, 20167, 31181, 18888, 18888, 18888, 27833, 23086, 27211, 27211, 33540, 27211, 30756, 21431, 24401, 24401, 22972, 24401, 26095, 18888, 36131, 18888, 27855, 27211, 24440, 27211, 22187, 22968, 24401, 24459, 24401, 31699, 28454, 18888, 34528, 34570, 35779, 24478, 24402, 24494, 25659, 18888, 36228, 27211, 27211, 24515, 30981, 23734, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 24538, 31017, 27856, 31741, 30059, 23377, 24563, 19837, 25782, 19760, 31015, 23516, 25374, 22105, 19419, 29793, 24579, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22653, 18836, 22059, 25756, 19982, 34097, 23196, 29183, 24614, 24110, 23641, 24673, 26103, 24697, 24443, 24713, 28558, 22121, 24748, 24462, 24764, 23398, 30613, 18888, 18888, 18888, 18888, 24798, 25783, 27211, 27211, 27211, 34232, 35072, 22164, 24401, 24401, 24401, 33302, 31500, 22559, 24106, 24232, 18888, 18888, 34970, 24817, 30411, 27211, 27211, 32484, 19484, 29750, 35127, 24401, 24401, 19872, 31181, 24852, 18888, 18888, 24871, 29221, 27211, 27211, 32072, 27211, 30756, 34441, 24401, 24401, 31571, 24401, 26095, 33141, 27802, 27011, 27855, 25295, 25607, 24888, 22187, 22968, 19195, 34593, 24906, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 18888, 33663, 27211, 27211, 24924, 24947, 23588, 31018, 18890, 27211, 31833, 22135, 19447, 23086, 23330, 19828, 30904, 31042, 24972, 19840, 25000, 31738, 30898, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 25016, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22668, 18836, 25041, 25057, 31320, 25073, 25089, 25105, 22087, 34796, 24236, 36138, 34870, 34125, 25121, 23106, 35497, 22248, 36613, 25137, 30671, 27365, 30613, 25153, 26447, 25199, 25233, 22574, 23274, 25249, 25265, 25281, 25318, 25344, 25360, 25400, 25428, 25452, 26731, 25504, 31693, 23669, 25558, 27407, 25575, 28599, 25934, 25599, 27211, 28180, 27304, 25623, 25839, 25649, 24401, 34820, 25681, 25698, 22586, 27775, 30190, 25745, 25778, 25799, 25817, 28995, 33569, 30756, 21518, 33443, 25837, 25855, 25893, 26095, 31254, 26677, 30136, 27855, 25930, 25950, 27211, 22187, 22968, 25966, 25986, 24401, 23428, 27763, 36330, 26959, 26002, 26029, 26045, 26085, 26119, 26170, 26203, 26222, 26239, 30527, 26372, 26274, 28404, 31018, 33757, 27211, 34262, 26316, 36729, 26345, 26366, 35337, 31017, 26388, 26407, 30954, 26350, 33861, 26434, 26463, 26479, 26512, 23516, 33189, 26531, 26547, 27963, 31293, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22683, 18836, 26568, 26181, 26608, 34097, 26643, 29183, 22087, 26669, 18888, 18888, 18890, 26693, 27211, 27211, 27211, 22121, 26720, 24401, 24401, 24401, 30613, 18888, 18888, 18888, 18888, 26774, 25783, 27211, 27211, 27211, 26619, 35072, 22164, 24401, 24401, 24401, 21596, 31500, 31693, 18888, 18888, 33978, 18888, 18890, 27211, 27211, 25801, 27211, 27211, 19484, 24401, 24401, 24401, 26792, 24401, 31181, 18888, 18888, 18888, 35464, 23086, 27211, 27211, 27211, 26809, 30756, 21431, 24401, 24401, 24401, 26828, 26095, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 22187, 22968, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 35779, 20080, 24402, 19868, 25659, 31948, 18889, 35707, 27211, 19719, 26845, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 26905, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 24984, 31088, 19419, 26945, 27651, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22698, 18836, 26999, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23051, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 27033, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 27056, 18888, 18890, 27211, 27211, 30320, 27211, 27211, 27075, 24401, 24401, 29032, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 33986, 27855, 27211, 27211, 27102, 17590, 24017, 24401, 24401, 27123, 27144, 36254, 27162, 27210, 27228, 28500, 18187, 34842, 33426, 27244, 35980, 27277, 27302, 27320, 36048, 34013, 20999, 31882, 21478, 27895, 27356, 30287, 27381, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 26329, 30087, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 27406, 27423, 27445, 35294, 27461, 22087, 18888, 18888, 30140, 18890, 27211, 27211, 27989, 27211, 22121, 24401, 24401, 25682, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 34042, 27211, 27211, 27211, 27211, 29700, 22164, 24401, 24401, 24401, 24401, 27128, 31693, 27477, 18888, 18888, 18888, 18890, 27194, 27211, 27211, 27211, 27211, 19484, 35299, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 27059, 23086, 27211, 27211, 27211, 33366, 30756, 24012, 24401, 24401, 24401, 35044, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 20815, 27211, 30818, 19960, 33969, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22713, 18836, 22059, 27496, 27516, 27541, 35231, 27557, 22087, 29662, 26292, 23292, 27573, 24836, 27601, 27211, 27636, 22121, 35544, 27686, 24401, 27721, 18866, 18888, 27799, 18888, 27818, 22071, 27853, 32260, 27211, 26013, 27873, 27920, 22164, 29419, 24401, 29946, 33413, 26742, 27751, 26881, 18888, 18888, 27261, 36776, 27936, 27211, 27211, 27211, 27988, 28005, 28031, 28052, 24401, 24401, 28069, 28088, 28135, 25488, 28152, 26069, 28167, 27211, 28340, 24657, 28196, 30756, 31523, 24401, 28212, 34176, 36174, 24956, 28248, 28266, 28290, 21488, 33077, 28327, 28356, 17590, 20986, 23126, 28391, 28425, 28102, 28451, 28470, 28490, 28516, 28534, 20034, 33728, 25868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 30241, 28274, 28553, 28574, 19406, 28590, 23086, 23330, 19828, 19452, 28615, 28660, 26147, 25783, 31738, 19837, 25782, 19760, 29613, 35958, 29276, 22105, 19419, 27963, 23157, 28700, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 18888, 27857, 34097, 24401, 29183, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 22528, 18888, 18888, 18888, 18888, 18890, 27333, 27211, 27211, 27211, 27211, 19484, 30853, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22728, 18836, 28747, 28782, 28817, 28841, 28857, 28880, 28896, 24161, 28943, 32011, 36261, 27340, 28961, 29492, 28982, 29011, 24522, 29027, 25436, 29048, 23051, 27500, 29090, 29110, 30713, 18888, 23512, 29130, 25183, 27211, 29155, 28927, 27033, 29173, 23230, 24401, 29199, 35373, 31693, 18888, 18888, 25583, 32629, 29218, 27211, 27211, 31461, 30692, 29237, 27075, 24401, 24401, 24401, 29262, 29302, 19628, 18888, 34329, 18888, 18888, 23086, 27211, 29329, 27211, 27211, 30756, 24012, 35933, 24401, 24401, 24401, 27705, 31612, 18888, 18888, 29346, 29374, 27211, 35650, 17590, 21436, 29393, 24401, 25970, 18887, 33895, 18888, 27211, 32528, 27212, 24016, 32769, 19868, 25659, 18888, 26889, 27211, 27211, 29412, 23889, 24371, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31768, 19840, 25783, 31738, 19837, 29435, 29508, 31102, 29550, 29606, 22105, 30300, 29462, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22743, 18836, 22059, 29629, 29473, 34097, 33285, 29183, 29651, 27254, 18888, 29678, 33329, 32535, 27211, 29694, 29716, 22121, 19202, 24401, 32742, 29741, 18866, 26776, 33921, 28474, 18888, 18888, 25783, 29766, 27211, 29809, 27211, 35072, 22164, 35825, 24401, 29828, 24401, 24036, 36769, 25217, 18888, 18888, 29848, 18890, 27211, 29871, 27211, 26258, 27211, 29894, 24401, 29929, 24401, 36587, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 29725, 29962, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18473, 18888, 18888, 19584, 27211, 27212, 24016, 29982, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19902, 19447, 32052, 19544, 19828, 29998, 30097, 30031, 19840, 25783, 30047, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 30075, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22758, 18836, 30121, 30156, 30206, 30257, 30273, 30336, 22087, 35624, 32837, 25762, 18890, 29878, 34934, 26812, 27211, 22121, 24931, 23223, 29202, 24401, 18866, 34373, 30352, 18888, 18888, 18888, 23447, 24828, 27211, 27211, 27211, 35072, 30370, 35052, 24401, 24401, 24401, 24036, 29523, 18888, 18888, 27146, 18888, 31308, 30386, 27211, 27211, 30405, 30558, 19484, 30427, 24401, 24401, 29938, 35686, 19628, 28766, 30447, 34506, 35614, 23086, 28731, 30482, 30517, 30552, 30756, 24012, 20156, 30574, 30598, 30667, 26283, 33464, 28945, 27670, 30687, 32915, 33504, 25328, 17590, 23963, 20450, 33837, 21016, 32397, 26300, 30708, 30729, 27885, 30748, 21588, 36373, 30779, 26653, 24628, 33220, 32514, 30806, 31835, 25412, 25906, 26515, 18890, 28825, 31833, 26133, 19447, 28304, 31730, 23834, 26057, 30869, 30885, 32181, 30920, 30942, 32797, 25782, 30970, 31015, 23516, 31008, 30997, 31034, 27963, 19659, 29450, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22773, 18836, 31058, 31074, 32463, 31125, 31141, 31197, 22087, 18888, 29534, 35471, 36738, 27211, 24342, 31213, 24424, 22121, 24401, 20175, 31229, 31917, 27736, 31245, 34334, 27175, 18888, 29094, 27286, 27211, 31278, 31336, 27211, 31355, 31371, 24401, 31402, 31418, 24401, 31437, 31693, 18888, 31619, 32841, 18888, 18890, 27211, 27211, 31460, 31477, 27211, 19484, 24401, 24401, 31497, 36581, 24401, 33020, 18888, 18888, 18888, 18888, 30007, 27211, 27211, 27211, 27211, 31516, 32310, 24401, 24401, 24401, 24401, 31539, 18888, 28762, 18888, 24651, 35740, 27211, 27211, 28644, 31565, 35796, 24401, 24401, 19318, 32188, 18888, 24334, 28366, 27212, 29966, 29832, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 31587, 19868, 31635, 32435, 33693, 30105, 31663, 20005, 31715, 31757, 31784, 31812, 30015, 31851, 31878, 25783, 31898, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 31933, 30221, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22788, 18836, 22059, 25729, 30466, 31968, 24306, 31984, 32000, 32807, 35160, 27017, 29590, 34941, 19801, 29377, 33700, 22121, 27040, 30431, 29396, 28864, 29565, 18888, 18888, 18888, 32027, 18888, 25783, 27211, 27211, 23698, 27211, 35072, 22164, 24401, 24401, 30845, 24401, 24036, 32045, 18888, 26929, 18888, 18888, 18890, 27211, 31481, 32068, 27211, 27211, 32088, 24401, 33058, 32122, 24401, 24401, 33736, 18888, 18888, 33162, 18888, 23086, 27211, 27211, 29484, 27211, 28375, 32144, 24401, 24401, 33831, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 36704, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 33107, 22171, 33224, 24271, 32169, 31017, 27856, 31741, 19840, 25783, 31738, 30234, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 32204, 32232, 32252, 32677, 33295, 29074, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 23619, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 32276, 24401, 24401, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 32299, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 33886, 18889, 36065, 27211, 19719, 35326, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22803, 18836, 32335, 31647, 34666, 32351, 32367, 32417, 22087, 18888, 32433, 19335, 32451, 27211, 32479, 27107, 32500, 22121, 24401, 32551, 20085, 32572, 18866, 22287, 23753, 18888, 18888, 32602, 32665, 27211, 32693, 27211, 26972, 32713, 32729, 24401, 32764, 24401, 25877, 32785, 34768, 18888, 27390, 32823, 24594, 24855, 32857, 24890, 32878, 32904, 27211, 32942, 32977, 24401, 33000, 29313, 24401, 30790, 26206, 27666, 33904, 18888, 23086, 36353, 27211, 33036, 27211, 30756, 24012, 32153, 24401, 33056, 24401, 35861, 18888, 18888, 30354, 27972, 27211, 27211, 33800, 17590, 20145, 24401, 24401, 34638, 20811, 18888, 18888, 33074, 27211, 27212, 36167, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 34616, 24169, 33093, 33123, 33157, 27856, 31741, 23862, 26552, 34302, 19837, 25782, 19760, 31015, 23516, 31008, 33178, 19973, 27963, 23497, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22818, 18836, 33205, 28113, 33240, 34097, 33275, 29183, 22087, 33318, 35438, 18888, 18890, 33345, 26391, 33382, 27211, 22121, 33399, 28072, 33442, 24401, 18866, 22232, 18888, 33459, 18888, 18888, 33480, 33498, 25175, 27211, 27211, 26704, 22164, 24775, 35239, 24401, 24401, 25914, 29580, 18888, 18888, 31109, 25211, 33520, 33539, 27211, 27211, 33556, 36284, 19484, 33585, 24401, 24401, 33604, 32556, 19628, 18888, 18888, 31262, 33658, 23086, 27211, 27211, 33679, 27211, 30756, 24012, 24401, 24401, 33716, 24401, 26854, 27480, 18888, 33752, 27855, 33259, 34701, 27211, 17590, 32102, 24782, 23807, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 33773, 36105, 19868, 25659, 18888, 23368, 27211, 29157, 19719, 23889, 34454, 29286, 18890, 33794, 25302, 33816, 19447, 34079, 33853, 31862, 31017, 27856, 31741, 33877, 28920, 33937, 19837, 30461, 34002, 22276, 36041, 34029, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22833, 18836, 34064, 32616, 34113, 34141, 34157, 34192, 34208, 32216, 36013, 31549, 31952, 34224, 34248, 34287, 29330, 34350, 34389, 34413, 34481, 26793, 18866, 26187, 29635, 22293, 18888, 36654, 25783, 34522, 34544, 34566, 25821, 35072, 22164, 34586, 34609, 34632, 19604, 24036, 36644, 36674, 24681, 18888, 32401, 34654, 31339, 34682, 34698, 27211, 34717, 34753, 28053, 34812, 34836, 24401, 33619, 19628, 34858, 32236, 34906, 24598, 33523, 27612, 34890, 34922, 24732, 29246, 36717, 33634, 34465, 32984, 34168, 26750, 34957, 18888, 18888, 34994, 35010, 27211, 33040, 17590, 29913, 35035, 24401, 36304, 25482, 30171, 35883, 35068, 35088, 26627, 20441, 31173, 35123, 35143, 35176, 24640, 30492, 29358, 19719, 35192, 35219, 25384, 28801, 35255, 35279, 32586, 34496, 23086, 23330, 29061, 31017, 27856, 31741, 19840, 25783, 31738, 24547, 25164, 35315, 31796, 35353, 34316, 22105, 19419, 27963, 24091, 28630, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22848, 18836, 22059, 34782, 34088, 35389, 21008, 35405, 35421, 35454, 18888, 18888, 23466, 35487, 27211, 27211, 27211, 35513, 31154, 24401, 24401, 24401, 35560, 18888, 26863, 36664, 35601, 24872, 25783, 30389, 23536, 26250, 35647, 35666, 22164, 19522, 19564, 30582, 35682, 27697, 35575, 29114, 18888, 18888, 18888, 18890, 27211, 35702, 27211, 27211, 27211, 35723, 24401, 35527, 24401, 24401, 24401, 19628, 30184, 18888, 18888, 18888, 23086, 35739, 27211, 27211, 27211, 29139, 22938, 24401, 24401, 24401, 24401, 23898, 35756, 18888, 18888, 25025, 35778, 27211, 27211, 17590, 20064, 35795, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 23917, 18890, 34550, 31833, 22262, 19447, 23086, 23330, 26418, 31017, 27856, 31741, 19840, 25783, 35812, 19837, 27187, 35841, 33135, 23516, 31008, 22105, 22148, 28712, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22863, 18836, 22059, 35877, 28723, 34097, 31164, 29183, 22087, 26758, 18888, 22592, 18890, 23989, 27211, 29812, 27211, 22121, 33778, 24401, 31421, 24401, 18866, 18888, 18888, 26872, 18888, 18888, 25783, 27211, 30732, 27211, 27211, 35072, 22164, 24401, 24908, 24401, 24401, 24036, 31693, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22878, 18836, 22059, 27837, 27857, 35899, 24401, 35915, 22087, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 22121, 24401, 24401, 24401, 24401, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 31602, 18888, 18888, 18888, 18888, 26223, 27211, 27211, 27211, 27211, 27211, 19484, 35931, 24401, 24401, 24401, 24401, 19628, 18888, 28136, 18888, 18888, 35949, 27211, 32862, 27211, 32697, 30756, 24012, 24401, 32283, 24401, 32128, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22893, 18836, 22059, 35974, 34882, 34097, 33960, 29183, 35996, 18888, 23311, 18888, 36029, 27211, 27211, 36064, 36081, 22121, 24401, 24401, 36104, 33950, 18866, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 35072, 22164, 24401, 24401, 24401, 24401, 24036, 36121, 18888, 25559, 18888, 18888, 18890, 27211, 27211, 30313, 27211, 27211, 36154, 24401, 24401, 34397, 24401, 24401, 19628, 28250, 18888, 18888, 18888, 23086, 30926, 27211, 27211, 27211, 26983, 24012, 33642, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22339, 18836, 22059, 19354, 27857, 36190, 24401, 36206, 22087, 18888, 18888, 18888, 18007, 27211, 27211, 27211, 24724, 22121, 24401, 24401, 24401, 30827, 18866, 18888, 36222, 18888, 28795, 18888, 25783, 35100, 27211, 27429, 27211, 35072, 22164, 30836, 24401, 24499, 24401, 24036, 31693, 18888, 36244, 18888, 18888, 18890, 27211, 36088, 27211, 27211, 27211, 19484, 24401, 28036, 24401, 24401, 24401, 19628, 18888, 18888, 35631, 18888, 35762, 27211, 27211, 36277, 27211, 34730, 24012, 24401, 24401, 36300, 24401, 36320, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 25712, 18888, 18888, 36346, 27211, 27212, 19184, 24402, 19868, 25659, 32029, 18889, 27211, 33359, 19719, 23889, 36369, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22384, 18836, 36389, 19008, 19233, 20367, 36434, 17173, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36453, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 22369, 18836, 18987, 19008, 19233, 20367, 19008, 21737, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17949, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21813, 18836, 36489, 19008, 19233, 20367, 19008, 17173, 17737, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17768, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20543, 22022, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 18987, 19008, 19233, 20367, 19008, 17173, 30763, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 36517, 17308, 17327, 17346, 18918, 18452, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 18127, 21873, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 21828, 18836, 19307, 18888, 27857, 30756, 24401, 29183, 28015, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 36567, 24401, 24401, 24401, 24401, 22953, 18888, 18888, 18888, 18888, 18888, 25783, 27211, 27211, 27211, 27211, 28537, 36603, 24401, 24401, 24401, 24401, 24036, 18881, 18888, 18888, 18888, 18888, 18890, 27211, 27211, 27211, 27211, 27211, 19484, 24401, 24401, 24401, 24401, 24401, 19628, 18888, 18888, 18888, 18888, 23086, 27211, 27211, 27211, 27211, 30756, 24012, 24401, 24401, 24401, 24401, 26750, 18888, 18888, 18888, 27855, 27211, 27211, 27211, 17590, 24017, 24401, 24401, 24401, 18887, 18888, 18888, 27211, 27211, 27212, 24016, 24402, 19868, 25659, 18888, 18889, 27211, 27211, 19719, 23889, 19868, 31018, 18890, 27211, 31833, 19406, 19447, 23086, 23330, 19828, 31017, 27856, 31741, 19840, 25783, 31738, 19837, 25782, 19760, 31015, 23516, 31008, 22105, 19419, 27963, 19659, 27951, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 36629, 36690, 18720, 19008, 19233, 20367, 19008, 17454, 17595, 36437, 17330, 17349, 18921, 17189, 17208, 17281, 20355, 17223, 17308, 17327, 17346, 18918, 36754, 21880, 18649, 18665, 19006, 17265, 22033, 20765, 17421, 20535, 17192, 20362, 21726, 17311, 18658, 18999, 19008, 17447, 32952, 17497, 17520, 17251, 36411, 17782, 20682, 17714, 18326, 17543, 17559, 17585, 21887, 17504, 17527, 17258, 36418, 21915, 21940, 17611, 36467, 18217, 17633, 17661, 21190, 17703, 21176, 17730, 34737, 21946, 17617, 36473, 18223, 36531, 17477, 19152, 17860, 17892, 17675, 17753, 17832, 17590, 21620, 17481, 19156, 17864, 18731, 17918, 36551, 17292, 17934, 17979, 18727, 18681, 18405, 18621, 18039, 18056, 18072, 18117, 18143, 18706, 18052, 18209, 18250, 18239, 18266, 17963, 18296, 18312, 18376, 17807, 36403, 19232, 17796, 17163, 30642, 18392, 17816, 32961, 17645, 18805, 18421, 18437, 18519, 17393, 18747, 18505, 18535, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 17590, 0, 94242, 0, 118820, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2482176, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 2207744, 2404352, 2412544, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3104768, 2605056, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2678784, 2207744, 2695168, 2207744, 2703360, 2207744, 2711552, 2752512, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 139, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2158592, 2158592, 2158592, 2863104, 2891776, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2785280, 2207744, 2809856, 2207744, 2207744, 2842624, 2207744, 2207744, 2207744, 2899968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2473984, 2207744, 2207744, 2494464, 2207744, 2207744, 2207744, 2523136, 2158592, 2404352, 2412544, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2605056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2678784, 2158592, 2695168, 2158592, 2703360, 2158592, 2711552, 2752512, 2158592, 2158592, 2785280, 2158592, 2158592, 2785280, 2158592, 2809856, 2158592, 2158592, 2842624, 2158592, 2158592, 2158592, 2899968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 641, 0, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 32768, 0, 2158592, 0, 2158592, 2158592, 2158592, 2383872, 2158592, 2158592, 2158592, 2158592, 3006464, 2383872, 2207744, 2207744, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2572573, 2158877, 2158877, 0, 2207744, 2207744, 2596864, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2641920, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 167936, 0, 0, 2162688, 0, 0, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2146304, 2146304, 2224128, 2224128, 2232320, 2232320, 2232320, 641, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2531328, 2158592, 2158592, 2158592, 2158592, 2158592, 2617344, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2502656, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2580480, 2158592, 2158592, 2158592, 2158592, 2621440, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2699264, 2158592, 2158592, 2158592, 2158592, 2158592, 2748416, 2756608, 2777088, 2801664, 2207744, 2863104, 2891776, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3018752, 2207744, 3043328, 2207744, 2207744, 2207744, 2207744, 3080192, 2207744, 2207744, 3112960, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 172310, 279, 0, 2162688, 0, 0, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2404352, 2412544, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2584576, 2158592, 2609152, 2158592, 2158592, 2629632, 2158592, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2158592, 2158592, 3170304, 3174400, 2158592, 2367488, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 0, 2207744, 2207744, 2207744, 2433024, 2207744, 2453504, 2461696, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2510848, 2207744, 2207744, 2207744, 2207744, 2207744, 2531328, 2207744, 2207744, 2207744, 2207744, 2207744, 2617344, 2207744, 2207744, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2572288, 2158592, 2158592, 1508, 2715648, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2867200, 2207744, 2904064, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2580480, 2207744, 2207744, 2207744, 2207744, 2621440, 2207744, 2207744, 2207744, 3149824, 2207744, 2207744, 3170304, 3174400, 2207744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 2158592, 2158592, 2158592, 2404352, 2412544, 2707456, 2732032, 2207744, 2207744, 2207744, 2822144, 2826240, 2207744, 2895872, 2207744, 2207744, 2924544, 2207744, 2207744, 2973696, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 285, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 2207744, 2207744, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 0, 0, 2535424, 2543616, 2158592, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2572288, 2981888, 2207744, 2207744, 3002368, 2207744, 3047424, 3063808, 3076096, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3203072, 2708960, 2732032, 2158592, 2158592, 2158592, 2822144, 2827748, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2981888, 2158592, 2158592, 3002368, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2981888, 2158592, 2158592, 3003876, 2158592, 3047424, 3063808, 3076096, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3203072, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 20480, 0, 0, 0, 0, 0, 2162688, 20480, 0, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2908160, 2527232, 2207744, 2207744, 2576384, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2908160, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 0, 0, 2158592, 2158592, 2158592, 2158592, 2633728, 2658304, 0, 0, 2740224, 2744320, 0, 2834432, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 933, 45, 45, 45, 45, 442, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 2494464, 2158592, 2158592, 2158592, 2524757, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 1504, 2158592, 2498560, 2158592, 2158592, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 2736128, 2158592, 2158592, 0, 2158592, 2912256, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3108864, 2158592, 2158592, 3133440, 3145728, 3153920, 2375680, 2379776, 2207744, 2207744, 2420736, 2207744, 2449408, 2207744, 2207744, 2207744, 2498560, 2207744, 2207744, 2207744, 2207744, 2568192, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 0, 551, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 2020, 2158592, 2592768, 2625536, 2207744, 2207744, 2674688, 2736128, 2207744, 2207744, 2207744, 2912256, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 542, 0, 544, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 641, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2498560, 2158592, 2158592, 1621, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 1608, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1107, 97, 97, 1110, 97, 97, 3133440, 3145728, 3153920, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3014656, 2158592, 2158592, 3051520, 2158592, 2158592, 3100672, 2158592, 2158592, 3121152, 2158592, 2158592, 2158592, 3149824, 2416640, 2207744, 2465792, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2633728, 2658304, 2740224, 2744320, 2834432, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158592, 2408448, 2416640, 2158592, 2465792, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 32768, 0, 0, 0, 0, 0, 0, 2367488, 2949120, 2158592, 2985984, 2158592, 2998272, 2158592, 2158592, 2158592, 3129344, 2158592, 2158592, 2478080, 2158592, 2158592, 2158592, 2535424, 2543616, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3117056, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 2699264, 2207744, 2207744, 2207744, 2207744, 2207744, 2748416, 2756608, 2777088, 2801664, 2207744, 2207744, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 0, 0, 2535709, 2543901, 2158877, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2990365, 2158877, 2158877, 2158730, 2158730, 2158730, 2158730, 2158730, 2572426, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158592, 2158592, 2478080, 2207744, 2207744, 2990080, 2207744, 2207744, 2158592, 2158592, 2482176, 2158592, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 0, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 3010560, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158592, 2428928, 2158592, 2514944, 0, 0, 2158592, 2588672, 2158592, 0, 2838528, 2158592, 2158592, 2158592, 3010560, 2158592, 2506752, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 0, 29315, 922, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1539, 45, 3006464, 2383872, 0, 2020, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158592, 2637824, 2953216, 2158592, 2539520, 2158592, 2539520, 2207744, 0, 0, 2539520, 2158592, 2158592, 2158592, 2158592, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158592, 2506752, 0, 0, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2158592, 2207744, 0, 2158592, 2965504, 2965504, 2965504, 0, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2474269, 2158877, 2158877, 0, 0, 2158877, 2158877, 2158877, 2158877, 2634013, 2658589, 0, 0, 2740509, 2744605, 0, 2834717, 40976, 18, 36884, 45078, 24, 28, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 36884, 0, 0, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 86016, 0, 0, 2211840, 102439, 0, 0, 0, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 0, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 135, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2564096, 2158592, 2158592, 2158592, 2158592, 2158592, 2596864, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2641920, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2494464, 2158592, 2158592, 2158592, 2523136, 2527232, 2158592, 2158592, 2576384, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 0, 27, 27, 0, 2158592, 2498560, 2158592, 2158592, 0, 2158592, 2158592, 2568192, 2158592, 2592768, 2625536, 2158592, 2158592, 2674688, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2494464, 2158592, 2158592, 2158592, 3006464, 2383872, 0, 0, 2158592, 2158592, 2158592, 2158592, 3006464, 2158592, 2637824, 2953216, 2158592, 2207744, 2637824, 2953216, 40976, 18, 36884, 45078, 24, 27, 147488, 94242, 147456, 147488, 106538, 98347, 0, 0, 147456, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 81920, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2428928, 2158592, 2514944, 2158592, 2588672, 2158592, 2838528, 2158592, 2158592, 40976, 18, 151573, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1487, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 0, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 130, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3096576, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2158592, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 644, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 1080, 0, 1084, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2531466, 2158730, 2158730, 2158730, 2158730, 2158730, 2617482, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2781184, 2793472, 2158592, 2818048, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 159779, 159744, 102439, 159779, 98347, 0, 0, 159744, 40976, 18, 18, 36884, 0, 45078, 0, 2224253, 172032, 2224253, 2232448, 2232448, 172032, 2232448, 90143, 0, 0, 2170880, 0, 0, 550, 829, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 124, 124, 127, 127, 127, 40976, 18, 36884, 45078, 25, 29, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 163931, 40976, 18, 18, 36884, 0, 45078, 249856, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 0, 827, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 4243810, 4243810, 24, 24, 27, 27, 27, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 0, 0, 0, 0, 57344, 286, 2158592, 2158592, 2158592, 2158592, 2707456, 2732032, 2158592, 2158592, 2158592, 2822144, 2826240, 2158592, 2895872, 2158592, 2158592, 2924544, 2158592, 2158592, 2973696, 2158592, 2207744, 2207744, 2207744, 3186688, 2207744, 0, 0, 0, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1613, 97, 97, 97, 97, 97, 97, 1495, 97, 97, 97, 97, 97, 97, 97, 97, 97, 566, 97, 97, 97, 97, 97, 97, 2207744, 0, 0, 0, 0, 0, 0, 2166784, 546, 0, 0, 0, 0, 286, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 17, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 120, 121, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 2170880, 0, 53248, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 196608, 18, 266240, 24, 24, 27, 27, 27, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 0, 45, 45, 45, 45, 45, 45, 45, 1535, 45, 45, 45, 45, 45, 45, 45, 1416, 45, 45, 45, 45, 45, 45, 45, 45, 424, 45, 45, 45, 45, 45, 45, 45, 45, 45, 405, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 199, 45, 45, 67, 67, 67, 67, 67, 491, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1766, 67, 67, 67, 1767, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 546, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 743, 57889, 0, 2170880, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1856, 45, 1858, 1859, 67, 67, 67, 1009, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1021, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367773, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2699549, 2158877, 2158877, 2158877, 2158877, 2158877, 2748701, 2756893, 2777373, 2801949, 97, 1115, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 857, 97, 67, 67, 67, 67, 67, 1258, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1826, 67, 97, 97, 97, 97, 97, 97, 1338, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 870, 97, 97, 67, 67, 67, 1463, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1579, 67, 67, 97, 97, 97, 1518, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 904, 905, 97, 97, 97, 97, 1620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 1679, 67, 67, 67, 1682, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1690, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 189, 45, 45, 45, 1748, 45, 45, 45, 1749, 1750, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1959, 67, 67, 67, 67, 1768, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1791, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1802, 67, 1817, 67, 67, 67, 67, 67, 67, 1823, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 1848, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 659, 45, 45, 45, 45, 45, 45, 45, 1863, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 495, 67, 67, 67, 67, 67, 1878, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 0, 1973, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1165, 97, 1167, 67, 24850, 24850, 12564, 12564, 0, 0, 2166784, 0, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 1789, 97, 0, 94242, 0, 0, 0, 2211840, 102439, 0, 0, 106538, 98347, 136, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 229376, 2375680, 2379776, 2158592, 2158592, 2420736, 2158592, 2449408, 2158592, 2158592, 67, 24850, 24850, 12564, 12564, 0, 0, 280, 547, 0, 53531, 53531, 0, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 1788, 97, 97, 0, 97, 2024, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 235, 67, 67, 67, 67, 67, 57889, 547, 547, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1799, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1092, 0, 0, 0, 0, 0, 97, 97, 97, 97, 1612, 97, 97, 97, 97, 1616, 97, 1297, 1472, 0, 0, 0, 0, 1303, 1474, 0, 0, 0, 0, 1309, 1476, 0, 0, 0, 0, 97, 97, 97, 1481, 97, 97, 97, 97, 97, 97, 1488, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 607, 97, 97, 97, 97, 40976, 18, 36884, 45078, 26, 30, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 213080, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 143448, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 0, 0, 0, 0, 97, 97, 97, 97, 1482, 97, 1483, 97, 97, 97, 97, 97, 97, 1326, 97, 97, 1329, 1330, 97, 97, 97, 97, 97, 97, 1159, 1160, 97, 97, 97, 97, 97, 97, 97, 97, 590, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211974, 102439, 0, 0, 106538, 98347, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2474122, 2158730, 2158730, 2494602, 2158730, 2158730, 2158730, 2809994, 2158730, 2158730, 2842762, 2158730, 2158730, 2158730, 2900106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3014794, 2158730, 2158730, 3051658, 2158730, 2158730, 3100810, 2158730, 2158730, 2158730, 2158730, 3096714, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 2207744, 541, 541, 543, 543, 0, 0, 2166784, 0, 548, 549, 549, 0, 286, 2158877, 2158877, 2158877, 2863389, 2892061, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3186973, 2158877, 0, 0, 0, 0, 0, 0, 0, 0, 2367626, 2158877, 2404637, 2412829, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2564381, 2158877, 2158877, 2605341, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2679069, 2158877, 2695453, 2158877, 2703645, 2158877, 2711837, 2752797, 2158877, 0, 2158877, 2158877, 2158877, 2384010, 2158730, 2158730, 2158730, 2158730, 3006602, 2383872, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3096576, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 2158877, 2785565, 2158877, 2810141, 2158877, 2158877, 2842909, 2158877, 2158877, 2158877, 2900253, 2158877, 2158877, 2158877, 2158877, 2158877, 2531613, 2158877, 2158877, 2158877, 2158877, 2158877, 2617629, 2158877, 2158877, 2158877, 2158877, 2158730, 2818186, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3105053, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 0, 0, 0, 0, 97, 97, 97, 1611, 97, 97, 97, 97, 97, 97, 97, 1496, 97, 97, 1499, 97, 97, 97, 97, 97, 2441354, 2445450, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2502794, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2433162, 2158730, 2453642, 2461834, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2580618, 2158730, 2158730, 2158730, 2158730, 2621578, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2699402, 2158730, 2158730, 2158730, 2158730, 2678922, 2158730, 2695306, 2158730, 2703498, 2158730, 2711690, 2752650, 2158730, 2158730, 2785418, 2158730, 2158730, 2158730, 3113098, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3186826, 2158730, 2207744, 2207744, 2207744, 2207744, 2781184, 2793472, 2207744, 2818048, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 541, 0, 543, 2158877, 2502941, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2580765, 2158877, 2158877, 2158877, 2158877, 2621725, 2158877, 3019037, 2158877, 3043613, 2158877, 2158877, 2158877, 2158877, 3080477, 2158877, 2158877, 3113245, 2158877, 2158877, 2158877, 2158877, 0, 2158877, 2908445, 2158877, 2158877, 2158877, 2978077, 2158877, 2158877, 2158877, 2158877, 3039517, 2158877, 2158730, 2510986, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2584714, 2158730, 2609290, 2158730, 2158730, 2629770, 2158730, 2158730, 2158730, 2388106, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2605194, 2158730, 2158730, 2158730, 2158730, 2687114, 2158730, 2715786, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2867338, 2158730, 2904202, 2158730, 2158730, 2158730, 2642058, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2781322, 2793610, 2158730, 3121290, 2158730, 2158730, 2158730, 3149962, 2158730, 2158730, 3170442, 3174538, 2158730, 2367488, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2441216, 2445312, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2502656, 2158877, 2433309, 2158877, 2453789, 2461981, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2511133, 2158877, 2158877, 2158877, 2158877, 2584861, 2158877, 2609437, 2158877, 2158877, 2629917, 2158877, 2158877, 2158877, 2687261, 2158877, 2715933, 2158877, 2158730, 2158730, 2973834, 2158730, 2982026, 2158730, 2158730, 3002506, 2158730, 3047562, 3063946, 3076234, 2158730, 2158730, 2158730, 2158730, 2207744, 2506752, 2207744, 2207744, 2207744, 2207744, 2207744, 2158877, 2507037, 0, 0, 2158877, 2158730, 2158730, 2158730, 3203210, 2207744, 2207744, 2207744, 2207744, 2207744, 2424832, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2564096, 2207744, 2207744, 2207744, 2707741, 2732317, 2158877, 2158877, 2158877, 2822429, 2826525, 2158877, 2896157, 2158877, 2158877, 2924829, 2158877, 2158877, 2973981, 2158877, 18, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 642, 0, 2158592, 0, 45, 1529, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1755, 45, 67, 67, 2982173, 2158877, 2158877, 3002653, 2158877, 3047709, 3064093, 3076381, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3203357, 2523274, 2527370, 2158730, 2158730, 2576522, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2908298, 2494749, 2158877, 2158877, 2158877, 2523421, 2527517, 2158877, 2158877, 2576669, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 0, 40976, 0, 18, 18, 4321280, 2224253, 2232448, 4329472, 2232448, 2158730, 2498698, 2158730, 2158730, 2158730, 2158730, 2568330, 2158730, 2592906, 2625674, 2158730, 2158730, 2674826, 2736266, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2158730, 2912394, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3109002, 2158730, 2158730, 3133578, 3145866, 3154058, 2375680, 2207744, 3108864, 2207744, 2207744, 3133440, 3145728, 3153920, 2375965, 2380061, 2158877, 2158877, 2421021, 2158877, 2449693, 2158877, 2158877, 2158877, 3117341, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3104906, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158877, 2498845, 2158877, 2158877, 0, 2158877, 2158877, 2568477, 2158877, 2593053, 2625821, 2158877, 2158877, 2674973, 0, 0, 0, 0, 97, 97, 1480, 97, 97, 97, 97, 97, 1485, 97, 97, 97, 0, 97, 97, 1729, 97, 1731, 97, 97, 97, 97, 97, 97, 97, 311, 97, 97, 97, 97, 97, 97, 97, 97, 1520, 97, 97, 1523, 97, 97, 1526, 97, 2736413, 2158877, 2158877, 0, 2158877, 2912541, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3109149, 2158877, 2158877, 3014941, 2158877, 2158877, 3051805, 2158877, 2158877, 3100957, 2158877, 2158877, 3121437, 2158877, 2158877, 2158877, 3150109, 3133725, 3146013, 3154205, 2158730, 2408586, 2416778, 2158730, 2465930, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3018890, 2158730, 3043466, 2158730, 2158730, 2158730, 2158730, 3080330, 2633866, 2658442, 2740362, 2744458, 2834570, 2949258, 2158730, 2986122, 2158730, 2998410, 2158730, 2158730, 2158730, 3129482, 2207744, 2408448, 2949120, 2207744, 2985984, 2207744, 2998272, 2207744, 2207744, 2207744, 3129344, 2158877, 2408733, 2416925, 2158877, 2466077, 2158877, 2158877, 3170589, 3174685, 2158877, 0, 0, 0, 2158730, 2158730, 2158730, 2158730, 2158730, 2424970, 2158730, 2158730, 2158730, 2158730, 2707594, 2732170, 2158730, 2158730, 2158730, 2822282, 2826378, 2158730, 2896010, 2158730, 2158730, 2924682, 2949405, 2158877, 2986269, 2158877, 2998557, 2158877, 2158877, 2158877, 3129629, 2158730, 2158730, 2478218, 2158730, 2158730, 2158730, 2535562, 2543754, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3117194, 2207744, 2207744, 2478080, 2207744, 2207744, 2207744, 2207744, 3014656, 2207744, 2207744, 3051520, 2207744, 2207744, 3100672, 2207744, 2207744, 3121152, 2207744, 2207744, 2207744, 2207744, 2207744, 2584576, 2207744, 2609152, 2207744, 2207744, 2629632, 2207744, 2207744, 2207744, 2686976, 2207744, 2207744, 2535424, 2543616, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3117056, 2158877, 2158877, 2478365, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2158730, 2482314, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 823, 0, 825, 2158730, 2158730, 2158730, 2990218, 2158730, 2158730, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 135, 0, 2207744, 2207744, 2990080, 2207744, 2207744, 2158877, 2158877, 2482461, 2158877, 2158877, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2158730, 2429066, 2158730, 2515082, 2158730, 2588810, 2158730, 2838666, 2158730, 2158730, 2158730, 3010698, 2207744, 2428928, 2207744, 2514944, 2207744, 2588672, 2207744, 2838528, 2207744, 2207744, 2207744, 3010560, 2158877, 2429213, 2158877, 2515229, 0, 0, 2158877, 2588957, 2158877, 0, 2838813, 2158877, 2158877, 2158877, 3010845, 2158730, 2506890, 2158730, 2158730, 2158730, 2748554, 2756746, 2777226, 2801802, 2158730, 2158730, 2158730, 2863242, 2891914, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 2564234, 2158730, 2158730, 2158730, 2158730, 2158730, 2597002, 2158730, 2158730, 2158730, 3006464, 2384157, 0, 0, 2158877, 2158877, 2158877, 2158877, 3006749, 2158730, 2637962, 2953354, 2158730, 2207744, 2637824, 2953216, 2207744, 0, 0, 2158877, 2638109, 2953501, 2158877, 2539658, 2158730, 2539520, 2207744, 0, 0, 2539805, 2158877, 2158730, 2158730, 2158730, 2977930, 2158730, 2158730, 2158730, 2158730, 3039370, 2158730, 2158730, 2158730, 2158730, 2158730, 2158730, 3158154, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2158730, 2207744, 0, 2158877, 2965642, 2965504, 2965789, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1484, 97, 97, 97, 97, 2158592, 18, 0, 122880, 0, 0, 0, 77824, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 356, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1751, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1427, 67, 67, 67, 67, 67, 1432, 67, 67, 67, 3104768, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 122880, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 1322, 550, 0, 286, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 4329472, 27, 27, 2207744, 2207744, 2977792, 2207744, 2207744, 2207744, 2207744, 3039232, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 3158016, 542, 0, 0, 0, 542, 0, 544, 0, 0, 0, 544, 0, 550, 0, 0, 0, 0, 0, 97, 97, 1610, 97, 97, 97, 97, 97, 97, 97, 97, 898, 97, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 2211840, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 237568, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 192512, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 94, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 96, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 12378, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 126, 126, 126, 126, 90143, 0, 0, 2170880, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 20480, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 241664, 102439, 106538, 98347, 0, 0, 20568, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 200797, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 0, 0, 44, 0, 0, 20575, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 41, 41, 41, 0, 0, 1126400, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 0, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 89, 40976, 18, 18, 36884, 0, 45078, 0, 24, 24, 24, 27, 131201, 27, 27, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2441216, 2445312, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 208896, 2211840, 102439, 0, 0, 106538, 98347, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 32768, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2433024, 2158592, 2453504, 2461696, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2510848, 2158592, 2158592, 2158592, 2158592, 40976, 18, 36884, 245783, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 20480, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 221184, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 180224, 40976, 18, 18, 36884, 155648, 45078, 0, 24, 24, 217088, 27, 27, 27, 217088, 90143, 0, 0, 2170880, 0, 0, 828, 0, 2158592, 2158592, 2158592, 2387968, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2387968, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 233472, 0, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 718, 45, 45, 45, 45, 45, 45, 45, 45, 45, 727, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 45, 1808, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 0, 0, 97, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 1787, 0, 97, 97, 0, 97, 97, 97, 45, 45, 45, 45, 2029, 45, 67, 67, 67, 67, 2033, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 45, 1798, 45, 45, 1800, 45, 45, 0, 1472, 0, 0, 0, 0, 0, 1474, 0, 0, 0, 0, 0, 1476, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 1320, 97, 97, 0, 0, 97, 97, 97, 97, 1786, 97, 0, 0, 97, 97, 0, 1790, 1527, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 663, 67, 24850, 24850, 12564, 12564, 0, 57889, 281, 0, 0, 53531, 53531, 367, 286, 97, 97, 0, 0, 97, 97, 97, 1785, 97, 97, 0, 0, 97, 97, 0, 97, 97, 1979, 97, 97, 45, 45, 1983, 45, 1984, 45, 45, 45, 45, 45, 652, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 690, 45, 45, 694, 45, 45, 40976, 19, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 262144, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 46, 67, 98, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 45, 67, 97, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 258048, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 1122423, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 1114152, 1114152, 1114152, 0, 0, 1114112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 37, 102439, 106538, 98347, 0, 0, 204800, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 0, 102439, 106538, 98347, 0, 0, 57436, 40976, 18, 36884, 45078, 24, 27, 33, 33, 0, 33, 33, 33, 0, 0, 0, 40976, 18, 18, 36884, 0, 45078, 0, 124, 124, 124, 127, 127, 127, 127, 90143, 0, 0, 2170880, 0, 0, 550, 0, 2158877, 2158877, 2158877, 2388253, 2158877, 2158877, 2158877, 2158877, 2158877, 2781469, 2793757, 2158877, 2818333, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2867485, 2158877, 2904349, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 3096861, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2441501, 2445597, 2158877, 2158877, 2158877, 2158877, 2158877, 40976, 122, 123, 36884, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 936, 2158592, 4243810, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 935, 45, 45, 45, 715, 45, 45, 45, 45, 45, 45, 45, 723, 45, 45, 45, 45, 45, 1182, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 430, 45, 45, 45, 45, 45, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 47, 68, 99, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 48, 69, 100, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 49, 70, 101, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 50, 71, 102, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 51, 72, 103, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 52, 73, 104, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 53, 74, 105, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 54, 75, 106, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 55, 76, 107, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 56, 77, 108, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 57, 78, 109, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 58, 79, 110, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 59, 80, 111, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 60, 81, 112, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 61, 82, 113, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 62, 83, 114, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 63, 84, 115, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 64, 85, 116, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 65, 86, 117, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 38, 102439, 106538, 98347, 66, 87, 118, 40976, 18, 36884, 45078, 24, 27, 90143, 94242, 118820, 102439, 106538, 98347, 118820, 118820, 118820, 40976, 18, 18, 0, 0, 45078, 0, 24, 24, 24, 27, 27, 27, 27, 90143, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 1321, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 0, 1315, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1360, 97, 97, 131, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 145, 149, 45, 45, 45, 45, 45, 174, 45, 179, 45, 185, 45, 188, 45, 45, 202, 67, 255, 67, 67, 269, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 292, 296, 97, 97, 97, 97, 97, 321, 97, 326, 97, 332, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 646, 335, 97, 97, 349, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 437, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 523, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 511, 67, 67, 67, 97, 97, 97, 620, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1501, 1502, 97, 793, 67, 67, 796, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 808, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 2052, 67, 67, 67, 67, 813, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 830, 97, 97, 97, 97, 97, 97, 97, 97, 97, 315, 97, 97, 97, 97, 97, 97, 841, 97, 97, 97, 97, 97, 97, 97, 97, 97, 854, 97, 97, 97, 97, 97, 97, 589, 97, 97, 97, 97, 97, 97, 97, 97, 97, 867, 97, 97, 97, 97, 97, 97, 97, 891, 97, 97, 894, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 906, 45, 937, 45, 45, 940, 45, 45, 45, 45, 45, 45, 948, 45, 45, 45, 45, 45, 734, 735, 67, 737, 67, 738, 67, 740, 67, 67, 67, 45, 967, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 435, 45, 45, 45, 980, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 415, 45, 45, 67, 67, 1024, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1081, 13112, 1085, 54074, 1089, 0, 0, 0, 0, 0, 0, 363, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 45, 1674, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1913, 67, 1914, 67, 67, 67, 1918, 67, 67, 97, 97, 97, 97, 1118, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 630, 97, 97, 97, 97, 97, 1169, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 1534, 45, 45, 45, 45, 45, 1538, 45, 45, 45, 45, 1233, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 742, 67, 45, 45, 1191, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 454, 67, 67, 67, 67, 1243, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1251, 67, 0, 0, 97, 97, 97, 97, 45, 45, 67, 67, 2050, 0, 97, 97, 45, 45, 45, 732, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 67, 67, 67, 1284, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 772, 67, 67, 67, 1293, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 2158592, 2158592, 2158592, 2404352, 2412544, 1323, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1331, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1737, 97, 1364, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1373, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 647, 45, 45, 1387, 45, 45, 1391, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 410, 45, 45, 45, 45, 45, 1400, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1407, 45, 45, 45, 45, 45, 941, 45, 943, 45, 45, 45, 45, 45, 45, 951, 45, 67, 1438, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1447, 67, 67, 67, 67, 67, 67, 782, 67, 67, 67, 67, 67, 67, 67, 67, 67, 756, 67, 67, 67, 67, 67, 67, 97, 1491, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1500, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1736, 97, 45, 45, 1541, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 677, 45, 45, 67, 1581, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 791, 792, 67, 67, 67, 67, 1598, 67, 1600, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 97, 97, 97, 1727, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1513, 97, 97, 67, 67, 97, 1879, 97, 1881, 97, 0, 1884, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 1842, 97, 97, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1928, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1903, 45, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 1971, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 1381, 45, 45, 45, 45, 1976, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1747, 809, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 907, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1478, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1150, 97, 97, 97, 97, 67, 67, 67, 67, 1244, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 477, 67, 67, 67, 67, 67, 67, 1294, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1324, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1374, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 945, 45, 45, 45, 45, 45, 45, 45, 45, 1908, 45, 45, 1910, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1919, 67, 0, 0, 97, 97, 97, 97, 45, 2048, 67, 2049, 0, 0, 97, 2051, 45, 45, 45, 939, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 397, 45, 45, 45, 1921, 67, 67, 1923, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1947, 45, 1935, 0, 0, 0, 97, 1939, 97, 97, 1941, 97, 45, 45, 45, 45, 45, 45, 382, 389, 45, 45, 45, 45, 45, 45, 45, 45, 1810, 45, 45, 1812, 67, 67, 67, 67, 67, 256, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 336, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 371, 373, 45, 45, 45, 955, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 413, 45, 45, 45, 457, 459, 67, 67, 67, 67, 67, 67, 67, 67, 473, 67, 478, 67, 67, 482, 67, 67, 485, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 1828, 97, 554, 556, 97, 97, 97, 97, 97, 97, 97, 97, 570, 97, 575, 97, 97, 579, 97, 97, 582, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 330, 97, 97, 67, 746, 67, 67, 67, 67, 67, 67, 67, 67, 67, 758, 67, 67, 67, 67, 67, 67, 67, 1575, 67, 67, 67, 67, 67, 67, 67, 67, 493, 67, 67, 67, 67, 67, 67, 67, 97, 97, 844, 97, 97, 97, 97, 97, 97, 97, 97, 97, 856, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1735, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 1642, 97, 1644, 97, 97, 890, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 67, 67, 67, 67, 1065, 1066, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 532, 67, 67, 67, 67, 67, 67, 67, 1451, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 496, 67, 67, 97, 97, 1505, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 593, 97, 97, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1617, 97, 97, 1635, 0, 1637, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 885, 97, 97, 97, 97, 67, 67, 1704, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 565, 572, 97, 97, 97, 97, 97, 97, 97, 97, 1832, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 1946, 45, 45, 67, 67, 67, 67, 67, 97, 1926, 97, 1927, 97, 0, 0, 0, 97, 97, 1934, 2043, 0, 0, 97, 97, 97, 2047, 45, 45, 67, 67, 0, 1832, 97, 97, 45, 45, 45, 981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1227, 45, 45, 45, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 372, 45, 45, 45, 45, 1661, 1662, 45, 45, 45, 45, 45, 1666, 45, 45, 45, 45, 45, 1673, 45, 1675, 45, 45, 45, 45, 45, 45, 45, 67, 1426, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1275, 67, 67, 67, 67, 67, 45, 418, 45, 45, 420, 45, 45, 423, 45, 45, 45, 45, 45, 45, 45, 45, 959, 45, 45, 962, 45, 45, 45, 45, 458, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 483, 67, 67, 67, 67, 504, 67, 67, 506, 67, 67, 509, 67, 67, 67, 67, 67, 67, 67, 528, 67, 67, 67, 67, 67, 67, 67, 67, 1287, 67, 67, 67, 67, 67, 67, 67, 555, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 580, 97, 97, 97, 97, 601, 97, 97, 603, 97, 97, 606, 97, 97, 97, 97, 97, 97, 848, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1498, 97, 97, 97, 97, 97, 97, 45, 45, 714, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 989, 990, 45, 67, 67, 67, 67, 67, 1011, 67, 67, 67, 67, 1015, 67, 67, 67, 67, 67, 67, 67, 753, 67, 67, 67, 67, 67, 67, 67, 67, 467, 67, 67, 67, 67, 67, 67, 67, 45, 45, 1179, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1003, 1004, 67, 1217, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 728, 67, 1461, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1034, 67, 97, 1516, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 871, 97, 67, 67, 67, 1705, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 567, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1715, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 1380, 45, 45, 45, 45, 45, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1887, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 2006, 45, 45, 1907, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1920, 67, 97, 0, 2035, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 1428, 67, 67, 67, 67, 67, 67, 1435, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 146, 45, 152, 45, 45, 165, 45, 175, 45, 180, 45, 45, 187, 190, 195, 45, 203, 254, 257, 262, 67, 270, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 293, 97, 299, 97, 97, 312, 97, 322, 97, 327, 97, 97, 334, 337, 342, 97, 350, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 484, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 499, 97, 581, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 596, 648, 45, 650, 45, 651, 45, 653, 45, 45, 45, 657, 45, 45, 45, 45, 45, 45, 1954, 67, 67, 67, 1958, 67, 67, 67, 67, 67, 67, 67, 768, 67, 67, 67, 67, 67, 67, 67, 67, 769, 67, 67, 67, 67, 67, 67, 67, 680, 45, 45, 45, 45, 45, 45, 45, 45, 688, 689, 691, 45, 45, 45, 45, 45, 983, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 947, 45, 45, 45, 45, 952, 45, 45, 698, 699, 45, 45, 702, 703, 45, 45, 45, 45, 45, 45, 45, 711, 744, 67, 67, 67, 67, 67, 67, 67, 67, 67, 757, 67, 67, 67, 67, 761, 67, 67, 67, 67, 765, 67, 767, 67, 67, 67, 67, 67, 67, 67, 67, 775, 776, 778, 67, 67, 67, 67, 67, 67, 785, 786, 67, 67, 789, 790, 67, 67, 67, 67, 67, 67, 1442, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1775, 97, 97, 97, 67, 67, 67, 67, 67, 798, 67, 67, 67, 802, 67, 67, 67, 67, 67, 67, 67, 67, 1465, 67, 67, 1468, 67, 67, 1471, 67, 67, 810, 67, 67, 67, 67, 67, 67, 67, 67, 67, 821, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 833, 97, 835, 97, 836, 97, 838, 97, 97, 0, 0, 97, 97, 97, 2002, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 1740, 45, 45, 45, 1744, 45, 45, 45, 97, 842, 97, 97, 97, 97, 97, 97, 97, 97, 97, 855, 97, 97, 97, 97, 0, 1717, 1718, 97, 97, 97, 97, 97, 1722, 97, 0, 0, 859, 97, 97, 97, 97, 863, 97, 865, 97, 97, 97, 97, 97, 97, 97, 97, 604, 97, 97, 97, 97, 97, 97, 97, 873, 874, 876, 97, 97, 97, 97, 97, 97, 883, 884, 97, 97, 887, 888, 97, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 225280, 0, 365, 0, 367, 0, 45, 45, 45, 1531, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1199, 45, 45, 45, 45, 45, 97, 97, 908, 97, 97, 97, 97, 97, 97, 97, 97, 97, 919, 638, 0, 0, 0, 0, 2158877, 2158877, 2158877, 2158877, 2158877, 2425117, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2597149, 2158877, 2158877, 2158877, 2158877, 2158877, 2158877, 2642205, 2158877, 2158877, 2158877, 2158877, 2158877, 3158301, 0, 2375818, 2379914, 2158730, 2158730, 2420874, 2158730, 2449546, 2158730, 2158730, 953, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 965, 978, 45, 45, 45, 45, 45, 45, 985, 45, 45, 45, 45, 45, 45, 45, 45, 971, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1027, 67, 1029, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1455, 67, 67, 67, 67, 67, 67, 67, 1077, 1078, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 139, 2158730, 2158730, 2158730, 2404490, 2412682, 1113, 97, 97, 97, 97, 97, 97, 1121, 97, 1123, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1540, 1155, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 615, 1168, 97, 97, 1171, 1172, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 45, 45, 45, 45, 1533, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1663, 45, 45, 45, 45, 45, 45, 45, 45, 45, 183, 45, 45, 45, 45, 201, 45, 45, 45, 1219, 45, 45, 45, 45, 45, 45, 45, 1226, 45, 45, 45, 45, 45, 168, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 427, 45, 45, 45, 45, 45, 45, 45, 1231, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1242, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1046, 67, 67, 1254, 67, 1256, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 806, 807, 67, 67, 97, 1336, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1111, 97, 97, 97, 97, 97, 1351, 97, 97, 97, 1354, 97, 97, 97, 1359, 97, 97, 97, 0, 97, 97, 97, 97, 1640, 97, 97, 97, 97, 97, 97, 97, 897, 97, 97, 97, 902, 97, 97, 97, 97, 97, 97, 97, 97, 1366, 97, 97, 97, 97, 97, 97, 97, 1371, 97, 97, 97, 0, 97, 97, 97, 1730, 97, 97, 97, 97, 97, 97, 97, 97, 915, 97, 97, 97, 97, 0, 360, 0, 67, 67, 67, 1440, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1017, 67, 1019, 67, 67, 67, 67, 67, 1453, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1459, 97, 97, 97, 1493, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1525, 97, 97, 97, 97, 97, 97, 1507, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1514, 67, 67, 67, 67, 1584, 67, 67, 67, 67, 67, 1590, 67, 67, 67, 67, 67, 67, 67, 783, 67, 67, 67, 788, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1599, 1601, 67, 67, 67, 1604, 67, 1606, 1607, 67, 1472, 0, 1474, 0, 1476, 0, 97, 97, 97, 97, 97, 97, 1614, 97, 97, 97, 97, 45, 45, 1850, 45, 45, 45, 45, 1855, 45, 45, 45, 45, 45, 1222, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1229, 97, 1618, 97, 97, 97, 97, 97, 97, 97, 1625, 97, 97, 97, 97, 97, 0, 1175, 0, 45, 45, 45, 45, 45, 45, 45, 45, 447, 45, 45, 45, 45, 45, 67, 67, 1633, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 1643, 1645, 97, 97, 0, 0, 97, 97, 1784, 97, 97, 97, 0, 0, 97, 97, 0, 97, 1894, 1895, 97, 1897, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 656, 45, 45, 45, 45, 45, 45, 97, 1648, 97, 1650, 1651, 97, 0, 45, 45, 45, 1654, 45, 45, 45, 45, 45, 169, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 658, 45, 45, 45, 45, 664, 45, 45, 1659, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1187, 45, 45, 1669, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1005, 67, 67, 1681, 67, 67, 67, 67, 67, 67, 67, 1686, 67, 67, 67, 67, 67, 67, 67, 784, 67, 67, 67, 67, 67, 67, 67, 67, 1055, 67, 67, 67, 67, 1060, 67, 67, 97, 97, 1713, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 1378, 45, 45, 45, 45, 45, 45, 45, 408, 45, 45, 45, 45, 45, 45, 45, 45, 1547, 45, 1549, 45, 45, 45, 45, 45, 97, 97, 1780, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 45, 2027, 2028, 45, 45, 67, 67, 2031, 2032, 67, 45, 45, 1804, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1917, 67, 67, 67, 67, 67, 67, 67, 1819, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1708, 97, 97, 97, 97, 97, 45, 45, 1862, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 497, 67, 67, 67, 1877, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 97, 97, 97, 97, 97, 1839, 0, 0, 97, 97, 97, 97, 1936, 0, 0, 97, 97, 97, 97, 97, 97, 1943, 1944, 1945, 45, 45, 45, 45, 670, 45, 45, 45, 45, 674, 45, 45, 45, 45, 678, 45, 1948, 45, 1950, 45, 45, 45, 45, 1955, 1956, 1957, 67, 67, 67, 1960, 67, 1962, 67, 67, 67, 67, 1967, 1968, 1969, 97, 0, 0, 0, 97, 97, 1974, 97, 0, 1936, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 1906, 0, 1977, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1746, 45, 45, 45, 45, 2011, 67, 67, 2013, 67, 67, 67, 2017, 97, 97, 0, 0, 2021, 97, 8192, 97, 97, 2025, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1916, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 140, 45, 45, 45, 1180, 45, 45, 45, 45, 1184, 45, 45, 45, 45, 45, 45, 45, 387, 45, 392, 45, 45, 396, 45, 45, 399, 45, 45, 67, 207, 67, 67, 67, 67, 67, 67, 236, 67, 67, 67, 67, 67, 67, 67, 800, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1603, 67, 67, 67, 67, 67, 0, 97, 97, 287, 97, 97, 97, 97, 97, 97, 316, 97, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 1656, 1657, 45, 376, 45, 45, 45, 45, 45, 388, 45, 45, 45, 45, 45, 45, 45, 45, 1406, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 462, 67, 67, 67, 67, 67, 474, 67, 67, 67, 67, 67, 67, 67, 817, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 97, 559, 97, 97, 97, 97, 97, 571, 97, 97, 97, 97, 97, 97, 896, 97, 97, 97, 900, 97, 97, 97, 97, 97, 97, 912, 914, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 391, 45, 45, 45, 45, 45, 45, 45, 45, 713, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 662, 45, 1140, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 636, 67, 67, 1283, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 513, 67, 67, 1363, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 889, 97, 97, 97, 1714, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 926, 45, 45, 45, 45, 45, 45, 45, 45, 672, 45, 45, 45, 45, 45, 45, 45, 45, 686, 45, 45, 45, 45, 45, 45, 45, 45, 944, 45, 45, 45, 45, 45, 45, 45, 45, 1676, 45, 45, 45, 45, 45, 45, 67, 97, 97, 97, 1833, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 1902, 45, 45, 45, 45, 45, 957, 45, 45, 45, 45, 961, 45, 963, 45, 45, 45, 67, 97, 2034, 0, 97, 97, 97, 97, 97, 2040, 45, 45, 45, 2042, 67, 67, 67, 67, 67, 67, 1574, 67, 67, 67, 67, 67, 1578, 67, 67, 67, 67, 67, 67, 799, 67, 67, 67, 804, 67, 67, 67, 67, 67, 67, 67, 1298, 0, 0, 0, 1304, 0, 0, 0, 1310, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 45, 1414, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 428, 45, 45, 45, 45, 45, 57889, 0, 0, 54074, 54074, 550, 831, 97, 97, 97, 97, 97, 97, 97, 97, 97, 568, 97, 97, 97, 97, 578, 97, 45, 45, 968, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1228, 45, 45, 67, 67, 67, 67, 67, 25398, 1082, 13112, 1086, 54074, 1090, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 67, 67, 67, 67, 1464, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 510, 67, 67, 67, 67, 97, 97, 97, 97, 1519, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 918, 97, 0, 0, 0, 0, 1528, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 976, 45, 1554, 45, 45, 45, 45, 45, 45, 45, 45, 1562, 45, 45, 1565, 45, 45, 45, 45, 683, 45, 45, 45, 687, 45, 45, 692, 45, 45, 45, 45, 45, 1953, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1014, 67, 67, 67, 67, 67, 67, 1568, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 1585, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1594, 97, 97, 1649, 97, 97, 97, 0, 45, 45, 1653, 45, 45, 45, 45, 45, 45, 383, 45, 45, 45, 45, 45, 45, 45, 45, 45, 986, 45, 45, 45, 45, 45, 45, 45, 45, 1670, 45, 1672, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 736, 67, 67, 67, 67, 67, 741, 67, 67, 67, 1680, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1074, 67, 67, 67, 1692, 67, 67, 67, 67, 67, 67, 67, 1697, 67, 1699, 67, 67, 67, 67, 67, 67, 1012, 67, 67, 67, 67, 67, 67, 67, 67, 67, 468, 475, 67, 67, 67, 67, 67, 67, 1769, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 624, 97, 97, 97, 97, 97, 97, 634, 97, 97, 1792, 97, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 958, 45, 45, 45, 45, 45, 45, 964, 45, 150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 977, 204, 45, 67, 67, 67, 217, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 787, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 271, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 351, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 938, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1398, 45, 45, 45, 153, 45, 161, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 660, 661, 45, 45, 205, 45, 67, 67, 67, 67, 220, 67, 228, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 280, 94, 0, 0, 67, 67, 67, 67, 67, 272, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 97, 352, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 439, 45, 45, 45, 45, 45, 445, 45, 45, 45, 452, 45, 45, 67, 67, 212, 216, 67, 67, 67, 67, 67, 241, 67, 246, 67, 252, 67, 67, 486, 67, 67, 67, 67, 67, 67, 67, 494, 67, 67, 67, 67, 67, 67, 67, 1245, 67, 67, 67, 67, 67, 67, 67, 67, 1013, 67, 67, 1016, 67, 67, 67, 67, 67, 521, 67, 67, 525, 67, 67, 67, 67, 67, 531, 67, 67, 67, 538, 67, 0, 0, 2046, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1192, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1418, 45, 45, 1421, 97, 97, 583, 97, 97, 97, 97, 97, 97, 97, 591, 97, 97, 97, 97, 97, 97, 913, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 1384, 97, 618, 97, 97, 622, 97, 97, 97, 97, 97, 628, 97, 97, 97, 635, 97, 18, 131427, 0, 0, 0, 639, 0, 132, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 932, 45, 45, 45, 45, 45, 1544, 45, 45, 45, 45, 45, 1550, 45, 45, 45, 45, 45, 1194, 45, 1196, 45, 45, 45, 45, 45, 45, 45, 45, 999, 45, 45, 45, 45, 45, 67, 67, 45, 45, 667, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1408, 45, 45, 45, 696, 45, 45, 45, 701, 45, 45, 45, 45, 45, 45, 45, 45, 710, 45, 45, 45, 1220, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 194, 45, 45, 45, 729, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 797, 67, 67, 67, 67, 67, 67, 805, 67, 67, 67, 67, 67, 67, 67, 1587, 67, 1589, 67, 67, 67, 67, 67, 67, 67, 67, 1763, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162968, 0, 0, 67, 67, 67, 67, 67, 814, 816, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1008, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1020, 67, 0, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1429, 67, 1430, 67, 67, 67, 67, 67, 1062, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 518, 1076, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 0, 28809, 0, 139, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1102, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1124, 97, 1126, 97, 97, 1114, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1112, 97, 97, 1156, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 594, 97, 97, 97, 97, 1170, 97, 97, 97, 97, 0, 921, 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, 1532, 45, 45, 45, 45, 1536, 45, 45, 45, 45, 45, 172, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 706, 45, 45, 709, 45, 45, 1177, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1202, 45, 1204, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1215, 45, 45, 45, 1232, 45, 45, 45, 45, 45, 45, 45, 67, 1237, 67, 67, 67, 67, 67, 67, 1053, 1054, 67, 67, 67, 67, 67, 67, 1061, 67, 67, 1282, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1289, 67, 67, 67, 1292, 97, 97, 97, 97, 1339, 97, 97, 97, 97, 97, 97, 1344, 97, 97, 97, 97, 45, 1849, 45, 1851, 45, 45, 45, 45, 45, 45, 45, 45, 721, 45, 45, 45, 45, 45, 726, 45, 1385, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1188, 45, 45, 1401, 1402, 45, 45, 45, 45, 1405, 45, 45, 45, 45, 45, 45, 45, 45, 1752, 45, 45, 45, 45, 45, 67, 67, 1410, 45, 45, 45, 1413, 45, 1415, 45, 45, 45, 45, 45, 45, 1419, 45, 45, 45, 45, 1806, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 97, 97, 2019, 0, 97, 67, 67, 67, 1452, 67, 67, 67, 67, 67, 67, 67, 67, 1457, 67, 67, 67, 67, 67, 67, 1259, 67, 67, 67, 67, 67, 67, 1264, 67, 67, 1460, 67, 1462, 67, 67, 67, 67, 67, 67, 1466, 67, 67, 67, 67, 67, 67, 67, 67, 1588, 67, 67, 67, 67, 67, 67, 67, 0, 1300, 0, 0, 0, 1306, 0, 0, 0, 97, 97, 97, 1506, 97, 97, 97, 97, 97, 97, 97, 97, 1512, 97, 97, 97, 0, 1728, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 901, 97, 97, 97, 97, 1515, 97, 1517, 97, 97, 97, 97, 97, 97, 1521, 97, 97, 97, 97, 97, 97, 0, 45, 1652, 45, 45, 45, 1655, 45, 45, 45, 45, 45, 1542, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1552, 1553, 45, 45, 45, 1556, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 693, 45, 45, 45, 67, 67, 67, 67, 1572, 67, 67, 67, 67, 1576, 67, 67, 67, 67, 67, 67, 67, 67, 1602, 67, 67, 1605, 67, 67, 67, 0, 67, 1582, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1580, 67, 67, 1596, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 542, 0, 544, 67, 67, 67, 67, 1759, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 533, 67, 67, 67, 67, 67, 67, 67, 1770, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 1777, 97, 97, 97, 1793, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 998, 45, 45, 1001, 1002, 45, 45, 67, 67, 45, 1861, 45, 67, 67, 67, 67, 67, 67, 67, 67, 1871, 67, 1873, 1874, 67, 0, 97, 45, 67, 0, 97, 45, 67, 16384, 97, 45, 67, 97, 0, 0, 0, 1473, 0, 1082, 0, 0, 0, 1475, 0, 1086, 0, 0, 0, 1477, 1876, 67, 97, 97, 97, 97, 97, 1883, 0, 1885, 97, 97, 97, 1889, 0, 0, 0, 286, 0, 0, 0, 286, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 40976, 0, 18, 18, 24, 24, 126, 126, 126, 2053, 0, 2055, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 2039, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 226, 67, 67, 67, 67, 67, 67, 67, 67, 1246, 67, 67, 1249, 1250, 67, 67, 67, 132, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 141, 45, 45, 45, 1403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1186, 45, 45, 1189, 45, 45, 155, 45, 45, 45, 45, 45, 45, 45, 45, 45, 191, 45, 45, 45, 45, 700, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1753, 45, 45, 45, 67, 67, 45, 45, 67, 208, 67, 67, 67, 222, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1764, 67, 67, 67, 67, 67, 67, 67, 258, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 288, 97, 97, 97, 302, 97, 97, 97, 97, 97, 97, 97, 97, 97, 627, 97, 97, 97, 97, 97, 97, 338, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 370, 45, 45, 45, 45, 716, 45, 45, 45, 45, 45, 722, 45, 45, 45, 45, 45, 45, 1912, 67, 67, 67, 67, 67, 67, 67, 67, 67, 819, 67, 67, 25398, 542, 13112, 544, 45, 403, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1409, 45, 67, 67, 67, 67, 489, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 771, 67, 67, 67, 67, 520, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 534, 67, 67, 67, 67, 67, 67, 1271, 67, 67, 67, 1274, 67, 67, 67, 1279, 67, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 553, 97, 97, 97, 97, 586, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1138, 97, 97, 97, 97, 617, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 631, 97, 97, 97, 0, 1834, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 353, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 45, 668, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 724, 45, 45, 45, 45, 45, 682, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 949, 45, 45, 45, 67, 67, 747, 748, 67, 67, 67, 67, 755, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 1302, 0, 0, 0, 1308, 0, 67, 794, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1701, 67, 97, 97, 97, 845, 846, 97, 97, 97, 97, 853, 97, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 97, 892, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 610, 97, 97, 45, 992, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 1239, 67, 67, 67, 1063, 67, 67, 67, 67, 67, 1068, 67, 67, 67, 67, 67, 67, 67, 0, 0, 1301, 0, 0, 0, 1307, 0, 0, 97, 1141, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1152, 97, 97, 0, 0, 97, 97, 2001, 0, 97, 2003, 97, 97, 97, 45, 45, 45, 1739, 45, 45, 45, 1742, 45, 45, 45, 45, 45, 97, 97, 97, 97, 1157, 97, 97, 97, 97, 97, 1162, 97, 97, 97, 97, 97, 97, 1145, 97, 97, 97, 97, 97, 1151, 97, 97, 97, 1253, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 539, 45, 1423, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1431, 67, 67, 67, 67, 67, 67, 67, 1695, 67, 67, 67, 67, 67, 1700, 67, 1702, 67, 67, 1439, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 514, 67, 67, 97, 97, 1492, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 611, 97, 97, 1703, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 97, 97, 852, 97, 97, 97, 97, 97, 97, 45, 1949, 45, 1951, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 1961, 67, 0, 97, 45, 67, 0, 97, 2060, 2061, 0, 2062, 45, 67, 97, 0, 0, 2036, 97, 97, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 67, 223, 67, 67, 237, 67, 67, 67, 67, 67, 67, 67, 1272, 67, 67, 67, 67, 67, 67, 67, 67, 507, 67, 67, 67, 67, 67, 67, 67, 1963, 67, 67, 67, 97, 97, 97, 97, 0, 1972, 0, 97, 97, 97, 1975, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 931, 45, 45, 45, 45, 45, 407, 45, 45, 45, 45, 45, 45, 45, 45, 45, 417, 45, 45, 1989, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1996, 97, 18, 131427, 0, 0, 360, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 930, 45, 45, 45, 45, 45, 45, 444, 45, 45, 45, 45, 45, 45, 45, 67, 67, 97, 97, 1998, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1985, 45, 1986, 45, 45, 45, 156, 45, 45, 170, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 675, 45, 45, 45, 45, 679, 131427, 0, 358, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 381, 45, 45, 45, 45, 45, 45, 45, 45, 45, 400, 45, 45, 419, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 436, 67, 67, 67, 67, 67, 505, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 820, 67, 25398, 542, 13112, 544, 67, 67, 522, 67, 67, 67, 67, 67, 529, 67, 67, 67, 67, 67, 67, 67, 0, 1299, 0, 0, 0, 1305, 0, 0, 0, 97, 97, 619, 97, 97, 97, 97, 97, 626, 97, 97, 97, 97, 97, 97, 97, 1105, 97, 97, 97, 97, 1109, 97, 97, 97, 67, 67, 67, 67, 749, 67, 67, 67, 67, 67, 67, 67, 67, 67, 760, 67, 0, 97, 45, 67, 2058, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 97, 97, 97, 97, 45, 45, 45, 2041, 67, 67, 67, 67, 67, 780, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 516, 67, 67, 97, 97, 97, 878, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1629, 97, 0, 45, 979, 45, 45, 45, 45, 984, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1198, 45, 45, 45, 45, 45, 45, 67, 1023, 67, 67, 67, 67, 1028, 67, 67, 67, 67, 67, 67, 67, 67, 67, 470, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1094, 0, 0, 0, 1092, 1315, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1486, 97, 1489, 97, 97, 97, 1117, 97, 97, 97, 97, 1122, 97, 97, 97, 97, 97, 97, 97, 1146, 97, 97, 97, 97, 97, 97, 97, 97, 881, 97, 97, 97, 886, 97, 97, 97, 1311, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1615, 97, 97, 97, 97, 97, 1619, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1631, 97, 97, 1847, 97, 45, 45, 45, 45, 1852, 45, 45, 45, 45, 45, 45, 45, 1235, 45, 45, 45, 67, 67, 67, 67, 67, 1868, 67, 67, 67, 1872, 67, 67, 67, 67, 67, 97, 97, 97, 97, 1882, 0, 0, 0, 97, 97, 97, 97, 0, 1891, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 1929, 0, 0, 97, 97, 97, 97, 97, 97, 45, 1900, 45, 1901, 45, 45, 45, 1905, 45, 67, 2054, 97, 45, 67, 0, 97, 45, 67, 0, 97, 45, 67, 97, 0, 0, 97, 2037, 2038, 97, 97, 45, 45, 45, 45, 67, 67, 67, 67, 1867, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1774, 97, 97, 97, 97, 97, 97, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 142, 45, 45, 45, 1412, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 432, 45, 45, 45, 45, 45, 157, 45, 45, 171, 45, 45, 45, 182, 45, 45, 45, 45, 200, 45, 45, 45, 1543, 45, 45, 45, 45, 45, 45, 45, 45, 1551, 45, 45, 45, 45, 1181, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1211, 45, 45, 45, 1214, 45, 45, 45, 67, 209, 67, 67, 67, 224, 67, 67, 238, 67, 67, 67, 249, 67, 0, 97, 2056, 2057, 0, 2059, 45, 67, 0, 97, 45, 67, 97, 0, 0, 1937, 97, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1741, 45, 45, 45, 45, 45, 45, 67, 67, 67, 267, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 289, 97, 97, 97, 304, 97, 97, 318, 97, 97, 97, 329, 97, 97, 0, 0, 97, 1783, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 45, 2026, 45, 45, 45, 45, 67, 2030, 67, 67, 67, 67, 67, 67, 1041, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1044, 67, 67, 67, 67, 67, 67, 97, 97, 347, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 45, 666, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1420, 45, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 840, 67, 1007, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 759, 67, 67, 67, 67, 67, 67, 67, 1052, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1031, 67, 67, 67, 67, 67, 97, 97, 97, 1101, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 592, 97, 97, 97, 1190, 45, 45, 45, 45, 45, 1195, 45, 1197, 45, 45, 45, 45, 1201, 45, 45, 45, 45, 1952, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 250, 67, 67, 67, 1255, 67, 1257, 67, 67, 67, 67, 1261, 67, 67, 67, 67, 67, 67, 67, 67, 1685, 67, 67, 67, 67, 67, 67, 67, 0, 24851, 12565, 0, 0, 0, 0, 28809, 53532, 67, 67, 1267, 67, 67, 67, 67, 67, 67, 1273, 67, 67, 67, 67, 67, 67, 67, 67, 1696, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 2162688, 0, 0, 1281, 67, 67, 67, 67, 1285, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1070, 67, 67, 67, 67, 67, 1335, 97, 1337, 97, 97, 97, 97, 1341, 97, 97, 97, 97, 97, 97, 97, 97, 882, 97, 97, 97, 97, 97, 97, 97, 1347, 97, 97, 97, 97, 97, 97, 1353, 97, 97, 97, 97, 97, 97, 1361, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 544, 0, 550, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2473984, 2158592, 2158592, 2158592, 2990080, 2158592, 2158592, 2207744, 2207744, 2482176, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 2207744, 0, 0, 0, 0, 0, 0, 2162688, 0, 53530, 97, 97, 97, 1365, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 608, 97, 97, 97, 45, 45, 1424, 45, 1425, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1058, 67, 67, 67, 67, 45, 1555, 45, 45, 1557, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 707, 45, 45, 45, 45, 67, 67, 1570, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 773, 67, 67, 1595, 67, 67, 1597, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 2158592, 2158592, 2158592, 2404352, 2412544, 97, 97, 97, 1636, 97, 97, 97, 1639, 97, 97, 1641, 97, 97, 97, 97, 97, 97, 1173, 0, 921, 0, 0, 0, 0, 0, 0, 45, 67, 67, 67, 1693, 67, 67, 67, 67, 67, 67, 67, 1698, 67, 67, 67, 67, 67, 67, 67, 1773, 67, 97, 97, 97, 97, 97, 97, 97, 625, 97, 97, 97, 97, 97, 97, 97, 97, 850, 97, 97, 97, 97, 97, 97, 97, 97, 880, 97, 97, 97, 97, 97, 97, 97, 97, 1106, 97, 97, 97, 97, 97, 97, 97, 1860, 45, 45, 67, 67, 1865, 67, 67, 67, 67, 1870, 67, 67, 67, 67, 1875, 67, 67, 97, 97, 1880, 97, 97, 0, 0, 0, 97, 97, 1888, 97, 0, 0, 0, 1938, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 1854, 45, 45, 45, 45, 45, 45, 45, 1909, 45, 45, 1911, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1248, 67, 67, 67, 67, 67, 67, 1922, 67, 67, 1924, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 1898, 45, 45, 45, 45, 45, 45, 1904, 45, 45, 67, 67, 67, 67, 97, 97, 97, 97, 0, 0, 16384, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 1724, 2008, 2009, 45, 45, 67, 67, 67, 2014, 2015, 67, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2022, 0, 2023, 97, 97, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1869, 67, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 147, 151, 154, 45, 162, 45, 45, 176, 178, 181, 45, 45, 45, 192, 196, 45, 45, 45, 45, 2012, 67, 67, 67, 67, 67, 67, 2018, 97, 0, 0, 97, 1978, 97, 97, 97, 1982, 45, 45, 45, 45, 45, 45, 45, 45, 45, 972, 973, 45, 45, 45, 45, 45, 67, 259, 263, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 294, 298, 301, 97, 309, 97, 97, 323, 325, 328, 97, 97, 97, 97, 97, 560, 97, 97, 97, 569, 97, 97, 97, 97, 97, 97, 306, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1624, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 1175, 0, 0, 0, 0, 45, 339, 343, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 67, 67, 503, 67, 67, 67, 67, 67, 67, 67, 67, 67, 512, 67, 67, 519, 97, 97, 600, 97, 97, 97, 97, 97, 97, 97, 97, 97, 609, 97, 97, 616, 45, 649, 45, 45, 45, 45, 45, 654, 45, 45, 45, 45, 45, 45, 45, 45, 1393, 45, 45, 45, 45, 45, 45, 45, 45, 1209, 45, 45, 45, 45, 45, 45, 45, 67, 763, 67, 67, 67, 67, 67, 67, 67, 67, 770, 67, 67, 67, 774, 67, 0, 2045, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 994, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 213, 67, 219, 67, 67, 232, 67, 242, 67, 247, 67, 67, 67, 779, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1018, 67, 67, 67, 67, 811, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 834, 97, 97, 97, 97, 97, 839, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 645, 97, 97, 861, 97, 97, 97, 97, 97, 97, 97, 97, 868, 97, 97, 97, 872, 97, 97, 877, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 613, 97, 97, 97, 97, 97, 909, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 18, 18, 24, 24, 27, 27, 27, 1036, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1047, 67, 67, 67, 1050, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1033, 67, 67, 67, 97, 97, 1130, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 67, 67, 67, 1295, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 1317, 97, 97, 97, 97, 97, 97, 1375, 97, 97, 97, 0, 0, 0, 45, 1379, 45, 45, 45, 45, 45, 45, 422, 45, 45, 45, 429, 431, 45, 45, 45, 45, 0, 1090, 0, 0, 97, 1479, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1357, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1716, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1723, 0, 921, 29315, 0, 0, 0, 0, 45, 929, 45, 45, 45, 45, 45, 45, 45, 1392, 45, 45, 45, 45, 45, 45, 45, 45, 45, 960, 45, 45, 45, 45, 45, 45, 97, 97, 97, 1738, 45, 45, 45, 45, 45, 45, 45, 1743, 45, 45, 45, 45, 166, 45, 45, 45, 45, 184, 186, 45, 45, 197, 45, 45, 97, 1779, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 18, 131427, 0, 638, 0, 0, 0, 0, 362, 0, 640, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1537, 45, 45, 45, 45, 45, 1803, 45, 45, 45, 45, 45, 1809, 45, 45, 45, 67, 67, 67, 1814, 67, 67, 67, 67, 67, 67, 1821, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 0, 67, 67, 67, 1818, 67, 67, 67, 67, 67, 1824, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1890, 0, 1829, 97, 97, 0, 0, 97, 97, 1836, 97, 97, 0, 0, 0, 97, 97, 97, 97, 1981, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1987, 1845, 97, 97, 97, 45, 45, 45, 45, 45, 1853, 45, 45, 45, 1857, 45, 45, 45, 67, 1864, 67, 1866, 67, 67, 67, 67, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 97, 97, 1710, 1711, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1886, 97, 97, 97, 0, 0, 97, 97, 97, 97, 1838, 0, 0, 0, 97, 1843, 97, 0, 1893, 97, 97, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1745, 45, 45, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 1931, 97, 97, 97, 97, 97, 588, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 629, 97, 97, 97, 97, 97, 67, 2044, 0, 97, 97, 97, 97, 45, 45, 67, 67, 0, 0, 97, 97, 45, 45, 45, 1660, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 453, 45, 455, 67, 67, 67, 67, 268, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 348, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 359, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 421, 45, 45, 45, 45, 45, 45, 45, 434, 45, 45, 695, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1667, 45, 0, 921, 29315, 0, 925, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1811, 45, 67, 67, 67, 67, 67, 67, 1037, 67, 1039, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1277, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 1095, 0, 0, 0, 1096, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 869, 97, 97, 97, 97, 97, 97, 1131, 97, 1133, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1370, 97, 97, 97, 97, 97, 1312, 0, 0, 0, 0, 1096, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 1327, 97, 97, 97, 97, 97, 1332, 97, 97, 97, 1830, 97, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1896, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1548, 45, 45, 45, 45, 45, 45, 133, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 45, 380, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 401, 45, 45, 158, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1200, 45, 45, 45, 45, 206, 67, 67, 67, 67, 67, 225, 67, 67, 67, 67, 67, 67, 67, 67, 754, 67, 67, 67, 67, 67, 67, 67, 57889, 0, 0, 54074, 54074, 550, 832, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1342, 97, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 25398, 1083, 13112, 1087, 54074, 1091, 0, 0, 0, 0, 0, 0, 1316, 0, 831, 97, 97, 97, 97, 97, 97, 97, 1174, 921, 0, 1175, 0, 0, 0, 0, 45, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 45, 148, 67, 67, 264, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 97, 295, 97, 97, 97, 97, 313, 97, 97, 97, 97, 331, 333, 97, 18, 131427, 356, 638, 0, 0, 0, 0, 362, 0, 0, 365, 0, 367, 0, 45, 45, 1530, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 988, 45, 45, 45, 97, 344, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 402, 404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1756, 67, 438, 45, 45, 45, 45, 45, 45, 45, 45, 449, 450, 45, 45, 45, 67, 67, 214, 218, 221, 67, 229, 67, 67, 243, 245, 248, 67, 67, 67, 67, 67, 488, 490, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1071, 67, 1073, 67, 67, 67, 67, 67, 524, 67, 67, 67, 67, 67, 67, 67, 67, 535, 536, 67, 67, 67, 67, 67, 67, 1683, 1684, 67, 67, 67, 67, 1688, 1689, 67, 67, 67, 67, 67, 67, 1586, 67, 67, 67, 67, 67, 67, 67, 67, 67, 469, 67, 67, 67, 67, 67, 67, 97, 97, 97, 585, 587, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1163, 97, 97, 97, 97, 97, 97, 97, 621, 97, 97, 97, 97, 97, 97, 97, 97, 632, 633, 97, 97, 0, 0, 1782, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 712, 45, 45, 45, 717, 45, 45, 45, 45, 45, 45, 45, 45, 725, 45, 45, 45, 163, 167, 173, 177, 45, 45, 45, 45, 45, 193, 45, 45, 45, 45, 982, 45, 45, 45, 45, 45, 45, 987, 45, 45, 45, 45, 45, 1558, 45, 1560, 45, 45, 45, 45, 45, 45, 45, 45, 704, 705, 45, 45, 45, 45, 45, 45, 45, 45, 731, 45, 45, 45, 67, 67, 67, 67, 67, 739, 67, 67, 67, 67, 67, 67, 273, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 67, 67, 67, 764, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1290, 67, 67, 67, 67, 67, 67, 812, 67, 67, 67, 67, 818, 67, 67, 67, 25398, 542, 13112, 544, 57889, 0, 0, 54074, 54074, 550, 0, 97, 97, 97, 97, 97, 837, 97, 97, 97, 97, 97, 602, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1137, 97, 97, 97, 97, 97, 97, 97, 97, 97, 862, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1627, 97, 97, 97, 0, 97, 97, 97, 97, 910, 97, 97, 97, 97, 916, 97, 97, 97, 0, 0, 0, 97, 97, 1940, 97, 97, 1942, 45, 45, 45, 45, 45, 45, 385, 45, 45, 45, 45, 395, 45, 45, 45, 45, 966, 45, 969, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 975, 45, 45, 45, 406, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 974, 45, 45, 45, 67, 67, 67, 67, 1010, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1262, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1040, 67, 1042, 67, 1045, 67, 67, 67, 67, 67, 67, 67, 97, 1706, 97, 97, 97, 1709, 97, 97, 97, 67, 67, 67, 67, 1051, 67, 67, 67, 67, 67, 1057, 67, 67, 67, 67, 67, 67, 67, 1443, 67, 67, 1446, 67, 67, 67, 67, 67, 67, 67, 1297, 0, 0, 0, 1303, 0, 0, 0, 1309, 67, 67, 67, 67, 1079, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2207744, 2207744, 2207744, 2207744, 2207744, 2572288, 2207744, 2207744, 2207744, 1098, 97, 97, 97, 97, 97, 1104, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1356, 97, 97, 97, 97, 97, 97, 1128, 97, 97, 97, 97, 97, 97, 1134, 97, 1136, 97, 1139, 97, 97, 97, 97, 97, 97, 1622, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 0, 1176, 0, 646, 45, 67, 67, 67, 1268, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1469, 67, 67, 67, 97, 1348, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1127, 97, 67, 1569, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1448, 1449, 67, 1816, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1825, 67, 67, 1827, 97, 97, 0, 1781, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 1831, 0, 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 1980, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1395, 45, 45, 45, 45, 45, 97, 1846, 97, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1212, 45, 45, 45, 45, 45, 45, 2010, 45, 67, 67, 67, 67, 67, 2016, 67, 97, 97, 0, 0, 97, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 2007, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 143, 45, 45, 45, 1671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 1813, 67, 67, 1815, 45, 45, 67, 210, 67, 67, 67, 67, 67, 67, 239, 67, 67, 67, 67, 67, 67, 67, 1454, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1445, 67, 67, 67, 67, 67, 67, 97, 97, 290, 97, 97, 97, 97, 97, 97, 319, 97, 97, 97, 97, 97, 97, 303, 97, 97, 317, 97, 97, 97, 97, 97, 97, 305, 97, 97, 97, 97, 97, 97, 97, 97, 97, 899, 97, 97, 97, 97, 97, 97, 375, 45, 45, 45, 379, 45, 45, 390, 45, 45, 394, 45, 45, 45, 45, 45, 443, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 461, 67, 67, 67, 465, 67, 67, 476, 67, 67, 480, 67, 67, 67, 67, 67, 67, 1694, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1288, 67, 67, 67, 67, 67, 67, 500, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1075, 97, 97, 97, 558, 97, 97, 97, 562, 97, 97, 573, 97, 97, 577, 97, 97, 97, 97, 97, 895, 97, 97, 97, 97, 97, 97, 903, 97, 97, 97, 0, 97, 97, 1638, 97, 97, 97, 97, 97, 97, 97, 97, 1646, 597, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1334, 45, 681, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1396, 45, 45, 1399, 45, 45, 730, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1434, 67, 67, 67, 67, 67, 67, 750, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1456, 67, 67, 67, 67, 67, 45, 45, 993, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1238, 67, 67, 1006, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1280, 1048, 1049, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1059, 67, 67, 67, 67, 67, 67, 1286, 67, 67, 67, 67, 67, 67, 67, 1291, 67, 97, 97, 1100, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 638, 0, 920, 97, 97, 1142, 1143, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1153, 97, 97, 97, 97, 97, 1158, 97, 97, 97, 1161, 97, 97, 97, 97, 1166, 97, 97, 97, 97, 97, 1325, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1328, 97, 97, 97, 97, 97, 97, 97, 45, 1218, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1678, 45, 45, 45, 67, 67, 67, 67, 67, 1269, 67, 67, 67, 67, 67, 67, 67, 67, 1278, 67, 67, 67, 67, 67, 67, 1761, 67, 67, 67, 67, 67, 67, 67, 67, 67, 530, 67, 67, 67, 67, 67, 67, 97, 97, 1349, 97, 97, 97, 97, 97, 97, 97, 97, 1358, 97, 97, 97, 97, 97, 97, 1623, 97, 97, 97, 97, 97, 97, 97, 97, 0, 921, 0, 0, 926, 0, 0, 0, 45, 45, 1411, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1754, 45, 45, 67, 67, 1301, 0, 1307, 0, 1313, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 21054, 97, 97, 97, 97, 67, 1757, 67, 67, 67, 1760, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1467, 67, 67, 67, 67, 67, 1778, 97, 0, 0, 97, 97, 97, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 97, 97, 1352, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1511, 97, 97, 97, 97, 97, 67, 67, 67, 67, 67, 1820, 67, 1822, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 97, 1933, 97, 1892, 97, 97, 97, 97, 97, 97, 1899, 45, 45, 45, 45, 45, 45, 45, 45, 1664, 45, 45, 45, 45, 45, 45, 45, 45, 1546, 45, 45, 45, 45, 45, 45, 45, 45, 1208, 45, 45, 45, 45, 45, 45, 45, 45, 1224, 45, 45, 45, 45, 45, 45, 45, 45, 673, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 1925, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 623, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 307, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1796, 97, 45, 45, 45, 45, 45, 45, 45, 970, 45, 45, 45, 45, 45, 45, 45, 45, 1417, 45, 45, 45, 45, 45, 45, 45, 67, 1964, 67, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1721, 97, 97, 0, 0, 1997, 97, 0, 0, 2000, 97, 97, 0, 97, 97, 97, 97, 97, 45, 45, 45, 45, 733, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 803, 67, 67, 67, 67, 67, 0, 94242, 0, 0, 0, 38, 102439, 0, 0, 106538, 98347, 28809, 45, 45, 144, 45, 45, 45, 1805, 45, 1807, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 231, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 45, 45, 67, 211, 67, 67, 67, 67, 230, 234, 240, 244, 67, 67, 67, 67, 67, 67, 464, 67, 67, 67, 67, 67, 67, 479, 67, 67, 67, 260, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 97, 291, 97, 97, 97, 97, 310, 314, 320, 324, 97, 97, 97, 97, 97, 97, 1367, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1355, 97, 97, 97, 97, 97, 97, 1362, 340, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 360, 0, 362, 0, 365, 28809, 367, 139, 369, 45, 45, 45, 374, 67, 67, 460, 67, 67, 67, 67, 466, 67, 67, 67, 67, 67, 67, 67, 67, 801, 67, 67, 67, 67, 67, 67, 67, 67, 67, 487, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 498, 67, 67, 67, 67, 67, 67, 1772, 67, 67, 97, 97, 97, 97, 97, 97, 97, 0, 921, 922, 1175, 0, 0, 0, 0, 45, 67, 502, 67, 67, 67, 67, 67, 67, 67, 508, 67, 67, 67, 515, 517, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 0, 0, 1932, 97, 97, 0, 1999, 97, 97, 97, 0, 97, 97, 2004, 2005, 97, 45, 45, 45, 45, 1193, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 676, 45, 45, 45, 45, 67, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 552, 97, 97, 97, 97, 97, 1377, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 655, 45, 45, 45, 45, 45, 45, 45, 97, 97, 557, 97, 97, 97, 97, 563, 97, 97, 97, 97, 97, 97, 97, 97, 1135, 97, 97, 97, 97, 97, 97, 97, 97, 97, 584, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 595, 97, 97, 97, 97, 97, 911, 97, 97, 97, 97, 97, 97, 97, 638, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 97, 97, 97, 1319, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 1733, 97, 97, 97, 97, 97, 97, 1340, 97, 97, 97, 1343, 97, 97, 1345, 97, 1346, 97, 599, 97, 97, 97, 97, 97, 97, 97, 605, 97, 97, 97, 612, 614, 97, 97, 97, 97, 97, 1794, 97, 97, 97, 45, 45, 45, 45, 45, 45, 45, 1207, 45, 45, 45, 45, 45, 45, 1213, 45, 45, 745, 67, 67, 67, 67, 751, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1577, 67, 67, 67, 67, 67, 762, 67, 67, 67, 67, 766, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1765, 67, 67, 67, 67, 67, 777, 67, 67, 781, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1592, 1593, 67, 67, 97, 843, 97, 97, 97, 97, 849, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1510, 97, 97, 97, 97, 97, 97, 97, 860, 97, 97, 97, 97, 864, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1797, 45, 45, 45, 45, 1801, 45, 97, 875, 97, 97, 879, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1522, 97, 97, 97, 97, 97, 991, 45, 45, 45, 45, 996, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 215, 67, 67, 67, 67, 233, 67, 67, 67, 67, 251, 253, 1022, 67, 67, 67, 1026, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1035, 67, 67, 1038, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1458, 67, 67, 67, 67, 67, 1064, 67, 67, 67, 1067, 67, 67, 67, 67, 1072, 67, 67, 67, 67, 67, 67, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367488, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 1096, 0, 921, 29315, 0, 0, 0, 0, 928, 45, 45, 45, 45, 45, 934, 45, 45, 45, 164, 45, 45, 45, 45, 45, 45, 45, 45, 45, 198, 45, 45, 45, 378, 45, 45, 45, 45, 45, 45, 393, 45, 45, 45, 398, 45, 97, 97, 1116, 97, 97, 97, 1120, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1147, 1148, 97, 97, 97, 97, 97, 97, 97, 1129, 97, 97, 1132, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1626, 97, 97, 97, 97, 0, 45, 1178, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1185, 45, 45, 45, 45, 441, 45, 45, 45, 45, 45, 45, 451, 45, 45, 67, 67, 67, 67, 67, 227, 67, 67, 67, 67, 67, 67, 67, 67, 1260, 67, 67, 67, 1263, 67, 67, 1265, 1203, 45, 45, 1205, 45, 1206, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1216, 67, 1266, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1276, 67, 67, 67, 67, 67, 67, 492, 67, 67, 67, 67, 67, 67, 67, 67, 67, 471, 67, 67, 67, 67, 481, 67, 45, 1386, 45, 1389, 45, 45, 45, 45, 1394, 45, 45, 45, 1397, 45, 45, 45, 45, 995, 45, 997, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 1915, 67, 67, 67, 67, 67, 1422, 45, 45, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1433, 67, 1436, 67, 67, 67, 67, 1441, 67, 67, 67, 1444, 67, 67, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 281, 28809, 53531, 97, 97, 97, 97, 1494, 97, 97, 97, 1497, 97, 97, 97, 97, 97, 97, 97, 1368, 97, 97, 97, 97, 97, 97, 97, 97, 851, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1571, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 67, 67, 1583, 67, 67, 67, 67, 67, 67, 67, 67, 1591, 67, 67, 67, 67, 67, 67, 752, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1056, 67, 67, 67, 67, 67, 67, 97, 1634, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1125, 97, 97, 97, 1647, 97, 97, 97, 97, 97, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1183, 45, 45, 45, 45, 45, 45, 45, 45, 45, 409, 45, 45, 45, 45, 45, 45, 1658, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1668, 1712, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 1835, 97, 97, 97, 97, 0, 0, 0, 97, 97, 1844, 97, 97, 1726, 0, 97, 97, 97, 97, 97, 1732, 97, 1734, 97, 97, 97, 97, 97, 300, 97, 308, 97, 97, 97, 97, 97, 97, 97, 97, 866, 97, 97, 97, 97, 97, 97, 97, 67, 67, 67, 1758, 67, 67, 67, 1762, 67, 67, 67, 67, 67, 67, 67, 67, 1043, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1771, 67, 67, 67, 97, 97, 97, 97, 97, 1776, 97, 97, 97, 97, 297, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1108, 97, 97, 97, 97, 67, 67, 67, 1966, 97, 97, 97, 1970, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 97, 1720, 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, 1837, 97, 0, 1840, 1841, 97, 97, 97, 1988, 45, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1994, 1995, 67, 97, 97, 97, 97, 97, 1103, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 917, 97, 97, 0, 0, 0, 67, 67, 265, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 345, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 131427, 0, 0, 0, 361, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 671, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 411, 45, 45, 414, 45, 45, 45, 45, 377, 45, 45, 45, 386, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1223, 45, 45, 45, 45, 45, 45, 45, 45, 45, 426, 45, 45, 433, 45, 45, 45, 67, 67, 67, 67, 67, 463, 67, 67, 67, 472, 67, 67, 67, 67, 67, 67, 67, 527, 67, 67, 67, 67, 67, 67, 537, 67, 540, 24850, 24850, 12564, 12564, 0, 57889, 0, 0, 0, 53531, 53531, 367, 286, 97, 97, 97, 97, 97, 1119, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1509, 97, 97, 97, 97, 97, 97, 97, 97, 564, 97, 97, 97, 97, 97, 97, 97, 637, 18, 131427, 0, 0, 0, 0, 0, 0, 362, 0, 0, 365, 29315, 367, 0, 921, 29315, 0, 0, 0, 927, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1234, 45, 45, 45, 45, 67, 67, 67, 67, 1240, 45, 697, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 708, 45, 45, 45, 45, 1221, 45, 45, 45, 45, 1225, 45, 45, 45, 45, 45, 45, 384, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1210, 45, 45, 45, 45, 45, 45, 67, 67, 795, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1470, 67, 67, 67, 67, 67, 67, 67, 815, 67, 67, 67, 67, 67, 67, 25398, 542, 13112, 544, 97, 97, 97, 893, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1164, 97, 97, 97, 67, 67, 67, 1025, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1687, 67, 67, 67, 67, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 0, 0, 0, 1097, 1241, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1450, 45, 45, 1388, 45, 1390, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1236, 67, 67, 67, 67, 67, 1437, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1472, 1490, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1503, 67, 67, 67, 67, 67, 97, 97, 97, 97, 97, 0, 1930, 0, 97, 97, 97, 97, 97, 847, 97, 97, 97, 97, 97, 97, 97, 97, 97, 858, 67, 67, 1965, 67, 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 0, 97, 97, 1719, 97, 97, 97, 97, 97, 97, 0, 0, 0, 45, 45, 45, 45, 1382, 45, 1383, 45, 45, 45, 159, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1563, 45, 45, 45, 45, 45, 67, 261, 67, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 341, 97, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 97, 1099, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1333, 97, 1230, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 67, 1992, 67, 1993, 67, 67, 67, 97, 97, 45, 45, 160, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1665, 45, 45, 45, 45, 45, 131427, 357, 0, 0, 0, 362, 0, 365, 28809, 367, 139, 45, 45, 45, 45, 45, 684, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 412, 45, 45, 45, 416, 45, 45, 45, 440, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 67, 67, 1990, 67, 1991, 67, 67, 67, 67, 67, 67, 67, 97, 97, 1707, 97, 97, 97, 97, 97, 97, 501, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1691, 67, 67, 67, 67, 67, 526, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1030, 67, 1032, 67, 67, 67, 67, 598, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1632, 0, 921, 29315, 923, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1404, 45, 45, 45, 45, 45, 45, 45, 45, 45, 425, 45, 45, 45, 45, 45, 45, 67, 67, 67, 67, 67, 25398, 0, 13112, 0, 54074, 0, 0, 1093, 0, 0, 0, 0, 0, 97, 1609, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1369, 97, 97, 97, 1372, 97, 97, 67, 67, 266, 67, 67, 67, 67, 0, 24850, 12564, 0, 0, 0, 0, 28809, 53531, 97, 346, 97, 97, 97, 97, 0, 40976, 0, 18, 18, 24, 24, 27, 27, 27, 665, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1677, 45, 45, 45, 45, 67, 45, 45, 954, 45, 956, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1545, 45, 45, 45, 45, 45, 45, 45, 45, 45, 448, 45, 45, 45, 45, 67, 456, 67, 67, 67, 67, 67, 1270, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1069, 67, 67, 67, 67, 67, 67, 97, 97, 97, 1350, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1524, 97, 97, 97, 97, 97, 97, 97, 1376, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 1559, 1561, 45, 45, 45, 1564, 45, 1566, 1567, 45, 67, 67, 67, 67, 67, 1573, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 1247, 67, 67, 67, 67, 67, 1252, 97, 1725, 97, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1628, 97, 1630, 0, 0, 94242, 0, 0, 0, 2211840, 0, 1118208, 0, 0, 0, 0, 2158592, 2158731, 2158592, 2158592, 2158592, 3117056, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3018752, 2158592, 3043328, 2158592, 2158592, 2158592, 2158592, 3080192, 2158592, 2158592, 3112960, 2158592, 2158592, 2158592, 2158592, 2158592, 2158878, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2605056, 2158592, 2158592, 2207744, 0, 542, 0, 544, 0, 0, 2166784, 0, 0, 0, 550, 0, 0, 2158592, 2158592, 2686976, 2158592, 2715648, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2867200, 2158592, 2904064, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 0, 94242, 0, 0, 0, 2211840, 0, 0, 1130496, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 3186688, 2158592, 0, 0, 139, 0, 0, 0, 139, 0, 2367488, 2207744, 0, 0, 0, 0, 176128, 0, 2166784, 0, 0, 0, 0, 0, 286, 2158592, 2158592, 3170304, 3174400, 2158592, 0, 0, 0, 2158592, 2158592, 2158592, 2158592, 2158592, 2424832, 2158592, 2158592, 2158592, 1508, 2158592, 2908160, 2158592, 2158592, 2158592, 2977792, 2158592, 2158592, 2158592, 2158592, 3039232, 2158592, 2158592, 2158592, 2158592, 2158592, 2158592, 3158016, 67, 24850, 24850, 12564, 12564, 0, 0, 0, 0, 0, 53531, 53531, 0, 286, 97, 97, 97, 97, 97, 1144, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1149, 97, 97, 97, 97, 1154, 57889, 0, 0, 0, 0, 550, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 561, 97, 97, 97, 97, 97, 97, 576, 97, 97, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 139264, 0, 0, 139264, 0, 921, 29315, 0, 0, 926, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 719, 720, 45, 45, 45, 45, 45, 45, 45, 45, 685, 45, 45, 45, 45, 45, 45, 45, 45, 45, 942, 45, 45, 946, 45, 45, 45, 950, 45, 45, 0, 2146304, 2146304, 0, 0, 0, 0, 2224128, 2224128, 2224128, 2232320, 2232320, 2232320, 2232320, 0, 0, 1301, 0, 0, 0, 0, 0, 1307, 0, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 97, 97, 1318, 97, 97, 97, 97, 97, 97, 1795, 97, 97, 45, 45, 45, 45, 45, 45, 45, 446, 45, 45, 45, 45, 45, 45, 67, 67, 2158592, 2146304, 0, 0, 0, 0, 0, 0, 0, 2211840, 0, 0, 0, 0, 2158592, 0, 921, 29315, 0, 924, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 1000, 45, 45, 45, 45, 67, 67\n];\n\nXQueryTokenizer.EXPECTED =\n[ 290, 300, 304, 353, 296, 309, 305, 319, 315, 324, 328, 352, 354, 334, 338, 330, 320, 345, 349, 293, 358, 362, 341, 366, 312, 370, 374, 378, 382, 386, 390, 394, 398, 737, 402, 634, 439, 604, 634, 634, 634, 634, 408, 634, 634, 634, 404, 634, 634, 634, 457, 634, 634, 963, 634, 634, 413, 634, 634, 634, 634, 634, 634, 634, 663, 418, 422, 903, 902, 426, 431, 548, 634, 437, 521, 919, 443, 615, 409, 449, 455, 624, 731, 751, 634, 461, 465, 672, 470, 469, 474, 481, 485, 477, 489, 493, 629, 542, 497, 505, 603, 602, 991, 648, 510, 804, 634, 515, 958, 526, 525, 530, 768, 634, 546, 552, 711, 710, 593, 558, 562, 618, 566, 570, 574, 578, 582, 586, 590, 608, 612, 660, 822, 821, 634, 622, 596, 444, 628, 533, 724, 633, 640, 653, 647, 652, 536, 1008, 451, 450, 445, 657, 670, 676, 685, 689, 693, 697, 701, 704, 707, 715, 719, 798, 815, 634, 723, 762, 996, 634, 728, 969, 730, 735, 908, 634, 741, 679, 889, 511, 747, 634, 750, 755, 499, 666, 499, 501, 759, 772, 776, 780, 634, 787, 784, 797, 802, 809, 808, 427, 814, 1006, 517, 634, 519, 853, 634, 813, 850, 793, 634, 819, 826, 833, 832, 837, 843, 847, 857, 861, 863, 867, 871, 875, 879, 883, 643, 887, 539, 980, 979, 634, 893, 944, 634, 900, 896, 634, 907, 933, 506, 912, 917, 828, 433, 636, 635, 554, 961, 923, 930, 927, 937, 941, 634, 634, 634, 974, 948, 952, 985, 913, 968, 967, 743, 634, 973, 839, 634, 978, 599, 634, 984, 989, 765, 444, 995, 1000, 634, 1003, 790, 955, 1012, 681, 634, 634, 634, 634, 634, 414, 1016, 1020, 1024, 1085, 1027, 1090, 1090, 1046, 1080, 1137, 1108, 1215, 1049, 1032, 1039, 1085, 1085, 1085, 1085, 1058, 1062, 1068, 1085, 1086, 1090, 1090, 1091, 1072, 1064, 1107, 1090, 1090, 1090, 1118, 1123, 1138, 1078, 1074, 1084, 1085, 1085, 1085, 1087, 1090, 1062, 1052, 1060, 1114, 1062, 1104, 1085, 1085, 1090, 1090, 1028, 1122, 1063, 1128, 1139, 1127, 1158, 1085, 1085, 1151, 1090, 1090, 1090, 1095, 1090, 1132, 1073, 1136, 1143, 1061, 1150, 1085, 1155, 1098, 1101, 1146, 1162, 1169, 1101, 1185, 1151, 1090, 1110, 1173, 1054, 1087, 1109, 1177, 1165, 1089, 1204, 1184, 1107, 1189, 1193, 1088, 1197, 1180, 1201, 1208, 1042, 1212, 1219, 1223, 1227, 1231, 1235, 1245, 1777, 1527, 1686, 1686, 1238, 1686, 1254, 1686, 1686, 1686, 1294, 1669, 1686, 1686, 1686, 1322, 1625, 1534, 1268, 1624, 1275, 1281, 1443, 1292, 1300, 1686, 1686, 1686, 1350, 1826, 1306, 1686, 1686, 1240, 2032, 1317, 1321, 1686, 1686, 1253, 1686, 1326, 1686, 1686, 1686, 1418, 1709, 1446, 1686, 1686, 1686, 1492, 1686, 1295, 1447, 1686, 1686, 1258, 1686, 1736, 1686, 1686, 1520, 1355, 1686, 1288, 1348, 1361, 1686, 1359, 1686, 1364, 1498, 1368, 1302, 1362, 1381, 1389, 1395, 1486, 1686, 1371, 1377, 1370, 1686, 1375, 1382, 1384, 1402, 1408, 1385, 1383, 1619, 1413, 1423, 1428, 1433, 1686, 1686, 1270, 1686, 1338, 1686, 1440, 1686, 1686, 1686, 1499, 1465, 1686, 1686, 1686, 1639, 1473, 1884, 1686, 1686, 1293, 1864, 1686, 1686, 1296, 1321, 1483, 1686, 1686, 1686, 1646, 1686, 1748, 1496, 1686, 1418, 1675, 1686, 1418, 1702, 1686, 1418, 1981, 1686, 1429, 1409, 1427, 1504, 1692, 1686, 1686, 1313, 1448, 1651, 1508, 1686, 1686, 1340, 1686, 1903, 1686, 1686, 1435, 1513, 1686, 1283, 1287, 1519, 1686, 1524, 1363, 1568, 1938, 1539, 1566, 1579, 1479, 1533, 1538, 1553, 1544, 1552, 1557, 1563, 1574, 1557, 1583, 1589, 1590, 1759, 1594, 1603, 1607, 1611, 1686, 1436, 1514, 1686, 1434, 1656, 1686, 1434, 1680, 1686, 1453, 1686, 1686, 1686, 1559, 1617, 1686, 1770, 1418, 1623, 1769, 1629, 1686, 1515, 1335, 1686, 1285, 1686, 1671, 1921, 1650, 1686, 1686, 1344, 1308, 1666, 1686, 1686, 1686, 1659, 1685, 1686, 1686, 1686, 1686, 1241, 1686, 1686, 1844, 1691, 1686, 1630, 1977, 1970, 1362, 1686, 1686, 1686, 1693, 1698, 1686, 1686, 1686, 1697, 1686, 1764, 1715, 1686, 1634, 1638, 1686, 1599, 1585, 1686, 1271, 1686, 1269, 1686, 1721, 1686, 1686, 1354, 1686, 1801, 1686, 1799, 1686, 1640, 1686, 1686, 1461, 1686, 1686, 1732, 1686, 1944, 1686, 1740, 1686, 1746, 1415, 1396, 1686, 1598, 1547, 1417, 1597, 1416, 1577, 1546, 1397, 1577, 1547, 1548, 1570, 1398, 1753, 1686, 1652, 1509, 1686, 1686, 1686, 1757, 1686, 1419, 1686, 1763, 1418, 1768, 1781, 1686, 1686, 1686, 1705, 1686, 2048, 1792, 1686, 1686, 1686, 1735, 1686, 1797, 1686, 1686, 1404, 1686, 1639, 1815, 1686, 1686, 1418, 2017, 1820, 1686, 1686, 1803, 1686, 1686, 1686, 1736, 1489, 1686, 1686, 1825, 1338, 1260, 1263, 1686, 1686, 1785, 1686, 1686, 1728, 1686, 1686, 1749, 1497, 1830, 1830, 1262, 1248, 1261, 1329, 1260, 1264, 1329, 1248, 1249, 1259, 1540, 1849, 1842, 1686, 1686, 1835, 1686, 1686, 1816, 1686, 1686, 1831, 1882, 1848, 1686, 1686, 1686, 1774, 2071, 1854, 1686, 1686, 1469, 1884, 1686, 1821, 1859, 1686, 1686, 1350, 1883, 1686, 1686, 1686, 1781, 1391, 1875, 1686, 1686, 1613, 1644, 1686, 1686, 1889, 1686, 1686, 1662, 1884, 1686, 1885, 1890, 1686, 1686, 1686, 1894, 1686, 1686, 1678, 1686, 1907, 1686, 1686, 1529, 1914, 1686, 1838, 1686, 1686, 1881, 1686, 1686, 1872, 1876, 1836, 1919, 1686, 1837, 1692, 1910, 1686, 1925, 1928, 1742, 1686, 1811, 1811, 1930, 1810, 1929, 1935, 1928, 1900, 1942, 1867, 1868, 1931, 1035, 1788, 1948, 1952, 1956, 1960, 1964, 1686, 1976, 1686, 1686, 1686, 2065, 1686, 1992, 2037, 1686, 1686, 1998, 2009, 1972, 2002, 1686, 1686, 1686, 2077, 1300, 2023, 1686, 1686, 1686, 1807, 2031, 1686, 1686, 1686, 1860, 1500, 2032, 1686, 1686, 1686, 2083, 1686, 2036, 1686, 1277, 1276, 2042, 1877, 1686, 1686, 2041, 1686, 1686, 2027, 2037, 2012, 1686, 2012, 1855, 1850, 1686, 2046, 1686, 1686, 2054, 1996, 1686, 1897, 1309, 2059, 2052, 1686, 2058, 1686, 1686, 2081, 1686, 1717, 1477, 1686, 1331, 1686, 1686, 1687, 1686, 1860, 1681, 1686, 1686, 1686, 1966, 1724, 1686, 1686, 1686, 1984, 2015, 1686, 1686, 1686, 1988, 1686, 2063, 1686, 1686, 1686, 2005, 1686, 1727, 1686, 1686, 1711, 1457, 2069, 1686, 1686, 1686, 2019, 2075, 1686, 1686, 1915, 1686, 1686, 1793, 1874, 1686, 1686, 1491, 1362, 1449, 1686, 1686, 1460, 2098, 2087, 2091, 2095, 2184, 2102, 2113, 2780, 2117, 2134, 2142, 2281, 2146, 2146, 2146, 2304, 2296, 2181, 2639, 2591, 2872, 2592, 2873, 2313, 2195, 2200, 2281, 2146, 2273, 2226, 2204, 2152, 2219, 2276, 2167, 2177, 2276, 2235, 2276, 2276, 2230, 2281, 2276, 2296, 2276, 2293, 2276, 2276, 2276, 2276, 2234, 2276, 2311, 2314, 2210, 2199, 2217, 2222, 2276, 2276, 2276, 2240, 2276, 2294, 2276, 2276, 2173, 2276, 2198, 2281, 2281, 2281, 2281, 2282, 2146, 2146, 2146, 2146, 2205, 2146, 2204, 2248, 2276, 2235, 2276, 2297, 2276, 2276, 2276, 2277, 2256, 2281, 2283, 2146, 2146, 2146, 2275, 2276, 2295, 2276, 2276, 2293, 2146, 2304, 2264, 2269, 2221, 2276, 2276, 2276, 2293, 2295, 2276, 2276, 2276, 2295, 2263, 2205, 2268, 2220, 2172, 2276, 2276, 2276, 2296, 2276, 2276, 2296, 2294, 2276, 2276, 2278, 2281, 2281, 2280, 2281, 2281, 2281, 2283, 2206, 2223, 2276, 2276, 2279, 2281, 2281, 2146, 2273, 2276, 2276, 2281, 2281, 2281, 2276, 2292, 2276, 2298, 2225, 2276, 2298, 2169, 2224, 2292, 2298, 2171, 2229, 2281, 2281, 2171, 2236, 2281, 2281, 2281, 2146, 2275, 2225, 2292, 2299, 2276, 2229, 2281, 2146, 2276, 2290, 2297, 2283, 2146, 2146, 2274, 2224, 2227, 2298, 2225, 2297, 2276, 2230, 2170, 2230, 2282, 2146, 2147, 2151, 2156, 2288, 2276, 2230, 2303, 2308, 2236, 2284, 2228, 2318, 2318, 2318, 2326, 2335, 2339, 2343, 2349, 2416, 2693, 2357, 2592, 2109, 2592, 2592, 2162, 2943, 2823, 2646, 2592, 2361, 2592, 2122, 2592, 2592, 2122, 2470, 2592, 2592, 2592, 2109, 2107, 2592, 2592, 2592, 2123, 2592, 2592, 2592, 2125, 2592, 2413, 2592, 2592, 2592, 2127, 2592, 2592, 2414, 2592, 2592, 2592, 2130, 2952, 2592, 2594, 2592, 2592, 2212, 2609, 2252, 2592, 2592, 2592, 2446, 2434, 2592, 2592, 2592, 2212, 2446, 2450, 2456, 2431, 2435, 2592, 2592, 2243, 2478, 2448, 2439, 2946, 2592, 2592, 2592, 2368, 2809, 2813, 2450, 2441, 2212, 2812, 2449, 2440, 2947, 2592, 2592, 2592, 2345, 2451, 2457, 2948, 2592, 2124, 2592, 2592, 2650, 2823, 2449, 2455, 2946, 2592, 2128, 2592, 2592, 2649, 2952, 2592, 2810, 2448, 2461, 2991, 2467, 2592, 2592, 2329, 2817, 2474, 2990, 2466, 2592, 2592, 2373, 2447, 2992, 2469, 2592, 2592, 2592, 2373, 2447, 2477, 2468, 2592, 2592, 2353, 2469, 2592, 2495, 2592, 2592, 2415, 2483, 2592, 2415, 2496, 2592, 2592, 2352, 2592, 2592, 2352, 2352, 2469, 2592, 2592, 2363, 2331, 2494, 2592, 2592, 2592, 2375, 2592, 2375, 2415, 2504, 2592, 2592, 2367, 2372, 2503, 2592, 2592, 2592, 2389, 2418, 2415, 2592, 2592, 2373, 2592, 2592, 2592, 2593, 2732, 2417, 2415, 2592, 2417, 2520, 2592, 2592, 2592, 2390, 2521, 2521, 2592, 2592, 2592, 2401, 2599, 2585, 2526, 2531, 2120, 2592, 2212, 2426, 2450, 2463, 2948, 2592, 2592, 2592, 2213, 2389, 2527, 2532, 2121, 2542, 2551, 2105, 2592, 2213, 2592, 2592, 2592, 2558, 2538, 2544, 2553, 2557, 2537, 2543, 2552, 2421, 2572, 2576, 2546, 2543, 2547, 2592, 2592, 2373, 2615, 2575, 2545, 2105, 2592, 2244, 2479, 2592, 2129, 2592, 2592, 2628, 2690, 2469, 2562, 2566, 2592, 2592, 2592, 2415, 2928, 2934, 2401, 2570, 2574, 2564, 2572, 2585, 2590, 2592, 2592, 2585, 2965, 2592, 2592, 2592, 2445, 2251, 2592, 2592, 2592, 2474, 2592, 2609, 2892, 2592, 2362, 2592, 2592, 2138, 2851, 2159, 2592, 2592, 2592, 2509, 2888, 2892, 2592, 2592, 2592, 2490, 2418, 2891, 2592, 2592, 2376, 2592, 2592, 2374, 2592, 2889, 2388, 2592, 2373, 2373, 2890, 2592, 2592, 2387, 2592, 2887, 2505, 2892, 2592, 2373, 2610, 2388, 2592, 2592, 2376, 2373, 2592, 2887, 2891, 2592, 2374, 2592, 2592, 2608, 2159, 2614, 2620, 2592, 2592, 2394, 2594, 2887, 2399, 2592, 2887, 2397, 2508, 2374, 2507, 2592, 2375, 2592, 2592, 2592, 2595, 2508, 2506, 2592, 2506, 2505, 2505, 2592, 2507, 2637, 2505, 2592, 2592, 2401, 2661, 2592, 2643, 2592, 2592, 2417, 2592, 2655, 2592, 2592, 2592, 2510, 2414, 2656, 2592, 2592, 2592, 2516, 2592, 2593, 2660, 2665, 2880, 2592, 2592, 2592, 2522, 2767, 2666, 2881, 2592, 2592, 2420, 2571, 2696, 2592, 2592, 2592, 2580, 2572, 2686, 2632, 2698, 2592, 2383, 2514, 2592, 2163, 2932, 2465, 2685, 2631, 2697, 2592, 2388, 2592, 2592, 2212, 2604, 2671, 2632, 2678, 2592, 2401, 2405, 2409, 2592, 2592, 2592, 2679, 2592, 2592, 2592, 2592, 2108, 2677, 2591, 2592, 2592, 2592, 2419, 2592, 2683, 2187, 2191, 2469, 2671, 2189, 2467, 2592, 2401, 2629, 2633, 2702, 2468, 2592, 2592, 2421, 2536, 2703, 2469, 2592, 2592, 2422, 2573, 2593, 2672, 2467, 2592, 2402, 2406, 2592, 2402, 2979, 2592, 2592, 2626, 2673, 2467, 2592, 2446, 2259, 2947, 2592, 2377, 2709, 2592, 2592, 2522, 2862, 2713, 2468, 2592, 2592, 2581, 2572, 2562, 2374, 2374, 2592, 2376, 2721, 2724, 2592, 2592, 2624, 2373, 2731, 2592, 2592, 2592, 2626, 2732, 2592, 2592, 2592, 2755, 2656, 2726, 2736, 2741, 2592, 2486, 2593, 2381, 2592, 2727, 2737, 2742, 2715, 2747, 2753, 2592, 2498, 2469, 2873, 2743, 2592, 2592, 2592, 2791, 2759, 2763, 2592, 2592, 2627, 2704, 2592, 2592, 2522, 2789, 2593, 2761, 2753, 2592, 2498, 2863, 2592, 2592, 2767, 2592, 2592, 2592, 2792, 2789, 2592, 2592, 2592, 2803, 2126, 2592, 2592, 2592, 2811, 2122, 2592, 2592, 2592, 2834, 2777, 2592, 2592, 2592, 2848, 2936, 2591, 2489, 2797, 2592, 2592, 2670, 2631, 2490, 2798, 2592, 2592, 2592, 2963, 2807, 2592, 2592, 2592, 2965, 2838, 2592, 2592, 2592, 2975, 2330, 2818, 2829, 2592, 2498, 2939, 2592, 2498, 2592, 2791, 2331, 2819, 2830, 2592, 2592, 2592, 2982, 2834, 2817, 2828, 2106, 2592, 2592, 2592, 2405, 2405, 2817, 2828, 2592, 2592, 2415, 2849, 2842, 2592, 2522, 2773, 2592, 2522, 2868, 2592, 2580, 2600, 2586, 2137, 2850, 2843, 2592, 2592, 2855, 2937, 2844, 2592, 2592, 2592, 2987, 2936, 2591, 2592, 2592, 2684, 2630, 2592, 2856, 2938, 2592, 2592, 2860, 2939, 2592, 2592, 2872, 2592, 2861, 2591, 2592, 2592, 2887, 2616, 2592, 2867, 2592, 2592, 2708, 2592, 2498, 2469, 2498, 2497, 2785, 2773, 2499, 2783, 2770, 2877, 2877, 2877, 2772, 2592, 2592, 2345, 2885, 2592, 2592, 2592, 2715, 2762, 2515, 2896, 2592, 2592, 2715, 2917, 2516, 2897, 2592, 2592, 2592, 2901, 2906, 2911, 2592, 2592, 2956, 2960, 2715, 2902, 2907, 2912, 2593, 2916, 2920, 2820, 2922, 2822, 2592, 2592, 2715, 2927, 2921, 2821, 2106, 2592, 2592, 2974, 2408, 2321, 2821, 2106, 2592, 2592, 2983, 2592, 2593, 2404, 2408, 2592, 2592, 2717, 2749, 2716, 2928, 2322, 2822, 2593, 2926, 2919, 2820, 2934, 2823, 2592, 2592, 2592, 2651, 2824, 2592, 2592, 2592, 2130, 2952, 2592, 2592, 2592, 2592, 2964, 2592, 2592, 2716, 2748, 2592, 2969, 2592, 2592, 2716, 2918, 2368, 2970, 2592, 2592, 2592, 2403, 2407, 2592, 2592, 2787, 2211, 2404, 2409, 2592, 2592, 2802, 2837, 2987, 2592, 2592, 2592, 2809, 2427, 2592, 2793, 2592, 2592, 2809, 2447, 1073741824, 0x80000000, 539754496, 542375936, 402653184, 554434560, 571736064, 545521856, 268451840, 335544320, 268693630, 512, 2048, 256, 1024, 0, 1024, 0, 1073741824, 0x80000000, 0, 0, 0, 8388608, 0, 0, 1073741824, 1073741824, 0, 0x80000000, 537133056, 4194304, 1048576, 268435456, -1073741824, 0, 0, 0, 1048576, 0, 0, 0, 1572864, 0, 0, 0, 4194304, 0, 134217728, 16777216, 0, 0, 32, 64, 98304, 0, 33554432, 8388608, 192, 67108864, 67108864, 67108864, 67108864, 16, 32, 4, 0, 8192, 196608, 196608, 229376, 80, 4096, 524288, 8388608, 0, 0, 32, 128, 256, 24576, 24600, 24576, 24576, 2, 24576, 24576, 24576, 24584, 24592, 24576, 24578, 24576, 24578, 24576, 24576, 16, 512, 2048, 2048, 256, 4096, 32768, 1048576, 4194304, 67108864, 134217728, 268435456, 262144, 134217728, 0, 128, 128, 64, 16384, 16384, 16384, 67108864, 32, 32, 4, 4, 4096, 262144, 134217728, 0, 0, 0, 2, 0, 8192, 131072, 131072, 4096, 4096, 4096, 4096, 24576, 24576, 24576, 8, 8, 24576, 24576, 16384, 16384, 16384, 24576, 24584, 24576, 24576, 24576, 16384, 24576, 536870912, 262144, 0, 0, 32, 2048, 8192, 4, 4096, 4096, 4096, 786432, 8388608, 16777216, 0, 128, 16384, 16384, 16384, 32768, 65536, 2097152, 32, 32, 32, 32, 4, 4, 4, 4, 4, 4096, 67108864, 67108864, 67108864, 24576, 24576, 24576, 24576, 0, 16384, 16384, 16384, 16384, 67108864, 67108864, 8, 67108864, 24576, 8, 8, 8, 24576, 24576, 24576, 24578, 24576, 24576, 24576, 2, 2, 2, 16384, 67108864, 67108864, 67108864, 32, 67108864, 8, 8, 24576, 2048, 0x80000000, 536870912, 262144, 262144, 262144, 67108864, 8, 24576, 16384, 32768, 1048576, 4194304, 25165824, 67108864, 24576, 32770, 2, 4, 112, 512, 98304, 524288, 50, 402653186, 1049090, 1049091, 10, 66, 100925514, 10, 66, 12582914, 0, 0, -1678194207, -1678194207, -1041543218, 0, 32768, 0, 0, 32, 65536, 268435456, 1, 1, 513, 1048577, 0, 12582912, 0, 0, 0, 4, 1792, 0, 0, 0, 7, 29360128, 0, 0, 0, 8, 0, 0, 0, 12, 1, 1, 0, 0, -604102721, -604102721, 4194304, 8388608, 0, 0, 0, 31, 925600, 997981306, 997981306, 997981306, 0, 0, 2048, 8388608, 0, 0, 1, 2, 4, 32, 64, 512, 8192, 0, 0, 0, 245760, 997720064, 0, 0, 0, 32, 0, 0, 0, 3, 12, 16, 32, 8, 112, 3072, 12288, 16384, 32768, 65536, 131072, 7864320, 16777216, 973078528, 0, 0, 65536, 131072, 3670016, 4194304, 16777216, 33554432, 2, 8, 48, 2048, 8192, 16384, 32768, 65536, 131072, 524288, 131072, 524288, 3145728, 4194304, 16777216, 33554432, 65536, 131072, 2097152, 4194304, 16777216, 33554432, 134217728, 268435456, 536870912, 0, 0, 0, 1024, 0, 8, 48, 2048, 8192, 65536, 33554432, 268435456, 536870912, 65536, 268435456, 536870912, 0, 0, 32768, 0, 0, 126, 623104, 65011712, 0, 32, 65536, 536870912, 0, 0, 65536, 524288, 0, 32, 65536, 0, 0, 0, 2048, 0, 0, 0, 15482, 245760, -604102721, 0, 0, 0, 18913, 33062912, 925600, -605028352, 0, 0, 0, 65536, 31, 8096, 131072, 786432, 3145728, 3145728, 12582912, 50331648, 134217728, 268435456, 160, 256, 512, 7168, 131072, 786432, 131072, 786432, 1048576, 2097152, 12582912, 16777216, 268435456, 1073741824, 0x80000000, 12582912, 16777216, 33554432, 268435456, 1073741824, 0x80000000, 3, 12, 16, 160, 256, 7168, 786432, 1048576, 12582912, 16777216, 268435456, 1073741824, 0, 8, 16, 32, 128, 256, 512, 7168, 786432, 1048576, 2097152, 0, 1, 2, 8, 16, 7168, 786432, 1048576, 8388608, 16777216, 16777216, 1073741824, 0, 0, 0, 0, 1, 0, 0, 8, 32, 128, 256, 7168, 8, 32, 0, 3072, 0, 8, 32, 3072, 4096, 524288, 8, 32, 0, 0, 3072, 4096, 0, 2048, 524288, 8388608, 8, 2048, 0, 0, 1, 12, 256, 4096, 32768, 262144, 1048576, 4194304, 67108864, 0, 2048, 0, 2048, 2048, 1073741824, -58805985, -58805985, -58805985, 0, 0, 262144, 0, 0, 32, 4194304, 16777216, 134217728, 4382, 172032, -58982400, 0, 0, 2, 28, 256, 4096, 8192, 8192, 32768, 131072, 262144, 524288, 1, 2, 12, 256, 4096, 0, 0, 4194304, 67108864, 134217728, 805306368, 1073741824, 0, 0, 1, 2, 12, 16, 256, 4096, 1048576, 67108864, 134217728, 268435456, 0, 512, 1048576, 4194304, 201326592, 1879048192, 0, 0, 12, 256, 4096, 134217728, 268435456, 536870912, 12, 256, 268435456, 536870912, 0, 12, 256, 0, 0, 1, 32, 64, 512, 0, 0, 205236961, 205236961, 0, 0, 0, 1, 96, 640, 1, 10976, 229376, 204996608, 0, 640, 2048, 8192, 229376, 1572864, 1572864, 2097152, 201326592, 0, 0, 0, 64, 512, 2048, 229376, 1572864, 201326592, 1572864, 201326592, 0, 0, 1, 4382, 0, 1, 32, 2048, 65536, 131072, 1572864, 201326592, 131072, 1572864, 134217728, 0, 0, 524288, 524288, 0, 0, 0, -68582786, -68582786, -68582786, 0, 0, 2097152, 524288, 0, 524288, 0, 0, 65536, 131072, 1572864, 0, 0, 2, 4, 0, 0, 65011712, -134217728, 0, 0, 0, 0, 2, 4, 120, 512, -268435456, 0, 0, 0, 2, 8, 48, 64, 2048, 8192, 98304, 524288, 2097152, 4194304, 25165824, 33554432, 134217728, 268435456, 0x80000000, 0, 0, 25165824, 33554432, 134217728, 1879048192, 0x80000000, 0, 0, 4, 112, 512, 622592, 65011712, 134217728, -268435456, 16777216, 33554432, 134217728, 1610612736, 0, 0, 0, 64, 98304, 524288, 4194304, 16777216, 33554432, 0, 98304, 524288, 16777216, 33554432, 0, 65536, 524288, 33554432, 536870912, 1073741824, 0, 65536, 524288, 536870912, 1073741824, 0, 0, 65536, 524288, 536870912, 0, 524288, 0, 524288, 524288, 1048576, 2086666240, 0x80000000, 0, -1678194207, 0, 0, 0, 8, 32, 2048, 524288, 8388608, 0, 0, 33062912, 436207616, 0x80000000, 0, 0, 32, 64, 2432, 16384, 32768, 32768, 524288, 3145728, 4194304, 25165824, 25165824, 167772160, 268435456, 0x80000000, 0, 32, 64, 384, 2048, 16384, 32768, 1048576, 2097152, 4194304, 25165824, 32, 64, 128, 256, 2048, 16384, 2048, 16384, 1048576, 4194304, 16777216, 33554432, 134217728, 536870912, 1073741824, 0, 0, 2048, 16384, 4194304, 16777216, 33554432, 134217728, 805306368, 0, 0, 16777216, 134217728, 268435456, 0x80000000, 0, 622592, 622592, 622592, 8807, 8807, 434791, 0, 0, 16777216, 0, 0, 0, 7, 608, 8192, 0, 0, 0, 3, 4, 96, 512, 32, 64, 8192, 0, 0, 16777216, 134217728, 0, 0, 2, 4, 8192, 16384, 65536, 2097152, 33554432, 268435456\n];\n\nXQueryTokenizer.TOKEN =\n[\n  \"(0)\",\n  \"ModuleDecl\",\n  \"Annotation\",\n  \"OptionDecl\",\n  \"Operator\",\n  \"Variable\",\n  \"Tag\",\n  \"EndTag\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSectionContents\",\n  \"AttrTest\",\n  \"Wildcard\",\n  \"EQName\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"QuotChar\",\n  \"AposChar\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"DocTag\",\n  \"DocCommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"'(:~'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"','\",\n  \"'-->'\",\n  \"'.'\",\n  \"'/'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"';'\",\n  \"'<!--'\",\n  \"'<![CDATA['\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"']]>'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'|'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar JSONiqTokenizer = _dereq_('./JSONiqTokenizer').JSONiqTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit'.split('|');\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'JSONPredefinedCharRef', token: 'constant.language.escape' },\n        { name: 'JSONCharRef', token: 'constant.language.escape' },\n        { name: 'JSONChar', token: 'string' }\n    ]\n};\n    \nexports.JSONiqLexer = function(){ return new Lexer(JSONiqTokenizer, Rules); };\n},{\"./JSONiqTokenizer\":\"/node_modules/xqlint/lib/lexers/JSONiqTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/lexers/lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar TokenHandler = function(code) {\n    var input = code;\n    this.tokens = [];\n \n    this.reset = function() {\n        input = input;\n        this.tokens = [];\n    };\n    \n    this.startNonterminal = function() {};\n    this.endNonterminal = function() {};\n\n    this.terminal = function(name, begin, end) {\n        this.tokens.push({\n            name: name,\n            value: input.substring(begin, end)\n        });\n    };\n\n    this.whitespace = function(begin, end) {\n        this.tokens.push({\n            name: 'WS',\n            value: input.substring(begin, end)\n        });\n    };\n};\n\nexports.Lexer = function(Tokenizer, Rules) {\n\n    this.tokens = [];\n  \n    this.getLineTokens = function(line, state) {\n        state = (state === 'start' || !state) ? '[\"start\"]' : state;\n        var stack = JSON.parse(state);\n        var h = new TokenHandler(line);\n        var tokenizer = new Tokenizer(line, h);\n        var tokens = [];\n    \n        while(true) {\n            var currentState = stack[stack.length - 1];\n            try {\n                h.tokens = [];\n                tokenizer['parse_' + currentState]();\n                var info = null;\n        \n                if(h.tokens.length > 1 && h.tokens[0].name === 'WS') {\n                    tokens.push({\n                        type: 'text',\n                        value: h.tokens[0].value\n                    });\n                    h.tokens.splice(0, 1);\n                }\n        \n                var token = h.tokens[0];\n                var rules  = Rules[currentState];\n                for(var k = 0; k < rules.length; k++) {\n                    var rule = Rules[currentState][k];\n                    if((typeof(rule.name) === 'function' && rule.name(token)) || rule.name === token.name) {\n                        info = rule;\n                        break;\n                    }\n                }\n        \n                if(token.name === 'EOF') { break; }\n                if(token.value === '') { throw 'Encountered empty string lexical rule.'; }\n        \n                tokens.push({\n                    type: info === null ? 'text' : (typeof(info.token) === 'function' ? info.token(token.value) : info.token),\n                    value: token.value\n                });\n        \n                if(info && info.next) {\n                    info.next(stack);\n                }\n      \n            } catch(e) {\n                if(e instanceof tokenizer.ParseException) {\n                    var index = 0;\n                    for(var i=0; i < tokens.length; i++) {\n                        index += tokens[i].value.length;\n                    }\n                    tokens.push({ type: 'text', value: line.substring(index) });\n                    return {\n                        tokens: tokens,\n                        state: JSON.stringify(['start'])\n                    };\n                } else {\n                    throw e;\n                }\n            }\n        }\n\n        return {\n            tokens: tokens,\n            state: JSON.stringify(stack)\n        };\n    };\n};\n},{}],\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar XQueryTokenizer = _dereq_('./XQueryTokenizer').XQueryTokenizer;\nvar Lexer = _dereq_('./lexer').Lexer;\n\nvar keys = 'after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict'.split('|');\n\nvar keywords = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'keyword' }; });\nvar ncnames = keys.map(function(val) { return { name: '\\'' + val + '\\'', token: 'text', next: function(stack){ stack.pop(); } }; });\n\nvar cdata = 'constant.language';\nvar number = 'constant';\nvar xmlcomment = 'comment';\nvar pi = 'xml-pe';\nvar pragma = 'constant.buildin';\nvar n = function(name){\n    return '\\'' + name + '\\'';\n};\nvar Rules = {\n    start: [\n        { name: n('(#'), token: pragma, next: function(stack){ stack.push('Pragma'); } },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n('(:~'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: n('<?'), token: pi, next: function(stack) { stack.push('PI'); } },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposString'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotString'); } },\n        { name: 'Annotation', token: 'support.function' },\n        { name: 'ModuleDecl', token: 'keyword', next: function(stack){ stack.push('Prefix'); } },\n        { name: 'OptionDecl', token: 'keyword', next: function(stack){ stack.push('_EQName'); } },\n        { name: 'AttrTest', token: 'support.type' },\n        { name: 'Variable', token: 'variable' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: 'IntegerLiteral', token: number },\n        { name: 'DecimalLiteral', token: number },\n        { name: 'DoubleLiteral', token: number },\n        { name: 'Operator', token: 'keyword.operator' },\n        { name: 'EQName', token: function(val) { return keys.indexOf(val) !== -1 ? 'keyword' : 'support.function'; } },\n        { name: n('('), token: 'lparen' },\n        { name: n(')'), token: 'rparen' },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: n('}'), token: 'text', next: function(stack){ if(stack.length > 1) { stack.pop(); } } },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } } //, next: function(stack){ if(stack.length > 1) { stack.pop(); } } }\n    ].concat(keywords),\n    _EQName: [\n        { name: 'EQName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    Prefix: [\n        { name: 'NCName', token: 'text', next: function(stack) { stack.pop(); } }\n    ].concat(ncnames),\n    StartTag: [\n        { name: n('>'), token: 'meta.tag', next: function(stack){ stack.push('TagContent'); } },\n        { name: 'QName', token: 'entity.other.attribute-name' },\n        { name: n('='), token: 'text' },\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.push('AposAttr'); } },\n        { name: n('\"'), token: 'string', next: function(stack){ stack.push('QuotAttr'); } },\n        { name: n('/>'), token: 'meta.tag.r', next: function(stack){ stack.pop(); } }\n    ],\n    TagContent: [\n        { name: 'ElementContentChar', token: 'text' },\n        { name: n('<![CDATA['), token: cdata, next: function(stack){ stack.push('CData'); } },\n        { name: n('<!--'), token: xmlcomment, next: function(stack){ stack.push('XMLComment'); } },\n        { name: 'Tag', token: 'meta.tag', next: function(stack){ stack.push('StartTag'); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'text' },\n        { name: n('}}'), token: 'text' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } },\n        { name: 'EndTag', token: 'meta.tag', next: function(stack){ stack.pop(); stack.pop(); } }\n    ],\n    AposAttr: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    QuotAttr: [\n        { name: n('\\\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotAttrContentChar', token: 'string' },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: n('{{'), token: 'string' },\n        { name: n('}}'), token: 'string' },\n        { name: n('{'), token: 'text', next: function(stack){ stack.push('start'); } }\n    ],\n    Pragma: [\n        { name: 'PragmaContents', token: pragma },\n        { name: n('#'), token: pragma },\n        { name: n('#)'), token: pragma, next: function(stack){ stack.pop(); } }\n    ],\n    Comment: [\n        { name: 'CommentContents', token: 'comment' },\n        { name: n('(:'), token: 'comment', next: function(stack){ stack.push('Comment'); } },\n        { name: n(':)'), token: 'comment', next: function(stack){ stack.pop(); } }\n    ],\n    CommentDoc: [\n        { name: 'DocCommentContents', token: 'comment.doc' },\n        { name: 'DocTag', token: 'comment.doc.tag' },\n        { name: n('(:'), token: 'comment.doc', next: function(stack){ stack.push('CommentDoc'); } },\n        { name: n(':)'), token: 'comment.doc', next: function(stack){ stack.pop(); } }\n    ],\n    XMLComment: [\n        { name: 'DirCommentContents', token: xmlcomment },\n        { name: n('-->'), token: xmlcomment, next: function(stack){ stack.pop(); } }\n    ],\n    CData: [\n        { name: 'CDataSectionContents', token: cdata },\n        { name: n(']]>'), token: cdata, next: function(stack){ stack.pop(); } }\n    ],\n    PI: [\n        { name: 'DirPIContents', token: pi },\n        { name: n('?'), token: pi },\n        { name: n('?>'), token: pi, next: function(stack){ stack.pop(); } }\n    ],\n    AposString: [\n        { name: n('\\'\\''), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeApos', token: 'constant.language.escape' },\n        { name: 'AposChar', token: 'string' }\n    ],\n    QuotString: [\n        { name: n('\"'), token: 'string', next: function(stack){ stack.pop(); } },\n        { name: 'PredefinedEntityRef', token: 'constant.language.escape' },\n        { name: 'CharRef', token: 'constant.language.escape' },\n        { name: 'EscapeQuot', token: 'constant.language.escape' },\n        { name: 'QuotChar', token: 'string' }\n    ]\n};\n    \nexports.XQueryLexer = function(){ return new Lexer(XQueryTokenizer, Rules); };\n},{\"./XQueryTokenizer\":\"/node_modules/xqlint/lib/lexers/XQueryTokenizer.js\",\"./lexer\":\"/node_modules/xqlint/lib/lexers/lexer.js\"}],\"/node_modules/xqlint/lib/parsers/JSONParseTreeHandler.js\":[function(_dereq_,module,exports){\nexports.JSONParseTreeHandler = function (code) {\n\t'use strict';\n    var toBeIndex = ['VarDecl', 'FunctionDecl'];\n    var list = [\n        'OrExpr', 'AndExpr', 'ComparisonExpr', 'StringConcatExpr', 'RangeExpr',\n        'AdditiveExpr', 'MultiplicativeExpr',\n        'UnionExpr', 'IntersectExceptExpr', 'InstanceofExpr', 'TreatExpr', 'CastableExpr', 'CastExpr', 'UnaryExpr', 'ValueExpr',\n        'FTContainsExpr', 'SimpleMapExpr', 'PathExpr', 'RelativePathExpr', 'PostfixExpr', 'StepExpr'\n    ];\n\n    var ast = null;\n    var ptr = null;\n    var remains = code;\n    var cursor = 0;\n    var lineCursor = 0;\n    var line = 0;\n\n    function createNode(name) {\n        return {\n            name: name,\n            children: [],\n            getParent: null,\n            pos: {\n                sl: 0,\n                sc: 0,\n                el: 0,\n                ec: 0\n            }\n        };\n    }\n\n    function pushNode(name) { //begin\n        var node = createNode(name);\n        if (ast === null) {\n            ast = node;\n            ast.index = [];\n            ptr = node;\n        } else {\n            node.getParent = ptr;\n            ptr.children.push(node);\n            ptr = ptr.children[ptr.children.length - 1];\n        }\n    }\n\n    function popNode() {\n\n        if (ptr.children.length > 0) {\n            var s = ptr.children[0];\n            var e = null;\n            for (var i = ptr.children.length - 1; i >= 0; i--) {\n                e = ptr.children[i];\n                if (e.pos.el !== 0 || e.pos.ec !== 0) {\n                    break;\n                }\n            }\n            ptr.pos.sl = s.pos.sl;\n            ptr.pos.sc = s.pos.sc;\n            ptr.pos.el = e.pos.el;\n            ptr.pos.ec = e.pos.ec;\n        }\n        if (ptr.name === 'FunctionName') {\n            ptr.name = 'EQName';\n        }\n        if (ptr.name === 'EQName' && ptr.value === undefined) {\n            ptr.value = ptr.children[0].value;\n            ptr.children.pop();\n        }\n    \n        if(toBeIndex.indexOf(ptr.name) !== -1) {\n            ast.index.push(ptr);\n        }\n    \n        if (ptr.getParent !== null) {\n            ptr = ptr.getParent;\n        } else {\n        }\n        if (ptr.children.length > 0) {\n            var lastChild = ptr.children[ptr.children.length - 1];\n            if (lastChild.children.length === 1 && list.indexOf(lastChild.name) !== -1) {\n                ptr.children[ptr.children.length - 1] = lastChild.children[0];\n            }\n        }\n    }\n\n    this.closeParseTree = function () {\n        while (ptr.getParent !== null) {\n            popNode();\n        }\n        popNode();\n    };\n\n    this.peek = function () {\n        return ptr;\n    };\n\n    this.getParseTree = function () {\n        return ast;\n    };\n\n    this.reset = function () {}; //input\n\n    this.startNonterminal = function (name, begin) {\n        pushNode(name, begin);\n    };\n\n    this.endNonterminal = function () {//name, end\n        popNode();\n    };\n\n    this.terminal = function (name, begin, end) {\n        name = (name.substring(0, 1) === '\\'' && name.substring(name.length - 1) === '\\'') ? 'TOKEN' : name;\n        pushNode(name, begin);\n        setValue(ptr, begin, end);\n        popNode();\n    };\n\n    this.whitespace = function (begin, end) {\n        var name = 'WS';\n        pushNode(name, begin);\n        setValue(ptr, begin, end);\n        popNode();\n    };\n\n    function setValue(node, begin, end) {\n\n        var e = end - cursor;\n        ptr.value = remains.substring(0, e);\n        remains = remains.substring(e);\n        cursor = end;\n\n        var sl = line;\n        var sc = lineCursor;\n        var el = sl + ptr.value.split('\\n').length - 1;\n        var lastIdx = ptr.value.lastIndexOf('\\n');\n        var ec = lastIdx === -1 ? sc + ptr.value.length : ptr.value.substring(lastIdx + 1).length;\n\n        line = el;\n        lineCursor = ec;\n\n        ptr.pos.sl = sl;\n        ptr.pos.sc = sc;\n        ptr.pos.el = el;\n        ptr.pos.ec = ec;\n    }\n};\n\n},{}],\"/node_modules/xqlint/lib/parsers/JSONiqParser.js\":[function(_dereq_,module,exports){\n                                                            var JSONiqParser = exports.JSONiqParser = function JSONiqParser(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    l2 = 0;\n    end = e;\n    ex = -1;\n    memo = {};\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? JSONiqParser.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = JSONiqParser.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [JSONiqParser.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_XQuery = function()\n  {\n    eventHandler.startNonterminal(\"XQuery\", e0);\n    lookahead1W(277);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Module();\n    shift(25);                      // EOF\n    eventHandler.endNonterminal(\"XQuery\", e0);\n  };\n\n  function parse_Module()\n  {\n    eventHandler.startNonterminal(\"Module\", e0);\n    switch (l1)\n    {\n    case 170:                       // 'jsoniq'\n      lookahead2W(168);             // S^WS | '#' | '(' | '(:' | 'encoding' | 'version'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 64682                 // 'jsoniq' 'encoding'\n     || lk == 137898)               // 'jsoniq' 'version'\n    {\n      parse_VersionDecl();\n    }\n    lookahead1W(277);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 185:                       // 'module'\n      lookahead2W(146);             // S^WS | '#' | '(' | '(:' | 'namespace'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 95929:                     // 'module' 'namespace'\n      whitespace();\n      parse_LibraryModule();\n      break;\n    default:\n      whitespace();\n      parse_MainModule();\n    }\n    eventHandler.endNonterminal(\"Module\", e0);\n  }\n\n  function parse_VersionDecl()\n  {\n    eventHandler.startNonterminal(\"VersionDecl\", e0);\n    shift(170);                     // 'jsoniq'\n    lookahead1W(120);               // S^WS | '(:' | 'encoding' | 'version'\n    switch (l1)\n    {\n    case 126:                       // 'encoding'\n      shift(126);                   // 'encoding'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(269);                   // 'version'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      lookahead1W(113);             // S^WS | '(:' | ';' | 'encoding'\n      if (l1 == 126)                // 'encoding'\n      {\n        shift(126);                 // 'encoding'\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n    }\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"VersionDecl\", e0);\n  }\n\n  function parse_LibraryModule()\n  {\n    eventHandler.startNonterminal(\"LibraryModule\", e0);\n    parse_ModuleDecl();\n    lookahead1W(142);               // S^WS | EOF | '(:' | 'declare' | 'import'\n    whitespace();\n    parse_Prolog();\n    eventHandler.endNonterminal(\"LibraryModule\", e0);\n  }\n\n  function parse_ModuleDecl()\n  {\n    eventHandler.startNonterminal(\"ModuleDecl\", e0);\n    shift(185);                     // 'module'\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shift(187);                     // 'namespace'\n    lookahead1W(239);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NCName();\n    lookahead1W(30);                // S^WS | '(:' | '='\n    shift(61);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"ModuleDecl\", e0);\n  }\n\n  function parse_Prolog()\n  {\n    eventHandler.startNonterminal(\"Prolog\", e0);\n    for (;;)\n    {\n      lookahead1W(277);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(206);           // S^WS | '#' | '%' | '(' | '(:' | 'base-uri' | 'boundary-space' | 'collection' |\n        break;\n      case 155:                     // 'import'\n        lookahead2W(169);           // S^WS | '#' | '(' | '(:' | 'module' | 'schema'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 43117               // 'declare' 'base-uri'\n       && lk != 44141               // 'declare' 'boundary-space'\n       && lk != 50797               // 'declare' 'construction'\n       && lk != 53869               // 'declare' 'copy-namespaces'\n       && lk != 54893               // 'declare' 'decimal-format'\n       && lk != 56429               // 'declare' 'default'\n       && lk != 73325               // 'declare' 'ft-option'\n       && lk != 94875               // 'import' 'module'\n       && lk != 95853               // 'declare' 'namespace'\n       && lk != 106093              // 'declare' 'ordering'\n       && lk != 115821              // 'declare' 'revalidation'\n       && lk != 117403)             // 'import' 'schema'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(200);           // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 56429)              // 'declare' 'default'\n      {\n        lk = memoized(0, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_DefaultNamespaceDecl();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(0, e0, lk);\n        }\n      }\n      switch (lk)\n      {\n      case -1:\n        whitespace();\n        parse_DefaultNamespaceDecl();\n        break;\n      case 95853:                   // 'declare' 'namespace'\n        whitespace();\n        parse_NamespaceDecl();\n        break;\n      case 155:                     // 'import'\n        whitespace();\n        parse_Import();\n        break;\n      case 73325:                   // 'declare' 'ft-option'\n        whitespace();\n        parse_FTOptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_Setter();\n      }\n      lookahead1W(29);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    for (;;)\n    {\n      lookahead1W(277);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(201);           // S^WS | '#' | '%' | '(' | '(:' | 'collection' | 'context' | 'function' | 'index' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 17005               // 'declare' '%'\n       && lk != 49261               // 'declare' 'collection'\n       && lk != 52333               // 'declare' 'context'\n       && lk != 75373               // 'declare' 'function'\n       && lk != 80493               // 'declare' 'index'\n       && lk != 83565               // 'declare' 'integrity'\n       && lk != 104045              // 'declare' 'option'\n       && lk != 134765              // 'declare' 'updating'\n       && lk != 137325)             // 'declare' 'variable'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 109:                     // 'declare'\n        lookahead2W(197);           // S^WS | '%' | '(:' | 'collection' | 'context' | 'function' | 'index' |\n        break;\n      default:\n        lk = l1;\n      }\n      switch (lk)\n      {\n      case 52333:                   // 'declare' 'context'\n        whitespace();\n        parse_ContextItemDecl();\n        break;\n      case 104045:                  // 'declare' 'option'\n        whitespace();\n        parse_OptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_AnnotatedDecl();\n      }\n      lookahead1W(29);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    eventHandler.endNonterminal(\"Prolog\", e0);\n  }\n\n  function parse_Separator()\n  {\n    eventHandler.startNonterminal(\"Separator\", e0);\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"Separator\", e0);\n  }\n\n  function parse_Setter()\n  {\n    eventHandler.startNonterminal(\"Setter\", e0);\n    switch (l1)\n    {\n    case 109:                       // 'declare'\n      lookahead2W(194);             // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 56429)                // 'declare' 'default'\n    {\n      lk = memoized(1, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_DefaultCollationDecl();\n          lk = -2;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_EmptyOrderDecl();\n            lk = -6;\n          }\n          catch (p6A)\n          {\n            lk = -9;\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(1, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 44141:                     // 'declare' 'boundary-space'\n      parse_BoundarySpaceDecl();\n      break;\n    case -2:\n      parse_DefaultCollationDecl();\n      break;\n    case 43117:                     // 'declare' 'base-uri'\n      parse_BaseURIDecl();\n      break;\n    case 50797:                     // 'declare' 'construction'\n      parse_ConstructionDecl();\n      break;\n    case 106093:                    // 'declare' 'ordering'\n      parse_OrderingModeDecl();\n      break;\n    case -6:\n      parse_EmptyOrderDecl();\n      break;\n    case 115821:                    // 'declare' 'revalidation'\n      parse_RevalidationDecl();\n      break;\n    case 53869:                     // 'declare' 'copy-namespaces'\n      parse_CopyNamespacesDecl();\n      break;\n    default:\n      parse_DecimalFormatDecl();\n    }\n    eventHandler.endNonterminal(\"Setter\", e0);\n  }\n\n  function parse_BoundarySpaceDecl()\n  {\n    eventHandler.startNonterminal(\"BoundarySpaceDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(36);                // S^WS | '(:' | 'boundary-space'\n    shift(86);                      // 'boundary-space'\n    lookahead1W(137);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 218:                       // 'preserve'\n      shift(218);                   // 'preserve'\n      break;\n    default:\n      shift(246);                   // 'strip'\n    }\n    eventHandler.endNonterminal(\"BoundarySpaceDecl\", e0);\n  }\n\n  function parse_DefaultCollationDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultCollationDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shift(110);                     // 'default'\n    lookahead1W(41);                // S^WS | '(:' | 'collation'\n    shift(95);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultCollationDecl\", e0);\n  }\n\n  function try_DefaultCollationDecl()\n  {\n    shiftT(109);                    // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shiftT(110);                    // 'default'\n    lookahead1W(41);                // S^WS | '(:' | 'collation'\n    shiftT(95);                     // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_BaseURIDecl()\n  {\n    eventHandler.startNonterminal(\"BaseURIDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(35);                // S^WS | '(:' | 'base-uri'\n    shift(84);                      // 'base-uri'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"BaseURIDecl\", e0);\n  }\n\n  function parse_ConstructionDecl()\n  {\n    eventHandler.startNonterminal(\"ConstructionDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(44);                // S^WS | '(:' | 'construction'\n    shift(99);                      // 'construction'\n    lookahead1W(137);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 246:                       // 'strip'\n      shift(246);                   // 'strip'\n      break;\n    default:\n      shift(218);                   // 'preserve'\n    }\n    eventHandler.endNonterminal(\"ConstructionDecl\", e0);\n  }\n\n  function parse_OrderingModeDecl()\n  {\n    eventHandler.startNonterminal(\"OrderingModeDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(71);                // S^WS | '(:' | 'ordering'\n    shift(207);                     // 'ordering'\n    lookahead1W(135);               // S^WS | '(:' | 'ordered' | 'unordered'\n    switch (l1)\n    {\n    case 206:                       // 'ordered'\n      shift(206);                   // 'ordered'\n      break;\n    default:\n      shift(262);                   // 'unordered'\n    }\n    eventHandler.endNonterminal(\"OrderingModeDecl\", e0);\n  }\n\n  function parse_EmptyOrderDecl()\n  {\n    eventHandler.startNonterminal(\"EmptyOrderDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shift(110);                     // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'order'\n    shift(205);                     // 'order'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shift(124);                     // 'empty'\n    lookahead1W(125);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 149:                       // 'greatest'\n      shift(149);                   // 'greatest'\n      break;\n    default:\n      shift(176);                   // 'least'\n    }\n    eventHandler.endNonterminal(\"EmptyOrderDecl\", e0);\n  }\n\n  function try_EmptyOrderDecl()\n  {\n    shiftT(109);                    // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shiftT(110);                    // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'order'\n    shiftT(205);                    // 'order'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shiftT(124);                    // 'empty'\n    lookahead1W(125);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 149:                       // 'greatest'\n      shiftT(149);                  // 'greatest'\n      break;\n    default:\n      shiftT(176);                  // 'least'\n    }\n  }\n\n  function parse_CopyNamespacesDecl()\n  {\n    eventHandler.startNonterminal(\"CopyNamespacesDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(47);                // S^WS | '(:' | 'copy-namespaces'\n    shift(105);                     // 'copy-namespaces'\n    lookahead1W(132);               // S^WS | '(:' | 'no-preserve' | 'preserve'\n    whitespace();\n    parse_PreserveMode();\n    lookahead1W(25);                // S^WS | '(:' | ','\n    shift(42);                      // ','\n    lookahead1W(127);               // S^WS | '(:' | 'inherit' | 'no-inherit'\n    whitespace();\n    parse_InheritMode();\n    eventHandler.endNonterminal(\"CopyNamespacesDecl\", e0);\n  }\n\n  function parse_PreserveMode()\n  {\n    eventHandler.startNonterminal(\"PreserveMode\", e0);\n    switch (l1)\n    {\n    case 218:                       // 'preserve'\n      shift(218);                   // 'preserve'\n      break;\n    default:\n      shift(193);                   // 'no-preserve'\n    }\n    eventHandler.endNonterminal(\"PreserveMode\", e0);\n  }\n\n  function parse_InheritMode()\n  {\n    eventHandler.startNonterminal(\"InheritMode\", e0);\n    switch (l1)\n    {\n    case 159:                       // 'inherit'\n      shift(159);                   // 'inherit'\n      break;\n    default:\n      shift(192);                   // 'no-inherit'\n    }\n    eventHandler.endNonterminal(\"InheritMode\", e0);\n  }\n\n  function parse_DecimalFormatDecl()\n  {\n    eventHandler.startNonterminal(\"DecimalFormatDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(118);               // S^WS | '(:' | 'decimal-format' | 'default'\n    switch (l1)\n    {\n    case 107:                       // 'decimal-format'\n      shift(107);                   // 'decimal-format'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_EQName();\n      break;\n    default:\n      shift(110);                   // 'default'\n      lookahead1W(48);              // S^WS | '(:' | 'decimal-format'\n      shift(107);                   // 'decimal-format'\n    }\n    for (;;)\n    {\n      lookahead1W(203);             // S^WS | '(:' | ';' | 'NaN' | 'decimal-separator' | 'digit' |\n      if (l1 == 54)                 // ';'\n      {\n        break;\n      }\n      whitespace();\n      parse_DFPropertyName();\n      lookahead1W(30);              // S^WS | '(:' | '='\n      shift(61);                    // '='\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    eventHandler.endNonterminal(\"DecimalFormatDecl\", e0);\n  }\n\n  function parse_DFPropertyName()\n  {\n    eventHandler.startNonterminal(\"DFPropertyName\", e0);\n    switch (l1)\n    {\n    case 108:                       // 'decimal-separator'\n      shift(108);                   // 'decimal-separator'\n      break;\n    case 151:                       // 'grouping-separator'\n      shift(151);                   // 'grouping-separator'\n      break;\n    case 158:                       // 'infinity'\n      shift(158);                   // 'infinity'\n      break;\n    case 182:                       // 'minus-sign'\n      shift(182);                   // 'minus-sign'\n      break;\n    case 68:                        // 'NaN'\n      shift(68);                    // 'NaN'\n      break;\n    case 213:                       // 'percent'\n      shift(213);                   // 'percent'\n      break;\n    case 212:                       // 'per-mille'\n      shift(212);                   // 'per-mille'\n      break;\n    case 280:                       // 'zero-digit'\n      shift(280);                   // 'zero-digit'\n      break;\n    case 117:                       // 'digit'\n      shift(117);                   // 'digit'\n      break;\n    default:\n      shift(211);                   // 'pattern-separator'\n    }\n    eventHandler.endNonterminal(\"DFPropertyName\", e0);\n  }\n\n  function parse_Import()\n  {\n    eventHandler.startNonterminal(\"Import\", e0);\n    switch (l1)\n    {\n    case 155:                       // 'import'\n      lookahead2W(130);             // S^WS | '(:' | 'module' | 'schema'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 117403:                    // 'import' 'schema'\n      parse_SchemaImport();\n      break;\n    default:\n      parse_ModuleImport();\n    }\n    eventHandler.endNonterminal(\"Import\", e0);\n  }\n\n  function parse_SchemaImport()\n  {\n    eventHandler.startNonterminal(\"SchemaImport\", e0);\n    shift(155);                     // 'import'\n    lookahead1W(76);                // S^WS | '(:' | 'schema'\n    shift(229);                     // 'schema'\n    lookahead1W(141);               // URILiteral | S^WS | '(:' | 'default' | 'namespace'\n    if (l1 != 7)                    // URILiteral\n    {\n      whitespace();\n      parse_SchemaPrefix();\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(112);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 82)                   // 'at'\n    {\n      shift(82);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(107);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"SchemaImport\", e0);\n  }\n\n  function parse_SchemaPrefix()\n  {\n    eventHandler.startNonterminal(\"SchemaPrefix\", e0);\n    switch (l1)\n    {\n    case 187:                       // 'namespace'\n      shift(187);                   // 'namespace'\n      lookahead1W(239);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NCName();\n      lookahead1W(30);              // S^WS | '(:' | '='\n      shift(61);                    // '='\n      break;\n    default:\n      shift(110);                   // 'default'\n      lookahead1W(50);              // S^WS | '(:' | 'element'\n      shift(122);                   // 'element'\n      lookahead1W(64);              // S^WS | '(:' | 'namespace'\n      shift(187);                   // 'namespace'\n    }\n    eventHandler.endNonterminal(\"SchemaPrefix\", e0);\n  }\n\n  function parse_ModuleImport()\n  {\n    eventHandler.startNonterminal(\"ModuleImport\", e0);\n    shift(155);                     // 'import'\n    lookahead1W(63);                // S^WS | '(:' | 'module'\n    shift(185);                     // 'module'\n    lookahead1W(93);                // URILiteral | S^WS | '(:' | 'namespace'\n    if (l1 == 187)                  // 'namespace'\n    {\n      shift(187);                   // 'namespace'\n      lookahead1W(239);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NCName();\n      lookahead1W(30);              // S^WS | '(:' | '='\n      shift(61);                    // '='\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(112);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 82)                   // 'at'\n    {\n      shift(82);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(107);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"ModuleImport\", e0);\n  }\n\n  function parse_NamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"NamespaceDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shift(187);                     // 'namespace'\n    lookahead1W(239);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NCName();\n    lookahead1W(30);                // S^WS | '(:' | '='\n    shift(61);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"NamespaceDecl\", e0);\n  }\n\n  function parse_DefaultNamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultNamespaceDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shift(110);                     // 'default'\n    lookahead1W(119);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 122:                       // 'element'\n      shift(122);                   // 'element'\n      break;\n    default:\n      shift(147);                   // 'function'\n    }\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shift(187);                     // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultNamespaceDecl\", e0);\n  }\n\n  function try_DefaultNamespaceDecl()\n  {\n    shiftT(109);                    // 'declare'\n    lookahead1W(49);                // S^WS | '(:' | 'default'\n    shiftT(110);                    // 'default'\n    lookahead1W(119);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 122:                       // 'element'\n      shiftT(122);                  // 'element'\n      break;\n    default:\n      shiftT(147);                  // 'function'\n    }\n    lookahead1W(64);                // S^WS | '(:' | 'namespace'\n    shiftT(187);                    // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_FTOptionDecl()\n  {\n    eventHandler.startNonterminal(\"FTOptionDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(55);                // S^WS | '(:' | 'ft-option'\n    shift(143);                     // 'ft-option'\n    lookahead1W(84);                // S^WS | '(:' | 'using'\n    whitespace();\n    parse_FTMatchOptions();\n    eventHandler.endNonterminal(\"FTOptionDecl\", e0);\n  }\n\n  function parse_AnnotatedDecl()\n  {\n    eventHandler.startNonterminal(\"AnnotatedDecl\", e0);\n    shift(109);                     // 'declare'\n    for (;;)\n    {\n      lookahead1W(192);             // S^WS | '%' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n      if (l1 != 33                  // '%'\n       && l1 != 263)                // 'updating'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 263:                     // 'updating'\n        whitespace();\n        parse_CompatibilityAnnotation();\n        break;\n      default:\n        whitespace();\n        parse_Annotation();\n      }\n    }\n    switch (l1)\n    {\n    case 268:                       // 'variable'\n      whitespace();\n      parse_VarDecl();\n      break;\n    case 147:                       // 'function'\n      whitespace();\n      parse_FunctionDecl();\n      break;\n    case 96:                        // 'collection'\n      whitespace();\n      parse_CollectionDecl();\n      break;\n    case 157:                       // 'index'\n      whitespace();\n      parse_IndexDecl();\n      break;\n    default:\n      whitespace();\n      parse_ICDecl();\n    }\n    eventHandler.endNonterminal(\"AnnotatedDecl\", e0);\n  }\n\n  function parse_CompatibilityAnnotation()\n  {\n    eventHandler.startNonterminal(\"CompatibilityAnnotation\", e0);\n    shift(263);                     // 'updating'\n    eventHandler.endNonterminal(\"CompatibilityAnnotation\", e0);\n  }\n\n  function parse_Annotation()\n  {\n    eventHandler.startNonterminal(\"Annotation\", e0);\n    shift(33);                      // '%'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(193);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(190);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n      whitespace();\n      parse_Literal();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(190);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n        whitespace();\n        parse_Literal();\n      }\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"Annotation\", e0);\n  }\n\n  function try_Annotation()\n  {\n    shiftT(33);                     // '%'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(193);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(190);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n      try_Literal();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(190);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:' |\n        try_Literal();\n      }\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_VarDecl()\n  {\n    eventHandler.startNonterminal(\"VarDecl\", e0);\n    shift(268);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(157);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(110);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 53:                        // ':='\n      shift(53);                    // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(134);                   // 'external'\n      lookahead1W(108);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"VarDecl\", e0);\n  }\n\n  function parse_VarValue()\n  {\n    eventHandler.startNonterminal(\"VarValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarValue\", e0);\n  }\n\n  function parse_VarDefaultValue()\n  {\n    eventHandler.startNonterminal(\"VarDefaultValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarDefaultValue\", e0);\n  }\n\n  function parse_ContextItemDecl()\n  {\n    eventHandler.startNonterminal(\"ContextItemDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'context'\n    shift(102);                     // 'context'\n    lookahead1W(58);                // S^WS | '(:' | 'item'\n    shift(167);                     // 'item'\n    lookahead1W(157);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 80)                   // 'as'\n    {\n      shift(80);                    // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_ItemType();\n    }\n    lookahead1W(110);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 53:                        // ':='\n      shift(53);                    // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(134);                   // 'external'\n      lookahead1W(108);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"ContextItemDecl\", e0);\n  }\n\n  function parse_ParamList()\n  {\n    eventHandler.startNonterminal(\"ParamList\", e0);\n    parse_Param();\n    for (;;)\n    {\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_Param();\n    }\n    eventHandler.endNonterminal(\"ParamList\", e0);\n  }\n\n  function try_ParamList()\n  {\n    try_Param();\n    for (;;)\n    {\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_Param();\n    }\n  }\n\n  function parse_Param()\n  {\n    eventHandler.startNonterminal(\"Param\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(153);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    eventHandler.endNonterminal(\"Param\", e0);\n  }\n\n  function try_Param()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(153);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n  }\n\n  function parse_FunctionBody()\n  {\n    eventHandler.startNonterminal(\"FunctionBody\", e0);\n    parse_EnclosedExpr();\n    eventHandler.endNonterminal(\"FunctionBody\", e0);\n  }\n\n  function try_FunctionBody()\n  {\n    try_EnclosedExpr();\n  }\n\n  function parse_EnclosedExpr()\n  {\n    eventHandler.startNonterminal(\"EnclosedExpr\", e0);\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"EnclosedExpr\", e0);\n  }\n\n  function try_EnclosedExpr()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_OptionDecl()\n  {\n    eventHandler.startNonterminal(\"OptionDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(69);                // S^WS | '(:' | 'option'\n    shift(203);                     // 'option'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"OptionDecl\", e0);\n  }\n\n  function parse_Expr()\n  {\n    eventHandler.startNonterminal(\"Expr\", e0);\n    parse_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Expr\", e0);\n  }\n\n  function try_Expr()\n  {\n    try_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n    }\n  }\n\n  function parse_FLWORExpr()\n  {\n    eventHandler.startNonterminal(\"FLWORExpr\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnClause();\n    eventHandler.endNonterminal(\"FLWORExpr\", e0);\n  }\n\n  function try_FLWORExpr()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnClause();\n  }\n\n  function parse_InitialClause()\n  {\n    eventHandler.startNonterminal(\"InitialClause\", e0);\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(151);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n      parse_ForClause();\n      break;\n    case 177:                       // 'let'\n      parse_LetClause();\n      break;\n    default:\n      parse_WindowClause();\n    }\n    eventHandler.endNonterminal(\"InitialClause\", e0);\n  }\n\n  function try_InitialClause()\n  {\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(151);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n      try_ForClause();\n      break;\n    case 177:                       // 'let'\n      try_LetClause();\n      break;\n    default:\n      try_WindowClause();\n    }\n  }\n\n  function parse_IntermediateClause()\n  {\n    eventHandler.startNonterminal(\"IntermediateClause\", e0);\n    switch (l1)\n    {\n    case 139:                       // 'for'\n    case 177:                       // 'let'\n      parse_InitialClause();\n      break;\n    case 272:                       // 'where'\n      parse_WhereClause();\n      break;\n    case 150:                       // 'group'\n      parse_GroupByClause();\n      break;\n    case 106:                       // 'count'\n      parse_CountClause();\n      break;\n    default:\n      parse_OrderByClause();\n    }\n    eventHandler.endNonterminal(\"IntermediateClause\", e0);\n  }\n\n  function try_IntermediateClause()\n  {\n    switch (l1)\n    {\n    case 139:                       // 'for'\n    case 177:                       // 'let'\n      try_InitialClause();\n      break;\n    case 272:                       // 'where'\n      try_WhereClause();\n      break;\n    case 150:                       // 'group'\n      try_GroupByClause();\n      break;\n    case 106:                       // 'count'\n      try_CountClause();\n      break;\n    default:\n      try_OrderByClause();\n    }\n  }\n\n  function parse_ForClause()\n  {\n    eventHandler.startNonterminal(\"ForClause\", e0);\n    shift(139);                     // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_ForBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_ForBinding();\n    }\n    eventHandler.endNonterminal(\"ForClause\", e0);\n  }\n\n  function try_ForClause()\n  {\n    shiftT(139);                    // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_ForBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_ForBinding();\n    }\n  }\n\n  function parse_ForBinding()\n  {\n    eventHandler.startNonterminal(\"ForBinding\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(182);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(173);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 73)                   // 'allowing'\n    {\n      whitespace();\n      parse_AllowingEmpty();\n    }\n    lookahead1W(160);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 82)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(126);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 232)                  // 'score'\n    {\n      whitespace();\n      parse_FTScoreVar();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ForBinding\", e0);\n  }\n\n  function try_ForBinding()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(182);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(173);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 73)                   // 'allowing'\n    {\n      try_AllowingEmpty();\n    }\n    lookahead1W(160);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 82)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(126);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 232)                  // 'score'\n    {\n      try_FTScoreVar();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_AllowingEmpty()\n  {\n    eventHandler.startNonterminal(\"AllowingEmpty\", e0);\n    shift(73);                      // 'allowing'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shift(124);                     // 'empty'\n    eventHandler.endNonterminal(\"AllowingEmpty\", e0);\n  }\n\n  function try_AllowingEmpty()\n  {\n    shiftT(73);                     // 'allowing'\n    lookahead1W(52);                // S^WS | '(:' | 'empty'\n    shiftT(124);                    // 'empty'\n  }\n\n  function parse_PositionalVar()\n  {\n    eventHandler.startNonterminal(\"PositionalVar\", e0);\n    shift(82);                      // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"PositionalVar\", e0);\n  }\n\n  function try_PositionalVar()\n  {\n    shiftT(82);                     // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_FTScoreVar()\n  {\n    eventHandler.startNonterminal(\"FTScoreVar\", e0);\n    shift(232);                     // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"FTScoreVar\", e0);\n  }\n\n  function try_FTScoreVar()\n  {\n    shiftT(232);                    // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_LetClause()\n  {\n    eventHandler.startNonterminal(\"LetClause\", e0);\n    shift(177);                     // 'let'\n    lookahead1W(100);               // S^WS | '$' | '(:' | 'score'\n    whitespace();\n    parse_LetBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(100);             // S^WS | '$' | '(:' | 'score'\n      whitespace();\n      parse_LetBinding();\n    }\n    eventHandler.endNonterminal(\"LetClause\", e0);\n  }\n\n  function try_LetClause()\n  {\n    shiftT(177);                    // 'let'\n    lookahead1W(100);               // S^WS | '$' | '(:' | 'score'\n    try_LetBinding();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(100);             // S^WS | '$' | '(:' | 'score'\n      try_LetBinding();\n    }\n  }\n\n  function parse_LetBinding()\n  {\n    eventHandler.startNonterminal(\"LetBinding\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(109);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      break;\n    default:\n      parse_FTScoreVar();\n    }\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shift(53);                      // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"LetBinding\", e0);\n  }\n\n  function try_LetBinding()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(109);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      break;\n    default:\n      try_FTScoreVar();\n    }\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shiftT(53);                     // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowClause()\n  {\n    eventHandler.startNonterminal(\"WindowClause\", e0);\n    shift(139);                     // 'for'\n    lookahead1W(139);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 257:                       // 'tumbling'\n      whitespace();\n      parse_TumblingWindowClause();\n      break;\n    default:\n      whitespace();\n      parse_SlidingWindowClause();\n    }\n    eventHandler.endNonterminal(\"WindowClause\", e0);\n  }\n\n  function try_WindowClause()\n  {\n    shiftT(139);                    // 'for'\n    lookahead1W(139);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 257:                       // 'tumbling'\n      try_TumblingWindowClause();\n      break;\n    default:\n      try_SlidingWindowClause();\n    }\n  }\n\n  function parse_TumblingWindowClause()\n  {\n    eventHandler.startNonterminal(\"TumblingWindowClause\", e0);\n    shift(257);                     // 'tumbling'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shift(275);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    if (l1 == 127                   // 'end'\n     || l1 == 202)                  // 'only'\n    {\n      whitespace();\n      parse_WindowEndCondition();\n    }\n    eventHandler.endNonterminal(\"TumblingWindowClause\", e0);\n  }\n\n  function try_TumblingWindowClause()\n  {\n    shiftT(257);                    // 'tumbling'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shiftT(275);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    try_WindowStartCondition();\n    if (l1 == 127                   // 'end'\n     || l1 == 202)                  // 'only'\n    {\n      try_WindowEndCondition();\n    }\n  }\n\n  function parse_SlidingWindowClause()\n  {\n    eventHandler.startNonterminal(\"SlidingWindowClause\", e0);\n    shift(239);                     // 'sliding'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shift(275);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    whitespace();\n    parse_WindowEndCondition();\n    eventHandler.endNonterminal(\"SlidingWindowClause\", e0);\n  }\n\n  function try_SlidingWindowClause()\n  {\n    shiftT(239);                    // 'sliding'\n    lookahead1W(88);                // S^WS | '(:' | 'window'\n    shiftT(275);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    try_WindowStartCondition();\n    try_WindowEndCondition();\n  }\n\n  function parse_WindowStartCondition()\n  {\n    eventHandler.startNonterminal(\"WindowStartCondition\", e0);\n    shift(242);                     // 'start'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shift(271);                     // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowStartCondition\", e0);\n  }\n\n  function try_WindowStartCondition()\n  {\n    shiftT(242);                    // 'start'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shiftT(271);                    // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowEndCondition()\n  {\n    eventHandler.startNonterminal(\"WindowEndCondition\", e0);\n    if (l1 == 202)                  // 'only'\n    {\n      shift(202);                   // 'only'\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'end'\n    shift(127);                     // 'end'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shift(271);                     // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowEndCondition\", e0);\n  }\n\n  function try_WindowEndCondition()\n  {\n    if (l1 == 202)                  // 'only'\n    {\n      shiftT(202);                  // 'only'\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'end'\n    shiftT(127);                    // 'end'\n    lookahead1W(181);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(86);                // S^WS | '(:' | 'when'\n    shiftT(271);                    // 'when'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowVars()\n  {\n    eventHandler.startNonterminal(\"WindowVars\", e0);\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_CurrentItem();\n    }\n    lookahead1W(174);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 82)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(163);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 219)                  // 'previous'\n    {\n      shift(219);                   // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_PreviousItem();\n    }\n    lookahead1W(131);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 190)                  // 'next'\n    {\n      shift(190);                   // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NextItem();\n    }\n    eventHandler.endNonterminal(\"WindowVars\", e0);\n  }\n\n  function try_WindowVars()\n  {\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_CurrentItem();\n    }\n    lookahead1W(174);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 82)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(163);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 219)                  // 'previous'\n    {\n      shiftT(219);                  // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_PreviousItem();\n    }\n    lookahead1W(131);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 190)                  // 'next'\n    {\n      shiftT(190);                  // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NextItem();\n    }\n  }\n\n  function parse_CurrentItem()\n  {\n    eventHandler.startNonterminal(\"CurrentItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"CurrentItem\", e0);\n  }\n\n  function try_CurrentItem()\n  {\n    try_EQName();\n  }\n\n  function parse_PreviousItem()\n  {\n    eventHandler.startNonterminal(\"PreviousItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"PreviousItem\", e0);\n  }\n\n  function try_PreviousItem()\n  {\n    try_EQName();\n  }\n\n  function parse_NextItem()\n  {\n    eventHandler.startNonterminal(\"NextItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"NextItem\", e0);\n  }\n\n  function try_NextItem()\n  {\n    try_EQName();\n  }\n\n  function parse_CountClause()\n  {\n    eventHandler.startNonterminal(\"CountClause\", e0);\n    shift(106);                     // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"CountClause\", e0);\n  }\n\n  function try_CountClause()\n  {\n    shiftT(106);                    // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_WhereClause()\n  {\n    eventHandler.startNonterminal(\"WhereClause\", e0);\n    shift(272);                     // 'where'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WhereClause\", e0);\n  }\n\n  function try_WhereClause()\n  {\n    shiftT(272);                    // 'where'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_GroupByClause()\n  {\n    eventHandler.startNonterminal(\"GroupByClause\", e0);\n    shift(150);                     // 'group'\n    lookahead1W(37);                // S^WS | '(:' | 'by'\n    shift(88);                      // 'by'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_GroupingSpecList();\n    eventHandler.endNonterminal(\"GroupByClause\", e0);\n  }\n\n  function try_GroupByClause()\n  {\n    shiftT(150);                    // 'group'\n    lookahead1W(37);                // S^WS | '(:' | 'by'\n    shiftT(88);                     // 'by'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_GroupingSpecList();\n  }\n\n  function parse_GroupingSpecList()\n  {\n    eventHandler.startNonterminal(\"GroupingSpecList\", e0);\n    parse_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_GroupingSpec();\n    }\n    eventHandler.endNonterminal(\"GroupingSpecList\", e0);\n  }\n\n  function try_GroupingSpecList()\n  {\n    try_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_GroupingSpec();\n    }\n  }\n\n  function parse_GroupingSpec()\n  {\n    eventHandler.startNonterminal(\"GroupingSpec\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 36383                 // '$' 'after'\n     || lk == 37407                 // '$' 'allowing'\n     || lk == 37919                 // '$' 'ancestor'\n     || lk == 38431                 // '$' 'ancestor-or-self'\n     || lk == 38943                 // '$' 'and'\n     || lk == 39967                 // '$' 'append'\n     || lk == 40479                 // '$' 'array'\n     || lk == 40991                 // '$' 'as'\n     || lk == 41503                 // '$' 'ascending'\n     || lk == 42015                 // '$' 'at'\n     || lk == 42527                 // '$' 'attribute'\n     || lk == 43039                 // '$' 'base-uri'\n     || lk == 43551                 // '$' 'before'\n     || lk == 44063                 // '$' 'boundary-space'\n     || lk == 44575                 // '$' 'break'\n     || lk == 45599                 // '$' 'case'\n     || lk == 46111                 // '$' 'cast'\n     || lk == 46623                 // '$' 'castable'\n     || lk == 47135                 // '$' 'catch'\n     || lk == 48159                 // '$' 'child'\n     || lk == 48671                 // '$' 'collation'\n     || lk == 49695                 // '$' 'comment'\n     || lk == 50207                 // '$' 'constraint'\n     || lk == 50719                 // '$' 'construction'\n     || lk == 52255                 // '$' 'context'\n     || lk == 52767                 // '$' 'continue'\n     || lk == 53279                 // '$' 'copy'\n     || lk == 53791                 // '$' 'copy-namespaces'\n     || lk == 54303                 // '$' 'count'\n     || lk == 54815                 // '$' 'decimal-format'\n     || lk == 55839                 // '$' 'declare'\n     || lk == 56351                 // '$' 'default'\n     || lk == 56863                 // '$' 'delete'\n     || lk == 57375                 // '$' 'descendant'\n     || lk == 57887                 // '$' 'descendant-or-self'\n     || lk == 58399                 // '$' 'descending'\n     || lk == 60959                 // '$' 'div'\n     || lk == 61471                 // '$' 'document'\n     || lk == 61983                 // '$' 'document-node'\n     || lk == 62495                 // '$' 'element'\n     || lk == 63007                 // '$' 'else'\n     || lk == 63519                 // '$' 'empty'\n     || lk == 64031                 // '$' 'empty-sequence'\n     || lk == 64543                 // '$' 'encoding'\n     || lk == 65055                 // '$' 'end'\n     || lk == 66079                 // '$' 'eq'\n     || lk == 66591                 // '$' 'every'\n     || lk == 67615                 // '$' 'except'\n     || lk == 68127                 // '$' 'exit'\n     || lk == 68639                 // '$' 'external'\n     || lk == 69151                 // '$' 'false'\n     || lk == 69663                 // '$' 'first'\n     || lk == 70175                 // '$' 'following'\n     || lk == 70687                 // '$' 'following-sibling'\n     || lk == 71199                 // '$' 'for'\n     || lk == 72735                 // '$' 'from'\n     || lk == 73247                 // '$' 'ft-option'\n     || lk == 75295                 // '$' 'function'\n     || lk == 75807                 // '$' 'ge'\n     || lk == 76831                 // '$' 'group'\n     || lk == 77855                 // '$' 'gt'\n     || lk == 78367                 // '$' 'idiv'\n     || lk == 78879                 // '$' 'if'\n     || lk == 79391                 // '$' 'import'\n     || lk == 79903                 // '$' 'in'\n     || lk == 80415                 // '$' 'index'\n     || lk == 82463                 // '$' 'insert'\n     || lk == 82975                 // '$' 'instance'\n     || lk == 83487                 // '$' 'integrity'\n     || lk == 83999                 // '$' 'intersect'\n     || lk == 84511                 // '$' 'into'\n     || lk == 85023                 // '$' 'is'\n     || lk == 85535                 // '$' 'item'\n     || lk == 86047                 // '$' 'json'\n     || lk == 86559                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'jsoniq'\n     || lk == 88607                 // '$' 'last'\n     || lk == 89119                 // '$' 'lax'\n     || lk == 89631                 // '$' 'le'\n     || lk == 90655                 // '$' 'let'\n     || lk == 91679                 // '$' 'loop'\n     || lk == 92703                 // '$' 'lt'\n     || lk == 93727                 // '$' 'mod'\n     || lk == 94239                 // '$' 'modify'\n     || lk == 94751                 // '$' 'module'\n     || lk == 95775                 // '$' 'namespace'\n     || lk == 96287                 // '$' 'namespace-node'\n     || lk == 96799                 // '$' 'ne'\n     || lk == 99359                 // '$' 'node'\n     || lk == 99871                 // '$' 'nodes'\n     || lk == 100895                // '$' 'null'\n     || lk == 101407                // '$' 'object'\n     || lk == 103455                // '$' 'only'\n     || lk == 103967                // '$' 'option'\n     || lk == 104479                // '$' 'or'\n     || lk == 104991                // '$' 'order'\n     || lk == 105503                // '$' 'ordered'\n     || lk == 106015                // '$' 'ordering'\n     || lk == 107551                // '$' 'parent'\n     || lk == 110623                // '$' 'preceding'\n     || lk == 111135                // '$' 'preceding-sibling'\n     || lk == 112671                // '$' 'processing-instruction'\n     || lk == 113695                // '$' 'rename'\n     || lk == 114207                // '$' 'replace'\n     || lk == 114719                // '$' 'return'\n     || lk == 115231                // '$' 'returning'\n     || lk == 115743                // '$' 'revalidation'\n     || lk == 116767                // '$' 'satisfies'\n     || lk == 117279                // '$' 'schema'\n     || lk == 117791                // '$' 'schema-attribute'\n     || lk == 118303                // '$' 'schema-element'\n     || lk == 118815                // '$' 'score'\n     || lk == 119327                // '$' 'select'\n     || lk == 119839                // '$' 'self'\n     || lk == 122399                // '$' 'sliding'\n     || lk == 122911                // '$' 'some'\n     || lk == 123423                // '$' 'stable'\n     || lk == 123935                // '$' 'start'\n     || lk == 125471                // '$' 'strict'\n     || lk == 126495                // '$' 'structured-item'\n     || lk == 127007                // '$' 'switch'\n     || lk == 127519                // '$' 'text'\n     || lk == 129567                // '$' 'to'\n     || lk == 130079                // '$' 'treat'\n     || lk == 130591                // '$' 'true'\n     || lk == 131103                // '$' 'try'\n     || lk == 131615                // '$' 'tumbling'\n     || lk == 132127                // '$' 'type'\n     || lk == 132639                // '$' 'typeswitch'\n     || lk == 133151                // '$' 'union'\n     || lk == 134175                // '$' 'unordered'\n     || lk == 134687                // '$' 'updating'\n     || lk == 136223                // '$' 'validate'\n     || lk == 136735                // '$' 'value'\n     || lk == 137247                // '$' 'variable'\n     || lk == 137759                // '$' 'version'\n     || lk == 139295                // '$' 'where'\n     || lk == 139807                // '$' 'while'\n     || lk == 141343)               // '$' 'with'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(205);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n          if (l1 == 53              // ':='\n           || l1 == 80)             // 'as'\n          {\n            if (l1 == 80)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(28);        // S^WS | '(:' | ':='\n            shiftT(53);             // ':='\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n          }\n          if (l1 == 95)             // 'collation'\n          {\n            shiftT(95);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(2, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      parse_GroupingVariable();\n      lookahead1W(205);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n      if (l1 == 53                  // ':='\n       || l1 == 80)                 // 'as'\n      {\n        if (l1 == 80)               // 'as'\n        {\n          whitespace();\n          parse_TypeDeclaration();\n        }\n        lookahead1W(28);            // S^WS | '(:' | ':='\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n      if (l1 == 95)                 // 'collation'\n      {\n        shift(95);                  // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"GroupingSpec\", e0);\n  }\n\n  function try_GroupingSpec()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 36383                 // '$' 'after'\n     || lk == 37407                 // '$' 'allowing'\n     || lk == 37919                 // '$' 'ancestor'\n     || lk == 38431                 // '$' 'ancestor-or-self'\n     || lk == 38943                 // '$' 'and'\n     || lk == 39967                 // '$' 'append'\n     || lk == 40479                 // '$' 'array'\n     || lk == 40991                 // '$' 'as'\n     || lk == 41503                 // '$' 'ascending'\n     || lk == 42015                 // '$' 'at'\n     || lk == 42527                 // '$' 'attribute'\n     || lk == 43039                 // '$' 'base-uri'\n     || lk == 43551                 // '$' 'before'\n     || lk == 44063                 // '$' 'boundary-space'\n     || lk == 44575                 // '$' 'break'\n     || lk == 45599                 // '$' 'case'\n     || lk == 46111                 // '$' 'cast'\n     || lk == 46623                 // '$' 'castable'\n     || lk == 47135                 // '$' 'catch'\n     || lk == 48159                 // '$' 'child'\n     || lk == 48671                 // '$' 'collation'\n     || lk == 49695                 // '$' 'comment'\n     || lk == 50207                 // '$' 'constraint'\n     || lk == 50719                 // '$' 'construction'\n     || lk == 52255                 // '$' 'context'\n     || lk == 52767                 // '$' 'continue'\n     || lk == 53279                 // '$' 'copy'\n     || lk == 53791                 // '$' 'copy-namespaces'\n     || lk == 54303                 // '$' 'count'\n     || lk == 54815                 // '$' 'decimal-format'\n     || lk == 55839                 // '$' 'declare'\n     || lk == 56351                 // '$' 'default'\n     || lk == 56863                 // '$' 'delete'\n     || lk == 57375                 // '$' 'descendant'\n     || lk == 57887                 // '$' 'descendant-or-self'\n     || lk == 58399                 // '$' 'descending'\n     || lk == 60959                 // '$' 'div'\n     || lk == 61471                 // '$' 'document'\n     || lk == 61983                 // '$' 'document-node'\n     || lk == 62495                 // '$' 'element'\n     || lk == 63007                 // '$' 'else'\n     || lk == 63519                 // '$' 'empty'\n     || lk == 64031                 // '$' 'empty-sequence'\n     || lk == 64543                 // '$' 'encoding'\n     || lk == 65055                 // '$' 'end'\n     || lk == 66079                 // '$' 'eq'\n     || lk == 66591                 // '$' 'every'\n     || lk == 67615                 // '$' 'except'\n     || lk == 68127                 // '$' 'exit'\n     || lk == 68639                 // '$' 'external'\n     || lk == 69151                 // '$' 'false'\n     || lk == 69663                 // '$' 'first'\n     || lk == 70175                 // '$' 'following'\n     || lk == 70687                 // '$' 'following-sibling'\n     || lk == 71199                 // '$' 'for'\n     || lk == 72735                 // '$' 'from'\n     || lk == 73247                 // '$' 'ft-option'\n     || lk == 75295                 // '$' 'function'\n     || lk == 75807                 // '$' 'ge'\n     || lk == 76831                 // '$' 'group'\n     || lk == 77855                 // '$' 'gt'\n     || lk == 78367                 // '$' 'idiv'\n     || lk == 78879                 // '$' 'if'\n     || lk == 79391                 // '$' 'import'\n     || lk == 79903                 // '$' 'in'\n     || lk == 80415                 // '$' 'index'\n     || lk == 82463                 // '$' 'insert'\n     || lk == 82975                 // '$' 'instance'\n     || lk == 83487                 // '$' 'integrity'\n     || lk == 83999                 // '$' 'intersect'\n     || lk == 84511                 // '$' 'into'\n     || lk == 85023                 // '$' 'is'\n     || lk == 85535                 // '$' 'item'\n     || lk == 86047                 // '$' 'json'\n     || lk == 86559                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'jsoniq'\n     || lk == 88607                 // '$' 'last'\n     || lk == 89119                 // '$' 'lax'\n     || lk == 89631                 // '$' 'le'\n     || lk == 90655                 // '$' 'let'\n     || lk == 91679                 // '$' 'loop'\n     || lk == 92703                 // '$' 'lt'\n     || lk == 93727                 // '$' 'mod'\n     || lk == 94239                 // '$' 'modify'\n     || lk == 94751                 // '$' 'module'\n     || lk == 95775                 // '$' 'namespace'\n     || lk == 96287                 // '$' 'namespace-node'\n     || lk == 96799                 // '$' 'ne'\n     || lk == 99359                 // '$' 'node'\n     || lk == 99871                 // '$' 'nodes'\n     || lk == 100895                // '$' 'null'\n     || lk == 101407                // '$' 'object'\n     || lk == 103455                // '$' 'only'\n     || lk == 103967                // '$' 'option'\n     || lk == 104479                // '$' 'or'\n     || lk == 104991                // '$' 'order'\n     || lk == 105503                // '$' 'ordered'\n     || lk == 106015                // '$' 'ordering'\n     || lk == 107551                // '$' 'parent'\n     || lk == 110623                // '$' 'preceding'\n     || lk == 111135                // '$' 'preceding-sibling'\n     || lk == 112671                // '$' 'processing-instruction'\n     || lk == 113695                // '$' 'rename'\n     || lk == 114207                // '$' 'replace'\n     || lk == 114719                // '$' 'return'\n     || lk == 115231                // '$' 'returning'\n     || lk == 115743                // '$' 'revalidation'\n     || lk == 116767                // '$' 'satisfies'\n     || lk == 117279                // '$' 'schema'\n     || lk == 117791                // '$' 'schema-attribute'\n     || lk == 118303                // '$' 'schema-element'\n     || lk == 118815                // '$' 'score'\n     || lk == 119327                // '$' 'select'\n     || lk == 119839                // '$' 'self'\n     || lk == 122399                // '$' 'sliding'\n     || lk == 122911                // '$' 'some'\n     || lk == 123423                // '$' 'stable'\n     || lk == 123935                // '$' 'start'\n     || lk == 125471                // '$' 'strict'\n     || lk == 126495                // '$' 'structured-item'\n     || lk == 127007                // '$' 'switch'\n     || lk == 127519                // '$' 'text'\n     || lk == 129567                // '$' 'to'\n     || lk == 130079                // '$' 'treat'\n     || lk == 130591                // '$' 'true'\n     || lk == 131103                // '$' 'try'\n     || lk == 131615                // '$' 'tumbling'\n     || lk == 132127                // '$' 'type'\n     || lk == 132639                // '$' 'typeswitch'\n     || lk == 133151                // '$' 'union'\n     || lk == 134175                // '$' 'unordered'\n     || lk == 134687                // '$' 'updating'\n     || lk == 136223                // '$' 'validate'\n     || lk == 136735                // '$' 'value'\n     || lk == 137247                // '$' 'variable'\n     || lk == 137759                // '$' 'version'\n     || lk == 139295                // '$' 'where'\n     || lk == 139807                // '$' 'while'\n     || lk == 141343)               // '$' 'with'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(205);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n          if (l1 == 53              // ':='\n           || l1 == 80)             // 'as'\n          {\n            if (l1 == 80)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(28);        // S^WS | '(:' | ':='\n            shiftT(53);             // ':='\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n          }\n          if (l1 == 95)             // 'collation'\n          {\n            shiftT(95);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          memoize(2, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(2, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_GroupingVariable();\n      lookahead1W(205);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n      if (l1 == 53                  // ':='\n       || l1 == 80)                 // 'as'\n      {\n        if (l1 == 80)               // 'as'\n        {\n          try_TypeDeclaration();\n        }\n        lookahead1W(28);            // S^WS | '(:' | ':='\n        shiftT(53);                 // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_ExprSingle();\n      }\n      if (l1 == 95)                 // 'collation'\n      {\n        shiftT(95);                 // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shiftT(7);                  // URILiteral\n      }\n      break;\n    case -3:\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_GroupingVariable()\n  {\n    eventHandler.startNonterminal(\"GroupingVariable\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"GroupingVariable\", e0);\n  }\n\n  function try_GroupingVariable()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_OrderByClause()\n  {\n    eventHandler.startNonterminal(\"OrderByClause\", e0);\n    switch (l1)\n    {\n    case 205:                       // 'order'\n      shift(205);                   // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shift(88);                    // 'by'\n      break;\n    default:\n      shift(241);                   // 'stable'\n      lookahead1W(70);              // S^WS | '(:' | 'order'\n      shift(205);                   // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shift(88);                    // 'by'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_OrderSpecList();\n    eventHandler.endNonterminal(\"OrderByClause\", e0);\n  }\n\n  function try_OrderByClause()\n  {\n    switch (l1)\n    {\n    case 205:                       // 'order'\n      shiftT(205);                  // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shiftT(88);                   // 'by'\n      break;\n    default:\n      shiftT(241);                  // 'stable'\n      lookahead1W(70);              // S^WS | '(:' | 'order'\n      shiftT(205);                  // 'order'\n      lookahead1W(37);              // S^WS | '(:' | 'by'\n      shiftT(88);                   // 'by'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_OrderSpecList();\n  }\n\n  function parse_OrderSpecList()\n  {\n    eventHandler.startNonterminal(\"OrderSpecList\", e0);\n    parse_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_OrderSpec();\n    }\n    eventHandler.endNonterminal(\"OrderSpecList\", e0);\n  }\n\n  function try_OrderSpecList()\n  {\n    try_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(198);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_OrderSpec();\n    }\n  }\n\n  function parse_OrderSpec()\n  {\n    eventHandler.startNonterminal(\"OrderSpec\", e0);\n    parse_ExprSingle();\n    whitespace();\n    parse_OrderModifier();\n    eventHandler.endNonterminal(\"OrderSpec\", e0);\n  }\n\n  function try_OrderSpec()\n  {\n    try_ExprSingle();\n    try_OrderModifier();\n  }\n\n  function parse_OrderModifier()\n  {\n    eventHandler.startNonterminal(\"OrderModifier\", e0);\n    if (l1 == 81                    // 'ascending'\n     || l1 == 114)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 81:                      // 'ascending'\n        shift(81);                  // 'ascending'\n        break;\n      default:\n        shift(114);                 // 'descending'\n      }\n    }\n    lookahead1W(202);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n    if (l1 == 124)                  // 'empty'\n    {\n      shift(124);                   // 'empty'\n      lookahead1W(125);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 149:                     // 'greatest'\n        shift(149);                 // 'greatest'\n        break;\n      default:\n        shift(176);                 // 'least'\n      }\n    }\n    lookahead1W(199);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n    if (l1 == 95)                   // 'collation'\n    {\n      shift(95);                    // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n    }\n    eventHandler.endNonterminal(\"OrderModifier\", e0);\n  }\n\n  function try_OrderModifier()\n  {\n    if (l1 == 81                    // 'ascending'\n     || l1 == 114)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 81:                      // 'ascending'\n        shiftT(81);                 // 'ascending'\n        break;\n      default:\n        shiftT(114);                // 'descending'\n      }\n    }\n    lookahead1W(202);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n    if (l1 == 124)                  // 'empty'\n    {\n      shiftT(124);                  // 'empty'\n      lookahead1W(125);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 149:                     // 'greatest'\n        shiftT(149);                // 'greatest'\n        break;\n      default:\n        shiftT(176);                // 'least'\n      }\n    }\n    lookahead1W(199);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n    if (l1 == 95)                   // 'collation'\n    {\n      shiftT(95);                   // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n    }\n  }\n\n  function parse_ReturnClause()\n  {\n    eventHandler.startNonterminal(\"ReturnClause\", e0);\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReturnClause\", e0);\n  }\n\n  function try_ReturnClause()\n  {\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedExpr()\n  {\n    eventHandler.startNonterminal(\"QuantifiedExpr\", e0);\n    switch (l1)\n    {\n    case 240:                       // 'some'\n      shift(240);                   // 'some'\n      break;\n    default:\n      shift(130);                   // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_QuantifiedVarDecl();\n    }\n    shift(228);                     // 'satisfies'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedExpr\", e0);\n  }\n\n  function try_QuantifiedExpr()\n  {\n    switch (l1)\n    {\n    case 240:                       // 'some'\n      shiftT(240);                  // 'some'\n      break;\n    default:\n      shiftT(130);                  // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_QuantifiedVarDecl();\n    }\n    shiftT(228);                    // 'satisfies'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedVarDecl()\n  {\n    eventHandler.startNonterminal(\"QuantifiedVarDecl\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shift(156);                     // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedVarDecl\", e0);\n  }\n\n  function try_QuantifiedVarDecl()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(114);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(56);                // S^WS | '(:' | 'in'\n    shiftT(156);                    // 'in'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchExpr()\n  {\n    eventHandler.startNonterminal(\"SwitchExpr\", e0);\n    shift(248);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchExpr\", e0);\n  }\n\n  function try_SwitchExpr()\n  {\n    shiftT(248);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_SwitchCaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseClause()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseClause\", e0);\n    for (;;)\n    {\n      shift(89);                    // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseClause\", e0);\n  }\n\n  function try_SwitchCaseClause()\n  {\n    for (;;)\n    {\n      shiftT(89);                   // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseOperand()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseOperand\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseOperand\", e0);\n  }\n\n  function try_SwitchCaseOperand()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TypeswitchExpr()\n  {\n    eventHandler.startNonterminal(\"TypeswitchExpr\", e0);\n    shift(259);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TypeswitchExpr\", e0);\n  }\n\n  function try_TypeswitchExpr()\n  {\n    shiftT(259);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_CaseClause();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_CaseClause()\n  {\n    eventHandler.startNonterminal(\"CaseClause\", e0);\n    shift(89);                      // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceTypeUnion();\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"CaseClause\", e0);\n  }\n\n  function try_CaseClause()\n  {\n    shiftT(89);                     // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceTypeUnion();\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SequenceTypeUnion()\n  {\n    eventHandler.startNonterminal(\"SequenceTypeUnion\", e0);\n    parse_SequenceType();\n    for (;;)\n    {\n      lookahead1W(138);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shift(284);                   // '|'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"SequenceTypeUnion\", e0);\n  }\n\n  function try_SequenceTypeUnion()\n  {\n    try_SequenceType();\n    for (;;)\n    {\n      lookahead1W(138);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shiftT(284);                  // '|'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_IfExpr()\n  {\n    eventHandler.startNonterminal(\"IfExpr\", e0);\n    shift(154);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shift(250);                     // 'then'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(123);                     // 'else'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"IfExpr\", e0);\n  }\n\n  function try_IfExpr()\n  {\n    shiftT(154);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shiftT(250);                    // 'then'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(123);                    // 'else'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_TryCatchExpr()\n  {\n    eventHandler.startNonterminal(\"TryCatchExpr\", e0);\n    parse_TryClause();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      whitespace();\n      parse_CatchClause();\n      lookahead1W(207);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n      if (l1 != 92)                 // 'catch'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchExpr\", e0);\n  }\n\n  function try_TryCatchExpr()\n  {\n    try_TryClause();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      try_CatchClause();\n      lookahead1W(207);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n      if (l1 != 92)                 // 'catch'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_TryClause()\n  {\n    eventHandler.startNonterminal(\"TryClause\", e0);\n    shift(256);                     // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TryTargetExpr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"TryClause\", e0);\n  }\n\n  function try_TryClause()\n  {\n    shiftT(256);                    // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TryTargetExpr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_TryTargetExpr()\n  {\n    eventHandler.startNonterminal(\"TryTargetExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"TryTargetExpr\", e0);\n  }\n\n  function try_TryTargetExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_CatchClause()\n  {\n    eventHandler.startNonterminal(\"CatchClause\", e0);\n    shift(92);                      // 'catch'\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_CatchErrorList();\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"CatchClause\", e0);\n  }\n\n  function try_CatchClause()\n  {\n    shiftT(92);                     // 'catch'\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_CatchErrorList();\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_CatchErrorList()\n  {\n    eventHandler.startNonterminal(\"CatchErrorList\", e0);\n    parse_NameTest();\n    for (;;)\n    {\n      lookahead1W(140);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shift(284);                   // '|'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"CatchErrorList\", e0);\n  }\n\n  function try_CatchErrorList()\n  {\n    try_NameTest();\n    for (;;)\n    {\n      lookahead1W(140);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 284)                // '|'\n      {\n        break;\n      }\n      shiftT(284);                  // '|'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NameTest();\n    }\n  }\n\n  function parse_OrExpr()\n  {\n    eventHandler.startNonterminal(\"OrExpr\", e0);\n    parse_AndExpr();\n    for (;;)\n    {\n      if (l1 != 204)                // 'or'\n      {\n        break;\n      }\n      shift(204);                   // 'or'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AndExpr();\n    }\n    eventHandler.endNonterminal(\"OrExpr\", e0);\n  }\n\n  function try_OrExpr()\n  {\n    try_AndExpr();\n    for (;;)\n    {\n      if (l1 != 204)                // 'or'\n      {\n        break;\n      }\n      shiftT(204);                  // 'or'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AndExpr();\n    }\n  }\n\n  function parse_AndExpr()\n  {\n    eventHandler.startNonterminal(\"AndExpr\", e0);\n    parse_NotExpr();\n    for (;;)\n    {\n      if (l1 != 76)                 // 'and'\n      {\n        break;\n      }\n      shift(76);                    // 'and'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_NotExpr();\n    }\n    eventHandler.endNonterminal(\"AndExpr\", e0);\n  }\n\n  function try_AndExpr()\n  {\n    try_NotExpr();\n    for (;;)\n    {\n      if (l1 != 76)                 // 'and'\n      {\n        break;\n      }\n      shiftT(76);                   // 'and'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_NotExpr();\n    }\n  }\n\n  function parse_NotExpr()\n  {\n    eventHandler.startNonterminal(\"NotExpr\", e0);\n    if (l1 == 196)                  // 'not'\n    {\n      shift(196);                   // 'not'\n    }\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ComparisonExpr();\n    eventHandler.endNonterminal(\"NotExpr\", e0);\n  }\n\n  function try_NotExpr()\n  {\n    if (l1 == 196)                  // 'not'\n    {\n      shiftT(196);                  // 'not'\n    }\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ComparisonExpr();\n  }\n\n  function parse_ComparisonExpr()\n  {\n    eventHandler.startNonterminal(\"ComparisonExpr\", e0);\n    parse_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 55                    // '<'\n     || l1 == 58                    // '<<'\n     || l1 == 59                    // '<='\n     || l1 == 61                    // '='\n     || l1 == 62                    // '>'\n     || l1 == 63                    // '>='\n     || l1 == 64                    // '>>'\n     || l1 == 129                   // 'eq'\n     || l1 == 148                   // 'ge'\n     || l1 == 152                   // 'gt'\n     || l1 == 166                   // 'is'\n     || l1 == 175                   // 'le'\n     || l1 == 181                   // 'lt'\n     || l1 == 189)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 129:                     // 'eq'\n      case 148:                     // 'ge'\n      case 152:                     // 'gt'\n      case 175:                     // 'le'\n      case 181:                     // 'lt'\n      case 189:                     // 'ne'\n        whitespace();\n        parse_ValueComp();\n        break;\n      case 58:                      // '<<'\n      case 64:                      // '>>'\n      case 166:                     // 'is'\n        whitespace();\n        parse_NodeComp();\n        break;\n      default:\n        whitespace();\n        parse_GeneralComp();\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_FTContainsExpr();\n    }\n    eventHandler.endNonterminal(\"ComparisonExpr\", e0);\n  }\n\n  function try_ComparisonExpr()\n  {\n    try_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 55                    // '<'\n     || l1 == 58                    // '<<'\n     || l1 == 59                    // '<='\n     || l1 == 61                    // '='\n     || l1 == 62                    // '>'\n     || l1 == 63                    // '>='\n     || l1 == 64                    // '>>'\n     || l1 == 129                   // 'eq'\n     || l1 == 148                   // 'ge'\n     || l1 == 152                   // 'gt'\n     || l1 == 166                   // 'is'\n     || l1 == 175                   // 'le'\n     || l1 == 181                   // 'lt'\n     || l1 == 189)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 129:                     // 'eq'\n      case 148:                     // 'ge'\n      case 152:                     // 'gt'\n      case 175:                     // 'le'\n      case 181:                     // 'lt'\n      case 189:                     // 'ne'\n        try_ValueComp();\n        break;\n      case 58:                      // '<<'\n      case 64:                      // '>>'\n      case 166:                     // 'is'\n        try_NodeComp();\n        break;\n      default:\n        try_GeneralComp();\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_FTContainsExpr();\n    }\n  }\n\n  function parse_FTContainsExpr()\n  {\n    eventHandler.startNonterminal(\"FTContainsExpr\", e0);\n    parse_StringConcatExpr();\n    if (l1 == 100)                  // 'contains'\n    {\n      shift(100);                   // 'contains'\n      lookahead1W(79);              // S^WS | '(:' | 'text'\n      shift(249);                   // 'text'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      if (l1 == 277)                // 'without'\n      {\n        whitespace();\n        parse_FTIgnoreOption();\n      }\n    }\n    eventHandler.endNonterminal(\"FTContainsExpr\", e0);\n  }\n\n  function try_FTContainsExpr()\n  {\n    try_StringConcatExpr();\n    if (l1 == 100)                  // 'contains'\n    {\n      shiftT(100);                  // 'contains'\n      lookahead1W(79);              // S^WS | '(:' | 'text'\n      shiftT(249);                  // 'text'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      if (l1 == 277)                // 'without'\n      {\n        try_FTIgnoreOption();\n      }\n    }\n  }\n\n  function parse_StringConcatExpr()\n  {\n    eventHandler.startNonterminal(\"StringConcatExpr\", e0);\n    parse_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 285)                // '||'\n      {\n        break;\n      }\n      shift(285);                   // '||'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_RangeExpr();\n    }\n    eventHandler.endNonterminal(\"StringConcatExpr\", e0);\n  }\n\n  function try_StringConcatExpr()\n  {\n    try_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 285)                // '||'\n      {\n        break;\n      }\n      shiftT(285);                  // '||'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_RangeExpr();\n    }\n  }\n\n  function parse_RangeExpr()\n  {\n    eventHandler.startNonterminal(\"RangeExpr\", e0);\n    parse_AdditiveExpr();\n    if (l1 == 253)                  // 'to'\n    {\n      shift(253);                   // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"RangeExpr\", e0);\n  }\n\n  function try_RangeExpr()\n  {\n    try_AdditiveExpr();\n    if (l1 == 253)                  // 'to'\n    {\n      shiftT(253);                  // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_AdditiveExpr()\n  {\n    eventHandler.startNonterminal(\"AdditiveExpr\", e0);\n    parse_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 41:                      // '+'\n        shift(41);                  // '+'\n        break;\n      default:\n        shift(43);                  // '-'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_MultiplicativeExpr();\n    }\n    eventHandler.endNonterminal(\"AdditiveExpr\", e0);\n  }\n\n  function try_AdditiveExpr()\n  {\n    try_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 41:                      // '+'\n        shiftT(41);                 // '+'\n        break;\n      default:\n        shiftT(43);                 // '-'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_MultiplicativeExpr();\n    }\n  }\n\n  function parse_MultiplicativeExpr()\n  {\n    eventHandler.startNonterminal(\"MultiplicativeExpr\", e0);\n    parse_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 39                  // '*'\n       && l1 != 119                 // 'div'\n       && l1 != 153                 // 'idiv'\n       && l1 != 183)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 39:                      // '*'\n        shift(39);                  // '*'\n        break;\n      case 119:                     // 'div'\n        shift(119);                 // 'div'\n        break;\n      case 153:                     // 'idiv'\n        shift(153);                 // 'idiv'\n        break;\n      default:\n        shift(183);                 // 'mod'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_UnionExpr();\n    }\n    eventHandler.endNonterminal(\"MultiplicativeExpr\", e0);\n  }\n\n  function try_MultiplicativeExpr()\n  {\n    try_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 39                  // '*'\n       && l1 != 119                 // 'div'\n       && l1 != 153                 // 'idiv'\n       && l1 != 183)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 39:                      // '*'\n        shiftT(39);                 // '*'\n        break;\n      case 119:                     // 'div'\n        shiftT(119);                // 'div'\n        break;\n      case 153:                     // 'idiv'\n        shiftT(153);                // 'idiv'\n        break;\n      default:\n        shiftT(183);                // 'mod'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_UnionExpr();\n    }\n  }\n\n  function parse_UnionExpr()\n  {\n    eventHandler.startNonterminal(\"UnionExpr\", e0);\n    parse_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 260                 // 'union'\n       && l1 != 284)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 260:                     // 'union'\n        shift(260);                 // 'union'\n        break;\n      default:\n        shift(284);                 // '|'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_IntersectExceptExpr();\n    }\n    eventHandler.endNonterminal(\"UnionExpr\", e0);\n  }\n\n  function try_UnionExpr()\n  {\n    try_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 260                 // 'union'\n       && l1 != 284)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 260:                     // 'union'\n        shiftT(260);                // 'union'\n        break;\n      default:\n        shiftT(284);                // '|'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_IntersectExceptExpr();\n    }\n  }\n\n  function parse_IntersectExceptExpr()\n  {\n    eventHandler.startNonterminal(\"IntersectExceptExpr\", e0);\n    parse_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(221);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n      if (l1 != 132                 // 'except'\n       && l1 != 164)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 164:                     // 'intersect'\n        shift(164);                 // 'intersect'\n        break;\n      default:\n        shift(132);                 // 'except'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_InstanceofExpr();\n    }\n    eventHandler.endNonterminal(\"IntersectExceptExpr\", e0);\n  }\n\n  function try_IntersectExceptExpr()\n  {\n    try_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(221);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n      if (l1 != 132                 // 'except'\n       && l1 != 164)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 164:                     // 'intersect'\n        shiftT(164);                // 'intersect'\n        break;\n      default:\n        shiftT(132);                // 'except'\n      }\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_InstanceofExpr();\n    }\n  }\n\n  function parse_InstanceofExpr()\n  {\n    eventHandler.startNonterminal(\"InstanceofExpr\", e0);\n    parse_TreatExpr();\n    lookahead1W(222);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 162)                  // 'instance'\n    {\n      shift(162);                   // 'instance'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shift(200);                   // 'of'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"InstanceofExpr\", e0);\n  }\n\n  function try_InstanceofExpr()\n  {\n    try_TreatExpr();\n    lookahead1W(222);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 162)                  // 'instance'\n    {\n      shiftT(162);                  // 'instance'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shiftT(200);                  // 'of'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_TreatExpr()\n  {\n    eventHandler.startNonterminal(\"TreatExpr\", e0);\n    parse_CastableExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 254)                  // 'treat'\n    {\n      shift(254);                   // 'treat'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"TreatExpr\", e0);\n  }\n\n  function try_TreatExpr()\n  {\n    try_CastableExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 254)                  // 'treat'\n    {\n      shiftT(254);                  // 'treat'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_CastableExpr()\n  {\n    eventHandler.startNonterminal(\"CastableExpr\", e0);\n    parse_CastExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 91)                   // 'castable'\n    {\n      shift(91);                    // 'castable'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastableExpr\", e0);\n  }\n\n  function try_CastableExpr()\n  {\n    try_CastExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 91)                   // 'castable'\n    {\n      shiftT(91);                   // 'castable'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SingleType();\n    }\n  }\n\n  function parse_CastExpr()\n  {\n    eventHandler.startNonterminal(\"CastExpr\", e0);\n    parse_UnaryExpr();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 90)                   // 'cast'\n    {\n      shift(90);                    // 'cast'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastExpr\", e0);\n  }\n\n  function try_CastExpr()\n  {\n    try_UnaryExpr();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 90)                   // 'cast'\n    {\n      shiftT(90);                   // 'cast'\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SingleType();\n    }\n  }\n\n  function parse_UnaryExpr()\n  {\n    eventHandler.startNonterminal(\"UnaryExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 43:                      // '-'\n        shift(43);                  // '-'\n        break;\n      default:\n        shift(41);                  // '+'\n      }\n    }\n    whitespace();\n    parse_ValueExpr();\n    eventHandler.endNonterminal(\"UnaryExpr\", e0);\n  }\n\n  function try_UnaryExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      if (l1 != 41                  // '+'\n       && l1 != 43)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 43:                      // '-'\n        shiftT(43);                 // '-'\n        break;\n      default:\n        shiftT(41);                 // '+'\n      }\n    }\n    try_ValueExpr();\n  }\n\n  function parse_ValueExpr()\n  {\n    eventHandler.startNonterminal(\"ValueExpr\", e0);\n    switch (l1)\n    {\n    case 266:                       // 'validate'\n      lookahead2W(188);             // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 89354:                     // 'validate' 'lax'\n    case 125706:                    // 'validate' 'strict'\n    case 132362:                    // 'validate' 'type'\n    case 144138:                    // 'validate' '{'\n      parse_ValidateExpr();\n      break;\n    case 36:                        // '(#'\n      parse_ExtensionExpr();\n      break;\n    default:\n      parse_SimpleMapExpr();\n    }\n    eventHandler.endNonterminal(\"ValueExpr\", e0);\n  }\n\n  function try_ValueExpr()\n  {\n    switch (l1)\n    {\n    case 266:                       // 'validate'\n      lookahead2W(188);             // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 89354:                     // 'validate' 'lax'\n    case 125706:                    // 'validate' 'strict'\n    case 132362:                    // 'validate' 'type'\n    case 144138:                    // 'validate' '{'\n      try_ValidateExpr();\n      break;\n    case 36:                        // '(#'\n      try_ExtensionExpr();\n      break;\n    default:\n      try_SimpleMapExpr();\n    }\n  }\n\n  function parse_SimpleMapExpr()\n  {\n    eventHandler.startNonterminal(\"SimpleMapExpr\", e0);\n    parse_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shift(26);                    // '!'\n      lookahead1W(262);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_PathExpr();\n    }\n    eventHandler.endNonterminal(\"SimpleMapExpr\", e0);\n  }\n\n  function try_SimpleMapExpr()\n  {\n    try_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shiftT(26);                   // '!'\n      lookahead1W(262);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_PathExpr();\n    }\n  }\n\n  function parse_GeneralComp()\n  {\n    eventHandler.startNonterminal(\"GeneralComp\", e0);\n    switch (l1)\n    {\n    case 61:                        // '='\n      shift(61);                    // '='\n      break;\n    case 27:                        // '!='\n      shift(27);                    // '!='\n      break;\n    case 55:                        // '<'\n      shift(55);                    // '<'\n      break;\n    case 59:                        // '<='\n      shift(59);                    // '<='\n      break;\n    case 62:                        // '>'\n      shift(62);                    // '>'\n      break;\n    default:\n      shift(63);                    // '>='\n    }\n    eventHandler.endNonterminal(\"GeneralComp\", e0);\n  }\n\n  function try_GeneralComp()\n  {\n    switch (l1)\n    {\n    case 61:                        // '='\n      shiftT(61);                   // '='\n      break;\n    case 27:                        // '!='\n      shiftT(27);                   // '!='\n      break;\n    case 55:                        // '<'\n      shiftT(55);                   // '<'\n      break;\n    case 59:                        // '<='\n      shiftT(59);                   // '<='\n      break;\n    case 62:                        // '>'\n      shiftT(62);                   // '>'\n      break;\n    default:\n      shiftT(63);                   // '>='\n    }\n  }\n\n  function parse_ValueComp()\n  {\n    eventHandler.startNonterminal(\"ValueComp\", e0);\n    switch (l1)\n    {\n    case 129:                       // 'eq'\n      shift(129);                   // 'eq'\n      break;\n    case 189:                       // 'ne'\n      shift(189);                   // 'ne'\n      break;\n    case 181:                       // 'lt'\n      shift(181);                   // 'lt'\n      break;\n    case 175:                       // 'le'\n      shift(175);                   // 'le'\n      break;\n    case 152:                       // 'gt'\n      shift(152);                   // 'gt'\n      break;\n    default:\n      shift(148);                   // 'ge'\n    }\n    eventHandler.endNonterminal(\"ValueComp\", e0);\n  }\n\n  function try_ValueComp()\n  {\n    switch (l1)\n    {\n    case 129:                       // 'eq'\n      shiftT(129);                  // 'eq'\n      break;\n    case 189:                       // 'ne'\n      shiftT(189);                  // 'ne'\n      break;\n    case 181:                       // 'lt'\n      shiftT(181);                  // 'lt'\n      break;\n    case 175:                       // 'le'\n      shiftT(175);                  // 'le'\n      break;\n    case 152:                       // 'gt'\n      shiftT(152);                  // 'gt'\n      break;\n    default:\n      shiftT(148);                  // 'ge'\n    }\n  }\n\n  function parse_NodeComp()\n  {\n    eventHandler.startNonterminal(\"NodeComp\", e0);\n    switch (l1)\n    {\n    case 166:                       // 'is'\n      shift(166);                   // 'is'\n      break;\n    case 58:                        // '<<'\n      shift(58);                    // '<<'\n      break;\n    default:\n      shift(64);                    // '>>'\n    }\n    eventHandler.endNonterminal(\"NodeComp\", e0);\n  }\n\n  function try_NodeComp()\n  {\n    switch (l1)\n    {\n    case 166:                       // 'is'\n      shiftT(166);                  // 'is'\n      break;\n    case 58:                        // '<<'\n      shiftT(58);                   // '<<'\n      break;\n    default:\n      shiftT(64);                   // '>>'\n    }\n  }\n\n  function parse_ValidateExpr()\n  {\n    eventHandler.startNonterminal(\"ValidateExpr\", e0);\n    shift(266);                     // 'validate'\n    lookahead1W(175);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 281)                  // '{'\n    {\n      switch (l1)\n      {\n      case 258:                     // 'type'\n        shift(258);                 // 'type'\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n        break;\n      default:\n        whitespace();\n        parse_ValidationMode();\n      }\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"ValidateExpr\", e0);\n  }\n\n  function try_ValidateExpr()\n  {\n    shiftT(266);                    // 'validate'\n    lookahead1W(175);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 281)                  // '{'\n    {\n      switch (l1)\n      {\n      case 258:                     // 'type'\n        shiftT(258);                // 'type'\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n        break;\n      default:\n        try_ValidationMode();\n      }\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_ValidationMode()\n  {\n    eventHandler.startNonterminal(\"ValidationMode\", e0);\n    switch (l1)\n    {\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    default:\n      shift(245);                   // 'strict'\n    }\n    eventHandler.endNonterminal(\"ValidationMode\", e0);\n  }\n\n  function try_ValidationMode()\n  {\n    switch (l1)\n    {\n    case 174:                       // 'lax'\n      shiftT(174);                  // 'lax'\n      break;\n    default:\n      shiftT(245);                  // 'strict'\n    }\n  }\n\n  function parse_ExtensionExpr()\n  {\n    eventHandler.startNonterminal(\"ExtensionExpr\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(281);                     // '{'\n    lookahead1W(274);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"ExtensionExpr\", e0);\n  }\n\n  function try_ExtensionExpr()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(281);                    // '{'\n    lookahead1W(274);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      try_Expr();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_Pragma()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    shift(36);                      // '(#'\n    lookahead1(242);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n    }\n    parse_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(0);                // PragmaContents\n      shift(1);                     // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shift(30);                      // '#)'\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  }\n\n  function try_Pragma()\n  {\n    shiftT(36);                     // '(#'\n    lookahead1(242);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n    }\n    try_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(0);                // PragmaContents\n      shiftT(1);                    // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shiftT(30);                     // '#)'\n  }\n\n  function parse_PathExpr()\n  {\n    eventHandler.startNonterminal(\"PathExpr\", e0);\n    switch (l1)\n    {\n    case 47:                        // '/'\n      shift(47);                    // '/'\n      lookahead1W(288);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 38:                      // ')'\n      case 39:                      // '*'\n      case 41:                      // '+'\n      case 42:                      // ','\n      case 43:                      // '-'\n      case 50:                      // ':'\n      case 54:                      // ';'\n      case 58:                      // '<<'\n      case 59:                      // '<='\n      case 61:                      // '='\n      case 62:                      // '>'\n      case 63:                      // '>='\n      case 64:                      // '>>'\n      case 70:                      // ']'\n      case 88:                      // 'by'\n      case 100:                     // 'contains'\n      case 209:                     // 'paragraphs'\n      case 237:                     // 'sentences'\n      case 252:                     // 'times'\n      case 279:                     // 'words'\n      case 284:                     // '|'\n      case 285:                     // '||'\n      case 286:                     // '|}'\n      case 287:                     // '}'\n        break;\n      default:\n        whitespace();\n        parse_RelativePathExpr();\n      }\n      break;\n    case 48:                        // '//'\n      shift(48);                    // '//'\n      lookahead1W(259);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_RelativePathExpr();\n      break;\n    default:\n      parse_RelativePathExpr();\n    }\n    eventHandler.endNonterminal(\"PathExpr\", e0);\n  }\n\n  function try_PathExpr()\n  {\n    switch (l1)\n    {\n    case 47:                        // '/'\n      shiftT(47);                   // '/'\n      lookahead1W(288);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 38:                      // ')'\n      case 39:                      // '*'\n      case 41:                      // '+'\n      case 42:                      // ','\n      case 43:                      // '-'\n      case 50:                      // ':'\n      case 54:                      // ';'\n      case 58:                      // '<<'\n      case 59:                      // '<='\n      case 61:                      // '='\n      case 62:                      // '>'\n      case 63:                      // '>='\n      case 64:                      // '>>'\n      case 70:                      // ']'\n      case 88:                      // 'by'\n      case 100:                     // 'contains'\n      case 209:                     // 'paragraphs'\n      case 237:                     // 'sentences'\n      case 252:                     // 'times'\n      case 279:                     // 'words'\n      case 284:                     // '|'\n      case 285:                     // '||'\n      case 286:                     // '|}'\n      case 287:                     // '}'\n        break;\n      default:\n        try_RelativePathExpr();\n      }\n      break;\n    case 48:                        // '//'\n      shiftT(48);                   // '//'\n      lookahead1W(259);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_RelativePathExpr();\n      break;\n    default:\n      try_RelativePathExpr();\n    }\n  }\n\n  function parse_RelativePathExpr()\n  {\n    eventHandler.startNonterminal(\"RelativePathExpr\", e0);\n    parse_PostfixExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 38                  // ')'\n       && lk != 39                  // '*'\n       && lk != 41                  // '+'\n       && lk != 42                  // ','\n       && lk != 43                  // '-'\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 50                  // ':'\n       && lk != 54                  // ';'\n       && lk != 55                  // '<'\n       && lk != 58                  // '<<'\n       && lk != 59                  // '<='\n       && lk != 61                  // '='\n       && lk != 62                  // '>'\n       && lk != 63                  // '>='\n       && lk != 64                  // '>>'\n       && lk != 70                  // ']'\n       && lk != 71                  // 'after'\n       && lk != 76                  // 'and'\n       && lk != 80                  // 'as'\n       && lk != 81                  // 'ascending'\n       && lk != 82                  // 'at'\n       && lk != 85                  // 'before'\n       && lk != 88                  // 'by'\n       && lk != 89                  // 'case'\n       && lk != 90                  // 'cast'\n       && lk != 91                  // 'castable'\n       && lk != 95                  // 'collation'\n       && lk != 100                 // 'contains'\n       && lk != 106                 // 'count'\n       && lk != 110                 // 'default'\n       && lk != 114                 // 'descending'\n       && lk != 119                 // 'div'\n       && lk != 123                 // 'else'\n       && lk != 124                 // 'empty'\n       && lk != 127                 // 'end'\n       && lk != 129                 // 'eq'\n       && lk != 132                 // 'except'\n       && lk != 139                 // 'for'\n       && lk != 148                 // 'ge'\n       && lk != 150                 // 'group'\n       && lk != 152                 // 'gt'\n       && lk != 153                 // 'idiv'\n       && lk != 162                 // 'instance'\n       && lk != 164                 // 'intersect'\n       && lk != 165                 // 'into'\n       && lk != 166                 // 'is'\n       && lk != 175                 // 'le'\n       && lk != 177                 // 'let'\n       && lk != 181                 // 'lt'\n       && lk != 183                 // 'mod'\n       && lk != 184                 // 'modify'\n       && lk != 189                 // 'ne'\n       && lk != 202                 // 'only'\n       && lk != 204                 // 'or'\n       && lk != 205                 // 'order'\n       && lk != 209                 // 'paragraphs'\n       && lk != 224                 // 'return'\n       && lk != 228                 // 'satisfies'\n       && lk != 237                 // 'sentences'\n       && lk != 241                 // 'stable'\n       && lk != 242                 // 'start'\n       && lk != 252                 // 'times'\n       && lk != 253                 // 'to'\n       && lk != 254                 // 'treat'\n       && lk != 260                 // 'union'\n       && lk != 272                 // 'where'\n       && lk != 276                 // 'with'\n       && lk != 279                 // 'words'\n       && lk != 284                 // '|'\n       && lk != 285                 // '||'\n       && lk != 286                 // '|}'\n       && lk != 287                 // '}'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 24090               // '!' '/'\n       && lk != 24602               // '!' '//'\n       && lk != 34330)              // '!' '@'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 47:                // '/'\n              shiftT(47);           // '/'\n              break;\n            case 48:                // '//'\n              shiftT(48);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(263);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_StepExpr();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(3, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 34330)              // '!' '@'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 47:                      // '/'\n        shift(47);                  // '/'\n        break;\n      case 48:                      // '//'\n        shift(48);                  // '//'\n        break;\n      default:\n        shift(26);                  // '!'\n      }\n      lookahead1W(263);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_StepExpr();\n    }\n    eventHandler.endNonterminal(\"RelativePathExpr\", e0);\n  }\n\n  function try_RelativePathExpr()\n  {\n    try_PostfixExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 38                  // ')'\n       && lk != 39                  // '*'\n       && lk != 41                  // '+'\n       && lk != 42                  // ','\n       && lk != 43                  // '-'\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 50                  // ':'\n       && lk != 54                  // ';'\n       && lk != 55                  // '<'\n       && lk != 58                  // '<<'\n       && lk != 59                  // '<='\n       && lk != 61                  // '='\n       && lk != 62                  // '>'\n       && lk != 63                  // '>='\n       && lk != 64                  // '>>'\n       && lk != 70                  // ']'\n       && lk != 71                  // 'after'\n       && lk != 76                  // 'and'\n       && lk != 80                  // 'as'\n       && lk != 81                  // 'ascending'\n       && lk != 82                  // 'at'\n       && lk != 85                  // 'before'\n       && lk != 88                  // 'by'\n       && lk != 89                  // 'case'\n       && lk != 90                  // 'cast'\n       && lk != 91                  // 'castable'\n       && lk != 95                  // 'collation'\n       && lk != 100                 // 'contains'\n       && lk != 106                 // 'count'\n       && lk != 110                 // 'default'\n       && lk != 114                 // 'descending'\n       && lk != 119                 // 'div'\n       && lk != 123                 // 'else'\n       && lk != 124                 // 'empty'\n       && lk != 127                 // 'end'\n       && lk != 129                 // 'eq'\n       && lk != 132                 // 'except'\n       && lk != 139                 // 'for'\n       && lk != 148                 // 'ge'\n       && lk != 150                 // 'group'\n       && lk != 152                 // 'gt'\n       && lk != 153                 // 'idiv'\n       && lk != 162                 // 'instance'\n       && lk != 164                 // 'intersect'\n       && lk != 165                 // 'into'\n       && lk != 166                 // 'is'\n       && lk != 175                 // 'le'\n       && lk != 177                 // 'let'\n       && lk != 181                 // 'lt'\n       && lk != 183                 // 'mod'\n       && lk != 184                 // 'modify'\n       && lk != 189                 // 'ne'\n       && lk != 202                 // 'only'\n       && lk != 204                 // 'or'\n       && lk != 205                 // 'order'\n       && lk != 209                 // 'paragraphs'\n       && lk != 224                 // 'return'\n       && lk != 228                 // 'satisfies'\n       && lk != 237                 // 'sentences'\n       && lk != 241                 // 'stable'\n       && lk != 242                 // 'start'\n       && lk != 252                 // 'times'\n       && lk != 253                 // 'to'\n       && lk != 254                 // 'treat'\n       && lk != 260                 // 'union'\n       && lk != 272                 // 'where'\n       && lk != 276                 // 'with'\n       && lk != 279                 // 'words'\n       && lk != 284                 // '|'\n       && lk != 285                 // '||'\n       && lk != 286                 // '|}'\n       && lk != 287                 // '}'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 24090               // '!' '/'\n       && lk != 24602               // '!' '//'\n       && lk != 34330)              // '!' '@'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 47:                // '/'\n              shiftT(47);           // '/'\n              break;\n            case 48:                // '//'\n              shiftT(48);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(263);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_StepExpr();\n            memoize(3, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(3, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 47                  // '/'\n       && lk != 48                  // '//'\n       && lk != 2586                // '!' Wildcard\n       && lk != 23578               // '!' '..'\n       && lk != 34330)              // '!' '@'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 47:                      // '/'\n        shiftT(47);                 // '/'\n        break;\n      case 48:                      // '//'\n        shiftT(48);                 // '//'\n        break;\n      default:\n        shiftT(26);                 // '!'\n      }\n      lookahead1W(263);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_StepExpr();\n    }\n  }\n\n  function parse_StepExpr()\n  {\n    eventHandler.startNonterminal(\"StepExpr\", e0);\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(287);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 122:                       // 'element'\n      lookahead2W(286);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 187:                       // 'namespace'\n    case 220:                       // 'processing-instruction'\n      lookahead2W(284);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n      break;\n    case 97:                        // 'comment'\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 249:                       // 'text'\n    case 262:                       // 'unordered'\n      lookahead2W(238);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 79:                        // 'array'\n    case 125:                       // 'empty-sequence'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 234:                       // 'self'\n      lookahead2W(237);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 121:                       // 'document-node'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 188:                       // 'namespace-node'\n    case 189:                       // 'ne'\n    case 194:                       // 'node'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12935                 // 'false' EOF\n     || lk == 12997                 // 'null' EOF\n     || lk == 13055                 // 'true' EOF\n     || lk == 13447                 // 'false' '!'\n     || lk == 13509                 // 'null' '!'\n     || lk == 13567                 // 'true' '!'\n     || lk == 13959                 // 'false' '!='\n     || lk == 14021                 // 'null' '!='\n     || lk == 14079                 // 'true' '!='\n     || lk == 19591                 // 'false' ')'\n     || lk == 19653                 // 'null' ')'\n     || lk == 19711                 // 'true' ')'\n     || lk == 20103                 // 'false' '*'\n     || lk == 20165                 // 'null' '*'\n     || lk == 20223                 // 'true' '*'\n     || lk == 21127                 // 'false' '+'\n     || lk == 21189                 // 'null' '+'\n     || lk == 21247                 // 'true' '+'\n     || lk == 21639                 // 'false' ','\n     || lk == 21701                 // 'null' ','\n     || lk == 21759                 // 'true' ','\n     || lk == 22151                 // 'false' '-'\n     || lk == 22213                 // 'null' '-'\n     || lk == 22271                 // 'true' '-'\n     || lk == 24199                 // 'false' '/'\n     || lk == 24261                 // 'null' '/'\n     || lk == 24319                 // 'true' '/'\n     || lk == 24711                 // 'false' '//'\n     || lk == 24773                 // 'null' '//'\n     || lk == 24831                 // 'true' '//'\n     || lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855                 // 'true' ':'\n     || lk == 27783                 // 'false' ';'\n     || lk == 27845                 // 'null' ';'\n     || lk == 27903                 // 'true' ';'\n     || lk == 28295                 // 'false' '<'\n     || lk == 28357                 // 'null' '<'\n     || lk == 28415                 // 'true' '<'\n     || lk == 29831                 // 'false' '<<'\n     || lk == 29893                 // 'null' '<<'\n     || lk == 29951                 // 'true' '<<'\n     || lk == 30343                 // 'false' '<='\n     || lk == 30405                 // 'null' '<='\n     || lk == 30463                 // 'true' '<='\n     || lk == 31367                 // 'false' '='\n     || lk == 31429                 // 'null' '='\n     || lk == 31487                 // 'true' '='\n     || lk == 31879                 // 'false' '>'\n     || lk == 31941                 // 'null' '>'\n     || lk == 31999                 // 'true' '>'\n     || lk == 32391                 // 'false' '>='\n     || lk == 32453                 // 'null' '>='\n     || lk == 32511                 // 'true' '>='\n     || lk == 32903                 // 'false' '>>'\n     || lk == 32965                 // 'null' '>>'\n     || lk == 33023                 // 'true' '>>'\n     || lk == 35463                 // 'false' '['\n     || lk == 35525                 // 'null' '['\n     || lk == 35583                 // 'true' '['\n     || lk == 35975                 // 'false' ']'\n     || lk == 36037                 // 'null' ']'\n     || lk == 36095                 // 'true' ']'\n     || lk == 36435                 // 'attribute' 'after'\n     || lk == 36474                 // 'element' 'after'\n     || lk == 36487                 // 'false' 'after'\n     || lk == 36539                 // 'namespace' 'after'\n     || lk == 36549                 // 'null' 'after'\n     || lk == 36572                 // 'processing-instruction' 'after'\n     || lk == 36607                 // 'true' 'after'\n     || lk == 38995                 // 'attribute' 'and'\n     || lk == 39034                 // 'element' 'and'\n     || lk == 39047                 // 'false' 'and'\n     || lk == 39099                 // 'namespace' 'and'\n     || lk == 39109                 // 'null' 'and'\n     || lk == 39132                 // 'processing-instruction' 'and'\n     || lk == 39167                 // 'true' 'and'\n     || lk == 41043                 // 'attribute' 'as'\n     || lk == 41082                 // 'element' 'as'\n     || lk == 41095                 // 'false' 'as'\n     || lk == 41147                 // 'namespace' 'as'\n     || lk == 41157                 // 'null' 'as'\n     || lk == 41180                 // 'processing-instruction' 'as'\n     || lk == 41215                 // 'true' 'as'\n     || lk == 41555                 // 'attribute' 'ascending'\n     || lk == 41594                 // 'element' 'ascending'\n     || lk == 41607                 // 'false' 'ascending'\n     || lk == 41659                 // 'namespace' 'ascending'\n     || lk == 41669                 // 'null' 'ascending'\n     || lk == 41692                 // 'processing-instruction' 'ascending'\n     || lk == 41727                 // 'true' 'ascending'\n     || lk == 42067                 // 'attribute' 'at'\n     || lk == 42106                 // 'element' 'at'\n     || lk == 42119                 // 'false' 'at'\n     || lk == 42171                 // 'namespace' 'at'\n     || lk == 42181                 // 'null' 'at'\n     || lk == 42204                 // 'processing-instruction' 'at'\n     || lk == 42239                 // 'true' 'at'\n     || lk == 43603                 // 'attribute' 'before'\n     || lk == 43642                 // 'element' 'before'\n     || lk == 43655                 // 'false' 'before'\n     || lk == 43707                 // 'namespace' 'before'\n     || lk == 43717                 // 'null' 'before'\n     || lk == 43740                 // 'processing-instruction' 'before'\n     || lk == 43775                 // 'true' 'before'\n     || lk == 45191                 // 'false' 'by'\n     || lk == 45253                 // 'null' 'by'\n     || lk == 45311                 // 'true' 'by'\n     || lk == 45651                 // 'attribute' 'case'\n     || lk == 45690                 // 'element' 'case'\n     || lk == 45703                 // 'false' 'case'\n     || lk == 45755                 // 'namespace' 'case'\n     || lk == 45765                 // 'null' 'case'\n     || lk == 45788                 // 'processing-instruction' 'case'\n     || lk == 45823                 // 'true' 'case'\n     || lk == 46163                 // 'attribute' 'cast'\n     || lk == 46202                 // 'element' 'cast'\n     || lk == 46215                 // 'false' 'cast'\n     || lk == 46267                 // 'namespace' 'cast'\n     || lk == 46277                 // 'null' 'cast'\n     || lk == 46300                 // 'processing-instruction' 'cast'\n     || lk == 46335                 // 'true' 'cast'\n     || lk == 46675                 // 'attribute' 'castable'\n     || lk == 46714                 // 'element' 'castable'\n     || lk == 46727                 // 'false' 'castable'\n     || lk == 46779                 // 'namespace' 'castable'\n     || lk == 46789                 // 'null' 'castable'\n     || lk == 46812                 // 'processing-instruction' 'castable'\n     || lk == 46847                 // 'true' 'castable'\n     || lk == 48723                 // 'attribute' 'collation'\n     || lk == 48762                 // 'element' 'collation'\n     || lk == 48775                 // 'false' 'collation'\n     || lk == 48827                 // 'namespace' 'collation'\n     || lk == 48837                 // 'null' 'collation'\n     || lk == 48860                 // 'processing-instruction' 'collation'\n     || lk == 48895                 // 'true' 'collation'\n     || lk == 51335                 // 'false' 'contains'\n     || lk == 51397                 // 'null' 'contains'\n     || lk == 51455                 // 'true' 'contains'\n     || lk == 54355                 // 'attribute' 'count'\n     || lk == 54394                 // 'element' 'count'\n     || lk == 54407                 // 'false' 'count'\n     || lk == 54459                 // 'namespace' 'count'\n     || lk == 54469                 // 'null' 'count'\n     || lk == 54492                 // 'processing-instruction' 'count'\n     || lk == 54527                 // 'true' 'count'\n     || lk == 56403                 // 'attribute' 'default'\n     || lk == 56442                 // 'element' 'default'\n     || lk == 56455                 // 'false' 'default'\n     || lk == 56507                 // 'namespace' 'default'\n     || lk == 56517                 // 'null' 'default'\n     || lk == 56540                 // 'processing-instruction' 'default'\n     || lk == 56575                 // 'true' 'default'\n     || lk == 58451                 // 'attribute' 'descending'\n     || lk == 58490                 // 'element' 'descending'\n     || lk == 58503                 // 'false' 'descending'\n     || lk == 58555                 // 'namespace' 'descending'\n     || lk == 58565                 // 'null' 'descending'\n     || lk == 58588                 // 'processing-instruction' 'descending'\n     || lk == 58623                 // 'true' 'descending'\n     || lk == 61011                 // 'attribute' 'div'\n     || lk == 61050                 // 'element' 'div'\n     || lk == 61063                 // 'false' 'div'\n     || lk == 61115                 // 'namespace' 'div'\n     || lk == 61125                 // 'null' 'div'\n     || lk == 61148                 // 'processing-instruction' 'div'\n     || lk == 61183                 // 'true' 'div'\n     || lk == 63059                 // 'attribute' 'else'\n     || lk == 63098                 // 'element' 'else'\n     || lk == 63111                 // 'false' 'else'\n     || lk == 63163                 // 'namespace' 'else'\n     || lk == 63173                 // 'null' 'else'\n     || lk == 63196                 // 'processing-instruction' 'else'\n     || lk == 63231                 // 'true' 'else'\n     || lk == 63571                 // 'attribute' 'empty'\n     || lk == 63610                 // 'element' 'empty'\n     || lk == 63623                 // 'false' 'empty'\n     || lk == 63675                 // 'namespace' 'empty'\n     || lk == 63685                 // 'null' 'empty'\n     || lk == 63708                 // 'processing-instruction' 'empty'\n     || lk == 63743                 // 'true' 'empty'\n     || lk == 65107                 // 'attribute' 'end'\n     || lk == 65146                 // 'element' 'end'\n     || lk == 65159                 // 'false' 'end'\n     || lk == 65211                 // 'namespace' 'end'\n     || lk == 65221                 // 'null' 'end'\n     || lk == 65244                 // 'processing-instruction' 'end'\n     || lk == 65279                 // 'true' 'end'\n     || lk == 66131                 // 'attribute' 'eq'\n     || lk == 66170                 // 'element' 'eq'\n     || lk == 66183                 // 'false' 'eq'\n     || lk == 66235                 // 'namespace' 'eq'\n     || lk == 66245                 // 'null' 'eq'\n     || lk == 66268                 // 'processing-instruction' 'eq'\n     || lk == 66303                 // 'true' 'eq'\n     || lk == 67667                 // 'attribute' 'except'\n     || lk == 67706                 // 'element' 'except'\n     || lk == 67719                 // 'false' 'except'\n     || lk == 67771                 // 'namespace' 'except'\n     || lk == 67781                 // 'null' 'except'\n     || lk == 67804                 // 'processing-instruction' 'except'\n     || lk == 67839                 // 'true' 'except'\n     || lk == 71251                 // 'attribute' 'for'\n     || lk == 71290                 // 'element' 'for'\n     || lk == 71303                 // 'false' 'for'\n     || lk == 71355                 // 'namespace' 'for'\n     || lk == 71365                 // 'null' 'for'\n     || lk == 71388                 // 'processing-instruction' 'for'\n     || lk == 71423                 // 'true' 'for'\n     || lk == 75859                 // 'attribute' 'ge'\n     || lk == 75898                 // 'element' 'ge'\n     || lk == 75911                 // 'false' 'ge'\n     || lk == 75963                 // 'namespace' 'ge'\n     || lk == 75973                 // 'null' 'ge'\n     || lk == 75996                 // 'processing-instruction' 'ge'\n     || lk == 76031                 // 'true' 'ge'\n     || lk == 76883                 // 'attribute' 'group'\n     || lk == 76922                 // 'element' 'group'\n     || lk == 76935                 // 'false' 'group'\n     || lk == 76987                 // 'namespace' 'group'\n     || lk == 76997                 // 'null' 'group'\n     || lk == 77020                 // 'processing-instruction' 'group'\n     || lk == 77055                 // 'true' 'group'\n     || lk == 77907                 // 'attribute' 'gt'\n     || lk == 77946                 // 'element' 'gt'\n     || lk == 77959                 // 'false' 'gt'\n     || lk == 78011                 // 'namespace' 'gt'\n     || lk == 78021                 // 'null' 'gt'\n     || lk == 78044                 // 'processing-instruction' 'gt'\n     || lk == 78079                 // 'true' 'gt'\n     || lk == 78419                 // 'attribute' 'idiv'\n     || lk == 78458                 // 'element' 'idiv'\n     || lk == 78471                 // 'false' 'idiv'\n     || lk == 78523                 // 'namespace' 'idiv'\n     || lk == 78533                 // 'null' 'idiv'\n     || lk == 78556                 // 'processing-instruction' 'idiv'\n     || lk == 78591                 // 'true' 'idiv'\n     || lk == 83027                 // 'attribute' 'instance'\n     || lk == 83066                 // 'element' 'instance'\n     || lk == 83079                 // 'false' 'instance'\n     || lk == 83131                 // 'namespace' 'instance'\n     || lk == 83141                 // 'null' 'instance'\n     || lk == 83164                 // 'processing-instruction' 'instance'\n     || lk == 83199                 // 'true' 'instance'\n     || lk == 84051                 // 'attribute' 'intersect'\n     || lk == 84090                 // 'element' 'intersect'\n     || lk == 84103                 // 'false' 'intersect'\n     || lk == 84155                 // 'namespace' 'intersect'\n     || lk == 84165                 // 'null' 'intersect'\n     || lk == 84188                 // 'processing-instruction' 'intersect'\n     || lk == 84223                 // 'true' 'intersect'\n     || lk == 84563                 // 'attribute' 'into'\n     || lk == 84602                 // 'element' 'into'\n     || lk == 84615                 // 'false' 'into'\n     || lk == 84667                 // 'namespace' 'into'\n     || lk == 84677                 // 'null' 'into'\n     || lk == 84700                 // 'processing-instruction' 'into'\n     || lk == 84735                 // 'true' 'into'\n     || lk == 85075                 // 'attribute' 'is'\n     || lk == 85114                 // 'element' 'is'\n     || lk == 85127                 // 'false' 'is'\n     || lk == 85179                 // 'namespace' 'is'\n     || lk == 85189                 // 'null' 'is'\n     || lk == 85212                 // 'processing-instruction' 'is'\n     || lk == 85247                 // 'true' 'is'\n     || lk == 89683                 // 'attribute' 'le'\n     || lk == 89722                 // 'element' 'le'\n     || lk == 89735                 // 'false' 'le'\n     || lk == 89787                 // 'namespace' 'le'\n     || lk == 89797                 // 'null' 'le'\n     || lk == 89820                 // 'processing-instruction' 'le'\n     || lk == 89855                 // 'true' 'le'\n     || lk == 90707                 // 'attribute' 'let'\n     || lk == 90746                 // 'element' 'let'\n     || lk == 90759                 // 'false' 'let'\n     || lk == 90811                 // 'namespace' 'let'\n     || lk == 90821                 // 'null' 'let'\n     || lk == 90844                 // 'processing-instruction' 'let'\n     || lk == 90879                 // 'true' 'let'\n     || lk == 92755                 // 'attribute' 'lt'\n     || lk == 92794                 // 'element' 'lt'\n     || lk == 92807                 // 'false' 'lt'\n     || lk == 92859                 // 'namespace' 'lt'\n     || lk == 92869                 // 'null' 'lt'\n     || lk == 92892                 // 'processing-instruction' 'lt'\n     || lk == 92927                 // 'true' 'lt'\n     || lk == 93779                 // 'attribute' 'mod'\n     || lk == 93818                 // 'element' 'mod'\n     || lk == 93831                 // 'false' 'mod'\n     || lk == 93883                 // 'namespace' 'mod'\n     || lk == 93893                 // 'null' 'mod'\n     || lk == 93916                 // 'processing-instruction' 'mod'\n     || lk == 93951                 // 'true' 'mod'\n     || lk == 94291                 // 'attribute' 'modify'\n     || lk == 94330                 // 'element' 'modify'\n     || lk == 94343                 // 'false' 'modify'\n     || lk == 94395                 // 'namespace' 'modify'\n     || lk == 94405                 // 'null' 'modify'\n     || lk == 94428                 // 'processing-instruction' 'modify'\n     || lk == 94463                 // 'true' 'modify'\n     || lk == 96851                 // 'attribute' 'ne'\n     || lk == 96890                 // 'element' 'ne'\n     || lk == 96903                 // 'false' 'ne'\n     || lk == 96955                 // 'namespace' 'ne'\n     || lk == 96965                 // 'null' 'ne'\n     || lk == 96988                 // 'processing-instruction' 'ne'\n     || lk == 97023                 // 'true' 'ne'\n     || lk == 103507                // 'attribute' 'only'\n     || lk == 103546                // 'element' 'only'\n     || lk == 103559                // 'false' 'only'\n     || lk == 103611                // 'namespace' 'only'\n     || lk == 103621                // 'null' 'only'\n     || lk == 103644                // 'processing-instruction' 'only'\n     || lk == 103679                // 'true' 'only'\n     || lk == 104531                // 'attribute' 'or'\n     || lk == 104570                // 'element' 'or'\n     || lk == 104583                // 'false' 'or'\n     || lk == 104635                // 'namespace' 'or'\n     || lk == 104645                // 'null' 'or'\n     || lk == 104668                // 'processing-instruction' 'or'\n     || lk == 104703                // 'true' 'or'\n     || lk == 105043                // 'attribute' 'order'\n     || lk == 105082                // 'element' 'order'\n     || lk == 105095                // 'false' 'order'\n     || lk == 105147                // 'namespace' 'order'\n     || lk == 105157                // 'null' 'order'\n     || lk == 105180                // 'processing-instruction' 'order'\n     || lk == 105215                // 'true' 'order'\n     || lk == 107143                // 'false' 'paragraphs'\n     || lk == 107205                // 'null' 'paragraphs'\n     || lk == 107263                // 'true' 'paragraphs'\n     || lk == 114771                // 'attribute' 'return'\n     || lk == 114810                // 'element' 'return'\n     || lk == 114823                // 'false' 'return'\n     || lk == 114875                // 'namespace' 'return'\n     || lk == 114885                // 'null' 'return'\n     || lk == 114908                // 'processing-instruction' 'return'\n     || lk == 114943                // 'true' 'return'\n     || lk == 116819                // 'attribute' 'satisfies'\n     || lk == 116858                // 'element' 'satisfies'\n     || lk == 116871                // 'false' 'satisfies'\n     || lk == 116923                // 'namespace' 'satisfies'\n     || lk == 116933                // 'null' 'satisfies'\n     || lk == 116956                // 'processing-instruction' 'satisfies'\n     || lk == 116991                // 'true' 'satisfies'\n     || lk == 121479                // 'false' 'sentences'\n     || lk == 121541                // 'null' 'sentences'\n     || lk == 121599                // 'true' 'sentences'\n     || lk == 123475                // 'attribute' 'stable'\n     || lk == 123514                // 'element' 'stable'\n     || lk == 123527                // 'false' 'stable'\n     || lk == 123579                // 'namespace' 'stable'\n     || lk == 123589                // 'null' 'stable'\n     || lk == 123612                // 'processing-instruction' 'stable'\n     || lk == 123647                // 'true' 'stable'\n     || lk == 123987                // 'attribute' 'start'\n     || lk == 124026                // 'element' 'start'\n     || lk == 124039                // 'false' 'start'\n     || lk == 124091                // 'namespace' 'start'\n     || lk == 124101                // 'null' 'start'\n     || lk == 124124                // 'processing-instruction' 'start'\n     || lk == 124159                // 'true' 'start'\n     || lk == 129159                // 'false' 'times'\n     || lk == 129221                // 'null' 'times'\n     || lk == 129279                // 'true' 'times'\n     || lk == 129619                // 'attribute' 'to'\n     || lk == 129658                // 'element' 'to'\n     || lk == 129671                // 'false' 'to'\n     || lk == 129723                // 'namespace' 'to'\n     || lk == 129733                // 'null' 'to'\n     || lk == 129756                // 'processing-instruction' 'to'\n     || lk == 129791                // 'true' 'to'\n     || lk == 130131                // 'attribute' 'treat'\n     || lk == 130170                // 'element' 'treat'\n     || lk == 130183                // 'false' 'treat'\n     || lk == 130235                // 'namespace' 'treat'\n     || lk == 130245                // 'null' 'treat'\n     || lk == 130268                // 'processing-instruction' 'treat'\n     || lk == 130303                // 'true' 'treat'\n     || lk == 133203                // 'attribute' 'union'\n     || lk == 133242                // 'element' 'union'\n     || lk == 133255                // 'false' 'union'\n     || lk == 133307                // 'namespace' 'union'\n     || lk == 133317                // 'null' 'union'\n     || lk == 133340                // 'processing-instruction' 'union'\n     || lk == 133375                // 'true' 'union'\n     || lk == 139347                // 'attribute' 'where'\n     || lk == 139386                // 'element' 'where'\n     || lk == 139399                // 'false' 'where'\n     || lk == 139451                // 'namespace' 'where'\n     || lk == 139461                // 'null' 'where'\n     || lk == 139484                // 'processing-instruction' 'where'\n     || lk == 139519                // 'true' 'where'\n     || lk == 141395                // 'attribute' 'with'\n     || lk == 141434                // 'element' 'with'\n     || lk == 141447                // 'false' 'with'\n     || lk == 141499                // 'namespace' 'with'\n     || lk == 141509                // 'null' 'with'\n     || lk == 141532                // 'processing-instruction' 'with'\n     || lk == 141567                // 'true' 'with'\n     || lk == 142983                // 'false' 'words'\n     || lk == 143045                // 'null' 'words'\n     || lk == 143103                // 'true' 'words'\n     || lk == 145543                // 'false' '|'\n     || lk == 145605                // 'null' '|'\n     || lk == 145663                // 'true' '|'\n     || lk == 146055                // 'false' '||'\n     || lk == 146117                // 'null' '||'\n     || lk == 146175                // 'true' '||'\n     || lk == 146567                // 'false' '|}'\n     || lk == 146629                // 'null' '|}'\n     || lk == 146687                // 'true' '|}'\n     || lk == 147079                // 'false' '}'\n     || lk == 147141                // 'null' '}'\n     || lk == 147199)               // 'true' '}'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(4, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '$$'\n    case 33:                        // '%'\n    case 35:                        // '('\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n    case 69:                        // '['\n    case 281:                       // '{'\n    case 283:                       // '{|'\n    case 3155:                      // 'attribute' EQName^Token\n    case 3194:                      // 'element' EQName^Token\n    case 9915:                      // 'namespace' NCName^Token\n    case 9948:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14927:                     // 'array' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14969:                     // 'document-node' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14973:                     // 'empty-sequence' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14995:                     // 'function' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15002:                     // 'if' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15015:                     // 'item' '#'\n    case 15016:                     // 'json' '#'\n    case 15017:                     // 'json-item' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15036:                     // 'namespace-node' '#'\n    case 15037:                     // 'ne' '#'\n    case 15042:                     // 'node' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15078:                     // 'schema-attribute' '#'\n    case 15079:                     // 'schema-element' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15095:                     // 'structured-item' '#'\n    case 15096:                     // 'switch' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15107:                     // 'typeswitch' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18055:                     // 'false' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18067:                     // 'function' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18117:                     // 'null' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18175:                     // 'true' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 37459:                     // 'attribute' 'allowing'\n    case 37498:                     // 'element' 'allowing'\n    case 37563:                     // 'namespace' 'allowing'\n    case 37596:                     // 'processing-instruction' 'allowing'\n    case 37971:                     // 'attribute' 'ancestor'\n    case 38010:                     // 'element' 'ancestor'\n    case 38075:                     // 'namespace' 'ancestor'\n    case 38108:                     // 'processing-instruction' 'ancestor'\n    case 38483:                     // 'attribute' 'ancestor-or-self'\n    case 38522:                     // 'element' 'ancestor-or-self'\n    case 38587:                     // 'namespace' 'ancestor-or-self'\n    case 38620:                     // 'processing-instruction' 'ancestor-or-self'\n    case 40019:                     // 'attribute' 'append'\n    case 40058:                     // 'element' 'append'\n    case 40123:                     // 'namespace' 'append'\n    case 40156:                     // 'processing-instruction' 'append'\n    case 40531:                     // 'attribute' 'array'\n    case 40570:                     // 'element' 'array'\n    case 42579:                     // 'attribute' 'attribute'\n    case 42618:                     // 'element' 'attribute'\n    case 42683:                     // 'namespace' 'attribute'\n    case 42716:                     // 'processing-instruction' 'attribute'\n    case 43091:                     // 'attribute' 'base-uri'\n    case 43130:                     // 'element' 'base-uri'\n    case 43195:                     // 'namespace' 'base-uri'\n    case 43228:                     // 'processing-instruction' 'base-uri'\n    case 44115:                     // 'attribute' 'boundary-space'\n    case 44154:                     // 'element' 'boundary-space'\n    case 44219:                     // 'namespace' 'boundary-space'\n    case 44252:                     // 'processing-instruction' 'boundary-space'\n    case 44627:                     // 'attribute' 'break'\n    case 44666:                     // 'element' 'break'\n    case 44731:                     // 'namespace' 'break'\n    case 44764:                     // 'processing-instruction' 'break'\n    case 47187:                     // 'attribute' 'catch'\n    case 47226:                     // 'element' 'catch'\n    case 47291:                     // 'namespace' 'catch'\n    case 47324:                     // 'processing-instruction' 'catch'\n    case 48211:                     // 'attribute' 'child'\n    case 48250:                     // 'element' 'child'\n    case 48315:                     // 'namespace' 'child'\n    case 48348:                     // 'processing-instruction' 'child'\n    case 49747:                     // 'attribute' 'comment'\n    case 49786:                     // 'element' 'comment'\n    case 49851:                     // 'namespace' 'comment'\n    case 49884:                     // 'processing-instruction' 'comment'\n    case 50259:                     // 'attribute' 'constraint'\n    case 50298:                     // 'element' 'constraint'\n    case 50363:                     // 'namespace' 'constraint'\n    case 50396:                     // 'processing-instruction' 'constraint'\n    case 50771:                     // 'attribute' 'construction'\n    case 50810:                     // 'element' 'construction'\n    case 50875:                     // 'namespace' 'construction'\n    case 50908:                     // 'processing-instruction' 'construction'\n    case 52307:                     // 'attribute' 'context'\n    case 52346:                     // 'element' 'context'\n    case 52411:                     // 'namespace' 'context'\n    case 52444:                     // 'processing-instruction' 'context'\n    case 52819:                     // 'attribute' 'continue'\n    case 52858:                     // 'element' 'continue'\n    case 52923:                     // 'namespace' 'continue'\n    case 52956:                     // 'processing-instruction' 'continue'\n    case 53331:                     // 'attribute' 'copy'\n    case 53370:                     // 'element' 'copy'\n    case 53435:                     // 'namespace' 'copy'\n    case 53468:                     // 'processing-instruction' 'copy'\n    case 53843:                     // 'attribute' 'copy-namespaces'\n    case 53882:                     // 'element' 'copy-namespaces'\n    case 53947:                     // 'namespace' 'copy-namespaces'\n    case 53980:                     // 'processing-instruction' 'copy-namespaces'\n    case 54867:                     // 'attribute' 'decimal-format'\n    case 54906:                     // 'element' 'decimal-format'\n    case 54971:                     // 'namespace' 'decimal-format'\n    case 55004:                     // 'processing-instruction' 'decimal-format'\n    case 55891:                     // 'attribute' 'declare'\n    case 55930:                     // 'element' 'declare'\n    case 55995:                     // 'namespace' 'declare'\n    case 56028:                     // 'processing-instruction' 'declare'\n    case 56915:                     // 'attribute' 'delete'\n    case 56954:                     // 'element' 'delete'\n    case 57019:                     // 'namespace' 'delete'\n    case 57052:                     // 'processing-instruction' 'delete'\n    case 57427:                     // 'attribute' 'descendant'\n    case 57466:                     // 'element' 'descendant'\n    case 57531:                     // 'namespace' 'descendant'\n    case 57564:                     // 'processing-instruction' 'descendant'\n    case 57939:                     // 'attribute' 'descendant-or-self'\n    case 57978:                     // 'element' 'descendant-or-self'\n    case 58043:                     // 'namespace' 'descendant-or-self'\n    case 58076:                     // 'processing-instruction' 'descendant-or-self'\n    case 61523:                     // 'attribute' 'document'\n    case 61562:                     // 'element' 'document'\n    case 61627:                     // 'namespace' 'document'\n    case 61660:                     // 'processing-instruction' 'document'\n    case 62035:                     // 'attribute' 'document-node'\n    case 62074:                     // 'element' 'document-node'\n    case 62139:                     // 'namespace' 'document-node'\n    case 62172:                     // 'processing-instruction' 'document-node'\n    case 62547:                     // 'attribute' 'element'\n    case 62586:                     // 'element' 'element'\n    case 62651:                     // 'namespace' 'element'\n    case 62684:                     // 'processing-instruction' 'element'\n    case 64083:                     // 'attribute' 'empty-sequence'\n    case 64122:                     // 'element' 'empty-sequence'\n    case 64187:                     // 'namespace' 'empty-sequence'\n    case 64220:                     // 'processing-instruction' 'empty-sequence'\n    case 64595:                     // 'attribute' 'encoding'\n    case 64634:                     // 'element' 'encoding'\n    case 64699:                     // 'namespace' 'encoding'\n    case 64732:                     // 'processing-instruction' 'encoding'\n    case 66643:                     // 'attribute' 'every'\n    case 66682:                     // 'element' 'every'\n    case 66747:                     // 'namespace' 'every'\n    case 66780:                     // 'processing-instruction' 'every'\n    case 68179:                     // 'attribute' 'exit'\n    case 68218:                     // 'element' 'exit'\n    case 68283:                     // 'namespace' 'exit'\n    case 68316:                     // 'processing-instruction' 'exit'\n    case 68691:                     // 'attribute' 'external'\n    case 68730:                     // 'element' 'external'\n    case 68795:                     // 'namespace' 'external'\n    case 68828:                     // 'processing-instruction' 'external'\n    case 69203:                     // 'attribute' 'false'\n    case 69242:                     // 'element' 'false'\n    case 69307:                     // 'namespace' 'false'\n    case 69340:                     // 'processing-instruction' 'false'\n    case 69715:                     // 'attribute' 'first'\n    case 69754:                     // 'element' 'first'\n    case 69819:                     // 'namespace' 'first'\n    case 69852:                     // 'processing-instruction' 'first'\n    case 70227:                     // 'attribute' 'following'\n    case 70266:                     // 'element' 'following'\n    case 70331:                     // 'namespace' 'following'\n    case 70364:                     // 'processing-instruction' 'following'\n    case 70739:                     // 'attribute' 'following-sibling'\n    case 70778:                     // 'element' 'following-sibling'\n    case 70843:                     // 'namespace' 'following-sibling'\n    case 70876:                     // 'processing-instruction' 'following-sibling'\n    case 72787:                     // 'attribute' 'from'\n    case 72826:                     // 'element' 'from'\n    case 72891:                     // 'namespace' 'from'\n    case 72924:                     // 'processing-instruction' 'from'\n    case 73299:                     // 'attribute' 'ft-option'\n    case 73338:                     // 'element' 'ft-option'\n    case 73403:                     // 'namespace' 'ft-option'\n    case 73436:                     // 'processing-instruction' 'ft-option'\n    case 75347:                     // 'attribute' 'function'\n    case 75386:                     // 'element' 'function'\n    case 75451:                     // 'namespace' 'function'\n    case 75484:                     // 'processing-instruction' 'function'\n    case 78931:                     // 'attribute' 'if'\n    case 78970:                     // 'element' 'if'\n    case 79035:                     // 'namespace' 'if'\n    case 79068:                     // 'processing-instruction' 'if'\n    case 79443:                     // 'attribute' 'import'\n    case 79482:                     // 'element' 'import'\n    case 79547:                     // 'namespace' 'import'\n    case 79580:                     // 'processing-instruction' 'import'\n    case 79955:                     // 'attribute' 'in'\n    case 79994:                     // 'element' 'in'\n    case 80059:                     // 'namespace' 'in'\n    case 80092:                     // 'processing-instruction' 'in'\n    case 80467:                     // 'attribute' 'index'\n    case 80506:                     // 'element' 'index'\n    case 80571:                     // 'namespace' 'index'\n    case 80604:                     // 'processing-instruction' 'index'\n    case 82515:                     // 'attribute' 'insert'\n    case 82554:                     // 'element' 'insert'\n    case 82619:                     // 'namespace' 'insert'\n    case 82652:                     // 'processing-instruction' 'insert'\n    case 83539:                     // 'attribute' 'integrity'\n    case 83578:                     // 'element' 'integrity'\n    case 83643:                     // 'namespace' 'integrity'\n    case 83676:                     // 'processing-instruction' 'integrity'\n    case 85587:                     // 'attribute' 'item'\n    case 85626:                     // 'element' 'item'\n    case 85691:                     // 'namespace' 'item'\n    case 85724:                     // 'processing-instruction' 'item'\n    case 86099:                     // 'attribute' 'json'\n    case 86138:                     // 'element' 'json'\n    case 86203:                     // 'namespace' 'json'\n    case 86236:                     // 'processing-instruction' 'json'\n    case 86611:                     // 'attribute' 'json-item'\n    case 86650:                     // 'element' 'json-item'\n    case 87123:                     // 'attribute' 'jsoniq'\n    case 87162:                     // 'element' 'jsoniq'\n    case 87227:                     // 'namespace' 'jsoniq'\n    case 87260:                     // 'processing-instruction' 'jsoniq'\n    case 88659:                     // 'attribute' 'last'\n    case 88698:                     // 'element' 'last'\n    case 88763:                     // 'namespace' 'last'\n    case 88796:                     // 'processing-instruction' 'last'\n    case 89171:                     // 'attribute' 'lax'\n    case 89210:                     // 'element' 'lax'\n    case 89275:                     // 'namespace' 'lax'\n    case 89308:                     // 'processing-instruction' 'lax'\n    case 91731:                     // 'attribute' 'loop'\n    case 91770:                     // 'element' 'loop'\n    case 91835:                     // 'namespace' 'loop'\n    case 91868:                     // 'processing-instruction' 'loop'\n    case 94803:                     // 'attribute' 'module'\n    case 94842:                     // 'element' 'module'\n    case 94907:                     // 'namespace' 'module'\n    case 94940:                     // 'processing-instruction' 'module'\n    case 95827:                     // 'attribute' 'namespace'\n    case 95866:                     // 'element' 'namespace'\n    case 95931:                     // 'namespace' 'namespace'\n    case 95964:                     // 'processing-instruction' 'namespace'\n    case 96339:                     // 'attribute' 'namespace-node'\n    case 96378:                     // 'element' 'namespace-node'\n    case 96443:                     // 'namespace' 'namespace-node'\n    case 96476:                     // 'processing-instruction' 'namespace-node'\n    case 99411:                     // 'attribute' 'node'\n    case 99450:                     // 'element' 'node'\n    case 99515:                     // 'namespace' 'node'\n    case 99548:                     // 'processing-instruction' 'node'\n    case 99923:                     // 'attribute' 'nodes'\n    case 99962:                     // 'element' 'nodes'\n    case 100027:                    // 'namespace' 'nodes'\n    case 100060:                    // 'processing-instruction' 'nodes'\n    case 100947:                    // 'attribute' 'null'\n    case 100986:                    // 'element' 'null'\n    case 101051:                    // 'namespace' 'null'\n    case 101084:                    // 'processing-instruction' 'null'\n    case 101459:                    // 'attribute' 'object'\n    case 101498:                    // 'element' 'object'\n    case 101563:                    // 'namespace' 'object'\n    case 101596:                    // 'processing-instruction' 'object'\n    case 104019:                    // 'attribute' 'option'\n    case 104058:                    // 'element' 'option'\n    case 104123:                    // 'namespace' 'option'\n    case 104156:                    // 'processing-instruction' 'option'\n    case 105555:                    // 'attribute' 'ordered'\n    case 105594:                    // 'element' 'ordered'\n    case 105659:                    // 'namespace' 'ordered'\n    case 105692:                    // 'processing-instruction' 'ordered'\n    case 106067:                    // 'attribute' 'ordering'\n    case 106106:                    // 'element' 'ordering'\n    case 106171:                    // 'namespace' 'ordering'\n    case 106204:                    // 'processing-instruction' 'ordering'\n    case 107603:                    // 'attribute' 'parent'\n    case 107642:                    // 'element' 'parent'\n    case 107707:                    // 'namespace' 'parent'\n    case 107740:                    // 'processing-instruction' 'parent'\n    case 110675:                    // 'attribute' 'preceding'\n    case 110714:                    // 'element' 'preceding'\n    case 110779:                    // 'namespace' 'preceding'\n    case 110812:                    // 'processing-instruction' 'preceding'\n    case 111187:                    // 'attribute' 'preceding-sibling'\n    case 111226:                    // 'element' 'preceding-sibling'\n    case 111291:                    // 'namespace' 'preceding-sibling'\n    case 111324:                    // 'processing-instruction' 'preceding-sibling'\n    case 112723:                    // 'attribute' 'processing-instruction'\n    case 112762:                    // 'element' 'processing-instruction'\n    case 112827:                    // 'namespace' 'processing-instruction'\n    case 112860:                    // 'processing-instruction' 'processing-instruction'\n    case 113747:                    // 'attribute' 'rename'\n    case 113786:                    // 'element' 'rename'\n    case 113851:                    // 'namespace' 'rename'\n    case 113884:                    // 'processing-instruction' 'rename'\n    case 114259:                    // 'attribute' 'replace'\n    case 114298:                    // 'element' 'replace'\n    case 114363:                    // 'namespace' 'replace'\n    case 114396:                    // 'processing-instruction' 'replace'\n    case 115283:                    // 'attribute' 'returning'\n    case 115322:                    // 'element' 'returning'\n    case 115387:                    // 'namespace' 'returning'\n    case 115420:                    // 'processing-instruction' 'returning'\n    case 115795:                    // 'attribute' 'revalidation'\n    case 115834:                    // 'element' 'revalidation'\n    case 115899:                    // 'namespace' 'revalidation'\n    case 115932:                    // 'processing-instruction' 'revalidation'\n    case 117331:                    // 'attribute' 'schema'\n    case 117370:                    // 'element' 'schema'\n    case 117435:                    // 'namespace' 'schema'\n    case 117468:                    // 'processing-instruction' 'schema'\n    case 117843:                    // 'attribute' 'schema-attribute'\n    case 117882:                    // 'element' 'schema-attribute'\n    case 117947:                    // 'namespace' 'schema-attribute'\n    case 117980:                    // 'processing-instruction' 'schema-attribute'\n    case 118355:                    // 'attribute' 'schema-element'\n    case 118394:                    // 'element' 'schema-element'\n    case 118459:                    // 'namespace' 'schema-element'\n    case 118492:                    // 'processing-instruction' 'schema-element'\n    case 118867:                    // 'attribute' 'score'\n    case 118906:                    // 'element' 'score'\n    case 118971:                    // 'namespace' 'score'\n    case 119004:                    // 'processing-instruction' 'score'\n    case 119379:                    // 'attribute' 'select'\n    case 119418:                    // 'element' 'select'\n    case 119483:                    // 'namespace' 'select'\n    case 119516:                    // 'processing-instruction' 'select'\n    case 119891:                    // 'attribute' 'self'\n    case 119930:                    // 'element' 'self'\n    case 119995:                    // 'namespace' 'self'\n    case 120028:                    // 'processing-instruction' 'self'\n    case 122451:                    // 'attribute' 'sliding'\n    case 122490:                    // 'element' 'sliding'\n    case 122555:                    // 'namespace' 'sliding'\n    case 122588:                    // 'processing-instruction' 'sliding'\n    case 122963:                    // 'attribute' 'some'\n    case 123002:                    // 'element' 'some'\n    case 123067:                    // 'namespace' 'some'\n    case 123100:                    // 'processing-instruction' 'some'\n    case 125523:                    // 'attribute' 'strict'\n    case 125562:                    // 'element' 'strict'\n    case 125627:                    // 'namespace' 'strict'\n    case 125660:                    // 'processing-instruction' 'strict'\n    case 126547:                    // 'attribute' 'structured-item'\n    case 126586:                    // 'element' 'structured-item'\n    case 127059:                    // 'attribute' 'switch'\n    case 127098:                    // 'element' 'switch'\n    case 127163:                    // 'namespace' 'switch'\n    case 127196:                    // 'processing-instruction' 'switch'\n    case 127571:                    // 'attribute' 'text'\n    case 127610:                    // 'element' 'text'\n    case 127675:                    // 'namespace' 'text'\n    case 127708:                    // 'processing-instruction' 'text'\n    case 130643:                    // 'attribute' 'true'\n    case 130682:                    // 'element' 'true'\n    case 130747:                    // 'namespace' 'true'\n    case 130780:                    // 'processing-instruction' 'true'\n    case 131155:                    // 'attribute' 'try'\n    case 131194:                    // 'element' 'try'\n    case 131259:                    // 'namespace' 'try'\n    case 131292:                    // 'processing-instruction' 'try'\n    case 131667:                    // 'attribute' 'tumbling'\n    case 131706:                    // 'element' 'tumbling'\n    case 131771:                    // 'namespace' 'tumbling'\n    case 131804:                    // 'processing-instruction' 'tumbling'\n    case 132179:                    // 'attribute' 'type'\n    case 132218:                    // 'element' 'type'\n    case 132283:                    // 'namespace' 'type'\n    case 132316:                    // 'processing-instruction' 'type'\n    case 132691:                    // 'attribute' 'typeswitch'\n    case 132730:                    // 'element' 'typeswitch'\n    case 132795:                    // 'namespace' 'typeswitch'\n    case 132828:                    // 'processing-instruction' 'typeswitch'\n    case 134227:                    // 'attribute' 'unordered'\n    case 134266:                    // 'element' 'unordered'\n    case 134331:                    // 'namespace' 'unordered'\n    case 134364:                    // 'processing-instruction' 'unordered'\n    case 134739:                    // 'attribute' 'updating'\n    case 134778:                    // 'element' 'updating'\n    case 134843:                    // 'namespace' 'updating'\n    case 134876:                    // 'processing-instruction' 'updating'\n    case 136275:                    // 'attribute' 'validate'\n    case 136314:                    // 'element' 'validate'\n    case 136379:                    // 'namespace' 'validate'\n    case 136412:                    // 'processing-instruction' 'validate'\n    case 136787:                    // 'attribute' 'value'\n    case 136826:                    // 'element' 'value'\n    case 136891:                    // 'namespace' 'value'\n    case 136924:                    // 'processing-instruction' 'value'\n    case 137299:                    // 'attribute' 'variable'\n    case 137338:                    // 'element' 'variable'\n    case 137403:                    // 'namespace' 'variable'\n    case 137436:                    // 'processing-instruction' 'variable'\n    case 137811:                    // 'attribute' 'version'\n    case 137850:                    // 'element' 'version'\n    case 137915:                    // 'namespace' 'version'\n    case 137948:                    // 'processing-instruction' 'version'\n    case 139859:                    // 'attribute' 'while'\n    case 139898:                    // 'element' 'while'\n    case 139963:                    // 'namespace' 'while'\n    case 139996:                    // 'processing-instruction' 'while'\n    case 143955:                    // 'attribute' '{'\n    case 143969:                    // 'comment' '{'\n    case 143992:                    // 'document' '{'\n    case 143994:                    // 'element' '{'\n    case 144059:                    // 'namespace' '{'\n    case 144078:                    // 'ordered' '{'\n    case 144092:                    // 'processing-instruction' '{'\n    case 144121:                    // 'text' '{'\n    case 144134:                    // 'unordered' '{'\n      parse_PostfixExpr();\n      break;\n    default:\n      parse_AxisStep();\n    }\n    eventHandler.endNonterminal(\"StepExpr\", e0);\n  }\n\n  function try_StepExpr()\n  {\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(287);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 122:                       // 'element'\n      lookahead2W(286);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 187:                       // 'namespace'\n    case 220:                       // 'processing-instruction'\n      lookahead2W(284);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n      break;\n    case 97:                        // 'comment'\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 249:                       // 'text'\n    case 262:                       // 'unordered'\n      lookahead2W(238);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 79:                        // 'array'\n    case 125:                       // 'empty-sequence'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 234:                       // 'self'\n      lookahead2W(237);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 121:                       // 'document-node'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 188:                       // 'namespace-node'\n    case 189:                       // 'ne'\n    case 194:                       // 'node'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12935                 // 'false' EOF\n     || lk == 12997                 // 'null' EOF\n     || lk == 13055                 // 'true' EOF\n     || lk == 13447                 // 'false' '!'\n     || lk == 13509                 // 'null' '!'\n     || lk == 13567                 // 'true' '!'\n     || lk == 13959                 // 'false' '!='\n     || lk == 14021                 // 'null' '!='\n     || lk == 14079                 // 'true' '!='\n     || lk == 19591                 // 'false' ')'\n     || lk == 19653                 // 'null' ')'\n     || lk == 19711                 // 'true' ')'\n     || lk == 20103                 // 'false' '*'\n     || lk == 20165                 // 'null' '*'\n     || lk == 20223                 // 'true' '*'\n     || lk == 21127                 // 'false' '+'\n     || lk == 21189                 // 'null' '+'\n     || lk == 21247                 // 'true' '+'\n     || lk == 21639                 // 'false' ','\n     || lk == 21701                 // 'null' ','\n     || lk == 21759                 // 'true' ','\n     || lk == 22151                 // 'false' '-'\n     || lk == 22213                 // 'null' '-'\n     || lk == 22271                 // 'true' '-'\n     || lk == 24199                 // 'false' '/'\n     || lk == 24261                 // 'null' '/'\n     || lk == 24319                 // 'true' '/'\n     || lk == 24711                 // 'false' '//'\n     || lk == 24773                 // 'null' '//'\n     || lk == 24831                 // 'true' '//'\n     || lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855                 // 'true' ':'\n     || lk == 27783                 // 'false' ';'\n     || lk == 27845                 // 'null' ';'\n     || lk == 27903                 // 'true' ';'\n     || lk == 28295                 // 'false' '<'\n     || lk == 28357                 // 'null' '<'\n     || lk == 28415                 // 'true' '<'\n     || lk == 29831                 // 'false' '<<'\n     || lk == 29893                 // 'null' '<<'\n     || lk == 29951                 // 'true' '<<'\n     || lk == 30343                 // 'false' '<='\n     || lk == 30405                 // 'null' '<='\n     || lk == 30463                 // 'true' '<='\n     || lk == 31367                 // 'false' '='\n     || lk == 31429                 // 'null' '='\n     || lk == 31487                 // 'true' '='\n     || lk == 31879                 // 'false' '>'\n     || lk == 31941                 // 'null' '>'\n     || lk == 31999                 // 'true' '>'\n     || lk == 32391                 // 'false' '>='\n     || lk == 32453                 // 'null' '>='\n     || lk == 32511                 // 'true' '>='\n     || lk == 32903                 // 'false' '>>'\n     || lk == 32965                 // 'null' '>>'\n     || lk == 33023                 // 'true' '>>'\n     || lk == 35463                 // 'false' '['\n     || lk == 35525                 // 'null' '['\n     || lk == 35583                 // 'true' '['\n     || lk == 35975                 // 'false' ']'\n     || lk == 36037                 // 'null' ']'\n     || lk == 36095                 // 'true' ']'\n     || lk == 36435                 // 'attribute' 'after'\n     || lk == 36474                 // 'element' 'after'\n     || lk == 36487                 // 'false' 'after'\n     || lk == 36539                 // 'namespace' 'after'\n     || lk == 36549                 // 'null' 'after'\n     || lk == 36572                 // 'processing-instruction' 'after'\n     || lk == 36607                 // 'true' 'after'\n     || lk == 38995                 // 'attribute' 'and'\n     || lk == 39034                 // 'element' 'and'\n     || lk == 39047                 // 'false' 'and'\n     || lk == 39099                 // 'namespace' 'and'\n     || lk == 39109                 // 'null' 'and'\n     || lk == 39132                 // 'processing-instruction' 'and'\n     || lk == 39167                 // 'true' 'and'\n     || lk == 41043                 // 'attribute' 'as'\n     || lk == 41082                 // 'element' 'as'\n     || lk == 41095                 // 'false' 'as'\n     || lk == 41147                 // 'namespace' 'as'\n     || lk == 41157                 // 'null' 'as'\n     || lk == 41180                 // 'processing-instruction' 'as'\n     || lk == 41215                 // 'true' 'as'\n     || lk == 41555                 // 'attribute' 'ascending'\n     || lk == 41594                 // 'element' 'ascending'\n     || lk == 41607                 // 'false' 'ascending'\n     || lk == 41659                 // 'namespace' 'ascending'\n     || lk == 41669                 // 'null' 'ascending'\n     || lk == 41692                 // 'processing-instruction' 'ascending'\n     || lk == 41727                 // 'true' 'ascending'\n     || lk == 42067                 // 'attribute' 'at'\n     || lk == 42106                 // 'element' 'at'\n     || lk == 42119                 // 'false' 'at'\n     || lk == 42171                 // 'namespace' 'at'\n     || lk == 42181                 // 'null' 'at'\n     || lk == 42204                 // 'processing-instruction' 'at'\n     || lk == 42239                 // 'true' 'at'\n     || lk == 43603                 // 'attribute' 'before'\n     || lk == 43642                 // 'element' 'before'\n     || lk == 43655                 // 'false' 'before'\n     || lk == 43707                 // 'namespace' 'before'\n     || lk == 43717                 // 'null' 'before'\n     || lk == 43740                 // 'processing-instruction' 'before'\n     || lk == 43775                 // 'true' 'before'\n     || lk == 45191                 // 'false' 'by'\n     || lk == 45253                 // 'null' 'by'\n     || lk == 45311                 // 'true' 'by'\n     || lk == 45651                 // 'attribute' 'case'\n     || lk == 45690                 // 'element' 'case'\n     || lk == 45703                 // 'false' 'case'\n     || lk == 45755                 // 'namespace' 'case'\n     || lk == 45765                 // 'null' 'case'\n     || lk == 45788                 // 'processing-instruction' 'case'\n     || lk == 45823                 // 'true' 'case'\n     || lk == 46163                 // 'attribute' 'cast'\n     || lk == 46202                 // 'element' 'cast'\n     || lk == 46215                 // 'false' 'cast'\n     || lk == 46267                 // 'namespace' 'cast'\n     || lk == 46277                 // 'null' 'cast'\n     || lk == 46300                 // 'processing-instruction' 'cast'\n     || lk == 46335                 // 'true' 'cast'\n     || lk == 46675                 // 'attribute' 'castable'\n     || lk == 46714                 // 'element' 'castable'\n     || lk == 46727                 // 'false' 'castable'\n     || lk == 46779                 // 'namespace' 'castable'\n     || lk == 46789                 // 'null' 'castable'\n     || lk == 46812                 // 'processing-instruction' 'castable'\n     || lk == 46847                 // 'true' 'castable'\n     || lk == 48723                 // 'attribute' 'collation'\n     || lk == 48762                 // 'element' 'collation'\n     || lk == 48775                 // 'false' 'collation'\n     || lk == 48827                 // 'namespace' 'collation'\n     || lk == 48837                 // 'null' 'collation'\n     || lk == 48860                 // 'processing-instruction' 'collation'\n     || lk == 48895                 // 'true' 'collation'\n     || lk == 51335                 // 'false' 'contains'\n     || lk == 51397                 // 'null' 'contains'\n     || lk == 51455                 // 'true' 'contains'\n     || lk == 54355                 // 'attribute' 'count'\n     || lk == 54394                 // 'element' 'count'\n     || lk == 54407                 // 'false' 'count'\n     || lk == 54459                 // 'namespace' 'count'\n     || lk == 54469                 // 'null' 'count'\n     || lk == 54492                 // 'processing-instruction' 'count'\n     || lk == 54527                 // 'true' 'count'\n     || lk == 56403                 // 'attribute' 'default'\n     || lk == 56442                 // 'element' 'default'\n     || lk == 56455                 // 'false' 'default'\n     || lk == 56507                 // 'namespace' 'default'\n     || lk == 56517                 // 'null' 'default'\n     || lk == 56540                 // 'processing-instruction' 'default'\n     || lk == 56575                 // 'true' 'default'\n     || lk == 58451                 // 'attribute' 'descending'\n     || lk == 58490                 // 'element' 'descending'\n     || lk == 58503                 // 'false' 'descending'\n     || lk == 58555                 // 'namespace' 'descending'\n     || lk == 58565                 // 'null' 'descending'\n     || lk == 58588                 // 'processing-instruction' 'descending'\n     || lk == 58623                 // 'true' 'descending'\n     || lk == 61011                 // 'attribute' 'div'\n     || lk == 61050                 // 'element' 'div'\n     || lk == 61063                 // 'false' 'div'\n     || lk == 61115                 // 'namespace' 'div'\n     || lk == 61125                 // 'null' 'div'\n     || lk == 61148                 // 'processing-instruction' 'div'\n     || lk == 61183                 // 'true' 'div'\n     || lk == 63059                 // 'attribute' 'else'\n     || lk == 63098                 // 'element' 'else'\n     || lk == 63111                 // 'false' 'else'\n     || lk == 63163                 // 'namespace' 'else'\n     || lk == 63173                 // 'null' 'else'\n     || lk == 63196                 // 'processing-instruction' 'else'\n     || lk == 63231                 // 'true' 'else'\n     || lk == 63571                 // 'attribute' 'empty'\n     || lk == 63610                 // 'element' 'empty'\n     || lk == 63623                 // 'false' 'empty'\n     || lk == 63675                 // 'namespace' 'empty'\n     || lk == 63685                 // 'null' 'empty'\n     || lk == 63708                 // 'processing-instruction' 'empty'\n     || lk == 63743                 // 'true' 'empty'\n     || lk == 65107                 // 'attribute' 'end'\n     || lk == 65146                 // 'element' 'end'\n     || lk == 65159                 // 'false' 'end'\n     || lk == 65211                 // 'namespace' 'end'\n     || lk == 65221                 // 'null' 'end'\n     || lk == 65244                 // 'processing-instruction' 'end'\n     || lk == 65279                 // 'true' 'end'\n     || lk == 66131                 // 'attribute' 'eq'\n     || lk == 66170                 // 'element' 'eq'\n     || lk == 66183                 // 'false' 'eq'\n     || lk == 66235                 // 'namespace' 'eq'\n     || lk == 66245                 // 'null' 'eq'\n     || lk == 66268                 // 'processing-instruction' 'eq'\n     || lk == 66303                 // 'true' 'eq'\n     || lk == 67667                 // 'attribute' 'except'\n     || lk == 67706                 // 'element' 'except'\n     || lk == 67719                 // 'false' 'except'\n     || lk == 67771                 // 'namespace' 'except'\n     || lk == 67781                 // 'null' 'except'\n     || lk == 67804                 // 'processing-instruction' 'except'\n     || lk == 67839                 // 'true' 'except'\n     || lk == 71251                 // 'attribute' 'for'\n     || lk == 71290                 // 'element' 'for'\n     || lk == 71303                 // 'false' 'for'\n     || lk == 71355                 // 'namespace' 'for'\n     || lk == 71365                 // 'null' 'for'\n     || lk == 71388                 // 'processing-instruction' 'for'\n     || lk == 71423                 // 'true' 'for'\n     || lk == 75859                 // 'attribute' 'ge'\n     || lk == 75898                 // 'element' 'ge'\n     || lk == 75911                 // 'false' 'ge'\n     || lk == 75963                 // 'namespace' 'ge'\n     || lk == 75973                 // 'null' 'ge'\n     || lk == 75996                 // 'processing-instruction' 'ge'\n     || lk == 76031                 // 'true' 'ge'\n     || lk == 76883                 // 'attribute' 'group'\n     || lk == 76922                 // 'element' 'group'\n     || lk == 76935                 // 'false' 'group'\n     || lk == 76987                 // 'namespace' 'group'\n     || lk == 76997                 // 'null' 'group'\n     || lk == 77020                 // 'processing-instruction' 'group'\n     || lk == 77055                 // 'true' 'group'\n     || lk == 77907                 // 'attribute' 'gt'\n     || lk == 77946                 // 'element' 'gt'\n     || lk == 77959                 // 'false' 'gt'\n     || lk == 78011                 // 'namespace' 'gt'\n     || lk == 78021                 // 'null' 'gt'\n     || lk == 78044                 // 'processing-instruction' 'gt'\n     || lk == 78079                 // 'true' 'gt'\n     || lk == 78419                 // 'attribute' 'idiv'\n     || lk == 78458                 // 'element' 'idiv'\n     || lk == 78471                 // 'false' 'idiv'\n     || lk == 78523                 // 'namespace' 'idiv'\n     || lk == 78533                 // 'null' 'idiv'\n     || lk == 78556                 // 'processing-instruction' 'idiv'\n     || lk == 78591                 // 'true' 'idiv'\n     || lk == 83027                 // 'attribute' 'instance'\n     || lk == 83066                 // 'element' 'instance'\n     || lk == 83079                 // 'false' 'instance'\n     || lk == 83131                 // 'namespace' 'instance'\n     || lk == 83141                 // 'null' 'instance'\n     || lk == 83164                 // 'processing-instruction' 'instance'\n     || lk == 83199                 // 'true' 'instance'\n     || lk == 84051                 // 'attribute' 'intersect'\n     || lk == 84090                 // 'element' 'intersect'\n     || lk == 84103                 // 'false' 'intersect'\n     || lk == 84155                 // 'namespace' 'intersect'\n     || lk == 84165                 // 'null' 'intersect'\n     || lk == 84188                 // 'processing-instruction' 'intersect'\n     || lk == 84223                 // 'true' 'intersect'\n     || lk == 84563                 // 'attribute' 'into'\n     || lk == 84602                 // 'element' 'into'\n     || lk == 84615                 // 'false' 'into'\n     || lk == 84667                 // 'namespace' 'into'\n     || lk == 84677                 // 'null' 'into'\n     || lk == 84700                 // 'processing-instruction' 'into'\n     || lk == 84735                 // 'true' 'into'\n     || lk == 85075                 // 'attribute' 'is'\n     || lk == 85114                 // 'element' 'is'\n     || lk == 85127                 // 'false' 'is'\n     || lk == 85179                 // 'namespace' 'is'\n     || lk == 85189                 // 'null' 'is'\n     || lk == 85212                 // 'processing-instruction' 'is'\n     || lk == 85247                 // 'true' 'is'\n     || lk == 89683                 // 'attribute' 'le'\n     || lk == 89722                 // 'element' 'le'\n     || lk == 89735                 // 'false' 'le'\n     || lk == 89787                 // 'namespace' 'le'\n     || lk == 89797                 // 'null' 'le'\n     || lk == 89820                 // 'processing-instruction' 'le'\n     || lk == 89855                 // 'true' 'le'\n     || lk == 90707                 // 'attribute' 'let'\n     || lk == 90746                 // 'element' 'let'\n     || lk == 90759                 // 'false' 'let'\n     || lk == 90811                 // 'namespace' 'let'\n     || lk == 90821                 // 'null' 'let'\n     || lk == 90844                 // 'processing-instruction' 'let'\n     || lk == 90879                 // 'true' 'let'\n     || lk == 92755                 // 'attribute' 'lt'\n     || lk == 92794                 // 'element' 'lt'\n     || lk == 92807                 // 'false' 'lt'\n     || lk == 92859                 // 'namespace' 'lt'\n     || lk == 92869                 // 'null' 'lt'\n     || lk == 92892                 // 'processing-instruction' 'lt'\n     || lk == 92927                 // 'true' 'lt'\n     || lk == 93779                 // 'attribute' 'mod'\n     || lk == 93818                 // 'element' 'mod'\n     || lk == 93831                 // 'false' 'mod'\n     || lk == 93883                 // 'namespace' 'mod'\n     || lk == 93893                 // 'null' 'mod'\n     || lk == 93916                 // 'processing-instruction' 'mod'\n     || lk == 93951                 // 'true' 'mod'\n     || lk == 94291                 // 'attribute' 'modify'\n     || lk == 94330                 // 'element' 'modify'\n     || lk == 94343                 // 'false' 'modify'\n     || lk == 94395                 // 'namespace' 'modify'\n     || lk == 94405                 // 'null' 'modify'\n     || lk == 94428                 // 'processing-instruction' 'modify'\n     || lk == 94463                 // 'true' 'modify'\n     || lk == 96851                 // 'attribute' 'ne'\n     || lk == 96890                 // 'element' 'ne'\n     || lk == 96903                 // 'false' 'ne'\n     || lk == 96955                 // 'namespace' 'ne'\n     || lk == 96965                 // 'null' 'ne'\n     || lk == 96988                 // 'processing-instruction' 'ne'\n     || lk == 97023                 // 'true' 'ne'\n     || lk == 103507                // 'attribute' 'only'\n     || lk == 103546                // 'element' 'only'\n     || lk == 103559                // 'false' 'only'\n     || lk == 103611                // 'namespace' 'only'\n     || lk == 103621                // 'null' 'only'\n     || lk == 103644                // 'processing-instruction' 'only'\n     || lk == 103679                // 'true' 'only'\n     || lk == 104531                // 'attribute' 'or'\n     || lk == 104570                // 'element' 'or'\n     || lk == 104583                // 'false' 'or'\n     || lk == 104635                // 'namespace' 'or'\n     || lk == 104645                // 'null' 'or'\n     || lk == 104668                // 'processing-instruction' 'or'\n     || lk == 104703                // 'true' 'or'\n     || lk == 105043                // 'attribute' 'order'\n     || lk == 105082                // 'element' 'order'\n     || lk == 105095                // 'false' 'order'\n     || lk == 105147                // 'namespace' 'order'\n     || lk == 105157                // 'null' 'order'\n     || lk == 105180                // 'processing-instruction' 'order'\n     || lk == 105215                // 'true' 'order'\n     || lk == 107143                // 'false' 'paragraphs'\n     || lk == 107205                // 'null' 'paragraphs'\n     || lk == 107263                // 'true' 'paragraphs'\n     || lk == 114771                // 'attribute' 'return'\n     || lk == 114810                // 'element' 'return'\n     || lk == 114823                // 'false' 'return'\n     || lk == 114875                // 'namespace' 'return'\n     || lk == 114885                // 'null' 'return'\n     || lk == 114908                // 'processing-instruction' 'return'\n     || lk == 114943                // 'true' 'return'\n     || lk == 116819                // 'attribute' 'satisfies'\n     || lk == 116858                // 'element' 'satisfies'\n     || lk == 116871                // 'false' 'satisfies'\n     || lk == 116923                // 'namespace' 'satisfies'\n     || lk == 116933                // 'null' 'satisfies'\n     || lk == 116956                // 'processing-instruction' 'satisfies'\n     || lk == 116991                // 'true' 'satisfies'\n     || lk == 121479                // 'false' 'sentences'\n     || lk == 121541                // 'null' 'sentences'\n     || lk == 121599                // 'true' 'sentences'\n     || lk == 123475                // 'attribute' 'stable'\n     || lk == 123514                // 'element' 'stable'\n     || lk == 123527                // 'false' 'stable'\n     || lk == 123579                // 'namespace' 'stable'\n     || lk == 123589                // 'null' 'stable'\n     || lk == 123612                // 'processing-instruction' 'stable'\n     || lk == 123647                // 'true' 'stable'\n     || lk == 123987                // 'attribute' 'start'\n     || lk == 124026                // 'element' 'start'\n     || lk == 124039                // 'false' 'start'\n     || lk == 124091                // 'namespace' 'start'\n     || lk == 124101                // 'null' 'start'\n     || lk == 124124                // 'processing-instruction' 'start'\n     || lk == 124159                // 'true' 'start'\n     || lk == 129159                // 'false' 'times'\n     || lk == 129221                // 'null' 'times'\n     || lk == 129279                // 'true' 'times'\n     || lk == 129619                // 'attribute' 'to'\n     || lk == 129658                // 'element' 'to'\n     || lk == 129671                // 'false' 'to'\n     || lk == 129723                // 'namespace' 'to'\n     || lk == 129733                // 'null' 'to'\n     || lk == 129756                // 'processing-instruction' 'to'\n     || lk == 129791                // 'true' 'to'\n     || lk == 130131                // 'attribute' 'treat'\n     || lk == 130170                // 'element' 'treat'\n     || lk == 130183                // 'false' 'treat'\n     || lk == 130235                // 'namespace' 'treat'\n     || lk == 130245                // 'null' 'treat'\n     || lk == 130268                // 'processing-instruction' 'treat'\n     || lk == 130303                // 'true' 'treat'\n     || lk == 133203                // 'attribute' 'union'\n     || lk == 133242                // 'element' 'union'\n     || lk == 133255                // 'false' 'union'\n     || lk == 133307                // 'namespace' 'union'\n     || lk == 133317                // 'null' 'union'\n     || lk == 133340                // 'processing-instruction' 'union'\n     || lk == 133375                // 'true' 'union'\n     || lk == 139347                // 'attribute' 'where'\n     || lk == 139386                // 'element' 'where'\n     || lk == 139399                // 'false' 'where'\n     || lk == 139451                // 'namespace' 'where'\n     || lk == 139461                // 'null' 'where'\n     || lk == 139484                // 'processing-instruction' 'where'\n     || lk == 139519                // 'true' 'where'\n     || lk == 141395                // 'attribute' 'with'\n     || lk == 141434                // 'element' 'with'\n     || lk == 141447                // 'false' 'with'\n     || lk == 141499                // 'namespace' 'with'\n     || lk == 141509                // 'null' 'with'\n     || lk == 141532                // 'processing-instruction' 'with'\n     || lk == 141567                // 'true' 'with'\n     || lk == 142983                // 'false' 'words'\n     || lk == 143045                // 'null' 'words'\n     || lk == 143103                // 'true' 'words'\n     || lk == 145543                // 'false' '|'\n     || lk == 145605                // 'null' '|'\n     || lk == 145663                // 'true' '|'\n     || lk == 146055                // 'false' '||'\n     || lk == 146117                // 'null' '||'\n     || lk == 146175                // 'true' '||'\n     || lk == 146567                // 'false' '|}'\n     || lk == 146629                // 'null' '|}'\n     || lk == 146687                // 'true' '|}'\n     || lk == 147079                // 'false' '}'\n     || lk == 147141                // 'null' '}'\n     || lk == 147199)               // 'true' '}'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          memoize(4, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(4, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '$$'\n    case 33:                        // '%'\n    case 35:                        // '('\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n    case 69:                        // '['\n    case 281:                       // '{'\n    case 283:                       // '{|'\n    case 3155:                      // 'attribute' EQName^Token\n    case 3194:                      // 'element' EQName^Token\n    case 9915:                      // 'namespace' NCName^Token\n    case 9948:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14927:                     // 'array' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14969:                     // 'document-node' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14973:                     // 'empty-sequence' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14995:                     // 'function' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15002:                     // 'if' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15015:                     // 'item' '#'\n    case 15016:                     // 'json' '#'\n    case 15017:                     // 'json-item' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15036:                     // 'namespace-node' '#'\n    case 15037:                     // 'ne' '#'\n    case 15042:                     // 'node' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15078:                     // 'schema-attribute' '#'\n    case 15079:                     // 'schema-element' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15095:                     // 'structured-item' '#'\n    case 15096:                     // 'switch' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15107:                     // 'typeswitch' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18055:                     // 'false' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18067:                     // 'function' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18117:                     // 'null' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18175:                     // 'true' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 37459:                     // 'attribute' 'allowing'\n    case 37498:                     // 'element' 'allowing'\n    case 37563:                     // 'namespace' 'allowing'\n    case 37596:                     // 'processing-instruction' 'allowing'\n    case 37971:                     // 'attribute' 'ancestor'\n    case 38010:                     // 'element' 'ancestor'\n    case 38075:                     // 'namespace' 'ancestor'\n    case 38108:                     // 'processing-instruction' 'ancestor'\n    case 38483:                     // 'attribute' 'ancestor-or-self'\n    case 38522:                     // 'element' 'ancestor-or-self'\n    case 38587:                     // 'namespace' 'ancestor-or-self'\n    case 38620:                     // 'processing-instruction' 'ancestor-or-self'\n    case 40019:                     // 'attribute' 'append'\n    case 40058:                     // 'element' 'append'\n    case 40123:                     // 'namespace' 'append'\n    case 40156:                     // 'processing-instruction' 'append'\n    case 40531:                     // 'attribute' 'array'\n    case 40570:                     // 'element' 'array'\n    case 42579:                     // 'attribute' 'attribute'\n    case 42618:                     // 'element' 'attribute'\n    case 42683:                     // 'namespace' 'attribute'\n    case 42716:                     // 'processing-instruction' 'attribute'\n    case 43091:                     // 'attribute' 'base-uri'\n    case 43130:                     // 'element' 'base-uri'\n    case 43195:                     // 'namespace' 'base-uri'\n    case 43228:                     // 'processing-instruction' 'base-uri'\n    case 44115:                     // 'attribute' 'boundary-space'\n    case 44154:                     // 'element' 'boundary-space'\n    case 44219:                     // 'namespace' 'boundary-space'\n    case 44252:                     // 'processing-instruction' 'boundary-space'\n    case 44627:                     // 'attribute' 'break'\n    case 44666:                     // 'element' 'break'\n    case 44731:                     // 'namespace' 'break'\n    case 44764:                     // 'processing-instruction' 'break'\n    case 47187:                     // 'attribute' 'catch'\n    case 47226:                     // 'element' 'catch'\n    case 47291:                     // 'namespace' 'catch'\n    case 47324:                     // 'processing-instruction' 'catch'\n    case 48211:                     // 'attribute' 'child'\n    case 48250:                     // 'element' 'child'\n    case 48315:                     // 'namespace' 'child'\n    case 48348:                     // 'processing-instruction' 'child'\n    case 49747:                     // 'attribute' 'comment'\n    case 49786:                     // 'element' 'comment'\n    case 49851:                     // 'namespace' 'comment'\n    case 49884:                     // 'processing-instruction' 'comment'\n    case 50259:                     // 'attribute' 'constraint'\n    case 50298:                     // 'element' 'constraint'\n    case 50363:                     // 'namespace' 'constraint'\n    case 50396:                     // 'processing-instruction' 'constraint'\n    case 50771:                     // 'attribute' 'construction'\n    case 50810:                     // 'element' 'construction'\n    case 50875:                     // 'namespace' 'construction'\n    case 50908:                     // 'processing-instruction' 'construction'\n    case 52307:                     // 'attribute' 'context'\n    case 52346:                     // 'element' 'context'\n    case 52411:                     // 'namespace' 'context'\n    case 52444:                     // 'processing-instruction' 'context'\n    case 52819:                     // 'attribute' 'continue'\n    case 52858:                     // 'element' 'continue'\n    case 52923:                     // 'namespace' 'continue'\n    case 52956:                     // 'processing-instruction' 'continue'\n    case 53331:                     // 'attribute' 'copy'\n    case 53370:                     // 'element' 'copy'\n    case 53435:                     // 'namespace' 'copy'\n    case 53468:                     // 'processing-instruction' 'copy'\n    case 53843:                     // 'attribute' 'copy-namespaces'\n    case 53882:                     // 'element' 'copy-namespaces'\n    case 53947:                     // 'namespace' 'copy-namespaces'\n    case 53980:                     // 'processing-instruction' 'copy-namespaces'\n    case 54867:                     // 'attribute' 'decimal-format'\n    case 54906:                     // 'element' 'decimal-format'\n    case 54971:                     // 'namespace' 'decimal-format'\n    case 55004:                     // 'processing-instruction' 'decimal-format'\n    case 55891:                     // 'attribute' 'declare'\n    case 55930:                     // 'element' 'declare'\n    case 55995:                     // 'namespace' 'declare'\n    case 56028:                     // 'processing-instruction' 'declare'\n    case 56915:                     // 'attribute' 'delete'\n    case 56954:                     // 'element' 'delete'\n    case 57019:                     // 'namespace' 'delete'\n    case 57052:                     // 'processing-instruction' 'delete'\n    case 57427:                     // 'attribute' 'descendant'\n    case 57466:                     // 'element' 'descendant'\n    case 57531:                     // 'namespace' 'descendant'\n    case 57564:                     // 'processing-instruction' 'descendant'\n    case 57939:                     // 'attribute' 'descendant-or-self'\n    case 57978:                     // 'element' 'descendant-or-self'\n    case 58043:                     // 'namespace' 'descendant-or-self'\n    case 58076:                     // 'processing-instruction' 'descendant-or-self'\n    case 61523:                     // 'attribute' 'document'\n    case 61562:                     // 'element' 'document'\n    case 61627:                     // 'namespace' 'document'\n    case 61660:                     // 'processing-instruction' 'document'\n    case 62035:                     // 'attribute' 'document-node'\n    case 62074:                     // 'element' 'document-node'\n    case 62139:                     // 'namespace' 'document-node'\n    case 62172:                     // 'processing-instruction' 'document-node'\n    case 62547:                     // 'attribute' 'element'\n    case 62586:                     // 'element' 'element'\n    case 62651:                     // 'namespace' 'element'\n    case 62684:                     // 'processing-instruction' 'element'\n    case 64083:                     // 'attribute' 'empty-sequence'\n    case 64122:                     // 'element' 'empty-sequence'\n    case 64187:                     // 'namespace' 'empty-sequence'\n    case 64220:                     // 'processing-instruction' 'empty-sequence'\n    case 64595:                     // 'attribute' 'encoding'\n    case 64634:                     // 'element' 'encoding'\n    case 64699:                     // 'namespace' 'encoding'\n    case 64732:                     // 'processing-instruction' 'encoding'\n    case 66643:                     // 'attribute' 'every'\n    case 66682:                     // 'element' 'every'\n    case 66747:                     // 'namespace' 'every'\n    case 66780:                     // 'processing-instruction' 'every'\n    case 68179:                     // 'attribute' 'exit'\n    case 68218:                     // 'element' 'exit'\n    case 68283:                     // 'namespace' 'exit'\n    case 68316:                     // 'processing-instruction' 'exit'\n    case 68691:                     // 'attribute' 'external'\n    case 68730:                     // 'element' 'external'\n    case 68795:                     // 'namespace' 'external'\n    case 68828:                     // 'processing-instruction' 'external'\n    case 69203:                     // 'attribute' 'false'\n    case 69242:                     // 'element' 'false'\n    case 69307:                     // 'namespace' 'false'\n    case 69340:                     // 'processing-instruction' 'false'\n    case 69715:                     // 'attribute' 'first'\n    case 69754:                     // 'element' 'first'\n    case 69819:                     // 'namespace' 'first'\n    case 69852:                     // 'processing-instruction' 'first'\n    case 70227:                     // 'attribute' 'following'\n    case 70266:                     // 'element' 'following'\n    case 70331:                     // 'namespace' 'following'\n    case 70364:                     // 'processing-instruction' 'following'\n    case 70739:                     // 'attribute' 'following-sibling'\n    case 70778:                     // 'element' 'following-sibling'\n    case 70843:                     // 'namespace' 'following-sibling'\n    case 70876:                     // 'processing-instruction' 'following-sibling'\n    case 72787:                     // 'attribute' 'from'\n    case 72826:                     // 'element' 'from'\n    case 72891:                     // 'namespace' 'from'\n    case 72924:                     // 'processing-instruction' 'from'\n    case 73299:                     // 'attribute' 'ft-option'\n    case 73338:                     // 'element' 'ft-option'\n    case 73403:                     // 'namespace' 'ft-option'\n    case 73436:                     // 'processing-instruction' 'ft-option'\n    case 75347:                     // 'attribute' 'function'\n    case 75386:                     // 'element' 'function'\n    case 75451:                     // 'namespace' 'function'\n    case 75484:                     // 'processing-instruction' 'function'\n    case 78931:                     // 'attribute' 'if'\n    case 78970:                     // 'element' 'if'\n    case 79035:                     // 'namespace' 'if'\n    case 79068:                     // 'processing-instruction' 'if'\n    case 79443:                     // 'attribute' 'import'\n    case 79482:                     // 'element' 'import'\n    case 79547:                     // 'namespace' 'import'\n    case 79580:                     // 'processing-instruction' 'import'\n    case 79955:                     // 'attribute' 'in'\n    case 79994:                     // 'element' 'in'\n    case 80059:                     // 'namespace' 'in'\n    case 80092:                     // 'processing-instruction' 'in'\n    case 80467:                     // 'attribute' 'index'\n    case 80506:                     // 'element' 'index'\n    case 80571:                     // 'namespace' 'index'\n    case 80604:                     // 'processing-instruction' 'index'\n    case 82515:                     // 'attribute' 'insert'\n    case 82554:                     // 'element' 'insert'\n    case 82619:                     // 'namespace' 'insert'\n    case 82652:                     // 'processing-instruction' 'insert'\n    case 83539:                     // 'attribute' 'integrity'\n    case 83578:                     // 'element' 'integrity'\n    case 83643:                     // 'namespace' 'integrity'\n    case 83676:                     // 'processing-instruction' 'integrity'\n    case 85587:                     // 'attribute' 'item'\n    case 85626:                     // 'element' 'item'\n    case 85691:                     // 'namespace' 'item'\n    case 85724:                     // 'processing-instruction' 'item'\n    case 86099:                     // 'attribute' 'json'\n    case 86138:                     // 'element' 'json'\n    case 86203:                     // 'namespace' 'json'\n    case 86236:                     // 'processing-instruction' 'json'\n    case 86611:                     // 'attribute' 'json-item'\n    case 86650:                     // 'element' 'json-item'\n    case 87123:                     // 'attribute' 'jsoniq'\n    case 87162:                     // 'element' 'jsoniq'\n    case 87227:                     // 'namespace' 'jsoniq'\n    case 87260:                     // 'processing-instruction' 'jsoniq'\n    case 88659:                     // 'attribute' 'last'\n    case 88698:                     // 'element' 'last'\n    case 88763:                     // 'namespace' 'last'\n    case 88796:                     // 'processing-instruction' 'last'\n    case 89171:                     // 'attribute' 'lax'\n    case 89210:                     // 'element' 'lax'\n    case 89275:                     // 'namespace' 'lax'\n    case 89308:                     // 'processing-instruction' 'lax'\n    case 91731:                     // 'attribute' 'loop'\n    case 91770:                     // 'element' 'loop'\n    case 91835:                     // 'namespace' 'loop'\n    case 91868:                     // 'processing-instruction' 'loop'\n    case 94803:                     // 'attribute' 'module'\n    case 94842:                     // 'element' 'module'\n    case 94907:                     // 'namespace' 'module'\n    case 94940:                     // 'processing-instruction' 'module'\n    case 95827:                     // 'attribute' 'namespace'\n    case 95866:                     // 'element' 'namespace'\n    case 95931:                     // 'namespace' 'namespace'\n    case 95964:                     // 'processing-instruction' 'namespace'\n    case 96339:                     // 'attribute' 'namespace-node'\n    case 96378:                     // 'element' 'namespace-node'\n    case 96443:                     // 'namespace' 'namespace-node'\n    case 96476:                     // 'processing-instruction' 'namespace-node'\n    case 99411:                     // 'attribute' 'node'\n    case 99450:                     // 'element' 'node'\n    case 99515:                     // 'namespace' 'node'\n    case 99548:                     // 'processing-instruction' 'node'\n    case 99923:                     // 'attribute' 'nodes'\n    case 99962:                     // 'element' 'nodes'\n    case 100027:                    // 'namespace' 'nodes'\n    case 100060:                    // 'processing-instruction' 'nodes'\n    case 100947:                    // 'attribute' 'null'\n    case 100986:                    // 'element' 'null'\n    case 101051:                    // 'namespace' 'null'\n    case 101084:                    // 'processing-instruction' 'null'\n    case 101459:                    // 'attribute' 'object'\n    case 101498:                    // 'element' 'object'\n    case 101563:                    // 'namespace' 'object'\n    case 101596:                    // 'processing-instruction' 'object'\n    case 104019:                    // 'attribute' 'option'\n    case 104058:                    // 'element' 'option'\n    case 104123:                    // 'namespace' 'option'\n    case 104156:                    // 'processing-instruction' 'option'\n    case 105555:                    // 'attribute' 'ordered'\n    case 105594:                    // 'element' 'ordered'\n    case 105659:                    // 'namespace' 'ordered'\n    case 105692:                    // 'processing-instruction' 'ordered'\n    case 106067:                    // 'attribute' 'ordering'\n    case 106106:                    // 'element' 'ordering'\n    case 106171:                    // 'namespace' 'ordering'\n    case 106204:                    // 'processing-instruction' 'ordering'\n    case 107603:                    // 'attribute' 'parent'\n    case 107642:                    // 'element' 'parent'\n    case 107707:                    // 'namespace' 'parent'\n    case 107740:                    // 'processing-instruction' 'parent'\n    case 110675:                    // 'attribute' 'preceding'\n    case 110714:                    // 'element' 'preceding'\n    case 110779:                    // 'namespace' 'preceding'\n    case 110812:                    // 'processing-instruction' 'preceding'\n    case 111187:                    // 'attribute' 'preceding-sibling'\n    case 111226:                    // 'element' 'preceding-sibling'\n    case 111291:                    // 'namespace' 'preceding-sibling'\n    case 111324:                    // 'processing-instruction' 'preceding-sibling'\n    case 112723:                    // 'attribute' 'processing-instruction'\n    case 112762:                    // 'element' 'processing-instruction'\n    case 112827:                    // 'namespace' 'processing-instruction'\n    case 112860:                    // 'processing-instruction' 'processing-instruction'\n    case 113747:                    // 'attribute' 'rename'\n    case 113786:                    // 'element' 'rename'\n    case 113851:                    // 'namespace' 'rename'\n    case 113884:                    // 'processing-instruction' 'rename'\n    case 114259:                    // 'attribute' 'replace'\n    case 114298:                    // 'element' 'replace'\n    case 114363:                    // 'namespace' 'replace'\n    case 114396:                    // 'processing-instruction' 'replace'\n    case 115283:                    // 'attribute' 'returning'\n    case 115322:                    // 'element' 'returning'\n    case 115387:                    // 'namespace' 'returning'\n    case 115420:                    // 'processing-instruction' 'returning'\n    case 115795:                    // 'attribute' 'revalidation'\n    case 115834:                    // 'element' 'revalidation'\n    case 115899:                    // 'namespace' 'revalidation'\n    case 115932:                    // 'processing-instruction' 'revalidation'\n    case 117331:                    // 'attribute' 'schema'\n    case 117370:                    // 'element' 'schema'\n    case 117435:                    // 'namespace' 'schema'\n    case 117468:                    // 'processing-instruction' 'schema'\n    case 117843:                    // 'attribute' 'schema-attribute'\n    case 117882:                    // 'element' 'schema-attribute'\n    case 117947:                    // 'namespace' 'schema-attribute'\n    case 117980:                    // 'processing-instruction' 'schema-attribute'\n    case 118355:                    // 'attribute' 'schema-element'\n    case 118394:                    // 'element' 'schema-element'\n    case 118459:                    // 'namespace' 'schema-element'\n    case 118492:                    // 'processing-instruction' 'schema-element'\n    case 118867:                    // 'attribute' 'score'\n    case 118906:                    // 'element' 'score'\n    case 118971:                    // 'namespace' 'score'\n    case 119004:                    // 'processing-instruction' 'score'\n    case 119379:                    // 'attribute' 'select'\n    case 119418:                    // 'element' 'select'\n    case 119483:                    // 'namespace' 'select'\n    case 119516:                    // 'processing-instruction' 'select'\n    case 119891:                    // 'attribute' 'self'\n    case 119930:                    // 'element' 'self'\n    case 119995:                    // 'namespace' 'self'\n    case 120028:                    // 'processing-instruction' 'self'\n    case 122451:                    // 'attribute' 'sliding'\n    case 122490:                    // 'element' 'sliding'\n    case 122555:                    // 'namespace' 'sliding'\n    case 122588:                    // 'processing-instruction' 'sliding'\n    case 122963:                    // 'attribute' 'some'\n    case 123002:                    // 'element' 'some'\n    case 123067:                    // 'namespace' 'some'\n    case 123100:                    // 'processing-instruction' 'some'\n    case 125523:                    // 'attribute' 'strict'\n    case 125562:                    // 'element' 'strict'\n    case 125627:                    // 'namespace' 'strict'\n    case 125660:                    // 'processing-instruction' 'strict'\n    case 126547:                    // 'attribute' 'structured-item'\n    case 126586:                    // 'element' 'structured-item'\n    case 127059:                    // 'attribute' 'switch'\n    case 127098:                    // 'element' 'switch'\n    case 127163:                    // 'namespace' 'switch'\n    case 127196:                    // 'processing-instruction' 'switch'\n    case 127571:                    // 'attribute' 'text'\n    case 127610:                    // 'element' 'text'\n    case 127675:                    // 'namespace' 'text'\n    case 127708:                    // 'processing-instruction' 'text'\n    case 130643:                    // 'attribute' 'true'\n    case 130682:                    // 'element' 'true'\n    case 130747:                    // 'namespace' 'true'\n    case 130780:                    // 'processing-instruction' 'true'\n    case 131155:                    // 'attribute' 'try'\n    case 131194:                    // 'element' 'try'\n    case 131259:                    // 'namespace' 'try'\n    case 131292:                    // 'processing-instruction' 'try'\n    case 131667:                    // 'attribute' 'tumbling'\n    case 131706:                    // 'element' 'tumbling'\n    case 131771:                    // 'namespace' 'tumbling'\n    case 131804:                    // 'processing-instruction' 'tumbling'\n    case 132179:                    // 'attribute' 'type'\n    case 132218:                    // 'element' 'type'\n    case 132283:                    // 'namespace' 'type'\n    case 132316:                    // 'processing-instruction' 'type'\n    case 132691:                    // 'attribute' 'typeswitch'\n    case 132730:                    // 'element' 'typeswitch'\n    case 132795:                    // 'namespace' 'typeswitch'\n    case 132828:                    // 'processing-instruction' 'typeswitch'\n    case 134227:                    // 'attribute' 'unordered'\n    case 134266:                    // 'element' 'unordered'\n    case 134331:                    // 'namespace' 'unordered'\n    case 134364:                    // 'processing-instruction' 'unordered'\n    case 134739:                    // 'attribute' 'updating'\n    case 134778:                    // 'element' 'updating'\n    case 134843:                    // 'namespace' 'updating'\n    case 134876:                    // 'processing-instruction' 'updating'\n    case 136275:                    // 'attribute' 'validate'\n    case 136314:                    // 'element' 'validate'\n    case 136379:                    // 'namespace' 'validate'\n    case 136412:                    // 'processing-instruction' 'validate'\n    case 136787:                    // 'attribute' 'value'\n    case 136826:                    // 'element' 'value'\n    case 136891:                    // 'namespace' 'value'\n    case 136924:                    // 'processing-instruction' 'value'\n    case 137299:                    // 'attribute' 'variable'\n    case 137338:                    // 'element' 'variable'\n    case 137403:                    // 'namespace' 'variable'\n    case 137436:                    // 'processing-instruction' 'variable'\n    case 137811:                    // 'attribute' 'version'\n    case 137850:                    // 'element' 'version'\n    case 137915:                    // 'namespace' 'version'\n    case 137948:                    // 'processing-instruction' 'version'\n    case 139859:                    // 'attribute' 'while'\n    case 139898:                    // 'element' 'while'\n    case 139963:                    // 'namespace' 'while'\n    case 139996:                    // 'processing-instruction' 'while'\n    case 143955:                    // 'attribute' '{'\n    case 143969:                    // 'comment' '{'\n    case 143992:                    // 'document' '{'\n    case 143994:                    // 'element' '{'\n    case 144059:                    // 'namespace' '{'\n    case 144078:                    // 'ordered' '{'\n    case 144092:                    // 'processing-instruction' '{'\n    case 144121:                    // 'text' '{'\n    case 144134:                    // 'unordered' '{'\n      try_PostfixExpr();\n      break;\n    case -3:\n      break;\n    default:\n      try_AxisStep();\n    }\n  }\n\n  function parse_AxisStep()\n  {\n    eventHandler.startNonterminal(\"AxisStep\", e0);\n    switch (l1)\n    {\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 46:                        // '..'\n    case 26698:                     // 'ancestor' '::'\n    case 26699:                     // 'ancestor-or-self' '::'\n    case 26834:                     // 'parent' '::'\n    case 26840:                     // 'preceding' '::'\n    case 26841:                     // 'preceding-sibling' '::'\n      parse_ReverseStep();\n      break;\n    default:\n      parse_ForwardStep();\n    }\n    lookahead1W(227);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n    whitespace();\n    parse_PredicateList();\n    eventHandler.endNonterminal(\"AxisStep\", e0);\n  }\n\n  function try_AxisStep()\n  {\n    switch (l1)\n    {\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 46:                        // '..'\n    case 26698:                     // 'ancestor' '::'\n    case 26699:                     // 'ancestor-or-self' '::'\n    case 26834:                     // 'parent' '::'\n    case 26840:                     // 'preceding' '::'\n    case 26841:                     // 'preceding-sibling' '::'\n      try_ReverseStep();\n      break;\n    default:\n      try_ForwardStep();\n    }\n    lookahead1W(227);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n    try_PredicateList();\n  }\n\n  function parse_ForwardStep()\n  {\n    eventHandler.startNonterminal(\"ForwardStep\", e0);\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 234:                       // 'self'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26707:                     // 'attribute' '::'\n    case 26718:                     // 'child' '::'\n    case 26736:                     // 'descendant' '::'\n    case 26737:                     // 'descendant-or-self' '::'\n    case 26761:                     // 'following' '::'\n    case 26762:                     // 'following-sibling' '::'\n    case 26858:                     // 'self' '::'\n      parse_ForwardAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NodeTest();\n      break;\n    default:\n      parse_AbbrevForwardStep();\n    }\n    eventHandler.endNonterminal(\"ForwardStep\", e0);\n  }\n\n  function try_ForwardStep()\n  {\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 94:                        // 'child'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 234:                       // 'self'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26707:                     // 'attribute' '::'\n    case 26718:                     // 'child' '::'\n    case 26736:                     // 'descendant' '::'\n    case 26737:                     // 'descendant-or-self' '::'\n    case 26761:                     // 'following' '::'\n    case 26762:                     // 'following-sibling' '::'\n    case 26858:                     // 'self' '::'\n      try_ForwardAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NodeTest();\n      break;\n    default:\n      try_AbbrevForwardStep();\n    }\n  }\n\n  function parse_ForwardAxis()\n  {\n    eventHandler.startNonterminal(\"ForwardAxis\", e0);\n    switch (l1)\n    {\n    case 94:                        // 'child'\n      shift(94);                    // 'child'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 112:                       // 'descendant'\n      shift(112);                   // 'descendant'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 83:                        // 'attribute'\n      shift(83);                    // 'attribute'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 234:                       // 'self'\n      shift(234);                   // 'self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shift(113);                   // 'descendant-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 138:                       // 'following-sibling'\n      shift(138);                   // 'following-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    default:\n      shift(137);                   // 'following'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ForwardAxis\", e0);\n  }\n\n  function try_ForwardAxis()\n  {\n    switch (l1)\n    {\n    case 94:                        // 'child'\n      shiftT(94);                   // 'child'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 112:                       // 'descendant'\n      shiftT(112);                  // 'descendant'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 83:                        // 'attribute'\n      shiftT(83);                   // 'attribute'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 234:                       // 'self'\n      shiftT(234);                  // 'self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shiftT(113);                  // 'descendant-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 138:                       // 'following-sibling'\n      shiftT(138);                  // 'following-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    default:\n      shiftT(137);                  // 'following'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n    }\n  }\n\n  function parse_AbbrevForwardStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevForwardStep\", e0);\n    if (l1 == 67)                   // '@'\n    {\n      shift(67);                    // '@'\n    }\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NodeTest();\n    eventHandler.endNonterminal(\"AbbrevForwardStep\", e0);\n  }\n\n  function try_AbbrevForwardStep()\n  {\n    if (l1 == 67)                   // '@'\n    {\n      shiftT(67);                   // '@'\n    }\n    lookahead1W(248);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_NodeTest();\n  }\n\n  function parse_ReverseStep()\n  {\n    eventHandler.startNonterminal(\"ReverseStep\", e0);\n    switch (l1)\n    {\n    case 46:                        // '..'\n      parse_AbbrevReverseStep();\n      break;\n    default:\n      parse_ReverseAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NodeTest();\n    }\n    eventHandler.endNonterminal(\"ReverseStep\", e0);\n  }\n\n  function try_ReverseStep()\n  {\n    switch (l1)\n    {\n    case 46:                        // '..'\n      try_AbbrevReverseStep();\n      break;\n    default:\n      try_ReverseAxis();\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NodeTest();\n    }\n  }\n\n  function parse_ReverseAxis()\n  {\n    eventHandler.startNonterminal(\"ReverseAxis\", e0);\n    switch (l1)\n    {\n    case 210:                       // 'parent'\n      shift(210);                   // 'parent'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 74:                        // 'ancestor'\n      shift(74);                    // 'ancestor'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shift(217);                   // 'preceding-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    case 216:                       // 'preceding'\n      shift(216);                   // 'preceding'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n      break;\n    default:\n      shift(75);                    // 'ancestor-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shift(52);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ReverseAxis\", e0);\n  }\n\n  function try_ReverseAxis()\n  {\n    switch (l1)\n    {\n    case 210:                       // 'parent'\n      shiftT(210);                  // 'parent'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 74:                        // 'ancestor'\n      shiftT(74);                   // 'ancestor'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shiftT(217);                  // 'preceding-sibling'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    case 216:                       // 'preceding'\n      shiftT(216);                  // 'preceding'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n      break;\n    default:\n      shiftT(75);                   // 'ancestor-or-self'\n      lookahead1W(27);              // S^WS | '(:' | '::'\n      shiftT(52);                   // '::'\n    }\n  }\n\n  function parse_AbbrevReverseStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevReverseStep\", e0);\n    shift(46);                      // '..'\n    eventHandler.endNonterminal(\"AbbrevReverseStep\", e0);\n  }\n\n  function try_AbbrevReverseStep()\n  {\n    shiftT(46);                     // '..'\n  }\n\n  function parse_NodeTest()\n  {\n    eventHandler.startNonterminal(\"NodeTest\", e0);\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 249:                       // 'text'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      parse_KindTest();\n      break;\n    default:\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"NodeTest\", e0);\n  }\n\n  function try_NodeTest()\n  {\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 249:                       // 'text'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      try_KindTest();\n      break;\n    default:\n      try_NameTest();\n    }\n  }\n\n  function parse_NameTest()\n  {\n    eventHandler.startNonterminal(\"NameTest\", e0);\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shift(5);                     // Wildcard\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"NameTest\", e0);\n  }\n\n  function try_NameTest()\n  {\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shiftT(5);                    // Wildcard\n      break;\n    default:\n      try_EQName();\n    }\n  }\n\n  function parse_PostfixExpr()\n  {\n    eventHandler.startNonterminal(\"PostfixExpr\", e0);\n    parse_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(234);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' | '/' |\n      if (l1 != 35                  // '('\n       && l1 != 45                  // '.'\n       && l1 != 69)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 35397)              // '[' '['\n      {\n        lk = memoized(5, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Predicate();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -4;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(5, e0, lk);\n        }\n      }\n      switch (lk)\n      {\n      case 35:                      // '('\n        whitespace();\n        parse_ArgumentList();\n        break;\n      case 45:                      // '.'\n        whitespace();\n        parse_ObjectLookup();\n        break;\n      case -4:\n        whitespace();\n        parse_ArrayLookup();\n        break;\n      case 35909:                   // '[' ']'\n        whitespace();\n        parse_ArrayUnboxing();\n        break;\n      default:\n        whitespace();\n        parse_Predicate();\n      }\n    }\n    eventHandler.endNonterminal(\"PostfixExpr\", e0);\n  }\n\n  function try_PostfixExpr()\n  {\n    try_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(234);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' | '/' |\n      if (l1 != 35                  // '('\n       && l1 != 45                  // '.'\n       && l1 != 69)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 35397)              // '[' '['\n      {\n        lk = memoized(5, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Predicate();\n            memoize(5, e0A, -1);\n            lk = -6;\n          }\n          catch (p1A)\n          {\n            lk = -4;\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(5, e0A, -4);\n          }\n        }\n      }\n      switch (lk)\n      {\n      case 35:                      // '('\n        try_ArgumentList();\n        break;\n      case 45:                      // '.'\n        try_ObjectLookup();\n        break;\n      case -4:\n        try_ArrayLookup();\n        break;\n      case 35909:                   // '[' ']'\n        try_ArrayUnboxing();\n        break;\n      case -6:\n        break;\n      default:\n        try_Predicate();\n      }\n    }\n  }\n\n  function parse_ObjectLookup()\n  {\n    eventHandler.startNonterminal(\"ObjectLookup\", e0);\n    shift(45);                      // '.'\n    lookahead1W(250);               // StringLiteral | NCName^Token | S^WS | '$' | '$$' | '(' | '(:' | 'after' |\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    case 35:                        // '('\n      whitespace();\n      parse_ParenthesizedExpr();\n      break;\n    case 31:                        // '$'\n      whitespace();\n      parse_VarRef();\n      break;\n    case 32:                        // '$$'\n      whitespace();\n      parse_ContextItemExpr();\n      break;\n    default:\n      whitespace();\n      parse_NCName();\n    }\n    eventHandler.endNonterminal(\"ObjectLookup\", e0);\n  }\n\n  function try_ObjectLookup()\n  {\n    shiftT(45);                     // '.'\n    lookahead1W(250);               // StringLiteral | NCName^Token | S^WS | '$' | '$$' | '(' | '(:' | 'after' |\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    case 35:                        // '('\n      try_ParenthesizedExpr();\n      break;\n    case 31:                        // '$'\n      try_VarRef();\n      break;\n    case 32:                        // '$$'\n      try_ContextItemExpr();\n      break;\n    default:\n      try_NCName();\n    }\n  }\n\n  function parse_ArrayLookup()\n  {\n    eventHandler.startNonterminal(\"ArrayLookup\", e0);\n    shift(69);                      // '['\n    lookahead1W(31);                // S^WS | '(:' | '['\n    shift(69);                      // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(70);                      // ']'\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"ArrayLookup\", e0);\n  }\n\n  function try_ArrayLookup()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(31);                // S^WS | '(:' | '['\n    shiftT(69);                     // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(70);                     // ']'\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shiftT(70);                     // ']'\n  }\n\n  function parse_ArrayUnboxing()\n  {\n    eventHandler.startNonterminal(\"ArrayUnboxing\", e0);\n    shift(69);                      // '['\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"ArrayUnboxing\", e0);\n  }\n\n  function try_ArrayUnboxing()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(32);                // S^WS | '(:' | ']'\n    shiftT(70);                     // ']'\n  }\n\n  function parse_ArgumentList()\n  {\n    eventHandler.startNonterminal(\"ArgumentList\", e0);\n    shift(35);                      // '('\n    lookahead1W(279);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_Argument();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(271);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_Argument();\n      }\n    }\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ArgumentList\", e0);\n  }\n\n  function try_ArgumentList()\n  {\n    shiftT(35);                     // '('\n    lookahead1W(279);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 38)                   // ')'\n    {\n      try_Argument();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(271);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_Argument();\n      }\n    }\n    shiftT(38);                     // ')'\n  }\n\n  function parse_PredicateList()\n  {\n    eventHandler.startNonterminal(\"PredicateList\", e0);\n    for (;;)\n    {\n      lookahead1W(227);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      if (l1 != 69)                 // '['\n      {\n        break;\n      }\n      whitespace();\n      parse_Predicate();\n    }\n    eventHandler.endNonterminal(\"PredicateList\", e0);\n  }\n\n  function try_PredicateList()\n  {\n    for (;;)\n    {\n      lookahead1W(227);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      if (l1 != 69)                 // '['\n      {\n        break;\n      }\n      try_Predicate();\n    }\n  }\n\n  function parse_Predicate()\n  {\n    eventHandler.startNonterminal(\"Predicate\", e0);\n    shift(69);                      // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"Predicate\", e0);\n  }\n\n  function try_Predicate()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(70);                     // ']'\n  }\n\n  function parse_Literal()\n  {\n    eventHandler.startNonterminal(\"Literal\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    case 135:                       // 'false'\n    case 255:                       // 'true'\n      parse_BooleanLiteral();\n      break;\n    case 197:                       // 'null'\n      parse_NullLiteral();\n      break;\n    default:\n      parse_NumericLiteral();\n    }\n    eventHandler.endNonterminal(\"Literal\", e0);\n  }\n\n  function try_Literal()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    case 135:                       // 'false'\n    case 255:                       // 'true'\n      try_BooleanLiteral();\n      break;\n    case 197:                       // 'null'\n      try_NullLiteral();\n      break;\n    default:\n      try_NumericLiteral();\n    }\n  }\n\n  function parse_BooleanLiteral()\n  {\n    eventHandler.startNonterminal(\"BooleanLiteral\", e0);\n    switch (l1)\n    {\n    case 255:                       // 'true'\n      shift(255);                   // 'true'\n      break;\n    default:\n      shift(135);                   // 'false'\n    }\n    eventHandler.endNonterminal(\"BooleanLiteral\", e0);\n  }\n\n  function try_BooleanLiteral()\n  {\n    switch (l1)\n    {\n    case 255:                       // 'true'\n      shiftT(255);                  // 'true'\n      break;\n    default:\n      shiftT(135);                  // 'false'\n    }\n  }\n\n  function parse_NullLiteral()\n  {\n    eventHandler.startNonterminal(\"NullLiteral\", e0);\n    shift(197);                     // 'null'\n    eventHandler.endNonterminal(\"NullLiteral\", e0);\n  }\n\n  function try_NullLiteral()\n  {\n    shiftT(197);                    // 'null'\n  }\n\n  function parse_NumericLiteral()\n  {\n    eventHandler.startNonterminal(\"NumericLiteral\", e0);\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shift(8);                     // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shift(9);                     // DecimalLiteral\n      break;\n    default:\n      shift(10);                    // DoubleLiteral\n    }\n    eventHandler.endNonterminal(\"NumericLiteral\", e0);\n  }\n\n  function try_NumericLiteral()\n  {\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shiftT(9);                    // DecimalLiteral\n      break;\n    default:\n      shiftT(10);                   // DoubleLiteral\n    }\n  }\n\n  function parse_VarRef()\n  {\n    eventHandler.startNonterminal(\"VarRef\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"VarRef\", e0);\n  }\n\n  function try_VarRef()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_VarName()\n  {\n    eventHandler.startNonterminal(\"VarName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"VarName\", e0);\n  }\n\n  function try_VarName()\n  {\n    try_EQName();\n  }\n\n  function parse_ParenthesizedExpr()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedExpr\", e0);\n    shift(35);                      // '('\n    lookahead1W(269);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedExpr\", e0);\n  }\n\n  function try_ParenthesizedExpr()\n  {\n    shiftT(35);                     // '('\n    lookahead1W(269);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 38)                   // ')'\n    {\n      try_Expr();\n    }\n    shiftT(38);                     // ')'\n  }\n\n  function parse_ContextItemExpr()\n  {\n    eventHandler.startNonterminal(\"ContextItemExpr\", e0);\n    shift(32);                      // '$$'\n    eventHandler.endNonterminal(\"ContextItemExpr\", e0);\n  }\n\n  function try_ContextItemExpr()\n  {\n    shiftT(32);                     // '$$'\n  }\n\n  function parse_OrderedExpr()\n  {\n    eventHandler.startNonterminal(\"OrderedExpr\", e0);\n    shift(206);                     // 'ordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"OrderedExpr\", e0);\n  }\n\n  function try_OrderedExpr()\n  {\n    shiftT(206);                    // 'ordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_UnorderedExpr()\n  {\n    eventHandler.startNonterminal(\"UnorderedExpr\", e0);\n    shift(262);                     // 'unordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"UnorderedExpr\", e0);\n  }\n\n  function try_UnorderedExpr()\n  {\n    shiftT(262);                    // 'unordered'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FunctionCall()\n  {\n    eventHandler.startNonterminal(\"FunctionCall\", e0);\n    parse_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    whitespace();\n    parse_ArgumentList();\n    eventHandler.endNonterminal(\"FunctionCall\", e0);\n  }\n\n  function try_FunctionCall()\n  {\n    try_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    try_ArgumentList();\n  }\n\n  function parse_Argument()\n  {\n    eventHandler.startNonterminal(\"Argument\", e0);\n    switch (l1)\n    {\n    case 65:                        // '?'\n      parse_ArgumentPlaceholder();\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Argument\", e0);\n  }\n\n  function try_Argument()\n  {\n    switch (l1)\n    {\n    case 65:                        // '?'\n      try_ArgumentPlaceholder();\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_ArgumentPlaceholder()\n  {\n    eventHandler.startNonterminal(\"ArgumentPlaceholder\", e0);\n    shift(65);                      // '?'\n    eventHandler.endNonterminal(\"ArgumentPlaceholder\", e0);\n  }\n\n  function try_ArgumentPlaceholder()\n  {\n    shiftT(65);                     // '?'\n  }\n\n  function parse_Constructor()\n  {\n    eventHandler.startNonterminal(\"Constructor\", e0);\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    default:\n      parse_ComputedConstructor();\n    }\n    eventHandler.endNonterminal(\"Constructor\", e0);\n  }\n\n  function try_Constructor()\n  {\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      try_DirectConstructor();\n      break;\n    default:\n      try_ComputedConstructor();\n    }\n  }\n\n  function parse_DirectConstructor()\n  {\n    eventHandler.startNonterminal(\"DirectConstructor\", e0);\n    switch (l1)\n    {\n    case 55:                        // '<'\n      parse_DirElemConstructor();\n      break;\n    case 56:                        // '<!--'\n      parse_DirCommentConstructor();\n      break;\n    default:\n      parse_DirPIConstructor();\n    }\n    eventHandler.endNonterminal(\"DirectConstructor\", e0);\n  }\n\n  function try_DirectConstructor()\n  {\n    switch (l1)\n    {\n    case 55:                        // '<'\n      try_DirElemConstructor();\n      break;\n    case 56:                        // '<!--'\n      try_DirCommentConstructor();\n      break;\n    default:\n      try_DirPIConstructor();\n    }\n  }\n\n  function parse_DirElemConstructor()\n  {\n    eventHandler.startNonterminal(\"DirElemConstructor\", e0);\n    shift(55);                      // '<'\n    lookahead1(4);                  // QName\n    shift(20);                      // QName\n    parse_DirAttributeList();\n    switch (l1)\n    {\n    case 49:                        // '/>'\n      shift(49);                    // '/>'\n      break;\n    default:\n      shift(62);                    // '>'\n      for (;;)\n      {\n        lookahead1(196);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n        if (l1 == 57)               // '</'\n        {\n          break;\n        }\n        parse_DirElemContent();\n      }\n      shift(57);                    // '</'\n      lookahead1(4);                // QName\n      shift(20);                    // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shift(21);                  // S\n      }\n      lookahead1(8);                // '>'\n      shift(62);                    // '>'\n    }\n    eventHandler.endNonterminal(\"DirElemConstructor\", e0);\n  }\n\n  function try_DirElemConstructor()\n  {\n    shiftT(55);                     // '<'\n    lookahead1(4);                  // QName\n    shiftT(20);                     // QName\n    try_DirAttributeList();\n    switch (l1)\n    {\n    case 49:                        // '/>'\n      shiftT(49);                   // '/>'\n      break;\n    default:\n      shiftT(62);                   // '>'\n      for (;;)\n      {\n        lookahead1(196);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n        if (l1 == 57)               // '</'\n        {\n          break;\n        }\n        try_DirElemContent();\n      }\n      shiftT(57);                   // '</'\n      lookahead1(4);                // QName\n      shiftT(20);                   // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shiftT(21);                 // S\n      }\n      lookahead1(8);                // '>'\n      shiftT(62);                   // '>'\n    }\n  }\n\n  function parse_DirAttributeList()\n  {\n    eventHandler.startNonterminal(\"DirAttributeList\", e0);\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shift(21);                    // S\n      lookahead1(94);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shift(20);                  // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        lookahead1(7);              // '='\n        shift(61);                  // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        parse_DirAttributeValue();\n      }\n    }\n    eventHandler.endNonterminal(\"DirAttributeList\", e0);\n  }\n\n  function try_DirAttributeList()\n  {\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shiftT(21);                   // S\n      lookahead1(94);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shiftT(20);                 // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        lookahead1(7);              // '='\n        shiftT(61);                 // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        try_DirAttributeValue();\n      }\n    }\n  }\n\n  function parse_DirAttributeValue()\n  {\n    eventHandler.startNonterminal(\"DirAttributeValue\", e0);\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shift(28);                    // '\"'\n      for (;;)\n      {\n        lookahead1(185);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shift(13);                // EscapeQuot\n          break;\n        default:\n          parse_QuotAttrValueContent();\n        }\n      }\n      shift(28);                    // '\"'\n      break;\n    default:\n      shift(34);                    // \"'\"\n      for (;;)\n      {\n        lookahead1(186);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n        if (l1 == 34)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shift(14);                // EscapeApos\n          break;\n        default:\n          parse_AposAttrValueContent();\n        }\n      }\n      shift(34);                    // \"'\"\n    }\n    eventHandler.endNonterminal(\"DirAttributeValue\", e0);\n  }\n\n  function try_DirAttributeValue()\n  {\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shiftT(28);                   // '\"'\n      for (;;)\n      {\n        lookahead1(185);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shiftT(13);               // EscapeQuot\n          break;\n        default:\n          try_QuotAttrValueContent();\n        }\n      }\n      shiftT(28);                   // '\"'\n      break;\n    default:\n      shiftT(34);                   // \"'\"\n      for (;;)\n      {\n        lookahead1(186);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n        if (l1 == 34)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shiftT(14);               // EscapeApos\n          break;\n        default:\n          try_AposAttrValueContent();\n        }\n      }\n      shiftT(34);                   // \"'\"\n    }\n  }\n\n  function parse_QuotAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"QuotAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shift(16);                    // QuotAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"QuotAttrValueContent\", e0);\n  }\n\n  function try_QuotAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shiftT(16);                   // QuotAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_AposAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"AposAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shift(17);                    // AposAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"AposAttrValueContent\", e0);\n  }\n\n  function try_AposAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shiftT(17);                   // AposAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirElemContent()\n  {\n    eventHandler.startNonterminal(\"DirElemContent\", e0);\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shift(4);                     // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shift(15);                    // ElementContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"DirElemContent\", e0);\n  }\n\n  function try_DirElemContent()\n  {\n    switch (l1)\n    {\n    case 55:                        // '<'\n    case 56:                        // '<!--'\n    case 60:                        // '<?'\n      try_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shiftT(4);                    // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shiftT(15);                   // ElementContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"DirCommentConstructor\", e0);\n    shift(56);                      // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shift(2);                       // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shift(44);                      // '-->'\n    eventHandler.endNonterminal(\"DirCommentConstructor\", e0);\n  }\n\n  function try_DirCommentConstructor()\n  {\n    shiftT(56);                     // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shiftT(2);                      // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shiftT(44);                     // '-->'\n  }\n\n  function parse_DirPIConstructor()\n  {\n    eventHandler.startNonterminal(\"DirPIConstructor\", e0);\n    shift(60);                      // '<?'\n    lookahead1(3);                  // PITarget\n    shift(18);                      // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(2);                // DirPIContents\n      shift(3);                     // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shift(66);                      // '?>'\n    eventHandler.endNonterminal(\"DirPIConstructor\", e0);\n  }\n\n  function try_DirPIConstructor()\n  {\n    shiftT(60);                     // '<?'\n    lookahead1(3);                  // PITarget\n    shiftT(18);                     // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(2);                // DirPIContents\n      shiftT(3);                    // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shiftT(66);                     // '?>'\n  }\n\n  function parse_ComputedConstructor()\n  {\n    eventHandler.startNonterminal(\"ComputedConstructor\", e0);\n    switch (l1)\n    {\n    case 120:                       // 'document'\n      parse_CompDocConstructor();\n      break;\n    case 122:                       // 'element'\n      parse_CompElemConstructor();\n      break;\n    case 83:                        // 'attribute'\n      parse_CompAttrConstructor();\n      break;\n    case 187:                       // 'namespace'\n      parse_CompNamespaceConstructor();\n      break;\n    case 249:                       // 'text'\n      parse_CompTextConstructor();\n      break;\n    case 97:                        // 'comment'\n      parse_CompCommentConstructor();\n      break;\n    default:\n      parse_CompPIConstructor();\n    }\n    eventHandler.endNonterminal(\"ComputedConstructor\", e0);\n  }\n\n  function try_ComputedConstructor()\n  {\n    switch (l1)\n    {\n    case 120:                       // 'document'\n      try_CompDocConstructor();\n      break;\n    case 122:                       // 'element'\n      try_CompElemConstructor();\n      break;\n    case 83:                        // 'attribute'\n      try_CompAttrConstructor();\n      break;\n    case 187:                       // 'namespace'\n      try_CompNamespaceConstructor();\n      break;\n    case 249:                       // 'text'\n      try_CompTextConstructor();\n      break;\n    case 97:                        // 'comment'\n      try_CompCommentConstructor();\n      break;\n    default:\n      try_CompPIConstructor();\n    }\n  }\n\n  function parse_CompElemConstructor()\n  {\n    eventHandler.startNonterminal(\"CompElemConstructor\", e0);\n    shift(122);                     // 'element'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_ContentExpr();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"CompElemConstructor\", e0);\n  }\n\n  function try_CompElemConstructor()\n  {\n    shiftT(122);                    // 'element'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_Expr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      try_ContentExpr();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_CompNamespaceConstructor()\n  {\n    eventHandler.startNonterminal(\"CompNamespaceConstructor\", e0);\n    shift(187);                     // 'namespace'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_PrefixExpr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_Prefix();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_URIExpr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"CompNamespaceConstructor\", e0);\n  }\n\n  function try_CompNamespaceConstructor()\n  {\n    shiftT(187);                    // 'namespace'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_PrefixExpr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_Prefix();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_URIExpr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_Prefix()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  }\n\n  function try_Prefix()\n  {\n    try_NCName();\n  }\n\n  function parse_PrefixExpr()\n  {\n    eventHandler.startNonterminal(\"PrefixExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"PrefixExpr\", e0);\n  }\n\n  function try_PrefixExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_URIExpr()\n  {\n    eventHandler.startNonterminal(\"URIExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"URIExpr\", e0);\n  }\n\n  function try_URIExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_FunctionItemExpr()\n  {\n    eventHandler.startNonterminal(\"FunctionItemExpr\", e0);\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      parse_InlineFunctionExpr();\n      break;\n    default:\n      parse_NamedFunctionRef();\n    }\n    eventHandler.endNonterminal(\"FunctionItemExpr\", e0);\n  }\n\n  function try_FunctionItemExpr()\n  {\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      try_InlineFunctionExpr();\n      break;\n    default:\n      try_NamedFunctionRef();\n    }\n  }\n\n  function parse_NamedFunctionRef()\n  {\n    eventHandler.startNonterminal(\"NamedFunctionRef\", e0);\n    parse_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shift(29);                      // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shift(8);                       // IntegerLiteral\n    eventHandler.endNonterminal(\"NamedFunctionRef\", e0);\n  }\n\n  function try_NamedFunctionRef()\n  {\n    try_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shiftT(29);                     // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shiftT(8);                      // IntegerLiteral\n  }\n\n  function parse_InlineFunctionExpr()\n  {\n    eventHandler.startNonterminal(\"InlineFunctionExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(147);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(98);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(38);                      // ')'\n    lookahead1W(115);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 80)                   // 'as'\n    {\n      shift(80);                    // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_FunctionBody();\n    eventHandler.endNonterminal(\"InlineFunctionExpr\", e0);\n  }\n\n  function try_InlineFunctionExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(147);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(98);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      try_ParamList();\n    }\n    shiftT(38);                     // ')'\n    lookahead1W(115);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 80)                   // 'as'\n    {\n      shiftT(80);                   // 'as'\n      lookahead1W(253);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_FunctionBody();\n  }\n\n  function parse_SingleType()\n  {\n    eventHandler.startNonterminal(\"SingleType\", e0);\n    parse_SimpleTypeName();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 65)                   // '?'\n    {\n      shift(65);                    // '?'\n    }\n    eventHandler.endNonterminal(\"SingleType\", e0);\n  }\n\n  function try_SingleType()\n  {\n    try_SimpleTypeName();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 65)                   // '?'\n    {\n      shiftT(65);                   // '?'\n    }\n  }\n\n  function parse_TypeDeclaration()\n  {\n    eventHandler.startNonterminal(\"TypeDeclaration\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypeDeclaration\", e0);\n  }\n\n  function try_TypeDeclaration()\n  {\n    shiftT(80);                     // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n  }\n\n  function parse_SequenceType()\n  {\n    eventHandler.startNonterminal(\"SequenceType\", e0);\n    switch (l1)\n    {\n    case 35:                        // '('\n      lookahead2W(258);             // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n      break;\n    case 125:                       // 'empty-sequence'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18045:                     // 'empty-sequence' '('\n    case 19491:                     // '(' ')'\n      if (l1 == 125)                // 'empty-sequence'\n      {\n        shift(125);                 // 'empty-sequence'\n      }\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n      break;\n    default:\n      parse_ItemType();\n      lookahead1W(228);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n      switch (l1)\n      {\n      case 40:                      // '*'\n      case 41:                      // '+'\n      case 65:                      // '?'\n        whitespace();\n        parse_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"SequenceType\", e0);\n  }\n\n  function try_SequenceType()\n  {\n    switch (l1)\n    {\n    case 35:                        // '('\n      lookahead2W(258);             // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n      break;\n    case 125:                       // 'empty-sequence'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 18045:                     // 'empty-sequence' '('\n    case 19491:                     // '(' ')'\n      if (l1 == 125)                // 'empty-sequence'\n      {\n        shiftT(125);                // 'empty-sequence'\n      }\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n      break;\n    default:\n      try_ItemType();\n      lookahead1W(228);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n      switch (l1)\n      {\n      case 40:                      // '*'\n      case 41:                      // '+'\n      case 65:                      // '?'\n        try_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n  }\n\n  function parse_OccurrenceIndicator()\n  {\n    eventHandler.startNonterminal(\"OccurrenceIndicator\", e0);\n    switch (l1)\n    {\n    case 65:                        // '?'\n      shift(65);                    // '?'\n      break;\n    case 40:                        // '*'\n      shift(40);                    // '*'\n      break;\n    default:\n      shift(41);                    // '+'\n    }\n    eventHandler.endNonterminal(\"OccurrenceIndicator\", e0);\n  }\n\n  function try_OccurrenceIndicator()\n  {\n    switch (l1)\n    {\n    case 65:                        // '?'\n      shiftT(65);                   // '?'\n      break;\n    case 40:                        // '*'\n      shiftT(40);                   // '*'\n      break;\n    default:\n      shiftT(41);                   // '+'\n    }\n  }\n\n  function parse_ItemType()\n  {\n    eventHandler.startNonterminal(\"ItemType\", e0);\n    switch (l1)\n    {\n    case 79:                        // 'array'\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 147:                       // 'function'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 198:                       // 'object'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 249:                       // 'text'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12879                 // 'array' EOF\n     || lk == 12969                 // 'json-item' EOF\n     || lk == 12998                 // 'object' EOF\n     || lk == 13047                 // 'structured-item' EOF\n     || lk == 13903                 // 'array' '!='\n     || lk == 13993                 // 'json-item' '!='\n     || lk == 14022                 // 'object' '!='\n     || lk == 14071                 // 'structured-item' '!='\n     || lk == 19535                 // 'array' ')'\n     || lk == 19625                 // 'json-item' ')'\n     || lk == 19654                 // 'object' ')'\n     || lk == 19703                 // 'structured-item' ')'\n     || lk == 20047                 // 'array' '*'\n     || lk == 20137                 // 'json-item' '*'\n     || lk == 20166                 // 'object' '*'\n     || lk == 20215                 // 'structured-item' '*'\n     || lk == 20559                 // 'array' '*'\n     || lk == 20649                 // 'json-item' '*'\n     || lk == 20678                 // 'object' '*'\n     || lk == 20727                 // 'structured-item' '*'\n     || lk == 21071                 // 'array' '+'\n     || lk == 21161                 // 'json-item' '+'\n     || lk == 21190                 // 'object' '+'\n     || lk == 21239                 // 'structured-item' '+'\n     || lk == 21583                 // 'array' ','\n     || lk == 21673                 // 'json-item' ','\n     || lk == 21702                 // 'object' ','\n     || lk == 21751                 // 'structured-item' ','\n     || lk == 22095                 // 'array' '-'\n     || lk == 22185                 // 'json-item' '-'\n     || lk == 22214                 // 'object' '-'\n     || lk == 22263                 // 'structured-item' '-'\n     || lk == 25679                 // 'array' ':'\n     || lk == 25769                 // 'json-item' ':'\n     || lk == 25798                 // 'object' ':'\n     || lk == 25847                 // 'structured-item' ':'\n     || lk == 27215                 // 'array' ':='\n     || lk == 27305                 // 'json-item' ':='\n     || lk == 27334                 // 'object' ':='\n     || lk == 27383                 // 'structured-item' ':='\n     || lk == 27727                 // 'array' ';'\n     || lk == 27817                 // 'json-item' ';'\n     || lk == 27846                 // 'object' ';'\n     || lk == 27895                 // 'structured-item' ';'\n     || lk == 28239                 // 'array' '<'\n     || lk == 28329                 // 'json-item' '<'\n     || lk == 28358                 // 'object' '<'\n     || lk == 28407                 // 'structured-item' '<'\n     || lk == 29775                 // 'array' '<<'\n     || lk == 29865                 // 'json-item' '<<'\n     || lk == 29894                 // 'object' '<<'\n     || lk == 29943                 // 'structured-item' '<<'\n     || lk == 30287                 // 'array' '<='\n     || lk == 30377                 // 'json-item' '<='\n     || lk == 30406                 // 'object' '<='\n     || lk == 30455                 // 'structured-item' '<='\n     || lk == 31311                 // 'array' '='\n     || lk == 31401                 // 'json-item' '='\n     || lk == 31430                 // 'object' '='\n     || lk == 31479                 // 'structured-item' '='\n     || lk == 31823                 // 'array' '>'\n     || lk == 31913                 // 'json-item' '>'\n     || lk == 31942                 // 'object' '>'\n     || lk == 31991                 // 'structured-item' '>'\n     || lk == 32335                 // 'array' '>='\n     || lk == 32425                 // 'json-item' '>='\n     || lk == 32454                 // 'object' '>='\n     || lk == 32503                 // 'structured-item' '>='\n     || lk == 32847                 // 'array' '>>'\n     || lk == 32937                 // 'json-item' '>>'\n     || lk == 32966                 // 'object' '>>'\n     || lk == 33015                 // 'structured-item' '>>'\n     || lk == 33359                 // 'array' '?'\n     || lk == 33449                 // 'json-item' '?'\n     || lk == 33478                 // 'object' '?'\n     || lk == 33527                 // 'structured-item' '?'\n     || lk == 35919                 // 'array' ']'\n     || lk == 36009                 // 'json-item' ']'\n     || lk == 36038                 // 'object' ']'\n     || lk == 36087                 // 'structured-item' ']'\n     || lk == 36431                 // 'array' 'after'\n     || lk == 36521                 // 'json-item' 'after'\n     || lk == 36550                 // 'object' 'after'\n     || lk == 36599                 // 'structured-item' 'after'\n     || lk == 37455                 // 'array' 'allowing'\n     || lk == 37545                 // 'json-item' 'allowing'\n     || lk == 37574                 // 'object' 'allowing'\n     || lk == 37623                 // 'structured-item' 'allowing'\n     || lk == 38991                 // 'array' 'and'\n     || lk == 39081                 // 'json-item' 'and'\n     || lk == 39110                 // 'object' 'and'\n     || lk == 39159                 // 'structured-item' 'and'\n     || lk == 41039                 // 'array' 'as'\n     || lk == 41129                 // 'json-item' 'as'\n     || lk == 41158                 // 'object' 'as'\n     || lk == 41207                 // 'structured-item' 'as'\n     || lk == 41551                 // 'array' 'ascending'\n     || lk == 41641                 // 'json-item' 'ascending'\n     || lk == 41670                 // 'object' 'ascending'\n     || lk == 41719                 // 'structured-item' 'ascending'\n     || lk == 42063                 // 'array' 'at'\n     || lk == 42153                 // 'json-item' 'at'\n     || lk == 42182                 // 'object' 'at'\n     || lk == 42231                 // 'structured-item' 'at'\n     || lk == 43599                 // 'array' 'before'\n     || lk == 43689                 // 'json-item' 'before'\n     || lk == 43718                 // 'object' 'before'\n     || lk == 43767                 // 'structured-item' 'before'\n     || lk == 45647                 // 'array' 'case'\n     || lk == 45737                 // 'json-item' 'case'\n     || lk == 45766                 // 'object' 'case'\n     || lk == 45815                 // 'structured-item' 'case'\n     || lk == 48719                 // 'array' 'collation'\n     || lk == 48809                 // 'json-item' 'collation'\n     || lk == 48838                 // 'object' 'collation'\n     || lk == 48887                 // 'structured-item' 'collation'\n     || lk == 51279                 // 'array' 'contains'\n     || lk == 51369                 // 'json-item' 'contains'\n     || lk == 51398                 // 'object' 'contains'\n     || lk == 51447                 // 'structured-item' 'contains'\n     || lk == 54351                 // 'array' 'count'\n     || lk == 54441                 // 'json-item' 'count'\n     || lk == 54470                 // 'object' 'count'\n     || lk == 54519                 // 'structured-item' 'count'\n     || lk == 56399                 // 'array' 'default'\n     || lk == 56489                 // 'json-item' 'default'\n     || lk == 56518                 // 'object' 'default'\n     || lk == 56567                 // 'structured-item' 'default'\n     || lk == 58447                 // 'array' 'descending'\n     || lk == 58537                 // 'json-item' 'descending'\n     || lk == 58566                 // 'object' 'descending'\n     || lk == 58615                 // 'structured-item' 'descending'\n     || lk == 61007                 // 'array' 'div'\n     || lk == 61097                 // 'json-item' 'div'\n     || lk == 61126                 // 'object' 'div'\n     || lk == 61175                 // 'structured-item' 'div'\n     || lk == 63055                 // 'array' 'else'\n     || lk == 63145                 // 'json-item' 'else'\n     || lk == 63174                 // 'object' 'else'\n     || lk == 63223                 // 'structured-item' 'else'\n     || lk == 63567                 // 'array' 'empty'\n     || lk == 63657                 // 'json-item' 'empty'\n     || lk == 63686                 // 'object' 'empty'\n     || lk == 63735                 // 'structured-item' 'empty'\n     || lk == 65103                 // 'array' 'end'\n     || lk == 65193                 // 'json-item' 'end'\n     || lk == 65222                 // 'object' 'end'\n     || lk == 65271                 // 'structured-item' 'end'\n     || lk == 66127                 // 'array' 'eq'\n     || lk == 66217                 // 'json-item' 'eq'\n     || lk == 66246                 // 'object' 'eq'\n     || lk == 66295                 // 'structured-item' 'eq'\n     || lk == 67663                 // 'array' 'except'\n     || lk == 67753                 // 'json-item' 'except'\n     || lk == 67782                 // 'object' 'except'\n     || lk == 67831                 // 'structured-item' 'except'\n     || lk == 68687                 // 'array' 'external'\n     || lk == 68777                 // 'json-item' 'external'\n     || lk == 68806                 // 'object' 'external'\n     || lk == 68855                 // 'structured-item' 'external'\n     || lk == 71247                 // 'array' 'for'\n     || lk == 71337                 // 'json-item' 'for'\n     || lk == 71366                 // 'object' 'for'\n     || lk == 71415                 // 'structured-item' 'for'\n     || lk == 75855                 // 'array' 'ge'\n     || lk == 75945                 // 'json-item' 'ge'\n     || lk == 75974                 // 'object' 'ge'\n     || lk == 76023                 // 'structured-item' 'ge'\n     || lk == 76879                 // 'array' 'group'\n     || lk == 76969                 // 'json-item' 'group'\n     || lk == 76998                 // 'object' 'group'\n     || lk == 77047                 // 'structured-item' 'group'\n     || lk == 77903                 // 'array' 'gt'\n     || lk == 77993                 // 'json-item' 'gt'\n     || lk == 78022                 // 'object' 'gt'\n     || lk == 78071                 // 'structured-item' 'gt'\n     || lk == 78415                 // 'array' 'idiv'\n     || lk == 78505                 // 'json-item' 'idiv'\n     || lk == 78534                 // 'object' 'idiv'\n     || lk == 78583                 // 'structured-item' 'idiv'\n     || lk == 79951                 // 'array' 'in'\n     || lk == 80041                 // 'json-item' 'in'\n     || lk == 80070                 // 'object' 'in'\n     || lk == 80119                 // 'structured-item' 'in'\n     || lk == 83023                 // 'array' 'instance'\n     || lk == 83113                 // 'json-item' 'instance'\n     || lk == 83142                 // 'object' 'instance'\n     || lk == 83191                 // 'structured-item' 'instance'\n     || lk == 84047                 // 'array' 'intersect'\n     || lk == 84137                 // 'json-item' 'intersect'\n     || lk == 84166                 // 'object' 'intersect'\n     || lk == 84215                 // 'structured-item' 'intersect'\n     || lk == 84559                 // 'array' 'into'\n     || lk == 84649                 // 'json-item' 'into'\n     || lk == 84678                 // 'object' 'into'\n     || lk == 84727                 // 'structured-item' 'into'\n     || lk == 85071                 // 'array' 'is'\n     || lk == 85161                 // 'json-item' 'is'\n     || lk == 85190                 // 'object' 'is'\n     || lk == 85239                 // 'structured-item' 'is'\n     || lk == 89679                 // 'array' 'le'\n     || lk == 89769                 // 'json-item' 'le'\n     || lk == 89798                 // 'object' 'le'\n     || lk == 89847                 // 'structured-item' 'le'\n     || lk == 90703                 // 'array' 'let'\n     || lk == 90793                 // 'json-item' 'let'\n     || lk == 90822                 // 'object' 'let'\n     || lk == 90871                 // 'structured-item' 'let'\n     || lk == 92751                 // 'array' 'lt'\n     || lk == 92841                 // 'json-item' 'lt'\n     || lk == 92870                 // 'object' 'lt'\n     || lk == 92919                 // 'structured-item' 'lt'\n     || lk == 93775                 // 'array' 'mod'\n     || lk == 93865                 // 'json-item' 'mod'\n     || lk == 93894                 // 'object' 'mod'\n     || lk == 93943                 // 'structured-item' 'mod'\n     || lk == 94287                 // 'array' 'modify'\n     || lk == 94377                 // 'json-item' 'modify'\n     || lk == 94406                 // 'object' 'modify'\n     || lk == 94455                 // 'structured-item' 'modify'\n     || lk == 96847                 // 'array' 'ne'\n     || lk == 96937                 // 'json-item' 'ne'\n     || lk == 96966                 // 'object' 'ne'\n     || lk == 97015                 // 'structured-item' 'ne'\n     || lk == 103503                // 'array' 'only'\n     || lk == 103593                // 'json-item' 'only'\n     || lk == 103622                // 'object' 'only'\n     || lk == 103671                // 'structured-item' 'only'\n     || lk == 104527                // 'array' 'or'\n     || lk == 104617                // 'json-item' 'or'\n     || lk == 104646                // 'object' 'or'\n     || lk == 104695                // 'structured-item' 'or'\n     || lk == 105039                // 'array' 'order'\n     || lk == 105129                // 'json-item' 'order'\n     || lk == 105158                // 'object' 'order'\n     || lk == 105207                // 'structured-item' 'order'\n     || lk == 107087                // 'array' 'paragraphs'\n     || lk == 107177                // 'json-item' 'paragraphs'\n     || lk == 107206                // 'object' 'paragraphs'\n     || lk == 107255                // 'structured-item' 'paragraphs'\n     || lk == 114767                // 'array' 'return'\n     || lk == 114857                // 'json-item' 'return'\n     || lk == 114886                // 'object' 'return'\n     || lk == 114935                // 'structured-item' 'return'\n     || lk == 116815                // 'array' 'satisfies'\n     || lk == 116905                // 'json-item' 'satisfies'\n     || lk == 116934                // 'object' 'satisfies'\n     || lk == 116983                // 'structured-item' 'satisfies'\n     || lk == 118863                // 'array' 'score'\n     || lk == 118953                // 'json-item' 'score'\n     || lk == 118982                // 'object' 'score'\n     || lk == 119031                // 'structured-item' 'score'\n     || lk == 121423                // 'array' 'sentences'\n     || lk == 121513                // 'json-item' 'sentences'\n     || lk == 121542                // 'object' 'sentences'\n     || lk == 121591                // 'structured-item' 'sentences'\n     || lk == 123471                // 'array' 'stable'\n     || lk == 123561                // 'json-item' 'stable'\n     || lk == 123590                // 'object' 'stable'\n     || lk == 123639                // 'structured-item' 'stable'\n     || lk == 123983                // 'array' 'start'\n     || lk == 124073                // 'json-item' 'start'\n     || lk == 124102                // 'object' 'start'\n     || lk == 124151                // 'structured-item' 'start'\n     || lk == 129103                // 'array' 'times'\n     || lk == 129193                // 'json-item' 'times'\n     || lk == 129222                // 'object' 'times'\n     || lk == 129271                // 'structured-item' 'times'\n     || lk == 129615                // 'array' 'to'\n     || lk == 129705                // 'json-item' 'to'\n     || lk == 129734                // 'object' 'to'\n     || lk == 129783                // 'structured-item' 'to'\n     || lk == 133199                // 'array' 'union'\n     || lk == 133289                // 'json-item' 'union'\n     || lk == 133318                // 'object' 'union'\n     || lk == 133367                // 'structured-item' 'union'\n     || lk == 139343                // 'array' 'where'\n     || lk == 139433                // 'json-item' 'where'\n     || lk == 139462                // 'object' 'where'\n     || lk == 139511                // 'structured-item' 'where'\n     || lk == 141391                // 'array' 'with'\n     || lk == 141481                // 'json-item' 'with'\n     || lk == 141510                // 'object' 'with'\n     || lk == 141559                // 'structured-item' 'with'\n     || lk == 142927                // 'array' 'words'\n     || lk == 143017                // 'json-item' 'words'\n     || lk == 143046                // 'object' 'words'\n     || lk == 143095                // 'structured-item' 'words'\n     || lk == 143951                // 'array' '{'\n     || lk == 144041                // 'json-item' '{'\n     || lk == 144070                // 'object' '{'\n     || lk == 144119                // 'structured-item' '{'\n     || lk == 145487                // 'array' '|'\n     || lk == 145577                // 'json-item' '|'\n     || lk == 145606                // 'object' '|'\n     || lk == 145655                // 'structured-item' '|'\n     || lk == 145999                // 'array' '||'\n     || lk == 146089                // 'json-item' '||'\n     || lk == 146118                // 'object' '||'\n     || lk == 146167                // 'structured-item' '||'\n     || lk == 146511                // 'array' '|}'\n     || lk == 146601                // 'json-item' '|}'\n     || lk == 146630                // 'object' '|}'\n     || lk == 146679                // 'structured-item' '|}'\n     || lk == 147023                // 'array' '}'\n     || lk == 147113                // 'json-item' '}'\n     || lk == 147142                // 'object' '}'\n     || lk == 147191)               // 'structured-item' '}'\n    {\n      lk = memoized(6, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_AtomicOrUnionType();\n          lk = -4;\n        }\n        catch (p4A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_JSONTest();\n            lk = -6;\n          }\n          catch (p6A)\n          {\n            lk = -7;\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(6, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      parse_KindTest();\n      break;\n    case 18087:                     // 'item' '('\n      shift(167);                   // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n      break;\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      parse_FunctionTest();\n      break;\n    case 35:                        // '('\n      parse_ParenthesizedItemType();\n      break;\n    case -6:\n    case 17999:                     // 'array' '('\n    case 18089:                     // 'json-item' '('\n    case 18118:                     // 'object' '('\n      parse_JSONTest();\n      break;\n    case -7:\n    case 18167:                     // 'structured-item' '('\n      parse_StructuredItemTest();\n      break;\n    default:\n      parse_AtomicOrUnionType();\n    }\n    eventHandler.endNonterminal(\"ItemType\", e0);\n  }\n\n  function try_ItemType()\n  {\n    switch (l1)\n    {\n    case 79:                        // 'array'\n    case 83:                        // 'attribute'\n    case 97:                        // 'comment'\n    case 121:                       // 'document-node'\n    case 122:                       // 'element'\n    case 147:                       // 'function'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 198:                       // 'object'\n    case 220:                       // 'processing-instruction'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 249:                       // 'text'\n      lookahead2W(232);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 12879                 // 'array' EOF\n     || lk == 12969                 // 'json-item' EOF\n     || lk == 12998                 // 'object' EOF\n     || lk == 13047                 // 'structured-item' EOF\n     || lk == 13903                 // 'array' '!='\n     || lk == 13993                 // 'json-item' '!='\n     || lk == 14022                 // 'object' '!='\n     || lk == 14071                 // 'structured-item' '!='\n     || lk == 19535                 // 'array' ')'\n     || lk == 19625                 // 'json-item' ')'\n     || lk == 19654                 // 'object' ')'\n     || lk == 19703                 // 'structured-item' ')'\n     || lk == 20047                 // 'array' '*'\n     || lk == 20137                 // 'json-item' '*'\n     || lk == 20166                 // 'object' '*'\n     || lk == 20215                 // 'structured-item' '*'\n     || lk == 20559                 // 'array' '*'\n     || lk == 20649                 // 'json-item' '*'\n     || lk == 20678                 // 'object' '*'\n     || lk == 20727                 // 'structured-item' '*'\n     || lk == 21071                 // 'array' '+'\n     || lk == 21161                 // 'json-item' '+'\n     || lk == 21190                 // 'object' '+'\n     || lk == 21239                 // 'structured-item' '+'\n     || lk == 21583                 // 'array' ','\n     || lk == 21673                 // 'json-item' ','\n     || lk == 21702                 // 'object' ','\n     || lk == 21751                 // 'structured-item' ','\n     || lk == 22095                 // 'array' '-'\n     || lk == 22185                 // 'json-item' '-'\n     || lk == 22214                 // 'object' '-'\n     || lk == 22263                 // 'structured-item' '-'\n     || lk == 25679                 // 'array' ':'\n     || lk == 25769                 // 'json-item' ':'\n     || lk == 25798                 // 'object' ':'\n     || lk == 25847                 // 'structured-item' ':'\n     || lk == 27215                 // 'array' ':='\n     || lk == 27305                 // 'json-item' ':='\n     || lk == 27334                 // 'object' ':='\n     || lk == 27383                 // 'structured-item' ':='\n     || lk == 27727                 // 'array' ';'\n     || lk == 27817                 // 'json-item' ';'\n     || lk == 27846                 // 'object' ';'\n     || lk == 27895                 // 'structured-item' ';'\n     || lk == 28239                 // 'array' '<'\n     || lk == 28329                 // 'json-item' '<'\n     || lk == 28358                 // 'object' '<'\n     || lk == 28407                 // 'structured-item' '<'\n     || lk == 29775                 // 'array' '<<'\n     || lk == 29865                 // 'json-item' '<<'\n     || lk == 29894                 // 'object' '<<'\n     || lk == 29943                 // 'structured-item' '<<'\n     || lk == 30287                 // 'array' '<='\n     || lk == 30377                 // 'json-item' '<='\n     || lk == 30406                 // 'object' '<='\n     || lk == 30455                 // 'structured-item' '<='\n     || lk == 31311                 // 'array' '='\n     || lk == 31401                 // 'json-item' '='\n     || lk == 31430                 // 'object' '='\n     || lk == 31479                 // 'structured-item' '='\n     || lk == 31823                 // 'array' '>'\n     || lk == 31913                 // 'json-item' '>'\n     || lk == 31942                 // 'object' '>'\n     || lk == 31991                 // 'structured-item' '>'\n     || lk == 32335                 // 'array' '>='\n     || lk == 32425                 // 'json-item' '>='\n     || lk == 32454                 // 'object' '>='\n     || lk == 32503                 // 'structured-item' '>='\n     || lk == 32847                 // 'array' '>>'\n     || lk == 32937                 // 'json-item' '>>'\n     || lk == 32966                 // 'object' '>>'\n     || lk == 33015                 // 'structured-item' '>>'\n     || lk == 33359                 // 'array' '?'\n     || lk == 33449                 // 'json-item' '?'\n     || lk == 33478                 // 'object' '?'\n     || lk == 33527                 // 'structured-item' '?'\n     || lk == 35919                 // 'array' ']'\n     || lk == 36009                 // 'json-item' ']'\n     || lk == 36038                 // 'object' ']'\n     || lk == 36087                 // 'structured-item' ']'\n     || lk == 36431                 // 'array' 'after'\n     || lk == 36521                 // 'json-item' 'after'\n     || lk == 36550                 // 'object' 'after'\n     || lk == 36599                 // 'structured-item' 'after'\n     || lk == 37455                 // 'array' 'allowing'\n     || lk == 37545                 // 'json-item' 'allowing'\n     || lk == 37574                 // 'object' 'allowing'\n     || lk == 37623                 // 'structured-item' 'allowing'\n     || lk == 38991                 // 'array' 'and'\n     || lk == 39081                 // 'json-item' 'and'\n     || lk == 39110                 // 'object' 'and'\n     || lk == 39159                 // 'structured-item' 'and'\n     || lk == 41039                 // 'array' 'as'\n     || lk == 41129                 // 'json-item' 'as'\n     || lk == 41158                 // 'object' 'as'\n     || lk == 41207                 // 'structured-item' 'as'\n     || lk == 41551                 // 'array' 'ascending'\n     || lk == 41641                 // 'json-item' 'ascending'\n     || lk == 41670                 // 'object' 'ascending'\n     || lk == 41719                 // 'structured-item' 'ascending'\n     || lk == 42063                 // 'array' 'at'\n     || lk == 42153                 // 'json-item' 'at'\n     || lk == 42182                 // 'object' 'at'\n     || lk == 42231                 // 'structured-item' 'at'\n     || lk == 43599                 // 'array' 'before'\n     || lk == 43689                 // 'json-item' 'before'\n     || lk == 43718                 // 'object' 'before'\n     || lk == 43767                 // 'structured-item' 'before'\n     || lk == 45647                 // 'array' 'case'\n     || lk == 45737                 // 'json-item' 'case'\n     || lk == 45766                 // 'object' 'case'\n     || lk == 45815                 // 'structured-item' 'case'\n     || lk == 48719                 // 'array' 'collation'\n     || lk == 48809                 // 'json-item' 'collation'\n     || lk == 48838                 // 'object' 'collation'\n     || lk == 48887                 // 'structured-item' 'collation'\n     || lk == 51279                 // 'array' 'contains'\n     || lk == 51369                 // 'json-item' 'contains'\n     || lk == 51398                 // 'object' 'contains'\n     || lk == 51447                 // 'structured-item' 'contains'\n     || lk == 54351                 // 'array' 'count'\n     || lk == 54441                 // 'json-item' 'count'\n     || lk == 54470                 // 'object' 'count'\n     || lk == 54519                 // 'structured-item' 'count'\n     || lk == 56399                 // 'array' 'default'\n     || lk == 56489                 // 'json-item' 'default'\n     || lk == 56518                 // 'object' 'default'\n     || lk == 56567                 // 'structured-item' 'default'\n     || lk == 58447                 // 'array' 'descending'\n     || lk == 58537                 // 'json-item' 'descending'\n     || lk == 58566                 // 'object' 'descending'\n     || lk == 58615                 // 'structured-item' 'descending'\n     || lk == 61007                 // 'array' 'div'\n     || lk == 61097                 // 'json-item' 'div'\n     || lk == 61126                 // 'object' 'div'\n     || lk == 61175                 // 'structured-item' 'div'\n     || lk == 63055                 // 'array' 'else'\n     || lk == 63145                 // 'json-item' 'else'\n     || lk == 63174                 // 'object' 'else'\n     || lk == 63223                 // 'structured-item' 'else'\n     || lk == 63567                 // 'array' 'empty'\n     || lk == 63657                 // 'json-item' 'empty'\n     || lk == 63686                 // 'object' 'empty'\n     || lk == 63735                 // 'structured-item' 'empty'\n     || lk == 65103                 // 'array' 'end'\n     || lk == 65193                 // 'json-item' 'end'\n     || lk == 65222                 // 'object' 'end'\n     || lk == 65271                 // 'structured-item' 'end'\n     || lk == 66127                 // 'array' 'eq'\n     || lk == 66217                 // 'json-item' 'eq'\n     || lk == 66246                 // 'object' 'eq'\n     || lk == 66295                 // 'structured-item' 'eq'\n     || lk == 67663                 // 'array' 'except'\n     || lk == 67753                 // 'json-item' 'except'\n     || lk == 67782                 // 'object' 'except'\n     || lk == 67831                 // 'structured-item' 'except'\n     || lk == 68687                 // 'array' 'external'\n     || lk == 68777                 // 'json-item' 'external'\n     || lk == 68806                 // 'object' 'external'\n     || lk == 68855                 // 'structured-item' 'external'\n     || lk == 71247                 // 'array' 'for'\n     || lk == 71337                 // 'json-item' 'for'\n     || lk == 71366                 // 'object' 'for'\n     || lk == 71415                 // 'structured-item' 'for'\n     || lk == 75855                 // 'array' 'ge'\n     || lk == 75945                 // 'json-item' 'ge'\n     || lk == 75974                 // 'object' 'ge'\n     || lk == 76023                 // 'structured-item' 'ge'\n     || lk == 76879                 // 'array' 'group'\n     || lk == 76969                 // 'json-item' 'group'\n     || lk == 76998                 // 'object' 'group'\n     || lk == 77047                 // 'structured-item' 'group'\n     || lk == 77903                 // 'array' 'gt'\n     || lk == 77993                 // 'json-item' 'gt'\n     || lk == 78022                 // 'object' 'gt'\n     || lk == 78071                 // 'structured-item' 'gt'\n     || lk == 78415                 // 'array' 'idiv'\n     || lk == 78505                 // 'json-item' 'idiv'\n     || lk == 78534                 // 'object' 'idiv'\n     || lk == 78583                 // 'structured-item' 'idiv'\n     || lk == 79951                 // 'array' 'in'\n     || lk == 80041                 // 'json-item' 'in'\n     || lk == 80070                 // 'object' 'in'\n     || lk == 80119                 // 'structured-item' 'in'\n     || lk == 83023                 // 'array' 'instance'\n     || lk == 83113                 // 'json-item' 'instance'\n     || lk == 83142                 // 'object' 'instance'\n     || lk == 83191                 // 'structured-item' 'instance'\n     || lk == 84047                 // 'array' 'intersect'\n     || lk == 84137                 // 'json-item' 'intersect'\n     || lk == 84166                 // 'object' 'intersect'\n     || lk == 84215                 // 'structured-item' 'intersect'\n     || lk == 84559                 // 'array' 'into'\n     || lk == 84649                 // 'json-item' 'into'\n     || lk == 84678                 // 'object' 'into'\n     || lk == 84727                 // 'structured-item' 'into'\n     || lk == 85071                 // 'array' 'is'\n     || lk == 85161                 // 'json-item' 'is'\n     || lk == 85190                 // 'object' 'is'\n     || lk == 85239                 // 'structured-item' 'is'\n     || lk == 89679                 // 'array' 'le'\n     || lk == 89769                 // 'json-item' 'le'\n     || lk == 89798                 // 'object' 'le'\n     || lk == 89847                 // 'structured-item' 'le'\n     || lk == 90703                 // 'array' 'let'\n     || lk == 90793                 // 'json-item' 'let'\n     || lk == 90822                 // 'object' 'let'\n     || lk == 90871                 // 'structured-item' 'let'\n     || lk == 92751                 // 'array' 'lt'\n     || lk == 92841                 // 'json-item' 'lt'\n     || lk == 92870                 // 'object' 'lt'\n     || lk == 92919                 // 'structured-item' 'lt'\n     || lk == 93775                 // 'array' 'mod'\n     || lk == 93865                 // 'json-item' 'mod'\n     || lk == 93894                 // 'object' 'mod'\n     || lk == 93943                 // 'structured-item' 'mod'\n     || lk == 94287                 // 'array' 'modify'\n     || lk == 94377                 // 'json-item' 'modify'\n     || lk == 94406                 // 'object' 'modify'\n     || lk == 94455                 // 'structured-item' 'modify'\n     || lk == 96847                 // 'array' 'ne'\n     || lk == 96937                 // 'json-item' 'ne'\n     || lk == 96966                 // 'object' 'ne'\n     || lk == 97015                 // 'structured-item' 'ne'\n     || lk == 103503                // 'array' 'only'\n     || lk == 103593                // 'json-item' 'only'\n     || lk == 103622                // 'object' 'only'\n     || lk == 103671                // 'structured-item' 'only'\n     || lk == 104527                // 'array' 'or'\n     || lk == 104617                // 'json-item' 'or'\n     || lk == 104646                // 'object' 'or'\n     || lk == 104695                // 'structured-item' 'or'\n     || lk == 105039                // 'array' 'order'\n     || lk == 105129                // 'json-item' 'order'\n     || lk == 105158                // 'object' 'order'\n     || lk == 105207                // 'structured-item' 'order'\n     || lk == 107087                // 'array' 'paragraphs'\n     || lk == 107177                // 'json-item' 'paragraphs'\n     || lk == 107206                // 'object' 'paragraphs'\n     || lk == 107255                // 'structured-item' 'paragraphs'\n     || lk == 114767                // 'array' 'return'\n     || lk == 114857                // 'json-item' 'return'\n     || lk == 114886                // 'object' 'return'\n     || lk == 114935                // 'structured-item' 'return'\n     || lk == 116815                // 'array' 'satisfies'\n     || lk == 116905                // 'json-item' 'satisfies'\n     || lk == 116934                // 'object' 'satisfies'\n     || lk == 116983                // 'structured-item' 'satisfies'\n     || lk == 118863                // 'array' 'score'\n     || lk == 118953                // 'json-item' 'score'\n     || lk == 118982                // 'object' 'score'\n     || lk == 119031                // 'structured-item' 'score'\n     || lk == 121423                // 'array' 'sentences'\n     || lk == 121513                // 'json-item' 'sentences'\n     || lk == 121542                // 'object' 'sentences'\n     || lk == 121591                // 'structured-item' 'sentences'\n     || lk == 123471                // 'array' 'stable'\n     || lk == 123561                // 'json-item' 'stable'\n     || lk == 123590                // 'object' 'stable'\n     || lk == 123639                // 'structured-item' 'stable'\n     || lk == 123983                // 'array' 'start'\n     || lk == 124073                // 'json-item' 'start'\n     || lk == 124102                // 'object' 'start'\n     || lk == 124151                // 'structured-item' 'start'\n     || lk == 129103                // 'array' 'times'\n     || lk == 129193                // 'json-item' 'times'\n     || lk == 129222                // 'object' 'times'\n     || lk == 129271                // 'structured-item' 'times'\n     || lk == 129615                // 'array' 'to'\n     || lk == 129705                // 'json-item' 'to'\n     || lk == 129734                // 'object' 'to'\n     || lk == 129783                // 'structured-item' 'to'\n     || lk == 133199                // 'array' 'union'\n     || lk == 133289                // 'json-item' 'union'\n     || lk == 133318                // 'object' 'union'\n     || lk == 133367                // 'structured-item' 'union'\n     || lk == 139343                // 'array' 'where'\n     || lk == 139433                // 'json-item' 'where'\n     || lk == 139462                // 'object' 'where'\n     || lk == 139511                // 'structured-item' 'where'\n     || lk == 141391                // 'array' 'with'\n     || lk == 141481                // 'json-item' 'with'\n     || lk == 141510                // 'object' 'with'\n     || lk == 141559                // 'structured-item' 'with'\n     || lk == 142927                // 'array' 'words'\n     || lk == 143017                // 'json-item' 'words'\n     || lk == 143046                // 'object' 'words'\n     || lk == 143095                // 'structured-item' 'words'\n     || lk == 143951                // 'array' '{'\n     || lk == 144041                // 'json-item' '{'\n     || lk == 144070                // 'object' '{'\n     || lk == 144119                // 'structured-item' '{'\n     || lk == 145487                // 'array' '|'\n     || lk == 145577                // 'json-item' '|'\n     || lk == 145606                // 'object' '|'\n     || lk == 145655                // 'structured-item' '|'\n     || lk == 145999                // 'array' '||'\n     || lk == 146089                // 'json-item' '||'\n     || lk == 146118                // 'object' '||'\n     || lk == 146167                // 'structured-item' '||'\n     || lk == 146511                // 'array' '|}'\n     || lk == 146601                // 'json-item' '|}'\n     || lk == 146630                // 'object' '|}'\n     || lk == 146679                // 'structured-item' '|}'\n     || lk == 147023                // 'array' '}'\n     || lk == 147113                // 'json-item' '}'\n     || lk == 147142                // 'object' '}'\n     || lk == 147191)               // 'structured-item' '}'\n    {\n      lk = memoized(6, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_AtomicOrUnionType();\n          memoize(6, e0A, -4);\n          lk = -8;\n        }\n        catch (p4A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_JSONTest();\n            memoize(6, e0A, -6);\n            lk = -8;\n          }\n          catch (p6A)\n          {\n            lk = -7;\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(6, e0A, -7);\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 18003:                     // 'attribute' '('\n    case 18017:                     // 'comment' '('\n    case 18041:                     // 'document-node' '('\n    case 18042:                     // 'element' '('\n    case 18108:                     // 'namespace-node' '('\n    case 18114:                     // 'node' '('\n    case 18140:                     // 'processing-instruction' '('\n    case 18150:                     // 'schema-attribute' '('\n    case 18151:                     // 'schema-element' '('\n    case 18169:                     // 'text' '('\n      try_KindTest();\n      break;\n    case 18087:                     // 'item' '('\n      shiftT(167);                  // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n      break;\n    case 33:                        // '%'\n    case 18067:                     // 'function' '('\n      try_FunctionTest();\n      break;\n    case 35:                        // '('\n      try_ParenthesizedItemType();\n      break;\n    case -6:\n    case 17999:                     // 'array' '('\n    case 18089:                     // 'json-item' '('\n    case 18118:                     // 'object' '('\n      try_JSONTest();\n      break;\n    case -7:\n    case 18167:                     // 'structured-item' '('\n      try_StructuredItemTest();\n      break;\n    case -8:\n      break;\n    default:\n      try_AtomicOrUnionType();\n    }\n  }\n\n  function parse_JSONTest()\n  {\n    eventHandler.startNonterminal(\"JSONTest\", e0);\n    switch (l1)\n    {\n    case 169:                       // 'json-item'\n      parse_JSONItemTest();\n      break;\n    case 198:                       // 'object'\n      parse_JSONObjectTest();\n      break;\n    default:\n      parse_JSONArrayTest();\n    }\n    eventHandler.endNonterminal(\"JSONTest\", e0);\n  }\n\n  function try_JSONTest()\n  {\n    switch (l1)\n    {\n    case 169:                       // 'json-item'\n      try_JSONItemTest();\n      break;\n    case 198:                       // 'object'\n      try_JSONObjectTest();\n      break;\n    default:\n      try_JSONArrayTest();\n    }\n  }\n\n  function parse_StructuredItemTest()\n  {\n    eventHandler.startNonterminal(\"StructuredItemTest\", e0);\n    shift(247);                     // 'structured-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"StructuredItemTest\", e0);\n  }\n\n  function try_StructuredItemTest()\n  {\n    shiftT(247);                    // 'structured-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_JSONItemTest()\n  {\n    eventHandler.startNonterminal(\"JSONItemTest\", e0);\n    shift(169);                     // 'json-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"JSONItemTest\", e0);\n  }\n\n  function try_JSONItemTest()\n  {\n    shiftT(169);                    // 'json-item'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_JSONObjectTest()\n  {\n    eventHandler.startNonterminal(\"JSONObjectTest\", e0);\n    shift(198);                     // 'object'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"JSONObjectTest\", e0);\n  }\n\n  function try_JSONObjectTest()\n  {\n    shiftT(198);                    // 'object'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_JSONArrayTest()\n  {\n    eventHandler.startNonterminal(\"JSONArrayTest\", e0);\n    shift(79);                      // 'array'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shift(35);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"JSONArrayTest\", e0);\n  }\n\n  function try_JSONArrayTest()\n  {\n    shiftT(79);                     // 'array'\n    lookahead1W(232);               // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n    if (l1 == 35)                   // '('\n    {\n      shiftT(35);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_AtomicOrUnionType()\n  {\n    eventHandler.startNonterminal(\"AtomicOrUnionType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicOrUnionType\", e0);\n  }\n\n  function try_AtomicOrUnionType()\n  {\n    try_EQName();\n  }\n\n  function parse_KindTest()\n  {\n    eventHandler.startNonterminal(\"KindTest\", e0);\n    switch (l1)\n    {\n    case 121:                       // 'document-node'\n      parse_DocumentTest();\n      break;\n    case 122:                       // 'element'\n      parse_ElementTest();\n      break;\n    case 83:                        // 'attribute'\n      parse_AttributeTest();\n      break;\n    case 231:                       // 'schema-element'\n      parse_SchemaElementTest();\n      break;\n    case 230:                       // 'schema-attribute'\n      parse_SchemaAttributeTest();\n      break;\n    case 220:                       // 'processing-instruction'\n      parse_PITest();\n      break;\n    case 97:                        // 'comment'\n      parse_CommentTest();\n      break;\n    case 249:                       // 'text'\n      parse_TextTest();\n      break;\n    case 188:                       // 'namespace-node'\n      parse_NamespaceNodeTest();\n      break;\n    default:\n      parse_AnyKindTest();\n    }\n    eventHandler.endNonterminal(\"KindTest\", e0);\n  }\n\n  function try_KindTest()\n  {\n    switch (l1)\n    {\n    case 121:                       // 'document-node'\n      try_DocumentTest();\n      break;\n    case 122:                       // 'element'\n      try_ElementTest();\n      break;\n    case 83:                        // 'attribute'\n      try_AttributeTest();\n      break;\n    case 231:                       // 'schema-element'\n      try_SchemaElementTest();\n      break;\n    case 230:                       // 'schema-attribute'\n      try_SchemaAttributeTest();\n      break;\n    case 220:                       // 'processing-instruction'\n      try_PITest();\n      break;\n    case 97:                        // 'comment'\n      try_CommentTest();\n      break;\n    case 249:                       // 'text'\n      try_TextTest();\n      break;\n    case 188:                       // 'namespace-node'\n      try_NamespaceNodeTest();\n      break;\n    default:\n      try_AnyKindTest();\n    }\n  }\n\n  function parse_AnyKindTest()\n  {\n    eventHandler.startNonterminal(\"AnyKindTest\", e0);\n    shift(194);                     // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"AnyKindTest\", e0);\n  }\n\n  function try_AnyKindTest()\n  {\n    shiftT(194);                    // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_DocumentTest()\n  {\n    eventHandler.startNonterminal(\"DocumentTest\", e0);\n    shift(121);                     // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(154);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 122:                     // 'element'\n        whitespace();\n        parse_ElementTest();\n        break;\n      default:\n        whitespace();\n        parse_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"DocumentTest\", e0);\n  }\n\n  function try_DocumentTest()\n  {\n    shiftT(121);                    // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(154);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 122:                     // 'element'\n        try_ElementTest();\n        break;\n      default:\n        try_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_TextTest()\n  {\n    eventHandler.startNonterminal(\"TextTest\", e0);\n    shift(249);                     // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"TextTest\", e0);\n  }\n\n  function try_TextTest()\n  {\n    shiftT(249);                    // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_CommentTest()\n  {\n    eventHandler.startNonterminal(\"CommentTest\", e0);\n    shift(97);                      // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"CommentTest\", e0);\n  }\n\n  function try_CommentTest()\n  {\n    shiftT(97);                     // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_NamespaceNodeTest()\n  {\n    eventHandler.startNonterminal(\"NamespaceNodeTest\", e0);\n    shift(188);                     // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"NamespaceNodeTest\", e0);\n  }\n\n  function try_NamespaceNodeTest()\n  {\n    shiftT(188);                    // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_PITest()\n  {\n    eventHandler.startNonterminal(\"PITest\", e0);\n    shift(220);                     // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(243);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shift(11);                  // StringLiteral\n        break;\n      default:\n        whitespace();\n        parse_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"PITest\", e0);\n  }\n\n  function try_PITest()\n  {\n    shiftT(220);                    // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(243);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 38)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shiftT(11);                 // StringLiteral\n        break;\n      default:\n        try_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_AttributeTest()\n  {\n    eventHandler.startNonterminal(\"AttributeTest\", e0);\n    shift(83);                      // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_AttribNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shift(42);                  // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"AttributeTest\", e0);\n  }\n\n  function try_AttributeTest()\n  {\n    shiftT(83);                     // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 38)                   // ')'\n    {\n      try_AttribNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shiftT(42);                 // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_AttribNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"AttribNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shift(39);                    // '*'\n      break;\n    default:\n      parse_AttributeName();\n    }\n    eventHandler.endNonterminal(\"AttribNameOrWildcard\", e0);\n  }\n\n  function try_AttribNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shiftT(39);                   // '*'\n      break;\n    default:\n      try_AttributeName();\n    }\n  }\n\n  function parse_SchemaAttributeTest()\n  {\n    eventHandler.startNonterminal(\"SchemaAttributeTest\", e0);\n    shift(230);                     // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"SchemaAttributeTest\", e0);\n  }\n\n  function try_SchemaAttributeTest()\n  {\n    shiftT(230);                    // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_AttributeDeclaration()\n  {\n    eventHandler.startNonterminal(\"AttributeDeclaration\", e0);\n    parse_AttributeName();\n    eventHandler.endNonterminal(\"AttributeDeclaration\", e0);\n  }\n\n  function try_AttributeDeclaration()\n  {\n    try_AttributeName();\n  }\n\n  function parse_ElementTest()\n  {\n    eventHandler.startNonterminal(\"ElementTest\", e0);\n    shift(122);                     // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_ElementNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shift(42);                  // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n        lookahead1W(106);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 65)               // '?'\n        {\n          shift(65);                // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ElementTest\", e0);\n  }\n\n  function try_ElementTest()\n  {\n    shiftT(122);                    // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 38)                   // ')'\n    {\n      try_ElementNameOrWildcard();\n      lookahead1W(105);             // S^WS | '(:' | ')' | ','\n      if (l1 == 42)                 // ','\n      {\n        shiftT(42);                 // ','\n        lookahead1W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n        lookahead1W(106);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 65)               // '?'\n        {\n          shiftT(65);               // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_ElementNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"ElementNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shift(39);                    // '*'\n      break;\n    default:\n      parse_ElementName();\n    }\n    eventHandler.endNonterminal(\"ElementNameOrWildcard\", e0);\n  }\n\n  function try_ElementNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 39:                        // '*'\n      shiftT(39);                   // '*'\n      break;\n    default:\n      try_ElementName();\n    }\n  }\n\n  function parse_SchemaElementTest()\n  {\n    eventHandler.startNonterminal(\"SchemaElementTest\", e0);\n    shift(231);                     // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"SchemaElementTest\", e0);\n  }\n\n  function try_SchemaElementTest()\n  {\n    shiftT(231);                    // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_ElementDeclaration()\n  {\n    eventHandler.startNonterminal(\"ElementDeclaration\", e0);\n    parse_ElementName();\n    eventHandler.endNonterminal(\"ElementDeclaration\", e0);\n  }\n\n  function try_ElementDeclaration()\n  {\n    try_ElementName();\n  }\n\n  function parse_AttributeName()\n  {\n    eventHandler.startNonterminal(\"AttributeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AttributeName\", e0);\n  }\n\n  function try_AttributeName()\n  {\n    try_EQName();\n  }\n\n  function parse_ElementName()\n  {\n    eventHandler.startNonterminal(\"ElementName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"ElementName\", e0);\n  }\n\n  function try_ElementName()\n  {\n    try_EQName();\n  }\n\n  function parse_SimpleTypeName()\n  {\n    eventHandler.startNonterminal(\"SimpleTypeName\", e0);\n    parse_TypeName();\n    eventHandler.endNonterminal(\"SimpleTypeName\", e0);\n  }\n\n  function try_SimpleTypeName()\n  {\n    try_TypeName();\n  }\n\n  function parse_TypeName()\n  {\n    eventHandler.startNonterminal(\"TypeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"TypeName\", e0);\n  }\n\n  function try_TypeName()\n  {\n    try_EQName();\n  }\n\n  function parse_FunctionTest()\n  {\n    eventHandler.startNonterminal(\"FunctionTest\", e0);\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(7, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        lk = -1;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n      }\n      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n      b2 = b2A; e2 = e2A; end = e2A; }}\n      memoize(7, e0, lk);\n    }\n    switch (lk)\n    {\n    case -1:\n      whitespace();\n      parse_AnyFunctionTest();\n      break;\n    default:\n      whitespace();\n      parse_TypedFunctionTest();\n    }\n    eventHandler.endNonterminal(\"FunctionTest\", e0);\n  }\n\n  function try_FunctionTest()\n  {\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '%' | '(:' | 'function'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    switch (l1)\n    {\n    case 147:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(7, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        memoize(7, e0A, -1);\n        lk = -3;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(7, e0A, -2);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_AnyFunctionTest();\n      break;\n    case -3:\n      break;\n    default:\n      try_TypedFunctionTest();\n    }\n  }\n\n  function parse_AnyFunctionTest()\n  {\n    eventHandler.startNonterminal(\"AnyFunctionTest\", e0);\n    shift(147);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shift(39);                      // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"AnyFunctionTest\", e0);\n  }\n\n  function try_AnyFunctionTest()\n  {\n    shiftT(147);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shiftT(39);                     // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_TypedFunctionTest()\n  {\n    eventHandler.startNonterminal(\"TypedFunctionTest\", e0);\n    shift(147);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(258);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 38)                   // ')'\n    {\n      whitespace();\n      parse_SequenceType();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(253);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_SequenceType();\n      }\n    }\n    shift(38);                      // ')'\n    lookahead1W(33);                // S^WS | '(:' | 'as'\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypedFunctionTest\", e0);\n  }\n\n  function try_TypedFunctionTest()\n  {\n    shiftT(147);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(258);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 38)                   // ')'\n    {\n      try_SequenceType();\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(253);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_SequenceType();\n      }\n    }\n    shiftT(38);                     // ')'\n    lookahead1W(33);                // S^WS | '(:' | 'as'\n    shiftT(80);                     // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n  }\n\n  function parse_ParenthesizedItemType()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedItemType\", e0);\n    shift(35);                      // '('\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(38);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedItemType\", e0);\n  }\n\n  function try_ParenthesizedItemType()\n  {\n    shiftT(35);                     // '('\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(38);                     // ')'\n  }\n\n  function parse_RevalidationDecl()\n  {\n    eventHandler.startNonterminal(\"RevalidationDecl\", e0);\n    shift(109);                     // 'declare'\n    lookahead1W(75);                // S^WS | '(:' | 'revalidation'\n    shift(226);                     // 'revalidation'\n    lookahead1W(162);               // S^WS | '(:' | 'lax' | 'skip' | 'strict'\n    switch (l1)\n    {\n    case 245:                       // 'strict'\n      shift(245);                   // 'strict'\n      break;\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    default:\n      shift(238);                   // 'skip'\n    }\n    eventHandler.endNonterminal(\"RevalidationDecl\", e0);\n  }\n\n  function parse_InsertExprTargetChoice()\n  {\n    eventHandler.startNonterminal(\"InsertExprTargetChoice\", e0);\n    switch (l1)\n    {\n    case 71:                        // 'after'\n      shift(71);                    // 'after'\n      break;\n    case 85:                        // 'before'\n      shift(85);                    // 'before'\n      break;\n    default:\n      if (l1 == 80)                 // 'as'\n      {\n        shift(80);                  // 'as'\n        lookahead1W(123);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 136:                   // 'first'\n          shift(136);               // 'first'\n          break;\n        default:\n          shift(173);               // 'last'\n        }\n      }\n      lookahead1W(57);              // S^WS | '(:' | 'into'\n      shift(165);                   // 'into'\n    }\n    eventHandler.endNonterminal(\"InsertExprTargetChoice\", e0);\n  }\n\n  function try_InsertExprTargetChoice()\n  {\n    switch (l1)\n    {\n    case 71:                        // 'after'\n      shiftT(71);                   // 'after'\n      break;\n    case 85:                        // 'before'\n      shiftT(85);                   // 'before'\n      break;\n    default:\n      if (l1 == 80)                 // 'as'\n      {\n        shiftT(80);                 // 'as'\n        lookahead1W(123);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 136:                   // 'first'\n          shiftT(136);              // 'first'\n          break;\n        default:\n          shiftT(173);              // 'last'\n        }\n      }\n      lookahead1W(57);              // S^WS | '(:' | 'into'\n      shiftT(165);                  // 'into'\n    }\n  }\n\n  function parse_InsertExpr()\n  {\n    eventHandler.startNonterminal(\"InsertExpr\", e0);\n    shift(161);                     // 'insert'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    default:\n      shift(195);                   // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_SourceExpr();\n    whitespace();\n    parse_InsertExprTargetChoice();\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"InsertExpr\", e0);\n  }\n\n  function try_InsertExpr()\n  {\n    shiftT(161);                    // 'insert'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    default:\n      shiftT(195);                  // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_SourceExpr();\n    try_InsertExprTargetChoice();\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TargetExpr();\n  }\n\n  function parse_DeleteExpr()\n  {\n    eventHandler.startNonterminal(\"DeleteExpr\", e0);\n    shift(111);                     // 'delete'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    default:\n      shift(195);                   // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"DeleteExpr\", e0);\n  }\n\n  function try_DeleteExpr()\n  {\n    shiftT(111);                    // 'delete'\n    lookahead1W(133);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    default:\n      shiftT(195);                  // 'nodes'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TargetExpr();\n  }\n\n  function parse_ReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"ReplaceExpr\", e0);\n    shift(223);                     // 'replace'\n    lookahead1W(134);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 267)                  // 'value'\n    {\n      shift(267);                   // 'value'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shift(200);                   // 'of'\n    }\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TargetExpr();\n    shift(276);                     // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReplaceExpr\", e0);\n  }\n\n  function try_ReplaceExpr()\n  {\n    shiftT(223);                    // 'replace'\n    lookahead1W(134);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 267)                  // 'value'\n    {\n      shiftT(267);                  // 'value'\n      lookahead1W(67);              // S^WS | '(:' | 'of'\n      shiftT(200);                  // 'of'\n    }\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shiftT(194);                    // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TargetExpr();\n    shiftT(276);                    // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_RenameExpr()\n  {\n    eventHandler.startNonterminal(\"RenameExpr\", e0);\n    shift(222);                     // 'rename'\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_TargetExpr();\n    shift(80);                      // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_NewNameExpr();\n    eventHandler.endNonterminal(\"RenameExpr\", e0);\n  }\n\n  function try_RenameExpr()\n  {\n    shiftT(222);                    // 'rename'\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shiftT(194);                    // 'node'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_TargetExpr();\n    shiftT(80);                     // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_NewNameExpr();\n  }\n\n  function parse_SourceExpr()\n  {\n    eventHandler.startNonterminal(\"SourceExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SourceExpr\", e0);\n  }\n\n  function try_SourceExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TargetExpr()\n  {\n    eventHandler.startNonterminal(\"TargetExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TargetExpr\", e0);\n  }\n\n  function try_TargetExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_NewNameExpr()\n  {\n    eventHandler.startNonterminal(\"NewNameExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"NewNameExpr\", e0);\n  }\n\n  function try_NewNameExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TransformExpr()\n  {\n    eventHandler.startNonterminal(\"TransformExpr\", e0);\n    shift(104);                     // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_TransformSpec();\n    }\n    shift(184);                     // 'modify'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(224);                     // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformExpr\", e0);\n  }\n\n  function try_TransformExpr()\n  {\n    shiftT(104);                    // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_TransformSpec();\n    }\n    shiftT(184);                    // 'modify'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(224);                    // 'return'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_TransformSpec()\n  {\n    eventHandler.startNonterminal(\"TransformSpec\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shift(53);                      // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformSpec\", e0);\n  }\n\n  function try_TransformSpec()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shiftT(53);                     // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_FTSelection()\n  {\n    eventHandler.startNonterminal(\"FTSelection\", e0);\n    parse_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(161);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 116                 // 'different'\n       && lk != 118                 // 'distance'\n       && lk != 128                 // 'entire'\n       && lk != 206                 // 'ordered'\n       && lk != 227                 // 'same'\n       && lk != 275                 // 'window'\n       && lk != 65106               // 'at' 'end'\n       && lk != 123986)             // 'at' 'start'\n      {\n        break;\n      }\n      whitespace();\n      parse_FTPosFilter();\n    }\n    eventHandler.endNonterminal(\"FTSelection\", e0);\n  }\n\n  function try_FTSelection()\n  {\n    try_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(161);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 116                 // 'different'\n       && lk != 118                 // 'distance'\n       && lk != 128                 // 'entire'\n       && lk != 206                 // 'ordered'\n       && lk != 227                 // 'same'\n       && lk != 275                 // 'window'\n       && lk != 65106               // 'at' 'end'\n       && lk != 123986)             // 'at' 'start'\n      {\n        break;\n      }\n      try_FTPosFilter();\n    }\n  }\n\n  function parse_FTWeight()\n  {\n    eventHandler.startNonterminal(\"FTWeight\", e0);\n    shift(270);                     // 'weight'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shift(281);                     // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"FTWeight\", e0);\n  }\n\n  function try_FTWeight()\n  {\n    shiftT(270);                    // 'weight'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    shiftT(281);                    // '{'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FTOr()\n  {\n    eventHandler.startNonterminal(\"FTOr\", e0);\n    parse_FTAnd();\n    for (;;)\n    {\n      if (l1 != 146)                // 'ftor'\n      {\n        break;\n      }\n      shift(146);                   // 'ftor'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTAnd();\n    }\n    eventHandler.endNonterminal(\"FTOr\", e0);\n  }\n\n  function try_FTOr()\n  {\n    try_FTAnd();\n    for (;;)\n    {\n      if (l1 != 146)                // 'ftor'\n      {\n        break;\n      }\n      shiftT(146);                  // 'ftor'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTAnd();\n    }\n  }\n\n  function parse_FTAnd()\n  {\n    eventHandler.startNonterminal(\"FTAnd\", e0);\n    parse_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftand'\n      {\n        break;\n      }\n      shift(144);                   // 'ftand'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTMildNot();\n    }\n    eventHandler.endNonterminal(\"FTAnd\", e0);\n  }\n\n  function try_FTAnd()\n  {\n    try_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftand'\n      {\n        break;\n      }\n      shiftT(144);                  // 'ftand'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTMildNot();\n    }\n  }\n\n  function parse_FTMildNot()\n  {\n    eventHandler.startNonterminal(\"FTMildNot\", e0);\n    parse_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 196)                // 'not'\n      {\n        break;\n      }\n      shift(196);                   // 'not'\n      lookahead1W(56);              // S^WS | '(:' | 'in'\n      shift(156);                   // 'in'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTUnaryNot();\n    }\n    eventHandler.endNonterminal(\"FTMildNot\", e0);\n  }\n\n  function try_FTMildNot()\n  {\n    try_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 196)                // 'not'\n      {\n        break;\n      }\n      shiftT(196);                  // 'not'\n      lookahead1W(56);              // S^WS | '(:' | 'in'\n      shiftT(156);                  // 'in'\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTUnaryNot();\n    }\n  }\n\n  function parse_FTUnaryNot()\n  {\n    eventHandler.startNonterminal(\"FTUnaryNot\", e0);\n    if (l1 == 145)                  // 'ftnot'\n    {\n      shift(145);                   // 'ftnot'\n    }\n    lookahead1W(164);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    whitespace();\n    parse_FTPrimaryWithOptions();\n    eventHandler.endNonterminal(\"FTUnaryNot\", e0);\n  }\n\n  function try_FTUnaryNot()\n  {\n    if (l1 == 145)                  // 'ftnot'\n    {\n      shiftT(145);                  // 'ftnot'\n    }\n    lookahead1W(164);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    try_FTPrimaryWithOptions();\n  }\n\n  function parse_FTPrimaryWithOptions()\n  {\n    eventHandler.startNonterminal(\"FTPrimaryWithOptions\", e0);\n    parse_FTPrimary();\n    lookahead1W(213);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 265)                  // 'using'\n    {\n      whitespace();\n      parse_FTMatchOptions();\n    }\n    if (l1 == 270)                  // 'weight'\n    {\n      whitespace();\n      parse_FTWeight();\n    }\n    eventHandler.endNonterminal(\"FTPrimaryWithOptions\", e0);\n  }\n\n  function try_FTPrimaryWithOptions()\n  {\n    try_FTPrimary();\n    lookahead1W(213);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 265)                  // 'using'\n    {\n      try_FTMatchOptions();\n    }\n    if (l1 == 270)                  // 'weight'\n    {\n      try_FTWeight();\n    }\n  }\n\n  function parse_FTPrimary()\n  {\n    eventHandler.startNonterminal(\"FTPrimary\", e0);\n    switch (l1)\n    {\n    case 35:                        // '('\n      shift(35);                    // '('\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      shift(38);                    // ')'\n      break;\n    case 36:                        // '(#'\n      parse_FTExtensionSelection();\n      break;\n    default:\n      parse_FTWords();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 199)                // 'occurs'\n      {\n        whitespace();\n        parse_FTTimes();\n      }\n    }\n    eventHandler.endNonterminal(\"FTPrimary\", e0);\n  }\n\n  function try_FTPrimary()\n  {\n    switch (l1)\n    {\n    case 35:                        // '('\n      shiftT(35);                   // '('\n      lookahead1W(177);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      shiftT(38);                   // ')'\n      break;\n    case 36:                        // '(#'\n      try_FTExtensionSelection();\n      break;\n    default:\n      try_FTWords();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 199)                // 'occurs'\n      {\n        try_FTTimes();\n      }\n    }\n  }\n\n  function parse_FTWords()\n  {\n    eventHandler.startNonterminal(\"FTWords\", e0);\n    parse_FTWordsValue();\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 72                    // 'all'\n     || l1 == 77                    // 'any'\n     || l1 == 214)                  // 'phrase'\n    {\n      whitespace();\n      parse_FTAnyallOption();\n    }\n    eventHandler.endNonterminal(\"FTWords\", e0);\n  }\n\n  function try_FTWords()\n  {\n    try_FTWordsValue();\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 72                    // 'all'\n     || l1 == 77                    // 'any'\n     || l1 == 214)                  // 'phrase'\n    {\n      try_FTAnyallOption();\n    }\n  }\n\n  function parse_FTWordsValue()\n  {\n    eventHandler.startNonterminal(\"FTWordsValue\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n    }\n    eventHandler.endNonterminal(\"FTWordsValue\", e0);\n  }\n\n  function try_FTWordsValue()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    default:\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_Expr();\n      shiftT(287);                  // '}'\n    }\n  }\n\n  function parse_FTExtensionSelection()\n  {\n    eventHandler.startNonterminal(\"FTExtensionSelection\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(281);                     // '{'\n    lookahead1W(184);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_FTSelection();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"FTExtensionSelection\", e0);\n  }\n\n  function try_FTExtensionSelection()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(104);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 36)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(281);                    // '{'\n    lookahead1W(184);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 287)                  // '}'\n    {\n      try_FTSelection();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FTAnyallOption()\n  {\n    eventHandler.startNonterminal(\"FTAnyallOption\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'any'\n      shift(77);                    // 'any'\n      lookahead1W(217);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 278)                // 'word'\n      {\n        shift(278);                 // 'word'\n      }\n      break;\n    case 72:                        // 'all'\n      shift(72);                    // 'all'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 279)                // 'words'\n      {\n        shift(279);                 // 'words'\n      }\n      break;\n    default:\n      shift(214);                   // 'phrase'\n    }\n    eventHandler.endNonterminal(\"FTAnyallOption\", e0);\n  }\n\n  function try_FTAnyallOption()\n  {\n    switch (l1)\n    {\n    case 77:                        // 'any'\n      shiftT(77);                   // 'any'\n      lookahead1W(217);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 278)                // 'word'\n      {\n        shiftT(278);                // 'word'\n      }\n      break;\n    case 72:                        // 'all'\n      shiftT(72);                   // 'all'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 279)                // 'words'\n      {\n        shiftT(279);                // 'words'\n      }\n      break;\n    default:\n      shiftT(214);                  // 'phrase'\n    }\n  }\n\n  function parse_FTTimes()\n  {\n    eventHandler.startNonterminal(\"FTTimes\", e0);\n    shift(199);                     // 'occurs'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    shift(252);                     // 'times'\n    eventHandler.endNonterminal(\"FTTimes\", e0);\n  }\n\n  function try_FTTimes()\n  {\n    shiftT(199);                    // 'occurs'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    shiftT(252);                    // 'times'\n  }\n\n  function parse_FTRange()\n  {\n    eventHandler.startNonterminal(\"FTRange\", e0);\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shift(131);                   // 'exactly'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shift(176);                 // 'least'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_AdditiveExpr();\n        break;\n      default:\n        shift(186);                 // 'most'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_AdditiveExpr();\n      }\n      break;\n    default:\n      shift(142);                   // 'from'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n      shift(253);                   // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"FTRange\", e0);\n  }\n\n  function try_FTRange()\n  {\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shiftT(131);                  // 'exactly'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AdditiveExpr();\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shiftT(176);                // 'least'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_AdditiveExpr();\n        break;\n      default:\n        shiftT(186);                // 'most'\n        lookahead1W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_AdditiveExpr();\n      }\n      break;\n    default:\n      shiftT(142);                  // 'from'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AdditiveExpr();\n      shiftT(253);                  // 'to'\n      lookahead1W(265);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_FTPosFilter()\n  {\n    eventHandler.startNonterminal(\"FTPosFilter\", e0);\n    switch (l1)\n    {\n    case 206:                       // 'ordered'\n      parse_FTOrder();\n      break;\n    case 275:                       // 'window'\n      parse_FTWindow();\n      break;\n    case 118:                       // 'distance'\n      parse_FTDistance();\n      break;\n    case 116:                       // 'different'\n    case 227:                       // 'same'\n      parse_FTScope();\n      break;\n    default:\n      parse_FTContent();\n    }\n    eventHandler.endNonterminal(\"FTPosFilter\", e0);\n  }\n\n  function try_FTPosFilter()\n  {\n    switch (l1)\n    {\n    case 206:                       // 'ordered'\n      try_FTOrder();\n      break;\n    case 275:                       // 'window'\n      try_FTWindow();\n      break;\n    case 118:                       // 'distance'\n      try_FTDistance();\n      break;\n    case 116:                       // 'different'\n    case 227:                       // 'same'\n      try_FTScope();\n      break;\n    default:\n      try_FTContent();\n    }\n  }\n\n  function parse_FTOrder()\n  {\n    eventHandler.startNonterminal(\"FTOrder\", e0);\n    shift(206);                     // 'ordered'\n    eventHandler.endNonterminal(\"FTOrder\", e0);\n  }\n\n  function try_FTOrder()\n  {\n    shiftT(206);                    // 'ordered'\n  }\n\n  function parse_FTWindow()\n  {\n    eventHandler.startNonterminal(\"FTWindow\", e0);\n    shift(275);                     // 'window'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_AdditiveExpr();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTWindow\", e0);\n  }\n\n  function try_FTWindow()\n  {\n    shiftT(275);                    // 'window'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_AdditiveExpr();\n    try_FTUnit();\n  }\n\n  function parse_FTDistance()\n  {\n    eventHandler.startNonterminal(\"FTDistance\", e0);\n    shift(118);                     // 'distance'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTDistance\", e0);\n  }\n\n  function try_FTDistance()\n  {\n    shiftT(118);                    // 'distance'\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    try_FTUnit();\n  }\n\n  function parse_FTUnit()\n  {\n    eventHandler.startNonterminal(\"FTUnit\", e0);\n    switch (l1)\n    {\n    case 279:                       // 'words'\n      shift(279);                   // 'words'\n      break;\n    case 237:                       // 'sentences'\n      shift(237);                   // 'sentences'\n      break;\n    default:\n      shift(209);                   // 'paragraphs'\n    }\n    eventHandler.endNonterminal(\"FTUnit\", e0);\n  }\n\n  function try_FTUnit()\n  {\n    switch (l1)\n    {\n    case 279:                       // 'words'\n      shiftT(279);                  // 'words'\n      break;\n    case 237:                       // 'sentences'\n      shiftT(237);                  // 'sentences'\n      break;\n    default:\n      shiftT(209);                  // 'paragraphs'\n    }\n  }\n\n  function parse_FTScope()\n  {\n    eventHandler.startNonterminal(\"FTScope\", e0);\n    switch (l1)\n    {\n    case 227:                       // 'same'\n      shift(227);                   // 'same'\n      break;\n    default:\n      shift(116);                   // 'different'\n    }\n    lookahead1W(136);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    whitespace();\n    parse_FTBigUnit();\n    eventHandler.endNonterminal(\"FTScope\", e0);\n  }\n\n  function try_FTScope()\n  {\n    switch (l1)\n    {\n    case 227:                       // 'same'\n      shiftT(227);                  // 'same'\n      break;\n    default:\n      shiftT(116);                  // 'different'\n    }\n    lookahead1W(136);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    try_FTBigUnit();\n  }\n\n  function parse_FTBigUnit()\n  {\n    eventHandler.startNonterminal(\"FTBigUnit\", e0);\n    switch (l1)\n    {\n    case 236:                       // 'sentence'\n      shift(236);                   // 'sentence'\n      break;\n    default:\n      shift(208);                   // 'paragraph'\n    }\n    eventHandler.endNonterminal(\"FTBigUnit\", e0);\n  }\n\n  function try_FTBigUnit()\n  {\n    switch (l1)\n    {\n    case 236:                       // 'sentence'\n      shiftT(236);                  // 'sentence'\n      break;\n    default:\n      shiftT(208);                  // 'paragraph'\n    }\n  }\n\n  function parse_FTContent()\n  {\n    eventHandler.startNonterminal(\"FTContent\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(121);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 242:                     // 'start'\n        shift(242);                 // 'start'\n        break;\n      default:\n        shift(127);                 // 'end'\n      }\n      break;\n    default:\n      shift(128);                   // 'entire'\n      lookahead1W(45);              // S^WS | '(:' | 'content'\n      shift(101);                   // 'content'\n    }\n    eventHandler.endNonterminal(\"FTContent\", e0);\n  }\n\n  function try_FTContent()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(121);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 242:                     // 'start'\n        shiftT(242);                // 'start'\n        break;\n      default:\n        shiftT(127);                // 'end'\n      }\n      break;\n    default:\n      shiftT(128);                  // 'entire'\n      lookahead1W(45);              // S^WS | '(:' | 'content'\n      shiftT(101);                  // 'content'\n    }\n  }\n\n  function parse_FTMatchOptions()\n  {\n    eventHandler.startNonterminal(\"FTMatchOptions\", e0);\n    for (;;)\n    {\n      shift(265);                   // 'using'\n      lookahead1W(204);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n      whitespace();\n      parse_FTMatchOption();\n      lookahead1W(213);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 265)                // 'using'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"FTMatchOptions\", e0);\n  }\n\n  function try_FTMatchOptions()\n  {\n    for (;;)\n    {\n      shiftT(265);                  // 'using'\n      lookahead1W(204);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n      try_FTMatchOption();\n      lookahead1W(213);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 265)                // 'using'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_FTMatchOption()\n  {\n    eventHandler.startNonterminal(\"FTMatchOption\", e0);\n    switch (l1)\n    {\n    case 191:                       // 'no'\n      lookahead2W(176);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 172:                       // 'language'\n      parse_FTLanguageOption();\n      break;\n    case 274:                       // 'wildcards'\n    case 140479:                    // 'no' 'wildcards'\n      parse_FTWildCardOption();\n      break;\n    case 251:                       // 'thesaurus'\n    case 128703:                    // 'no' 'thesaurus'\n      parse_FTThesaurusOption();\n      break;\n    case 243:                       // 'stemming'\n    case 124607:                    // 'no' 'stemming'\n      parse_FTStemOption();\n      break;\n    case 115:                       // 'diacritics'\n      parse_FTDiacriticsOption();\n      break;\n    case 244:                       // 'stop'\n    case 125119:                    // 'no' 'stop'\n      parse_FTStopWordOption();\n      break;\n    case 203:                       // 'option'\n      parse_FTExtensionOption();\n      break;\n    default:\n      parse_FTCaseOption();\n    }\n    eventHandler.endNonterminal(\"FTMatchOption\", e0);\n  }\n\n  function try_FTMatchOption()\n  {\n    switch (l1)\n    {\n    case 191:                       // 'no'\n      lookahead2W(176);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 172:                       // 'language'\n      try_FTLanguageOption();\n      break;\n    case 274:                       // 'wildcards'\n    case 140479:                    // 'no' 'wildcards'\n      try_FTWildCardOption();\n      break;\n    case 251:                       // 'thesaurus'\n    case 128703:                    // 'no' 'thesaurus'\n      try_FTThesaurusOption();\n      break;\n    case 243:                       // 'stemming'\n    case 124607:                    // 'no' 'stemming'\n      try_FTStemOption();\n      break;\n    case 115:                       // 'diacritics'\n      try_FTDiacriticsOption();\n      break;\n    case 244:                       // 'stop'\n    case 125119:                    // 'no' 'stop'\n      try_FTStopWordOption();\n      break;\n    case 203:                       // 'option'\n      try_FTExtensionOption();\n      break;\n    default:\n      try_FTCaseOption();\n    }\n  }\n\n  function parse_FTCaseOption()\n  {\n    eventHandler.startNonterminal(\"FTCaseOption\", e0);\n    switch (l1)\n    {\n    case 89:                        // 'case'\n      shift(89);                    // 'case'\n      lookahead1W(128);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 160:                     // 'insensitive'\n        shift(160);                 // 'insensitive'\n        break;\n      default:\n        shift(235);                 // 'sensitive'\n      }\n      break;\n    case 180:                       // 'lowercase'\n      shift(180);                   // 'lowercase'\n      break;\n    default:\n      shift(264);                   // 'uppercase'\n    }\n    eventHandler.endNonterminal(\"FTCaseOption\", e0);\n  }\n\n  function try_FTCaseOption()\n  {\n    switch (l1)\n    {\n    case 89:                        // 'case'\n      shiftT(89);                   // 'case'\n      lookahead1W(128);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 160:                     // 'insensitive'\n        shiftT(160);                // 'insensitive'\n        break;\n      default:\n        shiftT(235);                // 'sensitive'\n      }\n      break;\n    case 180:                       // 'lowercase'\n      shiftT(180);                  // 'lowercase'\n      break;\n    default:\n      shiftT(264);                  // 'uppercase'\n    }\n  }\n\n  function parse_FTDiacriticsOption()\n  {\n    eventHandler.startNonterminal(\"FTDiacriticsOption\", e0);\n    shift(115);                     // 'diacritics'\n    lookahead1W(128);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 160:                       // 'insensitive'\n      shift(160);                   // 'insensitive'\n      break;\n    default:\n      shift(235);                   // 'sensitive'\n    }\n    eventHandler.endNonterminal(\"FTDiacriticsOption\", e0);\n  }\n\n  function try_FTDiacriticsOption()\n  {\n    shiftT(115);                    // 'diacritics'\n    lookahead1W(128);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 160:                       // 'insensitive'\n      shiftT(160);                  // 'insensitive'\n      break;\n    default:\n      shiftT(235);                  // 'sensitive'\n    }\n  }\n\n  function parse_FTStemOption()\n  {\n    eventHandler.startNonterminal(\"FTStemOption\", e0);\n    switch (l1)\n    {\n    case 243:                       // 'stemming'\n      shift(243);                   // 'stemming'\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(77);              // S^WS | '(:' | 'stemming'\n      shift(243);                   // 'stemming'\n    }\n    eventHandler.endNonterminal(\"FTStemOption\", e0);\n  }\n\n  function try_FTStemOption()\n  {\n    switch (l1)\n    {\n    case 243:                       // 'stemming'\n      shiftT(243);                  // 'stemming'\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(77);              // S^WS | '(:' | 'stemming'\n      shiftT(243);                  // 'stemming'\n    }\n  }\n\n  function parse_FTThesaurusOption()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusOption\", e0);\n    switch (l1)\n    {\n    case 251:                       // 'thesaurus'\n      shift(251);                   // 'thesaurus'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        whitespace();\n        parse_FTThesaurusID();\n        break;\n      case 110:                     // 'default'\n        shift(110);                 // 'default'\n        break;\n      default:\n        shift(35);                  // '('\n        lookahead1W(116);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 82:                    // 'at'\n          whitespace();\n          parse_FTThesaurusID();\n          break;\n        default:\n          shift(110);               // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(105);         // S^WS | '(:' | ')' | ','\n          if (l1 != 42)             // ','\n          {\n            break;\n          }\n          shift(42);                // ','\n          lookahead1W(34);          // S^WS | '(:' | 'at'\n          whitespace();\n          parse_FTThesaurusID();\n        }\n        shift(38);                  // ')'\n      }\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(81);              // S^WS | '(:' | 'thesaurus'\n      shift(251);                   // 'thesaurus'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusOption\", e0);\n  }\n\n  function try_FTThesaurusOption()\n  {\n    switch (l1)\n    {\n    case 251:                       // 'thesaurus'\n      shiftT(251);                  // 'thesaurus'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        try_FTThesaurusID();\n        break;\n      case 110:                     // 'default'\n        shiftT(110);                // 'default'\n        break;\n      default:\n        shiftT(35);                 // '('\n        lookahead1W(116);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 82:                    // 'at'\n          try_FTThesaurusID();\n          break;\n        default:\n          shiftT(110);              // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(105);         // S^WS | '(:' | ')' | ','\n          if (l1 != 42)             // ','\n          {\n            break;\n          }\n          shiftT(42);               // ','\n          lookahead1W(34);          // S^WS | '(:' | 'at'\n          try_FTThesaurusID();\n        }\n        shiftT(38);                 // ')'\n      }\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(81);              // S^WS | '(:' | 'thesaurus'\n      shiftT(251);                  // 'thesaurus'\n    }\n  }\n\n  function parse_FTThesaurusID()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusID\", e0);\n    shift(82);                      // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(219);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 221)                  // 'relationship'\n    {\n      shift(221);                   // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    lookahead1W(215);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      lookahead2W(183);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 131                   // 'exactly'\n     || lk == 142                   // 'from'\n     || lk == 90194                 // 'at' 'least'\n     || lk == 95314)                // 'at' 'most'\n    {\n      whitespace();\n      parse_FTLiteralRange();\n      lookahead1W(61);              // S^WS | '(:' | 'levels'\n      shift(178);                   // 'levels'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusID\", e0);\n  }\n\n  function try_FTThesaurusID()\n  {\n    shiftT(82);                     // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n    lookahead1W(219);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 221)                  // 'relationship'\n    {\n      shiftT(221);                  // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n    }\n    lookahead1W(215);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      lookahead2W(183);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 131                   // 'exactly'\n     || lk == 142                   // 'from'\n     || lk == 90194                 // 'at' 'least'\n     || lk == 95314)                // 'at' 'most'\n    {\n      try_FTLiteralRange();\n      lookahead1W(61);              // S^WS | '(:' | 'levels'\n      shiftT(178);                  // 'levels'\n    }\n  }\n\n  function parse_FTLiteralRange()\n  {\n    eventHandler.startNonterminal(\"FTLiteralRange\", e0);\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shift(131);                   // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shift(176);                 // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n        break;\n      default:\n        shift(186);                 // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n      }\n      break;\n    default:\n      shift(142);                   // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      lookahead1W(82);              // S^WS | '(:' | 'to'\n      shift(253);                   // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n    }\n    eventHandler.endNonterminal(\"FTLiteralRange\", e0);\n  }\n\n  function try_FTLiteralRange()\n  {\n    switch (l1)\n    {\n    case 131:                       // 'exactly'\n      shiftT(131);                  // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(129);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 176:                     // 'least'\n        shiftT(176);                // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n        break;\n      default:\n        shiftT(186);                // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n      }\n      break;\n    default:\n      shiftT(142);                  // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      lookahead1W(82);              // S^WS | '(:' | 'to'\n      shiftT(253);                  // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n    }\n  }\n\n  function parse_FTStopWordOption()\n  {\n    eventHandler.startNonterminal(\"FTStopWordOption\", e0);\n    switch (l1)\n    {\n    case 244:                       // 'stop'\n      shift(244);                   // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shift(279);                   // 'words'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 110:                     // 'default'\n        shift(110);                 // 'default'\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        whitespace();\n        parse_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'stop'\n      shift(244);                   // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shift(279);                   // 'words'\n    }\n    eventHandler.endNonterminal(\"FTStopWordOption\", e0);\n  }\n\n  function try_FTStopWordOption()\n  {\n    switch (l1)\n    {\n    case 244:                       // 'stop'\n      shiftT(244);                  // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shiftT(279);                  // 'words'\n      lookahead1W(152);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 110:                     // 'default'\n        shiftT(110);                // 'default'\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        try_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(216);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 132             // 'except'\n           && l1 != 260)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'stop'\n      shiftT(244);                  // 'stop'\n      lookahead1W(89);              // S^WS | '(:' | 'words'\n      shiftT(279);                  // 'words'\n    }\n  }\n\n  function parse_FTStopWords()\n  {\n    eventHandler.startNonterminal(\"FTStopWords\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      break;\n    default:\n      shift(35);                    // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shift(42);                  // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n      shift(38);                    // ')'\n    }\n    eventHandler.endNonterminal(\"FTStopWords\", e0);\n  }\n\n  function try_FTStopWords()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n      break;\n    default:\n      shiftT(35);                   // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n      for (;;)\n      {\n        lookahead1W(105);           // S^WS | '(:' | ')' | ','\n        if (l1 != 42)               // ','\n        {\n          break;\n        }\n        shiftT(42);                 // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shiftT(11);                 // StringLiteral\n      }\n      shiftT(38);                   // ')'\n    }\n  }\n\n  function parse_FTStopWordsInclExcl()\n  {\n    eventHandler.startNonterminal(\"FTStopWordsInclExcl\", e0);\n    switch (l1)\n    {\n    case 260:                       // 'union'\n      shift(260);                   // 'union'\n      break;\n    default:\n      shift(132);                   // 'except'\n    }\n    lookahead1W(103);               // S^WS | '(' | '(:' | 'at'\n    whitespace();\n    parse_FTStopWords();\n    eventHandler.endNonterminal(\"FTStopWordsInclExcl\", e0);\n  }\n\n  function try_FTStopWordsInclExcl()\n  {\n    switch (l1)\n    {\n    case 260:                       // 'union'\n      shiftT(260);                  // 'union'\n      break;\n    default:\n      shiftT(132);                  // 'except'\n    }\n    lookahead1W(103);               // S^WS | '(' | '(:' | 'at'\n    try_FTStopWords();\n  }\n\n  function parse_FTLanguageOption()\n  {\n    eventHandler.startNonterminal(\"FTLanguageOption\", e0);\n    shift(172);                     // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTLanguageOption\", e0);\n  }\n\n  function try_FTLanguageOption()\n  {\n    shiftT(172);                    // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTWildCardOption()\n  {\n    eventHandler.startNonterminal(\"FTWildCardOption\", e0);\n    switch (l1)\n    {\n    case 274:                       // 'wildcards'\n      shift(274);                   // 'wildcards'\n      break;\n    default:\n      shift(191);                   // 'no'\n      lookahead1W(87);              // S^WS | '(:' | 'wildcards'\n      shift(274);                   // 'wildcards'\n    }\n    eventHandler.endNonterminal(\"FTWildCardOption\", e0);\n  }\n\n  function try_FTWildCardOption()\n  {\n    switch (l1)\n    {\n    case 274:                       // 'wildcards'\n      shiftT(274);                  // 'wildcards'\n      break;\n    default:\n      shiftT(191);                  // 'no'\n      lookahead1W(87);              // S^WS | '(:' | 'wildcards'\n      shiftT(274);                  // 'wildcards'\n    }\n  }\n\n  function parse_FTExtensionOption()\n  {\n    eventHandler.startNonterminal(\"FTExtensionOption\", e0);\n    shift(203);                     // 'option'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTExtensionOption\", e0);\n  }\n\n  function try_FTExtensionOption()\n  {\n    shiftT(203);                    // 'option'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTIgnoreOption()\n  {\n    eventHandler.startNonterminal(\"FTIgnoreOption\", e0);\n    shift(277);                     // 'without'\n    lookahead1W(45);                // S^WS | '(:' | 'content'\n    shift(101);                     // 'content'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_UnionExpr();\n    eventHandler.endNonterminal(\"FTIgnoreOption\", e0);\n  }\n\n  function try_FTIgnoreOption()\n  {\n    shiftT(277);                    // 'without'\n    lookahead1W(45);                // S^WS | '(:' | 'content'\n    shiftT(101);                    // 'content'\n    lookahead1W(265);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_UnionExpr();\n  }\n\n  function parse_CollectionDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionDecl\", e0);\n    shift(96);                      // 'collection'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(111);               // S^WS | '(:' | ';' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_CollectionTypeDecl();\n    }\n    eventHandler.endNonterminal(\"CollectionDecl\", e0);\n  }\n\n  function parse_CollectionTypeDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionTypeDecl\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ItemType();\n    lookahead1W(171);               // S^WS | '(:' | '*' | '+' | ';' | '?'\n    if (l1 != 54)                   // ';'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"CollectionTypeDecl\", e0);\n  }\n\n  function parse_IndexName()\n  {\n    eventHandler.startNonterminal(\"IndexName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"IndexName\", e0);\n  }\n\n  function parse_IndexDomainExpr()\n  {\n    eventHandler.startNonterminal(\"IndexDomainExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexDomainExpr\", e0);\n  }\n\n  function parse_IndexKeySpec()\n  {\n    eventHandler.startNonterminal(\"IndexKeySpec\", e0);\n    parse_IndexKeyExpr();\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_IndexKeyTypeDecl();\n    }\n    lookahead1W(156);               // S^WS | '(:' | ',' | ';' | 'collation'\n    if (l1 == 95)                   // 'collation'\n    {\n      whitespace();\n      parse_IndexKeyCollation();\n    }\n    eventHandler.endNonterminal(\"IndexKeySpec\", e0);\n  }\n\n  function parse_IndexKeyExpr()\n  {\n    eventHandler.startNonterminal(\"IndexKeyExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexKeyExpr\", e0);\n  }\n\n  function parse_IndexKeyTypeDecl()\n  {\n    eventHandler.startNonterminal(\"IndexKeyTypeDecl\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_AtomicType();\n    lookahead1W(189);               // S^WS | '(:' | '*' | '+' | ',' | ';' | '?' | 'collation'\n    if (l1 == 40                    // '*'\n     || l1 == 41                    // '+'\n     || l1 == 65)                   // '?'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"IndexKeyTypeDecl\", e0);\n  }\n\n  function parse_AtomicType()\n  {\n    eventHandler.startNonterminal(\"AtomicType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicType\", e0);\n  }\n\n  function parse_IndexKeyCollation()\n  {\n    eventHandler.startNonterminal(\"IndexKeyCollation\", e0);\n    shift(95);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"IndexKeyCollation\", e0);\n  }\n\n  function parse_IndexDecl()\n  {\n    eventHandler.startNonterminal(\"IndexDecl\", e0);\n    shift(157);                     // 'index'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_IndexName();\n    lookahead1W(68);                // S^WS | '(:' | 'on'\n    shift(201);                     // 'on'\n    lookahead1W(66);                // S^WS | '(:' | 'nodes'\n    shift(195);                     // 'nodes'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_IndexDomainExpr();\n    shift(88);                      // 'by'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_IndexKeySpec();\n    for (;;)\n    {\n      lookahead1W(107);             // S^WS | '(:' | ',' | ';'\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(262);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_IndexKeySpec();\n    }\n    eventHandler.endNonterminal(\"IndexDecl\", e0);\n  }\n\n  function parse_ICDecl()\n  {\n    eventHandler.startNonterminal(\"ICDecl\", e0);\n    shift(163);                     // 'integrity'\n    lookahead1W(43);                // S^WS | '(:' | 'constraint'\n    shift(98);                      // 'constraint'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(124);               // S^WS | '(:' | 'foreign' | 'on'\n    switch (l1)\n    {\n    case 201:                       // 'on'\n      whitespace();\n      parse_ICCollection();\n      break;\n    default:\n      whitespace();\n      parse_ICForeignKey();\n    }\n    eventHandler.endNonterminal(\"ICDecl\", e0);\n  }\n\n  function parse_ICCollection()\n  {\n    eventHandler.startNonterminal(\"ICCollection\", e0);\n    shift(201);                     // 'on'\n    lookahead1W(42);                // S^WS | '(:' | 'collection'\n    shift(96);                      // 'collection'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(150);               // S^WS | '$' | '(:' | 'foreach' | 'node'\n    switch (l1)\n    {\n    case 31:                        // '$'\n      whitespace();\n      parse_ICCollSequence();\n      break;\n    case 194:                       // 'node'\n      whitespace();\n      parse_ICCollSequenceUnique();\n      break;\n    default:\n      whitespace();\n      parse_ICCollNode();\n    }\n    eventHandler.endNonterminal(\"ICCollection\", e0);\n  }\n\n  function parse_ICCollSequence()\n  {\n    eventHandler.startNonterminal(\"ICCollSequence\", e0);\n    parse_VarRef();\n    lookahead1W(40);                // S^WS | '(:' | 'check'\n    shift(93);                      // 'check'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollSequence\", e0);\n  }\n\n  function parse_ICCollSequenceUnique()\n  {\n    eventHandler.startNonterminal(\"ICCollSequenceUnique\", e0);\n    shift(194);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(40);                // S^WS | '(:' | 'check'\n    shift(93);                      // 'check'\n    lookahead1W(83);                // S^WS | '(:' | 'unique'\n    shift(261);                     // 'unique'\n    lookahead1W(60);                // S^WS | '(:' | 'key'\n    shift(171);                     // 'key'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICCollSequenceUnique\", e0);\n  }\n\n  function parse_ICCollNode()\n  {\n    eventHandler.startNonterminal(\"ICCollNode\", e0);\n    shift(140);                     // 'foreach'\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(40);                // S^WS | '(:' | 'check'\n    shift(93);                      // 'check'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollNode\", e0);\n  }\n\n  function parse_ICForeignKey()\n  {\n    eventHandler.startNonterminal(\"ICForeignKey\", e0);\n    shift(141);                     // 'foreign'\n    lookahead1W(60);                // S^WS | '(:' | 'key'\n    shift(171);                     // 'key'\n    lookahead1W(54);                // S^WS | '(:' | 'from'\n    whitespace();\n    parse_ICForeignKeySource();\n    whitespace();\n    parse_ICForeignKeyTarget();\n    eventHandler.endNonterminal(\"ICForeignKey\", e0);\n  }\n\n  function parse_ICForeignKeySource()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeySource\", e0);\n    shift(142);                     // 'from'\n    lookahead1W(42);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeySource\", e0);\n  }\n\n  function parse_ICForeignKeyTarget()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyTarget\", e0);\n    shift(253);                     // 'to'\n    lookahead1W(42);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeyTarget\", e0);\n  }\n\n  function parse_ICForeignKeyValues()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyValues\", e0);\n    shift(96);                      // 'collection'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(65);                // S^WS | '(:' | 'node'\n    shift(194);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(60);                // S^WS | '(:' | 'key'\n    shift(171);                     // 'key'\n    lookahead1W(262);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICForeignKeyValues\", e0);\n  }\n\n  function try_Comment()\n  {\n    shiftT(37);                     // '(:'\n    for (;;)\n    {\n      lookahead1(92);               // CommentContents | '(:' | ':)'\n      if (l1 == 51)                 // ':)'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 24:                      // CommentContents\n        shiftT(24);                 // CommentContents\n        break;\n      default:\n        try_Comment();\n      }\n    }\n    shiftT(51);                     // ':)'\n  }\n\n  function try_Whitespace()\n  {\n    switch (l1)\n    {\n    case 22:                        // S^WS\n      shiftT(22);                   // S^WS\n      break;\n    default:\n      try_Comment();\n    }\n  }\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    lookahead1(240);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      shift(83);                    // 'attribute'\n      break;\n    case 97:                        // 'comment'\n      shift(97);                    // 'comment'\n      break;\n    case 121:                       // 'document-node'\n      shift(121);                   // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shift(122);                   // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shift(125);                   // 'empty-sequence'\n      break;\n    case 147:                       // 'function'\n      shift(147);                   // 'function'\n      break;\n    case 154:                       // 'if'\n      shift(154);                   // 'if'\n      break;\n    case 167:                       // 'item'\n      shift(167);                   // 'item'\n      break;\n    case 188:                       // 'namespace-node'\n      shift(188);                   // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    case 220:                       // 'processing-instruction'\n      shift(220);                   // 'processing-instruction'\n      break;\n    case 230:                       // 'schema-attribute'\n      shift(230);                   // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shift(231);                   // 'schema-element'\n      break;\n    case 248:                       // 'switch'\n      shift(248);                   // 'switch'\n      break;\n    case 249:                       // 'text'\n      shift(249);                   // 'text'\n      break;\n    case 259:                       // 'typeswitch'\n      shift(259);                   // 'typeswitch'\n      break;\n    case 79:                        // 'array'\n      shift(79);                    // 'array'\n      break;\n    case 169:                       // 'json-item'\n      shift(169);                   // 'json-item'\n      break;\n    case 247:                       // 'structured-item'\n      shift(247);                   // 'structured-item'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function try_EQName()\n  {\n    lookahead1(240);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n    switch (l1)\n    {\n    case 83:                        // 'attribute'\n      shiftT(83);                   // 'attribute'\n      break;\n    case 97:                        // 'comment'\n      shiftT(97);                   // 'comment'\n      break;\n    case 121:                       // 'document-node'\n      shiftT(121);                  // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shiftT(122);                  // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shiftT(125);                  // 'empty-sequence'\n      break;\n    case 147:                       // 'function'\n      shiftT(147);                  // 'function'\n      break;\n    case 154:                       // 'if'\n      shiftT(154);                  // 'if'\n      break;\n    case 167:                       // 'item'\n      shiftT(167);                  // 'item'\n      break;\n    case 188:                       // 'namespace-node'\n      shiftT(188);                  // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    case 220:                       // 'processing-instruction'\n      shiftT(220);                  // 'processing-instruction'\n      break;\n    case 230:                       // 'schema-attribute'\n      shiftT(230);                  // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shiftT(231);                  // 'schema-element'\n      break;\n    case 248:                       // 'switch'\n      shiftT(248);                  // 'switch'\n      break;\n    case 249:                       // 'text'\n      shiftT(249);                  // 'text'\n      break;\n    case 259:                       // 'typeswitch'\n      shiftT(259);                  // 'typeswitch'\n      break;\n    case 79:                        // 'array'\n      shiftT(79);                   // 'array'\n      break;\n    case 169:                       // 'json-item'\n      shiftT(169);                  // 'json-item'\n      break;\n    case 247:                       // 'structured-item'\n      shiftT(247);                  // 'structured-item'\n      break;\n    default:\n      try_FunctionName();\n    }\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shift(6);                     // EQName^Token\n      break;\n    case 71:                        // 'after'\n      shift(71);                    // 'after'\n      break;\n    case 74:                        // 'ancestor'\n      shift(74);                    // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shift(75);                    // 'ancestor-or-self'\n      break;\n    case 76:                        // 'and'\n      shift(76);                    // 'and'\n      break;\n    case 80:                        // 'as'\n      shift(80);                    // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shift(81);                    // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shift(85);                    // 'before'\n      break;\n    case 89:                        // 'case'\n      shift(89);                    // 'case'\n      break;\n    case 90:                        // 'cast'\n      shift(90);                    // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shift(91);                    // 'castable'\n      break;\n    case 94:                        // 'child'\n      shift(94);                    // 'child'\n      break;\n    case 95:                        // 'collation'\n      shift(95);                    // 'collation'\n      break;\n    case 104:                       // 'copy'\n      shift(104);                   // 'copy'\n      break;\n    case 106:                       // 'count'\n      shift(106);                   // 'count'\n      break;\n    case 109:                       // 'declare'\n      shift(109);                   // 'declare'\n      break;\n    case 110:                       // 'default'\n      shift(110);                   // 'default'\n      break;\n    case 111:                       // 'delete'\n      shift(111);                   // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shift(112);                   // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shift(113);                   // 'descendant-or-self'\n      break;\n    case 114:                       // 'descending'\n      shift(114);                   // 'descending'\n      break;\n    case 119:                       // 'div'\n      shift(119);                   // 'div'\n      break;\n    case 120:                       // 'document'\n      shift(120);                   // 'document'\n      break;\n    case 123:                       // 'else'\n      shift(123);                   // 'else'\n      break;\n    case 124:                       // 'empty'\n      shift(124);                   // 'empty'\n      break;\n    case 127:                       // 'end'\n      shift(127);                   // 'end'\n      break;\n    case 129:                       // 'eq'\n      shift(129);                   // 'eq'\n      break;\n    case 130:                       // 'every'\n      shift(130);                   // 'every'\n      break;\n    case 132:                       // 'except'\n      shift(132);                   // 'except'\n      break;\n    case 136:                       // 'first'\n      shift(136);                   // 'first'\n      break;\n    case 137:                       // 'following'\n      shift(137);                   // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shift(138);                   // 'following-sibling'\n      break;\n    case 139:                       // 'for'\n      shift(139);                   // 'for'\n      break;\n    case 148:                       // 'ge'\n      shift(148);                   // 'ge'\n      break;\n    case 150:                       // 'group'\n      shift(150);                   // 'group'\n      break;\n    case 152:                       // 'gt'\n      shift(152);                   // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shift(153);                   // 'idiv'\n      break;\n    case 155:                       // 'import'\n      shift(155);                   // 'import'\n      break;\n    case 161:                       // 'insert'\n      shift(161);                   // 'insert'\n      break;\n    case 162:                       // 'instance'\n      shift(162);                   // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shift(164);                   // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shift(165);                   // 'into'\n      break;\n    case 166:                       // 'is'\n      shift(166);                   // 'is'\n      break;\n    case 173:                       // 'last'\n      shift(173);                   // 'last'\n      break;\n    case 175:                       // 'le'\n      shift(175);                   // 'le'\n      break;\n    case 177:                       // 'let'\n      shift(177);                   // 'let'\n      break;\n    case 181:                       // 'lt'\n      shift(181);                   // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shift(183);                   // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shift(184);                   // 'modify'\n      break;\n    case 185:                       // 'module'\n      shift(185);                   // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shift(187);                   // 'namespace'\n      break;\n    case 189:                       // 'ne'\n      shift(189);                   // 'ne'\n      break;\n    case 202:                       // 'only'\n      shift(202);                   // 'only'\n      break;\n    case 204:                       // 'or'\n      shift(204);                   // 'or'\n      break;\n    case 205:                       // 'order'\n      shift(205);                   // 'order'\n      break;\n    case 206:                       // 'ordered'\n      shift(206);                   // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shift(210);                   // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shift(216);                   // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shift(217);                   // 'preceding-sibling'\n      break;\n    case 222:                       // 'rename'\n      shift(222);                   // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shift(223);                   // 'replace'\n      break;\n    case 224:                       // 'return'\n      shift(224);                   // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shift(228);                   // 'satisfies'\n      break;\n    case 234:                       // 'self'\n      shift(234);                   // 'self'\n      break;\n    case 240:                       // 'some'\n      shift(240);                   // 'some'\n      break;\n    case 241:                       // 'stable'\n      shift(241);                   // 'stable'\n      break;\n    case 242:                       // 'start'\n      shift(242);                   // 'start'\n      break;\n    case 253:                       // 'to'\n      shift(253);                   // 'to'\n      break;\n    case 254:                       // 'treat'\n      shift(254);                   // 'treat'\n      break;\n    case 256:                       // 'try'\n      shift(256);                   // 'try'\n      break;\n    case 260:                       // 'union'\n      shift(260);                   // 'union'\n      break;\n    case 262:                       // 'unordered'\n      shift(262);                   // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shift(266);                   // 'validate'\n      break;\n    case 272:                       // 'where'\n      shift(272);                   // 'where'\n      break;\n    case 276:                       // 'with'\n      shift(276);                   // 'with'\n      break;\n    case 170:                       // 'jsoniq'\n      shift(170);                   // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shift(73);                    // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shift(84);                    // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shift(86);                    // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shift(87);                    // 'break'\n      break;\n    case 92:                        // 'catch'\n      shift(92);                    // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shift(99);                    // 'construction'\n      break;\n    case 102:                       // 'context'\n      shift(102);                   // 'context'\n      break;\n    case 103:                       // 'continue'\n      shift(103);                   // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shift(105);                   // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shift(107);                   // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shift(126);                   // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shift(133);                   // 'exit'\n      break;\n    case 134:                       // 'external'\n      shift(134);                   // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shift(143);                   // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shift(156);                   // 'in'\n      break;\n    case 157:                       // 'index'\n      shift(157);                   // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shift(163);                   // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shift(195);                   // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shift(203);                   // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shift(207);                   // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shift(226);                   // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shift(229);                   // 'schema'\n      break;\n    case 232:                       // 'score'\n      shift(232);                   // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shift(239);                   // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shift(245);                   // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shift(257);                   // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shift(258);                   // 'type'\n      break;\n    case 263:                       // 'updating'\n      shift(263);                   // 'updating'\n      break;\n    case 267:                       // 'value'\n      shift(267);                   // 'value'\n      break;\n    case 268:                       // 'variable'\n      shift(268);                   // 'variable'\n      break;\n    case 269:                       // 'version'\n      shift(269);                   // 'version'\n      break;\n    case 273:                       // 'while'\n      shift(273);                   // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shift(98);                    // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shift(179);                   // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shift(225);                   // 'returning'\n      break;\n    case 78:                        // 'append'\n      shift(78);                    // 'append'\n      break;\n    case 135:                       // 'false'\n      shift(135);                   // 'false'\n      break;\n    case 142:                       // 'from'\n      shift(142);                   // 'from'\n      break;\n    case 197:                       // 'null'\n      shift(197);                   // 'null'\n      break;\n    case 168:                       // 'json'\n      shift(168);                   // 'json'\n      break;\n    case 198:                       // 'object'\n      shift(198);                   // 'object'\n      break;\n    case 233:                       // 'select'\n      shift(233);                   // 'select'\n      break;\n    default:\n      shift(255);                   // 'true'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function try_FunctionName()\n  {\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shiftT(6);                    // EQName^Token\n      break;\n    case 71:                        // 'after'\n      shiftT(71);                   // 'after'\n      break;\n    case 74:                        // 'ancestor'\n      shiftT(74);                   // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shiftT(75);                   // 'ancestor-or-self'\n      break;\n    case 76:                        // 'and'\n      shiftT(76);                   // 'and'\n      break;\n    case 80:                        // 'as'\n      shiftT(80);                   // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shiftT(81);                   // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shiftT(85);                   // 'before'\n      break;\n    case 89:                        // 'case'\n      shiftT(89);                   // 'case'\n      break;\n    case 90:                        // 'cast'\n      shiftT(90);                   // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shiftT(91);                   // 'castable'\n      break;\n    case 94:                        // 'child'\n      shiftT(94);                   // 'child'\n      break;\n    case 95:                        // 'collation'\n      shiftT(95);                   // 'collation'\n      break;\n    case 104:                       // 'copy'\n      shiftT(104);                  // 'copy'\n      break;\n    case 106:                       // 'count'\n      shiftT(106);                  // 'count'\n      break;\n    case 109:                       // 'declare'\n      shiftT(109);                  // 'declare'\n      break;\n    case 110:                       // 'default'\n      shiftT(110);                  // 'default'\n      break;\n    case 111:                       // 'delete'\n      shiftT(111);                  // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shiftT(112);                  // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shiftT(113);                  // 'descendant-or-self'\n      break;\n    case 114:                       // 'descending'\n      shiftT(114);                  // 'descending'\n      break;\n    case 119:                       // 'div'\n      shiftT(119);                  // 'div'\n      break;\n    case 120:                       // 'document'\n      shiftT(120);                  // 'document'\n      break;\n    case 123:                       // 'else'\n      shiftT(123);                  // 'else'\n      break;\n    case 124:                       // 'empty'\n      shiftT(124);                  // 'empty'\n      break;\n    case 127:                       // 'end'\n      shiftT(127);                  // 'end'\n      break;\n    case 129:                       // 'eq'\n      shiftT(129);                  // 'eq'\n      break;\n    case 130:                       // 'every'\n      shiftT(130);                  // 'every'\n      break;\n    case 132:                       // 'except'\n      shiftT(132);                  // 'except'\n      break;\n    case 136:                       // 'first'\n      shiftT(136);                  // 'first'\n      break;\n    case 137:                       // 'following'\n      shiftT(137);                  // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shiftT(138);                  // 'following-sibling'\n      break;\n    case 139:                       // 'for'\n      shiftT(139);                  // 'for'\n      break;\n    case 148:                       // 'ge'\n      shiftT(148);                  // 'ge'\n      break;\n    case 150:                       // 'group'\n      shiftT(150);                  // 'group'\n      break;\n    case 152:                       // 'gt'\n      shiftT(152);                  // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shiftT(153);                  // 'idiv'\n      break;\n    case 155:                       // 'import'\n      shiftT(155);                  // 'import'\n      break;\n    case 161:                       // 'insert'\n      shiftT(161);                  // 'insert'\n      break;\n    case 162:                       // 'instance'\n      shiftT(162);                  // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shiftT(164);                  // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shiftT(165);                  // 'into'\n      break;\n    case 166:                       // 'is'\n      shiftT(166);                  // 'is'\n      break;\n    case 173:                       // 'last'\n      shiftT(173);                  // 'last'\n      break;\n    case 175:                       // 'le'\n      shiftT(175);                  // 'le'\n      break;\n    case 177:                       // 'let'\n      shiftT(177);                  // 'let'\n      break;\n    case 181:                       // 'lt'\n      shiftT(181);                  // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shiftT(183);                  // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shiftT(184);                  // 'modify'\n      break;\n    case 185:                       // 'module'\n      shiftT(185);                  // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shiftT(187);                  // 'namespace'\n      break;\n    case 189:                       // 'ne'\n      shiftT(189);                  // 'ne'\n      break;\n    case 202:                       // 'only'\n      shiftT(202);                  // 'only'\n      break;\n    case 204:                       // 'or'\n      shiftT(204);                  // 'or'\n      break;\n    case 205:                       // 'order'\n      shiftT(205);                  // 'order'\n      break;\n    case 206:                       // 'ordered'\n      shiftT(206);                  // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shiftT(210);                  // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shiftT(216);                  // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shiftT(217);                  // 'preceding-sibling'\n      break;\n    case 222:                       // 'rename'\n      shiftT(222);                  // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shiftT(223);                  // 'replace'\n      break;\n    case 224:                       // 'return'\n      shiftT(224);                  // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shiftT(228);                  // 'satisfies'\n      break;\n    case 234:                       // 'self'\n      shiftT(234);                  // 'self'\n      break;\n    case 240:                       // 'some'\n      shiftT(240);                  // 'some'\n      break;\n    case 241:                       // 'stable'\n      shiftT(241);                  // 'stable'\n      break;\n    case 242:                       // 'start'\n      shiftT(242);                  // 'start'\n      break;\n    case 253:                       // 'to'\n      shiftT(253);                  // 'to'\n      break;\n    case 254:                       // 'treat'\n      shiftT(254);                  // 'treat'\n      break;\n    case 256:                       // 'try'\n      shiftT(256);                  // 'try'\n      break;\n    case 260:                       // 'union'\n      shiftT(260);                  // 'union'\n      break;\n    case 262:                       // 'unordered'\n      shiftT(262);                  // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shiftT(266);                  // 'validate'\n      break;\n    case 272:                       // 'where'\n      shiftT(272);                  // 'where'\n      break;\n    case 276:                       // 'with'\n      shiftT(276);                  // 'with'\n      break;\n    case 170:                       // 'jsoniq'\n      shiftT(170);                  // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shiftT(73);                   // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shiftT(84);                   // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shiftT(86);                   // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shiftT(87);                   // 'break'\n      break;\n    case 92:                        // 'catch'\n      shiftT(92);                   // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shiftT(99);                   // 'construction'\n      break;\n    case 102:                       // 'context'\n      shiftT(102);                  // 'context'\n      break;\n    case 103:                       // 'continue'\n      shiftT(103);                  // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shiftT(105);                  // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shiftT(107);                  // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shiftT(126);                  // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shiftT(133);                  // 'exit'\n      break;\n    case 134:                       // 'external'\n      shiftT(134);                  // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shiftT(143);                  // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shiftT(156);                  // 'in'\n      break;\n    case 157:                       // 'index'\n      shiftT(157);                  // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shiftT(163);                  // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shiftT(174);                  // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shiftT(195);                  // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shiftT(203);                  // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shiftT(207);                  // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shiftT(226);                  // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shiftT(229);                  // 'schema'\n      break;\n    case 232:                       // 'score'\n      shiftT(232);                  // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shiftT(239);                  // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shiftT(245);                  // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shiftT(257);                  // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shiftT(258);                  // 'type'\n      break;\n    case 263:                       // 'updating'\n      shiftT(263);                  // 'updating'\n      break;\n    case 267:                       // 'value'\n      shiftT(267);                  // 'value'\n      break;\n    case 268:                       // 'variable'\n      shiftT(268);                  // 'variable'\n      break;\n    case 269:                       // 'version'\n      shiftT(269);                  // 'version'\n      break;\n    case 273:                       // 'while'\n      shiftT(273);                  // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shiftT(98);                   // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shiftT(179);                  // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shiftT(225);                  // 'returning'\n      break;\n    case 78:                        // 'append'\n      shiftT(78);                   // 'append'\n      break;\n    case 135:                       // 'false'\n      shiftT(135);                  // 'false'\n      break;\n    case 142:                       // 'from'\n      shiftT(142);                  // 'from'\n      break;\n    case 197:                       // 'null'\n      shiftT(197);                  // 'null'\n      break;\n    case 168:                       // 'json'\n      shiftT(168);                  // 'json'\n      break;\n    case 198:                       // 'object'\n      shiftT(198);                  // 'object'\n      break;\n    case 233:                       // 'select'\n      shiftT(233);                  // 'select'\n      break;\n    default:\n      shiftT(255);                  // 'true'\n    }\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shift(19);                    // NCName^Token\n      break;\n    case 71:                        // 'after'\n      shift(71);                    // 'after'\n      break;\n    case 76:                        // 'and'\n      shift(76);                    // 'and'\n      break;\n    case 80:                        // 'as'\n      shift(80);                    // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shift(81);                    // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shift(85);                    // 'before'\n      break;\n    case 89:                        // 'case'\n      shift(89);                    // 'case'\n      break;\n    case 90:                        // 'cast'\n      shift(90);                    // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shift(91);                    // 'castable'\n      break;\n    case 95:                        // 'collation'\n      shift(95);                    // 'collation'\n      break;\n    case 106:                       // 'count'\n      shift(106);                   // 'count'\n      break;\n    case 110:                       // 'default'\n      shift(110);                   // 'default'\n      break;\n    case 114:                       // 'descending'\n      shift(114);                   // 'descending'\n      break;\n    case 119:                       // 'div'\n      shift(119);                   // 'div'\n      break;\n    case 123:                       // 'else'\n      shift(123);                   // 'else'\n      break;\n    case 124:                       // 'empty'\n      shift(124);                   // 'empty'\n      break;\n    case 127:                       // 'end'\n      shift(127);                   // 'end'\n      break;\n    case 129:                       // 'eq'\n      shift(129);                   // 'eq'\n      break;\n    case 132:                       // 'except'\n      shift(132);                   // 'except'\n      break;\n    case 139:                       // 'for'\n      shift(139);                   // 'for'\n      break;\n    case 148:                       // 'ge'\n      shift(148);                   // 'ge'\n      break;\n    case 150:                       // 'group'\n      shift(150);                   // 'group'\n      break;\n    case 152:                       // 'gt'\n      shift(152);                   // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shift(153);                   // 'idiv'\n      break;\n    case 162:                       // 'instance'\n      shift(162);                   // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shift(164);                   // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shift(165);                   // 'into'\n      break;\n    case 166:                       // 'is'\n      shift(166);                   // 'is'\n      break;\n    case 175:                       // 'le'\n      shift(175);                   // 'le'\n      break;\n    case 177:                       // 'let'\n      shift(177);                   // 'let'\n      break;\n    case 181:                       // 'lt'\n      shift(181);                   // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shift(183);                   // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shift(184);                   // 'modify'\n      break;\n    case 189:                       // 'ne'\n      shift(189);                   // 'ne'\n      break;\n    case 202:                       // 'only'\n      shift(202);                   // 'only'\n      break;\n    case 204:                       // 'or'\n      shift(204);                   // 'or'\n      break;\n    case 205:                       // 'order'\n      shift(205);                   // 'order'\n      break;\n    case 224:                       // 'return'\n      shift(224);                   // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shift(228);                   // 'satisfies'\n      break;\n    case 241:                       // 'stable'\n      shift(241);                   // 'stable'\n      break;\n    case 242:                       // 'start'\n      shift(242);                   // 'start'\n      break;\n    case 253:                       // 'to'\n      shift(253);                   // 'to'\n      break;\n    case 254:                       // 'treat'\n      shift(254);                   // 'treat'\n      break;\n    case 260:                       // 'union'\n      shift(260);                   // 'union'\n      break;\n    case 272:                       // 'where'\n      shift(272);                   // 'where'\n      break;\n    case 276:                       // 'with'\n      shift(276);                   // 'with'\n      break;\n    case 74:                        // 'ancestor'\n      shift(74);                    // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shift(75);                    // 'ancestor-or-self'\n      break;\n    case 83:                        // 'attribute'\n      shift(83);                    // 'attribute'\n      break;\n    case 94:                        // 'child'\n      shift(94);                    // 'child'\n      break;\n    case 97:                        // 'comment'\n      shift(97);                    // 'comment'\n      break;\n    case 104:                       // 'copy'\n      shift(104);                   // 'copy'\n      break;\n    case 109:                       // 'declare'\n      shift(109);                   // 'declare'\n      break;\n    case 111:                       // 'delete'\n      shift(111);                   // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shift(112);                   // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shift(113);                   // 'descendant-or-self'\n      break;\n    case 120:                       // 'document'\n      shift(120);                   // 'document'\n      break;\n    case 121:                       // 'document-node'\n      shift(121);                   // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shift(122);                   // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shift(125);                   // 'empty-sequence'\n      break;\n    case 130:                       // 'every'\n      shift(130);                   // 'every'\n      break;\n    case 136:                       // 'first'\n      shift(136);                   // 'first'\n      break;\n    case 137:                       // 'following'\n      shift(137);                   // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shift(138);                   // 'following-sibling'\n      break;\n    case 147:                       // 'function'\n      shift(147);                   // 'function'\n      break;\n    case 154:                       // 'if'\n      shift(154);                   // 'if'\n      break;\n    case 155:                       // 'import'\n      shift(155);                   // 'import'\n      break;\n    case 161:                       // 'insert'\n      shift(161);                   // 'insert'\n      break;\n    case 167:                       // 'item'\n      shift(167);                   // 'item'\n      break;\n    case 173:                       // 'last'\n      shift(173);                   // 'last'\n      break;\n    case 185:                       // 'module'\n      shift(185);                   // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shift(187);                   // 'namespace'\n      break;\n    case 188:                       // 'namespace-node'\n      shift(188);                   // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shift(194);                   // 'node'\n      break;\n    case 206:                       // 'ordered'\n      shift(206);                   // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shift(210);                   // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shift(216);                   // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shift(217);                   // 'preceding-sibling'\n      break;\n    case 220:                       // 'processing-instruction'\n      shift(220);                   // 'processing-instruction'\n      break;\n    case 222:                       // 'rename'\n      shift(222);                   // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shift(223);                   // 'replace'\n      break;\n    case 230:                       // 'schema-attribute'\n      shift(230);                   // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shift(231);                   // 'schema-element'\n      break;\n    case 234:                       // 'self'\n      shift(234);                   // 'self'\n      break;\n    case 240:                       // 'some'\n      shift(240);                   // 'some'\n      break;\n    case 248:                       // 'switch'\n      shift(248);                   // 'switch'\n      break;\n    case 249:                       // 'text'\n      shift(249);                   // 'text'\n      break;\n    case 256:                       // 'try'\n      shift(256);                   // 'try'\n      break;\n    case 259:                       // 'typeswitch'\n      shift(259);                   // 'typeswitch'\n      break;\n    case 262:                       // 'unordered'\n      shift(262);                   // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shift(266);                   // 'validate'\n      break;\n    case 268:                       // 'variable'\n      shift(268);                   // 'variable'\n      break;\n    case 170:                       // 'jsoniq'\n      shift(170);                   // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shift(73);                    // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shift(82);                    // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shift(84);                    // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shift(86);                    // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shift(87);                    // 'break'\n      break;\n    case 92:                        // 'catch'\n      shift(92);                    // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shift(99);                    // 'construction'\n      break;\n    case 102:                       // 'context'\n      shift(102);                   // 'context'\n      break;\n    case 103:                       // 'continue'\n      shift(103);                   // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shift(105);                   // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shift(107);                   // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shift(126);                   // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shift(133);                   // 'exit'\n      break;\n    case 134:                       // 'external'\n      shift(134);                   // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shift(143);                   // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shift(156);                   // 'in'\n      break;\n    case 157:                       // 'index'\n      shift(157);                   // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shift(163);                   // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shift(174);                   // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shift(195);                   // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shift(203);                   // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shift(207);                   // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shift(226);                   // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shift(229);                   // 'schema'\n      break;\n    case 232:                       // 'score'\n      shift(232);                   // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shift(239);                   // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shift(245);                   // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shift(257);                   // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shift(258);                   // 'type'\n      break;\n    case 263:                       // 'updating'\n      shift(263);                   // 'updating'\n      break;\n    case 267:                       // 'value'\n      shift(267);                   // 'value'\n      break;\n    case 269:                       // 'version'\n      shift(269);                   // 'version'\n      break;\n    case 273:                       // 'while'\n      shift(273);                   // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shift(98);                    // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shift(179);                   // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shift(225);                   // 'returning'\n      break;\n    case 78:                        // 'append'\n      shift(78);                    // 'append'\n      break;\n    case 135:                       // 'false'\n      shift(135);                   // 'false'\n      break;\n    case 142:                       // 'from'\n      shift(142);                   // 'from'\n      break;\n    case 197:                       // 'null'\n      shift(197);                   // 'null'\n      break;\n    case 168:                       // 'json'\n      shift(168);                   // 'json'\n      break;\n    case 198:                       // 'object'\n      shift(198);                   // 'object'\n      break;\n    case 233:                       // 'select'\n      shift(233);                   // 'select'\n      break;\n    default:\n      shift(255);                   // 'true'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function try_NCName()\n  {\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shiftT(19);                   // NCName^Token\n      break;\n    case 71:                        // 'after'\n      shiftT(71);                   // 'after'\n      break;\n    case 76:                        // 'and'\n      shiftT(76);                   // 'and'\n      break;\n    case 80:                        // 'as'\n      shiftT(80);                   // 'as'\n      break;\n    case 81:                        // 'ascending'\n      shiftT(81);                   // 'ascending'\n      break;\n    case 85:                        // 'before'\n      shiftT(85);                   // 'before'\n      break;\n    case 89:                        // 'case'\n      shiftT(89);                   // 'case'\n      break;\n    case 90:                        // 'cast'\n      shiftT(90);                   // 'cast'\n      break;\n    case 91:                        // 'castable'\n      shiftT(91);                   // 'castable'\n      break;\n    case 95:                        // 'collation'\n      shiftT(95);                   // 'collation'\n      break;\n    case 106:                       // 'count'\n      shiftT(106);                  // 'count'\n      break;\n    case 110:                       // 'default'\n      shiftT(110);                  // 'default'\n      break;\n    case 114:                       // 'descending'\n      shiftT(114);                  // 'descending'\n      break;\n    case 119:                       // 'div'\n      shiftT(119);                  // 'div'\n      break;\n    case 123:                       // 'else'\n      shiftT(123);                  // 'else'\n      break;\n    case 124:                       // 'empty'\n      shiftT(124);                  // 'empty'\n      break;\n    case 127:                       // 'end'\n      shiftT(127);                  // 'end'\n      break;\n    case 129:                       // 'eq'\n      shiftT(129);                  // 'eq'\n      break;\n    case 132:                       // 'except'\n      shiftT(132);                  // 'except'\n      break;\n    case 139:                       // 'for'\n      shiftT(139);                  // 'for'\n      break;\n    case 148:                       // 'ge'\n      shiftT(148);                  // 'ge'\n      break;\n    case 150:                       // 'group'\n      shiftT(150);                  // 'group'\n      break;\n    case 152:                       // 'gt'\n      shiftT(152);                  // 'gt'\n      break;\n    case 153:                       // 'idiv'\n      shiftT(153);                  // 'idiv'\n      break;\n    case 162:                       // 'instance'\n      shiftT(162);                  // 'instance'\n      break;\n    case 164:                       // 'intersect'\n      shiftT(164);                  // 'intersect'\n      break;\n    case 165:                       // 'into'\n      shiftT(165);                  // 'into'\n      break;\n    case 166:                       // 'is'\n      shiftT(166);                  // 'is'\n      break;\n    case 175:                       // 'le'\n      shiftT(175);                  // 'le'\n      break;\n    case 177:                       // 'let'\n      shiftT(177);                  // 'let'\n      break;\n    case 181:                       // 'lt'\n      shiftT(181);                  // 'lt'\n      break;\n    case 183:                       // 'mod'\n      shiftT(183);                  // 'mod'\n      break;\n    case 184:                       // 'modify'\n      shiftT(184);                  // 'modify'\n      break;\n    case 189:                       // 'ne'\n      shiftT(189);                  // 'ne'\n      break;\n    case 202:                       // 'only'\n      shiftT(202);                  // 'only'\n      break;\n    case 204:                       // 'or'\n      shiftT(204);                  // 'or'\n      break;\n    case 205:                       // 'order'\n      shiftT(205);                  // 'order'\n      break;\n    case 224:                       // 'return'\n      shiftT(224);                  // 'return'\n      break;\n    case 228:                       // 'satisfies'\n      shiftT(228);                  // 'satisfies'\n      break;\n    case 241:                       // 'stable'\n      shiftT(241);                  // 'stable'\n      break;\n    case 242:                       // 'start'\n      shiftT(242);                  // 'start'\n      break;\n    case 253:                       // 'to'\n      shiftT(253);                  // 'to'\n      break;\n    case 254:                       // 'treat'\n      shiftT(254);                  // 'treat'\n      break;\n    case 260:                       // 'union'\n      shiftT(260);                  // 'union'\n      break;\n    case 272:                       // 'where'\n      shiftT(272);                  // 'where'\n      break;\n    case 276:                       // 'with'\n      shiftT(276);                  // 'with'\n      break;\n    case 74:                        // 'ancestor'\n      shiftT(74);                   // 'ancestor'\n      break;\n    case 75:                        // 'ancestor-or-self'\n      shiftT(75);                   // 'ancestor-or-self'\n      break;\n    case 83:                        // 'attribute'\n      shiftT(83);                   // 'attribute'\n      break;\n    case 94:                        // 'child'\n      shiftT(94);                   // 'child'\n      break;\n    case 97:                        // 'comment'\n      shiftT(97);                   // 'comment'\n      break;\n    case 104:                       // 'copy'\n      shiftT(104);                  // 'copy'\n      break;\n    case 109:                       // 'declare'\n      shiftT(109);                  // 'declare'\n      break;\n    case 111:                       // 'delete'\n      shiftT(111);                  // 'delete'\n      break;\n    case 112:                       // 'descendant'\n      shiftT(112);                  // 'descendant'\n      break;\n    case 113:                       // 'descendant-or-self'\n      shiftT(113);                  // 'descendant-or-self'\n      break;\n    case 120:                       // 'document'\n      shiftT(120);                  // 'document'\n      break;\n    case 121:                       // 'document-node'\n      shiftT(121);                  // 'document-node'\n      break;\n    case 122:                       // 'element'\n      shiftT(122);                  // 'element'\n      break;\n    case 125:                       // 'empty-sequence'\n      shiftT(125);                  // 'empty-sequence'\n      break;\n    case 130:                       // 'every'\n      shiftT(130);                  // 'every'\n      break;\n    case 136:                       // 'first'\n      shiftT(136);                  // 'first'\n      break;\n    case 137:                       // 'following'\n      shiftT(137);                  // 'following'\n      break;\n    case 138:                       // 'following-sibling'\n      shiftT(138);                  // 'following-sibling'\n      break;\n    case 147:                       // 'function'\n      shiftT(147);                  // 'function'\n      break;\n    case 154:                       // 'if'\n      shiftT(154);                  // 'if'\n      break;\n    case 155:                       // 'import'\n      shiftT(155);                  // 'import'\n      break;\n    case 161:                       // 'insert'\n      shiftT(161);                  // 'insert'\n      break;\n    case 167:                       // 'item'\n      shiftT(167);                  // 'item'\n      break;\n    case 173:                       // 'last'\n      shiftT(173);                  // 'last'\n      break;\n    case 185:                       // 'module'\n      shiftT(185);                  // 'module'\n      break;\n    case 187:                       // 'namespace'\n      shiftT(187);                  // 'namespace'\n      break;\n    case 188:                       // 'namespace-node'\n      shiftT(188);                  // 'namespace-node'\n      break;\n    case 194:                       // 'node'\n      shiftT(194);                  // 'node'\n      break;\n    case 206:                       // 'ordered'\n      shiftT(206);                  // 'ordered'\n      break;\n    case 210:                       // 'parent'\n      shiftT(210);                  // 'parent'\n      break;\n    case 216:                       // 'preceding'\n      shiftT(216);                  // 'preceding'\n      break;\n    case 217:                       // 'preceding-sibling'\n      shiftT(217);                  // 'preceding-sibling'\n      break;\n    case 220:                       // 'processing-instruction'\n      shiftT(220);                  // 'processing-instruction'\n      break;\n    case 222:                       // 'rename'\n      shiftT(222);                  // 'rename'\n      break;\n    case 223:                       // 'replace'\n      shiftT(223);                  // 'replace'\n      break;\n    case 230:                       // 'schema-attribute'\n      shiftT(230);                  // 'schema-attribute'\n      break;\n    case 231:                       // 'schema-element'\n      shiftT(231);                  // 'schema-element'\n      break;\n    case 234:                       // 'self'\n      shiftT(234);                  // 'self'\n      break;\n    case 240:                       // 'some'\n      shiftT(240);                  // 'some'\n      break;\n    case 248:                       // 'switch'\n      shiftT(248);                  // 'switch'\n      break;\n    case 249:                       // 'text'\n      shiftT(249);                  // 'text'\n      break;\n    case 256:                       // 'try'\n      shiftT(256);                  // 'try'\n      break;\n    case 259:                       // 'typeswitch'\n      shiftT(259);                  // 'typeswitch'\n      break;\n    case 262:                       // 'unordered'\n      shiftT(262);                  // 'unordered'\n      break;\n    case 266:                       // 'validate'\n      shiftT(266);                  // 'validate'\n      break;\n    case 268:                       // 'variable'\n      shiftT(268);                  // 'variable'\n      break;\n    case 170:                       // 'jsoniq'\n      shiftT(170);                  // 'jsoniq'\n      break;\n    case 73:                        // 'allowing'\n      shiftT(73);                   // 'allowing'\n      break;\n    case 82:                        // 'at'\n      shiftT(82);                   // 'at'\n      break;\n    case 84:                        // 'base-uri'\n      shiftT(84);                   // 'base-uri'\n      break;\n    case 86:                        // 'boundary-space'\n      shiftT(86);                   // 'boundary-space'\n      break;\n    case 87:                        // 'break'\n      shiftT(87);                   // 'break'\n      break;\n    case 92:                        // 'catch'\n      shiftT(92);                   // 'catch'\n      break;\n    case 99:                        // 'construction'\n      shiftT(99);                   // 'construction'\n      break;\n    case 102:                       // 'context'\n      shiftT(102);                  // 'context'\n      break;\n    case 103:                       // 'continue'\n      shiftT(103);                  // 'continue'\n      break;\n    case 105:                       // 'copy-namespaces'\n      shiftT(105);                  // 'copy-namespaces'\n      break;\n    case 107:                       // 'decimal-format'\n      shiftT(107);                  // 'decimal-format'\n      break;\n    case 126:                       // 'encoding'\n      shiftT(126);                  // 'encoding'\n      break;\n    case 133:                       // 'exit'\n      shiftT(133);                  // 'exit'\n      break;\n    case 134:                       // 'external'\n      shiftT(134);                  // 'external'\n      break;\n    case 143:                       // 'ft-option'\n      shiftT(143);                  // 'ft-option'\n      break;\n    case 156:                       // 'in'\n      shiftT(156);                  // 'in'\n      break;\n    case 157:                       // 'index'\n      shiftT(157);                  // 'index'\n      break;\n    case 163:                       // 'integrity'\n      shiftT(163);                  // 'integrity'\n      break;\n    case 174:                       // 'lax'\n      shiftT(174);                  // 'lax'\n      break;\n    case 195:                       // 'nodes'\n      shiftT(195);                  // 'nodes'\n      break;\n    case 203:                       // 'option'\n      shiftT(203);                  // 'option'\n      break;\n    case 207:                       // 'ordering'\n      shiftT(207);                  // 'ordering'\n      break;\n    case 226:                       // 'revalidation'\n      shiftT(226);                  // 'revalidation'\n      break;\n    case 229:                       // 'schema'\n      shiftT(229);                  // 'schema'\n      break;\n    case 232:                       // 'score'\n      shiftT(232);                  // 'score'\n      break;\n    case 239:                       // 'sliding'\n      shiftT(239);                  // 'sliding'\n      break;\n    case 245:                       // 'strict'\n      shiftT(245);                  // 'strict'\n      break;\n    case 257:                       // 'tumbling'\n      shiftT(257);                  // 'tumbling'\n      break;\n    case 258:                       // 'type'\n      shiftT(258);                  // 'type'\n      break;\n    case 263:                       // 'updating'\n      shiftT(263);                  // 'updating'\n      break;\n    case 267:                       // 'value'\n      shiftT(267);                  // 'value'\n      break;\n    case 269:                       // 'version'\n      shiftT(269);                  // 'version'\n      break;\n    case 273:                       // 'while'\n      shiftT(273);                  // 'while'\n      break;\n    case 98:                        // 'constraint'\n      shiftT(98);                   // 'constraint'\n      break;\n    case 179:                       // 'loop'\n      shiftT(179);                  // 'loop'\n      break;\n    case 225:                       // 'returning'\n      shiftT(225);                  // 'returning'\n      break;\n    case 78:                        // 'append'\n      shiftT(78);                   // 'append'\n      break;\n    case 135:                       // 'false'\n      shiftT(135);                  // 'false'\n      break;\n    case 142:                       // 'from'\n      shiftT(142);                  // 'from'\n      break;\n    case 197:                       // 'null'\n      shiftT(197);                  // 'null'\n      break;\n    case 168:                       // 'json'\n      shiftT(168);                  // 'json'\n      break;\n    case 198:                       // 'object'\n      shiftT(198);                  // 'object'\n      break;\n    case 233:                       // 'select'\n      shiftT(233);                  // 'select'\n      break;\n    default:\n      shiftT(255);                  // 'true'\n    }\n  }\n\n  function parse_MainModule()\n  {\n    eventHandler.startNonterminal(\"MainModule\", e0);\n    parse_Prolog();\n    whitespace();\n    parse_Program();\n    eventHandler.endNonterminal(\"MainModule\", e0);\n  }\n\n  function parse_Program()\n  {\n    eventHandler.startNonterminal(\"Program\", e0);\n    parse_StatementsAndOptionalExpr();\n    eventHandler.endNonterminal(\"Program\", e0);\n  }\n\n  function parse_Statements()\n  {\n    eventHandler.startNonterminal(\"Statements\", e0);\n    for (;;)\n    {\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 35:                      // '('\n        lookahead2W(269);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 36:                      // '(#'\n        lookahead2(242);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n        break;\n      case 47:                      // '/'\n        lookahead2W(285);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 48:                      // '//'\n        lookahead2W(259);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 55:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 56:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 60:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 78:                      // 'append'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 133:                     // 'exit'\n        lookahead2W(147);           // S^WS | '#' | '(' | '(:' | 'returning'\n        break;\n      case 139:                     // 'for'\n        lookahead2W(179);           // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n        break;\n      case 161:                     // 'insert'\n        lookahead2W(275);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 177:                     // 'let'\n        lookahead2W(166);           // S^WS | '#' | '$' | '(' | '(:' | 'score'\n        break;\n      case 187:                     // 'namespace'\n        lookahead2W(246);           // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 220:                     // 'processing-instruction'\n        lookahead2W(244);           // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 223:                     // 'replace'\n        lookahead2W(170);           // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n        break;\n      case 266:                     // 'validate'\n        lookahead2W(188);           // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n        break;\n      case 281:                     // '{'\n        lookahead2W(282);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 283:                     // '{|'\n        lookahead2W(273);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 31:                      // '$'\n      case 33:                      // '%'\n        lookahead2W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 83:                      // 'attribute'\n      case 122:                     // 'element'\n        lookahead2W(252);           // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 87:                      // 'break'\n      case 103:                     // 'continue'\n        lookahead2W(145);           // S^WS | '#' | '(' | '(:' | 'loop'\n        break;\n      case 97:                      // 'comment'\n      case 249:                     // 'text'\n        lookahead2W(97);            // S^WS | '#' | '(:' | '{'\n        break;\n      case 111:                     // 'delete'\n      case 222:                     // 'rename'\n        lookahead2W(260);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 41:                      // '+'\n      case 43:                      // '-'\n      case 196:                     // 'not'\n        lookahead2W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 135:                     // 'false'\n      case 197:                     // 'null'\n      case 255:                     // 'true'\n        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' |\n        break;\n      case 104:                     // 'copy'\n      case 130:                     // 'every'\n      case 240:                     // 'some'\n      case 268:                     // 'variable'\n        lookahead2W(143);           // S^WS | '#' | '$' | '(' | '(:'\n        break;\n      case 120:                     // 'document'\n      case 206:                     // 'ordered'\n      case 256:                     // 'try'\n      case 262:                     // 'unordered'\n        lookahead2W(148);           // S^WS | '#' | '(' | '(:' | '{'\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 32:                      // '$$'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' | '//' |\n        break;\n      case 79:                      // 'array'\n      case 121:                     // 'document-node'\n      case 125:                     // 'empty-sequence'\n      case 167:                     // 'item'\n      case 169:                     // 'json-item'\n      case 188:                     // 'namespace-node'\n      case 194:                     // 'node'\n      case 230:                     // 'schema-attribute'\n      case 231:                     // 'schema-element'\n      case 247:                     // 'structured-item'\n        lookahead2W(20);            // S^WS | '#' | '(:'\n        break;\n      case 6:                       // EQName^Token\n      case 71:                      // 'after'\n      case 73:                      // 'allowing'\n      case 74:                      // 'ancestor'\n      case 75:                      // 'ancestor-or-self'\n      case 76:                      // 'and'\n      case 80:                      // 'as'\n      case 81:                      // 'ascending'\n      case 82:                      // 'at'\n      case 84:                      // 'base-uri'\n      case 85:                      // 'before'\n      case 86:                      // 'boundary-space'\n      case 89:                      // 'case'\n      case 90:                      // 'cast'\n      case 91:                      // 'castable'\n      case 92:                      // 'catch'\n      case 94:                      // 'child'\n      case 95:                      // 'collation'\n      case 98:                      // 'constraint'\n      case 99:                      // 'construction'\n      case 102:                     // 'context'\n      case 105:                     // 'copy-namespaces'\n      case 106:                     // 'count'\n      case 107:                     // 'decimal-format'\n      case 109:                     // 'declare'\n      case 110:                     // 'default'\n      case 112:                     // 'descendant'\n      case 113:                     // 'descendant-or-self'\n      case 114:                     // 'descending'\n      case 119:                     // 'div'\n      case 123:                     // 'else'\n      case 124:                     // 'empty'\n      case 126:                     // 'encoding'\n      case 127:                     // 'end'\n      case 129:                     // 'eq'\n      case 132:                     // 'except'\n      case 134:                     // 'external'\n      case 136:                     // 'first'\n      case 137:                     // 'following'\n      case 138:                     // 'following-sibling'\n      case 142:                     // 'from'\n      case 143:                     // 'ft-option'\n      case 147:                     // 'function'\n      case 148:                     // 'ge'\n      case 150:                     // 'group'\n      case 152:                     // 'gt'\n      case 153:                     // 'idiv'\n      case 154:                     // 'if'\n      case 155:                     // 'import'\n      case 156:                     // 'in'\n      case 157:                     // 'index'\n      case 162:                     // 'instance'\n      case 163:                     // 'integrity'\n      case 164:                     // 'intersect'\n      case 165:                     // 'into'\n      case 166:                     // 'is'\n      case 168:                     // 'json'\n      case 170:                     // 'jsoniq'\n      case 173:                     // 'last'\n      case 174:                     // 'lax'\n      case 175:                     // 'le'\n      case 179:                     // 'loop'\n      case 181:                     // 'lt'\n      case 183:                     // 'mod'\n      case 184:                     // 'modify'\n      case 185:                     // 'module'\n      case 189:                     // 'ne'\n      case 195:                     // 'nodes'\n      case 198:                     // 'object'\n      case 202:                     // 'only'\n      case 203:                     // 'option'\n      case 204:                     // 'or'\n      case 205:                     // 'order'\n      case 207:                     // 'ordering'\n      case 210:                     // 'parent'\n      case 216:                     // 'preceding'\n      case 217:                     // 'preceding-sibling'\n      case 224:                     // 'return'\n      case 225:                     // 'returning'\n      case 226:                     // 'revalidation'\n      case 228:                     // 'satisfies'\n      case 229:                     // 'schema'\n      case 232:                     // 'score'\n      case 233:                     // 'select'\n      case 234:                     // 'self'\n      case 239:                     // 'sliding'\n      case 241:                     // 'stable'\n      case 242:                     // 'start'\n      case 245:                     // 'strict'\n      case 248:                     // 'switch'\n      case 253:                     // 'to'\n      case 254:                     // 'treat'\n      case 257:                     // 'tumbling'\n      case 258:                     // 'type'\n      case 259:                     // 'typeswitch'\n      case 260:                     // 'union'\n      case 263:                     // 'updating'\n      case 267:                     // 'value'\n      case 269:                     // 'version'\n      case 272:                     // 'where'\n      case 273:                     // 'while'\n      case 276:                     // 'with'\n        lookahead2W(95);            // S^WS | '#' | '(' | '(:'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 54                  // ';'\n       && lk != 287                 // '}'\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12832               // '$$' EOF\n       && lk != 12847               // '/' EOF\n       && lk != 12935               // 'false' EOF\n       && lk != 12997               // 'null' EOF\n       && lk != 13055               // 'true' EOF\n       && lk != 16140               // 'variable' '$'\n       && lk != 21512               // IntegerLiteral ','\n       && lk != 21513               // DecimalLiteral ','\n       && lk != 21514               // DoubleLiteral ','\n       && lk != 21515               // StringLiteral ','\n       && lk != 21536               // '$$' ','\n       && lk != 21551               // '/' ','\n       && lk != 21639               // 'false' ','\n       && lk != 21701               // 'null' ','\n       && lk != 21759               // 'true' ','\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333              // 'exit' 'returning'\n       && lk != 146952              // IntegerLiteral '}'\n       && lk != 146953              // DecimalLiteral '}'\n       && lk != 146954              // DoubleLiteral '}'\n       && lk != 146955              // StringLiteral '}'\n       && lk != 146976              // '$$' '}'\n       && lk != 146991              // '/' '}'\n       && lk != 147079              // 'false' '}'\n       && lk != 147141              // 'null' '}'\n       && lk != 147199)             // 'true' '}'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(8, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 54                  // ';'\n       && lk != 16140               // 'variable' '$'\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333)             // 'exit' 'returning'\n      {\n        break;\n      }\n      whitespace();\n      parse_Statement();\n    }\n    eventHandler.endNonterminal(\"Statements\", e0);\n  }\n\n  function try_Statements()\n  {\n    for (;;)\n    {\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 35:                      // '('\n        lookahead2W(269);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 36:                      // '(#'\n        lookahead2(242);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n        break;\n      case 47:                      // '/'\n        lookahead2W(285);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 48:                      // '//'\n        lookahead2W(259);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 55:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 56:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 60:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 69:                      // '['\n        lookahead2W(272);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 78:                      // 'append'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 133:                     // 'exit'\n        lookahead2W(147);           // S^WS | '#' | '(' | '(:' | 'returning'\n        break;\n      case 139:                     // 'for'\n        lookahead2W(179);           // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n        break;\n      case 161:                     // 'insert'\n        lookahead2W(275);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 177:                     // 'let'\n        lookahead2W(166);           // S^WS | '#' | '$' | '(' | '(:' | 'score'\n        break;\n      case 187:                     // 'namespace'\n        lookahead2W(246);           // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 220:                     // 'processing-instruction'\n        lookahead2W(244);           // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 223:                     // 'replace'\n        lookahead2W(170);           // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n        break;\n      case 266:                     // 'validate'\n        lookahead2W(188);           // S^WS | '#' | '(' | '(:' | 'lax' | 'strict' | 'type' | '{'\n        break;\n      case 281:                     // '{'\n        lookahead2W(282);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 283:                     // '{|'\n        lookahead2W(273);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 31:                      // '$'\n      case 33:                      // '%'\n        lookahead2W(245);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 83:                      // 'attribute'\n      case 122:                     // 'element'\n        lookahead2W(252);           // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 87:                      // 'break'\n      case 103:                     // 'continue'\n        lookahead2W(145);           // S^WS | '#' | '(' | '(:' | 'loop'\n        break;\n      case 97:                      // 'comment'\n      case 249:                     // 'text'\n        lookahead2W(97);            // S^WS | '#' | '(:' | '{'\n        break;\n      case 111:                     // 'delete'\n      case 222:                     // 'rename'\n        lookahead2W(260);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 41:                      // '+'\n      case 43:                      // '-'\n      case 196:                     // 'not'\n        lookahead2W(265);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      case 135:                     // 'false'\n      case 197:                     // 'null'\n      case 255:                     // 'true'\n        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' |\n        break;\n      case 104:                     // 'copy'\n      case 130:                     // 'every'\n      case 240:                     // 'some'\n      case 268:                     // 'variable'\n        lookahead2W(143);           // S^WS | '#' | '$' | '(' | '(:'\n        break;\n      case 120:                     // 'document'\n      case 206:                     // 'ordered'\n      case 256:                     // 'try'\n      case 262:                     // 'unordered'\n        lookahead2W(148);           // S^WS | '#' | '(' | '(:' | '{'\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 32:                      // '$$'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '.' | '/' | '//' |\n        break;\n      case 79:                      // 'array'\n      case 121:                     // 'document-node'\n      case 125:                     // 'empty-sequence'\n      case 167:                     // 'item'\n      case 169:                     // 'json-item'\n      case 188:                     // 'namespace-node'\n      case 194:                     // 'node'\n      case 230:                     // 'schema-attribute'\n      case 231:                     // 'schema-element'\n      case 247:                     // 'structured-item'\n        lookahead2W(20);            // S^WS | '#' | '(:'\n        break;\n      case 6:                       // EQName^Token\n      case 71:                      // 'after'\n      case 73:                      // 'allowing'\n      case 74:                      // 'ancestor'\n      case 75:                      // 'ancestor-or-self'\n      case 76:                      // 'and'\n      case 80:                      // 'as'\n      case 81:                      // 'ascending'\n      case 82:                      // 'at'\n      case 84:                      // 'base-uri'\n      case 85:                      // 'before'\n      case 86:                      // 'boundary-space'\n      case 89:                      // 'case'\n      case 90:                      // 'cast'\n      case 91:                      // 'castable'\n      case 92:                      // 'catch'\n      case 94:                      // 'child'\n      case 95:                      // 'collation'\n      case 98:                      // 'constraint'\n      case 99:                      // 'construction'\n      case 102:                     // 'context'\n      case 105:                     // 'copy-namespaces'\n      case 106:                     // 'count'\n      case 107:                     // 'decimal-format'\n      case 109:                     // 'declare'\n      case 110:                     // 'default'\n      case 112:                     // 'descendant'\n      case 113:                     // 'descendant-or-self'\n      case 114:                     // 'descending'\n      case 119:                     // 'div'\n      case 123:                     // 'else'\n      case 124:                     // 'empty'\n      case 126:                     // 'encoding'\n      case 127:                     // 'end'\n      case 129:                     // 'eq'\n      case 132:                     // 'except'\n      case 134:                     // 'external'\n      case 136:                     // 'first'\n      case 137:                     // 'following'\n      case 138:                     // 'following-sibling'\n      case 142:                     // 'from'\n      case 143:                     // 'ft-option'\n      case 147:                     // 'function'\n      case 148:                     // 'ge'\n      case 150:                     // 'group'\n      case 152:                     // 'gt'\n      case 153:                     // 'idiv'\n      case 154:                     // 'if'\n      case 155:                     // 'import'\n      case 156:                     // 'in'\n      case 157:                     // 'index'\n      case 162:                     // 'instance'\n      case 163:                     // 'integrity'\n      case 164:                     // 'intersect'\n      case 165:                     // 'into'\n      case 166:                     // 'is'\n      case 168:                     // 'json'\n      case 170:                     // 'jsoniq'\n      case 173:                     // 'last'\n      case 174:                     // 'lax'\n      case 175:                     // 'le'\n      case 179:                     // 'loop'\n      case 181:                     // 'lt'\n      case 183:                     // 'mod'\n      case 184:                     // 'modify'\n      case 185:                     // 'module'\n      case 189:                     // 'ne'\n      case 195:                     // 'nodes'\n      case 198:                     // 'object'\n      case 202:                     // 'only'\n      case 203:                     // 'option'\n      case 204:                     // 'or'\n      case 205:                     // 'order'\n      case 207:                     // 'ordering'\n      case 210:                     // 'parent'\n      case 216:                     // 'preceding'\n      case 217:                     // 'preceding-sibling'\n      case 224:                     // 'return'\n      case 225:                     // 'returning'\n      case 226:                     // 'revalidation'\n      case 228:                     // 'satisfies'\n      case 229:                     // 'schema'\n      case 232:                     // 'score'\n      case 233:                     // 'select'\n      case 234:                     // 'self'\n      case 239:                     // 'sliding'\n      case 241:                     // 'stable'\n      case 242:                     // 'start'\n      case 245:                     // 'strict'\n      case 248:                     // 'switch'\n      case 253:                     // 'to'\n      case 254:                     // 'treat'\n      case 257:                     // 'tumbling'\n      case 258:                     // 'type'\n      case 259:                     // 'typeswitch'\n      case 260:                     // 'union'\n      case 263:                     // 'updating'\n      case 267:                     // 'value'\n      case 269:                     // 'version'\n      case 272:                     // 'where'\n      case 273:                     // 'while'\n      case 276:                     // 'with'\n        lookahead2W(95);            // S^WS | '#' | '(' | '(:'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 54                  // ';'\n       && lk != 287                 // '}'\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12832               // '$$' EOF\n       && lk != 12847               // '/' EOF\n       && lk != 12935               // 'false' EOF\n       && lk != 12997               // 'null' EOF\n       && lk != 13055               // 'true' EOF\n       && lk != 16140               // 'variable' '$'\n       && lk != 21512               // IntegerLiteral ','\n       && lk != 21513               // DecimalLiteral ','\n       && lk != 21514               // DoubleLiteral ','\n       && lk != 21515               // StringLiteral ','\n       && lk != 21536               // '$$' ','\n       && lk != 21551               // '/' ','\n       && lk != 21639               // 'false' ','\n       && lk != 21701               // 'null' ','\n       && lk != 21759               // 'true' ','\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333              // 'exit' 'returning'\n       && lk != 146952              // IntegerLiteral '}'\n       && lk != 146953              // DecimalLiteral '}'\n       && lk != 146954              // DoubleLiteral '}'\n       && lk != 146955              // StringLiteral '}'\n       && lk != 146976              // '$$' '}'\n       && lk != 146991              // '/' '}'\n       && lk != 147079              // 'false' '}'\n       && lk != 147141              // 'null' '}'\n       && lk != 147199)             // 'true' '}'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            memoize(8, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(8, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 54                  // ';'\n       && lk != 16140               // 'variable' '$'\n       && lk != 27656               // IntegerLiteral ';'\n       && lk != 27657               // DecimalLiteral ';'\n       && lk != 27658               // DoubleLiteral ';'\n       && lk != 27659               // StringLiteral ';'\n       && lk != 27680               // '$$' ';'\n       && lk != 27695               // '/' ';'\n       && lk != 27783               // 'false' ';'\n       && lk != 27845               // 'null' ';'\n       && lk != 27903               // 'true' ';'\n       && lk != 91735               // 'break' 'loop'\n       && lk != 91751               // 'continue' 'loop'\n       && lk != 115333)             // 'exit' 'returning'\n      {\n        break;\n      }\n      try_Statement();\n    }\n  }\n\n  function parse_StatementsAndExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndExpr\", e0);\n    parse_Statements();\n    whitespace();\n    parse_Expr();\n    eventHandler.endNonterminal(\"StatementsAndExpr\", e0);\n  }\n\n  function try_StatementsAndExpr()\n  {\n    try_Statements();\n    try_Expr();\n  }\n\n  function parse_StatementsAndOptionalExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndOptionalExpr\", e0);\n    parse_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    eventHandler.endNonterminal(\"StatementsAndOptionalExpr\", e0);\n  }\n\n  function try_StatementsAndOptionalExpr()\n  {\n    try_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 287)                  // '}'\n    {\n      try_Expr();\n    }\n  }\n\n  function parse_Statement()\n  {\n    eventHandler.startNonterminal(\"Statement\", e0);\n    switch (l1)\n    {\n    case 133:                       // 'exit'\n      lookahead2W(147);             // S^WS | '#' | '(' | '(:' | 'returning'\n      break;\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 268:                       // 'variable'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 31:                        // '$'\n    case 33:                        // '%'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 87:                        // 'break'\n    case 103:                       // 'continue'\n      lookahead2W(145);             // S^WS | '#' | '(' | '(:' | 'loop'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 273:                       // 'while'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 6                     // EQName^Token\n     && lk != 8                     // IntegerLiteral\n     && lk != 9                     // DecimalLiteral\n     && lk != 10                    // DoubleLiteral\n     && lk != 11                    // StringLiteral\n     && lk != 32                    // '$$'\n     && lk != 35                    // '('\n     && lk != 36                    // '(#'\n     && lk != 41                    // '+'\n     && lk != 43                    // '-'\n     && lk != 47                    // '/'\n     && lk != 48                    // '//'\n     && lk != 54                    // ';'\n     && lk != 55                    // '<'\n     && lk != 56                    // '<!--'\n     && lk != 60                    // '<?'\n     && lk != 69                    // '['\n     && lk != 71                    // 'after'\n     && lk != 73                    // 'allowing'\n     && lk != 74                    // 'ancestor'\n     && lk != 75                    // 'ancestor-or-self'\n     && lk != 76                    // 'and'\n     && lk != 78                    // 'append'\n     && lk != 79                    // 'array'\n     && lk != 80                    // 'as'\n     && lk != 81                    // 'ascending'\n     && lk != 82                    // 'at'\n     && lk != 83                    // 'attribute'\n     && lk != 84                    // 'base-uri'\n     && lk != 85                    // 'before'\n     && lk != 86                    // 'boundary-space'\n     && lk != 89                    // 'case'\n     && lk != 90                    // 'cast'\n     && lk != 91                    // 'castable'\n     && lk != 92                    // 'catch'\n     && lk != 94                    // 'child'\n     && lk != 95                    // 'collation'\n     && lk != 97                    // 'comment'\n     && lk != 98                    // 'constraint'\n     && lk != 99                    // 'construction'\n     && lk != 102                   // 'context'\n     && lk != 104                   // 'copy'\n     && lk != 105                   // 'copy-namespaces'\n     && lk != 106                   // 'count'\n     && lk != 107                   // 'decimal-format'\n     && lk != 109                   // 'declare'\n     && lk != 110                   // 'default'\n     && lk != 111                   // 'delete'\n     && lk != 112                   // 'descendant'\n     && lk != 113                   // 'descendant-or-self'\n     && lk != 114                   // 'descending'\n     && lk != 119                   // 'div'\n     && lk != 120                   // 'document'\n     && lk != 121                   // 'document-node'\n     && lk != 122                   // 'element'\n     && lk != 123                   // 'else'\n     && lk != 124                   // 'empty'\n     && lk != 125                   // 'empty-sequence'\n     && lk != 126                   // 'encoding'\n     && lk != 127                   // 'end'\n     && lk != 129                   // 'eq'\n     && lk != 130                   // 'every'\n     && lk != 132                   // 'except'\n     && lk != 134                   // 'external'\n     && lk != 135                   // 'false'\n     && lk != 136                   // 'first'\n     && lk != 137                   // 'following'\n     && lk != 138                   // 'following-sibling'\n     && lk != 142                   // 'from'\n     && lk != 143                   // 'ft-option'\n     && lk != 147                   // 'function'\n     && lk != 148                   // 'ge'\n     && lk != 150                   // 'group'\n     && lk != 152                   // 'gt'\n     && lk != 153                   // 'idiv'\n     && lk != 155                   // 'import'\n     && lk != 156                   // 'in'\n     && lk != 157                   // 'index'\n     && lk != 161                   // 'insert'\n     && lk != 162                   // 'instance'\n     && lk != 163                   // 'integrity'\n     && lk != 164                   // 'intersect'\n     && lk != 165                   // 'into'\n     && lk != 166                   // 'is'\n     && lk != 167                   // 'item'\n     && lk != 168                   // 'json'\n     && lk != 169                   // 'json-item'\n     && lk != 170                   // 'jsoniq'\n     && lk != 173                   // 'last'\n     && lk != 174                   // 'lax'\n     && lk != 175                   // 'le'\n     && lk != 179                   // 'loop'\n     && lk != 181                   // 'lt'\n     && lk != 183                   // 'mod'\n     && lk != 184                   // 'modify'\n     && lk != 185                   // 'module'\n     && lk != 187                   // 'namespace'\n     && lk != 188                   // 'namespace-node'\n     && lk != 189                   // 'ne'\n     && lk != 194                   // 'node'\n     && lk != 195                   // 'nodes'\n     && lk != 196                   // 'not'\n     && lk != 197                   // 'null'\n     && lk != 198                   // 'object'\n     && lk != 202                   // 'only'\n     && lk != 203                   // 'option'\n     && lk != 204                   // 'or'\n     && lk != 205                   // 'order'\n     && lk != 206                   // 'ordered'\n     && lk != 207                   // 'ordering'\n     && lk != 210                   // 'parent'\n     && lk != 216                   // 'preceding'\n     && lk != 217                   // 'preceding-sibling'\n     && lk != 220                   // 'processing-instruction'\n     && lk != 222                   // 'rename'\n     && lk != 223                   // 'replace'\n     && lk != 224                   // 'return'\n     && lk != 225                   // 'returning'\n     && lk != 226                   // 'revalidation'\n     && lk != 228                   // 'satisfies'\n     && lk != 229                   // 'schema'\n     && lk != 230                   // 'schema-attribute'\n     && lk != 231                   // 'schema-element'\n     && lk != 232                   // 'score'\n     && lk != 233                   // 'select'\n     && lk != 234                   // 'self'\n     && lk != 239                   // 'sliding'\n     && lk != 240                   // 'some'\n     && lk != 241                   // 'stable'\n     && lk != 242                   // 'start'\n     && lk != 245                   // 'strict'\n     && lk != 247                   // 'structured-item'\n     && lk != 249                   // 'text'\n     && lk != 253                   // 'to'\n     && lk != 254                   // 'treat'\n     && lk != 255                   // 'true'\n     && lk != 257                   // 'tumbling'\n     && lk != 258                   // 'type'\n     && lk != 260                   // 'union'\n     && lk != 262                   // 'unordered'\n     && lk != 263                   // 'updating'\n     && lk != 266                   // 'validate'\n     && lk != 267                   // 'value'\n     && lk != 269                   // 'version'\n     && lk != 272                   // 'where'\n     && lk != 276                   // 'with'\n     && lk != 283                   // '{|'\n     && lk != 10009                 // '{' NCName^Token\n     && lk != 14935                 // 'break' '#'\n     && lk != 14951                 // 'continue' '#'\n     && lk != 14981                 // 'exit' '#'\n     && lk != 14987                 // 'for' '#'\n     && lk != 15002                 // 'if' '#'\n     && lk != 15025                 // 'let' '#'\n     && lk != 15096                 // 'switch' '#'\n     && lk != 15104                 // 'try' '#'\n     && lk != 15107                 // 'typeswitch' '#'\n     && lk != 15116                 // 'variable' '#'\n     && lk != 15121                 // 'while' '#'\n     && lk != 16011                 // 'for' '$'\n     && lk != 16049                 // 'let' '$'\n     && lk != 16140                 // 'variable' '$'\n     && lk != 18007                 // 'break' '('\n     && lk != 18023                 // 'continue' '('\n     && lk != 18053                 // 'exit' '('\n     && lk != 18059                 // 'for' '('\n     && lk != 18074                 // 'if' '('\n     && lk != 18097                 // 'let' '('\n     && lk != 18168                 // 'switch' '('\n     && lk != 18176                 // 'try' '('\n     && lk != 18179                 // 'typeswitch' '('\n     && lk != 18188                 // 'variable' '('\n     && lk != 91735                 // 'break' 'loop'\n     && lk != 91751                 // 'continue' 'loop'\n     && lk != 115333                // 'exit' 'returning'\n     && lk != 118961                // 'let' 'score'\n     && lk != 122507                // 'for' 'sliding'\n     && lk != 131723                // 'for' 'tumbling'\n     && lk != 144128                // 'try' '{'\n     && lk != 147225)               // '{' '}'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            lk = -2;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              lk = -3;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                lk = -12;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n              }\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(9, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      parse_AssignStatement();\n      break;\n    case -3:\n      parse_BlockStatement();\n      break;\n    case 91735:                     // 'break' 'loop'\n      parse_BreakStatement();\n      break;\n    case 91751:                     // 'continue' 'loop'\n      parse_ContinueStatement();\n      break;\n    case 115333:                    // 'exit' 'returning'\n      parse_ExitStatement();\n      break;\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      parse_FLWORStatement();\n      break;\n    case 18074:                     // 'if' '('\n      parse_IfStatement();\n      break;\n    case 18168:                     // 'switch' '('\n      parse_SwitchStatement();\n      break;\n    case 144128:                    // 'try' '{'\n      parse_TryCatchStatement();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      parse_TypeswitchStatement();\n      break;\n    case -12:\n    case 16140:                     // 'variable' '$'\n      parse_VarDeclStatement();\n      break;\n    case -13:\n      parse_WhileStatement();\n      break;\n    case 54:                        // ';'\n      parse_VoidStatement();\n      break;\n    default:\n      parse_ApplyStatement();\n    }\n    eventHandler.endNonterminal(\"Statement\", e0);\n  }\n\n  function try_Statement()\n  {\n    switch (l1)\n    {\n    case 133:                       // 'exit'\n      lookahead2W(147);             // S^WS | '#' | '(' | '(:' | 'returning'\n      break;\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 268:                       // 'variable'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 31:                        // '$'\n    case 33:                        // '%'\n      lookahead2W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 87:                        // 'break'\n    case 103:                       // 'continue'\n      lookahead2W(145);             // S^WS | '#' | '(' | '(:' | 'loop'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 273:                       // 'while'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 6                     // EQName^Token\n     && lk != 8                     // IntegerLiteral\n     && lk != 9                     // DecimalLiteral\n     && lk != 10                    // DoubleLiteral\n     && lk != 11                    // StringLiteral\n     && lk != 32                    // '$$'\n     && lk != 35                    // '('\n     && lk != 36                    // '(#'\n     && lk != 41                    // '+'\n     && lk != 43                    // '-'\n     && lk != 47                    // '/'\n     && lk != 48                    // '//'\n     && lk != 54                    // ';'\n     && lk != 55                    // '<'\n     && lk != 56                    // '<!--'\n     && lk != 60                    // '<?'\n     && lk != 69                    // '['\n     && lk != 71                    // 'after'\n     && lk != 73                    // 'allowing'\n     && lk != 74                    // 'ancestor'\n     && lk != 75                    // 'ancestor-or-self'\n     && lk != 76                    // 'and'\n     && lk != 78                    // 'append'\n     && lk != 79                    // 'array'\n     && lk != 80                    // 'as'\n     && lk != 81                    // 'ascending'\n     && lk != 82                    // 'at'\n     && lk != 83                    // 'attribute'\n     && lk != 84                    // 'base-uri'\n     && lk != 85                    // 'before'\n     && lk != 86                    // 'boundary-space'\n     && lk != 89                    // 'case'\n     && lk != 90                    // 'cast'\n     && lk != 91                    // 'castable'\n     && lk != 92                    // 'catch'\n     && lk != 94                    // 'child'\n     && lk != 95                    // 'collation'\n     && lk != 97                    // 'comment'\n     && lk != 98                    // 'constraint'\n     && lk != 99                    // 'construction'\n     && lk != 102                   // 'context'\n     && lk != 104                   // 'copy'\n     && lk != 105                   // 'copy-namespaces'\n     && lk != 106                   // 'count'\n     && lk != 107                   // 'decimal-format'\n     && lk != 109                   // 'declare'\n     && lk != 110                   // 'default'\n     && lk != 111                   // 'delete'\n     && lk != 112                   // 'descendant'\n     && lk != 113                   // 'descendant-or-self'\n     && lk != 114                   // 'descending'\n     && lk != 119                   // 'div'\n     && lk != 120                   // 'document'\n     && lk != 121                   // 'document-node'\n     && lk != 122                   // 'element'\n     && lk != 123                   // 'else'\n     && lk != 124                   // 'empty'\n     && lk != 125                   // 'empty-sequence'\n     && lk != 126                   // 'encoding'\n     && lk != 127                   // 'end'\n     && lk != 129                   // 'eq'\n     && lk != 130                   // 'every'\n     && lk != 132                   // 'except'\n     && lk != 134                   // 'external'\n     && lk != 135                   // 'false'\n     && lk != 136                   // 'first'\n     && lk != 137                   // 'following'\n     && lk != 138                   // 'following-sibling'\n     && lk != 142                   // 'from'\n     && lk != 143                   // 'ft-option'\n     && lk != 147                   // 'function'\n     && lk != 148                   // 'ge'\n     && lk != 150                   // 'group'\n     && lk != 152                   // 'gt'\n     && lk != 153                   // 'idiv'\n     && lk != 155                   // 'import'\n     && lk != 156                   // 'in'\n     && lk != 157                   // 'index'\n     && lk != 161                   // 'insert'\n     && lk != 162                   // 'instance'\n     && lk != 163                   // 'integrity'\n     && lk != 164                   // 'intersect'\n     && lk != 165                   // 'into'\n     && lk != 166                   // 'is'\n     && lk != 167                   // 'item'\n     && lk != 168                   // 'json'\n     && lk != 169                   // 'json-item'\n     && lk != 170                   // 'jsoniq'\n     && lk != 173                   // 'last'\n     && lk != 174                   // 'lax'\n     && lk != 175                   // 'le'\n     && lk != 179                   // 'loop'\n     && lk != 181                   // 'lt'\n     && lk != 183                   // 'mod'\n     && lk != 184                   // 'modify'\n     && lk != 185                   // 'module'\n     && lk != 187                   // 'namespace'\n     && lk != 188                   // 'namespace-node'\n     && lk != 189                   // 'ne'\n     && lk != 194                   // 'node'\n     && lk != 195                   // 'nodes'\n     && lk != 196                   // 'not'\n     && lk != 197                   // 'null'\n     && lk != 198                   // 'object'\n     && lk != 202                   // 'only'\n     && lk != 203                   // 'option'\n     && lk != 204                   // 'or'\n     && lk != 205                   // 'order'\n     && lk != 206                   // 'ordered'\n     && lk != 207                   // 'ordering'\n     && lk != 210                   // 'parent'\n     && lk != 216                   // 'preceding'\n     && lk != 217                   // 'preceding-sibling'\n     && lk != 220                   // 'processing-instruction'\n     && lk != 222                   // 'rename'\n     && lk != 223                   // 'replace'\n     && lk != 224                   // 'return'\n     && lk != 225                   // 'returning'\n     && lk != 226                   // 'revalidation'\n     && lk != 228                   // 'satisfies'\n     && lk != 229                   // 'schema'\n     && lk != 230                   // 'schema-attribute'\n     && lk != 231                   // 'schema-element'\n     && lk != 232                   // 'score'\n     && lk != 233                   // 'select'\n     && lk != 234                   // 'self'\n     && lk != 239                   // 'sliding'\n     && lk != 240                   // 'some'\n     && lk != 241                   // 'stable'\n     && lk != 242                   // 'start'\n     && lk != 245                   // 'strict'\n     && lk != 247                   // 'structured-item'\n     && lk != 249                   // 'text'\n     && lk != 253                   // 'to'\n     && lk != 254                   // 'treat'\n     && lk != 255                   // 'true'\n     && lk != 257                   // 'tumbling'\n     && lk != 258                   // 'type'\n     && lk != 260                   // 'union'\n     && lk != 262                   // 'unordered'\n     && lk != 263                   // 'updating'\n     && lk != 266                   // 'validate'\n     && lk != 267                   // 'value'\n     && lk != 269                   // 'version'\n     && lk != 272                   // 'where'\n     && lk != 276                   // 'with'\n     && lk != 283                   // '{|'\n     && lk != 10009                 // '{' NCName^Token\n     && lk != 14935                 // 'break' '#'\n     && lk != 14951                 // 'continue' '#'\n     && lk != 14981                 // 'exit' '#'\n     && lk != 14987                 // 'for' '#'\n     && lk != 15002                 // 'if' '#'\n     && lk != 15025                 // 'let' '#'\n     && lk != 15096                 // 'switch' '#'\n     && lk != 15104                 // 'try' '#'\n     && lk != 15107                 // 'typeswitch' '#'\n     && lk != 15116                 // 'variable' '#'\n     && lk != 15121                 // 'while' '#'\n     && lk != 16011                 // 'for' '$'\n     && lk != 16049                 // 'let' '$'\n     && lk != 16140                 // 'variable' '$'\n     && lk != 18007                 // 'break' '('\n     && lk != 18023                 // 'continue' '('\n     && lk != 18053                 // 'exit' '('\n     && lk != 18059                 // 'for' '('\n     && lk != 18074                 // 'if' '('\n     && lk != 18097                 // 'let' '('\n     && lk != 18168                 // 'switch' '('\n     && lk != 18176                 // 'try' '('\n     && lk != 18179                 // 'typeswitch' '('\n     && lk != 18188                 // 'variable' '('\n     && lk != 91735                 // 'break' 'loop'\n     && lk != 91751                 // 'continue' 'loop'\n     && lk != 115333                // 'exit' 'returning'\n     && lk != 118961                // 'let' 'score'\n     && lk != 122507                // 'for' 'sliding'\n     && lk != 131723                // 'for' 'tumbling'\n     && lk != 144128                // 'try' '{'\n     && lk != 147225)               // '{' '}'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          memoize(9, e0A, -1);\n          lk = -15;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            memoize(9, e0A, -2);\n            lk = -15;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              memoize(9, e0A, -3);\n              lk = -15;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                memoize(9, e0A, -12);\n                lk = -15;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                memoize(9, e0A, -13);\n              }\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      try_AssignStatement();\n      break;\n    case -3:\n      try_BlockStatement();\n      break;\n    case 91735:                     // 'break' 'loop'\n      try_BreakStatement();\n      break;\n    case 91751:                     // 'continue' 'loop'\n      try_ContinueStatement();\n      break;\n    case 115333:                    // 'exit' 'returning'\n      try_ExitStatement();\n      break;\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      try_FLWORStatement();\n      break;\n    case 18074:                     // 'if' '('\n      try_IfStatement();\n      break;\n    case 18168:                     // 'switch' '('\n      try_SwitchStatement();\n      break;\n    case 144128:                    // 'try' '{'\n      try_TryCatchStatement();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      try_TypeswitchStatement();\n      break;\n    case -12:\n    case 16140:                     // 'variable' '$'\n      try_VarDeclStatement();\n      break;\n    case -13:\n      try_WhileStatement();\n      break;\n    case 54:                        // ';'\n      try_VoidStatement();\n      break;\n    case -15:\n      break;\n    default:\n      try_ApplyStatement();\n    }\n  }\n\n  function parse_ApplyStatement()\n  {\n    eventHandler.startNonterminal(\"ApplyStatement\", e0);\n    parse_ExprSimple();\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"ApplyStatement\", e0);\n  }\n\n  function try_ApplyStatement()\n  {\n    try_ExprSimple();\n    shiftT(54);                     // ';'\n  }\n\n  function parse_AssignStatement()\n  {\n    eventHandler.startNonterminal(\"AssignStatement\", e0);\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shift(53);                      // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"AssignStatement\", e0);\n  }\n\n  function try_AssignStatement()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(28);                // S^WS | '(:' | ':='\n    shiftT(53);                     // ':='\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(54);                     // ';'\n  }\n\n  function parse_BlockStatement()\n  {\n    eventHandler.startNonterminal(\"BlockStatement\", e0);\n    shift(281);                     // '{'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statements();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"BlockStatement\", e0);\n  }\n\n  function try_BlockStatement()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statements();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_BreakStatement()\n  {\n    eventHandler.startNonterminal(\"BreakStatement\", e0);\n    shift(87);                      // 'break'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shift(179);                     // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"BreakStatement\", e0);\n  }\n\n  function try_BreakStatement()\n  {\n    shiftT(87);                     // 'break'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shiftT(179);                    // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shiftT(54);                     // ';'\n  }\n\n  function parse_ContinueStatement()\n  {\n    eventHandler.startNonterminal(\"ContinueStatement\", e0);\n    shift(103);                     // 'continue'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shift(179);                     // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"ContinueStatement\", e0);\n  }\n\n  function try_ContinueStatement()\n  {\n    shiftT(103);                    // 'continue'\n    lookahead1W(62);                // S^WS | '(:' | 'loop'\n    shiftT(179);                    // 'loop'\n    lookahead1W(29);                // S^WS | '(:' | ';'\n    shiftT(54);                     // ';'\n  }\n\n  function parse_ExitStatement()\n  {\n    eventHandler.startNonterminal(\"ExitStatement\", e0);\n    shift(133);                     // 'exit'\n    lookahead1W(74);                // S^WS | '(:' | 'returning'\n    shift(225);                     // 'returning'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"ExitStatement\", e0);\n  }\n\n  function try_ExitStatement()\n  {\n    shiftT(133);                    // 'exit'\n    lookahead1W(74);                // S^WS | '(:' | 'returning'\n    shiftT(225);                    // 'returning'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(54);                     // ';'\n  }\n\n  function parse_FLWORStatement()\n  {\n    eventHandler.startNonterminal(\"FLWORStatement\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnStatement();\n    eventHandler.endNonterminal(\"FLWORStatement\", e0);\n  }\n\n  function try_FLWORStatement()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(195);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 224)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnStatement();\n  }\n\n  function parse_ReturnStatement()\n  {\n    eventHandler.startNonterminal(\"ReturnStatement\", e0);\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"ReturnStatement\", e0);\n  }\n\n  function try_ReturnStatement()\n  {\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_IfStatement()\n  {\n    eventHandler.startNonterminal(\"IfStatement\", e0);\n    shift(154);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shift(250);                     // 'then'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    lookahead1W(51);                // S^WS | '(:' | 'else'\n    shift(123);                     // 'else'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"IfStatement\", e0);\n  }\n\n  function try_IfStatement()\n  {\n    shiftT(154);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    lookahead1W(80);                // S^WS | '(:' | 'then'\n    shiftT(250);                    // 'then'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n    lookahead1W(51);                // S^WS | '(:' | 'else'\n    shiftT(123);                    // 'else'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_SwitchStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchStatement\", e0);\n    shift(248);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchStatement\", e0);\n  }\n\n  function try_SwitchStatement()\n  {\n    shiftT(248);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_SwitchCaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_SwitchCaseStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseStatement\", e0);\n    for (;;)\n    {\n      shift(89);                    // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchCaseStatement\", e0);\n  }\n\n  function try_SwitchCaseStatement()\n  {\n    for (;;)\n    {\n      shiftT(89);                   // 'case'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_SwitchCaseOperand();\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_TryCatchStatement()\n  {\n    eventHandler.startNonterminal(\"TryCatchStatement\", e0);\n    shift(256);                     // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      shift(92);                    // 'catch'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_CatchErrorList();\n      whitespace();\n      parse_BlockStatement();\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 92:                      // 'catch'\n        lookahead2W(255);           // Wildcard | EQName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 2652                // 'catch' Wildcard\n       && lk != 3164                // 'catch' EQName^Token\n       && lk != 36444               // 'catch' 'after'\n       && lk != 37468               // 'catch' 'allowing'\n       && lk != 37980               // 'catch' 'ancestor'\n       && lk != 38492               // 'catch' 'ancestor-or-self'\n       && lk != 39004               // 'catch' 'and'\n       && lk != 40028               // 'catch' 'append'\n       && lk != 40540               // 'catch' 'array'\n       && lk != 41052               // 'catch' 'as'\n       && lk != 41564               // 'catch' 'ascending'\n       && lk != 42076               // 'catch' 'at'\n       && lk != 42588               // 'catch' 'attribute'\n       && lk != 43100               // 'catch' 'base-uri'\n       && lk != 43612               // 'catch' 'before'\n       && lk != 44124               // 'catch' 'boundary-space'\n       && lk != 44636               // 'catch' 'break'\n       && lk != 45660               // 'catch' 'case'\n       && lk != 46172               // 'catch' 'cast'\n       && lk != 46684               // 'catch' 'castable'\n       && lk != 47196               // 'catch' 'catch'\n       && lk != 48220               // 'catch' 'child'\n       && lk != 48732               // 'catch' 'collation'\n       && lk != 49756               // 'catch' 'comment'\n       && lk != 50268               // 'catch' 'constraint'\n       && lk != 50780               // 'catch' 'construction'\n       && lk != 52316               // 'catch' 'context'\n       && lk != 52828               // 'catch' 'continue'\n       && lk != 53340               // 'catch' 'copy'\n       && lk != 53852               // 'catch' 'copy-namespaces'\n       && lk != 54364               // 'catch' 'count'\n       && lk != 54876               // 'catch' 'decimal-format'\n       && lk != 55900               // 'catch' 'declare'\n       && lk != 56412               // 'catch' 'default'\n       && lk != 56924               // 'catch' 'delete'\n       && lk != 57436               // 'catch' 'descendant'\n       && lk != 57948               // 'catch' 'descendant-or-self'\n       && lk != 58460               // 'catch' 'descending'\n       && lk != 61020               // 'catch' 'div'\n       && lk != 61532               // 'catch' 'document'\n       && lk != 62044               // 'catch' 'document-node'\n       && lk != 62556               // 'catch' 'element'\n       && lk != 63068               // 'catch' 'else'\n       && lk != 63580               // 'catch' 'empty'\n       && lk != 64092               // 'catch' 'empty-sequence'\n       && lk != 64604               // 'catch' 'encoding'\n       && lk != 65116               // 'catch' 'end'\n       && lk != 66140               // 'catch' 'eq'\n       && lk != 66652               // 'catch' 'every'\n       && lk != 67676               // 'catch' 'except'\n       && lk != 68188               // 'catch' 'exit'\n       && lk != 68700               // 'catch' 'external'\n       && lk != 69212               // 'catch' 'false'\n       && lk != 69724               // 'catch' 'first'\n       && lk != 70236               // 'catch' 'following'\n       && lk != 70748               // 'catch' 'following-sibling'\n       && lk != 71260               // 'catch' 'for'\n       && lk != 72796               // 'catch' 'from'\n       && lk != 73308               // 'catch' 'ft-option'\n       && lk != 75356               // 'catch' 'function'\n       && lk != 75868               // 'catch' 'ge'\n       && lk != 76892               // 'catch' 'group'\n       && lk != 77916               // 'catch' 'gt'\n       && lk != 78428               // 'catch' 'idiv'\n       && lk != 78940               // 'catch' 'if'\n       && lk != 79452               // 'catch' 'import'\n       && lk != 79964               // 'catch' 'in'\n       && lk != 80476               // 'catch' 'index'\n       && lk != 82524               // 'catch' 'insert'\n       && lk != 83036               // 'catch' 'instance'\n       && lk != 83548               // 'catch' 'integrity'\n       && lk != 84060               // 'catch' 'intersect'\n       && lk != 84572               // 'catch' 'into'\n       && lk != 85084               // 'catch' 'is'\n       && lk != 85596               // 'catch' 'item'\n       && lk != 86108               // 'catch' 'json'\n       && lk != 86620               // 'catch' 'json-item'\n       && lk != 87132               // 'catch' 'jsoniq'\n       && lk != 88668               // 'catch' 'last'\n       && lk != 89180               // 'catch' 'lax'\n       && lk != 89692               // 'catch' 'le'\n       && lk != 90716               // 'catch' 'let'\n       && lk != 91740               // 'catch' 'loop'\n       && lk != 92764               // 'catch' 'lt'\n       && lk != 93788               // 'catch' 'mod'\n       && lk != 94300               // 'catch' 'modify'\n       && lk != 94812               // 'catch' 'module'\n       && lk != 95836               // 'catch' 'namespace'\n       && lk != 96348               // 'catch' 'namespace-node'\n       && lk != 96860               // 'catch' 'ne'\n       && lk != 99420               // 'catch' 'node'\n       && lk != 99932               // 'catch' 'nodes'\n       && lk != 100956              // 'catch' 'null'\n       && lk != 101468              // 'catch' 'object'\n       && lk != 103516              // 'catch' 'only'\n       && lk != 104028              // 'catch' 'option'\n       && lk != 104540              // 'catch' 'or'\n       && lk != 105052              // 'catch' 'order'\n       && lk != 105564              // 'catch' 'ordered'\n       && lk != 106076              // 'catch' 'ordering'\n       && lk != 107612              // 'catch' 'parent'\n       && lk != 110684              // 'catch' 'preceding'\n       && lk != 111196              // 'catch' 'preceding-sibling'\n       && lk != 112732              // 'catch' 'processing-instruction'\n       && lk != 113756              // 'catch' 'rename'\n       && lk != 114268              // 'catch' 'replace'\n       && lk != 114780              // 'catch' 'return'\n       && lk != 115292              // 'catch' 'returning'\n       && lk != 115804              // 'catch' 'revalidation'\n       && lk != 116828              // 'catch' 'satisfies'\n       && lk != 117340              // 'catch' 'schema'\n       && lk != 117852              // 'catch' 'schema-attribute'\n       && lk != 118364              // 'catch' 'schema-element'\n       && lk != 118876              // 'catch' 'score'\n       && lk != 119388              // 'catch' 'select'\n       && lk != 119900              // 'catch' 'self'\n       && lk != 122460              // 'catch' 'sliding'\n       && lk != 122972              // 'catch' 'some'\n       && lk != 123484              // 'catch' 'stable'\n       && lk != 123996              // 'catch' 'start'\n       && lk != 125532              // 'catch' 'strict'\n       && lk != 126556              // 'catch' 'structured-item'\n       && lk != 127068              // 'catch' 'switch'\n       && lk != 127580              // 'catch' 'text'\n       && lk != 129628              // 'catch' 'to'\n       && lk != 130140              // 'catch' 'treat'\n       && lk != 130652              // 'catch' 'true'\n       && lk != 131164              // 'catch' 'try'\n       && lk != 131676              // 'catch' 'tumbling'\n       && lk != 132188              // 'catch' 'type'\n       && lk != 132700              // 'catch' 'typeswitch'\n       && lk != 133212              // 'catch' 'union'\n       && lk != 134236              // 'catch' 'unordered'\n       && lk != 134748              // 'catch' 'updating'\n       && lk != 136284              // 'catch' 'validate'\n       && lk != 136796              // 'catch' 'value'\n       && lk != 137308              // 'catch' 'variable'\n       && lk != 137820              // 'catch' 'version'\n       && lk != 139356              // 'catch' 'where'\n       && lk != 139868              // 'catch' 'while'\n       && lk != 141404)             // 'catch' 'with'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchStatement\", e0);\n  }\n\n  function try_TryCatchStatement()\n  {\n    shiftT(256);                    // 'try'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(39);              // S^WS | '(:' | 'catch'\n      shiftT(92);                   // 'catch'\n      lookahead1W(248);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_CatchErrorList();\n      try_BlockStatement();\n      lookahead1W(283);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 92:                      // 'catch'\n        lookahead2W(255);           // Wildcard | EQName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 2652                // 'catch' Wildcard\n       && lk != 3164                // 'catch' EQName^Token\n       && lk != 36444               // 'catch' 'after'\n       && lk != 37468               // 'catch' 'allowing'\n       && lk != 37980               // 'catch' 'ancestor'\n       && lk != 38492               // 'catch' 'ancestor-or-self'\n       && lk != 39004               // 'catch' 'and'\n       && lk != 40028               // 'catch' 'append'\n       && lk != 40540               // 'catch' 'array'\n       && lk != 41052               // 'catch' 'as'\n       && lk != 41564               // 'catch' 'ascending'\n       && lk != 42076               // 'catch' 'at'\n       && lk != 42588               // 'catch' 'attribute'\n       && lk != 43100               // 'catch' 'base-uri'\n       && lk != 43612               // 'catch' 'before'\n       && lk != 44124               // 'catch' 'boundary-space'\n       && lk != 44636               // 'catch' 'break'\n       && lk != 45660               // 'catch' 'case'\n       && lk != 46172               // 'catch' 'cast'\n       && lk != 46684               // 'catch' 'castable'\n       && lk != 47196               // 'catch' 'catch'\n       && lk != 48220               // 'catch' 'child'\n       && lk != 48732               // 'catch' 'collation'\n       && lk != 49756               // 'catch' 'comment'\n       && lk != 50268               // 'catch' 'constraint'\n       && lk != 50780               // 'catch' 'construction'\n       && lk != 52316               // 'catch' 'context'\n       && lk != 52828               // 'catch' 'continue'\n       && lk != 53340               // 'catch' 'copy'\n       && lk != 53852               // 'catch' 'copy-namespaces'\n       && lk != 54364               // 'catch' 'count'\n       && lk != 54876               // 'catch' 'decimal-format'\n       && lk != 55900               // 'catch' 'declare'\n       && lk != 56412               // 'catch' 'default'\n       && lk != 56924               // 'catch' 'delete'\n       && lk != 57436               // 'catch' 'descendant'\n       && lk != 57948               // 'catch' 'descendant-or-self'\n       && lk != 58460               // 'catch' 'descending'\n       && lk != 61020               // 'catch' 'div'\n       && lk != 61532               // 'catch' 'document'\n       && lk != 62044               // 'catch' 'document-node'\n       && lk != 62556               // 'catch' 'element'\n       && lk != 63068               // 'catch' 'else'\n       && lk != 63580               // 'catch' 'empty'\n       && lk != 64092               // 'catch' 'empty-sequence'\n       && lk != 64604               // 'catch' 'encoding'\n       && lk != 65116               // 'catch' 'end'\n       && lk != 66140               // 'catch' 'eq'\n       && lk != 66652               // 'catch' 'every'\n       && lk != 67676               // 'catch' 'except'\n       && lk != 68188               // 'catch' 'exit'\n       && lk != 68700               // 'catch' 'external'\n       && lk != 69212               // 'catch' 'false'\n       && lk != 69724               // 'catch' 'first'\n       && lk != 70236               // 'catch' 'following'\n       && lk != 70748               // 'catch' 'following-sibling'\n       && lk != 71260               // 'catch' 'for'\n       && lk != 72796               // 'catch' 'from'\n       && lk != 73308               // 'catch' 'ft-option'\n       && lk != 75356               // 'catch' 'function'\n       && lk != 75868               // 'catch' 'ge'\n       && lk != 76892               // 'catch' 'group'\n       && lk != 77916               // 'catch' 'gt'\n       && lk != 78428               // 'catch' 'idiv'\n       && lk != 78940               // 'catch' 'if'\n       && lk != 79452               // 'catch' 'import'\n       && lk != 79964               // 'catch' 'in'\n       && lk != 80476               // 'catch' 'index'\n       && lk != 82524               // 'catch' 'insert'\n       && lk != 83036               // 'catch' 'instance'\n       && lk != 83548               // 'catch' 'integrity'\n       && lk != 84060               // 'catch' 'intersect'\n       && lk != 84572               // 'catch' 'into'\n       && lk != 85084               // 'catch' 'is'\n       && lk != 85596               // 'catch' 'item'\n       && lk != 86108               // 'catch' 'json'\n       && lk != 86620               // 'catch' 'json-item'\n       && lk != 87132               // 'catch' 'jsoniq'\n       && lk != 88668               // 'catch' 'last'\n       && lk != 89180               // 'catch' 'lax'\n       && lk != 89692               // 'catch' 'le'\n       && lk != 90716               // 'catch' 'let'\n       && lk != 91740               // 'catch' 'loop'\n       && lk != 92764               // 'catch' 'lt'\n       && lk != 93788               // 'catch' 'mod'\n       && lk != 94300               // 'catch' 'modify'\n       && lk != 94812               // 'catch' 'module'\n       && lk != 95836               // 'catch' 'namespace'\n       && lk != 96348               // 'catch' 'namespace-node'\n       && lk != 96860               // 'catch' 'ne'\n       && lk != 99420               // 'catch' 'node'\n       && lk != 99932               // 'catch' 'nodes'\n       && lk != 100956              // 'catch' 'null'\n       && lk != 101468              // 'catch' 'object'\n       && lk != 103516              // 'catch' 'only'\n       && lk != 104028              // 'catch' 'option'\n       && lk != 104540              // 'catch' 'or'\n       && lk != 105052              // 'catch' 'order'\n       && lk != 105564              // 'catch' 'ordered'\n       && lk != 106076              // 'catch' 'ordering'\n       && lk != 107612              // 'catch' 'parent'\n       && lk != 110684              // 'catch' 'preceding'\n       && lk != 111196              // 'catch' 'preceding-sibling'\n       && lk != 112732              // 'catch' 'processing-instruction'\n       && lk != 113756              // 'catch' 'rename'\n       && lk != 114268              // 'catch' 'replace'\n       && lk != 114780              // 'catch' 'return'\n       && lk != 115292              // 'catch' 'returning'\n       && lk != 115804              // 'catch' 'revalidation'\n       && lk != 116828              // 'catch' 'satisfies'\n       && lk != 117340              // 'catch' 'schema'\n       && lk != 117852              // 'catch' 'schema-attribute'\n       && lk != 118364              // 'catch' 'schema-element'\n       && lk != 118876              // 'catch' 'score'\n       && lk != 119388              // 'catch' 'select'\n       && lk != 119900              // 'catch' 'self'\n       && lk != 122460              // 'catch' 'sliding'\n       && lk != 122972              // 'catch' 'some'\n       && lk != 123484              // 'catch' 'stable'\n       && lk != 123996              // 'catch' 'start'\n       && lk != 125532              // 'catch' 'strict'\n       && lk != 126556              // 'catch' 'structured-item'\n       && lk != 127068              // 'catch' 'switch'\n       && lk != 127580              // 'catch' 'text'\n       && lk != 129628              // 'catch' 'to'\n       && lk != 130140              // 'catch' 'treat'\n       && lk != 130652              // 'catch' 'true'\n       && lk != 131164              // 'catch' 'try'\n       && lk != 131676              // 'catch' 'tumbling'\n       && lk != 132188              // 'catch' 'type'\n       && lk != 132700              // 'catch' 'typeswitch'\n       && lk != 133212              // 'catch' 'union'\n       && lk != 134236              // 'catch' 'unordered'\n       && lk != 134748              // 'catch' 'updating'\n       && lk != 136284              // 'catch' 'validate'\n       && lk != 136796              // 'catch' 'value'\n       && lk != 137308              // 'catch' 'variable'\n       && lk != 137820              // 'catch' 'version'\n       && lk != 139356              // 'catch' 'where'\n       && lk != 139868              // 'catch' 'while'\n       && lk != 141404)             // 'catch' 'with'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_TypeswitchStatement()\n  {\n    eventHandler.startNonterminal(\"TypeswitchStatement\", e0);\n    shift(259);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(110);                     // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"TypeswitchStatement\", e0);\n  }\n\n  function try_TypeswitchStatement()\n  {\n    shiftT(259);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    for (;;)\n    {\n      lookahead1W(38);              // S^WS | '(:' | 'case'\n      try_CaseStatement();\n      lookahead1W(117);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 89)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(110);                    // 'default'\n    lookahead1W(99);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n    }\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_CaseStatement()\n  {\n    eventHandler.startNonterminal(\"CaseStatement\", e0);\n    shift(89);                      // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shift(80);                    // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shift(224);                     // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"CaseStatement\", e0);\n  }\n\n  function try_CaseStatement()\n  {\n    shiftT(89);                     // 'case'\n    lookahead1W(257);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(33);              // S^WS | '(:' | 'as'\n      shiftT(80);                   // 'as'\n    }\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n    lookahead1W(73);                // S^WS | '(:' | 'return'\n    shiftT(224);                    // 'return'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_VarDeclStatement()\n  {\n    eventHandler.startNonterminal(\"VarDeclStatement\", e0);\n    for (;;)\n    {\n      lookahead1W(102);             // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(268);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(172);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(155);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 53)                   // ':='\n    {\n      shift(53);                    // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(172);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      lookahead1W(155);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shift(53);                  // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n    }\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"VarDeclStatement\", e0);\n  }\n\n  function try_VarDeclStatement()\n  {\n    for (;;)\n    {\n      lookahead1W(102);             // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 33)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(268);                    // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(172);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 80)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(155);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 53)                   // ':='\n    {\n      shiftT(53);                   // ':='\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(245);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(172);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 80)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      lookahead1W(155);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 53)                 // ':='\n      {\n        shiftT(53);                 // ':='\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_ExprSingle();\n      }\n    }\n    shiftT(54);                     // ';'\n  }\n\n  function parse_WhileStatement()\n  {\n    eventHandler.startNonterminal(\"WhileStatement\", e0);\n    shift(273);                     // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Expr();\n    shift(38);                      // ')'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"WhileStatement\", e0);\n  }\n\n  function try_WhileStatement()\n  {\n    shiftT(273);                    // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(35);                     // '('\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Expr();\n    shiftT(38);                     // ')'\n    lookahead1W(270);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_Statement();\n  }\n\n  function parse_VoidStatement()\n  {\n    eventHandler.startNonterminal(\"VoidStatement\", e0);\n    shift(54);                      // ';'\n    eventHandler.endNonterminal(\"VoidStatement\", e0);\n  }\n\n  function try_VoidStatement()\n  {\n    shiftT(54);                     // ';'\n  }\n\n  function parse_ExprSingle()\n  {\n    eventHandler.startNonterminal(\"ExprSingle\", e0);\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      parse_FLWORExpr();\n      break;\n    case 18074:                     // 'if' '('\n      parse_IfExpr();\n      break;\n    case 18168:                     // 'switch' '('\n      parse_SwitchExpr();\n      break;\n    case 144128:                    // 'try' '{'\n      parse_TryCatchExpr();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      parse_TypeswitchExpr();\n      break;\n    default:\n      parse_ExprSimple();\n    }\n    eventHandler.endNonterminal(\"ExprSingle\", e0);\n  }\n\n  function try_ExprSingle()\n  {\n    switch (l1)\n    {\n    case 139:                       // 'for'\n      lookahead2W(179);             // S^WS | '#' | '$' | '(' | '(:' | 'sliding' | 'tumbling'\n      break;\n    case 177:                       // 'let'\n      lookahead2W(166);             // S^WS | '#' | '$' | '(' | '(:' | 'score'\n      break;\n    case 256:                       // 'try'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 154:                       // 'if'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16011:                     // 'for' '$'\n    case 16049:                     // 'let' '$'\n    case 118961:                    // 'let' 'score'\n    case 122507:                    // 'for' 'sliding'\n    case 131723:                    // 'for' 'tumbling'\n      try_FLWORExpr();\n      break;\n    case 18074:                     // 'if' '('\n      try_IfExpr();\n      break;\n    case 18168:                     // 'switch' '('\n      try_SwitchExpr();\n      break;\n    case 144128:                    // 'try' '{'\n      try_TryCatchExpr();\n      break;\n    case 18179:                     // 'typeswitch' '('\n      try_TypeswitchExpr();\n      break;\n    default:\n      try_ExprSimple();\n    }\n  }\n\n  function parse_ExprSimple()\n  {\n    eventHandler.startNonterminal(\"ExprSimple\", e0);\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(275);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(170);             // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 17998                 // 'append' '('\n     || lk == 18031                 // 'delete' '('\n     || lk == 18081                 // 'insert' '('\n     || lk == 18142                 // 'rename' '('\n     || lk == 99439                 // 'delete' 'node'\n     || lk == 99489                 // 'insert' 'node'\n     || lk == 99550                 // 'rename' 'node'\n     || lk == 99951                 // 'delete' 'nodes'\n     || lk == 100001                // 'insert' 'nodes'\n     || lk == 136927)               // 'replace' 'value'\n    {\n      lk = memoized(10, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_OrExpr();\n          lk = -2;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_InsertExpr();\n            lk = -3;\n          }\n          catch (p3A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_DeleteExpr();\n              lk = -4;\n            }\n            catch (p4A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_RenameExpr();\n                lk = -5;\n              }\n              catch (p5A)\n              {\n                try\n                {\n                  b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                  b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                  b2 = b2A; e2 = e2A; end = e2A; }}\n                  try_ReplaceExpr();\n                  lk = -6;\n                }\n                catch (p6A)\n                {\n                  try\n                  {\n                    b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                    b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                    b2 = b2A; e2 = e2A; end = e2A; }}\n                    try_JSONDeleteExpr();\n                    lk = -8;\n                  }\n                  catch (p8A)\n                  {\n                    try\n                    {\n                      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                      b2 = b2A; e2 = e2A; end = e2A; }}\n                      try_JSONInsertExpr();\n                      lk = -9;\n                    }\n                    catch (p9A)\n                    {\n                      try\n                      {\n                        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                        b2 = b2A; e2 = e2A; end = e2A; }}\n                        try_JSONRenameExpr();\n                        lk = -10;\n                      }\n                      catch (p10A)\n                      {\n                        try\n                        {\n                          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                          b2 = b2A; e2 = e2A; end = e2A; }}\n                          try_JSONReplaceExpr();\n                          lk = -11;\n                        }\n                        catch (p11A)\n                        {\n                          lk = -12;\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(10, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 16002:                     // 'every' '$'\n    case 16112:                     // 'some' '$'\n      parse_QuantifiedExpr();\n      break;\n    case -3:\n      parse_InsertExpr();\n      break;\n    case -4:\n      parse_DeleteExpr();\n      break;\n    case -5:\n      parse_RenameExpr();\n      break;\n    case -6:\n    case 99551:                     // 'replace' 'node'\n      parse_ReplaceExpr();\n      break;\n    case 15976:                     // 'copy' '$'\n      parse_TransformExpr();\n      break;\n    case -8:\n    case 3183:                      // 'delete' EQName^Token\n    case 4207:                      // 'delete' IntegerLiteral\n    case 4719:                      // 'delete' DecimalLiteral\n    case 5231:                      // 'delete' DoubleLiteral\n    case 5743:                      // 'delete' StringLiteral\n    case 15983:                     // 'delete' '$'\n    case 16495:                     // 'delete' '$$'\n    case 17007:                     // 'delete' '%'\n    case 28271:                     // 'delete' '<'\n    case 28783:                     // 'delete' '<!--'\n    case 30831:                     // 'delete' '<?'\n    case 35439:                     // 'delete' '['\n    case 36463:                     // 'delete' 'after'\n    case 37487:                     // 'delete' 'allowing'\n    case 37999:                     // 'delete' 'ancestor'\n    case 38511:                     // 'delete' 'ancestor-or-self'\n    case 39023:                     // 'delete' 'and'\n    case 40047:                     // 'delete' 'append'\n    case 40559:                     // 'delete' 'array'\n    case 41071:                     // 'delete' 'as'\n    case 41583:                     // 'delete' 'ascending'\n    case 42095:                     // 'delete' 'at'\n    case 42607:                     // 'delete' 'attribute'\n    case 43119:                     // 'delete' 'base-uri'\n    case 43631:                     // 'delete' 'before'\n    case 44143:                     // 'delete' 'boundary-space'\n    case 44655:                     // 'delete' 'break'\n    case 45679:                     // 'delete' 'case'\n    case 46191:                     // 'delete' 'cast'\n    case 46703:                     // 'delete' 'castable'\n    case 47215:                     // 'delete' 'catch'\n    case 48239:                     // 'delete' 'child'\n    case 48751:                     // 'delete' 'collation'\n    case 49775:                     // 'delete' 'comment'\n    case 50287:                     // 'delete' 'constraint'\n    case 50799:                     // 'delete' 'construction'\n    case 52335:                     // 'delete' 'context'\n    case 52847:                     // 'delete' 'continue'\n    case 53359:                     // 'delete' 'copy'\n    case 53871:                     // 'delete' 'copy-namespaces'\n    case 54383:                     // 'delete' 'count'\n    case 54895:                     // 'delete' 'decimal-format'\n    case 55919:                     // 'delete' 'declare'\n    case 56431:                     // 'delete' 'default'\n    case 56943:                     // 'delete' 'delete'\n    case 57455:                     // 'delete' 'descendant'\n    case 57967:                     // 'delete' 'descendant-or-self'\n    case 58479:                     // 'delete' 'descending'\n    case 61039:                     // 'delete' 'div'\n    case 61551:                     // 'delete' 'document'\n    case 62063:                     // 'delete' 'document-node'\n    case 62575:                     // 'delete' 'element'\n    case 63087:                     // 'delete' 'else'\n    case 63599:                     // 'delete' 'empty'\n    case 64111:                     // 'delete' 'empty-sequence'\n    case 64623:                     // 'delete' 'encoding'\n    case 65135:                     // 'delete' 'end'\n    case 66159:                     // 'delete' 'eq'\n    case 66671:                     // 'delete' 'every'\n    case 67695:                     // 'delete' 'except'\n    case 68207:                     // 'delete' 'exit'\n    case 68719:                     // 'delete' 'external'\n    case 69231:                     // 'delete' 'false'\n    case 69743:                     // 'delete' 'first'\n    case 70255:                     // 'delete' 'following'\n    case 70767:                     // 'delete' 'following-sibling'\n    case 71279:                     // 'delete' 'for'\n    case 72815:                     // 'delete' 'from'\n    case 73327:                     // 'delete' 'ft-option'\n    case 75375:                     // 'delete' 'function'\n    case 75887:                     // 'delete' 'ge'\n    case 76911:                     // 'delete' 'group'\n    case 77935:                     // 'delete' 'gt'\n    case 78447:                     // 'delete' 'idiv'\n    case 78959:                     // 'delete' 'if'\n    case 79471:                     // 'delete' 'import'\n    case 79983:                     // 'delete' 'in'\n    case 80495:                     // 'delete' 'index'\n    case 82543:                     // 'delete' 'insert'\n    case 83055:                     // 'delete' 'instance'\n    case 83567:                     // 'delete' 'integrity'\n    case 84079:                     // 'delete' 'intersect'\n    case 84591:                     // 'delete' 'into'\n    case 85103:                     // 'delete' 'is'\n    case 85615:                     // 'delete' 'item'\n    case 86127:                     // 'delete' 'json'\n    case 86639:                     // 'delete' 'json-item'\n    case 87151:                     // 'delete' 'jsoniq'\n    case 88687:                     // 'delete' 'last'\n    case 89199:                     // 'delete' 'lax'\n    case 89711:                     // 'delete' 'le'\n    case 90735:                     // 'delete' 'let'\n    case 91759:                     // 'delete' 'loop'\n    case 92783:                     // 'delete' 'lt'\n    case 93807:                     // 'delete' 'mod'\n    case 94319:                     // 'delete' 'modify'\n    case 94831:                     // 'delete' 'module'\n    case 95855:                     // 'delete' 'namespace'\n    case 96367:                     // 'delete' 'namespace-node'\n    case 96879:                     // 'delete' 'ne'\n    case 100975:                    // 'delete' 'null'\n    case 101487:                    // 'delete' 'object'\n    case 103535:                    // 'delete' 'only'\n    case 104047:                    // 'delete' 'option'\n    case 104559:                    // 'delete' 'or'\n    case 105071:                    // 'delete' 'order'\n    case 105583:                    // 'delete' 'ordered'\n    case 106095:                    // 'delete' 'ordering'\n    case 107631:                    // 'delete' 'parent'\n    case 110703:                    // 'delete' 'preceding'\n    case 111215:                    // 'delete' 'preceding-sibling'\n    case 112751:                    // 'delete' 'processing-instruction'\n    case 113775:                    // 'delete' 'rename'\n    case 114287:                    // 'delete' 'replace'\n    case 114799:                    // 'delete' 'return'\n    case 115311:                    // 'delete' 'returning'\n    case 115823:                    // 'delete' 'revalidation'\n    case 116847:                    // 'delete' 'satisfies'\n    case 117359:                    // 'delete' 'schema'\n    case 117871:                    // 'delete' 'schema-attribute'\n    case 118383:                    // 'delete' 'schema-element'\n    case 118895:                    // 'delete' 'score'\n    case 119407:                    // 'delete' 'select'\n    case 119919:                    // 'delete' 'self'\n    case 122479:                    // 'delete' 'sliding'\n    case 122991:                    // 'delete' 'some'\n    case 123503:                    // 'delete' 'stable'\n    case 124015:                    // 'delete' 'start'\n    case 125551:                    // 'delete' 'strict'\n    case 126575:                    // 'delete' 'structured-item'\n    case 127087:                    // 'delete' 'switch'\n    case 127599:                    // 'delete' 'text'\n    case 129647:                    // 'delete' 'to'\n    case 130159:                    // 'delete' 'treat'\n    case 130671:                    // 'delete' 'true'\n    case 131183:                    // 'delete' 'try'\n    case 131695:                    // 'delete' 'tumbling'\n    case 132207:                    // 'delete' 'type'\n    case 132719:                    // 'delete' 'typeswitch'\n    case 133231:                    // 'delete' 'union'\n    case 134255:                    // 'delete' 'unordered'\n    case 134767:                    // 'delete' 'updating'\n    case 136303:                    // 'delete' 'validate'\n    case 136815:                    // 'delete' 'value'\n    case 137327:                    // 'delete' 'variable'\n    case 137839:                    // 'delete' 'version'\n    case 139375:                    // 'delete' 'where'\n    case 139887:                    // 'delete' 'while'\n    case 141423:                    // 'delete' 'with'\n    case 143983:                    // 'delete' '{'\n    case 145007:                    // 'delete' '{|'\n      parse_JSONDeleteExpr();\n      break;\n    case -9:\n    case 3233:                      // 'insert' EQName^Token\n    case 4257:                      // 'insert' IntegerLiteral\n    case 4769:                      // 'insert' DecimalLiteral\n    case 5281:                      // 'insert' DoubleLiteral\n    case 5793:                      // 'insert' StringLiteral\n    case 9889:                      // 'insert' NCName^Token\n    case 16033:                     // 'insert' '$'\n    case 16545:                     // 'insert' '$$'\n    case 17057:                     // 'insert' '%'\n    case 18593:                     // 'insert' '(#'\n    case 21153:                     // 'insert' '+'\n    case 22177:                     // 'insert' '-'\n    case 24225:                     // 'insert' '/'\n    case 24737:                     // 'insert' '//'\n    case 28321:                     // 'insert' '<'\n    case 28833:                     // 'insert' '<!--'\n    case 30881:                     // 'insert' '<?'\n    case 35489:                     // 'insert' '['\n    case 36513:                     // 'insert' 'after'\n    case 37537:                     // 'insert' 'allowing'\n    case 38049:                     // 'insert' 'ancestor'\n    case 38561:                     // 'insert' 'ancestor-or-self'\n    case 39073:                     // 'insert' 'and'\n    case 40097:                     // 'insert' 'append'\n    case 40609:                     // 'insert' 'array'\n    case 41121:                     // 'insert' 'as'\n    case 41633:                     // 'insert' 'ascending'\n    case 42145:                     // 'insert' 'at'\n    case 42657:                     // 'insert' 'attribute'\n    case 43169:                     // 'insert' 'base-uri'\n    case 43681:                     // 'insert' 'before'\n    case 44193:                     // 'insert' 'boundary-space'\n    case 44705:                     // 'insert' 'break'\n    case 45729:                     // 'insert' 'case'\n    case 46241:                     // 'insert' 'cast'\n    case 46753:                     // 'insert' 'castable'\n    case 47265:                     // 'insert' 'catch'\n    case 48289:                     // 'insert' 'child'\n    case 48801:                     // 'insert' 'collation'\n    case 49825:                     // 'insert' 'comment'\n    case 50337:                     // 'insert' 'constraint'\n    case 50849:                     // 'insert' 'construction'\n    case 52385:                     // 'insert' 'context'\n    case 52897:                     // 'insert' 'continue'\n    case 53409:                     // 'insert' 'copy'\n    case 53921:                     // 'insert' 'copy-namespaces'\n    case 54433:                     // 'insert' 'count'\n    case 54945:                     // 'insert' 'decimal-format'\n    case 55969:                     // 'insert' 'declare'\n    case 56481:                     // 'insert' 'default'\n    case 56993:                     // 'insert' 'delete'\n    case 57505:                     // 'insert' 'descendant'\n    case 58017:                     // 'insert' 'descendant-or-self'\n    case 58529:                     // 'insert' 'descending'\n    case 61089:                     // 'insert' 'div'\n    case 61601:                     // 'insert' 'document'\n    case 62113:                     // 'insert' 'document-node'\n    case 62625:                     // 'insert' 'element'\n    case 63137:                     // 'insert' 'else'\n    case 63649:                     // 'insert' 'empty'\n    case 64161:                     // 'insert' 'empty-sequence'\n    case 64673:                     // 'insert' 'encoding'\n    case 65185:                     // 'insert' 'end'\n    case 66209:                     // 'insert' 'eq'\n    case 66721:                     // 'insert' 'every'\n    case 67745:                     // 'insert' 'except'\n    case 68257:                     // 'insert' 'exit'\n    case 68769:                     // 'insert' 'external'\n    case 69281:                     // 'insert' 'false'\n    case 69793:                     // 'insert' 'first'\n    case 70305:                     // 'insert' 'following'\n    case 70817:                     // 'insert' 'following-sibling'\n    case 71329:                     // 'insert' 'for'\n    case 72865:                     // 'insert' 'from'\n    case 73377:                     // 'insert' 'ft-option'\n    case 75425:                     // 'insert' 'function'\n    case 75937:                     // 'insert' 'ge'\n    case 76961:                     // 'insert' 'group'\n    case 77985:                     // 'insert' 'gt'\n    case 78497:                     // 'insert' 'idiv'\n    case 79009:                     // 'insert' 'if'\n    case 79521:                     // 'insert' 'import'\n    case 80033:                     // 'insert' 'in'\n    case 80545:                     // 'insert' 'index'\n    case 82593:                     // 'insert' 'insert'\n    case 83105:                     // 'insert' 'instance'\n    case 83617:                     // 'insert' 'integrity'\n    case 84129:                     // 'insert' 'intersect'\n    case 84641:                     // 'insert' 'into'\n    case 85153:                     // 'insert' 'is'\n    case 85665:                     // 'insert' 'item'\n    case 86177:                     // 'insert' 'json'\n    case 86689:                     // 'insert' 'json-item'\n    case 87201:                     // 'insert' 'jsoniq'\n    case 88737:                     // 'insert' 'last'\n    case 89249:                     // 'insert' 'lax'\n    case 89761:                     // 'insert' 'le'\n    case 90785:                     // 'insert' 'let'\n    case 91809:                     // 'insert' 'loop'\n    case 92833:                     // 'insert' 'lt'\n    case 93857:                     // 'insert' 'mod'\n    case 94369:                     // 'insert' 'modify'\n    case 94881:                     // 'insert' 'module'\n    case 95905:                     // 'insert' 'namespace'\n    case 96417:                     // 'insert' 'namespace-node'\n    case 96929:                     // 'insert' 'ne'\n    case 100513:                    // 'insert' 'not'\n    case 101025:                    // 'insert' 'null'\n    case 101537:                    // 'insert' 'object'\n    case 103585:                    // 'insert' 'only'\n    case 104097:                    // 'insert' 'option'\n    case 104609:                    // 'insert' 'or'\n    case 105121:                    // 'insert' 'order'\n    case 105633:                    // 'insert' 'ordered'\n    case 106145:                    // 'insert' 'ordering'\n    case 107681:                    // 'insert' 'parent'\n    case 110753:                    // 'insert' 'preceding'\n    case 111265:                    // 'insert' 'preceding-sibling'\n    case 112801:                    // 'insert' 'processing-instruction'\n    case 113825:                    // 'insert' 'rename'\n    case 114337:                    // 'insert' 'replace'\n    case 114849:                    // 'insert' 'return'\n    case 115361:                    // 'insert' 'returning'\n    case 115873:                    // 'insert' 'revalidation'\n    case 116897:                    // 'insert' 'satisfies'\n    case 117409:                    // 'insert' 'schema'\n    case 117921:                    // 'insert' 'schema-attribute'\n    case 118433:                    // 'insert' 'schema-element'\n    case 118945:                    // 'insert' 'score'\n    case 119457:                    // 'insert' 'select'\n    case 119969:                    // 'insert' 'self'\n    case 122529:                    // 'insert' 'sliding'\n    case 123041:                    // 'insert' 'some'\n    case 123553:                    // 'insert' 'stable'\n    case 124065:                    // 'insert' 'start'\n    case 125601:                    // 'insert' 'strict'\n    case 126625:                    // 'insert' 'structured-item'\n    case 127137:                    // 'insert' 'switch'\n    case 127649:                    // 'insert' 'text'\n    case 129697:                    // 'insert' 'to'\n    case 130209:                    // 'insert' 'treat'\n    case 130721:                    // 'insert' 'true'\n    case 131233:                    // 'insert' 'try'\n    case 131745:                    // 'insert' 'tumbling'\n    case 132257:                    // 'insert' 'type'\n    case 132769:                    // 'insert' 'typeswitch'\n    case 133281:                    // 'insert' 'union'\n    case 134305:                    // 'insert' 'unordered'\n    case 134817:                    // 'insert' 'updating'\n    case 136353:                    // 'insert' 'validate'\n    case 136865:                    // 'insert' 'value'\n    case 137377:                    // 'insert' 'variable'\n    case 137889:                    // 'insert' 'version'\n    case 139425:                    // 'insert' 'where'\n    case 139937:                    // 'insert' 'while'\n    case 141473:                    // 'insert' 'with'\n    case 144033:                    // 'insert' '{'\n    case 145057:                    // 'insert' '{|'\n      parse_JSONInsertExpr();\n      break;\n    case -10:\n    case 3294:                      // 'rename' EQName^Token\n    case 4318:                      // 'rename' IntegerLiteral\n    case 4830:                      // 'rename' DecimalLiteral\n    case 5342:                      // 'rename' DoubleLiteral\n    case 5854:                      // 'rename' StringLiteral\n    case 16094:                     // 'rename' '$'\n    case 16606:                     // 'rename' '$$'\n    case 17118:                     // 'rename' '%'\n    case 28382:                     // 'rename' '<'\n    case 28894:                     // 'rename' '<!--'\n    case 30942:                     // 'rename' '<?'\n    case 35550:                     // 'rename' '['\n    case 36574:                     // 'rename' 'after'\n    case 37598:                     // 'rename' 'allowing'\n    case 38110:                     // 'rename' 'ancestor'\n    case 38622:                     // 'rename' 'ancestor-or-self'\n    case 39134:                     // 'rename' 'and'\n    case 40158:                     // 'rename' 'append'\n    case 40670:                     // 'rename' 'array'\n    case 41182:                     // 'rename' 'as'\n    case 41694:                     // 'rename' 'ascending'\n    case 42206:                     // 'rename' 'at'\n    case 42718:                     // 'rename' 'attribute'\n    case 43230:                     // 'rename' 'base-uri'\n    case 43742:                     // 'rename' 'before'\n    case 44254:                     // 'rename' 'boundary-space'\n    case 44766:                     // 'rename' 'break'\n    case 45790:                     // 'rename' 'case'\n    case 46302:                     // 'rename' 'cast'\n    case 46814:                     // 'rename' 'castable'\n    case 47326:                     // 'rename' 'catch'\n    case 48350:                     // 'rename' 'child'\n    case 48862:                     // 'rename' 'collation'\n    case 49886:                     // 'rename' 'comment'\n    case 50398:                     // 'rename' 'constraint'\n    case 50910:                     // 'rename' 'construction'\n    case 52446:                     // 'rename' 'context'\n    case 52958:                     // 'rename' 'continue'\n    case 53470:                     // 'rename' 'copy'\n    case 53982:                     // 'rename' 'copy-namespaces'\n    case 54494:                     // 'rename' 'count'\n    case 55006:                     // 'rename' 'decimal-format'\n    case 56030:                     // 'rename' 'declare'\n    case 56542:                     // 'rename' 'default'\n    case 57054:                     // 'rename' 'delete'\n    case 57566:                     // 'rename' 'descendant'\n    case 58078:                     // 'rename' 'descendant-or-self'\n    case 58590:                     // 'rename' 'descending'\n    case 61150:                     // 'rename' 'div'\n    case 61662:                     // 'rename' 'document'\n    case 62174:                     // 'rename' 'document-node'\n    case 62686:                     // 'rename' 'element'\n    case 63198:                     // 'rename' 'else'\n    case 63710:                     // 'rename' 'empty'\n    case 64222:                     // 'rename' 'empty-sequence'\n    case 64734:                     // 'rename' 'encoding'\n    case 65246:                     // 'rename' 'end'\n    case 66270:                     // 'rename' 'eq'\n    case 66782:                     // 'rename' 'every'\n    case 67806:                     // 'rename' 'except'\n    case 68318:                     // 'rename' 'exit'\n    case 68830:                     // 'rename' 'external'\n    case 69342:                     // 'rename' 'false'\n    case 69854:                     // 'rename' 'first'\n    case 70366:                     // 'rename' 'following'\n    case 70878:                     // 'rename' 'following-sibling'\n    case 71390:                     // 'rename' 'for'\n    case 72926:                     // 'rename' 'from'\n    case 73438:                     // 'rename' 'ft-option'\n    case 75486:                     // 'rename' 'function'\n    case 75998:                     // 'rename' 'ge'\n    case 77022:                     // 'rename' 'group'\n    case 78046:                     // 'rename' 'gt'\n    case 78558:                     // 'rename' 'idiv'\n    case 79070:                     // 'rename' 'if'\n    case 79582:                     // 'rename' 'import'\n    case 80094:                     // 'rename' 'in'\n    case 80606:                     // 'rename' 'index'\n    case 82654:                     // 'rename' 'insert'\n    case 83166:                     // 'rename' 'instance'\n    case 83678:                     // 'rename' 'integrity'\n    case 84190:                     // 'rename' 'intersect'\n    case 84702:                     // 'rename' 'into'\n    case 85214:                     // 'rename' 'is'\n    case 85726:                     // 'rename' 'item'\n    case 86238:                     // 'rename' 'json'\n    case 86750:                     // 'rename' 'json-item'\n    case 87262:                     // 'rename' 'jsoniq'\n    case 88798:                     // 'rename' 'last'\n    case 89310:                     // 'rename' 'lax'\n    case 89822:                     // 'rename' 'le'\n    case 90846:                     // 'rename' 'let'\n    case 91870:                     // 'rename' 'loop'\n    case 92894:                     // 'rename' 'lt'\n    case 93918:                     // 'rename' 'mod'\n    case 94430:                     // 'rename' 'modify'\n    case 94942:                     // 'rename' 'module'\n    case 95966:                     // 'rename' 'namespace'\n    case 96478:                     // 'rename' 'namespace-node'\n    case 96990:                     // 'rename' 'ne'\n    case 100062:                    // 'rename' 'nodes'\n    case 101086:                    // 'rename' 'null'\n    case 101598:                    // 'rename' 'object'\n    case 103646:                    // 'rename' 'only'\n    case 104158:                    // 'rename' 'option'\n    case 104670:                    // 'rename' 'or'\n    case 105182:                    // 'rename' 'order'\n    case 105694:                    // 'rename' 'ordered'\n    case 106206:                    // 'rename' 'ordering'\n    case 107742:                    // 'rename' 'parent'\n    case 110814:                    // 'rename' 'preceding'\n    case 111326:                    // 'rename' 'preceding-sibling'\n    case 112862:                    // 'rename' 'processing-instruction'\n    case 113886:                    // 'rename' 'rename'\n    case 114398:                    // 'rename' 'replace'\n    case 114910:                    // 'rename' 'return'\n    case 115422:                    // 'rename' 'returning'\n    case 115934:                    // 'rename' 'revalidation'\n    case 116958:                    // 'rename' 'satisfies'\n    case 117470:                    // 'rename' 'schema'\n    case 117982:                    // 'rename' 'schema-attribute'\n    case 118494:                    // 'rename' 'schema-element'\n    case 119006:                    // 'rename' 'score'\n    case 119518:                    // 'rename' 'select'\n    case 120030:                    // 'rename' 'self'\n    case 122590:                    // 'rename' 'sliding'\n    case 123102:                    // 'rename' 'some'\n    case 123614:                    // 'rename' 'stable'\n    case 124126:                    // 'rename' 'start'\n    case 125662:                    // 'rename' 'strict'\n    case 126686:                    // 'rename' 'structured-item'\n    case 127198:                    // 'rename' 'switch'\n    case 127710:                    // 'rename' 'text'\n    case 129758:                    // 'rename' 'to'\n    case 130270:                    // 'rename' 'treat'\n    case 130782:                    // 'rename' 'true'\n    case 131294:                    // 'rename' 'try'\n    case 131806:                    // 'rename' 'tumbling'\n    case 132318:                    // 'rename' 'type'\n    case 132830:                    // 'rename' 'typeswitch'\n    case 133342:                    // 'rename' 'union'\n    case 134366:                    // 'rename' 'unordered'\n    case 134878:                    // 'rename' 'updating'\n    case 136414:                    // 'rename' 'validate'\n    case 136926:                    // 'rename' 'value'\n    case 137438:                    // 'rename' 'variable'\n    case 137950:                    // 'rename' 'version'\n    case 139486:                    // 'rename' 'where'\n    case 139998:                    // 'rename' 'while'\n    case 141534:                    // 'rename' 'with'\n    case 144094:                    // 'rename' '{'\n    case 145118:                    // 'rename' '{|'\n      parse_JSONRenameExpr();\n      break;\n    case -11:\n      parse_JSONReplaceExpr();\n      break;\n    case -12:\n    case 3150:                      // 'append' EQName^Token\n    case 4174:                      // 'append' IntegerLiteral\n    case 4686:                      // 'append' DecimalLiteral\n    case 5198:                      // 'append' DoubleLiteral\n    case 5710:                      // 'append' StringLiteral\n    case 15950:                     // 'append' '$'\n    case 16462:                     // 'append' '$$'\n    case 16974:                     // 'append' '%'\n    case 18510:                     // 'append' '(#'\n    case 21070:                     // 'append' '+'\n    case 22094:                     // 'append' '-'\n    case 24142:                     // 'append' '/'\n    case 24654:                     // 'append' '//'\n    case 28238:                     // 'append' '<'\n    case 28750:                     // 'append' '<!--'\n    case 30798:                     // 'append' '<?'\n    case 35406:                     // 'append' '['\n    case 36430:                     // 'append' 'after'\n    case 37454:                     // 'append' 'allowing'\n    case 37966:                     // 'append' 'ancestor'\n    case 38478:                     // 'append' 'ancestor-or-self'\n    case 38990:                     // 'append' 'and'\n    case 40014:                     // 'append' 'append'\n    case 40526:                     // 'append' 'array'\n    case 41038:                     // 'append' 'as'\n    case 41550:                     // 'append' 'ascending'\n    case 42062:                     // 'append' 'at'\n    case 42574:                     // 'append' 'attribute'\n    case 43086:                     // 'append' 'base-uri'\n    case 43598:                     // 'append' 'before'\n    case 44110:                     // 'append' 'boundary-space'\n    case 44622:                     // 'append' 'break'\n    case 45646:                     // 'append' 'case'\n    case 46158:                     // 'append' 'cast'\n    case 46670:                     // 'append' 'castable'\n    case 47182:                     // 'append' 'catch'\n    case 48206:                     // 'append' 'child'\n    case 48718:                     // 'append' 'collation'\n    case 49742:                     // 'append' 'comment'\n    case 50254:                     // 'append' 'constraint'\n    case 50766:                     // 'append' 'construction'\n    case 52302:                     // 'append' 'context'\n    case 52814:                     // 'append' 'continue'\n    case 53326:                     // 'append' 'copy'\n    case 53838:                     // 'append' 'copy-namespaces'\n    case 54350:                     // 'append' 'count'\n    case 54862:                     // 'append' 'decimal-format'\n    case 55886:                     // 'append' 'declare'\n    case 56398:                     // 'append' 'default'\n    case 56910:                     // 'append' 'delete'\n    case 57422:                     // 'append' 'descendant'\n    case 57934:                     // 'append' 'descendant-or-self'\n    case 58446:                     // 'append' 'descending'\n    case 61006:                     // 'append' 'div'\n    case 61518:                     // 'append' 'document'\n    case 62030:                     // 'append' 'document-node'\n    case 62542:                     // 'append' 'element'\n    case 63054:                     // 'append' 'else'\n    case 63566:                     // 'append' 'empty'\n    case 64078:                     // 'append' 'empty-sequence'\n    case 64590:                     // 'append' 'encoding'\n    case 65102:                     // 'append' 'end'\n    case 66126:                     // 'append' 'eq'\n    case 66638:                     // 'append' 'every'\n    case 67662:                     // 'append' 'except'\n    case 68174:                     // 'append' 'exit'\n    case 68686:                     // 'append' 'external'\n    case 69198:                     // 'append' 'false'\n    case 69710:                     // 'append' 'first'\n    case 70222:                     // 'append' 'following'\n    case 70734:                     // 'append' 'following-sibling'\n    case 71246:                     // 'append' 'for'\n    case 72782:                     // 'append' 'from'\n    case 73294:                     // 'append' 'ft-option'\n    case 75342:                     // 'append' 'function'\n    case 75854:                     // 'append' 'ge'\n    case 76878:                     // 'append' 'group'\n    case 77902:                     // 'append' 'gt'\n    case 78414:                     // 'append' 'idiv'\n    case 78926:                     // 'append' 'if'\n    case 79438:                     // 'append' 'import'\n    case 79950:                     // 'append' 'in'\n    case 80462:                     // 'append' 'index'\n    case 82510:                     // 'append' 'insert'\n    case 83022:                     // 'append' 'instance'\n    case 83534:                     // 'append' 'integrity'\n    case 84046:                     // 'append' 'intersect'\n    case 84558:                     // 'append' 'into'\n    case 85070:                     // 'append' 'is'\n    case 85582:                     // 'append' 'item'\n    case 86094:                     // 'append' 'json'\n    case 86606:                     // 'append' 'json-item'\n    case 87118:                     // 'append' 'jsoniq'\n    case 88654:                     // 'append' 'last'\n    case 89166:                     // 'append' 'lax'\n    case 89678:                     // 'append' 'le'\n    case 90702:                     // 'append' 'let'\n    case 91726:                     // 'append' 'loop'\n    case 92750:                     // 'append' 'lt'\n    case 93774:                     // 'append' 'mod'\n    case 94286:                     // 'append' 'modify'\n    case 94798:                     // 'append' 'module'\n    case 95822:                     // 'append' 'namespace'\n    case 96334:                     // 'append' 'namespace-node'\n    case 96846:                     // 'append' 'ne'\n    case 99406:                     // 'append' 'node'\n    case 99918:                     // 'append' 'nodes'\n    case 100430:                    // 'append' 'not'\n    case 100942:                    // 'append' 'null'\n    case 101454:                    // 'append' 'object'\n    case 103502:                    // 'append' 'only'\n    case 104014:                    // 'append' 'option'\n    case 104526:                    // 'append' 'or'\n    case 105038:                    // 'append' 'order'\n    case 105550:                    // 'append' 'ordered'\n    case 106062:                    // 'append' 'ordering'\n    case 107598:                    // 'append' 'parent'\n    case 110670:                    // 'append' 'preceding'\n    case 111182:                    // 'append' 'preceding-sibling'\n    case 112718:                    // 'append' 'processing-instruction'\n    case 113742:                    // 'append' 'rename'\n    case 114254:                    // 'append' 'replace'\n    case 114766:                    // 'append' 'return'\n    case 115278:                    // 'append' 'returning'\n    case 115790:                    // 'append' 'revalidation'\n    case 116814:                    // 'append' 'satisfies'\n    case 117326:                    // 'append' 'schema'\n    case 117838:                    // 'append' 'schema-attribute'\n    case 118350:                    // 'append' 'schema-element'\n    case 118862:                    // 'append' 'score'\n    case 119374:                    // 'append' 'select'\n    case 119886:                    // 'append' 'self'\n    case 122446:                    // 'append' 'sliding'\n    case 122958:                    // 'append' 'some'\n    case 123470:                    // 'append' 'stable'\n    case 123982:                    // 'append' 'start'\n    case 125518:                    // 'append' 'strict'\n    case 126542:                    // 'append' 'structured-item'\n    case 127054:                    // 'append' 'switch'\n    case 127566:                    // 'append' 'text'\n    case 129614:                    // 'append' 'to'\n    case 130126:                    // 'append' 'treat'\n    case 130638:                    // 'append' 'true'\n    case 131150:                    // 'append' 'try'\n    case 131662:                    // 'append' 'tumbling'\n    case 132174:                    // 'append' 'type'\n    case 132686:                    // 'append' 'typeswitch'\n    case 133198:                    // 'append' 'union'\n    case 134222:                    // 'append' 'unordered'\n    case 134734:                    // 'append' 'updating'\n    case 136270:                    // 'append' 'validate'\n    case 136782:                    // 'append' 'value'\n    case 137294:                    // 'append' 'variable'\n    case 137806:                    // 'append' 'version'\n    case 139342:                    // 'append' 'where'\n    case 139854:                    // 'append' 'while'\n    case 141390:                    // 'append' 'with'\n    case 143950:                    // 'append' '{'\n    case 144974:                    // 'append' '{|'\n      parse_JSONAppendExpr();\n      break;\n    default:\n      parse_OrExpr();\n    }\n    eventHandler.endNonterminal(\"ExprSimple\", e0);\n  }\n\n  function try_ExprSimple()\n  {\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(275);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(170);             // S^WS | '#' | '(' | '(:' | 'node' | 'value'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(143);             // S^WS | '#' | '$' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 17998                 // 'append' '('\n     || lk == 18031                 // 'delete' '('\n     || lk == 18081                 // 'insert' '('\n     || lk == 18142                 // 'rename' '('\n     || lk == 99439                 // 'delete' 'node'\n     || lk == 99489                 // 'insert' 'node'\n     || lk == 99550                 // 'rename' 'node'\n     || lk == 99951                 // 'delete' 'nodes'\n     || lk == 100001                // 'insert' 'nodes'\n     || lk == 136927)               // 'replace' 'value'\n    {\n      lk = memoized(10, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_OrExpr();\n          memoize(10, e0A, -2);\n          lk = -13;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_InsertExpr();\n            memoize(10, e0A, -3);\n            lk = -13;\n          }\n          catch (p3A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_DeleteExpr();\n              memoize(10, e0A, -4);\n              lk = -13;\n            }\n            catch (p4A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_RenameExpr();\n                memoize(10, e0A, -5);\n                lk = -13;\n              }\n              catch (p5A)\n              {\n                try\n                {\n                  b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                  b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                  b2 = b2A; e2 = e2A; end = e2A; }}\n                  try_ReplaceExpr();\n                  memoize(10, e0A, -6);\n                  lk = -13;\n                }\n                catch (p6A)\n                {\n                  try\n                  {\n                    b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                    b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                    b2 = b2A; e2 = e2A; end = e2A; }}\n                    try_JSONDeleteExpr();\n                    memoize(10, e0A, -8);\n                    lk = -13;\n                  }\n                  catch (p8A)\n                  {\n                    try\n                    {\n                      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                      b2 = b2A; e2 = e2A; end = e2A; }}\n                      try_JSONInsertExpr();\n                      memoize(10, e0A, -9);\n                      lk = -13;\n                    }\n                    catch (p9A)\n                    {\n                      try\n                      {\n                        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                        b2 = b2A; e2 = e2A; end = e2A; }}\n                        try_JSONRenameExpr();\n                        memoize(10, e0A, -10);\n                        lk = -13;\n                      }\n                      catch (p10A)\n                      {\n                        try\n                        {\n                          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                          b2 = b2A; e2 = e2A; end = e2A; }}\n                          try_JSONReplaceExpr();\n                          memoize(10, e0A, -11);\n                          lk = -13;\n                        }\n                        catch (p11A)\n                        {\n                          lk = -12;\n                          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                          b2 = b2A; e2 = e2A; end = e2A; }}\n                          memoize(10, e0A, -12);\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 16002:                     // 'every' '$'\n    case 16112:                     // 'some' '$'\n      try_QuantifiedExpr();\n      break;\n    case -3:\n      try_InsertExpr();\n      break;\n    case -4:\n      try_DeleteExpr();\n      break;\n    case -5:\n      try_RenameExpr();\n      break;\n    case -6:\n    case 99551:                     // 'replace' 'node'\n      try_ReplaceExpr();\n      break;\n    case 15976:                     // 'copy' '$'\n      try_TransformExpr();\n      break;\n    case -8:\n    case 3183:                      // 'delete' EQName^Token\n    case 4207:                      // 'delete' IntegerLiteral\n    case 4719:                      // 'delete' DecimalLiteral\n    case 5231:                      // 'delete' DoubleLiteral\n    case 5743:                      // 'delete' StringLiteral\n    case 15983:                     // 'delete' '$'\n    case 16495:                     // 'delete' '$$'\n    case 17007:                     // 'delete' '%'\n    case 28271:                     // 'delete' '<'\n    case 28783:                     // 'delete' '<!--'\n    case 30831:                     // 'delete' '<?'\n    case 35439:                     // 'delete' '['\n    case 36463:                     // 'delete' 'after'\n    case 37487:                     // 'delete' 'allowing'\n    case 37999:                     // 'delete' 'ancestor'\n    case 38511:                     // 'delete' 'ancestor-or-self'\n    case 39023:                     // 'delete' 'and'\n    case 40047:                     // 'delete' 'append'\n    case 40559:                     // 'delete' 'array'\n    case 41071:                     // 'delete' 'as'\n    case 41583:                     // 'delete' 'ascending'\n    case 42095:                     // 'delete' 'at'\n    case 42607:                     // 'delete' 'attribute'\n    case 43119:                     // 'delete' 'base-uri'\n    case 43631:                     // 'delete' 'before'\n    case 44143:                     // 'delete' 'boundary-space'\n    case 44655:                     // 'delete' 'break'\n    case 45679:                     // 'delete' 'case'\n    case 46191:                     // 'delete' 'cast'\n    case 46703:                     // 'delete' 'castable'\n    case 47215:                     // 'delete' 'catch'\n    case 48239:                     // 'delete' 'child'\n    case 48751:                     // 'delete' 'collation'\n    case 49775:                     // 'delete' 'comment'\n    case 50287:                     // 'delete' 'constraint'\n    case 50799:                     // 'delete' 'construction'\n    case 52335:                     // 'delete' 'context'\n    case 52847:                     // 'delete' 'continue'\n    case 53359:                     // 'delete' 'copy'\n    case 53871:                     // 'delete' 'copy-namespaces'\n    case 54383:                     // 'delete' 'count'\n    case 54895:                     // 'delete' 'decimal-format'\n    case 55919:                     // 'delete' 'declare'\n    case 56431:                     // 'delete' 'default'\n    case 56943:                     // 'delete' 'delete'\n    case 57455:                     // 'delete' 'descendant'\n    case 57967:                     // 'delete' 'descendant-or-self'\n    case 58479:                     // 'delete' 'descending'\n    case 61039:                     // 'delete' 'div'\n    case 61551:                     // 'delete' 'document'\n    case 62063:                     // 'delete' 'document-node'\n    case 62575:                     // 'delete' 'element'\n    case 63087:                     // 'delete' 'else'\n    case 63599:                     // 'delete' 'empty'\n    case 64111:                     // 'delete' 'empty-sequence'\n    case 64623:                     // 'delete' 'encoding'\n    case 65135:                     // 'delete' 'end'\n    case 66159:                     // 'delete' 'eq'\n    case 66671:                     // 'delete' 'every'\n    case 67695:                     // 'delete' 'except'\n    case 68207:                     // 'delete' 'exit'\n    case 68719:                     // 'delete' 'external'\n    case 69231:                     // 'delete' 'false'\n    case 69743:                     // 'delete' 'first'\n    case 70255:                     // 'delete' 'following'\n    case 70767:                     // 'delete' 'following-sibling'\n    case 71279:                     // 'delete' 'for'\n    case 72815:                     // 'delete' 'from'\n    case 73327:                     // 'delete' 'ft-option'\n    case 75375:                     // 'delete' 'function'\n    case 75887:                     // 'delete' 'ge'\n    case 76911:                     // 'delete' 'group'\n    case 77935:                     // 'delete' 'gt'\n    case 78447:                     // 'delete' 'idiv'\n    case 78959:                     // 'delete' 'if'\n    case 79471:                     // 'delete' 'import'\n    case 79983:                     // 'delete' 'in'\n    case 80495:                     // 'delete' 'index'\n    case 82543:                     // 'delete' 'insert'\n    case 83055:                     // 'delete' 'instance'\n    case 83567:                     // 'delete' 'integrity'\n    case 84079:                     // 'delete' 'intersect'\n    case 84591:                     // 'delete' 'into'\n    case 85103:                     // 'delete' 'is'\n    case 85615:                     // 'delete' 'item'\n    case 86127:                     // 'delete' 'json'\n    case 86639:                     // 'delete' 'json-item'\n    case 87151:                     // 'delete' 'jsoniq'\n    case 88687:                     // 'delete' 'last'\n    case 89199:                     // 'delete' 'lax'\n    case 89711:                     // 'delete' 'le'\n    case 90735:                     // 'delete' 'let'\n    case 91759:                     // 'delete' 'loop'\n    case 92783:                     // 'delete' 'lt'\n    case 93807:                     // 'delete' 'mod'\n    case 94319:                     // 'delete' 'modify'\n    case 94831:                     // 'delete' 'module'\n    case 95855:                     // 'delete' 'namespace'\n    case 96367:                     // 'delete' 'namespace-node'\n    case 96879:                     // 'delete' 'ne'\n    case 100975:                    // 'delete' 'null'\n    case 101487:                    // 'delete' 'object'\n    case 103535:                    // 'delete' 'only'\n    case 104047:                    // 'delete' 'option'\n    case 104559:                    // 'delete' 'or'\n    case 105071:                    // 'delete' 'order'\n    case 105583:                    // 'delete' 'ordered'\n    case 106095:                    // 'delete' 'ordering'\n    case 107631:                    // 'delete' 'parent'\n    case 110703:                    // 'delete' 'preceding'\n    case 111215:                    // 'delete' 'preceding-sibling'\n    case 112751:                    // 'delete' 'processing-instruction'\n    case 113775:                    // 'delete' 'rename'\n    case 114287:                    // 'delete' 'replace'\n    case 114799:                    // 'delete' 'return'\n    case 115311:                    // 'delete' 'returning'\n    case 115823:                    // 'delete' 'revalidation'\n    case 116847:                    // 'delete' 'satisfies'\n    case 117359:                    // 'delete' 'schema'\n    case 117871:                    // 'delete' 'schema-attribute'\n    case 118383:                    // 'delete' 'schema-element'\n    case 118895:                    // 'delete' 'score'\n    case 119407:                    // 'delete' 'select'\n    case 119919:                    // 'delete' 'self'\n    case 122479:                    // 'delete' 'sliding'\n    case 122991:                    // 'delete' 'some'\n    case 123503:                    // 'delete' 'stable'\n    case 124015:                    // 'delete' 'start'\n    case 125551:                    // 'delete' 'strict'\n    case 126575:                    // 'delete' 'structured-item'\n    case 127087:                    // 'delete' 'switch'\n    case 127599:                    // 'delete' 'text'\n    case 129647:                    // 'delete' 'to'\n    case 130159:                    // 'delete' 'treat'\n    case 130671:                    // 'delete' 'true'\n    case 131183:                    // 'delete' 'try'\n    case 131695:                    // 'delete' 'tumbling'\n    case 132207:                    // 'delete' 'type'\n    case 132719:                    // 'delete' 'typeswitch'\n    case 133231:                    // 'delete' 'union'\n    case 134255:                    // 'delete' 'unordered'\n    case 134767:                    // 'delete' 'updating'\n    case 136303:                    // 'delete' 'validate'\n    case 136815:                    // 'delete' 'value'\n    case 137327:                    // 'delete' 'variable'\n    case 137839:                    // 'delete' 'version'\n    case 139375:                    // 'delete' 'where'\n    case 139887:                    // 'delete' 'while'\n    case 141423:                    // 'delete' 'with'\n    case 143983:                    // 'delete' '{'\n    case 145007:                    // 'delete' '{|'\n      try_JSONDeleteExpr();\n      break;\n    case -9:\n    case 3233:                      // 'insert' EQName^Token\n    case 4257:                      // 'insert' IntegerLiteral\n    case 4769:                      // 'insert' DecimalLiteral\n    case 5281:                      // 'insert' DoubleLiteral\n    case 5793:                      // 'insert' StringLiteral\n    case 9889:                      // 'insert' NCName^Token\n    case 16033:                     // 'insert' '$'\n    case 16545:                     // 'insert' '$$'\n    case 17057:                     // 'insert' '%'\n    case 18593:                     // 'insert' '(#'\n    case 21153:                     // 'insert' '+'\n    case 22177:                     // 'insert' '-'\n    case 24225:                     // 'insert' '/'\n    case 24737:                     // 'insert' '//'\n    case 28321:                     // 'insert' '<'\n    case 28833:                     // 'insert' '<!--'\n    case 30881:                     // 'insert' '<?'\n    case 35489:                     // 'insert' '['\n    case 36513:                     // 'insert' 'after'\n    case 37537:                     // 'insert' 'allowing'\n    case 38049:                     // 'insert' 'ancestor'\n    case 38561:                     // 'insert' 'ancestor-or-self'\n    case 39073:                     // 'insert' 'and'\n    case 40097:                     // 'insert' 'append'\n    case 40609:                     // 'insert' 'array'\n    case 41121:                     // 'insert' 'as'\n    case 41633:                     // 'insert' 'ascending'\n    case 42145:                     // 'insert' 'at'\n    case 42657:                     // 'insert' 'attribute'\n    case 43169:                     // 'insert' 'base-uri'\n    case 43681:                     // 'insert' 'before'\n    case 44193:                     // 'insert' 'boundary-space'\n    case 44705:                     // 'insert' 'break'\n    case 45729:                     // 'insert' 'case'\n    case 46241:                     // 'insert' 'cast'\n    case 46753:                     // 'insert' 'castable'\n    case 47265:                     // 'insert' 'catch'\n    case 48289:                     // 'insert' 'child'\n    case 48801:                     // 'insert' 'collation'\n    case 49825:                     // 'insert' 'comment'\n    case 50337:                     // 'insert' 'constraint'\n    case 50849:                     // 'insert' 'construction'\n    case 52385:                     // 'insert' 'context'\n    case 52897:                     // 'insert' 'continue'\n    case 53409:                     // 'insert' 'copy'\n    case 53921:                     // 'insert' 'copy-namespaces'\n    case 54433:                     // 'insert' 'count'\n    case 54945:                     // 'insert' 'decimal-format'\n    case 55969:                     // 'insert' 'declare'\n    case 56481:                     // 'insert' 'default'\n    case 56993:                     // 'insert' 'delete'\n    case 57505:                     // 'insert' 'descendant'\n    case 58017:                     // 'insert' 'descendant-or-self'\n    case 58529:                     // 'insert' 'descending'\n    case 61089:                     // 'insert' 'div'\n    case 61601:                     // 'insert' 'document'\n    case 62113:                     // 'insert' 'document-node'\n    case 62625:                     // 'insert' 'element'\n    case 63137:                     // 'insert' 'else'\n    case 63649:                     // 'insert' 'empty'\n    case 64161:                     // 'insert' 'empty-sequence'\n    case 64673:                     // 'insert' 'encoding'\n    case 65185:                     // 'insert' 'end'\n    case 66209:                     // 'insert' 'eq'\n    case 66721:                     // 'insert' 'every'\n    case 67745:                     // 'insert' 'except'\n    case 68257:                     // 'insert' 'exit'\n    case 68769:                     // 'insert' 'external'\n    case 69281:                     // 'insert' 'false'\n    case 69793:                     // 'insert' 'first'\n    case 70305:                     // 'insert' 'following'\n    case 70817:                     // 'insert' 'following-sibling'\n    case 71329:                     // 'insert' 'for'\n    case 72865:                     // 'insert' 'from'\n    case 73377:                     // 'insert' 'ft-option'\n    case 75425:                     // 'insert' 'function'\n    case 75937:                     // 'insert' 'ge'\n    case 76961:                     // 'insert' 'group'\n    case 77985:                     // 'insert' 'gt'\n    case 78497:                     // 'insert' 'idiv'\n    case 79009:                     // 'insert' 'if'\n    case 79521:                     // 'insert' 'import'\n    case 80033:                     // 'insert' 'in'\n    case 80545:                     // 'insert' 'index'\n    case 82593:                     // 'insert' 'insert'\n    case 83105:                     // 'insert' 'instance'\n    case 83617:                     // 'insert' 'integrity'\n    case 84129:                     // 'insert' 'intersect'\n    case 84641:                     // 'insert' 'into'\n    case 85153:                     // 'insert' 'is'\n    case 85665:                     // 'insert' 'item'\n    case 86177:                     // 'insert' 'json'\n    case 86689:                     // 'insert' 'json-item'\n    case 87201:                     // 'insert' 'jsoniq'\n    case 88737:                     // 'insert' 'last'\n    case 89249:                     // 'insert' 'lax'\n    case 89761:                     // 'insert' 'le'\n    case 90785:                     // 'insert' 'let'\n    case 91809:                     // 'insert' 'loop'\n    case 92833:                     // 'insert' 'lt'\n    case 93857:                     // 'insert' 'mod'\n    case 94369:                     // 'insert' 'modify'\n    case 94881:                     // 'insert' 'module'\n    case 95905:                     // 'insert' 'namespace'\n    case 96417:                     // 'insert' 'namespace-node'\n    case 96929:                     // 'insert' 'ne'\n    case 100513:                    // 'insert' 'not'\n    case 101025:                    // 'insert' 'null'\n    case 101537:                    // 'insert' 'object'\n    case 103585:                    // 'insert' 'only'\n    case 104097:                    // 'insert' 'option'\n    case 104609:                    // 'insert' 'or'\n    case 105121:                    // 'insert' 'order'\n    case 105633:                    // 'insert' 'ordered'\n    case 106145:                    // 'insert' 'ordering'\n    case 107681:                    // 'insert' 'parent'\n    case 110753:                    // 'insert' 'preceding'\n    case 111265:                    // 'insert' 'preceding-sibling'\n    case 112801:                    // 'insert' 'processing-instruction'\n    case 113825:                    // 'insert' 'rename'\n    case 114337:                    // 'insert' 'replace'\n    case 114849:                    // 'insert' 'return'\n    case 115361:                    // 'insert' 'returning'\n    case 115873:                    // 'insert' 'revalidation'\n    case 116897:                    // 'insert' 'satisfies'\n    case 117409:                    // 'insert' 'schema'\n    case 117921:                    // 'insert' 'schema-attribute'\n    case 118433:                    // 'insert' 'schema-element'\n    case 118945:                    // 'insert' 'score'\n    case 119457:                    // 'insert' 'select'\n    case 119969:                    // 'insert' 'self'\n    case 122529:                    // 'insert' 'sliding'\n    case 123041:                    // 'insert' 'some'\n    case 123553:                    // 'insert' 'stable'\n    case 124065:                    // 'insert' 'start'\n    case 125601:                    // 'insert' 'strict'\n    case 126625:                    // 'insert' 'structured-item'\n    case 127137:                    // 'insert' 'switch'\n    case 127649:                    // 'insert' 'text'\n    case 129697:                    // 'insert' 'to'\n    case 130209:                    // 'insert' 'treat'\n    case 130721:                    // 'insert' 'true'\n    case 131233:                    // 'insert' 'try'\n    case 131745:                    // 'insert' 'tumbling'\n    case 132257:                    // 'insert' 'type'\n    case 132769:                    // 'insert' 'typeswitch'\n    case 133281:                    // 'insert' 'union'\n    case 134305:                    // 'insert' 'unordered'\n    case 134817:                    // 'insert' 'updating'\n    case 136353:                    // 'insert' 'validate'\n    case 136865:                    // 'insert' 'value'\n    case 137377:                    // 'insert' 'variable'\n    case 137889:                    // 'insert' 'version'\n    case 139425:                    // 'insert' 'where'\n    case 139937:                    // 'insert' 'while'\n    case 141473:                    // 'insert' 'with'\n    case 144033:                    // 'insert' '{'\n    case 145057:                    // 'insert' '{|'\n      try_JSONInsertExpr();\n      break;\n    case -10:\n    case 3294:                      // 'rename' EQName^Token\n    case 4318:                      // 'rename' IntegerLiteral\n    case 4830:                      // 'rename' DecimalLiteral\n    case 5342:                      // 'rename' DoubleLiteral\n    case 5854:                      // 'rename' StringLiteral\n    case 16094:                     // 'rename' '$'\n    case 16606:                     // 'rename' '$$'\n    case 17118:                     // 'rename' '%'\n    case 28382:                     // 'rename' '<'\n    case 28894:                     // 'rename' '<!--'\n    case 30942:                     // 'rename' '<?'\n    case 35550:                     // 'rename' '['\n    case 36574:                     // 'rename' 'after'\n    case 37598:                     // 'rename' 'allowing'\n    case 38110:                     // 'rename' 'ancestor'\n    case 38622:                     // 'rename' 'ancestor-or-self'\n    case 39134:                     // 'rename' 'and'\n    case 40158:                     // 'rename' 'append'\n    case 40670:                     // 'rename' 'array'\n    case 41182:                     // 'rename' 'as'\n    case 41694:                     // 'rename' 'ascending'\n    case 42206:                     // 'rename' 'at'\n    case 42718:                     // 'rename' 'attribute'\n    case 43230:                     // 'rename' 'base-uri'\n    case 43742:                     // 'rename' 'before'\n    case 44254:                     // 'rename' 'boundary-space'\n    case 44766:                     // 'rename' 'break'\n    case 45790:                     // 'rename' 'case'\n    case 46302:                     // 'rename' 'cast'\n    case 46814:                     // 'rename' 'castable'\n    case 47326:                     // 'rename' 'catch'\n    case 48350:                     // 'rename' 'child'\n    case 48862:                     // 'rename' 'collation'\n    case 49886:                     // 'rename' 'comment'\n    case 50398:                     // 'rename' 'constraint'\n    case 50910:                     // 'rename' 'construction'\n    case 52446:                     // 'rename' 'context'\n    case 52958:                     // 'rename' 'continue'\n    case 53470:                     // 'rename' 'copy'\n    case 53982:                     // 'rename' 'copy-namespaces'\n    case 54494:                     // 'rename' 'count'\n    case 55006:                     // 'rename' 'decimal-format'\n    case 56030:                     // 'rename' 'declare'\n    case 56542:                     // 'rename' 'default'\n    case 57054:                     // 'rename' 'delete'\n    case 57566:                     // 'rename' 'descendant'\n    case 58078:                     // 'rename' 'descendant-or-self'\n    case 58590:                     // 'rename' 'descending'\n    case 61150:                     // 'rename' 'div'\n    case 61662:                     // 'rename' 'document'\n    case 62174:                     // 'rename' 'document-node'\n    case 62686:                     // 'rename' 'element'\n    case 63198:                     // 'rename' 'else'\n    case 63710:                     // 'rename' 'empty'\n    case 64222:                     // 'rename' 'empty-sequence'\n    case 64734:                     // 'rename' 'encoding'\n    case 65246:                     // 'rename' 'end'\n    case 66270:                     // 'rename' 'eq'\n    case 66782:                     // 'rename' 'every'\n    case 67806:                     // 'rename' 'except'\n    case 68318:                     // 'rename' 'exit'\n    case 68830:                     // 'rename' 'external'\n    case 69342:                     // 'rename' 'false'\n    case 69854:                     // 'rename' 'first'\n    case 70366:                     // 'rename' 'following'\n    case 70878:                     // 'rename' 'following-sibling'\n    case 71390:                     // 'rename' 'for'\n    case 72926:                     // 'rename' 'from'\n    case 73438:                     // 'rename' 'ft-option'\n    case 75486:                     // 'rename' 'function'\n    case 75998:                     // 'rename' 'ge'\n    case 77022:                     // 'rename' 'group'\n    case 78046:                     // 'rename' 'gt'\n    case 78558:                     // 'rename' 'idiv'\n    case 79070:                     // 'rename' 'if'\n    case 79582:                     // 'rename' 'import'\n    case 80094:                     // 'rename' 'in'\n    case 80606:                     // 'rename' 'index'\n    case 82654:                     // 'rename' 'insert'\n    case 83166:                     // 'rename' 'instance'\n    case 83678:                     // 'rename' 'integrity'\n    case 84190:                     // 'rename' 'intersect'\n    case 84702:                     // 'rename' 'into'\n    case 85214:                     // 'rename' 'is'\n    case 85726:                     // 'rename' 'item'\n    case 86238:                     // 'rename' 'json'\n    case 86750:                     // 'rename' 'json-item'\n    case 87262:                     // 'rename' 'jsoniq'\n    case 88798:                     // 'rename' 'last'\n    case 89310:                     // 'rename' 'lax'\n    case 89822:                     // 'rename' 'le'\n    case 90846:                     // 'rename' 'let'\n    case 91870:                     // 'rename' 'loop'\n    case 92894:                     // 'rename' 'lt'\n    case 93918:                     // 'rename' 'mod'\n    case 94430:                     // 'rename' 'modify'\n    case 94942:                     // 'rename' 'module'\n    case 95966:                     // 'rename' 'namespace'\n    case 96478:                     // 'rename' 'namespace-node'\n    case 96990:                     // 'rename' 'ne'\n    case 100062:                    // 'rename' 'nodes'\n    case 101086:                    // 'rename' 'null'\n    case 101598:                    // 'rename' 'object'\n    case 103646:                    // 'rename' 'only'\n    case 104158:                    // 'rename' 'option'\n    case 104670:                    // 'rename' 'or'\n    case 105182:                    // 'rename' 'order'\n    case 105694:                    // 'rename' 'ordered'\n    case 106206:                    // 'rename' 'ordering'\n    case 107742:                    // 'rename' 'parent'\n    case 110814:                    // 'rename' 'preceding'\n    case 111326:                    // 'rename' 'preceding-sibling'\n    case 112862:                    // 'rename' 'processing-instruction'\n    case 113886:                    // 'rename' 'rename'\n    case 114398:                    // 'rename' 'replace'\n    case 114910:                    // 'rename' 'return'\n    case 115422:                    // 'rename' 'returning'\n    case 115934:                    // 'rename' 'revalidation'\n    case 116958:                    // 'rename' 'satisfies'\n    case 117470:                    // 'rename' 'schema'\n    case 117982:                    // 'rename' 'schema-attribute'\n    case 118494:                    // 'rename' 'schema-element'\n    case 119006:                    // 'rename' 'score'\n    case 119518:                    // 'rename' 'select'\n    case 120030:                    // 'rename' 'self'\n    case 122590:                    // 'rename' 'sliding'\n    case 123102:                    // 'rename' 'some'\n    case 123614:                    // 'rename' 'stable'\n    case 124126:                    // 'rename' 'start'\n    case 125662:                    // 'rename' 'strict'\n    case 126686:                    // 'rename' 'structured-item'\n    case 127198:                    // 'rename' 'switch'\n    case 127710:                    // 'rename' 'text'\n    case 129758:                    // 'rename' 'to'\n    case 130270:                    // 'rename' 'treat'\n    case 130782:                    // 'rename' 'true'\n    case 131294:                    // 'rename' 'try'\n    case 131806:                    // 'rename' 'tumbling'\n    case 132318:                    // 'rename' 'type'\n    case 132830:                    // 'rename' 'typeswitch'\n    case 133342:                    // 'rename' 'union'\n    case 134366:                    // 'rename' 'unordered'\n    case 134878:                    // 'rename' 'updating'\n    case 136414:                    // 'rename' 'validate'\n    case 136926:                    // 'rename' 'value'\n    case 137438:                    // 'rename' 'variable'\n    case 137950:                    // 'rename' 'version'\n    case 139486:                    // 'rename' 'where'\n    case 139998:                    // 'rename' 'while'\n    case 141534:                    // 'rename' 'with'\n    case 144094:                    // 'rename' '{'\n    case 145118:                    // 'rename' '{|'\n      try_JSONRenameExpr();\n      break;\n    case -11:\n      try_JSONReplaceExpr();\n      break;\n    case -12:\n    case 3150:                      // 'append' EQName^Token\n    case 4174:                      // 'append' IntegerLiteral\n    case 4686:                      // 'append' DecimalLiteral\n    case 5198:                      // 'append' DoubleLiteral\n    case 5710:                      // 'append' StringLiteral\n    case 15950:                     // 'append' '$'\n    case 16462:                     // 'append' '$$'\n    case 16974:                     // 'append' '%'\n    case 18510:                     // 'append' '(#'\n    case 21070:                     // 'append' '+'\n    case 22094:                     // 'append' '-'\n    case 24142:                     // 'append' '/'\n    case 24654:                     // 'append' '//'\n    case 28238:                     // 'append' '<'\n    case 28750:                     // 'append' '<!--'\n    case 30798:                     // 'append' '<?'\n    case 35406:                     // 'append' '['\n    case 36430:                     // 'append' 'after'\n    case 37454:                     // 'append' 'allowing'\n    case 37966:                     // 'append' 'ancestor'\n    case 38478:                     // 'append' 'ancestor-or-self'\n    case 38990:                     // 'append' 'and'\n    case 40014:                     // 'append' 'append'\n    case 40526:                     // 'append' 'array'\n    case 41038:                     // 'append' 'as'\n    case 41550:                     // 'append' 'ascending'\n    case 42062:                     // 'append' 'at'\n    case 42574:                     // 'append' 'attribute'\n    case 43086:                     // 'append' 'base-uri'\n    case 43598:                     // 'append' 'before'\n    case 44110:                     // 'append' 'boundary-space'\n    case 44622:                     // 'append' 'break'\n    case 45646:                     // 'append' 'case'\n    case 46158:                     // 'append' 'cast'\n    case 46670:                     // 'append' 'castable'\n    case 47182:                     // 'append' 'catch'\n    case 48206:                     // 'append' 'child'\n    case 48718:                     // 'append' 'collation'\n    case 49742:                     // 'append' 'comment'\n    case 50254:                     // 'append' 'constraint'\n    case 50766:                     // 'append' 'construction'\n    case 52302:                     // 'append' 'context'\n    case 52814:                     // 'append' 'continue'\n    case 53326:                     // 'append' 'copy'\n    case 53838:                     // 'append' 'copy-namespaces'\n    case 54350:                     // 'append' 'count'\n    case 54862:                     // 'append' 'decimal-format'\n    case 55886:                     // 'append' 'declare'\n    case 56398:                     // 'append' 'default'\n    case 56910:                     // 'append' 'delete'\n    case 57422:                     // 'append' 'descendant'\n    case 57934:                     // 'append' 'descendant-or-self'\n    case 58446:                     // 'append' 'descending'\n    case 61006:                     // 'append' 'div'\n    case 61518:                     // 'append' 'document'\n    case 62030:                     // 'append' 'document-node'\n    case 62542:                     // 'append' 'element'\n    case 63054:                     // 'append' 'else'\n    case 63566:                     // 'append' 'empty'\n    case 64078:                     // 'append' 'empty-sequence'\n    case 64590:                     // 'append' 'encoding'\n    case 65102:                     // 'append' 'end'\n    case 66126:                     // 'append' 'eq'\n    case 66638:                     // 'append' 'every'\n    case 67662:                     // 'append' 'except'\n    case 68174:                     // 'append' 'exit'\n    case 68686:                     // 'append' 'external'\n    case 69198:                     // 'append' 'false'\n    case 69710:                     // 'append' 'first'\n    case 70222:                     // 'append' 'following'\n    case 70734:                     // 'append' 'following-sibling'\n    case 71246:                     // 'append' 'for'\n    case 72782:                     // 'append' 'from'\n    case 73294:                     // 'append' 'ft-option'\n    case 75342:                     // 'append' 'function'\n    case 75854:                     // 'append' 'ge'\n    case 76878:                     // 'append' 'group'\n    case 77902:                     // 'append' 'gt'\n    case 78414:                     // 'append' 'idiv'\n    case 78926:                     // 'append' 'if'\n    case 79438:                     // 'append' 'import'\n    case 79950:                     // 'append' 'in'\n    case 80462:                     // 'append' 'index'\n    case 82510:                     // 'append' 'insert'\n    case 83022:                     // 'append' 'instance'\n    case 83534:                     // 'append' 'integrity'\n    case 84046:                     // 'append' 'intersect'\n    case 84558:                     // 'append' 'into'\n    case 85070:                     // 'append' 'is'\n    case 85582:                     // 'append' 'item'\n    case 86094:                     // 'append' 'json'\n    case 86606:                     // 'append' 'json-item'\n    case 87118:                     // 'append' 'jsoniq'\n    case 88654:                     // 'append' 'last'\n    case 89166:                     // 'append' 'lax'\n    case 89678:                     // 'append' 'le'\n    case 90702:                     // 'append' 'let'\n    case 91726:                     // 'append' 'loop'\n    case 92750:                     // 'append' 'lt'\n    case 93774:                     // 'append' 'mod'\n    case 94286:                     // 'append' 'modify'\n    case 94798:                     // 'append' 'module'\n    case 95822:                     // 'append' 'namespace'\n    case 96334:                     // 'append' 'namespace-node'\n    case 96846:                     // 'append' 'ne'\n    case 99406:                     // 'append' 'node'\n    case 99918:                     // 'append' 'nodes'\n    case 100430:                    // 'append' 'not'\n    case 100942:                    // 'append' 'null'\n    case 101454:                    // 'append' 'object'\n    case 103502:                    // 'append' 'only'\n    case 104014:                    // 'append' 'option'\n    case 104526:                    // 'append' 'or'\n    case 105038:                    // 'append' 'order'\n    case 105550:                    // 'append' 'ordered'\n    case 106062:                    // 'append' 'ordering'\n    case 107598:                    // 'append' 'parent'\n    case 110670:                    // 'append' 'preceding'\n    case 111182:                    // 'append' 'preceding-sibling'\n    case 112718:                    // 'append' 'processing-instruction'\n    case 113742:                    // 'append' 'rename'\n    case 114254:                    // 'append' 'replace'\n    case 114766:                    // 'append' 'return'\n    case 115278:                    // 'append' 'returning'\n    case 115790:                    // 'append' 'revalidation'\n    case 116814:                    // 'append' 'satisfies'\n    case 117326:                    // 'append' 'schema'\n    case 117838:                    // 'append' 'schema-attribute'\n    case 118350:                    // 'append' 'schema-element'\n    case 118862:                    // 'append' 'score'\n    case 119374:                    // 'append' 'select'\n    case 119886:                    // 'append' 'self'\n    case 122446:                    // 'append' 'sliding'\n    case 122958:                    // 'append' 'some'\n    case 123470:                    // 'append' 'stable'\n    case 123982:                    // 'append' 'start'\n    case 125518:                    // 'append' 'strict'\n    case 126542:                    // 'append' 'structured-item'\n    case 127054:                    // 'append' 'switch'\n    case 127566:                    // 'append' 'text'\n    case 129614:                    // 'append' 'to'\n    case 130126:                    // 'append' 'treat'\n    case 130638:                    // 'append' 'true'\n    case 131150:                    // 'append' 'try'\n    case 131662:                    // 'append' 'tumbling'\n    case 132174:                    // 'append' 'type'\n    case 132686:                    // 'append' 'typeswitch'\n    case 133198:                    // 'append' 'union'\n    case 134222:                    // 'append' 'unordered'\n    case 134734:                    // 'append' 'updating'\n    case 136270:                    // 'append' 'validate'\n    case 136782:                    // 'append' 'value'\n    case 137294:                    // 'append' 'variable'\n    case 137806:                    // 'append' 'version'\n    case 139342:                    // 'append' 'where'\n    case 139854:                    // 'append' 'while'\n    case 141390:                    // 'append' 'with'\n    case 143950:                    // 'append' '{'\n    case 144974:                    // 'append' '{|'\n      try_JSONAppendExpr();\n      break;\n    case -13:\n      break;\n    default:\n      try_OrExpr();\n    }\n  }\n\n  function parse_JSONDeleteExpr()\n  {\n    eventHandler.startNonterminal(\"JSONDeleteExpr\", e0);\n    shift(111);                     // 'delete'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(11, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(11, e0, lk);\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shift(168);                   // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    eventHandler.endNonterminal(\"JSONDeleteExpr\", e0);\n  }\n\n  function try_JSONDeleteExpr()\n  {\n    shiftT(111);                    // 'delete'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(11, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          memoize(11, e0A, -1);\n        }\n        catch (p1A)\n        {\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(11, e0A, -2);\n        }\n        lk = -2;\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shiftT(168);                  // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n  }\n\n  function parse_JSONInsertExpr()\n  {\n    eventHandler.startNonterminal(\"JSONInsertExpr\", e0);\n    switch (l1)\n    {\n    case 161:                       // 'insert'\n      lookahead2W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 9889)                 // 'insert' NCName^Token\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(161);              // 'insert'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          switch (l1)\n          {\n          case 168:                 // 'json'\n            lookahead2W(268);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 18088)          // 'json' '('\n          {\n            lk = memoized(13, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(168);        // 'json'\n                memoize(13, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(13, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1\n           || lk == 3240            // 'json' EQName^Token\n           || lk == 4264            // 'json' IntegerLiteral\n           || lk == 4776            // 'json' DecimalLiteral\n           || lk == 5288            // 'json' DoubleLiteral\n           || lk == 5800            // 'json' StringLiteral\n           || lk == 16040           // 'json' '$'\n           || lk == 16552           // 'json' '$$'\n           || lk == 17064           // 'json' '%'\n           || lk == 18600           // 'json' '(#'\n           || lk == 21160           // 'json' '+'\n           || lk == 22184           // 'json' '-'\n           || lk == 24232           // 'json' '/'\n           || lk == 24744           // 'json' '//'\n           || lk == 28328           // 'json' '<'\n           || lk == 28840           // 'json' '<!--'\n           || lk == 30888           // 'json' '<?'\n           || lk == 35496           // 'json' '['\n           || lk == 36520           // 'json' 'after'\n           || lk == 37544           // 'json' 'allowing'\n           || lk == 38056           // 'json' 'ancestor'\n           || lk == 38568           // 'json' 'ancestor-or-self'\n           || lk == 39080           // 'json' 'and'\n           || lk == 40104           // 'json' 'append'\n           || lk == 40616           // 'json' 'array'\n           || lk == 41128           // 'json' 'as'\n           || lk == 41640           // 'json' 'ascending'\n           || lk == 42152           // 'json' 'at'\n           || lk == 42664           // 'json' 'attribute'\n           || lk == 43176           // 'json' 'base-uri'\n           || lk == 43688           // 'json' 'before'\n           || lk == 44200           // 'json' 'boundary-space'\n           || lk == 44712           // 'json' 'break'\n           || lk == 45736           // 'json' 'case'\n           || lk == 46248           // 'json' 'cast'\n           || lk == 46760           // 'json' 'castable'\n           || lk == 47272           // 'json' 'catch'\n           || lk == 48296           // 'json' 'child'\n           || lk == 48808           // 'json' 'collation'\n           || lk == 49832           // 'json' 'comment'\n           || lk == 50344           // 'json' 'constraint'\n           || lk == 50856           // 'json' 'construction'\n           || lk == 52392           // 'json' 'context'\n           || lk == 52904           // 'json' 'continue'\n           || lk == 53416           // 'json' 'copy'\n           || lk == 53928           // 'json' 'copy-namespaces'\n           || lk == 54440           // 'json' 'count'\n           || lk == 54952           // 'json' 'decimal-format'\n           || lk == 55976           // 'json' 'declare'\n           || lk == 56488           // 'json' 'default'\n           || lk == 57000           // 'json' 'delete'\n           || lk == 57512           // 'json' 'descendant'\n           || lk == 58024           // 'json' 'descendant-or-self'\n           || lk == 58536           // 'json' 'descending'\n           || lk == 61096           // 'json' 'div'\n           || lk == 61608           // 'json' 'document'\n           || lk == 62120           // 'json' 'document-node'\n           || lk == 62632           // 'json' 'element'\n           || lk == 63144           // 'json' 'else'\n           || lk == 63656           // 'json' 'empty'\n           || lk == 64168           // 'json' 'empty-sequence'\n           || lk == 64680           // 'json' 'encoding'\n           || lk == 65192           // 'json' 'end'\n           || lk == 66216           // 'json' 'eq'\n           || lk == 66728           // 'json' 'every'\n           || lk == 67752           // 'json' 'except'\n           || lk == 68264           // 'json' 'exit'\n           || lk == 68776           // 'json' 'external'\n           || lk == 69288           // 'json' 'false'\n           || lk == 69800           // 'json' 'first'\n           || lk == 70312           // 'json' 'following'\n           || lk == 70824           // 'json' 'following-sibling'\n           || lk == 71336           // 'json' 'for'\n           || lk == 72872           // 'json' 'from'\n           || lk == 73384           // 'json' 'ft-option'\n           || lk == 75432           // 'json' 'function'\n           || lk == 75944           // 'json' 'ge'\n           || lk == 76968           // 'json' 'group'\n           || lk == 77992           // 'json' 'gt'\n           || lk == 78504           // 'json' 'idiv'\n           || lk == 79016           // 'json' 'if'\n           || lk == 79528           // 'json' 'import'\n           || lk == 80040           // 'json' 'in'\n           || lk == 80552           // 'json' 'index'\n           || lk == 82600           // 'json' 'insert'\n           || lk == 83112           // 'json' 'instance'\n           || lk == 83624           // 'json' 'integrity'\n           || lk == 84136           // 'json' 'intersect'\n           || lk == 84648           // 'json' 'into'\n           || lk == 85160           // 'json' 'is'\n           || lk == 85672           // 'json' 'item'\n           || lk == 86184           // 'json' 'json'\n           || lk == 86696           // 'json' 'json-item'\n           || lk == 87208           // 'json' 'jsoniq'\n           || lk == 88744           // 'json' 'last'\n           || lk == 89256           // 'json' 'lax'\n           || lk == 89768           // 'json' 'le'\n           || lk == 90792           // 'json' 'let'\n           || lk == 91816           // 'json' 'loop'\n           || lk == 92840           // 'json' 'lt'\n           || lk == 93864           // 'json' 'mod'\n           || lk == 94376           // 'json' 'modify'\n           || lk == 94888           // 'json' 'module'\n           || lk == 95912           // 'json' 'namespace'\n           || lk == 96424           // 'json' 'namespace-node'\n           || lk == 96936           // 'json' 'ne'\n           || lk == 99496           // 'json' 'node'\n           || lk == 100008          // 'json' 'nodes'\n           || lk == 100520          // 'json' 'not'\n           || lk == 101032          // 'json' 'null'\n           || lk == 101544          // 'json' 'object'\n           || lk == 103592          // 'json' 'only'\n           || lk == 104104          // 'json' 'option'\n           || lk == 104616          // 'json' 'or'\n           || lk == 105128          // 'json' 'order'\n           || lk == 105640          // 'json' 'ordered'\n           || lk == 106152          // 'json' 'ordering'\n           || lk == 107688          // 'json' 'parent'\n           || lk == 110760          // 'json' 'preceding'\n           || lk == 111272          // 'json' 'preceding-sibling'\n           || lk == 112808          // 'json' 'processing-instruction'\n           || lk == 113832          // 'json' 'rename'\n           || lk == 114344          // 'json' 'replace'\n           || lk == 114856          // 'json' 'return'\n           || lk == 115368          // 'json' 'returning'\n           || lk == 115880          // 'json' 'revalidation'\n           || lk == 116904          // 'json' 'satisfies'\n           || lk == 117416          // 'json' 'schema'\n           || lk == 117928          // 'json' 'schema-attribute'\n           || lk == 118440          // 'json' 'schema-element'\n           || lk == 118952          // 'json' 'score'\n           || lk == 119464          // 'json' 'select'\n           || lk == 119976          // 'json' 'self'\n           || lk == 122536          // 'json' 'sliding'\n           || lk == 123048          // 'json' 'some'\n           || lk == 123560          // 'json' 'stable'\n           || lk == 124072          // 'json' 'start'\n           || lk == 125608          // 'json' 'strict'\n           || lk == 126632          // 'json' 'structured-item'\n           || lk == 127144          // 'json' 'switch'\n           || lk == 127656          // 'json' 'text'\n           || lk == 129704          // 'json' 'to'\n           || lk == 130216          // 'json' 'treat'\n           || lk == 130728          // 'json' 'true'\n           || lk == 131240          // 'json' 'try'\n           || lk == 131752          // 'json' 'tumbling'\n           || lk == 132264          // 'json' 'type'\n           || lk == 132776          // 'json' 'typeswitch'\n           || lk == 133288          // 'json' 'union'\n           || lk == 134312          // 'json' 'unordered'\n           || lk == 134824          // 'json' 'updating'\n           || lk == 136360          // 'json' 'validate'\n           || lk == 136872          // 'json' 'value'\n           || lk == 137384          // 'json' 'variable'\n           || lk == 137896          // 'json' 'version'\n           || lk == 139432          // 'json' 'where'\n           || lk == 139944          // 'json' 'while'\n           || lk == 141480          // 'json' 'with'\n           || lk == 144040          // 'json' '{'\n           || lk == 145064)         // 'json' '{|'\n          {\n            shiftT(168);            // 'json'\n          }\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          try_ExprSingle();\n          shiftT(165);              // 'into'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          try_ExprSingle();\n          switch (l1)\n          {\n          case 82:                  // 'at'\n            lookahead2W(72);        // S^WS | '(:' | 'position'\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 110162)         // 'at' 'position'\n          {\n            lk = memoized(14, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(82);         // 'at'\n                lookahead1W(72);    // S^WS | '(:' | 'position'\n                shiftT(215);        // 'position'\n                lookahead1W(266);   // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                try_ExprSingle();\n                memoize(14, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(14, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1)\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n          }\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(12, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(161);                   // 'insert'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(13, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(13, e0, lk);\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shift(168);                 // 'json'\n      }\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n      shift(165);                   // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(72);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 110162)             // 'at' 'position'\n      {\n        lk = memoized(14, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(14, e0, lk);\n        }\n      }\n      if (lk == -1)\n      {\n        shift(82);                  // 'at'\n        lookahead1W(72);            // S^WS | '(:' | 'position'\n        shift(215);                 // 'position'\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n      break;\n    default:\n      shift(161);                   // 'insert'\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(281);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(15, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(15, e0, lk);\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 9896                // 'json' NCName^Token\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shift(168);                 // 'json'\n      }\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_PairConstructorList();\n      shift(165);                   // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"JSONInsertExpr\", e0);\n  }\n\n  function try_JSONInsertExpr()\n  {\n    switch (l1)\n    {\n    case 161:                       // 'insert'\n      lookahead2W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk != 9889)                 // 'insert' NCName^Token\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(161);              // 'insert'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          switch (l1)\n          {\n          case 168:                 // 'json'\n            lookahead2W(268);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 18088)          // 'json' '('\n          {\n            lk = memoized(13, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(168);        // 'json'\n                memoize(13, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(13, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1\n           || lk == 3240            // 'json' EQName^Token\n           || lk == 4264            // 'json' IntegerLiteral\n           || lk == 4776            // 'json' DecimalLiteral\n           || lk == 5288            // 'json' DoubleLiteral\n           || lk == 5800            // 'json' StringLiteral\n           || lk == 16040           // 'json' '$'\n           || lk == 16552           // 'json' '$$'\n           || lk == 17064           // 'json' '%'\n           || lk == 18600           // 'json' '(#'\n           || lk == 21160           // 'json' '+'\n           || lk == 22184           // 'json' '-'\n           || lk == 24232           // 'json' '/'\n           || lk == 24744           // 'json' '//'\n           || lk == 28328           // 'json' '<'\n           || lk == 28840           // 'json' '<!--'\n           || lk == 30888           // 'json' '<?'\n           || lk == 35496           // 'json' '['\n           || lk == 36520           // 'json' 'after'\n           || lk == 37544           // 'json' 'allowing'\n           || lk == 38056           // 'json' 'ancestor'\n           || lk == 38568           // 'json' 'ancestor-or-self'\n           || lk == 39080           // 'json' 'and'\n           || lk == 40104           // 'json' 'append'\n           || lk == 40616           // 'json' 'array'\n           || lk == 41128           // 'json' 'as'\n           || lk == 41640           // 'json' 'ascending'\n           || lk == 42152           // 'json' 'at'\n           || lk == 42664           // 'json' 'attribute'\n           || lk == 43176           // 'json' 'base-uri'\n           || lk == 43688           // 'json' 'before'\n           || lk == 44200           // 'json' 'boundary-space'\n           || lk == 44712           // 'json' 'break'\n           || lk == 45736           // 'json' 'case'\n           || lk == 46248           // 'json' 'cast'\n           || lk == 46760           // 'json' 'castable'\n           || lk == 47272           // 'json' 'catch'\n           || lk == 48296           // 'json' 'child'\n           || lk == 48808           // 'json' 'collation'\n           || lk == 49832           // 'json' 'comment'\n           || lk == 50344           // 'json' 'constraint'\n           || lk == 50856           // 'json' 'construction'\n           || lk == 52392           // 'json' 'context'\n           || lk == 52904           // 'json' 'continue'\n           || lk == 53416           // 'json' 'copy'\n           || lk == 53928           // 'json' 'copy-namespaces'\n           || lk == 54440           // 'json' 'count'\n           || lk == 54952           // 'json' 'decimal-format'\n           || lk == 55976           // 'json' 'declare'\n           || lk == 56488           // 'json' 'default'\n           || lk == 57000           // 'json' 'delete'\n           || lk == 57512           // 'json' 'descendant'\n           || lk == 58024           // 'json' 'descendant-or-self'\n           || lk == 58536           // 'json' 'descending'\n           || lk == 61096           // 'json' 'div'\n           || lk == 61608           // 'json' 'document'\n           || lk == 62120           // 'json' 'document-node'\n           || lk == 62632           // 'json' 'element'\n           || lk == 63144           // 'json' 'else'\n           || lk == 63656           // 'json' 'empty'\n           || lk == 64168           // 'json' 'empty-sequence'\n           || lk == 64680           // 'json' 'encoding'\n           || lk == 65192           // 'json' 'end'\n           || lk == 66216           // 'json' 'eq'\n           || lk == 66728           // 'json' 'every'\n           || lk == 67752           // 'json' 'except'\n           || lk == 68264           // 'json' 'exit'\n           || lk == 68776           // 'json' 'external'\n           || lk == 69288           // 'json' 'false'\n           || lk == 69800           // 'json' 'first'\n           || lk == 70312           // 'json' 'following'\n           || lk == 70824           // 'json' 'following-sibling'\n           || lk == 71336           // 'json' 'for'\n           || lk == 72872           // 'json' 'from'\n           || lk == 73384           // 'json' 'ft-option'\n           || lk == 75432           // 'json' 'function'\n           || lk == 75944           // 'json' 'ge'\n           || lk == 76968           // 'json' 'group'\n           || lk == 77992           // 'json' 'gt'\n           || lk == 78504           // 'json' 'idiv'\n           || lk == 79016           // 'json' 'if'\n           || lk == 79528           // 'json' 'import'\n           || lk == 80040           // 'json' 'in'\n           || lk == 80552           // 'json' 'index'\n           || lk == 82600           // 'json' 'insert'\n           || lk == 83112           // 'json' 'instance'\n           || lk == 83624           // 'json' 'integrity'\n           || lk == 84136           // 'json' 'intersect'\n           || lk == 84648           // 'json' 'into'\n           || lk == 85160           // 'json' 'is'\n           || lk == 85672           // 'json' 'item'\n           || lk == 86184           // 'json' 'json'\n           || lk == 86696           // 'json' 'json-item'\n           || lk == 87208           // 'json' 'jsoniq'\n           || lk == 88744           // 'json' 'last'\n           || lk == 89256           // 'json' 'lax'\n           || lk == 89768           // 'json' 'le'\n           || lk == 90792           // 'json' 'let'\n           || lk == 91816           // 'json' 'loop'\n           || lk == 92840           // 'json' 'lt'\n           || lk == 93864           // 'json' 'mod'\n           || lk == 94376           // 'json' 'modify'\n           || lk == 94888           // 'json' 'module'\n           || lk == 95912           // 'json' 'namespace'\n           || lk == 96424           // 'json' 'namespace-node'\n           || lk == 96936           // 'json' 'ne'\n           || lk == 99496           // 'json' 'node'\n           || lk == 100008          // 'json' 'nodes'\n           || lk == 100520          // 'json' 'not'\n           || lk == 101032          // 'json' 'null'\n           || lk == 101544          // 'json' 'object'\n           || lk == 103592          // 'json' 'only'\n           || lk == 104104          // 'json' 'option'\n           || lk == 104616          // 'json' 'or'\n           || lk == 105128          // 'json' 'order'\n           || lk == 105640          // 'json' 'ordered'\n           || lk == 106152          // 'json' 'ordering'\n           || lk == 107688          // 'json' 'parent'\n           || lk == 110760          // 'json' 'preceding'\n           || lk == 111272          // 'json' 'preceding-sibling'\n           || lk == 112808          // 'json' 'processing-instruction'\n           || lk == 113832          // 'json' 'rename'\n           || lk == 114344          // 'json' 'replace'\n           || lk == 114856          // 'json' 'return'\n           || lk == 115368          // 'json' 'returning'\n           || lk == 115880          // 'json' 'revalidation'\n           || lk == 116904          // 'json' 'satisfies'\n           || lk == 117416          // 'json' 'schema'\n           || lk == 117928          // 'json' 'schema-attribute'\n           || lk == 118440          // 'json' 'schema-element'\n           || lk == 118952          // 'json' 'score'\n           || lk == 119464          // 'json' 'select'\n           || lk == 119976          // 'json' 'self'\n           || lk == 122536          // 'json' 'sliding'\n           || lk == 123048          // 'json' 'some'\n           || lk == 123560          // 'json' 'stable'\n           || lk == 124072          // 'json' 'start'\n           || lk == 125608          // 'json' 'strict'\n           || lk == 126632          // 'json' 'structured-item'\n           || lk == 127144          // 'json' 'switch'\n           || lk == 127656          // 'json' 'text'\n           || lk == 129704          // 'json' 'to'\n           || lk == 130216          // 'json' 'treat'\n           || lk == 130728          // 'json' 'true'\n           || lk == 131240          // 'json' 'try'\n           || lk == 131752          // 'json' 'tumbling'\n           || lk == 132264          // 'json' 'type'\n           || lk == 132776          // 'json' 'typeswitch'\n           || lk == 133288          // 'json' 'union'\n           || lk == 134312          // 'json' 'unordered'\n           || lk == 134824          // 'json' 'updating'\n           || lk == 136360          // 'json' 'validate'\n           || lk == 136872          // 'json' 'value'\n           || lk == 137384          // 'json' 'variable'\n           || lk == 137896          // 'json' 'version'\n           || lk == 139432          // 'json' 'where'\n           || lk == 139944          // 'json' 'while'\n           || lk == 141480          // 'json' 'with'\n           || lk == 144040          // 'json' '{'\n           || lk == 145064)         // 'json' '{|'\n          {\n            shiftT(168);            // 'json'\n          }\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          try_ExprSingle();\n          shiftT(165);              // 'into'\n          lookahead1W(266);         // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n          try_ExprSingle();\n          switch (l1)\n          {\n          case 82:                  // 'at'\n            lookahead2W(72);        // S^WS | '(:' | 'position'\n            break;\n          default:\n            lk = l1;\n          }\n          if (lk == 110162)         // 'at' 'position'\n          {\n            lk = memoized(14, e0);\n            if (lk == 0)\n            {\n              var b0B = b0; var e0B = e0; var l1B = l1;\n              var b1B = b1; var e1B = e1; var l2B = l2;\n              var b2B = b2; var e2B = e2;\n              try\n              {\n                shiftT(82);         // 'at'\n                lookahead1W(72);    // S^WS | '(:' | 'position'\n                shiftT(215);        // 'position'\n                lookahead1W(266);   // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n                try_ExprSingle();\n                memoize(14, e0B, -1);\n              }\n              catch (p1B)\n              {\n                b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n                b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n                b2 = b2B; e2 = e2B; end = e2B; }}\n                memoize(14, e0B, -2);\n              }\n              lk = -2;\n            }\n          }\n          if (lk == -1)\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n          }\n          memoize(12, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(12, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(161);                  // 'insert'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(268);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(13, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            memoize(13, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(13, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shiftT(168);                // 'json'\n      }\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n      shiftT(165);                  // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n      switch (l1)\n      {\n      case 82:                      // 'at'\n        lookahead2W(72);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 110162)             // 'at' 'position'\n      {\n        lk = memoized(14, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(82);             // 'at'\n            lookahead1W(72);        // S^WS | '(:' | 'position'\n            shiftT(215);            // 'position'\n            lookahead1W(266);       // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n            try_ExprSingle();\n            memoize(14, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(14, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1)\n      {\n        shiftT(82);                 // 'at'\n        lookahead1W(72);            // S^WS | '(:' | 'position'\n        shiftT(215);                // 'position'\n        lookahead1W(266);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        try_ExprSingle();\n      }\n      break;\n    case -3:\n      break;\n    default:\n      shiftT(161);                  // 'insert'\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      switch (l1)\n      {\n      case 168:                     // 'json'\n        lookahead2W(281);           // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 18088)              // 'json' '('\n      {\n        lk = memoized(15, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(168);            // 'json'\n            memoize(15, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(15, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1\n       || lk == 3240                // 'json' EQName^Token\n       || lk == 4264                // 'json' IntegerLiteral\n       || lk == 4776                // 'json' DecimalLiteral\n       || lk == 5288                // 'json' DoubleLiteral\n       || lk == 5800                // 'json' StringLiteral\n       || lk == 9896                // 'json' NCName^Token\n       || lk == 16040               // 'json' '$'\n       || lk == 16552               // 'json' '$$'\n       || lk == 17064               // 'json' '%'\n       || lk == 18600               // 'json' '(#'\n       || lk == 21160               // 'json' '+'\n       || lk == 22184               // 'json' '-'\n       || lk == 24232               // 'json' '/'\n       || lk == 24744               // 'json' '//'\n       || lk == 28328               // 'json' '<'\n       || lk == 28840               // 'json' '<!--'\n       || lk == 30888               // 'json' '<?'\n       || lk == 35496               // 'json' '['\n       || lk == 36520               // 'json' 'after'\n       || lk == 37544               // 'json' 'allowing'\n       || lk == 38056               // 'json' 'ancestor'\n       || lk == 38568               // 'json' 'ancestor-or-self'\n       || lk == 39080               // 'json' 'and'\n       || lk == 40104               // 'json' 'append'\n       || lk == 40616               // 'json' 'array'\n       || lk == 41128               // 'json' 'as'\n       || lk == 41640               // 'json' 'ascending'\n       || lk == 42152               // 'json' 'at'\n       || lk == 42664               // 'json' 'attribute'\n       || lk == 43176               // 'json' 'base-uri'\n       || lk == 43688               // 'json' 'before'\n       || lk == 44200               // 'json' 'boundary-space'\n       || lk == 44712               // 'json' 'break'\n       || lk == 45736               // 'json' 'case'\n       || lk == 46248               // 'json' 'cast'\n       || lk == 46760               // 'json' 'castable'\n       || lk == 47272               // 'json' 'catch'\n       || lk == 48296               // 'json' 'child'\n       || lk == 48808               // 'json' 'collation'\n       || lk == 49832               // 'json' 'comment'\n       || lk == 50344               // 'json' 'constraint'\n       || lk == 50856               // 'json' 'construction'\n       || lk == 52392               // 'json' 'context'\n       || lk == 52904               // 'json' 'continue'\n       || lk == 53416               // 'json' 'copy'\n       || lk == 53928               // 'json' 'copy-namespaces'\n       || lk == 54440               // 'json' 'count'\n       || lk == 54952               // 'json' 'decimal-format'\n       || lk == 55976               // 'json' 'declare'\n       || lk == 56488               // 'json' 'default'\n       || lk == 57000               // 'json' 'delete'\n       || lk == 57512               // 'json' 'descendant'\n       || lk == 58024               // 'json' 'descendant-or-self'\n       || lk == 58536               // 'json' 'descending'\n       || lk == 61096               // 'json' 'div'\n       || lk == 61608               // 'json' 'document'\n       || lk == 62120               // 'json' 'document-node'\n       || lk == 62632               // 'json' 'element'\n       || lk == 63144               // 'json' 'else'\n       || lk == 63656               // 'json' 'empty'\n       || lk == 64168               // 'json' 'empty-sequence'\n       || lk == 64680               // 'json' 'encoding'\n       || lk == 65192               // 'json' 'end'\n       || lk == 66216               // 'json' 'eq'\n       || lk == 66728               // 'json' 'every'\n       || lk == 67752               // 'json' 'except'\n       || lk == 68264               // 'json' 'exit'\n       || lk == 68776               // 'json' 'external'\n       || lk == 69288               // 'json' 'false'\n       || lk == 69800               // 'json' 'first'\n       || lk == 70312               // 'json' 'following'\n       || lk == 70824               // 'json' 'following-sibling'\n       || lk == 71336               // 'json' 'for'\n       || lk == 72872               // 'json' 'from'\n       || lk == 73384               // 'json' 'ft-option'\n       || lk == 75432               // 'json' 'function'\n       || lk == 75944               // 'json' 'ge'\n       || lk == 76968               // 'json' 'group'\n       || lk == 77992               // 'json' 'gt'\n       || lk == 78504               // 'json' 'idiv'\n       || lk == 79016               // 'json' 'if'\n       || lk == 79528               // 'json' 'import'\n       || lk == 80040               // 'json' 'in'\n       || lk == 80552               // 'json' 'index'\n       || lk == 82600               // 'json' 'insert'\n       || lk == 83112               // 'json' 'instance'\n       || lk == 83624               // 'json' 'integrity'\n       || lk == 84136               // 'json' 'intersect'\n       || lk == 84648               // 'json' 'into'\n       || lk == 85160               // 'json' 'is'\n       || lk == 85672               // 'json' 'item'\n       || lk == 86184               // 'json' 'json'\n       || lk == 86696               // 'json' 'json-item'\n       || lk == 87208               // 'json' 'jsoniq'\n       || lk == 88744               // 'json' 'last'\n       || lk == 89256               // 'json' 'lax'\n       || lk == 89768               // 'json' 'le'\n       || lk == 90792               // 'json' 'let'\n       || lk == 91816               // 'json' 'loop'\n       || lk == 92840               // 'json' 'lt'\n       || lk == 93864               // 'json' 'mod'\n       || lk == 94376               // 'json' 'modify'\n       || lk == 94888               // 'json' 'module'\n       || lk == 95912               // 'json' 'namespace'\n       || lk == 96424               // 'json' 'namespace-node'\n       || lk == 96936               // 'json' 'ne'\n       || lk == 99496               // 'json' 'node'\n       || lk == 100008              // 'json' 'nodes'\n       || lk == 100520              // 'json' 'not'\n       || lk == 101032              // 'json' 'null'\n       || lk == 101544              // 'json' 'object'\n       || lk == 103592              // 'json' 'only'\n       || lk == 104104              // 'json' 'option'\n       || lk == 104616              // 'json' 'or'\n       || lk == 105128              // 'json' 'order'\n       || lk == 105640              // 'json' 'ordered'\n       || lk == 106152              // 'json' 'ordering'\n       || lk == 107688              // 'json' 'parent'\n       || lk == 110760              // 'json' 'preceding'\n       || lk == 111272              // 'json' 'preceding-sibling'\n       || lk == 112808              // 'json' 'processing-instruction'\n       || lk == 113832              // 'json' 'rename'\n       || lk == 114344              // 'json' 'replace'\n       || lk == 114856              // 'json' 'return'\n       || lk == 115368              // 'json' 'returning'\n       || lk == 115880              // 'json' 'revalidation'\n       || lk == 116904              // 'json' 'satisfies'\n       || lk == 117416              // 'json' 'schema'\n       || lk == 117928              // 'json' 'schema-attribute'\n       || lk == 118440              // 'json' 'schema-element'\n       || lk == 118952              // 'json' 'score'\n       || lk == 119464              // 'json' 'select'\n       || lk == 119976              // 'json' 'self'\n       || lk == 122536              // 'json' 'sliding'\n       || lk == 123048              // 'json' 'some'\n       || lk == 123560              // 'json' 'stable'\n       || lk == 124072              // 'json' 'start'\n       || lk == 125608              // 'json' 'strict'\n       || lk == 126632              // 'json' 'structured-item'\n       || lk == 127144              // 'json' 'switch'\n       || lk == 127656              // 'json' 'text'\n       || lk == 129704              // 'json' 'to'\n       || lk == 130216              // 'json' 'treat'\n       || lk == 130728              // 'json' 'true'\n       || lk == 131240              // 'json' 'try'\n       || lk == 131752              // 'json' 'tumbling'\n       || lk == 132264              // 'json' 'type'\n       || lk == 132776              // 'json' 'typeswitch'\n       || lk == 133288              // 'json' 'union'\n       || lk == 134312              // 'json' 'unordered'\n       || lk == 134824              // 'json' 'updating'\n       || lk == 136360              // 'json' 'validate'\n       || lk == 136872              // 'json' 'value'\n       || lk == 137384              // 'json' 'variable'\n       || lk == 137896              // 'json' 'version'\n       || lk == 139432              // 'json' 'where'\n       || lk == 139944              // 'json' 'while'\n       || lk == 141480              // 'json' 'with'\n       || lk == 144040              // 'json' '{'\n       || lk == 145064)             // 'json' '{|'\n      {\n        shiftT(168);                // 'json'\n      }\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_PairConstructorList();\n      shiftT(165);                  // 'into'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_ExprSingle();\n    }\n  }\n\n  function parse_JSONRenameExpr()\n  {\n    eventHandler.startNonterminal(\"JSONRenameExpr\", e0);\n    shift(222);                     // 'rename'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(16, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(16, e0, lk);\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shift(168);                   // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    shift(80);                      // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONRenameExpr\", e0);\n  }\n\n  function try_JSONRenameExpr()\n  {\n    shiftT(222);                    // 'rename'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(260);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(16, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          memoize(16, e0A, -1);\n        }\n        catch (p1A)\n        {\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(16, e0A, -2);\n        }\n        lk = -2;\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shiftT(168);                  // 'json'\n    }\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n    shiftT(80);                     // 'as'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_JSONReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"JSONReplaceExpr\", e0);\n    shift(223);                     // 'replace'\n    lookahead1W(85);                // S^WS | '(:' | 'value'\n    shift(267);                     // 'value'\n    lookahead1W(67);                // S^WS | '(:' | 'of'\n    shift(200);                     // 'of'\n    lookahead1W(59);                // S^WS | '(:' | 'json'\n    shift(168);                     // 'json'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    shift(276);                     // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONReplaceExpr\", e0);\n  }\n\n  function try_JSONReplaceExpr()\n  {\n    shiftT(223);                    // 'replace'\n    lookahead1W(85);                // S^WS | '(:' | 'value'\n    shiftT(267);                    // 'value'\n    lookahead1W(67);                // S^WS | '(:' | 'of'\n    shiftT(200);                    // 'of'\n    lookahead1W(59);                // S^WS | '(:' | 'json'\n    shiftT(168);                    // 'json'\n    lookahead1W(259);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n    shiftT(276);                    // 'with'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_JSONAppendExpr()\n  {\n    eventHandler.startNonterminal(\"JSONAppendExpr\", e0);\n    shift(78);                      // 'append'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(17, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(17, e0, lk);\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 18600                 // 'json' '(#'\n     || lk == 21160                 // 'json' '+'\n     || lk == 22184                 // 'json' '-'\n     || lk == 24232                 // 'json' '/'\n     || lk == 24744                 // 'json' '//'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 100520                // 'json' 'not'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shift(168);                   // 'json'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(165);                     // 'into'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONAppendExpr\", e0);\n  }\n\n  function try_JSONAppendExpr()\n  {\n    shiftT(78);                     // 'append'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    switch (l1)\n    {\n    case 168:                       // 'json'\n      lookahead2W(268);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 18088)                // 'json' '('\n    {\n      lk = memoized(17, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(168);              // 'json'\n          memoize(17, e0A, -1);\n        }\n        catch (p1A)\n        {\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(17, e0A, -2);\n        }\n        lk = -2;\n      }\n    }\n    if (lk == -1\n     || lk == 3240                  // 'json' EQName^Token\n     || lk == 4264                  // 'json' IntegerLiteral\n     || lk == 4776                  // 'json' DecimalLiteral\n     || lk == 5288                  // 'json' DoubleLiteral\n     || lk == 5800                  // 'json' StringLiteral\n     || lk == 16040                 // 'json' '$'\n     || lk == 16552                 // 'json' '$$'\n     || lk == 17064                 // 'json' '%'\n     || lk == 18600                 // 'json' '(#'\n     || lk == 21160                 // 'json' '+'\n     || lk == 22184                 // 'json' '-'\n     || lk == 24232                 // 'json' '/'\n     || lk == 24744                 // 'json' '//'\n     || lk == 28328                 // 'json' '<'\n     || lk == 28840                 // 'json' '<!--'\n     || lk == 30888                 // 'json' '<?'\n     || lk == 35496                 // 'json' '['\n     || lk == 36520                 // 'json' 'after'\n     || lk == 37544                 // 'json' 'allowing'\n     || lk == 38056                 // 'json' 'ancestor'\n     || lk == 38568                 // 'json' 'ancestor-or-self'\n     || lk == 39080                 // 'json' 'and'\n     || lk == 40104                 // 'json' 'append'\n     || lk == 40616                 // 'json' 'array'\n     || lk == 41128                 // 'json' 'as'\n     || lk == 41640                 // 'json' 'ascending'\n     || lk == 42152                 // 'json' 'at'\n     || lk == 42664                 // 'json' 'attribute'\n     || lk == 43176                 // 'json' 'base-uri'\n     || lk == 43688                 // 'json' 'before'\n     || lk == 44200                 // 'json' 'boundary-space'\n     || lk == 44712                 // 'json' 'break'\n     || lk == 45736                 // 'json' 'case'\n     || lk == 46248                 // 'json' 'cast'\n     || lk == 46760                 // 'json' 'castable'\n     || lk == 47272                 // 'json' 'catch'\n     || lk == 48296                 // 'json' 'child'\n     || lk == 48808                 // 'json' 'collation'\n     || lk == 49832                 // 'json' 'comment'\n     || lk == 50344                 // 'json' 'constraint'\n     || lk == 50856                 // 'json' 'construction'\n     || lk == 52392                 // 'json' 'context'\n     || lk == 52904                 // 'json' 'continue'\n     || lk == 53416                 // 'json' 'copy'\n     || lk == 53928                 // 'json' 'copy-namespaces'\n     || lk == 54440                 // 'json' 'count'\n     || lk == 54952                 // 'json' 'decimal-format'\n     || lk == 55976                 // 'json' 'declare'\n     || lk == 56488                 // 'json' 'default'\n     || lk == 57000                 // 'json' 'delete'\n     || lk == 57512                 // 'json' 'descendant'\n     || lk == 58024                 // 'json' 'descendant-or-self'\n     || lk == 58536                 // 'json' 'descending'\n     || lk == 61096                 // 'json' 'div'\n     || lk == 61608                 // 'json' 'document'\n     || lk == 62120                 // 'json' 'document-node'\n     || lk == 62632                 // 'json' 'element'\n     || lk == 63144                 // 'json' 'else'\n     || lk == 63656                 // 'json' 'empty'\n     || lk == 64168                 // 'json' 'empty-sequence'\n     || lk == 64680                 // 'json' 'encoding'\n     || lk == 65192                 // 'json' 'end'\n     || lk == 66216                 // 'json' 'eq'\n     || lk == 66728                 // 'json' 'every'\n     || lk == 67752                 // 'json' 'except'\n     || lk == 68264                 // 'json' 'exit'\n     || lk == 68776                 // 'json' 'external'\n     || lk == 69288                 // 'json' 'false'\n     || lk == 69800                 // 'json' 'first'\n     || lk == 70312                 // 'json' 'following'\n     || lk == 70824                 // 'json' 'following-sibling'\n     || lk == 71336                 // 'json' 'for'\n     || lk == 72872                 // 'json' 'from'\n     || lk == 73384                 // 'json' 'ft-option'\n     || lk == 75432                 // 'json' 'function'\n     || lk == 75944                 // 'json' 'ge'\n     || lk == 76968                 // 'json' 'group'\n     || lk == 77992                 // 'json' 'gt'\n     || lk == 78504                 // 'json' 'idiv'\n     || lk == 79016                 // 'json' 'if'\n     || lk == 79528                 // 'json' 'import'\n     || lk == 80040                 // 'json' 'in'\n     || lk == 80552                 // 'json' 'index'\n     || lk == 82600                 // 'json' 'insert'\n     || lk == 83112                 // 'json' 'instance'\n     || lk == 83624                 // 'json' 'integrity'\n     || lk == 84136                 // 'json' 'intersect'\n     || lk == 84648                 // 'json' 'into'\n     || lk == 85160                 // 'json' 'is'\n     || lk == 85672                 // 'json' 'item'\n     || lk == 86184                 // 'json' 'json'\n     || lk == 86696                 // 'json' 'json-item'\n     || lk == 87208                 // 'json' 'jsoniq'\n     || lk == 88744                 // 'json' 'last'\n     || lk == 89256                 // 'json' 'lax'\n     || lk == 89768                 // 'json' 'le'\n     || lk == 90792                 // 'json' 'let'\n     || lk == 91816                 // 'json' 'loop'\n     || lk == 92840                 // 'json' 'lt'\n     || lk == 93864                 // 'json' 'mod'\n     || lk == 94376                 // 'json' 'modify'\n     || lk == 94888                 // 'json' 'module'\n     || lk == 95912                 // 'json' 'namespace'\n     || lk == 96424                 // 'json' 'namespace-node'\n     || lk == 96936                 // 'json' 'ne'\n     || lk == 99496                 // 'json' 'node'\n     || lk == 100008                // 'json' 'nodes'\n     || lk == 100520                // 'json' 'not'\n     || lk == 101032                // 'json' 'null'\n     || lk == 101544                // 'json' 'object'\n     || lk == 103592                // 'json' 'only'\n     || lk == 104104                // 'json' 'option'\n     || lk == 104616                // 'json' 'or'\n     || lk == 105128                // 'json' 'order'\n     || lk == 105640                // 'json' 'ordered'\n     || lk == 106152                // 'json' 'ordering'\n     || lk == 107688                // 'json' 'parent'\n     || lk == 110760                // 'json' 'preceding'\n     || lk == 111272                // 'json' 'preceding-sibling'\n     || lk == 112808                // 'json' 'processing-instruction'\n     || lk == 113832                // 'json' 'rename'\n     || lk == 114344                // 'json' 'replace'\n     || lk == 114856                // 'json' 'return'\n     || lk == 115368                // 'json' 'returning'\n     || lk == 115880                // 'json' 'revalidation'\n     || lk == 116904                // 'json' 'satisfies'\n     || lk == 117416                // 'json' 'schema'\n     || lk == 117928                // 'json' 'schema-attribute'\n     || lk == 118440                // 'json' 'schema-element'\n     || lk == 118952                // 'json' 'score'\n     || lk == 119464                // 'json' 'select'\n     || lk == 119976                // 'json' 'self'\n     || lk == 122536                // 'json' 'sliding'\n     || lk == 123048                // 'json' 'some'\n     || lk == 123560                // 'json' 'stable'\n     || lk == 124072                // 'json' 'start'\n     || lk == 125608                // 'json' 'strict'\n     || lk == 126632                // 'json' 'structured-item'\n     || lk == 127144                // 'json' 'switch'\n     || lk == 127656                // 'json' 'text'\n     || lk == 129704                // 'json' 'to'\n     || lk == 130216                // 'json' 'treat'\n     || lk == 130728                // 'json' 'true'\n     || lk == 131240                // 'json' 'try'\n     || lk == 131752                // 'json' 'tumbling'\n     || lk == 132264                // 'json' 'type'\n     || lk == 132776                // 'json' 'typeswitch'\n     || lk == 133288                // 'json' 'union'\n     || lk == 134312                // 'json' 'unordered'\n     || lk == 134824                // 'json' 'updating'\n     || lk == 136360                // 'json' 'validate'\n     || lk == 136872                // 'json' 'value'\n     || lk == 137384                // 'json' 'variable'\n     || lk == 137896                // 'json' 'version'\n     || lk == 139432                // 'json' 'where'\n     || lk == 139944                // 'json' 'while'\n     || lk == 141480                // 'json' 'with'\n     || lk == 144040                // 'json' '{'\n     || lk == 145064)               // 'json' '{|'\n    {\n      shiftT(168);                  // 'json'\n    }\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n    shiftT(165);                    // 'into'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_CommonContent()\n  {\n    eventHandler.startNonterminal(\"CommonContent\", e0);\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shift(12);                    // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shift(23);                    // CharRef\n      break;\n    case 282:                       // '{{'\n      shift(282);                   // '{{'\n      break;\n    case 288:                       // '}}'\n      shift(288);                   // '}}'\n      break;\n    default:\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CommonContent\", e0);\n  }\n\n  function try_CommonContent()\n  {\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shiftT(12);                   // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shiftT(23);                   // CharRef\n      break;\n    case 282:                       // '{{'\n      shiftT(282);                  // '{{'\n      break;\n    case 288:                       // '}}'\n      shiftT(288);                  // '}}'\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_ContentExpr()\n  {\n    eventHandler.startNonterminal(\"ContentExpr\", e0);\n    parse_StatementsAndExpr();\n    eventHandler.endNonterminal(\"ContentExpr\", e0);\n  }\n\n  function try_ContentExpr()\n  {\n    try_StatementsAndExpr();\n  }\n\n  function parse_CompDocConstructor()\n  {\n    eventHandler.startNonterminal(\"CompDocConstructor\", e0);\n    shift(120);                     // 'document'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompDocConstructor\", e0);\n  }\n\n  function try_CompDocConstructor()\n  {\n    shiftT(120);                    // 'document'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompAttrConstructor()\n  {\n    eventHandler.startNonterminal(\"CompAttrConstructor\", e0);\n    shift(83);                      // 'attribute'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(18, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(18, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(281);                   // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompAttrConstructor\", e0);\n  }\n\n  function try_CompAttrConstructor()\n  {\n    shiftT(83);                     // 'attribute'\n    lookahead1W(249);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_Expr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(18, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          memoize(18, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(18, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(281);                  // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shiftT(287);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompPIConstructor()\n  {\n    eventHandler.startNonterminal(\"CompPIConstructor\", e0);\n    shift(220);                     // 'processing-instruction'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_Expr();\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_NCName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(19, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(19, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(281);                   // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shift(287);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompPIConstructor\", e0);\n  }\n\n  function try_CompPIConstructor()\n  {\n    shiftT(220);                    // 'processing-instruction'\n    lookahead1W(241);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shiftT(281);                  // '{'\n      lookahead1W(266);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_Expr();\n      shiftT(287);                  // '}'\n      break;\n    default:\n      try_NCName();\n    }\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      lookahead2W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 147225)               // '{' '}'\n    {\n      lk = memoized(19, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(281);              // '{'\n          lookahead1W(91);          // S^WS | '(:' | '}'\n          shiftT(287);              // '}'\n          memoize(19, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(19, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(281);                  // '{'\n      lookahead1W(91);              // S^WS | '(:' | '}'\n      shiftT(287);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"CompCommentConstructor\", e0);\n    shift(97);                      // 'comment'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompCommentConstructor\", e0);\n  }\n\n  function try_CompCommentConstructor()\n  {\n    shiftT(97);                     // 'comment'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompTextConstructor()\n  {\n    eventHandler.startNonterminal(\"CompTextConstructor\", e0);\n    shift(249);                     // 'text'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompTextConstructor\", e0);\n  }\n\n  function try_CompTextConstructor()\n  {\n    shiftT(249);                    // 'text'\n    lookahead1W(90);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_PrimaryExpr()\n  {\n    eventHandler.startNonterminal(\"PrimaryExpr\", e0);\n    switch (l1)\n    {\n    case 187:                       // 'namespace'\n      lookahead2W(246);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(244);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(252);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(97);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 262:                       // 'unordered'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3353                  // '{' EQName^Token\n     || lk == 4377                  // '{' IntegerLiteral\n     || lk == 4889                  // '{' DecimalLiteral\n     || lk == 5401                  // '{' DoubleLiteral\n     || lk == 5913                  // '{' StringLiteral\n     || lk == 16153                 // '{' '$'\n     || lk == 16665                 // '{' '$$'\n     || lk == 17177                 // '{' '%'\n     || lk == 18055                 // 'false' '('\n     || lk == 18117                 // 'null' '('\n     || lk == 18175                 // 'true' '('\n     || lk == 18201                 // '{' '('\n     || lk == 18713                 // '{' '(#'\n     || lk == 21273                 // '{' '+'\n     || lk == 22297                 // '{' '-'\n     || lk == 24345                 // '{' '/'\n     || lk == 24857                 // '{' '//'\n     || lk == 28441                 // '{' '<'\n     || lk == 28953                 // '{' '<!--'\n     || lk == 31001                 // '{' '<?'\n     || lk == 35609                 // '{' '['\n     || lk == 36633                 // '{' 'after'\n     || lk == 37657                 // '{' 'allowing'\n     || lk == 38169                 // '{' 'ancestor'\n     || lk == 38681                 // '{' 'ancestor-or-self'\n     || lk == 39193                 // '{' 'and'\n     || lk == 40217                 // '{' 'append'\n     || lk == 40729                 // '{' 'array'\n     || lk == 41241                 // '{' 'as'\n     || lk == 41753                 // '{' 'ascending'\n     || lk == 42265                 // '{' 'at'\n     || lk == 42777                 // '{' 'attribute'\n     || lk == 43289                 // '{' 'base-uri'\n     || lk == 43801                 // '{' 'before'\n     || lk == 44313                 // '{' 'boundary-space'\n     || lk == 44825                 // '{' 'break'\n     || lk == 45849                 // '{' 'case'\n     || lk == 46361                 // '{' 'cast'\n     || lk == 46873                 // '{' 'castable'\n     || lk == 47385                 // '{' 'catch'\n     || lk == 48409                 // '{' 'child'\n     || lk == 48921                 // '{' 'collation'\n     || lk == 49945                 // '{' 'comment'\n     || lk == 50457                 // '{' 'constraint'\n     || lk == 50969                 // '{' 'construction'\n     || lk == 52505                 // '{' 'context'\n     || lk == 53017                 // '{' 'continue'\n     || lk == 53529                 // '{' 'copy'\n     || lk == 54041                 // '{' 'copy-namespaces'\n     || lk == 54553                 // '{' 'count'\n     || lk == 55065                 // '{' 'decimal-format'\n     || lk == 56089                 // '{' 'declare'\n     || lk == 56601                 // '{' 'default'\n     || lk == 57113                 // '{' 'delete'\n     || lk == 57625                 // '{' 'descendant'\n     || lk == 58137                 // '{' 'descendant-or-self'\n     || lk == 58649                 // '{' 'descending'\n     || lk == 61209                 // '{' 'div'\n     || lk == 61721                 // '{' 'document'\n     || lk == 62233                 // '{' 'document-node'\n     || lk == 62745                 // '{' 'element'\n     || lk == 63257                 // '{' 'else'\n     || lk == 63769                 // '{' 'empty'\n     || lk == 64281                 // '{' 'empty-sequence'\n     || lk == 64793                 // '{' 'encoding'\n     || lk == 65305                 // '{' 'end'\n     || lk == 66329                 // '{' 'eq'\n     || lk == 66841                 // '{' 'every'\n     || lk == 67865                 // '{' 'except'\n     || lk == 68377                 // '{' 'exit'\n     || lk == 68889                 // '{' 'external'\n     || lk == 69401                 // '{' 'false'\n     || lk == 69913                 // '{' 'first'\n     || lk == 70425                 // '{' 'following'\n     || lk == 70937                 // '{' 'following-sibling'\n     || lk == 71449                 // '{' 'for'\n     || lk == 72985                 // '{' 'from'\n     || lk == 73497                 // '{' 'ft-option'\n     || lk == 75545                 // '{' 'function'\n     || lk == 76057                 // '{' 'ge'\n     || lk == 77081                 // '{' 'group'\n     || lk == 78105                 // '{' 'gt'\n     || lk == 78617                 // '{' 'idiv'\n     || lk == 79129                 // '{' 'if'\n     || lk == 79641                 // '{' 'import'\n     || lk == 80153                 // '{' 'in'\n     || lk == 80665                 // '{' 'index'\n     || lk == 82713                 // '{' 'insert'\n     || lk == 83225                 // '{' 'instance'\n     || lk == 83737                 // '{' 'integrity'\n     || lk == 84249                 // '{' 'intersect'\n     || lk == 84761                 // '{' 'into'\n     || lk == 85273                 // '{' 'is'\n     || lk == 85785                 // '{' 'item'\n     || lk == 86297                 // '{' 'json'\n     || lk == 86809                 // '{' 'json-item'\n     || lk == 87321                 // '{' 'jsoniq'\n     || lk == 88857                 // '{' 'last'\n     || lk == 89369                 // '{' 'lax'\n     || lk == 89881                 // '{' 'le'\n     || lk == 90905                 // '{' 'let'\n     || lk == 91929                 // '{' 'loop'\n     || lk == 92953                 // '{' 'lt'\n     || lk == 93977                 // '{' 'mod'\n     || lk == 94489                 // '{' 'modify'\n     || lk == 95001                 // '{' 'module'\n     || lk == 96025                 // '{' 'namespace'\n     || lk == 96537                 // '{' 'namespace-node'\n     || lk == 97049                 // '{' 'ne'\n     || lk == 99609                 // '{' 'node'\n     || lk == 100121                // '{' 'nodes'\n     || lk == 100633                // '{' 'not'\n     || lk == 101145                // '{' 'null'\n     || lk == 101657                // '{' 'object'\n     || lk == 103705                // '{' 'only'\n     || lk == 104217                // '{' 'option'\n     || lk == 104729                // '{' 'or'\n     || lk == 105241                // '{' 'order'\n     || lk == 105753                // '{' 'ordered'\n     || lk == 106265                // '{' 'ordering'\n     || lk == 107801                // '{' 'parent'\n     || lk == 110873                // '{' 'preceding'\n     || lk == 111385                // '{' 'preceding-sibling'\n     || lk == 112921                // '{' 'processing-instruction'\n     || lk == 113945                // '{' 'rename'\n     || lk == 114457                // '{' 'replace'\n     || lk == 114969                // '{' 'return'\n     || lk == 115481                // '{' 'returning'\n     || lk == 115993                // '{' 'revalidation'\n     || lk == 117017                // '{' 'satisfies'\n     || lk == 117529                // '{' 'schema'\n     || lk == 118041                // '{' 'schema-attribute'\n     || lk == 118553                // '{' 'schema-element'\n     || lk == 119065                // '{' 'score'\n     || lk == 119577                // '{' 'select'\n     || lk == 120089                // '{' 'self'\n     || lk == 122649                // '{' 'sliding'\n     || lk == 123161                // '{' 'some'\n     || lk == 123673                // '{' 'stable'\n     || lk == 124185                // '{' 'start'\n     || lk == 125721                // '{' 'strict'\n     || lk == 126745                // '{' 'structured-item'\n     || lk == 127257                // '{' 'switch'\n     || lk == 127769                // '{' 'text'\n     || lk == 129817                // '{' 'to'\n     || lk == 130329                // '{' 'treat'\n     || lk == 130841                // '{' 'true'\n     || lk == 131353                // '{' 'try'\n     || lk == 131865                // '{' 'tumbling'\n     || lk == 132377                // '{' 'type'\n     || lk == 132889                // '{' 'typeswitch'\n     || lk == 133401                // '{' 'union'\n     || lk == 134425                // '{' 'unordered'\n     || lk == 134937                // '{' 'updating'\n     || lk == 136473                // '{' 'validate'\n     || lk == 136985                // '{' 'value'\n     || lk == 137497                // '{' 'variable'\n     || lk == 138009                // '{' 'version'\n     || lk == 139545                // '{' 'where'\n     || lk == 140057                // '{' 'while'\n     || lk == 141593                // '{' 'with'\n     || lk == 144153                // '{' '{'\n     || lk == 145177                // '{' '{|'\n     || lk == 147225)               // '{' '}'\n    {\n      lk = memoized(20, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_Literal();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_FunctionCall();\n            lk = -5;\n          }\n          catch (p5A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockExpr();\n              lk = -10;\n            }\n            catch (p10A)\n            {\n              lk = -11;\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(20, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 12935:                     // 'false' EOF\n    case 12997:                     // 'null' EOF\n    case 13055:                     // 'true' EOF\n    case 13447:                     // 'false' '!'\n    case 13509:                     // 'null' '!'\n    case 13567:                     // 'true' '!'\n    case 13959:                     // 'false' '!='\n    case 14021:                     // 'null' '!='\n    case 14079:                     // 'true' '!='\n    case 19591:                     // 'false' ')'\n    case 19653:                     // 'null' ')'\n    case 19711:                     // 'true' ')'\n    case 20103:                     // 'false' '*'\n    case 20165:                     // 'null' '*'\n    case 20223:                     // 'true' '*'\n    case 21127:                     // 'false' '+'\n    case 21189:                     // 'null' '+'\n    case 21247:                     // 'true' '+'\n    case 21639:                     // 'false' ','\n    case 21701:                     // 'null' ','\n    case 21759:                     // 'true' ','\n    case 22151:                     // 'false' '-'\n    case 22213:                     // 'null' '-'\n    case 22271:                     // 'true' '-'\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 24199:                     // 'false' '/'\n    case 24261:                     // 'null' '/'\n    case 24319:                     // 'true' '/'\n    case 24711:                     // 'false' '//'\n    case 24773:                     // 'null' '//'\n    case 24831:                     // 'true' '//'\n    case 25735:                     // 'false' ':'\n    case 25797:                     // 'null' ':'\n    case 25855:                     // 'true' ':'\n    case 27783:                     // 'false' ';'\n    case 27845:                     // 'null' ';'\n    case 27903:                     // 'true' ';'\n    case 28295:                     // 'false' '<'\n    case 28357:                     // 'null' '<'\n    case 28415:                     // 'true' '<'\n    case 29831:                     // 'false' '<<'\n    case 29893:                     // 'null' '<<'\n    case 29951:                     // 'true' '<<'\n    case 30343:                     // 'false' '<='\n    case 30405:                     // 'null' '<='\n    case 30463:                     // 'true' '<='\n    case 31367:                     // 'false' '='\n    case 31429:                     // 'null' '='\n    case 31487:                     // 'true' '='\n    case 31879:                     // 'false' '>'\n    case 31941:                     // 'null' '>'\n    case 31999:                     // 'true' '>'\n    case 32391:                     // 'false' '>='\n    case 32453:                     // 'null' '>='\n    case 32511:                     // 'true' '>='\n    case 32903:                     // 'false' '>>'\n    case 32965:                     // 'null' '>>'\n    case 33023:                     // 'true' '>>'\n    case 35463:                     // 'false' '['\n    case 35525:                     // 'null' '['\n    case 35583:                     // 'true' '['\n    case 35975:                     // 'false' ']'\n    case 36037:                     // 'null' ']'\n    case 36095:                     // 'true' ']'\n    case 36487:                     // 'false' 'after'\n    case 36549:                     // 'null' 'after'\n    case 36607:                     // 'true' 'after'\n    case 39047:                     // 'false' 'and'\n    case 39109:                     // 'null' 'and'\n    case 39167:                     // 'true' 'and'\n    case 41095:                     // 'false' 'as'\n    case 41157:                     // 'null' 'as'\n    case 41215:                     // 'true' 'as'\n    case 41607:                     // 'false' 'ascending'\n    case 41669:                     // 'null' 'ascending'\n    case 41727:                     // 'true' 'ascending'\n    case 42119:                     // 'false' 'at'\n    case 42181:                     // 'null' 'at'\n    case 42239:                     // 'true' 'at'\n    case 43655:                     // 'false' 'before'\n    case 43717:                     // 'null' 'before'\n    case 43775:                     // 'true' 'before'\n    case 45191:                     // 'false' 'by'\n    case 45253:                     // 'null' 'by'\n    case 45311:                     // 'true' 'by'\n    case 45703:                     // 'false' 'case'\n    case 45765:                     // 'null' 'case'\n    case 45823:                     // 'true' 'case'\n    case 46215:                     // 'false' 'cast'\n    case 46277:                     // 'null' 'cast'\n    case 46335:                     // 'true' 'cast'\n    case 46727:                     // 'false' 'castable'\n    case 46789:                     // 'null' 'castable'\n    case 46847:                     // 'true' 'castable'\n    case 48775:                     // 'false' 'collation'\n    case 48837:                     // 'null' 'collation'\n    case 48895:                     // 'true' 'collation'\n    case 51335:                     // 'false' 'contains'\n    case 51397:                     // 'null' 'contains'\n    case 51455:                     // 'true' 'contains'\n    case 54407:                     // 'false' 'count'\n    case 54469:                     // 'null' 'count'\n    case 54527:                     // 'true' 'count'\n    case 56455:                     // 'false' 'default'\n    case 56517:                     // 'null' 'default'\n    case 56575:                     // 'true' 'default'\n    case 58503:                     // 'false' 'descending'\n    case 58565:                     // 'null' 'descending'\n    case 58623:                     // 'true' 'descending'\n    case 61063:                     // 'false' 'div'\n    case 61125:                     // 'null' 'div'\n    case 61183:                     // 'true' 'div'\n    case 63111:                     // 'false' 'else'\n    case 63173:                     // 'null' 'else'\n    case 63231:                     // 'true' 'else'\n    case 63623:                     // 'false' 'empty'\n    case 63685:                     // 'null' 'empty'\n    case 63743:                     // 'true' 'empty'\n    case 65159:                     // 'false' 'end'\n    case 65221:                     // 'null' 'end'\n    case 65279:                     // 'true' 'end'\n    case 66183:                     // 'false' 'eq'\n    case 66245:                     // 'null' 'eq'\n    case 66303:                     // 'true' 'eq'\n    case 67719:                     // 'false' 'except'\n    case 67781:                     // 'null' 'except'\n    case 67839:                     // 'true' 'except'\n    case 71303:                     // 'false' 'for'\n    case 71365:                     // 'null' 'for'\n    case 71423:                     // 'true' 'for'\n    case 75911:                     // 'false' 'ge'\n    case 75973:                     // 'null' 'ge'\n    case 76031:                     // 'true' 'ge'\n    case 76935:                     // 'false' 'group'\n    case 76997:                     // 'null' 'group'\n    case 77055:                     // 'true' 'group'\n    case 77959:                     // 'false' 'gt'\n    case 78021:                     // 'null' 'gt'\n    case 78079:                     // 'true' 'gt'\n    case 78471:                     // 'false' 'idiv'\n    case 78533:                     // 'null' 'idiv'\n    case 78591:                     // 'true' 'idiv'\n    case 83079:                     // 'false' 'instance'\n    case 83141:                     // 'null' 'instance'\n    case 83199:                     // 'true' 'instance'\n    case 84103:                     // 'false' 'intersect'\n    case 84165:                     // 'null' 'intersect'\n    case 84223:                     // 'true' 'intersect'\n    case 84615:                     // 'false' 'into'\n    case 84677:                     // 'null' 'into'\n    case 84735:                     // 'true' 'into'\n    case 85127:                     // 'false' 'is'\n    case 85189:                     // 'null' 'is'\n    case 85247:                     // 'true' 'is'\n    case 89735:                     // 'false' 'le'\n    case 89797:                     // 'null' 'le'\n    case 89855:                     // 'true' 'le'\n    case 90759:                     // 'false' 'let'\n    case 90821:                     // 'null' 'let'\n    case 90879:                     // 'true' 'let'\n    case 92807:                     // 'false' 'lt'\n    case 92869:                     // 'null' 'lt'\n    case 92927:                     // 'true' 'lt'\n    case 93831:                     // 'false' 'mod'\n    case 93893:                     // 'null' 'mod'\n    case 93951:                     // 'true' 'mod'\n    case 94343:                     // 'false' 'modify'\n    case 94405:                     // 'null' 'modify'\n    case 94463:                     // 'true' 'modify'\n    case 96903:                     // 'false' 'ne'\n    case 96965:                     // 'null' 'ne'\n    case 97023:                     // 'true' 'ne'\n    case 103559:                    // 'false' 'only'\n    case 103621:                    // 'null' 'only'\n    case 103679:                    // 'true' 'only'\n    case 104583:                    // 'false' 'or'\n    case 104645:                    // 'null' 'or'\n    case 104703:                    // 'true' 'or'\n    case 105095:                    // 'false' 'order'\n    case 105157:                    // 'null' 'order'\n    case 105215:                    // 'true' 'order'\n    case 107143:                    // 'false' 'paragraphs'\n    case 107205:                    // 'null' 'paragraphs'\n    case 107263:                    // 'true' 'paragraphs'\n    case 114823:                    // 'false' 'return'\n    case 114885:                    // 'null' 'return'\n    case 114943:                    // 'true' 'return'\n    case 116871:                    // 'false' 'satisfies'\n    case 116933:                    // 'null' 'satisfies'\n    case 116991:                    // 'true' 'satisfies'\n    case 121479:                    // 'false' 'sentences'\n    case 121541:                    // 'null' 'sentences'\n    case 121599:                    // 'true' 'sentences'\n    case 123527:                    // 'false' 'stable'\n    case 123589:                    // 'null' 'stable'\n    case 123647:                    // 'true' 'stable'\n    case 124039:                    // 'false' 'start'\n    case 124101:                    // 'null' 'start'\n    case 124159:                    // 'true' 'start'\n    case 129159:                    // 'false' 'times'\n    case 129221:                    // 'null' 'times'\n    case 129279:                    // 'true' 'times'\n    case 129671:                    // 'false' 'to'\n    case 129733:                    // 'null' 'to'\n    case 129791:                    // 'true' 'to'\n    case 130183:                    // 'false' 'treat'\n    case 130245:                    // 'null' 'treat'\n    case 130303:                    // 'true' 'treat'\n    case 133255:                    // 'false' 'union'\n    case 133317:                    // 'null' 'union'\n    case 133375:                    // 'true' 'union'\n    case 139399:                    // 'false' 'where'\n    case 139461:                    // 'null' 'where'\n    case 139519:                    // 'true' 'where'\n    case 141447:                    // 'false' 'with'\n    case 141509:                    // 'null' 'with'\n    case 141567:                    // 'true' 'with'\n    case 142983:                    // 'false' 'words'\n    case 143045:                    // 'null' 'words'\n    case 143103:                    // 'true' 'words'\n    case 145543:                    // 'false' '|'\n    case 145605:                    // 'null' '|'\n    case 145663:                    // 'true' '|'\n    case 146055:                    // 'false' '||'\n    case 146117:                    // 'null' '||'\n    case 146175:                    // 'true' '||'\n    case 146567:                    // 'false' '|}'\n    case 146629:                    // 'null' '|}'\n    case 146687:                    // 'true' '|}'\n    case 147079:                    // 'false' '}'\n    case 147141:                    // 'null' '}'\n    case 147199:                    // 'true' '}'\n      parse_Literal();\n      break;\n    case 31:                        // '$'\n      parse_VarRef();\n      break;\n    case 35:                        // '('\n      parse_ParenthesizedExpr();\n      break;\n    case 32:                        // '$$'\n      parse_ContextItemExpr();\n      break;\n    case -5:\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n      parse_FunctionCall();\n      break;\n    case 144078:                    // 'ordered' '{'\n      parse_OrderedExpr();\n      break;\n    case 144134:                    // 'unordered' '{'\n      parse_UnorderedExpr();\n      break;\n    case 33:                        // '%'\n    case 79:                        // 'array'\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 147:                       // 'function'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15016:                     // 'json' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15037:                     // 'ne' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n      parse_FunctionItemExpr();\n      break;\n    case -10:\n    case 27929:                     // '{' ';'\n      parse_BlockExpr();\n      break;\n    case -11:\n    case 10009:                     // '{' NCName^Token\n      parse_ObjectConstructor();\n      break;\n    case 69:                        // '['\n      parse_ArrayConstructor();\n      break;\n    case 283:                       // '{|'\n      parse_JSONSimpleObjectUnion();\n      break;\n    default:\n      parse_Constructor();\n    }\n    eventHandler.endNonterminal(\"PrimaryExpr\", e0);\n  }\n\n  function try_PrimaryExpr()\n  {\n    switch (l1)\n    {\n    case 187:                       // 'namespace'\n      lookahead2W(246);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(244);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 281:                       // '{'\n      lookahead2W(282);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(252);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(97);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 262:                       // 'unordered'\n      lookahead2W(148);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '.' |\n      break;\n    case 6:                         // EQName^Token\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 78:                        // 'append'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 104:                       // 'copy'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 111:                       // 'delete'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 130:                       // 'every'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 139:                       // 'for'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 161:                       // 'insert'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 177:                       // 'let'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 222:                       // 'rename'\n    case 223:                       // 'replace'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 240:                       // 'some'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 256:                       // 'try'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 266:                       // 'validate'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(95);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3353                  // '{' EQName^Token\n     || lk == 4377                  // '{' IntegerLiteral\n     || lk == 4889                  // '{' DecimalLiteral\n     || lk == 5401                  // '{' DoubleLiteral\n     || lk == 5913                  // '{' StringLiteral\n     || lk == 16153                 // '{' '$'\n     || lk == 16665                 // '{' '$$'\n     || lk == 17177                 // '{' '%'\n     || lk == 18055                 // 'false' '('\n     || lk == 18117                 // 'null' '('\n     || lk == 18175                 // 'true' '('\n     || lk == 18201                 // '{' '('\n     || lk == 18713                 // '{' '(#'\n     || lk == 21273                 // '{' '+'\n     || lk == 22297                 // '{' '-'\n     || lk == 24345                 // '{' '/'\n     || lk == 24857                 // '{' '//'\n     || lk == 28441                 // '{' '<'\n     || lk == 28953                 // '{' '<!--'\n     || lk == 31001                 // '{' '<?'\n     || lk == 35609                 // '{' '['\n     || lk == 36633                 // '{' 'after'\n     || lk == 37657                 // '{' 'allowing'\n     || lk == 38169                 // '{' 'ancestor'\n     || lk == 38681                 // '{' 'ancestor-or-self'\n     || lk == 39193                 // '{' 'and'\n     || lk == 40217                 // '{' 'append'\n     || lk == 40729                 // '{' 'array'\n     || lk == 41241                 // '{' 'as'\n     || lk == 41753                 // '{' 'ascending'\n     || lk == 42265                 // '{' 'at'\n     || lk == 42777                 // '{' 'attribute'\n     || lk == 43289                 // '{' 'base-uri'\n     || lk == 43801                 // '{' 'before'\n     || lk == 44313                 // '{' 'boundary-space'\n     || lk == 44825                 // '{' 'break'\n     || lk == 45849                 // '{' 'case'\n     || lk == 46361                 // '{' 'cast'\n     || lk == 46873                 // '{' 'castable'\n     || lk == 47385                 // '{' 'catch'\n     || lk == 48409                 // '{' 'child'\n     || lk == 48921                 // '{' 'collation'\n     || lk == 49945                 // '{' 'comment'\n     || lk == 50457                 // '{' 'constraint'\n     || lk == 50969                 // '{' 'construction'\n     || lk == 52505                 // '{' 'context'\n     || lk == 53017                 // '{' 'continue'\n     || lk == 53529                 // '{' 'copy'\n     || lk == 54041                 // '{' 'copy-namespaces'\n     || lk == 54553                 // '{' 'count'\n     || lk == 55065                 // '{' 'decimal-format'\n     || lk == 56089                 // '{' 'declare'\n     || lk == 56601                 // '{' 'default'\n     || lk == 57113                 // '{' 'delete'\n     || lk == 57625                 // '{' 'descendant'\n     || lk == 58137                 // '{' 'descendant-or-self'\n     || lk == 58649                 // '{' 'descending'\n     || lk == 61209                 // '{' 'div'\n     || lk == 61721                 // '{' 'document'\n     || lk == 62233                 // '{' 'document-node'\n     || lk == 62745                 // '{' 'element'\n     || lk == 63257                 // '{' 'else'\n     || lk == 63769                 // '{' 'empty'\n     || lk == 64281                 // '{' 'empty-sequence'\n     || lk == 64793                 // '{' 'encoding'\n     || lk == 65305                 // '{' 'end'\n     || lk == 66329                 // '{' 'eq'\n     || lk == 66841                 // '{' 'every'\n     || lk == 67865                 // '{' 'except'\n     || lk == 68377                 // '{' 'exit'\n     || lk == 68889                 // '{' 'external'\n     || lk == 69401                 // '{' 'false'\n     || lk == 69913                 // '{' 'first'\n     || lk == 70425                 // '{' 'following'\n     || lk == 70937                 // '{' 'following-sibling'\n     || lk == 71449                 // '{' 'for'\n     || lk == 72985                 // '{' 'from'\n     || lk == 73497                 // '{' 'ft-option'\n     || lk == 75545                 // '{' 'function'\n     || lk == 76057                 // '{' 'ge'\n     || lk == 77081                 // '{' 'group'\n     || lk == 78105                 // '{' 'gt'\n     || lk == 78617                 // '{' 'idiv'\n     || lk == 79129                 // '{' 'if'\n     || lk == 79641                 // '{' 'import'\n     || lk == 80153                 // '{' 'in'\n     || lk == 80665                 // '{' 'index'\n     || lk == 82713                 // '{' 'insert'\n     || lk == 83225                 // '{' 'instance'\n     || lk == 83737                 // '{' 'integrity'\n     || lk == 84249                 // '{' 'intersect'\n     || lk == 84761                 // '{' 'into'\n     || lk == 85273                 // '{' 'is'\n     || lk == 85785                 // '{' 'item'\n     || lk == 86297                 // '{' 'json'\n     || lk == 86809                 // '{' 'json-item'\n     || lk == 87321                 // '{' 'jsoniq'\n     || lk == 88857                 // '{' 'last'\n     || lk == 89369                 // '{' 'lax'\n     || lk == 89881                 // '{' 'le'\n     || lk == 90905                 // '{' 'let'\n     || lk == 91929                 // '{' 'loop'\n     || lk == 92953                 // '{' 'lt'\n     || lk == 93977                 // '{' 'mod'\n     || lk == 94489                 // '{' 'modify'\n     || lk == 95001                 // '{' 'module'\n     || lk == 96025                 // '{' 'namespace'\n     || lk == 96537                 // '{' 'namespace-node'\n     || lk == 97049                 // '{' 'ne'\n     || lk == 99609                 // '{' 'node'\n     || lk == 100121                // '{' 'nodes'\n     || lk == 100633                // '{' 'not'\n     || lk == 101145                // '{' 'null'\n     || lk == 101657                // '{' 'object'\n     || lk == 103705                // '{' 'only'\n     || lk == 104217                // '{' 'option'\n     || lk == 104729                // '{' 'or'\n     || lk == 105241                // '{' 'order'\n     || lk == 105753                // '{' 'ordered'\n     || lk == 106265                // '{' 'ordering'\n     || lk == 107801                // '{' 'parent'\n     || lk == 110873                // '{' 'preceding'\n     || lk == 111385                // '{' 'preceding-sibling'\n     || lk == 112921                // '{' 'processing-instruction'\n     || lk == 113945                // '{' 'rename'\n     || lk == 114457                // '{' 'replace'\n     || lk == 114969                // '{' 'return'\n     || lk == 115481                // '{' 'returning'\n     || lk == 115993                // '{' 'revalidation'\n     || lk == 117017                // '{' 'satisfies'\n     || lk == 117529                // '{' 'schema'\n     || lk == 118041                // '{' 'schema-attribute'\n     || lk == 118553                // '{' 'schema-element'\n     || lk == 119065                // '{' 'score'\n     || lk == 119577                // '{' 'select'\n     || lk == 120089                // '{' 'self'\n     || lk == 122649                // '{' 'sliding'\n     || lk == 123161                // '{' 'some'\n     || lk == 123673                // '{' 'stable'\n     || lk == 124185                // '{' 'start'\n     || lk == 125721                // '{' 'strict'\n     || lk == 126745                // '{' 'structured-item'\n     || lk == 127257                // '{' 'switch'\n     || lk == 127769                // '{' 'text'\n     || lk == 129817                // '{' 'to'\n     || lk == 130329                // '{' 'treat'\n     || lk == 130841                // '{' 'true'\n     || lk == 131353                // '{' 'try'\n     || lk == 131865                // '{' 'tumbling'\n     || lk == 132377                // '{' 'type'\n     || lk == 132889                // '{' 'typeswitch'\n     || lk == 133401                // '{' 'union'\n     || lk == 134425                // '{' 'unordered'\n     || lk == 134937                // '{' 'updating'\n     || lk == 136473                // '{' 'validate'\n     || lk == 136985                // '{' 'value'\n     || lk == 137497                // '{' 'variable'\n     || lk == 138009                // '{' 'version'\n     || lk == 139545                // '{' 'where'\n     || lk == 140057                // '{' 'while'\n     || lk == 141593                // '{' 'with'\n     || lk == 144153                // '{' '{'\n     || lk == 145177                // '{' '{|'\n     || lk == 147225)               // '{' '}'\n    {\n      lk = memoized(20, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_Literal();\n          memoize(20, e0A, -1);\n          lk = -14;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_FunctionCall();\n            memoize(20, e0A, -5);\n            lk = -14;\n          }\n          catch (p5A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockExpr();\n              memoize(20, e0A, -10);\n              lk = -14;\n            }\n            catch (p10A)\n            {\n              lk = -11;\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              memoize(20, e0A, -11);\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 12935:                     // 'false' EOF\n    case 12997:                     // 'null' EOF\n    case 13055:                     // 'true' EOF\n    case 13447:                     // 'false' '!'\n    case 13509:                     // 'null' '!'\n    case 13567:                     // 'true' '!'\n    case 13959:                     // 'false' '!='\n    case 14021:                     // 'null' '!='\n    case 14079:                     // 'true' '!='\n    case 19591:                     // 'false' ')'\n    case 19653:                     // 'null' ')'\n    case 19711:                     // 'true' ')'\n    case 20103:                     // 'false' '*'\n    case 20165:                     // 'null' '*'\n    case 20223:                     // 'true' '*'\n    case 21127:                     // 'false' '+'\n    case 21189:                     // 'null' '+'\n    case 21247:                     // 'true' '+'\n    case 21639:                     // 'false' ','\n    case 21701:                     // 'null' ','\n    case 21759:                     // 'true' ','\n    case 22151:                     // 'false' '-'\n    case 22213:                     // 'null' '-'\n    case 22271:                     // 'true' '-'\n    case 23175:                     // 'false' '.'\n    case 23237:                     // 'null' '.'\n    case 23295:                     // 'true' '.'\n    case 24199:                     // 'false' '/'\n    case 24261:                     // 'null' '/'\n    case 24319:                     // 'true' '/'\n    case 24711:                     // 'false' '//'\n    case 24773:                     // 'null' '//'\n    case 24831:                     // 'true' '//'\n    case 25735:                     // 'false' ':'\n    case 25797:                     // 'null' ':'\n    case 25855:                     // 'true' ':'\n    case 27783:                     // 'false' ';'\n    case 27845:                     // 'null' ';'\n    case 27903:                     // 'true' ';'\n    case 28295:                     // 'false' '<'\n    case 28357:                     // 'null' '<'\n    case 28415:                     // 'true' '<'\n    case 29831:                     // 'false' '<<'\n    case 29893:                     // 'null' '<<'\n    case 29951:                     // 'true' '<<'\n    case 30343:                     // 'false' '<='\n    case 30405:                     // 'null' '<='\n    case 30463:                     // 'true' '<='\n    case 31367:                     // 'false' '='\n    case 31429:                     // 'null' '='\n    case 31487:                     // 'true' '='\n    case 31879:                     // 'false' '>'\n    case 31941:                     // 'null' '>'\n    case 31999:                     // 'true' '>'\n    case 32391:                     // 'false' '>='\n    case 32453:                     // 'null' '>='\n    case 32511:                     // 'true' '>='\n    case 32903:                     // 'false' '>>'\n    case 32965:                     // 'null' '>>'\n    case 33023:                     // 'true' '>>'\n    case 35463:                     // 'false' '['\n    case 35525:                     // 'null' '['\n    case 35583:                     // 'true' '['\n    case 35975:                     // 'false' ']'\n    case 36037:                     // 'null' ']'\n    case 36095:                     // 'true' ']'\n    case 36487:                     // 'false' 'after'\n    case 36549:                     // 'null' 'after'\n    case 36607:                     // 'true' 'after'\n    case 39047:                     // 'false' 'and'\n    case 39109:                     // 'null' 'and'\n    case 39167:                     // 'true' 'and'\n    case 41095:                     // 'false' 'as'\n    case 41157:                     // 'null' 'as'\n    case 41215:                     // 'true' 'as'\n    case 41607:                     // 'false' 'ascending'\n    case 41669:                     // 'null' 'ascending'\n    case 41727:                     // 'true' 'ascending'\n    case 42119:                     // 'false' 'at'\n    case 42181:                     // 'null' 'at'\n    case 42239:                     // 'true' 'at'\n    case 43655:                     // 'false' 'before'\n    case 43717:                     // 'null' 'before'\n    case 43775:                     // 'true' 'before'\n    case 45191:                     // 'false' 'by'\n    case 45253:                     // 'null' 'by'\n    case 45311:                     // 'true' 'by'\n    case 45703:                     // 'false' 'case'\n    case 45765:                     // 'null' 'case'\n    case 45823:                     // 'true' 'case'\n    case 46215:                     // 'false' 'cast'\n    case 46277:                     // 'null' 'cast'\n    case 46335:                     // 'true' 'cast'\n    case 46727:                     // 'false' 'castable'\n    case 46789:                     // 'null' 'castable'\n    case 46847:                     // 'true' 'castable'\n    case 48775:                     // 'false' 'collation'\n    case 48837:                     // 'null' 'collation'\n    case 48895:                     // 'true' 'collation'\n    case 51335:                     // 'false' 'contains'\n    case 51397:                     // 'null' 'contains'\n    case 51455:                     // 'true' 'contains'\n    case 54407:                     // 'false' 'count'\n    case 54469:                     // 'null' 'count'\n    case 54527:                     // 'true' 'count'\n    case 56455:                     // 'false' 'default'\n    case 56517:                     // 'null' 'default'\n    case 56575:                     // 'true' 'default'\n    case 58503:                     // 'false' 'descending'\n    case 58565:                     // 'null' 'descending'\n    case 58623:                     // 'true' 'descending'\n    case 61063:                     // 'false' 'div'\n    case 61125:                     // 'null' 'div'\n    case 61183:                     // 'true' 'div'\n    case 63111:                     // 'false' 'else'\n    case 63173:                     // 'null' 'else'\n    case 63231:                     // 'true' 'else'\n    case 63623:                     // 'false' 'empty'\n    case 63685:                     // 'null' 'empty'\n    case 63743:                     // 'true' 'empty'\n    case 65159:                     // 'false' 'end'\n    case 65221:                     // 'null' 'end'\n    case 65279:                     // 'true' 'end'\n    case 66183:                     // 'false' 'eq'\n    case 66245:                     // 'null' 'eq'\n    case 66303:                     // 'true' 'eq'\n    case 67719:                     // 'false' 'except'\n    case 67781:                     // 'null' 'except'\n    case 67839:                     // 'true' 'except'\n    case 71303:                     // 'false' 'for'\n    case 71365:                     // 'null' 'for'\n    case 71423:                     // 'true' 'for'\n    case 75911:                     // 'false' 'ge'\n    case 75973:                     // 'null' 'ge'\n    case 76031:                     // 'true' 'ge'\n    case 76935:                     // 'false' 'group'\n    case 76997:                     // 'null' 'group'\n    case 77055:                     // 'true' 'group'\n    case 77959:                     // 'false' 'gt'\n    case 78021:                     // 'null' 'gt'\n    case 78079:                     // 'true' 'gt'\n    case 78471:                     // 'false' 'idiv'\n    case 78533:                     // 'null' 'idiv'\n    case 78591:                     // 'true' 'idiv'\n    case 83079:                     // 'false' 'instance'\n    case 83141:                     // 'null' 'instance'\n    case 83199:                     // 'true' 'instance'\n    case 84103:                     // 'false' 'intersect'\n    case 84165:                     // 'null' 'intersect'\n    case 84223:                     // 'true' 'intersect'\n    case 84615:                     // 'false' 'into'\n    case 84677:                     // 'null' 'into'\n    case 84735:                     // 'true' 'into'\n    case 85127:                     // 'false' 'is'\n    case 85189:                     // 'null' 'is'\n    case 85247:                     // 'true' 'is'\n    case 89735:                     // 'false' 'le'\n    case 89797:                     // 'null' 'le'\n    case 89855:                     // 'true' 'le'\n    case 90759:                     // 'false' 'let'\n    case 90821:                     // 'null' 'let'\n    case 90879:                     // 'true' 'let'\n    case 92807:                     // 'false' 'lt'\n    case 92869:                     // 'null' 'lt'\n    case 92927:                     // 'true' 'lt'\n    case 93831:                     // 'false' 'mod'\n    case 93893:                     // 'null' 'mod'\n    case 93951:                     // 'true' 'mod'\n    case 94343:                     // 'false' 'modify'\n    case 94405:                     // 'null' 'modify'\n    case 94463:                     // 'true' 'modify'\n    case 96903:                     // 'false' 'ne'\n    case 96965:                     // 'null' 'ne'\n    case 97023:                     // 'true' 'ne'\n    case 103559:                    // 'false' 'only'\n    case 103621:                    // 'null' 'only'\n    case 103679:                    // 'true' 'only'\n    case 104583:                    // 'false' 'or'\n    case 104645:                    // 'null' 'or'\n    case 104703:                    // 'true' 'or'\n    case 105095:                    // 'false' 'order'\n    case 105157:                    // 'null' 'order'\n    case 105215:                    // 'true' 'order'\n    case 107143:                    // 'false' 'paragraphs'\n    case 107205:                    // 'null' 'paragraphs'\n    case 107263:                    // 'true' 'paragraphs'\n    case 114823:                    // 'false' 'return'\n    case 114885:                    // 'null' 'return'\n    case 114943:                    // 'true' 'return'\n    case 116871:                    // 'false' 'satisfies'\n    case 116933:                    // 'null' 'satisfies'\n    case 116991:                    // 'true' 'satisfies'\n    case 121479:                    // 'false' 'sentences'\n    case 121541:                    // 'null' 'sentences'\n    case 121599:                    // 'true' 'sentences'\n    case 123527:                    // 'false' 'stable'\n    case 123589:                    // 'null' 'stable'\n    case 123647:                    // 'true' 'stable'\n    case 124039:                    // 'false' 'start'\n    case 124101:                    // 'null' 'start'\n    case 124159:                    // 'true' 'start'\n    case 129159:                    // 'false' 'times'\n    case 129221:                    // 'null' 'times'\n    case 129279:                    // 'true' 'times'\n    case 129671:                    // 'false' 'to'\n    case 129733:                    // 'null' 'to'\n    case 129791:                    // 'true' 'to'\n    case 130183:                    // 'false' 'treat'\n    case 130245:                    // 'null' 'treat'\n    case 130303:                    // 'true' 'treat'\n    case 133255:                    // 'false' 'union'\n    case 133317:                    // 'null' 'union'\n    case 133375:                    // 'true' 'union'\n    case 139399:                    // 'false' 'where'\n    case 139461:                    // 'null' 'where'\n    case 139519:                    // 'true' 'where'\n    case 141447:                    // 'false' 'with'\n    case 141509:                    // 'null' 'with'\n    case 141567:                    // 'true' 'with'\n    case 142983:                    // 'false' 'words'\n    case 143045:                    // 'null' 'words'\n    case 143103:                    // 'true' 'words'\n    case 145543:                    // 'false' '|'\n    case 145605:                    // 'null' '|'\n    case 145663:                    // 'true' '|'\n    case 146055:                    // 'false' '||'\n    case 146117:                    // 'null' '||'\n    case 146175:                    // 'true' '||'\n    case 146567:                    // 'false' '|}'\n    case 146629:                    // 'null' '|}'\n    case 146687:                    // 'true' '|}'\n    case 147079:                    // 'false' '}'\n    case 147141:                    // 'null' '}'\n    case 147199:                    // 'true' '}'\n      try_Literal();\n      break;\n    case 31:                        // '$'\n      try_VarRef();\n      break;\n    case 35:                        // '('\n      try_ParenthesizedExpr();\n      break;\n    case 32:                        // '$$'\n      try_ContextItemExpr();\n      break;\n    case -5:\n    case 17926:                     // EQName^Token '('\n    case 17991:                     // 'after' '('\n    case 17993:                     // 'allowing' '('\n    case 17994:                     // 'ancestor' '('\n    case 17995:                     // 'ancestor-or-self' '('\n    case 17996:                     // 'and' '('\n    case 17998:                     // 'append' '('\n    case 18000:                     // 'as' '('\n    case 18001:                     // 'ascending' '('\n    case 18002:                     // 'at' '('\n    case 18004:                     // 'base-uri' '('\n    case 18005:                     // 'before' '('\n    case 18006:                     // 'boundary-space' '('\n    case 18007:                     // 'break' '('\n    case 18009:                     // 'case' '('\n    case 18010:                     // 'cast' '('\n    case 18011:                     // 'castable' '('\n    case 18012:                     // 'catch' '('\n    case 18014:                     // 'child' '('\n    case 18015:                     // 'collation' '('\n    case 18018:                     // 'constraint' '('\n    case 18019:                     // 'construction' '('\n    case 18022:                     // 'context' '('\n    case 18023:                     // 'continue' '('\n    case 18024:                     // 'copy' '('\n    case 18025:                     // 'copy-namespaces' '('\n    case 18026:                     // 'count' '('\n    case 18027:                     // 'decimal-format' '('\n    case 18029:                     // 'declare' '('\n    case 18030:                     // 'default' '('\n    case 18031:                     // 'delete' '('\n    case 18032:                     // 'descendant' '('\n    case 18033:                     // 'descendant-or-self' '('\n    case 18034:                     // 'descending' '('\n    case 18039:                     // 'div' '('\n    case 18040:                     // 'document' '('\n    case 18043:                     // 'else' '('\n    case 18044:                     // 'empty' '('\n    case 18046:                     // 'encoding' '('\n    case 18047:                     // 'end' '('\n    case 18049:                     // 'eq' '('\n    case 18050:                     // 'every' '('\n    case 18052:                     // 'except' '('\n    case 18053:                     // 'exit' '('\n    case 18054:                     // 'external' '('\n    case 18056:                     // 'first' '('\n    case 18057:                     // 'following' '('\n    case 18058:                     // 'following-sibling' '('\n    case 18059:                     // 'for' '('\n    case 18062:                     // 'from' '('\n    case 18063:                     // 'ft-option' '('\n    case 18068:                     // 'ge' '('\n    case 18070:                     // 'group' '('\n    case 18072:                     // 'gt' '('\n    case 18073:                     // 'idiv' '('\n    case 18075:                     // 'import' '('\n    case 18076:                     // 'in' '('\n    case 18077:                     // 'index' '('\n    case 18081:                     // 'insert' '('\n    case 18082:                     // 'instance' '('\n    case 18083:                     // 'integrity' '('\n    case 18084:                     // 'intersect' '('\n    case 18085:                     // 'into' '('\n    case 18086:                     // 'is' '('\n    case 18088:                     // 'json' '('\n    case 18090:                     // 'jsoniq' '('\n    case 18093:                     // 'last' '('\n    case 18094:                     // 'lax' '('\n    case 18095:                     // 'le' '('\n    case 18097:                     // 'let' '('\n    case 18099:                     // 'loop' '('\n    case 18101:                     // 'lt' '('\n    case 18103:                     // 'mod' '('\n    case 18104:                     // 'modify' '('\n    case 18105:                     // 'module' '('\n    case 18107:                     // 'namespace' '('\n    case 18109:                     // 'ne' '('\n    case 18115:                     // 'nodes' '('\n    case 18118:                     // 'object' '('\n    case 18122:                     // 'only' '('\n    case 18123:                     // 'option' '('\n    case 18124:                     // 'or' '('\n    case 18125:                     // 'order' '('\n    case 18126:                     // 'ordered' '('\n    case 18127:                     // 'ordering' '('\n    case 18130:                     // 'parent' '('\n    case 18136:                     // 'preceding' '('\n    case 18137:                     // 'preceding-sibling' '('\n    case 18142:                     // 'rename' '('\n    case 18143:                     // 'replace' '('\n    case 18144:                     // 'return' '('\n    case 18145:                     // 'returning' '('\n    case 18146:                     // 'revalidation' '('\n    case 18148:                     // 'satisfies' '('\n    case 18149:                     // 'schema' '('\n    case 18152:                     // 'score' '('\n    case 18153:                     // 'select' '('\n    case 18154:                     // 'self' '('\n    case 18159:                     // 'sliding' '('\n    case 18160:                     // 'some' '('\n    case 18161:                     // 'stable' '('\n    case 18162:                     // 'start' '('\n    case 18165:                     // 'strict' '('\n    case 18173:                     // 'to' '('\n    case 18174:                     // 'treat' '('\n    case 18176:                     // 'try' '('\n    case 18177:                     // 'tumbling' '('\n    case 18178:                     // 'type' '('\n    case 18180:                     // 'union' '('\n    case 18182:                     // 'unordered' '('\n    case 18183:                     // 'updating' '('\n    case 18186:                     // 'validate' '('\n    case 18187:                     // 'value' '('\n    case 18188:                     // 'variable' '('\n    case 18189:                     // 'version' '('\n    case 18192:                     // 'where' '('\n    case 18193:                     // 'while' '('\n    case 18196:                     // 'with' '('\n      try_FunctionCall();\n      break;\n    case 144078:                    // 'ordered' '{'\n      try_OrderedExpr();\n      break;\n    case 144134:                    // 'unordered' '{'\n      try_UnorderedExpr();\n      break;\n    case 33:                        // '%'\n    case 79:                        // 'array'\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 147:                       // 'function'\n    case 154:                       // 'if'\n    case 167:                       // 'item'\n    case 169:                       // 'json-item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n    case 247:                       // 'structured-item'\n    case 248:                       // 'switch'\n    case 259:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14919:                     // 'after' '#'\n    case 14921:                     // 'allowing' '#'\n    case 14922:                     // 'ancestor' '#'\n    case 14923:                     // 'ancestor-or-self' '#'\n    case 14924:                     // 'and' '#'\n    case 14926:                     // 'append' '#'\n    case 14928:                     // 'as' '#'\n    case 14929:                     // 'ascending' '#'\n    case 14930:                     // 'at' '#'\n    case 14931:                     // 'attribute' '#'\n    case 14932:                     // 'base-uri' '#'\n    case 14933:                     // 'before' '#'\n    case 14934:                     // 'boundary-space' '#'\n    case 14935:                     // 'break' '#'\n    case 14937:                     // 'case' '#'\n    case 14938:                     // 'cast' '#'\n    case 14939:                     // 'castable' '#'\n    case 14940:                     // 'catch' '#'\n    case 14942:                     // 'child' '#'\n    case 14943:                     // 'collation' '#'\n    case 14945:                     // 'comment' '#'\n    case 14946:                     // 'constraint' '#'\n    case 14947:                     // 'construction' '#'\n    case 14950:                     // 'context' '#'\n    case 14951:                     // 'continue' '#'\n    case 14952:                     // 'copy' '#'\n    case 14953:                     // 'copy-namespaces' '#'\n    case 14954:                     // 'count' '#'\n    case 14955:                     // 'decimal-format' '#'\n    case 14957:                     // 'declare' '#'\n    case 14958:                     // 'default' '#'\n    case 14959:                     // 'delete' '#'\n    case 14960:                     // 'descendant' '#'\n    case 14961:                     // 'descendant-or-self' '#'\n    case 14962:                     // 'descending' '#'\n    case 14967:                     // 'div' '#'\n    case 14968:                     // 'document' '#'\n    case 14970:                     // 'element' '#'\n    case 14971:                     // 'else' '#'\n    case 14972:                     // 'empty' '#'\n    case 14974:                     // 'encoding' '#'\n    case 14975:                     // 'end' '#'\n    case 14977:                     // 'eq' '#'\n    case 14978:                     // 'every' '#'\n    case 14980:                     // 'except' '#'\n    case 14981:                     // 'exit' '#'\n    case 14982:                     // 'external' '#'\n    case 14983:                     // 'false' '#'\n    case 14984:                     // 'first' '#'\n    case 14985:                     // 'following' '#'\n    case 14986:                     // 'following-sibling' '#'\n    case 14987:                     // 'for' '#'\n    case 14990:                     // 'from' '#'\n    case 14991:                     // 'ft-option' '#'\n    case 14996:                     // 'ge' '#'\n    case 14998:                     // 'group' '#'\n    case 15000:                     // 'gt' '#'\n    case 15001:                     // 'idiv' '#'\n    case 15003:                     // 'import' '#'\n    case 15004:                     // 'in' '#'\n    case 15005:                     // 'index' '#'\n    case 15009:                     // 'insert' '#'\n    case 15010:                     // 'instance' '#'\n    case 15011:                     // 'integrity' '#'\n    case 15012:                     // 'intersect' '#'\n    case 15013:                     // 'into' '#'\n    case 15014:                     // 'is' '#'\n    case 15016:                     // 'json' '#'\n    case 15018:                     // 'jsoniq' '#'\n    case 15021:                     // 'last' '#'\n    case 15022:                     // 'lax' '#'\n    case 15023:                     // 'le' '#'\n    case 15025:                     // 'let' '#'\n    case 15027:                     // 'loop' '#'\n    case 15029:                     // 'lt' '#'\n    case 15031:                     // 'mod' '#'\n    case 15032:                     // 'modify' '#'\n    case 15033:                     // 'module' '#'\n    case 15035:                     // 'namespace' '#'\n    case 15037:                     // 'ne' '#'\n    case 15043:                     // 'nodes' '#'\n    case 15045:                     // 'null' '#'\n    case 15046:                     // 'object' '#'\n    case 15050:                     // 'only' '#'\n    case 15051:                     // 'option' '#'\n    case 15052:                     // 'or' '#'\n    case 15053:                     // 'order' '#'\n    case 15054:                     // 'ordered' '#'\n    case 15055:                     // 'ordering' '#'\n    case 15058:                     // 'parent' '#'\n    case 15064:                     // 'preceding' '#'\n    case 15065:                     // 'preceding-sibling' '#'\n    case 15068:                     // 'processing-instruction' '#'\n    case 15070:                     // 'rename' '#'\n    case 15071:                     // 'replace' '#'\n    case 15072:                     // 'return' '#'\n    case 15073:                     // 'returning' '#'\n    case 15074:                     // 'revalidation' '#'\n    case 15076:                     // 'satisfies' '#'\n    case 15077:                     // 'schema' '#'\n    case 15080:                     // 'score' '#'\n    case 15081:                     // 'select' '#'\n    case 15082:                     // 'self' '#'\n    case 15087:                     // 'sliding' '#'\n    case 15088:                     // 'some' '#'\n    case 15089:                     // 'stable' '#'\n    case 15090:                     // 'start' '#'\n    case 15093:                     // 'strict' '#'\n    case 15097:                     // 'text' '#'\n    case 15101:                     // 'to' '#'\n    case 15102:                     // 'treat' '#'\n    case 15103:                     // 'true' '#'\n    case 15104:                     // 'try' '#'\n    case 15105:                     // 'tumbling' '#'\n    case 15106:                     // 'type' '#'\n    case 15108:                     // 'union' '#'\n    case 15110:                     // 'unordered' '#'\n    case 15111:                     // 'updating' '#'\n    case 15114:                     // 'validate' '#'\n    case 15115:                     // 'value' '#'\n    case 15116:                     // 'variable' '#'\n    case 15117:                     // 'version' '#'\n    case 15120:                     // 'where' '#'\n    case 15121:                     // 'while' '#'\n    case 15124:                     // 'with' '#'\n      try_FunctionItemExpr();\n      break;\n    case -10:\n    case 27929:                     // '{' ';'\n      try_BlockExpr();\n      break;\n    case -11:\n    case 10009:                     // '{' NCName^Token\n      try_ObjectConstructor();\n      break;\n    case 69:                        // '['\n      try_ArrayConstructor();\n      break;\n    case 283:                       // '{|'\n      try_JSONSimpleObjectUnion();\n      break;\n    case -14:\n      break;\n    default:\n      try_Constructor();\n    }\n  }\n\n  function parse_JSONSimpleObjectUnion()\n  {\n    eventHandler.startNonterminal(\"JSONSimpleObjectUnion\", e0);\n    shift(283);                     // '{|'\n    lookahead1W(273);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 286)                  // '|}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(286);                     // '|}'\n    eventHandler.endNonterminal(\"JSONSimpleObjectUnion\", e0);\n  }\n\n  function try_JSONSimpleObjectUnion()\n  {\n    shiftT(283);                    // '{|'\n    lookahead1W(273);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 286)                  // '|}'\n    {\n      try_Expr();\n    }\n    shiftT(286);                    // '|}'\n  }\n\n  function parse_ObjectConstructor()\n  {\n    eventHandler.startNonterminal(\"ObjectConstructor\", e0);\n    shift(281);                     // '{'\n    lookahead1W(276);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      whitespace();\n      parse_PairConstructorList();\n    }\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"ObjectConstructor\", e0);\n  }\n\n  function try_ObjectConstructor()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(276);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 287)                  // '}'\n    {\n      try_PairConstructorList();\n    }\n    shiftT(287);                    // '}'\n  }\n\n  function parse_PairConstructorList()\n  {\n    eventHandler.startNonterminal(\"PairConstructorList\", e0);\n    parse_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shift(42);                    // ','\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_PairConstructor();\n    }\n    eventHandler.endNonterminal(\"PairConstructorList\", e0);\n  }\n\n  function try_PairConstructorList()\n  {\n    try_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 42)                 // ','\n      {\n        break;\n      }\n      shiftT(42);                   // ','\n      lookahead1W(267);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      try_PairConstructor();\n    }\n  }\n\n  function parse_PairConstructor()\n  {\n    eventHandler.startNonterminal(\"PairConstructor\", e0);\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(278);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 139:                       // 'for'\n      lookahead2W(187);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'sliding' | 'tumbling'\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(281);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 177:                       // 'let'\n      lookahead2W(178);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'score'\n      break;\n    case 187:                       // 'namespace'\n      lookahead2W(251);             // NCName^Token | S^WS | '#' | '(' | '(:' | ':' | 'after' | 'allowing' |\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(247);             // NCName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(180);             // S^WS | '#' | '(' | '(:' | ':' | 'node' | 'value'\n      break;\n    case 266:                       // 'validate'\n      lookahead2W(191);             // S^WS | '#' | '(' | '(:' | ':' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(256);             // EQName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(149);             // S^WS | '#' | '(:' | ':' | '{'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(261);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(165);             // S^WS | '#' | '$' | '(' | '(:' | ':'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(208);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '.' | '/' | '//' | ':' |\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 256:                       // 'try'\n    case 262:                       // 'unordered'\n      lookahead2W(167);             // S^WS | '#' | '(' | '(:' | ':' | '{'\n      break;\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 167:                       // 'item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n      lookahead2W(96);              // S^WS | '#' | '(:' | ':'\n      break;\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 154:                       // 'if'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 248:                       // 'switch'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 259:                       // 'typeswitch'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(144);             // S^WS | '#' | '(' | '(:' | ':'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855)                // 'true' ':'\n    {\n      lk = memoized(21, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ExprSingle();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(21, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n    case 19:                        // NCName^Token\n    case 25671:                     // 'after' ':'\n    case 25673:                     // 'allowing' ':'\n    case 25674:                     // 'ancestor' ':'\n    case 25675:                     // 'ancestor-or-self' ':'\n    case 25676:                     // 'and' ':'\n    case 25678:                     // 'append' ':'\n    case 25680:                     // 'as' ':'\n    case 25681:                     // 'ascending' ':'\n    case 25682:                     // 'at' ':'\n    case 25683:                     // 'attribute' ':'\n    case 25684:                     // 'base-uri' ':'\n    case 25685:                     // 'before' ':'\n    case 25686:                     // 'boundary-space' ':'\n    case 25687:                     // 'break' ':'\n    case 25689:                     // 'case' ':'\n    case 25690:                     // 'cast' ':'\n    case 25691:                     // 'castable' ':'\n    case 25692:                     // 'catch' ':'\n    case 25694:                     // 'child' ':'\n    case 25695:                     // 'collation' ':'\n    case 25697:                     // 'comment' ':'\n    case 25698:                     // 'constraint' ':'\n    case 25699:                     // 'construction' ':'\n    case 25702:                     // 'context' ':'\n    case 25703:                     // 'continue' ':'\n    case 25704:                     // 'copy' ':'\n    case 25705:                     // 'copy-namespaces' ':'\n    case 25706:                     // 'count' ':'\n    case 25707:                     // 'decimal-format' ':'\n    case 25709:                     // 'declare' ':'\n    case 25710:                     // 'default' ':'\n    case 25711:                     // 'delete' ':'\n    case 25712:                     // 'descendant' ':'\n    case 25713:                     // 'descendant-or-self' ':'\n    case 25714:                     // 'descending' ':'\n    case 25719:                     // 'div' ':'\n    case 25720:                     // 'document' ':'\n    case 25721:                     // 'document-node' ':'\n    case 25722:                     // 'element' ':'\n    case 25723:                     // 'else' ':'\n    case 25724:                     // 'empty' ':'\n    case 25725:                     // 'empty-sequence' ':'\n    case 25726:                     // 'encoding' ':'\n    case 25727:                     // 'end' ':'\n    case 25729:                     // 'eq' ':'\n    case 25730:                     // 'every' ':'\n    case 25732:                     // 'except' ':'\n    case 25733:                     // 'exit' ':'\n    case 25734:                     // 'external' ':'\n    case 25736:                     // 'first' ':'\n    case 25737:                     // 'following' ':'\n    case 25738:                     // 'following-sibling' ':'\n    case 25739:                     // 'for' ':'\n    case 25742:                     // 'from' ':'\n    case 25743:                     // 'ft-option' ':'\n    case 25747:                     // 'function' ':'\n    case 25748:                     // 'ge' ':'\n    case 25750:                     // 'group' ':'\n    case 25752:                     // 'gt' ':'\n    case 25753:                     // 'idiv' ':'\n    case 25754:                     // 'if' ':'\n    case 25755:                     // 'import' ':'\n    case 25756:                     // 'in' ':'\n    case 25757:                     // 'index' ':'\n    case 25761:                     // 'insert' ':'\n    case 25762:                     // 'instance' ':'\n    case 25763:                     // 'integrity' ':'\n    case 25764:                     // 'intersect' ':'\n    case 25765:                     // 'into' ':'\n    case 25766:                     // 'is' ':'\n    case 25767:                     // 'item' ':'\n    case 25768:                     // 'json' ':'\n    case 25770:                     // 'jsoniq' ':'\n    case 25773:                     // 'last' ':'\n    case 25774:                     // 'lax' ':'\n    case 25775:                     // 'le' ':'\n    case 25777:                     // 'let' ':'\n    case 25779:                     // 'loop' ':'\n    case 25781:                     // 'lt' ':'\n    case 25783:                     // 'mod' ':'\n    case 25784:                     // 'modify' ':'\n    case 25785:                     // 'module' ':'\n    case 25787:                     // 'namespace' ':'\n    case 25788:                     // 'namespace-node' ':'\n    case 25789:                     // 'ne' ':'\n    case 25794:                     // 'node' ':'\n    case 25795:                     // 'nodes' ':'\n    case 25798:                     // 'object' ':'\n    case 25802:                     // 'only' ':'\n    case 25803:                     // 'option' ':'\n    case 25804:                     // 'or' ':'\n    case 25805:                     // 'order' ':'\n    case 25806:                     // 'ordered' ':'\n    case 25807:                     // 'ordering' ':'\n    case 25810:                     // 'parent' ':'\n    case 25816:                     // 'preceding' ':'\n    case 25817:                     // 'preceding-sibling' ':'\n    case 25820:                     // 'processing-instruction' ':'\n    case 25822:                     // 'rename' ':'\n    case 25823:                     // 'replace' ':'\n    case 25824:                     // 'return' ':'\n    case 25825:                     // 'returning' ':'\n    case 25826:                     // 'revalidation' ':'\n    case 25828:                     // 'satisfies' ':'\n    case 25829:                     // 'schema' ':'\n    case 25830:                     // 'schema-attribute' ':'\n    case 25831:                     // 'schema-element' ':'\n    case 25832:                     // 'score' ':'\n    case 25833:                     // 'select' ':'\n    case 25834:                     // 'self' ':'\n    case 25839:                     // 'sliding' ':'\n    case 25840:                     // 'some' ':'\n    case 25841:                     // 'stable' ':'\n    case 25842:                     // 'start' ':'\n    case 25845:                     // 'strict' ':'\n    case 25848:                     // 'switch' ':'\n    case 25849:                     // 'text' ':'\n    case 25853:                     // 'to' ':'\n    case 25854:                     // 'treat' ':'\n    case 25856:                     // 'try' ':'\n    case 25857:                     // 'tumbling' ':'\n    case 25858:                     // 'type' ':'\n    case 25859:                     // 'typeswitch' ':'\n    case 25860:                     // 'union' ':'\n    case 25862:                     // 'unordered' ':'\n    case 25863:                     // 'updating' ':'\n    case 25866:                     // 'validate' ':'\n    case 25867:                     // 'value' ':'\n    case 25868:                     // 'variable' ':'\n    case 25869:                     // 'version' ':'\n    case 25872:                     // 'where' ':'\n    case 25873:                     // 'while' ':'\n    case 25876:                     // 'with' ':'\n      parse_NCName();\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    lookahead1W(26);                // S^WS | '(:' | ':'\n    shift(50);                      // ':'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"PairConstructor\", e0);\n  }\n\n  function try_PairConstructor()\n  {\n    switch (l1)\n    {\n    case 78:                        // 'append'\n      lookahead2W(278);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 139:                       // 'for'\n      lookahead2W(187);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'sliding' | 'tumbling'\n      break;\n    case 161:                       // 'insert'\n      lookahead2W(281);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 177:                       // 'let'\n      lookahead2W(178);             // S^WS | '#' | '$' | '(' | '(:' | ':' | 'score'\n      break;\n    case 187:                       // 'namespace'\n      lookahead2W(251);             // NCName^Token | S^WS | '#' | '(' | '(:' | ':' | 'after' | 'allowing' |\n      break;\n    case 220:                       // 'processing-instruction'\n      lookahead2W(247);             // NCName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 223:                       // 'replace'\n      lookahead2W(180);             // S^WS | '#' | '(' | '(:' | ':' | 'node' | 'value'\n      break;\n    case 266:                       // 'validate'\n      lookahead2W(191);             // S^WS | '#' | '(' | '(:' | ':' | 'lax' | 'strict' | 'type' | '{'\n      break;\n    case 83:                        // 'attribute'\n    case 122:                       // 'element'\n      lookahead2W(256);             // EQName^Token | S^WS | '#' | '(:' | ':' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 97:                        // 'comment'\n    case 249:                       // 'text'\n      lookahead2W(149);             // S^WS | '#' | '(:' | ':' | '{'\n      break;\n    case 111:                       // 'delete'\n    case 222:                       // 'rename'\n      lookahead2W(261);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      break;\n    case 104:                       // 'copy'\n    case 130:                       // 'every'\n    case 240:                       // 'some'\n      lookahead2W(165);             // S^WS | '#' | '$' | '(' | '(:' | ':'\n      break;\n    case 135:                       // 'false'\n    case 197:                       // 'null'\n    case 255:                       // 'true'\n      lookahead2W(208);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '.' | '/' | '//' | ':' |\n      break;\n    case 120:                       // 'document'\n    case 206:                       // 'ordered'\n    case 256:                       // 'try'\n    case 262:                       // 'unordered'\n      lookahead2W(167);             // S^WS | '#' | '(' | '(:' | ':' | '{'\n      break;\n    case 121:                       // 'document-node'\n    case 125:                       // 'empty-sequence'\n    case 167:                       // 'item'\n    case 188:                       // 'namespace-node'\n    case 194:                       // 'node'\n    case 230:                       // 'schema-attribute'\n    case 231:                       // 'schema-element'\n      lookahead2W(96);              // S^WS | '#' | '(:' | ':'\n      break;\n    case 71:                        // 'after'\n    case 73:                        // 'allowing'\n    case 74:                        // 'ancestor'\n    case 75:                        // 'ancestor-or-self'\n    case 76:                        // 'and'\n    case 80:                        // 'as'\n    case 81:                        // 'ascending'\n    case 82:                        // 'at'\n    case 84:                        // 'base-uri'\n    case 85:                        // 'before'\n    case 86:                        // 'boundary-space'\n    case 87:                        // 'break'\n    case 89:                        // 'case'\n    case 90:                        // 'cast'\n    case 91:                        // 'castable'\n    case 92:                        // 'catch'\n    case 94:                        // 'child'\n    case 95:                        // 'collation'\n    case 98:                        // 'constraint'\n    case 99:                        // 'construction'\n    case 102:                       // 'context'\n    case 103:                       // 'continue'\n    case 105:                       // 'copy-namespaces'\n    case 106:                       // 'count'\n    case 107:                       // 'decimal-format'\n    case 109:                       // 'declare'\n    case 110:                       // 'default'\n    case 112:                       // 'descendant'\n    case 113:                       // 'descendant-or-self'\n    case 114:                       // 'descending'\n    case 119:                       // 'div'\n    case 123:                       // 'else'\n    case 124:                       // 'empty'\n    case 126:                       // 'encoding'\n    case 127:                       // 'end'\n    case 129:                       // 'eq'\n    case 132:                       // 'except'\n    case 133:                       // 'exit'\n    case 134:                       // 'external'\n    case 136:                       // 'first'\n    case 137:                       // 'following'\n    case 138:                       // 'following-sibling'\n    case 142:                       // 'from'\n    case 143:                       // 'ft-option'\n    case 147:                       // 'function'\n    case 148:                       // 'ge'\n    case 150:                       // 'group'\n    case 152:                       // 'gt'\n    case 153:                       // 'idiv'\n    case 154:                       // 'if'\n    case 155:                       // 'import'\n    case 156:                       // 'in'\n    case 157:                       // 'index'\n    case 162:                       // 'instance'\n    case 163:                       // 'integrity'\n    case 164:                       // 'intersect'\n    case 165:                       // 'into'\n    case 166:                       // 'is'\n    case 168:                       // 'json'\n    case 170:                       // 'jsoniq'\n    case 173:                       // 'last'\n    case 174:                       // 'lax'\n    case 175:                       // 'le'\n    case 179:                       // 'loop'\n    case 181:                       // 'lt'\n    case 183:                       // 'mod'\n    case 184:                       // 'modify'\n    case 185:                       // 'module'\n    case 189:                       // 'ne'\n    case 195:                       // 'nodes'\n    case 198:                       // 'object'\n    case 202:                       // 'only'\n    case 203:                       // 'option'\n    case 204:                       // 'or'\n    case 205:                       // 'order'\n    case 207:                       // 'ordering'\n    case 210:                       // 'parent'\n    case 216:                       // 'preceding'\n    case 217:                       // 'preceding-sibling'\n    case 224:                       // 'return'\n    case 225:                       // 'returning'\n    case 226:                       // 'revalidation'\n    case 228:                       // 'satisfies'\n    case 229:                       // 'schema'\n    case 232:                       // 'score'\n    case 233:                       // 'select'\n    case 234:                       // 'self'\n    case 239:                       // 'sliding'\n    case 241:                       // 'stable'\n    case 242:                       // 'start'\n    case 245:                       // 'strict'\n    case 248:                       // 'switch'\n    case 253:                       // 'to'\n    case 254:                       // 'treat'\n    case 257:                       // 'tumbling'\n    case 258:                       // 'type'\n    case 259:                       // 'typeswitch'\n    case 260:                       // 'union'\n    case 263:                       // 'updating'\n    case 267:                       // 'value'\n    case 268:                       // 'variable'\n    case 269:                       // 'version'\n    case 272:                       // 'where'\n    case 273:                       // 'while'\n    case 276:                       // 'with'\n      lookahead2W(144);             // S^WS | '#' | '(' | '(:' | ':'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 25735                 // 'false' ':'\n     || lk == 25797                 // 'null' ':'\n     || lk == 25855)                // 'true' ':'\n    {\n      lk = memoized(21, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ExprSingle();\n          memoize(21, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(21, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n    case 19:                        // NCName^Token\n    case 25671:                     // 'after' ':'\n    case 25673:                     // 'allowing' ':'\n    case 25674:                     // 'ancestor' ':'\n    case 25675:                     // 'ancestor-or-self' ':'\n    case 25676:                     // 'and' ':'\n    case 25678:                     // 'append' ':'\n    case 25680:                     // 'as' ':'\n    case 25681:                     // 'ascending' ':'\n    case 25682:                     // 'at' ':'\n    case 25683:                     // 'attribute' ':'\n    case 25684:                     // 'base-uri' ':'\n    case 25685:                     // 'before' ':'\n    case 25686:                     // 'boundary-space' ':'\n    case 25687:                     // 'break' ':'\n    case 25689:                     // 'case' ':'\n    case 25690:                     // 'cast' ':'\n    case 25691:                     // 'castable' ':'\n    case 25692:                     // 'catch' ':'\n    case 25694:                     // 'child' ':'\n    case 25695:                     // 'collation' ':'\n    case 25697:                     // 'comment' ':'\n    case 25698:                     // 'constraint' ':'\n    case 25699:                     // 'construction' ':'\n    case 25702:                     // 'context' ':'\n    case 25703:                     // 'continue' ':'\n    case 25704:                     // 'copy' ':'\n    case 25705:                     // 'copy-namespaces' ':'\n    case 25706:                     // 'count' ':'\n    case 25707:                     // 'decimal-format' ':'\n    case 25709:                     // 'declare' ':'\n    case 25710:                     // 'default' ':'\n    case 25711:                     // 'delete' ':'\n    case 25712:                     // 'descendant' ':'\n    case 25713:                     // 'descendant-or-self' ':'\n    case 25714:                     // 'descending' ':'\n    case 25719:                     // 'div' ':'\n    case 25720:                     // 'document' ':'\n    case 25721:                     // 'document-node' ':'\n    case 25722:                     // 'element' ':'\n    case 25723:                     // 'else' ':'\n    case 25724:                     // 'empty' ':'\n    case 25725:                     // 'empty-sequence' ':'\n    case 25726:                     // 'encoding' ':'\n    case 25727:                     // 'end' ':'\n    case 25729:                     // 'eq' ':'\n    case 25730:                     // 'every' ':'\n    case 25732:                     // 'except' ':'\n    case 25733:                     // 'exit' ':'\n    case 25734:                     // 'external' ':'\n    case 25736:                     // 'first' ':'\n    case 25737:                     // 'following' ':'\n    case 25738:                     // 'following-sibling' ':'\n    case 25739:                     // 'for' ':'\n    case 25742:                     // 'from' ':'\n    case 25743:                     // 'ft-option' ':'\n    case 25747:                     // 'function' ':'\n    case 25748:                     // 'ge' ':'\n    case 25750:                     // 'group' ':'\n    case 25752:                     // 'gt' ':'\n    case 25753:                     // 'idiv' ':'\n    case 25754:                     // 'if' ':'\n    case 25755:                     // 'import' ':'\n    case 25756:                     // 'in' ':'\n    case 25757:                     // 'index' ':'\n    case 25761:                     // 'insert' ':'\n    case 25762:                     // 'instance' ':'\n    case 25763:                     // 'integrity' ':'\n    case 25764:                     // 'intersect' ':'\n    case 25765:                     // 'into' ':'\n    case 25766:                     // 'is' ':'\n    case 25767:                     // 'item' ':'\n    case 25768:                     // 'json' ':'\n    case 25770:                     // 'jsoniq' ':'\n    case 25773:                     // 'last' ':'\n    case 25774:                     // 'lax' ':'\n    case 25775:                     // 'le' ':'\n    case 25777:                     // 'let' ':'\n    case 25779:                     // 'loop' ':'\n    case 25781:                     // 'lt' ':'\n    case 25783:                     // 'mod' ':'\n    case 25784:                     // 'modify' ':'\n    case 25785:                     // 'module' ':'\n    case 25787:                     // 'namespace' ':'\n    case 25788:                     // 'namespace-node' ':'\n    case 25789:                     // 'ne' ':'\n    case 25794:                     // 'node' ':'\n    case 25795:                     // 'nodes' ':'\n    case 25798:                     // 'object' ':'\n    case 25802:                     // 'only' ':'\n    case 25803:                     // 'option' ':'\n    case 25804:                     // 'or' ':'\n    case 25805:                     // 'order' ':'\n    case 25806:                     // 'ordered' ':'\n    case 25807:                     // 'ordering' ':'\n    case 25810:                     // 'parent' ':'\n    case 25816:                     // 'preceding' ':'\n    case 25817:                     // 'preceding-sibling' ':'\n    case 25820:                     // 'processing-instruction' ':'\n    case 25822:                     // 'rename' ':'\n    case 25823:                     // 'replace' ':'\n    case 25824:                     // 'return' ':'\n    case 25825:                     // 'returning' ':'\n    case 25826:                     // 'revalidation' ':'\n    case 25828:                     // 'satisfies' ':'\n    case 25829:                     // 'schema' ':'\n    case 25830:                     // 'schema-attribute' ':'\n    case 25831:                     // 'schema-element' ':'\n    case 25832:                     // 'score' ':'\n    case 25833:                     // 'select' ':'\n    case 25834:                     // 'self' ':'\n    case 25839:                     // 'sliding' ':'\n    case 25840:                     // 'some' ':'\n    case 25841:                     // 'stable' ':'\n    case 25842:                     // 'start' ':'\n    case 25845:                     // 'strict' ':'\n    case 25848:                     // 'switch' ':'\n    case 25849:                     // 'text' ':'\n    case 25853:                     // 'to' ':'\n    case 25854:                     // 'treat' ':'\n    case 25856:                     // 'try' ':'\n    case 25857:                     // 'tumbling' ':'\n    case 25858:                     // 'type' ':'\n    case 25859:                     // 'typeswitch' ':'\n    case 25860:                     // 'union' ':'\n    case 25862:                     // 'unordered' ':'\n    case 25863:                     // 'updating' ':'\n    case 25866:                     // 'validate' ':'\n    case 25867:                     // 'value' ':'\n    case 25868:                     // 'variable' ':'\n    case 25869:                     // 'version' ':'\n    case 25872:                     // 'where' ':'\n    case 25873:                     // 'while' ':'\n    case 25876:                     // 'with' ':'\n      try_NCName();\n      break;\n    case -3:\n      break;\n    default:\n      try_ExprSingle();\n    }\n    lookahead1W(26);                // S^WS | '(:' | ':'\n    shiftT(50);                     // ':'\n    lookahead1W(266);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_ArrayConstructor()\n  {\n    eventHandler.startNonterminal(\"ArrayConstructor\", e0);\n    shift(69);                      // '['\n    lookahead1W(272);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 70)                   // ']'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(70);                      // ']'\n    eventHandler.endNonterminal(\"ArrayConstructor\", e0);\n  }\n\n  function try_ArrayConstructor()\n  {\n    shiftT(69);                     // '['\n    lookahead1W(272);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    if (l1 != 70)                   // ']'\n    {\n      try_Expr();\n    }\n    shiftT(70);                     // ']'\n  }\n\n  function parse_BlockExpr()\n  {\n    eventHandler.startNonterminal(\"BlockExpr\", e0);\n    shift(281);                     // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_StatementsAndOptionalExpr();\n    shift(287);                     // '}'\n    eventHandler.endNonterminal(\"BlockExpr\", e0);\n  }\n\n  function try_BlockExpr()\n  {\n    shiftT(281);                    // '{'\n    lookahead1W(280);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_StatementsAndOptionalExpr();\n    shiftT(287);                    // '}'\n  }\n\n  function parse_FunctionDecl()\n  {\n    eventHandler.startNonterminal(\"FunctionDecl\", e0);\n    shift(147);                     // 'function'\n    lookahead1W(245);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(35);                      // '('\n    lookahead1W(98);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(38);                      // ')'\n    lookahead1W(158);               // S^WS | '(:' | 'as' | 'external' | '{'\n    if (l1 == 80)                   // 'as'\n    {\n      whitespace();\n      parse_ReturnType();\n    }\n    lookahead1W(122);               // S^WS | '(:' | 'external' | '{'\n    switch (l1)\n    {\n    case 281:                       // '{'\n      shift(281);                   // '{'\n      lookahead1W(280);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n      whitespace();\n      parse_StatementsAndOptionalExpr();\n      shift(287);                   // '}'\n      break;\n    default:\n      shift(134);                   // 'external'\n    }\n    eventHandler.endNonterminal(\"FunctionDecl\", e0);\n  }\n\n  function parse_ReturnType()\n  {\n    eventHandler.startNonterminal(\"ReturnType\", e0);\n    shift(80);                      // 'as'\n    lookahead1W(253);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"ReturnType\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(JSONiqParser.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function shiftT(t)\n  {\n    if (l1 == t)\n    {\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function skip(code)\n  {\n    var b0W = b0; var e0W = e0; var l1W = l1;\n    var b1W = b1; var e1W = e1;\n\n    l1 = code; b1 = begin; e1 = end;\n    l2 = 0;\n\n    try_Whitespace();\n\n    b0 = b0W; e0 = e0W; l1 = l1W; if (l1 != 0) {\n    b1 = b1W; e1 = e1W; }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      eventHandler.whitespace(e0, b1);\n      e0 = b1;\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 22)               // S^WS\n      {\n        if (code != 37)             // '(:'\n        {\n          break;\n        }\n        skip(code);\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2W(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = matchW(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = match(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function error(b, e, s, l, t)\n  {\n    if (e >= ex)\n    {\n      bx = b;\n      ex = e;\n      sx = s;\n      lx = l;\n      tx = t;\n    }\n    throw new self.ParseException(bx, ex, sx, lx, tx);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var l2, b2, e2;\n  var bx, ex, sx, lx, tx;\n  var eventHandler;\n  var memo;\n\n  function memoize(i, e, v)\n  {\n    memo[(e << 5) + i] = v;\n  }\n\n  function memoized(i, e)\n  {\n    var v = memo[(e << 5) + i];\n    return typeof v != \"undefined\" ? v : 0;\n  }\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = JSONiqParser.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 8191; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = JSONiqParser.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = JSONiqParser.MAP1[(c0 & 15) + JSONiqParser.MAP1[(c1 & 31) + JSONiqParser.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (JSONiqParser.MAP2[m] > c0) hi = m - 1;\n          else if (JSONiqParser.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = JSONiqParser.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 13) + code - 1;\n      code = JSONiqParser.TRANSITION[(i0 & 31) + JSONiqParser.TRANSITION[i0 >> 5]];\n\n      if (code > 8191)\n      {\n        result = code;\n        code &= 8191;\n        end = current;\n      }\n    }\n\n    result >>= 13;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nJSONiqParser.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : JSONiqParser.INITIAL[tokenSetId] & 8191;\n  for (var i = 0; i < 289; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 4235 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = JSONiqParser.EXPECTED[(i0 & 3) + JSONiqParser.EXPECTED[(i1 & 3) + JSONiqParser.EXPECTED[(i2 & 15) + JSONiqParser.EXPECTED[i2 >> 4]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(JSONiqParser.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nJSONiqParser.MAP0 =\n[ 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 40, 30, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 40, 40\n];\n\nJSONiqParser.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 355, 371, 387, 423, 423, 423, 415, 339, 331, 339, 331, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 440, 440, 440, 440, 440, 440, 440, 324, 339, 339, 339, 339, 339, 339, 339, 339, 401, 423, 423, 424, 422, 423, 423, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 338, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 71, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 40, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 40, 30, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 30, 30, 40, 40, 40, 40, 40, 40, 40, 70, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70\n];\n\nJSONiqParser.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 40, 30, 40, 30, 30, 40\n];\n\nJSONiqParser.INITIAL =\n[ 1, 24578, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289\n];\n\nJSONiqParser.TRANSITION =\n[ 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 18432, 18508, 18512, 18508, 18508, 18471, 18503, 18452, 18508, 18544, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22565, 22594, 54694, 22641, 32640, 25253, 32640, 22707, 32640, 32640, 18907, 32640, 40804, 19219, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22757, 32640, 23442, 32640, 20728, 22822, 22912, 62853, 22949, 23023, 32640, 25253, 37379, 72986, 32640, 32640, 18907, 32640, 23058, 40482, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 23090, 32640, 70756, 57235, 23625, 57174, 23143, 53889, 57205, 23194, 32640, 44590, 57237, 72986, 32640, 32640, 18907, 32640, 23058, 18925, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 22132, 19073, 46732, 23294, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 23361, 32640, 61740, 23437, 23807, 23824, 22912, 35136, 23474, 23607, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 40461, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 57592, 32640, 53140, 23657, 43708, 23704, 23789, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 39259, 23856, 32640, 32640, 23893, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 73053, 22069, 23965, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24031, 32640, 23861, 32640, 22776, 24082, 22912, 56240, 24206, 24329, 32640, 25253, 32640, 24379, 32640, 32640, 18907, 32640, 23058, 57529, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24415, 24449, 24453, 24440, 24534, 24485, 24515, 24566, 24596, 24628, 32640, 32105, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 45903, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24678, 32640, 61740, 24746, 48361, 53140, 24789, 24808, 24825, 24857, 32640, 27397, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 45563, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 24907, 32640, 61740, 32640, 32640, 52064, 24984, 25013, 61799, 25045, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 25095, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 54034, 25151, 25188, 25171, 25235, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 25302, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 25340, 32640, 61740, 24702, 35413, 25353, 25385, 25402, 58363, 25449, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 25499, 32640, 61740, 32640, 32640, 53140, 25538, 25575, 25558, 25622, 32640, 25253, 32640, 72986, 32640, 32640, 49347, 54782, 64809, 35297, 64457, 32024, 25672, 25724, 32640, 25308, 42746, 72012, 48724, 25775, 59604, 63895, 70062, 53329, 26051, 44572, 32640, 32640, 53365, 69246, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 36217, 25878, 32640, 32640, 25912, 56403, 72012, 72012, 47453, 69896, 25776, 64787, 25947, 25982, 26472, 26016, 26050, 68602, 32640, 32640, 21278, 65491, 41507, 72012, 47768, 59999, 36922, 55439, 25983, 53287, 66001, 26051, 68608, 32640, 35129, 65495, 72012, 26084, 25776, 26132, 25983, 66375, 26051, 26181, 26227, 36550, 62167, 71378, 26264, 56947, 53286, 26299, 56814, 66968, 50229, 37146, 26336, 26407, 64681, 37193, 26609, 67516, 26450, 26504, 26590, 60773, 47253, 26654, 26722, 26771, 49912, 26461, 51539, 26820, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 29428, 26976, 69042, 27027, 27107, 32640, 25253, 32640, 27176, 32640, 32640, 18907, 32640, 35800, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 27212, 32640, 18617, 32640, 32640, 53140, 27264, 27332, 41428, 27379, 32640, 25253, 32640, 27446, 36386, 32640, 18907, 32640, 23058, 40482, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 27496, 32640, 61740, 32640, 32640, 45704, 22912, 32640, 27545, 27614, 32640, 25253, 32640, 27679, 32640, 32640, 49347, 54782, 51035, 35297, 32640, 32024, 32640, 27715, 32640, 25308, 72012, 72012, 48724, 25776, 59604, 25983, 61672, 26051, 26051, 49853, 32640, 32640, 70980, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 40010, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 27753, 25776, 25776, 39830, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 27795, 25776, 60349, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 27836, 32640, 26232, 27985, 34535, 60068, 27930, 27958, 60099, 28032, 32640, 32366, 32640, 72986, 32640, 32640, 73079, 29194, 30273, 28620, 31154, 44986, 32640, 18612, 18649, 18757, 18789, 18959, 32755, 28084, 30249, 28403, 29274, 28141, 28173, 28885, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21681, 28259, 30189, 28317, 28376, 29214, 30382, 28201, 30288, 28732, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 28435, 28285, 28497, 28109, 28529, 28561, 28593, 28652, 28684, 28716, 19661, 19735, 19811, 19878, 19910, 19942, 28764, 21709, 32781, 28826, 28935, 28991, 29023, 29361, 30055, 20090, 20138, 20211, 20265, 29171, 28465, 29246, 28344, 29334, 29302, 29393, 20579, 20709, 20774, 29460, 29082, 29111, 29139, 29492, 29611, 20949, 21030, 29555, 29643, 29675, 28857, 29707, 21310, 29804, 29832, 29864, 29896, 29992, 30024, 30105, 30173, 28959, 30221, 29583, 29053, 28794, 28227, 30320, 30352, 29523, 30414, 30442, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 30485, 32640, 61740, 55714, 40332, 67370, 30532, 30549, 30500, 30596, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 25063, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 62487, 66570, 19251, 64424, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 30661, 19661, 19735, 19811, 19878, 19910, 19942, 30758, 30851, 33683, 30826, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 30890, 63521, 30967, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 32640, 31025, 31042, 31089, 31121, 32640, 25253, 32640, 72986, 41921, 32640, 18907, 32640, 23058, 19161, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31186, 32640, 61740, 32640, 32640, 53140, 31304, 31321, 61422, 31368, 32640, 25253, 32640, 72986, 38336, 32640, 18907, 32640, 23058, 19597, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31436, 32640, 22917, 32640, 32640, 53140, 31488, 31505, 63455, 31552, 32640, 25253, 32640, 72986, 23911, 32640, 18907, 32640, 23058, 20233, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 31603, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31688, 32640, 61740, 27887, 32640, 57839, 22912, 31734, 24347, 31775, 32640, 25253, 32640, 31840, 32640, 32640, 18907, 32640, 57508, 20515, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912, 32640, 62571, 27379, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 46497, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 52315, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32497, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 20179, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 31980, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 31979, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 25682, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 32640, 32640, 65491, 72012, 72012, 51277, 25776, 46932, 39842, 25983, 53287, 26051, 26051, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 69771, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 41903, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 32012, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 57111, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 27513, 32056, 32087, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 31793, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32154, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32191, 32640, 61740, 32640, 32640, 53140, 32266, 32219, 32317, 32348, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 32398, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 32449, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912, 32640, 32640, 32541, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 40482, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32639, 61740, 32640, 32640, 53140, 32606, 32625, 66147, 32673, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 32724, 21452, 21374, 21431, 32813, 21618, 21650, 32920, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912, 32640, 32640, 27379, 32640, 25253, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 33014, 72814, 65242, 23329, 65262, 33049, 33078, 33110, 33141, 72172, 33868, 38406, 33224, 33302, 35892, 33415, 33497, 33529, 33657, 32640, 70241, 33715, 23262, 70547, 65483, 72012, 56115, 31942, 25776, 33771, 25983, 62395, 26051, 60426, 53000, 43338, 33820, 20169, 33900, 28052, 33936, 72012, 34004, 34096, 25776, 69679, 34153, 25983, 34209, 34305, 26051, 34381, 34413, 59316, 60982, 34567, 18580, 43988, 66280, 56105, 34613, 34671, 54769, 57995, 34763, 50540, 69616, 34835, 44365, 69116, 72659, 27683, 51215, 45101, 34941, 55781, 57901, 25776, 68182, 34981, 25983, 35037, 38017, 43551, 35100, 35168, 46148, 32692, 38542, 69316, 67857, 54357, 35200, 37506, 35270, 39191, 36089, 32640, 37090, 24260, 50683, 56669, 60278, 35348, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 43929, 35445, 35530, 35582, 50980, 66874, 47849, 48295, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 35651, 72814, 32640, 32640, 53140, 35689, 35718, 35750, 35781, 32640, 25253, 32640, 32640, 32640, 32640, 42703, 63159, 35832, 71490, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 53000, 32640, 32640, 71083, 54414, 54421, 64131, 72012, 55872, 25809, 25776, 60149, 25844, 25983, 63179, 26051, 26051, 34327, 34467, 32640, 32640, 25692, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 43098, 32640, 35952, 27144, 30726, 72012, 63213, 63138, 25776, 69714, 35989, 25983, 42068, 36035, 26051, 36069, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 20456, 36134, 36191, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 64516, 72814, 48426, 59530, 63767, 36272, 36304, 36336, 36367, 32640, 36432, 25203, 32640, 32640, 41660, 37716, 55922, 36483, 36530, 48415, 59494, 31702, 18855, 62820, 64973, 39682, 72012, 36599, 25776, 18725, 36659, 69934, 36699, 26051, 52493, 36750, 23246, 55732, 34581, 32640, 18679, 55301, 36783, 36820, 35485, 36918, 36954, 37494, 37030, 64702, 65892, 37178, 34467, 32640, 37225, 65319, 32640, 68393, 72012, 37261, 33962, 25776, 37316, 55427, 25983, 39119, 39566, 26051, 49047, 43098, 37375, 42559, 23999, 65491, 72012, 48479, 51277, 25776, 37411, 39842, 45287, 53287, 26051, 67220, 70527, 32640, 37538, 37571, 37131, 46827, 23541, 55996, 67894, 53288, 53572, 47622, 37618, 25915, 66600, 37659, 46843, 32872, 37796, 37836, 46302, 47046, 68392, 23524, 65621, 25983, 37889, 41315, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 37927, 37988, 38060, 47849, 36159, 34716, 26535, 44815, 38151, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 20106, 72814, 32509, 23162, 53140, 38224, 38253, 38285, 38316, 32640, 25253, 32640, 32640, 60657, 39330, 34441, 50711, 54836, 51195, 33270, 38384, 46719, 22206, 33192, 38438, 72385, 38511, 38616, 40937, 20657, 38673, 38705, 39528, 38892, 38940, 32640, 47380, 49323, 32640, 70823, 64131, 72012, 32968, 25809, 25776, 45195, 25844, 25983, 46666, 26051, 26051, 58683, 38996, 32640, 59450, 25692, 27180, 22361, 39052, 64136, 40912, 42209, 25776, 39090, 66443, 25983, 39151, 60300, 26051, 39223, 32640, 32640, 36102, 70444, 72012, 71366, 65683, 25776, 39291, 39362, 35619, 34803, 26051, 43538, 70527, 72942, 37229, 65495, 39402, 46827, 39434, 39492, 52767, 39560, 39598, 39731, 22659, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 19837, 68392, 68106, 33972, 25983, 39769, 58918, 26609, 71375, 56493, 39511, 67952, 33375, 70146, 67746, 39807, 39877, 27300, 39932, 39984, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 22609, 72814, 27464, 30794, 40060, 40119, 40148, 40180, 40211, 40263, 40295, 40364, 40412, 40514, 40546, 40606, 40667, 40699, 40731, 40783, 20976, 40854, 40994, 52527, 25308, 41046, 39699, 41078, 46357, 49141, 41137, 44544, 41236, 41286, 41368, 47192, 41460, 41554, 41610, 40087, 41703, 41735, 41816, 41872, 41968, 42030, 42100, 42250, 42282, 42373, 42458, 42490, 42522, 42554, 42591, 31571, 42679, 24113, 42735, 42778, 42826, 42887, 59586, 42933, 43014, 20677, 52796, 43080, 37857, 50773, 19009, 50153, 72778, 68055, 66201, 43130, 61992, 43205, 43285, 43380, 36003, 43457, 50341, 43583, 43639, 62580, 43704, 43740, 65764, 46827, 43772, 55996, 43804, 43857, 43893, 43961, 72604, 44020, 44104, 67022, 44136, 44196, 44228, 44289, 44397, 41399, 46788, 44452, 69369, 44513, 44648, 70208, 20438, 68896, 51376, 63626, 44257, 54317, 44622, 67433, 55113, 55250, 49487, 51457, 67801, 44680, 44712, 34716, 38736, 44788, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 54076, 72814, 67462, 71804, 46979, 44874, 44903, 44935, 44966, 65157, 25253, 32640, 32640, 45018, 45029, 45061, 36627, 47904, 71490, 70229, 49986, 32640, 30141, 65148, 45093, 45133, 72012, 45175, 25776, 67154, 25983, 61672, 45240, 26051, 53000, 32640, 32640, 25682, 32640, 30614, 64131, 72012, 62187, 25809, 25776, 34052, 25844, 25983, 58051, 26051, 26051, 68586, 34467, 32640, 32640, 25692, 49974, 68393, 36788, 72012, 33962, 51715, 25776, 55427, 25983, 45283, 39566, 26051, 45319, 43098, 32640, 32640, 22533, 65491, 72012, 65748, 51277, 25776, 40635, 39842, 48131, 53287, 26051, 72059, 70527, 32640, 32640, 65495, 72012, 46827, 25776, 55996, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 26195, 32640, 30913, 33383, 31947, 68516, 43425, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 38767, 44815, 45355, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 72990, 32640, 53140, 45461, 45480, 45512, 45543, 32640, 25253, 25880, 32640, 32640, 32640, 49347, 54782, 64809, 65216, 32640, 32024, 32640, 29772, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 26944, 43348, 64131, 72012, 72012, 45595, 25776, 25776, 45631, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 45666, 62963, 32640, 45736, 45143, 72012, 33962, 47777, 25776, 55427, 45634, 25983, 39566, 62106, 26051, 66507, 32640, 61374, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 45776, 65495, 72012, 45833, 25776, 43236, 25983, 48970, 26051, 35378, 19759, 45883, 40885, 45935, 34121, 45988, 46059, 68691, 46114, 46509, 48784, 46180, 46232, 52911, 56583, 46294, 61320, 46334, 46389, 52972, 46541, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 57068, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 37061, 32640, 46592, 32640, 23927, 23933, 35920, 72528, 46641, 71255, 46698, 32640, 41638, 46765, 32640, 32640, 25308, 72012, 32982, 31942, 25812, 62010, 25983, 52465, 26051, 62071, 44572, 32640, 32640, 32640, 32640, 46875, 64131, 72012, 72012, 46928, 25776, 25777, 25844, 25983, 25846, 26051, 26051, 48238, 66922, 32640, 32640, 32640, 58432, 34888, 72012, 72012, 24139, 25776, 25776, 64186, 25983, 25983, 64365, 26051, 26051, 68602, 32640, 31139, 32640, 65491, 72012, 59125, 47768, 25776, 23575, 39842, 25983, 43409, 26051, 51585, 68608, 32640, 40326, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 23989, 59115, 71381, 31947, 25983, 51580, 26788, 46560, 61892, 58181, 67203, 61301, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 48851, 72814, 23672, 46964, 47011, 47078, 47108, 47140, 47171, 32640, 41336, 32640, 50620, 20998, 40574, 47224, 47285, 49169, 47359, 32640, 35316, 31404, 32640, 22498, 71540, 47426, 22395, 47485, 41998, 47553, 68243, 35005, 43487, 49590, 47654, 45801, 22675, 32476, 32285, 47707, 67491, 67589, 47739, 47809, 47521, 53771, 47881, 39370, 54202, 70106, 63727, 47936, 58552, 32640, 49793, 48007, 32640, 65551, 71979, 37586, 48049, 48729, 71596, 33444, 48130, 48163, 50320, 48235, 48270, 34864, 70560, 48327, 48393, 48458, 72887, 48523, 38468, 37956, 42313, 48632, 55501, 51516, 36886, 48664, 48761, 48816, 50855, 27414, 41840, 48883, 63268, 48941, 45429, 49017, 55015, 49079, 32640, 22725, 23734, 49111, 51113, 69533, 55593, 49224, 46302, 49298, 68392, 71381, 31947, 25983, 51580, 58698, 26609, 49388, 58232, 70503, 49450, 42622, 70146, 67746, 49519, 60834, 49912, 26461, 39900, 47849, 56608, 49551, 26535, 44815, 49622, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 69860, 72814, 32640, 32640, 53140, 22912, 46609, 49741, 49772, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 57444, 31942, 38479, 62010, 25983, 49825, 26051, 53559, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 59709, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 61385, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 55063, 32640, 32640, 32640, 32640, 51342, 72012, 72012, 34031, 25776, 25776, 21586, 25983, 25983, 37804, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 52831, 72814, 72305, 49953, 50018, 50050, 50069, 50101, 50132, 70815, 25253, 24050, 32640, 72261, 50206, 50261, 50293, 50389, 50456, 50572, 49266, 32159, 46476, 50609, 46896, 49653, 37284, 50652, 61556, 51136, 34792, 50743, 43516, 41182, 50834, 50887, 32640, 37764, 32640, 32640, 39657, 23757, 50924, 50956, 53683, 55377, 51012, 52437, 51082, 71275, 51168, 51247, 58552, 31456, 32640, 51318, 32640, 68393, 71632, 34909, 33962, 25776, 51408, 55427, 25983, 51489, 51571, 26051, 51617, 51676, 60646, 71309, 32640, 65491, 66269, 72012, 47768, 51714, 36922, 67551, 25983, 53287, 50411, 26051, 51682, 70346, 19987, 51747, 72012, 24952, 25776, 68123, 51821, 47327, 51856, 50424, 31808, 72723, 44072, 71378, 24163, 55203, 53286, 67732, 46302, 62840, 68392, 67136, 45208, 51824, 51580, 51892, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 49192, 51996, 52096, 48579, 26535, 57041, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32641, 72814, 32640, 52167, 20380, 52202, 52231, 52263, 52294, 52373, 25253, 38352, 32640, 52375, 52359, 29926, 52407, 61167, 51195, 57599, 32024, 25590, 52525, 32640, 52559, 51778, 52613, 52685, 43173, 52736, 25950, 43825, 49580, 44319, 53632, 52043, 52828, 32640, 32640, 32640, 58759, 38563, 72012, 52863, 54749, 25776, 52943, 55231, 25984, 38908, 53056, 26018, 58552, 53105, 32640, 22853, 53172, 39020, 53205, 55838, 69472, 53239, 53488, 67539, 53276, 33788, 39566, 53320, 63643, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 53361, 32640, 72366, 71378, 53397, 57660, 53286, 53431, 46302, 32640, 68392, 71381, 47833, 35238, 66390, 37193, 26609, 71375, 60465, 43860, 63958, 50482, 38641, 53073, 53467, 53538, 49912, 26461, 39900, 47849, 36159, 48078, 53604, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 53715, 36751, 53803, 53858, 53921, 53950, 53982, 54013, 68341, 65423, 54066, 22337, 73196, 54108, 54140, 54172, 54234, 54389, 39321, 25417, 42341, 50174, 54455, 44050, 56059, 66616, 54504, 54555, 45851, 57679, 42130, 56789, 64232, 60925, 56829, 19692, 32640, 54689, 69055, 20609, 57455, 72012, 54726, 52653, 25776, 54814, 63908, 25984, 61227, 36498, 26018, 58552, 32640, 47394, 24383, 68318, 72870, 72012, 54868, 18707, 25776, 69705, 54929, 25983, 71927, 54995, 26051, 43915, 55047, 31632, 29738, 32574, 55095, 55145, 55282, 55174, 55347, 55409, 55471, 55533, 55625, 55661, 26850, 67349, 33333, 55693, 55764, 55813, 55904, 55954, 45409, 55563, 59673, 58326, 64010, 31239, 37627, 56028, 56147, 63574, 71739, 56202, 48600, 52021, 33017, 44420, 56272, 51439, 56304, 26558, 56379, 49469, 56435, 56525, 55629, 58860, 53658, 56557, 38796, 56640, 56760, 53746, 56861, 56918, 47849, 36159, 34716, 35068, 57014, 26905, 57100, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 57143, 60501, 46140, 53140, 57269, 57298, 57330, 57361, 57393, 21867, 57487, 53826, 57561, 73137, 57631, 57725, 57757, 57818, 64532, 33845, 25743, 28903, 32640, 30718, 48491, 57871, 57933, 57965, 50507, 34177, 46420, 65902, 58083, 44572, 34502, 27347, 47675, 69192, 32417, 27057, 58115, 45744, 58167, 58213, 58473, 58264, 36980, 26375, 58296, 44349, 69977, 37742, 31057, 58358, 32640, 35957, 68393, 49673, 58395, 33962, 23558, 65824, 55427, 66456, 46015, 39566, 60313, 47611, 68602, 32640, 47038, 58431, 65491, 72012, 72012, 58464, 25776, 27804, 58505, 25983, 57693, 26051, 26051, 58542, 33253, 32640, 51913, 22383, 49691, 64312, 64327, 50524, 46027, 71028, 38028, 53132, 32640, 21514, 49356, 67641, 68454, 61634, 65986, 49249, 32640, 68392, 71381, 31947, 25983, 51580, 39737, 67971, 58592, 35498, 68821, 42982, 65031, 58624, 58730, 58791, 58892, 49912, 26461, 39900, 47849, 36159, 34716, 60897, 62262, 58971, 59003, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 53024, 32640, 59046, 59088, 59157, 59186, 59218, 59249, 26690, 25253, 32640, 62512, 59314, 32640, 21399, 45956, 59348, 59428, 60204, 32024, 59282, 59482, 59526, 27721, 62325, 42794, 59562, 37343, 41105, 59653, 46262, 57786, 56728, 42158, 59014, 59705, 59741, 32640, 32640, 64131, 27582, 72012, 25809, 51286, 25776, 25844, 68525, 25984, 26051, 69412, 26018, 38086, 59766, 53173, 30453, 31873, 68393, 59807, 72012, 38182, 56458, 25776, 67880, 68261, 25983, 39566, 61247, 26051, 68602, 40380, 32640, 32640, 65491, 72012, 59857, 47966, 60005, 45599, 39842, 71940, 53287, 26051, 59892, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 71116, 32640, 59931, 71378, 25776, 29955, 53286, 26051, 56227, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 36718, 59969, 24280, 60037, 60131, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25253, 54423, 32640, 20742, 60181, 32843, 60251, 67710, 54291, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 29420, 32640, 32640, 32640, 64131, 72012, 72012, 60345, 25776, 25776, 60381, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 53207, 72012, 47768, 27763, 36922, 39842, 71874, 53287, 26051, 60418, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 70720, 71381, 60458, 35226, 48985, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 36240, 60497, 23383, 53140, 60533, 60561, 60593, 60624, 23405, 25467, 22160, 33169, 60689, 60747, 60715, 60805, 60866, 60957, 32640, 36400, 61023, 26995, 32640, 33355, 55315, 59825, 61082, 65831, 61145, 47313, 61199, 61279, 67236, 61352, 32640, 30073, 61417, 71794, 61454, 22979, 61508, 38584, 61544, 61588, 56170, 61624, 61666, 64623, 61704, 26051, 48694, 58552, 65333, 72472, 61736, 61772, 61831, 56082, 61881, 64292, 46200, 55981, 63076, 32888, 56329, 36998, 50357, 58842, 68602, 61924, 31336, 31217, 32949, 61962, 72012, 54897, 52135, 36922, 43253, 54949, 53287, 62059, 62103, 54635, 69791, 32640, 71552, 72012, 20633, 25776, 66700, 25983, 70631, 26051, 43048, 60991, 32640, 27575, 38860, 26267, 35612, 71431, 26052, 46302, 39252, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 59396, 61050, 48909, 62138, 49921, 43861, 50802, 44756, 26873, 47849, 36159, 34716, 33560, 62235, 62294, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 69266, 62427, 62544, 62612, 62644, 62673, 62705, 62736, 31256, 49878, 31910, 32640, 62790, 62885, 62917, 44164, 69556, 51644, 62949, 62995, 45696, 32640, 19278, 63027, 63108, 63211, 63245, 54342, 53506, 63300, 61672, 63378, 63410, 44572, 63450, 21770, 63487, 58560, 32640, 57422, 68884, 61512, 63553, 47513, 61592, 63606, 63675, 29960, 51050, 63717, 37895, 63759, 18562, 21217, 40028, 32560, 63799, 59860, 58135, 43158, 25776, 63843, 70614, 25983, 63875, 63940, 26051, 63990, 64042, 64442, 21262, 32640, 64117, 58399, 38848, 47768, 24174, 64168, 39842, 56347, 53287, 26051, 64218, 68608, 27898, 31520, 65495, 64264, 51931, 42855, 67656, 26365, 64359, 39180, 64397, 32640, 22880, 64131, 71378, 25776, 29955, 53286, 26051, 56886, 32234, 41489, 41766, 51964, 60386, 51580, 64489, 54657, 64564, 34064, 72128, 35550, 42184, 64655, 39628, 49921, 43861, 62758, 40962, 68714, 54610, 64734, 36847, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 25270, 32640, 23111, 32122, 64856, 64887, 64919, 64950, 31389, 65005, 27232, 34519, 65063, 65120, 65088, 61113, 65189, 65294, 65365, 65397, 32640, 65455, 65527, 65583, 65653, 65730, 65796, 42647, 52704, 58025, 65863, 65934, 65966, 66033, 64072, 66099, 26683, 30564, 66131, 66179, 66246, 41522, 66312, 64765, 26100, 66344, 66422, 62027, 63346, 66488, 48098, 66539, 38119, 40439, 30690, 24714, 66648, 46809, 22991, 67082, 66680, 47975, 66732, 66764, 58510, 66819, 66851, 26304, 66906, 66954, 31272, 32640, 67000, 67054, 67114, 21544, 34639, 21568, 67186, 67268, 67325, 67402, 54264, 43607, 48017, 34273, 42426, 67583, 30935, 67621, 41784, 67688, 48203, 67778, 64824, 41671, 20315, 24236, 67833, 44481, 37470, 67926, 59378, 68003, 32640, 68087, 68155, 34696, 68214, 39952, 68293, 68373, 68425, 68486, 66787, 35862, 33375, 70146, 67746, 49921, 43861, 49912, 58817, 68777, 68557, 68640, 68746, 58655, 44815, 68853, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 64085, 32640, 48353, 53140, 68928, 68957, 68989, 69020, 32640, 27125, 27632, 30788, 27143, 32640, 31656, 64595, 69087, 69148, 32640, 32024, 32640, 69224, 32640, 49895, 69298, 39058, 69348, 25776, 49418, 25983, 70024, 69401, 45323, 46448, 24757, 70970, 32640, 27865, 31743, 52581, 61849, 69444, 69504, 54523, 54583, 69588, 33465, 69648, 59899, 33588, 69746, 58552, 69823, 32640, 32640, 69855, 38964, 72012, 72012, 65611, 69892, 25776, 72113, 69928, 25983, 39566, 69966, 26051, 41254, 35657, 32640, 32640, 61476, 72012, 72012, 62354, 25776, 36922, 70009, 25983, 26418, 26051, 26051, 34349, 32640, 18845, 26622, 72012, 27075, 25776, 39460, 70056, 67293, 70094, 41204, 31858, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 45386, 70138, 70178, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 46082, 68666, 70273, 34716, 26535, 44842, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 22217, 68030, 66060, 33739, 70331, 54472, 70378, 70409, 32640, 25253, 32640, 32640, 32640, 32640, 19302, 70476, 56692, 51195, 59775, 43315, 32640, 32640, 27647, 25308, 37113, 62203, 70592, 53244, 62010, 70663, 47583, 56714, 33625, 44572, 32640, 32640, 28000, 32640, 29763, 64131, 55855, 72012, 25809, 51949, 25776, 25844, 56967, 25984, 26051, 33611, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 50577, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 25506, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 70701, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 59056, 32640, 70752, 70788, 70855, 70884, 70916, 70947, 32640, 25253, 32640, 32640, 32640, 32640, 41578, 49709, 71012, 71060, 32640, 32024, 32640, 32640, 71115, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 38108, 32640, 24932, 72012, 72012, 52641, 25776, 25776, 71858, 25983, 25983, 43032, 26051, 26051, 68602, 32640, 71148, 32640, 65491, 51789, 34949, 47768, 56478, 42901, 39842, 71181, 63325, 63418, 36037, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32154, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 34240, 32640, 25640, 43672, 32640, 22790, 58939, 37441, 71228, 41160, 51195, 32640, 22183, 71515, 71307, 32640, 25308, 72012, 71341, 31942, 35465, 71413, 36667, 59621, 26051, 71463, 42401, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 41936, 32640, 68393, 66214, 72012, 71584, 38192, 25776, 42053, 70669, 25983, 39566, 39775, 26051, 68602, 35405, 32640, 32640, 65491, 71628, 72012, 48552, 25776, 36922, 26149, 25983, 53287, 71664, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 22912, 36567, 70299, 37690, 32640, 25253, 66067, 32640, 32640, 32640, 71710, 26739, 42964, 71771, 20325, 32024, 32640, 32640, 32640, 27283, 72012, 59937, 31942, 25776, 52893, 25983, 56982, 26051, 51860, 44572, 23321, 32640, 32640, 37539, 32640, 38825, 72013, 72012, 71836, 53399, 25776, 71906, 39845, 25984, 71678, 53435, 26018, 58552, 30134, 32640, 32640, 32640, 68393, 71972, 72012, 63054, 52123, 25776, 62376, 48188, 25983, 24297, 36872, 26051, 68602, 32640, 32640, 33904, 65491, 72012, 72011, 47768, 42218, 36922, 39842, 71196, 53287, 26051, 72045, 68608, 32640, 48843, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 45251, 32640, 34258, 23504, 63811, 25776, 68806, 63685, 26051, 46302, 23041, 68392, 72091, 44738, 54963, 34731, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 31905, 32640, 72814, 32640, 32640, 53140, 72160, 36567, 70299, 34240, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 51195, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 31942, 25776, 62010, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 72268, 72234, 40231, 72204, 72300, 72337, 72417, 72449, 32640, 25253, 71149, 72986, 32640, 32640, 22011, 19703, 24646, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 21985, 22069, 72504, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 70431, 53140, 72560, 72589, 60219, 72636, 32640, 25253, 32640, 72986, 50892, 50890, 18907, 32640, 40751, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22037, 22069, 18821, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61930, 32640, 32640, 19846, 72691, 72708, 30629, 72755, 32640, 25253, 32640, 72810, 59270, 52170, 18907, 32640, 23058, 21807, 31154, 19779, 32640, 18612, 18649, 18757, 18789, 18959, 22311, 22069, 72846, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 21310, 21452, 21374, 21431, 21484, 21618, 21650, 21741, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 22530, 32640, 61740, 32640, 32640, 53140, 22912, 32640, 32640, 72919, 32640, 25253, 32640, 32640, 32640, 32640, 49347, 54782, 64809, 35297, 32640, 32024, 32640, 32640, 32640, 25308, 72012, 72012, 48724, 25776, 59604, 25983, 61672, 26051, 26051, 44572, 32640, 32640, 32640, 32640, 32640, 64131, 72012, 72012, 25809, 25776, 25776, 25844, 25983, 25984, 26051, 26051, 26018, 58552, 32640, 32640, 32640, 32640, 68393, 72012, 72012, 33962, 25776, 25776, 55427, 25983, 25983, 39566, 26051, 26051, 68602, 32640, 32640, 32640, 65491, 72012, 72012, 47768, 25776, 36922, 39842, 25983, 53287, 26051, 26051, 68608, 32640, 32640, 65495, 72012, 51360, 25776, 65698, 25983, 53288, 26051, 37187, 32640, 32640, 64131, 71378, 25776, 29955, 53286, 26051, 46302, 32640, 68392, 71381, 31947, 25983, 51580, 37193, 26609, 71375, 60465, 43860, 58860, 33375, 70146, 67746, 49921, 43861, 49912, 26461, 39900, 47849, 36159, 34716, 26535, 44815, 26905, 26933, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 34485, 32640, 23212, 23229, 52327, 72974, 32640, 32640, 32640, 72986, 32640, 32640, 18907, 32640, 23058, 21807, 31154, 43659, 32640, 18612, 18649, 18757, 18789, 18959, 21985, 22069, 72504, 22057, 18887, 18787, 18957, 18991, 36451, 32640, 24875, 69179, 19041, 62458, 19134, 40819, 21341, 19073, 46732, 21342, 19074, 46733, 19106, 19193, 40822, 19438, 66570, 19251, 21244, 41014, 19334, 19366, 19398, 19470, 19502, 19538, 25119, 19498, 19534, 19570, 19359, 19629, 19422, 19661, 19735, 19811, 19878, 19910, 19942, 20019, 30851, 30993, 20026, 30858, 20058, 19907, 21927, 19969, 20090, 20138, 20211, 20265, 20357, 63521, 20412, 63518, 20488, 20547, 20291, 20579, 20709, 20774, 20821, 20870, 20853, 20885, 20789, 20917, 20949, 21030, 21062, 21094, 21084, 21126, 21186, 73022, 21452, 21374, 21431, 73111, 21618, 21650, 73169, 21802, 23057, 21839, 21899, 21959, 22101, 21154, 22249, 22281, 22427, 22459, 22487, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 32640, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 180523, 180523, 180523, 180523, 0, 188716, 188716, 188716, 180523, 180523, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 0, 188716, 180523, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 139264, 147456, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 131072, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 188716, 367, 188716, 180523, 188716, 188716, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 180523, 188716, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2289, 0, 2290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2368, 2369, 0, 0, 2371, 0, 0, 0, 0, 2376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4276224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 307, 0, 0, 5767168, 0, 0, 0, 4857856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 5414912, 5447680, 0, 0, 5562368, 5636096, 5685248, 0, 5750784, 5873664, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1877, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1889, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 59821, 57886, 59823, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 58853, 57909, 57909, 58857, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58871, 0, 0, 5636096, 5873664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5873664, 0, 0, 0, 0, 0, 0, 0, 5480448, 4358144, 4358144, 4358144, 4358144, 4857856, 4874240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5259264, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5414912, 4358144, 5447680, 4358144, 5464064, 4358144, 5480448, 5562368, 4358144, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5873664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1140, 0, 0, 1145, 0, 4857856, 4874240, 0, 0, 4923392, 5562368, 4358144, 4358144, 4358144, 5636096, 4358144, 5685248, 4358144, 4358144, 5750784, 4358144, 4358144, 4358144, 4358144, 4358144, 5873664, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6275072, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 4923392, 0, 0, 0, 0, 4366336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2766, 0, 0, 0, 0, 0, 0, 4825088, 0, 0, 5177344, 0, 0, 0, 0, 5701632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5808128, 0, 0, 0, 0, 4792320, 4833280, 0, 0, 5701632, 0, 5242880, 0, 0, 0, 0, 0, 0, 0, 5341184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5627904, 5652480, 0, 5701632, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4825088, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5177344, 4358144, 4358144, 4358144, 4358144, 4358144, 5242880, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5341184, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5627904, 5652480, 4358144, 5701632, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 483328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5341184, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5627904, 5652480, 4358144, 5701632, 4358144, 4358144, 5808128, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 1051, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 0, 0, 6422528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5619712, 0, 0, 0, 0, 0, 0, 0, 5726208, 5758976, 0, 0, 5791744, 0, 0, 0, 0, 0, 0, 0, 1151, 1278, 0, 0, 0, 0, 0, 0, 1285, 0, 0, 0, 0, 0, 0, 0, 1290, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 848, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 0, 6479872, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4931584, 4939776, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5054464, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5210112, 4358144, 4358144, 4358144, 4358144, 5292032, 4358144, 4358144, 4358144, 4358144, 5365760, 4358144, 4358144, 4358144, 5455872, 4358144, 4358144, 4358144, 4358144, 4358144, 5554176, 5570560, 5578752, 5619712, 5668864, 4358144, 4358144, 4358144, 5791744, 5816320, 4358144, 5857280, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6119424, 4358144, 6168576, 4358144, 4358144, 4358144, 4358144, 6242304, 4358144, 6291456, 4358144, 6316032, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 4939776, 0, 0, 0, 0, 0, 0, 5054464, 0, 0, 0, 0, 0, 0, 0, 0, 5210112, 0, 0, 0, 0, 5292032, 0, 0, 0, 0, 5365760, 0, 0, 0, 5455872, 0, 0, 0, 0, 0, 5554176, 5570560, 5578752, 5619712, 5668864, 0, 5578752, 5619712, 5668864, 0, 0, 0, 5791744, 5816320, 0, 5857280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6119424, 0, 6168576, 0, 0, 0, 0, 0, 6242304, 0, 6291456, 0, 6316032, 0, 6291456, 0, 6316032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6463488, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4931584, 4939776, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 491520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 5578752, 5619712, 5668864, 4358144, 4358144, 4358144, 5791744, 5816320, 4358144, 5857280, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6119424, 4358144, 6168576, 4358144, 4358144, 4358144, 4358144, 4358144, 6242304, 4956160, 4964352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5218304, 0, 0, 0, 0, 5799936, 0, 5881856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6373376, 6389760, 0, 0, 0, 0, 0, 1758, 0, 0, 1761, 0, 1763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6488064, 6103040, 0, 0, 0, 0, 0, 6184960, 5316608, 0, 0, 5644288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6217728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3384, 0, 0, 0, 3388, 0, 0, 0, 0, 0, 3394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5390336, 5308416, 5488640, 0, 0, 5070848, 5431296, 0, 6430720, 0, 0, 5160960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4784128, 0, 0, 0, 0, 0, 0, 0, 0, 3623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 417, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6283264, 6332416, 0, 0, 0, 5881856, 0, 5382144, 0, 0, 0, 0, 0, 0, 6266880, 4784128, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4915200, 4358144, 4956160, 4972544, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5070848, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5218304, 4358144, 5267456, 4358144, 4358144, 5308416, 5316608, 4358144, 4358144, 4358144, 5431296, 4358144, 5488640, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5799936, 4358144, 4358144, 5881856, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6103040, 4358144, 4358144, 4358144, 6184960, 4358144, 4358144, 6283264, 4358144, 4358144, 6332416, 4358144, 4358144, 4358144, 6389760, 4358144, 4358144, 6430720, 6438912, 4358144, 4358144, 4358144, 6266880, 6488064, 0, 0, 0, 6266880, 6488064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3149, 0, 0, 0, 0, 3154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 6430720, 6438912, 0, 0, 0, 0, 0, 0, 4784128, 0, 0, 0, 4849664, 0, 0, 0, 0, 0, 4915200, 0, 4956160, 4972544, 0, 0, 0, 0, 0, 0, 5070848, 0, 0, 0, 0, 0, 0, 0, 5218304, 0, 0, 6103040, 0, 0, 0, 6184960, 0, 0, 0, 6283264, 0, 0, 6332416, 0, 0, 0, 6389760, 0, 0, 6430720, 6438912, 4784128, 4358144, 4358144, 4358144, 4849664, 4358144, 4358144, 4358144, 4358144, 4358144, 4915200, 0, 5660672, 5718016, 0, 5865472, 0, 0, 6037504, 0, 0, 6078464, 0, 0, 6340608, 0, 6455296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5472256, 0, 0, 0, 6209536, 0, 0, 0, 0, 6176768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4898816, 0, 5709824, 0, 0, 0, 0, 0, 1790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2348, 0, 0, 0, 0, 0, 0, 0, 0, 5283840, 0, 0, 0, 0, 5251072, 0, 6414336, 5832704, 0, 5955584, 0, 0, 4358144, 4358144, 4841472, 4358144, 4358144, 4358144, 4898816, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368640, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4358144, 5111808, 4358144, 4358144, 4358144, 4358144, 4358144, 5283840, 4358144, 4358144, 4358144, 4358144, 5472256, 5521408, 4358144, 4358144, 4358144, 5595136, 5709824, 5718016, 4358144, 5824512, 5865472, 4358144, 4358144, 5922816, 4358144, 4358144, 6021120, 4358144, 6037504, 4358144, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 4358144, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 388, 0, 139264, 147456, 0, 0, 0, 0, 0, 6037504, 0, 0, 6078464, 6111232, 0, 6176768, 6209536, 0, 6234112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 3773, 0, 3627, 3775, 0, 0, 3778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 4024, 521, 4026, 521, 521, 4028, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 6021120, 0, 6037504, 0, 0, 6078464, 6111232, 0, 6176768, 6209536, 0, 6234112, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4841472, 4358144, 4358144, 4358144, 4898816, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 499712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5111808, 4358144, 4358144, 4358144, 4358144, 4358144, 5283840, 4358144, 4358144, 4358144, 4358144, 5472256, 5521408, 4358144, 4358144, 4358144, 4358144, 5595136, 5709824, 5718016, 4358144, 5824512, 5865472, 4358144, 4358144, 5922816, 0, 5029888, 5038080, 0, 0, 5103616, 5201920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6406144, 5357568, 0, 5505024, 0, 0, 0, 0, 0, 5890048, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1873, 521, 521, 521, 521, 521, 521, 521, 521, 1884, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3216, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 60569, 57886, 60570, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58842, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 58854, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59962, 59963, 57909, 57909, 57909, 57909, 57909, 57909, 59970, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 6160384, 0, 5095424, 5349376, 0, 5275648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5947392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6471680, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4997120, 4358144, 4358144, 5038080, 4358144, 4358144, 4358144, 5095424, 5103616, 4358144, 4358144, 5201920, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5890048, 4358144, 4358144, 4358144, 6029312, 4358144, 4358144, 4358144, 4358144, 6160384, 4358144, 4358144, 4358144, 4358144, 5890048, 4358144, 4358144, 4358144, 6029312, 4358144, 4358144, 4358144, 4358144, 6160384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6406144, 0, 0, 0, 0, 0, 0, 0, 0, 4997120, 0, 0, 5038080, 0, 0, 0, 0, 6406144, 0, 0, 0, 0, 0, 0, 0, 0, 4997120, 0, 0, 5038080, 0, 0, 0, 5095424, 5103616, 0, 0, 5201920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5890048, 0, 0, 0, 6029312, 0, 0, 0, 0, 6160384, 0, 0, 0, 0, 0, 0, 0, 6406144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4997120, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6406144, 4358144, 4358144, 4358144, 0, 0, 0, 4890624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5898240, 5963776, 0, 0, 6193152, 0, 0, 5406720, 6397952, 5300224, 5234688, 5423104, 0, 0, 0, 0, 5988352, 0, 0, 6135808, 6307840, 0, 5996544, 4800512, 0, 6356992, 0, 0, 0, 5496832, 0, 0, 0, 0, 0, 5611520, 0, 0, 0, 0, 0, 0, 0, 1187, 0, 0, 1190, 1191, 0, 0, 0, 0, 1195, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 801, 4947968, 5021696, 5529600, 0, 0, 5169152, 0, 0, 0, 4800512, 4808704, 4358144, 4358144, 4890624, 4358144, 4947968, 4358144, 4358144, 4358144, 5046272, 4358144, 4358144, 4358144, 4358144, 5185536, 4358144, 5234688, 5300224, 4358144, 4358144, 5406720, 5529600, 4358144, 4358144, 4358144, 5898240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6307840, 4358144, 4358144, 6356992, 6381568, 6397952, 4800512, 4808704, 0, 0, 4890624, 0, 4947968, 0, 0, 0, 5046272, 0, 0, 0, 0, 5185536, 0, 5234688, 5300224, 0, 0, 5406720, 5529600, 0, 0, 0, 0, 5898240, 0, 0, 0, 0, 0, 0, 0, 0, 6307840, 0, 0, 6356992, 6381568, 6397952, 4800512, 4808704, 0, 0, 4890624, 0, 0, 6356992, 6381568, 6397952, 4800512, 4808704, 4358144, 4358144, 4890624, 4358144, 4947968, 4358144, 4358144, 4358144, 5046272, 4358144, 4358144, 4358144, 4358144, 5185536, 4358144, 5234688, 5300224, 4358144, 4358144, 5406720, 5529600, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4907008, 0, 5079040, 6094848, 0, 0, 0, 4358144, 4907008, 4358144, 5079040, 4358144, 5226496, 4358144, 5742592, 4358144, 4358144, 4358144, 6094848, 0, 4907008, 0, 5079040, 0, 5226496, 5898240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6307840, 4358144, 4358144, 6356992, 6381568, 6397952, 5021696, 4358144, 4358144, 5021696, 0, 0, 0, 4980736, 0, 0, 0, 0, 0, 5373952, 5734400, 6045696, 0, 0, 0, 0, 0, 2306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2290, 0, 0, 0, 0, 0, 0, 0, 6152192, 0, 0, 0, 6316032, 0, 0, 0, 0, 5816320, 6291456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6258688, 6447104, 0, 0, 6127616, 0, 6348800, 5906432, 0, 5537792, 3627, 0, 0, 0, 0, 5939200, 0, 0, 5677056, 6365184, 4866048, 0, 6070272, 5545984, 5152768, 0, 0, 6144000, 4358144, 4866048, 4882432, 4358144, 0, 0, 0, 0, 0, 4825088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5177344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5324800, 5373952, 5537792, 5545984, 5586944, 5734400, 5971968, 0, 6045696, 0, 6070272, 0, 0, 0, 0, 6348800, 0, 4866048, 4882432, 0, 4980736, 0, 0, 0, 0, 0, 0, 0, 0, 521, 831, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 877, 521, 521, 521, 521, 895, 521, 521, 57886, 57886, 58249, 0, 5324800, 5373952, 5537792, 5545984, 5586944, 5734400, 5971968, 0, 6045696, 0, 6070272, 0, 0, 0, 0, 6348800, 4358144, 4866048, 4882432, 4358144, 4980736, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5324800, 5373952, 5537792, 5545984, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 6348800, 0, 4866048, 4882432, 0, 4980736, 0, 0, 0, 0, 5537792, 5545984, 5586944, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 4358144, 6348800, 4358144, 6144000, 0, 6144000, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 3441, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3454, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 60242, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60250, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60293, 57886, 57886, 57886, 60296, 60297, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59917, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 5693440, 0, 6496256, 5144576, 5136384, 0, 5914624, 4358144, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 0, 0, 5005312, 0, 0, 0, 5120000, 5136384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6324224, 0, 0, 5005312, 0, 0, 0, 5120000, 5136384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6324224, 4358144, 0, 0, 900, 900, 900, 4825988, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5178244, 900, 900, 900, 900, 900, 5219204, 900, 5268356, 900, 900, 5309316, 5317508, 900, 900, 900, 5432196, 900, 5489540, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5800836, 900, 900, 5882756, 900, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 3627, 0, 0, 0, 0, 0, 0, 1759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1772, 0, 1774, 0, 0, 0, 1778, 0, 0, 0, 1782, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 0, 5013504, 0, 0, 6053888, 0, 0, 0, 0, 6012928, 4358144, 4358144, 5013504, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6053888, 4358144, 4358144, 0, 0, 5013504, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 692, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 0, 0, 0, 6053888, 0, 0, 0, 0, 0, 5013504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6053888, 0, 0, 0, 4358144, 4358144, 5013504, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5799936, 4358144, 4358144, 5881856, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6103040, 4358144, 4358144, 4358144, 6184960, 4358144, 4358144, 4358144, 6283264, 4358144, 4358144, 6332416, 4358144, 4358144, 4358144, 4358144, 4358144, 6053888, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 5193728, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 901, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 0, 5414912, 0, 5447680, 0, 5464064, 0, 5480448, 5562368, 0, 0, 0, 5636096, 0, 5685248, 0, 0, 5750784, 0, 0, 0, 0, 0, 5873664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5193728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5193728, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 5193728, 4358144, 0, 1959, 0, 0, 0, 4825088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5177344, 0, 0, 0, 0, 0, 0, 715, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1250, 1252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 5742592, 0, 0, 0, 6094848, 0, 0, 4907008, 0, 5079040, 0, 5226496, 0, 5742592, 0, 0, 0, 6094848, 0, 4358144, 4907008, 4358144, 5079040, 4358144, 5226496, 4358144, 5742592, 4358144, 4358144, 4358144, 6094848, 4358144, 5062656, 0, 0, 0, 4358144, 5062656, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 5062656, 0, 0, 0, 0, 0, 6225920, 0, 5062656, 0, 0, 0, 0, 0, 6225920, 4358144, 5062656, 4358144, 4358144, 4358144, 0, 900, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 2396, 521, 521, 521, 521, 2400, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3199, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1390, 521, 521, 1394, 521, 521, 521, 521, 521, 1401, 521, 521, 4358144, 4358144, 4358144, 6225920, 0, 0, 0, 4816896, 4358144, 4358144, 4358144, 4358144, 6086656, 4816896, 0, 0, 0, 0, 6086656, 4816896, 0, 0, 0, 0, 6086656, 4816896, 4358144, 4358144, 4358144, 4358144, 6086656, 5087232, 0, 5931008, 4358144, 5332992, 5980160, 4358144, 0, 5332992, 5980160, 0, 0, 5332992, 5980160, 0, 4358144, 5332992, 5980160, 4358144, 5439488, 5128192, 4358144, 5128192, 0, 5128192, 0, 5128192, 4358144, 4358144, 0, 0, 4358144, 4358144, 0, 0, 4358144, 6004736, 6004736, 6004736, 6004736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1289, 0, 0, 0, 0, 0, 0, 0, 0, 1294, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2816, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221645, 221645, 221645, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 221645, 461, 221645, 221645, 221645, 461, 221645, 221645, 221645, 221645, 221645, 221645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221645, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1780, 0, 0, 0, 0, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3414, 0, 0, 0, 0, 3418, 0, 0, 0, 0, 3423, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237568, 301, 0, 305, 237568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 305, 237982, 147456, 0, 0, 0, 305, 0, 0, 0, 0, 0, 2334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2349, 0, 0, 0, 0, 0, 0, 0, 3406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3420, 3421, 0, 0, 0, 0, 3426, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 516096, 0, 0, 0, 0, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 0, 305, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 1870, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2453, 521, 521, 521, 2456, 521, 521, 521, 521, 521, 2461, 521, 305, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 65536, 302, 0, 4268032, 98304, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4210978, 24578, 3, 0, 0, 296, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 245760, 0, 245760, 0, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 4210978, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212992, 0, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 212992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1270, 0, 0, 2059, 0, 0, 0, 4825088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5177344, 0, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311, 310, 0, 0, 0, 310, 310, 311, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 674, 0, 0, 0, 0, 0, 0, 262144, 262144, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 301, 0, 0, 0, 262144, 0, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 262731, 0, 262731, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 3439, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3670, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60591, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59853, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60298, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 262731, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245760, 245760, 245760, 245760, 245760, 245760, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278528, 278528, 0, 0, 131072, 278528, 0, 0, 0, 278528, 0, 0, 0, 0, 278528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 384, 0, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 278528, 0, 278528, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3438, 521, 521, 521, 521, 3442, 521, 521, 521, 521, 521, 521, 521, 3448, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1901, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1921, 521, 521, 278528, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 0, 0, 262144, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262144, 262144, 0, 262144, 0, 0, 0, 139264, 147456, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 302, 0, 0, 0, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 631, 0, 4268032, 305, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 532480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1506, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2810, 2811, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 302, 0, 306, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, 733, 0, 739, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 306, 139264, 287138, 0, 0, 0, 306, 0, 0, 0, 0, 0, 2386, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2402, 521, 2404, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59830, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60836, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60274, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 0, 306, 0, 0, 0, 0, 0, 521, 521, 521, 3437, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3449, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3464, 521, 3466, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 61250, 57909, 57909, 61252, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 59994, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 306, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 66168, 0, 4268032, 305, 98939, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2352, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 303, 303, 0, 0, 303, 303, 295215, 303, 303, 303, 303, 303, 303, 303, 303, 303, 295215, 373, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 368, 303, 0, 295215, 303, 303, 303, 303, 295285, 295215, 295215, 295215, 295215, 295215, 295215, 303, 303, 303, 303, 303, 303, 295285, 295215, 295215, 295215, 303, 303, 303, 295285, 139264, 147456, 295215, 295215, 303, 303, 295215, 303, 303, 131072, 303, 303, 303, 303, 295215, 303, 303, 303, 303, 295215, 303, 295215, 295215, 295215, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 295215, 295215, 295215, 295215, 295215, 295215, 303, 303, 303, 295215, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 295215, 303, 295215, 295215, 295215, 295215, 295215, 295215, 295215, 303, 0, 303, 0, 303, 303, 303, 295215, 303, 303, 303, 295215, 295215, 303, 295215, 303, 295215, 295215, 295215, 295215, 295215, 295215, 295215, 295215, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295285, 295215, 295215, 295215, 295215, 295215, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4359045, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 0, 352256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 319488, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1743, 0, 0, 0, 0, 0, 0, 0, 1751, 1752, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 319488, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 0, 0, 0, 0, 319488, 0, 319488, 319488, 319488, 0, 24578, 3, 0, 0, 4366336, 253952, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5627904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4284416, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 0, 0, 0, 0, 0, 0, 0, 0, 521, 2389, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3219, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60571, 57886, 57886, 57886, 57886, 57886, 57886, 60579, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 327680, 327680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 327680, 327680, 327680, 335872, 327680, 327680, 327680, 335872, 327680, 327680, 327680, 327680, 327680, 327680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49716, 0, 0, 0, 0, 0, 327680, 49716, 327680, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5627904, 0, 0, 0, 0, 0, 0, 196608, 0, 0, 0, 106496, 0, 0, 4284416, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49152, 977, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6463488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 4939776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 344064, 344064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 344064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 357, 358, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 0, 4276224, 1245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 352256, 0, 0, 0, 0, 0, 0, 131072, 0, 352256, 352256, 0, 0, 352256, 0, 0, 352256, 0, 352256, 0, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 352256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1197, 0, 367, 367, 0, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 1, 291, 3, 0, 0, 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360448, 360448, 360448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 360448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360448, 1, 0, 3, 155941, 155941, 295, 0, 629, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1212, 0, 0, 0, 0, 1217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4276224, 1245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1188, 0, 58796, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59402, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58826, 57886, 57886, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59502, 57886, 0, 2281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 2357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3428, 0, 57909, 59926, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58906, 57909, 57909, 59952, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 60009, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 60035, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60937, 521, 3212, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59387, 59388, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60604, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60320, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60702, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 3612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, 0, 0, 0, 57886, 57886, 60830, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60853, 57886, 57886, 57936, 57936, 57936, 57936, 60914, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60057, 57936, 57936, 57936, 57936, 61027, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 61045, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60634, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59493, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 61048, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61056, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60378, 57936, 57936, 57936, 57886, 57886, 57886, 57886, 61156, 57886, 57886, 57886, 57886, 61157, 61158, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59997, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 61175, 57909, 57909, 57909, 57909, 61176, 61177, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61194, 57936, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61078, 61079, 57936, 57936, 57936, 57936, 61083, 61084, 57936, 57936, 57936, 57936, 57936, 61088, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61195, 61196, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3177, 521, 521, 521, 521, 521, 521, 3184, 521, 3186, 521, 521, 521, 57936, 57936, 57936, 57936, 57936, 61270, 57936, 57936, 57936, 57936, 57936, 57936, 61276, 57936, 57936, 57936, 61280, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 1791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 3947, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61306, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58312, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61322, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61338, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3759, 521, 57886, 61105, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 61439, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 61452, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61465, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60413, 57936, 57936, 57936, 57936, 57936, 57936, 60421, 57936, 57936, 57936, 57936, 57936, 60426, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 4077, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 57886, 57909, 57936, 521, 57886, 57909, 57936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376832, 376832, 376832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1268, 1269, 0, 0, 0, 0, 0, 419, 419, 419, 419, 590, 590, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 0, 419, 0, 0, 0, 0, 0, 521, 1866, 521, 521, 521, 521, 521, 521, 1872, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 60568, 57886, 57886, 57886, 57886, 57886, 57886, 60575, 57886, 60577, 57886, 57886, 419, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2817, 0, 0, 0, 4268773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2380, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, 637, 731, 0, 735, 736, 637, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 393678, 393678, 393678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4025, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 393678, 0, 393678, 393678, 393678, 0, 393678, 393678, 393678, 393678, 393678, 393678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 425984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 3176, 521, 521, 521, 521, 521, 3181, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 0, 0, 375, 0, 0, 0, 0, 0, 327, 375, 330, 374, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 57887, 521, 57887, 521, 521, 57887, 521, 521, 57910, 57887, 521, 521, 57887, 57887, 57887, 57910, 0, 0, 0, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 0, 420, 0, 0, 0, 0, 0, 521, 3435, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1916, 521, 521, 521, 521, 521, 521, 420, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 304, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2791, 0, 0, 1239, 0, 0, 0, 741, 1246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 1322, 521, 521, 521, 521, 521, 521, 521, 2468, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60276, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 2468, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60305, 57886, 57886, 0, 0, 0, 2963, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 308, 309, 0, 0, 0, 0, 0, 0, 1815, 0, 0, 0, 0, 0, 0, 0, 0, 1821, 0, 1823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3127, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 309, 0, 417792, 417792, 0, 0, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 417792, 418101, 417792, 417792, 418100, 418101, 417792, 417792, 418100, 417792, 418100, 417792, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 0, 0, 0, 417792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 1, 24578, 3, 0, 0, 4366964, 0, 0, 0, 0, 0, 301, 302, 311296, 4268032, 305, 306, 0, 434176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1859, 0, 0, 1860, 0, 0, 900, 900, 5415812, 900, 5448580, 900, 5464964, 900, 5481348, 5563268, 900, 900, 900, 5636996, 900, 5686148, 900, 900, 5751684, 900, 900, 900, 900, 900, 5874564, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6464388, 0, 0, 0, 0, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 4932560, 4940752, 976, 976, 976, 976, 976, 4359044, 4858756, 4875140, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5260164, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5415812, 4359044, 5448580, 4359044, 5464964, 4359044, 5481348, 5563268, 4359044, 4359044, 4359044, 5636996, 4359044, 5686148, 4359044, 4359044, 5751684, 4359044, 4359044, 4359044, 4359044, 4359044, 5874564, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6275972, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5342084, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5628804, 5653380, 4359044, 5702532, 4359044, 4359044, 5809028, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4907008, 0, 5079040, 6094848, 0, 0, 0, 4358144, 4907008, 4358144, 5079040, 4358144, 5226496, 4358144, 5742592, 4358144, 4358144, 4358144, 6094848, 900, 4907908, 900, 5079940, 900, 5227396, 900, 5243780, 900, 900, 900, 900, 900, 900, 900, 5342084, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5628804, 5653380, 900, 5702532, 900, 900, 900, 900, 900, 900, 5211012, 900, 900, 900, 900, 5292932, 900, 900, 900, 900, 5366660, 900, 900, 900, 5456772, 900, 900, 900, 900, 900, 5555076, 5571460, 5579652, 5620612, 5669764, 900, 0, 0, 976, 976, 976, 4826064, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5178320, 976, 976, 976, 976, 976, 5112784, 976, 976, 976, 976, 976, 5284816, 976, 976, 976, 976, 5473232, 5522384, 976, 976, 976, 976, 5596112, 5710800, 5718992, 976, 5825488, 5866448, 976, 976, 5923792, 976, 5243856, 976, 976, 976, 976, 976, 976, 976, 5342160, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5628880, 5653456, 976, 5702608, 976, 976, 976, 976, 976, 976, 976, 5260240, 976, 976, 976, 976, 976, 976, 976, 976, 5415888, 976, 5448656, 976, 5465040, 976, 5481424, 5563344, 976, 976, 976, 5637072, 976, 5686224, 976, 976, 5751760, 976, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 0, 0, 0, 0, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 4932484, 4940676, 900, 900, 900, 900, 900, 900, 5055364, 900, 900, 5112708, 900, 900, 900, 900, 900, 5284740, 900, 900, 900, 900, 5473156, 5522308, 900, 900, 900, 900, 5596036, 5710724, 5718916, 900, 5825412, 5866372, 900, 900, 5923716, 900, 900, 6022020, 900, 900, 900, 5792644, 5817220, 900, 5858180, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6120324, 900, 6169476, 900, 900, 900, 900, 900, 6243204, 900, 6292356, 900, 6316932, 976, 5055440, 976, 976, 976, 976, 976, 976, 976, 976, 5211088, 976, 976, 976, 976, 5293008, 976, 976, 976, 976, 5366736, 976, 976, 976, 5456848, 976, 976, 976, 976, 976, 5555152, 5571536, 5579728, 5620688, 5669840, 976, 976, 976, 5792720, 5817296, 976, 5858256, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6120400, 976, 6169552, 976, 976, 976, 976, 976, 6243280, 976, 6292432, 976, 6317008, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6464464, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4932484, 4940676, 4359044, 4359044, 4359044, 4359044, 4359044, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 900, 900, 900, 900, 900, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 4923392, 4359044, 5055364, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5211012, 4359044, 4359044, 4359044, 4359044, 5292932, 4359044, 4359044, 4359044, 4359044, 5366660, 4359044, 4359044, 4359044, 5456772, 4359044, 4359044, 4359044, 4359044, 4359044, 5555076, 5571460, 5579652, 5620612, 5669764, 4359044, 4359044, 4359044, 5792644, 5817220, 4359044, 5858180, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6120324, 4359044, 6169476, 4359044, 4359044, 4359044, 4359044, 4359044, 6243204, 4359044, 6292356, 4359044, 6316932, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6464388, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 900, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931584, 0, 0, 0, 0, 0, 0, 0, 4358144, 6430720, 6438912, 0, 0, 0, 0, 0, 0, 4785028, 900, 900, 900, 4850564, 900, 900, 900, 900, 900, 4916100, 900, 4957060, 4973444, 900, 900, 900, 900, 900, 900, 5071748, 900, 900, 5194628, 900, 900, 900, 900, 900, 900, 900, 900, 976, 976, 976, 976, 976, 5194704, 976, 976, 976, 976, 976, 976, 976, 976, 4359044, 4359044, 4359044, 4359044, 4359044, 5194628, 4359044, 0, 0, 4785104, 976, 976, 976, 4850640, 976, 976, 976, 976, 976, 4916176, 976, 4957136, 4973520, 976, 976, 976, 976, 976, 976, 5071824, 976, 976, 976, 976, 976, 976, 976, 5219280, 976, 976, 6357968, 6382544, 6398928, 4801412, 4809604, 4359044, 4359044, 4891524, 4359044, 4948868, 4359044, 4359044, 4359044, 5047172, 4359044, 4359044, 4359044, 4359044, 5186436, 4359044, 5235588, 5301124, 4359044, 4359044, 5407620, 5530500, 4359044, 4359044, 4359044, 4359044, 4359044, 4923392, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 4924292, 900, 900, 900, 900, 4366336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1264, 0, 0, 0, 0, 0, 0, 0, 5268432, 976, 976, 5309392, 5317584, 976, 976, 976, 5432272, 976, 5489616, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5800912, 976, 976, 5882832, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 976, 6104016, 976, 976, 976, 6185936, 976, 976, 976, 6284240, 976, 976, 6333392, 976, 976, 976, 6390736, 976, 976, 6431696, 6439888, 4785028, 4359044, 4359044, 4359044, 4850564, 4359044, 4359044, 4359044, 4359044, 4359044, 4916100, 4359044, 4957060, 4973444, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5071748, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5219204, 4359044, 5268356, 4359044, 4359044, 5309316, 5317508, 4359044, 4359044, 4359044, 5432196, 4359044, 5489540, 4359044, 4359044, 4359044, 4359044, 4359044, 6054788, 4359044, 4359044, 4359044, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 5193728, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 5096324, 5104516, 900, 900, 5202820, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5890948, 900, 900, 900, 6030212, 900, 900, 900, 900, 6161284, 900, 900, 900, 900, 6407044, 976, 976, 976, 976, 976, 976, 976, 976, 4998096, 976, 976, 5039056, 976, 976, 976, 5096400, 5104592, 976, 976, 5202896, 976, 976, 976, 976, 976, 976, 976, 5891024, 976, 976, 976, 6030288, 976, 976, 976, 976, 6161360, 976, 976, 976, 976, 976, 976, 976, 6407120, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4998020, 4359044, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 900, 900, 4842372, 900, 900, 900, 4899716, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 975, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6300624, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 5809028, 6038404, 900, 900, 6079364, 6112132, 900, 6177668, 6210436, 900, 6235012, 900, 900, 900, 900, 900, 900, 900, 0, 0, 976, 976, 4842448, 976, 976, 976, 4899792, 976, 976, 976, 976, 976, 976, 5874640, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6276048, 976, 976, 976, 976, 976, 976, 976, 976, 976, 0, 900, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5112708, 4359044, 4359044, 4359044, 4359044, 4359044, 5284740, 4359044, 4359044, 4359044, 4359044, 5473156, 5522308, 4359044, 4359044, 4359044, 4359044, 5596036, 5710724, 5718916, 4359044, 5825412, 5866372, 4359044, 4359044, 5923716, 976, 6022096, 976, 6038480, 976, 976, 6079440, 6112208, 976, 6177744, 6210512, 976, 6235088, 976, 976, 976, 976, 976, 976, 976, 4359044, 4359044, 4842372, 4359044, 4359044, 4359044, 4899716, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5800836, 4359044, 4359044, 5882756, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6103940, 4359044, 4359044, 4359044, 6185860, 4359044, 4359044, 4359044, 6284164, 4359044, 4359044, 6333316, 4359044, 4359044, 6022020, 4359044, 6038404, 4359044, 4359044, 6079364, 6112132, 4359044, 6177668, 6210436, 4359044, 6235012, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4358144, 4358144, 4358144, 900, 900, 900, 0, 0, 0, 0, 0, 0, 0, 1760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 419, 0, 4358144, 4358144, 4358144, 5890048, 4358144, 4358144, 4358144, 6029312, 4358144, 4358144, 4358144, 4358144, 6160384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6406144, 900, 900, 900, 900, 900, 900, 900, 900, 4998020, 900, 900, 5038980, 4359044, 5038980, 4359044, 4359044, 4359044, 5096324, 5104516, 4359044, 4359044, 5202820, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5890948, 4359044, 4359044, 4359044, 6030212, 4359044, 4359044, 4359044, 4359044, 6161284, 4359044, 4359044, 4359044, 6226820, 0, 0, 0, 4816896, 4358144, 4358144, 4358144, 4358144, 6086656, 4817796, 900, 900, 900, 900, 6087556, 4817872, 976, 976, 976, 976, 6087632, 4817796, 4359044, 4359044, 4359044, 4359044, 6087556, 5087232, 4358144, 4358144, 4358144, 5898240, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6307840, 4358144, 4358144, 6356992, 6381568, 6397952, 4801412, 4809604, 900, 900, 4891524, 900, 4948868, 900, 900, 900, 5047172, 900, 900, 900, 900, 900, 6054788, 900, 900, 900, 976, 976, 5014480, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6054864, 976, 976, 976, 4359044, 4359044, 5014404, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6407044, 4358144, 4358144, 4358144, 900, 900, 900, 4890624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5898240, 5963776, 0, 0, 6193152, 0, 0, 5406720, 6397952, 5186436, 900, 5235588, 5301124, 900, 900, 5407620, 5530500, 900, 900, 900, 900, 5899140, 900, 900, 900, 900, 900, 900, 900, 900, 6308740, 900, 900, 6357892, 6382468, 6398852, 4801488, 4809680, 976, 976, 4891600, 976, 4948944, 976, 976, 976, 5047248, 976, 976, 976, 976, 5186512, 976, 5235664, 5301200, 976, 976, 5407696, 5530576, 976, 976, 976, 976, 5899216, 976, 976, 976, 976, 976, 976, 976, 976, 6308816, 5899140, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6308740, 4359044, 4359044, 6357892, 6382468, 6398852, 5021696, 4358144, 4358144, 5022596, 900, 900, 0, 4980736, 0, 0, 0, 0, 0, 5373952, 5734400, 6045696, 0, 0, 0, 0, 0, 2771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2785, 0, 2786, 0, 0, 0, 0, 0, 0, 0, 0, 1843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1263, 0, 0, 0, 0, 0, 0, 0, 0, 4980736, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5324800, 5373952, 5537792, 5545984, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 6348800, 900, 4866948, 4883332, 900, 4981636, 900, 900, 900, 900, 5325700, 5374852, 5538692, 5546884, 5587844, 5735300, 5972868, 900, 6046596, 900, 6071172, 900, 900, 900, 900, 6349700, 976, 4867024, 4883408, 976, 4981712, 976, 976, 976, 976, 976, 976, 976, 976, 5325776, 5374928, 5538768, 5546960, 5587920, 5735376, 5972944, 976, 6046672, 976, 6071248, 976, 976, 976, 976, 6349776, 4359044, 4866948, 4883332, 4359044, 4981636, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5325700, 5374852, 5538692, 5546884, 5587844, 5735300, 5972868, 4359044, 6046596, 4359044, 6071172, 4359044, 4359044, 4359044, 4359044, 6349700, 4358144, 6144000, 900, 6144900, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 655, 0, 0, 521, 521, 521, 521, 521, 845, 521, 521, 861, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59499, 57909, 57909, 57909, 57886, 5693440, 0, 6496256, 5144576, 5136384, 0, 5914624, 4358144, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 900, 900, 5006212, 900, 900, 900, 5120900, 5137284, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6325124, 976, 976, 5006288, 976, 976, 976, 5120976, 5137360, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 6325200, 4359044, 4359044, 4359044, 6390660, 4359044, 4359044, 6431620, 6439812, 4358144, 4358144, 4358144, 6266880, 6488064, 900, 900, 900, 6267780, 6488964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1767, 0, 0, 0, 0, 0, 1773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4359044, 5006212, 4359044, 4359044, 4359044, 5120900, 5137284, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6325124, 5914624, 5915524, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 3627, 0, 0, 0, 0, 0, 0, 2285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1265, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 6300548, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 0, 5013504, 0, 0, 6053888, 0, 0, 0, 0, 6012928, 4358144, 4358144, 5013504, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6053888, 4358144, 4358144, 900, 900, 5014404, 900, 900, 900, 900, 6275972, 900, 900, 900, 900, 900, 900, 900, 900, 900, 0, 0, 977, 976, 976, 976, 976, 976, 4858832, 4875216, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 0, 0, 0, 0, 900, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 6300548, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4358144, 4358144, 900, 5743492, 900, 900, 900, 6095748, 900, 976, 4907984, 976, 5080016, 976, 5227472, 976, 5743568, 976, 976, 976, 6095824, 976, 4359044, 4907908, 4359044, 5079940, 4359044, 5227396, 4359044, 5743492, 4359044, 4359044, 4359044, 6095748, 4359044, 5062656, 0, 0, 0, 4358144, 5062656, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 5063556, 900, 900, 900, 900, 900, 6226820, 976, 5063632, 976, 976, 976, 976, 976, 6226896, 4359044, 5063556, 4359044, 4359044, 4359044, 4825988, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 4359044, 5178244, 4359044, 4359044, 4359044, 4359044, 4359044, 5243780, 4359044, 0, 5931008, 4358144, 5332992, 5980160, 4358144, 900, 5333892, 5981060, 900, 976, 5333968, 5981136, 976, 4359044, 5333892, 5981060, 4359044, 5439488, 5128192, 4358144, 5129092, 900, 5129168, 976, 5129092, 4359044, 4358144, 900, 976, 4359044, 4358144, 900, 976, 4359044, 6004736, 6005636, 6005712, 6005636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2345, 0, 0, 0, 0, 0, 2351, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 0, 0, 0, 0, 0, 0, 450560, 0, 0, 450560, 0, 450560, 450560, 450560, 450560, 450560, 450560, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 450560, 0, 0, 0, 450560, 0, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 450560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1824, 0, 0, 0, 0, 0, 0, 1729, 0, 0, 0, 0, 0, 0, 450560, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 0, 2359296, 0, 0, 0, 2359296, 0, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 4358144, 6291456, 4358144, 6316032, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6463488, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 302, 0, 0, 306, 0, 0, 0, 0, 0, 0, 2335, 0, 0, 0, 0, 0, 2339, 0, 0, 0, 0, 0, 0, 0, 2343, 2344, 0, 0, 0, 0, 0, 2350, 0, 0, 0, 0, 0, 0, 1302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 2836, 521, 521, 521, 521, 2840, 521, 521, 4358144, 6430720, 6438912, 901, 0, 0, 0, 901, 0, 4784128, 0, 0, 0, 4849664, 0, 0, 0, 0, 0, 4915200, 0, 4956160, 4972544, 0, 0, 0, 0, 0, 0, 5070848, 0, 0, 0, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, 374, 374, 404, 977, 0, 4784128, 0, 0, 0, 4849664, 0, 0, 0, 0, 0, 4915200, 0, 4956160, 4972544, 0, 0, 0, 0, 0, 0, 5070848, 0, 0, 0, 0, 0, 0, 0, 5218304, 0, 5267456, 0, 0, 5308416, 5316608, 0, 0, 0, 5431296, 0, 5488640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5799936, 0, 0, 5881856, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 6078464, 6111232, 4358144, 6176768, 6209536, 6234112, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 901, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3653, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3218, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60573, 57886, 60576, 57886, 57886, 57886, 6037504, 0, 0, 6078464, 6111232, 0, 6176768, 6209536, 0, 6234112, 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, 0, 4841472, 0, 0, 0, 4898816, 0, 0, 0, 0, 0, 0, 0, 0, 6103040, 0, 0, 0, 6184960, 0, 0, 0, 6283264, 0, 0, 6332416, 0, 0, 0, 6389760, 0, 0, 6430720, 6438912, 0, 0, 0, 0, 0, 0, 0, 0, 459186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 459215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459340, 459215, 459372, 459215, 459215, 459372, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5480448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5840896, 5849088, 0, 1, 24578, 3, 0, 0, 0, 0, 507904, 0, 0, 0, 507904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507904, 0, 0, 0, 0, 0, 2796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3385, 3386, 0, 0, 0, 0, 3391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2789, 0, 0, 0, 2793, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 507904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2781, 0, 0, 2784, 0, 0, 0, 0, 2788, 0, 0, 0, 0, 0, 507904, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 442368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1225, 0, 0, 0, 0, 0, 0, 0, 1233, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 516096, 0, 0, 0, 516096, 0, 0, 0, 0, 0, 0, 516096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2287, 0, 2288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 516560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516560, 1, 24578, 0, 0, 0, 4366336, 0, 0, 548864, 0, 0, 301, 302, 0, 4268032, 305, 306, 409600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 2340, 0, 0, 0, 0, 0, 0, 0, 0, 2347, 0, 0, 0, 0, 0, 0, 2354, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 40960, 0, 0, 0, 0, 0, 0, 2747, 0, 2749, 0, 0, 2752, 0, 0, 0, 0, 0, 0, 2757, 0, 0, 0, 2760, 2761, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 855, 521, 521, 521, 521, 521, 874, 521, 521, 521, 521, 892, 521, 521, 521, 57886, 57886, 57886, 1, 24578, 4227364, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 540672, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1857, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 4227364, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 155941, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57887, 57887, 57887, 57887, 57887, 57887, 57887, 57910, 57910, 57887, 57887, 57937, 57887, 57887, 57887, 57887, 57887, 57887, 57887, 57937, 57937, 57887, 57887, 57887, 57887, 57937, 57937, 57887, 521, 57887, 57887, 57887, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4399797, 4399797, 4399797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 410, 358, 0, 0, 399, 0, 0, 0, 0, 0, 139264, 147456, 399, 410, 0, 423, 410, 1, 24578, 3, 155942, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1236, 0, 0, 0, 1, 24578, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573440, 0, 573440, 573440, 573440, 0, 573440, 573440, 573440, 573440, 573440, 573440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3628, 0, 0, 0, 3631, 0, 0, 0, 0, 0, 0, 0, 0, 3639, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 573440, 573440, 573440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1819, 1820, 0, 1822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1836, 0, 0, 0, 0, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 573440, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4399798, 311296, 4399798, 0, 0, 0, 311296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4276224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1738, 0, 5300224, 5234688, 5423104, 0, 0, 0, 0, 5988352, 0, 0, 6135808, 6307840, 0, 5996544, 4800512, 0, 6356992, 3627, 0, 0, 5496832, 0, 0, 0, 0, 0, 5611520, 0, 0, 0, 0, 0, 0, 0, 1792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 326, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 630, 302, 0, 4268032, 633, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2806, 0, 0, 0, 0, 0, 0, 0, 0, 2814, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581632, 0, 0, 0, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 581632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 581632, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3172, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3183, 521, 521, 3187, 521, 521, 6258688, 6447104, 0, 0, 6127616, 0, 6348800, 5906432, 0, 5537792, 3774, 0, 0, 0, 0, 5939200, 0, 0, 5677056, 6365184, 4866048, 0, 6070272, 5545984, 5152768, 0, 0, 6144000, 4358144, 4866048, 4882432, 4358144, 4358144, 4358144, 0, 901, 900, 900, 900, 900, 900, 4858756, 4875140, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 5260164, 900, 900, 900, 900, 900, 900, 900, 900, 6103940, 900, 900, 900, 6185860, 900, 900, 900, 6284164, 900, 900, 6333316, 900, 900, 900, 6390660, 900, 900, 6431620, 6439812, 0, 0, 0, 0, 5537792, 5545984, 5586944, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 4358144, 6348800, 4358144, 6144000, 0, 6144000, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 3869, 0, 0, 0, 0, 0, 787, 0, 0, 521, 521, 521, 521, 521, 847, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60869, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59939, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59946, 57909, 59948, 57909, 59951, 57909, 57909, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 3869, 0, 0, 0, 0, 0, 0, 2822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2830, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1938, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1387, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3638, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 310, 0, 451, 465, 465, 465, 478, 478, 478, 478, 478, 478, 478, 478, 478, 499, 478, 478, 478, 478, 517, 478, 478, 478, 517, 478, 478, 478, 478, 478, 478, 522, 57888, 522, 57888, 522, 522, 57888, 522, 522, 57911, 57888, 522, 522, 57888, 57888, 57888, 57911, 57888, 57888, 57888, 57888, 57888, 57888, 57888, 57911, 57911, 57888, 57888, 57938, 57888, 57888, 57888, 57888, 57888, 57888, 57888, 57938, 57938, 57888, 57888, 57888, 57888, 57938, 57938, 57888, 522, 57888, 57888, 57888, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 638, 0, 0, 641, 642, 0, 0, 0, 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1279, 0, 0, 0, 0, 1284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1292, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, 764, 0, 0, 768, 0, 0, 0, 0, 0, 0, 3115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1175, 0, 1177, 1178, 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 3114, 0, 0, 0, 0, 0, 3118, 0, 0, 0, 0, 0, 0, 0, 3124, 3125, 3126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1306, 0, 0, 0, 1310, 0, 0, 0, 0, 1313, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61024, 57886, 57886, 0, 824, 825, 0, 0, 0, 0, 780, 521, 521, 834, 838, 521, 521, 850, 521, 521, 521, 866, 521, 871, 521, 879, 521, 882, 521, 521, 896, 521, 57886, 57886, 57886, 57886, 57886, 57886, 59898, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 59913, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59448, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59461, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58253, 58257, 57886, 57886, 58269, 57886, 57886, 57886, 58285, 57886, 58290, 57886, 58298, 57886, 58301, 57886, 57886, 58315, 57886, 0, 57909, 57909, 57909, 58329, 58333, 57909, 57909, 58345, 57909, 57909, 57909, 58361, 57909, 58366, 57909, 58374, 57909, 58377, 57909, 57909, 58391, 57909, 0, 0, 0, 0, 58290, 57936, 57936, 57936, 58404, 58408, 57936, 57936, 58420, 57936, 57936, 57936, 58436, 57936, 58441, 57936, 58449, 57936, 0, 0, 0, 0, 521, 521, 521, 521, 521, 4172, 521, 57886, 57886, 57886, 57886, 57886, 61522, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 61528, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59544, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59557, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59545, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59014, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58452, 57936, 57936, 58466, 57936, 834, 838, 1128, 882, 521, 521, 0, 58257, 58253, 58478, 58301, 57886, 57886, 155941, 1138, 0, 0, 1141, 0, 0, 1146, 0, 0, 0, 0, 0, 0, 0, 0, 6103040, 0, 0, 0, 6184960, 0, 0, 0, 6283264, 0, 0, 6332416, 0, 0, 0, 6389760, 0, 0, 6430720, 6438912, 977, 0, 0, 0, 0, 0, 1210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1231, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 57886, 58831, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59964, 57909, 57909, 57909, 57909, 59969, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 1753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1777, 0, 0, 0, 0, 0, 0, 0, 0, 1188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 1199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 367, 367, 367, 0, 0, 697, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 1813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2815, 0, 0, 1861, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1874, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1887, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61044, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 521, 521, 521, 521, 521, 1929, 521, 521, 1932, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1945, 521, 521, 521, 521, 521, 521, 1951, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59828, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59380, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 61166, 57909, 57909, 57909, 61169, 57909, 57909, 57909, 57909, 521, 58754, 1960, 57886, 57886, 57886, 57886, 57886, 59311, 57886, 57886, 57886, 57886, 57886, 59317, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59330, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60835, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60845, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60854, 57886, 50657, 2060, 57909, 57909, 57909, 57909, 57909, 59411, 57909, 57909, 57909, 57909, 57909, 59417, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59430, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58890, 57909, 57909, 57909, 58893, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58900, 57909, 57909, 58904, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59472, 57909, 57909, 59475, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59489, 57909, 57909, 57909, 57909, 57909, 57909, 59495, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3151, 0, 0, 0, 3155, 0, 3157, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 59507, 57936, 57936, 57936, 57936, 57936, 59513, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59526, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59579, 57936, 57936, 57936, 57936, 57936, 57936, 59587, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 3105, 0, 0, 0, 0, 0, 0, 57936, 57936, 59568, 57936, 57936, 59571, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59585, 57936, 57936, 57936, 57936, 57936, 57936, 59591, 57936, 57936, 57936, 57936, 57936, 57936, 521, 2256, 521, 521, 521, 57886, 59605, 57886, 57886, 57886, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2275, 0, 0, 0, 0, 0, 0, 791, 0, 521, 521, 521, 521, 521, 521, 521, 521, 859, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1737, 1738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 0, 0, 0, 0, 417792, 0, 0, 0, 0, 0, 309, 0, 309, 0, 0, 0, 0, 2331, 0, 2333, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1826, 0, 1828, 0, 0, 0, 0, 0, 0, 0, 1835, 0, 0, 521, 2464, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59829, 57886, 57886, 59832, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60265, 57886, 57886, 57886, 57886, 60268, 57886, 57886, 60270, 57886, 60271, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60280, 57886, 57886, 60284, 59840, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59860, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61032, 57886, 57886, 57886, 57886, 57886, 57886, 61038, 57886, 61040, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61089, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 59929, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59949, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58886, 57909, 58888, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60375, 57936, 60376, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60012, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60032, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60070, 57936, 57936, 57936, 2405, 521, 521, 521, 521, 59836, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2399, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2446, 521, 521, 521, 521, 521, 521, 521, 2452, 521, 521, 521, 521, 521, 521, 2457, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2847, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2889, 521, 521, 521, 521, 521, 521, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60315, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60323, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58924, 57909, 57909, 58928, 57909, 57909, 57909, 57909, 57909, 58935, 57909, 57909, 57909, 58942, 57909, 0, 57886, 57936, 57936, 57936, 57936, 60359, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60370, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60380, 57936, 0, 0, 0, 0, 521, 521, 521, 4170, 4171, 521, 521, 57886, 57886, 57886, 61520, 61521, 57886, 57886, 57886, 57909, 57909, 57909, 61526, 61527, 57909, 57909, 57909, 57936, 57936, 57936, 61532, 57936, 57936, 60435, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 3104, 0, 0, 0, 3108, 0, 0, 0, 0, 0, 0, 3142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262731, 0, 0, 0, 0, 0, 0, 0, 0, 3113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3136, 57909, 60627, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60636, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60644, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61057, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61062, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 60676, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60685, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60693, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 1193, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60915, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60933, 57936, 60935, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60703, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 2748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 0, 352256, 352256, 0, 0, 0, 0, 521, 3948, 521, 3950, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 61307, 57886, 61309, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58807, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59347, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61165, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61170, 57909, 57909, 57909, 57909, 61323, 57909, 61325, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61339, 57936, 61341, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 3859, 521, 61204, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 4012, 0, 0, 0, 4015, 0, 0, 521, 521, 521, 521, 4020, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 61377, 57886, 57886, 57886, 57886, 57886, 57909, 60861, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60352, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 312, 313, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2765, 0, 0, 0, 0, 0, 0, 426, 0, 131072, 0, 0, 0, 426, 0, 0, 0, 0, 0, 426, 452, 0, 0, 0, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 516, 452, 516, 516, 516, 452, 516, 516, 516, 516, 516, 516, 523, 57889, 523, 57889, 523, 523, 57889, 523, 523, 57912, 57889, 523, 523, 57889, 57889, 57889, 57912, 57889, 57889, 57889, 57889, 57889, 57889, 57889, 57912, 57912, 57889, 57889, 57939, 57889, 57889, 57889, 57889, 57889, 57889, 57889, 57939, 57939, 57889, 57889, 57889, 57889, 57939, 57939, 57889, 614, 57889, 57966, 57966, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385024, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 57909, 57909, 58370, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58445, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61199, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 820, 780, 0, 0, 0, 0, 0, 0, 754, 0, 0, 754, 0, 0, 0, 0, 0, 754, 754, 0, 0, 815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 2770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2379, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 60312, 57909, 57909, 57909, 57909, 60316, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60345, 57909, 57909, 57909, 57909, 60349, 57909, 57909, 57909, 60354, 57909, 57909, 57909, 57909, 60381, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60432, 57936, 57936, 57936, 57936, 57936, 60436, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2807, 0, 0, 0, 0, 0, 2812, 0, 0, 0, 0, 0, 57886, 61381, 57886, 61383, 57886, 57886, 61385, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61395, 57909, 61397, 57909, 57909, 61399, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57936, 61409, 57936, 61411, 57936, 57936, 61413, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 351, 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 319, 319, 427, 428, 131072, 435, 428, 436, 427, 435, 436, 0, 315, 436, 448, 453, 466, 466, 466, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 501, 501, 501, 514, 514, 515, 515, 501, 515, 515, 515, 501, 515, 515, 515, 515, 515, 515, 524, 57890, 524, 57890, 524, 524, 57890, 524, 524, 57913, 57890, 524, 524, 57890, 57890, 57890, 57913, 57890, 57890, 57890, 57890, 57890, 57890, 57890, 57913, 57913, 57890, 57890, 57940, 57890, 57890, 57890, 57890, 57890, 57890, 57890, 57940, 57940, 57890, 57890, 57890, 57890, 57940, 57940, 57890, 615, 57965, 57965, 57965, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401408, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1198, 367, 367, 0, 0, 1201, 0, 0, 0, 1204, 0, 1206, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5242880, 0, 0, 0, 0, 0, 5603328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 58378, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59553, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58453, 57936, 57936, 57936, 57936, 521, 521, 521, 883, 521, 521, 0, 57886, 57886, 57886, 58302, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3411, 0, 0, 0, 3415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 57886, 521, 57886, 521, 521, 57886, 521, 521, 57909, 57886, 521, 521, 57886, 57886, 57886, 57909, 521, 521, 521, 58754, 901, 57886, 57886, 58758, 57886, 57886, 58762, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58776, 57886, 58781, 57886, 57886, 58785, 57886, 57886, 58788, 57886, 57886, 57886, 57886, 57886, 57886, 58279, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58322, 57909, 57909, 57909, 57909, 57909, 57909, 58355, 57909, 57909, 57909, 58876, 57909, 57909, 58880, 57909, 57909, 58883, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58902, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 58951, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58965, 57936, 58970, 57936, 57936, 58974, 57936, 57936, 58977, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 3861, 0, 0, 0, 3863, 0, 0, 0, 0, 0, 0, 3627, 3870, 0, 1723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 521, 521, 521, 1927, 1928, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2433, 521, 521, 521, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59320, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59332, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 61494, 57909, 61495, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 61502, 57936, 61503, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60018, 57936, 60020, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60396, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60401, 57936, 57936, 57936, 57936, 57936, 57886, 57886, 59370, 59371, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59420, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59432, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59446, 57909, 57909, 57909, 59450, 57909, 57909, 59455, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59990, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59998, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 59470, 59471, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3447, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1341, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3200, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 61016, 57886, 57886, 57886, 61019, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59566, 59567, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3162, 0, 0, 521, 2437, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2450, 521, 521, 521, 521, 521, 2454, 2455, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1374, 521, 1376, 521, 521, 521, 521, 521, 521, 521, 1389, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1404, 57886, 57886, 57886, 57886, 59869, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59882, 57886, 57886, 57886, 57886, 57886, 59886, 59887, 59888, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58800, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58822, 57886, 57886, 57886, 57886, 0, 0, 0, 2744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114688, 0, 0, 57886, 57886, 57886, 60288, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 0, 0, 0, 826, 0, 0, 521, 521, 521, 521, 521, 849, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 60863, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60875, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59447, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60672, 3137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1837, 0, 0, 0, 3166, 0, 0, 3169, 0, 0, 0, 0, 0, 0, 0, 3173, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2451, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3379, 0, 0, 0, 0, 0, 0, 0, 3383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3422, 0, 0, 0, 0, 0, 0, 3429, 521, 3458, 3459, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60827, 57886, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 695, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 883, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 2267, 0, 1142, 0, 0, 0, 0, 2270, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1795, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1809, 57909, 60884, 57909, 60886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60000, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60911, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60926, 57936, 60928, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60045, 60046, 57936, 57936, 57936, 57936, 57936, 57936, 60053, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61072, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59595, 57936, 57936, 57936, 1881, 521, 4010, 0, 4011, 0, 0, 0, 0, 0, 0, 0, 521, 4018, 521, 4019, 521, 521, 521, 4023, 521, 521, 521, 521, 521, 521, 521, 57886, 61375, 57886, 61376, 57886, 57886, 57886, 57886, 57886, 57886, 60264, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60269, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60275, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60283, 57886, 61380, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 61389, 57909, 61390, 57909, 57909, 57909, 61394, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61403, 57936, 61404, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60388, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 3376, 0, 0, 61408, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 1710, 0, 0, 0, 0, 0, 0, 1717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 4213, 57886, 57886, 57886, 61559, 57909, 57909, 57909, 61561, 57936, 57936, 57936, 61563, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 0, 2471, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59858, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 376, 0, 131072, 0, 0, 0, 376, 0, 0, 438, 444, 0, 376, 454, 467, 467, 467, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 525, 57891, 525, 57891, 525, 525, 57891, 525, 525, 57914, 57891, 525, 525, 57891, 57891, 57891, 57914, 57891, 57891, 57891, 57891, 57891, 57891, 57891, 57914, 57914, 57891, 57891, 57941, 57891, 57891, 57891, 57891, 57891, 57891, 57891, 57941, 57941, 57891, 57891, 57891, 57891, 57941, 57941, 57891, 525, 57891, 57891, 57891, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229376, 0, 491520, 524288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1180, 1181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 738, 0, 0, 1166, 0, 1298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1284, 0, 0, 0, 1312, 1180, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 1321, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 60241, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58814, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 521, 521, 1371, 521, 521, 1373, 521, 521, 521, 521, 1378, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1403, 521, 521, 521, 521, 521, 521, 521, 521, 3196, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3203, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1902, 521, 521, 521, 521, 521, 521, 521, 521, 1913, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1935, 521, 521, 521, 1941, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1950, 521, 521, 521, 521, 1956, 521, 521, 521, 521, 58754, 901, 57886, 57886, 58759, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58786, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61247, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61263, 57909, 57909, 57936, 57909, 57909, 57909, 57909, 58881, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58896, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58905, 57909, 57909, 58907, 57909, 57909, 57909, 57909, 58912, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58937, 57909, 57909, 57909, 57909, 0, 58812, 57936, 57936, 58948, 57936, 0, 0, 0, 0, 521, 521, 4169, 521, 521, 521, 4173, 57886, 57886, 61519, 57886, 57886, 57886, 61523, 57886, 57909, 57909, 61525, 57909, 57909, 57909, 61529, 57909, 57936, 57936, 61531, 57936, 0, 0, 0, 0, 4168, 521, 521, 521, 521, 521, 521, 61518, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61524, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61530, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61274, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 3938, 0, 0, 3941, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1883, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2876, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 60819, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58999, 57936, 57936, 59001, 57936, 57936, 57936, 57936, 59007, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59519, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59530, 57936, 57936, 57936, 57936, 57936, 59032, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2410, 521, 521, 521, 2259, 57886, 57886, 57886, 57886, 59608, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 2272, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2408, 521, 521, 521, 521, 521, 521, 521, 521, 2416, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1397, 521, 521, 521, 521, 521, 57886, 59893, 57886, 59895, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59916, 57909, 57909, 57909, 57909, 59920, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59958, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59971, 57909, 57909, 57909, 57909, 57909, 59975, 59976, 59977, 57909, 57909, 57909, 57909, 57909, 57909, 59982, 57909, 59984, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59999, 57936, 57936, 57936, 57936, 60003, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60683, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3369, 521, 57886, 60716, 57886, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 60065, 57936, 60067, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 0, 0, 0, 0, 3622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 415, 0, 0, 0, 0, 0, 60285, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 0, 0, 0, 1156, 1157, 1158, 1159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 57909, 57909, 57909, 60310, 57909, 60311, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59460, 57909, 57909, 57909, 57909, 57909, 59467, 57909, 521, 521, 3191, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3204, 521, 521, 521, 521, 521, 521, 521, 3210, 57886, 57886, 57886, 60582, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60596, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60606, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 60617, 57909, 57909, 57909, 57909, 57909, 57909, 60624, 57909, 57886, 60602, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2962, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61182, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58975, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58990, 57909, 57909, 57909, 57909, 60651, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60680, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60694, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61273, 57936, 61275, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1878, 1879, 521, 521, 521, 521, 1886, 521, 521, 521, 521, 521, 521, 521, 521, 1337, 521, 1342, 521, 521, 1346, 521, 521, 1349, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1380, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1396, 521, 521, 521, 521, 521, 57936, 57936, 57936, 57936, 57936, 60700, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 3768, 0, 0, 0, 0, 57909, 61073, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60030, 57936, 57936, 57936, 57936, 57936, 0, 521, 521, 521, 521, 521, 521, 3953, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61312, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2557, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59466, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61328, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 61344, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61382, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61396, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61080, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61090, 57936, 57936, 57936, 57936, 61410, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2265, 1706, 2266, 0, 0, 0, 0, 2268, 1713, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2353, 0, 0, 330, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 0, 1842, 0, 0, 1845, 0, 0, 0, 0, 0, 0, 1851, 1852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1845, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 455, 468, 468, 468, 481, 481, 481, 481, 492, 494, 481, 481, 492, 481, 503, 503, 503, 503, 518, 503, 503, 503, 518, 503, 503, 503, 503, 503, 503, 526, 57892, 526, 57892, 526, 526, 57892, 526, 526, 57915, 57892, 526, 526, 57892, 57892, 57892, 57915, 57892, 57892, 57892, 57892, 57892, 57892, 57892, 57915, 57915, 57892, 57892, 57942, 57892, 57892, 57892, 57892, 57892, 57892, 57892, 57942, 57942, 57892, 57892, 57892, 57892, 57942, 57942, 57892, 526, 57892, 57892, 57892, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 0, 2310144, 2310144, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 677, 678, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 700, 701, 0, 0, 0, 0, 0, 707, 0, 0, 0, 0, 0, 3141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 450560, 0, 0, 0, 0, 0, 711, 0, 713, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 765, 766, 0, 0, 0, 0, 0, 0, 0, 2308, 0, 0, 0, 0, 2313, 2314, 0, 0, 2316, 2317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270336, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, 305, 0, 0, 4857856, 4874240, 0, 0, 4923392, 0, 0, 0, 775, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 794, 0, 797, 0, 0, 0, 0, 0, 0, 777, 0, 789, 0, 803, 0, 0, 0, 0, 797, 809, 0, 0, 0, 0, 0, 809, 809, 812, 0, 0, 0, 777, 0, 0, 0, 0, 0, 821, 0, 0, 0, 0, 0, 0, 806, 0, 0, 806, 0, 0, 0, 0, 0, 806, 806, 0, 0, 0, 0, 786, 0, 0, 0, 0, 0, 0, 822, 782, 0, 0, 0, 0, 0, 775, 0, 0, 0, 821, 521, 521, 835, 521, 841, 521, 521, 856, 521, 521, 867, 521, 872, 521, 521, 881, 884, 889, 521, 897, 521, 57886, 57886, 57886, 57886, 57886, 57886, 60291, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 58254, 57886, 58260, 57886, 57886, 58275, 57886, 57886, 58286, 57886, 58291, 57886, 57886, 58300, 58303, 58308, 57886, 58316, 57886, 0, 57909, 57909, 57909, 58330, 57909, 58336, 57909, 57909, 58351, 57909, 57909, 58362, 57909, 58367, 57909, 57909, 58376, 58379, 58384, 57909, 58392, 57909, 0, 0, 0, 0, 58291, 57936, 57936, 57936, 58405, 57936, 58411, 57936, 57936, 58426, 57936, 57936, 58437, 57936, 58442, 57936, 57936, 58451, 58454, 58459, 57936, 58467, 57936, 835, 521, 521, 1129, 889, 521, 0, 57886, 58254, 57886, 58479, 58308, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2326528, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 1153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163, 0, 0, 0, 0, 0, 0, 0, 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1051, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6299648, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 1209, 0, 0, 0, 0, 0, 0, 0, 0, 1218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1235, 0, 0, 1187, 0, 0, 0, 0, 0, 3434, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3451, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59827, 57886, 57886, 57886, 57886, 59831, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58801, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58810, 57886, 57886, 58812, 57886, 57886, 57886, 57886, 58817, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61388, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61402, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5857280, 0, 6463488, 4939776, 0, 0, 5455872, 0, 0, 0, 0, 0, 0, 0, 0, 6062080, 6463488, 0, 5398528, 0, 521, 521, 521, 521, 1328, 521, 521, 521, 521, 521, 521, 1343, 521, 521, 521, 1348, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1365, 521, 1407, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58767, 57886, 57886, 57886, 57886, 57886, 57886, 58782, 57886, 57886, 57886, 58787, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58839, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 58855, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58869, 57909, 57909, 57909, 58877, 57909, 57909, 57909, 58882, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58899, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58419, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59003, 57936, 59005, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59018, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60704, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 57936, 58956, 57936, 57936, 57936, 57936, 57936, 57936, 58971, 57936, 57936, 57936, 58976, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 2741, 0, 57936, 58993, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59009, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59025, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61101, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 691, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 57936, 57936, 57936, 59036, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 1719, 0, 1721, 0, 0, 0, 0, 0, 3621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3632, 0, 0, 0, 3635, 3636, 0, 0, 0, 0, 0, 0, 393678, 0, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 393678, 0, 393678, 393678, 0, 1754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1770, 0, 0, 0, 0, 0, 1776, 0, 0, 1779, 0, 1781, 0, 0, 0, 0, 0, 0, 3642, 0, 3644, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2854, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1943, 1944, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 1787, 1788, 0, 0, 0, 0, 0, 0, 0, 0, 1797, 1798, 0, 0, 0, 0, 0, 0, 1804, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 888, 521, 521, 521, 521, 57886, 57886, 57886, 1810, 1811, 1812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1830, 1831, 0, 1832, 1833, 0, 0, 0, 0, 0, 0, 1186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3395, 0, 0, 3397, 0, 0, 0, 0, 0, 0, 0, 0, 1863, 1721, 1721, 1865, 521, 1867, 521, 1868, 1869, 521, 1871, 521, 521, 521, 1875, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1888, 521, 521, 521, 521, 1892, 521, 521, 521, 521, 1896, 521, 1898, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1908, 1909, 1911, 521, 521, 521, 521, 521, 521, 521, 1919, 1920, 521, 1922, 521, 521, 521, 521, 521, 521, 521, 521, 3667, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60611, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60622, 57909, 60625, 521, 1925, 1926, 521, 521, 521, 521, 521, 521, 521, 1934, 521, 1936, 521, 1939, 521, 521, 521, 521, 521, 1946, 521, 521, 1948, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3197, 3198, 521, 521, 521, 521, 3201, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3206, 521, 521, 521, 3209, 521, 521, 58754, 0, 59307, 57886, 59309, 57886, 59310, 57886, 59312, 57886, 59314, 57886, 57886, 57886, 59318, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59331, 57886, 57886, 57886, 57886, 59335, 57886, 1, 24578, 3, 155941, 156275, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 483328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 59339, 57886, 59341, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59351, 59352, 59354, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59362, 59363, 57886, 59365, 57886, 57886, 57886, 57886, 57886, 58799, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58829, 59368, 59369, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59377, 57886, 59379, 57886, 59382, 57886, 57886, 57886, 57886, 57886, 59390, 57886, 57886, 59392, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2558, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60371, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 60377, 57936, 57936, 57936, 57936, 50657, 0, 59407, 57909, 59409, 57909, 59410, 57909, 59412, 57909, 59414, 57909, 57909, 57909, 59418, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59431, 57909, 57909, 57909, 57909, 59435, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58916, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 1335, 521, 521, 521, 521, 58774, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 1709, 0, 0, 0, 0, 1716, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3882, 521, 3884, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59847, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60277, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 59439, 57909, 59441, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59451, 59452, 59454, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59462, 59463, 57909, 59465, 57909, 57909, 59468, 59469, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59477, 57909, 59479, 57909, 59482, 57909, 57909, 57909, 57909, 57909, 59490, 57909, 57909, 59492, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 57886, 60290, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60299, 57886, 57886, 57886, 60302, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 0, 0, 0, 1223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1238, 59503, 57936, 59505, 57936, 59506, 57936, 59508, 57936, 59510, 57936, 57936, 57936, 59514, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59527, 57936, 57936, 57936, 57936, 59531, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 0, 1707, 0, 0, 0, 0, 1714, 0, 0, 0, 0, 0, 0, 0, 0, 3170, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3182, 521, 3185, 521, 521, 521, 521, 59535, 57936, 59537, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59547, 59548, 59550, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59558, 59559, 57936, 57936, 59561, 57936, 57936, 59564, 59565, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59573, 57936, 59575, 57936, 59578, 57936, 57936, 57936, 57936, 57936, 59586, 57936, 57936, 59588, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 1926, 521, 2258, 521, 57886, 59369, 57886, 59607, 57886, 2265, 0, 2266, 0, 0, 0, 0, 2268, 0, 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2276, 0, 0, 2279, 2280, 0, 0, 0, 2284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2790, 0, 0, 0, 0, 2303, 0, 0, 0, 0, 2307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2323, 0, 0, 0, 0, 2327, 0, 0, 0, 0, 0, 3873, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58803, 57886, 57886, 57886, 57886, 58808, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58816, 57886, 57886, 57886, 58823, 58825, 57886, 57886, 57886, 0, 2356, 0, 0, 0, 0, 0, 0, 0, 0, 2365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2375, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 875, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 2412, 521, 2414, 521, 521, 521, 521, 521, 521, 521, 2420, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1357, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2441, 2442, 521, 521, 521, 521, 521, 521, 2449, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1383, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1400, 521, 521, 521, 2463, 521, 521, 2466, 2467, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59833, 57886, 59835, 57886, 57886, 57886, 57886, 57886, 57886, 60585, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60599, 57886, 57886, 57886, 57886, 57886, 59843, 57886, 59845, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59851, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60300, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 59896, 57886, 57886, 59899, 59900, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59922, 57909, 57909, 57909, 57909, 57909, 57909, 58388, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 3862, 0, 0, 3865, 0, 0, 0, 0, 3627, 0, 0, 59924, 57909, 57909, 57909, 57909, 57909, 57909, 59932, 57909, 59934, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59940, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 59991, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60707, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 60007, 57936, 57936, 57936, 57936, 57936, 57936, 60015, 57936, 60017, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60023, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 0, 521, 2868, 521, 521, 521, 521, 2872, 521, 521, 521, 2877, 521, 521, 521, 521, 521, 521, 521, 521, 2885, 521, 521, 521, 521, 521, 521, 521, 2890, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 59820, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58811, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60259, 57886, 60261, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60278, 57886, 57886, 57886, 57886, 60282, 57886, 57886, 57886, 57886, 57886, 60605, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60319, 57909, 57909, 57909, 57909, 57909, 60324, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 60287, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60295, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60301, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 0, 0, 0, 1185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60314, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60326, 57909, 60328, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60365, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61082, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 60362, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60368, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60379, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58959, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58978, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58988, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58960, 58967, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58980, 57936, 58982, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60417, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60424, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60410, 57936, 57936, 57936, 57936, 60414, 57936, 57936, 57936, 60419, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60427, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 3103, 0, 0, 3106, 3107, 0, 0, 3110, 3111, 60433, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278528, 0, 0, 0, 0, 0, 0, 3167, 3168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3189, 60580, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60593, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60600, 57909, 57909, 57909, 60629, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60642, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58925, 57909, 57909, 57909, 57909, 57909, 58933, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57909, 57909, 60649, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60678, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60691, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60044, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 3937, 0, 3939, 0, 0, 0, 0, 0, 3627, 3943, 0, 3945, 57936, 57936, 57936, 60698, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 2368, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2398, 521, 521, 2401, 521, 521, 521, 521, 521, 521, 2409, 521, 521, 3403, 0, 0, 0, 0, 3405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3419, 0, 0, 0, 0, 3424, 3425, 0, 3427, 0, 0, 0, 0, 0, 1197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1286, 0, 0, 0, 0, 1314, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3452, 521, 521, 521, 521, 3430, 0, 0, 0, 3433, 521, 521, 521, 521, 521, 521, 3440, 521, 521, 521, 521, 521, 3444, 521, 521, 521, 521, 521, 521, 521, 3450, 521, 521, 521, 521, 521, 3456, 60828, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60834, 57886, 57886, 57886, 57886, 57886, 60840, 57886, 57886, 60843, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60850, 60852, 57886, 57886, 57886, 57886, 57886, 57886, 58282, 58284, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58327, 57909, 57909, 57909, 57909, 57909, 57909, 58358, 58360, 57909, 60856, 57886, 60858, 60859, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 60866, 57909, 57909, 57909, 57909, 57909, 60870, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60876, 57909, 57909, 57909, 57909, 57909, 60882, 57909, 57909, 60885, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60892, 60894, 57909, 57909, 57909, 57909, 60898, 57909, 60900, 60901, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 60908, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61200, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3866, 3867, 0, 3627, 0, 3871, 57936, 57936, 60912, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60918, 57936, 57936, 57936, 57936, 57936, 60924, 57936, 57936, 60927, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60934, 60936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59000, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59020, 57936, 57936, 57936, 57936, 57936, 59028, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59542, 57936, 57936, 57936, 59546, 57936, 57936, 59551, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60048, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60940, 57936, 60942, 60943, 57936, 521, 521, 3602, 57886, 57886, 60949, 0, 0, 0, 0, 0, 0, 3611, 0, 0, 3614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 3649, 3650, 521, 521, 521, 521, 3654, 3655, 521, 521, 521, 521, 521, 3659, 521, 521, 521, 521, 3662, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 61018, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61023, 57886, 57886, 57886, 57886, 57886, 57886, 60833, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60841, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60855, 57909, 57909, 57909, 57909, 57909, 57909, 61052, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61063, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61071, 57909, 57909, 57909, 57909, 57909, 57909, 58914, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58930, 57909, 57909, 57909, 57909, 57909, 57909, 58941, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 303104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 61240, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61256, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 61076, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61081, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61092, 57886, 57886, 57886, 61440, 57886, 61442, 57886, 57886, 57886, 57886, 61447, 61448, 61449, 61450, 57909, 57909, 57909, 61453, 57909, 61455, 57909, 57909, 57909, 57909, 61460, 61461, 61462, 61463, 57936, 57936, 57936, 61466, 57936, 61468, 57936, 57936, 57936, 57936, 61473, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61031, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 61392, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 61406, 57936, 57936, 57936, 61535, 57936, 0, 0, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 521, 521, 521, 4198, 521, 57886, 57886, 57886, 57886, 61546, 57886, 57909, 57909, 57909, 57909, 61550, 57909, 57936, 57936, 57936, 57936, 61554, 57936, 0, 371, 371, 0, 429, 131072, 371, 429, 429, 332, 371, 429, 0, 0, 429, 449, 429, 0, 0, 0, 429, 488, 488, 488, 493, 488, 488, 488, 493, 488, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, 527, 57893, 527, 57893, 527, 527, 57893, 527, 527, 57916, 57893, 527, 527, 57893, 57893, 57893, 57916, 57893, 57893, 57893, 57893, 57893, 57893, 57893, 57916, 57916, 57893, 57893, 57943, 57893, 57893, 57893, 57893, 57893, 57893, 57893, 57943, 57943, 57893, 57893, 57893, 57893, 57943, 57943, 57893, 527, 57893, 57893, 57893, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 4399798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 773, 0, 0, 0, 521, 828, 521, 521, 521, 521, 521, 521, 860, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 58246, 1295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 2839, 521, 521, 521, 521, 521, 521, 1326, 521, 521, 521, 521, 521, 1338, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2430, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58765, 57886, 57886, 57886, 57886, 57886, 58777, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59381, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61041, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 58954, 57936, 57936, 57936, 57936, 57936, 58966, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 3375, 0, 0, 0, 57909, 57909, 57909, 59954, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60355, 57909, 57909, 57909, 57936, 57936, 57936, 60037, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59026, 57936, 57936, 57936, 0, 0, 4212, 521, 521, 521, 61558, 57886, 57886, 57886, 61560, 57909, 57909, 57909, 61562, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 521, 521, 3793, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60607, 57886, 57886, 60610, 57886, 57886, 60613, 0, 0, 60614, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60637, 60638, 57909, 57909, 57909, 57909, 60641, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60647, 0, 0, 0, 430, 131072, 0, 430, 430, 0, 0, 430, 439, 0, 430, 0, 430, 469, 469, 469, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 528, 57894, 528, 57894, 528, 528, 57894, 528, 528, 57917, 57894, 528, 528, 57894, 57894, 57894, 57917, 57894, 57894, 57894, 57894, 57894, 57894, 57894, 57917, 57917, 57894, 57894, 57944, 57894, 57894, 57894, 57894, 57894, 57894, 57894, 57944, 57944, 57894, 57894, 57894, 57894, 57944, 57944, 57894, 528, 57894, 57894, 57894, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 58754, 1961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 2561, 0, 50657, 2061, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59950, 57909, 57909, 2302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2326, 0, 0, 0, 0, 0, 1213, 0, 1215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 420, 0, 0, 0, 0, 0, 2385, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1949, 521, 521, 521, 521, 521, 521, 521, 0, 3138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3158, 0, 0, 0, 0, 0, 0, 0, 0, 1731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1747, 0, 0, 1750, 0, 0, 521, 521, 521, 3213, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58868, 57909, 0, 0, 3404, 0, 0, 0, 0, 0, 3407, 0, 3409, 0, 0, 3412, 0, 0, 0, 0, 0, 3417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 4399797, 4399797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3460, 521, 521, 521, 521, 521, 521, 521, 521, 3468, 521, 521, 3471, 521, 521, 521, 60818, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58296, 57886, 57886, 57886, 57886, 58314, 57886, 57886, 0, 57909, 57909, 58325, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 60857, 57886, 57886, 57886, 60860, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60877, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59959, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 60664, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 60887, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60896, 57909, 57909, 60899, 57909, 57909, 57909, 60902, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4089, 521, 57886, 57886, 57886, 60938, 57936, 57936, 60941, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3615, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3159, 3160, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3663, 521, 3665, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 61017, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59850, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59857, 57886, 59859, 57886, 59862, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61029, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61035, 57886, 61037, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 61046, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58917, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58934, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 58949, 57936, 61093, 57936, 61095, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 3791, 521, 521, 521, 521, 521, 521, 521, 521, 3797, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58804, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58819, 57886, 57886, 57886, 57886, 57886, 57886, 61153, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61159, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61172, 57909, 57909, 57909, 57909, 57909, 57909, 58915, 57909, 57909, 58922, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58936, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 1336, 521, 521, 521, 521, 58775, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 0, 1711, 0, 0, 0, 0, 1718, 0, 0, 0, 0, 0, 0, 1247, 1248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1155, 1154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3630, 0, 0, 0, 0, 0, 0, 0, 3637, 0, 0, 57936, 57936, 57936, 57936, 57936, 61197, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3782, 0, 0, 521, 521, 521, 521, 0, 0, 0, 0, 683, 684, 0, 0, 0, 0, 689, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 57896, 530, 57896, 530, 530, 57896, 530, 530, 57919, 57896, 530, 530, 57896, 57896, 57896, 57919, 57886, 58258, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58317, 0, 57909, 57909, 57909, 57909, 58334, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59481, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 57936, 57936, 57936, 58468, 521, 839, 521, 521, 521, 898, 0, 58258, 57886, 57886, 57886, 57886, 58317, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1219, 1220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6299648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5808128, 0, 0, 0, 1211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 3647, 521, 521, 521, 521, 521, 521, 521, 3652, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2421, 521, 521, 521, 2424, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2895, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60842, 57886, 60844, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 1839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1307, 1308, 0, 0, 1154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 1319, 521, 521, 521, 1958, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 412, 139264, 147456, 0, 0, 0, 421, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 0, 2773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3634, 0, 0, 0, 0, 0, 0, 424, 424, 0, 0, 131072, 424, 0, 0, 0, 424, 0, 440, 0, 0, 424, 334, 470, 470, 470, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 504, 512, 512, 512, 512, 519, 512, 512, 512, 519, 512, 512, 512, 512, 512, 512, 529, 57895, 529, 57895, 529, 529, 57895, 529, 529, 57918, 57895, 529, 529, 57895, 57895, 57895, 57918, 57895, 57895, 57895, 57895, 57895, 57895, 57895, 57918, 57918, 57895, 57895, 57945, 57895, 57895, 57895, 57895, 57895, 57895, 57895, 57945, 57945, 57895, 57895, 57895, 57895, 57945, 57945, 57895, 529, 57895, 57895, 57895, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1734, 0, 0, 0, 0, 0, 0, 0, 0, 1741, 0, 0, 1744, 1745, 1746, 0, 1748, 1749, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 842, 521, 851, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 899, 57886, 57886, 57886, 57886, 57886, 57886, 61244, 57886, 57886, 57886, 61248, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61254, 57909, 57909, 57909, 57909, 57909, 57909, 61260, 57909, 57909, 57909, 61264, 57909, 57936, 57886, 57886, 58261, 57886, 58270, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58318, 0, 57909, 57909, 57909, 57909, 57909, 58337, 57909, 58346, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58887, 58889, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60661, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60669, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58469, 521, 521, 521, 521, 1130, 899, 0, 57886, 57886, 57886, 57886, 58480, 58318, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1764, 1765, 1766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2319, 2320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 1331, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1350, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1360, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59825, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59837, 57886, 57886, 521, 1408, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58770, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58789, 57886, 57886, 57886, 57886, 57886, 57886, 59342, 59343, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59360, 57886, 57886, 57886, 57886, 57886, 59367, 57886, 57886, 58833, 57886, 57886, 57886, 57886, 57886, 58840, 57886, 57886, 57886, 58847, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58865, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58919, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60042, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 3370, 57886, 57886, 60717, 0, 0, 0, 0, 0, 57936, 57936, 57936, 59037, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1796, 0, 0, 0, 0, 0, 0, 0, 1803, 0, 1805, 0, 0, 0, 1807, 0, 739, 0, 0, 0, 0, 1838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1836, 1924, 521, 521, 521, 521, 521, 521, 521, 521, 1933, 521, 521, 521, 521, 521, 521, 1942, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1952, 1954, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59861, 57886, 57886, 57886, 57886, 57886, 57886, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59328, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61033, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59428, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58397, 57936, 57936, 57936, 57936, 57936, 57936, 58430, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59572, 57936, 57936, 57936, 57936, 57936, 57936, 59581, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59592, 59594, 57936, 57936, 57936, 57936, 521, 521, 521, 0, 0, 2472, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59885, 57886, 57886, 57886, 57886, 59889, 57886, 57886, 57886, 2329, 0, 0, 0, 0, 0, 0, 0, 0, 2337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3128, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 2465, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 59824, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59836, 57886, 57886, 57886, 57886, 57886, 57886, 61492, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61500, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59583, 59584, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 2255, 521, 59925, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60358, 59953, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59972, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59935, 57909, 59937, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60660, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60671, 57936, 60008, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59598, 521, 521, 60036, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60055, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 4132, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 2769, 0, 0, 2772, 0, 0, 0, 0, 0, 0, 2776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2787, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319488, 319488, 0, 0, 0, 0, 0, 0, 2795, 0, 0, 0, 0, 2797, 0, 0, 0, 0, 0, 0, 0, 2801, 2802, 0, 0, 2805, 0, 0, 2808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2828, 0, 0, 0, 0, 521, 2832, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2878, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1356, 521, 521, 521, 1359, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2873, 521, 521, 521, 521, 521, 521, 2880, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2888, 521, 521, 521, 2891, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60253, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61493, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61501, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60921, 57936, 60923, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60930, 57936, 57936, 60932, 57936, 57936, 57936, 57936, 57936, 0, 0, 57909, 60308, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60331, 57936, 57936, 60407, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60415, 57936, 57936, 57936, 57936, 57936, 57936, 60422, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60431, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59574, 57936, 57936, 57936, 59580, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59590, 57936, 57936, 57936, 57936, 59596, 57936, 57936, 521, 521, 521, 0, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59864, 57886, 57886, 57886, 57936, 60434, 57936, 57936, 57936, 57936, 57936, 57936, 3094, 521, 521, 521, 521, 60441, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 3102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 3646, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3658, 521, 521, 521, 3112, 0, 0, 0, 0, 0, 0, 0, 3116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3130, 3131, 0, 0, 0, 0, 0, 0, 0, 3143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 335, 0, 0, 0, 0, 0, 3211, 521, 521, 521, 521, 521, 521, 521, 3215, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 60567, 57886, 57886, 57886, 57886, 57886, 60572, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61246, 57886, 57886, 57886, 61249, 57909, 57909, 57909, 57909, 61253, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61262, 57909, 57909, 57909, 61265, 60601, 57886, 60603, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60608, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 60616, 57909, 57909, 57909, 57909, 57909, 60621, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60654, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61086, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 60650, 57909, 60652, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60657, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60665, 57936, 57936, 57936, 57936, 57936, 60670, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60041, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60054, 57936, 57936, 57936, 57936, 57936, 60058, 60059, 60060, 57936, 60696, 57936, 57936, 57936, 60699, 57936, 60701, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60706, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 3374, 0, 0, 3377, 3378, 521, 521, 521, 521, 521, 521, 3462, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 60822, 57886, 57886, 57886, 57886, 60826, 57886, 57886, 57886, 57886, 57886, 58835, 57886, 57886, 57886, 57886, 57886, 57886, 58846, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58862, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58394, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 58412, 57936, 58421, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 4085, 521, 4087, 521, 521, 521, 57886, 57886, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60916, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60931, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 3608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, 0, 1196, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3619, 3620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3633, 0, 0, 0, 0, 0, 0, 0, 0, 1793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60825, 57886, 57886, 57886, 57886, 521, 521, 3787, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3798, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61149, 57886, 57886, 57886, 57886, 57886, 58836, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58861, 57909, 57909, 57909, 58870, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61198, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 3777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 4022, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61379, 0, 521, 521, 521, 521, 521, 521, 521, 521, 3955, 521, 3957, 3958, 521, 3960, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61314, 57886, 61316, 61317, 57886, 61319, 57886, 61321, 61488, 57886, 61489, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61496, 57909, 61497, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 61504, 57936, 61505, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58961, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59019, 57936, 57936, 59023, 57936, 57936, 57936, 57936, 57936, 59030, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 4224, 61569, 61570, 61571, 521, 521, 521, 521, 521, 521, 521, 1332, 1339, 521, 521, 521, 521, 521, 521, 521, 521, 1352, 521, 1354, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2422, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 60566, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58307, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57896, 57896, 57896, 57896, 57896, 57896, 57896, 57919, 57919, 57896, 57896, 57946, 57896, 57896, 57896, 57896, 57896, 57896, 57896, 57946, 57946, 57896, 57896, 57896, 57896, 57946, 57946, 57896, 530, 57896, 57896, 57896, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2312, 0, 0, 0, 2315, 0, 0, 0, 0, 0, 2321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 58909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 1706, 0, 0, 0, 1712, 1713, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 383, 0, 139264, 147456, 0, 405, 0, 0, 405, 0, 0, 0, 431, 131072, 0, 431, 431, 0, 0, 431, 0, 445, 431, 0, 431, 471, 471, 471, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 531, 57897, 531, 57897, 531, 531, 57897, 531, 531, 57920, 57897, 531, 531, 57897, 57897, 57897, 57920, 57897, 57897, 57897, 57897, 57897, 57897, 57897, 57920, 57920, 57897, 57897, 57947, 57897, 57897, 57897, 57897, 57897, 57897, 57897, 57947, 57947, 57897, 57897, 57897, 57897, 57947, 57947, 57897, 531, 57897, 57897, 57897, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2775, 0, 0, 0, 0, 0, 2780, 0, 2782, 2783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1157, 0, 0, 0, 0, 0, 0, 0, 1159, 0, 0, 0, 0, 0, 0, 1266, 0, 0, 0, 0, 1271, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 654, 0, 0, 0, 0, 813, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 3645, 521, 521, 521, 3648, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3656, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 733, 654, 0, 0, 521, 829, 521, 521, 521, 844, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 885, 521, 521, 521, 521, 57886, 57886, 58247, 57886, 57886, 57886, 58263, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58304, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58323, 57909, 57909, 57909, 58339, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59987, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 59996, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60391, 57936, 60393, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60022, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60029, 57936, 60031, 57936, 60034, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 58380, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58398, 57936, 57936, 57936, 58414, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60390, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60710, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 58455, 57936, 57936, 57936, 57936, 521, 521, 521, 885, 521, 521, 0, 57886, 57886, 57886, 58304, 57886, 57886, 293, 1138, 0, 0, 1142, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3888, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58841, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60639, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59965, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 1154, 1155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3133, 0, 0, 0, 0, 0, 0, 1155, 0, 0, 0, 0, 0, 0, 1280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 0, 763, 0, 0, 767, 0, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 58757, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58771, 58778, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58791, 57886, 58793, 57886, 57886, 57886, 57886, 57886, 60831, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60849, 57886, 60851, 57886, 57886, 57886, 57886, 57886, 57886, 58278, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58354, 57909, 57909, 58908, 57909, 58910, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58923, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58938, 57909, 57909, 57909, 0, 57886, 57936, 58946, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60068, 57936, 57936, 60071, 60072, 57936, 2404, 521, 2731, 521, 521, 59835, 57886, 60080, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 0, 0, 0, 0, 4014, 0, 4016, 0, 521, 521, 521, 521, 521, 4021, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61378, 57886, 57936, 59033, 57936, 57936, 57936, 521, 1332, 521, 1389, 521, 521, 58771, 57886, 57886, 58828, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3156, 0, 0, 0, 0, 3161, 0, 0, 0, 3163, 0, 1724, 1725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2342912, 0, 0, 0, 521, 521, 521, 521, 521, 521, 1930, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1957, 521, 58754, 1961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59321, 59322, 57886, 57886, 57886, 57886, 59329, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 61391, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61405, 57936, 57936, 50657, 2061, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59421, 59422, 57909, 57909, 57909, 57909, 59429, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 741, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59520, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 59473, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59501, 57909, 57886, 57886, 57886, 57886, 57886, 60832, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60847, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58843, 57886, 57886, 57886, 50657, 58754, 977, 57909, 58852, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58866, 58873, 57936, 57936, 57936, 57936, 57936, 59540, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59560, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 59569, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59597, 57936, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59359, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2346, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2397, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61162, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59866, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59878, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59884, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59890, 57886, 57886, 57886, 57886, 57886, 61030, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61036, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61393, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 61407, 57909, 57909, 57909, 57909, 59955, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59967, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59973, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60366, 57909, 57909, 57909, 60369, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 60373, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 4083, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57909, 57909, 59979, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60430, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60038, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60050, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60056, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1149, 0, 0, 57936, 57936, 60062, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3109, 0, 0, 60258, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59865, 3164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 3180, 521, 521, 521, 521, 521, 521, 3188, 521, 521, 521, 521, 521, 521, 521, 1333, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2858, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57909, 57909, 60628, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61070, 57909, 57909, 57936, 57936, 57936, 60677, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59027, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61099, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3171, 0, 0, 0, 521, 3175, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 2472, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59349, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61039, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 61441, 57886, 61443, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61454, 57909, 61456, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 3607, 0, 3609, 0, 0, 0, 3613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1733, 0, 0, 0, 1736, 0, 0, 1739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 335872, 0, 0, 61467, 57936, 61469, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 4134, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61485, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59846, 57886, 59848, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60273, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 388, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2351104, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 441, 0, 0, 0, 456, 472, 472, 472, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 532, 57898, 532, 57898, 532, 532, 57898, 532, 532, 57921, 57898, 532, 532, 57898, 57898, 57898, 57921, 57898, 57898, 57898, 57898, 57898, 57898, 57898, 57921, 57921, 57898, 57898, 57948, 57898, 57898, 57898, 57898, 57898, 57898, 57898, 57948, 57948, 57898, 57898, 57898, 57898, 57948, 57948, 57898, 532, 57898, 57898, 57898, 1, 24578, 3, 155941, 156275, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212992, 0, 0, 0, 0, 0, 212992, 212992, 212992, 212992, 212992, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 58264, 57886, 57886, 58280, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58340, 57909, 57909, 58356, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59444, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59464, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58921, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 0, 0, 0, 1722, 0, 1241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1293, 0, 0, 0, 0, 0, 1299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1315, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1890, 521, 521, 521, 521, 521, 521, 521, 521, 1372, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1391, 521, 521, 521, 521, 521, 1399, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 59819, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59357, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58772, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58848, 50657, 58754, 977, 58851, 57909, 57909, 57909, 57909, 57909, 58858, 57909, 57909, 57909, 57909, 58864, 57909, 57909, 57909, 58830, 57886, 57886, 57886, 57886, 57886, 58838, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58867, 57909, 57909, 57909, 57909, 57909, 57909, 60631, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60645, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59985, 57909, 57909, 59988, 59989, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60005, 57936, 0, 0, 1755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, 0, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59323, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59334, 57886, 57886, 57886, 57886, 57886, 58837, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61058, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61064, 57909, 61066, 57909, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59423, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59434, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61178, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61191, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 1705, 0, 0, 0, 0, 1712, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59541, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59552, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61279, 57936, 57936, 521, 57886, 0, 0, 0, 3940, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 2282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2298, 2299, 0, 0, 0, 0, 0, 0, 0, 3382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 2355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2328, 521, 2413, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2866, 57886, 57886, 57886, 57886, 59844, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58824, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 59928, 57909, 57909, 57909, 57909, 59933, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60011, 57936, 57936, 57936, 57936, 60016, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58985, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 3380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4284416, 0, 0, 57886, 60829, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59366, 57886, 57936, 57936, 57936, 60913, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59562, 57936, 57936, 57936, 0, 521, 521, 521, 521, 3951, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 61310, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59875, 57886, 57886, 57886, 57886, 59880, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58859, 57909, 57909, 57909, 58863, 57909, 57909, 58874, 57909, 57909, 57909, 57909, 61326, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61342, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59004, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60689, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61508, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 521, 1333, 521, 521, 1698, 521, 58772, 57886, 57886, 57886, 59047, 57886, 1138, 0, 0, 1708, 0, 0, 0, 0, 1715, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3883, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59344, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59364, 57886, 57886, 57886, 341, 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 341, 295, 0, 0, 0, 0, 0, 4013, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4027, 521, 521, 4029, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59376, 57886, 57886, 57886, 57886, 57886, 57886, 59385, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59396, 59398, 57886, 57886, 57886, 57886, 0, 0, 0, 389, 390, 392, 342, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, 341, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 748, 749, 750, 0, 0, 0, 0, 0, 756, 757, 0, 0, 0, 0, 0, 0, 0, 0, 769, 770, 0, 772, 0, 0, 0, 389, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 389, 0, 0, 0, 0, 0, 342, 389, 0, 0, 0, 139264, 147456, 0, 0, 0, 422, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 245760, 0, 0, 245760, 245760, 245760, 0, 0, 0, 0, 0, 245760, 0, 245760, 245760, 0, 0, 0, 245760, 245760, 0, 0, 245760, 0, 0, 0, 0, 131072, 0, 0, 0, 341, 0, 0, 0, 446, 0, 341, 0, 473, 473, 473, 473, 489, 489, 489, 489, 489, 489, 489, 489, 489, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 533, 57899, 533, 57899, 533, 533, 57899, 533, 533, 57922, 57899, 533, 533, 57899, 57899, 57899, 57922, 57899, 57899, 57899, 57899, 57899, 57899, 57899, 57922, 57922, 57899, 57935, 57949, 57935, 57935, 57935, 57935, 57935, 57935, 57935, 57949, 57949, 57935, 57935, 57935, 57935, 57949, 57949, 57935, 533, 57899, 57899, 57899, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 344064, 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 332, 0, 0, 0, 0, 0, 0, 0, 0, 802, 0, 660, 0, 779, 0, 0, 0, 0, 0, 779, 802, 0, 802, 800, 0, 0, 0, 814, 0, 0, 0, 656, 817, 0, 779, 0, 0, 0, 0, 0, 823, 0, 0, 0, 0, 783, 656, 827, 0, 521, 830, 521, 521, 521, 846, 521, 521, 862, 521, 521, 521, 521, 876, 521, 521, 521, 521, 894, 521, 521, 57886, 57886, 58248, 57886, 57886, 57886, 58265, 57886, 57886, 58281, 57886, 57886, 57886, 57886, 58295, 57886, 57886, 57886, 57886, 58313, 57886, 57886, 0, 57909, 57909, 58324, 57909, 57909, 57909, 58341, 57909, 57909, 58357, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59476, 57909, 57909, 57909, 57909, 57909, 57909, 59485, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59496, 59498, 57909, 57909, 57909, 57909, 57886, 57909, 57909, 58371, 57909, 57909, 57909, 57909, 58389, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58399, 57936, 57936, 57936, 58416, 57936, 57936, 58432, 57936, 57936, 57936, 57936, 58446, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60412, 57936, 57936, 60416, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60425, 57936, 57936, 57936, 60428, 60429, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 1143, 0, 0, 1148, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3881, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58802, 57886, 57886, 57886, 58806, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2962, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60623, 57909, 57936, 57936, 58464, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 1816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 1274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540, 57906, 540, 57906, 540, 540, 57906, 540, 540, 57929, 57906, 540, 540, 57906, 57906, 57906, 57929, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58773, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59348, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59361, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58797, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58821, 57886, 57886, 57886, 57886, 57886, 57886, 59374, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59386, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59397, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61444, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61457, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3095, 521, 521, 521, 57886, 60442, 57886, 57886, 57886, 0, 0, 3100, 3101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 3776, 0, 0, 0, 0, 3780, 0, 0, 0, 0, 0, 0, 0, 0, 3783, 0, 521, 521, 521, 3785, 0, 0, 0, 0, 1814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221645, 221645, 221645, 221645, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59316, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59327, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59345, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59356, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59876, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59416, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59427, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58429, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 2440, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2459, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60252, 57886, 57886, 57886, 57886, 57886, 60257, 59892, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 59910, 57909, 59912, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60340, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61060, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59981, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 59993, 57936, 59995, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60686, 60687, 57936, 57936, 57936, 57936, 60690, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60064, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2274, 0, 0, 0, 0, 0, 0, 0, 2820, 0, 0, 0, 0, 2823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2831, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61320, 57886, 521, 2842, 521, 521, 2845, 2846, 521, 521, 521, 521, 521, 2851, 521, 2853, 521, 521, 521, 521, 2857, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2863, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60251, 57886, 57886, 60254, 60255, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60878, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59445, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59456, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61336, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61352, 57936, 521, 521, 521, 521, 521, 2871, 521, 521, 521, 521, 521, 521, 2879, 521, 521, 521, 521, 521, 2884, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1904, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1353, 1355, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 60260, 57886, 60262, 57886, 57886, 57886, 57886, 60266, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60272, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60281, 57886, 57886, 57886, 57886, 57886, 59373, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59401, 57886, 57886, 57886, 57886, 57886, 60289, 57886, 57886, 57886, 57886, 57886, 60294, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60330, 57909, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60318, 57909, 57909, 60321, 60322, 57909, 57909, 57909, 57909, 57909, 60327, 57909, 60329, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60336, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60342, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60350, 57909, 57909, 57909, 57909, 57909, 57909, 60357, 57909, 57909, 57909, 60333, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60339, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60348, 57909, 57909, 57909, 57909, 57909, 57909, 60356, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60632, 57909, 57909, 60635, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60646, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60889, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 60906, 57936, 57936, 57936, 57936, 60910, 57909, 57909, 57909, 60361, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61192, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60383, 57936, 57936, 60386, 60387, 57936, 57936, 57936, 57936, 57936, 60392, 57936, 60394, 57936, 57936, 57936, 57936, 60398, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60404, 0, 0, 3139, 0, 0, 0, 0, 0, 0, 0, 3145, 0, 3147, 0, 0, 0, 3150, 0, 0, 3153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 450560, 0, 0, 450560, 450560, 450560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1799, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3174, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2882, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2892, 521, 521, 521, 521, 521, 3192, 521, 521, 3195, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3205, 521, 521, 521, 521, 521, 521, 521, 521, 2443, 521, 521, 521, 521, 2448, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1906, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1940, 521, 521, 521, 521, 521, 521, 1947, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3214, 521, 521, 3217, 521, 521, 3220, 0, 0, 60565, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58302, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 60583, 57886, 57886, 60586, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60597, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59871, 57886, 57886, 57886, 57886, 57886, 59877, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2962, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 3431, 0, 0, 521, 521, 3436, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3453, 521, 3455, 521, 521, 521, 521, 521, 521, 521, 1334, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1358, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2419, 521, 521, 521, 521, 521, 521, 521, 521, 2426, 521, 2428, 521, 2431, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2444, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1392, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3461, 521, 521, 3463, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 60820, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59378, 57886, 57886, 57886, 59384, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59394, 57886, 57886, 57886, 57886, 59400, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 60888, 57909, 57909, 60890, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 60904, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 3601, 521, 57886, 60948, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 3664, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61020, 61021, 57886, 57886, 57886, 57886, 61025, 61026, 57909, 57909, 61049, 61050, 57909, 57909, 57909, 57909, 61054, 61055, 57909, 57909, 57909, 57909, 57909, 61059, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61065, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59960, 57909, 57909, 57909, 57909, 57909, 59966, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60341, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60353, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 61094, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 3764, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 2394, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2406, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3792, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59849, 57886, 57886, 57886, 57886, 57886, 57886, 59854, 57886, 59856, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60267, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61163, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 61154, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61173, 57886, 57886, 57886, 57886, 61242, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61258, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 61075, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61087, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 4137, 521, 4138, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 0, 521, 521, 3949, 521, 521, 521, 521, 3954, 521, 521, 521, 521, 3959, 521, 521, 57886, 57886, 61308, 57886, 57886, 57886, 57886, 61313, 57886, 57886, 57886, 57886, 61318, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60873, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58418, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58969, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59012, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59029, 57936, 57909, 57909, 61324, 57909, 57909, 57909, 57909, 61329, 57909, 57909, 57909, 57909, 61334, 57909, 57909, 57909, 57936, 57936, 61340, 57936, 57936, 57936, 57936, 61345, 57936, 57936, 57936, 57936, 61350, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58962, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58986, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 3606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1740, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 61384, 57886, 57886, 61386, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61398, 57909, 57909, 61400, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 3600, 521, 521, 60947, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3617, 3618, 0, 0, 57936, 57936, 57936, 57936, 61412, 57936, 57936, 61414, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60872, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59449, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58932, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 61533, 57936, 57936, 57936, 0, 0, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 4195, 521, 521, 521, 521, 57886, 61543, 57886, 57886, 57886, 57886, 57909, 61547, 57909, 57909, 57909, 57909, 57936, 61551, 57936, 57936, 57936, 57936, 0, 0, 0, 521, 521, 4196, 4197, 521, 521, 57886, 57886, 61544, 61545, 57886, 57886, 57909, 57909, 61548, 61549, 57909, 57909, 57936, 57936, 61552, 61553, 57936, 57936, 0, 57886, 57909, 57936, 4232, 61577, 61578, 61579, 521, 57886, 57909, 57936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 345, 346, 347, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 0, 245760, 245760, 245760, 245760, 245760, 245760, 0, 0, 0, 0, 0, 0, 0, 245760, 245760, 245760, 0, 0, 0, 0, 139264, 147456, 245760, 245760, 0, 0, 245760, 0, 0, 0, 245760, 245760, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 245760, 0, 0, 245760, 0, 0, 245760, 0, 245760, 245760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, 0, 0, 348, 347, 131072, 346, 347, 347, 348, 346, 347, 0, 346, 347, 450, 457, 474, 474, 474, 485, 485, 485, 491, 485, 485, 491, 491, 485, 491, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 534, 57900, 534, 57900, 534, 534, 57900, 534, 534, 57923, 57900, 534, 534, 57900, 57900, 57900, 57923, 57900, 57900, 57900, 57900, 57900, 57900, 57900, 57923, 57923, 57900, 57900, 57950, 57900, 57900, 57900, 57900, 57900, 57900, 57900, 57950, 57950, 57900, 57900, 57900, 57900, 57950, 57950, 57900, 534, 57900, 57900, 57900, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 644, 645, 646, 647, 648, 649, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 666, 0, 668, 669, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1881, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1375, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1914, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 709, 0, 0, 712, 0, 714, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499712, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 0, 302, 305, 0, 306, 4857856, 4874240, 0, 0, 4923392, 0, 0, 0, 0, 757, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 0, 0, 796, 0, 0, 685, 0, 0, 0, 757, 0, 0, 0, 0, 0, 278528, 278528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1176, 0, 0, 0, 0, 0, 685, 816, 816, 0, 0, 0, 0, 0, 521, 521, 836, 840, 843, 521, 852, 521, 521, 521, 868, 870, 873, 521, 521, 521, 886, 890, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60871, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58892, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60372, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58255, 58259, 58262, 57886, 58271, 57886, 57886, 57886, 58287, 58289, 58292, 57886, 57886, 57886, 58305, 58309, 57886, 57886, 57886, 0, 57909, 57909, 57909, 58331, 58335, 58338, 57909, 58347, 57909, 57909, 57909, 58363, 58365, 58368, 57909, 57909, 57909, 58381, 58385, 57909, 57909, 57909, 0, 0, 0, 0, 58396, 57936, 57936, 57936, 58406, 58410, 58413, 57936, 58422, 57936, 57936, 57936, 58438, 58440, 58443, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58963, 57936, 57936, 57936, 57936, 58973, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58989, 57936, 58456, 58460, 57936, 57936, 57936, 836, 1127, 521, 886, 890, 1131, 0, 58476, 58255, 57886, 58305, 58309, 58481, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 540672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 540672, 0, 0, 1366, 521, 521, 1370, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1381, 521, 521, 1388, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1402, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60248, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60256, 57886, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58795, 57886, 57886, 57886, 58798, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58805, 57886, 57886, 58809, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58820, 57886, 57886, 58827, 57886, 57886, 57886, 57886, 57886, 59897, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59918, 57909, 57909, 59921, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58885, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58898, 57909, 57909, 57909, 57909, 58903, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59480, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 57936, 58994, 57936, 57936, 58998, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59010, 57936, 57936, 59017, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59031, 521, 1894, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1903, 521, 521, 521, 1907, 521, 521, 1912, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2447, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2458, 521, 521, 521, 521, 521, 58754, 0, 57886, 59308, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59315, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61164, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59337, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59346, 57886, 57886, 57886, 59350, 57886, 57886, 59355, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61160, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 61168, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 59408, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59415, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59437, 57936, 59504, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59511, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59533, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60681, 57936, 57936, 60684, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60695, 57936, 0, 0, 0, 0, 2305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352256, 352256, 352256, 352256, 521, 521, 521, 2438, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2865, 521, 2794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2381, 2894, 521, 521, 0, 0, 0, 2896, 0, 1961, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59393, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2061, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59974, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 60437, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1727, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 3789, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61146, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61151, 57886, 61239, 57886, 57886, 57886, 57886, 57886, 61245, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 61251, 57909, 57909, 57909, 57909, 61255, 57909, 57909, 57909, 57909, 57909, 61261, 57909, 57909, 57909, 57909, 57936, 0, 0, 4166, 0, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59577, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 3766, 0, 0, 0, 0, 0, 3769, 57936, 57936, 61267, 57936, 57936, 57936, 57936, 61271, 57936, 57936, 57936, 57936, 57936, 61277, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1880, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1891, 521, 0, 521, 521, 521, 521, 521, 3952, 521, 521, 521, 3956, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61311, 57886, 57886, 57886, 61315, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61387, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61401, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60043, 57936, 57936, 57936, 57936, 57936, 60049, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 57909, 57909, 57909, 57909, 57909, 61327, 57909, 57909, 57909, 61331, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 61343, 57936, 57936, 57936, 61347, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61102, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 4228, 61573, 61574, 61575, 521, 57886, 57909, 57936, 521, 57886, 57909, 57936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 395, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 364, 365, 366, 0, 0, 367, 0, 295, 0, 0, 349, 0, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, 0, 407, 0, 349, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 0, 3643, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2887, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 535, 57901, 535, 57901, 535, 535, 57901, 535, 535, 57924, 57901, 535, 535, 57901, 57901, 57901, 57924, 57901, 57901, 57901, 57901, 57901, 57901, 57901, 57924, 57924, 57901, 57901, 57951, 57901, 57901, 57901, 57901, 57901, 57901, 57901, 57951, 57951, 57901, 57901, 57901, 57901, 57951, 57951, 57901, 616, 57901, 57967, 57967, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2351104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, 0, 0, 0, 0, 0, 0, 0, 0, 1237, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2300, 0, 57909, 57909, 58372, 57909, 57909, 57909, 57909, 58390, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58400, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58447, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60917, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60925, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 3864, 0, 0, 0, 0, 0, 3627, 0, 0, 57936, 57936, 58465, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2325, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 1203, 1161, 0, 0, 0, 0, 0, 0, 1273, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 58760, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58774, 57886, 57886, 57886, 57886, 58784, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59873, 59874, 57886, 57886, 57886, 57886, 57886, 57886, 59881, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58929, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 58879, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58895, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60656, 57909, 57909, 60659, 57909, 57909, 60662, 60663, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 1756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 1785, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1800, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 0, 0, 2286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 2418, 521, 521, 521, 521, 521, 521, 2423, 521, 2425, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1379, 521, 521, 521, 521, 521, 521, 521, 1393, 521, 521, 521, 521, 521, 521, 521, 521, 1405, 521, 521, 2869, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2435, 2436, 57936, 57936, 57936, 57936, 57936, 57936, 60411, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59529, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 3432, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1398, 521, 521, 521, 521, 521, 0, 3872, 0, 0, 0, 0, 0, 521, 3875, 521, 521, 3877, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 61234, 57886, 57886, 61236, 57886, 57886, 57886, 57886, 57886, 60263, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60279, 57886, 57886, 57886, 57886, 57886, 61266, 57936, 57936, 61268, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 3944, 0, 0, 0, 0, 0, 417792, 0, 417792, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 417792, 0, 417792, 0, 0, 0, 0, 139264, 147456, 417792, 0, 0, 0, 417792, 0, 0, 0, 0, 417792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417792, 0, 0, 417792, 0, 0, 417792, 0, 417792, 418100, 3946, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59383, 57886, 57886, 57886, 57886, 57886, 57886, 59391, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1160, 0, 0, 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2335231, 2335197, 2335231, 2335231, 57886, 57886, 57886, 58266, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58342, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60891, 57909, 60893, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60019, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60025, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 58754, 1962, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 2557, 2962, 0, 0, 50657, 2062, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61068, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60408, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59021, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57886, 61028, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 352, 350, 131072, 0, 350, 350, 352, 0, 350, 0, 0, 350, 352, 350, 0, 0, 0, 350, 350, 350, 350, 350, 350, 350, 350, 498, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 536, 57902, 536, 57902, 536, 536, 57902, 536, 536, 57925, 57902, 536, 536, 57902, 57902, 57902, 57925, 57902, 57902, 57902, 57902, 57902, 57902, 57902, 57925, 57925, 57902, 57902, 57952, 57902, 57902, 57902, 57902, 57902, 57902, 57902, 57952, 57952, 57902, 57902, 57902, 57902, 57952, 57952, 57902, 536, 57902, 57902, 57902, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 799, 0, 0, 0, 0, 0, 0, 0, 521, 521, 837, 521, 521, 521, 853, 857, 521, 521, 521, 521, 521, 878, 880, 521, 521, 891, 521, 521, 521, 57886, 57886, 58250, 0, 751, 0, 0, 804, 0, 0, 0, 0, 0, 804, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 819, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 3879, 521, 521, 521, 521, 521, 521, 3885, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61238, 58256, 57886, 57886, 57886, 58272, 58276, 57886, 57886, 57886, 57886, 57886, 58297, 58299, 57886, 57886, 58310, 57886, 57886, 57886, 0, 57909, 57909, 58326, 58332, 57909, 57909, 57909, 58348, 58352, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61330, 57909, 61332, 61333, 57909, 61335, 57909, 61337, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61346, 57936, 61348, 61349, 57936, 61351, 57936, 61353, 57909, 57909, 58373, 58375, 57909, 57909, 58386, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58401, 58407, 57936, 57936, 57936, 58423, 58427, 57936, 57936, 57936, 57936, 57936, 58448, 58450, 57936, 0, 4165, 0, 4167, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 521, 1695, 521, 1697, 521, 521, 59044, 57886, 57886, 59046, 57886, 57886, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1720, 0, 0, 57936, 58461, 57936, 57936, 57936, 837, 521, 880, 521, 891, 521, 0, 57886, 58256, 58299, 57886, 58310, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 2309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3396, 0, 0, 0, 0, 0, 0, 0, 1208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1222, 0, 1224, 0, 0, 0, 0, 1229, 0, 0, 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 3874, 521, 521, 521, 521, 3878, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3887, 521, 521, 61233, 57886, 57886, 57886, 57886, 61237, 57886, 1406, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 58761, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58792, 58794, 57886, 57886, 57886, 57886, 58273, 58277, 58283, 57886, 58288, 57886, 57886, 57886, 57886, 57886, 58306, 57886, 57886, 57886, 57886, 0, 57909, 57909, 58328, 57909, 57909, 57909, 57909, 58349, 58353, 58359, 57909, 58364, 57886, 58832, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58844, 58845, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 58856, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58415, 57936, 57936, 58431, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 58913, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58927, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58939, 58940, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59512, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59523, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60021, 57936, 57936, 57936, 57936, 57936, 57936, 60026, 57936, 60028, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58950, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58981, 58983, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61202, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3781, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 57936, 59034, 59035, 57936, 57936, 521, 521, 1696, 521, 521, 1699, 57886, 57886, 59045, 57886, 57886, 59048, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507904, 507904, 507904, 507904, 0, 1773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2825, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 2837, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1895, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1955, 521, 521, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59313, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58813, 57886, 58815, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58828, 57886, 57886, 57886, 59338, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59399, 57886, 57886, 57886, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59413, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60909, 57936, 57936, 57909, 59438, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59509, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59534, 0, 0, 0, 2332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 2358, 0, 2360, 2361, 2362, 0, 2364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2372, 0, 0, 0, 0, 2377, 2378, 0, 0, 0, 0, 0, 0, 0, 49716, 49716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327680, 327680, 327680, 327680, 2382, 0, 0, 0, 0, 0, 0, 0, 2388, 521, 521, 521, 521, 521, 521, 2395, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1905, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1918, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2439, 521, 521, 521, 521, 521, 2445, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3801, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 2745, 2746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 367, 0, 0, 0, 521, 521, 2843, 521, 521, 521, 521, 521, 2848, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2864, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60247, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59487, 59488, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57936, 57936, 57936, 57936, 57936, 60384, 57936, 57936, 57936, 57936, 57936, 60389, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59016, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60405, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60033, 57936, 57936, 57936, 57936, 57936, 57936, 61269, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61278, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3446, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1937, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1385, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57936, 61534, 57936, 57936, 4192, 0, 4194, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 4193, 0, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 0, 4211, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 521, 57886, 57886, 57909, 57909, 57936, 57936, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 521, 1335, 521, 521, 521, 521, 1345, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1361, 521, 521, 521, 0, 0, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60246, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 59911, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58926, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4825088, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 5177344, 4358144, 4358144, 4358144, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 302, 0, 0, 306, 0, 0, 0, 306, 0, 0, 0, 4931584, 0, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 387, 0, 353, 0, 0, 0, 0, 0, 396, 397, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 403, 0, 0, 0, 0, 0, 0, 0, 557056, 557056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3129, 0, 0, 0, 0, 0, 0, 0, 370, 378, 406, 0, 0, 0, 370, 0, 0, 353, 0, 0, 0, 370, 0, 409, 411, 0, 370, 398, 0, 0, 370, 378, 0, 139264, 147456, 398, 409, 0, 0, 409, 0, 0, 0, 432, 131072, 0, 432, 432, 0, 0, 432, 0, 411, 432, 0, 458, 0, 0, 0, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 508, 508, 508, 508, 520, 508, 508, 508, 520, 508, 508, 508, 508, 508, 508, 537, 57903, 537, 57903, 537, 537, 57903, 537, 537, 57926, 57903, 537, 537, 57903, 57903, 57903, 57926, 57903, 57903, 57903, 57903, 57903, 57903, 57903, 57926, 57926, 57903, 57903, 57953, 57903, 57903, 57903, 57903, 57903, 57903, 57903, 57953, 57953, 57903, 57903, 57903, 57903, 57953, 57953, 57903, 617, 57903, 57968, 57968, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4017, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 61374, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 774, 0, 0, 0, 0, 0, 1276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 774, 0, 0, 0, 0, 793, 0, 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, 0, 774, 0, 793, 0, 521, 832, 521, 521, 521, 521, 521, 521, 863, 865, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 58251, 1151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1207, 1296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1290, 1316, 1317, 0, 1290, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 59822, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 59907, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59915, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 521, 1325, 521, 521, 521, 1329, 521, 521, 1340, 521, 521, 1344, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1363, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 60245, 57886, 57886, 57886, 57886, 60249, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58294, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59483, 57909, 57909, 57909, 57909, 57909, 57909, 59491, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 521, 1367, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2893, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58764, 57886, 57886, 57886, 58768, 57886, 57886, 58779, 57886, 57886, 58783, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60588, 60589, 57886, 57886, 57886, 57886, 60592, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60598, 57886, 57886, 57886, 57909, 57909, 58878, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58897, 57909, 57909, 57909, 58901, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60367, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59515, 57936, 57936, 57936, 57936, 59521, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59532, 57936, 57936, 57936, 57936, 57936, 57936, 58953, 57936, 57936, 57936, 58957, 57936, 57936, 58968, 57936, 57936, 58972, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58991, 57936, 57936, 57936, 58995, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60399, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 1726, 1727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516560, 516560, 516560, 516560, 0, 1786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1808, 0, 0, 0, 0, 0, 5111808, 0, 0, 0, 0, 0, 5283840, 0, 0, 0, 0, 5472256, 5521408, 0, 0, 0, 0, 5595136, 5709824, 5718016, 0, 5824512, 5865472, 0, 0, 5922816, 0, 0, 6021120, 0, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59324, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60837, 57886, 60839, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60846, 57886, 57886, 60848, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59424, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61181, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60047, 57936, 57936, 57936, 57936, 60052, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 59442, 59443, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 60907, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59538, 59539, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59556, 57936, 57936, 57936, 57936, 57936, 57936, 59563, 57936, 57936, 521, 521, 521, 59324, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 318, 0, 0, 0, 0, 0, 2384, 0, 0, 2387, 0, 521, 521, 2390, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 60823, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59867, 59868, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59879, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59891, 57909, 57909, 57909, 57909, 57909, 59956, 59957, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59968, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58891, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59457, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59980, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 59992, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3868, 3627, 0, 0, 57936, 57936, 57936, 57936, 57936, 60039, 60040, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60051, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60705, 57936, 57936, 60708, 57936, 57936, 60711, 3368, 521, 521, 60715, 57886, 57886, 0, 0, 0, 0, 0, 57936, 57936, 57936, 60063, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 2732, 2733, 57886, 57886, 57886, 60081, 60082, 0, 0, 1710, 0, 0, 1717, 0, 0, 0, 0, 0, 1728, 1729, 0, 0, 0, 0, 0, 1735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 361, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 2821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2827, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2460, 521, 2462, 57886, 60286, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59919, 57909, 57909, 57909, 57909, 57936, 60406, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60418, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59011, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 3194, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3207, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 59818, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59826, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60590, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 60615, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60648, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60002, 57936, 57936, 57936, 57936, 57936, 60697, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 6152192, 0, 0, 0, 6316032, 0, 196608, 0, 0, 5816320, 6291456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 61097, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 3760, 57886, 57886, 61106, 3763, 0, 0, 0, 0, 3767, 0, 0, 0, 0, 0, 0, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1167, 0, 0, 0, 0, 1171, 0, 0, 1174, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 3788, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 61147, 57886, 57886, 57886, 61150, 57886, 57886, 57886, 57886, 58274, 57886, 57886, 57886, 57886, 57886, 58293, 57886, 57886, 57886, 57886, 58311, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58350, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59478, 57909, 57909, 57909, 59484, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59494, 57909, 57909, 57909, 57909, 59500, 57909, 57909, 57886, 57886, 57886, 57886, 61241, 57886, 61243, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61257, 57909, 61259, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61074, 57936, 57936, 57936, 61077, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61085, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59516, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59528, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61470, 57936, 57936, 57936, 0, 4130, 0, 0, 0, 0, 0, 521, 521, 4135, 521, 4136, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 61486, 57886, 61487, 57886, 57886, 57886, 57886, 59340, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59353, 57886, 57886, 57886, 59358, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59914, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60709, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, 475, 475, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 509, 513, 513, 513, 513, 509, 513, 513, 513, 509, 513, 513, 513, 513, 513, 513, 538, 57904, 538, 57904, 538, 538, 57904, 538, 538, 57927, 57904, 538, 538, 57904, 57904, 57904, 57927, 57904, 57904, 57904, 57904, 57904, 57904, 57904, 57927, 57927, 57904, 57904, 57954, 57904, 57904, 57904, 57904, 57904, 57904, 57904, 57954, 57954, 57904, 57904, 57904, 57904, 57954, 57954, 57904, 618, 57904, 57969, 57969, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1288, 0, 521, 521, 1320, 521, 1323, 0, 680, 681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 3876, 521, 521, 521, 521, 3880, 521, 521, 521, 521, 521, 3886, 521, 521, 521, 57886, 57886, 57886, 61235, 57886, 57886, 57886, 658, 0, 637, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 0, 795, 0, 0, 0, 0, 0, 0, 637, 0, 0, 781, 521, 833, 521, 521, 521, 521, 854, 858, 864, 521, 869, 521, 521, 521, 521, 521, 887, 521, 521, 521, 521, 57886, 57886, 58252, 0, 790, 0, 795, 0, 781, 0, 807, 0, 0, 0, 0, 807, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 0, 1277, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 57909, 57909, 57909, 57909, 58382, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58403, 57936, 57936, 57936, 57936, 58424, 58428, 58434, 57936, 58439, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 0, 1142, 0, 0, 1147, 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, 310, 0, 310, 311, 0, 310, 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 408, 311, 0, 0, 0, 0, 0, 0, 311, 413, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 58457, 57936, 57936, 57936, 57936, 521, 521, 521, 887, 521, 521, 0, 57886, 57886, 57886, 58306, 57886, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 2336, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2292, 2293, 0, 2295, 2296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1179, 0, 0, 0, 1183, 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 367, 367, 367, 0, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 0, 1243, 0, 0, 0, 0, 0, 0, 1251, 0, 0, 0, 0, 0, 1256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1267, 0, 0, 0, 0, 0, 0, 1301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 0, 0, 1275, 0, 0, 1152, 0, 0, 0, 1281, 0, 1283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1291, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 2393, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2405, 521, 521, 521, 521, 521, 521, 0, 1297, 1256, 0, 1281, 1300, 0, 1303, 0, 0, 0, 1183, 0, 0, 0, 0, 1311, 0, 0, 0, 0, 0, 1311, 0, 0, 1202, 1311, 1318, 521, 521, 521, 521, 521, 521, 0, 0, 0, 2473, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61043, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 1324, 521, 521, 521, 521, 1330, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1351, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1364, 521, 521, 521, 0, 2895, 0, 0, 0, 0, 57886, 57886, 57886, 60243, 57886, 60244, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 521, 521, 1369, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1377, 521, 521, 521, 1384, 1386, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2881, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3202, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3208, 521, 521, 521, 521, 1409, 58754, 901, 58756, 57886, 57886, 57886, 57886, 57886, 58763, 57886, 57886, 57886, 57886, 58769, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58790, 57886, 57886, 57886, 57886, 57886, 57886, 59870, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58818, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 58911, 57909, 57909, 57909, 58918, 58920, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58943, 0, 58944, 58945, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59543, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58984, 57936, 57936, 57936, 58987, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58952, 57936, 57936, 57936, 57936, 58958, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58979, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58992, 57936, 57936, 57936, 57936, 58997, 57936, 57936, 57936, 57936, 57936, 59002, 57936, 57936, 57936, 59006, 57936, 57936, 57936, 59013, 59015, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60922, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60395, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59038, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 1138, 0, 0, 0, 1710, 0, 0, 0, 0, 1717, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1775, 0, 0, 0, 0, 0, 0, 0, 1783, 1784, 0, 0, 0, 0, 1840, 1841, 0, 0, 0, 1844, 0, 0, 0, 0, 0, 1849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 581632, 0, 581632, 581632, 0, 1862, 0, 1864, 1840, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1876, 521, 521, 521, 521, 1882, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2850, 521, 2852, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2427, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1893, 521, 521, 521, 521, 1897, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1910, 521, 521, 521, 1915, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2849, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2429, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59319, 57886, 57886, 57886, 57886, 59325, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59336, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59419, 57909, 57909, 57909, 57909, 59425, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59436, 57909, 57909, 57909, 57909, 57909, 57909, 60653, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61091, 57936, 57909, 57909, 57909, 59440, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59453, 57909, 57909, 57909, 59458, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59936, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59942, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 59536, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59549, 57936, 57936, 57936, 59554, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 2730, 521, 521, 521, 57886, 60079, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 2257, 521, 521, 59604, 57886, 59606, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2277, 2278, 0, 0, 0, 0, 0, 5210112, 0, 5365760, 0, 5554176, 5570560, 5578752, 0, 5668864, 0, 0, 5791744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6201344, 6242304, 6250496, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3443, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1382, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 0, 0, 2383, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2403, 521, 521, 2407, 521, 521, 521, 2411, 57886, 57886, 59842, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59852, 57886, 57886, 57886, 59855, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60609, 57886, 57886, 57886, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 60618, 57909, 60619, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 59894, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 2561, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59923, 57909, 57909, 59927, 57909, 57909, 57909, 59931, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59941, 57909, 57909, 57909, 59944, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61180, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 61186, 57936, 57936, 57936, 61190, 57936, 57936, 57936, 57936, 57936, 59978, 57909, 57909, 57909, 57909, 57909, 59983, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60006, 57936, 57936, 60010, 57936, 57936, 57936, 60014, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60024, 57936, 57936, 57936, 60027, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 4076, 0, 4078, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 60061, 57936, 57936, 57936, 57936, 57936, 60066, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2273, 0, 0, 0, 0, 0, 0, 0, 0, 2743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2819, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2826, 0, 0, 0, 0, 0, 0, 521, 521, 2833, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3465, 3467, 521, 521, 521, 3470, 521, 3472, 3473, 521, 57886, 57886, 57886, 57886, 57886, 57886, 60824, 57886, 57886, 57886, 57886, 57886, 2841, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2856, 521, 521, 521, 521, 2859, 521, 521, 2861, 521, 2862, 521, 521, 521, 521, 521, 521, 0, 0, 2472, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59834, 57886, 57886, 59838, 57886, 521, 521, 521, 521, 2870, 521, 521, 2874, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2883, 521, 521, 521, 2886, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3669, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58860, 57909, 57909, 57909, 57909, 57909, 58872, 0, 0, 57909, 57909, 60309, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60317, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61183, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60420, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59008, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59022, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57909, 60332, 57909, 57909, 57909, 57909, 60335, 57909, 57909, 60337, 57909, 60338, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60347, 57909, 57909, 60351, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60655, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 60666, 57936, 57936, 57936, 57936, 57936, 57936, 60673, 57909, 57909, 60360, 57909, 57909, 57909, 60363, 60364, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 60374, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 3096, 521, 521, 57886, 57886, 60443, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 450560, 450560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 147456, 0, 0, 450560, 0, 0, 57936, 57936, 57936, 60382, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60397, 57936, 57936, 57936, 57936, 60400, 57936, 57936, 60402, 57936, 60403, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61272, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 3942, 3627, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, 379, 381, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1885, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3794, 521, 521, 521, 3795, 3796, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2559, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60325, 57909, 57909, 57909, 57909, 57909, 57909, 3190, 521, 521, 521, 3193, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1917, 521, 521, 521, 521, 521, 57886, 60581, 57886, 57886, 57886, 60584, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60594, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60838, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2561, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60630, 57909, 57909, 57909, 60633, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60643, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 58417, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60920, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 60674, 57936, 57936, 57936, 57936, 60679, 57936, 57936, 57936, 60682, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60692, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 4072, 4073, 0, 0, 0, 0, 0, 4079, 4080, 4081, 521, 521, 521, 4084, 521, 4086, 521, 521, 521, 521, 61435, 61436, 61437, 3457, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3469, 521, 521, 521, 521, 521, 57886, 57886, 57886, 60821, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60587, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60595, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 2560, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60640, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60883, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60897, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 60905, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61201, 57936, 57936, 521, 521, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3784, 521, 521, 521, 57936, 60939, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 3610, 0, 0, 0, 0, 0, 0, 0, 3616, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 2824, 2782, 0, 0, 0, 0, 0, 2829, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 2838, 521, 521, 521, 521, 521, 0, 0, 0, 3640, 3641, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3651, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3671, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60612, 57886, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60620, 57909, 57909, 57909, 57909, 521, 3661, 521, 521, 521, 521, 521, 3666, 521, 3668, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61022, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60292, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60303, 57886, 57886, 57886, 57886, 57886, 0, 2962, 0, 0, 57909, 57909, 57909, 57909, 61051, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61061, 57909, 57909, 57909, 57909, 57909, 57909, 61067, 57909, 61069, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58884, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58894, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59938, 57909, 57909, 57909, 57909, 57909, 57909, 59943, 57909, 59945, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 61096, 57936, 61098, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 3765, 0, 0, 0, 0, 0, 0, 0, 0, 2363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 0, 659, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3770, 0, 0, 0, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 3779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3786, 521, 521, 521, 3790, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3799, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 61148, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60867, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60880, 57909, 57909, 61152, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61161, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 61167, 57909, 57909, 57909, 61171, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61053, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59459, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61438, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61446, 57886, 57909, 57909, 57909, 61451, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61459, 57909, 57936, 57936, 57936, 61464, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59576, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57936, 57936, 57936, 57936, 57936, 61472, 57936, 0, 0, 0, 0, 4131, 0, 4133, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4139, 4140, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61445, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61458, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60919, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60929, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 4088, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 61490, 61491, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61498, 61499, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61506, 61507, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61415, 0, 0, 4074, 4075, 0, 0, 0, 521, 521, 521, 4082, 521, 521, 521, 521, 521, 521, 521, 521, 4090, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 60865, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61184, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61189, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 0, 521, 4220, 57886, 61565, 57909, 61566, 57936, 61567, 521, 57886, 57909, 57936, 521, 521, 521, 521, 521, 521, 521, 1899, 1900, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3800, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 425, 425, 0, 0, 131072, 425, 0, 0, 0, 425, 0, 0, 447, 0, 425, 0, 476, 476, 476, 0, 0, 361, 361, 361, 495, 361, 361, 361, 361, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 539, 57905, 539, 57905, 539, 539, 57905, 539, 539, 57928, 57905, 539, 539, 57905, 57905, 57905, 57928, 57905, 57905, 57905, 57905, 57905, 57905, 57905, 57928, 57928, 57905, 57905, 57955, 57905, 57905, 57905, 57905, 57905, 57905, 57905, 57955, 57955, 57905, 57905, 57905, 57905, 57955, 57955, 57905, 539, 57905, 57905, 57905, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376832, 0, 376832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1854, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57909, 58369, 57909, 57909, 57909, 57909, 58387, 57909, 57909, 57909, 0, 0, 0, 0, 58293, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58425, 57936, 57936, 57936, 57936, 57936, 58444, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60069, 57936, 57936, 57936, 57936, 2729, 521, 521, 521, 521, 60078, 57886, 57886, 57886, 57886, 2739, 2266, 0, 2740, 2269, 0, 0, 2742, 57936, 58462, 57936, 57936, 57936, 521, 521, 521, 521, 892, 521, 0, 57886, 57886, 57886, 57886, 58311, 57886, 155941, 1138, 0, 1139, 0, 0, 1144, 0, 0, 0, 0, 0, 1150, 0, 0, 0, 0, 0, 5341184, 0, 5652480, 0, 0, 0, 0, 4759552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1827, 0, 0, 0, 0, 0, 0, 0, 1834, 0, 0, 0, 0, 0, 0, 1244, 0, 0, 0, 0, 1249, 0, 0, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 466944, 0, 0, 0, 0, 0, 0, 0, 0, 1825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 354, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 521, 521, 521, 1327, 521, 521, 521, 1336, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2895, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60574, 57886, 57886, 60578, 57886, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58766, 57886, 57886, 57886, 58775, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61034, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 61042, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 61047, 57909, 57936, 57936, 57936, 57936, 57936, 58955, 57936, 57936, 57936, 58964, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59555, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 521, 1931, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1953, 521, 521, 521, 521, 521, 521, 0, 2470, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59839, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59333, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 60864, 57909, 57909, 57909, 57909, 60868, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60874, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 58402, 57936, 57936, 57936, 57936, 57936, 57936, 58433, 58435, 57936, 57936, 57936, 57936, 57936, 57936, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59433, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59986, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60001, 57936, 57936, 60004, 57936, 57936, 57909, 57909, 57909, 57909, 57909, 59474, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59486, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59497, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 57886, 59372, 57886, 57886, 59375, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59389, 57886, 57886, 57886, 57886, 57886, 57886, 59395, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59872, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 60304, 57886, 57886, 57886, 0, 2962, 0, 0, 57936, 57936, 57936, 57936, 59570, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59582, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59593, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 293, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3119, 0, 3120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3135, 0, 0, 0, 0, 2283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2301, 0, 0, 0, 0, 2359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 57886, 59841, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59863, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 59930, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 58947, 57936, 57936, 57936, 57936, 57936, 57936, 60013, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59589, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 0, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60313, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58931, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 0, 57886, 57936, 57936, 57936, 57936, 60626, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 1259, 57886, 57936, 57936, 57936, 57936, 57936, 60675, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59524, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57886, 57886, 57886, 61155, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 61174, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61193, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 61100, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 57886, 57886, 57886, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 367, 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0, 57936, 57936, 57936, 57936, 61471, 57936, 57936, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 57886, 57886, 57936, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57936, 57936, 57886, 57886, 57886, 57886, 57936, 57936, 57886, 521, 57886, 57886, 57886, 372, 372, 0, 0, 131072, 372, 0, 0, 0, 372, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57906, 57906, 57906, 57906, 57906, 57906, 57906, 57929, 57929, 57906, 57906, 57956, 57906, 57906, 57906, 57906, 57906, 57906, 57906, 57956, 57956, 57906, 57906, 57906, 57906, 57956, 57956, 57906, 540, 57906, 57906, 57906, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2334720, 0, 2334720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 2834, 2835, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 58267, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58343, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 61179, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 57936, 61187, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 301, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2758, 2759, 0, 0, 2762, 0, 2764, 0, 0, 0, 0, 0, 521, 521, 521, 58754, 901, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58780, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 57909, 59909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60658, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 57936, 57936, 60667, 57936, 60668, 57936, 57936, 57936, 57936, 58875, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59947, 57909, 57909, 57909, 57909, 57909, 0, 0, 0, 3771, 0, 3772, 0, 0, 0, 0, 3627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3657, 521, 521, 521, 521, 521, 521, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 245760, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 364, 0, 0, 0, 0, 363, 0, 0, 0, 139264, 147456, 0, 0, 0, 0, 0, 0, 653, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 433, 131072, 0, 433, 433, 0, 0, 433, 0, 364, 433, 0, 459, 0, 0, 0, 487, 487, 490, 490, 490, 490, 496, 497, 490, 490, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 541, 57907, 541, 57907, 541, 541, 57907, 541, 541, 57930, 57907, 541, 541, 57907, 57907, 57907, 57930, 57907, 57907, 57907, 57907, 57907, 57907, 57907, 57930, 57930, 57907, 57907, 57957, 57907, 57907, 57907, 57907, 57907, 57907, 57907, 57957, 57957, 57907, 57907, 57907, 57907, 57957, 57957, 57907, 619, 57907, 57970, 57970, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1239, 1806, 0, 0, 0, 0, 1246, 1246, 0, 0, 57909, 57909, 57909, 57909, 57909, 58383, 57909, 57909, 57909, 57909, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60688, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58458, 57936, 57936, 57936, 57936, 521, 521, 521, 888, 521, 521, 0, 57886, 57886, 57886, 58307, 57886, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 1272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3402, 2768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2318336, 57909, 57909, 57909, 57909, 57909, 60334, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60344, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57886, 57886, 57886, 58268, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 57909, 57909, 57909, 57909, 57909, 57909, 58344, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 58393, 0, 0, 0, 0, 57886, 57936, 57936, 57936, 57936, 58409, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59517, 59518, 57936, 57936, 57936, 57936, 59525, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 1240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2792, 0, 521, 1368, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1395, 521, 521, 521, 521, 521, 521, 521, 521, 2875, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 58834, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 50657, 58754, 977, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60895, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 60903, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 58996, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59024, 57936, 57936, 57936, 57936, 57936, 521, 521, 521, 521, 521, 521, 0, 57886, 57886, 57886, 57886, 57886, 57886, 155941, 1138, 0, 301, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 1304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 3178, 521, 3179, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2469, 0, 0, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59883, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 521, 521, 521, 2844, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2434, 521, 521, 57936, 57936, 57936, 57936, 57936, 57936, 60385, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 59522, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 640, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 893, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57909, 57909, 60862, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60879, 57909, 60881, 57909, 57936, 58463, 57936, 57936, 57936, 1126, 521, 521, 521, 893, 521, 0, 57886, 58477, 57886, 57886, 58312, 57886, 155941, 1138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 331, 521, 58754, 0, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 59326, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 0, 57909, 59908, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60343, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 50657, 0, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59426, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 59961, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 60346, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 521, 521, 521, 521, 2415, 521, 2417, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2432, 521, 521, 521, 521, 521, 521, 2867, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1923, 57936, 57936, 57936, 57936, 60409, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 60423, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 3660, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 57886, 0, 0, 0, 2562, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57909, 57936, 57936, 57936, 61185, 57936, 57936, 57936, 61188, 57936, 57936, 57936, 57936, 57936, 57936, 57936, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 2310144, 0, 0, 0, 0, 0, 0, 2310144, 2310560, 2310560, 0, 2310144, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310144, 0, 367, 0, 0, 0, 0, 0, 0, 0, 2310560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, 0, 383, 0, 0, 0, 0, 0, 0, 2310144, 0, 0, 0, 2310144, 0, 0, 0, 0, 0, 2310144, 0, 0, 2310144, 0, 0, 2310144, 0, 2310144, 2310144, 0, 2310144, 0, 2310144, 2310144, 0, 0, 0, 0, 0, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 3445, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1347, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 1362, 521, 521, 2310144, 0, 0, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310733, 2310144, 2310733, 2310144, 2310144, 2310733, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2310, 0, 0, 0, 0, 0, 0, 0, 0, 2318, 0, 0, 0, 0, 0, 2322, 0, 0, 2324, 0, 0, 0, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 839, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 898, 57886, 57886, 57886, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 460, 2335197, 2335197, 2335197, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 2335231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3399, 3400, 0, 3401, 0, 2335231, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2763, 0, 0, 0, 0, 0, 2767, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 0, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 2359296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359296, 1, 24578, 3, 0, 0, 4366336, 0, 0, 0, 0, 0, 301, 302, 0, 4268032, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2813, 0, 0, 0, 0, 2367488, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 295, 0, 0, 0, 0, 0, 6275072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 976, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 521, 521, 521, 2391, 2392, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 2855, 521, 521, 521, 521, 521, 521, 521, 2860, 521, 521, 521, 521, 521, 521, 521, 521, 0, 1, 24578, 3, 155941, 155941, 295, 0, 0, 0, 0, 0, 301, 302, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3134, 0, 0, 212992, 0, 0, 0, 0, 0, 4366336, 0, 0, 0, 0, 0, 0, 0, 0, 4268032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 6258688, 6447104, 0, 0, 6127616, 0, 6348800, 5906432, 0, 5537792, 0, 0, 0, 0, 0, 5939200, 0, 0, 5677056, 6365184, 4866048, 0, 6070272, 5545984, 5152768, 0, 0, 6144000, 4358144, 4866048, 4882432, 4358144, 4358144, 4358144, 0, 1411, 0, 0, 0, 0, 0, 4857856, 4874240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5259264, 0, 0, 0, 0, 0, 0, 0, 0, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 900, 900, 900, 5537792, 5545984, 5586944, 5734400, 5971968, 4358144, 6045696, 4358144, 6070272, 4358144, 4358144, 4358144, 4358144, 6348800, 4358144, 6144000, 0, 6144000, 0, 4988928, 5005312, 0, 0, 0, 0, 5775360, 0, 0, 0, 0, 0, 0, 0, 750, 808, 0, 0, 0, 750, 0, 0, 811, 692, 0, 0, 0, 816, 0, 0, 0, 818, 0, 0, 0, 685, 692, 0, 0, 4358144, 5005312, 4358144, 4358144, 4358144, 5120000, 5136384, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 4358144, 6324224, 5914624, 5914624, 0, 0, 0, 0, 0, 5513216, 5783552, 0, 0, 0, 0, 0, 0, 656, 0, 779, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 792, 0, 0, 0, 0, 0, 800, 0, 783, 0, 0\n];\n\nJSONiqParser.EXPECTED =\n[ 166, 182, 211, 1104, 242, 1452, 1467, 273, 289, 712, 1117, 319, 349, 333, 365, 381, 397, 413, 195, 1866, 2240, 2243, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 429, 445, 461, 477, 2088, 226, 493, 2075, 939, 621, 523, 543, 1716, 559, 575, 591, 607, 1422, 650, 666, 1822, 697, 1565, 634, 728, 738, 754, 796, 812, 828, 844, 860, 876, 892, 908, 924, 955, 2180, 985, 681, 2211, 1015, 1044, 1028, 1060, 1090, 1133, 1320, 1149, 1165, 1551, 1181, 1197, 1213, 1229, 1259, 1904, 1365, 1375, 999, 969, 1762, 1289, 1305, 1336, 1351, 1488, 1391, 1407, 1504, 1623, 1520, 1536, 1581, 1273, 1610, 1639, 1655, 1671, 2118, 2149, 1687, 1703, 1437, 507, 1732, 1748, 1778, 1074, 780, 1809, 1838, 1854, 1890, 1920, 1936, 1952, 1968, 1984, 2000, 2016, 2032, 2061, 257, 2104, 303, 2045, 767, 1793, 1594, 2134, 1243, 2165, 2196, 2227, 2234, 1874, 1479, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 536, 2259, 2263, 2271, 2271, 2271, 2265, 2269, 2271, 2272, 2276, 2279, 2286, 2282, 2290, 2294, 2298, 2302, 2306, 2310, 2381, 2790, 2790, 4003, 4941, 2790, 2791, 2314, 3074, 2982, 2790, 2790, 2790, 2687, 2790, 5013, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2827, 2790, 2571, 3537, 4080, 2436, 2320, 2443, 2466, 2326, 2336, 2790, 2790, 2790, 2343, 2790, 2790, 2349, 3841, 2707, 2790, 2734, 2759, 2790, 2790, 2790, 2790, 4756, 2738, 2790, 2790, 2790, 2790, 4767, 2321, 2390, 2466, 2466, 2466, 2466, 2355, 2361, 2790, 2790, 2790, 2790, 2790, 2371, 4535, 2790, 2696, 4816, 2790, 2790, 2790, 2697, 4817, 2790, 2790, 2790, 4822, 4790, 2790, 2790, 3017, 3842, 2448, 2790, 2790, 3537, 4079, 4079, 4079, 4079, 4079, 4099, 2436, 2436, 2436, 2436, 2436, 2387, 2321, 2321, 2321, 2321, 2321, 2459, 2466, 2466, 2466, 2466, 2466, 2332, 2401, 2790, 2790, 2762, 4873, 2790, 2790, 2790, 2790, 2820, 4885, 2790, 2790, 2790, 2790, 3243, 4891, 3542, 4079, 4079, 4079, 4097, 2436, 2436, 2436, 2436, 2458, 2321, 2321, 2321, 2331, 2466, 2466, 2426, 2790, 2790, 3074, 4076, 4079, 4079, 2396, 2436, 2482, 2321, 2321, 2464, 2466, 2466, 2411, 2790, 2790, 4535, 2790, 4077, 4079, 4079, 2480, 2436, 2436, 2457, 2321, 2321, 2420, 2467, 2428, 2834, 3536, 4079, 2434, 2436, 2441, 2321, 2465, 2332, 2447, 4095, 4081, 2437, 2376, 2466, 2452, 4078, 2436, 2321, 2466, 4335, 4081, 2456, 2463, 2422, 4080, 2482, 2463, 2471, 4098, 2483, 2331, 2478, 2329, 2487, 2491, 2474, 2495, 2498, 2508, 2512, 2519, 2519, 2519, 2515, 2525, 2519, 2521, 2529, 2536, 2532, 2540, 2544, 2548, 2552, 2556, 2560, 4697, 2790, 2790, 2790, 4729, 2790, 4591, 2584, 2858, 2790, 2790, 2790, 3364, 2591, 2790, 3610, 2603, 2609, 2613, 2617, 2621, 2625, 2628, 2632, 2636, 4053, 2702, 2790, 2790, 2790, 2790, 3877, 2642, 2648, 2892, 4432, 2646, 2915, 2367, 2654, 3828, 2813, 2790, 2652, 3406, 2659, 2664, 2790, 2790, 2790, 2790, 2790, 2671, 4434, 2580, 4063, 2790, 2676, 2680, 2790, 2790, 2790, 3867, 2684, 2790, 2790, 2790, 3868, 2685, 2750, 2790, 2790, 2790, 2790, 2756, 2760, 2790, 2790, 2790, 2790, 2790, 2880, 2666, 2790, 2790, 2777, 4228, 3359, 2851, 4232, 4238, 2790, 4246, 4420, 4253, 3266, 4258, 4264, 3443, 2790, 4721, 2782, 2790, 2790, 2790, 3228, 3232, 2790, 2790, 2790, 2790, 4105, 2790, 2790, 2790, 2790, 2790, 2790, 3903, 3876, 2788, 4641, 2790, 2790, 2790, 3307, 2790, 2790, 2790, 4640, 2818, 2790, 2790, 3306, 2795, 2935, 2812, 2790, 2790, 2744, 2790, 3875, 3239, 2817, 2790, 4088, 2790, 2790, 2824, 2790, 3502, 2818, 2790, 3007, 2790, 3959, 3750, 2960, 2745, 3748, 2790, 4626, 2790, 4622, 2667, 2940, 2842, 3754, 2902, 4615, 2840, 3753, 3753, 3753, 4616, 2838, 4624, 4624, 3006, 3753, 2841, 2903, 2719, 3291, 3292, 3752, 2941, 2998, 3000, 2847, 2790, 2790, 2790, 2790, 2790, 3322, 3326, 2790, 2790, 2790, 3241, 4802, 2775, 4735, 2782, 2790, 2790, 2790, 4802, 3231, 2790, 2790, 2790, 2771, 4780, 3110, 4601, 2790, 3607, 2790, 3763, 3555, 2886, 2973, 2790, 3980, 2790, 3666, 2790, 4542, 2416, 2884, 2890, 2896, 2907, 4569, 2911, 2790, 2919, 5035, 2790, 2913, 2925, 2790, 4599, 2686, 2790, 3665, 2790, 4541, 3125, 4330, 4429, 2929, 2934, 2939, 3953, 2790, 2790, 4197, 3440, 2790, 2790, 2790, 2790, 4592, 3426, 2790, 2790, 2790, 2790, 2790, 4860, 2951, 2790, 3324, 2790, 2790, 3609, 3761, 2790, 4016, 2955, 2741, 2842, 2790, 4742, 2959, 2790, 2790, 4535, 2790, 2790, 4096, 4079, 4079, 4079, 4079, 2435, 2436, 2436, 2436, 2436, 2437, 2980, 2790, 2790, 2790, 2790, 2802, 2989, 2790, 2790, 2790, 2790, 2801, 2988, 2790, 2790, 2790, 4818, 4810, 3928, 2790, 3608, 3761, 2316, 2993, 3004, 2790, 3011, 3032, 2790, 2790, 2790, 4503, 3015, 2790, 2790, 2790, 2790, 3011, 3032, 2790, 2790, 2790, 2790, 2790, 3026, 4920, 2790, 2790, 2790, 2790, 3025, 4919, 2790, 2790, 2790, 2790, 2790, 4355, 3755, 4359, 2790, 2790, 3354, 3059, 4366, 4372, 4240, 2834, 4504, 3016, 2790, 2790, 3635, 3927, 3023, 3031, 4541, 3436, 3037, 3854, 3044, 2790, 2790, 3451, 3049, 2790, 2790, 3024, 3043, 2790, 2790, 2801, 3048, 2790, 2790, 3053, 3064, 3031, 4492, 3071, 2975, 3079, 2790, 3470, 3088, 2790, 3421, 3079, 2790, 2801, 3098, 2790, 4152, 3102, 3109, 2574, 3114, 3122, 2790, 4585, 3124, 2790, 3129, 2790, 4584, 3123, 2790, 4154, 3033, 3133, 4950, 3518, 3142, 4948, 4952, 3148, 2790, 4155, 3156, 3188, 3160, 3150, 4950, 3167, 3186, 3174, 3174, 3174, 3180, 3184, 3192, 3192, 3196, 3200, 3175, 3209, 3433, 3213, 3176, 3861, 3217, 3221, 4494, 3225, 3236, 3247, 2790, 2790, 2790, 2790, 3914, 2790, 2790, 3253, 3263, 3403, 3170, 3479, 3270, 3274, 3278, 3282, 3285, 3285, 3286, 2790, 2790, 3913, 2790, 3549, 3337, 3848, 3342, 3290, 3496, 2655, 3296, 3300, 3311, 3318, 4953, 3330, 4637, 2790, 3320, 2790, 2790, 3659, 2790, 2790, 3336, 2790, 2790, 4722, 2770, 2790, 2790, 2790, 2790, 4722, 2770, 2790, 2790, 2790, 2790, 2790, 4190, 3341, 3484, 3460, 3144, 3346, 3363, 3369, 2976, 3375, 2790, 2790, 2790, 3383, 3388, 2790, 2790, 2790, 3472, 2790, 2790, 2790, 4413, 2790, 4305, 3786, 4825, 2790, 2790, 2364, 2790, 3482, 3486, 2790, 3416, 3420, 2790, 4591, 3425, 2790, 2790, 2790, 2790, 2672, 3430, 2790, 2790, 2790, 3769, 2790, 2790, 2790, 2790, 3471, 3736, 2790, 2790, 2790, 2790, 3776, 2790, 3469, 2790, 2790, 2790, 2790, 4198, 3468, 2790, 2790, 2790, 2790, 4198, 3468, 2790, 2790, 2790, 2790, 2921, 3506, 2790, 2790, 2790, 4591, 3513, 2790, 2790, 2790, 3724, 2660, 2790, 4124, 3542, 3476, 3490, 3494, 3634, 3500, 2790, 2921, 3506, 2790, 2790, 2790, 2790, 3512, 3517, 3522, 2833, 3204, 2790, 3527, 2790, 2790, 2790, 4249, 2790, 2790, 2790, 3526, 2790, 2790, 2790, 3821, 2761, 2790, 2790, 2790, 2790, 4347, 2686, 2790, 2790, 2790, 2790, 4351, 2790, 4248, 2790, 2790, 2790, 3531, 3517, 3412, 2790, 2790, 4987, 2790, 2790, 2563, 2790, 2790, 2790, 4094, 4079, 4079, 4079, 4079, 2435, 2436, 2436, 2436, 2397, 2321, 2321, 2321, 2321, 2321, 2464, 2466, 2466, 2466, 2466, 2393, 2405, 2790, 2790, 2833, 2790, 4987, 2790, 2790, 4422, 2790, 2790, 4126, 4322, 3032, 2790, 4987, 2790, 3390, 4989, 2790, 2605, 2730, 2790, 3541, 3547, 4788, 3547, 2566, 2566, 2566, 4894, 4014, 4014, 4014, 4788, 2832, 3553, 2315, 4875, 2567, 4015, 4896, 2830, 2899, 3559, 3560, 3564, 2790, 2790, 2790, 2790, 2790, 3615, 3614, 2790, 2790, 4465, 3917, 2585, 3619, 3625, 3737, 4266, 4915, 3629, 3649, 4306, 3633, 3639, 3647, 3653, 2790, 2790, 4691, 3658, 2790, 4464, 3916, 2790, 3663, 2722, 3670, 3674, 4193, 4196, 2790, 3690, 2790, 2790, 2790, 2382, 3694, 2790, 2790, 2790, 2383, 3695, 2790, 2790, 2790, 2339, 3143, 2790, 2790, 2790, 4517, 2790, 2965, 4474, 4719, 4065, 4703, 2578, 3699, 3704, 2790, 2790, 3118, 2790, 2790, 2790, 4999, 2790, 4869, 4984, 5004, 2752, 2790, 2790, 3118, 2790, 4317, 3723, 2790, 2790, 2790, 2790, 4391, 3711, 2790, 2790, 2790, 2790, 3716, 3847, 2790, 2790, 3259, 2790, 2790, 2790, 2790, 2790, 3258, 2783, 2790, 2790, 2790, 2790, 3258, 2783, 3791, 2725, 2790, 3795, 2790, 2790, 3803, 2790, 2790, 3810, 2790, 2790, 2638, 2790, 4782, 3202, 2716, 3818, 2790, 3795, 2790, 4584, 3812, 2790, 2351, 2790, 2790, 3811, 2790, 3825, 3838, 2790, 2790, 4988, 2790, 3725, 4875, 2790, 2414, 2790, 3535, 4942, 2790, 2430, 2790, 4323, 4014, 3846, 3205, 3847, 4039, 2790, 2713, 2790, 3852, 3683, 3067, 3104, 2790, 3685, 4305, 3685, 3915, 3915, 3105, 3683, 3683, 3683, 3066, 3331, 3105, 3332, 3331, 3332, 3684, 3256, 2790, 2790, 3371, 3735, 2790, 2790, 2790, 2790, 3421, 3742, 2790, 2790, 2790, 2790, 2790, 3741, 2790, 2790, 2790, 2790, 3746, 2790, 3759, 2703, 3621, 4113, 3881, 3885, 3889, 3893, 3894, 3898, 3902, 2790, 2790, 3162, 2790, 2790, 3643, 2983, 4501, 4562, 3907, 3765, 4282, 3921, 2790, 4554, 4022, 2790, 3925, 3932, 4556, 3936, 2790, 4242, 3941, 2790, 2855, 2784, 3943, 4375, 4402, 2862, 2866, 2870, 2874, 2874, 2875, 2879, 2819, 3325, 2790, 2778, 2790, 4182, 4960, 4187, 2504, 5007, 4203, 4207, 4211, 4215, 4219, 4222, 4224, 2790, 2790, 4077, 4079, 4079, 4079, 4079, 4079, 2396, 2436, 2436, 2436, 2436, 2436, 2375, 2321, 2321, 2321, 2322, 2466, 2466, 2466, 2466, 2466, 2332, 2357, 2380, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3204, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3163, 2790, 2790, 2746, 3858, 4848, 4930, 3872, 3642, 4579, 2727, 4118, 2315, 3764, 3947, 3951, 2790, 2790, 3814, 3957, 2790, 2790, 2790, 3967, 3350, 2984, 2729, 3978, 3548, 3984, 3961, 2790, 2790, 3813, 3988, 2790, 2790, 2790, 2790, 3686, 4027, 2790, 2790, 2790, 2790, 3257, 4051, 2790, 3074, 2790, 2790, 4299, 3993, 2790, 4007, 2790, 2984, 2790, 3568, 3575, 4260, 3583, 3587, 3591, 3594, 3597, 3600, 3601, 3605, 2790, 2790, 2790, 4750, 2964, 2790, 2790, 2790, 2790, 2969, 2761, 2790, 2790, 2790, 2790, 4743, 2790, 4834, 2790, 3348, 4604, 4013, 4070, 4311, 4020, 2790, 2790, 2790, 4026, 2790, 2790, 2790, 2790, 3578, 4964, 2790, 2790, 2790, 2790, 4969, 2790, 2790, 2790, 2790, 3579, 2790, 4031, 2790, 4037, 2790, 4043, 2789, 4333, 4571, 4021, 2790, 2790, 4362, 2790, 2790, 2790, 2790, 3968, 4183, 2790, 2790, 4271, 3972, 4033, 2790, 2790, 4832, 2790, 2796, 2790, 4360, 3993, 2790, 2790, 2790, 2790, 4049, 2790, 2790, 2790, 2790, 4361, 2761, 4510, 4241, 4057, 4254, 4773, 4069, 4439, 2790, 2790, 4976, 2790, 2790, 2790, 4457, 2761, 2790, 2790, 4485, 3989, 2790, 2790, 4456, 4074, 3731, 4836, 4254, 4085, 4092, 3707, 2790, 4060, 2790, 2790, 4060, 4147, 4132, 4140, 4134, 4843, 2501, 4130, 4921, 4921, 4921, 4291, 4135, 4132, 4132, 4132, 4139, 4922, 4135, 4144, 4922, 4923, 4133, 4159, 4169, 4171, 4166, 4163, 4175, 4178, 2790, 2790, 2790, 2800, 2790, 2746, 3958, 4087, 2818, 2790, 3314, 2806, 2790, 3502, 2818, 2790, 2790, 4270, 3039, 4275, 2790, 2790, 2790, 4279, 3358, 2850, 4286, 4295, 2790, 3397, 3607, 4303, 4310, 2790, 2790, 4965, 4315, 2790, 2790, 2790, 3378, 4321, 2790, 2790, 2790, 3379, 2790, 2790, 3472, 2790, 2790, 2790, 2345, 3847, 2790, 2790, 3471, 3736, 2790, 4603, 2790, 4305, 2790, 4812, 4327, 4339, 2790, 2790, 3352, 3356, 2996, 4343, 3937, 4297, 4995, 4476, 2843, 2790, 3025, 4927, 2790, 2790, 4934, 2406, 2599, 4938, 5023, 4946, 2790, 2790, 2790, 2790, 4957, 4381, 4359, 2790, 2790, 2790, 3806, 4389, 2790, 2790, 2790, 2790, 3963, 4396, 2790, 2790, 2790, 2946, 2790, 2790, 2790, 3712, 2947, 2790, 2790, 2790, 4234, 3973, 2790, 2790, 2790, 3962, 4395, 2790, 2790, 2790, 2790, 3962, 4395, 3755, 4359, 2790, 3056, 3060, 4368, 3960, 4535, 4377, 2790, 2790, 2790, 2808, 4400, 2790, 2790, 2790, 2790, 4406, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 4708, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3152, 3203, 2790, 2790, 2790, 2790, 2790, 3963, 4411, 2790, 2790, 2790, 2807, 4407, 4446, 2790, 4417, 2942, 4426, 3654, 3761, 2790, 2790, 3720, 2790, 2790, 2790, 2790, 2790, 3729, 2790, 4472, 2790, 2586, 3787, 3138, 2790, 4862, 4438, 2790, 2790, 2807, 4451, 2790, 2790, 2790, 4443, 2790, 2790, 2790, 4450, 4689, 3400, 2942, 4455, 4536, 4484, 2790, 4461, 2790, 2790, 4469, 2790, 2790, 4480, 2790, 2790, 3779, 4523, 4489, 4498, 3654, 4483, 2790, 4508, 2790, 5040, 4002, 2790, 4514, 2790, 2790, 4521, 4525, 4529, 4540, 4384, 4590, 4385, 2790, 4514, 2790, 4547, 4551, 2790, 3997, 4560, 4566, 3999, 4575, 3995, 4009, 4009, 4009, 4583, 4589, 4001, 4001, 4596, 3680, 4608, 4879, 4613, 4620, 4609, 4877, 2407, 3782, 4792, 4793, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 3018, 4630, 4634, 4645, 4649, 4653, 4657, 4661, 4665, 4669, 4672, 4676, 4679, 4683, 2790, 2790, 2790, 3017, 4695, 4542, 4761, 4701, 4577, 4906, 4707, 4712, 4716, 4727, 2790, 3832, 2594, 3075, 4733, 3830, 4739, 2790, 2790, 2790, 3019, 4842, 2597, 4900, 4904, 4853, 4912, 2790, 2790, 2790, 2790, 2790, 3027, 4747, 4754, 4760, 4765, 4771, 4777, 4786, 4797, 4801, 2790, 2790, 2790, 2790, 4807, 2790, 2790, 3876, 4543, 4150, 2930, 2766, 2790, 2790, 2790, 2790, 2790, 4723, 2790, 2790, 2790, 2691, 2790, 2790, 2790, 3094, 2695, 2701, 2790, 2790, 2790, 2790, 3508, 2790, 4840, 2406, 4847, 4803, 4111, 4852, 4857, 4914, 2790, 2790, 2790, 2790, 2696, 4866, 2790, 2790, 3910, 2790, 2790, 4686, 4531, 4887, 3772, 3082, 3706, 2790, 4289, 2790, 3974, 3915, 4973, 2790, 4980, 4984, 5018, 4907, 4994, 2790, 2790, 2801, 4830, 2790, 2790, 2790, 5000, 2790, 3091, 2790, 2790, 4103, 4533, 4109, 3084, 2790, 4117, 4908, 2790, 3303, 2790, 4122, 3249, 2790, 4999, 2790, 2790, 4828, 2790, 2790, 3571, 2790, 5011, 5017, 5022, 2790, 2790, 3799, 2790, 3384, 3389, 2790, 2790, 5029, 3394, 2790, 2790, 2790, 2790, 4881, 2790, 3543, 3449, 3410, 3116, 5028, 2790, 3798, 2790, 2790, 5027, 3365, 3864, 2790, 4990, 2790, 4045, 2790, 2710, 2790, 3447, 4603, 3455, 3459, 3700, 3677, 2790, 2790, 3464, 2790, 2790, 2790, 2790, 2790, 4199, 5033, 3136, 2790, 4383, 5039, 2587, 3834, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2578, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 6090, 6563, 5044, 5057, 5054, 6594, 6596, 6596, 6596, 6591, 5074, 6595, 6596, 6596, 6596, 6596, 5087, 5061, 5074, 6596, 6596, 5067, 5062, 6596, 5078, 5084, 5080, 5066, 6594, 6163, 5071, 5091, 5094, 5094, 5094, 5095, 5099, 5099, 5103, 5107, 5114, 5111, 5118, 5122, 5134, 5137, 5129, 5130, 5127, 5125, 5141, 5145, 6561, 6446, 5234, 5173, 5635, 5635, 5635, 5219, 5598, 5503, 5251, 5251, 5251, 5251, 5252, 5196, 5267, 6248, 5502, 5251, 5251, 5196, 5196, 5196, 5266, 5202, 5212, 5632, 5635, 5050, 6519, 6509, 5635, 6818, 5635, 5635, 5146, 5150, 6535, 5218, 5635, 5635, 5147, 5154, 5196, 5267, 5268, 5502, 5213, 5214, 5232, 5214, 5631, 5635, 5146, 5151, 5635, 5155, 5619, 6297, 5635, 6532, 6536, 5244, 5250, 5251, 5251, 5251, 5295, 5631, 5633, 5635, 5635, 5635, 5049, 6518, 5502, 5502, 5293, 5251, 5251, 5226, 5196, 5196, 6247, 5270, 5502, 5502, 5502, 5504, 5268, 5502, 5214, 5633, 5282, 5635, 5635, 5635, 5273, 6084, 5196, 5267, 5271, 5635, 5166, 5635, 5635, 5749, 5219, 5251, 5296, 5196, 5196, 5306, 5635, 5196, 5265, 5269, 5273, 5635, 5635, 5165, 5635, 6247, 5268, 5502, 5502, 5502, 5502, 5251, 5502, 5251, 5251, 5251, 5186, 5193, 5272, 5635, 5635, 6261, 5635, 5298, 5635, 5635, 6262, 5502, 5502, 5294, 5251, 5251, 5251, 5296, 5251, 5251, 5264, 5196, 5196, 5196, 5196, 5265, 5196, 5197, 5635, 6245, 5269, 5293, 5296, 5306, 6246, 6247, 5502, 5502, 5502, 5292, 5251, 5251, 5196, 6255, 6247, 5270, 5292, 5251, 5264, 5197, 5198, 5302, 5297, 5312, 5312, 5304, 5635, 5179, 5635, 5643, 5168, 5635, 6860, 5329, 5590, 5333, 5336, 5339, 5343, 5362, 5419, 5347, 5351, 5404, 5419, 5419, 5419, 5419, 5368, 5384, 5393, 5355, 5359, 5418, 5367, 5372, 5346, 5420, 5381, 5390, 5397, 5377, 5386, 5419, 5376, 5401, 5416, 5424, 5428, 5430, 5430, 5434, 5436, 5440, 5473, 5444, 5446, 5365, 5407, 5450, 5454, 5458, 5466, 5464, 5466, 5462, 5470, 5477, 5635, 5181, 6353, 5635, 5219, 5635, 5635, 5219, 5635, 7266, 5635, 5904, 5635, 6256, 6080, 5635, 6853, 5635, 5635, 5169, 5672, 6820, 5635, 5635, 5635, 5275, 5635, 5635, 7112, 6346, 7172, 5635, 5220, 7282, 5635, 5273, 5642, 5635, 5635, 6879, 5246, 5891, 5635, 5635, 5182, 6258, 5523, 6083, 6080, 5977, 6569, 5635, 6877, 6875, 6150, 5527, 5530, 5531, 5535, 5538, 5542, 5547, 5545, 5551, 5553, 5554, 5558, 5561, 5569, 5562, 5566, 5562, 5572, 5574, 5578, 5635, 6820, 6222, 5635, 5975, 5635, 5635, 6702, 6210, 5614, 5635, 5635, 5189, 5635, 5635, 6773, 5656, 5635, 5635, 5635, 5307, 5668, 5635, 5635, 5635, 5315, 6779, 5662, 5666, 5635, 5635, 5635, 5582, 5675, 5635, 5635, 5635, 5320, 5679, 6567, 5635, 5683, 5691, 5698, 5706, 5734, 5699, 5707, 6568, 5635, 5635, 5635, 5491, 6736, 5694, 5700, 5708, 5162, 5635, 5635, 5635, 5513, 7310, 6318, 5664, 5635, 5635, 5635, 5277, 5746, 5635, 5712, 5635, 5274, 5273, 5635, 5274, 6223, 5635, 5275, 5635, 6695, 5635, 5635, 6694, 5823, 6568, 5635, 5322, 5635, 5635, 5910, 5635, 5635, 5635, 6618, 5236, 5635, 5717, 6739, 6745, 5731, 6568, 5635, 5324, 5635, 6335, 5811, 5635, 5635, 5635, 5675, 5701, 5732, 5635, 5635, 5318, 5635, 5635, 6736, 6740, 6744, 5730, 5734, 5635, 5635, 5635, 5514, 5768, 5701, 5775, 6568, 5776, 5635, 5635, 5635, 5615, 5747, 7254, 5635, 5635, 5512, 6989, 5208, 6448, 5733, 5635, 5635, 5635, 5625, 5788, 7253, 5635, 5635, 5635, 5635, 5159, 5797, 5635, 5635, 5635, 5638, 6319, 5635, 5635, 5635, 5640, 6027, 5799, 5635, 5635, 5635, 5646, 5650, 6805, 5635, 5635, 5635, 5655, 5805, 5798, 5635, 5635, 5635, 5636, 5515, 5803, 6804, 6568, 5635, 5496, 5048, 5635, 5219, 6618, 5635, 5635, 5635, 6260, 5635, 5583, 5635, 5635, 5819, 6695, 5635, 5635, 5635, 5724, 5819, 5635, 5821, 5819, 5635, 5635, 6934, 6878, 5756, 5815, 5829, 5635, 5508, 5204, 5664, 5842, 5846, 5854, 5858, 5862, 5866, 5866, 5868, 5870, 5870, 5870, 5870, 5874, 5874, 5874, 5874, 5877, 5879, 5635, 5635, 5635, 5738, 7116, 5885, 5635, 6258, 6080, 5635, 5899, 5917, 5635, 5635, 5594, 5635, 5324, 5635, 5635, 6618, 5635, 6618, 5635, 5582, 5635, 5635, 5819, 5921, 5635, 5635, 5487, 7303, 5485, 5635, 6834, 5635, 5635, 5612, 5635, 6832, 5932, 5635, 5635, 5635, 7178, 5635, 6696, 5635, 5937, 5325, 5635, 5635, 5635, 5761, 5969, 5635, 5635, 5635, 5804, 5984, 5635, 5635, 5635, 5819, 5635, 5850, 6339, 5992, 5606, 5635, 5635, 5635, 6696, 5635, 5938, 5635, 6256, 6930, 6081, 6015, 5635, 5635, 5635, 5895, 6016, 5635, 5635, 5635, 5902, 5640, 5999, 6005, 6011, 6261, 5635, 6095, 5635, 5635, 6088, 6289, 6037, 6042, 5635, 5635, 5635, 7255, 5635, 5635, 6027, 6032, 6038, 6043, 5635, 5635, 6256, 5635, 6082, 5635, 5820, 5635, 5820, 5635, 5635, 5821, 6261, 6335, 6695, 5635, 5635, 6692, 6568, 5923, 7028, 6032, 6058, 6033, 6059, 5635, 5635, 5635, 5908, 7128, 7132, 6613, 5635, 5635, 5635, 5923, 5517, 6786, 6790, 5635, 6564, 5635, 5635, 5635, 5907, 6260, 6318, 5635, 5635, 5635, 7259, 6072, 6033, 6064, 5635, 5635, 7027, 6032, 6063, 6564, 5635, 5635, 6260, 6261, 5636, 6988, 7255, 5678, 5635, 6082, 5635, 5821, 5945, 5412, 5635, 5635, 5635, 7285, 5635, 5635, 6257, 6081, 6261, 5635, 5635, 5635, 5221, 6071, 6711, 6064, 5635, 5635, 6838, 5635, 5589, 6617, 6072, 6712, 6065, 5635, 5635, 6844, 5635, 5635, 6851, 6568, 6070, 6710, 6063, 6564, 5943, 6983, 5635, 5635, 5635, 7286, 5635, 5756, 5635, 5635, 5635, 5943, 6260, 6094, 5635, 5635, 5635, 7332, 5720, 5635, 6821, 6073, 6109, 5635, 5635, 5635, 5956, 5635, 6099, 6107, 6066, 6256, 6081, 6337, 5635, 5635, 6852, 5635, 5320, 5635, 6075, 6079, 5635, 5635, 5635, 5958, 5635, 6820, 7158, 6077, 5635, 5635, 5635, 7346, 5635, 6131, 6821, 6074, 6076, 5635, 5635, 6820, 6708, 6127, 5635, 5635, 7156, 5634, 5905, 5635, 5228, 6053, 5274, 6116, 6079, 5635, 6981, 6142, 7156, 5822, 5635, 7157, 6118, 5635, 5635, 6115, 6078, 5635, 5635, 6114, 6078, 5635, 5635, 6115, 6078, 5635, 5674, 5285, 5674, 6117, 5635, 5635, 5636, 5635, 5635, 5635, 6221, 6118, 5635, 5635, 6116, 6139, 6079, 5635, 6139, 7083, 5674, 6617, 7134, 5635, 7134, 5635, 7134, 5635, 6616, 6614, 5635, 5635, 6878, 5764, 6744, 6449, 5734, 5635, 5287, 6614, 6614, 6614, 7253, 5635, 5674, 5635, 5635, 5512, 5516, 5635, 6392, 6392, 5635, 5636, 5642, 6257, 5635, 6085, 7286, 5635, 5635, 5635, 6481, 6485, 5733, 6255, 6840, 6147, 5635, 5635, 6940, 6946, 7286, 6617, 6879, 6154, 6160, 6167, 6156, 6171, 6175, 6179, 6183, 6184, 6189, 6189, 6185, 6193, 6193, 6193, 6193, 6196, 7276, 5635, 5583, 5635, 5635, 5582, 6208, 5635, 5635, 6214, 6197, 5278, 6228, 5635, 5635, 6975, 5635, 5635, 7001, 5769, 5797, 5308, 5635, 6961, 5635, 5635, 7001, 5770, 6236, 5635, 5980, 6254, 5635, 5635, 5636, 5945, 5412, 5951, 5635, 5635, 6252, 5635, 5635, 5635, 6053, 5635, 6255, 6086, 6855, 6868, 5635, 6399, 5635, 6614, 5635, 5635, 6273, 5635, 5635, 5638, 5964, 6676, 5635, 5635, 5636, 6988, 6994, 5635, 5678, 5635, 6081, 5635, 5819, 5972, 5635, 5635, 5635, 6082, 6085, 5635, 6281, 5635, 5635, 5640, 6573, 6802, 5206, 6295, 5635, 5635, 7007, 7016, 7041, 5635, 7144, 6290, 6803, 5207, 5207, 6296, 5635, 5635, 5635, 6084, 6291, 5771, 6995, 5635, 5635, 7034, 5635, 5635, 7152, 5635, 5635, 7253, 5635, 5635, 6954, 5657, 5635, 7252, 6400, 5635, 6670, 5635, 6259, 6209, 5635, 5639, 6347, 5635, 5635, 5635, 6088, 6309, 6301, 6325, 6329, 5635, 6310, 6302, 6326, 6079, 5635, 6982, 5907, 5635, 6258, 6081, 6311, 6801, 6327, 5635, 5635, 7257, 6960, 6255, 6086, 6856, 6869, 5635, 5635, 5640, 7027, 6400, 5635, 6735, 7277, 6693, 5635, 6671, 5635, 5635, 5320, 6310, 6323, 6327, 6324, 6328, 5635, 5635, 5635, 6089, 5149, 5153, 6086, 6866, 6567, 5635, 5635, 7287, 6616, 5635, 6879, 7278, 5582, 5635, 6769, 6564, 5635, 7252, 6400, 5288, 6079, 6695, 6669, 5635, 5635, 6201, 5635, 6344, 5635, 5635, 5674, 5805, 6351, 6357, 5635, 5635, 5676, 5635, 6820, 7179, 6366, 6329, 5635, 5260, 5635, 5635, 5635, 6122, 6399, 5635, 5635, 6671, 5635, 6259, 6365, 7255, 5635, 6021, 5635, 5635, 5315, 5167, 5635, 5635, 5635, 6247, 6247, 6619, 5635, 5635, 5635, 6255, 6086, 5635, 6620, 5635, 5635, 5635, 6256, 5219, 5635, 5635, 6619, 5904, 5748, 6771, 6620, 6618, 5635, 7096, 6618, 6618, 6618, 6770, 5901, 5511, 6370, 5635, 5635, 7333, 5721, 5635, 7255, 7154, 5635, 5635, 7349, 5518, 7319, 6209, 6384, 5635, 6372, 5985, 6719, 6390, 6396, 6404, 6408, 6411, 6413, 6417, 6418, 6418, 6422, 6424, 6425, 6429, 6429, 6429, 6429, 6430, 6429, 5635, 5635, 5755, 5635, 5635, 5635, 5888, 5635, 6604, 7326, 5635, 5635, 5635, 6616, 5635, 6692, 5635, 5824, 6457, 6568, 5635, 6852, 5635, 6948, 5635, 6949, 6455, 5635, 5635, 5635, 6261, 6260, 5635, 6462, 6456, 5635, 5637, 5640, 6675, 7115, 5635, 6467, 5635, 5658, 6453, 5635, 6463, 5635, 5635, 5635, 6262, 7328, 5635, 5635, 5635, 6267, 5277, 6615, 5635, 5635, 5755, 5818, 5635, 6819, 5635, 5635, 6494, 6473, 5635, 6477, 5635, 5638, 6346, 5635, 5635, 7275, 5635, 5635, 7287, 5635, 5635, 5635, 6480, 5635, 6498, 6507, 6513, 6518, 6508, 6514, 5635, 5635, 6523, 5635, 5635, 5635, 6315, 5635, 6540, 5635, 5635, 5783, 5635, 5635, 6554, 5635, 5635, 5635, 6339, 5635, 6263, 6549, 6503, 5635, 6547, 5176, 6553, 5635, 5635, 5635, 6334, 5635, 6558, 7327, 5635, 5635, 5784, 5635, 6578, 5153, 5635, 5635, 5635, 6439, 6088, 6574, 6579, 5154, 5635, 5635, 6583, 5635, 5635, 5894, 5810, 5635, 5635, 5581, 5635, 5635, 5635, 5725, 6054, 5637, 5635, 5635, 5900, 5635, 5635, 5635, 5904, 5635, 6088, 6588, 5153, 5635, 5638, 6826, 7252, 6088, 5148, 5152, 5635, 5640, 7087, 6772, 6084, 6772, 6084, 5275, 5635, 6694, 5904, 6338, 5277, 6693, 5635, 5825, 5635, 6821, 6600, 5635, 5640, 7334, 5907, 5635, 5635, 6822, 6224, 5635, 5644, 5648, 6102, 5635, 6821, 6223, 5635, 5635, 5635, 6479, 6762, 5824, 5635, 5321, 5635, 5647, 7054, 7038, 5635, 7255, 5637, 5635, 5654, 5635, 5635, 5222, 7284, 5635, 5635, 5276, 5635, 5277, 6695, 6337, 6260, 5635, 5635, 5635, 5256, 6220, 5154, 5635, 5635, 5635, 6399, 5638, 6692, 5635, 5635, 5923, 6072, 5638, 7024, 6610, 5635, 5674, 6141, 5635, 5635, 6854, 5635, 5635, 6878, 5693, 5699, 7255, 6216, 6771, 5635, 5677, 5635, 5635, 5635, 5587, 5911, 6624, 5628, 6630, 6638, 6641, 6645, 6648, 6656, 6656, 6656, 6656, 6651, 6652, 6652, 6652, 6660, 6660, 6660, 6660, 6662, 6666, 5635, 5635, 5635, 6566, 6048, 5635, 5622, 5635, 5686, 5838, 5635, 5686, 6053, 5635, 5635, 5635, 5985, 5635, 5589, 6694, 5939, 6617, 5912, 6686, 5635, 5635, 5944, 5411, 6052, 6691, 5635, 5635, 6756, 6701, 5635, 5635, 5635, 6567, 6125, 6772, 5635, 5635, 5987, 5635, 5635, 6723, 6729, 7278, 6695, 6734, 5635, 5635, 5991, 5605, 6749, 5635, 5635, 5635, 6615, 5635, 5635, 5635, 5645, 5649, 5635, 6480, 6763, 6750, 5635, 6764, 5607, 5635, 5635, 5635, 5835, 5635, 6717, 5635, 5635, 6026, 6031, 5608, 5635, 6730, 6143, 6483, 6487, 6568, 5635, 5635, 6486, 5734, 5635, 5635, 6133, 6881, 5635, 5635, 6133, 7095, 5635, 5635, 5635, 6816, 6204, 6203, 5635, 5635, 6134, 6772, 5909, 5635, 5635, 5635, 6620, 5635, 5597, 6879, 6795, 5635, 5635, 5635, 6685, 6480, 6484, 6488, 5635, 5635, 6616, 6615, 5635, 5635, 6204, 6202, 5274, 6126, 5635, 5635, 6220, 6224, 7347, 6777, 5635, 5635, 6230, 5635, 5635, 6230, 6485, 5733, 5635, 5635, 6054, 5204, 5635, 7269, 6772, 5635, 5687, 5952, 5635, 5713, 5635, 5635, 5276, 6615, 5635, 6277, 5635, 5635, 6619, 6809, 5734, 5635, 5635, 6246, 6247, 6247, 6247, 6247, 5270, 5502, 7114, 5635, 7254, 5635, 5674, 5805, 5798, 6276, 5748, 5635, 5635, 6255, 6247, 6247, 6247, 5269, 5502, 5502, 5835, 6053, 5635, 5635, 6318, 6568, 5635, 7347, 7114, 5635, 5635, 6819, 5321, 5635, 6845, 5635, 5635, 5635, 6716, 5635, 6974, 5635, 5635, 6333, 5635, 6256, 5317, 6285, 5635, 5635, 6966, 5635, 5635, 6965, 5635, 5635, 6257, 5635, 6961, 6053, 5635, 5635, 6967, 5635, 6255, 5589, 6617, 5635, 5753, 5635, 5635, 5323, 5635, 6113, 5634, 5904, 5635, 6256, 6961, 6053, 6255, 6965, 6965, 6965, 5635, 6967, 6965, 5635, 6965, 5635, 6258, 6967, 6965, 7286, 6269, 5741, 5741, 5741, 6053, 6849, 5635, 5635, 5635, 6754, 5635, 7342, 6334, 5635, 5780, 6568, 5635, 5492, 6542, 6492, 5635, 5635, 5635, 6307, 6311, 6324, 6936, 6083, 6873, 5319, 6886, 6892, 6890, 6896, 6900, 6900, 6902, 6908, 6906, 6906, 6908, 6916, 6915, 6912, 6920, 6921, 6921, 6921, 6921, 6925, 6928, 5208, 5635, 5635, 6855, 6526, 6380, 5635, 5635, 6340, 5993, 6565, 5635, 5635, 6617, 5635, 5635, 5635, 6706, 5635, 6239, 5635, 5635, 6364, 7154, 5635, 6242, 5635, 5635, 5637, 5965, 5635, 6953, 5635, 5635, 6376, 5635, 5635, 6958, 5635, 5635, 6443, 5589, 7258, 5635, 5635, 5635, 6760, 5635, 6971, 5635, 6979, 6987, 6993, 6329, 5635, 5832, 6260, 6680, 6878, 5791, 6543, 5635, 5836, 5635, 5635, 6284, 5635, 5635, 6567, 5635, 6616, 5635, 5635, 6469, 6482, 6999, 5635, 5639, 5635, 5635, 5635, 6461, 5725, 5635, 5635, 5635, 6768, 7012, 7040, 5635, 5635, 6547, 6501, 7041, 5635, 5635, 5635, 6769, 5635, 7008, 7017, 7042, 5635, 5848, 5748, 6255, 5483, 5635, 5635, 6245, 6247, 5635, 7021, 5933, 6053, 5904, 6935, 6879, 5792, 5644, 5648, 7055, 7046, 5645, 7052, 7056, 7047, 5646, 7053, 7057, 7048, 5724, 5635, 5635, 5635, 6783, 6486, 5734, 5820, 5635, 5904, 6935, 6879, 5748, 6879, 5793, 5635, 6566, 5635, 5757, 5635, 5635, 5724, 5756, 5635, 5277, 5635, 5635, 5635, 7176, 7094, 7061, 7048, 5635, 5635, 6548, 6502, 5649, 6103, 7067, 7048, 5635, 7061, 6564, 5635, 5635, 6568, 5635, 5646, 5650, 7066, 7124, 5635, 7065, 7123, 5635, 5635, 6584, 5635, 5635, 6987, 7154, 5635, 5881, 5635, 5635, 6365, 5635, 6878, 5318, 6615, 5635, 5899, 5962, 5635, 5602, 5635, 5635, 5188, 5635, 7077, 5635, 5635, 5635, 6794, 5647, 7076, 7069, 5635, 5900, 6053, 5726, 5646, 7075, 7068, 5635, 5635, 6879, 5635, 5635, 5635, 6799, 6809, 5635, 7176, 7081, 5635, 5901, 7114, 6434, 5635, 5635, 7176, 7089, 5635, 5902, 5511, 6435, 5635, 5635, 5757, 5274, 5635, 6088, 7088, 5635, 5902, 5635, 5635, 5635, 6800, 5635, 6088, 7154, 5635, 5903, 5635, 5906, 6616, 6614, 5820, 5904, 6880, 5635, 5908, 5635, 5635, 5924, 7029, 6033, 5640, 7178, 5635, 5635, 6614, 5635, 5635, 6088, 7093, 5635, 5908, 6605, 7327, 7177, 7095, 5635, 5901, 5902, 5635, 5640, 6218, 5821, 6880, 5635, 5635, 6615, 6616, 5635, 5635, 6259, 5635, 5635, 6259, 5635, 5903, 5635, 5635, 5635, 5745, 5640, 7178, 6772, 5238, 5635, 7100, 6880, 5635, 5913, 6687, 5635, 6700, 5635, 5635, 6135, 5635, 5635, 6681, 5635, 5635, 6820, 7094, 5635, 5928, 5635, 5635, 5608, 6878, 5635, 7100, 6881, 5635, 7115, 5635, 5635, 7254, 7106, 5635, 5635, 5635, 6821, 6073, 6820, 7275, 5635, 5635, 5635, 6820, 6309, 6133, 7095, 6880, 5635, 5943, 5410, 5949, 5635, 5635, 5635, 7252, 5635, 5635, 7120, 5635, 5635, 7273, 7120, 6878, 5635, 5635, 6693, 5635, 5635, 5635, 7274, 5635, 5635, 6695, 5635, 5635, 5819, 5809, 5635, 7138, 5635, 6963, 5905, 6209, 5635, 6961, 5635, 5979, 6253, 5635, 5635, 7002, 6744, 5798, 5240, 5635, 6021, 5499, 7109, 5673, 5635, 7142, 5635, 6962, 6021, 6964, 6625, 6022, 7174, 7271, 7149, 7162, 7166, 7170, 7183, 7187, 7191, 7194, 7202, 7197, 7198, 7206, 7208, 7212, 7218, 7217, 7213, 7222, 7232, 7232, 7225, 7231, 7227, 7236, 7240, 5635, 5985, 5837, 5635, 5723, 5635, 5635, 6602, 6606, 7128, 7132, 5904, 5635, 5910, 5481, 7100, 7241, 5635, 5635, 6695, 5824, 6360, 5635, 5635, 5635, 6853, 6259, 6079, 5635, 6529, 7245, 7247, 7251, 5635, 5986, 5635, 5635, 5763, 6743, 5702, 5776, 5635, 7263, 5635, 5635, 6725, 5492, 7283, 7255, 5635, 5635, 6737, 5769, 7291, 5635, 7292, 5635, 5997, 6003, 6009, 6015, 5635, 7296, 7130, 5635, 5998, 6004, 6010, 5907, 5903, 5635, 5635, 6737, 6741, 5635, 6086, 5641, 5635, 5635, 5635, 7100, 5635, 5635, 6738, 6742, 6879, 5635, 7114, 5635, 7252, 5635, 5635, 6853, 6855, 5635, 6020, 5635, 5635, 5635, 7254, 5635, 6337, 5635, 5635, 6770, 5635, 6772, 5635, 6086, 6084, 5635, 5635, 6259, 5635, 7301, 6386, 5635, 5635, 5635, 6878, 5635, 5512, 7309, 6633, 5635, 6047, 5635, 5635, 5635, 7256, 7310, 6634, 5635, 5635, 5635, 6882, 5635, 7307, 7311, 6338, 6853, 5320, 5635, 5640, 7334, 5722, 5635, 5635, 6821, 6126, 5635, 5635, 6021, 6772, 7128, 7132, 5258, 5635, 5635, 5635, 6966, 5642, 5635, 5635, 7101, 5635, 6850, 5635, 6336, 5635, 6260, 5635, 6261, 7102, 5985, 6334, 5635, 5635, 5644, 7073, 7315, 7319, 6338, 5635, 6080, 5906, 5903, 7316, 6788, 5635, 5635, 6772, 5635, 6084, 7095, 5635, 5635, 5686, 5635, 7317, 6789, 5635, 5635, 6813, 5635, 7318, 6790, 6770, 6769, 5635, 5635, 6619, 5635, 6769, 6820, 5635, 5635, 6881, 7115, 5635, 6852, 6855, 5635, 5635, 5635, 6845, 5635, 6718, 6694, 5635, 5635, 5635, 6942, 6786, 6790, 5635, 5635, 5635, 6967, 5635, 5635, 6786, 6790, 6770, 6769, 7254, 5635, 7101, 5635, 7297, 7132, 5258, 7113, 5635, 5635, 6819, 5635, 5635, 5635, 5166, 6379, 5048, 5635, 5635, 6821, 6074, 6078, 5635, 5635, 5635, 5978, 7350, 5519, 7320, 5635, 6081, 5678, 6626, 7319, 5635, 5635, 5635, 7006, 7348, 5517, 6786, 6617, 5635, 6772, 6771, 5635, 6084, 6303, 6488, 5635, 7324, 5906, 5903, 5635, 6085, 5641, 5635, 6084, 6352, 5635, 5635, 5635, 6231, 5047, 5635, 5635, 5635, 7033, 5635, 7348, 7335, 5903, 5635, 6879, 5635, 6851, 5678, 5909, 6855, 6864, 5635, 7340, 5635, 5635, 6829, 5635, 6087, 5635, 6881, 5635, 6852, 6819, 6850, 5635, 5635, 6261, 7332, 7336, 5635, 5635, 5635, 7145, 5635, 6232, 5635, 5635, 6833, 5635, 5274, 5635, 5635, 5635, 7177, 0, 0, 1075838976, 2097152, 16384, 0, 0, 0, 62, 64, 4194560, 4196352, 270532608, 2097152, 2097152, 268435456, 4194432, 541065216, 541065216, 541065216, 541065216, 4194304, 4194304, 4196352, -1606418432, -1606418432, 541065216, 541065216, 4194304, 4198144, 541065216, 541065216, -2143289344, -2143289344, 8425488, 4194304, 4194304, 4194304, 541065216, 37748736, 4194304, 541065216, 4194304, 4194304, 4194432, 37748736, -1606418432, 742391808, 239075328, 775946240, 171966464, 171966464, 171966464, 171966464, 239075328, 171966464, 775946240, 239075328, 239075328, 775946240, 775946240, 775946240, 4718592, 64, 4718592, 2097216, 4720640, 4194400, 4194368, -2142763008, 541589504, 4194368, 541589504, 541589504, 541065280, 4194368, 4194368, 541065312, 541065280, -2143289280, 4194368, -2143285440, -1605890240, -2142761152, -2109731008, -1606414528, -2143285440, -2143285440, -2143285440, -1605890240, -1606414528, -1606414528, -2143285440, -2143285408, -2143285440, -2143285440, -2142761152, 776470528, -1908404416, 775946304, 775946304, -1908404416, 2, 4, 8, 16, 512, 1024, 16777216, 33554432, 402653184, 0, 0, 0, -1979711488, 0, 8192, 8392704, 0, 0x80000000, 16777216, 0, 0, 1536, 32768, 0, 0, 128, 196608, 0, 16384, 1536, 1792, 8192, 16384, 131072, 131072, 0, 0, 64, 1536, 32768, 96, 96, 0, 0, 0x80000000, 16, 0, 0, 1536, 64, 524352, 524352, 524352, 524352, 0, 524288, 64, 64, 262144, 1048576, 4194304, 16777216, 33554432, 67108864, 134217728, 536870912, 0, 128, 128, 128, 128, 2048, 1536, 1024, 0, 0, 0, 15, 208, 15360, 96, 96, 0, 64, 64, 16392, 64, 1048576, 128, 128, 0, 256, 8192, 0, 8192, 0, 33554432, 0, 1024, 1024, 0, 0, 0x80000000, 65536, 32, 96, 96, 96, 96, 64, 0, 8388608, 4096, 0, 0, 8192, 2097152, 0x80000000, 96, 524352, 524352, 524352, 524288, 524288, 524288, 64, 64, 64, 0, 0, 0, 8, 0, 0, 0, 11, 64, 64, 128, 2048, 0, 4096, 0, 0, 131072, 128, 64, 64, 64, 96, 96, 96, 524352, 524352, 524288, 64, 524288, 64, 64, 96, 524352, 0, 0, 0, 18, 33554432, 64, 96, 524352, 524288, 0, 64, 0, 2097152, 0, 0, 4, 16, 0, 0, 16, 8388608, 0, 0, 4096, 536870912, 1073741824, 0, 4, 32, 32, 4, 1073872896, 32, 40, 96, 160, 1056, 262176, 1048608, 2097184, 32, 32, 32, 524320, 32, 1073872896, 40, 262176, 1120, 96, 4195360, 6291488, 2097184, 2097184, 4194336, 4194336, 536870944, 32, 32, 40, 262176, 32, 32, 40, 262184, 1120, 96, 6292512, 4195360, 56, 262184, 40, 262184, 40, 0, 4, 262184, 40, 40, 40, 40, 4195104, 6292512, 4196128, 32, 262184, 34, 34, 40, 48, 42, 32, 32, 327155712, 34, 1056, 1056, 32, 96, 32, 32, 41, 262184, 32, 64, 512, 2048, 16384, 67108864, 42, 1056, 4194336, 32, 32, 32, 32, 56, 2098208, 42, 4457568, -326784344, -322851160, -322851160, -322698144, -322698144, -322698144, -322698144, -322695456, -322695456, -322695456, -322695456, -322597152, -320598176, -322597152, -322597144, -321548576, -320598168, -321548568, -322597144, 32, 0, 96, 32, 42, 224, 40, 262176, 42, 106, 293601323, 293601323, 293863467, 293699627, 293617707, 293716011, 297896507, 293964347, 293702267, 297896507, 293702203, 293702203, 293702203, 293702203, 293964347, 297896507, 297896507, -322597144, -322588952, -321548568, -322588952, -37744981, -322597144, -321548568, -37482773, 0, 131072, 1048576, 2097152, 0, 0, -1744830464, 0, -1744830464, 0, 318767104, 0, 0, 0, 48, 0, 1, 285212672, 0, 0, 2048, 64, 64, 64, 64, 32, 96, 0, 32, 64, 65536, 0, 0, 1, 2, 12, 16, 64, 128, 1024, 2048, 4096, 0, 2, 65536, 262656, 5242880, -1842937664, 201330721, 201330721, -2111369023, -2111369023, -2111369023, -2111369023, -2111369023, -2111369023, -2111360575, -2111369023, -2111369023, -1977151295, -1977151293, -1910042431, -1893265183, -2111368509, -1893265183, -1893265183, -1893265183, -1893265183, -2111368509, -1893265183, -1893265183, -553689472, -553656704, -553689472, -553689472, -553656704, -553656704, -553656704, -553656704, -553656704, -553656704, -553656672, -553656672, -553656672, -553656672, -553656672, -553656670, -553656608, -553656672, -553656664, -553656664, -553656672, -553656670, -553656672, -553656672, -536912159, -553656671, -536879391, -536879391, -536879391, 0, 0, 2048, 4194304, 0, 0, 0, 262656, 0, 0, 0, 536870912, 1073741824, 458880, 2097152, -1845493760, 0, 0, 4096, 2097152, 0, 0, 1, 4096, 201326592, 805306368, -1073741824, 0, 0, 0, 24576, 471424, 0, -2113929216, 0, 0, 0, 220, -1912602624, 18874368, 463488, 0, 0, 9216, 0, 0, 16384, 8192, 8192, 32768, 2048, 2048, 2048, 2048, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 4, 16, 224, 256, 512, 32768, 0, 1040000, 15728640, -570425344, 0, 0, 0, 254, 4194304, 16777216, 33554432, 268435456, 536870912, 0x80000000, 0, 0, -570425344, 32505856, 2097152, 301989888, 0, 0, 0, 512, 0, 0, 0, 256, 12288, 0, 167772160, 234881024, 0, 0, 16384, 32768, 50331648, 0, 128, 512, 7168, 16384, 32768, 196608, 16384, 196608, 786432, 1048576, 2097152, 4194304, 8388608, 33554432, 2097152, 4194304, 8388608, 503316480, 1073741824, 0x80000000, 0, 4096, 201326592, 0, 0, 0, 167772160, 234881024, 128, 1024, 4096, 8192, 0, 0, 8192, 268435456, 0, 0, 4194304, 8388608, 234881024, 268435456, 1073741824, 0x80000000, 0, 0, 1048576, 4194304, 33554432, 268435456, 268435456, 268435456, 268435456, 0, 128, 131072, 2097152, 0, 0, 0, 520, 0, 201326592, 0, 0, 0, 1073741824, 0, 0, 0, 134217728, 128, 512, 3072, 16384, 32768, 3072, 16384, 131072, 524288, 1048576, 4194304, 16777216, 33554432, 201326592, 268435456, 1073741824, 0x80000000, 1048576, 4194304, 268435456, 536870912, 131072, 0, 0, 131072, 0, 131072, 2097152, 0, 0, 16384, 2097152, 0, 0, 2097152, 4194304, 134217728, 0x80000000, 0, 0, 0, 512, 3072, 131072, 524288, 1048576, 131072, 524288, 4194304, 0x80000000, 0, 0, 0, 16384, 16384, 18432, 0, 0, 0, 2048, 0, 0, 4096, 1048576, 0, 0, 67108864, 1073741824, 0x80000000, 0, 0, 29696, 0, 0, 32768, 50331648, 268435456, 0x80000000, 0, 0, 1, 1, 18952, 1024, 0, 65, 1024, 0, 4096, 32768, 0, 1024, 18952, 65, 268436480, 2101248, 524288, 1024, 19017, -1744550912, 8388624, 8388624, 8388624, -1739308032, -1739308032, -1739308032, -1739308032, -1736162288, -1736162288, -1736162288, -1736162288, -7868466, -7868466, -7868466, -7868466, -7868450, -7868450, -7868450, 0, 0, 0, 1610612736, 1024, 0, 2101248, 0, 0, 262144, 65536, 262144, 262144, 0, 0, 2048, 131072, 524288, 585, 0, 0, 0, 8192, 0, 0, 0, 4096, 0, 0, 0, 32, 0, 0, 0, 44, 64576, 0, 1024, 278528, -1744830464, 5521408, -1744830464, 0, 0, 2, 12, 64, 0, 1040, 8667136, -1744830464, -67108864, 0, 0, 0, 9728, 0, 2014, 0, 0, 0, 13312, 0, 1, 4, 8, 32, 64, 16384, 67108864, 134217728, 268435456, 0x80000000, 0, 0, 520, 1024, 0, 0, 2, 16, 0, 278528, 0, 0, 2, 67108864, 16384, 0, 5242880, 0x80000000, 0, 0, 327680, 0, 0, 328192, 0, 0, 0, 118, 577408, 22020096, 1040, 0, 0, 0, 16384, 0, 67108864, 1998, 518144, 8388608, 50331648, 201326592, 805306368, 0, 2, 204, 768, 1024, 10240, 1024, 10240, 16384, 32768, 458752, 8388608, 458752, 8388608, 50331648, 67108864, 134217728, 805306368, 134217728, 805306368, 1073741824, 0x80000000, 0, 220, 0, 0, 0, 32768, 33554436, 2, 12, 192, 768, 1024, 1024, 2048, 8192, 16384, 32768, 458752, 32768, 458752, 50331648, 67108864, 134217728, 134217728, 805306368, 1073741824, 0, 0, 208, 0, 0, 0, 34816, 67108864, 268435456, 0, 0, 0, 65536, 458752, 50331648, 67108864, 805306368, 1073741824, 458752, 50331648, 67108864, 536870912, 1073741824, 0, 0, 4, 8, 64, 128, 512, 2048, 196608, 262144, 33554432, 536870912, 0, 0, 0, 262144, 0, 0, 0, 64, 0, 0, 2, 4, 8, 262144, 0, 1048576, 4194304, 0, 0, 4, 8, 128, 512, 1024, 32768, 65536, 131072, 2048, 196608, 262144, 50331648, 536870912, 1073741824, 1, 4, 8, 512, 2048, 131072, 33554432, 536870912, 0, 0, 4, 8, 512, 2048, 8192, 32768, 8388608, 0, 524288, 262144, 0, 0, 4, 64, 128, 8388608, 0, 512, 2048, 131072, 536870912, 0, 0, 4194304, 8192, 2097152, 268435456, 0x80000000, 16, 33554432, -2147418112, 537395200, 537395200, 0, 4196352, 537427968, 4196352, 0, 537395200, 4196352, 4196352, 276901888, 8540160, -1606418432, 32768, 537395200, 4196352, 1082130432, 51380242, 51380242, 51380242, 22022147, 22349827, 22349827, 22349827, 22366219, 22349843, 22349827, 22349827, 22366219, 22349827, 55576594, 55576594, 55576594, 55576594, 1062785014, 324012114, 55576594, 55576594, 55576594, 1062785014, 1062785014, 1062785014, 1062785014, 0, 0, 0, 329728, 557056, 0, 0, 0, 393216, 0, 0, 17825792, 33554432, 0, 0, 0, 462976, 3, 22020096, 0, 0, 4, 134217728, 0, 0, 8, 16, 512, 402653184, 0, 0, 346112, 19, 0, 0, 8, 64, 0, 0, 0, 82, 301989888, 0, 0, 393232, 0, 0, 393240, 0, 0, 524288, 524288, 524288, 524288, 0, 577408, 22020096, 1040187392, 0, 0, 0, 524288, 0, 0, 0, 16, 0, 0, 0, 6, 16384, 32768, 268435456, 0, 268435456, 0, 1048576, 16777216, 33554432, 0, 0, 524288, 1048576, 2097152, 0, 80, 268435456, 0, 0, 524288, 536870912, 0, 112, 128, 256, 3584, 16384, 32768, 134217728, 805306368, 0, 0, 0, 1007232, 256, 1536, 2048, 16384, 32768, 262144, 0, 4, 16, 32, 64, 128, 256, 1536, 0, 16, 33554432, 0, 0, 1048576, 4194304, 0x80000000, 1536, 16384, 32768, 524288, 4194304, 33554432, 134217728, 536870912, 0, 0, 0, 32768, 0, 0, 0, 1048576, 0, 0, 0, 1998, 518144, 1, 0, 0, 65536, 262144, 0, 0, 256, 1536, 32768, 524288, 0, 0, 4194304, 134217728, 536870912, 0, 0, 1114112, 1073741824, 16, 64, 1536, 32768, 524288, 4194304, 67174400, 33554432, 1073741824, 0, 67174400, 0, 0, 16384, 1073741824, 0, 0, 2097152, 0, 1572864, 0, 1073741824, 16384, 0, 4194304, 0, 8, 0, 131072, 0, 131072, 0, 8, 131072, 131072, 134217728, 4096, 0, 8, 0, 8, 131072, 4194304, -2146430976, 131072, 134217736, 16908320, 547389524, 547389524, 555909216, 555909216, 555909216, 555909216, 564297840, 564297844, 564297844, 564297844, 564297844, 564297844, 564297844, 1001055742, 1001056254, 1001055742, 1001055742, 1001056254, 1001056254, 1001056254, 1001056254, 1001056254, 1001055742, 1, 0, 67108864, 1073741824, 0, 84, 2129920, 8388608, 536870912, 0, 96, 2260992, 0, 0, 2097152, 4194304, 8388608, 134217728, 268435456, 1280, 2809856, 58720256, 939524096, 0, 0, 0, 1052672, 0, 254, 1792, 2809856, 58720256, 939524096, 0, 939524096, 0, 0, 12, 16, 32768, 2097152, 8388608, 536870912, 0, 163840, 0, 0, 12, 32, 64, 1024, 2048, 57344, 262144, 50331648, 268435456, 1073741824, 0x80000000, 0, 52, 0, 0, 20, 64, 62, 64, 128, 1280, 8192, 16384, 131072, 524288, 58720256, 24576, 163840, 524288, 2097152, 58720256, 402653184, 58720256, 402653184, 536870912, 0, 0, 64, 128, 1792, 24576, 163840, 4, 16, 8388608, 0, 0, 2113536, 0, 0, 3735552, 0, 0, 8388608, 8388608, 4096, 4096, 4096, 4096, 0, 48, 25165824, 0, 0, 0, 1572864, 0, 6, 56, 128, 1792, 8192, 524288, 58720256, 402653184, 0, 0, 32, 128, 256, 262144, 262144, 1048576, 1073741824, 0, 0, 0, 0x80000000, 0, 0, 0, -2147483646, 4, 24, 32, 128, 1792, 1280, 8192, 524288, 16777216, 33554432, 0, 262144, 33554432, 134217728, 0, 8, 16, 1024, 16777216, 4194432, 3145728, 541065216, -2143289344, 4194304, 4194304, 4194304, 4194304, 16, 402653184, 0, 0, 32, 128, 256, 2048, 262144, 524288, 4, 16384, 65536, 67108864, 0, 0, 0, 131072, 0, 0, 0, 1024, 0, 0, 32768, 8192, 0, 2048, 0, 32, 8192, 3670016, 2048, 8192, 196608, 1048576, 0, 0, 34816, 9216, 4096, 4096, 29696, 29712, 29712, 29840, 29712, 29712, 29840, 536900624, 4224144, 144384, -754647956, -754647956, -754647956, -754647956, 144384, 144384, 144384, 144384, -754647940, -754647940, -754647940, -754647940, -754516884, -754647956, -754516884, -754516884, -754516884, 0, 0, 8388608, 1073741824, 0, 0, 67108864, 12, 16384, 0, 65536, 29824, 0, 0, 0, 3670016, 44, 64576, 319029248, -1073741824, 0, 0, 60, 0, 0, 0, 4194304, 0, 0, 0, 2014, 0, 319160320, 0, 0, 0, 5242880, 0, 4, 8, 256, 512, 2048, 8192, 16384, 458752, 50331648, 0, 524288, 3145728, 0, 0, 16384, 8, 0, 28672, 0, 0, 32, 524288, 0, 16, 0, 128, 0, 12288, 131072, 0, 0, 128, 512, 3072, 4096, 16384, 32768, 131072, 524288, 1048576, 2097152, 4194304, 262144, 318767104, -1073741824, 0, 0, 0, 28, 0, 0, 60, 64576, 28, 32, 64, 1024, 2048, 61440, 262144, 318767104, 24576, 0, 0, 0, 8388608, 0, 0, 0, 1040000, 67108864, 16384, 0, 65536, 262144, 1048576, 0, 8, 64, 2048, 4096, 8192, 65536, 131072, 1048576, 0, 0, 128, 536870912, 4194304, 131072, 0, 0, 64, 2048, 16384, 32768, 524288, 1048576, 4194304, 134217728, 0x80000000, 32768, 262144, 50331648, 268435456, 0, 32768, 8388608, 0, 0, 16777216, 16777216, 0, 0, 0, 4, 8, 16, 2, 67108864, 0, 65536, 201326592, 0x80000000, 0, 0, 1998, 59238400, -67108864, 0, 524288, 1048576, 0, 0, 64, 256, 32768, 50331648, 268435456, 0, 0, 1, 256, 0, 0, 0, 16777216, 0, 0, 256, 0, 8192, 0, 256, 262144, 2113536, 2097152, 135790592, 0, 256, 8192, 2097152, 0, 0x80000000, 0, 32768, 2097152, 0, 0x80000000, 5242880, 0, 0, 0, 128, 0, 0, 0, 208, 131073, 0, 0, 131073, 0, 135790592, 131073, 4, 0, 131073, 393233, 1610612736, 1610612736, 1610612736, 393241, 393241, 393241, 393241, 805707793, 805707793, 1879449617, 805708049, 1879449617, 1879449617, 1879449617, 1879449617, -483948553, -475559945, -475559945, -483948553, -483948553, -475559945, -483948553, -475559945, -483948553, -475559945, -475559945, -475559945, -475559945, -475559945, -215504905, -475559945, -207116297, -207116297, 0, 0, 72, 0, 4096, 4194304, 32768, 0, 0, 256, 401424, 805306368, 0, 0, 112, 25165824, 0, 1879048192, 0, 0, 116, 0, 0, 401680, 0, 0, 0, 32505856, 7, 19367920, -503316480, 0, 0, 0, 33554432, 0, 0, 33554432, 268435456, 0, 0, 0, 19376112, -234881024, 0, 0, 50331648, 268435456, 0, 27764720, -234881024, 0, 0, 512, 2048, 0, 0, 1, 2, 4, 32, 524288, 1048576, 524288, 1048576, 33554432, 67108864, 134217728, 805306368, 0, 24, 0, 0, 512, 3072, 16384, 0, 7, 16, 480, 1536, 32768, 1536, 32768, 65536, 2490368, 32768, 65536, 10878976, 16777216, 33554432, 0, 9728, 268435456, 0, 0, 67108866, 12, 64, 128, 512, 1024, 2048, 0, 16, 393216, 0, 0, 393216, 2097152, 16777216, 33554432, 536870912, -1073741824, 0, 0, 10485760, 16777216, 33554432, 1073741824, 0x80000000, 0, 16, 224, 256, 1536, 32768, 65536, 393216, 10485760, 16777216, 131072, 262144, 2097152, 16777216, 32768, 131072, 262144, 2097152, 8388608, 16777216, 0, 0, 4, 16, 224, 512, 32768, 131072, 2097152, 16777216, 192, 32768, 0, 0, 512, 4096, 4, 16, 192, 32768, 8388608, 0, 16, 64, 128, 8388608, 0, 0, 1024, 0, 4, 0, 0, 0, 3145728, 0, 4, 128, 0, 0, 268435456, 2, 0, 0, 65536, 0, 0, 0, 65, 0, 64, 128, 8388608, 16777216, 1073741824, 0, 0, 512, 2048, 32768, 262144, 524288, 8388608, 0, 0, 512, 131072, 524288, 8388608, 33554432, 0x80000000, 33554432, 33554432, 0, 2, 4, 112, 128, -2113929216, 100663296, 100663296, 2, 4, 524288, 134217728, 0, 0, 8, 512, 2048, 196608, 33554436, 0, 0, 33554436, 4224, 4224, 0, 65536, 100663296, 4224, 65536, 65536, 262144, 33554432, 0, 2, 4, 16, 64, 128, 256, 0, 4224, 65536, 16777216, 262400, 65536, 4224, -1072627712, 805306384, -1342177264, -1342177264, -1070006272, -1069989376, -1069989376, -1069989376, -258932720, -258932720, -258932720, -258932720, -1069989360, -1065795072, -1061600768, -1069989376, -225378288, -258932720, -258932720, -258932720, -225378288, 1260767, 1260767, 34815199, 1260767, 1260767, 1260767, 1260767, 34815199, 1260767, 34815199, 34815199, 34815199, 1260767, 1260767, 169032927, 1242774751, -1978450721, 169032927, -1978450721, -1978450721, -1978450721, 169032927, 169032927, 169032927, 169032927, -225231649, -1173144353, -225231649, -225231649, -91013921, 0, 0, 0, 67108864, 0, 3751936, 0, 0, 528, 7946240, 12140544, 0, 0, 0, 134217728, 0, 0, 0, 7, 27756528, -503316480, 0, 0, 9502720, 1610612736, 0, 0, 486539264, 0, 0, 2048, 32768, 0, 0, 64, 128, 0, 0, 536870912, 0, 0, 208, 15360, 1245184, 0, 0, 0, 268435456, 0, 0, 0, 15, 9633792, 0, 0, 0, 32, 512, 2048, 262144, 0, 3670016, 0, 0, 1040, 1040, 1, 2, 12, 80, 128, 7168, 8192, 196608, 16, 64, 128, 3072, 4096, 8192, 65536, 131072, 0, 0, 32, 262144, 524288, 33554432, 134217728, 0, 0, 0, 2, 8, 64, 128, 1024, 4096, 0, 0, 262144, 0, 4096, 4194304, 1, 1, 1, 0, 0, 2, 8, 16, 64\n];\n\nJSONiqParser.TOKEN =\n[\n  \"(0)\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSection\",\n  \"Wildcard\",\n  \"EQName\",\n  \"URILiteral\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"StringLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"PITarget\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'!='\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$'\",\n  \"'$$'\",\n  \"'%'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"'+'\",\n  \"','\",\n  \"'-'\",\n  \"'-->'\",\n  \"'.'\",\n  \"'..'\",\n  \"'/'\",\n  \"'//'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"'::'\",\n  \"':='\",\n  \"';'\",\n  \"'<'\",\n  \"'<!--'\",\n  \"'</'\",\n  \"'<<'\",\n  \"'<='\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'>='\",\n  \"'>>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'@'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'false'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'jsoniq'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'null'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'select'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'true'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'{|'\",\n  \"'|'\",\n  \"'||'\",\n  \"'|}'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/parsers/XQueryParser.js\":[function(_dereq_,module,exports){\n                                                            var XQueryParser = exports.XQueryParser = function XQueryParser(string, parsingEventHandler)\n                                                            {\n                                                              init(string, parsingEventHandler);\n  var self = this;\n\n  this.ParseException = function(b, e, s, o, x)\n  {\n    var\n      begin = b,\n      end = e,\n      state = s,\n      offending = o,\n      expected = x;\n\n    this.getBegin = function() {return begin;};\n    this.getEnd = function() {return end;};\n    this.getState = function() {return state;};\n    this.getExpected = function() {return expected;};\n    this.getOffending = function() {return offending;};\n\n    this.getMessage = function()\n    {\n      return offending < 0 ? \"lexical analysis failed\" : \"syntax error\";\n    };\n  };\n\n  function init(string, parsingEventHandler)\n  {\n    eventHandler = parsingEventHandler;\n    input = string;\n    size = string.length;\n    reset(0, 0, 0);\n  }\n\n  this.getInput = function()\n  {\n    return input;\n  };\n\n  function reset(l, b, e)\n  {\n            b0 = b; e0 = b;\n    l1 = l; b1 = b; e1 = e;\n    l2 = 0;\n    end = e;\n    ex = -1;\n    memo = {};\n    eventHandler.reset(input);\n  }\n\n  this.getOffendingToken = function(e)\n  {\n    var o = e.getOffending();\n    return o >= 0 ? XQueryParser.TOKEN[o] : null;\n  };\n\n  this.getExpectedTokenSet = function(e)\n  {\n    var expected;\n    if (e.getExpected() < 0)\n    {\n      expected = XQueryParser.getTokenSet(- e.getState());\n    }\n    else\n    {\n      expected = [XQueryParser.TOKEN[e.getExpected()]];\n    }\n    return expected;\n  };\n\n  this.getErrorMessage = function(e)\n  {\n    var tokenSet = this.getExpectedTokenSet(e);\n    var found = this.getOffendingToken(e);\n    var prefix = input.substring(0, e.getBegin());\n    var lines = prefix.split(\"\\n\");\n    var line = lines.length;\n    var column = lines[line - 1].length + 1;\n    var size = e.getEnd() - e.getBegin();\n    return e.getMessage()\n         + (found == null ? \"\" : \", found \" + found)\n         + \"\\nwhile expecting \"\n         + (tokenSet.length == 1 ? tokenSet[0] : (\"[\" + tokenSet.join(\", \") + \"]\"))\n         + \"\\n\"\n         + (size == 0 || found != null ? \"\" : \"after successfully scanning \" + size + \" characters beginning \")\n         + \"at line \" + line + \", column \" + column + \":\\n...\"\n         + input.substring(e.getBegin(), Math.min(input.length, e.getBegin() + 64))\n         + \"...\";\n  };\n\n  this.parse_XQuery = function()\n  {\n    eventHandler.startNonterminal(\"XQuery\", e0);\n    lookahead1W(274);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Module();\n    shift(25);                      // EOF\n    eventHandler.endNonterminal(\"XQuery\", e0);\n  };\n\n  function parse_Module()\n  {\n    eventHandler.startNonterminal(\"Module\", e0);\n    switch (l1)\n    {\n    case 274:                       // 'xquery'\n      lookahead2W(198);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 64274                 // 'xquery' 'encoding'\n     || lk == 134930)               // 'xquery' 'version'\n    {\n      parse_VersionDecl();\n    }\n    lookahead1W(274);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    switch (l1)\n    {\n    case 182:                       // 'module'\n      lookahead2W(193);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 94390:                     // 'module' 'namespace'\n      whitespace();\n      parse_LibraryModule();\n      break;\n    default:\n      whitespace();\n      parse_MainModule();\n    }\n    eventHandler.endNonterminal(\"Module\", e0);\n  }\n\n  function parse_VersionDecl()\n  {\n    eventHandler.startNonterminal(\"VersionDecl\", e0);\n    shift(274);                     // 'xquery'\n    lookahead1W(116);               // S^WS | '(:' | 'encoding' | 'version'\n    switch (l1)\n    {\n    case 125:                       // 'encoding'\n      shift(125);                   // 'encoding'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(263);                   // 'version'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      lookahead1W(109);             // S^WS | '(:' | ';' | 'encoding'\n      if (l1 == 125)                // 'encoding'\n      {\n        shift(125);                 // 'encoding'\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n    }\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"VersionDecl\", e0);\n  }\n\n  function parse_LibraryModule()\n  {\n    eventHandler.startNonterminal(\"LibraryModule\", e0);\n    parse_ModuleDecl();\n    lookahead1W(138);               // S^WS | EOF | '(:' | 'declare' | 'import'\n    whitespace();\n    parse_Prolog();\n    eventHandler.endNonterminal(\"LibraryModule\", e0);\n  }\n\n  function parse_ModuleDecl()\n  {\n    eventHandler.startNonterminal(\"ModuleDecl\", e0);\n    shift(182);                     // 'module'\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shift(184);                     // 'namespace'\n    lookahead1W(248);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NCName();\n    lookahead1W(29);                // S^WS | '(:' | '='\n    shift(60);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    whitespace();\n    parse_Separator();\n    eventHandler.endNonterminal(\"ModuleDecl\", e0);\n  }\n\n  function parse_Prolog()\n  {\n    eventHandler.startNonterminal(\"Prolog\", e0);\n    for (;;)\n    {\n      lookahead1W(274);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(213);           // S^WS | EOF | '!' | '!=' | '#' | '%' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 153:                     // 'import'\n        lookahead2W(201);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 42604               // 'declare' 'base-uri'\n       && lk != 43628               // 'declare' 'boundary-space'\n       && lk != 50284               // 'declare' 'construction'\n       && lk != 53356               // 'declare' 'copy-namespaces'\n       && lk != 54380               // 'declare' 'decimal-format'\n       && lk != 55916               // 'declare' 'default'\n       && lk != 72300               // 'declare' 'ft-option'\n       && lk != 93337               // 'import' 'module'\n       && lk != 94316               // 'declare' 'namespace'\n       && lk != 104044              // 'declare' 'ordering'\n       && lk != 113772              // 'declare' 'revalidation'\n       && lk != 115353)             // 'import' 'schema'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(178);           // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 55916)              // 'declare' 'default'\n      {\n        lk = memoized(0, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_DefaultNamespaceDecl();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(0, e0, lk);\n        }\n      }\n      switch (lk)\n      {\n      case -1:\n        whitespace();\n        parse_DefaultNamespaceDecl();\n        break;\n      case 94316:                   // 'declare' 'namespace'\n        whitespace();\n        parse_NamespaceDecl();\n        break;\n      case 153:                     // 'import'\n        whitespace();\n        parse_Import();\n        break;\n      case 72300:                   // 'declare' 'ft-option'\n        whitespace();\n        parse_FTOptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_Setter();\n      }\n      lookahead1W(28);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    for (;;)\n    {\n      lookahead1W(274);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(210);           // S^WS | EOF | '!' | '!=' | '#' | '%' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 16492               // 'declare' '%'\n       && lk != 48748               // 'declare' 'collection'\n       && lk != 51820               // 'declare' 'context'\n       && lk != 74348               // 'declare' 'function'\n       && lk != 79468               // 'declare' 'index'\n       && lk != 82540               // 'declare' 'integrity'\n       && lk != 101996              // 'declare' 'option'\n       && lk != 131692              // 'declare' 'updating'\n       && lk != 134252)             // 'declare' 'variable'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 108:                     // 'declare'\n        lookahead2W(175);           // S^WS | '%' | '(:' | 'collection' | 'context' | 'function' | 'index' |\n        break;\n      default:\n        lk = l1;\n      }\n      switch (lk)\n      {\n      case 51820:                   // 'declare' 'context'\n        whitespace();\n        parse_ContextItemDecl();\n        break;\n      case 101996:                  // 'declare' 'option'\n        whitespace();\n        parse_OptionDecl();\n        break;\n      default:\n        whitespace();\n        parse_AnnotatedDecl();\n      }\n      lookahead1W(28);              // S^WS | '(:' | ';'\n      whitespace();\n      parse_Separator();\n    }\n    eventHandler.endNonterminal(\"Prolog\", e0);\n  }\n\n  function parse_Separator()\n  {\n    eventHandler.startNonterminal(\"Separator\", e0);\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"Separator\", e0);\n  }\n\n  function parse_Setter()\n  {\n    eventHandler.startNonterminal(\"Setter\", e0);\n    switch (l1)\n    {\n    case 108:                       // 'declare'\n      lookahead2W(172);             // S^WS | '(:' | 'base-uri' | 'boundary-space' | 'construction' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 55916)                // 'declare' 'default'\n    {\n      lk = memoized(1, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_DefaultCollationDecl();\n          lk = -2;\n        }\n        catch (p2A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_EmptyOrderDecl();\n            lk = -6;\n          }\n          catch (p6A)\n          {\n            lk = -9;\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(1, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 43628:                     // 'declare' 'boundary-space'\n      parse_BoundarySpaceDecl();\n      break;\n    case -2:\n      parse_DefaultCollationDecl();\n      break;\n    case 42604:                     // 'declare' 'base-uri'\n      parse_BaseURIDecl();\n      break;\n    case 50284:                     // 'declare' 'construction'\n      parse_ConstructionDecl();\n      break;\n    case 104044:                    // 'declare' 'ordering'\n      parse_OrderingModeDecl();\n      break;\n    case -6:\n      parse_EmptyOrderDecl();\n      break;\n    case 113772:                    // 'declare' 'revalidation'\n      parse_RevalidationDecl();\n      break;\n    case 53356:                     // 'declare' 'copy-namespaces'\n      parse_CopyNamespacesDecl();\n      break;\n    default:\n      parse_DecimalFormatDecl();\n    }\n    eventHandler.endNonterminal(\"Setter\", e0);\n  }\n\n  function parse_BoundarySpaceDecl()\n  {\n    eventHandler.startNonterminal(\"BoundarySpaceDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(33);                // S^WS | '(:' | 'boundary-space'\n    shift(85);                      // 'boundary-space'\n    lookahead1W(133);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 214:                       // 'preserve'\n      shift(214);                   // 'preserve'\n      break;\n    default:\n      shift(241);                   // 'strip'\n    }\n    eventHandler.endNonterminal(\"BoundarySpaceDecl\", e0);\n  }\n\n  function parse_DefaultCollationDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultCollationDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shift(109);                     // 'default'\n    lookahead1W(38);                // S^WS | '(:' | 'collation'\n    shift(94);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultCollationDecl\", e0);\n  }\n\n  function try_DefaultCollationDecl()\n  {\n    shiftT(108);                    // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shiftT(109);                    // 'default'\n    lookahead1W(38);                // S^WS | '(:' | 'collation'\n    shiftT(94);                     // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_BaseURIDecl()\n  {\n    eventHandler.startNonterminal(\"BaseURIDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(32);                // S^WS | '(:' | 'base-uri'\n    shift(83);                      // 'base-uri'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"BaseURIDecl\", e0);\n  }\n\n  function parse_ConstructionDecl()\n  {\n    eventHandler.startNonterminal(\"ConstructionDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(41);                // S^WS | '(:' | 'construction'\n    shift(98);                      // 'construction'\n    lookahead1W(133);               // S^WS | '(:' | 'preserve' | 'strip'\n    switch (l1)\n    {\n    case 241:                       // 'strip'\n      shift(241);                   // 'strip'\n      break;\n    default:\n      shift(214);                   // 'preserve'\n    }\n    eventHandler.endNonterminal(\"ConstructionDecl\", e0);\n  }\n\n  function parse_OrderingModeDecl()\n  {\n    eventHandler.startNonterminal(\"OrderingModeDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(68);                // S^WS | '(:' | 'ordering'\n    shift(203);                     // 'ordering'\n    lookahead1W(131);               // S^WS | '(:' | 'ordered' | 'unordered'\n    switch (l1)\n    {\n    case 202:                       // 'ordered'\n      shift(202);                   // 'ordered'\n      break;\n    default:\n      shift(256);                   // 'unordered'\n    }\n    eventHandler.endNonterminal(\"OrderingModeDecl\", e0);\n  }\n\n  function parse_EmptyOrderDecl()\n  {\n    eventHandler.startNonterminal(\"EmptyOrderDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shift(109);                     // 'default'\n    lookahead1W(67);                // S^WS | '(:' | 'order'\n    shift(201);                     // 'order'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shift(123);                     // 'empty'\n    lookahead1W(121);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 147:                       // 'greatest'\n      shift(147);                   // 'greatest'\n      break;\n    default:\n      shift(173);                   // 'least'\n    }\n    eventHandler.endNonterminal(\"EmptyOrderDecl\", e0);\n  }\n\n  function try_EmptyOrderDecl()\n  {\n    shiftT(108);                    // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shiftT(109);                    // 'default'\n    lookahead1W(67);                // S^WS | '(:' | 'order'\n    shiftT(201);                    // 'order'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shiftT(123);                    // 'empty'\n    lookahead1W(121);               // S^WS | '(:' | 'greatest' | 'least'\n    switch (l1)\n    {\n    case 147:                       // 'greatest'\n      shiftT(147);                  // 'greatest'\n      break;\n    default:\n      shiftT(173);                  // 'least'\n    }\n  }\n\n  function parse_CopyNamespacesDecl()\n  {\n    eventHandler.startNonterminal(\"CopyNamespacesDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(44);                // S^WS | '(:' | 'copy-namespaces'\n    shift(104);                     // 'copy-namespaces'\n    lookahead1W(128);               // S^WS | '(:' | 'no-preserve' | 'preserve'\n    whitespace();\n    parse_PreserveMode();\n    lookahead1W(25);                // S^WS | '(:' | ','\n    shift(41);                      // ','\n    lookahead1W(123);               // S^WS | '(:' | 'inherit' | 'no-inherit'\n    whitespace();\n    parse_InheritMode();\n    eventHandler.endNonterminal(\"CopyNamespacesDecl\", e0);\n  }\n\n  function parse_PreserveMode()\n  {\n    eventHandler.startNonterminal(\"PreserveMode\", e0);\n    switch (l1)\n    {\n    case 214:                       // 'preserve'\n      shift(214);                   // 'preserve'\n      break;\n    default:\n      shift(190);                   // 'no-preserve'\n    }\n    eventHandler.endNonterminal(\"PreserveMode\", e0);\n  }\n\n  function parse_InheritMode()\n  {\n    eventHandler.startNonterminal(\"InheritMode\", e0);\n    switch (l1)\n    {\n    case 157:                       // 'inherit'\n      shift(157);                   // 'inherit'\n      break;\n    default:\n      shift(189);                   // 'no-inherit'\n    }\n    eventHandler.endNonterminal(\"InheritMode\", e0);\n  }\n\n  function parse_DecimalFormatDecl()\n  {\n    eventHandler.startNonterminal(\"DecimalFormatDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(114);               // S^WS | '(:' | 'decimal-format' | 'default'\n    switch (l1)\n    {\n    case 106:                       // 'decimal-format'\n      shift(106);                   // 'decimal-format'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_EQName();\n      break;\n    default:\n      shift(109);                   // 'default'\n      lookahead1W(45);              // S^WS | '(:' | 'decimal-format'\n      shift(106);                   // 'decimal-format'\n    }\n    for (;;)\n    {\n      lookahead1W(180);             // S^WS | '(:' | ';' | 'NaN' | 'decimal-separator' | 'digit' |\n      if (l1 == 53)                 // ';'\n      {\n        break;\n      }\n      whitespace();\n      parse_DFPropertyName();\n      lookahead1W(29);              // S^WS | '(:' | '='\n      shift(60);                    // '='\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    eventHandler.endNonterminal(\"DecimalFormatDecl\", e0);\n  }\n\n  function parse_DFPropertyName()\n  {\n    eventHandler.startNonterminal(\"DFPropertyName\", e0);\n    switch (l1)\n    {\n    case 107:                       // 'decimal-separator'\n      shift(107);                   // 'decimal-separator'\n      break;\n    case 149:                       // 'grouping-separator'\n      shift(149);                   // 'grouping-separator'\n      break;\n    case 156:                       // 'infinity'\n      shift(156);                   // 'infinity'\n      break;\n    case 179:                       // 'minus-sign'\n      shift(179);                   // 'minus-sign'\n      break;\n    case 67:                        // 'NaN'\n      shift(67);                    // 'NaN'\n      break;\n    case 209:                       // 'percent'\n      shift(209);                   // 'percent'\n      break;\n    case 208:                       // 'per-mille'\n      shift(208);                   // 'per-mille'\n      break;\n    case 275:                       // 'zero-digit'\n      shift(275);                   // 'zero-digit'\n      break;\n    case 116:                       // 'digit'\n      shift(116);                   // 'digit'\n      break;\n    default:\n      shift(207);                   // 'pattern-separator'\n    }\n    eventHandler.endNonterminal(\"DFPropertyName\", e0);\n  }\n\n  function parse_Import()\n  {\n    eventHandler.startNonterminal(\"Import\", e0);\n    switch (l1)\n    {\n    case 153:                       // 'import'\n      lookahead2W(126);             // S^WS | '(:' | 'module' | 'schema'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 115353:                    // 'import' 'schema'\n      parse_SchemaImport();\n      break;\n    default:\n      parse_ModuleImport();\n    }\n    eventHandler.endNonterminal(\"Import\", e0);\n  }\n\n  function parse_SchemaImport()\n  {\n    eventHandler.startNonterminal(\"SchemaImport\", e0);\n    shift(153);                     // 'import'\n    lookahead1W(73);                // S^WS | '(:' | 'schema'\n    shift(225);                     // 'schema'\n    lookahead1W(137);               // URILiteral | S^WS | '(:' | 'default' | 'namespace'\n    if (l1 != 7)                    // URILiteral\n    {\n      whitespace();\n      parse_SchemaPrefix();\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(108);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 81)                   // 'at'\n    {\n      shift(81);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(103);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"SchemaImport\", e0);\n  }\n\n  function parse_SchemaPrefix()\n  {\n    eventHandler.startNonterminal(\"SchemaPrefix\", e0);\n    switch (l1)\n    {\n    case 184:                       // 'namespace'\n      shift(184);                   // 'namespace'\n      lookahead1W(248);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NCName();\n      lookahead1W(29);              // S^WS | '(:' | '='\n      shift(60);                    // '='\n      break;\n    default:\n      shift(109);                   // 'default'\n      lookahead1W(47);              // S^WS | '(:' | 'element'\n      shift(121);                   // 'element'\n      lookahead1W(61);              // S^WS | '(:' | 'namespace'\n      shift(184);                   // 'namespace'\n    }\n    eventHandler.endNonterminal(\"SchemaPrefix\", e0);\n  }\n\n  function parse_ModuleImport()\n  {\n    eventHandler.startNonterminal(\"ModuleImport\", e0);\n    shift(153);                     // 'import'\n    lookahead1W(60);                // S^WS | '(:' | 'module'\n    shift(182);                     // 'module'\n    lookahead1W(90);                // URILiteral | S^WS | '(:' | 'namespace'\n    if (l1 == 184)                  // 'namespace'\n    {\n      shift(184);                   // 'namespace'\n      lookahead1W(248);             // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NCName();\n      lookahead1W(29);              // S^WS | '(:' | '='\n      shift(60);                    // '='\n    }\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(108);               // S^WS | '(:' | ';' | 'at'\n    if (l1 == 81)                   // 'at'\n    {\n      shift(81);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      for (;;)\n      {\n        lookahead1W(103);           // S^WS | '(:' | ',' | ';'\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n    }\n    eventHandler.endNonterminal(\"ModuleImport\", e0);\n  }\n\n  function parse_NamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"NamespaceDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shift(184);                     // 'namespace'\n    lookahead1W(248);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NCName();\n    lookahead1W(29);                // S^WS | '(:' | '='\n    shift(60);                      // '='\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"NamespaceDecl\", e0);\n  }\n\n  function parse_DefaultNamespaceDecl()\n  {\n    eventHandler.startNonterminal(\"DefaultNamespaceDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shift(109);                     // 'default'\n    lookahead1W(115);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 121:                       // 'element'\n      shift(121);                   // 'element'\n      break;\n    default:\n      shift(145);                   // 'function'\n    }\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shift(184);                     // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"DefaultNamespaceDecl\", e0);\n  }\n\n  function try_DefaultNamespaceDecl()\n  {\n    shiftT(108);                    // 'declare'\n    lookahead1W(46);                // S^WS | '(:' | 'default'\n    shiftT(109);                    // 'default'\n    lookahead1W(115);               // S^WS | '(:' | 'element' | 'function'\n    switch (l1)\n    {\n    case 121:                       // 'element'\n      shiftT(121);                  // 'element'\n      break;\n    default:\n      shiftT(145);                  // 'function'\n    }\n    lookahead1W(61);                // S^WS | '(:' | 'namespace'\n    shiftT(184);                    // 'namespace'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n  }\n\n  function parse_FTOptionDecl()\n  {\n    eventHandler.startNonterminal(\"FTOptionDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(52);                // S^WS | '(:' | 'ft-option'\n    shift(141);                     // 'ft-option'\n    lookahead1W(81);                // S^WS | '(:' | 'using'\n    whitespace();\n    parse_FTMatchOptions();\n    eventHandler.endNonterminal(\"FTOptionDecl\", e0);\n  }\n\n  function parse_AnnotatedDecl()\n  {\n    eventHandler.startNonterminal(\"AnnotatedDecl\", e0);\n    shift(108);                     // 'declare'\n    for (;;)\n    {\n      lookahead1W(170);             // S^WS | '%' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n      if (l1 != 32                  // '%'\n       && l1 != 257)                // 'updating'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 257:                     // 'updating'\n        whitespace();\n        parse_CompatibilityAnnotation();\n        break;\n      default:\n        whitespace();\n        parse_Annotation();\n      }\n    }\n    switch (l1)\n    {\n    case 262:                       // 'variable'\n      whitespace();\n      parse_VarDecl();\n      break;\n    case 145:                       // 'function'\n      whitespace();\n      parse_FunctionDecl();\n      break;\n    case 95:                        // 'collection'\n      whitespace();\n      parse_CollectionDecl();\n      break;\n    case 155:                       // 'index'\n      whitespace();\n      parse_IndexDecl();\n      break;\n    default:\n      whitespace();\n      parse_ICDecl();\n    }\n    eventHandler.endNonterminal(\"AnnotatedDecl\", e0);\n  }\n\n  function parse_CompatibilityAnnotation()\n  {\n    eventHandler.startNonterminal(\"CompatibilityAnnotation\", e0);\n    shift(257);                     // 'updating'\n    eventHandler.endNonterminal(\"CompatibilityAnnotation\", e0);\n  }\n\n  function parse_Annotation()\n  {\n    eventHandler.startNonterminal(\"Annotation\", e0);\n    shift(32);                      // '%'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(171);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n    if (l1 == 34)                   // '('\n    {\n      shift(34);                    // '('\n      lookahead1W(154);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n      whitespace();\n      parse_Literal();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(154);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n        whitespace();\n        parse_Literal();\n      }\n      shift(37);                    // ')'\n    }\n    eventHandler.endNonterminal(\"Annotation\", e0);\n  }\n\n  function try_Annotation()\n  {\n    shiftT(32);                     // '%'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(171);               // S^WS | '%' | '(' | '(:' | 'collection' | 'function' | 'index' | 'integrity' |\n    if (l1 == 34)                   // '('\n    {\n      shiftT(34);                   // '('\n      lookahead1W(154);             // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n      try_Literal();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(154);           // IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral | S^WS | '(:'\n        try_Literal();\n      }\n      shiftT(37);                   // ')'\n    }\n  }\n\n  function parse_VarDecl()\n  {\n    eventHandler.startNonterminal(\"VarDecl\", e0);\n    shift(262);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(147);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(106);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 52:                        // ':='\n      shift(52);                    // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(133);                   // 'external'\n      lookahead1W(104);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"VarDecl\", e0);\n  }\n\n  function parse_VarValue()\n  {\n    eventHandler.startNonterminal(\"VarValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarValue\", e0);\n  }\n\n  function parse_VarDefaultValue()\n  {\n    eventHandler.startNonterminal(\"VarDefaultValue\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"VarDefaultValue\", e0);\n  }\n\n  function parse_ContextItemDecl()\n  {\n    eventHandler.startNonterminal(\"ContextItemDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(43);                // S^WS | '(:' | 'context'\n    shift(101);                     // 'context'\n    lookahead1W(55);                // S^WS | '(:' | 'item'\n    shift(165);                     // 'item'\n    lookahead1W(147);               // S^WS | '(:' | ':=' | 'as' | 'external'\n    if (l1 == 79)                   // 'as'\n    {\n      shift(79);                    // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_ItemType();\n    }\n    lookahead1W(106);               // S^WS | '(:' | ':=' | 'external'\n    switch (l1)\n    {\n    case 52:                        // ':='\n      shift(52);                    // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_VarValue();\n      break;\n    default:\n      shift(133);                   // 'external'\n      lookahead1W(104);             // S^WS | '(:' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_VarDefaultValue();\n      }\n    }\n    eventHandler.endNonterminal(\"ContextItemDecl\", e0);\n  }\n\n  function parse_ParamList()\n  {\n    eventHandler.startNonterminal(\"ParamList\", e0);\n    parse_Param();\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_Param();\n    }\n    eventHandler.endNonterminal(\"ParamList\", e0);\n  }\n\n  function try_ParamList()\n  {\n    try_Param();\n    for (;;)\n    {\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_Param();\n    }\n  }\n\n  function parse_Param()\n  {\n    eventHandler.startNonterminal(\"Param\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(143);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    eventHandler.endNonterminal(\"Param\", e0);\n  }\n\n  function try_Param()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(143);               // S^WS | '(:' | ')' | ',' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n  }\n\n  function parse_FunctionBody()\n  {\n    eventHandler.startNonterminal(\"FunctionBody\", e0);\n    parse_EnclosedExpr();\n    eventHandler.endNonterminal(\"FunctionBody\", e0);\n  }\n\n  function try_FunctionBody()\n  {\n    try_EnclosedExpr();\n  }\n\n  function parse_EnclosedExpr()\n  {\n    eventHandler.startNonterminal(\"EnclosedExpr\", e0);\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"EnclosedExpr\", e0);\n  }\n\n  function try_EnclosedExpr()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_OptionDecl()\n  {\n    eventHandler.startNonterminal(\"OptionDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(66);                // S^WS | '(:' | 'option'\n    shift(199);                     // 'option'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"OptionDecl\", e0);\n  }\n\n  function parse_Expr()\n  {\n    eventHandler.startNonterminal(\"Expr\", e0);\n    parse_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Expr\", e0);\n  }\n\n  function try_Expr()\n  {\n    try_ExprSingle();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n    }\n  }\n\n  function parse_FLWORExpr()\n  {\n    eventHandler.startNonterminal(\"FLWORExpr\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnClause();\n    eventHandler.endNonterminal(\"FLWORExpr\", e0);\n  }\n\n  function try_FLWORExpr()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnClause();\n  }\n\n  function parse_InitialClause()\n  {\n    eventHandler.startNonterminal(\"InitialClause\", e0);\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(141);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n      parse_ForClause();\n      break;\n    case 174:                       // 'let'\n      parse_LetClause();\n      break;\n    default:\n      parse_WindowClause();\n    }\n    eventHandler.endNonterminal(\"InitialClause\", e0);\n  }\n\n  function try_InitialClause()\n  {\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(141);             // S^WS | '$' | '(:' | 'sliding' | 'tumbling'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n      try_ForClause();\n      break;\n    case 174:                       // 'let'\n      try_LetClause();\n      break;\n    default:\n      try_WindowClause();\n    }\n  }\n\n  function parse_IntermediateClause()\n  {\n    eventHandler.startNonterminal(\"IntermediateClause\", e0);\n    switch (l1)\n    {\n    case 137:                       // 'for'\n    case 174:                       // 'let'\n      parse_InitialClause();\n      break;\n    case 266:                       // 'where'\n      parse_WhereClause();\n      break;\n    case 148:                       // 'group'\n      parse_GroupByClause();\n      break;\n    case 105:                       // 'count'\n      parse_CountClause();\n      break;\n    default:\n      parse_OrderByClause();\n    }\n    eventHandler.endNonterminal(\"IntermediateClause\", e0);\n  }\n\n  function try_IntermediateClause()\n  {\n    switch (l1)\n    {\n    case 137:                       // 'for'\n    case 174:                       // 'let'\n      try_InitialClause();\n      break;\n    case 266:                       // 'where'\n      try_WhereClause();\n      break;\n    case 148:                       // 'group'\n      try_GroupByClause();\n      break;\n    case 105:                       // 'count'\n      try_CountClause();\n      break;\n    default:\n      try_OrderByClause();\n    }\n  }\n\n  function parse_ForClause()\n  {\n    eventHandler.startNonterminal(\"ForClause\", e0);\n    shift(137);                     // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_ForBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_ForBinding();\n    }\n    eventHandler.endNonterminal(\"ForClause\", e0);\n  }\n\n  function try_ForClause()\n  {\n    shiftT(137);                    // 'for'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_ForBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_ForBinding();\n    }\n  }\n\n  function parse_ForBinding()\n  {\n    eventHandler.startNonterminal(\"ForBinding\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(164);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(158);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 72)                   // 'allowing'\n    {\n      whitespace();\n      parse_AllowingEmpty();\n    }\n    lookahead1W(150);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 81)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(122);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 228)                  // 'score'\n    {\n      whitespace();\n      parse_FTScoreVar();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ForBinding\", e0);\n  }\n\n  function try_ForBinding()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(164);               // S^WS | '(:' | 'allowing' | 'as' | 'at' | 'in' | 'score'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(158);               // S^WS | '(:' | 'allowing' | 'at' | 'in' | 'score'\n    if (l1 == 72)                   // 'allowing'\n    {\n      try_AllowingEmpty();\n    }\n    lookahead1W(150);               // S^WS | '(:' | 'at' | 'in' | 'score'\n    if (l1 == 81)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(122);               // S^WS | '(:' | 'in' | 'score'\n    if (l1 == 228)                  // 'score'\n    {\n      try_FTScoreVar();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_AllowingEmpty()\n  {\n    eventHandler.startNonterminal(\"AllowingEmpty\", e0);\n    shift(72);                      // 'allowing'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shift(123);                     // 'empty'\n    eventHandler.endNonterminal(\"AllowingEmpty\", e0);\n  }\n\n  function try_AllowingEmpty()\n  {\n    shiftT(72);                     // 'allowing'\n    lookahead1W(49);                // S^WS | '(:' | 'empty'\n    shiftT(123);                    // 'empty'\n  }\n\n  function parse_PositionalVar()\n  {\n    eventHandler.startNonterminal(\"PositionalVar\", e0);\n    shift(81);                      // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"PositionalVar\", e0);\n  }\n\n  function try_PositionalVar()\n  {\n    shiftT(81);                     // 'at'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_FTScoreVar()\n  {\n    eventHandler.startNonterminal(\"FTScoreVar\", e0);\n    shift(228);                     // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"FTScoreVar\", e0);\n  }\n\n  function try_FTScoreVar()\n  {\n    shiftT(228);                    // 'score'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_LetClause()\n  {\n    eventHandler.startNonterminal(\"LetClause\", e0);\n    shift(174);                     // 'let'\n    lookahead1W(96);                // S^WS | '$' | '(:' | 'score'\n    whitespace();\n    parse_LetBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(96);              // S^WS | '$' | '(:' | 'score'\n      whitespace();\n      parse_LetBinding();\n    }\n    eventHandler.endNonterminal(\"LetClause\", e0);\n  }\n\n  function try_LetClause()\n  {\n    shiftT(174);                    // 'let'\n    lookahead1W(96);                // S^WS | '$' | '(:' | 'score'\n    try_LetBinding();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(96);              // S^WS | '$' | '(:' | 'score'\n      try_LetBinding();\n    }\n  }\n\n  function parse_LetBinding()\n  {\n    eventHandler.startNonterminal(\"LetBinding\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(105);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      break;\n    default:\n      parse_FTScoreVar();\n    }\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shift(52);                      // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"LetBinding\", e0);\n  }\n\n  function try_LetBinding()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(105);             // S^WS | '(:' | ':=' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      break;\n    default:\n      try_FTScoreVar();\n    }\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shiftT(52);                     // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowClause()\n  {\n    eventHandler.startNonterminal(\"WindowClause\", e0);\n    shift(137);                     // 'for'\n    lookahead1W(135);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 251:                       // 'tumbling'\n      whitespace();\n      parse_TumblingWindowClause();\n      break;\n    default:\n      whitespace();\n      parse_SlidingWindowClause();\n    }\n    eventHandler.endNonterminal(\"WindowClause\", e0);\n  }\n\n  function try_WindowClause()\n  {\n    shiftT(137);                    // 'for'\n    lookahead1W(135);               // S^WS | '(:' | 'sliding' | 'tumbling'\n    switch (l1)\n    {\n    case 251:                       // 'tumbling'\n      try_TumblingWindowClause();\n      break;\n    default:\n      try_SlidingWindowClause();\n    }\n  }\n\n  function parse_TumblingWindowClause()\n  {\n    eventHandler.startNonterminal(\"TumblingWindowClause\", e0);\n    shift(251);                     // 'tumbling'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shift(269);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    if (l1 == 126                   // 'end'\n     || l1 == 198)                  // 'only'\n    {\n      whitespace();\n      parse_WindowEndCondition();\n    }\n    eventHandler.endNonterminal(\"TumblingWindowClause\", e0);\n  }\n\n  function try_TumblingWindowClause()\n  {\n    shiftT(251);                    // 'tumbling'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shiftT(269);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    try_WindowStartCondition();\n    if (l1 == 126                   // 'end'\n     || l1 == 198)                  // 'only'\n    {\n      try_WindowEndCondition();\n    }\n  }\n\n  function parse_SlidingWindowClause()\n  {\n    eventHandler.startNonterminal(\"SlidingWindowClause\", e0);\n    shift(234);                     // 'sliding'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shift(269);                     // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    whitespace();\n    parse_WindowStartCondition();\n    whitespace();\n    parse_WindowEndCondition();\n    eventHandler.endNonterminal(\"SlidingWindowClause\", e0);\n  }\n\n  function try_SlidingWindowClause()\n  {\n    shiftT(234);                    // 'sliding'\n    lookahead1W(85);                // S^WS | '(:' | 'window'\n    shiftT(269);                    // 'window'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    try_WindowStartCondition();\n    try_WindowEndCondition();\n  }\n\n  function parse_WindowStartCondition()\n  {\n    eventHandler.startNonterminal(\"WindowStartCondition\", e0);\n    shift(237);                     // 'start'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shift(265);                     // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowStartCondition\", e0);\n  }\n\n  function try_WindowStartCondition()\n  {\n    shiftT(237);                    // 'start'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shiftT(265);                    // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowEndCondition()\n  {\n    eventHandler.startNonterminal(\"WindowEndCondition\", e0);\n    if (l1 == 198)                  // 'only'\n    {\n      shift(198);                   // 'only'\n    }\n    lookahead1W(50);                // S^WS | '(:' | 'end'\n    shift(126);                     // 'end'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    whitespace();\n    parse_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shift(265);                     // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WindowEndCondition\", e0);\n  }\n\n  function try_WindowEndCondition()\n  {\n    if (l1 == 198)                  // 'only'\n    {\n      shiftT(198);                  // 'only'\n    }\n    lookahead1W(50);                // S^WS | '(:' | 'end'\n    shiftT(126);                    // 'end'\n    lookahead1W(163);               // S^WS | '$' | '(:' | 'at' | 'next' | 'previous' | 'when'\n    try_WindowVars();\n    lookahead1W(83);                // S^WS | '(:' | 'when'\n    shiftT(265);                    // 'when'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_WindowVars()\n  {\n    eventHandler.startNonterminal(\"WindowVars\", e0);\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_CurrentItem();\n    }\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 81)                   // 'at'\n    {\n      whitespace();\n      parse_PositionalVar();\n    }\n    lookahead1W(153);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 215)                  // 'previous'\n    {\n      shift(215);                   // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_PreviousItem();\n    }\n    lookahead1W(127);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 187)                  // 'next'\n    {\n      shift(187);                   // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NextItem();\n    }\n    eventHandler.endNonterminal(\"WindowVars\", e0);\n  }\n\n  function try_WindowVars()\n  {\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_CurrentItem();\n    }\n    lookahead1W(159);               // S^WS | '(:' | 'at' | 'next' | 'previous' | 'when'\n    if (l1 == 81)                   // 'at'\n    {\n      try_PositionalVar();\n    }\n    lookahead1W(153);               // S^WS | '(:' | 'next' | 'previous' | 'when'\n    if (l1 == 215)                  // 'previous'\n    {\n      shiftT(215);                  // 'previous'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_PreviousItem();\n    }\n    lookahead1W(127);               // S^WS | '(:' | 'next' | 'when'\n    if (l1 == 187)                  // 'next'\n    {\n      shiftT(187);                  // 'next'\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NextItem();\n    }\n  }\n\n  function parse_CurrentItem()\n  {\n    eventHandler.startNonterminal(\"CurrentItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"CurrentItem\", e0);\n  }\n\n  function try_CurrentItem()\n  {\n    try_EQName();\n  }\n\n  function parse_PreviousItem()\n  {\n    eventHandler.startNonterminal(\"PreviousItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"PreviousItem\", e0);\n  }\n\n  function try_PreviousItem()\n  {\n    try_EQName();\n  }\n\n  function parse_NextItem()\n  {\n    eventHandler.startNonterminal(\"NextItem\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"NextItem\", e0);\n  }\n\n  function try_NextItem()\n  {\n    try_EQName();\n  }\n\n  function parse_CountClause()\n  {\n    eventHandler.startNonterminal(\"CountClause\", e0);\n    shift(105);                     // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"CountClause\", e0);\n  }\n\n  function try_CountClause()\n  {\n    shiftT(105);                    // 'count'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_WhereClause()\n  {\n    eventHandler.startNonterminal(\"WhereClause\", e0);\n    shift(266);                     // 'where'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"WhereClause\", e0);\n  }\n\n  function try_WhereClause()\n  {\n    shiftT(266);                    // 'where'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_GroupByClause()\n  {\n    eventHandler.startNonterminal(\"GroupByClause\", e0);\n    shift(148);                     // 'group'\n    lookahead1W(34);                // S^WS | '(:' | 'by'\n    shift(87);                      // 'by'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_GroupingSpecList();\n    eventHandler.endNonterminal(\"GroupByClause\", e0);\n  }\n\n  function try_GroupByClause()\n  {\n    shiftT(148);                    // 'group'\n    lookahead1W(34);                // S^WS | '(:' | 'by'\n    shiftT(87);                     // 'by'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_GroupingSpecList();\n  }\n\n  function parse_GroupingSpecList()\n  {\n    eventHandler.startNonterminal(\"GroupingSpecList\", e0);\n    parse_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_GroupingSpec();\n    }\n    eventHandler.endNonterminal(\"GroupingSpecList\", e0);\n  }\n\n  function try_GroupingSpecList()\n  {\n    try_GroupingSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_GroupingSpec();\n    }\n  }\n\n  function parse_GroupingSpec()\n  {\n    eventHandler.startNonterminal(\"GroupingSpec\", e0);\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 35871                 // '$' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 140319)               // '$' 'xquery'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(182);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n          if (l1 == 52              // ':='\n           || l1 == 79)             // 'as'\n          {\n            if (l1 == 79)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(27);        // S^WS | '(:' | ':='\n            shiftT(52);             // ':='\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_ExprSingle();\n          }\n          if (l1 == 94)             // 'collation'\n          {\n            shiftT(94);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(2, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      parse_GroupingVariable();\n      lookahead1W(182);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n      if (l1 == 52                  // ':='\n       || l1 == 79)                 // 'as'\n      {\n        if (l1 == 79)               // 'as'\n        {\n          whitespace();\n          parse_TypeDeclaration();\n        }\n        lookahead1W(27);            // S^WS | '(:' | ':='\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n      if (l1 == 94)                 // 'collation'\n      {\n        shift(94);                  // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shift(7);                   // URILiteral\n      }\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"GroupingSpec\", e0);\n  }\n\n  function try_GroupingSpec()\n  {\n    switch (l1)\n    {\n    case 31:                        // '$'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 3103                  // '$' EQName^Token\n     || lk == 35871                 // '$' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 140319)               // '$' 'xquery'\n    {\n      lk = memoized(2, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_GroupingVariable();\n          lookahead1W(182);         // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n          if (l1 == 52              // ':='\n           || l1 == 79)             // 'as'\n          {\n            if (l1 == 79)           // 'as'\n            {\n              try_TypeDeclaration();\n            }\n            lookahead1W(27);        // S^WS | '(:' | ':='\n            shiftT(52);             // ':='\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_ExprSingle();\n          }\n          if (l1 == 94)             // 'collation'\n          {\n            shiftT(94);             // 'collation'\n            lookahead1W(15);        // URILiteral | S^WS | '(:'\n            shiftT(7);              // URILiteral\n          }\n          memoize(2, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(2, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_GroupingVariable();\n      lookahead1W(182);             // S^WS | '(:' | ',' | ':=' | 'as' | 'collation' | 'count' | 'for' | 'group' |\n      if (l1 == 52                  // ':='\n       || l1 == 79)                 // 'as'\n      {\n        if (l1 == 79)               // 'as'\n        {\n          try_TypeDeclaration();\n        }\n        lookahead1W(27);            // S^WS | '(:' | ':='\n        shiftT(52);                 // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n      }\n      if (l1 == 94)                 // 'collation'\n      {\n        shiftT(94);                 // 'collation'\n        lookahead1W(15);            // URILiteral | S^WS | '(:'\n        shiftT(7);                  // URILiteral\n      }\n      break;\n    case -3:\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_GroupingVariable()\n  {\n    eventHandler.startNonterminal(\"GroupingVariable\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"GroupingVariable\", e0);\n  }\n\n  function try_GroupingVariable()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_OrderByClause()\n  {\n    eventHandler.startNonterminal(\"OrderByClause\", e0);\n    switch (l1)\n    {\n    case 201:                       // 'order'\n      shift(201);                   // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shift(87);                    // 'by'\n      break;\n    default:\n      shift(236);                   // 'stable'\n      lookahead1W(67);              // S^WS | '(:' | 'order'\n      shift(201);                   // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shift(87);                    // 'by'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_OrderSpecList();\n    eventHandler.endNonterminal(\"OrderByClause\", e0);\n  }\n\n  function try_OrderByClause()\n  {\n    switch (l1)\n    {\n    case 201:                       // 'order'\n      shiftT(201);                  // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shiftT(87);                   // 'by'\n      break;\n    default:\n      shiftT(236);                  // 'stable'\n      lookahead1W(67);              // S^WS | '(:' | 'order'\n      shiftT(201);                  // 'order'\n      lookahead1W(34);              // S^WS | '(:' | 'by'\n      shiftT(87);                   // 'by'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_OrderSpecList();\n  }\n\n  function parse_OrderSpecList()\n  {\n    eventHandler.startNonterminal(\"OrderSpecList\", e0);\n    parse_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_OrderSpec();\n    }\n    eventHandler.endNonterminal(\"OrderSpecList\", e0);\n  }\n\n  function try_OrderSpecList()\n  {\n    try_OrderSpec();\n    for (;;)\n    {\n      lookahead1W(176);             // S^WS | '(:' | ',' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' |\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_OrderSpec();\n    }\n  }\n\n  function parse_OrderSpec()\n  {\n    eventHandler.startNonterminal(\"OrderSpec\", e0);\n    parse_ExprSingle();\n    whitespace();\n    parse_OrderModifier();\n    eventHandler.endNonterminal(\"OrderSpec\", e0);\n  }\n\n  function try_OrderSpec()\n  {\n    try_ExprSingle();\n    try_OrderModifier();\n  }\n\n  function parse_OrderModifier()\n  {\n    eventHandler.startNonterminal(\"OrderModifier\", e0);\n    if (l1 == 80                    // 'ascending'\n     || l1 == 113)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 80:                      // 'ascending'\n        shift(80);                  // 'ascending'\n        break;\n      default:\n        shift(113);                 // 'descending'\n      }\n    }\n    lookahead1W(179);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n    if (l1 == 123)                  // 'empty'\n    {\n      shift(123);                   // 'empty'\n      lookahead1W(121);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 147:                     // 'greatest'\n        shift(147);                 // 'greatest'\n        break;\n      default:\n        shift(173);                 // 'least'\n      }\n    }\n    lookahead1W(177);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n    if (l1 == 94)                   // 'collation'\n    {\n      shift(94);                    // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n    }\n    eventHandler.endNonterminal(\"OrderModifier\", e0);\n  }\n\n  function try_OrderModifier()\n  {\n    if (l1 == 80                    // 'ascending'\n     || l1 == 113)                  // 'descending'\n    {\n      switch (l1)\n      {\n      case 80:                      // 'ascending'\n        shiftT(80);                 // 'ascending'\n        break;\n      default:\n        shiftT(113);                // 'descending'\n      }\n    }\n    lookahead1W(179);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'empty' | 'for' | 'group' | 'let' |\n    if (l1 == 123)                  // 'empty'\n    {\n      shiftT(123);                  // 'empty'\n      lookahead1W(121);             // S^WS | '(:' | 'greatest' | 'least'\n      switch (l1)\n      {\n      case 147:                     // 'greatest'\n        shiftT(147);                // 'greatest'\n        break;\n      default:\n        shiftT(173);                // 'least'\n      }\n    }\n    lookahead1W(177);               // S^WS | '(:' | ',' | 'collation' | 'count' | 'for' | 'group' | 'let' | 'order' |\n    if (l1 == 94)                   // 'collation'\n    {\n      shiftT(94);                   // 'collation'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n    }\n  }\n\n  function parse_ReturnClause()\n  {\n    eventHandler.startNonterminal(\"ReturnClause\", e0);\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReturnClause\", e0);\n  }\n\n  function try_ReturnClause()\n  {\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedExpr()\n  {\n    eventHandler.startNonterminal(\"QuantifiedExpr\", e0);\n    switch (l1)\n    {\n    case 235:                       // 'some'\n      shift(235);                   // 'some'\n      break;\n    default:\n      shift(129);                   // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_QuantifiedVarDecl();\n    }\n    shift(224);                     // 'satisfies'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedExpr\", e0);\n  }\n\n  function try_QuantifiedExpr()\n  {\n    switch (l1)\n    {\n    case 235:                       // 'some'\n      shiftT(235);                  // 'some'\n      break;\n    default:\n      shiftT(129);                  // 'every'\n    }\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_QuantifiedVarDecl();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_QuantifiedVarDecl();\n    }\n    shiftT(224);                    // 'satisfies'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_QuantifiedVarDecl()\n  {\n    eventHandler.startNonterminal(\"QuantifiedVarDecl\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shift(154);                     // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"QuantifiedVarDecl\", e0);\n  }\n\n  function try_QuantifiedVarDecl()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(110);               // S^WS | '(:' | 'as' | 'in'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(53);                // S^WS | '(:' | 'in'\n    shiftT(154);                    // 'in'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchExpr()\n  {\n    eventHandler.startNonterminal(\"SwitchExpr\", e0);\n    shift(243);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchExpr\", e0);\n  }\n\n  function try_SwitchExpr()\n  {\n    shiftT(243);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_SwitchCaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseClause()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseClause\", e0);\n    for (;;)\n    {\n      shift(88);                    // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseClause\", e0);\n  }\n\n  function try_SwitchCaseClause()\n  {\n    for (;;)\n    {\n      shiftT(88);                   // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SwitchCaseOperand()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseOperand\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SwitchCaseOperand\", e0);\n  }\n\n  function try_SwitchCaseOperand()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TypeswitchExpr()\n  {\n    eventHandler.startNonterminal(\"TypeswitchExpr\", e0);\n    shift(253);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TypeswitchExpr\", e0);\n  }\n\n  function try_TypeswitchExpr()\n  {\n    shiftT(253);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_CaseClause();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_CaseClause()\n  {\n    eventHandler.startNonterminal(\"CaseClause\", e0);\n    shift(88);                      // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceTypeUnion();\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"CaseClause\", e0);\n  }\n\n  function try_CaseClause()\n  {\n    shiftT(88);                     // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceTypeUnion();\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_SequenceTypeUnion()\n  {\n    eventHandler.startNonterminal(\"SequenceTypeUnion\", e0);\n    parse_SequenceType();\n    for (;;)\n    {\n      lookahead1W(134);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shift(279);                   // '|'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"SequenceTypeUnion\", e0);\n  }\n\n  function try_SequenceTypeUnion()\n  {\n    try_SequenceType();\n    for (;;)\n    {\n      lookahead1W(134);             // S^WS | '(:' | 'return' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shiftT(279);                  // '|'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_IfExpr()\n  {\n    eventHandler.startNonterminal(\"IfExpr\", e0);\n    shift(152);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shift(245);                     // 'then'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(122);                     // 'else'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"IfExpr\", e0);\n  }\n\n  function try_IfExpr()\n  {\n    shiftT(152);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shiftT(245);                    // 'then'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(122);                    // 'else'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_TryCatchExpr()\n  {\n    eventHandler.startNonterminal(\"TryCatchExpr\", e0);\n    parse_TryClause();\n    for (;;)\n    {\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      whitespace();\n      parse_CatchClause();\n      lookahead1W(183);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n      if (l1 != 91)                 // 'catch'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchExpr\", e0);\n  }\n\n  function try_TryCatchExpr()\n  {\n    try_TryClause();\n    for (;;)\n    {\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      try_CatchClause();\n      lookahead1W(183);             // S^WS | EOF | '(:' | ')' | ',' | ':' | ';' | ']' | 'after' | 'as' | 'ascending' |\n      if (l1 != 91)                 // 'catch'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_TryClause()\n  {\n    eventHandler.startNonterminal(\"TryClause\", e0);\n    shift(250);                     // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TryTargetExpr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"TryClause\", e0);\n  }\n\n  function try_TryClause()\n  {\n    shiftT(250);                    // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TryTargetExpr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_TryTargetExpr()\n  {\n    eventHandler.startNonterminal(\"TryTargetExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"TryTargetExpr\", e0);\n  }\n\n  function try_TryTargetExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_CatchClause()\n  {\n    eventHandler.startNonterminal(\"CatchClause\", e0);\n    shift(91);                      // 'catch'\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_CatchErrorList();\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"CatchClause\", e0);\n  }\n\n  function try_CatchClause()\n  {\n    shiftT(91);                     // 'catch'\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_CatchErrorList();\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_CatchErrorList()\n  {\n    eventHandler.startNonterminal(\"CatchErrorList\", e0);\n    parse_NameTest();\n    for (;;)\n    {\n      lookahead1W(136);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shift(279);                   // '|'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"CatchErrorList\", e0);\n  }\n\n  function try_CatchErrorList()\n  {\n    try_NameTest();\n    for (;;)\n    {\n      lookahead1W(136);             // S^WS | '(:' | '{' | '|'\n      if (l1 != 279)                // '|'\n      {\n        break;\n      }\n      shiftT(279);                  // '|'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NameTest();\n    }\n  }\n\n  function parse_OrExpr()\n  {\n    eventHandler.startNonterminal(\"OrExpr\", e0);\n    parse_AndExpr();\n    for (;;)\n    {\n      if (l1 != 200)                // 'or'\n      {\n        break;\n      }\n      shift(200);                   // 'or'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AndExpr();\n    }\n    eventHandler.endNonterminal(\"OrExpr\", e0);\n  }\n\n  function try_OrExpr()\n  {\n    try_AndExpr();\n    for (;;)\n    {\n      if (l1 != 200)                // 'or'\n      {\n        break;\n      }\n      shiftT(200);                  // 'or'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AndExpr();\n    }\n  }\n\n  function parse_AndExpr()\n  {\n    eventHandler.startNonterminal(\"AndExpr\", e0);\n    parse_ComparisonExpr();\n    for (;;)\n    {\n      if (l1 != 75)                 // 'and'\n      {\n        break;\n      }\n      shift(75);                    // 'and'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ComparisonExpr();\n    }\n    eventHandler.endNonterminal(\"AndExpr\", e0);\n  }\n\n  function try_AndExpr()\n  {\n    try_ComparisonExpr();\n    for (;;)\n    {\n      if (l1 != 75)                 // 'and'\n      {\n        break;\n      }\n      shiftT(75);                   // 'and'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ComparisonExpr();\n    }\n  }\n\n  function parse_ComparisonExpr()\n  {\n    eventHandler.startNonterminal(\"ComparisonExpr\", e0);\n    parse_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 54                    // '<'\n     || l1 == 57                    // '<<'\n     || l1 == 58                    // '<='\n     || l1 == 60                    // '='\n     || l1 == 61                    // '>'\n     || l1 == 62                    // '>='\n     || l1 == 63                    // '>>'\n     || l1 == 128                   // 'eq'\n     || l1 == 146                   // 'ge'\n     || l1 == 150                   // 'gt'\n     || l1 == 164                   // 'is'\n     || l1 == 172                   // 'le'\n     || l1 == 178                   // 'lt'\n     || l1 == 186)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 128:                     // 'eq'\n      case 146:                     // 'ge'\n      case 150:                     // 'gt'\n      case 172:                     // 'le'\n      case 178:                     // 'lt'\n      case 186:                     // 'ne'\n        whitespace();\n        parse_ValueComp();\n        break;\n      case 57:                      // '<<'\n      case 63:                      // '>>'\n      case 164:                     // 'is'\n        whitespace();\n        parse_NodeComp();\n        break;\n      default:\n        whitespace();\n        parse_GeneralComp();\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_FTContainsExpr();\n    }\n    eventHandler.endNonterminal(\"ComparisonExpr\", e0);\n  }\n\n  function try_ComparisonExpr()\n  {\n    try_FTContainsExpr();\n    if (l1 == 27                    // '!='\n     || l1 == 54                    // '<'\n     || l1 == 57                    // '<<'\n     || l1 == 58                    // '<='\n     || l1 == 60                    // '='\n     || l1 == 61                    // '>'\n     || l1 == 62                    // '>='\n     || l1 == 63                    // '>>'\n     || l1 == 128                   // 'eq'\n     || l1 == 146                   // 'ge'\n     || l1 == 150                   // 'gt'\n     || l1 == 164                   // 'is'\n     || l1 == 172                   // 'le'\n     || l1 == 178                   // 'lt'\n     || l1 == 186)                  // 'ne'\n    {\n      switch (l1)\n      {\n      case 128:                     // 'eq'\n      case 146:                     // 'ge'\n      case 150:                     // 'gt'\n      case 172:                     // 'le'\n      case 178:                     // 'lt'\n      case 186:                     // 'ne'\n        try_ValueComp();\n        break;\n      case 57:                      // '<<'\n      case 63:                      // '>>'\n      case 164:                     // 'is'\n        try_NodeComp();\n        break;\n      default:\n        try_GeneralComp();\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_FTContainsExpr();\n    }\n  }\n\n  function parse_FTContainsExpr()\n  {\n    eventHandler.startNonterminal(\"FTContainsExpr\", e0);\n    parse_StringConcatExpr();\n    if (l1 == 99)                   // 'contains'\n    {\n      shift(99);                    // 'contains'\n      lookahead1W(76);              // S^WS | '(:' | 'text'\n      shift(244);                   // 'text'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      if (l1 == 271)                // 'without'\n      {\n        whitespace();\n        parse_FTIgnoreOption();\n      }\n    }\n    eventHandler.endNonterminal(\"FTContainsExpr\", e0);\n  }\n\n  function try_FTContainsExpr()\n  {\n    try_StringConcatExpr();\n    if (l1 == 99)                   // 'contains'\n    {\n      shiftT(99);                   // 'contains'\n      lookahead1W(76);              // S^WS | '(:' | 'text'\n      shiftT(244);                  // 'text'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      if (l1 == 271)                // 'without'\n      {\n        try_FTIgnoreOption();\n      }\n    }\n  }\n\n  function parse_StringConcatExpr()\n  {\n    eventHandler.startNonterminal(\"StringConcatExpr\", e0);\n    parse_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 280)                // '||'\n      {\n        break;\n      }\n      shift(280);                   // '||'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_RangeExpr();\n    }\n    eventHandler.endNonterminal(\"StringConcatExpr\", e0);\n  }\n\n  function try_StringConcatExpr()\n  {\n    try_RangeExpr();\n    for (;;)\n    {\n      if (l1 != 280)                // '||'\n      {\n        break;\n      }\n      shiftT(280);                  // '||'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_RangeExpr();\n    }\n  }\n\n  function parse_RangeExpr()\n  {\n    eventHandler.startNonterminal(\"RangeExpr\", e0);\n    parse_AdditiveExpr();\n    if (l1 == 248)                  // 'to'\n    {\n      shift(248);                   // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"RangeExpr\", e0);\n  }\n\n  function try_RangeExpr()\n  {\n    try_AdditiveExpr();\n    if (l1 == 248)                  // 'to'\n    {\n      shiftT(248);                  // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_AdditiveExpr()\n  {\n    eventHandler.startNonterminal(\"AdditiveExpr\", e0);\n    parse_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 40:                      // '+'\n        shift(40);                  // '+'\n        break;\n      default:\n        shift(42);                  // '-'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_MultiplicativeExpr();\n    }\n    eventHandler.endNonterminal(\"AdditiveExpr\", e0);\n  }\n\n  function try_AdditiveExpr()\n  {\n    try_MultiplicativeExpr();\n    for (;;)\n    {\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 40:                      // '+'\n        shiftT(40);                 // '+'\n        break;\n      default:\n        shiftT(42);                 // '-'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_MultiplicativeExpr();\n    }\n  }\n\n  function parse_MultiplicativeExpr()\n  {\n    eventHandler.startNonterminal(\"MultiplicativeExpr\", e0);\n    parse_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 38                  // '*'\n       && l1 != 118                 // 'div'\n       && l1 != 151                 // 'idiv'\n       && l1 != 180)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 38:                      // '*'\n        shift(38);                  // '*'\n        break;\n      case 118:                     // 'div'\n        shift(118);                 // 'div'\n        break;\n      case 151:                     // 'idiv'\n        shift(151);                 // 'idiv'\n        break;\n      default:\n        shift(180);                 // 'mod'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_UnionExpr();\n    }\n    eventHandler.endNonterminal(\"MultiplicativeExpr\", e0);\n  }\n\n  function try_MultiplicativeExpr()\n  {\n    try_UnionExpr();\n    for (;;)\n    {\n      if (l1 != 38                  // '*'\n       && l1 != 118                 // 'div'\n       && l1 != 151                 // 'idiv'\n       && l1 != 180)                // 'mod'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 38:                      // '*'\n        shiftT(38);                 // '*'\n        break;\n      case 118:                     // 'div'\n        shiftT(118);                // 'div'\n        break;\n      case 151:                     // 'idiv'\n        shiftT(151);                // 'idiv'\n        break;\n      default:\n        shiftT(180);                // 'mod'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_UnionExpr();\n    }\n  }\n\n  function parse_UnionExpr()\n  {\n    eventHandler.startNonterminal(\"UnionExpr\", e0);\n    parse_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 254                 // 'union'\n       && l1 != 279)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 254:                     // 'union'\n        shift(254);                 // 'union'\n        break;\n      default:\n        shift(279);                 // '|'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_IntersectExceptExpr();\n    }\n    eventHandler.endNonterminal(\"UnionExpr\", e0);\n  }\n\n  function try_UnionExpr()\n  {\n    try_IntersectExceptExpr();\n    for (;;)\n    {\n      if (l1 != 254                 // 'union'\n       && l1 != 279)                // '|'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 254:                     // 'union'\n        shiftT(254);                // 'union'\n        break;\n      default:\n        shiftT(279);                // '|'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_IntersectExceptExpr();\n    }\n  }\n\n  function parse_IntersectExceptExpr()\n  {\n    eventHandler.startNonterminal(\"IntersectExceptExpr\", e0);\n    parse_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(222);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n      if (l1 != 131                 // 'except'\n       && l1 != 162)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 162:                     // 'intersect'\n        shift(162);                 // 'intersect'\n        break;\n      default:\n        shift(131);                 // 'except'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_InstanceofExpr();\n    }\n    eventHandler.endNonterminal(\"IntersectExceptExpr\", e0);\n  }\n\n  function try_IntersectExceptExpr()\n  {\n    try_InstanceofExpr();\n    for (;;)\n    {\n      lookahead1W(222);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n      if (l1 != 131                 // 'except'\n       && l1 != 162)                // 'intersect'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 162:                     // 'intersect'\n        shiftT(162);                // 'intersect'\n        break;\n      default:\n        shiftT(131);                // 'except'\n      }\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_InstanceofExpr();\n    }\n  }\n\n  function parse_InstanceofExpr()\n  {\n    eventHandler.startNonterminal(\"InstanceofExpr\", e0);\n    parse_TreatExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 160)                  // 'instance'\n    {\n      shift(160);                   // 'instance'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shift(196);                   // 'of'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"InstanceofExpr\", e0);\n  }\n\n  function try_InstanceofExpr()\n  {\n    try_TreatExpr();\n    lookahead1W(223);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 160)                  // 'instance'\n    {\n      shiftT(160);                  // 'instance'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shiftT(196);                  // 'of'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_TreatExpr()\n  {\n    eventHandler.startNonterminal(\"TreatExpr\", e0);\n    parse_CastableExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 249)                  // 'treat'\n    {\n      shift(249);                   // 'treat'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    eventHandler.endNonterminal(\"TreatExpr\", e0);\n  }\n\n  function try_TreatExpr()\n  {\n    try_CastableExpr();\n    lookahead1W(224);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 249)                  // 'treat'\n    {\n      shiftT(249);                  // 'treat'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n  }\n\n  function parse_CastableExpr()\n  {\n    eventHandler.startNonterminal(\"CastableExpr\", e0);\n    parse_CastExpr();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 90)                   // 'castable'\n    {\n      shift(90);                    // 'castable'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastableExpr\", e0);\n  }\n\n  function try_CastableExpr()\n  {\n    try_CastExpr();\n    lookahead1W(225);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 90)                   // 'castable'\n    {\n      shiftT(90);                   // 'castable'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SingleType();\n    }\n  }\n\n  function parse_CastExpr()\n  {\n    eventHandler.startNonterminal(\"CastExpr\", e0);\n    parse_UnaryExpr();\n    lookahead1W(227);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 89)                   // 'cast'\n    {\n      shift(89);                    // 'cast'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SingleType();\n    }\n    eventHandler.endNonterminal(\"CastExpr\", e0);\n  }\n\n  function try_CastExpr()\n  {\n    try_UnaryExpr();\n    lookahead1W(227);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 89)                   // 'cast'\n    {\n      shiftT(89);                   // 'cast'\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SingleType();\n    }\n  }\n\n  function parse_UnaryExpr()\n  {\n    eventHandler.startNonterminal(\"UnaryExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 42:                      // '-'\n        shift(42);                  // '-'\n        break;\n      default:\n        shift(40);                  // '+'\n      }\n    }\n    whitespace();\n    parse_ValueExpr();\n    eventHandler.endNonterminal(\"UnaryExpr\", e0);\n  }\n\n  function try_UnaryExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      if (l1 != 40                  // '+'\n       && l1 != 42)                 // '-'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 42:                      // '-'\n        shiftT(42);                 // '-'\n        break;\n      default:\n        shiftT(40);                 // '+'\n      }\n    }\n    try_ValueExpr();\n  }\n\n  function parse_ValueExpr()\n  {\n    eventHandler.startNonterminal(\"ValueExpr\", e0);\n    switch (l1)\n    {\n    case 260:                       // 'validate'\n      lookahead2W(247);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 87812:                     // 'validate' 'lax'\n    case 123140:                    // 'validate' 'strict'\n    case 129284:                    // 'validate' 'type'\n    case 141572:                    // 'validate' '{'\n      parse_ValidateExpr();\n      break;\n    case 35:                        // '(#'\n      parse_ExtensionExpr();\n      break;\n    default:\n      parse_SimpleMapExpr();\n    }\n    eventHandler.endNonterminal(\"ValueExpr\", e0);\n  }\n\n  function try_ValueExpr()\n  {\n    switch (l1)\n    {\n    case 260:                       // 'validate'\n      lookahead2W(247);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 87812:                     // 'validate' 'lax'\n    case 123140:                    // 'validate' 'strict'\n    case 129284:                    // 'validate' 'type'\n    case 141572:                    // 'validate' '{'\n      try_ValidateExpr();\n      break;\n    case 35:                        // '(#'\n      try_ExtensionExpr();\n      break;\n    default:\n      try_SimpleMapExpr();\n    }\n  }\n\n  function parse_SimpleMapExpr()\n  {\n    eventHandler.startNonterminal(\"SimpleMapExpr\", e0);\n    parse_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shift(26);                    // '!'\n      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_PathExpr();\n    }\n    eventHandler.endNonterminal(\"SimpleMapExpr\", e0);\n  }\n\n  function try_SimpleMapExpr()\n  {\n    try_PathExpr();\n    for (;;)\n    {\n      if (l1 != 26)                 // '!'\n      {\n        break;\n      }\n      shiftT(26);                   // '!'\n      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_PathExpr();\n    }\n  }\n\n  function parse_GeneralComp()\n  {\n    eventHandler.startNonterminal(\"GeneralComp\", e0);\n    switch (l1)\n    {\n    case 60:                        // '='\n      shift(60);                    // '='\n      break;\n    case 27:                        // '!='\n      shift(27);                    // '!='\n      break;\n    case 54:                        // '<'\n      shift(54);                    // '<'\n      break;\n    case 58:                        // '<='\n      shift(58);                    // '<='\n      break;\n    case 61:                        // '>'\n      shift(61);                    // '>'\n      break;\n    default:\n      shift(62);                    // '>='\n    }\n    eventHandler.endNonterminal(\"GeneralComp\", e0);\n  }\n\n  function try_GeneralComp()\n  {\n    switch (l1)\n    {\n    case 60:                        // '='\n      shiftT(60);                   // '='\n      break;\n    case 27:                        // '!='\n      shiftT(27);                   // '!='\n      break;\n    case 54:                        // '<'\n      shiftT(54);                   // '<'\n      break;\n    case 58:                        // '<='\n      shiftT(58);                   // '<='\n      break;\n    case 61:                        // '>'\n      shiftT(61);                   // '>'\n      break;\n    default:\n      shiftT(62);                   // '>='\n    }\n  }\n\n  function parse_ValueComp()\n  {\n    eventHandler.startNonterminal(\"ValueComp\", e0);\n    switch (l1)\n    {\n    case 128:                       // 'eq'\n      shift(128);                   // 'eq'\n      break;\n    case 186:                       // 'ne'\n      shift(186);                   // 'ne'\n      break;\n    case 178:                       // 'lt'\n      shift(178);                   // 'lt'\n      break;\n    case 172:                       // 'le'\n      shift(172);                   // 'le'\n      break;\n    case 150:                       // 'gt'\n      shift(150);                   // 'gt'\n      break;\n    default:\n      shift(146);                   // 'ge'\n    }\n    eventHandler.endNonterminal(\"ValueComp\", e0);\n  }\n\n  function try_ValueComp()\n  {\n    switch (l1)\n    {\n    case 128:                       // 'eq'\n      shiftT(128);                  // 'eq'\n      break;\n    case 186:                       // 'ne'\n      shiftT(186);                  // 'ne'\n      break;\n    case 178:                       // 'lt'\n      shiftT(178);                  // 'lt'\n      break;\n    case 172:                       // 'le'\n      shiftT(172);                  // 'le'\n      break;\n    case 150:                       // 'gt'\n      shiftT(150);                  // 'gt'\n      break;\n    default:\n      shiftT(146);                  // 'ge'\n    }\n  }\n\n  function parse_NodeComp()\n  {\n    eventHandler.startNonterminal(\"NodeComp\", e0);\n    switch (l1)\n    {\n    case 164:                       // 'is'\n      shift(164);                   // 'is'\n      break;\n    case 57:                        // '<<'\n      shift(57);                    // '<<'\n      break;\n    default:\n      shift(63);                    // '>>'\n    }\n    eventHandler.endNonterminal(\"NodeComp\", e0);\n  }\n\n  function try_NodeComp()\n  {\n    switch (l1)\n    {\n    case 164:                       // 'is'\n      shiftT(164);                  // 'is'\n      break;\n    case 57:                        // '<<'\n      shiftT(57);                   // '<<'\n      break;\n    default:\n      shiftT(63);                   // '>>'\n    }\n  }\n\n  function parse_ValidateExpr()\n  {\n    eventHandler.startNonterminal(\"ValidateExpr\", e0);\n    shift(260);                     // 'validate'\n    lookahead1W(160);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 276)                  // '{'\n    {\n      switch (l1)\n      {\n      case 252:                     // 'type'\n        shift(252);                 // 'type'\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n        break;\n      default:\n        whitespace();\n        parse_ValidationMode();\n      }\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"ValidateExpr\", e0);\n  }\n\n  function try_ValidateExpr()\n  {\n    shiftT(260);                    // 'validate'\n    lookahead1W(160);               // S^WS | '(:' | 'lax' | 'strict' | 'type' | '{'\n    if (l1 != 276)                  // '{'\n    {\n      switch (l1)\n      {\n      case 252:                     // 'type'\n        shiftT(252);                // 'type'\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n        break;\n      default:\n        try_ValidationMode();\n      }\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_ValidationMode()\n  {\n    eventHandler.startNonterminal(\"ValidationMode\", e0);\n    switch (l1)\n    {\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    default:\n      shift(240);                   // 'strict'\n    }\n    eventHandler.endNonterminal(\"ValidationMode\", e0);\n  }\n\n  function try_ValidationMode()\n  {\n    switch (l1)\n    {\n    case 171:                       // 'lax'\n      shiftT(171);                  // 'lax'\n      break;\n    default:\n      shiftT(240);                  // 'strict'\n    }\n  }\n\n  function parse_ExtensionExpr()\n  {\n    eventHandler.startNonterminal(\"ExtensionExpr\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(276);                     // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"ExtensionExpr\", e0);\n  }\n\n  function try_ExtensionExpr()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(276);                    // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      try_Expr();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_Pragma()\n  {\n    eventHandler.startNonterminal(\"Pragma\", e0);\n    shift(35);                      // '(#'\n    lookahead1(251);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n    }\n    parse_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(0);                // PragmaContents\n      shift(1);                     // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shift(30);                      // '#)'\n    eventHandler.endNonterminal(\"Pragma\", e0);\n  }\n\n  function try_Pragma()\n  {\n    shiftT(35);                     // '(#'\n    lookahead1(251);                // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n    }\n    try_EQName();\n    lookahead1(10);                 // S | '#)'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(0);                // PragmaContents\n      shiftT(1);                    // PragmaContents\n    }\n    lookahead1(5);                  // '#)'\n    shiftT(30);                     // '#)'\n  }\n\n  function parse_PathExpr()\n  {\n    eventHandler.startNonterminal(\"PathExpr\", e0);\n    switch (l1)\n    {\n    case 46:                        // '/'\n      shift(46);                    // '/'\n      lookahead1W(285);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 37:                      // ')'\n      case 38:                      // '*'\n      case 40:                      // '+'\n      case 41:                      // ','\n      case 42:                      // '-'\n      case 49:                      // ':'\n      case 53:                      // ';'\n      case 57:                      // '<<'\n      case 58:                      // '<='\n      case 60:                      // '='\n      case 61:                      // '>'\n      case 62:                      // '>='\n      case 63:                      // '>>'\n      case 69:                      // ']'\n      case 87:                      // 'by'\n      case 99:                      // 'contains'\n      case 205:                     // 'paragraphs'\n      case 232:                     // 'sentences'\n      case 247:                     // 'times'\n      case 273:                     // 'words'\n      case 279:                     // '|'\n      case 280:                     // '||'\n      case 281:                     // '|}'\n      case 282:                     // '}'\n        break;\n      default:\n        whitespace();\n        parse_RelativePathExpr();\n      }\n      break;\n    case 47:                        // '//'\n      shift(47);                    // '//'\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_RelativePathExpr();\n      break;\n    default:\n      parse_RelativePathExpr();\n    }\n    eventHandler.endNonterminal(\"PathExpr\", e0);\n  }\n\n  function try_PathExpr()\n  {\n    switch (l1)\n    {\n    case 46:                        // '/'\n      shiftT(46);                   // '/'\n      lookahead1W(285);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 25:                      // EOF\n      case 26:                      // '!'\n      case 27:                      // '!='\n      case 37:                      // ')'\n      case 38:                      // '*'\n      case 40:                      // '+'\n      case 41:                      // ','\n      case 42:                      // '-'\n      case 49:                      // ':'\n      case 53:                      // ';'\n      case 57:                      // '<<'\n      case 58:                      // '<='\n      case 60:                      // '='\n      case 61:                      // '>'\n      case 62:                      // '>='\n      case 63:                      // '>>'\n      case 69:                      // ']'\n      case 87:                      // 'by'\n      case 99:                      // 'contains'\n      case 205:                     // 'paragraphs'\n      case 232:                     // 'sentences'\n      case 247:                     // 'times'\n      case 273:                     // 'words'\n      case 279:                     // '|'\n      case 280:                     // '||'\n      case 281:                     // '|}'\n      case 282:                     // '}'\n        break;\n      default:\n        try_RelativePathExpr();\n      }\n      break;\n    case 47:                        // '//'\n      shiftT(47);                   // '//'\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_RelativePathExpr();\n      break;\n    default:\n      try_RelativePathExpr();\n    }\n  }\n\n  function parse_RelativePathExpr()\n  {\n    eventHandler.startNonterminal(\"RelativePathExpr\", e0);\n    parse_StepExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 37                  // ')'\n       && lk != 38                  // '*'\n       && lk != 40                  // '+'\n       && lk != 41                  // ','\n       && lk != 42                  // '-'\n       && lk != 46                  // '/'\n       && lk != 47                  // '//'\n       && lk != 49                  // ':'\n       && lk != 53                  // ';'\n       && lk != 54                  // '<'\n       && lk != 57                  // '<<'\n       && lk != 58                  // '<='\n       && lk != 60                  // '='\n       && lk != 61                  // '>'\n       && lk != 62                  // '>='\n       && lk != 63                  // '>>'\n       && lk != 69                  // ']'\n       && lk != 70                  // 'after'\n       && lk != 75                  // 'and'\n       && lk != 79                  // 'as'\n       && lk != 80                  // 'ascending'\n       && lk != 81                  // 'at'\n       && lk != 84                  // 'before'\n       && lk != 87                  // 'by'\n       && lk != 88                  // 'case'\n       && lk != 89                  // 'cast'\n       && lk != 90                  // 'castable'\n       && lk != 94                  // 'collation'\n       && lk != 99                  // 'contains'\n       && lk != 105                 // 'count'\n       && lk != 109                 // 'default'\n       && lk != 113                 // 'descending'\n       && lk != 118                 // 'div'\n       && lk != 122                 // 'else'\n       && lk != 123                 // 'empty'\n       && lk != 126                 // 'end'\n       && lk != 128                 // 'eq'\n       && lk != 131                 // 'except'\n       && lk != 137                 // 'for'\n       && lk != 146                 // 'ge'\n       && lk != 148                 // 'group'\n       && lk != 150                 // 'gt'\n       && lk != 151                 // 'idiv'\n       && lk != 160                 // 'instance'\n       && lk != 162                 // 'intersect'\n       && lk != 163                 // 'into'\n       && lk != 164                 // 'is'\n       && lk != 172                 // 'le'\n       && lk != 174                 // 'let'\n       && lk != 178                 // 'lt'\n       && lk != 180                 // 'mod'\n       && lk != 181                 // 'modify'\n       && lk != 186                 // 'ne'\n       && lk != 198                 // 'only'\n       && lk != 200                 // 'or'\n       && lk != 201                 // 'order'\n       && lk != 205                 // 'paragraphs'\n       && lk != 220                 // 'return'\n       && lk != 224                 // 'satisfies'\n       && lk != 232                 // 'sentences'\n       && lk != 236                 // 'stable'\n       && lk != 237                 // 'start'\n       && lk != 247                 // 'times'\n       && lk != 248                 // 'to'\n       && lk != 249                 // 'treat'\n       && lk != 254                 // 'union'\n       && lk != 266                 // 'where'\n       && lk != 270                 // 'with'\n       && lk != 273                 // 'words'\n       && lk != 279                 // '|'\n       && lk != 280                 // '||'\n       && lk != 281                 // '|}'\n       && lk != 282                 // '}'\n       && lk != 23578               // '!' '/'\n       && lk != 24090)              // '!' '//'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 46:                // '/'\n              shiftT(46);           // '/'\n              break;\n            case 47:                // '//'\n              shiftT(47);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(264);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_StepExpr();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(3, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 46                  // '/'\n       && lk != 47)                 // '//'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 46:                      // '/'\n        shift(46);                  // '/'\n        break;\n      case 47:                      // '//'\n        shift(47);                  // '//'\n        break;\n      default:\n        shift(26);                  // '!'\n      }\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_StepExpr();\n    }\n    eventHandler.endNonterminal(\"RelativePathExpr\", e0);\n  }\n\n  function try_RelativePathExpr()\n  {\n    try_StepExpr();\n    for (;;)\n    {\n      switch (l1)\n      {\n      case 26:                      // '!'\n        lookahead2W(265);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 27                  // '!='\n       && lk != 37                  // ')'\n       && lk != 38                  // '*'\n       && lk != 40                  // '+'\n       && lk != 41                  // ','\n       && lk != 42                  // '-'\n       && lk != 46                  // '/'\n       && lk != 47                  // '//'\n       && lk != 49                  // ':'\n       && lk != 53                  // ';'\n       && lk != 54                  // '<'\n       && lk != 57                  // '<<'\n       && lk != 58                  // '<='\n       && lk != 60                  // '='\n       && lk != 61                  // '>'\n       && lk != 62                  // '>='\n       && lk != 63                  // '>>'\n       && lk != 69                  // ']'\n       && lk != 70                  // 'after'\n       && lk != 75                  // 'and'\n       && lk != 79                  // 'as'\n       && lk != 80                  // 'ascending'\n       && lk != 81                  // 'at'\n       && lk != 84                  // 'before'\n       && lk != 87                  // 'by'\n       && lk != 88                  // 'case'\n       && lk != 89                  // 'cast'\n       && lk != 90                  // 'castable'\n       && lk != 94                  // 'collation'\n       && lk != 99                  // 'contains'\n       && lk != 105                 // 'count'\n       && lk != 109                 // 'default'\n       && lk != 113                 // 'descending'\n       && lk != 118                 // 'div'\n       && lk != 122                 // 'else'\n       && lk != 123                 // 'empty'\n       && lk != 126                 // 'end'\n       && lk != 128                 // 'eq'\n       && lk != 131                 // 'except'\n       && lk != 137                 // 'for'\n       && lk != 146                 // 'ge'\n       && lk != 148                 // 'group'\n       && lk != 150                 // 'gt'\n       && lk != 151                 // 'idiv'\n       && lk != 160                 // 'instance'\n       && lk != 162                 // 'intersect'\n       && lk != 163                 // 'into'\n       && lk != 164                 // 'is'\n       && lk != 172                 // 'le'\n       && lk != 174                 // 'let'\n       && lk != 178                 // 'lt'\n       && lk != 180                 // 'mod'\n       && lk != 181                 // 'modify'\n       && lk != 186                 // 'ne'\n       && lk != 198                 // 'only'\n       && lk != 200                 // 'or'\n       && lk != 201                 // 'order'\n       && lk != 205                 // 'paragraphs'\n       && lk != 220                 // 'return'\n       && lk != 224                 // 'satisfies'\n       && lk != 232                 // 'sentences'\n       && lk != 236                 // 'stable'\n       && lk != 237                 // 'start'\n       && lk != 247                 // 'times'\n       && lk != 248                 // 'to'\n       && lk != 249                 // 'treat'\n       && lk != 254                 // 'union'\n       && lk != 266                 // 'where'\n       && lk != 270                 // 'with'\n       && lk != 273                 // 'words'\n       && lk != 279                 // '|'\n       && lk != 280                 // '||'\n       && lk != 281                 // '|}'\n       && lk != 282                 // '}'\n       && lk != 23578               // '!' '/'\n       && lk != 24090)              // '!' '//'\n      {\n        lk = memoized(3, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            switch (l1)\n            {\n            case 46:                // '/'\n              shiftT(46);           // '/'\n              break;\n            case 47:                // '//'\n              shiftT(47);           // '//'\n              break;\n            default:\n              shiftT(26);           // '!'\n            }\n            lookahead1W(264);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_StepExpr();\n            memoize(3, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(3, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 46                  // '/'\n       && lk != 47)                 // '//'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 46:                      // '/'\n        shiftT(46);                 // '/'\n        break;\n      case 47:                      // '//'\n        shiftT(47);                 // '//'\n        break;\n      default:\n        shiftT(26);                 // '!'\n      }\n      lookahead1W(264);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_StepExpr();\n    }\n  }\n\n  function parse_StepExpr()\n  {\n    eventHandler.startNonterminal(\"StepExpr\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(284);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 121:                       // 'element'\n      lookahead2W(282);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 184:                       // 'namespace'\n    case 216:                       // 'processing-instruction'\n      lookahead2W(281);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 96:                        // 'comment'\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 244:                       // 'text'\n    case 256:                       // 'unordered'\n      lookahead2W(246);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 78:                        // 'array'\n    case 124:                       // 'empty-sequence'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(239);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 229:                       // 'self'\n      lookahead2W(245);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 120:                       // 'document-node'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 145:                       // 'function'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 185:                       // 'namespace-node'\n    case 186:                       // 'ne'\n    case 191:                       // 'node'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 228:                       // 'score'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(243);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 35922                 // 'attribute' 'after'\n     || lk == 35961                 // 'element' 'after'\n     || lk == 36024                 // 'namespace' 'after'\n     || lk == 36056                 // 'processing-instruction' 'after'\n     || lk == 38482                 // 'attribute' 'and'\n     || lk == 38521                 // 'element' 'and'\n     || lk == 38584                 // 'namespace' 'and'\n     || lk == 38616                 // 'processing-instruction' 'and'\n     || lk == 40530                 // 'attribute' 'as'\n     || lk == 40569                 // 'element' 'as'\n     || lk == 40632                 // 'namespace' 'as'\n     || lk == 40664                 // 'processing-instruction' 'as'\n     || lk == 41042                 // 'attribute' 'ascending'\n     || lk == 41081                 // 'element' 'ascending'\n     || lk == 41144                 // 'namespace' 'ascending'\n     || lk == 41176                 // 'processing-instruction' 'ascending'\n     || lk == 41554                 // 'attribute' 'at'\n     || lk == 41593                 // 'element' 'at'\n     || lk == 41656                 // 'namespace' 'at'\n     || lk == 41688                 // 'processing-instruction' 'at'\n     || lk == 43090                 // 'attribute' 'before'\n     || lk == 43129                 // 'element' 'before'\n     || lk == 43192                 // 'namespace' 'before'\n     || lk == 43224                 // 'processing-instruction' 'before'\n     || lk == 45138                 // 'attribute' 'case'\n     || lk == 45177                 // 'element' 'case'\n     || lk == 45240                 // 'namespace' 'case'\n     || lk == 45272                 // 'processing-instruction' 'case'\n     || lk == 45650                 // 'attribute' 'cast'\n     || lk == 45689                 // 'element' 'cast'\n     || lk == 45752                 // 'namespace' 'cast'\n     || lk == 45784                 // 'processing-instruction' 'cast'\n     || lk == 46162                 // 'attribute' 'castable'\n     || lk == 46201                 // 'element' 'castable'\n     || lk == 46264                 // 'namespace' 'castable'\n     || lk == 46296                 // 'processing-instruction' 'castable'\n     || lk == 48210                 // 'attribute' 'collation'\n     || lk == 48249                 // 'element' 'collation'\n     || lk == 48312                 // 'namespace' 'collation'\n     || lk == 48344                 // 'processing-instruction' 'collation'\n     || lk == 53842                 // 'attribute' 'count'\n     || lk == 53881                 // 'element' 'count'\n     || lk == 53944                 // 'namespace' 'count'\n     || lk == 53976                 // 'processing-instruction' 'count'\n     || lk == 55890                 // 'attribute' 'default'\n     || lk == 55929                 // 'element' 'default'\n     || lk == 55992                 // 'namespace' 'default'\n     || lk == 56024                 // 'processing-instruction' 'default'\n     || lk == 57938                 // 'attribute' 'descending'\n     || lk == 57977                 // 'element' 'descending'\n     || lk == 58040                 // 'namespace' 'descending'\n     || lk == 58072                 // 'processing-instruction' 'descending'\n     || lk == 60498                 // 'attribute' 'div'\n     || lk == 60537                 // 'element' 'div'\n     || lk == 60600                 // 'namespace' 'div'\n     || lk == 60632                 // 'processing-instruction' 'div'\n     || lk == 62546                 // 'attribute' 'else'\n     || lk == 62585                 // 'element' 'else'\n     || lk == 62648                 // 'namespace' 'else'\n     || lk == 62680                 // 'processing-instruction' 'else'\n     || lk == 63058                 // 'attribute' 'empty'\n     || lk == 63097                 // 'element' 'empty'\n     || lk == 63160                 // 'namespace' 'empty'\n     || lk == 63192                 // 'processing-instruction' 'empty'\n     || lk == 64594                 // 'attribute' 'end'\n     || lk == 64633                 // 'element' 'end'\n     || lk == 64696                 // 'namespace' 'end'\n     || lk == 64728                 // 'processing-instruction' 'end'\n     || lk == 65618                 // 'attribute' 'eq'\n     || lk == 65657                 // 'element' 'eq'\n     || lk == 65720                 // 'namespace' 'eq'\n     || lk == 65752                 // 'processing-instruction' 'eq'\n     || lk == 67154                 // 'attribute' 'except'\n     || lk == 67193                 // 'element' 'except'\n     || lk == 67256                 // 'namespace' 'except'\n     || lk == 67288                 // 'processing-instruction' 'except'\n     || lk == 70226                 // 'attribute' 'for'\n     || lk == 70265                 // 'element' 'for'\n     || lk == 70328                 // 'namespace' 'for'\n     || lk == 70360                 // 'processing-instruction' 'for'\n     || lk == 74834                 // 'attribute' 'ge'\n     || lk == 74873                 // 'element' 'ge'\n     || lk == 74936                 // 'namespace' 'ge'\n     || lk == 74968                 // 'processing-instruction' 'ge'\n     || lk == 75858                 // 'attribute' 'group'\n     || lk == 75897                 // 'element' 'group'\n     || lk == 75960                 // 'namespace' 'group'\n     || lk == 75992                 // 'processing-instruction' 'group'\n     || lk == 76882                 // 'attribute' 'gt'\n     || lk == 76921                 // 'element' 'gt'\n     || lk == 76984                 // 'namespace' 'gt'\n     || lk == 77016                 // 'processing-instruction' 'gt'\n     || lk == 77394                 // 'attribute' 'idiv'\n     || lk == 77433                 // 'element' 'idiv'\n     || lk == 77496                 // 'namespace' 'idiv'\n     || lk == 77528                 // 'processing-instruction' 'idiv'\n     || lk == 82002                 // 'attribute' 'instance'\n     || lk == 82041                 // 'element' 'instance'\n     || lk == 82104                 // 'namespace' 'instance'\n     || lk == 82136                 // 'processing-instruction' 'instance'\n     || lk == 83026                 // 'attribute' 'intersect'\n     || lk == 83065                 // 'element' 'intersect'\n     || lk == 83128                 // 'namespace' 'intersect'\n     || lk == 83160                 // 'processing-instruction' 'intersect'\n     || lk == 83538                 // 'attribute' 'into'\n     || lk == 83577                 // 'element' 'into'\n     || lk == 83640                 // 'namespace' 'into'\n     || lk == 83672                 // 'processing-instruction' 'into'\n     || lk == 84050                 // 'attribute' 'is'\n     || lk == 84089                 // 'element' 'is'\n     || lk == 84152                 // 'namespace' 'is'\n     || lk == 84184                 // 'processing-instruction' 'is'\n     || lk == 88146                 // 'attribute' 'le'\n     || lk == 88185                 // 'element' 'le'\n     || lk == 88248                 // 'namespace' 'le'\n     || lk == 88280                 // 'processing-instruction' 'le'\n     || lk == 89170                 // 'attribute' 'let'\n     || lk == 89209                 // 'element' 'let'\n     || lk == 89272                 // 'namespace' 'let'\n     || lk == 89304                 // 'processing-instruction' 'let'\n     || lk == 91218                 // 'attribute' 'lt'\n     || lk == 91257                 // 'element' 'lt'\n     || lk == 91320                 // 'namespace' 'lt'\n     || lk == 91352                 // 'processing-instruction' 'lt'\n     || lk == 92242                 // 'attribute' 'mod'\n     || lk == 92281                 // 'element' 'mod'\n     || lk == 92344                 // 'namespace' 'mod'\n     || lk == 92376                 // 'processing-instruction' 'mod'\n     || lk == 92754                 // 'attribute' 'modify'\n     || lk == 92793                 // 'element' 'modify'\n     || lk == 92856                 // 'namespace' 'modify'\n     || lk == 92888                 // 'processing-instruction' 'modify'\n     || lk == 95314                 // 'attribute' 'ne'\n     || lk == 95353                 // 'element' 'ne'\n     || lk == 95416                 // 'namespace' 'ne'\n     || lk == 95448                 // 'processing-instruction' 'ne'\n     || lk == 101458                // 'attribute' 'only'\n     || lk == 101497                // 'element' 'only'\n     || lk == 101560                // 'namespace' 'only'\n     || lk == 101592                // 'processing-instruction' 'only'\n     || lk == 102482                // 'attribute' 'or'\n     || lk == 102521                // 'element' 'or'\n     || lk == 102584                // 'namespace' 'or'\n     || lk == 102616                // 'processing-instruction' 'or'\n     || lk == 102994                // 'attribute' 'order'\n     || lk == 103033                // 'element' 'order'\n     || lk == 103096                // 'namespace' 'order'\n     || lk == 103128                // 'processing-instruction' 'order'\n     || lk == 112722                // 'attribute' 'return'\n     || lk == 112761                // 'element' 'return'\n     || lk == 112824                // 'namespace' 'return'\n     || lk == 112856                // 'processing-instruction' 'return'\n     || lk == 114770                // 'attribute' 'satisfies'\n     || lk == 114809                // 'element' 'satisfies'\n     || lk == 114872                // 'namespace' 'satisfies'\n     || lk == 114904                // 'processing-instruction' 'satisfies'\n     || lk == 120914                // 'attribute' 'stable'\n     || lk == 120953                // 'element' 'stable'\n     || lk == 121016                // 'namespace' 'stable'\n     || lk == 121048                // 'processing-instruction' 'stable'\n     || lk == 121426                // 'attribute' 'start'\n     || lk == 121465                // 'element' 'start'\n     || lk == 121528                // 'namespace' 'start'\n     || lk == 121560                // 'processing-instruction' 'start'\n     || lk == 127058                // 'attribute' 'to'\n     || lk == 127097                // 'element' 'to'\n     || lk == 127160                // 'namespace' 'to'\n     || lk == 127192                // 'processing-instruction' 'to'\n     || lk == 127570                // 'attribute' 'treat'\n     || lk == 127609                // 'element' 'treat'\n     || lk == 127672                // 'namespace' 'treat'\n     || lk == 127704                // 'processing-instruction' 'treat'\n     || lk == 130130                // 'attribute' 'union'\n     || lk == 130169                // 'element' 'union'\n     || lk == 130232                // 'namespace' 'union'\n     || lk == 130264                // 'processing-instruction' 'union'\n     || lk == 136274                // 'attribute' 'where'\n     || lk == 136313                // 'element' 'where'\n     || lk == 136376                // 'namespace' 'where'\n     || lk == 136408                // 'processing-instruction' 'where'\n     || lk == 138322                // 'attribute' 'with'\n     || lk == 138361                // 'element' 'with'\n     || lk == 138424                // 'namespace' 'with'\n     || lk == 138456)               // 'processing-instruction' 'with'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(4, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '%'\n    case 34:                        // '('\n    case 44:                        // '.'\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n    case 68:                        // '['\n    case 276:                       // '{'\n    case 278:                       // '{|'\n    case 3154:                      // 'attribute' EQName^Token\n    case 3193:                      // 'element' EQName^Token\n    case 9912:                      // 'namespace' NCName^Token\n    case 9944:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14926:                     // 'array' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14968:                     // 'document-node' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14972:                     // 'empty-sequence' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14993:                     // 'function' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15000:                     // 'if' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15013:                     // 'item' '#'\n    case 15014:                     // 'json' '#'\n    case 15015:                     // 'json-item' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15033:                     // 'namespace-node' '#'\n    case 15034:                     // 'ne' '#'\n    case 15039:                     // 'node' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15074:                     // 'schema-attribute' '#'\n    case 15075:                     // 'schema-element' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15090:                     // 'structured-item' '#'\n    case 15091:                     // 'switch' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15101:                     // 'typeswitch' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17553:                     // 'function' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n    case 36946:                     // 'attribute' 'allowing'\n    case 36985:                     // 'element' 'allowing'\n    case 37048:                     // 'namespace' 'allowing'\n    case 37080:                     // 'processing-instruction' 'allowing'\n    case 37458:                     // 'attribute' 'ancestor'\n    case 37497:                     // 'element' 'ancestor'\n    case 37560:                     // 'namespace' 'ancestor'\n    case 37592:                     // 'processing-instruction' 'ancestor'\n    case 37970:                     // 'attribute' 'ancestor-or-self'\n    case 38009:                     // 'element' 'ancestor-or-self'\n    case 38072:                     // 'namespace' 'ancestor-or-self'\n    case 38104:                     // 'processing-instruction' 'ancestor-or-self'\n    case 39506:                     // 'attribute' 'append'\n    case 39545:                     // 'element' 'append'\n    case 39608:                     // 'namespace' 'append'\n    case 39640:                     // 'processing-instruction' 'append'\n    case 40018:                     // 'attribute' 'array'\n    case 40057:                     // 'element' 'array'\n    case 42066:                     // 'attribute' 'attribute'\n    case 42105:                     // 'element' 'attribute'\n    case 42168:                     // 'namespace' 'attribute'\n    case 42200:                     // 'processing-instruction' 'attribute'\n    case 42578:                     // 'attribute' 'base-uri'\n    case 42617:                     // 'element' 'base-uri'\n    case 42680:                     // 'namespace' 'base-uri'\n    case 42712:                     // 'processing-instruction' 'base-uri'\n    case 43602:                     // 'attribute' 'boundary-space'\n    case 43641:                     // 'element' 'boundary-space'\n    case 43704:                     // 'namespace' 'boundary-space'\n    case 43736:                     // 'processing-instruction' 'boundary-space'\n    case 44114:                     // 'attribute' 'break'\n    case 44153:                     // 'element' 'break'\n    case 44216:                     // 'namespace' 'break'\n    case 44248:                     // 'processing-instruction' 'break'\n    case 46674:                     // 'attribute' 'catch'\n    case 46713:                     // 'element' 'catch'\n    case 46776:                     // 'namespace' 'catch'\n    case 46808:                     // 'processing-instruction' 'catch'\n    case 47698:                     // 'attribute' 'child'\n    case 47737:                     // 'element' 'child'\n    case 47800:                     // 'namespace' 'child'\n    case 47832:                     // 'processing-instruction' 'child'\n    case 49234:                     // 'attribute' 'comment'\n    case 49273:                     // 'element' 'comment'\n    case 49336:                     // 'namespace' 'comment'\n    case 49368:                     // 'processing-instruction' 'comment'\n    case 49746:                     // 'attribute' 'constraint'\n    case 49785:                     // 'element' 'constraint'\n    case 49848:                     // 'namespace' 'constraint'\n    case 49880:                     // 'processing-instruction' 'constraint'\n    case 50258:                     // 'attribute' 'construction'\n    case 50297:                     // 'element' 'construction'\n    case 50360:                     // 'namespace' 'construction'\n    case 50392:                     // 'processing-instruction' 'construction'\n    case 51794:                     // 'attribute' 'context'\n    case 51833:                     // 'element' 'context'\n    case 51896:                     // 'namespace' 'context'\n    case 51928:                     // 'processing-instruction' 'context'\n    case 52306:                     // 'attribute' 'continue'\n    case 52345:                     // 'element' 'continue'\n    case 52408:                     // 'namespace' 'continue'\n    case 52440:                     // 'processing-instruction' 'continue'\n    case 52818:                     // 'attribute' 'copy'\n    case 52857:                     // 'element' 'copy'\n    case 52920:                     // 'namespace' 'copy'\n    case 52952:                     // 'processing-instruction' 'copy'\n    case 53330:                     // 'attribute' 'copy-namespaces'\n    case 53369:                     // 'element' 'copy-namespaces'\n    case 53432:                     // 'namespace' 'copy-namespaces'\n    case 53464:                     // 'processing-instruction' 'copy-namespaces'\n    case 54354:                     // 'attribute' 'decimal-format'\n    case 54393:                     // 'element' 'decimal-format'\n    case 54456:                     // 'namespace' 'decimal-format'\n    case 54488:                     // 'processing-instruction' 'decimal-format'\n    case 55378:                     // 'attribute' 'declare'\n    case 55417:                     // 'element' 'declare'\n    case 55480:                     // 'namespace' 'declare'\n    case 55512:                     // 'processing-instruction' 'declare'\n    case 56402:                     // 'attribute' 'delete'\n    case 56441:                     // 'element' 'delete'\n    case 56504:                     // 'namespace' 'delete'\n    case 56536:                     // 'processing-instruction' 'delete'\n    case 56914:                     // 'attribute' 'descendant'\n    case 56953:                     // 'element' 'descendant'\n    case 57016:                     // 'namespace' 'descendant'\n    case 57048:                     // 'processing-instruction' 'descendant'\n    case 57426:                     // 'attribute' 'descendant-or-self'\n    case 57465:                     // 'element' 'descendant-or-self'\n    case 57528:                     // 'namespace' 'descendant-or-self'\n    case 57560:                     // 'processing-instruction' 'descendant-or-self'\n    case 61010:                     // 'attribute' 'document'\n    case 61049:                     // 'element' 'document'\n    case 61112:                     // 'namespace' 'document'\n    case 61144:                     // 'processing-instruction' 'document'\n    case 61522:                     // 'attribute' 'document-node'\n    case 61561:                     // 'element' 'document-node'\n    case 61624:                     // 'namespace' 'document-node'\n    case 61656:                     // 'processing-instruction' 'document-node'\n    case 62034:                     // 'attribute' 'element'\n    case 62073:                     // 'element' 'element'\n    case 62136:                     // 'namespace' 'element'\n    case 62168:                     // 'processing-instruction' 'element'\n    case 63570:                     // 'attribute' 'empty-sequence'\n    case 63609:                     // 'element' 'empty-sequence'\n    case 63672:                     // 'namespace' 'empty-sequence'\n    case 63704:                     // 'processing-instruction' 'empty-sequence'\n    case 64082:                     // 'attribute' 'encoding'\n    case 64121:                     // 'element' 'encoding'\n    case 64184:                     // 'namespace' 'encoding'\n    case 64216:                     // 'processing-instruction' 'encoding'\n    case 66130:                     // 'attribute' 'every'\n    case 66169:                     // 'element' 'every'\n    case 66232:                     // 'namespace' 'every'\n    case 66264:                     // 'processing-instruction' 'every'\n    case 67666:                     // 'attribute' 'exit'\n    case 67705:                     // 'element' 'exit'\n    case 67768:                     // 'namespace' 'exit'\n    case 67800:                     // 'processing-instruction' 'exit'\n    case 68178:                     // 'attribute' 'external'\n    case 68217:                     // 'element' 'external'\n    case 68280:                     // 'namespace' 'external'\n    case 68312:                     // 'processing-instruction' 'external'\n    case 68690:                     // 'attribute' 'first'\n    case 68729:                     // 'element' 'first'\n    case 68792:                     // 'namespace' 'first'\n    case 68824:                     // 'processing-instruction' 'first'\n    case 69202:                     // 'attribute' 'following'\n    case 69241:                     // 'element' 'following'\n    case 69304:                     // 'namespace' 'following'\n    case 69336:                     // 'processing-instruction' 'following'\n    case 69714:                     // 'attribute' 'following-sibling'\n    case 69753:                     // 'element' 'following-sibling'\n    case 69816:                     // 'namespace' 'following-sibling'\n    case 69848:                     // 'processing-instruction' 'following-sibling'\n    case 72274:                     // 'attribute' 'ft-option'\n    case 72313:                     // 'element' 'ft-option'\n    case 72376:                     // 'namespace' 'ft-option'\n    case 72408:                     // 'processing-instruction' 'ft-option'\n    case 74322:                     // 'attribute' 'function'\n    case 74361:                     // 'element' 'function'\n    case 74424:                     // 'namespace' 'function'\n    case 74456:                     // 'processing-instruction' 'function'\n    case 77906:                     // 'attribute' 'if'\n    case 77945:                     // 'element' 'if'\n    case 78008:                     // 'namespace' 'if'\n    case 78040:                     // 'processing-instruction' 'if'\n    case 78418:                     // 'attribute' 'import'\n    case 78457:                     // 'element' 'import'\n    case 78520:                     // 'namespace' 'import'\n    case 78552:                     // 'processing-instruction' 'import'\n    case 78930:                     // 'attribute' 'in'\n    case 78969:                     // 'element' 'in'\n    case 79032:                     // 'namespace' 'in'\n    case 79064:                     // 'processing-instruction' 'in'\n    case 79442:                     // 'attribute' 'index'\n    case 79481:                     // 'element' 'index'\n    case 79544:                     // 'namespace' 'index'\n    case 79576:                     // 'processing-instruction' 'index'\n    case 81490:                     // 'attribute' 'insert'\n    case 81529:                     // 'element' 'insert'\n    case 81592:                     // 'namespace' 'insert'\n    case 81624:                     // 'processing-instruction' 'insert'\n    case 82514:                     // 'attribute' 'integrity'\n    case 82553:                     // 'element' 'integrity'\n    case 82616:                     // 'namespace' 'integrity'\n    case 82648:                     // 'processing-instruction' 'integrity'\n    case 84562:                     // 'attribute' 'item'\n    case 84601:                     // 'element' 'item'\n    case 84664:                     // 'namespace' 'item'\n    case 84696:                     // 'processing-instruction' 'item'\n    case 85074:                     // 'attribute' 'json'\n    case 85113:                     // 'element' 'json'\n    case 85176:                     // 'namespace' 'json'\n    case 85208:                     // 'processing-instruction' 'json'\n    case 85586:                     // 'attribute' 'json-item'\n    case 85625:                     // 'element' 'json-item'\n    case 87122:                     // 'attribute' 'last'\n    case 87161:                     // 'element' 'last'\n    case 87224:                     // 'namespace' 'last'\n    case 87256:                     // 'processing-instruction' 'last'\n    case 87634:                     // 'attribute' 'lax'\n    case 87673:                     // 'element' 'lax'\n    case 87736:                     // 'namespace' 'lax'\n    case 87768:                     // 'processing-instruction' 'lax'\n    case 90194:                     // 'attribute' 'loop'\n    case 90233:                     // 'element' 'loop'\n    case 90296:                     // 'namespace' 'loop'\n    case 90328:                     // 'processing-instruction' 'loop'\n    case 93266:                     // 'attribute' 'module'\n    case 93305:                     // 'element' 'module'\n    case 93368:                     // 'namespace' 'module'\n    case 93400:                     // 'processing-instruction' 'module'\n    case 94290:                     // 'attribute' 'namespace'\n    case 94329:                     // 'element' 'namespace'\n    case 94392:                     // 'namespace' 'namespace'\n    case 94424:                     // 'processing-instruction' 'namespace'\n    case 94802:                     // 'attribute' 'namespace-node'\n    case 94841:                     // 'element' 'namespace-node'\n    case 94904:                     // 'namespace' 'namespace-node'\n    case 94936:                     // 'processing-instruction' 'namespace-node'\n    case 97874:                     // 'attribute' 'node'\n    case 97913:                     // 'element' 'node'\n    case 97976:                     // 'namespace' 'node'\n    case 98008:                     // 'processing-instruction' 'node'\n    case 98386:                     // 'attribute' 'nodes'\n    case 98425:                     // 'element' 'nodes'\n    case 98488:                     // 'namespace' 'nodes'\n    case 98520:                     // 'processing-instruction' 'nodes'\n    case 99410:                     // 'attribute' 'object'\n    case 99449:                     // 'element' 'object'\n    case 99512:                     // 'namespace' 'object'\n    case 99544:                     // 'processing-instruction' 'object'\n    case 101970:                    // 'attribute' 'option'\n    case 102009:                    // 'element' 'option'\n    case 102072:                    // 'namespace' 'option'\n    case 102104:                    // 'processing-instruction' 'option'\n    case 103506:                    // 'attribute' 'ordered'\n    case 103545:                    // 'element' 'ordered'\n    case 103608:                    // 'namespace' 'ordered'\n    case 103640:                    // 'processing-instruction' 'ordered'\n    case 104018:                    // 'attribute' 'ordering'\n    case 104057:                    // 'element' 'ordering'\n    case 104120:                    // 'namespace' 'ordering'\n    case 104152:                    // 'processing-instruction' 'ordering'\n    case 105554:                    // 'attribute' 'parent'\n    case 105593:                    // 'element' 'parent'\n    case 105656:                    // 'namespace' 'parent'\n    case 105688:                    // 'processing-instruction' 'parent'\n    case 108626:                    // 'attribute' 'preceding'\n    case 108665:                    // 'element' 'preceding'\n    case 108728:                    // 'namespace' 'preceding'\n    case 108760:                    // 'processing-instruction' 'preceding'\n    case 109138:                    // 'attribute' 'preceding-sibling'\n    case 109177:                    // 'element' 'preceding-sibling'\n    case 109240:                    // 'namespace' 'preceding-sibling'\n    case 109272:                    // 'processing-instruction' 'preceding-sibling'\n    case 110674:                    // 'attribute' 'processing-instruction'\n    case 110713:                    // 'element' 'processing-instruction'\n    case 110776:                    // 'namespace' 'processing-instruction'\n    case 110808:                    // 'processing-instruction' 'processing-instruction'\n    case 111698:                    // 'attribute' 'rename'\n    case 111737:                    // 'element' 'rename'\n    case 111800:                    // 'namespace' 'rename'\n    case 111832:                    // 'processing-instruction' 'rename'\n    case 112210:                    // 'attribute' 'replace'\n    case 112249:                    // 'element' 'replace'\n    case 112312:                    // 'namespace' 'replace'\n    case 112344:                    // 'processing-instruction' 'replace'\n    case 113234:                    // 'attribute' 'returning'\n    case 113273:                    // 'element' 'returning'\n    case 113336:                    // 'namespace' 'returning'\n    case 113368:                    // 'processing-instruction' 'returning'\n    case 113746:                    // 'attribute' 'revalidation'\n    case 113785:                    // 'element' 'revalidation'\n    case 113848:                    // 'namespace' 'revalidation'\n    case 113880:                    // 'processing-instruction' 'revalidation'\n    case 115282:                    // 'attribute' 'schema'\n    case 115321:                    // 'element' 'schema'\n    case 115384:                    // 'namespace' 'schema'\n    case 115416:                    // 'processing-instruction' 'schema'\n    case 115794:                    // 'attribute' 'schema-attribute'\n    case 115833:                    // 'element' 'schema-attribute'\n    case 115896:                    // 'namespace' 'schema-attribute'\n    case 115928:                    // 'processing-instruction' 'schema-attribute'\n    case 116306:                    // 'attribute' 'schema-element'\n    case 116345:                    // 'element' 'schema-element'\n    case 116408:                    // 'namespace' 'schema-element'\n    case 116440:                    // 'processing-instruction' 'schema-element'\n    case 116818:                    // 'attribute' 'score'\n    case 116857:                    // 'element' 'score'\n    case 116920:                    // 'namespace' 'score'\n    case 116952:                    // 'processing-instruction' 'score'\n    case 117330:                    // 'attribute' 'self'\n    case 117369:                    // 'element' 'self'\n    case 117432:                    // 'namespace' 'self'\n    case 117464:                    // 'processing-instruction' 'self'\n    case 119890:                    // 'attribute' 'sliding'\n    case 119929:                    // 'element' 'sliding'\n    case 119992:                    // 'namespace' 'sliding'\n    case 120024:                    // 'processing-instruction' 'sliding'\n    case 120402:                    // 'attribute' 'some'\n    case 120441:                    // 'element' 'some'\n    case 120504:                    // 'namespace' 'some'\n    case 120536:                    // 'processing-instruction' 'some'\n    case 122962:                    // 'attribute' 'strict'\n    case 123001:                    // 'element' 'strict'\n    case 123064:                    // 'namespace' 'strict'\n    case 123096:                    // 'processing-instruction' 'strict'\n    case 123986:                    // 'attribute' 'structured-item'\n    case 124025:                    // 'element' 'structured-item'\n    case 124498:                    // 'attribute' 'switch'\n    case 124537:                    // 'element' 'switch'\n    case 124600:                    // 'namespace' 'switch'\n    case 124632:                    // 'processing-instruction' 'switch'\n    case 125010:                    // 'attribute' 'text'\n    case 125049:                    // 'element' 'text'\n    case 125112:                    // 'namespace' 'text'\n    case 125144:                    // 'processing-instruction' 'text'\n    case 128082:                    // 'attribute' 'try'\n    case 128121:                    // 'element' 'try'\n    case 128184:                    // 'namespace' 'try'\n    case 128216:                    // 'processing-instruction' 'try'\n    case 128594:                    // 'attribute' 'tumbling'\n    case 128633:                    // 'element' 'tumbling'\n    case 128696:                    // 'namespace' 'tumbling'\n    case 128728:                    // 'processing-instruction' 'tumbling'\n    case 129106:                    // 'attribute' 'type'\n    case 129145:                    // 'element' 'type'\n    case 129208:                    // 'namespace' 'type'\n    case 129240:                    // 'processing-instruction' 'type'\n    case 129618:                    // 'attribute' 'typeswitch'\n    case 129657:                    // 'element' 'typeswitch'\n    case 129720:                    // 'namespace' 'typeswitch'\n    case 129752:                    // 'processing-instruction' 'typeswitch'\n    case 131154:                    // 'attribute' 'unordered'\n    case 131193:                    // 'element' 'unordered'\n    case 131256:                    // 'namespace' 'unordered'\n    case 131288:                    // 'processing-instruction' 'unordered'\n    case 131666:                    // 'attribute' 'updating'\n    case 131705:                    // 'element' 'updating'\n    case 131768:                    // 'namespace' 'updating'\n    case 131800:                    // 'processing-instruction' 'updating'\n    case 133202:                    // 'attribute' 'validate'\n    case 133241:                    // 'element' 'validate'\n    case 133304:                    // 'namespace' 'validate'\n    case 133336:                    // 'processing-instruction' 'validate'\n    case 133714:                    // 'attribute' 'value'\n    case 133753:                    // 'element' 'value'\n    case 133816:                    // 'namespace' 'value'\n    case 133848:                    // 'processing-instruction' 'value'\n    case 134226:                    // 'attribute' 'variable'\n    case 134265:                    // 'element' 'variable'\n    case 134328:                    // 'namespace' 'variable'\n    case 134360:                    // 'processing-instruction' 'variable'\n    case 134738:                    // 'attribute' 'version'\n    case 134777:                    // 'element' 'version'\n    case 134840:                    // 'namespace' 'version'\n    case 134872:                    // 'processing-instruction' 'version'\n    case 136786:                    // 'attribute' 'while'\n    case 136825:                    // 'element' 'while'\n    case 136888:                    // 'namespace' 'while'\n    case 136920:                    // 'processing-instruction' 'while'\n    case 140370:                    // 'attribute' 'xquery'\n    case 140409:                    // 'element' 'xquery'\n    case 140472:                    // 'namespace' 'xquery'\n    case 140504:                    // 'processing-instruction' 'xquery'\n    case 141394:                    // 'attribute' '{'\n    case 141408:                    // 'comment' '{'\n    case 141431:                    // 'document' '{'\n    case 141433:                    // 'element' '{'\n    case 141496:                    // 'namespace' '{'\n    case 141514:                    // 'ordered' '{'\n    case 141528:                    // 'processing-instruction' '{'\n    case 141556:                    // 'text' '{'\n    case 141568:                    // 'unordered' '{'\n      parse_PostfixExpr();\n      break;\n    default:\n      parse_AxisStep();\n    }\n    eventHandler.endNonterminal(\"StepExpr\", e0);\n  }\n\n  function try_StepExpr()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(284);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 121:                       // 'element'\n      lookahead2W(282);             // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 184:                       // 'namespace'\n    case 216:                       // 'processing-instruction'\n      lookahead2W(281);             // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' |\n      break;\n    case 96:                        // 'comment'\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 244:                       // 'text'\n    case 256:                       // 'unordered'\n      lookahead2W(246);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 78:                        // 'array'\n    case 124:                       // 'empty-sequence'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(239);             // S^WS | EOF | '!' | '!=' | '#' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 229:                       // 'self'\n      lookahead2W(245);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 120:                       // 'document-node'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 145:                       // 'function'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 185:                       // 'namespace-node'\n    case 186:                       // 'ne'\n    case 191:                       // 'node'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 228:                       // 'score'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(243);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 35922                 // 'attribute' 'after'\n     || lk == 35961                 // 'element' 'after'\n     || lk == 36024                 // 'namespace' 'after'\n     || lk == 36056                 // 'processing-instruction' 'after'\n     || lk == 38482                 // 'attribute' 'and'\n     || lk == 38521                 // 'element' 'and'\n     || lk == 38584                 // 'namespace' 'and'\n     || lk == 38616                 // 'processing-instruction' 'and'\n     || lk == 40530                 // 'attribute' 'as'\n     || lk == 40569                 // 'element' 'as'\n     || lk == 40632                 // 'namespace' 'as'\n     || lk == 40664                 // 'processing-instruction' 'as'\n     || lk == 41042                 // 'attribute' 'ascending'\n     || lk == 41081                 // 'element' 'ascending'\n     || lk == 41144                 // 'namespace' 'ascending'\n     || lk == 41176                 // 'processing-instruction' 'ascending'\n     || lk == 41554                 // 'attribute' 'at'\n     || lk == 41593                 // 'element' 'at'\n     || lk == 41656                 // 'namespace' 'at'\n     || lk == 41688                 // 'processing-instruction' 'at'\n     || lk == 43090                 // 'attribute' 'before'\n     || lk == 43129                 // 'element' 'before'\n     || lk == 43192                 // 'namespace' 'before'\n     || lk == 43224                 // 'processing-instruction' 'before'\n     || lk == 45138                 // 'attribute' 'case'\n     || lk == 45177                 // 'element' 'case'\n     || lk == 45240                 // 'namespace' 'case'\n     || lk == 45272                 // 'processing-instruction' 'case'\n     || lk == 45650                 // 'attribute' 'cast'\n     || lk == 45689                 // 'element' 'cast'\n     || lk == 45752                 // 'namespace' 'cast'\n     || lk == 45784                 // 'processing-instruction' 'cast'\n     || lk == 46162                 // 'attribute' 'castable'\n     || lk == 46201                 // 'element' 'castable'\n     || lk == 46264                 // 'namespace' 'castable'\n     || lk == 46296                 // 'processing-instruction' 'castable'\n     || lk == 48210                 // 'attribute' 'collation'\n     || lk == 48249                 // 'element' 'collation'\n     || lk == 48312                 // 'namespace' 'collation'\n     || lk == 48344                 // 'processing-instruction' 'collation'\n     || lk == 53842                 // 'attribute' 'count'\n     || lk == 53881                 // 'element' 'count'\n     || lk == 53944                 // 'namespace' 'count'\n     || lk == 53976                 // 'processing-instruction' 'count'\n     || lk == 55890                 // 'attribute' 'default'\n     || lk == 55929                 // 'element' 'default'\n     || lk == 55992                 // 'namespace' 'default'\n     || lk == 56024                 // 'processing-instruction' 'default'\n     || lk == 57938                 // 'attribute' 'descending'\n     || lk == 57977                 // 'element' 'descending'\n     || lk == 58040                 // 'namespace' 'descending'\n     || lk == 58072                 // 'processing-instruction' 'descending'\n     || lk == 60498                 // 'attribute' 'div'\n     || lk == 60537                 // 'element' 'div'\n     || lk == 60600                 // 'namespace' 'div'\n     || lk == 60632                 // 'processing-instruction' 'div'\n     || lk == 62546                 // 'attribute' 'else'\n     || lk == 62585                 // 'element' 'else'\n     || lk == 62648                 // 'namespace' 'else'\n     || lk == 62680                 // 'processing-instruction' 'else'\n     || lk == 63058                 // 'attribute' 'empty'\n     || lk == 63097                 // 'element' 'empty'\n     || lk == 63160                 // 'namespace' 'empty'\n     || lk == 63192                 // 'processing-instruction' 'empty'\n     || lk == 64594                 // 'attribute' 'end'\n     || lk == 64633                 // 'element' 'end'\n     || lk == 64696                 // 'namespace' 'end'\n     || lk == 64728                 // 'processing-instruction' 'end'\n     || lk == 65618                 // 'attribute' 'eq'\n     || lk == 65657                 // 'element' 'eq'\n     || lk == 65720                 // 'namespace' 'eq'\n     || lk == 65752                 // 'processing-instruction' 'eq'\n     || lk == 67154                 // 'attribute' 'except'\n     || lk == 67193                 // 'element' 'except'\n     || lk == 67256                 // 'namespace' 'except'\n     || lk == 67288                 // 'processing-instruction' 'except'\n     || lk == 70226                 // 'attribute' 'for'\n     || lk == 70265                 // 'element' 'for'\n     || lk == 70328                 // 'namespace' 'for'\n     || lk == 70360                 // 'processing-instruction' 'for'\n     || lk == 74834                 // 'attribute' 'ge'\n     || lk == 74873                 // 'element' 'ge'\n     || lk == 74936                 // 'namespace' 'ge'\n     || lk == 74968                 // 'processing-instruction' 'ge'\n     || lk == 75858                 // 'attribute' 'group'\n     || lk == 75897                 // 'element' 'group'\n     || lk == 75960                 // 'namespace' 'group'\n     || lk == 75992                 // 'processing-instruction' 'group'\n     || lk == 76882                 // 'attribute' 'gt'\n     || lk == 76921                 // 'element' 'gt'\n     || lk == 76984                 // 'namespace' 'gt'\n     || lk == 77016                 // 'processing-instruction' 'gt'\n     || lk == 77394                 // 'attribute' 'idiv'\n     || lk == 77433                 // 'element' 'idiv'\n     || lk == 77496                 // 'namespace' 'idiv'\n     || lk == 77528                 // 'processing-instruction' 'idiv'\n     || lk == 82002                 // 'attribute' 'instance'\n     || lk == 82041                 // 'element' 'instance'\n     || lk == 82104                 // 'namespace' 'instance'\n     || lk == 82136                 // 'processing-instruction' 'instance'\n     || lk == 83026                 // 'attribute' 'intersect'\n     || lk == 83065                 // 'element' 'intersect'\n     || lk == 83128                 // 'namespace' 'intersect'\n     || lk == 83160                 // 'processing-instruction' 'intersect'\n     || lk == 83538                 // 'attribute' 'into'\n     || lk == 83577                 // 'element' 'into'\n     || lk == 83640                 // 'namespace' 'into'\n     || lk == 83672                 // 'processing-instruction' 'into'\n     || lk == 84050                 // 'attribute' 'is'\n     || lk == 84089                 // 'element' 'is'\n     || lk == 84152                 // 'namespace' 'is'\n     || lk == 84184                 // 'processing-instruction' 'is'\n     || lk == 88146                 // 'attribute' 'le'\n     || lk == 88185                 // 'element' 'le'\n     || lk == 88248                 // 'namespace' 'le'\n     || lk == 88280                 // 'processing-instruction' 'le'\n     || lk == 89170                 // 'attribute' 'let'\n     || lk == 89209                 // 'element' 'let'\n     || lk == 89272                 // 'namespace' 'let'\n     || lk == 89304                 // 'processing-instruction' 'let'\n     || lk == 91218                 // 'attribute' 'lt'\n     || lk == 91257                 // 'element' 'lt'\n     || lk == 91320                 // 'namespace' 'lt'\n     || lk == 91352                 // 'processing-instruction' 'lt'\n     || lk == 92242                 // 'attribute' 'mod'\n     || lk == 92281                 // 'element' 'mod'\n     || lk == 92344                 // 'namespace' 'mod'\n     || lk == 92376                 // 'processing-instruction' 'mod'\n     || lk == 92754                 // 'attribute' 'modify'\n     || lk == 92793                 // 'element' 'modify'\n     || lk == 92856                 // 'namespace' 'modify'\n     || lk == 92888                 // 'processing-instruction' 'modify'\n     || lk == 95314                 // 'attribute' 'ne'\n     || lk == 95353                 // 'element' 'ne'\n     || lk == 95416                 // 'namespace' 'ne'\n     || lk == 95448                 // 'processing-instruction' 'ne'\n     || lk == 101458                // 'attribute' 'only'\n     || lk == 101497                // 'element' 'only'\n     || lk == 101560                // 'namespace' 'only'\n     || lk == 101592                // 'processing-instruction' 'only'\n     || lk == 102482                // 'attribute' 'or'\n     || lk == 102521                // 'element' 'or'\n     || lk == 102584                // 'namespace' 'or'\n     || lk == 102616                // 'processing-instruction' 'or'\n     || lk == 102994                // 'attribute' 'order'\n     || lk == 103033                // 'element' 'order'\n     || lk == 103096                // 'namespace' 'order'\n     || lk == 103128                // 'processing-instruction' 'order'\n     || lk == 112722                // 'attribute' 'return'\n     || lk == 112761                // 'element' 'return'\n     || lk == 112824                // 'namespace' 'return'\n     || lk == 112856                // 'processing-instruction' 'return'\n     || lk == 114770                // 'attribute' 'satisfies'\n     || lk == 114809                // 'element' 'satisfies'\n     || lk == 114872                // 'namespace' 'satisfies'\n     || lk == 114904                // 'processing-instruction' 'satisfies'\n     || lk == 120914                // 'attribute' 'stable'\n     || lk == 120953                // 'element' 'stable'\n     || lk == 121016                // 'namespace' 'stable'\n     || lk == 121048                // 'processing-instruction' 'stable'\n     || lk == 121426                // 'attribute' 'start'\n     || lk == 121465                // 'element' 'start'\n     || lk == 121528                // 'namespace' 'start'\n     || lk == 121560                // 'processing-instruction' 'start'\n     || lk == 127058                // 'attribute' 'to'\n     || lk == 127097                // 'element' 'to'\n     || lk == 127160                // 'namespace' 'to'\n     || lk == 127192                // 'processing-instruction' 'to'\n     || lk == 127570                // 'attribute' 'treat'\n     || lk == 127609                // 'element' 'treat'\n     || lk == 127672                // 'namespace' 'treat'\n     || lk == 127704                // 'processing-instruction' 'treat'\n     || lk == 130130                // 'attribute' 'union'\n     || lk == 130169                // 'element' 'union'\n     || lk == 130232                // 'namespace' 'union'\n     || lk == 130264                // 'processing-instruction' 'union'\n     || lk == 136274                // 'attribute' 'where'\n     || lk == 136313                // 'element' 'where'\n     || lk == 136376                // 'namespace' 'where'\n     || lk == 136408                // 'processing-instruction' 'where'\n     || lk == 138322                // 'attribute' 'with'\n     || lk == 138361                // 'element' 'with'\n     || lk == 138424                // 'namespace' 'with'\n     || lk == 138456)               // 'processing-instruction' 'with'\n    {\n      lk = memoized(4, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_PostfixExpr();\n          memoize(4, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(4, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n    case 31:                        // '$'\n    case 32:                        // '%'\n    case 34:                        // '('\n    case 44:                        // '.'\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n    case 68:                        // '['\n    case 276:                       // '{'\n    case 278:                       // '{|'\n    case 3154:                      // 'attribute' EQName^Token\n    case 3193:                      // 'element' EQName^Token\n    case 9912:                      // 'namespace' NCName^Token\n    case 9944:                      // 'processing-instruction' NCName^Token\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14926:                     // 'array' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14968:                     // 'document-node' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14972:                     // 'empty-sequence' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14993:                     // 'function' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15000:                     // 'if' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15013:                     // 'item' '#'\n    case 15014:                     // 'json' '#'\n    case 15015:                     // 'json-item' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15033:                     // 'namespace-node' '#'\n    case 15034:                     // 'ne' '#'\n    case 15039:                     // 'node' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15074:                     // 'schema-attribute' '#'\n    case 15075:                     // 'schema-element' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15090:                     // 'structured-item' '#'\n    case 15091:                     // 'switch' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15101:                     // 'typeswitch' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17553:                     // 'function' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n    case 36946:                     // 'attribute' 'allowing'\n    case 36985:                     // 'element' 'allowing'\n    case 37048:                     // 'namespace' 'allowing'\n    case 37080:                     // 'processing-instruction' 'allowing'\n    case 37458:                     // 'attribute' 'ancestor'\n    case 37497:                     // 'element' 'ancestor'\n    case 37560:                     // 'namespace' 'ancestor'\n    case 37592:                     // 'processing-instruction' 'ancestor'\n    case 37970:                     // 'attribute' 'ancestor-or-self'\n    case 38009:                     // 'element' 'ancestor-or-self'\n    case 38072:                     // 'namespace' 'ancestor-or-self'\n    case 38104:                     // 'processing-instruction' 'ancestor-or-self'\n    case 39506:                     // 'attribute' 'append'\n    case 39545:                     // 'element' 'append'\n    case 39608:                     // 'namespace' 'append'\n    case 39640:                     // 'processing-instruction' 'append'\n    case 40018:                     // 'attribute' 'array'\n    case 40057:                     // 'element' 'array'\n    case 42066:                     // 'attribute' 'attribute'\n    case 42105:                     // 'element' 'attribute'\n    case 42168:                     // 'namespace' 'attribute'\n    case 42200:                     // 'processing-instruction' 'attribute'\n    case 42578:                     // 'attribute' 'base-uri'\n    case 42617:                     // 'element' 'base-uri'\n    case 42680:                     // 'namespace' 'base-uri'\n    case 42712:                     // 'processing-instruction' 'base-uri'\n    case 43602:                     // 'attribute' 'boundary-space'\n    case 43641:                     // 'element' 'boundary-space'\n    case 43704:                     // 'namespace' 'boundary-space'\n    case 43736:                     // 'processing-instruction' 'boundary-space'\n    case 44114:                     // 'attribute' 'break'\n    case 44153:                     // 'element' 'break'\n    case 44216:                     // 'namespace' 'break'\n    case 44248:                     // 'processing-instruction' 'break'\n    case 46674:                     // 'attribute' 'catch'\n    case 46713:                     // 'element' 'catch'\n    case 46776:                     // 'namespace' 'catch'\n    case 46808:                     // 'processing-instruction' 'catch'\n    case 47698:                     // 'attribute' 'child'\n    case 47737:                     // 'element' 'child'\n    case 47800:                     // 'namespace' 'child'\n    case 47832:                     // 'processing-instruction' 'child'\n    case 49234:                     // 'attribute' 'comment'\n    case 49273:                     // 'element' 'comment'\n    case 49336:                     // 'namespace' 'comment'\n    case 49368:                     // 'processing-instruction' 'comment'\n    case 49746:                     // 'attribute' 'constraint'\n    case 49785:                     // 'element' 'constraint'\n    case 49848:                     // 'namespace' 'constraint'\n    case 49880:                     // 'processing-instruction' 'constraint'\n    case 50258:                     // 'attribute' 'construction'\n    case 50297:                     // 'element' 'construction'\n    case 50360:                     // 'namespace' 'construction'\n    case 50392:                     // 'processing-instruction' 'construction'\n    case 51794:                     // 'attribute' 'context'\n    case 51833:                     // 'element' 'context'\n    case 51896:                     // 'namespace' 'context'\n    case 51928:                     // 'processing-instruction' 'context'\n    case 52306:                     // 'attribute' 'continue'\n    case 52345:                     // 'element' 'continue'\n    case 52408:                     // 'namespace' 'continue'\n    case 52440:                     // 'processing-instruction' 'continue'\n    case 52818:                     // 'attribute' 'copy'\n    case 52857:                     // 'element' 'copy'\n    case 52920:                     // 'namespace' 'copy'\n    case 52952:                     // 'processing-instruction' 'copy'\n    case 53330:                     // 'attribute' 'copy-namespaces'\n    case 53369:                     // 'element' 'copy-namespaces'\n    case 53432:                     // 'namespace' 'copy-namespaces'\n    case 53464:                     // 'processing-instruction' 'copy-namespaces'\n    case 54354:                     // 'attribute' 'decimal-format'\n    case 54393:                     // 'element' 'decimal-format'\n    case 54456:                     // 'namespace' 'decimal-format'\n    case 54488:                     // 'processing-instruction' 'decimal-format'\n    case 55378:                     // 'attribute' 'declare'\n    case 55417:                     // 'element' 'declare'\n    case 55480:                     // 'namespace' 'declare'\n    case 55512:                     // 'processing-instruction' 'declare'\n    case 56402:                     // 'attribute' 'delete'\n    case 56441:                     // 'element' 'delete'\n    case 56504:                     // 'namespace' 'delete'\n    case 56536:                     // 'processing-instruction' 'delete'\n    case 56914:                     // 'attribute' 'descendant'\n    case 56953:                     // 'element' 'descendant'\n    case 57016:                     // 'namespace' 'descendant'\n    case 57048:                     // 'processing-instruction' 'descendant'\n    case 57426:                     // 'attribute' 'descendant-or-self'\n    case 57465:                     // 'element' 'descendant-or-self'\n    case 57528:                     // 'namespace' 'descendant-or-self'\n    case 57560:                     // 'processing-instruction' 'descendant-or-self'\n    case 61010:                     // 'attribute' 'document'\n    case 61049:                     // 'element' 'document'\n    case 61112:                     // 'namespace' 'document'\n    case 61144:                     // 'processing-instruction' 'document'\n    case 61522:                     // 'attribute' 'document-node'\n    case 61561:                     // 'element' 'document-node'\n    case 61624:                     // 'namespace' 'document-node'\n    case 61656:                     // 'processing-instruction' 'document-node'\n    case 62034:                     // 'attribute' 'element'\n    case 62073:                     // 'element' 'element'\n    case 62136:                     // 'namespace' 'element'\n    case 62168:                     // 'processing-instruction' 'element'\n    case 63570:                     // 'attribute' 'empty-sequence'\n    case 63609:                     // 'element' 'empty-sequence'\n    case 63672:                     // 'namespace' 'empty-sequence'\n    case 63704:                     // 'processing-instruction' 'empty-sequence'\n    case 64082:                     // 'attribute' 'encoding'\n    case 64121:                     // 'element' 'encoding'\n    case 64184:                     // 'namespace' 'encoding'\n    case 64216:                     // 'processing-instruction' 'encoding'\n    case 66130:                     // 'attribute' 'every'\n    case 66169:                     // 'element' 'every'\n    case 66232:                     // 'namespace' 'every'\n    case 66264:                     // 'processing-instruction' 'every'\n    case 67666:                     // 'attribute' 'exit'\n    case 67705:                     // 'element' 'exit'\n    case 67768:                     // 'namespace' 'exit'\n    case 67800:                     // 'processing-instruction' 'exit'\n    case 68178:                     // 'attribute' 'external'\n    case 68217:                     // 'element' 'external'\n    case 68280:                     // 'namespace' 'external'\n    case 68312:                     // 'processing-instruction' 'external'\n    case 68690:                     // 'attribute' 'first'\n    case 68729:                     // 'element' 'first'\n    case 68792:                     // 'namespace' 'first'\n    case 68824:                     // 'processing-instruction' 'first'\n    case 69202:                     // 'attribute' 'following'\n    case 69241:                     // 'element' 'following'\n    case 69304:                     // 'namespace' 'following'\n    case 69336:                     // 'processing-instruction' 'following'\n    case 69714:                     // 'attribute' 'following-sibling'\n    case 69753:                     // 'element' 'following-sibling'\n    case 69816:                     // 'namespace' 'following-sibling'\n    case 69848:                     // 'processing-instruction' 'following-sibling'\n    case 72274:                     // 'attribute' 'ft-option'\n    case 72313:                     // 'element' 'ft-option'\n    case 72376:                     // 'namespace' 'ft-option'\n    case 72408:                     // 'processing-instruction' 'ft-option'\n    case 74322:                     // 'attribute' 'function'\n    case 74361:                     // 'element' 'function'\n    case 74424:                     // 'namespace' 'function'\n    case 74456:                     // 'processing-instruction' 'function'\n    case 77906:                     // 'attribute' 'if'\n    case 77945:                     // 'element' 'if'\n    case 78008:                     // 'namespace' 'if'\n    case 78040:                     // 'processing-instruction' 'if'\n    case 78418:                     // 'attribute' 'import'\n    case 78457:                     // 'element' 'import'\n    case 78520:                     // 'namespace' 'import'\n    case 78552:                     // 'processing-instruction' 'import'\n    case 78930:                     // 'attribute' 'in'\n    case 78969:                     // 'element' 'in'\n    case 79032:                     // 'namespace' 'in'\n    case 79064:                     // 'processing-instruction' 'in'\n    case 79442:                     // 'attribute' 'index'\n    case 79481:                     // 'element' 'index'\n    case 79544:                     // 'namespace' 'index'\n    case 79576:                     // 'processing-instruction' 'index'\n    case 81490:                     // 'attribute' 'insert'\n    case 81529:                     // 'element' 'insert'\n    case 81592:                     // 'namespace' 'insert'\n    case 81624:                     // 'processing-instruction' 'insert'\n    case 82514:                     // 'attribute' 'integrity'\n    case 82553:                     // 'element' 'integrity'\n    case 82616:                     // 'namespace' 'integrity'\n    case 82648:                     // 'processing-instruction' 'integrity'\n    case 84562:                     // 'attribute' 'item'\n    case 84601:                     // 'element' 'item'\n    case 84664:                     // 'namespace' 'item'\n    case 84696:                     // 'processing-instruction' 'item'\n    case 85074:                     // 'attribute' 'json'\n    case 85113:                     // 'element' 'json'\n    case 85176:                     // 'namespace' 'json'\n    case 85208:                     // 'processing-instruction' 'json'\n    case 85586:                     // 'attribute' 'json-item'\n    case 85625:                     // 'element' 'json-item'\n    case 87122:                     // 'attribute' 'last'\n    case 87161:                     // 'element' 'last'\n    case 87224:                     // 'namespace' 'last'\n    case 87256:                     // 'processing-instruction' 'last'\n    case 87634:                     // 'attribute' 'lax'\n    case 87673:                     // 'element' 'lax'\n    case 87736:                     // 'namespace' 'lax'\n    case 87768:                     // 'processing-instruction' 'lax'\n    case 90194:                     // 'attribute' 'loop'\n    case 90233:                     // 'element' 'loop'\n    case 90296:                     // 'namespace' 'loop'\n    case 90328:                     // 'processing-instruction' 'loop'\n    case 93266:                     // 'attribute' 'module'\n    case 93305:                     // 'element' 'module'\n    case 93368:                     // 'namespace' 'module'\n    case 93400:                     // 'processing-instruction' 'module'\n    case 94290:                     // 'attribute' 'namespace'\n    case 94329:                     // 'element' 'namespace'\n    case 94392:                     // 'namespace' 'namespace'\n    case 94424:                     // 'processing-instruction' 'namespace'\n    case 94802:                     // 'attribute' 'namespace-node'\n    case 94841:                     // 'element' 'namespace-node'\n    case 94904:                     // 'namespace' 'namespace-node'\n    case 94936:                     // 'processing-instruction' 'namespace-node'\n    case 97874:                     // 'attribute' 'node'\n    case 97913:                     // 'element' 'node'\n    case 97976:                     // 'namespace' 'node'\n    case 98008:                     // 'processing-instruction' 'node'\n    case 98386:                     // 'attribute' 'nodes'\n    case 98425:                     // 'element' 'nodes'\n    case 98488:                     // 'namespace' 'nodes'\n    case 98520:                     // 'processing-instruction' 'nodes'\n    case 99410:                     // 'attribute' 'object'\n    case 99449:                     // 'element' 'object'\n    case 99512:                     // 'namespace' 'object'\n    case 99544:                     // 'processing-instruction' 'object'\n    case 101970:                    // 'attribute' 'option'\n    case 102009:                    // 'element' 'option'\n    case 102072:                    // 'namespace' 'option'\n    case 102104:                    // 'processing-instruction' 'option'\n    case 103506:                    // 'attribute' 'ordered'\n    case 103545:                    // 'element' 'ordered'\n    case 103608:                    // 'namespace' 'ordered'\n    case 103640:                    // 'processing-instruction' 'ordered'\n    case 104018:                    // 'attribute' 'ordering'\n    case 104057:                    // 'element' 'ordering'\n    case 104120:                    // 'namespace' 'ordering'\n    case 104152:                    // 'processing-instruction' 'ordering'\n    case 105554:                    // 'attribute' 'parent'\n    case 105593:                    // 'element' 'parent'\n    case 105656:                    // 'namespace' 'parent'\n    case 105688:                    // 'processing-instruction' 'parent'\n    case 108626:                    // 'attribute' 'preceding'\n    case 108665:                    // 'element' 'preceding'\n    case 108728:                    // 'namespace' 'preceding'\n    case 108760:                    // 'processing-instruction' 'preceding'\n    case 109138:                    // 'attribute' 'preceding-sibling'\n    case 109177:                    // 'element' 'preceding-sibling'\n    case 109240:                    // 'namespace' 'preceding-sibling'\n    case 109272:                    // 'processing-instruction' 'preceding-sibling'\n    case 110674:                    // 'attribute' 'processing-instruction'\n    case 110713:                    // 'element' 'processing-instruction'\n    case 110776:                    // 'namespace' 'processing-instruction'\n    case 110808:                    // 'processing-instruction' 'processing-instruction'\n    case 111698:                    // 'attribute' 'rename'\n    case 111737:                    // 'element' 'rename'\n    case 111800:                    // 'namespace' 'rename'\n    case 111832:                    // 'processing-instruction' 'rename'\n    case 112210:                    // 'attribute' 'replace'\n    case 112249:                    // 'element' 'replace'\n    case 112312:                    // 'namespace' 'replace'\n    case 112344:                    // 'processing-instruction' 'replace'\n    case 113234:                    // 'attribute' 'returning'\n    case 113273:                    // 'element' 'returning'\n    case 113336:                    // 'namespace' 'returning'\n    case 113368:                    // 'processing-instruction' 'returning'\n    case 113746:                    // 'attribute' 'revalidation'\n    case 113785:                    // 'element' 'revalidation'\n    case 113848:                    // 'namespace' 'revalidation'\n    case 113880:                    // 'processing-instruction' 'revalidation'\n    case 115282:                    // 'attribute' 'schema'\n    case 115321:                    // 'element' 'schema'\n    case 115384:                    // 'namespace' 'schema'\n    case 115416:                    // 'processing-instruction' 'schema'\n    case 115794:                    // 'attribute' 'schema-attribute'\n    case 115833:                    // 'element' 'schema-attribute'\n    case 115896:                    // 'namespace' 'schema-attribute'\n    case 115928:                    // 'processing-instruction' 'schema-attribute'\n    case 116306:                    // 'attribute' 'schema-element'\n    case 116345:                    // 'element' 'schema-element'\n    case 116408:                    // 'namespace' 'schema-element'\n    case 116440:                    // 'processing-instruction' 'schema-element'\n    case 116818:                    // 'attribute' 'score'\n    case 116857:                    // 'element' 'score'\n    case 116920:                    // 'namespace' 'score'\n    case 116952:                    // 'processing-instruction' 'score'\n    case 117330:                    // 'attribute' 'self'\n    case 117369:                    // 'element' 'self'\n    case 117432:                    // 'namespace' 'self'\n    case 117464:                    // 'processing-instruction' 'self'\n    case 119890:                    // 'attribute' 'sliding'\n    case 119929:                    // 'element' 'sliding'\n    case 119992:                    // 'namespace' 'sliding'\n    case 120024:                    // 'processing-instruction' 'sliding'\n    case 120402:                    // 'attribute' 'some'\n    case 120441:                    // 'element' 'some'\n    case 120504:                    // 'namespace' 'some'\n    case 120536:                    // 'processing-instruction' 'some'\n    case 122962:                    // 'attribute' 'strict'\n    case 123001:                    // 'element' 'strict'\n    case 123064:                    // 'namespace' 'strict'\n    case 123096:                    // 'processing-instruction' 'strict'\n    case 123986:                    // 'attribute' 'structured-item'\n    case 124025:                    // 'element' 'structured-item'\n    case 124498:                    // 'attribute' 'switch'\n    case 124537:                    // 'element' 'switch'\n    case 124600:                    // 'namespace' 'switch'\n    case 124632:                    // 'processing-instruction' 'switch'\n    case 125010:                    // 'attribute' 'text'\n    case 125049:                    // 'element' 'text'\n    case 125112:                    // 'namespace' 'text'\n    case 125144:                    // 'processing-instruction' 'text'\n    case 128082:                    // 'attribute' 'try'\n    case 128121:                    // 'element' 'try'\n    case 128184:                    // 'namespace' 'try'\n    case 128216:                    // 'processing-instruction' 'try'\n    case 128594:                    // 'attribute' 'tumbling'\n    case 128633:                    // 'element' 'tumbling'\n    case 128696:                    // 'namespace' 'tumbling'\n    case 128728:                    // 'processing-instruction' 'tumbling'\n    case 129106:                    // 'attribute' 'type'\n    case 129145:                    // 'element' 'type'\n    case 129208:                    // 'namespace' 'type'\n    case 129240:                    // 'processing-instruction' 'type'\n    case 129618:                    // 'attribute' 'typeswitch'\n    case 129657:                    // 'element' 'typeswitch'\n    case 129720:                    // 'namespace' 'typeswitch'\n    case 129752:                    // 'processing-instruction' 'typeswitch'\n    case 131154:                    // 'attribute' 'unordered'\n    case 131193:                    // 'element' 'unordered'\n    case 131256:                    // 'namespace' 'unordered'\n    case 131288:                    // 'processing-instruction' 'unordered'\n    case 131666:                    // 'attribute' 'updating'\n    case 131705:                    // 'element' 'updating'\n    case 131768:                    // 'namespace' 'updating'\n    case 131800:                    // 'processing-instruction' 'updating'\n    case 133202:                    // 'attribute' 'validate'\n    case 133241:                    // 'element' 'validate'\n    case 133304:                    // 'namespace' 'validate'\n    case 133336:                    // 'processing-instruction' 'validate'\n    case 133714:                    // 'attribute' 'value'\n    case 133753:                    // 'element' 'value'\n    case 133816:                    // 'namespace' 'value'\n    case 133848:                    // 'processing-instruction' 'value'\n    case 134226:                    // 'attribute' 'variable'\n    case 134265:                    // 'element' 'variable'\n    case 134328:                    // 'namespace' 'variable'\n    case 134360:                    // 'processing-instruction' 'variable'\n    case 134738:                    // 'attribute' 'version'\n    case 134777:                    // 'element' 'version'\n    case 134840:                    // 'namespace' 'version'\n    case 134872:                    // 'processing-instruction' 'version'\n    case 136786:                    // 'attribute' 'while'\n    case 136825:                    // 'element' 'while'\n    case 136888:                    // 'namespace' 'while'\n    case 136920:                    // 'processing-instruction' 'while'\n    case 140370:                    // 'attribute' 'xquery'\n    case 140409:                    // 'element' 'xquery'\n    case 140472:                    // 'namespace' 'xquery'\n    case 140504:                    // 'processing-instruction' 'xquery'\n    case 141394:                    // 'attribute' '{'\n    case 141408:                    // 'comment' '{'\n    case 141431:                    // 'document' '{'\n    case 141433:                    // 'element' '{'\n    case 141496:                    // 'namespace' '{'\n    case 141514:                    // 'ordered' '{'\n    case 141528:                    // 'processing-instruction' '{'\n    case 141556:                    // 'text' '{'\n    case 141568:                    // 'unordered' '{'\n      try_PostfixExpr();\n      break;\n    case -3:\n      break;\n    default:\n      try_AxisStep();\n    }\n  }\n\n  function parse_AxisStep()\n  {\n    eventHandler.startNonterminal(\"AxisStep\", e0);\n    switch (l1)\n    {\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 45:                        // '..'\n    case 26185:                     // 'ancestor' '::'\n    case 26186:                     // 'ancestor-or-self' '::'\n    case 26318:                     // 'parent' '::'\n    case 26324:                     // 'preceding' '::'\n    case 26325:                     // 'preceding-sibling' '::'\n      parse_ReverseStep();\n      break;\n    default:\n      parse_ForwardStep();\n    }\n    lookahead1W(237);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n    whitespace();\n    parse_PredicateList();\n    eventHandler.endNonterminal(\"AxisStep\", e0);\n  }\n\n  function try_AxisStep()\n  {\n    switch (l1)\n    {\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 45:                        // '..'\n    case 26185:                     // 'ancestor' '::'\n    case 26186:                     // 'ancestor-or-self' '::'\n    case 26318:                     // 'parent' '::'\n    case 26324:                     // 'preceding' '::'\n    case 26325:                     // 'preceding-sibling' '::'\n      try_ReverseStep();\n      break;\n    default:\n      try_ForwardStep();\n    }\n    lookahead1W(237);               // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n    try_PredicateList();\n  }\n\n  function parse_ForwardStep()\n  {\n    eventHandler.startNonterminal(\"ForwardStep\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(244);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 229:                       // 'self'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26194:                     // 'attribute' '::'\n    case 26205:                     // 'child' '::'\n    case 26223:                     // 'descendant' '::'\n    case 26224:                     // 'descendant-or-self' '::'\n    case 26247:                     // 'following' '::'\n    case 26248:                     // 'following-sibling' '::'\n    case 26341:                     // 'self' '::'\n      parse_ForwardAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NodeTest();\n      break;\n    default:\n      parse_AbbrevForwardStep();\n    }\n    eventHandler.endNonterminal(\"ForwardStep\", e0);\n  }\n\n  function try_ForwardStep()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      lookahead2W(244);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    case 93:                        // 'child'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 229:                       // 'self'\n      lookahead2W(241);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 26194:                     // 'attribute' '::'\n    case 26205:                     // 'child' '::'\n    case 26223:                     // 'descendant' '::'\n    case 26224:                     // 'descendant-or-self' '::'\n    case 26247:                     // 'following' '::'\n    case 26248:                     // 'following-sibling' '::'\n    case 26341:                     // 'self' '::'\n      try_ForwardAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NodeTest();\n      break;\n    default:\n      try_AbbrevForwardStep();\n    }\n  }\n\n  function parse_ForwardAxis()\n  {\n    eventHandler.startNonterminal(\"ForwardAxis\", e0);\n    switch (l1)\n    {\n    case 93:                        // 'child'\n      shift(93);                    // 'child'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 111:                       // 'descendant'\n      shift(111);                   // 'descendant'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 82:                        // 'attribute'\n      shift(82);                    // 'attribute'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 229:                       // 'self'\n      shift(229);                   // 'self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shift(112);                   // 'descendant-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 136:                       // 'following-sibling'\n      shift(136);                   // 'following-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    default:\n      shift(135);                   // 'following'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ForwardAxis\", e0);\n  }\n\n  function try_ForwardAxis()\n  {\n    switch (l1)\n    {\n    case 93:                        // 'child'\n      shiftT(93);                   // 'child'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 111:                       // 'descendant'\n      shiftT(111);                  // 'descendant'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 82:                        // 'attribute'\n      shiftT(82);                   // 'attribute'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 229:                       // 'self'\n      shiftT(229);                  // 'self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shiftT(112);                  // 'descendant-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 136:                       // 'following-sibling'\n      shiftT(136);                  // 'following-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    default:\n      shiftT(135);                  // 'following'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n    }\n  }\n\n  function parse_AbbrevForwardStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevForwardStep\", e0);\n    if (l1 == 66)                   // '@'\n    {\n      shift(66);                    // '@'\n    }\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_NodeTest();\n    eventHandler.endNonterminal(\"AbbrevForwardStep\", e0);\n  }\n\n  function try_AbbrevForwardStep()\n  {\n    if (l1 == 66)                   // '@'\n    {\n      shiftT(66);                   // '@'\n    }\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_NodeTest();\n  }\n\n  function parse_ReverseStep()\n  {\n    eventHandler.startNonterminal(\"ReverseStep\", e0);\n    switch (l1)\n    {\n    case 45:                        // '..'\n      parse_AbbrevReverseStep();\n      break;\n    default:\n      parse_ReverseAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_NodeTest();\n    }\n    eventHandler.endNonterminal(\"ReverseStep\", e0);\n  }\n\n  function try_ReverseStep()\n  {\n    switch (l1)\n    {\n    case 45:                        // '..'\n      try_AbbrevReverseStep();\n      break;\n    default:\n      try_ReverseAxis();\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_NodeTest();\n    }\n  }\n\n  function parse_ReverseAxis()\n  {\n    eventHandler.startNonterminal(\"ReverseAxis\", e0);\n    switch (l1)\n    {\n    case 206:                       // 'parent'\n      shift(206);                   // 'parent'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 73:                        // 'ancestor'\n      shift(73);                    // 'ancestor'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shift(213);                   // 'preceding-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    case 212:                       // 'preceding'\n      shift(212);                   // 'preceding'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n      break;\n    default:\n      shift(74);                    // 'ancestor-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shift(51);                    // '::'\n    }\n    eventHandler.endNonterminal(\"ReverseAxis\", e0);\n  }\n\n  function try_ReverseAxis()\n  {\n    switch (l1)\n    {\n    case 206:                       // 'parent'\n      shiftT(206);                  // 'parent'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 73:                        // 'ancestor'\n      shiftT(73);                   // 'ancestor'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shiftT(213);                  // 'preceding-sibling'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    case 212:                       // 'preceding'\n      shiftT(212);                  // 'preceding'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n      break;\n    default:\n      shiftT(74);                   // 'ancestor-or-self'\n      lookahead1W(26);              // S^WS | '(:' | '::'\n      shiftT(51);                   // '::'\n    }\n  }\n\n  function parse_AbbrevReverseStep()\n  {\n    eventHandler.startNonterminal(\"AbbrevReverseStep\", e0);\n    shift(45);                      // '..'\n    eventHandler.endNonterminal(\"AbbrevReverseStep\", e0);\n  }\n\n  function try_AbbrevReverseStep()\n  {\n    shiftT(45);                     // '..'\n  }\n\n  function parse_NodeTest()\n  {\n    eventHandler.startNonterminal(\"NodeTest\", e0);\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 244:                       // 'text'\n      lookahead2W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      parse_KindTest();\n      break;\n    default:\n      parse_NameTest();\n    }\n    eventHandler.endNonterminal(\"NodeTest\", e0);\n  }\n\n  function try_NodeTest()\n  {\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 244:                       // 'text'\n      lookahead2W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      try_KindTest();\n      break;\n    default:\n      try_NameTest();\n    }\n  }\n\n  function parse_NameTest()\n  {\n    eventHandler.startNonterminal(\"NameTest\", e0);\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shift(5);                     // Wildcard\n      break;\n    default:\n      parse_EQName();\n    }\n    eventHandler.endNonterminal(\"NameTest\", e0);\n  }\n\n  function try_NameTest()\n  {\n    switch (l1)\n    {\n    case 5:                         // Wildcard\n      shiftT(5);                    // Wildcard\n      break;\n    default:\n      try_EQName();\n    }\n  }\n\n  function parse_PostfixExpr()\n  {\n    eventHandler.startNonterminal(\"PostfixExpr\", e0);\n    parse_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      if (l1 != 34                  // '('\n       && l1 != 68)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 68:                      // '['\n        whitespace();\n        parse_Predicate();\n        break;\n      default:\n        whitespace();\n        parse_ArgumentList();\n      }\n    }\n    eventHandler.endNonterminal(\"PostfixExpr\", e0);\n  }\n\n  function try_PostfixExpr()\n  {\n    try_PrimaryExpr();\n    for (;;)\n    {\n      lookahead1W(240);             // S^WS | EOF | '!' | '!=' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' |\n      if (l1 != 34                  // '('\n       && l1 != 68)                 // '['\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 68:                      // '['\n        try_Predicate();\n        break;\n      default:\n        try_ArgumentList();\n      }\n    }\n  }\n\n  function parse_ArgumentList()\n  {\n    eventHandler.startNonterminal(\"ArgumentList\", e0);\n    shift(34);                      // '('\n    lookahead1W(275);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_Argument();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(270);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_Argument();\n      }\n    }\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ArgumentList\", e0);\n  }\n\n  function try_ArgumentList()\n  {\n    shiftT(34);                     // '('\n    lookahead1W(275);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 37)                   // ')'\n    {\n      try_Argument();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(270);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_Argument();\n      }\n    }\n    shiftT(37);                     // ')'\n  }\n\n  function parse_PredicateList()\n  {\n    eventHandler.startNonterminal(\"PredicateList\", e0);\n    for (;;)\n    {\n      lookahead1W(237);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      if (l1 != 68)                 // '['\n      {\n        break;\n      }\n      whitespace();\n      parse_Predicate();\n    }\n    eventHandler.endNonterminal(\"PredicateList\", e0);\n  }\n\n  function try_PredicateList()\n  {\n    for (;;)\n    {\n      lookahead1W(237);             // S^WS | EOF | '!' | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' | '//' | ':' |\n      if (l1 != 68)                 // '['\n      {\n        break;\n      }\n      try_Predicate();\n    }\n  }\n\n  function parse_Predicate()\n  {\n    eventHandler.startNonterminal(\"Predicate\", e0);\n    shift(68);                      // '['\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(69);                      // ']'\n    eventHandler.endNonterminal(\"Predicate\", e0);\n  }\n\n  function try_Predicate()\n  {\n    shiftT(68);                     // '['\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(69);                     // ']'\n  }\n\n  function parse_Literal()\n  {\n    eventHandler.startNonterminal(\"Literal\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      parse_NumericLiteral();\n    }\n    eventHandler.endNonterminal(\"Literal\", e0);\n  }\n\n  function try_Literal()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    default:\n      try_NumericLiteral();\n    }\n  }\n\n  function parse_NumericLiteral()\n  {\n    eventHandler.startNonterminal(\"NumericLiteral\", e0);\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shift(8);                     // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shift(9);                     // DecimalLiteral\n      break;\n    default:\n      shift(10);                    // DoubleLiteral\n    }\n    eventHandler.endNonterminal(\"NumericLiteral\", e0);\n  }\n\n  function try_NumericLiteral()\n  {\n    switch (l1)\n    {\n    case 8:                         // IntegerLiteral\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 9:                         // DecimalLiteral\n      shiftT(9);                    // DecimalLiteral\n      break;\n    default:\n      shiftT(10);                   // DoubleLiteral\n    }\n  }\n\n  function parse_VarRef()\n  {\n    eventHandler.startNonterminal(\"VarRef\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    eventHandler.endNonterminal(\"VarRef\", e0);\n  }\n\n  function try_VarRef()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n  }\n\n  function parse_VarName()\n  {\n    eventHandler.startNonterminal(\"VarName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"VarName\", e0);\n  }\n\n  function try_VarName()\n  {\n    try_EQName();\n  }\n\n  function parse_ParenthesizedExpr()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedExpr\", e0);\n    shift(34);                      // '('\n    lookahead1W(268);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedExpr\", e0);\n  }\n\n  function try_ParenthesizedExpr()\n  {\n    shiftT(34);                     // '('\n    lookahead1W(268);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 37)                   // ')'\n    {\n      try_Expr();\n    }\n    shiftT(37);                     // ')'\n  }\n\n  function parse_ContextItemExpr()\n  {\n    eventHandler.startNonterminal(\"ContextItemExpr\", e0);\n    shift(44);                      // '.'\n    eventHandler.endNonterminal(\"ContextItemExpr\", e0);\n  }\n\n  function try_ContextItemExpr()\n  {\n    shiftT(44);                     // '.'\n  }\n\n  function parse_OrderedExpr()\n  {\n    eventHandler.startNonterminal(\"OrderedExpr\", e0);\n    shift(202);                     // 'ordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"OrderedExpr\", e0);\n  }\n\n  function try_OrderedExpr()\n  {\n    shiftT(202);                    // 'ordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_UnorderedExpr()\n  {\n    eventHandler.startNonterminal(\"UnorderedExpr\", e0);\n    shift(256);                     // 'unordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"UnorderedExpr\", e0);\n  }\n\n  function try_UnorderedExpr()\n  {\n    shiftT(256);                    // 'unordered'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FunctionCall()\n  {\n    eventHandler.startNonterminal(\"FunctionCall\", e0);\n    parse_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    whitespace();\n    parse_ArgumentList();\n    eventHandler.endNonterminal(\"FunctionCall\", e0);\n  }\n\n  function try_FunctionCall()\n  {\n    try_FunctionName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    try_ArgumentList();\n  }\n\n  function parse_Argument()\n  {\n    eventHandler.startNonterminal(\"Argument\", e0);\n    switch (l1)\n    {\n    case 64:                        // '?'\n      parse_ArgumentPlaceholder();\n      break;\n    default:\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"Argument\", e0);\n  }\n\n  function try_Argument()\n  {\n    switch (l1)\n    {\n    case 64:                        // '?'\n      try_ArgumentPlaceholder();\n      break;\n    default:\n      try_ExprSingle();\n    }\n  }\n\n  function parse_ArgumentPlaceholder()\n  {\n    eventHandler.startNonterminal(\"ArgumentPlaceholder\", e0);\n    shift(64);                      // '?'\n    eventHandler.endNonterminal(\"ArgumentPlaceholder\", e0);\n  }\n\n  function try_ArgumentPlaceholder()\n  {\n    shiftT(64);                     // '?'\n  }\n\n  function parse_Constructor()\n  {\n    eventHandler.startNonterminal(\"Constructor\", e0);\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    default:\n      parse_ComputedConstructor();\n    }\n    eventHandler.endNonterminal(\"Constructor\", e0);\n  }\n\n  function try_Constructor()\n  {\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      try_DirectConstructor();\n      break;\n    default:\n      try_ComputedConstructor();\n    }\n  }\n\n  function parse_DirectConstructor()\n  {\n    eventHandler.startNonterminal(\"DirectConstructor\", e0);\n    switch (l1)\n    {\n    case 54:                        // '<'\n      parse_DirElemConstructor();\n      break;\n    case 55:                        // '<!--'\n      parse_DirCommentConstructor();\n      break;\n    default:\n      parse_DirPIConstructor();\n    }\n    eventHandler.endNonterminal(\"DirectConstructor\", e0);\n  }\n\n  function try_DirectConstructor()\n  {\n    switch (l1)\n    {\n    case 54:                        // '<'\n      try_DirElemConstructor();\n      break;\n    case 55:                        // '<!--'\n      try_DirCommentConstructor();\n      break;\n    default:\n      try_DirPIConstructor();\n    }\n  }\n\n  function parse_DirElemConstructor()\n  {\n    eventHandler.startNonterminal(\"DirElemConstructor\", e0);\n    shift(54);                      // '<'\n    lookahead1(4);                  // QName\n    shift(20);                      // QName\n    parse_DirAttributeList();\n    switch (l1)\n    {\n    case 48:                        // '/>'\n      shift(48);                    // '/>'\n      break;\n    default:\n      shift(61);                    // '>'\n      for (;;)\n      {\n        lookahead1(174);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n        if (l1 == 56)               // '</'\n        {\n          break;\n        }\n        parse_DirElemContent();\n      }\n      shift(56);                    // '</'\n      lookahead1(4);                // QName\n      shift(20);                    // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shift(21);                  // S\n      }\n      lookahead1(8);                // '>'\n      shift(61);                    // '>'\n    }\n    eventHandler.endNonterminal(\"DirElemConstructor\", e0);\n  }\n\n  function try_DirElemConstructor()\n  {\n    shiftT(54);                     // '<'\n    lookahead1(4);                  // QName\n    shiftT(20);                     // QName\n    try_DirAttributeList();\n    switch (l1)\n    {\n    case 48:                        // '/>'\n      shiftT(48);                   // '/>'\n      break;\n    default:\n      shiftT(61);                   // '>'\n      for (;;)\n      {\n        lookahead1(174);            // CDataSection | PredefinedEntityRef | ElementContentChar | CharRef | '<' |\n        if (l1 == 56)               // '</'\n        {\n          break;\n        }\n        try_DirElemContent();\n      }\n      shiftT(56);                   // '</'\n      lookahead1(4);                // QName\n      shiftT(20);                   // QName\n      lookahead1(12);               // S | '>'\n      if (l1 == 21)                 // S\n      {\n        shiftT(21);                 // S\n      }\n      lookahead1(8);                // '>'\n      shiftT(61);                   // '>'\n    }\n  }\n\n  function parse_DirAttributeList()\n  {\n    eventHandler.startNonterminal(\"DirAttributeList\", e0);\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shift(21);                    // S\n      lookahead1(91);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shift(20);                  // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        lookahead1(7);              // '='\n        shift(60);                  // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shift(21);                // S\n        }\n        parse_DirAttributeValue();\n      }\n    }\n    eventHandler.endNonterminal(\"DirAttributeList\", e0);\n  }\n\n  function try_DirAttributeList()\n  {\n    for (;;)\n    {\n      lookahead1(19);               // S | '/>' | '>'\n      if (l1 != 21)                 // S\n      {\n        break;\n      }\n      shiftT(21);                   // S\n      lookahead1(91);               // QName | S | '/>' | '>'\n      if (l1 == 20)                 // QName\n      {\n        shiftT(20);                 // QName\n        lookahead1(11);             // S | '='\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        lookahead1(7);              // '='\n        shiftT(60);                 // '='\n        lookahead1(18);             // S | '\"' | \"'\"\n        if (l1 == 21)               // S\n        {\n          shiftT(21);               // S\n        }\n        try_DirAttributeValue();\n      }\n    }\n  }\n\n  function parse_DirAttributeValue()\n  {\n    eventHandler.startNonterminal(\"DirAttributeValue\", e0);\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shift(28);                    // '\"'\n      for (;;)\n      {\n        lookahead1(167);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shift(13);                // EscapeQuot\n          break;\n        default:\n          parse_QuotAttrValueContent();\n        }\n      }\n      shift(28);                    // '\"'\n      break;\n    default:\n      shift(33);                    // \"'\"\n      for (;;)\n      {\n        lookahead1(168);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n        if (l1 == 33)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shift(14);                // EscapeApos\n          break;\n        default:\n          parse_AposAttrValueContent();\n        }\n      }\n      shift(33);                    // \"'\"\n    }\n    eventHandler.endNonterminal(\"DirAttributeValue\", e0);\n  }\n\n  function try_DirAttributeValue()\n  {\n    lookahead1(14);                 // '\"' | \"'\"\n    switch (l1)\n    {\n    case 28:                        // '\"'\n      shiftT(28);                   // '\"'\n      for (;;)\n      {\n        lookahead1(167);            // PredefinedEntityRef | EscapeQuot | QuotAttrContentChar | CharRef | '\"' | '{' |\n        if (l1 == 28)               // '\"'\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 13:                    // EscapeQuot\n          shiftT(13);               // EscapeQuot\n          break;\n        default:\n          try_QuotAttrValueContent();\n        }\n      }\n      shiftT(28);                   // '\"'\n      break;\n    default:\n      shiftT(33);                   // \"'\"\n      for (;;)\n      {\n        lookahead1(168);            // PredefinedEntityRef | EscapeApos | AposAttrContentChar | CharRef | \"'\" | '{' |\n        if (l1 == 33)               // \"'\"\n        {\n          break;\n        }\n        switch (l1)\n        {\n        case 14:                    // EscapeApos\n          shiftT(14);               // EscapeApos\n          break;\n        default:\n          try_AposAttrValueContent();\n        }\n      }\n      shiftT(33);                   // \"'\"\n    }\n  }\n\n  function parse_QuotAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"QuotAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shift(16);                    // QuotAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"QuotAttrValueContent\", e0);\n  }\n\n  function try_QuotAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 16:                        // QuotAttrContentChar\n      shiftT(16);                   // QuotAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_AposAttrValueContent()\n  {\n    eventHandler.startNonterminal(\"AposAttrValueContent\", e0);\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shift(17);                    // AposAttrContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"AposAttrValueContent\", e0);\n  }\n\n  function try_AposAttrValueContent()\n  {\n    switch (l1)\n    {\n    case 17:                        // AposAttrContentChar\n      shiftT(17);                   // AposAttrContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirElemContent()\n  {\n    eventHandler.startNonterminal(\"DirElemContent\", e0);\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      parse_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shift(4);                     // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shift(15);                    // ElementContentChar\n      break;\n    default:\n      parse_CommonContent();\n    }\n    eventHandler.endNonterminal(\"DirElemContent\", e0);\n  }\n\n  function try_DirElemContent()\n  {\n    switch (l1)\n    {\n    case 54:                        // '<'\n    case 55:                        // '<!--'\n    case 59:                        // '<?'\n      try_DirectConstructor();\n      break;\n    case 4:                         // CDataSection\n      shiftT(4);                    // CDataSection\n      break;\n    case 15:                        // ElementContentChar\n      shiftT(15);                   // ElementContentChar\n      break;\n    default:\n      try_CommonContent();\n    }\n  }\n\n  function parse_DirCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"DirCommentConstructor\", e0);\n    shift(55);                      // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shift(2);                       // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shift(43);                      // '-->'\n    eventHandler.endNonterminal(\"DirCommentConstructor\", e0);\n  }\n\n  function try_DirCommentConstructor()\n  {\n    shiftT(55);                     // '<!--'\n    lookahead1(1);                  // DirCommentContents\n    shiftT(2);                      // DirCommentContents\n    lookahead1(6);                  // '-->'\n    shiftT(43);                     // '-->'\n  }\n\n  function parse_DirPIConstructor()\n  {\n    eventHandler.startNonterminal(\"DirPIConstructor\", e0);\n    shift(59);                      // '<?'\n    lookahead1(3);                  // PITarget\n    shift(18);                      // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shift(21);                    // S\n      lookahead1(2);                // DirPIContents\n      shift(3);                     // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shift(65);                      // '?>'\n    eventHandler.endNonterminal(\"DirPIConstructor\", e0);\n  }\n\n  function try_DirPIConstructor()\n  {\n    shiftT(59);                     // '<?'\n    lookahead1(3);                  // PITarget\n    shiftT(18);                     // PITarget\n    lookahead1(13);                 // S | '?>'\n    if (l1 == 21)                   // S\n    {\n      shiftT(21);                   // S\n      lookahead1(2);                // DirPIContents\n      shiftT(3);                    // DirPIContents\n    }\n    lookahead1(9);                  // '?>'\n    shiftT(65);                     // '?>'\n  }\n\n  function parse_ComputedConstructor()\n  {\n    eventHandler.startNonterminal(\"ComputedConstructor\", e0);\n    switch (l1)\n    {\n    case 119:                       // 'document'\n      parse_CompDocConstructor();\n      break;\n    case 121:                       // 'element'\n      parse_CompElemConstructor();\n      break;\n    case 82:                        // 'attribute'\n      parse_CompAttrConstructor();\n      break;\n    case 184:                       // 'namespace'\n      parse_CompNamespaceConstructor();\n      break;\n    case 244:                       // 'text'\n      parse_CompTextConstructor();\n      break;\n    case 96:                        // 'comment'\n      parse_CompCommentConstructor();\n      break;\n    default:\n      parse_CompPIConstructor();\n    }\n    eventHandler.endNonterminal(\"ComputedConstructor\", e0);\n  }\n\n  function try_ComputedConstructor()\n  {\n    switch (l1)\n    {\n    case 119:                       // 'document'\n      try_CompDocConstructor();\n      break;\n    case 121:                       // 'element'\n      try_CompElemConstructor();\n      break;\n    case 82:                        // 'attribute'\n      try_CompAttrConstructor();\n      break;\n    case 184:                       // 'namespace'\n      try_CompNamespaceConstructor();\n      break;\n    case 244:                       // 'text'\n      try_CompTextConstructor();\n      break;\n    case 96:                        // 'comment'\n      try_CompCommentConstructor();\n      break;\n    default:\n      try_CompPIConstructor();\n    }\n  }\n\n  function parse_CompElemConstructor()\n  {\n    eventHandler.startNonterminal(\"CompElemConstructor\", e0);\n    shift(121);                     // 'element'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_ContentExpr();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"CompElemConstructor\", e0);\n  }\n\n  function try_CompElemConstructor()\n  {\n    shiftT(121);                    // 'element'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_Expr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      try_ContentExpr();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_CompNamespaceConstructor()\n  {\n    eventHandler.startNonterminal(\"CompNamespaceConstructor\", e0);\n    shift(184);                     // 'namespace'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_PrefixExpr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_Prefix();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_URIExpr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"CompNamespaceConstructor\", e0);\n  }\n\n  function try_CompNamespaceConstructor()\n  {\n    shiftT(184);                    // 'namespace'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_PrefixExpr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_Prefix();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_URIExpr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_Prefix()\n  {\n    eventHandler.startNonterminal(\"Prefix\", e0);\n    parse_NCName();\n    eventHandler.endNonterminal(\"Prefix\", e0);\n  }\n\n  function try_Prefix()\n  {\n    try_NCName();\n  }\n\n  function parse_PrefixExpr()\n  {\n    eventHandler.startNonterminal(\"PrefixExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"PrefixExpr\", e0);\n  }\n\n  function try_PrefixExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_URIExpr()\n  {\n    eventHandler.startNonterminal(\"URIExpr\", e0);\n    parse_Expr();\n    eventHandler.endNonterminal(\"URIExpr\", e0);\n  }\n\n  function try_URIExpr()\n  {\n    try_Expr();\n  }\n\n  function parse_FunctionItemExpr()\n  {\n    eventHandler.startNonterminal(\"FunctionItemExpr\", e0);\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      parse_InlineFunctionExpr();\n      break;\n    default:\n      parse_NamedFunctionRef();\n    }\n    eventHandler.endNonterminal(\"FunctionItemExpr\", e0);\n  }\n\n  function try_FunctionItemExpr()\n  {\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      try_InlineFunctionExpr();\n      break;\n    default:\n      try_NamedFunctionRef();\n    }\n  }\n\n  function parse_NamedFunctionRef()\n  {\n    eventHandler.startNonterminal(\"NamedFunctionRef\", e0);\n    parse_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shift(29);                      // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shift(8);                       // IntegerLiteral\n    eventHandler.endNonterminal(\"NamedFunctionRef\", e0);\n  }\n\n  function try_NamedFunctionRef()\n  {\n    try_EQName();\n    lookahead1W(20);                // S^WS | '#' | '(:'\n    shiftT(29);                     // '#'\n    lookahead1W(16);                // IntegerLiteral | S^WS | '(:'\n    shiftT(8);                      // IntegerLiteral\n  }\n\n  function parse_InlineFunctionExpr()\n  {\n    eventHandler.startNonterminal(\"InlineFunctionExpr\", e0);\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(145);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(94);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(37);                      // ')'\n    lookahead1W(111);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 79)                   // 'as'\n    {\n      shift(79);                    // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_SequenceType();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_FunctionBody();\n    eventHandler.endNonterminal(\"InlineFunctionExpr\", e0);\n  }\n\n  function try_InlineFunctionExpr()\n  {\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(145);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(94);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      try_ParamList();\n    }\n    shiftT(37);                     // ')'\n    lookahead1W(111);               // S^WS | '(:' | 'as' | '{'\n    if (l1 == 79)                   // 'as'\n    {\n      shiftT(79);                   // 'as'\n      lookahead1W(259);             // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_SequenceType();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_FunctionBody();\n  }\n\n  function parse_SingleType()\n  {\n    eventHandler.startNonterminal(\"SingleType\", e0);\n    parse_SimpleTypeName();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 64)                   // '?'\n    {\n      shift(64);                    // '?'\n    }\n    eventHandler.endNonterminal(\"SingleType\", e0);\n  }\n\n  function try_SingleType()\n  {\n    try_SimpleTypeName();\n    lookahead1W(226);               // S^WS | EOF | '!=' | '(:' | ')' | '*' | '+' | ',' | '-' | ':' | ';' | '<' | '<<' |\n    if (l1 == 64)                   // '?'\n    {\n      shiftT(64);                   // '?'\n    }\n  }\n\n  function parse_TypeDeclaration()\n  {\n    eventHandler.startNonterminal(\"TypeDeclaration\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypeDeclaration\", e0);\n  }\n\n  function try_TypeDeclaration()\n  {\n    shiftT(79);                     // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n  }\n\n  function parse_SequenceType()\n  {\n    eventHandler.startNonterminal(\"SequenceType\", e0);\n    switch (l1)\n    {\n    case 124:                       // 'empty-sequence'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17532:                     // 'empty-sequence' '('\n      shift(124);                   // 'empty-sequence'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(34);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(37);                    // ')'\n      break;\n    default:\n      parse_ItemType();\n      lookahead1W(238);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n      switch (l1)\n      {\n      case 39:                      // '*'\n      case 40:                      // '+'\n      case 64:                      // '?'\n        whitespace();\n        parse_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"SequenceType\", e0);\n  }\n\n  function try_SequenceType()\n  {\n    switch (l1)\n    {\n    case 124:                       // 'empty-sequence'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17532:                     // 'empty-sequence' '('\n      shiftT(124);                  // 'empty-sequence'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(34);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(37);                   // ')'\n      break;\n    default:\n      try_ItemType();\n      lookahead1W(238);             // S^WS | EOF | '!=' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' | ';' |\n      switch (l1)\n      {\n      case 39:                      // '*'\n      case 40:                      // '+'\n      case 64:                      // '?'\n        try_OccurrenceIndicator();\n        break;\n      default:\n        break;\n      }\n    }\n  }\n\n  function parse_OccurrenceIndicator()\n  {\n    eventHandler.startNonterminal(\"OccurrenceIndicator\", e0);\n    switch (l1)\n    {\n    case 64:                        // '?'\n      shift(64);                    // '?'\n      break;\n    case 39:                        // '*'\n      shift(39);                    // '*'\n      break;\n    default:\n      shift(40);                    // '+'\n    }\n    eventHandler.endNonterminal(\"OccurrenceIndicator\", e0);\n  }\n\n  function try_OccurrenceIndicator()\n  {\n    switch (l1)\n    {\n    case 64:                        // '?'\n      shiftT(64);                   // '?'\n      break;\n    case 39:                        // '*'\n      shiftT(39);                   // '*'\n      break;\n    default:\n      shiftT(40);                   // '+'\n    }\n  }\n\n  function parse_ItemType()\n  {\n    eventHandler.startNonterminal(\"ItemType\", e0);\n    switch (l1)\n    {\n    case 78:                        // 'array'\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 145:                       // 'function'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 194:                       // 'object'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 244:                       // 'text'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      parse_KindTest();\n      break;\n    case 17573:                     // 'item' '('\n      shift(165);                   // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shift(34);                    // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shift(37);                    // ')'\n      break;\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      parse_FunctionTest();\n      break;\n    case 34:                        // '('\n      parse_ParenthesizedItemType();\n      break;\n    case 17486:                     // 'array' '('\n    case 17575:                     // 'json-item' '('\n    case 17602:                     // 'object' '('\n      parse_JSONTest();\n      break;\n    case 17650:                     // 'structured-item' '('\n      parse_StructuredItemTest();\n      break;\n    default:\n      parse_AtomicOrUnionType();\n    }\n    eventHandler.endNonterminal(\"ItemType\", e0);\n  }\n\n  function try_ItemType()\n  {\n    switch (l1)\n    {\n    case 78:                        // 'array'\n    case 82:                        // 'attribute'\n    case 96:                        // 'comment'\n    case 120:                       // 'document-node'\n    case 121:                       // 'element'\n    case 145:                       // 'function'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 194:                       // 'object'\n    case 216:                       // 'processing-instruction'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 244:                       // 'text'\n      lookahead2W(242);             // S^WS | EOF | '!=' | '(' | '(:' | ')' | '*' | '*' | '+' | ',' | '-' | ':' | ':=' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 17490:                     // 'attribute' '('\n    case 17504:                     // 'comment' '('\n    case 17528:                     // 'document-node' '('\n    case 17529:                     // 'element' '('\n    case 17593:                     // 'namespace-node' '('\n    case 17599:                     // 'node' '('\n    case 17624:                     // 'processing-instruction' '('\n    case 17634:                     // 'schema-attribute' '('\n    case 17635:                     // 'schema-element' '('\n    case 17652:                     // 'text' '('\n      try_KindTest();\n      break;\n    case 17573:                     // 'item' '('\n      shiftT(165);                  // 'item'\n      lookahead1W(22);              // S^WS | '(' | '(:'\n      shiftT(34);                   // '('\n      lookahead1W(23);              // S^WS | '(:' | ')'\n      shiftT(37);                   // ')'\n      break;\n    case 32:                        // '%'\n    case 17553:                     // 'function' '('\n      try_FunctionTest();\n      break;\n    case 34:                        // '('\n      try_ParenthesizedItemType();\n      break;\n    case 17486:                     // 'array' '('\n    case 17575:                     // 'json-item' '('\n    case 17602:                     // 'object' '('\n      try_JSONTest();\n      break;\n    case 17650:                     // 'structured-item' '('\n      try_StructuredItemTest();\n      break;\n    default:\n      try_AtomicOrUnionType();\n    }\n  }\n\n  function parse_JSONTest()\n  {\n    eventHandler.startNonterminal(\"JSONTest\", e0);\n    switch (l1)\n    {\n    case 167:                       // 'json-item'\n      parse_JSONItemTest();\n      break;\n    case 194:                       // 'object'\n      parse_JSONObjectTest();\n      break;\n    default:\n      parse_JSONArrayTest();\n    }\n    eventHandler.endNonterminal(\"JSONTest\", e0);\n  }\n\n  function try_JSONTest()\n  {\n    switch (l1)\n    {\n    case 167:                       // 'json-item'\n      try_JSONItemTest();\n      break;\n    case 194:                       // 'object'\n      try_JSONObjectTest();\n      break;\n    default:\n      try_JSONArrayTest();\n    }\n  }\n\n  function parse_StructuredItemTest()\n  {\n    eventHandler.startNonterminal(\"StructuredItemTest\", e0);\n    shift(242);                     // 'structured-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"StructuredItemTest\", e0);\n  }\n\n  function try_StructuredItemTest()\n  {\n    shiftT(242);                    // 'structured-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_JSONItemTest()\n  {\n    eventHandler.startNonterminal(\"JSONItemTest\", e0);\n    shift(167);                     // 'json-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"JSONItemTest\", e0);\n  }\n\n  function try_JSONItemTest()\n  {\n    shiftT(167);                    // 'json-item'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_JSONObjectTest()\n  {\n    eventHandler.startNonterminal(\"JSONObjectTest\", e0);\n    shift(194);                     // 'object'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"JSONObjectTest\", e0);\n  }\n\n  function try_JSONObjectTest()\n  {\n    shiftT(194);                    // 'object'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_JSONArrayTest()\n  {\n    eventHandler.startNonterminal(\"JSONArrayTest\", e0);\n    shift(78);                      // 'array'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"JSONArrayTest\", e0);\n  }\n\n  function try_JSONArrayTest()\n  {\n    shiftT(78);                     // 'array'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AtomicOrUnionType()\n  {\n    eventHandler.startNonterminal(\"AtomicOrUnionType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicOrUnionType\", e0);\n  }\n\n  function try_AtomicOrUnionType()\n  {\n    try_EQName();\n  }\n\n  function parse_KindTest()\n  {\n    eventHandler.startNonterminal(\"KindTest\", e0);\n    switch (l1)\n    {\n    case 120:                       // 'document-node'\n      parse_DocumentTest();\n      break;\n    case 121:                       // 'element'\n      parse_ElementTest();\n      break;\n    case 82:                        // 'attribute'\n      parse_AttributeTest();\n      break;\n    case 227:                       // 'schema-element'\n      parse_SchemaElementTest();\n      break;\n    case 226:                       // 'schema-attribute'\n      parse_SchemaAttributeTest();\n      break;\n    case 216:                       // 'processing-instruction'\n      parse_PITest();\n      break;\n    case 96:                        // 'comment'\n      parse_CommentTest();\n      break;\n    case 244:                       // 'text'\n      parse_TextTest();\n      break;\n    case 185:                       // 'namespace-node'\n      parse_NamespaceNodeTest();\n      break;\n    default:\n      parse_AnyKindTest();\n    }\n    eventHandler.endNonterminal(\"KindTest\", e0);\n  }\n\n  function try_KindTest()\n  {\n    switch (l1)\n    {\n    case 120:                       // 'document-node'\n      try_DocumentTest();\n      break;\n    case 121:                       // 'element'\n      try_ElementTest();\n      break;\n    case 82:                        // 'attribute'\n      try_AttributeTest();\n      break;\n    case 227:                       // 'schema-element'\n      try_SchemaElementTest();\n      break;\n    case 226:                       // 'schema-attribute'\n      try_SchemaAttributeTest();\n      break;\n    case 216:                       // 'processing-instruction'\n      try_PITest();\n      break;\n    case 96:                        // 'comment'\n      try_CommentTest();\n      break;\n    case 244:                       // 'text'\n      try_TextTest();\n      break;\n    case 185:                       // 'namespace-node'\n      try_NamespaceNodeTest();\n      break;\n    default:\n      try_AnyKindTest();\n    }\n  }\n\n  function parse_AnyKindTest()\n  {\n    eventHandler.startNonterminal(\"AnyKindTest\", e0);\n    shift(191);                     // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"AnyKindTest\", e0);\n  }\n\n  function try_AnyKindTest()\n  {\n    shiftT(191);                    // 'node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_DocumentTest()\n  {\n    eventHandler.startNonterminal(\"DocumentTest\", e0);\n    shift(120);                     // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(144);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 121:                     // 'element'\n        whitespace();\n        parse_ElementTest();\n        break;\n      default:\n        whitespace();\n        parse_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"DocumentTest\", e0);\n  }\n\n  function try_DocumentTest()\n  {\n    shiftT(120);                    // 'document-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(144);               // S^WS | '(:' | ')' | 'element' | 'schema-element'\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 121:                     // 'element'\n        try_ElementTest();\n        break;\n      default:\n        try_SchemaElementTest();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_TextTest()\n  {\n    eventHandler.startNonterminal(\"TextTest\", e0);\n    shift(244);                     // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"TextTest\", e0);\n  }\n\n  function try_TextTest()\n  {\n    shiftT(244);                    // 'text'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_CommentTest()\n  {\n    eventHandler.startNonterminal(\"CommentTest\", e0);\n    shift(96);                      // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"CommentTest\", e0);\n  }\n\n  function try_CommentTest()\n  {\n    shiftT(96);                     // 'comment'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_NamespaceNodeTest()\n  {\n    eventHandler.startNonterminal(\"NamespaceNodeTest\", e0);\n    shift(185);                     // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"NamespaceNodeTest\", e0);\n  }\n\n  function try_NamespaceNodeTest()\n  {\n    shiftT(185);                    // 'namespace-node'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_PITest()\n  {\n    eventHandler.startNonterminal(\"PITest\", e0);\n    shift(216);                     // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(252);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shift(11);                  // StringLiteral\n        break;\n      default:\n        whitespace();\n        parse_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"PITest\", e0);\n  }\n\n  function try_PITest()\n  {\n    shiftT(216);                    // 'processing-instruction'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(252);               // StringLiteral | NCName^Token | S^WS | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 37)                   // ')'\n    {\n      switch (l1)\n      {\n      case 11:                      // StringLiteral\n        shiftT(11);                 // StringLiteral\n        break;\n      default:\n        try_NCName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AttributeTest()\n  {\n    eventHandler.startNonterminal(\"AttributeTest\", e0);\n    shift(82);                      // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_AttribNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shift(41);                  // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"AttributeTest\", e0);\n  }\n\n  function try_AttributeTest()\n  {\n    shiftT(82);                     // 'attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 37)                   // ')'\n    {\n      try_AttribNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shiftT(41);                 // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AttribNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"AttribNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shift(38);                    // '*'\n      break;\n    default:\n      parse_AttributeName();\n    }\n    eventHandler.endNonterminal(\"AttribNameOrWildcard\", e0);\n  }\n\n  function try_AttribNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shiftT(38);                   // '*'\n      break;\n    default:\n      try_AttributeName();\n    }\n  }\n\n  function parse_SchemaAttributeTest()\n  {\n    eventHandler.startNonterminal(\"SchemaAttributeTest\", e0);\n    shift(226);                     // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"SchemaAttributeTest\", e0);\n  }\n\n  function try_SchemaAttributeTest()\n  {\n    shiftT(226);                    // 'schema-attribute'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_AttributeDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_AttributeDeclaration()\n  {\n    eventHandler.startNonterminal(\"AttributeDeclaration\", e0);\n    parse_AttributeName();\n    eventHandler.endNonterminal(\"AttributeDeclaration\", e0);\n  }\n\n  function try_AttributeDeclaration()\n  {\n    try_AttributeName();\n  }\n\n  function parse_ElementTest()\n  {\n    eventHandler.startNonterminal(\"ElementTest\", e0);\n    shift(121);                     // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_ElementNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shift(41);                  // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_TypeName();\n        lookahead1W(102);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 64)               // '?'\n        {\n          shift(64);                // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ElementTest\", e0);\n  }\n\n  function try_ElementTest()\n  {\n    shiftT(121);                    // 'element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(260);               // EQName^Token | S^WS | '(:' | ')' | '*' | 'after' | 'allowing' | 'ancestor' |\n    if (l1 != 37)                   // ')'\n    {\n      try_ElementNameOrWildcard();\n      lookahead1W(101);             // S^WS | '(:' | ')' | ','\n      if (l1 == 41)                 // ','\n      {\n        shiftT(41);                 // ','\n        lookahead1W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_TypeName();\n        lookahead1W(102);           // S^WS | '(:' | ')' | '?'\n        if (l1 == 64)               // '?'\n        {\n          shiftT(64);               // '?'\n        }\n      }\n    }\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_ElementNameOrWildcard()\n  {\n    eventHandler.startNonterminal(\"ElementNameOrWildcard\", e0);\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shift(38);                    // '*'\n      break;\n    default:\n      parse_ElementName();\n    }\n    eventHandler.endNonterminal(\"ElementNameOrWildcard\", e0);\n  }\n\n  function try_ElementNameOrWildcard()\n  {\n    switch (l1)\n    {\n    case 38:                        // '*'\n      shiftT(38);                   // '*'\n      break;\n    default:\n      try_ElementName();\n    }\n  }\n\n  function parse_SchemaElementTest()\n  {\n    eventHandler.startNonterminal(\"SchemaElementTest\", e0);\n    shift(227);                     // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"SchemaElementTest\", e0);\n  }\n\n  function try_SchemaElementTest()\n  {\n    shiftT(227);                    // 'schema-element'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_ElementDeclaration();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_ElementDeclaration()\n  {\n    eventHandler.startNonterminal(\"ElementDeclaration\", e0);\n    parse_ElementName();\n    eventHandler.endNonterminal(\"ElementDeclaration\", e0);\n  }\n\n  function try_ElementDeclaration()\n  {\n    try_ElementName();\n  }\n\n  function parse_AttributeName()\n  {\n    eventHandler.startNonterminal(\"AttributeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AttributeName\", e0);\n  }\n\n  function try_AttributeName()\n  {\n    try_EQName();\n  }\n\n  function parse_ElementName()\n  {\n    eventHandler.startNonterminal(\"ElementName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"ElementName\", e0);\n  }\n\n  function try_ElementName()\n  {\n    try_EQName();\n  }\n\n  function parse_SimpleTypeName()\n  {\n    eventHandler.startNonterminal(\"SimpleTypeName\", e0);\n    parse_TypeName();\n    eventHandler.endNonterminal(\"SimpleTypeName\", e0);\n  }\n\n  function try_SimpleTypeName()\n  {\n    try_TypeName();\n  }\n\n  function parse_TypeName()\n  {\n    eventHandler.startNonterminal(\"TypeName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"TypeName\", e0);\n  }\n\n  function try_TypeName()\n  {\n    try_EQName();\n  }\n\n  function parse_FunctionTest()\n  {\n    eventHandler.startNonterminal(\"FunctionTest\", e0);\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(5, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        lk = -1;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n      }\n      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n      b2 = b2A; e2 = e2A; end = e2A; }}\n      memoize(5, e0, lk);\n    }\n    switch (lk)\n    {\n    case -1:\n      whitespace();\n      parse_AnyFunctionTest();\n      break;\n    default:\n      whitespace();\n      parse_TypedFunctionTest();\n    }\n    eventHandler.endNonterminal(\"FunctionTest\", e0);\n  }\n\n  function try_FunctionTest()\n  {\n    for (;;)\n    {\n      lookahead1W(97);              // S^WS | '%' | '(:' | 'function'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    switch (l1)\n    {\n    case 145:                       // 'function'\n      lookahead2W(22);              // S^WS | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(5, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        try_AnyFunctionTest();\n        memoize(5, e0A, -1);\n        lk = -3;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(5, e0A, -2);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      try_AnyFunctionTest();\n      break;\n    case -3:\n      break;\n    default:\n      try_TypedFunctionTest();\n    }\n  }\n\n  function parse_AnyFunctionTest()\n  {\n    eventHandler.startNonterminal(\"AnyFunctionTest\", e0);\n    shift(145);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shift(38);                      // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"AnyFunctionTest\", e0);\n  }\n\n  function try_AnyFunctionTest()\n  {\n    shiftT(145);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(24);                // S^WS | '(:' | '*'\n    shiftT(38);                     // '*'\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_TypedFunctionTest()\n  {\n    eventHandler.startNonterminal(\"TypedFunctionTest\", e0);\n    shift(145);                     // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(262);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 37)                   // ')'\n    {\n      whitespace();\n      parse_SequenceType();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(259);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        whitespace();\n        parse_SequenceType();\n      }\n    }\n    shift(37);                      // ')'\n    lookahead1W(30);                // S^WS | '(:' | 'as'\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"TypedFunctionTest\", e0);\n  }\n\n  function try_TypedFunctionTest()\n  {\n    shiftT(145);                    // 'function'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(262);               // EQName^Token | S^WS | '%' | '(' | '(:' | ')' | 'after' | 'allowing' |\n    if (l1 != 37)                   // ')'\n    {\n      try_SequenceType();\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(259);           // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n        try_SequenceType();\n      }\n    }\n    shiftT(37);                     // ')'\n    lookahead1W(30);                // S^WS | '(:' | 'as'\n    shiftT(79);                     // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n  }\n\n  function parse_ParenthesizedItemType()\n  {\n    eventHandler.startNonterminal(\"ParenthesizedItemType\", e0);\n    shift(34);                      // '('\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shift(37);                      // ')'\n    eventHandler.endNonterminal(\"ParenthesizedItemType\", e0);\n  }\n\n  function try_ParenthesizedItemType()\n  {\n    shiftT(34);                     // '('\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_ItemType();\n    lookahead1W(23);                // S^WS | '(:' | ')'\n    shiftT(37);                     // ')'\n  }\n\n  function parse_RevalidationDecl()\n  {\n    eventHandler.startNonterminal(\"RevalidationDecl\", e0);\n    shift(108);                     // 'declare'\n    lookahead1W(72);                // S^WS | '(:' | 'revalidation'\n    shift(222);                     // 'revalidation'\n    lookahead1W(152);               // S^WS | '(:' | 'lax' | 'skip' | 'strict'\n    switch (l1)\n    {\n    case 240:                       // 'strict'\n      shift(240);                   // 'strict'\n      break;\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    default:\n      shift(233);                   // 'skip'\n    }\n    eventHandler.endNonterminal(\"RevalidationDecl\", e0);\n  }\n\n  function parse_InsertExprTargetChoice()\n  {\n    eventHandler.startNonterminal(\"InsertExprTargetChoice\", e0);\n    switch (l1)\n    {\n    case 70:                        // 'after'\n      shift(70);                    // 'after'\n      break;\n    case 84:                        // 'before'\n      shift(84);                    // 'before'\n      break;\n    default:\n      if (l1 == 79)                 // 'as'\n      {\n        shift(79);                  // 'as'\n        lookahead1W(119);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 134:                   // 'first'\n          shift(134);               // 'first'\n          break;\n        default:\n          shift(170);               // 'last'\n        }\n      }\n      lookahead1W(54);              // S^WS | '(:' | 'into'\n      shift(163);                   // 'into'\n    }\n    eventHandler.endNonterminal(\"InsertExprTargetChoice\", e0);\n  }\n\n  function try_InsertExprTargetChoice()\n  {\n    switch (l1)\n    {\n    case 70:                        // 'after'\n      shiftT(70);                   // 'after'\n      break;\n    case 84:                        // 'before'\n      shiftT(84);                   // 'before'\n      break;\n    default:\n      if (l1 == 79)                 // 'as'\n      {\n        shiftT(79);                 // 'as'\n        lookahead1W(119);           // S^WS | '(:' | 'first' | 'last'\n        switch (l1)\n        {\n        case 134:                   // 'first'\n          shiftT(134);              // 'first'\n          break;\n        default:\n          shiftT(170);              // 'last'\n        }\n      }\n      lookahead1W(54);              // S^WS | '(:' | 'into'\n      shiftT(163);                  // 'into'\n    }\n  }\n\n  function parse_InsertExpr()\n  {\n    eventHandler.startNonterminal(\"InsertExpr\", e0);\n    shift(159);                     // 'insert'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    default:\n      shift(192);                   // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_SourceExpr();\n    whitespace();\n    parse_InsertExprTargetChoice();\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"InsertExpr\", e0);\n  }\n\n  function try_InsertExpr()\n  {\n    shiftT(159);                    // 'insert'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    default:\n      shiftT(192);                  // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_SourceExpr();\n    try_InsertExprTargetChoice();\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TargetExpr();\n  }\n\n  function parse_DeleteExpr()\n  {\n    eventHandler.startNonterminal(\"DeleteExpr\", e0);\n    shift(110);                     // 'delete'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    default:\n      shift(192);                   // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TargetExpr();\n    eventHandler.endNonterminal(\"DeleteExpr\", e0);\n  }\n\n  function try_DeleteExpr()\n  {\n    shiftT(110);                    // 'delete'\n    lookahead1W(129);               // S^WS | '(:' | 'node' | 'nodes'\n    switch (l1)\n    {\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    default:\n      shiftT(192);                  // 'nodes'\n    }\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TargetExpr();\n  }\n\n  function parse_ReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"ReplaceExpr\", e0);\n    shift(219);                     // 'replace'\n    lookahead1W(130);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 261)                  // 'value'\n    {\n      shift(261);                   // 'value'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shift(196);                   // 'of'\n    }\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TargetExpr();\n    shift(270);                     // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ReplaceExpr\", e0);\n  }\n\n  function try_ReplaceExpr()\n  {\n    shiftT(219);                    // 'replace'\n    lookahead1W(130);               // S^WS | '(:' | 'node' | 'value'\n    if (l1 == 261)                  // 'value'\n    {\n      shiftT(261);                  // 'value'\n      lookahead1W(64);              // S^WS | '(:' | 'of'\n      shiftT(196);                  // 'of'\n    }\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shiftT(191);                    // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TargetExpr();\n    shiftT(270);                    // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_RenameExpr()\n  {\n    eventHandler.startNonterminal(\"RenameExpr\", e0);\n    shift(218);                     // 'rename'\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_TargetExpr();\n    shift(79);                      // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_NewNameExpr();\n    eventHandler.endNonterminal(\"RenameExpr\", e0);\n  }\n\n  function try_RenameExpr()\n  {\n    shiftT(218);                    // 'rename'\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shiftT(191);                    // 'node'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_TargetExpr();\n    shiftT(79);                     // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_NewNameExpr();\n  }\n\n  function parse_SourceExpr()\n  {\n    eventHandler.startNonterminal(\"SourceExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"SourceExpr\", e0);\n  }\n\n  function try_SourceExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TargetExpr()\n  {\n    eventHandler.startNonterminal(\"TargetExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TargetExpr\", e0);\n  }\n\n  function try_TargetExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_NewNameExpr()\n  {\n    eventHandler.startNonterminal(\"NewNameExpr\", e0);\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"NewNameExpr\", e0);\n  }\n\n  function try_NewNameExpr()\n  {\n    try_ExprSingle();\n  }\n\n  function parse_TransformExpr()\n  {\n    eventHandler.startNonterminal(\"TransformExpr\", e0);\n    shift(103);                     // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      whitespace();\n      parse_TransformSpec();\n    }\n    shift(181);                     // 'modify'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(220);                     // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformExpr\", e0);\n  }\n\n  function try_TransformExpr()\n  {\n    shiftT(103);                    // 'copy'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    try_TransformSpec();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      try_TransformSpec();\n    }\n    shiftT(181);                    // 'modify'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(220);                    // 'return'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_TransformSpec()\n  {\n    eventHandler.startNonterminal(\"TransformSpec\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shift(52);                      // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"TransformSpec\", e0);\n  }\n\n  function try_TransformSpec()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shiftT(52);                     // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_FTSelection()\n  {\n    eventHandler.startNonterminal(\"FTSelection\", e0);\n    parse_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(151);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 115                 // 'different'\n       && lk != 117                 // 'distance'\n       && lk != 127                 // 'entire'\n       && lk != 202                 // 'ordered'\n       && lk != 223                 // 'same'\n       && lk != 269                 // 'window'\n       && lk != 64593               // 'at' 'end'\n       && lk != 121425)             // 'at' 'start'\n      {\n        break;\n      }\n      whitespace();\n      parse_FTPosFilter();\n    }\n    eventHandler.endNonterminal(\"FTSelection\", e0);\n  }\n\n  function try_FTSelection()\n  {\n    try_FTOr();\n    for (;;)\n    {\n      lookahead1W(211);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(151);           // S^WS | '(:' | 'end' | 'position' | 'start'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 115                 // 'different'\n       && lk != 117                 // 'distance'\n       && lk != 127                 // 'entire'\n       && lk != 202                 // 'ordered'\n       && lk != 223                 // 'same'\n       && lk != 269                 // 'window'\n       && lk != 64593               // 'at' 'end'\n       && lk != 121425)             // 'at' 'start'\n      {\n        break;\n      }\n      try_FTPosFilter();\n    }\n  }\n\n  function parse_FTWeight()\n  {\n    eventHandler.startNonterminal(\"FTWeight\", e0);\n    shift(264);                     // 'weight'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shift(276);                     // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"FTWeight\", e0);\n  }\n\n  function try_FTWeight()\n  {\n    shiftT(264);                    // 'weight'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    shiftT(276);                    // '{'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FTOr()\n  {\n    eventHandler.startNonterminal(\"FTOr\", e0);\n    parse_FTAnd();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftor'\n      {\n        break;\n      }\n      shift(144);                   // 'ftor'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTAnd();\n    }\n    eventHandler.endNonterminal(\"FTOr\", e0);\n  }\n\n  function try_FTOr()\n  {\n    try_FTAnd();\n    for (;;)\n    {\n      if (l1 != 144)                // 'ftor'\n      {\n        break;\n      }\n      shiftT(144);                  // 'ftor'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTAnd();\n    }\n  }\n\n  function parse_FTAnd()\n  {\n    eventHandler.startNonterminal(\"FTAnd\", e0);\n    parse_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 142)                // 'ftand'\n      {\n        break;\n      }\n      shift(142);                   // 'ftand'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTMildNot();\n    }\n    eventHandler.endNonterminal(\"FTAnd\", e0);\n  }\n\n  function try_FTAnd()\n  {\n    try_FTMildNot();\n    for (;;)\n    {\n      if (l1 != 142)                // 'ftand'\n      {\n        break;\n      }\n      shiftT(142);                  // 'ftand'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTMildNot();\n    }\n  }\n\n  function parse_FTMildNot()\n  {\n    eventHandler.startNonterminal(\"FTMildNot\", e0);\n    parse_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 193)                // 'not'\n      {\n        break;\n      }\n      shift(193);                   // 'not'\n      lookahead1W(53);              // S^WS | '(:' | 'in'\n      shift(154);                   // 'in'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTUnaryNot();\n    }\n    eventHandler.endNonterminal(\"FTMildNot\", e0);\n  }\n\n  function try_FTMildNot()\n  {\n    try_FTUnaryNot();\n    for (;;)\n    {\n      lookahead1W(212);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 193)                // 'not'\n      {\n        break;\n      }\n      shiftT(193);                  // 'not'\n      lookahead1W(53);              // S^WS | '(:' | 'in'\n      shiftT(154);                  // 'in'\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTUnaryNot();\n    }\n  }\n\n  function parse_FTUnaryNot()\n  {\n    eventHandler.startNonterminal(\"FTUnaryNot\", e0);\n    if (l1 == 143)                  // 'ftnot'\n    {\n      shift(143);                   // 'ftnot'\n    }\n    lookahead1W(155);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    whitespace();\n    parse_FTPrimaryWithOptions();\n    eventHandler.endNonterminal(\"FTUnaryNot\", e0);\n  }\n\n  function try_FTUnaryNot()\n  {\n    if (l1 == 143)                  // 'ftnot'\n    {\n      shiftT(143);                  // 'ftnot'\n    }\n    lookahead1W(155);               // StringLiteral | S^WS | '(' | '(#' | '(:' | '{'\n    try_FTPrimaryWithOptions();\n  }\n\n  function parse_FTPrimaryWithOptions()\n  {\n    eventHandler.startNonterminal(\"FTPrimaryWithOptions\", e0);\n    parse_FTPrimary();\n    lookahead1W(214);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 259)                  // 'using'\n    {\n      whitespace();\n      parse_FTMatchOptions();\n    }\n    if (l1 == 264)                  // 'weight'\n    {\n      whitespace();\n      parse_FTWeight();\n    }\n    eventHandler.endNonterminal(\"FTPrimaryWithOptions\", e0);\n  }\n\n  function try_FTPrimaryWithOptions()\n  {\n    try_FTPrimary();\n    lookahead1W(214);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 259)                  // 'using'\n    {\n      try_FTMatchOptions();\n    }\n    if (l1 == 264)                  // 'weight'\n    {\n      try_FTWeight();\n    }\n  }\n\n  function parse_FTPrimary()\n  {\n    eventHandler.startNonterminal(\"FTPrimary\", e0);\n    switch (l1)\n    {\n    case 34:                        // '('\n      shift(34);                    // '('\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      whitespace();\n      parse_FTSelection();\n      shift(37);                    // ')'\n      break;\n    case 35:                        // '(#'\n      parse_FTExtensionSelection();\n      break;\n    default:\n      parse_FTWords();\n      lookahead1W(215);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 195)                // 'occurs'\n      {\n        whitespace();\n        parse_FTTimes();\n      }\n    }\n    eventHandler.endNonterminal(\"FTPrimary\", e0);\n  }\n\n  function try_FTPrimary()\n  {\n    switch (l1)\n    {\n    case 34:                        // '('\n      shiftT(34);                   // '('\n      lookahead1W(162);             // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{'\n      try_FTSelection();\n      shiftT(37);                   // ')'\n      break;\n    case 35:                        // '(#'\n      try_FTExtensionSelection();\n      break;\n    default:\n      try_FTWords();\n      lookahead1W(215);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 195)                // 'occurs'\n      {\n        try_FTTimes();\n      }\n    }\n  }\n\n  function parse_FTWords()\n  {\n    eventHandler.startNonterminal(\"FTWords\", e0);\n    parse_FTWordsValue();\n    lookahead1W(221);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 71                    // 'all'\n     || l1 == 76                    // 'any'\n     || l1 == 210)                  // 'phrase'\n    {\n      whitespace();\n      parse_FTAnyallOption();\n    }\n    eventHandler.endNonterminal(\"FTWords\", e0);\n  }\n\n  function try_FTWords()\n  {\n    try_FTWordsValue();\n    lookahead1W(221);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 71                    // 'all'\n     || l1 == 76                    // 'any'\n     || l1 == 210)                  // 'phrase'\n    {\n      try_FTAnyallOption();\n    }\n  }\n\n  function parse_FTWordsValue()\n  {\n    eventHandler.startNonterminal(\"FTWordsValue\", e0);\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shift(11);                    // StringLiteral\n      break;\n    default:\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n    }\n    eventHandler.endNonterminal(\"FTWordsValue\", e0);\n  }\n\n  function try_FTWordsValue()\n  {\n    switch (l1)\n    {\n    case 11:                        // StringLiteral\n      shiftT(11);                   // StringLiteral\n      break;\n    default:\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_Expr();\n      shiftT(282);                  // '}'\n    }\n  }\n\n  function parse_FTExtensionSelection()\n  {\n    eventHandler.startNonterminal(\"FTExtensionSelection\", e0);\n    for (;;)\n    {\n      whitespace();\n      parse_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shift(276);                     // '{'\n    lookahead1W(166);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_FTSelection();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"FTExtensionSelection\", e0);\n  }\n\n  function try_FTExtensionSelection()\n  {\n    for (;;)\n    {\n      try_Pragma();\n      lookahead1W(100);             // S^WS | '(#' | '(:' | '{'\n      if (l1 != 35)                 // '(#'\n      {\n        break;\n      }\n    }\n    shiftT(276);                    // '{'\n    lookahead1W(166);               // StringLiteral | S^WS | '(' | '(#' | '(:' | 'ftnot' | '{' | '}'\n    if (l1 != 282)                  // '}'\n    {\n      try_FTSelection();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FTAnyallOption()\n  {\n    eventHandler.startNonterminal(\"FTAnyallOption\", e0);\n    switch (l1)\n    {\n    case 76:                        // 'any'\n      shift(76);                    // 'any'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 272)                // 'word'\n      {\n        shift(272);                 // 'word'\n      }\n      break;\n    case 71:                        // 'all'\n      shift(71);                    // 'all'\n      lookahead1W(219);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 273)                // 'words'\n      {\n        shift(273);                 // 'words'\n      }\n      break;\n    default:\n      shift(210);                   // 'phrase'\n    }\n    eventHandler.endNonterminal(\"FTAnyallOption\", e0);\n  }\n\n  function try_FTAnyallOption()\n  {\n    switch (l1)\n    {\n    case 76:                        // 'any'\n      shiftT(76);                   // 'any'\n      lookahead1W(218);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 272)                // 'word'\n      {\n        shiftT(272);                // 'word'\n      }\n      break;\n    case 71:                        // 'all'\n      shiftT(71);                   // 'all'\n      lookahead1W(219);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 == 273)                // 'words'\n      {\n        shiftT(273);                // 'words'\n      }\n      break;\n    default:\n      shiftT(210);                  // 'phrase'\n    }\n  }\n\n  function parse_FTTimes()\n  {\n    eventHandler.startNonterminal(\"FTTimes\", e0);\n    shift(195);                     // 'occurs'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    shift(247);                     // 'times'\n    eventHandler.endNonterminal(\"FTTimes\", e0);\n  }\n\n  function try_FTTimes()\n  {\n    shiftT(195);                    // 'occurs'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    shiftT(247);                    // 'times'\n  }\n\n  function parse_FTRange()\n  {\n    eventHandler.startNonterminal(\"FTRange\", e0);\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shift(130);                   // 'exactly'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shift(173);                 // 'least'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_AdditiveExpr();\n        break;\n      default:\n        shift(183);                 // 'most'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_AdditiveExpr();\n      }\n      break;\n    default:\n      shift(140);                   // 'from'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n      shift(248);                   // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_AdditiveExpr();\n    }\n    eventHandler.endNonterminal(\"FTRange\", e0);\n  }\n\n  function try_FTRange()\n  {\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shiftT(130);                  // 'exactly'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AdditiveExpr();\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shiftT(173);                // 'least'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_AdditiveExpr();\n        break;\n      default:\n        shiftT(183);                // 'most'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_AdditiveExpr();\n      }\n      break;\n    default:\n      shiftT(140);                  // 'from'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AdditiveExpr();\n      shiftT(248);                  // 'to'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_AdditiveExpr();\n    }\n  }\n\n  function parse_FTPosFilter()\n  {\n    eventHandler.startNonterminal(\"FTPosFilter\", e0);\n    switch (l1)\n    {\n    case 202:                       // 'ordered'\n      parse_FTOrder();\n      break;\n    case 269:                       // 'window'\n      parse_FTWindow();\n      break;\n    case 117:                       // 'distance'\n      parse_FTDistance();\n      break;\n    case 115:                       // 'different'\n    case 223:                       // 'same'\n      parse_FTScope();\n      break;\n    default:\n      parse_FTContent();\n    }\n    eventHandler.endNonterminal(\"FTPosFilter\", e0);\n  }\n\n  function try_FTPosFilter()\n  {\n    switch (l1)\n    {\n    case 202:                       // 'ordered'\n      try_FTOrder();\n      break;\n    case 269:                       // 'window'\n      try_FTWindow();\n      break;\n    case 117:                       // 'distance'\n      try_FTDistance();\n      break;\n    case 115:                       // 'different'\n    case 223:                       // 'same'\n      try_FTScope();\n      break;\n    default:\n      try_FTContent();\n    }\n  }\n\n  function parse_FTOrder()\n  {\n    eventHandler.startNonterminal(\"FTOrder\", e0);\n    shift(202);                     // 'ordered'\n    eventHandler.endNonterminal(\"FTOrder\", e0);\n  }\n\n  function try_FTOrder()\n  {\n    shiftT(202);                    // 'ordered'\n  }\n\n  function parse_FTWindow()\n  {\n    eventHandler.startNonterminal(\"FTWindow\", e0);\n    shift(269);                     // 'window'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_AdditiveExpr();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTWindow\", e0);\n  }\n\n  function try_FTWindow()\n  {\n    shiftT(269);                    // 'window'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_AdditiveExpr();\n    try_FTUnit();\n  }\n\n  function parse_FTDistance()\n  {\n    eventHandler.startNonterminal(\"FTDistance\", e0);\n    shift(117);                     // 'distance'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    whitespace();\n    parse_FTRange();\n    whitespace();\n    parse_FTUnit();\n    eventHandler.endNonterminal(\"FTDistance\", e0);\n  }\n\n  function try_FTDistance()\n  {\n    shiftT(117);                    // 'distance'\n    lookahead1W(149);               // S^WS | '(:' | 'at' | 'exactly' | 'from'\n    try_FTRange();\n    try_FTUnit();\n  }\n\n  function parse_FTUnit()\n  {\n    eventHandler.startNonterminal(\"FTUnit\", e0);\n    switch (l1)\n    {\n    case 273:                       // 'words'\n      shift(273);                   // 'words'\n      break;\n    case 232:                       // 'sentences'\n      shift(232);                   // 'sentences'\n      break;\n    default:\n      shift(205);                   // 'paragraphs'\n    }\n    eventHandler.endNonterminal(\"FTUnit\", e0);\n  }\n\n  function try_FTUnit()\n  {\n    switch (l1)\n    {\n    case 273:                       // 'words'\n      shiftT(273);                  // 'words'\n      break;\n    case 232:                       // 'sentences'\n      shiftT(232);                  // 'sentences'\n      break;\n    default:\n      shiftT(205);                  // 'paragraphs'\n    }\n  }\n\n  function parse_FTScope()\n  {\n    eventHandler.startNonterminal(\"FTScope\", e0);\n    switch (l1)\n    {\n    case 223:                       // 'same'\n      shift(223);                   // 'same'\n      break;\n    default:\n      shift(115);                   // 'different'\n    }\n    lookahead1W(132);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    whitespace();\n    parse_FTBigUnit();\n    eventHandler.endNonterminal(\"FTScope\", e0);\n  }\n\n  function try_FTScope()\n  {\n    switch (l1)\n    {\n    case 223:                       // 'same'\n      shiftT(223);                  // 'same'\n      break;\n    default:\n      shiftT(115);                  // 'different'\n    }\n    lookahead1W(132);               // S^WS | '(:' | 'paragraph' | 'sentence'\n    try_FTBigUnit();\n  }\n\n  function parse_FTBigUnit()\n  {\n    eventHandler.startNonterminal(\"FTBigUnit\", e0);\n    switch (l1)\n    {\n    case 231:                       // 'sentence'\n      shift(231);                   // 'sentence'\n      break;\n    default:\n      shift(204);                   // 'paragraph'\n    }\n    eventHandler.endNonterminal(\"FTBigUnit\", e0);\n  }\n\n  function try_FTBigUnit()\n  {\n    switch (l1)\n    {\n    case 231:                       // 'sentence'\n      shiftT(231);                  // 'sentence'\n      break;\n    default:\n      shiftT(204);                  // 'paragraph'\n    }\n  }\n\n  function parse_FTContent()\n  {\n    eventHandler.startNonterminal(\"FTContent\", e0);\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(117);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 237:                     // 'start'\n        shift(237);                 // 'start'\n        break;\n      default:\n        shift(126);                 // 'end'\n      }\n      break;\n    default:\n      shift(127);                   // 'entire'\n      lookahead1W(42);              // S^WS | '(:' | 'content'\n      shift(100);                   // 'content'\n    }\n    eventHandler.endNonterminal(\"FTContent\", e0);\n  }\n\n  function try_FTContent()\n  {\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(117);             // S^WS | '(:' | 'end' | 'start'\n      switch (l1)\n      {\n      case 237:                     // 'start'\n        shiftT(237);                // 'start'\n        break;\n      default:\n        shiftT(126);                // 'end'\n      }\n      break;\n    default:\n      shiftT(127);                  // 'entire'\n      lookahead1W(42);              // S^WS | '(:' | 'content'\n      shiftT(100);                  // 'content'\n    }\n  }\n\n  function parse_FTMatchOptions()\n  {\n    eventHandler.startNonterminal(\"FTMatchOptions\", e0);\n    for (;;)\n    {\n      shift(259);                   // 'using'\n      lookahead1W(181);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n      whitespace();\n      parse_FTMatchOption();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 259)                // 'using'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"FTMatchOptions\", e0);\n  }\n\n  function try_FTMatchOptions()\n  {\n    for (;;)\n    {\n      shiftT(259);                  // 'using'\n      lookahead1W(181);             // S^WS | '(:' | 'case' | 'diacritics' | 'language' | 'lowercase' | 'no' |\n      try_FTMatchOption();\n      lookahead1W(214);             // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n      if (l1 != 259)                // 'using'\n      {\n        break;\n      }\n    }\n  }\n\n  function parse_FTMatchOption()\n  {\n    eventHandler.startNonterminal(\"FTMatchOption\", e0);\n    switch (l1)\n    {\n    case 188:                       // 'no'\n      lookahead2W(161);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 169:                       // 'language'\n      parse_FTLanguageOption();\n      break;\n    case 268:                       // 'wildcards'\n    case 137404:                    // 'no' 'wildcards'\n      parse_FTWildCardOption();\n      break;\n    case 246:                       // 'thesaurus'\n    case 126140:                    // 'no' 'thesaurus'\n      parse_FTThesaurusOption();\n      break;\n    case 238:                       // 'stemming'\n    case 122044:                    // 'no' 'stemming'\n      parse_FTStemOption();\n      break;\n    case 114:                       // 'diacritics'\n      parse_FTDiacriticsOption();\n      break;\n    case 239:                       // 'stop'\n    case 122556:                    // 'no' 'stop'\n      parse_FTStopWordOption();\n      break;\n    case 199:                       // 'option'\n      parse_FTExtensionOption();\n      break;\n    default:\n      parse_FTCaseOption();\n    }\n    eventHandler.endNonterminal(\"FTMatchOption\", e0);\n  }\n\n  function try_FTMatchOption()\n  {\n    switch (l1)\n    {\n    case 188:                       // 'no'\n      lookahead2W(161);             // S^WS | '(:' | 'stemming' | 'stop' | 'thesaurus' | 'wildcards'\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 169:                       // 'language'\n      try_FTLanguageOption();\n      break;\n    case 268:                       // 'wildcards'\n    case 137404:                    // 'no' 'wildcards'\n      try_FTWildCardOption();\n      break;\n    case 246:                       // 'thesaurus'\n    case 126140:                    // 'no' 'thesaurus'\n      try_FTThesaurusOption();\n      break;\n    case 238:                       // 'stemming'\n    case 122044:                    // 'no' 'stemming'\n      try_FTStemOption();\n      break;\n    case 114:                       // 'diacritics'\n      try_FTDiacriticsOption();\n      break;\n    case 239:                       // 'stop'\n    case 122556:                    // 'no' 'stop'\n      try_FTStopWordOption();\n      break;\n    case 199:                       // 'option'\n      try_FTExtensionOption();\n      break;\n    default:\n      try_FTCaseOption();\n    }\n  }\n\n  function parse_FTCaseOption()\n  {\n    eventHandler.startNonterminal(\"FTCaseOption\", e0);\n    switch (l1)\n    {\n    case 88:                        // 'case'\n      shift(88);                    // 'case'\n      lookahead1W(124);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 158:                     // 'insensitive'\n        shift(158);                 // 'insensitive'\n        break;\n      default:\n        shift(230);                 // 'sensitive'\n      }\n      break;\n    case 177:                       // 'lowercase'\n      shift(177);                   // 'lowercase'\n      break;\n    default:\n      shift(258);                   // 'uppercase'\n    }\n    eventHandler.endNonterminal(\"FTCaseOption\", e0);\n  }\n\n  function try_FTCaseOption()\n  {\n    switch (l1)\n    {\n    case 88:                        // 'case'\n      shiftT(88);                   // 'case'\n      lookahead1W(124);             // S^WS | '(:' | 'insensitive' | 'sensitive'\n      switch (l1)\n      {\n      case 158:                     // 'insensitive'\n        shiftT(158);                // 'insensitive'\n        break;\n      default:\n        shiftT(230);                // 'sensitive'\n      }\n      break;\n    case 177:                       // 'lowercase'\n      shiftT(177);                  // 'lowercase'\n      break;\n    default:\n      shiftT(258);                  // 'uppercase'\n    }\n  }\n\n  function parse_FTDiacriticsOption()\n  {\n    eventHandler.startNonterminal(\"FTDiacriticsOption\", e0);\n    shift(114);                     // 'diacritics'\n    lookahead1W(124);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 158:                       // 'insensitive'\n      shift(158);                   // 'insensitive'\n      break;\n    default:\n      shift(230);                   // 'sensitive'\n    }\n    eventHandler.endNonterminal(\"FTDiacriticsOption\", e0);\n  }\n\n  function try_FTDiacriticsOption()\n  {\n    shiftT(114);                    // 'diacritics'\n    lookahead1W(124);               // S^WS | '(:' | 'insensitive' | 'sensitive'\n    switch (l1)\n    {\n    case 158:                       // 'insensitive'\n      shiftT(158);                  // 'insensitive'\n      break;\n    default:\n      shiftT(230);                  // 'sensitive'\n    }\n  }\n\n  function parse_FTStemOption()\n  {\n    eventHandler.startNonterminal(\"FTStemOption\", e0);\n    switch (l1)\n    {\n    case 238:                       // 'stemming'\n      shift(238);                   // 'stemming'\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(74);              // S^WS | '(:' | 'stemming'\n      shift(238);                   // 'stemming'\n    }\n    eventHandler.endNonterminal(\"FTStemOption\", e0);\n  }\n\n  function try_FTStemOption()\n  {\n    switch (l1)\n    {\n    case 238:                       // 'stemming'\n      shiftT(238);                  // 'stemming'\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(74);              // S^WS | '(:' | 'stemming'\n      shiftT(238);                  // 'stemming'\n    }\n  }\n\n  function parse_FTThesaurusOption()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusOption\", e0);\n    switch (l1)\n    {\n    case 246:                       // 'thesaurus'\n      shift(246);                   // 'thesaurus'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        whitespace();\n        parse_FTThesaurusID();\n        break;\n      case 109:                     // 'default'\n        shift(109);                 // 'default'\n        break;\n      default:\n        shift(34);                  // '('\n        lookahead1W(112);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          whitespace();\n          parse_FTThesaurusID();\n          break;\n        default:\n          shift(109);               // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(101);         // S^WS | '(:' | ')' | ','\n          if (l1 != 41)             // ','\n          {\n            break;\n          }\n          shift(41);                // ','\n          lookahead1W(31);          // S^WS | '(:' | 'at'\n          whitespace();\n          parse_FTThesaurusID();\n        }\n        shift(37);                  // ')'\n      }\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'thesaurus'\n      shift(246);                   // 'thesaurus'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusOption\", e0);\n  }\n\n  function try_FTThesaurusOption()\n  {\n    switch (l1)\n    {\n    case 246:                       // 'thesaurus'\n      shiftT(246);                  // 'thesaurus'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        try_FTThesaurusID();\n        break;\n      case 109:                     // 'default'\n        shiftT(109);                // 'default'\n        break;\n      default:\n        shiftT(34);                 // '('\n        lookahead1W(112);           // S^WS | '(:' | 'at' | 'default'\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          try_FTThesaurusID();\n          break;\n        default:\n          shiftT(109);              // 'default'\n        }\n        for (;;)\n        {\n          lookahead1W(101);         // S^WS | '(:' | ')' | ','\n          if (l1 != 41)             // ','\n          {\n            break;\n          }\n          shiftT(41);               // ','\n          lookahead1W(31);          // S^WS | '(:' | 'at'\n          try_FTThesaurusID();\n        }\n        shiftT(37);                 // ')'\n      }\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(78);              // S^WS | '(:' | 'thesaurus'\n      shiftT(246);                  // 'thesaurus'\n    }\n  }\n\n  function parse_FTThesaurusID()\n  {\n    eventHandler.startNonterminal(\"FTThesaurusID\", e0);\n    shift(81);                      // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 217)                  // 'relationship'\n    {\n      shift(217);                   // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n    }\n    lookahead1W(216);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      lookahead2W(165);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 130                   // 'exactly'\n     || lk == 140                   // 'from'\n     || lk == 88657                 // 'at' 'least'\n     || lk == 93777)                // 'at' 'most'\n    {\n      whitespace();\n      parse_FTLiteralRange();\n      lookahead1W(58);              // S^WS | '(:' | 'levels'\n      shift(175);                   // 'levels'\n    }\n    eventHandler.endNonterminal(\"FTThesaurusID\", e0);\n  }\n\n  function try_FTThesaurusID()\n  {\n    shiftT(81);                     // 'at'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shiftT(7);                      // URILiteral\n    lookahead1W(220);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    if (l1 == 217)                  // 'relationship'\n    {\n      shiftT(217);                  // 'relationship'\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n    }\n    lookahead1W(216);               // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      lookahead2W(165);             // S^WS | '(:' | 'end' | 'least' | 'most' | 'position' | 'start'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 130                   // 'exactly'\n     || lk == 140                   // 'from'\n     || lk == 88657                 // 'at' 'least'\n     || lk == 93777)                // 'at' 'most'\n    {\n      try_FTLiteralRange();\n      lookahead1W(58);              // S^WS | '(:' | 'levels'\n      shiftT(175);                  // 'levels'\n    }\n  }\n\n  function parse_FTLiteralRange()\n  {\n    eventHandler.startNonterminal(\"FTLiteralRange\", e0);\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shift(130);                   // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shift(173);                 // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n        break;\n      default:\n        shift(183);                 // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shift(8);                   // IntegerLiteral\n      }\n      break;\n    default:\n      shift(140);                   // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n      lookahead1W(79);              // S^WS | '(:' | 'to'\n      shift(248);                   // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shift(8);                     // IntegerLiteral\n    }\n    eventHandler.endNonterminal(\"FTLiteralRange\", e0);\n  }\n\n  function try_FTLiteralRange()\n  {\n    switch (l1)\n    {\n    case 130:                       // 'exactly'\n      shiftT(130);                  // 'exactly'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(125);             // S^WS | '(:' | 'least' | 'most'\n      switch (l1)\n      {\n      case 173:                     // 'least'\n        shiftT(173);                // 'least'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n        break;\n      default:\n        shiftT(183);                // 'most'\n        lookahead1W(16);            // IntegerLiteral | S^WS | '(:'\n        shiftT(8);                  // IntegerLiteral\n      }\n      break;\n    default:\n      shiftT(140);                  // 'from'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n      lookahead1W(79);              // S^WS | '(:' | 'to'\n      shiftT(248);                  // 'to'\n      lookahead1W(16);              // IntegerLiteral | S^WS | '(:'\n      shiftT(8);                    // IntegerLiteral\n    }\n  }\n\n  function parse_FTStopWordOption()\n  {\n    eventHandler.startNonterminal(\"FTStopWordOption\", e0);\n    switch (l1)\n    {\n    case 239:                       // 'stop'\n      shift(239);                   // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shift(273);                   // 'words'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 109:                     // 'default'\n        shift(109);                 // 'default'\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        whitespace();\n        parse_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          whitespace();\n          parse_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(75);              // S^WS | '(:' | 'stop'\n      shift(239);                   // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shift(273);                   // 'words'\n    }\n    eventHandler.endNonterminal(\"FTStopWordOption\", e0);\n  }\n\n  function try_FTStopWordOption()\n  {\n    switch (l1)\n    {\n    case 239:                       // 'stop'\n      shiftT(239);                  // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shiftT(273);                  // 'words'\n      lookahead1W(142);             // S^WS | '(' | '(:' | 'at' | 'default'\n      switch (l1)\n      {\n      case 109:                     // 'default'\n        shiftT(109);                // 'default'\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n        break;\n      default:\n        try_FTStopWords();\n        for (;;)\n        {\n          lookahead1W(217);         // S^WS | EOF | '!=' | '(:' | ')' | ',' | ':' | ';' | '<' | '<<' | '<=' | '=' |\n          if (l1 != 131             // 'except'\n           && l1 != 254)            // 'union'\n          {\n            break;\n          }\n          try_FTStopWordsInclExcl();\n        }\n      }\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(75);              // S^WS | '(:' | 'stop'\n      shiftT(239);                  // 'stop'\n      lookahead1W(86);              // S^WS | '(:' | 'words'\n      shiftT(273);                  // 'words'\n    }\n  }\n\n  function parse_FTStopWords()\n  {\n    eventHandler.startNonterminal(\"FTStopWords\", e0);\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shift(7);                     // URILiteral\n      break;\n    default:\n      shift(34);                    // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shift(11);                    // StringLiteral\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shift(41);                  // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shift(11);                  // StringLiteral\n      }\n      shift(37);                    // ')'\n    }\n    eventHandler.endNonterminal(\"FTStopWords\", e0);\n  }\n\n  function try_FTStopWords()\n  {\n    switch (l1)\n    {\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      lookahead1W(15);              // URILiteral | S^WS | '(:'\n      shiftT(7);                    // URILiteral\n      break;\n    default:\n      shiftT(34);                   // '('\n      lookahead1W(17);              // StringLiteral | S^WS | '(:'\n      shiftT(11);                   // StringLiteral\n      for (;;)\n      {\n        lookahead1W(101);           // S^WS | '(:' | ')' | ','\n        if (l1 != 41)               // ','\n        {\n          break;\n        }\n        shiftT(41);                 // ','\n        lookahead1W(17);            // StringLiteral | S^WS | '(:'\n        shiftT(11);                 // StringLiteral\n      }\n      shiftT(37);                   // ')'\n    }\n  }\n\n  function parse_FTStopWordsInclExcl()\n  {\n    eventHandler.startNonterminal(\"FTStopWordsInclExcl\", e0);\n    switch (l1)\n    {\n    case 254:                       // 'union'\n      shift(254);                   // 'union'\n      break;\n    default:\n      shift(131);                   // 'except'\n    }\n    lookahead1W(99);                // S^WS | '(' | '(:' | 'at'\n    whitespace();\n    parse_FTStopWords();\n    eventHandler.endNonterminal(\"FTStopWordsInclExcl\", e0);\n  }\n\n  function try_FTStopWordsInclExcl()\n  {\n    switch (l1)\n    {\n    case 254:                       // 'union'\n      shiftT(254);                  // 'union'\n      break;\n    default:\n      shiftT(131);                  // 'except'\n    }\n    lookahead1W(99);                // S^WS | '(' | '(:' | 'at'\n    try_FTStopWords();\n  }\n\n  function parse_FTLanguageOption()\n  {\n    eventHandler.startNonterminal(\"FTLanguageOption\", e0);\n    shift(169);                     // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTLanguageOption\", e0);\n  }\n\n  function try_FTLanguageOption()\n  {\n    shiftT(169);                    // 'language'\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTWildCardOption()\n  {\n    eventHandler.startNonterminal(\"FTWildCardOption\", e0);\n    switch (l1)\n    {\n    case 268:                       // 'wildcards'\n      shift(268);                   // 'wildcards'\n      break;\n    default:\n      shift(188);                   // 'no'\n      lookahead1W(84);              // S^WS | '(:' | 'wildcards'\n      shift(268);                   // 'wildcards'\n    }\n    eventHandler.endNonterminal(\"FTWildCardOption\", e0);\n  }\n\n  function try_FTWildCardOption()\n  {\n    switch (l1)\n    {\n    case 268:                       // 'wildcards'\n      shiftT(268);                  // 'wildcards'\n      break;\n    default:\n      shiftT(188);                  // 'no'\n      lookahead1W(84);              // S^WS | '(:' | 'wildcards'\n      shiftT(268);                  // 'wildcards'\n    }\n  }\n\n  function parse_FTExtensionOption()\n  {\n    eventHandler.startNonterminal(\"FTExtensionOption\", e0);\n    shift(199);                     // 'option'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shift(11);                      // StringLiteral\n    eventHandler.endNonterminal(\"FTExtensionOption\", e0);\n  }\n\n  function try_FTExtensionOption()\n  {\n    shiftT(199);                    // 'option'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_EQName();\n    lookahead1W(17);                // StringLiteral | S^WS | '(:'\n    shiftT(11);                     // StringLiteral\n  }\n\n  function parse_FTIgnoreOption()\n  {\n    eventHandler.startNonterminal(\"FTIgnoreOption\", e0);\n    shift(271);                     // 'without'\n    lookahead1W(42);                // S^WS | '(:' | 'content'\n    shift(100);                     // 'content'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_UnionExpr();\n    eventHandler.endNonterminal(\"FTIgnoreOption\", e0);\n  }\n\n  function try_FTIgnoreOption()\n  {\n    shiftT(271);                    // 'without'\n    lookahead1W(42);                // S^WS | '(:' | 'content'\n    shiftT(100);                    // 'content'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_UnionExpr();\n  }\n\n  function parse_CollectionDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionDecl\", e0);\n    shift(95);                      // 'collection'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(107);               // S^WS | '(:' | ';' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_CollectionTypeDecl();\n    }\n    eventHandler.endNonterminal(\"CollectionDecl\", e0);\n  }\n\n  function parse_CollectionTypeDecl()\n  {\n    eventHandler.startNonterminal(\"CollectionTypeDecl\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_ItemType();\n    lookahead1W(156);               // S^WS | '(:' | '*' | '+' | ';' | '?'\n    if (l1 != 53)                   // ';'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"CollectionTypeDecl\", e0);\n  }\n\n  function parse_IndexName()\n  {\n    eventHandler.startNonterminal(\"IndexName\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"IndexName\", e0);\n  }\n\n  function parse_IndexDomainExpr()\n  {\n    eventHandler.startNonterminal(\"IndexDomainExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexDomainExpr\", e0);\n  }\n\n  function parse_IndexKeySpec()\n  {\n    eventHandler.startNonterminal(\"IndexKeySpec\", e0);\n    parse_IndexKeyExpr();\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_IndexKeyTypeDecl();\n    }\n    lookahead1W(146);               // S^WS | '(:' | ',' | ';' | 'collation'\n    if (l1 == 94)                   // 'collation'\n    {\n      whitespace();\n      parse_IndexKeyCollation();\n    }\n    eventHandler.endNonterminal(\"IndexKeySpec\", e0);\n  }\n\n  function parse_IndexKeyExpr()\n  {\n    eventHandler.startNonterminal(\"IndexKeyExpr\", e0);\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"IndexKeyExpr\", e0);\n  }\n\n  function parse_IndexKeyTypeDecl()\n  {\n    eventHandler.startNonterminal(\"IndexKeyTypeDecl\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_AtomicType();\n    lookahead1W(169);               // S^WS | '(:' | '*' | '+' | ',' | ';' | '?' | 'collation'\n    if (l1 == 39                    // '*'\n     || l1 == 40                    // '+'\n     || l1 == 64)                   // '?'\n    {\n      whitespace();\n      parse_OccurrenceIndicator();\n    }\n    eventHandler.endNonterminal(\"IndexKeyTypeDecl\", e0);\n  }\n\n  function parse_AtomicType()\n  {\n    eventHandler.startNonterminal(\"AtomicType\", e0);\n    parse_EQName();\n    eventHandler.endNonterminal(\"AtomicType\", e0);\n  }\n\n  function parse_IndexKeyCollation()\n  {\n    eventHandler.startNonterminal(\"IndexKeyCollation\", e0);\n    shift(94);                      // 'collation'\n    lookahead1W(15);                // URILiteral | S^WS | '(:'\n    shift(7);                       // URILiteral\n    eventHandler.endNonterminal(\"IndexKeyCollation\", e0);\n  }\n\n  function parse_IndexDecl()\n  {\n    eventHandler.startNonterminal(\"IndexDecl\", e0);\n    shift(155);                     // 'index'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_IndexName();\n    lookahead1W(65);                // S^WS | '(:' | 'on'\n    shift(197);                     // 'on'\n    lookahead1W(63);                // S^WS | '(:' | 'nodes'\n    shift(192);                     // 'nodes'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_IndexDomainExpr();\n    shift(87);                      // 'by'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_IndexKeySpec();\n    for (;;)\n    {\n      lookahead1W(103);             // S^WS | '(:' | ',' | ';'\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(265);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_IndexKeySpec();\n    }\n    eventHandler.endNonterminal(\"IndexDecl\", e0);\n  }\n\n  function parse_ICDecl()\n  {\n    eventHandler.startNonterminal(\"ICDecl\", e0);\n    shift(161);                     // 'integrity'\n    lookahead1W(40);                // S^WS | '(:' | 'constraint'\n    shift(97);                      // 'constraint'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(120);               // S^WS | '(:' | 'foreign' | 'on'\n    switch (l1)\n    {\n    case 197:                       // 'on'\n      whitespace();\n      parse_ICCollection();\n      break;\n    default:\n      whitespace();\n      parse_ICForeignKey();\n    }\n    eventHandler.endNonterminal(\"ICDecl\", e0);\n  }\n\n  function parse_ICCollection()\n  {\n    eventHandler.startNonterminal(\"ICCollection\", e0);\n    shift(197);                     // 'on'\n    lookahead1W(39);                // S^WS | '(:' | 'collection'\n    shift(95);                      // 'collection'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(140);               // S^WS | '$' | '(:' | 'foreach' | 'node'\n    switch (l1)\n    {\n    case 31:                        // '$'\n      whitespace();\n      parse_ICCollSequence();\n      break;\n    case 191:                       // 'node'\n      whitespace();\n      parse_ICCollSequenceUnique();\n      break;\n    default:\n      whitespace();\n      parse_ICCollNode();\n    }\n    eventHandler.endNonterminal(\"ICCollection\", e0);\n  }\n\n  function parse_ICCollSequence()\n  {\n    eventHandler.startNonterminal(\"ICCollSequence\", e0);\n    parse_VarRef();\n    lookahead1W(37);                // S^WS | '(:' | 'check'\n    shift(92);                      // 'check'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollSequence\", e0);\n  }\n\n  function parse_ICCollSequenceUnique()\n  {\n    eventHandler.startNonterminal(\"ICCollSequenceUnique\", e0);\n    shift(191);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(37);                // S^WS | '(:' | 'check'\n    shift(92);                      // 'check'\n    lookahead1W(80);                // S^WS | '(:' | 'unique'\n    shift(255);                     // 'unique'\n    lookahead1W(57);                // S^WS | '(:' | 'key'\n    shift(168);                     // 'key'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICCollSequenceUnique\", e0);\n  }\n\n  function parse_ICCollNode()\n  {\n    eventHandler.startNonterminal(\"ICCollNode\", e0);\n    shift(138);                     // 'foreach'\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(37);                // S^WS | '(:' | 'check'\n    shift(92);                      // 'check'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"ICCollNode\", e0);\n  }\n\n  function parse_ICForeignKey()\n  {\n    eventHandler.startNonterminal(\"ICForeignKey\", e0);\n    shift(139);                     // 'foreign'\n    lookahead1W(57);                // S^WS | '(:' | 'key'\n    shift(168);                     // 'key'\n    lookahead1W(51);                // S^WS | '(:' | 'from'\n    whitespace();\n    parse_ICForeignKeySource();\n    whitespace();\n    parse_ICForeignKeyTarget();\n    eventHandler.endNonterminal(\"ICForeignKey\", e0);\n  }\n\n  function parse_ICForeignKeySource()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeySource\", e0);\n    shift(140);                     // 'from'\n    lookahead1W(39);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeySource\", e0);\n  }\n\n  function parse_ICForeignKeyTarget()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyTarget\", e0);\n    shift(248);                     // 'to'\n    lookahead1W(39);                // S^WS | '(:' | 'collection'\n    whitespace();\n    parse_ICForeignKeyValues();\n    eventHandler.endNonterminal(\"ICForeignKeyTarget\", e0);\n  }\n\n  function parse_ICForeignKeyValues()\n  {\n    eventHandler.startNonterminal(\"ICForeignKeyValues\", e0);\n    shift(95);                      // 'collection'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(62);                // S^WS | '(:' | 'node'\n    shift(191);                     // 'node'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    whitespace();\n    parse_VarRef();\n    lookahead1W(57);                // S^WS | '(:' | 'key'\n    shift(168);                     // 'key'\n    lookahead1W(265);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_PathExpr();\n    eventHandler.endNonterminal(\"ICForeignKeyValues\", e0);\n  }\n\n  function try_Comment()\n  {\n    shiftT(36);                     // '(:'\n    for (;;)\n    {\n      lookahead1(89);               // CommentContents | '(:' | ':)'\n      if (l1 == 50)                 // ':)'\n      {\n        break;\n      }\n      switch (l1)\n      {\n      case 24:                      // CommentContents\n        shiftT(24);                 // CommentContents\n        break;\n      default:\n        try_Comment();\n      }\n    }\n    shiftT(50);                     // ':)'\n  }\n\n  function try_Whitespace()\n  {\n    switch (l1)\n    {\n    case 22:                        // S^WS\n      shiftT(22);                   // S^WS\n      break;\n    default:\n      try_Comment();\n    }\n  }\n\n  function parse_EQName()\n  {\n    eventHandler.startNonterminal(\"EQName\", e0);\n    lookahead1(249);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      shift(82);                    // 'attribute'\n      break;\n    case 96:                        // 'comment'\n      shift(96);                    // 'comment'\n      break;\n    case 120:                       // 'document-node'\n      shift(120);                   // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shift(121);                   // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shift(124);                   // 'empty-sequence'\n      break;\n    case 145:                       // 'function'\n      shift(145);                   // 'function'\n      break;\n    case 152:                       // 'if'\n      shift(152);                   // 'if'\n      break;\n    case 165:                       // 'item'\n      shift(165);                   // 'item'\n      break;\n    case 185:                       // 'namespace-node'\n      shift(185);                   // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    case 216:                       // 'processing-instruction'\n      shift(216);                   // 'processing-instruction'\n      break;\n    case 226:                       // 'schema-attribute'\n      shift(226);                   // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shift(227);                   // 'schema-element'\n      break;\n    case 243:                       // 'switch'\n      shift(243);                   // 'switch'\n      break;\n    case 244:                       // 'text'\n      shift(244);                   // 'text'\n      break;\n    case 253:                       // 'typeswitch'\n      shift(253);                   // 'typeswitch'\n      break;\n    case 78:                        // 'array'\n      shift(78);                    // 'array'\n      break;\n    case 167:                       // 'json-item'\n      shift(167);                   // 'json-item'\n      break;\n    case 242:                       // 'structured-item'\n      shift(242);                   // 'structured-item'\n      break;\n    default:\n      parse_FunctionName();\n    }\n    eventHandler.endNonterminal(\"EQName\", e0);\n  }\n\n  function try_EQName()\n  {\n    lookahead1(249);                // EQName^Token | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' | 'and' |\n    switch (l1)\n    {\n    case 82:                        // 'attribute'\n      shiftT(82);                   // 'attribute'\n      break;\n    case 96:                        // 'comment'\n      shiftT(96);                   // 'comment'\n      break;\n    case 120:                       // 'document-node'\n      shiftT(120);                  // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shiftT(121);                  // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shiftT(124);                  // 'empty-sequence'\n      break;\n    case 145:                       // 'function'\n      shiftT(145);                  // 'function'\n      break;\n    case 152:                       // 'if'\n      shiftT(152);                  // 'if'\n      break;\n    case 165:                       // 'item'\n      shiftT(165);                  // 'item'\n      break;\n    case 185:                       // 'namespace-node'\n      shiftT(185);                  // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    case 216:                       // 'processing-instruction'\n      shiftT(216);                  // 'processing-instruction'\n      break;\n    case 226:                       // 'schema-attribute'\n      shiftT(226);                  // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shiftT(227);                  // 'schema-element'\n      break;\n    case 243:                       // 'switch'\n      shiftT(243);                  // 'switch'\n      break;\n    case 244:                       // 'text'\n      shiftT(244);                  // 'text'\n      break;\n    case 253:                       // 'typeswitch'\n      shiftT(253);                  // 'typeswitch'\n      break;\n    case 78:                        // 'array'\n      shiftT(78);                   // 'array'\n      break;\n    case 167:                       // 'json-item'\n      shiftT(167);                  // 'json-item'\n      break;\n    case 242:                       // 'structured-item'\n      shiftT(242);                  // 'structured-item'\n      break;\n    default:\n      try_FunctionName();\n    }\n  }\n\n  function parse_FunctionName()\n  {\n    eventHandler.startNonterminal(\"FunctionName\", e0);\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shift(6);                     // EQName^Token\n      break;\n    case 70:                        // 'after'\n      shift(70);                    // 'after'\n      break;\n    case 73:                        // 'ancestor'\n      shift(73);                    // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shift(74);                    // 'ancestor-or-self'\n      break;\n    case 75:                        // 'and'\n      shift(75);                    // 'and'\n      break;\n    case 79:                        // 'as'\n      shift(79);                    // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shift(80);                    // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shift(84);                    // 'before'\n      break;\n    case 88:                        // 'case'\n      shift(88);                    // 'case'\n      break;\n    case 89:                        // 'cast'\n      shift(89);                    // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shift(90);                    // 'castable'\n      break;\n    case 93:                        // 'child'\n      shift(93);                    // 'child'\n      break;\n    case 94:                        // 'collation'\n      shift(94);                    // 'collation'\n      break;\n    case 103:                       // 'copy'\n      shift(103);                   // 'copy'\n      break;\n    case 105:                       // 'count'\n      shift(105);                   // 'count'\n      break;\n    case 108:                       // 'declare'\n      shift(108);                   // 'declare'\n      break;\n    case 109:                       // 'default'\n      shift(109);                   // 'default'\n      break;\n    case 110:                       // 'delete'\n      shift(110);                   // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shift(111);                   // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shift(112);                   // 'descendant-or-self'\n      break;\n    case 113:                       // 'descending'\n      shift(113);                   // 'descending'\n      break;\n    case 118:                       // 'div'\n      shift(118);                   // 'div'\n      break;\n    case 119:                       // 'document'\n      shift(119);                   // 'document'\n      break;\n    case 122:                       // 'else'\n      shift(122);                   // 'else'\n      break;\n    case 123:                       // 'empty'\n      shift(123);                   // 'empty'\n      break;\n    case 126:                       // 'end'\n      shift(126);                   // 'end'\n      break;\n    case 128:                       // 'eq'\n      shift(128);                   // 'eq'\n      break;\n    case 129:                       // 'every'\n      shift(129);                   // 'every'\n      break;\n    case 131:                       // 'except'\n      shift(131);                   // 'except'\n      break;\n    case 134:                       // 'first'\n      shift(134);                   // 'first'\n      break;\n    case 135:                       // 'following'\n      shift(135);                   // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shift(136);                   // 'following-sibling'\n      break;\n    case 137:                       // 'for'\n      shift(137);                   // 'for'\n      break;\n    case 146:                       // 'ge'\n      shift(146);                   // 'ge'\n      break;\n    case 148:                       // 'group'\n      shift(148);                   // 'group'\n      break;\n    case 150:                       // 'gt'\n      shift(150);                   // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shift(151);                   // 'idiv'\n      break;\n    case 153:                       // 'import'\n      shift(153);                   // 'import'\n      break;\n    case 159:                       // 'insert'\n      shift(159);                   // 'insert'\n      break;\n    case 160:                       // 'instance'\n      shift(160);                   // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shift(162);                   // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shift(163);                   // 'into'\n      break;\n    case 164:                       // 'is'\n      shift(164);                   // 'is'\n      break;\n    case 170:                       // 'last'\n      shift(170);                   // 'last'\n      break;\n    case 172:                       // 'le'\n      shift(172);                   // 'le'\n      break;\n    case 174:                       // 'let'\n      shift(174);                   // 'let'\n      break;\n    case 178:                       // 'lt'\n      shift(178);                   // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shift(180);                   // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shift(181);                   // 'modify'\n      break;\n    case 182:                       // 'module'\n      shift(182);                   // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shift(184);                   // 'namespace'\n      break;\n    case 186:                       // 'ne'\n      shift(186);                   // 'ne'\n      break;\n    case 198:                       // 'only'\n      shift(198);                   // 'only'\n      break;\n    case 200:                       // 'or'\n      shift(200);                   // 'or'\n      break;\n    case 201:                       // 'order'\n      shift(201);                   // 'order'\n      break;\n    case 202:                       // 'ordered'\n      shift(202);                   // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shift(206);                   // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shift(212);                   // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shift(213);                   // 'preceding-sibling'\n      break;\n    case 218:                       // 'rename'\n      shift(218);                   // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shift(219);                   // 'replace'\n      break;\n    case 220:                       // 'return'\n      shift(220);                   // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shift(224);                   // 'satisfies'\n      break;\n    case 229:                       // 'self'\n      shift(229);                   // 'self'\n      break;\n    case 235:                       // 'some'\n      shift(235);                   // 'some'\n      break;\n    case 236:                       // 'stable'\n      shift(236);                   // 'stable'\n      break;\n    case 237:                       // 'start'\n      shift(237);                   // 'start'\n      break;\n    case 248:                       // 'to'\n      shift(248);                   // 'to'\n      break;\n    case 249:                       // 'treat'\n      shift(249);                   // 'treat'\n      break;\n    case 250:                       // 'try'\n      shift(250);                   // 'try'\n      break;\n    case 254:                       // 'union'\n      shift(254);                   // 'union'\n      break;\n    case 256:                       // 'unordered'\n      shift(256);                   // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shift(260);                   // 'validate'\n      break;\n    case 266:                       // 'where'\n      shift(266);                   // 'where'\n      break;\n    case 270:                       // 'with'\n      shift(270);                   // 'with'\n      break;\n    case 274:                       // 'xquery'\n      shift(274);                   // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shift(72);                    // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shift(83);                    // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shift(85);                    // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shift(86);                    // 'break'\n      break;\n    case 91:                        // 'catch'\n      shift(91);                    // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shift(98);                    // 'construction'\n      break;\n    case 101:                       // 'context'\n      shift(101);                   // 'context'\n      break;\n    case 102:                       // 'continue'\n      shift(102);                   // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shift(104);                   // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shift(106);                   // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shift(125);                   // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shift(132);                   // 'exit'\n      break;\n    case 133:                       // 'external'\n      shift(133);                   // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shift(141);                   // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shift(154);                   // 'in'\n      break;\n    case 155:                       // 'index'\n      shift(155);                   // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shift(161);                   // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shift(192);                   // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shift(199);                   // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shift(203);                   // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shift(222);                   // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shift(225);                   // 'schema'\n      break;\n    case 228:                       // 'score'\n      shift(228);                   // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shift(234);                   // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shift(240);                   // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shift(251);                   // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shift(252);                   // 'type'\n      break;\n    case 257:                       // 'updating'\n      shift(257);                   // 'updating'\n      break;\n    case 261:                       // 'value'\n      shift(261);                   // 'value'\n      break;\n    case 262:                       // 'variable'\n      shift(262);                   // 'variable'\n      break;\n    case 263:                       // 'version'\n      shift(263);                   // 'version'\n      break;\n    case 267:                       // 'while'\n      shift(267);                   // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shift(97);                    // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shift(176);                   // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shift(221);                   // 'returning'\n      break;\n    case 77:                        // 'append'\n      shift(77);                    // 'append'\n      break;\n    case 166:                       // 'json'\n      shift(166);                   // 'json'\n      break;\n    default:\n      shift(194);                   // 'object'\n    }\n    eventHandler.endNonterminal(\"FunctionName\", e0);\n  }\n\n  function try_FunctionName()\n  {\n    switch (l1)\n    {\n    case 6:                         // EQName^Token\n      shiftT(6);                    // EQName^Token\n      break;\n    case 70:                        // 'after'\n      shiftT(70);                   // 'after'\n      break;\n    case 73:                        // 'ancestor'\n      shiftT(73);                   // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shiftT(74);                   // 'ancestor-or-self'\n      break;\n    case 75:                        // 'and'\n      shiftT(75);                   // 'and'\n      break;\n    case 79:                        // 'as'\n      shiftT(79);                   // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shiftT(80);                   // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shiftT(84);                   // 'before'\n      break;\n    case 88:                        // 'case'\n      shiftT(88);                   // 'case'\n      break;\n    case 89:                        // 'cast'\n      shiftT(89);                   // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shiftT(90);                   // 'castable'\n      break;\n    case 93:                        // 'child'\n      shiftT(93);                   // 'child'\n      break;\n    case 94:                        // 'collation'\n      shiftT(94);                   // 'collation'\n      break;\n    case 103:                       // 'copy'\n      shiftT(103);                  // 'copy'\n      break;\n    case 105:                       // 'count'\n      shiftT(105);                  // 'count'\n      break;\n    case 108:                       // 'declare'\n      shiftT(108);                  // 'declare'\n      break;\n    case 109:                       // 'default'\n      shiftT(109);                  // 'default'\n      break;\n    case 110:                       // 'delete'\n      shiftT(110);                  // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shiftT(111);                  // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shiftT(112);                  // 'descendant-or-self'\n      break;\n    case 113:                       // 'descending'\n      shiftT(113);                  // 'descending'\n      break;\n    case 118:                       // 'div'\n      shiftT(118);                  // 'div'\n      break;\n    case 119:                       // 'document'\n      shiftT(119);                  // 'document'\n      break;\n    case 122:                       // 'else'\n      shiftT(122);                  // 'else'\n      break;\n    case 123:                       // 'empty'\n      shiftT(123);                  // 'empty'\n      break;\n    case 126:                       // 'end'\n      shiftT(126);                  // 'end'\n      break;\n    case 128:                       // 'eq'\n      shiftT(128);                  // 'eq'\n      break;\n    case 129:                       // 'every'\n      shiftT(129);                  // 'every'\n      break;\n    case 131:                       // 'except'\n      shiftT(131);                  // 'except'\n      break;\n    case 134:                       // 'first'\n      shiftT(134);                  // 'first'\n      break;\n    case 135:                       // 'following'\n      shiftT(135);                  // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shiftT(136);                  // 'following-sibling'\n      break;\n    case 137:                       // 'for'\n      shiftT(137);                  // 'for'\n      break;\n    case 146:                       // 'ge'\n      shiftT(146);                  // 'ge'\n      break;\n    case 148:                       // 'group'\n      shiftT(148);                  // 'group'\n      break;\n    case 150:                       // 'gt'\n      shiftT(150);                  // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shiftT(151);                  // 'idiv'\n      break;\n    case 153:                       // 'import'\n      shiftT(153);                  // 'import'\n      break;\n    case 159:                       // 'insert'\n      shiftT(159);                  // 'insert'\n      break;\n    case 160:                       // 'instance'\n      shiftT(160);                  // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shiftT(162);                  // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shiftT(163);                  // 'into'\n      break;\n    case 164:                       // 'is'\n      shiftT(164);                  // 'is'\n      break;\n    case 170:                       // 'last'\n      shiftT(170);                  // 'last'\n      break;\n    case 172:                       // 'le'\n      shiftT(172);                  // 'le'\n      break;\n    case 174:                       // 'let'\n      shiftT(174);                  // 'let'\n      break;\n    case 178:                       // 'lt'\n      shiftT(178);                  // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shiftT(180);                  // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shiftT(181);                  // 'modify'\n      break;\n    case 182:                       // 'module'\n      shiftT(182);                  // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shiftT(184);                  // 'namespace'\n      break;\n    case 186:                       // 'ne'\n      shiftT(186);                  // 'ne'\n      break;\n    case 198:                       // 'only'\n      shiftT(198);                  // 'only'\n      break;\n    case 200:                       // 'or'\n      shiftT(200);                  // 'or'\n      break;\n    case 201:                       // 'order'\n      shiftT(201);                  // 'order'\n      break;\n    case 202:                       // 'ordered'\n      shiftT(202);                  // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shiftT(206);                  // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shiftT(212);                  // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shiftT(213);                  // 'preceding-sibling'\n      break;\n    case 218:                       // 'rename'\n      shiftT(218);                  // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shiftT(219);                  // 'replace'\n      break;\n    case 220:                       // 'return'\n      shiftT(220);                  // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shiftT(224);                  // 'satisfies'\n      break;\n    case 229:                       // 'self'\n      shiftT(229);                  // 'self'\n      break;\n    case 235:                       // 'some'\n      shiftT(235);                  // 'some'\n      break;\n    case 236:                       // 'stable'\n      shiftT(236);                  // 'stable'\n      break;\n    case 237:                       // 'start'\n      shiftT(237);                  // 'start'\n      break;\n    case 248:                       // 'to'\n      shiftT(248);                  // 'to'\n      break;\n    case 249:                       // 'treat'\n      shiftT(249);                  // 'treat'\n      break;\n    case 250:                       // 'try'\n      shiftT(250);                  // 'try'\n      break;\n    case 254:                       // 'union'\n      shiftT(254);                  // 'union'\n      break;\n    case 256:                       // 'unordered'\n      shiftT(256);                  // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shiftT(260);                  // 'validate'\n      break;\n    case 266:                       // 'where'\n      shiftT(266);                  // 'where'\n      break;\n    case 270:                       // 'with'\n      shiftT(270);                  // 'with'\n      break;\n    case 274:                       // 'xquery'\n      shiftT(274);                  // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shiftT(72);                   // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shiftT(83);                   // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shiftT(85);                   // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shiftT(86);                   // 'break'\n      break;\n    case 91:                        // 'catch'\n      shiftT(91);                   // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shiftT(98);                   // 'construction'\n      break;\n    case 101:                       // 'context'\n      shiftT(101);                  // 'context'\n      break;\n    case 102:                       // 'continue'\n      shiftT(102);                  // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shiftT(104);                  // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shiftT(106);                  // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shiftT(125);                  // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shiftT(132);                  // 'exit'\n      break;\n    case 133:                       // 'external'\n      shiftT(133);                  // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shiftT(141);                  // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shiftT(154);                  // 'in'\n      break;\n    case 155:                       // 'index'\n      shiftT(155);                  // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shiftT(161);                  // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shiftT(171);                  // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shiftT(192);                  // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shiftT(199);                  // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shiftT(203);                  // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shiftT(222);                  // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shiftT(225);                  // 'schema'\n      break;\n    case 228:                       // 'score'\n      shiftT(228);                  // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shiftT(234);                  // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shiftT(240);                  // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shiftT(251);                  // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shiftT(252);                  // 'type'\n      break;\n    case 257:                       // 'updating'\n      shiftT(257);                  // 'updating'\n      break;\n    case 261:                       // 'value'\n      shiftT(261);                  // 'value'\n      break;\n    case 262:                       // 'variable'\n      shiftT(262);                  // 'variable'\n      break;\n    case 263:                       // 'version'\n      shiftT(263);                  // 'version'\n      break;\n    case 267:                       // 'while'\n      shiftT(267);                  // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shiftT(97);                   // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shiftT(176);                  // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shiftT(221);                  // 'returning'\n      break;\n    case 77:                        // 'append'\n      shiftT(77);                   // 'append'\n      break;\n    case 166:                       // 'json'\n      shiftT(166);                  // 'json'\n      break;\n    default:\n      shiftT(194);                  // 'object'\n    }\n  }\n\n  function parse_NCName()\n  {\n    eventHandler.startNonterminal(\"NCName\", e0);\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shift(19);                    // NCName^Token\n      break;\n    case 70:                        // 'after'\n      shift(70);                    // 'after'\n      break;\n    case 75:                        // 'and'\n      shift(75);                    // 'and'\n      break;\n    case 79:                        // 'as'\n      shift(79);                    // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shift(80);                    // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shift(84);                    // 'before'\n      break;\n    case 88:                        // 'case'\n      shift(88);                    // 'case'\n      break;\n    case 89:                        // 'cast'\n      shift(89);                    // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shift(90);                    // 'castable'\n      break;\n    case 94:                        // 'collation'\n      shift(94);                    // 'collation'\n      break;\n    case 105:                       // 'count'\n      shift(105);                   // 'count'\n      break;\n    case 109:                       // 'default'\n      shift(109);                   // 'default'\n      break;\n    case 113:                       // 'descending'\n      shift(113);                   // 'descending'\n      break;\n    case 118:                       // 'div'\n      shift(118);                   // 'div'\n      break;\n    case 122:                       // 'else'\n      shift(122);                   // 'else'\n      break;\n    case 123:                       // 'empty'\n      shift(123);                   // 'empty'\n      break;\n    case 126:                       // 'end'\n      shift(126);                   // 'end'\n      break;\n    case 128:                       // 'eq'\n      shift(128);                   // 'eq'\n      break;\n    case 131:                       // 'except'\n      shift(131);                   // 'except'\n      break;\n    case 137:                       // 'for'\n      shift(137);                   // 'for'\n      break;\n    case 146:                       // 'ge'\n      shift(146);                   // 'ge'\n      break;\n    case 148:                       // 'group'\n      shift(148);                   // 'group'\n      break;\n    case 150:                       // 'gt'\n      shift(150);                   // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shift(151);                   // 'idiv'\n      break;\n    case 160:                       // 'instance'\n      shift(160);                   // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shift(162);                   // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shift(163);                   // 'into'\n      break;\n    case 164:                       // 'is'\n      shift(164);                   // 'is'\n      break;\n    case 172:                       // 'le'\n      shift(172);                   // 'le'\n      break;\n    case 174:                       // 'let'\n      shift(174);                   // 'let'\n      break;\n    case 178:                       // 'lt'\n      shift(178);                   // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shift(180);                   // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shift(181);                   // 'modify'\n      break;\n    case 186:                       // 'ne'\n      shift(186);                   // 'ne'\n      break;\n    case 198:                       // 'only'\n      shift(198);                   // 'only'\n      break;\n    case 200:                       // 'or'\n      shift(200);                   // 'or'\n      break;\n    case 201:                       // 'order'\n      shift(201);                   // 'order'\n      break;\n    case 220:                       // 'return'\n      shift(220);                   // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shift(224);                   // 'satisfies'\n      break;\n    case 236:                       // 'stable'\n      shift(236);                   // 'stable'\n      break;\n    case 237:                       // 'start'\n      shift(237);                   // 'start'\n      break;\n    case 248:                       // 'to'\n      shift(248);                   // 'to'\n      break;\n    case 249:                       // 'treat'\n      shift(249);                   // 'treat'\n      break;\n    case 254:                       // 'union'\n      shift(254);                   // 'union'\n      break;\n    case 266:                       // 'where'\n      shift(266);                   // 'where'\n      break;\n    case 270:                       // 'with'\n      shift(270);                   // 'with'\n      break;\n    case 73:                        // 'ancestor'\n      shift(73);                    // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shift(74);                    // 'ancestor-or-self'\n      break;\n    case 82:                        // 'attribute'\n      shift(82);                    // 'attribute'\n      break;\n    case 93:                        // 'child'\n      shift(93);                    // 'child'\n      break;\n    case 96:                        // 'comment'\n      shift(96);                    // 'comment'\n      break;\n    case 103:                       // 'copy'\n      shift(103);                   // 'copy'\n      break;\n    case 108:                       // 'declare'\n      shift(108);                   // 'declare'\n      break;\n    case 110:                       // 'delete'\n      shift(110);                   // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shift(111);                   // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shift(112);                   // 'descendant-or-self'\n      break;\n    case 119:                       // 'document'\n      shift(119);                   // 'document'\n      break;\n    case 120:                       // 'document-node'\n      shift(120);                   // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shift(121);                   // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shift(124);                   // 'empty-sequence'\n      break;\n    case 129:                       // 'every'\n      shift(129);                   // 'every'\n      break;\n    case 134:                       // 'first'\n      shift(134);                   // 'first'\n      break;\n    case 135:                       // 'following'\n      shift(135);                   // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shift(136);                   // 'following-sibling'\n      break;\n    case 145:                       // 'function'\n      shift(145);                   // 'function'\n      break;\n    case 152:                       // 'if'\n      shift(152);                   // 'if'\n      break;\n    case 153:                       // 'import'\n      shift(153);                   // 'import'\n      break;\n    case 159:                       // 'insert'\n      shift(159);                   // 'insert'\n      break;\n    case 165:                       // 'item'\n      shift(165);                   // 'item'\n      break;\n    case 170:                       // 'last'\n      shift(170);                   // 'last'\n      break;\n    case 182:                       // 'module'\n      shift(182);                   // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shift(184);                   // 'namespace'\n      break;\n    case 185:                       // 'namespace-node'\n      shift(185);                   // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shift(191);                   // 'node'\n      break;\n    case 202:                       // 'ordered'\n      shift(202);                   // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shift(206);                   // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shift(212);                   // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shift(213);                   // 'preceding-sibling'\n      break;\n    case 216:                       // 'processing-instruction'\n      shift(216);                   // 'processing-instruction'\n      break;\n    case 218:                       // 'rename'\n      shift(218);                   // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shift(219);                   // 'replace'\n      break;\n    case 226:                       // 'schema-attribute'\n      shift(226);                   // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shift(227);                   // 'schema-element'\n      break;\n    case 229:                       // 'self'\n      shift(229);                   // 'self'\n      break;\n    case 235:                       // 'some'\n      shift(235);                   // 'some'\n      break;\n    case 243:                       // 'switch'\n      shift(243);                   // 'switch'\n      break;\n    case 244:                       // 'text'\n      shift(244);                   // 'text'\n      break;\n    case 250:                       // 'try'\n      shift(250);                   // 'try'\n      break;\n    case 253:                       // 'typeswitch'\n      shift(253);                   // 'typeswitch'\n      break;\n    case 256:                       // 'unordered'\n      shift(256);                   // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shift(260);                   // 'validate'\n      break;\n    case 262:                       // 'variable'\n      shift(262);                   // 'variable'\n      break;\n    case 274:                       // 'xquery'\n      shift(274);                   // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shift(72);                    // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shift(81);                    // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shift(83);                    // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shift(85);                    // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shift(86);                    // 'break'\n      break;\n    case 91:                        // 'catch'\n      shift(91);                    // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shift(98);                    // 'construction'\n      break;\n    case 101:                       // 'context'\n      shift(101);                   // 'context'\n      break;\n    case 102:                       // 'continue'\n      shift(102);                   // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shift(104);                   // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shift(106);                   // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shift(125);                   // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shift(132);                   // 'exit'\n      break;\n    case 133:                       // 'external'\n      shift(133);                   // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shift(141);                   // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shift(154);                   // 'in'\n      break;\n    case 155:                       // 'index'\n      shift(155);                   // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shift(161);                   // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shift(171);                   // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shift(192);                   // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shift(199);                   // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shift(203);                   // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shift(222);                   // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shift(225);                   // 'schema'\n      break;\n    case 228:                       // 'score'\n      shift(228);                   // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shift(234);                   // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shift(240);                   // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shift(251);                   // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shift(252);                   // 'type'\n      break;\n    case 257:                       // 'updating'\n      shift(257);                   // 'updating'\n      break;\n    case 261:                       // 'value'\n      shift(261);                   // 'value'\n      break;\n    case 263:                       // 'version'\n      shift(263);                   // 'version'\n      break;\n    case 267:                       // 'while'\n      shift(267);                   // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shift(97);                    // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shift(176);                   // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shift(221);                   // 'returning'\n      break;\n    case 77:                        // 'append'\n      shift(77);                    // 'append'\n      break;\n    case 166:                       // 'json'\n      shift(166);                   // 'json'\n      break;\n    default:\n      shift(194);                   // 'object'\n    }\n    eventHandler.endNonterminal(\"NCName\", e0);\n  }\n\n  function try_NCName()\n  {\n    switch (l1)\n    {\n    case 19:                        // NCName^Token\n      shiftT(19);                   // NCName^Token\n      break;\n    case 70:                        // 'after'\n      shiftT(70);                   // 'after'\n      break;\n    case 75:                        // 'and'\n      shiftT(75);                   // 'and'\n      break;\n    case 79:                        // 'as'\n      shiftT(79);                   // 'as'\n      break;\n    case 80:                        // 'ascending'\n      shiftT(80);                   // 'ascending'\n      break;\n    case 84:                        // 'before'\n      shiftT(84);                   // 'before'\n      break;\n    case 88:                        // 'case'\n      shiftT(88);                   // 'case'\n      break;\n    case 89:                        // 'cast'\n      shiftT(89);                   // 'cast'\n      break;\n    case 90:                        // 'castable'\n      shiftT(90);                   // 'castable'\n      break;\n    case 94:                        // 'collation'\n      shiftT(94);                   // 'collation'\n      break;\n    case 105:                       // 'count'\n      shiftT(105);                  // 'count'\n      break;\n    case 109:                       // 'default'\n      shiftT(109);                  // 'default'\n      break;\n    case 113:                       // 'descending'\n      shiftT(113);                  // 'descending'\n      break;\n    case 118:                       // 'div'\n      shiftT(118);                  // 'div'\n      break;\n    case 122:                       // 'else'\n      shiftT(122);                  // 'else'\n      break;\n    case 123:                       // 'empty'\n      shiftT(123);                  // 'empty'\n      break;\n    case 126:                       // 'end'\n      shiftT(126);                  // 'end'\n      break;\n    case 128:                       // 'eq'\n      shiftT(128);                  // 'eq'\n      break;\n    case 131:                       // 'except'\n      shiftT(131);                  // 'except'\n      break;\n    case 137:                       // 'for'\n      shiftT(137);                  // 'for'\n      break;\n    case 146:                       // 'ge'\n      shiftT(146);                  // 'ge'\n      break;\n    case 148:                       // 'group'\n      shiftT(148);                  // 'group'\n      break;\n    case 150:                       // 'gt'\n      shiftT(150);                  // 'gt'\n      break;\n    case 151:                       // 'idiv'\n      shiftT(151);                  // 'idiv'\n      break;\n    case 160:                       // 'instance'\n      shiftT(160);                  // 'instance'\n      break;\n    case 162:                       // 'intersect'\n      shiftT(162);                  // 'intersect'\n      break;\n    case 163:                       // 'into'\n      shiftT(163);                  // 'into'\n      break;\n    case 164:                       // 'is'\n      shiftT(164);                  // 'is'\n      break;\n    case 172:                       // 'le'\n      shiftT(172);                  // 'le'\n      break;\n    case 174:                       // 'let'\n      shiftT(174);                  // 'let'\n      break;\n    case 178:                       // 'lt'\n      shiftT(178);                  // 'lt'\n      break;\n    case 180:                       // 'mod'\n      shiftT(180);                  // 'mod'\n      break;\n    case 181:                       // 'modify'\n      shiftT(181);                  // 'modify'\n      break;\n    case 186:                       // 'ne'\n      shiftT(186);                  // 'ne'\n      break;\n    case 198:                       // 'only'\n      shiftT(198);                  // 'only'\n      break;\n    case 200:                       // 'or'\n      shiftT(200);                  // 'or'\n      break;\n    case 201:                       // 'order'\n      shiftT(201);                  // 'order'\n      break;\n    case 220:                       // 'return'\n      shiftT(220);                  // 'return'\n      break;\n    case 224:                       // 'satisfies'\n      shiftT(224);                  // 'satisfies'\n      break;\n    case 236:                       // 'stable'\n      shiftT(236);                  // 'stable'\n      break;\n    case 237:                       // 'start'\n      shiftT(237);                  // 'start'\n      break;\n    case 248:                       // 'to'\n      shiftT(248);                  // 'to'\n      break;\n    case 249:                       // 'treat'\n      shiftT(249);                  // 'treat'\n      break;\n    case 254:                       // 'union'\n      shiftT(254);                  // 'union'\n      break;\n    case 266:                       // 'where'\n      shiftT(266);                  // 'where'\n      break;\n    case 270:                       // 'with'\n      shiftT(270);                  // 'with'\n      break;\n    case 73:                        // 'ancestor'\n      shiftT(73);                   // 'ancestor'\n      break;\n    case 74:                        // 'ancestor-or-self'\n      shiftT(74);                   // 'ancestor-or-self'\n      break;\n    case 82:                        // 'attribute'\n      shiftT(82);                   // 'attribute'\n      break;\n    case 93:                        // 'child'\n      shiftT(93);                   // 'child'\n      break;\n    case 96:                        // 'comment'\n      shiftT(96);                   // 'comment'\n      break;\n    case 103:                       // 'copy'\n      shiftT(103);                  // 'copy'\n      break;\n    case 108:                       // 'declare'\n      shiftT(108);                  // 'declare'\n      break;\n    case 110:                       // 'delete'\n      shiftT(110);                  // 'delete'\n      break;\n    case 111:                       // 'descendant'\n      shiftT(111);                  // 'descendant'\n      break;\n    case 112:                       // 'descendant-or-self'\n      shiftT(112);                  // 'descendant-or-self'\n      break;\n    case 119:                       // 'document'\n      shiftT(119);                  // 'document'\n      break;\n    case 120:                       // 'document-node'\n      shiftT(120);                  // 'document-node'\n      break;\n    case 121:                       // 'element'\n      shiftT(121);                  // 'element'\n      break;\n    case 124:                       // 'empty-sequence'\n      shiftT(124);                  // 'empty-sequence'\n      break;\n    case 129:                       // 'every'\n      shiftT(129);                  // 'every'\n      break;\n    case 134:                       // 'first'\n      shiftT(134);                  // 'first'\n      break;\n    case 135:                       // 'following'\n      shiftT(135);                  // 'following'\n      break;\n    case 136:                       // 'following-sibling'\n      shiftT(136);                  // 'following-sibling'\n      break;\n    case 145:                       // 'function'\n      shiftT(145);                  // 'function'\n      break;\n    case 152:                       // 'if'\n      shiftT(152);                  // 'if'\n      break;\n    case 153:                       // 'import'\n      shiftT(153);                  // 'import'\n      break;\n    case 159:                       // 'insert'\n      shiftT(159);                  // 'insert'\n      break;\n    case 165:                       // 'item'\n      shiftT(165);                  // 'item'\n      break;\n    case 170:                       // 'last'\n      shiftT(170);                  // 'last'\n      break;\n    case 182:                       // 'module'\n      shiftT(182);                  // 'module'\n      break;\n    case 184:                       // 'namespace'\n      shiftT(184);                  // 'namespace'\n      break;\n    case 185:                       // 'namespace-node'\n      shiftT(185);                  // 'namespace-node'\n      break;\n    case 191:                       // 'node'\n      shiftT(191);                  // 'node'\n      break;\n    case 202:                       // 'ordered'\n      shiftT(202);                  // 'ordered'\n      break;\n    case 206:                       // 'parent'\n      shiftT(206);                  // 'parent'\n      break;\n    case 212:                       // 'preceding'\n      shiftT(212);                  // 'preceding'\n      break;\n    case 213:                       // 'preceding-sibling'\n      shiftT(213);                  // 'preceding-sibling'\n      break;\n    case 216:                       // 'processing-instruction'\n      shiftT(216);                  // 'processing-instruction'\n      break;\n    case 218:                       // 'rename'\n      shiftT(218);                  // 'rename'\n      break;\n    case 219:                       // 'replace'\n      shiftT(219);                  // 'replace'\n      break;\n    case 226:                       // 'schema-attribute'\n      shiftT(226);                  // 'schema-attribute'\n      break;\n    case 227:                       // 'schema-element'\n      shiftT(227);                  // 'schema-element'\n      break;\n    case 229:                       // 'self'\n      shiftT(229);                  // 'self'\n      break;\n    case 235:                       // 'some'\n      shiftT(235);                  // 'some'\n      break;\n    case 243:                       // 'switch'\n      shiftT(243);                  // 'switch'\n      break;\n    case 244:                       // 'text'\n      shiftT(244);                  // 'text'\n      break;\n    case 250:                       // 'try'\n      shiftT(250);                  // 'try'\n      break;\n    case 253:                       // 'typeswitch'\n      shiftT(253);                  // 'typeswitch'\n      break;\n    case 256:                       // 'unordered'\n      shiftT(256);                  // 'unordered'\n      break;\n    case 260:                       // 'validate'\n      shiftT(260);                  // 'validate'\n      break;\n    case 262:                       // 'variable'\n      shiftT(262);                  // 'variable'\n      break;\n    case 274:                       // 'xquery'\n      shiftT(274);                  // 'xquery'\n      break;\n    case 72:                        // 'allowing'\n      shiftT(72);                   // 'allowing'\n      break;\n    case 81:                        // 'at'\n      shiftT(81);                   // 'at'\n      break;\n    case 83:                        // 'base-uri'\n      shiftT(83);                   // 'base-uri'\n      break;\n    case 85:                        // 'boundary-space'\n      shiftT(85);                   // 'boundary-space'\n      break;\n    case 86:                        // 'break'\n      shiftT(86);                   // 'break'\n      break;\n    case 91:                        // 'catch'\n      shiftT(91);                   // 'catch'\n      break;\n    case 98:                        // 'construction'\n      shiftT(98);                   // 'construction'\n      break;\n    case 101:                       // 'context'\n      shiftT(101);                  // 'context'\n      break;\n    case 102:                       // 'continue'\n      shiftT(102);                  // 'continue'\n      break;\n    case 104:                       // 'copy-namespaces'\n      shiftT(104);                  // 'copy-namespaces'\n      break;\n    case 106:                       // 'decimal-format'\n      shiftT(106);                  // 'decimal-format'\n      break;\n    case 125:                       // 'encoding'\n      shiftT(125);                  // 'encoding'\n      break;\n    case 132:                       // 'exit'\n      shiftT(132);                  // 'exit'\n      break;\n    case 133:                       // 'external'\n      shiftT(133);                  // 'external'\n      break;\n    case 141:                       // 'ft-option'\n      shiftT(141);                  // 'ft-option'\n      break;\n    case 154:                       // 'in'\n      shiftT(154);                  // 'in'\n      break;\n    case 155:                       // 'index'\n      shiftT(155);                  // 'index'\n      break;\n    case 161:                       // 'integrity'\n      shiftT(161);                  // 'integrity'\n      break;\n    case 171:                       // 'lax'\n      shiftT(171);                  // 'lax'\n      break;\n    case 192:                       // 'nodes'\n      shiftT(192);                  // 'nodes'\n      break;\n    case 199:                       // 'option'\n      shiftT(199);                  // 'option'\n      break;\n    case 203:                       // 'ordering'\n      shiftT(203);                  // 'ordering'\n      break;\n    case 222:                       // 'revalidation'\n      shiftT(222);                  // 'revalidation'\n      break;\n    case 225:                       // 'schema'\n      shiftT(225);                  // 'schema'\n      break;\n    case 228:                       // 'score'\n      shiftT(228);                  // 'score'\n      break;\n    case 234:                       // 'sliding'\n      shiftT(234);                  // 'sliding'\n      break;\n    case 240:                       // 'strict'\n      shiftT(240);                  // 'strict'\n      break;\n    case 251:                       // 'tumbling'\n      shiftT(251);                  // 'tumbling'\n      break;\n    case 252:                       // 'type'\n      shiftT(252);                  // 'type'\n      break;\n    case 257:                       // 'updating'\n      shiftT(257);                  // 'updating'\n      break;\n    case 261:                       // 'value'\n      shiftT(261);                  // 'value'\n      break;\n    case 263:                       // 'version'\n      shiftT(263);                  // 'version'\n      break;\n    case 267:                       // 'while'\n      shiftT(267);                  // 'while'\n      break;\n    case 97:                        // 'constraint'\n      shiftT(97);                   // 'constraint'\n      break;\n    case 176:                       // 'loop'\n      shiftT(176);                  // 'loop'\n      break;\n    case 221:                       // 'returning'\n      shiftT(221);                  // 'returning'\n      break;\n    case 77:                        // 'append'\n      shiftT(77);                   // 'append'\n      break;\n    case 166:                       // 'json'\n      shiftT(166);                  // 'json'\n      break;\n    default:\n      shiftT(194);                  // 'object'\n    }\n  }\n\n  function parse_MainModule()\n  {\n    eventHandler.startNonterminal(\"MainModule\", e0);\n    parse_Prolog();\n    whitespace();\n    parse_Program();\n    eventHandler.endNonterminal(\"MainModule\", e0);\n  }\n\n  function parse_Program()\n  {\n    eventHandler.startNonterminal(\"Program\", e0);\n    parse_StatementsAndOptionalExpr();\n    eventHandler.endNonterminal(\"Program\", e0);\n  }\n\n  function parse_Statements()\n  {\n    eventHandler.startNonterminal(\"Statements\", e0);\n    for (;;)\n    {\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 34:                      // '('\n        lookahead2W(268);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 35:                      // '(#'\n        lookahead2(251);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n        break;\n      case 46:                      // '/'\n        lookahead2W(283);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 47:                      // '//'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 54:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 55:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 59:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 66:                      // '@'\n        lookahead2W(256);           // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 68:                      // '['\n        lookahead2W(271);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 77:                      // 'append'\n        lookahead2W(199);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 82:                      // 'attribute'\n        lookahead2W(280);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 121:                     // 'element'\n        lookahead2W(279);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 132:                     // 'exit'\n        lookahead2W(202);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 137:                     // 'for'\n        lookahead2W(207);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 174:                     // 'let'\n        lookahead2W(204);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 218:                     // 'rename'\n        lookahead2W(205);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 219:                     // 'replace'\n        lookahead2W(206);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 260:                     // 'validate'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 276:                     // '{'\n        lookahead2W(276);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 278:                     // '{|'\n        lookahead2W(272);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 5:                       // Wildcard\n      case 45:                      // '..'\n        lookahead2W(185);           // S^WS | EOF | '!' | '!=' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' | '<' |\n        break;\n      case 31:                      // '$'\n      case 32:                      // '%'\n        lookahead2W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 40:                      // '+'\n      case 42:                      // '-'\n        lookahead2W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 86:                      // 'break'\n      case 102:                     // 'continue'\n        lookahead2W(200);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 110:                     // 'delete'\n      case 159:                     // 'insert'\n        lookahead2W(208);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 184:                     // 'namespace'\n      case 216:                     // 'processing-instruction'\n        lookahead2W(267);           // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 103:                     // 'copy'\n      case 129:                     // 'every'\n      case 235:                     // 'some'\n      case 262:                     // 'variable'\n        lookahead2W(196);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 44:                      // '.'\n        lookahead2W(191);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n        break;\n      case 78:                      // 'array'\n      case 124:                     // 'empty-sequence'\n      case 165:                     // 'item'\n      case 167:                     // 'json-item'\n      case 242:                     // 'structured-item'\n        lookahead2W(190);           // S^WS | EOF | '!' | '!=' | '#' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n        break;\n      case 96:                      // 'comment'\n      case 119:                     // 'document'\n      case 202:                     // 'ordered'\n      case 244:                     // 'text'\n      case 250:                     // 'try'\n      case 256:                     // 'unordered'\n        lookahead2W(203);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 73:                      // 'ancestor'\n      case 74:                      // 'ancestor-or-self'\n      case 93:                      // 'child'\n      case 111:                     // 'descendant'\n      case 112:                     // 'descendant-or-self'\n      case 135:                     // 'following'\n      case 136:                     // 'following-sibling'\n      case 206:                     // 'parent'\n      case 212:                     // 'preceding'\n      case 213:                     // 'preceding-sibling'\n      case 229:                     // 'self'\n        lookahead2W(197);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 6:                       // EQName^Token\n      case 70:                      // 'after'\n      case 72:                      // 'allowing'\n      case 75:                      // 'and'\n      case 79:                      // 'as'\n      case 80:                      // 'ascending'\n      case 81:                      // 'at'\n      case 83:                      // 'base-uri'\n      case 84:                      // 'before'\n      case 85:                      // 'boundary-space'\n      case 88:                      // 'case'\n      case 89:                      // 'cast'\n      case 90:                      // 'castable'\n      case 91:                      // 'catch'\n      case 94:                      // 'collation'\n      case 97:                      // 'constraint'\n      case 98:                      // 'construction'\n      case 101:                     // 'context'\n      case 104:                     // 'copy-namespaces'\n      case 105:                     // 'count'\n      case 106:                     // 'decimal-format'\n      case 108:                     // 'declare'\n      case 109:                     // 'default'\n      case 113:                     // 'descending'\n      case 118:                     // 'div'\n      case 120:                     // 'document-node'\n      case 122:                     // 'else'\n      case 123:                     // 'empty'\n      case 125:                     // 'encoding'\n      case 126:                     // 'end'\n      case 128:                     // 'eq'\n      case 131:                     // 'except'\n      case 133:                     // 'external'\n      case 134:                     // 'first'\n      case 141:                     // 'ft-option'\n      case 145:                     // 'function'\n      case 146:                     // 'ge'\n      case 148:                     // 'group'\n      case 150:                     // 'gt'\n      case 151:                     // 'idiv'\n      case 152:                     // 'if'\n      case 153:                     // 'import'\n      case 154:                     // 'in'\n      case 155:                     // 'index'\n      case 160:                     // 'instance'\n      case 161:                     // 'integrity'\n      case 162:                     // 'intersect'\n      case 163:                     // 'into'\n      case 164:                     // 'is'\n      case 166:                     // 'json'\n      case 170:                     // 'last'\n      case 171:                     // 'lax'\n      case 172:                     // 'le'\n      case 176:                     // 'loop'\n      case 178:                     // 'lt'\n      case 180:                     // 'mod'\n      case 181:                     // 'modify'\n      case 182:                     // 'module'\n      case 185:                     // 'namespace-node'\n      case 186:                     // 'ne'\n      case 191:                     // 'node'\n      case 192:                     // 'nodes'\n      case 194:                     // 'object'\n      case 198:                     // 'only'\n      case 199:                     // 'option'\n      case 200:                     // 'or'\n      case 201:                     // 'order'\n      case 203:                     // 'ordering'\n      case 220:                     // 'return'\n      case 221:                     // 'returning'\n      case 222:                     // 'revalidation'\n      case 224:                     // 'satisfies'\n      case 225:                     // 'schema'\n      case 226:                     // 'schema-attribute'\n      case 227:                     // 'schema-element'\n      case 228:                     // 'score'\n      case 234:                     // 'sliding'\n      case 236:                     // 'stable'\n      case 237:                     // 'start'\n      case 240:                     // 'strict'\n      case 243:                     // 'switch'\n      case 248:                     // 'to'\n      case 249:                     // 'treat'\n      case 251:                     // 'tumbling'\n      case 252:                     // 'type'\n      case 253:                     // 'typeswitch'\n      case 254:                     // 'union'\n      case 257:                     // 'updating'\n      case 261:                     // 'value'\n      case 263:                     // 'version'\n      case 266:                     // 'where'\n      case 267:                     // 'while'\n      case 270:                     // 'with'\n      case 274:                     // 'xquery'\n        lookahead2W(194);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 53                  // ';'\n       && lk != 282                 // '}'\n       && lk != 12805               // Wildcard EOF\n       && lk != 12806               // EQName^Token EOF\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12844               // '.' EOF\n       && lk != 12845               // '..' EOF\n       && lk != 12846               // '/' EOF\n       && lk != 12870               // 'after' EOF\n       && lk != 12872               // 'allowing' EOF\n       && lk != 12873               // 'ancestor' EOF\n       && lk != 12874               // 'ancestor-or-self' EOF\n       && lk != 12875               // 'and' EOF\n       && lk != 12877               // 'append' EOF\n       && lk != 12878               // 'array' EOF\n       && lk != 12879               // 'as' EOF\n       && lk != 12880               // 'ascending' EOF\n       && lk != 12881               // 'at' EOF\n       && lk != 12882               // 'attribute' EOF\n       && lk != 12883               // 'base-uri' EOF\n       && lk != 12884               // 'before' EOF\n       && lk != 12885               // 'boundary-space' EOF\n       && lk != 12886               // 'break' EOF\n       && lk != 12888               // 'case' EOF\n       && lk != 12889               // 'cast' EOF\n       && lk != 12890               // 'castable' EOF\n       && lk != 12891               // 'catch' EOF\n       && lk != 12893               // 'child' EOF\n       && lk != 12894               // 'collation' EOF\n       && lk != 12896               // 'comment' EOF\n       && lk != 12897               // 'constraint' EOF\n       && lk != 12898               // 'construction' EOF\n       && lk != 12901               // 'context' EOF\n       && lk != 12902               // 'continue' EOF\n       && lk != 12903               // 'copy' EOF\n       && lk != 12904               // 'copy-namespaces' EOF\n       && lk != 12905               // 'count' EOF\n       && lk != 12906               // 'decimal-format' EOF\n       && lk != 12908               // 'declare' EOF\n       && lk != 12909               // 'default' EOF\n       && lk != 12910               // 'delete' EOF\n       && lk != 12911               // 'descendant' EOF\n       && lk != 12912               // 'descendant-or-self' EOF\n       && lk != 12913               // 'descending' EOF\n       && lk != 12918               // 'div' EOF\n       && lk != 12919               // 'document' EOF\n       && lk != 12920               // 'document-node' EOF\n       && lk != 12921               // 'element' EOF\n       && lk != 12922               // 'else' EOF\n       && lk != 12923               // 'empty' EOF\n       && lk != 12924               // 'empty-sequence' EOF\n       && lk != 12925               // 'encoding' EOF\n       && lk != 12926               // 'end' EOF\n       && lk != 12928               // 'eq' EOF\n       && lk != 12929               // 'every' EOF\n       && lk != 12931               // 'except' EOF\n       && lk != 12932               // 'exit' EOF\n       && lk != 12933               // 'external' EOF\n       && lk != 12934               // 'first' EOF\n       && lk != 12935               // 'following' EOF\n       && lk != 12936               // 'following-sibling' EOF\n       && lk != 12937               // 'for' EOF\n       && lk != 12941               // 'ft-option' EOF\n       && lk != 12945               // 'function' EOF\n       && lk != 12946               // 'ge' EOF\n       && lk != 12948               // 'group' EOF\n       && lk != 12950               // 'gt' EOF\n       && lk != 12951               // 'idiv' EOF\n       && lk != 12952               // 'if' EOF\n       && lk != 12953               // 'import' EOF\n       && lk != 12954               // 'in' EOF\n       && lk != 12955               // 'index' EOF\n       && lk != 12959               // 'insert' EOF\n       && lk != 12960               // 'instance' EOF\n       && lk != 12961               // 'integrity' EOF\n       && lk != 12962               // 'intersect' EOF\n       && lk != 12963               // 'into' EOF\n       && lk != 12964               // 'is' EOF\n       && lk != 12965               // 'item' EOF\n       && lk != 12966               // 'json' EOF\n       && lk != 12967               // 'json-item' EOF\n       && lk != 12970               // 'last' EOF\n       && lk != 12971               // 'lax' EOF\n       && lk != 12972               // 'le' EOF\n       && lk != 12974               // 'let' EOF\n       && lk != 12976               // 'loop' EOF\n       && lk != 12978               // 'lt' EOF\n       && lk != 12980               // 'mod' EOF\n       && lk != 12981               // 'modify' EOF\n       && lk != 12982               // 'module' EOF\n       && lk != 12984               // 'namespace' EOF\n       && lk != 12985               // 'namespace-node' EOF\n       && lk != 12986               // 'ne' EOF\n       && lk != 12991               // 'node' EOF\n       && lk != 12992               // 'nodes' EOF\n       && lk != 12994               // 'object' EOF\n       && lk != 12998               // 'only' EOF\n       && lk != 12999               // 'option' EOF\n       && lk != 13000               // 'or' EOF\n       && lk != 13001               // 'order' EOF\n       && lk != 13002               // 'ordered' EOF\n       && lk != 13003               // 'ordering' EOF\n       && lk != 13006               // 'parent' EOF\n       && lk != 13012               // 'preceding' EOF\n       && lk != 13013               // 'preceding-sibling' EOF\n       && lk != 13016               // 'processing-instruction' EOF\n       && lk != 13018               // 'rename' EOF\n       && lk != 13019               // 'replace' EOF\n       && lk != 13020               // 'return' EOF\n       && lk != 13021               // 'returning' EOF\n       && lk != 13022               // 'revalidation' EOF\n       && lk != 13024               // 'satisfies' EOF\n       && lk != 13025               // 'schema' EOF\n       && lk != 13026               // 'schema-attribute' EOF\n       && lk != 13027               // 'schema-element' EOF\n       && lk != 13028               // 'score' EOF\n       && lk != 13029               // 'self' EOF\n       && lk != 13034               // 'sliding' EOF\n       && lk != 13035               // 'some' EOF\n       && lk != 13036               // 'stable' EOF\n       && lk != 13037               // 'start' EOF\n       && lk != 13040               // 'strict' EOF\n       && lk != 13042               // 'structured-item' EOF\n       && lk != 13043               // 'switch' EOF\n       && lk != 13044               // 'text' EOF\n       && lk != 13048               // 'to' EOF\n       && lk != 13049               // 'treat' EOF\n       && lk != 13050               // 'try' EOF\n       && lk != 13051               // 'tumbling' EOF\n       && lk != 13052               // 'type' EOF\n       && lk != 13053               // 'typeswitch' EOF\n       && lk != 13054               // 'union' EOF\n       && lk != 13056               // 'unordered' EOF\n       && lk != 13057               // 'updating' EOF\n       && lk != 13060               // 'validate' EOF\n       && lk != 13061               // 'value' EOF\n       && lk != 13062               // 'variable' EOF\n       && lk != 13063               // 'version' EOF\n       && lk != 13066               // 'where' EOF\n       && lk != 13067               // 'while' EOF\n       && lk != 13070               // 'with' EOF\n       && lk != 13074               // 'xquery' EOF\n       && lk != 16134               // 'variable' '$'\n       && lk != 20997               // Wildcard ','\n       && lk != 20998               // EQName^Token ','\n       && lk != 21000               // IntegerLiteral ','\n       && lk != 21001               // DecimalLiteral ','\n       && lk != 21002               // DoubleLiteral ','\n       && lk != 21003               // StringLiteral ','\n       && lk != 21036               // '.' ','\n       && lk != 21037               // '..' ','\n       && lk != 21038               // '/' ','\n       && lk != 21062               // 'after' ','\n       && lk != 21064               // 'allowing' ','\n       && lk != 21065               // 'ancestor' ','\n       && lk != 21066               // 'ancestor-or-self' ','\n       && lk != 21067               // 'and' ','\n       && lk != 21069               // 'append' ','\n       && lk != 21070               // 'array' ','\n       && lk != 21071               // 'as' ','\n       && lk != 21072               // 'ascending' ','\n       && lk != 21073               // 'at' ','\n       && lk != 21074               // 'attribute' ','\n       && lk != 21075               // 'base-uri' ','\n       && lk != 21076               // 'before' ','\n       && lk != 21077               // 'boundary-space' ','\n       && lk != 21078               // 'break' ','\n       && lk != 21080               // 'case' ','\n       && lk != 21081               // 'cast' ','\n       && lk != 21082               // 'castable' ','\n       && lk != 21083               // 'catch' ','\n       && lk != 21085               // 'child' ','\n       && lk != 21086               // 'collation' ','\n       && lk != 21088               // 'comment' ','\n       && lk != 21089               // 'constraint' ','\n       && lk != 21090               // 'construction' ','\n       && lk != 21093               // 'context' ','\n       && lk != 21094               // 'continue' ','\n       && lk != 21095               // 'copy' ','\n       && lk != 21096               // 'copy-namespaces' ','\n       && lk != 21097               // 'count' ','\n       && lk != 21098               // 'decimal-format' ','\n       && lk != 21100               // 'declare' ','\n       && lk != 21101               // 'default' ','\n       && lk != 21102               // 'delete' ','\n       && lk != 21103               // 'descendant' ','\n       && lk != 21104               // 'descendant-or-self' ','\n       && lk != 21105               // 'descending' ','\n       && lk != 21110               // 'div' ','\n       && lk != 21111               // 'document' ','\n       && lk != 21112               // 'document-node' ','\n       && lk != 21113               // 'element' ','\n       && lk != 21114               // 'else' ','\n       && lk != 21115               // 'empty' ','\n       && lk != 21116               // 'empty-sequence' ','\n       && lk != 21117               // 'encoding' ','\n       && lk != 21118               // 'end' ','\n       && lk != 21120               // 'eq' ','\n       && lk != 21121               // 'every' ','\n       && lk != 21123               // 'except' ','\n       && lk != 21124               // 'exit' ','\n       && lk != 21125               // 'external' ','\n       && lk != 21126               // 'first' ','\n       && lk != 21127               // 'following' ','\n       && lk != 21128               // 'following-sibling' ','\n       && lk != 21129               // 'for' ','\n       && lk != 21133               // 'ft-option' ','\n       && lk != 21137               // 'function' ','\n       && lk != 21138               // 'ge' ','\n       && lk != 21140               // 'group' ','\n       && lk != 21142               // 'gt' ','\n       && lk != 21143               // 'idiv' ','\n       && lk != 21144               // 'if' ','\n       && lk != 21145               // 'import' ','\n       && lk != 21146               // 'in' ','\n       && lk != 21147               // 'index' ','\n       && lk != 21151               // 'insert' ','\n       && lk != 21152               // 'instance' ','\n       && lk != 21153               // 'integrity' ','\n       && lk != 21154               // 'intersect' ','\n       && lk != 21155               // 'into' ','\n       && lk != 21156               // 'is' ','\n       && lk != 21157               // 'item' ','\n       && lk != 21158               // 'json' ','\n       && lk != 21159               // 'json-item' ','\n       && lk != 21162               // 'last' ','\n       && lk != 21163               // 'lax' ','\n       && lk != 21164               // 'le' ','\n       && lk != 21166               // 'let' ','\n       && lk != 21168               // 'loop' ','\n       && lk != 21170               // 'lt' ','\n       && lk != 21172               // 'mod' ','\n       && lk != 21173               // 'modify' ','\n       && lk != 21174               // 'module' ','\n       && lk != 21176               // 'namespace' ','\n       && lk != 21177               // 'namespace-node' ','\n       && lk != 21178               // 'ne' ','\n       && lk != 21183               // 'node' ','\n       && lk != 21184               // 'nodes' ','\n       && lk != 21186               // 'object' ','\n       && lk != 21190               // 'only' ','\n       && lk != 21191               // 'option' ','\n       && lk != 21192               // 'or' ','\n       && lk != 21193               // 'order' ','\n       && lk != 21194               // 'ordered' ','\n       && lk != 21195               // 'ordering' ','\n       && lk != 21198               // 'parent' ','\n       && lk != 21204               // 'preceding' ','\n       && lk != 21205               // 'preceding-sibling' ','\n       && lk != 21208               // 'processing-instruction' ','\n       && lk != 21210               // 'rename' ','\n       && lk != 21211               // 'replace' ','\n       && lk != 21212               // 'return' ','\n       && lk != 21213               // 'returning' ','\n       && lk != 21214               // 'revalidation' ','\n       && lk != 21216               // 'satisfies' ','\n       && lk != 21217               // 'schema' ','\n       && lk != 21218               // 'schema-attribute' ','\n       && lk != 21219               // 'schema-element' ','\n       && lk != 21220               // 'score' ','\n       && lk != 21221               // 'self' ','\n       && lk != 21226               // 'sliding' ','\n       && lk != 21227               // 'some' ','\n       && lk != 21228               // 'stable' ','\n       && lk != 21229               // 'start' ','\n       && lk != 21232               // 'strict' ','\n       && lk != 21234               // 'structured-item' ','\n       && lk != 21235               // 'switch' ','\n       && lk != 21236               // 'text' ','\n       && lk != 21240               // 'to' ','\n       && lk != 21241               // 'treat' ','\n       && lk != 21242               // 'try' ','\n       && lk != 21243               // 'tumbling' ','\n       && lk != 21244               // 'type' ','\n       && lk != 21245               // 'typeswitch' ','\n       && lk != 21246               // 'union' ','\n       && lk != 21248               // 'unordered' ','\n       && lk != 21249               // 'updating' ','\n       && lk != 21252               // 'validate' ','\n       && lk != 21253               // 'value' ','\n       && lk != 21254               // 'variable' ','\n       && lk != 21255               // 'version' ','\n       && lk != 21258               // 'where' ','\n       && lk != 21259               // 'while' ','\n       && lk != 21262               // 'with' ','\n       && lk != 21266               // 'xquery' ','\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284              // 'exit' 'returning'\n       && lk != 144389              // Wildcard '}'\n       && lk != 144390              // EQName^Token '}'\n       && lk != 144392              // IntegerLiteral '}'\n       && lk != 144393              // DecimalLiteral '}'\n       && lk != 144394              // DoubleLiteral '}'\n       && lk != 144395              // StringLiteral '}'\n       && lk != 144428              // '.' '}'\n       && lk != 144429              // '..' '}'\n       && lk != 144430              // '/' '}'\n       && lk != 144454              // 'after' '}'\n       && lk != 144456              // 'allowing' '}'\n       && lk != 144457              // 'ancestor' '}'\n       && lk != 144458              // 'ancestor-or-self' '}'\n       && lk != 144459              // 'and' '}'\n       && lk != 144461              // 'append' '}'\n       && lk != 144462              // 'array' '}'\n       && lk != 144463              // 'as' '}'\n       && lk != 144464              // 'ascending' '}'\n       && lk != 144465              // 'at' '}'\n       && lk != 144466              // 'attribute' '}'\n       && lk != 144467              // 'base-uri' '}'\n       && lk != 144468              // 'before' '}'\n       && lk != 144469              // 'boundary-space' '}'\n       && lk != 144470              // 'break' '}'\n       && lk != 144472              // 'case' '}'\n       && lk != 144473              // 'cast' '}'\n       && lk != 144474              // 'castable' '}'\n       && lk != 144475              // 'catch' '}'\n       && lk != 144477              // 'child' '}'\n       && lk != 144478              // 'collation' '}'\n       && lk != 144480              // 'comment' '}'\n       && lk != 144481              // 'constraint' '}'\n       && lk != 144482              // 'construction' '}'\n       && lk != 144485              // 'context' '}'\n       && lk != 144486              // 'continue' '}'\n       && lk != 144487              // 'copy' '}'\n       && lk != 144488              // 'copy-namespaces' '}'\n       && lk != 144489              // 'count' '}'\n       && lk != 144490              // 'decimal-format' '}'\n       && lk != 144492              // 'declare' '}'\n       && lk != 144493              // 'default' '}'\n       && lk != 144494              // 'delete' '}'\n       && lk != 144495              // 'descendant' '}'\n       && lk != 144496              // 'descendant-or-self' '}'\n       && lk != 144497              // 'descending' '}'\n       && lk != 144502              // 'div' '}'\n       && lk != 144503              // 'document' '}'\n       && lk != 144504              // 'document-node' '}'\n       && lk != 144505              // 'element' '}'\n       && lk != 144506              // 'else' '}'\n       && lk != 144507              // 'empty' '}'\n       && lk != 144508              // 'empty-sequence' '}'\n       && lk != 144509              // 'encoding' '}'\n       && lk != 144510              // 'end' '}'\n       && lk != 144512              // 'eq' '}'\n       && lk != 144513              // 'every' '}'\n       && lk != 144515              // 'except' '}'\n       && lk != 144516              // 'exit' '}'\n       && lk != 144517              // 'external' '}'\n       && lk != 144518              // 'first' '}'\n       && lk != 144519              // 'following' '}'\n       && lk != 144520              // 'following-sibling' '}'\n       && lk != 144521              // 'for' '}'\n       && lk != 144525              // 'ft-option' '}'\n       && lk != 144529              // 'function' '}'\n       && lk != 144530              // 'ge' '}'\n       && lk != 144532              // 'group' '}'\n       && lk != 144534              // 'gt' '}'\n       && lk != 144535              // 'idiv' '}'\n       && lk != 144536              // 'if' '}'\n       && lk != 144537              // 'import' '}'\n       && lk != 144538              // 'in' '}'\n       && lk != 144539              // 'index' '}'\n       && lk != 144543              // 'insert' '}'\n       && lk != 144544              // 'instance' '}'\n       && lk != 144545              // 'integrity' '}'\n       && lk != 144546              // 'intersect' '}'\n       && lk != 144547              // 'into' '}'\n       && lk != 144548              // 'is' '}'\n       && lk != 144549              // 'item' '}'\n       && lk != 144550              // 'json' '}'\n       && lk != 144551              // 'json-item' '}'\n       && lk != 144554              // 'last' '}'\n       && lk != 144555              // 'lax' '}'\n       && lk != 144556              // 'le' '}'\n       && lk != 144558              // 'let' '}'\n       && lk != 144560              // 'loop' '}'\n       && lk != 144562              // 'lt' '}'\n       && lk != 144564              // 'mod' '}'\n       && lk != 144565              // 'modify' '}'\n       && lk != 144566              // 'module' '}'\n       && lk != 144568              // 'namespace' '}'\n       && lk != 144569              // 'namespace-node' '}'\n       && lk != 144570              // 'ne' '}'\n       && lk != 144575              // 'node' '}'\n       && lk != 144576              // 'nodes' '}'\n       && lk != 144578              // 'object' '}'\n       && lk != 144582              // 'only' '}'\n       && lk != 144583              // 'option' '}'\n       && lk != 144584              // 'or' '}'\n       && lk != 144585              // 'order' '}'\n       && lk != 144586              // 'ordered' '}'\n       && lk != 144587              // 'ordering' '}'\n       && lk != 144590              // 'parent' '}'\n       && lk != 144596              // 'preceding' '}'\n       && lk != 144597              // 'preceding-sibling' '}'\n       && lk != 144600              // 'processing-instruction' '}'\n       && lk != 144602              // 'rename' '}'\n       && lk != 144603              // 'replace' '}'\n       && lk != 144604              // 'return' '}'\n       && lk != 144605              // 'returning' '}'\n       && lk != 144606              // 'revalidation' '}'\n       && lk != 144608              // 'satisfies' '}'\n       && lk != 144609              // 'schema' '}'\n       && lk != 144610              // 'schema-attribute' '}'\n       && lk != 144611              // 'schema-element' '}'\n       && lk != 144612              // 'score' '}'\n       && lk != 144613              // 'self' '}'\n       && lk != 144618              // 'sliding' '}'\n       && lk != 144619              // 'some' '}'\n       && lk != 144620              // 'stable' '}'\n       && lk != 144621              // 'start' '}'\n       && lk != 144624              // 'strict' '}'\n       && lk != 144626              // 'structured-item' '}'\n       && lk != 144627              // 'switch' '}'\n       && lk != 144628              // 'text' '}'\n       && lk != 144632              // 'to' '}'\n       && lk != 144633              // 'treat' '}'\n       && lk != 144634              // 'try' '}'\n       && lk != 144635              // 'tumbling' '}'\n       && lk != 144636              // 'type' '}'\n       && lk != 144637              // 'typeswitch' '}'\n       && lk != 144638              // 'union' '}'\n       && lk != 144640              // 'unordered' '}'\n       && lk != 144641              // 'updating' '}'\n       && lk != 144644              // 'validate' '}'\n       && lk != 144645              // 'value' '}'\n       && lk != 144646              // 'variable' '}'\n       && lk != 144647              // 'version' '}'\n       && lk != 144650              // 'where' '}'\n       && lk != 144651              // 'while' '}'\n       && lk != 144654              // 'with' '}'\n       && lk != 144658)             // 'xquery' '}'\n      {\n        lk = memoized(6, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(6, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 53                  // ';'\n       && lk != 16134               // 'variable' '$'\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284)             // 'exit' 'returning'\n      {\n        break;\n      }\n      whitespace();\n      parse_Statement();\n    }\n    eventHandler.endNonterminal(\"Statements\", e0);\n  }\n\n  function try_Statements()\n  {\n    for (;;)\n    {\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 34:                      // '('\n        lookahead2W(268);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 35:                      // '(#'\n        lookahead2(251);            // EQName^Token | S | 'after' | 'allowing' | 'ancestor' | 'ancestor-or-self' |\n        break;\n      case 46:                      // '/'\n        lookahead2W(283);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 47:                      // '//'\n        lookahead2W(264);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 54:                      // '<'\n        lookahead2(4);              // QName\n        break;\n      case 55:                      // '<!--'\n        lookahead2(1);              // DirCommentContents\n        break;\n      case 59:                      // '<?'\n        lookahead2(3);              // PITarget\n        break;\n      case 66:                      // '@'\n        lookahead2W(256);           // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 68:                      // '['\n        lookahead2W(271);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 77:                      // 'append'\n        lookahead2W(199);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 82:                      // 'attribute'\n        lookahead2W(280);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 121:                     // 'element'\n        lookahead2W(279);           // EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 132:                     // 'exit'\n        lookahead2W(202);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 137:                     // 'for'\n        lookahead2W(207);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 174:                     // 'let'\n        lookahead2W(204);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 218:                     // 'rename'\n        lookahead2W(205);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 219:                     // 'replace'\n        lookahead2W(206);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 260:                     // 'validate'\n        lookahead2W(209);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 276:                     // '{'\n        lookahead2W(276);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 278:                     // '{|'\n        lookahead2W(272);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 5:                       // Wildcard\n      case 45:                      // '..'\n        lookahead2W(185);           // S^WS | EOF | '!' | '!=' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' | '<' |\n        break;\n      case 31:                      // '$'\n      case 32:                      // '%'\n        lookahead2W(254);           // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n        break;\n      case 40:                      // '+'\n      case 42:                      // '-'\n        lookahead2W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        break;\n      case 86:                      // 'break'\n      case 102:                     // 'continue'\n        lookahead2W(200);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 110:                     // 'delete'\n      case 159:                     // 'insert'\n        lookahead2W(208);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 184:                     // 'namespace'\n      case 216:                     // 'processing-instruction'\n        lookahead2W(267);           // NCName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' |\n        break;\n      case 103:                     // 'copy'\n      case 129:                     // 'every'\n      case 235:                     // 'some'\n      case 262:                     // 'variable'\n        lookahead2W(196);           // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' |\n        break;\n      case 8:                       // IntegerLiteral\n      case 9:                       // DecimalLiteral\n      case 10:                      // DoubleLiteral\n      case 11:                      // StringLiteral\n      case 44:                      // '.'\n        lookahead2W(191);           // S^WS | EOF | '!' | '!=' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n        break;\n      case 78:                      // 'array'\n      case 124:                     // 'empty-sequence'\n      case 165:                     // 'item'\n      case 167:                     // 'json-item'\n      case 242:                     // 'structured-item'\n        lookahead2W(190);           // S^WS | EOF | '!' | '!=' | '#' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' | ';' |\n        break;\n      case 96:                      // 'comment'\n      case 119:                     // 'document'\n      case 202:                     // 'ordered'\n      case 244:                     // 'text'\n      case 250:                     // 'try'\n      case 256:                     // 'unordered'\n        lookahead2W(203);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 73:                      // 'ancestor'\n      case 74:                      // 'ancestor-or-self'\n      case 93:                      // 'child'\n      case 111:                     // 'descendant'\n      case 112:                     // 'descendant-or-self'\n      case 135:                     // 'following'\n      case 136:                     // 'following-sibling'\n      case 206:                     // 'parent'\n      case 212:                     // 'preceding'\n      case 213:                     // 'preceding-sibling'\n      case 229:                     // 'self'\n        lookahead2W(197);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      case 6:                       // EQName^Token\n      case 70:                      // 'after'\n      case 72:                      // 'allowing'\n      case 75:                      // 'and'\n      case 79:                      // 'as'\n      case 80:                      // 'ascending'\n      case 81:                      // 'at'\n      case 83:                      // 'base-uri'\n      case 84:                      // 'before'\n      case 85:                      // 'boundary-space'\n      case 88:                      // 'case'\n      case 89:                      // 'cast'\n      case 90:                      // 'castable'\n      case 91:                      // 'catch'\n      case 94:                      // 'collation'\n      case 97:                      // 'constraint'\n      case 98:                      // 'construction'\n      case 101:                     // 'context'\n      case 104:                     // 'copy-namespaces'\n      case 105:                     // 'count'\n      case 106:                     // 'decimal-format'\n      case 108:                     // 'declare'\n      case 109:                     // 'default'\n      case 113:                     // 'descending'\n      case 118:                     // 'div'\n      case 120:                     // 'document-node'\n      case 122:                     // 'else'\n      case 123:                     // 'empty'\n      case 125:                     // 'encoding'\n      case 126:                     // 'end'\n      case 128:                     // 'eq'\n      case 131:                     // 'except'\n      case 133:                     // 'external'\n      case 134:                     // 'first'\n      case 141:                     // 'ft-option'\n      case 145:                     // 'function'\n      case 146:                     // 'ge'\n      case 148:                     // 'group'\n      case 150:                     // 'gt'\n      case 151:                     // 'idiv'\n      case 152:                     // 'if'\n      case 153:                     // 'import'\n      case 154:                     // 'in'\n      case 155:                     // 'index'\n      case 160:                     // 'instance'\n      case 161:                     // 'integrity'\n      case 162:                     // 'intersect'\n      case 163:                     // 'into'\n      case 164:                     // 'is'\n      case 166:                     // 'json'\n      case 170:                     // 'last'\n      case 171:                     // 'lax'\n      case 172:                     // 'le'\n      case 176:                     // 'loop'\n      case 178:                     // 'lt'\n      case 180:                     // 'mod'\n      case 181:                     // 'modify'\n      case 182:                     // 'module'\n      case 185:                     // 'namespace-node'\n      case 186:                     // 'ne'\n      case 191:                     // 'node'\n      case 192:                     // 'nodes'\n      case 194:                     // 'object'\n      case 198:                     // 'only'\n      case 199:                     // 'option'\n      case 200:                     // 'or'\n      case 201:                     // 'order'\n      case 203:                     // 'ordering'\n      case 220:                     // 'return'\n      case 221:                     // 'returning'\n      case 222:                     // 'revalidation'\n      case 224:                     // 'satisfies'\n      case 225:                     // 'schema'\n      case 226:                     // 'schema-attribute'\n      case 227:                     // 'schema-element'\n      case 228:                     // 'score'\n      case 234:                     // 'sliding'\n      case 236:                     // 'stable'\n      case 237:                     // 'start'\n      case 240:                     // 'strict'\n      case 243:                     // 'switch'\n      case 248:                     // 'to'\n      case 249:                     // 'treat'\n      case 251:                     // 'tumbling'\n      case 252:                     // 'type'\n      case 253:                     // 'typeswitch'\n      case 254:                     // 'union'\n      case 257:                     // 'updating'\n      case 261:                     // 'value'\n      case 263:                     // 'version'\n      case 266:                     // 'where'\n      case 267:                     // 'while'\n      case 270:                     // 'with'\n      case 274:                     // 'xquery'\n        lookahead2W(194);           // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | ',' | '-' | '/' | '//' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk != 25                  // EOF\n       && lk != 53                  // ';'\n       && lk != 282                 // '}'\n       && lk != 12805               // Wildcard EOF\n       && lk != 12806               // EQName^Token EOF\n       && lk != 12808               // IntegerLiteral EOF\n       && lk != 12809               // DecimalLiteral EOF\n       && lk != 12810               // DoubleLiteral EOF\n       && lk != 12811               // StringLiteral EOF\n       && lk != 12844               // '.' EOF\n       && lk != 12845               // '..' EOF\n       && lk != 12846               // '/' EOF\n       && lk != 12870               // 'after' EOF\n       && lk != 12872               // 'allowing' EOF\n       && lk != 12873               // 'ancestor' EOF\n       && lk != 12874               // 'ancestor-or-self' EOF\n       && lk != 12875               // 'and' EOF\n       && lk != 12877               // 'append' EOF\n       && lk != 12878               // 'array' EOF\n       && lk != 12879               // 'as' EOF\n       && lk != 12880               // 'ascending' EOF\n       && lk != 12881               // 'at' EOF\n       && lk != 12882               // 'attribute' EOF\n       && lk != 12883               // 'base-uri' EOF\n       && lk != 12884               // 'before' EOF\n       && lk != 12885               // 'boundary-space' EOF\n       && lk != 12886               // 'break' EOF\n       && lk != 12888               // 'case' EOF\n       && lk != 12889               // 'cast' EOF\n       && lk != 12890               // 'castable' EOF\n       && lk != 12891               // 'catch' EOF\n       && lk != 12893               // 'child' EOF\n       && lk != 12894               // 'collation' EOF\n       && lk != 12896               // 'comment' EOF\n       && lk != 12897               // 'constraint' EOF\n       && lk != 12898               // 'construction' EOF\n       && lk != 12901               // 'context' EOF\n       && lk != 12902               // 'continue' EOF\n       && lk != 12903               // 'copy' EOF\n       && lk != 12904               // 'copy-namespaces' EOF\n       && lk != 12905               // 'count' EOF\n       && lk != 12906               // 'decimal-format' EOF\n       && lk != 12908               // 'declare' EOF\n       && lk != 12909               // 'default' EOF\n       && lk != 12910               // 'delete' EOF\n       && lk != 12911               // 'descendant' EOF\n       && lk != 12912               // 'descendant-or-self' EOF\n       && lk != 12913               // 'descending' EOF\n       && lk != 12918               // 'div' EOF\n       && lk != 12919               // 'document' EOF\n       && lk != 12920               // 'document-node' EOF\n       && lk != 12921               // 'element' EOF\n       && lk != 12922               // 'else' EOF\n       && lk != 12923               // 'empty' EOF\n       && lk != 12924               // 'empty-sequence' EOF\n       && lk != 12925               // 'encoding' EOF\n       && lk != 12926               // 'end' EOF\n       && lk != 12928               // 'eq' EOF\n       && lk != 12929               // 'every' EOF\n       && lk != 12931               // 'except' EOF\n       && lk != 12932               // 'exit' EOF\n       && lk != 12933               // 'external' EOF\n       && lk != 12934               // 'first' EOF\n       && lk != 12935               // 'following' EOF\n       && lk != 12936               // 'following-sibling' EOF\n       && lk != 12937               // 'for' EOF\n       && lk != 12941               // 'ft-option' EOF\n       && lk != 12945               // 'function' EOF\n       && lk != 12946               // 'ge' EOF\n       && lk != 12948               // 'group' EOF\n       && lk != 12950               // 'gt' EOF\n       && lk != 12951               // 'idiv' EOF\n       && lk != 12952               // 'if' EOF\n       && lk != 12953               // 'import' EOF\n       && lk != 12954               // 'in' EOF\n       && lk != 12955               // 'index' EOF\n       && lk != 12959               // 'insert' EOF\n       && lk != 12960               // 'instance' EOF\n       && lk != 12961               // 'integrity' EOF\n       && lk != 12962               // 'intersect' EOF\n       && lk != 12963               // 'into' EOF\n       && lk != 12964               // 'is' EOF\n       && lk != 12965               // 'item' EOF\n       && lk != 12966               // 'json' EOF\n       && lk != 12967               // 'json-item' EOF\n       && lk != 12970               // 'last' EOF\n       && lk != 12971               // 'lax' EOF\n       && lk != 12972               // 'le' EOF\n       && lk != 12974               // 'let' EOF\n       && lk != 12976               // 'loop' EOF\n       && lk != 12978               // 'lt' EOF\n       && lk != 12980               // 'mod' EOF\n       && lk != 12981               // 'modify' EOF\n       && lk != 12982               // 'module' EOF\n       && lk != 12984               // 'namespace' EOF\n       && lk != 12985               // 'namespace-node' EOF\n       && lk != 12986               // 'ne' EOF\n       && lk != 12991               // 'node' EOF\n       && lk != 12992               // 'nodes' EOF\n       && lk != 12994               // 'object' EOF\n       && lk != 12998               // 'only' EOF\n       && lk != 12999               // 'option' EOF\n       && lk != 13000               // 'or' EOF\n       && lk != 13001               // 'order' EOF\n       && lk != 13002               // 'ordered' EOF\n       && lk != 13003               // 'ordering' EOF\n       && lk != 13006               // 'parent' EOF\n       && lk != 13012               // 'preceding' EOF\n       && lk != 13013               // 'preceding-sibling' EOF\n       && lk != 13016               // 'processing-instruction' EOF\n       && lk != 13018               // 'rename' EOF\n       && lk != 13019               // 'replace' EOF\n       && lk != 13020               // 'return' EOF\n       && lk != 13021               // 'returning' EOF\n       && lk != 13022               // 'revalidation' EOF\n       && lk != 13024               // 'satisfies' EOF\n       && lk != 13025               // 'schema' EOF\n       && lk != 13026               // 'schema-attribute' EOF\n       && lk != 13027               // 'schema-element' EOF\n       && lk != 13028               // 'score' EOF\n       && lk != 13029               // 'self' EOF\n       && lk != 13034               // 'sliding' EOF\n       && lk != 13035               // 'some' EOF\n       && lk != 13036               // 'stable' EOF\n       && lk != 13037               // 'start' EOF\n       && lk != 13040               // 'strict' EOF\n       && lk != 13042               // 'structured-item' EOF\n       && lk != 13043               // 'switch' EOF\n       && lk != 13044               // 'text' EOF\n       && lk != 13048               // 'to' EOF\n       && lk != 13049               // 'treat' EOF\n       && lk != 13050               // 'try' EOF\n       && lk != 13051               // 'tumbling' EOF\n       && lk != 13052               // 'type' EOF\n       && lk != 13053               // 'typeswitch' EOF\n       && lk != 13054               // 'union' EOF\n       && lk != 13056               // 'unordered' EOF\n       && lk != 13057               // 'updating' EOF\n       && lk != 13060               // 'validate' EOF\n       && lk != 13061               // 'value' EOF\n       && lk != 13062               // 'variable' EOF\n       && lk != 13063               // 'version' EOF\n       && lk != 13066               // 'where' EOF\n       && lk != 13067               // 'while' EOF\n       && lk != 13070               // 'with' EOF\n       && lk != 13074               // 'xquery' EOF\n       && lk != 16134               // 'variable' '$'\n       && lk != 20997               // Wildcard ','\n       && lk != 20998               // EQName^Token ','\n       && lk != 21000               // IntegerLiteral ','\n       && lk != 21001               // DecimalLiteral ','\n       && lk != 21002               // DoubleLiteral ','\n       && lk != 21003               // StringLiteral ','\n       && lk != 21036               // '.' ','\n       && lk != 21037               // '..' ','\n       && lk != 21038               // '/' ','\n       && lk != 21062               // 'after' ','\n       && lk != 21064               // 'allowing' ','\n       && lk != 21065               // 'ancestor' ','\n       && lk != 21066               // 'ancestor-or-self' ','\n       && lk != 21067               // 'and' ','\n       && lk != 21069               // 'append' ','\n       && lk != 21070               // 'array' ','\n       && lk != 21071               // 'as' ','\n       && lk != 21072               // 'ascending' ','\n       && lk != 21073               // 'at' ','\n       && lk != 21074               // 'attribute' ','\n       && lk != 21075               // 'base-uri' ','\n       && lk != 21076               // 'before' ','\n       && lk != 21077               // 'boundary-space' ','\n       && lk != 21078               // 'break' ','\n       && lk != 21080               // 'case' ','\n       && lk != 21081               // 'cast' ','\n       && lk != 21082               // 'castable' ','\n       && lk != 21083               // 'catch' ','\n       && lk != 21085               // 'child' ','\n       && lk != 21086               // 'collation' ','\n       && lk != 21088               // 'comment' ','\n       && lk != 21089               // 'constraint' ','\n       && lk != 21090               // 'construction' ','\n       && lk != 21093               // 'context' ','\n       && lk != 21094               // 'continue' ','\n       && lk != 21095               // 'copy' ','\n       && lk != 21096               // 'copy-namespaces' ','\n       && lk != 21097               // 'count' ','\n       && lk != 21098               // 'decimal-format' ','\n       && lk != 21100               // 'declare' ','\n       && lk != 21101               // 'default' ','\n       && lk != 21102               // 'delete' ','\n       && lk != 21103               // 'descendant' ','\n       && lk != 21104               // 'descendant-or-self' ','\n       && lk != 21105               // 'descending' ','\n       && lk != 21110               // 'div' ','\n       && lk != 21111               // 'document' ','\n       && lk != 21112               // 'document-node' ','\n       && lk != 21113               // 'element' ','\n       && lk != 21114               // 'else' ','\n       && lk != 21115               // 'empty' ','\n       && lk != 21116               // 'empty-sequence' ','\n       && lk != 21117               // 'encoding' ','\n       && lk != 21118               // 'end' ','\n       && lk != 21120               // 'eq' ','\n       && lk != 21121               // 'every' ','\n       && lk != 21123               // 'except' ','\n       && lk != 21124               // 'exit' ','\n       && lk != 21125               // 'external' ','\n       && lk != 21126               // 'first' ','\n       && lk != 21127               // 'following' ','\n       && lk != 21128               // 'following-sibling' ','\n       && lk != 21129               // 'for' ','\n       && lk != 21133               // 'ft-option' ','\n       && lk != 21137               // 'function' ','\n       && lk != 21138               // 'ge' ','\n       && lk != 21140               // 'group' ','\n       && lk != 21142               // 'gt' ','\n       && lk != 21143               // 'idiv' ','\n       && lk != 21144               // 'if' ','\n       && lk != 21145               // 'import' ','\n       && lk != 21146               // 'in' ','\n       && lk != 21147               // 'index' ','\n       && lk != 21151               // 'insert' ','\n       && lk != 21152               // 'instance' ','\n       && lk != 21153               // 'integrity' ','\n       && lk != 21154               // 'intersect' ','\n       && lk != 21155               // 'into' ','\n       && lk != 21156               // 'is' ','\n       && lk != 21157               // 'item' ','\n       && lk != 21158               // 'json' ','\n       && lk != 21159               // 'json-item' ','\n       && lk != 21162               // 'last' ','\n       && lk != 21163               // 'lax' ','\n       && lk != 21164               // 'le' ','\n       && lk != 21166               // 'let' ','\n       && lk != 21168               // 'loop' ','\n       && lk != 21170               // 'lt' ','\n       && lk != 21172               // 'mod' ','\n       && lk != 21173               // 'modify' ','\n       && lk != 21174               // 'module' ','\n       && lk != 21176               // 'namespace' ','\n       && lk != 21177               // 'namespace-node' ','\n       && lk != 21178               // 'ne' ','\n       && lk != 21183               // 'node' ','\n       && lk != 21184               // 'nodes' ','\n       && lk != 21186               // 'object' ','\n       && lk != 21190               // 'only' ','\n       && lk != 21191               // 'option' ','\n       && lk != 21192               // 'or' ','\n       && lk != 21193               // 'order' ','\n       && lk != 21194               // 'ordered' ','\n       && lk != 21195               // 'ordering' ','\n       && lk != 21198               // 'parent' ','\n       && lk != 21204               // 'preceding' ','\n       && lk != 21205               // 'preceding-sibling' ','\n       && lk != 21208               // 'processing-instruction' ','\n       && lk != 21210               // 'rename' ','\n       && lk != 21211               // 'replace' ','\n       && lk != 21212               // 'return' ','\n       && lk != 21213               // 'returning' ','\n       && lk != 21214               // 'revalidation' ','\n       && lk != 21216               // 'satisfies' ','\n       && lk != 21217               // 'schema' ','\n       && lk != 21218               // 'schema-attribute' ','\n       && lk != 21219               // 'schema-element' ','\n       && lk != 21220               // 'score' ','\n       && lk != 21221               // 'self' ','\n       && lk != 21226               // 'sliding' ','\n       && lk != 21227               // 'some' ','\n       && lk != 21228               // 'stable' ','\n       && lk != 21229               // 'start' ','\n       && lk != 21232               // 'strict' ','\n       && lk != 21234               // 'structured-item' ','\n       && lk != 21235               // 'switch' ','\n       && lk != 21236               // 'text' ','\n       && lk != 21240               // 'to' ','\n       && lk != 21241               // 'treat' ','\n       && lk != 21242               // 'try' ','\n       && lk != 21243               // 'tumbling' ','\n       && lk != 21244               // 'type' ','\n       && lk != 21245               // 'typeswitch' ','\n       && lk != 21246               // 'union' ','\n       && lk != 21248               // 'unordered' ','\n       && lk != 21249               // 'updating' ','\n       && lk != 21252               // 'validate' ','\n       && lk != 21253               // 'value' ','\n       && lk != 21254               // 'variable' ','\n       && lk != 21255               // 'version' ','\n       && lk != 21258               // 'where' ','\n       && lk != 21259               // 'while' ','\n       && lk != 21262               // 'with' ','\n       && lk != 21266               // 'xquery' ','\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284              // 'exit' 'returning'\n       && lk != 144389              // Wildcard '}'\n       && lk != 144390              // EQName^Token '}'\n       && lk != 144392              // IntegerLiteral '}'\n       && lk != 144393              // DecimalLiteral '}'\n       && lk != 144394              // DoubleLiteral '}'\n       && lk != 144395              // StringLiteral '}'\n       && lk != 144428              // '.' '}'\n       && lk != 144429              // '..' '}'\n       && lk != 144430              // '/' '}'\n       && lk != 144454              // 'after' '}'\n       && lk != 144456              // 'allowing' '}'\n       && lk != 144457              // 'ancestor' '}'\n       && lk != 144458              // 'ancestor-or-self' '}'\n       && lk != 144459              // 'and' '}'\n       && lk != 144461              // 'append' '}'\n       && lk != 144462              // 'array' '}'\n       && lk != 144463              // 'as' '}'\n       && lk != 144464              // 'ascending' '}'\n       && lk != 144465              // 'at' '}'\n       && lk != 144466              // 'attribute' '}'\n       && lk != 144467              // 'base-uri' '}'\n       && lk != 144468              // 'before' '}'\n       && lk != 144469              // 'boundary-space' '}'\n       && lk != 144470              // 'break' '}'\n       && lk != 144472              // 'case' '}'\n       && lk != 144473              // 'cast' '}'\n       && lk != 144474              // 'castable' '}'\n       && lk != 144475              // 'catch' '}'\n       && lk != 144477              // 'child' '}'\n       && lk != 144478              // 'collation' '}'\n       && lk != 144480              // 'comment' '}'\n       && lk != 144481              // 'constraint' '}'\n       && lk != 144482              // 'construction' '}'\n       && lk != 144485              // 'context' '}'\n       && lk != 144486              // 'continue' '}'\n       && lk != 144487              // 'copy' '}'\n       && lk != 144488              // 'copy-namespaces' '}'\n       && lk != 144489              // 'count' '}'\n       && lk != 144490              // 'decimal-format' '}'\n       && lk != 144492              // 'declare' '}'\n       && lk != 144493              // 'default' '}'\n       && lk != 144494              // 'delete' '}'\n       && lk != 144495              // 'descendant' '}'\n       && lk != 144496              // 'descendant-or-self' '}'\n       && lk != 144497              // 'descending' '}'\n       && lk != 144502              // 'div' '}'\n       && lk != 144503              // 'document' '}'\n       && lk != 144504              // 'document-node' '}'\n       && lk != 144505              // 'element' '}'\n       && lk != 144506              // 'else' '}'\n       && lk != 144507              // 'empty' '}'\n       && lk != 144508              // 'empty-sequence' '}'\n       && lk != 144509              // 'encoding' '}'\n       && lk != 144510              // 'end' '}'\n       && lk != 144512              // 'eq' '}'\n       && lk != 144513              // 'every' '}'\n       && lk != 144515              // 'except' '}'\n       && lk != 144516              // 'exit' '}'\n       && lk != 144517              // 'external' '}'\n       && lk != 144518              // 'first' '}'\n       && lk != 144519              // 'following' '}'\n       && lk != 144520              // 'following-sibling' '}'\n       && lk != 144521              // 'for' '}'\n       && lk != 144525              // 'ft-option' '}'\n       && lk != 144529              // 'function' '}'\n       && lk != 144530              // 'ge' '}'\n       && lk != 144532              // 'group' '}'\n       && lk != 144534              // 'gt' '}'\n       && lk != 144535              // 'idiv' '}'\n       && lk != 144536              // 'if' '}'\n       && lk != 144537              // 'import' '}'\n       && lk != 144538              // 'in' '}'\n       && lk != 144539              // 'index' '}'\n       && lk != 144543              // 'insert' '}'\n       && lk != 144544              // 'instance' '}'\n       && lk != 144545              // 'integrity' '}'\n       && lk != 144546              // 'intersect' '}'\n       && lk != 144547              // 'into' '}'\n       && lk != 144548              // 'is' '}'\n       && lk != 144549              // 'item' '}'\n       && lk != 144550              // 'json' '}'\n       && lk != 144551              // 'json-item' '}'\n       && lk != 144554              // 'last' '}'\n       && lk != 144555              // 'lax' '}'\n       && lk != 144556              // 'le' '}'\n       && lk != 144558              // 'let' '}'\n       && lk != 144560              // 'loop' '}'\n       && lk != 144562              // 'lt' '}'\n       && lk != 144564              // 'mod' '}'\n       && lk != 144565              // 'modify' '}'\n       && lk != 144566              // 'module' '}'\n       && lk != 144568              // 'namespace' '}'\n       && lk != 144569              // 'namespace-node' '}'\n       && lk != 144570              // 'ne' '}'\n       && lk != 144575              // 'node' '}'\n       && lk != 144576              // 'nodes' '}'\n       && lk != 144578              // 'object' '}'\n       && lk != 144582              // 'only' '}'\n       && lk != 144583              // 'option' '}'\n       && lk != 144584              // 'or' '}'\n       && lk != 144585              // 'order' '}'\n       && lk != 144586              // 'ordered' '}'\n       && lk != 144587              // 'ordering' '}'\n       && lk != 144590              // 'parent' '}'\n       && lk != 144596              // 'preceding' '}'\n       && lk != 144597              // 'preceding-sibling' '}'\n       && lk != 144600              // 'processing-instruction' '}'\n       && lk != 144602              // 'rename' '}'\n       && lk != 144603              // 'replace' '}'\n       && lk != 144604              // 'return' '}'\n       && lk != 144605              // 'returning' '}'\n       && lk != 144606              // 'revalidation' '}'\n       && lk != 144608              // 'satisfies' '}'\n       && lk != 144609              // 'schema' '}'\n       && lk != 144610              // 'schema-attribute' '}'\n       && lk != 144611              // 'schema-element' '}'\n       && lk != 144612              // 'score' '}'\n       && lk != 144613              // 'self' '}'\n       && lk != 144618              // 'sliding' '}'\n       && lk != 144619              // 'some' '}'\n       && lk != 144620              // 'stable' '}'\n       && lk != 144621              // 'start' '}'\n       && lk != 144624              // 'strict' '}'\n       && lk != 144626              // 'structured-item' '}'\n       && lk != 144627              // 'switch' '}'\n       && lk != 144628              // 'text' '}'\n       && lk != 144632              // 'to' '}'\n       && lk != 144633              // 'treat' '}'\n       && lk != 144634              // 'try' '}'\n       && lk != 144635              // 'tumbling' '}'\n       && lk != 144636              // 'type' '}'\n       && lk != 144637              // 'typeswitch' '}'\n       && lk != 144638              // 'union' '}'\n       && lk != 144640              // 'unordered' '}'\n       && lk != 144641              // 'updating' '}'\n       && lk != 144644              // 'validate' '}'\n       && lk != 144645              // 'value' '}'\n       && lk != 144646              // 'variable' '}'\n       && lk != 144647              // 'version' '}'\n       && lk != 144650              // 'where' '}'\n       && lk != 144651              // 'while' '}'\n       && lk != 144654              // 'with' '}'\n       && lk != 144658)             // 'xquery' '}'\n      {\n        lk = memoized(6, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            try_Statement();\n            memoize(6, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(6, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 53                  // ';'\n       && lk != 16134               // 'variable' '$'\n       && lk != 27141               // Wildcard ';'\n       && lk != 27142               // EQName^Token ';'\n       && lk != 27144               // IntegerLiteral ';'\n       && lk != 27145               // DecimalLiteral ';'\n       && lk != 27146               // DoubleLiteral ';'\n       && lk != 27147               // StringLiteral ';'\n       && lk != 27180               // '.' ';'\n       && lk != 27181               // '..' ';'\n       && lk != 27182               // '/' ';'\n       && lk != 27206               // 'after' ';'\n       && lk != 27208               // 'allowing' ';'\n       && lk != 27209               // 'ancestor' ';'\n       && lk != 27210               // 'ancestor-or-self' ';'\n       && lk != 27211               // 'and' ';'\n       && lk != 27213               // 'append' ';'\n       && lk != 27214               // 'array' ';'\n       && lk != 27215               // 'as' ';'\n       && lk != 27216               // 'ascending' ';'\n       && lk != 27217               // 'at' ';'\n       && lk != 27218               // 'attribute' ';'\n       && lk != 27219               // 'base-uri' ';'\n       && lk != 27220               // 'before' ';'\n       && lk != 27221               // 'boundary-space' ';'\n       && lk != 27222               // 'break' ';'\n       && lk != 27224               // 'case' ';'\n       && lk != 27225               // 'cast' ';'\n       && lk != 27226               // 'castable' ';'\n       && lk != 27227               // 'catch' ';'\n       && lk != 27229               // 'child' ';'\n       && lk != 27230               // 'collation' ';'\n       && lk != 27232               // 'comment' ';'\n       && lk != 27233               // 'constraint' ';'\n       && lk != 27234               // 'construction' ';'\n       && lk != 27237               // 'context' ';'\n       && lk != 27238               // 'continue' ';'\n       && lk != 27239               // 'copy' ';'\n       && lk != 27240               // 'copy-namespaces' ';'\n       && lk != 27241               // 'count' ';'\n       && lk != 27242               // 'decimal-format' ';'\n       && lk != 27244               // 'declare' ';'\n       && lk != 27245               // 'default' ';'\n       && lk != 27246               // 'delete' ';'\n       && lk != 27247               // 'descendant' ';'\n       && lk != 27248               // 'descendant-or-self' ';'\n       && lk != 27249               // 'descending' ';'\n       && lk != 27254               // 'div' ';'\n       && lk != 27255               // 'document' ';'\n       && lk != 27256               // 'document-node' ';'\n       && lk != 27257               // 'element' ';'\n       && lk != 27258               // 'else' ';'\n       && lk != 27259               // 'empty' ';'\n       && lk != 27260               // 'empty-sequence' ';'\n       && lk != 27261               // 'encoding' ';'\n       && lk != 27262               // 'end' ';'\n       && lk != 27264               // 'eq' ';'\n       && lk != 27265               // 'every' ';'\n       && lk != 27267               // 'except' ';'\n       && lk != 27268               // 'exit' ';'\n       && lk != 27269               // 'external' ';'\n       && lk != 27270               // 'first' ';'\n       && lk != 27271               // 'following' ';'\n       && lk != 27272               // 'following-sibling' ';'\n       && lk != 27273               // 'for' ';'\n       && lk != 27277               // 'ft-option' ';'\n       && lk != 27281               // 'function' ';'\n       && lk != 27282               // 'ge' ';'\n       && lk != 27284               // 'group' ';'\n       && lk != 27286               // 'gt' ';'\n       && lk != 27287               // 'idiv' ';'\n       && lk != 27288               // 'if' ';'\n       && lk != 27289               // 'import' ';'\n       && lk != 27290               // 'in' ';'\n       && lk != 27291               // 'index' ';'\n       && lk != 27295               // 'insert' ';'\n       && lk != 27296               // 'instance' ';'\n       && lk != 27297               // 'integrity' ';'\n       && lk != 27298               // 'intersect' ';'\n       && lk != 27299               // 'into' ';'\n       && lk != 27300               // 'is' ';'\n       && lk != 27301               // 'item' ';'\n       && lk != 27302               // 'json' ';'\n       && lk != 27303               // 'json-item' ';'\n       && lk != 27306               // 'last' ';'\n       && lk != 27307               // 'lax' ';'\n       && lk != 27308               // 'le' ';'\n       && lk != 27310               // 'let' ';'\n       && lk != 27312               // 'loop' ';'\n       && lk != 27314               // 'lt' ';'\n       && lk != 27316               // 'mod' ';'\n       && lk != 27317               // 'modify' ';'\n       && lk != 27318               // 'module' ';'\n       && lk != 27320               // 'namespace' ';'\n       && lk != 27321               // 'namespace-node' ';'\n       && lk != 27322               // 'ne' ';'\n       && lk != 27327               // 'node' ';'\n       && lk != 27328               // 'nodes' ';'\n       && lk != 27330               // 'object' ';'\n       && lk != 27334               // 'only' ';'\n       && lk != 27335               // 'option' ';'\n       && lk != 27336               // 'or' ';'\n       && lk != 27337               // 'order' ';'\n       && lk != 27338               // 'ordered' ';'\n       && lk != 27339               // 'ordering' ';'\n       && lk != 27342               // 'parent' ';'\n       && lk != 27348               // 'preceding' ';'\n       && lk != 27349               // 'preceding-sibling' ';'\n       && lk != 27352               // 'processing-instruction' ';'\n       && lk != 27354               // 'rename' ';'\n       && lk != 27355               // 'replace' ';'\n       && lk != 27356               // 'return' ';'\n       && lk != 27357               // 'returning' ';'\n       && lk != 27358               // 'revalidation' ';'\n       && lk != 27360               // 'satisfies' ';'\n       && lk != 27361               // 'schema' ';'\n       && lk != 27362               // 'schema-attribute' ';'\n       && lk != 27363               // 'schema-element' ';'\n       && lk != 27364               // 'score' ';'\n       && lk != 27365               // 'self' ';'\n       && lk != 27370               // 'sliding' ';'\n       && lk != 27371               // 'some' ';'\n       && lk != 27372               // 'stable' ';'\n       && lk != 27373               // 'start' ';'\n       && lk != 27376               // 'strict' ';'\n       && lk != 27378               // 'structured-item' ';'\n       && lk != 27379               // 'switch' ';'\n       && lk != 27380               // 'text' ';'\n       && lk != 27384               // 'to' ';'\n       && lk != 27385               // 'treat' ';'\n       && lk != 27386               // 'try' ';'\n       && lk != 27387               // 'tumbling' ';'\n       && lk != 27388               // 'type' ';'\n       && lk != 27389               // 'typeswitch' ';'\n       && lk != 27390               // 'union' ';'\n       && lk != 27392               // 'unordered' ';'\n       && lk != 27393               // 'updating' ';'\n       && lk != 27396               // 'validate' ';'\n       && lk != 27397               // 'value' ';'\n       && lk != 27398               // 'variable' ';'\n       && lk != 27399               // 'version' ';'\n       && lk != 27402               // 'where' ';'\n       && lk != 27403               // 'while' ';'\n       && lk != 27406               // 'with' ';'\n       && lk != 27410               // 'xquery' ';'\n       && lk != 90198               // 'break' 'loop'\n       && lk != 90214               // 'continue' 'loop'\n       && lk != 113284)             // 'exit' 'returning'\n      {\n        break;\n      }\n      try_Statement();\n    }\n  }\n\n  function parse_StatementsAndExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndExpr\", e0);\n    parse_Statements();\n    whitespace();\n    parse_Expr();\n    eventHandler.endNonterminal(\"StatementsAndExpr\", e0);\n  }\n\n  function try_StatementsAndExpr()\n  {\n    try_Statements();\n    try_Expr();\n  }\n\n  function parse_StatementsAndOptionalExpr()\n  {\n    eventHandler.startNonterminal(\"StatementsAndOptionalExpr\", e0);\n    parse_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    eventHandler.endNonterminal(\"StatementsAndOptionalExpr\", e0);\n  }\n\n  function try_StatementsAndOptionalExpr()\n  {\n    try_Statements();\n    if (l1 != 25                    // EOF\n     && l1 != 282)                  // '}'\n    {\n      try_Expr();\n    }\n  }\n\n  function parse_Statement()\n  {\n    eventHandler.startNonterminal(\"Statement\", e0);\n    switch (l1)\n    {\n    case 132:                       // 'exit'\n      lookahead2W(188);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 137:                       // 'for'\n      lookahead2W(195);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 174:                       // 'let'\n      lookahead2W(192);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 250:                       // 'try'\n      lookahead2W(189);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 262:                       // 'variable'\n      lookahead2W(186);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    case 31:                        // '$'\n    case 32:                        // '%'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 86:                        // 'break'\n    case 102:                       // 'continue'\n      lookahead2W(187);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 267:                       // 'while'\n      lookahead2W(184);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3103                  // '$' EQName^Token\n     || lk == 3104                  // '%' EQName^Token\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17675                 // 'while' '('\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27412                 // '{' ';'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 35871                 // '$' 'after'\n     || lk == 35872                 // '%' 'after'\n     || lk == 36116                 // '{' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 36896                 // '%' 'allowing'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37408                 // '%' 'ancestor'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 37920                 // '%' 'ancestor-or-self'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 38432                 // '%' 'and'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39456                 // '%' 'append'\n     || lk == 39700                 // '{' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 39968                 // '%' 'array'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40480                 // '%' 'as'\n     || lk == 40724                 // '{' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 40992                 // '%' 'ascending'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 41504                 // '%' 'at'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42016                 // '%' 'attribute'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 42528                 // '%' 'base-uri'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43040                 // '%' 'before'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 43552                 // '%' 'boundary-space'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 44064                 // '%' 'break'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45088                 // '%' 'case'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 45600                 // '%' 'cast'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46112                 // '%' 'castable'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 46624                 // '%' 'catch'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 47648                 // '%' 'child'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 48160                 // '%' 'collation'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49184                 // '%' 'comment'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 49696                 // '%' 'constraint'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 50208                 // '%' 'construction'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 51744                 // '%' 'context'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52256                 // '%' 'continue'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 52768                 // '%' 'copy'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53280                 // '%' 'copy-namespaces'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 53792                 // '%' 'count'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 54304                 // '%' 'decimal-format'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55328                 // '%' 'declare'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 55840                 // '%' 'default'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56352                 // '%' 'delete'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 56864                 // '%' 'descendant'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57376                 // '%' 'descendant-or-self'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 57888                 // '%' 'descending'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60448                 // '%' 'div'\n     || lk == 60692                 // '{' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 60960                 // '%' 'document'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61472                 // '%' 'document-node'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 61984                 // '%' 'element'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 62496                 // '%' 'else'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63008                 // '%' 'empty'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 63520                 // '%' 'empty-sequence'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64032                 // '%' 'encoding'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 64544                 // '%' 'end'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 65568                 // '%' 'eq'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 66080                 // '%' 'every'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67104                 // '%' 'except'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 67616                 // '%' 'exit'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68128                 // '%' 'external'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 68640                 // '%' 'first'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69152                 // '%' 'following'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 69664                 // '%' 'following-sibling'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 70176                 // '%' 'for'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 72224                 // '%' 'ft-option'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74272                 // '%' 'function'\n     || lk == 74516                 // '{' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 74784                 // '%' 'ge'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 75808                 // '%' 'group'\n     || lk == 76052                 // '{' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 76832                 // '%' 'gt'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77344                 // '%' 'idiv'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 77856                 // '%' 'if'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78368                 // '%' 'import'\n     || lk == 78612                 // '{' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 78880                 // '%' 'in'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 79392                 // '%' 'index'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81440                 // '%' 'insert'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 81952                 // '%' 'instance'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82464                 // '%' 'integrity'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 82976                 // '%' 'intersect'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83488                 // '%' 'into'\n     || lk == 83732                 // '{' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84000                 // '%' 'is'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 84512                 // '%' 'item'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85024                 // '%' 'json'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 85536                 // '%' 'json-item'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87072                 // '%' 'last'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 87584                 // '%' 'lax'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 88096                 // '%' 'le'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 89120                 // '%' 'let'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 90144                 // '%' 'loop'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 91168                 // '%' 'lt'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92192                 // '%' 'mod'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 92704                 // '%' 'modify'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 93216                 // '%' 'module'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94240                 // '%' 'namespace'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 94752                 // '%' 'namespace-node'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 95264                 // '%' 'ne'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 97824                 // '%' 'node'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 98336                 // '%' 'nodes'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 99360                 // '%' 'object'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101408                // '%' 'only'\n     || lk == 101652                // '{' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 101920                // '%' 'option'\n     || lk == 102164                // '{' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102432                // '%' 'or'\n     || lk == 102676                // '{' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 102944                // '%' 'order'\n     || lk == 103188                // '{' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103456                // '%' 'ordered'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 103968                // '%' 'ordering'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 105504                // '%' 'parent'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 108576                // '%' 'preceding'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 109088                // '%' 'preceding-sibling'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 110624                // '%' 'processing-instruction'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 111648                // '%' 'rename'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112160                // '%' 'replace'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 112672                // '%' 'return'\n     || lk == 112916                // '{' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113184                // '%' 'returning'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 113696                // '%' 'revalidation'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 114720                // '%' 'satisfies'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115232                // '%' 'schema'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 115744                // '%' 'schema-attribute'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116256                // '%' 'schema-element'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 116768                // '%' 'score'\n     || lk == 117012                // '{' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 117280                // '%' 'self'\n     || lk == 117524                // '{' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 119840                // '%' 'sliding'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120352                // '%' 'some'\n     || lk == 120596                // '{' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 120864                // '%' 'stable'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 121376                // '%' 'start'\n     || lk == 121620                // '{' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 122912                // '%' 'strict'\n     || lk == 123156                // '{' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 123936                // '%' 'structured-item'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124448                // '%' 'switch'\n     || lk == 124692                // '{' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 124960                // '%' 'text'\n     || lk == 125204                // '{' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127008                // '%' 'to'\n     || lk == 127252                // '{' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 127520                // '%' 'treat'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128032                // '%' 'try'\n     || lk == 128276                // '{' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 128544                // '%' 'tumbling'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129056                // '%' 'type'\n     || lk == 129300                // '{' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 129568                // '%' 'typeswitch'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 130080                // '%' 'union'\n     || lk == 130324                // '{' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131104                // '%' 'unordered'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 131616                // '%' 'updating'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133152                // '%' 'validate'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 133664                // '%' 'value'\n     || lk == 133908                // '{' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134176                // '%' 'variable'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 134688                // '%' 'version'\n     || lk == 134932                // '{' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136224                // '%' 'where'\n     || lk == 136468                // '{' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 136736                // '%' 'while'\n     || lk == 136980                // '{' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 138272                // '%' 'with'\n     || lk == 138516                // '{' 'with'\n     || lk == 140319                // '$' 'xquery'\n     || lk == 140320                // '%' 'xquery'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(7, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            lk = -2;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              lk = -3;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                lk = -12;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n              }\n            }\n          }\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(7, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      parse_AssignStatement();\n      break;\n    case -3:\n      parse_BlockStatement();\n      break;\n    case 90198:                     // 'break' 'loop'\n      parse_BreakStatement();\n      break;\n    case 90214:                     // 'continue' 'loop'\n      parse_ContinueStatement();\n      break;\n    case 113284:                    // 'exit' 'returning'\n      parse_ExitStatement();\n      break;\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      parse_FLWORStatement();\n      break;\n    case 17560:                     // 'if' '('\n      parse_IfStatement();\n      break;\n    case 17651:                     // 'switch' '('\n      parse_SwitchStatement();\n      break;\n    case 141562:                    // 'try' '{'\n      parse_TryCatchStatement();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      parse_TypeswitchStatement();\n      break;\n    case -12:\n    case 16134:                     // 'variable' '$'\n      parse_VarDeclStatement();\n      break;\n    case -13:\n      parse_WhileStatement();\n      break;\n    case 53:                        // ';'\n      parse_VoidStatement();\n      break;\n    default:\n      parse_ApplyStatement();\n    }\n    eventHandler.endNonterminal(\"Statement\", e0);\n  }\n\n  function try_Statement()\n  {\n    switch (l1)\n    {\n    case 132:                       // 'exit'\n      lookahead2W(188);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 137:                       // 'for'\n      lookahead2W(195);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 174:                       // 'let'\n      lookahead2W(192);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 250:                       // 'try'\n      lookahead2W(189);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 262:                       // 'variable'\n      lookahead2W(186);             // S^WS | '!' | '!=' | '#' | '$' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' |\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    case 31:                        // '$'\n    case 32:                        // '%'\n      lookahead2W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 86:                        // 'break'\n    case 102:                       // 'continue'\n      lookahead2W(187);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 267:                       // 'while'\n      lookahead2W(184);             // S^WS | '!' | '!=' | '#' | '(' | '(:' | '*' | '+' | '-' | '/' | '//' | ';' | '<' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3103                  // '$' EQName^Token\n     || lk == 3104                  // '%' EQName^Token\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17675                 // 'while' '('\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27412                 // '{' ';'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 35871                 // '$' 'after'\n     || lk == 35872                 // '%' 'after'\n     || lk == 36116                 // '{' 'after'\n     || lk == 36895                 // '$' 'allowing'\n     || lk == 36896                 // '%' 'allowing'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37407                 // '$' 'ancestor'\n     || lk == 37408                 // '%' 'ancestor'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 37919                 // '$' 'ancestor-or-self'\n     || lk == 37920                 // '%' 'ancestor-or-self'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38431                 // '$' 'and'\n     || lk == 38432                 // '%' 'and'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39455                 // '$' 'append'\n     || lk == 39456                 // '%' 'append'\n     || lk == 39700                 // '{' 'append'\n     || lk == 39967                 // '$' 'array'\n     || lk == 39968                 // '%' 'array'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40479                 // '$' 'as'\n     || lk == 40480                 // '%' 'as'\n     || lk == 40724                 // '{' 'as'\n     || lk == 40991                 // '$' 'ascending'\n     || lk == 40992                 // '%' 'ascending'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41503                 // '$' 'at'\n     || lk == 41504                 // '%' 'at'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42015                 // '$' 'attribute'\n     || lk == 42016                 // '%' 'attribute'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42527                 // '$' 'base-uri'\n     || lk == 42528                 // '%' 'base-uri'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43039                 // '$' 'before'\n     || lk == 43040                 // '%' 'before'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43551                 // '$' 'boundary-space'\n     || lk == 43552                 // '%' 'boundary-space'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44063                 // '$' 'break'\n     || lk == 44064                 // '%' 'break'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45087                 // '$' 'case'\n     || lk == 45088                 // '%' 'case'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45599                 // '$' 'cast'\n     || lk == 45600                 // '%' 'cast'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46111                 // '$' 'castable'\n     || lk == 46112                 // '%' 'castable'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46623                 // '$' 'catch'\n     || lk == 46624                 // '%' 'catch'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47647                 // '$' 'child'\n     || lk == 47648                 // '%' 'child'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48159                 // '$' 'collation'\n     || lk == 48160                 // '%' 'collation'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49183                 // '$' 'comment'\n     || lk == 49184                 // '%' 'comment'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49695                 // '$' 'constraint'\n     || lk == 49696                 // '%' 'constraint'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50207                 // '$' 'construction'\n     || lk == 50208                 // '%' 'construction'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51743                 // '$' 'context'\n     || lk == 51744                 // '%' 'context'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52255                 // '$' 'continue'\n     || lk == 52256                 // '%' 'continue'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 52767                 // '$' 'copy'\n     || lk == 52768                 // '%' 'copy'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53279                 // '$' 'copy-namespaces'\n     || lk == 53280                 // '%' 'copy-namespaces'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 53791                 // '$' 'count'\n     || lk == 53792                 // '%' 'count'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54303                 // '$' 'decimal-format'\n     || lk == 54304                 // '%' 'decimal-format'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55327                 // '$' 'declare'\n     || lk == 55328                 // '%' 'declare'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 55839                 // '$' 'default'\n     || lk == 55840                 // '%' 'default'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56351                 // '$' 'delete'\n     || lk == 56352                 // '%' 'delete'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 56863                 // '$' 'descendant'\n     || lk == 56864                 // '%' 'descendant'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57375                 // '$' 'descendant-or-self'\n     || lk == 57376                 // '%' 'descendant-or-self'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 57887                 // '$' 'descending'\n     || lk == 57888                 // '%' 'descending'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60447                 // '$' 'div'\n     || lk == 60448                 // '%' 'div'\n     || lk == 60692                 // '{' 'div'\n     || lk == 60959                 // '$' 'document'\n     || lk == 60960                 // '%' 'document'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61471                 // '$' 'document-node'\n     || lk == 61472                 // '%' 'document-node'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 61983                 // '$' 'element'\n     || lk == 61984                 // '%' 'element'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62495                 // '$' 'else'\n     || lk == 62496                 // '%' 'else'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63007                 // '$' 'empty'\n     || lk == 63008                 // '%' 'empty'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63519                 // '$' 'empty-sequence'\n     || lk == 63520                 // '%' 'empty-sequence'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64031                 // '$' 'encoding'\n     || lk == 64032                 // '%' 'encoding'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64543                 // '$' 'end'\n     || lk == 64544                 // '%' 'end'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65567                 // '$' 'eq'\n     || lk == 65568                 // '%' 'eq'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66079                 // '$' 'every'\n     || lk == 66080                 // '%' 'every'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67103                 // '$' 'except'\n     || lk == 67104                 // '%' 'except'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67615                 // '$' 'exit'\n     || lk == 67616                 // '%' 'exit'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68127                 // '$' 'external'\n     || lk == 68128                 // '%' 'external'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68639                 // '$' 'first'\n     || lk == 68640                 // '%' 'first'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69151                 // '$' 'following'\n     || lk == 69152                 // '%' 'following'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69663                 // '$' 'following-sibling'\n     || lk == 69664                 // '%' 'following-sibling'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70175                 // '$' 'for'\n     || lk == 70176                 // '%' 'for'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72223                 // '$' 'ft-option'\n     || lk == 72224                 // '%' 'ft-option'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74271                 // '$' 'function'\n     || lk == 74272                 // '%' 'function'\n     || lk == 74516                 // '{' 'function'\n     || lk == 74783                 // '$' 'ge'\n     || lk == 74784                 // '%' 'ge'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 75807                 // '$' 'group'\n     || lk == 75808                 // '%' 'group'\n     || lk == 76052                 // '{' 'group'\n     || lk == 76831                 // '$' 'gt'\n     || lk == 76832                 // '%' 'gt'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77343                 // '$' 'idiv'\n     || lk == 77344                 // '%' 'idiv'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 77855                 // '$' 'if'\n     || lk == 77856                 // '%' 'if'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78367                 // '$' 'import'\n     || lk == 78368                 // '%' 'import'\n     || lk == 78612                 // '{' 'import'\n     || lk == 78879                 // '$' 'in'\n     || lk == 78880                 // '%' 'in'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79391                 // '$' 'index'\n     || lk == 79392                 // '%' 'index'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81439                 // '$' 'insert'\n     || lk == 81440                 // '%' 'insert'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 81951                 // '$' 'instance'\n     || lk == 81952                 // '%' 'instance'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82463                 // '$' 'integrity'\n     || lk == 82464                 // '%' 'integrity'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 82975                 // '$' 'intersect'\n     || lk == 82976                 // '%' 'intersect'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83487                 // '$' 'into'\n     || lk == 83488                 // '%' 'into'\n     || lk == 83732                 // '{' 'into'\n     || lk == 83999                 // '$' 'is'\n     || lk == 84000                 // '%' 'is'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84511                 // '$' 'item'\n     || lk == 84512                 // '%' 'item'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85023                 // '$' 'json'\n     || lk == 85024                 // '%' 'json'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85535                 // '$' 'json-item'\n     || lk == 85536                 // '%' 'json-item'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87071                 // '$' 'last'\n     || lk == 87072                 // '%' 'last'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87583                 // '$' 'lax'\n     || lk == 87584                 // '%' 'lax'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88095                 // '$' 'le'\n     || lk == 88096                 // '%' 'le'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89119                 // '$' 'let'\n     || lk == 89120                 // '%' 'let'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90143                 // '$' 'loop'\n     || lk == 90144                 // '%' 'loop'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91167                 // '$' 'lt'\n     || lk == 91168                 // '%' 'lt'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92191                 // '$' 'mod'\n     || lk == 92192                 // '%' 'mod'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92703                 // '$' 'modify'\n     || lk == 92704                 // '%' 'modify'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93215                 // '$' 'module'\n     || lk == 93216                 // '%' 'module'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94239                 // '$' 'namespace'\n     || lk == 94240                 // '%' 'namespace'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94751                 // '$' 'namespace-node'\n     || lk == 94752                 // '%' 'namespace-node'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95263                 // '$' 'ne'\n     || lk == 95264                 // '%' 'ne'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 97823                 // '$' 'node'\n     || lk == 97824                 // '%' 'node'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98335                 // '$' 'nodes'\n     || lk == 98336                 // '%' 'nodes'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99359                 // '$' 'object'\n     || lk == 99360                 // '%' 'object'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101407                // '$' 'only'\n     || lk == 101408                // '%' 'only'\n     || lk == 101652                // '{' 'only'\n     || lk == 101919                // '$' 'option'\n     || lk == 101920                // '%' 'option'\n     || lk == 102164                // '{' 'option'\n     || lk == 102431                // '$' 'or'\n     || lk == 102432                // '%' 'or'\n     || lk == 102676                // '{' 'or'\n     || lk == 102943                // '$' 'order'\n     || lk == 102944                // '%' 'order'\n     || lk == 103188                // '{' 'order'\n     || lk == 103455                // '$' 'ordered'\n     || lk == 103456                // '%' 'ordered'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 103967                // '$' 'ordering'\n     || lk == 103968                // '%' 'ordering'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105503                // '$' 'parent'\n     || lk == 105504                // '%' 'parent'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108575                // '$' 'preceding'\n     || lk == 108576                // '%' 'preceding'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109087                // '$' 'preceding-sibling'\n     || lk == 109088                // '%' 'preceding-sibling'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110623                // '$' 'processing-instruction'\n     || lk == 110624                // '%' 'processing-instruction'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111647                // '$' 'rename'\n     || lk == 111648                // '%' 'rename'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112159                // '$' 'replace'\n     || lk == 112160                // '%' 'replace'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112671                // '$' 'return'\n     || lk == 112672                // '%' 'return'\n     || lk == 112916                // '{' 'return'\n     || lk == 113183                // '$' 'returning'\n     || lk == 113184                // '%' 'returning'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113695                // '$' 'revalidation'\n     || lk == 113696                // '%' 'revalidation'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114719                // '$' 'satisfies'\n     || lk == 114720                // '%' 'satisfies'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115231                // '$' 'schema'\n     || lk == 115232                // '%' 'schema'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115743                // '$' 'schema-attribute'\n     || lk == 115744                // '%' 'schema-attribute'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116255                // '$' 'schema-element'\n     || lk == 116256                // '%' 'schema-element'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 116767                // '$' 'score'\n     || lk == 116768                // '%' 'score'\n     || lk == 117012                // '{' 'score'\n     || lk == 117279                // '$' 'self'\n     || lk == 117280                // '%' 'self'\n     || lk == 117524                // '{' 'self'\n     || lk == 119839                // '$' 'sliding'\n     || lk == 119840                // '%' 'sliding'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120351                // '$' 'some'\n     || lk == 120352                // '%' 'some'\n     || lk == 120596                // '{' 'some'\n     || lk == 120863                // '$' 'stable'\n     || lk == 120864                // '%' 'stable'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121375                // '$' 'start'\n     || lk == 121376                // '%' 'start'\n     || lk == 121620                // '{' 'start'\n     || lk == 122911                // '$' 'strict'\n     || lk == 122912                // '%' 'strict'\n     || lk == 123156                // '{' 'strict'\n     || lk == 123935                // '$' 'structured-item'\n     || lk == 123936                // '%' 'structured-item'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124447                // '$' 'switch'\n     || lk == 124448                // '%' 'switch'\n     || lk == 124692                // '{' 'switch'\n     || lk == 124959                // '$' 'text'\n     || lk == 124960                // '%' 'text'\n     || lk == 125204                // '{' 'text'\n     || lk == 127007                // '$' 'to'\n     || lk == 127008                // '%' 'to'\n     || lk == 127252                // '{' 'to'\n     || lk == 127519                // '$' 'treat'\n     || lk == 127520                // '%' 'treat'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128031                // '$' 'try'\n     || lk == 128032                // '%' 'try'\n     || lk == 128276                // '{' 'try'\n     || lk == 128543                // '$' 'tumbling'\n     || lk == 128544                // '%' 'tumbling'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129055                // '$' 'type'\n     || lk == 129056                // '%' 'type'\n     || lk == 129300                // '{' 'type'\n     || lk == 129567                // '$' 'typeswitch'\n     || lk == 129568                // '%' 'typeswitch'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130079                // '$' 'union'\n     || lk == 130080                // '%' 'union'\n     || lk == 130324                // '{' 'union'\n     || lk == 131103                // '$' 'unordered'\n     || lk == 131104                // '%' 'unordered'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131615                // '$' 'updating'\n     || lk == 131616                // '%' 'updating'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133151                // '$' 'validate'\n     || lk == 133152                // '%' 'validate'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133663                // '$' 'value'\n     || lk == 133664                // '%' 'value'\n     || lk == 133908                // '{' 'value'\n     || lk == 134175                // '$' 'variable'\n     || lk == 134176                // '%' 'variable'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134687                // '$' 'version'\n     || lk == 134688                // '%' 'version'\n     || lk == 134932                // '{' 'version'\n     || lk == 136223                // '$' 'where'\n     || lk == 136224                // '%' 'where'\n     || lk == 136468                // '{' 'where'\n     || lk == 136735                // '$' 'while'\n     || lk == 136736                // '%' 'while'\n     || lk == 136980                // '{' 'while'\n     || lk == 138271                // '$' 'with'\n     || lk == 138272                // '%' 'with'\n     || lk == 138516                // '{' 'with'\n     || lk == 140319                // '$' 'xquery'\n     || lk == 140320                // '%' 'xquery'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(7, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ApplyStatement();\n          memoize(7, e0A, -1);\n          lk = -15;\n        }\n        catch (p1A)\n        {\n          try\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            try_AssignStatement();\n            memoize(7, e0A, -2);\n            lk = -15;\n          }\n          catch (p2A)\n          {\n            try\n            {\n              b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n              b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n              b2 = b2A; e2 = e2A; end = e2A; }}\n              try_BlockStatement();\n              memoize(7, e0A, -3);\n              lk = -15;\n            }\n            catch (p3A)\n            {\n              try\n              {\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                try_VarDeclStatement();\n                memoize(7, e0A, -12);\n                lk = -15;\n              }\n              catch (p12A)\n              {\n                lk = -13;\n                b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n                b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n                b2 = b2A; e2 = e2A; end = e2A; }}\n                memoize(7, e0A, -13);\n              }\n            }\n          }\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -2:\n      try_AssignStatement();\n      break;\n    case -3:\n      try_BlockStatement();\n      break;\n    case 90198:                     // 'break' 'loop'\n      try_BreakStatement();\n      break;\n    case 90214:                     // 'continue' 'loop'\n      try_ContinueStatement();\n      break;\n    case 113284:                    // 'exit' 'returning'\n      try_ExitStatement();\n      break;\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      try_FLWORStatement();\n      break;\n    case 17560:                     // 'if' '('\n      try_IfStatement();\n      break;\n    case 17651:                     // 'switch' '('\n      try_SwitchStatement();\n      break;\n    case 141562:                    // 'try' '{'\n      try_TryCatchStatement();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      try_TypeswitchStatement();\n      break;\n    case -12:\n    case 16134:                     // 'variable' '$'\n      try_VarDeclStatement();\n      break;\n    case -13:\n      try_WhileStatement();\n      break;\n    case 53:                        // ';'\n      try_VoidStatement();\n      break;\n    case -15:\n      break;\n    default:\n      try_ApplyStatement();\n    }\n  }\n\n  function parse_ApplyStatement()\n  {\n    eventHandler.startNonterminal(\"ApplyStatement\", e0);\n    parse_ExprSimple();\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"ApplyStatement\", e0);\n  }\n\n  function try_ApplyStatement()\n  {\n    try_ExprSimple();\n    shiftT(53);                     // ';'\n  }\n\n  function parse_AssignStatement()\n  {\n    eventHandler.startNonterminal(\"AssignStatement\", e0);\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shift(52);                      // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"AssignStatement\", e0);\n  }\n\n  function try_AssignStatement()\n  {\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(27);                // S^WS | '(:' | ':='\n    shiftT(52);                     // ':='\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(53);                     // ';'\n  }\n\n  function parse_BlockStatement()\n  {\n    eventHandler.startNonterminal(\"BlockStatement\", e0);\n    shift(276);                     // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statements();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"BlockStatement\", e0);\n  }\n\n  function try_BlockStatement()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statements();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_BreakStatement()\n  {\n    eventHandler.startNonterminal(\"BreakStatement\", e0);\n    shift(86);                      // 'break'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shift(176);                     // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"BreakStatement\", e0);\n  }\n\n  function try_BreakStatement()\n  {\n    shiftT(86);                     // 'break'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shiftT(176);                    // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shiftT(53);                     // ';'\n  }\n\n  function parse_ContinueStatement()\n  {\n    eventHandler.startNonterminal(\"ContinueStatement\", e0);\n    shift(102);                     // 'continue'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shift(176);                     // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"ContinueStatement\", e0);\n  }\n\n  function try_ContinueStatement()\n  {\n    shiftT(102);                    // 'continue'\n    lookahead1W(59);                // S^WS | '(:' | 'loop'\n    shiftT(176);                    // 'loop'\n    lookahead1W(28);                // S^WS | '(:' | ';'\n    shiftT(53);                     // ';'\n  }\n\n  function parse_ExitStatement()\n  {\n    eventHandler.startNonterminal(\"ExitStatement\", e0);\n    shift(132);                     // 'exit'\n    lookahead1W(71);                // S^WS | '(:' | 'returning'\n    shift(221);                     // 'returning'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"ExitStatement\", e0);\n  }\n\n  function try_ExitStatement()\n  {\n    shiftT(132);                    // 'exit'\n    lookahead1W(71);                // S^WS | '(:' | 'returning'\n    shiftT(221);                    // 'returning'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(53);                     // ';'\n  }\n\n  function parse_FLWORStatement()\n  {\n    eventHandler.startNonterminal(\"FLWORStatement\", e0);\n    parse_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      whitespace();\n      parse_IntermediateClause();\n    }\n    whitespace();\n    parse_ReturnStatement();\n    eventHandler.endNonterminal(\"FLWORStatement\", e0);\n  }\n\n  function try_FLWORStatement()\n  {\n    try_InitialClause();\n    for (;;)\n    {\n      lookahead1W(173);             // S^WS | '(:' | 'count' | 'for' | 'group' | 'let' | 'order' | 'return' | 'stable' |\n      if (l1 == 220)                // 'return'\n      {\n        break;\n      }\n      try_IntermediateClause();\n    }\n    try_ReturnStatement();\n  }\n\n  function parse_ReturnStatement()\n  {\n    eventHandler.startNonterminal(\"ReturnStatement\", e0);\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"ReturnStatement\", e0);\n  }\n\n  function try_ReturnStatement()\n  {\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_IfStatement()\n  {\n    eventHandler.startNonterminal(\"IfStatement\", e0);\n    shift(152);                     // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shift(245);                     // 'then'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    lookahead1W(48);                // S^WS | '(:' | 'else'\n    shift(122);                     // 'else'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"IfStatement\", e0);\n  }\n\n  function try_IfStatement()\n  {\n    shiftT(152);                    // 'if'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    lookahead1W(77);                // S^WS | '(:' | 'then'\n    shiftT(245);                    // 'then'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n    lookahead1W(48);                // S^WS | '(:' | 'else'\n    shiftT(122);                    // 'else'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_SwitchStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchStatement\", e0);\n    shift(243);                     // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_SwitchCaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchStatement\", e0);\n  }\n\n  function try_SwitchStatement()\n  {\n    shiftT(243);                    // 'switch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_SwitchCaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_SwitchCaseStatement()\n  {\n    eventHandler.startNonterminal(\"SwitchCaseStatement\", e0);\n    for (;;)\n    {\n      shift(88);                    // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"SwitchCaseStatement\", e0);\n  }\n\n  function try_SwitchCaseStatement()\n  {\n    for (;;)\n    {\n      shiftT(88);                   // 'case'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_SwitchCaseOperand();\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_TryCatchStatement()\n  {\n    eventHandler.startNonterminal(\"TryCatchStatement\", e0);\n    shift(250);                     // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      shift(91);                    // 'catch'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_CatchErrorList();\n      whitespace();\n      parse_BlockStatement();\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 91:                      // 'catch'\n        lookahead2W(278);           // Wildcard | EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 38491               // 'catch' 'and'\n       || lk == 45659               // 'catch' 'cast'\n       || lk == 46171               // 'catch' 'castable'\n       || lk == 60507               // 'catch' 'div'\n       || lk == 65627               // 'catch' 'eq'\n       || lk == 67163               // 'catch' 'except'\n       || lk == 74843               // 'catch' 'ge'\n       || lk == 76891               // 'catch' 'gt'\n       || lk == 77403               // 'catch' 'idiv'\n       || lk == 82011               // 'catch' 'instance'\n       || lk == 83035               // 'catch' 'intersect'\n       || lk == 84059               // 'catch' 'is'\n       || lk == 88155               // 'catch' 'le'\n       || lk == 91227               // 'catch' 'lt'\n       || lk == 92251               // 'catch' 'mod'\n       || lk == 95323               // 'catch' 'ne'\n       || lk == 102491              // 'catch' 'or'\n       || lk == 127067              // 'catch' 'to'\n       || lk == 127579              // 'catch' 'treat'\n       || lk == 130139)             // 'catch' 'union'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            lookahead1W(36);        // S^WS | '(:' | 'catch'\n            shiftT(91);             // 'catch'\n            lookahead1W(256);       // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n            try_CatchErrorList();\n            try_BlockStatement();\n            lk = -1;\n          }\n          catch (p1A)\n          {\n            lk = -2;\n          }\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(8, e0, lk);\n        }\n      }\n      if (lk != -1\n       && lk != 2651                // 'catch' Wildcard\n       && lk != 3163                // 'catch' EQName^Token\n       && lk != 35931               // 'catch' 'after'\n       && lk != 36955               // 'catch' 'allowing'\n       && lk != 37467               // 'catch' 'ancestor'\n       && lk != 37979               // 'catch' 'ancestor-or-self'\n       && lk != 39515               // 'catch' 'append'\n       && lk != 40027               // 'catch' 'array'\n       && lk != 40539               // 'catch' 'as'\n       && lk != 41051               // 'catch' 'ascending'\n       && lk != 41563               // 'catch' 'at'\n       && lk != 42075               // 'catch' 'attribute'\n       && lk != 42587               // 'catch' 'base-uri'\n       && lk != 43099               // 'catch' 'before'\n       && lk != 43611               // 'catch' 'boundary-space'\n       && lk != 44123               // 'catch' 'break'\n       && lk != 45147               // 'catch' 'case'\n       && lk != 46683               // 'catch' 'catch'\n       && lk != 47707               // 'catch' 'child'\n       && lk != 48219               // 'catch' 'collation'\n       && lk != 49243               // 'catch' 'comment'\n       && lk != 49755               // 'catch' 'constraint'\n       && lk != 50267               // 'catch' 'construction'\n       && lk != 51803               // 'catch' 'context'\n       && lk != 52315               // 'catch' 'continue'\n       && lk != 52827               // 'catch' 'copy'\n       && lk != 53339               // 'catch' 'copy-namespaces'\n       && lk != 53851               // 'catch' 'count'\n       && lk != 54363               // 'catch' 'decimal-format'\n       && lk != 55387               // 'catch' 'declare'\n       && lk != 55899               // 'catch' 'default'\n       && lk != 56411               // 'catch' 'delete'\n       && lk != 56923               // 'catch' 'descendant'\n       && lk != 57435               // 'catch' 'descendant-or-self'\n       && lk != 57947               // 'catch' 'descending'\n       && lk != 61019               // 'catch' 'document'\n       && lk != 61531               // 'catch' 'document-node'\n       && lk != 62043               // 'catch' 'element'\n       && lk != 62555               // 'catch' 'else'\n       && lk != 63067               // 'catch' 'empty'\n       && lk != 63579               // 'catch' 'empty-sequence'\n       && lk != 64091               // 'catch' 'encoding'\n       && lk != 64603               // 'catch' 'end'\n       && lk != 66139               // 'catch' 'every'\n       && lk != 67675               // 'catch' 'exit'\n       && lk != 68187               // 'catch' 'external'\n       && lk != 68699               // 'catch' 'first'\n       && lk != 69211               // 'catch' 'following'\n       && lk != 69723               // 'catch' 'following-sibling'\n       && lk != 70235               // 'catch' 'for'\n       && lk != 72283               // 'catch' 'ft-option'\n       && lk != 74331               // 'catch' 'function'\n       && lk != 75867               // 'catch' 'group'\n       && lk != 77915               // 'catch' 'if'\n       && lk != 78427               // 'catch' 'import'\n       && lk != 78939               // 'catch' 'in'\n       && lk != 79451               // 'catch' 'index'\n       && lk != 81499               // 'catch' 'insert'\n       && lk != 82523               // 'catch' 'integrity'\n       && lk != 83547               // 'catch' 'into'\n       && lk != 84571               // 'catch' 'item'\n       && lk != 85083               // 'catch' 'json'\n       && lk != 85595               // 'catch' 'json-item'\n       && lk != 87131               // 'catch' 'last'\n       && lk != 87643               // 'catch' 'lax'\n       && lk != 89179               // 'catch' 'let'\n       && lk != 90203               // 'catch' 'loop'\n       && lk != 92763               // 'catch' 'modify'\n       && lk != 93275               // 'catch' 'module'\n       && lk != 94299               // 'catch' 'namespace'\n       && lk != 94811               // 'catch' 'namespace-node'\n       && lk != 97883               // 'catch' 'node'\n       && lk != 98395               // 'catch' 'nodes'\n       && lk != 99419               // 'catch' 'object'\n       && lk != 101467              // 'catch' 'only'\n       && lk != 101979              // 'catch' 'option'\n       && lk != 103003              // 'catch' 'order'\n       && lk != 103515              // 'catch' 'ordered'\n       && lk != 104027              // 'catch' 'ordering'\n       && lk != 105563              // 'catch' 'parent'\n       && lk != 108635              // 'catch' 'preceding'\n       && lk != 109147              // 'catch' 'preceding-sibling'\n       && lk != 110683              // 'catch' 'processing-instruction'\n       && lk != 111707              // 'catch' 'rename'\n       && lk != 112219              // 'catch' 'replace'\n       && lk != 112731              // 'catch' 'return'\n       && lk != 113243              // 'catch' 'returning'\n       && lk != 113755              // 'catch' 'revalidation'\n       && lk != 114779              // 'catch' 'satisfies'\n       && lk != 115291              // 'catch' 'schema'\n       && lk != 115803              // 'catch' 'schema-attribute'\n       && lk != 116315              // 'catch' 'schema-element'\n       && lk != 116827              // 'catch' 'score'\n       && lk != 117339              // 'catch' 'self'\n       && lk != 119899              // 'catch' 'sliding'\n       && lk != 120411              // 'catch' 'some'\n       && lk != 120923              // 'catch' 'stable'\n       && lk != 121435              // 'catch' 'start'\n       && lk != 122971              // 'catch' 'strict'\n       && lk != 123995              // 'catch' 'structured-item'\n       && lk != 124507              // 'catch' 'switch'\n       && lk != 125019              // 'catch' 'text'\n       && lk != 128091              // 'catch' 'try'\n       && lk != 128603              // 'catch' 'tumbling'\n       && lk != 129115              // 'catch' 'type'\n       && lk != 129627              // 'catch' 'typeswitch'\n       && lk != 131163              // 'catch' 'unordered'\n       && lk != 131675              // 'catch' 'updating'\n       && lk != 133211              // 'catch' 'validate'\n       && lk != 133723              // 'catch' 'value'\n       && lk != 134235              // 'catch' 'variable'\n       && lk != 134747              // 'catch' 'version'\n       && lk != 136283              // 'catch' 'where'\n       && lk != 136795              // 'catch' 'while'\n       && lk != 138331              // 'catch' 'with'\n       && lk != 140379)             // 'catch' 'xquery'\n      {\n        break;\n      }\n    }\n    eventHandler.endNonterminal(\"TryCatchStatement\", e0);\n  }\n\n  function try_TryCatchStatement()\n  {\n    shiftT(250);                    // 'try'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockStatement();\n    lookahead1W(36);                // S^WS | '(:' | 'catch'\n    shiftT(91);                     // 'catch'\n    lookahead1W(256);               // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_CatchErrorList();\n    try_BlockStatement();\n    for (;;)\n    {\n      lookahead1W(277);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      switch (l1)\n      {\n      case 91:                      // 'catch'\n        lookahead2W(278);           // Wildcard | EQName^Token | S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | '*' |\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 38491               // 'catch' 'and'\n       || lk == 45659               // 'catch' 'cast'\n       || lk == 46171               // 'catch' 'castable'\n       || lk == 60507               // 'catch' 'div'\n       || lk == 65627               // 'catch' 'eq'\n       || lk == 67163               // 'catch' 'except'\n       || lk == 74843               // 'catch' 'ge'\n       || lk == 76891               // 'catch' 'gt'\n       || lk == 77403               // 'catch' 'idiv'\n       || lk == 82011               // 'catch' 'instance'\n       || lk == 83035               // 'catch' 'intersect'\n       || lk == 84059               // 'catch' 'is'\n       || lk == 88155               // 'catch' 'le'\n       || lk == 91227               // 'catch' 'lt'\n       || lk == 92251               // 'catch' 'mod'\n       || lk == 95323               // 'catch' 'ne'\n       || lk == 102491              // 'catch' 'or'\n       || lk == 127067              // 'catch' 'to'\n       || lk == 127579              // 'catch' 'treat'\n       || lk == 130139)             // 'catch' 'union'\n      {\n        lk = memoized(8, e0);\n        if (lk == 0)\n        {\n          var b0A = b0; var e0A = e0; var l1A = l1;\n          var b1A = b1; var e1A = e1; var l2A = l2;\n          var b2A = b2; var e2A = e2;\n          try\n          {\n            lookahead1W(36);        // S^WS | '(:' | 'catch'\n            shiftT(91);             // 'catch'\n            lookahead1W(256);       // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n            try_CatchErrorList();\n            try_BlockStatement();\n            memoize(8, e0A, -1);\n            continue;\n          }\n          catch (p1A)\n          {\n            b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n            b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n            b2 = b2A; e2 = e2A; end = e2A; }}\n            memoize(8, e0A, -2);\n            break;\n          }\n        }\n      }\n      if (lk != -1\n       && lk != 2651                // 'catch' Wildcard\n       && lk != 3163                // 'catch' EQName^Token\n       && lk != 35931               // 'catch' 'after'\n       && lk != 36955               // 'catch' 'allowing'\n       && lk != 37467               // 'catch' 'ancestor'\n       && lk != 37979               // 'catch' 'ancestor-or-self'\n       && lk != 39515               // 'catch' 'append'\n       && lk != 40027               // 'catch' 'array'\n       && lk != 40539               // 'catch' 'as'\n       && lk != 41051               // 'catch' 'ascending'\n       && lk != 41563               // 'catch' 'at'\n       && lk != 42075               // 'catch' 'attribute'\n       && lk != 42587               // 'catch' 'base-uri'\n       && lk != 43099               // 'catch' 'before'\n       && lk != 43611               // 'catch' 'boundary-space'\n       && lk != 44123               // 'catch' 'break'\n       && lk != 45147               // 'catch' 'case'\n       && lk != 46683               // 'catch' 'catch'\n       && lk != 47707               // 'catch' 'child'\n       && lk != 48219               // 'catch' 'collation'\n       && lk != 49243               // 'catch' 'comment'\n       && lk != 49755               // 'catch' 'constraint'\n       && lk != 50267               // 'catch' 'construction'\n       && lk != 51803               // 'catch' 'context'\n       && lk != 52315               // 'catch' 'continue'\n       && lk != 52827               // 'catch' 'copy'\n       && lk != 53339               // 'catch' 'copy-namespaces'\n       && lk != 53851               // 'catch' 'count'\n       && lk != 54363               // 'catch' 'decimal-format'\n       && lk != 55387               // 'catch' 'declare'\n       && lk != 55899               // 'catch' 'default'\n       && lk != 56411               // 'catch' 'delete'\n       && lk != 56923               // 'catch' 'descendant'\n       && lk != 57435               // 'catch' 'descendant-or-self'\n       && lk != 57947               // 'catch' 'descending'\n       && lk != 61019               // 'catch' 'document'\n       && lk != 61531               // 'catch' 'document-node'\n       && lk != 62043               // 'catch' 'element'\n       && lk != 62555               // 'catch' 'else'\n       && lk != 63067               // 'catch' 'empty'\n       && lk != 63579               // 'catch' 'empty-sequence'\n       && lk != 64091               // 'catch' 'encoding'\n       && lk != 64603               // 'catch' 'end'\n       && lk != 66139               // 'catch' 'every'\n       && lk != 67675               // 'catch' 'exit'\n       && lk != 68187               // 'catch' 'external'\n       && lk != 68699               // 'catch' 'first'\n       && lk != 69211               // 'catch' 'following'\n       && lk != 69723               // 'catch' 'following-sibling'\n       && lk != 70235               // 'catch' 'for'\n       && lk != 72283               // 'catch' 'ft-option'\n       && lk != 74331               // 'catch' 'function'\n       && lk != 75867               // 'catch' 'group'\n       && lk != 77915               // 'catch' 'if'\n       && lk != 78427               // 'catch' 'import'\n       && lk != 78939               // 'catch' 'in'\n       && lk != 79451               // 'catch' 'index'\n       && lk != 81499               // 'catch' 'insert'\n       && lk != 82523               // 'catch' 'integrity'\n       && lk != 83547               // 'catch' 'into'\n       && lk != 84571               // 'catch' 'item'\n       && lk != 85083               // 'catch' 'json'\n       && lk != 85595               // 'catch' 'json-item'\n       && lk != 87131               // 'catch' 'last'\n       && lk != 87643               // 'catch' 'lax'\n       && lk != 89179               // 'catch' 'let'\n       && lk != 90203               // 'catch' 'loop'\n       && lk != 92763               // 'catch' 'modify'\n       && lk != 93275               // 'catch' 'module'\n       && lk != 94299               // 'catch' 'namespace'\n       && lk != 94811               // 'catch' 'namespace-node'\n       && lk != 97883               // 'catch' 'node'\n       && lk != 98395               // 'catch' 'nodes'\n       && lk != 99419               // 'catch' 'object'\n       && lk != 101467              // 'catch' 'only'\n       && lk != 101979              // 'catch' 'option'\n       && lk != 103003              // 'catch' 'order'\n       && lk != 103515              // 'catch' 'ordered'\n       && lk != 104027              // 'catch' 'ordering'\n       && lk != 105563              // 'catch' 'parent'\n       && lk != 108635              // 'catch' 'preceding'\n       && lk != 109147              // 'catch' 'preceding-sibling'\n       && lk != 110683              // 'catch' 'processing-instruction'\n       && lk != 111707              // 'catch' 'rename'\n       && lk != 112219              // 'catch' 'replace'\n       && lk != 112731              // 'catch' 'return'\n       && lk != 113243              // 'catch' 'returning'\n       && lk != 113755              // 'catch' 'revalidation'\n       && lk != 114779              // 'catch' 'satisfies'\n       && lk != 115291              // 'catch' 'schema'\n       && lk != 115803              // 'catch' 'schema-attribute'\n       && lk != 116315              // 'catch' 'schema-element'\n       && lk != 116827              // 'catch' 'score'\n       && lk != 117339              // 'catch' 'self'\n       && lk != 119899              // 'catch' 'sliding'\n       && lk != 120411              // 'catch' 'some'\n       && lk != 120923              // 'catch' 'stable'\n       && lk != 121435              // 'catch' 'start'\n       && lk != 122971              // 'catch' 'strict'\n       && lk != 123995              // 'catch' 'structured-item'\n       && lk != 124507              // 'catch' 'switch'\n       && lk != 125019              // 'catch' 'text'\n       && lk != 128091              // 'catch' 'try'\n       && lk != 128603              // 'catch' 'tumbling'\n       && lk != 129115              // 'catch' 'type'\n       && lk != 129627              // 'catch' 'typeswitch'\n       && lk != 131163              // 'catch' 'unordered'\n       && lk != 131675              // 'catch' 'updating'\n       && lk != 133211              // 'catch' 'validate'\n       && lk != 133723              // 'catch' 'value'\n       && lk != 134235              // 'catch' 'variable'\n       && lk != 134747              // 'catch' 'version'\n       && lk != 136283              // 'catch' 'where'\n       && lk != 136795              // 'catch' 'while'\n       && lk != 138331              // 'catch' 'with'\n       && lk != 140379)             // 'catch' 'xquery'\n      {\n        break;\n      }\n      lookahead1W(36);              // S^WS | '(:' | 'catch'\n      shiftT(91);                   // 'catch'\n      lookahead1W(256);             // Wildcard | EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_CatchErrorList();\n      try_BlockStatement();\n    }\n  }\n\n  function parse_TypeswitchStatement()\n  {\n    eventHandler.startNonterminal(\"TypeswitchStatement\", e0);\n    shift(253);                     // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      whitespace();\n      parse_CaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shift(109);                     // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"TypeswitchStatement\", e0);\n  }\n\n  function try_TypeswitchStatement()\n  {\n    shiftT(253);                    // 'typeswitch'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    for (;;)\n    {\n      lookahead1W(35);              // S^WS | '(:' | 'case'\n      try_CaseStatement();\n      lookahead1W(113);             // S^WS | '(:' | 'case' | 'default'\n      if (l1 != 88)                 // 'case'\n      {\n        break;\n      }\n    }\n    shiftT(109);                    // 'default'\n    lookahead1W(95);                // S^WS | '$' | '(:' | 'return'\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n    }\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_CaseStatement()\n  {\n    eventHandler.startNonterminal(\"CaseStatement\", e0);\n    shift(88);                      // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shift(79);                    // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shift(220);                     // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"CaseStatement\", e0);\n  }\n\n  function try_CaseStatement()\n  {\n    shiftT(88);                     // 'case'\n    lookahead1W(261);               // EQName^Token | S^WS | '$' | '%' | '(' | '(:' | 'after' | 'allowing' |\n    if (l1 == 31)                   // '$'\n    {\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(30);              // S^WS | '(:' | 'as'\n      shiftT(79);                   // 'as'\n    }\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_SequenceType();\n    lookahead1W(70);                // S^WS | '(:' | 'return'\n    shiftT(220);                    // 'return'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_VarDeclStatement()\n  {\n    eventHandler.startNonterminal(\"VarDeclStatement\", e0);\n    for (;;)\n    {\n      lookahead1W(98);              // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      whitespace();\n      parse_Annotation();\n    }\n    shift(262);                     // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shift(31);                      // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_VarName();\n    lookahead1W(157);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_TypeDeclaration();\n    }\n    lookahead1W(145);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 52)                   // ':='\n    {\n      shift(52);                    // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shift(31);                    // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      whitespace();\n      parse_VarName();\n      lookahead1W(157);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        whitespace();\n        parse_TypeDeclaration();\n      }\n      lookahead1W(145);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shift(52);                  // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n    }\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"VarDeclStatement\", e0);\n  }\n\n  function try_VarDeclStatement()\n  {\n    for (;;)\n    {\n      lookahead1W(98);              // S^WS | '%' | '(:' | 'variable'\n      if (l1 != 32)                 // '%'\n      {\n        break;\n      }\n      try_Annotation();\n    }\n    shiftT(262);                    // 'variable'\n    lookahead1W(21);                // S^WS | '$' | '(:'\n    shiftT(31);                     // '$'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    try_VarName();\n    lookahead1W(157);               // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n    if (l1 == 79)                   // 'as'\n    {\n      try_TypeDeclaration();\n    }\n    lookahead1W(145);               // S^WS | '(:' | ',' | ':=' | ';'\n    if (l1 == 52)                   // ':='\n    {\n      shiftT(52);                   // ':='\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n    }\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(21);              // S^WS | '$' | '(:'\n      shiftT(31);                   // '$'\n      lookahead1W(254);             // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n      try_VarName();\n      lookahead1W(157);             // S^WS | '(:' | ',' | ':=' | ';' | 'as'\n      if (l1 == 79)                 // 'as'\n      {\n        try_TypeDeclaration();\n      }\n      lookahead1W(145);             // S^WS | '(:' | ',' | ':=' | ';'\n      if (l1 == 52)                 // ':='\n      {\n        shiftT(52);                 // ':='\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n      }\n    }\n    shiftT(53);                     // ';'\n  }\n\n  function parse_WhileStatement()\n  {\n    eventHandler.startNonterminal(\"WhileStatement\", e0);\n    shift(267);                     // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Expr();\n    shift(37);                      // ')'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_Statement();\n    eventHandler.endNonterminal(\"WhileStatement\", e0);\n  }\n\n  function try_WhileStatement()\n  {\n    shiftT(267);                    // 'while'\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shiftT(34);                     // '('\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Expr();\n    shiftT(37);                     // ')'\n    lookahead1W(269);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_Statement();\n  }\n\n  function parse_VoidStatement()\n  {\n    eventHandler.startNonterminal(\"VoidStatement\", e0);\n    shift(53);                      // ';'\n    eventHandler.endNonterminal(\"VoidStatement\", e0);\n  }\n\n  function try_VoidStatement()\n  {\n    shiftT(53);                     // ';'\n  }\n\n  function parse_ExprSingle()\n  {\n    eventHandler.startNonterminal(\"ExprSingle\", e0);\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    case 174:                       // 'let'\n      lookahead2W(232);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    case 250:                       // 'try'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(228);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      parse_FLWORExpr();\n      break;\n    case 17560:                     // 'if' '('\n      parse_IfExpr();\n      break;\n    case 17651:                     // 'switch' '('\n      parse_SwitchExpr();\n      break;\n    case 141562:                    // 'try' '{'\n      parse_TryCatchExpr();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      parse_TypeswitchExpr();\n      break;\n    default:\n      parse_ExprSimple();\n    }\n    eventHandler.endNonterminal(\"ExprSingle\", e0);\n  }\n\n  function try_ExprSingle()\n  {\n    switch (l1)\n    {\n    case 137:                       // 'for'\n      lookahead2W(235);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    case 174:                       // 'let'\n      lookahead2W(232);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    case 250:                       // 'try'\n      lookahead2W(231);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 152:                       // 'if'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n      lookahead2W(228);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    default:\n      lk = l1;\n    }\n    switch (lk)\n    {\n    case 16009:                     // 'for' '$'\n    case 16046:                     // 'let' '$'\n    case 116910:                    // 'let' 'score'\n    case 119945:                    // 'for' 'sliding'\n    case 128649:                    // 'for' 'tumbling'\n      try_FLWORExpr();\n      break;\n    case 17560:                     // 'if' '('\n      try_IfExpr();\n      break;\n    case 17651:                     // 'switch' '('\n      try_SwitchExpr();\n      break;\n    case 141562:                    // 'try' '{'\n      try_TryCatchExpr();\n      break;\n    case 17661:                     // 'typeswitch' '('\n      try_TypeswitchExpr();\n      break;\n    default:\n      try_ExprSimple();\n    }\n  }\n\n  function parse_ExprSimple()\n  {\n    eventHandler.startNonterminal(\"ExprSimple\", e0);\n    switch (l1)\n    {\n    case 77:                        // 'append'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 218:                       // 'rename'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 219:                       // 'replace'\n      lookahead2W(234);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 110:                       // 'delete'\n    case 159:                       // 'insert'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 103:                       // 'copy'\n    case 129:                       // 'every'\n    case 235:                       // 'some'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 133851)               // 'replace' 'value'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ReplaceExpr();\n          lk = -6;\n        }\n        catch (p6A)\n        {\n          lk = -11;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(9, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 16001:                     // 'every' '$'\n    case 16107:                     // 'some' '$'\n      parse_QuantifiedExpr();\n      break;\n    case 97951:                     // 'insert' 'node'\n    case 98463:                     // 'insert' 'nodes'\n      parse_InsertExpr();\n      break;\n    case 97902:                     // 'delete' 'node'\n    case 98414:                     // 'delete' 'nodes'\n      parse_DeleteExpr();\n      break;\n    case 98010:                     // 'rename' 'node'\n      parse_RenameExpr();\n      break;\n    case -6:\n    case 98011:                     // 'replace' 'node'\n      parse_ReplaceExpr();\n      break;\n    case 15975:                     // 'copy' '$'\n      parse_TransformExpr();\n      break;\n    case 85102:                     // 'delete' 'json'\n      parse_JSONDeleteExpr();\n      break;\n    case 85151:                     // 'insert' 'json'\n      parse_JSONInsertExpr();\n      break;\n    case 85210:                     // 'rename' 'json'\n      parse_JSONRenameExpr();\n      break;\n    case -11:\n      parse_JSONReplaceExpr();\n      break;\n    case 85069:                     // 'append' 'json'\n      parse_JSONAppendExpr();\n      break;\n    default:\n      parse_OrExpr();\n    }\n    eventHandler.endNonterminal(\"ExprSimple\", e0);\n  }\n\n  function try_ExprSimple()\n  {\n    switch (l1)\n    {\n    case 77:                        // 'append'\n      lookahead2W(230);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 218:                       // 'rename'\n      lookahead2W(233);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 219:                       // 'replace'\n      lookahead2W(234);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 110:                       // 'delete'\n    case 159:                       // 'insert'\n      lookahead2W(236);             // S^WS | EOF | '!' | '!=' | '#' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' | '/' |\n      break;\n    case 103:                       // 'copy'\n    case 129:                       // 'every'\n    case 235:                       // 'some'\n      lookahead2W(229);             // S^WS | EOF | '!' | '!=' | '#' | '$' | '(' | '(:' | ')' | '*' | '+' | ',' | '-' |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 133851)               // 'replace' 'value'\n    {\n      lk = memoized(9, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_ReplaceExpr();\n          memoize(9, e0A, -6);\n          lk = -13;\n        }\n        catch (p6A)\n        {\n          lk = -11;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(9, e0A, -11);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 16001:                     // 'every' '$'\n    case 16107:                     // 'some' '$'\n      try_QuantifiedExpr();\n      break;\n    case 97951:                     // 'insert' 'node'\n    case 98463:                     // 'insert' 'nodes'\n      try_InsertExpr();\n      break;\n    case 97902:                     // 'delete' 'node'\n    case 98414:                     // 'delete' 'nodes'\n      try_DeleteExpr();\n      break;\n    case 98010:                     // 'rename' 'node'\n      try_RenameExpr();\n      break;\n    case -6:\n    case 98011:                     // 'replace' 'node'\n      try_ReplaceExpr();\n      break;\n    case 15975:                     // 'copy' '$'\n      try_TransformExpr();\n      break;\n    case 85102:                     // 'delete' 'json'\n      try_JSONDeleteExpr();\n      break;\n    case 85151:                     // 'insert' 'json'\n      try_JSONInsertExpr();\n      break;\n    case 85210:                     // 'rename' 'json'\n      try_JSONRenameExpr();\n      break;\n    case -11:\n      try_JSONReplaceExpr();\n      break;\n    case 85069:                     // 'append' 'json'\n      try_JSONAppendExpr();\n      break;\n    case -13:\n      break;\n    default:\n      try_OrExpr();\n    }\n  }\n\n  function parse_JSONDeleteExpr()\n  {\n    eventHandler.startNonterminal(\"JSONDeleteExpr\", e0);\n    shift(110);                     // 'delete'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    eventHandler.endNonterminal(\"JSONDeleteExpr\", e0);\n  }\n\n  function try_JSONDeleteExpr()\n  {\n    shiftT(110);                    // 'delete'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n  }\n\n  function parse_JSONInsertExpr()\n  {\n    eventHandler.startNonterminal(\"JSONInsertExpr\", e0);\n    switch (l1)\n    {\n    case 159:                       // 'insert'\n      lookahead2W(56);              // S^WS | '(:' | 'json'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(10, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        shiftT(159);                // 'insert'\n        lookahead1W(56);            // S^WS | '(:' | 'json'\n        shiftT(166);                // 'json'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n        shiftT(163);                // 'into'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          lookahead2W(69);          // S^WS | '(:' | 'position'\n          break;\n        default:\n          lk = l1;\n        }\n        if (lk == 108113)           // 'at' 'position'\n        {\n          lk = memoized(11, e0);\n          if (lk == 0)\n          {\n            var b0B = b0; var e0B = e0; var l1B = l1;\n            var b1B = b1; var e1B = e1; var l2B = l2;\n            var b2B = b2; var e2B = e2;\n            try\n            {\n              shiftT(81);           // 'at'\n              lookahead1W(69);      // S^WS | '(:' | 'position'\n              shiftT(211);          // 'position'\n              lookahead1W(266);     // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n              try_ExprSingle();\n              memoize(11, e0B, -1);\n            }\n            catch (p1B)\n            {\n              b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n              b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n              b2 = b2B; e2 = e2B; end = e2B; }}\n              memoize(11, e0B, -2);\n            }\n            lk = -2;\n          }\n        }\n        if (lk == -1)\n        {\n          shiftT(81);               // 'at'\n          lookahead1W(69);          // S^WS | '(:' | 'position'\n          shiftT(211);              // 'position'\n          lookahead1W(266);         // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n          try_ExprSingle();\n        }\n        lk = -1;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n      }\n      b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n      b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n      b2 = b2A; e2 = e2A; end = e2A; }}\n      memoize(10, e0, lk);\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(159);                   // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shift(166);                   // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n      shift(163);                   // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(69);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 108113)             // 'at' 'position'\n      {\n        lk = memoized(11, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(81);             // 'at'\n            lookahead1W(69);        // S^WS | '(:' | 'position'\n            shiftT(211);            // 'position'\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_ExprSingle();\n            lk = -1;\n          }\n          catch (p1B)\n          {\n            lk = -2;\n          }\n          b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n          b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n          b2 = b2B; e2 = e2B; end = e2B; }}\n          memoize(11, e0, lk);\n        }\n      }\n      if (lk == -1)\n      {\n        shift(81);                  // 'at'\n        lookahead1W(69);            // S^WS | '(:' | 'position'\n        shift(211);                 // 'position'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        whitespace();\n        parse_ExprSingle();\n      }\n      break;\n    default:\n      shift(159);                   // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shift(166);                   // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_PairConstructorList();\n      shift(163);                   // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_ExprSingle();\n    }\n    eventHandler.endNonterminal(\"JSONInsertExpr\", e0);\n  }\n\n  function try_JSONInsertExpr()\n  {\n    switch (l1)\n    {\n    case 159:                       // 'insert'\n      lookahead2W(56);              // S^WS | '(:' | 'json'\n      break;\n    default:\n      lk = l1;\n    }\n    lk = memoized(10, e0);\n    if (lk == 0)\n    {\n      var b0A = b0; var e0A = e0; var l1A = l1;\n      var b1A = b1; var e1A = e1; var l2A = l2;\n      var b2A = b2; var e2A = e2;\n      try\n      {\n        shiftT(159);                // 'insert'\n        lookahead1W(56);            // S^WS | '(:' | 'json'\n        shiftT(166);                // 'json'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n        shiftT(163);                // 'into'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n        switch (l1)\n        {\n        case 81:                    // 'at'\n          lookahead2W(69);          // S^WS | '(:' | 'position'\n          break;\n        default:\n          lk = l1;\n        }\n        if (lk == 108113)           // 'at' 'position'\n        {\n          lk = memoized(11, e0);\n          if (lk == 0)\n          {\n            var b0B = b0; var e0B = e0; var l1B = l1;\n            var b1B = b1; var e1B = e1; var l2B = l2;\n            var b2B = b2; var e2B = e2;\n            try\n            {\n              shiftT(81);           // 'at'\n              lookahead1W(69);      // S^WS | '(:' | 'position'\n              shiftT(211);          // 'position'\n              lookahead1W(266);     // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n              try_ExprSingle();\n              memoize(11, e0B, -1);\n            }\n            catch (p1B)\n            {\n              b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n              b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n              b2 = b2B; e2 = e2B; end = e2B; }}\n              memoize(11, e0B, -2);\n            }\n            lk = -2;\n          }\n        }\n        if (lk == -1)\n        {\n          shiftT(81);               // 'at'\n          lookahead1W(69);          // S^WS | '(:' | 'position'\n          shiftT(211);              // 'position'\n          lookahead1W(266);         // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n          try_ExprSingle();\n        }\n        memoize(10, e0A, -1);\n        lk = -3;\n      }\n      catch (p1A)\n      {\n        lk = -2;\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(10, e0A, -2);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(159);                  // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shiftT(166);                  // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n      shiftT(163);                  // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n      switch (l1)\n      {\n      case 81:                      // 'at'\n        lookahead2W(69);            // S^WS | '(:' | 'position'\n        break;\n      default:\n        lk = l1;\n      }\n      if (lk == 108113)             // 'at' 'position'\n      {\n        lk = memoized(11, e0);\n        if (lk == 0)\n        {\n          var b0B = b0; var e0B = e0; var l1B = l1;\n          var b1B = b1; var e1B = e1; var l2B = l2;\n          var b2B = b2; var e2B = e2;\n          try\n          {\n            shiftT(81);             // 'at'\n            lookahead1W(69);        // S^WS | '(:' | 'position'\n            shiftT(211);            // 'position'\n            lookahead1W(266);       // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n            try_ExprSingle();\n            memoize(11, e0B, -1);\n          }\n          catch (p1B)\n          {\n            b0 = b0B; e0 = e0B; l1 = l1B; if (l1 == 0) {end = e0B;} else {\n            b1 = b1B; e1 = e1B; l2 = l2B; if (l2 == 0) {end = e1B;} else {\n            b2 = b2B; e2 = e2B; end = e2B; }}\n            memoize(11, e0B, -2);\n          }\n          lk = -2;\n        }\n      }\n      if (lk == -1)\n      {\n        shiftT(81);                 // 'at'\n        lookahead1W(69);            // S^WS | '(:' | 'position'\n        shiftT(211);                // 'position'\n        lookahead1W(266);           // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n        try_ExprSingle();\n      }\n      break;\n    case -3:\n      break;\n    default:\n      shiftT(159);                  // 'insert'\n      lookahead1W(56);              // S^WS | '(:' | 'json'\n      shiftT(166);                  // 'json'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_PairConstructorList();\n      shiftT(163);                  // 'into'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_ExprSingle();\n    }\n  }\n\n  function parse_JSONRenameExpr()\n  {\n    eventHandler.startNonterminal(\"JSONRenameExpr\", e0);\n    shift(218);                     // 'rename'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    shift(79);                      // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONRenameExpr\", e0);\n  }\n\n  function try_JSONRenameExpr()\n  {\n    shiftT(218);                    // 'rename'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n    shiftT(79);                     // 'as'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_JSONReplaceExpr()\n  {\n    eventHandler.startNonterminal(\"JSONReplaceExpr\", e0);\n    shift(219);                     // 'replace'\n    lookahead1W(82);                // S^WS | '(:' | 'value'\n    shift(261);                     // 'value'\n    lookahead1W(64);                // S^WS | '(:' | 'of'\n    shift(196);                     // 'of'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    whitespace();\n    parse_PostfixExpr();\n    shift(270);                     // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONReplaceExpr\", e0);\n  }\n\n  function try_JSONReplaceExpr()\n  {\n    shiftT(219);                    // 'replace'\n    lookahead1W(82);                // S^WS | '(:' | 'value'\n    shiftT(261);                    // 'value'\n    lookahead1W(64);                // S^WS | '(:' | 'of'\n    shiftT(196);                    // 'of'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(263);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |\n    try_PostfixExpr();\n    shiftT(270);                    // 'with'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_JSONAppendExpr()\n  {\n    eventHandler.startNonterminal(\"JSONAppendExpr\", e0);\n    shift(77);                      // 'append'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shift(166);                     // 'json'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    shift(163);                     // 'into'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"JSONAppendExpr\", e0);\n  }\n\n  function try_JSONAppendExpr()\n  {\n    shiftT(77);                     // 'append'\n    lookahead1W(56);                // S^WS | '(:' | 'json'\n    shiftT(166);                    // 'json'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n    shiftT(163);                    // 'into'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_CommonContent()\n  {\n    eventHandler.startNonterminal(\"CommonContent\", e0);\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shift(12);                    // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shift(23);                    // CharRef\n      break;\n    case 277:                       // '{{'\n      shift(277);                   // '{{'\n      break;\n    case 283:                       // '}}'\n      shift(283);                   // '}}'\n      break;\n    default:\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CommonContent\", e0);\n  }\n\n  function try_CommonContent()\n  {\n    switch (l1)\n    {\n    case 12:                        // PredefinedEntityRef\n      shiftT(12);                   // PredefinedEntityRef\n      break;\n    case 23:                        // CharRef\n      shiftT(23);                   // CharRef\n      break;\n    case 277:                       // '{{'\n      shiftT(277);                  // '{{'\n      break;\n    case 283:                       // '}}'\n      shiftT(283);                  // '}}'\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_ContentExpr()\n  {\n    eventHandler.startNonterminal(\"ContentExpr\", e0);\n    parse_StatementsAndExpr();\n    eventHandler.endNonterminal(\"ContentExpr\", e0);\n  }\n\n  function try_ContentExpr()\n  {\n    try_StatementsAndExpr();\n  }\n\n  function parse_CompDocConstructor()\n  {\n    eventHandler.startNonterminal(\"CompDocConstructor\", e0);\n    shift(119);                     // 'document'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompDocConstructor\", e0);\n  }\n\n  function try_CompDocConstructor()\n  {\n    shiftT(119);                    // 'document'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompAttrConstructor()\n  {\n    eventHandler.startNonterminal(\"CompAttrConstructor\", e0);\n    shift(82);                      // 'attribute'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(12, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(276);                   // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompAttrConstructor\", e0);\n  }\n\n  function try_CompAttrConstructor()\n  {\n    shiftT(82);                     // 'attribute'\n    lookahead1W(257);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_Expr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_EQName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(12, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          memoize(12, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(12, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(276);                  // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shiftT(282);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompPIConstructor()\n  {\n    eventHandler.startNonterminal(\"CompPIConstructor\", e0);\n    shift(216);                     // 'processing-instruction'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_Expr();\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_NCName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(13, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          lk = -1;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(13, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shift(276);                   // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shift(282);                   // '}'\n      break;\n    default:\n      whitespace();\n      parse_BlockExpr();\n    }\n    eventHandler.endNonterminal(\"CompPIConstructor\", e0);\n  }\n\n  function try_CompPIConstructor()\n  {\n    shiftT(216);                    // 'processing-instruction'\n    lookahead1W(250);               // NCName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shiftT(276);                  // '{'\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_Expr();\n      shiftT(282);                  // '}'\n      break;\n    default:\n      try_NCName();\n    }\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 144660)               // '{' '}'\n    {\n      lk = memoized(13, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          shiftT(276);              // '{'\n          lookahead1W(88);          // S^WS | '(:' | '}'\n          shiftT(282);              // '}'\n          memoize(13, e0A, -1);\n          lk = -3;\n        }\n        catch (p1A)\n        {\n          lk = -2;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(13, e0A, -2);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case -1:\n      shiftT(276);                  // '{'\n      lookahead1W(88);              // S^WS | '(:' | '}'\n      shiftT(282);                  // '}'\n      break;\n    case -3:\n      break;\n    default:\n      try_BlockExpr();\n    }\n  }\n\n  function parse_CompCommentConstructor()\n  {\n    eventHandler.startNonterminal(\"CompCommentConstructor\", e0);\n    shift(96);                      // 'comment'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompCommentConstructor\", e0);\n  }\n\n  function try_CompCommentConstructor()\n  {\n    shiftT(96);                     // 'comment'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_CompTextConstructor()\n  {\n    eventHandler.startNonterminal(\"CompTextConstructor\", e0);\n    shift(244);                     // 'text'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    whitespace();\n    parse_BlockExpr();\n    eventHandler.endNonterminal(\"CompTextConstructor\", e0);\n  }\n\n  function try_CompTextConstructor()\n  {\n    shiftT(244);                    // 'text'\n    lookahead1W(87);                // S^WS | '(:' | '{'\n    try_BlockExpr();\n  }\n\n  function parse_PrimaryExpr()\n  {\n    eventHandler.startNonterminal(\"PrimaryExpr\", e0);\n    switch (l1)\n    {\n    case 184:                       // 'namespace'\n      lookahead2W(255);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 216:                       // 'processing-instruction'\n      lookahead2W(253);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    case 82:                        // 'attribute'\n    case 121:                       // 'element'\n      lookahead2W(258);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 96:                        // 'comment'\n    case 244:                       // 'text'\n      lookahead2W(93);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 256:                       // 'unordered'\n      lookahead2W(139);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 93:                        // 'child'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 186:                       // 'ne'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 228:                       // 'score'\n    case 229:                       // 'self'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 36116                 // '{' 'after'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39700                 // '{' 'append'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40724                 // '{' 'as'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60692                 // '{' 'div'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74516                 // '{' 'function'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 76052                 // '{' 'group'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78612                 // '{' 'import'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83732                 // '{' 'into'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101652                // '{' 'only'\n     || lk == 102164                // '{' 'option'\n     || lk == 102676                // '{' 'or'\n     || lk == 103188                // '{' 'order'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112916                // '{' 'return'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 117012                // '{' 'score'\n     || lk == 117524                // '{' 'self'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120596                // '{' 'some'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121620                // '{' 'start'\n     || lk == 123156                // '{' 'strict'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124692                // '{' 'switch'\n     || lk == 125204                // '{' 'text'\n     || lk == 127252                // '{' 'to'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128276                // '{' 'try'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129300                // '{' 'type'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130324                // '{' 'union'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133908                // '{' 'value'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134932                // '{' 'version'\n     || lk == 136468                // '{' 'where'\n     || lk == 136980                // '{' 'while'\n     || lk == 138516                // '{' 'with'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(14, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_BlockExpr();\n          lk = -10;\n        }\n        catch (p10A)\n        {\n          lk = -11;\n        }\n        b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n        b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n        b2 = b2A; e2 = e2A; end = e2A; }}\n        memoize(14, e0, lk);\n      }\n    }\n    switch (lk)\n    {\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n      parse_Literal();\n      break;\n    case 31:                        // '$'\n      parse_VarRef();\n      break;\n    case 34:                        // '('\n      parse_ParenthesizedExpr();\n      break;\n    case 44:                        // '.'\n      parse_ContextItemExpr();\n      break;\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n      parse_FunctionCall();\n      break;\n    case 141514:                    // 'ordered' '{'\n      parse_OrderedExpr();\n      break;\n    case 141568:                    // 'unordered' '{'\n      parse_UnorderedExpr();\n      break;\n    case 32:                        // '%'\n    case 78:                        // 'array'\n    case 120:                       // 'document-node'\n    case 124:                       // 'empty-sequence'\n    case 145:                       // 'function'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15014:                     // 'json' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15034:                     // 'ne' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n      parse_FunctionItemExpr();\n      break;\n    case -10:\n    case 27412:                     // '{' ';'\n      parse_BlockExpr();\n      break;\n    case -11:\n      parse_ObjectConstructor();\n      break;\n    case 68:                        // '['\n      parse_ArrayConstructor();\n      break;\n    case 278:                       // '{|'\n      parse_JSONSimpleObjectUnion();\n      break;\n    default:\n      parse_Constructor();\n    }\n    eventHandler.endNonterminal(\"PrimaryExpr\", e0);\n  }\n\n  function try_PrimaryExpr()\n  {\n    switch (l1)\n    {\n    case 184:                       // 'namespace'\n      lookahead2W(255);             // NCName^Token | S^WS | '#' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 216:                       // 'processing-instruction'\n      lookahead2W(253);             // NCName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 276:                       // '{'\n      lookahead2W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      break;\n    case 82:                        // 'attribute'\n    case 121:                       // 'element'\n      lookahead2W(258);             // EQName^Token | S^WS | '#' | '(:' | 'after' | 'allowing' | 'ancestor' |\n      break;\n    case 96:                        // 'comment'\n    case 244:                       // 'text'\n      lookahead2W(93);              // S^WS | '#' | '(:' | '{'\n      break;\n    case 119:                       // 'document'\n    case 202:                       // 'ordered'\n    case 256:                       // 'unordered'\n      lookahead2W(139);             // S^WS | '#' | '(' | '(:' | '{'\n      break;\n    case 6:                         // EQName^Token\n    case 70:                        // 'after'\n    case 72:                        // 'allowing'\n    case 73:                        // 'ancestor'\n    case 74:                        // 'ancestor-or-self'\n    case 75:                        // 'and'\n    case 77:                        // 'append'\n    case 79:                        // 'as'\n    case 80:                        // 'ascending'\n    case 81:                        // 'at'\n    case 83:                        // 'base-uri'\n    case 84:                        // 'before'\n    case 85:                        // 'boundary-space'\n    case 86:                        // 'break'\n    case 88:                        // 'case'\n    case 89:                        // 'cast'\n    case 90:                        // 'castable'\n    case 91:                        // 'catch'\n    case 93:                        // 'child'\n    case 94:                        // 'collation'\n    case 97:                        // 'constraint'\n    case 98:                        // 'construction'\n    case 101:                       // 'context'\n    case 102:                       // 'continue'\n    case 103:                       // 'copy'\n    case 104:                       // 'copy-namespaces'\n    case 105:                       // 'count'\n    case 106:                       // 'decimal-format'\n    case 108:                       // 'declare'\n    case 109:                       // 'default'\n    case 110:                       // 'delete'\n    case 111:                       // 'descendant'\n    case 112:                       // 'descendant-or-self'\n    case 113:                       // 'descending'\n    case 118:                       // 'div'\n    case 122:                       // 'else'\n    case 123:                       // 'empty'\n    case 125:                       // 'encoding'\n    case 126:                       // 'end'\n    case 128:                       // 'eq'\n    case 129:                       // 'every'\n    case 131:                       // 'except'\n    case 132:                       // 'exit'\n    case 133:                       // 'external'\n    case 134:                       // 'first'\n    case 135:                       // 'following'\n    case 136:                       // 'following-sibling'\n    case 137:                       // 'for'\n    case 141:                       // 'ft-option'\n    case 146:                       // 'ge'\n    case 148:                       // 'group'\n    case 150:                       // 'gt'\n    case 151:                       // 'idiv'\n    case 153:                       // 'import'\n    case 154:                       // 'in'\n    case 155:                       // 'index'\n    case 159:                       // 'insert'\n    case 160:                       // 'instance'\n    case 161:                       // 'integrity'\n    case 162:                       // 'intersect'\n    case 163:                       // 'into'\n    case 164:                       // 'is'\n    case 166:                       // 'json'\n    case 170:                       // 'last'\n    case 171:                       // 'lax'\n    case 172:                       // 'le'\n    case 174:                       // 'let'\n    case 176:                       // 'loop'\n    case 178:                       // 'lt'\n    case 180:                       // 'mod'\n    case 181:                       // 'modify'\n    case 182:                       // 'module'\n    case 186:                       // 'ne'\n    case 192:                       // 'nodes'\n    case 194:                       // 'object'\n    case 198:                       // 'only'\n    case 199:                       // 'option'\n    case 200:                       // 'or'\n    case 201:                       // 'order'\n    case 203:                       // 'ordering'\n    case 206:                       // 'parent'\n    case 212:                       // 'preceding'\n    case 213:                       // 'preceding-sibling'\n    case 218:                       // 'rename'\n    case 219:                       // 'replace'\n    case 220:                       // 'return'\n    case 221:                       // 'returning'\n    case 222:                       // 'revalidation'\n    case 224:                       // 'satisfies'\n    case 225:                       // 'schema'\n    case 228:                       // 'score'\n    case 229:                       // 'self'\n    case 234:                       // 'sliding'\n    case 235:                       // 'some'\n    case 236:                       // 'stable'\n    case 237:                       // 'start'\n    case 240:                       // 'strict'\n    case 248:                       // 'to'\n    case 249:                       // 'treat'\n    case 250:                       // 'try'\n    case 251:                       // 'tumbling'\n    case 252:                       // 'type'\n    case 254:                       // 'union'\n    case 257:                       // 'updating'\n    case 260:                       // 'validate'\n    case 261:                       // 'value'\n    case 262:                       // 'variable'\n    case 263:                       // 'version'\n    case 266:                       // 'where'\n    case 267:                       // 'while'\n    case 270:                       // 'with'\n    case 274:                       // 'xquery'\n      lookahead2W(92);              // S^WS | '#' | '(' | '(:'\n      break;\n    default:\n      lk = l1;\n    }\n    if (lk == 2836                  // '{' Wildcard\n     || lk == 3348                  // '{' EQName^Token\n     || lk == 4372                  // '{' IntegerLiteral\n     || lk == 4884                  // '{' DecimalLiteral\n     || lk == 5396                  // '{' DoubleLiteral\n     || lk == 5908                  // '{' StringLiteral\n     || lk == 16148                 // '{' '$'\n     || lk == 16660                 // '{' '%'\n     || lk == 17684                 // '{' '('\n     || lk == 18196                 // '{' '(#'\n     || lk == 20756                 // '{' '+'\n     || lk == 21780                 // '{' '-'\n     || lk == 22804                 // '{' '.'\n     || lk == 23316                 // '{' '..'\n     || lk == 23828                 // '{' '/'\n     || lk == 24340                 // '{' '//'\n     || lk == 27924                 // '{' '<'\n     || lk == 28436                 // '{' '<!--'\n     || lk == 30484                 // '{' '<?'\n     || lk == 34068                 // '{' '@'\n     || lk == 35092                 // '{' '['\n     || lk == 36116                 // '{' 'after'\n     || lk == 37140                 // '{' 'allowing'\n     || lk == 37652                 // '{' 'ancestor'\n     || lk == 38164                 // '{' 'ancestor-or-self'\n     || lk == 38676                 // '{' 'and'\n     || lk == 39700                 // '{' 'append'\n     || lk == 40212                 // '{' 'array'\n     || lk == 40724                 // '{' 'as'\n     || lk == 41236                 // '{' 'ascending'\n     || lk == 41748                 // '{' 'at'\n     || lk == 42260                 // '{' 'attribute'\n     || lk == 42772                 // '{' 'base-uri'\n     || lk == 43284                 // '{' 'before'\n     || lk == 43796                 // '{' 'boundary-space'\n     || lk == 44308                 // '{' 'break'\n     || lk == 45332                 // '{' 'case'\n     || lk == 45844                 // '{' 'cast'\n     || lk == 46356                 // '{' 'castable'\n     || lk == 46868                 // '{' 'catch'\n     || lk == 47892                 // '{' 'child'\n     || lk == 48404                 // '{' 'collation'\n     || lk == 49428                 // '{' 'comment'\n     || lk == 49940                 // '{' 'constraint'\n     || lk == 50452                 // '{' 'construction'\n     || lk == 51988                 // '{' 'context'\n     || lk == 52500                 // '{' 'continue'\n     || lk == 53012                 // '{' 'copy'\n     || lk == 53524                 // '{' 'copy-namespaces'\n     || lk == 54036                 // '{' 'count'\n     || lk == 54548                 // '{' 'decimal-format'\n     || lk == 55572                 // '{' 'declare'\n     || lk == 56084                 // '{' 'default'\n     || lk == 56596                 // '{' 'delete'\n     || lk == 57108                 // '{' 'descendant'\n     || lk == 57620                 // '{' 'descendant-or-self'\n     || lk == 58132                 // '{' 'descending'\n     || lk == 60692                 // '{' 'div'\n     || lk == 61204                 // '{' 'document'\n     || lk == 61716                 // '{' 'document-node'\n     || lk == 62228                 // '{' 'element'\n     || lk == 62740                 // '{' 'else'\n     || lk == 63252                 // '{' 'empty'\n     || lk == 63764                 // '{' 'empty-sequence'\n     || lk == 64276                 // '{' 'encoding'\n     || lk == 64788                 // '{' 'end'\n     || lk == 65812                 // '{' 'eq'\n     || lk == 66324                 // '{' 'every'\n     || lk == 67348                 // '{' 'except'\n     || lk == 67860                 // '{' 'exit'\n     || lk == 68372                 // '{' 'external'\n     || lk == 68884                 // '{' 'first'\n     || lk == 69396                 // '{' 'following'\n     || lk == 69908                 // '{' 'following-sibling'\n     || lk == 70420                 // '{' 'for'\n     || lk == 72468                 // '{' 'ft-option'\n     || lk == 74516                 // '{' 'function'\n     || lk == 75028                 // '{' 'ge'\n     || lk == 76052                 // '{' 'group'\n     || lk == 77076                 // '{' 'gt'\n     || lk == 77588                 // '{' 'idiv'\n     || lk == 78100                 // '{' 'if'\n     || lk == 78612                 // '{' 'import'\n     || lk == 79124                 // '{' 'in'\n     || lk == 79636                 // '{' 'index'\n     || lk == 81684                 // '{' 'insert'\n     || lk == 82196                 // '{' 'instance'\n     || lk == 82708                 // '{' 'integrity'\n     || lk == 83220                 // '{' 'intersect'\n     || lk == 83732                 // '{' 'into'\n     || lk == 84244                 // '{' 'is'\n     || lk == 84756                 // '{' 'item'\n     || lk == 85268                 // '{' 'json'\n     || lk == 85780                 // '{' 'json-item'\n     || lk == 87316                 // '{' 'last'\n     || lk == 87828                 // '{' 'lax'\n     || lk == 88340                 // '{' 'le'\n     || lk == 89364                 // '{' 'let'\n     || lk == 90388                 // '{' 'loop'\n     || lk == 91412                 // '{' 'lt'\n     || lk == 92436                 // '{' 'mod'\n     || lk == 92948                 // '{' 'modify'\n     || lk == 93460                 // '{' 'module'\n     || lk == 94484                 // '{' 'namespace'\n     || lk == 94996                 // '{' 'namespace-node'\n     || lk == 95508                 // '{' 'ne'\n     || lk == 98068                 // '{' 'node'\n     || lk == 98580                 // '{' 'nodes'\n     || lk == 99604                 // '{' 'object'\n     || lk == 101652                // '{' 'only'\n     || lk == 102164                // '{' 'option'\n     || lk == 102676                // '{' 'or'\n     || lk == 103188                // '{' 'order'\n     || lk == 103700                // '{' 'ordered'\n     || lk == 104212                // '{' 'ordering'\n     || lk == 105748                // '{' 'parent'\n     || lk == 108820                // '{' 'preceding'\n     || lk == 109332                // '{' 'preceding-sibling'\n     || lk == 110868                // '{' 'processing-instruction'\n     || lk == 111892                // '{' 'rename'\n     || lk == 112404                // '{' 'replace'\n     || lk == 112916                // '{' 'return'\n     || lk == 113428                // '{' 'returning'\n     || lk == 113940                // '{' 'revalidation'\n     || lk == 114964                // '{' 'satisfies'\n     || lk == 115476                // '{' 'schema'\n     || lk == 115988                // '{' 'schema-attribute'\n     || lk == 116500                // '{' 'schema-element'\n     || lk == 117012                // '{' 'score'\n     || lk == 117524                // '{' 'self'\n     || lk == 120084                // '{' 'sliding'\n     || lk == 120596                // '{' 'some'\n     || lk == 121108                // '{' 'stable'\n     || lk == 121620                // '{' 'start'\n     || lk == 123156                // '{' 'strict'\n     || lk == 124180                // '{' 'structured-item'\n     || lk == 124692                // '{' 'switch'\n     || lk == 125204                // '{' 'text'\n     || lk == 127252                // '{' 'to'\n     || lk == 127764                // '{' 'treat'\n     || lk == 128276                // '{' 'try'\n     || lk == 128788                // '{' 'tumbling'\n     || lk == 129300                // '{' 'type'\n     || lk == 129812                // '{' 'typeswitch'\n     || lk == 130324                // '{' 'union'\n     || lk == 131348                // '{' 'unordered'\n     || lk == 131860                // '{' 'updating'\n     || lk == 133396                // '{' 'validate'\n     || lk == 133908                // '{' 'value'\n     || lk == 134420                // '{' 'variable'\n     || lk == 134932                // '{' 'version'\n     || lk == 136468                // '{' 'where'\n     || lk == 136980                // '{' 'while'\n     || lk == 138516                // '{' 'with'\n     || lk == 140564                // '{' 'xquery'\n     || lk == 141588                // '{' '{'\n     || lk == 142612                // '{' '{|'\n     || lk == 144660)               // '{' '}'\n    {\n      lk = memoized(14, e0);\n      if (lk == 0)\n      {\n        var b0A = b0; var e0A = e0; var l1A = l1;\n        var b1A = b1; var e1A = e1; var l2A = l2;\n        var b2A = b2; var e2A = e2;\n        try\n        {\n          try_BlockExpr();\n          memoize(14, e0A, -10);\n          lk = -14;\n        }\n        catch (p10A)\n        {\n          lk = -11;\n          b0 = b0A; e0 = e0A; l1 = l1A; if (l1 == 0) {end = e0A;} else {\n          b1 = b1A; e1 = e1A; l2 = l2A; if (l2 == 0) {end = e1A;} else {\n          b2 = b2A; e2 = e2A; end = e2A; }}\n          memoize(14, e0A, -11);\n        }\n      }\n    }\n    switch (lk)\n    {\n    case 8:                         // IntegerLiteral\n    case 9:                         // DecimalLiteral\n    case 10:                        // DoubleLiteral\n    case 11:                        // StringLiteral\n      try_Literal();\n      break;\n    case 31:                        // '$'\n      try_VarRef();\n      break;\n    case 34:                        // '('\n      try_ParenthesizedExpr();\n      break;\n    case 44:                        // '.'\n      try_ContextItemExpr();\n      break;\n    case 17414:                     // EQName^Token '('\n    case 17478:                     // 'after' '('\n    case 17480:                     // 'allowing' '('\n    case 17481:                     // 'ancestor' '('\n    case 17482:                     // 'ancestor-or-self' '('\n    case 17483:                     // 'and' '('\n    case 17485:                     // 'append' '('\n    case 17487:                     // 'as' '('\n    case 17488:                     // 'ascending' '('\n    case 17489:                     // 'at' '('\n    case 17491:                     // 'base-uri' '('\n    case 17492:                     // 'before' '('\n    case 17493:                     // 'boundary-space' '('\n    case 17494:                     // 'break' '('\n    case 17496:                     // 'case' '('\n    case 17497:                     // 'cast' '('\n    case 17498:                     // 'castable' '('\n    case 17499:                     // 'catch' '('\n    case 17501:                     // 'child' '('\n    case 17502:                     // 'collation' '('\n    case 17505:                     // 'constraint' '('\n    case 17506:                     // 'construction' '('\n    case 17509:                     // 'context' '('\n    case 17510:                     // 'continue' '('\n    case 17511:                     // 'copy' '('\n    case 17512:                     // 'copy-namespaces' '('\n    case 17513:                     // 'count' '('\n    case 17514:                     // 'decimal-format' '('\n    case 17516:                     // 'declare' '('\n    case 17517:                     // 'default' '('\n    case 17518:                     // 'delete' '('\n    case 17519:                     // 'descendant' '('\n    case 17520:                     // 'descendant-or-self' '('\n    case 17521:                     // 'descending' '('\n    case 17526:                     // 'div' '('\n    case 17527:                     // 'document' '('\n    case 17530:                     // 'else' '('\n    case 17531:                     // 'empty' '('\n    case 17533:                     // 'encoding' '('\n    case 17534:                     // 'end' '('\n    case 17536:                     // 'eq' '('\n    case 17537:                     // 'every' '('\n    case 17539:                     // 'except' '('\n    case 17540:                     // 'exit' '('\n    case 17541:                     // 'external' '('\n    case 17542:                     // 'first' '('\n    case 17543:                     // 'following' '('\n    case 17544:                     // 'following-sibling' '('\n    case 17545:                     // 'for' '('\n    case 17549:                     // 'ft-option' '('\n    case 17554:                     // 'ge' '('\n    case 17556:                     // 'group' '('\n    case 17558:                     // 'gt' '('\n    case 17559:                     // 'idiv' '('\n    case 17561:                     // 'import' '('\n    case 17562:                     // 'in' '('\n    case 17563:                     // 'index' '('\n    case 17567:                     // 'insert' '('\n    case 17568:                     // 'instance' '('\n    case 17569:                     // 'integrity' '('\n    case 17570:                     // 'intersect' '('\n    case 17571:                     // 'into' '('\n    case 17572:                     // 'is' '('\n    case 17574:                     // 'json' '('\n    case 17578:                     // 'last' '('\n    case 17579:                     // 'lax' '('\n    case 17580:                     // 'le' '('\n    case 17582:                     // 'let' '('\n    case 17584:                     // 'loop' '('\n    case 17586:                     // 'lt' '('\n    case 17588:                     // 'mod' '('\n    case 17589:                     // 'modify' '('\n    case 17590:                     // 'module' '('\n    case 17592:                     // 'namespace' '('\n    case 17594:                     // 'ne' '('\n    case 17600:                     // 'nodes' '('\n    case 17602:                     // 'object' '('\n    case 17606:                     // 'only' '('\n    case 17607:                     // 'option' '('\n    case 17608:                     // 'or' '('\n    case 17609:                     // 'order' '('\n    case 17610:                     // 'ordered' '('\n    case 17611:                     // 'ordering' '('\n    case 17614:                     // 'parent' '('\n    case 17620:                     // 'preceding' '('\n    case 17621:                     // 'preceding-sibling' '('\n    case 17626:                     // 'rename' '('\n    case 17627:                     // 'replace' '('\n    case 17628:                     // 'return' '('\n    case 17629:                     // 'returning' '('\n    case 17630:                     // 'revalidation' '('\n    case 17632:                     // 'satisfies' '('\n    case 17633:                     // 'schema' '('\n    case 17636:                     // 'score' '('\n    case 17637:                     // 'self' '('\n    case 17642:                     // 'sliding' '('\n    case 17643:                     // 'some' '('\n    case 17644:                     // 'stable' '('\n    case 17645:                     // 'start' '('\n    case 17648:                     // 'strict' '('\n    case 17656:                     // 'to' '('\n    case 17657:                     // 'treat' '('\n    case 17658:                     // 'try' '('\n    case 17659:                     // 'tumbling' '('\n    case 17660:                     // 'type' '('\n    case 17662:                     // 'union' '('\n    case 17664:                     // 'unordered' '('\n    case 17665:                     // 'updating' '('\n    case 17668:                     // 'validate' '('\n    case 17669:                     // 'value' '('\n    case 17670:                     // 'variable' '('\n    case 17671:                     // 'version' '('\n    case 17674:                     // 'where' '('\n    case 17675:                     // 'while' '('\n    case 17678:                     // 'with' '('\n    case 17682:                     // 'xquery' '('\n      try_FunctionCall();\n      break;\n    case 141514:                    // 'ordered' '{'\n      try_OrderedExpr();\n      break;\n    case 141568:                    // 'unordered' '{'\n      try_UnorderedExpr();\n      break;\n    case 32:                        // '%'\n    case 78:                        // 'array'\n    case 120:                       // 'document-node'\n    case 124:                       // 'empty-sequence'\n    case 145:                       // 'function'\n    case 152:                       // 'if'\n    case 165:                       // 'item'\n    case 167:                       // 'json-item'\n    case 185:                       // 'namespace-node'\n    case 191:                       // 'node'\n    case 226:                       // 'schema-attribute'\n    case 227:                       // 'schema-element'\n    case 242:                       // 'structured-item'\n    case 243:                       // 'switch'\n    case 253:                       // 'typeswitch'\n    case 14854:                     // EQName^Token '#'\n    case 14918:                     // 'after' '#'\n    case 14920:                     // 'allowing' '#'\n    case 14921:                     // 'ancestor' '#'\n    case 14922:                     // 'ancestor-or-self' '#'\n    case 14923:                     // 'and' '#'\n    case 14925:                     // 'append' '#'\n    case 14927:                     // 'as' '#'\n    case 14928:                     // 'ascending' '#'\n    case 14929:                     // 'at' '#'\n    case 14930:                     // 'attribute' '#'\n    case 14931:                     // 'base-uri' '#'\n    case 14932:                     // 'before' '#'\n    case 14933:                     // 'boundary-space' '#'\n    case 14934:                     // 'break' '#'\n    case 14936:                     // 'case' '#'\n    case 14937:                     // 'cast' '#'\n    case 14938:                     // 'castable' '#'\n    case 14939:                     // 'catch' '#'\n    case 14941:                     // 'child' '#'\n    case 14942:                     // 'collation' '#'\n    case 14944:                     // 'comment' '#'\n    case 14945:                     // 'constraint' '#'\n    case 14946:                     // 'construction' '#'\n    case 14949:                     // 'context' '#'\n    case 14950:                     // 'continue' '#'\n    case 14951:                     // 'copy' '#'\n    case 14952:                     // 'copy-namespaces' '#'\n    case 14953:                     // 'count' '#'\n    case 14954:                     // 'decimal-format' '#'\n    case 14956:                     // 'declare' '#'\n    case 14957:                     // 'default' '#'\n    case 14958:                     // 'delete' '#'\n    case 14959:                     // 'descendant' '#'\n    case 14960:                     // 'descendant-or-self' '#'\n    case 14961:                     // 'descending' '#'\n    case 14966:                     // 'div' '#'\n    case 14967:                     // 'document' '#'\n    case 14969:                     // 'element' '#'\n    case 14970:                     // 'else' '#'\n    case 14971:                     // 'empty' '#'\n    case 14973:                     // 'encoding' '#'\n    case 14974:                     // 'end' '#'\n    case 14976:                     // 'eq' '#'\n    case 14977:                     // 'every' '#'\n    case 14979:                     // 'except' '#'\n    case 14980:                     // 'exit' '#'\n    case 14981:                     // 'external' '#'\n    case 14982:                     // 'first' '#'\n    case 14983:                     // 'following' '#'\n    case 14984:                     // 'following-sibling' '#'\n    case 14985:                     // 'for' '#'\n    case 14989:                     // 'ft-option' '#'\n    case 14994:                     // 'ge' '#'\n    case 14996:                     // 'group' '#'\n    case 14998:                     // 'gt' '#'\n    case 14999:                     // 'idiv' '#'\n    case 15001:                     // 'import' '#'\n    case 15002:                     // 'in' '#'\n    case 15003:                     // 'index' '#'\n    case 15007:                     // 'insert' '#'\n    case 15008:                     // 'instance' '#'\n    case 15009:                     // 'integrity' '#'\n    case 15010:                     // 'intersect' '#'\n    case 15011:                     // 'into' '#'\n    case 15012:                     // 'is' '#'\n    case 15014:                     // 'json' '#'\n    case 15018:                     // 'last' '#'\n    case 15019:                     // 'lax' '#'\n    case 15020:                     // 'le' '#'\n    case 15022:                     // 'let' '#'\n    case 15024:                     // 'loop' '#'\n    case 15026:                     // 'lt' '#'\n    case 15028:                     // 'mod' '#'\n    case 15029:                     // 'modify' '#'\n    case 15030:                     // 'module' '#'\n    case 15032:                     // 'namespace' '#'\n    case 15034:                     // 'ne' '#'\n    case 15040:                     // 'nodes' '#'\n    case 15042:                     // 'object' '#'\n    case 15046:                     // 'only' '#'\n    case 15047:                     // 'option' '#'\n    case 15048:                     // 'or' '#'\n    case 15049:                     // 'order' '#'\n    case 15050:                     // 'ordered' '#'\n    case 15051:                     // 'ordering' '#'\n    case 15054:                     // 'parent' '#'\n    case 15060:                     // 'preceding' '#'\n    case 15061:                     // 'preceding-sibling' '#'\n    case 15064:                     // 'processing-instruction' '#'\n    case 15066:                     // 'rename' '#'\n    case 15067:                     // 'replace' '#'\n    case 15068:                     // 'return' '#'\n    case 15069:                     // 'returning' '#'\n    case 15070:                     // 'revalidation' '#'\n    case 15072:                     // 'satisfies' '#'\n    case 15073:                     // 'schema' '#'\n    case 15076:                     // 'score' '#'\n    case 15077:                     // 'self' '#'\n    case 15082:                     // 'sliding' '#'\n    case 15083:                     // 'some' '#'\n    case 15084:                     // 'stable' '#'\n    case 15085:                     // 'start' '#'\n    case 15088:                     // 'strict' '#'\n    case 15092:                     // 'text' '#'\n    case 15096:                     // 'to' '#'\n    case 15097:                     // 'treat' '#'\n    case 15098:                     // 'try' '#'\n    case 15099:                     // 'tumbling' '#'\n    case 15100:                     // 'type' '#'\n    case 15102:                     // 'union' '#'\n    case 15104:                     // 'unordered' '#'\n    case 15105:                     // 'updating' '#'\n    case 15108:                     // 'validate' '#'\n    case 15109:                     // 'value' '#'\n    case 15110:                     // 'variable' '#'\n    case 15111:                     // 'version' '#'\n    case 15114:                     // 'where' '#'\n    case 15115:                     // 'while' '#'\n    case 15118:                     // 'with' '#'\n    case 15122:                     // 'xquery' '#'\n      try_FunctionItemExpr();\n      break;\n    case -10:\n    case 27412:                     // '{' ';'\n      try_BlockExpr();\n      break;\n    case -11:\n      try_ObjectConstructor();\n      break;\n    case 68:                        // '['\n      try_ArrayConstructor();\n      break;\n    case 278:                       // '{|'\n      try_JSONSimpleObjectUnion();\n      break;\n    case -14:\n      break;\n    default:\n      try_Constructor();\n    }\n  }\n\n  function parse_JSONSimpleObjectUnion()\n  {\n    eventHandler.startNonterminal(\"JSONSimpleObjectUnion\", e0);\n    shift(278);                     // '{|'\n    lookahead1W(272);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 281)                  // '|}'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(281);                     // '|}'\n    eventHandler.endNonterminal(\"JSONSimpleObjectUnion\", e0);\n  }\n\n  function try_JSONSimpleObjectUnion()\n  {\n    shiftT(278);                    // '{|'\n    lookahead1W(272);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 281)                  // '|}'\n    {\n      try_Expr();\n    }\n    shiftT(281);                    // '|}'\n  }\n\n  function parse_ObjectConstructor()\n  {\n    eventHandler.startNonterminal(\"ObjectConstructor\", e0);\n    shift(276);                     // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      whitespace();\n      parse_PairConstructorList();\n    }\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"ObjectConstructor\", e0);\n  }\n\n  function try_ObjectConstructor()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(273);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 282)                  // '}'\n    {\n      try_PairConstructorList();\n    }\n    shiftT(282);                    // '}'\n  }\n\n  function parse_PairConstructorList()\n  {\n    eventHandler.startNonterminal(\"PairConstructorList\", e0);\n    parse_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shift(41);                    // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_PairConstructor();\n    }\n    eventHandler.endNonterminal(\"PairConstructorList\", e0);\n  }\n\n  function try_PairConstructorList()\n  {\n    try_PairConstructor();\n    for (;;)\n    {\n      if (l1 != 41)                 // ','\n      {\n        break;\n      }\n      shiftT(41);                   // ','\n      lookahead1W(266);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      try_PairConstructor();\n    }\n  }\n\n  function parse_PairConstructor()\n  {\n    eventHandler.startNonterminal(\"PairConstructor\", e0);\n    parse_ExprSingle();\n    shift(49);                      // ':'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_ExprSingle();\n    eventHandler.endNonterminal(\"PairConstructor\", e0);\n  }\n\n  function try_PairConstructor()\n  {\n    try_ExprSingle();\n    shiftT(49);                     // ':'\n    lookahead1W(266);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_ExprSingle();\n  }\n\n  function parse_ArrayConstructor()\n  {\n    eventHandler.startNonterminal(\"ArrayConstructor\", e0);\n    shift(68);                      // '['\n    lookahead1W(271);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 69)                   // ']'\n    {\n      whitespace();\n      parse_Expr();\n    }\n    shift(69);                      // ']'\n    eventHandler.endNonterminal(\"ArrayConstructor\", e0);\n  }\n\n  function try_ArrayConstructor()\n  {\n    shiftT(68);                     // '['\n    lookahead1W(271);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    if (l1 != 69)                   // ']'\n    {\n      try_Expr();\n    }\n    shiftT(69);                     // ']'\n  }\n\n  function parse_BlockExpr()\n  {\n    eventHandler.startNonterminal(\"BlockExpr\", e0);\n    shift(276);                     // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    whitespace();\n    parse_StatementsAndOptionalExpr();\n    shift(282);                     // '}'\n    eventHandler.endNonterminal(\"BlockExpr\", e0);\n  }\n\n  function try_BlockExpr()\n  {\n    shiftT(276);                    // '{'\n    lookahead1W(276);               // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n    try_StatementsAndOptionalExpr();\n    shiftT(282);                    // '}'\n  }\n\n  function parse_FunctionDecl()\n  {\n    eventHandler.startNonterminal(\"FunctionDecl\", e0);\n    shift(145);                     // 'function'\n    lookahead1W(254);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_EQName();\n    lookahead1W(22);                // S^WS | '(' | '(:'\n    shift(34);                      // '('\n    lookahead1W(94);                // S^WS | '$' | '(:' | ')'\n    if (l1 == 31)                   // '$'\n    {\n      whitespace();\n      parse_ParamList();\n    }\n    shift(37);                      // ')'\n    lookahead1W(148);               // S^WS | '(:' | 'as' | 'external' | '{'\n    if (l1 == 79)                   // 'as'\n    {\n      whitespace();\n      parse_ReturnType();\n    }\n    lookahead1W(118);               // S^WS | '(:' | 'external' | '{'\n    switch (l1)\n    {\n    case 276:                       // '{'\n      shift(276);                   // '{'\n      lookahead1W(276);             // Wildcard | EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral |\n      whitespace();\n      parse_StatementsAndOptionalExpr();\n      shift(282);                   // '}'\n      break;\n    default:\n      shift(133);                   // 'external'\n    }\n    eventHandler.endNonterminal(\"FunctionDecl\", e0);\n  }\n\n  function parse_ReturnType()\n  {\n    eventHandler.startNonterminal(\"ReturnType\", e0);\n    shift(79);                      // 'as'\n    lookahead1W(259);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |\n    whitespace();\n    parse_SequenceType();\n    eventHandler.endNonterminal(\"ReturnType\", e0);\n  }\n\n  function shift(t)\n  {\n    if (l1 == t)\n    {\n      whitespace();\n      eventHandler.terminal(XQueryParser.TOKEN[l1], b1, e1 > size ? size : e1);\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function shiftT(t)\n  {\n    if (l1 == t)\n    {\n      b0 = b1; e0 = e1; l1 = l2; if (l1 != 0) {\n      b1 = b2; e1 = e2; l2 = 0; }\n    }\n    else\n    {\n      error(b1, e1, 0, l1, t);\n    }\n  }\n\n  function skip(code)\n  {\n    var b0W = b0; var e0W = e0; var l1W = l1;\n    var b1W = b1; var e1W = e1;\n\n    l1 = code; b1 = begin; e1 = end;\n    l2 = 0;\n\n    try_Whitespace();\n\n    b0 = b0W; e0 = e0W; l1 = l1W; if (l1 != 0) {\n    b1 = b1W; e1 = e1W; }\n  }\n\n  function whitespace()\n  {\n    if (e0 != b1)\n    {\n      eventHandler.whitespace(e0, b1);\n      e0 = b1;\n    }\n  }\n\n  function matchW(set)\n  {\n    var code;\n    for (;;)\n    {\n      code = match(set);\n      if (code != 22)               // S^WS\n      {\n        if (code != 36)             // '(:'\n        {\n          break;\n        }\n        skip(code);\n      }\n    }\n    return code;\n  }\n\n  function lookahead1W(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = matchW(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2W(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = matchW(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function lookahead1(set)\n  {\n    if (l1 == 0)\n    {\n      l1 = match(set);\n      b1 = begin;\n      e1 = end;\n    }\n  }\n\n  function lookahead2(set)\n  {\n    if (l2 == 0)\n    {\n      l2 = match(set);\n      b2 = begin;\n      e2 = end;\n    }\n    lk = (l2 << 9) | l1;\n  }\n\n  function error(b, e, s, l, t)\n  {\n    if (e >= ex)\n    {\n      bx = b;\n      ex = e;\n      sx = s;\n      lx = l;\n      tx = t;\n    }\n    throw new self.ParseException(bx, ex, sx, lx, tx);\n  }\n\n  var lk, b0, e0;\n  var l1, b1, e1;\n  var l2, b2, e2;\n  var bx, ex, sx, lx, tx;\n  var eventHandler;\n  var memo;\n\n  function memoize(i, e, v)\n  {\n    memo[(e << 4) + i] = v;\n  }\n\n  function memoized(i, e)\n  {\n    var v = memo[(e << 4) + i];\n    return typeof v != \"undefined\" ? v : 0;\n  }\n\n  var input;\n  var size;\n  var begin;\n  var end;\n\n  function match(tokenSetId)\n  {\n    var nonbmp = false;\n    begin = end;\n    var current = end;\n    var result = XQueryParser.INITIAL[tokenSetId];\n    var state = 0;\n\n    for (var code = result & 4095; code != 0; )\n    {\n      var charclass;\n      var c0 = current < size ? input.charCodeAt(current) : 0;\n      ++current;\n      if (c0 < 0x80)\n      {\n        charclass = XQueryParser.MAP0[c0];\n      }\n      else if (c0 < 0xd800)\n      {\n        var c1 = c0 >> 4;\n        charclass = XQueryParser.MAP1[(c0 & 15) + XQueryParser.MAP1[(c1 & 31) + XQueryParser.MAP1[c1 >> 5]]];\n      }\n      else\n      {\n        if (c0 < 0xdc00)\n        {\n          var c1 = current < size ? input.charCodeAt(current) : 0;\n          if (c1 >= 0xdc00 && c1 < 0xe000)\n          {\n            ++current;\n            c0 = ((c0 & 0x3ff) << 10) + (c1 & 0x3ff) + 0x10000;\n            nonbmp = true;\n          }\n        }\n        var lo = 0, hi = 5;\n        for (var m = 3; ; m = (hi + lo) >> 1)\n        {\n          if (XQueryParser.MAP2[m] > c0) hi = m - 1;\n          else if (XQueryParser.MAP2[6 + m] < c0) lo = m + 1;\n          else {charclass = XQueryParser.MAP2[12 + m]; break;}\n          if (lo > hi) {charclass = 0; break;}\n        }\n      }\n\n      state = code;\n      var i0 = (charclass << 12) + code - 1;\n      code = XQueryParser.TRANSITION[(i0 & 15) + XQueryParser.TRANSITION[i0 >> 4]];\n\n      if (code > 4095)\n      {\n        result = code;\n        code &= 4095;\n        end = current;\n      }\n    }\n\n    result >>= 12;\n    if (result == 0)\n    {\n      end = current - 1;\n      var c1 = end < size ? input.charCodeAt(end) : 0;\n      if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      return error(begin, end, state, -1, -1);\n    }\n\n    if (nonbmp)\n    {\n      for (var i = result >> 9; i > 0; --i)\n      {\n        --end;\n        var c1 = end < size ? input.charCodeAt(end) : 0;\n        if (c1 >= 0xdc00 && c1 < 0xe000) --end;\n      }\n    }\n    else\n    {\n      end -= result >> 9;\n    }\n\n    return (result & 511) - 1;\n  }\n}\n\nXQueryParser.getTokenSet = function(tokenSetId)\n{\n  var set = [];\n  var s = tokenSetId < 0 ? - tokenSetId : XQueryParser.INITIAL[tokenSetId] & 4095;\n  for (var i = 0; i < 284; i += 32)\n  {\n    var j = i;\n    var i0 = (i >> 5) * 3612 + s - 1;\n    var i1 = i0 >> 2;\n    var i2 = i1 >> 2;\n    var f = XQueryParser.EXPECTED[(i0 & 3) + XQueryParser.EXPECTED[(i1 & 3) + XQueryParser.EXPECTED[(i2 & 15) + XQueryParser.EXPECTED[i2 >> 4]]]];\n    for ( ; f != 0; f >>>= 1, ++j)\n    {\n      if ((f & 1) != 0)\n      {\n        set.push(XQueryParser.TOKEN[j]);\n      }\n    }\n  }\n  return set;\n};\n\nXQueryParser.MAP0 =\n[ 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 38, 30, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 38, 38\n];\n\nXQueryParser.MAP1 =\n[ 108, 124, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 156, 181, 181, 181, 181, 181, 214, 215, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 247, 261, 277, 293, 309, 355, 371, 387, 423, 423, 423, 415, 339, 331, 339, 331, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 440, 440, 440, 440, 440, 440, 440, 324, 339, 339, 339, 339, 339, 339, 339, 339, 401, 423, 423, 424, 422, 423, 423, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 338, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 423, 70, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 26, 30, 30, 30, 30, 30, 31, 32, 33, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 38, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 34, 30, 30, 35, 30, 30, 30, 36, 30, 30, 37, 38, 39, 38, 30, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 30, 30, 38, 38, 38, 38, 38, 38, 38, 69, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69\n];\n\nXQueryParser.MAP2 =\n[ 57344, 63744, 64976, 65008, 65536, 983040, 63743, 64975, 65007, 65533, 983039, 1114111, 38, 30, 38, 30, 30, 38\n];\n\nXQueryParser.INITIAL =\n[ 1, 12290, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286\n];\n\nXQueryParser.TRANSITION =\n[ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25307, 18176, 18180, 18180, 18180, 18210, 18180, 18180, 18180, 18180, 18222, 18180, 18180, 18180, 18180, 18198, 18180, 18182, 18238, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38623, 20771, 20784, 20796, 20808, 43870, 38625, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 28718, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19553, 19028, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22954, 20869, 38672, 38672, 38672, 37958, 38672, 38672, 36976, 20909, 20888, 38672, 38672, 38672, 38672, 39926, 20282, 20925, 20958, 38672, 38672, 38672, 43215, 38672, 38672, 25928, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 20997, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 21013, 21118, 38672, 38672, 38672, 24651, 38672, 38672, 44696, 38672, 42922, 38824, 21095, 21058, 21048, 21080, 21111, 48022, 20832, 38672, 38672, 38672, 43215, 21139, 38672, 25530, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 21157, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 18776, 18792, 20360, 18810, 18830, 18835, 19257, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38666, 38672, 38672, 38672, 21880, 38671, 38672, 36460, 38672, 21173, 38661, 21224, 38672, 21231, 38672, 42738, 42750, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 21247, 38672, 38672, 38672, 28875, 38672, 38672, 21266, 38672, 38672, 21288, 21300, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 31059, 38672, 38672, 38672, 38672, 38672, 38672, 24860, 21316, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 18988, 50434, 18503, 18525, 21353, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 24749, 21390, 38672, 38672, 38672, 23220, 38672, 38672, 49687, 45814, 21411, 38672, 38672, 38672, 38672, 41859, 18366, 21448, 21478, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 21515, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 46185, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 21462, 21573, 21537, 21537, 21537, 21580, 21532, 21537, 21542, 21615, 21558, 21644, 21596, 21609, 21631, 21657, 21669, 21681, 20832, 38672, 38672, 38672, 21337, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 21697, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 30462, 38672, 38672, 38672, 22025, 23251, 38672, 22249, 23257, 42922, 30462, 38672, 21719, 21725, 21741, 21766, 21750, 21795, 38672, 38672, 38672, 46035, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 30475, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 24785, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 37115, 50393, 21856, 21832, 21850, 21834, 21872, 21896, 21908, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 21924, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 37301, 25812, 27394, 21985, 22003, 21985, 22017, 27392, 21987, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 42072, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 20981, 38672, 38672, 38672, 30470, 24643, 38672, 48413, 22054, 26165, 22041, 22070, 22074, 22074, 22090, 20979, 48442, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22114, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 47221, 22137, 22155, 22137, 22169, 47219, 22139, 22193, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 22230, 38672, 22247, 38672, 29641, 22265, 42072, 33771, 38672, 38672, 38672, 38672, 26929, 22475, 35267, 22475, 22475, 36544, 42277, 22411, 22411, 33858, 26727, 37227, 26727, 26727, 35540, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 18609, 24891, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 21432, 38031, 38672, 38672, 38672, 38672, 38672, 22291, 38672, 26931, 22311, 22475, 22475, 22475, 22475, 33849, 22352, 22411, 35447, 22411, 22411, 33324, 22381, 26727, 45449, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 30028, 38672, 38672, 22475, 36607, 22475, 22475, 28015, 33854, 22411, 22410, 22411, 22411, 27851, 26727, 45441, 26727, 26727, 22521, 33795, 38672, 38672, 22807, 38672, 38672, 28255, 22475, 22475, 38505, 29442, 22411, 22411, 34626, 26485, 26727, 26727, 26860, 26998, 22647, 38672, 38672, 22428, 26931, 48359, 22475, 42142, 32794, 22411, 28347, 37402, 26727, 22521, 32486, 38672, 18915, 38672, 22451, 22474, 36860, 37042, 22411, 22492, 22517, 22520, 26312, 34036, 26929, 42625, 42144, 35207, 26975, 22537, 26310, 35759, 22589, 36765, 22624, 22640, 22663, 22685, 22706, 39617, 42139, 28345, 26456, 39814, 47009, 22727, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 23092, 42922, 38672, 38672, 38672, 38672, 38672, 31140, 31152, 22751, 38672, 38672, 38672, 43215, 38672, 38672, 26131, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 27937, 27268, 22230, 38672, 38672, 38672, 29641, 38672, 40144, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 36544, 22411, 22411, 22411, 33858, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 18609, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 22803, 38672, 38672, 38672, 22886, 38672, 38672, 38672, 38672, 42922, 36439, 22823, 22844, 22866, 22878, 36438, 22828, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 41329, 38672, 22902, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 22923, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 23115, 42922, 38672, 38672, 38672, 38672, 38672, 26339, 22940, 22970, 38672, 38672, 38672, 43215, 38672, 38672, 23007, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 47631, 27268, 22230, 38672, 38672, 38672, 29641, 38672, 48650, 23029, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 36544, 22411, 22411, 22411, 33858, 26727, 26727, 26727, 26727, 30990, 42723, 23085, 38672, 38672, 38672, 38672, 38672, 23048, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 23072, 23108, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 46833, 22411, 22411, 22411, 22411, 22411, 47864, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 43252, 33854, 22411, 22411, 22411, 22411, 48185, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 18878, 38672, 38672, 38672, 35592, 32963, 38672, 38672, 23153, 42922, 37950, 35335, 23190, 23196, 23212, 38672, 41919, 23236, 23274, 38672, 38672, 45078, 23291, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 25157, 23483, 23350, 24209, 23309, 45351, 38672, 18269, 42564, 28228, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19821, 23376, 23336, 23369, 23392, 24203, 23434, 23465, 24172, 23726, 19833, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 18729, 23481, 23642, 24581, 23499, 23504, 24048, 23353, 23520, 23933, 23353, 24164, 23917, 24518, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 23536, 23854, 23815, 23561, 23577, 23632, 24450, 24255, 23689, 23658, 23674, 23716, 23742, 24268, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 23773, 23804, 23842, 24040, 23870, 23886, 23449, 23700, 23902, 23320, 23949, 23992, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 24027, 23545, 23592, 24064, 24137, 24459, 24094, 24110, 23407, 20069, 47383, 20010, 46515, 35979, 20039, 20679, 24126, 24567, 24482, 24153, 24188, 23616, 24225, 20191, 20207, 20223, 20259, 20298, 20337, 24284, 24078, 24374, 24300, 24330, 24314, 23418, 20424, 20452, 20468, 24361, 23826, 23606, 24390, 24419, 20532, 24435, 24475, 24498, 24628, 20608, 23750, 23928, 24403, 20644, 23757, 24508, 20660, 20054, 24345, 20695, 24537, 24597, 24613, 24552, 23788, 24240, 23964, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 39906, 38672, 38672, 38672, 30470, 24672, 38672, 38672, 24667, 26611, 24688, 24695, 24695, 24695, 24711, 26910, 24735, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 24765, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 20739, 24828, 48943, 18855, 18871, 18894, 40258, 24858, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19087, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 24876, 24922, 24938, 19905, 19631, 19046, 24954, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 24970, 18446, 19976, 19994, 19525, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 21250, 35576, 24999, 24999, 24999, 35584, 31668, 31680, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 25271, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 19887, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 50381, 27744, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 40452, 25015, 25015, 25015, 25023, 27746, 40454, 20832, 25047, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 25065, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 20310, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 50286, 50295, 38672, 38672, 38672, 23056, 38672, 38672, 38672, 38672, 42922, 44048, 25088, 25088, 25088, 25096, 46630, 44050, 25120, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 18699, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 25136, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 25152, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25173, 38672, 38672, 38672, 38672, 30470, 25218, 38672, 38672, 21395, 32346, 38672, 38672, 38672, 25210, 25237, 21393, 25221, 25256, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 22214, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19206, 20349, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 38672, 41563, 25293, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 34976, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 25437, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 30057, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 25455, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 40102, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 49130, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33754, 33854, 22411, 22411, 22411, 22411, 31454, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25482, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25500, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38220, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 25563, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 28464, 25582, 25594, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 21426, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25610, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 44752, 25631, 25649, 25671, 25683, 44753, 25633, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 35735, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 25717, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 38672, 38672, 24860, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 31997, 38672, 25754, 25760, 25776, 23293, 41839, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 25800, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 25828, 20548, 20592, 20589, 50171, 25844, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 25049, 38672, 38672, 38672, 22098, 25865, 25896, 25377, 25881, 25913, 30410, 30418, 25964, 25978, 25990, 26006, 26018, 25344, 45647, 38672, 26034, 48091, 26052, 33210, 26086, 26116, 26153, 26223, 35321, 26181, 25701, 26211, 26248, 26264, 43583, 44602, 26280, 26296, 26329, 38672, 38672, 38672, 30176, 26355, 38925, 41958, 22850, 24803, 38672, 44654, 30480, 22475, 22475, 22475, 36601, 25393, 22411, 22411, 43601, 22690, 26727, 26727, 26727, 39641, 30990, 39463, 38672, 43148, 28319, 38672, 29724, 26374, 19326, 38672, 38672, 32428, 40296, 38574, 45608, 22475, 22475, 26394, 26439, 26475, 26509, 22411, 37859, 28780, 26529, 38451, 26727, 26727, 43300, 45056, 22573, 30349, 25414, 26545, 38672, 26563, 38672, 40287, 48411, 38672, 26599, 35364, 28653, 26627, 31403, 45616, 49789, 33849, 44356, 22411, 30609, 28411, 41138, 33324, 35718, 26727, 47625, 44193, 29223, 41749, 42781, 38094, 28940, 38672, 21816, 21032, 26644, 38672, 47420, 26664, 22475, 41307, 22336, 31195, 39296, 22411, 22411, 26685, 31454, 47988, 26726, 26727, 30787, 32911, 36940, 26744, 38697, 46064, 38672, 26779, 26799, 26821, 22787, 22475, 23131, 26837, 37515, 22411, 36778, 26853, 26876, 26727, 33519, 46887, 26926, 38672, 38672, 26931, 37355, 35081, 26947, 38899, 38878, 26969, 48550, 26727, 26994, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 38555, 27014, 22600, 47761, 48246, 27057, 27076, 27094, 27113, 28343, 26456, 27133, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 27153, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 39378, 27172, 38672, 27196, 27202, 27218, 27234, 27246, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 27262, 42259, 26453, 27284, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 46100, 48405, 27326, 25277, 38672, 38672, 28258, 22475, 22475, 22475, 37137, 27346, 22411, 22411, 22411, 22411, 39760, 37334, 26727, 26727, 26727, 26727, 27410, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 41804, 38672, 38672, 27435, 38672, 38672, 33108, 38672, 49441, 22475, 22475, 22475, 38002, 42895, 22411, 22411, 22411, 22411, 27454, 27481, 26727, 26727, 26727, 43058, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 46997, 37168, 35831, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 27504, 38672, 38672, 22098, 38672, 27541, 38672, 27559, 23976, 27578, 27586, 27602, 27617, 27629, 27645, 27657, 25344, 38672, 38672, 27676, 44992, 38672, 22924, 38672, 38672, 38672, 38672, 38672, 38672, 27673, 50511, 27692, 47251, 26513, 26453, 41246, 27710, 25375, 29768, 38672, 38672, 32334, 38672, 27740, 38672, 27762, 27784, 38672, 25948, 27789, 27805, 27821, 22475, 22475, 27840, 27878, 22411, 22411, 22690, 27915, 27931, 26727, 26727, 30990, 39463, 44557, 38672, 38672, 44934, 38672, 38225, 48405, 33126, 27953, 38672, 38672, 27694, 47073, 35424, 37245, 22475, 35786, 48497, 47338, 42686, 30280, 22411, 37334, 37394, 27977, 27995, 43743, 26727, 32919, 30349, 25414, 38672, 38672, 24003, 38672, 30096, 48411, 38672, 38672, 26931, 22475, 22475, 22475, 28013, 28031, 33849, 22411, 22411, 22411, 28053, 28070, 33324, 26727, 26727, 26727, 28092, 28109, 32918, 41804, 28131, 38672, 38672, 49206, 38672, 28149, 38672, 22475, 22475, 22475, 22780, 33754, 33854, 22411, 22411, 42031, 22411, 31454, 26727, 26727, 26727, 28171, 22521, 33795, 38672, 38672, 31346, 38672, 46687, 21493, 22475, 28191, 22475, 23131, 22411, 30274, 22411, 36778, 26727, 35228, 26727, 31599, 28213, 38672, 38672, 38672, 28250, 28274, 47411, 42142, 28296, 31494, 28347, 36728, 31954, 22521, 26313, 38672, 38672, 28317, 27136, 22475, 28335, 22411, 36897, 26977, 26727, 22564, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 28363, 28379, 28427, 28480, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 28504, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 24521, 38672, 38672, 22098, 38672, 28530, 45484, 38672, 46575, 28549, 28557, 28573, 28587, 28595, 28611, 28623, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 19750, 26547, 38672, 26546, 19755, 28639, 42141, 48492, 27360, 44280, 27268, 25375, 29257, 27180, 28679, 29641, 21703, 38672, 25730, 38672, 38083, 42329, 28697, 28734, 27137, 27824, 36531, 43498, 28750, 22608, 46434, 28774, 46408, 28796, 28814, 28833, 26727, 28849, 39463, 38672, 38672, 38672, 25738, 38672, 29761, 48405, 38672, 38672, 38672, 19698, 28258, 22475, 22475, 22475, 27023, 35786, 22411, 22411, 22411, 22411, 28891, 37334, 26727, 26727, 26727, 26727, 28912, 43066, 28929, 28956, 38672, 38672, 33876, 38672, 28992, 48411, 38672, 38672, 29009, 29030, 27032, 22475, 22475, 22669, 33849, 29109, 45393, 22411, 22411, 32729, 33324, 29133, 37067, 26727, 26727, 34717, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 29157, 38672, 29181, 22475, 22475, 29202, 33754, 43112, 22411, 22411, 32083, 22411, 34472, 29222, 26727, 26727, 29239, 22521, 33795, 38672, 29256, 29273, 38672, 29294, 28255, 32383, 27117, 29315, 23131, 44876, 34578, 42252, 36778, 44915, 26727, 29337, 26998, 46887, 21810, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 29370, 38672, 27136, 22475, 29387, 22411, 41041, 26977, 26727, 43751, 26312, 34036, 26929, 22475, 42144, 22411, 29411, 29240, 26310, 35759, 22476, 22411, 26978, 48196, 29430, 26953, 38544, 39617, 34809, 33567, 37775, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38673, 29464, 38672, 22098, 22435, 29483, 38672, 29506, 26195, 29530, 29540, 29556, 29570, 29582, 29598, 29610, 25344, 38672, 29626, 25072, 29668, 50094, 29711, 40102, 40331, 29748, 21064, 29784, 29812, 29843, 29873, 29903, 29919, 29957, 26423, 29973, 30010, 25375, 30044, 30091, 38782, 30112, 30134, 26137, 30161, 38672, 38672, 26583, 38672, 26929, 39099, 30212, 36878, 44806, 30228, 43650, 28758, 46842, 30244, 46765, 30296, 30317, 30336, 30384, 39463, 20089, 31354, 30434, 38799, 41183, 30450, 30496, 38672, 30542, 30564, 29278, 30580, 39823, 30631, 28663, 42103, 30647, 30685, 30712, 30766, 30811, 30837, 34161, 30878, 30901, 34681, 30930, 30980, 31006, 31022, 25414, 31049, 38672, 18321, 49090, 31075, 31094, 31128, 34195, 32584, 46802, 31168, 22475, 33645, 42347, 31190, 47486, 31211, 22411, 47598, 49959, 31232, 32841, 31257, 26727, 39569, 42011, 31278, 31335, 49499, 35851, 39273, 31370, 43966, 34186, 21188, 33468, 37601, 29186, 31389, 31426, 42239, 40895, 22411, 31442, 31481, 31454, 31519, 31539, 30795, 31561, 31595, 33795, 38672, 48757, 39401, 38672, 30196, 28255, 39519, 43549, 31615, 23131, 34822, 47675, 31635, 36778, 22546, 47769, 31572, 26998, 46887, 39201, 31656, 18290, 31696, 31734, 31750, 31772, 31808, 31845, 31869, 31903, 37385, 31919, 31970, 26378, 18593, 32021, 48908, 39526, 44237, 32042, 32063, 32099, 48723, 41712, 26312, 41270, 26929, 22475, 32144, 22411, 32167, 44894, 26310, 32185, 46276, 40692, 44326, 31465, 20435, 32208, 32228, 32248, 32274, 32295, 32319, 32362, 32399, 32415, 28257, 28345, 26459, 32457, 32473, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 32509, 38672, 22098, 32530, 32548, 43771, 30190, 32600, 32630, 38672, 32616, 32654, 32662, 32678, 32690, 25344, 38672, 38672, 48277, 43215, 38672, 38672, 38672, 38672, 29732, 38672, 38672, 32706, 29731, 26036, 33631, 42208, 32724, 38438, 44280, 27268, 25375, 21272, 38672, 38672, 31985, 38672, 38672, 38672, 26576, 32745, 36837, 38672, 26929, 32766, 22475, 22475, 22475, 32810, 32857, 22411, 22411, 22690, 27419, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 48405, 38672, 38672, 40108, 38672, 28258, 22475, 22475, 22475, 42113, 35786, 22411, 22411, 22411, 22411, 32877, 37334, 26727, 26727, 26727, 26728, 26727, 32919, 30349, 25414, 38672, 38672, 38672, 38672, 38672, 48411, 32026, 38672, 26931, 22475, 22475, 46869, 22475, 22475, 33849, 22411, 22411, 39678, 22411, 22411, 33324, 26727, 26727, 41099, 26727, 26727, 32918, 41804, 38672, 38672, 38672, 38672, 38672, 30118, 38672, 22475, 22475, 22475, 42121, 33754, 33854, 22411, 22411, 48685, 22411, 31454, 26727, 26727, 26727, 46758, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 23131, 22411, 22411, 22411, 36778, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 36404, 38672, 38672, 38672, 44299, 22475, 42143, 31823, 22411, 32169, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 27097, 32897, 36362, 47020, 32935, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 25031, 38672, 38672, 43445, 32979, 32987, 33003, 33009, 33025, 33041, 33053, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 29467, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 33069, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 33103, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 33124, 38672, 18284, 28258, 22475, 22475, 22475, 22475, 40837, 22411, 22411, 22411, 22411, 22411, 34394, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 33142, 38672, 33163, 42808, 38672, 42803, 38566, 22475, 22475, 37994, 22475, 22475, 33849, 22411, 22411, 47479, 22411, 22411, 33324, 26727, 26727, 31312, 26727, 26727, 41720, 33181, 38672, 38672, 34958, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 34949, 49071, 38672, 28255, 22475, 22475, 29048, 29442, 22411, 22411, 43834, 26485, 26727, 26727, 49882, 26998, 33184, 33200, 40222, 33234, 22991, 22475, 33277, 33313, 50063, 43479, 33349, 26727, 33377, 32128, 26313, 33405, 26648, 22985, 33423, 33443, 35387, 48797, 34523, 33492, 40922, 33514, 26312, 34036, 46959, 32375, 33535, 33554, 33575, 35236, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 28488, 33591, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 32005, 38672, 38672, 33617, 38672, 38672, 38672, 30064, 38672, 30073, 38672, 30064, 33661, 30069, 38721, 42958, 22411, 33692, 33700, 33716, 25375, 38672, 38672, 25941, 29641, 33732, 20082, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 33752, 25393, 22411, 22411, 23137, 22690, 26727, 26727, 26727, 49362, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25615, 38672, 33770, 28258, 22475, 22475, 22475, 22475, 40491, 22411, 22411, 22411, 22411, 22411, 40736, 26727, 26727, 26727, 26727, 26727, 33787, 33803, 33407, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 33819, 48351, 22475, 22475, 22475, 22475, 33849, 46363, 22411, 22411, 22411, 22411, 33324, 48523, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 48282, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 33840, 33854, 22411, 22411, 22411, 28403, 27851, 26727, 26727, 26727, 43360, 22521, 33795, 38672, 38672, 42813, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 33874, 21141, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 33892, 34036, 21208, 22475, 46215, 22411, 33914, 26727, 33935, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 42795, 38672, 22098, 25439, 25194, 32493, 40646, 40656, 38304, 38312, 33959, 33974, 33986, 34002, 34014, 25344, 38672, 38672, 38672, 49261, 33079, 38672, 38672, 23275, 34030, 34052, 38672, 34078, 34127, 34177, 34211, 38408, 34239, 34258, 29354, 34285, 25375, 38672, 38672, 36069, 29641, 38672, 34301, 38672, 38672, 38672, 34327, 24011, 26929, 47957, 34366, 22475, 34410, 34439, 34460, 34488, 32881, 44853, 22711, 39788, 26727, 49664, 34508, 39463, 38672, 28969, 45656, 28681, 19706, 18253, 38672, 26070, 26232, 47650, 46594, 28258, 42618, 22475, 45107, 34547, 44588, 22411, 34575, 22411, 34594, 34618, 34642, 27997, 26727, 35481, 34668, 34697, 32919, 33803, 38672, 38672, 38672, 44387, 34733, 34759, 38672, 38672, 38672, 26931, 34796, 22475, 22475, 22475, 34845, 34862, 31216, 22411, 22411, 37262, 22411, 34878, 31262, 26727, 26727, 28913, 26727, 34894, 33802, 38672, 34931, 35005, 30145, 35033, 35049, 30548, 35079, 26669, 35097, 35117, 35142, 44418, 22411, 35167, 35192, 43624, 31718, 26727, 43013, 39321, 47169, 35252, 30750, 31033, 38672, 35289, 35307, 35357, 32192, 22475, 35380, 35403, 34559, 22411, 35440, 35463, 30821, 35479, 35497, 35530, 35556, 35608, 38672, 38672, 24906, 47811, 35630, 37839, 28037, 35670, 48379, 27078, 35705, 48704, 22521, 26313, 33898, 38672, 35734, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 28514, 35751, 26929, 35782, 35802, 36916, 32303, 49941, 26310, 49171, 22476, 22411, 26978, 48196, 35867, 35883, 35899, 35915, 42139, 28345, 26456, 28257, 28343, 26456, 35951, 36348, 35941, 33538, 36362, 36357, 34905, 35967, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 33252, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 20573, 33260, 46302, 45557, 36019, 36031, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 34780, 22475, 25393, 22411, 22411, 36047, 22690, 26727, 26727, 36130, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 20243, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 36066, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 45849, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 36085, 22475, 22475, 22475, 22475, 33849, 36106, 22411, 22411, 22411, 22411, 33324, 36126, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 19729, 38672, 22098, 38672, 39473, 38672, 44217, 36146, 36184, 36196, 36212, 36218, 36234, 36250, 36262, 25344, 38672, 36278, 38672, 43215, 38672, 25421, 18575, 38672, 27438, 38672, 38672, 46139, 36299, 48111, 34141, 26409, 36335, 39145, 44169, 36378, 36420, 36455, 38672, 29371, 36476, 38672, 27543, 38672, 36498, 35844, 31373, 34743, 36516, 40527, 36565, 29321, 36586, 36623, 36646, 22411, 36676, 29093, 36714, 29346, 28817, 43388, 36750, 36802, 37724, 36836, 38672, 38672, 38672, 26061, 38672, 38672, 38672, 38672, 38672, 28258, 36853, 42951, 22475, 36876, 38513, 34492, 36894, 36913, 40984, 22411, 43282, 35514, 28798, 26727, 43717, 26727, 36932, 33803, 38672, 38672, 36956, 38672, 38672, 18909, 32575, 38672, 38672, 26931, 22475, 22475, 41976, 35273, 36992, 33849, 22411, 22411, 45307, 44424, 37025, 33324, 26727, 26727, 40875, 39885, 37058, 32918, 33802, 34967, 38672, 38672, 32750, 38672, 38672, 38672, 22475, 38401, 22475, 22475, 28015, 33854, 34444, 22411, 22411, 22411, 27851, 26727, 37091, 26727, 26727, 22521, 33795, 37110, 34940, 38672, 46173, 45770, 29014, 37131, 22475, 22475, 37153, 29988, 22411, 22411, 37195, 37219, 26727, 26727, 36392, 46887, 38346, 38672, 39265, 26931, 22475, 37243, 42142, 22411, 37261, 28347, 26727, 37278, 22521, 26313, 38672, 37296, 38672, 27136, 22475, 37317, 22411, 48861, 26977, 26727, 48595, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 35925, 29395, 39608, 37350, 37371, 26459, 33538, 37783, 48331, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 41939, 38672, 22098, 38672, 25566, 38672, 38672, 29887, 39046, 39054, 37418, 37432, 37440, 37456, 37468, 25500, 38672, 37493, 38672, 43215, 38672, 28533, 38672, 38672, 27562, 38672, 38672, 37494, 37484, 23258, 20853, 42141, 37510, 47612, 44280, 27268, 25375, 38672, 29490, 38672, 29641, 38672, 37531, 37550, 38672, 38672, 38672, 37570, 27517, 39732, 22475, 40520, 37590, 25393, 37627, 22412, 37898, 37646, 31523, 26727, 48530, 31241, 31792, 37683, 37699, 24812, 38672, 37723, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 37740, 22475, 37799, 22475, 35786, 45030, 31853, 36110, 22411, 22411, 37334, 31545, 34712, 40790, 26727, 26727, 32919, 33803, 38672, 21024, 48965, 38672, 38672, 33943, 28155, 37816, 38672, 26931, 46335, 37834, 22475, 27041, 22475, 34377, 49011, 37855, 22411, 33297, 22411, 27890, 39339, 37875, 26727, 27899, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 48203, 38672, 38672, 38672, 26931, 29057, 22475, 42142, 32786, 22411, 28347, 22555, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 37895, 26977, 49110, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 37914, 31619, 41895, 26978, 37938, 37974, 41757, 45432, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 36549, 37075, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 25240, 38672, 24719, 38672, 46651, 38018, 25104, 38054, 38118, 38157, 38142, 38161, 38126, 38177, 38189, 25344, 38672, 45759, 49561, 49547, 38205, 49199, 38672, 38241, 38259, 34062, 38289, 38328, 38371, 38273, 38387, 38424, 38467, 39556, 38529, 27268, 25375, 40213, 38672, 38672, 38590, 21779, 38672, 38614, 38641, 21123, 43234, 38689, 38713, 41522, 39725, 26628, 22475, 25393, 38737, 22411, 29117, 22690, 32232, 31319, 26727, 38753, 34652, 38772, 35341, 38672, 38798, 38815, 38672, 38672, 40618, 38672, 38672, 38672, 38840, 33601, 40485, 22475, 38858, 22475, 35786, 47683, 38876, 40856, 22411, 22411, 37334, 32114, 26727, 42187, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 24776, 38672, 36500, 33087, 26755, 48300, 22475, 22475, 22475, 46796, 41600, 49410, 22411, 22411, 22411, 38894, 29994, 47730, 26727, 26727, 26727, 46465, 44085, 32918, 33802, 38915, 38949, 38972, 38992, 38672, 39015, 39031, 44824, 39070, 29039, 39086, 28015, 33854, 39115, 39131, 22365, 39171, 27851, 40395, 48234, 48581, 49654, 22521, 39190, 33147, 39225, 26763, 39254, 38337, 41515, 31410, 48668, 36570, 39289, 44624, 49920, 36050, 39312, 46490, 26727, 39337, 39355, 46887, 39394, 38672, 20942, 22766, 22475, 39417, 21499, 22411, 39448, 25398, 26727, 39489, 22521, 47568, 38672, 38672, 46680, 45512, 39505, 42143, 39542, 32076, 39585, 39633, 39657, 35567, 35614, 26929, 29075, 42144, 39674, 26975, 39694, 26310, 35759, 35126, 47451, 29414, 27465, 39712, 39748, 39776, 39804, 46246, 41657, 47873, 28257, 28343, 26456, 28257, 28345, 26459, 39839, 39865, 36357, 34905, 30398, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 39901, 22098, 38672, 30368, 39922, 38672, 45211, 39942, 39950, 39966, 39980, 39988, 40004, 40016, 25344, 35063, 40032, 40048, 40074, 25784, 40124, 38672, 40160, 20023, 50351, 40199, 40238, 40274, 40312, 49237, 40347, 40363, 36660, 40411, 40427, 25375, 38672, 40443, 18661, 36161, 37534, 38672, 18669, 43864, 38672, 38672, 44690, 26929, 22475, 37009, 40470, 40507, 25393, 22411, 40543, 31503, 45950, 26727, 47993, 40578, 40601, 30990, 39463, 38672, 44715, 38672, 38672, 40617, 29165, 40634, 41441, 21201, 19353, 22907, 40672, 45368, 47429, 22475, 22475, 40708, 37034, 28896, 40724, 22411, 47891, 41633, 40762, 35506, 40782, 26727, 47175, 32919, 22394, 40806, 38672, 38654, 32566, 38672, 38672, 38672, 38672, 48740, 26931, 22475, 38860, 22475, 40833, 22475, 33849, 22411, 41060, 22411, 40853, 22411, 33324, 26727, 38756, 26727, 40872, 26727, 32918, 33802, 38672, 38672, 20973, 45998, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 22458, 40891, 22411, 22411, 22411, 22411, 40911, 26727, 26727, 26727, 26727, 22501, 33795, 23174, 18332, 38672, 38672, 38672, 40938, 22475, 40962, 22475, 40684, 22411, 40981, 22411, 31782, 26727, 49841, 26727, 26998, 28442, 38672, 38672, 38672, 26931, 41000, 41019, 42142, 41039, 41057, 28347, 41076, 41095, 22521, 44039, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 34915, 34036, 27330, 41115, 29084, 41137, 35817, 26727, 27724, 35759, 41154, 41218, 41701, 41262, 41286, 47258, 44155, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 28115, 33538, 27862, 36357, 34905, 46290, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 26904, 22098, 38672, 38672, 41323, 22275, 41345, 40139, 38672, 26358, 41381, 41394, 41410, 41422, 25344, 38672, 38672, 45842, 43215, 38672, 38672, 38672, 41438, 50256, 38672, 22231, 41440, 45848, 38672, 34773, 41457, 34829, 39879, 41487, 27268, 25375, 38102, 38672, 38672, 29641, 38672, 41538, 41554, 33261, 38672, 38672, 36430, 26929, 41579, 35101, 34846, 45533, 41616, 41649, 40556, 45401, 41673, 41736, 41773, 26727, 41789, 40746, 42656, 41831, 38672, 41855, 41875, 32532, 32708, 46542, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 41594, 22475, 35786, 22411, 22411, 22411, 41893, 22411, 37334, 26727, 26727, 37094, 26727, 26727, 32919, 27373, 41911, 29299, 38672, 38672, 38672, 41935, 25466, 38672, 41955, 26931, 22475, 41121, 41974, 22475, 22475, 34152, 22411, 46370, 41992, 22411, 22411, 30778, 26727, 31887, 42009, 26727, 26727, 32918, 33802, 38243, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 48461, 22475, 28015, 42027, 22411, 22411, 42047, 22411, 37764, 26727, 26727, 48819, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 22208, 38672, 18340, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 28175, 42067, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 30944, 42088, 42137, 42160, 42180, 48196, 42203, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 31078, 38672, 38672, 32435, 32438, 32441, 42224, 25897, 46967, 28280, 42275, 42293, 31579, 27268, 42319, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 46624, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 41023, 22411, 22411, 22411, 22411, 22411, 42864, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 42345, 42143, 29941, 22411, 26977, 42363, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 44743, 22177, 38672, 38672, 27385, 38672, 45876, 42383, 22121, 42412, 42425, 42433, 42449, 42461, 25344, 38672, 32955, 42527, 43215, 18706, 42477, 42499, 33244, 42519, 38672, 42543, 40174, 42559, 42580, 42605, 42641, 42672, 40377, 42708, 42766, 25375, 38672, 38672, 38672, 42829, 42880, 42911, 43973, 27961, 38672, 38672, 23013, 42938, 22475, 42974, 41003, 39432, 42995, 32861, 22411, 36698, 35176, 43029, 43292, 26727, 43049, 43082, 43138, 38672, 38672, 38672, 25328, 43172, 43191, 38672, 43210, 28234, 38672, 43231, 48341, 22475, 43250, 22475, 22325, 43268, 47118, 39174, 22411, 22411, 43316, 43332, 43358, 40585, 26727, 37280, 43376, 43410, 33803, 38672, 38672, 41815, 45184, 39238, 30360, 38672, 43434, 50186, 43461, 43495, 48777, 43514, 43538, 22475, 43573, 43599, 31640, 43617, 43640, 22411, 43666, 43692, 49367, 43710, 43733, 26727, 47922, 33802, 43767, 38672, 38672, 43787, 43812, 38672, 43850, 50024, 43886, 43557, 22475, 28015, 33854, 43908, 34242, 22411, 22411, 27851, 46470, 43935, 44079, 26727, 39658, 43953, 38672, 43989, 21331, 38672, 38672, 33824, 22475, 22475, 49385, 34223, 22411, 22411, 22411, 44011, 26727, 26727, 26727, 44027, 46887, 19958, 38672, 38672, 50007, 22475, 22475, 28197, 22411, 22411, 44066, 26727, 26727, 44101, 26313, 20872, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26890, 47793, 44124, 44140, 44185, 44209, 20435, 28340, 26976, 33389, 44233, 44253, 44277, 44296, 28343, 26456, 28257, 28345, 26459, 44315, 44342, 38482, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 18636, 22098, 44386, 29857, 38069, 44372, 44403, 44440, 44464, 44480, 44494, 44510, 44526, 44538, 25344, 44554, 46908, 38672, 40088, 38672, 38672, 41365, 38672, 43156, 26783, 26781, 47212, 47203, 34311, 44573, 42979, 44618, 41232, 44280, 27268, 44640, 44676, 38672, 44712, 29827, 28456, 38672, 38672, 38672, 44731, 44769, 38672, 40058, 44785, 40965, 44822, 22475, 44840, 44869, 48063, 22411, 22690, 39155, 44892, 44910, 26727, 30990, 39463, 38672, 44931, 38672, 44950, 44971, 38672, 38672, 38672, 38672, 38672, 44987, 28258, 45008, 41301, 22475, 22475, 37611, 28054, 22411, 45028, 22411, 22411, 45046, 30301, 30320, 26727, 26727, 28093, 30742, 33803, 38672, 38672, 45072, 32638, 30075, 38672, 46548, 37818, 38672, 42396, 22475, 22475, 47037, 45094, 33476, 49452, 22411, 22411, 49585, 32047, 36630, 35654, 26727, 26727, 39696, 33919, 26493, 44108, 45157, 32514, 38672, 49604, 38672, 38672, 38672, 45200, 22475, 22475, 43892, 45227, 28015, 33854, 22411, 41993, 40562, 22411, 27851, 26727, 26727, 32834, 45248, 22521, 33795, 38672, 22295, 45267, 19361, 38672, 28255, 36090, 22475, 45286, 43473, 42051, 22411, 45304, 43005, 43694, 26727, 49877, 26998, 46887, 38672, 50299, 46144, 45323, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 49054, 26313, 45345, 36168, 40817, 45367, 22475, 45384, 22411, 30669, 26977, 26727, 45417, 45465, 36482, 45500, 45528, 32279, 22411, 44261, 26727, 45549, 35759, 34423, 35689, 37179, 48196, 20435, 28340, 26976, 27310, 33427, 47309, 26456, 32258, 46222, 29141, 45599, 45573, 45589, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 42503, 22098, 38672, 38672, 19843, 38672, 45632, 29682, 29695, 45672, 45688, 45703, 45719, 45731, 25344, 25697, 36820, 25484, 43215, 48936, 33218, 45747, 38933, 25691, 45794, 45830, 45905, 45865, 45892, 45921, 30595, 45937, 41471, 45980, 45966, 25375, 45996, 46014, 46030, 34093, 38672, 38672, 46051, 24794, 46090, 46124, 46160, 46201, 46238, 46262, 46318, 46334, 46351, 46386, 26710, 46424, 30615, 39597, 40389, 46450, 46486, 30259, 41502, 46506, 46564, 38672, 46591, 46610, 46646, 38672, 45270, 33165, 46667, 46703, 46719, 46781, 46818, 46866, 45012, 35786, 47344, 42692, 28076, 22411, 34531, 37334, 42303, 43342, 43676, 26727, 37661, 41688, 46885, 38672, 46904, 39209, 44660, 46924, 28976, 46946, 38672, 30957, 20847, 49903, 46983, 47036, 22475, 47053, 33288, 31829, 47089, 22411, 22411, 47105, 35219, 43394, 47140, 26727, 26727, 47156, 32918, 33802, 47191, 38672, 41877, 37707, 38672, 50210, 38598, 47237, 45288, 47274, 47290, 28015, 43827, 47306, 47325, 28394, 29934, 30696, 36786, 37667, 47360, 43033, 22521, 43418, 47376, 50112, 38672, 38355, 49147, 28255, 47399, 22475, 22475, 47445, 47467, 34602, 22411, 47502, 47526, 50046, 26727, 47556, 46887, 36283, 49516, 38672, 48840, 29206, 44799, 47584, 47703, 30662, 30727, 45251, 31880, 34269, 39367, 47647, 38672, 49567, 38494, 40946, 47666, 47699, 47719, 39849, 48630, 47746, 32945, 47785, 47809, 47827, 47850, 47889, 47907, 48880, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 49752, 49772, 47949, 47973, 48009, 48038, 49034, 30862, 33538, 36362, 36357, 47933, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 48079, 38672, 38672, 48107, 38672, 19671, 30510, 30518, 48127, 30518, 30526, 48143, 48155, 25344, 38672, 38672, 38672, 44955, 38672, 29647, 38672, 38672, 38672, 38672, 29652, 46888, 38672, 38672, 45329, 35643, 48171, 30851, 45141, 48219, 48262, 38672, 38672, 38672, 29641, 38672, 38672, 50200, 50208, 38672, 38672, 38672, 48298, 33458, 22475, 22475, 22475, 48316, 48375, 22411, 22411, 28301, 37203, 26727, 26727, 26727, 30914, 41169, 48395, 38672, 34989, 34103, 38672, 38672, 38672, 48429, 38672, 34985, 36969, 28258, 49732, 31174, 47066, 48458, 46734, 22411, 37326, 35682, 48477, 41625, 48513, 26727, 48546, 48566, 33498, 48611, 32919, 33803, 38672, 32557, 38672, 48646, 38672, 38672, 38672, 19786, 38672, 26931, 22475, 48666, 22475, 22475, 22475, 32777, 22411, 48684, 22411, 22411, 22411, 31945, 26727, 48701, 26727, 26727, 26727, 32918, 33361, 38672, 45778, 38672, 38672, 38672, 38672, 41194, 35417, 22475, 22475, 22475, 28015, 42844, 22411, 22411, 22411, 22411, 27851, 48720, 26727, 26727, 26727, 22521, 33795, 48739, 38672, 38672, 48756, 38672, 35766, 48773, 22475, 22475, 45119, 48793, 22411, 42164, 43122, 48813, 26727, 43937, 26998, 46887, 48835, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 43522, 42144, 48856, 26975, 48877, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 20436, 32151, 30885, 28257, 28345, 26459, 33538, 22735, 48896, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 48924, 48962, 36314, 45181, 38672, 50538, 38672, 45169, 48959, 38038, 34111, 48981, 48993, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 27525, 42141, 49009, 31292, 44280, 27268, 25375, 38672, 36812, 40252, 29641, 38672, 38672, 38672, 38672, 43194, 38672, 38672, 26929, 45232, 22475, 37800, 22475, 25393, 49027, 22411, 46850, 22690, 27979, 26727, 26727, 49050, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 49070, 38672, 38672, 49087, 38672, 28258, 22475, 49810, 22475, 22475, 35786, 22411, 22411, 34386, 22411, 22411, 37334, 26727, 26727, 49106, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 49126, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 49146, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 49163, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 49187, 38672, 21516, 38672, 20816, 49222, 49253, 38672, 49277, 49291, 49304, 49320, 49332, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 31934, 32212, 26453, 47540, 49348, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 43175, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 35291, 38672, 38672, 38672, 36319, 22475, 22475, 22475, 22475, 22475, 31707, 22411, 22411, 22411, 22411, 22411, 45130, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38842, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 49383, 22475, 49401, 33854, 22411, 42856, 22411, 47124, 27851, 26727, 41079, 26727, 26727, 49426, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25610, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 41202, 49468, 49480, 25344, 38672, 38672, 38672, 43215, 49496, 38672, 49515, 38672, 38672, 46071, 46074, 38672, 49532, 28993, 37922, 42141, 49583, 32824, 44280, 27268, 25375, 38672, 38672, 46108, 29641, 46524, 46533, 49601, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 49620, 37001, 25393, 22411, 29448, 22411, 49639, 26727, 26727, 48625, 36734, 30990, 43097, 49680, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 49703, 38672, 38672, 26931, 22475, 22475, 49727, 22475, 22475, 48053, 22411, 22411, 49748, 22411, 22411, 46748, 26727, 26727, 49768, 26727, 26727, 32918, 33802, 20903, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 49788, 22475, 22475, 28015, 33854, 26700, 22411, 22411, 22411, 27851, 42367, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 45477, 38672, 38672, 43215, 38672, 38672, 49711, 38672, 38672, 38672, 49707, 38672, 38672, 27156, 49805, 37753, 37630, 26453, 49986, 49826, 25375, 38672, 20236, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 28133, 26929, 22475, 22475, 22475, 47834, 25393, 22411, 22411, 22411, 49862, 26727, 26727, 26727, 37879, 30990, 39463, 38672, 45808, 38672, 38672, 38672, 38672, 38672, 38672, 29514, 38672, 38672, 28258, 49898, 22475, 31756, 22475, 35786, 22411, 49919, 22411, 36688, 22411, 37334, 40766, 26727, 26727, 49936, 26727, 32919, 33803, 38672, 25655, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 37984, 22475, 22475, 22475, 35151, 22411, 46398, 22411, 22411, 22411, 43919, 26727, 31302, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38999, 38672, 22475, 22475, 26805, 22475, 49623, 33854, 22411, 22411, 49957, 22411, 49975, 26727, 26727, 47510, 26727, 49846, 33795, 38672, 38672, 18612, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 30025, 38672, 38672, 50002, 26931, 50023, 22475, 27060, 22411, 22411, 28347, 50040, 26727, 22521, 26313, 38672, 40323, 38672, 27136, 29066, 42143, 22411, 50062, 26977, 27488, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 25323, 38672, 38672, 38672, 38672, 22098, 38672, 38672, 38672, 38672, 42922, 41360, 38672, 38672, 38672, 44448, 27298, 33333, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 25375, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 25393, 22411, 22411, 22411, 22690, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 34339, 19585, 19583, 40183, 33676, 50079, 27766, 27768, 50110, 33673, 34350, 50128, 50140, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 25515, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 20613, 18794, 19200, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 18475, 50434, 18503, 18525, 50156, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 20273, 38672, 42922, 31104, 31112, 50226, 50240, 50248, 42483, 50272, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 50505, 38672, 38672, 38672, 25547, 38672, 38672, 25544, 18953, 18958, 18794, 35998, 18531, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19406, 50434, 18503, 18525, 18547, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 42589, 38672, 38672, 38672, 38672, 24842, 35017, 50315, 50319, 50335, 50343, 43995, 50367, 20832, 38672, 38672, 38672, 43215, 38672, 38672, 25359, 38672, 38672, 23171, 38672, 38672, 38672, 23167, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 29641, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 19075, 50434, 18503, 18525, 50409, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 20424, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 20532, 20548, 20592, 20589, 50171, 20608, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 20939, 38672, 38672, 38672, 38672, 30470, 38672, 38672, 38672, 38672, 42922, 38672, 38672, 38672, 38672, 38672, 38672, 24860, 25344, 38672, 38672, 38672, 43215, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28256, 42141, 22411, 26453, 44280, 27268, 22230, 38672, 38672, 38672, 29641, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26929, 22475, 22475, 22475, 22475, 36544, 22411, 22411, 22411, 33858, 26727, 26727, 26727, 26727, 30990, 39463, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 28258, 22475, 22475, 22475, 22475, 35786, 22411, 22411, 22411, 22411, 22411, 37334, 26727, 26727, 26727, 26727, 26727, 32919, 33803, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 26931, 22475, 22475, 22475, 22475, 22475, 33849, 22411, 22411, 22411, 22411, 22411, 33324, 26727, 26727, 26727, 26727, 26727, 32918, 33802, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 22475, 22475, 22475, 22475, 28015, 33854, 22411, 22411, 22411, 22411, 27851, 26727, 26727, 26727, 26727, 22521, 33795, 38672, 38672, 38672, 38672, 38672, 28255, 22475, 22475, 22475, 29442, 22411, 22411, 22411, 26485, 26727, 26727, 26727, 26998, 46887, 38672, 38672, 38672, 26931, 22475, 22475, 42142, 22411, 22411, 28347, 26727, 26727, 22521, 26313, 38672, 38672, 38672, 27136, 22475, 42143, 22411, 22411, 26977, 26727, 22520, 26312, 34036, 26929, 22475, 42144, 22411, 26975, 26727, 26310, 35759, 22476, 22411, 26978, 48196, 20435, 28340, 26976, 39617, 42139, 28345, 26456, 28257, 28343, 26456, 28257, 28345, 26459, 33538, 36362, 36357, 34905, 28863, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38956, 38672, 38672, 29796, 50456, 50460, 50460, 50482, 38955, 50476, 50498, 38672, 38672, 38672, 38672, 38672, 38672, 50505, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 18953, 18958, 18794, 35998, 19418, 35990, 45351, 38672, 18269, 42564, 38672, 38672, 40144, 38672, 23032, 18306, 18356, 18382, 18387, 18403, 18422, 18462, 20670, 18475, 50434, 18503, 18525, 50156, 19412, 50440, 18509, 36003, 19232, 20563, 38672, 46930, 18591, 38672, 38672, 37574, 18609, 18628, 33736, 18652, 18685, 18722, 18753, 18745, 18769, 18406, 25849, 18792, 20360, 18810, 18830, 18835, 19138, 18794, 20364, 18814, 18794, 18839, 19540, 19955, 37554, 48943, 18855, 18871, 18894, 40258, 38672, 38976, 18931, 18947, 18974, 19016, 19062, 19169, 19103, 19129, 20726, 19934, 19154, 19185, 19222, 19248, 20726, 19934, 19154, 19185, 19222, 19273, 19000, 30964, 19299, 19315, 28712, 19342, 25187, 19377, 19393, 19434, 19464, 19495, 19569, 19608, 24938, 19905, 19631, 19046, 19601, 24931, 19898, 19624, 19039, 19647, 19687, 43796, 19722, 19792, 19745, 19771, 19808, 19113, 19859, 19875, 19921, 18446, 19976, 19994, 24983, 18444, 19974, 19992, 20321, 18562, 47383, 20010, 46515, 35979, 20039, 20679, 20105, 20160, 20116, 20132, 20159, 20115, 20176, 19479, 20207, 20223, 20259, 20298, 20337, 20380, 20402, 21368, 20386, 20408, 21374, 19283, 50527, 20452, 20468, 20484, 20497, 50424, 20500, 20516, 26100, 20548, 20592, 20589, 50171, 18953, 19547, 18794, 18487, 20629, 20143, 19945, 20660, 18437, 21954, 20695, 20711, 21969, 19448, 21939, 20755, 19510, 19659, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672, 94505, 94505, 90408, 90408, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 1, 12290, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 0, 94505, 90408, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 364, 94505, 90408, 94505, 94505, 94505, 94505, 94505, 94505, 94505, 69632, 73728, 94505, 94505, 94505, 94505, 94505, 65536, 94505, 3, 0, 0, 2183168, 0, 0, 0, 90408, 94505, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 1636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1645, 0, 0, 2732032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2904064, 2908160, 0, 0, 0, 0, 0, 1699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2963, 0, 0, 0, 0, 0, 2424832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2625536, 0, 0, 0, 0, 0, 2045, 0, 0, 0, 0, 2049, 0, 0, 0, 0, 0, 0, 0, 2711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2976, 0, 534, 534, 534, 534, 534, 2699264, 2715648, 0, 0, 2772992, 2805760, 2830336, 0, 2863104, 2920448, 0, 0, 0, 0, 0, 0, 0, 303, 303, 303, 303, 0, 303, 303, 303, 303, 0, 2805760, 2920448, 0, 0, 0, 0, 0, 2920448, 0, 0, 0, 0, 0, 0, 0, 2732032, 0, 2179072, 2179072, 2179072, 2179072, 2424832, 2433024, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3125248, 2625536, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2699264, 2179072, 2715648, 2179072, 2723840, 2179072, 2732032, 2772992, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2551808, 2125824, 2125824, 2125824, 2125824, 2125824, 2637824, 2125824, 2179072, 2179072, 2805760, 2179072, 2830336, 2179072, 2179072, 2863104, 2179072, 2179072, 2179072, 2179072, 2920448, 2179072, 2179072, 2179072, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 0, 2502656, 0, 0, 3010560, 0, 0, 0, 0, 2990080, 2179072, 2179072, 2699264, 2125824, 2715648, 2125824, 2723840, 2125824, 2732032, 2772992, 2125824, 2125824, 2125824, 2805760, 2125824, 2830336, 2125824, 2125824, 2863104, 2125824, 2125824, 2125824, 2125824, 2920448, 2863104, 2125824, 2125824, 2125824, 2125824, 2920448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 1142784, 0, 2179072, 2125824, 2125824, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 975, 2125824, 0, 0, 0, 0, 0, 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 0, 735, 0, 0, 0, 0, 735, 0, 741, 0, 0, 0, 2789376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3137, 0, 0, 2142208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2733, 0, 2662400, 0, 2813952, 0, 0, 0, 0, 2375680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 351, 352, 0, 0, 0, 0, 2584576, 0, 0, 0, 0, 2838528, 0, 0, 2838528, 0, 0, 0, 0, 0, 0, 0, 0, 1122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1186, 0, 0, 0, 0, 0, 0, 0, 2891776, 0, 0, 0, 0, 0, 2392064, 2412544, 0, 0, 2838528, 0, 0, 0, 0, 0, 0, 262144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2408448, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 0, 2126724, 2126724, 2617344, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2662400, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2584576, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2801664, 2813952, 2179072, 2838528, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 1798, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2662400, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2801664, 2813952, 2125824, 2838528, 2125824, 2813952, 2125824, 2838528, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3125248, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2822144, 0, 0, 2883584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3080192, 3100672, 3104768, 0, 0, 0, 0, 3186688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 2797568, 0, 0, 0, 0, 0, 0, 0, 2850816, 2867200, 0, 0, 2883584, 0, 0, 0, 0, 0, 2072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3134, 0, 0, 0, 0, 2465792, 0, 0, 2719744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3014656, 3207168, 0, 2691072, 0, 0, 3215360, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2179072, 2461696, 2465792, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2523136, 2179072, 2179072, 2179072, 0, 1342, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2473984, 2478080, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2600960, 2179072, 2179072, 2179072, 2179072, 2641920, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 1047, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3035136, 2125824, 2125824, 3072000, 2125824, 2125824, 2125824, 3121152, 2125824, 2125824, 3141632, 2125824, 2125824, 2125824, 3170304, 2179072, 2179072, 2719744, 2179072, 2179072, 2179072, 2179072, 2179072, 2768896, 2777088, 2781184, 2797568, 2822144, 2179072, 2179072, 2179072, 0, 900, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 298, 0, 299, 0, 302, 0, 303, 0, 0, 0, 2473984, 2478080, 2179072, 3063808, 2179072, 2179072, 2179072, 2179072, 3100672, 2179072, 2179072, 3133440, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2551808, 2179072, 2179072, 2179072, 2179072, 2179072, 2637824, 2179072, 2179072, 2179072, 2179072, 3207168, 2179072, 0, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2719744, 2125824, 2125824, 2125824, 2125824, 2125824, 2768896, 2777088, 2781184, 2797568, 2822144, 2125824, 2125824, 2125824, 2883584, 2179072, 2912256, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3039232, 2125824, 2912256, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3039232, 2125824, 2125824, 0, 2125824, 2126799, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 245760, 0, 0, 2179072, 2125824, 2125824, 3063808, 2125824, 2125824, 2125824, 2125824, 2125824, 3100672, 2125824, 2125824, 3133440, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2179072, 2125824, 2125824, 2457600, 2179072, 2179072, 2179072, 2179072, 2457600, 2125824, 2125824, 2125824, 3207168, 2125824, 0, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 1894, 2125824, 2125824, 2125824, 2408448, 2125824, 2125824, 2125824, 2125824, 2125824, 3207168, 2125824, 2179072, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 0, 2924544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3162112, 3170304, 0, 0, 3219456, 3035136, 0, 0, 0, 0, 0, 3072000, 2650112, 0, 0, 2809856, 0, 0, 0, 0, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 1654, 0, 2686976, 2736128, 0, 0, 2531328, 2707456, 0, 3190784, 0, 0, 2576384, 0, 0, 0, 0, 0, 0, 0, 1688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2742, 0, 0, 0, 0, 0, 0, 0, 3121152, 3141632, 0, 0, 0, 2924544, 0, 2682880, 0, 0, 0, 0, 0, 0, 3112960, 2387968, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2453504, 2179072, 2473984, 2482176, 2179072, 2179072, 2179072, 0, 901, 2125824, 2125824, 2125824, 2125824, 2125824, 2424832, 2433024, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 2179072, 2125824, 2125824, 2179072, 2179072, 2179072, 2531328, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2605056, 2179072, 2629632, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2527232, 2125824, 2125824, 2125824, 2125824, 2125824, 3092480, 2125824, 2527232, 2125824, 2650112, 2179072, 2179072, 2179072, 2707456, 2179072, 2736128, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2887680, 2179072, 2125824, 2125824, 2125824, 2125824, 2441216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2932736, 2179072, 2924544, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3035136, 2179072, 2179072, 3072000, 2179072, 2125824, 2658304, 2973696, 2125824, 2125824, 2658304, 2973696, 2125824, 2711552, 2560000, 2179072, 2560000, 2125824, 2560000, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 975, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2179072, 2125824, 2125824, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 1047, 0, 0, 2179072, 2125824, 2125824, 2179072, 3121152, 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 2125824, 2125824, 3190784, 3194880, 2125824, 0, 0, 0, 0, 0, 0, 2387968, 2125824, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2453504, 2125824, 2707456, 2125824, 2736128, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2887680, 2125824, 2125824, 2924544, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3141632, 2125824, 2125824, 2125824, 3170304, 2125824, 2125824, 3190784, 3194880, 2125824, 2179072, 2125824, 2125824, 2179072, 2125824, 2125824, 2179072, 2125824, 2125824, 2985984, 2985984, 2985984, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 419, 419, 0, 0, 65536, 419, 2179072, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 2125824, 2125824, 3112960, 3219456, 0, 0, 0, 0, 0, 0, 0, 1701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1624, 0, 0, 0, 0, 0, 0, 0, 3022848, 0, 0, 3145728, 0, 3203072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 336, 0, 0, 0, 0, 0, 0, 0, 0, 3067904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2445312, 0, 2842624, 0, 0, 0, 2637824, 0, 0, 0, 0, 2621440, 0, 0, 0, 0, 0, 2100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2727936, 0, 0, 0, 3084288, 3182592, 2899968, 0, 2961408, 0, 0, 2179072, 2179072, 2416640, 2179072, 2179072, 2179072, 2445312, 2179072, 2179072, 2179072, 0, 901, 2126724, 2126724, 2126724, 2126724, 2126724, 2425732, 2433924, 2126724, 2126724, 2126724, 2126724, 2458574, 2126798, 2126798, 2126798, 2126798, 2183168, 0, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, 0, 0, 396, 0, 0, 2179072, 2179072, 2179072, 2727936, 2752512, 2179072, 2179072, 2179072, 2842624, 2846720, 2179072, 2895872, 2916352, 2179072, 2179072, 2945024, 2179072, 2179072, 2994176, 2179072, 3002368, 2179072, 2179072, 3022848, 2179072, 3067904, 3084288, 3096576, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 237568, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2605056, 2125824, 2629632, 2125824, 2125824, 2650112, 2125824, 2125824, 2125824, 2707456, 2125824, 2736128, 2125824, 2125824, 2125824, 2125824, 2179072, 2179072, 2179072, 3223552, 0, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2125824, 2600960, 2125824, 2125824, 2125824, 2125824, 2641920, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2940, 0, 2637824, 2125824, 2125824, 2125824, 2125824, 2727936, 2752512, 2125824, 2125824, 2125824, 2125824, 2842624, 2846720, 2125824, 2895872, 2916352, 2125824, 2125824, 2125824, 2125824, 2945024, 2125824, 2125824, 2994176, 2125824, 3002368, 2125824, 2125824, 3022848, 2125824, 3067904, 3084288, 2125824, 3096576, 2125824, 2125824, 0, 0, 0, 2928640, 0, 0, 0, 3059712, 0, 2543616, 2666496, 0, 2633728, 0, 0, 0, 0, 0, 0, 766, 767, 0, 0, 0, 754, 0, 0, 774, 0, 2179072, 2179072, 2179072, 2494464, 2179072, 2179072, 2514944, 2179072, 2179072, 2179072, 2543616, 2547712, 2179072, 2179072, 2596864, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 2593668, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126798, 0, 0, 0, 0, 0, 0, 2510848, 2514944, 0, 0, 2547712, 2596864, 0, 0, 0, 0, 0, 0, 1164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1564, 0, 1566, 0, 0, 0, 2179072, 2179072, 3059712, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2928640, 2125824, 2125824, 2125824, 2998272, 2125824, 2125824, 2125824, 2125824, 3059712, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3178496, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3010560, 2125824, 2125824, 2125824, 2125824, 2125824, 2502656, 2125824, 2125824, 2125824, 2494464, 2125824, 2125824, 2514944, 2125824, 2125824, 2125824, 2543616, 2547712, 2125824, 2125824, 2596864, 2125824, 2125824, 2125824, 2125824, 2125824, 3059712, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3178496, 2179072, 2125824, 2125824, 2179072, 2126724, 2126724, 2126798, 2126798, 2441216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2932736, 2965504, 0, 0, 3076096, 0, 0, 2695168, 3174400, 2646016, 2613248, 2703360, 0, 0, 0, 0, 2977792, 0, 0, 3047424, 3129344, 0, 2981888, 2396160, 0, 3153920, 0, 0, 0, 2740224, 0, 0, 0, 0, 0, 0, 1106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, 0, 2793472, 0, 0, 0, 0, 0, 2469888, 2506752, 2756608, 0, 0, 2580480, 0, 0, 0, 0, 0, 0, 1146880, 0, 1146880, 0, 0, 0, 0, 0, 0, 0, 302, 302, 302, 302, 0, 302, 302, 302, 302, 0, 2396160, 2400256, 2179072, 2179072, 2441216, 2179072, 2469888, 2179072, 2179072, 2179072, 2519040, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 241664, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 2179072, 2125824, 2125824, 2179072, 2179072, 2125824, 2125824, 2125824, 2588672, 2179072, 2613248, 2646016, 2179072, 2179072, 2695168, 2756608, 2179072, 2179072, 2179072, 2932736, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 245760, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2584576, 2125824, 2125824, 2125824, 2125824, 2125824, 2617344, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2662400, 2179072, 2179072, 2179072, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2396160, 2400256, 2125824, 2125824, 2441216, 2125824, 2469888, 2125824, 2125824, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2125824, 2519040, 2125824, 2125824, 2125824, 2125824, 2588672, 2125824, 2613248, 2646016, 2125824, 2125824, 2695168, 2756608, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 0, 3108864, 3198976, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3503, 2953216, 0, 0, 2826240, 3158016, 2428928, 0, 3018752, 2764800, 2572288, 0, 0, 3051520, 2179072, 2428928, 2437120, 2179072, 2486272, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2654208, 2678784, 2760704, 2764800, 2854912, 2969600, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2125824, 2428928, 2437120, 2125824, 2486272, 2125824, 2125824, 2125824, 2125824, 2125824, 2654208, 2678784, 2760704, 2764800, 2785280, 2854912, 2969600, 2125824, 3006464, 2125824, 3018752, 2125824, 2125824, 2125824, 2125824, 3149824, 2179072, 3051520, 2125824, 3051520, 2125824, 3051520, 0, 2490368, 2498560, 0, 0, 0, 0, 2875392, 0, 0, 0, 3132, 0, 0, 2834432, 0, 3227648, 2568192, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 2179072, 2179072, 2179072, 2555904, 2564096, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3137536, 2125824, 2125824, 2125824, 2125824, 2457600, 2125824, 2125824, 2125824, 2125824, 2183168, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 333, 0, 0, 2125824, 3137536, 2125824, 2125824, 2498560, 2125824, 2125824, 2125824, 2555904, 2564096, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3132, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2126725, 2125824, 2125824, 2125824, 2502656, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2125824, 2125824, 2502656, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3010560, 2179072, 2179072, 2126724, 2126724, 2503556, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2592768, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3117056, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2928640, 2179072, 2179072, 2179072, 2998272, 2179072, 2179072, 3031040, 0, 0, 0, 2179072, 2449408, 2179072, 2535424, 2179072, 2609152, 2179072, 2859008, 2179072, 2179072, 2179072, 3031040, 2125824, 2449408, 2125824, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040, 2125824, 2125824, 2449408, 2125824, 2125824, 2125824, 2125824, 2461696, 2465792, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2523136, 2125824, 2125824, 2125824, 298, 0, 0, 0, 298, 0, 299, 0, 0, 0, 299, 0, 302, 2125824, 2125824, 2125824, 3026944, 2404352, 2125824, 2125824, 2125824, 2125824, 3026944, 2539520, 0, 2949120, 2179072, 2658304, 2973696, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 452, 452, 111044, 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 452, 111044, 111044, 111044, 111044, 111044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 360, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2124, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 847, 534, 534, 861, 534, 534, 0, 302, 118784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3127, 0, 0, 0, 302, 0, 0, 0, 302, 119197, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 302, 0, 0, 0, 0, 302, 302, 302, 302, 302, 302, 0, 0, 0, 0, 0, 302, 0, 302, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2966, 0, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 33396, 299, 0, 2134016, 49784, 303, 0, 0, 0, 0, 0, 2428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 302, 0, 0, 0, 2424832, 2433024, 0, 0, 2457600, 2105631, 12290, 3, 0, 0, 293, 0, 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, 0, 2024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, 0, 790, 0, 793, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 122880, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 147456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3148, 0, 0, 0, 0, 1067, 1071, 0, 0, 1075, 1079, 0, 2424832, 2433024, 0, 0, 2457600, 0, 0, 0, 131072, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2479, 2437, 0, 0, 0, 0, 0, 2484, 0, 0, 0, 0, 0, 0, 1675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3260, 0, 0, 534, 534, 534, 131072, 0, 0, 131072, 131072, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 131072, 0, 0, 131072, 0, 0, 0, 0, 0, 135168, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225708, 0, 0, 0, 135168, 0, 0, 135168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 135168, 0, 135168, 135168, 135168, 135168, 135168, 135168, 0, 135168, 135168, 135168, 135168, 135168, 135168, 0, 0, 0, 0, 0, 135168, 0, 135168, 1, 12290, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 629, 630, 0, 2134016, 633, 634, 0, 0, 0, 0, 0, 2725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200245, 2200245, 2200245, 0, 0, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 1434, 2125824, 2125824, 2125824, 2125824, 2932736, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3129344, 2125824, 2125824, 3153920, 3166208, 3174400, 2506752, 2506752, 2506752, 0, 303, 139264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 303, 0, 0, 0, 303, 69632, 139681, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2013, 0, 0, 0, 0, 303, 303, 303, 303, 303, 303, 0, 0, 0, 0, 0, 303, 0, 303, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 3, 0, 0, 2183168, 0, 0, 0, 0, 0, 298, 33399, 0, 2134016, 302, 49787, 0, 0, 0, 0, 0, 2763, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 3020, 556, 556, 556, 61440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 360, 300, 300, 300, 143660, 370, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 143660, 300, 300, 143660, 300, 300, 300, 143730, 300, 300, 300, 143730, 69632, 73728, 300, 300, 143660, 300, 300, 65536, 300, 300, 0, 0, 300, 300, 143660, 300, 300, 300, 300, 300, 300, 300, 300, 300, 365, 300, 0, 143660, 300, 300, 300, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 300, 300, 143660, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 143730, 300, 300, 300, 300, 300, 300, 300, 300, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 300, 300, 300, 300, 300, 300, 300, 300, 143660, 300, 143660, 143660, 143660, 143660, 300, 143660, 143660, 143660, 143660, 143660, 143660, 300, 0, 300, 0, 300, 300, 300, 143660, 300, 143660, 143660, 143660, 143660, 143660, 143730, 143660, 143730, 143730, 143730, 143730, 143730, 143730, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 143660, 1, 12290, 0, 0, 0, 0, 2200245, 2200245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 1154, 0, 0, 0, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 155648, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 155648, 155648, 0, 155648, 155648, 0, 12290, 0, 0, 0, 0, 155648, 0, 155648, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 1148, 0, 0, 0, 0, 0, 0, 0, 0, 1157, 3, 0, 0, 2183168, 126976, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2446, 0, 0, 0, 0, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 163840, 159744, 159744, 159744, 159744, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 159744, 163840, 159744, 159744, 159744, 159744, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 131072, 131072, 25155, 0, 0, 0, 159744, 0, 0, 0, 25155, 25155, 25155, 159744, 25155, 25155, 25155, 25155, 25155, 25155, 25155, 159744, 159744, 159744, 159744, 25155, 159744, 25155, 1, 12290, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 24576, 975, 2125824, 2125824, 2125824, 2125824, 3092480, 0, 0, 0, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2404352, 2125824, 2125824, 2125824, 2125824, 2592768, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2449408, 0, 2535424, 2125824, 2609152, 2125824, 2859008, 2125824, 2125824, 2125824, 3031040, 2125824, 2527232, 0, 0, 0, 2179072, 2527232, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 1, 12290, 167936, 167936, 167936, 0, 0, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 155648, 0, 172032, 172032, 0, 172032, 0, 0, 172032, 172032, 0, 172032, 0, 0, 0, 0, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 0, 0, 172032, 172032, 0, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0, 0, 1, 288, 3, 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 1, 0, 176128, 176128, 176128, 0, 0, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0, 347, 3, 78114, 78114, 292, 0, 627, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245760, 0, 0, 0, 0, 78114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 1102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 1146, 0, 0, 0, 0, 1151, 0, 0, 0, 0, 0, 0, 0, 346, 0, 404, 0, 0, 0, 0, 0, 404, 0, 0, 0, 2098, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2717, 0, 0, 534, 2135, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2147, 534, 534, 534, 534, 534, 534, 1775, 534, 534, 534, 1780, 534, 534, 534, 534, 534, 534, 534, 2545, 534, 534, 534, 534, 534, 534, 0, 2549, 2220, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2232, 556, 556, 556, 556, 556, 556, 2590, 556, 556, 556, 556, 556, 556, 2598, 556, 556, 2307, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2319, 580, 580, 580, 0, 0, 0, 2006, 0, 1069, 0, 0, 0, 2008, 0, 1073, 0, 2573, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1396, 0, 0, 2955, 0, 0, 0, 2959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, 0, 372, 0, 0, 0, 534, 3150, 534, 534, 534, 3153, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2547, 534, 534, 534, 0, 0, 3161, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 580, 3206, 580, 580, 580, 3209, 580, 580, 580, 580, 580, 580, 580, 580, 2679, 580, 580, 580, 534, 580, 556, 534, 580, 580, 3217, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 580, 580, 3309, 580, 580, 580, 580, 3310, 3311, 580, 580, 580, 580, 580, 580, 580, 580, 2875, 580, 580, 580, 580, 580, 580, 580, 580, 3071, 580, 580, 580, 580, 580, 580, 580, 580, 3233, 580, 580, 580, 580, 534, 580, 556, 1993, 534, 534, 534, 1997, 556, 556, 556, 2001, 534, 534, 534, 3339, 534, 534, 534, 534, 534, 534, 3345, 534, 534, 534, 534, 556, 3407, 556, 3409, 556, 556, 556, 556, 556, 556, 556, 556, 1373, 556, 556, 556, 556, 556, 556, 556, 3364, 556, 580, 580, 580, 580, 580, 580, 3370, 580, 580, 580, 580, 580, 580, 3376, 580, 580, 580, 3380, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2925, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 3391, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2198, 534, 2200, 534, 534, 534, 534, 534, 534, 3406, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 556, 556, 556, 556, 3422, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1449, 580, 580, 580, 580, 580, 580, 580, 3522, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 3585, 534, 556, 556, 3, 78114, 78114, 292, 0, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 2973, 0, 0, 2975, 0, 0, 534, 534, 2980, 534, 534, 534, 534, 534, 534, 2532, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2793, 534, 534, 534, 534, 534, 0, 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2732, 0, 0, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 0, 192965, 0, 1, 12290, 192965, 192965, 192965, 0, 0, 192965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1201, 0, 0, 0, 0, 0, 0, 0, 0, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 0, 192965, 192965, 192965, 192965, 192965, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 304, 0, 0, 0, 0, 0, 0, 0, 0, 196608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1582, 0, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727, 406, 406, 406, 406, 406, 406, 0, 0, 0, 0, 0, 406, 0, 406, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118784, 298, 3, 78114, 78114, 292, 0, 0, 0, 0, 0, 298, 299, 0, 301, 302, 303, 0, 0, 0, 0, 0, 3142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2978, 534, 534, 534, 534, 0, 0, 0, 0, 733, 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1240, 0, 0, 0, 1244, 0, 0, 1175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2871296, 0, 0, 1171, 1171, 0, 0, 0, 1175, 1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 253952, 0, 0, 0, 0, 580, 580, 580, 1540, 2005, 0, 0, 0, 0, 1546, 2007, 0, 0, 0, 0, 1552, 0, 0, 0, 1558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 2009, 0, 0, 0, 0, 1558, 2011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2549, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1410, 556, 556, 556, 556, 556, 0, 306, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 1155072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2705, 0, 0, 0, 0, 0, 204800, 204800, 0, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 204800, 205106, 204800, 204800, 205105, 205106, 204800, 205105, 205105, 204800, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 299, 0, 0, 0, 0, 0, 3, 0, 0, 2183794, 0, 0, 0, 0, 0, 298, 299, 151552, 2134016, 302, 303, 0, 0, 0, 0, 0, 155648, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 212992, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, 151552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 2179072, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 0, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3036110, 2126798, 2126798, 3072974, 2126798, 2126798, 2126798, 3122126, 2700164, 2126724, 2716548, 2126724, 2724740, 2126724, 2732932, 2773892, 2126724, 2126724, 2126724, 2806660, 2126724, 2831236, 2126724, 2126724, 973, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2864004, 2126724, 2126724, 2126724, 2126724, 2921348, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2626436, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3117956, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 0, 0, 975, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3224526, 2179072, 2126798, 2126724, 2179072, 2179072, 2126724, 2126724, 2126798, 2126798, 0, 2486272, 0, 0, 0, 0, 0, 2678784, 2854912, 3006464, 2126798, 2126798, 2126798, 2626510, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2700238, 2126798, 2716622, 2126798, 2724814, 2126798, 2126798, 2126798, 2126798, 2126798, 2454478, 2126798, 2474958, 2483150, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2532302, 2733006, 2773966, 2126798, 2126798, 2126798, 2806734, 2126798, 2831310, 2126798, 2126798, 2864078, 2126798, 2126798, 2126798, 2126798, 2921422, 2126724, 2409348, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2814852, 2126724, 2839428, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3126148, 2126724, 2126724, 2126724, 2126724, 2126798, 2126798, 2585550, 2126798, 2126798, 2126798, 2126798, 2126798, 2618318, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2663374, 2179072, 2179072, 2179072, 3207168, 2179072, 0, 0, 0, 0, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2552708, 2126724, 2126724, 2126724, 2126724, 2126724, 2638724, 2126724, 2126724, 2720644, 2126724, 2126724, 2126724, 2126724, 2126724, 2769796, 2777988, 2782084, 2798468, 2823044, 2126724, 2126724, 2126724, 2884484, 2126724, 2913156, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3040132, 2126724, 2126724, 2126724, 2728836, 2753412, 2126724, 2126724, 2126724, 2126724, 2843524, 2847620, 2126724, 2896772, 2917252, 2126724, 2126724, 2126724, 2126724, 3150724, 2126798, 2429902, 2438094, 2126798, 2487246, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2929614, 2126798, 2126798, 2126798, 2999246, 2126798, 3064708, 2126724, 2126724, 2126724, 2126724, 2126724, 3101572, 2126724, 2126724, 3134340, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2585476, 2126724, 2126724, 2126724, 2126724, 2126724, 2618244, 2126724, 2126724, 2126724, 2126798, 2720718, 2126798, 2126798, 2126798, 2126798, 2126798, 2769870, 2778062, 2782158, 2798542, 2823118, 2126798, 2126798, 2126798, 2884558, 2126798, 2913230, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3040206, 2126798, 2126798, 2126798, 2126798, 2126798, 2601934, 2126798, 2126798, 2126798, 2126798, 2642894, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2606030, 2126798, 2630606, 2126798, 2126798, 2651086, 2126798, 2126798, 2126798, 3064782, 2126798, 2126798, 2126798, 2126798, 2126798, 3101646, 2126798, 2126798, 3134414, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 0, 2179072, 2126798, 2126724, 2457600, 2179072, 2179072, 2179072, 2179072, 2458500, 2126798, 2126798, 2126798, 3208142, 2126798, 2179072, 2126798, 2126724, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3011460, 2126724, 2126724, 2126724, 2126798, 2126798, 2503630, 0, 0, 0, 0, 2388868, 2126724, 2126724, 2126724, 2421636, 2126724, 2126724, 2126724, 2126724, 2126724, 2454404, 2126724, 2126724, 2126724, 3027844, 2405326, 2126798, 2126798, 2126798, 2126798, 3027918, 2539520, 0, 2949120, 2179072, 2658304, 2973696, 2474884, 2483076, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2532228, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2601860, 2126724, 2126724, 2126724, 2126724, 2642820, 2126724, 2126724, 2126724, 2126724, 2126724, 2655108, 2679684, 2761604, 2765700, 2786180, 2855812, 2970500, 2126724, 3007364, 2126724, 3019652, 2605956, 2126724, 2630532, 2126724, 2126724, 2651012, 2126724, 2126724, 2126724, 2708356, 2126724, 2737028, 2126724, 2126724, 2126724, 2126724, 2462596, 2466692, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2524036, 2126724, 2126724, 2126724, 2126724, 3036036, 2126724, 2126724, 3072900, 2126724, 2126724, 2126724, 3122052, 2126724, 2126724, 3142532, 2126724, 2126724, 2126724, 3171204, 2126724, 2126724, 3191684, 3195780, 2126724, 0, 0, 0, 0, 0, 0, 2388942, 2126798, 2126798, 2126798, 2421710, 2708430, 2126798, 2737102, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2888654, 2126798, 2126798, 2925518, 2126798, 2126798, 2126798, 2126798, 2179072, 2126798, 2126724, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2802638, 2814926, 2126798, 2839502, 2126798, 2126798, 2126798, 3142606, 2126798, 2126798, 2126798, 3171278, 2126798, 2126798, 3191758, 3195854, 2126798, 2179072, 2126798, 2126724, 2179072, 2126724, 2126798, 2179072, 2126724, 2126798, 2179072, 2126724, 2126798, 2985984, 2986884, 2986958, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 315, 316, 316, 421, 422, 65536, 429, 2179072, 3112960, 3219456, 2126724, 2126724, 3113860, 3220356, 2126798, 2126798, 3113934, 3220430, 0, 0, 0, 0, 0, 0, 0, 2046, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1238, 0, 0, 0, 0, 0, 0, 2179072, 2179072, 2179072, 3223552, 0, 0, 2126724, 2126724, 2417540, 2126724, 2126724, 2126724, 2446212, 2126724, 2126724, 2126724, 2126724, 2888580, 2126724, 2126724, 2925444, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 0, 0, 2126798, 2126798, 2126798, 2409422, 2126798, 2126798, 2945924, 2126724, 2126724, 2995076, 2126724, 3003268, 2126724, 2126724, 3023748, 2126724, 3068804, 3085188, 2126724, 3097476, 2126724, 2126724, 2126724, 2519940, 2126724, 2126724, 2126724, 2126724, 2589572, 2126724, 2614148, 2646916, 2126724, 2126724, 2696068, 2757508, 2638798, 2126798, 2126798, 2126798, 2126798, 2728910, 2753486, 2126798, 2126798, 2126798, 2126798, 2843598, 2847694, 2126798, 2896846, 2917326, 2126798, 2126798, 2945998, 2126798, 2126798, 2995150, 2126798, 3003342, 2126798, 2126798, 3023822, 2126798, 3068878, 3085262, 2126798, 3097550, 2179072, 2179072, 3059712, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3178496, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3224452, 0, 0, 2126798, 2126798, 2417614, 2126798, 2126798, 2126798, 2446286, 2126798, 2126724, 2126724, 3060612, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3179396, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3126222, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3118030, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2495438, 2126798, 2126798, 2515918, 2126798, 2126798, 2126798, 2544590, 2548686, 2126798, 2126798, 2597838, 2126798, 2126798, 2126798, 2126798, 2425806, 2433998, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 0, 0, 0, 2179072, 2126798, 2126724, 2126798, 2126798, 2126798, 3060686, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3179470, 2179072, 2126798, 2126724, 2179072, 2126724, 2659204, 2974596, 2126724, 2126798, 2659278, 2974670, 2126798, 2711552, 2560000, 2179072, 2560900, 2126724, 2560974, 2126798, 2126798, 2126798, 2126798, 2462670, 2466766, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2524110, 2126798, 2126798, 2126798, 2126798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2473984, 2478080, 2179072, 2179072, 2179072, 3129344, 2179072, 2179072, 3153920, 3166208, 3174400, 2397060, 2401156, 2126724, 2126724, 2442116, 2126724, 2470788, 3154820, 3167108, 3175300, 2397134, 2401230, 2126798, 2126798, 2442190, 2126798, 2470862, 2126798, 2126798, 2126798, 2520014, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3130318, 2126798, 2126798, 3154894, 3167182, 3175374, 2506752, 2507726, 2507652, 2126798, 2126798, 2589646, 2126798, 2614222, 2646990, 2126798, 2126798, 2696142, 2757582, 2126798, 2126798, 2126798, 2126798, 2933710, 2126798, 2126798, 2126798, 2126798, 2593742, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2449408, 0, 2535424, 2179072, 3006464, 2179072, 3018752, 2179072, 2179072, 2179072, 3149824, 2126724, 2429828, 2438020, 2126724, 2487172, 2126724, 2126724, 2126724, 2126724, 2933636, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 3130244, 2126724, 2126724, 2126798, 2126798, 2655182, 2679758, 2761678, 2765774, 2786254, 2855886, 2970574, 2126798, 3007438, 2126798, 3019726, 2126798, 2126798, 2126798, 2126798, 0, 2502656, 0, 0, 3010560, 0, 0, 0, 0, 2990080, 2179072, 2179072, 2126798, 3150798, 2179072, 3051520, 2126724, 3052420, 2126798, 3052494, 0, 2490368, 2498560, 0, 0, 0, 0, 2875392, 2179072, 2179072, 2179072, 2555904, 2564096, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 3137536, 2126724, 2126724, 2126724, 3208068, 2126724, 0, 0, 0, 0, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2552782, 2126798, 2126798, 2126798, 2126798, 2126798, 2126724, 2499460, 2126724, 2126724, 2126724, 2556804, 2564996, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2929540, 2126724, 2126724, 2126724, 2999172, 2126724, 2126724, 2126724, 3138436, 2126798, 2126798, 2499534, 2126798, 2126798, 2126798, 2556878, 2565070, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 2126798, 3011534, 2126798, 2126798, 2126798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 323, 0, 2126724, 2450308, 2126724, 2536324, 2126724, 2610052, 2126724, 2859908, 2126724, 2126724, 2126724, 3031940, 2126724, 2126798, 2450382, 2126798, 2126798, 2126798, 2126798, 3093454, 0, 0, 0, 2404352, 2179072, 2179072, 2179072, 2179072, 3026944, 2405252, 2126724, 2126724, 2495364, 2126724, 2126724, 2515844, 2126724, 2126724, 2126724, 2544516, 2548612, 2126724, 2126724, 2597764, 2126724, 2126724, 2126724, 2663300, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2126724, 2802564, 2536398, 2126798, 2610126, 2126798, 2859982, 2126798, 2126798, 2126798, 3032014, 2126798, 2527232, 0, 0, 0, 2179072, 2527232, 2179072, 2179072, 2179072, 2179072, 2179072, 2126724, 2528132, 2126724, 2126724, 2126724, 2126724, 2126724, 3093380, 2126798, 2528206, 2126798, 2126798, 2126798, 2126798, 3138510, 2940928, 2941828, 2941902, 0, 0, 0, 0, 0, 2748416, 2879488, 0, 0, 0, 0, 0, 172032, 0, 172032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 122880, 122880, 0, 0, 0, 221184, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 221184, 0, 0, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 221184, 0, 0, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 338, 292, 0, 0, 0, 0, 0, 0, 221184, 0, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 221184, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139264, 299, 0, 0, 2142208, 0, 0, 0, 98304, 0, 0, 0, 53248, 0, 0, 0, 0, 0, 0, 0, 2061, 2062, 0, 0, 0, 0, 0, 0, 0, 0, 159744, 0, 0, 0, 0, 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 0, 1212, 0, 0, 0, 0, 0, 0, 0, 0, 1578, 0, 0, 0, 577536, 0, 0, 1583, 0, 0, 0, 302, 0, 303, 0, 0, 0, 303, 0, 0, 0, 2461696, 0, 0, 0, 0, 0, 0, 1159168, 416, 416, 0, 0, 0, 0, 0, 416, 0, 0, 98304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 2179072, 3121152, 2179072, 2179072, 3141632, 2179072, 2179072, 2179072, 3170304, 2179072, 2179072, 3190784, 3194880, 2179072, 901, 0, 0, 0, 0, 0, 229376, 0, 0, 0, 0, 0, 0, 0, 0, 1666, 0, 0, 0, 0, 0, 2958, 0, 0, 0, 0, 2962, 0, 0, 0, 0, 2967, 0, 0, 901, 0, 2387968, 2125824, 2125824, 2125824, 2420736, 2125824, 2125824, 2125824, 2125824, 2125824, 2453504, 2125824, 2473984, 2482176, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2531328, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3190784, 3194880, 2125824, 975, 0, 0, 0, 975, 0, 2387968, 2125824, 2125824, 2125824, 2420736, 2179072, 2179072, 2179072, 3223552, 901, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 2125824, 2125824, 2125824, 2125824, 3223552, 0, 0, 2125824, 2125824, 2416640, 2125824, 2125824, 2125824, 2445312, 2125824, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 0, 217088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 308, 0, 0, 0, 114688, 0, 241664, 258048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 677, 678, 0, 0, 0, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 386, 0, 0, 0, 2183168, 0, 0, 270336, 0, 0, 298, 299, 0, 2134016, 302, 303, 200704, 0, 0, 180224, 0, 0, 0, 0, 0, 0, 0, 0, 2424832, 2433024, 0, 0, 2457600, 20480, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2126724, 2126724, 2126724, 2126724, 2126724, 1, 12290, 2113825, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 2387968, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 381, 383, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12290, 0, 0, 266240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 339, 340, 2113825, 0, 0, 2183168, 0, 0, 0, 0, 0, 298, 299, 0, 2134016, 302, 303, 0, 0, 0, 0, 0, 237568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1657, 0, 0, 0, 0, 274432, 274432, 274432, 274432, 274432, 274432, 0, 0, 0, 0, 0, 274432, 0, 274432, 1, 12290, 3, 0, 0, 0, 0, 0, 0, 0, 90408, 90408, 90408, 90408, 0, 94505, 1, 12290, 3, 78114, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1611, 0, 0, 0, 3, 78114, 78114, 292, 0, 0, 0, 0, 0, 298, 299, 0, 0, 302, 303, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163264, 78114, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 307, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 3062, 580, 580, 2009, 0, 0, 0, 0, 0, 2011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, 0, 0, 2954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 0, 0, 2089, 0, 0, 0, 0, 0, 0, 0, 2086, 0, 0, 0, 0, 0, 2092, 0, 0, 290, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 681, 3, 78114, 78449, 292, 0, 0, 0, 0, 0, 298, 299, 0, 0, 302, 303, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 1138688, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 739, 0, 0, 0, 0, 0, 0, 1150976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 337, 0, 581, 557, 557, 557, 557, 557, 557, 557, 581, 581, 581, 534, 581, 581, 581, 581, 581, 581, 581, 557, 557, 534, 557, 581, 557, 581, 1, 12290, 1, 12290, 3, 78115, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1680, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 1, 12290, 282624, 282624, 282624, 0, 0, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2027, 0, 0, 0, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 0, 282624, 282624, 282624, 282624, 282624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 3047424, 3129344, 0, 2981888, 2396160, 0, 3153920, 3132, 0, 0, 2740224, 0, 0, 0, 0, 0, 0, 1181, 1183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1608, 1609, 1610, 0, 0, 0, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705, 0, 0, 0, 709, 0, 0, 0, 3108864, 3198976, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 3252, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 167936, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 3329, 0, 0, 2834432, 0, 3227648, 2568192, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 3329, 0, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 0, 2125824, 2125824, 0, 0, 0, 308, 0, 0, 0, 0, 0, 307, 0, 307, 308, 0, 307, 307, 0, 0, 0, 307, 307, 308, 308, 0, 0, 0, 0, 0, 0, 307, 407, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 308, 412, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 57344, 0, 0, 0, 0, 0, 0, 1120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1239, 0, 0, 0, 0, 0, 456, 456, 456, 482, 482, 456, 482, 482, 482, 482, 482, 482, 482, 507, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 527, 482, 482, 482, 482, 482, 535, 558, 535, 558, 535, 535, 558, 535, 582, 558, 558, 558, 558, 558, 558, 558, 582, 582, 582, 535, 582, 582, 582, 582, 582, 582, 582, 558, 558, 535, 558, 582, 558, 582, 1, 12290, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 697, 0, 0, 0, 0, 0, 0, 0, 704, 0, 0, 0, 0, 0, 0, 0, 0, 1639, 0, 0, 0, 0, 0, 0, 0, 0, 1660, 1661, 0, 1663, 0, 0, 0, 0, 0, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, 0, 2834432, 0, 3227648, 2568192, 2564096, 0, 2940928, 2179072, 2179072, 2498560, 0, 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 755, 0, 0, 0, 0, 0, 2134749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1169, 734, 0, 0, 0, 0, 0, 0, 761, 0, 0, 765, 0, 0, 0, 0, 772, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 172032, 0, 0, 0, 0, 65536, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 804, 0, 0, 0, 780, 0, 0, 0, 0, 0, 327, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 821, 776, 0, 0, 0, 0, 0, 825, 826, 776, 776, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 1677, 0, 1679, 0, 0, 0, 0, 0, 0, 776, 729, 776, 0, 534, 534, 836, 840, 534, 534, 534, 534, 534, 534, 866, 534, 871, 534, 878, 534, 881, 534, 534, 895, 534, 534, 556, 556, 556, 909, 913, 1018, 580, 1025, 580, 1028, 580, 580, 1042, 580, 580, 0, 0, 0, 840, 987, 913, 836, 1052, 881, 534, 534, 909, 1057, 954, 556, 556, 0, 983, 1062, 1028, 580, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78114, 1066, 0, 0, 1068, 1072, 0, 0, 1076, 1080, 0, 0, 0, 0, 0, 0, 0, 406, 406, 406, 406, 0, 406, 406, 406, 406, 0, 0, 1144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 515, 515, 0, 0, 0, 1634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3126, 0, 0, 1769, 534, 534, 1772, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1784, 534, 534, 534, 534, 534, 884, 534, 534, 534, 534, 534, 556, 556, 903, 556, 556, 0, 580, 580, 580, 984, 580, 990, 580, 580, 1003, 580, 580, 1014, 580, 534, 534, 534, 534, 1789, 534, 534, 534, 534, 534, 534, 534, 1341, 1799, 556, 556, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 534, 534, 556, 556, 556, 1806, 556, 556, 556, 556, 556, 1812, 556, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2370, 580, 580, 580, 580, 580, 580, 556, 556, 556, 1825, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 955, 556, 556, 556, 1885, 556, 556, 556, 556, 556, 556, 556, 26009, 1895, 580, 580, 580, 580, 580, 1902, 2017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 787, 0, 0, 0, 2042, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2051, 0, 0, 0, 0, 0, 0, 1196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1223, 0, 0, 0, 0, 0, 2109, 2110, 0, 0, 2112, 0, 0, 0, 2110, 0, 0, 2117, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 221184, 0, 0, 0, 0, 65536, 0, 2150, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1313, 0, 0, 0, 2464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3135, 0, 0, 534, 534, 534, 534, 2502, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2510, 534, 534, 534, 2601, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2611, 556, 556, 556, 556, 556, 2563, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1388, 556, 556, 556, 556, 1393, 556, 556, 556, 556, 2632, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1967, 0, 0, 0, 2698, 0, 0, 0, 0, 0, 0, 2703, 0, 0, 0, 0, 0, 0, 0, 2115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2729, 0, 0, 0, 0, 0, 0, 2749, 2750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 2762, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2521, 534, 534, 534, 534, 534, 2773, 534, 534, 2777, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2786, 556, 2820, 556, 556, 2824, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2833, 580, 580, 580, 2869, 580, 580, 2873, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2899, 580, 580, 580, 580, 580, 580, 2882, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2890, 580, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 3324, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 0, 221184, 0, 0, 0, 0, 2931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 3010, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 3412, 556, 556, 556, 556, 556, 556, 3051, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3091, 580, 3093, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 3132, 3387, 0, 3389, 0, 534, 3392, 534, 3394, 534, 534, 534, 534, 534, 534, 534, 534, 1777, 534, 534, 534, 534, 534, 534, 534, 534, 2157, 534, 534, 534, 534, 534, 534, 534, 534, 2182, 534, 534, 534, 534, 2187, 534, 534, 534, 534, 3448, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 3023, 556, 3461, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 3064, 580, 3475, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 3561, 534, 0, 3490, 0, 3492, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2794, 534, 534, 0, 0, 3533, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1281, 309, 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 420, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1109, 0, 1111, 1112, 0, 0, 0, 0, 0, 0, 443, 443, 420, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 526, 443, 526, 526, 526, 443, 526, 526, 526, 526, 443, 536, 559, 536, 559, 536, 536, 559, 536, 583, 559, 559, 559, 559, 559, 559, 559, 583, 583, 583, 536, 583, 583, 583, 583, 583, 583, 583, 559, 559, 609, 614, 583, 614, 620, 1, 12290, 534, 534, 874, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 580, 580, 580, 580, 580, 580, 1021, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 534, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3445, 534, 0, 0, 0, 1657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3262, 534, 534, 1785, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1006, 580, 580, 580, 0, 0, 1544, 0, 0, 0, 0, 0, 1550, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 167936, 580, 580, 1970, 580, 580, 580, 580, 580, 1977, 580, 580, 580, 580, 580, 580, 580, 1444, 580, 580, 580, 580, 580, 1456, 580, 580, 0, 0, 2425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 2612, 556, 556, 556, 556, 0, 2615, 0, 0, 0, 0, 580, 580, 580, 580, 580, 534, 556, 580, 0, 3382, 0, 0, 3385, 0, 0, 0, 580, 2621, 580, 580, 580, 580, 2625, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3221, 580, 580, 580, 580, 580, 0, 0, 0, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 0, 0, 0, 0, 0, 0, 1249, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 850, 534, 534, 534, 534, 534, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1172, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 422, 430, 421, 430, 0, 312, 430, 444, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 478, 483, 483, 494, 483, 483, 483, 483, 483, 483, 483, 483, 509, 509, 522, 522, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 509, 523, 523, 523, 523, 523, 537, 560, 537, 560, 537, 537, 560, 537, 584, 560, 560, 560, 560, 560, 560, 560, 584, 584, 584, 606, 584, 584, 584, 584, 584, 584, 607, 608, 608, 606, 608, 607, 608, 607, 1, 12290, 0, 0, 811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 695, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1720, 534, 534, 882, 534, 534, 556, 556, 955, 556, 556, 0, 580, 580, 1029, 580, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 3322, 0, 0, 3325, 0, 0, 0, 0, 1161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 0, 0, 1193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 1206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1218, 0, 0, 534, 534, 1254, 534, 1257, 534, 534, 534, 534, 534, 534, 534, 534, 1271, 534, 1276, 534, 534, 1280, 534, 534, 1283, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1294, 534, 534, 534, 534, 534, 1341, 901, 556, 556, 1345, 556, 556, 1349, 556, 556, 556, 556, 556, 0, 0, 0, 0, 0, 0, 580, 580, 580, 580, 580, 0, 3580, 0, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 1363, 556, 1368, 556, 556, 1372, 556, 556, 1375, 556, 556, 556, 556, 556, 0, 2296, 0, 0, 580, 580, 580, 580, 580, 580, 580, 2355, 580, 580, 580, 580, 2360, 580, 580, 580, 580, 1437, 580, 580, 1441, 580, 580, 580, 580, 580, 580, 580, 580, 1455, 580, 1460, 580, 580, 1464, 580, 580, 1467, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 188416, 534, 580, 556, 1669, 0, 0, 0, 0, 0, 0, 1676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1199, 1200, 0, 0, 0, 0, 0, 580, 1923, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1459, 580, 580, 1936, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1919, 580, 534, 2176, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 0, 534, 534, 534, 534, 2192, 2193, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 3022, 556, 2262, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1819, 556, 556, 556, 2278, 2279, 2280, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1846, 556, 556, 556, 1851, 556, 2349, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1985, 580, 580, 580, 2365, 2366, 2367, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 3558, 0, 3560, 534, 534, 0, 2399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 2465, 2466, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2090, 0, 0, 0, 0, 580, 580, 580, 2663, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 3105, 534, 534, 534, 534, 534, 2790, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 3019, 556, 556, 556, 556, 2917, 0, 0, 0, 0, 0, 2923, 0, 0, 0, 0, 0, 0, 0, 2927, 0, 0, 0, 0, 0, 2200246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1617, 0, 0, 0, 0, 0, 0, 0, 0, 2972, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2987, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 899, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3027, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1432, 26009, 1341, 975, 580, 0, 3139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1597, 0, 534, 534, 534, 534, 3175, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3438, 0, 3439, 0, 0, 0, 0, 0, 0, 0, 534, 3446, 534, 3447, 534, 534, 534, 3451, 534, 534, 534, 534, 534, 534, 534, 556, 3459, 556, 556, 556, 556, 556, 2589, 556, 556, 2593, 556, 556, 556, 556, 556, 556, 556, 2606, 556, 556, 556, 556, 556, 556, 556, 556, 2269, 556, 556, 556, 556, 556, 556, 556, 3460, 556, 556, 556, 3464, 556, 556, 556, 556, 556, 556, 556, 556, 580, 3473, 580, 0, 0, 2920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2926, 0, 0, 0, 0, 0, 1147, 0, 1149, 0, 0, 0, 0, 0, 0, 0, 0, 534, 557, 534, 557, 534, 534, 557, 534, 3474, 580, 580, 580, 3478, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 534, 3583, 3584, 534, 534, 556, 556, 3596, 556, 556, 556, 3598, 580, 580, 580, 3600, 0, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 3244, 0, 0, 0, 0, 0, 323, 323, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, 0, 0, 0, 0, 373, 0, 432, 438, 0, 445, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 484, 484, 495, 484, 484, 484, 484, 484, 484, 484, 484, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 538, 561, 538, 561, 538, 538, 561, 538, 585, 561, 561, 561, 561, 561, 561, 561, 585, 585, 585, 538, 585, 585, 585, 585, 585, 585, 585, 561, 561, 538, 561, 585, 561, 585, 1, 12290, 787, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 859, 534, 534, 534, 534, 534, 534, 2139, 534, 534, 2142, 534, 534, 534, 534, 534, 534, 534, 1760, 1761, 1762, 534, 534, 1765, 1766, 534, 534, 1114, 1115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1613, 0, 1100, 0, 1231, 0, 0, 0, 0, 0, 1115, 0, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 3088384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 1246, 1114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 1255, 534, 534, 534, 1341, 901, 556, 556, 1346, 556, 556, 556, 556, 556, 556, 556, 556, 1389, 556, 556, 556, 556, 556, 556, 556, 556, 1397, 556, 556, 556, 1401, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1880, 556, 556, 556, 556, 556, 580, 1438, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1934, 580, 580, 580, 1465, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1491, 580, 580, 1478, 580, 580, 580, 580, 580, 580, 580, 1487, 580, 580, 1489, 580, 580, 580, 1493, 1517, 580, 580, 580, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 534, 556, 580, 534, 556, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 135168, 135168, 0, 0, 65536, 135168, 556, 556, 556, 556, 1872, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1832, 556, 556, 556, 556, 1968, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2362, 580, 580, 2004, 0, 2005, 0, 0, 0, 0, 0, 2007, 0, 0, 0, 0, 0, 0, 0, 2418, 0, 0, 0, 0, 0, 2422, 0, 0, 2009, 0, 0, 0, 0, 0, 2011, 0, 0, 0, 0, 0, 2014, 0, 0, 0, 0, 0, 0, 1576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2077, 0, 0, 0, 0, 0, 2067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 827, 2121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 2770, 534, 534, 534, 534, 2137, 534, 534, 534, 534, 2141, 534, 534, 534, 534, 534, 534, 534, 534, 2518, 534, 534, 534, 534, 534, 534, 534, 534, 2803, 534, 534, 534, 534, 534, 534, 534, 534, 2989, 534, 534, 534, 534, 534, 534, 534, 534, 3165, 534, 534, 534, 534, 534, 534, 534, 534, 3270, 534, 534, 534, 534, 534, 534, 534, 534, 3280, 556, 556, 556, 556, 556, 556, 556, 1426, 556, 556, 556, 556, 26009, 1341, 975, 580, 556, 556, 2222, 556, 556, 556, 556, 2226, 556, 556, 556, 556, 556, 556, 556, 556, 1405, 556, 556, 556, 556, 556, 556, 556, 580, 580, 2309, 580, 580, 580, 580, 2313, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3527, 580, 580, 580, 0, 3531, 0, 0, 2462, 0, 0, 0, 0, 0, 2467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1640, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2489, 2490, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2522, 534, 534, 534, 534, 534, 534, 2529, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2993, 534, 534, 2620, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2376, 2660, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3316, 2707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1100, 0, 0, 0, 0, 2724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1686, 0, 0, 0, 0, 0, 0, 0, 2752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2028, 0, 0, 0, 534, 534, 534, 534, 534, 2800, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1307, 534, 534, 534, 534, 534, 2891, 580, 580, 580, 580, 580, 580, 580, 2897, 580, 580, 580, 580, 580, 580, 580, 1471, 580, 580, 580, 580, 580, 580, 580, 580, 1045, 580, 0, 0, 0, 534, 580, 556, 3128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1128, 534, 534, 534, 534, 534, 3176, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 3511, 556, 3513, 556, 556, 556, 556, 580, 556, 556, 3297, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3374, 580, 580, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 3397, 534, 534, 534, 534, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1392, 556, 556, 556, 556, 556, 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, 0, 324, 372, 327, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1110, 0, 0, 0, 0, 0, 324, 0, 0, 371, 371, 401, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 446, 459, 459, 459, 459, 459, 459, 459, 459, 472, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 485, 485, 459, 485, 485, 500, 502, 485, 485, 500, 485, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 528, 511, 511, 511, 511, 511, 539, 562, 539, 562, 539, 539, 562, 539, 586, 562, 562, 562, 562, 562, 562, 562, 586, 586, 586, 539, 586, 586, 586, 586, 586, 586, 586, 562, 562, 539, 562, 586, 562, 586, 1, 12290, 0, 651, 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 664, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 355, 0, 0, 466, 466, 466, 466, 466, 466, 466, 466, 471, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 471, 0, 713, 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, 724, 0, 0, 0, 0, 0, 0, 1621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, 763, 0, 0, 0, 0, 0, 771, 0, 773, 0, 0, 0, 0, 0, 0, 1637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 790, 793, 0, 0, 0, 793, 793, 790, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 106496, 0, 0, 0, 0, 106496, 106496, 0, 0, 0, 773, 0, 785, 0, 802, 0, 0, 0, 0, 793, 0, 700, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1141, 0, 810, 0, 0, 0, 0, 0, 810, 810, 813, 0, 0, 0, 773, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 367, 0, 384, 0, 350, 0, 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 771, 0, 0, 0, 0, 0, 385, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 822, 802, 822, 0, 534, 534, 837, 534, 843, 534, 534, 856, 534, 534, 867, 534, 872, 534, 534, 880, 883, 888, 534, 896, 534, 534, 556, 556, 556, 910, 556, 556, 556, 556, 556, 2604, 2605, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3189, 556, 556, 556, 556, 556, 556, 916, 556, 556, 929, 556, 556, 940, 556, 945, 556, 556, 953, 956, 961, 556, 969, 1019, 580, 580, 1027, 1030, 1035, 580, 1043, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 556, 2825, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2284, 556, 556, 556, 556, 556, 837, 534, 1053, 888, 534, 910, 556, 1058, 961, 556, 0, 984, 580, 1063, 1035, 580, 0, 2919, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2458, 0, 0, 0, 0, 1087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1097, 0, 0, 0, 0, 0, 0, 1659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2032, 0, 0, 0, 0, 0, 1104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2078, 0, 0, 0, 1129, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2471, 0, 0, 0, 0, 0, 1143, 0, 0, 0, 0, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 0, 0, 0, 2442, 0, 0, 0, 0, 0, 0, 0, 2450, 1121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1189, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 1139, 0, 0, 0, 0, 0, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2757, 2758, 0, 0, 0, 534, 1282, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1297, 1337, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1354, 556, 556, 1419, 556, 556, 556, 556, 556, 556, 1429, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 1523, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 2837, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1862, 1863, 556, 556, 556, 556, 1461, 580, 580, 580, 1466, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1915, 580, 580, 580, 580, 580, 580, 1481, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1933, 580, 580, 580, 1495, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1511, 580, 580, 580, 0, 2005, 0, 0, 0, 0, 0, 2007, 0, 0, 0, 0, 0, 0, 0, 2074, 0, 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 580, 580, 580, 1521, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 534, 556, 580, 3610, 3611, 3612, 534, 556, 580, 0, 0, 0, 0, 0, 0, 307, 442, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 0, 0, 1585, 0, 0, 1588, 1589, 1590, 0, 1592, 1593, 0, 0, 0, 0, 1598, 1631, 1632, 0, 0, 0, 0, 0, 0, 0, 0, 1641, 1642, 0, 0, 0, 0, 0, 0, 0, 155648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1212, 534, 534, 534, 0, 0, 0, 0, 1648, 0, 0, 1650, 0, 0, 0, 0, 1652, 1653, 0, 0, 0, 0, 0, 441, 0, 0, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 552, 575, 552, 575, 552, 552, 575, 552, 0, 0, 1671, 1672, 1673, 1674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2483, 0, 0, 0, 0, 0, 1683, 0, 0, 1686, 0, 0, 0, 0, 0, 1690, 0, 0, 0, 1694, 1695, 1706, 1566, 1566, 1708, 534, 1710, 534, 1711, 1712, 534, 1714, 534, 534, 534, 1718, 534, 534, 534, 534, 534, 886, 534, 534, 534, 534, 534, 556, 556, 908, 556, 556, 556, 556, 556, 2254, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1431, 556, 26009, 1341, 975, 1435, 534, 534, 1739, 534, 1741, 534, 534, 534, 534, 534, 534, 534, 534, 1749, 1750, 1752, 534, 1786, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1797, 1341, 0, 1802, 556, 556, 556, 556, 556, 3041, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3200, 556, 556, 556, 556, 556, 556, 1804, 556, 1805, 556, 1807, 556, 1809, 556, 556, 556, 1813, 556, 556, 556, 556, 556, 0, 0, 0, 0, 0, 0, 580, 580, 2618, 580, 580, 556, 556, 556, 556, 1826, 556, 556, 556, 556, 1830, 556, 556, 556, 556, 1834, 556, 556, 556, 556, 556, 3055, 556, 556, 556, 556, 556, 580, 580, 580, 3063, 580, 580, 580, 580, 1724, 1915, 1819, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 2692, 0, 0, 1836, 556, 556, 556, 556, 556, 556, 556, 556, 1844, 1845, 1847, 556, 556, 556, 556, 556, 0, 2297, 0, 0, 580, 580, 580, 580, 580, 580, 580, 2667, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2653, 580, 580, 580, 580, 2657, 580, 556, 556, 556, 1855, 1856, 1857, 556, 556, 1860, 1861, 556, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 2862, 580, 580, 580, 580, 556, 1869, 556, 556, 556, 1873, 556, 556, 556, 556, 556, 556, 556, 1882, 556, 556, 0, 580, 580, 580, 580, 580, 580, 580, 1002, 580, 580, 580, 580, 580, 580, 3555, 3556, 580, 580, 0, 0, 3559, 0, 534, 534, 1903, 580, 1905, 580, 580, 580, 1909, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3528, 580, 580, 0, 0, 0, 1922, 580, 580, 580, 580, 1926, 580, 580, 580, 580, 1930, 580, 1932, 580, 580, 580, 580, 580, 1524, 0, 1270, 1454, 1362, 534, 534, 534, 534, 534, 556, 1952, 1953, 580, 580, 1956, 1957, 580, 580, 580, 580, 580, 580, 580, 1965, 580, 580, 534, 534, 556, 556, 580, 580, 3321, 0, 0, 0, 3323, 0, 0, 0, 0, 0, 0, 2114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2605056, 0, 0, 0, 0, 2887680, 580, 1969, 580, 580, 580, 580, 580, 580, 580, 1978, 580, 580, 580, 580, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 580, 580, 1989, 534, 580, 556, 1766, 534, 1995, 534, 1861, 556, 1999, 556, 1957, 580, 2003, 580, 0, 2005, 0, 0, 0, 0, 0, 2007, 0, 0, 0, 0, 0, 0, 0, 2702, 0, 0, 0, 0, 0, 0, 0, 2706, 0, 2018, 0, 0, 2021, 2022, 0, 0, 0, 2026, 0, 0, 0, 0, 0, 0, 0, 414, 414, 0, 0, 0, 0, 0, 414, 0, 0, 0, 2069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 0, 2088, 0, 0, 0, 0, 0, 0, 0, 451, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 1147348, 2095, 0, 2097, 0, 0, 0, 0, 0, 0, 0, 0, 2106, 0, 0, 0, 0, 0, 0, 0, 184725, 184925, 184925, 184925, 0, 184925, 184925, 184925, 184925, 184925, 184925, 0, 0, 0, 0, 0, 184925, 0, 184925, 1, 12290, 534, 534, 534, 2153, 534, 2155, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1746, 534, 534, 534, 534, 534, 534, 2204, 2205, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2558, 556, 556, 556, 556, 2238, 556, 2240, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2231, 556, 556, 556, 556, 556, 2291, 2292, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 1506, 580, 580, 580, 580, 580, 1513, 580, 580, 580, 580, 2325, 580, 2327, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2318, 580, 580, 580, 580, 580, 2378, 2379, 580, 580, 2145, 2317, 2230, 534, 2385, 534, 534, 556, 2389, 556, 556, 0, 580, 580, 580, 580, 580, 580, 997, 580, 580, 580, 580, 580, 580, 2328, 580, 2330, 580, 580, 580, 580, 580, 580, 580, 2342, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1474, 580, 580, 580, 580, 580, 580, 580, 2393, 580, 580, 2005, 0, 2007, 0, 2009, 0, 2011, 0, 0, 0, 0, 0, 0, 0, 2727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1579, 0, 0, 0, 0, 0, 0, 0, 2437, 2438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1089, 0, 0, 534, 2526, 534, 534, 534, 2531, 534, 534, 534, 534, 534, 534, 534, 2538, 534, 534, 534, 534, 534, 534, 2169, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2782, 534, 534, 2785, 534, 534, 534, 534, 534, 534, 534, 2543, 534, 534, 534, 534, 534, 534, 534, 534, 0, 2549, 556, 556, 2587, 556, 556, 556, 556, 2591, 556, 556, 556, 2596, 556, 556, 556, 556, 556, 0, 2615, 0, 0, 0, 0, 580, 580, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 3386, 556, 556, 556, 2603, 556, 556, 556, 556, 556, 556, 556, 556, 2609, 556, 556, 556, 556, 556, 556, 3042, 556, 3044, 556, 556, 556, 556, 556, 556, 556, 1404, 556, 556, 1411, 556, 556, 556, 556, 556, 580, 580, 580, 2623, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1451, 580, 580, 580, 580, 580, 580, 2635, 580, 2637, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1914, 580, 580, 580, 580, 580, 580, 580, 2662, 580, 580, 580, 580, 580, 580, 580, 2669, 580, 580, 580, 580, 580, 580, 2895, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1046, 0, 0, 0, 534, 580, 556, 580, 580, 580, 2675, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 2913, 556, 2915, 580, 534, 534, 534, 2798, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3348, 534, 556, 556, 556, 556, 556, 2846, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2245, 556, 556, 556, 556, 0, 2943, 2944, 0, 2945, 0, 2947, 0, 0, 0, 0, 2949, 0, 0, 0, 0, 0, 0, 0, 225883, 225883, 225883, 225883, 225734, 225883, 225883, 225883, 225883, 225883, 225883, 225734, 225734, 225734, 225734, 225734, 225899, 225734, 225899, 1, 12290, 2968, 2969, 0, 2971, 0, 0, 2974, 0, 0, 0, 2977, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 2214, 556, 556, 556, 556, 556, 0, 0, 0, 0, 0, 0, 580, 2617, 580, 580, 580, 534, 2984, 534, 534, 534, 534, 534, 2988, 534, 534, 534, 534, 534, 534, 534, 2994, 534, 534, 534, 534, 534, 3000, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1763, 534, 534, 534, 534, 534, 3009, 3011, 534, 534, 534, 3014, 534, 3016, 3017, 534, 556, 556, 556, 556, 556, 556, 0, 0, 580, 2861, 580, 580, 580, 580, 580, 580, 0, 1267, 1451, 1359, 534, 534, 534, 1530, 534, 556, 3024, 556, 556, 556, 556, 556, 3028, 556, 556, 556, 556, 556, 556, 556, 3034, 556, 556, 556, 556, 556, 3185, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2229, 556, 556, 2233, 556, 556, 556, 556, 556, 556, 3040, 556, 556, 3043, 556, 556, 556, 556, 556, 556, 556, 556, 1829, 556, 556, 556, 556, 556, 556, 556, 3050, 3052, 556, 556, 556, 556, 3056, 556, 3058, 3059, 556, 580, 580, 580, 580, 580, 580, 3083, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2331, 580, 580, 580, 580, 2335, 580, 580, 3066, 580, 580, 580, 580, 580, 3070, 580, 580, 580, 580, 580, 580, 580, 3076, 580, 3092, 3094, 580, 580, 580, 580, 3098, 580, 3100, 3101, 580, 534, 580, 556, 534, 534, 534, 534, 534, 887, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 0, 0, 2299, 580, 580, 580, 580, 580, 580, 580, 3084, 580, 3086, 580, 580, 580, 580, 580, 580, 3106, 556, 3108, 580, 3110, 0, 0, 0, 0, 0, 0, 3116, 0, 0, 3119, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 286720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3140, 3141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2107, 0, 0, 0, 556, 556, 556, 556, 3184, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2272, 556, 556, 556, 556, 556, 556, 556, 3195, 556, 556, 556, 556, 556, 556, 556, 556, 3203, 556, 556, 556, 556, 556, 556, 3197, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2594, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 3208, 580, 580, 580, 580, 580, 580, 580, 3213, 580, 580, 580, 580, 1907, 580, 580, 580, 580, 580, 580, 580, 580, 1918, 580, 580, 580, 580, 580, 3096, 580, 580, 3099, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 534, 534, 3278, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3515, 556, 556, 580, 556, 3296, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3214, 3326, 3327, 0, 3132, 0, 3331, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2766, 534, 534, 534, 534, 534, 2771, 534, 534, 534, 3405, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 960, 556, 556, 556, 556, 556, 3420, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1452, 580, 580, 580, 580, 580, 3436, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3502, 534, 534, 534, 534, 534, 3450, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 3281, 556, 556, 556, 3284, 556, 556, 556, 3463, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 3302, 580, 580, 580, 580, 580, 580, 580, 3477, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3486, 3487, 0, 0, 0, 0, 364, 364, 0, 0, 0, 0, 1137, 1095, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 266240, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 3493, 3494, 3495, 534, 534, 534, 3498, 534, 3500, 534, 534, 534, 534, 534, 534, 534, 3269, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2781, 534, 534, 534, 534, 534, 534, 534, 3505, 3506, 3507, 556, 556, 556, 3510, 556, 3512, 556, 556, 556, 556, 3517, 3518, 3519, 3520, 580, 580, 580, 3523, 580, 3525, 580, 580, 580, 580, 3530, 0, 0, 0, 0, 0, 0, 1687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3562, 534, 534, 534, 3566, 556, 556, 3568, 556, 556, 556, 3572, 556, 580, 580, 3574, 580, 580, 580, 3578, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 556, 556, 580, 580, 0, 3111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2409, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1629, 0, 0, 0, 0, 368, 0, 0, 0, 376, 378, 0, 0, 0, 0, 0, 0, 0, 0, 2025, 0, 0, 0, 0, 0, 0, 0, 0, 2047, 0, 0, 0, 0, 0, 0, 0, 0, 2087, 0, 0, 0, 0, 0, 0, 0, 0, 2127, 0, 0, 534, 534, 534, 534, 534, 0, 0, 411, 0, 0, 0, 411, 69632, 73728, 0, 368, 368, 0, 423, 65536, 368, 0, 0, 368, 423, 492, 496, 492, 492, 501, 492, 492, 492, 501, 492, 423, 423, 329, 423, 0, 0, 423, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2048, 0, 0, 0, 0, 0, 0, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, 540, 563, 540, 563, 540, 540, 563, 540, 587, 563, 563, 563, 563, 563, 563, 563, 587, 587, 587, 540, 587, 587, 587, 587, 587, 587, 587, 563, 563, 540, 563, 587, 563, 587, 1, 12290, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1644, 0, 556, 556, 556, 556, 933, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2285, 556, 2287, 556, 556, 0, 0, 1207, 0, 1096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2447, 0, 0, 0, 534, 534, 534, 534, 1260, 534, 534, 534, 534, 534, 1272, 534, 534, 534, 534, 534, 0, 0, 0, 2212, 556, 556, 556, 556, 556, 556, 556, 3029, 556, 556, 556, 556, 556, 556, 556, 556, 3030, 556, 556, 556, 556, 556, 556, 556, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 1352, 556, 556, 0, 580, 580, 580, 580, 580, 580, 998, 580, 580, 580, 580, 580, 580, 2650, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2315, 580, 2317, 580, 580, 580, 580, 556, 556, 556, 1364, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1378, 1380, 556, 556, 556, 556, 556, 1871, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1413, 556, 556, 1417, 534, 534, 534, 534, 534, 3567, 556, 556, 556, 556, 556, 556, 556, 3573, 580, 580, 580, 580, 580, 2677, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 534, 3597, 556, 556, 556, 3599, 580, 580, 580, 0, 534, 534, 556, 556, 580, 580, 0, 0, 0, 3243, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 306, 306, 306, 0, 0, 0, 0, 0, 424, 424, 0, 424, 433, 0, 424, 424, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 486, 486, 460, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 541, 564, 541, 564, 541, 541, 564, 541, 588, 564, 564, 564, 564, 564, 564, 564, 588, 588, 588, 541, 588, 588, 588, 588, 588, 588, 588, 564, 564, 541, 564, 588, 564, 588, 1, 12290, 78114, 1066, 0, 0, 1069, 1073, 0, 0, 1077, 1081, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2472, 0, 0, 0, 0, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1667, 0, 0, 0, 0, 0, 2044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2704, 0, 0, 0, 0, 2068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1681, 1682, 2392, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2928, 0, 0, 0, 2932, 0, 0, 0, 0, 0, 2938, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, 0, 0, 2953, 0, 0, 2956, 0, 0, 0, 0, 0, 2961, 0, 0, 0, 0, 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1204, 2995, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3004, 534, 534, 534, 534, 534, 0, 0, 2211, 0, 556, 556, 556, 556, 556, 556, 556, 2268, 556, 556, 556, 556, 2273, 556, 556, 556, 534, 534, 534, 3012, 534, 534, 3015, 534, 534, 534, 3018, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 556, 556, 534, 556, 580, 556, 580, 1, 12290, 556, 556, 556, 556, 3054, 556, 556, 3057, 556, 556, 556, 3060, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 2396, 0, 0, 0, 3077, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3087, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 3442, 0, 3444, 0, 534, 534, 0, 3120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2015, 0, 0, 534, 534, 3151, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3458, 556, 556, 534, 534, 534, 534, 3163, 534, 534, 534, 534, 534, 534, 534, 3168, 534, 3170, 534, 534, 534, 534, 534, 1261, 534, 534, 534, 1270, 534, 534, 534, 534, 534, 534, 534, 2493, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2196, 534, 534, 534, 534, 534, 534, 556, 556, 556, 580, 580, 3207, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1962, 580, 580, 580, 580, 580, 580, 3227, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 2912, 534, 2914, 556, 2916, 3275, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 556, 556, 3287, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3293, 556, 556, 556, 556, 556, 556, 3466, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3306, 3587, 3588, 556, 556, 580, 580, 3591, 3592, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1716, 534, 534, 534, 0, 683, 684, 0, 0, 0, 0, 689, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 534, 830, 534, 534, 534, 534, 534, 534, 860, 534, 534, 534, 534, 534, 534, 2180, 2181, 534, 534, 534, 534, 534, 534, 2188, 534, 0, 751, 0, 0, 0, 0, 0, 751, 751, 0, 0, 816, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 0, 0, 970, 556, 0, 580, 580, 580, 580, 988, 580, 580, 580, 580, 580, 580, 580, 580, 1044, 580, 0, 0, 0, 841, 988, 914, 534, 534, 534, 534, 897, 556, 556, 556, 556, 970, 0, 580, 580, 580, 580, 1044, 0, 0, 0, 1145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2408448, 0, 0, 534, 1318, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 2549, 1696, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1190, 580, 580, 1988, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2122, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 2768, 534, 2769, 534, 534, 2540, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 0, 0, 975, 580, 0, 3129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2053, 0, 3235, 534, 3237, 556, 3239, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3124, 3125, 0, 0, 0, 556, 556, 556, 3298, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2359, 580, 580, 580, 580, 3317, 580, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2076, 0, 0, 0, 0, 0, 0, 461, 461, 479, 487, 487, 479, 487, 487, 487, 487, 487, 487, 487, 487, 512, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 529, 520, 520, 520, 520, 520, 542, 565, 542, 565, 542, 542, 565, 542, 589, 565, 565, 565, 565, 565, 565, 565, 589, 589, 589, 542, 589, 589, 589, 589, 589, 589, 589, 565, 565, 542, 565, 589, 565, 589, 1, 12290, 0, 0, 760, 0, 0, 764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 788, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, 805, 0, 0, 0, 782, 0, 0, 0, 0, 364, 364, 0, 0, 0, 1136, 0, 0, 0, 0, 0, 0, 0, 1606, 0, 0, 0, 0, 0, 0, 0, 0, 553, 576, 553, 576, 553, 553, 576, 553, 0, 805, 0, 0, 0, 0, 0, 805, 805, 0, 0, 0, 0, 782, 0, 0, 0, 0, 0, 534, 831, 534, 534, 534, 846, 534, 534, 534, 534, 534, 0, 2210, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1893, 26009, 0, 1898, 580, 1900, 580, 1901, 580, 0, 0, 0, 0, 823, 778, 0, 0, 823, 0, 0, 0, 0, 0, 0, 0, 0, 2468, 0, 0, 0, 0, 0, 0, 0, 0, 2022, 0, 2116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, 534, 534, 534, 534, 844, 534, 852, 534, 534, 534, 534, 0, 0, 556, 556, 556, 556, 556, 2815, 556, 2816, 556, 556, 917, 556, 925, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2583, 556, 971, 556, 0, 580, 580, 580, 580, 580, 991, 580, 999, 580, 580, 580, 580, 580, 580, 3097, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 1054, 898, 556, 556, 556, 1059, 971, 0, 580, 580, 580, 1064, 1045, 0, 1159, 0, 0, 0, 0, 0, 0, 0, 1167, 0, 0, 0, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 1219, 0, 0, 0, 0, 0, 0, 0, 0, 1224, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 364, 0, 0, 0, 1134592, 0, 0, 0, 1134592, 1134592, 0, 0, 1134592, 0, 0, 1134592, 0, 1134592, 534, 534, 1284, 534, 534, 534, 534, 534, 534, 534, 1292, 534, 534, 534, 534, 534, 0, 2209, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1842, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1896, 580, 580, 580, 580, 580, 580, 534, 534, 534, 1321, 534, 534, 1325, 534, 534, 534, 534, 534, 1331, 534, 534, 534, 534, 534, 534, 534, 3342, 534, 3344, 534, 534, 534, 534, 534, 556, 1338, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2568, 556, 556, 556, 556, 556, 1357, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1376, 556, 556, 556, 556, 556, 0, 2615, 0, 0, 0, 0, 580, 580, 580, 2619, 580, 556, 556, 556, 1384, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1816, 1817, 556, 556, 580, 580, 580, 1522, 580, 580, 0, 534, 580, 556, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 3196, 556, 3198, 556, 556, 556, 556, 556, 556, 556, 556, 1878, 1879, 556, 556, 556, 556, 556, 556, 534, 534, 534, 534, 1773, 534, 534, 534, 534, 534, 534, 1781, 534, 534, 534, 534, 0, 0, 556, 556, 556, 2813, 556, 556, 556, 556, 556, 2818, 556, 556, 1823, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2842, 556, 556, 556, 1853, 556, 556, 556, 556, 1859, 556, 556, 556, 556, 556, 556, 556, 556, 2840, 556, 556, 556, 556, 556, 556, 556, 1868, 556, 556, 556, 556, 556, 556, 1876, 556, 556, 556, 556, 556, 556, 556, 556, 2850, 556, 556, 556, 556, 556, 556, 556, 556, 1886, 1888, 556, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 0, 1525, 1526, 1527, 534, 534, 1529, 534, 534, 556, 580, 580, 580, 1955, 580, 580, 580, 580, 580, 580, 580, 580, 1964, 580, 580, 580, 580, 580, 1940, 1941, 1943, 580, 580, 580, 580, 580, 580, 580, 1951, 580, 580, 580, 1972, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1982, 1984, 580, 580, 580, 580, 1925, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2372, 580, 2374, 580, 580, 0, 0, 0, 2057, 0, 0, 0, 0, 0, 2063, 0, 0, 0, 0, 0, 0, 0, 1089, 0, 0, 0, 0, 1241, 1242, 0, 0, 0, 0, 0, 0, 2071, 0, 0, 0, 0, 0, 0, 0, 0, 2079, 0, 0, 0, 0, 0, 534, 833, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1306, 534, 534, 534, 534, 534, 534, 2134, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2146, 534, 534, 534, 534, 534, 534, 534, 3453, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 2826, 556, 556, 556, 556, 556, 556, 556, 556, 556, 949, 556, 556, 556, 556, 967, 556, 2189, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1314, 2203, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 2219, 2290, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 580, 580, 2306, 2377, 580, 580, 580, 580, 2146, 2318, 2231, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 3246, 0, 0, 0, 0, 0, 2413, 2414, 0, 0, 2417, 0, 2419, 0, 0, 0, 0, 0, 0, 0, 0, 2712, 0, 0, 0, 0, 0, 0, 0, 0, 2728, 0, 0, 0, 0, 0, 0, 0, 0, 2429, 0, 0, 0, 0, 0, 0, 0, 0, 2406, 0, 0, 0, 0, 0, 0, 0, 0, 2454, 0, 0, 0, 0, 0, 0, 0, 0, 1587, 0, 0, 0, 0, 0, 0, 0, 1595, 1596, 0, 0, 0, 2424, 0, 0, 2427, 0, 0, 0, 0, 0, 0, 2431, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 1159168, 0, 0, 0, 0, 1159168, 1159168, 0, 0, 0, 2452, 0, 0, 0, 0, 0, 0, 0, 2456, 2457, 0, 0, 2460, 0, 0, 2463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2473, 0, 0, 0, 0, 0, 639, 0, 0, 0, 0, 644, 645, 646, 647, 648, 649, 534, 2487, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3008, 534, 534, 534, 2515, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1293, 534, 534, 534, 534, 2527, 534, 534, 534, 534, 534, 534, 2534, 534, 534, 534, 534, 534, 534, 534, 534, 3343, 534, 534, 534, 534, 534, 534, 556, 534, 534, 2541, 534, 534, 534, 2544, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556, 556, 2217, 556, 556, 556, 2574, 556, 556, 556, 556, 556, 556, 2579, 556, 556, 556, 556, 556, 556, 556, 1427, 1428, 556, 556, 556, 26009, 1341, 975, 580, 2585, 556, 556, 556, 556, 556, 556, 2592, 556, 556, 556, 556, 556, 556, 2599, 556, 556, 556, 556, 556, 3290, 556, 556, 556, 556, 3291, 3292, 556, 556, 556, 556, 556, 0, 0, 2298, 0, 580, 580, 580, 580, 580, 580, 580, 2886, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3312, 580, 580, 580, 580, 580, 580, 2673, 580, 580, 580, 2676, 580, 580, 580, 580, 580, 580, 580, 2681, 2682, 2683, 534, 534, 534, 534, 534, 1289, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2185, 534, 534, 534, 534, 2720, 2721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2080, 0, 0, 0, 2736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2746, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 729, 0, 780, 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1565, 0, 0, 0, 0, 0, 0, 2751, 0, 0, 0, 2753, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2109, 534, 534, 534, 534, 534, 2787, 2788, 534, 534, 534, 534, 2791, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 3178, 556, 556, 556, 556, 2796, 534, 534, 534, 2799, 534, 2801, 534, 534, 534, 534, 534, 534, 2805, 534, 534, 534, 534, 534, 534, 2492, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1745, 534, 534, 534, 534, 534, 534, 2834, 2835, 556, 556, 556, 556, 2838, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2257, 556, 556, 556, 556, 556, 556, 556, 2844, 556, 556, 556, 2847, 556, 2849, 556, 556, 556, 556, 556, 556, 556, 2854, 580, 2867, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1949, 580, 580, 580, 2883, 2884, 580, 580, 580, 580, 2887, 580, 580, 580, 580, 580, 580, 580, 1928, 580, 580, 580, 580, 580, 580, 580, 580, 1912, 1913, 580, 580, 580, 580, 1920, 580, 580, 580, 580, 2893, 580, 580, 580, 2896, 580, 2898, 580, 580, 580, 580, 580, 580, 1190, 534, 580, 556, 534, 534, 534, 534, 534, 556, 580, 2903, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 3242, 0, 0, 0, 0, 0, 0, 0, 0, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 225734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, 580, 2918, 0, 0, 2921, 2922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 3255, 0, 534, 534, 534, 534, 2986, 534, 534, 534, 534, 534, 534, 534, 2992, 534, 534, 534, 534, 534, 534, 891, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 2302, 580, 580, 580, 580, 556, 556, 556, 3026, 556, 556, 556, 556, 556, 556, 556, 3032, 556, 556, 556, 556, 556, 556, 1841, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3357, 556, 3359, 556, 556, 556, 556, 580, 580, 580, 580, 3068, 580, 580, 580, 580, 580, 580, 580, 3074, 580, 580, 580, 580, 580, 2311, 580, 580, 2314, 580, 580, 580, 580, 580, 580, 2322, 3138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1191, 3247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2767, 534, 534, 534, 534, 534, 534, 534, 534, 3265, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 534, 534, 3276, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 3283, 556, 556, 556, 556, 556, 3299, 580, 580, 580, 580, 580, 580, 580, 3304, 580, 580, 580, 580, 580, 3479, 580, 3481, 580, 580, 3483, 580, 580, 0, 0, 0, 0, 0, 0, 1210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2421, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 3399, 534, 3401, 3402, 534, 3404, 534, 556, 556, 556, 556, 556, 556, 556, 556, 3414, 556, 3416, 3417, 556, 3419, 556, 3421, 580, 580, 580, 580, 580, 580, 580, 580, 3430, 580, 3432, 3433, 580, 3435, 580, 3437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 3499, 534, 3501, 534, 534, 580, 580, 580, 3553, 580, 3554, 580, 580, 580, 580, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 3538, 534, 3539, 534, 534, 534, 3604, 3605, 3606, 534, 556, 580, 534, 556, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 3211264, 0, 0, 0, 2179072, 2179072, 2179072, 2179072, 2179072, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 590, 566, 566, 566, 566, 566, 566, 566, 590, 590, 590, 543, 590, 590, 590, 590, 590, 590, 590, 566, 566, 543, 566, 590, 566, 590, 1, 12290, 556, 556, 1398, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2853, 556, 0, 0, 730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1126, 1127, 0, 534, 534, 534, 534, 2138, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2784, 534, 534, 534, 556, 556, 556, 2223, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1849, 556, 556, 556, 580, 580, 580, 2310, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1490, 580, 580, 580, 402, 0, 0, 0, 0, 380, 0, 69632, 73728, 0, 0, 0, 0, 425, 65536, 0, 0, 0, 0, 364, 364, 1133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3133, 0, 0, 0, 3136, 0, 425, 425, 0, 425, 0, 439, 425, 425, 462, 462, 462, 469, 462, 462, 462, 462, 462, 462, 462, 462, 469, 462, 462, 462, 462, 462, 462, 462, 462, 476, 462, 488, 488, 462, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 531, 544, 567, 544, 567, 544, 544, 567, 544, 591, 567, 567, 567, 567, 567, 567, 567, 591, 591, 591, 544, 591, 591, 591, 591, 591, 591, 591, 567, 567, 544, 567, 591, 567, 591, 1, 12290, 0, 0, 0, 653, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2939, 0, 0, 2941, 0, 0, 0, 654, 0, 654, 0, 0, 0, 0, 814, 0, 0, 0, 654, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 2130, 534, 534, 534, 556, 919, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 957, 556, 556, 556, 556, 556, 556, 3545, 556, 3546, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 556, 556, 534, 534, 884, 534, 534, 556, 556, 957, 556, 556, 0, 580, 580, 1031, 580, 580, 580, 580, 580, 2907, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 0, 0, 3117, 0, 0, 0, 290, 1066, 0, 0, 1069, 1073, 0, 0, 1077, 1081, 0, 0, 0, 0, 0, 0, 0, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 192965, 0, 0, 0, 1088, 1089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 131072, 0, 0, 0, 1130, 0, 0, 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 3254, 0, 0, 1089, 1088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2093, 0, 1088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 1253, 534, 534, 534, 534, 534, 1303, 534, 534, 1305, 534, 534, 534, 1309, 534, 534, 534, 0, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3549, 580, 580, 580, 534, 534, 534, 534, 1287, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2804, 534, 534, 2807, 534, 534, 1320, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1334, 534, 534, 534, 534, 534, 1323, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2509, 534, 534, 534, 534, 534, 534, 534, 1341, 901, 556, 1344, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2283, 556, 556, 556, 556, 556, 556, 556, 556, 1358, 1365, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1379, 556, 556, 0, 580, 580, 580, 985, 989, 992, 580, 1000, 580, 580, 580, 1015, 1017, 556, 556, 556, 1399, 556, 556, 556, 556, 556, 556, 556, 1412, 556, 556, 556, 556, 556, 556, 1858, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1402, 556, 556, 556, 556, 556, 556, 556, 1416, 556, 1436, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1450, 1457, 580, 580, 580, 580, 580, 3069, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1510, 580, 580, 580, 580, 580, 580, 1518, 580, 580, 580, 580, 0, 1266, 1450, 1358, 534, 534, 1320, 534, 534, 556, 556, 556, 556, 556, 3354, 556, 556, 556, 556, 556, 556, 3360, 556, 556, 556, 556, 556, 556, 2615, 0, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2626, 580, 580, 580, 580, 580, 580, 556, 1412, 556, 556, 580, 580, 1504, 580, 580, 1066, 0, 0, 0, 0, 0, 0, 0, 1107, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 661, 0, 0, 0, 0, 1570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, 1721, 1722, 534, 534, 534, 534, 1729, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 3177, 556, 556, 556, 3180, 556, 534, 1770, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1311, 534, 556, 556, 1824, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3204, 556, 556, 556, 1838, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3294, 556, 580, 1987, 580, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 0, 0, 2694, 2029, 0, 2030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2039, 0, 0, 0, 0, 0, 0, 1700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 298, 0, 0, 0, 0, 0, 0, 534, 534, 2190, 534, 534, 534, 534, 534, 2195, 534, 534, 534, 534, 534, 534, 534, 1326, 534, 534, 534, 534, 534, 534, 534, 534, 1291, 534, 534, 534, 534, 534, 534, 534, 556, 2276, 556, 556, 556, 556, 556, 556, 2282, 556, 556, 556, 556, 556, 556, 556, 1810, 556, 556, 556, 556, 556, 556, 556, 556, 3188, 556, 556, 556, 556, 556, 556, 556, 580, 2363, 580, 580, 580, 580, 580, 580, 2369, 580, 580, 580, 580, 580, 580, 580, 2329, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3557, 0, 0, 0, 0, 534, 534, 580, 580, 2634, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1948, 580, 580, 0, 0, 0, 0, 2699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163840, 0, 0, 0, 534, 534, 534, 534, 534, 2778, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1779, 534, 534, 534, 534, 534, 534, 2809, 534, 534, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 2817, 556, 556, 556, 556, 556, 3465, 556, 3467, 556, 556, 3469, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3373, 580, 3375, 580, 556, 556, 556, 2858, 556, 556, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 1445, 580, 580, 580, 1454, 580, 580, 580, 2866, 580, 580, 580, 580, 580, 580, 2874, 580, 580, 580, 580, 580, 580, 580, 580, 1473, 580, 580, 580, 580, 580, 580, 580, 534, 2996, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1767, 1768, 3036, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2275, 580, 3078, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1966, 580, 0, 0, 0, 0, 3130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167936, 0, 0, 0, 534, 534, 3174, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 1828, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 3535, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2991, 534, 534, 534, 3542, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3550, 580, 580, 580, 580, 580, 3082, 580, 580, 3085, 580, 580, 580, 580, 580, 580, 580, 1911, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3072, 580, 580, 580, 580, 580, 580, 463, 463, 463, 447, 447, 463, 447, 447, 447, 447, 447, 447, 447, 447, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 545, 568, 545, 568, 545, 545, 568, 545, 592, 568, 568, 568, 568, 568, 568, 568, 592, 592, 592, 545, 592, 592, 592, 592, 592, 592, 592, 568, 568, 545, 568, 592, 568, 592, 1, 12290, 0, 0, 0, 655, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 920, 556, 556, 934, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2841, 556, 556, 556, 556, 0, 0, 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1155, 0, 0, 0, 0, 0, 1177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2461696, 0, 0, 0, 0, 0, 1232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2801664, 0, 0, 534, 534, 534, 534, 1322, 534, 534, 534, 534, 534, 1329, 534, 534, 534, 534, 534, 534, 534, 2505, 534, 2507, 534, 534, 534, 534, 534, 534, 534, 1793, 534, 534, 534, 534, 1341, 0, 556, 556, 556, 556, 1359, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 965, 556, 556, 556, 556, 556, 1421, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 1974, 1975, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2641, 580, 580, 580, 2644, 580, 556, 556, 1534, 556, 580, 580, 580, 1538, 580, 1066, 0, 1542, 0, 0, 0, 1548, 0, 0, 0, 1554, 0, 0, 0, 1560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2444, 0, 0, 0, 2448, 0, 0, 1599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1569, 534, 534, 1723, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1734, 534, 534, 534, 534, 534, 534, 892, 534, 534, 534, 534, 556, 556, 556, 556, 556, 0, 0, 2298, 0, 0, 0, 580, 580, 580, 580, 580, 580, 3480, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 3582, 534, 534, 534, 534, 556, 3586, 1754, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1316, 0, 2096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2108, 0, 534, 534, 534, 534, 2154, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3006, 534, 534, 534, 556, 556, 556, 2239, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1864, 556, 556, 1867, 580, 580, 580, 2326, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1512, 580, 580, 580, 556, 556, 3194, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1414, 556, 556, 0, 0, 3328, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 851, 534, 534, 534, 534, 534, 580, 580, 3379, 580, 580, 534, 556, 580, 0, 0, 0, 3384, 0, 0, 0, 0, 0, 0, 306, 204800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 298, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 3395, 534, 534, 534, 534, 534, 534, 534, 2156, 534, 2158, 534, 534, 534, 534, 534, 534, 534, 2170, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2546, 534, 534, 534, 534, 0, 2549, 387, 389, 339, 0, 0, 0, 0, 0, 0, 338, 0, 0, 339, 0, 0, 0, 0, 0, 0, 2023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 393, 394, 0, 395, 0, 0, 0, 0, 0, 395, 0, 0, 0, 0, 0, 1209, 0, 0, 0, 0, 1214, 0, 0, 0, 0, 0, 0, 0, 2405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1094, 0, 0, 0, 0, 1099, 0, 0, 0, 338, 0, 0, 440, 0, 0, 464, 464, 464, 464, 464, 464, 464, 464, 546, 569, 546, 569, 546, 546, 569, 546, 475, 464, 464, 464, 493, 470, 493, 493, 493, 493, 493, 493, 493, 493, 464, 464, 470, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 474, 474, 464, 475, 464, 464, 464, 593, 569, 569, 569, 569, 569, 569, 569, 593, 593, 593, 546, 593, 593, 593, 593, 593, 593, 593, 569, 569, 546, 569, 593, 569, 593, 1, 12290, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 0, 0, 708, 0, 710, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1643, 0, 0, 0, 0, 743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2411, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 656, 0, 775, 0, 0, 0, 0, 0, 824, 0, 0, 0, 0, 0, 0, 779, 656, 0, 0, 796, 0, 0, 0, 0, 699, 0, 0, 0, 0, 0, 0, 799, 0, 0, 0, 0, 434, 0, 0, 331, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 796, 779, 0, 0, 801, 0, 660, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 2755, 0, 0, 0, 0, 0, 0, 0, 0, 2937, 0, 0, 0, 0, 0, 0, 0, 0, 2741, 0, 0, 0, 2745, 0, 2747, 0, 0, 0, 775, 801, 0, 801, 796, 0, 0, 0, 815, 0, 0, 0, 656, 818, 828, 0, 0, 0, 0, 534, 832, 534, 534, 534, 848, 534, 534, 862, 534, 534, 534, 534, 534, 534, 2504, 534, 534, 534, 534, 534, 534, 534, 534, 534, 898, 534, 556, 556, 556, 556, 556, 534, 534, 875, 534, 534, 534, 534, 893, 534, 534, 534, 556, 556, 904, 556, 556, 0, 580, 580, 976, 580, 580, 580, 580, 580, 580, 1007, 580, 580, 580, 580, 580, 1908, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1921, 556, 921, 556, 556, 935, 556, 556, 556, 556, 948, 556, 556, 556, 556, 966, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 0, 3594, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3156, 534, 534, 534, 534, 534, 534, 534, 2802, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1795, 534, 534, 1341, 1800, 556, 556, 580, 1022, 580, 580, 580, 580, 1040, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 3428, 580, 580, 580, 580, 580, 534, 556, 580, 3381, 0, 3383, 0, 0, 0, 0, 0, 0, 0, 2126, 0, 0, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1717, 534, 534, 0, 0, 1131, 0, 364, 364, 0, 1134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2481, 0, 0, 0, 0, 0, 0, 0, 1174, 0, 0, 0, 0, 0, 0, 1091, 0, 0, 0, 0, 0, 0, 0, 0, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 111044, 1, 12290, 1093, 0, 0, 0, 0, 0, 0, 1197, 0, 0, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 2033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131072, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 1131, 0, 0, 1237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2713, 0, 0, 0, 0, 0, 0, 1216, 0, 0, 0, 0, 1248, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 841, 534, 534, 534, 534, 534, 534, 534, 556, 556, 1360, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1382, 580, 580, 1497, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2334, 580, 580, 556, 1533, 556, 556, 580, 580, 1537, 580, 580, 1066, 0, 0, 0, 0, 0, 0, 0, 1121, 0, 0, 1124, 1125, 0, 0, 0, 0, 1584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1614, 0, 0, 0, 1602, 0, 0, 1605, 0, 1607, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 122880, 122880, 122880, 122880, 122880, 0, 0, 1697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2423, 0, 534, 1755, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2162, 534, 556, 1822, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3049, 556, 556, 556, 556, 2265, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3031, 556, 556, 556, 556, 0, 0, 0, 0, 2402, 0, 2404, 0, 0, 2407, 0, 0, 0, 0, 0, 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 750, 0, 0, 0, 0, 0, 0, 2412, 0, 0, 0, 2415, 2416, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106496, 0, 0, 0, 0, 0, 0, 0, 0, 2426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2912256, 0, 3207168, 0, 0, 0, 0, 2440, 0, 2441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2470, 0, 0, 0, 0, 0, 2461, 0, 0, 0, 0, 0, 0, 0, 0, 2469, 0, 0, 0, 0, 0, 2475, 0, 0, 0, 0, 2478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2486, 0, 0, 0, 0, 435, 0, 0, 447, 463, 463, 463, 463, 463, 463, 463, 463, 463, 473, 463, 463, 463, 463, 463, 463, 534, 2500, 2501, 534, 534, 534, 534, 534, 2506, 534, 2508, 534, 534, 534, 534, 2512, 2525, 534, 534, 534, 534, 534, 534, 2533, 534, 534, 534, 534, 2537, 534, 534, 534, 534, 534, 534, 1262, 534, 534, 534, 534, 534, 534, 1277, 534, 534, 556, 556, 556, 2561, 556, 556, 2564, 2565, 556, 556, 556, 556, 556, 2570, 556, 2572, 556, 556, 556, 556, 2576, 556, 556, 556, 556, 556, 556, 556, 556, 2582, 556, 556, 0, 580, 580, 977, 580, 580, 580, 993, 580, 580, 580, 580, 580, 580, 1443, 580, 580, 580, 1447, 580, 580, 1458, 580, 580, 556, 556, 2602, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1833, 556, 556, 2685, 534, 534, 556, 2687, 556, 556, 580, 2689, 580, 580, 0, 0, 0, 0, 0, 0, 0, 2936, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2036, 0, 0, 0, 0, 0, 0, 0, 0, 2708, 0, 0, 0, 0, 0, 0, 0, 2714, 2715, 2716, 0, 0, 0, 0, 0, 0, 2060, 0, 0, 0, 0, 0, 2064, 0, 0, 2066, 0, 2735, 0, 2737, 0, 0, 0, 2740, 0, 0, 2743, 0, 0, 0, 0, 0, 0, 0, 2960, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2430, 0, 0, 0, 0, 0, 2435, 534, 534, 2810, 534, 0, 0, 2811, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2566, 556, 556, 556, 556, 556, 556, 556, 2856, 556, 556, 2859, 556, 0, 0, 2860, 580, 580, 580, 580, 580, 580, 580, 2651, 580, 580, 580, 580, 580, 580, 2658, 580, 580, 2892, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2321, 580, 2902, 580, 580, 2905, 580, 580, 2908, 580, 2909, 2910, 2911, 534, 534, 556, 556, 580, 580, 0, 0, 0, 0, 0, 3115, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 420, 0, 65536, 0, 2929, 2930, 0, 0, 0, 0, 2935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2730, 0, 0, 0, 0, 0, 534, 534, 2997, 534, 2999, 534, 534, 534, 534, 534, 534, 3005, 534, 534, 3007, 534, 534, 534, 534, 534, 1324, 534, 534, 534, 534, 534, 534, 534, 534, 1335, 1336, 556, 3037, 556, 3039, 556, 556, 556, 556, 556, 556, 556, 3046, 556, 556, 3048, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 0, 0, 0, 0, 0, 0, 377, 0, 380, 0, 0, 0, 380, 0, 0, 580, 580, 3079, 580, 3081, 580, 580, 580, 580, 580, 580, 580, 3088, 580, 580, 3090, 534, 534, 534, 534, 534, 3164, 534, 534, 534, 534, 534, 534, 534, 3169, 534, 534, 534, 534, 534, 534, 2779, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3167, 534, 534, 534, 534, 534, 3181, 3182, 556, 556, 556, 556, 3186, 3187, 556, 556, 556, 556, 556, 3191, 556, 556, 0, 580, 580, 978, 580, 580, 580, 995, 580, 580, 1009, 580, 580, 580, 580, 580, 2353, 2354, 580, 580, 580, 580, 580, 580, 2361, 580, 580, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 3210, 3211, 580, 580, 580, 580, 580, 1442, 580, 580, 580, 580, 1448, 580, 580, 580, 580, 580, 580, 3524, 580, 3526, 580, 580, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 3215, 3216, 580, 580, 580, 580, 580, 3220, 580, 580, 580, 580, 580, 580, 580, 580, 1507, 580, 580, 580, 580, 580, 580, 580, 3226, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 2684, 556, 556, 556, 3288, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2258, 556, 556, 556, 3307, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2347, 2348, 3132, 0, 0, 0, 0, 534, 534, 3393, 534, 534, 534, 534, 3398, 534, 534, 534, 534, 534, 534, 1290, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1267, 534, 534, 534, 534, 534, 534, 534, 3403, 534, 534, 556, 556, 3408, 556, 556, 556, 556, 3413, 556, 556, 556, 556, 556, 556, 1874, 556, 556, 556, 556, 556, 1881, 556, 556, 556, 3418, 556, 556, 556, 580, 580, 3424, 580, 580, 580, 580, 3429, 580, 580, 580, 580, 580, 1468, 580, 580, 580, 580, 580, 580, 580, 1476, 580, 580, 3434, 580, 580, 580, 0, 0, 0, 0, 0, 3441, 0, 0, 0, 0, 534, 534, 534, 534, 3497, 534, 534, 534, 534, 534, 534, 534, 534, 1731, 534, 534, 534, 534, 1735, 534, 534, 534, 3563, 3564, 534, 534, 556, 556, 556, 3569, 3570, 556, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3212, 580, 580, 580, 3575, 3576, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 556, 556, 0, 580, 580, 979, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2358, 580, 580, 580, 580, 580, 341, 342, 343, 344, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221184, 0, 0, 0, 0, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 344, 344, 345, 344, 0, 343, 344, 448, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 480, 489, 489, 497, 489, 499, 489, 489, 499, 499, 489, 499, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 547, 570, 547, 570, 547, 547, 570, 547, 594, 570, 570, 570, 570, 570, 570, 570, 594, 594, 594, 547, 594, 594, 594, 594, 594, 594, 594, 570, 570, 547, 570, 594, 570, 594, 1, 12290, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665, 666, 0, 668, 669, 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 1220, 1250, 1251, 0, 1220, 0, 534, 534, 534, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 692, 364, 364, 364, 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1691, 0, 0, 0, 0, 712, 0, 714, 0, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726, 0, 0, 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2138112, 0, 0, 0, 0, 0, 0, 639, 745, 746, 747, 0, 0, 0, 0, 0, 753, 754, 0, 0, 0, 0, 0, 748, 0, 0, 803, 0, 0, 0, 0, 0, 0, 0, 0, 1134592, 0, 0, 1134592, 0, 0, 0, 0, 0, 685, 0, 0, 665, 0, 685, 0, 797, 668, 716, 0, 685, 798, 0, 0, 0, 0, 0, 1090, 1091, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 2948, 0, 0, 0, 0, 0, 2951, 0, 0, 0, 754, 0, 0, 0, 0, 0, 0, 0, 0, 747, 807, 808, 0, 0, 0, 0, 0, 1119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3055616, 0, 0, 0, 3133440, 0, 0, 0, 0, 747, 0, 0, 812, 692, 0, 0, 0, 817, 0, 0, 0, 0, 0, 0, 2073, 0, 2075, 0, 0, 0, 0, 0, 0, 0, 0, 1702, 0, 0, 1703, 0, 0, 1704, 0, 819, 0, 0, 0, 685, 692, 0, 0, 685, 817, 817, 0, 0, 0, 0, 0, 0, 0, 3131, 0, 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, 0, 0, 0, 0, 756, 870, 873, 534, 534, 534, 885, 889, 534, 534, 534, 534, 556, 556, 556, 911, 915, 918, 556, 926, 556, 556, 556, 941, 943, 946, 556, 556, 556, 958, 962, 556, 556, 0, 580, 580, 980, 986, 580, 580, 580, 580, 1004, 580, 580, 580, 580, 580, 1469, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2627, 580, 580, 2630, 2631, 580, 1020, 580, 580, 580, 1032, 1036, 580, 580, 580, 580, 0, 0, 0, 1048, 1049, 1050, 838, 534, 885, 889, 1055, 911, 556, 958, 962, 1060, 0, 985, 580, 1032, 1036, 1065, 1101, 0, 0, 0, 0, 1105, 0, 0, 1108, 0, 0, 0, 0, 0, 0, 0, 0, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 249856, 1, 12290, 1298, 534, 534, 1302, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1312, 534, 534, 534, 534, 534, 1727, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1796, 534, 1341, 0, 556, 556, 534, 1319, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1332, 534, 534, 534, 534, 534, 534, 1304, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1266, 1273, 534, 534, 534, 534, 534, 556, 1383, 556, 556, 556, 556, 556, 556, 556, 1390, 556, 556, 1394, 556, 556, 556, 556, 556, 1385, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2595, 556, 556, 556, 556, 556, 580, 580, 580, 1482, 580, 580, 1486, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1929, 580, 580, 580, 580, 580, 580, 580, 1496, 580, 580, 1503, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1516, 1615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1655, 0, 0, 0, 1647, 0, 1649, 0, 0, 0, 1651, 0, 741, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 330, 0, 0, 69632, 73728, 0, 418, 418, 0, 0, 65536, 418, 0, 0, 0, 534, 1709, 534, 534, 534, 534, 534, 534, 1715, 534, 534, 534, 534, 0, 0, 556, 2812, 556, 556, 556, 556, 556, 556, 556, 556, 3356, 556, 556, 556, 556, 556, 556, 556, 534, 534, 1787, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 1803, 556, 556, 556, 556, 1839, 556, 556, 556, 1843, 556, 556, 1848, 556, 556, 556, 556, 556, 556, 1892, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 0, 1269, 1453, 1361, 534, 534, 534, 534, 534, 556, 580, 580, 580, 1906, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1917, 580, 580, 580, 1935, 580, 580, 580, 1939, 580, 580, 1944, 580, 580, 580, 580, 580, 580, 580, 580, 1945, 580, 580, 580, 580, 580, 580, 580, 0, 0, 2010, 0, 1077, 0, 0, 0, 2012, 0, 1081, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 3147, 0, 534, 534, 534, 2177, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 1800, 556, 556, 556, 556, 2263, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1850, 556, 556, 580, 580, 2350, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2346, 580, 580, 0, 2550, 0, 1800, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2569, 556, 2571, 556, 556, 2613, 556, 556, 556, 0, 0, 0, 2616, 0, 1896, 580, 580, 580, 580, 580, 580, 3219, 580, 580, 580, 580, 580, 580, 580, 580, 3225, 0, 0, 2761, 0, 0, 0, 534, 2765, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3166, 534, 534, 534, 534, 534, 3171, 534, 534, 2789, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1295, 534, 534, 556, 556, 2836, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1865, 556, 556, 534, 534, 2985, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1310, 534, 534, 534, 534, 534, 2998, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 1801, 556, 556, 556, 3025, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3205, 556, 556, 3038, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2247, 556, 556, 580, 580, 3067, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2643, 580, 580, 580, 580, 580, 3080, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2345, 580, 580, 580, 534, 534, 534, 534, 534, 3267, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2159, 534, 534, 534, 534, 2163, 3285, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2289, 3336, 534, 534, 534, 534, 3340, 534, 534, 534, 534, 534, 3346, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 0, 0, 1545, 0, 0, 0, 0, 0, 1620, 0, 0, 1623, 0, 1625, 0, 0, 0, 0, 0, 0, 0, 2480, 0, 0, 0, 0, 0, 0, 0, 0, 555, 578, 555, 578, 555, 555, 578, 555, 556, 556, 3351, 556, 556, 556, 556, 3355, 556, 556, 556, 556, 556, 3361, 556, 556, 0, 580, 580, 981, 580, 580, 580, 580, 580, 580, 1010, 1012, 580, 580, 580, 580, 1029, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 3377, 580, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3251, 0, 3132, 3253, 0, 0, 3256, 3132, 0, 0, 0, 0, 534, 534, 534, 534, 534, 3396, 534, 534, 534, 3400, 534, 534, 534, 534, 534, 1742, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2536, 534, 534, 534, 534, 534, 388, 0, 0, 0, 392, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233472, 0, 0, 0, 0, 0, 0, 0, 404, 0, 346, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 515, 515, 515, 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515, 515, 515, 515, 515, 515, 515, 515, 548, 571, 548, 571, 548, 548, 571, 548, 595, 571, 571, 571, 571, 571, 571, 571, 595, 595, 595, 548, 595, 595, 595, 595, 595, 595, 595, 571, 571, 610, 615, 595, 615, 621, 1, 12290, 0, 0, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1668, 534, 534, 876, 534, 534, 534, 534, 894, 534, 534, 534, 556, 556, 905, 556, 556, 0, 580, 580, 982, 580, 580, 580, 580, 1001, 1005, 1011, 580, 1016, 580, 580, 1023, 580, 580, 580, 580, 1041, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 0, 1544, 0, 0, 0, 0, 0, 0, 2764, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1268, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0, 1178, 0, 0, 0, 0, 1094, 0, 0, 0, 0, 0, 0, 0, 0, 274432, 274432, 274432, 0, 274432, 274432, 274432, 274432, 1256, 534, 534, 534, 534, 534, 534, 534, 534, 1269, 534, 534, 534, 534, 1279, 534, 534, 534, 534, 534, 1757, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2197, 534, 534, 534, 534, 534, 534, 534, 534, 1341, 901, 556, 556, 556, 1347, 556, 556, 556, 556, 556, 556, 556, 1877, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 0, 580, 1899, 580, 580, 580, 580, 556, 556, 1361, 556, 556, 556, 556, 1371, 556, 556, 556, 556, 556, 556, 556, 556, 3468, 556, 556, 3470, 556, 580, 580, 580, 556, 556, 556, 556, 1422, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 1990, 1991, 1992, 534, 1994, 534, 534, 556, 1998, 556, 556, 580, 580, 580, 3367, 580, 580, 580, 580, 3371, 580, 580, 580, 580, 580, 580, 3232, 580, 580, 580, 580, 580, 580, 534, 580, 556, 2384, 534, 534, 534, 2388, 556, 556, 556, 580, 580, 1439, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1453, 580, 580, 580, 580, 580, 2381, 2382, 2383, 534, 534, 534, 534, 556, 556, 556, 556, 3410, 556, 556, 556, 556, 556, 556, 556, 580, 1463, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1477, 580, 580, 1498, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1514, 580, 580, 580, 580, 2005, 0, 2007, 0, 2009, 0, 2011, 0, 0, 0, 0, 0, 0, 0, 2034, 2035, 0, 2037, 2038, 0, 0, 0, 0, 0, 0, 0, 1555, 0, 0, 0, 1561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286720, 286720, 0, 286720, 286720, 1, 12290, 0, 0, 0, 1586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 1600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2434, 0, 556, 1852, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3363, 0, 1556, 0, 0, 0, 0, 0, 1562, 0, 0, 0, 0, 0, 0, 0, 0, 305, 204800, 204800, 0, 205105, 204800, 1, 12290, 0, 0, 0, 2070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, 2111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1188, 0, 0, 534, 2165, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2173, 534, 2250, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2584, 2337, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2375, 580, 2211, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2597, 556, 556, 556, 556, 556, 556, 2588, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2831, 556, 556, 556, 534, 3107, 556, 3109, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2138112, 1170, 0, 0, 0, 0, 0, 3132, 3330, 0, 0, 3332, 0, 0, 0, 0, 0, 534, 3335, 534, 534, 534, 534, 534, 1774, 534, 534, 534, 1778, 534, 534, 534, 534, 534, 534, 534, 1776, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2535, 534, 534, 534, 534, 534, 534, 534, 3337, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 556, 3350, 556, 556, 3352, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2852, 556, 556, 556, 556, 556, 580, 3366, 580, 580, 3368, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1946, 580, 580, 580, 580, 580, 580, 3132, 0, 3388, 0, 3390, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 902, 556, 556, 0, 0, 0, 783, 0, 783, 0, 0, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 2557, 556, 556, 556, 556, 556, 556, 2848, 556, 556, 556, 556, 556, 556, 556, 556, 556, 947, 556, 556, 556, 556, 556, 556, 556, 922, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1381, 556, 556, 972, 0, 580, 580, 580, 580, 580, 580, 996, 580, 580, 580, 580, 580, 580, 1910, 580, 580, 580, 580, 1916, 580, 580, 580, 580, 78114, 1066, 0, 0, 1070, 1074, 0, 0, 1078, 1082, 0, 0, 0, 0, 0, 0, 0, 1222, 0, 0, 0, 0, 1225, 0, 1181, 0, 534, 3162, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2201, 534, 580, 580, 580, 3218, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2629, 580, 580, 580, 347, 347, 349, 347, 0, 0, 347, 347, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 2125, 0, 0, 2128, 0, 534, 534, 2131, 534, 534, 0, 0, 0, 347, 347, 349, 347, 347, 347, 347, 347, 347, 506, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 549, 572, 549, 572, 549, 549, 572, 549, 596, 572, 572, 572, 572, 572, 572, 572, 596, 596, 596, 549, 596, 596, 596, 596, 596, 596, 596, 572, 572, 549, 572, 596, 572, 596, 1, 12290, 0, 0, 0, 715, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1147348, 0, 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 354, 355, 356, 758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 673, 674, 0, 0, 0, 0, 0, 0, 0, 794, 795, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 795, 0, 0, 794, 809, 0, 803, 0, 657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3117056, 0, 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 795, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 795, 534, 534, 839, 534, 534, 534, 534, 857, 534, 534, 534, 534, 534, 534, 1728, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3272, 534, 534, 534, 3273, 3274, 534, 534, 877, 879, 534, 534, 890, 534, 534, 534, 534, 556, 556, 906, 912, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 0, 1543, 0, 0, 0, 1549, 556, 556, 556, 930, 556, 556, 556, 556, 556, 950, 952, 556, 556, 963, 556, 556, 556, 556, 556, 1840, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1831, 556, 556, 556, 556, 1835, 580, 1024, 1026, 580, 580, 1037, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 1540, 0, 0, 0, 1546, 0, 0, 0, 0, 0, 131072, 0, 131072, 131072, 131072, 131072, 0, 131072, 131072, 131072, 131072, 131072, 131072, 0, 0, 0, 0, 0, 131072, 0, 131072, 1, 12290, 839, 879, 534, 890, 534, 912, 952, 556, 963, 556, 0, 986, 1026, 580, 1037, 580, 580, 580, 580, 2005, 0, 2007, 0, 2009, 0, 2011, 0, 0, 2397, 0, 0, 0, 0, 0, 330, 331, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2731, 0, 0, 0, 0, 0, 0, 1132, 364, 364, 0, 0, 1135, 0, 0, 0, 1138, 0, 1140, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 2556, 556, 556, 556, 556, 556, 556, 2577, 556, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1897, 580, 580, 580, 580, 580, 580, 1142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1156, 0, 0, 0, 0, 556, 556, 556, 556, 556, 556, 2555, 556, 556, 556, 556, 2559, 1158, 0, 0, 0, 0, 1163, 0, 0, 0, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 0, 1247, 0, 0, 0, 0, 0, 0, 0, 1168, 534, 534, 534, 534, 534, 534, 1743, 534, 534, 534, 534, 534, 534, 534, 534, 534, 897, 534, 556, 556, 556, 556, 914, 534, 534, 534, 1286, 1288, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 907, 556, 556, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 1348, 556, 556, 556, 556, 556, 556, 0, 2298, 580, 580, 580, 580, 580, 580, 580, 580, 2640, 580, 580, 580, 580, 580, 580, 2645, 580, 580, 580, 1440, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2670, 2671, 580, 580, 1494, 580, 580, 580, 580, 580, 580, 580, 1508, 580, 580, 580, 580, 580, 580, 580, 2678, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 1996, 556, 556, 556, 2000, 580, 580, 1519, 1520, 580, 580, 580, 0, 534, 580, 556, 534, 1528, 534, 534, 1531, 556, 556, 556, 556, 580, 580, 580, 580, 580, 1066, 1541, 0, 0, 0, 1547, 0, 0, 0, 0, 556, 556, 556, 2553, 556, 2554, 556, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 580, 2863, 580, 580, 580, 1532, 556, 556, 1535, 580, 1536, 580, 580, 1539, 1066, 0, 0, 0, 0, 0, 0, 0, 1577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 770, 0, 0, 0, 0, 0, 0, 0, 0, 1617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1203, 0, 0, 0, 0, 1633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1217, 0, 0, 0, 0, 0, 0, 1658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 1698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, 0, 0, 534, 1738, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2207, 2549, 534, 534, 534, 1788, 534, 534, 534, 534, 1794, 534, 534, 534, 1341, 0, 556, 556, 556, 556, 556, 1891, 556, 556, 26009, 1896, 580, 580, 580, 580, 580, 580, 1470, 1472, 580, 580, 580, 580, 580, 580, 580, 580, 1960, 580, 580, 1963, 580, 580, 580, 580, 556, 556, 1870, 556, 556, 556, 1875, 556, 556, 556, 556, 556, 556, 556, 556, 1884, 556, 556, 556, 556, 1890, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 1927, 580, 580, 580, 580, 1931, 580, 580, 580, 580, 580, 1904, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2672, 580, 580, 580, 1971, 580, 580, 580, 580, 580, 580, 580, 580, 1980, 580, 580, 580, 580, 580, 1504, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2316, 580, 580, 2320, 580, 580, 1986, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 0, 0, 2693, 0, 0, 0, 0, 0, 2099, 0, 2101, 2102, 2103, 0, 2105, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 424, 65536, 0, 0, 0, 0, 2123, 0, 0, 0, 0, 0, 0, 0, 2129, 534, 534, 534, 534, 0, 2211, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3045, 556, 556, 556, 556, 556, 534, 534, 2136, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1333, 534, 534, 534, 534, 534, 2166, 534, 2168, 534, 2171, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3271, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2178, 534, 534, 534, 534, 534, 2184, 534, 534, 534, 534, 534, 534, 534, 2792, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2519, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2206, 0, 0, 0, 0, 2213, 556, 556, 556, 556, 556, 556, 939, 556, 944, 556, 951, 556, 954, 556, 556, 968, 556, 2221, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1415, 556, 556, 556, 2251, 556, 2253, 556, 2256, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2607, 556, 556, 556, 2610, 556, 556, 556, 556, 556, 2264, 556, 556, 556, 556, 556, 2270, 556, 556, 556, 556, 556, 556, 1369, 556, 556, 556, 1374, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2293, 0, 0, 0, 0, 2300, 580, 580, 580, 580, 580, 580, 1942, 580, 580, 580, 1947, 580, 580, 580, 580, 580, 580, 2308, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2880, 580, 580, 580, 2338, 580, 2340, 580, 2343, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1961, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2351, 580, 580, 580, 580, 580, 2357, 580, 580, 580, 580, 580, 580, 1958, 1959, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3234, 580, 580, 580, 534, 580, 556, 0, 0, 2400, 2401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 399, 0, 0, 0, 2436, 0, 0, 2439, 0, 0, 0, 0, 2443, 0, 0, 0, 0, 0, 0, 0, 0, 2818048, 2846720, 0, 2916352, 0, 0, 3002368, 0, 0, 0, 2451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2459, 0, 0, 0, 0, 556, 556, 2552, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2851, 556, 556, 556, 556, 556, 556, 0, 0, 0, 2477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2485, 0, 0, 0, 0, 0, 1195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111044, 0, 0, 0, 0, 534, 534, 534, 534, 534, 2503, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2520, 534, 534, 534, 534, 534, 556, 556, 556, 556, 2562, 556, 556, 556, 556, 556, 2567, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 580, 2304, 580, 580, 580, 2633, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2901, 580, 534, 534, 534, 2686, 556, 556, 556, 2688, 580, 580, 580, 2690, 2691, 0, 0, 0, 0, 0, 0, 2453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1185, 0, 0, 0, 0, 0, 0, 0, 0, 2709, 0, 2710, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1159168, 0, 0, 0, 0, 2855, 556, 556, 556, 556, 556, 0, 0, 580, 580, 580, 580, 580, 2864, 580, 2865, 580, 580, 2904, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 0, 3113, 0, 0, 0, 0, 0, 0, 0, 0, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 254407, 1, 12290, 556, 556, 556, 3053, 556, 556, 556, 556, 556, 556, 556, 580, 3061, 580, 580, 580, 580, 580, 2649, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2371, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3095, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 2386, 2387, 556, 556, 2390, 2391, 534, 534, 3338, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3347, 534, 534, 3349, 556, 556, 556, 556, 3353, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3362, 556, 556, 556, 556, 580, 580, 580, 580, 580, 3427, 580, 580, 580, 3431, 580, 580, 580, 580, 1031, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 556, 556, 3365, 580, 580, 580, 580, 3369, 580, 580, 580, 580, 580, 580, 580, 580, 2356, 580, 580, 580, 580, 580, 580, 580, 580, 3378, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 3449, 534, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 3179, 556, 556, 556, 556, 556, 3462, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 3300, 580, 580, 580, 3303, 580, 580, 580, 580, 580, 3476, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 0, 0, 3491, 0, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3158, 534, 534, 534, 534, 534, 3565, 534, 556, 556, 556, 556, 556, 3571, 556, 556, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3372, 580, 580, 580, 580, 580, 580, 3577, 580, 580, 3579, 0, 3581, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 2224, 556, 556, 2227, 556, 556, 556, 556, 556, 556, 2235, 400, 0, 0, 0, 0, 0, 367, 375, 403, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2054, 408, 410, 0, 0, 367, 375, 0, 69632, 73728, 0, 0, 0, 0, 426, 65536, 0, 0, 0, 0, 556, 2551, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2271, 556, 556, 556, 556, 556, 426, 426, 0, 426, 0, 410, 426, 449, 0, 0, 0, 0, 0, 0, 0, 0, 534, 556, 534, 556, 534, 534, 556, 534, 367, 0, 0, 395, 0, 0, 0, 0, 0, 350, 0, 0, 367, 0, 0, 395, 0, 408, 0, 490, 490, 0, 490, 490, 490, 490, 490, 490, 490, 490, 516, 516, 516, 516, 449, 449, 449, 449, 524, 449, 449, 525, 449, 516, 530, 516, 516, 516, 530, 516, 516, 516, 516, 532, 550, 573, 550, 573, 550, 550, 573, 550, 597, 573, 573, 573, 573, 573, 573, 573, 597, 597, 597, 550, 597, 597, 597, 597, 597, 597, 597, 573, 573, 611, 616, 597, 616, 622, 1, 12290, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1567, 1568, 0, 789, 0, 0, 0, 0, 534, 834, 534, 534, 534, 534, 534, 534, 863, 865, 534, 534, 534, 534, 534, 1790, 1792, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 0, 580, 580, 580, 983, 987, 580, 580, 580, 580, 580, 580, 1013, 580, 556, 556, 556, 556, 936, 938, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2829, 556, 556, 2832, 556, 556, 78114, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1083, 0, 0, 0, 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2050, 0, 0, 0, 0, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098, 0, 0, 0, 0, 0, 1235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122880, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1581, 1582, 0, 0, 0, 0, 1085, 1208, 0, 0, 0, 0, 0, 0, 1215, 0, 0, 0, 0, 0, 0, 347, 348, 349, 0, 0, 0, 0, 0, 0, 0, 0, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 282624, 0, 0, 0, 1220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1220, 1229, 534, 534, 534, 1259, 534, 534, 534, 1263, 534, 534, 1274, 534, 534, 1278, 534, 534, 534, 534, 534, 534, 3001, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1327, 534, 534, 534, 534, 534, 534, 534, 1299, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2497, 534, 534, 534, 534, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 1351, 556, 556, 556, 556, 556, 1423, 556, 556, 556, 1430, 556, 556, 26009, 1341, 975, 580, 1355, 556, 556, 1366, 556, 556, 1370, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2828, 556, 556, 556, 556, 556, 556, 1462, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3315, 580, 1479, 580, 580, 580, 1483, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2877, 580, 580, 580, 580, 0, 1571, 1572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1612, 0, 0, 0, 0, 0, 0, 1603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 696, 0, 1616, 0, 1618, 0, 0, 0, 1622, 0, 0, 0, 1626, 0, 0, 0, 1630, 0, 0, 0, 0, 1572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 364, 695, 0, 534, 534, 534, 1724, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1782, 1783, 534, 534, 556, 1837, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1818, 556, 556, 556, 556, 1889, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 1976, 580, 580, 580, 580, 580, 1981, 580, 580, 580, 0, 0, 0, 2031, 0, 2032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2200246, 151552, 2200246, 0, 0, 2175, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2186, 534, 534, 534, 534, 534, 534, 1758, 534, 534, 534, 534, 1764, 534, 534, 534, 534, 0, 0, 556, 556, 556, 556, 2814, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 2301, 580, 580, 580, 580, 580, 1038, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 580, 580, 2394, 2395, 0, 1544, 0, 1550, 0, 1556, 0, 1562, 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2052, 0, 0, 2476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2482, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 345, 344, 65536, 343, 534, 534, 534, 534, 2530, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1275, 534, 534, 534, 534, 580, 2661, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3075, 580, 580, 0, 0, 2722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1665, 0, 0, 534, 2797, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2511, 534, 556, 556, 2845, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2259, 556, 556, 0, 0, 2970, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 534, 855, 534, 534, 534, 534, 0, 0, 0, 0, 3122, 3123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2424832, 2433024, 0, 0, 2457600, 3149, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1737, 3172, 534, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 2242, 556, 556, 556, 556, 556, 556, 556, 556, 1406, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 3229, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 556, 556, 556, 580, 580, 580, 580, 3426, 580, 580, 580, 580, 580, 580, 580, 2639, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2344, 580, 580, 580, 580, 580, 580, 534, 3236, 556, 3238, 580, 3240, 3241, 0, 0, 0, 0, 3245, 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 397, 0, 0, 0, 323, 0, 0, 0, 3258, 0, 0, 0, 0, 0, 0, 0, 0, 3261, 0, 534, 534, 534, 534, 534, 534, 534, 3154, 3155, 534, 534, 534, 534, 3159, 3160, 3263, 534, 534, 534, 3266, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1330, 534, 534, 534, 534, 580, 580, 3318, 534, 3319, 556, 3320, 580, 0, 0, 0, 0, 0, 0, 0, 0, 543, 566, 543, 566, 543, 543, 566, 543, 556, 556, 3543, 556, 3544, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 3551, 580, 3552, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 0, 0, 534, 534, 3536, 534, 3537, 534, 534, 534, 534, 534, 534, 534, 1730, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2183, 534, 534, 534, 534, 534, 534, 409, 355, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 0, 65536, 0, 0, 0, 0, 638, 0, 0, 641, 642, 0, 0, 0, 0, 0, 0, 0, 0, 1591, 0, 0, 1594, 0, 0, 0, 0, 466, 477, 466, 0, 0, 466, 0, 0, 0, 0, 0, 0, 0, 0, 517, 517, 521, 521, 521, 521, 466, 466, 466, 466, 466, 466, 466, 471, 466, 521, 517, 521, 521, 517, 521, 521, 521, 521, 533, 551, 574, 551, 574, 551, 551, 574, 551, 598, 574, 574, 574, 574, 574, 574, 574, 598, 598, 598, 551, 598, 598, 598, 598, 598, 598, 598, 574, 574, 612, 617, 598, 617, 623, 1, 12290, 0, 0, 731, 0, 0, 0, 637, 731, 0, 737, 738, 637, 0, 0, 0, 0, 0, 0, 656, 0, 0, 659, 660, 0, 0, 0, 0, 0, 0, 0, 2754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2420, 0, 0, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 786, 0, 791, 0, 0, 0, 0, 0, 1575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 303, 303, 0, 0, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 791, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2016, 0, 0, 0, 0, 806, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 349, 347, 65536, 0, 0, 0, 0, 777, 0, 0, 0, 0, 0, 0, 0, 777, 777, 0, 637, 0, 0, 0, 786, 0, 791, 0, 777, 0, 806, 0, 0, 0, 658, 0, 777, 791, 829, 0, 534, 835, 534, 534, 534, 534, 854, 858, 864, 534, 869, 556, 556, 927, 931, 937, 556, 942, 556, 556, 556, 556, 556, 959, 556, 556, 556, 556, 556, 1424, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 534, 534, 886, 534, 534, 556, 556, 959, 556, 556, 0, 580, 580, 1033, 580, 580, 580, 580, 1033, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 0, 1086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2449, 0, 0, 0, 0, 1103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1113, 0, 0, 0, 1117, 1118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 364, 364, 208896, 0, 0, 0, 0, 0, 0, 1179, 0, 1182, 0, 0, 0, 0, 0, 1187, 0, 0, 0, 0, 0, 0, 2726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0, 1086, 0, 0, 0, 1211, 0, 1213, 0, 0, 0, 0, 0, 0, 0, 1638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2964, 2965, 0, 0, 1230, 1187, 0, 1211, 1233, 0, 1236, 0, 0, 0, 0, 0, 1117, 0, 0, 0, 0, 0, 0, 2739, 0, 0, 0, 0, 2744, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 303, 2424832, 2433024, 0, 0, 2457600, 0, 1245, 0, 0, 0, 0, 0, 1245, 0, 0, 1136, 1245, 0, 1252, 534, 534, 534, 534, 534, 534, 3279, 534, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3514, 556, 556, 556, 580, 534, 534, 1258, 534, 534, 534, 534, 1264, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3455, 534, 534, 3457, 556, 556, 556, 534, 534, 1285, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1296, 534, 534, 534, 534, 534, 534, 3341, 534, 534, 534, 534, 534, 534, 534, 534, 556, 580, 3607, 3608, 3609, 534, 556, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 333, 0, 0, 333, 0, 0, 333, 0, 0, 0, 534, 534, 1301, 534, 534, 534, 534, 534, 534, 534, 534, 1308, 534, 534, 534, 1315, 1317, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2149, 534, 1339, 534, 1341, 901, 1343, 556, 556, 556, 556, 556, 1350, 556, 556, 556, 556, 556, 556, 2225, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2244, 556, 556, 556, 556, 2248, 556, 1356, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1377, 556, 556, 556, 556, 556, 556, 2241, 556, 2243, 556, 556, 556, 556, 556, 556, 556, 1425, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 556, 556, 556, 556, 1400, 556, 556, 556, 1407, 1409, 556, 556, 556, 556, 556, 556, 1386, 556, 556, 556, 556, 556, 556, 556, 1395, 556, 1480, 580, 580, 580, 580, 1485, 580, 580, 580, 580, 580, 580, 580, 580, 1492, 580, 580, 580, 580, 2352, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2628, 580, 580, 580, 580, 580, 580, 1499, 1501, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2878, 580, 580, 2881, 1550, 0, 0, 0, 1556, 0, 0, 0, 1562, 0, 0, 0, 0, 0, 0, 0, 0, 2957312, 0, 0, 0, 0, 0, 0, 0, 0, 1150, 0, 0, 0, 0, 0, 0, 0, 0, 1166, 0, 0, 0, 0, 0, 0, 0, 0, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2094, 0, 0, 0, 1573, 1574, 0, 0, 0, 0, 0, 1580, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 0, 0, 373, 0, 65536, 0, 0, 0, 1601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1677, 0, 0, 0, 0, 0, 0, 1619, 0, 0, 0, 0, 0, 0, 0, 1627, 1628, 0, 0, 0, 0, 0, 1604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254407, 0, 0, 0, 0, 0, 0, 0, 0, 1635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 386, 0, 0, 0, 1685, 0, 0, 0, 0, 0, 1689, 0, 0, 1692, 0, 0, 0, 0, 0, 0, 3143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2756, 0, 0, 2759, 0, 0, 0, 0, 0, 0, 1689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1705, 0, 1707, 1681, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1719, 534, 534, 534, 534, 534, 1791, 534, 534, 534, 534, 534, 534, 1341, 0, 556, 556, 556, 556, 556, 2295, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 2666, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1446, 580, 580, 580, 580, 580, 580, 534, 534, 534, 1725, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1736, 534, 534, 534, 534, 534, 2179, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2143, 534, 2145, 534, 534, 534, 534, 534, 534, 1740, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1751, 534, 534, 534, 534, 534, 2207, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1403, 556, 556, 556, 556, 556, 556, 556, 556, 1408, 556, 556, 556, 556, 556, 556, 556, 534, 534, 1756, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2172, 534, 534, 2002, 580, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, 0, 2019, 2020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, 2055, 2056, 0, 0, 2058, 2059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2617344, 0, 0, 0, 0, 2081, 0, 0, 0, 0, 2084, 2085, 0, 0, 0, 0, 0, 2091, 0, 0, 0, 0, 0, 0, 3259, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 534, 849, 534, 534, 534, 534, 534, 534, 534, 2152, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2161, 534, 534, 534, 534, 534, 534, 3452, 534, 3454, 534, 534, 3456, 534, 556, 556, 556, 556, 3509, 556, 556, 556, 556, 556, 556, 556, 556, 556, 580, 580, 580, 580, 580, 580, 0, 0, 0, 3595, 534, 534, 2164, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2174, 534, 534, 534, 2191, 534, 534, 534, 2194, 534, 534, 534, 534, 2199, 534, 534, 534, 534, 534, 534, 1759, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1732, 534, 534, 534, 534, 534, 534, 556, 2237, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2246, 556, 556, 2249, 556, 556, 2277, 556, 556, 556, 556, 2281, 556, 556, 556, 556, 2286, 556, 556, 556, 556, 556, 1808, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2608, 556, 556, 556, 556, 556, 580, 2324, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2333, 580, 580, 2336, 580, 580, 2364, 580, 580, 580, 580, 2368, 580, 580, 580, 580, 2373, 580, 580, 580, 580, 580, 2665, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1979, 580, 580, 580, 580, 580, 2398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2408, 0, 0, 0, 0, 0, 0, 687, 0, 0, 0, 770, 0, 0, 0, 0, 789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 176128, 534, 534, 2488, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2496, 534, 534, 534, 534, 534, 882, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 3411, 556, 556, 556, 3415, 556, 556, 534, 534, 2514, 534, 534, 2516, 534, 2517, 534, 534, 534, 534, 534, 534, 534, 2524, 534, 534, 2528, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2539, 556, 556, 2560, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3472, 580, 580, 556, 556, 556, 2575, 556, 556, 556, 2578, 556, 556, 2580, 556, 2581, 556, 556, 556, 556, 556, 1827, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1814, 556, 556, 556, 556, 1820, 580, 2646, 580, 2647, 580, 580, 580, 580, 580, 580, 580, 580, 2655, 580, 580, 2659, 0, 2696, 2697, 0, 0, 2700, 2701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3178496, 2670592, 0, 2744320, 0, 0, 2772, 534, 2775, 534, 534, 534, 534, 2780, 534, 534, 534, 2783, 534, 534, 534, 534, 534, 534, 534, 3002, 3003, 534, 534, 534, 534, 534, 534, 534, 534, 2494, 534, 534, 534, 534, 534, 534, 534, 534, 1744, 534, 534, 534, 1748, 534, 534, 1753, 2808, 534, 534, 534, 0, 0, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3358, 556, 556, 556, 556, 556, 2819, 556, 2822, 556, 556, 556, 556, 2827, 556, 556, 556, 2830, 556, 556, 556, 556, 556, 556, 2255, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2228, 556, 2230, 556, 556, 556, 556, 556, 556, 2857, 556, 556, 556, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 2652, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2868, 580, 2871, 580, 580, 580, 580, 2876, 580, 580, 580, 2879, 580, 580, 580, 580, 1034, 580, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 580, 580, 580, 580, 2906, 580, 580, 580, 534, 580, 556, 534, 534, 556, 556, 580, 580, 0, 0, 3112, 0, 3114, 0, 0, 0, 3118, 0, 0, 534, 534, 534, 534, 3013, 534, 534, 534, 534, 534, 556, 556, 556, 3021, 556, 556, 556, 556, 556, 2266, 2267, 556, 556, 556, 556, 556, 556, 2274, 556, 556, 0, 580, 580, 580, 580, 580, 580, 994, 580, 580, 1008, 580, 580, 580, 580, 580, 2341, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, 733, 534, 580, 556, 0, 0, 3121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1693, 0, 0, 534, 3173, 534, 534, 534, 534, 534, 534, 534, 556, 556, 556, 556, 556, 556, 556, 2839, 556, 556, 556, 556, 556, 556, 556, 556, 1811, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3183, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3033, 556, 556, 556, 556, 3193, 556, 556, 556, 556, 556, 556, 3199, 556, 3201, 556, 556, 556, 556, 556, 0, 0, 0, 0, 580, 580, 580, 2303, 580, 2305, 580, 580, 580, 3228, 580, 3230, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 556, 556, 556, 580, 3423, 580, 3425, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2888, 580, 580, 580, 580, 580, 580, 0, 0, 0, 3248, 0, 0, 0, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3334, 534, 534, 0, 3257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2982, 534, 534, 3264, 534, 534, 534, 3268, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1328, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3277, 534, 534, 534, 556, 556, 556, 556, 556, 3282, 556, 556, 556, 556, 556, 2294, 0, 0, 0, 580, 580, 580, 580, 580, 580, 580, 580, 3482, 580, 580, 3484, 580, 0, 0, 0, 556, 3286, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1883, 556, 3295, 556, 556, 556, 556, 580, 580, 580, 580, 580, 3301, 580, 580, 580, 3305, 580, 580, 580, 580, 2380, 534, 580, 556, 534, 534, 534, 534, 556, 556, 556, 556, 580, 580, 580, 580, 0, 534, 3601, 556, 3602, 580, 3603, 3489, 0, 0, 0, 534, 534, 534, 3496, 534, 534, 534, 534, 534, 534, 534, 534, 1265, 534, 534, 534, 534, 534, 534, 534, 3504, 556, 556, 556, 3508, 556, 556, 556, 556, 556, 556, 556, 556, 3516, 556, 580, 580, 580, 580, 2624, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1475, 580, 580, 580, 580, 580, 580, 3521, 580, 580, 580, 580, 580, 580, 580, 580, 3529, 580, 0, 0, 0, 0, 0, 0, 122880, 122880, 122880, 122880, 122880, 0, 122880, 0, 2105631, 12290, 0, 3532, 0, 3534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 3540, 3541, 534, 534, 534, 534, 534, 2208, 0, 0, 0, 556, 556, 556, 556, 556, 556, 556, 1387, 556, 556, 556, 1391, 556, 556, 556, 556, 556, 357, 358, 0, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, 735, 654, 467, 467, 481, 0, 0, 481, 358, 358, 358, 503, 358, 358, 358, 358, 467, 467, 599, 575, 575, 575, 575, 575, 575, 575, 599, 599, 599, 552, 599, 599, 599, 599, 599, 599, 599, 575, 575, 552, 575, 599, 575, 599, 1, 12290, 556, 556, 928, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 964, 556, 556, 556, 556, 556, 2294, 2615, 0, 0, 0, 0, 580, 580, 580, 580, 580, 534, 556, 580, 0, 0, 0, 0, 0, 0, 0, 0, 2924, 0, 0, 0, 0, 0, 0, 534, 534, 534, 891, 534, 556, 556, 556, 964, 556, 0, 580, 580, 580, 1038, 580, 580, 580, 580, 2636, 580, 2638, 580, 580, 580, 580, 2642, 580, 580, 580, 580, 0, 0, 0, 3440, 0, 0, 0, 3443, 0, 0, 534, 534, 78114, 1066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1084, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2432, 0, 0, 0, 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2132, 2133, 534, 534, 1340, 1341, 901, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1353, 556, 556, 556, 556, 580, 3590, 580, 580, 580, 580, 0, 0, 0, 534, 534, 534, 534, 534, 534, 1713, 534, 534, 534, 534, 534, 534, 534, 2140, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2990, 534, 534, 534, 534, 534, 534, 556, 556, 1362, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3047, 556, 556, 556, 0, 1551, 0, 0, 0, 1557, 0, 0, 0, 1563, 0, 0, 0, 0, 0, 0, 0, 1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172032, 0, 1656, 0, 0, 0, 0, 0, 0, 0, 0, 1662, 0, 1664, 0, 0, 0, 0, 0, 0, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 172032, 1, 12290, 534, 534, 1771, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2523, 534, 534, 556, 556, 1854, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1866, 556, 556, 556, 556, 932, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1815, 556, 556, 556, 556, 556, 1887, 556, 556, 556, 556, 556, 556, 26009, 0, 580, 580, 580, 580, 580, 580, 2312, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1488, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1924, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3073, 580, 580, 580, 580, 580, 1937, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1950, 580, 580, 580, 580, 2648, 580, 580, 580, 580, 580, 580, 580, 580, 2656, 580, 580, 580, 580, 580, 3231, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 580, 580, 580, 1973, 580, 580, 580, 580, 580, 580, 580, 580, 580, 1983, 580, 580, 580, 580, 1484, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3222, 580, 580, 580, 580, 0, 0, 0, 2043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 733, 1171, 0, 0, 534, 2151, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2795, 534, 2236, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2600, 2323, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3089, 580, 580, 580, 580, 2622, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3224, 580, 580, 2695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2120, 2734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2719, 534, 2774, 534, 2776, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2160, 534, 534, 534, 556, 2821, 556, 2823, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3190, 556, 556, 556, 580, 580, 580, 2870, 580, 2872, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2654, 580, 580, 580, 580, 580, 0, 0, 0, 0, 2933, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 2981, 534, 556, 556, 556, 556, 3289, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3202, 556, 556, 556, 556, 580, 3308, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3314, 580, 580, 556, 556, 3589, 556, 580, 580, 580, 580, 3593, 580, 0, 0, 0, 534, 534, 534, 3152, 534, 534, 534, 534, 534, 534, 534, 3157, 534, 534, 534, 0, 0, 359, 0, 0, 0, 0, 0, 0, 364, 0, 292, 0, 0, 0, 0, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2600960, 0, 0, 2768896, 2777088, 2781184, 0, 0, 369, 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2040, 2041, 0, 600, 576, 576, 576, 576, 576, 576, 576, 600, 600, 600, 553, 600, 600, 600, 600, 600, 600, 600, 576, 576, 553, 576, 600, 576, 600, 1, 12290, 556, 923, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2234, 556, 556, 556, 556, 556, 1367, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3547, 3548, 556, 556, 580, 580, 580, 580, 580, 1500, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3102, 3103, 3104, 534, 1646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2748, 0, 0, 1684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2065, 0, 0, 580, 580, 580, 1938, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3223, 580, 580, 580, 0, 0, 0, 2723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, 0, 0, 2942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2760, 0, 0, 0, 0, 3249, 0, 3250, 0, 0, 0, 0, 3132, 0, 0, 0, 0, 0, 0, 0, 3333, 0, 534, 534, 534, 0, 0, 0, 360, 361, 362, 363, 0, 0, 364, 0, 292, 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2445, 0, 0, 0, 0, 0, 0, 361, 0, 360, 0, 0, 0, 69632, 73728, 0, 0, 0, 0, 427, 65536, 0, 0, 0, 0, 685, 534, 534, 838, 842, 845, 534, 853, 534, 534, 534, 868, 427, 427, 0, 427, 0, 361, 427, 450, 0, 0, 0, 0, 0, 0, 0, 0, 690, 691, 0, 364, 364, 364, 0, 0, 0, 0, 0, 491, 491, 0, 498, 498, 498, 498, 504, 505, 498, 498, 518, 518, 518, 518, 450, 450, 450, 450, 450, 450, 450, 450, 450, 518, 518, 518, 518, 518, 518, 518, 518, 554, 577, 554, 577, 554, 554, 577, 554, 601, 577, 577, 577, 577, 577, 577, 577, 601, 601, 601, 554, 601, 601, 601, 601, 601, 601, 601, 577, 577, 613, 618, 601, 618, 624, 1, 12290, 534, 534, 887, 534, 534, 556, 556, 960, 556, 556, 0, 580, 580, 1034, 580, 580, 580, 580, 1502, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2332, 580, 580, 580, 580, 534, 2513, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2806, 534, 534, 534, 534, 2542, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 556, 2216, 556, 2218, 556, 580, 2674, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 534, 580, 556, 534, 534, 534, 534, 534, 2491, 534, 534, 534, 534, 2495, 534, 534, 534, 534, 534, 0, 0, 0, 0, 556, 556, 2215, 556, 556, 556, 556, 602, 578, 578, 578, 578, 578, 578, 578, 602, 602, 602, 555, 602, 602, 602, 602, 602, 602, 602, 578, 578, 555, 578, 602, 578, 602, 1, 12290, 0, 0, 698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2410, 0, 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2952, 0, 0, 0, 728, 0, 784, 0, 0, 0, 0, 0, 0, 0, 0, 784, 0, 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 364, 364, 364, 0, 0, 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3145, 3146, 0, 0, 0, 556, 924, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2260, 2261, 0, 0, 1176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2433, 0, 0, 534, 1300, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2548, 0, 0, 1418, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 2664, 580, 580, 580, 580, 2668, 580, 580, 580, 580, 580, 580, 1505, 580, 580, 1509, 580, 580, 580, 580, 580, 1515, 0, 0, 1553, 0, 0, 0, 1559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2082, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 736, 0, 0, 0, 0, 0, 0, 0, 534, 534, 534, 534, 2167, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1733, 534, 534, 534, 534, 556, 556, 556, 2252, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3471, 580, 580, 580, 580, 580, 580, 2339, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3485, 0, 0, 3488, 2499, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2202, 0, 0, 0, 0, 736, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 1747, 534, 534, 534, 534, 1051, 534, 534, 892, 534, 1056, 556, 556, 965, 556, 0, 1061, 580, 580, 1039, 580, 580, 580, 580, 2885, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2680, 534, 580, 556, 534, 556, 556, 1420, 556, 556, 556, 556, 556, 556, 556, 556, 556, 26009, 1341, 975, 580, 580, 580, 580, 2894, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2900, 580, 580, 580, 580, 534, 534, 534, 534, 1726, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2144, 534, 534, 2148, 534, 1821, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2843, 580, 580, 1954, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 3313, 580, 580, 580, 580, 556, 2586, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 2288, 556, 556, 556, 556, 556, 2614, 0, 0, 0, 0, 0, 0, 580, 580, 580, 580, 580, 1039, 580, 580, 580, 580, 0, 0, 0, 534, 580, 556, 0, 0, 0, 0, 2957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 534, 2979, 534, 534, 534, 2983, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 2498, 3065, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 2889, 580, 580, 580, 580, 580, 3192, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 3035, 1134592, 0, 1134592, 0, 0, 0, 1134592, 1135007, 1135007, 0, 0, 0, 0, 0, 1135007, 0, 0, 0, 0, 700, 701, 0, 0, 0, 0, 0, 707, 0, 0, 0, 711, 0, 1134592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2718, 0, 0, 1134592, 1134592, 0, 0, 0, 0, 1135196, 1135196, 1135196, 1135196, 1134592, 1135196, 1135196, 1135196, 1135196, 1135196, 1135196, 0, 1134592, 1134592, 1134592, 1134592, 1135196, 1134592, 1135196, 1, 12290, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 0, 2125824, 2125824, 2125824, 2125824, 3137536, 2940928, 2940928, 2940928, 0, 0, 0, 0, 0, 2748416, 2879488, 0, 0, 0, 0, 0, 2113, 0, 0, 0, 2113, 0, 0, 2118, 2119, 0, 0, 0, 0, 0, 1180, 0, 0, 0, 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2474, 0, 1147348, 1147348, 1147348, 451, 451, 1147348, 451, 451, 451, 451, 451, 451, 451, 451, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 1147399, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 1147348, 1147348, 1147348, 1147399, 1147399, 1147348, 1147399, 1147399, 1, 12290, 3, 0, 0, 0, 0, 0, 253952, 0, 0, 0, 253952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2950, 0, 0, 0, 0, 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 0, 0, 792, 0, 0, 1159168, 0, 0, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1159168, 1, 12290, 3, 0, 0, 0, 0, 249856, 0, 0, 0, 249856, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 163840, 0, 0, 0, 0, 65536, 0, 2125824, 3117056, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 0, 0, 974, 2125824, 2125824, 2125824, 2125824, 3149824, 2125824, 2428928, 2437120, 2125824, 2486272, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2625536, 2125824, 2125824, 2125824, 2125824, 2125824, 2125824, 2699264, 2125824, 2715648, 2125824, 2723840, 2125824, 0, 106496, 106496, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 106496, 0, 0, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 106496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2183168, 0, 0, 0, 0, 0, 0, 0, 0, 2134016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 695, 0, 0, 0, 0, 0, 3108864, 3198976, 0, 0, 3043328, 0, 3149824, 2936832, 0, 2760704, 0, 0, 0, 0, 0, 0, 0, 69632, 73728, 0, 369, 369, 0, 0, 65536, 369\n];\n\nXQueryParser.EXPECTED =\n[ 127, 143, 342, 950, 172, 201, 188, 217, 769, 963, 247, 263, 279, 295, 311, 327, 1395, 373, 1083, 374, 374, 374, 374, 374, 374, 374, 374, 374, 419, 391, 407, 466, 435, 589, 1682, 909, 574, 156, 1220, 451, 495, 511, 527, 543, 559, 634, 1096, 678, 694, 755, 649, 785, 801, 817, 833, 849, 865, 881, 897, 937, 979, 995, 1023, 1039, 1055, 479, 1112, 1128, 1473, 1144, 1160, 1206, 1236, 357, 662, 1266, 709, 1282, 1292, 1308, 1324, 1339, 1355, 1411, 1427, 1443, 618, 1459, 724, 1489, 604, 1518, 1528, 231, 1070, 1544, 1560, 1576, 1592, 1622, 1250, 1638, 1654, 1606, 921, 1670, 739, 1698, 1714, 1820, 1190, 1730, 1746, 1502, 1758, 1774, 1790, 1806, 1175, 1850, 1860, 1836, 1009, 1370, 1876, 1385, 375, 1892, 1896, 1903, 1903, 1903, 1898, 1902, 1903, 1910, 1907, 1914, 1918, 1922, 1926, 1929, 1933, 1937, 1941, 1945, 4040, 4040, 4040, 4106, 4040, 4040, 2020, 2279, 4040, 1949, 4040, 4040, 4040, 2429, 2379, 4040, 4040, 4040, 4040, 2438, 4040, 4040, 3112, 2651, 3443, 2444, 1955, 1984, 1994, 1998, 4040, 4040, 4040, 4040, 4040, 2017, 2042, 4040, 4040, 4040, 2024, 2285, 2030, 2034, 4040, 4040, 4040, 4040, 4040, 2041, 4040, 4040, 3002, 2285, 2285, 2285, 2285, 2285, 2111, 1988, 1988, 1988, 1988, 1988, 1990, 1955, 1955, 1955, 1955, 1955, 2101, 3099, 1988, 1988, 1988, 1988, 1988, 2120, 1955, 1955, 1955, 1955, 1955, 2046, 2055, 4040, 4040, 2212, 2349, 4040, 4040, 4040, 4137, 3441, 4040, 4040, 4040, 4040, 3531, 4040, 2745, 1988, 1988, 1988, 2066, 1955, 1955, 1955, 1957, 2073, 4040, 4040, 2473, 3002, 2285, 2285, 2026, 1988, 1988, 3101, 1955, 1955, 1956, 2072, 4040, 2471, 4040, 2284, 2285, 3098, 1988, 1988, 2078, 1955, 2068, 2129, 2446, 3554, 2285, 2112, 1988, 2120, 1955, 2083, 2281, 2286, 1988, 2067, 2089, 2095, 2113, 2049, 2107, 3097, 2114, 2079, 3096, 3100, 2079, 3096, 2114, 2051, 2118, 2126, 2135, 2139, 2143, 2156, 2160, 2170, 2170, 2170, 2163, 2167, 2170, 2173, 2177, 2181, 2185, 2189, 2193, 2197, 2201, 2205, 2209, 2216, 4040, 4040, 4040, 2131, 4040, 4040, 4040, 2220, 4040, 2226, 4040, 2283, 2287, 1988, 1954, 2122, 2098, 1961, 4040, 4040, 4040, 1970, 4040, 2474, 1980, 4040, 2321, 3139, 4040, 2440, 3145, 4427, 2277, 3219, 2796, 3151, 3505, 3155, 4040, 3263, 3161, 2906, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4041, 2255, 2259, 2262, 2266, 2270, 2274, 3465, 2291, 4040, 4040, 4040, 4040, 3213, 2296, 2312, 2303, 2396, 2240, 2243, 2309, 2316, 2320, 2649, 4006, 4040, 2726, 2326, 3670, 4040, 4040, 4040, 4040, 2231, 3466, 4040, 4040, 4040, 3429, 2237, 4040, 2618, 3123, 2249, 2253, 3877, 2348, 4040, 4040, 4013, 2355, 4040, 2359, 4040, 4040, 4040, 4040, 3173, 2321, 2227, 2367, 3192, 4040, 4040, 2459, 4040, 4040, 3192, 4040, 4040, 4348, 2989, 2882, 2918, 3129, 2349, 4040, 3014, 2311, 2670, 2331, 3577, 4417, 2336, 2379, 4040, 4040, 2549, 2340, 4040, 4040, 4040, 2984, 4040, 4040, 4040, 4040, 3591, 2979, 4040, 4040, 4040, 3390, 4180, 4419, 3131, 4040, 3190, 3194, 4040, 2950, 2989, 2918, 3210, 4040, 2469, 2788, 3212, 4040, 4005, 3283, 3279, 4282, 4040, 3281, 4226, 4226, 2601, 4283, 3283, 3283, 1966, 3282, 3279, 1966, 4227, 3283, 4191, 2462, 2478, 4040, 4040, 4040, 4040, 2588, 2522, 4040, 4040, 4040, 2007, 2858, 2484, 3025, 2492, 2495, 2498, 2502, 2503, 2507, 2511, 2515, 4040, 2521, 4040, 4040, 2526, 4040, 3968, 2913, 2541, 2545, 3867, 2553, 2563, 2574, 2578, 4040, 3387, 3385, 4040, 2582, 4040, 3458, 2587, 4040, 3120, 4040, 4040, 4040, 3174, 2074, 2409, 2537, 2432, 4040, 4040, 4040, 2536, 2416, 4040, 2373, 2377, 4040, 4040, 4040, 4040, 4255, 2378, 4040, 4040, 4040, 4040, 4256, 2379, 4040, 2838, 3503, 4040, 4040, 4040, 4040, 2839, 3504, 3974, 3509, 4040, 4040, 3730, 3536, 4040, 3349, 2906, 4040, 3326, 2556, 3181, 3383, 3394, 3403, 4040, 4397, 4040, 3553, 3551, 3545, 4040, 2668, 2912, 3478, 3399, 2548, 2592, 3456, 3471, 2600, 4040, 4040, 4040, 4242, 4040, 3147, 4040, 3818, 4040, 4037, 3923, 3990, 3561, 4003, 4040, 2655, 4039, 4040, 4040, 4040, 3167, 4040, 4040, 4040, 3331, 3171, 4040, 4040, 4040, 4040, 3632, 3179, 4040, 2638, 2611, 2615, 4040, 2388, 2622, 4040, 4040, 4040, 4040, 2389, 2349, 4040, 4040, 4040, 2397, 2390, 4040, 4040, 4040, 3141, 4040, 4040, 3846, 4040, 4040, 2630, 2517, 4070, 2637, 2412, 2989, 4040, 4040, 4040, 4040, 2344, 4040, 4040, 4040, 4040, 4040, 3269, 2989, 2380, 3207, 4040, 3463, 4040, 4040, 4040, 3861, 3470, 4040, 4040, 4040, 3475, 4040, 3482, 4040, 4040, 2631, 3905, 4040, 4040, 4040, 4040, 2631, 3905, 2424, 3909, 4040, 2152, 2595, 3785, 3915, 2631, 4365, 2642, 4040, 4040, 4040, 4040, 4085, 2646, 4040, 4040, 4040, 4040, 4085, 2646, 4040, 4040, 2464, 4040, 4040, 2285, 2285, 2285, 2285, 2025, 1988, 1988, 1988, 1988, 1988, 2120, 3610, 3833, 4040, 4040, 4040, 4365, 2656, 4040, 4040, 4040, 2660, 2665, 3980, 2516, 3196, 2674, 2678, 3830, 2685, 4040, 4040, 3830, 2685, 4040, 4040, 2299, 2690, 4040, 3184, 3458, 2004, 3969, 3197, 3312, 3251, 2696, 4040, 2037, 2690, 4040, 3251, 2696, 4040, 2702, 2709, 3195, 4000, 2713, 2717, 4040, 2715, 4040, 2679, 2723, 4040, 2730, 2734, 2739, 3644, 4040, 2705, 2583, 3646, 2583, 2749, 2753, 2704, 3203, 2944, 2566, 2570, 2956, 2945, 3843, 2568, 2568, 2761, 3815, 3641, 2765, 3607, 2769, 2773, 2775, 2779, 2783, 2787, 4040, 4040, 4040, 3316, 4040, 4040, 3564, 2792, 3570, 2800, 2804, 2808, 2810, 2814, 2818, 2821, 2823, 2824, 4040, 4040, 3315, 4040, 3428, 2828, 3896, 3248, 2833, 2843, 2434, 2453, 3918, 2849, 2907, 2853, 4040, 2150, 2148, 4040, 4040, 4040, 4040, 2405, 2349, 4040, 4040, 4040, 4040, 2405, 2349, 4040, 4040, 4040, 4040, 2362, 3442, 4040, 4040, 4040, 4040, 2363, 3773, 3950, 4040, 4040, 4040, 2857, 4040, 2559, 2968, 3853, 2862, 2937, 4379, 2869, 3988, 3295, 4040, 2873, 4040, 4040, 4040, 3554, 2285, 2285, 2285, 2285, 1987, 1988, 1988, 1988, 1989, 1955, 1955, 1955, 1955, 1956, 2103, 4040, 4040, 4040, 2472, 4040, 2109, 2285, 2285, 2285, 2113, 3527, 2877, 4040, 4040, 4040, 2886, 2890, 4040, 4040, 4040, 4040, 2980, 4040, 3336, 2829, 3897, 2895, 2899, 4040, 2911, 2917, 4040, 4040, 2922, 4040, 4040, 4040, 4040, 2844, 2923, 4040, 4040, 2626, 4289, 4040, 3453, 3038, 4353, 4386, 3183, 4040, 4040, 4041, 4370, 4040, 4040, 2845, 2924, 4040, 4040, 4040, 4040, 4040, 2990, 4040, 2558, 2928, 4420, 2935, 4040, 2943, 2949, 4040, 2970, 2954, 4040, 4040, 4040, 4040, 3855, 2960, 4040, 4040, 4040, 4040, 3855, 2960, 4040, 4040, 4040, 4040, 3389, 4040, 2966, 3897, 2974, 2327, 4275, 4040, 3590, 2978, 4040, 3535, 3379, 3488, 3521, 3230, 4040, 4040, 3540, 4040, 4040, 4040, 3439, 4040, 4040, 4040, 4364, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4378, 4040, 4040, 4040, 2605, 4040, 4040, 2245, 4040, 4040, 3459, 4040, 4040, 4038, 3923, 4040, 2013, 3616, 2411, 4040, 3631, 2988, 4040, 4040, 3631, 2988, 4040, 4040, 4040, 2994, 4040, 4040, 2350, 4262, 2381, 3617, 4040, 4040, 4346, 4040, 4040, 3000, 4040, 4040, 4346, 4040, 2350, 4208, 3615, 2881, 4040, 2795, 3174, 3112, 3180, 3024, 3111, 3180, 3180, 3933, 3014, 3113, 3113, 3006, 3181, 3014, 3013, 3014, 3175, 4047, 3018, 3029, 3053, 4040, 4040, 4040, 4040, 3634, 4040, 4221, 4040, 3650, 4040, 4040, 4040, 4040, 2631, 3651, 4040, 4040, 4040, 4040, 3648, 4287, 4291, 4040, 4010, 4017, 4303, 4022, 2632, 3182, 4040, 4032, 4040, 1950, 4012, 4040, 2865, 4045, 4051, 3043, 3047, 4064, 3061, 3065, 3069, 3073, 3077, 3081, 3105, 3084, 4040, 4040, 3633, 4040, 4040, 3443, 2444, 4040, 4040, 4040, 2450, 4040, 4040, 4040, 4349, 4040, 4040, 3014, 3276, 2487, 2961, 2691, 4276, 3109, 1976, 3117, 3127, 3289, 3135, 3305, 4040, 3324, 3322, 4040, 4040, 3734, 3779, 3739, 3744, 3969, 4040, 3748, 3754, 3761, 3943, 3887, 3765, 4057, 4040, 2488, 2962, 2692, 3163, 3224, 3188, 3412, 4040, 4040, 2085, 3201, 4040, 4040, 4040, 4040, 2343, 3217, 3223, 3228, 4040, 4040, 4040, 3234, 4040, 4040, 4040, 4040, 4040, 3238, 4040, 4040, 4040, 4040, 3422, 4040, 2529, 2686, 4354, 3245, 4040, 4040, 4040, 4342, 4040, 4040, 4040, 4040, 1972, 4040, 4040, 4040, 4040, 4040, 3255, 4040, 4040, 4040, 3423, 3952, 2686, 4355, 3261, 4040, 4040, 3267, 4040, 4040, 4040, 1974, 4040, 4040, 4040, 3273, 4040, 4220, 3981, 2680, 4356, 3895, 4040, 3287, 4040, 4040, 3293, 4040, 4040, 2062, 4040, 4220, 3953, 3299, 2146, 4040, 3303, 4040, 2607, 4040, 4040, 2061, 4040, 4248, 3309, 3894, 3498, 4040, 4360, 4040, 4040, 4040, 4369, 4040, 4374, 3056, 4383, 3622, 4040, 4040, 4390, 4040, 4040, 4424, 2742, 4040, 2633, 4040, 3056, 4040, 3039, 3157, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 2455, 4325, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 3320, 4040, 3330, 3911, 3335, 3629, 3588, 4213, 3943, 3587, 4213, 4213, 4040, 3341, 3589, 3589, 3628, 4214, 3341, 3340, 3341, 3630, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 3836, 2349, 3347, 4040, 3354, 3001, 4080, 4404, 3358, 3362, 3366, 3369, 3373, 3373, 3377, 4040, 4040, 3835, 4091, 3410, 4040, 4040, 3416, 4040, 4040, 3420, 3427, 4040, 3433, 4040, 4331, 3447, 4040, 4040, 3797, 4040, 3795, 4040, 4040, 4345, 4040, 2350, 1964, 4040, 2879, 4040, 3397, 4040, 2904, 4040, 3350, 3488, 4040, 3486, 2535, 3492, 3496, 4040, 4040, 4040, 3502, 4040, 4040, 4040, 4127, 4028, 2010, 4131, 4141, 4145, 4149, 4153, 4157, 4161, 4165, 4169, 4173, 4134, 4377, 4293, 2534, 3516, 4040, 4040, 4040, 2839, 3504, 4040, 4040, 4040, 4040, 2931, 3442, 4040, 3450, 4040, 2902, 4040, 3799, 4363, 3520, 4196, 3525, 3406, 2349, 2757, 2305, 2996, 4393, 4347, 3544, 4040, 3549, 4040, 4040, 3549, 4040, 4040, 3558, 2756, 2305, 4077, 4395, 3960, 4040, 3568, 4040, 3823, 2349, 4040, 3997, 3750, 3574, 3884, 3961, 4269, 4040, 4270, 4040, 3581, 3944, 3585, 3595, 3931, 3600, 2001, 3930, 3604, 3604, 4211, 3614, 3932, 3621, 3626, 3662, 3638, 3655, 3656, 3660, 3667, 3674, 3678, 3682, 3685, 4040, 4040, 4040, 3840, 2596, 3740, 3850, 2668, 2332, 3343, 4040, 3859, 4040, 4040, 4040, 2233, 3865, 2891, 3735, 2465, 2351, 3690, 3698, 3874, 3702, 3705, 3709, 3713, 3717, 3721, 3725, 3729, 4040, 2423, 2421, 3241, 3772, 4040, 4040, 2939, 3777, 3783, 3789, 3793, 4136, 2698, 3342, 2633, 2425, 3803, 4040, 4040, 3808, 2349, 4040, 4040, 4186, 3812, 4040, 4040, 4040, 3009, 3822, 3827, 4040, 3871, 2532, 4318, 3881, 4040, 3891, 3773, 4040, 4040, 4040, 4040, 3901, 4040, 4040, 4040, 4040, 4040, 2385, 4040, 4040, 4040, 4040, 3014, 4040, 2394, 4040, 2401, 2379, 4035, 3922, 4040, 4040, 2292, 3927, 4040, 4040, 4040, 4040, 3937, 4040, 4040, 4040, 4040, 2091, 3941, 3948, 4040, 3957, 3757, 3966, 2835, 3112, 4040, 4040, 2222, 3979, 4040, 4040, 2719, 3973, 2632, 3183, 3021, 4040, 4055, 4040, 4061, 2419, 4040, 3023, 4068, 4074, 4084, 4112, 4089, 4095, 3596, 4100, 4308, 4099, 4104, 4110, 4099, 4113, 4119, 3257, 4117, 4123, 4040, 4040, 4040, 4040, 4177, 4184, 2836, 3686, 4190, 3693, 4195, 4200, 4410, 4205, 4218, 4040, 3090, 2735, 4225, 3093, 4231, 4040, 4040, 4040, 3631, 4235, 2661, 4040, 2681, 4429, 2369, 4040, 4239, 4040, 4040, 4040, 4040, 3804, 4246, 4040, 4040, 4040, 4252, 4040, 4040, 4040, 2631, 4260, 4266, 4040, 4040, 4040, 4025, 4185, 2837, 2686, 2480, 4274, 4040, 4280, 4040, 4040, 4040, 4040, 4201, 3978, 4018, 4303, 3768, 4040, 3050, 4040, 4040, 3985, 4040, 4040, 3994, 4040, 4322, 4385, 4329, 4040, 4040, 4040, 4040, 4335, 4040, 4040, 4040, 4040, 3663, 4339, 4040, 4040, 4297, 4040, 3057, 3087, 4301, 3962, 3032, 4040, 4040, 4040, 4040, 2624, 4307, 4040, 4040, 4040, 4040, 2624, 4312, 4315, 4040, 2322, 3436, 2837, 2058, 4040, 4040, 3035, 4040, 4401, 4408, 3694, 4040, 4040, 3512, 4040, 2631, 4414, 4040, 3511, 4558, 4433, 6024, 6027, 4439, 4466, 4468, 4468, 4446, 4455, 4467, 4468, 4468, 4468, 4468, 4468, 4468, 4473, 4468, 4468, 4463, 4457, 4459, 4479, 4477, 4483, 4468, 4469, 4493, 4496, 4506, 4510, 4524, 4519, 4511, 4500, 4502, 4502, 4518, 4519, 4498, 4515, 4523, 4528, 4532, 4536, 4539, 4547, 4546, 4543, 4551, 4554, 4556, 4566, 5097, 4574, 6086, 5003, 5101, 5101, 5101, 4593, 4599, 4602, 4602, 4602, 4602, 4608, 4640, 4568, 4622, 4628, 5101, 4434, 5101, 5099, 5101, 6713, 5101, 6256, 5101, 5101, 4584, 5992, 5101, 5101, 4729, 5101, 5473, 6277, 5101, 5007, 4602, 5693, 4609, 5696, 5699, 5699, 5699, 5699, 4601, 4602, 5699, 4602, 4619, 4621, 4623, 4627, 6087, 5101, 4434, 6165, 6164, 5101, 5101, 6380, 6242, 5096, 5101, 4576, 5101, 6463, 5101, 5101, 5635, 4488, 5366, 6275, 5101, 4581, 5101, 4590, 5411, 5123, 5123, 5123, 5697, 5699, 4603, 4621, 4621, 4622, 4627, 4627, 4628, 5101, 4583, 5448, 6513, 5474, 5101, 5008, 5101, 5101, 4602, 4632, 5123, 5699, 4602, 4602, 4602, 5704, 5121, 4602, 4621, 4627, 5101, 4583, 6563, 5101, 4584, 6017, 5101, 5101, 5699, 5701, 4602, 4602, 4602, 4632, 4640, 5705, 5101, 5101, 5101, 4734, 5700, 4602, 4602, 4602, 5705, 4643, 5701, 5101, 5101, 4824, 5651, 4602, 4650, 5101, 5101, 4824, 6512, 5010, 5695, 5123, 5123, 5698, 5690, 4602, 4608, 5696, 5700, 5703, 5101, 4602, 5101, 5101, 5121, 5123, 5123, 5123, 5699, 5699, 5699, 5702, 5123, 5698, 5699, 5702, 4602, 4602, 5704, 4607, 4602, 5705, 5123, 5697, 5704, 5101, 5101, 4816, 4822, 5699, 4602, 5704, 5695, 5698, 5702, 5694, 5701, 4651, 4652, 4650, 5101, 4592, 5101, 5101, 5815, 5567, 5101, 5101, 5106, 6519, 6761, 6550, 6560, 4662, 4695, 4656, 4660, 4693, 4666, 4673, 4670, 4680, 4684, 4691, 4693, 4693, 4693, 4693, 4694, 4676, 4699, 4693, 4703, 4708, 4714, 4704, 4726, 4740, 4744, 4687, 4751, 4753, 4748, 4787, 4789, 4789, 4791, 4757, 4759, 4761, 4763, 4776, 4776, 4770, 4767, 4774, 4717, 4675, 4710, 4780, 4784, 4795, 4797, 4801, 4805, 4809, 5101, 4592, 6198, 6202, 4990, 5007, 5230, 6461, 5101, 6373, 5101, 5101, 4824, 6698, 4831, 5101, 5101, 5101, 4736, 5108, 5108, 5101, 5101, 4826, 6485, 5490, 5979, 4838, 5101, 4720, 4985, 5101, 4720, 5101, 5101, 4853, 5311, 4857, 5333, 4876, 4902, 4906, 4906, 4906, 4906, 4908, 4915, 4917, 4912, 4921, 4925, 4928, 4931, 4934, 4939, 4938, 4943, 4944, 4959, 4949, 4948, 4953, 4956, 4963, 5101, 5107, 5101, 4892, 5101, 5007, 5101, 5101, 5695, 5123, 5123, 5123, 5123, 5696, 5699, 5988, 5101, 5101, 5101, 4825, 5300, 5101, 5608, 5101, 4811, 5449, 6426, 4969, 5101, 5101, 4988, 6219, 5101, 5018, 4987, 5101, 5101, 4860, 5101, 5101, 4995, 5015, 5101, 6412, 5034, 5101, 5101, 5101, 4893, 6751, 6138, 5101, 5101, 5101, 4894, 6729, 5101, 5101, 5101, 4965, 5055, 5068, 5081, 5086, 5091, 5076, 5095, 5101, 4824, 5933, 5929, 5376, 5087, 4434, 5101, 5101, 5101, 4979, 5008, 6409, 5996, 5101, 5999, 5151, 5987, 5376, 5101, 4826, 6502, 6738, 6204, 5101, 6730, 5101, 5101, 4891, 5101, 4570, 5101, 5115, 5127, 5074, 4442, 5096, 5101, 5101, 5101, 4975, 5538, 5411, 5986, 5281, 5101, 4840, 5628, 5355, 5382, 4434, 4736, 5101, 4973, 5101, 5101, 5101, 4840, 5687, 5132, 5075, 5140, 5890, 5072, 5076, 5141, 6462, 4888, 5101, 5101, 4895, 5101, 5343, 5073, 6582, 4451, 5101, 4894, 5101, 5101, 6416, 5101, 5101, 5101, 6191, 5101, 5415, 5892, 5074, 6583, 5096, 5101, 5101, 4898, 5999, 5411, 5280, 5101, 5101, 4974, 4978, 5134, 5157, 5101, 5101, 5007, 5101, 5132, 5075, 5159, 5101, 4897, 5101, 5871, 4980, 5101, 5949, 5135, 5159, 5101, 4976, 5101, 5101, 5010, 5101, 5101, 5169, 4434, 5101, 5101, 5009, 5101, 5101, 5101, 4613, 4614, 4975, 5101, 4614, 5101, 5411, 4978, 6164, 6391, 5101, 4977, 6380, 5395, 5376, 5188, 4872, 5243, 5197, 5197, 5194, 5197, 5199, 5203, 5205, 5207, 5209, 5209, 5209, 5213, 5213, 5213, 5213, 5214, 5213, 5213, 5215, 5219, 5221, 5101, 5101, 5101, 5036, 5101, 5059, 5063, 5372, 5101, 5101, 5101, 6378, 6010, 5101, 4978, 6569, 5101, 4980, 5101, 5417, 5101, 5101, 5101, 5891, 5074, 5240, 5101, 5351, 6463, 5247, 5101, 5101, 5257, 5101, 5101, 5101, 5068, 5263, 6448, 5875, 5101, 4981, 5101, 5101, 5876, 6281, 5416, 5275, 4435, 5874, 5101, 4990, 6089, 5406, 5410, 5101, 5265, 5407, 5285, 5101, 5101, 5297, 6402, 5101, 5101, 5304, 5309, 5101, 5101, 5101, 5057, 5371, 5101, 5101, 5101, 5059, 5330, 4833, 5427, 5101, 5010, 4978, 5101, 5415, 5358, 5101, 5101, 5101, 5100, 5883, 5359, 5101, 5101, 5102, 6015, 4893, 5258, 5101, 5342, 5432, 5101, 5348, 5101, 5024, 6570, 5977, 5382, 4434, 5101, 5101, 5102, 6113, 5726, 5101, 6379, 5101, 5101, 5101, 5102, 5101, 5101, 6462, 5101, 4561, 5876, 5101, 6422, 6426, 5381, 6381, 6423, 6427, 5382, 5101, 5031, 5101, 5101, 4866, 4885, 4811, 5438, 6425, 5399, 6381, 5479, 5101, 5101, 5101, 5104, 5106, 5060, 5064, 5101, 5035, 5101, 5101, 5051, 5101, 5350, 5101, 5879, 4896, 5431, 5101, 5101, 5101, 5106, 5101, 4975, 5471, 5101, 5101, 5101, 5107, 6430, 5101, 5101, 5101, 5108, 4890, 6429, 6381, 5101, 5101, 5102, 6446, 5479, 5101, 5101, 5453, 5269, 5410, 5101, 4614, 5101, 5101, 6380, 5153, 5101, 5101, 5732, 5268, 5470, 5101, 5101, 5102, 6697, 5459, 5468, 6381, 5101, 5041, 5046, 5045, 5478, 5101, 5101, 5453, 4614, 5101, 5101, 5101, 5111, 6088, 5350, 5877, 5413, 5538, 5101, 5101, 5047, 5047, 5047, 5461, 5101, 6088, 6119, 5106, 5267, 5271, 5101, 5047, 6213, 5101, 5101, 5404, 4990, 5404, 5408, 5404, 4990, 5404, 5962, 5423, 5961, 5101, 6084, 5423, 5233, 6104, 5101, 4990, 5232, 5230, 5101, 5232, 4989, 5232, 5232, 5232, 5231, 6488, 5101, 5101, 5101, 5168, 5876, 5722, 5483, 4434, 5099, 5101, 5101, 6498, 6279, 5487, 5101, 4886, 6166, 5489, 5856, 5494, 5500, 5498, 5504, 5504, 5504, 5504, 5506, 5513, 5510, 5517, 5519, 5519, 5519, 5521, 5519, 5525, 5525, 5525, 5525, 5527, 6280, 5415, 5319, 5672, 5101, 5005, 6438, 5101, 5101, 5103, 5101, 5101, 5101, 6361, 6199, 5571, 5101, 5101, 5101, 5176, 5626, 6498, 5551, 5101, 6442, 5561, 5101, 5814, 5566, 5575, 5101, 5101, 5101, 5181, 6167, 5004, 6438, 5101, 5102, 6092, 6381, 5580, 5101, 5101, 5004, 6127, 5600, 5863, 5606, 5862, 5605, 5101, 5101, 5235, 5101, 5101, 5101, 5424, 5102, 6128, 5601, 5864, 5607, 5101, 5101, 5101, 5224, 5101, 6167, 5101, 5006, 6440, 5101, 5569, 5101, 5102, 6180, 5148, 5101, 5101, 5996, 5101, 6283, 5464, 5101, 5101, 5101, 5228, 5101, 5620, 5101, 5101, 5101, 5232, 5176, 5626, 6753, 5665, 5101, 5101, 5632, 5321, 4434, 5101, 5102, 6362, 6200, 5027, 5562, 5101, 5570, 5101, 5101, 5223, 5746, 5463, 5101, 5101, 5101, 5266, 4989, 5621, 5101, 5101, 5101, 5278, 6754, 5666, 5101, 5101, 5265, 5407, 6755, 5376, 5101, 5101, 4990, 5101, 5612, 5415, 5320, 6393, 5101, 5101, 5176, 5639, 5646, 4577, 5568, 5410, 5640, 5664, 5101, 5101, 5101, 5293, 5175, 5639, 5663, 5376, 5659, 5376, 5101, 5101, 5101, 4980, 5657, 5676, 5101, 5101, 5288, 5037, 5658, 5101, 5101, 5101, 5411, 5123, 5098, 5101, 5423, 5101, 5102, 6471, 6477, 5098, 5101, 5424, 5101, 5101, 5426, 5098, 5424, 5101, 5102, 6558, 5101, 5101, 5101, 6393, 5101, 5426, 5424, 5568, 5424, 5233, 5101, 5101, 5102, 6562, 5101, 5104, 5101, 5101, 5101, 4974, 6215, 5710, 4879, 5101, 6496, 5376, 5101, 5105, 5101, 5424, 5424, 5099, 5101, 5105, 5101, 5101, 5101, 5720, 4722, 5730, 5742, 5751, 5757, 5766, 5764, 5767, 5755, 5761, 5771, 5774, 5776, 5778, 5790, 5782, 5785, 5789, 5790, 5791, 5796, 5795, 5801, 5797, 5806, 5101, 5108, 4976, 5101, 5110, 6702, 5101, 5111, 6707, 5101, 5123, 5123, 5123, 5698, 5699, 5699, 5700, 4602, 5801, 5802, 5801, 5801, 4998, 5101, 5098, 5101, 5101, 5425, 5101, 5101, 5812, 5819, 5557, 5101, 5145, 5281, 5101, 4844, 5876, 4852, 5595, 5101, 4888, 5101, 5950, 5136, 4434, 5101, 4615, 5101, 5101, 5823, 5848, 5941, 5101, 5101, 5363, 5101, 5472, 5373, 5101, 5101, 5386, 5101, 5860, 4888, 5868, 5887, 5011, 5011, 5101, 5101, 5414, 5101, 6528, 5376, 5101, 5101, 5414, 6347, 5545, 5908, 6527, 4732, 5904, 6529, 5101, 5101, 5423, 5101, 5101, 5100, 5942, 5101, 5101, 5101, 5426, 5101, 5101, 5101, 5479, 5912, 5924, 5101, 5101, 5423, 5163, 5158, 5101, 5101, 5101, 4989, 5101, 5350, 5929, 5376, 5101, 5101, 5454, 5270, 6215, 5393, 5374, 5101, 5168, 5173, 5101, 5101, 5101, 5021, 5109, 5101, 5411, 5101, 5853, 5101, 6347, 5101, 5100, 5101, 5102, 5947, 5925, 5101, 5101, 5530, 4980, 4811, 5650, 5954, 5376, 4812, 5959, 5955, 5101, 5184, 5539, 6436, 5879, 5098, 5102, 5538, 5101, 6166, 5101, 5102, 5447, 5442, 4585, 5993, 5101, 5101, 5538, 6089, 5099, 4592, 5101, 5101, 5546, 5903, 4584, 5993, 5101, 5101, 5649, 5940, 5102, 4586, 5994, 5101, 5231, 4887, 5101, 4974, 5100, 5101, 5101, 6712, 5101, 5101, 4584, 5995, 5101, 5101, 5706, 5898, 4585, 5995, 5101, 5101, 5808, 5101, 5106, 5101, 5413, 6346, 5102, 6004, 5101, 5101, 5833, 5840, 6392, 5107, 5412, 5876, 4894, 5152, 5101, 5035, 5576, 5101, 5101, 5106, 6016, 5101, 5101, 5837, 5841, 5101, 5101, 5338, 5101, 6015, 5101, 5101, 5101, 5547, 5412, 5101, 5101, 5101, 5612, 5101, 6161, 5101, 5101, 5101, 5679, 5101, 5101, 6367, 5101, 5101, 5842, 6096, 5101, 6282, 5101, 4486, 6021, 6046, 6045, 6046, 6046, 6043, 6046, 6050, 6054, 6058, 6062, 6071, 6066, 6070, 6071, 6071, 6075, 6075, 6075, 6075, 6078, 6082, 5101, 5101, 5842, 6097, 5103, 5234, 5101, 5101, 5880, 5305, 5101, 5101, 5047, 5101, 5101, 6102, 5109, 6108, 5101, 5236, 5101, 5101, 5325, 5101, 6117, 5101, 6123, 5101, 5249, 6209, 6202, 5101, 6493, 5101, 5101, 5897, 5101, 5101, 6142, 6181, 5096, 5843, 6097, 5101, 5101, 5966, 5101, 5101, 5996, 5101, 5101, 5101, 5876, 5103, 6174, 5101, 5101, 5416, 5421, 5101, 5101, 5251, 6200, 6204, 5101, 5101, 5101, 5949, 6147, 6152, 6000, 4980, 4980, 4980, 5101, 5292, 4635, 5101, 5299, 5101, 5101, 5058, 5062, 5371, 6361, 5737, 5101, 5101, 5975, 4848, 5988, 6137, 5101, 5101, 5101, 5882, 5102, 5734, 5738, 5101, 5317, 6462, 5349, 6382, 5101, 6160, 6159, 5101, 6173, 5101, 5101, 5999, 5101, 5101, 6667, 5106, 4894, 6247, 4978, 5101, 5101, 6004, 5101, 6361, 6199, 6203, 5101, 5101, 5101, 5896, 6382, 6382, 5101, 5101, 6111, 5418, 5101, 5101, 6668, 4893, 6186, 5101, 6769, 5879, 5101, 5101, 5529, 6188, 5101, 5101, 6126, 5599, 5102, 6197, 6201, 6205, 5419, 6182, 4434, 5101, 5101, 6089, 5252, 6201, 6205, 5585, 5101, 5101, 5101, 6007, 6455, 4450, 5101, 5101, 6133, 5101, 5101, 5101, 5695, 6454, 4449, 4434, 5101, 5350, 5101, 5878, 5101, 6280, 4886, 4988, 6229, 5101, 5101, 6162, 4614, 5101, 6378, 4434, 5101, 5375, 5101, 4562, 6229, 5101, 4978, 6214, 6161, 4980, 5101, 5101, 6162, 5101, 5101, 5101, 5655, 5640, 6234, 5101, 5101, 5101, 6089, 5101, 6258, 4434, 6240, 5101, 6258, 4434, 5101, 5404, 5962, 5101, 5102, 5437, 6424, 6235, 5101, 5101, 5568, 5410, 5101, 5101, 6236, 5101, 6165, 5101, 5101, 5101, 6259, 5101, 5101, 6164, 5101, 5101, 5101, 5648, 5849, 5942, 5101, 6260, 5101, 6165, 5101, 5405, 5409, 5101, 5057, 5268, 5409, 5101, 5101, 5102, 6742, 5253, 5101, 5101, 5101, 6260, 5101, 5101, 6259, 5101, 6167, 6258, 5101, 5101, 5101, 6112, 6259, 5101, 6259, 6165, 4847, 5987, 5376, 5568, 6497, 6259, 5568, 6497, 6168, 6257, 6257, 6261, 6251, 6254, 6254, 5101, 5101, 5101, 6169, 5118, 5101, 5916, 5101, 5414, 5538, 5101, 5101, 5918, 4896, 5553, 4884, 5037, 6272, 6287, 6305, 6299, 6305, 6303, 6299, 6309, 6293, 6290, 6295, 6322, 6313, 6327, 6316, 6319, 6323, 6332, 6331, 6339, 6339, 6340, 6339, 6339, 6339, 6336, 6344, 5101, 5101, 5101, 6178, 5224, 5747, 5376, 5101, 5101, 5415, 5101, 5101, 6351, 4893, 4893, 4882, 5230, 5001, 5101, 6372, 5101, 5101, 6214, 4980, 5101, 6357, 5969, 5101, 5417, 5419, 6353, 6366, 4434, 5101, 6371, 6390, 6397, 6401, 5101, 5418, 4636, 5647, 6434, 5101, 5101, 5101, 6192, 5943, 5101, 5008, 5101, 4978, 5101, 4979, 5101, 5416, 5101, 6351, 4893, 5419, 6352, 4894, 6268, 6367, 5002, 5101, 5101, 6279, 5641, 5101, 5101, 5290, 5101, 6452, 5101, 5101, 5101, 6223, 5101, 6470, 6459, 6480, 6475, 6479, 6205, 5101, 5423, 5407, 5101, 5057, 5061, 5390, 6481, 5101, 5101, 5101, 6228, 5589, 5588, 5587, 5101, 5436, 5442, 6428, 5402, 5101, 5101, 5102, 6143, 6182, 5106, 5745, 6520, 5101, 5455, 5409, 5101, 5057, 5061, 5370, 6267, 5101, 5410, 5101, 5535, 5101, 5101, 5177, 5640, 5423, 5999, 5101, 5101, 6360, 5736, 6738, 6204, 5101, 5101, 6378, 5101, 5224, 5077, 5101, 5008, 6265, 5555, 5101, 5415, 5070, 5082, 5622, 5101, 5101, 6278, 6165, 5233, 5101, 5377, 6377, 6386, 5103, 5101, 5679, 5101, 5538, 5101, 5101, 5101, 5534, 5538, 4826, 5935, 6737, 6204, 4827, 5936, 6535, 6204, 6191, 6191, 5101, 5101, 6378, 6393, 5232, 5101, 5036, 5101, 5543, 5259, 5326, 6190, 5101, 5101, 5101, 6278, 5443, 6506, 4434, 5101, 5568, 6236, 5101, 5101, 5568, 5101, 5102, 6511, 5134, 6507, 5164, 4451, 5101, 5101, 6392, 5101, 6165, 5101, 6192, 6192, 6192, 5101, 5101, 6378, 6392, 5101, 5101, 6517, 5376, 5101, 5583, 5101, 5101, 5101, 6011, 6524, 5101, 6278, 5101, 5101, 5101, 5037, 6155, 5101, 5101, 5101, 6382, 6533, 6549, 5101, 5101, 5101, 6379, 6393, 5101, 6544, 6381, 5101, 5593, 5101, 5101, 5229, 5634, 5101, 6676, 6549, 5101, 5616, 6230, 5101, 5351, 5877, 4895, 5411, 5432, 5101, 5101, 5101, 5031, 5101, 6675, 6548, 5101, 5101, 5101, 6391, 5101, 6539, 5426, 5101, 5101, 5417, 5920, 4896, 5101, 5648, 6722, 5416, 6462, 5101, 5562, 5101, 6554, 6381, 5101, 5680, 5101, 5101, 6381, 5101, 5101, 5101, 5101, 4583, 5101, 6540, 5425, 5101, 5426, 5101, 5101, 6709, 5417, 4895, 5102, 4595, 5101, 5101, 6406, 5101, 4594, 5403, 6540, 5101, 5714, 5003, 4991, 6090, 6568, 5101, 5101, 6464, 4988, 5101, 6091, 6381, 5101, 5842, 5037, 5998, 5996, 5996, 5413, 4893, 5101, 5101, 5101, 6419, 5101, 6091, 5101, 5101, 6492, 6491, 5101, 6091, 5101, 4895, 4561, 4896, 5101, 5101, 6090, 6089, 4896, 5101, 5101, 6494, 6256, 4559, 5101, 5101, 6090, 5101, 5101, 6090, 4561, 6089, 4561, 5101, 6089, 4560, 5537, 6089, 5101, 5537, 6574, 6752, 4888, 4577, 5716, 5997, 6579, 5101, 5844, 5037, 5101, 5101, 5101, 6196, 5101, 6462, 6465, 6463, 4869, 5826, 5829, 6587, 4489, 4646, 6598, 6591, 6597, 6593, 6605, 6602, 6607, 6611, 6613, 6617, 6619, 6628, 6625, 6632, 6621, 6635, 6639, 6640, 6644, 6647, 6654, 6653, 6651, 6658, 6661, 6665, 5101, 6574, 6723, 5101, 5876, 6281, 5670, 5418, 5421, 5101, 5101, 5101, 6469, 5107, 5101, 4975, 5101, 4976, 6672, 5101, 5101, 5101, 6682, 6494, 5101, 5101, 5101, 6695, 6680, 5313, 6686, 5101, 5877, 5684, 4434, 6246, 5101, 5101, 6163, 5101, 5101, 5101, 6692, 5101, 5101, 6495, 5101, 5101, 6703, 5101, 5101, 5101, 6713, 5101, 5101, 6718, 6717, 4834, 6722, 5101, 5418, 5422, 5101, 6727, 6734, 5101, 5881, 5357, 5337, 6746, 5101, 5101, 5101, 6495, 6378, 5101, 6222, 6745, 5101, 5889, 5128, 5074, 4442, 6224, 6747, 5101, 5877, 5615, 5671, 5876, 5101, 5879, 5101, 5899, 6230, 5101, 5101, 6089, 5101, 5101, 4892, 5101, 5412, 5002, 6734, 5101, 5101, 6711, 5101, 5101, 5253, 5101, 5877, 5877, 5877, 5101, 5101, 5101, 6771, 5101, 5101, 6575, 5642, 4635, 5411, 6089, 5101, 4889, 5258, 5101, 5252, 4561, 5101, 5101, 6090, 5252, 4561, 5876, 5876, 5101, 5101, 5101, 5914, 6353, 6148, 5106, 4974, 5101, 5101, 5972, 5101, 4989, 5101, 6165, 5425, 5101, 6688, 5107, 5101, 6111, 5724, 6759, 5725, 4561, 5101, 5101, 5983, 5994, 5101, 5190, 5879, 5101, 5101, 5101, 5344, 5376, 5106, 5101, 5101, 5413, 6463, 5879, 5102, 6775, 6767, 5101, 5101, 5997, 5101, 5101, 5101, 4811, 4583, 6765, 5101, 5101, 5101, 5101, 6098, 5420, 5101, 5998, 5101, 5101, 5101, 4818, 5109, 5101, 5413, 5537, 5101, 5101, 6165, 5101, 6111, 6564, 5101, 5998, 5101, 6769, 5101, 5101, 6132, 6137, 5101, 6098, 5101, 5101, 6033, 6031, 6039, 5105, 5101, 5109, 5101, 4863, 5101, 6776, 5101, 5101, 5101, 6035, 4434, 5101, 6161, 5536, 5101, 5036, 5102, 5101, 5101, 6088, 5101, 5101, 5412, 6089, 1048576, 1073741824, 0, 0, 0, -872415232, 4194560, 4196352, 270532608, 2097152, 4194304, 117440512, 134217728, 4194304, 16777216, 4194432, 3145728, 16777216, 134217728, 536870912, 1073741824, 0, 541065216, 541065216, -2143289344, -2143289344, 4194304, 4194304, 4196352, -2143289344, 4194304, 4194432, 37748736, 541065216, -2143289344, 4194304, 4194304, 4194304, 4194304, 37748736, 4194304, 4194304, 4198144, 4196352, 8540160, 4194304, 4194304, 4194304, 4196352, 276901888, 4194304, 4194304, 8425488, 4194304, 1, 0, 1024, 1024, 0, 1024, 742391808, 239075328, -1405091840, 742391808, 742391808, 775946240, 239075328, 171966464, 775946240, 171966464, 171966464, 171966464, 171966464, -1405091840, 775946240, 775946240, -1405091840, -1371537408, 775946240, 775946240, 775946240, 171966464, 239075328, 239075328, 171966464, 775946240, -1371537408, 775946240, 775946240, -1371537408, 239075328, 775946240, 775946240, 775946240, 775946240, 4718592, 64, 4718592, 2097216, 4720640, 541589504, 4194368, 541589504, 4194400, 4194368, 541065280, 4194368, -2143289280, 4194368, -2143285440, -2143285408, -2143285408, -2109730976, -2143285408, -2143285408, -2143285408, -2143285408, 776470528, -2143285408, -2109730976, 775946336, 775946304, 776470528, 775946304, -1908404384, 2, 4, 8, 262144, 0, 0, 0, 0x80000000, 8, 262144, 262144, 1048576, 0, 128, 4096, 0, 4194304, 128, 128, 0, 1048576, 0, 0, 1536, 1792, 0, 0, 1, 2, 4, 128, 2097152, 8192, 8392704, 0, 0, 1, 4, 8, 262144, 536870912, 64, 64, 32, 96, 96, 96, 96, 128, 1536, 524288, 96, 64, 524288, 524288, 1536, 1024, 0, 0, 0, 29, 96, 1048576, 128, 128, 128, 128, 2048, 2048, 2048, 2048, 2048, 2048, 0, 96, 524288, 96, 64, 0, 0, 128, 1024, 524288, 64, 64, 96, 96, 524288, 524288, 4100, 1024, 100680704, 96, 524288, 64, 96, 524288, 64, 80, 528, 524304, 1048592, 2097168, 268435472, 16, 16, 2, 536936448, 16, 262160, 16, 536936448, 16, 17, 17, 20, 16, 48, 16, 16, 20, 560, 24, 560, 48, 2097680, 3145744, 1048592, 1048592, 2097168, 16, 1049104, 2228784, 2097168, 2097168, 16, 16, 16, 16, 20, 48, 48, 3146256, 2097680, 1048592, 16, 16, 16, 28, 0, 2097552, 3146256, 16, 16, 16, 21, 16, 16, 28, 16, 0, 16, 0, -2046820352, 0, 0, 2, 2, 2, 2098064, 17, 21, 266240, 1048576, 67108864, 0x80000000, 0, 0, 64, 65536, 1048576, 0, 16, 16, 163577856, 17, 528, 528, 16, 528, -161430188, -161429676, -161429676, -161430188, -161429680, -161430188, -161430188, -161429680, -161429676, -161349072, -161429675, -161349072, -161349072, -161349072, -161349072, -161347728, -161347728, -161347728, -161347728, -161298572, -160774288, -160299084, -161298572, -161298576, -160299088, -161298576, -160774284, -160774284, -161298572, -161298572, -161298572, -161298572, 112, 21, 53, 146804757, 146812949, 146862101, 146863389, -161429676, -160905388, -161429676, -161429676, -161429676, -161429676, -161429675, -161349072, 146863421, 148960541, 146863389, 146863389, 148960541, 146863421, 148960541, 148960541, -161429740, -161429676, -160905388, -161298572, -161298572, -18860267, -160774284, -18729163, 0, 0, 1, 6, 8, 16, 262144, 0, 0, 1, 8, 0, 24, 0, 0, 1, 14, 16, 32, 1024, 32768, 100663296, -1073741824, 0, 0, 0, 150528, 131072, 16777216, 0, 0, 1, 102, 1, 32768, 131328, 131072, 524288, 2097152, 8388608, 16777216, 164096, 0, 0, 0, 1007, 0, 1073741825, 0x80000000, 0x80000000, 1073741824, 8, 0, 0, 58368, 0, 0, 65536, 1048576, 4096, 1048576, 512, 512, 9476, 134218240, 0, 1073741824, 2621440, 1073741824, 0x80000000, 0x80000000, 0, 0, 66048, 0, 0, 0, 67108864, 0, 0, 0, 16384, 0, 0, 0, 8, 0, 0, 0, 9, 4456448, 8, 16777216, 1073774592, 1226014816, 100665360, 100665360, 100665360, 100665360, -2046818288, 1091799136, 1091799136, 1091803360, 1091799136, 1091799136, -2044196848, 1091799136, 1091799136, 1091799136, 1091799136, 1091799136, 1158908000, 1158908001, 1192462432, 1192462448, 1192462448, 1192462448, 1192462448, 1200851056, 1091799393, 1200851056, 1200851056, 1091799393, 1200851056, 1200851056, 1200851056, 1192462448, 1870638912, 1870638912, 1870655296, 1870638912, 1870655296, 1870655296, 1870655296, 1870655296, 1870655296, 1870655312, 1870655316, 1870655316, 1870655316, 1870655317, 1870655348, 1870655316, 1870655316, 1870655312, 1870655312, 1879027568, 1879043952, 1870655316, 1870655316, 1870655316, 1870638928, 1879043952, 1879043956, 0, 0, 1, 12288, 0, 229440, 1048576, 1224736768, 100663296, 0, 0, 0, 1024, 0, 0, 8192, 0, 0, 0, 576, 0, 231488, 1090519040, 0, 0, 0, 2048, 0, 0, 134217728, 0, 1157627904, 1191182336, 0, 0, 131584, 268435456, 49152, 0, 0, 0, 134217728, 0, 0, 0, 16, 0, 0, 0, 13, 0, 9437184, 231744, 0, 0, 235712, 0, 0, 131328, 0, 0, 131072, 32768, 0, 0, 134217728, 0, 520000, 7864320, 1862270976, 0, 0, 0, 4096, 0, 0, 0, 1862270976, 1862270976, 1862270976, 0, 16252928, 0, 0, 0, 8192, 64, 98304, 1048576, 150994944, 83886080, 117440512, 0, 0, 2, 4, 16, 32, 256, 1024, 8192, 33554432, 0, 0, 64, 256, 3584, 8192, 16384, 65536, 262144, 524288, 1048576, 2097152, 4194304, 0x80000000, 8192, 98304, 393216, 524288, 1048576, 1048576, 2097152, 4194304, 251658240, 536870912, 8192, 16384, 98304, 393216, 251658240, 536870912, 1073741824, 0, 0, 2097152, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 240, 0, 83886080, 117440512, 64, 0, 2, 0, 0, 524288, 524288, 524288, 524288, 256, 1536, 2048, 8192, 16384, 256, 1536, 8192, 65536, 262144, 524288, 2097152, 67108864, 4194304, 16777216, 100663296, 134217728, 536870912, 524288, 2097152, 134217728, 268435456, 536870912, 1073741824, 0, 0, 524288, 2097152, 0, 0, 1048576, 2097152, 67108864, 1073741824, 0, 0, 1536, 65536, 262144, 524288, 33554432, 0, 1024, 65536, 262144, 2097152, 2097152, 1073741824, 0, 0, 2, 8, 16, 32, 0, 8192, 4096, 0, 0, 605503, 1066401792, 9476, 512, 0, 32, 384, 8192, 4194312, 4194312, 541065224, 4194312, 4194312, 4194312, 4194312, 4194344, -869654016, -869654016, 4203820, -869654016, -869654016, -869654016, -869654016, 1279402504, 1279402504, 1279402504, 1279402504, 2143549415, 2143549415, 2143549415, 2143549415, 2143549423, 2143549423, 2143549423, 2143549423, 2143549423, 2143549423, 0, 0, 2, 16384, 32768, 260, 512, 0, 0, 0, 65536, 0, 0, 0, 384, 8192, 0, 32, 512, 0, 1050624, 262144, 512, 1275208192, 139264, 1275068416, 0, 0, 4, 128, 1024, 2048, 16384, 262144, 8, 4194304, 0, 0, 0, 82432, 0, 40, 0, 0, 4, 256, 1024, 98304, 131072, 16777216, 268435456, 0, 0, 300, 4203520, 0, 0, 2097152, 1073741824, 0x80000000, 0, 0, 520, 4333568, 1275068416, 0, 0, 4194304, 1024, 0, 4096, 8192, 0, 0, 0, 520, 520, 0, 0, 0, 164096, 999, 29619200, 2113929216, 0, 0, 0, 1007, 1007, 1007, 0, 0, 8, 124160, 32, 512, 0, 2048, 524288, 0, 536870912, 0, 139264, 0, 0, 0, 139264, 0, 40, 0, 2621440, 0, 0, 0x80000000, 1610612736, 0, 0, 0, 229376, 0, 40, 0, 524288, 2097152, 1073741824, 44, 0, 0, 0, 262144, 0, 0, 16384, 229376, 4194304, 25165824, 100663296, 402653184, 1610612736, 0, 110, 110, 110, 0, 0, 8388608, 8388608, 8192, 33554432, 67108864, 134217728, 1073741824, 0, 0x80000000, 0, 0, 0, 12545, 25165824, 33554432, 67108864, 402653184, 536870912, 0, 104, 104, 104, 8192, 33554432, 134217728, 0, 0, 8388608, 134217728, 1073741824, 0, 229376, 25165824, 33554432, 402653184, 536870912, 0, 0, 256, 1024, 65536, 16777216, 268435456, 0, 0, 0, 524288, 0, 0, 0, 64, 0, 0, 0, 128, 0, 0, 0, 256, 0, 0, 0, 300, 524288, 2097152, 0x80000000, 0, 0, 1, 6, 32, 64, 256, 512, 256, 1024, 4096, 8192, 65536, 2, 4, 32, 64, 256, 1024, 0, 2, 4, 256, 1024, 65536, 4, 64, 256, 1024, 0, 0, 8, 8388608, 0, 98304, 131072, 25165824, 268435456, 536870912, 0, 0, 8388608, 4096, 0, 0, 8, 8, 8, 0, 2048, 524288, 67108864, 536870912, 32, 4100, 67108864, 0, 32768, 0, 32768, 0, 1049088, 0, 134348800, 270532608, 0, 1049088, 1049088, 8192, 1049088, 12845065, 12845065, 12845065, 12845065, 147193865, 5505537, 5591557, 5587465, 5587457, 5587457, 147202057, 5587457, 5587457, 5591557, 5587457, 13894153, 13894153, 13894153, 13894153, 81003049, 13894153, -1881791493, -1881791493, -1881791493, -1881791493, 0, 0, 8, 33554432, 262144, 0, 33554432, 1024, 0, 4, 0, 0, 0, 867647, 1, 5505024, 0, 0, 15, 16, 32, 192, 86528, 9, 0, 0, 16, 8192, 0, 0, 23, 0, 75497472, 0, 0, 0, 1048576, 5505024, -1887436800, 0, 0, 0, 2097152, 268435456, 0, 0, 4096, 8192, 67108864, 0, 0, 262144, 4194304, 8388608, 0, 0, 33554432, 8192, 0, 0, 288, 8388608, 0, 0, 0, 81920, 0, 0, 24, 282624, 64, 896, 8192, 131072, 262144, 1048576, 16777216, 33554432, -1946157056, 0, 0, 0, 2621440, 0, 131072, 0, 32, 0, 0, 2048, 3145728, 0, 16384, 65536, 0, 0, 268435456, 32, 64, 384, 512, 5120, 8192, 0, 64, 0, 2048, 1048576, 0, 0, 32, 64, 384, 8192, 131072, 0, 0, 32768, 134217728, 0, 0, 8, 32, 64, 1024, 2048, 0, 2, 8, 32, 384, 8192, 131072, 33554432, 131072, 1048576, 33554432, 134217728, 0x80000000, 0, 0, 2048, 524288, 536870912, 0, 1073741824, 0, 131072, 33554432, 0x80000000, 0, 0, 33554432, 1073741824, 0, 32, 0, 524288, 0, 0, 67108864, 64, 64, 0, 96, 96, 0, 524288, 524288, 524288, 64, 64, 64, 64, 96, 96, 96, 0, 0, 0, 28, 0, 8396800, 4194304, 134217728, 2048, 134217728, 0, 0, 32, 1, 0, 8396800, 0, 0, 32, 64, 128, 1024, 2048, 262144, 0, 16384, 0, 2, 4, 64, 128, 3840, 16384, 19922944, 2080374784, 0, 16384, 16384, 16777216, 16384, 32768, 1048576, 2097152, 4194304, 16777216, 524288, 268567040, 16384, 2113544, 68489237, 72618005, 68423701, 68423701, 68423701, 68489237, 68423701, -2079059883, -2079059947, 68423701, 85200917, 68423701, 68423701, 68423701, 68423701, 68423765, -2079059883, 68425749, 68423703, 69488664, 85200919, 69488664, 69488664, 69488664, 69488664, 70537244, 70537245, 70537245, 70537245, 70537309, 70537245, -2076946339, -2076946403, 70537245, -2076946339, 70537245, 70537245, 70537245, 70537245, 70539293, -2022351745, -2022351745, -2022351617, -2022351745, -2022351617, -2022351617, -2022351617, -2022351617, -2022351617, -2022351617, -2022351745, -2022351617, -2022351617, 0, 0, 40, 67108864, 331776, 83886080, 0, 0, 59, 140224, 5505024, 5242880, -2080374784, -2080374784, 268288, 29, 0, 284672, 0, 0, 68157440, 137363456, 0, 66, 66, 0, 63, 64, 351232, 63, 192, 351232, 7340032, -2030043136, 0, 0, 0, 4194304, 1, 1024, 32, 64, 256, 32768, 65536, 512, 131072, 268435456, 0, 0, 134348800, 134348800, 16, 4096, 262144, 1048576, 4194304, 8388608, 16777216, 33554432, 5242880, 0, 7, 0, 0, 142606336, 0, -872415232, 0, 0, 0, 131072, 0, 0, 0, 999, 259072, 4194304, 25165824, 0, 20480, 0, 0, 64, 256, 1536, 8192, 16384, 0, 12, 3145728, 0, 0, 0, 3145728, 64, 3072, 20480, 65536, 262144, 32, 192, 3072, 20480, 4, 1048576, 0, 0, 128, 131072, 0, 134218752, 0, 0, 128, 134217728, 5242880, 0, 6, 0, 0, 16384, 65536, 7340032, 50331648, 32, 192, 1024, 2048, 4096, 8192, 65536, 32768, 65536, 4194304, 16777216, 0x80000000, 0, 0, 1, 4, 0, 0, 256, 1536, 65536, 65536, 2097152, 4194304, 50331648, 0x80000000, 32, 192, 1024, 65536, 268435456, 0, 0, 32768, 4194304, 16777216, 0, 0, 184549376, 0, 0, 243269632, 0, 0, 32768, 131072, 131072, 0, 32768, 32768, 1, 2, 4, 2097152, 16777216, 134217728, 268435456, 1073741824, 0x80000000, 128, 2097152, 4194304, 50331648, 0, 0, 0, 8388608, 0, 0, 0, 768, 2, 4, 50331648, 0, 0, 536870912, 9216, 0, 0, 0, 49152, 2, 4, 128, 50331648, 0, 0, 4096, 4194304, 268435456, 0, 0, 1075838976, 2097152, 2097152, 268435456, 4194432, 268435968, 268435968, 1073743872, 268435968, 0, 128, 6144, 0, 229376, 128, 268435968, 268436032, 256, 256, 536871168, 256, 256, 256, 256, 257, 256, 384, -1879046336, -1879046334, 1073744256, -1879046334, -1879046326, -1879046334, -1879046334, -1879046326, -1879046326, -1845491902, -1878784182, 268444480, 268444480, 268436288, 268436288, 268436288, 268436288, 268436289, 268444480, 268444480, 268444480, 268444480, 2100318149, 2100318149, 2100318149, 2100318149, 2100326341, 2100326341, 2100318149, 2100326341, 2100326341, 0, 0, 256, 2048, 2048, 0, 0, 0, 4, 8, 262144, 134217728, 1, 1024, 0, 4096, 0, 64, 1856, 0x80000000, 0, 0, 256, 65536, 2432, 0, 1864, 0, 1, 2, 16, 32, 64, 0, 301989888, 0, 262144, 131072, 0, 0, 832, 8192, 0, 1, 2, 56, 64, 896, 0, 1, 4036, 19939328, 2080374784, 2080374784, 0, 0, 0, 16252928, 1, 16, 32, 128, 512, 2304, 0, 8, 0, 512, 301989888, 0, 0, 262144, 524288, 134217728, 536870912, 0, 24576, 0, 0, 0, 33554432, 0, 0, 0, 32768, 0, 0, 2097152, 134217728, 0, 32768, 196608, 0, 0, 0, 1, 128, 512, 2048, 524288, 268435456, 536870912, 0, 33554432, 262144, 8192, 0, 0, 256, 8388608, 0, 0, 1, 4, 128, 3584, 16384, 3145728, 16777216, 67108864, 134217728, 805306368, 1073741824, 0, 0, 1024, 2048, 16384, 3145728, 0, 8192, 0, 8192, 0, 536870912, 524288, 536870912, 1073741824, 0, 1, 2, 112, 128, 3072, 2048, 3145728, 16777216, 536870912, 1073741824, 0, 0, 2097152, 16777216, 1073741824, 0, 0, 0, 8192, 8192, 8192, 9216, 33554432, 32768, 33554432, 0, 0, 262144, 0, 16777216, 0, 16777216, 16777216, 16777216, 16777216, 0, 0, 2097152, 16777216, 0, 0, 16777216, 268500992, 4243456, 0, 0, 512, 65536, 0, 4096, 4096, 0, 4096, 4096, 4096, 4096, 0, 0, 0, 32, 0, 0, 0, 41, 0, 4243456, 4096, 12289, 1073754113, 12289, 12289, 1124073472, 12289, 12289, 1098920193, 1098920193, 1124073488, 1124073472, 1124073472, 1258292224, 1124073472, 1124073474, 1124073472, 1124073472, 1124073472, 1124073472, 1124073472, 1392574464, 1124073472, 12289, 1124085761, 1124085761, 1124085761, 1124085761, 1132474625, 1098920209, 1132474625, 1132474625, 1098920209, 1132474625, 1132474625, 1132474625, 1132474625, 1400975617, 1124085777, 1124085761, 1124085761, 1258304513, 2132360255, 2132360255, 2132622399, 2132360255, 2132622399, 2132622399, 2140749119, 2141011263, 2132622399, 2132622399, 2132622399, 2132622399, 2132360255, 2141011263, 2141011263, 0, 0, 512, 131072, 0, 128, 131072, 1024, 134217728, 0, 0, 0, 50331648, 1073741824, 0, 1, 4, 64, 128, 3584, 318767104, 0, 0, 0, 268435456, 0, 12289, 0, 0, 0, 159383552, 25165824, 0, 0, 0, 536870912, 0, 0, 0, 24576, 58720256, 0, 0, 12305, 13313, 0, 0, 0, 1073741824, 0, 0, 0, 12561, 0, 78081, 327155712, 0, 0, 0, 1275068416, 0, 605247, 1058013184, 1073741824, 1073741824, 8388608, 0, 0, 503616, 7864320, 867391, 1058013184, 1073741824, 0, 1, 6, 96, 384, 512, 1024, 4096, 8192, 16384, 229376, 25165824, 33554432, 268435456, 536870912, 0, 867647, 1066401792, 0, 0, 0, 512, 1048576, 0, 0, 9, 8388608, 12288, 0, 0, 0, 512, 2760704, 77824, 0, 0, 0, 1024, 2048, 3145728, 2048, 77824, 524288, 1048576, 0, 0, 0, 512, 0, 1048576, 0, 1, 30, 32, 1024, 2048, 1024, 2048, 339968, 524288, 1048576, 16777216, 100663296, 134217728, 805306368, 1073741824, 1024, 2048, 12288, 65536, 0, 65536, 0, 0, 19947520, 0, 0, 0, 16777216, 0, 0, 0, 5, 1024, 2048, 12288, 327680, 524288, 33554432, 134217728, 536870912, 1073741824, 14, 16, 1024, 4096, 8192, 229376, 0, 2, 16384, 4194304, 0x80000000, 0, 0, 0, 8, 0, 65536, 262144, 7340032, 50331648, 67108864, 0x80000000, 4096, 65536, 262144, 524288, 1048576, 33554432, 256, 0, 256, 0, 256, 1, 12, 1024, 134217728, 262144, 134217728, 536870912, 0, 0, 268435456, 1, 4, 8, 134217728, 4, 8, 536870912, 0, 2, 16, 64, 128, 0, 0, 262144, 536870912, 0, 0, 1073741824, 32768, 0, 8, 32, 512, 4096, 9437184, 0, 0, 1048576, 2097152, 4194304, 67108864, 134217728, 0, 1024, 137363456, 66, 25165824, 26214400, 92274688, 92274688, 25165952, 92274688, 25165824, 25165824, 92274688, 25165824, 25165824, 92274688, 92274688, 92274720, 92274688, 25165824, 92274688, 93323264, 25165890, 100721664, 100721664, 25165890, 100721928, 100721928, 100787464, 100853000, 100721928, 100721928, 125977600, 125977600, 125977600, 125977600, 127026176, 125977600, 125846528, 125846528, 125846560, 125846528, 125846528, 125846528, 126895104, 125846528, 125977600, 127026176, 125977600, 125977600, 127026176, 127026176, 281843, 281843, 1330419, 281843, 1330419, 281843, 1330419, 1330419, 281843, 281843, 281843, 5524723, 39079155, 72633587, 5524723, 5524723, 5524723, 5524723, 93605107, 72633587, 72633587, 92556531, 93605107, 127290611, 127290611, 97799411, 127290611, 131484915, 0, 0, 1536, 0x80000000, 0, 0, 17408, 33554432, 0, 1, 12, 1024, 262144, 0, 58624, 0, 0, 1536, 0, 189696, 0, 0, 0, 1792, 0x80000000, 0, 148480, 50331648, 0, 1, 14, 1024, 4096, 65536, 524288, 240, 19456, 262144, 0, 0, 19456, 262144, 0, 4194304, 0, 0, 1024, 2097152, 0, 0, 0, 150528, 0, 0, 0, 512, 4096, 8192, 131072, 0, 57344, 0, 0, 0, 2048, 100663296, 0, 0, 256, 0, 65536, 524288, 1048576, 33554432, 67108864, 2, 48, 64, 128, 3072, 16384, 262144, 0, 0, 32, 4096, 8192, 131072, 1048576, 8388608, 33554432, 134217728, 2048, 262144, 0, 0, 2048, 268435456, 16, 64, 128, 262144, 0, 0, 32768, 65536, 131072, 0, 1, 2, 16, 64, 0\n];\n\nXQueryParser.TOKEN =\n[\n  \"(0)\",\n  \"PragmaContents\",\n  \"DirCommentContents\",\n  \"DirPIContents\",\n  \"CDataSection\",\n  \"Wildcard\",\n  \"EQName\",\n  \"URILiteral\",\n  \"IntegerLiteral\",\n  \"DecimalLiteral\",\n  \"DoubleLiteral\",\n  \"StringLiteral\",\n  \"PredefinedEntityRef\",\n  \"'\\\"\\\"'\",\n  \"EscapeApos\",\n  \"ElementContentChar\",\n  \"QuotAttrContentChar\",\n  \"AposAttrContentChar\",\n  \"PITarget\",\n  \"NCName\",\n  \"QName\",\n  \"S\",\n  \"S\",\n  \"CharRef\",\n  \"CommentContents\",\n  \"EOF\",\n  \"'!'\",\n  \"'!='\",\n  \"'\\\"'\",\n  \"'#'\",\n  \"'#)'\",\n  \"'$'\",\n  \"'%'\",\n  \"''''\",\n  \"'('\",\n  \"'(#'\",\n  \"'(:'\",\n  \"')'\",\n  \"'*'\",\n  \"'*'\",\n  \"'+'\",\n  \"','\",\n  \"'-'\",\n  \"'-->'\",\n  \"'.'\",\n  \"'..'\",\n  \"'/'\",\n  \"'//'\",\n  \"'/>'\",\n  \"':'\",\n  \"':)'\",\n  \"'::'\",\n  \"':='\",\n  \"';'\",\n  \"'<'\",\n  \"'<!--'\",\n  \"'</'\",\n  \"'<<'\",\n  \"'<='\",\n  \"'<?'\",\n  \"'='\",\n  \"'>'\",\n  \"'>='\",\n  \"'>>'\",\n  \"'?'\",\n  \"'?>'\",\n  \"'@'\",\n  \"'NaN'\",\n  \"'['\",\n  \"']'\",\n  \"'after'\",\n  \"'all'\",\n  \"'allowing'\",\n  \"'ancestor'\",\n  \"'ancestor-or-self'\",\n  \"'and'\",\n  \"'any'\",\n  \"'append'\",\n  \"'array'\",\n  \"'as'\",\n  \"'ascending'\",\n  \"'at'\",\n  \"'attribute'\",\n  \"'base-uri'\",\n  \"'before'\",\n  \"'boundary-space'\",\n  \"'break'\",\n  \"'by'\",\n  \"'case'\",\n  \"'cast'\",\n  \"'castable'\",\n  \"'catch'\",\n  \"'check'\",\n  \"'child'\",\n  \"'collation'\",\n  \"'collection'\",\n  \"'comment'\",\n  \"'constraint'\",\n  \"'construction'\",\n  \"'contains'\",\n  \"'content'\",\n  \"'context'\",\n  \"'continue'\",\n  \"'copy'\",\n  \"'copy-namespaces'\",\n  \"'count'\",\n  \"'decimal-format'\",\n  \"'decimal-separator'\",\n  \"'declare'\",\n  \"'default'\",\n  \"'delete'\",\n  \"'descendant'\",\n  \"'descendant-or-self'\",\n  \"'descending'\",\n  \"'diacritics'\",\n  \"'different'\",\n  \"'digit'\",\n  \"'distance'\",\n  \"'div'\",\n  \"'document'\",\n  \"'document-node'\",\n  \"'element'\",\n  \"'else'\",\n  \"'empty'\",\n  \"'empty-sequence'\",\n  \"'encoding'\",\n  \"'end'\",\n  \"'entire'\",\n  \"'eq'\",\n  \"'every'\",\n  \"'exactly'\",\n  \"'except'\",\n  \"'exit'\",\n  \"'external'\",\n  \"'first'\",\n  \"'following'\",\n  \"'following-sibling'\",\n  \"'for'\",\n  \"'foreach'\",\n  \"'foreign'\",\n  \"'from'\",\n  \"'ft-option'\",\n  \"'ftand'\",\n  \"'ftnot'\",\n  \"'ftor'\",\n  \"'function'\",\n  \"'ge'\",\n  \"'greatest'\",\n  \"'group'\",\n  \"'grouping-separator'\",\n  \"'gt'\",\n  \"'idiv'\",\n  \"'if'\",\n  \"'import'\",\n  \"'in'\",\n  \"'index'\",\n  \"'infinity'\",\n  \"'inherit'\",\n  \"'insensitive'\",\n  \"'insert'\",\n  \"'instance'\",\n  \"'integrity'\",\n  \"'intersect'\",\n  \"'into'\",\n  \"'is'\",\n  \"'item'\",\n  \"'json'\",\n  \"'json-item'\",\n  \"'key'\",\n  \"'language'\",\n  \"'last'\",\n  \"'lax'\",\n  \"'le'\",\n  \"'least'\",\n  \"'let'\",\n  \"'levels'\",\n  \"'loop'\",\n  \"'lowercase'\",\n  \"'lt'\",\n  \"'minus-sign'\",\n  \"'mod'\",\n  \"'modify'\",\n  \"'module'\",\n  \"'most'\",\n  \"'namespace'\",\n  \"'namespace-node'\",\n  \"'ne'\",\n  \"'next'\",\n  \"'no'\",\n  \"'no-inherit'\",\n  \"'no-preserve'\",\n  \"'node'\",\n  \"'nodes'\",\n  \"'not'\",\n  \"'object'\",\n  \"'occurs'\",\n  \"'of'\",\n  \"'on'\",\n  \"'only'\",\n  \"'option'\",\n  \"'or'\",\n  \"'order'\",\n  \"'ordered'\",\n  \"'ordering'\",\n  \"'paragraph'\",\n  \"'paragraphs'\",\n  \"'parent'\",\n  \"'pattern-separator'\",\n  \"'per-mille'\",\n  \"'percent'\",\n  \"'phrase'\",\n  \"'position'\",\n  \"'preceding'\",\n  \"'preceding-sibling'\",\n  \"'preserve'\",\n  \"'previous'\",\n  \"'processing-instruction'\",\n  \"'relationship'\",\n  \"'rename'\",\n  \"'replace'\",\n  \"'return'\",\n  \"'returning'\",\n  \"'revalidation'\",\n  \"'same'\",\n  \"'satisfies'\",\n  \"'schema'\",\n  \"'schema-attribute'\",\n  \"'schema-element'\",\n  \"'score'\",\n  \"'self'\",\n  \"'sensitive'\",\n  \"'sentence'\",\n  \"'sentences'\",\n  \"'skip'\",\n  \"'sliding'\",\n  \"'some'\",\n  \"'stable'\",\n  \"'start'\",\n  \"'stemming'\",\n  \"'stop'\",\n  \"'strict'\",\n  \"'strip'\",\n  \"'structured-item'\",\n  \"'switch'\",\n  \"'text'\",\n  \"'then'\",\n  \"'thesaurus'\",\n  \"'times'\",\n  \"'to'\",\n  \"'treat'\",\n  \"'try'\",\n  \"'tumbling'\",\n  \"'type'\",\n  \"'typeswitch'\",\n  \"'union'\",\n  \"'unique'\",\n  \"'unordered'\",\n  \"'updating'\",\n  \"'uppercase'\",\n  \"'using'\",\n  \"'validate'\",\n  \"'value'\",\n  \"'variable'\",\n  \"'version'\",\n  \"'weight'\",\n  \"'when'\",\n  \"'where'\",\n  \"'while'\",\n  \"'wildcards'\",\n  \"'window'\",\n  \"'with'\",\n  \"'without'\",\n  \"'word'\",\n  \"'words'\",\n  \"'xquery'\",\n  \"'zero-digit'\",\n  \"'{'\",\n  \"'{{'\",\n  \"'{|'\",\n  \"'|'\",\n  \"'||'\",\n  \"'|}'\",\n  \"'}'\",\n  \"'}}'\"\n];\n\n},{}],\"/node_modules/xqlint/lib/tree_ops.js\":[function(_dereq_,module,exports){\n'use strict';\n\nexports.TreeOps = {\n    flatten: function(node){\n        var that = this;\n        var value = '';\n        if(!node) {\n            throw new Error('Invalid node found');\n        } else if (node.value === undefined) {\n            node.children.forEach(function(child){\n                value += that.flatten(child);\n            });\n        } else {\n            value += node.value;\n        }\n        return value;\n    },\n    \n    concat: function(obj1, obj2, copy){\n        var result = copy ? {} : obj1;\n        if(copy){\n            Object.keys(obj1).forEach(function(key){\n                result[key] = obj1[key];\n            });\n        }\n        var keys = Object.keys(obj2);\n        keys.forEach(function(key){\n            result[key] = obj2[key];\n        });\n        return result;\n    },\n    \n    removeParentPtr: function(ast){\n        if(ast.getParent !== undefined) {\n            delete ast.getParent;\n        }\n        for(var i in ast.children) {\n            var child = ast.children[i];\n            this.removeParentPtr(child);\n        }\n    },\n    \n    inRange: function(p, pos, exclusive){\n        if(p && p.sl <= pos.line && pos.line <= p.el) {\n            if(p.sl < pos.line && pos.line < p.el) {\n                return true;\n            } else if(p.sl === pos.line && pos.line < p.el) {\n                return p.sc <= pos.col;\n            } else if(p.sl === pos.line && p.el === pos.line) {\n                return p.sc <= pos.col && pos.col <= p.ec + (exclusive ? 1 : 0);\n            } else if(p.sl < pos.line && p.el === pos.line) {\n                return pos.col <= p.ec + (exclusive ? 1 : 0);\n            }\n        }\n    },\n    \n    findNode: function(ast, pos) {\n        if(!ast) {\n            return;\n        }\n        var p = ast.pos;\n        if(this.inRange(p, pos) === true) {\n            for(var i in ast.children) {\n                var child = ast.children[i];\n                var n = this.findNode(child, pos);\n                if(n !== undefined) {\n                    return n;\n                }\n            }\n            return ast;\n        } else {\n            return;\n        }\n    },\n    \n    astAsXML: function(node, indent){\n        var result =  '';\n        indent = indent ? indent : '';\n        if(node.value) {\n            result += (indent + '<' + node.name + '>' + node.value + '</' + node.name + '>\\n');\n        }\n        result += indent + '<' + node.name + '>\\n';\n        var that = this;\n        node.children.forEach(function(child){\n            result += that.astAsXML(child, indent + '  ');\n        });\n        result += indent + '</' + node.name + '>\\n';\n        return result;\n    }\n};\n},{}],\"/node_modules/xqlint/lib/xqdoc/parse_comment.js\":[function(_dereq_,module,exports){\n'use strict';\n\nexports.parseComment = function(comment){\n    comment = comment.trim();\n    var isXQDoc = comment.substring(0, 3) === '(:~';\n    if(isXQDoc){\n        var lines = comment.split('\\n');\n        var ann = {\n            description: ''\n        };\n        lines.forEach(function(line, index){\n            if(index === 0) {\n                line = line.substring(3);\n            }\n            line = line.trim();\n            if(line[0] === ':') {\n                line = line.substring(1);\n            }\n            line = line.trim();\n            ann.description += ' ' + line;\n        });\n        ann.description = ann.description.trim();\n        ann.description = ann.description.substring(0, ann.description.length - 2).trim();\n        return ann;\n    }\n};\n},{}],\"/node_modules/xqlint/lib/xqdoc/xqdoc.js\":[function(_dereq_,module,exports){\nvar _ = _dereq_('lodash');\nvar parseComment = _dereq_('./parse_comment').parseComment;\n\nexports.XQDoc = function(ast){\n    'use strict';\n\n    var doc = {};\n\n    this.getDoc = function(){\n        return doc;\n    };\n\n    this.WS = function(node){\n        if(node.value.trim().substring(0, 3) === '(:~') {\n            node.getParent.comment = parseComment(node.value);\n        }\n    };\n\n    this.AnnotatedDecl = function(node){\n        this.visitChildren(node);\n        node.comment = node.getParent.comment;\n        node.getParent.comment = undefined;\n    };\n    \n    this.XQuery = function(node){\n        this.visitChildren(node);\n    };\n\n    this.getXQDoc = function(sctx){\n        var doc = {\n            moduleNamespace: sctx.moduleNamespace,\n            description: sctx.description,\n            variables: [],\n            functions: []\n        };\n\n        _.forEach(sctx.variables, function(variable){\n            var varDecl = _.cloneDeep(variable.qname);\n            varDecl.annotations = variable.annotations;\n            varDecl.description = variable.description;\n            varDecl.type = variable.type;\n            varDecl.occurrence = variable.occurrence;\n            doc.variables.push(varDecl);\n        });\n\n        _.forEach(sctx.functions, function(fn, key){\n            if(key.substring(0, 'http://www.w3.org/2001/XMLSchema#'.length) === 'http://www.w3.org/2001/XMLSchema#') {\n                return;\n            }\n\n            var tokens = key.split('#');\n            doc.functions.push({\n                name: tokens[0],\n                uri: tokens[1],\n                params: fn.params\n            });\n        });\n\n        return doc;\n    };\n\n    this.visit = function (node) {\n        var name = node.name;\n        var skip = false;\n\n        if (typeof this[name] === 'function') {\n            skip = this[name](node) === true;\n        }\n\n        if (!skip) {\n            this.visitChildren(node);\n        }\n    };\n\n    this.visitChildren = function (node, handler) {\n        for (var i = 0; i < node.children.length; i++) {\n            var child = node.children[i];\n            if (handler !== undefined && typeof handler[child.name] === 'function') {\n                handler[child.name](child);\n            } else {\n                this.visit(child);\n            }\n        }\n    };\n\n    this.visit(ast);\n};\n\n},{\"./parse_comment\":\"/node_modules/xqlint/lib/xqdoc/parse_comment.js\",\"lodash\":\"/node_modules/xqlint/node_modules/lodash/index.js\"}],\"/node_modules/xqlint/lib/xqlint.js\":[function(_dereq_,module,exports){\n'use strict';\n\nvar _ = _dereq_('lodash');\n\nvar JSONiqParser = _dereq_('./parsers/JSONiqParser').JSONiqParser;\nvar XQueryParser = _dereq_('./parsers/XQueryParser').XQueryParser;\nvar JSONParseTreeHandler = _dereq_('./parsers/JSONParseTreeHandler').JSONParseTreeHandler;\nvar Translator = _dereq_('./compiler/translator').Translator;\nvar StyleChecker = _dereq_('./formatter/style_checker').StyleChecker;\nvar XQDoc = _dereq_('./xqdoc/xqdoc').XQDoc;\nvar completer = _dereq_('../lib/completion/completer');\nvar TreeOps = _dereq_('./tree_ops').TreeOps;\n\nvar createStaticContext = exports.createStaticContext = function(){\n    var StaticContext = _dereq_('./compiler/static_context').StaticContext;\n    return new StaticContext();\n};\n\nvar convertPosition = function (code, begin, end) {\n    var before = code.substring(0, begin);\n    var after = code.substring(0, end);\n    var startline = before.split('\\n').length;\n    var startcolumn = begin - before.lastIndexOf('\\n');\n    var endline = after.split('\\n').length;\n    var endcolumn = end - after.lastIndexOf('\\n');\n    var pos = {\n        sl: startline - 1,\n        sc: startcolumn - 1,\n        el: endline - 1,\n        ec: endcolumn - 1\n    };\n    return pos;\n};\n\nexports.JSONiqLexer = _dereq_('./lexers/jsoniq_lexer').JSONiqLexer;\nexports.XQueryLexer = _dereq_('./lexers/xquery_lexer').XQueryLexer;\nexports.XQLint = function (source, opts) {\n    if(_.defaults) {\n        opts = _.defaults(opts ? opts : {}, { styleCheck: false });\n    }\n\n    var ast, xqdoc;\n    var sctx = opts.staticContext ? opts.staticContext : createStaticContext();\n\n    this.getAST = function () {\n        return ast;\n    };\n    \n    this.printAST = function () {\n        return TreeOps.astAsXML(ast, '  ');\n    };\n\n    this.getXQDoc = function () {\n        return xqdoc.getXQDoc(sctx);\n    };\n\n    var markers = [];\n    this.getMarkers = function () {\n        return markers;\n    };\n    \n    this.getMarkers = function(type){\n        var m = [];\n        markers.forEach(function(marker){\n            if(marker.type === type || type === undefined){\n                m.push(marker);\n            }\n        });\n        return m;\n    };\n\n    this.getErrors = function(){\n        return this.getMarkers('error');\n    };\n\n    this.getWarnings = function(){\n        return this.getMarkers('warning');\n    };\n    \n    this.getCompletions = function(pos){\n        return completer.complete(source, ast, sctx, pos);\n    };\n\n    var syntaxError = false;\n    this.hasSyntaxError = function () {\n        return syntaxError;\n    };\n\n    var file = opts.fileName ? opts.fileName : '';\n    var isJSONiq = ((file.substring(file.length - '.jq'.length).indexOf('.jq') !== -1) && source.indexOf('xquery version') !== 0) || source.indexOf('jsoniq version') === 0;\n    var h = new JSONParseTreeHandler(source);\n    var parser = isJSONiq ? new JSONiqParser(source, h) : new XQueryParser(source, h);\n    try {\n        parser.parse_XQuery();\n    } catch (e) {\n        if (e instanceof parser.ParseException) {\n            syntaxError = true;\n            h.closeParseTree();\n            var pos = convertPosition(source, e.getBegin(), e.getEnd());\n            var message = parser.getErrorMessage(e);\n            if (pos.sc === pos.ec) {\n                pos.ec++;\n            }\n            markers.push({\n                pos: pos,\n                type: 'error',\n                level: 'error',\n                message: message\n            });\n        } else {\n            throw e;\n        }\n    }\n    ast = h.getParseTree();\n    if(opts.styleCheck) {\n        markers = markers.concat(new StyleChecker(ast, source).getMarkers());\n    }\n    xqdoc = new XQDoc(ast);\n    var translator = new Translator(sctx, ast);\n    markers = markers.concat(translator.getMarkers());\n};\n\n},{\"../lib/completion/completer\":\"/node_modules/xqlint/lib/completion/completer.js\",\"./compiler/static_context\":\"/node_modules/xqlint/lib/compiler/static_context.js\",\"./compiler/translator\":\"/node_modules/xqlint/lib/compiler/translator.js\",\"./formatter/style_checker\":\"/node_modules/xqlint/lib/formatter/style_checker.js\",\"./lexers/jsoniq_lexer\":\"/node_modules/xqlint/lib/lexers/jsoniq_lexer.js\",\"./lexers/xquery_lexer\":\"/node_modules/xqlint/lib/lexers/xquery_lexer.js\",\"./parsers/JSONParseTreeHandler\":\"/node_modules/xqlint/lib/parsers/JSONParseTreeHandler.js\",\"./parsers/JSONiqParser\":\"/node_modules/xqlint/lib/parsers/JSONiqParser.js\",\"./parsers/XQueryParser\":\"/node_modules/xqlint/lib/parsers/XQueryParser.js\",\"./tree_ops\":\"/node_modules/xqlint/lib/tree_ops.js\",\"./xqdoc/xqdoc\":\"/node_modules/xqlint/lib/xqdoc/xqdoc.js\",\"lodash\":\"/node_modules/xqlint/node_modules/lodash/index.js\"}],\"/node_modules/xqlint/node_modules/lodash/index.js\":[function(_dereq_,module,exports){\n(function (global){\n;(function() {\n  var undefined;\n  var VERSION = '3.10.1';\n  var BIND_FLAG = 1,\n      BIND_KEY_FLAG = 2,\n      CURRY_BOUND_FLAG = 4,\n      CURRY_FLAG = 8,\n      CURRY_RIGHT_FLAG = 16,\n      PARTIAL_FLAG = 32,\n      PARTIAL_RIGHT_FLAG = 64,\n      ARY_FLAG = 128,\n      REARG_FLAG = 256;\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n  var HOT_COUNT = 150,\n      HOT_SPAN = 16;\n  var LARGE_ARRAY_SIZE = 200;\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2;\n  var FUNC_ERROR_TEXT = 'Expected a function';\n  var PLACEHOLDER = '__lodash_placeholder__';\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      objectTag = '[object Object]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      weakMapTag = '[object WeakMap]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,\n      reUnescapedHtml = /[&<>\"'`]/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n  var reRegExpChars = /^[:!,]|[\\\\^$.*+?()[\\]{}|\\/]|(^[0-9a-fA-Fnrtuvx])|([\\n\\r\\u2028\\u2029])/g,\n      reHasRegExpChars = RegExp(reRegExpChars.source);\n  var reComboMark = /[\\u0300-\\u036f\\ufe20-\\ufe23]/g;\n  var reEscapeChar = /\\\\(\\\\)?/g;\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n  var reFlags = /\\w*$/;\n  var reHasHexPrefix = /^0[xX]/;\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n  var reIsUint = /^\\d+$/;\n  var reLatin1 = /[\\xc0-\\xd6\\xd8-\\xde\\xdf-\\xf6\\xf8-\\xff]/g;\n  var reNoMatch = /($^)/;\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n  var reWords = (function() {\n    var upper = '[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]',\n        lower = '[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]+';\n\n    return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');\n  }());\n  var contextProps = [\n    'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',\n    'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite',\n    'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'\n  ];\n  var templateCounter = -1;\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dateTag] = typedArrayTags[errorTag] =\n  typedArrayTags[funcTag] = typedArrayTags[mapTag] =\n  typedArrayTags[numberTag] = typedArrayTags[objectTag] =\n  typedArrayTags[regexpTag] = typedArrayTags[setTag] =\n  typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =\n  cloneableTags[dateTag] = cloneableTags[float32Tag] =\n  cloneableTags[float64Tag] = cloneableTags[int8Tag] =\n  cloneableTags[int16Tag] = cloneableTags[int32Tag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[stringTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[mapTag] = cloneableTags[setTag] =\n  cloneableTags[weakMapTag] = false;\n  var deburredLetters = {\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcC': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xeC': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss'\n  };\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;',\n    '`': '&#96;'\n  };\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\",\n    '&#96;': '`'\n  };\n  var objectTypes = {\n    'function': true,\n    'object': true\n  };\n  var regexpEscapes = {\n    '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34',\n    '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39',\n    'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46',\n    'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66',\n    'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78'\n  };\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;\n  var freeSelf = objectTypes[typeof self] && self && self.Object && self;\n  var freeWindow = objectTypes[typeof window] && window && window.Object && window;\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n  var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;\n  function baseCompareAscending(value, other) {\n    if (value !== other) {\n      var valIsNull = value === null,\n          valIsUndef = value === undefined,\n          valIsReflexive = value === value;\n\n      var othIsNull = other === null,\n          othIsUndef = other === undefined,\n          othIsReflexive = other === other;\n\n      if ((value > other && !othIsNull) || !valIsReflexive ||\n          (valIsNull && !othIsUndef && othIsReflexive) ||\n          (valIsUndef && othIsReflexive)) {\n        return 1;\n      }\n      if ((value < other && !valIsNull) || !othIsReflexive ||\n          (othIsNull && !valIsUndef && valIsReflexive) ||\n          (othIsUndef && valIsReflexive)) {\n        return -1;\n      }\n    }\n    return 0;\n  }\n  function baseFindIndex(array, predicate, fromRight) {\n    var length = array.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n  function baseIndexOf(array, value, fromIndex) {\n    if (value !== value) {\n      return indexOfNaN(array, fromIndex);\n    }\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n  function baseIsFunction(value) {\n    return typeof value == 'function' || false;\n  }\n  function baseToString(value) {\n    return value == null ? '' : (value + '');\n  }\n  function charsLeftIndex(string, chars) {\n    var index = -1,\n        length = string.length;\n\n    while (++index < length && chars.indexOf(string.charAt(index)) > -1) {}\n    return index;\n  }\n  function charsRightIndex(string, chars) {\n    var index = string.length;\n\n    while (index-- && chars.indexOf(string.charAt(index)) > -1) {}\n    return index;\n  }\n  function compareAscending(object, other) {\n    return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);\n  }\n  function compareMultiple(object, other, orders) {\n    var index = -1,\n        objCriteria = object.criteria,\n        othCriteria = other.criteria,\n        length = objCriteria.length,\n        ordersLength = orders.length;\n\n    while (++index < length) {\n      var result = baseCompareAscending(objCriteria[index], othCriteria[index]);\n      if (result) {\n        if (index >= ordersLength) {\n          return result;\n        }\n        var order = orders[index];\n        return result * ((order === 'asc' || order === true) ? 1 : -1);\n      }\n    }\n    return object.index - other.index;\n  }\n  function deburrLetter(letter) {\n    return deburredLetters[letter];\n  }\n  function escapeHtmlChar(chr) {\n    return htmlEscapes[chr];\n  }\n  function escapeRegExpChar(chr, leadingChar, whitespaceChar) {\n    if (leadingChar) {\n      chr = regexpEscapes[chr];\n    } else if (whitespaceChar) {\n      chr = stringEscapes[chr];\n    }\n    return '\\\\' + chr;\n  }\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n  function indexOfNaN(array, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 0 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var other = array[index];\n      if (other !== other) {\n        return index;\n      }\n    }\n    return -1;\n  }\n  function isObjectLike(value) {\n    return !!value && typeof value == 'object';\n  }\n  function isSpace(charCode) {\n    return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 ||\n      (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279)));\n  }\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = -1,\n        result = [];\n\n    while (++index < length) {\n      if (array[index] === placeholder) {\n        array[index] = PLACEHOLDER;\n        result[++resIndex] = index;\n      }\n    }\n    return result;\n  }\n  function sortedUniq(array, iteratee) {\n    var seen,\n        index = -1,\n        length = array.length,\n        resIndex = -1,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index],\n          computed = iteratee ? iteratee(value, index, array) : value;\n\n      if (!index || seen !== computed) {\n        seen = computed;\n        result[++resIndex] = value;\n      }\n    }\n    return result;\n  }\n  function trimmedLeftIndex(string) {\n    var index = -1,\n        length = string.length;\n\n    while (++index < length && isSpace(string.charCodeAt(index))) {}\n    return index;\n  }\n  function trimmedRightIndex(string) {\n    var index = string.length;\n\n    while (index-- && isSpace(string.charCodeAt(index))) {}\n    return index;\n  }\n  function unescapeHtmlChar(chr) {\n    return htmlUnescapes[chr];\n  }\n  function runInContext(context) {\n    context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Number = context.Number,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n    var arrayProto = Array.prototype,\n        objectProto = Object.prototype,\n        stringProto = String.prototype;\n    var fnToString = Function.prototype.toString;\n    var hasOwnProperty = objectProto.hasOwnProperty;\n    var idCounter = 0;\n    var objToString = objectProto.toString;\n    var oldDash = root._;\n    var reIsNative = RegExp('^' +\n      fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n    var ArrayBuffer = context.ArrayBuffer,\n        clearTimeout = context.clearTimeout,\n        parseFloat = context.parseFloat,\n        pow = Math.pow,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        Set = getNative(context, 'Set'),\n        setTimeout = context.setTimeout,\n        splice = arrayProto.splice,\n        Uint8Array = context.Uint8Array,\n        WeakMap = getNative(context, 'WeakMap');\n    var nativeCeil = Math.ceil,\n        nativeCreate = getNative(Object, 'create'),\n        nativeFloor = Math.floor,\n        nativeIsArray = getNative(Array, 'isArray'),\n        nativeIsFinite = context.isFinite,\n        nativeKeys = getNative(Object, 'keys'),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = getNative(Date, 'now'),\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random;\n    var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY,\n        POSITIVE_INFINITY = Number.POSITIVE_INFINITY;\n    var MAX_ARRAY_LENGTH = 4294967295,\n        MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n        HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n    var MAX_SAFE_INTEGER = 9007199254740991;\n    var metaMap = WeakMap && new WeakMap;\n    var realNames = {};\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n    function baseLodash() {\n    }\n    function LodashWrapper(value, chainAll, actions) {\n      this.__wrapped__ = value;\n      this.__actions__ = actions || [];\n      this.__chain__ = !!chainAll;\n    }\n    var support = lodash.support = {};\n    lodash.templateSettings = {\n      'escape': reEscape,\n      'evaluate': reEvaluate,\n      'interpolate': reInterpolate,\n      'variable': '',\n      'imports': {\n        '_': lodash\n      }\n    };\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = POSITIVE_INFINITY;\n      this.__views__ = [];\n    }\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = arrayCopy(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = arrayCopy(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = arrayCopy(this.__views__);\n      return result;\n    }\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) {\n        return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n    function MapCache() {\n      this.__data__ = {};\n    }\n    function mapDelete(key) {\n      return this.has(key) && delete this.__data__[key];\n    }\n    function mapGet(key) {\n      return key == '__proto__' ? undefined : this.__data__[key];\n    }\n    function mapHas(key) {\n      return key != '__proto__' && hasOwnProperty.call(this.__data__, key);\n    }\n    function mapSet(key, value) {\n      if (key != '__proto__') {\n        this.__data__[key] = value;\n      }\n      return this;\n    }\n    function SetCache(values) {\n      var length = values ? values.length : 0;\n\n      this.data = { 'hash': nativeCreate(null), 'set': new Set };\n      while (length--) {\n        this.push(values[length]);\n      }\n    }\n    function cacheIndexOf(cache, value) {\n      var data = cache.data,\n          result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];\n\n      return result ? 0 : -1;\n    }\n    function cachePush(value) {\n      var data = this.data;\n      if (typeof value == 'string' || isObject(value)) {\n        data.set.add(value);\n      } else {\n        data.hash[value] = true;\n      }\n    }\n    function arrayConcat(array, other) {\n      var index = -1,\n          length = array.length,\n          othIndex = -1,\n          othLength = other.length,\n          result = Array(length + othLength);\n\n      while (++index < length) {\n        result[index] = array[index];\n      }\n      while (++othIndex < othLength) {\n        result[index++] = other[othIndex];\n      }\n      return result;\n    }\n    function arrayCopy(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n    function arrayEach(array, iteratee) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        if (iteratee(array[index], index, array) === false) {\n          break;\n        }\n      }\n      return array;\n    }\n    function arrayEachRight(array, iteratee) {\n      var length = array.length;\n\n      while (length--) {\n        if (iteratee(array[length], length, array) === false) {\n          break;\n        }\n      }\n      return array;\n    }\n    function arrayEvery(array, predicate) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        if (!predicate(array[index], index, array)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function arrayExtremum(array, iteratee, comparator, exValue) {\n      var index = -1,\n          length = array.length,\n          computed = exValue,\n          result = computed;\n\n      while (++index < length) {\n        var value = array[index],\n            current = +iteratee(value);\n\n        if (comparator(current, computed)) {\n          computed = current;\n          result = value;\n        }\n      }\n      return result;\n    }\n    function arrayFilter(array, predicate) {\n      var index = -1,\n          length = array.length,\n          resIndex = -1,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result[++resIndex] = value;\n        }\n      }\n      return result;\n    }\n    function arrayMap(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = iteratee(array[index], index, array);\n      }\n      return result;\n    }\n    function arrayPush(array, values) {\n      var index = -1,\n          length = values.length,\n          offset = array.length;\n\n      while (++index < length) {\n        array[offset + index] = values[index];\n      }\n      return array;\n    }\n    function arrayReduce(array, iteratee, accumulator, initFromArray) {\n      var index = -1,\n          length = array.length;\n\n      if (initFromArray && length) {\n        accumulator = array[++index];\n      }\n      while (++index < length) {\n        accumulator = iteratee(accumulator, array[index], index, array);\n      }\n      return accumulator;\n    }\n    function arrayReduceRight(array, iteratee, accumulator, initFromArray) {\n      var length = array.length;\n      if (initFromArray && length) {\n        accumulator = array[--length];\n      }\n      while (length--) {\n        accumulator = iteratee(accumulator, array[length], length, array);\n      }\n      return accumulator;\n    }\n    function arraySome(array, predicate) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        if (predicate(array[index], index, array)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    function arraySum(array, iteratee) {\n      var length = array.length,\n          result = 0;\n\n      while (length--) {\n        result += +iteratee(array[length]) || 0;\n      }\n      return result;\n    }\n    function assignDefaults(objectValue, sourceValue) {\n      return objectValue === undefined ? sourceValue : objectValue;\n    }\n    function assignOwnDefaults(objectValue, sourceValue, key, object) {\n      return (objectValue === undefined || !hasOwnProperty.call(object, key))\n        ? sourceValue\n        : objectValue;\n    }\n    function assignWith(object, source, customizer) {\n      var index = -1,\n          props = keys(source),\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index],\n            value = object[key],\n            result = customizer(value, source[key], key, object, source);\n\n        if ((result === result ? (result !== value) : (value === value)) ||\n            (value === undefined && !(key in object))) {\n          object[key] = result;\n        }\n      }\n      return object;\n    }\n    function baseAssign(object, source) {\n      return source == null\n        ? object\n        : baseCopy(source, keys(source), object);\n    }\n    function baseAt(collection, props) {\n      var index = -1,\n          isNil = collection == null,\n          isArr = !isNil && isArrayLike(collection),\n          length = isArr ? collection.length : 0,\n          propsLength = props.length,\n          result = Array(propsLength);\n\n      while(++index < propsLength) {\n        var key = props[index];\n        if (isArr) {\n          result[index] = isIndex(key, length) ? collection[key] : undefined;\n        } else {\n          result[index] = isNil ? undefined : collection[key];\n        }\n      }\n      return result;\n    }\n    function baseCopy(source, props, object) {\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n        object[key] = source[key];\n      }\n      return object;\n    }\n    function baseCallback(func, thisArg, argCount) {\n      var type = typeof func;\n      if (type == 'function') {\n        return thisArg === undefined\n          ? func\n          : bindCallback(func, thisArg, argCount);\n      }\n      if (func == null) {\n        return identity;\n      }\n      if (type == 'object') {\n        return baseMatches(func);\n      }\n      return thisArg === undefined\n        ? property(func)\n        : baseMatchesProperty(func, thisArg);\n    }\n    function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {\n      var result;\n      if (customizer) {\n        result = object ? customizer(value, key, object) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return arrayCopy(value, result);\n        }\n      } else {\n        var tag = objToString.call(value),\n            isFunc = tag == funcTag;\n\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = initCloneObject(isFunc ? {} : value);\n          if (!isDeep) {\n            return baseAssign(result, value);\n          }\n        } else {\n          return cloneableTags[tag]\n            ? initCloneByTag(value, tag, isDeep)\n            : (object ? value : {});\n        }\n      }\n      stackA || (stackA = []);\n      stackB || (stackB = []);\n\n      var length = stackA.length;\n      while (length--) {\n        if (stackA[length] == value) {\n          return stackB[length];\n        }\n      }\n      stackA.push(value);\n      stackB.push(result);\n      (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {\n        result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);\n      });\n      return result;\n    }\n    var baseCreate = (function() {\n      function object() {}\n      return function(prototype) {\n        if (isObject(prototype)) {\n          object.prototype = prototype;\n          var result = new object;\n          object.prototype = undefined;\n        }\n        return result || {};\n      };\n    }());\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n    function baseDifference(array, values) {\n      var length = array ? array.length : 0,\n          result = [];\n\n      if (!length) {\n        return result;\n      }\n      var index = -1,\n          indexOf = getIndexOf(),\n          isCommon = indexOf == baseIndexOf,\n          cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,\n          valuesLength = values.length;\n\n      if (cache) {\n        indexOf = cacheIndexOf;\n        isCommon = false;\n        values = cache;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index];\n\n        if (isCommon && value === value) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === value) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (indexOf(values, value, 0) < 0) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n    var baseEach = createBaseEach(baseForOwn);\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n    function baseExtremum(collection, iteratee, comparator, exValue) {\n      var computed = exValue,\n          result = computed;\n\n      baseEach(collection, function(value, index, collection) {\n        var current = +iteratee(value, index, collection);\n        if (comparator(current, computed) || (current === exValue && current === result)) {\n          computed = current;\n          result = value;\n        }\n      });\n      return result;\n    }\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = start == null ? 0 : (+start || 0);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : (+end || 0);\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : (end >>> 0);\n      start >>>= 0;\n\n      while (start < length) {\n        array[start++] = value;\n      }\n      return array;\n    }\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n    function baseFind(collection, predicate, eachFunc, retKey) {\n      var result;\n      eachFunc(collection, function(value, key, collection) {\n        if (predicate(value, key, collection)) {\n          result = retKey ? key : value;\n          return false;\n        }\n      });\n      return result;\n    }\n    function baseFlatten(array, isDeep, isStrict, result) {\n      result || (result = []);\n\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index];\n        if (isObjectLike(value) && isArrayLike(value) &&\n            (isStrict || isArray(value) || isArguments(value))) {\n          if (isDeep) {\n            baseFlatten(value, isDeep, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n    var baseFor = createBaseFor();\n    var baseForRight = createBaseFor(true);\n    function baseForIn(object, iteratee) {\n      return baseFor(object, iteratee, keysIn);\n    }\n    function baseForOwn(object, iteratee) {\n      return baseFor(object, iteratee, keys);\n    }\n    function baseForOwnRight(object, iteratee) {\n      return baseForRight(object, iteratee, keys);\n    }\n    function baseFunctions(object, props) {\n      var index = -1,\n          length = props.length,\n          resIndex = -1,\n          result = [];\n\n      while (++index < length) {\n        var key = props[index];\n        if (isFunction(object[key])) {\n          result[++resIndex] = key;\n        }\n      }\n      return result;\n    }\n    function baseGet(object, path, pathKey) {\n      if (object == null) {\n        return;\n      }\n      if (pathKey !== undefined && pathKey in toObject(object)) {\n        path = [pathKey];\n      }\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[path[index++]];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n    function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n    }\n    function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = arrayTag,\n          othTag = arrayTag;\n\n      if (!objIsArr) {\n        objTag = objToString.call(object);\n        if (objTag == argsTag) {\n          objTag = objectTag;\n        } else if (objTag != objectTag) {\n          objIsArr = isTypedArray(object);\n        }\n      }\n      if (!othIsArr) {\n        othTag = objToString.call(other);\n        if (othTag == argsTag) {\n          othTag = objectTag;\n        } else if (othTag != objectTag) {\n          othIsArr = isTypedArray(other);\n        }\n      }\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && !(objIsArr || objIsObj)) {\n        return equalByTag(object, other, objTag);\n      }\n      if (!isLoose) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stackA || (stackA = []);\n      stackB || (stackB = []);\n\n      var length = stackA.length;\n      while (length--) {\n        if (stackA[length] == object) {\n          return stackB[length] == other;\n        }\n      }\n      stackA.push(object);\n      stackB.push(other);\n\n      var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n      stackA.pop();\n      stackB.pop();\n\n      return result;\n    }\n    function baseIsMatch(object, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = toObject(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var result = customizer ? customizer(objValue, srcValue, key) : undefined;\n          if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        var key = matchData[0][0],\n            value = matchData[0][1];\n\n        return function(object) {\n          if (object == null) {\n            return false;\n          }\n          return object[key] === value && (value !== undefined || (key in toObject(object)));\n        };\n      }\n      return function(object) {\n        return baseIsMatch(object, matchData);\n      };\n    }\n    function baseMatchesProperty(path, srcValue) {\n      var isArr = isArray(path),\n          isCommon = isKey(path) && isStrictComparable(srcValue),\n          pathKey = (path + '');\n\n      path = toPath(path);\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        var key = pathKey;\n        object = toObject(object);\n        if ((isArr || !isCommon) && !(key in object)) {\n          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n          if (object == null) {\n            return false;\n          }\n          key = last(path);\n          object = toObject(object);\n        }\n        return object[key] === srcValue\n          ? (srcValue !== undefined || (key in object))\n          : baseIsEqual(srcValue, object[key], undefined, true);\n      };\n    }\n    function baseMerge(object, source, customizer, stackA, stackB) {\n      if (!isObject(object)) {\n        return object;\n      }\n      var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\n          props = isSrcArr ? undefined : keys(source);\n\n      arrayEach(props || source, function(srcValue, key) {\n        if (props) {\n          key = srcValue;\n          srcValue = source[key];\n        }\n        if (isObjectLike(srcValue)) {\n          stackA || (stackA = []);\n          stackB || (stackB = []);\n          baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n        }\n        else {\n          var value = object[key],\n              result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n              isCommon = result === undefined;\n\n          if (isCommon) {\n            result = srcValue;\n          }\n          if ((result !== undefined || (isSrcArr && !(key in object))) &&\n              (isCommon || (result === result ? (result !== value) : (value === value)))) {\n            object[key] = result;\n          }\n        }\n      });\n      return object;\n    }\n    function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n      var length = stackA.length,\n          srcValue = source[key];\n\n      while (length--) {\n        if (stackA[length] == srcValue) {\n          object[key] = stackB[length];\n          return;\n        }\n      }\n      var value = object[key],\n          result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n          isCommon = result === undefined;\n\n      if (isCommon) {\n        result = srcValue;\n        if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\n          result = isArray(value)\n            ? value\n            : (isArrayLike(value) ? arrayCopy(value) : []);\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          result = isArguments(value)\n            ? toPlainObject(value)\n            : (isPlainObject(value) ? value : {});\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      stackA.push(srcValue);\n      stackB.push(result);\n\n      if (isCommon) {\n        object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n      } else if (result === result ? (result !== value) : (value === value)) {\n        object[key] = result;\n      }\n    }\n    function baseProperty(key) {\n      return function(object) {\n        return object == null ? undefined : object[key];\n      };\n    }\n    function basePropertyDeep(path) {\n      var pathKey = (path + '');\n      path = toPath(path);\n      return function(object) {\n        return baseGet(object, path, pathKey);\n      };\n    }\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0;\n      while (length--) {\n        var index = indexes[length];\n        if (index != previous && isIndex(index)) {\n          var previous = index;\n          splice.call(array, index, 1);\n        }\n      }\n      return array;\n    }\n    function baseRandom(min, max) {\n      return min + nativeFloor(nativeRandom() * (max - min + 1));\n    }\n    function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {\n      eachFunc(collection, function(value, index, collection) {\n        accumulator = initFromCollection\n          ? (initFromCollection = false, value)\n          : iteratee(accumulator, value, index, collection);\n      });\n      return accumulator;\n    }\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      start = start == null ? 0 : (+start || 0);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : (+end || 0);\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n    function baseSortBy(array, comparer) {\n      var length = array.length;\n\n      array.sort(comparer);\n      while (length--) {\n        array[length] = array[length].value;\n      }\n      return array;\n    }\n    function baseSortByOrder(collection, iteratees, orders) {\n      var callback = getCallback(),\n          index = -1;\n\n      iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); });\n\n      var result = baseMap(collection, function(value) {\n        var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n    function baseSum(collection, iteratee) {\n      var result = 0;\n      baseEach(collection, function(value, index, collection) {\n        result += +iteratee(value, index, collection) || 0;\n      });\n      return result;\n    }\n    function baseUniq(array, iteratee) {\n      var index = -1,\n          indexOf = getIndexOf(),\n          length = array.length,\n          isCommon = indexOf == baseIndexOf,\n          isLarge = isCommon && length >= LARGE_ARRAY_SIZE,\n          seen = isLarge ? createCache() : null,\n          result = [];\n\n      if (seen) {\n        indexOf = cacheIndexOf;\n        isCommon = false;\n      } else {\n        isLarge = false;\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value, index, array) : value;\n\n        if (isCommon && value === value) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (indexOf(seen, computed, 0) < 0) {\n          if (iteratee || isLarge) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n    function baseValues(object, props) {\n      var index = -1,\n          length = props.length,\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = object[props[index]];\n      }\n      return result;\n    }\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      var index = -1,\n          length = actions.length;\n\n      while (++index < length) {\n        var action = actions[index];\n        result = action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }\n      return result;\n    }\n    function binaryIndex(array, value, retHighest) {\n      var low = 0,\n          high = array ? array.length : low;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return binaryIndexBy(array, value, identity, retHighest);\n    }\n    function binaryIndexBy(array, value, iteratee, retHighest) {\n      value = iteratee(value);\n\n      var low = 0,\n          high = array ? array.length : 0,\n          valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsUndef = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            isDef = computed !== undefined,\n            isReflexive = computed === computed;\n\n        if (valIsNaN) {\n          var setLow = isReflexive || retHighest;\n        } else if (valIsNull) {\n          setLow = isReflexive && isDef && (retHighest || computed != null);\n        } else if (valIsUndef) {\n          setLow = isReflexive && (retHighest || isDef);\n        } else if (computed == null) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n    function bindCallback(func, thisArg, argCount) {\n      if (typeof func != 'function') {\n        return identity;\n      }\n      if (thisArg === undefined) {\n        return func;\n      }\n      switch (argCount) {\n        case 1: return function(value) {\n          return func.call(thisArg, value);\n        };\n        case 3: return function(value, index, collection) {\n          return func.call(thisArg, value, index, collection);\n        };\n        case 4: return function(accumulator, value, index, collection) {\n          return func.call(thisArg, accumulator, value, index, collection);\n        };\n        case 5: return function(value, other, key, object, source) {\n          return func.call(thisArg, value, other, key, object, source);\n        };\n      }\n      return function() {\n        return func.apply(thisArg, arguments);\n      };\n    }\n    function bufferClone(buffer) {\n      var result = new ArrayBuffer(buffer.byteLength),\n          view = new Uint8Array(result);\n\n      view.set(new Uint8Array(buffer));\n      return result;\n    }\n    function composeArgs(args, partials, holders) {\n      var holdersLength = holders.length,\n          argsIndex = -1,\n          argsLength = nativeMax(args.length - holdersLength, 0),\n          leftIndex = -1,\n          leftLength = partials.length,\n          result = Array(leftLength + argsLength);\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        result[holders[argsIndex]] = args[argsIndex];\n      }\n      while (argsLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n    function composeArgsRight(args, partials, holders) {\n      var holdersIndex = -1,\n          holdersLength = holders.length,\n          argsIndex = -1,\n          argsLength = nativeMax(args.length - holdersLength, 0),\n          rightIndex = -1,\n          rightLength = partials.length,\n          result = Array(argsLength + rightLength);\n\n      while (++argsIndex < argsLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        result[offset + holders[holdersIndex]] = args[argsIndex++];\n      }\n      return result;\n    }\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee, thisArg) {\n        var result = initializer ? initializer() : {};\n        iteratee = getCallback(iteratee, thisArg, 3);\n\n        if (isArray(collection)) {\n          var index = -1,\n              length = collection.length;\n\n          while (++index < length) {\n            var value = collection[index];\n            setter(result, value, iteratee(value, index, collection), collection);\n          }\n        } else {\n          baseEach(collection, function(value, key, collection) {\n            setter(result, value, iteratee(value, key, collection), collection);\n          });\n        }\n        return result;\n      };\n    }\n    function createAssigner(assigner) {\n      return restParam(function(object, sources) {\n        var index = -1,\n            length = object == null ? 0 : sources.length,\n            customizer = length > 2 ? sources[length - 2] : undefined,\n            guard = length > 2 ? sources[2] : undefined,\n            thisArg = length > 1 ? sources[length - 1] : undefined;\n\n        if (typeof customizer == 'function') {\n          customizer = bindCallback(customizer, thisArg, 5);\n          length -= 2;\n        } else {\n          customizer = typeof thisArg == 'function' ? thisArg : undefined;\n          length -= (customizer ? 1 : 0);\n        }\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, customizer);\n          }\n        }\n        return object;\n      });\n    }\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        var length = collection ? getLength(collection) : 0;\n        if (!isLength(length)) {\n          return eachFunc(collection, iteratee);\n        }\n        var index = fromRight ? length : -1,\n            iterable = toObject(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var iterable = toObject(object),\n            props = keysFunc(object),\n            length = props.length,\n            index = fromRight ? length : -1;\n\n        while ((fromRight ? index-- : ++index < length)) {\n          var key = props[index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n    function createBindWrapper(func, thisArg) {\n      var Ctor = createCtorWrapper(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(thisArg, arguments);\n      }\n      return wrapper;\n    }\n    function createCache(values) {\n      return (nativeCreate && Set) ? new SetCache(values) : null;\n    }\n    function createCompounder(callback) {\n      return function(string) {\n        var index = -1,\n            array = words(deburr(string)),\n            length = array.length,\n            result = '';\n\n        while (++index < length) {\n          result = callback(result, array[index], index);\n        }\n        return result;\n      };\n    }\n    function createCtorWrapper(Ctor) {\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n    function createCurry(flag) {\n      function curryFunc(func, arity, guard) {\n        if (guard && isIterateeCall(func, arity, guard)) {\n          arity = undefined;\n        }\n        var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);\n        result.placeholder = curryFunc.placeholder;\n        return result;\n      }\n      return curryFunc;\n    }\n    function createDefaults(assigner, customizer) {\n      return restParam(function(args) {\n        var object = args[0];\n        if (object == null) {\n          return object;\n        }\n        args.push(customizer);\n        return assigner.apply(undefined, args);\n      });\n    }\n    function createExtremum(comparator, exValue) {\n      return function(collection, iteratee, thisArg) {\n        if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n          iteratee = undefined;\n        }\n        iteratee = getCallback(iteratee, thisArg, 3);\n        if (iteratee.length == 1) {\n          collection = isArray(collection) ? collection : toIterable(collection);\n          var result = arrayExtremum(collection, iteratee, comparator, exValue);\n          if (!(collection.length && result === exValue)) {\n            return result;\n          }\n        }\n        return baseExtremum(collection, iteratee, comparator, exValue);\n      };\n    }\n    function createFind(eachFunc, fromRight) {\n      return function(collection, predicate, thisArg) {\n        predicate = getCallback(predicate, thisArg, 3);\n        if (isArray(collection)) {\n          var index = baseFindIndex(collection, predicate, fromRight);\n          return index > -1 ? collection[index] : undefined;\n        }\n        return baseFind(collection, predicate, eachFunc);\n      };\n    }\n    function createFindIndex(fromRight) {\n      return function(array, predicate, thisArg) {\n        if (!(array && array.length)) {\n          return -1;\n        }\n        predicate = getCallback(predicate, thisArg, 3);\n        return baseFindIndex(array, predicate, fromRight);\n      };\n    }\n    function createFindKey(objectFunc) {\n      return function(object, predicate, thisArg) {\n        predicate = getCallback(predicate, thisArg, 3);\n        return baseFind(object, predicate, objectFunc, true);\n      };\n    }\n    function createFlow(fromRight) {\n      return function() {\n        var wrapper,\n            length = arguments.length,\n            index = fromRight ? length : -1,\n            leftIndex = 0,\n            funcs = Array(length);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          var func = funcs[leftIndex++] = arguments[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') {\n            wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? -1 : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      };\n    }\n    function createForEach(arrayFunc, eachFunc) {\n      return function(collection, iteratee, thisArg) {\n        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n          ? arrayFunc(collection, iteratee)\n          : eachFunc(collection, bindCallback(iteratee, thisArg, 3));\n      };\n    }\n    function createForIn(objectFunc) {\n      return function(object, iteratee, thisArg) {\n        if (typeof iteratee != 'function' || thisArg !== undefined) {\n          iteratee = bindCallback(iteratee, thisArg, 3);\n        }\n        return objectFunc(object, iteratee, keysIn);\n      };\n    }\n    function createForOwn(objectFunc) {\n      return function(object, iteratee, thisArg) {\n        if (typeof iteratee != 'function' || thisArg !== undefined) {\n          iteratee = bindCallback(iteratee, thisArg, 3);\n        }\n        return objectFunc(object, iteratee);\n      };\n    }\n    function createObjectMapper(isMapKeys) {\n      return function(object, iteratee, thisArg) {\n        var result = {};\n        iteratee = getCallback(iteratee, thisArg, 3);\n\n        baseForOwn(object, function(value, key, object) {\n          var mapped = iteratee(value, key, object);\n          key = isMapKeys ? mapped : key;\n          value = isMapKeys ? value : mapped;\n          result[key] = value;\n        });\n        return result;\n      };\n    }\n    function createPadDir(fromRight) {\n      return function(string, length, chars) {\n        string = baseToString(string);\n        return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);\n      };\n    }\n    function createPartial(flag) {\n      var partialFunc = restParam(function(func, partials) {\n        var holders = replaceHolders(partials, partialFunc.placeholder);\n        return createWrapper(func, flag, undefined, partials, holders);\n      });\n      return partialFunc;\n    }\n    function createReduce(arrayFunc, eachFunc) {\n      return function(collection, iteratee, accumulator, thisArg) {\n        var initFromArray = arguments.length < 3;\n        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n          ? arrayFunc(collection, iteratee, accumulator, initFromArray)\n          : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);\n      };\n    }\n    function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & ARY_FLAG,\n          isBind = bitmask & BIND_FLAG,\n          isBindKey = bitmask & BIND_KEY_FLAG,\n          isCurry = bitmask & CURRY_FLAG,\n          isCurryBound = bitmask & CURRY_BOUND_FLAG,\n          isCurryRight = bitmask & CURRY_RIGHT_FLAG,\n          Ctor = isBindKey ? undefined : createCtorWrapper(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            index = length,\n            args = Array(length);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight);\n        }\n        if (isCurry || isCurryRight) {\n          var placeholder = wrapper.placeholder,\n              argsHolders = replaceHolders(args, placeholder);\n\n          length -= argsHolders.length;\n          if (length < arity) {\n            var newArgPos = argPos ? arrayCopy(argPos) : undefined,\n                newArity = nativeMax(arity - length, 0),\n                newsHolders = isCurry ? argsHolders : undefined,\n                newHoldersRight = isCurry ? undefined : argsHolders,\n                newPartials = isCurry ? args : undefined,\n                newPartialsRight = isCurry ? undefined : args;\n\n            bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);\n            bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);\n\n            if (!isCurryBound) {\n              bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);\n            }\n            var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],\n                result = createHybridWrapper.apply(undefined, newData);\n\n            if (isLaziable(func)) {\n              setData(result, newData);\n            }\n            result.placeholder = placeholder;\n            return result;\n          }\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        if (argPos) {\n          args = reorder(args, argPos);\n        }\n        if (isAry && ary < args.length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtorWrapper(func);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n    function createPadding(string, length, chars) {\n      var strLength = string.length;\n      length = +length;\n\n      if (strLength >= length || !nativeIsFinite(length)) {\n        return '';\n      }\n      var padLength = length - strLength;\n      chars = chars == null ? ' ' : (chars + '');\n      return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);\n    }\n    function createPartialWrapper(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & BIND_FLAG,\n          Ctor = createCtorWrapper(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength);\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        precision = precision === undefined ? 0 : (+precision || 0);\n        if (precision) {\n          precision = pow(10, precision);\n          return func(number * precision) / precision;\n        }\n        return func(number);\n      };\n    }\n    function createSortedIndex(retHighest) {\n      return function(array, value, iteratee, thisArg) {\n        var callback = getCallback(iteratee);\n        return (iteratee == null && callback === baseCallback)\n          ? binaryIndex(array, value, retHighest)\n          : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest);\n      };\n    }\n    function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      length -= (holders ? holders.length : 0);\n      if (bitmask & PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func),\n          newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];\n\n      if (data) {\n        mergeData(newData, data);\n        bitmask = newData[1];\n        arity = newData[9];\n      }\n      newData[9] = arity == null\n        ? (isBindKey ? 0 : func.length)\n        : (nativeMax(arity - length, 0) || 0);\n\n      if (bitmask == BIND_FLAG) {\n        var result = createBindWrapper(newData[0], newData[2]);\n      } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) {\n        result = createPartialWrapper.apply(undefined, newData);\n      } else {\n        result = createHybridWrapper.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setter(result, newData);\n    }\n    function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n      var index = -1,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n        return false;\n      }\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index],\n            result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;\n\n        if (result !== undefined) {\n          if (result) {\n            continue;\n          }\n          return false;\n        }\n        if (isLoose) {\n          if (!arraySome(other, function(othValue) {\n                return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n              })) {\n            return false;\n          }\n        } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function equalByTag(object, other, tag) {\n      switch (tag) {\n        case boolTag:\n        case dateTag:\n          return +object == +other;\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case numberTag:\n          return (object != +object)\n            ? other != +other\n            : object == +other;\n\n        case regexpTag:\n        case stringTag:\n          return object == (other + '');\n      }\n      return false;\n    }\n    function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n      var objProps = keys(object),\n          objLength = objProps.length,\n          othProps = keys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isLoose) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      var skipCtor = isLoose;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key],\n            result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;\n        if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {\n          return false;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (!skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function getCallback(func, thisArg, argCount) {\n      var result = lodash.callback || callback;\n      result = result === callback ? baseCallback : result;\n      return argCount ? result(func, thisArg, argCount) : result;\n    }\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n    function getFuncName(func) {\n      var result = func.name,\n          array = realNames[result],\n          length = array ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n    function getIndexOf(collection, target, fromIndex) {\n      var result = lodash.indexOf || indexOf;\n      result = result === indexOf ? baseIndexOf : result;\n      return collection ? result(collection, target, fromIndex) : result;\n    }\n    var getLength = baseProperty('length');\n    function getMatchData(object) {\n      var result = pairs(object),\n          length = result.length;\n\n      while (length--) {\n        result[length][2] = isStrictComparable(result[length][1]);\n      }\n      return result;\n    }\n    function getNative(object, key) {\n      var value = object == null ? undefined : object[key];\n      return isNative(value) ? value : undefined;\n    }\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n    function initCloneObject(object) {\n      var Ctor = object.constructor;\n      if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {\n        Ctor = Object;\n      }\n      return new Ctor;\n    }\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return bufferClone(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          var buffer = object.buffer;\n          return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          var result = new Ctor(object.source, reFlags.exec(object));\n          result.lastIndex = object.lastIndex;\n      }\n      return result;\n    }\n    function invokePath(object, path, args) {\n      if (object != null && !isKey(path, object)) {\n        path = toPath(path);\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n        path = last(path);\n      }\n      var func = object == null ? object : object[path];\n      return func == null ? undefined : func.apply(object, args);\n    }\n    function isArrayLike(value) {\n      return value != null && isLength(getLength(value));\n    }\n    function isIndex(value, length) {\n      value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n      return value > -1 && value % 1 == 0 && value < length;\n    }\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n          ? (isArrayLike(object) && isIndex(index, object.length))\n          : (type == 'string' && index in object)) {\n        var other = object[index];\n        return value === value ? (value === other) : (other !== other);\n      }\n      return false;\n    }\n    function isKey(value, object) {\n      var type = typeof value;\n      if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n        return true;\n      }\n      if (isArray(value)) {\n        return false;\n      }\n      var result = !reIsDeepProp.test(value);\n      return result || (object != null && value in toObject(object));\n    }\n    function isLaziable(func) {\n      var funcName = getFuncName(func);\n      if (!(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      var other = lodash[funcName];\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n    function isLength(value) {\n      return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < ARY_FLAG;\n\n      var isCombo =\n        (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||\n        (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||\n        (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      if (srcBitmask & BIND_FLAG) {\n        data[2] = source[2];\n        newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG;\n      }\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);\n      }\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);\n      }\n      value = source[7];\n      if (value) {\n        data[7] = arrayCopy(value);\n      }\n      if (srcBitmask & ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n    function mergeDefaults(objectValue, sourceValue) {\n      return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);\n    }\n    function pickByArray(object, props) {\n      object = toObject(object);\n\n      var index = -1,\n          length = props.length,\n          result = {};\n\n      while (++index < length) {\n        var key = props[index];\n        if (key in object) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    }\n    function pickByCallback(object, predicate) {\n      var result = {};\n      baseForIn(object, function(value, key, object) {\n        if (predicate(value, key, object)) {\n          result[key] = value;\n        }\n      });\n      return result;\n    }\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = arrayCopy(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n    var setData = (function() {\n      var count = 0,\n          lastCalled = 0;\n\n      return function(key, value) {\n        var stamp = now(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return key;\n          }\n        } else {\n          count = 0;\n        }\n        return baseSetData(key, value);\n      };\n    }());\n    function shimKeys(object) {\n      var props = keysIn(object),\n          propsLength = props.length,\n          length = propsLength && object.length;\n\n      var allowIndexes = !!length && isLength(length) &&\n        (isArray(object) || isArguments(object));\n\n      var index = -1,\n          result = [];\n\n      while (++index < propsLength) {\n        var key = props[index];\n        if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n    function toIterable(value) {\n      if (value == null) {\n        return [];\n      }\n      if (!isArrayLike(value)) {\n        return values(value);\n      }\n      return isObject(value) ? value : Object(value);\n    }\n    function toObject(value) {\n      return isObject(value) ? value : Object(value);\n    }\n    function toPath(value) {\n      if (isArray(value)) {\n        return value;\n      }\n      var result = [];\n      baseToString(value).replace(rePropName, function(match, number, quote, string) {\n        result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    }\n    function wrapperClone(wrapper) {\n      return wrapper instanceof LazyWrapper\n        ? wrapper.clone()\n        : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__));\n    }\n    function chunk(array, size, guard) {\n      if (guard ? isIterateeCall(array, size, guard) : size == null) {\n        size = 1;\n      } else {\n        size = nativeMax(nativeFloor(size) || 1, 1);\n      }\n      var index = 0,\n          length = array ? array.length : 0,\n          resIndex = -1,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[++resIndex] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n    function compact(array) {\n      var index = -1,\n          length = array ? array.length : 0,\n          resIndex = -1,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[++resIndex] = value;\n        }\n      }\n      return result;\n    }\n    var difference = restParam(function(array, values) {\n      return (isObjectLike(array) && isArrayLike(array))\n        ? baseDifference(array, baseFlatten(values, false, true))\n        : [];\n    });\n    function drop(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      return baseSlice(array, n < 0 ? 0 : n);\n    }\n    function dropRight(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      n = length - (+n || 0);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n    function dropRightWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)\n        : [];\n    }\n    function dropWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), true)\n        : [];\n    }\n    function fill(array, value, start, end) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n    var findIndex = createFindIndex();\n    var findLastIndex = createFindIndex(true);\n    function first(array) {\n      return array ? array[0] : undefined;\n    }\n    function flatten(array, isDeep, guard) {\n      var length = array ? array.length : 0;\n      if (guard && isIterateeCall(array, isDeep, guard)) {\n        isDeep = false;\n      }\n      return length ? baseFlatten(array, isDeep) : [];\n    }\n    function flattenDeep(array) {\n      var length = array ? array.length : 0;\n      return length ? baseFlatten(array, true) : [];\n    }\n    function indexOf(array, value, fromIndex) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return -1;\n      }\n      if (typeof fromIndex == 'number') {\n        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;\n      } else if (fromIndex) {\n        var index = binaryIndex(array, value);\n        if (index < length &&\n            (value === value ? (value === array[index]) : (array[index] !== array[index]))) {\n          return index;\n        }\n        return -1;\n      }\n      return baseIndexOf(array, value, fromIndex || 0);\n    }\n    function initial(array) {\n      return dropRight(array, 1);\n    }\n    var intersection = restParam(function(arrays) {\n      var othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(length),\n          indexOf = getIndexOf(),\n          isCommon = indexOf == baseIndexOf,\n          result = [];\n\n      while (othIndex--) {\n        var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [];\n        caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null;\n      }\n      var array = arrays[0],\n          index = -1,\n          length = array ? array.length : 0,\n          seen = caches[0];\n\n      outer:\n      while (++index < length) {\n        value = array[index];\n        if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {\n          var othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(value);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    });\n    function last(array) {\n      var length = array ? array.length : 0;\n      return length ? array[length - 1] : undefined;\n    }\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (typeof fromIndex == 'number') {\n        index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1;\n      } else if (fromIndex) {\n        index = binaryIndex(array, value, true) - 1;\n        var other = array[index];\n        if (value === value ? (value === other) : (other !== other)) {\n          return index;\n        }\n        return -1;\n      }\n      if (value !== value) {\n        return indexOfNaN(array, index, true);\n      }\n      while (index--) {\n        if (array[index] === value) {\n          return index;\n        }\n      }\n      return -1;\n    }\n    function pull() {\n      var args = arguments,\n          array = args[0];\n\n      if (!(array && array.length)) {\n        return array;\n      }\n      var index = 0,\n          indexOf = getIndexOf(),\n          length = args.length;\n\n      while (++index < length) {\n        var fromIndex = 0,\n            value = args[index];\n\n        while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n    var pullAt = restParam(function(array, indexes) {\n      indexes = baseFlatten(indexes);\n\n      var result = baseAt(array, indexes);\n      basePullAt(array, indexes.sort(baseCompareAscending));\n      return result;\n    });\n    function remove(array, predicate, thisArg) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getCallback(predicate, thisArg, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n    function rest(array) {\n      return drop(array, 1);\n    }\n    function slice(array, start, end) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      return baseSlice(array, start, end);\n    }\n    var sortedIndex = createSortedIndex();\n    var sortedLastIndex = createSortedIndex(true);\n    function take(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n    function takeRight(array, n, guard) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\n        n = 1;\n      }\n      n = length - (+n || 0);\n      return baseSlice(array, n < 0 ? 0 : n);\n    }\n    function takeRightWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)\n        : [];\n    }\n    function takeWhile(array, predicate, thisArg) {\n      return (array && array.length)\n        ? baseWhile(array, getCallback(predicate, thisArg, 3))\n        : [];\n    }\n    var union = restParam(function(arrays) {\n      return baseUniq(baseFlatten(arrays, false, true));\n    });\n    function uniq(array, isSorted, iteratee, thisArg) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      if (isSorted != null && typeof isSorted != 'boolean') {\n        thisArg = iteratee;\n        iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;\n        isSorted = false;\n      }\n      var callback = getCallback();\n      if (!(iteratee == null && callback === baseCallback)) {\n        iteratee = callback(iteratee, thisArg, 3);\n      }\n      return (isSorted && getIndexOf() == baseIndexOf)\n        ? sortedUniq(array, iteratee)\n        : baseUniq(array, iteratee);\n    }\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var index = -1,\n          length = 0;\n\n      array = arrayFilter(array, function(group) {\n        if (isArrayLike(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = arrayMap(array, baseProperty(index));\n      }\n      return result;\n    }\n    function unzipWith(array, iteratee, thisArg) {\n      var length = array ? array.length : 0;\n      if (!length) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      iteratee = bindCallback(iteratee, thisArg, 4);\n      return arrayMap(result, function(group) {\n        return arrayReduce(group, iteratee, undefined, true);\n      });\n    }\n    var without = restParam(function(array, values) {\n      return isArrayLike(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n    function xor() {\n      var index = -1,\n          length = arguments.length;\n\n      while (++index < length) {\n        var array = arguments[index];\n        if (isArrayLike(array)) {\n          var result = result\n            ? arrayPush(baseDifference(result, array), baseDifference(array, result))\n            : array;\n        }\n      }\n      return result ? baseUniq(result) : [];\n    }\n    var zip = restParam(unzip);\n    function zipObject(props, values) {\n      var index = -1,\n          length = props ? props.length : 0,\n          result = {};\n\n      if (length && !values && !isArray(props[0])) {\n        values = [];\n      }\n      while (++index < length) {\n        var key = props[index];\n        if (values) {\n          result[key] = values[index];\n        } else if (key) {\n          result[key[0]] = key[1];\n        }\n      }\n      return result;\n    }\n    var zipWith = restParam(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 2 ? arrays[length - 2] : undefined,\n          thisArg = length > 1 ? arrays[length - 1] : undefined;\n\n      if (length > 2 && typeof iteratee == 'function') {\n        length -= 2;\n      } else {\n        iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined;\n        thisArg = undefined;\n      }\n      arrays.length = length;\n      return unzipWith(arrays, iteratee, thisArg);\n    });\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n    function tap(value, interceptor, thisArg) {\n      interceptor.call(thisArg, value);\n      return value;\n    }\n    function thru(value, interceptor, thisArg) {\n      return interceptor.call(thisArg, value);\n    }\n    function wrapperChain() {\n      return chain(this);\n    }\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n    var wrapperConcat = restParam(function(values) {\n      values = baseFlatten(values);\n      return this.thru(function(array) {\n        return arrayConcat(isArray(array) ? array : [toObject(array)], values);\n      });\n    });\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n\n      var interceptor = function(value) {\n        return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse();\n      };\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(interceptor);\n    }\n    function wrapperToString() {\n      return (this.value() + '');\n    }\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n    var at = restParam(function(collection, props) {\n      return baseAt(collection, baseFlatten(props));\n    });\n    var countBy = createAggregator(function(result, value, key) {\n      hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);\n    });\n    function every(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\n        predicate = undefined;\n      }\n      if (typeof predicate != 'function' || thisArg !== undefined) {\n        predicate = getCallback(predicate, thisArg, 3);\n      }\n      return func(collection, predicate);\n    }\n    function filter(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      predicate = getCallback(predicate, thisArg, 3);\n      return func(collection, predicate);\n    }\n    var find = createFind(baseEach);\n    var findLast = createFind(baseEachRight, true);\n    function findWhere(collection, source) {\n      return find(collection, baseMatches(source));\n    }\n    var forEach = createForEach(arrayEach, baseEach);\n    var forEachRight = createForEach(arrayEachRight, baseEachRight);\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        result[key] = [value];\n      }\n    });\n    function includes(collection, target, fromIndex, guard) {\n      var length = collection ? getLength(collection) : 0;\n      if (!isLength(length)) {\n        collection = values(collection);\n        length = collection.length;\n      }\n      if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {\n        fromIndex = 0;\n      } else {\n        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);\n      }\n      return (typeof collection == 'string' || !isArray(collection) && isString(collection))\n        ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1)\n        : (!!length && getIndexOf(collection, target, fromIndex) > -1);\n    }\n    var indexBy = createAggregator(function(result, value, key) {\n      result[key] = value;\n    });\n    var invoke = restParam(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          isProp = isKey(path),\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);\n        result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);\n      });\n      return result;\n    });\n    function map(collection, iteratee, thisArg) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      iteratee = getCallback(iteratee, thisArg, 3);\n      return func(collection, iteratee);\n    }\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n    function pluck(collection, path) {\n      return map(collection, property(path));\n    }\n    var reduce = createReduce(arrayReduce, baseEach);\n    var reduceRight = createReduce(arrayReduceRight, baseEachRight);\n    function reject(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      predicate = getCallback(predicate, thisArg, 3);\n      return func(collection, function(value, index, collection) {\n        return !predicate(value, index, collection);\n      });\n    }\n    function sample(collection, n, guard) {\n      if (guard ? isIterateeCall(collection, n, guard) : n == null) {\n        collection = toIterable(collection);\n        var length = collection.length;\n        return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;\n      }\n      var index = -1,\n          result = toArray(collection),\n          length = result.length,\n          lastIndex = length - 1;\n\n      n = nativeMin(n < 0 ? 0 : (+n || 0), length);\n      while (++index < n) {\n        var rand = baseRandom(index, lastIndex),\n            value = result[rand];\n\n        result[rand] = result[index];\n        result[index] = value;\n      }\n      result.length = n;\n      return result;\n    }\n    function shuffle(collection) {\n      return sample(collection, POSITIVE_INFINITY);\n    }\n    function size(collection) {\n      var length = collection ? getLength(collection) : 0;\n      return isLength(length) ? length : keys(collection).length;\n    }\n    function some(collection, predicate, thisArg) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\n        predicate = undefined;\n      }\n      if (typeof predicate != 'function' || thisArg !== undefined) {\n        predicate = getCallback(predicate, thisArg, 3);\n      }\n      return func(collection, predicate);\n    }\n    function sortBy(collection, iteratee, thisArg) {\n      if (collection == null) {\n        return [];\n      }\n      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n        iteratee = undefined;\n      }\n      var index = -1;\n      iteratee = getCallback(iteratee, thisArg, 3);\n\n      var result = baseMap(collection, function(value, key, collection) {\n        return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };\n      });\n      return baseSortBy(result, compareAscending);\n    }\n    var sortByAll = restParam(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var guard = iteratees[2];\n      if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) {\n        iteratees.length = 1;\n      }\n      return baseSortByOrder(collection, baseFlatten(iteratees), []);\n    });\n    function sortByOrder(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (guard && isIterateeCall(iteratees, orders, guard)) {\n        orders = undefined;\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseSortByOrder(collection, iteratees, orders);\n    }\n    function where(collection, source) {\n      return filter(collection, baseMatches(source));\n    }\n    var now = nativeNow || function() {\n      return new Date().getTime();\n    };\n    function after(n, func) {\n      if (typeof func != 'function') {\n        if (typeof n == 'function') {\n          var temp = n;\n          n = func;\n          func = temp;\n        } else {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n      }\n      n = nativeIsFinite(n = +n) ? n : 0;\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n    function ary(func, n, guard) {\n      if (guard && isIterateeCall(func, n, guard)) {\n        n = undefined;\n      }\n      n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);\n      return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        if (typeof n == 'function') {\n          var temp = n;\n          n = func;\n          func = temp;\n        } else {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n      }\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n    var bind = restParam(function(func, thisArg, partials) {\n      var bitmask = BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, bind.placeholder);\n        bitmask |= PARTIAL_FLAG;\n      }\n      return createWrapper(func, bitmask, thisArg, partials, holders);\n    });\n    var bindAll = restParam(function(object, methodNames) {\n      methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);\n\n      var index = -1,\n          length = methodNames.length;\n\n      while (++index < length) {\n        var key = methodNames[index];\n        object[key] = createWrapper(object[key], BIND_FLAG, object);\n      }\n      return object;\n    });\n    var bindKey = restParam(function(object, key, partials) {\n      var bitmask = BIND_FLAG | BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, bindKey.placeholder);\n        bitmask |= PARTIAL_FLAG;\n      }\n      return createWrapper(key, bitmask, object, partials, holders);\n    });\n    var curry = createCurry(CURRY_FLAG);\n    var curryRight = createCurry(CURRY_RIGHT_FLAG);\n    function debounce(func, wait, options) {\n      var args,\n          maxTimeoutId,\n          result,\n          stamp,\n          thisArg,\n          timeoutId,\n          trailingCall,\n          lastCalled = 0,\n          maxWait = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = wait < 0 ? 0 : (+wait || 0);\n      if (options === true) {\n        var leading = true;\n        trailing = false;\n      } else if (isObject(options)) {\n        leading = !!options.leading;\n        maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function cancel() {\n        if (timeoutId) {\n          clearTimeout(timeoutId);\n        }\n        if (maxTimeoutId) {\n          clearTimeout(maxTimeoutId);\n        }\n        lastCalled = 0;\n        maxTimeoutId = timeoutId = trailingCall = undefined;\n      }\n\n      function complete(isCalled, id) {\n        if (id) {\n          clearTimeout(id);\n        }\n        maxTimeoutId = timeoutId = trailingCall = undefined;\n        if (isCalled) {\n          lastCalled = now();\n          result = func.apply(thisArg, args);\n          if (!timeoutId && !maxTimeoutId) {\n            args = thisArg = undefined;\n          }\n        }\n      }\n\n      function delayed() {\n        var remaining = wait - (now() - stamp);\n        if (remaining <= 0 || remaining > wait) {\n          complete(trailingCall, maxTimeoutId);\n        } else {\n          timeoutId = setTimeout(delayed, remaining);\n        }\n      }\n\n      function maxDelayed() {\n        complete(trailing, timeoutId);\n      }\n\n      function debounced() {\n        args = arguments;\n        stamp = now();\n        thisArg = this;\n        trailingCall = trailing && (timeoutId || !leading);\n\n        if (maxWait === false) {\n          var leadingCall = leading && !timeoutId;\n        } else {\n          if (!maxTimeoutId && !leading) {\n            lastCalled = stamp;\n          }\n          var remaining = maxWait - (stamp - lastCalled),\n              isCalled = remaining <= 0 || remaining > maxWait;\n\n          if (isCalled) {\n            if (maxTimeoutId) {\n              maxTimeoutId = clearTimeout(maxTimeoutId);\n            }\n            lastCalled = stamp;\n            result = func.apply(thisArg, args);\n          }\n          else if (!maxTimeoutId) {\n            maxTimeoutId = setTimeout(maxDelayed, remaining);\n          }\n        }\n        if (isCalled && timeoutId) {\n          timeoutId = clearTimeout(timeoutId);\n        }\n        else if (!timeoutId && wait !== maxWait) {\n          timeoutId = setTimeout(delayed, wait);\n        }\n        if (leadingCall) {\n          isCalled = true;\n          result = func.apply(thisArg, args);\n        }\n        if (isCalled && !timeoutId && !maxTimeoutId) {\n          args = thisArg = undefined;\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      return debounced;\n    }\n    var defer = restParam(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n    var delay = restParam(function(func, wait, args) {\n      return baseDelay(func, wait, args);\n    });\n    var flow = createFlow();\n    var flowRight = createFlow(true);\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result);\n        return result;\n      };\n      memoized.cache = new memoize.Cache;\n      return memoized;\n    }\n    var modArgs = restParam(function(func, transforms) {\n      transforms = baseFlatten(transforms);\n      if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = transforms.length;\n      return restParam(function(args) {\n        var index = nativeMin(args.length, length);\n        while (index--) {\n          args[index] = transforms[index](args[index]);\n        }\n        return func.apply(this, args);\n      });\n    });\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        return !predicate.apply(this, arguments);\n      };\n    }\n    function once(func) {\n      return before(2, func);\n    }\n    var partial = createPartial(PARTIAL_FLAG);\n    var partialRight = createPartial(PARTIAL_RIGHT_FLAG);\n    var rearg = restParam(function(func, indexes) {\n      return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));\n    });\n    function restParam(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            rest = Array(length);\n\n        while (++index < length) {\n          rest[index] = args[start + index];\n        }\n        switch (start) {\n          case 0: return func.call(this, rest);\n          case 1: return func.call(this, args[0], rest);\n          case 2: return func.call(this, args[0], args[1], rest);\n        }\n        var otherArgs = Array(start + 1);\n        index = -1;\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = rest;\n        return func.apply(this, otherArgs);\n      };\n    }\n    function spread(func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function(array) {\n        return func.apply(this, array);\n      };\n    }\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (options === false) {\n        leading = false;\n      } else if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\n    }\n    function wrap(value, wrapper) {\n      wrapper = wrapper == null ? identity : wrapper;\n      return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []);\n    }\n    function clone(value, isDeep, customizer, thisArg) {\n      if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {\n        isDeep = false;\n      }\n      else if (typeof isDeep == 'function') {\n        thisArg = customizer;\n        customizer = isDeep;\n        isDeep = false;\n      }\n      return typeof customizer == 'function'\n        ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1))\n        : baseClone(value, isDeep);\n    }\n    function cloneDeep(value, customizer, thisArg) {\n      return typeof customizer == 'function'\n        ? baseClone(value, true, bindCallback(customizer, thisArg, 1))\n        : baseClone(value, true);\n    }\n    function gt(value, other) {\n      return value > other;\n    }\n    function gte(value, other) {\n      return value >= other;\n    }\n    function isArguments(value) {\n      return isObjectLike(value) && isArrayLike(value) &&\n        hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n    }\n    var isArray = nativeIsArray || function(value) {\n      return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n    };\n    function isBoolean(value) {\n      return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);\n    }\n    function isDate(value) {\n      return isObjectLike(value) && objToString.call(value) == dateTag;\n    }\n    function isElement(value) {\n      return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);\n    }\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) ||\n          (isObjectLike(value) && isFunction(value.splice)))) {\n        return !value.length;\n      }\n      return !keys(value).length;\n    }\n    function isEqual(value, other, customizer, thisArg) {\n      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return  result === undefined ? baseIsEqual(value, other, customizer) : !!result;\n    }\n    function isError(value) {\n      return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;\n    }\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n    function isFunction(value) {\n      return isObject(value) && objToString.call(value) == funcTag;\n    }\n    function isObject(value) {\n      var type = typeof value;\n      return !!value && (type == 'object' || type == 'function');\n    }\n    function isMatch(object, source, customizer, thisArg) {\n      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;\n      return baseIsMatch(object, getMatchData(source), customizer);\n    }\n    function isNaN(value) {\n      return isNumber(value) && value != +value;\n    }\n    function isNative(value) {\n      if (value == null) {\n        return false;\n      }\n      if (isFunction(value)) {\n        return reIsNative.test(fnToString.call(value));\n      }\n      return isObjectLike(value) && reIsHostCtor.test(value);\n    }\n    function isNull(value) {\n      return value === null;\n    }\n    function isNumber(value) {\n      return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);\n    }\n    function isPlainObject(value) {\n      var Ctor;\n      if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||\n          (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n        return false;\n      }\n      var result;\n      baseForIn(value, function(subValue, key) {\n        result = key;\n      });\n      return result === undefined || hasOwnProperty.call(value, result);\n    }\n    function isRegExp(value) {\n      return isObject(value) && objToString.call(value) == regexpTag;\n    }\n    function isString(value) {\n      return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n    }\n    function isTypedArray(value) {\n      return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n    }\n    function isUndefined(value) {\n      return value === undefined;\n    }\n    function lt(value, other) {\n      return value < other;\n    }\n    function lte(value, other) {\n      return value <= other;\n    }\n    function toArray(value) {\n      var length = value ? getLength(value) : 0;\n      if (!isLength(length)) {\n        return values(value);\n      }\n      if (!length) {\n        return [];\n      }\n      return arrayCopy(value);\n    }\n    function toPlainObject(value) {\n      return baseCopy(value, keysIn(value));\n    }\n    var merge = createAssigner(baseMerge);\n    var assign = createAssigner(function(object, source, customizer) {\n      return customizer\n        ? assignWith(object, source, customizer)\n        : baseAssign(object, source);\n    });\n    function create(prototype, properties, guard) {\n      var result = baseCreate(prototype);\n      if (guard && isIterateeCall(prototype, properties, guard)) {\n        properties = undefined;\n      }\n      return properties ? baseAssign(result, properties) : result;\n    }\n    var defaults = createDefaults(assign, assignDefaults);\n    var defaultsDeep = createDefaults(merge, mergeDefaults);\n    var findKey = createFindKey(baseForOwn);\n    var findLastKey = createFindKey(baseForOwnRight);\n    var forIn = createForIn(baseFor);\n    var forInRight = createForIn(baseForRight);\n    var forOwn = createForOwn(baseForOwn);\n    var forOwnRight = createForOwn(baseForOwnRight);\n    function functions(object) {\n      return baseFunctions(object, keysIn(object));\n    }\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, toPath(path), path + '');\n      return result === undefined ? defaultValue : result;\n    }\n    function has(object, path) {\n      if (object == null) {\n        return false;\n      }\n      var result = hasOwnProperty.call(object, path);\n      if (!result && !isKey(path)) {\n        path = toPath(path);\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n        if (object == null) {\n          return false;\n        }\n        path = last(path);\n        result = hasOwnProperty.call(object, path);\n      }\n      return result || (isLength(object.length) && isIndex(path, object.length) &&\n        (isArray(object) || isArguments(object)));\n    }\n    function invert(object, multiValue, guard) {\n      if (guard && isIterateeCall(object, multiValue, guard)) {\n        multiValue = undefined;\n      }\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = {};\n\n      while (++index < length) {\n        var key = props[index],\n            value = object[key];\n\n        if (multiValue) {\n          if (hasOwnProperty.call(result, value)) {\n            result[value].push(key);\n          } else {\n            result[value] = [key];\n          }\n        }\n        else {\n          result[value] = key;\n        }\n      }\n      return result;\n    }\n    var keys = !nativeKeys ? shimKeys : function(object) {\n      var Ctor = object == null ? undefined : object.constructor;\n      if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n          (typeof object != 'function' && isArrayLike(object))) {\n        return shimKeys(object);\n      }\n      return isObject(object) ? nativeKeys(object) : [];\n    };\n    function keysIn(object) {\n      if (object == null) {\n        return [];\n      }\n      if (!isObject(object)) {\n        object = Object(object);\n      }\n      var length = object.length;\n      length = (length && isLength(length) &&\n        (isArray(object) || isArguments(object)) && length) || 0;\n\n      var Ctor = object.constructor,\n          index = -1,\n          isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n          result = Array(length),\n          skipIndexes = length > 0;\n\n      while (++index < length) {\n        result[index] = (index + '');\n      }\n      for (var key in object) {\n        if (!(skipIndexes && isIndex(key, length)) &&\n            !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n    var mapKeys = createObjectMapper(true);\n    var mapValues = createObjectMapper();\n    var omit = restParam(function(object, props) {\n      if (object == null) {\n        return {};\n      }\n      if (typeof props[0] != 'function') {\n        var props = arrayMap(baseFlatten(props), String);\n        return pickByArray(object, baseDifference(keysIn(object), props));\n      }\n      var predicate = bindCallback(props[0], props[1], 3);\n      return pickByCallback(object, function(value, key, object) {\n        return !predicate(value, key, object);\n      });\n    });\n    function pairs(object) {\n      object = toObject(object);\n\n      var index = -1,\n          props = keys(object),\n          length = props.length,\n          result = Array(length);\n\n      while (++index < length) {\n        var key = props[index];\n        result[index] = [key, object[key]];\n      }\n      return result;\n    }\n    var pick = restParam(function(object, props) {\n      if (object == null) {\n        return {};\n      }\n      return typeof props[0] == 'function'\n        ? pickByCallback(object, bindCallback(props[0], props[1], 3))\n        : pickByArray(object, baseFlatten(props));\n    });\n    function result(object, path, defaultValue) {\n      var result = object == null ? undefined : object[path];\n      if (result === undefined) {\n        if (object != null && !isKey(path, object)) {\n          path = toPath(path);\n          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n          result = object == null ? undefined : object[last(path)];\n        }\n        result = result === undefined ? defaultValue : result;\n      }\n      return isFunction(result) ? result.call(object) : result;\n    }\n    function set(object, path, value) {\n      if (object == null) {\n        return object;\n      }\n      var pathKey = (path + '');\n      path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = path[index];\n        if (isObject(nested)) {\n          if (index == lastIndex) {\n            nested[key] = value;\n          } else if (nested[key] == null) {\n            nested[key] = isIndex(path[index + 1]) ? [] : {};\n          }\n        }\n        nested = nested[key];\n      }\n      return object;\n    }\n    function transform(object, iteratee, accumulator, thisArg) {\n      var isArr = isArray(object) || isTypedArray(object);\n      iteratee = getCallback(iteratee, thisArg, 4);\n\n      if (accumulator == null) {\n        if (isArr || isObject(object)) {\n          var Ctor = object.constructor;\n          if (isArr) {\n            accumulator = isArray(object) ? new Ctor : [];\n          } else {\n            accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);\n          }\n        } else {\n          accumulator = {};\n        }\n      }\n      (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n    function values(object) {\n      return baseValues(object, keys(object));\n    }\n    function valuesIn(object) {\n      return baseValues(object, keysIn(object));\n    }\n    function inRange(value, start, end) {\n      start = +start || 0;\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = +end || 0;\n      }\n      return value >= nativeMin(start, end) && value < nativeMax(start, end);\n    }\n    function random(min, max, floating) {\n      if (floating && isIterateeCall(min, max, floating)) {\n        max = floating = undefined;\n      }\n      var noMin = min == null,\n          noMax = max == null;\n\n      if (floating == null) {\n        if (noMax && typeof min == 'boolean') {\n          floating = min;\n          min = 1;\n        }\n        else if (typeof max == 'boolean') {\n          floating = max;\n          noMax = true;\n        }\n      }\n      if (noMin && noMax) {\n        max = 1;\n        noMax = false;\n      }\n      min = +min || 0;\n      if (noMax) {\n        max = min;\n        min = 0;\n      } else {\n        max = +max || 0;\n      }\n      if (floating || min % 1 || max % 1) {\n        var rand = nativeRandom();\n        return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);\n      }\n      return baseRandom(min, max);\n    }\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);\n    });\n    function capitalize(string) {\n      string = baseToString(string);\n      return string && (string.charAt(0).toUpperCase() + string.slice(1));\n    }\n    function deburr(string) {\n      string = baseToString(string);\n      return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '');\n    }\n    function endsWith(string, target, position) {\n      string = baseToString(string);\n      target = (target + '');\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : nativeMin(position < 0 ? 0 : (+position || 0), length);\n\n      position -= target.length;\n      return position >= 0 && string.indexOf(target, position) == position;\n    }\n    function escape(string) {\n      string = baseToString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n    function escapeRegExp(string) {\n      string = baseToString(string);\n      return (string && reHasRegExpChars.test(string))\n        ? string.replace(reRegExpChars, escapeRegExpChar)\n        : (string || '(?:)');\n    }\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n    function pad(string, length, chars) {\n      string = baseToString(string);\n      length = +length;\n\n      var strLength = string.length;\n      if (strLength >= length || !nativeIsFinite(length)) {\n        return string;\n      }\n      var mid = (length - strLength) / 2,\n          leftLength = nativeFloor(mid),\n          rightLength = nativeCeil(mid);\n\n      chars = createPadding('', rightLength, chars);\n      return chars.slice(0, leftLength) + string + chars;\n    }\n    var padLeft = createPadDir();\n    var padRight = createPadDir(true);\n    function parseInt(string, radix, guard) {\n      if (guard ? isIterateeCall(string, radix, guard) : radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      string = trim(string);\n      return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));\n    }\n    function repeat(string, n) {\n      var result = '';\n      string = baseToString(string);\n      n = +n;\n      if (n < 1 || !string || !nativeIsFinite(n)) {\n        return result;\n      }\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        string += string;\n      } while (n);\n\n      return result;\n    }\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1));\n    });\n    function startsWith(string, target, position) {\n      string = baseToString(string);\n      position = position == null\n        ? 0\n        : nativeMin(position < 0 ? 0 : (+position || 0), string.length);\n\n      return string.lastIndexOf(target, position) == position;\n    }\n    function template(string, options, otherOptions) {\n      var settings = lodash.templateSettings;\n\n      if (otherOptions && isIterateeCall(string, options, otherOptions)) {\n        options = otherOptions = undefined;\n      }\n      string = baseToString(string);\n      options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);\n\n      var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n      var sourceURL = '//# sourceURL=' +\n        ('sourceURL' in options\n          ? options.sourceURL\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n        return match;\n      });\n\n      source += \"';\\n\";\n      var variable = options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);\n      });\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n    function trim(string, chars, guard) {\n      var value = string;\n      string = baseToString(string);\n      if (!string) {\n        return string;\n      }\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\n        return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1);\n      }\n      chars = (chars + '');\n      return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1);\n    }\n    function trimLeft(string, chars, guard) {\n      var value = string;\n      string = baseToString(string);\n      if (!string) {\n        return string;\n      }\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\n        return string.slice(trimmedLeftIndex(string));\n      }\n      return string.slice(charsLeftIndex(string, (chars + '')));\n    }\n    function trimRight(string, chars, guard) {\n      var value = string;\n      string = baseToString(string);\n      if (!string) {\n        return string;\n      }\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\n        return string.slice(0, trimmedRightIndex(string) + 1);\n      }\n      return string.slice(0, charsRightIndex(string, (chars + '')) + 1);\n    }\n    function trunc(string, options, guard) {\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (options != null) {\n        if (isObject(options)) {\n          var separator = 'separator' in options ? options.separator : separator;\n          length = 'length' in options ? (+options.length || 0) : length;\n          omission = 'omission' in options ? baseToString(options.omission) : omission;\n        } else {\n          length = +options || 0;\n        }\n      }\n      string = baseToString(string);\n      if (length >= string.length) {\n        return string;\n      }\n      var end = length - omission.length;\n      if (end < 1) {\n        return omission;\n      }\n      var result = string.slice(0, end);\n      if (separator == null) {\n        return result + omission;\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              newEnd,\n              substring = string.slice(0, end);\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            newEnd = match.index;\n          }\n          result = result.slice(0, newEnd == null ? end : newEnd);\n        }\n      } else if (string.indexOf(separator, end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n    function unescape(string) {\n      string = baseToString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n    function words(string, pattern, guard) {\n      if (guard && isIterateeCall(string, pattern, guard)) {\n        pattern = undefined;\n      }\n      string = baseToString(string);\n      return string.match(pattern || reWords) || [];\n    }\n    var attempt = restParam(function(func, args) {\n      try {\n        return func.apply(undefined, args);\n      } catch(e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n    function callback(func, thisArg, guard) {\n      if (guard && isIterateeCall(func, thisArg, guard)) {\n        thisArg = undefined;\n      }\n      return isObjectLike(func)\n        ? matches(func)\n        : baseCallback(func, thisArg);\n    }\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n    function identity(value) {\n      return value;\n    }\n    function matches(source) {\n      return baseMatches(baseClone(source, true));\n    }\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, true));\n    }\n    var method = restParam(function(path, args) {\n      return function(object) {\n        return invokePath(object, path, args);\n      };\n    });\n    var methodOf = restParam(function(object, args) {\n      return function(path) {\n        return invokePath(object, path, args);\n      };\n    });\n    function mixin(object, source, options) {\n      if (options == null) {\n        var isObj = isObject(source),\n            props = isObj ? keys(source) : undefined,\n            methodNames = (props && props.length) ? baseFunctions(source, props) : undefined;\n\n        if (!(methodNames ? methodNames.length : isObj)) {\n          methodNames = false;\n          options = source;\n          source = object;\n          object = this;\n        }\n      }\n      if (!methodNames) {\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = true,\n          index = -1,\n          isFunc = isFunction(object),\n          length = methodNames.length;\n\n      if (options === false) {\n        chain = false;\n      } else if (isObject(options) && 'chain' in options) {\n        chain = options.chain;\n      }\n      while (++index < length) {\n        var methodName = methodNames[index],\n            func = source[methodName];\n\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = (function(func) {\n            return function() {\n              var chainAll = this.__chain__;\n              if (chain || chainAll) {\n                var result = object(this.__wrapped__),\n                    actions = result.__actions__ = arrayCopy(this.__actions__);\n\n                actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n                result.__chain__ = chainAll;\n                return result;\n              }\n              return func.apply(object, arrayPush([this.value()], arguments));\n            };\n          }(func));\n        }\n      }\n      return object;\n    }\n    function noConflict() {\n      root._ = oldDash;\n      return this;\n    }\n    function noop() {\n    }\n    function property(path) {\n      return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n    }\n    function propertyOf(object) {\n      return function(path) {\n        return baseGet(object, toPath(path), path + '');\n      };\n    }\n    function range(start, end, step) {\n      if (step && isIterateeCall(start, end, step)) {\n        end = step = undefined;\n      }\n      start = +start || 0;\n      step = step == null ? 1 : (+step || 0);\n\n      if (end == null) {\n        end = start;\n        start = 0;\n      } else {\n        end = +end || 0;\n      }\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (++index < length) {\n        result[index] = start;\n        start += step;\n      }\n      return result;\n    }\n    function times(n, iteratee, thisArg) {\n      n = nativeFloor(n);\n      if (n < 1 || !nativeIsFinite(n)) {\n        return [];\n      }\n      var index = -1,\n          result = Array(nativeMin(n, MAX_ARRAY_LENGTH));\n\n      iteratee = bindCallback(iteratee, thisArg, 1);\n      while (++index < n) {\n        if (index < MAX_ARRAY_LENGTH) {\n          result[index] = iteratee(index);\n        } else {\n          iteratee(index);\n        }\n      }\n      return result;\n    }\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return baseToString(prefix) + id;\n    }\n    function add(augend, addend) {\n      return (+augend || 0) + (+addend || 0);\n    }\n    var ceil = createRound('ceil');\n    var floor = createRound('floor');\n    var max = createExtremum(gt, NEGATIVE_INFINITY);\n    var min = createExtremum(lt, POSITIVE_INFINITY);\n    var round = createRound('round');\n    function sum(collection, iteratee, thisArg) {\n      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n        iteratee = undefined;\n      }\n      iteratee = getCallback(iteratee, thisArg, 3);\n      return iteratee.length == 1\n        ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)\n        : baseSum(collection, iteratee);\n    }\n    lodash.prototype = baseLodash.prototype;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n    MapCache.prototype['delete'] = mapDelete;\n    MapCache.prototype.get = mapGet;\n    MapCache.prototype.has = mapHas;\n    MapCache.prototype.set = mapSet;\n    SetCache.prototype.push = cachePush;\n    memoize.Cache = MapCache;\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.callback = callback;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.functions = functions;\n    lodash.groupBy = groupBy;\n    lodash.indexBy = indexBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.invert = invert;\n    lodash.invoke = invoke;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.modArgs = modArgs;\n    lodash.negate = negate;\n    lodash.omit = omit;\n    lodash.once = once;\n    lodash.pairs = pairs;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pluck = pluck;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.restParam = restParam;\n    lodash.set = set;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortByAll = sortByAll;\n    lodash.sortByOrder = sortByOrder;\n    lodash.spread = spread;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.times = times;\n    lodash.toArray = toArray;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.union = union;\n    lodash.uniq = uniq;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.where = where;\n    lodash.without = without;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipWith = zipWith;\n    lodash.backflow = flowRight;\n    lodash.collect = map;\n    lodash.compose = flowRight;\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.extend = assign;\n    lodash.iteratee = callback;\n    lodash.methods = functions;\n    lodash.object = zipObject;\n    lodash.select = filter;\n    lodash.tail = rest;\n    lodash.unique = uniq;\n    mixin(lodash, lodash);\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.deburr = deburr;\n    lodash.endsWith = endsWith;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.findWhere = findWhere;\n    lodash.first = first;\n    lodash.floor = floor;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isBoolean = isBoolean;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isMatch = isMatch;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isString = isString;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.min = min;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padLeft = padLeft;\n    lodash.padRight = padRight;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.sum = sum;\n    lodash.template = template;\n    lodash.trim = trim;\n    lodash.trimLeft = trimLeft;\n    lodash.trimRight = trimRight;\n    lodash.trunc = trunc;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.words = words;\n    lodash.all = every;\n    lodash.any = some;\n    lodash.contains = includes;\n    lodash.eq = isEqual;\n    lodash.detect = find;\n    lodash.foldl = reduce;\n    lodash.foldr = reduceRight;\n    lodash.head = first;\n    lodash.include = includes;\n    lodash.inject = reduce;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!lodash.prototype[methodName]) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), false);\n    lodash.sample = sample;\n\n    lodash.prototype.sample = function(n) {\n      if (!this.__chain__ && n == null) {\n        return sample(this.value());\n      }\n      return this.thru(function(value) {\n        return sample(value, n);\n      });\n    };\n    lodash.VERSION = VERSION;\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        var filtered = this.__filtered__;\n        if (filtered && !index) {\n          return new LazyWrapper(this);\n        }\n        n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0);\n\n        var result = this.clone();\n        if (filtered) {\n          result.__takeCount__ = nativeMin(result.__takeCount__, n);\n        } else {\n          result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type != LAZY_MAP_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {\n        var result = this.clone();\n        result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n    arrayEach(['first', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n    arrayEach(['initial', 'rest'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n    arrayEach(['pluck', 'where'], function(methodName, index) {\n      var operationName = index ? 'filter' : 'map',\n          createCallback = index ? baseMatches : property;\n\n      LazyWrapper.prototype[methodName] = function(value) {\n        return this[operationName](createCallback(value));\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.reject = function(predicate, thisArg) {\n      predicate = getCallback(predicate, thisArg, 1);\n      return this.filter(function(value) {\n        return !predicate(value);\n      });\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = start == null ? 0 : (+start || 0);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = (+end || 0);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) {\n      return this.reverse().takeWhile(predicate, thisArg).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(POSITIVE_INFINITY);\n    };\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),\n          retUnwrapped = /^(?:first|last)$/.test(methodName),\n          lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName];\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var args = retUnwrapped ? [1] : arguments,\n            chainAll = this.__chain__,\n            value = this.__wrapped__,\n            isHybrid = !!this.__actions__.length,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          isLazy = useLazy = false;\n        }\n        var interceptor = function(value) {\n          return (retUnwrapped && chainAll)\n            ? lodashFunc(value, 1)[0]\n            : lodashFunc.apply(undefined, arrayPush([value], args));\n        };\n\n        var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined },\n            onlyLazy = isLazy && !isHybrid;\n\n        if (retUnwrapped && !chainAll) {\n          if (onlyLazy) {\n            value = value.clone();\n            value.__actions__.push(action);\n            return func.call(value);\n          }\n          return lodashFunc.call(undefined, this.value())[0];\n        }\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push(action);\n          return new LodashWrapper(result, chainAll);\n        }\n        return this.thru(interceptor);\n      };\n    });\n    arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) {\n      var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          return func.apply(this.value(), args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(value, args);\n        });\n      };\n    });\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name,\n            names = realNames[key] || (realNames[key] = []);\n\n        names.push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }];\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.concat = wrapperConcat;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toString = wrapperToString;\n    lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n    lodash.prototype.collect = lodash.prototype.map;\n    lodash.prototype.head = lodash.prototype.first;\n    lodash.prototype.select = lodash.prototype.filter;\n    lodash.prototype.tail = lodash.prototype.rest;\n\n    return lodash;\n  }\n  var _ = runInContext();\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    root._ = _;\n    ace.define(function() {\n      return _;\n    });\n  }\n  else if (freeExports && freeModule) {\n    if (moduleExports) {\n      (freeModule.exports = _)._ = _;\n    }\n    else {\n      freeExports._ = _;\n    }\n  }\n  else {\n    root._ = _;\n  }\n}.call(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}]},{},[\"/node_modules/xqlint/lib/xqlint.js\"]);\n\n});\n\nace.define(\"ace/mode/xquery_worker\",[], function(require, exports, module) {\n\"use strict\";\n    \nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar XQLintLib = require(\"./xquery/xqlint\");\nvar XQLint =  XQLintLib.XQLint;\n\nvar getModuleResolverFromModules = function(modules){\n    return function(uri){\n            var index = modules;\n            var mod = index[uri];\n            var variables = {};\n            var functions = {};\n            mod.functions.forEach(function(fn){\n                functions[uri + '#' + fn.name + '#' + fn.arity] = {\n                    params: []\n                };\n                fn.parameters.forEach(function(param){\n                    functions[uri + '#' + fn.name + '#' + fn.arity].params.push('$' + param.name);\n                });\n            });\n            mod.variables.forEach(function(variable){\n                var name = variable.name.substring(variable.name.indexOf(':') + 1);\n                variables[uri + '#' + name] = { type: 'VarDecl', annotations: [] };\n            });\n            return {\n                variables: variables,\n                functions: functions\n            };\n    };\n};\n\nvar XQueryWorker = exports.XQueryWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(200);\n    var that = this;\n\n    this.sender.on(\"complete\", function(e){\n        if(that.xqlint) {\n            var pos = { line: e.data.pos.row, col: e.data.pos.column };\n            var proposals = that.xqlint.getCompletions(pos);\n            that.sender.emit(\"complete\", proposals);\n        }\n    });\n\n    this.sender.on(\"setAvailableModuleNamespaces\", function(e){\n        that.availableModuleNamespaces = e.data;\n    });\n\n    this.sender.on(\"setFileName\", function(e){\n        that.fileName = e.data;\n    });\n\n    this.sender.on(\"setModuleResolver\", function(e){\n        that.moduleResolver = getModuleResolverFromModules(e.data);\n    });\n};\n\noop.inherits(XQueryWorker, Mirror);\n\n(function() {\n    \n    this.onUpdate = function() {\n        this.sender.emit(\"start\");\n        var value = this.doc.getValue();\n        var sctx = XQLintLib.createStaticContext();\n        if(this.moduleResolver) {\n            sctx.setModuleResolver(this.moduleResolver);\n        }\n        if(this.availableModuleNamespaces) {\n            sctx.availableModuleNamespaces = this.availableModuleNamespaces;\n        }\n        var opts = {\n            styleCheck: this.styleCheck,\n            staticContext: sctx,\n            fileName: this.fileName\n        };\n        this.xqlint = new XQLint(value, opts);\n        this.sender.emit(\"markers\", this.xqlint.getMarkers());\n    };\n}).call(XQueryWorker.prototype);\n\n});\n"
  },
  {
    "path": "publishable/assets/js/ace/libs/worker-yaml.js",
    "content": "\"no use strict\";\n!(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err && err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err && err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.slice(0, factory.length).map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nwindow.require.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        this.require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        sender = window.sender = window.initSender();\n        var clazz = this.require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\nexports.mixin = function (obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\nexports.implement = function (proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/apply_delta\",[], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n    return position.row >= 0 && position.row < docLines.length &&\n        position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n        throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            }\n            else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            }\n            else {\n                docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n            }\n            break;\n    }\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/range\",[], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/anchor\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.getPosition = function () {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function () {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function (delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n        if (delta.start.row > this.row)\n            return;\n        var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function (row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        }\n        else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function () {\n        this.document.off(\"change\", this.$onChange);\n    };\n    this.attach = function (doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function (row, column) {\n        var pos = {};\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n        if (column < 0)\n            pos.column = 0;\n        return pos;\n    };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    }\n    else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n    }\n    else {\n        this.insert({ row: 0, column: 0 }, textOrLines);\n    }\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.setValue = function (text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({ row: 0, column: 0 }, text || \"\");\n    };\n    this.getValue = function () {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function (row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function (text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    }\n    else {\n        this.$split = function (text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n    this.$detectNewLine = function (text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function () {\n        switch (this.$newLineMode) {\n            case \"windows\":\n                return \"\\r\\n\";\n            case \"unix\":\n                return \"\\n\";\n            default:\n                return this.$autoNewLine || \"\\n\";\n        }\n    };\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function (newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function () {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function (text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function (row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function (firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function () {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function () {\n        return this.$lines.length;\n    };\n    this.getTextRange = function (range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function (range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        }\n        else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function (row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function (firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function (position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function (position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function (position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        return this.clonePos(end);\n    };\n    this.clippedPos = function (row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        }\n        else if (row < 0) {\n            row = 0;\n        }\n        else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return { row: row, column: column };\n    };\n    this.clonePos = function (pos) {\n        return { row: pos.row, column: pos.column };\n    };\n    this.pos = function (row, column) {\n        return { row: row, column: column };\n    };\n    this.$clipPosition = function (position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        }\n        else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function (row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        }\n        else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({ row: row, column: column }, lines);\n    };\n    this.insertMergedLines = function (position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        return this.clonePos(end);\n    };\n    this.remove = function (range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function (row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({ start: start, end: end })\n        }, true);\n        return this.clonePos(start);\n    };\n    this.removeFullLines = function (firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine = lastRow < this.getLength() - 1;\n        var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n        var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n        var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n        var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function (row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function (range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        return end;\n    };\n    this.applyDeltas = function (deltas) {\n        for (var i = 0; i < deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function (deltas) {\n        for (var i = deltas.length - 1; i >= 0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function (delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        if (isInsert && delta.lines.length > 20000) {\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        }\n        else {\n            applyDelta(this.$lines, delta, doNotValidate);\n            this._signal(\"change\", delta);\n        }\n    };\n    this.$safeApplyDelta = function (delta) {\n        var docLength = this.$lines.length;\n        if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n            || delta.action == \"insert\" && delta.start.row <= docLength) {\n            this.applyDelta(delta);\n        }\n    };\n    this.$splitAndapplyLargeDelta = function (delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length - MAX + 1;\n        var row = delta.start.row;\n        var column = delta.start.column;\n        for (var from = 0, to = 0; from < l; from = to) {\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        }\n        delta.lines = lines.slice(from);\n        delta.start.row = row + from;\n        delta.start.column = column;\n        this.applyDelta(delta, true);\n    };\n    this.revertDelta = function (delta) {\n        this.$safeApplyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function (index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return { row: i, column: index + lines[i].length + newlineLength };\n        }\n        return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n    };\n    this.positionToIndex = function (pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n        return index + pos.column;\n    };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/lib/lang\",[], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\nexports.getMatchOffsets = function (string, regExp) {\n    var matches = [];\n    string.replace(regExp, function (str) {\n        matches.push({\n            offset: arguments[arguments.length - 2],\n            length: str.length\n        });\n    });\n    return matches;\n};\nexports.deferredCall = function (fcn) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var deferred = function (timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n    deferred.schedule = deferred;\n    deferred.call = function () {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n    deferred.cancel = function () {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    deferred.isPending = function () {\n        return timer;\n    };\n    return deferred;\n};\nexports.delayedCall = function (fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function () {\n        timer = null;\n        fcn();\n    };\n    var _self = function (timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.delay = function (timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n    _self.call = function () {\n        this.cancel();\n        fcn();\n    };\n    _self.cancel = function () {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n    _self.isPending = function () {\n        return timer;\n    };\n    return _self;\n};\n\n});\n\nace.define(\"ace/worker/mirror\",[], function(require, exports, module) {\n\"use strict\";\n\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                var d, err; \n                if (Array.isArray(data[i+1])) {\n                    d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                \n                if ((d.action == \"insert\" ? d.start : d.end).row >= doc.$lines.length) {\n                    err = new Error(\"Invalid delta\");\n                    err.data = {\n                        path: _self.$path,\n                        linesLength: doc.$lines.length,\n                        start: d.start,\n                        end: d.end\n                    };\n                    throw err;\n                }\n\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/yaml/yaml-lint\",[], function(require, exports, module) {\nvar $build_deps$ = {require: require, exports: exports, module: module};\nexports = undefined; module = undefined;\nfunction define(name, deps, m) {\n    if (typeof name == \"function\") {\n        m = name; deps = [\"require\", \"exports\", \"module\"]; name = $build_deps$.module.id\n    }\n    if (typeof name !== \"string\") {\n        m = deps; deps = name; name = $build_deps$.module.id\n    }\n    if (!m) {\n        m = deps; deps = [];\n    }\n   var ret = typeof m == \"function\" ?\n       m.apply($build_deps$.module, deps.map(function(n){return $build_deps$[n] || require(n)})) : m\n   if (ret != undefined) $build_deps$.module.exports = ret;\n}\ndefine.amd = true;(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f();}else if(typeof define===\"function\"&&define.amd){define([],f);}else{var g;if(typeof window!==\"undefined\"){g=window;}else if(typeof global!==\"undefined\"){g=global;}else if(typeof self!==\"undefined\"){g=self;}else{g=this;}g.lint = f();}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=typeof require==\"function\"&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a;}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r);},p,p.exports,r,e,n,t);}return n[i].exports;}for(var u=typeof require==\"function\"&&require,i=0;i<t.length;i++)o(t[i]);return o;}return r;})()({1:[function(require,module,exports){\n\n},{}],2:[function(require,module,exports){\nvar fs = require('fs');\nvar merge = require('lodash.merge');\nvar yaml = require('js-yaml');\n\nvar DEFAULT_LINT_OPTION = {\n  schema: 'DEFAULT_SAFE_SCHEMA'\n};\n\nfunction lint(content, opts, cb) {\n\n  var options = merge({}, DEFAULT_LINT_OPTION, opts);\n  try {\n    yaml.safeLoad(content, {\n      schema: yaml[options.schema]\n    });\n    cb();\n  } catch (e) {\n    cb(e);\n  }\n}\n\nmodule.exports = {\n  lint: lint\n};\n\n},{\"fs\":1,\"js-yaml\":3,\"lodash.merge\":33}],3:[function(require,module,exports){\n'use strict';\n\n\nvar yaml = require('./lib/js-yaml.js');\n\n\nmodule.exports = yaml;\n\n},{\"./lib/js-yaml.js\":4}],4:[function(require,module,exports){\n'use strict';\n\n\nvar loader = require('./js-yaml/loader');\nvar dumper = require('./js-yaml/dumper');\n\n\nfunction deprecated(name) {\n  return function () {\n    throw new Error('Function ' + name + ' is deprecated and cannot be used.');\n  };\n}\n\n\nmodule.exports.Type                = require('./js-yaml/type');\nmodule.exports.Schema              = require('./js-yaml/schema');\nmodule.exports.FAILSAFE_SCHEMA     = require('./js-yaml/schema/failsafe');\nmodule.exports.JSON_SCHEMA         = require('./js-yaml/schema/json');\nmodule.exports.CORE_SCHEMA         = require('./js-yaml/schema/core');\nmodule.exports.DEFAULT_SAFE_SCHEMA = require('./js-yaml/schema/default_safe');\nmodule.exports.DEFAULT_FULL_SCHEMA = require('./js-yaml/schema/default_full');\nmodule.exports.load                = loader.load;\nmodule.exports.loadAll             = loader.loadAll;\nmodule.exports.safeLoad            = loader.safeLoad;\nmodule.exports.safeLoadAll         = loader.safeLoadAll;\nmodule.exports.dump                = dumper.dump;\nmodule.exports.safeDump            = dumper.safeDump;\nmodule.exports.YAMLException       = require('./js-yaml/exception');\nmodule.exports.MINIMAL_SCHEMA = require('./js-yaml/schema/failsafe');\nmodule.exports.SAFE_SCHEMA    = require('./js-yaml/schema/default_safe');\nmodule.exports.DEFAULT_SCHEMA = require('./js-yaml/schema/default_full');\nmodule.exports.scan           = deprecated('scan');\nmodule.exports.parse          = deprecated('parse');\nmodule.exports.compose        = deprecated('compose');\nmodule.exports.addConstructor = deprecated('addConstructor');\n\n},{\"./js-yaml/dumper\":6,\"./js-yaml/exception\":7,\"./js-yaml/loader\":8,\"./js-yaml/schema\":10,\"./js-yaml/schema/core\":11,\"./js-yaml/schema/default_full\":12,\"./js-yaml/schema/default_safe\":13,\"./js-yaml/schema/failsafe\":14,\"./js-yaml/schema/json\":15,\"./js-yaml/type\":16}],5:[function(require,module,exports){\n'use strict';\n\n\nfunction isNothing(subject) {\n  return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n  return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n  if (Array.isArray(sequence)) return sequence;\n  else if (isNothing(sequence)) return [];\n\n  return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n  var index, length, key, sourceKeys;\n\n  if (source) {\n    sourceKeys = Object.keys(source);\n\n    for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n      key = sourceKeys[index];\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\n\nfunction repeat(string, count) {\n  var result = '', cycle;\n\n  for (cycle = 0; cycle < count; cycle += 1) {\n    result += string;\n  }\n\n  return result;\n}\n\n\nfunction isNegativeZero(number) {\n  return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nmodule.exports.isNothing      = isNothing;\nmodule.exports.isObject       = isObject;\nmodule.exports.toArray        = toArray;\nmodule.exports.repeat         = repeat;\nmodule.exports.isNegativeZero = isNegativeZero;\nmodule.exports.extend         = extend;\n\n},{}],6:[function(require,module,exports){\n'use strict';\n\nvar common              = require('./common');\nvar YAMLException       = require('./exception');\nvar DEFAULT_FULL_SCHEMA = require('./schema/default_full');\nvar DEFAULT_SAFE_SCHEMA = require('./schema/default_safe');\n\nvar _toString       = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar CHAR_TAB                  = 0x09;\nvar CHAR_LINE_FEED            = 0x0A;\nvar CHAR_SPACE                = 0x20;\nvar CHAR_EXCLAMATION          = 0x21;\nvar CHAR_DOUBLE_QUOTE         = 0x22;\nvar CHAR_SHARP                = 0x23;\nvar CHAR_PERCENT              = 0x25;\nvar CHAR_AMPERSAND            = 0x26;\nvar CHAR_SINGLE_QUOTE         = 0x27;\nvar CHAR_ASTERISK             = 0x2A;\nvar CHAR_COMMA                = 0x2C;\nvar CHAR_MINUS                = 0x2D;\nvar CHAR_COLON                = 0x3A;\nvar CHAR_GREATER_THAN         = 0x3E;\nvar CHAR_QUESTION             = 0x3F;\nvar CHAR_COMMERCIAL_AT        = 0x40;\nvar CHAR_LEFT_SQUARE_BRACKET  = 0x5B;\nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D;\nvar CHAR_GRAVE_ACCENT         = 0x60;\nvar CHAR_LEFT_CURLY_BRACKET   = 0x7B;\nvar CHAR_VERTICAL_LINE        = 0x7C;\nvar CHAR_RIGHT_CURLY_BRACKET  = 0x7D;\n\nvar ESCAPE_SEQUENCES = {};\n\nESCAPE_SEQUENCES[0x00]   = '\\\\0';\nESCAPE_SEQUENCES[0x07]   = '\\\\a';\nESCAPE_SEQUENCES[0x08]   = '\\\\b';\nESCAPE_SEQUENCES[0x09]   = '\\\\t';\nESCAPE_SEQUENCES[0x0A]   = '\\\\n';\nESCAPE_SEQUENCES[0x0B]   = '\\\\v';\nESCAPE_SEQUENCES[0x0C]   = '\\\\f';\nESCAPE_SEQUENCES[0x0D]   = '\\\\r';\nESCAPE_SEQUENCES[0x1B]   = '\\\\e';\nESCAPE_SEQUENCES[0x22]   = '\\\\\"';\nESCAPE_SEQUENCES[0x5C]   = '\\\\\\\\';\nESCAPE_SEQUENCES[0x85]   = '\\\\N';\nESCAPE_SEQUENCES[0xA0]   = '\\\\_';\nESCAPE_SEQUENCES[0x2028] = '\\\\L';\nESCAPE_SEQUENCES[0x2029] = '\\\\P';\n\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n  'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',\n  'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'\n];\n\nfunction compileStyleMap(schema, map) {\n  var result, keys, index, length, tag, style, type;\n\n  if (map === null) return {};\n\n  result = {};\n  keys = Object.keys(map);\n\n  for (index = 0, length = keys.length; index < length; index += 1) {\n    tag = keys[index];\n    style = String(map[tag]);\n\n    if (tag.slice(0, 2) === '!!') {\n      tag = 'tag:yaml.org,2002:' + tag.slice(2);\n    }\n    type = schema.compiledTypeMap['fallback'][tag];\n\n    if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n      style = type.styleAliases[style];\n    }\n\n    result[tag] = style;\n  }\n\n  return result;\n}\n\nfunction encodeHex(character) {\n  var string, handle, length;\n\n  string = character.toString(16).toUpperCase();\n\n  if (character <= 0xFF) {\n    handle = 'x';\n    length = 2;\n  } else if (character <= 0xFFFF) {\n    handle = 'u';\n    length = 4;\n  } else if (character <= 0xFFFFFFFF) {\n    handle = 'U';\n    length = 8;\n  } else {\n    throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF');\n  }\n\n  return '\\\\' + handle + common.repeat('0', length - string.length) + string;\n}\n\nfunction State(options) {\n  this.schema        = options['schema'] || DEFAULT_FULL_SCHEMA;\n  this.indent        = Math.max(1, (options['indent'] || 2));\n  this.noArrayIndent = options['noArrayIndent'] || false;\n  this.skipInvalid   = options['skipInvalid'] || false;\n  this.flowLevel     = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);\n  this.styleMap      = compileStyleMap(this.schema, options['styles'] || null);\n  this.sortKeys      = options['sortKeys'] || false;\n  this.lineWidth     = options['lineWidth'] || 80;\n  this.noRefs        = options['noRefs'] || false;\n  this.noCompatMode  = options['noCompatMode'] || false;\n  this.condenseFlow  = options['condenseFlow'] || false;\n\n  this.implicitTypes = this.schema.compiledImplicit;\n  this.explicitTypes = this.schema.compiledExplicit;\n\n  this.tag = null;\n  this.result = '';\n\n  this.duplicates = [];\n  this.usedDuplicates = null;\n}\nfunction indentString(string, spaces) {\n  var ind = common.repeat(' ', spaces),\n      position = 0,\n      next = -1,\n      result = '',\n      line,\n      length = string.length;\n\n  while (position < length) {\n    next = string.indexOf('\\n', position);\n    if (next === -1) {\n      line = string.slice(position);\n      position = length;\n    } else {\n      line = string.slice(position, next + 1);\n      position = next + 1;\n    }\n\n    if (line.length && line !== '\\n') result += ind;\n\n    result += line;\n  }\n\n  return result;\n}\n\nfunction generateNextLine(state, level) {\n  return '\\n' + common.repeat(' ', state.indent * level);\n}\n\nfunction testImplicitResolving(state, str) {\n  var index, length, type;\n\n  for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n    type = state.implicitTypes[index];\n\n    if (type.resolve(str)) {\n      return true;\n    }\n  }\n\n  return false;\n}\nfunction isWhitespace(c) {\n  return c === CHAR_SPACE || c === CHAR_TAB;\n}\nfunction isPrintable(c) {\n  return  (c >= 0x00020 && c <= 0x00007E)\n      || ((c >= 0x000A1 && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)\n      || ((c >= 0x0E000 && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */)\n      ||  (c >= 0x10000 && c <= 0x10FFFF);\n}\nfunction isPlainSafe(c) {\n  return isPrintable(c) && c !== 0xFEFF\n    && c !== CHAR_COMMA\n    && c !== CHAR_LEFT_SQUARE_BRACKET\n    && c !== CHAR_RIGHT_SQUARE_BRACKET\n    && c !== CHAR_LEFT_CURLY_BRACKET\n    && c !== CHAR_RIGHT_CURLY_BRACKET\n    && c !== CHAR_COLON\n    && c !== CHAR_SHARP;\n}\nfunction isPlainSafeFirst(c) {\n  return isPrintable(c) && c !== 0xFEFF\n    && !isWhitespace(c) // - s-white\n    && c !== CHAR_MINUS\n    && c !== CHAR_QUESTION\n    && c !== CHAR_COLON\n    && c !== CHAR_COMMA\n    && c !== CHAR_LEFT_SQUARE_BRACKET\n    && c !== CHAR_RIGHT_SQUARE_BRACKET\n    && c !== CHAR_LEFT_CURLY_BRACKET\n    && c !== CHAR_RIGHT_CURLY_BRACKET\n    && c !== CHAR_SHARP\n    && c !== CHAR_AMPERSAND\n    && c !== CHAR_ASTERISK\n    && c !== CHAR_EXCLAMATION\n    && c !== CHAR_VERTICAL_LINE\n    && c !== CHAR_GREATER_THAN\n    && c !== CHAR_SINGLE_QUOTE\n    && c !== CHAR_DOUBLE_QUOTE\n    && c !== CHAR_PERCENT\n    && c !== CHAR_COMMERCIAL_AT\n    && c !== CHAR_GRAVE_ACCENT;\n}\nfunction needIndentIndicator(string) {\n  var leadingSpaceRe = /^\\n* /;\n  return leadingSpaceRe.test(string);\n}\n\nvar STYLE_PLAIN   = 1,\n    STYLE_SINGLE  = 2,\n    STYLE_LITERAL = 3,\n    STYLE_FOLDED  = 4,\n    STYLE_DOUBLE  = 5;\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) {\n  var i;\n  var char;\n  var hasLineBreak = false;\n  var hasFoldableLine = false; // only checked if shouldTrackWidth\n  var shouldTrackWidth = lineWidth !== -1;\n  var previousLineBreak = -1; // count the first line correctly\n  var plain = isPlainSafeFirst(string.charCodeAt(0))\n          && !isWhitespace(string.charCodeAt(string.length - 1));\n\n  if (singleLineOnly) {\n    for (i = 0; i < string.length; i++) {\n      char = string.charCodeAt(i);\n      if (!isPrintable(char)) {\n        return STYLE_DOUBLE;\n      }\n      plain = plain && isPlainSafe(char);\n    }\n  } else {\n    for (i = 0; i < string.length; i++) {\n      char = string.charCodeAt(i);\n      if (char === CHAR_LINE_FEED) {\n        hasLineBreak = true;\n        if (shouldTrackWidth) {\n          hasFoldableLine = hasFoldableLine ||\n            (i - previousLineBreak - 1 > lineWidth &&\n             string[previousLineBreak + 1] !== ' ');\n          previousLineBreak = i;\n        }\n      } else if (!isPrintable(char)) {\n        return STYLE_DOUBLE;\n      }\n      plain = plain && isPlainSafe(char);\n    }\n    hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&\n      (i - previousLineBreak - 1 > lineWidth &&\n       string[previousLineBreak + 1] !== ' '));\n  }\n  if (!hasLineBreak && !hasFoldableLine) {\n    return plain && !testAmbiguousType(string)\n      ? STYLE_PLAIN : STYLE_SINGLE;\n  }\n  if (indentPerLevel > 9 && needIndentIndicator(string)) {\n    return STYLE_DOUBLE;\n  }\n  return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n}\nfunction writeScalar(state, string, level, iskey) {\n  state.dump = (function () {\n    if (string.length === 0) {\n      return \"''\";\n    }\n    if (!state.noCompatMode &&\n        DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) {\n      return \"'\" + string + \"'\";\n    }\n\n    var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n    var lineWidth = state.lineWidth === -1\n      ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n    var singleLineOnly = iskey\n      || (state.flowLevel > -1 && level >= state.flowLevel);\n    function testAmbiguity(string) {\n      return testImplicitResolving(state, string);\n    }\n\n    switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) {\n      case STYLE_PLAIN:\n        return string;\n      case STYLE_SINGLE:\n        return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n      case STYLE_LITERAL:\n        return '|' + blockHeader(string, state.indent)\n          + dropEndingNewline(indentString(string, indent));\n      case STYLE_FOLDED:\n        return '>' + blockHeader(string, state.indent)\n          + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n      case STYLE_DOUBLE:\n        return '\"' + escapeString(string, lineWidth) + '\"';\n      default:\n        throw new YAMLException('impossible error: invalid scalar style');\n    }\n  }());\n}\nfunction blockHeader(string, indentPerLevel) {\n  var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';\n  var clip =          string[string.length - 1] === '\\n';\n  var keep = clip && (string[string.length - 2] === '\\n' || string === '\\n');\n  var chomp = keep ? '+' : (clip ? '' : '-');\n\n  return indentIndicator + chomp + '\\n';\n}\nfunction dropEndingNewline(string) {\n  return string[string.length - 1] === '\\n' ? string.slice(0, -1) : string;\n}\nfunction foldString(string, width) {\n  var lineRe = /(\\n+)([^\\n]*)/g;\n  var result = (function () {\n    var nextLF = string.indexOf('\\n');\n    nextLF = nextLF !== -1 ? nextLF : string.length;\n    lineRe.lastIndex = nextLF;\n    return foldLine(string.slice(0, nextLF), width);\n  }());\n  var prevMoreIndented = string[0] === '\\n' || string[0] === ' ';\n  var moreIndented;\n  var match;\n  while ((match = lineRe.exec(string))) {\n    var prefix = match[1], line = match[2];\n    moreIndented = (line[0] === ' ');\n    result += prefix\n      + (!prevMoreIndented && !moreIndented && line !== ''\n        ? '\\n' : '')\n      + foldLine(line, width);\n    prevMoreIndented = moreIndented;\n  }\n\n  return result;\n}\nfunction foldLine(line, width) {\n  if (line === '' || line[0] === ' ') return line;\n  var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n  var match;\n  var start = 0, end, curr = 0, next = 0;\n  var result = '';\n  while ((match = breakRe.exec(line))) {\n    next = match.index;\n    if (next - start > width) {\n      end = (curr > start) ? curr : next; // derive end <= length-2\n      result += '\\n' + line.slice(start, end);\n      start = end + 1;                    // derive start <= length-1\n    }\n    curr = next;\n  }\n  result += '\\n';\n  if (line.length - start > width && curr > start) {\n    result += line.slice(start, curr) + '\\n' + line.slice(curr + 1);\n  } else {\n    result += line.slice(start);\n  }\n\n  return result.slice(1); // drop extra \\n joiner\n}\nfunction escapeString(string) {\n  var result = '';\n  var char, nextChar;\n  var escapeSeq;\n\n  for (var i = 0; i < string.length; i++) {\n    char = string.charCodeAt(i);\n    if (char >= 0xD800 && char <= 0xDBFF/* high surrogate */) {\n      nextChar = string.charCodeAt(i + 1);\n      if (nextChar >= 0xDC00 && nextChar <= 0xDFFF/* low surrogate */) {\n        result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000);\n        i++; continue;\n      }\n    }\n    escapeSeq = ESCAPE_SEQUENCES[char];\n    result += !escapeSeq && isPrintable(char)\n      ? string[i]\n      : escapeSeq || encodeHex(char);\n  }\n\n  return result;\n}\n\nfunction writeFlowSequence(state, level, object) {\n  var _result = '',\n      _tag    = state.tag,\n      index,\n      length;\n\n  for (index = 0, length = object.length; index < length; index += 1) {\n    if (writeNode(state, level, object[index], false, false)) {\n      if (index !== 0) _result += ',' + (!state.condenseFlow ? ' ' : '');\n      _result += state.dump;\n    }\n  }\n\n  state.tag = _tag;\n  state.dump = '[' + _result + ']';\n}\n\nfunction writeBlockSequence(state, level, object, compact) {\n  var _result = '',\n      _tag    = state.tag,\n      index,\n      length;\n\n  for (index = 0, length = object.length; index < length; index += 1) {\n    if (writeNode(state, level + 1, object[index], true, true)) {\n      if (!compact || index !== 0) {\n        _result += generateNextLine(state, level);\n      }\n\n      if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n        _result += '-';\n      } else {\n        _result += '- ';\n      }\n\n      _result += state.dump;\n    }\n  }\n\n  state.tag = _tag;\n  state.dump = _result || '[]'; // Empty sequence if no valid values.\n}\n\nfunction writeFlowMapping(state, level, object) {\n  var _result       = '',\n      _tag          = state.tag,\n      objectKeyList = Object.keys(object),\n      index,\n      length,\n      objectKey,\n      objectValue,\n      pairBuffer;\n\n  for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n    pairBuffer = state.condenseFlow ? '\"' : '';\n\n    if (index !== 0) pairBuffer += ', ';\n\n    objectKey = objectKeyList[index];\n    objectValue = object[objectKey];\n\n    if (!writeNode(state, level, objectKey, false, false)) {\n      continue; // Skip this pair because of invalid key;\n    }\n\n    if (state.dump.length > 1024) pairBuffer += '? ';\n\n    pairBuffer += state.dump + (state.condenseFlow ? '\"' : '') + ':' + (state.condenseFlow ? '' : ' ');\n\n    if (!writeNode(state, level, objectValue, false, false)) {\n      continue; // Skip this pair because of invalid value.\n    }\n\n    pairBuffer += state.dump;\n    _result += pairBuffer;\n  }\n\n  state.tag = _tag;\n  state.dump = '{' + _result + '}';\n}\n\nfunction writeBlockMapping(state, level, object, compact) {\n  var _result       = '',\n      _tag          = state.tag,\n      objectKeyList = Object.keys(object),\n      index,\n      length,\n      objectKey,\n      objectValue,\n      explicitPair,\n      pairBuffer;\n  if (state.sortKeys === true) {\n    objectKeyList.sort();\n  } else if (typeof state.sortKeys === 'function') {\n    objectKeyList.sort(state.sortKeys);\n  } else if (state.sortKeys) {\n    throw new YAMLException('sortKeys must be a boolean or a function');\n  }\n\n  for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n    pairBuffer = '';\n\n    if (!compact || index !== 0) {\n      pairBuffer += generateNextLine(state, level);\n    }\n\n    objectKey = objectKeyList[index];\n    objectValue = object[objectKey];\n\n    if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n      continue; // Skip this pair because of invalid key.\n    }\n\n    explicitPair = (state.tag !== null && state.tag !== '?') ||\n                   (state.dump && state.dump.length > 1024);\n\n    if (explicitPair) {\n      if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n        pairBuffer += '?';\n      } else {\n        pairBuffer += '? ';\n      }\n    }\n\n    pairBuffer += state.dump;\n\n    if (explicitPair) {\n      pairBuffer += generateNextLine(state, level);\n    }\n\n    if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n      continue; // Skip this pair because of invalid value.\n    }\n\n    if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n      pairBuffer += ':';\n    } else {\n      pairBuffer += ': ';\n    }\n\n    pairBuffer += state.dump;\n    _result += pairBuffer;\n  }\n\n  state.tag = _tag;\n  state.dump = _result || '{}'; // Empty mapping if no valid pairs.\n}\n\nfunction detectType(state, object, explicit) {\n  var _result, typeList, index, length, type, style;\n\n  typeList = explicit ? state.explicitTypes : state.implicitTypes;\n\n  for (index = 0, length = typeList.length; index < length; index += 1) {\n    type = typeList[index];\n\n    if ((type.instanceOf  || type.predicate) &&\n        (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&\n        (!type.predicate  || type.predicate(object))) {\n\n      state.tag = explicit ? type.tag : '?';\n\n      if (type.represent) {\n        style = state.styleMap[type.tag] || type.defaultStyle;\n\n        if (_toString.call(type.represent) === '[object Function]') {\n          _result = type.represent(object, style);\n        } else if (_hasOwnProperty.call(type.represent, style)) {\n          _result = type.represent[style](object, style);\n        } else {\n          throw new YAMLException('!<' + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n        }\n\n        state.dump = _result;\n      }\n\n      return true;\n    }\n  }\n\n  return false;\n}\nfunction writeNode(state, level, object, block, compact, iskey) {\n  state.tag = null;\n  state.dump = object;\n\n  if (!detectType(state, object, false)) {\n    detectType(state, object, true);\n  }\n\n  var type = _toString.call(state.dump);\n\n  if (block) {\n    block = (state.flowLevel < 0 || state.flowLevel > level);\n  }\n\n  var objectOrArray = type === '[object Object]' || type === '[object Array]',\n      duplicateIndex,\n      duplicate;\n\n  if (objectOrArray) {\n    duplicateIndex = state.duplicates.indexOf(object);\n    duplicate = duplicateIndex !== -1;\n  }\n\n  if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {\n    compact = false;\n  }\n\n  if (duplicate && state.usedDuplicates[duplicateIndex]) {\n    state.dump = '*ref_' + duplicateIndex;\n  } else {\n    if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n      state.usedDuplicates[duplicateIndex] = true;\n    }\n    if (type === '[object Object]') {\n      if (block && (Object.keys(state.dump).length !== 0)) {\n        writeBlockMapping(state, level, state.dump, compact);\n        if (duplicate) {\n          state.dump = '&ref_' + duplicateIndex + state.dump;\n        }\n      } else {\n        writeFlowMapping(state, level, state.dump);\n        if (duplicate) {\n          state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n        }\n      }\n    } else if (type === '[object Array]') {\n      var arrayLevel = (state.noArrayIndent && (level > 0)) ? level - 1 : level;\n      if (block && (state.dump.length !== 0)) {\n        writeBlockSequence(state, arrayLevel, state.dump, compact);\n        if (duplicate) {\n          state.dump = '&ref_' + duplicateIndex + state.dump;\n        }\n      } else {\n        writeFlowSequence(state, arrayLevel, state.dump);\n        if (duplicate) {\n          state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n        }\n      }\n    } else if (type === '[object String]') {\n      if (state.tag !== '?') {\n        writeScalar(state, state.dump, level, iskey);\n      }\n    } else {\n      if (state.skipInvalid) return false;\n      throw new YAMLException('unacceptable kind of an object to dump ' + type);\n    }\n\n    if (state.tag !== null && state.tag !== '?') {\n      state.dump = '!<' + state.tag + '> ' + state.dump;\n    }\n  }\n\n  return true;\n}\n\nfunction getDuplicateReferences(object, state) {\n  var objects = [],\n      duplicatesIndexes = [],\n      index,\n      length;\n\n  inspectNode(object, objects, duplicatesIndexes);\n\n  for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n    state.duplicates.push(objects[duplicatesIndexes[index]]);\n  }\n  state.usedDuplicates = new Array(length);\n}\n\nfunction inspectNode(object, objects, duplicatesIndexes) {\n  var objectKeyList,\n      index,\n      length;\n\n  if (object !== null && typeof object === 'object') {\n    index = objects.indexOf(object);\n    if (index !== -1) {\n      if (duplicatesIndexes.indexOf(index) === -1) {\n        duplicatesIndexes.push(index);\n      }\n    } else {\n      objects.push(object);\n\n      if (Array.isArray(object)) {\n        for (index = 0, length = object.length; index < length; index += 1) {\n          inspectNode(object[index], objects, duplicatesIndexes);\n        }\n      } else {\n        objectKeyList = Object.keys(object);\n\n        for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n          inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n        }\n      }\n    }\n  }\n}\n\nfunction dump(input, options) {\n  options = options || {};\n\n  var state = new State(options);\n\n  if (!state.noRefs) getDuplicateReferences(input, state);\n\n  if (writeNode(state, 0, input, true, true)) return state.dump + '\\n';\n\n  return '';\n}\n\nfunction safeDump(input, options) {\n  return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n}\n\nmodule.exports.dump     = dump;\nmodule.exports.safeDump = safeDump;\n\n},{\"./common\":5,\"./exception\":7,\"./schema/default_full\":12,\"./schema/default_safe\":13}],7:[function(require,module,exports){\n'use strict';\n\nfunction YAMLException(reason, mark) {\n  Error.call(this);\n\n  this.name = 'YAMLException';\n  this.reason = reason;\n  this.mark = mark;\n  this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : '');\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, this.constructor);\n  } else {\n    this.stack = (new Error()).stack || '';\n  }\n}\nYAMLException.prototype = Object.create(Error.prototype);\nYAMLException.prototype.constructor = YAMLException;\n\n\nYAMLException.prototype.toString = function toString(compact) {\n  var result = this.name + ': ';\n\n  result += this.reason || '(unknown reason)';\n\n  if (!compact && this.mark) {\n    result += ' ' + this.mark.toString();\n  }\n\n  return result;\n};\n\n\nmodule.exports = YAMLException;\n\n},{}],8:[function(require,module,exports){\n'use strict';\n\nvar common              = require('./common');\nvar YAMLException       = require('./exception');\nvar Mark                = require('./mark');\nvar DEFAULT_SAFE_SCHEMA = require('./schema/default_safe');\nvar DEFAULT_FULL_SCHEMA = require('./schema/default_full');\n\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\nvar CONTEXT_FLOW_IN   = 1;\nvar CONTEXT_FLOW_OUT  = 2;\nvar CONTEXT_BLOCK_IN  = 3;\nvar CONTEXT_BLOCK_OUT = 4;\n\n\nvar CHOMPING_CLIP  = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP  = 3;\n\n\nvar PATTERN_NON_PRINTABLE         = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS       = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE            = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI               = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\n\n\nfunction is_EOL(c) {\n  return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);\n}\n\nfunction is_WHITE_SPACE(c) {\n  return (c === 0x09/* Tab */) || (c === 0x20/* Space */);\n}\n\nfunction is_WS_OR_EOL(c) {\n  return (c === 0x09/* Tab */) ||\n         (c === 0x20/* Space */) ||\n         (c === 0x0A/* LF */) ||\n         (c === 0x0D/* CR */);\n}\n\nfunction is_FLOW_INDICATOR(c) {\n  return c === 0x2C/* , */ ||\n         c === 0x5B/* [ */ ||\n         c === 0x5D/* ] */ ||\n         c === 0x7B/* { */ ||\n         c === 0x7D/* } */;\n}\n\nfunction fromHexCode(c) {\n  var lc;\n\n  if ((c/* 0 */ >= 0x30) && (c <= 0x39/* 9 */)) {\n    return c - 0x30;\n  }\n  lc = c | 0x20;\n\n  if ((lc/* a */ >= 0x61) && (lc <= 0x66/* f */)) {\n    return lc - 0x61 + 10;\n  }\n\n  return -1;\n}\n\nfunction escapedHexLen(c) {\n  if (c === 0x78/* x */) { return 2; }\n  if (c === 0x75/* u */) { return 4; }\n  if (c === 0x55/* U */) { return 8; }\n  return 0;\n}\n\nfunction fromDecimalCode(c) {\n  if ((c/* 0 */ >= 0x30) && (c <= 0x39/* 9 */)) {\n    return c - 0x30;\n  }\n\n  return -1;\n}\n\nfunction simpleEscapeSequence(c) {\n  return (c === 0x30/* 0 */) ? '\\x00' :\n        (c === 0x61/* a */) ? '\\x07' :\n        (c === 0x62/* b */) ? '\\x08' :\n        (c === 0x74/* t */) ? '\\x09' :\n        (c === 0x09/* Tab */) ? '\\x09' :\n        (c === 0x6E/* n */) ? '\\x0A' :\n        (c === 0x76/* v */) ? '\\x0B' :\n        (c === 0x66/* f */) ? '\\x0C' :\n        (c === 0x72/* r */) ? '\\x0D' :\n        (c === 0x65/* e */) ? '\\x1B' :\n        (c === 0x20/* Space */) ? ' ' :\n        (c === 0x22/* \" */) ? '\\x22' :\n        (c === 0x2F/* / */) ? '/' :\n        (c === 0x5C/* \\ */) ? '\\x5C' :\n        (c === 0x4E/* N */) ? '\\x85' :\n        (c === 0x5F/* _ */) ? '\\xA0' :\n        (c === 0x4C/* L */) ? '\\u2028' :\n        (c === 0x50/* P */) ? '\\u2029' : '';\n}\n\nfunction charFromCodepoint(c) {\n  if (c <= 0xFFFF) {\n    return String.fromCharCode(c);\n  }\n  return String.fromCharCode(\n    ((c - 0x010000) >> 10) + 0xD800,\n    ((c - 0x010000) & 0x03FF) + 0xDC00\n  );\n}\n\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n  simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n  simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\n\n\nfunction State(input, options) {\n  this.input = input;\n\n  this.filename  = options['filename']  || null;\n  this.schema    = options['schema']    || DEFAULT_FULL_SCHEMA;\n  this.onWarning = options['onWarning'] || null;\n  this.legacy    = options['legacy']    || false;\n  this.json      = options['json']      || false;\n  this.listener  = options['listener']  || null;\n\n  this.implicitTypes = this.schema.compiledImplicit;\n  this.typeMap       = this.schema.compiledTypeMap;\n\n  this.length     = input.length;\n  this.position   = 0;\n  this.line       = 0;\n  this.lineStart  = 0;\n  this.lineIndent = 0;\n\n  this.documents = [];\n\n}\n\n\nfunction generateError(state, message) {\n  return new YAMLException(\n    message,\n    new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart)));\n}\n\nfunction throwError(state, message) {\n  throw generateError(state, message);\n}\n\nfunction throwWarning(state, message) {\n  if (state.onWarning) {\n    state.onWarning.call(null, generateError(state, message));\n  }\n}\n\n\nvar directiveHandlers = {\n\n  YAML: function handleYamlDirective(state, name, args) {\n\n    var match, major, minor;\n\n    if (state.version !== null) {\n      throwError(state, 'duplication of %YAML directive');\n    }\n\n    if (args.length !== 1) {\n      throwError(state, 'YAML directive accepts exactly one argument');\n    }\n\n    match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n\n    if (match === null) {\n      throwError(state, 'ill-formed argument of the YAML directive');\n    }\n\n    major = parseInt(match[1], 10);\n    minor = parseInt(match[2], 10);\n\n    if (major !== 1) {\n      throwError(state, 'unacceptable YAML version of the document');\n    }\n\n    state.version = args[0];\n    state.checkLineBreaks = (minor < 2);\n\n    if (minor !== 1 && minor !== 2) {\n      throwWarning(state, 'unsupported YAML version of the document');\n    }\n  },\n\n  TAG: function handleTagDirective(state, name, args) {\n\n    var handle, prefix;\n\n    if (args.length !== 2) {\n      throwError(state, 'TAG directive accepts exactly two arguments');\n    }\n\n    handle = args[0];\n    prefix = args[1];\n\n    if (!PATTERN_TAG_HANDLE.test(handle)) {\n      throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');\n    }\n\n    if (_hasOwnProperty.call(state.tagMap, handle)) {\n      throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n    }\n\n    if (!PATTERN_TAG_URI.test(prefix)) {\n      throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');\n    }\n\n    state.tagMap[handle] = prefix;\n  }\n};\n\n\nfunction captureSegment(state, start, end, checkJson) {\n  var _position, _length, _character, _result;\n\n  if (start < end) {\n    _result = state.input.slice(start, end);\n\n    if (checkJson) {\n      for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n        _character = _result.charCodeAt(_position);\n        if (!(_character === 0x09 ||\n              (_character >= 0x20 && _character <= 0x10FFFF))) {\n          throwError(state, 'expected valid JSON character');\n        }\n      }\n    } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n      throwError(state, 'the stream contains non-printable characters');\n    }\n\n    state.result += _result;\n  }\n}\n\nfunction mergeMappings(state, destination, source, overridableKeys) {\n  var sourceKeys, key, index, quantity;\n\n  if (!common.isObject(source)) {\n    throwError(state, 'cannot merge mappings; the provided source object is unacceptable');\n  }\n\n  sourceKeys = Object.keys(source);\n\n  for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n    key = sourceKeys[index];\n\n    if (!_hasOwnProperty.call(destination, key)) {\n      destination[key] = source[key];\n      overridableKeys[key] = true;\n    }\n  }\n}\n\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) {\n  var index, quantity;\n\n  keyNode = String(keyNode);\n\n  if (_result === null) {\n    _result = {};\n  }\n\n  if (keyTag === 'tag:yaml.org,2002:merge') {\n    if (Array.isArray(valueNode)) {\n      for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n        mergeMappings(state, _result, valueNode[index], overridableKeys);\n      }\n    } else {\n      mergeMappings(state, _result, valueNode, overridableKeys);\n    }\n  } else {\n    if (!state.json &&\n        !_hasOwnProperty.call(overridableKeys, keyNode) &&\n        _hasOwnProperty.call(_result, keyNode)) {\n      state.line = startLine || state.line;\n      state.position = startPos || state.position;\n      throwError(state, 'duplicated mapping key');\n    }\n    _result[keyNode] = valueNode;\n    delete overridableKeys[keyNode];\n  }\n\n  return _result;\n}\n\nfunction readLineBreak(state) {\n  var ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch === 0x0A/* LF */) {\n    state.position++;\n  } else if (ch === 0x0D/* CR */) {\n    state.position++;\n    if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {\n      state.position++;\n    }\n  } else {\n    throwError(state, 'a line break is expected');\n  }\n\n  state.line += 1;\n  state.lineStart = state.position;\n}\n\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n  var lineBreaks = 0,\n      ch = state.input.charCodeAt(state.position);\n\n  while (ch !== 0) {\n    while (is_WHITE_SPACE(ch)) {\n      ch = state.input.charCodeAt(++state.position);\n    }\n\n    if (allowComments && ch === 0x23/* # */) {\n      do {\n        ch = state.input.charCodeAt(++state.position);\n      } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);\n    }\n\n    if (is_EOL(ch)) {\n      readLineBreak(state);\n\n      ch = state.input.charCodeAt(state.position);\n      lineBreaks++;\n      state.lineIndent = 0;\n\n      while (ch === 0x20/* Space */) {\n        state.lineIndent++;\n        ch = state.input.charCodeAt(++state.position);\n      }\n    } else {\n      break;\n    }\n  }\n\n  if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n    throwWarning(state, 'deficient indentation');\n  }\n\n  return lineBreaks;\n}\n\nfunction testDocumentSeparator(state) {\n  var _position = state.position,\n      ch;\n\n  ch = state.input.charCodeAt(_position);\n  if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n      ch === state.input.charCodeAt(_position + 1) &&\n      ch === state.input.charCodeAt(_position + 2)) {\n\n    _position += 3;\n\n    ch = state.input.charCodeAt(_position);\n\n    if (ch === 0 || is_WS_OR_EOL(ch)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction writeFoldedLines(state, count) {\n  if (count === 1) {\n    state.result += ' ';\n  } else if (count > 1) {\n    state.result += common.repeat('\\n', count - 1);\n  }\n}\n\n\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n  var preceding,\n      following,\n      captureStart,\n      captureEnd,\n      hasPendingContent,\n      _line,\n      _lineStart,\n      _lineIndent,\n      _kind = state.kind,\n      _result = state.result,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (is_WS_OR_EOL(ch)      ||\n      is_FLOW_INDICATOR(ch) ||\n      ch === 0x23/* # */    ||\n      ch === 0x26/* & */    ||\n      ch === 0x2A/* * */    ||\n      ch === 0x21/* ! */    ||\n      ch === 0x7C/* | */    ||\n      ch === 0x3E/* > */    ||\n      ch === 0x27/* ' */    ||\n      ch === 0x22/* \" */    ||\n      ch === 0x25/* % */    ||\n      ch === 0x40/* @ */    ||\n      ch === 0x60/* ` */) {\n    return false;\n  }\n\n  if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n    following = state.input.charCodeAt(state.position + 1);\n\n    if (is_WS_OR_EOL(following) ||\n        withinFlowCollection && is_FLOW_INDICATOR(following)) {\n      return false;\n    }\n  }\n\n  state.kind = 'scalar';\n  state.result = '';\n  captureStart = captureEnd = state.position;\n  hasPendingContent = false;\n\n  while (ch !== 0) {\n    if (ch === 0x3A/* : */) {\n      following = state.input.charCodeAt(state.position + 1);\n\n      if (is_WS_OR_EOL(following) ||\n          withinFlowCollection && is_FLOW_INDICATOR(following)) {\n        break;\n      }\n\n    } else if (ch === 0x23/* # */) {\n      preceding = state.input.charCodeAt(state.position - 1);\n\n      if (is_WS_OR_EOL(preceding)) {\n        break;\n      }\n\n    } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||\n               withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n      break;\n\n    } else if (is_EOL(ch)) {\n      _line = state.line;\n      _lineStart = state.lineStart;\n      _lineIndent = state.lineIndent;\n      skipSeparationSpace(state, false, -1);\n\n      if (state.lineIndent >= nodeIndent) {\n        hasPendingContent = true;\n        ch = state.input.charCodeAt(state.position);\n        continue;\n      } else {\n        state.position = captureEnd;\n        state.line = _line;\n        state.lineStart = _lineStart;\n        state.lineIndent = _lineIndent;\n        break;\n      }\n    }\n\n    if (hasPendingContent) {\n      captureSegment(state, captureStart, captureEnd, false);\n      writeFoldedLines(state, state.line - _line);\n      captureStart = captureEnd = state.position;\n      hasPendingContent = false;\n    }\n\n    if (!is_WHITE_SPACE(ch)) {\n      captureEnd = state.position + 1;\n    }\n\n    ch = state.input.charCodeAt(++state.position);\n  }\n\n  captureSegment(state, captureStart, captureEnd, false);\n\n  if (state.result) {\n    return true;\n  }\n\n  state.kind = _kind;\n  state.result = _result;\n  return false;\n}\n\nfunction readSingleQuotedScalar(state, nodeIndent) {\n  var ch,\n      captureStart, captureEnd;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch !== 0x27/* ' */) {\n    return false;\n  }\n\n  state.kind = 'scalar';\n  state.result = '';\n  state.position++;\n  captureStart = captureEnd = state.position;\n\n  while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n    if (ch === 0x27/* ' */) {\n      captureSegment(state, captureStart, state.position, true);\n      ch = state.input.charCodeAt(++state.position);\n\n      if (ch === 0x27/* ' */) {\n        captureStart = state.position;\n        state.position++;\n        captureEnd = state.position;\n      } else {\n        return true;\n      }\n\n    } else if (is_EOL(ch)) {\n      captureSegment(state, captureStart, captureEnd, true);\n      writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n      captureStart = captureEnd = state.position;\n\n    } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n      throwError(state, 'unexpected end of the document within a single quoted scalar');\n\n    } else {\n      state.position++;\n      captureEnd = state.position;\n    }\n  }\n\n  throwError(state, 'unexpected end of the stream within a single quoted scalar');\n}\n\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n  var captureStart,\n      captureEnd,\n      hexLength,\n      hexResult,\n      tmp,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch !== 0x22/* \" */) {\n    return false;\n  }\n\n  state.kind = 'scalar';\n  state.result = '';\n  state.position++;\n  captureStart = captureEnd = state.position;\n\n  while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n    if (ch === 0x22/* \" */) {\n      captureSegment(state, captureStart, state.position, true);\n      state.position++;\n      return true;\n\n    } else if (ch === 0x5C/* \\ */) {\n      captureSegment(state, captureStart, state.position, true);\n      ch = state.input.charCodeAt(++state.position);\n\n      if (is_EOL(ch)) {\n        skipSeparationSpace(state, false, nodeIndent);\n      } else if (ch < 256 && simpleEscapeCheck[ch]) {\n        state.result += simpleEscapeMap[ch];\n        state.position++;\n\n      } else if ((tmp = escapedHexLen(ch)) > 0) {\n        hexLength = tmp;\n        hexResult = 0;\n\n        for (; hexLength > 0; hexLength--) {\n          ch = state.input.charCodeAt(++state.position);\n\n          if ((tmp = fromHexCode(ch)) >= 0) {\n            hexResult = (hexResult << 4) + tmp;\n\n          } else {\n            throwError(state, 'expected hexadecimal character');\n          }\n        }\n\n        state.result += charFromCodepoint(hexResult);\n\n        state.position++;\n\n      } else {\n        throwError(state, 'unknown escape sequence');\n      }\n\n      captureStart = captureEnd = state.position;\n\n    } else if (is_EOL(ch)) {\n      captureSegment(state, captureStart, captureEnd, true);\n      writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n      captureStart = captureEnd = state.position;\n\n    } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n      throwError(state, 'unexpected end of the document within a double quoted scalar');\n\n    } else {\n      state.position++;\n      captureEnd = state.position;\n    }\n  }\n\n  throwError(state, 'unexpected end of the stream within a double quoted scalar');\n}\n\nfunction readFlowCollection(state, nodeIndent) {\n  var readNext = true,\n      _line,\n      _tag     = state.tag,\n      _result,\n      _anchor  = state.anchor,\n      following,\n      terminator,\n      isPair,\n      isExplicitPair,\n      isMapping,\n      overridableKeys = {},\n      keyNode,\n      keyTag,\n      valueNode,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch === 0x5B/* [ */) {\n    terminator = 0x5D;\n    isMapping = false;\n    _result = [];\n  } else if (ch === 0x7B/* { */) {\n    terminator = 0x7D;\n    isMapping = true;\n    _result = {};\n  } else {\n    return false;\n  }\n\n  if (state.anchor !== null) {\n    state.anchorMap[state.anchor] = _result;\n  }\n\n  ch = state.input.charCodeAt(++state.position);\n\n  while (ch !== 0) {\n    skipSeparationSpace(state, true, nodeIndent);\n\n    ch = state.input.charCodeAt(state.position);\n\n    if (ch === terminator) {\n      state.position++;\n      state.tag = _tag;\n      state.anchor = _anchor;\n      state.kind = isMapping ? 'mapping' : 'sequence';\n      state.result = _result;\n      return true;\n    } else if (!readNext) {\n      throwError(state, 'missed comma between flow collection entries');\n    }\n\n    keyTag = keyNode = valueNode = null;\n    isPair = isExplicitPair = false;\n\n    if (ch === 0x3F/* ? */) {\n      following = state.input.charCodeAt(state.position + 1);\n\n      if (is_WS_OR_EOL(following)) {\n        isPair = isExplicitPair = true;\n        state.position++;\n        skipSeparationSpace(state, true, nodeIndent);\n      }\n    }\n\n    _line = state.line;\n    composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n    keyTag = state.tag;\n    keyNode = state.result;\n    skipSeparationSpace(state, true, nodeIndent);\n\n    ch = state.input.charCodeAt(state.position);\n\n    if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {\n      isPair = true;\n      ch = state.input.charCodeAt(++state.position);\n      skipSeparationSpace(state, true, nodeIndent);\n      composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n      valueNode = state.result;\n    }\n\n    if (isMapping) {\n      storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode);\n    } else if (isPair) {\n      _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode));\n    } else {\n      _result.push(keyNode);\n    }\n\n    skipSeparationSpace(state, true, nodeIndent);\n\n    ch = state.input.charCodeAt(state.position);\n\n    if (ch === 0x2C/* , */) {\n      readNext = true;\n      ch = state.input.charCodeAt(++state.position);\n    } else {\n      readNext = false;\n    }\n  }\n\n  throwError(state, 'unexpected end of the stream within a flow collection');\n}\n\nfunction readBlockScalar(state, nodeIndent) {\n  var captureStart,\n      folding,\n      chomping       = CHOMPING_CLIP,\n      didReadContent = false,\n      detectedIndent = false,\n      textIndent     = nodeIndent,\n      emptyLines     = 0,\n      atMoreIndented = false,\n      tmp,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch === 0x7C/* | */) {\n    folding = false;\n  } else if (ch === 0x3E/* > */) {\n    folding = true;\n  } else {\n    return false;\n  }\n\n  state.kind = 'scalar';\n  state.result = '';\n\n  while (ch !== 0) {\n    ch = state.input.charCodeAt(++state.position);\n\n    if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n      if (CHOMPING_CLIP === chomping) {\n        chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;\n      } else {\n        throwError(state, 'repeat of a chomping mode identifier');\n      }\n\n    } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n      if (tmp === 0) {\n        throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');\n      } else if (!detectedIndent) {\n        textIndent = nodeIndent + tmp - 1;\n        detectedIndent = true;\n      } else {\n        throwError(state, 'repeat of an indentation width identifier');\n      }\n\n    } else {\n      break;\n    }\n  }\n\n  if (is_WHITE_SPACE(ch)) {\n    do { ch = state.input.charCodeAt(++state.position); }\n    while (is_WHITE_SPACE(ch));\n\n    if (ch === 0x23/* # */) {\n      do { ch = state.input.charCodeAt(++state.position); }\n      while (!is_EOL(ch) && (ch !== 0));\n    }\n  }\n\n  while (ch !== 0) {\n    readLineBreak(state);\n    state.lineIndent = 0;\n\n    ch = state.input.charCodeAt(state.position);\n\n    while ((!detectedIndent || state.lineIndent < textIndent) &&\n           (ch === 0x20/* Space */)) {\n      state.lineIndent++;\n      ch = state.input.charCodeAt(++state.position);\n    }\n\n    if (!detectedIndent && state.lineIndent > textIndent) {\n      textIndent = state.lineIndent;\n    }\n\n    if (is_EOL(ch)) {\n      emptyLines++;\n      continue;\n    }\n    if (state.lineIndent < textIndent) {\n      if (chomping === CHOMPING_KEEP) {\n        state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n      } else if (chomping === CHOMPING_CLIP) {\n        if (didReadContent) { // i.e. only if the scalar is not empty.\n          state.result += '\\n';\n        }\n      }\n      break;\n    }\n    if (folding) {\n      if (is_WHITE_SPACE(ch)) {\n        atMoreIndented = true;\n        state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n      } else if (atMoreIndented) {\n        atMoreIndented = false;\n        state.result += common.repeat('\\n', emptyLines + 1);\n      } else if (emptyLines === 0) {\n        if (didReadContent) { // i.e. only if we have already read some scalar content.\n          state.result += ' ';\n        }\n      } else {\n        state.result += common.repeat('\\n', emptyLines);\n      }\n    } else {\n      state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n    }\n\n    didReadContent = true;\n    detectedIndent = true;\n    emptyLines = 0;\n    captureStart = state.position;\n\n    while (!is_EOL(ch) && (ch !== 0)) {\n      ch = state.input.charCodeAt(++state.position);\n    }\n\n    captureSegment(state, captureStart, state.position, false);\n  }\n\n  return true;\n}\n\nfunction readBlockSequence(state, nodeIndent) {\n  var _line,\n      _tag      = state.tag,\n      _anchor   = state.anchor,\n      _result   = [],\n      following,\n      detected  = false,\n      ch;\n\n  if (state.anchor !== null) {\n    state.anchorMap[state.anchor] = _result;\n  }\n\n  ch = state.input.charCodeAt(state.position);\n\n  while (ch !== 0) {\n\n    if (ch !== 0x2D/* - */) {\n      break;\n    }\n\n    following = state.input.charCodeAt(state.position + 1);\n\n    if (!is_WS_OR_EOL(following)) {\n      break;\n    }\n\n    detected = true;\n    state.position++;\n\n    if (skipSeparationSpace(state, true, -1)) {\n      if (state.lineIndent <= nodeIndent) {\n        _result.push(null);\n        ch = state.input.charCodeAt(state.position);\n        continue;\n      }\n    }\n\n    _line = state.line;\n    composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n    _result.push(state.result);\n    skipSeparationSpace(state, true, -1);\n\n    ch = state.input.charCodeAt(state.position);\n\n    if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n      throwError(state, 'bad indentation of a sequence entry');\n    } else if (state.lineIndent < nodeIndent) {\n      break;\n    }\n  }\n\n  if (detected) {\n    state.tag = _tag;\n    state.anchor = _anchor;\n    state.kind = 'sequence';\n    state.result = _result;\n    return true;\n  }\n  return false;\n}\n\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n  var following,\n      allowCompact,\n      _line,\n      _pos,\n      _tag          = state.tag,\n      _anchor       = state.anchor,\n      _result       = {},\n      overridableKeys = {},\n      keyTag        = null,\n      keyNode       = null,\n      valueNode     = null,\n      atExplicitKey = false,\n      detected      = false,\n      ch;\n\n  if (state.anchor !== null) {\n    state.anchorMap[state.anchor] = _result;\n  }\n\n  ch = state.input.charCodeAt(state.position);\n\n  while (ch !== 0) {\n    following = state.input.charCodeAt(state.position + 1);\n    _line = state.line; // Save the current line.\n    _pos = state.position;\n    if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {\n\n      if (ch === 0x3F/* ? */) {\n        if (atExplicitKey) {\n          storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);\n          keyTag = keyNode = valueNode = null;\n        }\n\n        detected = true;\n        atExplicitKey = true;\n        allowCompact = true;\n\n      } else if (atExplicitKey) {\n        atExplicitKey = false;\n        allowCompact = true;\n\n      } else {\n        throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');\n      }\n\n      state.position += 1;\n      ch = following;\n    } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n\n      if (state.line === _line) {\n        ch = state.input.charCodeAt(state.position);\n\n        while (is_WHITE_SPACE(ch)) {\n          ch = state.input.charCodeAt(++state.position);\n        }\n\n        if (ch === 0x3A/* : */) {\n          ch = state.input.charCodeAt(++state.position);\n\n          if (!is_WS_OR_EOL(ch)) {\n            throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');\n          }\n\n          if (atExplicitKey) {\n            storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);\n            keyTag = keyNode = valueNode = null;\n          }\n\n          detected = true;\n          atExplicitKey = false;\n          allowCompact = false;\n          keyTag = state.tag;\n          keyNode = state.result;\n\n        } else if (detected) {\n          throwError(state, 'can not read an implicit mapping pair; a colon is missed');\n\n        } else {\n          state.tag = _tag;\n          state.anchor = _anchor;\n          return true; // Keep the result of `composeNode`.\n        }\n\n      } else if (detected) {\n        throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');\n\n      } else {\n        state.tag = _tag;\n        state.anchor = _anchor;\n        return true; // Keep the result of `composeNode`.\n      }\n\n    } else {\n      break; // Reading is done. Go to the epilogue.\n    }\n    if (state.line === _line || state.lineIndent > nodeIndent) {\n      if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n        if (atExplicitKey) {\n          keyNode = state.result;\n        } else {\n          valueNode = state.result;\n        }\n      }\n\n      if (!atExplicitKey) {\n        storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos);\n        keyTag = keyNode = valueNode = null;\n      }\n\n      skipSeparationSpace(state, true, -1);\n      ch = state.input.charCodeAt(state.position);\n    }\n\n    if (state.lineIndent > nodeIndent && (ch !== 0)) {\n      throwError(state, 'bad indentation of a mapping entry');\n    } else if (state.lineIndent < nodeIndent) {\n      break;\n    }\n  }\n  if (atExplicitKey) {\n    storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);\n  }\n  if (detected) {\n    state.tag = _tag;\n    state.anchor = _anchor;\n    state.kind = 'mapping';\n    state.result = _result;\n  }\n\n  return detected;\n}\n\nfunction readTagProperty(state) {\n  var _position,\n      isVerbatim = false,\n      isNamed    = false,\n      tagHandle,\n      tagName,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch !== 0x21/* ! */) return false;\n\n  if (state.tag !== null) {\n    throwError(state, 'duplication of a tag property');\n  }\n\n  ch = state.input.charCodeAt(++state.position);\n\n  if (ch === 0x3C/* < */) {\n    isVerbatim = true;\n    ch = state.input.charCodeAt(++state.position);\n\n  } else if (ch === 0x21/* ! */) {\n    isNamed = true;\n    tagHandle = '!!';\n    ch = state.input.charCodeAt(++state.position);\n\n  } else {\n    tagHandle = '!';\n  }\n\n  _position = state.position;\n\n  if (isVerbatim) {\n    do { ch = state.input.charCodeAt(++state.position); }\n    while (ch !== 0 && ch !== 0x3E/* > */);\n\n    if (state.position < state.length) {\n      tagName = state.input.slice(_position, state.position);\n      ch = state.input.charCodeAt(++state.position);\n    } else {\n      throwError(state, 'unexpected end of the stream within a verbatim tag');\n    }\n  } else {\n    while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n\n      if (ch === 0x21/* ! */) {\n        if (!isNamed) {\n          tagHandle = state.input.slice(_position - 1, state.position + 1);\n\n          if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n            throwError(state, 'named tag handle cannot contain such characters');\n          }\n\n          isNamed = true;\n          _position = state.position + 1;\n        } else {\n          throwError(state, 'tag suffix cannot contain exclamation marks');\n        }\n      }\n\n      ch = state.input.charCodeAt(++state.position);\n    }\n\n    tagName = state.input.slice(_position, state.position);\n\n    if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n      throwError(state, 'tag suffix cannot contain flow indicator characters');\n    }\n  }\n\n  if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n    throwError(state, 'tag name cannot contain such characters: ' + tagName);\n  }\n\n  if (isVerbatim) {\n    state.tag = tagName;\n\n  } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) {\n    state.tag = state.tagMap[tagHandle] + tagName;\n\n  } else if (tagHandle === '!') {\n    state.tag = '!' + tagName;\n\n  } else if (tagHandle === '!!') {\n    state.tag = 'tag:yaml.org,2002:' + tagName;\n\n  } else {\n    throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n  }\n\n  return true;\n}\n\nfunction readAnchorProperty(state) {\n  var _position,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch !== 0x26/* & */) return false;\n\n  if (state.anchor !== null) {\n    throwError(state, 'duplication of an anchor property');\n  }\n\n  ch = state.input.charCodeAt(++state.position);\n  _position = state.position;\n\n  while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n    ch = state.input.charCodeAt(++state.position);\n  }\n\n  if (state.position === _position) {\n    throwError(state, 'name of an anchor node must contain at least one character');\n  }\n\n  state.anchor = state.input.slice(_position, state.position);\n  return true;\n}\n\nfunction readAlias(state) {\n  var _position, alias,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch !== 0x2A/* * */) return false;\n\n  ch = state.input.charCodeAt(++state.position);\n  _position = state.position;\n\n  while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n    ch = state.input.charCodeAt(++state.position);\n  }\n\n  if (state.position === _position) {\n    throwError(state, 'name of an alias node must contain at least one character');\n  }\n\n  alias = state.input.slice(_position, state.position);\n\n  if (!state.anchorMap.hasOwnProperty(alias)) {\n    throwError(state, 'unidentified alias \"' + alias + '\"');\n  }\n\n  state.result = state.anchorMap[alias];\n  skipSeparationSpace(state, true, -1);\n  return true;\n}\n\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n  var allowBlockStyles,\n      allowBlockScalars,\n      allowBlockCollections,\n      indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent\n      atNewLine  = false,\n      hasContent = false,\n      typeIndex,\n      typeQuantity,\n      type,\n      flowIndent,\n      blockIndent;\n\n  if (state.listener !== null) {\n    state.listener('open', state);\n  }\n\n  state.tag    = null;\n  state.anchor = null;\n  state.kind   = null;\n  state.result = null;\n\n  allowBlockStyles = allowBlockScalars = allowBlockCollections =\n    CONTEXT_BLOCK_OUT === nodeContext ||\n    CONTEXT_BLOCK_IN  === nodeContext;\n\n  if (allowToSeek) {\n    if (skipSeparationSpace(state, true, -1)) {\n      atNewLine = true;\n\n      if (state.lineIndent > parentIndent) {\n        indentStatus = 1;\n      } else if (state.lineIndent === parentIndent) {\n        indentStatus = 0;\n      } else if (state.lineIndent < parentIndent) {\n        indentStatus = -1;\n      }\n    }\n  }\n\n  if (indentStatus === 1) {\n    while (readTagProperty(state) || readAnchorProperty(state)) {\n      if (skipSeparationSpace(state, true, -1)) {\n        atNewLine = true;\n        allowBlockCollections = allowBlockStyles;\n\n        if (state.lineIndent > parentIndent) {\n          indentStatus = 1;\n        } else if (state.lineIndent === parentIndent) {\n          indentStatus = 0;\n        } else if (state.lineIndent < parentIndent) {\n          indentStatus = -1;\n        }\n      } else {\n        allowBlockCollections = false;\n      }\n    }\n  }\n\n  if (allowBlockCollections) {\n    allowBlockCollections = atNewLine || allowCompact;\n  }\n\n  if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n    if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n      flowIndent = parentIndent;\n    } else {\n      flowIndent = parentIndent + 1;\n    }\n\n    blockIndent = state.position - state.lineStart;\n\n    if (indentStatus === 1) {\n      if (allowBlockCollections &&\n          (readBlockSequence(state, blockIndent) ||\n           readBlockMapping(state, blockIndent, flowIndent)) ||\n          readFlowCollection(state, flowIndent)) {\n        hasContent = true;\n      } else {\n        if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||\n            readSingleQuotedScalar(state, flowIndent) ||\n            readDoubleQuotedScalar(state, flowIndent)) {\n          hasContent = true;\n\n        } else if (readAlias(state)) {\n          hasContent = true;\n\n          if (state.tag !== null || state.anchor !== null) {\n            throwError(state, 'alias node should not have any properties');\n          }\n\n        } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n          hasContent = true;\n\n          if (state.tag === null) {\n            state.tag = '?';\n          }\n        }\n\n        if (state.anchor !== null) {\n          state.anchorMap[state.anchor] = state.result;\n        }\n      }\n    } else if (indentStatus === 0) {\n      hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n    }\n  }\n\n  if (state.tag !== null && state.tag !== '!') {\n    if (state.tag === '?') {\n      for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n        type = state.implicitTypes[typeIndex];\n\n        if (type.resolve(state.result)) { // `state.result` updated in resolver if matched\n          state.result = type.construct(state.result);\n          state.tag = type.tag;\n          if (state.anchor !== null) {\n            state.anchorMap[state.anchor] = state.result;\n          }\n          break;\n        }\n      }\n    } else if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) {\n      type = state.typeMap[state.kind || 'fallback'][state.tag];\n\n      if (state.result !== null && type.kind !== state.kind) {\n        throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n      }\n\n      if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched\n        throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');\n      } else {\n        state.result = type.construct(state.result);\n        if (state.anchor !== null) {\n          state.anchorMap[state.anchor] = state.result;\n        }\n      }\n    } else {\n      throwError(state, 'unknown tag !<' + state.tag + '>');\n    }\n  }\n\n  if (state.listener !== null) {\n    state.listener('close', state);\n  }\n  return state.tag !== null ||  state.anchor !== null || hasContent;\n}\n\nfunction readDocument(state) {\n  var documentStart = state.position,\n      _position,\n      directiveName,\n      directiveArgs,\n      hasDirectives = false,\n      ch;\n\n  state.version = null;\n  state.checkLineBreaks = state.legacy;\n  state.tagMap = {};\n  state.anchorMap = {};\n\n  while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n    skipSeparationSpace(state, true, -1);\n\n    ch = state.input.charCodeAt(state.position);\n\n    if (state.lineIndent > 0 || ch !== 0x25/* % */) {\n      break;\n    }\n\n    hasDirectives = true;\n    ch = state.input.charCodeAt(++state.position);\n    _position = state.position;\n\n    while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n      ch = state.input.charCodeAt(++state.position);\n    }\n\n    directiveName = state.input.slice(_position, state.position);\n    directiveArgs = [];\n\n    if (directiveName.length < 1) {\n      throwError(state, 'directive name must not be less than one character in length');\n    }\n\n    while (ch !== 0) {\n      while (is_WHITE_SPACE(ch)) {\n        ch = state.input.charCodeAt(++state.position);\n      }\n\n      if (ch === 0x23/* # */) {\n        do { ch = state.input.charCodeAt(++state.position); }\n        while (ch !== 0 && !is_EOL(ch));\n        break;\n      }\n\n      if (is_EOL(ch)) break;\n\n      _position = state.position;\n\n      while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n        ch = state.input.charCodeAt(++state.position);\n      }\n\n      directiveArgs.push(state.input.slice(_position, state.position));\n    }\n\n    if (ch !== 0) readLineBreak(state);\n\n    if (_hasOwnProperty.call(directiveHandlers, directiveName)) {\n      directiveHandlers[directiveName](state, directiveName, directiveArgs);\n    } else {\n      throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n    }\n  }\n\n  skipSeparationSpace(state, true, -1);\n\n  if (state.lineIndent === 0 &&\n      state.input.charCodeAt(state.position)     === 0x2D/* - */ &&\n      state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n      state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {\n    state.position += 3;\n    skipSeparationSpace(state, true, -1);\n\n  } else if (hasDirectives) {\n    throwError(state, 'directives end mark is expected');\n  }\n\n  composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n  skipSeparationSpace(state, true, -1);\n\n  if (state.checkLineBreaks &&\n      PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n    throwWarning(state, 'non-ASCII line breaks are interpreted as content');\n  }\n\n  state.documents.push(state.result);\n\n  if (state.position === state.lineStart && testDocumentSeparator(state)) {\n\n    if (state.input.charCodeAt(state.position) === 0x2E/* . */) {\n      state.position += 3;\n      skipSeparationSpace(state, true, -1);\n    }\n    return;\n  }\n\n  if (state.position < (state.length - 1)) {\n    throwError(state, 'end of the stream or a document separator is expected');\n  } else {\n    return;\n  }\n}\n\n\nfunction loadDocuments(input, options) {\n  input = String(input);\n  options = options || {};\n\n  if (input.length !== 0) {\n    if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&\n        input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {\n      input += '\\n';\n    }\n    if (input.charCodeAt(0) === 0xFEFF) {\n      input = input.slice(1);\n    }\n  }\n\n  var state = new State(input, options);\n  state.input += '\\0';\n\n  while (state.input.charCodeAt(state.position) === 0x20/* Space */) {\n    state.lineIndent += 1;\n    state.position += 1;\n  }\n\n  while (state.position < (state.length - 1)) {\n    readDocument(state);\n  }\n\n  return state.documents;\n}\n\n\nfunction loadAll(input, iterator, options) {\n  var documents = loadDocuments(input, options), index, length;\n\n  if (typeof iterator !== 'function') {\n    return documents;\n  }\n\n  for (index = 0, length = documents.length; index < length; index += 1) {\n    iterator(documents[index]);\n  }\n}\n\n\nfunction load(input, options) {\n  var documents = loadDocuments(input, options);\n\n  if (documents.length === 0) {\n    return undefined;\n  } else if (documents.length === 1) {\n    return documents[0];\n  }\n  throw new YAMLException('expected a single document in the stream, but found more');\n}\n\n\nfunction safeLoadAll(input, output, options) {\n  if (typeof output === 'function') {\n    loadAll(input, output, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n  } else {\n    return loadAll(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n  }\n}\n\n\nfunction safeLoad(input, options) {\n  return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n}\n\n\nmodule.exports.loadAll     = loadAll;\nmodule.exports.load        = load;\nmodule.exports.safeLoadAll = safeLoadAll;\nmodule.exports.safeLoad    = safeLoad;\n\n},{\"./common\":5,\"./exception\":7,\"./mark\":9,\"./schema/default_full\":12,\"./schema/default_safe\":13}],9:[function(require,module,exports){\n'use strict';\n\n\nvar common = require('./common');\n\n\nfunction Mark(name, buffer, position, line, column) {\n  this.name     = name;\n  this.buffer   = buffer;\n  this.position = position;\n  this.line     = line;\n  this.column   = column;\n}\n\n\nMark.prototype.getSnippet = function getSnippet(indent, maxLength) {\n  var head, start, tail, end, snippet;\n\n  if (!this.buffer) return null;\n\n  indent = indent || 4;\n  maxLength = maxLength || 75;\n\n  head = '';\n  start = this.position;\n\n  while (start > 0 && '\\x00\\r\\n\\x85\\u2028\\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) {\n    start -= 1;\n    if (this.position - start > (maxLength / 2 - 1)) {\n      head = ' ... ';\n      start += 5;\n      break;\n    }\n  }\n\n  tail = '';\n  end = this.position;\n\n  while (end < this.buffer.length && '\\x00\\r\\n\\x85\\u2028\\u2029'.indexOf(this.buffer.charAt(end)) === -1) {\n    end += 1;\n    if (end - this.position > (maxLength / 2 - 1)) {\n      tail = ' ... ';\n      end -= 5;\n      break;\n    }\n  }\n\n  snippet = this.buffer.slice(start, end);\n\n  return common.repeat(' ', indent) + head + snippet + tail + '\\n' +\n         common.repeat(' ', indent + this.position - start + head.length) + '^';\n};\n\n\nMark.prototype.toString = function toString(compact) {\n  var snippet, where = '';\n\n  if (this.name) {\n    where += 'in \"' + this.name + '\" ';\n  }\n\n  where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1);\n\n  if (!compact) {\n    snippet = this.getSnippet();\n\n    if (snippet) {\n      where += ':\\n' + snippet;\n    }\n  }\n\n  return where;\n};\n\n\nmodule.exports = Mark;\n\n},{\"./common\":5}],10:[function(require,module,exports){\n'use strict';\n\nvar common        = require('./common');\nvar YAMLException = require('./exception');\nvar Type          = require('./type');\n\n\nfunction compileList(schema, name, result) {\n  var exclude = [];\n\n  schema.include.forEach(function (includedSchema) {\n    result = compileList(includedSchema, name, result);\n  });\n\n  schema[name].forEach(function (currentType) {\n    result.forEach(function (previousType, previousIndex) {\n      if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) {\n        exclude.push(previousIndex);\n      }\n    });\n\n    result.push(currentType);\n  });\n\n  return result.filter(function (type, index) {\n    return exclude.indexOf(index) === -1;\n  });\n}\n\n\nfunction compileMap(/* lists... */) {\n  var result = {\n        scalar: {},\n        sequence: {},\n        mapping: {},\n        fallback: {}\n      }, index, length;\n\n  function collectType(type) {\n    result[type.kind][type.tag] = result['fallback'][type.tag] = type;\n  }\n\n  for (index = 0, length = arguments.length; index < length; index += 1) {\n    arguments[index].forEach(collectType);\n  }\n  return result;\n}\n\n\nfunction Schema(definition) {\n  this.include  = definition.include  || [];\n  this.implicit = definition.implicit || [];\n  this.explicit = definition.explicit || [];\n\n  this.implicit.forEach(function (type) {\n    if (type.loadKind && type.loadKind !== 'scalar') {\n      throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');\n    }\n  });\n\n  this.compiledImplicit = compileList(this, 'implicit', []);\n  this.compiledExplicit = compileList(this, 'explicit', []);\n  this.compiledTypeMap  = compileMap(this.compiledImplicit, this.compiledExplicit);\n}\n\n\nSchema.DEFAULT = null;\n\n\nSchema.create = function createSchema() {\n  var schemas, types;\n\n  switch (arguments.length) {\n    case 1:\n      schemas = Schema.DEFAULT;\n      types = arguments[0];\n      break;\n\n    case 2:\n      schemas = arguments[0];\n      types = arguments[1];\n      break;\n\n    default:\n      throw new YAMLException('Wrong number of arguments for Schema.create function');\n  }\n\n  schemas = common.toArray(schemas);\n  types = common.toArray(types);\n\n  if (!schemas.every(function (schema) { return schema instanceof Schema; })) {\n    throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.');\n  }\n\n  if (!types.every(function (type) { return type instanceof Type; })) {\n    throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n  }\n\n  return new Schema({\n    include: schemas,\n    explicit: types\n  });\n};\n\n\nmodule.exports = Schema;\n\n},{\"./common\":5,\"./exception\":7,\"./type\":16}],11:[function(require,module,exports){\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n  include: [\n    require('./json')\n  ]\n});\n\n},{\"../schema\":10,\"./json\":15}],12:[function(require,module,exports){\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = Schema.DEFAULT = new Schema({\n  include: [\n    require('./default_safe')\n  ],\n  explicit: [\n    require('../type/js/undefined'),\n    require('../type/js/regexp'),\n    require('../type/js/function')\n  ]\n});\n\n},{\"../schema\":10,\"../type/js/function\":21,\"../type/js/regexp\":22,\"../type/js/undefined\":23,\"./default_safe\":13}],13:[function(require,module,exports){\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n  include: [\n    require('./core')\n  ],\n  implicit: [\n    require('../type/timestamp'),\n    require('../type/merge')\n  ],\n  explicit: [\n    require('../type/binary'),\n    require('../type/omap'),\n    require('../type/pairs'),\n    require('../type/set')\n  ]\n});\n\n},{\"../schema\":10,\"../type/binary\":17,\"../type/merge\":25,\"../type/omap\":27,\"../type/pairs\":28,\"../type/set\":30,\"../type/timestamp\":32,\"./core\":11}],14:[function(require,module,exports){\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n  explicit: [\n    require('../type/str'),\n    require('../type/seq'),\n    require('../type/map')\n  ]\n});\n\n},{\"../schema\":10,\"../type/map\":24,\"../type/seq\":29,\"../type/str\":31}],15:[function(require,module,exports){\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n  include: [\n    require('./failsafe')\n  ],\n  implicit: [\n    require('../type/null'),\n    require('../type/bool'),\n    require('../type/int'),\n    require('../type/float')\n  ]\n});\n\n},{\"../schema\":10,\"../type/bool\":18,\"../type/float\":19,\"../type/int\":20,\"../type/null\":26,\"./failsafe\":14}],16:[function(require,module,exports){\n'use strict';\n\nvar YAMLException = require('./exception');\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n  'kind',\n  'resolve',\n  'construct',\n  'instanceOf',\n  'predicate',\n  'represent',\n  'defaultStyle',\n  'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n  'scalar',\n  'sequence',\n  'mapping'\n];\n\nfunction compileStyleAliases(map) {\n  var result = {};\n\n  if (map !== null) {\n    Object.keys(map).forEach(function (style) {\n      map[style].forEach(function (alias) {\n        result[String(alias)] = style;\n      });\n    });\n  }\n\n  return result;\n}\n\nfunction Type(tag, options) {\n  options = options || {};\n\n  Object.keys(options).forEach(function (name) {\n    if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n      throw new YAMLException('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n    }\n  });\n  this.tag          = tag;\n  this.kind         = options['kind']         || null;\n  this.resolve      = options['resolve']      || function () { return true; };\n  this.construct    = options['construct']    || function (data) { return data; };\n  this.instanceOf   = options['instanceOf']   || null;\n  this.predicate    = options['predicate']    || null;\n  this.represent    = options['represent']    || null;\n  this.defaultStyle = options['defaultStyle'] || null;\n  this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n  if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n    throw new YAMLException('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n  }\n}\n\nmodule.exports = Type;\n\n},{\"./exception\":7}],17:[function(require,module,exports){\n'use strict';\n\nvar NodeBuffer;\n\ntry {\n  var _require = require;\n  NodeBuffer = _require('buffer').Buffer;\n} catch (__) {}\n\nvar Type       = require('../type');\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';\n\n\nfunction resolveYamlBinary(data) {\n  if (data === null) return false;\n\n  var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n  for (idx = 0; idx < max; idx++) {\n    code = map.indexOf(data.charAt(idx));\n    if (code > 64) continue;\n    if (code < 0) return false;\n\n    bitlen += 6;\n  }\n  return (bitlen % 8) === 0;\n}\n\nfunction constructYamlBinary(data) {\n  var idx, tailbits,\n      input = data.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n      max = input.length,\n      map = BASE64_MAP,\n      bits = 0,\n      result = [];\n\n  for (idx = 0; idx < max; idx++) {\n    if ((idx % 4 === 0) && idx) {\n      result.push((bits >> 16) & 0xFF);\n      result.push((bits >> 8) & 0xFF);\n      result.push(bits & 0xFF);\n    }\n\n    bits = (bits << 6) | map.indexOf(input.charAt(idx));\n  }\n\n  tailbits = (max % 4) * 6;\n\n  if (tailbits === 0) {\n    result.push((bits >> 16) & 0xFF);\n    result.push((bits >> 8) & 0xFF);\n    result.push(bits & 0xFF);\n  } else if (tailbits === 18) {\n    result.push((bits >> 10) & 0xFF);\n    result.push((bits >> 2) & 0xFF);\n  } else if (tailbits === 12) {\n    result.push((bits >> 4) & 0xFF);\n  }\n  if (NodeBuffer) {\n    return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result);\n  }\n\n  return result;\n}\n\nfunction representYamlBinary(object /*, style*/) {\n  var result = '', bits = 0, idx, tail,\n      max = object.length,\n      map = BASE64_MAP;\n\n  for (idx = 0; idx < max; idx++) {\n    if ((idx % 3 === 0) && idx) {\n      result += map[(bits >> 18) & 0x3F];\n      result += map[(bits >> 12) & 0x3F];\n      result += map[(bits >> 6) & 0x3F];\n      result += map[bits & 0x3F];\n    }\n\n    bits = (bits << 8) + object[idx];\n  }\n\n  tail = max % 3;\n\n  if (tail === 0) {\n    result += map[(bits >> 18) & 0x3F];\n    result += map[(bits >> 12) & 0x3F];\n    result += map[(bits >> 6) & 0x3F];\n    result += map[bits & 0x3F];\n  } else if (tail === 2) {\n    result += map[(bits >> 10) & 0x3F];\n    result += map[(bits >> 4) & 0x3F];\n    result += map[(bits << 2) & 0x3F];\n    result += map[64];\n  } else if (tail === 1) {\n    result += map[(bits >> 2) & 0x3F];\n    result += map[(bits << 4) & 0x3F];\n    result += map[64];\n    result += map[64];\n  }\n\n  return result;\n}\n\nfunction isBinary(object) {\n  return NodeBuffer && NodeBuffer.isBuffer(object);\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:binary', {\n  kind: 'scalar',\n  resolve: resolveYamlBinary,\n  construct: constructYamlBinary,\n  predicate: isBinary,\n  represent: representYamlBinary\n});\n\n},{\"../type\":16}],18:[function(require,module,exports){\n'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlBoolean(data) {\n  if (data === null) return false;\n\n  var max = data.length;\n\n  return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||\n         (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));\n}\n\nfunction constructYamlBoolean(data) {\n  return data === 'true' ||\n         data === 'True' ||\n         data === 'TRUE';\n}\n\nfunction isBoolean(object) {\n  return Object.prototype.toString.call(object) === '[object Boolean]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:bool', {\n  kind: 'scalar',\n  resolve: resolveYamlBoolean,\n  construct: constructYamlBoolean,\n  predicate: isBoolean,\n  represent: {\n    lowercase: function (object) { return object ? 'true' : 'false'; },\n    uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },\n    camelcase: function (object) { return object ? 'True' : 'False'; }\n  },\n  defaultStyle: 'lowercase'\n});\n\n},{\"../type\":16}],19:[function(require,module,exports){\n'use strict';\n\nvar common = require('../common');\nvar Type   = require('../type');\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n  '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +\n  '|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +\n  '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*' +\n  '|[-+]?\\\\.(?:inf|Inf|INF)' +\n  '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n  if (data === null) return false;\n\n  if (!YAML_FLOAT_PATTERN.test(data) ||\n      data[data.length - 1] === '_') {\n    return false;\n  }\n\n  return true;\n}\n\nfunction constructYamlFloat(data) {\n  var value, sign, base, digits;\n\n  value  = data.replace(/_/g, '').toLowerCase();\n  sign   = value[0] === '-' ? -1 : 1;\n  digits = [];\n\n  if ('+-'.indexOf(value[0]) >= 0) {\n    value = value.slice(1);\n  }\n\n  if (value === '.inf') {\n    return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n  } else if (value === '.nan') {\n    return NaN;\n\n  } else if (value.indexOf(':') >= 0) {\n    value.split(':').forEach(function (v) {\n      digits.unshift(parseFloat(v, 10));\n    });\n\n    value = 0.0;\n    base = 1;\n\n    digits.forEach(function (d) {\n      value += d * base;\n      base *= 60;\n    });\n\n    return sign * value;\n\n  }\n  return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n  var res;\n\n  if (isNaN(object)) {\n    switch (style) {\n      case 'lowercase': return '.nan';\n      case 'uppercase': return '.NAN';\n      case 'camelcase': return '.NaN';\n    }\n  } else if (Number.POSITIVE_INFINITY === object) {\n    switch (style) {\n      case 'lowercase': return '.inf';\n      case 'uppercase': return '.INF';\n      case 'camelcase': return '.Inf';\n    }\n  } else if (Number.NEGATIVE_INFINITY === object) {\n    switch (style) {\n      case 'lowercase': return '-.inf';\n      case 'uppercase': return '-.INF';\n      case 'camelcase': return '-.Inf';\n    }\n  } else if (common.isNegativeZero(object)) {\n    return '-0.0';\n  }\n\n  res = object.toString(10);\n\n  return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n  return (Object.prototype.toString.call(object) === '[object Number]') &&\n         (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:float', {\n  kind: 'scalar',\n  resolve: resolveYamlFloat,\n  construct: constructYamlFloat,\n  predicate: isFloat,\n  represent: representYamlFloat,\n  defaultStyle: 'lowercase'\n});\n\n},{\"../common\":5,\"../type\":16}],20:[function(require,module,exports){\n'use strict';\n\nvar common = require('../common');\nvar Type   = require('../type');\n\nfunction isHexCode(c) {\n  return ((c/* 0 */ >= 0x30) && (c <= 0x39/* 9 */)) ||\n         ((c/* A */ >= 0x41) && (c <= 0x46/* F */)) ||\n         ((c/* a */ >= 0x61) && (c <= 0x66/* f */));\n}\n\nfunction isOctCode(c) {\n  return ((c/* 0 */ >= 0x30) && (c <= 0x37/* 7 */));\n}\n\nfunction isDecCode(c) {\n  return ((c/* 0 */ >= 0x30) && (c <= 0x39/* 9 */));\n}\n\nfunction resolveYamlInteger(data) {\n  if (data === null) return false;\n\n  var max = data.length,\n      index = 0,\n      hasDigits = false,\n      ch;\n\n  if (!max) return false;\n\n  ch = data[index];\n  if (ch === '-' || ch === '+') {\n    ch = data[++index];\n  }\n\n  if (ch === '0') {\n    if (index + 1 === max) return true;\n    ch = data[++index];\n\n    if (ch === 'b') {\n      index++;\n\n      for (; index < max; index++) {\n        ch = data[index];\n        if (ch === '_') continue;\n        if (ch !== '0' && ch !== '1') return false;\n        hasDigits = true;\n      }\n      return hasDigits && ch !== '_';\n    }\n\n\n    if (ch === 'x') {\n      index++;\n\n      for (; index < max; index++) {\n        ch = data[index];\n        if (ch === '_') continue;\n        if (!isHexCode(data.charCodeAt(index))) return false;\n        hasDigits = true;\n      }\n      return hasDigits && ch !== '_';\n    }\n    for (; index < max; index++) {\n      ch = data[index];\n      if (ch === '_') continue;\n      if (!isOctCode(data.charCodeAt(index))) return false;\n      hasDigits = true;\n    }\n    return hasDigits && ch !== '_';\n  }\n  if (ch === '_') return false;\n\n  for (; index < max; index++) {\n    ch = data[index];\n    if (ch === '_') continue;\n    if (ch === ':') break;\n    if (!isDecCode(data.charCodeAt(index))) {\n      return false;\n    }\n    hasDigits = true;\n  }\n  if (!hasDigits || ch === '_') return false;\n  if (ch !== ':') return true;\n  return /^(:[0-5]?[0-9])+$/.test(data.slice(index));\n}\n\nfunction constructYamlInteger(data) {\n  var value = data, sign = 1, ch, base, digits = [];\n\n  if (value.indexOf('_') !== -1) {\n    value = value.replace(/_/g, '');\n  }\n\n  ch = value[0];\n\n  if (ch === '-' || ch === '+') {\n    if (ch === '-') sign = -1;\n    value = value.slice(1);\n    ch = value[0];\n  }\n\n  if (value === '0') return 0;\n\n  if (ch === '0') {\n    if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);\n    if (value[1] === 'x') return sign * parseInt(value, 16);\n    return sign * parseInt(value, 8);\n  }\n\n  if (value.indexOf(':') !== -1) {\n    value.split(':').forEach(function (v) {\n      digits.unshift(parseInt(v, 10));\n    });\n\n    value = 0;\n    base = 1;\n\n    digits.forEach(function (d) {\n      value += (d * base);\n      base *= 60;\n    });\n\n    return sign * value;\n\n  }\n\n  return sign * parseInt(value, 10);\n}\n\nfunction isInteger(object) {\n  return (Object.prototype.toString.call(object)) === '[object Number]' &&\n         (object % 1 === 0 && !common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:int', {\n  kind: 'scalar',\n  resolve: resolveYamlInteger,\n  construct: constructYamlInteger,\n  predicate: isInteger,\n  represent: {\n    binary:      function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },\n    octal:       function (obj) { return obj >= 0 ? '0'  + obj.toString(8) : '-0'  + obj.toString(8).slice(1); },\n    decimal:     function (obj) { return obj.toString(10); },\n    hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() :  '-0x' + obj.toString(16).toUpperCase().slice(1); }\n  },\n  defaultStyle: 'decimal',\n  styleAliases: {\n    binary:      [ 2,  'bin' ],\n    octal:       [ 8,  'oct' ],\n    decimal:     [ 10, 'dec' ],\n    hexadecimal: [ 16, 'hex' ]\n  }\n});\n\n},{\"../common\":5,\"../type\":16}],21:[function(require,module,exports){\n'use strict';\n\nvar esprima;\ntry {\n  var _require = require;\n  esprima = _require('esprima');\n} catch (_) {\n  if (typeof window !== 'undefined') esprima = window.esprima;\n}\n\nvar Type = require('../../type');\n\nfunction resolveJavascriptFunction(data) {\n  if (data === null) return false;\n\n  try {\n    var source = '(' + data + ')',\n        ast    = esprima.parse(source, { range: true });\n\n    if (ast.type                    !== 'Program'             ||\n        ast.body.length             !== 1                     ||\n        ast.body[0].type            !== 'ExpressionStatement' ||\n        (ast.body[0].expression.type !== 'ArrowFunctionExpression' &&\n          ast.body[0].expression.type !== 'FunctionExpression')) {\n      return false;\n    }\n\n    return true;\n  } catch (err) {\n    return false;\n  }\n}\n\nfunction constructJavascriptFunction(data) {\n\n  var source = '(' + data + ')',\n      ast    = esprima.parse(source, { range: true }),\n      params = [],\n      body;\n\n  if (ast.type                    !== 'Program'             ||\n      ast.body.length             !== 1                     ||\n      ast.body[0].type            !== 'ExpressionStatement' ||\n      (ast.body[0].expression.type !== 'ArrowFunctionExpression' &&\n        ast.body[0].expression.type !== 'FunctionExpression')) {\n    throw new Error('Failed to resolve function');\n  }\n\n  ast.body[0].expression.params.forEach(function (param) {\n    params.push(param.name);\n  });\n\n  body = ast.body[0].expression.body.range;\n  if (ast.body[0].expression.body.type === 'BlockStatement') {\n    return new Function(params, source.slice(body[0] + 1, body[1] - 1));\n  }\n  return new Function(params, 'return ' + source.slice(body[0], body[1]));\n}\n\nfunction representJavascriptFunction(object /*, style*/) {\n  return object.toString();\n}\n\nfunction isFunction(object) {\n  return Object.prototype.toString.call(object) === '[object Function]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:js/function', {\n  kind: 'scalar',\n  resolve: resolveJavascriptFunction,\n  construct: constructJavascriptFunction,\n  predicate: isFunction,\n  represent: representJavascriptFunction\n});\n\n},{\"../../type\":16}],22:[function(require,module,exports){\n'use strict';\n\nvar Type = require('../../type');\n\nfunction resolveJavascriptRegExp(data) {\n  if (data === null) return false;\n  if (data.length === 0) return false;\n\n  var regexp = data,\n      tail   = /\\/([gim]*)$/.exec(data),\n      modifiers = '';\n  if (regexp[0] === '/') {\n    if (tail) modifiers = tail[1];\n\n    if (modifiers.length > 3) return false;\n    if (regexp[regexp.length - modifiers.length - 1] !== '/') return false;\n  }\n\n  return true;\n}\n\nfunction constructJavascriptRegExp(data) {\n  var regexp = data,\n      tail   = /\\/([gim]*)$/.exec(data),\n      modifiers = '';\n  if (regexp[0] === '/') {\n    if (tail) modifiers = tail[1];\n    regexp = regexp.slice(1, regexp.length - modifiers.length - 1);\n  }\n\n  return new RegExp(regexp, modifiers);\n}\n\nfunction representJavascriptRegExp(object /*, style*/) {\n  var result = '/' + object.source + '/';\n\n  if (object.global) result += 'g';\n  if (object.multiline) result += 'm';\n  if (object.ignoreCase) result += 'i';\n\n  return result;\n}\n\nfunction isRegExp(object) {\n  return Object.prototype.toString.call(object) === '[object RegExp]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:js/regexp', {\n  kind: 'scalar',\n  resolve: resolveJavascriptRegExp,\n  construct: constructJavascriptRegExp,\n  predicate: isRegExp,\n  represent: representJavascriptRegExp\n});\n\n},{\"../../type\":16}],23:[function(require,module,exports){\n'use strict';\n\nvar Type = require('../../type');\n\nfunction resolveJavascriptUndefined() {\n  return true;\n}\n\nfunction constructJavascriptUndefined() {\n  return undefined;\n}\n\nfunction representJavascriptUndefined() {\n  return '';\n}\n\nfunction isUndefined(object) {\n  return typeof object === 'undefined';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:js/undefined', {\n  kind: 'scalar',\n  resolve: resolveJavascriptUndefined,\n  construct: constructJavascriptUndefined,\n  predicate: isUndefined,\n  represent: representJavascriptUndefined\n});\n\n},{\"../../type\":16}],24:[function(require,module,exports){\n'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:map', {\n  kind: 'mapping',\n  construct: function (data) { return data !== null ? data : {}; }\n});\n\n},{\"../type\":16}],25:[function(require,module,exports){\n'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlMerge(data) {\n  return data === '<<' || data === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:merge', {\n  kind: 'scalar',\n  resolve: resolveYamlMerge\n});\n\n},{\"../type\":16}],26:[function(require,module,exports){\n'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlNull(data) {\n  if (data === null) return true;\n\n  var max = data.length;\n\n  return (max === 1 && data === '~') ||\n         (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n  return null;\n}\n\nfunction isNull(object) {\n  return object === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:null', {\n  kind: 'scalar',\n  resolve: resolveYamlNull,\n  construct: constructYamlNull,\n  predicate: isNull,\n  represent: {\n    canonical: function () { return '~';    },\n    lowercase: function () { return 'null'; },\n    uppercase: function () { return 'NULL'; },\n    camelcase: function () { return 'Null'; }\n  },\n  defaultStyle: 'lowercase'\n});\n\n},{\"../type\":16}],27:[function(require,module,exports){\n'use strict';\n\nvar Type = require('../type');\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar _toString       = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n  if (data === null) return true;\n\n  var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n      object = data;\n\n  for (index = 0, length = object.length; index < length; index += 1) {\n    pair = object[index];\n    pairHasKey = false;\n\n    if (_toString.call(pair) !== '[object Object]') return false;\n\n    for (pairKey in pair) {\n      if (_hasOwnProperty.call(pair, pairKey)) {\n        if (!pairHasKey) pairHasKey = true;\n        else return false;\n      }\n    }\n\n    if (!pairHasKey) return false;\n\n    if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n    else return false;\n  }\n\n  return true;\n}\n\nfunction constructYamlOmap(data) {\n  return data !== null ? data : [];\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:omap', {\n  kind: 'sequence',\n  resolve: resolveYamlOmap,\n  construct: constructYamlOmap\n});\n\n},{\"../type\":16}],28:[function(require,module,exports){\n'use strict';\n\nvar Type = require('../type');\n\nvar _toString = Object.prototype.toString;\n\nfunction resolveYamlPairs(data) {\n  if (data === null) return true;\n\n  var index, length, pair, keys, result,\n      object = data;\n\n  result = new Array(object.length);\n\n  for (index = 0, length = object.length; index < length; index += 1) {\n    pair = object[index];\n\n    if (_toString.call(pair) !== '[object Object]') return false;\n\n    keys = Object.keys(pair);\n\n    if (keys.length !== 1) return false;\n\n    result[index] = [ keys[0], pair[keys[0]] ];\n  }\n\n  return true;\n}\n\nfunction constructYamlPairs(data) {\n  if (data === null) return [];\n\n  var index, length, pair, keys, result,\n      object = data;\n\n  result = new Array(object.length);\n\n  for (index = 0, length = object.length; index < length; index += 1) {\n    pair = object[index];\n\n    keys = Object.keys(pair);\n\n    result[index] = [ keys[0], pair[keys[0]] ];\n  }\n\n  return result;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:pairs', {\n  kind: 'sequence',\n  resolve: resolveYamlPairs,\n  construct: constructYamlPairs\n});\n\n},{\"../type\":16}],29:[function(require,module,exports){\n'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:seq', {\n  kind: 'sequence',\n  construct: function (data) { return data !== null ? data : []; }\n});\n\n},{\"../type\":16}],30:[function(require,module,exports){\n'use strict';\n\nvar Type = require('../type');\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction resolveYamlSet(data) {\n  if (data === null) return true;\n\n  var key, object = data;\n\n  for (key in object) {\n    if (_hasOwnProperty.call(object, key)) {\n      if (object[key] !== null) return false;\n    }\n  }\n\n  return true;\n}\n\nfunction constructYamlSet(data) {\n  return data !== null ? data : {};\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:set', {\n  kind: 'mapping',\n  resolve: resolveYamlSet,\n  construct: constructYamlSet\n});\n\n},{\"../type\":16}],31:[function(require,module,exports){\n'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:str', {\n  kind: 'scalar',\n  construct: function (data) { return data !== null ? data : ''; }\n});\n\n},{\"../type\":16}],32:[function(require,module,exports){\n'use strict';\n\nvar Type = require('../type');\n\nvar YAML_DATE_REGEXP = new RegExp(\n  '^([0-9][0-9][0-9][0-9])'          + // [1] year\n  '-([0-9][0-9])'                    + // [2] month\n  '-([0-9][0-9])$');                   // [3] day\n\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n  '^([0-9][0-9][0-9][0-9])'          + // [1] year\n  '-([0-9][0-9]?)'                   + // [2] month\n  '-([0-9][0-9]?)'                   + // [3] day\n  '(?:[Tt]|[ \\\\t]+)'                 + // ...\n  '([0-9][0-9]?)'                    + // [4] hour\n  ':([0-9][0-9])'                    + // [5] minute\n  ':([0-9][0-9])'                    + // [6] second\n  '(?:\\\\.([0-9]*))?'                 + // [7] fraction\n  '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour\n  '(?::([0-9][0-9]))?))?$');           // [11] tz_minute\n\nfunction resolveYamlTimestamp(data) {\n  if (data === null) return false;\n  if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n  if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n  return false;\n}\n\nfunction constructYamlTimestamp(data) {\n  var match, year, month, day, hour, minute, second, fraction = 0,\n      delta = null, tz_hour, tz_minute, date;\n\n  match = YAML_DATE_REGEXP.exec(data);\n  if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n\n  if (match === null) throw new Error('Date resolve error');\n\n  year = +(match[1]);\n  month = +(match[2]) - 1; // JS month starts with 0\n  day = +(match[3]);\n\n  if (!match[4]) { // no hour\n    return new Date(Date.UTC(year, month, day));\n  }\n\n  hour = +(match[4]);\n  minute = +(match[5]);\n  second = +(match[6]);\n\n  if (match[7]) {\n    fraction = match[7].slice(0, 3);\n    while (fraction.length < 3) { // milli-seconds\n      fraction += '0';\n    }\n    fraction = +fraction;\n  }\n\n  if (match[9]) {\n    tz_hour = +(match[10]);\n    tz_minute = +(match[11] || 0);\n    delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n    if (match[9] === '-') delta = -delta;\n  }\n\n  date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n\n  if (delta) date.setTime(date.getTime() - delta);\n\n  return date;\n}\n\nfunction representYamlTimestamp(object /*, style*/) {\n  return object.toISOString();\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:timestamp', {\n  kind: 'scalar',\n  resolve: resolveYamlTimestamp,\n  construct: constructYamlTimestamp,\n  instanceOf: Date,\n  represent: representYamlTimestamp\n});\n\n},{\"../type\":16}],33:[function(require,module,exports){\n(function (global){\nvar LARGE_ARRAY_SIZE = 200;\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\nvar MAX_SAFE_INTEGER = 9007199254740991;\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    asyncTag = '[object AsyncFunction]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    nullTag = '[object Null]',\n    objectTag = '[object Object]',\n    proxyTag = '[object Proxy]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    undefinedTag = '[object Undefined]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\nvar root = freeGlobal || freeSelf || Function('return this')();\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\nvar moduleExports = freeModule && freeModule.exports === freeExports;\nvar freeProcess = moduleExports && freeGlobal.process;\nvar nodeUtil = (function() {\n  try {\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\nfunction safeGet(object, key) {\n  return key == '__proto__'\n    ? undefined\n    : object[key];\n}\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\nvar coreJsData = root['__core-js_shared__'];\nvar funcToString = funcProto.toString;\nvar hasOwnProperty = objectProto.hasOwnProperty;\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\nvar nativeObjectToString = objectProto.toString;\nvar objectCtorString = funcToString.call(Object);\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    Symbol = root.Symbol,\n    Uint8Array = root.Uint8Array,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n    getPrototype = overArg(Object.getPrototypeOf, Object),\n    objectCreate = Object.create,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice,\n    symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n    nativeMax = Math.max,\n    nativeNow = Date.now;\nvar Map = getNative(root, 'Map'),\n    nativeCreate = getNative(Object, 'create');\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           key == 'length' ||\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\nvar baseFor = createBaseFor();\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    if (isObject(srcValue)) {\n      stack || (stack = new Stack);\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\nvar setToString = shortOut(baseSetToString);\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\nvar isArray = Array.isArray;\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\nvar isBuffer = nativeIsBuffer || stubFalse;\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\nfunction identity(value) {\n  return value;\n}\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = merge;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {});\n},{}]},{},[2])(2);\n});\n});\n\nace.define(\"ace/mode/yaml_worker\",[], function(require, exports) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar lint = require(\"./yaml/yaml-lint\").lint;\n\nvar YamlWorker = exports.YamlWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n    this.setOptions();\n};\n\noop.inherits(YamlWorker, Mirror);\n\n(function() {\n    this.setOptions = function() {\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.changeOptions = function(newOptions) {\n        oop.mixin(this.options, newOptions);\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.onUpdate = function() {\n        var _this = this;\n        var value = this.doc.getValue();\n        var errors = [];\n\n        lint(value, {}, function(error) {\n            if (!error) {\n                _this.sender.emit(\"annotate\", errors);\n                return;\n            }\n\n            errors.push({\n                row: error.mark.line,\n                column: error.mark.column,\n                text: error.reason,\n                type: 'error',\n                raw: error\n            });\n\n            _this.sender.emit(\"annotate\", errors);\n        });\n    };\n\n}).call(YamlWorker.prototype);\n\n});\n"
  },
  {
    "path": "publishable/assets/js/app.js",
    "content": "/*! For license information please see app.js.LICENSE.txt */\n(()=>{var e,t={1818:(e,t,n)=>{\"use strict\";var r=Object.freeze({}),o=Array.isArray;function i(e){return null==e}function s(e){return null!=e}function a(e){return!0===e}function l(e){return\"string\"==typeof e||\"number\"==typeof e||\"symbol\"==typeof e||\"boolean\"==typeof e}function c(e){return\"function\"==typeof e}function u(e){return null!==e&&\"object\"==typeof e}var d=Object.prototype.toString;function h(e){return\"[object Object]\"===d.call(e)}function m(e){return\"[object RegExp]\"===d.call(e)}function f(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function p(e){return s(e)&&\"function\"==typeof e.then&&\"function\"==typeof e.catch}function g(e){return null==e?\"\":Array.isArray(e)||h(e)&&e.toString===d?JSON.stringify(e,null,2):String(e)}function v(e){var t=parseFloat(e);return isNaN(t)?e:t}function y(e,t){for(var n=Object.create(null),r=e.split(\",\"),o=0;o<r.length;o++)n[r[o]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var b=y(\"slot,component\",!0),_=y(\"key,ref,slot,slot-scope,is\");function w(e,t){var n=e.length;if(n){if(t===e[n-1])return void(e.length=n-1);var r=e.indexOf(t);if(r>-1)return e.splice(r,1)}}var x=Object.prototype.hasOwnProperty;function C(e,t){return x.call(e,t)}function k(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var D=/-(\\w)/g,S=k((function(e){return e.replace(D,(function(e,t){return t?t.toUpperCase():\"\"}))})),A=k((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),M=/\\B([A-Z])/g,L=k((function(e){return e.replace(M,\"-$1\").toLowerCase()}));var E=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function T(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function F(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n<e.length;n++)e[n]&&F(t,e[n]);return t}function B(e,t,n){}var R=function(e,t,n){return!1},N=function(e){return e};function Y(e,t){if(e===t)return!0;var n=u(e),r=u(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{var o=Array.isArray(e),i=Array.isArray(t);if(o&&i)return e.length===t.length&&e.every((function(e,n){return Y(e,t[n])}));if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(o||i)return!1;var s=Object.keys(e),a=Object.keys(t);return s.length===a.length&&s.every((function(n){return Y(e[n],t[n])}))}catch(e){return!1}}function P(e,t){for(var n=0;n<e.length;n++)if(Y(e[n],t))return n;return-1}function I(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}function H(e,t){return e===t?0===e&&1/e!=1/t:e==e||t==t}var j=\"data-server-rendered\",W=[\"component\",\"directive\",\"filter\"],z=[\"beforeCreate\",\"created\",\"beforeMount\",\"mounted\",\"beforeUpdate\",\"updated\",\"beforeDestroy\",\"destroyed\",\"activated\",\"deactivated\",\"errorCaptured\",\"serverPrefetch\",\"renderTracked\",\"renderTriggered\"],U={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:R,isReservedAttr:R,isUnknownElement:R,getTagNamespace:B,parsePlatformTagName:N,mustUseProp:R,async:!0,_lifecycleHooks:z},V=/a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;function q(e){var t=(e+\"\").charCodeAt(0);return 36===t||95===t}function G(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var K=new RegExp(\"[^\".concat(V.source,\".$_\\\\d]\"));var X=\"__proto__\"in{},J=\"undefined\"!=typeof window,Q=J&&window.navigator.userAgent.toLowerCase(),Z=Q&&/msie|trident/.test(Q),ee=Q&&Q.indexOf(\"msie 9.0\")>0,te=Q&&Q.indexOf(\"edge/\")>0;Q&&Q.indexOf(\"android\");var ne=Q&&/iphone|ipad|ipod|ios/.test(Q);Q&&/chrome\\/\\d+/.test(Q),Q&&/phantomjs/.test(Q);var re,oe=Q&&Q.match(/firefox\\/(\\d+)/),ie={}.watch,se=!1;if(J)try{var ae={};Object.defineProperty(ae,\"passive\",{get:function(){se=!0}}),window.addEventListener(\"test-passive\",null,ae)}catch(e){}var le=function(){return void 0===re&&(re=!J&&void 0!==n.g&&(n.g.process&&\"server\"===n.g.process.env.VUE_ENV)),re},ce=J&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ue(e){return\"function\"==typeof e&&/native code/.test(e.toString())}var de,he=\"undefined\"!=typeof Symbol&&ue(Symbol)&&\"undefined\"!=typeof Reflect&&ue(Reflect.ownKeys);de=\"undefined\"!=typeof Set&&ue(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var me=null;function fe(e){void 0===e&&(e=null),e||me&&me._scope.off(),me=e,e&&e._scope.on()}var pe=function(){function e(e,t,n,r,o,i,s,a){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=s,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=a,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(e.prototype,\"child\",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),e}(),ge=function(e){void 0===e&&(e=\"\");var t=new pe;return t.text=e,t.isComment=!0,t};function ve(e){return new pe(void 0,void 0,void 0,String(e))}function ye(e){var t=new pe(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var be=0,_e=[],we=function(){function e(){this._pending=!1,this.id=be++,this.subs=[]}return e.prototype.addSub=function(e){this.subs.push(e)},e.prototype.removeSub=function(e){this.subs[this.subs.indexOf(e)]=null,this._pending||(this._pending=!0,_e.push(this))},e.prototype.depend=function(t){e.target&&e.target.addDep(this)},e.prototype.notify=function(e){var t=this.subs.filter((function(e){return e}));for(var n=0,r=t.length;n<r;n++){0,t[n].update()}},e}();we.target=null;var xe=[];function Ce(e){xe.push(e),we.target=e}function ke(){xe.pop(),we.target=xe[xe.length-1]}var De=Array.prototype,Se=Object.create(De);[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\",\"sort\",\"reverse\"].forEach((function(e){var t=De[e];G(Se,e,(function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var o,i=t.apply(this,n),s=this.__ob__;switch(e){case\"push\":case\"unshift\":o=n;break;case\"splice\":o=n.slice(2)}return o&&s.observeArray(o),s.dep.notify(),i}))}));var Ae=new WeakMap;function Me(e){return Le(e,!0),G(e,\"__v_isShallow\",!0),e}function Le(e,t){if(!Ee(e)){Ne(e,t,le());0}}function Ee(e){return!(!e||!e.__v_isReadonly)}var Te=Object.getOwnPropertyNames(Se),Fe={},Oe=!0;function Be(e){Oe=e}var Re={notify:B,depend:B,addSub:B,removeSub:B},$e=function(){function e(e,t,n){if(void 0===t&&(t=!1),void 0===n&&(n=!1),this.value=e,this.shallow=t,this.mock=n,this.dep=n?Re:new we,this.vmCount=0,G(e,\"__ob__\",this),o(e)){if(!n)if(X)e.__proto__=Se;else for(var r=0,i=Te.length;r<i;r++){G(e,a=Te[r],Se[a])}t||this.observeArray(e)}else{var s=Object.keys(e);for(r=0;r<s.length;r++){var a;Ye(e,a=s[r],Fe,void 0,t,n)}}}return e.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)Ne(e[t],!1,this.mock)},e}();function Ne(e,t,n){return e&&C(e,\"__ob__\")&&e.__ob__ instanceof $e?e.__ob__:!Oe||!n&&le()||!o(e)&&!h(e)||!Object.isExtensible(e)||e.__v_skip||Ae.has(e)||je(e)||e instanceof pe?void 0:new $e(e,t,n)}function Ye(e,t,n,r,i,s){var a=new we,l=Object.getOwnPropertyDescriptor(e,t);if(!l||!1!==l.configurable){var c=l&&l.get,u=l&&l.set;c&&!u||n!==Fe&&2!==arguments.length||(n=e[t]);var d=!i&&Ne(n,!1,s);return Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=c?c.call(e):n;return we.target&&(a.depend(),d&&(d.dep.depend(),o(t)&&He(t))),je(t)&&!i?t.value:t},set:function(t){var r=c?c.call(e):n;if(H(r,t)){if(u)u.call(e,t);else{if(c)return;if(!i&&je(r)&&!je(t))return void(r.value=t);n=t}d=!i&&Ne(t,!1,s),a.notify()}}}),a}}function Pe(e,t,n){if(!Ee(e)){var r=e.__ob__;return o(e)&&f(t)?(e.length=Math.max(e.length,t),e.splice(t,1,n),r&&!r.shallow&&r.mock&&Ne(n,!1,!0),n):t in e&&!(t in Object.prototype)?(e[t]=n,n):e._isVue||r&&r.vmCount?n:r?(Ye(r.value,t,n,void 0,r.shallow,r.mock),r.dep.notify(),n):(e[t]=n,n)}}function Ie(e,t){if(o(e)&&f(t))e.splice(t,1);else{var n=e.__ob__;e._isVue||n&&n.vmCount||Ee(e)||C(e,t)&&(delete e[t],n&&n.dep.notify())}}function He(e){for(var t=void 0,n=0,r=e.length;n<r;n++)(t=e[n])&&t.__ob__&&t.__ob__.dep.depend(),o(t)&&He(t)}function je(e){return!(!e||!0!==e.__v_isRef)}function We(e,t,n){Object.defineProperty(e,n,{enumerable:!0,configurable:!0,get:function(){var e=t[n];if(je(e))return e.value;var r=e&&e.__ob__;return r&&r.dep.depend(),e},set:function(e){var r=t[n];je(r)&&!je(e)?r.value=e:t[n]=e}})}new WeakMap,new WeakMap;var ze=k((function(e){var t=\"&\"===e.charAt(0),n=\"~\"===(e=t?e.slice(1):e).charAt(0),r=\"!\"===(e=n?e.slice(1):e).charAt(0);return{name:e=r?e.slice(1):e,once:n,capture:r,passive:t}}));function Ue(e,t){function n(){var e=n.fns;if(!o(e))return nn(e,null,arguments,t,\"v-on handler\");for(var r=e.slice(),i=0;i<r.length;i++)nn(r[i],null,arguments,t,\"v-on handler\")}return n.fns=e,n}function Ve(e,t,n,r,o,s){var l,c,u,d;for(l in e)c=e[l],u=t[l],d=ze(l),i(c)||(i(u)?(i(c.fns)&&(c=e[l]=Ue(c,s)),a(d.once)&&(c=e[l]=o(d.name,c,d.capture)),n(d.name,c,d.capture,d.passive,d.params)):c!==u&&(u.fns=c,e[l]=u));for(l in t)i(e[l])&&r((d=ze(l)).name,t[l],d.capture)}function qe(e,t,n){var r;e instanceof pe&&(e=e.data.hook||(e.data.hook={}));var o=e[t];function l(){n.apply(this,arguments),w(r.fns,l)}i(o)?r=Ue([l]):s(o.fns)&&a(o.merged)?(r=o).fns.push(l):r=Ue([o,l]),r.merged=!0,e[t]=r}function Ge(e,t,n,r,o){if(s(t)){if(C(t,n))return e[n]=t[n],o||delete t[n],!0;if(C(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function Ke(e){return l(e)?[ve(e)]:o(e)?Je(e):void 0}function Xe(e){return s(e)&&s(e.text)&&!1===e.isComment}function Je(e,t){var n,r,c,u,d=[];for(n=0;n<e.length;n++)i(r=e[n])||\"boolean\"==typeof r||(u=d[c=d.length-1],o(r)?r.length>0&&(Xe((r=Je(r,\"\".concat(t||\"\",\"_\").concat(n)))[0])&&Xe(u)&&(d[c]=ve(u.text+r[0].text),r.shift()),d.push.apply(d,r)):l(r)?Xe(u)?d[c]=ve(u.text+r):\"\"!==r&&d.push(ve(r)):Xe(r)&&Xe(u)?d[c]=ve(u.text+r.text):(a(e._isVList)&&s(r.tag)&&i(r.key)&&s(t)&&(r.key=\"__vlist\".concat(t,\"_\").concat(n,\"__\")),d.push(r)));return d}function Qe(e,t,n,r,i,d){return(o(n)||l(n))&&(i=r,r=n,n=void 0),a(d)&&(i=2),function(e,t,n,r,i){if(s(n)&&s(n.__ob__))return ge();s(n)&&s(n.is)&&(t=n.is);if(!t)return ge();0;o(r)&&c(r[0])&&((n=n||{}).scopedSlots={default:r[0]},r.length=0);2===i?r=Ke(r):1===i&&(r=function(e){for(var t=0;t<e.length;t++)if(o(e[t]))return Array.prototype.concat.apply([],e);return e}(r));var a,l;if(\"string\"==typeof t){var d=void 0;l=e.$vnode&&e.$vnode.ns||U.getTagNamespace(t),a=U.isReservedTag(t)?new pe(U.parsePlatformTagName(t),n,r,void 0,void 0,e):n&&n.pre||!s(d=Kn(e.$options,\"components\",t))?new pe(t,n,r,void 0,void 0,e):Pn(d,n,e,r,t)}else a=Pn(t,n,e,r);return o(a)?a:s(a)?(s(l)&&Ze(a,l),s(n)&&function(e){u(e.style)&&yn(e.style);u(e.class)&&yn(e.class)}(n),a):ge()}(e,t,n,r,i)}function Ze(e,t,n){if(e.ns=t,\"foreignObject\"===e.tag&&(t=void 0,n=!0),s(e.children))for(var r=0,o=e.children.length;r<o;r++){var l=e.children[r];s(l.tag)&&(i(l.ns)||a(n)&&\"svg\"!==l.tag)&&Ze(l,t,n)}}function et(e,t){var n,r,i,a,l=null;if(o(e)||\"string\"==typeof e)for(l=new Array(e.length),n=0,r=e.length;n<r;n++)l[n]=t(e[n],n);else if(\"number\"==typeof e)for(l=new Array(e),n=0;n<e;n++)l[n]=t(n+1,n);else if(u(e))if(he&&e[Symbol.iterator]){l=[];for(var c=e[Symbol.iterator](),d=c.next();!d.done;)l.push(t(d.value,l.length)),d=c.next()}else for(i=Object.keys(e),l=new Array(i.length),n=0,r=i.length;n<r;n++)a=i[n],l[n]=t(e[a],a,n);return s(l)||(l=[]),l._isVList=!0,l}function tt(e,t,n,r){var o,i=this.$scopedSlots[e];i?(n=n||{},r&&(n=F(F({},r),n)),o=i(n)||(c(t)?t():t)):o=this.$slots[e]||(c(t)?t():t);var s=n&&n.slot;return s?this.$createElement(\"template\",{slot:s},o):o}function nt(e){return Kn(this.$options,\"filters\",e,!0)||N}function rt(e,t){return o(e)?-1===e.indexOf(t):e!==t}function ot(e,t,n,r,o){var i=U.keyCodes[t]||n;return o&&r&&!U.keyCodes[t]?rt(o,r):i?rt(i,e):r?L(r)!==t:void 0===e}function it(e,t,n,r,i){if(n)if(u(n)){o(n)&&(n=O(n));var s=void 0,a=function(o){if(\"class\"===o||\"style\"===o||_(o))s=e;else{var a=e.attrs&&e.attrs.type;s=r||U.mustUseProp(t,a,o)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}var l=S(o),c=L(o);l in s||c in s||(s[o]=n[o],i&&((e.on||(e.on={}))[\"update:\".concat(o)]=function(e){n[o]=e}))};for(var l in n)a(l)}else;return e}function st(e,t){var n=this._staticTrees||(this._staticTrees=[]),r=n[e];return r&&!t||lt(r=n[e]=this.$options.staticRenderFns[e].call(this._renderProxy,this._c,this),\"__static__\".concat(e),!1),r}function at(e,t,n){return lt(e,\"__once__\".concat(t).concat(n?\"_\".concat(n):\"\"),!0),e}function lt(e,t,n){if(o(e))for(var r=0;r<e.length;r++)e[r]&&\"string\"!=typeof e[r]&&ct(e[r],\"\".concat(t,\"_\").concat(r),n);else ct(e,t,n)}function ct(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function ut(e,t){if(t)if(h(t)){var n=e.on=e.on?F({},e.on):{};for(var r in t){var o=n[r],i=t[r];n[r]=o?[].concat(o,i):i}}else;return e}function dt(e,t,n,r){t=t||{$stable:!n};for(var i=0;i<e.length;i++){var s=e[i];o(s)?dt(s,t,n):s&&(s.proxy&&(s.fn.proxy=!0),t[s.key]=s.fn)}return r&&(t.$key=r),t}function ht(e,t){for(var n=0;n<t.length;n+=2){var r=t[n];\"string\"==typeof r&&r&&(e[t[n]]=t[n+1])}return e}function mt(e,t){return\"string\"==typeof e?t+e:e}function ft(e){e._o=at,e._n=v,e._s=g,e._l=et,e._t=tt,e._q=Y,e._i=P,e._m=st,e._f=nt,e._k=ot,e._b=it,e._v=ve,e._e=ge,e._u=dt,e._g=ut,e._d=ht,e._p=mt}function pt(e,t){if(!e||!e.length)return{};for(var n={},r=0,o=e.length;r<o;r++){var i=e[r],s=i.data;if(s&&s.attrs&&s.attrs.slot&&delete s.attrs.slot,i.context!==t&&i.fnContext!==t||!s||null==s.slot)(n.default||(n.default=[])).push(i);else{var a=s.slot,l=n[a]||(n[a]=[]);\"template\"===i.tag?l.push.apply(l,i.children||[]):l.push(i)}}for(var c in n)n[c].every(gt)&&delete n[c];return n}function gt(e){return e.isComment&&!e.asyncFactory||\" \"===e.text}function vt(e){return e.isComment&&e.asyncFactory}function yt(e,t,n,o){var i,s=Object.keys(n).length>0,a=t?!!t.$stable:!s,l=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&o&&o!==r&&l===o.$key&&!s&&!o.$hasNormal)return o;for(var c in i={},t)t[c]&&\"$\"!==c[0]&&(i[c]=bt(e,n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=_t(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),G(i,\"$stable\",a),G(i,\"$key\",l),G(i,\"$hasNormal\",s),i}function bt(e,t,n,r){var i=function(){var t=me;fe(e);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&\"object\"==typeof n&&!o(n)?[n]:Ke(n))&&n[0];return fe(t),n&&(!i||1===n.length&&i.isComment&&!vt(i))?void 0:n};return r.proxy&&Object.defineProperty(t,n,{get:i,enumerable:!0,configurable:!0}),i}function _t(e,t){return function(){return e[t]}}function wt(e){return{get attrs(){if(!e._attrsProxy){var t=e._attrsProxy={};G(t,\"_v_attr_proxy\",!0),xt(t,e.$attrs,r,e,\"$attrs\")}return e._attrsProxy},get listeners(){e._listenersProxy||xt(e._listenersProxy={},e.$listeners,r,e,\"$listeners\");return e._listenersProxy},get slots(){return function(e){e._slotsProxy||kt(e._slotsProxy={},e.$scopedSlots);return e._slotsProxy}(e)},emit:E(e.$emit,e),expose:function(t){t&&Object.keys(t).forEach((function(n){return We(e,t,n)}))}}}function xt(e,t,n,r,o){var i=!1;for(var s in t)s in e?t[s]!==n[s]&&(i=!0):(i=!0,Ct(e,s,r,o));for(var s in e)s in t||(i=!0,delete e[s]);return i}function Ct(e,t,n,r){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){return n[r][t]}})}function kt(e,t){for(var n in t)e[n]=t[n];for(var n in e)n in t||delete e[n]}var Dt,St=null;function At(e,t){return(e.__esModule||he&&\"Module\"===e[Symbol.toStringTag])&&(e=e.default),u(e)?t.extend(e):e}function Mt(e){if(o(e))for(var t=0;t<e.length;t++){var n=e[t];if(s(n)&&(s(n.componentOptions)||vt(n)))return n}}function Lt(e,t){Dt.$on(e,t)}function Et(e,t){Dt.$off(e,t)}function Tt(e,t){var n=Dt;return function r(){var o=t.apply(null,arguments);null!==o&&n.$off(e,r)}}function Ft(e,t,n){Dt=e,Ve(t,n||{},Lt,Et,Tt,e),Dt=void 0}var Ot=null;function Bt(e){var t=Ot;return Ot=e,function(){Ot=t}}function Rt(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function $t(e,t){if(t){if(e._directInactive=!1,Rt(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)$t(e.$children[n]);Yt(e,\"activated\")}}function Nt(e,t){if(!(t&&(e._directInactive=!0,Rt(e))||e._inactive)){e._inactive=!0;for(var n=0;n<e.$children.length;n++)Nt(e.$children[n]);Yt(e,\"deactivated\")}}function Yt(e,t,n,r){void 0===r&&(r=!0),Ce();var o=me;r&&fe(e);var i=e.$options[t],s=\"\".concat(t,\" hook\");if(i)for(var a=0,l=i.length;a<l;a++)nn(i[a],e,n||null,e,s);e._hasHookEvent&&e.$emit(\"hook:\"+t),r&&fe(o),ke()}var Pt=[],It=[],Ht={},jt=!1,Wt=!1,zt=0;var Ut=0,Vt=Date.now;if(J&&!Z){var qt=window.performance;qt&&\"function\"==typeof qt.now&&Vt()>document.createEvent(\"Event\").timeStamp&&(Vt=function(){return qt.now()})}var Gt=function(e,t){if(e.post){if(!t.post)return 1}else if(t.post)return-1;return e.id-t.id};function Kt(){var e,t;for(Ut=Vt(),Wt=!0,Pt.sort(Gt),zt=0;zt<Pt.length;zt++)(e=Pt[zt]).before&&e.before(),t=e.id,Ht[t]=null,e.run();var n=It.slice(),r=Pt.slice();zt=Pt.length=It.length=0,Ht={},jt=Wt=!1,function(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,$t(e[t],!0)}(n),function(e){var t=e.length;for(;t--;){var n=e[t],r=n.vm;r&&r._watcher===n&&r._isMounted&&!r._isDestroyed&&Yt(r,\"updated\")}}(r),function(){for(var e=0;e<_e.length;e++){var t=_e[e];t.subs=t.subs.filter((function(e){return e})),t._pending=!1}_e.length=0}(),ce&&U.devtools&&ce.emit(\"flush\")}function Xt(e){var t=e.id;if(null==Ht[t]&&(e!==we.target||!e.noRecurse)){if(Ht[t]=!0,Wt){for(var n=Pt.length-1;n>zt&&Pt[n].id>e.id;)n--;Pt.splice(n+1,0,e)}else Pt.push(e);jt||(jt=!0,pn(Kt))}}var Jt=\"watcher\";\"\".concat(Jt,\" callback\"),\"\".concat(Jt,\" getter\"),\"\".concat(Jt,\" cleanup\");var Qt;var Zt=function(){function e(e){void 0===e&&(e=!1),this.detached=e,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Qt,!e&&Qt&&(this.index=(Qt.scopes||(Qt.scopes=[])).push(this)-1)}return e.prototype.run=function(e){if(this.active){var t=Qt;try{return Qt=this,e()}finally{Qt=t}}else 0},e.prototype.on=function(){Qt=this},e.prototype.off=function(){Qt=this.parent},e.prototype.stop=function(e){if(this.active){var t=void 0,n=void 0;for(t=0,n=this.effects.length;t<n;t++)this.effects[t].teardown();for(t=0,n=this.cleanups.length;t<n;t++)this.cleanups[t]();if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].stop(!0);if(!this.detached&&this.parent&&!e){var r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.parent=void 0,this.active=!1}},e}();function en(e){var t=e._provided,n=e.$parent&&e.$parent._provided;return n===t?e._provided=Object.create(n):t}function tn(e,t,n){Ce();try{if(t)for(var r=t;r=r.$parent;){var o=r.$options.errorCaptured;if(o)for(var i=0;i<o.length;i++)try{if(!1===o[i].call(r,e,t,n))return}catch(e){rn(e,r,\"errorCaptured hook\")}}rn(e,t,n)}finally{ke()}}function nn(e,t,n,r,o){var i;try{(i=n?e.apply(t,n):e.call(t))&&!i._isVue&&p(i)&&!i._handled&&(i.catch((function(e){return tn(e,r,o+\" (Promise/async)\")})),i._handled=!0)}catch(e){tn(e,r,o)}return i}function rn(e,t,n){if(U.errorHandler)try{return U.errorHandler.call(null,e,t,n)}catch(t){t!==e&&on(t,null,\"config.errorHandler\")}on(e,t,n)}function on(e,t,n){if(!J||\"undefined\"==typeof console)throw e;console.error(e)}var sn,an=!1,ln=[],cn=!1;function un(){cn=!1;var e=ln.slice(0);ln.length=0;for(var t=0;t<e.length;t++)e[t]()}if(\"undefined\"!=typeof Promise&&ue(Promise)){var dn=Promise.resolve();sn=function(){dn.then(un),ne&&setTimeout(B)},an=!0}else if(Z||\"undefined\"==typeof MutationObserver||!ue(MutationObserver)&&\"[object MutationObserverConstructor]\"!==MutationObserver.toString())sn=\"undefined\"!=typeof setImmediate&&ue(setImmediate)?function(){setImmediate(un)}:function(){setTimeout(un,0)};else{var hn=1,mn=new MutationObserver(un),fn=document.createTextNode(String(hn));mn.observe(fn,{characterData:!0}),sn=function(){hn=(hn+1)%2,fn.data=String(hn)},an=!0}function pn(e,t){var n;if(ln.push((function(){if(e)try{e.call(t)}catch(e){tn(e,t,\"nextTick\")}else n&&n(t)})),cn||(cn=!0,sn()),!e&&\"undefined\"!=typeof Promise)return new Promise((function(e){n=e}))}function gn(e){return function(t,n){if(void 0===n&&(n=me),n)return function(e,t,n){var r=e.$options;r[t]=Un(r[t],n)}(n,e,t)}}gn(\"beforeMount\"),gn(\"mounted\"),gn(\"beforeUpdate\"),gn(\"updated\"),gn(\"beforeDestroy\"),gn(\"destroyed\"),gn(\"activated\"),gn(\"deactivated\"),gn(\"serverPrefetch\"),gn(\"renderTracked\"),gn(\"renderTriggered\"),gn(\"errorCaptured\");var vn=new de;function yn(e){return bn(e,vn),vn.clear(),e}function bn(e,t){var n,r,i=o(e);if(!(!i&&!u(e)||e.__v_skip||Object.isFrozen(e)||e instanceof pe)){if(e.__ob__){var s=e.__ob__.dep.id;if(t.has(s))return;t.add(s)}if(i)for(n=e.length;n--;)bn(e[n],t);else if(je(e))bn(e.value,t);else for(n=(r=Object.keys(e)).length;n--;)bn(e[r[n]],t)}}var _n=0,wn=function(){function e(e,t,n,r,o){var i,s;i=this,void 0===(s=Qt&&!Qt._vm?Qt:e?e._scope:void 0)&&(s=Qt),s&&s.active&&s.effects.push(i),(this.vm=e)&&o&&(e._watcher=this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++_n,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new de,this.newDepIds=new de,this.expression=\"\",c(t)?this.getter=t:(this.getter=function(e){if(!K.test(e)){var t=e.split(\".\");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}(t),this.getter||(this.getter=B)),this.value=this.lazy?void 0:this.get()}return e.prototype.get=function(){var e;Ce(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;tn(e,t,'getter for watcher \"'.concat(this.expression,'\"'))}finally{this.deep&&yn(e),ke(),this.cleanupDeps()}return e},e.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},e.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},e.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():Xt(this)},e.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||u(e)||this.deep){var t=this.value;if(this.value=e,this.user){var n='callback for watcher \"'.concat(this.expression,'\"');nn(this.cb,this.vm,[e,t],this.vm,n)}else this.cb.call(this.vm,e,t)}}},e.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},e.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},e.prototype.teardown=function(){if(this.vm&&!this.vm._isBeingDestroyed&&w(this.vm._scope.effects,this),this.active){for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1,this.onStop&&this.onStop()}},e}(),xn={enumerable:!0,configurable:!0,get:B,set:B};function Cn(e,t,n){xn.get=function(){return this[t][n]},xn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,xn)}function kn(e){var t=e.$options;if(t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props=Me({}),o=e.$options._propKeys=[];e.$parent&&Be(!1);var i=function(i){o.push(i);var s=Xn(i,t,n,e);Ye(r,i,s),i in e||Cn(e,\"_props\",i)};for(var s in t)i(s);Be(!0)}(e,t.props),function(e){var t=e.$options,n=t.setup;if(n){var r=e._setupContext=wt(e);fe(e),Ce();var o=nn(n,null,[e._props||Me({}),r],e,\"setup\");if(ke(),fe(),c(o))t.render=o;else if(u(o))if(e._setupState=o,o.__sfc){var i=e._setupProxy={};for(var s in o)\"__sfc\"!==s&&We(i,o,s)}else for(var s in o)q(s)||We(e,o,s)}}(e),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]=\"function\"!=typeof t[n]?B:E(t[n],e)}(e,t.methods),t.data)!function(e){var t=e.$options.data;h(t=e._data=c(t)?function(e,t){Ce();try{return e.call(t,t)}catch(e){return tn(e,t,\"data()\"),{}}finally{ke()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,o=(e.$options.methods,n.length);for(;o--;){var i=n[o];0,r&&C(r,i)||q(i)||Cn(e,\"_data\",i)}var s=Ne(t);s&&s.vmCount++}(e);else{var n=Ne(e._data={});n&&n.vmCount++}t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=le();for(var o in t){var i=t[o],s=c(i)?i:i.get;0,r||(n[o]=new wn(e,s||B,B,Dn)),o in e||Sn(e,o,i)}}(e,t.computed),t.watch&&t.watch!==ie&&function(e,t){for(var n in t){var r=t[n];if(o(r))for(var i=0;i<r.length;i++)Ln(e,n,r[i]);else Ln(e,n,r)}}(e,t.watch)}var Dn={lazy:!0};function Sn(e,t,n){var r=!le();c(n)?(xn.get=r?An(t):Mn(n),xn.set=B):(xn.get=n.get?r&&!1!==n.cache?An(t):Mn(n.get):B,xn.set=n.set||B),Object.defineProperty(e,t,xn)}function An(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),we.target&&t.depend(),t.value}}function Mn(e){return function(){return e.call(this,this)}}function Ln(e,t,n,r){return h(n)&&(r=n,n=n.handler),\"string\"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function En(e,t){if(e){for(var n=Object.create(null),r=he?Reflect.ownKeys(e):Object.keys(e),o=0;o<r.length;o++){var i=r[o];if(\"__ob__\"!==i){var s=e[i].from;if(s in t._provided)n[i]=t._provided[s];else if(\"default\"in e[i]){var a=e[i].default;n[i]=c(a)?a.call(t):a}else 0}}return n}}var Tn=0;function Fn(e){var t=e.options;if(e.super){var n=Fn(e.super);if(n!==e.superOptions){e.superOptions=n;var r=function(e){var t,n=e.options,r=e.sealedOptions;for(var o in n)n[o]!==r[o]&&(t||(t={}),t[o]=n[o]);return t}(e);r&&F(e.extendOptions,r),(t=e.options=Gn(n,e.extendOptions)).name&&(t.components[t.name]=e)}}return t}function On(e,t,n,i,s){var l,c=this,u=s.options;C(i,\"_uid\")?(l=Object.create(i))._original=i:(l=i,i=i._original);var d=a(u._compiled),h=!d;this.data=e,this.props=t,this.children=n,this.parent=i,this.listeners=e.on||r,this.injections=En(u.inject,i),this.slots=function(){return c.$slots||yt(i,e.scopedSlots,c.$slots=pt(n,i)),c.$slots},Object.defineProperty(this,\"scopedSlots\",{enumerable:!0,get:function(){return yt(i,e.scopedSlots,this.slots())}}),d&&(this.$options=u,this.$slots=this.slots(),this.$scopedSlots=yt(i,e.scopedSlots,this.$slots)),u._scopeId?this._c=function(e,t,n,r){var s=Qe(l,e,t,n,r,h);return s&&!o(s)&&(s.fnScopeId=u._scopeId,s.fnContext=i),s}:this._c=function(e,t,n,r){return Qe(l,e,t,n,r,h)}}function Bn(e,t,n,r,o){var i=ye(e);return i.fnContext=n,i.fnOptions=r,t.slot&&((i.data||(i.data={})).slot=t.slot),i}function Rn(e,t){for(var n in t)e[S(n)]=t[n]}function $n(e){return e.name||e.__name||e._componentTag}ft(On.prototype);var Nn={init:function(e,t){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var n=e;Nn.prepatch(n,n)}else{(e.componentInstance=function(e,t){var n={_isComponent:!0,_parentVnode:e,parent:t},r=e.data.inlineTemplate;s(r)&&(n.render=r.render,n.staticRenderFns=r.staticRenderFns);return new e.componentOptions.Ctor(n)}(e,Ot)).$mount(t?e.elm:void 0,t)}},prepatch:function(e,t){var n=t.componentOptions;!function(e,t,n,o,i){var s=o.data.scopedSlots,a=e.$scopedSlots,l=!!(s&&!s.$stable||a!==r&&!a.$stable||s&&e.$scopedSlots.$key!==s.$key||!s&&e.$scopedSlots.$key),c=!!(i||e.$options._renderChildren||l),u=e.$vnode;e.$options._parentVnode=o,e.$vnode=o,e._vnode&&(e._vnode.parent=o),e.$options._renderChildren=i;var d=o.data.attrs||r;e._attrsProxy&&xt(e._attrsProxy,d,u.data&&u.data.attrs||r,e,\"$attrs\")&&(c=!0),e.$attrs=d,n=n||r;var h=e.$options._parentListeners;if(e._listenersProxy&&xt(e._listenersProxy,n,h||r,e,\"$listeners\"),e.$listeners=e.$options._parentListeners=n,Ft(e,n,h),t&&e.$options.props){Be(!1);for(var m=e._props,f=e.$options._propKeys||[],p=0;p<f.length;p++){var g=f[p],v=e.$options.props;m[g]=Xn(g,v,t,e)}Be(!0),e.$options.propsData=t}c&&(e.$slots=pt(i,o.context),e.$forceUpdate())}(t.componentInstance=e.componentInstance,n.propsData,n.listeners,t,n.children)},insert:function(e){var t,n=e.context,r=e.componentInstance;r._isMounted||(r._isMounted=!0,Yt(r,\"mounted\")),e.data.keepAlive&&(n._isMounted?((t=r)._inactive=!1,It.push(t)):$t(r,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?Nt(t,!0):t.$destroy())}},Yn=Object.keys(Nn);function Pn(e,t,n,l,c){if(!i(e)){var d=n.$options._base;if(u(e)&&(e=d.extend(e)),\"function\"==typeof e){var h;if(i(e.cid)&&(e=function(e,t){if(a(e.error)&&s(e.errorComp))return e.errorComp;if(s(e.resolved))return e.resolved;var n=St;if(n&&s(e.owners)&&-1===e.owners.indexOf(n)&&e.owners.push(n),a(e.loading)&&s(e.loadingComp))return e.loadingComp;if(n&&!s(e.owners)){var r=e.owners=[n],o=!0,l=null,c=null;n.$on(\"hook:destroyed\",(function(){return w(r,n)}));var d=function(e){for(var t=0,n=r.length;t<n;t++)r[t].$forceUpdate();e&&(r.length=0,null!==l&&(clearTimeout(l),l=null),null!==c&&(clearTimeout(c),c=null))},h=I((function(n){e.resolved=At(n,t),o?r.length=0:d(!0)})),m=I((function(t){s(e.errorComp)&&(e.error=!0,d(!0))})),f=e(h,m);return u(f)&&(p(f)?i(e.resolved)&&f.then(h,m):p(f.component)&&(f.component.then(h,m),s(f.error)&&(e.errorComp=At(f.error,t)),s(f.loading)&&(e.loadingComp=At(f.loading,t),0===f.delay?e.loading=!0:l=setTimeout((function(){l=null,i(e.resolved)&&i(e.error)&&(e.loading=!0,d(!1))}),f.delay||200)),s(f.timeout)&&(c=setTimeout((function(){c=null,i(e.resolved)&&m(null)}),f.timeout)))),o=!1,e.loading?e.loadingComp:e.resolved}}(h=e,d),void 0===e))return function(e,t,n,r,o){var i=ge();return i.asyncFactory=e,i.asyncMeta={data:t,context:n,children:r,tag:o},i}(h,t,n,l,c);t=t||{},Fn(e),s(t.model)&&function(e,t){var n=e.model&&e.model.prop||\"value\",r=e.model&&e.model.event||\"input\";(t.attrs||(t.attrs={}))[n]=t.model.value;var i=t.on||(t.on={}),a=i[r],l=t.model.callback;s(a)?(o(a)?-1===a.indexOf(l):a!==l)&&(i[r]=[l].concat(a)):i[r]=l}(e.options,t);var m=function(e,t,n){var r=t.options.props;if(!i(r)){var o={},a=e.attrs,l=e.props;if(s(a)||s(l))for(var c in r){var u=L(c);Ge(o,l,c,u,!0)||Ge(o,a,c,u,!1)}return o}}(t,e);if(a(e.options.functional))return function(e,t,n,i,a){var l=e.options,c={},u=l.props;if(s(u))for(var d in u)c[d]=Xn(d,u,t||r);else s(n.attrs)&&Rn(c,n.attrs),s(n.props)&&Rn(c,n.props);var h=new On(n,c,a,i,e),m=l.render.call(null,h._c,h);if(m instanceof pe)return Bn(m,n,h.parent,l);if(o(m)){for(var f=Ke(m)||[],p=new Array(f.length),g=0;g<f.length;g++)p[g]=Bn(f[g],n,h.parent,l);return p}}(e,m,t,n,l);var f=t.on;if(t.on=t.nativeOn,a(e.options.abstract)){var g=t.slot;t={},g&&(t.slot=g)}!function(e){for(var t=e.hook||(e.hook={}),n=0;n<Yn.length;n++){var r=Yn[n],o=t[r],i=Nn[r];o===i||o&&o._merged||(t[r]=o?In(i,o):i)}}(t);var v=$n(e.options)||c;return new pe(\"vue-component-\".concat(e.cid).concat(v?\"-\".concat(v):\"\"),t,void 0,void 0,void 0,n,{Ctor:e,propsData:m,listeners:f,tag:c,children:l},h)}}}function In(e,t){var n=function(n,r){e(n,r),t(n,r)};return n._merged=!0,n}var Hn=B,jn=U.optionMergeStrategies;function Wn(e,t){if(!t)return e;for(var n,r,o,i=he?Reflect.ownKeys(t):Object.keys(t),s=0;s<i.length;s++)\"__ob__\"!==(n=i[s])&&(r=e[n],o=t[n],C(e,n)?r!==o&&h(r)&&h(o)&&Wn(r,o):Pe(e,n,o));return e}function zn(e,t,n){return n?function(){var r=c(t)?t.call(n,n):t,o=c(e)?e.call(n,n):e;return r?Wn(r,o):o}:t?e?function(){return Wn(c(t)?t.call(this,this):t,c(e)?e.call(this,this):e)}:t:e}function Un(e,t){var n=t?e?e.concat(t):o(t)?t:[t]:e;return n?function(e){for(var t=[],n=0;n<e.length;n++)-1===t.indexOf(e[n])&&t.push(e[n]);return t}(n):n}function Vn(e,t,n,r){var o=Object.create(e||null);return t?F(o,t):o}jn.data=function(e,t,n){return n?zn(e,t,n):t&&\"function\"!=typeof t?e:zn(e,t)},z.forEach((function(e){jn[e]=Un})),W.forEach((function(e){jn[e+\"s\"]=Vn})),jn.watch=function(e,t,n,r){if(e===ie&&(e=void 0),t===ie&&(t=void 0),!t)return Object.create(e||null);if(!e)return t;var i={};for(var s in F(i,e),t){var a=i[s],l=t[s];a&&!o(a)&&(a=[a]),i[s]=a?a.concat(l):o(l)?l:[l]}return i},jn.props=jn.methods=jn.inject=jn.computed=function(e,t,n,r){if(!e)return t;var o=Object.create(null);return F(o,e),t&&F(o,t),o},jn.provide=zn;var qn=function(e,t){return void 0===t?e:t};function Gn(e,t,n){if(c(t)&&(t=t.options),function(e,t){var n=e.props;if(n){var r,i,s={};if(o(n))for(r=n.length;r--;)\"string\"==typeof(i=n[r])&&(s[S(i)]={type:null});else if(h(n))for(var a in n)i=n[a],s[S(a)]=h(i)?i:{type:i};e.props=s}}(t),function(e,t){var n=e.inject;if(n){var r=e.inject={};if(o(n))for(var i=0;i<n.length;i++)r[n[i]]={from:n[i]};else if(h(n))for(var s in n){var a=n[s];r[s]=h(a)?F({from:s},a):{from:a}}}}(t),function(e){var t=e.directives;if(t)for(var n in t){var r=t[n];c(r)&&(t[n]={bind:r,update:r})}}(t),!t._base&&(t.extends&&(e=Gn(e,t.extends,n)),t.mixins))for(var r=0,i=t.mixins.length;r<i;r++)e=Gn(e,t.mixins[r],n);var s,a={};for(s in e)l(s);for(s in t)C(e,s)||l(s);function l(r){var o=jn[r]||qn;a[r]=o(e[r],t[r],n,r)}return a}function Kn(e,t,n,r){if(\"string\"==typeof n){var o=e[t];if(C(o,n))return o[n];var i=S(n);if(C(o,i))return o[i];var s=A(i);return C(o,s)?o[s]:o[n]||o[i]||o[s]}}function Xn(e,t,n,r){var o=t[e],i=!C(n,e),s=n[e],a=er(Boolean,o.type);if(a>-1)if(i&&!C(o,\"default\"))s=!1;else if(\"\"===s||s===L(e)){var l=er(String,o.type);(l<0||a<l)&&(s=!0)}if(void 0===s){s=function(e,t,n){if(!C(t,\"default\"))return;var r=t.default;0;if(e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n])return e._props[n];return c(r)&&\"Function\"!==Qn(t.type)?r.call(e):r}(r,o,e);var u=Oe;Be(!0),Ne(s),Be(u)}return s}var Jn=/^\\s*function (\\w+)/;function Qn(e){var t=e&&e.toString().match(Jn);return t?t[1]:\"\"}function Zn(e,t){return Qn(e)===Qn(t)}function er(e,t){if(!o(t))return Zn(t,e)?0:-1;for(var n=0,r=t.length;n<r;n++)if(Zn(t[n],e))return n;return-1}function tr(e){this._init(e)}function nr(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=$n(e)||$n(n.options);var s=function(e){this._init(e)};return(s.prototype=Object.create(n.prototype)).constructor=s,s.cid=t++,s.options=Gn(n.options,e),s.super=n,s.options.props&&function(e){var t=e.options.props;for(var n in t)Cn(e.prototype,\"_props\",n)}(s),s.options.computed&&function(e){var t=e.options.computed;for(var n in t)Sn(e.prototype,n,t[n])}(s),s.extend=n.extend,s.mixin=n.mixin,s.use=n.use,W.forEach((function(e){s[e]=n[e]})),i&&(s.options.components[i]=s),s.superOptions=n.options,s.extendOptions=e,s.sealedOptions=F({},s.options),o[r]=s,s}}function rr(e){return e&&($n(e.Ctor.options)||e.tag)}function or(e,t){return o(e)?e.indexOf(t)>-1:\"string\"==typeof e?e.split(\",\").indexOf(t)>-1:!!m(e)&&e.test(t)}function ir(e,t){var n=e.cache,r=e.keys,o=e._vnode;for(var i in n){var s=n[i];if(s){var a=s.name;a&&!t(a)&&sr(n,i,r,o)}}}function sr(e,t,n,r){var o=e[t];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),e[t]=null,w(n,t)}!function(e){e.prototype._init=function(e){var t=this;t._uid=Tn++,t._isVue=!0,t.__v_skip=!0,t._scope=new Zt(!0),t._scope._vm=!0,e&&e._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(t,e):t.$options=Gn(Fn(t.constructor),e||{},t),t._renderProxy=t,t._self=t,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._provided=n?n._provided:Object.create(null),e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(t),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Ft(e,t)}(t),function(e){e._vnode=null,e._staticTrees=null;var t=e.$options,n=e.$vnode=t._parentVnode,o=n&&n.context;e.$slots=pt(t._renderChildren,o),e.$scopedSlots=n?yt(e.$parent,n.data.scopedSlots,e.$slots):r,e._c=function(t,n,r,o){return Qe(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return Qe(e,t,n,r,o,!0)};var i=n&&n.data;Ye(e,\"$attrs\",i&&i.attrs||r,null,!0),Ye(e,\"$listeners\",t._parentListeners||r,null,!0)}(t),Yt(t,\"beforeCreate\",void 0,!1),function(e){var t=En(e.$options.inject,e);t&&(Be(!1),Object.keys(t).forEach((function(n){Ye(e,n,t[n])})),Be(!0))}(t),kn(t),function(e){var t=e.$options.provide;if(t){var n=c(t)?t.call(e):t;if(!u(n))return;for(var r=en(e),o=he?Reflect.ownKeys(n):Object.keys(n),i=0;i<o.length;i++){var s=o[i];Object.defineProperty(r,s,Object.getOwnPropertyDescriptor(n,s))}}}(t),Yt(t,\"created\"),t.$options.el&&t.$mount(t.$options.el)}}(tr),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,\"$data\",t),Object.defineProperty(e.prototype,\"$props\",n),e.prototype.$set=Pe,e.prototype.$delete=Ie,e.prototype.$watch=function(e,t,n){var r=this;if(h(t))return Ln(r,e,t,n);(n=n||{}).user=!0;var o=new wn(r,e,t,n);if(n.immediate){var i='callback for immediate watcher \"'.concat(o.expression,'\"');Ce(),nn(t,r,[o.value],r,i),ke()}return function(){o.teardown()}}}(tr),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(o(e))for(var i=0,s=e.length;i<s;i++)r.$on(e[i],n);else(r._events[e]||(r._events[e]=[])).push(n),t.test(e)&&(r._hasHookEvent=!0);return r},e.prototype.$once=function(e,t){var n=this;function r(){n.$off(e,r),t.apply(n,arguments)}return r.fn=t,n.$on(e,r),n},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(o(e)){for(var r=0,i=e.length;r<i;r++)n.$off(e[r],t);return n}var s,a=n._events[e];if(!a)return n;if(!t)return n._events[e]=null,n;for(var l=a.length;l--;)if((s=a[l])===t||s.fn===t){a.splice(l,1);break}return n},e.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?T(n):n;for(var r=T(arguments,1),o='event handler for \"'.concat(e,'\"'),i=0,s=n.length;i<s;i++)nn(n[i],t,r,t,o)}return t}}(tr),function(e){e.prototype._update=function(e,t){var n=this,r=n.$el,o=n._vnode,i=Bt(n);n._vnode=e,n.$el=o?n.__patch__(o,e):n.__patch__(n.$el,e,t,!1),i(),r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n);for(var s=n;s&&s.$vnode&&s.$parent&&s.$vnode===s.$parent._vnode;)s.$parent.$el=s.$el,s=s.$parent},e.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){Yt(e,\"beforeDestroy\"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||w(t.$children,e),e._scope.stop(),e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),Yt(e,\"destroyed\"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}}}(tr),function(e){ft(e.prototype),e.prototype.$nextTick=function(e){return pn(e,this)},e.prototype._render=function(){var e,t=this,n=t.$options,r=n.render,i=n._parentVnode;i&&t._isMounted&&(t.$scopedSlots=yt(t.$parent,i.data.scopedSlots,t.$slots,t.$scopedSlots),t._slotsProxy&&kt(t._slotsProxy,t.$scopedSlots)),t.$vnode=i;try{fe(t),St=t,e=r.call(t._renderProxy,t.$createElement)}catch(n){tn(n,t,\"render\"),e=t._vnode}finally{St=null,fe()}return o(e)&&1===e.length&&(e=e[0]),e instanceof pe||(e=ge()),e.parent=i,e}}(tr);var ar=[String,RegExp,Array],lr={name:\"keep-alive\",abstract:!0,props:{include:ar,exclude:ar,max:[String,Number]},methods:{cacheVNode:function(){var e=this,t=e.cache,n=e.keys,r=e.vnodeToCache,o=e.keyToCache;if(r){var i=r.tag,s=r.componentInstance,a=r.componentOptions;t[o]={name:rr(a),tag:i,componentInstance:s},n.push(o),this.max&&n.length>parseInt(this.max)&&sr(t,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)sr(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch(\"include\",(function(t){ir(e,(function(e){return or(t,e)}))})),this.$watch(\"exclude\",(function(t){ir(e,(function(e){return!or(t,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=Mt(e),n=t&&t.componentOptions;if(n){var r=rr(n),o=this.include,i=this.exclude;if(o&&(!r||!or(o,r))||i&&r&&or(i,r))return t;var s=this.cache,a=this.keys,l=null==t.key?n.Ctor.cid+(n.tag?\"::\".concat(n.tag):\"\"):t.key;s[l]?(t.componentInstance=s[l].componentInstance,w(a,l),a.push(l)):(this.vnodeToCache=t,this.keyToCache=l),t.data.keepAlive=!0}return t||e&&e[0]}},cr={KeepAlive:lr};!function(e){var t={get:function(){return U}};Object.defineProperty(e,\"config\",t),e.util={warn:Hn,extend:F,mergeOptions:Gn,defineReactive:Ye},e.set=Pe,e.delete=Ie,e.nextTick=pn,e.observable=function(e){return Ne(e),e},e.options=Object.create(null),W.forEach((function(t){e.options[t+\"s\"]=Object.create(null)})),e.options._base=e,F(e.options.components,cr),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=T(arguments,1);return n.unshift(this),c(e.install)?e.install.apply(e,n):c(e)&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=Gn(this.options,e),this}}(e),nr(e),function(e){W.forEach((function(t){e[t]=function(e,n){return n?(\"component\"===t&&h(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),\"directive\"===t&&c(n)&&(n={bind:n,update:n}),this.options[t+\"s\"][e]=n,n):this.options[t+\"s\"][e]}}))}(e)}(tr),Object.defineProperty(tr.prototype,\"$isServer\",{get:le}),Object.defineProperty(tr.prototype,\"$ssrContext\",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(tr,\"FunctionalRenderContext\",{value:On}),tr.version=\"2.7.13\";var ur=y(\"style,class\"),dr=y(\"input,textarea,option,select,progress\"),hr=function(e,t,n){return\"value\"===n&&dr(e)&&\"button\"!==t||\"selected\"===n&&\"option\"===e||\"checked\"===n&&\"input\"===e||\"muted\"===n&&\"video\"===e},mr=y(\"contenteditable,draggable,spellcheck\"),fr=y(\"events,caret,typing,plaintext-only\"),pr=y(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible\"),gr=\"http://www.w3.org/1999/xlink\",vr=function(e){return\":\"===e.charAt(5)&&\"xlink\"===e.slice(0,5)},yr=function(e){return vr(e)?e.slice(6,e.length):\"\"},br=function(e){return null==e||!1===e};function _r(e){for(var t=e.data,n=e,r=e;s(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(t=wr(r.data,t));for(;s(n=n.parent);)n&&n.data&&(t=wr(t,n.data));return function(e,t){if(s(e)||s(t))return xr(e,Cr(t));return\"\"}(t.staticClass,t.class)}function wr(e,t){return{staticClass:xr(e.staticClass,t.staticClass),class:s(e.class)?[e.class,t.class]:t.class}}function xr(e,t){return e?t?e+\" \"+t:e:t||\"\"}function Cr(e){return Array.isArray(e)?function(e){for(var t,n=\"\",r=0,o=e.length;r<o;r++)s(t=Cr(e[r]))&&\"\"!==t&&(n&&(n+=\" \"),n+=t);return n}(e):u(e)?function(e){var t=\"\";for(var n in e)e[n]&&(t&&(t+=\" \"),t+=n);return t}(e):\"string\"==typeof e?e:\"\"}var kr={svg:\"http://www.w3.org/2000/svg\",math:\"http://www.w3.org/1998/Math/MathML\"},Dr=y(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot\"),Sr=y(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\",!0),Ar=function(e){return Dr(e)||Sr(e)};function Mr(e){return Sr(e)?\"svg\":\"math\"===e?\"math\":void 0}var Lr=Object.create(null);var Er=y(\"text,number,password,search,email,tel,url\");function Tr(e){if(\"string\"==typeof e){var t=document.querySelector(e);return t||document.createElement(\"div\")}return e}var Fr=Object.freeze({__proto__:null,createElement:function(e,t){var n=document.createElement(e);return\"select\"!==e||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute(\"multiple\",\"multiple\"),n},createElementNS:function(e,t){return document.createElementNS(kr[e],t)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,n){e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent=t},setStyleScope:function(e,t){e.setAttribute(t,\"\")}}),Or={create:function(e,t){Br(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Br(e,!0),Br(t))},destroy:function(e){Br(e,!0)}};function Br(e,t){var n=e.data.ref;if(s(n)){var r=e.context,i=e.componentInstance||e.elm,a=t?null:i,l=t?void 0:i;if(c(n))nn(n,r,[a],r,\"template ref function\");else{var u=e.data.refInFor,d=\"string\"==typeof n||\"number\"==typeof n,h=je(n),m=r.$refs;if(d||h)if(u){var f=d?m[n]:n.value;t?o(f)&&w(f,i):o(f)?f.includes(i)||f.push(i):d?(m[n]=[i],Rr(r,n,m[n])):n.value=[i]}else if(d){if(t&&m[n]!==i)return;m[n]=l,Rr(r,n,a)}else if(h){if(t&&n.value!==i)return;n.value=a}else 0}}}function Rr(e,t,n){var r=e._setupState;r&&C(r,t)&&(je(r[t])?r[t].value=n:r[t]=n)}var $r=new pe(\"\",{},[]),Nr=[\"create\",\"activate\",\"update\",\"remove\",\"destroy\"];function Yr(e,t){return e.key===t.key&&e.asyncFactory===t.asyncFactory&&(e.tag===t.tag&&e.isComment===t.isComment&&s(e.data)===s(t.data)&&function(e,t){if(\"input\"!==e.tag)return!0;var n,r=s(n=e.data)&&s(n=n.attrs)&&n.type,o=s(n=t.data)&&s(n=n.attrs)&&n.type;return r===o||Er(r)&&Er(o)}(e,t)||a(e.isAsyncPlaceholder)&&i(t.asyncFactory.error))}function Pr(e,t,n){var r,o,i={};for(r=t;r<=n;++r)s(o=e[r].key)&&(i[o]=r);return i}var Ir={create:Hr,update:Hr,destroy:function(e){Hr(e,$r)}};function Hr(e,t){(e.data.directives||t.data.directives)&&function(e,t){var n,r,o,i=e===$r,s=t===$r,a=Wr(e.data.directives,e.context),l=Wr(t.data.directives,t.context),c=[],u=[];for(n in l)r=a[n],o=l[n],r?(o.oldValue=r.value,o.oldArg=r.arg,Ur(o,\"update\",t,e),o.def&&o.def.componentUpdated&&u.push(o)):(Ur(o,\"bind\",t,e),o.def&&o.def.inserted&&c.push(o));if(c.length){var d=function(){for(var n=0;n<c.length;n++)Ur(c[n],\"inserted\",t,e)};i?qe(t,\"insert\",d):d()}u.length&&qe(t,\"postpatch\",(function(){for(var n=0;n<u.length;n++)Ur(u[n],\"componentUpdated\",t,e)}));if(!i)for(n in a)l[n]||Ur(a[n],\"unbind\",e,e,s)}(e,t)}var jr=Object.create(null);function Wr(e,t){var n,r,o=Object.create(null);if(!e)return o;for(n=0;n<e.length;n++){if((r=e[n]).modifiers||(r.modifiers=jr),o[zr(r)]=r,t._setupState&&t._setupState.__sfc){var i=r.def||Kn(t,\"_setupState\",\"v-\"+r.name);r.def=\"function\"==typeof i?{bind:i,update:i}:i}r.def=r.def||Kn(t.$options,\"directives\",r.name)}return o}function zr(e){return e.rawName||\"\".concat(e.name,\".\").concat(Object.keys(e.modifiers||{}).join(\".\"))}function Ur(e,t,n,r,o){var i=e.def&&e.def[t];if(i)try{i(n.elm,e,n,r,o)}catch(r){tn(r,n.context,\"directive \".concat(e.name,\" \").concat(t,\" hook\"))}}var Vr=[Or,Ir];function qr(e,t){var n=t.componentOptions;if(!(s(n)&&!1===n.Ctor.options.inheritAttrs||i(e.data.attrs)&&i(t.data.attrs))){var r,o,l=t.elm,c=e.data.attrs||{},u=t.data.attrs||{};for(r in(s(u.__ob__)||a(u._v_attr_proxy))&&(u=t.data.attrs=F({},u)),u)o=u[r],c[r]!==o&&Gr(l,r,o,t.data.pre);for(r in(Z||te)&&u.value!==c.value&&Gr(l,\"value\",u.value),c)i(u[r])&&(vr(r)?l.removeAttributeNS(gr,yr(r)):mr(r)||l.removeAttribute(r))}}function Gr(e,t,n,r){r||e.tagName.indexOf(\"-\")>-1?Kr(e,t,n):pr(t)?br(n)?e.removeAttribute(t):(n=\"allowfullscreen\"===t&&\"EMBED\"===e.tagName?\"true\":t,e.setAttribute(t,n)):mr(t)?e.setAttribute(t,function(e,t){return br(t)||\"false\"===t?\"false\":\"contenteditable\"===e&&fr(t)?t:\"true\"}(t,n)):vr(t)?br(n)?e.removeAttributeNS(gr,yr(t)):e.setAttributeNS(gr,t,n):Kr(e,t,n)}function Kr(e,t,n){if(br(n))e.removeAttribute(t);else{if(Z&&!ee&&\"TEXTAREA\"===e.tagName&&\"placeholder\"===t&&\"\"!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener(\"input\",r)};e.addEventListener(\"input\",r),e.__ieph=!0}e.setAttribute(t,n)}}var Xr={create:qr,update:qr};function Jr(e,t){var n=t.elm,r=t.data,o=e.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var a=_r(t),l=n._transitionClasses;s(l)&&(a=xr(a,Cr(l))),a!==n._prevClass&&(n.setAttribute(\"class\",a),n._prevClass=a)}}var Qr,Zr,eo,to,no,ro,oo={create:Jr,update:Jr},io=/[\\w).+\\-_$\\]]/;function so(e){var t,n,r,o,i,s=!1,a=!1,l=!1,c=!1,u=0,d=0,h=0,m=0;for(r=0;r<e.length;r++)if(n=t,t=e.charCodeAt(r),s)39===t&&92!==n&&(s=!1);else if(a)34===t&&92!==n&&(a=!1);else if(l)96===t&&92!==n&&(l=!1);else if(c)47===t&&92!==n&&(c=!1);else if(124!==t||124===e.charCodeAt(r+1)||124===e.charCodeAt(r-1)||u||d||h){switch(t){case 34:a=!0;break;case 39:s=!0;break;case 96:l=!0;break;case 40:h++;break;case 41:h--;break;case 91:d++;break;case 93:d--;break;case 123:u++;break;case 125:u--}if(47===t){for(var f=r-1,p=void 0;f>=0&&\" \"===(p=e.charAt(f));f--);p&&io.test(p)||(c=!0)}}else void 0===o?(m=r+1,o=e.slice(0,r).trim()):g();function g(){(i||(i=[])).push(e.slice(m,r).trim()),m=r+1}if(void 0===o?o=e.slice(0,r).trim():0!==m&&g(),i)for(r=0;r<i.length;r++)o=ao(o,i[r]);return o}function ao(e,t){var n=t.indexOf(\"(\");if(n<0)return'_f(\"'.concat(t,'\")(').concat(e,\")\");var r=t.slice(0,n),o=t.slice(n+1);return'_f(\"'.concat(r,'\")(').concat(e).concat(\")\"!==o?\",\"+o:o)}function lo(e,t){console.error(\"[Vue compiler]: \".concat(e))}function co(e,t){return e?e.map((function(e){return e[t]})).filter((function(e){return e})):[]}function uo(e,t,n,r,o){(e.props||(e.props=[])).push(_o({name:t,value:n,dynamic:o},r)),e.plain=!1}function ho(e,t,n,r,o){(o?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(e.attrs=[])).push(_o({name:t,value:n,dynamic:o},r)),e.plain=!1}function mo(e,t,n,r){e.attrsMap[t]=n,e.attrsList.push(_o({name:t,value:n},r))}function fo(e,t,n,r,o,i,s,a){(e.directives||(e.directives=[])).push(_o({name:t,rawName:n,value:r,arg:o,isDynamicArg:i,modifiers:s},a)),e.plain=!1}function po(e,t,n){return n?\"_p(\".concat(t,',\"').concat(e,'\")'):e+t}function go(e,t,n,o,i,s,a,l){var c;(o=o||r).right?l?t=\"(\".concat(t,\")==='click'?'contextmenu':(\").concat(t,\")\"):\"click\"===t&&(t=\"contextmenu\",delete o.right):o.middle&&(l?t=\"(\".concat(t,\")==='click'?'mouseup':(\").concat(t,\")\"):\"click\"===t&&(t=\"mouseup\")),o.capture&&(delete o.capture,t=po(\"!\",t,l)),o.once&&(delete o.once,t=po(\"~\",t,l)),o.passive&&(delete o.passive,t=po(\"&\",t,l)),o.native?(delete o.native,c=e.nativeEvents||(e.nativeEvents={})):c=e.events||(e.events={});var u=_o({value:n.trim(),dynamic:l},a);o!==r&&(u.modifiers=o);var d=c[t];Array.isArray(d)?i?d.unshift(u):d.push(u):c[t]=d?i?[u,d]:[d,u]:u,e.plain=!1}function vo(e,t,n){var r=yo(e,\":\"+t)||yo(e,\"v-bind:\"+t);if(null!=r)return so(r);if(!1!==n){var o=yo(e,t);if(null!=o)return JSON.stringify(o)}}function yo(e,t,n){var r;if(null!=(r=e.attrsMap[t]))for(var o=e.attrsList,i=0,s=o.length;i<s;i++)if(o[i].name===t){o.splice(i,1);break}return n&&delete e.attrsMap[t],r}function bo(e,t){for(var n=e.attrsList,r=0,o=n.length;r<o;r++){var i=n[r];if(t.test(i.name))return n.splice(r,1),i}}function _o(e,t){return t&&(null!=t.start&&(e.start=t.start),null!=t.end&&(e.end=t.end)),e}function wo(e,t,n){var r=n||{},o=r.number,i=\"$$v\",s=i;r.trim&&(s=\"(typeof \".concat(i,\" === 'string'\")+\"? \".concat(i,\".trim()\")+\": \".concat(i,\")\")),o&&(s=\"_n(\".concat(s,\")\"));var a=xo(t,s);e.model={value:\"(\".concat(t,\")\"),expression:JSON.stringify(t),callback:\"function (\".concat(i,\") {\").concat(a,\"}\")}}function xo(e,t){var n=function(e){if(e=e.trim(),Qr=e.length,e.indexOf(\"[\")<0||e.lastIndexOf(\"]\")<Qr-1)return(to=e.lastIndexOf(\".\"))>-1?{exp:e.slice(0,to),key:'\"'+e.slice(to+1)+'\"'}:{exp:e,key:null};Zr=e,to=no=ro=0;for(;!ko();)Do(eo=Co())?Ao(eo):91===eo&&So(eo);return{exp:e.slice(0,no),key:e.slice(no+1,ro)}}(e);return null===n.key?\"\".concat(e,\"=\").concat(t):\"$set(\".concat(n.exp,\", \").concat(n.key,\", \").concat(t,\")\")}function Co(){return Zr.charCodeAt(++to)}function ko(){return to>=Qr}function Do(e){return 34===e||39===e}function So(e){var t=1;for(no=to;!ko();)if(Do(e=Co()))Ao(e);else if(91===e&&t++,93===e&&t--,0===t){ro=to;break}}function Ao(e){for(var t=e;!ko()&&(e=Co())!==t;);}var Mo,Lo=\"__r\";function Eo(e,t,n){var r=Mo;return function o(){var i=t.apply(null,arguments);null!==i&&Oo(e,o,n,r)}}var To=an&&!(oe&&Number(oe[1])<=53);function Fo(e,t,n,r){if(To){var o=Ut,i=t;t=i._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=o||e.timeStamp<=0||e.target.ownerDocument!==document)return i.apply(this,arguments)}}Mo.addEventListener(e,t,se?{capture:n,passive:r}:n)}function Oo(e,t,n,r){(r||Mo).removeEventListener(e,t._wrapper||t,n)}function Bo(e,t){if(!i(e.data.on)||!i(t.data.on)){var n=t.data.on||{},r=e.data.on||{};Mo=t.elm||e.elm,function(e){if(s(e.__r)){var t=Z?\"change\":\"input\";e[t]=[].concat(e.__r,e[t]||[]),delete e.__r}s(e.__c)&&(e.change=[].concat(e.__c,e.change||[]),delete e.__c)}(n),Ve(n,r,Fo,Oo,Eo,t.context),Mo=void 0}}var Ro,$o={create:Bo,update:Bo,destroy:function(e){return Bo(e,$r)}};function No(e,t){if(!i(e.data.domProps)||!i(t.data.domProps)){var n,r,o=t.elm,l=e.data.domProps||{},c=t.data.domProps||{};for(n in(s(c.__ob__)||a(c._v_attr_proxy))&&(c=t.data.domProps=F({},c)),l)n in c||(o[n]=\"\");for(n in c){if(r=c[n],\"textContent\"===n||\"innerHTML\"===n){if(t.children&&(t.children.length=0),r===l[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if(\"value\"===n&&\"PROGRESS\"!==o.tagName){o._value=r;var u=i(r)?\"\":String(r);Yo(o,u)&&(o.value=u)}else if(\"innerHTML\"===n&&Sr(o.tagName)&&i(o.innerHTML)){(Ro=Ro||document.createElement(\"div\")).innerHTML=\"<svg>\".concat(r,\"</svg>\");for(var d=Ro.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;d.firstChild;)o.appendChild(d.firstChild)}else if(r!==l[n])try{o[n]=r}catch(e){}}}}function Yo(e,t){return!e.composing&&(\"OPTION\"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,r=e._vModifiers;if(s(r)){if(r.number)return v(n)!==v(t);if(r.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var Po={create:No,update:No},Io=k((function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\\))/g).forEach((function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}})),t}));function Ho(e){var t=jo(e.style);return e.staticStyle?F(e.staticStyle,t):t}function jo(e){return Array.isArray(e)?O(e):\"string\"==typeof e?Io(e):e}var Wo,zo=/^--/,Uo=/\\s*!important$/,Vo=function(e,t,n){if(zo.test(t))e.style.setProperty(t,n);else if(Uo.test(n))e.style.setProperty(L(t),n.replace(Uo,\"\"),\"important\");else{var r=Go(t);if(Array.isArray(n))for(var o=0,i=n.length;o<i;o++)e.style[r]=n[o];else e.style[r]=n}},qo=[\"Webkit\",\"Moz\",\"ms\"],Go=k((function(e){if(Wo=Wo||document.createElement(\"div\").style,\"filter\"!==(e=S(e))&&e in Wo)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<qo.length;n++){var r=qo[n]+t;if(r in Wo)return r}}));function Ko(e,t){var n=t.data,r=e.data;if(!(i(n.staticStyle)&&i(n.style)&&i(r.staticStyle)&&i(r.style))){var o,a,l=t.elm,c=r.staticStyle,u=r.normalizedStyle||r.style||{},d=c||u,h=jo(t.data.style)||{};t.data.normalizedStyle=s(h.__ob__)?F({},h):h;var m=function(e,t){var n,r={};if(t)for(var o=e;o.componentInstance;)(o=o.componentInstance._vnode)&&o.data&&(n=Ho(o.data))&&F(r,n);(n=Ho(e.data))&&F(r,n);for(var i=e;i=i.parent;)i.data&&(n=Ho(i.data))&&F(r,n);return r}(t,!0);for(a in d)i(m[a])&&Vo(l,a,\"\");for(a in m)(o=m[a])!==d[a]&&Vo(l,a,null==o?\"\":o)}}var Xo={create:Ko,update:Ko},Jo=/\\s+/;function Qo(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(\" \")>-1?t.split(Jo).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=\" \".concat(e.getAttribute(\"class\")||\"\",\" \");n.indexOf(\" \"+t+\" \")<0&&e.setAttribute(\"class\",(n+t).trim())}}function Zo(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(\" \")>-1?t.split(Jo).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute(\"class\");else{for(var n=\" \".concat(e.getAttribute(\"class\")||\"\",\" \"),r=\" \"+t+\" \";n.indexOf(r)>=0;)n=n.replace(r,\" \");(n=n.trim())?e.setAttribute(\"class\",n):e.removeAttribute(\"class\")}}function ei(e){if(e){if(\"object\"==typeof e){var t={};return!1!==e.css&&F(t,ti(e.name||\"v\")),F(t,e),t}return\"string\"==typeof e?ti(e):void 0}}var ti=k((function(e){return{enterClass:\"\".concat(e,\"-enter\"),enterToClass:\"\".concat(e,\"-enter-to\"),enterActiveClass:\"\".concat(e,\"-enter-active\"),leaveClass:\"\".concat(e,\"-leave\"),leaveToClass:\"\".concat(e,\"-leave-to\"),leaveActiveClass:\"\".concat(e,\"-leave-active\")}})),ni=J&&!ee,ri=\"transition\",oi=\"animation\",ii=\"transition\",si=\"transitionend\",ai=\"animation\",li=\"animationend\";ni&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ii=\"WebkitTransition\",si=\"webkitTransitionEnd\"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(ai=\"WebkitAnimation\",li=\"webkitAnimationEnd\"));var ci=J?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function ui(e){ci((function(){ci(e)}))}function di(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),Qo(e,t))}function hi(e,t){e._transitionClasses&&w(e._transitionClasses,t),Zo(e,t)}function mi(e,t,n){var r=pi(e,t),o=r.type,i=r.timeout,s=r.propCount;if(!o)return n();var a=o===ri?si:li,l=0,c=function(){e.removeEventListener(a,u),n()},u=function(t){t.target===e&&++l>=s&&c()};setTimeout((function(){l<s&&c()}),i+1),e.addEventListener(a,u)}var fi=/\\b(transform|all)(,|$)/;function pi(e,t){var n,r=window.getComputedStyle(e),o=(r[ii+\"Delay\"]||\"\").split(\", \"),i=(r[ii+\"Duration\"]||\"\").split(\", \"),s=gi(o,i),a=(r[ai+\"Delay\"]||\"\").split(\", \"),l=(r[ai+\"Duration\"]||\"\").split(\", \"),c=gi(a,l),u=0,d=0;return t===ri?s>0&&(n=ri,u=s,d=i.length):t===oi?c>0&&(n=oi,u=c,d=l.length):d=(n=(u=Math.max(s,c))>0?s>c?ri:oi:null)?n===ri?i.length:l.length:0,{type:n,timeout:u,propCount:d,hasTransform:n===ri&&fi.test(r[ii+\"Property\"])}}function gi(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.apply(null,t.map((function(t,n){return vi(t)+vi(e[n])})))}function vi(e){return 1e3*Number(e.slice(0,-1).replace(\",\",\".\"))}function yi(e,t){var n=e.elm;s(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._leaveCb());var r=ei(e.data.transition);if(!i(r)&&!s(n._enterCb)&&1===n.nodeType){for(var o=r.css,a=r.type,l=r.enterClass,d=r.enterToClass,h=r.enterActiveClass,m=r.appearClass,f=r.appearToClass,p=r.appearActiveClass,g=r.beforeEnter,y=r.enter,b=r.afterEnter,_=r.enterCancelled,w=r.beforeAppear,x=r.appear,C=r.afterAppear,k=r.appearCancelled,D=r.duration,S=Ot,A=Ot.$vnode;A&&A.parent;)S=A.context,A=A.parent;var M=!S._isMounted||!e.isRootInsert;if(!M||x||\"\"===x){var L=M&&m?m:l,E=M&&p?p:h,T=M&&f?f:d,F=M&&w||g,O=M&&c(x)?x:y,B=M&&C||b,R=M&&k||_,$=v(u(D)?D.enter:D);0;var N=!1!==o&&!ee,Y=wi(O),P=n._enterCb=I((function(){N&&(hi(n,T),hi(n,E)),P.cancelled?(N&&hi(n,L),R&&R(n)):B&&B(n),n._enterCb=null}));e.data.show||qe(e,\"insert\",(function(){var t=n.parentNode,r=t&&t._pending&&t._pending[e.key];r&&r.tag===e.tag&&r.elm._leaveCb&&r.elm._leaveCb(),O&&O(n,P)})),F&&F(n),N&&(di(n,L),di(n,E),ui((function(){hi(n,L),P.cancelled||(di(n,T),Y||(_i($)?setTimeout(P,$):mi(n,a,P)))}))),e.data.show&&(t&&t(),O&&O(n,P)),N||Y||P()}}}function bi(e,t){var n=e.elm;s(n._enterCb)&&(n._enterCb.cancelled=!0,n._enterCb());var r=ei(e.data.transition);if(i(r)||1!==n.nodeType)return t();if(!s(n._leaveCb)){var o=r.css,a=r.type,l=r.leaveClass,c=r.leaveToClass,d=r.leaveActiveClass,h=r.beforeLeave,m=r.leave,f=r.afterLeave,p=r.leaveCancelled,g=r.delayLeave,y=r.duration,b=!1!==o&&!ee,_=wi(m),w=v(u(y)?y.leave:y);0;var x=n._leaveCb=I((function(){n.parentNode&&n.parentNode._pending&&(n.parentNode._pending[e.key]=null),b&&(hi(n,c),hi(n,d)),x.cancelled?(b&&hi(n,l),p&&p(n)):(t(),f&&f(n)),n._leaveCb=null}));g?g(C):C()}function C(){x.cancelled||(!e.data.show&&n.parentNode&&((n.parentNode._pending||(n.parentNode._pending={}))[e.key]=e),h&&h(n),b&&(di(n,l),di(n,d),ui((function(){hi(n,l),x.cancelled||(di(n,c),_||(_i(w)?setTimeout(x,w):mi(n,a,x)))}))),m&&m(n,x),b||_||x())}}function _i(e){return\"number\"==typeof e&&!isNaN(e)}function wi(e){if(i(e))return!1;var t=e.fns;return s(t)?wi(Array.isArray(t)?t[0]:t):(e._length||e.length)>1}function xi(e,t){!0!==t.data.show&&yi(t)}var Ci=function(e){var t,n,r={},c=e.modules,u=e.nodeOps;for(t=0;t<Nr.length;++t)for(r[Nr[t]]=[],n=0;n<c.length;++n)s(c[n][Nr[t]])&&r[Nr[t]].push(c[n][Nr[t]]);function d(e){var t=u.parentNode(e);s(t)&&u.removeChild(t,e)}function h(e,t,n,o,i,l,c){if(s(e.elm)&&s(l)&&(e=l[c]=ye(e)),e.isRootInsert=!i,!function(e,t,n,o){var i=e.data;if(s(i)){var l=s(e.componentInstance)&&i.keepAlive;if(s(i=i.hook)&&s(i=i.init)&&i(e,!1),s(e.componentInstance))return m(e,t),f(n,e.elm,o),a(l)&&function(e,t,n,o){var i,a=e;for(;a.componentInstance;)if(s(i=(a=a.componentInstance._vnode).data)&&s(i=i.transition)){for(i=0;i<r.activate.length;++i)r.activate[i]($r,a);t.push(a);break}f(n,e.elm,o)}(e,t,n,o),!0}}(e,t,n,o)){var d=e.data,h=e.children,g=e.tag;s(g)?(e.elm=e.ns?u.createElementNS(e.ns,g):u.createElement(g,e),b(e),p(e,h,t),s(d)&&v(e,t),f(n,e.elm,o)):a(e.isComment)?(e.elm=u.createComment(e.text),f(n,e.elm,o)):(e.elm=u.createTextNode(e.text),f(n,e.elm,o))}}function m(e,t){s(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,g(e)?(v(e,t),b(e)):(Br(e),t.push(e))}function f(e,t,n){s(e)&&(s(n)?u.parentNode(n)===e&&u.insertBefore(e,t,n):u.appendChild(e,t))}function p(e,t,n){if(o(t)){0;for(var r=0;r<t.length;++r)h(t[r],n,e.elm,null,!0,t,r)}else l(e.text)&&u.appendChild(e.elm,u.createTextNode(String(e.text)))}function g(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return s(e.tag)}function v(e,n){for(var o=0;o<r.create.length;++o)r.create[o]($r,e);s(t=e.data.hook)&&(s(t.create)&&t.create($r,e),s(t.insert)&&n.push(e))}function b(e){var t;if(s(t=e.fnScopeId))u.setStyleScope(e.elm,t);else for(var n=e;n;)s(t=n.context)&&s(t=t.$options._scopeId)&&u.setStyleScope(e.elm,t),n=n.parent;s(t=Ot)&&t!==e.context&&t!==e.fnContext&&s(t=t.$options._scopeId)&&u.setStyleScope(e.elm,t)}function _(e,t,n,r,o,i){for(;r<=o;++r)h(n[r],i,e,t,!1,n,r)}function w(e){var t,n,o=e.data;if(s(o))for(s(t=o.hook)&&s(t=t.destroy)&&t(e),t=0;t<r.destroy.length;++t)r.destroy[t](e);if(s(t=e.children))for(n=0;n<e.children.length;++n)w(e.children[n])}function x(e,t,n){for(;t<=n;++t){var r=e[t];s(r)&&(s(r.tag)?(C(r),w(r)):d(r.elm))}}function C(e,t){if(s(t)||s(e.data)){var n,o=r.remove.length+1;for(s(t)?t.listeners+=o:t=function(e,t){function n(){0==--n.listeners&&d(e)}return n.listeners=t,n}(e.elm,o),s(n=e.componentInstance)&&s(n=n._vnode)&&s(n.data)&&C(n,t),n=0;n<r.remove.length;++n)r.remove[n](e,t);s(n=e.data.hook)&&s(n=n.remove)?n(e,t):t()}else d(e.elm)}function k(e,t,n,r){for(var o=n;o<r;o++){var i=t[o];if(s(i)&&Yr(e,i))return o}}function D(e,t,n,o,l,c){if(e!==t){s(t.elm)&&s(o)&&(t=o[l]=ye(t));var d=t.elm=e.elm;if(a(e.isAsyncPlaceholder))s(t.asyncFactory.resolved)?M(e.elm,t,n):t.isAsyncPlaceholder=!0;else if(a(t.isStatic)&&a(e.isStatic)&&t.key===e.key&&(a(t.isCloned)||a(t.isOnce)))t.componentInstance=e.componentInstance;else{var m,f=t.data;s(f)&&s(m=f.hook)&&s(m=m.prepatch)&&m(e,t);var p=e.children,v=t.children;if(s(f)&&g(t)){for(m=0;m<r.update.length;++m)r.update[m](e,t);s(m=f.hook)&&s(m=m.update)&&m(e,t)}i(t.text)?s(p)&&s(v)?p!==v&&function(e,t,n,r,o){var a,l,c,d=0,m=0,f=t.length-1,p=t[0],g=t[f],v=n.length-1,y=n[0],b=n[v],w=!o;for(;d<=f&&m<=v;)i(p)?p=t[++d]:i(g)?g=t[--f]:Yr(p,y)?(D(p,y,r,n,m),p=t[++d],y=n[++m]):Yr(g,b)?(D(g,b,r,n,v),g=t[--f],b=n[--v]):Yr(p,b)?(D(p,b,r,n,v),w&&u.insertBefore(e,p.elm,u.nextSibling(g.elm)),p=t[++d],b=n[--v]):Yr(g,y)?(D(g,y,r,n,m),w&&u.insertBefore(e,g.elm,p.elm),g=t[--f],y=n[++m]):(i(a)&&(a=Pr(t,d,f)),i(l=s(y.key)?a[y.key]:k(y,t,d,f))?h(y,r,e,p.elm,!1,n,m):Yr(c=t[l],y)?(D(c,y,r,n,m),t[l]=void 0,w&&u.insertBefore(e,c.elm,p.elm)):h(y,r,e,p.elm,!1,n,m),y=n[++m]);d>f?_(e,i(n[v+1])?null:n[v+1].elm,n,m,v,r):m>v&&x(t,d,f)}(d,p,v,n,c):s(v)?(s(e.text)&&u.setTextContent(d,\"\"),_(d,null,v,0,v.length-1,n)):s(p)?x(p,0,p.length-1):s(e.text)&&u.setTextContent(d,\"\"):e.text!==t.text&&u.setTextContent(d,t.text),s(f)&&s(m=f.hook)&&s(m=m.postpatch)&&m(e,t)}}}function S(e,t,n){if(a(n)&&s(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}var A=y(\"attrs,class,staticClass,staticStyle,key\");function M(e,t,n,r){var o,i=t.tag,l=t.data,c=t.children;if(r=r||l&&l.pre,t.elm=e,a(t.isComment)&&s(t.asyncFactory))return t.isAsyncPlaceholder=!0,!0;if(s(l)&&(s(o=l.hook)&&s(o=o.init)&&o(t,!0),s(o=t.componentInstance)))return m(t,n),!0;if(s(i)){if(s(c))if(e.hasChildNodes())if(s(o=l)&&s(o=o.domProps)&&s(o=o.innerHTML)){if(o!==e.innerHTML)return!1}else{for(var u=!0,d=e.firstChild,h=0;h<c.length;h++){if(!d||!M(d,c[h],n,r)){u=!1;break}d=d.nextSibling}if(!u||d)return!1}else p(t,c,n);if(s(l)){var f=!1;for(var g in l)if(!A(g)){f=!0,v(t,n);break}!f&&l.class&&yn(l.class)}}else e.data!==t.text&&(e.data=t.text);return!0}return function(e,t,n,o){if(!i(t)){var l,c=!1,d=[];if(i(e))c=!0,h(t,d);else{var m=s(e.nodeType);if(!m&&Yr(e,t))D(e,t,d,null,null,o);else{if(m){if(1===e.nodeType&&e.hasAttribute(j)&&(e.removeAttribute(j),n=!0),a(n)&&M(e,t,d))return S(t,d,!0),e;l=e,e=new pe(u.tagName(l).toLowerCase(),{},[],void 0,l)}var f=e.elm,p=u.parentNode(f);if(h(t,d,f._leaveCb?null:p,u.nextSibling(f)),s(t.parent))for(var v=t.parent,y=g(t);v;){for(var b=0;b<r.destroy.length;++b)r.destroy[b](v);if(v.elm=t.elm,y){for(var _=0;_<r.create.length;++_)r.create[_]($r,v);var C=v.data.hook.insert;if(C.merged)for(var k=1;k<C.fns.length;k++)C.fns[k]()}else Br(v);v=v.parent}s(p)?x([e],0,0):s(e.tag)&&w(e)}}return S(t,d,c),t.elm}s(e)&&w(e)}}({nodeOps:Fr,modules:[Xr,oo,$o,Po,Xo,J?{create:xi,activate:xi,remove:function(e,t){!0!==e.data.show?bi(e,t):t()}}:{}].concat(Vr)});ee&&document.addEventListener(\"selectionchange\",(function(){var e=document.activeElement;e&&e.vmodel&&Ti(e,\"input\")}));var ki={inserted:function(e,t,n,r){\"select\"===n.tag?(r.elm&&!r.elm._vOptions?qe(n,\"postpatch\",(function(){ki.componentUpdated(e,t,n)})):Di(e,t,n.context),e._vOptions=[].map.call(e.options,Mi)):(\"textarea\"===n.tag||Er(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener(\"compositionstart\",Li),e.addEventListener(\"compositionend\",Ei),e.addEventListener(\"change\",Ei),ee&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if(\"select\"===n.tag){Di(e,t,n.context);var r=e._vOptions,o=e._vOptions=[].map.call(e.options,Mi);if(o.some((function(e,t){return!Y(e,r[t])})))(e.multiple?t.value.some((function(e){return Ai(e,o)})):t.value!==t.oldValue&&Ai(t.value,o))&&Ti(e,\"change\")}}};function Di(e,t,n){Si(e,t,n),(Z||te)&&setTimeout((function(){Si(e,t,n)}),0)}function Si(e,t,n){var r=t.value,o=e.multiple;if(!o||Array.isArray(r)){for(var i,s,a=0,l=e.options.length;a<l;a++)if(s=e.options[a],o)i=P(r,Mi(s))>-1,s.selected!==i&&(s.selected=i);else if(Y(Mi(s),r))return void(e.selectedIndex!==a&&(e.selectedIndex=a));o||(e.selectedIndex=-1)}}function Ai(e,t){return t.every((function(t){return!Y(t,e)}))}function Mi(e){return\"_value\"in e?e._value:e.value}function Li(e){e.target.composing=!0}function Ei(e){e.target.composing&&(e.target.composing=!1,Ti(e.target,\"input\"))}function Ti(e,t){var n=document.createEvent(\"HTMLEvents\");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Fi(e){return!e.componentInstance||e.data&&e.data.transition?e:Fi(e.componentInstance._vnode)}var Oi={bind:function(e,t,n){var r=t.value,o=(n=Fi(n)).data&&n.data.transition,i=e.__vOriginalDisplay=\"none\"===e.style.display?\"\":e.style.display;r&&o?(n.data.show=!0,yi(n,(function(){e.style.display=i}))):e.style.display=r?i:\"none\"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Fi(n)).data&&n.data.transition?(n.data.show=!0,r?yi(n,(function(){e.style.display=e.__vOriginalDisplay})):bi(n,(function(){e.style.display=\"none\"}))):e.style.display=r?e.__vOriginalDisplay:\"none\")},unbind:function(e,t,n,r,o){o||(e.style.display=e.__vOriginalDisplay)}},Bi={model:ki,show:Oi},Ri={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function $i(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?$i(Mt(t.children)):e}function Ni(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var r in o)t[S(r)]=o[r];return t}function Yi(e,t){if(/\\d-keep-alive$/.test(t.tag))return e(\"keep-alive\",{props:t.componentOptions.propsData})}var Pi=function(e){return e.tag||vt(e)},Ii=function(e){return\"show\"===e.name},Hi={name:\"transition\",props:Ri,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(Pi)).length){0;var r=this.mode;0;var o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var i=$i(o);if(!i)return o;if(this._leaving)return Yi(e,o);var s=\"__transition-\".concat(this._uid,\"-\");i.key=null==i.key?i.isComment?s+\"comment\":s+i.tag:l(i.key)?0===String(i.key).indexOf(s)?i.key:s+i.key:i.key;var a=(i.data||(i.data={})).transition=Ni(this),c=this._vnode,u=$i(c);if(i.data.directives&&i.data.directives.some(Ii)&&(i.data.show=!0),u&&u.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(i,u)&&!vt(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var d=u.data.transition=F({},a);if(\"out-in\"===r)return this._leaving=!0,qe(d,\"afterLeave\",(function(){t._leaving=!1,t.$forceUpdate()})),Yi(e,o);if(\"in-out\"===r){if(vt(i))return c;var h,m=function(){h()};qe(a,\"afterEnter\",m),qe(a,\"enterCancelled\",m),qe(d,\"delayLeave\",(function(e){h=e}))}}return o}}},ji=F({tag:String,moveClass:String},Ri);delete ji.mode;var Wi={props:ji,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var o=Bt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,o(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||\"span\",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],s=Ni(this),a=0;a<o.length;a++){if((u=o[a]).tag)if(null!=u.key&&0!==String(u.key).indexOf(\"__vlist\"))i.push(u),n[u.key]=u,(u.data||(u.data={})).transition=s;else;}if(r){var l=[],c=[];for(a=0;a<r.length;a++){var u;(u=r[a]).data.transition=s,u.data.pos=u.elm.getBoundingClientRect(),n[u.key]?l.push(u):c.push(u)}this.kept=e(t,null,l),this.removed=c}return e(t,null,i)},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||\"v\")+\"-move\";e.length&&this.hasMove(e[0].elm,t)&&(e.forEach(zi),e.forEach(Ui),e.forEach(Vi),this._reflow=document.body.offsetHeight,e.forEach((function(e){if(e.data.moved){var n=e.elm,r=n.style;di(n,t),r.transform=r.WebkitTransform=r.transitionDuration=\"\",n.addEventListener(si,n._moveCb=function e(r){r&&r.target!==n||r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(si,e),n._moveCb=null,hi(n,t))})}})))},methods:{hasMove:function(e,t){if(!ni)return!1;if(this._hasMove)return this._hasMove;var n=e.cloneNode();e._transitionClasses&&e._transitionClasses.forEach((function(e){Zo(n,e)})),Qo(n,t),n.style.display=\"none\",this.$el.appendChild(n);var r=pi(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}};function zi(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function Ui(e){e.data.newPos=e.elm.getBoundingClientRect()}function Vi(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,o=t.top-n.top;if(r||o){e.data.moved=!0;var i=e.elm.style;i.transform=i.WebkitTransform=\"translate(\".concat(r,\"px,\").concat(o,\"px)\"),i.transitionDuration=\"0s\"}}var qi={Transition:Hi,TransitionGroup:Wi};tr.config.mustUseProp=hr,tr.config.isReservedTag=Ar,tr.config.isReservedAttr=ur,tr.config.getTagNamespace=Mr,tr.config.isUnknownElement=function(e){if(!J)return!0;if(Ar(e))return!1;if(e=e.toLowerCase(),null!=Lr[e])return Lr[e];var t=document.createElement(e);return e.indexOf(\"-\")>-1?Lr[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Lr[e]=/HTMLUnknownElement/.test(t.toString())},F(tr.options.directives,Bi),F(tr.options.components,qi),tr.prototype.__patch__=J?Ci:B,tr.prototype.$mount=function(e,t){return function(e,t,n){var r;e.$el=t,e.$options.render||(e.$options.render=ge),Yt(e,\"beforeMount\"),r=function(){e._update(e._render(),n)},new wn(e,r,B,{before:function(){e._isMounted&&!e._isDestroyed&&Yt(e,\"beforeUpdate\")}},!0),n=!1;var o=e._preWatchers;if(o)for(var i=0;i<o.length;i++)o[i].run();return null==e.$vnode&&(e._isMounted=!0,Yt(e,\"mounted\")),e}(this,e=e&&J?Tr(e):void 0,t)},J&&setTimeout((function(){U.devtools&&ce&&ce.emit(\"init\",tr)}),0);var Gi=/\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g,Ki=/[-.*+?^${}()|[\\]\\/\\\\]/g,Xi=k((function(e){var t=e[0].replace(Ki,\"\\\\$&\"),n=e[1].replace(Ki,\"\\\\$&\");return new RegExp(t+\"((?:.|\\\\n)+?)\"+n,\"g\")}));var Ji={staticKeys:[\"staticClass\"],transformNode:function(e,t){t.warn;var n=yo(e,\"class\");n&&(e.staticClass=JSON.stringify(n.replace(/\\s+/g,\" \").trim()));var r=vo(e,\"class\",!1);r&&(e.classBinding=r)},genData:function(e){var t=\"\";return e.staticClass&&(t+=\"staticClass:\".concat(e.staticClass,\",\")),e.classBinding&&(t+=\"class:\".concat(e.classBinding,\",\")),t}};var Qi,Zi={staticKeys:[\"staticStyle\"],transformNode:function(e,t){t.warn;var n=yo(e,\"style\");n&&(e.staticStyle=JSON.stringify(Io(n)));var r=vo(e,\"style\",!1);r&&(e.styleBinding=r)},genData:function(e){var t=\"\";return e.staticStyle&&(t+=\"staticStyle:\".concat(e.staticStyle,\",\")),e.styleBinding&&(t+=\"style:(\".concat(e.styleBinding,\"),\")),t}},es=function(e){return(Qi=Qi||document.createElement(\"div\")).innerHTML=e,Qi.textContent},ts=y(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),ns=y(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),rs=y(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),os=/^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,is=/^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+?\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,ss=\"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\".concat(V.source,\"]*\"),as=\"((?:\".concat(ss,\"\\\\:)?\").concat(ss,\")\"),ls=new RegExp(\"^<\".concat(as)),cs=/^\\s*(\\/?)>/,us=new RegExp(\"^<\\\\/\".concat(as,\"[^>]*>\")),ds=/^<!DOCTYPE [^>]+>/i,hs=/^<!\\--/,ms=/^<!\\[/,fs=y(\"script,style,textarea\",!0),ps={},gs={\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&amp;\":\"&\",\"&#10;\":\"\\n\",\"&#9;\":\"\\t\",\"&#39;\":\"'\"},vs=/&(?:lt|gt|quot|amp|#39);/g,ys=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,bs=y(\"pre,textarea\",!0),_s=function(e,t){return e&&bs(e)&&\"\\n\"===t[0]};function ws(e,t){var n=t?ys:vs;return e.replace(n,(function(e){return gs[e]}))}function xs(e,t){for(var n,r,o=[],i=t.expectHTML,s=t.isUnaryTag||R,a=t.canBeLeftOpenTag||R,l=0,c=function(){if(n=e,r&&fs(r)){var c=0,h=r.toLowerCase(),m=ps[h]||(ps[h]=new RegExp(\"([\\\\s\\\\S]*?)(</\"+h+\"[^>]*>)\",\"i\"));x=e.replace(m,(function(e,n,r){return c=r.length,fs(h)||\"noscript\"===h||(n=n.replace(/<!\\--([\\s\\S]*?)-->/g,\"$1\").replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g,\"$1\")),_s(h,n)&&(n=n.slice(1)),t.chars&&t.chars(n),\"\"}));l+=e.length-x.length,e=x,d(h,l-c,l)}else{var f=e.indexOf(\"<\");if(0===f){if(hs.test(e)){var p=e.indexOf(\"--\\x3e\");if(p>=0)return t.shouldKeepComment&&t.comment&&t.comment(e.substring(4,p),l,l+p+3),u(p+3),\"continue\"}if(ms.test(e)){var g=e.indexOf(\"]>\");if(g>=0)return u(g+2),\"continue\"}var v=e.match(ds);if(v)return u(v[0].length),\"continue\";var y=e.match(us);if(y){var b=l;return u(y[0].length),d(y[1],b,l),\"continue\"}var _=function(){var t=e.match(ls);if(t){var n={tagName:t[1],attrs:[],start:l};u(t[0].length);for(var r=void 0,o=void 0;!(r=e.match(cs))&&(o=e.match(is)||e.match(os));)o.start=l,u(o[0].length),o.end=l,n.attrs.push(o);if(r)return n.unarySlash=r[1],u(r[0].length),n.end=l,n}}();if(_)return function(e){var n=e.tagName,l=e.unarySlash;i&&(\"p\"===r&&rs(n)&&d(r),a(n)&&r===n&&d(n));for(var c=s(n)||!!l,u=e.attrs.length,h=new Array(u),m=0;m<u;m++){var f=e.attrs[m],p=f[3]||f[4]||f[5]||\"\",g=\"a\"===n&&\"href\"===f[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;h[m]={name:f[1],value:ws(p,g)}}c||(o.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:h,start:e.start,end:e.end}),r=n);t.start&&t.start(n,h,c,e.start,e.end)}(_),_s(_.tagName,e)&&u(1),\"continue\"}var w=void 0,x=void 0,C=void 0;if(f>=0){for(x=e.slice(f);!(us.test(x)||ls.test(x)||hs.test(x)||ms.test(x)||(C=x.indexOf(\"<\",1))<0);)f+=C,x=e.slice(f);w=e.substring(0,f)}f<0&&(w=e),w&&u(w.length),t.chars&&w&&t.chars(w,l-w.length,l)}if(e===n)return t.chars&&t.chars(e),\"break\"};e;){if(\"break\"===c())break}function u(t){l+=t,e=e.substring(t)}function d(e,n,i){var s,a;if(null==n&&(n=l),null==i&&(i=l),e)for(a=e.toLowerCase(),s=o.length-1;s>=0&&o[s].lowerCasedTag!==a;s--);else s=0;if(s>=0){for(var c=o.length-1;c>=s;c--)t.end&&t.end(o[c].tag,n,i);o.length=s,r=s&&o[s-1].tag}else\"br\"===a?t.start&&t.start(e,[],!0,n,i):\"p\"===a&&(t.start&&t.start(e,[],!1,n,i),t.end&&t.end(e,n,i))}d()}var Cs,ks,Ds,Ss,As,Ms,Ls,Es,Ts=/^@|^v-on:/,Fs=/^v-|^@|^:|^#/,Os=/([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,Bs=/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,Rs=/^\\(|\\)$/g,$s=/^\\[.*\\]$/,Ns=/:(.*)$/,Ys=/^:|^\\.|^v-bind:/,Ps=/\\.[^.\\]]+(?=[^\\]]*$)/g,Is=/^v-slot(:|$)|^#/,Hs=/[\\r\\n]/,js=/[ \\f\\t\\r\\n]+/g,Ws=k(es),zs=\"_empty_\";function Us(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:Qs(t),rawAttrsMap:{},parent:n,children:[]}}function Vs(e,t){Cs=t.warn||lo,Ms=t.isPreTag||R,Ls=t.mustUseProp||R,Es=t.getTagNamespace||R;var n=t.isReservedTag||R;(function(e){return!(!(e.component||e.attrsMap[\":is\"]||e.attrsMap[\"v-bind:is\"])&&(e.attrsMap.is?n(e.attrsMap.is):n(e.tag)))}),Ds=co(t.modules,\"transformNode\"),Ss=co(t.modules,\"preTransformNode\"),As=co(t.modules,\"postTransformNode\"),ks=t.delimiters;var r,o,i=[],s=!1!==t.preserveWhitespace,a=t.whitespace,l=!1,c=!1;function u(e){if(d(e),l||e.processed||(e=qs(e,t)),i.length||e===r||r.if&&(e.elseif||e.else)&&Ks(r,{exp:e.elseif,block:e}),o&&!e.forbidden)if(e.elseif||e.else)s=e,a=function(e){for(var t=e.length;t--;){if(1===e[t].type)return e[t];e.pop()}}(o.children),a&&a.if&&Ks(a,{exp:s.elseif,block:s});else{if(e.slotScope){var n=e.slotTarget||'\"default\"';(o.scopedSlots||(o.scopedSlots={}))[n]=e}o.children.push(e),e.parent=o}var s,a;e.children=e.children.filter((function(e){return!e.slotScope})),d(e),e.pre&&(l=!1),Ms(e.tag)&&(c=!1);for(var u=0;u<As.length;u++)As[u](e,t)}function d(e){if(!c)for(var t=void 0;(t=e.children[e.children.length-1])&&3===t.type&&\" \"===t.text;)e.children.pop()}return xs(e,{warn:Cs,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,n,s,a,d){var h=o&&o.ns||Es(e);Z&&\"svg\"===h&&(n=function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];Zs.test(r.name)||(r.name=r.name.replace(ea,\"\"),t.push(r))}return t}(n));var m,f=Us(e,n,o);h&&(f.ns=h),\"style\"!==(m=f).tag&&(\"script\"!==m.tag||m.attrsMap.type&&\"text/javascript\"!==m.attrsMap.type)||le()||(f.forbidden=!0);for(var p=0;p<Ss.length;p++)f=Ss[p](f,t)||f;l||(!function(e){null!=yo(e,\"v-pre\")&&(e.pre=!0)}(f),f.pre&&(l=!0)),Ms(f.tag)&&(c=!0),l?function(e){var t=e.attrsList,n=t.length;if(n)for(var r=e.attrs=new Array(n),o=0;o<n;o++)r[o]={name:t[o].name,value:JSON.stringify(t[o].value)},null!=t[o].start&&(r[o].start=t[o].start,r[o].end=t[o].end);else e.pre||(e.plain=!0)}(f):f.processed||(Gs(f),function(e){var t=yo(e,\"v-if\");if(t)e.if=t,Ks(e,{exp:t,block:e});else{null!=yo(e,\"v-else\")&&(e.else=!0);var n=yo(e,\"v-else-if\");n&&(e.elseif=n)}}(f),function(e){null!=yo(e,\"v-once\")&&(e.once=!0)}(f)),r||(r=f),s?u(f):(o=f,i.push(f))},end:function(e,t,n){var r=i[i.length-1];i.length-=1,o=i[i.length-1],u(r)},chars:function(e,t,n){if(o&&(!Z||\"textarea\"!==o.tag||o.attrsMap.placeholder!==e)){var r,i=o.children;if(e=c||e.trim()?\"script\"===(r=o).tag||\"style\"===r.tag?e:Ws(e):i.length?a?\"condense\"===a&&Hs.test(e)?\"\":\" \":s?\" \":\"\":\"\"){c||\"condense\"!==a||(e=e.replace(js,\" \"));var u=void 0,d=void 0;!l&&\" \"!==e&&(u=function(e,t){var n=t?Xi(t):Gi;if(n.test(e)){for(var r,o,i,s=[],a=[],l=n.lastIndex=0;r=n.exec(e);){(o=r.index)>l&&(a.push(i=e.slice(l,o)),s.push(JSON.stringify(i)));var c=so(r[1].trim());s.push(\"_s(\".concat(c,\")\")),a.push({\"@binding\":c}),l=o+r[0].length}return l<e.length&&(a.push(i=e.slice(l)),s.push(JSON.stringify(i))),{expression:s.join(\"+\"),tokens:a}}}(e,ks))?d={type:2,expression:u.expression,tokens:u.tokens,text:e}:\" \"===e&&i.length&&\" \"===i[i.length-1].text||(d={type:3,text:e}),d&&i.push(d)}}},comment:function(e,t,n){if(o){var r={type:3,text:e,isComment:!0};0,o.children.push(r)}}}),r}function qs(e,t){var n;!function(e){var t=vo(e,\"key\");if(t){e.key=t}}(e),e.plain=!e.key&&!e.scopedSlots&&!e.attrsList.length,function(e){var t=vo(e,\"ref\");t&&(e.ref=t,e.refInFor=function(e){var t=e;for(;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}(e))}(e),function(e){var t;\"template\"===e.tag?(t=yo(e,\"scope\"),e.slotScope=t||yo(e,\"slot-scope\")):(t=yo(e,\"slot-scope\"))&&(e.slotScope=t);var n=vo(e,\"slot\");n&&(e.slotTarget='\"\"'===n?'\"default\"':n,e.slotTargetDynamic=!(!e.attrsMap[\":slot\"]&&!e.attrsMap[\"v-bind:slot\"]),\"template\"===e.tag||e.slotScope||ho(e,\"slot\",n,function(e,t){return e.rawAttrsMap[\":\"+t]||e.rawAttrsMap[\"v-bind:\"+t]||e.rawAttrsMap[t]}(e,\"slot\")));if(\"template\"===e.tag){if(s=bo(e,Is)){0;var r=Xs(s),o=r.name,i=r.dynamic;e.slotTarget=o,e.slotTargetDynamic=i,e.slotScope=s.value||zs}}else{var s;if(s=bo(e,Is)){0;var a=e.scopedSlots||(e.scopedSlots={}),l=Xs(s),c=l.name,u=(i=l.dynamic,a[c]=Us(\"template\",[],e));u.slotTarget=c,u.slotTargetDynamic=i,u.children=e.children.filter((function(e){if(!e.slotScope)return e.parent=u,!0})),u.slotScope=s.value||zs,e.children=[],e.plain=!1}}}(e),\"slot\"===(n=e).tag&&(n.slotName=vo(n,\"name\")),function(e){var t;(t=vo(e,\"is\"))&&(e.component=t);null!=yo(e,\"inline-template\")&&(e.inlineTemplate=!0)}(e);for(var r=0;r<Ds.length;r++)e=Ds[r](e,t)||e;return function(e){var t,n,r,o,i,s,a,l,c=e.attrsList;for(t=0,n=c.length;t<n;t++){if(r=o=c[t].name,i=c[t].value,Fs.test(r))if(e.hasBindings=!0,(s=Js(r.replace(Fs,\"\")))&&(r=r.replace(Ps,\"\")),Ys.test(r))r=r.replace(Ys,\"\"),i=so(i),(l=$s.test(r))&&(r=r.slice(1,-1)),s&&(s.prop&&!l&&\"innerHtml\"===(r=S(r))&&(r=\"innerHTML\"),s.camel&&!l&&(r=S(r)),s.sync&&(a=xo(i,\"$event\"),l?go(e,'\"update:\"+('.concat(r,\")\"),a,null,!1,0,c[t],!0):(go(e,\"update:\".concat(S(r)),a,null,!1,0,c[t]),L(r)!==S(r)&&go(e,\"update:\".concat(L(r)),a,null,!1,0,c[t])))),s&&s.prop||!e.component&&Ls(e.tag,e.attrsMap.type,r)?uo(e,r,i,c[t],l):ho(e,r,i,c[t],l);else if(Ts.test(r))r=r.replace(Ts,\"\"),(l=$s.test(r))&&(r=r.slice(1,-1)),go(e,r,i,s,!1,0,c[t],l);else{var u=(r=r.replace(Fs,\"\")).match(Ns),d=u&&u[1];l=!1,d&&(r=r.slice(0,-(d.length+1)),$s.test(d)&&(d=d.slice(1,-1),l=!0)),fo(e,r,o,i,d,l,s,c[t])}else ho(e,r,JSON.stringify(i),c[t]),!e.component&&\"muted\"===r&&Ls(e.tag,e.attrsMap.type,r)&&uo(e,r,\"true\",c[t])}}(e),e}function Gs(e){var t;if(t=yo(e,\"v-for\")){var n=function(e){var t=e.match(Os);if(!t)return;var n={};n.for=t[2].trim();var r=t[1].trim().replace(Rs,\"\"),o=r.match(Bs);o?(n.alias=r.replace(Bs,\"\").trim(),n.iterator1=o[1].trim(),o[2]&&(n.iterator2=o[2].trim())):n.alias=r;return n}(t);n&&F(e,n)}}function Ks(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push(t)}function Xs(e){var t=e.name.replace(Is,\"\");return t||\"#\"!==e.name[0]&&(t=\"default\"),$s.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:'\"'.concat(t,'\"'),dynamic:!1}}function Js(e){var t=e.match(Ps);if(t){var n={};return t.forEach((function(e){n[e.slice(1)]=!0})),n}}function Qs(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n].name]=e[n].value;return t}var Zs=/^xmlns:NS\\d+/,ea=/^NS\\d+:/;function ta(e){return Us(e.tag,e.attrsList.slice(),e.parent)}var na=[Ji,Zi,{preTransformNode:function(e,t){if(\"input\"===e.tag){var n=e.attrsMap;if(!n[\"v-model\"])return;var r=void 0;if((n[\":type\"]||n[\"v-bind:type\"])&&(r=vo(e,\"type\")),n.type||r||!n[\"v-bind\"]||(r=\"(\".concat(n[\"v-bind\"],\").type\")),r){var o=yo(e,\"v-if\",!0),i=o?\"&&(\".concat(o,\")\"):\"\",s=null!=yo(e,\"v-else\",!0),a=yo(e,\"v-else-if\",!0),l=ta(e);Gs(l),mo(l,\"type\",\"checkbox\"),qs(l,t),l.processed=!0,l.if=\"(\".concat(r,\")==='checkbox'\")+i,Ks(l,{exp:l.if,block:l});var c=ta(e);yo(c,\"v-for\",!0),mo(c,\"type\",\"radio\"),qs(c,t),Ks(l,{exp:\"(\".concat(r,\")==='radio'\")+i,block:c});var u=ta(e);return yo(u,\"v-for\",!0),mo(u,\":type\",r),qs(u,t),Ks(l,{exp:o,block:u}),s?l.else=!0:a&&(l.elseif=a),l}}}}];var ra,oa,ia={model:function(e,t,n){n;var r=t.value,o=t.modifiers,i=e.tag,s=e.attrsMap.type;if(e.component)return wo(e,r,o),!1;if(\"select\"===i)!function(e,t,n){var r=n&&n.number,o='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;'+\"return \".concat(r?\"_n(val)\":\"val\",\"})\"),i=\"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\",s=\"var $$selectedVal = \".concat(o,\";\");s=\"\".concat(s,\" \").concat(xo(t,i)),go(e,\"change\",s,null,!0)}(e,r,o);else if(\"input\"===i&&\"checkbox\"===s)!function(e,t,n){var r=n&&n.number,o=vo(e,\"value\")||\"null\",i=vo(e,\"true-value\")||\"true\",s=vo(e,\"false-value\")||\"false\";uo(e,\"checked\",\"Array.isArray(\".concat(t,\")\")+\"?_i(\".concat(t,\",\").concat(o,\")>-1\")+(\"true\"===i?\":(\".concat(t,\")\"):\":_q(\".concat(t,\",\").concat(i,\")\"))),go(e,\"change\",\"var $$a=\".concat(t,\",\")+\"$$el=$event.target,\"+\"$$c=$$el.checked?(\".concat(i,\"):(\").concat(s,\");\")+\"if(Array.isArray($$a)){\"+\"var $$v=\".concat(r?\"_n(\"+o+\")\":o,\",\")+\"$$i=_i($$a,$$v);\"+\"if($$el.checked){$$i<0&&(\".concat(xo(t,\"$$a.concat([$$v])\"),\")}\")+\"else{$$i>-1&&(\".concat(xo(t,\"$$a.slice(0,$$i).concat($$a.slice($$i+1))\"),\")}\")+\"}else{\".concat(xo(t,\"$$c\"),\"}\"),null,!0)}(e,r,o);else if(\"input\"===i&&\"radio\"===s)!function(e,t,n){var r=n&&n.number,o=vo(e,\"value\")||\"null\";o=r?\"_n(\".concat(o,\")\"):o,uo(e,\"checked\",\"_q(\".concat(t,\",\").concat(o,\")\")),go(e,\"change\",xo(t,o),null,!0)}(e,r,o);else if(\"input\"===i||\"textarea\"===i)!function(e,t,n){var r=e.attrsMap.type;0;var o=n||{},i=o.lazy,s=o.number,a=o.trim,l=!i&&\"range\"!==r,c=i?\"change\":\"range\"===r?Lo:\"input\",u=\"$event.target.value\";a&&(u=\"$event.target.value.trim()\");s&&(u=\"_n(\".concat(u,\")\"));var d=xo(t,u);l&&(d=\"if($event.target.composing)return;\".concat(d));uo(e,\"value\",\"(\".concat(t,\")\")),go(e,c,d,null,!0),(a||s)&&go(e,\"blur\",\"$forceUpdate()\")}(e,r,o);else{if(!U.isReservedTag(i))return wo(e,r,o),!1}return!0},text:function(e,t){t.value&&uo(e,\"textContent\",\"_s(\".concat(t.value,\")\"),t)},html:function(e,t){t.value&&uo(e,\"innerHTML\",\"_s(\".concat(t.value,\")\"),t)}},sa={expectHTML:!0,modules:na,directives:ia,isPreTag:function(e){return\"pre\"===e},isUnaryTag:ts,mustUseProp:hr,canBeLeftOpenTag:ns,isReservedTag:Ar,getTagNamespace:Mr,staticKeys:function(e){return e.reduce((function(e,t){return e.concat(t.staticKeys||[])}),[]).join(\",\")}(na)},aa=k((function(e){return y(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\"+(e?\",\"+e:\"\"))}));function la(e,t){e&&(ra=aa(t.staticKeys||\"\"),oa=t.isReservedTag||R,ca(e),ua(e,!1))}function ca(e){if(e.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||b(e.tag)||!oa(e.tag)||function(e){for(;e.parent;){if(\"template\"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(ra)))}(e),1===e.type){if(!oa(e.tag)&&\"slot\"!==e.tag&&null==e.attrsMap[\"inline-template\"])return;for(var t=0,n=e.children.length;t<n;t++){var r=e.children[t];ca(r),r.static||(e.static=!1)}if(e.ifConditions)for(t=1,n=e.ifConditions.length;t<n;t++){var o=e.ifConditions[t].block;ca(o),o.static||(e.static=!1)}}}function ua(e,t){if(1===e.type){if((e.static||e.once)&&(e.staticInFor=t),e.static&&e.children.length&&(1!==e.children.length||3!==e.children[0].type))return void(e.staticRoot=!0);if(e.staticRoot=!1,e.children)for(var n=0,r=e.children.length;n<r;n++)ua(e.children[n],t||!!e.for);if(e.ifConditions)for(n=1,r=e.ifConditions.length;n<r;n++)ua(e.ifConditions[n].block,t)}}var da=/^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function(?:\\s+[\\w$]+)?\\s*\\(/,ha=/\\([^)]*?\\);*$/,ma=/^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/,fa={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},pa={esc:[\"Esc\",\"Escape\"],tab:\"Tab\",enter:\"Enter\",space:[\" \",\"Spacebar\"],up:[\"Up\",\"ArrowUp\"],left:[\"Left\",\"ArrowLeft\"],right:[\"Right\",\"ArrowRight\"],down:[\"Down\",\"ArrowDown\"],delete:[\"Backspace\",\"Delete\",\"Del\"]},ga=function(e){return\"if(\".concat(e,\")return null;\")},va={stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:ga(\"$event.target !== $event.currentTarget\"),ctrl:ga(\"!$event.ctrlKey\"),shift:ga(\"!$event.shiftKey\"),alt:ga(\"!$event.altKey\"),meta:ga(\"!$event.metaKey\"),left:ga(\"'button' in $event && $event.button !== 0\"),middle:ga(\"'button' in $event && $event.button !== 1\"),right:ga(\"'button' in $event && $event.button !== 2\")};function ya(e,t){var n=t?\"nativeOn:\":\"on:\",r=\"\",o=\"\";for(var i in e){var s=ba(e[i]);e[i]&&e[i].dynamic?o+=\"\".concat(i,\",\").concat(s,\",\"):r+='\"'.concat(i,'\":').concat(s,\",\")}return r=\"{\".concat(r.slice(0,-1),\"}\"),o?n+\"_d(\".concat(r,\",[\").concat(o.slice(0,-1),\"])\"):n+r}function ba(e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\".concat(e.map((function(e){return ba(e)})).join(\",\"),\"]\");var t=ma.test(e.value),n=da.test(e.value),r=ma.test(e.value.replace(ha,\"\"));if(e.modifiers){var o=\"\",i=\"\",s=[],a=function(t){if(va[t])i+=va[t],fa[t]&&s.push(t);else if(\"exact\"===t){var n=e.modifiers;i+=ga([\"ctrl\",\"shift\",\"alt\",\"meta\"].filter((function(e){return!n[e]})).map((function(e){return\"$event.\".concat(e,\"Key\")})).join(\"||\"))}else s.push(t)};for(var l in e.modifiers)a(l);s.length&&(o+=function(e){return\"if(!$event.type.indexOf('key')&&\"+\"\".concat(e.map(_a).join(\"&&\"),\")return null;\")}(s)),i&&(o+=i);var c=t?\"return \".concat(e.value,\".apply(null, arguments)\"):n?\"return (\".concat(e.value,\").apply(null, arguments)\"):r?\"return \".concat(e.value):e.value;return\"function($event){\".concat(o).concat(c,\"}\")}return t||n?e.value:\"function($event){\".concat(r?\"return \".concat(e.value):e.value,\"}\")}function _a(e){var t=parseInt(e,10);if(t)return\"$event.keyCode!==\".concat(t);var n=fa[e],r=pa[e];return\"_k($event.keyCode,\"+\"\".concat(JSON.stringify(e),\",\")+\"\".concat(JSON.stringify(n),\",\")+\"$event.key,\"+\"\".concat(JSON.stringify(r))+\")\"}var wa={on:function(e,t){e.wrapListeners=function(e){return\"_g(\".concat(e,\",\").concat(t.value,\")\")}},bind:function(e,t){e.wrapData=function(n){return\"_b(\".concat(n,\",'\").concat(e.tag,\"',\").concat(t.value,\",\").concat(t.modifiers&&t.modifiers.prop?\"true\":\"false\").concat(t.modifiers&&t.modifiers.sync?\",true\":\"\",\")\")}},cloak:B},xa=function(e){this.options=e,this.warn=e.warn||lo,this.transforms=co(e.modules,\"transformCode\"),this.dataGenFns=co(e.modules,\"genData\"),this.directives=F(F({},wa),e.directives);var t=e.isReservedTag||R;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ca(e,t){var n=new xa(t),r=e?\"script\"===e.tag?\"null\":ka(e,n):'_c(\"div\")';return{render:\"with(this){return \".concat(r,\"}\"),staticRenderFns:n.staticRenderFns}}function ka(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Da(e,t);if(e.once&&!e.onceProcessed)return Sa(e,t);if(e.for&&!e.forProcessed)return La(e,t);if(e.if&&!e.ifProcessed)return Aa(e,t);if(\"template\"!==e.tag||e.slotTarget||t.pre){if(\"slot\"===e.tag)return function(e,t){var n=e.slotName||'\"default\"',r=Oa(e,t),o=\"_t(\".concat(n).concat(r?\",function(){return \".concat(r,\"}\"):\"\"),i=e.attrs||e.dynamicAttrs?$a((e.attrs||[]).concat(e.dynamicAttrs||[]).map((function(e){return{name:S(e.name),value:e.value,dynamic:e.dynamic}}))):null,s=e.attrsMap[\"v-bind\"];!i&&!s||r||(o+=\",null\");i&&(o+=\",\".concat(i));s&&(o+=\"\".concat(i?\"\":\",null\",\",\").concat(s));return o+\")\"}(e,t);var n=void 0;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:Oa(t,n,!0);return\"_c(\".concat(e,\",\").concat(Ea(t,n)).concat(r?\",\".concat(r):\"\",\")\")}(e.component,e,t);else{var r=void 0,o=t.maybeComponent(e);(!e.plain||e.pre&&o)&&(r=Ea(e,t));var i=void 0,s=t.options.bindings;o&&s&&!1!==s.__isScriptSetup&&(i=function(e,t){var n=S(t),r=A(n),o=function(o){return e[t]===o?t:e[n]===o?n:e[r]===o?r:void 0},i=o(\"setup-const\")||o(\"setup-reactive-const\");if(i)return i;var s=o(\"setup-let\")||o(\"setup-ref\")||o(\"setup-maybe-ref\");if(s)return s}(s,e.tag)),i||(i=\"'\".concat(e.tag,\"'\"));var a=e.inlineTemplate?null:Oa(e,t,!0);n=\"_c(\".concat(i).concat(r?\",\".concat(r):\"\").concat(a?\",\".concat(a):\"\",\")\")}for(var l=0;l<t.transforms.length;l++)n=t.transforms[l](e,n);return n}return Oa(e,t)||\"void 0\"}function Da(e,t){e.staticProcessed=!0;var n=t.pre;return e.pre&&(t.pre=e.pre),t.staticRenderFns.push(\"with(this){return \".concat(ka(e,t),\"}\")),t.pre=n,\"_m(\".concat(t.staticRenderFns.length-1).concat(e.staticInFor?\",true\":\"\",\")\")}function Sa(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return Aa(e,t);if(e.staticInFor){for(var n=\"\",r=e.parent;r;){if(r.for){n=r.key;break}r=r.parent}return n?\"_o(\".concat(ka(e,t),\",\").concat(t.onceId++,\",\").concat(n,\")\"):ka(e,t)}return Da(e,t)}function Aa(e,t,n,r){return e.ifProcessed=!0,Ma(e.ifConditions.slice(),t,n,r)}function Ma(e,t,n,r){if(!e.length)return r||\"_e()\";var o=e.shift();return o.exp?\"(\".concat(o.exp,\")?\").concat(i(o.block),\":\").concat(Ma(e,t,n,r)):\"\".concat(i(o.block));function i(e){return n?n(e,t):e.once?Sa(e,t):ka(e,t)}}function La(e,t,n,r){var o=e.for,i=e.alias,s=e.iterator1?\",\".concat(e.iterator1):\"\",a=e.iterator2?\",\".concat(e.iterator2):\"\";return e.forProcessed=!0,\"\".concat(r||\"_l\",\"((\").concat(o,\"),\")+\"function(\".concat(i).concat(s).concat(a,\"){\")+\"return \".concat((n||ka)(e,t))+\"})\"}function Ea(e,t){var n=\"{\",r=function(e,t){var n=e.directives;if(!n)return;var r,o,i,s,a=\"directives:[\",l=!1;for(r=0,o=n.length;r<o;r++){i=n[r],s=!0;var c=t.directives[i.name];c&&(s=!!c(e,i,t.warn)),s&&(l=!0,a+='{name:\"'.concat(i.name,'\",rawName:\"').concat(i.rawName,'\"').concat(i.value?\",value:(\".concat(i.value,\"),expression:\").concat(JSON.stringify(i.value)):\"\").concat(i.arg?\",arg:\".concat(i.isDynamicArg?i.arg:'\"'.concat(i.arg,'\"')):\"\").concat(i.modifiers?\",modifiers:\".concat(JSON.stringify(i.modifiers)):\"\",\"},\"))}if(l)return a.slice(0,-1)+\"]\"}(e,t);r&&(n+=r+\",\"),e.key&&(n+=\"key:\".concat(e.key,\",\")),e.ref&&(n+=\"ref:\".concat(e.ref,\",\")),e.refInFor&&(n+=\"refInFor:true,\"),e.pre&&(n+=\"pre:true,\"),e.component&&(n+='tag:\"'.concat(e.tag,'\",'));for(var o=0;o<t.dataGenFns.length;o++)n+=t.dataGenFns[o](e);if(e.attrs&&(n+=\"attrs:\".concat($a(e.attrs),\",\")),e.props&&(n+=\"domProps:\".concat($a(e.props),\",\")),e.events&&(n+=\"\".concat(ya(e.events,!1),\",\")),e.nativeEvents&&(n+=\"\".concat(ya(e.nativeEvents,!0),\",\")),e.slotTarget&&!e.slotScope&&(n+=\"slot:\".concat(e.slotTarget,\",\")),e.scopedSlots&&(n+=\"\".concat(function(e,t,n){var r=e.for||Object.keys(t).some((function(e){var n=t[e];return n.slotTargetDynamic||n.if||n.for||Ta(n)})),o=!!e.if;if(!r)for(var i=e.parent;i;){if(i.slotScope&&i.slotScope!==zs||i.for){r=!0;break}i.if&&(o=!0),i=i.parent}var s=Object.keys(t).map((function(e){return Fa(t[e],n)})).join(\",\");return\"scopedSlots:_u([\".concat(s,\"]\").concat(r?\",null,true\":\"\").concat(!r&&o?\",null,false,\".concat(function(e){var t=5381,n=e.length;for(;n;)t=33*t^e.charCodeAt(--n);return t>>>0}(s)):\"\",\")\")}(e,e.scopedSlots,t),\",\")),e.model&&(n+=\"model:{value:\".concat(e.model.value,\",callback:\").concat(e.model.callback,\",expression:\").concat(e.model.expression,\"},\")),e.inlineTemplate){var i=function(e,t){var n=e.children[0];0;if(n&&1===n.type){var r=Ca(n,t.options);return\"inlineTemplate:{render:function(){\".concat(r.render,\"},staticRenderFns:[\").concat(r.staticRenderFns.map((function(e){return\"function(){\".concat(e,\"}\")})).join(\",\"),\"]}\")}}(e,t);i&&(n+=\"\".concat(i,\",\"))}return n=n.replace(/,$/,\"\")+\"}\",e.dynamicAttrs&&(n=\"_b(\".concat(n,',\"').concat(e.tag,'\",').concat($a(e.dynamicAttrs),\")\")),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ta(e){return 1===e.type&&(\"slot\"===e.tag||e.children.some(Ta))}function Fa(e,t){var n=e.attrsMap[\"slot-scope\"];if(e.if&&!e.ifProcessed&&!n)return Aa(e,t,Fa,\"null\");if(e.for&&!e.forProcessed)return La(e,t,Fa);var r=e.slotScope===zs?\"\":String(e.slotScope),o=\"function(\".concat(r,\"){\")+\"return \".concat(\"template\"===e.tag?e.if&&n?\"(\".concat(e.if,\")?\").concat(Oa(e,t)||\"undefined\",\":undefined\"):Oa(e,t)||\"undefined\":ka(e,t),\"}\"),i=r?\"\":\",proxy:true\";return\"{key:\".concat(e.slotTarget||'\"default\"',\",fn:\").concat(o).concat(i,\"}\")}function Oa(e,t,n,r,o){var i=e.children;if(i.length){var s=i[0];if(1===i.length&&s.for&&\"template\"!==s.tag&&\"slot\"!==s.tag){var a=n?t.maybeComponent(s)?\",1\":\",0\":\"\";return\"\".concat((r||ka)(s,t)).concat(a)}var l=n?function(e,t){for(var n=0,r=0;r<e.length;r++){var o=e[r];if(1===o.type){if(Ba(o)||o.ifConditions&&o.ifConditions.some((function(e){return Ba(e.block)}))){n=2;break}(t(o)||o.ifConditions&&o.ifConditions.some((function(e){return t(e.block)})))&&(n=1)}}return n}(i,t.maybeComponent):0,c=o||Ra;return\"[\".concat(i.map((function(e){return c(e,t)})).join(\",\"),\"]\").concat(l?\",\".concat(l):\"\")}}function Ba(e){return void 0!==e.for||\"template\"===e.tag||\"slot\"===e.tag}function Ra(e,t){return 1===e.type?ka(e,t):3===e.type&&e.isComment?function(e){return\"_e(\".concat(JSON.stringify(e.text),\")\")}(e):\"_v(\".concat(2===(n=e).type?n.expression:Na(JSON.stringify(n.text)),\")\");var n}function $a(e){for(var t=\"\",n=\"\",r=0;r<e.length;r++){var o=e[r],i=Na(o.value);o.dynamic?n+=\"\".concat(o.name,\",\").concat(i,\",\"):t+='\"'.concat(o.name,'\":').concat(i,\",\")}return t=\"{\".concat(t.slice(0,-1),\"}\"),n?\"_d(\".concat(t,\",[\").concat(n.slice(0,-1),\"])\"):t}function Na(e){return e.replace(/\\u2028/g,\"\\\\u2028\").replace(/\\u2029/g,\"\\\\u2029\")}new RegExp(\"\\\\b\"+\"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\"),new RegExp(\"\\\\b\"+\"delete,typeof,void\".split(\",\").join(\"\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b\")+\"\\\\s*\\\\([^\\\\)]*\\\\)\");function Ya(e,t){try{return new Function(e)}catch(n){return t.push({err:n,code:e}),B}}function Pa(e){var t=Object.create(null);return function(n,r,o){(r=F({},r)).warn;delete r.warn;var i=r.delimiters?String(r.delimiters)+n:n;if(t[i])return t[i];var s=e(n,r);var a={},l=[];return a.render=Ya(s.render,l),a.staticRenderFns=s.staticRenderFns.map((function(e){return Ya(e,l)})),t[i]=a}}var Ia,Ha,ja=(Ia=function(e,t){var n=Vs(e.trim(),t);!1!==t.optimize&&la(n,t);var r=Ca(n,t);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}},function(e){function t(t,n){var r=Object.create(e),o=[],i=[];if(n)for(var s in n.modules&&(r.modules=(e.modules||[]).concat(n.modules)),n.directives&&(r.directives=F(Object.create(e.directives||null),n.directives)),n)\"modules\"!==s&&\"directives\"!==s&&(r[s]=n[s]);r.warn=function(e,t,n){(n?i:o).push(e)};var a=Ia(t.trim(),r);return a.errors=o,a.tips=i,a}return{compile:t,compileToFunctions:Pa(t)}}),Wa=ja(sa).compileToFunctions;function za(e){return(Ha=Ha||document.createElement(\"div\")).innerHTML=e?'<a href=\"\\n\"/>':'<div a=\"\\n\"/>',Ha.innerHTML.indexOf(\"&#10;\")>0}var Ua=!!J&&za(!1),Va=!!J&&za(!0),qa=k((function(e){var t=Tr(e);return t&&t.innerHTML})),Ga=tr.prototype.$mount;tr.prototype.$mount=function(e,t){if((e=e&&Tr(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if(\"string\"==typeof r)\"#\"===r.charAt(0)&&(r=qa(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement(\"div\");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){0;var o=Wa(r,{outputSourceRange:!1,shouldDecodeNewlines:Ua,shouldDecodeNewlinesForHref:Va,delimiters:n.delimiters,comments:n.comments},this),i=o.render,s=o.staticRenderFns;n.render=i,n.staticRenderFns=s}}return Ga.call(this,e,t)},tr.compile=Wa;var Ka=n(9755),Xa=n.n(Ka);function Ja(e){return getComputedStyle(e)}function Qa(e,t){for(var n in t){var r=t[n];\"number\"==typeof r&&(r+=\"px\"),e.style[n]=r}return e}function Za(e){var t=document.createElement(\"div\");return t.className=e,t}var el=\"undefined\"!=typeof Element&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector);function tl(e,t){if(!el)throw new Error(\"No element matching method supported\");return el.call(e,t)}function nl(e){e.remove?e.remove():e.parentNode&&e.parentNode.removeChild(e)}function rl(e,t){return Array.prototype.filter.call(e.children,(function(e){return tl(e,t)}))}var ol=\"ps\",il=\"ps__rtl\",sl={thumb:function(e){return\"ps__thumb-\"+e},rail:function(e){return\"ps__rail-\"+e},consuming:\"ps__child--consume\"},al={focus:\"ps--focus\",clicking:\"ps--clicking\",active:function(e){return\"ps--active-\"+e},scrolling:function(e){return\"ps--scrolling-\"+e}},ll={x:null,y:null};function cl(e,t){var n=e.element.classList,r=al.scrolling(t);n.contains(r)?clearTimeout(ll[t]):n.add(r)}function ul(e,t){ll[t]=setTimeout((function(){return e.isAlive&&e.element.classList.remove(al.scrolling(t))}),e.settings.scrollingThreshold)}var dl=function(e){this.element=e,this.handlers={}},hl={isEmpty:{configurable:!0}};dl.prototype.bind=function(e,t){void 0===this.handlers[e]&&(this.handlers[e]=[]),this.handlers[e].push(t),this.element.addEventListener(e,t,!1)},dl.prototype.unbind=function(e,t){var n=this;this.handlers[e]=this.handlers[e].filter((function(r){return!(!t||r===t)||(n.element.removeEventListener(e,r,!1),!1)}))},dl.prototype.unbindAll=function(){for(var e in this.handlers)this.unbind(e)},hl.isEmpty.get=function(){var e=this;return Object.keys(this.handlers).every((function(t){return 0===e.handlers[t].length}))},Object.defineProperties(dl.prototype,hl);var ml=function(){this.eventElements=[]};function fl(e){if(\"function\"==typeof window.CustomEvent)return new CustomEvent(e);var t=document.createEvent(\"CustomEvent\");return t.initCustomEvent(e,!1,!1,void 0),t}function pl(e,t,n,r,o){var i;if(void 0===r&&(r=!0),void 0===o&&(o=!1),\"top\"===t)i=[\"contentHeight\",\"containerHeight\",\"scrollTop\",\"y\",\"up\",\"down\"];else{if(\"left\"!==t)throw new Error(\"A proper axis should be provided\");i=[\"contentWidth\",\"containerWidth\",\"scrollLeft\",\"x\",\"left\",\"right\"]}!function(e,t,n,r,o){var i=n[0],s=n[1],a=n[2],l=n[3],c=n[4],u=n[5];void 0===r&&(r=!0);void 0===o&&(o=!1);var d=e.element;e.reach[l]=null,d[a]<1&&(e.reach[l]=\"start\");d[a]>e[i]-e[s]-1&&(e.reach[l]=\"end\");t&&(d.dispatchEvent(fl(\"ps-scroll-\"+l)),t<0?d.dispatchEvent(fl(\"ps-scroll-\"+c)):t>0&&d.dispatchEvent(fl(\"ps-scroll-\"+u)),r&&function(e,t){cl(e,t),ul(e,t)}(e,l));e.reach[l]&&(t||o)&&d.dispatchEvent(fl(\"ps-\"+l+\"-reach-\"+e.reach[l]))}(e,n,i,r,o)}function gl(e){return parseInt(e,10)||0}ml.prototype.eventElement=function(e){var t=this.eventElements.filter((function(t){return t.element===e}))[0];return t||(t=new dl(e),this.eventElements.push(t)),t},ml.prototype.bind=function(e,t,n){this.eventElement(e).bind(t,n)},ml.prototype.unbind=function(e,t,n){var r=this.eventElement(e);r.unbind(t,n),r.isEmpty&&this.eventElements.splice(this.eventElements.indexOf(r),1)},ml.prototype.unbindAll=function(){this.eventElements.forEach((function(e){return e.unbindAll()})),this.eventElements=[]},ml.prototype.once=function(e,t,n){var r=this.eventElement(e),o=function(e){r.unbind(t,o),n(e)};r.bind(t,o)};var vl={isWebKit:\"undefined\"!=typeof document&&\"WebkitAppearance\"in document.documentElement.style,supportsTouch:\"undefined\"!=typeof window&&(\"ontouchstart\"in window||\"maxTouchPoints\"in window.navigator&&window.navigator.maxTouchPoints>0||window.DocumentTouch&&document instanceof window.DocumentTouch),supportsIePointer:\"undefined\"!=typeof navigator&&navigator.msMaxTouchPoints,isChrome:\"undefined\"!=typeof navigator&&/Chrome/i.test(navigator&&navigator.userAgent)};function yl(e){var t=e.element,n=Math.floor(t.scrollTop),r=t.getBoundingClientRect();e.containerWidth=Math.round(r.width),e.containerHeight=Math.round(r.height),e.contentWidth=t.scrollWidth,e.contentHeight=t.scrollHeight,t.contains(e.scrollbarXRail)||(rl(t,sl.rail(\"x\")).forEach((function(e){return nl(e)})),t.appendChild(e.scrollbarXRail)),t.contains(e.scrollbarYRail)||(rl(t,sl.rail(\"y\")).forEach((function(e){return nl(e)})),t.appendChild(e.scrollbarYRail)),!e.settings.suppressScrollX&&e.containerWidth+e.settings.scrollXMarginOffset<e.contentWidth?(e.scrollbarXActive=!0,e.railXWidth=e.containerWidth-e.railXMarginWidth,e.railXRatio=e.containerWidth/e.railXWidth,e.scrollbarXWidth=bl(e,gl(e.railXWidth*e.containerWidth/e.contentWidth)),e.scrollbarXLeft=gl((e.negativeScrollAdjustment+t.scrollLeft)*(e.railXWidth-e.scrollbarXWidth)/(e.contentWidth-e.containerWidth))):e.scrollbarXActive=!1,!e.settings.suppressScrollY&&e.containerHeight+e.settings.scrollYMarginOffset<e.contentHeight?(e.scrollbarYActive=!0,e.railYHeight=e.containerHeight-e.railYMarginHeight,e.railYRatio=e.containerHeight/e.railYHeight,e.scrollbarYHeight=bl(e,gl(e.railYHeight*e.containerHeight/e.contentHeight)),e.scrollbarYTop=gl(n*(e.railYHeight-e.scrollbarYHeight)/(e.contentHeight-e.containerHeight))):e.scrollbarYActive=!1,e.scrollbarXLeft>=e.railXWidth-e.scrollbarXWidth&&(e.scrollbarXLeft=e.railXWidth-e.scrollbarXWidth),e.scrollbarYTop>=e.railYHeight-e.scrollbarYHeight&&(e.scrollbarYTop=e.railYHeight-e.scrollbarYHeight),function(e,t){var n={width:t.railXWidth},r=Math.floor(e.scrollTop);t.isRtl?n.left=t.negativeScrollAdjustment+e.scrollLeft+t.containerWidth-t.contentWidth:n.left=e.scrollLeft;t.isScrollbarXUsingBottom?n.bottom=t.scrollbarXBottom-r:n.top=t.scrollbarXTop+r;Qa(t.scrollbarXRail,n);var o={top:r,height:t.railYHeight};t.isScrollbarYUsingRight?t.isRtl?o.right=t.contentWidth-(t.negativeScrollAdjustment+e.scrollLeft)-t.scrollbarYRight-t.scrollbarYOuterWidth-9:o.right=t.scrollbarYRight-e.scrollLeft:t.isRtl?o.left=t.negativeScrollAdjustment+e.scrollLeft+2*t.containerWidth-t.contentWidth-t.scrollbarYLeft-t.scrollbarYOuterWidth:o.left=t.scrollbarYLeft+e.scrollLeft;Qa(t.scrollbarYRail,o),Qa(t.scrollbarX,{left:t.scrollbarXLeft,width:t.scrollbarXWidth-t.railBorderXWidth}),Qa(t.scrollbarY,{top:t.scrollbarYTop,height:t.scrollbarYHeight-t.railBorderYWidth})}(t,e),e.scrollbarXActive?t.classList.add(al.active(\"x\")):(t.classList.remove(al.active(\"x\")),e.scrollbarXWidth=0,e.scrollbarXLeft=0,t.scrollLeft=!0===e.isRtl?e.contentWidth:0),e.scrollbarYActive?t.classList.add(al.active(\"y\")):(t.classList.remove(al.active(\"y\")),e.scrollbarYHeight=0,e.scrollbarYTop=0,t.scrollTop=0)}function bl(e,t){return e.settings.minScrollbarLength&&(t=Math.max(t,e.settings.minScrollbarLength)),e.settings.maxScrollbarLength&&(t=Math.min(t,e.settings.maxScrollbarLength)),t}function _l(e,t){var n=t[0],r=t[1],o=t[2],i=t[3],s=t[4],a=t[5],l=t[6],c=t[7],u=t[8],d=e.element,h=null,m=null,f=null;function p(t){t.touches&&t.touches[0]&&(t[o]=t.touches[0].pageY),d[l]=h+f*(t[o]-m),cl(e,c),yl(e),t.stopPropagation(),t.type.startsWith(\"touch\")&&t.changedTouches.length>1&&t.preventDefault()}function g(){ul(e,c),e[u].classList.remove(al.clicking),e.event.unbind(e.ownerDocument,\"mousemove\",p)}function v(t,s){h=d[l],s&&t.touches&&(t[o]=t.touches[0].pageY),m=t[o],f=(e[r]-e[n])/(e[i]-e[a]),s?e.event.bind(e.ownerDocument,\"touchmove\",p):(e.event.bind(e.ownerDocument,\"mousemove\",p),e.event.once(e.ownerDocument,\"mouseup\",g),t.preventDefault()),e[u].classList.add(al.clicking),t.stopPropagation()}e.event.bind(e[s],\"mousedown\",(function(e){v(e)})),e.event.bind(e[s],\"touchstart\",(function(e){v(e,!0)}))}var wl={\"click-rail\":function(e){e.element,e.event.bind(e.scrollbarY,\"mousedown\",(function(e){return e.stopPropagation()})),e.event.bind(e.scrollbarYRail,\"mousedown\",(function(t){var n=t.pageY-window.pageYOffset-e.scrollbarYRail.getBoundingClientRect().top>e.scrollbarYTop?1:-1;e.element.scrollTop+=n*e.containerHeight,yl(e),t.stopPropagation()})),e.event.bind(e.scrollbarX,\"mousedown\",(function(e){return e.stopPropagation()})),e.event.bind(e.scrollbarXRail,\"mousedown\",(function(t){var n=t.pageX-window.pageXOffset-e.scrollbarXRail.getBoundingClientRect().left>e.scrollbarXLeft?1:-1;e.element.scrollLeft+=n*e.containerWidth,yl(e),t.stopPropagation()}))},\"drag-thumb\":function(e){_l(e,[\"containerWidth\",\"contentWidth\",\"pageX\",\"railXWidth\",\"scrollbarX\",\"scrollbarXWidth\",\"scrollLeft\",\"x\",\"scrollbarXRail\"]),_l(e,[\"containerHeight\",\"contentHeight\",\"pageY\",\"railYHeight\",\"scrollbarY\",\"scrollbarYHeight\",\"scrollTop\",\"y\",\"scrollbarYRail\"])},keyboard:function(e){var t=e.element;e.event.bind(e.ownerDocument,\"keydown\",(function(n){if(!(n.isDefaultPrevented&&n.isDefaultPrevented()||n.defaultPrevented)&&(tl(t,\":hover\")||tl(e.scrollbarX,\":focus\")||tl(e.scrollbarY,\":focus\"))){var r,o=document.activeElement?document.activeElement:e.ownerDocument.activeElement;if(o){if(\"IFRAME\"===o.tagName)o=o.contentDocument.activeElement;else for(;o.shadowRoot;)o=o.shadowRoot.activeElement;if(tl(r=o,\"input,[contenteditable]\")||tl(r,\"select,[contenteditable]\")||tl(r,\"textarea,[contenteditable]\")||tl(r,\"button,[contenteditable]\"))return}var i=0,s=0;switch(n.which){case 37:i=n.metaKey?-e.contentWidth:n.altKey?-e.containerWidth:-30;break;case 38:s=n.metaKey?e.contentHeight:n.altKey?e.containerHeight:30;break;case 39:i=n.metaKey?e.contentWidth:n.altKey?e.containerWidth:30;break;case 40:s=n.metaKey?-e.contentHeight:n.altKey?-e.containerHeight:-30;break;case 32:s=n.shiftKey?e.containerHeight:-e.containerHeight;break;case 33:s=e.containerHeight;break;case 34:s=-e.containerHeight;break;case 36:s=e.contentHeight;break;case 35:s=-e.contentHeight;break;default:return}e.settings.suppressScrollX&&0!==i||e.settings.suppressScrollY&&0!==s||(t.scrollTop-=s,t.scrollLeft+=i,yl(e),function(n,r){var o=Math.floor(t.scrollTop);if(0===n){if(!e.scrollbarYActive)return!1;if(0===o&&r>0||o>=e.contentHeight-e.containerHeight&&r<0)return!e.settings.wheelPropagation}var i=t.scrollLeft;if(0===r){if(!e.scrollbarXActive)return!1;if(0===i&&n<0||i>=e.contentWidth-e.containerWidth&&n>0)return!e.settings.wheelPropagation}return!0}(i,s)&&n.preventDefault())}}))},wheel:function(e){var t=e.element;function n(n){var r=function(e){var t=e.deltaX,n=-1*e.deltaY;return void 0!==t&&void 0!==n||(t=-1*e.wheelDeltaX/6,n=e.wheelDeltaY/6),e.deltaMode&&1===e.deltaMode&&(t*=10,n*=10),t!=t&&n!=n&&(t=0,n=e.wheelDelta),e.shiftKey?[-n,-t]:[t,n]}(n),o=r[0],i=r[1];if(!function(e,n,r){if(!vl.isWebKit&&t.querySelector(\"select:focus\"))return!0;if(!t.contains(e))return!1;for(var o=e;o&&o!==t;){if(o.classList.contains(sl.consuming))return!0;var i=Ja(o);if(r&&i.overflowY.match(/(scroll|auto)/)){var s=o.scrollHeight-o.clientHeight;if(s>0&&(o.scrollTop>0&&r<0||o.scrollTop<s&&r>0))return!0}if(n&&i.overflowX.match(/(scroll|auto)/)){var a=o.scrollWidth-o.clientWidth;if(a>0&&(o.scrollLeft>0&&n<0||o.scrollLeft<a&&n>0))return!0}o=o.parentNode}return!1}(n.target,o,i)){var s=!1;e.settings.useBothWheelAxes?e.scrollbarYActive&&!e.scrollbarXActive?(i?t.scrollTop-=i*e.settings.wheelSpeed:t.scrollTop+=o*e.settings.wheelSpeed,s=!0):e.scrollbarXActive&&!e.scrollbarYActive&&(o?t.scrollLeft+=o*e.settings.wheelSpeed:t.scrollLeft-=i*e.settings.wheelSpeed,s=!0):(t.scrollTop-=i*e.settings.wheelSpeed,t.scrollLeft+=o*e.settings.wheelSpeed),yl(e),s=s||function(n,r){var o=Math.floor(t.scrollTop),i=0===t.scrollTop,s=o+t.offsetHeight===t.scrollHeight,a=0===t.scrollLeft,l=t.scrollLeft+t.offsetWidth===t.scrollWidth;return!(Math.abs(r)>Math.abs(n)?i||s:a||l)||!e.settings.wheelPropagation}(o,i),s&&!n.ctrlKey&&(n.stopPropagation(),n.preventDefault())}}void 0!==window.onwheel?e.event.bind(t,\"wheel\",n):void 0!==window.onmousewheel&&e.event.bind(t,\"mousewheel\",n)},touch:function(e){if(vl.supportsTouch||vl.supportsIePointer){var t=e.element,n={},r=0,o={},i=null;vl.supportsTouch?(e.event.bind(t,\"touchstart\",c),e.event.bind(t,\"touchmove\",u),e.event.bind(t,\"touchend\",d)):vl.supportsIePointer&&(window.PointerEvent?(e.event.bind(t,\"pointerdown\",c),e.event.bind(t,\"pointermove\",u),e.event.bind(t,\"pointerup\",d)):window.MSPointerEvent&&(e.event.bind(t,\"MSPointerDown\",c),e.event.bind(t,\"MSPointerMove\",u),e.event.bind(t,\"MSPointerUp\",d)))}function s(n,r){t.scrollTop-=r,t.scrollLeft-=n,yl(e)}function a(e){return e.targetTouches?e.targetTouches[0]:e}function l(e){return(!e.pointerType||\"pen\"!==e.pointerType||0!==e.buttons)&&(!(!e.targetTouches||1!==e.targetTouches.length)||!(!e.pointerType||\"mouse\"===e.pointerType||e.pointerType===e.MSPOINTER_TYPE_MOUSE))}function c(e){if(l(e)){var t=a(e);n.pageX=t.pageX,n.pageY=t.pageY,r=(new Date).getTime(),null!==i&&clearInterval(i)}}function u(i){if(l(i)){var c=a(i),u={pageX:c.pageX,pageY:c.pageY},d=u.pageX-n.pageX,h=u.pageY-n.pageY;if(function(e,n,r){if(!t.contains(e))return!1;for(var o=e;o&&o!==t;){if(o.classList.contains(sl.consuming))return!0;var i=Ja(o);if(r&&i.overflowY.match(/(scroll|auto)/)){var s=o.scrollHeight-o.clientHeight;if(s>0&&(o.scrollTop>0&&r<0||o.scrollTop<s&&r>0))return!0}if(n&&i.overflowX.match(/(scroll|auto)/)){var a=o.scrollWidth-o.clientWidth;if(a>0&&(o.scrollLeft>0&&n<0||o.scrollLeft<a&&n>0))return!0}o=o.parentNode}return!1}(i.target,d,h))return;s(d,h),n=u;var m=(new Date).getTime(),f=m-r;f>0&&(o.x=d/f,o.y=h/f,r=m),function(n,r){var o=Math.floor(t.scrollTop),i=t.scrollLeft,s=Math.abs(n),a=Math.abs(r);if(a>s){if(r<0&&o===e.contentHeight-e.containerHeight||r>0&&0===o)return 0===window.scrollY&&r>0&&vl.isChrome}else if(s>a&&(n<0&&i===e.contentWidth-e.containerWidth||n>0&&0===i))return!0;return!0}(d,h)&&i.preventDefault()}}function d(){e.settings.swipeEasing&&(clearInterval(i),i=setInterval((function(){e.isInitialized?clearInterval(i):o.x||o.y?Math.abs(o.x)<.01&&Math.abs(o.y)<.01?clearInterval(i):e.element?(s(30*o.x,30*o.y),o.x*=.8,o.y*=.8):clearInterval(i):clearInterval(i)}),10))}}},xl=function(e,t){var n=this;if(void 0===t&&(t={}),\"string\"==typeof e&&(e=document.querySelector(e)),!e||!e.nodeName)throw new Error(\"no element is specified to initialize PerfectScrollbar\");for(var r in this.element=e,e.classList.add(ol),this.settings={handlers:[\"click-rail\",\"drag-thumb\",\"keyboard\",\"wheel\",\"touch\"],maxScrollbarLength:null,minScrollbarLength:null,scrollingThreshold:1e3,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipeEasing:!0,useBothWheelAxes:!1,wheelPropagation:!0,wheelSpeed:1},t)this.settings[r]=t[r];this.containerWidth=null,this.containerHeight=null,this.contentWidth=null,this.contentHeight=null;var o,i,s=function(){return e.classList.add(al.focus)},a=function(){return e.classList.remove(al.focus)};this.isRtl=\"rtl\"===Ja(e).direction,!0===this.isRtl&&e.classList.add(il),this.isNegativeScroll=(i=e.scrollLeft,e.scrollLeft=-1,o=e.scrollLeft<0,e.scrollLeft=i,o),this.negativeScrollAdjustment=this.isNegativeScroll?e.scrollWidth-e.clientWidth:0,this.event=new ml,this.ownerDocument=e.ownerDocument||document,this.scrollbarXRail=Za(sl.rail(\"x\")),e.appendChild(this.scrollbarXRail),this.scrollbarX=Za(sl.thumb(\"x\")),this.scrollbarXRail.appendChild(this.scrollbarX),this.scrollbarX.setAttribute(\"tabindex\",0),this.event.bind(this.scrollbarX,\"focus\",s),this.event.bind(this.scrollbarX,\"blur\",a),this.scrollbarXActive=null,this.scrollbarXWidth=null,this.scrollbarXLeft=null;var l=Ja(this.scrollbarXRail);this.scrollbarXBottom=parseInt(l.bottom,10),isNaN(this.scrollbarXBottom)?(this.isScrollbarXUsingBottom=!1,this.scrollbarXTop=gl(l.top)):this.isScrollbarXUsingBottom=!0,this.railBorderXWidth=gl(l.borderLeftWidth)+gl(l.borderRightWidth),Qa(this.scrollbarXRail,{display:\"block\"}),this.railXMarginWidth=gl(l.marginLeft)+gl(l.marginRight),Qa(this.scrollbarXRail,{display:\"\"}),this.railXWidth=null,this.railXRatio=null,this.scrollbarYRail=Za(sl.rail(\"y\")),e.appendChild(this.scrollbarYRail),this.scrollbarY=Za(sl.thumb(\"y\")),this.scrollbarYRail.appendChild(this.scrollbarY),this.scrollbarY.setAttribute(\"tabindex\",0),this.event.bind(this.scrollbarY,\"focus\",s),this.event.bind(this.scrollbarY,\"blur\",a),this.scrollbarYActive=null,this.scrollbarYHeight=null,this.scrollbarYTop=null;var c=Ja(this.scrollbarYRail);this.scrollbarYRight=parseInt(c.right,10),isNaN(this.scrollbarYRight)?(this.isScrollbarYUsingRight=!1,this.scrollbarYLeft=gl(c.left)):this.isScrollbarYUsingRight=!0,this.scrollbarYOuterWidth=this.isRtl?function(e){var t=Ja(e);return gl(t.width)+gl(t.paddingLeft)+gl(t.paddingRight)+gl(t.borderLeftWidth)+gl(t.borderRightWidth)}(this.scrollbarY):null,this.railBorderYWidth=gl(c.borderTopWidth)+gl(c.borderBottomWidth),Qa(this.scrollbarYRail,{display:\"block\"}),this.railYMarginHeight=gl(c.marginTop)+gl(c.marginBottom),Qa(this.scrollbarYRail,{display:\"\"}),this.railYHeight=null,this.railYRatio=null,this.reach={x:e.scrollLeft<=0?\"start\":e.scrollLeft>=this.contentWidth-this.containerWidth?\"end\":null,y:e.scrollTop<=0?\"start\":e.scrollTop>=this.contentHeight-this.containerHeight?\"end\":null},this.isAlive=!0,this.settings.handlers.forEach((function(e){return wl[e](n)})),this.lastScrollTop=Math.floor(e.scrollTop),this.lastScrollLeft=e.scrollLeft,this.event.bind(this.element,\"scroll\",(function(e){return n.onScroll(e)})),yl(this)};xl.prototype.update=function(){this.isAlive&&(this.negativeScrollAdjustment=this.isNegativeScroll?this.element.scrollWidth-this.element.clientWidth:0,Qa(this.scrollbarXRail,{display:\"block\"}),Qa(this.scrollbarYRail,{display:\"block\"}),this.railXMarginWidth=gl(Ja(this.scrollbarXRail).marginLeft)+gl(Ja(this.scrollbarXRail).marginRight),this.railYMarginHeight=gl(Ja(this.scrollbarYRail).marginTop)+gl(Ja(this.scrollbarYRail).marginBottom),Qa(this.scrollbarXRail,{display:\"none\"}),Qa(this.scrollbarYRail,{display:\"none\"}),yl(this),pl(this,\"top\",0,!1,!0),pl(this,\"left\",0,!1,!0),Qa(this.scrollbarXRail,{display:\"\"}),Qa(this.scrollbarYRail,{display:\"\"}))},xl.prototype.onScroll=function(e){this.isAlive&&(yl(this),pl(this,\"top\",this.element.scrollTop-this.lastScrollTop),pl(this,\"left\",this.element.scrollLeft-this.lastScrollLeft),this.lastScrollTop=Math.floor(this.element.scrollTop),this.lastScrollLeft=this.element.scrollLeft)},xl.prototype.destroy=function(){this.isAlive&&(this.event.unbindAll(),nl(this.scrollbarX),nl(this.scrollbarY),nl(this.scrollbarXRail),nl(this.scrollbarYRail),this.removePsClasses(),this.element=null,this.scrollbarX=null,this.scrollbarY=null,this.scrollbarXRail=null,this.scrollbarYRail=null,this.isAlive=!1)},xl.prototype.removePsClasses=function(){this.element.className=this.element.className.split(\" \").filter((function(e){return!e.match(/^ps([-_].+|)$/)})).join(\" \")};const Cl=xl;function kl(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}window.Vue=tr,window.jQuery=Xa(),window.$=Xa(),window.Cropper=n(3129),window.Cropper=\"default\"in window.Cropper?window.Cropper.default:window.Cropper,window.toastr=n(8901),window.DataTable=n(2083),n(591),window.EasyMDE=n(4442),n(2025),n(4092),n(5652),n(6675),n(7915),n(686),n(9730);n(8616);n(8750),n(440),n(7217),window.TinyMCE=window.tinymce=n(7575),n(6846),n(4388),window.voyagerTinyMCE=n(2736),n(9457),window.helpers=n(393),tr.component(\"admin-menu\",n(4060).Z);new tr({el:\"#adminmenu\"});$(document).ready((function(){var e=$(\".app-container\");$(\".fadetoblack\"),$(\".hamburger\");new Cl(\".side-menu\"),$(\"#voyager-loader\").fadeOut(),$(\".hamburger, .navbar-expand-toggle\").on(\"click\",(function(){e.toggleClass(\"expanded\"),$(this).toggleClass(\"is-active\"),$(this).hasClass(\"is-active\")?window.localStorage.setItem(\"voyager.stickySidebar\",!0):window.localStorage.setItem(\"voyager.stickySidebar\",!1)})),$(\"select.select2\").select2({width:\"100%\"}),$(\"select.select2-ajax\").each((function(){$(this).select2({width:\"100%\",tags:$(this).hasClass(\"taggable\"),createTag:function(e){var t=$.trim(e.term);return\"\"===t?null:{id:t,text:t,newTag:!0}},ajax:{url:$(this).data(\"get-items-route\"),data:function(e){return{search:e.term,type:$(this).data(\"get-items-field\"),method:$(this).data(\"method\"),id:$(this).data(\"id\"),page:e.page||1}}}}),$(this).on(\"select2:select\",(function(e){var t=e.params.data;\"\"==t.id?$(this).val([]).trigger(\"change\"):$(e.currentTarget).find(\"option[value='\"+t.id+\"']\").attr(\"selected\",\"selected\")})),$(this).on(\"select2:unselect\",(function(e){var t=e.params.data;$(e.currentTarget).find(\"option[value='\"+t.id+\"']\").attr(\"selected\",!1)})),$(this).on(\"select2:selecting\",(function(e){var t;if($(this).hasClass(\"taggable\")){var n=$(this),r=n.data(\"route\"),o=n.data(\"label\"),i=n.data(\"error-message\");if(e.params.args.data.newTag)return n.select2(\"close\"),$.post(r,(t={},kl(t,o,e.params.args.data.text),kl(t,\"_tagging\",!0),t)).done((function(t){var r=new Option(e.params.args.data.text,t.data.id,!1,!0);n.append(r).trigger(\"change\")})).fail((function(e){toastr.error(i)})),!1}}))})),$(\".match-height\").matchHeight(),$(\".datatable\").DataTable({dom:'<\"top\"fl<\"clear\">>rt<\"bottom\"ip<\"clear\">>'}),$(\".side-menu .nav .dropdown\").on(\"show.bs.collapse\",(function(){return $(\".side-menu .nav .dropdown .collapse\").collapse(\"hide\")})),$(\".panel-collapse\").on(\"hide.bs.collapse\",(function(e){var t=$(e.target);t.is(\"a\")||(t=t.parent()),t.hasClass(\"collapsed\")&&(e.stopPropagation(),e.preventDefault())})),$(document).on(\"click\",'.panel-heading a.panel-action[data-toggle=\"panel-collapse\"]',(function(e){e.preventDefault();var t=$(this);t.hasClass(\"panel-collapsed\")?(t.parents(\".panel\").find(\".panel-body\").slideDown(),t.removeClass(\"panel-collapsed\"),t.removeClass(\"voyager-angle-down\").addClass(\"voyager-angle-up\")):(t.parents(\".panel\").find(\".panel-body\").slideUp(),t.addClass(\"panel-collapsed\"),t.removeClass(\"voyager-angle-up\").addClass(\"voyager-angle-down\"))})),$(document).on(\"click\",'.panel-heading a.panel-action[data-toggle=\"panel-fullscreen\"]',(function(e){e.preventDefault();var t=$(this);t.hasClass(\"voyager-resize-full\")?t.removeClass(\"voyager-resize-full\").addClass(\"voyager-resize-small\"):t.removeClass(\"voyager-resize-small\").addClass(\"voyager-resize-full\"),t.closest(\".panel\").toggleClass(\"is-fullscreen\")})),$(\".datepicker\").datetimepicker(),$(document).keydown((function(e){if((e.metaKey||e.ctrlKey)&&83==e.keyCode)return $(\".btn.save\").click(),e.preventDefault(),!1})),$(\"textarea.easymde\").each((function(){new EasyMDE({element:this}).render()}))}))},393:(e,t)=>{var n=function(e,t){var n=t[e.type];if(n)return n(e.message);t.error(\"No alert method found for alert type: \"+e.type)};t.setImageValue=function(e){$(\".mce-btn.mce-open\").parent().find(\".mce-textbox\").val(e)},t.displayAlert=n,t.displayAlerts=function(e,t,r){for(a in r&&(e=e.filter((function(e){return r==e.type}))),e)n(e[a],t)},t.bootstrapAlerter=function(e){var t={alertsContainer:\"#alertsContainer\",dismissible:!1,dismissButton:'<button class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>'};e&&(t=$.extend({},t,e));var n=\"\",r=\"\";function o(e,o){var i='<div class=\"alert alert-'+e+n+'\" role=\"alert\">'+r+o+\"</div>\";$(t.alertsContainer).append(i)}return t.dismissible&&(r=t.dismissButton,n=\" alert-dismissible\"),{success:function(e){o(\"success\",e)},info:function(e){o(\"info\",e)},warning:function(e){o(\"warning\",e)},error:function(e){o(\"danger\",e)}}}},6846:()=>{!function(e,t,n,r){\"use strict\";var o=\"multilingual\",i={editing:!1,form:\".form-edit-add\",transInputs:\"input[data-i18n = true]\",langSelectors:\".language-selector:first input\"};function s(t,n){this.element=e(t),this.settings=e.extend({},i,n),this._defaults=i,this._name=o,this.init()}e.extend(s.prototype,{init:function(){if(this.form=this.element.find(this.settings.form),this.transInputs=e(this.settings.transInputs),this.langSelectors=this.element.find(this.settings.langSelectors),0===this.transInputs.length||0===this.langSelectors)return!1;this.setup(),this.refresh()},setup:function(){var t=this;this.locale=this.returnLocale(),e(\".js-language-label\").text(this.locale),this.langSelectors.each((function(n,r){e(r).change(e.proxy(t.selectLanguage,t))})),this.settings.editing&&e(this.form).on(\"submit\",(function(e){t.prepareData()}))},refresh:function(){var t=this;this.transInputs.each((function(n,r){var o=e(r),i=o.nextAll(t.settings.editing?\".form-control\":\"\");i.data(\"inp\",o),o.data(\"inpUsr\",i);var s=t.loadJsonField(o.val());t.settings.editing&&o.val(JSON.stringify(s)),t.langSelectors.each((function(e,n){o.data(n.id,s[n.id]),n.id==t.locale&&t.loadLang(o,n.id)}))}))},loadJsonField:function(e){var t={};return this.isJsonValid(e)?(t=JSON.parse(e),this.langSelectors.each((function(e,n){t[n.id]=t[n.id]||\"\"})),t):(this.langSelectors.each((function(e,n){t[n.id]=\"\"})),t)},isJsonValid:function(e){try{JSON.parse(e)}catch(e){return!1}return!0},returnLocale:function(){return this.langSelectors.filter((function(){return e(this).parent().hasClass(\"active\")})).prop(\"id\")},selectLanguage:function(t){var n=this,r=t.target.id;this.transInputs.each((function(t,o){n.settings.editing&&n.updateInputCache(e(o)),n.loadLang(e(o),r)})),this.locale=r,e(\".js-language-label\").text(r)},prepareData:function(){var t=this;this.transInputs.each((function(n,r){t.updateInputCache(e(r))}))},updateInputCache:function(t){var n=this,r=t.data(\"inpUsr\"),o=e(r).val(),i={};if(r.hasClass(\"richTextBox\")){var s=tinymce.get(\"richtext\"+r.prop(\"name\"));o=s.getContent()}if(r.hasClass(\"easymde\")){var a=r.nextAll(\".CodeMirror\")[0].CodeMirror;o=a.getDoc().getValue(),a.save()}this.langSelectors.each((function(e,r){var s=r.id;i[s]=n.locale==s?o:t.data(s)})),t.val(JSON.stringify(i)),t.data(this.locale,o)},loadLang:function(e,t){var n=e.data(\"inpUsr\"),r=e.data(t);if(this.settings.editing){var o=tinymce.get(\"richtext\"+n.prop(\"name\"));if(n.hasClass(\"richTextBox\")&&o&&o.initialized)o.setContent(r);else if(n.val(r),n.hasClass(\"easymde\"))n.nextAll(\".CodeMirror\")[0].CodeMirror.getDoc().setValue(n.val())}else n.text(r)}}),e.fn[o]=function(t){return this.each((function(){e.data(this,o)||e.data(this,o,new s(this,t))}))}}(jQuery,window,document)},7217:()=>{!function(e,t,n,r){\"use strict\";var o=\"slugify\",i={separator:\"-\",input:!1,forceUpdate:!1,map:!1};function s(t,n){this.element=e(t),this.settings=e.extend({},i,n),this._defaults=i,this.chars=this._load_char_maps(),this.settings.map&&e.extend(this.chars,this.settings.map),this.init()}e.extend(s.prototype,{init:function(){this.input=this.settings.input||e(this.element).closest(\"form\").find('input[name=\"'+this.element.attr(\"data-slug-origin\")+'\"]'),this.forceUpdate=!!this.element.data(\"slug-forceupdate\"),this.input.on(\"keyup change\",e.proxy(this.onChange,this)),this.refresh()},refresh:function(){this.element.update=\"\"===this.element.val()},onChange:function(t){var n=t.keyCode?t.keyCode:t.which;if(!(n>34&&n<41)){var r=e(t.target).val(),o=this.element.val();(this.element.update||\"\"===o||\"\"!=o&&this.forceUpdate)&&(this.element.val(this.slug(r)),this.element.update=!0)}},slug:function(e){e=e.toString().toLowerCase();for(var t=\"\",n=this.settings.separator,r=0,o=e.length;r<o;r++)t+=this.chars.hasOwnProperty(e.charAt(r))?this.chars[e.charAt(r)]:e.charAt(r);return e=t.replace(/[^a-z0-9]/g,n).replace(new RegExp(\"\\\\\"+n+\"\\\\\"+n+\"+\",\"g\"),n).replace(new RegExp(\"^\\\\\"+n+\"+|\\\\\"+n+\"+$\",\"g\"),\"\")},_load_char_maps:function(){return e.extend(this._map_latin(),this._map_arabic(),this._map_greek(),this._map_turkish(),this._map_russian(),this._map_ukranian(),this._map_czech(),this._map_polish(),this._map_vietnam(),this._map_burmese(),this._map_latvian(),this._map_lithuanian(),this._map_currency(),this._map_symbols())},_map_latin:function(){return{À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",Æ:\"AE\",Ç:\"C\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",Ð:\"D\",Ñ:\"N\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ő:\"O\",Ø:\"O\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",Ű:\"U\",Ý:\"Y\",Þ:\"TH\",ß:\"ss\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",æ:\"ae\",ç:\"c\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",ð:\"d\",ñ:\"n\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ő:\"o\",ø:\"o\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",ű:\"u\",ý:\"y\",þ:\"th\",ÿ:\"y\"}},_map_arabic:function(){return{ا:\"a\",أ:\"a\",إ:\"i\",آ:\"aa\",ؤ:\"u\",ئ:\"e\",ء:\"a\",ب:\"b\",ت:\"t\",ث:\"th\",ج:\"j\",ح:\"h\",خ:\"kh\",د:\"d\",ذ:\"th\",ر:\"r\",ز:\"z\",س:\"s\",ش:\"sh\",ص:\"s\",ض:\"dh\",ط:\"t\",ظ:\"z\",ع:\"a\",غ:\"gh\",ف:\"f\",ق:\"q\",ك:\"k\",ل:\"l\",م:\"m\",ن:\"n\",ه:\"h\",و:\"w\",ي:\"y\",ى:\"a\",ة:\"h\",ﻻ:\"la\",ﻷ:\"laa\",ﻹ:\"lai\",ﻵ:\"laa\"}},_map_greek:function(){return{α:\"a\",β:\"b\",γ:\"g\",δ:\"d\",ε:\"e\",ζ:\"z\",η:\"h\",θ:\"8\",ι:\"i\",κ:\"k\",λ:\"l\",μ:\"m\",ν:\"n\",ξ:\"3\",ο:\"o\",π:\"p\",ρ:\"r\",σ:\"s\",τ:\"t\",υ:\"y\",φ:\"f\",χ:\"x\",ψ:\"ps\",ω:\"w\",ά:\"a\",έ:\"e\",ί:\"i\",ό:\"o\",ύ:\"y\",ή:\"h\",ώ:\"w\",ς:\"s\",ϊ:\"i\",ΰ:\"y\",ϋ:\"y\",ΐ:\"i\",Α:\"A\",Β:\"B\",Γ:\"G\",Δ:\"D\",Ε:\"E\",Ζ:\"Z\",Η:\"H\",Θ:\"8\",Ι:\"I\",Κ:\"K\",Λ:\"L\",Μ:\"M\",Ν:\"N\",Ξ:\"3\",Ο:\"O\",Π:\"P\",Ρ:\"R\",Σ:\"S\",Τ:\"T\",Υ:\"Y\",Φ:\"F\",Χ:\"X\",Ψ:\"PS\",Ω:\"W\",Ά:\"A\",Έ:\"E\",Ί:\"I\",Ό:\"O\",Ύ:\"Y\",Ή:\"H\",Ώ:\"W\",Ϊ:\"I\",Ϋ:\"Y\"}},_map_turkish:function(){return{ş:\"s\",Ş:\"S\",ı:\"i\",İ:\"I\",ç:\"c\",Ç:\"C\",ü:\"u\",Ü:\"U\",ö:\"o\",Ö:\"O\",ğ:\"g\",Ğ:\"G\"}},_map_russian:function(){return{а:\"a\",б:\"b\",в:\"v\",г:\"g\",д:\"d\",е:\"e\",ё:\"yo\",ж:\"zh\",з:\"z\",и:\"i\",й:\"j\",к:\"k\",л:\"l\",м:\"m\",н:\"n\",о:\"o\",п:\"p\",р:\"r\",с:\"s\",т:\"t\",у:\"u\",ф:\"f\",х:\"h\",ц:\"c\",ч:\"ch\",ш:\"sh\",щ:\"sh\",ъ:\"\",ы:\"y\",ь:\"\",э:\"e\",ю:\"yu\",я:\"ya\",А:\"A\",Б:\"B\",В:\"V\",Г:\"G\",Д:\"D\",Е:\"E\",Ё:\"Yo\",Ж:\"Zh\",З:\"Z\",И:\"I\",Й:\"J\",К:\"K\",Л:\"L\",М:\"M\",Н:\"N\",О:\"O\",П:\"P\",Р:\"R\",С:\"S\",Т:\"T\",У:\"U\",Ф:\"F\",Х:\"H\",Ц:\"C\",Ч:\"Ch\",Ш:\"Sh\",Щ:\"Sh\",Ъ:\"\",Ы:\"Y\",Ь:\"\",Э:\"E\",Ю:\"Yu\",Я:\"Ya\"}},_map_ukranian:function(){return{Є:\"Ye\",І:\"I\",Ї:\"Yi\",Ґ:\"G\",є:\"ye\",і:\"i\",ї:\"yi\",ґ:\"g\"}},_map_czech:function(){return{č:\"c\",ď:\"d\",ě:\"e\",ň:\"n\",ř:\"r\",š:\"s\",ť:\"t\",ů:\"u\",ž:\"z\",Č:\"C\",Ď:\"D\",Ě:\"E\",Ň:\"N\",Ř:\"R\",Š:\"S\",Ť:\"T\",Ů:\"U\",Ž:\"Z\"}},_map_polish:function(){return{ą:\"a\",ć:\"c\",ę:\"e\",ł:\"l\",ń:\"n\",ó:\"o\",ś:\"s\",ź:\"z\",ż:\"z\",Ą:\"A\",Ć:\"C\",Ę:\"e\",Ł:\"L\",Ń:\"N\",Ó:\"o\",Ś:\"S\",Ź:\"Z\",Ż:\"Z\"}},_map_vietnam:function(){return{ạ:\"a\",ả:\"a\",ầ:\"a\",ấ:\"a\",ậ:\"a\",ẩ:\"a\",ẫ:\"a\",ằ:\"a\",ắ:\"a\",ặ:\"a\",ẳ:\"a\",ẵ:\"a\",ẹ:\"e\",ẻ:\"e\",ẽ:\"e\",ề:\"e\",ế:\"e\",ệ:\"e\",ể:\"e\",ễ:\"e\",ị:\"i\",ỉ:\"i\",ọ:\"o\",ỏ:\"o\",ồ:\"o\",ố:\"o\",ộ:\"o\",ổ:\"o\",ỗ:\"o\",ờ:\"o\",ớ:\"o\",ợ:\"o\",ở:\"o\",ỡ:\"o\",ụ:\"u\",ủ:\"u\",ừ:\"u\",ứ:\"u\",ự:\"u\",ử:\"u\",ữ:\"u\",ỳ:\"y\",ỵ:\"y\",ỷ:\"y\",ỹ:\"y\",Ạ:\"A\",Ả:\"A\",Ầ:\"A\",Ấ:\"A\",Ậ:\"A\",Ẩ:\"A\",Ẫ:\"A\",Ằ:\"A\",Ắ:\"A\",Ặ:\"A\",Ẳ:\"A\",Ẵ:\"A\",Ẹ:\"E\",Ẻ:\"E\",Ẽ:\"E\",Ề:\"E\",Ế:\"E\",Ệ:\"E\",Ể:\"E\",Ễ:\"E\",Ị:\"I\",Ỉ:\"I\",Ọ:\"O\",Ỏ:\"O\",Ồ:\"O\",Ố:\"O\",Ộ:\"O\",Ổ:\"O\",Ỗ:\"O\",Ờ:\"O\",Ớ:\"O\",Ợ:\"O\",Ở:\"O\",Ỡ:\"O\",Ụ:\"U\",Ủ:\"U\",Ừ:\"U\",Ứ:\"U\",Ự:\"U\",Ử:\"U\",Ữ:\"U\",Ỳ:\"Y\",Ỵ:\"Y\",đ:\"d\",Đ:\"D\",Ỷ:\"Y\",Ỹ:\"Y\",ă:\"a\",Ă:\"a\",Ư:\"u\",Ơ:\"o\",ư:\"u\",ơ:\"o\"}},_map_burmese:function(){return{က:\"k\",ခ:\"kh\",ဂ:\"g\",ဃ:\"ga\",င:\"ng\",စ:\"s\",ဆ:\"sa\",ဇ:\"z\",စျ:\"za\",ည:\"ny\",ဋ:\"t\",ဌ:\"ta\",ဍ:\"d\",ဎ:\"da\",ဏ:\"na\",တ:\"t\",ထ:\"ta\",ဒ:\"d\",ဓ:\"da\",န:\"n\",ပ:\"p\",ဖ:\"pa\",ဗ:\"b\",ဘ:\"ba\",မ:\"m\",ယ:\"y\",ရ:\"ya\",လ:\"l\",ဝ:\"w\",သ:\"th\",ဟ:\"h\",ဠ:\"la\",အ:\"a\",\"ြ\":\"y\",\"ျ\":\"ya\",\"ွ\":\"w\",\"ြွ\":\"yw\",\"ျွ\":\"ywa\",\"ှ\":\"h\",ဧ:\"e\",\"၏\":\"-e\",ဣ:\"i\",ဤ:\"-i\",ဉ:\"u\",ဦ:\"-u\",ဩ:\"aw\",သြော:\"aw\",ဪ:\"aw\",\"၀\":\"0\",\"၁\":\"1\",\"၂\":\"2\",\"၃\":\"3\",\"၄\":\"4\",\"၅\":\"5\",\"၆\":\"6\",\"၇\":\"7\",\"၈\":\"8\",\"၉\":\"9\",\"္\":\"\",\"့\":\"\",\"း\":\"\"}},_map_latvian:function(){return{ā:\"a\",č:\"c\",ē:\"e\",ģ:\"g\",ī:\"i\",ķ:\"k\",ļ:\"l\",ņ:\"n\",š:\"s\",ū:\"u\",ž:\"z\",Ā:\"A\",Č:\"C\",Ē:\"E\",Ģ:\"G\",Ī:\"i\",Ķ:\"k\",Ļ:\"L\",Ņ:\"N\",Š:\"S\",Ū:\"u\",Ž:\"Z\"}},_map_lithuanian:function(){return{ą:\"a\",č:\"c\",ę:\"e\",ė:\"e\",į:\"i\",š:\"s\",ų:\"u\",ū:\"u\",ž:\"z\",Ą:\"A\",Č:\"C\",Ę:\"E\",Ė:\"E\",Į:\"I\",Š:\"S\",Ų:\"U\",Ū:\"U\",Ž:\"Z\"}},_map_currency:function(){return{\"€\":\"euro\",$:\"dollar\",\"₢\":\"cruzeiro\",\"₣\":\"french franc\",\"£\":\"pound\",\"₤\":\"lira\",\"₥\":\"mill\",\"₦\":\"naira\",\"₧\":\"peseta\",\"₨\":\"rupee\",\"₩\":\"won\",\"₪\":\"new shequel\",\"₫\":\"dong\",\"₭\":\"kip\",\"₮\":\"tugrik\",\"₯\":\"drachma\",\"₰\":\"penny\",\"₱\":\"peso\",\"₲\":\"guarani\",\"₳\":\"austral\",\"₴\":\"hryvnia\",\"₵\":\"cedi\",\"¢\":\"cent\",\"¥\":\"yen\",元:\"yuan\",円:\"yen\",\"﷼\":\"rial\",\"₠\":\"ecu\",\"¤\":\"currency\",\"฿\":\"baht\"}},_map_symbols:function(){return{\"©\":\"(c)\",œ:\"oe\",Œ:\"OE\",\"∑\":\"sum\",\"®\":\"(r)\",\"†\":\"+\",\"“\":'\"',\"”\":'\"',\"‘\":\"'\",\"’\":\"'\",\"∂\":\"d\",ƒ:\"f\",\"™\":\"tm\",\"℠\":\"sm\",\"…\":\"...\",\"˚\":\"o\",º:\"o\",ª:\"a\",\"•\":\"*\",\"∆\":\"delta\",\"∞\":\"infinity\",\"♥\":\"love\",\"&\":\"and\"}}}),e.fn.slugify=function(t){return this.each((function(){e.data(this,o)||e.data(this,o,new s(this,t))}))}}(jQuery,window,document)},9457:()=>{for(var e=document.getElementsByClassName(\"ace_editor\"),t=0;t<e.length;t++){ace.config.set(\"basePath\",$('meta[name=\"assets-path\"]').attr(\"content\")+\"?path=js/ace/libs\");var n=ace.edit(e[t].id),r=document.getElementById(e[t].id+\"_textarea\");e[t].getAttribute(\"data-theme\")&&n.setTheme(\"ace/theme/\"+e[t].getAttribute(\"data-theme\")),e[t].getAttribute(\"data-language\")&&n.getSession().setMode(\"ace/mode/\"+e[t].getAttribute(\"data-language\")),n.on(\"change\",(function(e,t){ace_editor_id=t.container.id,r=document.getElementById(ace_editor_id+\"_textarea\"),ace_editor_instance=ace.edit(ace_editor_id),r.value=ace_editor_instance.getValue()}))}},4388:(e,t,n)=>{\"use strict\";n.r(t);n(1768),n(2682),n(2170),n(8190),n(8619),n(1236);$(document).ready((function(){$.ajaxSetup({headers:{\"X-CSRF-TOKEN\":$('meta[name=\"csrf-token\"]').attr(\"content\")}})}))},2736:(e,t)=>{t.getConfig=function(e){var t={menubar:!1,selector:\"textarea.richTextBox\",base_url:$('meta[name=\"assets-path\"]').attr(\"content\")+\"?path=js/\",skin:\"oxide\",min_height:600,resize:!0,plugins:\"link image code table lists\",extended_valid_elements:\"input[id|name|value|type|class|style|required|placeholder|autocomplete|onclick]\",relative_urls:!1,remove_script_host:!1,file_picker_types:\"image\",file_picker_callback:function(e,t,n){if(\"image\"==n.filetype){var r=document.createElement(\"input\");r.setAttribute(\"type\",\"file\"),r.setAttribute(\"accept\",\"image/*\"),r.onchange=function(){var t=new FormData;t.append(\"image\",this.files[0]),t.append(\"type_slug\",$(\"#upload_type_slug\").val()),$(\"#voyager-loader\").css(\"z-index\",1e4),$(\"#voyager-loader\").fadeIn(),$.ajax({type:\"post\",url:$(\"#upload_url\").val(),data:t,enctype:\"multipart/form-data\",processData:!1,contentType:!1,cache:!1}).done((function(t){e(t)})).always((function(){$(\"#voyager-loader\").fadeOut(),$(\"#voyager-loader\").css(\"z-index\",99)}))},r.click()}},toolbar:\"styleselect | bold italic underline | forecolor backcolor | alignleft aligncenter alignright | bullist numlist outdent indent | link image table | code\",image_caption:!0,image_title:!0,init_instance_callback:function(e){\"undefined\"!=typeof tinymce_init_callback&&tinymce_init_callback(e)},setup:function(e){\"undefined\"!=typeof tinymce_setup_callback&&tinymce_setup_callback(e)}};return $.extend({},t,e)}},5652:()=>{!function(e){\"use strict\";var t=function(t,n){this.$element=e(t),this.options=e.extend({},this.defaults(),n),this.render()};t.VERSION=\"2.2.0\",t.DEFAULTS={on:\"On\",off:\"Off\",onstyle:\"primary\",offstyle:\"default\",size:\"normal\",style:\"\",width:null,height:null},t.prototype.defaults=function(){return{on:this.$element.attr(\"data-on\")||t.DEFAULTS.on,off:this.$element.attr(\"data-off\")||t.DEFAULTS.off,onstyle:this.$element.attr(\"data-onstyle\")||t.DEFAULTS.onstyle,offstyle:this.$element.attr(\"data-offstyle\")||t.DEFAULTS.offstyle,size:this.$element.attr(\"data-size\")||t.DEFAULTS.size,style:this.$element.attr(\"data-style\")||t.DEFAULTS.style,width:this.$element.attr(\"data-width\")||t.DEFAULTS.width,height:this.$element.attr(\"data-height\")||t.DEFAULTS.height}},t.prototype.render=function(){this._onstyle=\"btn-\"+this.options.onstyle,this._offstyle=\"btn-\"+this.options.offstyle;var t=\"large\"===this.options.size?\"btn-lg\":\"small\"===this.options.size?\"btn-sm\":\"mini\"===this.options.size?\"btn-xs\":\"\",n=e('<label class=\"btn\">').html(this.options.on).addClass(this._onstyle+\" \"+t),r=e('<label class=\"btn\">').html(this.options.off).addClass(this._offstyle+\" \"+t+\" active\"),o=e('<span class=\"toggle-handle btn btn-default\">').addClass(t),i=e('<div class=\"toggle-group\">').append(n,r,o),s=e('<div class=\"toggle btn\" data-toggle=\"toggle\">').addClass(this.$element.prop(\"checked\")?this._onstyle:this._offstyle+\" off\").addClass(t).addClass(this.options.style);this.$element.wrap(s),e.extend(this,{$toggle:this.$element.parent(),$toggleOn:n,$toggleOff:r,$toggleGroup:i}),this.$toggle.append(i);var a=this.options.width||Math.max(n.outerWidth(),r.outerWidth())+o.outerWidth()/2,l=this.options.height||Math.max(n.outerHeight(),r.outerHeight());n.addClass(\"toggle-on\"),r.addClass(\"toggle-off\"),this.$toggle.css({width:a,height:l}),this.options.height&&(n.css(\"line-height\",n.height()+\"px\"),r.css(\"line-height\",r.height()+\"px\")),this.update(!0),this.trigger(!0)},t.prototype.toggle=function(){this.$element.prop(\"checked\")?this.off():this.on()},t.prototype.on=function(e){if(this.$element.prop(\"disabled\"))return!1;this.$toggle.removeClass(this._offstyle+\" off\").addClass(this._onstyle),this.$element.prop(\"checked\",!0),e||this.trigger()},t.prototype.off=function(e){if(this.$element.prop(\"disabled\"))return!1;this.$toggle.removeClass(this._onstyle).addClass(this._offstyle+\" off\"),this.$element.prop(\"checked\",!1),e||this.trigger()},t.prototype.enable=function(){this.$toggle.removeAttr(\"disabled\"),this.$element.prop(\"disabled\",!1)},t.prototype.disable=function(){this.$toggle.attr(\"disabled\",\"disabled\"),this.$element.prop(\"disabled\",!0)},t.prototype.update=function(e){this.$element.prop(\"disabled\")?this.disable():this.enable(),this.$element.prop(\"checked\")?this.on(e):this.off(e)},t.prototype.trigger=function(t){this.$element.off(\"change.bs.toggle\"),t||this.$element.change(),this.$element.on(\"change.bs.toggle\",e.proxy((function(){this.update()}),this))},t.prototype.destroy=function(){this.$element.off(\"change.bs.toggle\"),this.$toggleGroup.remove(),this.$element.removeData(\"bs.toggle\"),this.$element.unwrap()};var n=e.fn.bootstrapToggle;e.fn.bootstrapToggle=function(n){return this.each((function(){var r=e(this),o=r.data(\"bs.toggle\"),i=\"object\"==typeof n&&n;o||r.data(\"bs.toggle\",o=new t(this,i)),\"string\"==typeof n&&o[n]&&o[n]()}))},e.fn.bootstrapToggle.Constructor=t,e.fn.toggle.noConflict=function(){return e.fn.bootstrapToggle=n,this},e((function(){e(\"input[type=checkbox][data-toggle^=toggle]\").bootstrapToggle()})),e(document).on(\"click.bs.toggle\",\"div[data-toggle^=toggle]\",(function(t){e(this).find(\"input[type=checkbox]\").bootstrapToggle(\"toggle\"),t.preventDefault()}))}(jQuery)},7915:(e,t,n)=>{n(8294),n(1309),n(3929),n(4050),n(63),n(9737),n(8852),n(6278),n(6927),n(3497),n(7814),n(5377)},5377:()=>{!function(e){\"use strict\";var t=function(n,r){this.options=e.extend({},t.DEFAULTS,r);var o=this.options.target===t.DEFAULTS.target?e(this.options.target):e(document).find(this.options.target);this.$target=o.on(\"scroll.bs.affix.data-api\",e.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",e.proxy(this.checkPositionWithEventLoop,this)),this.$element=e(n),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function n(n){return this.each((function(){var r=e(this),o=r.data(\"bs.affix\"),i=\"object\"==typeof n&&n;o||r.data(\"bs.affix\",o=new t(this,i)),\"string\"==typeof n&&o[n]()}))}t.VERSION=\"3.4.1\",t.RESET=\"affix affix-top affix-bottom\",t.DEFAULTS={offset:0,target:window},t.prototype.getState=function(e,t,n,r){var o=this.$target.scrollTop(),i=this.$element.offset(),s=this.$target.height();if(null!=n&&\"top\"==this.affixed)return o<n&&\"top\";if(\"bottom\"==this.affixed)return null!=n?!(o+this.unpin<=i.top)&&\"bottom\":!(o+s<=e-r)&&\"bottom\";var a=null==this.affixed,l=a?o:i.top;return null!=n&&o<=n?\"top\":null!=r&&l+(a?s:t)>=e-r&&\"bottom\"},t.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(t.RESET).addClass(\"affix\");var e=this.$target.scrollTop(),n=this.$element.offset();return this.pinnedOffset=n.top-e},t.prototype.checkPositionWithEventLoop=function(){setTimeout(e.proxy(this.checkPosition,this),1)},t.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var n=this.$element.height(),r=this.options.offset,o=r.top,i=r.bottom,s=Math.max(e(document).height(),e(document.body).height());\"object\"!=typeof r&&(i=o=r),\"function\"==typeof o&&(o=r.top(this.$element)),\"function\"==typeof i&&(i=r.bottom(this.$element));var a=this.getState(s,n,o,i);if(this.affixed!=a){null!=this.unpin&&this.$element.css(\"top\",\"\");var l=\"affix\"+(a?\"-\"+a:\"\"),c=e.Event(l+\".bs.affix\");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=a,this.unpin=\"bottom\"==a?this.getPinnedOffset():null,this.$element.removeClass(t.RESET).addClass(l).trigger(l.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==a&&this.$element.offset({top:s-n-i})}};var r=e.fn.affix;e.fn.affix=n,e.fn.affix.Constructor=t,e.fn.affix.noConflict=function(){return e.fn.affix=r,this},e(window).on(\"load\",(function(){e('[data-spy=\"affix\"]').each((function(){var t=e(this),r=t.data();r.offset=r.offset||{},null!=r.offsetBottom&&(r.offset.bottom=r.offsetBottom),null!=r.offsetTop&&(r.offset.top=r.offsetTop),n.call(t,r)}))}))}(jQuery)},1309:()=>{!function(e){\"use strict\";var t='[data-dismiss=\"alert\"]',n=function(n){e(n).on(\"click\",t,this.close)};n.VERSION=\"3.4.1\",n.TRANSITION_DURATION=150,n.prototype.close=function(t){var r=e(this),o=r.attr(\"data-target\");o||(o=(o=r.attr(\"href\"))&&o.replace(/.*(?=#[^\\s]*$)/,\"\")),o=\"#\"===o?[]:o;var i=e(document).find(o);function s(){i.detach().trigger(\"closed.bs.alert\").remove()}t&&t.preventDefault(),i.length||(i=r.closest(\".alert\")),i.trigger(t=e.Event(\"close.bs.alert\")),t.isDefaultPrevented()||(i.removeClass(\"in\"),e.support.transition&&i.hasClass(\"fade\")?i.one(\"bsTransitionEnd\",s).emulateTransitionEnd(n.TRANSITION_DURATION):s())};var r=e.fn.alert;e.fn.alert=function(t){return this.each((function(){var r=e(this),o=r.data(\"bs.alert\");o||r.data(\"bs.alert\",o=new n(this)),\"string\"==typeof t&&o[t].call(r)}))},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on(\"click.bs.alert.data-api\",t,n.prototype.close)}(jQuery)},3929:()=>{!function(e){\"use strict\";var t=function(n,r){this.$element=e(n),this.options=e.extend({},t.DEFAULTS,r),this.isLoading=!1};function n(n){return this.each((function(){var r=e(this),o=r.data(\"bs.button\"),i=\"object\"==typeof n&&n;o||r.data(\"bs.button\",o=new t(this,i)),\"toggle\"==n?o.toggle():n&&o.setState(n)}))}t.VERSION=\"3.4.1\",t.DEFAULTS={loadingText:\"loading...\"},t.prototype.setState=function(t){var n=\"disabled\",r=this.$element,o=r.is(\"input\")?\"val\":\"html\",i=r.data();t+=\"Text\",null==i.resetText&&r.data(\"resetText\",r[o]()),setTimeout(e.proxy((function(){r[o](null==i[t]?this.options[t]:i[t]),\"loadingText\"==t?(this.isLoading=!0,r.addClass(n).attr(n,n).prop(n,!0)):this.isLoading&&(this.isLoading=!1,r.removeClass(n).removeAttr(n).prop(n,!1))}),this),0)},t.prototype.toggle=function(){var e=!0,t=this.$element.closest('[data-toggle=\"buttons\"]');if(t.length){var n=this.$element.find(\"input\");\"radio\"==n.prop(\"type\")?(n.prop(\"checked\")&&(e=!1),t.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==n.prop(\"type\")&&(n.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(e=!1),this.$element.toggleClass(\"active\")),n.prop(\"checked\",this.$element.hasClass(\"active\")),e&&n.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var r=e.fn.button;e.fn.button=n,e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=r,this},e(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',(function(t){var r=e(t.target).closest(\".btn\");n.call(r,\"toggle\"),e(t.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(t.preventDefault(),r.is(\"input,button\")?r.trigger(\"focus\"):r.find(\"input:visible,button:visible\").first().trigger(\"focus\"))})).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',(function(t){e(t.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(t.type))}))}(jQuery)},4050:()=>{!function(e){\"use strict\";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",e.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",e.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",e.proxy(this.cycle,this))};function n(n){return this.each((function(){var r=e(this),o=r.data(\"bs.carousel\"),i=e.extend({},t.DEFAULTS,r.data(),\"object\"==typeof n&&n),s=\"string\"==typeof n?n:i.slide;o||r.data(\"bs.carousel\",o=new t(this,i)),\"number\"==typeof n?o.to(n):s?o[s]():i.interval&&o.pause().cycle()}))}t.VERSION=\"3.4.1\",t.TRANSITION_DURATION=600,t.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},t.prototype.keydown=function(e){if(!/input|textarea/i.test(e.target.tagName)){switch(e.which){case 37:this.prev();break;case 39:this.next();break;default:return}e.preventDefault()}},t.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},t.prototype.getItemIndex=function(e){return this.$items=e.parent().children(\".item\"),this.$items.index(e||this.$active)},t.prototype.getItemForDirection=function(e,t){var n=this.getItemIndex(t);if((\"prev\"==e&&0===n||\"next\"==e&&n==this.$items.length-1)&&!this.options.wrap)return t;var r=(n+(\"prev\"==e?-1:1))%this.$items.length;return this.$items.eq(r)},t.prototype.to=function(e){var t=this,n=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(e>this.$items.length-1||e<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",(function(){t.to(e)})):n==e?this.pause().cycle():this.slide(e>n?\"next\":\"prev\",this.$items.eq(e))},t.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(\".next, .prev\").length&&e.support.transition&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},t.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},t.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},t.prototype.slide=function(n,r){var o=this.$element.find(\".item.active\"),i=r||this.getItemForDirection(n,o),s=this.interval,a=\"next\"==n?\"left\":\"right\",l=this;if(i.hasClass(\"active\"))return this.sliding=!1;var c=i[0],u=e.Event(\"slide.bs.carousel\",{relatedTarget:c,direction:a});if(this.$element.trigger(u),!u.isDefaultPrevented()){if(this.sliding=!0,s&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var d=e(this.$indicators.children()[this.getItemIndex(i)]);d&&d.addClass(\"active\")}var h=e.Event(\"slid.bs.carousel\",{relatedTarget:c,direction:a});return e.support.transition&&this.$element.hasClass(\"slide\")?(i.addClass(n),\"object\"==typeof i&&i.length&&i[0].offsetWidth,o.addClass(a),i.addClass(a),o.one(\"bsTransitionEnd\",(function(){i.removeClass([n,a].join(\" \")).addClass(\"active\"),o.removeClass([\"active\",a].join(\" \")),l.sliding=!1,setTimeout((function(){l.$element.trigger(h)}),0)})).emulateTransitionEnd(t.TRANSITION_DURATION)):(o.removeClass(\"active\"),i.addClass(\"active\"),this.sliding=!1,this.$element.trigger(h)),s&&this.cycle(),this}};var r=e.fn.carousel;e.fn.carousel=n,e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=r,this};var o=function(t){var r=e(this),o=r.attr(\"href\");o&&(o=o.replace(/.*(?=#[^\\s]+$)/,\"\"));var i=r.attr(\"data-target\")||o,s=e(document).find(i);if(s.hasClass(\"carousel\")){var a=e.extend({},s.data(),r.data()),l=r.attr(\"data-slide-to\");l&&(a.interval=!1),n.call(s,a),l&&s.data(\"bs.carousel\").to(l),t.preventDefault()}};e(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",o).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",o),e(window).on(\"load\",(function(){e('[data-ride=\"carousel\"]').each((function(){var t=e(this);n.call(t,t.data())}))}))}(jQuery)},63:()=>{!function(e){\"use strict\";var t=function(n,r){this.$element=e(n),this.options=e.extend({},t.DEFAULTS,r),this.$trigger=e('[data-toggle=\"collapse\"][href=\"#'+n.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+n.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(t){var n,r=t.attr(\"data-target\")||(n=t.attr(\"href\"))&&n.replace(/.*(?=#[^\\s]+$)/,\"\");return e(document).find(r)}function r(n){return this.each((function(){var r=e(this),o=r.data(\"bs.collapse\"),i=e.extend({},t.DEFAULTS,r.data(),\"object\"==typeof n&&n);!o&&i.toggle&&/show|hide/.test(n)&&(i.toggle=!1),o||r.data(\"bs.collapse\",o=new t(this,i)),\"string\"==typeof n&&o[n]()}))}t.VERSION=\"3.4.1\",t.TRANSITION_DURATION=350,t.DEFAULTS={toggle:!0},t.prototype.dimension=function(){return this.$element.hasClass(\"width\")?\"width\":\"height\"},t.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var n,o=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(o&&o.length&&(n=o.data(\"bs.collapse\"))&&n.transitioning)){var i=e.Event(\"show.bs.collapse\");if(this.$element.trigger(i),!i.isDefaultPrevented()){o&&o.length&&(r.call(o,\"hide\"),n||o.data(\"bs.collapse\",null));var s=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[s](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var a=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[s](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!e.support.transition)return a.call(this);var l=e.camelCase([\"scroll\",s].join(\"-\"));this.$element.one(\"bsTransitionEnd\",e.proxy(a,this)).emulateTransitionEnd(t.TRANSITION_DURATION)[s](this.$element[0][l])}}}},t.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var n=e.Event(\"hide.bs.collapse\");if(this.$element.trigger(n),!n.isDefaultPrevented()){var r=this.dimension();this.$element[r](this.$element[r]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};if(!e.support.transition)return o.call(this);this.$element[r](0).one(\"bsTransitionEnd\",e.proxy(o,this)).emulateTransitionEnd(t.TRANSITION_DURATION)}}},t.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},t.prototype.getParent=function(){return e(document).find(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(e.proxy((function(t,r){var o=e(r);this.addAriaAndCollapsedClass(n(o),o)}),this)).end()},t.prototype.addAriaAndCollapsedClass=function(e,t){var n=e.hasClass(\"in\");e.attr(\"aria-expanded\",n),t.toggleClass(\"collapsed\",!n).attr(\"aria-expanded\",n)};var o=e.fn.collapse;e.fn.collapse=r,e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=o,this},e(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',(function(t){var o=e(this);o.attr(\"data-target\")||t.preventDefault();var i=n(o),s=i.data(\"bs.collapse\")?\"toggle\":o.data();r.call(i,s)}))}(jQuery)},9737:()=>{!function(e){\"use strict\";var t='[data-toggle=\"dropdown\"]',n=function(t){e(t).on(\"click.bs.dropdown\",this.toggle)};function r(t){var n=t.attr(\"data-target\");n||(n=(n=t.attr(\"href\"))&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\\s]*$)/,\"\"));var r=\"#\"!==n?e(document).find(n):null;return r&&r.length?r:t.parent()}function o(n){n&&3===n.which||(e(\".dropdown-backdrop\").remove(),e(t).each((function(){var t=e(this),o=r(t),i={relatedTarget:this};o.hasClass(\"open\")&&(n&&\"click\"==n.type&&/input|textarea/i.test(n.target.tagName)&&e.contains(o[0],n.target)||(o.trigger(n=e.Event(\"hide.bs.dropdown\",i)),n.isDefaultPrevented()||(t.attr(\"aria-expanded\",\"false\"),o.removeClass(\"open\").trigger(e.Event(\"hidden.bs.dropdown\",i)))))})))}n.VERSION=\"3.4.1\",n.prototype.toggle=function(t){var n=e(this);if(!n.is(\".disabled, :disabled\")){var i=r(n),s=i.hasClass(\"open\");if(o(),!s){\"ontouchstart\"in document.documentElement&&!i.closest(\".navbar-nav\").length&&e(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(e(this)).on(\"click\",o);var a={relatedTarget:this};if(i.trigger(t=e.Event(\"show.bs.dropdown\",a)),t.isDefaultPrevented())return;n.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),i.toggleClass(\"open\").trigger(e.Event(\"shown.bs.dropdown\",a))}return!1}},n.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var o=e(this);if(n.preventDefault(),n.stopPropagation(),!o.is(\".disabled, :disabled\")){var i=r(o),s=i.hasClass(\"open\");if(!s&&27!=n.which||s&&27==n.which)return 27==n.which&&i.find(t).trigger(\"focus\"),o.trigger(\"click\");var a=i.find(\".dropdown-menu li:not(.disabled):visible a\");if(a.length){var l=a.index(n.target);38==n.which&&l>0&&l--,40==n.which&&l<a.length-1&&l++,~l||(l=0),a.eq(l).trigger(\"focus\")}}}};var i=e.fn.dropdown;e.fn.dropdown=function(t){return this.each((function(){var r=e(this),o=r.data(\"bs.dropdown\");o||r.data(\"bs.dropdown\",o=new n(this)),\"string\"==typeof t&&o[t].call(r)}))},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=i,this},e(document).on(\"click.bs.dropdown.data-api\",o).on(\"click.bs.dropdown.data-api\",\".dropdown form\",(function(e){e.stopPropagation()})).on(\"click.bs.dropdown.data-api\",t,n.prototype.toggle).on(\"keydown.bs.dropdown.data-api\",t,n.prototype.keydown).on(\"keydown.bs.dropdown.data-api\",\".dropdown-menu\",n.prototype.keydown)}(jQuery)},8852:()=>{!function(e){\"use strict\";var t=function(t,n){this.options=n,this.$body=e(document.body),this.$element=e(t),this.$dialog=this.$element.find(\".modal-dialog\"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=\".navbar-fixed-top, .navbar-fixed-bottom\",this.options.remote&&this.$element.find(\".modal-content\").load(this.options.remote,e.proxy((function(){this.$element.trigger(\"loaded.bs.modal\")}),this))};function n(n,r){return this.each((function(){var o=e(this),i=o.data(\"bs.modal\"),s=e.extend({},t.DEFAULTS,o.data(),\"object\"==typeof n&&n);i||o.data(\"bs.modal\",i=new t(this,s)),\"string\"==typeof n?i[n](r):s.show&&i.show(r)}))}t.VERSION=\"3.4.1\",t.TRANSITION_DURATION=300,t.BACKDROP_TRANSITION_DURATION=150,t.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},t.prototype.toggle=function(e){return this.isShown?this.hide():this.show(e)},t.prototype.show=function(n){var r=this,o=e.Event(\"show.bs.modal\",{relatedTarget:n});this.$element.trigger(o),this.isShown||o.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass(\"modal-open\"),this.escape(),this.resize(),this.$element.on(\"click.dismiss.bs.modal\",'[data-dismiss=\"modal\"]',e.proxy(this.hide,this)),this.$dialog.on(\"mousedown.dismiss.bs.modal\",(function(){r.$element.one(\"mouseup.dismiss.bs.modal\",(function(t){e(t.target).is(r.$element)&&(r.ignoreBackdropClick=!0)}))})),this.backdrop((function(){var o=e.support.transition&&r.$element.hasClass(\"fade\");r.$element.parent().length||r.$element.appendTo(r.$body),r.$element.show().scrollTop(0),r.adjustDialog(),o&&r.$element[0].offsetWidth,r.$element.addClass(\"in\"),r.enforceFocus();var i=e.Event(\"shown.bs.modal\",{relatedTarget:n});o?r.$dialog.one(\"bsTransitionEnd\",(function(){r.$element.trigger(\"focus\").trigger(i)})).emulateTransitionEnd(t.TRANSITION_DURATION):r.$element.trigger(\"focus\").trigger(i)})))},t.prototype.hide=function(n){n&&n.preventDefault(),n=e.Event(\"hide.bs.modal\"),this.$element.trigger(n),this.isShown&&!n.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),e(document).off(\"focusin.bs.modal\"),this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"),this.$dialog.off(\"mousedown.dismiss.bs.modal\"),e.support.transition&&this.$element.hasClass(\"fade\")?this.$element.one(\"bsTransitionEnd\",e.proxy(this.hideModal,this)).emulateTransitionEnd(t.TRANSITION_DURATION):this.hideModal())},t.prototype.enforceFocus=function(){e(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\",e.proxy((function(e){document===e.target||this.$element[0]===e.target||this.$element.has(e.target).length||this.$element.trigger(\"focus\")}),this))},t.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(\"keydown.dismiss.bs.modal\",e.proxy((function(e){27==e.which&&this.hide()}),this)):this.isShown||this.$element.off(\"keydown.dismiss.bs.modal\")},t.prototype.resize=function(){this.isShown?e(window).on(\"resize.bs.modal\",e.proxy(this.handleUpdate,this)):e(window).off(\"resize.bs.modal\")},t.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop((function(){e.$body.removeClass(\"modal-open\"),e.resetAdjustments(),e.resetScrollbar(),e.$element.trigger(\"hidden.bs.modal\")}))},t.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},t.prototype.backdrop=function(n){var r=this,o=this.$element.hasClass(\"fade\")?\"fade\":\"\";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&o;if(this.$backdrop=e(document.createElement(\"div\")).addClass(\"modal-backdrop \"+o).appendTo(this.$body),this.$element.on(\"click.dismiss.bs.modal\",e.proxy((function(e){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:e.target===e.currentTarget&&(\"static\"==this.options.backdrop?this.$element[0].focus():this.hide())}),this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass(\"in\"),!n)return;i?this.$backdrop.one(\"bsTransitionEnd\",n).emulateTransitionEnd(t.BACKDROP_TRANSITION_DURATION):n()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass(\"in\");var s=function(){r.removeBackdrop(),n&&n()};e.support.transition&&this.$element.hasClass(\"fade\")?this.$backdrop.one(\"bsTransitionEnd\",s).emulateTransitionEnd(t.BACKDROP_TRANSITION_DURATION):s()}else n&&n()},t.prototype.handleUpdate=function(){this.adjustDialog()},t.prototype.adjustDialog=function(){var e=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&e?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!e?this.scrollbarWidth:\"\"})},t.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},t.prototype.checkScrollbar=function(){var e=window.innerWidth;if(!e){var t=document.documentElement.getBoundingClientRect();e=t.right-Math.abs(t.left)}this.bodyIsOverflowing=document.body.clientWidth<e,this.scrollbarWidth=this.measureScrollbar()},t.prototype.setScrollbar=function(){var t=parseInt(this.$body.css(\"padding-right\")||0,10);this.originalBodyPad=document.body.style.paddingRight||\"\";var n=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css(\"padding-right\",t+n),e(this.fixedContent).each((function(t,r){var o=r.style.paddingRight,i=e(r).css(\"padding-right\");e(r).data(\"padding-right\",o).css(\"padding-right\",parseFloat(i)+n+\"px\")})))},t.prototype.resetScrollbar=function(){this.$body.css(\"padding-right\",this.originalBodyPad),e(this.fixedContent).each((function(t,n){var r=e(n).data(\"padding-right\");e(n).removeData(\"padding-right\"),n.style.paddingRight=r||\"\"}))},t.prototype.measureScrollbar=function(){var e=document.createElement(\"div\");e.className=\"modal-scrollbar-measure\",this.$body.append(e);var t=e.offsetWidth-e.clientWidth;return this.$body[0].removeChild(e),t};var r=e.fn.modal;e.fn.modal=n,e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=r,this},e(document).on(\"click.bs.modal.data-api\",'[data-toggle=\"modal\"]',(function(t){var r=e(this),o=r.attr(\"href\"),i=r.attr(\"data-target\")||o&&o.replace(/.*(?=#[^\\s]+$)/,\"\"),s=e(document).find(i),a=s.data(\"bs.modal\")?\"toggle\":e.extend({remote:!/#/.test(o)&&o},s.data(),r.data());r.is(\"a\")&&t.preventDefault(),s.one(\"show.bs.modal\",(function(e){e.isDefaultPrevented()||s.one(\"hidden.bs.modal\",(function(){r.is(\":visible\")&&r.trigger(\"focus\")}))})),n.call(s,a,this)}))}(jQuery)},6927:()=>{!function(e){\"use strict\";var t=function(e,t){this.init(\"popover\",e,t)};if(!e.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");t.VERSION=\"3.4.1\",t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),(t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype)).constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();if(this.options.html){var r=typeof n;this.options.sanitize&&(t=this.sanitizeHtml(t),\"string\"===r&&(n=this.sanitizeHtml(n))),e.find(\".popover-title\").html(t),e.find(\".popover-content\").children().detach().end()[\"string\"===r?\"html\":\"append\"](n)}else e.find(\".popover-title\").text(t),e.find(\".popover-content\").children().detach().end().text(n);e.removeClass(\"fade top bottom left right in\"),e.find(\".popover-title\").html()||e.find(\".popover-title\").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr(\"data-content\")||(\"function\"==typeof t.content?t.content.call(e[0]):t.content)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var n=e.fn.popover;e.fn.popover=function(n){return this.each((function(){var r=e(this),o=r.data(\"bs.popover\"),i=\"object\"==typeof n&&n;!o&&/destroy|hide/.test(n)||(o||r.data(\"bs.popover\",o=new t(this,i)),\"string\"==typeof n&&o[n]())}))},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(jQuery)},3497:()=>{!function(e){\"use strict\";function t(n,r){this.$body=e(document.body),this.$scrollElement=e(n).is(document.body)?e(window):e(n),this.options=e.extend({},t.DEFAULTS,r),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",e.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each((function(){var r=e(this),o=r.data(\"bs.scrollspy\"),i=\"object\"==typeof n&&n;o||r.data(\"bs.scrollspy\",o=new t(this,i)),\"string\"==typeof n&&o[n]()}))}t.VERSION=\"3.4.1\",t.DEFAULTS={offset:10},t.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},t.prototype.refresh=function(){var t=this,n=\"offset\",r=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),e.isWindow(this.$scrollElement[0])||(n=\"position\",r=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map((function(){var t=e(this),o=t.data(\"target\")||t.attr(\"href\"),i=/^#./.test(o)&&e(o);return i&&i.length&&i.is(\":visible\")&&[[i[n]().top+r,o]]||null})).sort((function(e,t){return e[0]-t[0]})).each((function(){t.offsets.push(this[0]),t.targets.push(this[1])}))},t.prototype.process=function(){var e,t=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),r=this.options.offset+n-this.$scrollElement.height(),o=this.offsets,i=this.targets,s=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),t>=r)return s!=(e=i[i.length-1])&&this.activate(e);if(s&&t<o[0])return this.activeTarget=null,this.clear();for(e=o.length;e--;)s!=i[e]&&t>=o[e]&&(void 0===o[e+1]||t<o[e+1])&&this.activate(i[e])},t.prototype.activate=function(t){this.activeTarget=t,this.clear();var n=this.selector+'[data-target=\"'+t+'\"],'+this.selector+'[href=\"'+t+'\"]',r=e(n).parents(\"li\").addClass(\"active\");r.parent(\".dropdown-menu\").length&&(r=r.closest(\"li.dropdown\").addClass(\"active\")),r.trigger(\"activate.bs.scrollspy\")},t.prototype.clear=function(){e(this.selector).parentsUntil(this.options.target,\".active\").removeClass(\"active\")};var r=e.fn.scrollspy;e.fn.scrollspy=n,e.fn.scrollspy.Constructor=t,e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=r,this},e(window).on(\"load.bs.scrollspy.data-api\",(function(){e('[data-spy=\"scroll\"]').each((function(){var t=e(this);n.call(t,t.data())}))}))}(jQuery)},7814:()=>{!function(e){\"use strict\";var t=function(t){this.element=e(t)};function n(n){return this.each((function(){var r=e(this),o=r.data(\"bs.tab\");o||r.data(\"bs.tab\",o=new t(this)),\"string\"==typeof n&&o[n]()}))}t.VERSION=\"3.4.1\",t.TRANSITION_DURATION=150,t.prototype.show=function(){var t=this.element,n=t.closest(\"ul:not(.dropdown-menu)\"),r=t.data(\"target\");if(r||(r=(r=t.attr(\"href\"))&&r.replace(/.*(?=#[^\\s]*$)/,\"\")),!t.parent(\"li\").hasClass(\"active\")){var o=n.find(\".active:last a\"),i=e.Event(\"hide.bs.tab\",{relatedTarget:t[0]}),s=e.Event(\"show.bs.tab\",{relatedTarget:o[0]});if(o.trigger(i),t.trigger(s),!s.isDefaultPrevented()&&!i.isDefaultPrevented()){var a=e(document).find(r);this.activate(t.closest(\"li\"),n),this.activate(a,a.parent(),(function(){o.trigger({type:\"hidden.bs.tab\",relatedTarget:t[0]}),t.trigger({type:\"shown.bs.tab\",relatedTarget:o[0]})}))}}},t.prototype.activate=function(n,r,o){var i=r.find(\"> .active\"),s=o&&e.support.transition&&(i.length&&i.hasClass(\"fade\")||!!r.find(\"> .fade\").length);function a(){i.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),n.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),s?(n[0].offsetWidth,n.addClass(\"in\")):n.removeClass(\"fade\"),n.parent(\".dropdown-menu\").length&&n.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),o&&o()}i.length&&s?i.one(\"bsTransitionEnd\",a).emulateTransitionEnd(t.TRANSITION_DURATION):a(),i.removeClass(\"in\")};var r=e.fn.tab;e.fn.tab=n,e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=r,this};var o=function(t){t.preventDefault(),n.call(e(this),\"show\")};e(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',o).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',o)}(jQuery)},6278:()=>{!function(e){\"use strict\";var t=[\"sanitize\",\"whiteList\",\"sanitizeFn\"],n=[\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"],r={\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},o=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,i=/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function s(t,r){var s=t.nodeName.toLowerCase();if(-1!==e.inArray(s,r))return-1===e.inArray(s,n)||Boolean(t.nodeValue.match(o)||t.nodeValue.match(i));for(var a=e(r).filter((function(e,t){return t instanceof RegExp})),l=0,c=a.length;l<c;l++)if(s.match(a[l]))return!0;return!1}function a(t,n,r){if(0===t.length)return t;if(r&&\"function\"==typeof r)return r(t);if(!document.implementation||!document.implementation.createHTMLDocument)return t;var o=document.implementation.createHTMLDocument(\"sanitization\");o.body.innerHTML=t;for(var i=e.map(n,(function(e,t){return t})),a=e(o.body).find(\"*\"),l=0,c=a.length;l<c;l++){var u=a[l],d=u.nodeName.toLowerCase();if(-1!==e.inArray(d,i))for(var h=e.map(u.attributes,(function(e){return e})),m=[].concat(n[\"*\"]||[],n[d]||[]),f=0,p=h.length;f<p;f++)s(h[f],m)||u.removeAttribute(h[f].nodeName);else u.parentNode.removeChild(u)}return o.body.innerHTML}var l=function(e,t){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",e,t)};l.VERSION=\"3.4.1\",l.TRANSITION_DURATION=150,l.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0},sanitize:!0,sanitizeFn:null,whiteList:r},l.prototype.init=function(t,n,r){if(this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.$viewport=this.options.viewport&&e(document).find(e.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var o=this.options.trigger.split(\" \"),i=o.length;i--;){var s=o[i];if(\"click\"==s)this.$element.on(\"click.\"+this.type,this.options.selector,e.proxy(this.toggle,this));else if(\"manual\"!=s){var a=\"hover\"==s?\"mouseenter\":\"focusin\",l=\"hover\"==s?\"mouseleave\":\"focusout\";this.$element.on(a+\".\"+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(l+\".\"+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},l.prototype.getDefaults=function(){return l.DEFAULTS},l.prototype.getOptions=function(n){var r=this.$element.data();for(var o in r)r.hasOwnProperty(o)&&-1!==e.inArray(o,t)&&delete r[o];return(n=e.extend({},this.getDefaults(),r,n)).delay&&\"number\"==typeof n.delay&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=a(n.template,n.whiteList,n.sanitizeFn)),n},l.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,(function(e,r){n[e]!=r&&(t[e]=r)})),t},l.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data(\"bs.\"+this.type);if(n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data(\"bs.\"+this.type,n)),t instanceof e.Event&&(n.inState[\"focusin\"==t.type?\"focus\":\"hover\"]=!0),n.tip().hasClass(\"in\")||\"in\"==n.hoverState)n.hoverState=\"in\";else{if(clearTimeout(n.timeout),n.hoverState=\"in\",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout((function(){\"in\"==n.hoverState&&n.show()}),n.options.delay.show)}},l.prototype.isInStateTrue=function(){for(var e in this.inState)if(this.inState[e])return!0;return!1},l.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data(\"bs.\"+this.type);if(n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data(\"bs.\"+this.type,n)),t instanceof e.Event&&(n.inState[\"focusout\"==t.type?\"focus\":\"hover\"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState=\"out\",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout((function(){\"out\"==n.hoverState&&n.hide()}),n.options.delay.hide)}},l.prototype.show=function(){var t=e.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var n=e.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!n)return;var r=this,o=this.tip(),i=this.getUID(this.type);this.setContent(),o.attr(\"id\",i),this.$element.attr(\"aria-describedby\",i),this.options.animation&&o.addClass(\"fade\");var s=\"function\"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\\s?auto?\\s?/i,c=a.test(s);c&&(s=s.replace(a,\"\")||\"top\"),o.detach().css({top:0,left:0,display:\"block\"}).addClass(s).data(\"bs.\"+this.type,this),this.options.container?o.appendTo(e(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var u=this.getPosition(),d=o[0].offsetWidth,h=o[0].offsetHeight;if(c){var m=s,f=this.getPosition(this.$viewport);s=\"bottom\"==s&&u.bottom+h>f.bottom?\"top\":\"top\"==s&&u.top-h<f.top?\"bottom\":\"right\"==s&&u.right+d>f.width?\"left\":\"left\"==s&&u.left-d<f.left?\"right\":s,o.removeClass(m).addClass(s)}var p=this.getCalculatedOffset(s,u,d,h);this.applyPlacement(p,s);var g=function(){var e=r.hoverState;r.$element.trigger(\"shown.bs.\"+r.type),r.hoverState=null,\"out\"==e&&r.leave(r)};e.support.transition&&this.$tip.hasClass(\"fade\")?o.one(\"bsTransitionEnd\",g).emulateTransitionEnd(l.TRANSITION_DURATION):g()}},l.prototype.applyPlacement=function(t,n){var r=this.tip(),o=r[0].offsetWidth,i=r[0].offsetHeight,s=parseInt(r.css(\"margin-top\"),10),a=parseInt(r.css(\"margin-left\"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),t.top+=s,t.left+=a,e.offset.setOffset(r[0],e.extend({using:function(e){r.css({top:Math.round(e.top),left:Math.round(e.left)})}},t),0),r.addClass(\"in\");var l=r[0].offsetWidth,c=r[0].offsetHeight;\"top\"==n&&c!=i&&(t.top=t.top+i-c);var u=this.getViewportAdjustedDelta(n,t,l,c);u.left?t.left+=u.left:t.top+=u.top;var d=/top|bottom/.test(n),h=d?2*u.left-o+l:2*u.top-i+c,m=d?\"offsetWidth\":\"offsetHeight\";r.offset(t),this.replaceArrow(h,r[0][m],d)},l.prototype.replaceArrow=function(e,t,n){this.arrow().css(n?\"left\":\"top\",50*(1-e/t)+\"%\").css(n?\"top\":\"left\",\"\")},l.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();this.options.html?(this.options.sanitize&&(t=a(t,this.options.whiteList,this.options.sanitizeFn)),e.find(\".tooltip-inner\").html(t)):e.find(\".tooltip-inner\").text(t),e.removeClass(\"fade in top bottom left right\")},l.prototype.hide=function(t){var n=this,r=e(this.$tip),o=e.Event(\"hide.bs.\"+this.type);function i(){\"in\"!=n.hoverState&&r.detach(),n.$element&&n.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+n.type),t&&t()}if(this.$element.trigger(o),!o.isDefaultPrevented())return r.removeClass(\"in\"),e.support.transition&&r.hasClass(\"fade\")?r.one(\"bsTransitionEnd\",i).emulateTransitionEnd(l.TRANSITION_DURATION):i(),this.hoverState=null,this},l.prototype.fixTitle=function(){var e=this.$element;(e.attr(\"title\")||\"string\"!=typeof e.attr(\"data-original-title\"))&&e.attr(\"data-original-title\",e.attr(\"title\")||\"\").attr(\"title\",\"\")},l.prototype.hasContent=function(){return this.getTitle()},l.prototype.getPosition=function(t){var n=(t=t||this.$element)[0],r=\"BODY\"==n.tagName,o=n.getBoundingClientRect();null==o.width&&(o=e.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var i=window.SVGElement&&n instanceof window.SVGElement,s=r?{top:0,left:0}:i?null:t.offset(),a={scroll:r?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},l=r?{width:e(window).width(),height:e(window).height()}:null;return e.extend({},o,a,l,s)},l.prototype.getCalculatedOffset=function(e,t,n,r){return\"bottom\"==e?{top:t.top+t.height,left:t.left+t.width/2-n/2}:\"top\"==e?{top:t.top-r,left:t.left+t.width/2-n/2}:\"left\"==e?{top:t.top+t.height/2-r/2,left:t.left-n}:{top:t.top+t.height/2-r/2,left:t.left+t.width}},l.prototype.getViewportAdjustedDelta=function(e,t,n,r){var o={top:0,left:0};if(!this.$viewport)return o;var i=this.options.viewport&&this.options.viewport.padding||0,s=this.getPosition(this.$viewport);if(/right|left/.test(e)){var a=t.top-i-s.scroll,l=t.top+i-s.scroll+r;a<s.top?o.top=s.top-a:l>s.top+s.height&&(o.top=s.top+s.height-l)}else{var c=t.left-i,u=t.left+i+n;c<s.left?o.left=s.left-c:u>s.right&&(o.left=s.left+s.width-u)}return o},l.prototype.getTitle=function(){var e=this.$element,t=this.options;return e.attr(\"data-original-title\")||(\"function\"==typeof t.title?t.title.call(e[0]):t.title)},l.prototype.getUID=function(e){do{e+=~~(1e6*Math.random())}while(document.getElementById(e));return e},l.prototype.tip=function(){if(!this.$tip&&(this.$tip=e(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},l.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},l.prototype.enable=function(){this.enabled=!0},l.prototype.disable=function(){this.enabled=!1},l.prototype.toggleEnabled=function(){this.enabled=!this.enabled},l.prototype.toggle=function(t){var n=this;t&&((n=e(t.currentTarget).data(\"bs.\"+this.type))||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data(\"bs.\"+this.type,n))),t?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass(\"in\")?n.leave(n):n.enter(n)},l.prototype.destroy=function(){var e=this;clearTimeout(this.timeout),this.hide((function(){e.$element.off(\".\"+e.type).removeData(\"bs.\"+e.type),e.$tip&&e.$tip.detach(),e.$tip=null,e.$arrow=null,e.$viewport=null,e.$element=null}))},l.prototype.sanitizeHtml=function(e){return a(e,this.options.whiteList,this.options.sanitizeFn)};var c=e.fn.tooltip;e.fn.tooltip=function(t){return this.each((function(){var n=e(this),r=n.data(\"bs.tooltip\"),o=\"object\"==typeof t&&t;!r&&/destroy|hide/.test(t)||(r||n.data(\"bs.tooltip\",r=new l(this,o)),\"string\"==typeof t&&r[t]())}))},e.fn.tooltip.Constructor=l,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=c,this}}(jQuery)},8294:()=>{!function(e){\"use strict\";e.fn.emulateTransitionEnd=function(t){var n=!1,r=this;e(this).one(\"bsTransitionEnd\",(function(){n=!0}));return setTimeout((function(){n||e(r).trigger(e.support.transition.end)}),t),this},e((function(){e.support.transition=function(){var e=document.createElement(\"bootstrap\"),t={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var n in t)if(void 0!==e.style[n])return{end:t[n]};return!1}(),e.support.transition&&(e.event.special.bsTransitionEnd={bindType:e.support.transition.end,delegateType:e.support.transition.end,handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}})}))}(jQuery)},8616:(e,t,n)=>{!function(){var e=function(){return this}();e||\"undefined\"==typeof window||(e=window);var t=function(e,n,r){\"string\"==typeof e?(2==arguments.length&&(r=n),t.modules[e]||(t.payloads[e]=r,t.modules[e]=null)):t.original?t.original.apply(this,arguments):(console.error(\"dropping module because define wasn't a string.\"),console.trace())};t.modules={},t.payloads={};var n,r,o=function(e,t,n){if(\"string\"==typeof t){var r=a(e,t);if(null!=r)return n&&n(),r}else if(\"[object Array]\"===Object.prototype.toString.call(t)){for(var o=[],s=0,l=t.length;s<l;++s){var c=a(e,t[s]);if(null==c&&i.original)return;o.push(c)}return n&&n.apply(null,o)||!0}},i=function(e,t){var n=o(\"\",e,t);return null==n&&i.original?i.original.apply(this,arguments):n},s=function(e,t){if(-1!==t.indexOf(\"!\")){var n=t.split(\"!\");return s(e,n[0])+\"!\"+s(e,n[1])}if(\".\"==t.charAt(0))for(t=e.split(\"/\").slice(0,-1).join(\"/\")+\"/\"+t;-1!==t.indexOf(\".\")&&r!=t;){var r=t;t=t.replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}return t},a=function(e,n){n=s(e,n);var r=t.modules[n];if(!r){if(\"function\"==typeof(r=t.payloads[n])){var i={},a={id:n,uri:\"\",exports:i,packaged:!0};i=r((function(e,t){return o(n,e,t)}),i,a)||a.exports,t.modules[n]=i,delete t.payloads[n]}r=t.modules[n]=i||r}return r};r=e,(n=\"ace\")&&(e[n]||(e[n]={}),r=e[n]),r.define&&r.define.packaged||(t.original=r.define,r.define=t,r.define.packaged=!0),r.acequire&&r.acequire.packaged||(i.original=r.acequire,r.acequire=i,r.acequire.packaged=!0)}(),ace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";var r,o={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=void 0===o.exec.call(/()??/,\"\")[1],s=(r=/^/g,o.test.call(r,\"\"),!r.lastIndex);function a(e){return(e.global?\"g\":\"\")+(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.extended?\"x\":\"\")+(e.sticky?\"y\":\"\")}function l(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}s&&i||(RegExp.prototype.exec=function(e){var t,n,r=o.exec.apply(this,arguments);if(\"string\"==typeof e&&r){if(!i&&r.length>1&&l(r,\"\")>-1&&(n=RegExp(this.source,o.replace.call(a(this),\"g\",\"\")),o.replace.call(e.slice(r.index),n,(function(){for(var e=1;e<arguments.length-2;e++)void 0===arguments[e]&&(r[e]=void 0)}))),this._xregexp&&this._xregexp.captureNames)for(var c=1;c<r.length;c++)(t=this._xregexp.captureNames[c-1])&&(r[t]=r[c]);!s&&this.global&&!r[0].length&&this.lastIndex>r.index&&this.lastIndex--}return r},s||(RegExp.prototype.test=function(e){var t=o.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))})),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],(function(e,t,n){function r(){}Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if(\"function\"!=typeof t)throw new TypeError(\"Function.prototype.bind called on incompatible \"+t);var n=h.call(arguments,1),o=function(){if(this instanceof o){var r=t.apply(this,n.concat(h.call(arguments)));return Object(r)===r?r:this}return t.apply(e,n.concat(h.call(arguments)))};return t.prototype&&(r.prototype=t.prototype,o.prototype=new r,r.prototype=null),o});var o,i,s,a,l,c=Function.prototype.call,u=Array.prototype,d=Object.prototype,h=u.slice,m=c.bind(d.toString),f=c.bind(d.hasOwnProperty);if((l=f(d,\"__defineGetter__\"))&&(o=c.bind(d.__defineGetter__),i=c.bind(d.__defineSetter__),s=c.bind(d.__lookupGetter__),a=c.bind(d.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t,n=[];if(n.splice.apply(n,e(20)),n.splice.apply(n,e(26)),t=n.length,n.splice(5,0,\"XXX\"),n.length,t+1==n.length)return!0}()){var p=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?p.apply(this,[void 0===e?0:e,void 0===t?this.length-e:t].concat(h.call(arguments,2))):[]}}else Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):null==e?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),o=h.call(arguments,2),i=o.length;if(e===n)i&&this.push.apply(this,o);else{var s=Math.min(t,n-e),a=e+s,l=a+i-s,c=n-a,u=n-s;if(l<a)for(var d=0;d<c;++d)this[l+d]=this[a+d];else if(l>a)for(d=c;d--;)this[l+d]=this[a+d];if(i&&e===u)this.length=u,this.push.apply(this,o);else for(this.length=u+i,d=0;d<i;++d)this[e+d]=o[d]}return r};Array.isArray||(Array.isArray=function(e){return\"[object Array]\"==m(e)});var g,v,y=Object(\"a\"),b=\"a\"!=y[0]||!(0 in y);if(Array.prototype.forEach||(Array.prototype.forEach=function(e){var t=F(this),n=b&&\"[object String]\"==m(this)?this.split(\"\"):t,r=arguments[1],o=-1,i=n.length>>>0;if(\"[object Function]\"!=m(e))throw new TypeError;for(;++o<i;)o in n&&e.call(r,n[o],o,t)}),Array.prototype.map||(Array.prototype.map=function(e){var t=F(this),n=b&&\"[object String]\"==m(this)?this.split(\"\"):t,r=n.length>>>0,o=Array(r),i=arguments[1];if(\"[object Function]\"!=m(e))throw new TypeError(e+\" is not a function\");for(var s=0;s<r;s++)s in n&&(o[s]=e.call(i,n[s],s,t));return o}),Array.prototype.filter||(Array.prototype.filter=function(e){var t,n=F(this),r=b&&\"[object String]\"==m(this)?this.split(\"\"):n,o=r.length>>>0,i=[],s=arguments[1];if(\"[object Function]\"!=m(e))throw new TypeError(e+\" is not a function\");for(var a=0;a<o;a++)a in r&&(t=r[a],e.call(s,t,a,n)&&i.push(t));return i}),Array.prototype.every||(Array.prototype.every=function(e){var t=F(this),n=b&&\"[object String]\"==m(this)?this.split(\"\"):t,r=n.length>>>0,o=arguments[1];if(\"[object Function]\"!=m(e))throw new TypeError(e+\" is not a function\");for(var i=0;i<r;i++)if(i in n&&!e.call(o,n[i],i,t))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(e){var t=F(this),n=b&&\"[object String]\"==m(this)?this.split(\"\"):t,r=n.length>>>0,o=arguments[1];if(\"[object Function]\"!=m(e))throw new TypeError(e+\" is not a function\");for(var i=0;i<r;i++)if(i in n&&e.call(o,n[i],i,t))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(e){var t=F(this),n=b&&\"[object String]\"==m(this)?this.split(\"\"):t,r=n.length>>>0;if(\"[object Function]\"!=m(e))throw new TypeError(e+\" is not a function\");if(!r&&1==arguments.length)throw new TypeError(\"reduce of empty array with no initial value\");var o,i=0;if(arguments.length>=2)o=arguments[1];else for(;;){if(i in n){o=n[i++];break}if(++i>=r)throw new TypeError(\"reduce of empty array with no initial value\")}for(;i<r;i++)i in n&&(o=e.call(void 0,o,n[i],i,t));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(e){var t=F(this),n=b&&\"[object String]\"==m(this)?this.split(\"\"):t,r=n.length>>>0;if(\"[object Function]\"!=m(e))throw new TypeError(e+\" is not a function\");if(!r&&1==arguments.length)throw new TypeError(\"reduceRight of empty array with no initial value\");var o,i=r-1;if(arguments.length>=2)o=arguments[1];else for(;;){if(i in n){o=n[i--];break}if(--i<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}do{i in this&&(o=e.call(void 0,o,n[i],i,t))}while(i--);return o}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=b&&\"[object String]\"==m(this)?this.split(\"\"):F(this),n=t.length>>>0;if(!n)return-1;var r=0;for(arguments.length>1&&(r=T(arguments[1])),r=r>=0?r:Math.max(0,n+r);r<n;r++)if(r in t&&t[r]===e)return r;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(e){var t=b&&\"[object String]\"==m(this)?this.split(\"\"):F(this),n=t.length>>>0;if(!n)return-1;var r=n-1;for(arguments.length>1&&(r=Math.min(r,T(arguments[1]))),r=r>=0?r:n-Math.abs(r);r>=0;r--)if(r in t&&e===t[r])return r;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){return e.__proto__||(e.constructor?e.constructor.prototype:d)}),!Object.getOwnPropertyDescriptor){Object.getOwnPropertyDescriptor=function(e,t){if(\"object\"!=typeof e&&\"function\"!=typeof e||null===e)throw new TypeError(\"Object.getOwnPropertyDescriptor called on a non-object: \"+e);if(f(e,t)){var n;if(n={enumerable:!0,configurable:!0},l){var r=e.__proto__;e.__proto__=d;var o=s(e,t),i=a(e,t);if(e.__proto__=r,o||i)return o&&(n.get=o),i&&(n.set=i),n}return n.value=e[t],n}}}(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),Object.create)||(g=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(e,t){var n;if(null===e)n=g();else{if(\"object\"!=typeof e)throw new TypeError(\"typeof prototype[\"+typeof e+\"] != 'object'\");var r=function(){};r.prototype=e,(n=new r).__proto__=e}return void 0!==t&&Object.defineProperties(n,t),n});function _(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(e){}}if(Object.defineProperty){var w=_({}),x=\"undefined\"==typeof document||_(document.createElement(\"div\"));if(!w||!x)var C=Object.defineProperty}if(!Object.defineProperty||C){Object.defineProperty=function(e,t,n){if(\"object\"!=typeof e&&\"function\"!=typeof e||null===e)throw new TypeError(\"Object.defineProperty called on non-object: \"+e);if(\"object\"!=typeof n&&\"function\"!=typeof n||null===n)throw new TypeError(\"Property description must be an object: \"+n);if(C)try{return C.call(Object,e,t,n)}catch(e){}if(f(n,\"value\"))if(l&&(s(e,t)||a(e,t))){var r=e.__proto__;e.__proto__=d,delete e[t],e[t]=n.value,e.__proto__=r}else e[t]=n.value;else{if(!l)throw new TypeError(\"getters & setters can not be defined on this javascript engine\");f(n,\"get\")&&o(e,t,n.get),f(n,\"set\")&&i(e,t,n.set)}return e}}Object.defineProperties||(Object.defineProperties=function(e,t){for(var n in t)f(t,n)&&Object.defineProperty(e,n,t[n]);return e}),Object.seal||(Object.seal=function(e){return e}),Object.freeze||(Object.freeze=function(e){return e});try{Object.freeze((function(){}))}catch(e){Object.freeze=(v=Object.freeze,function(e){return\"function\"==typeof e?e:v(e)})}if(Object.preventExtensions||(Object.preventExtensions=function(e){return e}),Object.isSealed||(Object.isSealed=function(e){return!1}),Object.isFrozen||(Object.isFrozen=function(e){return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)===e)throw new TypeError;for(var t=\"\";f(e,t);)t+=\"?\";e[t]=!0;var n=f(e,t);return delete e[t],n}),!Object.keys){var k=!0,D=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],S=D.length;for(var A in{toString:null})k=!1;Object.keys=function(e){if(\"object\"!=typeof e&&\"function\"!=typeof e||null===e)throw new TypeError(\"Object.keys called on a non-object\");var t=[];for(var n in e)f(e,n)&&t.push(n);if(k)for(var r=0,o=S;r<o;r++){var i=D[r];f(e,i)&&t.push(i)}return t}}Date.now||(Date.now=function(){return(new Date).getTime()});var M=\"\\t\\n\\v\\f\\r   ᠎             　\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||M.trim()){M=\"[\"+M+\"]\";var L=new RegExp(\"^\"+M+M+\"*\"),E=new RegExp(M+M+\"*$\");String.prototype.trim=function(){return String(this).replace(L,\"\").replace(E,\"\")}}function T(e){return(e=+e)!=e?e=0:0!==e&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}var F=function(e){if(null==e)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})),ace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"],(function(e,t,n){\"use strict\";e(\"./regexp\"),e(\"./es5-shim\")})),ace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName(\"head\")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||\"http://www.w3.org/1999/xhtml\",e):document.createElement(e)},t.hasCssClass=function(e,t){return-1!==(e.className+\"\").split(/\\s+/g).indexOf(t)},t.addCssClass=function(e,n){t.hasCssClass(e,n)||(e.className+=\" \"+n)},t.removeCssClass=function(e,t){for(var n=e.className.split(/\\s+/g);;){var r=n.indexOf(t);if(-1==r)break;n.splice(r,1)}e.className=n.join(\" \")},t.toggleCssClass=function(e,t){for(var n=e.className.split(/\\s+/g),r=!0;;){var o=n.indexOf(t);if(-1==o)break;r=!1,n.splice(o,1)}return r&&n.push(t),e.className=n.join(\" \"),r},t.setCssClass=function(e,n,r){r?t.addCssClass(e,n):t.removeCssClass(e,n)},t.hasCssString=function(e,t){var n,r=0;if((t=t||document).createStyleSheet&&(n=t.styleSheets)){for(;r<n.length;)if(n[r++].owningElement.id===e)return!0}else if(n=t.getElementsByTagName(\"style\"))for(;r<n.length;)if(n[r++].id===e)return!0;return!1},t.importCssString=function(e,n,r){if(r=r||document,n&&t.hasCssString(n,r))return null;var o;n&&(e+=\"\\n/*# sourceURL=ace/css/\"+n+\" */\"),r.createStyleSheet?((o=r.createStyleSheet()).cssText=e,n&&(o.owningElement.id=n)):((o=t.createElement(\"style\")).appendChild(r.createTextNode(e)),n&&(o.id=n),t.getDocumentHead(r).appendChild(o))},t.importCssStylsheet=function(e,n){if(n.createStyleSheet)n.createStyleSheet(e);else{var r=t.createElement(\"link\");r.rel=\"stylesheet\",r.href=e,t.getDocumentHead(n).appendChild(r)}},t.getInnerWidth=function(e){return parseInt(t.computedStyle(e,\"paddingLeft\"),10)+parseInt(t.computedStyle(e,\"paddingRight\"),10)+e.clientWidth},t.getInnerHeight=function(e){return parseInt(t.computedStyle(e,\"paddingTop\"),10)+parseInt(t.computedStyle(e,\"paddingBottom\"),10)+e.clientHeight},t.scrollbarWidth=function(e){var n=t.createElement(\"ace_inner\");n.style.width=\"100%\",n.style.minWidth=\"0px\",n.style.height=\"200px\",n.style.display=\"block\";var r=t.createElement(\"ace_outer\"),o=r.style;o.position=\"absolute\",o.left=\"-10000px\",o.overflow=\"hidden\",o.width=\"200px\",o.minWidth=\"0px\",o.height=\"150px\",o.display=\"block\",r.appendChild(n);var i=e.documentElement;i.appendChild(r);var s=n.offsetWidth;o.overflow=\"scroll\";var a=n.offsetWidth;return s==a&&(a=r.clientWidth),i.removeChild(r),s-a},\"undefined\"!=typeof document?(void 0!==window.pageYOffset?(t.getPageScrollTop=function(){return window.pageYOffset},t.getPageScrollLeft=function(){return window.pageXOffset}):(t.getPageScrollTop=function(){return document.body.scrollTop},t.getPageScrollLeft=function(){return document.body.scrollLeft}),window.getComputedStyle?t.computedStyle=function(e,t){return t?(window.getComputedStyle(e,\"\")||{})[t]||\"\":window.getComputedStyle(e,\"\")||{}}:t.computedStyle=function(e,t){return t?e.currentStyle[t]:e.currentStyle},t.setInnerHtml=function(e,t){var n=e.cloneNode(!1);return n.innerHTML=t,e.parentNode.replaceChild(n,e),n},\"textContent\"in document.documentElement?(t.setInnerText=function(e,t){e.textContent=t},t.getInnerText=function(e){return e.textContent}):(t.setInnerText=function(e,t){e.innerText=t},t.getInnerText=function(e){return e.innerText}),t.getParentWindow=function(e){return e.defaultView||e.parentWindow}):t.importCssString=function(){}})),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}})),ace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"],(function(e,t,n){\"use strict\";e(\"./fixoldbrowsers\");var r=e(\"./oop\"),o=function(){var e,t,n={MODIFIER_KEYS:{16:\"Shift\",17:\"Ctrl\",18:\"Alt\",224:\"Meta\"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,super:8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:\"Backspace\",9:\"Tab\",13:\"Return\",19:\"Pause\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Print\",45:\"Insert\",46:\"Delete\",96:\"Numpad0\",97:\"Numpad1\",98:\"Numpad2\",99:\"Numpad3\",100:\"Numpad4\",101:\"Numpad5\",102:\"Numpad6\",103:\"Numpad7\",104:\"Numpad8\",105:\"Numpad9\",\"-13\":\"NumpadEnter\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Numlock\",145:\"Scrolllock\"},PRINTABLE_KEYS:{32:\" \",48:\"0\",49:\"1\",50:\"2\",51:\"3\",52:\"4\",53:\"5\",54:\"6\",55:\"7\",56:\"8\",57:\"9\",59:\";\",61:\"=\",65:\"a\",66:\"b\",67:\"c\",68:\"d\",69:\"e\",70:\"f\",71:\"g\",72:\"h\",73:\"i\",74:\"j\",75:\"k\",76:\"l\",77:\"m\",78:\"n\",79:\"o\",80:\"p\",81:\"q\",82:\"r\",83:\"s\",84:\"t\",85:\"u\",86:\"v\",87:\"w\",88:\"x\",89:\"y\",90:\"z\",107:\"+\",109:\"-\",110:\".\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",111:\"/\",106:\"*\"}};for(t in n.FUNCTION_KEYS)e=n.FUNCTION_KEYS[t].toLowerCase(),n[e]=parseInt(t,10);for(t in n.PRINTABLE_KEYS)e=n.PRINTABLE_KEYS[t].toLowerCase(),n[e]=parseInt(t,10);return r.mixin(n,n.MODIFIER_KEYS),r.mixin(n,n.PRINTABLE_KEYS),r.mixin(n,n.FUNCTION_KEYS),n.enter=n.return,n.escape=n.esc,n.del=n.delete,n[173]=\"-\",function(){for(var e=[\"cmd\",\"ctrl\",\"alt\",\"shift\"],t=Math.pow(2,e.length);t--;)n.KEY_MODS[t]=e.filter((function(e){return t&n.KEY_MODS[e]})).join(\"-\")+\"-\"}(),n.KEY_MODS[0]=\"\",n.KEY_MODS[-1]=\"input-\",n}();r.mixin(t,o),t.keyCodeToString=function(e){var t=o[e];return\"string\"!=typeof t&&(t=String.fromCharCode(e)),t.toLowerCase()}})),ace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";if(t.OS={LINUX:\"LINUX\",MAC:\"MAC\",WINDOWS:\"WINDOWS\"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS},\"object\"==typeof navigator){var r=(navigator.platform.match(/mac|win|linux/i)||[\"other\"])[0].toLowerCase(),o=navigator.userAgent;t.isWin=\"win\"==r,t.isMac=\"mac\"==r,t.isLinux=\"linux\"==r,t.isIE=\"Microsoft Internet Explorer\"==navigator.appName||navigator.appName.indexOf(\"MSAppHost\")>=0?parseFloat((o.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]):parseFloat((o.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&\"Gecko\"===window.navigator.product,t.isOldGecko=t.isGecko&&parseInt((o.match(/rv:(\\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&\"[object Opera]\"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(o.split(\"WebKit/\")[1])||void 0,t.isChrome=parseFloat(o.split(\" Chrome/\")[1])||void 0,t.isAIR=o.indexOf(\"AdobeAIR\")>=0,t.isIPad=o.indexOf(\"iPad\")>=0,t.isChromeOS=o.indexOf(\" CrOS \")>=0,t.isIOS=/iPad|iPhone|iPod/.test(o)&&!window.MSStream,t.isIOS&&(t.isMac=!0)}})),ace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var r=e(\"./keys\"),o=e(\"./useragent\"),i=null,s=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n.call(e,window.event)};n._wrapper=r,e.attachEvent(\"on\"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent(\"on\"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return\"dblclick\"==e.type?0:\"contextmenu\"==e.type||o.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,r){function o(e){n&&n(e),r&&r(e),t.removeListener(document,\"mousemove\",n,!0),t.removeListener(document,\"mouseup\",o,!0),t.removeListener(document,\"dragstart\",o,!0)}return t.addListener(document,\"mousemove\",n,!0),t.addListener(document,\"mouseup\",o,!0),t.addListener(document,\"dragstart\",o,!0),o},t.addTouchMoveListener=function(e,n){var r,o;t.addListener(e,\"touchstart\",(function(e){var t=e.touches[0];r=t.clientX,o=t.clientY})),t.addListener(e,\"touchmove\",(function(e){var t=e.touches;if(!(t.length>1)){var i=t[0];e.wheelX=r-i.clientX,e.wheelY=o-i.clientY,r=i.clientX,o=i.clientY,n(e)}}))},t.addMouseWheelListener=function(e,n){\"onmousewheel\"in e?t.addListener(e,\"mousewheel\",(function(e){void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/8,e.wheelY=-e.wheelDeltaY/8):(e.wheelX=0,e.wheelY=-e.wheelDelta/8),n(e)})):\"onwheel\"in e?t.addListener(e,\"wheel\",(function(e){switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=.35*e.deltaX||0,e.wheelY=.35*e.deltaY||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0)}n(e)})):t.addListener(e,\"DOMMouseScroll\",(function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),n(e)}))},t.addMultiMouseDownListener=function(e,n,r,i){var s,a,l,c=0,u={2:\"dblclick\",3:\"tripleclick\",4:\"quadclick\"};function d(e){if(0!==t.getButton(e)?c=0:e.detail>1?++c>4&&(c=1):c=1,o.isIE){var d=Math.abs(e.clientX-s)>5||Math.abs(e.clientY-a)>5;l&&!d||(c=1),l&&clearTimeout(l),l=setTimeout((function(){l=null}),n[c-1]||600),1==c&&(s=e.clientX,a=e.clientY)}if(e._clicks=c,r[i](\"mousedown\",e),c>4)c=0;else if(c>1)return r[i](u[c],e)}function h(e){c=2,l&&clearTimeout(l),l=setTimeout((function(){l=null}),n[c-1]||600),r[i](\"mousedown\",e),r[i](u[c],e)}Array.isArray(e)||(e=[e]),e.forEach((function(e){t.addListener(e,\"mousedown\",d),o.isOldIE&&t.addListener(e,\"dblclick\",h)}))};var a=o.isMac&&o.isOpera&&!(\"KeyboardEvent\"in window)?function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)}:function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)};function l(e,t,n){var l=a(t);if(!o.isMac&&i){if(t.getModifierState&&(t.getModifierState(\"OS\")||t.getModifierState(\"Win\"))&&(l|=8),i.altGr){if(3==(3&l))return;i.altGr=0}if(18===n||17===n){var c=\"location\"in t?t.location:t.keyLocation;if(17===n&&1===c)1==i[n]&&(s=t.timeStamp);else if(18===n&&3===l&&2===c){t.timeStamp-s<50&&(i.altGr=!0)}}}if((n in r.MODIFIER_KEYS&&(n=-1),8&l&&n>=91&&n<=93&&(n=-1),!l&&13===n)&&(3===(c=\"location\"in t?t.location:t.keyLocation)&&(e(t,l,-n),t.defaultPrevented)))return;if(o.isChromeOS&&8&l){if(e(t,l,n),t.defaultPrevented)return;l&=-9}return!!(l||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS)&&e(t,l,n)}function c(){i=Object.create(null)}if(t.getModifierString=function(e){return r.KEY_MODS[a(e)]},t.addCommandKeyListener=function(e,n){var r=t.addListener;if(o.isOldGecko||o.isOpera&&!(\"KeyboardEvent\"in window)){var s=null;r(e,\"keydown\",(function(e){s=e.keyCode})),r(e,\"keypress\",(function(e){return l(n,e,s)}))}else{var a=null;r(e,\"keydown\",(function(e){i[e.keyCode]=(i[e.keyCode]||0)+1;var t=l(n,e,e.keyCode);return a=e.defaultPrevented,t})),r(e,\"keypress\",(function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)})),r(e,\"keyup\",(function(e){i[e.keyCode]=null})),i||(c(),r(window,\"focus\",c))}},\"object\"==typeof window&&window.postMessage&&!o.isOldIE){t.nextTick=function(e,n){n=n||window;var r=\"zero-timeout-message-1\";t.addListener(n,\"message\",(function o(i){i.data==r&&(t.stopPropagation(i),t.removeListener(n,\"message\",o),e())})),n.postMessage(r,\"*\")}}t.nextFrame=\"object\"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}})),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){for(var n=\"\";t>0;)1&t&&(n+=e),(t>>=1)&&(e+=e);return n};var r=/^\\s\\s*/,o=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(o,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){for(var t=[],n=0,r=e.length;n<r;n++)e[n]&&\"object\"==typeof e[n]?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function e(t){if(\"object\"!=typeof t||!t)return t;var n;if(Array.isArray(t)){n=[];for(var r=0;r<t.length;r++)n[r]=e(t[r]);return n}if(\"[object Object]\"!==Object.prototype.toString.call(t))return t;for(var r in n={},t)n[r]=e(t[r]);return n},t.arrayToMap=function(e){for(var t={},n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,(function(e){n.push({offset:arguments[arguments.length-2],length:e.length})})),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},o=function(e){null==n&&(n=setTimeout(r,e||t))};return o.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},o.schedule=o,o.call=function(){this.cancel(),e()},o.cancel=function(){n&&clearTimeout(n),n=null},o.isPending=function(){return n},o}})),ace.define(\"ace/keyboard/textinput_ios\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/keys\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),o=e(\"../lib/useragent\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),a=e(\"../lib/keys\"),l=a.KEY_MODS,c=o.isChrome<18,u=o.isIE;t.TextInput=function(e,t){var n=i.createElement(\"textarea\");n.className=o.isIOS?\"ace_text-input ace_text-input-ios\":\"ace_text-input\",o.isTouchPad&&n.setAttribute(\"x-palm-disable-auto-cap\",!0),n.setAttribute(\"wrap\",\"off\"),n.setAttribute(\"autocorrect\",\"off\"),n.setAttribute(\"autocapitalize\",\"off\"),n.setAttribute(\"spellcheck\",!1),n.style.opacity=\"0\",e.insertBefore(n,e.firstChild);var d=\"\\n aaaa a\\n\",h=!1,m=!1,f=!1,p=!1,g=\"\",v=!0;try{var y=document.activeElement===n}catch(e){}r.addListener(n,\"blur\",(function(e){t.onBlur(e),y=!1})),r.addListener(n,\"focus\",(function(e){y=!0,t.onFocus(e),w()})),this.focus=function(){if(g)return n.focus();n.style.position=\"fixed\",n.focus()},this.blur=function(){n.blur()},this.isFocused=function(){return y};var b=s.delayedCall((function(){y&&w(v)})),_=s.delayedCall((function(){p||(n.value=d,y&&w())}));function w(e){if(!p){if(p=!0,C)t=0,r=e?0:n.value.length-1;else var t=4,r=5;try{n.setSelectionRange(t,r)}catch(e){}p=!1}}function x(){p||(n.value=d,o.isWebKit&&_.schedule())}o.isWebKit||t.addEventListener(\"changeSelection\",(function(){t.selection.isEmpty()!=v&&(v=!v,b.schedule())})),x(),y&&t.onFocus();var C=null;this.setInputHandler=function(e){C=e},this.getInputHandler=function(){return C};var k=!1,D=function(e){4===n.selectionStart&&5===n.selectionEnd||(C&&(e=C(e),C=null),f?(w(),e&&t.onPaste(e),f=!1):e==d.substr(0)&&4===n.selectionStart?k?t.execCommand(\"del\",{source:\"ace\"}):t.execCommand(\"backspace\",{source:\"ace\"}):h||(e.substring(0,9)==d&&e.length>d.length?e=e.substr(9):e.substr(0,4)==d.substr(0,4)?e=e.substr(4,e.length-d.length+1):e.charAt(e.length-1)==d.charAt(0)&&(e=e.slice(0,-1)),e==d.charAt(0)||e.charAt(e.length-1)==d.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),h&&(h=!1),k&&(k=!1))},S=function(e){if(!p){var t=n.value;D(t),x()}},A=function(e,t,n){var r=e.clipboardData||window.clipboardData;if(r&&!c){var o=u||n?\"Text\":\"text/plain\";try{return t?!1!==r.setData(o,t):r.getData(o)}catch(e){if(!n)return A(e,t,!0)}}},M=function(e,i){var s=t.getCopyText();if(!s)return r.preventDefault(e);A(e,s)?(o.isIOS&&(m=i,n.value=\"\\n aa\"+s+\"a a\\n\",n.setSelectionRange(4,4+s.length),h={value:s}),i?t.onCut():t.onCopy(),o.isIOS||r.preventDefault(e)):(h=!0,n.value=s,n.select(),setTimeout((function(){h=!1,x(),w(),i?t.onCut():t.onCopy()})))};r.addCommandKeyListener(n,t.onCommandKey.bind(t)),r.addListener(n,\"select\",(function(e){!function(e){return 0===e.selectionStart&&e.selectionEnd===e.value.length}(n)?C&&w(t.selection.isEmpty()):(t.selectAll(),w())})),r.addListener(n,\"input\",S),r.addListener(n,\"cut\",(function(e){M(e,!0)})),r.addListener(n,\"copy\",(function(e){M(e,!1)})),r.addListener(n,\"paste\",(function(e){var i=A(e);\"string\"==typeof i?(i&&t.onPaste(i,e),o.isIE&&setTimeout(w),r.preventDefault(e)):(n.value=\"\",f=!0)}));var L,E=function(){if(p&&t.onCompositionUpdate&&!t.$readOnly){var e=n.value.replace(/\\x01/g,\"\");if(p.lastValue!==e&&(t.onCompositionUpdate(e),p.lastValue&&t.undo(),p.canUndo&&(p.lastValue=e),p.lastValue)){var r=t.selection.getRange();t.insert(p.lastValue),t.session.markUndoGroup(),p.range=t.selection.getRange(),t.selection.setRange(r),t.selection.clearSelection()}}},T=function(e){if(t.onCompositionEnd&&!t.$readOnly){var r=p;p=!1;var i=setTimeout((function(){i=null;var e=n.value.replace(/\\x01/g,\"\");p||(e==r.lastValue?x():!r.lastValue&&e&&(x(),D(e)))}));C=function(e){return i&&clearTimeout(i),(e=e.replace(/\\x01/g,\"\"))==r.lastValue?\"\":(r.lastValue&&i&&t.undo(),e)},t.onCompositionEnd(),t.removeListener(\"mousedown\",T),\"compositionend\"==e.type&&r.range&&t.selection.setRange(r.range),(!!o.isChrome&&o.isChrome>=53||!!o.isWebKit&&o.isWebKit>=603)&&S()}},F=s.delayedCall(E,50);function O(){clearTimeout(L),L=setTimeout((function(){g&&(n.style.cssText=g,g=\"\"),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())}),0)}r.addListener(n,\"compositionstart\",(function(e){p||!t.onCompositionStart||t.$readOnly||((p={}).canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(E,0),t.on(\"mousedown\",T),p.canUndo&&!t.selection.isEmpty()&&(t.insert(\"\"),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())})),o.isGecko?r.addListener(n,\"text\",(function(){F.schedule()})):(r.addListener(n,\"keyup\",(function(){F.schedule()})),r.addListener(n,\"keydown\",(function(){F.schedule()}))),r.addListener(n,\"compositionend\",T),this.getElement=function(){return n},this.setReadOnly=function(e){n.readOnly=e},this.onContextMenu=function(e){k=!0,w(t.selection.isEmpty()),t._emit(\"nativecontextmenu\",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,s){g||(g=n.style.cssText),n.style.cssText=(s?\"z-index:100000;\":\"\")+\"height:\"+n.style.height+\";\"+(o.isIE?\"opacity:0.1;\":\"\");var a=t.container.getBoundingClientRect(),l=i.computedStyle(t.container),c=a.top+(parseInt(l.borderTopWidth)||0),u=a.left+(parseInt(a.borderLeftWidth)||0),d=a.bottom-c-n.clientHeight-2,h=function(e){n.style.left=e.clientX-u-2+\"px\",n.style.top=Math.min(e.clientY-c-2,d)+\"px\"};h(e),\"mousedown\"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(L),o.isWin&&r.capture(t.container,h,O))},this.onContextMenuClose=O;var B=function(e){t.textInput.onContextMenu(e),O()};if(r.addListener(n,\"mouseup\",B),r.addListener(n,\"mousedown\",(function(e){e.preventDefault(),O()})),r.addListener(t.renderer.scroller,\"contextmenu\",B),r.addListener(n,\"contextmenu\",B),o.isIOS){var R=null,$=!1;e.addEventListener(\"keydown\",(function(e){R&&clearTimeout(R),$=!0})),e.addEventListener(\"keyup\",(function(e){R=setTimeout((function(){$=!1}),100)}));var N=function(e){if(document.activeElement===n&&!$){if(m)return setTimeout((function(){m=!1}),100);var r=n.selectionStart,o=n.selectionEnd;if(n.setSelectionRange(4,5),r==o)switch(r){case 0:t.onCommandKey(null,0,a.up);break;case 1:t.onCommandKey(null,0,a.home);break;case 2:t.onCommandKey(null,l.option,a.left);break;case 4:t.onCommandKey(null,0,a.left);break;case 5:t.onCommandKey(null,0,a.right);break;case 7:t.onCommandKey(null,l.option,a.right);break;case 8:t.onCommandKey(null,0,a.end);break;case 9:t.onCommandKey(null,0,a.down)}else{switch(o){case 6:t.onCommandKey(null,l.shift,a.right);break;case 7:t.onCommandKey(null,l.shift|l.option,a.right);break;case 8:t.onCommandKey(null,l.shift,a.end);break;case 9:t.onCommandKey(null,l.shift,a.down)}switch(r){case 0:t.onCommandKey(null,l.shift,a.up);break;case 1:t.onCommandKey(null,l.shift,a.home);break;case 2:t.onCommandKey(null,l.shift|l.option,a.left);break;case 3:t.onCommandKey(null,l.shift,a.left)}}}};document.addEventListener(\"selectionchange\",N),t.on(\"destroy\",(function(){document.removeEventListener(\"selectionchange\",N)}))}}})),ace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/keyboard/textinput_ios\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),o=e(\"../lib/useragent\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),a=o.isChrome<18,l=o.isIE,c=e(\"./textinput_ios\").TextInput;t.TextInput=function(e,t){if(o.isIOS)return c.call(this,e,t);var n=i.createElement(\"textarea\");n.className=\"ace_text-input\",n.setAttribute(\"wrap\",\"off\"),n.setAttribute(\"autocorrect\",\"off\"),n.setAttribute(\"autocapitalize\",\"off\"),n.setAttribute(\"spellcheck\",!1),n.style.opacity=\"0\",e.insertBefore(n,e.firstChild);var u=\"\\u2028\\u2028\",d=!1,h=!1,m=!1,f=\"\",p=!0;try{var g=document.activeElement===n}catch(e){}r.addListener(n,\"blur\",(function(e){t.onBlur(e),g=!1})),r.addListener(n,\"focus\",(function(e){g=!0,t.onFocus(e),b()})),this.focus=function(){if(f)return n.focus();var e=n.style.top;n.style.position=\"fixed\",n.style.top=\"0px\",n.focus(),setTimeout((function(){n.style.position=\"\",\"0px\"==n.style.top&&(n.style.top=e)}),0)},this.blur=function(){n.blur()},this.isFocused=function(){return g};var v=s.delayedCall((function(){g&&b(p)})),y=s.delayedCall((function(){m||(n.value=u,g&&b())}));function b(e){if(!m){if(m=!0,w)var t=0,r=e?0:n.value.length-1;else t=e?2:1,r=2;try{n.setSelectionRange(t,r)}catch(e){}m=!1}}function _(){m||(n.value=u,o.isWebKit&&y.schedule())}o.isWebKit||t.addEventListener(\"changeSelection\",(function(){t.selection.isEmpty()!=p&&(p=!p,v.schedule())})),_(),g&&t.onFocus();var w=null;this.setInputHandler=function(e){w=e},this.getInputHandler=function(){return w};var x=!1,C=function(e){w&&(e=w(e),w=null),h?(b(),e&&t.onPaste(e),h=!1):e==u.charAt(0)?x?t.execCommand(\"del\",{source:\"ace\"}):t.execCommand(\"backspace\",{source:\"ace\"}):(e.substring(0,2)==u?e=e.substr(2):e.charAt(0)==u.charAt(0)?e=e.substr(1):e.charAt(e.length-1)==u.charAt(0)&&(e=e.slice(0,-1)),e.charAt(e.length-1)==u.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),x&&(x=!1)},k=function(e){if(!m){var t=n.value;C(t),_()}},D=function(e,t,n){var r=e.clipboardData||window.clipboardData;if(r&&!a){var o=l||n?\"Text\":\"text/plain\";try{return t?!1!==r.setData(o,t):r.getData(o)}catch(e){if(!n)return D(e,t,!0)}}},S=function(e,o){var i=t.getCopyText();if(!i)return r.preventDefault(e);D(e,i)?(o?t.onCut():t.onCopy(),r.preventDefault(e)):(d=!0,n.value=i,n.select(),setTimeout((function(){d=!1,_(),b(),o?t.onCut():t.onCopy()})))},A=function(e){S(e,!0)},M=function(e){S(e,!1)},L=function(e){var i=D(e);\"string\"==typeof i?(i&&t.onPaste(i,e),o.isIE&&setTimeout(b),r.preventDefault(e)):(n.value=\"\",h=!0)};r.addCommandKeyListener(n,t.onCommandKey.bind(t)),r.addListener(n,\"select\",(function(e){d?d=!1:!function(e){return 0===e.selectionStart&&e.selectionEnd===e.value.length}(n)?w&&b(t.selection.isEmpty()):(t.selectAll(),b())})),r.addListener(n,\"input\",k),r.addListener(n,\"cut\",A),r.addListener(n,\"copy\",M),r.addListener(n,\"paste\",L),\"oncut\"in n&&\"oncopy\"in n&&\"onpaste\"in n||r.addListener(e,\"keydown\",(function(e){if((!o.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:M(e);break;case 86:L(e);break;case 88:A(e)}}));var E,T=function(){if(m&&t.onCompositionUpdate&&!t.$readOnly){var e=n.value.replace(/\\u2028/g,\"\");if(m.lastValue!==e&&(t.onCompositionUpdate(e),m.lastValue&&t.undo(),m.canUndo&&(m.lastValue=e),m.lastValue)){var r=t.selection.getRange();t.insert(m.lastValue),t.session.markUndoGroup(),m.range=t.selection.getRange(),t.selection.setRange(r),t.selection.clearSelection()}}},F=function(e){if(t.onCompositionEnd&&!t.$readOnly){var r=m;m=!1;var i=setTimeout((function(){i=null;var e=n.value.replace(/\\u2028/g,\"\");m||(e==r.lastValue?_():!r.lastValue&&e&&(_(),C(e)))}));w=function(e){return i&&clearTimeout(i),(e=e.replace(/\\u2028/g,\"\"))==r.lastValue?\"\":(r.lastValue&&i&&t.undo(),e)},t.onCompositionEnd(),t.removeListener(\"mousedown\",F),\"compositionend\"==e.type&&r.range&&t.selection.setRange(r.range),(!!o.isChrome&&o.isChrome>=53||!!o.isWebKit&&o.isWebKit>=603)&&k()}},O=s.delayedCall(T,50);function B(){clearTimeout(E),E=setTimeout((function(){f&&(n.style.cssText=f,f=\"\"),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())}),0)}r.addListener(n,\"compositionstart\",(function(e){m||!t.onCompositionStart||t.$readOnly||((m={}).canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(T,0),t.on(\"mousedown\",F),m.canUndo&&!t.selection.isEmpty()&&(t.insert(\"\"),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())})),o.isGecko?r.addListener(n,\"text\",(function(){O.schedule()})):(r.addListener(n,\"keyup\",(function(){O.schedule()})),r.addListener(n,\"keydown\",(function(){O.schedule()}))),r.addListener(n,\"compositionend\",F),this.getElement=function(){return n},this.setReadOnly=function(e){n.readOnly=e},this.onContextMenu=function(e){x=!0,b(t.selection.isEmpty()),t._emit(\"nativecontextmenu\",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,s){f||(f=n.style.cssText),n.style.cssText=(s?\"z-index:100000;\":\"\")+\"height:\"+n.style.height+\";\"+(o.isIE?\"opacity:0.1;\":\"\");var a=t.container.getBoundingClientRect(),l=i.computedStyle(t.container),c=a.top+(parseInt(l.borderTopWidth)||0),u=a.left+(parseInt(a.borderLeftWidth)||0),d=a.bottom-c-n.clientHeight-2,h=function(e){n.style.left=e.clientX-u-2+\"px\",n.style.top=Math.min(e.clientY-c-2,d)+\"px\"};h(e),\"mousedown\"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(E),o.isWin&&r.capture(t.container,h,B))},this.onContextMenuClose=B;var R=function(e){t.textInput.onContextMenu(e),B()};r.addListener(n,\"mouseup\",R),r.addListener(n,\"mousedown\",(function(e){e.preventDefault(),B()})),r.addListener(t.renderer.scroller,\"contextmenu\",R),r.addListener(n,\"contextmenu\",R)}})),ace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";e(\"../lib/dom\"),e(\"../lib/event\");var r=e(\"../lib/useragent\");function o(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler(\"mousedown\",this.onMouseDown.bind(e)),t.setDefaultHandler(\"dblclick\",this.onDoubleClick.bind(e)),t.setDefaultHandler(\"tripleclick\",this.onTripleClick.bind(e)),t.setDefaultHandler(\"quadclick\",this.onQuadClick.bind(e)),t.setDefaultHandler(\"mousewheel\",this.onMouseWheel.bind(e)),t.setDefaultHandler(\"touchmove\",this.onTouchMove.bind(e));[\"select\",\"startSelect\",\"selectEnd\",\"selectAllEnd\",\"selectByWordsEnd\",\"selectByLinesEnd\",\"dragWait\",\"dragWaitEnd\",\"focusWait\"].forEach((function(t){e[t]=this[t]}),this),e.selectByLines=this.extendSelectionBy.bind(e,\"getLineRange\"),e.selectByWords=this.extendSelectionBy.bind(e,\"getWordRange\")}function i(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row!=e.end.row-1||e.start.column||e.end.column)n=2*t.row-e.start.row-e.end.row;else var n=t.column-4;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var o=this.editor,i=e.getButton();if(0!==i){var s=o.getSelectionRange().isEmpty();return o.$blockScrolling++,(s||1==i)&&o.selection.moveToPosition(n),o.$blockScrolling--,void(2==i&&(o.textInput.onContextMenu(e.domEvent),r.isMozilla||e.preventDefault()))}return this.mousedownEvent.time=Date.now(),!t||o.isFocused()||(o.focus(),!this.$focusTimout||this.$clickSelection||o.inMultiSelectMode)?(this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()):(this.setState(\"focusWait\"),void this.captureMouse(e))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;n.$blockScrolling++,this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle(\"ace_selecting\"),this.setState(\"select\"),n.$blockScrolling--},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(t.$blockScrolling++,this.$clickSelection){var r=this.$clickSelection.comparePoint(n);if(-1==r)e=this.$clickSelection.end;else if(1==r)e=this.$clickSelection.start;else{var o=i(this.$clickSelection,n);n=o.cursor,e=o.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y),o=n.selection[e](r.row,r.column);if(n.$blockScrolling++,this.$clickSelection){var s=this.$clickSelection.comparePoint(o.start),a=this.$clickSelection.comparePoint(o.end);if(-1==s&&a<=0)t=this.$clickSelection.end,o.end.row==r.row&&o.end.column==r.column||(r=o.start);else if(1==a&&s>=0)t=this.$clickSelection.start,o.start.row==r.row&&o.start.column==r.column||(r=o.end);else if(-1==s&&1==a)r=o.end,t=o.start;else{var l=i(this.$clickSelection,r);r=l.cursor,t=l.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.$blockScrolling--,n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle(\"ace_selecting\"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e,t,n,r,o=(e=this.mousedownEvent.x,t=this.mousedownEvent.y,n=this.x,r=this.y,Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))),i=Date.now();(o>0||i-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session.getBracketRange(t);r?(r.isEmpty()&&(r.start.column--,r.end.column++),this.setState(\"select\")):(r=n.selection.getWordRange(t.row,t.column),this.setState(\"selectByWords\")),this.$clickSelection=r,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState(\"selectByLines\");var r=n.getSelectionRange();r.isMultiLine()&&r.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(r.start.row),this.$clickSelection.end=n.selection.getLineRange(r.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState(\"selectAll\")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,r=e.domEvent.timeStamp,o=r-n.t,i=e.wheelX/o,s=e.wheelY/o;o<250&&(i=(i+n.vx)/2,s=(s+n.vy)/2);var a=Math.abs(i/s),l=!1;if(a>=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(l=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(l=!0),l)n.allowed=r;else if(r-n.allowed<250){Math.abs(i)<=1.1*Math.abs(n.vx)&&Math.abs(s)<=1.1*Math.abs(n.vy)?(l=!0,n.allowed=r):n.allowed=0}return n.t=r,n.vx=i,n.vy=s,l?(t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()):void 0}},this.onTouchMove=function(e){this.editor._emit(\"mousewheel\",e)}}).call(o.prototype),t.DefaultHandlers=o})),ace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";e(\"./lib/oop\");var r=e(\"./lib/dom\");function o(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}(function(){this.$init=function(){return this.$element=r.createElement(\"div\"),this.$element.className=\"ace_tooltip\",this.$element.style.display=\"none\",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){r.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+\"px\",this.getElement().style.top=t+\"px\"},this.setClassName=function(e){r.addCssClass(this.getElement(),e)},this.show=function(e,t,n){null!=e&&this.setText(e),null!=t&&null!=n&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display=\"block\",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display=\"none\",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(o.prototype),t.Tooltip=o})),ace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),o=e(\"../lib/oop\"),i=e(\"../lib/event\"),s=e(\"../tooltip\").Tooltip;function a(e){s.call(this,e)}o.inherits(a,s),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,o=this.getWidth(),i=this.getHeight();(e+=15)+o>n&&(e-=e+o-n),(t+=15)+i>r&&(t-=20+i),s.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=function(e){var t,n,o,s=e.editor,l=s.renderer.$gutterLayer,c=new a(s.container);function u(){t&&(t=clearTimeout(t)),o&&(c.hide(),o=null,s._signal(\"hideGutterTooltip\",c),s.removeEventListener(\"mousewheel\",u))}function d(e){c.setPosition(e.x,e.y)}e.editor.setDefaultHandler(\"guttermousedown\",(function(t){if(s.isFocused()&&0==t.getButton()&&\"foldWidgets\"!=l.getRegion(t)){var n=t.getDocumentPosition().row,r=s.session.selection;if(t.getShiftKey())r.selectTo(n,0);else{if(2==t.domEvent.detail)return s.selectAll(),t.preventDefault();e.$clickSelection=s.selection.getLineRange(n)}return e.setState(\"selectByLines\"),e.captureMouse(t),t.preventDefault()}})),e.editor.setDefaultHandler(\"guttermousemove\",(function(i){var a=i.domEvent.target||i.domEvent.srcElement;if(r.hasCssClass(a,\"ace_fold-widget\"))return u();o&&e.$tooltipFollowsMouse&&d(i),n=i,t||(t=setTimeout((function(){t=null,n&&!e.isMousePressed?function(){var t=n.getDocumentPosition().row,r=l.$annotations[t];if(!r)return u();if(t==s.session.getLength()){var i=s.renderer.pixelToScreenCoordinates(0,n.y).row,a=n.$pos;if(i>s.session.documentToScreenRow(a.row,a.column))return u()}if(o!=r)if(o=r.text.join(\"<br/>\"),c.setHtml(o),c.show(),s._signal(\"showGutterTooltip\",c),s.on(\"mousewheel\",u),e.$tooltipFollowsMouse)d(n);else{var h=n.domEvent.target.getBoundingClientRect(),m=c.getElement().style;m.left=h.right+\"px\",m.top=h.bottom+\"px\"}}():u()}),50))})),i.addListener(s.renderer.$gutter,\"mouseout\",(function(e){n=null,o&&!t&&(t=setTimeout((function(){t=null,u()}),50))})),s.on(\"changeSession\",u)}})),ace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),o=e(\"../lib/useragent\"),i=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor.getSelectionRange();if(e.isEmpty())this.$inSelection=!1;else{var t=this.getDocumentPosition();this.$inSelection=e.contains(t.row,t.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=o.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(i.prototype)})),ace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),o=e(\"../lib/event\"),i=e(\"../lib/useragent\");function s(e){var t=e.editor,n=r.createElement(\"img\");n.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",i.isOpera&&(n.style.cssText=\"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\");[\"dragWait\",\"dragWaitEnd\",\"startDrag\",\"dragReadyEnd\",\"onMouseDrag\"].forEach((function(t){e[t]=this[t]}),this),t.addEventListener(\"mousedown\",this.onMouseDown.bind(e));var s,l,c,u,d,h,m,f,p,g,v,y=t.container,b=0;function _(){var e=h;(function(e,n){var r=Date.now(),o=!n||e.row!=n.row,i=!n||e.column!=n.column;!g||o||i?(t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,g=r,v={x:l,y:c}):a(v.x,v.y,l,c)>5?g=null:r-g>=200&&(t.renderer.scrollCursorIntoView(),g=null)})(h=t.renderer.screenToTextCoordinates(l,c),e),function(e,n){var r=Date.now(),o=t.renderer.layerConfig.lineHeight,i=t.renderer.layerConfig.characterWidth,s=t.renderer.scroller.getBoundingClientRect(),a={x:{left:l-s.left,right:s.right-l},y:{top:c-s.top,bottom:s.bottom-c}},u=Math.min(a.x.left,a.x.right),d=Math.min(a.y.top,a.y.bottom),h={row:e.row,column:e.column};u/i<=2&&(h.column+=a.x.left<a.x.right?-3:2),d/o<=1&&(h.row+=a.y.top<a.y.bottom?-1:1);var m=e.row!=h.row,f=e.column!=h.column,g=!n||e.row!=n.row;m||f&&!g?p?r-p>=200&&t.renderer.scrollCursorIntoView(h):p=r:p=null}(h,e)}function w(){d=t.selection.toOrientedRange(),s=t.session.addMarker(d,\"ace_selection\",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(u),_(),u=setInterval(_,20),b=0,o.addListener(document,\"mousemove\",k)}function x(){clearInterval(u),t.session.removeMarker(s),s=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(d),t.$blockScrolling-=1,t.isFocused()&&!f&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),d=null,h=null,b=0,p=null,g=null,o.removeListener(document,\"mousemove\",k)}this.onDragStart=function(e){if(this.cancelDrag||!y.draggable){var r=this;return setTimeout((function(){r.startSelect(),r.captureMouse(e)}),0),e.preventDefault()}d=t.getSelectionRange();var o=e.dataTransfer;o.effectAllowed=t.getReadOnly()?\"copy\":\"copyMove\",i.isOpera&&(t.container.appendChild(n),n.scrollTop=0),o.setDragImage&&o.setDragImage(n,0,0),i.isOpera&&t.container.removeChild(n),o.clearData(),o.setData(\"Text\",t.session.getTextRange()),f=!0,this.setState(\"drag\")},this.onDragEnd=function(e){if(y.draggable=!1,f=!1,this.setState(null),!t.getReadOnly()){var n=e.dataTransfer.dropEffect;m||\"move\"!=n||t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\")},this.onDragEnter=function(e){if(!t.getReadOnly()&&D(e.dataTransfer))return l=e.clientX,c=e.clientY,s||w(),b++,e.dataTransfer.dropEffect=m=S(e),o.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&D(e.dataTransfer))return l=e.clientX,c=e.clientY,s||(w(),b++),null!==C&&(C=null),e.dataTransfer.dropEffect=m=S(e),o.preventDefault(e)},this.onDragLeave=function(e){if(--b<=0&&s)return x(),m=null,o.preventDefault(e)},this.onDrop=function(e){if(h){var n=e.dataTransfer;if(f)switch(m){case\"move\":d=d.contains(h.row,h.column)?{start:h,end:h}:t.moveText(d,h);break;case\"copy\":d=t.moveText(d,h,!0)}else{var r=n.getData(\"Text\");d={start:h,end:t.session.insert(h,r)},t.focus(),m=null}return x(),o.preventDefault(e)}},o.addListener(y,\"dragstart\",this.onDragStart.bind(e)),o.addListener(y,\"dragend\",this.onDragEnd.bind(e)),o.addListener(y,\"dragenter\",this.onDragEnter.bind(e)),o.addListener(y,\"dragover\",this.onDragOver.bind(e)),o.addListener(y,\"dragleave\",this.onDragLeave.bind(e)),o.addListener(y,\"drop\",this.onDrop.bind(e));var C=null;function k(){null==C&&(C=setTimeout((function(){null!=C&&s&&x()}),20))}function D(e){var t=e.types;return!t||Array.prototype.some.call(t,(function(e){return\"text/plain\"==e||\"Text\"==e}))}function S(e){var t=[\"copy\",\"copymove\",\"all\",\"uninitialized\"],n=i.isMac?e.altKey:e.ctrlKey,r=\"uninitialized\";try{r=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o=\"none\";return n&&t.indexOf(r)>=0?o=\"copy\":[\"move\",\"copymove\",\"linkmove\",\"all\",\"uninitialized\"].indexOf(r)>=0?o=\"move\":t.indexOf(r)>=0&&(o=\"copy\"),o}}function a(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\"),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor;e.container.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle(\"ace_dragging\");var t=i.isWin?\"default\":\"move\";e.renderer.setCursorStyle(t),this.setState(\"dragReady\")},this.onMouseDrag=function(e){var t=this.editor.container;i.isIE&&\"dragReady\"==this.state&&(a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>3&&t.dragDrop());\"dragWait\"===this.state&&(a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition())))},this.onMouseDown=function(e){if(this.$dragEnabled){this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),r=e.getButton();if(1===(e.domEvent.detail||1)&&0===r&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;if(\"unselectable\"in o&&(o.unselectable=\"on\"),t.getDragDelay()){if(i.isWebKit)this.cancelDrag=!0,t.container.draggable=!0;this.setState(\"dragWait\")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}}).call(s.prototype),t.DragdropHandler=s})),ace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var r=e(\"./dom\");t.get=function(e,t){var n=new XMLHttpRequest;n.open(\"GET\",e,!0),n.onreadystatechange=function(){4===n.readyState&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),o=document.createElement(\"script\");o.src=e,n.appendChild(o),o.onload=o.onreadystatechange=function(e,n){!n&&o.readyState&&\"loaded\"!=o.readyState&&\"complete\"!=o.readyState||(o=o.onload=o.onreadystatechange=null,n||t())}},t.qualifyURL=function(e){var t=document.createElement(\"a\");return t.href=e,t.href}})),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";var r={},o=function(){this.propagationStopped=!0},i=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(n.length||r){\"object\"==typeof t&&t||(t={}),t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=o),t.preventDefault||(t.preventDefault=i),n=n.slice();for(var s=0;s<n.length&&(n[s](t,this),!t.propagationStopped);s++);return r&&!t.defaultPrevented?r(t,this):void 0}},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(n){n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)}},r.once=function(e,t){var n=this;t&&this.addEventListener(e,(function r(){n.removeEventListener(e,r),t.apply(null,arguments)}))},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;if(n||(n=this._defaultHandlers={_disabled_:{}}),n[e]){var r=n[e],o=n._disabled_[e];o||(n._disabled_[e]=o=[]),o.push(r);var i=o.indexOf(t);-1!=i&&o.splice(i,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(n){var r=n._disabled_[e];if(n[e]==t){n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var o=r.indexOf(t);-1!=o&&r.splice(o,1)}}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),-1==r.indexOf(t)&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(n){var r=n.indexOf(t);-1!==r&&n.splice(r,1)}},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r})),ace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],(function(e,t,n){var r=e(\"./oop\"),o=e(\"./event_emitter\").EventEmitter,i={setOptions:function(e){Object.keys(e).forEach((function(t){this.setOption(t,e[t])}),this)},getOptions:function(e){var t={};return e?Array.isArray(e)||(t=e,e=Object.keys(t)):e=Object.keys(this.$options),e.forEach((function(e){t[e]=this.getOption(e)}),this),t},setOption:function(e,t){if(this[\"$\"+e]!==t){var n=this.$options[e];if(!n)return s('misspelled option \"'+e+'\"');if(n.forwardTo)return this[n.forwardTo]&&this[n.forwardTo].setOption(e,t);n.handlesSet||(this[\"$\"+e]=t),n&&n.set&&n.set.call(this,t)}},getOption:function(e){var t=this.$options[e];return t?t.forwardTo?this[t.forwardTo]&&this[t.forwardTo].getOption(e):t&&t.get?t.get.call(this):this[\"$\"+e]:s('misspelled option \"'+e+'\"')}};function s(e){\"undefined\"!=typeof console&&console.warn&&console.warn.apply(console,arguments)}function a(e,t){var n=new Error(e);n.data=t,\"object\"==typeof console&&console.error&&console.error(n),setTimeout((function(){throw n}))}var l=function(){this.$defaultOptions={}};(function(){r.implement(this,o),this.defineOptions=function(e,t,n){return e.$options||(this.$defaultOptions[t]=e.$options={}),Object.keys(n).forEach((function(t){var r=n[t];\"string\"==typeof r&&(r={forwardTo:r}),r.name||(r.name=t),e.$options[r.name]=r,\"initialValue\"in r&&(e[\"$\"+r.name]=r.initialValue)})),r.implement(e,i),this},this.resetOptions=function(e){Object.keys(e.$options).forEach((function(t){var n=e.$options[t];\"value\"in n&&e.setOption(t,n.value)}))},this.setDefaultValue=function(e,t,n){var r=this.$defaultOptions[e]||(this.$defaultOptions[e]={});r[t]&&(r.forwardTo?this.setDefaultValue(r.forwardTo,t,n):r[t].value=n)},this.setDefaultValues=function(e,t){Object.keys(t).forEach((function(n){this.setDefaultValue(e,n,t[n])}),this)},this.warn=s,this.reportError=a}).call(l.prototype),t.AppConfig=l})),ace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"],(function(e,t,r){var o=e(\"./lib/lang\"),i=(e(\"./lib/oop\"),e(\"./lib/net\")),s=e(\"./lib/app_config\").AppConfig;r.exports=t=new s;var a=function(){return this||\"undefined\"!=typeof window&&window}(),l={packaged:!1,workerPath:null,modePath:null,themePath:null,basePath:\"\",suffix:\".js\",$moduleUrls:{}};function c(o){if(a&&a.document){l.packaged=o||e.packaged||r.packaged||a.define&&n.amdD.packaged;for(var i,s={},c=\"\",u=document.currentScript||document._currentScript,d=(u&&u.ownerDocument||document).getElementsByTagName(\"script\"),h=0;h<d.length;h++){var m=d[h],f=m.src||m.getAttribute(\"src\");if(f){for(var p=m.attributes,g=0,v=p.length;g<v;g++){var y=p[g];0===y.name.indexOf(\"data-ace-\")&&(s[(i=y.name.replace(/^data-ace-/,\"\"),i.replace(/-(.)/g,(function(e,t){return t.toUpperCase()})))]=y.value)}var b=f.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);b&&(c=b[1])}}for(var _ in c&&(s.base=s.base||c,s.packaged=!0),s.basePath=s.base,s.workerPath=s.workerPath||s.base,s.modePath=s.modePath||s.base,s.themePath=s.themePath||s.base,delete s.base,s)void 0!==s[_]&&t.set(_,s[_])}}t.get=function(e){if(!l.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);return l[e]},t.set=function(e,t){if(!l.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);l[e]=t},t.all=function(){return o.copyObject(l)},t.moduleUrl=function(e,t){if(l.$moduleUrls[e])return l.$moduleUrls[e];var n=e.split(\"/\"),r=\"snippets\"==(t=t||n[n.length-2]||\"\")?\"/\":\"-\",o=n[n.length-1];if(\"worker\"==t&&\"-\"==r){var i=new RegExp(\"^\"+t+\"[\\\\-_]|[\\\\-_]\"+t+\"$\",\"g\");o=o.replace(i,\"\")}(!o||o==t)&&n.length>1&&(o=n[n.length-2]);var s=l[t+\"Path\"];return null==s?s=l.basePath:\"/\"==r&&(t=r=\"\"),s&&\"/\"!=s.slice(-1)&&(s+=\"/\"),s+t+r+o+this.get(\"suffix\")},t.setModuleUrl=function(e,t){return l.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var o,s;Array.isArray(n)&&(s=n[0],n=n[1]);try{o=e(n)}catch(e){}if(o&&!t.$loading[n])return r&&r(o);if(t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r),!(t.$loading[n].length>1)){var a=function(){e([n],(function(e){t._emit(\"load.module\",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach((function(t){t&&t(e)}))}))};if(!t.get(\"packaged\"))return a();i.loadScript(t.moduleUrl(n,s),a)}},c(!0),t.init=c})),ace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),o=e(\"../lib/useragent\"),i=e(\"./default_handlers\").DefaultHandlers,s=e(\"./default_gutter_handler\").GutterHandler,a=e(\"./mouse_event\").MouseEvent,l=e(\"./dragdrop_handler\").DragdropHandler,c=e(\"../config\"),u=function(e){var t=this;this.editor=e,new i(this),new s(this),new l(this);var n=function(t){(!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement()))&&window.focus(),e.focus()},a=e.renderer.getMouseEventTarget();r.addListener(a,\"click\",this.onMouseEvent.bind(this,\"click\")),r.addListener(a,\"mousemove\",this.onMouseMove.bind(this,\"mousemove\")),r.addMultiMouseDownListener([a,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,\"onMouseEvent\"),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,\"mousewheel\")),r.addTouchMoveListener(e.container,this.onTouchMove.bind(this,\"touchmove\"));var c=e.renderer.$gutter;r.addListener(c,\"mousedown\",this.onMouseEvent.bind(this,\"guttermousedown\")),r.addListener(c,\"click\",this.onMouseEvent.bind(this,\"gutterclick\")),r.addListener(c,\"dblclick\",this.onMouseEvent.bind(this,\"gutterdblclick\")),r.addListener(c,\"mousemove\",this.onMouseEvent.bind(this,\"guttermousemove\")),r.addListener(a,\"mousedown\",n),r.addListener(c,\"mousedown\",n),o.isIE&&e.renderer.scrollBarV&&(r.addListener(e.renderer.scrollBarV.element,\"mousedown\",n),r.addListener(e.renderer.scrollBarH.element,\"mousedown\",n)),e.on(\"mousemove\",(function(n){if(!t.state&&!t.$dragDelay&&t.$dragEnabled){var r=e.renderer.screenToTextCoordinates(n.x,n.y),o=e.session.selection.getRange(),i=e.renderer;!o.isEmpty()&&o.insideStart(r.row,r.column)?i.setCursorStyle(\"default\"):i.setCursorStyle(\"\")}}))};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new a(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;n&&n.length&&this.editor._emit(e,new a(t,this.editor))},this.onMouseWheel=function(e,t){var n=new a(t,this.editor);n.speed=2*this.$scrollSpeed,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new a(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor.renderer;n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=null);var i=this,s=function(e){if(e){if(o.isWebKit&&!e.which&&i.releaseMouse)return i.releaseMouse();i.x=e.clientX,i.y=e.clientY,t&&t(e),i.mouseEvent=new a(e,i.editor),i.$mouseMoved=!0}},l=function(e){clearInterval(u),c(),i[i.state+\"End\"]&&i[i.state+\"End\"](e),i.state=\"\",null==n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=!0,n.$moveTextAreaToCursor()),i.isMousePressed=!1,i.$onCaptureMouseMove=i.releaseMouse=null,e&&i.onMouseEvent(\"mouseup\",e)},c=function(){i[i.state]&&i[i.state](),i.$mouseMoved=!1};if(o.isOldIE&&\"dblclick\"==e.domEvent.type)return setTimeout((function(){l(e)}));i.$onCaptureMouseMove=s,i.releaseMouse=r.capture(this.editor.container,s,l);var u=setInterval(c,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){t&&t.domEvent&&\"contextmenu\"!=t.domEvent.type||(this.editor.off(\"nativecontextmenu\",e),t&&t.domEvent&&r.stopEvent(t.domEvent))}.bind(this);setTimeout(e,10),this.editor.on(\"nativecontextmenu\",e)}}).call(u.prototype),c.defineOptions(u.prototype,\"mouseHandler\",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:o.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=u})),ace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";t.FoldHandler=function(e){e.on(\"click\",(function(t){var n=t.getDocumentPosition(),r=e.session,o=r.getFoldAt(n.row,n.column,1);o&&(t.getAccelKey()?r.removeFold(o):r.expandFold(o),t.stop())})),e.on(\"gutterclick\",(function(t){if(\"foldWidgets\"==e.renderer.$gutterLayer.getRegion(t)){var n=t.getDocumentPosition().row,r=e.session;r.foldWidgets&&r.foldWidgets[n]&&e.session.onFoldWidgetClick(n,t),e.isFocused()||e.focus(),t.stop()}})),e.on(\"gutterdblclick\",(function(t){if(\"foldWidgets\"==e.renderer.$gutterLayer.getRegion(t)){var n=t.getDocumentPosition().row,r=e.session,o=r.getParentFoldRangeData(n,!0),i=o.range||o.firstRange;if(i){n=i.start.row;var s=r.getFoldAt(n,r.getLine(n).length,1);s?r.removeFold(s):(r.addFold(\"...\",i),e.renderer.scrollCursorIntoView({row:i.start.row,column:0}))}t.stop()}}))}})),ace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/keys\"),o=e(\"../lib/event\"),i=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]!=e){for(;t[t.length-1]&&t[t.length-1]!=this.$defaultHandler;)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)}},this.addKeyboardHandler=function(e,t){if(e){\"function\"!=typeof e||e.handleKeyboard||(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);-1!=n&&this.$handlers.splice(n,1),null==t?this.$handlers.push(e):this.$handlers.splice(t,0,e),-1==n&&e.attach&&e.attach(this.$editor)}},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return-1!=t&&(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map((function(n){return n.getStatusText&&n.getStatusText(t,e)||\"\"})).filter(Boolean).join(\" \")},this.$callKeyboardHandlers=function(e,t,n,r){for(var i,s=!1,a=this.$editor.commands,l=this.$handlers.length;l--&&!((i=this.$handlers[l].handleKeyboard(this.$data,e,t,n,r))&&i.command&&((s=\"null\"==i.command||a.exec(i.command,this.$editor,i.args,r))&&r&&-1!=e&&1!=i.passEvent&&1!=i.command.passEvent&&o.stopEvent(r),s)););return s||-1!=e||(i={command:\"insertstring\"},s=a.exec(\"insertstring\",this.$editor,t)),s&&this.$editor._signal&&this.$editor._signal(\"keyboardActivity\",i),s},this.onCommandKey=function(e,t,n){var o=r.keyCodeToString(n);this.$callKeyboardHandlers(t,o,n,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(i.prototype),t.KeyBinding=i})),ace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";var r=0,o=0,i=!1,s=!1,a=!1,l=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],c=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],u=11,d=18,h=[d,d,d,d,d,d,d,d,d,6,5,6,8,5,d,d,d,d,d,d,d,d,d,d,d,d,d,d,5,5,5,6,8,4,4,u,u,u,4,4,4,4,4,10,9,10,9,9,2,2,2,2,2,2,2,2,2,2,9,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,d,d,d,d,d,d,5,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,9,4,u,u,u,u,4,4,4,4,0,4,4,d,4,4,u,u,2,2,4,0,4,4,4,2,0,4,4,4,4,4],m=[8,8,8,8,8,8,8,8,8,8,8,d,d,d,0,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,5,13,14,15,16,17,9,u,u,u,u,u,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,9,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,8];function f(e,t,n){if(!(o<e))if(1!=e||1!=r||s)for(var i,a,l,c,u=n.length,d=0;d<u;){if(t[d]>=e){for(i=d+1;i<u&&t[i]>=e;)i++;for(a=d,l=i-1;a<l;a++,l--)c=n[a],n[a]=n[l],n[l]=c;d=i}d++}else n.reverse()}function p(e,t,n,o){var l,c,h,m,f=t[o];switch(f){case 0:case 1:i=!1;case 4:case 3:return f;case 2:return i?3:2;case 7:return i=!0,!0,1;case 8:return 4;case 9:return o<1||o+1>=t.length||2!=(l=n[o-1])&&3!=l||2!=(c=t[o+1])&&3!=c?4:(i&&(c=3),c==l?c:4);case 10:return 2==(l=o>0?n[o-1]:5)&&o+1<t.length&&2==t[o+1]?2:4;case u:if(o>0&&2==n[o-1])return 2;if(i)return 4;for(m=o+1,h=t.length;m<h&&t[m]==u;)m++;return m<h&&2==t[m]?2:4;case 12:for(h=t.length,m=o+1;m<h&&12==t[m];)m++;if(m<h){var p=e[o],g=p>=1425&&p<=2303||64286==p;if(l=t[m],g&&(1==l||7==l))return 1}return o<1||5==(l=t[o-1])?4:n[o-1];case 5:return i=!1,s=!0,r;case 6:return a=!0,4;case 13:case 14:case 16:case 17:case 15:i=!1;case d:return 4}}function g(e){var t=e.charCodeAt(0),n=t>>8;return 0==n?t>191?0:h[t]:5==n?/[\\u0591-\\u05f4]/.test(e)?1:0:6==n?/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(e)?12:/[\\u0660-\\u0669\\u066b-\\u066c]/.test(e)?3:1642==t?u:/[\\u06f0-\\u06f9]/.test(e)?2:7:32==n&&t<=8287?m[255&t]:254==n&&t>=65136?7:4}t.L=0,t.R=1,t.EN=2,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.DOT=\"·\",t.doBidiReorder=function(e,n,u){if(e.length<2)return{};var h=e.split(\"\"),m=new Array(h.length),v=new Array(h.length),y=[];r=u?1:0,function(e,t,n,u){var d=r?c:l,h=null,m=null,f=null,v=0,y=null,b=-1,_=null,w=null,x=[];if(!u)for(_=0,u=[];_<n;_++)u[_]=g(e[_]);for(o=r,i=!1,!1,s=!1,a=!1,w=0;w<n;w++){if(h=v,x[w]=m=p(e,u,x,w),y=240&(v=d[h][m]),v&=15,t[w]=f=d[v][5],y>0)if(16==y){for(_=b;_<w;_++)t[_]=1;b=-1}else b=-1;if(d[v][6])-1==b&&(b=w);else if(b>-1){for(_=b;_<w;_++)t[_]=f;b=-1}5==u[w]&&(t[w]=0),o|=f}if(a)for(_=0;_<n;_++)if(6==u[_]){t[_]=r;for(var C=_-1;C>=0&&8==u[C];C--)t[C]=r}}(h,y,h.length,n);for(var b=0;b<m.length;m[b]=b,b++);f(2,y,m),f(1,y,m);for(b=0;b<m.length-1;b++)3===n[b]?y[b]=t.AN:1===y[b]&&(n[b]>7&&n[b]<13||4===n[b]||n[b]===d)?y[b]=t.ON_R:b>0&&\"ل\"===h[b-1]&&/\\u0622|\\u0623|\\u0625|\\u0627/.test(h[b])&&(y[b-1]=y[b]=t.R_H,b++);h[h.length-1]===t.DOT&&(y[h.length-1]=t.B);for(b=0;b<m.length;b++)v[b]=y[m[b]];return{logicalFromVisual:m,bidiLevels:v}},t.hasBidiCharacters=function(e,t){for(var n=!1,r=0;r<e.length;r++)t[r]=g(e.charAt(r)),n||1!=t[r]&&7!=t[r]||(n=!0);return n},t.getVisualFromLogicalIdx=function(e,t){for(var n=0;n<t.logicalFromVisual.length;n++)if(t.logicalFromVisual[n]==e)return n;return 0}})),ace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/bidiutil\"),o=e(\"./lib/lang\"),i=e(\"./lib/useragent\"),s=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/,a=function(e){this.session=e,this.bidiMap={},this.currentRow=null,this.bidiUtil=r,this.charWidths=[],this.EOL=\"¬\",this.showInvisibles=!0,this.isRtlDir=!1,this.line=\"\",this.wrapIndent=0,this.isLastRow=!1,this.EOF=\"¶\",this.seenBidi=!1};(function(){this.isBidiRow=function(e,t,n){return!!this.seenBidi&&(e!==this.currentRow&&(this.currentRow=e,this.updateRowLine(t,n),this.updateBidiMap()),this.bidiMap.bidiLevels)},this.onChange=function(e){this.seenBidi?this.currentRow=null:\"insert\"==e.action&&s.test(e.lines.join(\"\\n\"))&&(this.seenBidi=!0,this.currentRow=null)},this.getDocumentRow=function(){var e=0,t=this.session.$screenRowCache;if(t.length){var n=this.session.$getRowCacheIndex(t,this.currentRow);n>=0&&(e=this.session.$docRowCache[n])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length)for(var n,r=this.session.$getRowCacheIndex(t,this.currentRow);this.currentRow-e>0&&(n=this.session.$getRowCacheIndex(t,this.currentRow-e-1))===r;)r=n,e++;return e},this.updateRowLine=function(e,t){if(void 0===e&&(e=this.getDocumentRow()),this.wrapIndent=0,this.isLastRow=e===this.session.getLength()-1,this.line=this.session.getLine(e),this.session.$useWrapMode){var n=this.session.$wrapData[e];n&&(void 0===t&&(t=this.getSplitIndex()),t>0&&n.length?(this.wrapIndent=n.indent,this.line=t<n.length?this.line.substring(n[t-1],n[n.length-1]):this.line.substring(n[n.length-1])):this.line=this.line.substring(0,n[t]))}var i,s=this.session,a=0;this.line=this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g,(function(e,t){return\"\\t\"===e||s.isFullWidth(e.charCodeAt(0))?(i=\"\\t\"===e?s.getScreenTabSize(t+a):2,a+=i-1,o.stringRepeat(r.DOT,i)):e}))},this.updateBidiMap=function(){var e=[],t=this.isLastRow?this.EOF:this.EOL,n=this.line+(this.showInvisibles?t:r.DOT);r.hasBidiCharacters(n,e)?this.bidiMap=r.doBidiReorder(n,e,this.isRtlDir):this.bidiMap={}},this.markAsDirty=function(){this.currentRow=null},this.updateCharacterWidths=function(e){if(this.seenBidi&&this.characterWidth!==e.$characterSize.width){var t=this.characterWidth=e.$characterSize.width,n=e.$measureCharWidth(\"ה\");this.charWidths[r.L]=this.charWidths[r.EN]=this.charWidths[r.ON_R]=t,this.charWidths[r.R]=this.charWidths[r.AN]=n,this.charWidths[r.R_H]=i.isChrome?n:.45*n,this.charWidths[r.B]=0,this.currentRow=null}},this.getShowInvisibles=function(){return this.showInvisibles},this.setShowInvisibles=function(e){this.showInvisibles=e,this.currentRow=null},this.setEolChar=function(e){this.EOL=e},this.setTextDir=function(e){this.isRtlDir=e},this.getPosLeft=function(e){e-=this.wrapIndent;var t=r.getVisualFromLogicalIdx(e>0?e-1:0,this.bidiMap),n=this.bidiMap.bidiLevels,o=0;0===e&&n[t]%2!=0&&t++;for(var i=0;i<t;i++)o+=this.charWidths[n[i]];return 0!==e&&n[t]%2==0&&(o+=this.charWidths[n[t]]),this.wrapIndent&&(o+=this.wrapIndent*this.charWidths[r.L]),o},this.getSelections=function(e,t){for(var n,o,i=this.bidiMap,s=i.bidiLevels,a=this.wrapIndent*this.charWidths[r.L],l=[],c=Math.min(e,t)-this.wrapIndent,u=Math.max(e,t)-this.wrapIndent,d=!1,h=!1,m=0,f=0;f<s.length;f++)o=i.logicalFromVisual[f],n=s[f],(d=o>=c&&o<u)&&!h?m=a:!d&&h&&l.push({left:m,width:a-m}),a+=this.charWidths[n],h=d;return d&&f===s.length&&l.push({left:m,width:a-m}),l},this.offsetToCol=function(e){var t=0,n=(e=Math.max(e,0),0),o=0,i=this.bidiMap.bidiLevels,s=this.charWidths[i[o]];for(this.wrapIndent&&(e-=this.wrapIndent*this.charWidths[r.L]);e>n+s/2;){if(n+=s,o===i.length-1){s=0;break}s=this.charWidths[i[++o]]}return o>0&&i[o-1]%2!=0&&i[o]%2==0?(e<n&&o--,t=this.bidiMap.logicalFromVisual[o]):o>0&&i[o-1]%2==0&&i[o]%2!=0?t=1+(e>n?this.bidiMap.logicalFromVisual[o]:this.bidiMap.logicalFromVisual[o-1]):this.isRtlDir&&o===i.length-1&&0===s&&i[o-1]%2==0||!this.isRtlDir&&0===o&&i[o]%2!=0?t=1+this.bidiMap.logicalFromVisual[o]:(o>0&&i[o-1]%2!=0&&0!==s&&o--,t=this.bidiMap.logicalFromVisual[o]),t+this.wrapIndent}}).call(a.prototype),t.BidiHandler=a})),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";var r=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,n=e.end,r=e.start;return 1==(t=this.compare(n.row,n.column))?1==(t=this.compare(r.row,r.column))?2:0==t?1:0:-1==t?-2:-1==(t=this.compare(r.row,r.column))?-1:1==t?42:0},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){\"object\"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){\"object\"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&(!this.isEnd(e,t)&&!this.isStart(e,t))},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:t<this.start.column?-1:t>this.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)n={row:e,column:0};if(this.start.row>t)var o={row:t+1,column:0};else if(this.start.row<e)o={row:e,column:0};return r.fromPoints(o||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(0==n)return this;if(-1==n)var o={row:e,column:t};else var i={row:e,column:t};return r.fromPoints(o||this.start,i||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return r.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new r(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new r(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new r(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(r.prototype),r.fromPoints=function(e,t){return new r(e.row,e.column,t.row,t.column)},r.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},r.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=r})),ace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),o=e(\"./lib/lang\"),i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./range\").Range,a=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.lead=this.selectionLead=this.doc.createAnchor(0,0),this.anchor=this.selectionAnchor=this.doc.createAnchor(0,0);var t=this;this.lead.on(\"change\",(function(e){t._emit(\"changeCursor\"),t.$isEmpty||t._emit(\"changeSelection\"),t.$keepDesiredColumnOnChange||e.old.column==e.value.column||(t.$desiredColumn=null)})),this.selectionAnchor.on(\"change\",(function(){t.$isEmpty||t._emit(\"changeSelection\")}))};(function(){r.implement(this,i),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.isEmpty()&&this.getRange().isMultiLine()},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.anchor.setPosition(e,t),this.$isEmpty&&(this.$isEmpty=!1,this._emit(\"changeSelection\"))},this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.shiftSelection=function(e){if(this.$isEmpty)this.moveCursorTo(this.lead.row,this.lead.column+e);else{var t=this.getSelectionAnchor(),n=this.getSelectionLead(),r=this.isBackwards();r&&0===t.column||this.setSelectionAnchor(t.row,t.column+e),(r||0!==n.column)&&this.$moveSelection((function(){this.moveCursorTo(n.row,n.column+e)}))}},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?s.fromPoints(t,t):this.isBackwards()?s.fromPoints(t,e):s.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit(\"changeSelection\"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection((function(){this.moveCursorTo(e,t)}))},this.selectToPosition=function(e){this.$moveSelection((function(){this.moveCursorToPosition(e)}))},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(void 0===t){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n,r=\"number\"==typeof e?e:this.lead.row,o=this.session.getFoldLine(r);return o?(r=o.start.row,n=o.end.row):n=r,!0===t?new s(r,0,n,this.session.getLine(n).length):new s(r,0,n+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var r=e.column,o=e.column+t;return n<0&&(r=e.column-t,o=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(r,o).split(\" \").length-1==t},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)t.row>0&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length);else{var n=this.session.getTabSize();this.wouldMoveIntoSoftTab(t,n,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,1))this.moveCursorTo(e.end.row,e.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row<this.doc.getLength()-1&&this.moveCursorTo(this.lead.row+1,0);else{var n=this.session.getTabSize();t=this.lead;this.wouldMoveIntoSoftTab(t,n,1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,n):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var e=this.lead.row,t=this.lead.column,n=this.session.documentToScreenRow(e,t),r=this.session.screenToDocumentPosition(n,0),o=this.session.getDisplayLine(e,null,r.row,r.column).match(/^\\s*/);o[0].length==t||this.session.$useEmacsStyleLineStart||(r.column+=o[0].length),this.moveCursorToPosition(r)},this.moveCursorLineEnd=function(){var e=this.lead,t=this.session.getDocumentLastRowColumnPosition(e.row,e.column);if(this.lead.column==t.column){var n=this.session.getLine(t.row);if(t.column==n.length){var r=n.search(/\\s+$/);r>0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var o=this.session.getFoldAt(e,t,1);if(o)this.moveCursorTo(o.end.row,o.end.column);else{if(this.session.nonTokenRe.exec(r)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t)),t>=n.length)return this.moveCursorTo(e,n.length),this.moveCursorRight(),void(e<this.doc.getLength()-1&&this.moveCursorWordRight());this.session.tokenRe.exec(r)&&(t+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)}},this.moveCursorLongWordLeft=function(){var e,t=this.lead.row,n=this.lead.column;if(e=this.session.getFoldAt(t,n,-1))this.moveCursorTo(e.start.row,e.start.column);else{var r=this.session.getFoldStringAt(t,n,-1);null==r&&(r=this.doc.getLine(t).substring(0,n));var i=o.stringReverse(r);if(this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0,this.session.nonTokenRe.exec(i)&&(n-=this.session.nonTokenRe.lastIndex,i=i.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0),n<=0)return this.moveCursorTo(t,0),this.moveCursorLeft(),void(t>0&&this.moveCursorWordLeft());this.session.tokenRe.exec(i)&&(n-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(t,n)}},this.$shortWordEndIndex=function(e){var t,n=0,r=/\\s/,o=this.session.tokenRe;if(o.lastIndex=0,this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{for(;(t=e[n])&&r.test(t);)n++;if(n<1)for(o.lastIndex=0;(t=e[n])&&!o.test(t);)if(o.lastIndex=0,n++,r.test(t)){if(n>2){n--;break}for(;(t=e[n])&&r.test(t);)n++;if(n>2)break}}return o.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),o=this.session.getFoldAt(e,t,1);if(o)return this.moveCursorTo(o.end.row,o.end.column);if(t==n.length){var i=this.doc.getLength();do{e++,r=this.doc.getLine(e)}while(e<i&&/^\\s*$/.test(r));/^\\s+/.test(r)||(r=\"\"),t=0}var s=this.$shortWordEndIndex(r);this.moveCursorTo(e,t+s)},this.moveCursorShortWordLeft=function(){var e,t=this.lead.row,n=this.lead.column;if(e=this.session.getFoldAt(t,n,-1))return this.moveCursorTo(e.start.row,e.start.column);var r=this.session.getLine(t).substring(0,n);if(0===n){do{t--,r=this.doc.getLine(t)}while(t>0&&/^\\s*$/.test(r));n=r.length,/\\s+$/.test(r)||(r=\"\")}var i=o.stringReverse(r),s=this.$shortWordEndIndex(i);return this.moveCursorTo(t,n-s)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n,r=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(0!==e&&(this.session.$bidiHandler.isBidiRow(r.row,this.lead.row)?(n=this.session.$bidiHandler.getPosLeft(r.column),r.column=Math.round(n/this.session.$bidiHandler.charWidths[0])):n=r.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?r.column=this.$desiredColumn:this.$desiredColumn=r.column);var o=this.session.screenToDocumentPosition(r.row+e,r.column,n);0!==e&&0===t&&o.row===this.lead.row&&o.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[o.row]&&(o.row>0||e>0)&&o.row++,this.moveCursorTo(o.row,o.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0;var o=this.session.getLine(e);/[\\uDC00-\\uDFFF]/.test(o.charAt(t))&&o.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return s.fromPoints(t,n)}catch(e){return s.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map((function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t}));else(e=this.getRange()).isBackwards=this.isBackwards();return e},this.fromJSON=function(e){if(null==e.start){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=s.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(a.prototype),t.Selection=a})),ace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"],(function(e,t,n){\"use strict\";var r=e(\"./config\"),o=2e3,i=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var n=this.states[t],r=[],o=0,i=this.matchMappings[t]={defaultToken:\"text\"},s=\"g\",a=[],l=0;l<n.length;l++){var c=n[l];if(c.defaultToken&&(i.defaultToken=c.defaultToken),c.caseInsensitive&&(s=\"gi\"),null!=c.regex){c.regex instanceof RegExp&&(c.regex=c.regex.toString().slice(1,-1));var u=c.regex,d=new RegExp(\"(?:(\"+u+\")|(.))\").exec(\"a\").length-2;Array.isArray(c.token)?1==c.token.length||1==d?c.token=c.token[0]:d-1!=c.token.length?(this.reportError(\"number of classes and regexp groups doesn't match\",{rule:c,groupCount:d-1}),c.token=c.token[0]):(c.tokenArray=c.token,c.token=null,c.onMatch=this.$arrayTokens):\"function\"!=typeof c.token||c.onMatch||(c.onMatch=d>1?this.$applyToken:c.token),d>1&&(/\\\\\\d/.test(c.regex)?u=c.regex.replace(/\\\\([0-9]+)/g,(function(e,t){return\"\\\\\"+(parseInt(t,10)+o+1)})):(d=1,u=this.removeCapturingGroups(c.regex)),c.splitRegex||\"string\"==typeof c.token||a.push(c)),i[o]=l,o+=d,r.push(u),c.onMatch||(c.onMatch=null)}}r.length||(i[0]=0,r.push(\"$\")),a.forEach((function(e){e.splitRegex=this.createSplitterRegexp(e.regex,s)}),this),this.regExps[t]=new RegExp(\"(\"+r.join(\")|(\")+\")|($)\",s)}};(function(){this.$setMaxTokenCount=function(e){o=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(\"string\"==typeof n)return[{type:n,value:e}];for(var r=[],o=0,i=n.length;o<i;o++)t[o]&&(r[r.length]={type:n[o],value:t[o]});return r},this.$arrayTokens=function(e){if(!e)return[];var t=this.splitRegex.exec(e);if(!t)return\"text\";for(var n=[],r=this.tokenArray,o=0,i=r.length;o<i;o++)t[o+1]&&(n[n.length]={type:r[o],value:t[o+1]});return n},this.removeCapturingGroups=function(e){return e.replace(/\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,(function(e,t){return t?\"(?:\":e}))},this.createSplitterRegexp=function(e,t){if(-1!=e.indexOf(\"(?=\")){var n=0,r=!1,o={};e.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g,(function(e,t,i,s,a,l){return r?r=\"]\"!=a:a?r=!0:s?(n==o.stack&&(o.end=l+1,o.stack=-1),n--):i&&(n++,1!=i.length&&(o.stack=n,o.start=l)),e})),null!=o.end&&/^\\)*$/.test(e.substr(o.end))&&(e=e.substring(0,o.start)+e.substr(o.end))}return\"^\"!=e.charAt(0)&&(e=\"^\"+e),\"$\"!=e.charAt(e.length-1)&&(e+=\"$\"),new RegExp(e,(t||\"\").replace(\"g\",\"\"))},this.getLineTokens=function(e,t){if(t&&\"string\"!=typeof t){var n=t.slice(0);\"#tmp\"===(t=n[0])&&(n.shift(),t=n.shift())}else n=[];var r=t||\"start\",i=this.states[r];i||(r=\"start\",i=this.states[r]);var s=this.matchMappings[r],a=this.regExps[r];a.lastIndex=0;for(var l,c=[],u=0,d=0,h={type:null,value:\"\"};l=a.exec(e);){var m=s.defaultToken,f=null,p=l[0],g=a.lastIndex;if(g-p.length>u){var v=e.substring(u,g-p.length);h.type==m?h.value+=v:(h.type&&c.push(h),h={type:m,value:v})}for(var y=0;y<l.length-2;y++)if(void 0!==l[y+1]){m=(f=i[s[y]]).onMatch?f.onMatch(p,r,n,e):f.token,f.next&&(r=\"string\"==typeof f.next?f.next:f.next(r,n),(i=this.states[r])||(this.reportError(\"state doesn't exist\",r),r=\"start\",i=this.states[r]),s=this.matchMappings[r],u=g,(a=this.regExps[r]).lastIndex=g),f.consumeLineEnd&&(u=g);break}if(p)if(\"string\"==typeof m)f&&!1===f.merge||h.type!==m?(h.type&&c.push(h),h={type:m,value:p}):h.value+=p;else if(m){h.type&&c.push(h),h={type:null,value:\"\"};for(y=0;y<m.length;y++)c.push(m[y])}if(u==e.length)break;if(u=g,d++>o){for(d>2*e.length&&this.reportError(\"infinite loop with in ace tokenizer\",{startState:t,line:e});u<e.length;)h.type&&c.push(h),h={value:e.substring(u,u+=2e3),type:\"overflow\"};r=\"start\",n=[];break}}return h.type&&c.push(h),n.length>1&&n[0]!==r&&n.unshift(\"#tmp\",r),{tokens:c,state:n.length?n:r}},this.reportError=r.reportError}).call(i.prototype),t.Tokenizer=i})),ace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/lang\"),o=function(){this.$rules={start:[{token:\"empty_line\",regex:\"^$\"},{defaultToken:\"text\"}]}};(function(){this.addRules=function(e,t){if(t)for(var n in e){for(var r=e[n],o=0;o<r.length;o++){var i=r[o];(i.next||i.onMatch)&&(\"string\"==typeof i.next&&0!==i.next.indexOf(t)&&(i.next=t+i.next),i.nextState&&0!==i.nextState.indexOf(t)&&(i.nextState=t+i.nextState))}this.$rules[t+n]=r}else for(var n in e)this.$rules[n]=e[n]},this.getRules=function(){return this.$rules},this.embedRules=function(e,t,n,o,i){var s=\"function\"==typeof e?(new e).getRules():e;if(o)for(var a=0;a<o.length;a++)o[a]=t+o[a];else for(var l in o=[],s)o.push(t+l);if(this.addRules(s,t),n){var c=Array.prototype[i?\"push\":\"unshift\"];for(a=0;a<o.length;a++)c.apply(this.$rules[o[a]],r.deepCopy(n))}this.$embeds||(this.$embeds=[]),this.$embeds.push(t)},this.getEmbeds=function(){return this.$embeds};var e=function(e,t){return(\"start\"!=e||t.length)&&t.unshift(this.nextState,e),this.nextState},t=function(e,t){return t.shift(),t.shift()||\"start\"};this.normalizeRules=function(){var n=0,r=this.$rules;Object.keys(r).forEach((function o(i){var s=r[i];s.processed=!0;for(var a=0;a<s.length;a++){var l=s[a],c=null;Array.isArray(l)&&(c=l,l={}),!l.regex&&l.start&&(l.regex=l.start,l.next||(l.next=[]),l.next.push({defaultToken:l.token},{token:l.token+\".end\",regex:l.end||l.start,next:\"pop\"}),l.token=l.token+\".start\",l.push=!0);var u=l.next||l.push;if(u&&Array.isArray(u)){var d=l.stateName;d||(\"string\"!=typeof(d=l.token)&&(d=d[0]||\"\"),r[d]&&(d+=n++)),r[d]=u,l.next=d,o(d)}else\"pop\"==u&&(l.next=t);if(l.push&&(l.nextState=l.next||l.push,l.next=e,delete l.push),l.rules)for(var h in l.rules)r[h]?r[h].push&&r[h].push.apply(r[h],l.rules[h]):r[h]=l.rules[h];var m=\"string\"==typeof l?l:l.include;if(m&&(c=Array.isArray(m)?m.map((function(e){return r[e]})):r[m]),c){var f=[a,1].concat(c);l.noEscape&&(f=f.filter((function(e){return!e.next}))),s.splice.apply(s,f),a--}l.keywordMap&&(l.token=this.createKeywordMapper(l.keywordMap,l.defaultToken||\"text\",l.caseInsensitive),delete l.defaultToken)}}),this)},this.createKeywordMapper=function(e,t,n,r){var o=Object.create(null);return Object.keys(e).forEach((function(t){var i=e[t];n&&(i=i.toLowerCase());for(var s=i.split(r||\"|\"),a=s.length;a--;)o[s[a]]=t})),Object.getPrototypeOf(o)&&(o.__proto__=null),this.$keywordList=Object.keys(o),e=null,n?function(e){return o[e.toLowerCase()]||t}:function(e){return o[e]||t}},this.getKeywords=function(){return this.$keywords}}).call(o.prototype),t.TextHighlightRules=o})),ace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";var r=function(){this.$behaviours={}};(function(){this.add=function(e,t,n){switch(void 0){case this.$behaviours:this.$behaviours={};case this.$behaviours[e]:this.$behaviours[e]={}}this.$behaviours[e][t]=n},this.addBehaviours=function(e){for(var t in e)for(var n in e[t])this.add(t,n,e[t][n])},this.remove=function(e){this.$behaviours&&this.$behaviours[e]&&delete this.$behaviours[e]},this.inherit=function(e,t){if(\"function\"==typeof e)var n=(new e).getBehaviours(t);else n=e.getBehaviours(t);this.addBehaviours(n)},this.getBehaviours=function(e){if(e){for(var t={},n=0;n<e.length;n++)this.$behaviours[e[n]]&&(t[e[n]]=this.$behaviours[e[n]]);return t}return this.$behaviours}}).call(r.prototype),t.Behaviour=r})),ace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"./range\").Range,o=function(e,t,n){this.$session=e,this.$row=t,this.$rowTokens=e.getTokens(t);var r=e.getTokenAt(t,n);this.$tokenIndex=r?r.index:-1};(function(){this.stepBackward=function(){for(this.$tokenIndex-=1;this.$tokenIndex<0;){if(this.$row-=1,this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){var e;for(this.$tokenIndex+=1;this.$tokenIndex>=this.$rowTokens.length;){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(void 0!==n)return n;for(n=0;t>0;)n+=e[t-=1].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new r(this.$row,t,this.$row,t+e.value.length)}}).call(o.prototype),t.TokenIterator=o})),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],(function(e,t,n){\"use strict\";var r,o=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,a=e(\"../../lib/lang\"),l=[\"text\",\"paren.rparen\",\"punctuation.operator\"],c=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],u={},d={'\"':'\"',\"'\":\"'\"},h=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return r=u[t];r=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},m=function(e,t,n,r){var o=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,o,e.end.column+(o?0:1)]}},f=function(e){this.add(\"braces\",\"insertion\",(function(t,n,o,i,s){var l=o.getCursorPosition(),c=i.doc.getLine(l.row);if(\"{\"==s){h(o);var u=o.getSelectionRange(),d=i.doc.getTextRange(u);if(\"\"!==d&&\"{\"!==d&&o.getWrapBehavioursEnabled())return m(u,d,\"{\",\"}\");if(f.isSaneInsertion(o,i))return/[\\]\\}\\)]/.test(c[l.column])||o.inMultiSelectMode||e&&e.braces?(f.recordAutoInsert(o,i,\"}\"),{text:\"{}\",selection:[1,1]}):(f.recordMaybeInsert(o,i,\"{\"),{text:\"{\",selection:[1,1]})}else if(\"}\"==s){if(h(o),\"}\"==c.substring(l.column,l.column+1))if(null!==i.$findOpeningBracket(\"}\",{column:l.column+1,row:l.row})&&f.isAutoInsertedClosing(l,c,s))return f.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}else{if(\"\\n\"==s||\"\\r\\n\"==s){h(o);var p=\"\";if(f.isMaybeInsertedClosing(l,c)&&(p=a.stringRepeat(\"}\",r.maybeInsertedBrackets),f.clearMaybeInsertedClosing()),\"}\"===c.substring(l.column,l.column+1)){var g=i.findMatchingBracket({row:l.row,column:l.column+1},\"}\");if(!g)return null;var v=this.$getIndent(i.getLine(g.row))}else{if(!p)return void f.clearMaybeInsertedClosing();v=this.$getIndent(c)}var y=v+i.getTabString();return{text:\"\\n\"+y+\"\\n\"+v+p,selection:[1,y.length,1,y.length]}}f.clearMaybeInsertedClosing()}})),this.add(\"braces\",\"deletion\",(function(e,t,n,o,i){var s=o.doc.getTextRange(i);if(!i.isMultiLine()&&\"{\"==s){if(h(n),\"}\"==o.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i;r.maybeInsertedBrackets--}})),this.add(\"parens\",\"insertion\",(function(e,t,n,r,o){if(\"(\"==o){h(n);var i=n.getSelectionRange(),s=r.doc.getTextRange(i);if(\"\"!==s&&n.getWrapBehavioursEnabled())return m(i,s,\"(\",\")\");if(f.isSaneInsertion(n,r))return f.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(\")\"==o){h(n);var a=n.getCursorPosition(),l=r.doc.getLine(a.row);if(\")\"==l.substring(a.column,a.column+1))if(null!==r.$findOpeningBracket(\")\",{column:a.column+1,row:a.row})&&f.isAutoInsertedClosing(a,l,o))return f.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}})),this.add(\"parens\",\"deletion\",(function(e,t,n,r,o){var i=r.doc.getTextRange(o);if(!o.isMultiLine()&&\"(\"==i&&(h(n),\")\"==r.doc.getLine(o.start.row).substring(o.start.column+1,o.start.column+2)))return o.end.column++,o})),this.add(\"brackets\",\"insertion\",(function(e,t,n,r,o){if(\"[\"==o){h(n);var i=n.getSelectionRange(),s=r.doc.getTextRange(i);if(\"\"!==s&&n.getWrapBehavioursEnabled())return m(i,s,\"[\",\"]\");if(f.isSaneInsertion(n,r))return f.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(\"]\"==o){h(n);var a=n.getCursorPosition(),l=r.doc.getLine(a.row);if(\"]\"==l.substring(a.column,a.column+1))if(null!==r.$findOpeningBracket(\"]\",{column:a.column+1,row:a.row})&&f.isAutoInsertedClosing(a,l,o))return f.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}})),this.add(\"brackets\",\"deletion\",(function(e,t,n,r,o){var i=r.doc.getTextRange(o);if(!o.isMultiLine()&&\"[\"==i&&(h(n),\"]\"==r.doc.getLine(o.start.row).substring(o.start.column+1,o.start.column+2)))return o.end.column++,o})),this.add(\"string_dquotes\",\"insertion\",(function(e,t,n,r,o){var i=r.$mode.$quotes||d;if(1==o.length&&i[o]){if(this.lineCommentStart&&-1!=this.lineCommentStart.indexOf(o))return;h(n);var s=o,a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(!(\"\"===l||1==l.length&&i[l])&&n.getWrapBehavioursEnabled())return m(a,l,s,s);if(!l){var c=n.getCursorPosition(),u=r.doc.getLine(c.row),f=u.substring(c.column-1,c.column),p=u.substring(c.column,c.column+1),g=r.getTokenAt(c.row,c.column),v=r.getTokenAt(c.row,c.column+1);if(\"\\\\\"==f&&g&&/escape/.test(g.type))return null;var y,b=g&&/string|escape/.test(g.type),_=!v||/string|escape/.test(v.type);if(p==s)(y=b!==_)&&/string\\.end/.test(v.type)&&(y=!1);else{if(b&&!_)return null;if(b&&_)return null;var w=r.$mode.tokenRe;w.lastIndex=0;var x=w.test(f);w.lastIndex=0;var C=w.test(f);if(x||C)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}})),this.add(\"string_dquotes\",\"deletion\",(function(e,t,n,r,o){var i=r.doc.getTextRange(o);if(!o.isMultiLine()&&('\"'==i||\"'\"==i)&&(h(n),r.doc.getLine(o.start.row).substring(o.start.column+1,o.start.column+2)==i))return o.end.column++,o}))};f.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",l)){var o=new s(t,n.row,n.column+1);if(!this.$matchTokenType(o.getCurrentToken()||\"text\",l))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",c)},f.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},f.recordAutoInsert=function(e,t,n){var o=e.getCursorPosition(),i=t.doc.getLine(o.row);this.isAutoInsertedClosing(o,i,r.autoInsertedLineEnd[0])||(r.autoInsertedBrackets=0),r.autoInsertedRow=o.row,r.autoInsertedLineEnd=n+i.substr(o.column),r.autoInsertedBrackets++},f.recordMaybeInsert=function(e,t,n){var o=e.getCursorPosition(),i=t.doc.getLine(o.row);this.isMaybeInsertedClosing(o,i)||(r.maybeInsertedBrackets=0),r.maybeInsertedRow=o.row,r.maybeInsertedLineStart=i.substr(0,o.column)+n,r.maybeInsertedLineEnd=i.substr(o.column),r.maybeInsertedBrackets++},f.isAutoInsertedClosing=function(e,t,n){return r.autoInsertedBrackets>0&&e.row===r.autoInsertedRow&&n===r.autoInsertedLineEnd[0]&&t.substr(e.column)===r.autoInsertedLineEnd},f.isMaybeInsertedClosing=function(e,t){return r.maybeInsertedBrackets>0&&e.row===r.maybeInsertedRow&&t.substr(e.column)===r.maybeInsertedLineEnd&&t.substr(0,e.column)==r.maybeInsertedLineStart},f.popAutoInsertedClosing=function(){r.autoInsertedLineEnd=r.autoInsertedLineEnd.substr(1),r.autoInsertedBrackets--},f.clearMaybeInsertedClosing=function(){r&&(r.maybeInsertedBrackets=0,r.maybeInsertedRow=-1)},o.inherits(f,i),t.CstyleBehaviour=f})),ace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";t.packages={},function(e){var n=/\\w{4}/g;for(var r in e)t.packages[r]=e[r].replace(n,\"\\\\u$&\")}({L:\"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",Ll:\"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",Lu:\"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",Lt:\"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",Lm:\"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",Lo:\"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",M:\"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",Mn:\"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",Mc:\"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",Me:\"0488048906DE20DD-20E020E2-20E4A670-A672\",N:\"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",Nd:\"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",Nl:\"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",No:\"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",P:\"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",Pd:\"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",Ps:\"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",Pe:\"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",Pi:\"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",Pf:\"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",Pc:\"005F203F20402054FE33FE34FE4D-FE4FFF3F\",Po:\"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",S:\"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",Sm:\"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",Sc:\"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",Sk:\"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",So:\"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",Z:\"002000A01680180E2000-200A20282029202F205F3000\",Zs:\"002000A01680180E2000-200A202F205F3000\",Zl:\"2028\",Zp:\"2029\",C:\"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",Cc:\"0000-001F007F-009F\",Cf:\"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",Co:\"E000-F8FF\",Cs:\"D800-DFFF\",Cn:\"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"})})),ace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../tokenizer\").Tokenizer,o=e(\"./text_highlight_rules\").TextHighlightRules,i=e(\"./behaviour/cstyle\").CstyleBehaviour,s=e(\"../unicode\"),a=e(\"../lib/lang\"),l=e(\"../token_iterator\").TokenIterator,c=e(\"../range\").Range,u=function(){this.HighlightRules=o};(function(){this.$defaultBehaviour=new i,this.tokenRe=new RegExp(\"^[\"+s.packages.L+s.packages.Mn+s.packages.Mc+s.packages.Nd+s.packages.Pc+\"\\\\$_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+s.packages.L+s.packages.Mn+s.packages.Mc+s.packages.Nd+s.packages.Pc+\"\\\\$_]|\\\\s])+\",\"g\"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new r(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart=\"\",this.blockComment=\"\",this.toggleCommentLines=function(e,t,n,r){var o=t.doc,i=!0,s=!0,l=1/0,c=t.getTabSize(),u=!1;if(this.lineCommentStart){if(Array.isArray(this.lineCommentStart))p=this.lineCommentStart.map(a.escapeRegExp).join(\"|\"),m=this.lineCommentStart[0];else p=a.escapeRegExp(this.lineCommentStart),m=this.lineCommentStart;p=new RegExp(\"^(\\\\s*)(?:\"+p+\") ?\"),u=t.getUseSoftTabs();y=function(e,t){var n=e.match(p);if(n){var r=n[1].length,i=n[0].length;h(e,r,i)||\" \"!=n[0][i-1]||i--,o.removeInLine(t,r,i)}};var d=m+\" \",h=(v=function(e,t){i&&!/\\S/.test(e)||(h(e,l,l)?o.insertInLine({row:t,column:l},d):o.insertInLine({row:t,column:l},m))},b=function(e,t){return p.test(e)},function(e,t,n){for(var r=0;t--&&\" \"==e.charAt(t);)r++;if(r%c!=0)return!1;for(r=0;\" \"==e.charAt(n++);)r++;return c>2?r%c!=c-1:r%c==0})}else{if(!this.blockComment)return!1;var m=this.blockComment.start,f=this.blockComment.end,p=new RegExp(\"^(\\\\s*)(?:\"+a.escapeRegExp(m)+\")\"),g=new RegExp(\"(?:\"+a.escapeRegExp(f)+\")\\\\s*$\"),v=function(e,t){b(e,t)||i&&!/\\S/.test(e)||(o.insertInLine({row:t,column:e.length},f),o.insertInLine({row:t,column:l},m))},y=function(e,t){var n;(n=e.match(g))&&o.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(p))&&o.removeInLine(t,n[1].length,n[0].length)},b=function(e,n){if(p.test(e))return!0;for(var r=t.getTokens(n),o=0;o<r.length;o++)if(\"comment\"===r[o].type)return!0}}function _(e){for(var t=n;t<=r;t++)e(o.getLine(t),t)}var w=1/0;_((function(e,t){var n=e.search(/\\S/);-1!==n?(n<l&&(l=n),s&&!b(e,t)&&(s=!1)):w>e.length&&(w=e.length)})),l==1/0&&(l=w,i=!1,s=!1),u&&l%c!=0&&(l=Math.floor(l/c)*c),_(s?y:v)},this.toggleBlockComment=function(e,t,n,r){var o=this.blockComment;if(o){!o.start&&o[0]&&(o=o[0]);var i,s,a=(p=new l(t,r.row,r.column)).getCurrentToken(),u=(t.selection,t.selection.toOrientedRange());if(a&&/comment/.test(a.type)){for(var d,h;a&&/comment/.test(a.type);){if(-1!=(g=a.value.indexOf(o.start))){var m=p.getCurrentTokenRow(),f=p.getCurrentTokenColumn()+g;d=new c(m,f,m,f+o.start.length);break}a=p.stepBackward()}var p;for(a=(p=new l(t,r.row,r.column)).getCurrentToken();a&&/comment/.test(a.type);){var g;if(-1!=(g=a.value.indexOf(o.end))){m=p.getCurrentTokenRow(),f=p.getCurrentTokenColumn()+g;h=new c(m,f,m,f+o.end.length);break}a=p.stepForward()}h&&t.remove(h),d&&(t.remove(d),i=d.start.row,s=-o.start.length)}else s=o.start.length,i=n.start.row,t.insert(n.end,o.end),t.insert(n.start,o.start);u.start.row==i&&(u.start.column+=s),u.end.row==i&&(u.end.column+=s),t.selection.fromOrientedRange(u)}},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var n=[\"toggleBlockComment\",\"toggleCommentLines\",\"getNextLineIndent\",\"checkOutdent\",\"autoOutdent\",\"transformAction\",\"getCompletions\"];for(t=0;t<n.length;t++)!function(e){var r=n[t],o=e[r];e[n[t]]=function(){return this.$delegator(r,arguments,o)}}(this)},this.$delegator=function(e,t,n){var r=t[0];\"string\"!=typeof r&&(r=r[0]);for(var o=0;o<this.$embeds.length;o++)if(this.$modes[this.$embeds[o]]){var i=r.split(this.$embeds[o]);if(!i[0]&&i[1]){t[0]=i[1];var s=this.$modes[this.$embeds[o]];return s[e].apply(s,t)}}var a=n.apply(this,t);return n?a:void 0},this.transformAction=function(e,t,n,r,o){if(this.$behaviour){var i=this.$behaviour.getBehaviours();for(var s in i)if(i[s][t]){var a=i[s][t].apply(this,arguments);if(a)return a}}},this.getKeywords=function(e){if(!this.completionKeywords){var t=this.$tokenizer.rules,n=[];for(var r in t)for(var o=t[r],i=0,s=o.length;i<s;i++)if(\"string\"==typeof o[i].token)/keyword|support|storage/.test(o[i].token)&&n.push(o[i].regex);else if(\"object\"==typeof o[i].token)for(var a=0,l=o[i].token.length;a<l;a++)if(/keyword|support|storage/.test(o[i].token[a])){r=o[i].regex.match(/\\(.+?\\)/g)[a];n.push(r.substr(1,r.length-2))}this.completionKeywords=n}return e?n.concat(this.$keywordList||[]):this.$keywordList},this.$createKeywordList=function(){return this.$highlightRules||this.getTokenizer(),this.$keywordList=this.$highlightRules.$keywordList||[]},this.getCompletions=function(e,t,n,r){return(this.$keywordList||this.$createKeywordList()).map((function(e){return{name:e,value:e,score:0,meta:\"keyword\"}}))},this.$id=\"ace/mode/text\"}).call(u.prototype),t.Mode=u})),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";t.applyDelta=function(e,t,n){var r=t.start.row,o=t.start.column,i=e[r]||\"\";switch(t.action){case\"insert\":if(1===t.lines.length)e[r]=i.substring(0,o)+t.lines[0]+i.substring(o);else{var s=[r,1].concat(t.lines);e.splice.apply(e,s),e[r]=i.substring(0,o)+e[r],e[r+t.lines.length-1]+=i.substring(o)}break;case\"remove\":var a=t.end.column,l=t.end.row;r===l?e[r]=i.substring(0,o)+i.substring(a):e.splice(r,l-r+1,i.substring(0,o)+e[l].substring(a))}}})),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),o=e(\"./lib/event_emitter\").EventEmitter,i=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),void 0===n?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}r.implement(this,o),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(t){if(!(t.start.row==t.end.row&&t.start.row!=this.row||t.start.row>this.row)){var n=function(t,n,r){var o=\"insert\"==t.action,i=(o?1:-1)*(t.end.row-t.start.row),s=(o?1:-1)*(t.end.column-t.start.column),a=t.start,l=o?a:t.end;if(e(n,a,r))return{row:n.row,column:n.column};if(e(l,n,!r))return{row:n.row+i,column:n.column+(n.row==l.row?s:0)};return{row:a.row,column:a.column}}(t,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)}},this.setPosition=function(e,t,n){var r;if(r=n?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=r.row||this.column!=r.column){var o={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:o,value:r})}},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(i.prototype)})),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),o=e(\"./apply_delta\").applyDelta,i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./range\").Range,a=e(\"./anchor\").Anchor,l=function(e){this.$lines=[\"\"],0===e.length?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength()-1;this.remove(new s(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new a(this,e,t)},0===\"aaa\".split(/a/).length?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal(\"changeNewLineMode\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return\"\\r\\n\"==e||\"\\r\"==e||\"\\n\"==e},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{(t=this.getLines(e.start.row,e.end.row))[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();void 0===e?e=n:e<0?e=0:e>=n&&(e=n-1,t=void 0);var r=this.getLine(e);return null==t&&(t=r.length),{row:e,column:t=Math.min(Math.max(t,0),r.length)}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){var n=0;(e=Math.min(Math.max(e,0),this.getLength()))<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(1==t.length?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),o=this.clippedPos(e,n);return this.applyDelta({start:r,end:o,action:\"remove\",lines:this.getLinesForRange({start:r,end:o})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1);var n=(t=Math.min(Math.max(0,t),this.getLength()-1))==this.getLength()-1&&e>0,r=t<this.getLength()-1,o=n?e-1:e,i=n?this.getLine(o).length:0,a=r?t+1:t,l=r?0:this.getLine(a).length,c=new s(o,i,a,l),u=this.$lines.slice(e,t+1);return this.applyDelta({start:c.start,end:c.end,action:\"remove\",lines:this.getLinesForRange(c)}),u},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){return e instanceof s||(e=s.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),t?this.insert(e.start,t):e.start)},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=\"insert\"==e.action;(n?e.lines.length<=1&&!e.lines[0]:!s.comparePoints(e.start,e.end))||(n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),o(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){for(var n=e.lines,r=n.length,o=e.start.row,i=e.start.column,s=0,a=0;;){s=a,a+=t-1;var l=n.slice(s,a);if(a>r){e.lines=l,e.start.row=o+s,e.start.column=i;break}l.push(\"\"),this.applyDelta({start:this.pos(o+s,i),end:this.pos(o+a,i=0),action:e.action,lines:l},!0)}},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:\"insert\"==e.action?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){for(var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,o=t||0,i=n.length;o<i;o++)if((e-=n[o].length+r)<0)return{row:o,column:e+n[o].length+r};return{row:i-1,column:n[i-1].length}},this.positionToIndex=function(e,t){for(var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,o=0,i=Math.min(e.row,n.length),s=t||0;s<i;++s)o+=n[s].length+r;return o+e.column}}).call(l.prototype),t.Document=l})),ace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),o=e(\"./lib/event_emitter\").EventEmitter,i=function(e,t){this.running=!1,this.lines=[],this.states=[],this.currentLine=0,this.tokenizer=e;var n=this;this.$worker=function(){if(n.running){for(var e=new Date,t=n.currentLine,r=-1,o=n.doc,i=t;n.lines[t];)t++;var s=o.getLength(),a=0;for(n.running=!1;t<s;){n.$tokenizeRow(t),r=t;do{t++}while(n.lines[t]);if(++a%5==0&&new Date-e>20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,-1==r&&(r=t),i<=r&&n.fireUpdateEvent(i,r)}}};(function(){r.implement(this,o),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal(\"update\",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.lines[t]=null;else if(\"remove\"==e.action)this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.lines.splice.apply(this.lines,r),this.states.splice.apply(this.states,r)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||\"start\"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],r=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+\"\"!=r.state+\"\"?(this.states[e]=r.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=r.tokens}}).call(i.prototype),t.BackgroundTokenizer=i})),ace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/lang\"),o=(e(\"./lib/oop\"),e(\"./range\").Range),i=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||\"text\"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+\"\"!=e+\"\"&&(this.regExp=e,this.cache=[])},this.update=function(e,t,n,i){if(this.regExp)for(var s=i.firstRow,a=i.lastRow,l=s;l<=a;l++){var c=this.cache[l];null==c&&((c=r.getMatchOffsets(n.getLine(l),this.regExp)).length>this.MAX_RANGES&&(c=c.slice(0,this.MAX_RANGES)),c=c.map((function(e){return new o(l,e.offset,l,e.offset+e.length)})),this.cache[l]=c.length?c:\"\");for(var u=c.length;u--;)t.drawSingleLineMarker(e,c[u].toScreenRange(n),this.clazz,i)}}}).call(i.prototype),t.SearchHighlight=i})),ace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../range\").Range;function o(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(e){e.setFoldLine(this)}),this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach((function(t){t.start.row+=e,t.end.row+=e}))},this.addFold=function(e){if(e.sameRow){if(e.start.row<this.startRow||e.endRow>this.endRow)throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");this.folds.push(e),this.folds.sort((function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)})),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r,o,i=0,s=this.folds,a=!0;null==t&&(t=this.end.row,n=this.end.column);for(var l=0;l<s.length;l++){if(-1==(o=(r=s[l]).range.compareStart(t,n)))return void e(null,t,n,i,a);if(!e(null,r.start.row,r.start.column,i,a)&&e(r.placeholder,r.start.row,r.start.column,i)||0===o)return;a=!r.sameRow,i=r.end.column}e(null,t,n,i,a)},this.getNextFoldTo=function(e,t){for(var n,r,o=0;o<this.folds.length;o++){if(-1==(r=(n=this.folds[o]).range.compareEnd(e,t)))return{fold:n,kind:\"after\"};if(0===r)return{fold:n,kind:\"inside\"}}return null},this.addRemoveChars=function(e,t,n){var r,o,i=this.getNextFoldTo(e,t);if(i)if(r=i.fold,\"inside\"==i.kind&&r.start.column!=t&&r.start.row!=e)window.console&&window.console.log(e,t,r);else if(r.start.row==e){var s=(o=this.folds).indexOf(r);for(0===s&&(this.start.column+=n);s<o.length;s++){if((r=o[s]).start.column+=n,!r.sameRow)return;r.end.column+=n}this.end.column+=n}},this.split=function(e,t){var n=this.getNextFoldTo(e,t);if(!n||\"inside\"==n.kind)return null;var r=n.fold,i=this.folds,s=this.foldData,a=i.indexOf(r),l=i[a-1];this.end.row=l.end.row,this.end.column=l.end.column;var c=new o(s,i=i.splice(a,i.length-a));return s.splice(s.indexOf(this)+1,0,c),c},this.merge=function(e){for(var t=e.folds,n=0;n<t.length;n++)this.addFold(t[n]);var r=this.foldData;r.splice(r.indexOf(e),1)},this.toString=function(){var e=[this.range.toString()+\": [\"];return this.folds.forEach((function(t){e.push(\"  \"+t.toString())})),e.push(\"]\"),e.join(\"\\n\")},this.idxToPosition=function(e){for(var t=0,n=0;n<this.folds.length;n++){var r=this.folds[n];if((e-=r.start.column-t)<0)return{row:r.start.row,column:r.start.column+e};if((e-=r.placeholder.length)<0)return r.start;t=r.end.column}return{row:this.end.row,column:this.end.column+e}}}).call(o.prototype),t.FoldLine=o})),ace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"./range\").Range.comparePoints,o=function(){this.ranges=[]};(function(){this.comparePoints=r,this.pointIndex=function(e,t,n){for(var o=this.ranges,i=n||0;i<o.length;i++){var s=o[i],a=r(e,s.end);if(!(a>0)){var l=r(e,s.start);return 0===a?t&&0!==l?-i-2:i:l>0||0===l&&!t?i:-i-1}}return-i-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var r=this.pointIndex(e.end,t,n);return r<0?r=-r-1:r++,this.ranges.splice(n,r-n,e)},this.addList=function(e){for(var t=[],n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){for(var e,t=[],n=this.ranges,o=(n=n.sort((function(e,t){return r(e.start,t.start)})))[0],i=1;i<n.length;i++){e=o,o=n[i];var s=r(e.end,o.start);s<0||(0!=s||e.isEmpty()||o.isEmpty())&&(r(e.end,o.end)<0&&(e.end.row=o.end.row,e.end.column=o.end.column),n.splice(i,1),t.push(o),o=e,i--)}return this.ranges=n,t},this.contains=function(e,t){return this.pointIndex({row:e,column:t})>=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row<e)return[];var r=this.pointIndex({row:e,column:0});r<0&&(r=-r-1);var o=this.pointIndex({row:t,column:0},r);o<0&&(o=-o-1);for(var i=[],s=r;s<o;s++)i.push(n[s]);return i},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(e){this.session&&this.detach(),this.session=e,this.onChange=this.$onChange.bind(this),this.session.on(\"change\",this.onChange)},this.detach=function(){this.session&&(this.session.removeListener(\"change\",this.onChange),this.session=null)},this.$onChange=function(e){if(\"insert\"==e.action)var t=e.start,n=e.end;else n=e.start,t=e.end;for(var r=t.row,o=n.row-r,i=-t.column+n.column,s=this.ranges,a=0,l=s.length;a<l;a++){if(!((c=s[a]).end.row<r)){if(c.start.row>r)break;if(c.start.row==r&&c.start.column>=t.column&&(c.start.column==t.column&&this.$insertRight||(c.start.column+=i,c.start.row+=o)),c.end.row==r&&c.end.column>=t.column){if(c.end.column==t.column&&this.$insertRight)continue;c.end.column==t.column&&i>0&&a<l-1&&c.end.column>c.start.column&&c.end.column==s[a+1].start.column&&(c.end.column-=i),c.end.column+=i,c.end.row+=o}}}if(0!=o&&a<l)for(;a<l;a++){var c;(c=s[a]).start.row+=o,c.end.row+=o}}}).call(o.prototype),t.RangeList=o})),ace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"],(function(e,t,n){\"use strict\";e(\"../range\").Range;var r=e(\"../range_list\").RangeList,o=e(\"../lib/oop\"),i=t.Fold=function(e,t){this.foldLine=null,this.placeholder=t,this.range=e,this.start=e.start,this.end=e.end,this.sameRow=e.start.row==e.end.row,this.subFolds=this.ranges=[]};function s(e,t){e.row-=t.row,0==e.row&&(e.column-=t.column)}function a(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row}o.inherits(i,r),function(){this.toString=function(){return'\"'+this.placeholder+'\" '+this.range.toString()},this.setFoldLine=function(e){this.foldLine=e,this.subFolds.forEach((function(t){t.setFoldLine(e)}))},this.clone=function(){var e=this.range.clone(),t=new i(e,this.placeholder);return this.subFolds.forEach((function(e){t.subFolds.push(e.clone())})),t.collapseChildren=this.collapseChildren,t},this.addSubFold=function(e){if(!this.range.isEqual(e)){if(!this.range.containsRange(e))throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);var t,n;t=e,n=this.start,s(t.start,n),s(t.end,n);for(var r=e.start.row,o=e.start.column,i=0,a=-1;i<this.subFolds.length&&1==(a=this.subFolds[i].range.compare(r,o));i++);var l=this.subFolds[i];if(0==a)return l.addSubFold(e);r=e.range.end.row,o=e.range.end.column;var c=i;for(a=-1;c<this.subFolds.length&&1==(a=this.subFolds[c].range.compare(r,o));c++);this.subFolds[c];if(0==a)throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);this.subFolds.splice(i,c-i,e);return e.setFoldLine(this.foldLine),e}},this.restoreRange=function(e){return function(e,t){a(e.start,t),a(e.end,t)}(e,this.start)}}.call(i.prototype)})),ace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"],(function(e,t,n){\"use strict\";var r=e(\"../range\").Range,o=e(\"./fold_line\").FoldLine,i=e(\"./fold\").Fold,s=e(\"../token_iterator\").TokenIterator;t.Folding=function(){this.getFoldAt=function(e,t,n){var r=this.getFoldLine(e);if(!r)return null;for(var o=r.folds,i=0;i<o.length;i++){var s=o[i];if(s.range.contains(e,t)){if(1==n&&s.range.isEnd(e,t))continue;if(-1==n&&s.range.isStart(e,t))continue;return s}}},this.getFoldsInRange=function(e){var t=e.start,n=e.end,r=this.$foldData,o=[];t.column+=1,n.column-=1;for(var i=0;i<r.length;i++){var s=r[i].range.compareRange(e);if(2!=s){if(-2==s)break;for(var a=r[i].folds,l=0;l<a.length;l++){var c=a[l];if(-2==(s=c.range.compareRange(e)))break;if(2!=s){if(42==s)break;o.push(c)}}}}return t.column-=1,n.column+=1,o},this.getFoldsInRangeList=function(e){if(Array.isArray(e)){var t=[];e.forEach((function(e){t=t.concat(this.getFoldsInRange(e))}),this)}else t=this.getFoldsInRange(e);return t},this.getAllFolds=function(){for(var e=[],t=this.$foldData,n=0;n<t.length;n++)for(var r=0;r<t[n].folds.length;r++)e.push(t[n].folds[r]);return e},this.getFoldStringAt=function(e,t,n,r){if(!(r=r||this.getFoldLine(e)))return null;for(var o,i,s={end:{column:0}},a=0;a<r.folds.length;a++){var l=(i=r.folds[a]).range.compareEnd(e,t);if(-1==l){o=this.getLine(i.start.row).substring(s.end.column,i.start.column);break}if(0===l)return null;s=i}return o||(o=this.getLine(i.start.row).substring(s.end.column)),-1==n?o.substring(0,t-s.end.column):1==n?o.substring(t-s.end.column):o},this.getFoldLine=function(e,t){var n=this.$foldData,r=0;for(t&&(r=n.indexOf(t)),-1==r&&(r=0);r<n.length;r++){var o=n[r];if(o.start.row<=e&&o.end.row>=e)return o;if(o.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;for(t&&(r=n.indexOf(t)),-1==r&&(r=0);r<n.length;r++){var o=n[r];if(o.end.row>=e)return o}return null},this.getFoldedRowCount=function(e,t){for(var n=this.$foldData,r=t-e+1,o=0;o<n.length;o++){var i=n[o],s=i.end.row,a=i.start.row;if(s>=t){a<t&&(a>=e?r-=t-a:r=0);break}s>=e&&(r-=a>=e?s-a:s-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort((function(e,t){return e.start.row-t.start.row})),e},this.addFold=function(e,t){var n,r=this.$foldData,s=!1;e instanceof i?n=e:(n=new i(t,e)).collapseChildren=t.collapseChildren,this.$clipRangeToDocument(n.range);var a=n.start.row,l=n.start.column,c=n.end.row,u=n.end.column;if(!(a<c||a==c&&l<=u-2))throw new Error(\"The range has to be at least 2 characters width\");var d=this.getFoldAt(a,l,1),h=this.getFoldAt(c,u,-1);if(d&&h==d)return d.addSubFold(n);d&&!d.range.isStart(a,l)&&this.removeFold(d),h&&!h.range.isEnd(c,u)&&this.removeFold(h);var m=this.getFoldsInRange(n.range);m.length>0&&(this.removeFolds(m),m.forEach((function(e){n.addSubFold(e)})));for(var f=0;f<r.length;f++){var p=r[f];if(c==p.start.row){p.addFold(n),s=!0;break}if(a==p.end.row){if(p.addFold(n),s=!0,!n.sameRow){var g=r[f+1];if(g&&g.start.row==c){p.merge(g);break}}break}if(c<=p.start.row)break}return s||(p=this.$addFoldLine(new o(this.$foldData,n))),this.$useWrapMode?this.$updateWrapData(p.start.row,p.start.row):this.$updateRowLengthCache(p.start.row,p.start.row),this.$modified=!0,this._signal(\"changeFold\",{data:n,action:\"add\"}),n},this.addFolds=function(e){e.forEach((function(e){this.addFold(e)}),this)},this.removeFold=function(e){var t=e.foldLine,n=t.start.row,r=t.end.row,o=this.$foldData,i=t.folds;if(1==i.length)o.splice(o.indexOf(t),1);else if(t.range.isEnd(e.end.row,e.end.column))i.pop(),t.end.row=i[i.length-1].end.row,t.end.column=i[i.length-1].end.column;else if(t.range.isStart(e.start.row,e.start.column))i.shift(),t.start.row=i[0].start.row,t.start.column=i[0].start.column;else if(e.sameRow)i.splice(i.indexOf(e),1);else{var s=t.split(e.start.row,e.start.column);(i=s.folds).shift(),s.start.row=i[0].start.row,s.start.column=i[0].start.column}this.$updating||(this.$useWrapMode?this.$updateWrapData(n,r):this.$updateRowLengthCache(n,r)),this.$modified=!0,this._signal(\"changeFold\",{data:e,action:\"remove\"})},this.removeFolds=function(e){for(var t=[],n=0;n<e.length;n++)t.push(e[n]);t.forEach((function(e){this.removeFold(e)}),this),this.$modified=!0},this.expandFold=function(e){this.removeFold(e),e.subFolds.forEach((function(t){e.restoreRange(t),this.addFold(t)}),this),e.collapseChildren>0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach((function(e){this.expandFold(e)}),this)},this.unfold=function(e,t){var n,o;if(null==e?(n=new r(0,0,this.getLength(),0),t=!0):n=\"number\"==typeof e?new r(e,0,e,this.getLine(e).length):\"row\"in e?r.fromPoints(e,e):e,o=this.getFoldsInRangeList(n),t)this.removeFolds(o);else for(var i=o;i.length;)this.expandFolds(i),i=this.getFoldsInRangeList(n);if(o.length)return o},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,o){null==r&&(r=e.start.row),null==o&&(o=0),null==t&&(t=e.end.row),null==n&&(n=this.getLine(t).length);var i=this.doc,s=\"\";return e.walk((function(e,t,n,a){if(!(t<r)){if(t==r){if(n<o)return;a=Math.max(o,a)}s+=null!=e?e:i.getLine(t).substring(a,n)}}),t,n),s},this.getDisplayLine=function(e,t,n,r){var o,i=this.getFoldLine(e);return i?this.getFoldDisplayLine(i,e,t,n,r):(o=this.doc.getLine(e)).substring(r||0,t||o.length)},this.$cloneFoldData=function(){var e=[];return e=this.$foldData.map((function(t){var n=t.folds.map((function(e){return e.clone()}));return new o(e,n)}))},this.toggleFold=function(e){var t,n,r=this.selection.getRange();if(r.isEmpty()){var o=r.start;if(t=this.getFoldAt(o.row,o.column))return void this.expandFold(t);(n=this.findMatchingBracket(o))?1==r.comparePoint(n)?r.end=n:(r.start=n,r.start.column++,r.end.column--):(n=this.findMatchingBracket({row:o.row,column:o.column+1}))?(1==r.comparePoint(n)?r.end=n:r.start=n,r.start.column++):r=this.getCommentFoldRange(o.row,o.column)||r}else{var i=this.getFoldsInRange(r);if(e&&i.length)return void this.expandFolds(i);1==i.length&&(t=i[0])}if(t||(t=this.getFoldAt(r.start.row,r.start.column)),t&&t.range.toString()==r.toString())this.expandFold(t);else{var s=\"...\";if(!r.isMultiLine()){if((s=this.getTextRange(r)).length<4)return;s=s.trim().substring(0,2)+\"..\"}this.addFold(s,r)}},this.getCommentFoldRange=function(e,t,n){var o=new s(this,e,t),i=o.getCurrentToken(),a=i.type;if(i&&/^comment|string/.test(a)){\"comment\"==(a=a.match(/comment|string/)[0])&&(a+=\"|doc-start\");var l=new RegExp(a),c=new r;if(1!=n){do{i=o.stepBackward()}while(i&&l.test(i.type));o.stepForward()}if(c.start.row=o.getCurrentTokenRow(),c.start.column=o.getCurrentTokenColumn()+2,o=new s(this,e,t),-1!=n){var u=-1;do{if(i=o.stepForward(),-1==u){var d=this.getState(o.$row);l.test(d)||(u=o.$row)}else if(o.$row>u)break}while(i&&l.test(i.type));i=o.stepBackward()}else i=o.getCurrentToken();return c.end.row=o.getCurrentTokenRow(),c.end.column=o.getCurrentTokenColumn()+i.value.length-2,c}},this.foldAll=function(e,t,n){null==n&&(n=1e5);var r=this.foldWidgets;if(r){t=t||this.getLength();for(var o=e=e||0;o<t;o++)if(null==r[o]&&(r[o]=this.getFoldWidget(o)),\"start\"==r[o]){var i=this.getFoldWidgetRange(o);if(i&&i.isMultiLine()&&i.end.row<=t&&i.start.row>=e){o=i.end.row;try{var s=this.addFold(\"...\",i);s&&(s.collapseChildren=n)}catch(e){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle=\"markbegin\",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error(\"invalid fold style: \"+e+\"[\"+Object.keys(this.$foldStyles).join(\", \")+\"]\");if(this.$foldStyle!=e){this.$foldStyle=e,\"manual\"==e&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off(\"change\",this.$updateFoldWidgets),this.off(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets),this._signal(\"changeAnnotation\"),e&&\"manual\"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on(\"change\",this.$updateFoldWidgets),this.on(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};for(var r,o=e-1;o>=0;){var i=n[o];if(null==i&&(i=n[o]=this.getFoldWidget(o)),\"start\"==i){var s=this.getFoldWidgetRange(o);if(r||(r=s),s&&s.end.row>=e)break}o--}return{range:-1!==o&&s,firstRange:r}},this.onFoldWidgetClick=function(e,t){var n={children:(t=t.domEvent).shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey};if(!this.$toggleFoldWidget(e,n)){var r=t.target||t.srcElement;r&&/ace_fold-widget/.test(r.className)&&(r.className+=\" ace_invalid\")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var n=this.getFoldWidget(e),r=this.getLine(e),o=\"end\"===n?-1:1,i=this.getFoldAt(e,-1===o?0:r.length,o);if(i)return t.children||t.all?this.removeFold(i):this.expandFold(i),i;var s=this.getFoldWidgetRange(e,!0);if(s&&!s.isMultiLine()&&(i=this.getFoldAt(s.start.row,s.start.column,1))&&s.isEqual(i.range))return this.removeFold(i),i;if(t.siblings){var a=this.getParentFoldRangeData(e);if(a.range)var l=a.range.start.row+1,c=a.range.end.row;this.foldAll(l,c,t.all?1e4:0)}else t.children?(c=s?s.end.row:this.getLength(),this.foldAll(e+1,c,t.all?1e4:0)):s&&(t.all&&(s.collapseChildren=1e4),this.addFold(\"...\",s));return s}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(!n){var r=this.getParentFoldRangeData(t,!0);if(n=r.range||r.firstRange){t=n.start.row;var o=this.getFoldAt(t,this.getLine(t).length,1);o?this.removeFold(o):this.addFold(\"...\",n)}}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.foldWidgets[t]=null;else if(\"remove\"==e.action)this.foldWidgets.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,r)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}})),ace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../token_iterator\").TokenIterator,o=e(\"../range\").Range;t.BracketMatch=function(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(\"\"==n)return null;var r=n.match(/([\\(\\[\\{])|([\\)\\]\\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t,n=this.getLine(e.row),r=!0,i=n.charAt(e.column-1),s=i&&i.match(/([\\(\\[\\{])|([\\)\\]\\}])/);if(s||(i=n.charAt(e.column),e={row:e.row,column:e.column+1},s=i&&i.match(/([\\(\\[\\{])|([\\)\\]\\}])/),r=!1),!s)return null;if(s[1]){if(!(a=this.$findClosingBracket(s[1],e)))return null;t=o.fromPoints(e,a),r||(t.end.column++,t.start.column--),t.cursor=t.end}else{var a;if(!(a=this.$findOpeningBracket(s[2],e)))return null;t=o.fromPoints(a,e),r||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={\")\":\"(\",\"(\":\")\",\"]\":\"[\",\"[\":\"]\",\"{\":\"}\",\"}\":\"{\"},this.$findOpeningBracket=function(e,t,n){var o=this.$brackets[e],i=1,s=new r(this,t.row,t.column),a=s.getCurrentToken();if(a||(a=s.stepForward()),a){n||(n=new RegExp(\"(\\\\.?\"+a.type.replace(\".\",\"\\\\.\").replace(\"rparen\",\".paren\").replace(/\\b(?:end)\\b/,\"(?:start|begin|end)\")+\")+\"));for(var l=t.column-s.getCurrentTokenColumn()-2,c=a.value;;){for(;l>=0;){var u=c.charAt(l);if(u==o){if(0==(i-=1))return{row:s.getCurrentTokenRow(),column:l+s.getCurrentTokenColumn()}}else u==e&&(i+=1);l-=1}do{a=s.stepBackward()}while(a&&!n.test(a.type));if(null==a)break;l=(c=a.value).length-1}return null}},this.$findClosingBracket=function(e,t,n){var o=this.$brackets[e],i=1,s=new r(this,t.row,t.column),a=s.getCurrentToken();if(a||(a=s.stepForward()),a){n||(n=new RegExp(\"(\\\\.?\"+a.type.replace(\".\",\"\\\\.\").replace(\"lparen\",\".paren\").replace(/\\b(?:start|begin)\\b/,\"(?:start|begin|end)\")+\")+\"));for(var l=t.column-s.getCurrentTokenColumn();;){for(var c=a.value,u=c.length;l<u;){var d=c.charAt(l);if(d==o){if(0==(i-=1))return{row:s.getCurrentTokenRow(),column:l+s.getCurrentTokenColumn()}}else d==e&&(i+=1);l+=1}do{a=s.stepForward()}while(a&&!n.test(a.type));if(null==a)break;l=0}return null}}}})),ace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),o=e(\"./lib/lang\"),i=e(\"./bidihandler\").BidiHandler,s=e(\"./config\"),a=e(\"./lib/event_emitter\").EventEmitter,l=e(\"./selection\").Selection,c=e(\"./mode/text\").Mode,u=e(\"./range\").Range,d=e(\"./document\").Document,h=e(\"./background_tokenizer\").BackgroundTokenizer,m=e(\"./search_highlight\").SearchHighlight,f=function(e,t){this.$breakpoints=[],this.$decorations=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$undoSelect=!0,this.$foldData=[],this.id=\"session\"+ ++f.$uid,this.$foldData.toString=function(){return this.join(\"\\n\")},this.on(\"changeFold\",this.onChangeFold.bind(this)),this.$onChange=this.onChange.bind(this),\"object\"==typeof e&&e.getLine||(e=new d(e)),this.$bidiHandler=new i(this),this.setDocument(e),this.selection=new l(this),s.resetOptions(this),this.setMode(t),s._signal(\"session\",this)};f.$uid=0,function(){r.implement(this,a),this.setDocument=function(e){this.doc&&this.doc.removeListener(\"change\",this.$onChange),this.doc=e,e.on(\"change\",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e)return this.$docRowCache=[],void(this.$screenRowCache=[]);var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){for(var n=0,r=e.length-1;n<=r;){var o=n+r>>1,i=e[o];if(t>i)n=o+1;else{if(!(t<i))return o;r=o-1}}return n-1},this.resetCaches=function(){this.$modified=!0,this.$wrapData=[],this.$rowLengthCache=[],this.$resetRowCache(0),this.bgTokenizer&&this.bgTokenizer.start(0)},this.onChangeFold=function(e){var t=e.data;this.$resetRowCache(t.start.row)},this.onChange=function(e){this.$modified=!0,this.$bidiHandler.onChange(e),this.$resetRowCache(e.start.row);var t=this.$updateInternalDataOnChange(e);this.$fromUndo||!this.$undoManager||e.ignore||(this.$deltasDoc.push(e),t&&0!=t.length&&this.$deltasFold.push({action:\"removeFolds\",folds:t}),this.$informUndoManager.schedule()),this.bgTokenizer&&this.bgTokenizer.$updateOnChange(e),this._signal(\"change\",e)},this.setValue=function(e){this.doc.setValue(e),this.selection.moveTo(0,0),this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.setUndoManager(this.$undoManager),this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(e){return this.bgTokenizer.getState(e)},this.getTokens=function(e){return this.bgTokenizer.getTokens(e)},this.getTokenAt=function(e,t){var n,r=this.bgTokenizer.getTokens(e),o=0;if(null==t){var i=r.length-1;o=this.getLine(e).length}else for(i=0;i<r.length&&!((o+=r[i].value.length)>=t);i++);return(n=r[i])?(n.index=i,n.start=o-n.value.length,n):null},this.setUndoManager=function(e){if(this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel(),e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:\"fold\",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:\"doc\",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:\"aceupdate\",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=o.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?o.stringRepeat(\" \",this.getTabSize()):\"\\t\"},this.setUseSoftTabs=function(e){this.setOption(\"useSoftTabs\",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption(\"tabSize\",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize==0},this.setNavigateWithinSoftTabs=function(e){this.setOption(\"navigateWithinSoftTabs\",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption(\"overwrite\",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=\"\"),this.$decorations[e]+=\" \"+t,this._signal(\"changeBreakpoint\",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||\"\").replace(\" \"+t,\"\"),this._signal(\"changeBreakpoint\",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t<e.length;t++)this.$breakpoints[e[t]]=\"ace_breakpoint\";this._signal(\"changeBreakpoint\",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._signal(\"changeBreakpoint\",{})},this.setBreakpoint=function(e,t){void 0===t&&(t=\"ace_breakpoint\"),t?this.$breakpoints[e]=t:delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.clearBreakpoint=function(e){delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.addMarker=function(e,t,n,r){var o=this.$markerId++,i={range:e,type:n||\"line\",renderer:\"function\"==typeof n?n:null,clazz:t,inFront:!!r,id:o};return r?(this.$frontMarkers[o]=i,this._signal(\"changeFrontMarker\")):(this.$backMarkers[o]=i,this._signal(\"changeBackMarker\")),o},this.addDynamicMarker=function(e,t){if(e.update){var n=this.$markerId++;return e.id=n,e.inFront=!!t,t?(this.$frontMarkers[n]=e,this._signal(\"changeFrontMarker\")):(this.$backMarkers[n]=e,this._signal(\"changeBackMarker\")),e}},this.removeMarker=function(e){var t=this.$frontMarkers[e]||this.$backMarkers[e];if(t){var n=t.inFront?this.$frontMarkers:this.$backMarkers;t&&(delete n[e],this._signal(t.inFront?\"changeFrontMarker\":\"changeBackMarker\"))}},this.getMarkers=function(e){return e?this.$frontMarkers:this.$backMarkers},this.highlight=function(e){if(!this.$searchHighlight){var t=new m(null,\"ace_selected-word\",\"text\");this.$searchHighlight=this.addDynamicMarker(t)}this.$searchHighlight.setRegexp(e)},this.highlightLines=function(e,t,n,r){\"number\"!=typeof t&&(n=t,t=e),n||(n=\"ace_step\");var o=new u(e,0,t,1/0);return o.id=this.addMarker(o,n,\"fullLine\",r),o},this.setAnnotations=function(e){this.$annotations=e,this._signal(\"changeAnnotation\",{})},this.getAnnotations=function(){return this.$annotations||[]},this.clearAnnotations=function(){this.setAnnotations([])},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r?\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\"},this.getWordRange=function(e,t){var n=this.getLine(e),r=!1;if(t>0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe)),r)var o=this.tokenRe;else if(/^\\s+$/.test(n.slice(t-1,t+1)))o=/\\s/;else o=this.nonTokenRe;var i=t;if(i>0){do{i--}while(i>=0&&n.charAt(i).match(o));i++}for(var s=t;s<n.length&&n.charAt(s).match(o);)s++;return new u(e,i,e,s)},this.getAWordRange=function(e,t){for(var n=this.getWordRange(e,t),r=this.getLine(n.end.row);r.charAt(n.end.column).match(/[ \\t]/);)n.end.column+=1;return n},this.setNewLineMode=function(e){this.doc.setNewLineMode(e)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.setUseWorker=function(e){this.setOption(\"useWorker\",e)},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(e){var t=e.data;this.bgTokenizer.start(t.first),this._signal(\"tokenizerUpdate\",e)},this.$modes={},this.$mode=null,this.$modeId=null,this.setMode=function(e,t){if(e&&\"object\"==typeof e){if(e.getTokenizer)return this.$onChangeMode(e);var n=e,r=n.path}else r=e||\"ace/mode/text\";if(this.$modes[\"ace/mode/text\"]||(this.$modes[\"ace/mode/text\"]=new c),this.$modes[r]&&!n)return this.$onChangeMode(this.$modes[r]),void(t&&t());this.$modeId=r,s.loadModule([\"mode\",r],function(e){if(this.$modeId!==r)return t&&t();this.$modes[r]&&!n?this.$onChangeMode(this.$modes[r]):e&&e.Mode&&(e=new e.Mode(n),n||(this.$modes[r]=e,e.$id=r),this.$onChangeMode(e)),t&&t()}.bind(this)),this.$mode||this.$onChangeMode(this.$modes[\"ace/mode/text\"],!0)},this.$onChangeMode=function(e,t){if(t||(this.$modeId=e.$id),this.$mode!==e){this.$mode=e,this.$stopWorker(),this.$useWorker&&this.$startWorker();var n=e.getTokenizer();if(void 0!==n.addEventListener){var r=this.onReloadTokenizer.bind(this);n.addEventListener(\"update\",r)}if(this.bgTokenizer)this.bgTokenizer.setTokenizer(n);else{this.bgTokenizer=new h(n);var o=this;this.bgTokenizer.addEventListener(\"update\",(function(e){o._signal(\"tokenizerUpdate\",e)}))}this.bgTokenizer.setDocument(this.getDocument()),this.tokenRe=e.tokenRe,this.nonTokenRe=e.nonTokenRe,t||(e.attachToSession&&e.attachToSession(this),this.$options.wrapMethod.set.call(this,this.$wrapMethod),this.$setFolding(e.foldingRules),this.bgTokenizer.start(0),this._emit(\"changeMode\"))}},this.$stopWorker=function(){this.$worker&&(this.$worker.terminate(),this.$worker=null)},this.$startWorker=function(){try{this.$worker=this.$mode.createWorker(this)}catch(e){s.warn(\"Could not load worker\",e),this.$worker=null}},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(e){this.$scrollTop===e||isNaN(e)||(this.$scrollTop=e,this._signal(\"changeScrollTop\",e))},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(e){this.$scrollLeft===e||isNaN(e)||(this.$scrollLeft=e,this._signal(\"changeScrollLeft\",e))},this.getScrollLeft=function(){return this.$scrollLeft},this.getScreenWidth=function(){return this.$computeWidth(),this.lineWidgets?Math.max(this.getLineWidgetMaxWidth(),this.screenWidth):this.screenWidth},this.getLineWidgetMaxWidth=function(){if(null!=this.lineWidgetsWidth)return this.lineWidgetsWidth;var e=0;return this.lineWidgets.forEach((function(t){t&&t.screenWidth>e&&(e=t.screenWidth)})),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,o=0,i=this.$foldData[o],s=i?i.start.row:1/0,a=t.length,l=0;l<a;l++){if(l>s){if((l=i.end.row+1)>=a)break;s=(i=this.$foldData[o++])?i.start.row:1/0}null==n[l]&&(n[l]=this.$getStringScreenWidth(t[l])[0]),n[l]>r&&(r=n[l])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=null,r=e.length-1;-1!=r;r--){var o=e[r];\"doc\"==o.group?(this.doc.revertDeltas(o.deltas),n=this.$getUndoSelection(o.deltas,!0,n)):o.deltas.forEach((function(e){this.addFolds(e.folds)}),this)}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=null,r=0;r<e.length;r++){var o=e[r];\"doc\"==o.group&&(this.doc.applyDeltas(o.deltas),n=this.$getUndoSelection(o.deltas,!1,n))}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n}},this.setUndoSelect=function(e){this.$undoSelect=e},this.$getUndoSelection=function(e,t,n){function r(e){return t?\"insert\"!==e.action:\"insert\"===e.action}var o,i,s=e[0];r(s)?o=u.fromPoints(s.start,s.end):o=u.fromPoints(s.start,s.start);for(var a=1;a<e.length;a++)r(s=e[a])?(i=s.start,-1==o.compare(i.row,i.column)&&o.setStart(i),i=s.end,1==o.compare(i.row,i.column)&&o.setEnd(i),!0):(i=s.start,-1==o.compare(i.row,i.column)&&(o=u.fromPoints(s.start,s.start)),!1);if(null!=n){0===u.comparePoints(n.start,o.start)&&(n.start.column+=o.end.column-o.start.column,n.end.column+=o.end.column-o.start.column);var l=n.compareRange(o);1==l?o.setStart(n.start):-1==l&&o.setEnd(n.end)}return o},this.replace=function(e,t){return this.doc.replace(e,t)},this.moveText=function(e,t,n){var r=this.getTextRange(e),o=this.getFoldsInRange(e),i=u.fromPoints(t,t);if(!n){this.remove(e);var s=e.start.row-e.end.row;(c=s?-e.end.column:e.start.column-e.end.column)&&(i.start.row==e.end.row&&i.start.column>e.end.column&&(i.start.column+=c),i.end.row==e.end.row&&i.end.column>e.end.column&&(i.end.column+=c)),s&&i.start.row>=e.end.row&&(i.start.row+=s,i.end.row+=s)}if(i.end=this.insert(i.start,r),o.length){var a=e.start,l=i.start,c=(s=l.row-a.row,l.column-a.column);this.addFolds(o.map((function(e){return(e=e.clone()).start.row==a.row&&(e.start.column+=c),e.end.row==a.row&&(e.end.column+=c),e.start.row+=s,e.end.row+=s,e})))}return i},this.indentRows=function(e,t,n){n=n.replace(/\\t/g,this.getTabString());for(var r=e;r<=t;r++)this.doc.insertInLine({row:r,column:0},n)},this.outdentRows=function(e){for(var t=e.collapseRows(),n=new u(0,0,0,0),r=this.getTabSize(),o=t.start.row;o<=t.end.row;++o){var i=this.getLine(o);n.start.row=o,n.end.row=o;for(var s=0;s<r&&\" \"==i.charAt(s);++s);s<r&&\"\\t\"==i.charAt(s)?(n.start.column=s,n.end.column=s+1):(n.start.column=0,n.end.column=s),this.remove(n)}},this.$moveLines=function(e,t,n){if(e=this.getRowFoldStart(e),t=this.getRowFoldEnd(t),n<0){if((o=this.getRowFoldStart(e+n))<0)return 0;var r=o-e}else if(n>0){var o;if((o=this.getRowFoldEnd(t+n))>this.doc.getLength()-1)return 0;r=o-t}else{e=this.$clipRowToDocument(e);r=(t=this.$clipRowToDocument(t))-e+1}var i=new u(e,0,t,Number.MAX_VALUE),s=this.getFoldsInRange(i).map((function(e){return(e=e.clone()).start.row+=r,e.end.row+=r,e})),a=0==n?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+r,a),s.length&&this.addFolds(s),r},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal(\"changeWrapMode\")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal(\"changeWrapMode\"))},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var r=this.$constrainWrapLimit(e,n.min,n.max);return r!=this.$wrapLimit&&r>1&&(this.$wrapLimit=r,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal(\"changeWrapLimit\")),!0)},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,r=e.start,o=e.end,i=r.row,s=o.row,a=s-i,l=null;if(this.$updating=!0,0!=a)if(\"remove\"===n){this[t?\"$wrapData\":\"$rowLengthCache\"].splice(i,a);var c=this.$foldData;l=this.getFoldsInRange(e),this.removeFolds(l);var u=0;if(p=this.getFoldLine(o.row)){p.addRemoveChars(o.row,o.column,r.column-o.column),p.shiftRow(-a);var d=this.getFoldLine(i);d&&d!==p&&(d.merge(p),p=d),u=c.indexOf(p)+1}for(;u<c.length;u++){(p=c[u]).start.row>=o.row&&p.shiftRow(-a)}s=i}else{var h=Array(a);h.unshift(i,0);var m=t?this.$wrapData:this.$rowLengthCache;m.splice.apply(m,h);c=this.$foldData,u=0;if(p=this.getFoldLine(i)){var f=p.range.compareInside(r.row,r.column);0==f?(p=p.split(r.row,r.column))&&(p.shiftRow(a),p.addRemoveChars(s,0,o.column-r.column)):-1==f&&(p.addRemoveChars(i,0,o.column-r.column),p.shiftRow(a)),u=c.indexOf(p)+1}for(;u<c.length;u++){var p;(p=c[u]).start.row>=i&&p.shiftRow(a)}}else a=Math.abs(e.start.column-e.end.column),\"remove\"===n&&(l=this.getFoldsInRange(e),this.removeFolds(l),a=-a),(p=this.getFoldLine(i))&&p.addRemoveChars(i,r.column,a);return t&&this.$wrapData.length!=this.doc.getLength()&&console.error(\"doc.getLength() and $wrapData.length have to be the same!\"),this.$updating=!1,t?this.$updateWrapData(i,s):this.$updateRowLengthCache(i,s),l},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(n,r){var o,i,s=this.doc.getAllLines(),a=this.getTabSize(),l=this.$wrapData,c=this.$wrapLimit,u=n;for(r=Math.min(r,s.length-1);u<=r;)(i=this.getFoldLine(u,i))?(o=[],i.walk(function(n,r,i,a){var l;if(null!=n){(l=this.$getDisplayTokens(n,o.length))[0]=e;for(var c=1;c<l.length;c++)l[c]=t}else l=this.$getDisplayTokens(s[r].substring(a,i),o.length);o=o.concat(l)}.bind(this),i.end.row,s[i.end.row].length+1),l[i.start.row]=this.$computeWrapSplits(o,c,a),u=i.end.row+1):(o=this.$getDisplayTokens(s[u]),l[u]=this.$computeWrapSplits(o,c,a),u++)};var e=3,t=4;function n(e){return!(e<4352)&&(e>=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510)}this.$computeWrapSplits=function(n,r,o){if(0==n.length)return[];var i=[],s=n.length,a=0,l=0,c=this.$wrapAsCode,u=this.$indentedSoftWrap,d=r<=Math.max(2*o,8)||!1===u?0:Math.floor(r/2);function h(e){var t=n.slice(a,e),r=t.length;t.join(\"\").replace(/12/g,(function(){r-=1})).replace(/2/g,(function(){r-=1})),i.length||(m=function(){var e=0;if(0===d)return e;if(u)for(var t=0;t<n.length;t++){var r=n[t];if(10==r)e+=1;else{if(11!=r){if(12==r)continue;break}e+=o}}return c&&!1!==u&&(e+=o),Math.min(e,d)}(),i.indent=m),l+=r,i.push(l),a=e}for(var m=0;s-a>r-m;){var f=a+r-m;if(n[f-1]>=10&&n[f]>=10)h(f);else if(n[f]!=e&&n[f]!=t){for(var p=Math.max(f-(r-(r>>2)),a-1);f>p&&n[f]<e;)f--;if(c){for(;f>p&&n[f]<e;)f--;for(;f>p&&9==n[f];)f--}else for(;f>p&&n[f]<10;)f--;f>p?h(++f):(2==n[f=a+r]&&f--,h(f-m))}else{for(;f!=a-1&&n[f]!=e;f--);if(f>a){h(f);continue}for(f=a+r;f<n.length&&n[f]==t;f++);if(f==n.length)break;h(f)}}return i},this.$getDisplayTokens=function(e,t){var r,o=[];t=t||0;for(var i=0;i<e.length;i++){var s=e.charCodeAt(i);if(9==s){r=this.getScreenTabSize(o.length+t),o.push(11);for(var a=1;a<r;a++)o.push(12)}else 32==s?o.push(10):s>39&&s<48||s>57&&s<64?o.push(9):s>=4352&&n(s)?o.push(1,2):o.push(1)}return o},this.$getStringScreenWidth=function(e,t,r){if(0==t)return[0,0];var o,i;for(null==t&&(t=1/0),r=r||0,i=0;i<e.length&&(9==(o=e.charCodeAt(i))?r+=this.getScreenTabSize(r):o>=4352&&n(o)?r+=2:r+=1,!(r>t));i++);return[r,i]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]<t.column?n.indent:0}return 0},this.getScreenLastRowColumn=function(e){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return this.documentToScreenColumn(t.row,t.column)},this.getDocumentLastRowColumn=function(e,t){var n=this.documentToScreenRow(e,t);return this.getScreenLastRowColumn(n)},this.getDocumentLastRowColumnPosition=function(e,t){var n=this.documentToScreenRow(e,t);return this.screenToDocumentPosition(n,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){return this.$useWrapMode?this.$wrapData[e]:void 0},this.getScreenTabSize=function(e){return this.$tabSize-e%this.$tabSize},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t,n){if(e<0)return{row:0,column:0};var r,o,i=0,s=0,a=0,l=0,c=this.$screenRowCache,u=this.$getRowCacheIndex(c,e),d=c.length;if(d&&u>=0){a=c[u],i=this.$docRowCache[u];var h=e>c[d-1]}else h=!d;for(var m=this.getLength()-1,f=this.getNextFoldLine(i),p=f?f.start.row:1/0;a<=e&&!(a+(l=this.getRowLength(i))>e||i>=m);)a+=l,++i>p&&(i=f.end.row+1,p=(f=this.getNextFoldLine(i,f))?f.start.row:1/0),h&&(this.$docRowCache.push(i),this.$screenRowCache.push(a));if(f&&f.start.row<=i)r=this.getFoldDisplayLine(f),i=f.start.row;else{if(a+l<=e||i>m)return{row:m,column:this.getLine(m).length};r=this.getLine(i),f=null}var g=0,v=Math.floor(e-a);if(this.$useWrapMode){var y=this.$wrapData[i];y&&(o=y[v],v>0&&y.length&&(g=y.indent,s=y[v-1]||y[y.length-1],r=r.substring(s)))}return void 0!==n&&this.$bidiHandler.isBidiRow(a+v,i,v)&&(t=this.$bidiHandler.offsetToCol(n)),s+=this.$getStringScreenWidth(r,t-g)[1],this.$useWrapMode&&s>=o&&(s=o-1),f?f.idxToPosition(s):{row:i,column:s}},this.documentToScreenPosition=function(e,t){if(void 0===t)var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r,o=0,i=null;(r=this.getFoldAt(e,t,1))&&(e=r.start.row,t=r.start.column);var s,a=0,l=this.$docRowCache,c=this.$getRowCacheIndex(l,e),u=l.length;if(u&&c>=0){a=l[c],o=this.$screenRowCache[c];var d=e>l[u-1]}else d=!u;for(var h=this.getNextFoldLine(a),m=h?h.start.row:1/0;a<e;){if(a>=m){if((s=h.end.row+1)>e)break;m=(h=this.getNextFoldLine(s,h))?h.start.row:1/0}else s=a+1;o+=this.getRowLength(a),a=s,d&&(this.$docRowCache.push(a),this.$screenRowCache.push(o))}var f=\"\";h&&a>=m?(f=this.getFoldDisplayLine(h,e,t),i=h.start.row):(f=this.getLine(e).substring(0,t),i=e);var p=0;if(this.$useWrapMode){var g=this.$wrapData[i];if(g){for(var v=0;f.length>=g[v];)o++,v++;f=f.substring(g[v-1]||0,f.length),p=v>0?g.indent:0}}return{row:o,column:p+this.$getStringScreenWidth(f)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode)for(var n=this.$wrapData.length,r=0,o=(a=0,(t=this.$foldData[a++])?t.start.row:1/0);r<n;){var i=this.$wrapData[r];e+=i?i.length+1:1,++r>o&&(r=t.end.row+1,o=(t=this.$foldData[a++])?t.start.row:1/0)}else{e=this.getLength();for(var s=this.$foldData,a=0;a<s.length;a++)e-=(t=s[a]).end.row-t.start.row}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){this.$enableVarChar&&(this.$getStringScreenWidth=function(t,n,r){if(0===n)return[0,0];var o,i;for(n||(n=1/0),r=r||0,i=0;i<t.length&&!((r+=\"\\t\"===(o=t.charAt(i))?this.getScreenTabSize(r):e.getCharacterWidth(o))>n);i++);return[r,i]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=n}.call(f.prototype),e(\"./edit_session/folding\").Folding.call(f.prototype),e(\"./edit_session/bracket_match\").BracketMatch.call(f.prototype),s.defineOptions(f.prototype,\"session\",{wrap:{set:function(e){if(e&&\"off\"!=e?\"free\"==e?e=!0:\"printMargin\"==e?e=-1:\"string\"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e)if(this.$wrap=e,e){var t=\"number\"==typeof e?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?\"printMargin\":this.getWrapLimitRange().min?this.$wrap:\"free\":\"off\"},handlesSet:!0},wrapMethod:{set:function(e){(e=\"auto\"==e?\"text\"!=this.$mode.type:\"text\"!=e)!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:\"auto\"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal(\"changeBreakpoint\")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){isNaN(e)||this.$tabSize===e||(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal(\"changeTabSize\"))},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},overwrite:{set:function(e){this._signal(\"changeOverwrite\")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=f})),ace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/lang\"),o=e(\"./lib/oop\"),i=e(\"./range\").Range,s=function(){this.$options={}};(function(){this.set=function(e){return o.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var r=null;return n.forEach((function(e,n,o,s){return r=new i(e,n,o,s),!(n==s&&t.start&&t.start.start&&0!=t.skipCurrent&&r.isEqual(t.start))||(r=null,!1)})),r},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,o=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),s=[],a=t.re;if(t.$isMultiLine){var l,c=a.length,u=o.length-c;e:for(var d=a.offset||0;d<=u;d++){for(var h=0;h<c;h++)if(-1==o[d+h].search(a[h]))continue e;var m=o[d],f=o[d+c-1],p=m.length-m.match(a[0])[0].length,g=f.match(a[c-1])[0].length;l&&l.end.row===d&&l.end.column>p||(s.push(l=new i(d,p,d+c-1,g)),c>2&&(d=d+c-2))}}else for(var v=0;v<o.length;v++){var y=r.getMatchOffsets(o[v],a);for(h=0;h<y.length;h++){var b=y[h];s.push(new i(v,b.offset,v,b.offset+b.length))}}if(n){var _=n.start.column,w=n.start.column;for(v=0,h=s.length-1;v<h&&s[v].start.column<_&&s[v].start.row==n.start.row;)v++;for(;v<h&&s[h].end.column>w&&s[h].end.row==n.end.row;)h--;for(s=s.slice(v,h+1),v=0,h=s.length;v<h;v++)s[v].start.row+=n.start.row,s[v].end.row+=n.start.row}return s},this.replace=function(e,t){var n=this.$options,r=this.$assembleRegExp(n);if(n.$isMultiLine)return t;if(r){var o=r.exec(e);if(!o||o[0].length!=e.length)return null;if(t=e.replace(r,t),n.preserveCase){t=t.split(\"\");for(var i=Math.min(e.length,e.length);i--;){var s=e[i];s&&s.toLowerCase()!=s?t[i]=t[i].toUpperCase():t[i]=t[i].toLowerCase()}t=t.join(\"\")}return t}},this.$assembleRegExp=function(e,t){if(e.needle instanceof RegExp)return e.re=e.needle;var n=e.needle;if(!e.needle)return e.re=!1;e.regExp||(n=r.escapeRegExp(n)),e.wholeWord&&(n=function(e,t){function n(e){return/\\w/.test(e)||t.regExp?\"\\\\b\":\"\"}return n(e[0])+e+n(e[e.length-1])}(n,e));var o=e.caseSensitive?\"gm\":\"gmi\";if(e.$isMultiLine=!t&&/[\\n\\r]/.test(n),e.$isMultiLine)return e.re=this.$assembleMultilineRegExp(n,o);try{var i=new RegExp(n,o)}catch(e){i=!1}return e.re=i},this.$assembleMultilineRegExp=function(e,t){for(var n=e.replace(/\\r\\n|\\r|\\n/g,\"$\\n^\").split(\"\\n\"),r=[],o=0;o<n.length;o++)try{r.push(new RegExp(n[o],t))}catch(e){return!1}return r},this.$matchIterator=function(e,t){var n=this.$assembleRegExp(t);if(!n)return!1;var r=1==t.backwards,o=0!=t.skipCurrent,i=t.range,s=t.start;s||(s=i?i[r?\"end\":\"start\"]:e.selection.getRange()),s.start&&(s=s[o!=r?\"end\":\"start\"]);var a=i?i.start.row:0,l=i?i.end.row:e.getLength()-1;if(r)var c=function(e){var n=s.row;if(!d(n,s.column,e)){for(n--;n>=a;n--)if(d(n,Number.MAX_VALUE,e))return;if(0!=t.wrap)for(n=l,a=s.row;n>=a;n--)if(d(n,Number.MAX_VALUE,e))return}};else c=function(e){var n=s.row;if(!d(n,s.column,e)){for(n+=1;n<=l;n++)if(d(n,0,e))return;if(0!=t.wrap)for(n=a,l=s.row;n<=l;n++)if(d(n,0,e))return}};if(t.$isMultiLine)var u=n.length,d=function(t,o,i){var s=r?t-u+1:t;if(!(s<0)){var a=e.getLine(s),l=a.search(n[0]);if(!(!r&&l<o||-1===l)){for(var c=1;c<u;c++)if(-1==(a=e.getLine(s+c)).search(n[c]))return;var d=a.match(n[u-1])[0].length;if(!(r&&d>o))return!!i(s,l,s+u-1,d)||void 0}}};else if(r)d=function(t,r,o){var i,s=e.getLine(t),a=[],l=0;for(n.lastIndex=0;i=n.exec(s);){var c=i[0].length;if(l=i.index,!c){if(l>=s.length)break;n.lastIndex=l+=1}if(i.index+c>r)break;a.push(i.index,c)}for(var u=a.length-1;u>=0;u-=2){var d=a[u-1];if(o(t,d,t,d+(c=a[u])))return!0}};else d=function(t,r,o){var i,s=e.getLine(t),a=r;for(n.lastIndex=r;i=n.exec(s);){var l=i[0].length;if(o(t,a=i.index,t,a+l))return!0;if(!l&&(n.lastIndex=a+=1,a>=s.length))return!1}};return{forEach:c}}}).call(s.prototype),t.Search=s})),ace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/keys\"),o=e(\"../lib/useragent\"),i=r.KEY_MODS;function s(e,t){this.platform=t||(o.isMac?\"mac\":\"win\"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function a(e,t){s.call(this,e,t),this.$singleCommand=!1}a.prototype=s.prototype,function(){function e(e){return\"object\"==typeof e&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(\"string\"==typeof e?e:e.name);e=this.commands[n],t||delete this.commands[n];var r=this.commandKeyBinding;for(var o in r){var i=r[o];if(i==e)delete r[o];else if(Array.isArray(i)){var s=i.indexOf(e);-1!=s&&(i.splice(s,1),1==i.length&&(r[o]=i[0]))}}},this.bindKey=function(e,t,n){if(\"object\"==typeof e&&e&&(null==n&&(n=e.position),e=e[this.platform]),e)return\"function\"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split(\"|\").forEach((function(e){var r=\"\";if(-1!=e.indexOf(\" \")){var o=e.split(/\\s+/);e=o.pop(),o.forEach((function(e){var t=this.parseKeys(e),n=i[t.hashId]+t.key;r+=(r?\" \":\"\")+n,this._addCommandToBinding(r,\"chainKeys\")}),this),r+=\" \"}var s=this.parseKeys(e),a=i[s.hashId]+s.key;this._addCommandToBinding(r+a,t,n)}),this)},this._addCommandToBinding=function(t,n,r){var o,i=this.commandKeyBinding;if(n)if(!i[t]||this.$singleCommand)i[t]=n;else{Array.isArray(i[t])?-1!=(o=i[t].indexOf(n))&&i[t].splice(o,1):i[t]=[i[t]],\"number\"!=typeof r&&(r=e(n));var s=i[t];for(o=0;o<s.length;o++){if(e(s[o])>r)break}s.splice(o,0,n)}else delete i[t]},this.addCommands=function(e){e&&Object.keys(e).forEach((function(t){var n=e[t];if(n){if(\"string\"==typeof n)return this.bindKey(n,t);\"function\"==typeof n&&(n={exec:n}),\"object\"==typeof n&&(n.name||(n.name=t),this.addCommand(n))}}),this)},this.removeCommands=function(e){Object.keys(e).forEach((function(t){this.removeCommand(e[t])}),this)},this.bindKeys=function(e){Object.keys(e).forEach((function(t){this.bindKey(t,e[t])}),this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter((function(e){return e})),n=t.pop(),o=r[n];if(r.FUNCTION_KEYS[o])n=r.FUNCTION_KEYS[o].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(1==t.length&&\"shift\"==t[0])return{key:n.toUpperCase(),hashId:-1}}for(var i=0,s=t.length;s--;){var a=r.KEY_MODS[t[s]];if(null==a)return\"undefined\"!=typeof console&&console.error(\"invalid modifier \"+t[s]+\" in \"+e),!1;i|=a}return{key:n,hashId:i}},this.findKeyCommand=function(e,t){var n=i[e]+t;return this.commandKeyBinding[n]},this.handleKeyboard=function(e,t,n,r){if(!(r<0)){var o=i[t]+n,s=this.commandKeyBinding[o];return e.$keyChain&&(e.$keyChain+=\" \"+o,s=this.commandKeyBinding[e.$keyChain]||s),!s||\"chainKeys\"!=s&&\"chainKeys\"!=s[s.length-1]?(e.$keyChain&&(t&&4!=t||1!=n.length?(-1==t||r>0)&&(e.$keyChain=\"\"):e.$keyChain=e.$keyChain.slice(0,-o.length-1)),{command:s}):(e.$keyChain=e.$keyChain||o,{command:\"null\"})}},this.getStatusText=function(e,t){return t.$keyChain||\"\"}}.call(s.prototype),t.HashHandler=s,t.MultiHashHandler=a})),ace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),o=e(\"../keyboard/hash_handler\").MultiHashHandler,i=e(\"../lib/event_emitter\").EventEmitter,s=function(e,t){o.call(this,t,e),this.byName=this.commands,this.setDefaultHandler(\"exec\",(function(e){return e.command.exec(e.editor,e.args||{})}))};r.inherits(s,o),function(){r.implement(this,i),this.exec=function(e,t,n){if(Array.isArray(e)){for(var r=e.length;r--;)if(this.exec(e[r],t,n))return!0;return!1}if(\"string\"==typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(e.isAvailable&&!e.isAvailable(t))return!1;var o={editor:t,command:e,args:n};return o.returnValue=this._emit(\"exec\",o),this._signal(\"afterExec\",o),!1!==o.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit(\"changeStatus\"),this.recording?(this.macro.pop(),this.removeEventListener(\"exec\",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on(\"exec\",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach((function(t){\"string\"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map((function(e){return\"string\"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e}))}}.call(s.prototype),t.CommandManager=s})),ace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/lang\"),o=e(\"../config\"),i=e(\"../range\").Range;function s(e,t){return{win:e,mac:t}}t.commands=[{name:\"showSettingsMenu\",bindKey:s(\"Ctrl-,\",\"Command-,\"),exec:function(e){o.loadModule(\"ace/ext/settings_menu\",(function(t){t.init(e),e.showSettingsMenu()}))},readOnly:!0},{name:\"goToNextError\",bindKey:s(\"Alt-E\",\"F4\"),exec:function(e){o.loadModule(\"ace/ext/error_marker\",(function(t){t.showErrorMarker(e,1)}))},scrollIntoView:\"animate\",readOnly:!0},{name:\"goToPreviousError\",bindKey:s(\"Alt-Shift-E\",\"Shift-F4\"),exec:function(e){o.loadModule(\"ace/ext/error_marker\",(function(t){t.showErrorMarker(e,-1)}))},scrollIntoView:\"animate\",readOnly:!0},{name:\"selectall\",bindKey:s(\"Ctrl-A\",\"Command-A\"),exec:function(e){e.selectAll()},readOnly:!0},{name:\"centerselection\",bindKey:s(null,\"Ctrl-L\"),exec:function(e){e.centerSelection()},readOnly:!0},{name:\"gotoline\",bindKey:s(\"Ctrl-L\",\"Command-L\"),exec:function(e){var t=parseInt(prompt(\"Enter line number:\"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:\"fold\",bindKey:s(\"Alt-L|Ctrl-F1\",\"Command-Alt-L|Command-F1\"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"unfold\",bindKey:s(\"Alt-Shift-L|Ctrl-Shift-F1\",\"Command-Alt-Shift-L|Command-Shift-F1\"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleFoldWidget\",bindKey:s(\"F2\",\"F2\"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleParentFoldWidget\",bindKey:s(\"Alt-F2\",\"Alt-F2\"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"foldall\",bindKey:s(null,\"Ctrl-Command-Option-0\"),exec:function(e){e.session.foldAll()},scrollIntoView:\"center\",readOnly:!0},{name:\"foldOther\",bindKey:s(\"Alt-0\",\"Command-Option-0\"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:\"center\",readOnly:!0},{name:\"unfoldall\",bindKey:s(\"Alt-Shift-0\",\"Command-Option-Shift-0\"),exec:function(e){e.session.unfold()},scrollIntoView:\"center\",readOnly:!0},{name:\"findnext\",bindKey:s(\"Ctrl-K\",\"Command-G\"),exec:function(e){e.findNext()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"findprevious\",bindKey:s(\"Ctrl-Shift-K\",\"Command-Shift-G\"),exec:function(e){e.findPrevious()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"selectOrFindNext\",bindKey:s(\"Alt-K\",\"Ctrl-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:\"selectOrFindPrevious\",bindKey:s(\"Alt-Shift-K\",\"Ctrl-Shift-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:\"find\",bindKey:s(\"Ctrl-F\",\"Command-F\"),exec:function(e){o.loadModule(\"ace/ext/searchbox\",(function(t){t.Search(e)}))},readOnly:!0},{name:\"overwrite\",bindKey:\"Insert\",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:\"selecttostart\",bindKey:s(\"Ctrl-Shift-Home\",\"Command-Shift-Home|Command-Shift-Up\"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotostart\",bindKey:s(\"Ctrl-Home\",\"Command-Home|Command-Up\"),exec:function(e){e.navigateFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectup\",bindKey:s(\"Shift-Up\",\"Shift-Up|Ctrl-Shift-P\"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golineup\",bindKey:s(\"Up\",\"Up|Ctrl-P\"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttoend\",bindKey:s(\"Ctrl-Shift-End\",\"Command-Shift-End|Command-Shift-Down\"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotoend\",bindKey:s(\"Ctrl-End\",\"Command-End|Command-Down\"),exec:function(e){e.navigateFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectdown\",bindKey:s(\"Shift-Down\",\"Shift-Down|Ctrl-Shift-N\"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golinedown\",bindKey:s(\"Down\",\"Down|Ctrl-N\"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordleft\",bindKey:s(\"Ctrl-Shift-Left\",\"Option-Shift-Left\"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordleft\",bindKey:s(\"Ctrl-Left\",\"Option-Left\"),exec:function(e){e.navigateWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolinestart\",bindKey:s(\"Alt-Shift-Left\",\"Command-Shift-Left|Ctrl-Shift-A\"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolinestart\",bindKey:s(\"Alt-Left|Home\",\"Command-Left|Home|Ctrl-A\"),exec:function(e){e.navigateLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectleft\",bindKey:s(\"Shift-Left\",\"Shift-Left|Ctrl-Shift-B\"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoleft\",bindKey:s(\"Left\",\"Left|Ctrl-B\"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordright\",bindKey:s(\"Ctrl-Shift-Right\",\"Option-Shift-Right\"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordright\",bindKey:s(\"Ctrl-Right\",\"Option-Right\"),exec:function(e){e.navigateWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolineend\",bindKey:s(\"Alt-Shift-Right\",\"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolineend\",bindKey:s(\"Alt-Right|End\",\"Command-Right|End|Ctrl-E\"),exec:function(e){e.navigateLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectright\",bindKey:s(\"Shift-Right\",\"Shift-Right\"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoright\",bindKey:s(\"Right\",\"Right|Ctrl-F\"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectpagedown\",bindKey:\"Shift-PageDown\",exec:function(e){e.selectPageDown()},readOnly:!0},{name:\"pagedown\",bindKey:s(null,\"Option-PageDown\"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:\"gotopagedown\",bindKey:s(\"PageDown\",\"PageDown|Ctrl-V\"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:\"selectpageup\",bindKey:\"Shift-PageUp\",exec:function(e){e.selectPageUp()},readOnly:!0},{name:\"pageup\",bindKey:s(null,\"Option-PageUp\"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:\"gotopageup\",bindKey:\"PageUp\",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:\"scrollup\",bindKey:s(\"Ctrl-Up\",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"scrolldown\",bindKey:s(\"Ctrl-Down\",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"selectlinestart\",bindKey:\"Shift-Home\",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectlineend\",bindKey:\"Shift-End\",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"togglerecording\",bindKey:s(\"Ctrl-Alt-E\",\"Command-Option-E\"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:\"replaymacro\",bindKey:s(\"Ctrl-Shift-E\",\"Command-Shift-E\"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:\"jumptomatching\",bindKey:s(\"Ctrl-P\",\"Ctrl-P\"),exec:function(e){e.jumpToMatching()},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"selecttomatching\",bindKey:s(\"Ctrl-Shift-P\",\"Ctrl-Shift-P\"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"expandToMatching\",bindKey:s(\"Ctrl-Shift-M\",\"Ctrl-Shift-M\"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"passKeysToBrowser\",bindKey:s(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:\"copy\",exec:function(e){},readOnly:!0},{name:\"cut\",exec:function(e){var t=e.getSelectionRange();e._emit(\"cut\",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"paste\",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:\"cursor\"},{name:\"removeline\",bindKey:s(\"Ctrl-D\",\"Command-D\"),exec:function(e){e.removeLines()},scrollIntoView:\"cursor\",multiSelectAction:\"forEachLine\"},{name:\"duplicateSelection\",bindKey:s(\"Ctrl-Shift-D\",\"Command-Shift-D\"),exec:function(e){e.duplicateSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"sortlines\",bindKey:s(\"Ctrl-Alt-S\",\"Command-Alt-S\"),exec:function(e){e.sortLines()},scrollIntoView:\"selection\",multiSelectAction:\"forEachLine\"},{name:\"togglecomment\",bindKey:s(\"Ctrl-/\",\"Command-/\"),exec:function(e){e.toggleCommentLines()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"toggleBlockComment\",bindKey:s(\"Ctrl-Shift-/\",\"Command-Shift-/\"),exec:function(e){e.toggleBlockComment()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"modifyNumberUp\",bindKey:s(\"Ctrl-Shift-Up\",\"Alt-Shift-Up\"),exec:function(e){e.modifyNumber(1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"modifyNumberDown\",bindKey:s(\"Ctrl-Shift-Down\",\"Alt-Shift-Down\"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"replace\",bindKey:s(\"Ctrl-H\",\"Command-Option-F\"),exec:function(e){o.loadModule(\"ace/ext/searchbox\",(function(t){t.Search(e,!0)}))}},{name:\"undo\",bindKey:s(\"Ctrl-Z\",\"Command-Z\"),exec:function(e){e.undo()}},{name:\"redo\",bindKey:s(\"Ctrl-Shift-Z|Ctrl-Y\",\"Command-Shift-Z|Command-Y\"),exec:function(e){e.redo()}},{name:\"copylinesup\",bindKey:s(\"Alt-Shift-Up\",\"Command-Option-Up\"),exec:function(e){e.copyLinesUp()},scrollIntoView:\"cursor\"},{name:\"movelinesup\",bindKey:s(\"Alt-Up\",\"Option-Up\"),exec:function(e){e.moveLinesUp()},scrollIntoView:\"cursor\"},{name:\"copylinesdown\",bindKey:s(\"Alt-Shift-Down\",\"Command-Option-Down\"),exec:function(e){e.copyLinesDown()},scrollIntoView:\"cursor\"},{name:\"movelinesdown\",bindKey:s(\"Alt-Down\",\"Option-Down\"),exec:function(e){e.moveLinesDown()},scrollIntoView:\"cursor\"},{name:\"del\",bindKey:s(\"Delete\",\"Delete|Ctrl-D|Shift-Delete\"),exec:function(e){e.remove(\"right\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"backspace\",bindKey:s(\"Shift-Backspace|Backspace\",\"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),exec:function(e){e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"cut_or_delete\",bindKey:s(\"Shift-Delete\",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestart\",bindKey:s(\"Alt-Backspace\",\"Command-Backspace\"),exec:function(e){e.removeToLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineend\",bindKey:s(\"Alt-Delete\",\"Ctrl-K|Command-Delete\"),exec:function(e){e.removeToLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestarthard\",bindKey:s(\"Ctrl-Shift-Backspace\",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineendhard\",bindKey:s(\"Ctrl-Shift-Delete\",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordleft\",bindKey:s(\"Ctrl-Backspace\",\"Alt-Backspace|Ctrl-Alt-Backspace\"),exec:function(e){e.removeWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordright\",bindKey:s(\"Ctrl-Delete\",\"Alt-Delete\"),exec:function(e){e.removeWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"outdent\",bindKey:s(\"Shift-Tab\",\"Shift-Tab\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"indent\",bindKey:s(\"Tab\",\"Tab\"),exec:function(e){e.indent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"blockoutdent\",bindKey:s(\"Ctrl-[\",\"Ctrl-[\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"blockindent\",bindKey:s(\"Ctrl-]\",\"Ctrl-]\"),exec:function(e){e.blockIndent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"insertstring\",exec:function(e,t){e.insert(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"inserttext\",exec:function(e,t){e.insert(r.stringRepeat(t.text||\"\",t.times||1))},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"splitline\",bindKey:s(null,\"Ctrl-O\"),exec:function(e){e.splitLine()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"transposeletters\",bindKey:s(\"Alt-Shift-X\",\"Ctrl-T\"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:\"cursor\"},{name:\"touppercase\",bindKey:s(\"Ctrl-U\",\"Ctrl-U\"),exec:function(e){e.toUpperCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"tolowercase\",bindKey:s(\"Ctrl-Shift-U\",\"Ctrl-Shift-U\"),exec:function(e){e.toLowerCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"expandtoline\",bindKey:s(\"Ctrl-Shift-L\",\"Command-Shift-L\"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"joinlines\",bindKey:s(null,null),exec:function(e){for(var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),o=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),s=e.session.doc.getLine(n.row).length,a=e.session.doc.getTextRange(e.selection.getRange()).replace(/\\n\\s*/,\" \").length,l=e.session.doc.getLine(n.row),c=n.row+1;c<=o.row+1;c++){var u=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(c)));0!==u.length&&(u=\" \"+u),l+=u}o.row+1<e.session.doc.getLength()-1&&(l+=e.session.doc.getNewLineCharacter()),e.clearSelection(),e.session.doc.replace(new i(n.row,0,o.row+2,0),l),a>0?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(s=e.session.doc.getLine(n.row).length>s?s+1:s,e.selection.moveCursorTo(n.row,s))},multiSelectAction:\"forEach\",readOnly:!0},{name:\"invertSelection\",bindKey:s(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,o=[];r.length<1&&(r=[e.selection.getRange()]);for(var s=0;s<r.length;s++)s==r.length-1&&(r[s].end.row===t&&r[s].end.column===n||o.push(new i(r[s].end.row,r[s].end.column,t,n))),0===s?0===r[s].start.row&&0===r[s].start.column||o.push(new i(0,0,r[s].start.row,r[s].start.column)):o.push(new i(r[s-1].end.row,r[s-1].end.column,r[s].start.row,r[s].start.column));e.exitMultiSelectMode(),e.clearSelection();for(s=0;s<o.length;s++)e.selection.addRange(o[s],!1)},readOnly:!0,scrollIntoView:\"none\"}]})),ace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"],(function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/oop\"),o=e(\"./lib/dom\"),i=e(\"./lib/lang\"),s=e(\"./lib/useragent\"),a=e(\"./keyboard/textinput\").TextInput,l=e(\"./mouse/mouse_handler\").MouseHandler,c=e(\"./mouse/fold_handler\").FoldHandler,u=e(\"./keyboard/keybinding\").KeyBinding,d=e(\"./edit_session\").EditSession,h=e(\"./search\").Search,m=e(\"./range\").Range,f=e(\"./lib/event_emitter\").EventEmitter,p=e(\"./commands/command_manager\").CommandManager,g=e(\"./commands/default_commands\").commands,v=e(\"./config\"),y=e(\"./token_iterator\").TokenIterator,b=function(e,t){var n=e.getContainerElement();this.container=n,this.renderer=e,this.id=\"editor\"+ ++b.$uid,this.commands=new p(s.isMac?\"mac\":\"win\",g),\"object\"==typeof document&&(this.textInput=new a(e.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),this.$mouseHandler=new l(this),new c(this)),this.keyBinding=new u(this),this.$blockScrolling=0,this.$search=(new h).set({wrap:!0}),this.$historyTracker=this.$historyTracker.bind(this),this.commands.on(\"exec\",this.$historyTracker),this.$initOperationListeners(),this._$emitInputEvent=i.delayedCall(function(){this._signal(\"input\",{}),this.session&&this.session.bgTokenizer&&this.session.bgTokenizer.scheduleStart()}.bind(this)),this.on(\"change\",(function(e,t){t._$emitInputEvent.schedule(31)})),this.setSession(t||new d(\"\")),v.resetOptions(this),v._signal(\"editor\",this)};b.$uid=0,function(){r.implement(this,f),this.$initOperationListeners=function(){this.selections=[],this.commands.on(\"exec\",this.startOperation.bind(this),!0),this.commands.on(\"afterExec\",this.endOperation.bind(this),!0),this.$opResetTimer=i.delayedCall(this.endOperation.bind(this)),this.on(\"change\",function(){this.curOp||this.startOperation(),this.curOp.docChanged=!0}.bind(this),!0),this.on(\"changeSelection\",function(){this.curOp||this.startOperation(),this.curOp.selectionChanged=!0}.bind(this),!0)},this.curOp=null,this.prevOp={},this.startOperation=function(e){if(this.curOp){if(!e||this.curOp.command)return;this.prevOp=this.curOp}e||(this.previousCommand=null,e={}),this.$opResetTimer.schedule(),this.curOp={command:e.command||{},args:e.args,scrollTop:this.renderer.scrollTop},this.curOp.command.name&&void 0!==this.curOp.command.scrollIntoView&&this.$blockScrolling++},this.endOperation=function(e){if(this.curOp){if(e&&!1===e.returnValue)return this.curOp=null;this._signal(\"beforeEndOperation\");var t=this.curOp.command;t.name&&this.$blockScrolling>0&&this.$blockScrolling--;var n=t&&t.scrollIntoView;if(n){switch(n){case\"center-animate\":n=\"animate\";case\"center\":this.renderer.scrollCursorIntoView(null,.5);break;case\"animate\":case\"cursor\":this.renderer.scrollCursorIntoView();break;case\"selectionPart\":var r=this.selection.getRange(),o=this.renderer.layerConfig;(r.start.row>=o.lastRow||r.end.row<=o.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}\"animate\"==n&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=[\"backspace\",\"del\",\"insertstring\"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,n=this.$mergeableCommands,r=t.command&&e.command.name==t.command.name;if(\"insertstring\"==e.command.name){var o=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\\s/.test(o)||/\\s/.test(t.args)),this.mergeNextCommand=!0}else r=r&&-1!==n.indexOf(e.command.name);\"always\"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(r=!1),r?this.session.mergeUndoDeltas=!0:-1!==n.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(e,t){if(e&&\"string\"==typeof e){this.$keybindingId=e;var n=this;v.loadModule([\"keybinding\",e],(function(r){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(r&&r.handler),t&&t()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session!=e){this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off(\"change\",this.$onDocumentChange),this.session.off(\"changeMode\",this.$onChangeMode),this.session.off(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.session.off(\"changeTabSize\",this.$onChangeTabSize),this.session.off(\"changeWrapLimit\",this.$onChangeWrapLimit),this.session.off(\"changeWrapMode\",this.$onChangeWrapMode),this.session.off(\"changeFold\",this.$onChangeFold),this.session.off(\"changeFrontMarker\",this.$onChangeFrontMarker),this.session.off(\"changeBackMarker\",this.$onChangeBackMarker),this.session.off(\"changeBreakpoint\",this.$onChangeBreakpoint),this.session.off(\"changeAnnotation\",this.$onChangeAnnotation),this.session.off(\"changeOverwrite\",this.$onCursorChange),this.session.off(\"changeScrollTop\",this.$onScrollTopChange),this.session.off(\"changeScrollLeft\",this.$onScrollLeftChange);var n=this.session.getSelection();n.off(\"changeCursor\",this.$onCursorChange),n.off(\"changeSelection\",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on(\"change\",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on(\"changeMode\",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on(\"changeTabSize\",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on(\"changeWrapLimit\",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on(\"changeWrapMode\",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on(\"changeFold\",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on(\"changeFrontMarker\",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on(\"changeBackMarker\",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on(\"changeBreakpoint\",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on(\"changeAnnotation\",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on(\"changeOverwrite\",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on(\"changeScrollTop\",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on(\"changeScrollLeft\",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on(\"changeCursor\",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on(\"changeSelection\",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal(\"changeSession\",{session:e,oldSession:t}),this.curOp=null,t&&t._signal(\"changeEditor\",{oldEditor:this}),e&&e._signal(\"changeEditor\",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()}},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption(\"fontSize\")||o.computedStyle(this.container,\"fontSize\")},this.setFontSize=function(e){this.setOption(\"fontSize\",e)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var e=this;this.$highlightPending=!0,setTimeout((function(){e.$highlightPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=t.findMatchingBracket(e.getCursorPosition());if(n)var r=new m(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)r=t.$mode.getMatching(e.session);r&&(t.$bracketHighlight=t.addMarker(r,\"ace_bracket\",\"text\"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var e=this;this.$highlightTagPending=!0,setTimeout((function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=e.getCursorPosition(),r=new y(e.session,n.row,n.column),o=r.getCurrentToken();if(!o||!/\\b(?:tag-open|tag-name)/.test(o.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1==o.type.indexOf(\"tag-open\")||(o=r.stepForward())){var i=o.value,s=0,a=r.stepBackward();if(\"<\"==a.value)do{a=o,(o=r.stepForward())&&o.value===i&&-1!==o.type.indexOf(\"tag-name\")&&(\"<\"===a.value?s++:\"</\"===a.value&&s--)}while(o&&s>=0);else{do{o=a,a=r.stepBackward(),o&&o.value===i&&-1!==o.type.indexOf(\"tag-name\")&&(\"<\"===a.value?s++:\"</\"===a.value&&s--)}while(a&&s<=0);r.stepForward()}if(!o)return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);var l=r.getCurrentTokenRow(),c=r.getCurrentTokenColumn(),u=new m(l,c,l,c+o.value.length),d=t.$backMarkers[t.$tagHighlight];t.$tagHighlight&&null!=d&&0!==u.compareRange(d.range)&&(t.removeMarker(t.$tagHighlight),t.$tagHighlight=null),u&&!t.$tagHighlight&&(t.$tagHighlight=t.addMarker(u,\"ace_bracket\",\"text\"))}}}),50)}},this.focus=function(){var e=this;setTimeout((function(){e.textInput.focus()})),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(e){this.$isFocused||(this.$isFocused=!0,this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit(\"focus\",e))},this.onBlur=function(e){this.$isFocused&&(this.$isFocused=!1,this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit(\"blur\",e))},this.$cursorChange=function(){this.renderer.updateCursor()},this.onDocumentChange=function(e){var t=this.session.$useWrapMode,n=e.start.row==e.end.row?e.end.row:1/0;this.renderer.updateLines(e.start.row,n,t),this._signal(\"change\",e),this.$cursorChange(),this.$updateHighlightActiveLine()},this.onTokenizerUpdate=function(e){var t=e.data;this.renderer.updateLines(t.first,t.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.$cursorChange(),this.$blockScrolling||(v.warn(\"Automatically scrolling cursor into view after selection change\",\"this will be disabled in the next version\",\"set editor.$blockScrolling = Infinity to disable this message\"),this.renderer.scrollCursorIntoView()),this.$highlightBrackets(),this.$highlightTags(),this.$updateHighlightActiveLine(),this._signal(\"changeSelection\")},this.$updateHighlightActiveLine=function(){var e,t=this.getSession();if(this.$highlightActiveLine&&(\"line\"==this.$selectionStyle&&this.selection.isMultiLine()||(e=this.getCursorPosition()),!this.renderer.$maxLines||1!==this.session.getLength()||this.renderer.$minLines>1||(e=!1)),t.$highlightLineMarker&&!e)t.removeMarker(t.$highlightLineMarker.id),t.$highlightLineMarker=null;else if(!t.$highlightLineMarker&&e){var n=new m(e.row,e.column,e.row,1/0);n.id=t.addMarker(n,\"ace_active-line\",\"screenLine\"),t.$highlightLineMarker=n}else e&&(t.$highlightLineMarker.start.row=e.row,t.$highlightLineMarker.end.row=e.row,t.$highlightLineMarker.start.column=e.column,t._signal(\"changeBackMarker\"))},this.onSelectionChange=function(e){var t=this.session;if(t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,\"ace_selection\",r)}var o=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(o),this._signal(\"changeSelection\")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(!t.isEmpty()&&!t.isMultiLine()){var n=t.start.column-1,r=t.end.column+1,o=e.getLine(t.start.row),i=o.length,s=o.substring(Math.max(n,0),Math.min(r,i));if(!(n>=0&&/^[\\w\\d]/.test(s)||r<=i&&/[\\w\\d]$/.test(s)))if(s=o.substring(t.start.column,t.end.column),/^[\\w\\d]+$/.test(s))return this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:s})}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit(\"changeMode\",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal(\"copy\",e),e},this.onCopy=function(){this.commands.exec(\"copy\",this)},this.onCut=function(){this.commands.exec(\"cut\",this)},this.onPaste=function(e,t){var n={text:e,event:t};this.commands.exec(\"paste\",this,n)},this.$handlePaste=function(e){\"string\"==typeof e&&(e={text:e}),this._signal(\"paste\",e);var t=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(t);else{var n=t.split(/\\r\\n|\\r|\\n/),r=this.selection.rangeList.ranges;if(n.length>r.length||n.length<2||!n[1])return this.commands.exec(\"insertstring\",this,t);for(var o=r.length;o--;){var i=r[o];i.isEmpty()||this.session.remove(i),this.session.insert(i.start,n[o])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,r=n.getMode(),o=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var i=r.transformAction(n.getState(o.row),\"insertion\",this,n,e);i&&(e!==i.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=i.text)}if(\"\\t\"==e&&(e=this.session.getTabString()),this.selection.isEmpty()){if(this.session.getOverwrite()&&-1==e.indexOf(\"\\n\")){(s=new m.fromPoints(o,o)).end.column+=e.length,this.session.remove(s)}}else{var s=this.getSelectionRange();o=this.session.remove(s),this.clearSelection()}if(\"\\n\"==e||\"\\r\\n\"==e){var a=n.getLine(o.row);if(o.column>a.search(/\\S|$/)){var l=a.substr(o.column).search(/\\S|$/);n.doc.removeInLine(o.row,o.column,o.column+l)}}this.clearSelection();var c=o.column,u=n.getState(o.row),d=(a=n.getLine(o.row),r.checkOutdent(u,a,e));n.insert(o,e);if(i&&i.selection&&(2==i.selection.length?this.selection.setSelectionRange(new m(o.row,c+i.selection[0],o.row,c+i.selection[1])):this.selection.setSelectionRange(new m(o.row+i.selection[0],i.selection[1],o.row+i.selection[2],i.selection[3]))),n.getDocument().isNewLine(e)){var h=r.getNextLineIndent(u,a.slice(0,o.column),n.getTabString());n.insert({row:o.row+1,column:0},h)}d&&r.autoOutdent(u,n,o.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption(\"scrollSpeed\",e)},this.getScrollSpeed=function(){return this.getOption(\"scrollSpeed\")},this.setDragDelay=function(e){this.setOption(\"dragDelay\",e)},this.getDragDelay=function(){return this.getOption(\"dragDelay\")},this.setSelectionStyle=function(e){this.setOption(\"selectionStyle\",e)},this.getSelectionStyle=function(){return this.getOption(\"selectionStyle\")},this.setHighlightActiveLine=function(e){this.setOption(\"highlightActiveLine\",e)},this.getHighlightActiveLine=function(){return this.getOption(\"highlightActiveLine\")},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.setHighlightSelectedWord=function(e){this.setOption(\"highlightSelectedWord\",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption(\"readOnly\",e)},this.getReadOnly=function(){return this.getOption(\"readOnly\")},this.setBehavioursEnabled=function(e){this.setOption(\"behavioursEnabled\",e)},this.getBehavioursEnabled=function(){return this.getOption(\"behavioursEnabled\")},this.setWrapBehavioursEnabled=function(e){this.setOption(\"wrapBehavioursEnabled\",e)},this.getWrapBehavioursEnabled=function(){return this.getOption(\"wrapBehavioursEnabled\")},this.setShowFoldWidgets=function(e){this.setOption(\"showFoldWidgets\",e)},this.getShowFoldWidgets=function(){return this.getOption(\"showFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.remove=function(e){this.selection.isEmpty()&&(\"left\"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),o=n.getMode().transformAction(r,\"deletion\",this,n,t);if(0===t.end.column){var i=n.getTextRange(t);if(\"\\n\"==i[i.length-1]){var s=n.getLine(t.end.row);/^\\s+$/.test(s)&&(t.end.column=s.length)}}o&&(t=o)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert(\"\\n\"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var n,r,o=this.session.getLine(e.row);t<o.length?(n=o.charAt(t)+o.charAt(t-1),r=new m(e.row,t-1,e.row,t+1)):(n=o.charAt(t-1)+o.charAt(t-2),r=new m(e.row,t-2,e.row,t)),this.session.replace(r,n),this.session.selection.moveToPosition(r.end)}}},this.toLowerCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toLowerCase()),this.selection.setSelectionRange(e)},this.toUpperCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toUpperCase()),this.selection.setSelectionRange(e)},this.indent=function(){var e=this.session,t=this.getSelectionRange();if(!(t.start.row<t.end.row)){if(t.start.column<t.end.column){var n=e.getTextRange(t);if(!/^\\s+$/.test(n)){u=this.$getSelectedRows();return void e.indentRows(u.first,u.last,\"\\t\")}}var r=e.getLine(t.start.row),o=t.start,s=e.getTabSize(),a=e.documentToScreenColumn(o.row,o.column);if(this.session.getUseSoftTabs())var l=s-a%s,c=i.stringRepeat(\" \",l);else{for(l=a%s;\" \"==r[t.start.column-1]&&l;)t.start.column--,l--;this.selection.setSelectionRange(t),c=\"\\t\"}return this.insert(c)}var u=this.$getSelectedRows();e.indentRows(u.first,u.last,\"\\t\")},this.blockIndent=function(){var e=this.$getSelectedRows();this.session.indentRows(e.first,e.last,\"\\t\")},this.blockOutdent=function(){var e=this.session.getSelection();this.session.outdentRows(e.getRange())},this.sortLines=function(){for(var e=this.$getSelectedRows(),t=this.session,n=[],r=e.first;r<=e.last;r++)n.push(t.getLine(r));n.sort((function(e,t){return e.toLowerCase()<t.toLowerCase()?-1:e.toLowerCase()>t.toLowerCase()?1:0}));var o=new m(0,0,0,0);for(r=e.first;r<=e.last;r++){var i=t.getLine(r);o.start.row=r,o.end.row=r,o.end.column=i.length,t.replace(o,n[r-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\\-]?[0-9]+(?:\\.[0-9]+)?/g;n.lastIndex=0;for(var r=this.session.getLine(e);n.lastIndex<t;){var o=n.exec(r);if(o.index<=t&&o.index+o[0].length>=t)return{value:o[0],start:o.index,end:o.index+o[0].length}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new m(t,n-1,t,n),o=this.session.getTextRange(r);if(!isNaN(parseFloat(o))&&isFinite(o)){var i=this.getNumberAt(t,n);if(i){var s=i.value.indexOf(\".\")>=0?i.start+i.value.indexOf(\".\")+1:i.end,a=i.start+i.value.length-s,l=parseFloat(i.value);l*=Math.pow(10,a),s!==i.end&&n<s?e*=Math.pow(10,i.end-n-1):e*=Math.pow(10,i.end-n),l+=e;var c=(l/=Math.pow(10,a)).toFixed(a),u=new m(t,i.start,t,i.end);this.session.replace(u,c),this.moveCursorTo(t,Math.max(i.start+1,n+c.length-i.value.length))}}},this.removeLines=function(){var e=this.$getSelectedRows();this.session.removeFullLines(e.first,e.last),this.clearSelection()},this.duplicateSelection=function(){var e=this.selection,t=this.session,n=e.getRange(),r=e.isBackwards();if(n.isEmpty()){var o=n.start.row;t.duplicateLines(o,o)}else{var i=r?n.start:n.end,s=t.insert(i,t.getTextRange(n),!1);n.start=i,n.end=s,e.setSelectionRange(n,r)}},this.moveLinesDown=function(){this.$moveLines(1,!1)},this.moveLinesUp=function(){this.$moveLines(-1,!1)},this.moveText=function(e,t,n){return this.session.moveText(e,t,n)},this.copyLinesUp=function(){this.$moveLines(-1,!0)},this.copyLinesDown=function(){this.$moveLines(1,!0)},this.$moveLines=function(e,t){var n,r,o=this.selection;if(!o.inMultiSelectMode||this.inVirtualSelectionMode){var i=o.toOrientedRange();n=this.$getSelectedRows(i),r=this.session.$moveLines(n.first,n.last,t?0:e),t&&-1==e&&(r=0),i.moveBy(r,0),o.fromOrientedRange(i)}else{var s=o.rangeList.ranges;o.rangeList.detach(this.session),this.inVirtualSelectionMode=!0;for(var a=0,l=0,c=s.length,u=0;u<c;u++){var d=u;s[u].moveBy(a,0);for(var h=(n=this.$getSelectedRows(s[u])).first,m=n.last;++u<c;){l&&s[u].moveBy(l,0);var f=this.$getSelectedRows(s[u]);if(t&&f.first!=m)break;if(!t&&f.first>m+1)break;m=f.last}for(u--,a=this.session.$moveLines(h,m,t?0:e),t&&-1==e&&(d=u+1);d<=u;)s[d].moveBy(a,0),d++;t||(a=0),l+=a}o.fromOrientedRange(o.ranges[0]),o.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,o=e*Math.floor(r.height/r.lineHeight);this.$blockScrolling++,!0===t?this.selection.$moveSelection((function(){this.moveCursorBy(o,0)})):!1===t&&(this.selection.moveCursorBy(o,0),this.selection.clearSelection()),this.$blockScrolling--;var i=n.scrollTop;n.scrollBy(0,o*r.lineHeight),null!=t&&n.scrollCursorIntoView(null,.5),n.animateScrolling(i)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),r=new y(this.session,n.row,n.column),o=r.getCurrentToken(),i=o||r.stepForward();if(i){var s,a,l=!1,c={},u=n.column-i.start,d={\")\":\"(\",\"(\":\"(\",\"]\":\"[\",\"[\":\"[\",\"{\":\"{\",\"}\":\"{\"};do{if(i.value.match(/[{}()\\[\\]]/g)){for(;u<i.value.length&&!l;u++)if(d[i.value[u]])switch(a=d[i.value[u]]+\".\"+i.type.replace(\"rparen\",\"lparen\"),isNaN(c[a])&&(c[a]=0),i.value[u]){case\"(\":case\"[\":case\"{\":c[a]++;break;case\")\":case\"]\":case\"}\":c[a]--,-1===c[a]&&(s=\"bracket\",l=!0)}}else i&&-1!==i.type.indexOf(\"tag-name\")&&(isNaN(c[i.value])&&(c[i.value]=0),\"<\"===o.value?c[i.value]++:\"</\"===o.value&&c[i.value]--,-1===c[i.value]&&(s=\"tag\",l=!0));l||(o=i,i=r.stepForward(),u=0)}while(i&&!l);if(s){var h,f;if(\"bracket\"===s)(h=this.session.getBracketRange(n))||(f=(h=new m(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+u-1,r.getCurrentTokenRow(),r.getCurrentTokenColumn()+u-1)).start,(t||f.row===n.row&&Math.abs(f.column-n.column)<2)&&(h=this.session.getBracketRange(f)));else if(\"tag\"===s){if(!i||-1===i.type.indexOf(\"tag-name\"))return;var p=i.value;if(0===(h=new m(r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2,r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2)).compare(n.row,n.column)){l=!1;do{i=o,(o=r.stepBackward())&&(-1!==o.type.indexOf(\"tag-close\")&&h.setEnd(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+1),i.value===p&&-1!==i.type.indexOf(\"tag-name\")&&(\"<\"===o.value?c[p]++:\"</\"===o.value&&c[p]--,0===c[p]&&(l=!0)))}while(o&&!l)}i&&i.type.indexOf(\"tag-name\")&&(f=h.start).row==n.row&&Math.abs(f.column-n.column)<2&&(f=h.end)}(f=h&&h.cursor||f)&&(e?h&&t?this.selection.setRange(h):h&&h.isEqual(this.getSelectionRange())?this.clearSelection():this.selection.selectTo(f.row,f.column):this.selection.moveTo(f.row,f.column))}}},this.gotoLine=function(e,t,n){this.selection.clearSelection(),this.session.unfold({row:e-1,column:t||0}),this.$blockScrolling+=1,this.exitMultiSelectMode&&this.exitMultiSelectMode(),this.moveCursorTo(e-1,t||0),this.$blockScrolling-=1,this.isRowFullyVisible(e-1)||this.scrollToLine(e-1,!0,n)},this.navigateTo=function(e,t){this.selection.moveTo(e,t)},this.navigateUp=function(e){if(this.selection.isMultiLine()&&!this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(-e||-1,0)},this.navigateDown=function(e){if(this.selection.isMultiLine()&&this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(e||1,0)},this.navigateLeft=function(e){if(this.selection.isEmpty())for(e=e||1;e--;)this.selection.moveCursorLeft();else{var t=this.getSelectionRange().start;this.moveCursorToPosition(t)}this.clearSelection()},this.navigateRight=function(e){if(this.selection.isEmpty())for(e=e||1;e--;)this.selection.moveCursorRight();else{var t=this.getSelectionRange().end;this.moveCursorToPosition(t)}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(e,t){t&&this.$search.set(t);var n=this.$search.find(this.session),r=0;return n?(this.$tryReplace(n,e)&&(r=1),null!==n&&(this.selection.setSelectionRange(n),this.renderer.scrollSelectionIntoView(n.start,n.end)),r):r},this.replaceAll=function(e,t){t&&this.$search.set(t);var n=this.$search.findAll(this.session),r=0;if(!n.length)return r;this.$blockScrolling+=1;var o=this.getSelectionRange();this.selection.moveTo(0,0);for(var i=n.length-1;i>=0;--i)this.$tryReplace(n[i],e)&&r++;return this.selection.setSelectionRange(o),this.$blockScrolling-=1,r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return null!==(t=this.$search.replace(n,t))?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),\"string\"==typeof e||e instanceof RegExp?t.needle=e:\"object\"==typeof e&&r.mixin(t,e);var o=this.selection.getRange();null==t.needle&&((e=this.session.getTextRange(o)||this.$search.$options.needle)||(o=this.session.getWordRange(o.start.row,o.start.column),e=this.session.getTextRange(o)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:o});var i=this.$search.find(this.session);return t.preventScroll?i:i?(this.revealRange(i,n),i):(t.backwards?o.start=o.end:o.end=o.start,void this.selection.setRange(o))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(n)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal(\"destroy\",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(e){var t,n=this,r=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement(\"div\"));var o=this.$scrollAnchor;o.style.cssText=\"position:absolute\",this.container.insertBefore(o,this.container.firstChild);var i=this.on(\"changeSelection\",(function(){r=!0})),s=this.renderer.on(\"beforeRender\",(function(){r&&(t=n.renderer.container.getBoundingClientRect())})),a=this.renderer.on(\"afterRender\",(function(){if(r&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,i=e.$cursorLayer.$pixelPos,s=e.layerConfig,a=i.top-s.offset;null!=(r=i.top>=0&&a+t.top<0||!(i.top<s.height&&i.top+t.top+s.lineHeight>window.innerHeight)&&null)&&(o.style.top=a+\"px\",o.style.left=i.left+\"px\",o.style.height=s.lineHeight+\"px\",o.scrollIntoView(r)),r=t=null}}));this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off(\"changeSelection\",i),this.renderer.off(\"afterRender\",a),this.renderer.off(\"beforeRender\",s))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||\"ace\",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&\"wide\"!=e,o.setCssClass(t.element,\"ace_slim-cursors\",/slim/.test(e)))}}.call(b.prototype),v.defineOptions(b.prototype,\"editor\",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal(\"changeSelectionStyle\",{data:e})},initialValue:\"line\"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:[\"ace\",\"slim\",\"smooth\",\"wide\"],initialValue:\"ace\"},mergeUndoDeltas:{values:[!1,!0,\"always\"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:\"renderer\",vScrollBarAlwaysVisible:\"renderer\",highlightGutterLine:\"renderer\",animatedScroll:\"renderer\",showInvisibles:\"renderer\",showPrintMargin:\"renderer\",printMarginColumn:\"renderer\",printMargin:\"renderer\",fadeFoldWidgets:\"renderer\",showFoldWidgets:\"renderer\",showLineNumbers:\"renderer\",showGutter:\"renderer\",displayIndentGuides:\"renderer\",fontSize:\"renderer\",fontFamily:\"renderer\",maxLines:\"renderer\",minLines:\"renderer\",scrollPastEnd:\"renderer\",fixedWidthGutter:\"renderer\",theme:\"renderer\",scrollSpeed:\"$mouseHandler\",dragDelay:\"$mouseHandler\",dragEnabled:\"$mouseHandler\",focusTimout:\"$mouseHandler\",tooltipFollowsMouse:\"$mouseHandler\",firstLineNumber:\"session\",overwrite:\"session\",newLineMode:\"session\",useWorker:\"session\",useSoftTabs:\"session\",tabSize:\"session\",wrap:\"session\",indentedSoftWrap:\"session\",foldStyle:\"session\",mode:\"session\"}),t.Editor=b})),ace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"],(function(e,t,n){\"use strict\";var r=function(){this.reset()};(function(){function e(e){return{action:e.action,start:e.start,end:e.end,lines:1==e.lines.length?null:e.lines,text:1==e.lines.length?e.lines[0]:null}}function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines||[e.text]}}function n(e,t){for(var n=new Array(e.length),r=0;r<e.length;r++){for(var o=e[r],i={group:o.group,deltas:new Array(o.length)},s=0;s<o.deltas.length;s++){var a=o.deltas[s];i.deltas[s]=t(a)}n[r]=i}return n}this.execute=function(e){var t=e.args[0];this.$doc=e.args[1],e.merge&&this.hasUndo()&&(this.dirtyCounter--,t=this.$undoStack.pop().concat(t)),this.$undoStack.push(t),this.$redoStack=[],this.dirtyCounter<0&&(this.dirtyCounter=NaN),this.dirtyCounter++},this.undo=function(e){var t=this.$undoStack.pop(),n=null;return t&&(n=this.$doc.undoChanges(t,e),this.$redoStack.push(t),this.dirtyCounter--),n},this.redo=function(e){var t=this.$redoStack.pop(),n=null;return t&&(n=this.$doc.redoChanges(this.$deserializeDeltas(t),e),this.$undoStack.push(t),this.dirtyCounter++),n},this.reset=function(){this.$undoStack=[],this.$redoStack=[],this.dirtyCounter=0},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return 0===this.dirtyCounter},this.$serializeDeltas=function(t){return n(t,e)},this.$deserializeDeltas=function(e){return n(e,t)}}).call(r.prototype),t.UndoManager=r})),ace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),o=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"../lib/event_emitter\").EventEmitter,a=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_gutter-layer\",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){o.implement(this,s),this.setSession=function(e){this.session&&this.session.removeEventListener(\"change\",this.$updateAnnotations),this.session=e,e&&e.on(\"change\",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.addGutterDecoration\"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.removeGutterDecoration\"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;t<e.length;t++){var n=e[t],r=n.row,o=this.$annotations[r];o||(o=this.$annotations[r]={text:[]});var s=n.text;s=s?i.escapeHTML(s):n.html||\"\",-1===o.text.indexOf(s)&&o.text.push(s);var a=n.type;\"error\"==a?o.className=\" ace_error\":\"warning\"==a&&\" ace_error\"!=o.className?o.className=\" ace_warning\":\"info\"!=a||o.className||(o.className=\" ace_info\")}},this.$updateAnnotations=function(e){if(this.$annotations.length){var t=e.start.row,n=e.end.row-t;if(0===n);else if(\"remove\"==e.action)this.$annotations.splice(t,n+1,null);else{var r=new Array(n+1);r.unshift(t,1),this.$annotations.splice.apply(this.$annotations,r)}}},this.update=function(e){for(var t=this.session,n=e.firstRow,o=Math.min(e.lastRow+e.gutterOffset,t.getLength()-1),i=t.getNextFoldLine(n),s=i?i.start.row:1/0,a=this.$showFoldWidgets&&t.foldWidgets,l=t.$breakpoints,c=t.$decorations,u=t.$firstLineNumber,d=0,h=t.gutterRenderer||this.$renderer,m=null,f=-1,p=n;;){if(p>s&&(p=i.end.row+1,s=(i=t.getNextFoldLine(p,i))?i.start.row:1/0),p>o){for(;this.$cells.length>f+1;)m=this.$cells.pop(),this.element.removeChild(m.element);break}(m=this.$cells[++f])||((m={element:null,textNode:null,foldWidget:null}).element=r.createElement(\"div\"),m.textNode=document.createTextNode(\"\"),m.element.appendChild(m.textNode),this.element.appendChild(m.element),this.$cells[f]=m);var g=\"ace_gutter-cell \";if(l[p]&&(g+=l[p]),c[p]&&(g+=c[p]),this.$annotations[p]&&(g+=this.$annotations[p].className),m.element.className!=g&&(m.element.className=g),(y=t.getRowLength(p)*e.lineHeight+\"px\")!=m.element.style.height&&(m.element.style.height=y),a){var v=a[p];null==v&&(v=a[p]=t.getFoldWidget(p))}if(v){m.foldWidget||(m.foldWidget=r.createElement(\"span\"),m.element.appendChild(m.foldWidget));g=\"ace_fold-widget ace_\"+v;\"start\"==v&&p==s&&p<i.end.row?g+=\" ace_closed\":g+=\" ace_open\",m.foldWidget.className!=g&&(m.foldWidget.className=g);var y=e.lineHeight+\"px\";m.foldWidget.style.height!=y&&(m.foldWidget.style.height=y)}else m.foldWidget&&(m.element.removeChild(m.foldWidget),m.foldWidget=null);var b=d=h?h.getText(t,p):p+u;b!==m.textNode.data&&(m.textNode.data=b),p++}this.element.style.height=e.minHeight+\"px\",(this.$fixedWidth||t.$useWrapMode)&&(d=t.getLength()+u);var _=h?h.getWidth(t,d,e):d.toString().length*e.characterWidth,w=this.$padding||this.$computePadding();(_+=w.left+w.right)===this.gutterWidth||isNaN(_)||(this.gutterWidth=_,this.element.style.width=Math.ceil(this.gutterWidth)+\"px\",this._emit(\"changeGutterWidth\",_))},this.$fixedWidth=!1,this.$showLineNumbers=!0,this.$renderer=\"\",this.setShowLineNumbers=function(e){this.$renderer=!e&&{getWidth:function(){return\"\"},getText:function(){return\"\"}}},this.getShowLineNumbers=function(){return this.$showLineNumbers},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(e){e?r.addCssClass(this.element,\"ace_folding-enabled\"):r.removeCssClass(this.element,\"ace_folding-enabled\"),this.$showFoldWidgets=e,this.$padding=null},this.getShowFoldWidgets=function(){return this.$showFoldWidgets},this.$computePadding=function(){if(!this.element.firstChild)return{left:0,right:0};var e=r.computedStyle(this.element.firstChild);return this.$padding={},this.$padding.left=parseInt(e.paddingLeft)+1||0,this.$padding.right=parseInt(e.paddingRight)||0,this.$padding},this.getRegion=function(e){var t=this.$padding||this.$computePadding(),n=this.element.getBoundingClientRect();return e.x<t.left+n.left?\"markers\":this.$showFoldWidgets&&e.x>n.right-t.right?\"foldWidgets\":void 0}}).call(a.prototype),t.Gutter=a})),ace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var r=e(\"../range\").Range,o=e(\"../lib/dom\"),i=function(e){this.element=o.createElement(\"div\"),this.element.className=\"ace_layer ace_marker-layer\",e.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){if(e){this.config=e;var t=[];for(var n in this.markers){var r=this.markers[n];if(r.range){var o=r.range.clipRows(e.firstRow,e.lastRow);if(!o.isEmpty())if(o=o.toScreenRange(this.session),r.renderer){var i=this.$getTop(o.start.row,e),s=this.$padding+(this.session.$bidiHandler.isBidiRow(o.start.row)?this.session.$bidiHandler.getPosLeft(o.start.column):o.start.column*e.characterWidth);r.renderer(t,o,s,i,e)}else\"fullLine\"==r.type?this.drawFullLineMarker(t,o,r.clazz,e):\"screenLine\"==r.type?this.drawScreenLineMarker(t,o,r.clazz,e):o.isMultiLine()?\"text\"==r.type?this.drawTextMarker(t,o,r.clazz,e):this.drawMultiLineMarker(t,o,r.clazz,e):this.session.$bidiHandler.isBidiRow(o.start.row)?this.drawBidiSingleLineMarker(t,o,r.clazz+\" ace_start ace_br15\",e):this.drawSingleLineMarker(t,o,r.clazz+\" ace_start ace_br15\",e)}else r.update(t,this,this.session,e)}this.element.innerHTML=t.join(\"\")}},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(e,t,n,o,i){for(var s=this.session,a=t.start.row,l=t.end.row,c=a,u=0,d=0,h=s.getScreenLastRowColumn(c),m=null,f=new r(c,t.start.column,c,d);c<=l;c++)f.start.row=f.end.row=c,f.start.column=c==a?t.start.column:s.getRowWrapIndent(c),f.end.column=h,u=d,d=h,h=c+1<l?s.getScreenLastRowColumn(c+1):c==l?0:t.end.column,m=n+(c==a?\" ace_start\":\"\")+\" ace_br\"+((c==a||c==a+1&&t.start.column?1:0)|(u<d?2:0)|(d>h?4:0)|(c==l?8:0)),this.session.$bidiHandler.isBidiRow(c)?this.drawBidiSingleLineMarker(e,f,m,o,c==l?0:1,i):this.drawSingleLineMarker(e,f,m,o,c==l?0:1,i)},this.drawMultiLineMarker=function(e,t,n,r,o){var i,s,a,l=this.$padding;(o=o||\"\",this.session.$bidiHandler.isBidiRow(t.start.row))?((c=t.clone()).end.row=c.start.row,c.end.column=this.session.getLine(c.start.row).length,this.drawBidiSingleLineMarker(e,c,n+\" ace_br1 ace_start\",r,null,o)):(i=r.lineHeight,s=this.$getTop(t.start.row,r),a=l+t.start.column*r.characterWidth,e.push(\"<div class='\",n,\" ace_br1 ace_start' style='\",\"height:\",i,\"px;\",\"right:0;\",\"top:\",s,\"px;\",\"left:\",a,\"px;\",o,\"'></div>\"));if(this.session.$bidiHandler.isBidiRow(t.end.row)){var c;(c=t.clone()).start.row=c.end.row,c.start.column=0,this.drawBidiSingleLineMarker(e,c,n+\" ace_br12\",r,null,o)}else{var u=t.end.column*r.characterWidth;i=r.lineHeight,s=this.$getTop(t.end.row,r),e.push(\"<div class='\",n,\" ace_br12' style='\",\"height:\",i,\"px;\",\"width:\",u,\"px;\",\"top:\",s,\"px;\",\"left:\",l,\"px;\",o,\"'></div>\")}if(!((i=(t.end.row-t.start.row-1)*r.lineHeight)<=0)){s=this.$getTop(t.start.row+1,r);var d=(t.start.column?1:0)|(t.end.column?0:8);e.push(\"<div class='\",n,d?\" ace_br\"+d:\"\",\"' style='\",\"height:\",i,\"px;\",\"right:0;\",\"top:\",s,\"px;\",\"left:\",l,\"px;\",o,\"'></div>\")}},this.drawSingleLineMarker=function(e,t,n,r,o,i){var s=r.lineHeight,a=(t.end.column+(o||0)-t.start.column)*r.characterWidth,l=this.$getTop(t.start.row,r),c=this.$padding+t.start.column*r.characterWidth;e.push(\"<div class='\",n,\"' style='\",\"height:\",s,\"px;\",\"width:\",a,\"px;\",\"top:\",l,\"px;\",\"left:\",c,\"px;\",i||\"\",\"'></div>\")},this.drawBidiSingleLineMarker=function(e,t,n,r,o,i){var s=r.lineHeight,a=this.$getTop(t.start.row,r),l=this.$padding;this.session.$bidiHandler.getSelections(t.start.column,t.end.column).forEach((function(t){e.push(\"<div class='\",n,\"' style='\",\"height:\",s,\"px;\",\"width:\",t.width+(o||0),\"px;\",\"top:\",a,\"px;\",\"left:\",l+t.left,\"px;\",i||\"\",\"'></div>\")}))},this.drawFullLineMarker=function(e,t,n,r,o){var i=this.$getTop(t.start.row,r),s=r.lineHeight;t.start.row!=t.end.row&&(s+=this.$getTop(t.end.row,r)-i),e.push(\"<div class='\",n,\"' style='\",\"height:\",s,\"px;\",\"top:\",i,\"px;\",\"left:0;right:0;\",o||\"\",\"'></div>\")},this.drawScreenLineMarker=function(e,t,n,r,o){var i=this.$getTop(t.start.row,r),s=r.lineHeight;e.push(\"<div class='\",n,\"' style='\",\"height:\",s,\"px;\",\"top:\",i,\"px;\",\"left:0;right:0;\",o||\"\",\"'></div>\")}}).call(i.prototype),t.Marker=i})),ace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),o=e(\"../lib/dom\"),i=e(\"../lib/lang\"),s=(e(\"../lib/useragent\"),e(\"../lib/event_emitter\").EventEmitter),a=function(e){this.element=o.createElement(\"div\"),this.element.className=\"ace_layer ace_text-layer\",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){r.implement(this,s),this.EOF_CHAR=\"¶\",this.EOL_CHAR_LF=\"¬\",this.EOL_CHAR_CRLF=\"¤\",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR=\"—\",this.SPACE_CHAR=\"·\",this.$padding=0,this.$updateEolChar=function(){var e=\"\\n\"==this.session.doc.getNewLineCharacter()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding=\"0 \"+e+\"px\"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on(\"changeCharacterSize\",function(e){this._signal(\"changeCharacterSize\",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t=this.$tabStrings=[0],n=1;n<e+1;n++)this.showInvisibles?t.push(\"<span class='ace_invisible ace_invisible_tab'>\"+i.stringRepeat(this.TAB_CHAR,n)+\"</span>\"):t.push(i.stringRepeat(\" \",n));if(this.displayIndentGuides){this.$indentGuideRe=/\\s\\S| \\t|\\t |\\s$/;var r=\"ace_indent-guide\",o=\"\",s=\"\";if(this.showInvisibles){r+=\" ace_invisible\",o=\" ace_invisible_space\",s=\" ace_invisible_tab\";var a=i.stringRepeat(this.SPACE_CHAR,this.tabSize),l=i.stringRepeat(this.TAB_CHAR,this.tabSize)}else l=a=i.stringRepeat(\" \",this.tabSize);this.$tabStrings[\" \"]=\"<span class='\"+r+o+\"'>\"+a+\"</span>\",this.$tabStrings[\"\\t\"]=\"<span class='\"+r+s+\"'>\"+l+\"</span>\"}},this.updateLines=function(e,t,n){this.config.lastRow==e.lastRow&&this.config.firstRow==e.firstRow||this.scrollLines(e),this.config=e;for(var r=Math.max(t,e.firstRow),o=Math.min(n,e.lastRow),i=this.element.childNodes,s=0,a=e.firstRow;a<r;a++){if(l=this.session.getFoldLine(a)){if(l.containsRow(r)){r=l.start.row;break}a=l.end.row}s++}a=r;for(var l,c=(l=this.session.getNextFoldLine(a))?l.start.row:1/0;a>c&&(a=l.end.row+1,c=(l=this.session.getNextFoldLine(a,l))?l.start.row:1/0),!(a>o);){var u=i[s++];if(u){var d=[];this.$renderLine(d,a,!this.$useLineGroups(),a==c&&l),u.style.height=e.lineHeight*this.session.getRowLength(a)+\"px\",u.innerHTML=d.join(\"\")}a++}},this.scrollLines=function(e){var t=this.config;if(this.config=e,!t||t.lastRow<e.firstRow)return this.update(e);if(e.lastRow<t.firstRow)return this.update(e);var n=this.element;if(t.firstRow<e.firstRow)for(var r=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);r>0;r--)n.removeChild(n.firstChild);if(t.lastRow>e.lastRow)for(r=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);r>0;r--)n.removeChild(n.lastChild);if(e.firstRow<t.firstRow){var o=this.$renderLinesFragment(e,e.firstRow,t.firstRow-1);n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o)}if(e.lastRow>t.lastRow){o=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);n.appendChild(o)}},this.$renderLinesFragment=function(e,t,n){for(var r=this.element.ownerDocument.createDocumentFragment(),i=t,s=this.session.getNextFoldLine(i),a=s?s.start.row:1/0;i>a&&(i=s.end.row+1,a=(s=this.session.getNextFoldLine(i,s))?s.start.row:1/0),!(i>n);){var l=o.createElement(\"div\"),c=[];if(this.$renderLine(c,i,!1,i==a&&s),l.innerHTML=c.join(\"\"),this.$useLineGroups())l.className=\"ace_line_group\",r.appendChild(l),l.style.height=e.lineHeight*this.session.getRowLength(i)+\"px\";else for(;l.firstChild;)r.appendChild(l.firstChild);i++}return r},this.update=function(e){this.config=e;for(var t=[],n=e.firstRow,r=e.lastRow,o=n,i=this.session.getNextFoldLine(o),s=i?i.start.row:1/0;o>s&&(o=i.end.row+1,s=(i=this.session.getNextFoldLine(o,i))?i.start.row:1/0),!(o>r);)this.$useLineGroups()&&t.push(\"<div class='ace_line_group' style='height:\",e.lineHeight*this.session.getRowLength(o),\"px'>\"),this.$renderLine(t,o,!1,o==s&&i),this.$useLineGroups()&&t.push(\"</div>\"),o++;this.element.innerHTML=t.join(\"\")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var o=this,s=r.replace(/\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,(function(e,n,r,s,a){if(n)return o.showInvisibles?\"<span class='ace_invisible ace_invisible_space'>\"+i.stringRepeat(o.SPACE_CHAR,e.length)+\"</span>\":e;if(\"&\"==e)return\"&#38;\";if(\"<\"==e)return\"&#60;\";if(\">\"==e)return\"&#62;\";if(\"\\t\"==e){var l=o.session.getScreenTabSize(t+s);return t+=l-1,o.$tabStrings[l]}if(\"　\"==e){var c=o.showInvisibles?\"ace_cjk ace_invisible ace_invisible_space\":\"ace_cjk\",u=o.showInvisibles?o.SPACE_CHAR:\"\";return t+=1,\"<span class='\"+c+\"' style='width:\"+2*o.config.characterWidth+\"px'>\"+u+\"</span>\"}return r?\"<span class='ace_invisible ace_invisible_space ace_invalid'>\"+o.SPACE_CHAR+\"</span>\":(t+=1,\"<span class='ace_cjk' style='width:\"+2*o.config.characterWidth+\"px'>\"+e+\"</span>\")}));if(this.$textToken[n.type])e.push(s);else{var a=\"ace_\"+n.type.replace(/\\./g,\" ace_\"),l=\"\";\"fold\"==n.type&&(l=\" style='width:\"+n.value.length*this.config.characterWidth+\"px;' \"),e.push(\"<span class='\",a,\"'\",l,\">\",s,\"</span>\")}return t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);return r<=0||r>=n?t:\" \"==t[0]?(r-=r%this.tabSize,e.push(i.stringRepeat(this.$tabStrings[\" \"],r/this.tabSize)),t.substr(r)):\"\\t\"==t[0]?(e.push(i.stringRepeat(this.$tabStrings[\"\\t\"],r)),t.substr(r)):t},this.$renderWrappedLine=function(e,t,n,r){for(var o=0,s=0,a=n[0],l=0,c=0;c<t.length;c++){var u=t[c],d=u.value;if(0==c&&this.displayIndentGuides){if(o=d.length,!(d=this.renderIndentGuide(e,d,a)))continue;o-=d.length}if(o+d.length<a)l=this.$renderToken(e,l,u,d),o+=d.length;else{for(;o+d.length>=a;)l=this.$renderToken(e,l,u,d.substring(0,a-o)),d=d.substring(a-o),o=a,r||e.push(\"</div>\",\"<div class='ace_line' style='height:\",this.config.lineHeight,\"px'>\"),e.push(i.stringRepeat(\" \",n.indent)),l=0,a=n[++s]||Number.MAX_VALUE;0!=d.length&&(o+=d.length,l=this.$renderToken(e,l,u,d))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],o=r.value;this.displayIndentGuides&&(o=this.renderIndentGuide(e,o)),o&&(n=this.$renderToken(e,n,r,o));for(var i=1;i<t.length;i++)o=(r=t[i]).value,n=this.$renderToken(e,n,r,o)},this.$renderLine=function(e,t,n,r){if(r||0==r||(r=this.session.getFoldLine(t)),r)var o=this.$getFoldLineTokens(t,r);else o=this.session.getTokens(t);if(n||e.push(\"<div class='ace_line' style='height:\",this.config.lineHeight*(this.$useLineGroups()?1:this.session.getRowLength(t)),\"px'>\"),o.length){var i=this.session.getRowSplitData(t);i&&i.length?this.$renderWrappedLine(e,o,i,n):this.$renderSimpleLine(e,o)}this.showInvisibles&&(r&&(t=r.end.row),e.push(\"<span class='ace_invisible ace_invisible_eol'>\",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,\"</span>\")),n||e.push(\"</div>\")},this.$getFoldLineTokens=function(e,t){var n=this.session,r=[];var o=n.getTokens(e);return t.walk((function(e,t,i,s,a){null!=e?r.push({type:\"fold\",value:e}):(a&&(o=n.getTokens(t)),o.length&&function(e,t,n){for(var o=0,i=0;i+e[o].value.length<t;)if(i+=e[o].value.length,++o==e.length)return;for(i!=t&&((s=e[o].value.substring(t-i)).length>n-t&&(s=s.substring(0,n-t)),r.push({type:e[o].type,value:s}),i=t+s.length,o+=1);i<n&&o<e.length;){var s;(s=e[o].value).length+i>n?r.push({type:e[o].type,value:s.substring(0,n-i)}):r.push(e[o]),i+=s.length,o+=1}}(o,s,i))}),t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a})),ace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";var r,o=e(\"../lib/dom\"),i=function(e){this.element=o.createElement(\"div\"),this.element.className=\"ace_layer ace_cursor-layer\",e.appendChild(this.element),void 0===r&&(r=!(\"opacity\"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),o.addCssClass(this.element,\"ace_hidden-cursors\"),this.$updateCursors=(r?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(e){for(var t=this.cursors,n=t.length;n--;)t[n].style.visibility=e?\"\":\"hidden\"},this.$updateOpacity=function(e){for(var t=this.cursors,n=t.length;n--;)t[n].style.opacity=e?\"\":\"0\"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e==this.smoothBlinking||r||(this.smoothBlinking=e,o.setCssClass(this.element,\"ace_smooth-blinking\",e),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var e=o.createElement(\"div\");return e.className=\"ace_cursor\",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,o.addCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,o.removeCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&o.removeCssClass(this.element,\"ace_smooth-blinking\"),e(!0),this.isBlinking&&this.blinkInterval&&this.isVisible){this.smoothBlinking&&setTimeout(function(){o.addCssClass(this.element,\"ace_smooth-blinking\")}.bind(this));var t=function(){this.timeoutId=setTimeout((function(){e(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){e(!0),t()}),this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e);return{left:this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),top:(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,r=0;void 0!==t&&0!==t.length||(t=[{cursor:null}]);n=0;for(var o=t.length;n<o;n++){var i=this.getPixelPosition(t[n].cursor,!0);if(!((i.top>e.height+e.offset||i.top<0)&&n>1)){var s=(this.cursors[r++]||this.addCursor()).style;this.drawCursor?this.drawCursor(s,i,e,t[n],this.session):(s.left=i.left+\"px\",s.top=i.top+\"px\",s.width=e.characterWidth+\"px\",s.height=e.lineHeight+\"px\")}}for(;this.cursors.length>r;)this.removeCursor();var a=this.session.getOverwrite();this.$setOverwrite(a),this.$pixelPos=i,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?o.addCssClass(this.element,\"ace_overwrite-cursors\"):o.removeCssClass(this.element,\"ace_overwrite-cursors\"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(i.prototype),t.Cursor=i})),ace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),o=e(\"./lib/dom\"),i=e(\"./lib/event\"),s=e(\"./lib/event_emitter\").EventEmitter,a=32768,l=function(e){this.element=o.createElement(\"div\"),this.element.className=\"ace_scrollbar ace_scrollbar\"+this.classSuffix,this.inner=o.createElement(\"div\"),this.inner.className=\"ace_scrollbar-inner\",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,i.addListener(this.element,\"scroll\",this.onScroll.bind(this)),i.addListener(this.element,\"mousedown\",i.preventDefault)};(function(){r.implement(this,s),this.setVisible=function(e){this.element.style.display=e?\"\":\"none\",this.isVisible=e,this.coeff=1}}).call(l.prototype);var c=function(e,t){l.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=o.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+\"px\",this.$minWidth=0};r.inherits(c,l),function(){this.classSuffix=\"-v\",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit(\"scroll\",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+\"px\"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>a?(this.coeff=a/e,e=a):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+\"px\"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(c.prototype);var u=function(e,t){l.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+\"px\"};r.inherits(u,l),function(){this.classSuffix=\"-h\",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit(\"scroll\",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+\"px\"},this.setInnerWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(u.prototype),t.ScrollBar=c,t.ScrollBarV=c,t.ScrollBarH=u,t.VScrollBar=c,t.HScrollBar=u})),ace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/event\"),o=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){if(this.changes=this.changes|e,!this.pending&&this.changes){this.pending=!0;var t=this;r.nextFrame((function(){var e;for(t.pending=!1;e=t.changes;)t.changes=0,t.onRender(e)}),this.window)}}}).call(o.prototype),t.RenderLoop=o})),ace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],(function(e,t,n){var r=e(\"../lib/oop\"),o=e(\"../lib/dom\"),i=e(\"../lib/lang\"),s=e(\"../lib/useragent\"),a=e(\"../lib/event_emitter\").EventEmitter,l=0,c=t.FontMetrics=function(e){this.el=o.createElement(\"div\"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=o.createElement(\"div\"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=o.createElement(\"div\"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),l||this.$testFractionalRect(),this.$measureNode.innerHTML=i.stringRepeat(\"X\",l),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){r.implement(this,a),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=o.createElement(\"div\");this.$setMeasureNodeStyles(e.style),e.style.width=\"0.2px\",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;l=t>0&&t<1?50:100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height=\"auto\",e.left=e.top=\"0px\",e.visibility=\"hidden\",e.position=\"absolute\",e.whiteSpace=\"pre\",s.isIE<8?e[\"font-family\"]=\"inherit\":e.font=\"inherit\",e.overflow=t?\"hidden\":\"visible\"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight=\"bold\";var t=this.$measureSizes();this.$measureNode.style.fontWeight=\"\",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit(\"changeCharacterSize\",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval((function(){e.checkForSizeChanges()}),500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(50===l){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(t){e={width:0,height:0}}var t={height:e.height,width:e.width/l}}else t={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/l};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){return this.$main.innerHTML=i.stringRepeat(e,l),this.$main.getBoundingClientRect().width/l},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(c.prototype)})),ace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"],(function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),o=e(\"./lib/dom\"),i=e(\"./config\"),s=e(\"./lib/useragent\"),a=e(\"./layer/gutter\").Gutter,l=e(\"./layer/marker\").Marker,c=e(\"./layer/text\").Text,u=e(\"./layer/cursor\").Cursor,d=e(\"./scrollbar\").HScrollBar,h=e(\"./scrollbar\").VScrollBar,m=e(\"./renderloop\").RenderLoop,f=e(\"./layer/font_metrics\").FontMetrics,p=e(\"./lib/event_emitter\").EventEmitter;o.importCssString('.ace_editor {position: relative;overflow: hidden;font: 12px/normal \\'Monaco\\', \\'Menlo\\', \\'Ubuntu Mono\\', \\'Consolas\\', \\'source-code-pro\\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \\'\\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block;   }.ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");}.ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");}.ace_dark .ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_br1 {border-top-left-radius    : 3px;}.ace_br2 {border-top-right-radius   : 3px;}.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_text-input-ios {position: absolute !important;top: -100000px !important;left: -100000px !important;}',\"ace_editor.css\");var g=function(e,t){var n=this;this.container=e||o.createElement(\"div\"),this.$keepTextAreaAtCursor=!s.isOldIE,o.addCssClass(this.container,\"ace_editor\"),this.setTheme(t),this.$gutter=o.createElement(\"div\"),this.$gutter.className=\"ace_gutter\",this.container.appendChild(this.$gutter),this.$gutter.setAttribute(\"aria-hidden\",!0),this.scroller=o.createElement(\"div\"),this.scroller.className=\"ace_scroller\",this.container.appendChild(this.scroller),this.content=o.createElement(\"div\"),this.content.className=\"ace_content\",this.scroller.appendChild(this.content),this.$gutterLayer=new a(this.$gutter),this.$gutterLayer.on(\"changeGutterWidth\",this.onGutterResize.bind(this)),this.$markerBack=new l(this.content);var r=this.$textLayer=new c(this.content);this.canvas=r.element,this.$markerFront=new l(this.content),this.$cursorLayer=new u(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new h(this.container,this),this.scrollBarH=new d(this.container,this),this.scrollBarV.addEventListener(\"scroll\",(function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)})),this.scrollBarH.addEventListener(\"scroll\",(function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new f(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener(\"changeCharacterSize\",(function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal(\"changeCharacterSize\",e)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new m(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),i.resetOptions(this),i._emit(\"renderer\",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,p),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle(\"ace_nobold\",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off(\"changeNewLineMode\",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on(\"changeNewLineMode\",this.onChangeNewLineMode))},this.updateLines=function(e,t,n){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRow<t&&(this.$changedLines.lastRow=t)):this.$changedLines={firstRow:e,lastRow:t},this.$changedLines.lastRow<this.layerConfig.firstRow){if(!n)return;this.$changedLines.lastRow=this.layerConfig.lastRow}this.$changedLines.firstRow>this.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,r){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=e?1:0;var o=this.container;r||(r=o.clientHeight||o.scrollHeight),n||(n=o.clientWidth||o.scrollWidth);var i=this.$updateCachedSize(e,t,n,r);if(!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(i|this.$changes,!0):this.$loop.schedule(i|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,n,r){r-=this.$extraHeight||0;var o=0,i=this.$size,s={width:i.width,height:i.height,scrollerHeight:i.scrollerHeight,scrollerWidth:i.scrollerWidth};return r&&(e||i.height!=r)&&(i.height=r,o|=this.CHANGE_SIZE,i.scrollerHeight=i.height,this.$horizScroll&&(i.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+\"px\",o|=this.CHANGE_SCROLL),n&&(e||i.width!=n)&&(o|=this.CHANGE_SIZE,i.width=n,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+\"px\",i.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+\"px\",this.scroller.style.bottom=this.scrollBarH.getHeight()+\"px\",(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(o|=this.CHANGE_FULL)),i.$dirty=!n||!r,o&&this._signal(\"resize\",s),o},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption(\"animatedScroll\",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption(\"showInvisibles\",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption(\"showInvisibles\")},this.getDisplayIndentGuides=function(){return this.getOption(\"displayIndentGuides\")},this.setDisplayIndentGuides=function(e){this.setOption(\"displayIndentGuides\",e)},this.setShowPrintMargin=function(e){this.setOption(\"showPrintMargin\",e)},this.getShowPrintMargin=function(){return this.getOption(\"showPrintMargin\")},this.setPrintMarginColumn=function(e){this.setOption(\"printMarginColumn\",e)},this.getPrintMarginColumn=function(){return this.getOption(\"printMarginColumn\")},this.getShowGutter=function(){return this.getOption(\"showGutter\")},this.setShowGutter=function(e){return this.setOption(\"showGutter\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var n=this.session.selection.getCursor();n.column=0,e=this.$cursorLayer.getPixelPosition(n,!0),t*=this.session.getRowLength(n.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+\"px\",this.$gutterLineHighlight.style.height=t+\"px\"},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var e=o.createElement(\"div\");e.className=\"ace_layer ace_print-margin-layer\",this.$printMarginEl=o.createElement(\"div\"),this.$printMarginEl.className=\"ace_print-margin\",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+\"px\",t.visibility=this.$showPrintMargin?\"visible\":\"hidden\",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(this.$keepTextAreaAtCursor){var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,n=this.$cursorLayer.$pixelPos.left;t-=e.offset;var r=this.textarea.style,o=this.lineHeight;if(t<0||t>e.height-o)r.top=r.left=\"0\";else{var i=this.characterWidth;if(this.$composition){var s=this.textarea.value.replace(/^\\x01+/,\"\");i*=this.session.$getStringScreenWidth(s)[0]+2,o+=2}(n-=this.scrollLeft)>this.$size.scrollerWidth-i&&(n=this.$size.scrollerWidth-i),n+=this.gutterWidth,r.height=o+\"px\",r.width=i+\"px\",r.left=Math.min(n,this.$size.scrollerWidth-i)+\"px\",r.top=Math.min(t,this.$size.height-o)+\"px\"}}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow;return this.session.documentToScreenRow(t,0)*e.lineHeight-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var o=this.scrollMargin;o.top=0|e,o.bottom=0|t,o.right=0|r,o.left=0|n,o.v=o.top+o.bottom,o.h=o.left+o.right,o.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-o.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption(\"hScrollBarAlwaysVisible\",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption(\"vScrollBarAlwaysVisible\",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal(\"beforeRender\"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig(),n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var r=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;r>0&&(this.scrollTop=r,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-n.offset+\"px\",this.content.style.marginTop=-n.offset+\"px\",this.content.style.width=n.width+2*this.$padding+\"px\",this.content.style.height=n.minHeight+\"px\"}if(e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+\"px\",this.scroller.className=this.scrollLeft<=0?\"ace_scroller\":\"ace_scroller ace_scroll-left\"),e&this.CHANGE_FULL)return this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),void this._signal(\"afterRender\");if(e&this.CHANGE_SCROLL)return e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),void this._signal(\"afterRender\");e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal(\"afterRender\")}else this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var r=e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||r!=this.$vScroll){r!=this.$vScroll&&(this.$vScroll=r,this.scrollBarV.setVisible(r));var o=this.container.clientWidth;this.container.style.height=n+\"px\",this.$updateCachedSize(!0,this.$gutterWidth,o,n),this.desiredHeight=n,this._signal(\"autosize\")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength()*this.lineHeight,o=this.$getLongestLine(),i=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-o-2*this.$padding<0),s=this.$horizScroll!==i;s&&(this.$horizScroll=i,this.scrollBarH.setVisible(i));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var l=this.scrollTop%this.lineHeight,c=t.scrollerHeight+this.lineHeight,u=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;r+=u;var d=this.scrollMargin;this.session.setScrollTop(Math.max(-d.top,Math.min(this.scrollTop,r-t.scrollerHeight+d.bottom))),this.session.setScrollLeft(Math.max(-d.left,Math.min(this.scrollLeft,o+2*this.$padding-t.scrollerWidth+d.right)));var h=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-r+u<0||this.scrollTop>d.top),m=a!==h;m&&(this.$vScroll=h,this.scrollBarV.setVisible(h));var f,p,g=Math.ceil(c/this.lineHeight)-1,v=Math.max(0,Math.round((this.scrollTop-l)/this.lineHeight)),y=v+g,b=this.lineHeight;v=e.screenToDocumentRow(v,0);var _=e.getFoldLine(v);_&&(v=_.start.row),f=e.documentToScreenRow(v,0),p=e.getRowLength(v)*b,y=Math.min(e.screenToDocumentRow(y,0),e.getLength()-1),c=t.scrollerHeight+e.getRowLength(y)*b+p,l=this.scrollTop-f*b;var w=0;return this.layerConfig.width!=o&&(w=this.CHANGE_H_SCROLL),(s||m)&&(w=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal(\"scrollbarVisibilityChanged\"),m&&(o=this.$getLongestLine())),this.layerConfig={width:o,padding:this.$padding,firstRow:v,firstRowScreen:f,lastRow:y,lineHeight:b,characterWidth:this.characterWidth,minHeight:c,maxHeight:r,offset:l,gutterOffset:b?Math.max(0,Math.ceil((l+t.height-t.scrollerHeight)/b)):0,height:this.$size.scrollerHeight},w},this.$updateLines=function(){if(this.$changedLines){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(!(e>n.lastRow+1||t<n.firstRow))return t===1/0?(this.$showGutter&&this.$gutterLayer.update(n),void this.$textLayer.update(n)):(this.$textLayer.updateLines(n,e,t),!0)}},this.$getLongestLine=function(){var e=this.session.getScreenWidth();return this.showInvisibles&&!this.session.$useWrapMode&&(e+=1),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){if(0!==this.$size.scrollerHeight){var r=this.$cursorLayer.getPixelPosition(e),o=r.left,i=r.top,s=n&&n.top||0,a=n&&n.bottom||0,l=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;l+s>i?(t&&l+s>i+this.lineHeight&&(i-=t*this.$size.scrollerHeight),0===i&&(i=-this.scrollMargin.top),this.session.setScrollTop(i)):l+this.$size.scrollerHeight-a<i+this.lineHeight&&(t&&l+this.$size.scrollerHeight-a<i-this.lineHeight&&(i+=t*this.$size.scrollerHeight),this.session.setScrollTop(i+this.lineHeight-this.$size.scrollerHeight));var c=this.scrollLeft;c>o?(o<this.$padding+2*this.layerConfig.characterWidth&&(o=-this.scrollMargin.left),this.session.setScrollLeft(o)):c+this.$size.scrollerWidth<o+this.characterWidth?this.session.setScrollLeft(Math.round(o+this.characterWidth-this.$size.scrollerWidth)):c<=this.$padding&&o-c<this.characterWidth&&this.session.setScrollLeft(0)}},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(e){this.session.setScrollTop(e*this.lineHeight)},this.alignCursor=function(e,t){\"number\"==typeof e&&(e={row:e,column:0});var n=this.$cursorLayer.getPixelPosition(e),r=this.$size.scrollerHeight-this.lineHeight,o=n.top-r*(t||0);return this.session.setScrollTop(o),o},this.STEPS=8,this.$calcSteps=function(e,t){var n,r,o=0,i=this.STEPS,s=[];for(o=0;o<i;++o)s.push((n=o/this.STEPS,r=e,(t-e)*(Math.pow(n-1,3)+1)+r));return s},this.scrollToLine=function(e,t,n,r){var o=this.$cursorLayer.getPixelPosition({row:e,column:0}).top;t&&(o-=this.$size.scrollerHeight/2);var i=this.scrollTop;this.session.setScrollTop(o),!1!==n&&this.animateScrolling(i,r)},this.animateScrolling=function(e,t){var n=this.scrollTop;if(this.$animatedScroll){var r=this;if(e!=n){if(this.$scrollAnimation){var o=this.$scrollAnimation.steps;if(o.length&&(e=o[0])==n)return}var i=r.$calcSteps(e,n);this.$scrollAnimation={from:e,to:n,steps:i},clearInterval(this.$timer),r.session.setScrollTop(i.shift()),r.session.$scrollTop=n,this.$timer=setInterval((function(){i.length?(r.session.setScrollTop(i.shift()),r.session.$scrollTop=n):null!=n?(r.session.$scrollTop=-1,r.session.setScrollTop(n),n=null):(r.$timer=clearInterval(r.$timer),r.$scrollAnimation=null,t&&t())}),10)}}},this.scrollToY=function(e){this.scrollTop!==e&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=e)},this.scrollToX=function(e){this.scrollLeft!==e&&(this.scrollLeft=e),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollTo=function(e,t){this.session.setScrollTop(t),this.session.setScrollLeft(t)},this.scrollBy=function(e,t){t&&this.session.setScrollTop(this.session.getScrollTop()+t),e&&this.session.setScrollLeft(this.session.getScrollLeft()+e)},this.isScrollableBy=function(e,t){return t<0&&this.session.getScrollTop()>=1-this.scrollMargin.top||(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0)))},this.pixelToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=e+this.scrollLeft-n.left-this.$padding,o=r/this.characterWidth,i=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),s=Math.round(o);return{row:i,column:s,side:o-s>0?1:-1,offsetX:r}},this.screenToTextCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=e+this.scrollLeft-n.left-this.$padding,o=Math.round(r/this.characterWidth),i=(t+this.scrollTop-n.top)/this.lineHeight;return this.session.screenToDocumentPosition(i,Math.max(o,0),r)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),o=this.$padding+(this.session.$bidiHandler.isBidiRow(r.row,e)?this.session.$bidiHandler.getPosLeft(r.column):Math.round(r.column*this.characterWidth)),i=r.row*this.lineHeight;return{pageX:n.left+o-this.scrollLeft,pageY:n.top+i-this.scrollTop}},this.visualizeFocus=function(){o.addCssClass(this.container,\"ace_focus\")},this.visualizeBlur=function(){o.removeCssClass(this.container,\"ace_focus\")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,o.addCssClass(this.textarea,\"ace_composition\"),this.textarea.style.cssText=\"\",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(o.removeCssClass(this.textarea,\"ace_composition\"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null)},this.setTheme=function(e,t){var n=this;if(this.$themeId=e,n._dispatchEvent(\"themeChange\",{theme:e}),e&&\"string\"!=typeof e)s(e);else{var r=e||this.$options.theme.initialValue;i.loadModule([\"theme\",r],s)}function s(r){if(n.$themeId!=e)return t&&t();if(!r||!r.cssClass)throw new Error(\"couldn't load module \"+e+\" or it didn't call define\");o.importCssString(r.cssText,r.cssClass,n.container.ownerDocument),n.theme&&o.removeCssClass(n.container,n.theme.cssClass);var i=\"padding\"in r?r.padding:\"padding\"in(n.theme||{})?4:n.$padding;n.$padding&&i!=n.$padding&&n.setPadding(i),n.$theme=r.cssClass,n.theme=r,o.addCssClass(n.container,r.cssClass),o.setCssClass(n.container,\"ace_dark\",r.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent(\"themeLoaded\",{theme:r}),t&&t()}},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){o.setCssClass(this.container,e,!1!==t)},this.unsetStyle=function(e){o.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(g.prototype),i.defineOptions(g.prototype,\"renderer\",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){\"number\"==typeof e&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?\"block\":\"none\",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){o.setCssClass(this.$gutter,\"ace_fade-fold-widgets\",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight)return this.$gutterLineHighlight=o.createElement(\"div\"),this.$gutterLineHighlight.className=\"ace_gutter-active-line\",void this.$gutter.appendChild(this.$gutterLineHighlight);this.$gutterLineHighlight.style.display=e?\"\":\"none\",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){this.$hScrollBarAlwaysVisible&&this.$horizScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){this.$vScrollBarAlwaysVisible&&this.$vScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){\"number\"==typeof e&&(e+=\"px\"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){e=+e||0,this.$scrollPastEnd!=e&&(this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:\"./theme/textmate\",handlesSet:!0}}),t.VirtualRenderer=g})),ace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),o=e(\"../lib/net\"),i=e(\"../lib/event_emitter\").EventEmitter,s=e(\"../config\");function a(e,t){var n=function(e,t){var n=t.src;o.qualifyURL(e);try{return new Blob([n],{type:\"application/javascript\"})}catch(e){var r=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder);return r.append(n),r.getBlob(\"application/javascript\")}}(e,t),r=(window.URL||window.webkitURL).createObjectURL(n);return new Worker(r)}var l=function(t,n,r,o,i){if(this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl),s.get(\"packaged\")||!e.toUrl)o=o||s.moduleUrl(n.id,\"worker\");else{var l=this.$normalizePath;o=o||l(e.toUrl(\"ace/worker/worker.js\",null,\"_\"));var c={};t.forEach((function(t){c[t]=l(e.toUrl(t,null,\"_\").replace(/(\\.js)?(\\?.*)?$/,\"\"))}))}this.$worker=a(o,n),i&&this.send(\"importScripts\",i),this.$worker.postMessage({init:!0,tlns:c,module:n.id,classname:r}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){r.implement(this,i),this.onMessage=function(e){var t=e.data;switch(t.type){case\"event\":this._signal(t.name,{data:t.data});break;case\"call\":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case\"error\":this.reportError(t.data);break;case\"log\":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return o.qualifyURL(e)},this.terminate=function(){this._signal(\"terminate\",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off(\"change\",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var r=this.callbackId++;this.callbacks[r]=n,t.push(r)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(e){console.error(e.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call(\"setValue\",[e.getValue()]),e.on(\"change\",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),\"insert\"==e.action?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;e&&(this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call(\"setValue\",[this.$doc.getValue()]):this.emit(\"change\",{data:e}))}}).call(l.prototype);var c=function(e,t,n){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var r=null,o=!1,a=Object.create(i),l=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){l.messageBuffer.push(e),r&&(o?setTimeout(c):c())},this.setEmitSync=function(e){o=e};var c=function(){var e=l.messageBuffer.shift();e.command?r[e.command].apply(r,e.args):e.event&&a._signal(e.event,e.data)};a.postMessage=function(e){l.onMessage({data:e})},a.callback=function(e,t){this.postMessage({type:\"call\",id:t,data:e})},a.emit=function(e,t){this.postMessage({type:\"event\",name:e,data:t})},s.loadModule([\"worker\",t],(function(e){for(r=new e[n](a);l.messageBuffer.length;)c()}))};c.prototype=l.prototype,t.UIWorkerClient=c,t.WorkerClient=l,t.createWorker=a})),ace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"],(function(e,t,n){\"use strict\";var r=e(\"./range\").Range,o=e(\"./lib/event_emitter\").EventEmitter,i=e(\"./lib/oop\"),s=function(e,t,n,r,o,i){var s=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=o,this.othersClass=i,this.$onUpdate=this.onUpdate.bind(this),this.doc.on(\"change\",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout((function(){s.onCursorChange()}))},this.$pos=n;var a=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=a.length,this.setup(),e.selection.on(\"changeCursor\",this.$onCursorChange)};(function(){i.implement(this,o),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var o=this.pos;o.$insertRight=!0,o.detach(),o.markerId=n.addMarker(new r(o.row,o.column,o.row,o.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(n){var r=t.createAnchor(n.row,n.column);r.$insertRight=!0,r.detach(),e.others.push(r)})),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var e=this.session,t=this;this.othersActive=!0,this.others.forEach((function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e<this.others.length;e++)this.session.removeMarker(this.others[e].markerId)}},this.onUpdate=function(e){if(this.$updating)return this.updateAnchors(e);var t=e;if(t.start.row===t.end.row&&t.start.row===this.pos.row){this.$updating=!0;var n=\"insert\"===e.action?t.end.column-t.start.column:t.start.column-t.end.column,o=t.start.column>=this.pos.column&&t.start.column<=this.pos.column+this.length+1,i=t.start.column-this.pos.column;if(this.updateAnchors(e),o&&(this.length+=n),o&&!this.session.$fromUndo)if(\"insert\"===e.action)for(var s=this.others.length-1;s>=0;s--){var a={row:(l=this.others[s]).row,column:l.column+i};this.doc.insertMergedLines(a,e.lines)}else if(\"remove\"===e.action)for(s=this.others.length-1;s>=0;s--){var l;a={row:(l=this.others[s]).row,column:l.column+i};this.doc.remove(new r(a.row,a.column,a.row,a.column-n))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,n=function(n,o){t.removeMarker(n.markerId),n.markerId=t.addMarker(new r(n.row,n.column,n.row,n.column+e.length),o,null,!1)};n(this.pos,this.mainClass);for(var o=this.others.length;o--;)n(this.others[o],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit(\"cursorEnter\",e)):(this.hideOtherMarkers(),this._emit(\"cursorLeave\",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener(\"change\",this.$onUpdate),this.session.selection.removeEventListener(\"changeCursor\",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,n=0;n<t;n++)e.undo(!0);this.selectionBefore&&this.session.selection.fromJSON(this.selectionBefore)}}}).call(s.prototype),t.PlaceHolder=s})),ace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],(function(e,t,n){var r=e(\"../lib/event\"),o=e(\"../lib/useragent\");function i(e,t){return e.row==t.row&&e.column==t.column}t.onMouseDown=function(e){var t=e.domEvent,n=t.altKey,s=t.shiftKey,a=t.ctrlKey,l=e.getAccelKey(),c=e.getButton();if(a&&o.isMac&&(c=t.button),e.editor.inMultiSelectMode&&2==c)e.editor.textInput.onContextMenu(e.domEvent);else if(a||n||l){if(0===c){var u,d=e.editor,h=d.selection,m=d.inMultiSelectMode,f=e.getDocumentPosition(),p=h.getCursor(),g=e.inSelection()||h.isEmpty()&&i(f,p),v=e.x,y=e.y,b=d.session,_=d.renderer.pixelToScreenCoordinates(v,y),w=_;if(d.$mouseHandler.$enableJumpToDef)a&&n||l&&n?u=s?\"block\":\"add\":n&&d.$blockSelectEnabled&&(u=\"block\");else if(l&&!n){if(u=\"add\",!m&&s)return}else n&&d.$blockSelectEnabled&&(u=\"block\");if(u&&o.isMac&&t.ctrlKey&&d.$mouseHandler.cancelContextMenu(),\"add\"==u){if(!m&&g)return;if(!m){var x=h.toOrientedRange();d.addSelectionMarker(x)}var C=h.rangeList.rangeAtPoint(f);d.$blockScrolling++,d.inVirtualSelectionMode=!0,s&&(C=null,x=h.ranges[0]||x,d.removeSelectionMarker(x)),d.once(\"mouseup\",(function(){var e=h.toOrientedRange();C&&e.isEmpty()&&i(C.cursor,e.cursor)?h.substractPoint(e.cursor):(s?h.substractPoint(x.cursor):x&&(d.removeSelectionMarker(x),h.addRange(x)),h.addRange(e)),d.$blockScrolling--,d.inVirtualSelectionMode=!1}))}else if(\"block\"==u){var k;e.stop(),d.inVirtualSelectionMode=!0;var D=[];d.$blockScrolling++,m&&!l?h.toSingleRange():!m&&l&&(k=h.toOrientedRange(),d.addSelectionMarker(k)),s?_=b.documentToScreenPosition(h.lead):h.moveToPosition(f),d.$blockScrolling--,w={row:-1,column:-1};var S=function(){var e=d.renderer.pixelToScreenCoordinates(v,y),t=b.screenToDocumentPosition(e.row,e.column,e.offsetX);i(w,e)&&i(t,h.lead)||(w=e,d.$blockScrolling++,d.selection.moveToPosition(t),d.renderer.scrollCursorIntoView(),d.removeSelectionMarkers(D),D=h.rectangularRangeBlock(w,_),d.$mouseHandler.$clickSelection&&1==D.length&&D[0].isEmpty()&&(D[0]=d.$mouseHandler.$clickSelection.clone()),D.forEach(d.addSelectionMarker,d),d.updateSelectionMarkers(),d.$blockScrolling--)};r.capture(d.container,(function(e){v=e.clientX,y=e.clientY}),(function(e){clearInterval(A),d.removeSelectionMarkers(D),D.length||(D=[h.toOrientedRange()]),d.$blockScrolling++,k&&(d.removeSelectionMarker(k),h.toSingleRange(k));for(var t=0;t<D.length;t++)h.addRange(D[t]);d.inVirtualSelectionMode=!1,d.$mouseHandler.$clickSelection=null,d.$blockScrolling--}));var A=setInterval((function(){S()}),20);return e.preventDefault()}}}else 0===c&&e.editor.inMultiSelectMode&&e.editor.exitMultiSelectMode()}})),ace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"],(function(e,t,n){t.defaultCommands=[{name:\"addCursorAbove\",exec:function(e){e.selectMoreLines(-1)},bindKey:{win:\"Ctrl-Alt-Up\",mac:\"Ctrl-Alt-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelow\",exec:function(e){e.selectMoreLines(1)},bindKey:{win:\"Ctrl-Alt-Down\",mac:\"Ctrl-Alt-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorAboveSkipCurrent\",exec:function(e){e.selectMoreLines(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Up\",mac:\"Ctrl-Alt-Shift-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelowSkipCurrent\",exec:function(e){e.selectMoreLines(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Down\",mac:\"Ctrl-Alt-Shift-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreBefore\",exec:function(e){e.selectMore(-1)},bindKey:{win:\"Ctrl-Alt-Left\",mac:\"Ctrl-Alt-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreAfter\",exec:function(e){e.selectMore(1)},bindKey:{win:\"Ctrl-Alt-Right\",mac:\"Ctrl-Alt-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextBefore\",exec:function(e){e.selectMore(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Left\",mac:\"Ctrl-Alt-Shift-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextAfter\",exec:function(e){e.selectMore(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Right\",mac:\"Ctrl-Alt-Shift-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"splitIntoLines\",exec:function(e){e.multiSelect.splitIntoLines()},bindKey:{win:\"Ctrl-Alt-L\",mac:\"Ctrl-Alt-L\"},readOnly:!0},{name:\"alignCursors\",exec:function(e){e.alignCursors()},bindKey:{win:\"Ctrl-Alt-A\",mac:\"Ctrl-Alt-A\"},scrollIntoView:\"cursor\"},{name:\"findAll\",exec:function(e){e.findAll()},bindKey:{win:\"Ctrl-Alt-K\",mac:\"Ctrl-Alt-G\"},scrollIntoView:\"cursor\",readOnly:!0}],t.multiSelectCommands=[{name:\"singleSelection\",bindKey:\"esc\",exec:function(e){e.exitMultiSelectMode()},scrollIntoView:\"cursor\",readOnly:!0,isAvailable:function(e){return e&&e.inMultiSelectMode}}];var r=e(\"../keyboard/hash_handler\").HashHandler;t.keyboardHandler=new r(t.multiSelectCommands)})),ace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"],(function(e,t,n){var r=e(\"./range_list\").RangeList,o=e(\"./range\").Range,i=e(\"./selection\").Selection,s=e(\"./mouse/multi_select_handler\").onMouseDown,a=e(\"./lib/event\"),l=e(\"./lib/lang\"),c=e(\"./commands/multi_select_commands\");t.commands=c.defaultCommands.concat(c.multiSelectCommands);var u=new(0,e(\"./search\").Search);var d=e(\"./edit_session\").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(d.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(e,t){if(e){if(!this.inMultiSelectMode&&0===this.rangeCount){var n=this.toOrientedRange();if(this.rangeList.add(n),this.rangeList.add(e),2!=this.rangeList.ranges.length)return this.rangeList.removeAll(),t||this.fromOrientedRange(e);this.rangeList.removeAll(),this.rangeList.add(n),this.$onAddRange(n)}e.cursor||(e.cursor=e.end);var r=this.rangeList.add(e);return this.$onAddRange(e),r.length&&this.$onRemoveRange(r),this.rangeCount>1&&!this.inMultiSelectMode&&(this._signal(\"multiSelect\"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal(\"addRange\",{range:e})},this.$onRemoveRange=function(e){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal(\"removeRange\",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal(\"singleSelect\"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(t=t||this.ranges[0])&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new r,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=o.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{n=this.getRange();var r=this.isBackwards(),i=n.start.row,s=n.end.row;if(i==s){if(r)var a=n.end,l=n.start;else a=n.start,l=n.end;return this.addRange(o.fromPoints(l,l)),void this.addRange(o.fromPoints(a,a))}var c=[],u=this.getLineRange(i,!0);u.start.column=n.start.column,c.push(u);for(var d=i+1;d<s;d++)c.push(this.getLineRange(d,!0));(u=this.getLineRange(s,!0)).end.column=n.end.column,c.push(u),c.forEach(this.addRange,this)}},this.toggleBlockSelection=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=o.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.selectionLead),i=this.session.documentToScreenPosition(this.selectionAnchor);this.rectangularRangeBlock(r,i).forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],i=e.column<t.column;if(i)var s=e.column,a=t.column,l=e.offsetX,c=t.offsetX;else s=t.column,a=e.column,l=t.offsetX,c=e.offsetX;var u,d,h=e.row<t.row;if(h)var m=e.row,f=t.row;else m=t.row,f=e.row;s<0&&(s=0),m<0&&(m=0),m==f&&(n=!0);for(var p=m;p<=f;p++){var g=o.fromPoints(this.session.screenToDocumentPosition(p,s,l),this.session.screenToDocumentPosition(p,a,c));if(g.isEmpty()){if(v&&(u=g.end,d=v,u.row==d.row&&u.column==d.column))break;var v=g.end}g.cursor=i?g.start:g.end,r.push(g)}if(h&&r.reverse(),!n){for(var y=r.length-1;r[y].isEmpty()&&y>0;)y--;if(y>0)for(var b=0;r[b].isEmpty();)b++;for(var _=y;_>=b;_--)r[_].isEmpty()&&r.splice(_,1)}return r}}.call(i.prototype);var h=e(\"./editor\").Editor;function m(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on(\"changeSession\",e.$multiselectOnSessionChange),e.on(\"mousedown\",s),e.commands.addCommands(c.defaultCommands),function(e){var t=e.textInput.getElement(),n=!1;function r(t){n&&(e.renderer.setMouseCursor(\"\"),n=!1)}a.addListener(t,\"keydown\",(function(t){var o=18==t.keyCode&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&o?n||(e.renderer.setMouseCursor(\"crosshair\"),n=!0):n&&r()})),a.addListener(t,\"keyup\",r),a.addListener(t,\"blur\",r)}(e))}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,\"ace_selection\",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(e.marker){this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);-1!=t&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,n=e.length;n--;){var r=e[n];if(r.marker){this.session.removeMarker(r.marker);var o=t.indexOf(r);-1!=o&&t.splice(o,1)}}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle(\"ace_multiselect\"),this.keyBinding.addKeyboardHandler(c.keyboardHandler),this.commands.setDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle(\"ace_multiselect\"),this.keyBinding.removeKeyboardHandler(c.keyboardHandler),this.commands.removeDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit(\"changeSelection\"))},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(n.multiSelect){if(t.multiSelectAction)\"forEach\"==t.multiSelectAction?r=n.forEachSelection(t,e.args):\"forEachLine\"==t.multiSelectAction?r=n.forEachSelection(t,e.args,!0):\"single\"==t.multiSelectAction?(n.exitMultiSelectMode(),r=t.exec(n,e.args||{})):r=t.multiSelectAction(n,e.args||{});else{var r=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}return r}},this.forEachSelection=function(e,t,n){if(!this.inVirtualSelectionMode){var r,o=n&&n.keepOrder,s=1==n||n&&n.$byLines,a=this.session,l=this.selection,c=l.rangeList,u=(o?l:c).ranges;if(!u.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var d=l._eventRegistry;l._eventRegistry={};var h=new i(a);this.inVirtualSelectionMode=!0;for(var m=u.length;m--;){if(s)for(;m>0&&u[m].start.row==u[m-1].end.row;)m--;h.fromOrientedRange(u[m]),h.index=m,this.selection=a.selection=h;var f=e.exec?e.exec(this,t||{}):e(this,t||{});r||void 0===f||(r=f),h.toOrientedRange(u[m])}h.detach(),this.selection=a.selection=l,this.inVirtualSelectionMode=!1,l._eventRegistry=d,l.mergeOverlappingRanges();var p=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),p&&p.from==p.to&&this.renderer.animateScrolling(p.from),r}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e=\"\";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,n=[],r=0;r<t.length;r++)n.push(this.session.getTextRange(t[r]));var o=this.session.getDocument().getNewLineCharacter();(e=n.join(o)).length==(n.length-1)*o.length&&(e=\"\")}else this.selection.isEmpty()||(e=this.session.getTextRange(this.getSelectionRange()));return e},this.$checkMultiselectChange=function(e,t){if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var n=this.multiSelect.ranges[0];if(this.multiSelect.isEmpty()&&t==this.multiSelect.anchor)return;var r=t==this.multiSelect.anchor?n.cursor==n.start?n.end:n.start:n.cursor;r.row==t.row&&this.session.$clipPositionToDocument(r.row,r.column).column==t.column||this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange())}},this.findAll=function(e,t,n){if((t=t||{}).needle=e||t.needle,null==t.needle){var r=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange();t.needle=this.session.getTextRange(r)}this.$search.set(t);var o=this.$search.findAll(this.session);if(!o.length)return 0;this.$blockScrolling+=1;var i=this.multiSelect;n||i.toSingleRange(o[0]);for(var s=o.length;s--;)i.addRange(o[s],!0);return r&&i.rangeList.rangeAtPoint(r.start)&&i.addRange(r,!0),this.$blockScrolling-=1,o.length},this.selectMoreLines=function(e,t){var n=this.selection.toOrientedRange(),r=n.cursor==n.end,i=this.session.documentToScreenPosition(n.cursor);this.selection.$desiredColumn&&(i.column=this.selection.$desiredColumn);var s,a=this.session.screenToDocumentPosition(i.row+e,i.column);if(n.isEmpty())c=a;else var l=this.session.documentToScreenPosition(r?n.end:n.start),c=this.session.screenToDocumentPosition(l.row+e,l.column);r?(s=o.fromPoints(a,c)).cursor=s.start:(s=o.fromPoints(c,a)).cursor=s.end;if(s.desiredColumn=i.column,this.selection.inMultiSelectMode){if(t)var u=n.cursor}else this.selection.addRange(n);this.selection.addRange(s),u&&this.selection.substractPoint(u)},this.transposeSelections=function(e){for(var t=this.session,n=t.multiSelect,r=n.ranges,o=r.length;o--;){if((a=r[o]).isEmpty()){var i=t.getWordRange(a.start.row,a.start.column);a.start.row=i.start.row,a.start.column=i.start.column,a.end.row=i.end.row,a.end.column=i.end.column}}n.mergeOverlappingRanges();var s=[];for(o=r.length;o--;){var a=r[o];s.unshift(t.getTextRange(a))}e<0?s.unshift(s.pop()):s.push(s.shift());for(o=r.length;o--;){i=(a=r[o]).clone();t.replace(a,s[o]),a.start.row=i.start.row,a.start.column=i.start.column}},this.selectMore=function(e,t,n){var r=this.session,o=r.multiSelect.toOrientedRange();if(!o.isEmpty()||((o=r.getWordRange(o.start.row,o.start.column)).cursor=-1==e?o.start:o.end,this.multiSelect.addRange(o),!n)){var i=r.getTextRange(o),s=function(e,t,n){return u.$options.wrap=!0,u.$options.needle=t,u.$options.backwards=-1==n,u.find(e)}(r,i,e);s&&(s.cursor=-1==e?s.start:s.end,this.$blockScrolling+=1,this.session.unfold(s),this.multiSelect.addRange(s),this.$blockScrolling-=1,this.renderer.scrollCursorIntoView(null,.5)),t&&this.multiSelect.substractPoint(o.cursor)}},this.alignCursors=function(){var e=this.session,t=e.multiSelect,n=t.ranges,r=-1,i=n.filter((function(e){if(e.cursor.row==r)return!0;r=e.cursor.row}));if(n.length&&i.length!=n.length-1){i.forEach((function(e){t.substractPoint(e.cursor)}));var s=0,a=1/0,c=n.map((function(t){var n=t.cursor,r=e.getLine(n.row).substr(n.column).search(/\\S/g);return-1==r&&(r=0),n.column>s&&(s=n.column),r<a&&(a=r),r}));n.forEach((function(t,n){var r=t.cursor,i=s-r.column,u=c[n]-a;i>u?e.insert(r,l.stringRepeat(\" \",i-u)):e.remove(new o(r.row,r.column,r.row,r.column-i+u)),t.start.column=t.end.column=s,t.start.row=t.end.row=r.row,t.cursor=t.end})),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var u=this.selection.getRange(),d=u.start.row,h=u.end.row,m=d==h;if(m){var f,p=this.session.getLength();do{f=this.session.getLine(h)}while(/[=:]/.test(f)&&++h<p);do{f=this.session.getLine(d)}while(/[=:]/.test(f)&&--d>0);d<0&&(d=0),h>=p&&(h=p-1)}var g=this.session.removeFullLines(d,h);g=this.$reAlignText(g,m),this.session.insert({row:d,column:0},g.join(\"\\n\")+\"\\n\"),m||(u.start.column=0,u.end.column=g[g.length-1].length),this.selection.setRange(u)}},this.$reAlignText=function(e,t){var n,r,o,i=!0,s=!0;return e.map((function(e){var t=e.match(/(\\s*)(.*?)(\\s*)([=:].*)/);return t?null==n?(n=t[1].length,r=t[2].length,o=t[3].length,t):(n+r+o!=t[1].length+t[2].length+t[3].length&&(s=!1),n!=t[1].length&&(i=!1),n>t[1].length&&(n=t[1].length),r<t[2].length&&(r=t[2].length),o>t[3].length&&(o=t[3].length),t):[e]})).map(t?c:i?s?function(e){return e[2]?a(n+r-e[2].length)+e[2]+a(o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}:c:function(e){return e[2]?a(n)+e[2]+a(o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]});function a(e){return l.stringRepeat(\" \",e)}function c(e){return e[2]?a(n)+e[2]+a(r-e[2].length+o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}}}).call(h.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off(\"addRange\",this.$onAddRange),n.multiSelect.off(\"removeRange\",this.$onRemoveRange),n.multiSelect.off(\"multiSelect\",this.$onMultiSelect),n.multiSelect.off(\"singleSelect\",this.$onSingleSelect),n.multiSelect.lead.off(\"change\",this.$checkMultiselectChange),n.multiSelect.anchor.off(\"change\",this.$checkMultiselectChange)),t&&(t.multiSelect.on(\"addRange\",this.$onAddRange),t.multiSelect.on(\"removeRange\",this.$onRemoveRange),t.multiSelect.on(\"multiSelect\",this.$onMultiSelect),t.multiSelect.on(\"singleSelect\",this.$onSingleSelect),t.multiSelect.lead.on(\"change\",this.$checkMultiselectChange),t.multiSelect.anchor.on(\"change\",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e(\"./config\").defineOptions(h.prototype,\"editor\",{enableMultiselect:{set:function(e){m(this),e?(this.on(\"changeSession\",this.$multiselectOnSessionChange),this.on(\"mousedown\",s)):(this.off(\"changeSession\",this.$multiselectOnSessionChange),this.off(\"mousedown\",s))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})})),ace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../../range\").Range,o=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?\"start\":\"markbeginend\"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?\"end\":\"\"},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var o=/\\S/,i=e.getLine(t),s=i.search(o);if(-1!=s){for(var a=n||i.length,l=e.getLength(),c=t,u=t;++t<l;){var d=e.getLine(t).search(o);if(-1!=d){if(d<=s)break;u=t}}if(u>c){var h=e.getLine(u).length;return new r(c,a,u,h)}}},this.openingBracketBlock=function(e,t,n,o,i){var s={row:n,column:o+1},a=e.$findClosingBracket(t,s,i);if(a){var l=e.foldWidgets[a.row];return null==l&&(l=e.getFoldWidget(a.row)),\"start\"==l&&a.row>s.row&&(a.row--,a.column=e.getLine(a.row).length),r.fromPoints(s,a)}},this.closingBracketBlock=function(e,t,n,o,i){var s={row:n,column:o},a=e.$findOpeningBracket(t,s);if(a)return a.column++,s.column--,r.fromPoints(a,s)}}).call(o.prototype)})),ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',e(\"../lib/dom\").importCssString(t.cssText,t.cssClass)})),ace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"],(function(e,t,n){\"use strict\";e(\"./lib/oop\");var r=e(\"./lib/dom\");e(\"./range\").Range;function o(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on(\"change\",this.updateOnChange),this.session.on(\"changeFold\",this.updateOnFold),this.session.on(\"changeEditor\",this.$onChangeEditor)}(function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach((function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)})),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on(\"beforeRender\",this.measureWidgets),e.renderer.on(\"afterRender\",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off(\"beforeRender\",this.measureWidgets),t.renderer.off(\"afterRender\",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach((function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))}))}},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(n&&e.action){for(var r=e.data,o=r.start.row,i=r.end.row,s=\"add\"==e.action,a=o+1;a<i;a++)n[a]&&(n[a].hidden=s);n[i]&&(s?n[o]?n[i].hidden=s:n[o]=n[i]:(n[o]==n[i]&&(n[o]=void 0),n[i].hidden=s))}},this.updateOnChange=function(e){var t=this.session.lineWidgets;if(t){var n=e.start.row,r=e.end.row-n;if(0===r);else if(\"remove\"==e.action){t.splice(n+1,r).forEach((function(e){e&&this.removeLineWidget(e)}),this),this.$updateRows()}else{var o=new Array(r);o.unshift(n,0),t.splice.apply(t,o),this.$updateRows()}}},this.$updateRows=function(){var e=this.session.lineWidgets;if(e){var t=!0;e.forEach((function(e,n){if(e)for(t=!1,e.row=n;e.$oldWidget;)e.$oldWidget.row=n,e=e.$oldWidget})),t&&(this.session.lineWidgets=null)}},this.addLineWidget=function(e){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength()));var t=this.session.lineWidgets[e.row];t&&(e.$oldWidget=t,t.el&&t.el.parentNode&&(t.el.parentNode.removeChild(t.el),t._inDocument=!1)),this.session.lineWidgets[e.row]=e,e.session=this.session;var n=this.editor.renderer;e.html&&!e.el&&(e.el=r.createElement(\"div\"),e.el.innerHTML=e.html),e.el&&(r.addCssClass(e.el,\"ace_lineWidgetContainer\"),e.el.style.position=\"absolute\",e.el.style.zIndex=5,n.container.appendChild(e.el),e._inDocument=!0),e.coverGutter||(e.el.style.zIndex=3),null==e.pixelHeight&&(e.pixelHeight=e.el.offsetHeight),null==e.rowCount&&(e.rowCount=e.pixelHeight/n.layerConfig.lineHeight);var o=this.session.getFoldAt(e.row,0);if(e.$fold=o,o){var i=this.session.lineWidgets;e.row!=o.end.row||i[o.start.row]?e.hidden=!0:i[o.start.row]=e}return this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows(),this.renderWidgets(null,n),this.onWidgetChanged(e),e},this.removeLineWidget=function(e){if(e._inDocument=!1,e.session=null,e.el&&e.el.parentNode&&e.el.parentNode.removeChild(e.el),e.editor&&e.editor.destroy)try{e.editor.destroy()}catch(e){}if(this.session.lineWidgets){var t=this.session.lineWidgets[e.row];if(t==e)this.session.lineWidgets[e.row]=e.$oldWidget,e.$oldWidget&&this.onWidgetChanged(e.$oldWidget);else for(;t;){if(t.$oldWidget==e){t.$oldWidget=e.$oldWidget;break}t=t.$oldWidget}}this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows()},this.getWidgetsAtRow=function(e){for(var t=this.session.lineWidgets,n=t&&t[e],r=[];n;)r.push(n),n=n.$oldWidget;return r},this.onWidgetChanged=function(e){this.session._changedWidgets.push(e),this.editor&&this.editor.renderer.updateFull()},this.measureWidgets=function(e,t){var n=this.session._changedWidgets,r=t.layerConfig;if(n&&n.length){for(var o=1/0,i=0;i<n.length;i++){var s=n[i];if(s&&s.el&&s.session==this.session){if(!s._inDocument){if(this.session.lineWidgets[s.row]!=s)continue;s._inDocument=!0,t.container.appendChild(s.el)}s.h=s.el.offsetHeight,s.fixedWidth||(s.w=s.el.offsetWidth,s.screenWidth=Math.ceil(s.w/r.characterWidth));var a=s.h/r.lineHeight;s.coverLine&&(a-=this.session.getRowLineCount(s.row))<0&&(a=0),s.rowCount!=a&&(s.rowCount=a,s.row<o&&(o=s.row))}}o!=1/0&&(this.session._emit(\"changeFold\",{data:{start:{row:o}}}),this.session.lineWidgetWidth=null),this.session._changedWidgets=[]}},this.renderWidgets=function(e,t){var n=t.layerConfig,r=this.session.lineWidgets;if(r){for(var o=Math.min(this.firstRow,n.firstRow),i=Math.max(this.lastRow,n.lastRow,r.length);o>0&&!r[o];)o--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var s=o;s<=i;s++){var a=r[s];if(a&&a.el)if(a.hidden)a.el.style.top=-100-(a.pixelHeight||0)+\"px\";else{a._inDocument||(a._inDocument=!0,t.container.appendChild(a.el));var l=t.$cursorLayer.getPixelPosition({row:s,column:0},!0).top;a.coverLine||(l+=n.lineHeight*this.session.getRowLineCount(a.row)),a.el.style.top=l-n.offset+\"px\";var c=a.coverGutter?0:t.gutterWidth;a.fixedWidth||(c-=t.scrollLeft),a.el.style.left=c+\"px\",a.fullWidth&&a.screenWidth&&(a.el.style.minWidth=n.width+2*n.padding+\"px\"),a.fixedWidth?a.el.style.right=t.scrollBar.getWidth()+\"px\":a.el.style.right=\"\"}}}}}).call(o.prototype),t.LineWidgets=o})),ace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../line_widgets\").LineWidgets,o=e(\"../lib/dom\"),i=e(\"../range\").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),a=s.row,l=n.widgetManager.getWidgetsAtRow(a).filter((function(e){return\"errorMarker\"==e.type}))[0];l?l.destroy():a-=t;var c,u=function(e,t,n){var r=e.getAnnotations().sort(i.comparePoints);if(r.length){var o=function(e,t,n){for(var r=0,o=e.length-1;r<=o;){var i=r+o>>1,s=n(t,e[i]);if(s>0)r=i+1;else{if(!(s<0))return i;o=i-1}}return-(r+1)}(r,{row:t,column:-1},i.comparePoints);o<0&&(o=-o-1),o>=r.length?o=n>0?0:r.length-1:0===o&&n<0&&(o=r.length-1);var s=r[o];if(s&&n){if(s.row===t){do{s=r[o+=n]}while(s&&s.row===t);if(!s)return r.slice()}var a=[];t=s.row;do{a[n<0?\"unshift\":\"push\"](s),s=r[o+=n]}while(s&&s.row==t);return a.length&&a}}}(n,a,t);if(u){var d=u[0];s.column=(d.pos&&\"number\"!=typeof d.column?d.pos.sc:d.column)||0,s.row=d.row,c=e.renderer.$gutterLayer.$annotations[s.row]}else{if(l)return;c={text:[\"Looks good!\"],className:\"ace_ok\"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:o.createElement(\"div\"),type:\"errorMarker\"},m=h.el.appendChild(o.createElement(\"div\")),f=h.el.appendChild(o.createElement(\"div\"));f.className=\"error_widget_arrow \"+c.className;var p=e.renderer.$cursorLayer.getPixelPosition(s).left;f.style.left=p+e.renderer.gutterWidth-5+\"px\",h.el.className=\"error_widget_wrapper\",m.className=\"error_widget \"+c.className,m.innerHTML=c.text.join(\"<br>\"),m.appendChild(o.createElement(\"div\"));var g=function(e,t,n){if(0===t&&(\"esc\"===n||\"return\"===n))return h.destroy(),{command:\"null\"}};h.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(g),n.widgetManager.removeLineWidget(h),e.off(\"changeSelection\",h.destroy),e.off(\"changeSession\",h.destroy),e.off(\"mouseup\",h.destroy),e.off(\"change\",h.destroy))},e.keyBinding.addKeyboardHandler(g),e.on(\"changeSelection\",h.destroy),e.on(\"changeSession\",h.destroy),e.on(\"mouseup\",h.destroy),e.on(\"change\",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},o.importCssString(\"    .error_widget_wrapper {        background: inherit;        color: inherit;        border:none    }    .error_widget {        border-top: solid 2px;        border-bottom: solid 2px;        margin: 5px 0;        padding: 10px 40px;        white-space: pre-wrap;    }    .error_widget.ace_error, .error_widget_arrow.ace_error{        border-color: #ff5a5a    }    .error_widget.ace_warning, .error_widget_arrow.ace_warning{        border-color: #F1D817    }    .error_widget.ace_info, .error_widget_arrow.ace_info{        border-color: #5a5a5a    }    .error_widget.ace_ok, .error_widget_arrow.ace_ok{        border-color: #5aaa5a    }    .error_widget_arrow {        position: absolute;        border: solid 5px;        border-top-color: transparent!important;        border-right-color: transparent!important;        border-left-color: transparent!important;        top: -5px;    }\",\"\")})),ace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"],(function(e,t,r){\"use strict\";e(\"./lib/fixoldbrowsers\");var o=e(\"./lib/dom\"),i=e(\"./lib/event\"),s=e(\"./editor\").Editor,a=e(\"./edit_session\").EditSession,l=e(\"./undomanager\").UndoManager,c=e(\"./virtual_renderer\").VirtualRenderer;e(\"./worker/worker_client\"),e(\"./keyboard/hash_handler\"),e(\"./placeholder\"),e(\"./multi_select\"),e(\"./mode/folding/fold_mode\"),e(\"./theme/textmate\"),e(\"./ext/error_marker\"),t.config=e(\"./config\"),t.acequire=e,t.define=n.amdD,t.edit=function(e){if(\"string\"==typeof e){var n=e;if(!(e=document.getElementById(n)))throw new Error(\"ace.edit can't find div #\"+n)}if(e&&e.env&&e.env.editor instanceof s)return e.env.editor;var r=\"\";if(e&&/input|textarea/i.test(e.tagName)){var a=e;r=a.value,e=o.createElement(\"pre\"),a.parentNode.replaceChild(e,a)}else e&&(r=o.getInnerText(e),e.innerHTML=\"\");var l=t.createEditSession(r),u=new s(new c(e));u.setSession(l);var d={document:l,editor:u,onResize:u.resize.bind(u,null)};return a&&(d.textarea=a),i.addListener(window,\"resize\",d.onResize),u.on(\"destroy\",(function(){i.removeListener(window,\"resize\",d.onResize),d.editor.container.env=null})),u.container.env=u.env=d,u},t.createEditSession=function(e,t){var n=new a(e,t);return n.setUndoManager(new l),n},t.EditSession=a,t.UndoManager=l,t.version=\"1.2.9\"})),ace.acequire([\"ace/ace\"],(function(e){for(var t in e&&(e.config.init(!0),e.define=ace.define),window.ace||(window.ace=e),e)e.hasOwnProperty(t)&&(window.ace[t]=e[t])})),e.exports=window.ace.acequire(\"ace/ace\")},8750:(e,t,n)=>{ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],(function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),o=e(\"./text_highlight_rules\").TextHighlightRules,i=function(){this.$rules={start:[{token:\"variable\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"text\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment.start\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],string:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],comment:[{token:\"comment.end\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]}};r.inherits(i,o),t.JsonHighlightRules=i})),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],(function(e,t,n){\"use strict\";var r=e(\"../range\").Range,o=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\\s+$/.test(e)&&/^\\s*\\}/.test(t)},this.autoOutdent=function(e,t){var n=e.getLine(t).match(/^(\\s*\\})/);if(!n)return 0;var o=n[1].length,i=e.findMatchingBracket({row:t,column:o});if(!i||i.row==t)return 0;var s=this.$getIndent(e.getLine(i.row));e.replace(new r(t,0,t,o-1),s)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(o.prototype),t.MatchingBraceOutdent=o})),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],(function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),o=e(\"../../range\").Range,i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(s,i),function(){this.foldingStartMarker=/([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var o=this._getFoldWidgetBase(e,t,n);return!o&&this.startRegionRe.test(r)?\"start\":o},this.getFoldWidgetRange=function(e,t,n,r){var o,i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);if(o=i.match(this.foldingStartMarker)){var s=o.index;if(o[1])return this.openingBracketBlock(e,o[1],n,s);var a=e.getCommentFoldRange(n,s+o[0].length,1);return a&&!a.isMultiLine()&&(r?a=this.getSectionRange(e,n):\"all\"!=t&&(a=null)),a}if(\"markbegin\"!==t&&(o=i.match(this.foldingStopMarker))){s=o.index+o[0].length;return o[1]?this.closingBracketBlock(e,o[1],n,s):e.getCommentFoldRange(n,s,-1)}},this.getSectionRange=function(e,t){for(var n=e.getLine(t),r=n.search(/\\S/),i=t,s=n.length,a=t+=1,l=e.getLength();++t<l;){var c=(n=e.getLine(t)).search(/\\S/);if(-1!==c){if(r>c)break;var u=this.getFoldWidgetRange(e,\"all\",t);if(u){if(u.start.row<=i)break;if(u.isMultiLine())t=u.end.row;else if(r==c)break}a=t}}return new o(i,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,n){for(var r=t.search(/\\s*$/),i=e.getLength(),s=n,a=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,l=1;++n<i;){t=e.getLine(n);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(n>s)return new o(s,r,n,t.length)}}.call(s.prototype)})),ace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"],(function(e,t,r){\"use strict\";var o=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./json_highlight_rules\").JsonHighlightRules,a=e(\"./matching_brace_outdent\").MatchingBraceOutdent,l=e(\"./behaviour/cstyle\").CstyleBehaviour,c=e(\"./folding/cstyle\").FoldMode,u=e(\"../worker/worker_client\").WorkerClient,d=function(){this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new l,this.foldingRules=new c};o.inherits(d,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);\"start\"==e&&(t.match(/^.*[\\{\\(\\[]\\s*$/)&&(r+=n));return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],n(7464),\"JsonWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",(function(t){e.setAnnotations(t.data)})),t.on(\"terminate\",(function(){e.clearAnnotations()})),t},this.$id=\"ace/mode/json\"}.call(d.prototype),t.Mode=d}))},440:()=>{ace.define(\"ace/theme/github\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],(function(e,t,n){t.isDark=!1,t.cssClass=\"ace-github\",t.cssText='.ace-github .ace_gutter {background: #e8e8e8;color: #AAA;}.ace-github  {background: #fff;color: #000;}.ace-github .ace_keyword {font-weight: bold;}.ace-github .ace_string {color: #D14;}.ace-github .ace_variable.ace_class {color: teal;}.ace-github .ace_constant.ace_numeric {color: #099;}.ace-github .ace_constant.ace_buildin {color: #0086B3;}.ace-github .ace_support.ace_function {color: #0086B3;}.ace-github .ace_comment {color: #998;font-style: italic;}.ace-github .ace_variable.ace_language  {color: #0086B3;}.ace-github .ace_paren {font-weight: bold;}.ace-github .ace_boolean {font-weight: bold;}.ace-github .ace_string.ace_regexp {color: #009926;font-weight: normal;}.ace-github .ace_variable.ace_instance {color: teal;}.ace-github .ace_constant.ace_language {font-weight: bold;}.ace-github .ace_cursor {color: black;}.ace-github.ace_focus .ace_marker-layer .ace_active-line {background: rgb(255, 255, 204);}.ace-github .ace_marker-layer .ace_active-line {background: rgb(245, 245, 245);}.ace-github .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-github.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-github.ace_nobold .ace_line > span {font-weight: normal !important;}.ace-github .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-github .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-github .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-github .ace_gutter-active-line {background-color : rgba(0, 0, 0, 0.07);}.ace-github .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-github .ace_invisible {color: #BFBFBF}.ace-github .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-github .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',e(\"../lib/dom\").importCssString(t.cssText,t.cssClass)}))},7464:e=>{e.exports.id=\"ace/mode/json_worker\",e.exports.src='\"no use strict\";!function(window){function resolveModuleId(id,paths){for(var testPath=id,tail=\"\";testPath;){var alias=paths[testPath];if(\"string\"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\\\/*$/,\"/\")+(tail||alias.main||alias.name);if(alias===!1)return\"\";var i=testPath.lastIndexOf(\"/\");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:\"error\",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf(\"!\")){var chunks=moduleName.split(\"!\");return window.normalizeModule(parentId,chunks[0])+\"!\"+window.normalizeModule(parentId,chunks[1])}if(\".\"==moduleName.charAt(0)){var base=parentId.split(\"/\").slice(0,-1).join(\"/\");for(moduleName=(base?base+\"/\":\"\")+moduleName;-1!==moduleName.indexOf(\".\")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\\\.\\\\//,\"\").replace(/\\\\/\\\\.\\\\//,\"/\").replace(/[^\\\\/]+\\\\/\\\\.\\\\.\\\\//,\"\")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error(\"worker.js acequire() accepts only (parentId, id) as arguments\");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log(\"unable to load \"+id);var path=resolveModuleId(id,window.acequire.tlns);return\".js\"!=path.slice(-3)&&(path+=\".js\"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,\"string\"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),\"function\"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=[\"require\",\"exports\",\"module\"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case\"require\":return req;case\"exports\":return module.exports;case\"module\":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire(\"ace/lib/event_emitter\").EventEmitter,oop=window.acequire(\"ace/lib/oop\"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:\"call\",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:\"event\",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error(\"Unknown command:\"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire(\"ace/lib/es5-shim\"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}}(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){\"object\"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){\"object\"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||\"\";switch(delta.action){case\"insert\":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case\"remove\":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){\"object\"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?\"unshift\":\"push\"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(acequire,exports){\"use strict\";var oop=acequire(\"./lib/oop\"),EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.column<point2.column;return point1.row<point2.row||point1.row==point2.row&&bColIsAfter}function $getTransformedPoint(delta,point,moveIfEqual){var deltaIsInsert=\"insert\"==delta.action,deltaRowShift=(deltaIsInsert?1:-1)*(delta.end.row-delta.start.row),deltaColShift=(deltaIsInsert?1:-1)*(delta.end.column-delta.start.column),deltaStart=delta.start,deltaEnd=deltaIsInsert?deltaStart:delta.end;return $pointsInOrder(point,deltaStart,moveIfEqual)?{row:point.row,column:point.column}:$pointsInOrder(deltaEnd,point,!moveIfEqual)?{row:point.row+deltaRowShift,column:point.column+(point.row==deltaEnd.row?deltaColShift:0)}:{row:deltaStart.row,column:deltaStart.column}}oop.implement(this,EventEmitter),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(delta){if(!(delta.start.row==delta.end.row&&delta.start.row!=this.row||delta.start.row>this.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal(\"change\",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(acequire,exports){\"use strict\";var oop=acequire(\"./lib/oop\"),applyDelta=acequire(\"./apply_delta\").applyDelta,EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter,Range=acequire(\"./range\").Range,Anchor=acequire(\"./anchor\").Anchor,Document=function(textOrLines){this.$lines=[\"\"],0===textOrLines.length?this.$lines=[\"\"]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0===\"aaa\".split(/a/).length?function(text){return text.replace(/\\\\r\\\\n|\\\\r/g,\"\\\\n\").split(\"\\\\n\")}:function(text){return text.split(/\\\\r\\\\n|\\\\r|\\\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\\\r\\\\n|\\\\r|\\\\n)/m);this.$autoNewLine=match?match[1]:\"\\\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\\\r\\\\n\";case\"unix\":return\"\\\\n\";default:return this.$autoNewLine||\"\\\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal(\"changeNewLineMode\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return\"\\\\r\\\\n\"==text||\"\\\\r\"==text||\"\\\\n\"==text},this.getLine=function(row){return this.$lines[row]||\"\"},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||\"\").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\\'\\', \\'\\']) instead.\"),this.insertMergedLines(position,[\"\",\"\"])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:\"insert\",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([\"\"]),column=0):(lines=[\"\"].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:\"insert\",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:\"remove\",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:\"remove\",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:\"remove\",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert=\"insert\"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal(\"change\",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(\"\"),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:\"insert\"==delta.action?\"remove\":\"insert\",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split(\"\").reverse().join(\"\")},exports.stringRepeat=function(string,count){for(var result=\"\";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\\\s\\\\s*/,trimEndRegexp=/\\\\s\\\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,\"\")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,\"\")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&\"object\"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if(\"object\"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}if(\"[object Object]\"!==Object.prototype.toString.call(obj))return obj;copy={};for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\\\]\\\\/\\\\\\\\])/g,\"\\\\\\\\$1\")},exports.escapeHTML=function(str){return str.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/\\'/g,\"&#39;\").replace(/</g,\"&#60;\")},exports.getMatchOffsets=function(string,regExp){var matches=[];return string.replace(regExp,function(str){matches.push({offset:arguments[arguments.length-2],length:str.length})}),matches},exports.deferredCall=function(fcn){var timer=null,callback=function(){timer=null,fcn()},deferred=function(timeout){return deferred.cancel(),timer=setTimeout(callback,timeout||0),deferred};return deferred.schedule=deferred,deferred.call=function(){return this.cancel(),fcn(),deferred},deferred.cancel=function(){return clearTimeout(timer),timer=null,deferred},deferred.isPending=function(){return timer},deferred},exports.delayedCall=function(fcn,defaultTimeout){var timer=null,callback=function(){timer=null,fcn()},_self=function(timeout){null==timer&&(timer=setTimeout(callback,timeout||defaultTimeout))};return _self.delay=function(timeout){timer&&clearTimeout(timer),timer=setTimeout(callback,timeout||defaultTimeout)},_self.schedule=_self,_self.call=function(){this.cancel(),fcn()},_self.cancel=function(){timer&&clearTimeout(timer),timer=null},_self.isPending=function(){return timer},_self}}),ace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"],function(acequire,exports){\"use strict\";acequire(\"../range\").Range;var Document=acequire(\"../document\").Document,lang=acequire(\"../lib/lang\"),Mirror=exports.Mirror=function(sender){this.sender=sender;var doc=this.doc=new Document(\"\"),deferredUpdate=this.deferredUpdate=lang.delayedCall(this.onUpdate.bind(this)),_self=this;sender.on(\"change\",function(e){var data=e.data;if(data[0].start)doc.applyDeltas(data);else for(var i=0;data.length>i;i+=2){if(Array.isArray(data[i+1]))var d={action:\"insert\",start:data[i],lines:data[i+1]};else var d={action:\"remove\",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define(\"ace/mode/json/json_parse\",[\"require\",\"exports\",\"module\"],function(){\"use strict\";var at,ch,text,value,escapee={\\'\"\\':\\'\"\\',\"\\\\\\\\\":\"\\\\\\\\\",\"/\":\"/\",b:\"\\\\b\",f:\"\\\\f\",n:\"\\\\n\",r:\"\\\\r\",t:\"\\t\"},error=function(m){throw{name:\"SyntaxError\",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error(\"Expected \\'\"+c+\"\\' instead of \\'\"+ch+\"\\'\"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string=\"\";for(\"-\"===ch&&(string=\"-\",next(\"-\"));ch>=\"0\"&&\"9\">=ch;)string+=ch,next();if(\".\"===ch)for(string+=\".\";next()&&ch>=\"0\"&&\"9\">=ch;)string+=ch;if(\"e\"===ch||\"E\"===ch)for(string+=ch,next(),(\"-\"===ch||\"+\"===ch)&&(string+=ch,next());ch>=\"0\"&&\"9\">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error(\"Bad number\"),void 0):number},string=function(){var hex,i,uffff,string=\"\";if(\\'\"\\'===ch)for(;next();){if(\\'\"\\'===ch)return next(),string;if(\"\\\\\\\\\"===ch)if(next(),\"u\"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if(\"string\"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error(\"Bad string\")},white=function(){for(;ch&&\" \">=ch;)next()},word=function(){switch(ch){case\"t\":return next(\"t\"),next(\"r\"),next(\"u\"),next(\"e\"),!0;case\"f\":return next(\"f\"),next(\"a\"),next(\"l\"),next(\"s\"),next(\"e\"),!1;case\"n\":return next(\"n\"),next(\"u\"),next(\"l\"),next(\"l\"),null}error(\"Unexpected \\'\"+ch+\"\\'\")},array=function(){var array=[];if(\"[\"===ch){if(next(\"[\"),white(),\"]\"===ch)return next(\"]\"),array;for(;ch;){if(array.push(value()),white(),\"]\"===ch)return next(\"]\"),array;next(\",\"),white()}}error(\"Bad array\")},object=function(){var key,object={};if(\"{\"===ch){if(next(\"{\"),white(),\"}\"===ch)return next(\"}\"),object;for(;ch;){if(key=string(),white(),next(\":\"),Object.hasOwnProperty.call(object,key)&&error(\\'Duplicate key \"\\'+key+\\'\"\\'),object[key]=value(),white(),\"}\"===ch)return next(\"}\"),object;next(\",\"),white()}}error(\"Bad object\")};return value=function(){switch(white(),ch){case\"{\":return object();case\"[\":return array();case\\'\"\\':return string();case\"-\":return number();default:return ch>=\"0\"&&\"9\">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=\" \",result=value(),white(),ch&&error(\"Syntax error\"),\"function\"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&\"object\"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({\"\":result},\"\"):result}}),ace.define(\"ace/mode/json_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/json/json_parse\"],function(acequire,exports){\"use strict\";var oop=acequire(\"../lib/oop\"),Mirror=acequire(\"../worker/mirror\").Mirror,parse=acequire(\"./json/json_parse\"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:\"error\"})}this.sender.emit(\"annotate\",errors)}}.call(JsonWorker.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,\"sentinel\",{}),\"sentinel\"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if(\"function\"!=typeof target)throw new TypeError(\"Function.prototype.bind called on incompatible \"+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,\"__defineGetter__\"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,\"XXX\"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return\"[object Array]\"==_toString(obj)});var boxedString=Object(\"a\"),splitString=\"a\"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,result=[],thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");if(!length&&1==arguments.length)throw new TypeError(\"reduce of empty array with no initial value\");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError(\"reduce of empty array with no initial value\")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");if(!length&&1==arguments.length)throw new TypeError(\"reduceRight of empty array with no initial value\");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError(\"reduceRight of empty array with no initial value\")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(object,property){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if(\"object\"!=typeof prototype)throw new TypeError(\"typeof prototype[\"+typeof prototype+\"] != \\'object\\'\");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom=\"undefined\"==typeof document||doesDefinePropertyWork(document.createElement(\"div\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\"Property description must be an object: \",ERR_NON_OBJECT_TARGET=\"Object.defineProperty called on non-object: \",ERR_ACCESSORS_NOT_SUPPORTED=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(object,property,descriptor){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(\"object\"!=typeof descriptor&&\"function\"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,\"value\"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,\"get\")&&defineGetter(object,property,descriptor.get),owns(descriptor,\"set\")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return\"function\"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name=\"\";owns(object,name);)name+=\"?\";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(\"Object.keys called on a non-object\");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws=\"\\t\\\\n\\v\\\\f\\\\r   ᠎             　\\\\u2028\\\\u2029\\ufeff\";if(!String.prototype.trim||ws.trim()){ws=\"[\"+ws+\"]\";var trimBeginRegexp=RegExp(\"^\"+ws+ws+\"*\"),trimEndRegexp=RegExp(ws+ws+\"*$\");String.prototype.trim=function(){return(this+\"\").replace(trimBeginRegexp,\"\").replace(trimEndRegexp,\"\")}}var toObject=function(o){if(null==o)throw new TypeError(\"can\\'t convert \"+o+\" to object\");return Object(o)}});'},2354:(e,t,n)=>{\"use strict\";var r=n(4581);function o(e){\"function\"==typeof(e=e||{}).codeMirrorInstance&&\"function\"==typeof e.codeMirrorInstance.defineMode?(String.prototype.includes||(String.prototype.includes=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),e.codeMirrorInstance.defineMode(\"spell-checker\",(function(t){if(!o.aff_loading){o.aff_loading=!0;var n=new XMLHttpRequest;n.open(\"GET\",\"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff\",!0),n.onload=function(){4===n.readyState&&200===n.status&&(o.aff_data=n.responseText,o.num_loaded++,2==o.num_loaded&&(o.typo=new r(\"en_US\",o.aff_data,o.dic_data,{platform:\"any\"})))},n.send(null)}if(!o.dic_loading){o.dic_loading=!0;var i=new XMLHttpRequest;i.open(\"GET\",\"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic\",!0),i.onload=function(){4===i.readyState&&200===i.status&&(o.dic_data=i.responseText,o.num_loaded++,2==o.num_loaded&&(o.typo=new r(\"en_US\",o.aff_data,o.dic_data,{platform:\"any\"})))},i.send(null)}var s='!\"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~ ',a={token:function(e){var t=e.peek(),n=\"\";if(s.includes(t))return e.next(),null;for(;null!=(t=e.peek())&&!s.includes(t);)n+=t,e.next();return o.typo&&!o.typo.check(n)?\"spell-error\":null}},l=e.codeMirrorInstance.getMode(t,t.backdrop||\"text/plain\");return e.codeMirrorInstance.overlayMode(l,a,!0)}))):console.log(\"CodeMirror Spell Checker: You must provide an instance of CodeMirror via the option `codeMirrorInstance`\")}o.num_loaded=0,o.aff_loading=!1,o.dic_loading=!1,o.aff_data=\"\",o.dic_data=\"\",o.typo,e.exports=o},1994:(e,t,n)=>{!function(e){\"use strict\";function t(t,r){function o(){t.display.wrapper.offsetHeight?(n(t,r),t.display.lastWrapHeight!=t.display.wrapper.clientHeight&&t.refresh()):r.timeout=setTimeout(o,r.delay)}r.timeout=setTimeout(o,r.delay),r.hurry=function(){clearTimeout(r.timeout),r.timeout=setTimeout(o,50)},e.on(window,\"mouseup\",r.hurry),e.on(window,\"keyup\",r.hurry)}function n(t,n){clearTimeout(n.timeout),e.off(window,\"mouseup\",n.hurry),e.off(window,\"keyup\",n.hurry)}e.defineOption(\"autoRefresh\",!1,(function(e,r){e.state.autoRefresh&&(n(e,e.state.autoRefresh),e.state.autoRefresh=null),r&&0==e.display.wrapper.offsetHeight&&t(e,e.state.autoRefresh={delay:r.delay||250})}))}(n(4631))},960:(e,t,n)=>{!function(e){\"use strict\";function t(e){var t=e.getWrapperElement();e.state.fullScreenRestore={scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,width:t.style.width,height:t.style.height},t.style.width=\"\",t.style.height=\"auto\",t.className+=\" CodeMirror-fullscreen\",document.documentElement.style.overflow=\"hidden\",e.refresh()}function n(e){var t=e.getWrapperElement();t.className=t.className.replace(/\\s*CodeMirror-fullscreen\\b/,\"\"),document.documentElement.style.overflow=\"\";var n=e.state.fullScreenRestore;t.style.width=n.width,t.style.height=n.height,window.scrollTo(n.scrollLeft,n.scrollTop),e.refresh()}e.defineOption(\"fullScreen\",!1,(function(r,o,i){i==e.Init&&(i=!1),!i!=!o&&(o?t(r):n(r))}))}(n(4631))},8386:(e,t,n)=>{!function(e){function t(e){e.state.placeholder&&(e.state.placeholder.parentNode.removeChild(e.state.placeholder),e.state.placeholder=null)}function n(e){t(e);var n=e.state.placeholder=document.createElement(\"pre\");n.style.cssText=\"height: 0; overflow: visible\",n.style.direction=e.getOption(\"direction\"),n.className=\"CodeMirror-placeholder CodeMirror-line-like\";var r=e.getOption(\"placeholder\");\"string\"==typeof r&&(r=document.createTextNode(r)),n.appendChild(r),e.display.lineSpace.insertBefore(n,e.display.lineSpace.firstChild)}function r(e){setTimeout((function(){var r=!1;if(1==e.lineCount()){var o=e.getInputField();r=\"TEXTAREA\"==o.nodeName?!e.getLine(0).length:!/[^\\u200b]/.test(o.querySelector(\".CodeMirror-line\").textContent)}r?n(e):t(e)}),20)}function o(e){s(e)&&n(e)}function i(e){var r=e.getWrapperElement(),o=s(e);r.className=r.className.replace(\" CodeMirror-empty\",\"\")+(o?\" CodeMirror-empty\":\"\"),o?n(e):t(e)}function s(e){return 1===e.lineCount()&&\"\"===e.getLine(0)}e.defineOption(\"placeholder\",\"\",(function(n,s,a){var l=a&&a!=e.Init;if(s&&!l)n.on(\"blur\",o),n.on(\"change\",i),n.on(\"swapDoc\",i),e.on(n.getInputField(),\"compositionupdate\",n.state.placeholderCompose=function(){r(n)}),i(n);else if(!s&&l){n.off(\"blur\",o),n.off(\"change\",i),n.off(\"swapDoc\",i),e.off(n.getInputField(),\"compositionupdate\",n.state.placeholderCompose),t(n);var c=n.getWrapperElement();c.className=c.className.replace(\" CodeMirror-empty\",\"\")}s&&!n.hasFocus()&&o(n)}))}(n(4631))},3350:(e,t,n)=>{!function(e){\"use strict\";var t=/^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,n=/^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,r=/[*+-]\\s/;function o(e,n){var r=n.line,o=0,i=0,s=t.exec(e.getLine(r)),a=s[1];do{var l=r+(o+=1),c=e.getLine(l),u=t.exec(c);if(u){var d=u[1],h=parseInt(s[3],10)+o-i,m=parseInt(u[3],10),f=m;if(a!==d||isNaN(m)){if(a.length>d.length)return;if(a.length<d.length&&1===o)return;i+=1}else h===m&&(f=m+1),h>m&&(f=h+1),e.replaceRange(c.replace(t,d+f+u[4]+u[5]),{line:l,ch:0},{line:l,ch:c.length})}}while(u)}e.commands.newlineAndIndentContinueMarkdownList=function(i){if(i.getOption(\"disableInput\"))return e.Pass;for(var s=i.listSelections(),a=[],l=0;l<s.length;l++){var c=s[l].head,u=i.getStateAfter(c.line),d=e.innerMode(i.getMode(),u);if(\"markdown\"!==d.mode.name&&\"markdown\"!==d.mode.helperType)return void i.execCommand(\"newlineAndIndent\");var h=!1!==(u=d.state).list,m=0!==u.quote,f=i.getLine(c.line),p=t.exec(f),g=/^\\s*$/.test(f.slice(0,c.ch));if(!s[l].empty()||!h&&!m||!p||g)return void i.execCommand(\"newlineAndIndent\");if(n.test(f)){var v=m&&/>\\s*$/.test(f),y=!/>\\s*$/.test(f);(v||y)&&i.replaceRange(\"\",{line:c.line,ch:0},{line:c.line,ch:c.ch+1}),a[l]=\"\\n\"}else{var b=p[1],_=p[5],w=!(r.test(p[2])||p[2].indexOf(\">\")>=0),x=w?parseInt(p[3],10)+1+p[4]:p[2].replace(\"x\",\" \");a[l]=\"\\n\"+b+x+_,w&&o(i,c)}}i.replaceSelections(a)}}(n(4631))},4146:(e,t,n)=>{!function(e){\"use strict\";e.overlayMode=function(t,n,r){return{startState:function(){return{base:e.startState(t),overlay:e.startState(n),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(r){return{base:e.copyState(t,r.base),overlay:e.copyState(n,r.overlay),basePos:r.basePos,baseCur:null,overlayPos:r.overlayPos,overlayCur:null}},token:function(e,o){return(e!=o.streamSeen||Math.min(o.basePos,o.overlayPos)<e.start)&&(o.streamSeen=e,o.basePos=o.overlayPos=e.start),e.start==o.basePos&&(o.baseCur=t.token(e,o.base),o.basePos=e.pos),e.start==o.overlayPos&&(e.pos=e.start,o.overlayCur=n.token(e,o.overlay),o.overlayPos=e.pos),e.pos=Math.min(o.basePos,o.overlayPos),null==o.overlayCur?o.baseCur:null!=o.baseCur&&o.overlay.combineTokens||r&&null==o.overlay.combineTokens?o.baseCur+\" \"+o.overlayCur:o.overlayCur},indent:t.indent&&function(e,n,r){return t.indent(e.base,n,r)},electricChars:t.electricChars,innerMode:function(e){return{state:e.base,mode:t}},blankLine:function(e){var o,i;return t.blankLine&&(o=t.blankLine(e.base)),n.blankLine&&(i=n.blankLine(e.overlay)),null==i?o:r&&null!=o?o+\" \"+i:i}}}}(n(4631))},2095:(e,t,n)=>{!function(e){\"use strict\";var t,n,r=e.Pos;function o(e){var t=e.flags;return null!=t?t:(e.ignoreCase?\"i\":\"\")+(e.global?\"g\":\"\")+(e.multiline?\"m\":\"\")}function i(e,t){for(var n=o(e),r=n,i=0;i<t.length;i++)-1==r.indexOf(t.charAt(i))&&(r+=t.charAt(i));return n==r?e:new RegExp(e.source,r)}function s(e){return/\\\\s|\\\\n|\\n|\\\\W|\\\\D|\\[\\^/.test(e.source)}function a(e,t,n){t=i(t,\"g\");for(var o=n.line,s=n.ch,a=e.lastLine();o<=a;o++,s=0){t.lastIndex=s;var l=e.getLine(o),c=t.exec(l);if(c)return{from:r(o,c.index),to:r(o,c.index+c[0].length),match:c}}}function l(e,t,n){if(!s(t))return a(e,t,n);t=i(t,\"gm\");for(var o,l=1,c=n.line,u=e.lastLine();c<=u;){for(var d=0;d<l&&!(c>u);d++){var h=e.getLine(c++);o=null==o?h:o+\"\\n\"+h}l*=2,t.lastIndex=n.ch;var m=t.exec(o);if(m){var f=o.slice(0,m.index).split(\"\\n\"),p=m[0].split(\"\\n\"),g=n.line+f.length-1,v=f[f.length-1].length;return{from:r(g,v),to:r(g+p.length-1,1==p.length?v+p[0].length:p[p.length-1].length),match:m}}}}function c(e,t,n){for(var r,o=0;o<=e.length;){t.lastIndex=o;var i=t.exec(e);if(!i)break;var s=i.index+i[0].length;if(s>e.length-n)break;(!r||s>r.index+r[0].length)&&(r=i),o=i.index+1}return r}function u(e,t,n){t=i(t,\"g\");for(var o=n.line,s=n.ch,a=e.firstLine();o>=a;o--,s=-1){var l=e.getLine(o),u=c(l,t,s<0?0:l.length-s);if(u)return{from:r(o,u.index),to:r(o,u.index+u[0].length),match:u}}}function d(e,t,n){if(!s(t))return u(e,t,n);t=i(t,\"gm\");for(var o,a=1,l=e.getLine(n.line).length-n.ch,d=n.line,h=e.firstLine();d>=h;){for(var m=0;m<a&&d>=h;m++){var f=e.getLine(d--);o=null==o?f:f+\"\\n\"+o}a*=2;var p=c(o,t,l);if(p){var g=o.slice(0,p.index).split(\"\\n\"),v=p[0].split(\"\\n\"),y=d+g.length,b=g[g.length-1].length;return{from:r(y,b),to:r(y+v.length-1,1==v.length?b+v[0].length:v[v.length-1].length),match:p}}}}function h(e,t,n,r){if(e.length==t.length)return n;for(var o=0,i=n+Math.max(0,e.length-t.length);;){if(o==i)return o;var s=o+i>>1,a=r(e.slice(0,s)).length;if(a==n)return s;a>n?i=s:o=s+1}}function m(e,o,i,s){if(!o.length)return null;var a=s?t:n,l=a(o).split(/\\r|\\n\\r?/);e:for(var c=i.line,u=i.ch,d=e.lastLine()+1-l.length;c<=d;c++,u=0){var m=e.getLine(c).slice(u),f=a(m);if(1==l.length){var p=f.indexOf(l[0]);if(-1==p)continue e;return i=h(m,f,p,a)+u,{from:r(c,h(m,f,p,a)+u),to:r(c,h(m,f,p+l[0].length,a)+u)}}var g=f.length-l[0].length;if(f.slice(g)==l[0]){for(var v=1;v<l.length-1;v++)if(a(e.getLine(c+v))!=l[v])continue e;var y=e.getLine(c+l.length-1),b=a(y),_=l[l.length-1];if(b.slice(0,_.length)==_)return{from:r(c,h(m,f,g,a)+u),to:r(c+l.length-1,h(y,b,_.length,a))}}}}function f(e,o,i,s){if(!o.length)return null;var a=s?t:n,l=a(o).split(/\\r|\\n\\r?/);e:for(var c=i.line,u=i.ch,d=e.firstLine()-1+l.length;c>=d;c--,u=-1){var m=e.getLine(c);u>-1&&(m=m.slice(0,u));var f=a(m);if(1==l.length){var p=f.lastIndexOf(l[0]);if(-1==p)continue e;return{from:r(c,h(m,f,p,a)),to:r(c,h(m,f,p+l[0].length,a))}}var g=l[l.length-1];if(f.slice(0,g.length)==g){var v=1;for(i=c-l.length+1;v<l.length-1;v++)if(a(e.getLine(i+v))!=l[v])continue e;var y=e.getLine(c+1-l.length),b=a(y);if(b.slice(b.length-l[0].length)==l[0])return{from:r(c+1-l.length,h(y,b,y.length-l[0].length,a)),to:r(c,h(m,f,g.length,a))}}}}function p(e,t,n,o){var s;this.atOccurrence=!1,this.afterEmptyMatch=!1,this.doc=e,n=n?e.clipPos(n):r(0,0),this.pos={from:n,to:n},\"object\"==typeof o?s=o.caseFold:(s=o,o=null),\"string\"==typeof t?(null==s&&(s=!1),this.matches=function(n,r){return(n?f:m)(e,t,r,s)}):(t=i(t,\"gm\"),o&&!1===o.multiline?this.matches=function(n,r){return(n?u:a)(e,t,r)}:this.matches=function(n,r){return(n?d:l)(e,t,r)})}String.prototype.normalize?(t=function(e){return e.normalize(\"NFD\").toLowerCase()},n=function(e){return e.normalize(\"NFD\")}):(t=function(e){return e.toLowerCase()},n=function(e){return e}),p.prototype={findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(t){var n=this.doc.clipPos(t?this.pos.from:this.pos.to);if(this.afterEmptyMatch&&this.atOccurrence&&(n=r(n.line,n.ch),t?(n.ch--,n.ch<0&&(n.line--,n.ch=(this.doc.getLine(n.line)||\"\").length)):(n.ch++,n.ch>(this.doc.getLine(n.line)||\"\").length&&(n.ch=0,n.line++)),0!=e.cmpPos(n,this.doc.clipPos(n))))return this.atOccurrence=!1;var o=this.matches(t,n);if(this.afterEmptyMatch=o&&0==e.cmpPos(o.from,o.to),o)return this.pos=o,this.atOccurrence=!0,this.pos.match||!0;var i=r(t?this.doc.firstLine():this.doc.lastLine()+1,0);return this.pos={from:i,to:i},this.atOccurrence=!1},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(t,n){if(this.atOccurrence){var o=e.splitLines(t);this.doc.replaceRange(o,this.pos.from,this.pos.to,n),this.pos.to=r(this.pos.from.line+o.length-1,o[o.length-1].length+(1==o.length?this.pos.from.ch:0))}}},e.defineExtension(\"getSearchCursor\",(function(e,t,n){return new p(this.doc,e,t,n)})),e.defineDocExtension(\"getSearchCursor\",(function(e,t,n){return new p(this,e,t,n)})),e.defineExtension(\"selectMatches\",(function(t,n){for(var r=[],o=this.getSearchCursor(t,this.getCursor(\"from\"),n);o.findNext()&&!(e.cmpPos(o.to(),this.getCursor(\"to\"))>0);)r.push({anchor:o.from(),head:o.to()});r.length&&this.setSelections(r,0)}))}(n(4631))},4020:(e,t,n)=>{!function(e){\"use strict\";function t(e){e.state.markedSelection&&e.operation((function(){c(e)}))}function n(e){e.state.markedSelection&&e.state.markedSelection.length&&e.operation((function(){a(e)}))}e.defineOption(\"styleSelectedText\",!1,(function(r,o,i){var s=i&&i!=e.Init;o&&!s?(r.state.markedSelection=[],r.state.markedSelectionStyle=\"string\"==typeof o?o:\"CodeMirror-selectedtext\",l(r),r.on(\"cursorActivity\",t),r.on(\"change\",n)):!o&&s&&(r.off(\"cursorActivity\",t),r.off(\"change\",n),a(r),r.state.markedSelection=r.state.markedSelectionStyle=null)}));var r=8,o=e.Pos,i=e.cmpPos;function s(e,t,n,s){if(0!=i(t,n))for(var a=e.state.markedSelection,l=e.state.markedSelectionStyle,c=t.line;;){var u=c==t.line?t:o(c,0),d=c+r,h=d>=n.line,m=h?n:o(d,0),f=e.markText(u,m,{className:l});if(null==s?a.push(f):a.splice(s++,0,f),h)break;c=d}}function a(e){for(var t=e.state.markedSelection,n=0;n<t.length;++n)t[n].clear();t.length=0}function l(e){a(e);for(var t=e.listSelections(),n=0;n<t.length;n++)s(e,t[n].from(),t[n].to())}function c(e){if(!e.somethingSelected())return a(e);if(e.listSelections().length>1)return l(e);var t=e.getCursor(\"start\"),n=e.getCursor(\"end\"),o=e.state.markedSelection;if(!o.length)return s(e,t,n);var c=o[0].find(),u=o[o.length-1].find();if(!c||!u||n.line-t.line<=r||i(t,u.to)>=0||i(n,c.from)<=0)return l(e);for(;i(t,c.from)>0;)o.shift().clear(),c=o[0].find();for(i(t,c.from)<0&&(c.to.line-t.line<r?(o.shift().clear(),s(e,t,c.to,0)):s(e,t,c.from,0));i(n,u.to)<0;)o.pop().clear(),u=o[o.length-1].find();i(n,u.to)>0&&(n.line-u.from.line<r?(o.pop().clear(),s(e,u.from,n)):s(e,u.to,n))}}(n(4631))},4631:function(e){e.exports=function(){\"use strict\";var e=navigator.userAgent,t=navigator.platform,n=/gecko\\/\\d/i.test(e),r=/MSIE \\d/.test(e),o=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(e),i=/Edge\\/(\\d+)/.exec(e),s=r||o||i,a=s&&(r?document.documentMode||6:+(i||o)[1]),l=!i&&/WebKit\\//.test(e),c=l&&/Qt\\/\\d+\\.\\d+/.test(e),u=!i&&/Chrome\\/(\\d+)/.exec(e),d=u&&+u[1],h=/Opera\\//.test(e),m=/Apple Computer/.test(navigator.vendor),f=/Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(e),p=/PhantomJS/.test(e),g=m&&(/Mobile\\/\\w+/.test(e)||navigator.maxTouchPoints>2),v=/Android/.test(e),y=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),b=g||/Mac/.test(t),_=/\\bCrOS\\b/.test(e),w=/win/i.test(t),x=h&&e.match(/Version\\/(\\d*\\.\\d*)/);x&&(x=Number(x[1])),x&&x>=15&&(h=!1,l=!0);var C=b&&(c||h&&(null==x||x<12.11)),k=n||s&&a>=9;function D(e){return new RegExp(\"(^|\\\\s)\"+e+\"(?:$|\\\\s)\\\\s*\")}var S,A=function(e,t){var n=e.className,r=D(t).exec(n);if(r){var o=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(o?r[1]+o:\"\")}};function M(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function L(e,t){return M(e).appendChild(t)}function E(e,t,n,r){var o=document.createElement(e);if(n&&(o.className=n),r&&(o.style.cssText=r),\"string\"==typeof t)o.appendChild(document.createTextNode(t));else if(t)for(var i=0;i<t.length;++i)o.appendChild(t[i]);return o}function T(e,t,n,r){var o=E(e,t,n,r);return o.setAttribute(\"role\",\"presentation\"),o}function F(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function O(e){var t;try{t=e.activeElement}catch(n){t=e.body||null}for(;t&&t.shadowRoot&&t.shadowRoot.activeElement;)t=t.shadowRoot.activeElement;return t}function B(e,t){var n=e.className;D(t).test(n)||(e.className+=(n?\" \":\"\")+t)}function R(e,t){for(var n=e.split(\" \"),r=0;r<n.length;r++)n[r]&&!D(n[r]).test(t)&&(t+=\" \"+n[r]);return t}S=document.createRange?function(e,t,n,r){var o=document.createRange();return o.setEnd(r||e,n),o.setStart(e,t),o}:function(e,t,n){var r=document.body.createTextRange();try{r.moveToElementText(e.parentNode)}catch(e){return r}return r.collapse(!0),r.moveEnd(\"character\",n),r.moveStart(\"character\",t),r};var $=function(e){e.select()};function N(e){return e.display.wrapper.ownerDocument}function Y(e){return N(e).defaultView}function P(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function I(e,t,n){for(var r in t||(t={}),e)!e.hasOwnProperty(r)||!1===n&&t.hasOwnProperty(r)||(t[r]=e[r]);return t}function H(e,t,n,r,o){null==t&&-1==(t=e.search(/[^\\s\\u00a0]/))&&(t=e.length);for(var i=r||0,s=o||0;;){var a=e.indexOf(\"\\t\",i);if(a<0||a>=t)return s+(t-i);s+=a-i,s+=n-s%n,i=a+1}}g?$=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:s&&($=function(e){try{e.select()}catch(e){}});var j=function(){this.id=null,this.f=null,this.time=0,this.handler=P(this.onTimeout,this)};function W(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}j.prototype.onTimeout=function(e){e.id=0,e.time<=+new Date?e.f():setTimeout(e.handler,e.time-+new Date)},j.prototype.set=function(e,t){this.f=t;var n=+new Date+e;(!this.id||n<this.time)&&(clearTimeout(this.id),this.id=setTimeout(this.handler,e),this.time=n)};var z=50,U={toString:function(){return\"CodeMirror.Pass\"}},V={scroll:!1},q={origin:\"*mouse\"},G={origin:\"+move\"};function K(e,t,n){for(var r=0,o=0;;){var i=e.indexOf(\"\\t\",r);-1==i&&(i=e.length);var s=i-r;if(i==e.length||o+s>=t)return r+Math.min(s,t-o);if(o+=i-r,r=i+1,(o+=n-o%n)>=t)return r}}var X=[\"\"];function J(e){for(;X.length<=e;)X.push(Q(X)+\" \");return X[e]}function Q(e){return e[e.length-1]}function Z(e,t){for(var n=[],r=0;r<e.length;r++)n[r]=t(e[r],r);return n}function ee(e,t,n){for(var r=0,o=n(t);r<e.length&&n(e[r])<=o;)r++;e.splice(r,0,t)}function te(){}function ne(e,t){var n;return Object.create?n=Object.create(e):(te.prototype=e,n=new te),t&&I(t,n),n}var re=/[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;function oe(e){return/\\w/.test(e)||e>\"\"&&(e.toUpperCase()!=e.toLowerCase()||re.test(e))}function ie(e,t){return t?!!(t.source.indexOf(\"\\\\w\")>-1&&oe(e))||t.test(e):oe(e)}function se(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ae=/[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;function le(e){return e.charCodeAt(0)>=768&&ae.test(e)}function ce(e,t,n){for(;(n<0?t>0:t<e.length)&&le(e.charAt(t));)t+=n;return t}function ue(e,t,n){for(var r=t>n?-1:1;;){if(t==n)return t;var o=(t+n)/2,i=r<0?Math.ceil(o):Math.floor(o);if(i==t)return e(i)?t:n;e(i)?n=i:t=i+r}}function de(e,t,n,r){if(!e)return r(t,n,\"ltr\",0);for(var o=!1,i=0;i<e.length;++i){var s=e[i];(s.from<n&&s.to>t||t==n&&s.to==t)&&(r(Math.max(s.from,t),Math.min(s.to,n),1==s.level?\"rtl\":\"ltr\",i),o=!0)}o||r(t,n,\"ltr\")}var he=null;function me(e,t,n){var r;he=null;for(var o=0;o<e.length;++o){var i=e[o];if(i.from<t&&i.to>t)return o;i.to==t&&(i.from!=i.to&&\"before\"==n?r=o:he=o),i.from==t&&(i.from!=i.to&&\"before\"!=n?r=o:he=o)}return null!=r?r:he}var fe=function(){var e=\"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\",t=\"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";function n(n){return n<=247?e.charAt(n):1424<=n&&n<=1524?\"R\":1536<=n&&n<=1785?t.charAt(n-1536):1774<=n&&n<=2220?\"r\":8192<=n&&n<=8203?\"w\":8204==n?\"b\":\"L\"}var r=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/,o=/[stwN]/,i=/[LRr]/,s=/[Lb1n]/,a=/[1n]/;function l(e,t,n){this.level=e,this.from=t,this.to=n}return function(e,t){var c=\"ltr\"==t?\"L\":\"R\";if(0==e.length||\"ltr\"==t&&!r.test(e))return!1;for(var u=e.length,d=[],h=0;h<u;++h)d.push(n(e.charCodeAt(h)));for(var m=0,f=c;m<u;++m){var p=d[m];\"m\"==p?d[m]=f:f=p}for(var g=0,v=c;g<u;++g){var y=d[g];\"1\"==y&&\"r\"==v?d[g]=\"n\":i.test(y)&&(v=y,\"r\"==y&&(d[g]=\"R\"))}for(var b=1,_=d[0];b<u-1;++b){var w=d[b];\"+\"==w&&\"1\"==_&&\"1\"==d[b+1]?d[b]=\"1\":\",\"!=w||_!=d[b+1]||\"1\"!=_&&\"n\"!=_||(d[b]=_),_=w}for(var x=0;x<u;++x){var C=d[x];if(\",\"==C)d[x]=\"N\";else if(\"%\"==C){var k=void 0;for(k=x+1;k<u&&\"%\"==d[k];++k);for(var D=x&&\"!\"==d[x-1]||k<u&&\"1\"==d[k]?\"1\":\"N\",S=x;S<k;++S)d[S]=D;x=k-1}}for(var A=0,M=c;A<u;++A){var L=d[A];\"L\"==M&&\"1\"==L?d[A]=\"L\":i.test(L)&&(M=L)}for(var E=0;E<u;++E)if(o.test(d[E])){var T=void 0;for(T=E+1;T<u&&o.test(d[T]);++T);for(var F=\"L\"==(E?d[E-1]:c),O=F==(\"L\"==(T<u?d[T]:c))?F?\"L\":\"R\":c,B=E;B<T;++B)d[B]=O;E=T-1}for(var R,$=[],N=0;N<u;)if(s.test(d[N])){var Y=N;for(++N;N<u&&s.test(d[N]);++N);$.push(new l(0,Y,N))}else{var P=N,I=$.length,H=\"rtl\"==t?1:0;for(++N;N<u&&\"L\"!=d[N];++N);for(var j=P;j<N;)if(a.test(d[j])){P<j&&($.splice(I,0,new l(1,P,j)),I+=H);var W=j;for(++j;j<N&&a.test(d[j]);++j);$.splice(I,0,new l(2,W,j)),I+=H,P=j}else++j;P<N&&$.splice(I,0,new l(1,P,N))}return\"ltr\"==t&&(1==$[0].level&&(R=e.match(/^\\s+/))&&($[0].from=R[0].length,$.unshift(new l(0,0,R[0].length))),1==Q($).level&&(R=e.match(/\\s+$/))&&(Q($).to-=R[0].length,$.push(new l(0,u-R[0].length,u)))),\"rtl\"==t?$.reverse():$}}();function pe(e,t){var n=e.order;return null==n&&(n=e.order=fe(e.text,t)),n}var ge=[],ve=function(e,t,n){if(e.addEventListener)e.addEventListener(t,n,!1);else if(e.attachEvent)e.attachEvent(\"on\"+t,n);else{var r=e._handlers||(e._handlers={});r[t]=(r[t]||ge).concat(n)}};function ye(e,t){return e._handlers&&e._handlers[t]||ge}function be(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1);else if(e.detachEvent)e.detachEvent(\"on\"+t,n);else{var r=e._handlers,o=r&&r[t];if(o){var i=W(o,n);i>-1&&(r[t]=o.slice(0,i).concat(o.slice(i+1)))}}}function _e(e,t){var n=ye(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),o=0;o<n.length;++o)n[o].apply(null,r)}function we(e,t,n){return\"string\"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),_e(e,n||t.type,e,t),Ae(t)||t.codemirrorIgnore}function xe(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),r=0;r<t.length;++r)-1==W(n,t[r])&&n.push(t[r])}function Ce(e,t){return ye(e,t).length>0}function ke(e){e.prototype.on=function(e,t){ve(this,e,t)},e.prototype.off=function(e,t){be(this,e,t)}}function De(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function Se(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Ae(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Me(e){De(e),Se(e)}function Le(e){return e.target||e.srcElement}function Ee(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),b&&e.ctrlKey&&1==t&&(t=3),t}var Te,Fe,Oe=function(){if(s&&a<9)return!1;var e=E(\"div\");return\"draggable\"in e||\"dragDrop\"in e}();function Be(e){if(null==Te){var t=E(\"span\",\"​\");L(e,E(\"span\",[t,document.createTextNode(\"x\")])),0!=e.firstChild.offsetHeight&&(Te=t.offsetWidth<=1&&t.offsetHeight>2&&!(s&&a<8))}var n=Te?E(\"span\",\"​\"):E(\"span\",\" \",null,\"display: inline-block; width: 1px; margin-right: -1px\");return n.setAttribute(\"cm-text\",\"\"),n}function Re(e){if(null!=Fe)return Fe;var t=L(e,document.createTextNode(\"AخA\")),n=S(t,0,1).getBoundingClientRect(),r=S(t,1,2).getBoundingClientRect();return M(e),!(!n||n.left==n.right)&&(Fe=r.right-n.right<3)}var $e,Ne=3!=\"\\n\\nb\".split(/\\n/).length?function(e){for(var t=0,n=[],r=e.length;t<=r;){var o=e.indexOf(\"\\n\",t);-1==o&&(o=e.length);var i=e.slice(t,\"\\r\"==e.charAt(o-1)?o-1:o),s=i.indexOf(\"\\r\");-1!=s?(n.push(i.slice(0,s)),t+=s+1):(n.push(i),t=o+1)}return n}:function(e){return e.split(/\\r\\n?|\\n/)},Ye=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints(\"StartToEnd\",t)},Pe=\"oncopy\"in($e=E(\"div\"))||($e.setAttribute(\"oncopy\",\"return;\"),\"function\"==typeof $e.oncopy),Ie=null;function He(e){if(null!=Ie)return Ie;var t=L(e,E(\"span\",\"x\")),n=t.getBoundingClientRect(),r=S(t,0,1).getBoundingClientRect();return Ie=Math.abs(n.left-r.left)>1}var je={},We={};function ze(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),je[e]=t}function Ue(e,t){We[e]=t}function Ve(e){if(\"string\"==typeof e&&We.hasOwnProperty(e))e=We[e];else if(e&&\"string\"==typeof e.name&&We.hasOwnProperty(e.name)){var t=We[e.name];\"string\"==typeof t&&(t={name:t}),(e=ne(t,e)).name=t.name}else{if(\"string\"==typeof e&&/^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(e))return Ve(\"application/xml\");if(\"string\"==typeof e&&/^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(e))return Ve(\"application/json\")}return\"string\"==typeof e?{name:e}:e||{name:\"null\"}}function qe(e,t){t=Ve(t);var n=je[t.name];if(!n)return qe(e,\"text/plain\");var r=n(e,t);if(Ge.hasOwnProperty(t.name)){var o=Ge[t.name];for(var i in o)o.hasOwnProperty(i)&&(r.hasOwnProperty(i)&&(r[\"_\"+i]=r[i]),r[i]=o[i])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var s in t.modeProps)r[s]=t.modeProps[s];return r}var Ge={};function Ke(e,t){I(t,Ge.hasOwnProperty(e)?Ge[e]:Ge[e]={})}function Xe(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var o=t[r];o instanceof Array&&(o=o.concat([])),n[r]=o}return n}function Je(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Qe(e,t,n){return!e.startState||e.startState(t,n)}var Ze=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function et(e,t){if((t-=e.first)<0||t>=e.size)throw new Error(\"There is no line \"+(t+e.first)+\" in the document.\");for(var n=e;!n.lines;)for(var r=0;;++r){var o=n.children[r],i=o.chunkSize();if(t<i){n=o;break}t-=i}return n.lines[t]}function tt(e,t,n){var r=[],o=t.line;return e.iter(t.line,n.line+1,(function(e){var i=e.text;o==n.line&&(i=i.slice(0,n.ch)),o==t.line&&(i=i.slice(t.ch)),r.push(i),++o})),r}function nt(e,t,n){var r=[];return e.iter(t,n,(function(e){r.push(e.text)})),r}function rt(e,t){var n=t-e.height;if(n)for(var r=e;r;r=r.parent)r.height+=n}function ot(e){if(null==e.parent)return null;for(var t=e.parent,n=W(t.lines,e),r=t.parent;r;t=r,r=r.parent)for(var o=0;r.children[o]!=t;++o)n+=r.children[o].chunkSize();return n+t.first}function it(e,t){var n=e.first;e:do{for(var r=0;r<e.children.length;++r){var o=e.children[r],i=o.height;if(t<i){e=o;continue e}t-=i,n+=o.chunkSize()}return n}while(!e.lines);for(var s=0;s<e.lines.length;++s){var a=e.lines[s].height;if(t<a)break;t-=a}return n+s}function st(e,t){return t>=e.first&&t<e.first+e.size}function at(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function lt(e,t,n){if(void 0===n&&(n=null),!(this instanceof lt))return new lt(e,t,n);this.line=e,this.ch=t,this.sticky=n}function ct(e,t){return e.line-t.line||e.ch-t.ch}function ut(e,t){return e.sticky==t.sticky&&0==ct(e,t)}function dt(e){return lt(e.line,e.ch)}function ht(e,t){return ct(e,t)<0?t:e}function mt(e,t){return ct(e,t)<0?e:t}function ft(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function pt(e,t){if(t.line<e.first)return lt(e.first,0);var n=e.first+e.size-1;return t.line>n?lt(n,et(e,n).text.length):gt(t,et(e,t.line).text.length)}function gt(e,t){var n=e.ch;return null==n||n>t?lt(e.line,t):n<0?lt(e.line,0):e}function vt(e,t){for(var n=[],r=0;r<t.length;r++)n[r]=pt(e,t[r]);return n}Ze.prototype.eol=function(){return this.pos>=this.string.length},Ze.prototype.sol=function(){return this.pos==this.lineStart},Ze.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Ze.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},Ze.prototype.eat=function(e){var t=this.string.charAt(this.pos);if(\"string\"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},Ze.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},Ze.prototype.eatSpace=function(){for(var e=this.pos;/[\\s\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Ze.prototype.skipToEnd=function(){this.pos=this.string.length},Ze.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Ze.prototype.backUp=function(e){this.pos-=e},Ze.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=H(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?H(this.string,this.lineStart,this.tabSize):0)},Ze.prototype.indentation=function(){return H(this.string,null,this.tabSize)-(this.lineStart?H(this.string,this.lineStart,this.tabSize):0)},Ze.prototype.match=function(e,t,n){if(\"string\"!=typeof e){var r=this.string.slice(this.pos).match(e);return r&&r.index>0?null:(r&&!1!==t&&(this.pos+=r[0].length),r)}var o=function(e){return n?e.toLowerCase():e};if(o(this.string.substr(this.pos,e.length))==o(e))return!1!==t&&(this.pos+=e.length),!0},Ze.prototype.current=function(){return this.string.slice(this.start,this.pos)},Ze.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Ze.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Ze.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var yt=function(e,t){this.state=e,this.lookAhead=t},bt=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};function _t(e,t,n,r){var o=[e.state.modeGen],i={};Lt(e,t.text,e.doc.mode,n,(function(e,t){return o.push(e,t)}),i,r);for(var s=n.state,a=function(r){n.baseTokens=o;var a=e.state.overlays[r],l=1,c=0;n.state=!0,Lt(e,t.text,a.mode,n,(function(e,t){for(var n=l;c<e;){var r=o[l];r>e&&o.splice(l,1,e,o[l+1],r),l+=2,c=Math.min(e,r)}if(t)if(a.opaque)o.splice(n,l-n,e,\"overlay \"+t),l=n+2;else for(;n<l;n+=2){var i=o[n+1];o[n+1]=(i?i+\" \":\"\")+\"overlay \"+t}}),i),n.state=s,n.baseTokens=null,n.baseTokenPos=1},l=0;l<e.state.overlays.length;++l)a(l);return{styles:o,classes:i.bgClass||i.textClass?i:null}}function wt(e,t,n){if(!t.styles||t.styles[0]!=e.state.modeGen){var r=xt(e,ot(t)),o=t.text.length>e.options.maxHighlightLength&&Xe(e.doc.mode,r.state),i=_t(e,t,r);o&&(r.state=o),t.stateAfter=r.save(!o),t.styles=i.styles,i.classes?t.styleClasses=i.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function xt(e,t,n){var r=e.doc,o=e.display;if(!r.mode.startState)return new bt(r,!0,t);var i=Et(e,t,n),s=i>r.first&&et(r,i-1).stateAfter,a=s?bt.fromSaved(r,s,i):new bt(r,Qe(r.mode),i);return r.iter(i,t,(function(n){Ct(e,n.text,a);var r=a.line;n.stateAfter=r==t-1||r%5==0||r>=o.viewFrom&&r<o.viewTo?a.save():null,a.nextLine()})),n&&(r.modeFrontier=a.line),a}function Ct(e,t,n,r){var o=e.doc.mode,i=new Ze(t,e.options.tabSize,n);for(i.start=i.pos=r||0,\"\"==t&&kt(o,n.state);!i.eol();)Dt(o,i,n.state),i.start=i.pos}function kt(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var n=Je(e,t);return n.mode.blankLine?n.mode.blankLine(n.state):void 0}}function Dt(e,t,n,r){for(var o=0;o<10;o++){r&&(r[0]=Je(e,n).mode);var i=e.token(t,n);if(t.pos>t.start)return i}throw new Error(\"Mode \"+e.name+\" failed to advance stream.\")}bt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},bt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,\"\"),size:this.baseTokens[this.baseTokenPos]-e}},bt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},bt.fromSaved=function(e,t,n){return t instanceof yt?new bt(e,Xe(e.mode,t.state),n,t.lookAhead):new bt(e,Xe(e.mode,t),n)},bt.prototype.save=function(e){var t=!1!==e?Xe(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new yt(t,this.maxLookAhead):t};var St=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function At(e,t,n,r){var o,i,s=e.doc,a=s.mode,l=et(s,(t=pt(s,t)).line),c=xt(e,t.line,n),u=new Ze(l.text,e.options.tabSize,c);for(r&&(i=[]);(r||u.pos<t.ch)&&!u.eol();)u.start=u.pos,o=Dt(a,u,c.state),r&&i.push(new St(u,o,Xe(s.mode,c.state)));return r?i:new St(u,o,c.state)}function Mt(e,t){if(e)for(;;){var n=e.match(/(?:^|\\s+)line-(background-)?(\\S+)/);if(!n)break;e=e.slice(0,n.index)+e.slice(n.index+n[0].length);var r=n[1]?\"bgClass\":\"textClass\";null==t[r]?t[r]=n[2]:new RegExp(\"(?:^|\\\\s)\"+n[2]+\"(?:$|\\\\s)\").test(t[r])||(t[r]+=\" \"+n[2])}return e}function Lt(e,t,n,r,o,i,s){var a=n.flattenSpans;null==a&&(a=e.options.flattenSpans);var l,c=0,u=null,d=new Ze(t,e.options.tabSize,r),h=e.options.addModeClass&&[null];for(\"\"==t&&Mt(kt(n,r.state),i);!d.eol();){if(d.pos>e.options.maxHighlightLength?(a=!1,s&&Ct(e,t,r,d.pos),d.pos=t.length,l=null):l=Mt(Dt(n,d,r.state,h),i),h){var m=h[0].name;m&&(l=\"m-\"+(l?m+\" \"+l:m))}if(!a||u!=l){for(;c<d.start;)o(c=Math.min(d.start,c+5e3),u);u=l}d.start=d.pos}for(;c<d.pos;){var f=Math.min(d.pos,c+5e3);o(f,u),c=f}}function Et(e,t,n){for(var r,o,i=e.doc,s=n?-1:t-(e.doc.mode.innerMode?1e3:100),a=t;a>s;--a){if(a<=i.first)return i.first;var l=et(i,a-1),c=l.stateAfter;if(c&&(!n||a+(c instanceof yt?c.lookAhead:0)<=i.modeFrontier))return a;var u=H(l.text,null,e.options.tabSize);(null==o||r>u)&&(o=a-1,r=u)}return o}function Tt(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var n=e.first,r=t-1;r>n;r--){var o=et(e,r).stateAfter;if(o&&(!(o instanceof yt)||r+o.lookAhead<t)){n=r+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,n)}}var Ft=!1,Ot=!1;function Bt(){Ft=!0}function Rt(){Ot=!0}function $t(e,t,n){this.marker=e,this.from=t,this.to=n}function Nt(e,t){if(e)for(var n=0;n<e.length;++n){var r=e[n];if(r.marker==t)return r}}function Yt(e,t){for(var n,r=0;r<e.length;++r)e[r]!=t&&(n||(n=[])).push(e[r]);return n}function Pt(e,t,n){var r=n&&window.WeakSet&&(n.markedSpans||(n.markedSpans=new WeakSet));r&&e.markedSpans&&r.has(e.markedSpans)?e.markedSpans.push(t):(e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],r&&r.add(e.markedSpans)),t.marker.attachLine(e)}function It(e,t,n){var r;if(e)for(var o=0;o<e.length;++o){var i=e[o],s=i.marker;if(null==i.from||(s.inclusiveLeft?i.from<=t:i.from<t)||i.from==t&&\"bookmark\"==s.type&&(!n||!i.marker.insertLeft)){var a=null==i.to||(s.inclusiveRight?i.to>=t:i.to>t);(r||(r=[])).push(new $t(s,i.from,a?null:i.to))}}return r}function Ht(e,t,n){var r;if(e)for(var o=0;o<e.length;++o){var i=e[o],s=i.marker;if(null==i.to||(s.inclusiveRight?i.to>=t:i.to>t)||i.from==t&&\"bookmark\"==s.type&&(!n||i.marker.insertLeft)){var a=null==i.from||(s.inclusiveLeft?i.from<=t:i.from<t);(r||(r=[])).push(new $t(s,a?null:i.from-t,null==i.to?null:i.to-t))}}return r}function jt(e,t){if(t.full)return null;var n=st(e,t.from.line)&&et(e,t.from.line).markedSpans,r=st(e,t.to.line)&&et(e,t.to.line).markedSpans;if(!n&&!r)return null;var o=t.from.ch,i=t.to.ch,s=0==ct(t.from,t.to),a=It(n,o,s),l=Ht(r,i,s),c=1==t.text.length,u=Q(t.text).length+(c?o:0);if(a)for(var d=0;d<a.length;++d){var h=a[d];if(null==h.to){var m=Nt(l,h.marker);m?c&&(h.to=null==m.to?null:m.to+u):h.to=o}}if(l)for(var f=0;f<l.length;++f){var p=l[f];null!=p.to&&(p.to+=u),null==p.from?Nt(a,p.marker)||(p.from=u,c&&(a||(a=[])).push(p)):(p.from+=u,c&&(a||(a=[])).push(p))}a&&(a=Wt(a)),l&&l!=a&&(l=Wt(l));var g=[a];if(!c){var v,y=t.text.length-2;if(y>0&&a)for(var b=0;b<a.length;++b)null==a[b].to&&(v||(v=[])).push(new $t(a[b].marker,null,null));for(var _=0;_<y;++_)g.push(v);g.push(l)}return g}function Wt(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.from==n.to&&!1!==n.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function zt(e,t,n){var r=null;if(e.iter(t.line,n.line+1,(function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||r&&-1!=W(r,n)||(r||(r=[])).push(n)}})),!r)return null;for(var o=[{from:t,to:n}],i=0;i<r.length;++i)for(var s=r[i],a=s.find(0),l=0;l<o.length;++l){var c=o[l];if(!(ct(c.to,a.from)<0||ct(c.from,a.to)>0)){var u=[l,1],d=ct(c.from,a.from),h=ct(c.to,a.to);(d<0||!s.inclusiveLeft&&!d)&&u.push({from:c.from,to:a.from}),(h>0||!s.inclusiveRight&&!h)&&u.push({from:a.to,to:c.to}),o.splice.apply(o,u),l+=u.length-3}}return o}function Ut(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n].marker.detachLine(e);e.markedSpans=null}}function Vt(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine(e);e.markedSpans=t}}function qt(e){return e.inclusiveLeft?-1:0}function Gt(e){return e.inclusiveRight?1:0}function Kt(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;var r=e.find(),o=t.find(),i=ct(r.from,o.from)||qt(e)-qt(t);if(i)return-i;var s=ct(r.to,o.to)||Gt(e)-Gt(t);return s||t.id-e.id}function Xt(e,t){var n,r=Ot&&e.markedSpans;if(r)for(var o=void 0,i=0;i<r.length;++i)(o=r[i]).marker.collapsed&&null==(t?o.from:o.to)&&(!n||Kt(n,o.marker)<0)&&(n=o.marker);return n}function Jt(e){return Xt(e,!0)}function Qt(e){return Xt(e,!1)}function Zt(e,t){var n,r=Ot&&e.markedSpans;if(r)for(var o=0;o<r.length;++o){var i=r[o];i.marker.collapsed&&(null==i.from||i.from<t)&&(null==i.to||i.to>t)&&(!n||Kt(n,i.marker)<0)&&(n=i.marker)}return n}function en(e,t,n,r,o){var i=et(e,t),s=Ot&&i.markedSpans;if(s)for(var a=0;a<s.length;++a){var l=s[a];if(l.marker.collapsed){var c=l.marker.find(0),u=ct(c.from,n)||qt(l.marker)-qt(o),d=ct(c.to,r)||Gt(l.marker)-Gt(o);if(!(u>=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&o.inclusiveLeft?ct(c.to,n)>=0:ct(c.to,n)>0)||u>=0&&(l.marker.inclusiveRight&&o.inclusiveLeft?ct(c.from,r)<=0:ct(c.from,r)<0)))return!0}}}function tn(e){for(var t;t=Jt(e);)e=t.find(-1,!0).line;return e}function nn(e){for(var t;t=Qt(e);)e=t.find(1,!0).line;return e}function rn(e){for(var t,n;t=Qt(e);)e=t.find(1,!0).line,(n||(n=[])).push(e);return n}function on(e,t){var n=et(e,t),r=tn(n);return n==r?t:ot(r)}function sn(e,t){if(t>e.lastLine())return t;var n,r=et(e,t);if(!an(e,r))return t;for(;n=Qt(r);)r=n.find(1,!0).line;return ot(r)+1}function an(e,t){var n=Ot&&t.markedSpans;if(n)for(var r=void 0,o=0;o<n.length;++o)if((r=n[o]).marker.collapsed){if(null==r.from)return!0;if(!r.marker.widgetNode&&0==r.from&&r.marker.inclusiveLeft&&ln(e,t,r))return!0}}function ln(e,t,n){if(null==n.to){var r=n.marker.find(1,!0);return ln(e,r.line,Nt(r.line.markedSpans,n.marker))}if(n.marker.inclusiveRight&&n.to==t.text.length)return!0;for(var o=void 0,i=0;i<t.markedSpans.length;++i)if((o=t.markedSpans[i]).marker.collapsed&&!o.marker.widgetNode&&o.from==n.to&&(null==o.to||o.to!=n.from)&&(o.marker.inclusiveLeft||n.marker.inclusiveRight)&&ln(e,t,o))return!0}function cn(e){for(var t=0,n=(e=tn(e)).parent,r=0;r<n.lines.length;++r){var o=n.lines[r];if(o==e)break;t+=o.height}for(var i=n.parent;i;i=(n=i).parent)for(var s=0;s<i.children.length;++s){var a=i.children[s];if(a==n)break;t+=a.height}return t}function un(e){if(0==e.height)return 0;for(var t,n=e.text.length,r=e;t=Jt(r);){var o=t.find(0,!0);r=o.from.line,n+=o.from.ch-o.to.ch}for(r=e;t=Qt(r);){var i=t.find(0,!0);n-=r.text.length-i.from.ch,n+=(r=i.to.line).text.length-i.to.ch}return n}function dn(e){var t=e.display,n=e.doc;t.maxLine=et(n,n.first),t.maxLineLength=un(t.maxLine),t.maxLineChanged=!0,n.iter((function(e){var n=un(e);n>t.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)}))}var hn=function(e,t,n){this.text=e,Vt(this,t),this.height=n?n(this):1};function mn(e,t,n,r){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),Ut(e),Vt(e,n);var o=r?r(e):1;o!=e.height&&rt(e,o)}function fn(e){e.parent=null,Ut(e)}hn.prototype.lineNo=function(){return ot(this)},ke(hn);var pn={},gn={};function vn(e,t){if(!e||/^\\s*$/.test(e))return null;var n=t.addModeClass?gn:pn;return n[e]||(n[e]=e.replace(/\\S+/g,\"cm-$&\"))}function yn(e,t){var n=T(\"span\",null,null,l?\"padding-right: .1px\":null),r={pre:T(\"pre\",[n],\"CodeMirror-line\"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption(\"lineWrapping\")};t.measure={};for(var o=0;o<=(t.rest?t.rest.length:0);o++){var i=o?t.rest[o-1]:t.line,s=void 0;r.pos=0,r.addToken=_n,Re(e.display.measure)&&(s=pe(i,e.doc.direction))&&(r.addToken=xn(r.addToken,s)),r.map=[],kn(i,r,wt(e,i,t!=e.display.externalMeasured&&ot(i))),i.styleClasses&&(i.styleClasses.bgClass&&(r.bgClass=R(i.styleClasses.bgClass,r.bgClass||\"\")),i.styleClasses.textClass&&(r.textClass=R(i.styleClasses.textClass,r.textClass||\"\"))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(Be(e.display.measure))),0==o?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(l){var a=r.content.lastChild;(/\\bcm-tab\\b/.test(a.className)||a.querySelector&&a.querySelector(\".cm-tab\"))&&(r.content.className=\"cm-tab-wrap-hack\")}return _e(e,\"renderLine\",e,t.line,r.pre),r.pre.className&&(r.textClass=R(r.pre.className,r.textClass||\"\")),r}function bn(e){var t=E(\"span\",\"•\",\"cm-invalidchar\");return t.title=\"\\\\u\"+e.charCodeAt(0).toString(16),t.setAttribute(\"aria-label\",t.title),t}function _n(e,t,n,r,o,i,l){if(t){var c,u=e.splitSpaces?wn(t,e.trailingSpace):t,d=e.cm.state.specialChars,h=!1;if(d.test(t)){c=document.createDocumentFragment();for(var m=0;;){d.lastIndex=m;var f=d.exec(t),p=f?f.index-m:t.length-m;if(p){var g=document.createTextNode(u.slice(m,m+p));s&&a<9?c.appendChild(E(\"span\",[g])):c.appendChild(g),e.map.push(e.pos,e.pos+p,g),e.col+=p,e.pos+=p}if(!f)break;m+=p+1;var v=void 0;if(\"\\t\"==f[0]){var y=e.cm.options.tabSize,b=y-e.col%y;(v=c.appendChild(E(\"span\",J(b),\"cm-tab\"))).setAttribute(\"role\",\"presentation\"),v.setAttribute(\"cm-text\",\"\\t\"),e.col+=b}else\"\\r\"==f[0]||\"\\n\"==f[0]?((v=c.appendChild(E(\"span\",\"\\r\"==f[0]?\"␍\":\"␤\",\"cm-invalidchar\"))).setAttribute(\"cm-text\",f[0]),e.col+=1):((v=e.cm.options.specialCharPlaceholder(f[0])).setAttribute(\"cm-text\",f[0]),s&&a<9?c.appendChild(E(\"span\",[v])):c.appendChild(v),e.col+=1);e.map.push(e.pos,e.pos+1,v),e.pos++}}else e.col+=t.length,c=document.createTextNode(u),e.map.push(e.pos,e.pos+t.length,c),s&&a<9&&(h=!0),e.pos+=t.length;if(e.trailingSpace=32==u.charCodeAt(t.length-1),n||r||o||h||i||l){var _=n||\"\";r&&(_+=r),o&&(_+=o);var w=E(\"span\",[c],_,i);if(l)for(var x in l)l.hasOwnProperty(x)&&\"style\"!=x&&\"class\"!=x&&w.setAttribute(x,l[x]);return e.content.appendChild(w)}e.content.appendChild(c)}}function wn(e,t){if(e.length>1&&!/  /.test(e))return e;for(var n=t,r=\"\",o=0;o<e.length;o++){var i=e.charAt(o);\" \"!=i||!n||o!=e.length-1&&32!=e.charCodeAt(o+1)||(i=\" \"),r+=i,n=\" \"==i}return r}function xn(e,t){return function(n,r,o,i,s,a,l){o=o?o+\" cm-force-border\":\"cm-force-border\";for(var c=n.pos,u=c+r.length;;){for(var d=void 0,h=0;h<t.length&&!((d=t[h]).to>c&&d.from<=c);h++);if(d.to>=u)return e(n,r,o,i,s,a,l);e(n,r.slice(0,d.to-c),o,i,null,a,l),i=null,r=r.slice(d.to-c),c=d.to}}}function Cn(e,t,n,r){var o=!r&&n.widgetNode;o&&e.map.push(e.pos,e.pos+t,o),!r&&e.cm.display.input.needsContentAttribute&&(o||(o=e.content.appendChild(document.createElement(\"span\"))),o.setAttribute(\"cm-marker\",n.id)),o&&(e.cm.display.input.setUneditable(o),e.content.appendChild(o)),e.pos+=t,e.trailingSpace=!1}function kn(e,t,n){var r=e.markedSpans,o=e.text,i=0;if(r)for(var s,a,l,c,u,d,h,m=o.length,f=0,p=1,g=\"\",v=0;;){if(v==f){l=c=u=a=\"\",h=null,d=null,v=1/0;for(var y=[],b=void 0,_=0;_<r.length;++_){var w=r[_],x=w.marker;if(\"bookmark\"==x.type&&w.from==f&&x.widgetNode)y.push(x);else if(w.from<=f&&(null==w.to||w.to>f||x.collapsed&&w.to==f&&w.from==f)){if(null!=w.to&&w.to!=f&&v>w.to&&(v=w.to,c=\"\"),x.className&&(l+=\" \"+x.className),x.css&&(a=(a?a+\";\":\"\")+x.css),x.startStyle&&w.from==f&&(u+=\" \"+x.startStyle),x.endStyle&&w.to==v&&(b||(b=[])).push(x.endStyle,w.to),x.title&&((h||(h={})).title=x.title),x.attributes)for(var C in x.attributes)(h||(h={}))[C]=x.attributes[C];x.collapsed&&(!d||Kt(d.marker,x)<0)&&(d=w)}else w.from>f&&v>w.from&&(v=w.from)}if(b)for(var k=0;k<b.length;k+=2)b[k+1]==v&&(c+=\" \"+b[k]);if(!d||d.from==f)for(var D=0;D<y.length;++D)Cn(t,0,y[D]);if(d&&(d.from||0)==f){if(Cn(t,(null==d.to?m+1:d.to)-f,d.marker,null==d.from),null==d.to)return;d.to==f&&(d=!1)}}if(f>=m)break;for(var S=Math.min(m,v);;){if(g){var A=f+g.length;if(!d){var M=A>S?g.slice(0,S-f):g;t.addToken(t,M,s?s+l:l,u,f+M.length==v?c:\"\",a,h)}if(A>=S){g=g.slice(S-f),f=S;break}f=A,u=\"\"}g=o.slice(i,i=n[p++]),s=vn(n[p++],t.cm.options)}}else for(var L=1;L<n.length;L+=2)t.addToken(t,o.slice(i,i=n[L]),vn(n[L+1],t.cm.options))}function Dn(e,t,n){this.line=t,this.rest=rn(t),this.size=this.rest?ot(Q(this.rest))-n+1:1,this.node=this.text=null,this.hidden=an(e,t)}function Sn(e,t,n){for(var r,o=[],i=t;i<n;i=r){var s=new Dn(e.doc,et(e.doc,i),i);r=i+s.size,o.push(s)}return o}var An=null;function Mn(e){An?An.ops.push(e):e.ownsGroup=An={ops:[e],delayedCallbacks:[]}}function Ln(e){var t=e.delayedCallbacks,n=0;do{for(;n<t.length;n++)t[n].call(null);for(var r=0;r<e.ops.length;r++){var o=e.ops[r];if(o.cursorActivityHandlers)for(;o.cursorActivityCalled<o.cursorActivityHandlers.length;)o.cursorActivityHandlers[o.cursorActivityCalled++].call(null,o.cm)}}while(n<t.length)}function En(e,t){var n=e.ownsGroup;if(n)try{Ln(n)}finally{An=null,t(n)}}var Tn=null;function Fn(e,t){var n=ye(e,t);if(n.length){var r,o=Array.prototype.slice.call(arguments,2);An?r=An.delayedCallbacks:Tn?r=Tn:(r=Tn=[],setTimeout(On,0));for(var i=function(e){r.push((function(){return n[e].apply(null,o)}))},s=0;s<n.length;++s)i(s)}}function On(){var e=Tn;Tn=null;for(var t=0;t<e.length;++t)e[t]()}function Bn(e,t,n,r){for(var o=0;o<t.changes.length;o++){var i=t.changes[o];\"text\"==i?Yn(e,t):\"gutter\"==i?In(e,t,n,r):\"class\"==i?Pn(e,t):\"widget\"==i&&Hn(e,t,r)}t.changes=null}function Rn(e){return e.node==e.text&&(e.node=E(\"div\",null,null,\"position: relative\"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),s&&a<8&&(e.node.style.zIndex=2)),e.node}function $n(e,t){var n=t.bgClass?t.bgClass+\" \"+(t.line.bgClass||\"\"):t.line.bgClass;if(n&&(n+=\" CodeMirror-linebackground\"),t.background)n?t.background.className=n:(t.background.parentNode.removeChild(t.background),t.background=null);else if(n){var r=Rn(t);t.background=r.insertBefore(E(\"div\",null,n),r.firstChild),e.display.input.setUneditable(t.background)}}function Nn(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):yn(e,t)}function Yn(e,t){var n=t.text.className,r=Nn(e,t);t.text==t.node&&(t.node=r.pre),t.text.parentNode.replaceChild(r.pre,t.text),t.text=r.pre,r.bgClass!=t.bgClass||r.textClass!=t.textClass?(t.bgClass=r.bgClass,t.textClass=r.textClass,Pn(e,t)):n&&(t.text.className=n)}function Pn(e,t){$n(e,t),t.line.wrapClass?Rn(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className=\"\");var n=t.textClass?t.textClass+\" \"+(t.line.textClass||\"\"):t.line.textClass;t.text.className=n||\"\"}function In(e,t,n,r){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var o=Rn(t);t.gutterBackground=E(\"div\",null,\"CodeMirror-gutter-background \"+t.line.gutterClass,\"left: \"+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+\"px; width: \"+r.gutterTotalWidth+\"px\"),e.display.input.setUneditable(t.gutterBackground),o.insertBefore(t.gutterBackground,t.text)}var i=t.line.gutterMarkers;if(e.options.lineNumbers||i){var s=Rn(t),a=t.gutter=E(\"div\",null,\"CodeMirror-gutter-wrapper\",\"left: \"+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+\"px\");if(a.setAttribute(\"aria-hidden\",\"true\"),e.display.input.setUneditable(a),s.insertBefore(a,t.text),t.line.gutterClass&&(a.className+=\" \"+t.line.gutterClass),!e.options.lineNumbers||i&&i[\"CodeMirror-linenumbers\"]||(t.lineNumber=a.appendChild(E(\"div\",at(e.options,n),\"CodeMirror-linenumber CodeMirror-gutter-elt\",\"left: \"+r.gutterLeft[\"CodeMirror-linenumbers\"]+\"px; width: \"+e.display.lineNumInnerWidth+\"px\"))),i)for(var l=0;l<e.display.gutterSpecs.length;++l){var c=e.display.gutterSpecs[l].className,u=i.hasOwnProperty(c)&&i[c];u&&a.appendChild(E(\"div\",[u],\"CodeMirror-gutter-elt\",\"left: \"+r.gutterLeft[c]+\"px; width: \"+r.gutterWidth[c]+\"px\"))}}}function Hn(e,t,n){t.alignable&&(t.alignable=null);for(var r=D(\"CodeMirror-linewidget\"),o=t.node.firstChild,i=void 0;o;o=i)i=o.nextSibling,r.test(o.className)&&t.node.removeChild(o);Wn(e,t,n)}function jn(e,t,n,r){var o=Nn(e,t);return t.text=t.node=o.pre,o.bgClass&&(t.bgClass=o.bgClass),o.textClass&&(t.textClass=o.textClass),Pn(e,t),In(e,t,n,r),Wn(e,t,r),t.node}function Wn(e,t,n){if(zn(e,t.line,t,n,!0),t.rest)for(var r=0;r<t.rest.length;r++)zn(e,t.rest[r],t,n,!1)}function zn(e,t,n,r,o){if(t.widgets)for(var i=Rn(n),s=0,a=t.widgets;s<a.length;++s){var l=a[s],c=E(\"div\",[l.node],\"CodeMirror-linewidget\"+(l.className?\" \"+l.className:\"\"));l.handleMouseEvents||c.setAttribute(\"cm-ignore-events\",\"true\"),Un(l,c,n,r),e.display.input.setUneditable(c),o&&l.above?i.insertBefore(c,n.gutter||n.text):i.appendChild(c),Fn(l,\"redraw\")}}function Un(e,t,n,r){if(e.noHScroll){(n.alignable||(n.alignable=[])).push(t);var o=r.wrapperWidth;t.style.left=r.fixedPos+\"px\",e.coverGutter||(o-=r.gutterTotalWidth,t.style.paddingLeft=r.gutterTotalWidth+\"px\"),t.style.width=o+\"px\"}e.coverGutter&&(t.style.zIndex=5,t.style.position=\"relative\",e.noHScroll||(t.style.marginLeft=-r.gutterTotalWidth+\"px\"))}function Vn(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!F(document.body,e.node)){var n=\"position: relative;\";e.coverGutter&&(n+=\"margin-left: -\"+t.display.gutters.offsetWidth+\"px;\"),e.noHScroll&&(n+=\"width: \"+t.display.wrapper.clientWidth+\"px;\"),L(t.display.measure,E(\"div\",[e.node],null,n))}return e.height=e.node.parentNode.offsetHeight}function qn(e,t){for(var n=Le(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&\"true\"==n.getAttribute(\"cm-ignore-events\")||n.parentNode==e.sizer&&n!=e.mover)return!0}function Gn(e){return e.lineSpace.offsetTop}function Kn(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function Xn(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=L(e.measure,E(\"pre\",\"x\",\"CodeMirror-line-like\")),n=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,r={left:parseInt(n.paddingLeft),right:parseInt(n.paddingRight)};return isNaN(r.left)||isNaN(r.right)||(e.cachedPaddingH=r),r}function Jn(e){return z-e.display.nativeBarWidth}function Qn(e){return e.display.scroller.clientWidth-Jn(e)-e.display.barWidth}function Zn(e){return e.display.scroller.clientHeight-Jn(e)-e.display.barHeight}function er(e,t,n){var r=e.options.lineWrapping,o=r&&Qn(e);if(!t.measure.heights||r&&t.measure.width!=o){var i=t.measure.heights=[];if(r){t.measure.width=o;for(var s=t.text.firstChild.getClientRects(),a=0;a<s.length-1;a++){var l=s[a],c=s[a+1];Math.abs(l.bottom-c.bottom)>2&&i.push((l.bottom+c.top)/2-n.top)}}i.push(n.bottom-n.top)}}function tr(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};if(e.rest){for(var r=0;r<e.rest.length;r++)if(e.rest[r]==t)return{map:e.measure.maps[r],cache:e.measure.caches[r]};for(var o=0;o<e.rest.length;o++)if(ot(e.rest[o])>n)return{map:e.measure.maps[o],cache:e.measure.caches[o],before:!0}}}function nr(e,t){var n=ot(t=tn(t)),r=e.display.externalMeasured=new Dn(e.doc,t,n);r.lineN=n;var o=r.built=yn(e,r);return r.text=o.pre,L(e.display.lineMeasure,o.pre),r}function rr(e,t,n,r){return sr(e,ir(e,t),n,r)}function or(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[Pr(e,t)];var n=e.display.externalMeasured;return n&&t>=n.lineN&&t<n.lineN+n.size?n:void 0}function ir(e,t){var n=ot(t),r=or(e,n);r&&!r.text?r=null:r&&r.changes&&(Bn(e,r,n,Br(e)),e.curOp.forceUpdate=!0),r||(r=nr(e,t));var o=tr(r,t,n);return{line:t,view:r,rect:null,map:o.map,cache:o.cache,before:o.before,hasHeights:!1}}function sr(e,t,n,r,o){t.before&&(n=-1);var i,s=n+(r||\"\");return t.cache.hasOwnProperty(s)?i=t.cache[s]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(er(e,t.view,t.rect),t.hasHeights=!0),(i=dr(e,t,n,r)).bogus||(t.cache[s]=i)),{left:i.left,right:i.right,top:o?i.rtop:i.top,bottom:o?i.rbottom:i.bottom}}var ar,lr={left:0,right:0,top:0,bottom:0};function cr(e,t,n){for(var r,o,i,s,a,l,c=0;c<e.length;c+=3)if(a=e[c],l=e[c+1],t<a?(o=0,i=1,s=\"left\"):t<l?i=1+(o=t-a):(c==e.length-3||t==l&&e[c+3]>t)&&(o=(i=l-a)-1,t>=l&&(s=\"right\")),null!=o){if(r=e[c+2],a==l&&n==(r.insertLeft?\"left\":\"right\")&&(s=n),\"left\"==n&&0==o)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)r=e[2+(c-=3)],s=\"left\";if(\"right\"==n&&o==l-a)for(;c<e.length-3&&e[c+3]==e[c+4]&&!e[c+5].insertLeft;)r=e[(c+=3)+2],s=\"right\";break}return{node:r,start:o,end:i,collapse:s,coverStart:a,coverEnd:l}}function ur(e,t){var n=lr;if(\"left\"==t)for(var r=0;r<e.length&&(n=e[r]).left==n.right;r++);else for(var o=e.length-1;o>=0&&(n=e[o]).left==n.right;o--);return n}function dr(e,t,n,r){var o,i=cr(t.map,n,r),l=i.node,c=i.start,u=i.end,d=i.collapse;if(3==l.nodeType){for(var h=0;h<4;h++){for(;c&&le(t.line.text.charAt(i.coverStart+c));)--c;for(;i.coverStart+u<i.coverEnd&&le(t.line.text.charAt(i.coverStart+u));)++u;if((o=s&&a<9&&0==c&&u==i.coverEnd-i.coverStart?l.parentNode.getBoundingClientRect():ur(S(l,c,u).getClientRects(),r)).left||o.right||0==c)break;u=c,c-=1,d=\"right\"}s&&a<11&&(o=hr(e.display.measure,o))}else{var m;c>0&&(d=r=\"right\"),o=e.options.lineWrapping&&(m=l.getClientRects()).length>1?m[\"right\"==r?m.length-1:0]:l.getBoundingClientRect()}if(s&&a<9&&!c&&(!o||!o.left&&!o.right)){var f=l.parentNode.getClientRects()[0];o=f?{left:f.left,right:f.left+Or(e.display),top:f.top,bottom:f.bottom}:lr}for(var p=o.top-t.rect.top,g=o.bottom-t.rect.top,v=(p+g)/2,y=t.view.measure.heights,b=0;b<y.length-1&&!(v<y[b]);b++);var _=b?y[b-1]:0,w=y[b],x={left:(\"right\"==d?o.right:o.left)-t.rect.left,right:(\"left\"==d?o.left:o.right)-t.rect.left,top:_,bottom:w};return o.left||o.right||(x.bogus=!0),e.options.singleCursorHeightPerLine||(x.rtop=p,x.rbottom=g),x}function hr(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!He(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}function mr(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function fr(e){e.display.externalMeasure=null,M(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)mr(e.display.view[t])}function pr(e){fr(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function gr(e){return u&&v?-(e.body.getBoundingClientRect().left-parseInt(getComputedStyle(e.body).marginLeft)):e.defaultView.pageXOffset||(e.documentElement||e.body).scrollLeft}function vr(e){return u&&v?-(e.body.getBoundingClientRect().top-parseInt(getComputedStyle(e.body).marginTop)):e.defaultView.pageYOffset||(e.documentElement||e.body).scrollTop}function yr(e){var t=tn(e).widgets,n=0;if(t)for(var r=0;r<t.length;++r)t[r].above&&(n+=Vn(t[r]));return n}function br(e,t,n,r,o){if(!o){var i=yr(t);n.top+=i,n.bottom+=i}if(\"line\"==r)return n;r||(r=\"local\");var s=cn(t);if(\"local\"==r?s+=Gn(e.display):s-=e.display.viewOffset,\"page\"==r||\"window\"==r){var a=e.display.lineSpace.getBoundingClientRect();s+=a.top+(\"window\"==r?0:vr(N(e)));var l=a.left+(\"window\"==r?0:gr(N(e)));n.left+=l,n.right+=l}return n.top+=s,n.bottom+=s,n}function _r(e,t,n){if(\"div\"==n)return t;var r=t.left,o=t.top;if(\"page\"==n)r-=gr(N(e)),o-=vr(N(e));else if(\"local\"==n||!n){var i=e.display.sizer.getBoundingClientRect();r+=i.left,o+=i.top}var s=e.display.lineSpace.getBoundingClientRect();return{left:r-s.left,top:o-s.top}}function wr(e,t,n,r,o){return r||(r=et(e.doc,t.line)),br(e,r,rr(e,r,t.ch,o),n)}function xr(e,t,n,r,o,i){function s(t,s){var a=sr(e,o,t,s?\"right\":\"left\",i);return s?a.left=a.right:a.right=a.left,br(e,r,a,n)}r=r||et(e.doc,t.line),o||(o=ir(e,r));var a=pe(r,e.doc.direction),l=t.ch,c=t.sticky;if(l>=r.text.length?(l=r.text.length,c=\"before\"):l<=0&&(l=0,c=\"after\"),!a)return s(\"before\"==c?l-1:l,\"before\"==c);function u(e,t,n){return s(n?e-1:e,1==a[t].level!=n)}var d=me(a,l,c),h=he,m=u(l,d,\"before\"==c);return null!=h&&(m.other=u(l,h,\"before\"!=c)),m}function Cr(e,t){var n=0;t=pt(e.doc,t),e.options.lineWrapping||(n=Or(e.display)*t.ch);var r=et(e.doc,t.line),o=cn(r)+Gn(e.display);return{left:n,right:n,top:o,bottom:o+r.height}}function kr(e,t,n,r,o){var i=lt(e,t,n);return i.xRel=o,r&&(i.outside=r),i}function Dr(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return kr(r.first,0,null,-1,-1);var o=it(r,n),i=r.first+r.size-1;if(o>i)return kr(r.first+r.size-1,et(r,i).text.length,null,1,1);t<0&&(t=0);for(var s=et(r,o);;){var a=Lr(e,s,o,t,n),l=Zt(s,a.ch+(a.xRel>0||a.outside>0?1:0));if(!l)return a;var c=l.find(1);if(c.line==o)return c;s=et(r,o=c.line)}}function Sr(e,t,n,r){r-=yr(t);var o=t.text.length,i=ue((function(t){return sr(e,n,t-1).bottom<=r}),o,0);return{begin:i,end:o=ue((function(t){return sr(e,n,t).top>r}),i,o)}}function Ar(e,t,n,r){return n||(n=ir(e,t)),Sr(e,t,n,br(e,t,sr(e,n,r),\"line\").top)}function Mr(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function Lr(e,t,n,r,o){o-=cn(t);var i=ir(e,t),s=yr(t),a=0,l=t.text.length,c=!0,u=pe(t,e.doc.direction);if(u){var d=(e.options.lineWrapping?Tr:Er)(e,t,n,i,u,r,o);a=(c=1!=d.level)?d.from:d.to-1,l=c?d.to:d.from-1}var h,m,f=null,p=null,g=ue((function(t){var n=sr(e,i,t);return n.top+=s,n.bottom+=s,!!Mr(n,r,o,!1)&&(n.top<=o&&n.left<=r&&(f=t,p=n),!0)}),a,l),v=!1;if(p){var y=r-p.left<p.right-r,b=y==c;g=f+(b?0:1),m=b?\"after\":\"before\",h=y?p.left:p.right}else{c||g!=l&&g!=a||g++,m=0==g?\"after\":g==t.text.length?\"before\":sr(e,i,g-(c?1:0)).bottom+s<=o==c?\"after\":\"before\";var _=xr(e,lt(n,g,m),\"line\",t,i);h=_.left,v=o<_.top?-1:o>=_.bottom?1:0}return kr(n,g=ce(t.text,g,1),m,v,r-h)}function Er(e,t,n,r,o,i,s){var a=ue((function(a){var l=o[a],c=1!=l.level;return Mr(xr(e,lt(n,c?l.to:l.from,c?\"before\":\"after\"),\"line\",t,r),i,s,!0)}),0,o.length-1),l=o[a];if(a>0){var c=1!=l.level,u=xr(e,lt(n,c?l.from:l.to,c?\"after\":\"before\"),\"line\",t,r);Mr(u,i,s,!0)&&u.top>s&&(l=o[a-1])}return l}function Tr(e,t,n,r,o,i,s){var a=Sr(e,t,r,s),l=a.begin,c=a.end;/\\s/.test(t.text.charAt(c-1))&&c--;for(var u=null,d=null,h=0;h<o.length;h++){var m=o[h];if(!(m.from>=c||m.to<=l)){var f=sr(e,r,1!=m.level?Math.min(c,m.to)-1:Math.max(l,m.from)).right,p=f<i?i-f+1e9:f-i;(!u||d>p)&&(u=m,d=p)}}return u||(u=o[o.length-1]),u.from<l&&(u={from:l,to:u.to,level:u.level}),u.to>c&&(u={from:u.from,to:c,level:u.level}),u}function Fr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==ar){ar=E(\"pre\",null,\"CodeMirror-line-like\");for(var t=0;t<49;++t)ar.appendChild(document.createTextNode(\"x\")),ar.appendChild(E(\"br\"));ar.appendChild(document.createTextNode(\"x\"))}L(e.measure,ar);var n=ar.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),M(e.measure),n||1}function Or(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=E(\"span\",\"xxxxxxxxxx\"),n=E(\"pre\",[t],\"CodeMirror-line-like\");L(e.measure,n);var r=t.getBoundingClientRect(),o=(r.right-r.left)/10;return o>2&&(e.cachedCharWidth=o),o||10}function Br(e){for(var t=e.display,n={},r={},o=t.gutters.clientLeft,i=t.gutters.firstChild,s=0;i;i=i.nextSibling,++s){var a=e.display.gutterSpecs[s].className;n[a]=i.offsetLeft+i.clientLeft+o,r[a]=i.clientWidth}return{fixedPos:Rr(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function Rr(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function $r(e){var t=Fr(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/Or(e.display)-3);return function(o){if(an(e.doc,o))return 0;var i=0;if(o.widgets)for(var s=0;s<o.widgets.length;s++)o.widgets[s].height&&(i+=o.widgets[s].height);return n?i+(Math.ceil(o.text.length/r)||1)*t:i+t}}function Nr(e){var t=e.doc,n=$r(e);t.iter((function(e){var t=n(e);t!=e.height&&rt(e,t)}))}function Yr(e,t,n,r){var o=e.display;if(!n&&\"true\"==Le(t).getAttribute(\"cm-not-content\"))return null;var i,s,a=o.lineSpace.getBoundingClientRect();try{i=t.clientX-a.left,s=t.clientY-a.top}catch(e){return null}var l,c=Dr(e,i,s);if(r&&c.xRel>0&&(l=et(e.doc,c.line).text).length==c.ch){var u=H(l,l.length,e.options.tabSize)-l.length;c=lt(c.line,Math.max(0,Math.round((i-Xn(e.display).left)/Or(e.display))-u))}return c}function Pr(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;r<n.length;r++)if((t-=n[r].size)<0)return r}function Ir(e,t,n,r){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size),r||(r=0);var o=e.display;if(r&&n<o.viewTo&&(null==o.updateLineNumbers||o.updateLineNumbers>t)&&(o.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=o.viewTo)Ot&&on(e.doc,t)<o.viewTo&&jr(e);else if(n<=o.viewFrom)Ot&&sn(e.doc,n+r)>o.viewFrom?jr(e):(o.viewFrom+=r,o.viewTo+=r);else if(t<=o.viewFrom&&n>=o.viewTo)jr(e);else if(t<=o.viewFrom){var i=Wr(e,n,n+r,1);i?(o.view=o.view.slice(i.index),o.viewFrom=i.lineN,o.viewTo+=r):jr(e)}else if(n>=o.viewTo){var s=Wr(e,t,t,-1);s?(o.view=o.view.slice(0,s.index),o.viewTo=s.lineN):jr(e)}else{var a=Wr(e,t,t,-1),l=Wr(e,n,n+r,1);a&&l?(o.view=o.view.slice(0,a.index).concat(Sn(e,a.lineN,l.lineN)).concat(o.view.slice(l.index)),o.viewTo+=r):jr(e)}var c=o.externalMeasured;c&&(n<c.lineN?c.lineN+=r:t<c.lineN+c.size&&(o.externalMeasured=null))}function Hr(e,t,n){e.curOp.viewChanged=!0;var r=e.display,o=e.display.externalMeasured;if(o&&t>=o.lineN&&t<o.lineN+o.size&&(r.externalMeasured=null),!(t<r.viewFrom||t>=r.viewTo)){var i=r.view[Pr(e,t)];if(null!=i.node){var s=i.changes||(i.changes=[]);-1==W(s,n)&&s.push(n)}}}function jr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function Wr(e,t,n,r){var o,i=Pr(e,t),s=e.display.view;if(!Ot||n==e.doc.first+e.doc.size)return{index:i,lineN:n};for(var a=e.display.viewFrom,l=0;l<i;l++)a+=s[l].size;if(a!=t){if(r>0){if(i==s.length-1)return null;o=a+s[i].size-t,i++}else o=a-t;t+=o,n+=o}for(;on(e.doc,n)!=n;){if(i==(r<0?0:s.length-1))return null;n+=r*s[i-(r<0?1:0)].size,i+=r}return{index:i,lineN:n}}function zr(e,t,n){var r=e.display;0==r.view.length||t>=r.viewTo||n<=r.viewFrom?(r.view=Sn(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=Sn(e,t,r.viewFrom).concat(r.view):r.viewFrom<t&&(r.view=r.view.slice(Pr(e,t))),r.viewFrom=t,r.viewTo<n?r.view=r.view.concat(Sn(e,r.viewTo,n)):r.viewTo>n&&(r.view=r.view.slice(0,Pr(e,n)))),r.viewTo=n}function Ur(e){for(var t=e.display.view,n=0,r=0;r<t.length;r++){var o=t[r];o.hidden||o.node&&!o.changes||++n}return n}function Vr(e){e.display.input.showSelection(e.display.input.prepareSelection())}function qr(e,t){void 0===t&&(t=!0);var n=e.doc,r={},o=r.cursors=document.createDocumentFragment(),i=r.selection=document.createDocumentFragment(),s=e.options.$customCursor;s&&(t=!0);for(var a=0;a<n.sel.ranges.length;a++)if(t||a!=n.sel.primIndex){var l=n.sel.ranges[a];if(!(l.from().line>=e.display.viewTo||l.to().line<e.display.viewFrom)){var c=l.empty();if(s){var u=s(e,l);u&&Gr(e,u,o)}else(c||e.options.showCursorWhenSelecting)&&Gr(e,l.head,o);c||Xr(e,l,i)}}return r}function Gr(e,t,n){var r=xr(e,t,\"div\",null,null,!e.options.singleCursorHeightPerLine),o=n.appendChild(E(\"div\",\" \",\"CodeMirror-cursor\"));if(o.style.left=r.left+\"px\",o.style.top=r.top+\"px\",o.style.height=Math.max(0,r.bottom-r.top)*e.options.cursorHeight+\"px\",/\\bcm-fat-cursor\\b/.test(e.getWrapperElement().className)){var i=wr(e,t,\"div\",null,null),s=i.right-i.left;o.style.width=(s>0?s:e.defaultCharWidth())+\"px\"}if(r.other){var a=n.appendChild(E(\"div\",\" \",\"CodeMirror-cursor CodeMirror-secondarycursor\"));a.style.display=\"\",a.style.left=r.other.left+\"px\",a.style.top=r.other.top+\"px\",a.style.height=.85*(r.other.bottom-r.other.top)+\"px\"}}function Kr(e,t){return e.top-t.top||e.left-t.left}function Xr(e,t,n){var r=e.display,o=e.doc,i=document.createDocumentFragment(),s=Xn(e.display),a=s.left,l=Math.max(r.sizerWidth,Qn(e)-r.sizer.offsetLeft)-s.right,c=\"ltr\"==o.direction;function u(e,t,n,r){t<0&&(t=0),t=Math.round(t),r=Math.round(r),i.appendChild(E(\"div\",null,\"CodeMirror-selected\",\"position: absolute; left: \"+e+\"px;\\n                             top: \"+t+\"px; width: \"+(null==n?l-e:n)+\"px;\\n                             height: \"+(r-t)+\"px\"))}function d(t,n,r){var i,s,d=et(o,t),h=d.text.length;function m(n,r){return wr(e,lt(t,n),\"div\",d,r)}function f(t,n,r){var o=Ar(e,d,null,t),i=\"ltr\"==n==(\"after\"==r)?\"left\":\"right\";return m(\"after\"==r?o.begin:o.end-(/\\s/.test(d.text.charAt(o.end-1))?2:1),i)[i]}var p=pe(d,o.direction);return de(p,n||0,null==r?h:r,(function(e,t,o,d){var g=\"ltr\"==o,v=m(e,g?\"left\":\"right\"),y=m(t-1,g?\"right\":\"left\"),b=null==n&&0==e,_=null==r&&t==h,w=0==d,x=!p||d==p.length-1;if(y.top-v.top<=3){var C=(c?_:b)&&x,k=(c?b:_)&&w?a:(g?v:y).left,D=C?l:(g?y:v).right;u(k,v.top,D-k,v.bottom)}else{var S,A,M,L;g?(S=c&&b&&w?a:v.left,A=c?l:f(e,o,\"before\"),M=c?a:f(t,o,\"after\"),L=c&&_&&x?l:y.right):(S=c?f(e,o,\"before\"):a,A=!c&&b&&w?l:v.right,M=!c&&_&&x?a:y.left,L=c?f(t,o,\"after\"):l),u(S,v.top,A-S,v.bottom),v.bottom<y.top&&u(a,v.bottom,null,y.top),u(M,y.top,L-M,y.bottom)}(!i||Kr(v,i)<0)&&(i=v),Kr(y,i)<0&&(i=y),(!s||Kr(v,s)<0)&&(s=v),Kr(y,s)<0&&(s=y)})),{start:i,end:s}}var h=t.from(),m=t.to();if(h.line==m.line)d(h.line,h.ch,m.ch);else{var f=et(o,h.line),p=et(o,m.line),g=tn(f)==tn(p),v=d(h.line,h.ch,g?f.text.length+1:null).end,y=d(m.line,g?0:null,m.ch).start;g&&(v.top<y.top-2?(u(v.right,v.top,null,v.bottom),u(a,y.top,y.left,y.bottom)):u(v.right,v.top,y.left-v.right,v.bottom)),v.bottom<y.top&&u(a,v.bottom,null,y.top)}n.appendChild(i)}function Jr(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var n=!0;t.cursorDiv.style.visibility=\"\",e.options.cursorBlinkRate>0?t.blinker=setInterval((function(){e.hasFocus()||to(e),t.cursorDiv.style.visibility=(n=!n)?\"\":\"hidden\"}),e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility=\"hidden\")}}function Qr(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||eo(e))}function Zr(e){e.state.delayingBlurEvent=!0,setTimeout((function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&to(e))}),100)}function eo(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),\"nocursor\"!=e.options.readOnly&&(e.state.focused||(_e(e,\"focus\",e,t),e.state.focused=!0,B(e.display.wrapper,\"CodeMirror-focused\"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),l&&setTimeout((function(){return e.display.input.reset(!0)}),20)),e.display.input.receivedFocus()),Jr(e))}function to(e,t){e.state.delayingBlurEvent||(e.state.focused&&(_e(e,\"blur\",e,t),e.state.focused=!1,A(e.display.wrapper,\"CodeMirror-focused\")),clearInterval(e.display.blinker),setTimeout((function(){e.state.focused||(e.display.shift=!1)}),150))}function no(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=Math.max(0,t.scroller.getBoundingClientRect().top),o=t.lineDiv.getBoundingClientRect().top,i=0,l=0;l<t.view.length;l++){var c=t.view[l],u=e.options.lineWrapping,d=void 0,h=0;if(!c.hidden){if(o+=c.line.height,s&&a<8){var m=c.node.offsetTop+c.node.offsetHeight;d=m-n,n=m}else{var f=c.node.getBoundingClientRect();d=f.bottom-f.top,!u&&c.text.firstChild&&(h=c.text.firstChild.getBoundingClientRect().right-f.left-1)}var p=c.line.height-d;if((p>.005||p<-.005)&&(o<r&&(i-=p),rt(c.line,d),ro(c.line),c.rest))for(var g=0;g<c.rest.length;g++)ro(c.rest[g]);if(h>e.display.sizerWidth){var v=Math.ceil(h/Or(e.display));v>e.display.maxLineLength&&(e.display.maxLineLength=v,e.display.maxLine=c.line,e.display.maxLineChanged=!0)}}}Math.abs(i)>2&&(t.scroller.scrollTop+=i)}function ro(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var n=e.widgets[t],r=n.node.parentNode;r&&(n.height=r.offsetHeight)}}function oo(e,t,n){var r=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop;r=Math.floor(r-Gn(e));var o=n&&null!=n.bottom?n.bottom:r+e.wrapper.clientHeight,i=it(t,r),s=it(t,o);if(n&&n.ensure){var a=n.ensure.from.line,l=n.ensure.to.line;a<i?(i=a,s=it(t,cn(et(t,a))+e.wrapper.clientHeight)):Math.min(l,t.lastLine())>=s&&(i=it(t,cn(et(t,l))-e.wrapper.clientHeight),s=l)}return{from:i,to:Math.max(s,i+1)}}function io(e,t){if(!we(e,\"scrollCursorIntoView\")){var n=e.display,r=n.sizer.getBoundingClientRect(),o=null,i=n.wrapper.ownerDocument;if(t.top+r.top<0?o=!0:t.bottom+r.top>(i.defaultView.innerHeight||i.documentElement.clientHeight)&&(o=!1),null!=o&&!p){var s=E(\"div\",\"​\",null,\"position: absolute;\\n                         top: \"+(t.top-n.viewOffset-Gn(e.display))+\"px;\\n                         height: \"+(t.bottom-t.top+Jn(e)+n.barHeight)+\"px;\\n                         left: \"+t.left+\"px; width: \"+Math.max(2,t.right-t.left)+\"px;\");e.display.lineSpace.appendChild(s),s.scrollIntoView(o),e.display.lineSpace.removeChild(s)}}}function so(e,t,n,r){var o;null==r&&(r=0),e.options.lineWrapping||t!=n||(n=\"before\"==t.sticky?lt(t.line,t.ch+1,\"before\"):t,t=t.ch?lt(t.line,\"before\"==t.sticky?t.ch-1:t.ch,\"after\"):t);for(var i=0;i<5;i++){var s=!1,a=xr(e,t),l=n&&n!=t?xr(e,n):a,c=lo(e,o={left:Math.min(a.left,l.left),top:Math.min(a.top,l.top)-r,right:Math.max(a.left,l.left),bottom:Math.max(a.bottom,l.bottom)+r}),u=e.doc.scrollTop,d=e.doc.scrollLeft;if(null!=c.scrollTop&&(go(e,c.scrollTop),Math.abs(e.doc.scrollTop-u)>1&&(s=!0)),null!=c.scrollLeft&&(yo(e,c.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(s=!0)),!s)break}return o}function ao(e,t){var n=lo(e,t);null!=n.scrollTop&&go(e,n.scrollTop),null!=n.scrollLeft&&yo(e,n.scrollLeft)}function lo(e,t){var n=e.display,r=Fr(e.display);t.top<0&&(t.top=0);var o=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,i=Zn(e),s={};t.bottom-t.top>i&&(t.bottom=t.top+i);var a=e.doc.height+Kn(n),l=t.top<r,c=t.bottom>a-r;if(t.top<o)s.scrollTop=l?0:t.top;else if(t.bottom>o+i){var u=Math.min(t.top,(c?a:t.bottom)-i);u!=o&&(s.scrollTop=u)}var d=e.options.fixedGutter?0:n.gutters.offsetWidth,h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-d,m=Qn(e)-n.gutters.offsetWidth,f=t.right-t.left>m;return f&&(t.right=t.left+m),t.left<10?s.scrollLeft=0:t.left<h?s.scrollLeft=Math.max(0,t.left+d-(f?0:10)):t.right>m+h-3&&(s.scrollLeft=t.right+(f?0:10)-m),s}function co(e,t){null!=t&&(fo(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function uo(e){fo(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function ho(e,t,n){null==t&&null==n||fo(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function mo(e,t){fo(e),e.curOp.scrollToPos=t}function fo(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,po(e,Cr(e,t.from),Cr(e,t.to),t.margin))}function po(e,t,n,r){var o=lo(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});ho(e,o.scrollLeft,o.scrollTop)}function go(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||qo(e,{top:t}),vo(e,t,!0),n&&qo(e),Po(e,100))}function vo(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function yo(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,Jo(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function bo(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+Kn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+Jn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var _o=function(e,t,n){this.cm=n;var r=this.vert=E(\"div\",[E(\"div\",null,null,\"min-width: 1px\")],\"CodeMirror-vscrollbar\"),o=this.horiz=E(\"div\",[E(\"div\",null,null,\"height: 100%; min-height: 1px\")],\"CodeMirror-hscrollbar\");r.tabIndex=o.tabIndex=-1,e(r),e(o),ve(r,\"scroll\",(function(){r.clientHeight&&t(r.scrollTop,\"vertical\")})),ve(o,\"scroll\",(function(){o.clientWidth&&t(o.scrollLeft,\"horizontal\")})),this.checkedZeroWidth=!1,s&&a<8&&(this.horiz.style.minHeight=this.vert.style.minWidth=\"18px\")};_o.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display=\"block\",this.vert.style.bottom=t?r+\"px\":\"0\";var o=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+o)+\"px\"}else this.vert.scrollTop=0,this.vert.style.display=\"\",this.vert.firstChild.style.height=\"0\";if(t){this.horiz.style.display=\"block\",this.horiz.style.right=n?r+\"px\":\"0\",this.horiz.style.left=e.barLeft+\"px\";var i=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+i)+\"px\"}else this.horiz.style.display=\"\",this.horiz.firstChild.style.width=\"0\";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==r&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},_o.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,\"horiz\")},_o.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,\"vert\")},_o.prototype.zeroWidthHack=function(){var e=b&&!f?\"12px\":\"18px\";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.visibility=this.vert.style.visibility=\"hidden\",this.disableHoriz=new j,this.disableVert=new j},_o.prototype.enableZeroWidthBar=function(e,t,n){function r(){var o=e.getBoundingClientRect();(\"vert\"==n?document.elementFromPoint(o.right-1,(o.top+o.bottom)/2):document.elementFromPoint((o.right+o.left)/2,o.bottom-1))!=e?e.style.visibility=\"hidden\":t.set(1e3,r)}e.style.visibility=\"\",t.set(1e3,r)},_o.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var wo=function(){};function xo(e,t){t||(t=bo(e));var n=e.display.barWidth,r=e.display.barHeight;Co(e,t);for(var o=0;o<4&&n!=e.display.barWidth||r!=e.display.barHeight;o++)n!=e.display.barWidth&&e.options.lineWrapping&&no(e),Co(e,bo(e)),n=e.display.barWidth,r=e.display.barHeight}function Co(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+\"px\",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+\"px\",n.heightForcer.style.borderBottom=r.bottom+\"px solid transparent\",r.right&&r.bottom?(n.scrollbarFiller.style.display=\"block\",n.scrollbarFiller.style.height=r.bottom+\"px\",n.scrollbarFiller.style.width=r.right+\"px\"):n.scrollbarFiller.style.display=\"\",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display=\"block\",n.gutterFiller.style.height=r.bottom+\"px\",n.gutterFiller.style.width=t.gutterWidth+\"px\"):n.gutterFiller.style.display=\"\"}wo.prototype.update=function(){return{bottom:0,right:0}},wo.prototype.setScrollLeft=function(){},wo.prototype.setScrollTop=function(){},wo.prototype.clear=function(){};var ko={native:_o,null:wo};function Do(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&A(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new ko[e.options.scrollbarStyle]((function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),ve(t,\"mousedown\",(function(){e.state.focused&&setTimeout((function(){return e.display.input.focus()}),0)})),t.setAttribute(\"cm-not-content\",\"true\")}),(function(t,n){\"horizontal\"==n?yo(e,t):go(e,t)}),e),e.display.scrollbars.addClass&&B(e.display.wrapper,e.display.scrollbars.addClass)}var So=0;function Ao(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++So,markArrays:null},Mn(e.curOp)}function Mo(e){var t=e.curOp;t&&En(t,(function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;Lo(e)}))}function Lo(e){for(var t=e.ops,n=0;n<t.length;n++)Eo(t[n]);for(var r=0;r<t.length;r++)To(t[r]);for(var o=0;o<t.length;o++)Fo(t[o]);for(var i=0;i<t.length;i++)Oo(t[i]);for(var s=0;s<t.length;s++)Bo(t[s])}function Eo(e){var t=e.cm,n=t.display;jo(t),e.updateMaxLine&&dn(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<n.viewFrom||e.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new Ho(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function To(e){e.updatedDisplay=e.mustUpdate&&Uo(e.cm,e.update)}function Fo(e){var t=e.cm,n=t.display;e.updatedDisplay&&no(t),e.barMeasure=bo(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=rr(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Jn(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Qn(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function Oo(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+\"px\",e.maxScrollLeft<t.doc.scrollLeft&&yo(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var n=e.focus&&e.focus==O(N(t));e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,n),(e.updatedDisplay||e.startHeight!=t.doc.height)&&xo(t,e.barMeasure),e.updatedDisplay&&Xo(t,e.barMeasure),e.selectionChanged&&Jr(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),n&&Qr(e.cm)}function Bo(e){var t=e.cm,n=t.display,r=t.doc;e.updatedDisplay&&Vo(t,e.update),null==n.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(n.wheelStartX=n.wheelStartY=null),null!=e.scrollTop&&vo(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&yo(t,e.scrollLeft,!0,!0),e.scrollToPos&&io(t,so(t,pt(r,e.scrollToPos.from),pt(r,e.scrollToPos.to),e.scrollToPos.margin));var o=e.maybeHiddenMarkers,i=e.maybeUnhiddenMarkers;if(o)for(var s=0;s<o.length;++s)o[s].lines.length||_e(o[s],\"hide\");if(i)for(var a=0;a<i.length;++a)i[a].lines.length&&_e(i[a],\"unhide\");n.wrapper.offsetHeight&&(r.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&_e(t,\"changes\",t,e.changeObjs),e.update&&e.update.finish()}function Ro(e,t){if(e.curOp)return t();Ao(e);try{return t()}finally{Mo(e)}}function $o(e,t){return function(){if(e.curOp)return t.apply(e,arguments);Ao(e);try{return t.apply(e,arguments)}finally{Mo(e)}}}function No(e){return function(){if(this.curOp)return e.apply(this,arguments);Ao(this);try{return e.apply(this,arguments)}finally{Mo(this)}}}function Yo(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);Ao(t);try{return e.apply(this,arguments)}finally{Mo(t)}}}function Po(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,P(Io,e))}function Io(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var n=+new Date+e.options.workTime,r=xt(e,t.highlightFrontier),o=[];t.iter(r.line,Math.min(t.first+t.size,e.display.viewTo+500),(function(i){if(r.line>=e.display.viewFrom){var s=i.styles,a=i.text.length>e.options.maxHighlightLength?Xe(t.mode,r.state):null,l=_t(e,i,r,!0);a&&(r.state=a),i.styles=l.styles;var c=i.styleClasses,u=l.classes;u?i.styleClasses=u:c&&(i.styleClasses=null);for(var d=!s||s.length!=i.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!d&&h<s.length;++h)d=s[h]!=i.styles[h];d&&o.push(r.line),i.stateAfter=r.save(),r.nextLine()}else i.text.length<=e.options.maxHighlightLength&&Ct(e,i.text,r),i.stateAfter=r.line%5==0?r.save():null,r.nextLine();if(+new Date>n)return Po(e,e.options.workDelay),!0})),t.highlightFrontier=r.line,t.modeFrontier=Math.max(t.modeFrontier,r.line),o.length&&Ro(e,(function(){for(var t=0;t<o.length;t++)Hr(e,o[t],\"text\")}))}}var Ho=function(e,t,n){var r=e.display;this.viewport=t,this.visible=oo(r,e.doc,t),this.editorIsHidden=!r.wrapper.offsetWidth,this.wrapperHeight=r.wrapper.clientHeight,this.wrapperWidth=r.wrapper.clientWidth,this.oldDisplayWidth=Qn(e),this.force=n,this.dims=Br(e),this.events=[]};function jo(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=Jn(e)+\"px\",t.sizer.style.marginBottom=-t.nativeBarWidth+\"px\",t.sizer.style.borderRightWidth=Jn(e)+\"px\",t.scrollbarsClipped=!0)}function Wo(e){if(e.hasFocus())return null;var t=O(N(e));if(!t||!F(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var r=Y(e).getSelection();r.anchorNode&&r.extend&&F(e.display.lineDiv,r.anchorNode)&&(n.anchorNode=r.anchorNode,n.anchorOffset=r.anchorOffset,n.focusNode=r.focusNode,n.focusOffset=r.focusOffset)}return n}function zo(e){if(e&&e.activeElt&&e.activeElt!=O(e.activeElt.ownerDocument)&&(e.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(e.activeElt.nodeName)&&e.anchorNode&&F(document.body,e.anchorNode)&&F(document.body,e.focusNode))){var t=e.activeElt.ownerDocument,n=t.defaultView.getSelection(),r=t.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),n.removeAllRanges(),n.addRange(r),n.extend(e.focusNode,e.focusOffset)}}function Uo(e,t){var n=e.display,r=e.doc;if(t.editorIsHidden)return jr(e),!1;if(!t.force&&t.visible.from>=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==Ur(e))return!1;Qo(e)&&(jr(e),t.dims=Br(e));var o=r.first+r.size,i=Math.max(t.visible.from-e.options.viewportMargin,r.first),s=Math.min(o,t.visible.to+e.options.viewportMargin);n.viewFrom<i&&i-n.viewFrom<20&&(i=Math.max(r.first,n.viewFrom)),n.viewTo>s&&n.viewTo-s<20&&(s=Math.min(o,n.viewTo)),Ot&&(i=on(e.doc,i),s=sn(e.doc,s));var a=i!=n.viewFrom||s!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;zr(e,i,s),n.viewOffset=cn(et(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+\"px\";var l=Ur(e);if(!a&&0==l&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var c=Wo(e);return l>4&&(n.lineDiv.style.display=\"none\"),Go(e,n.updateLineNumbers,t.dims),l>4&&(n.lineDiv.style.display=\"\"),n.renderedView=n.view,zo(c),M(n.cursorDiv),M(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,a&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,Po(e,400)),n.updateLineNumbers=null,!0}function Vo(e,t){for(var n=t.viewport,r=!0;;r=!1){if(r&&e.options.lineWrapping&&t.oldDisplayWidth!=Qn(e))r&&(t.visible=oo(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+Kn(e.display)-Zn(e),n.top)}),t.visible=oo(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!Uo(e,t))break;no(e);var o=bo(e);Vr(e),xo(e,o),Xo(e,o),t.force=!1}t.signal(e,\"update\",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,\"viewportChange\",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function qo(e,t){var n=new Ho(e,t);if(Uo(e,n)){no(e),Vo(e,n);var r=bo(e);Vr(e),xo(e,r),Xo(e,r),n.finish()}}function Go(e,t,n){var r=e.display,o=e.options.lineNumbers,i=r.lineDiv,s=i.firstChild;function a(t){var n=t.nextSibling;return l&&b&&e.display.currentWheelTarget==t?t.style.display=\"none\":t.parentNode.removeChild(t),n}for(var c=r.view,u=r.viewFrom,d=0;d<c.length;d++){var h=c[d];if(h.hidden);else if(h.node&&h.node.parentNode==i){for(;s!=h.node;)s=a(s);var m=o&&null!=t&&t<=u&&h.lineNumber;h.changes&&(W(h.changes,\"gutter\")>-1&&(m=!1),Bn(e,h,u,n)),m&&(M(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(at(e.options,u)))),s=h.node.nextSibling}else{var f=jn(e,h,u,n);i.insertBefore(f,s)}u+=h.size}for(;s;)s=a(s)}function Ko(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+\"px\",Fn(e,\"gutterChanged\",e)}function Xo(e,t){e.display.sizer.style.minHeight=t.docHeight+\"px\",e.display.heightForcer.style.top=t.docHeight+\"px\",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Jn(e)+\"px\"}function Jo(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=Rr(t)-t.scroller.scrollLeft+e.doc.scrollLeft,o=t.gutters.offsetWidth,i=r+\"px\",s=0;s<n.length;s++)if(!n[s].hidden){e.options.fixedGutter&&(n[s].gutter&&(n[s].gutter.style.left=i),n[s].gutterBackground&&(n[s].gutterBackground.style.left=i));var a=n[s].alignable;if(a)for(var l=0;l<a.length;l++)a[l].style.left=i}e.options.fixedGutter&&(t.gutters.style.left=r+o+\"px\")}}function Qo(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=at(e.options,t.first+t.size-1),r=e.display;if(n.length!=r.lineNumChars){var o=r.measure.appendChild(E(\"div\",[E(\"div\",n)],\"CodeMirror-linenumber CodeMirror-gutter-elt\")),i=o.firstChild.offsetWidth,s=o.offsetWidth-i;return r.lineGutter.style.width=\"\",r.lineNumInnerWidth=Math.max(i,r.lineGutter.offsetWidth-s)+1,r.lineNumWidth=r.lineNumInnerWidth+s,r.lineNumChars=r.lineNumInnerWidth?n.length:-1,r.lineGutter.style.width=r.lineNumWidth+\"px\",Ko(e.display),!0}return!1}function Zo(e,t){for(var n=[],r=!1,o=0;o<e.length;o++){var i=e[o],s=null;if(\"string\"!=typeof i&&(s=i.style,i=i.className),\"CodeMirror-linenumbers\"==i){if(!t)continue;r=!0}n.push({className:i,style:s})}return t&&!r&&n.push({className:\"CodeMirror-linenumbers\",style:null}),n}function ei(e){var t=e.gutters,n=e.gutterSpecs;M(t),e.lineGutter=null;for(var r=0;r<n.length;++r){var o=n[r],i=o.className,s=o.style,a=t.appendChild(E(\"div\",null,\"CodeMirror-gutter \"+i));s&&(a.style.cssText=s),\"CodeMirror-linenumbers\"==i&&(e.lineGutter=a,a.style.width=(e.lineNumWidth||1)+\"px\")}t.style.display=n.length?\"\":\"none\",Ko(e)}function ti(e){ei(e.display),Ir(e),Jo(e)}function ni(e,t,r,o){var i=this;this.input=r,i.scrollbarFiller=E(\"div\",null,\"CodeMirror-scrollbar-filler\"),i.scrollbarFiller.setAttribute(\"cm-not-content\",\"true\"),i.gutterFiller=E(\"div\",null,\"CodeMirror-gutter-filler\"),i.gutterFiller.setAttribute(\"cm-not-content\",\"true\"),i.lineDiv=T(\"div\",null,\"CodeMirror-code\"),i.selectionDiv=E(\"div\",null,null,\"position: relative; z-index: 1\"),i.cursorDiv=E(\"div\",null,\"CodeMirror-cursors\"),i.measure=E(\"div\",null,\"CodeMirror-measure\"),i.lineMeasure=E(\"div\",null,\"CodeMirror-measure\"),i.lineSpace=T(\"div\",[i.measure,i.lineMeasure,i.selectionDiv,i.cursorDiv,i.lineDiv],null,\"position: relative; outline: none\");var c=T(\"div\",[i.lineSpace],\"CodeMirror-lines\");i.mover=E(\"div\",[c],null,\"position: relative\"),i.sizer=E(\"div\",[i.mover],\"CodeMirror-sizer\"),i.sizerWidth=null,i.heightForcer=E(\"div\",null,null,\"position: absolute; height: \"+z+\"px; width: 1px;\"),i.gutters=E(\"div\",null,\"CodeMirror-gutters\"),i.lineGutter=null,i.scroller=E(\"div\",[i.sizer,i.heightForcer,i.gutters],\"CodeMirror-scroll\"),i.scroller.setAttribute(\"tabIndex\",\"-1\"),i.wrapper=E(\"div\",[i.scrollbarFiller,i.gutterFiller,i.scroller],\"CodeMirror\"),u&&d>=105&&(i.wrapper.style.clipPath=\"inset(0px)\"),i.wrapper.setAttribute(\"translate\",\"no\"),s&&a<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),l||n&&y||(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,i.gutterSpecs=Zo(o.gutters,o.lineNumbers),ei(i),r.init(i)}Ho.prototype.signal=function(e,t){Ce(e,t)&&this.events.push(arguments)},Ho.prototype.finish=function(){for(var e=0;e<this.events.length;e++)_e.apply(null,this.events[e])};var ri=0,oi=null;function ii(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==n&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:null==n&&(n=e.wheelDelta),{x:t,y:n}}function si(e){var t=ii(e);return t.x*=oi,t.y*=oi,t}function ai(e,t){u&&102==d&&(null==e.display.chromeScrollHack?e.display.sizer.style.pointerEvents=\"none\":clearTimeout(e.display.chromeScrollHack),e.display.chromeScrollHack=setTimeout((function(){e.display.chromeScrollHack=null,e.display.sizer.style.pointerEvents=\"\"}),100));var r=ii(t),o=r.x,i=r.y,s=oi;0===t.deltaMode&&(o=t.deltaX,i=t.deltaY,s=1);var a=e.display,c=a.scroller,m=c.scrollWidth>c.clientWidth,f=c.scrollHeight>c.clientHeight;if(o&&m||i&&f){if(i&&b&&l)e:for(var p=t.target,g=a.view;p!=c;p=p.parentNode)for(var v=0;v<g.length;v++)if(g[v].node==p){e.display.currentWheelTarget=p;break e}if(o&&!n&&!h&&null!=s)return i&&f&&go(e,Math.max(0,c.scrollTop+i*s)),yo(e,Math.max(0,c.scrollLeft+o*s)),(!i||i&&f)&&De(t),void(a.wheelStartX=null);if(i&&null!=s){var y=i*s,_=e.doc.scrollTop,w=_+a.wrapper.clientHeight;y<0?_=Math.max(0,_+y-50):w=Math.min(e.doc.height,w+y+50),qo(e,{top:_,bottom:w})}ri<20&&0!==t.deltaMode&&(null==a.wheelStartX?(a.wheelStartX=c.scrollLeft,a.wheelStartY=c.scrollTop,a.wheelDX=o,a.wheelDY=i,setTimeout((function(){if(null!=a.wheelStartX){var e=c.scrollLeft-a.wheelStartX,t=c.scrollTop-a.wheelStartY,n=t&&a.wheelDY&&t/a.wheelDY||e&&a.wheelDX&&e/a.wheelDX;a.wheelStartX=a.wheelStartY=null,n&&(oi=(oi*ri+n)/(ri+1),++ri)}}),200)):(a.wheelDX+=o,a.wheelDY+=i))}}s?oi=-.53:n?oi=15:u?oi=-.7:m&&(oi=-1/3);var li=function(e,t){this.ranges=e,this.primIndex=t};li.prototype.primary=function(){return this.ranges[this.primIndex]},li.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],r=e.ranges[t];if(!ut(n.anchor,r.anchor)||!ut(n.head,r.head))return!1}return!0},li.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new ci(dt(this.ranges[t].anchor),dt(this.ranges[t].head));return new li(e,this.primIndex)},li.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},li.prototype.contains=function(e,t){t||(t=e);for(var n=0;n<this.ranges.length;n++){var r=this.ranges[n];if(ct(t,r.from())>=0&&ct(e,r.to())<=0)return n}return-1};var ci=function(e,t){this.anchor=e,this.head=t};function ui(e,t,n){var r=e&&e.options.selectionsMayTouch,o=t[n];t.sort((function(e,t){return ct(e.from(),t.from())})),n=W(t,o);for(var i=1;i<t.length;i++){var s=t[i],a=t[i-1],l=ct(a.to(),s.from());if(r&&!s.empty()?l>0:l>=0){var c=mt(a.from(),s.from()),u=ht(a.to(),s.to()),d=a.empty()?s.from()==s.head:a.from()==a.head;i<=n&&--n,t.splice(--i,2,new ci(d?u:c,d?c:u))}}return new li(t,n)}function di(e,t){return new li([new ci(e,t||e)],0)}function hi(e){return e.text?lt(e.from.line+e.text.length-1,Q(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function mi(e,t){if(ct(e,t.from)<0)return e;if(ct(e,t.to)<=0)return hi(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=hi(t).ch-t.to.ch),lt(n,r)}function fi(e,t){for(var n=[],r=0;r<e.sel.ranges.length;r++){var o=e.sel.ranges[r];n.push(new ci(mi(o.anchor,t),mi(o.head,t)))}return ui(e.cm,n,e.sel.primIndex)}function pi(e,t,n){return e.line==t.line?lt(n.line,e.ch-t.ch+n.ch):lt(n.line+(e.line-t.line),e.ch)}function gi(e,t,n){for(var r=[],o=lt(e.first,0),i=o,s=0;s<t.length;s++){var a=t[s],l=pi(a.from,o,i),c=pi(hi(a),o,i);if(o=a.to,i=c,\"around\"==n){var u=e.sel.ranges[s],d=ct(u.head,u.anchor)<0;r[s]=new ci(d?c:l,d?l:c)}else r[s]=new ci(l,l)}return new li(r,e.sel.primIndex)}function vi(e){e.doc.mode=qe(e.options,e.doc.modeOption),yi(e)}function yi(e){e.doc.iter((function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)})),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,Po(e,100),e.state.modeGen++,e.curOp&&Ir(e)}function bi(e,t){return 0==t.from.ch&&0==t.to.ch&&\"\"==Q(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function _i(e,t,n,r){function o(e){return n?n[e]:null}function i(e,n,o){mn(e,n,o,r),Fn(e,\"change\",e,t)}function s(e,t){for(var n=[],i=e;i<t;++i)n.push(new hn(c[i],o(i),r));return n}var a=t.from,l=t.to,c=t.text,u=et(e,a.line),d=et(e,l.line),h=Q(c),m=o(c.length-1),f=l.line-a.line;if(t.full)e.insert(0,s(0,c.length)),e.remove(c.length,e.size-c.length);else if(bi(e,t)){var p=s(0,c.length-1);i(d,d.text,m),f&&e.remove(a.line,f),p.length&&e.insert(a.line,p)}else if(u==d)if(1==c.length)i(u,u.text.slice(0,a.ch)+h+u.text.slice(l.ch),m);else{var g=s(1,c.length-1);g.push(new hn(h+u.text.slice(l.ch),m,r)),i(u,u.text.slice(0,a.ch)+c[0],o(0)),e.insert(a.line+1,g)}else if(1==c.length)i(u,u.text.slice(0,a.ch)+c[0]+d.text.slice(l.ch),o(0)),e.remove(a.line+1,f);else{i(u,u.text.slice(0,a.ch)+c[0],o(0)),i(d,h+d.text.slice(l.ch),m);var v=s(1,c.length-1);f>1&&e.remove(a.line+1,f-1),e.insert(a.line+1,v)}Fn(e,\"change\",e,t)}function wi(e,t,n){function r(e,o,i){if(e.linked)for(var s=0;s<e.linked.length;++s){var a=e.linked[s];if(a.doc!=o){var l=i&&a.sharedHist;n&&!l||(t(a.doc,l),r(a.doc,e,l))}}}r(e,null,!0)}function xi(e,t){if(t.cm)throw new Error(\"This document is already in use.\");e.doc=t,t.cm=e,Nr(e),vi(e),Ci(e),e.options.direction=t.direction,e.options.lineWrapping||dn(e),e.options.mode=t.modeOption,Ir(e)}function Ci(e){(\"rtl\"==e.doc.direction?B:A)(e.display.lineDiv,\"CodeMirror-rtl\")}function ki(e){Ro(e,(function(){Ci(e),Ir(e)}))}function Di(e){this.done=[],this.undone=[],this.undoDepth=e?e.undoDepth:1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e?e.maxGeneration:1}function Si(e,t){var n={from:dt(t.from),to:hi(t),text:tt(e,t.from,t.to)};return Oi(e,n,t.from.line,t.to.line+1),wi(e,(function(e){return Oi(e,n,t.from.line,t.to.line+1)}),!0),n}function Ai(e){for(;e.length&&Q(e).ranges;)e.pop()}function Mi(e,t){return t?(Ai(e.done),Q(e.done)):e.done.length&&!Q(e.done).ranges?Q(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),Q(e.done)):void 0}function Li(e,t,n,r){var o=e.history;o.undone.length=0;var i,s,a=+new Date;if((o.lastOp==r||o.lastOrigin==t.origin&&t.origin&&(\"+\"==t.origin.charAt(0)&&o.lastModTime>a-(e.cm?e.cm.options.historyEventDelay:500)||\"*\"==t.origin.charAt(0)))&&(i=Mi(o,o.lastOp==r)))s=Q(i.changes),0==ct(t.from,t.to)&&0==ct(t.from,s.to)?s.to=hi(t):i.changes.push(Si(e,t));else{var l=Q(o.done);for(l&&l.ranges||Fi(e.sel,o.done),i={changes:[Si(e,t)],generation:o.generation},o.done.push(i);o.done.length>o.undoDepth;)o.done.shift(),o.done[0].ranges||o.done.shift()}o.done.push(n),o.generation=++o.maxGeneration,o.lastModTime=o.lastSelTime=a,o.lastOp=o.lastSelOp=r,o.lastOrigin=o.lastSelOrigin=t.origin,s||_e(e,\"historyAdded\")}function Ei(e,t,n,r){var o=t.charAt(0);return\"*\"==o||\"+\"==o&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function Ti(e,t,n,r){var o=e.history,i=r&&r.origin;n==o.lastSelOp||i&&o.lastSelOrigin==i&&(o.lastModTime==o.lastSelTime&&o.lastOrigin==i||Ei(e,i,Q(o.done),t))?o.done[o.done.length-1]=t:Fi(t,o.done),o.lastSelTime=+new Date,o.lastSelOrigin=i,o.lastSelOp=n,r&&!1!==r.clearRedo&&Ai(o.undone)}function Fi(e,t){var n=Q(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Oi(e,t,n,r){var o=t[\"spans_\"+e.id],i=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),(function(n){n.markedSpans&&((o||(o=t[\"spans_\"+e.id]={}))[i]=n.markedSpans),++i}))}function Bi(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marker.explicitlyCleared?t||(t=e.slice(0,n)):t&&t.push(e[n]);return t?t.length?t:null:e}function Ri(e,t){var n=t[\"spans_\"+e.id];if(!n)return null;for(var r=[],o=0;o<t.text.length;++o)r.push(Bi(n[o]));return r}function $i(e,t){var n=Ri(e,t),r=jt(e,t);if(!n)return r;if(!r)return n;for(var o=0;o<n.length;++o){var i=n[o],s=r[o];if(i&&s)e:for(var a=0;a<s.length;++a){for(var l=s[a],c=0;c<i.length;++c)if(i[c].marker==l.marker)continue e;i.push(l)}else s&&(n[o]=s)}return n}function Ni(e,t,n){for(var r=[],o=0;o<e.length;++o){var i=e[o];if(i.ranges)r.push(n?li.prototype.deepCopy.call(i):i);else{var s=i.changes,a=[];r.push({changes:a});for(var l=0;l<s.length;++l){var c=s[l],u=void 0;if(a.push({from:c.from,to:c.to,text:c.text}),t)for(var d in c)(u=d.match(/^spans_(\\d+)$/))&&W(t,Number(u[1]))>-1&&(Q(a)[d]=c[d],delete c[d])}}}return r}function Yi(e,t,n,r){if(r){var o=e.anchor;if(n){var i=ct(t,o)<0;i!=ct(n,o)<0?(o=t,t=n):i!=ct(t,n)<0&&(t=n)}return new ci(o,t)}return new ci(n||t,t)}function Pi(e,t,n,r,o){null==o&&(o=e.cm&&(e.cm.display.shift||e.extend)),Ui(e,new li([Yi(e.sel.primary(),t,n,o)],0),r)}function Ii(e,t,n){for(var r=[],o=e.cm&&(e.cm.display.shift||e.extend),i=0;i<e.sel.ranges.length;i++)r[i]=Yi(e.sel.ranges[i],t[i],null,o);Ui(e,ui(e.cm,r,e.sel.primIndex),n)}function Hi(e,t,n,r){var o=e.sel.ranges.slice(0);o[t]=n,Ui(e,ui(e.cm,o,e.sel.primIndex),r)}function ji(e,t,n,r){Ui(e,di(t,n),r)}function Wi(e,t,n){var r={ranges:t.ranges,update:function(t){this.ranges=[];for(var n=0;n<t.length;n++)this.ranges[n]=new ci(pt(e,t[n].anchor),pt(e,t[n].head))},origin:n&&n.origin};return _e(e,\"beforeSelectionChange\",e,r),e.cm&&_e(e.cm,\"beforeSelectionChange\",e.cm,r),r.ranges!=t.ranges?ui(e.cm,r.ranges,r.ranges.length-1):t}function zi(e,t,n){var r=e.history.done,o=Q(r);o&&o.ranges?(r[r.length-1]=t,Vi(e,t,n)):Ui(e,t,n)}function Ui(e,t,n){Vi(e,t,n),Ti(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function Vi(e,t,n){(Ce(e,\"beforeSelectionChange\")||e.cm&&Ce(e.cm,\"beforeSelectionChange\"))&&(t=Wi(e,t,n));var r=n&&n.bias||(ct(t.primary().head,e.sel.primary().head)<0?-1:1);qi(e,Ki(e,t,r,!0)),n&&!1===n.scroll||!e.cm||\"nocursor\"==e.cm.getOption(\"readOnly\")||uo(e.cm)}function qi(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=1,e.cm.curOp.selectionChanged=!0,xe(e.cm)),Fn(e,\"cursorActivity\",e))}function Gi(e){qi(e,Ki(e,e.sel,null,!1))}function Ki(e,t,n,r){for(var o,i=0;i<t.ranges.length;i++){var s=t.ranges[i],a=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[i],l=Ji(e,s.anchor,a&&a.anchor,n,r),c=s.head==s.anchor?l:Ji(e,s.head,a&&a.head,n,r);(o||l!=s.anchor||c!=s.head)&&(o||(o=t.ranges.slice(0,i)),o[i]=new ci(l,c))}return o?ui(e.cm,o,t.primIndex):t}function Xi(e,t,n,r,o){var i=et(e,t.line);if(i.markedSpans)for(var s=0;s<i.markedSpans.length;++s){var a=i.markedSpans[s],l=a.marker,c=\"selectLeft\"in l?!l.selectLeft:l.inclusiveLeft,u=\"selectRight\"in l?!l.selectRight:l.inclusiveRight;if((null==a.from||(c?a.from<=t.ch:a.from<t.ch))&&(null==a.to||(u?a.to>=t.ch:a.to>t.ch))){if(o&&(_e(l,\"beforeCursorEnter\"),l.explicitlyCleared)){if(i.markedSpans){--s;continue}break}if(!l.atomic)continue;if(n){var d=l.find(r<0?1:-1),h=void 0;if((r<0?u:c)&&(d=Qi(e,d,-r,d&&d.line==t.line?i:null)),d&&d.line==t.line&&(h=ct(d,n))&&(r<0?h<0:h>0))return Xi(e,d,t,r,o)}var m=l.find(r<0?-1:1);return(r<0?c:u)&&(m=Qi(e,m,r,m.line==t.line?i:null)),m?Xi(e,m,t,r,o):null}}return t}function Ji(e,t,n,r,o){var i=r||1,s=Xi(e,t,n,i,o)||!o&&Xi(e,t,n,i,!0)||Xi(e,t,n,-i,o)||!o&&Xi(e,t,n,-i,!0);return s||(e.cantEdit=!0,lt(e.first,0))}function Qi(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?pt(e,lt(t.line-1)):null:n>0&&t.ch==(r||et(e,t.line)).text.length?t.line<e.first+e.size-1?lt(t.line+1,0):null:new lt(t.line,t.ch+n)}function Zi(e){e.setSelection(lt(e.firstLine(),0),lt(e.lastLine()),V)}function es(e,t,n){var r={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return r.canceled=!0}};return n&&(r.update=function(t,n,o,i){t&&(r.from=pt(e,t)),n&&(r.to=pt(e,n)),o&&(r.text=o),void 0!==i&&(r.origin=i)}),_e(e,\"beforeChange\",e,r),e.cm&&_e(e.cm,\"beforeChange\",e.cm,r),r.canceled?(e.cm&&(e.cm.curOp.updateInput=2),null):{from:r.from,to:r.to,text:r.text,origin:r.origin}}function ts(e,t,n){if(e.cm){if(!e.cm.curOp)return $o(e.cm,ts)(e,t,n);if(e.cm.state.suppressEdits)return}if(!(Ce(e,\"beforeChange\")||e.cm&&Ce(e.cm,\"beforeChange\"))||(t=es(e,t,!0))){var r=Ft&&!n&&zt(e,t.from,t.to);if(r)for(var o=r.length-1;o>=0;--o)ns(e,{from:r[o].from,to:r[o].to,text:o?[\"\"]:t.text,origin:t.origin});else ns(e,t)}}function ns(e,t){if(1!=t.text.length||\"\"!=t.text[0]||0!=ct(t.from,t.to)){var n=fi(e,t);Li(e,t,n,e.cm?e.cm.curOp.id:NaN),is(e,t,n,jt(e,t));var r=[];wi(e,(function(e,n){n||-1!=W(r,e.history)||(us(e.history,t),r.push(e.history)),is(e,t,null,jt(e,t))}))}}function rs(e,t,n){var r=e.cm&&e.cm.state.suppressEdits;if(!r||n){for(var o,i=e.history,s=e.sel,a=\"undo\"==t?i.done:i.undone,l=\"undo\"==t?i.undone:i.done,c=0;c<a.length&&(o=a[c],n?!o.ranges||o.equals(e.sel):o.ranges);c++);if(c!=a.length){for(i.lastOrigin=i.lastSelOrigin=null;;){if(!(o=a.pop()).ranges){if(r)return void a.push(o);break}if(Fi(o,l),n&&!o.equals(e.sel))return void Ui(e,o,{clearRedo:!1});s=o}var u=[];Fi(s,l),l.push({changes:u,generation:i.generation}),i.generation=o.generation||++i.maxGeneration;for(var d=Ce(e,\"beforeChange\")||e.cm&&Ce(e.cm,\"beforeChange\"),h=function(n){var r=o.changes[n];if(r.origin=t,d&&!es(e,r,!1))return a.length=0,{};u.push(Si(e,r));var i=n?fi(e,r):Q(a);is(e,r,i,$i(e,r)),!n&&e.cm&&e.cm.scrollIntoView({from:r.from,to:hi(r)});var s=[];wi(e,(function(e,t){t||-1!=W(s,e.history)||(us(e.history,r),s.push(e.history)),is(e,r,null,$i(e,r))}))},m=o.changes.length-1;m>=0;--m){var f=h(m);if(f)return f.v}}}}function os(e,t){if(0!=t&&(e.first+=t,e.sel=new li(Z(e.sel.ranges,(function(e){return new ci(lt(e.anchor.line+t,e.anchor.ch),lt(e.head.line+t,e.head.ch))})),e.sel.primIndex),e.cm)){Ir(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;r<n.viewTo;r++)Hr(e.cm,r,\"gutter\")}}function is(e,t,n,r){if(e.cm&&!e.cm.curOp)return $o(e.cm,is)(e,t,n,r);if(t.to.line<e.first)os(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var o=t.text.length-1-(e.first-t.from.line);os(e,o),t={from:lt(e.first,0),to:lt(t.to.line+o,t.to.ch),text:[Q(t.text)],origin:t.origin}}var i=e.lastLine();t.to.line>i&&(t={from:t.from,to:lt(i,et(e,i).text.length),text:[t.text[0]],origin:t.origin}),t.removed=tt(e,t.from,t.to),n||(n=fi(e,t)),e.cm?ss(e.cm,t,r):_i(e,t,r),Vi(e,n,V),e.cantEdit&&Ji(e,lt(e.firstLine(),0))&&(e.cantEdit=!1)}}function ss(e,t,n){var r=e.doc,o=e.display,i=t.from,s=t.to,a=!1,l=i.line;e.options.lineWrapping||(l=ot(tn(et(r,i.line))),r.iter(l,s.line+1,(function(e){if(e==o.maxLine)return a=!0,!0}))),r.sel.contains(t.from,t.to)>-1&&xe(e),_i(r,t,n,$r(e)),e.options.lineWrapping||(r.iter(l,i.line+t.text.length,(function(e){var t=un(e);t>o.maxLineLength&&(o.maxLine=e,o.maxLineLength=t,o.maxLineChanged=!0,a=!1)})),a&&(e.curOp.updateMaxLine=!0)),Tt(r,i.line),Po(e,400);var c=t.text.length-(s.line-i.line)-1;t.full?Ir(e):i.line!=s.line||1!=t.text.length||bi(e.doc,t)?Ir(e,i.line,s.line+1,c):Hr(e,i.line,\"text\");var u=Ce(e,\"changes\"),d=Ce(e,\"change\");if(d||u){var h={from:i,to:s,text:t.text,removed:t.removed,origin:t.origin};d&&Fn(e,\"change\",e,h),u&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(h)}e.display.selForContextMenu=null}function as(e,t,n,r,o){var i;r||(r=n),ct(r,n)<0&&(n=(i=[r,n])[0],r=i[1]),\"string\"==typeof t&&(t=e.splitLines(t)),ts(e,{from:n,to:r,text:t,origin:o})}function ls(e,t,n,r){n<e.line?e.line+=r:t<e.line&&(e.line=t,e.ch=0)}function cs(e,t,n,r){for(var o=0;o<e.length;++o){var i=e[o],s=!0;if(i.ranges){i.copied||((i=e[o]=i.deepCopy()).copied=!0);for(var a=0;a<i.ranges.length;a++)ls(i.ranges[a].anchor,t,n,r),ls(i.ranges[a].head,t,n,r)}else{for(var l=0;l<i.changes.length;++l){var c=i.changes[l];if(n<c.from.line)c.from=lt(c.from.line+r,c.from.ch),c.to=lt(c.to.line+r,c.to.ch);else if(t<=c.to.line){s=!1;break}}s||(e.splice(0,o+1),o=0)}}}function us(e,t){var n=t.from.line,r=t.to.line,o=t.text.length-(r-n)-1;cs(e.done,n,r,o),cs(e.undone,n,r,o)}function ds(e,t,n,r){var o=t,i=t;return\"number\"==typeof t?i=et(e,ft(e,t)):o=ot(t),null==o?null:(r(i,o)&&e.cm&&Hr(e.cm,o,n),i)}function hs(e){this.lines=e,this.parent=null;for(var t=0,n=0;n<e.length;++n)e[n].parent=this,t+=e[n].height;this.height=t}function ms(e){this.children=e;for(var t=0,n=0,r=0;r<e.length;++r){var o=e[r];t+=o.chunkSize(),n+=o.height,o.parent=this}this.size=t,this.height=n,this.parent=null}ci.prototype.from=function(){return mt(this.anchor,this.head)},ci.prototype.to=function(){return ht(this.anchor,this.head)},ci.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},hs.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n=e,r=e+t;n<r;++n){var o=this.lines[n];this.height-=o.height,fn(o),Fn(o,\"delete\")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var r=0;r<t.length;++r)t[r].parent=this},iterN:function(e,t,n){for(var r=e+t;e<r;++e)if(n(this.lines[e]))return!0}},ms.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var n=0;n<this.children.length;++n){var r=this.children[n],o=r.chunkSize();if(e<o){var i=Math.min(t,o-e),s=r.height;if(r.removeInner(e,i),this.height-=s-r.height,o==i&&(this.children.splice(n--,1),r.parent=null),0==(t-=i))break;e=0}else e-=o}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof hs))){var a=[];this.collapse(a),this.children=[new hs(a)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,n){this.size+=t.length,this.height+=n;for(var r=0;r<this.children.length;++r){var o=this.children[r],i=o.chunkSize();if(e<=i){if(o.insertInner(e,t,n),o.lines&&o.lines.length>50){for(var s=o.lines.length%25+25,a=s;a<o.lines.length;){var l=new hs(o.lines.slice(a,a+=25));o.height-=l.height,this.children.splice(++r,0,l),l.parent=this}o.lines=o.lines.slice(0,s),this.maybeSpill()}break}e-=i}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=new ms(e.children.splice(e.children.length-5,5));if(e.parent){e.size-=t.size,e.height-=t.height;var n=W(e.parent.children,e);e.parent.children.splice(n+1,0,t)}else{var r=new ms(e.children);r.parent=e,e.children=[r,t],e=r}t.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r<this.children.length;++r){var o=this.children[r],i=o.chunkSize();if(e<i){var s=Math.min(t,i-e);if(o.iterN(e,s,n))return!0;if(0==(t-=s))break;e=0}else e-=i}}};var fs=function(e,t,n){if(n)for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.doc=e,this.node=t};function ps(e,t,n){cn(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&co(e,n)}function gs(e,t,n,r){var o=new fs(e,n,r),i=e.cm;return i&&o.noHScroll&&(i.display.alignWidgets=!0),ds(e,t,\"widget\",(function(t){var n=t.widgets||(t.widgets=[]);if(null==o.insertAt?n.push(o):n.splice(Math.min(n.length,Math.max(0,o.insertAt)),0,o),o.line=t,i&&!an(e,t)){var r=cn(t)<e.scrollTop;rt(t,t.height+Vn(o)),r&&co(i,o.height),i.curOp.forceUpdate=!0}return!0})),i&&Fn(i,\"lineWidgetAdded\",i,o,\"number\"==typeof t?t:ot(t)),o}fs.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,n=this.line,r=ot(n);if(null!=r&&t){for(var o=0;o<t.length;++o)t[o]==this&&t.splice(o--,1);t.length||(n.widgets=null);var i=Vn(this);rt(n,Math.max(0,n.height-i)),e&&(Ro(e,(function(){ps(e,n,-i),Hr(e,r,\"widget\")})),Fn(e,\"lineWidgetCleared\",e,this,r))}},fs.prototype.changed=function(){var e=this,t=this.height,n=this.doc.cm,r=this.line;this.height=null;var o=Vn(this)-t;o&&(an(this.doc,r)||rt(r,r.height+o),n&&Ro(n,(function(){n.curOp.forceUpdate=!0,ps(n,r,o),Fn(n,\"lineWidgetChanged\",n,e,ot(r))})))},ke(fs);var vs=0,ys=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++vs};function bs(e,t,n,r,o){if(r&&r.shared)return ws(e,t,n,r,o);if(e.cm&&!e.cm.curOp)return $o(e.cm,bs)(e,t,n,r,o);var i=new ys(e,o),s=ct(t,n);if(r&&I(r,i,!1),s>0||0==s&&!1!==i.clearWhenEmpty)return i;if(i.replacedWith&&(i.collapsed=!0,i.widgetNode=T(\"span\",[i.replacedWith],\"CodeMirror-widget\"),r.handleMouseEvents||i.widgetNode.setAttribute(\"cm-ignore-events\",\"true\"),r.insertLeft&&(i.widgetNode.insertLeft=!0)),i.collapsed){if(en(e,t.line,t,n,i)||t.line!=n.line&&en(e,n.line,t,n,i))throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");Rt()}i.addToHistory&&Li(e,{from:t,to:n,origin:\"markText\"},e.sel,NaN);var a,l=t.line,c=e.cm;if(e.iter(l,n.line+1,(function(r){c&&i.collapsed&&!c.options.lineWrapping&&tn(r)==c.display.maxLine&&(a=!0),i.collapsed&&l!=t.line&&rt(r,0),Pt(r,new $t(i,l==t.line?t.ch:null,l==n.line?n.ch:null),e.cm&&e.cm.curOp),++l})),i.collapsed&&e.iter(t.line,n.line+1,(function(t){an(e,t)&&rt(t,0)})),i.clearOnEnter&&ve(i,\"beforeCursorEnter\",(function(){return i.clear()})),i.readOnly&&(Bt(),(e.history.done.length||e.history.undone.length)&&e.clearHistory()),i.collapsed&&(i.id=++vs,i.atomic=!0),c){if(a&&(c.curOp.updateMaxLine=!0),i.collapsed)Ir(c,t.line,n.line+1);else if(i.className||i.startStyle||i.endStyle||i.css||i.attributes||i.title)for(var u=t.line;u<=n.line;u++)Hr(c,u,\"text\");i.atomic&&Gi(c.doc),Fn(c,\"markerAdded\",c,i)}return i}ys.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Ao(e),Ce(this,\"clear\")){var n=this.find();n&&Fn(this,\"clear\",n.from,n.to)}for(var r=null,o=null,i=0;i<this.lines.length;++i){var s=this.lines[i],a=Nt(s.markedSpans,this);e&&!this.collapsed?Hr(e,ot(s),\"text\"):e&&(null!=a.to&&(o=ot(s)),null!=a.from&&(r=ot(s))),s.markedSpans=Yt(s.markedSpans,a),null==a.from&&this.collapsed&&!an(this.doc,s)&&e&&rt(s,Fr(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var l=0;l<this.lines.length;++l){var c=tn(this.lines[l]),u=un(c);u>e.display.maxLineLength&&(e.display.maxLine=c,e.display.maxLineLength=u,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&Ir(e,r,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Gi(e.doc)),e&&Fn(e,\"markerCleared\",e,this,r,o),t&&Mo(e),this.parent&&this.parent.clear()}},ys.prototype.find=function(e,t){var n,r;null==e&&\"bookmark\"==this.type&&(e=1);for(var o=0;o<this.lines.length;++o){var i=this.lines[o],s=Nt(i.markedSpans,this);if(null!=s.from&&(n=lt(t?i:ot(i),s.from),-1==e))return n;if(null!=s.to&&(r=lt(t?i:ot(i),s.to),1==e))return r}return n&&{from:n,to:r}},ys.prototype.changed=function(){var e=this,t=this.find(-1,!0),n=this,r=this.doc.cm;t&&r&&Ro(r,(function(){var o=t.line,i=ot(t.line),s=or(r,i);if(s&&(mr(s),r.curOp.selectionChanged=r.curOp.forceUpdate=!0),r.curOp.updateMaxLine=!0,!an(n.doc,o)&&null!=n.height){var a=n.height;n.height=null;var l=Vn(n)-a;l&&rt(o,o.height+l)}Fn(r,\"markerChanged\",r,e)}))},ys.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=W(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},ys.prototype.detachLine=function(e){if(this.lines.splice(W(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},ke(ys);var _s=function(e,t){this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=this};function ws(e,t,n,r,o){(r=I(r)).shared=!1;var i=[bs(e,t,n,r,o)],s=i[0],a=r.widgetNode;return wi(e,(function(e){a&&(r.widgetNode=a.cloneNode(!0)),i.push(bs(e,pt(e,t),pt(e,n),r,o));for(var l=0;l<e.linked.length;++l)if(e.linked[l].isParent)return;s=Q(i)})),new _s(i,s)}function xs(e){return e.findMarks(lt(e.first,0),e.clipPos(lt(e.lastLine())),(function(e){return e.parent}))}function Cs(e,t){for(var n=0;n<t.length;n++){var r=t[n],o=r.find(),i=e.clipPos(o.from),s=e.clipPos(o.to);if(ct(i,s)){var a=bs(e,i,s,r.primary,r.primary.type);r.markers.push(a),a.parent=r}}}function ks(e){for(var t=function(t){var n=e[t],r=[n.primary.doc];wi(n.primary.doc,(function(e){return r.push(e)}));for(var o=0;o<n.markers.length;o++){var i=n.markers[o];-1==W(r,i.doc)&&(i.parent=null,n.markers.splice(o--,1))}},n=0;n<e.length;n++)t(n)}_s.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();Fn(this,\"clear\")}},_s.prototype.find=function(e,t){return this.primary.find(e,t)},ke(_s);var Ds=0,Ss=function(e,t,n,r,o){if(!(this instanceof Ss))return new Ss(e,t,n,r,o);null==n&&(n=0),ms.call(this,[new hs([new hn(\"\",null)])]),this.first=n,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=n;var i=lt(n,0);this.sel=di(i),this.history=new Di(null),this.id=++Ds,this.modeOption=t,this.lineSep=r,this.direction=\"rtl\"==o?\"rtl\":\"ltr\",this.extend=!1,\"string\"==typeof e&&(e=this.splitLines(e)),_i(this,{from:i,to:i,text:e}),Ui(this,di(i),V)};Ss.prototype=ne(ms.prototype,{constructor:Ss,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n=0,r=0;r<t.length;++r)n+=t[r].height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=nt(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:Yo((function(e){var t=lt(this.first,0),n=this.first+this.size-1;ts(this,{from:t,to:lt(n,et(this,n).text.length),text:this.splitLines(e),origin:\"setValue\",full:!0},!0),this.cm&&ho(this.cm,0,0),Ui(this,di(t),V)})),replaceRange:function(e,t,n,r){as(this,e,t=pt(this,t),n=n?pt(this,n):t,r)},getRange:function(e,t,n){var r=tt(this,pt(this,e),pt(this,t));return!1===n?r:\"\"===n?r.join(\"\"):r.join(n||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(st(this,e))return et(this,e)},getLineNumber:function(e){return ot(e)},getLineHandleVisualStart:function(e){return\"number\"==typeof e&&(e=et(this,e)),tn(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return pt(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||\"head\"==e?t.head:\"anchor\"==e?t.anchor:\"end\"==e||\"to\"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Yo((function(e,t,n){ji(this,pt(this,\"number\"==typeof e?lt(e,t||0):e),null,n)})),setSelection:Yo((function(e,t,n){ji(this,pt(this,e),pt(this,t||e),n)})),extendSelection:Yo((function(e,t,n){Pi(this,pt(this,e),t&&pt(this,t),n)})),extendSelections:Yo((function(e,t){Ii(this,vt(this,e),t)})),extendSelectionsBy:Yo((function(e,t){Ii(this,vt(this,Z(this.sel.ranges,e)),t)})),setSelections:Yo((function(e,t,n){if(e.length){for(var r=[],o=0;o<e.length;o++)r[o]=new ci(pt(this,e[o].anchor),pt(this,e[o].head||e[o].anchor));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),Ui(this,ui(this.cm,r,t),n)}})),addSelection:Yo((function(e,t,n){var r=this.sel.ranges.slice(0);r.push(new ci(pt(this,e),pt(this,t||e))),Ui(this,ui(this.cm,r,r.length-1),n)})),getSelection:function(e){for(var t,n=this.sel.ranges,r=0;r<n.length;r++){var o=tt(this,n[r].from(),n[r].to());t=t?t.concat(o):o}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,r=0;r<n.length;r++){var o=tt(this,n[r].from(),n[r].to());!1!==e&&(o=o.join(e||this.lineSeparator())),t[r]=o}return t},replaceSelection:function(e,t,n){for(var r=[],o=0;o<this.sel.ranges.length;o++)r[o]=e;this.replaceSelections(r,t,n||\"+input\")},replaceSelections:Yo((function(e,t,n){for(var r=[],o=this.sel,i=0;i<o.ranges.length;i++){var s=o.ranges[i];r[i]={from:s.from(),to:s.to(),text:this.splitLines(e[i]),origin:n}}for(var a=t&&\"end\"!=t&&gi(this,r,t),l=r.length-1;l>=0;l--)ts(this,r[l]);a?zi(this,a):this.cm&&uo(this.cm)})),undo:Yo((function(){rs(this,\"undo\")})),redo:Yo((function(){rs(this,\"redo\")})),undoSelection:Yo((function(){rs(this,\"undo\",!0)})),redoSelection:Yo((function(){rs(this,\"redo\",!0)})),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r<e.done.length;r++)e.done[r].ranges||++t;for(var o=0;o<e.undone.length;o++)e.undone[o].ranges||++n;return{undo:t,redo:n}},clearHistory:function(){var e=this;this.history=new Di(this.history),wi(this,(function(t){return t.history=e.history}),!0)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:Ni(this.history.done),undone:Ni(this.history.undone)}},setHistory:function(e){var t=this.history=new Di(this.history);t.done=Ni(e.done.slice(0),null,!0),t.undone=Ni(e.undone.slice(0),null,!0)},setGutterMarker:Yo((function(e,t,n){return ds(this,e,\"gutter\",(function(e){var r=e.gutterMarkers||(e.gutterMarkers={});return r[t]=n,!n&&se(r)&&(e.gutterMarkers=null),!0}))})),clearGutter:Yo((function(e){var t=this;this.iter((function(n){n.gutterMarkers&&n.gutterMarkers[e]&&ds(t,n,\"gutter\",(function(){return n.gutterMarkers[e]=null,se(n.gutterMarkers)&&(n.gutterMarkers=null),!0}))}))})),lineInfo:function(e){var t;if(\"number\"==typeof e){if(!st(this,e))return null;if(t=e,!(e=et(this,e)))return null}else if(null==(t=ot(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:Yo((function(e,t,n){return ds(this,e,\"gutter\"==t?\"gutter\":\"class\",(function(e){var r=\"text\"==t?\"textClass\":\"background\"==t?\"bgClass\":\"gutter\"==t?\"gutterClass\":\"wrapClass\";if(e[r]){if(D(n).test(e[r]))return!1;e[r]+=\" \"+n}else e[r]=n;return!0}))})),removeLineClass:Yo((function(e,t,n){return ds(this,e,\"gutter\"==t?\"gutter\":\"class\",(function(e){var r=\"text\"==t?\"textClass\":\"background\"==t?\"bgClass\":\"gutter\"==t?\"gutterClass\":\"wrapClass\",o=e[r];if(!o)return!1;if(null==n)e[r]=null;else{var i=o.match(D(n));if(!i)return!1;var s=i.index+i[0].length;e[r]=o.slice(0,i.index)+(i.index&&s!=o.length?\" \":\"\")+o.slice(s)||null}return!0}))})),addLineWidget:Yo((function(e,t,n){return gs(this,e,t,n)})),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return bs(this,pt(this,e),pt(this,t),n,n&&n.type||\"range\")},setBookmark:function(e,t){var n={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return bs(this,e=pt(this,e),e,n,\"bookmark\")},findMarksAt:function(e){var t=[],n=et(this,(e=pt(this,e)).line).markedSpans;if(n)for(var r=0;r<n.length;++r){var o=n[r];(null==o.from||o.from<=e.ch)&&(null==o.to||o.to>=e.ch)&&t.push(o.marker.parent||o.marker)}return t},findMarks:function(e,t,n){e=pt(this,e),t=pt(this,t);var r=[],o=e.line;return this.iter(e.line,t.line+1,(function(i){var s=i.markedSpans;if(s)for(var a=0;a<s.length;a++){var l=s[a];null!=l.to&&o==e.line&&e.ch>=l.to||null==l.from&&o!=e.line||null!=l.from&&o==t.line&&l.from>=t.ch||n&&!n(l.marker)||r.push(l.marker.parent||l.marker)}++o})),r},getAllMarks:function(){var e=[];return this.iter((function(t){var n=t.markedSpans;if(n)for(var r=0;r<n.length;++r)null!=n[r].from&&e.push(n[r].marker)})),e},posFromIndex:function(e){var t,n=this.first,r=this.lineSeparator().length;return this.iter((function(o){var i=o.text.length+r;if(i>e)return t=e,!0;e-=i,++n})),pt(this,lt(n,t))},indexFromPos:function(e){var t=(e=pt(this,e)).ch;if(e.line<this.first||e.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,e.line,(function(e){t+=e.text.length+n})),t},copy:function(e){var t=new Ss(nt(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,n=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to);var r=new Ss(nt(this,t,n),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(r.history=this.history),(this.linked||(this.linked=[])).push({doc:r,sharedHist:e.sharedHist}),r.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],Cs(r,xs(this)),r},unlinkDoc:function(e){if(e instanceof Ia&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t)if(this.linked[t].doc==e){this.linked.splice(t,1),e.unlinkDoc(this),ks(xs(this));break}if(e.history==this.history){var n=[e.id];wi(e,(function(e){return n.push(e.id)}),!0),e.history=new Di(null),e.history.done=Ni(this.history.done,n),e.history.undone=Ni(this.history.undone,n)}},iterLinkedDocs:function(e){wi(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):Ne(e)},lineSeparator:function(){return this.lineSep||\"\\n\"},setDirection:Yo((function(e){\"rtl\"!=e&&(e=\"ltr\"),e!=this.direction&&(this.direction=e,this.iter((function(e){return e.order=null})),this.cm&&ki(this.cm))}))}),Ss.prototype.eachLine=Ss.prototype.iter;var As=0;function Ms(e){var t=this;if(Ts(t),!we(t,e)&&!qn(t.display,e)){De(e),s&&(As=+new Date);var n=Yr(t,e,!0),r=e.dataTransfer.files;if(n&&!t.isReadOnly())if(r&&r.length&&window.FileReader&&window.File)for(var o=r.length,i=Array(o),a=0,l=function(){++a==o&&$o(t,(function(){var e={from:n=pt(t.doc,n),to:n,text:t.doc.splitLines(i.filter((function(e){return null!=e})).join(t.doc.lineSeparator())),origin:\"paste\"};ts(t.doc,e),zi(t.doc,di(pt(t.doc,n),pt(t.doc,hi(e))))}))()},c=function(e,n){if(t.options.allowDropFileTypes&&-1==W(t.options.allowDropFileTypes,e.type))l();else{var r=new FileReader;r.onerror=function(){return l()},r.onload=function(){var e=r.result;/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(e)||(i[n]=e),l()},r.readAsText(e)}},u=0;u<r.length;u++)c(r[u],u);else{if(t.state.draggingText&&t.doc.sel.contains(n)>-1)return t.state.draggingText(e),void setTimeout((function(){return t.display.input.focus()}),20);try{var d=e.dataTransfer.getData(\"Text\");if(d){var h;if(t.state.draggingText&&!t.state.draggingText.copy&&(h=t.listSelections()),Vi(t.doc,di(n,n)),h)for(var m=0;m<h.length;++m)as(t.doc,\"\",h[m].anchor,h[m].head,\"drag\");t.replaceSelection(d,\"around\",\"paste\"),t.display.input.focus()}}catch(e){}}}}function Ls(e,t){if(s&&(!e.state.draggingText||+new Date-As<100))Me(t);else if(!we(e,t)&&!qn(e.display,t)&&(t.dataTransfer.setData(\"Text\",e.getSelection()),t.dataTransfer.effectAllowed=\"copyMove\",t.dataTransfer.setDragImage&&!m)){var n=E(\"img\",null,null,\"position: fixed; left: 0; top: 0;\");n.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",h&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),h&&n.parentNode.removeChild(n)}}function Es(e,t){var n=Yr(e,t);if(n){var r=document.createDocumentFragment();Gr(e,n,r),e.display.dragCursor||(e.display.dragCursor=E(\"div\",null,\"CodeMirror-cursors CodeMirror-dragcursors\"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),L(e.display.dragCursor,r)}}function Ts(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function Fs(e){if(document.getElementsByClassName){for(var t=document.getElementsByClassName(\"CodeMirror\"),n=[],r=0;r<t.length;r++){var o=t[r].CodeMirror;o&&n.push(o)}n.length&&n[0].operation((function(){for(var t=0;t<n.length;t++)e(n[t])}))}}var Os=!1;function Bs(){Os||(Rs(),Os=!0)}function Rs(){var e;ve(window,\"resize\",(function(){null==e&&(e=setTimeout((function(){e=null,Fs($s)}),100))})),ve(window,\"blur\",(function(){return Fs(to)}))}function $s(e){var t=e.display;t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize()}for(var Ns={3:\"Pause\",8:\"Backspace\",9:\"Tab\",13:\"Enter\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"PrintScrn\",45:\"Insert\",46:\"Delete\",59:\";\",61:\"=\",91:\"Mod\",92:\"Mod\",93:\"Mod\",106:\"*\",107:\"=\",109:\"-\",110:\".\",111:\"/\",145:\"ScrollLock\",173:\"-\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",224:\"Mod\",63232:\"Up\",63233:\"Down\",63234:\"Left\",63235:\"Right\",63272:\"Delete\",63273:\"Home\",63275:\"End\",63276:\"PageUp\",63277:\"PageDown\",63302:\"Insert\"},Ys=0;Ys<10;Ys++)Ns[Ys+48]=Ns[Ys+96]=String(Ys);for(var Ps=65;Ps<=90;Ps++)Ns[Ps]=String.fromCharCode(Ps);for(var Is=1;Is<=12;Is++)Ns[Is+111]=Ns[Is+63235]=\"F\"+Is;var Hs={};function js(e){var t,n,r,o,i=e.split(/-(?!$)/);e=i[i.length-1];for(var s=0;s<i.length-1;s++){var a=i[s];if(/^(cmd|meta|m)$/i.test(a))o=!0;else if(/^a(lt)?$/i.test(a))t=!0;else if(/^(c|ctrl|control)$/i.test(a))n=!0;else{if(!/^s(hift)?$/i.test(a))throw new Error(\"Unrecognized modifier name: \"+a);r=!0}}return t&&(e=\"Alt-\"+e),n&&(e=\"Ctrl-\"+e),o&&(e=\"Cmd-\"+e),r&&(e=\"Shift-\"+e),e}function Ws(e){var t={};for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];if(/^(name|fallthrough|(de|at)tach)$/.test(n))continue;if(\"...\"==r){delete e[n];continue}for(var o=Z(n.split(\" \"),js),i=0;i<o.length;i++){var s=void 0,a=void 0;i==o.length-1?(a=o.join(\" \"),s=r):(a=o.slice(0,i+1).join(\" \"),s=\"...\");var l=t[a];if(l){if(l!=s)throw new Error(\"Inconsistent bindings for \"+a)}else t[a]=s}delete e[n]}for(var c in t)e[c]=t[c];return e}function zs(e,t,n,r){var o=(t=Gs(t)).call?t.call(e,r):t[e];if(!1===o)return\"nothing\";if(\"...\"===o)return\"multi\";if(null!=o&&n(o))return\"handled\";if(t.fallthrough){if(\"[object Array]\"!=Object.prototype.toString.call(t.fallthrough))return zs(e,t.fallthrough,n,r);for(var i=0;i<t.fallthrough.length;i++){var s=zs(e,t.fallthrough[i],n,r);if(s)return s}}}function Us(e){var t=\"string\"==typeof e?e:Ns[e.keyCode];return\"Ctrl\"==t||\"Alt\"==t||\"Shift\"==t||\"Mod\"==t}function Vs(e,t,n){var r=e;return t.altKey&&\"Alt\"!=r&&(e=\"Alt-\"+e),(C?t.metaKey:t.ctrlKey)&&\"Ctrl\"!=r&&(e=\"Ctrl-\"+e),(C?t.ctrlKey:t.metaKey)&&\"Mod\"!=r&&(e=\"Cmd-\"+e),!n&&t.shiftKey&&\"Shift\"!=r&&(e=\"Shift-\"+e),e}function qs(e,t){if(h&&34==e.keyCode&&e.char)return!1;var n=Ns[e.keyCode];return null!=n&&!e.altGraphKey&&(3==e.keyCode&&e.code&&(n=e.code),Vs(n,e,t))}function Gs(e){return\"string\"==typeof e?Hs[e]:e}function Ks(e,t){for(var n=e.doc.sel.ranges,r=[],o=0;o<n.length;o++){for(var i=t(n[o]);r.length&&ct(i.from,Q(r).to)<=0;){var s=r.pop();if(ct(s.from,i.from)<0){i.from=s.from;break}}r.push(i)}Ro(e,(function(){for(var t=r.length-1;t>=0;t--)as(e.doc,\"\",r[t].from,r[t].to,\"+delete\");uo(e)}))}function Xs(e,t,n){var r=ce(e.text,t+n,n);return r<0||r>e.text.length?null:r}function Js(e,t,n){var r=Xs(e,t.ch,n);return null==r?null:new lt(t.line,r,n<0?\"after\":\"before\")}function Qs(e,t,n,r,o){if(e){\"rtl\"==t.doc.direction&&(o=-o);var i=pe(n,t.doc.direction);if(i){var s,a=o<0?Q(i):i[0],l=o<0==(1==a.level)?\"after\":\"before\";if(a.level>0||\"rtl\"==t.doc.direction){var c=ir(t,n);s=o<0?n.text.length-1:0;var u=sr(t,c,s).top;s=ue((function(e){return sr(t,c,e).top==u}),o<0==(1==a.level)?a.from:a.to-1,s),\"before\"==l&&(s=Xs(n,s,1))}else s=o<0?a.to:a.from;return new lt(r,s,l)}}return new lt(r,o<0?n.text.length:0,o<0?\"before\":\"after\")}function Zs(e,t,n,r){var o=pe(t,e.doc.direction);if(!o)return Js(t,n,r);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky=\"before\"):n.ch<=0&&(n.ch=0,n.sticky=\"after\");var i=me(o,n.ch,n.sticky),s=o[i];if(\"ltr\"==e.doc.direction&&s.level%2==0&&(r>0?s.to>n.ch:s.from<n.ch))return Js(t,n,r);var a,l=function(e,n){return Xs(t,e instanceof lt?e.ch:e,n)},c=function(n){return e.options.lineWrapping?(a=a||ir(e,t),Ar(e,t,a,n)):{begin:0,end:t.text.length}},u=c(\"before\"==n.sticky?l(n,-1):n.ch);if(\"rtl\"==e.doc.direction||1==s.level){var d=1==s.level==r<0,h=l(n,d?1:-1);if(null!=h&&(d?h<=s.to&&h<=u.end:h>=s.from&&h>=u.begin)){var m=d?\"before\":\"after\";return new lt(n.line,h,m)}}var f=function(e,t,r){for(var i=function(e,t){return t?new lt(n.line,l(e,1),\"before\"):new lt(n.line,e,\"after\")};e>=0&&e<o.length;e+=t){var s=o[e],a=t>0==(1!=s.level),c=a?r.begin:l(r.end,-1);if(s.from<=c&&c<s.to)return i(c,a);if(c=a?s.from:l(s.to,-1),r.begin<=c&&c<r.end)return i(c,a)}},p=f(i+r,r,u);if(p)return p;var g=r>0?u.end:l(u.begin,-1);return null==g||r>0&&g==t.text.length||!(p=f(r>0?0:o.length-1,r,c(g)))?null:p}Hs.basic={Left:\"goCharLeft\",Right:\"goCharRight\",Up:\"goLineUp\",Down:\"goLineDown\",End:\"goLineEnd\",Home:\"goLineStartSmart\",PageUp:\"goPageUp\",PageDown:\"goPageDown\",Delete:\"delCharAfter\",Backspace:\"delCharBefore\",\"Shift-Backspace\":\"delCharBefore\",Tab:\"defaultTab\",\"Shift-Tab\":\"indentAuto\",Enter:\"newlineAndIndent\",Insert:\"toggleOverwrite\",Esc:\"singleSelection\"},Hs.pcDefault={\"Ctrl-A\":\"selectAll\",\"Ctrl-D\":\"deleteLine\",\"Ctrl-Z\":\"undo\",\"Shift-Ctrl-Z\":\"redo\",\"Ctrl-Y\":\"redo\",\"Ctrl-Home\":\"goDocStart\",\"Ctrl-End\":\"goDocEnd\",\"Ctrl-Up\":\"goLineUp\",\"Ctrl-Down\":\"goLineDown\",\"Ctrl-Left\":\"goGroupLeft\",\"Ctrl-Right\":\"goGroupRight\",\"Alt-Left\":\"goLineStart\",\"Alt-Right\":\"goLineEnd\",\"Ctrl-Backspace\":\"delGroupBefore\",\"Ctrl-Delete\":\"delGroupAfter\",\"Ctrl-S\":\"save\",\"Ctrl-F\":\"find\",\"Ctrl-G\":\"findNext\",\"Shift-Ctrl-G\":\"findPrev\",\"Shift-Ctrl-F\":\"replace\",\"Shift-Ctrl-R\":\"replaceAll\",\"Ctrl-[\":\"indentLess\",\"Ctrl-]\":\"indentMore\",\"Ctrl-U\":\"undoSelection\",\"Shift-Ctrl-U\":\"redoSelection\",\"Alt-U\":\"redoSelection\",fallthrough:\"basic\"},Hs.emacsy={\"Ctrl-F\":\"goCharRight\",\"Ctrl-B\":\"goCharLeft\",\"Ctrl-P\":\"goLineUp\",\"Ctrl-N\":\"goLineDown\",\"Ctrl-A\":\"goLineStart\",\"Ctrl-E\":\"goLineEnd\",\"Ctrl-V\":\"goPageDown\",\"Shift-Ctrl-V\":\"goPageUp\",\"Ctrl-D\":\"delCharAfter\",\"Ctrl-H\":\"delCharBefore\",\"Alt-Backspace\":\"delWordBefore\",\"Ctrl-K\":\"killLine\",\"Ctrl-T\":\"transposeChars\",\"Ctrl-O\":\"openLine\"},Hs.macDefault={\"Cmd-A\":\"selectAll\",\"Cmd-D\":\"deleteLine\",\"Cmd-Z\":\"undo\",\"Shift-Cmd-Z\":\"redo\",\"Cmd-Y\":\"redo\",\"Cmd-Home\":\"goDocStart\",\"Cmd-Up\":\"goDocStart\",\"Cmd-End\":\"goDocEnd\",\"Cmd-Down\":\"goDocEnd\",\"Alt-Left\":\"goGroupLeft\",\"Alt-Right\":\"goGroupRight\",\"Cmd-Left\":\"goLineLeft\",\"Cmd-Right\":\"goLineRight\",\"Alt-Backspace\":\"delGroupBefore\",\"Ctrl-Alt-Backspace\":\"delGroupAfter\",\"Alt-Delete\":\"delGroupAfter\",\"Cmd-S\":\"save\",\"Cmd-F\":\"find\",\"Cmd-G\":\"findNext\",\"Shift-Cmd-G\":\"findPrev\",\"Cmd-Alt-F\":\"replace\",\"Shift-Cmd-Alt-F\":\"replaceAll\",\"Cmd-[\":\"indentLess\",\"Cmd-]\":\"indentMore\",\"Cmd-Backspace\":\"delWrappedLineLeft\",\"Cmd-Delete\":\"delWrappedLineRight\",\"Cmd-U\":\"undoSelection\",\"Shift-Cmd-U\":\"redoSelection\",\"Ctrl-Up\":\"goDocStart\",\"Ctrl-Down\":\"goDocEnd\",fallthrough:[\"basic\",\"emacsy\"]},Hs.default=b?Hs.macDefault:Hs.pcDefault;var ea={selectAll:Zi,singleSelection:function(e){return e.setSelection(e.getCursor(\"anchor\"),e.getCursor(\"head\"),V)},killLine:function(e){return Ks(e,(function(t){if(t.empty()){var n=et(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line<e.lastLine()?{from:t.head,to:lt(t.head.line+1,0)}:{from:t.head,to:lt(t.head.line,n)}}return{from:t.from(),to:t.to()}}))},deleteLine:function(e){return Ks(e,(function(t){return{from:lt(t.from().line,0),to:pt(e.doc,lt(t.to().line+1,0))}}))},delLineLeft:function(e){return Ks(e,(function(e){return{from:lt(e.from().line,0),to:e.from()}}))},delWrappedLineLeft:function(e){return Ks(e,(function(t){var n=e.charCoords(t.head,\"div\").top+5;return{from:e.coordsChar({left:0,top:n},\"div\"),to:t.from()}}))},delWrappedLineRight:function(e){return Ks(e,(function(t){var n=e.charCoords(t.head,\"div\").top+5,r=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},\"div\");return{from:t.from(),to:r}}))},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(lt(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(lt(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy((function(t){return ta(e,t.head.line)}),{origin:\"+move\",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy((function(t){return ra(e,t.head)}),{origin:\"+move\",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy((function(t){return na(e,t.head.line)}),{origin:\"+move\",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy((function(t){var n=e.cursorCoords(t.head,\"div\").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:n},\"div\")}),G)},goLineLeft:function(e){return e.extendSelectionsBy((function(t){var n=e.cursorCoords(t.head,\"div\").top+5;return e.coordsChar({left:0,top:n},\"div\")}),G)},goLineLeftSmart:function(e){return e.extendSelectionsBy((function(t){var n=e.cursorCoords(t.head,\"div\").top+5,r=e.coordsChar({left:0,top:n},\"div\");return r.ch<e.getLine(r.line).search(/\\S/)?ra(e,t.head):r}),G)},goLineUp:function(e){return e.moveV(-1,\"line\")},goLineDown:function(e){return e.moveV(1,\"line\")},goPageUp:function(e){return e.moveV(-1,\"page\")},goPageDown:function(e){return e.moveV(1,\"page\")},goCharLeft:function(e){return e.moveH(-1,\"char\")},goCharRight:function(e){return e.moveH(1,\"char\")},goColumnLeft:function(e){return e.moveH(-1,\"column\")},goColumnRight:function(e){return e.moveH(1,\"column\")},goWordLeft:function(e){return e.moveH(-1,\"word\")},goGroupRight:function(e){return e.moveH(1,\"group\")},goGroupLeft:function(e){return e.moveH(-1,\"group\")},goWordRight:function(e){return e.moveH(1,\"word\")},delCharBefore:function(e){return e.deleteH(-1,\"codepoint\")},delCharAfter:function(e){return e.deleteH(1,\"char\")},delWordBefore:function(e){return e.deleteH(-1,\"word\")},delWordAfter:function(e){return e.deleteH(1,\"word\")},delGroupBefore:function(e){return e.deleteH(-1,\"group\")},delGroupAfter:function(e){return e.deleteH(1,\"group\")},indentAuto:function(e){return e.indentSelection(\"smart\")},indentMore:function(e){return e.indentSelection(\"add\")},indentLess:function(e){return e.indentSelection(\"subtract\")},insertTab:function(e){return e.replaceSelection(\"\\t\")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),r=e.options.tabSize,o=0;o<n.length;o++){var i=n[o].from(),s=H(e.getLine(i.line),i.ch,r);t.push(J(r-s%r))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection(\"add\"):e.execCommand(\"insertTab\")},transposeChars:function(e){return Ro(e,(function(){for(var t=e.listSelections(),n=[],r=0;r<t.length;r++)if(t[r].empty()){var o=t[r].head,i=et(e.doc,o.line).text;if(i)if(o.ch==i.length&&(o=new lt(o.line,o.ch-1)),o.ch>0)o=new lt(o.line,o.ch+1),e.replaceRange(i.charAt(o.ch-1)+i.charAt(o.ch-2),lt(o.line,o.ch-2),o,\"+transpose\");else if(o.line>e.doc.first){var s=et(e.doc,o.line-1).text;s&&(o=new lt(o.line,1),e.replaceRange(i.charAt(0)+e.doc.lineSeparator()+s.charAt(s.length-1),lt(o.line-1,s.length-1),o,\"+transpose\"))}n.push(new ci(o,o))}e.setSelections(n)}))},newlineAndIndent:function(e){return Ro(e,(function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,\"+input\");t=e.listSelections();for(var r=0;r<t.length;r++)e.indentLine(t[r].from().line,null,!0);uo(e)}))},openLine:function(e){return e.replaceSelection(\"\\n\",\"start\")},toggleOverwrite:function(e){return e.toggleOverwrite()}};function ta(e,t){var n=et(e.doc,t),r=tn(n);return r!=n&&(t=ot(r)),Qs(!0,e,r,t,1)}function na(e,t){var n=et(e.doc,t),r=nn(n);return r!=n&&(t=ot(r)),Qs(!0,e,n,t,-1)}function ra(e,t){var n=ta(e,t.line),r=et(e.doc,n.line),o=pe(r,e.doc.direction);if(!o||0==o[0].level){var i=Math.max(n.ch,r.text.search(/\\S/)),s=t.line==n.line&&t.ch<=i&&t.ch;return lt(n.line,s?0:i,n.sticky)}return n}function oa(e,t,n){if(\"string\"==typeof t&&!(t=ea[t]))return!1;e.display.input.ensurePolled();var r=e.display.shift,o=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n&&(e.display.shift=!1),o=t(e)!=U}finally{e.display.shift=r,e.state.suppressEdits=!1}return o}function ia(e,t,n){for(var r=0;r<e.state.keyMaps.length;r++){var o=zs(t,e.state.keyMaps[r],n,e);if(o)return o}return e.options.extraKeys&&zs(t,e.options.extraKeys,n,e)||zs(t,e.options.keyMap,n,e)}var sa=new j;function aa(e,t,n,r){var o=e.state.keySeq;if(o){if(Us(t))return\"handled\";if(/\\'$/.test(t)?e.state.keySeq=null:sa.set(50,(function(){e.state.keySeq==o&&(e.state.keySeq=null,e.display.input.reset())})),la(e,o+\" \"+t,n,r))return!0}return la(e,t,n,r)}function la(e,t,n,r){var o=ia(e,t,r);return\"multi\"==o&&(e.state.keySeq=t),\"handled\"==o&&Fn(e,\"keyHandled\",e,t,n),\"handled\"!=o&&\"multi\"!=o||(De(n),Jr(e)),!!o}function ca(e,t){var n=qs(t,!0);return!!n&&(t.shiftKey&&!e.state.keySeq?aa(e,\"Shift-\"+n,t,(function(t){return oa(e,t,!0)}))||aa(e,n,t,(function(t){if(\"string\"==typeof t?/^go[A-Z]/.test(t):t.motion)return oa(e,t)})):aa(e,n,t,(function(t){return oa(e,t)})))}function ua(e,t,n){return aa(e,\"'\"+n+\"'\",t,(function(t){return oa(e,t,!0)}))}var da=null;function ha(e){var t=this;if(!(e.target&&e.target!=t.display.input.getField()||(t.curOp.focus=O(N(t)),we(t,e)))){s&&a<11&&27==e.keyCode&&(e.returnValue=!1);var r=e.keyCode;t.display.shift=16==r||e.shiftKey;var o=ca(t,e);h&&(da=o?r:null,o||88!=r||Pe||!(b?e.metaKey:e.ctrlKey)||t.replaceSelection(\"\",null,\"cut\")),n&&!b&&!o&&46==r&&e.shiftKey&&!e.ctrlKey&&document.execCommand&&document.execCommand(\"cut\"),18!=r||/\\bCodeMirror-crosshair\\b/.test(t.display.lineDiv.className)||ma(t)}}function ma(e){var t=e.display.lineDiv;function n(e){18!=e.keyCode&&e.altKey||(A(t,\"CodeMirror-crosshair\"),be(document,\"keyup\",n),be(document,\"mouseover\",n))}B(t,\"CodeMirror-crosshair\"),ve(document,\"keyup\",n),ve(document,\"mouseover\",n)}function fa(e){16==e.keyCode&&(this.doc.sel.shift=!1),we(this,e)}function pa(e){var t=this;if(!(e.target&&e.target!=t.display.input.getField()||qn(t.display,e)||we(t,e)||e.ctrlKey&&!e.altKey||b&&e.metaKey)){var n=e.keyCode,r=e.charCode;if(h&&n==da)return da=null,void De(e);if(!h||e.which&&!(e.which<10)||!ca(t,e)){var o=String.fromCharCode(null==r?n:r);\"\\b\"!=o&&(ua(t,e,o)||t.display.input.onKeyPress(e))}}}var ga,va,ya=400,ba=function(e,t,n){this.time=e,this.pos=t,this.button=n};function _a(e,t){var n=+new Date;return va&&va.compare(n,e,t)?(ga=va=null,\"triple\"):ga&&ga.compare(n,e,t)?(va=new ba(n,e,t),ga=null,\"double\"):(ga=new ba(n,e,t),va=null,\"single\")}function wa(e){var t=this,n=t.display;if(!(we(t,e)||n.activeTouch&&n.input.supportsTouch()))if(n.input.ensurePolled(),n.shift=e.shiftKey,qn(n,e))l||(n.scroller.draggable=!1,setTimeout((function(){return n.scroller.draggable=!0}),100));else if(!Ea(t,e)){var r=Yr(t,e),o=Ee(e),i=r?_a(r,o):\"single\";Y(t).focus(),1==o&&t.state.selectingText&&t.state.selectingText(e),r&&xa(t,o,r,i,e)||(1==o?r?ka(t,r,i,e):Le(e)==n.scroller&&De(e):2==o?(r&&Pi(t.doc,r),setTimeout((function(){return n.input.focus()}),20)):3==o&&(k?t.display.input.onContextMenu(e):Zr(t)))}}function xa(e,t,n,r,o){var i=\"Click\";return\"double\"==r?i=\"Double\"+i:\"triple\"==r&&(i=\"Triple\"+i),aa(e,Vs(i=(1==t?\"Left\":2==t?\"Middle\":\"Right\")+i,o),o,(function(t){if(\"string\"==typeof t&&(t=ea[t]),!t)return!1;var r=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),r=t(e,n)!=U}finally{e.state.suppressEdits=!1}return r}))}function Ca(e,t,n){var r=e.getOption(\"configureMouse\"),o=r?r(e,t,n):{};if(null==o.unit){var i=_?n.shiftKey&&n.metaKey:n.altKey;o.unit=i?\"rectangle\":\"single\"==t?\"char\":\"double\"==t?\"word\":\"line\"}return(null==o.extend||e.doc.extend)&&(o.extend=e.doc.extend||n.shiftKey),null==o.addNew&&(o.addNew=b?n.metaKey:n.ctrlKey),null==o.moveOnDrag&&(o.moveOnDrag=!(b?n.altKey:n.ctrlKey)),o}function ka(e,t,n,r){s?setTimeout(P(Qr,e),0):e.curOp.focus=O(N(e));var o,i=Ca(e,n,r),a=e.doc.sel;e.options.dragDrop&&Oe&&!e.isReadOnly()&&\"single\"==n&&(o=a.contains(t))>-1&&(ct((o=a.ranges[o]).from(),t)<0||t.xRel>0)&&(ct(o.to(),t)>0||t.xRel<0)?Da(e,r,t,i):Aa(e,r,t,i)}function Da(e,t,n,r){var o=e.display,i=!1,c=$o(e,(function(t){l&&(o.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:Zr(e)),be(o.wrapper.ownerDocument,\"mouseup\",c),be(o.wrapper.ownerDocument,\"mousemove\",u),be(o.scroller,\"dragstart\",d),be(o.scroller,\"drop\",c),i||(De(t),r.addNew||Pi(e.doc,n,null,null,r.extend),l&&!m||s&&9==a?setTimeout((function(){o.wrapper.ownerDocument.body.focus({preventScroll:!0}),o.input.focus()}),20):o.input.focus())})),u=function(e){i=i||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},d=function(){return i=!0};l&&(o.scroller.draggable=!0),e.state.draggingText=c,c.copy=!r.moveOnDrag,ve(o.wrapper.ownerDocument,\"mouseup\",c),ve(o.wrapper.ownerDocument,\"mousemove\",u),ve(o.scroller,\"dragstart\",d),ve(o.scroller,\"drop\",c),e.state.delayingBlurEvent=!0,setTimeout((function(){return o.input.focus()}),20),o.scroller.dragDrop&&o.scroller.dragDrop()}function Sa(e,t,n){if(\"char\"==n)return new ci(t,t);if(\"word\"==n)return e.findWordAt(t);if(\"line\"==n)return new ci(lt(t.line,0),pt(e.doc,lt(t.line+1,0)));var r=n(e,t);return new ci(r.from,r.to)}function Aa(e,t,n,r){s&&Zr(e);var o=e.display,i=e.doc;De(t);var a,l,c=i.sel,u=c.ranges;if(r.addNew&&!r.extend?(l=i.sel.contains(n),a=l>-1?u[l]:new ci(n,n)):(a=i.sel.primary(),l=i.sel.primIndex),\"rectangle\"==r.unit)r.addNew||(a=new ci(n,n)),n=Yr(e,t,!0,!0),l=-1;else{var d=Sa(e,n,r.unit);a=r.extend?Yi(a,d.anchor,d.head,r.extend):d}r.addNew?-1==l?(l=u.length,Ui(i,ui(e,u.concat([a]),l),{scroll:!1,origin:\"*mouse\"})):u.length>1&&u[l].empty()&&\"char\"==r.unit&&!r.extend?(Ui(i,ui(e,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:\"*mouse\"}),c=i.sel):Hi(i,l,a,q):(l=0,Ui(i,new li([a],0),q),c=i.sel);var h=n;function m(t){if(0!=ct(h,t))if(h=t,\"rectangle\"==r.unit){for(var o=[],s=e.options.tabSize,u=H(et(i,n.line).text,n.ch,s),d=H(et(i,t.line).text,t.ch,s),m=Math.min(u,d),f=Math.max(u,d),p=Math.min(n.line,t.line),g=Math.min(e.lastLine(),Math.max(n.line,t.line));p<=g;p++){var v=et(i,p).text,y=K(v,m,s);m==f?o.push(new ci(lt(p,y),lt(p,y))):v.length>y&&o.push(new ci(lt(p,y),lt(p,K(v,f,s))))}o.length||o.push(new ci(n,n)),Ui(i,ui(e,c.ranges.slice(0,l).concat(o),l),{origin:\"*mouse\",scroll:!1}),e.scrollIntoView(t)}else{var b,_=a,w=Sa(e,t,r.unit),x=_.anchor;ct(w.anchor,x)>0?(b=w.head,x=mt(_.from(),w.anchor)):(b=w.anchor,x=ht(_.to(),w.head));var C=c.ranges.slice(0);C[l]=Ma(e,new ci(pt(i,x),b)),Ui(i,ui(e,C,l),q)}}var f=o.wrapper.getBoundingClientRect(),p=0;function g(t){var n=++p,s=Yr(e,t,!0,\"rectangle\"==r.unit);if(s)if(0!=ct(s,h)){e.curOp.focus=O(N(e)),m(s);var a=oo(o,i);(s.line>=a.to||s.line<a.from)&&setTimeout($o(e,(function(){p==n&&g(t)})),150)}else{var l=t.clientY<f.top?-20:t.clientY>f.bottom?20:0;l&&setTimeout($o(e,(function(){p==n&&(o.scroller.scrollTop+=l,g(t))})),50)}}function v(t){e.state.selectingText=!1,p=1/0,t&&(De(t),o.input.focus()),be(o.wrapper.ownerDocument,\"mousemove\",y),be(o.wrapper.ownerDocument,\"mouseup\",b),i.history.lastSelOrigin=null}var y=$o(e,(function(e){0!==e.buttons&&Ee(e)?g(e):v(e)})),b=$o(e,v);e.state.selectingText=b,ve(o.wrapper.ownerDocument,\"mousemove\",y),ve(o.wrapper.ownerDocument,\"mouseup\",b)}function Ma(e,t){var n=t.anchor,r=t.head,o=et(e.doc,n.line);if(0==ct(n,r)&&n.sticky==r.sticky)return t;var i=pe(o);if(!i)return t;var s=me(i,n.ch,n.sticky),a=i[s];if(a.from!=n.ch&&a.to!=n.ch)return t;var l,c=s+(a.from==n.ch==(1!=a.level)?0:1);if(0==c||c==i.length)return t;if(r.line!=n.line)l=(r.line-n.line)*(\"ltr\"==e.doc.direction?1:-1)>0;else{var u=me(i,r.ch,r.sticky),d=u-s||(r.ch-n.ch)*(1==a.level?-1:1);l=u==c-1||u==c?d<0:d>0}var h=i[c+(l?-1:0)],m=l==(1==h.level),f=m?h.from:h.to,p=m?\"after\":\"before\";return n.ch==f&&n.sticky==p?t:new ci(new lt(n.line,f,p),r)}function La(e,t,n,r){var o,i;if(t.touches)o=t.touches[0].clientX,i=t.touches[0].clientY;else try{o=t.clientX,i=t.clientY}catch(e){return!1}if(o>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&De(t);var s=e.display,a=s.lineDiv.getBoundingClientRect();if(i>a.bottom||!Ce(e,n))return Ae(t);i-=a.top-s.viewOffset;for(var l=0;l<e.display.gutterSpecs.length;++l){var c=s.gutters.childNodes[l];if(c&&c.getBoundingClientRect().right>=o)return _e(e,n,e,it(e.doc,i),e.display.gutterSpecs[l].className,t),Ae(t)}}function Ea(e,t){return La(e,t,\"gutterClick\",!0)}function Ta(e,t){qn(e.display,t)||Fa(e,t)||we(e,t,\"contextmenu\")||k||e.display.input.onContextMenu(t)}function Fa(e,t){return!!Ce(e,\"gutterContextMenu\")&&La(e,t,\"gutterContextMenu\",!1)}function Oa(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\\s*cm-s-\\S+/g,\"\")+e.options.theme.replace(/(^|\\s)\\s*/g,\" cm-s-\"),pr(e)}ba.prototype.compare=function(e,t,n){return this.time+ya>e&&0==ct(t,this.pos)&&n==this.button};var Ba={toString:function(){return\"CodeMirror.Init\"}},Ra={},$a={};function Na(e){var t=e.optionHandlers;function n(n,r,o,i){e.defaults[n]=r,o&&(t[n]=i?function(e,t,n){n!=Ba&&o(e,t,n)}:o)}e.defineOption=n,e.Init=Ba,n(\"value\",\"\",(function(e,t){return e.setValue(t)}),!0),n(\"mode\",null,(function(e,t){e.doc.modeOption=t,vi(e)}),!0),n(\"indentUnit\",2,vi,!0),n(\"indentWithTabs\",!1),n(\"smartIndent\",!0),n(\"tabSize\",4,(function(e){yi(e),pr(e),Ir(e)}),!0),n(\"lineSeparator\",null,(function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter((function(e){for(var o=0;;){var i=e.text.indexOf(t,o);if(-1==i)break;o=i+t.length,n.push(lt(r,i))}r++}));for(var o=n.length-1;o>=0;o--)as(e.doc,t,n[o],lt(n[o].line,n[o].ch+t.length))}})),n(\"specialChars\",/[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]/g,(function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test(\"\\t\")?\"\":\"|\\t\"),\"g\"),n!=Ba&&e.refresh()})),n(\"specialCharPlaceholder\",bn,(function(e){return e.refresh()}),!0),n(\"electricChars\",!0),n(\"inputStyle\",y?\"contenteditable\":\"textarea\",(function(){throw new Error(\"inputStyle can not (yet) be changed in a running editor\")}),!0),n(\"spellcheck\",!1,(function(e,t){return e.getInputField().spellcheck=t}),!0),n(\"autocorrect\",!1,(function(e,t){return e.getInputField().autocorrect=t}),!0),n(\"autocapitalize\",!1,(function(e,t){return e.getInputField().autocapitalize=t}),!0),n(\"rtlMoveVisually\",!w),n(\"wholeLineUpdateBefore\",!0),n(\"theme\",\"default\",(function(e){Oa(e),ti(e)}),!0),n(\"keyMap\",\"default\",(function(e,t,n){var r=Gs(t),o=n!=Ba&&Gs(n);o&&o.detach&&o.detach(e,r),r.attach&&r.attach(e,o||null)})),n(\"extraKeys\",null),n(\"configureMouse\",null),n(\"lineWrapping\",!1,Pa,!0),n(\"gutters\",[],(function(e,t){e.display.gutterSpecs=Zo(t,e.options.lineNumbers),ti(e)}),!0),n(\"fixedGutter\",!0,(function(e,t){e.display.gutters.style.left=t?Rr(e.display)+\"px\":\"0\",e.refresh()}),!0),n(\"coverGutterNextToScrollbar\",!1,(function(e){return xo(e)}),!0),n(\"scrollbarStyle\",\"native\",(function(e){Do(e),xo(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)}),!0),n(\"lineNumbers\",!1,(function(e,t){e.display.gutterSpecs=Zo(e.options.gutters,t),ti(e)}),!0),n(\"firstLineNumber\",1,ti,!0),n(\"lineNumberFormatter\",(function(e){return e}),ti,!0),n(\"showCursorWhenSelecting\",!1,Vr,!0),n(\"resetSelectionOnContextMenu\",!0),n(\"lineWiseCopyCut\",!0),n(\"pasteLinesPerSelection\",!0),n(\"selectionsMayTouch\",!1),n(\"readOnly\",!1,(function(e,t){\"nocursor\"==t&&(to(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)})),n(\"screenReaderLabel\",null,(function(e,t){t=\"\"===t?null:t,e.display.input.screenReaderLabelChanged(t)})),n(\"disableInput\",!1,(function(e,t){t||e.display.input.reset()}),!0),n(\"dragDrop\",!0,Ya),n(\"allowDropFileTypes\",null),n(\"cursorBlinkRate\",530),n(\"cursorScrollMargin\",0),n(\"cursorHeight\",1,Vr,!0),n(\"singleCursorHeightPerLine\",!0,Vr,!0),n(\"workTime\",100),n(\"workDelay\",100),n(\"flattenSpans\",!0,yi,!0),n(\"addModeClass\",!1,yi,!0),n(\"pollInterval\",100),n(\"undoDepth\",200,(function(e,t){return e.doc.history.undoDepth=t})),n(\"historyEventDelay\",1250),n(\"viewportMargin\",10,(function(e){return e.refresh()}),!0),n(\"maxHighlightLength\",1e4,yi,!0),n(\"moveInputWithCursor\",!0,(function(e,t){t||e.display.input.resetPosition()})),n(\"tabindex\",null,(function(e,t){return e.display.input.getField().tabIndex=t||\"\"})),n(\"autofocus\",null),n(\"direction\",\"ltr\",(function(e,t){return e.doc.setDirection(t)}),!0),n(\"phrases\",null)}function Ya(e,t,n){if(!t!=!(n&&n!=Ba)){var r=e.display.dragFunctions,o=t?ve:be;o(e.display.scroller,\"dragstart\",r.start),o(e.display.scroller,\"dragenter\",r.enter),o(e.display.scroller,\"dragover\",r.over),o(e.display.scroller,\"dragleave\",r.leave),o(e.display.scroller,\"drop\",r.drop)}}function Pa(e){e.options.lineWrapping?(B(e.display.wrapper,\"CodeMirror-wrap\"),e.display.sizer.style.minWidth=\"\",e.display.sizerWidth=null):(A(e.display.wrapper,\"CodeMirror-wrap\"),dn(e)),Nr(e),Ir(e),pr(e),setTimeout((function(){return xo(e)}),100)}function Ia(e,t){var n=this;if(!(this instanceof Ia))return new Ia(e,t);this.options=t=t?I(t):{},I(Ra,t,!1);var r=t.value;\"string\"==typeof r?r=new Ss(r,t.mode,null,t.lineSeparator,t.direction):t.mode&&(r.modeOption=t.mode),this.doc=r;var o=new Ia.inputStyles[t.inputStyle](this),i=this.display=new ni(e,r,o,t);for(var c in i.wrapper.CodeMirror=this,Oa(this),t.lineWrapping&&(this.display.wrapper.className+=\" CodeMirror-wrap\"),Do(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new j,keySeq:null,specialChars:null},t.autofocus&&!y&&i.input.focus(),s&&a<11&&setTimeout((function(){return n.display.input.reset(!0)}),20),Ha(this),Bs(),Ao(this),this.curOp.forceUpdate=!0,xi(this,r),t.autofocus&&!y||this.hasFocus()?setTimeout((function(){n.hasFocus()&&!n.state.focused&&eo(n)}),20):to(this),$a)$a.hasOwnProperty(c)&&$a[c](this,t[c],Ba);Qo(this),t.finishInit&&t.finishInit(this);for(var u=0;u<ja.length;++u)ja[u](this);Mo(this),l&&t.lineWrapping&&\"optimizelegibility\"==getComputedStyle(i.lineDiv).textRendering&&(i.lineDiv.style.textRendering=\"auto\")}function Ha(e){var t=e.display;ve(t.scroller,\"mousedown\",$o(e,wa)),ve(t.scroller,\"dblclick\",s&&a<11?$o(e,(function(t){if(!we(e,t)){var n=Yr(e,t);if(n&&!Ea(e,t)&&!qn(e.display,t)){De(t);var r=e.findWordAt(n);Pi(e.doc,r.anchor,r.head)}}})):function(t){return we(e,t)||De(t)}),ve(t.scroller,\"contextmenu\",(function(t){return Ta(e,t)})),ve(t.input.getField(),\"contextmenu\",(function(n){t.scroller.contains(n.target)||Ta(e,n)}));var n,r={end:0};function o(){t.activeTouch&&(n=setTimeout((function(){return t.activeTouch=null}),1e3),(r=t.activeTouch).end=+new Date)}function i(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function l(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return n*n+r*r>400}ve(t.scroller,\"touchstart\",(function(o){if(!we(e,o)&&!i(o)&&!Ea(e,o)){t.input.ensurePolled(),clearTimeout(n);var s=+new Date;t.activeTouch={start:s,moved:!1,prev:s-r.end<=300?r:null},1==o.touches.length&&(t.activeTouch.left=o.touches[0].pageX,t.activeTouch.top=o.touches[0].pageY)}})),ve(t.scroller,\"touchmove\",(function(){t.activeTouch&&(t.activeTouch.moved=!0)})),ve(t.scroller,\"touchend\",(function(n){var r=t.activeTouch;if(r&&!qn(t,n)&&null!=r.left&&!r.moved&&new Date-r.start<300){var i,s=e.coordsChar(t.activeTouch,\"page\");i=!r.prev||l(r,r.prev)?new ci(s,s):!r.prev.prev||l(r,r.prev.prev)?e.findWordAt(s):new ci(lt(s.line,0),pt(e.doc,lt(s.line+1,0))),e.setSelection(i.anchor,i.head),e.focus(),De(n)}o()})),ve(t.scroller,\"touchcancel\",o),ve(t.scroller,\"scroll\",(function(){t.scroller.clientHeight&&(go(e,t.scroller.scrollTop),yo(e,t.scroller.scrollLeft,!0),_e(e,\"scroll\",e))})),ve(t.scroller,\"mousewheel\",(function(t){return ai(e,t)})),ve(t.scroller,\"DOMMouseScroll\",(function(t){return ai(e,t)})),ve(t.wrapper,\"scroll\",(function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0})),t.dragFunctions={enter:function(t){we(e,t)||Me(t)},over:function(t){we(e,t)||(Es(e,t),Me(t))},start:function(t){return Ls(e,t)},drop:$o(e,Ms),leave:function(t){we(e,t)||Ts(e)}};var c=t.input.getField();ve(c,\"keyup\",(function(t){return fa.call(e,t)})),ve(c,\"keydown\",$o(e,ha)),ve(c,\"keypress\",$o(e,pa)),ve(c,\"focus\",(function(t){return eo(e,t)})),ve(c,\"blur\",(function(t){return to(e,t)}))}Ia.defaults=Ra,Ia.optionHandlers=$a;var ja=[];function Wa(e,t,n,r){var o,i=e.doc;null==n&&(n=\"add\"),\"smart\"==n&&(i.mode.indent?o=xt(e,t).state:n=\"prev\");var s=e.options.tabSize,a=et(i,t),l=H(a.text,null,s);a.stateAfter&&(a.stateAfter=null);var c,u=a.text.match(/^\\s*/)[0];if(r||/\\S/.test(a.text)){if(\"smart\"==n&&((c=i.mode.indent(o,a.text.slice(u.length),a.text))==U||c>150)){if(!r)return;n=\"prev\"}}else c=0,n=\"not\";\"prev\"==n?c=t>i.first?H(et(i,t-1).text,null,s):0:\"add\"==n?c=l+e.options.indentUnit:\"subtract\"==n?c=l-e.options.indentUnit:\"number\"==typeof n&&(c=l+n),c=Math.max(0,c);var d=\"\",h=0;if(e.options.indentWithTabs)for(var m=Math.floor(c/s);m;--m)h+=s,d+=\"\\t\";if(h<c&&(d+=J(c-h)),d!=u)return as(i,d,lt(t,0),lt(t,u.length),\"+input\"),a.stateAfter=null,!0;for(var f=0;f<i.sel.ranges.length;f++){var p=i.sel.ranges[f];if(p.head.line==t&&p.head.ch<u.length){var g=lt(t,u.length);Hi(i,f,new ci(g,g));break}}}Ia.defineInitHook=function(e){return ja.push(e)};var za=null;function Ua(e){za=e}function Va(e,t,n,r,o){var i=e.doc;e.display.shift=!1,r||(r=i.sel);var s=+new Date-200,a=\"paste\"==o||e.state.pasteIncoming>s,l=Ne(t),c=null;if(a&&r.ranges.length>1)if(za&&za.text.join(\"\\n\")==t){if(r.ranges.length%za.text.length==0){c=[];for(var u=0;u<za.text.length;u++)c.push(i.splitLines(za.text[u]))}}else l.length==r.ranges.length&&e.options.pasteLinesPerSelection&&(c=Z(l,(function(e){return[e]})));for(var d=e.curOp.updateInput,h=r.ranges.length-1;h>=0;h--){var m=r.ranges[h],f=m.from(),p=m.to();m.empty()&&(n&&n>0?f=lt(f.line,f.ch-n):e.state.overwrite&&!a?p=lt(p.line,Math.min(et(i,p.line).text.length,p.ch+Q(l).length)):a&&za&&za.lineWise&&za.text.join(\"\\n\")==l.join(\"\\n\")&&(f=p=lt(f.line,0)));var g={from:f,to:p,text:c?c[h%c.length]:l,origin:o||(a?\"paste\":e.state.cutIncoming>s?\"cut\":\"+input\")};ts(e.doc,g),Fn(e,\"inputRead\",e,g)}t&&!a&&Ga(e,t),uo(e),e.curOp.updateInput<2&&(e.curOp.updateInput=d),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function qa(e,t){var n=e.clipboardData&&e.clipboardData.getData(\"Text\");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||!t.hasFocus()||Ro(t,(function(){return Va(t,n,0,null,\"paste\")})),!0}function Ga(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var o=n.ranges[r];if(!(o.head.ch>100||r&&n.ranges[r-1].head.line==o.head.line)){var i=e.getModeAt(o.head),s=!1;if(i.electricChars){for(var a=0;a<i.electricChars.length;a++)if(t.indexOf(i.electricChars.charAt(a))>-1){s=Wa(e,o.head.line,\"smart\");break}}else i.electricInput&&i.electricInput.test(et(e.doc,o.head.line).text.slice(0,o.head.ch))&&(s=Wa(e,o.head.line,\"smart\"));s&&Fn(e,\"electricInput\",e,o.head.line)}}}function Ka(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var o=e.doc.sel.ranges[r].head.line,i={anchor:lt(o,0),head:lt(o+1,0)};n.push(i),t.push(e.getRange(i.anchor,i.head))}return{text:t,ranges:n}}function Xa(e,t,n,r){e.setAttribute(\"autocorrect\",n?\"\":\"off\"),e.setAttribute(\"autocapitalize\",r?\"\":\"off\"),e.setAttribute(\"spellcheck\",!!t)}function Ja(){var e=E(\"textarea\",null,null,\"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none\"),t=E(\"div\",[e],null,\"overflow: hidden; position: relative; width: 3px; height: 0px;\");return l?e.style.width=\"1000px\":e.setAttribute(\"wrap\",\"off\"),g&&(e.style.border=\"1px solid black\"),Xa(e),t}function Qa(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){Y(this).focus(),this.display.input.focus()},setOption:function(e,n){var r=this.options,o=r[e];r[e]==n&&\"mode\"!=e||(r[e]=n,t.hasOwnProperty(e)&&$o(this,t[e])(this,n,o),_e(this,\"optionChange\",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?\"push\":\"unshift\"](Gs(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;n<t.length;++n)if(t[n]==e||t[n].name==e)return t.splice(n,1),!0},addOverlay:No((function(t,n){var r=t.token?t:e.getMode(this.options,t);if(r.startState)throw new Error(\"Overlays may not be stateful.\");ee(this.state.overlays,{mode:r,modeSpec:t,opaque:n&&n.opaque,priority:n&&n.priority||0},(function(e){return e.priority})),this.state.modeGen++,Ir(this)})),removeOverlay:No((function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var r=t[n].modeSpec;if(r==e||\"string\"==typeof e&&r.name==e)return t.splice(n,1),this.state.modeGen++,void Ir(this)}})),indentLine:No((function(e,t,n){\"string\"!=typeof t&&\"number\"!=typeof t&&(t=null==t?this.options.smartIndent?\"smart\":\"prev\":t?\"add\":\"subtract\"),st(this.doc,e)&&Wa(this,e,t,n)})),indentSelection:No((function(e){for(var t=this.doc.sel.ranges,n=-1,r=0;r<t.length;r++){var o=t[r];if(o.empty())o.head.line>n&&(Wa(this,o.head.line,e,!0),n=o.head.line,r==this.doc.sel.primIndex&&uo(this));else{var i=o.from(),s=o.to(),a=Math.max(n,i.line);n=Math.min(this.lastLine(),s.line-(s.ch?0:1))+1;for(var l=a;l<n;++l)Wa(this,l,e);var c=this.doc.sel.ranges;0==i.ch&&t.length==c.length&&c[r].from().ch>0&&Hi(this.doc,r,new ci(i,c[r].to()),V)}}})),getTokenAt:function(e,t){return At(this,e,t)},getLineTokens:function(e,t){return At(this,lt(e),t,!0)},getTokenTypeAt:function(e){e=pt(this.doc,e);var t,n=wt(this,et(this.doc,e.line)),r=0,o=(n.length-1)/2,i=e.ch;if(0==i)t=n[2];else for(;;){var s=r+o>>1;if((s?n[2*s-1]:0)>=i)o=s;else{if(!(n[2*s+1]<i)){t=n[2*s+2];break}r=s+1}}var a=t?t.indexOf(\"overlay \"):-1;return a<0?t:0==a?null:t.slice(0,a-1)},getModeAt:function(t){var n=this.doc.mode;return n.innerMode?e.innerMode(n,this.getTokenAt(t).state).mode:n},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var r=[];if(!n.hasOwnProperty(t))return r;var o=n[t],i=this.getModeAt(e);if(\"string\"==typeof i[t])o[i[t]]&&r.push(o[i[t]]);else if(i[t])for(var s=0;s<i[t].length;s++){var a=o[i[t][s]];a&&r.push(a)}else i.helperType&&o[i.helperType]?r.push(o[i.helperType]):o[i.name]&&r.push(o[i.name]);for(var l=0;l<o._global.length;l++){var c=o._global[l];c.pred(i,this)&&-1==W(r,c.val)&&r.push(c.val)}return r},getStateAfter:function(e,t){var n=this.doc;return xt(this,(e=ft(n,null==e?n.first+n.size-1:e))+1,t).state},cursorCoords:function(e,t){var n=this.doc.sel.primary();return xr(this,null==e?n.head:\"object\"==typeof e?pt(this.doc,e):e?n.from():n.to(),t||\"page\")},charCoords:function(e,t){return wr(this,pt(this.doc,e),t||\"page\")},coordsChar:function(e,t){return Dr(this,(e=_r(this,e,t||\"page\")).left,e.top)},lineAtHeight:function(e,t){return e=_r(this,{top:e,left:0},t||\"page\").top,it(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,n){var r,o=!1;if(\"number\"==typeof e){var i=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>i&&(e=i,o=!0),r=et(this.doc,e)}else r=e;return br(this,r,{top:0,left:0},t||\"page\",n||o).top+(o?this.doc.height-cn(r):0)},defaultTextHeight:function(){return Fr(this.display)},defaultCharWidth:function(){return Or(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,o){var i=this.display,s=(e=xr(this,pt(this.doc,e))).bottom,a=e.left;if(t.style.position=\"absolute\",t.setAttribute(\"cm-ignore-events\",\"true\"),this.display.input.setUneditable(t),i.sizer.appendChild(t),\"over\"==r)s=e.top;else if(\"above\"==r||\"near\"==r){var l=Math.max(i.wrapper.clientHeight,this.doc.height),c=Math.max(i.sizer.clientWidth,i.lineSpace.clientWidth);(\"above\"==r||e.bottom+t.offsetHeight>l)&&e.top>t.offsetHeight?s=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=l&&(s=e.bottom),a+t.offsetWidth>c&&(a=c-t.offsetWidth)}t.style.top=s+\"px\",t.style.left=t.style.right=\"\",\"right\"==o?(a=i.sizer.clientWidth-t.offsetWidth,t.style.right=\"0px\"):(\"left\"==o?a=0:\"middle\"==o&&(a=(i.sizer.clientWidth-t.offsetWidth)/2),t.style.left=a+\"px\"),n&&ao(this,{left:a,top:s,right:a+t.offsetWidth,bottom:s+t.offsetHeight})},triggerOnKeyDown:No(ha),triggerOnKeyPress:No(pa),triggerOnKeyUp:fa,triggerOnMouseDown:No(wa),execCommand:function(e){if(ea.hasOwnProperty(e))return ea[e].call(null,this)},triggerElectric:No((function(e){Ga(this,e)})),findPosH:function(e,t,n,r){var o=1;t<0&&(o=-1,t=-t);for(var i=pt(this.doc,e),s=0;s<t&&!(i=Za(this.doc,i,o,n,r)).hitSide;++s);return i},moveH:No((function(e,t){var n=this;this.extendSelectionsBy((function(r){return n.display.shift||n.doc.extend||r.empty()?Za(n.doc,r.head,e,t,n.options.rtlMoveVisually):e<0?r.from():r.to()}),G)})),deleteH:No((function(e,t){var n=this.doc.sel,r=this.doc;n.somethingSelected()?r.replaceSelection(\"\",null,\"+delete\"):Ks(this,(function(n){var o=Za(r,n.head,e,t,!1);return e<0?{from:o,to:n.head}:{from:n.head,to:o}}))})),findPosV:function(e,t,n,r){var o=1,i=r;t<0&&(o=-1,t=-t);for(var s=pt(this.doc,e),a=0;a<t;++a){var l=xr(this,s,\"div\");if(null==i?i=l.left:l.left=i,(s=el(this,l,o,n)).hitSide)break}return s},moveV:No((function(e,t){var n=this,r=this.doc,o=[],i=!this.display.shift&&!r.extend&&r.sel.somethingSelected();if(r.extendSelectionsBy((function(s){if(i)return e<0?s.from():s.to();var a=xr(n,s.head,\"div\");null!=s.goalColumn&&(a.left=s.goalColumn),o.push(a.left);var l=el(n,a,e,t);return\"page\"==t&&s==r.sel.primary()&&co(n,wr(n,l,\"div\").top-a.top),l}),G),o.length)for(var s=0;s<r.sel.ranges.length;s++)r.sel.ranges[s].goalColumn=o[s]})),findWordAt:function(e){var t=et(this.doc,e.line).text,n=e.ch,r=e.ch;if(t){var o=this.getHelper(e,\"wordChars\");\"before\"!=e.sticky&&r!=t.length||!n?++r:--n;for(var i=t.charAt(n),s=ie(i,o)?function(e){return ie(e,o)}:/\\s/.test(i)?function(e){return/\\s/.test(e)}:function(e){return!/\\s/.test(e)&&!ie(e)};n>0&&s(t.charAt(n-1));)--n;for(;r<t.length&&s(t.charAt(r));)++r}return new ci(lt(e.line,n),lt(e.line,r))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?B(this.display.cursorDiv,\"CodeMirror-overwrite\"):A(this.display.cursorDiv,\"CodeMirror-overwrite\"),_e(this,\"overwriteToggle\",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==O(N(this))},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:No((function(e,t){ho(this,e,t)})),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Jn(this)-this.display.barHeight,width:e.scrollWidth-Jn(this)-this.display.barWidth,clientHeight:Zn(this),clientWidth:Qn(this)}},scrollIntoView:No((function(e,t){null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):\"number\"==typeof e?e={from:lt(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?mo(this,e):po(this,e.from,e.to,e.margin)})),setSize:No((function(e,t){var n=this,r=function(e){return\"number\"==typeof e||/^\\d+$/.test(String(e))?e+\"px\":e};null!=e&&(this.display.wrapper.style.width=r(e)),null!=t&&(this.display.wrapper.style.height=r(t)),this.options.lineWrapping&&fr(this);var o=this.display.viewFrom;this.doc.iter(o,this.display.viewTo,(function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){Hr(n,o,\"widget\");break}++o})),this.curOp.forceUpdate=!0,_e(this,\"refresh\",this)})),operation:function(e){return Ro(this,e)},startOperation:function(){return Ao(this)},endOperation:function(){return Mo(this)},refresh:No((function(){var e=this.display.cachedTextHeight;Ir(this),this.curOp.forceUpdate=!0,pr(this),ho(this,this.doc.scrollLeft,this.doc.scrollTop),Ko(this.display),(null==e||Math.abs(e-Fr(this.display))>.5||this.options.lineWrapping)&&Nr(this),_e(this,\"refresh\",this)})),swapDoc:No((function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),xi(this,e),pr(this),this.display.input.reset(),ho(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,Fn(this,\"swapDoc\",this,t),t})),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},ke(e),e.registerHelper=function(t,r,o){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][r]=o},e.registerGlobalHelper=function(t,r,o,i){e.registerHelper(t,r,i),n[t]._global.push({pred:o,val:i})}}function Za(e,t,n,r,o){var i=t,s=n,a=et(e,t.line),l=o&&\"rtl\"==e.direction?-n:n;function c(){var n=t.line+l;return!(n<e.first||n>=e.first+e.size)&&(t=new lt(n,t.ch,t.sticky),a=et(e,n))}function u(i){var s;if(\"codepoint\"==r){var u=a.text.charCodeAt(t.ch+(n>0?0:-1));if(isNaN(u))s=null;else{var d=n>0?u>=55296&&u<56320:u>=56320&&u<57343;s=new lt(t.line,Math.max(0,Math.min(a.text.length,t.ch+n*(d?2:1))),-n)}}else s=o?Zs(e.cm,a,t,n):Js(a,t,n);if(null==s){if(i||!c())return!1;t=Qs(o,e.cm,a,t.line,l)}else t=s;return!0}if(\"char\"==r||\"codepoint\"==r)u();else if(\"column\"==r)u(!0);else if(\"word\"==r||\"group\"==r)for(var d=null,h=\"group\"==r,m=e.cm&&e.cm.getHelper(t,\"wordChars\"),f=!0;!(n<0)||u(!f);f=!1){var p=a.text.charAt(t.ch)||\"\\n\",g=ie(p,m)?\"w\":h&&\"\\n\"==p?\"n\":!h||/\\s/.test(p)?null:\"p\";if(!h||f||g||(g=\"s\"),d&&d!=g){n<0&&(n=1,u(),t.sticky=\"after\");break}if(g&&(d=g),n>0&&!u(!f))break}var v=Ji(e,t,i,s,!0);return ut(i,v)&&(v.hitSide=!0),v}function el(e,t,n,r){var o,i,s=e.doc,a=t.left;if(\"page\"==r){var l=Math.min(e.display.wrapper.clientHeight,Y(e).innerHeight||s(e).documentElement.clientHeight),c=Math.max(l-.5*Fr(e.display),3);o=(n>0?t.bottom:t.top)+n*c}else\"line\"==r&&(o=n>0?t.bottom+3:t.top-3);for(;(i=Dr(e,a,o)).outside;){if(n<0?o<=0:o>=s.height){i.hitSide=!0;break}o+=5*n}return i}var tl=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new j,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function nl(e,t){var n=or(e,t.line);if(!n||n.hidden)return null;var r=et(e.doc,t.line),o=tr(n,r,t.line),i=pe(r,e.doc.direction),s=\"left\";i&&(s=me(i,t.ch)%2?\"right\":\"left\");var a=cr(o.map,t.ch,s);return a.offset=\"right\"==a.collapse?a.end:a.start,a}function rl(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}function ol(e,t){return t&&(e.bad=!0),e}function il(e,t,n,r,o){var i=\"\",s=!1,a=e.doc.lineSeparator(),l=!1;function c(e){return function(t){return t.id==e}}function u(){s&&(i+=a,l&&(i+=a),s=l=!1)}function d(e){e&&(u(),i+=e)}function h(t){if(1==t.nodeType){var n=t.getAttribute(\"cm-text\");if(n)return void d(n);var i,m=t.getAttribute(\"cm-marker\");if(m){var f=e.findMarks(lt(r,0),lt(o+1,0),c(+m));return void(f.length&&(i=f[0].find(0))&&d(tt(e.doc,i.from,i.to).join(a)))}if(\"false\"==t.getAttribute(\"contenteditable\"))return;var p=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;p&&u();for(var g=0;g<t.childNodes.length;g++)h(t.childNodes[g]);/^(pre|p)$/i.test(t.nodeName)&&(l=!0),p&&(s=!0)}else 3==t.nodeType&&d(t.nodeValue.replace(/\\u200b/g,\"\").replace(/\\u00a0/g,\" \"))}for(;h(t),t!=n;)t=t.nextSibling,l=!1;return i}function sl(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return ol(e.clipPos(lt(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var o=0;o<e.display.view.length;o++){var i=e.display.view[o];if(i.node==r)return al(i,t,n)}}function al(e,t,n){var r=e.text.firstChild,o=!1;if(!t||!F(r,t))return ol(lt(ot(e.line),0),!0);if(t==r&&(o=!0,t=r.childNodes[n],n=0,!t)){var i=e.rest?Q(e.rest):e.line;return ol(lt(ot(i),i.text.length),o)}var s=3==t.nodeType?t:null,a=t;for(s||1!=t.childNodes.length||3!=t.firstChild.nodeType||(s=t.firstChild,n&&(n=s.nodeValue.length));a.parentNode!=r;)a=a.parentNode;var l=e.measure,c=l.maps;function u(t,n,r){for(var o=-1;o<(c?c.length:0);o++)for(var i=o<0?l.map:c[o],s=0;s<i.length;s+=3){var a=i[s+2];if(a==t||a==n){var u=ot(o<0?e.line:e.rest[o]),d=i[s]+r;return(r<0||a!=t)&&(d=i[s+(r?1:0)]),lt(u,d)}}}var d=u(s,a,n);if(d)return ol(d,o);for(var h=a.nextSibling,m=s?s.nodeValue.length-n:0;h;h=h.nextSibling){if(d=u(h,h.firstChild,0))return ol(lt(d.line,d.ch-m),o);m+=h.textContent.length}for(var f=a.previousSibling,p=n;f;f=f.previousSibling){if(d=u(f,f.firstChild,-1))return ol(lt(d.line,d.ch+p),o);p+=f.textContent.length}}tl.prototype.init=function(e){var t=this,n=this,r=n.cm,o=n.div=e.lineDiv;function i(e){for(var t=e.target;t;t=t.parentNode){if(t==o)return!0;if(/\\bCodeMirror-(?:line)?widget\\b/.test(t.className))break}return!1}function s(e){if(i(e)&&!we(r,e)){if(r.somethingSelected())Ua({lineWise:!1,text:r.getSelections()}),\"cut\"==e.type&&r.replaceSelection(\"\",null,\"cut\");else{if(!r.options.lineWiseCopyCut)return;var t=Ka(r);Ua({lineWise:!0,text:t.text}),\"cut\"==e.type&&r.operation((function(){r.setSelections(t.ranges,0,V),r.replaceSelection(\"\",null,\"cut\")}))}if(e.clipboardData){e.clipboardData.clearData();var s=za.text.join(\"\\n\");if(e.clipboardData.setData(\"Text\",s),e.clipboardData.getData(\"Text\")==s)return void e.preventDefault()}var a=Ja(),l=a.firstChild;r.display.lineSpace.insertBefore(a,r.display.lineSpace.firstChild),l.value=za.text.join(\"\\n\");var c=O(o.ownerDocument);$(l),setTimeout((function(){r.display.lineSpace.removeChild(a),c.focus(),c==o&&n.showPrimarySelection()}),50)}}o.contentEditable=!0,Xa(o,r.options.spellcheck,r.options.autocorrect,r.options.autocapitalize),ve(o,\"paste\",(function(e){!i(e)||we(r,e)||qa(e,r)||a<=11&&setTimeout($o(r,(function(){return t.updateFromDOM()})),20)})),ve(o,\"compositionstart\",(function(e){t.composing={data:e.data,done:!1}})),ve(o,\"compositionupdate\",(function(e){t.composing||(t.composing={data:e.data,done:!1})})),ve(o,\"compositionend\",(function(e){t.composing&&(e.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)})),ve(o,\"touchstart\",(function(){return n.forceCompositionEnd()})),ve(o,\"input\",(function(){t.composing||t.readFromDOMSoon()})),ve(o,\"copy\",s),ve(o,\"cut\",s)},tl.prototype.screenReaderLabelChanged=function(e){e?this.div.setAttribute(\"aria-label\",e):this.div.removeAttribute(\"aria-label\")},tl.prototype.prepareSelection=function(){var e=qr(this.cm,!1);return e.focus=O(this.div.ownerDocument)==this.div,e},tl.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},tl.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},tl.prototype.showPrimarySelection=function(){var e=this.getSelection(),t=this.cm,r=t.doc.sel.primary(),o=r.from(),i=r.to();if(t.display.viewTo==t.display.viewFrom||o.line>=t.display.viewTo||i.line<t.display.viewFrom)e.removeAllRanges();else{var s=sl(t,e.anchorNode,e.anchorOffset),a=sl(t,e.focusNode,e.focusOffset);if(!s||s.bad||!a||a.bad||0!=ct(mt(s,a),o)||0!=ct(ht(s,a),i)){var l=t.display.view,c=o.line>=t.display.viewFrom&&nl(t,o)||{node:l[0].measure.map[2],offset:0},u=i.line<t.display.viewTo&&nl(t,i);if(!u){var d=l[l.length-1].measure,h=d.maps?d.maps[d.maps.length-1]:d.map;u={node:h[h.length-1],offset:h[h.length-2]-h[h.length-3]}}if(c&&u){var m,f=e.rangeCount&&e.getRangeAt(0);try{m=S(c.node,c.offset,u.offset,u.node)}catch(e){}m&&(!n&&t.state.focused?(e.collapse(c.node,c.offset),m.collapsed||(e.removeAllRanges(),e.addRange(m))):(e.removeAllRanges(),e.addRange(m)),f&&null==e.anchorNode?e.addRange(f):n&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},tl.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout((function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation((function(){return e.cm.curOp.selectionChanged=!0}))}),20)},tl.prototype.showMultipleSelections=function(e){L(this.cm.display.cursorDiv,e.cursors),L(this.cm.display.selectionDiv,e.selection)},tl.prototype.rememberSelection=function(){var e=this.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},tl.prototype.selectionInEditor=function(){var e=this.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return F(this.div,t)},tl.prototype.focus=function(){\"nocursor\"!=this.cm.options.readOnly&&(this.selectionInEditor()&&O(this.div.ownerDocument)==this.div||this.showSelection(this.prepareSelection(),!0),this.div.focus())},tl.prototype.blur=function(){this.div.blur()},tl.prototype.getField=function(){return this.div},tl.prototype.supportsTouch=function(){return!0},tl.prototype.receivedFocus=function(){var e=this,t=this;function n(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,n))}this.selectionInEditor()?setTimeout((function(){return e.pollSelection()}),20):Ro(this.cm,(function(){return t.cm.curOp.selectionChanged=!0})),this.polling.set(this.cm.options.pollInterval,n)},tl.prototype.selectionChanged=function(){var e=this.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},tl.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=this.getSelection(),t=this.cm;if(v&&u&&this.cm.display.gutterSpecs.length&&rl(e.anchorNode))return this.cm.triggerOnKeyDown({type:\"keydown\",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var n=sl(t,e.anchorNode,e.anchorOffset),r=sl(t,e.focusNode,e.focusOffset);n&&r&&Ro(t,(function(){Ui(t.doc,di(n,r),V),(n.bad||r.bad)&&(t.curOp.selectionChanged=!0)}))}}},tl.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e,t,n,r=this.cm,o=r.display,i=r.doc.sel.primary(),s=i.from(),a=i.to();if(0==s.ch&&s.line>r.firstLine()&&(s=lt(s.line-1,et(r.doc,s.line-1).length)),a.ch==et(r.doc,a.line).text.length&&a.line<r.lastLine()&&(a=lt(a.line+1,0)),s.line<o.viewFrom||a.line>o.viewTo-1)return!1;s.line==o.viewFrom||0==(e=Pr(r,s.line))?(t=ot(o.view[0].line),n=o.view[0].node):(t=ot(o.view[e].line),n=o.view[e-1].node.nextSibling);var l,c,u=Pr(r,a.line);if(u==o.view.length-1?(l=o.viewTo-1,c=o.lineDiv.lastChild):(l=ot(o.view[u+1].line)-1,c=o.view[u+1].node.previousSibling),!n)return!1;for(var d=r.doc.splitLines(il(r,n,c,t,l)),h=tt(r.doc,lt(t,0),lt(l,et(r.doc,l).text.length));d.length>1&&h.length>1;)if(Q(d)==Q(h))d.pop(),h.pop(),l--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),t++}for(var m=0,f=0,p=d[0],g=h[0],v=Math.min(p.length,g.length);m<v&&p.charCodeAt(m)==g.charCodeAt(m);)++m;for(var y=Q(d),b=Q(h),_=Math.min(y.length-(1==d.length?m:0),b.length-(1==h.length?m:0));f<_&&y.charCodeAt(y.length-f-1)==b.charCodeAt(b.length-f-1);)++f;if(1==d.length&&1==h.length&&t==s.line)for(;m&&m>s.ch&&y.charCodeAt(y.length-f-1)==b.charCodeAt(b.length-f-1);)m--,f++;d[d.length-1]=y.slice(0,y.length-f).replace(/^\\u200b+/,\"\"),d[0]=d[0].slice(m).replace(/\\u200b+$/,\"\");var w=lt(t,m),x=lt(l,h.length?Q(h).length-f:0);return d.length>1||d[0]||ct(w,x)?(as(r.doc,d,w,x,\"+input\"),!0):void 0},tl.prototype.ensurePolled=function(){this.forceCompositionEnd()},tl.prototype.reset=function(){this.forceCompositionEnd()},tl.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},tl.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout((function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()}),80))},tl.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||Ro(this.cm,(function(){return Ir(e.cm)}))},tl.prototype.setUneditable=function(e){e.contentEditable=\"false\"},tl.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||$o(this.cm,Va)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},tl.prototype.readOnlyChanged=function(e){this.div.contentEditable=String(\"nocursor\"!=e)},tl.prototype.onContextMenu=function(){},tl.prototype.resetPosition=function(){},tl.prototype.needsContentAttribute=!0;var ll=function(e){this.cm=e,this.prevInput=\"\",this.pollingFast=!1,this.polling=new j,this.hasSelection=!1,this.composing=null,this.resetting=!1};function cl(e,t){if((t=t?I(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=O(e.ownerDocument);t.autofocus=n==e||null!=e.getAttribute(\"autofocus\")&&n==document.body}function r(){e.value=a.getValue()}var o;if(e.form&&(ve(e.form,\"submit\",r),!t.leaveSubmitMethodAlone)){var i=e.form;o=i.submit;try{var s=i.submit=function(){r(),i.submit=o,i.submit(),i.submit=s}}catch(e){}}t.finishInit=function(n){n.save=r,n.getTextArea=function(){return e},n.toTextArea=function(){n.toTextArea=isNaN,r(),e.parentNode.removeChild(n.getWrapperElement()),e.style.display=\"\",e.form&&(be(e.form,\"submit\",r),t.leaveSubmitMethodAlone||\"function\"!=typeof e.form.submit||(e.form.submit=o))}},e.style.display=\"none\";var a=Ia((function(t){return e.parentNode.insertBefore(t,e.nextSibling)}),t);return a}function ul(e){e.off=be,e.on=ve,e.wheelEventPixels=si,e.Doc=Ss,e.splitLines=Ne,e.countColumn=H,e.findColumn=K,e.isWordChar=oe,e.Pass=U,e.signal=_e,e.Line=hn,e.changeEnd=hi,e.scrollbarModel=ko,e.Pos=lt,e.cmpPos=ct,e.modes=je,e.mimeModes=We,e.resolveMode=Ve,e.getMode=qe,e.modeExtensions=Ge,e.extendMode=Ke,e.copyState=Xe,e.startState=Qe,e.innerMode=Je,e.commands=ea,e.keyMap=Hs,e.keyName=qs,e.isModifierKey=Us,e.lookupKey=zs,e.normalizeKeyMap=Ws,e.StringStream=Ze,e.SharedTextMarker=_s,e.TextMarker=ys,e.LineWidget=fs,e.e_preventDefault=De,e.e_stopPropagation=Se,e.e_stop=Me,e.addClass=B,e.contains=F,e.rmClass=A,e.keyNames=Ns}ll.prototype.init=function(e){var t=this,n=this,r=this.cm;this.createField(e);var o=this.textarea;function i(e){if(!we(r,e)){if(r.somethingSelected())Ua({lineWise:!1,text:r.getSelections()});else{if(!r.options.lineWiseCopyCut)return;var t=Ka(r);Ua({lineWise:!0,text:t.text}),\"cut\"==e.type?r.setSelections(t.ranges,null,V):(n.prevInput=\"\",o.value=t.text.join(\"\\n\"),$(o))}\"cut\"==e.type&&(r.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(o.style.width=\"0px\"),ve(o,\"input\",(function(){s&&a>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()})),ve(o,\"paste\",(function(e){we(r,e)||qa(e,r)||(r.state.pasteIncoming=+new Date,n.fastPoll())})),ve(o,\"cut\",i),ve(o,\"copy\",i),ve(e.scroller,\"paste\",(function(t){if(!qn(e,t)&&!we(r,t)){if(!o.dispatchEvent)return r.state.pasteIncoming=+new Date,void n.focus();var i=new Event(\"paste\");i.clipboardData=t.clipboardData,o.dispatchEvent(i)}})),ve(e.lineSpace,\"selectstart\",(function(t){qn(e,t)||De(t)})),ve(o,\"compositionstart\",(function(){var e=r.getCursor(\"from\");n.composing&&n.composing.range.clear(),n.composing={start:e,range:r.markText(e,r.getCursor(\"to\"),{className:\"CodeMirror-composing\"})}})),ve(o,\"compositionend\",(function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)}))},ll.prototype.createField=function(e){this.wrapper=Ja(),this.textarea=this.wrapper.firstChild},ll.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute(\"aria-label\",e):this.textarea.removeAttribute(\"aria-label\")},ll.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,r=qr(e);if(e.options.moveInputWithCursor){var o=xr(e,n.sel.primary().head,\"div\"),i=t.wrapper.getBoundingClientRect(),s=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,o.top+s.top-i.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,o.left+s.left-i.left))}return r},ll.prototype.showSelection=function(e){var t=this.cm.display;L(t.cursorDiv,e.cursors),L(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+\"px\",this.wrapper.style.left=e.teLeft+\"px\")},ll.prototype.reset=function(e){if(!(this.contextMenuPending||this.composing&&e)){var t=this.cm;if(this.resetting=!0,t.somethingSelected()){this.prevInput=\"\";var n=t.getSelection();this.textarea.value=n,t.state.focused&&$(this.textarea),s&&a>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value=\"\",s&&a>=9&&(this.hasSelection=null));this.resetting=!1}},ll.prototype.getField=function(){return this.textarea},ll.prototype.supportsTouch=function(){return!1},ll.prototype.focus=function(){if(\"nocursor\"!=this.cm.options.readOnly&&(!y||O(this.textarea.ownerDocument)!=this.textarea))try{this.textarea.focus()}catch(e){}},ll.prototype.blur=function(){this.textarea.blur()},ll.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},ll.prototype.receivedFocus=function(){this.slowPoll()},ll.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,(function(){e.poll(),e.cm.state.focused&&e.slowPoll()}))},ll.prototype.fastPoll=function(){var e=!1,t=this;function n(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,n))}t.pollingFast=!0,t.polling.set(20,n)},ll.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||this.resetting||!t.state.focused||Ye(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var o=n.value;if(o==r&&!t.somethingSelected())return!1;if(s&&a>=9&&this.hasSelection===o||b&&/[\\uf700-\\uf7ff]/.test(o))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var i=o.charCodeAt(0);if(8203!=i||r||(r=\"​\"),8666==i)return this.reset(),this.cm.execCommand(\"undo\")}for(var l=0,c=Math.min(r.length,o.length);l<c&&r.charCodeAt(l)==o.charCodeAt(l);)++l;return Ro(t,(function(){Va(t,o.slice(l),r.length-l,null,e.composing?\"*compose\":null),o.length>1e3||o.indexOf(\"\\n\")>-1?n.value=e.prevInput=\"\":e.prevInput=o,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor(\"to\"),{className:\"CodeMirror-composing\"}))})),!0},ll.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},ll.prototype.onKeyPress=function(){s&&a>=9&&(this.hasSelection=null),this.fastPoll()},ll.prototype.onContextMenu=function(e){var t=this,n=t.cm,r=n.display,o=t.textarea;t.contextMenuPending&&t.contextMenuPending();var i=Yr(n,e),c=r.scroller.scrollTop;if(i&&!h){n.options.resetSelectionOnContextMenu&&-1==n.doc.sel.contains(i)&&$o(n,Ui)(n.doc,di(i),V);var u,d=o.style.cssText,m=t.wrapper.style.cssText,f=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText=\"position: static\",o.style.cssText=\"position: absolute; width: 30px; height: 30px;\\n      top: \"+(e.clientY-f.top-5)+\"px; left: \"+(e.clientX-f.left-5)+\"px;\\n      z-index: 1000; background: \"+(s?\"rgba(255, 255, 255, .05)\":\"transparent\")+\";\\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\",l&&(u=o.ownerDocument.defaultView.scrollY),r.input.focus(),l&&o.ownerDocument.defaultView.scrollTo(null,u),r.input.reset(),n.somethingSelected()||(o.value=t.prevInput=\" \"),t.contextMenuPending=v,r.selForContextMenu=n.doc.sel,clearTimeout(r.detectingSelectAll),s&&a>=9&&g(),k){Me(e);var p=function(){be(window,\"mouseup\",p),setTimeout(v,20)};ve(window,\"mouseup\",p)}else setTimeout(v,50)}function g(){if(null!=o.selectionStart){var e=n.somethingSelected(),i=\"​\"+(e?o.value:\"\");o.value=\"⇚\",o.value=i,t.prevInput=e?\"\":\"​\",o.selectionStart=1,o.selectionEnd=i.length,r.selForContextMenu=n.doc.sel}}function v(){if(t.contextMenuPending==v&&(t.contextMenuPending=!1,t.wrapper.style.cssText=m,o.style.cssText=d,s&&a<9&&r.scrollbars.setScrollTop(r.scroller.scrollTop=c),null!=o.selectionStart)){(!s||s&&a<9)&&g();var e=0,i=function(){r.selForContextMenu==n.doc.sel&&0==o.selectionStart&&o.selectionEnd>0&&\"​\"==t.prevInput?$o(n,Zi)(n):e++<10?r.detectingSelectAll=setTimeout(i,500):(r.selForContextMenu=null,r.input.reset())};r.detectingSelectAll=setTimeout(i,200)}}},ll.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled=\"nocursor\"==e,this.textarea.readOnly=!!e},ll.prototype.setUneditable=function(){},ll.prototype.needsContentAttribute=!1,Na(Ia),Qa(Ia);var dl=\"iter insert remove copy getEditor constructor\".split(\" \");for(var hl in Ss.prototype)Ss.prototype.hasOwnProperty(hl)&&W(dl,hl)<0&&(Ia.prototype[hl]=function(e){return function(){return e.apply(this.doc,arguments)}}(Ss.prototype[hl]));return ke(Ss),Ia.inputStyles={textarea:ll,contenteditable:tl},Ia.defineMode=function(e){Ia.defaults.mode||\"null\"==e||(Ia.defaults.mode=e),ze.apply(this,arguments)},Ia.defineMIME=Ue,Ia.defineMode(\"null\",(function(){return{token:function(e){return e.skipToEnd()}}})),Ia.defineMIME(\"text/plain\",\"null\"),Ia.defineExtension=function(e,t){Ia.prototype[e]=t},Ia.defineDocExtension=function(e,t){Ss.prototype[e]=t},Ia.fromTextArea=cl,ul(Ia),Ia.version=\"5.65.9\",Ia}()},2425:(e,t,n)=>{!function(e){\"use strict\";var t=/^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\\.beep|\\.lwz|\\.xpc|\\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\\.beeps?|xmpp|xri|ymsgr|z39\\.50[rs]?):(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\([^\\s()<>]*\\))+(?:\\([^\\s()<>]*\\)|[^\\s`*!()\\[\\]{};:'\".,<>?«»“”‘’]))/i;e.defineMode(\"gfm\",(function(n,r){var o=0;function i(e){return e.code=!1,null}var s={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(e){return{code:e.code,codeBlock:e.codeBlock,ateSpace:e.ateSpace}},token:function(e,n){if(n.combineTokens=null,n.codeBlock)return e.match(/^```+/)?(n.codeBlock=!1,null):(e.skipToEnd(),null);if(e.sol()&&(n.code=!1),e.sol()&&e.match(/^```+/))return e.skipToEnd(),n.codeBlock=!0,null;if(\"`\"===e.peek()){e.next();var i=e.pos;e.eatWhile(\"`\");var s=1+e.pos-i;return n.code?s===o&&(n.code=!1):(o=s,n.code=!0),null}if(n.code)return e.next(),null;if(e.eatSpace())return n.ateSpace=!0,null;if((e.sol()||n.ateSpace)&&(n.ateSpace=!1,!1!==r.gitHubSpice)){if(e.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+@)?(?=.{0,6}\\d)(?:[a-f0-9]{7,40}\\b)/))return n.combineTokens=!0,\"link\";if(e.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+)?#[0-9]+\\b/))return n.combineTokens=!0,\"link\"}return e.match(t)&&\"](\"!=e.string.slice(e.start-2,e.start)&&(0==e.start||/\\W/.test(e.string.charAt(e.start-1)))?(n.combineTokens=!0,\"link\"):(e.next(),null)},blankLine:i},a={taskLists:!0,strikethrough:!0,emoji:!0};for(var l in r)a[l]=r[l];return a.name=\"markdown\",e.overlayMode(e.getMode(n,a),s)}),\"markdown\"),e.defineMIME(\"text/x-gfm\",\"gfm\")}(n(4631),n(9047),n(4146))},9047:(e,t,n)=>{!function(e){\"use strict\";e.defineMode(\"markdown\",(function(t,n){var r=e.getMode(t,\"text/html\"),o=\"null\"==r.name;function i(n){if(e.findModeByName){var r=e.findModeByName(n);r&&(n=r.mime||r.mimes[0])}var o=e.getMode(t,n);return\"null\"==o.name?null:o}void 0===n.highlightFormatting&&(n.highlightFormatting=!1),void 0===n.maxBlockquoteDepth&&(n.maxBlockquoteDepth=0),void 0===n.taskLists&&(n.taskLists=!1),void 0===n.strikethrough&&(n.strikethrough=!1),void 0===n.emoji&&(n.emoji=!1),void 0===n.fencedCodeBlockHighlighting&&(n.fencedCodeBlockHighlighting=!0),void 0===n.fencedCodeBlockDefaultMode&&(n.fencedCodeBlockDefaultMode=\"text/plain\"),void 0===n.xml&&(n.xml=!0),void 0===n.tokenTypeOverrides&&(n.tokenTypeOverrides={});var s={header:\"header\",code:\"comment\",quote:\"quote\",list1:\"variable-2\",list2:\"variable-3\",list3:\"keyword\",hr:\"hr\",image:\"image\",imageAltText:\"image-alt-text\",imageMarker:\"image-marker\",formatting:\"formatting\",linkInline:\"link\",linkEmail:\"link\",linkText:\"link\",linkHref:\"string\",em:\"em\",strong:\"strong\",strikethrough:\"strikethrough\",emoji:\"builtin\"};for(var a in s)s.hasOwnProperty(a)&&n.tokenTypeOverrides[a]&&(s[a]=n.tokenTypeOverrides[a]);var l=/^([*\\-_])(?:\\s*\\1){2,}\\s*$/,c=/^(?:[*\\-+]|^[0-9]+([.)]))\\s+/,u=/^\\[(x| )\\](?=\\s)/i,d=n.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,h=/^ {0,3}(?:\\={1,}|-{2,})\\s*$/,m=/^[^#!\\[\\]*_\\\\<>` \"'(~:]+/,f=/^(~~~+|```+)[ \\t]*([\\w\\/+#-]*)[^\\n`]*$/,p=/^\\s*\\[[^\\]]+?\\]:.*$/,g=/[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/,v=\"    \";function y(e,t,n){return t.f=t.inline=n,n(e,t)}function b(e,t,n){return t.f=t.block=n,n(e,t)}function _(e){return!e||!/\\S/.test(e.string)}function w(t){if(t.linkTitle=!1,t.linkHref=!1,t.linkText=!1,t.em=!1,t.strong=!1,t.strikethrough=!1,t.quote=0,t.indentedCode=!1,t.f==C){var n=o;if(!n){var i=e.innerMode(r,t.htmlState);n=\"xml\"==i.mode.name&&null===i.state.tagStart&&!i.state.context&&i.state.tokenize.isInText}n&&(t.f=A,t.block=x,t.htmlState=null)}return t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.prevLine=t.thisLine,t.thisLine={stream:null},null}function x(t,r){var o=t.column()===r.indentation,a=_(r.prevLine.stream),m=r.indentedCode,g=r.prevLine.hr,v=!1!==r.list,b=(r.listStack[r.listStack.length-1]||0)+3;r.indentedCode=!1;var w=r.indentation;if(null===r.indentationDiff&&(r.indentationDiff=r.indentation,v)){for(r.list=null;w<r.listStack[r.listStack.length-1];)r.listStack.pop(),r.listStack.length?r.indentation=r.listStack[r.listStack.length-1]:r.list=!1;!1!==r.list&&(r.indentationDiff=w-r.listStack[r.listStack.length-1])}var x=!(a||g||r.prevLine.header||v&&m||r.prevLine.fencedCodeEnd),C=(!1===r.list||g||a)&&r.indentation<=b&&t.match(l),S=null;if(r.indentationDiff>=4&&(m||r.prevLine.fencedCodeEnd||r.prevLine.header||a))return t.skipToEnd(),r.indentedCode=!0,s.code;if(t.eatSpace())return null;if(o&&r.indentation<=b&&(S=t.match(d))&&S[1].length<=6)return r.quote=0,r.header=S[1].length,r.thisLine.header=!0,n.highlightFormatting&&(r.formatting=\"header\"),r.f=r.inline,D(r);if(r.indentation<=b&&t.eat(\">\"))return r.quote=o?1:r.quote+1,n.highlightFormatting&&(r.formatting=\"quote\"),t.eatSpace(),D(r);if(!C&&!r.setext&&o&&r.indentation<=b&&(S=t.match(c))){var A=S[1]?\"ol\":\"ul\";return r.indentation=w+t.current().length,r.list=!0,r.quote=0,r.listStack.push(r.indentation),r.em=!1,r.strong=!1,r.code=!1,r.strikethrough=!1,n.taskLists&&t.match(u,!1)&&(r.taskList=!0),r.f=r.inline,n.highlightFormatting&&(r.formatting=[\"list\",\"list-\"+A]),D(r)}return o&&r.indentation<=b&&(S=t.match(f,!0))?(r.quote=0,r.fencedEndRE=new RegExp(S[1]+\"+ *$\"),r.localMode=n.fencedCodeBlockHighlighting&&i(S[2]||n.fencedCodeBlockDefaultMode),r.localMode&&(r.localState=e.startState(r.localMode)),r.f=r.block=k,n.highlightFormatting&&(r.formatting=\"code-block\"),r.code=-1,D(r)):r.setext||!(x&&v||r.quote||!1!==r.list||r.code||C||p.test(t.string))&&(S=t.lookAhead(1))&&(S=S.match(h))?(r.setext?(r.header=r.setext,r.setext=0,t.skipToEnd(),n.highlightFormatting&&(r.formatting=\"header\")):(r.header=\"=\"==S[0].charAt(0)?1:2,r.setext=r.header),r.thisLine.header=!0,r.f=r.inline,D(r)):C?(t.skipToEnd(),r.hr=!0,r.thisLine.hr=!0,s.hr):\"[\"===t.peek()?y(t,r,F):y(t,r,r.inline)}function C(t,n){var i=r.token(t,n.htmlState);if(!o){var s=e.innerMode(r,n.htmlState);(\"xml\"==s.mode.name&&null===s.state.tagStart&&!s.state.context&&s.state.tokenize.isInText||n.md_inside&&t.current().indexOf(\">\")>-1)&&(n.f=A,n.block=x,n.htmlState=null)}return i}function k(e,t){var r,o=t.listStack[t.listStack.length-1]||0,i=t.indentation<o,a=o+3;return t.fencedEndRE&&t.indentation<=a&&(i||e.match(t.fencedEndRE))?(n.highlightFormatting&&(t.formatting=\"code-block\"),i||(r=D(t)),t.localMode=t.localState=null,t.block=x,t.f=A,t.fencedEndRE=null,t.code=0,t.thisLine.fencedCodeEnd=!0,i?b(e,t,t.block):r):t.localMode?t.localMode.token(e,t.localState):(e.skipToEnd(),s.code)}function D(e){var t=[];if(e.formatting){t.push(s.formatting),\"string\"==typeof e.formatting&&(e.formatting=[e.formatting]);for(var r=0;r<e.formatting.length;r++)t.push(s.formatting+\"-\"+e.formatting[r]),\"header\"===e.formatting[r]&&t.push(s.formatting+\"-\"+e.formatting[r]+\"-\"+e.header),\"quote\"===e.formatting[r]&&(!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(s.formatting+\"-\"+e.formatting[r]+\"-\"+e.quote):t.push(\"error\"))}if(e.taskOpen)return t.push(\"meta\"),t.length?t.join(\" \"):null;if(e.taskClosed)return t.push(\"property\"),t.length?t.join(\" \"):null;if(e.linkHref?t.push(s.linkHref,\"url\"):(e.strong&&t.push(s.strong),e.em&&t.push(s.em),e.strikethrough&&t.push(s.strikethrough),e.emoji&&t.push(s.emoji),e.linkText&&t.push(s.linkText),e.code&&t.push(s.code),e.image&&t.push(s.image),e.imageAltText&&t.push(s.imageAltText,\"link\"),e.imageMarker&&t.push(s.imageMarker)),e.header&&t.push(s.header,s.header+\"-\"+e.header),e.quote&&(t.push(s.quote),!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(s.quote+\"-\"+e.quote):t.push(s.quote+\"-\"+n.maxBlockquoteDepth)),!1!==e.list){var o=(e.listStack.length-1)%3;o?1===o?t.push(s.list2):t.push(s.list3):t.push(s.list1)}return e.trailingSpaceNewLine?t.push(\"trailing-space-new-line\"):e.trailingSpace&&t.push(\"trailing-space-\"+(e.trailingSpace%2?\"a\":\"b\")),t.length?t.join(\" \"):null}function S(e,t){if(e.match(m,!0))return D(t)}function A(t,o){var i=o.text(t,o);if(void 0!==i)return i;if(o.list)return o.list=null,D(o);if(o.taskList)return\" \"===t.match(u,!0)[1]?o.taskOpen=!0:o.taskClosed=!0,n.highlightFormatting&&(o.formatting=\"task\"),o.taskList=!1,D(o);if(o.taskOpen=!1,o.taskClosed=!1,o.header&&t.match(/^#+$/,!0))return n.highlightFormatting&&(o.formatting=\"header\"),D(o);var a=t.next();if(o.linkTitle){o.linkTitle=!1;var l=a;\"(\"===a&&(l=\")\");var c=\"^\\\\s*(?:[^\"+(l=(l+\"\").replace(/([.?*+^\\[\\]\\\\(){}|-])/g,\"\\\\$1\"))+\"\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)\"+l;if(t.match(new RegExp(c),!0))return s.linkHref}if(\"`\"===a){var d=o.formatting;n.highlightFormatting&&(o.formatting=\"code\"),t.eatWhile(\"`\");var h=t.current().length;if(0!=o.code||o.quote&&1!=h){if(h==o.code){var m=D(o);return o.code=0,m}return o.formatting=d,D(o)}return o.code=h,D(o)}if(o.code)return D(o);if(\"\\\\\"===a&&(t.next(),n.highlightFormatting)){var f=D(o),p=s.formatting+\"-escape\";return f?f+\" \"+p:p}if(\"!\"===a&&t.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/,!1))return o.imageMarker=!0,o.image=!0,n.highlightFormatting&&(o.formatting=\"image\"),D(o);if(\"[\"===a&&o.imageMarker&&t.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/,!1))return o.imageMarker=!1,o.imageAltText=!0,n.highlightFormatting&&(o.formatting=\"image\"),D(o);if(\"]\"===a&&o.imageAltText){n.highlightFormatting&&(o.formatting=\"image\");var f=D(o);return o.imageAltText=!1,o.image=!1,o.inline=o.f=L,f}if(\"[\"===a&&!o.image)return o.linkText&&t.match(/^.*?\\]/)||(o.linkText=!0,n.highlightFormatting&&(o.formatting=\"link\")),D(o);if(\"]\"===a&&o.linkText){n.highlightFormatting&&(o.formatting=\"link\");var f=D(o);return o.linkText=!1,o.inline=o.f=t.match(/\\(.*?\\)| ?\\[.*?\\]/,!1)?L:A,f}if(\"<\"===a&&t.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/,!1))return o.f=o.inline=M,n.highlightFormatting&&(o.formatting=\"link\"),(f=D(o))?f+=\" \":f=\"\",f+s.linkInline;if(\"<\"===a&&t.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/,!1))return o.f=o.inline=M,n.highlightFormatting&&(o.formatting=\"link\"),(f=D(o))?f+=\" \":f=\"\",f+s.linkEmail;if(n.xml&&\"<\"===a&&t.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i,!1)){var v=t.string.indexOf(\">\",t.pos);if(-1!=v){var y=t.string.substring(t.start,v);/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(y)&&(o.md_inside=!0)}return t.backUp(1),o.htmlState=e.startState(r),b(t,o,C)}if(n.xml&&\"<\"===a&&t.match(/^\\/\\w*?>/))return o.md_inside=!1,\"tag\";if(\"*\"===a||\"_\"===a){for(var _=1,w=1==t.pos?\" \":t.string.charAt(t.pos-2);_<3&&t.eat(a);)_++;var x=t.peek()||\" \",k=!/\\s/.test(x)&&(!g.test(x)||/\\s/.test(w)||g.test(w)),S=!/\\s/.test(w)&&(!g.test(w)||/\\s/.test(x)||g.test(x)),E=null,T=null;if(_%2&&(o.em||!k||\"*\"!==a&&S&&!g.test(w)?o.em!=a||!S||\"*\"!==a&&k&&!g.test(x)||(E=!1):E=!0),_>1&&(o.strong||!k||\"*\"!==a&&S&&!g.test(w)?o.strong!=a||!S||\"*\"!==a&&k&&!g.test(x)||(T=!1):T=!0),null!=T||null!=E)return n.highlightFormatting&&(o.formatting=null==E?\"strong\":null==T?\"em\":\"strong em\"),!0===E&&(o.em=a),!0===T&&(o.strong=a),m=D(o),!1===E&&(o.em=!1),!1===T&&(o.strong=!1),m}else if(\" \"===a&&(t.eat(\"*\")||t.eat(\"_\"))){if(\" \"===t.peek())return D(o);t.backUp(1)}if(n.strikethrough)if(\"~\"===a&&t.eatWhile(a)){if(o.strikethrough)return n.highlightFormatting&&(o.formatting=\"strikethrough\"),m=D(o),o.strikethrough=!1,m;if(t.match(/^[^\\s]/,!1))return o.strikethrough=!0,n.highlightFormatting&&(o.formatting=\"strikethrough\"),D(o)}else if(\" \"===a&&t.match(\"~~\",!0)){if(\" \"===t.peek())return D(o);t.backUp(2)}if(n.emoji&&\":\"===a&&t.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)){o.emoji=!0,n.highlightFormatting&&(o.formatting=\"emoji\");var F=D(o);return o.emoji=!1,F}return\" \"===a&&(t.match(/^ +$/,!1)?o.trailingSpace++:o.trailingSpace&&(o.trailingSpaceNewLine=!0)),D(o)}function M(e,t){if(\">\"===e.next()){t.f=t.inline=A,n.highlightFormatting&&(t.formatting=\"link\");var r=D(t);return r?r+=\" \":r=\"\",r+s.linkInline}return e.match(/^[^>]+/,!0),s.linkInline}function L(e,t){if(e.eatSpace())return null;var r=e.next();return\"(\"===r||\"[\"===r?(t.f=t.inline=T(\"(\"===r?\")\":\"]\"),n.highlightFormatting&&(t.formatting=\"link-string\"),t.linkHref=!0,D(t)):\"error\"}var E={\")\":/^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\"]\":/^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/};function T(e){return function(t,r){if(t.next()===e){r.f=r.inline=A,n.highlightFormatting&&(r.formatting=\"link-string\");var o=D(r);return r.linkHref=!1,o}return t.match(E[e]),r.linkHref=!0,D(r)}}function F(e,t){return e.match(/^([^\\]\\\\]|\\\\.)*\\]:/,!1)?(t.f=O,e.next(),n.highlightFormatting&&(t.formatting=\"link\"),t.linkText=!0,D(t)):y(e,t,A)}function O(e,t){if(e.match(\"]:\",!0)){t.f=t.inline=B,n.highlightFormatting&&(t.formatting=\"link\");var r=D(t);return t.linkText=!1,r}return e.match(/^([^\\]\\\\]|\\\\.)+/,!0),s.linkText}function B(e,t){return e.eatSpace()?null:(e.match(/^[^\\s]+/,!0),void 0===e.peek()?t.linkTitle=!0:e.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\.)+\"|'(?:[^'\\\\]|\\\\.)+'|\\((?:[^)\\\\]|\\\\.)+\\)))?/,!0),t.f=t.inline=A,s.linkHref+\" url\")}var R={startState:function(){return{f:x,prevLine:{stream:null},thisLine:{stream:null},block:x,htmlState:null,indentation:0,inline:A,text:S,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(t){return{f:t.f,prevLine:t.prevLine,thisLine:t.thisLine,block:t.block,htmlState:t.htmlState&&e.copyState(r,t.htmlState),indentation:t.indentation,localMode:t.localMode,localState:t.localMode?e.copyState(t.localMode,t.localState):null,inline:t.inline,text:t.text,formatting:!1,linkText:t.linkText,linkTitle:t.linkTitle,linkHref:t.linkHref,code:t.code,em:t.em,strong:t.strong,strikethrough:t.strikethrough,emoji:t.emoji,header:t.header,setext:t.setext,hr:t.hr,taskList:t.taskList,list:t.list,listStack:t.listStack.slice(0),quote:t.quote,indentedCode:t.indentedCode,trailingSpace:t.trailingSpace,trailingSpaceNewLine:t.trailingSpaceNewLine,md_inside:t.md_inside,fencedEndRE:t.fencedEndRE}},token:function(e,t){if(t.formatting=!1,e!=t.thisLine.stream){if(t.header=0,t.hr=!1,e.match(/^\\s*$/,!0))return w(t),null;if(t.prevLine=t.thisLine,t.thisLine={stream:e},t.taskList=!1,t.trailingSpace=0,t.trailingSpaceNewLine=!1,!t.localState&&(t.f=t.block,t.f!=C)){var n=e.match(/^\\s*/,!0)[0].replace(/\\t/g,v).length;if(t.indentation=n,t.indentationDiff=null,n>0)return null}}return t.f(e,t)},innerMode:function(e){return e.block==C?{state:e.htmlState,mode:r}:e.localState?{state:e.localState,mode:e.localMode}:{state:e,mode:R}},indent:function(t,n,o){return t.block==C&&r.indent?r.indent(t.htmlState,n,o):t.localState&&t.localMode.indent?t.localMode.indent(t.localState,n,o):e.Pass},blankLine:w,getType:D,blockCommentStart:\"\\x3c!--\",blockCommentEnd:\"--\\x3e\",closeBrackets:\"()[]{}''\\\"\\\"``\",fold:\"markdown\"};return R}),\"xml\"),e.defineMIME(\"text/markdown\",\"markdown\"),e.defineMIME(\"text/x-markdown\",\"markdown\")}(n(4631),n(9589),n(2539))},2539:(e,t,n)=>{!function(e){\"use strict\";e.modeInfo=[{name:\"APL\",mime:\"text/apl\",mode:\"apl\",ext:[\"dyalog\",\"apl\"]},{name:\"PGP\",mimes:[\"application/pgp\",\"application/pgp-encrypted\",\"application/pgp-keys\",\"application/pgp-signature\"],mode:\"asciiarmor\",ext:[\"asc\",\"pgp\",\"sig\"]},{name:\"ASN.1\",mime:\"text/x-ttcn-asn\",mode:\"asn.1\",ext:[\"asn\",\"asn1\"]},{name:\"Asterisk\",mime:\"text/x-asterisk\",mode:\"asterisk\",file:/^extensions\\.conf$/i},{name:\"Brainfuck\",mime:\"text/x-brainfuck\",mode:\"brainfuck\",ext:[\"b\",\"bf\"]},{name:\"C\",mime:\"text/x-csrc\",mode:\"clike\",ext:[\"c\",\"h\",\"ino\"]},{name:\"C++\",mime:\"text/x-c++src\",mode:\"clike\",ext:[\"cpp\",\"c++\",\"cc\",\"cxx\",\"hpp\",\"h++\",\"hh\",\"hxx\"],alias:[\"cpp\"]},{name:\"Cobol\",mime:\"text/x-cobol\",mode:\"cobol\",ext:[\"cob\",\"cpy\",\"cbl\"]},{name:\"C#\",mime:\"text/x-csharp\",mode:\"clike\",ext:[\"cs\"],alias:[\"csharp\",\"cs\"]},{name:\"Clojure\",mime:\"text/x-clojure\",mode:\"clojure\",ext:[\"clj\",\"cljc\",\"cljx\"]},{name:\"ClojureScript\",mime:\"text/x-clojurescript\",mode:\"clojure\",ext:[\"cljs\"]},{name:\"Closure Stylesheets (GSS)\",mime:\"text/x-gss\",mode:\"css\",ext:[\"gss\"]},{name:\"CMake\",mime:\"text/x-cmake\",mode:\"cmake\",ext:[\"cmake\",\"cmake.in\"],file:/^CMakeLists\\.txt$/},{name:\"CoffeeScript\",mimes:[\"application/vnd.coffeescript\",\"text/coffeescript\",\"text/x-coffeescript\"],mode:\"coffeescript\",ext:[\"coffee\"],alias:[\"coffee\",\"coffee-script\"]},{name:\"Common Lisp\",mime:\"text/x-common-lisp\",mode:\"commonlisp\",ext:[\"cl\",\"lisp\",\"el\"],alias:[\"lisp\"]},{name:\"Cypher\",mime:\"application/x-cypher-query\",mode:\"cypher\",ext:[\"cyp\",\"cypher\"]},{name:\"Cython\",mime:\"text/x-cython\",mode:\"python\",ext:[\"pyx\",\"pxd\",\"pxi\"]},{name:\"Crystal\",mime:\"text/x-crystal\",mode:\"crystal\",ext:[\"cr\"]},{name:\"CSS\",mime:\"text/css\",mode:\"css\",ext:[\"css\"]},{name:\"CQL\",mime:\"text/x-cassandra\",mode:\"sql\",ext:[\"cql\"]},{name:\"D\",mime:\"text/x-d\",mode:\"d\",ext:[\"d\"]},{name:\"Dart\",mimes:[\"application/dart\",\"text/x-dart\"],mode:\"dart\",ext:[\"dart\"]},{name:\"diff\",mime:\"text/x-diff\",mode:\"diff\",ext:[\"diff\",\"patch\"]},{name:\"Django\",mime:\"text/x-django\",mode:\"django\"},{name:\"Dockerfile\",mime:\"text/x-dockerfile\",mode:\"dockerfile\",file:/^Dockerfile$/},{name:\"DTD\",mime:\"application/xml-dtd\",mode:\"dtd\",ext:[\"dtd\"]},{name:\"Dylan\",mime:\"text/x-dylan\",mode:\"dylan\",ext:[\"dylan\",\"dyl\",\"intr\"]},{name:\"EBNF\",mime:\"text/x-ebnf\",mode:\"ebnf\"},{name:\"ECL\",mime:\"text/x-ecl\",mode:\"ecl\",ext:[\"ecl\"]},{name:\"edn\",mime:\"application/edn\",mode:\"clojure\",ext:[\"edn\"]},{name:\"Eiffel\",mime:\"text/x-eiffel\",mode:\"eiffel\",ext:[\"e\"]},{name:\"Elm\",mime:\"text/x-elm\",mode:\"elm\",ext:[\"elm\"]},{name:\"Embedded JavaScript\",mime:\"application/x-ejs\",mode:\"htmlembedded\",ext:[\"ejs\"]},{name:\"Embedded Ruby\",mime:\"application/x-erb\",mode:\"htmlembedded\",ext:[\"erb\"]},{name:\"Erlang\",mime:\"text/x-erlang\",mode:\"erlang\",ext:[\"erl\"]},{name:\"Esper\",mime:\"text/x-esper\",mode:\"sql\"},{name:\"Factor\",mime:\"text/x-factor\",mode:\"factor\",ext:[\"factor\"]},{name:\"FCL\",mime:\"text/x-fcl\",mode:\"fcl\"},{name:\"Forth\",mime:\"text/x-forth\",mode:\"forth\",ext:[\"forth\",\"fth\",\"4th\"]},{name:\"Fortran\",mime:\"text/x-fortran\",mode:\"fortran\",ext:[\"f\",\"for\",\"f77\",\"f90\",\"f95\"]},{name:\"F#\",mime:\"text/x-fsharp\",mode:\"mllike\",ext:[\"fs\"],alias:[\"fsharp\"]},{name:\"Gas\",mime:\"text/x-gas\",mode:\"gas\",ext:[\"s\"]},{name:\"Gherkin\",mime:\"text/x-feature\",mode:\"gherkin\",ext:[\"feature\"]},{name:\"GitHub Flavored Markdown\",mime:\"text/x-gfm\",mode:\"gfm\",file:/^(readme|contributing|history)\\.md$/i},{name:\"Go\",mime:\"text/x-go\",mode:\"go\",ext:[\"go\"]},{name:\"Groovy\",mime:\"text/x-groovy\",mode:\"groovy\",ext:[\"groovy\",\"gradle\"],file:/^Jenkinsfile$/},{name:\"HAML\",mime:\"text/x-haml\",mode:\"haml\",ext:[\"haml\"]},{name:\"Haskell\",mime:\"text/x-haskell\",mode:\"haskell\",ext:[\"hs\"]},{name:\"Haskell (Literate)\",mime:\"text/x-literate-haskell\",mode:\"haskell-literate\",ext:[\"lhs\"]},{name:\"Haxe\",mime:\"text/x-haxe\",mode:\"haxe\",ext:[\"hx\"]},{name:\"HXML\",mime:\"text/x-hxml\",mode:\"haxe\",ext:[\"hxml\"]},{name:\"ASP.NET\",mime:\"application/x-aspx\",mode:\"htmlembedded\",ext:[\"aspx\"],alias:[\"asp\",\"aspx\"]},{name:\"HTML\",mime:\"text/html\",mode:\"htmlmixed\",ext:[\"html\",\"htm\",\"handlebars\",\"hbs\"],alias:[\"xhtml\"]},{name:\"HTTP\",mime:\"message/http\",mode:\"http\"},{name:\"IDL\",mime:\"text/x-idl\",mode:\"idl\",ext:[\"pro\"]},{name:\"Pug\",mime:\"text/x-pug\",mode:\"pug\",ext:[\"jade\",\"pug\"],alias:[\"jade\"]},{name:\"Java\",mime:\"text/x-java\",mode:\"clike\",ext:[\"java\"]},{name:\"Java Server Pages\",mime:\"application/x-jsp\",mode:\"htmlembedded\",ext:[\"jsp\"],alias:[\"jsp\"]},{name:\"JavaScript\",mimes:[\"text/javascript\",\"text/ecmascript\",\"application/javascript\",\"application/x-javascript\",\"application/ecmascript\"],mode:\"javascript\",ext:[\"js\"],alias:[\"ecmascript\",\"js\",\"node\"]},{name:\"JSON\",mimes:[\"application/json\",\"application/x-json\"],mode:\"javascript\",ext:[\"json\",\"map\"],alias:[\"json5\"]},{name:\"JSON-LD\",mime:\"application/ld+json\",mode:\"javascript\",ext:[\"jsonld\"],alias:[\"jsonld\"]},{name:\"JSX\",mime:\"text/jsx\",mode:\"jsx\",ext:[\"jsx\"]},{name:\"Jinja2\",mime:\"text/jinja2\",mode:\"jinja2\",ext:[\"j2\",\"jinja\",\"jinja2\"]},{name:\"Julia\",mime:\"text/x-julia\",mode:\"julia\",ext:[\"jl\"],alias:[\"jl\"]},{name:\"Kotlin\",mime:\"text/x-kotlin\",mode:\"clike\",ext:[\"kt\"]},{name:\"LESS\",mime:\"text/x-less\",mode:\"css\",ext:[\"less\"]},{name:\"LiveScript\",mime:\"text/x-livescript\",mode:\"livescript\",ext:[\"ls\"],alias:[\"ls\"]},{name:\"Lua\",mime:\"text/x-lua\",mode:\"lua\",ext:[\"lua\"]},{name:\"Markdown\",mime:\"text/x-markdown\",mode:\"markdown\",ext:[\"markdown\",\"md\",\"mkd\"]},{name:\"mIRC\",mime:\"text/mirc\",mode:\"mirc\"},{name:\"MariaDB SQL\",mime:\"text/x-mariadb\",mode:\"sql\"},{name:\"Mathematica\",mime:\"text/x-mathematica\",mode:\"mathematica\",ext:[\"m\",\"nb\",\"wl\",\"wls\"]},{name:\"Modelica\",mime:\"text/x-modelica\",mode:\"modelica\",ext:[\"mo\"]},{name:\"MUMPS\",mime:\"text/x-mumps\",mode:\"mumps\",ext:[\"mps\"]},{name:\"MS SQL\",mime:\"text/x-mssql\",mode:\"sql\"},{name:\"mbox\",mime:\"application/mbox\",mode:\"mbox\",ext:[\"mbox\"]},{name:\"MySQL\",mime:\"text/x-mysql\",mode:\"sql\"},{name:\"Nginx\",mime:\"text/x-nginx-conf\",mode:\"nginx\",file:/nginx.*\\.conf$/i},{name:\"NSIS\",mime:\"text/x-nsis\",mode:\"nsis\",ext:[\"nsh\",\"nsi\"]},{name:\"NTriples\",mimes:[\"application/n-triples\",\"application/n-quads\",\"text/n-triples\"],mode:\"ntriples\",ext:[\"nt\",\"nq\"]},{name:\"Objective-C\",mime:\"text/x-objectivec\",mode:\"clike\",ext:[\"m\"],alias:[\"objective-c\",\"objc\"]},{name:\"Objective-C++\",mime:\"text/x-objectivec++\",mode:\"clike\",ext:[\"mm\"],alias:[\"objective-c++\",\"objc++\"]},{name:\"OCaml\",mime:\"text/x-ocaml\",mode:\"mllike\",ext:[\"ml\",\"mli\",\"mll\",\"mly\"]},{name:\"Octave\",mime:\"text/x-octave\",mode:\"octave\",ext:[\"m\"]},{name:\"Oz\",mime:\"text/x-oz\",mode:\"oz\",ext:[\"oz\"]},{name:\"Pascal\",mime:\"text/x-pascal\",mode:\"pascal\",ext:[\"p\",\"pas\"]},{name:\"PEG.js\",mime:\"null\",mode:\"pegjs\",ext:[\"jsonld\"]},{name:\"Perl\",mime:\"text/x-perl\",mode:\"perl\",ext:[\"pl\",\"pm\"]},{name:\"PHP\",mimes:[\"text/x-php\",\"application/x-httpd-php\",\"application/x-httpd-php-open\"],mode:\"php\",ext:[\"php\",\"php3\",\"php4\",\"php5\",\"php7\",\"phtml\"]},{name:\"Pig\",mime:\"text/x-pig\",mode:\"pig\",ext:[\"pig\"]},{name:\"Plain Text\",mime:\"text/plain\",mode:\"null\",ext:[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\"]},{name:\"PLSQL\",mime:\"text/x-plsql\",mode:\"sql\",ext:[\"pls\"]},{name:\"PostgreSQL\",mime:\"text/x-pgsql\",mode:\"sql\"},{name:\"PowerShell\",mime:\"application/x-powershell\",mode:\"powershell\",ext:[\"ps1\",\"psd1\",\"psm1\"]},{name:\"Properties files\",mime:\"text/x-properties\",mode:\"properties\",ext:[\"properties\",\"ini\",\"in\"],alias:[\"ini\",\"properties\"]},{name:\"ProtoBuf\",mime:\"text/x-protobuf\",mode:\"protobuf\",ext:[\"proto\"]},{name:\"Python\",mime:\"text/x-python\",mode:\"python\",ext:[\"BUILD\",\"bzl\",\"py\",\"pyw\"],file:/^(BUCK|BUILD)$/},{name:\"Puppet\",mime:\"text/x-puppet\",mode:\"puppet\",ext:[\"pp\"]},{name:\"Q\",mime:\"text/x-q\",mode:\"q\",ext:[\"q\"]},{name:\"R\",mime:\"text/x-rsrc\",mode:\"r\",ext:[\"r\",\"R\"],alias:[\"rscript\"]},{name:\"reStructuredText\",mime:\"text/x-rst\",mode:\"rst\",ext:[\"rst\"],alias:[\"rst\"]},{name:\"RPM Changes\",mime:\"text/x-rpm-changes\",mode:\"rpm\"},{name:\"RPM Spec\",mime:\"text/x-rpm-spec\",mode:\"rpm\",ext:[\"spec\"]},{name:\"Ruby\",mime:\"text/x-ruby\",mode:\"ruby\",ext:[\"rb\"],alias:[\"jruby\",\"macruby\",\"rake\",\"rb\",\"rbx\"]},{name:\"Rust\",mime:\"text/x-rustsrc\",mode:\"rust\",ext:[\"rs\"]},{name:\"SAS\",mime:\"text/x-sas\",mode:\"sas\",ext:[\"sas\"]},{name:\"Sass\",mime:\"text/x-sass\",mode:\"sass\",ext:[\"sass\"]},{name:\"Scala\",mime:\"text/x-scala\",mode:\"clike\",ext:[\"scala\"]},{name:\"Scheme\",mime:\"text/x-scheme\",mode:\"scheme\",ext:[\"scm\",\"ss\"]},{name:\"SCSS\",mime:\"text/x-scss\",mode:\"css\",ext:[\"scss\"]},{name:\"Shell\",mimes:[\"text/x-sh\",\"application/x-sh\"],mode:\"shell\",ext:[\"sh\",\"ksh\",\"bash\"],alias:[\"bash\",\"sh\",\"zsh\"],file:/^PKGBUILD$/},{name:\"Sieve\",mime:\"application/sieve\",mode:\"sieve\",ext:[\"siv\",\"sieve\"]},{name:\"Slim\",mimes:[\"text/x-slim\",\"application/x-slim\"],mode:\"slim\",ext:[\"slim\"]},{name:\"Smalltalk\",mime:\"text/x-stsrc\",mode:\"smalltalk\",ext:[\"st\"]},{name:\"Smarty\",mime:\"text/x-smarty\",mode:\"smarty\",ext:[\"tpl\"]},{name:\"Solr\",mime:\"text/x-solr\",mode:\"solr\"},{name:\"SML\",mime:\"text/x-sml\",mode:\"mllike\",ext:[\"sml\",\"sig\",\"fun\",\"smackspec\"]},{name:\"Soy\",mime:\"text/x-soy\",mode:\"soy\",ext:[\"soy\"],alias:[\"closure template\"]},{name:\"SPARQL\",mime:\"application/sparql-query\",mode:\"sparql\",ext:[\"rq\",\"sparql\"],alias:[\"sparul\"]},{name:\"Spreadsheet\",mime:\"text/x-spreadsheet\",mode:\"spreadsheet\",alias:[\"excel\",\"formula\"]},{name:\"SQL\",mime:\"text/x-sql\",mode:\"sql\",ext:[\"sql\"]},{name:\"SQLite\",mime:\"text/x-sqlite\",mode:\"sql\"},{name:\"Squirrel\",mime:\"text/x-squirrel\",mode:\"clike\",ext:[\"nut\"]},{name:\"Stylus\",mime:\"text/x-styl\",mode:\"stylus\",ext:[\"styl\"]},{name:\"Swift\",mime:\"text/x-swift\",mode:\"swift\",ext:[\"swift\"]},{name:\"sTeX\",mime:\"text/x-stex\",mode:\"stex\"},{name:\"LaTeX\",mime:\"text/x-latex\",mode:\"stex\",ext:[\"text\",\"ltx\",\"tex\"],alias:[\"tex\"]},{name:\"SystemVerilog\",mime:\"text/x-systemverilog\",mode:\"verilog\",ext:[\"v\",\"sv\",\"svh\"]},{name:\"Tcl\",mime:\"text/x-tcl\",mode:\"tcl\",ext:[\"tcl\"]},{name:\"Textile\",mime:\"text/x-textile\",mode:\"textile\",ext:[\"textile\"]},{name:\"TiddlyWiki\",mime:\"text/x-tiddlywiki\",mode:\"tiddlywiki\"},{name:\"Tiki wiki\",mime:\"text/tiki\",mode:\"tiki\"},{name:\"TOML\",mime:\"text/x-toml\",mode:\"toml\",ext:[\"toml\"]},{name:\"Tornado\",mime:\"text/x-tornado\",mode:\"tornado\"},{name:\"troff\",mime:\"text/troff\",mode:\"troff\",ext:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"]},{name:\"TTCN\",mime:\"text/x-ttcn\",mode:\"ttcn\",ext:[\"ttcn\",\"ttcn3\",\"ttcnpp\"]},{name:\"TTCN_CFG\",mime:\"text/x-ttcn-cfg\",mode:\"ttcn-cfg\",ext:[\"cfg\"]},{name:\"Turtle\",mime:\"text/turtle\",mode:\"turtle\",ext:[\"ttl\"]},{name:\"TypeScript\",mime:\"application/typescript\",mode:\"javascript\",ext:[\"ts\"],alias:[\"ts\"]},{name:\"TypeScript-JSX\",mime:\"text/typescript-jsx\",mode:\"jsx\",ext:[\"tsx\"],alias:[\"tsx\"]},{name:\"Twig\",mime:\"text/x-twig\",mode:\"twig\"},{name:\"Web IDL\",mime:\"text/x-webidl\",mode:\"webidl\",ext:[\"webidl\"]},{name:\"VB.NET\",mime:\"text/x-vb\",mode:\"vb\",ext:[\"vb\"]},{name:\"VBScript\",mime:\"text/vbscript\",mode:\"vbscript\",ext:[\"vbs\"]},{name:\"Velocity\",mime:\"text/velocity\",mode:\"velocity\",ext:[\"vtl\"]},{name:\"Verilog\",mime:\"text/x-verilog\",mode:\"verilog\",ext:[\"v\"]},{name:\"VHDL\",mime:\"text/x-vhdl\",mode:\"vhdl\",ext:[\"vhd\",\"vhdl\"]},{name:\"Vue.js Component\",mimes:[\"script/x-vue\",\"text/x-vue\"],mode:\"vue\",ext:[\"vue\"]},{name:\"XML\",mimes:[\"application/xml\",\"text/xml\"],mode:\"xml\",ext:[\"xml\",\"xsl\",\"xsd\",\"svg\"],alias:[\"rss\",\"wsdl\",\"xsd\"]},{name:\"XQuery\",mime:\"application/xquery\",mode:\"xquery\",ext:[\"xy\",\"xquery\"]},{name:\"Yacas\",mime:\"text/x-yacas\",mode:\"yacas\",ext:[\"ys\"]},{name:\"YAML\",mimes:[\"text/x-yaml\",\"text/yaml\"],mode:\"yaml\",ext:[\"yaml\",\"yml\"],alias:[\"yml\"]},{name:\"Z80\",mime:\"text/x-z80\",mode:\"z80\",ext:[\"z80\"]},{name:\"mscgen\",mime:\"text/x-mscgen\",mode:\"mscgen\",ext:[\"mscgen\",\"mscin\",\"msc\"]},{name:\"xu\",mime:\"text/x-xu\",mode:\"mscgen\",ext:[\"xu\"]},{name:\"msgenny\",mime:\"text/x-msgenny\",mode:\"mscgen\",ext:[\"msgenny\"]},{name:\"WebAssembly\",mime:\"text/webassembly\",mode:\"wast\",ext:[\"wat\",\"wast\"]}];for(var t=0;t<e.modeInfo.length;t++){var n=e.modeInfo[t];n.mimes&&(n.mime=n.mimes[0])}e.findModeByMIME=function(t){t=t.toLowerCase();for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.mime==t)return r;if(r.mimes)for(var o=0;o<r.mimes.length;o++)if(r.mimes[o]==t)return r}return/\\+xml$/.test(t)?e.findModeByMIME(\"application/xml\"):/\\+json$/.test(t)?e.findModeByMIME(\"application/json\"):void 0},e.findModeByExtension=function(t){t=t.toLowerCase();for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.ext)for(var o=0;o<r.ext.length;o++)if(r.ext[o]==t)return r}},e.findModeByFileName=function(t){for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.file&&r.file.test(t))return r}var o=t.lastIndexOf(\".\"),i=o>-1&&t.substring(o+1,t.length);if(i)return e.findModeByExtension(i)},e.findModeByName=function(t){t=t.toLowerCase();for(var n=0;n<e.modeInfo.length;n++){var r=e.modeInfo[n];if(r.name.toLowerCase()==t)return r;if(r.alias)for(var o=0;o<r.alias.length;o++)if(r.alias[o].toLowerCase()==t)return r}}}(n(4631))},9589:(e,t,n)=>{!function(e){\"use strict\";var t={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};e.defineMode(\"xml\",(function(r,o){var i,s,a=r.indentUnit,l={},c=o.htmlMode?t:n;for(var u in c)l[u]=c[u];for(var u in o)l[u]=o[u];function d(e,t){function n(n){return t.tokenize=n,n(e,t)}var r=e.next();return\"<\"==r?e.eat(\"!\")?e.eat(\"[\")?e.match(\"CDATA[\")?n(f(\"atom\",\"]]>\")):null:e.match(\"--\")?n(f(\"comment\",\"--\\x3e\")):e.match(\"DOCTYPE\",!0,!0)?(e.eatWhile(/[\\w\\._\\-]/),n(p(1))):null:e.eat(\"?\")?(e.eatWhile(/[\\w\\._\\-]/),t.tokenize=f(\"meta\",\"?>\"),\"meta\"):(i=e.eat(\"/\")?\"closeTag\":\"openTag\",t.tokenize=h,\"tag bracket\"):\"&\"==r?(e.eat(\"#\")?e.eat(\"x\")?e.eatWhile(/[a-fA-F\\d]/)&&e.eat(\";\"):e.eatWhile(/[\\d]/)&&e.eat(\";\"):e.eatWhile(/[\\w\\.\\-:]/)&&e.eat(\";\"))?\"atom\":\"error\":(e.eatWhile(/[^&<]/),null)}function h(e,t){var n=e.next();if(\">\"==n||\"/\"==n&&e.eat(\">\"))return t.tokenize=d,i=\">\"==n?\"endTag\":\"selfcloseTag\",\"tag bracket\";if(\"=\"==n)return i=\"equals\",null;if(\"<\"==n){t.tokenize=d,t.state=_,t.tagName=t.tagStart=null;var r=t.tokenize(e,t);return r?r+\" tag error\":\"tag error\"}return/[\\'\\\"]/.test(n)?(t.tokenize=m(n),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/),\"word\")}function m(e){var t=function(t,n){for(;!t.eol();)if(t.next()==e){n.tokenize=h;break}return\"string\"};return t.isInAttribute=!0,t}function f(e,t){return function(n,r){for(;!n.eol();){if(n.match(t)){r.tokenize=d;break}n.next()}return e}}function p(e){return function(t,n){for(var r;null!=(r=t.next());){if(\"<\"==r)return n.tokenize=p(e+1),n.tokenize(t,n);if(\">\"==r){if(1==e){n.tokenize=d;break}return n.tokenize=p(e-1),n.tokenize(t,n)}}return\"meta\"}}function g(e){return e&&e.toLowerCase()}function v(e,t,n){this.prev=e.context,this.tagName=t||\"\",this.indent=e.indented,this.startOfLine=n,(l.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function y(e){e.context&&(e.context=e.context.prev)}function b(e,t){for(var n;;){if(!e.context)return;if(n=e.context.tagName,!l.contextGrabbers.hasOwnProperty(g(n))||!l.contextGrabbers[g(n)].hasOwnProperty(g(t)))return;y(e)}}function _(e,t,n){return\"openTag\"==e?(n.tagStart=t.column(),w):\"closeTag\"==e?x:_}function w(e,t,n){return\"word\"==e?(n.tagName=t.current(),s=\"tag\",D):l.allowMissingTagName&&\"endTag\"==e?(s=\"tag bracket\",D(e,t,n)):(s=\"error\",w)}function x(e,t,n){if(\"word\"==e){var r=t.current();return n.context&&n.context.tagName!=r&&l.implicitlyClosed.hasOwnProperty(g(n.context.tagName))&&y(n),n.context&&n.context.tagName==r||!1===l.matchClosing?(s=\"tag\",C):(s=\"tag error\",k)}return l.allowMissingTagName&&\"endTag\"==e?(s=\"tag bracket\",C(e,t,n)):(s=\"error\",k)}function C(e,t,n){return\"endTag\"!=e?(s=\"error\",C):(y(n),_)}function k(e,t,n){return s=\"error\",C(e,t,n)}function D(e,t,n){if(\"word\"==e)return s=\"attribute\",S;if(\"endTag\"==e||\"selfcloseTag\"==e){var r=n.tagName,o=n.tagStart;return n.tagName=n.tagStart=null,\"selfcloseTag\"==e||l.autoSelfClosers.hasOwnProperty(g(r))?b(n,r):(b(n,r),n.context=new v(n,r,o==n.indented)),_}return s=\"error\",D}function S(e,t,n){return\"equals\"==e?A:(l.allowMissing||(s=\"error\"),D(e,t,n))}function A(e,t,n){return\"string\"==e?M:\"word\"==e&&l.allowUnquoted?(s=\"string\",D):(s=\"error\",D(e,t,n))}function M(e,t,n){return\"string\"==e?M:D(e,t,n)}return d.isInText=!0,{startState:function(e){var t={tokenize:d,state:_,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;i=null;var n=t.tokenize(e,t);return(n||i)&&\"comment\"!=n&&(s=null,t.state=t.state(i||n,e,t),s&&(n=\"error\"==s?n+\" error\":s)),n},indent:function(t,n,r){var o=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+a;if(o&&o.noIndent)return e.Pass;if(t.tokenize!=h&&t.tokenize!=d)return r?r.match(/^(\\s*)/)[0].length:0;if(t.tagName)return!1!==l.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+a*(l.multilineTagIndentFactor||1);if(l.alignCDATA&&/<!\\[CDATA\\[/.test(n))return 0;var i=n&&/^<(\\/)?([\\w_:\\.-]*)/.exec(n);if(i&&i[1])for(;o;){if(o.tagName==i[2]){o=o.prev;break}if(!l.implicitlyClosed.hasOwnProperty(g(o.tagName)))break;o=o.prev}else if(i)for(;o;){var s=l.contextGrabbers[g(o.tagName)];if(!s||!s.hasOwnProperty(g(i[2])))break;o=o.prev}for(;o&&o.prev&&!o.startOfLine;)o=o.prev;return o?o.indent+a:t.baseIndent||0},electricInput:/<\\/[\\s\\w:]+>$/,blockCommentStart:\"\\x3c!--\",blockCommentEnd:\"--\\x3e\",configuration:l.htmlMode?\"html\":\"xml\",helperType:l.htmlMode?\"html\":\"xml\",skipAttribute:function(e){e.state==A&&(e.state=D)},xmlCurrentTag:function(e){return e.tagName?{name:e.tagName,close:\"closeTag\"==e.type}:null},xmlCurrentContext:function(e){for(var t=[],n=e.context;n;n=n.prev)t.push(n.tagName);return t.reverse()}}})),e.defineMIME(\"text/xml\",\"xml\"),e.defineMIME(\"application/xml\",\"xml\"),e.mimeModes.hasOwnProperty(\"text/html\")||e.defineMIME(\"text/html\",{name:\"xml\",htmlMode:!0})}(n(4631))},3129:function(e){e.exports=function(){\"use strict\";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?e(Object(r),!0).forEach((function(e){s(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}function r(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function i(e,t,n){return t&&o(e.prototype,t),n&&o(e,n),e}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e){return l(e)||c(e)||u(e)||h()}function l(e){if(Array.isArray(e))return d(e)}function c(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}function u(e,t){if(e){if(\"string\"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function h(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var m=\"undefined\"!=typeof window&&void 0!==window.document,f=m?window:{},p=!(!m||!f.document.documentElement)&&\"ontouchstart\"in f.document.documentElement,g=!!m&&\"PointerEvent\"in f,v=\"cropper\",y=\"all\",b=\"crop\",_=\"move\",w=\"zoom\",x=\"e\",C=\"w\",k=\"s\",D=\"n\",S=\"ne\",A=\"nw\",M=\"se\",L=\"sw\",E=\"\".concat(v,\"-crop\"),T=\"\".concat(v,\"-disabled\"),F=\"\".concat(v,\"-hidden\"),O=\"\".concat(v,\"-hide\"),B=\"\".concat(v,\"-invisible\"),R=\"\".concat(v,\"-modal\"),$=\"\".concat(v,\"-move\"),N=\"\".concat(v,\"Action\"),Y=\"\".concat(v,\"Preview\"),P=\"crop\",I=\"move\",H=\"none\",j=\"crop\",W=\"cropend\",z=\"cropmove\",U=\"cropstart\",V=\"dblclick\",q=p?\"touchstart\":\"mousedown\",G=p?\"touchmove\":\"mousemove\",K=p?\"touchend touchcancel\":\"mouseup\",X=g?\"pointerdown\":q,J=g?\"pointermove\":G,Q=g?\"pointerup pointercancel\":K,Z=\"ready\",ee=\"resize\",te=\"wheel\",ne=\"zoom\",re=\"image/jpeg\",oe=/^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/,ie=/^data:/,se=/^data:image\\/jpeg;base64,/,ae=/^img|canvas$/i,le=200,ce=100,ue={viewMode:0,dragMode:P,initialAspectRatio:NaN,aspectRatio:NaN,data:null,preview:\"\",responsive:!0,restore:!0,checkCrossOrigin:!0,checkOrientation:!0,modal:!0,guides:!0,center:!0,highlight:!0,background:!0,autoCrop:!0,autoCropArea:.8,movable:!0,rotatable:!0,scalable:!0,zoomable:!0,zoomOnTouch:!0,zoomOnWheel:!0,wheelZoomRatio:.1,cropBoxMovable:!0,cropBoxResizable:!0,toggleDragModeOnDblclick:!0,minCanvasWidth:0,minCanvasHeight:0,minCropBoxWidth:0,minCropBoxHeight:0,minContainerWidth:le,minContainerHeight:ce,ready:null,cropstart:null,cropmove:null,cropend:null,crop:null,zoom:null},de='<div class=\"cropper-container\" touch-action=\"none\"><div class=\"cropper-wrap-box\"><div class=\"cropper-canvas\"></div></div><div class=\"cropper-drag-box\"></div><div class=\"cropper-crop-box\"><span class=\"cropper-view-box\"></span><span class=\"cropper-dashed dashed-h\"></span><span class=\"cropper-dashed dashed-v\"></span><span class=\"cropper-center\"></span><span class=\"cropper-face\"></span><span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span><span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span><span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span><span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span><span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span><span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span><span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span><span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span><span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span><span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span><span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span><span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span></div></div>',he=Number.isNaN||f.isNaN;function me(e){return\"number\"==typeof e&&!he(e)}var fe=function(e){return e>0&&e<1/0};function pe(e){return void 0===e}function ge(e){return\"object\"===n(e)&&null!==e}var ve=Object.prototype.hasOwnProperty;function ye(e){if(!ge(e))return!1;try{var t=e.constructor,n=t.prototype;return t&&n&&ve.call(n,\"isPrototypeOf\")}catch(e){return!1}}function be(e){return\"function\"==typeof e}var _e=Array.prototype.slice;function we(e){return Array.from?Array.from(e):_e.call(e)}function xe(e,t){return e&&be(t)&&(Array.isArray(e)||me(e.length)?we(e).forEach((function(n,r){t.call(e,n,r,e)})):ge(e)&&Object.keys(e).forEach((function(n){t.call(e,e[n],n,e)}))),e}var Ce=Object.assign||function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return ge(e)&&n.length>0&&n.forEach((function(t){ge(t)&&Object.keys(t).forEach((function(n){e[n]=t[n]}))})),e},ke=/\\.\\d*(?:0|9){12}\\d*$/;function De(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e11;return ke.test(e)?Math.round(e*t)/t:e}var Se=/^width|height|left|top|marginLeft|marginTop$/;function Ae(e,t){var n=e.style;xe(t,(function(e,t){Se.test(t)&&me(e)&&(e=\"\".concat(e,\"px\")),n[t]=e}))}function Me(e,t){return e.classList?e.classList.contains(t):e.className.indexOf(t)>-1}function Le(e,t){if(t)if(me(e.length))xe(e,(function(e){Le(e,t)}));else if(e.classList)e.classList.add(t);else{var n=e.className.trim();n?n.indexOf(t)<0&&(e.className=\"\".concat(n,\" \").concat(t)):e.className=t}}function Ee(e,t){t&&(me(e.length)?xe(e,(function(e){Ee(e,t)})):e.classList?e.classList.remove(t):e.className.indexOf(t)>=0&&(e.className=e.className.replace(t,\"\")))}function Te(e,t,n){t&&(me(e.length)?xe(e,(function(e){Te(e,t,n)})):n?Le(e,t):Ee(e,t))}var Fe=/([a-z\\d])([A-Z])/g;function Oe(e){return e.replace(Fe,\"$1-$2\").toLowerCase()}function Be(e,t){return ge(e[t])?e[t]:e.dataset?e.dataset[t]:e.getAttribute(\"data-\".concat(Oe(t)))}function Re(e,t,n){ge(n)?e[t]=n:e.dataset?e.dataset[t]=n:e.setAttribute(\"data-\".concat(Oe(t)),n)}function $e(e,t){if(ge(e[t]))try{delete e[t]}catch(n){e[t]=void 0}else if(e.dataset)try{delete e.dataset[t]}catch(n){e.dataset[t]=void 0}else e.removeAttribute(\"data-\".concat(Oe(t)))}var Ne=/\\s\\s*/,Ye=function(){var e=!1;if(m){var t=!1,n=function(){},r=Object.defineProperty({},\"once\",{get:function(){return e=!0,t},set:function(e){t=e}});f.addEventListener(\"test\",n,r),f.removeEventListener(\"test\",n,r)}return e}();function Pe(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=n;t.trim().split(Ne).forEach((function(t){if(!Ye){var i=e.listeners;i&&i[t]&&i[t][n]&&(o=i[t][n],delete i[t][n],0===Object.keys(i[t]).length&&delete i[t],0===Object.keys(i).length&&delete e.listeners)}e.removeEventListener(t,o,r)}))}function Ie(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=n;t.trim().split(Ne).forEach((function(t){if(r.once&&!Ye){var i=e.listeners,s=void 0===i?{}:i;o=function(){delete s[t][n],e.removeEventListener(t,o,r);for(var i=arguments.length,a=new Array(i),l=0;l<i;l++)a[l]=arguments[l];n.apply(e,a)},s[t]||(s[t]={}),s[t][n]&&e.removeEventListener(t,s[t][n],r),s[t][n]=o,e.listeners=s}e.addEventListener(t,o,r)}))}function He(e,t,n){var r;return be(Event)&&be(CustomEvent)?r=new CustomEvent(t,{detail:n,bubbles:!0,cancelable:!0}):(r=document.createEvent(\"CustomEvent\")).initCustomEvent(t,!0,!0,n),e.dispatchEvent(r)}function je(e){var t=e.getBoundingClientRect();return{left:t.left+(window.pageXOffset-document.documentElement.clientLeft),top:t.top+(window.pageYOffset-document.documentElement.clientTop)}}var We=f.location,ze=/^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;function Ue(e){var t=e.match(ze);return null!==t&&(t[1]!==We.protocol||t[2]!==We.hostname||t[3]!==We.port)}function Ve(e){var t=\"timestamp=\".concat((new Date).getTime());return e+(-1===e.indexOf(\"?\")?\"?\":\"&\")+t}function qe(e){var t=e.rotate,n=e.scaleX,r=e.scaleY,o=e.translateX,i=e.translateY,s=[];me(o)&&0!==o&&s.push(\"translateX(\".concat(o,\"px)\")),me(i)&&0!==i&&s.push(\"translateY(\".concat(i,\"px)\")),me(t)&&0!==t&&s.push(\"rotate(\".concat(t,\"deg)\")),me(n)&&1!==n&&s.push(\"scaleX(\".concat(n,\")\")),me(r)&&1!==r&&s.push(\"scaleY(\".concat(r,\")\"));var a=s.length?s.join(\" \"):\"none\";return{WebkitTransform:a,msTransform:a,transform:a}}function Ge(e){var n=t({},e),r=0;return xe(e,(function(e,t){delete n[t],xe(n,(function(t){var n=Math.abs(e.startX-t.startX),o=Math.abs(e.startY-t.startY),i=Math.abs(e.endX-t.endX),s=Math.abs(e.endY-t.endY),a=Math.sqrt(n*n+o*o),l=(Math.sqrt(i*i+s*s)-a)/a;Math.abs(l)>Math.abs(r)&&(r=l)}))})),r}function Ke(e,n){var r=e.pageX,o=e.pageY,i={endX:r,endY:o};return n?i:t({startX:r,startY:o},i)}function Xe(e){var t=0,n=0,r=0;return xe(e,(function(e){var o=e.startX,i=e.startY;t+=o,n+=i,r+=1})),{pageX:t/=r,pageY:n/=r}}function Je(e){var t=e.aspectRatio,n=e.height,r=e.width,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"contain\",i=fe(r),s=fe(n);if(i&&s){var a=n*t;\"contain\"===o&&a>r||\"cover\"===o&&a<r?n=r/t:r=n*t}else i?n=r/t:s&&(r=n*t);return{width:r,height:n}}function Qe(e){var t=e.width,n=e.height,r=e.degree;if(90==(r=Math.abs(r)%180))return{width:n,height:t};var o=r%90*Math.PI/180,i=Math.sin(o),s=Math.cos(o),a=t*s+n*i,l=t*i+n*s;return r>90?{width:l,height:a}:{width:a,height:l}}function Ze(e,t,n,r){var o=t.aspectRatio,i=t.naturalWidth,s=t.naturalHeight,l=t.rotate,c=void 0===l?0:l,u=t.scaleX,d=void 0===u?1:u,h=t.scaleY,m=void 0===h?1:h,f=n.aspectRatio,p=n.naturalWidth,g=n.naturalHeight,v=r.fillColor,y=void 0===v?\"transparent\":v,b=r.imageSmoothingEnabled,_=void 0===b||b,w=r.imageSmoothingQuality,x=void 0===w?\"low\":w,C=r.maxWidth,k=void 0===C?1/0:C,D=r.maxHeight,S=void 0===D?1/0:D,A=r.minWidth,M=void 0===A?0:A,L=r.minHeight,E=void 0===L?0:L,T=document.createElement(\"canvas\"),F=T.getContext(\"2d\"),O=Je({aspectRatio:f,width:k,height:S}),B=Je({aspectRatio:f,width:M,height:E},\"cover\"),R=Math.min(O.width,Math.max(B.width,p)),$=Math.min(O.height,Math.max(B.height,g)),N=Je({aspectRatio:o,width:k,height:S}),Y=Je({aspectRatio:o,width:M,height:E},\"cover\"),P=Math.min(N.width,Math.max(Y.width,i)),I=Math.min(N.height,Math.max(Y.height,s)),H=[-P/2,-I/2,P,I];return T.width=De(R),T.height=De($),F.fillStyle=y,F.fillRect(0,0,R,$),F.save(),F.translate(R/2,$/2),F.rotate(c*Math.PI/180),F.scale(d,m),F.imageSmoothingEnabled=_,F.imageSmoothingQuality=x,F.drawImage.apply(F,[e].concat(a(H.map((function(e){return Math.floor(De(e))}))))),F.restore(),T}var et=String.fromCharCode;function tt(e,t,n){var r=\"\";n+=t;for(var o=t;o<n;o+=1)r+=et(e.getUint8(o));return r}var nt=/^data:.*,/;function rt(e){var t=e.replace(nt,\"\"),n=atob(t),r=new ArrayBuffer(n.length),o=new Uint8Array(r);return xe(o,(function(e,t){o[t]=n.charCodeAt(t)})),r}function ot(e,t){for(var n=[],r=8192,o=new Uint8Array(e);o.length>0;)n.push(et.apply(null,we(o.subarray(0,r)))),o=o.subarray(r);return\"data:\".concat(t,\";base64,\").concat(btoa(n.join(\"\")))}function it(e){var t,n=new DataView(e);try{var r,o,i;if(255===n.getUint8(0)&&216===n.getUint8(1))for(var s=n.byteLength,a=2;a+1<s;){if(255===n.getUint8(a)&&225===n.getUint8(a+1)){o=a;break}a+=1}if(o){var l=o+10;if(\"Exif\"===tt(n,o+4,4)){var c=n.getUint16(l);if(((r=18761===c)||19789===c)&&42===n.getUint16(l+2,r)){var u=n.getUint32(l+4,r);u>=8&&(i=l+u)}}}if(i){var d,h,m=n.getUint16(i,r);for(h=0;h<m;h+=1)if(d=i+12*h+2,274===n.getUint16(d,r)){d+=8,t=n.getUint16(d,r),n.setUint16(d,1,r);break}}}catch(e){t=1}return t}function st(e){var t=0,n=1,r=1;switch(e){case 2:n=-1;break;case 3:t=-180;break;case 4:r=-1;break;case 5:t=90,r=-1;break;case 6:t=90;break;case 7:t=90,n=-1;break;case 8:t=-90}return{rotate:t,scaleX:n,scaleY:r}}var at={render:function(){this.initContainer(),this.initCanvas(),this.initCropBox(),this.renderCanvas(),this.cropped&&this.renderCropBox()},initContainer:function(){var e=this.element,t=this.options,n=this.container,r=this.cropper,o=Number(t.minContainerWidth),i=Number(t.minContainerHeight);Le(r,F),Ee(e,F);var s={width:Math.max(n.offsetWidth,o>=0?o:le),height:Math.max(n.offsetHeight,i>=0?i:ce)};this.containerData=s,Ae(r,{width:s.width,height:s.height}),Le(e,F),Ee(r,F)},initCanvas:function(){var e=this.containerData,t=this.imageData,n=this.options.viewMode,r=Math.abs(t.rotate)%180==90,o=r?t.naturalHeight:t.naturalWidth,i=r?t.naturalWidth:t.naturalHeight,s=o/i,a=e.width,l=e.height;e.height*s>e.width?3===n?a=e.height*s:l=e.width/s:3===n?l=e.width/s:a=e.height*s;var c={aspectRatio:s,naturalWidth:o,naturalHeight:i,width:a,height:l};this.canvasData=c,this.limited=1===n||2===n,this.limitCanvas(!0,!0),c.width=Math.min(Math.max(c.width,c.minWidth),c.maxWidth),c.height=Math.min(Math.max(c.height,c.minHeight),c.maxHeight),c.left=(e.width-c.width)/2,c.top=(e.height-c.height)/2,c.oldLeft=c.left,c.oldTop=c.top,this.initialCanvasData=Ce({},c)},limitCanvas:function(e,t){var n=this.options,r=this.containerData,o=this.canvasData,i=this.cropBoxData,s=n.viewMode,a=o.aspectRatio,l=this.cropped&&i;if(e){var c=Number(n.minCanvasWidth)||0,u=Number(n.minCanvasHeight)||0;s>1?(c=Math.max(c,r.width),u=Math.max(u,r.height),3===s&&(u*a>c?c=u*a:u=c/a)):s>0&&(c?c=Math.max(c,l?i.width:0):u?u=Math.max(u,l?i.height:0):l&&(c=i.width,(u=i.height)*a>c?c=u*a:u=c/a));var d=Je({aspectRatio:a,width:c,height:u});c=d.width,u=d.height,o.minWidth=c,o.minHeight=u,o.maxWidth=1/0,o.maxHeight=1/0}if(t)if(s>(l?0:1)){var h=r.width-o.width,m=r.height-o.height;o.minLeft=Math.min(0,h),o.minTop=Math.min(0,m),o.maxLeft=Math.max(0,h),o.maxTop=Math.max(0,m),l&&this.limited&&(o.minLeft=Math.min(i.left,i.left+(i.width-o.width)),o.minTop=Math.min(i.top,i.top+(i.height-o.height)),o.maxLeft=i.left,o.maxTop=i.top,2===s&&(o.width>=r.width&&(o.minLeft=Math.min(0,h),o.maxLeft=Math.max(0,h)),o.height>=r.height&&(o.minTop=Math.min(0,m),o.maxTop=Math.max(0,m))))}else o.minLeft=-o.width,o.minTop=-o.height,o.maxLeft=r.width,o.maxTop=r.height},renderCanvas:function(e,t){var n=this.canvasData,r=this.imageData;if(t){var o=Qe({width:r.naturalWidth*Math.abs(r.scaleX||1),height:r.naturalHeight*Math.abs(r.scaleY||1),degree:r.rotate||0}),i=o.width,s=o.height,a=n.width*(i/n.naturalWidth),l=n.height*(s/n.naturalHeight);n.left-=(a-n.width)/2,n.top-=(l-n.height)/2,n.width=a,n.height=l,n.aspectRatio=i/s,n.naturalWidth=i,n.naturalHeight=s,this.limitCanvas(!0,!1)}(n.width>n.maxWidth||n.width<n.minWidth)&&(n.left=n.oldLeft),(n.height>n.maxHeight||n.height<n.minHeight)&&(n.top=n.oldTop),n.width=Math.min(Math.max(n.width,n.minWidth),n.maxWidth),n.height=Math.min(Math.max(n.height,n.minHeight),n.maxHeight),this.limitCanvas(!1,!0),n.left=Math.min(Math.max(n.left,n.minLeft),n.maxLeft),n.top=Math.min(Math.max(n.top,n.minTop),n.maxTop),n.oldLeft=n.left,n.oldTop=n.top,Ae(this.canvas,Ce({width:n.width,height:n.height},qe({translateX:n.left,translateY:n.top}))),this.renderImage(e),this.cropped&&this.limited&&this.limitCropBox(!0,!0)},renderImage:function(e){var t=this.canvasData,n=this.imageData,r=n.naturalWidth*(t.width/t.naturalWidth),o=n.naturalHeight*(t.height/t.naturalHeight);Ce(n,{width:r,height:o,left:(t.width-r)/2,top:(t.height-o)/2}),Ae(this.image,Ce({width:n.width,height:n.height},qe(Ce({translateX:n.left,translateY:n.top},n)))),e&&this.output()},initCropBox:function(){var e=this.options,t=this.canvasData,n=e.aspectRatio||e.initialAspectRatio,r=Number(e.autoCropArea)||.8,o={width:t.width,height:t.height};n&&(t.height*n>t.width?o.height=o.width/n:o.width=o.height*n),this.cropBoxData=o,this.limitCropBox(!0,!0),o.width=Math.min(Math.max(o.width,o.minWidth),o.maxWidth),o.height=Math.min(Math.max(o.height,o.minHeight),o.maxHeight),o.width=Math.max(o.minWidth,o.width*r),o.height=Math.max(o.minHeight,o.height*r),o.left=t.left+(t.width-o.width)/2,o.top=t.top+(t.height-o.height)/2,o.oldLeft=o.left,o.oldTop=o.top,this.initialCropBoxData=Ce({},o)},limitCropBox:function(e,t){var n=this.options,r=this.containerData,o=this.canvasData,i=this.cropBoxData,s=this.limited,a=n.aspectRatio;if(e){var l=Number(n.minCropBoxWidth)||0,c=Number(n.minCropBoxHeight)||0,u=s?Math.min(r.width,o.width,o.width+o.left,r.width-o.left):r.width,d=s?Math.min(r.height,o.height,o.height+o.top,r.height-o.top):r.height;l=Math.min(l,r.width),c=Math.min(c,r.height),a&&(l&&c?c*a>l?c=l/a:l=c*a:l?c=l/a:c&&(l=c*a),d*a>u?d=u/a:u=d*a),i.minWidth=Math.min(l,u),i.minHeight=Math.min(c,d),i.maxWidth=u,i.maxHeight=d}t&&(s?(i.minLeft=Math.max(0,o.left),i.minTop=Math.max(0,o.top),i.maxLeft=Math.min(r.width,o.left+o.width)-i.width,i.maxTop=Math.min(r.height,o.top+o.height)-i.height):(i.minLeft=0,i.minTop=0,i.maxLeft=r.width-i.width,i.maxTop=r.height-i.height))},renderCropBox:function(){var e=this.options,t=this.containerData,n=this.cropBoxData;(n.width>n.maxWidth||n.width<n.minWidth)&&(n.left=n.oldLeft),(n.height>n.maxHeight||n.height<n.minHeight)&&(n.top=n.oldTop),n.width=Math.min(Math.max(n.width,n.minWidth),n.maxWidth),n.height=Math.min(Math.max(n.height,n.minHeight),n.maxHeight),this.limitCropBox(!1,!0),n.left=Math.min(Math.max(n.left,n.minLeft),n.maxLeft),n.top=Math.min(Math.max(n.top,n.minTop),n.maxTop),n.oldLeft=n.left,n.oldTop=n.top,e.movable&&e.cropBoxMovable&&Re(this.face,N,n.width>=t.width&&n.height>=t.height?_:y),Ae(this.cropBox,Ce({width:n.width,height:n.height},qe({translateX:n.left,translateY:n.top}))),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),He(this.element,j,this.getData())}},lt={initPreview:function(){var e=this.element,t=this.crossOrigin,n=this.options.preview,r=t?this.crossOriginUrl:this.url,o=e.alt||\"The image to preview\",i=document.createElement(\"img\");if(t&&(i.crossOrigin=t),i.src=r,i.alt=o,this.viewBox.appendChild(i),this.viewBoxImage=i,n){var s=n;\"string\"==typeof n?s=e.ownerDocument.querySelectorAll(n):n.querySelector&&(s=[n]),this.previews=s,xe(s,(function(e){var n=document.createElement(\"img\");Re(e,Y,{width:e.offsetWidth,height:e.offsetHeight,html:e.innerHTML}),t&&(n.crossOrigin=t),n.src=r,n.alt=o,n.style.cssText='display:block;width:100%;height:auto;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;image-orientation:0deg!important;\"',e.innerHTML=\"\",e.appendChild(n)}))}},resetPreview:function(){xe(this.previews,(function(e){var t=Be(e,Y);Ae(e,{width:t.width,height:t.height}),e.innerHTML=t.html,$e(e,Y)}))},preview:function(){var e=this.imageData,t=this.canvasData,n=this.cropBoxData,r=n.width,o=n.height,i=e.width,s=e.height,a=n.left-t.left-e.left,l=n.top-t.top-e.top;this.cropped&&!this.disabled&&(Ae(this.viewBoxImage,Ce({width:i,height:s},qe(Ce({translateX:-a,translateY:-l},e)))),xe(this.previews,(function(t){var n=Be(t,Y),c=n.width,u=n.height,d=c,h=u,m=1;r&&(h=o*(m=c/r)),o&&h>u&&(d=r*(m=u/o),h=u),Ae(t,{width:d,height:h}),Ae(t.getElementsByTagName(\"img\")[0],Ce({width:i*m,height:s*m},qe(Ce({translateX:-a*m,translateY:-l*m},e))))})))}},ct={bind:function(){var e=this.element,t=this.options,n=this.cropper;be(t.cropstart)&&Ie(e,U,t.cropstart),be(t.cropmove)&&Ie(e,z,t.cropmove),be(t.cropend)&&Ie(e,W,t.cropend),be(t.crop)&&Ie(e,j,t.crop),be(t.zoom)&&Ie(e,ne,t.zoom),Ie(n,X,this.onCropStart=this.cropStart.bind(this)),t.zoomable&&t.zoomOnWheel&&Ie(n,te,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),t.toggleDragModeOnDblclick&&Ie(n,V,this.onDblclick=this.dblclick.bind(this)),Ie(e.ownerDocument,J,this.onCropMove=this.cropMove.bind(this)),Ie(e.ownerDocument,Q,this.onCropEnd=this.cropEnd.bind(this)),t.responsive&&Ie(window,ee,this.onResize=this.resize.bind(this))},unbind:function(){var e=this.element,t=this.options,n=this.cropper;be(t.cropstart)&&Pe(e,U,t.cropstart),be(t.cropmove)&&Pe(e,z,t.cropmove),be(t.cropend)&&Pe(e,W,t.cropend),be(t.crop)&&Pe(e,j,t.crop),be(t.zoom)&&Pe(e,ne,t.zoom),Pe(n,X,this.onCropStart),t.zoomable&&t.zoomOnWheel&&Pe(n,te,this.onWheel,{passive:!1,capture:!0}),t.toggleDragModeOnDblclick&&Pe(n,V,this.onDblclick),Pe(e.ownerDocument,J,this.onCropMove),Pe(e.ownerDocument,Q,this.onCropEnd),t.responsive&&Pe(window,ee,this.onResize)}},ut={resize:function(){if(!this.disabled){var e,t,n=this.options,r=this.container,o=this.containerData,i=r.offsetWidth/o.width,s=r.offsetHeight/o.height,a=Math.abs(i-1)>Math.abs(s-1)?i:s;1!==a&&(n.restore&&(e=this.getCanvasData(),t=this.getCropBoxData()),this.render(),n.restore&&(this.setCanvasData(xe(e,(function(t,n){e[n]=t*a}))),this.setCropBoxData(xe(t,(function(e,n){t[n]=e*a})))))}},dblclick:function(){this.disabled||this.options.dragMode===H||this.setDragMode(Me(this.dragBox,E)?I:P)},wheel:function(e){var t=this,n=Number(this.options.wheelZoomRatio)||.1,r=1;this.disabled||(e.preventDefault(),this.wheeling||(this.wheeling=!0,setTimeout((function(){t.wheeling=!1}),50),e.deltaY?r=e.deltaY>0?1:-1:e.wheelDelta?r=-e.wheelDelta/120:e.detail&&(r=e.detail>0?1:-1),this.zoom(-r*n,e)))},cropStart:function(e){var t=e.buttons,n=e.button;if(!(this.disabled||(\"mousedown\"===e.type||\"pointerdown\"===e.type&&\"mouse\"===e.pointerType)&&(me(t)&&1!==t||me(n)&&0!==n||e.ctrlKey))){var r,o=this.options,i=this.pointers;e.changedTouches?xe(e.changedTouches,(function(e){i[e.identifier]=Ke(e)})):i[e.pointerId||0]=Ke(e),r=Object.keys(i).length>1&&o.zoomable&&o.zoomOnTouch?w:Be(e.target,N),oe.test(r)&&!1!==He(this.element,U,{originalEvent:e,action:r})&&(e.preventDefault(),this.action=r,this.cropping=!1,r===b&&(this.cropping=!0,Le(this.dragBox,R)))}},cropMove:function(e){var t=this.action;if(!this.disabled&&t){var n=this.pointers;e.preventDefault(),!1!==He(this.element,z,{originalEvent:e,action:t})&&(e.changedTouches?xe(e.changedTouches,(function(e){Ce(n[e.identifier]||{},Ke(e,!0))})):Ce(n[e.pointerId||0]||{},Ke(e,!0)),this.change(e))}},cropEnd:function(e){if(!this.disabled){var t=this.action,n=this.pointers;e.changedTouches?xe(e.changedTouches,(function(e){delete n[e.identifier]})):delete n[e.pointerId||0],t&&(e.preventDefault(),Object.keys(n).length||(this.action=\"\"),this.cropping&&(this.cropping=!1,Te(this.dragBox,R,this.cropped&&this.options.modal)),He(this.element,W,{originalEvent:e,action:t}))}}},dt={change:function(e){var t,n=this.options,r=this.canvasData,o=this.containerData,i=this.cropBoxData,s=this.pointers,a=this.action,l=n.aspectRatio,c=i.left,u=i.top,d=i.width,h=i.height,m=c+d,f=u+h,p=0,g=0,v=o.width,E=o.height,T=!0;!l&&e.shiftKey&&(l=d&&h?d/h:1),this.limited&&(p=i.minLeft,g=i.minTop,v=p+Math.min(o.width,r.width,r.left+r.width),E=g+Math.min(o.height,r.height,r.top+r.height));var O=s[Object.keys(s)[0]],B={x:O.endX-O.startX,y:O.endY-O.startY},R=function(e){switch(e){case x:m+B.x>v&&(B.x=v-m);break;case C:c+B.x<p&&(B.x=p-c);break;case D:u+B.y<g&&(B.y=g-u);break;case k:f+B.y>E&&(B.y=E-f)}};switch(a){case y:c+=B.x,u+=B.y;break;case x:if(B.x>=0&&(m>=v||l&&(u<=g||f>=E))){T=!1;break}R(x),(d+=B.x)<0&&(a=C,c-=d=-d),l&&(h=d/l,u+=(i.height-h)/2);break;case D:if(B.y<=0&&(u<=g||l&&(c<=p||m>=v))){T=!1;break}R(D),h-=B.y,u+=B.y,h<0&&(a=k,u-=h=-h),l&&(d=h*l,c+=(i.width-d)/2);break;case C:if(B.x<=0&&(c<=p||l&&(u<=g||f>=E))){T=!1;break}R(C),d-=B.x,c+=B.x,d<0&&(a=x,c-=d=-d),l&&(h=d/l,u+=(i.height-h)/2);break;case k:if(B.y>=0&&(f>=E||l&&(c<=p||m>=v))){T=!1;break}R(k),(h+=B.y)<0&&(a=D,u-=h=-h),l&&(d=h*l,c+=(i.width-d)/2);break;case S:if(l){if(B.y<=0&&(u<=g||m>=v)){T=!1;break}R(D),h-=B.y,u+=B.y,d=h*l}else R(D),R(x),B.x>=0?m<v?d+=B.x:B.y<=0&&u<=g&&(T=!1):d+=B.x,B.y<=0?u>g&&(h-=B.y,u+=B.y):(h-=B.y,u+=B.y);d<0&&h<0?(a=L,u-=h=-h,c-=d=-d):d<0?(a=A,c-=d=-d):h<0&&(a=M,u-=h=-h);break;case A:if(l){if(B.y<=0&&(u<=g||c<=p)){T=!1;break}R(D),h-=B.y,u+=B.y,d=h*l,c+=i.width-d}else R(D),R(C),B.x<=0?c>p?(d-=B.x,c+=B.x):B.y<=0&&u<=g&&(T=!1):(d-=B.x,c+=B.x),B.y<=0?u>g&&(h-=B.y,u+=B.y):(h-=B.y,u+=B.y);d<0&&h<0?(a=M,u-=h=-h,c-=d=-d):d<0?(a=S,c-=d=-d):h<0&&(a=L,u-=h=-h);break;case L:if(l){if(B.x<=0&&(c<=p||f>=E)){T=!1;break}R(C),d-=B.x,c+=B.x,h=d/l}else R(k),R(C),B.x<=0?c>p?(d-=B.x,c+=B.x):B.y>=0&&f>=E&&(T=!1):(d-=B.x,c+=B.x),B.y>=0?f<E&&(h+=B.y):h+=B.y;d<0&&h<0?(a=S,u-=h=-h,c-=d=-d):d<0?(a=M,c-=d=-d):h<0&&(a=A,u-=h=-h);break;case M:if(l){if(B.x>=0&&(m>=v||f>=E)){T=!1;break}R(x),h=(d+=B.x)/l}else R(k),R(x),B.x>=0?m<v?d+=B.x:B.y>=0&&f>=E&&(T=!1):d+=B.x,B.y>=0?f<E&&(h+=B.y):h+=B.y;d<0&&h<0?(a=A,u-=h=-h,c-=d=-d):d<0?(a=L,c-=d=-d):h<0&&(a=S,u-=h=-h);break;case _:this.move(B.x,B.y),T=!1;break;case w:this.zoom(Ge(s),e),T=!1;break;case b:if(!B.x||!B.y){T=!1;break}t=je(this.cropper),c=O.startX-t.left,u=O.startY-t.top,d=i.minWidth,h=i.minHeight,B.x>0?a=B.y>0?M:S:B.x<0&&(c-=d,a=B.y>0?L:A),B.y<0&&(u-=h),this.cropped||(Ee(this.cropBox,F),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0))}T&&(i.width=d,i.height=h,i.left=c,i.top=u,this.action=a,this.renderCropBox()),xe(s,(function(e){e.startX=e.endX,e.startY=e.endY}))}},ht={crop:function(){return!this.ready||this.cropped||this.disabled||(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&Le(this.dragBox,R),Ee(this.cropBox,F),this.setCropBoxData(this.initialCropBoxData)),this},reset:function(){return this.ready&&!this.disabled&&(this.imageData=Ce({},this.initialImageData),this.canvasData=Ce({},this.initialCanvasData),this.cropBoxData=Ce({},this.initialCropBoxData),this.renderCanvas(),this.cropped&&this.renderCropBox()),this},clear:function(){return this.cropped&&!this.disabled&&(Ce(this.cropBoxData,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),Ee(this.dragBox,R),Le(this.cropBox,F)),this},replace:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!this.disabled&&e&&(this.isImg&&(this.element.src=e),t?(this.url=e,this.image.src=e,this.ready&&(this.viewBoxImage.src=e,xe(this.previews,(function(t){t.getElementsByTagName(\"img\")[0].src=e})))):(this.isImg&&(this.replaced=!0),this.options.data=null,this.uncreate(),this.load(e))),this},enable:function(){return this.ready&&this.disabled&&(this.disabled=!1,Ee(this.cropper,T)),this},disable:function(){return this.ready&&!this.disabled&&(this.disabled=!0,Le(this.cropper,T)),this},destroy:function(){var e=this.element;return e[v]?(e[v]=void 0,this.isImg&&this.replaced&&(e.src=this.originalUrl),this.uncreate(),this):this},move:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=this.canvasData,r=n.left,o=n.top;return this.moveTo(pe(e)?e:r+Number(e),pe(t)?t:o+Number(t))},moveTo:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=this.canvasData,r=!1;return e=Number(e),t=Number(t),this.ready&&!this.disabled&&this.options.movable&&(me(e)&&(n.left=e,r=!0),me(t)&&(n.top=t,r=!0),r&&this.renderCanvas(!0)),this},zoom:function(e,t){var n=this.canvasData;return e=(e=Number(e))<0?1/(1-e):1+e,this.zoomTo(n.width*e/n.naturalWidth,null,t)},zoomTo:function(e,t,n){var r=this.options,o=this.canvasData,i=o.width,s=o.height,a=o.naturalWidth,l=o.naturalHeight;if((e=Number(e))>=0&&this.ready&&!this.disabled&&r.zoomable){var c=a*e,u=l*e;if(!1===He(this.element,ne,{ratio:e,oldRatio:i/a,originalEvent:n}))return this;if(n){var d=this.pointers,h=je(this.cropper),m=d&&Object.keys(d).length?Xe(d):{pageX:n.pageX,pageY:n.pageY};o.left-=(c-i)*((m.pageX-h.left-o.left)/i),o.top-=(u-s)*((m.pageY-h.top-o.top)/s)}else ye(t)&&me(t.x)&&me(t.y)?(o.left-=(c-i)*((t.x-o.left)/i),o.top-=(u-s)*((t.y-o.top)/s)):(o.left-=(c-i)/2,o.top-=(u-s)/2);o.width=c,o.height=u,this.renderCanvas(!0)}return this},rotate:function(e){return this.rotateTo((this.imageData.rotate||0)+Number(e))},rotateTo:function(e){return me(e=Number(e))&&this.ready&&!this.disabled&&this.options.rotatable&&(this.imageData.rotate=e%360,this.renderCanvas(!0,!0)),this},scaleX:function(e){var t=this.imageData.scaleY;return this.scale(e,me(t)?t:1)},scaleY:function(e){var t=this.imageData.scaleX;return this.scale(me(t)?t:1,e)},scale:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=this.imageData,r=!1;return e=Number(e),t=Number(t),this.ready&&!this.disabled&&this.options.scalable&&(me(e)&&(n.scaleX=e,r=!0),me(t)&&(n.scaleY=t,r=!0),r&&this.renderCanvas(!0,!0)),this},getData:function(){var e,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=this.options,r=this.imageData,o=this.canvasData,i=this.cropBoxData;if(this.ready&&this.cropped){e={x:i.left-o.left,y:i.top-o.top,width:i.width,height:i.height};var s=r.width/r.naturalWidth;if(xe(e,(function(t,n){e[n]=t/s})),t){var a=Math.round(e.y+e.height),l=Math.round(e.x+e.width);e.x=Math.round(e.x),e.y=Math.round(e.y),e.width=l-e.x,e.height=a-e.y}}else e={x:0,y:0,width:0,height:0};return n.rotatable&&(e.rotate=r.rotate||0),n.scalable&&(e.scaleX=r.scaleX||1,e.scaleY=r.scaleY||1),e},setData:function(e){var t=this.options,n=this.imageData,r=this.canvasData,o={};if(this.ready&&!this.disabled&&ye(e)){var i=!1;t.rotatable&&me(e.rotate)&&e.rotate!==n.rotate&&(n.rotate=e.rotate,i=!0),t.scalable&&(me(e.scaleX)&&e.scaleX!==n.scaleX&&(n.scaleX=e.scaleX,i=!0),me(e.scaleY)&&e.scaleY!==n.scaleY&&(n.scaleY=e.scaleY,i=!0)),i&&this.renderCanvas(!0,!0);var s=n.width/n.naturalWidth;me(e.x)&&(o.left=e.x*s+r.left),me(e.y)&&(o.top=e.y*s+r.top),me(e.width)&&(o.width=e.width*s),me(e.height)&&(o.height=e.height*s),this.setCropBoxData(o)}return this},getContainerData:function(){return this.ready?Ce({},this.containerData):{}},getImageData:function(){return this.sized?Ce({},this.imageData):{}},getCanvasData:function(){var e=this.canvasData,t={};return this.ready&&xe([\"left\",\"top\",\"width\",\"height\",\"naturalWidth\",\"naturalHeight\"],(function(n){t[n]=e[n]})),t},setCanvasData:function(e){var t=this.canvasData,n=t.aspectRatio;return this.ready&&!this.disabled&&ye(e)&&(me(e.left)&&(t.left=e.left),me(e.top)&&(t.top=e.top),me(e.width)?(t.width=e.width,t.height=e.width/n):me(e.height)&&(t.height=e.height,t.width=e.height*n),this.renderCanvas(!0)),this},getCropBoxData:function(){var e,t=this.cropBoxData;return this.ready&&this.cropped&&(e={left:t.left,top:t.top,width:t.width,height:t.height}),e||{}},setCropBoxData:function(e){var t,n,r=this.cropBoxData,o=this.options.aspectRatio;return this.ready&&this.cropped&&!this.disabled&&ye(e)&&(me(e.left)&&(r.left=e.left),me(e.top)&&(r.top=e.top),me(e.width)&&e.width!==r.width&&(t=!0,r.width=e.width),me(e.height)&&e.height!==r.height&&(n=!0,r.height=e.height),o&&(t?r.height=r.width/o:n&&(r.width=r.height*o)),this.renderCropBox()),this},getCroppedCanvas:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.ready||!window.HTMLCanvasElement)return null;var t=this.canvasData,n=Ze(this.image,this.imageData,t,e);if(!this.cropped)return n;var r=this.getData(),o=r.x,i=r.y,s=r.width,l=r.height,c=n.width/Math.floor(t.naturalWidth);1!==c&&(o*=c,i*=c,s*=c,l*=c);var u=s/l,d=Je({aspectRatio:u,width:e.maxWidth||1/0,height:e.maxHeight||1/0}),h=Je({aspectRatio:u,width:e.minWidth||0,height:e.minHeight||0},\"cover\"),m=Je({aspectRatio:u,width:e.width||(1!==c?n.width:s),height:e.height||(1!==c?n.height:l)}),f=m.width,p=m.height;f=Math.min(d.width,Math.max(h.width,f)),p=Math.min(d.height,Math.max(h.height,p));var g=document.createElement(\"canvas\"),v=g.getContext(\"2d\");g.width=De(f),g.height=De(p),v.fillStyle=e.fillColor||\"transparent\",v.fillRect(0,0,f,p);var y=e.imageSmoothingEnabled,b=void 0===y||y,_=e.imageSmoothingQuality;v.imageSmoothingEnabled=b,_&&(v.imageSmoothingQuality=_);var w,x,C,k,D,S,A=n.width,M=n.height,L=o,E=i;L<=-s||L>A?(L=0,w=0,C=0,D=0):L<=0?(C=-L,L=0,D=w=Math.min(A,s+L)):L<=A&&(C=0,D=w=Math.min(s,A-L)),w<=0||E<=-l||E>M?(E=0,x=0,k=0,S=0):E<=0?(k=-E,E=0,S=x=Math.min(M,l+E)):E<=M&&(k=0,S=x=Math.min(l,M-E));var T=[L,E,w,x];if(D>0&&S>0){var F=f/s;T.push(C*F,k*F,D*F,S*F)}return v.drawImage.apply(v,[n].concat(a(T.map((function(e){return Math.floor(De(e))}))))),g},setAspectRatio:function(e){var t=this.options;return this.disabled||pe(e)||(t.aspectRatio=Math.max(0,e)||NaN,this.ready&&(this.initCropBox(),this.cropped&&this.renderCropBox())),this},setDragMode:function(e){var t=this.options,n=this.dragBox,r=this.face;if(this.ready&&!this.disabled){var o=e===P,i=t.movable&&e===I;e=o||i?e:H,t.dragMode=e,Re(n,N,e),Te(n,E,o),Te(n,$,i),t.cropBoxMovable||(Re(r,N,e),Te(r,E,o),Te(r,$,i))}return this}},mt=f.Cropper,ft=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(r(this,e),!t||!ae.test(t.tagName))throw new Error(\"The first argument is required and must be an <img> or <canvas> element.\");this.element=t,this.options=Ce({},ue,ye(n)&&n),this.cropped=!1,this.disabled=!1,this.pointers={},this.ready=!1,this.reloading=!1,this.replaced=!1,this.sized=!1,this.sizing=!1,this.init()}return i(e,[{key:\"init\",value:function(){var e,t=this.element,n=t.tagName.toLowerCase();if(!t[v]){if(t[v]=this,\"img\"===n){if(this.isImg=!0,e=t.getAttribute(\"src\")||\"\",this.originalUrl=e,!e)return;e=t.src}else\"canvas\"===n&&window.HTMLCanvasElement&&(e=t.toDataURL());this.load(e)}}},{key:\"load\",value:function(e){var t=this;if(e){this.url=e,this.imageData={};var n=this.element,r=this.options;if(r.rotatable||r.scalable||(r.checkOrientation=!1),r.checkOrientation&&window.ArrayBuffer)if(ie.test(e))se.test(e)?this.read(rt(e)):this.clone();else{var o=new XMLHttpRequest,i=this.clone.bind(this);this.reloading=!0,this.xhr=o,o.onabort=i,o.onerror=i,o.ontimeout=i,o.onprogress=function(){o.getResponseHeader(\"content-type\")!==re&&o.abort()},o.onload=function(){t.read(o.response)},o.onloadend=function(){t.reloading=!1,t.xhr=null},r.checkCrossOrigin&&Ue(e)&&n.crossOrigin&&(e=Ve(e)),o.open(\"GET\",e,!0),o.responseType=\"arraybuffer\",o.withCredentials=\"use-credentials\"===n.crossOrigin,o.send()}else this.clone()}}},{key:\"read\",value:function(e){var t=this.options,n=this.imageData,r=it(e),o=0,i=1,s=1;if(r>1){this.url=ot(e,re);var a=st(r);o=a.rotate,i=a.scaleX,s=a.scaleY}t.rotatable&&(n.rotate=o),t.scalable&&(n.scaleX=i,n.scaleY=s),this.clone()}},{key:\"clone\",value:function(){var e=this.element,t=this.url,n=e.crossOrigin,r=t;this.options.checkCrossOrigin&&Ue(t)&&(n||(n=\"anonymous\"),r=Ve(t)),this.crossOrigin=n,this.crossOriginUrl=r;var o=document.createElement(\"img\");n&&(o.crossOrigin=n),o.src=r||t,o.alt=e.alt||\"The image to crop\",this.image=o,o.onload=this.start.bind(this),o.onerror=this.stop.bind(this),Le(o,O),e.parentNode.insertBefore(o,e.nextSibling)}},{key:\"start\",value:function(){var e=this,t=this.image;t.onload=null,t.onerror=null,this.sizing=!0;var n=f.navigator&&/(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(f.navigator.userAgent),r=function(t,n){Ce(e.imageData,{naturalWidth:t,naturalHeight:n,aspectRatio:t/n}),e.initialImageData=Ce({},e.imageData),e.sizing=!1,e.sized=!0,e.build()};if(!t.naturalWidth||n){var o=document.createElement(\"img\"),i=document.body||document.documentElement;this.sizingImage=o,o.onload=function(){r(o.width,o.height),n||i.removeChild(o)},o.src=t.src,n||(o.style.cssText=\"left:0;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;opacity:0;position:absolute;top:0;z-index:-1;\",i.appendChild(o))}else r(t.naturalWidth,t.naturalHeight)}},{key:\"stop\",value:function(){var e=this.image;e.onload=null,e.onerror=null,e.parentNode.removeChild(e),this.image=null}},{key:\"build\",value:function(){if(this.sized&&!this.ready){var e=this.element,t=this.options,n=this.image,r=e.parentNode,o=document.createElement(\"div\");o.innerHTML=de;var i=o.querySelector(\".\".concat(v,\"-container\")),s=i.querySelector(\".\".concat(v,\"-canvas\")),a=i.querySelector(\".\".concat(v,\"-drag-box\")),l=i.querySelector(\".\".concat(v,\"-crop-box\")),c=l.querySelector(\".\".concat(v,\"-face\"));this.container=r,this.cropper=i,this.canvas=s,this.dragBox=a,this.cropBox=l,this.viewBox=i.querySelector(\".\".concat(v,\"-view-box\")),this.face=c,s.appendChild(n),Le(e,F),r.insertBefore(i,e.nextSibling),this.isImg||Ee(n,O),this.initPreview(),this.bind(),t.initialAspectRatio=Math.max(0,t.initialAspectRatio)||NaN,t.aspectRatio=Math.max(0,t.aspectRatio)||NaN,t.viewMode=Math.max(0,Math.min(3,Math.round(t.viewMode)))||0,Le(l,F),t.guides||Le(l.getElementsByClassName(\"\".concat(v,\"-dashed\")),F),t.center||Le(l.getElementsByClassName(\"\".concat(v,\"-center\")),F),t.background&&Le(i,\"\".concat(v,\"-bg\")),t.highlight||Le(c,B),t.cropBoxMovable&&(Le(c,$),Re(c,N,y)),t.cropBoxResizable||(Le(l.getElementsByClassName(\"\".concat(v,\"-line\")),F),Le(l.getElementsByClassName(\"\".concat(v,\"-point\")),F)),this.render(),this.ready=!0,this.setDragMode(t.dragMode),t.autoCrop&&this.crop(),this.setData(t.data),be(t.ready)&&Ie(e,Z,t.ready,{once:!0}),He(e,Z)}}},{key:\"unbuild\",value:function(){this.ready&&(this.ready=!1,this.unbind(),this.resetPreview(),this.cropper.parentNode.removeChild(this.cropper),Ee(this.element,F))}},{key:\"uncreate\",value:function(){this.ready?(this.unbuild(),this.ready=!1,this.cropped=!1):this.sizing?(this.sizingImage.onload=null,this.sizing=!1,this.sized=!1):this.reloading?(this.xhr.onabort=null,this.xhr.abort()):this.image&&this.stop()}}],[{key:\"noConflict\",value:function(){return window.Cropper=mt,e}},{key:\"setDefaults\",value:function(e){Ce(ue,ye(e)&&e)}}]),e}();return Ce(ft.prototype,at,lt,ct,ut,dt,ht),ft}()},591:(e,t,n)=>{var r,o,i;o=[n(9755),n(2083)],void 0===(i=\"function\"==typeof(r=function(e,t){\"use strict\";e.extend(!0,t.defaults,{dom:\"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-6'i><'col-sm-6'p>>\",renderer:\"bootstrap\"}),e.extend(t.ext.classes,{sWrapper:\"dataTables_wrapper form-inline dt-bootstrap\",sFilterInput:\"form-control input-sm\",sLengthSelect:\"form-control input-sm\"}),t.ext.renderer.pageButton.bootstrap=function(n,r,o,i,s,a){var l,c,u=new t.Api(n),d=n.oClasses,h=n.oLanguage.oPaginate,m=function(t,r){var i,f,p,g,v=function(t){t.preventDefault(),e(t.currentTarget).hasClass(\"disabled\")||u.page(t.data.action).draw(!1)};for(i=0,f=r.length;i<f;i++)if(g=r[i],e.isArray(g))m(t,g);else{switch(l=\"\",c=\"\",g){case\"ellipsis\":l=\"&hellip;\",c=\"disabled\";break;case\"first\":l=h.sFirst,c=g+(s>0?\"\":\" disabled\");break;case\"previous\":l=h.sPrevious,c=g+(s>0?\"\":\" disabled\");break;case\"next\":l=h.sNext,c=g+(s<a-1?\"\":\" disabled\");break;case\"last\":l=h.sLast,c=g+(s<a-1?\"\":\" disabled\");break;default:l=g+1,c=s===g?\"active\":\"\"}l&&(p=e(\"<li>\",{class:d.sPageButton+\" \"+c,\"aria-controls\":n.sTableId,tabindex:n.iTabIndex,id:0===o&&\"string\"==typeof g?n.sTableId+\"_\"+g:null}).append(e(\"<a>\",{href:\"#\"}).html(l)).appendTo(t),n.oApi._fnBindAction(p,{action:g},v))}};m(e(r).empty().html('<ul class=\"pagination\"/>').children(\"ul\"),i)},t.TableTools&&(e.extend(!0,t.TableTools.classes,{container:\"DTTT btn-group\",buttons:{normal:\"btn btn-default\",disabled:\"disabled\"},collection:{container:\"DTTT_dropdown dropdown-menu\",buttons:{normal:\"\",disabled:\"disabled\"}},print:{info:\"DTTT_print_info\"},select:{row:\"active\"}}),e.extend(!0,t.TableTools.DEFAULTS.oTags,{collection:{container:\"ul\",button:\"li\",liner:\"a\"}}))})?r.apply(t,o):r)||(e.exports=i)},2083:(e,t,n)=>{var r,o;!function(i){\"use strict\";r=[n(9755)],o=function(e){return function(e,t,n,r){var o,i,s,a,l=function(t){this.$=function(e,t){return this.api(!0).$(e,t)},this._=function(e,t){return this.api(!0).rows(e,t).data()},this.api=function(e){return new i(e?ct(this[o.iApiIndex]):this)},this.fnAddData=function(t,n){var o=this.api(!0),i=e.isArray(t)&&(e.isArray(t[0])||e.isPlainObject(t[0]))?o.rows.add(t):o.row.add(t);return(n===r||n)&&o.draw(),i.flatten().toArray()},this.fnAdjustColumnSizing=function(e){var t=this.api(!0).columns.adjust(),n=t.settings()[0],o=n.oScroll;e===r||e?t.draw(!1):\"\"===o.sX&&\"\"===o.sY||Ue(n)},this.fnClearTable=function(e){var t=this.api(!0).clear();(e===r||e)&&t.draw()},this.fnClose=function(e){this.api(!0).row(e).child.hide()},this.fnDeleteRow=function(e,t,n){var o=this.api(!0),i=o.rows(e),s=i.settings()[0],a=s.aoData[i[0][0]];return i.remove(),t&&t.call(this,s,a),(n===r||n)&&o.draw(),a},this.fnDestroy=function(e){this.api(!0).destroy(e)},this.fnDraw=function(e){this.api(!0).draw(e)},this.fnFilter=function(e,t,n,o,i,s){var a=this.api(!0);null===t||t===r?a.search(e,n,o,s):a.column(t).search(e,n,o,s),a.draw()},this.fnGetData=function(e,t){var n=this.api(!0);if(e!==r){var o=e.nodeName?e.nodeName.toLowerCase():\"\";return t!==r||\"td\"==o||\"th\"==o?n.cell(e,t).data():n.row(e).data()||null}return n.data().toArray()},this.fnGetNodes=function(e){var t=this.api(!0);return e!==r?t.row(e).node():t.rows().nodes().flatten().toArray()},this.fnGetPosition=function(e){var t=this.api(!0),n=e.nodeName.toUpperCase();if(\"TR\"==n)return t.row(e).index();if(\"TD\"==n||\"TH\"==n){var r=t.cell(e).index();return[r.row,r.columnVisible,r.column]}return null},this.fnIsOpen=function(e){return this.api(!0).row(e).child.isShown()},this.fnOpen=function(e,t,n){return this.api(!0).row(e).child(t,n).show().child()[0]},this.fnPageChange=function(e,t){var n=this.api(!0).page(e);(t===r||t)&&n.draw(!1)},this.fnSetColumnVis=function(e,t,n){var o=this.api(!0).column(e).visible(t);(n===r||n)&&o.columns.adjust().draw()},this.fnSettings=function(){return ct(this[o.iApiIndex])},this.fnSort=function(e){this.api(!0).order(e).draw()},this.fnSortListener=function(e,t,n){this.api(!0).order.listener(e,t,n)},this.fnUpdate=function(e,t,n,o,i){var s=this.api(!0);return n===r||null===n?s.row(t).data(e):s.cell(t,n).data(e),(i===r||i)&&s.columns.adjust(),(o===r||o)&&s.draw(),0},this.fnVersionCheck=o.fnVersionCheck;var n=this,s=t===r,a=this.length;for(var c in s&&(t={}),this.oApi=this.internal=o.internal,l.ext.internal)c&&(this[c]=Ut(c));return this.each((function(){var o,i=a>1?ht({},t,!0):t,c=0,u=this.getAttribute(\"id\"),d=!1,h=l.defaults,m=e(this);if(\"table\"==this.nodeName.toLowerCase()){F(h),O(h.column),L(h,h,!0),L(h.column,h.column,!0),L(h,e.extend(i,m.data()));var f=l.settings;for(c=0,o=f.length;c<o;c++){var p=f[c];if(p.nTable==this||p.nTHead&&p.nTHead.parentNode==this||p.nTFoot&&p.nTFoot.parentNode==this){var g=i.bRetrieve!==r?i.bRetrieve:h.bRetrieve,v=i.bDestroy!==r?i.bDestroy:h.bDestroy;if(s||g)return p.oInstance;if(v){p.oInstance.fnDestroy();break}return void ut(p,0,\"Cannot reinitialise DataTable\",3)}if(p.sTableId==this.id){f.splice(c,1);break}}null!==u&&\"\"!==u||(u=\"DataTables_Table_\"+l.ext._unique++,this.id=u);var y=e.extend(!0,{},l.models.oSettings,{sDestroyWidth:m[0].style.width,sInstance:u,sTableId:u});y.nTable=this,y.oApi=n.internal,y.oInit=i,f.push(y),y.oInstance=1===n.length?n:m.dataTable(),F(i),E(i.oLanguage),i.aLengthMenu&&!i.iDisplayLength&&(i.iDisplayLength=e.isArray(i.aLengthMenu[0])?i.aLengthMenu[0][0]:i.aLengthMenu[0]),i=ht(e.extend(!0,{},h),i),dt(y.oFeatures,i,[\"bPaginate\",\"bLengthChange\",\"bFilter\",\"bSort\",\"bSortMulti\",\"bInfo\",\"bProcessing\",\"bAutoWidth\",\"bSortClasses\",\"bServerSide\",\"bDeferRender\"]),dt(y,i,[\"asStripeClasses\",\"ajax\",\"fnServerData\",\"fnFormatNumber\",\"sServerMethod\",\"aaSorting\",\"aaSortingFixed\",\"aLengthMenu\",\"sPaginationType\",\"sAjaxSource\",\"sAjaxDataProp\",\"iStateDuration\",\"sDom\",\"bSortCellsTop\",\"iTabIndex\",\"fnStateLoadCallback\",\"fnStateSaveCallback\",\"renderer\",\"searchDelay\",\"rowId\",[\"iCookieDuration\",\"iStateDuration\"],[\"oSearch\",\"oPreviousSearch\"],[\"aoSearchCols\",\"aoPreSearchCols\"],[\"iDisplayLength\",\"_iDisplayLength\"]]),dt(y.oScroll,i,[[\"sScrollX\",\"sX\"],[\"sScrollXInner\",\"sXInner\"],[\"sScrollY\",\"sY\"],[\"bScrollCollapse\",\"bCollapse\"]]),dt(y.oLanguage,i,\"fnInfoCallback\"),ft(y,\"aoDrawCallback\",i.fnDrawCallback,\"user\"),ft(y,\"aoServerParams\",i.fnServerParams,\"user\"),ft(y,\"aoStateSaveParams\",i.fnStateSaveParams,\"user\"),ft(y,\"aoStateLoadParams\",i.fnStateLoadParams,\"user\"),ft(y,\"aoStateLoaded\",i.fnStateLoaded,\"user\"),ft(y,\"aoRowCallback\",i.fnRowCallback,\"user\"),ft(y,\"aoRowCreatedCallback\",i.fnCreatedRow,\"user\"),ft(y,\"aoHeaderCallback\",i.fnHeaderCallback,\"user\"),ft(y,\"aoFooterCallback\",i.fnFooterCallback,\"user\"),ft(y,\"aoInitComplete\",i.fnInitComplete,\"user\"),ft(y,\"aoPreDrawCallback\",i.fnPreDrawCallback,\"user\"),y.rowIdFn=ee(i.rowId),B(y);var b=y.oClasses;if(e.extend(b,l.ext.classes,i.oClasses),m.addClass(b.sTable),y.iInitDisplayStart===r&&(y.iInitDisplayStart=i.iDisplayStart,y._iDisplayStart=i.iDisplayStart),null!==i.iDeferLoading){y.bDeferLoading=!0;var _=e.isArray(i.iDeferLoading);y._iRecordsDisplay=_?i.iDeferLoading[0]:i.iDeferLoading,y._iRecordsTotal=_?i.iDeferLoading[1]:i.iDeferLoading}var w=y.oLanguage;e.extend(!0,w,i.oLanguage),w.sUrl&&(e.ajax({dataType:\"json\",url:w.sUrl,success:function(t){E(t),L(h.oLanguage,t),e.extend(!0,w,t),$e(y)},error:function(){$e(y)}}),d=!0),null===i.asStripeClasses&&(y.asStripeClasses=[b.sStripeOdd,b.sStripeEven]);var x=y.asStripeClasses,C=m.children(\"tbody\").find(\"tr\").eq(0);-1!==e.inArray(!0,e.map(x,(function(e,t){return C.hasClass(e)})))&&(e(\"tbody tr\",this).removeClass(x.join(\" \")),y.asDestroyStripes=x.slice());var k,D=[],S=this.getElementsByTagName(\"thead\");if(0!==S.length&&(fe(y.aoHeader,S[0]),D=pe(y)),null===i.aoColumns)for(k=[],c=0,o=D.length;c<o;c++)k.push(null);else k=i.aoColumns;for(c=0,o=k.length;c<o;c++)$(y,D?D[c]:null);if(z(y,i.aoColumnDefs,k,(function(e,t){N(y,e,t)})),C.length){var A=function(e,t){return null!==e.getAttribute(\"data-\"+t)?t:null};e(C[0]).children(\"th, td\").each((function(e,t){var n=y.aoColumns[e];if(n.mData===e){var o=A(t,\"sort\")||A(t,\"order\"),i=A(t,\"filter\")||A(t,\"search\");null===o&&null===i||(n.mData={_:e+\".display\",sort:null!==o?e+\".@data-\"+o:r,type:null!==o?e+\".@data-\"+o:r,filter:null!==i?e+\".@data-\"+i:r},N(y,e))}}))}var M=y.oFeatures,T=function(){if(i.aaSorting===r){var t=y.aaSorting;for(c=0,o=t.length;c<o;c++)t[c][1]=y.aoColumns[c].asSorting[0]}it(y),M.bSort&&ft(y,\"aoDrawCallback\",(function(){if(y.bSorted){var t=et(y),n={};e.each(t,(function(e,t){n[t.src]=t.dir})),pt(y,null,\"order\",[y,t,n]),nt(y)}})),ft(y,\"aoDrawCallback\",(function(){(y.bSorted||\"ssp\"===yt(y)||M.bDeferRender)&&it(y)}),\"sc\");var n=m.children(\"caption\").each((function(){this._captionSide=e(this).css(\"caption-side\")})),s=m.children(\"thead\");0===s.length&&(s=e(\"<thead/>\").appendTo(m)),y.nTHead=s[0];var a=m.children(\"tbody\");0===a.length&&(a=e(\"<tbody/>\").appendTo(m)),y.nTBody=a[0];var l=m.children(\"tfoot\");if(0===l.length&&n.length>0&&(\"\"!==y.oScroll.sX||\"\"!==y.oScroll.sY)&&(l=e(\"<tfoot/>\").appendTo(m)),0===l.length||0===l.children().length?m.addClass(b.sNoFooter):l.length>0&&(y.nTFoot=l[0],fe(y.aoFooter,y.nTFoot)),i.aaData)for(c=0;c<i.aaData.length;c++)U(y,i.aaData[c]);else(y.bDeferLoading||\"dom\"==yt(y))&&V(y,e(y.nTBody).children(\"tr\"));y.aiDisplay=y.aiDisplayMaster.slice(),y.bInitialised=!0,!1===d&&$e(y)};i.bStateSave?(M.bStateSave=!0,ft(y,\"aoDrawCallback\",at,\"state_save\"),lt(y,i,T)):T()}else ut(null,0,\"Non-table node initialisation (\"+this.nodeName+\")\",2)})),n=null,this},c={},u=/[\\r\\n]/g,d=/<.*?>/g,h=/^\\d{2,4}[\\.\\/\\-]\\d{1,2}[\\.\\/\\-]\\d{1,2}([T ]{1}\\d{1,2}[:\\.]\\d{2}([\\.:]\\d{2})?)?$/,m=new RegExp(\"(\\\\\"+[\"/\",\".\",\"*\",\"+\",\"?\",\"|\",\"(\",\")\",\"[\",\"]\",\"{\",\"}\",\"\\\\\",\"$\",\"^\",\"-\"].join(\"|\\\\\")+\")\",\"g\"),f=/[',$£€¥%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfkɃΞ]/gi,p=function(e){return!e||!0===e||\"-\"===e},g=function(e){var t=parseInt(e,10);return!isNaN(t)&&isFinite(e)?t:null},v=function(e,t){return c[t]||(c[t]=new RegExp(Ae(t),\"g\")),\"string\"==typeof e&&\".\"!==t?e.replace(/\\./g,\"\").replace(c[t],\".\"):e},y=function(e,t,n){var r=\"string\"==typeof e;return!!p(e)||(t&&r&&(e=v(e,t)),n&&r&&(e=e.replace(f,\"\")),!isNaN(parseFloat(e))&&isFinite(e))},b=function(e){return p(e)||\"string\"==typeof e},_=function(e,t,n){return!!p(e)||(b(e)&&!!y(D(e),t,n)||null)},w=function(e,t,n){var o=[],i=0,s=e.length;if(n!==r)for(;i<s;i++)e[i]&&e[i][t]&&o.push(e[i][t][n]);else for(;i<s;i++)e[i]&&o.push(e[i][t]);return o},x=function(e,t,n,o){var i=[],s=0,a=t.length;if(o!==r)for(;s<a;s++)e[t[s]][n]&&i.push(e[t[s]][n][o]);else for(;s<a;s++)i.push(e[t[s]][n]);return i},C=function(e,t){var n,o=[];t===r?(t=0,n=e):(n=t,t=e);for(var i=t;i<n;i++)o.push(i);return o},k=function(e){for(var t=[],n=0,r=e.length;n<r;n++)e[n]&&t.push(e[n]);return t},D=function(e){return e.replace(d,\"\")},S=function(e){if(e.length<2)return!0;for(var t=e.slice().sort(),n=t[0],r=1,o=t.length;r<o;r++){if(t[r]===n)return!1;n=t[r]}return!0},A=function(e){if(S(e))return e.slice();var t,n,r,o=[],i=e.length,s=0;e:for(n=0;n<i;n++){for(t=e[n],r=0;r<s;r++)if(o[r]===t)continue e;o.push(t),s++}return o};function M(t){var n,r,o=\"a aa ai ao as b fn i m o s \",i={};e.each(t,(function(e,s){(n=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!==o.indexOf(n[1]+\" \")&&(r=e.replace(n[0],n[2].toLowerCase()),i[r]=e,\"o\"===n[1]&&M(t[e]))})),t._hungarianMap=i}function L(t,n,o){var i;t._hungarianMap||M(t),e.each(n,(function(s,a){(i=t._hungarianMap[s])===r||!o&&n[i]!==r||(\"o\"===i.charAt(0)?(n[i]||(n[i]={}),e.extend(!0,n[i],n[s]),L(t[i],n[i],o)):n[i]=n[s])}))}function E(e){var t=l.defaults.oLanguage,n=t.sDecimal;if(n&&Wt(n),e){var r=e.sZeroRecords;!e.sEmptyTable&&r&&\"No data available in table\"===t.sEmptyTable&&dt(e,e,\"sZeroRecords\",\"sEmptyTable\"),!e.sLoadingRecords&&r&&\"Loading...\"===t.sLoadingRecords&&dt(e,e,\"sZeroRecords\",\"sLoadingRecords\"),e.sInfoThousands&&(e.sThousands=e.sInfoThousands);var o=e.sDecimal;o&&n!==o&&Wt(o)}}l.util={throttle:function(e,t){var n,o,i=t!==r?t:200;return function(){var t=this,s=+new Date,a=arguments;n&&s<n+i?(clearTimeout(o),o=setTimeout((function(){n=r,e.apply(t,a)}),i)):(n=s,e.apply(t,a))}},escapeRegex:function(e){return e.replace(m,\"\\\\$1\")}};var T=function(e,t,n){e[t]!==r&&(e[n]=e[t])};function F(e){T(e,\"ordering\",\"bSort\"),T(e,\"orderMulti\",\"bSortMulti\"),T(e,\"orderClasses\",\"bSortClasses\"),T(e,\"orderCellsTop\",\"bSortCellsTop\"),T(e,\"order\",\"aaSorting\"),T(e,\"orderFixed\",\"aaSortingFixed\"),T(e,\"paging\",\"bPaginate\"),T(e,\"pagingType\",\"sPaginationType\"),T(e,\"pageLength\",\"iDisplayLength\"),T(e,\"searching\",\"bFilter\"),\"boolean\"==typeof e.sScrollX&&(e.sScrollX=e.sScrollX?\"100%\":\"\"),\"boolean\"==typeof e.scrollX&&(e.scrollX=e.scrollX?\"100%\":\"\");var t=e.aoSearchCols;if(t)for(var n=0,r=t.length;n<r;n++)t[n]&&L(l.models.oSearch,t[n])}function O(t){T(t,\"orderable\",\"bSortable\"),T(t,\"orderData\",\"aDataSort\"),T(t,\"orderSequence\",\"asSorting\"),T(t,\"orderDataType\",\"sortDataType\");var n=t.aDataSort;\"number\"!=typeof n||e.isArray(n)||(t.aDataSort=[n])}function B(n){if(!l.__browser){var r={};l.__browser=r;var o=e(\"<div/>\").css({position:\"fixed\",top:0,left:-1*e(t).scrollLeft(),height:1,width:1,overflow:\"hidden\"}).append(e(\"<div/>\").css({position:\"absolute\",top:1,left:1,width:100,overflow:\"scroll\"}).append(e(\"<div/>\").css({width:\"100%\",height:10}))).appendTo(\"body\"),i=o.children(),s=i.children();r.barWidth=i[0].offsetWidth-i[0].clientWidth,r.bScrollOversize=100===s[0].offsetWidth&&100!==i[0].clientWidth,r.bScrollbarLeft=1!==Math.round(s.offset().left),r.bBounding=!!o[0].getBoundingClientRect().width,o.remove()}e.extend(n.oBrowser,l.__browser),n.oScroll.iBarWidth=l.__browser.barWidth}function R(e,t,n,o,i,s){var a,l=o,c=!1;for(n!==r&&(a=n,c=!0);l!==i;)e.hasOwnProperty(l)&&(a=c?t(a,e[l],l,e):e[l],c=!0,l+=s);return a}function $(t,r){var o=l.defaults.column,i=t.aoColumns.length,s=e.extend({},l.models.oColumn,o,{nTh:r||n.createElement(\"th\"),sTitle:o.sTitle?o.sTitle:r?r.innerHTML:\"\",aDataSort:o.aDataSort?o.aDataSort:[i],mData:o.mData?o.mData:i,idx:i});t.aoColumns.push(s);var a=t.aoPreSearchCols;a[i]=e.extend({},l.models.oSearch,a[i]),N(t,i,e(r).data())}function N(t,n,o){var i=t.aoColumns[n],s=t.oClasses,a=e(i.nTh);if(!i.sWidthOrig){i.sWidthOrig=a.attr(\"width\")||null;var c=(a.attr(\"style\")||\"\").match(/width:\\s*(\\d+[pxem%]+)/);c&&(i.sWidthOrig=c[1])}o!==r&&null!==o&&(O(o),L(l.defaults.column,o),o.mDataProp===r||o.mData||(o.mData=o.mDataProp),o.sType&&(i._sManualType=o.sType),o.className&&!o.sClass&&(o.sClass=o.className),o.sClass&&a.addClass(o.sClass),e.extend(i,o),dt(i,o,\"sWidth\",\"sWidthOrig\"),o.iDataSort!==r&&(i.aDataSort=[o.iDataSort]),dt(i,o,\"aDataSort\"));var u=i.mData,d=ee(u),h=i.mRender?ee(i.mRender):null,m=function(e){return\"string\"==typeof e&&-1!==e.indexOf(\"@\")};i._bAttrSrc=e.isPlainObject(u)&&(m(u.sort)||m(u.type)||m(u.filter)),i._setter=null,i.fnGetData=function(e,t,n){var o=d(e,t,r,n);return h&&t?h(o,t,e,n):o},i.fnSetData=function(e,t,n){return te(u)(e,t,n)},\"number\"!=typeof u&&(t._rowReadObject=!0),t.oFeatures.bSort||(i.bSortable=!1,a.addClass(s.sSortableNone));var f=-1!==e.inArray(\"asc\",i.asSorting),p=-1!==e.inArray(\"desc\",i.asSorting);i.bSortable&&(f||p)?f&&!p?(i.sSortingClass=s.sSortableAsc,i.sSortingClassJUI=s.sSortJUIAscAllowed):!f&&p?(i.sSortingClass=s.sSortableDesc,i.sSortingClassJUI=s.sSortJUIDescAllowed):(i.sSortingClass=s.sSortable,i.sSortingClassJUI=s.sSortJUI):(i.sSortingClass=s.sSortableNone,i.sSortingClassJUI=\"\")}function Y(e){if(!1!==e.oFeatures.bAutoWidth){var t=e.aoColumns;Ge(e);for(var n=0,r=t.length;n<r;n++)t[n].nTh.style.width=t[n].sWidth}var o=e.oScroll;\"\"===o.sY&&\"\"===o.sX||Ue(e),pt(e,null,\"column-sizing\",[e])}function P(e,t){var n=j(e,\"bVisible\");return\"number\"==typeof n[t]?n[t]:null}function I(t,n){var r=j(t,\"bVisible\"),o=e.inArray(n,r);return-1!==o?o:null}function H(t){var n=0;return e.each(t.aoColumns,(function(t,r){r.bVisible&&\"none\"!==e(r.nTh).css(\"display\")&&n++})),n}function j(t,n){var r=[];return e.map(t.aoColumns,(function(e,t){e[n]&&r.push(t)})),r}function W(e){var t,n,o,i,s,a,c,u,d,h=e.aoColumns,m=e.aoData,f=l.ext.type.detect;for(t=0,n=h.length;t<n;t++)if(d=[],!(c=h[t]).sType&&c._sManualType)c.sType=c._sManualType;else if(!c.sType){for(o=0,i=f.length;o<i;o++){for(s=0,a=m.length;s<a&&(d[s]===r&&(d[s]=K(e,s,t,\"type\")),(u=f[o](d[s],e))||o===f.length-1)&&\"html\"!==u;s++);if(u){c.sType=u;break}}c.sType||(c.sType=\"string\")}}function z(t,n,o,i){var s,a,l,c,u,d,h,m=t.aoColumns;if(n)for(s=n.length-1;s>=0;s--){var f=(h=n[s]).targets!==r?h.targets:h.aTargets;for(e.isArray(f)||(f=[f]),l=0,c=f.length;l<c;l++)if(\"number\"==typeof f[l]&&f[l]>=0){for(;m.length<=f[l];)$(t);i(f[l],h)}else if(\"number\"==typeof f[l]&&f[l]<0)i(m.length+f[l],h);else if(\"string\"==typeof f[l])for(u=0,d=m.length;u<d;u++)(\"_all\"==f[l]||e(m[u].nTh).hasClass(f[l]))&&i(u,h)}if(o)for(s=0,a=o.length;s<a;s++)i(s,o[s])}function U(t,n,o,i){var s=t.aoData.length,a=e.extend(!0,{},l.models.oRow,{src:o?\"dom\":\"data\",idx:s});a._aData=n,t.aoData.push(a);for(var c=t.aoColumns,u=0,d=c.length;u<d;u++)c[u].sType=null;t.aiDisplayMaster.push(s);var h=t.rowIdFn(n);return h!==r&&(t.aIds[h]=a),!o&&t.oFeatures.bDeferRender||ae(t,s,o,i),s}function V(t,n){var r;return n instanceof e||(n=e(n)),n.map((function(e,n){return r=se(t,n),U(t,r.data,n,r.cells)}))}function q(e,t){return t._DT_RowIndex!==r?t._DT_RowIndex:null}function G(t,n,r){return e.inArray(r,t.aoData[n].anCells)}function K(e,t,n,o){var i=e.iDraw,s=e.aoColumns[n],a=e.aoData[t]._aData,l=s.sDefaultContent,c=s.fnGetData(a,o,{settings:e,row:t,col:n});if(c===r)return e.iDrawError!=i&&null===l&&(ut(e,0,\"Requested unknown parameter \"+(\"function\"==typeof s.mData?\"{function}\":\"'\"+s.mData+\"'\")+\" for row \"+t+\", column \"+n,4),e.iDrawError=i),l;if(c!==a&&null!==c||null===l||o===r){if(\"function\"==typeof c)return c.call(a)}else c=l;return null===c&&\"display\"==o?\"\":c}function X(e,t,n,r){var o=e.aoColumns[n],i=e.aoData[t]._aData;o.fnSetData(i,r,{settings:e,row:t,col:n})}var J=/\\[.*?\\]$/,Q=/\\(\\)$/;function Z(t){return e.map(t.match(/(\\\\.|[^\\.])+/g)||[\"\"],(function(e){return e.replace(/\\\\\\./g,\".\")}))}function ee(t){if(e.isPlainObject(t)){var n={};return e.each(t,(function(e,t){t&&(n[e]=ee(t))})),function(e,t,o,i){var s=n[t]||n._;return s!==r?s(e,t,o,i):e}}if(null===t)return function(e){return e};if(\"function\"==typeof t)return function(e,n,r,o){return t(e,n,r,o)};if(\"string\"!=typeof t||-1===t.indexOf(\".\")&&-1===t.indexOf(\"[\")&&-1===t.indexOf(\"(\"))return function(e,n){return e[t]};var o=function(t,n,i){var s,a,l,c;if(\"\"!==i)for(var u=Z(i),d=0,h=u.length;d<h;d++){if(s=u[d].match(J),a=u[d].match(Q),s){if(u[d]=u[d].replace(J,\"\"),\"\"!==u[d]&&(t=t[u[d]]),l=[],u.splice(0,d+1),c=u.join(\".\"),e.isArray(t))for(var m=0,f=t.length;m<f;m++)l.push(o(t[m],n,c));var p=s[0].substring(1,s[0].length-1);t=\"\"===p?l:l.join(p);break}if(a)u[d]=u[d].replace(Q,\"\"),t=t[u[d]]();else{if(null===t||t[u[d]]===r)return r;t=t[u[d]]}}return t};return function(e,n){return o(e,n,t)}}function te(t){if(e.isPlainObject(t))return te(t._);if(null===t)return function(){};if(\"function\"==typeof t)return function(e,n,r){t(e,\"set\",n,r)};if(\"string\"!=typeof t||-1===t.indexOf(\".\")&&-1===t.indexOf(\"[\")&&-1===t.indexOf(\"(\"))return function(e,n){e[t]=n};var n=function(t,o,i){for(var s,a,l,c,u,d=Z(i),h=d[d.length-1],m=0,f=d.length-1;m<f;m++){if(a=d[m].match(J),l=d[m].match(Q),a){if(d[m]=d[m].replace(J,\"\"),t[d[m]]=[],(s=d.slice()).splice(0,m+1),u=s.join(\".\"),e.isArray(o))for(var p=0,g=o.length;p<g;p++)n(c={},o[p],u),t[d[m]].push(c);else t[d[m]]=o;return}l&&(d[m]=d[m].replace(Q,\"\"),t=t[d[m]](o)),null!==t[d[m]]&&t[d[m]]!==r||(t[d[m]]={}),t=t[d[m]]}h.match(Q)?t=t[h.replace(Q,\"\")](o):t[h.replace(J,\"\")]=o};return function(e,r){return n(e,r,t)}}function ne(e){return w(e.aoData,\"_aData\")}function re(e){e.aoData.length=0,e.aiDisplayMaster.length=0,e.aiDisplay.length=0,e.aIds={}}function oe(e,t,n){for(var o=-1,i=0,s=e.length;i<s;i++)e[i]==t?o=i:e[i]>t&&e[i]--;-1!=o&&n===r&&e.splice(o,1)}function ie(e,t,n,o){var i,s,a=e.aoData[t],l=function(n,r){for(;n.childNodes.length;)n.removeChild(n.firstChild);n.innerHTML=K(e,t,r,\"display\")};if(\"dom\"!==n&&(n&&\"auto\"!==n||\"dom\"!==a.src)){var c=a.anCells;if(c)if(o!==r)l(c[o],o);else for(i=0,s=c.length;i<s;i++)l(c[i],i)}else a._aData=se(e,a,o,o===r?r:a._aData).data;a._aSortData=null,a._aFilterData=null;var u=e.aoColumns;if(o!==r)u[o].sType=null;else{for(i=0,s=u.length;i<s;i++)u[i].sType=null;le(e,a)}}function se(t,n,o,i){var s,a,l,c=[],u=n.firstChild,d=0,h=t.aoColumns,m=t._rowReadObject;i=i!==r?i:m?{}:[];var f=function(e,t){if(\"string\"==typeof e){var n=e.indexOf(\"@\");if(-1!==n){var r=e.substring(n+1);te(e)(i,t.getAttribute(r))}}},p=function(t){o!==r&&o!==d||(a=h[d],l=e.trim(t.innerHTML),a&&a._bAttrSrc?(te(a.mData._)(i,l),f(a.mData.sort,t),f(a.mData.type,t),f(a.mData.filter,t)):m?(a._setter||(a._setter=te(a.mData)),a._setter(i,l)):i[d]=l);d++};if(u)for(;u;)\"TD\"!=(s=u.nodeName.toUpperCase())&&\"TH\"!=s||(p(u),c.push(u)),u=u.nextSibling;else for(var g=0,v=(c=n.anCells).length;g<v;g++)p(c[g]);var y=n.firstChild?n:n.nTr;if(y){var b=y.getAttribute(\"id\");b&&te(t.rowId)(i,b)}return{data:i,cells:c}}function ae(t,r,o,i){var s,a,l,c,u,d=t.aoData[r],h=d._aData,m=[];if(null===d.nTr){for(s=o||n.createElement(\"tr\"),d.nTr=s,d.anCells=m,s._DT_RowIndex=r,le(t,d),c=0,u=t.aoColumns.length;c<u;c++)l=t.aoColumns[c],(a=o?i[c]:n.createElement(l.sCellType))._DT_CellIndex={row:r,column:c},m.push(a),o&&!l.mRender&&l.mData===c||e.isPlainObject(l.mData)&&l.mData._===c+\".display\"||(a.innerHTML=K(t,r,c,\"display\")),l.sClass&&(a.className+=\" \"+l.sClass),l.bVisible&&!o?s.appendChild(a):!l.bVisible&&o&&a.parentNode.removeChild(a),l.fnCreatedCell&&l.fnCreatedCell.call(t.oInstance,a,K(t,r,c),h,r,c);pt(t,\"aoRowCreatedCallback\",null,[s,h,r,m])}d.nTr.setAttribute(\"role\",\"row\")}function le(t,n){var r=n.nTr,o=n._aData;if(r){var i=t.rowIdFn(o);if(i&&(r.id=i),o.DT_RowClass){var s=o.DT_RowClass.split(\" \");n.__rowc=n.__rowc?A(n.__rowc.concat(s)):s,e(r).removeClass(n.__rowc.join(\" \")).addClass(o.DT_RowClass)}o.DT_RowAttr&&e(r).attr(o.DT_RowAttr),o.DT_RowData&&e(r).data(o.DT_RowData)}}function ce(t){var n,r,o,i,s,a=t.nTHead,l=t.nTFoot,c=0===e(\"th, td\",a).length,u=t.oClasses,d=t.aoColumns;for(c&&(i=e(\"<tr/>\").appendTo(a)),n=0,r=d.length;n<r;n++)s=d[n],o=e(s.nTh).addClass(s.sClass),c&&o.appendTo(i),t.oFeatures.bSort&&(o.addClass(s.sSortingClass),!1!==s.bSortable&&(o.attr(\"tabindex\",t.iTabIndex).attr(\"aria-controls\",t.sTableId),ot(t,s.nTh,n))),s.sTitle!=o[0].innerHTML&&o.html(s.sTitle),vt(t,\"header\")(t,o,s,u);if(c&&fe(t.aoHeader,a),e(a).find(\">tr\").attr(\"role\",\"row\"),e(a).find(\">tr>th, >tr>td\").addClass(u.sHeaderTH),e(l).find(\">tr>th, >tr>td\").addClass(u.sFooterTH),null!==l){var h=t.aoFooter[0];for(n=0,r=h.length;n<r;n++)(s=d[n]).nTf=h[n].cell,s.sClass&&e(s.nTf).addClass(s.sClass)}}function ue(t,n,o){var i,s,a,l,c,u,d,h,m,f=[],p=[],g=t.aoColumns.length;if(n){for(o===r&&(o=!1),i=0,s=n.length;i<s;i++){for(f[i]=n[i].slice(),f[i].nTr=n[i].nTr,a=g-1;a>=0;a--)t.aoColumns[a].bVisible||o||f[i].splice(a,1);p.push([])}for(i=0,s=f.length;i<s;i++){if(d=f[i].nTr)for(;u=d.firstChild;)d.removeChild(u);for(a=0,l=f[i].length;a<l;a++)if(h=1,m=1,p[i][a]===r){for(d.appendChild(f[i][a].cell),p[i][a]=1;f[i+h]!==r&&f[i][a].cell==f[i+h][a].cell;)p[i+h][a]=1,h++;for(;f[i][a+m]!==r&&f[i][a].cell==f[i][a+m].cell;){for(c=0;c<h;c++)p[i+c][a+m]=1;m++}e(f[i][a].cell).attr(\"rowspan\",h).attr(\"colspan\",m)}}}}function de(t){var n=pt(t,\"aoPreDrawCallback\",\"preDraw\",[t]);if(-1===e.inArray(!1,n)){var o=[],i=0,s=t.asStripeClasses,a=s.length,l=(t.aoOpenRows.length,t.oLanguage),c=t.iInitDisplayStart,u=\"ssp\"==yt(t),d=t.aiDisplay;t.bDrawing=!0,c!==r&&-1!==c&&(t._iDisplayStart=u?c:c>=t.fnRecordsDisplay()?0:c,t.iInitDisplayStart=-1);var h=t._iDisplayStart,m=t.fnDisplayEnd();if(t.bDeferLoading)t.bDeferLoading=!1,t.iDraw++,We(t,!1);else if(u){if(!t.bDestroying&&!ve(t))return}else t.iDraw++;if(0!==d.length)for(var f=u?0:h,p=u?t.aoData.length:m,g=f;g<p;g++){var v=d[g],y=t.aoData[v];null===y.nTr&&ae(t,v);var b=y.nTr;if(0!==a){var _=s[i%a];y._sRowStripe!=_&&(e(b).removeClass(y._sRowStripe).addClass(_),y._sRowStripe=_)}pt(t,\"aoRowCallback\",null,[b,y._aData,i,g,v]),o.push(b),i++}else{var w=l.sZeroRecords;1==t.iDraw&&\"ajax\"==yt(t)?w=l.sLoadingRecords:l.sEmptyTable&&0===t.fnRecordsTotal()&&(w=l.sEmptyTable),o[0]=e(\"<tr/>\",{class:a?s[0]:\"\"}).append(e(\"<td />\",{valign:\"top\",colSpan:H(t),class:t.oClasses.sRowEmpty}).html(w))[0]}pt(t,\"aoHeaderCallback\",\"header\",[e(t.nTHead).children(\"tr\")[0],ne(t),h,m,d]),pt(t,\"aoFooterCallback\",\"footer\",[e(t.nTFoot).children(\"tr\")[0],ne(t),h,m,d]);var x=e(t.nTBody);x.children().detach(),x.append(e(o)),pt(t,\"aoDrawCallback\",\"draw\",[t]),t.bSorted=!1,t.bFiltered=!1,t.bDrawing=!1}else We(t,!1)}function he(e,t){var n=e.oFeatures,r=n.bSort,o=n.bFilter;r&&tt(e),o?xe(e,e.oPreviousSearch):e.aiDisplay=e.aiDisplayMaster.slice(),!0!==t&&(e._iDisplayStart=0),e._drawHold=t,de(e),e._drawHold=!1}function me(t){var n=t.oClasses,r=e(t.nTable),o=e(\"<div/>\").insertBefore(r),i=t.oFeatures,s=e(\"<div/>\",{id:t.sTableId+\"_wrapper\",class:n.sWrapper+(t.nTFoot?\"\":\" \"+n.sNoFooter)});t.nHolding=o[0],t.nTableWrapper=s[0],t.nTableReinsertBefore=t.nTable.nextSibling;for(var a,c,u,d,h,m,f=t.sDom.split(\"\"),p=0;p<f.length;p++){if(a=null,\"<\"==(c=f[p])){if(u=e(\"<div/>\")[0],\"'\"==(d=f[p+1])||'\"'==d){for(h=\"\",m=2;f[p+m]!=d;)h+=f[p+m],m++;if(\"H\"==h?h=n.sJUIHeader:\"F\"==h&&(h=n.sJUIFooter),-1!=h.indexOf(\".\")){var g=h.split(\".\");u.id=g[0].substr(1,g[0].length-1),u.className=g[1]}else\"#\"==h.charAt(0)?u.id=h.substr(1,h.length-1):u.className=h;p+=m}s.append(u),s=e(u)}else if(\">\"==c)s=s.parent();else if(\"l\"==c&&i.bPaginate&&i.bLengthChange)a=Pe(t);else if(\"f\"==c&&i.bFilter)a=we(t);else if(\"r\"==c&&i.bProcessing)a=je(t);else if(\"t\"==c)a=ze(t);else if(\"i\"==c&&i.bInfo)a=Oe(t);else if(\"p\"==c&&i.bPaginate)a=Ie(t);else if(0!==l.ext.feature.length)for(var v=l.ext.feature,y=0,b=v.length;y<b;y++)if(c==v[y].cFeature){a=v[y].fnInit(t);break}if(a){var _=t.aanFeatures;_[c]||(_[c]=[]),_[c].push(a),s.append(a)}}o.replaceWith(s),t.nHolding=null}function fe(t,n){var r,o,i,s,a,l,c,u,d,h,m,f=e(n).children(\"tr\"),p=function(e,t,n){for(var r=e[t];r[n];)n++;return n};for(t.splice(0,t.length),i=0,l=f.length;i<l;i++)t.push([]);for(i=0,l=f.length;i<l;i++)for(u=0,o=(r=f[i]).firstChild;o;){if(\"TD\"==o.nodeName.toUpperCase()||\"TH\"==o.nodeName.toUpperCase())for(d=(d=1*o.getAttribute(\"colspan\"))&&0!==d&&1!==d?d:1,h=(h=1*o.getAttribute(\"rowspan\"))&&0!==h&&1!==h?h:1,c=p(t,i,u),m=1===d,a=0;a<d;a++)for(s=0;s<h;s++)t[i+s][c+a]={cell:o,unique:m},t[i+s].nTr=r;o=o.nextSibling}}function pe(e,t,n){var r=[];n||(n=e.aoHeader,t&&fe(n=[],t));for(var o=0,i=n.length;o<i;o++)for(var s=0,a=n[o].length;s<a;s++)!n[o][s].unique||r[s]&&e.bSortCellsTop||(r[s]=n[o][s].cell);return r}function ge(t,n,r){if(pt(t,\"aoServerParams\",\"serverParams\",[n]),n&&e.isArray(n)){var o={},i=/(.*?)\\[\\]$/;e.each(n,(function(e,t){var n=t.name.match(i);if(n){var r=n[0];o[r]||(o[r]=[]),o[r].push(t.value)}else o[t.name]=t.value})),n=o}var s,a=t.ajax,l=t.oInstance,c=function(e){pt(t,null,\"xhr\",[t,e,t.jqXHR]),r(e)};if(e.isPlainObject(a)&&a.data){var u=\"function\"==typeof(s=a.data)?s(n,t):s;n=\"function\"==typeof s&&u?u:e.extend(!0,n,u),delete a.data}var d={data:n,success:function(e){var n=e.error||e.sError;n&&ut(t,0,n),t.json=e,c(e)},dataType:\"json\",cache:!1,type:t.sServerMethod,error:function(n,r,o){var i=pt(t,null,\"xhr\",[t,null,t.jqXHR]);-1===e.inArray(!0,i)&&(\"parsererror\"==r?ut(t,0,\"Invalid JSON response\",1):4===n.readyState&&ut(t,0,\"Ajax error\",7)),We(t,!1)}};t.oAjaxData=n,pt(t,null,\"preXhr\",[t,n]),t.fnServerData?t.fnServerData.call(l,t.sAjaxSource,e.map(n,(function(e,t){return{name:t,value:e}})),c,t):t.sAjaxSource||\"string\"==typeof a?t.jqXHR=e.ajax(e.extend(d,{url:a||t.sAjaxSource})):\"function\"==typeof a?t.jqXHR=a.call(l,n,c,t):(t.jqXHR=e.ajax(e.extend(d,a)),a.data=s)}function ve(e){return!e.bAjaxDataGet||(e.iDraw++,We(e,!0),ge(e,ye(e),(function(t){be(e,t)})),!1)}function ye(t){var n,r,o,i,s=t.aoColumns,a=s.length,c=t.oFeatures,u=t.oPreviousSearch,d=t.aoPreSearchCols,h=[],m=et(t),f=t._iDisplayStart,p=!1!==c.bPaginate?t._iDisplayLength:-1,g=function(e,t){h.push({name:e,value:t})};g(\"sEcho\",t.iDraw),g(\"iColumns\",a),g(\"sColumns\",w(s,\"sName\").join(\",\")),g(\"iDisplayStart\",f),g(\"iDisplayLength\",p);var v={draw:t.iDraw,columns:[],order:[],start:f,length:p,search:{value:u.sSearch,regex:u.bRegex}};for(n=0;n<a;n++)o=s[n],i=d[n],r=\"function\"==typeof o.mData?\"function\":o.mData,v.columns.push({data:r,name:o.sName,searchable:o.bSearchable,orderable:o.bSortable,search:{value:i.sSearch,regex:i.bRegex}}),g(\"mDataProp_\"+n,r),c.bFilter&&(g(\"sSearch_\"+n,i.sSearch),g(\"bRegex_\"+n,i.bRegex),g(\"bSearchable_\"+n,o.bSearchable)),c.bSort&&g(\"bSortable_\"+n,o.bSortable);c.bFilter&&(g(\"sSearch\",u.sSearch),g(\"bRegex\",u.bRegex)),c.bSort&&(e.each(m,(function(e,t){v.order.push({column:t.col,dir:t.dir}),g(\"iSortCol_\"+e,t.col),g(\"sSortDir_\"+e,t.dir)})),g(\"iSortingCols\",m.length));var y=l.ext.legacy.ajax;return null===y?t.sAjaxSource?h:v:y?h:v}function be(e,t){var n=function(e,n){return t[e]!==r?t[e]:t[n]},o=_e(e,t),i=n(\"sEcho\",\"draw\"),s=n(\"iTotalRecords\",\"recordsTotal\"),a=n(\"iTotalDisplayRecords\",\"recordsFiltered\");if(i){if(1*i<e.iDraw)return;e.iDraw=1*i}re(e),e._iRecordsTotal=parseInt(s,10),e._iRecordsDisplay=parseInt(a,10);for(var l=0,c=o.length;l<c;l++)U(e,o[l]);e.aiDisplay=e.aiDisplayMaster.slice(),e.bAjaxDataGet=!1,de(e),e._bInitComplete||Ne(e,t),e.bAjaxDataGet=!0,We(e,!1)}function _e(t,n){var o=e.isPlainObject(t.ajax)&&t.ajax.dataSrc!==r?t.ajax.dataSrc:t.sAjaxDataProp;return\"data\"===o?n.aaData||n[o]:\"\"!==o?ee(o)(n):n}function we(t){var r=t.oClasses,o=t.sTableId,i=t.oLanguage,s=t.oPreviousSearch,a=t.aanFeatures,l='<input type=\"search\" class=\"'+r.sFilterInput+'\"/>',c=i.sSearch;c=c.match(/_INPUT_/)?c.replace(\"_INPUT_\",l):c+l;var u=e(\"<div/>\",{id:a.f?null:o+\"_filter\",class:r.sFilter}).append(e(\"<label/>\").append(c)),d=function(){a.f;var e=this.value?this.value:\"\";e!=s.sSearch&&(xe(t,{sSearch:e,bRegex:s.bRegex,bSmart:s.bSmart,bCaseInsensitive:s.bCaseInsensitive}),t._iDisplayStart=0,de(t))},h=null!==t.searchDelay?t.searchDelay:\"ssp\"===yt(t)?400:0,m=e(\"input\",u).val(s.sSearch).attr(\"placeholder\",i.sSearchPlaceholder).on(\"keyup.DT search.DT input.DT paste.DT cut.DT\",h?Ke(d,h):d).on(\"keypress.DT\",(function(e){if(13==e.keyCode)return!1})).attr(\"aria-controls\",o);return e(t.nTable).on(\"search.dt.DT\",(function(e,r){if(t===r)try{m[0]!==n.activeElement&&m.val(s.sSearch)}catch(e){}})),u[0]}function xe(e,t,n){var o=e.oPreviousSearch,i=e.aoPreSearchCols,s=function(e){o.sSearch=e.sSearch,o.bRegex=e.bRegex,o.bSmart=e.bSmart,o.bCaseInsensitive=e.bCaseInsensitive},a=function(e){return e.bEscapeRegex!==r?!e.bEscapeRegex:e.bRegex};if(W(e),\"ssp\"!=yt(e)){De(e,t.sSearch,n,a(t),t.bSmart,t.bCaseInsensitive),s(t);for(var l=0;l<i.length;l++)ke(e,i[l].sSearch,l,a(i[l]),i[l].bSmart,i[l].bCaseInsensitive);Ce(e)}else s(t);e.bFiltered=!0,pt(e,null,\"search\",[e])}function Ce(t){for(var n,r,o=l.ext.search,i=t.aiDisplay,s=0,a=o.length;s<a;s++){for(var c=[],u=0,d=i.length;u<d;u++)r=i[u],n=t.aoData[r],o[s](t,n._aFilterData,r,n._aData,u)&&c.push(r);i.length=0,e.merge(i,c)}}function ke(e,t,n,r,o,i){if(\"\"!==t){for(var s,a=[],l=e.aiDisplay,c=Se(t,r,o,i),u=0;u<l.length;u++)s=e.aoData[l[u]]._aFilterData[n],c.test(s)&&a.push(l[u]);e.aiDisplay=a}}function De(e,t,n,r,o,i){var s,a,c,u=Se(t,r,o,i),d=e.oPreviousSearch.sSearch,h=e.aiDisplayMaster,m=[];if(0!==l.ext.search.length&&(n=!0),a=Ee(e),t.length<=0)e.aiDisplay=h.slice();else{for((a||n||d.length>t.length||0!==t.indexOf(d)||e.bSorted)&&(e.aiDisplay=h.slice()),s=e.aiDisplay,c=0;c<s.length;c++)u.test(e.aoData[s[c]]._sFilterRow)&&m.push(s[c]);e.aiDisplay=m}}function Se(t,n,r,o){if(t=n?t:Ae(t),r){var i=e.map(t.match(/\"[^\"]+\"|[^ ]+/g)||[\"\"],(function(e){if('\"'===e.charAt(0)){var t=e.match(/^\"(.*)\"$/);e=t?t[1]:e}return e.replace('\"',\"\")}));t=\"^(?=.*?\"+i.join(\")(?=.*?\")+\").*$\"}return new RegExp(t,o?\"i\":\"\")}var Ae=l.util.escapeRegex,Me=e(\"<div>\")[0],Le=Me.textContent!==r;function Ee(e){var t,n,r,o,i,s,a,c,u=e.aoColumns,d=l.ext.type.search,h=!1;for(n=0,o=e.aoData.length;n<o;n++)if(!(c=e.aoData[n])._aFilterData){for(s=[],r=0,i=u.length;r<i;r++)(t=u[r]).bSearchable?(a=K(e,n,r,\"filter\"),d[t.sType]&&(a=d[t.sType](a)),null===a&&(a=\"\"),\"string\"!=typeof a&&a.toString&&(a=a.toString())):a=\"\",a.indexOf&&-1!==a.indexOf(\"&\")&&(Me.innerHTML=a,a=Le?Me.textContent:Me.innerText),a.replace&&(a=a.replace(/[\\r\\n]/g,\"\")),s.push(a);c._aFilterData=s,c._sFilterRow=s.join(\"  \"),h=!0}return h}function Te(e){return{search:e.sSearch,smart:e.bSmart,regex:e.bRegex,caseInsensitive:e.bCaseInsensitive}}function Fe(e){return{sSearch:e.search,bSmart:e.smart,bRegex:e.regex,bCaseInsensitive:e.caseInsensitive}}function Oe(t){var n=t.sTableId,r=t.aanFeatures.i,o=e(\"<div/>\",{class:t.oClasses.sInfo,id:r?null:n+\"_info\"});return r||(t.aoDrawCallback.push({fn:Be,sName:\"information\"}),o.attr(\"role\",\"status\").attr(\"aria-live\",\"polite\"),e(t.nTable).attr(\"aria-describedby\",n+\"_info\")),o[0]}function Be(t){var n=t.aanFeatures.i;if(0!==n.length){var r=t.oLanguage,o=t._iDisplayStart+1,i=t.fnDisplayEnd(),s=t.fnRecordsTotal(),a=t.fnRecordsDisplay(),l=a?r.sInfo:r.sInfoEmpty;a!==s&&(l+=\" \"+r.sInfoFiltered),l=Re(t,l+=r.sInfoPostFix);var c=r.fnInfoCallback;null!==c&&(l=c.call(t.oInstance,t,o,i,s,a,l)),e(n).html(l)}}function Re(e,t){var n=e.fnFormatNumber,r=e._iDisplayStart+1,o=e._iDisplayLength,i=e.fnRecordsDisplay(),s=-1===o;return t.replace(/_START_/g,n.call(e,r)).replace(/_END_/g,n.call(e,e.fnDisplayEnd())).replace(/_MAX_/g,n.call(e,e.fnRecordsTotal())).replace(/_TOTAL_/g,n.call(e,i)).replace(/_PAGE_/g,n.call(e,s?1:Math.ceil(r/o))).replace(/_PAGES_/g,n.call(e,s?1:Math.ceil(i/o)))}function $e(e){var t,n,r,o=e.iInitDisplayStart,i=e.aoColumns,s=e.oFeatures,a=e.bDeferLoading;if(e.bInitialised){for(me(e),ce(e),ue(e,e.aoHeader),ue(e,e.aoFooter),We(e,!0),s.bAutoWidth&&Ge(e),t=0,n=i.length;t<n;t++)(r=i[t]).sWidth&&(r.nTh.style.width=Ze(r.sWidth));pt(e,null,\"preInit\",[e]),he(e);var l=yt(e);(\"ssp\"!=l||a)&&(\"ajax\"==l?ge(e,[],(function(n){var r=_e(e,n);for(t=0;t<r.length;t++)U(e,r[t]);e.iInitDisplayStart=o,he(e),We(e,!1),Ne(e,n)}),e):(We(e,!1),Ne(e)))}else setTimeout((function(){$e(e)}),200)}function Ne(e,t){e._bInitComplete=!0,(t||e.oInit.aaData)&&Y(e),pt(e,null,\"plugin-init\",[e,t]),pt(e,\"aoInitComplete\",\"init\",[e,t])}function Ye(e,t){var n=parseInt(t,10);e._iDisplayLength=n,gt(e),pt(e,null,\"length\",[e,n])}function Pe(t){for(var n=t.oClasses,r=t.sTableId,o=t.aLengthMenu,i=e.isArray(o[0]),s=i?o[0]:o,a=i?o[1]:o,l=e(\"<select/>\",{name:r+\"_length\",\"aria-controls\":r,class:n.sLengthSelect}),c=0,u=s.length;c<u;c++)l[0][c]=new Option(\"number\"==typeof a[c]?t.fnFormatNumber(a[c]):a[c],s[c]);var d=e(\"<div><label/></div>\").addClass(n.sLength);return t.aanFeatures.l||(d[0].id=r+\"_length\"),d.children().append(t.oLanguage.sLengthMenu.replace(\"_MENU_\",l[0].outerHTML)),e(\"select\",d).val(t._iDisplayLength).on(\"change.DT\",(function(n){Ye(t,e(this).val()),de(t)})),e(t.nTable).on(\"length.dt.DT\",(function(n,r,o){t===r&&e(\"select\",d).val(o)})),d[0]}function Ie(t){var n=t.sPaginationType,r=l.ext.pager[n],o=\"function\"==typeof r,i=function(e){de(e)},s=e(\"<div/>\").addClass(t.oClasses.sPaging+n)[0],a=t.aanFeatures;return o||r.fnInit(t,s,i),a.p||(s.id=t.sTableId+\"_paginate\",t.aoDrawCallback.push({fn:function(e){if(o){var t,n,s=e._iDisplayStart,l=e._iDisplayLength,c=e.fnRecordsDisplay(),u=-1===l,d=u?0:Math.ceil(s/l),h=u?1:Math.ceil(c/l),m=r(d,h);for(t=0,n=a.p.length;t<n;t++)vt(e,\"pageButton\")(e,a.p[t],t,m,d,h)}else r.fnUpdate(e,i)},sName:\"pagination\"})),s}function He(e,t,n){var r=e._iDisplayStart,o=e._iDisplayLength,i=e.fnRecordsDisplay();0===i||-1===o?r=0:\"number\"==typeof t?(r=t*o)>i&&(r=0):\"first\"==t?r=0:\"previous\"==t?(r=o>=0?r-o:0)<0&&(r=0):\"next\"==t?r+o<i&&(r+=o):\"last\"==t?r=Math.floor((i-1)/o)*o:ut(e,0,\"Unknown paging action: \"+t,5);var s=e._iDisplayStart!==r;return e._iDisplayStart=r,s&&(pt(e,null,\"page\",[e]),n&&de(e)),s}function je(t){return e(\"<div/>\",{id:t.aanFeatures.r?null:t.sTableId+\"_processing\",class:t.oClasses.sProcessing}).html(t.oLanguage.sProcessing).insertBefore(t.nTable)[0]}function We(t,n){t.oFeatures.bProcessing&&e(t.aanFeatures.r).css(\"display\",n?\"block\":\"none\"),pt(t,null,\"processing\",[t,n])}function ze(t){var n=e(t.nTable);n.attr(\"role\",\"grid\");var r=t.oScroll;if(\"\"===r.sX&&\"\"===r.sY)return t.nTable;var o=r.sX,i=r.sY,s=t.oClasses,a=n.children(\"caption\"),l=a.length?a[0]._captionSide:null,c=e(n[0].cloneNode(!1)),u=e(n[0].cloneNode(!1)),d=n.children(\"tfoot\"),h=\"<div/>\",m=function(e){return e?Ze(e):null};d.length||(d=null);var f=e(h,{class:s.sScrollWrapper}).append(e(h,{class:s.sScrollHead}).css({overflow:\"hidden\",position:\"relative\",border:0,width:o?m(o):\"100%\"}).append(e(h,{class:s.sScrollHeadInner}).css({\"box-sizing\":\"content-box\",width:r.sXInner||\"100%\"}).append(c.removeAttr(\"id\").css(\"margin-left\",0).append(\"top\"===l?a:null).append(n.children(\"thead\"))))).append(e(h,{class:s.sScrollBody}).css({position:\"relative\",overflow:\"auto\",width:m(o)}).append(n));d&&f.append(e(h,{class:s.sScrollFoot}).css({overflow:\"hidden\",border:0,width:o?m(o):\"100%\"}).append(e(h,{class:s.sScrollFootInner}).append(u.removeAttr(\"id\").css(\"margin-left\",0).append(\"bottom\"===l?a:null).append(n.children(\"tfoot\")))));var p=f.children(),g=p[0],v=p[1],y=d?p[2]:null;return o&&e(v).on(\"scroll.DT\",(function(e){var t=this.scrollLeft;g.scrollLeft=t,d&&(y.scrollLeft=t)})),e(v).css(i&&r.bCollapse?\"max-height\":\"height\",i),t.nScrollHead=g,t.nScrollBody=v,t.nScrollFoot=y,t.aoDrawCallback.push({fn:Ue,sName:\"scrolling\"}),f[0]}function Ue(t){var n,o,i,s,a,l,c,u,d,h=t.oScroll,m=h.sX,f=h.sXInner,p=h.sY,g=h.iBarWidth,v=e(t.nScrollHead),y=v[0].style,b=v.children(\"div\"),_=b[0].style,x=b.children(\"table\"),C=t.nScrollBody,k=e(C),D=C.style,S=e(t.nScrollFoot).children(\"div\"),A=S.children(\"table\"),M=e(t.nTHead),L=e(t.nTable),E=L[0],T=E.style,F=t.nTFoot?e(t.nTFoot):null,O=t.oBrowser,B=O.bScrollOversize,R=w(t.aoColumns,\"nTh\"),$=[],N=[],I=[],H=[],j=function(e){var t=e.style;t.paddingTop=\"0\",t.paddingBottom=\"0\",t.borderTopWidth=\"0\",t.borderBottomWidth=\"0\",t.height=0},W=C.scrollHeight>C.clientHeight;if(t.scrollBarVis!==W&&t.scrollBarVis!==r)return t.scrollBarVis=W,void Y(t);t.scrollBarVis=W,L.children(\"thead, tfoot\").remove(),F&&(l=F.clone().prependTo(L),o=F.find(\"tr\"),s=l.find(\"tr\")),a=M.clone().prependTo(L),n=M.find(\"tr\"),i=a.find(\"tr\"),a.find(\"th, td\").removeAttr(\"tabindex\"),m||(D.width=\"100%\",v[0].style.width=\"100%\"),e.each(pe(t,a),(function(e,n){c=P(t,e),n.style.width=t.aoColumns[c].sWidth})),F&&Ve((function(e){e.style.width=\"\"}),s),d=L.outerWidth(),\"\"===m?(T.width=\"100%\",B&&(L.find(\"tbody\").height()>C.offsetHeight||\"scroll\"==k.css(\"overflow-y\"))&&(T.width=Ze(L.outerWidth()-g)),d=L.outerWidth()):\"\"!==f&&(T.width=Ze(f),d=L.outerWidth()),Ve(j,i),Ve((function(t){I.push(t.innerHTML),$.push(Ze(e(t).css(\"width\")))}),i),Ve((function(t,n){-1!==e.inArray(t,R)&&(t.style.width=$[n])}),n),e(i).height(0),F&&(Ve(j,s),Ve((function(t){H.push(t.innerHTML),N.push(Ze(e(t).css(\"width\")))}),s),Ve((function(e,t){e.style.width=N[t]}),o),e(s).height(0)),Ve((function(e,t){e.innerHTML='<div class=\"dataTables_sizing\">'+I[t]+\"</div>\",e.childNodes[0].style.height=\"0\",e.childNodes[0].style.overflow=\"hidden\",e.style.width=$[t]}),i),F&&Ve((function(e,t){e.innerHTML='<div class=\"dataTables_sizing\">'+H[t]+\"</div>\",e.childNodes[0].style.height=\"0\",e.childNodes[0].style.overflow=\"hidden\",e.style.width=N[t]}),s),L.outerWidth()<d?(u=C.scrollHeight>C.offsetHeight||\"scroll\"==k.css(\"overflow-y\")?d+g:d,B&&(C.scrollHeight>C.offsetHeight||\"scroll\"==k.css(\"overflow-y\"))&&(T.width=Ze(u-g)),\"\"!==m&&\"\"===f||ut(t,1,\"Possible column misalignment\",6)):u=\"100%\",D.width=Ze(u),y.width=Ze(u),F&&(t.nScrollFoot.style.width=Ze(u)),p||B&&(D.height=Ze(E.offsetHeight+g));var z=L.outerWidth();x[0].style.width=Ze(z),_.width=Ze(z);var U=L.height()>C.clientHeight||\"scroll\"==k.css(\"overflow-y\"),V=\"padding\"+(O.bScrollbarLeft?\"Left\":\"Right\");_[V]=U?g+\"px\":\"0px\",F&&(A[0].style.width=Ze(z),S[0].style.width=Ze(z),S[0].style[V]=U?g+\"px\":\"0px\"),L.children(\"colgroup\").insertBefore(L.children(\"thead\")),k.scroll(),!t.bSorted&&!t.bFiltered||t._drawHold||(C.scrollTop=0)}function Ve(e,t,n){for(var r,o,i=0,s=0,a=t.length;s<a;){for(r=t[s].firstChild,o=n?n[s].firstChild:null;r;)1===r.nodeType&&(n?e(r,o,i):e(r,i),i++),r=r.nextSibling,o=n?o.nextSibling:null;s++}}var qe=/<.*?>/g;function Ge(n){var r,o,i,s=n.nTable,a=n.aoColumns,l=n.oScroll,c=l.sY,u=l.sX,d=l.sXInner,h=a.length,m=j(n,\"bVisible\"),f=e(\"th\",n.nTHead),p=s.getAttribute(\"width\"),g=s.parentNode,v=!1,y=n.oBrowser,b=y.bScrollOversize,_=s.style.width;for(_&&-1!==_.indexOf(\"%\")&&(p=_),r=0;r<m.length;r++)null!==(o=a[m[r]]).sWidth&&(o.sWidth=Xe(o.sWidthOrig,g),v=!0);if(b||!v&&!u&&!c&&h==H(n)&&h==f.length)for(r=0;r<h;r++){var w=P(n,r);null!==w&&(a[w].sWidth=Ze(f.eq(r).width()))}else{var x=e(s).clone().css(\"visibility\",\"hidden\").removeAttr(\"id\");x.find(\"tbody tr\").remove();var C=e(\"<tr/>\").appendTo(x.find(\"tbody\"));for(x.find(\"thead, tfoot\").remove(),x.append(e(n.nTHead).clone()).append(e(n.nTFoot).clone()),x.find(\"tfoot th, tfoot td\").css(\"width\",\"\"),f=pe(n,x.find(\"thead\")[0]),r=0;r<m.length;r++)o=a[m[r]],f[r].style.width=null!==o.sWidthOrig&&\"\"!==o.sWidthOrig?Ze(o.sWidthOrig):\"\",o.sWidthOrig&&u&&e(f[r]).append(e(\"<div/>\").css({width:o.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(n.aoData.length)for(r=0;r<m.length;r++)o=a[i=m[r]],e(Je(n,i)).clone(!1).append(o.sContentPadding).appendTo(C);e(\"[name]\",x).removeAttr(\"name\");var k=e(\"<div/>\").css(u||c?{position:\"absolute\",top:0,left:0,height:1,right:0,overflow:\"hidden\"}:{}).append(x).appendTo(g);u&&d?x.width(d):u?(x.css(\"width\",\"auto\"),x.removeAttr(\"width\"),x.width()<g.clientWidth&&p&&x.width(g.clientWidth)):c?x.width(g.clientWidth):p&&x.width(p);var D=0;for(r=0;r<m.length;r++){var S=e(f[r]),A=S.outerWidth()-S.width(),M=y.bBounding?Math.ceil(f[r].getBoundingClientRect().width):S.outerWidth();D+=M,a[m[r]].sWidth=Ze(M-A)}s.style.width=Ze(D),k.remove()}if(p&&(s.style.width=Ze(p)),(p||u)&&!n._reszEvt){var L=function(){e(t).on(\"resize.DT-\"+n.sInstance,Ke((function(){Y(n)})))};b?setTimeout(L,1e3):L(),n._reszEvt=!0}}var Ke=l.util.throttle;function Xe(t,r){if(!t)return 0;var o=e(\"<div/>\").css(\"width\",Ze(t)).appendTo(r||n.body),i=o[0].offsetWidth;return o.remove(),i}function Je(t,n){var r=Qe(t,n);if(r<0)return null;var o=t.aoData[r];return o.nTr?o.anCells[n]:e(\"<td/>\").html(K(t,r,n,\"display\"))[0]}function Qe(e,t){for(var n,r=-1,o=-1,i=0,s=e.aoData.length;i<s;i++)(n=(n=(n=K(e,i,t,\"display\")+\"\").replace(qe,\"\")).replace(/&nbsp;/g,\" \")).length>r&&(r=n.length,o=i);return o}function Ze(e){return null===e?\"0px\":\"number\"==typeof e?e<0?\"0px\":e+\"px\":e.match(/\\d$/)?e+\"px\":e}function et(t){var n,o,i,s,a,c,u,d=[],h=t.aoColumns,m=t.aaSortingFixed,f=e.isPlainObject(m),p=[],g=function(t){t.length&&!e.isArray(t[0])?p.push(t):e.merge(p,t)};for(e.isArray(m)&&g(m),f&&m.pre&&g(m.pre),g(t.aaSorting),f&&m.post&&g(m.post),n=0;n<p.length;n++)for(o=0,i=(s=h[u=p[n][0]].aDataSort).length;o<i;o++)c=h[a=s[o]].sType||\"string\",p[n]._idx===r&&(p[n]._idx=e.inArray(p[n][1],h[a].asSorting)),d.push({src:u,col:a,dir:p[n][1],index:p[n]._idx,type:c,formatter:l.ext.type.order[c+\"-pre\"]});return d}function tt(e){var t,n,r,o,i,s=[],a=l.ext.type.order,c=e.aoData,u=(e.aoColumns,0),d=e.aiDisplayMaster;for(W(e),t=0,n=(i=et(e)).length;t<n;t++)(o=i[t]).formatter&&u++,st(e,o.col);if(\"ssp\"!=yt(e)&&0!==i.length){for(t=0,r=d.length;t<r;t++)s[d[t]]=t;u===i.length?d.sort((function(e,t){var n,r,o,a,l,u=i.length,d=c[e]._aSortData,h=c[t]._aSortData;for(o=0;o<u;o++)if(0!==(a=(n=d[(l=i[o]).col])<(r=h[l.col])?-1:n>r?1:0))return\"asc\"===l.dir?a:-a;return(n=s[e])<(r=s[t])?-1:n>r?1:0})):d.sort((function(e,t){var n,r,o,l,u,d=i.length,h=c[e]._aSortData,m=c[t]._aSortData;for(o=0;o<d;o++)if(n=h[(u=i[o]).col],r=m[u.col],0!==(l=(a[u.type+\"-\"+u.dir]||a[\"string-\"+u.dir])(n,r)))return l;return(n=s[e])<(r=s[t])?-1:n>r?1:0}))}e.bSorted=!0}function nt(e){for(var t,n,r=e.aoColumns,o=et(e),i=e.oLanguage.oAria,s=0,a=r.length;s<a;s++){var l=r[s],c=l.asSorting,u=l.sTitle.replace(/<.*?>/g,\"\"),d=l.nTh;d.removeAttribute(\"aria-sort\"),l.bSortable?(o.length>0&&o[0].col==s?(d.setAttribute(\"aria-sort\",\"asc\"==o[0].dir?\"ascending\":\"descending\"),n=c[o[0].index+1]||c[0]):n=c[0],t=u+(\"asc\"===n?i.sSortAscending:i.sSortDescending)):t=u,d.setAttribute(\"aria-label\",t)}}function rt(t,n,o,i){var s,a=t.aoColumns[n],l=t.aaSorting,c=a.asSorting,u=function(t,n){var o=t._idx;return o===r&&(o=e.inArray(t[1],c)),o+1<c.length?o+1:n?null:0};if(\"number\"==typeof l[0]&&(l=t.aaSorting=[l]),o&&t.oFeatures.bSortMulti){var d=e.inArray(n,w(l,\"0\"));-1!==d?(null===(s=u(l[d],!0))&&1===l.length&&(s=0),null===s?l.splice(d,1):(l[d][1]=c[s],l[d]._idx=s)):(l.push([n,c[0],0]),l[l.length-1]._idx=0)}else l.length&&l[0][0]==n?(s=u(l[0]),l.length=1,l[0][1]=c[s],l[0]._idx=s):(l.length=0,l.push([n,c[0]]),l[0]._idx=0);he(t),\"function\"==typeof i&&i(t)}function ot(e,t,n,r){var o=e.aoColumns[n];mt(t,{},(function(t){!1!==o.bSortable&&(e.oFeatures.bProcessing?(We(e,!0),setTimeout((function(){rt(e,n,t.shiftKey,r),\"ssp\"!==yt(e)&&We(e,!1)}),0)):rt(e,n,t.shiftKey,r))}))}function it(t){var n,r,o,i=t.aLastSort,s=t.oClasses.sSortColumn,a=et(t),l=t.oFeatures;if(l.bSort&&l.bSortClasses){for(n=0,r=i.length;n<r;n++)o=i[n].src,e(w(t.aoData,\"anCells\",o)).removeClass(s+(n<2?n+1:3));for(n=0,r=a.length;n<r;n++)o=a[n].src,e(w(t.aoData,\"anCells\",o)).addClass(s+(n<2?n+1:3))}t.aLastSort=a}function st(e,t){var n,r,o,i=e.aoColumns[t],s=l.ext.order[i.sSortDataType];s&&(n=s.call(e.oInstance,e,t,I(e,t)));for(var a=l.ext.type.order[i.sType+\"-pre\"],c=0,u=e.aoData.length;c<u;c++)(r=e.aoData[c])._aSortData||(r._aSortData=[]),r._aSortData[t]&&!s||(o=s?n[c]:K(e,c,t,\"sort\"),r._aSortData[t]=a?a(o):o)}function at(t){if(t.oFeatures.bStateSave&&!t.bDestroying){var n={time:+new Date,start:t._iDisplayStart,length:t._iDisplayLength,order:e.extend(!0,[],t.aaSorting),search:Te(t.oPreviousSearch),columns:e.map(t.aoColumns,(function(e,n){return{visible:e.bVisible,search:Te(t.aoPreSearchCols[n])}}))};pt(t,\"aoStateSaveParams\",\"stateSaveParams\",[t,n]),t.oSavedState=n,t.fnStateSaveCallback.call(t.oInstance,t,n)}}function lt(t,n,o){var i,s,a=t.aoColumns,l=function(n){if(n&&n.time){var l=pt(t,\"aoStateLoadParams\",\"stateLoadParams\",[t,n]);if(-1===e.inArray(!1,l)){var c=t.iStateDuration;if(c>0&&n.time<+new Date-1e3*c)o();else if(n.columns&&a.length!==n.columns.length)o();else{if(t.oLoadedState=e.extend(!0,{},n),n.start!==r&&(t._iDisplayStart=n.start,t.iInitDisplayStart=n.start),n.length!==r&&(t._iDisplayLength=n.length),n.order!==r&&(t.aaSorting=[],e.each(n.order,(function(e,n){t.aaSorting.push(n[0]>=a.length?[0,n[1]]:n)}))),n.search!==r&&e.extend(t.oPreviousSearch,Fe(n.search)),n.columns)for(i=0,s=n.columns.length;i<s;i++){var u=n.columns[i];u.visible!==r&&(a[i].bVisible=u.visible),u.search!==r&&e.extend(t.aoPreSearchCols[i],Fe(u.search))}pt(t,\"aoStateLoaded\",\"stateLoaded\",[t,n]),o()}}else o()}else o()};if(t.oFeatures.bStateSave){var c=t.fnStateLoadCallback.call(t.oInstance,t,l);c!==r&&l(c)}else o()}function ct(t){var n=l.settings,r=e.inArray(t,w(n,\"nTable\"));return-1!==r?n[r]:null}function ut(e,n,r,o){if(r=\"DataTables warning: \"+(e?\"table id=\"+e.sTableId+\" - \":\"\")+r,o&&(r+=\". For more information about this error, please see http://datatables.net/tn/\"+o),n)t.console&&console.log&&console.log(r);else{var i=l.ext,s=i.sErrMode||i.errMode;if(e&&pt(e,null,\"error\",[e,o,r]),\"alert\"==s)alert(r);else{if(\"throw\"==s)throw new Error(r);\"function\"==typeof s&&s(e,o,r)}}}function dt(t,n,o,i){e.isArray(o)?e.each(o,(function(r,o){e.isArray(o)?dt(t,n,o[0],o[1]):dt(t,n,o)})):(i===r&&(i=o),n[o]!==r&&(t[i]=n[o]))}function ht(t,n,r){var o;for(var i in n)n.hasOwnProperty(i)&&(o=n[i],e.isPlainObject(o)?(e.isPlainObject(t[i])||(t[i]={}),e.extend(!0,t[i],o)):r&&\"data\"!==i&&\"aaData\"!==i&&e.isArray(o)?t[i]=o.slice():t[i]=o);return t}function mt(t,n,r){e(t).on(\"click.DT\",n,(function(n){e(t).blur(),r(n)})).on(\"keypress.DT\",n,(function(e){13===e.which&&(e.preventDefault(),r(e))})).on(\"selectstart.DT\",(function(){return!1}))}function ft(e,t,n,r){n&&e[t].push({fn:n,sName:r})}function pt(t,n,r,o){var i=[];if(n&&(i=e.map(t[n].slice().reverse(),(function(e,n){return e.fn.apply(t.oInstance,o)}))),null!==r){var s=e.Event(r+\".dt\");e(t.nTable).trigger(s,o),i.push(s.result)}return i}function gt(e){var t=e._iDisplayStart,n=e.fnDisplayEnd(),r=e._iDisplayLength;t>=n&&(t=n-r),t-=t%r,(-1===r||t<0)&&(t=0),e._iDisplayStart=t}function vt(t,n){var r=t.renderer,o=l.ext.renderer[n];return e.isPlainObject(r)&&r[n]?o[r[n]]||o._:\"string\"==typeof r&&o[r]||o._}function yt(e){return e.oFeatures.bServerSide?\"ssp\":e.ajax||e.sAjaxSource?\"ajax\":\"dom\"}var bt=[],_t=Array.prototype,wt=function(t){var n,r,o=l.settings,i=e.map(o,(function(e,t){return e.nTable}));return t?t.nTable&&t.oApi?[t]:t.nodeName&&\"table\"===t.nodeName.toLowerCase()?-1!==(n=e.inArray(t,i))?[o[n]]:null:t&&\"function\"==typeof t.settings?t.settings().toArray():(\"string\"==typeof t?r=e(t):t instanceof e&&(r=t),r?r.map((function(t){return-1!==(n=e.inArray(this,i))?o[n]:null})).toArray():void 0):[]};i=function(t,n){if(!(this instanceof i))return new i(t,n);var r=[],o=function(e){var t=wt(e);t&&(r=r.concat(t))};if(e.isArray(t))for(var s=0,a=t.length;s<a;s++)o(t[s]);else o(t);this.context=A(r),n&&e.merge(this,n),this.selector={rows:null,cols:null,opts:null},i.extend(this,this,bt)},l.Api=i,e.extend(i.prototype,{any:function(){return 0!==this.count()},concat:_t.concat,context:[],count:function(){return this.flatten().length},each:function(e){for(var t=0,n=this.length;t<n;t++)e.call(this,this[t],t,this);return this},eq:function(e){var t=this.context;return t.length>e?new i(t[e],this[e]):null},filter:function(e){var t=[];if(_t.filter)t=_t.filter.call(this,e,this);else for(var n=0,r=this.length;n<r;n++)e.call(this,this[n],n,this)&&t.push(this[n]);return new i(this.context,t)},flatten:function(){var e=[];return new i(this.context,e.concat.apply(e,this.toArray()))},join:_t.join,indexOf:_t.indexOf||function(e,t){for(var n=t||0,r=this.length;n<r;n++)if(this[n]===e)return n;return-1},iterator:function(e,t,n,o){var s,a,l,c,u,d,h,m,f=[],p=this.context,g=this.selector;for(\"string\"==typeof e&&(o=n,n=t,t=e,e=!1),a=0,l=p.length;a<l;a++){var v=new i(p[a]);if(\"table\"===t)(s=n.call(v,p[a],a))!==r&&f.push(s);else if(\"columns\"===t||\"rows\"===t)(s=n.call(v,p[a],this[a],a))!==r&&f.push(s);else if(\"column\"===t||\"column-rows\"===t||\"row\"===t||\"cell\"===t)for(h=this[a],\"column-rows\"===t&&(d=At(p[a],g.opts)),c=0,u=h.length;c<u;c++)m=h[c],(s=\"cell\"===t?n.call(v,p[a],m.row,m.column,a,c):n.call(v,p[a],m,a,c,d))!==r&&f.push(s)}if(f.length||o){var y=new i(p,e?f.concat.apply([],f):f),b=y.selector;return b.rows=g.rows,b.cols=g.cols,b.opts=g.opts,y}return this},lastIndexOf:_t.lastIndexOf||function(e,t){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(e){var t=[];if(_t.map)t=_t.map.call(this,e,this);else for(var n=0,r=this.length;n<r;n++)t.push(e.call(this,this[n],n));return new i(this.context,t)},pluck:function(e){return this.map((function(t){return t[e]}))},pop:_t.pop,push:_t.push,reduce:_t.reduce||function(e,t){return R(this,e,t,0,this.length,1)},reduceRight:_t.reduceRight||function(e,t){return R(this,e,t,this.length-1,-1,-1)},reverse:_t.reverse,selector:null,shift:_t.shift,slice:function(){return new i(this.context,this)},sort:_t.sort,splice:_t.splice,toArray:function(){return _t.slice.call(this)},to$:function(){return e(this)},toJQuery:function(){return e(this)},unique:function(){return new i(this.context,A(this))},unshift:_t.unshift}),i.extend=function(t,n,r){if(r.length&&n&&(n instanceof i||n.__dt_wrapper)){var o,s,a,l=function(e,t,n){return function(){var r=t.apply(e,arguments);return i.extend(r,r,n.methodExt),r}};for(o=0,s=r.length;o<s;o++)n[(a=r[o]).name]=\"function\"==typeof a.val?l(t,a.val,a):e.isPlainObject(a.val)?{}:a.val,n[a.name].__dt_wrapper=!0,i.extend(t,n[a.name],a.propExt)}},i.register=s=function(t,n){if(e.isArray(t))for(var r=0,o=t.length;r<o;r++)i.register(t[r],n);else{var s,a,l,c,u=t.split(\".\"),d=bt,h=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n].name===t)return e[n];return null};for(s=0,a=u.length;s<a;s++){var m=h(d,l=(c=-1!==u[s].indexOf(\"()\"))?u[s].replace(\"()\",\"\"):u[s]);m||(m={name:l,val:{},methodExt:[],propExt:[]},d.push(m)),s===a-1?m.val=n:d=c?m.methodExt:m.propExt}}},i.registerPlural=a=function(t,n,o){i.register(t,o),i.register(n,(function(){var t=o.apply(this,arguments);return t===this?this:t instanceof i?t.length?e.isArray(t[0])?new i(t.context,t[0]):t[0]:r:t}))};var xt=function(t,n){if(\"number\"==typeof t)return[n[t]];var r=e.map(n,(function(e,t){return e.nTable}));return e(r).filter(t).map((function(t){var o=e.inArray(this,r);return n[o]})).toArray()};s(\"tables()\",(function(e){return e?new i(xt(e,this.context)):this})),s(\"table()\",(function(e){var t=this.tables(e),n=t.context;return n.length?new i(n[0]):t})),a(\"tables().nodes()\",\"table().node()\",(function(){return this.iterator(\"table\",(function(e){return e.nTable}),1)})),a(\"tables().body()\",\"table().body()\",(function(){return this.iterator(\"table\",(function(e){return e.nTBody}),1)})),a(\"tables().header()\",\"table().header()\",(function(){return this.iterator(\"table\",(function(e){return e.nTHead}),1)})),a(\"tables().footer()\",\"table().footer()\",(function(){return this.iterator(\"table\",(function(e){return e.nTFoot}),1)})),a(\"tables().containers()\",\"table().container()\",(function(){return this.iterator(\"table\",(function(e){return e.nTableWrapper}),1)})),s(\"draw()\",(function(e){return this.iterator(\"table\",(function(t){\"page\"===e?de(t):(\"string\"==typeof e&&(e=\"full-hold\"!==e),he(t,!1===e))}))})),s(\"page()\",(function(e){return e===r?this.page.info().page:this.iterator(\"table\",(function(t){He(t,e)}))})),s(\"page.info()\",(function(e){if(0===this.context.length)return r;var t=this.context[0],n=t._iDisplayStart,o=t.oFeatures.bPaginate?t._iDisplayLength:-1,i=t.fnRecordsDisplay(),s=-1===o;return{page:s?0:Math.floor(n/o),pages:s?1:Math.ceil(i/o),start:n,end:t.fnDisplayEnd(),length:o,recordsTotal:t.fnRecordsTotal(),recordsDisplay:i,serverSide:\"ssp\"===yt(t)}})),s(\"page.len()\",(function(e){return e===r?0!==this.context.length?this.context[0]._iDisplayLength:r:this.iterator(\"table\",(function(t){Ye(t,e)}))}));var Ct=function(e,t,n){if(n){var r=new i(e);r.one(\"draw\",(function(){n(r.ajax.json())}))}if(\"ssp\"==yt(e))he(e,t);else{We(e,!0);var o=e.jqXHR;o&&4!==o.readyState&&o.abort(),ge(e,[],(function(n){re(e);for(var r=_e(e,n),o=0,i=r.length;o<i;o++)U(e,r[o]);he(e,t),We(e,!1)}))}};s(\"ajax.json()\",(function(){var e=this.context;if(e.length>0)return e[0].json})),s(\"ajax.params()\",(function(){var e=this.context;if(e.length>0)return e[0].oAjaxData})),s(\"ajax.reload()\",(function(e,t){return this.iterator(\"table\",(function(n){Ct(n,!1===t,e)}))})),s(\"ajax.url()\",(function(t){var n=this.context;return t===r?0===n.length?r:(n=n[0]).ajax?e.isPlainObject(n.ajax)?n.ajax.url:n.ajax:n.sAjaxSource:this.iterator(\"table\",(function(n){e.isPlainObject(n.ajax)?n.ajax.url=t:n.ajax=t}))})),s(\"ajax.url().load()\",(function(e,t){return this.iterator(\"table\",(function(n){Ct(n,!1===t,e)}))}));var kt=function(t,n,i,s,a){var l,c,u,d,h,m,f=[],p=typeof n;for(n&&\"string\"!==p&&\"function\"!==p&&n.length!==r||(n=[n]),u=0,d=n.length;u<d;u++)for(h=0,m=(c=n[u]&&n[u].split&&!n[u].match(/[\\[\\(:]/)?n[u].split(\",\"):[n[u]]).length;h<m;h++)(l=i(\"string\"==typeof c[h]?e.trim(c[h]):c[h]))&&l.length&&(f=f.concat(l));var g=o.selector[t];if(g.length)for(u=0,d=g.length;u<d;u++)f=g[u](s,a,f);return A(f)},Dt=function(t){return t||(t={}),t.filter&&t.search===r&&(t.search=t.filter),e.extend({search:\"none\",order:\"current\",page:\"all\"},t)},St=function(e){for(var t=0,n=e.length;t<n;t++)if(e[t].length>0)return e[0]=e[t],e[0].length=1,e.length=1,e.context=[e.context[t]],e;return e.length=0,e},At=function(t,n){var r,o=[],i=t.aiDisplay,s=t.aiDisplayMaster,a=n.search,l=n.order,c=n.page;if(\"ssp\"==yt(t))return\"removed\"===a?[]:C(0,s.length);if(\"current\"==c)for(d=t._iDisplayStart,h=t.fnDisplayEnd();d<h;d++)o.push(i[d]);else if(\"current\"==l||\"applied\"==l){if(\"none\"==a)o=s.slice();else if(\"applied\"==a)o=i.slice();else if(\"removed\"==a){for(var u={},d=0,h=i.length;d<h;d++)u[i[d]]=null;o=e.map(s,(function(e){return u.hasOwnProperty(e)?null:e}))}}else if(\"index\"==l||\"original\"==l)for(d=0,h=t.aoData.length;d<h;d++)(\"none\"==a||-1===(r=e.inArray(d,i))&&\"removed\"==a||r>=0&&\"applied\"==a)&&o.push(d);return o},Mt=function(t,n,o){var i;return kt(\"row\",n,(function(n){var s=g(n),a=t.aoData;if(null!==s&&!o)return[s];if(i||(i=At(t,o)),null!==s&&-1!==e.inArray(s,i))return[s];if(null===n||n===r||\"\"===n)return i;if(\"function\"==typeof n)return e.map(i,(function(e){var t=a[e];return n(e,t._aData,t.nTr)?e:null}));if(n.nodeName){var l=n._DT_RowIndex,c=n._DT_CellIndex;if(l!==r)return a[l]&&a[l].nTr===n?[l]:[];if(c)return a[c.row]&&a[c.row].nTr===n?[c.row]:[];var u=e(n).closest(\"*[data-dt-row]\");return u.length?[u.data(\"dt-row\")]:[]}if(\"string\"==typeof n&&\"#\"===n.charAt(0)){var d=t.aIds[n.replace(/^#/,\"\")];if(d!==r)return[d.idx]}var h=k(x(t.aoData,i,\"nTr\"));return e(h).filter(n).map((function(){return this._DT_RowIndex})).toArray()}),t,o)};s(\"rows()\",(function(t,n){t===r?t=\"\":e.isPlainObject(t)&&(n=t,t=\"\"),n=Dt(n);var o=this.iterator(\"table\",(function(e){return Mt(e,t,n)}),1);return o.selector.rows=t,o.selector.opts=n,o})),s(\"rows().nodes()\",(function(){return this.iterator(\"row\",(function(e,t){return e.aoData[t].nTr||r}),1)})),s(\"rows().data()\",(function(){return this.iterator(!0,\"rows\",(function(e,t){return x(e.aoData,t,\"_aData\")}),1)})),a(\"rows().cache()\",\"row().cache()\",(function(e){return this.iterator(\"row\",(function(t,n){var r=t.aoData[n];return\"search\"===e?r._aFilterData:r._aSortData}),1)})),a(\"rows().invalidate()\",\"row().invalidate()\",(function(e){return this.iterator(\"row\",(function(t,n){ie(t,n,e)}))})),a(\"rows().indexes()\",\"row().index()\",(function(){return this.iterator(\"row\",(function(e,t){return t}),1)})),a(\"rows().ids()\",\"row().id()\",(function(e){for(var t=[],n=this.context,r=0,o=n.length;r<o;r++)for(var s=0,a=this[r].length;s<a;s++){var l=n[r].rowIdFn(n[r].aoData[this[r][s]]._aData);t.push((!0===e?\"#\":\"\")+l)}return new i(n,t)})),a(\"rows().remove()\",\"row().remove()\",(function(){var e=this;return this.iterator(\"row\",(function(t,n,o){var i,s,a,l,c,u,d=t.aoData,h=d[n];for(d.splice(n,1),i=0,s=d.length;i<s;i++)if(u=(c=d[i]).anCells,null!==c.nTr&&(c.nTr._DT_RowIndex=i),null!==u)for(a=0,l=u.length;a<l;a++)u[a]._DT_CellIndex.row=i;oe(t.aiDisplayMaster,n),oe(t.aiDisplay,n),oe(e[o],n,!1),t._iRecordsDisplay>0&&t._iRecordsDisplay--,gt(t);var m=t.rowIdFn(h._aData);m!==r&&delete t.aIds[m]})),this.iterator(\"table\",(function(e){for(var t=0,n=e.aoData.length;t<n;t++)e.aoData[t].idx=t})),this})),s(\"rows.add()\",(function(t){var n=this.iterator(\"table\",(function(e){var n,r,o,i=[];for(r=0,o=t.length;r<o;r++)(n=t[r]).nodeName&&\"TR\"===n.nodeName.toUpperCase()?i.push(V(e,n)[0]):i.push(U(e,n));return i}),1),r=this.rows(-1);return r.pop(),e.merge(r,n),r})),s(\"row()\",(function(e,t){return St(this.rows(e,t))})),s(\"row().data()\",(function(t){var n=this.context;if(t===r)return n.length&&this.length?n[0].aoData[this[0]]._aData:r;var o=n[0].aoData[this[0]];return o._aData=t,e.isArray(t)&&o.nTr.id&&te(n[0].rowId)(t,o.nTr.id),ie(n[0],this[0],\"data\"),this})),s(\"row().node()\",(function(){var e=this.context;return e.length&&this.length&&e[0].aoData[this[0]].nTr||null})),s(\"row.add()\",(function(t){t instanceof e&&t.length&&(t=t[0]);var n=this.iterator(\"table\",(function(e){return t.nodeName&&\"TR\"===t.nodeName.toUpperCase()?V(e,t)[0]:U(e,t)}));return this.row(n[0])}));var Lt=function(t,n,r,o){var i=[],s=function(n,r){if(e.isArray(n)||n instanceof e)for(var o=0,a=n.length;o<a;o++)s(n[o],r);else if(n.nodeName&&\"tr\"===n.nodeName.toLowerCase())i.push(n);else{var l=e(\"<tr><td/></tr>\").addClass(r);e(\"td\",l).addClass(r).html(n)[0].colSpan=H(t),i.push(l[0])}};s(r,o),n._details&&n._details.detach(),n._details=e(i),n._detailsShow&&n._details.insertAfter(n.nTr)},Et=function(e,t){var n=e.context;if(n.length){var o=n[0].aoData[t!==r?t:e[0]];o&&o._details&&(o._details.remove(),o._detailsShow=r,o._details=r)}},Tt=function(e,t){var n=e.context;if(n.length&&e.length){var r=n[0].aoData[e[0]];r._details&&(r._detailsShow=t,t?r._details.insertAfter(r.nTr):r._details.detach(),Ft(n[0]))}},Ft=function(e){var t=new i(e),n=\".dt.DT_details\",r=\"draw\"+n,o=\"column-visibility\"+n,s=\"destroy\"+n,a=e.aoData;t.off(r+\" \"+o+\" \"+s),w(a,\"_details\").length>0&&(t.on(r,(function(n,r){e===r&&t.rows({page:\"current\"}).eq(0).each((function(e){var t=a[e];t._detailsShow&&t._details.insertAfter(t.nTr)}))})),t.on(o,(function(t,n,r,o){if(e===n)for(var i,s=H(n),l=0,c=a.length;l<c;l++)(i=a[l])._details&&i._details.children(\"td[colspan]\").attr(\"colspan\",s)})),t.on(s,(function(n,r){if(e===r)for(var o=0,i=a.length;o<i;o++)a[o]._details&&Et(t,o)})))},Ot=\"row().child\",Bt=Ot+\"()\";s(Bt,(function(e,t){var n=this.context;return e===r?n.length&&this.length?n[0].aoData[this[0]]._details:r:(!0===e?this.child.show():!1===e?Et(this):n.length&&this.length&&Lt(n[0],n[0].aoData[this[0]],e,t),this)})),s([Ot+\".show()\",Bt+\".show()\"],(function(e){return Tt(this,!0),this})),s([Ot+\".hide()\",Bt+\".hide()\"],(function(){return Tt(this,!1),this})),s([Ot+\".remove()\",Bt+\".remove()\"],(function(){return Et(this),this})),s(Ot+\".isShown()\",(function(){var e=this.context;return e.length&&this.length&&e[0].aoData[this[0]]._detailsShow||!1}));var Rt=/^([^:]+):(name|visIdx|visible)$/,$t=function(e,t,n,r,o){for(var i=[],s=0,a=o.length;s<a;s++)i.push(K(e,o[s],t));return i},Nt=function(t,n,r){var o=t.aoColumns,i=w(o,\"sName\"),s=w(o,\"nTh\");return kt(\"column\",n,(function(n){var a=g(n);if(\"\"===n)return C(o.length);if(null!==a)return[a>=0?a:o.length+a];if(\"function\"==typeof n){var l=At(t,r);return e.map(o,(function(e,r){return n(r,$t(t,r,0,0,l),s[r])?r:null}))}var c=\"string\"==typeof n?n.match(Rt):\"\";if(c)switch(c[2]){case\"visIdx\":case\"visible\":var u=parseInt(c[1],10);if(u<0){var d=e.map(o,(function(e,t){return e.bVisible?t:null}));return[d[d.length+u]]}return[P(t,u)];case\"name\":return e.map(i,(function(e,t){return e===c[1]?t:null}));default:return[]}if(n.nodeName&&n._DT_CellIndex)return[n._DT_CellIndex.column];var h=e(s).filter(n).map((function(){return e.inArray(this,s)})).toArray();if(h.length||!n.nodeName)return h;var m=e(n).closest(\"*[data-dt-column]\");return m.length?[m.data(\"dt-column\")]:[]}),t,r)},Yt=function(t,n,o){var i,s,a,l,c=t.aoColumns,u=c[n],d=t.aoData;if(o===r)return u.bVisible;if(u.bVisible!==o){if(o){var h=e.inArray(!0,w(c,\"bVisible\"),n+1);for(s=0,a=d.length;s<a;s++)l=d[s].nTr,i=d[s].anCells,l&&l.insertBefore(i[n],i[h]||null)}else e(w(t.aoData,\"anCells\",n)).detach();u.bVisible=o,ue(t,t.aoHeader),ue(t,t.aoFooter),t.aiDisplay.length||e(t.nTBody).find(\"td[colspan]\").attr(\"colspan\",H(t)),at(t)}};s(\"columns()\",(function(t,n){t===r?t=\"\":e.isPlainObject(t)&&(n=t,t=\"\"),n=Dt(n);var o=this.iterator(\"table\",(function(e){return Nt(e,t,n)}),1);return o.selector.cols=t,o.selector.opts=n,o})),a(\"columns().header()\",\"column().header()\",(function(e,t){return this.iterator(\"column\",(function(e,t){return e.aoColumns[t].nTh}),1)})),a(\"columns().footer()\",\"column().footer()\",(function(e,t){return this.iterator(\"column\",(function(e,t){return e.aoColumns[t].nTf}),1)})),a(\"columns().data()\",\"column().data()\",(function(){return this.iterator(\"column-rows\",$t,1)})),a(\"columns().dataSrc()\",\"column().dataSrc()\",(function(){return this.iterator(\"column\",(function(e,t){return e.aoColumns[t].mData}),1)})),a(\"columns().cache()\",\"column().cache()\",(function(e){return this.iterator(\"column-rows\",(function(t,n,r,o,i){return x(t.aoData,i,\"search\"===e?\"_aFilterData\":\"_aSortData\",n)}),1)})),a(\"columns().nodes()\",\"column().nodes()\",(function(){return this.iterator(\"column-rows\",(function(e,t,n,r,o){return x(e.aoData,o,\"anCells\",t)}),1)})),a(\"columns().visible()\",\"column().visible()\",(function(e,t){var n=this.iterator(\"column\",(function(t,n){if(e===r)return t.aoColumns[n].bVisible;Yt(t,n,e)}));return e!==r&&(this.iterator(\"column\",(function(n,r){pt(n,null,\"column-visibility\",[n,r,e,t])})),(t===r||t)&&this.columns.adjust()),n})),a(\"columns().indexes()\",\"column().index()\",(function(e){return this.iterator(\"column\",(function(t,n){return\"visible\"===e?I(t,n):n}),1)})),s(\"columns.adjust()\",(function(){return this.iterator(\"table\",(function(e){Y(e)}),1)})),s(\"column.index()\",(function(e,t){if(0!==this.context.length){var n=this.context[0];if(\"fromVisible\"===e||\"toData\"===e)return P(n,t);if(\"fromData\"===e||\"toVisible\"===e)return I(n,t)}})),s(\"column()\",(function(e,t){return St(this.columns(e,t))}));var Pt=function(t,n,o){var i,s,a,l,c,u,d,h=t.aoData,m=At(t,o),f=k(x(h,m,\"anCells\")),p=e([].concat.apply([],f)),g=t.aoColumns.length;return kt(\"cell\",n,(function(n){var o=\"function\"==typeof n;if(null===n||n===r||o){for(s=[],a=0,l=m.length;a<l;a++)for(i=m[a],c=0;c<g;c++)u={row:i,column:c},o?(d=h[i],n(u,K(t,i,c),d.anCells?d.anCells[c]:null)&&s.push(u)):s.push(u);return s}if(e.isPlainObject(n))return n.column!==r&&n.row!==r&&-1!==e.inArray(n.row,m)?[n]:[];var f=p.filter(n).map((function(e,t){return{row:t._DT_CellIndex.row,column:t._DT_CellIndex.column}})).toArray();return f.length||!n.nodeName?f:(d=e(n).closest(\"*[data-dt-row]\")).length?[{row:d.data(\"dt-row\"),column:d.data(\"dt-column\")}]:[]}),t,o)};s(\"cells()\",(function(t,n,o){if(e.isPlainObject(t)&&(t.row===r?(o=t,t=null):(o=n,n=null)),e.isPlainObject(n)&&(o=n,n=null),null===n||n===r)return this.iterator(\"table\",(function(e){return Pt(e,t,Dt(o))}));var i,s,a,l,c,u=this.columns(n),d=this.rows(t);this.iterator(\"table\",(function(e,t){for(i=[],s=0,a=d[t].length;s<a;s++)for(l=0,c=u[t].length;l<c;l++)i.push({row:d[t][s],column:u[t][l]})}),1);var h=this.cells(i,o);return e.extend(h.selector,{cols:n,rows:t,opts:o}),h})),a(\"cells().nodes()\",\"cell().node()\",(function(){return this.iterator(\"cell\",(function(e,t,n){var o=e.aoData[t];return o&&o.anCells?o.anCells[n]:r}),1)})),s(\"cells().data()\",(function(){return this.iterator(\"cell\",(function(e,t,n){return K(e,t,n)}),1)})),a(\"cells().cache()\",\"cell().cache()\",(function(e){return e=\"search\"===e?\"_aFilterData\":\"_aSortData\",this.iterator(\"cell\",(function(t,n,r){return t.aoData[n][e][r]}),1)})),a(\"cells().render()\",\"cell().render()\",(function(e){return this.iterator(\"cell\",(function(t,n,r){return K(t,n,r,e)}),1)})),a(\"cells().indexes()\",\"cell().index()\",(function(){return this.iterator(\"cell\",(function(e,t,n){return{row:t,column:n,columnVisible:I(e,n)}}),1)})),a(\"cells().invalidate()\",\"cell().invalidate()\",(function(e){return this.iterator(\"cell\",(function(t,n,r){ie(t,n,e,r)}))})),s(\"cell()\",(function(e,t,n){return St(this.cells(e,t,n))})),s(\"cell().data()\",(function(e){var t=this.context,n=this[0];return e===r?t.length&&n.length?K(t[0],n[0].row,n[0].column):r:(X(t[0],n[0].row,n[0].column,e),ie(t[0],n[0].row,\"data\",n[0].column),this)})),s(\"order()\",(function(t,n){var o=this.context;return t===r?0!==o.length?o[0].aaSorting:r:(\"number\"==typeof t?t=[[t,n]]:t.length&&!e.isArray(t[0])&&(t=Array.prototype.slice.call(arguments)),this.iterator(\"table\",(function(e){e.aaSorting=t.slice()})))})),s(\"order.listener()\",(function(e,t,n){return this.iterator(\"table\",(function(r){ot(r,e,t,n)}))})),s(\"order.fixed()\",(function(t){if(!t){var n=this.context,o=n.length?n[0].aaSortingFixed:r;return e.isArray(o)?{pre:o}:o}return this.iterator(\"table\",(function(n){n.aaSortingFixed=e.extend(!0,{},t)}))})),s([\"columns().order()\",\"column().order()\"],(function(t){var n=this;return this.iterator(\"table\",(function(r,o){var i=[];e.each(n[o],(function(e,n){i.push([n,t])})),r.aaSorting=i}))})),s(\"search()\",(function(t,n,o,i){var s=this.context;return t===r?0!==s.length?s[0].oPreviousSearch.sSearch:r:this.iterator(\"table\",(function(r){r.oFeatures.bFilter&&xe(r,e.extend({},r.oPreviousSearch,{sSearch:t+\"\",bRegex:null!==n&&n,bSmart:null===o||o,bCaseInsensitive:null===i||i}),1)}))})),a(\"columns().search()\",\"column().search()\",(function(t,n,o,i){return this.iterator(\"column\",(function(s,a){var l=s.aoPreSearchCols;if(t===r)return l[a].sSearch;s.oFeatures.bFilter&&(e.extend(l[a],{sSearch:t+\"\",bRegex:null!==n&&n,bSmart:null===o||o,bCaseInsensitive:null===i||i}),xe(s,s.oPreviousSearch,1))}))})),s(\"state()\",(function(){return this.context.length?this.context[0].oSavedState:null})),s(\"state.clear()\",(function(){return this.iterator(\"table\",(function(e){e.fnStateSaveCallback.call(e.oInstance,e,{})}))})),s(\"state.loaded()\",(function(){return this.context.length?this.context[0].oLoadedState:null})),s(\"state.save()\",(function(){return this.iterator(\"table\",(function(e){at(e)}))})),l.versionCheck=l.fnVersionCheck=function(e){for(var t,n,r=l.version.split(\".\"),o=e.split(\".\"),i=0,s=o.length;i<s;i++)if((t=parseInt(r[i],10)||0)!==(n=parseInt(o[i],10)||0))return t>n;return!0},l.isDataTable=l.fnIsDataTable=function(t){var n=e(t).get(0),r=!1;return t instanceof l.Api||(e.each(l.settings,(function(t,o){var i=o.nScrollHead?e(\"table\",o.nScrollHead)[0]:null,s=o.nScrollFoot?e(\"table\",o.nScrollFoot)[0]:null;o.nTable!==n&&i!==n&&s!==n||(r=!0)})),r)},l.tables=l.fnTables=function(t){var n=!1;e.isPlainObject(t)&&(n=t.api,t=t.visible);var r=e.map(l.settings,(function(n){if(!t||t&&e(n.nTable).is(\":visible\"))return n.nTable}));return n?new i(r):r},l.camelToHungarian=L,s(\"$()\",(function(t,n){var r=this.rows(n).nodes(),o=e(r);return e([].concat(o.filter(t).toArray(),o.find(t).toArray()))})),e.each([\"on\",\"one\",\"off\"],(function(t,n){s(n+\"()\",(function(){var t=Array.prototype.slice.call(arguments);t[0]=e.map(t[0].split(/\\s/),(function(e){return e.match(/\\.dt\\b/)?e:e+\".dt\"})).join(\" \");var r=e(this.tables().nodes());return r[n].apply(r,t),this}))})),s(\"clear()\",(function(){return this.iterator(\"table\",(function(e){re(e)}))})),s(\"settings()\",(function(){return new i(this.context,this.context)})),s(\"init()\",(function(){var e=this.context;return e.length?e[0].oInit:null})),s(\"data()\",(function(){return this.iterator(\"table\",(function(e){return w(e.aoData,\"_aData\")})).flatten()})),s(\"destroy()\",(function(n){return n=n||!1,this.iterator(\"table\",(function(r){var o,s=r.nTableWrapper.parentNode,a=r.oClasses,c=r.nTable,u=r.nTBody,d=r.nTHead,h=r.nTFoot,m=e(c),f=e(u),p=e(r.nTableWrapper),g=e.map(r.aoData,(function(e){return e.nTr}));r.bDestroying=!0,pt(r,\"aoDestroyCallback\",\"destroy\",[r]),n||new i(r).columns().visible(!0),p.off(\".DT\").find(\":not(tbody *)\").off(\".DT\"),e(t).off(\".DT-\"+r.sInstance),c!=d.parentNode&&(m.children(\"thead\").detach(),m.append(d)),h&&c!=h.parentNode&&(m.children(\"tfoot\").detach(),m.append(h)),r.aaSorting=[],r.aaSortingFixed=[],it(r),e(g).removeClass(r.asStripeClasses.join(\" \")),e(\"th, td\",d).removeClass(a.sSortable+\" \"+a.sSortableAsc+\" \"+a.sSortableDesc+\" \"+a.sSortableNone),f.children().detach(),f.append(g);var v=n?\"remove\":\"detach\";m[v](),p[v](),!n&&s&&(s.insertBefore(c,r.nTableReinsertBefore),m.css(\"width\",r.sDestroyWidth).removeClass(a.sTable),(o=r.asDestroyStripes.length)&&f.children().each((function(t){e(this).addClass(r.asDestroyStripes[t%o])})));var y=e.inArray(r,l.settings);-1!==y&&l.settings.splice(y,1)}))})),e.each([\"column\",\"row\",\"cell\"],(function(e,t){s(t+\"s().every()\",(function(e){var n=this.selector.opts,o=this;return this.iterator(t,(function(i,s,a,l,c){e.call(o[t](s,\"cell\"===t?a:n,\"cell\"===t?n:r),s,a,l,c)}))}))})),s(\"i18n()\",(function(t,n,o){var i=this.context[0],s=ee(t)(i.oLanguage);return s===r&&(s=n),o!==r&&e.isPlainObject(s)&&(s=s[o]!==r?s[o]:s._),s.replace(\"%d\",o)})),l.version=\"1.10.18\",l.settings=[],l.models={},l.models.oSearch={bCaseInsensitive:!0,sSearch:\"\",bRegex:!1,bSmart:!0},l.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:\"\",src:null,idx:-1},l.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:\"std\",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null},l.defaults={aaData:null,aaSorting:[[0,\"asc\"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(e){return e.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(e){try{return JSON.parse((-1===e.iStateDuration?sessionStorage:localStorage).getItem(\"DataTables_\"+e.sInstance+\"_\"+location.pathname))}catch(e){}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(e,t){try{(-1===e.iStateDuration?sessionStorage:localStorage).setItem(\"DataTables_\"+e.sInstance+\"_\"+location.pathname,JSON.stringify(t))}catch(e){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:\": activate to sort column ascending\",sSortDescending:\": activate to sort column descending\"},oPaginate:{sFirst:\"First\",sLast:\"Last\",sNext:\"Next\",sPrevious:\"Previous\"},sEmptyTable:\"No data available in table\",sInfo:\"Showing _START_ to _END_ of _TOTAL_ entries\",sInfoEmpty:\"Showing 0 to 0 of 0 entries\",sInfoFiltered:\"(filtered from _MAX_ total entries)\",sInfoPostFix:\"\",sDecimal:\"\",sThousands:\",\",sLengthMenu:\"Show _MENU_ entries\",sLoadingRecords:\"Loading...\",sProcessing:\"Processing...\",sSearch:\"Search:\",sSearchPlaceholder:\"\",sUrl:\"\",sZeroRecords:\"No matching records found\"},oSearch:e.extend({},l.models.oSearch),sAjaxDataProp:\"data\",sAjaxSource:null,sDom:\"lfrtip\",searchDelay:null,sPaginationType:\"simple_numbers\",sScrollX:\"\",sScrollXInner:\"\",sScrollY:\"\",sServerMethod:\"GET\",renderer:null,rowId:\"DT_RowId\"},M(l.defaults),l.defaults.column={aDataSort:null,iDataSort:-1,asSorting:[\"asc\",\"desc\"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:\"td\",sClass:\"\",sContentPadding:\"\",sDefaultContent:null,sName:\"\",sSortDataType:\"std\",sTitle:null,sType:null,sWidth:null},M(l.defaults.column),l.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:\"\",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:\"two_button\",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:r,oAjaxData:r,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return\"ssp\"==yt(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return\"ssp\"==yt(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var e=this._iDisplayLength,t=this._iDisplayStart,n=t+e,r=this.aiDisplay.length,o=this.oFeatures,i=o.bPaginate;return o.bServerSide?!1===i||-1===e?t+r:Math.min(t+e,this._iRecordsDisplay):!i||n>r||-1===e?r:n},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null},l.ext=o={buttons:{},classes:{},builder:\"-source-\",errMode:\"alert\",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:l.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:l.version},e.extend(o,{afnFiltering:o.search,aTypes:o.type.detect,ofnSearch:o.type.search,oSort:o.type.order,afnSortData:o.order,aoFeatures:o.feature,oApi:o.internal,oStdClasses:o.classes,oPagination:o.pager}),e.extend(l.ext.classes,{sTable:\"dataTable\",sNoFooter:\"no-footer\",sPageButton:\"paginate_button\",sPageButtonActive:\"current\",sPageButtonDisabled:\"disabled\",sStripeOdd:\"odd\",sStripeEven:\"even\",sRowEmpty:\"dataTables_empty\",sWrapper:\"dataTables_wrapper\",sFilter:\"dataTables_filter\",sInfo:\"dataTables_info\",sPaging:\"dataTables_paginate paging_\",sLength:\"dataTables_length\",sProcessing:\"dataTables_processing\",sSortAsc:\"sorting_asc\",sSortDesc:\"sorting_desc\",sSortable:\"sorting\",sSortableAsc:\"sorting_asc_disabled\",sSortableDesc:\"sorting_desc_disabled\",sSortableNone:\"sorting_disabled\",sSortColumn:\"sorting_\",sFilterInput:\"\",sLengthSelect:\"\",sScrollWrapper:\"dataTables_scroll\",sScrollHead:\"dataTables_scrollHead\",sScrollHeadInner:\"dataTables_scrollHeadInner\",sScrollBody:\"dataTables_scrollBody\",sScrollFoot:\"dataTables_scrollFoot\",sScrollFootInner:\"dataTables_scrollFootInner\",sHeaderTH:\"\",sFooterTH:\"\",sSortJUIAsc:\"\",sSortJUIDesc:\"\",sSortJUI:\"\",sSortJUIAscAllowed:\"\",sSortJUIDescAllowed:\"\",sSortJUIWrapper:\"\",sSortIcon:\"\",sJUIHeader:\"\",sJUIFooter:\"\"});var It=l.ext.pager;function Ht(e,t){var n=[],r=It.numbers_length,o=Math.floor(r/2);return t<=r?n=C(0,t):e<=o?((n=C(0,r-2)).push(\"ellipsis\"),n.push(t-1)):e>=t-1-o?((n=C(t-(r-2),t)).splice(0,0,\"ellipsis\"),n.splice(0,0,0)):((n=C(e-o+2,e+o-1)).push(\"ellipsis\"),n.push(t-1),n.splice(0,0,\"ellipsis\"),n.splice(0,0,0)),n.DT_el=\"span\",n}e.extend(It,{simple:function(e,t){return[\"previous\",\"next\"]},full:function(e,t){return[\"first\",\"previous\",\"next\",\"last\"]},numbers:function(e,t){return[Ht(e,t)]},simple_numbers:function(e,t){return[\"previous\",Ht(e,t),\"next\"]},full_numbers:function(e,t){return[\"first\",\"previous\",Ht(e,t),\"next\",\"last\"]},first_last_numbers:function(e,t){return[\"first\",Ht(e,t),\"last\"]},_numbers:Ht,numbers_length:7}),e.extend(!0,l.ext.renderer,{pageButton:{_:function(t,o,i,s,a,l){var c,u,d,h=t.oClasses,m=t.oLanguage.oPaginate,f=t.oLanguage.oAria.paginate||{},p=0,g=function(n,r){var o,s,d,v=function(e){He(t,e.data.action,!0)};for(o=0,s=r.length;o<s;o++)if(d=r[o],e.isArray(d)){var y=e(\"<\"+(d.DT_el||\"div\")+\"/>\").appendTo(n);g(y,d)}else{switch(c=null,u=\"\",d){case\"ellipsis\":n.append('<span class=\"ellipsis\">&#x2026;</span>');break;case\"first\":c=m.sFirst,u=d+(a>0?\"\":\" \"+h.sPageButtonDisabled);break;case\"previous\":c=m.sPrevious,u=d+(a>0?\"\":\" \"+h.sPageButtonDisabled);break;case\"next\":c=m.sNext,u=d+(a<l-1?\"\":\" \"+h.sPageButtonDisabled);break;case\"last\":c=m.sLast,u=d+(a<l-1?\"\":\" \"+h.sPageButtonDisabled);break;default:c=d+1,u=a===d?h.sPageButtonActive:\"\"}null!==c&&(mt(e(\"<a>\",{class:h.sPageButton+\" \"+u,\"aria-controls\":t.sTableId,\"aria-label\":f[d],\"data-dt-idx\":p,tabindex:t.iTabIndex,id:0===i&&\"string\"==typeof d?t.sTableId+\"_\"+d:null}).html(c).appendTo(n),{action:d},v),p++)}};try{d=e(o).find(n.activeElement).data(\"dt-idx\")}catch(e){}g(e(o).empty(),s),d!==r&&e(o).find(\"[data-dt-idx=\"+d+\"]\").focus()}}}),e.extend(l.ext.type.detect,[function(e,t){var n=t.oLanguage.sDecimal;return y(e,n)?\"num\"+n:null},function(e,t){if(e&&!(e instanceof Date)&&!h.test(e))return null;var n=Date.parse(e);return null!==n&&!isNaN(n)||p(e)?\"date\":null},function(e,t){var n=t.oLanguage.sDecimal;return y(e,n,!0)?\"num-fmt\"+n:null},function(e,t){var n=t.oLanguage.sDecimal;return _(e,n)?\"html-num\"+n:null},function(e,t){var n=t.oLanguage.sDecimal;return _(e,n,!0)?\"html-num-fmt\"+n:null},function(e,t){return p(e)||\"string\"==typeof e&&-1!==e.indexOf(\"<\")?\"html\":null}]),e.extend(l.ext.type.search,{html:function(e){return p(e)?e:\"string\"==typeof e?e.replace(u,\" \").replace(d,\"\"):\"\"},string:function(e){return p(e)?e:\"string\"==typeof e?e.replace(u,\" \"):e}});var jt=function(e,t,n,r){return 0===e||e&&\"-\"!==e?(t&&(e=v(e,t)),e.replace&&(n&&(e=e.replace(n,\"\")),r&&(e=e.replace(r,\"\"))),1*e):-1/0};function Wt(t){e.each({num:function(e){return jt(e,t)},\"num-fmt\":function(e){return jt(e,t,f)},\"html-num\":function(e){return jt(e,t,d)},\"html-num-fmt\":function(e){return jt(e,t,d,f)}},(function(e,n){o.type.order[e+t+\"-pre\"]=n,e.match(/^html\\-/)&&(o.type.search[e+t]=o.type.search.html)}))}e.extend(o.type.order,{\"date-pre\":function(e){var t=Date.parse(e);return isNaN(t)?-1/0:t},\"html-pre\":function(e){return p(e)?\"\":e.replace?e.replace(/<.*?>/g,\"\").toLowerCase():e+\"\"},\"string-pre\":function(e){return p(e)?\"\":\"string\"==typeof e?e.toLowerCase():e.toString?e.toString():\"\"},\"string-asc\":function(e,t){return e<t?-1:e>t?1:0},\"string-desc\":function(e,t){return e<t?1:e>t?-1:0}}),Wt(\"\"),e.extend(!0,l.ext.renderer,{header:{_:function(t,n,r,o){e(t.nTable).on(\"order.dt.DT\",(function(e,i,s,a){if(t===i){var l=r.idx;n.removeClass(r.sSortingClass+\" \"+o.sSortAsc+\" \"+o.sSortDesc).addClass(\"asc\"==a[l]?o.sSortAsc:\"desc\"==a[l]?o.sSortDesc:r.sSortingClass)}}))},jqueryui:function(t,n,r,o){e(\"<div/>\").addClass(o.sSortJUIWrapper).append(n.contents()).append(e(\"<span/>\").addClass(o.sSortIcon+\" \"+r.sSortingClassJUI)).appendTo(n),e(t.nTable).on(\"order.dt.DT\",(function(e,i,s,a){if(t===i){var l=r.idx;n.removeClass(o.sSortAsc+\" \"+o.sSortDesc).addClass(\"asc\"==a[l]?o.sSortAsc:\"desc\"==a[l]?o.sSortDesc:r.sSortingClass),n.find(\"span.\"+o.sSortIcon).removeClass(o.sSortJUIAsc+\" \"+o.sSortJUIDesc+\" \"+o.sSortJUI+\" \"+o.sSortJUIAscAllowed+\" \"+o.sSortJUIDescAllowed).addClass(\"asc\"==a[l]?o.sSortJUIAsc:\"desc\"==a[l]?o.sSortJUIDesc:r.sSortingClassJUI)}}))}}});var zt=function(e){return\"string\"==typeof e?e.replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\"):e};function Ut(e){return function(){var t=[ct(this[l.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return l.ext.internal[e].apply(this,t)}}return l.render={number:function(e,t,n,r,o){return{display:function(i){if(\"number\"!=typeof i&&\"string\"!=typeof i)return i;var s=i<0?\"-\":\"\",a=parseFloat(i);if(isNaN(a))return zt(i);a=a.toFixed(n),i=Math.abs(a);var l=parseInt(i,10),c=n?t+(i-l).toFixed(n).substring(2):\"\";return s+(r||\"\")+l.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g,e)+c+(o||\"\")}}},text:function(){return{display:zt}}},e.extend(l.ext.internal,{_fnExternApiFunc:Ut,_fnBuildAjax:ge,_fnAjaxUpdate:ve,_fnAjaxParameters:ye,_fnAjaxUpdateDraw:be,_fnAjaxDataSrc:_e,_fnAddColumn:$,_fnColumnOptions:N,_fnAdjustColumnSizing:Y,_fnVisibleToColumnIndex:P,_fnColumnIndexToVisible:I,_fnVisbleColumns:H,_fnGetColumns:j,_fnColumnTypes:W,_fnApplyColumnDefs:z,_fnHungarianMap:M,_fnCamelToHungarian:L,_fnLanguageCompat:E,_fnBrowserDetect:B,_fnAddData:U,_fnAddTr:V,_fnNodeToDataIndex:q,_fnNodeToColumnIndex:G,_fnGetCellData:K,_fnSetCellData:X,_fnSplitObjNotation:Z,_fnGetObjectDataFn:ee,_fnSetObjectDataFn:te,_fnGetDataMaster:ne,_fnClearTable:re,_fnDeleteIndex:oe,_fnInvalidate:ie,_fnGetRowElements:se,_fnCreateTr:ae,_fnBuildHead:ce,_fnDrawHead:ue,_fnDraw:de,_fnReDraw:he,_fnAddOptionsHtml:me,_fnDetectHeader:fe,_fnGetUniqueThs:pe,_fnFeatureHtmlFilter:we,_fnFilterComplete:xe,_fnFilterCustom:Ce,_fnFilterColumn:ke,_fnFilter:De,_fnFilterCreateSearch:Se,_fnEscapeRegex:Ae,_fnFilterData:Ee,_fnFeatureHtmlInfo:Oe,_fnUpdateInfo:Be,_fnInfoMacros:Re,_fnInitialise:$e,_fnInitComplete:Ne,_fnLengthChange:Ye,_fnFeatureHtmlLength:Pe,_fnFeatureHtmlPaginate:Ie,_fnPageChange:He,_fnFeatureHtmlProcessing:je,_fnProcessingDisplay:We,_fnFeatureHtmlTable:ze,_fnScrollDraw:Ue,_fnApplyToChildren:Ve,_fnCalculateColumnWidths:Ge,_fnThrottle:Ke,_fnConvertToWidth:Xe,_fnGetWidestNode:Je,_fnGetMaxLenString:Qe,_fnStringToCss:Ze,_fnSortFlatten:et,_fnSort:tt,_fnSortAria:nt,_fnSortListener:rt,_fnSortAttachListener:ot,_fnSortingClasses:it,_fnSortData:st,_fnSaveState:at,_fnLoadState:lt,_fnSettingsFromNode:ct,_fnLog:ut,_fnMap:dt,_fnBindAction:mt,_fnCallbackReg:ft,_fnCallbackFire:pt,_fnLengthOverflow:gt,_fnRenderer:vt,_fnDataSource:yt,_fnRowAttributes:le,_fnExtend:ht,_fnCalculateEnd:function(){}}),e.fn.dataTable=l,l.$=e,e.fn.dataTableSettings=l.settings,e.fn.dataTableExt=l.ext,e.fn.DataTable=function(t){return e(this).dataTable(t).api()},e.each(l,(function(t,n){e.fn.DataTable[t]=n})),e.fn.dataTable}(e,window,document)}.apply(t,r),void 0===o||(e.exports=o)}()},2025:e=>{var t;self,t=function(){return function(){var e={3099:function(e){e.exports=function(e){if(\"function\"!=typeof e)throw TypeError(String(e)+\" is not a function\");return e}},6077:function(e,t,n){var r=n(111);e.exports=function(e){if(!r(e)&&null!==e)throw TypeError(\"Can't set \"+String(e)+\" as a prototype\");return e}},1223:function(e,t,n){var r=n(5112),o=n(30),i=n(3070),s=r(\"unscopables\"),a=Array.prototype;null==a[s]&&i.f(a,s,{configurable:!0,value:o(null)}),e.exports=function(e){a[s][e]=!0}},1530:function(e,t,n){\"use strict\";var r=n(8710).charAt;e.exports=function(e,t,n){return t+(n?r(e,t).length:1)}},5787:function(e){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError(\"Incorrect \"+(n?n+\" \":\"\")+\"invocation\");return e}},9670:function(e,t,n){var r=n(111);e.exports=function(e){if(!r(e))throw TypeError(String(e)+\" is not an object\");return e}},4019:function(e){e.exports=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof DataView},260:function(e,t,n){\"use strict\";var r,o=n(4019),i=n(9781),s=n(7854),a=n(111),l=n(6656),c=n(648),u=n(8880),d=n(1320),h=n(3070).f,m=n(9518),f=n(7674),p=n(5112),g=n(9711),v=s.Int8Array,y=v&&v.prototype,b=s.Uint8ClampedArray,_=b&&b.prototype,w=v&&m(v),x=y&&m(y),C=Object.prototype,k=C.isPrototypeOf,D=p(\"toStringTag\"),S=g(\"TYPED_ARRAY_TAG\"),A=o&&!!f&&\"Opera\"!==c(s.opera),M=!1,L={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},E={BigInt64Array:8,BigUint64Array:8},T=function(e){if(!a(e))return!1;var t=c(e);return l(L,t)||l(E,t)};for(r in L)s[r]||(A=!1);if((!A||\"function\"!=typeof w||w===Function.prototype)&&(w=function(){throw TypeError(\"Incorrect invocation\")},A))for(r in L)s[r]&&f(s[r],w);if((!A||!x||x===C)&&(x=w.prototype,A))for(r in L)s[r]&&f(s[r].prototype,x);if(A&&m(_)!==x&&f(_,x),i&&!l(x,D))for(r in M=!0,h(x,D,{get:function(){return a(this)?this[S]:void 0}}),L)s[r]&&u(s[r],S,r);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:A,TYPED_ARRAY_TAG:M&&S,aTypedArray:function(e){if(T(e))return e;throw TypeError(\"Target is not a typed array\")},aTypedArrayConstructor:function(e){if(f){if(k.call(w,e))return e}else for(var t in L)if(l(L,r)){var n=s[t];if(n&&(e===n||k.call(n,e)))return e}throw TypeError(\"Target is not a typed array constructor\")},exportTypedArrayMethod:function(e,t,n){if(i){if(n)for(var r in L){var o=s[r];o&&l(o.prototype,e)&&delete o.prototype[e]}x[e]&&!n||d(x,e,n?t:A&&y[e]||t)}},exportTypedArrayStaticMethod:function(e,t,n){var r,o;if(i){if(f){if(n)for(r in L)(o=s[r])&&l(o,e)&&delete o[e];if(w[e]&&!n)return;try{return d(w,e,n?t:A&&v[e]||t)}catch(e){}}for(r in L)!(o=s[r])||o[e]&&!n||d(o,e,t)}},isView:function(e){if(!a(e))return!1;var t=c(e);return\"DataView\"===t||l(L,t)||l(E,t)},isTypedArray:T,TypedArray:w,TypedArrayPrototype:x}},3331:function(e,t,n){\"use strict\";var r=n(7854),o=n(9781),i=n(4019),s=n(8880),a=n(2248),l=n(7293),c=n(5787),u=n(9958),d=n(7466),h=n(7067),m=n(1179),f=n(9518),p=n(7674),g=n(8006).f,v=n(3070).f,y=n(1285),b=n(8003),_=n(9909),w=_.get,x=_.set,C=\"ArrayBuffer\",k=\"DataView\",D=\"Wrong index\",S=r.ArrayBuffer,A=S,M=r.DataView,L=M&&M.prototype,E=Object.prototype,T=r.RangeError,F=m.pack,O=m.unpack,B=function(e){return[255&e]},R=function(e){return[255&e,e>>8&255]},$=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},N=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},Y=function(e){return F(e,23,4)},P=function(e){return F(e,52,8)},I=function(e,t){v(e.prototype,t,{get:function(){return w(this)[t]}})},H=function(e,t,n,r){var o=h(n),i=w(e);if(o+t>i.byteLength)throw T(D);var s=w(i.buffer).bytes,a=o+i.byteOffset,l=s.slice(a,a+t);return r?l:l.reverse()},j=function(e,t,n,r,o,i){var s=h(n),a=w(e);if(s+t>a.byteLength)throw T(D);for(var l=w(a.buffer).bytes,c=s+a.byteOffset,u=r(+o),d=0;d<t;d++)l[c+d]=u[i?d:t-d-1]};if(i){if(!l((function(){S(1)}))||!l((function(){new S(-1)}))||l((function(){return new S,new S(1.5),new S(NaN),S.name!=C}))){for(var W,z=(A=function(e){return c(this,A),new S(h(e))}).prototype=S.prototype,U=g(S),V=0;U.length>V;)(W=U[V++])in A||s(A,W,S[W]);z.constructor=A}p&&f(L)!==E&&p(L,E);var q=new M(new A(2)),G=L.setInt8;q.setInt8(0,2147483648),q.setInt8(1,2147483649),!q.getInt8(0)&&q.getInt8(1)||a(L,{setInt8:function(e,t){G.call(this,e,t<<24>>24)},setUint8:function(e,t){G.call(this,e,t<<24>>24)}},{unsafe:!0})}else A=function(e){c(this,A,C);var t=h(e);x(this,{bytes:y.call(new Array(t),0),byteLength:t}),o||(this.byteLength=t)},M=function(e,t,n){c(this,M,k),c(e,A,k);var r=w(e).byteLength,i=u(t);if(i<0||i>r)throw T(\"Wrong offset\");if(i+(n=void 0===n?r-i:d(n))>r)throw T(\"Wrong length\");x(this,{buffer:e,byteLength:n,byteOffset:i}),o||(this.buffer=e,this.byteLength=n,this.byteOffset=i)},o&&(I(A,\"byteLength\"),I(M,\"buffer\"),I(M,\"byteLength\"),I(M,\"byteOffset\")),a(M.prototype,{getInt8:function(e){return H(this,1,e)[0]<<24>>24},getUint8:function(e){return H(this,1,e)[0]},getInt16:function(e){var t=H(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=H(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return N(H(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return N(H(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return O(H(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return O(H(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){j(this,1,e,B,t)},setUint8:function(e,t){j(this,1,e,B,t)},setInt16:function(e,t){j(this,2,e,R,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){j(this,2,e,R,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){j(this,4,e,$,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){j(this,4,e,$,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){j(this,4,e,Y,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){j(this,8,e,P,t,arguments.length>2?arguments[2]:void 0)}});b(A,C),b(M,k),e.exports={ArrayBuffer:A,DataView:M}},1048:function(e,t,n){\"use strict\";var r=n(7908),o=n(1400),i=n(7466),s=Math.min;e.exports=[].copyWithin||function(e,t){var n=r(this),a=i(n.length),l=o(e,a),c=o(t,a),u=arguments.length>2?arguments[2]:void 0,d=s((void 0===u?a:o(u,a))-c,a-l),h=1;for(c<l&&l<c+d&&(h=-1,c+=d-1,l+=d-1);d-- >0;)c in n?n[l]=n[c]:delete n[l],l+=h,c+=h;return n}},1285:function(e,t,n){\"use strict\";var r=n(7908),o=n(1400),i=n(7466);e.exports=function(e){for(var t=r(this),n=i(t.length),s=arguments.length,a=o(s>1?arguments[1]:void 0,n),l=s>2?arguments[2]:void 0,c=void 0===l?n:o(l,n);c>a;)t[a++]=e;return t}},8533:function(e,t,n){\"use strict\";var r=n(2092).forEach,o=n(9341)(\"forEach\");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},8457:function(e,t,n){\"use strict\";var r=n(9974),o=n(7908),i=n(3411),s=n(7659),a=n(7466),l=n(6135),c=n(1246);e.exports=function(e){var t,n,u,d,h,m,f=o(e),p=\"function\"==typeof this?this:Array,g=arguments.length,v=g>1?arguments[1]:void 0,y=void 0!==v,b=c(f),_=0;if(y&&(v=r(v,g>2?arguments[2]:void 0,2)),null==b||p==Array&&s(b))for(n=new p(t=a(f.length));t>_;_++)m=y?v(f[_],_):f[_],l(n,_,m);else for(h=(d=b.call(f)).next,n=new p;!(u=h.call(d)).done;_++)m=y?i(d,v,[u.value,_],!0):u.value,l(n,_,m);return n.length=_,n}},1318:function(e,t,n){var r=n(5656),o=n(7466),i=n(1400),s=function(e){return function(t,n,s){var a,l=r(t),c=o(l.length),u=i(s,c);if(e&&n!=n){for(;c>u;)if((a=l[u++])!=a)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:s(!0),indexOf:s(!1)}},2092:function(e,t,n){var r=n(9974),o=n(8361),i=n(7908),s=n(7466),a=n(5417),l=[].push,c=function(e){var t=1==e,n=2==e,c=3==e,u=4==e,d=6==e,h=7==e,m=5==e||d;return function(f,p,g,v){for(var y,b,_=i(f),w=o(_),x=r(p,g,3),C=s(w.length),k=0,D=v||a,S=t?D(f,C):n||h?D(f,0):void 0;C>k;k++)if((m||k in w)&&(b=x(y=w[k],k,_),e))if(t)S[k]=b;else if(b)switch(e){case 3:return!0;case 5:return y;case 6:return k;case 2:l.call(S,y)}else switch(e){case 4:return!1;case 7:l.call(S,y)}return d?-1:c||u?u:S}};e.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6),filterOut:c(7)}},6583:function(e,t,n){\"use strict\";var r=n(5656),o=n(9958),i=n(7466),s=n(9341),a=Math.min,l=[].lastIndexOf,c=!!l&&1/[1].lastIndexOf(1,-0)<0,u=s(\"lastIndexOf\"),d=c||!u;e.exports=d?function(e){if(c)return l.apply(this,arguments)||0;var t=r(this),n=i(t.length),s=n-1;for(arguments.length>1&&(s=a(s,o(arguments[1]))),s<0&&(s=n+s);s>=0;s--)if(s in t&&t[s]===e)return s||0;return-1}:l},1194:function(e,t,n){var r=n(7293),o=n(5112),i=n(7392),s=o(\"species\");e.exports=function(e){return i>=51||!r((function(){var t=[];return(t.constructor={})[s]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},9341:function(e,t,n){\"use strict\";var r=n(7293);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){throw 1},1)}))}},3671:function(e,t,n){var r=n(3099),o=n(7908),i=n(8361),s=n(7466),a=function(e){return function(t,n,a,l){r(n);var c=o(t),u=i(c),d=s(c.length),h=e?d-1:0,m=e?-1:1;if(a<2)for(;;){if(h in u){l=u[h],h+=m;break}if(h+=m,e?h<0:d<=h)throw TypeError(\"Reduce of empty array with no initial value\")}for(;e?h>=0:d>h;h+=m)h in u&&(l=n(l,u[h],h,c));return l}};e.exports={left:a(!1),right:a(!0)}},5417:function(e,t,n){var r=n(111),o=n(3157),i=n(5112)(\"species\");e.exports=function(e,t){var n;return o(e)&&(\"function\"!=typeof(n=e.constructor)||n!==Array&&!o(n.prototype)?r(n)&&null===(n=n[i])&&(n=void 0):n=void 0),new(void 0===n?Array:n)(0===t?0:t)}},3411:function(e,t,n){var r=n(9670),o=n(9212);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(t){throw o(e),t}}},7072:function(e,t,n){var r=n(5112)(\"iterator\"),o=!1;try{var i=0,s={next:function(){return{done:!!i++}},return:function(){o=!0}};s[r]=function(){return this},Array.from(s,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},e(i)}catch(e){}return n}},4326:function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},648:function(e,t,n){var r=n(1694),o=n(4326),i=n(5112)(\"toStringTag\"),s=\"Arguments\"==o(function(){return arguments}());e.exports=r?o:function(e){var t,n,r;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),i))?n:s?o(t):\"Object\"==(r=o(t))&&\"function\"==typeof t.callee?\"Arguments\":r}},9920:function(e,t,n){var r=n(6656),o=n(3887),i=n(1236),s=n(3070);e.exports=function(e,t){for(var n=o(t),a=s.f,l=i.f,c=0;c<n.length;c++){var u=n[c];r(e,u)||a(e,u,l(t,u))}}},8544:function(e,t,n){var r=n(7293);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},4994:function(e,t,n){\"use strict\";var r=n(3383).IteratorPrototype,o=n(30),i=n(9114),s=n(8003),a=n(7497),l=function(){return this};e.exports=function(e,t,n){var c=t+\" Iterator\";return e.prototype=o(r,{next:i(1,n)}),s(e,c,!1,!0),a[c]=l,e}},8880:function(e,t,n){var r=n(9781),o=n(3070),i=n(9114);e.exports=r?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},9114:function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},6135:function(e,t,n){\"use strict\";var r=n(7593),o=n(3070),i=n(9114);e.exports=function(e,t,n){var s=r(t);s in e?o.f(e,s,i(0,n)):e[s]=n}},654:function(e,t,n){\"use strict\";var r=n(2109),o=n(4994),i=n(9518),s=n(7674),a=n(8003),l=n(8880),c=n(1320),u=n(5112),d=n(1913),h=n(7497),m=n(3383),f=m.IteratorPrototype,p=m.BUGGY_SAFARI_ITERATORS,g=u(\"iterator\"),v=\"keys\",y=\"values\",b=\"entries\",_=function(){return this};e.exports=function(e,t,n,u,m,w,x){o(n,t,u);var C,k,D,S=function(e){if(e===m&&T)return T;if(!p&&e in L)return L[e];switch(e){case v:case y:case b:return function(){return new n(this,e)}}return function(){return new n(this)}},A=t+\" Iterator\",M=!1,L=e.prototype,E=L[g]||L[\"@@iterator\"]||m&&L[m],T=!p&&E||S(m),F=\"Array\"==t&&L.entries||E;if(F&&(C=i(F.call(new e)),f!==Object.prototype&&C.next&&(d||i(C)===f||(s?s(C,f):\"function\"!=typeof C[g]&&l(C,g,_)),a(C,A,!0,!0),d&&(h[A]=_))),m==y&&E&&E.name!==y&&(M=!0,T=function(){return E.call(this)}),d&&!x||L[g]===T||l(L,g,T),h[t]=T,m)if(k={values:S(y),keys:w?T:S(v),entries:S(b)},x)for(D in k)(p||M||!(D in L))&&c(L,D,k[D]);else r({target:t,proto:!0,forced:p||M},k);return k}},9781:function(e,t,n){var r=n(7293);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},317:function(e,t,n){var r=n(7854),o=n(111),i=r.document,s=o(i)&&o(i.createElement);e.exports=function(e){return s?i.createElement(e):{}}},8324:function(e){e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},8113:function(e,t,n){var r=n(5005);e.exports=r(\"navigator\",\"userAgent\")||\"\"},7392:function(e,t,n){var r,o,i=n(7854),s=n(8113),a=i.process,l=a&&a.versions,c=l&&l.v8;c?o=(r=c.split(\".\"))[0]+r[1]:s&&(!(r=s.match(/Edge\\/(\\d+)/))||r[1]>=74)&&(r=s.match(/Chrome\\/(\\d+)/))&&(o=r[1]),e.exports=o&&+o},748:function(e){e.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},2109:function(e,t,n){var r=n(7854),o=n(1236).f,i=n(8880),s=n(1320),a=n(3505),l=n(9920),c=n(4705);e.exports=function(e,t){var n,u,d,h,m,f=e.target,p=e.global,g=e.stat;if(n=p?r:g?r[f]||a(f,{}):(r[f]||{}).prototype)for(u in t){if(h=t[u],d=e.noTargetGet?(m=o(n,u))&&m.value:n[u],!c(p?u:f+(g?\".\":\"#\")+u,e.forced)&&void 0!==d){if(typeof h==typeof d)continue;l(h,d)}(e.sham||d&&d.sham)&&i(h,\"sham\",!0),s(n,u,h,e)}}},7293:function(e){e.exports=function(e){try{return!!e()}catch(e){return!0}}},7007:function(e,t,n){\"use strict\";n(4916);var r=n(1320),o=n(7293),i=n(5112),s=n(2261),a=n(8880),l=i(\"species\"),c=!o((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:\"7\"},e},\"7\"!==\"\".replace(e,\"$<a>\")})),u=\"$0\"===\"a\".replace(/./,\"$0\"),d=i(\"replace\"),h=!!/./[d]&&\"\"===/./[d](\"a\",\"$0\"),m=!o((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n=\"ab\".split(e);return 2!==n.length||\"a\"!==n[0]||\"b\"!==n[1]}));e.exports=function(e,t,n,d){var f=i(e),p=!o((function(){var t={};return t[f]=function(){return 7},7!=\"\"[e](t)})),g=p&&!o((function(){var t=!1,n=/a/;return\"split\"===e&&((n={}).constructor={},n.constructor[l]=function(){return n},n.flags=\"\",n[f]=/./[f]),n.exec=function(){return t=!0,null},n[f](\"\"),!t}));if(!p||!g||\"replace\"===e&&(!c||!u||h)||\"split\"===e&&!m){var v=/./[f],y=n(f,\"\"[e],(function(e,t,n,r,o){return t.exec===s?p&&!o?{done:!0,value:v.call(t,n,r)}:{done:!0,value:e.call(n,t,r)}:{done:!1}}),{REPLACE_KEEPS_$0:u,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:h}),b=y[0],_=y[1];r(String.prototype,e,b),r(RegExp.prototype,f,2==t?function(e,t){return _.call(e,this,t)}:function(e){return _.call(e,this)})}d&&a(RegExp.prototype[f],\"sham\",!0)}},9974:function(e,t,n){var r=n(3099);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},5005:function(e,t,n){var r=n(857),o=n(7854),i=function(e){return\"function\"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},1246:function(e,t,n){var r=n(648),o=n(7497),i=n(5112)(\"iterator\");e.exports=function(e){if(null!=e)return e[i]||e[\"@@iterator\"]||o[r(e)]}},8554:function(e,t,n){var r=n(9670),o=n(1246);e.exports=function(e){var t=o(e);if(\"function\"!=typeof t)throw TypeError(String(e)+\" is not iterable\");return r(t.call(e))}},647:function(e,t,n){var r=n(7908),o=Math.floor,i=\"\".replace,s=/\\$([$&'`]|\\d\\d?|<[^>]*>)/g,a=/\\$([$&'`]|\\d\\d?)/g;e.exports=function(e,t,n,l,c,u){var d=n+e.length,h=l.length,m=a;return void 0!==c&&(c=r(c),m=s),i.call(u,m,(function(r,i){var s;switch(i.charAt(0)){case\"$\":return\"$\";case\"&\":return e;case\"`\":return t.slice(0,n);case\"'\":return t.slice(d);case\"<\":s=c[i.slice(1,-1)];break;default:var a=+i;if(0===a)return r;if(a>h){var u=o(a/10);return 0===u?r:u<=h?void 0===l[u-1]?i.charAt(1):l[u-1]+i.charAt(1):r}s=l[a-1]}return void 0===s?\"\":s}))}},7854:function(e,t,n){var r=function(e){return e&&e.Math==Math&&e};e.exports=r(\"object\"==typeof globalThis&&globalThis)||r(\"object\"==typeof window&&window)||r(\"object\"==typeof self&&self)||r(\"object\"==typeof n.g&&n.g)||function(){return this}()||Function(\"return this\")()},6656:function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},3501:function(e){e.exports={}},490:function(e,t,n){var r=n(5005);e.exports=r(\"document\",\"documentElement\")},4664:function(e,t,n){var r=n(9781),o=n(7293),i=n(317);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(i(\"div\"),\"a\",{get:function(){return 7}}).a}))},1179:function(e){var t=Math.abs,n=Math.pow,r=Math.floor,o=Math.log,i=Math.LN2;e.exports={pack:function(e,s,a){var l,c,u,d=new Array(a),h=8*a-s-1,m=(1<<h)-1,f=m>>1,p=23===s?n(2,-24)-n(2,-77):0,g=e<0||0===e&&1/e<0?1:0,v=0;for((e=t(e))!=e||e===1/0?(c=e!=e?1:0,l=m):(l=r(o(e)/i),e*(u=n(2,-l))<1&&(l--,u*=2),(e+=l+f>=1?p/u:p*n(2,1-f))*u>=2&&(l++,u/=2),l+f>=m?(c=0,l=m):l+f>=1?(c=(e*u-1)*n(2,s),l+=f):(c=e*n(2,f-1)*n(2,s),l=0));s>=8;d[v++]=255&c,c/=256,s-=8);for(l=l<<s|c,h+=s;h>0;d[v++]=255&l,l/=256,h-=8);return d[--v]|=128*g,d},unpack:function(e,t){var r,o=e.length,i=8*o-t-1,s=(1<<i)-1,a=s>>1,l=i-7,c=o-1,u=e[c--],d=127&u;for(u>>=7;l>0;d=256*d+e[c],c--,l-=8);for(r=d&(1<<-l)-1,d>>=-l,l+=t;l>0;r=256*r+e[c],c--,l-=8);if(0===d)d=1-a;else{if(d===s)return r?NaN:u?-1/0:1/0;r+=n(2,t),d-=a}return(u?-1:1)*r*n(2,d-t)}}},8361:function(e,t,n){var r=n(7293),o=n(4326),i=\"\".split;e.exports=r((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(e){return\"String\"==o(e)?i.call(e,\"\"):Object(e)}:Object},9587:function(e,t,n){var r=n(111),o=n(7674);e.exports=function(e,t,n){var i,s;return o&&\"function\"==typeof(i=t.constructor)&&i!==n&&r(s=i.prototype)&&s!==n.prototype&&o(e,s),e}},2788:function(e,t,n){var r=n(5465),o=Function.toString;\"function\"!=typeof r.inspectSource&&(r.inspectSource=function(e){return o.call(e)}),e.exports=r.inspectSource},9909:function(e,t,n){var r,o,i,s=n(8536),a=n(7854),l=n(111),c=n(8880),u=n(6656),d=n(5465),h=n(6200),m=n(3501),f=a.WeakMap;if(s){var p=d.state||(d.state=new f),g=p.get,v=p.has,y=p.set;r=function(e,t){return t.facade=e,y.call(p,e,t),t},o=function(e){return g.call(p,e)||{}},i=function(e){return v.call(p,e)}}else{var b=h(\"state\");m[b]=!0,r=function(e,t){return t.facade=e,c(e,b,t),t},o=function(e){return u(e,b)?e[b]:{}},i=function(e){return u(e,b)}}e.exports={set:r,get:o,has:i,enforce:function(e){return i(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=o(t)).type!==e)throw TypeError(\"Incompatible receiver, \"+e+\" required\");return n}}}},7659:function(e,t,n){var r=n(5112),o=n(7497),i=r(\"iterator\"),s=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||s[i]===e)}},3157:function(e,t,n){var r=n(4326);e.exports=Array.isArray||function(e){return\"Array\"==r(e)}},4705:function(e,t,n){var r=n(7293),o=/#|\\.prototype\\./,i=function(e,t){var n=a[s(e)];return n==c||n!=l&&(\"function\"==typeof t?r(t):!!t)},s=i.normalize=function(e){return String(e).replace(o,\".\").toLowerCase()},a=i.data={},l=i.NATIVE=\"N\",c=i.POLYFILL=\"P\";e.exports=i},111:function(e){e.exports=function(e){return\"object\"==typeof e?null!==e:\"function\"==typeof e}},1913:function(e){e.exports=!1},7850:function(e,t,n){var r=n(111),o=n(4326),i=n(5112)(\"match\");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[i])?!!t:\"RegExp\"==o(e))}},9212:function(e,t,n){var r=n(9670);e.exports=function(e){var t=e.return;if(void 0!==t)return r(t.call(e)).value}},3383:function(e,t,n){\"use strict\";var r,o,i,s=n(7293),a=n(9518),l=n(8880),c=n(6656),u=n(5112),d=n(1913),h=u(\"iterator\"),m=!1;[].keys&&(\"next\"in(i=[].keys())?(o=a(a(i)))!==Object.prototype&&(r=o):m=!0);var f=null==r||s((function(){var e={};return r[h].call(e)!==e}));f&&(r={}),d&&!f||c(r,h)||l(r,h,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:m}},7497:function(e){e.exports={}},133:function(e,t,n){var r=n(7293);e.exports=!!Object.getOwnPropertySymbols&&!r((function(){return!String(Symbol())}))},590:function(e,t,n){var r=n(7293),o=n(5112),i=n(1913),s=o(\"iterator\");e.exports=!r((function(){var e=new URL(\"b?a=1&b=2&c=3\",\"http://a\"),t=e.searchParams,n=\"\";return e.pathname=\"c%20d\",t.forEach((function(e,r){t.delete(\"b\"),n+=r+e})),i&&!e.toJSON||!t.sort||\"http://a/c%20d?a=1&c=3\"!==e.href||\"3\"!==t.get(\"c\")||\"a=1\"!==String(new URLSearchParams(\"?a=1\"))||!t[s]||\"a\"!==new URL(\"https://a@b\").username||\"b\"!==new URLSearchParams(new URLSearchParams(\"a=b\")).get(\"a\")||\"xn--e1aybc\"!==new URL(\"http://тест\").host||\"#%D0%B1\"!==new URL(\"http://a#б\").hash||\"a1c3\"!==n||\"x\"!==new URL(\"http://x\",void 0).host}))},8536:function(e,t,n){var r=n(7854),o=n(2788),i=r.WeakMap;e.exports=\"function\"==typeof i&&/native code/.test(o(i))},1574:function(e,t,n){\"use strict\";var r=n(9781),o=n(7293),i=n(1956),s=n(5181),a=n(5296),l=n(7908),c=n(8361),u=Object.assign,d=Object.defineProperty;e.exports=!u||o((function(){if(r&&1!==u({b:1},u(d({},\"a\",{enumerable:!0,get:function(){d(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),o=\"abcdefghijklmnopqrst\";return e[n]=7,o.split(\"\").forEach((function(e){t[e]=e})),7!=u({},e)[n]||i(u({},t)).join(\"\")!=o}))?function(e,t){for(var n=l(e),o=arguments.length,u=1,d=s.f,h=a.f;o>u;)for(var m,f=c(arguments[u++]),p=d?i(f).concat(d(f)):i(f),g=p.length,v=0;g>v;)m=p[v++],r&&!h.call(f,m)||(n[m]=f[m]);return n}:u},30:function(e,t,n){var r,o=n(9670),i=n(6048),s=n(748),a=n(3501),l=n(490),c=n(317),u=n(6200),d=u(\"IE_PROTO\"),h=function(){},m=function(e){return\"<script>\"+e+\"<\\/script>\"},f=function(){try{r=document.domain&&new ActiveXObject(\"htmlfile\")}catch(e){}var e,t;f=r?function(e){e.write(m(\"\")),e.close();var t=e.parentWindow.Object;return e=null,t}(r):((t=c(\"iframe\")).style.display=\"none\",l.appendChild(t),t.src=String(\"javascript:\"),(e=t.contentWindow.document).open(),e.write(m(\"document.F=Object\")),e.close(),e.F);for(var n=s.length;n--;)delete f.prototype[s[n]];return f()};a[d]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(h.prototype=o(e),n=new h,h.prototype=null,n[d]=e):n=f(),void 0===t?n:i(n,t)}},6048:function(e,t,n){var r=n(9781),o=n(3070),i=n(9670),s=n(1956);e.exports=r?Object.defineProperties:function(e,t){i(e);for(var n,r=s(t),a=r.length,l=0;a>l;)o.f(e,n=r[l++],t[n]);return e}},3070:function(e,t,n){var r=n(9781),o=n(4664),i=n(9670),s=n(7593),a=Object.defineProperty;t.f=r?a:function(e,t,n){if(i(e),t=s(t,!0),i(n),o)try{return a(e,t,n)}catch(e){}if(\"get\"in n||\"set\"in n)throw TypeError(\"Accessors not supported\");return\"value\"in n&&(e[t]=n.value),e}},1236:function(e,t,n){var r=n(9781),o=n(5296),i=n(9114),s=n(5656),a=n(7593),l=n(6656),c=n(4664),u=Object.getOwnPropertyDescriptor;t.f=r?u:function(e,t){if(e=s(e),t=a(t,!0),c)try{return u(e,t)}catch(e){}if(l(e,t))return i(!o.f.call(e,t),e[t])}},8006:function(e,t,n){var r=n(6324),o=n(748).concat(\"length\",\"prototype\");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},5181:function(e,t){t.f=Object.getOwnPropertySymbols},9518:function(e,t,n){var r=n(6656),o=n(7908),i=n(6200),s=n(8544),a=i(\"IE_PROTO\"),l=Object.prototype;e.exports=s?Object.getPrototypeOf:function(e){return e=o(e),r(e,a)?e[a]:\"function\"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},6324:function(e,t,n){var r=n(6656),o=n(5656),i=n(1318).indexOf,s=n(3501);e.exports=function(e,t){var n,a=o(e),l=0,c=[];for(n in a)!r(s,n)&&r(a,n)&&c.push(n);for(;t.length>l;)r(a,n=t[l++])&&(~i(c,n)||c.push(n));return c}},1956:function(e,t,n){var r=n(6324),o=n(748);e.exports=Object.keys||function(e){return r(e,o)}},5296:function(e,t){\"use strict\";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!n.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},7674:function(e,t,n){var r=n(9670),o=n(6077);e.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var e,t=!1,n={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(n,[]),t=n instanceof Array}catch(e){}return function(n,i){return r(n),o(i),t?e.call(n,i):n.__proto__=i,n}}():void 0)},288:function(e,t,n){\"use strict\";var r=n(1694),o=n(648);e.exports=r?{}.toString:function(){return\"[object \"+o(this)+\"]\"}},3887:function(e,t,n){var r=n(5005),o=n(8006),i=n(5181),s=n(9670);e.exports=r(\"Reflect\",\"ownKeys\")||function(e){var t=o.f(s(e)),n=i.f;return n?t.concat(n(e)):t}},857:function(e,t,n){var r=n(7854);e.exports=r},2248:function(e,t,n){var r=n(1320);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},1320:function(e,t,n){var r=n(7854),o=n(8880),i=n(6656),s=n(3505),a=n(2788),l=n(9909),c=l.get,u=l.enforce,d=String(String).split(\"String\");(e.exports=function(e,t,n,a){var l,c=!!a&&!!a.unsafe,h=!!a&&!!a.enumerable,m=!!a&&!!a.noTargetGet;\"function\"==typeof n&&(\"string\"!=typeof t||i(n,\"name\")||o(n,\"name\",t),(l=u(n)).source||(l.source=d.join(\"string\"==typeof t?t:\"\"))),e!==r?(c?!m&&e[t]&&(h=!0):delete e[t],h?e[t]=n:o(e,t,n)):h?e[t]=n:s(t,n)})(Function.prototype,\"toString\",(function(){return\"function\"==typeof this&&c(this).source||a(this)}))},7651:function(e,t,n){var r=n(4326),o=n(2261);e.exports=function(e,t){var n=e.exec;if(\"function\"==typeof n){var i=n.call(e,t);if(\"object\"!=typeof i)throw TypeError(\"RegExp exec method returned something other than an Object or null\");return i}if(\"RegExp\"!==r(e))throw TypeError(\"RegExp#exec called on incompatible receiver\");return o.call(e,t)}},2261:function(e,t,n){\"use strict\";var r,o,i=n(7066),s=n(2999),a=RegExp.prototype.exec,l=String.prototype.replace,c=a,u=(r=/a/,o=/b*/g,a.call(r,\"a\"),a.call(o,\"a\"),0!==r.lastIndex||0!==o.lastIndex),d=s.UNSUPPORTED_Y||s.BROKEN_CARET,h=void 0!==/()??/.exec(\"\")[1];(u||h||d)&&(c=function(e){var t,n,r,o,s=this,c=d&&s.sticky,m=i.call(s),f=s.source,p=0,g=e;return c&&(-1===(m=m.replace(\"y\",\"\")).indexOf(\"g\")&&(m+=\"g\"),g=String(e).slice(s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&\"\\n\"!==e[s.lastIndex-1])&&(f=\"(?: \"+f+\")\",g=\" \"+g,p++),n=new RegExp(\"^(?:\"+f+\")\",m)),h&&(n=new RegExp(\"^\"+f+\"$(?!\\\\s)\",m)),u&&(t=s.lastIndex),r=a.call(c?n:s,g),c?r?(r.input=r.input.slice(p),r[0]=r[0].slice(p),r.index=s.lastIndex,s.lastIndex+=r[0].length):s.lastIndex=0:u&&r&&(s.lastIndex=s.global?r.index+r[0].length:t),h&&r&&r.length>1&&l.call(r[0],n,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(r[o]=void 0)})),r}),e.exports=c},7066:function(e,t,n){\"use strict\";var r=n(9670);e.exports=function(){var e=r(this),t=\"\";return e.global&&(t+=\"g\"),e.ignoreCase&&(t+=\"i\"),e.multiline&&(t+=\"m\"),e.dotAll&&(t+=\"s\"),e.unicode&&(t+=\"u\"),e.sticky&&(t+=\"y\"),t}},2999:function(e,t,n){\"use strict\";var r=n(7293);function o(e,t){return RegExp(e,t)}t.UNSUPPORTED_Y=r((function(){var e=o(\"a\",\"y\");return e.lastIndex=2,null!=e.exec(\"abcd\")})),t.BROKEN_CARET=r((function(){var e=o(\"^r\",\"gy\");return e.lastIndex=2,null!=e.exec(\"str\")}))},4488:function(e){e.exports=function(e){if(null==e)throw TypeError(\"Can't call method on \"+e);return e}},3505:function(e,t,n){var r=n(7854),o=n(8880);e.exports=function(e,t){try{o(r,e,t)}catch(n){r[e]=t}return t}},6340:function(e,t,n){\"use strict\";var r=n(5005),o=n(3070),i=n(5112),s=n(9781),a=i(\"species\");e.exports=function(e){var t=r(e),n=o.f;s&&t&&!t[a]&&n(t,a,{configurable:!0,get:function(){return this}})}},8003:function(e,t,n){var r=n(3070).f,o=n(6656),i=n(5112)(\"toStringTag\");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},6200:function(e,t,n){var r=n(2309),o=n(9711),i=r(\"keys\");e.exports=function(e){return i[e]||(i[e]=o(e))}},5465:function(e,t,n){var r=n(7854),o=n(3505),i=\"__core-js_shared__\",s=r[i]||o(i,{});e.exports=s},2309:function(e,t,n){var r=n(1913),o=n(5465);(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:\"3.9.0\",mode:r?\"pure\":\"global\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})},6707:function(e,t,n){var r=n(9670),o=n(3099),i=n(5112)(\"species\");e.exports=function(e,t){var n,s=r(e).constructor;return void 0===s||null==(n=r(s)[i])?t:o(n)}},8710:function(e,t,n){var r=n(9958),o=n(4488),i=function(e){return function(t,n){var i,s,a=String(o(t)),l=r(n),c=a.length;return l<0||l>=c?e?\"\":void 0:(i=a.charCodeAt(l))<55296||i>56319||l+1===c||(s=a.charCodeAt(l+1))<56320||s>57343?e?a.charAt(l):i:e?a.slice(l,l+2):s-56320+(i-55296<<10)+65536}};e.exports={codeAt:i(!1),charAt:i(!0)}},3197:function(e){\"use strict\";var t=2147483647,n=/[^\\0-\\u007E]/,r=/[.\\u3002\\uFF0E\\uFF61]/g,o=\"Overflow: input needs wider integers to process\",i=Math.floor,s=String.fromCharCode,a=function(e){return e+22+75*(e<26)},l=function(e,t,n){var r=0;for(e=n?i(e/700):e>>1,e+=i(e/t);e>455;r+=36)e=i(e/35);return i(r+36*e/(e+38))},c=function(e){var n=[];e=function(e){for(var t=[],n=0,r=e.length;n<r;){var o=e.charCodeAt(n++);if(o>=55296&&o<=56319&&n<r){var i=e.charCodeAt(n++);56320==(64512&i)?t.push(((1023&o)<<10)+(1023&i)+65536):(t.push(o),n--)}else t.push(o)}return t}(e);var r,c,u=e.length,d=128,h=0,m=72;for(r=0;r<e.length;r++)(c=e[r])<128&&n.push(s(c));var f=n.length,p=f;for(f&&n.push(\"-\");p<u;){var g=t;for(r=0;r<e.length;r++)(c=e[r])>=d&&c<g&&(g=c);var v=p+1;if(g-d>i((t-h)/v))throw RangeError(o);for(h+=(g-d)*v,d=g,r=0;r<e.length;r++){if((c=e[r])<d&&++h>t)throw RangeError(o);if(c==d){for(var y=h,b=36;;b+=36){var _=b<=m?1:b>=m+26?26:b-m;if(y<_)break;var w=y-_,x=36-_;n.push(s(a(_+w%x))),y=i(w/x)}n.push(s(a(y))),m=l(h,v,p==f),h=0,++p}}++h,++d}return n.join(\"\")};e.exports=function(e){var t,o,i=[],s=e.toLowerCase().replace(r,\".\").split(\".\");for(t=0;t<s.length;t++)o=s[t],i.push(n.test(o)?\"xn--\"+c(o):o);return i.join(\".\")}},6091:function(e,t,n){var r=n(7293),o=n(1361);e.exports=function(e){return r((function(){return!!o[e]()||\"​᠎\"!=\"​᠎\"[e]()||o[e].name!==e}))}},3111:function(e,t,n){var r=n(4488),o=\"[\"+n(1361)+\"]\",i=RegExp(\"^\"+o+o+\"*\"),s=RegExp(o+o+\"*$\"),a=function(e){return function(t){var n=String(r(t));return 1&e&&(n=n.replace(i,\"\")),2&e&&(n=n.replace(s,\"\")),n}};e.exports={start:a(1),end:a(2),trim:a(3)}},1400:function(e,t,n){var r=n(9958),o=Math.max,i=Math.min;e.exports=function(e,t){var n=r(e);return n<0?o(n+t,0):i(n,t)}},7067:function(e,t,n){var r=n(9958),o=n(7466);e.exports=function(e){if(void 0===e)return 0;var t=r(e),n=o(t);if(t!==n)throw RangeError(\"Wrong length or index\");return n}},5656:function(e,t,n){var r=n(8361),o=n(4488);e.exports=function(e){return r(o(e))}},9958:function(e){var t=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:t)(e)}},7466:function(e,t,n){var r=n(9958),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},7908:function(e,t,n){var r=n(4488);e.exports=function(e){return Object(r(e))}},4590:function(e,t,n){var r=n(3002);e.exports=function(e,t){var n=r(e);if(n%t)throw RangeError(\"Wrong offset\");return n}},3002:function(e,t,n){var r=n(9958);e.exports=function(e){var t=r(e);if(t<0)throw RangeError(\"The argument can't be less than 0\");return t}},7593:function(e,t,n){var r=n(111);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&\"function\"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if(\"function\"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&\"function\"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError(\"Can't convert object to primitive value\")}},1694:function(e,t,n){var r={};r[n(5112)(\"toStringTag\")]=\"z\",e.exports=\"[object z]\"===String(r)},9843:function(e,t,n){\"use strict\";var r=n(2109),o=n(7854),i=n(9781),s=n(3832),a=n(260),l=n(3331),c=n(5787),u=n(9114),d=n(8880),h=n(7466),m=n(7067),f=n(4590),p=n(7593),g=n(6656),v=n(648),y=n(111),b=n(30),_=n(7674),w=n(8006).f,x=n(7321),C=n(2092).forEach,k=n(6340),D=n(3070),S=n(1236),A=n(9909),M=n(9587),L=A.get,E=A.set,T=D.f,F=S.f,O=Math.round,B=o.RangeError,R=l.ArrayBuffer,$=l.DataView,N=a.NATIVE_ARRAY_BUFFER_VIEWS,Y=a.TYPED_ARRAY_TAG,P=a.TypedArray,I=a.TypedArrayPrototype,H=a.aTypedArrayConstructor,j=a.isTypedArray,W=\"BYTES_PER_ELEMENT\",z=\"Wrong length\",U=function(e,t){for(var n=0,r=t.length,o=new(H(e))(r);r>n;)o[n]=t[n++];return o},V=function(e,t){T(e,t,{get:function(){return L(this)[t]}})},q=function(e){var t;return e instanceof R||\"ArrayBuffer\"==(t=v(e))||\"SharedArrayBuffer\"==t},G=function(e,t){return j(e)&&\"symbol\"!=typeof t&&t in e&&String(+t)==String(t)},K=function(e,t){return G(e,t=p(t,!0))?u(2,e[t]):F(e,t)},X=function(e,t,n){return!(G(e,t=p(t,!0))&&y(n)&&g(n,\"value\"))||g(n,\"get\")||g(n,\"set\")||n.configurable||g(n,\"writable\")&&!n.writable||g(n,\"enumerable\")&&!n.enumerable?T(e,t,n):(e[t]=n.value,e)};i?(N||(S.f=K,D.f=X,V(I,\"buffer\"),V(I,\"byteOffset\"),V(I,\"byteLength\"),V(I,\"length\")),r({target:\"Object\",stat:!0,forced:!N},{getOwnPropertyDescriptor:K,defineProperty:X}),e.exports=function(e,t,n){var i=e.match(/\\d+$/)[0]/8,a=e+(n?\"Clamped\":\"\")+\"Array\",l=\"get\"+e,u=\"set\"+e,p=o[a],g=p,v=g&&g.prototype,D={},S=function(e,t){T(e,t,{get:function(){return function(e,t){var n=L(e);return n.view[l](t*i+n.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,r){var o=L(e);n&&(r=(r=O(r))<0?0:r>255?255:255&r),o.view[u](t*i+o.byteOffset,r,!0)}(this,t,e)},enumerable:!0})};N?s&&(g=t((function(e,t,n,r){return c(e,g,a),M(y(t)?q(t)?void 0!==r?new p(t,f(n,i),r):void 0!==n?new p(t,f(n,i)):new p(t):j(t)?U(g,t):x.call(g,t):new p(m(t)),e,g)})),_&&_(g,P),C(w(p),(function(e){e in g||d(g,e,p[e])})),g.prototype=v):(g=t((function(e,t,n,r){c(e,g,a);var o,s,l,u=0,d=0;if(y(t)){if(!q(t))return j(t)?U(g,t):x.call(g,t);o=t,d=f(n,i);var p=t.byteLength;if(void 0===r){if(p%i)throw B(z);if((s=p-d)<0)throw B(z)}else if((s=h(r)*i)+d>p)throw B(z);l=s/i}else l=m(t),o=new R(s=l*i);for(E(e,{buffer:o,byteOffset:d,byteLength:s,length:l,view:new $(o)});u<l;)S(e,u++)})),_&&_(g,P),v=g.prototype=b(I)),v.constructor!==g&&d(v,\"constructor\",g),Y&&d(v,Y,a),D[a]=g,r({global:!0,forced:g!=p,sham:!N},D),W in g||d(g,W,i),W in v||d(v,W,i),k(a)}):e.exports=function(){}},3832:function(e,t,n){var r=n(7854),o=n(7293),i=n(7072),s=n(260).NATIVE_ARRAY_BUFFER_VIEWS,a=r.ArrayBuffer,l=r.Int8Array;e.exports=!s||!o((function(){l(1)}))||!o((function(){new l(-1)}))||!i((function(e){new l,new l(null),new l(1.5),new l(e)}),!0)||o((function(){return 1!==new l(new a(2),1,void 0).length}))},3074:function(e,t,n){var r=n(260).aTypedArrayConstructor,o=n(6707);e.exports=function(e,t){for(var n=o(e,e.constructor),i=0,s=t.length,a=new(r(n))(s);s>i;)a[i]=t[i++];return a}},7321:function(e,t,n){var r=n(7908),o=n(7466),i=n(1246),s=n(7659),a=n(9974),l=n(260).aTypedArrayConstructor;e.exports=function(e){var t,n,c,u,d,h,m=r(e),f=arguments.length,p=f>1?arguments[1]:void 0,g=void 0!==p,v=i(m);if(null!=v&&!s(v))for(h=(d=v.call(m)).next,m=[];!(u=h.call(d)).done;)m.push(u.value);for(g&&f>2&&(p=a(p,arguments[2],2)),n=o(m.length),c=new(l(this))(n),t=0;n>t;t++)c[t]=g?p(m[t],t):m[t];return c}},9711:function(e){var t=0,n=Math.random();e.exports=function(e){return\"Symbol(\"+String(void 0===e?\"\":e)+\")_\"+(++t+n).toString(36)}},3307:function(e,t,n){var r=n(133);e.exports=r&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},5112:function(e,t,n){var r=n(7854),o=n(2309),i=n(6656),s=n(9711),a=n(133),l=n(3307),c=o(\"wks\"),u=r.Symbol,d=l?u:u&&u.withoutSetter||s;e.exports=function(e){return i(c,e)||(a&&i(u,e)?c[e]=u[e]:c[e]=d(\"Symbol.\"+e)),c[e]}},1361:function(e){e.exports=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\"},8264:function(e,t,n){\"use strict\";var r=n(2109),o=n(7854),i=n(3331),s=n(6340),a=\"ArrayBuffer\",l=i.ArrayBuffer;r({global:!0,forced:o.ArrayBuffer!==l},{ArrayBuffer:l}),s(a)},2222:function(e,t,n){\"use strict\";var r=n(2109),o=n(7293),i=n(3157),s=n(111),a=n(7908),l=n(7466),c=n(6135),u=n(5417),d=n(1194),h=n(5112),m=n(7392),f=h(\"isConcatSpreadable\"),p=9007199254740991,g=\"Maximum allowed index exceeded\",v=m>=51||!o((function(){var e=[];return e[f]=!1,e.concat()[0]!==e})),y=d(\"concat\"),b=function(e){if(!s(e))return!1;var t=e[f];return void 0!==t?!!t:i(e)};r({target:\"Array\",proto:!0,forced:!v||!y},{concat:function(e){var t,n,r,o,i,s=a(this),d=u(s,0),h=0;for(t=-1,r=arguments.length;t<r;t++)if(b(i=-1===t?s:arguments[t])){if(h+(o=l(i.length))>p)throw TypeError(g);for(n=0;n<o;n++,h++)n in i&&c(d,h,i[n])}else{if(h>=p)throw TypeError(g);c(d,h++,i)}return d.length=h,d}})},7327:function(e,t,n){\"use strict\";var r=n(2109),o=n(2092).filter;r({target:\"Array\",proto:!0,forced:!n(1194)(\"filter\")},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},2772:function(e,t,n){\"use strict\";var r=n(2109),o=n(1318).indexOf,i=n(9341),s=[].indexOf,a=!!s&&1/[1].indexOf(1,-0)<0,l=i(\"indexOf\");r({target:\"Array\",proto:!0,forced:a||!l},{indexOf:function(e){return a?s.apply(this,arguments)||0:o(this,e,arguments.length>1?arguments[1]:void 0)}})},6992:function(e,t,n){\"use strict\";var r=n(5656),o=n(1223),i=n(7497),s=n(9909),a=n(654),l=\"Array Iterator\",c=s.set,u=s.getterFor(l);e.exports=a(Array,\"Array\",(function(e,t){c(this,{type:l,target:r(e),index:0,kind:t})}),(function(){var e=u(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):\"keys\"==n?{value:r,done:!1}:\"values\"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),\"values\"),i.Arguments=i.Array,o(\"keys\"),o(\"values\"),o(\"entries\")},1249:function(e,t,n){\"use strict\";var r=n(2109),o=n(2092).map;r({target:\"Array\",proto:!0,forced:!n(1194)(\"map\")},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},7042:function(e,t,n){\"use strict\";var r=n(2109),o=n(111),i=n(3157),s=n(1400),a=n(7466),l=n(5656),c=n(6135),u=n(5112),d=n(1194)(\"slice\"),h=u(\"species\"),m=[].slice,f=Math.max;r({target:\"Array\",proto:!0,forced:!d},{slice:function(e,t){var n,r,u,d=l(this),p=a(d.length),g=s(e,p),v=s(void 0===t?p:t,p);if(i(d)&&(\"function\"!=typeof(n=d.constructor)||n!==Array&&!i(n.prototype)?o(n)&&null===(n=n[h])&&(n=void 0):n=void 0,n===Array||void 0===n))return m.call(d,g,v);for(r=new(void 0===n?Array:n)(f(v-g,0)),u=0;g<v;g++,u++)g in d&&c(r,u,d[g]);return r.length=u,r}})},561:function(e,t,n){\"use strict\";var r=n(2109),o=n(1400),i=n(9958),s=n(7466),a=n(7908),l=n(5417),c=n(6135),u=n(1194)(\"splice\"),d=Math.max,h=Math.min,m=9007199254740991,f=\"Maximum allowed length exceeded\";r({target:\"Array\",proto:!0,forced:!u},{splice:function(e,t){var n,r,u,p,g,v,y=a(this),b=s(y.length),_=o(e,b),w=arguments.length;if(0===w?n=r=0:1===w?(n=0,r=b-_):(n=w-2,r=h(d(i(t),0),b-_)),b+n-r>m)throw TypeError(f);for(u=l(y,r),p=0;p<r;p++)(g=_+p)in y&&c(u,p,y[g]);if(u.length=r,n<r){for(p=_;p<b-r;p++)v=p+n,(g=p+r)in y?y[v]=y[g]:delete y[v];for(p=b;p>b-r+n;p--)delete y[p-1]}else if(n>r)for(p=b-r;p>_;p--)v=p+n-1,(g=p+r-1)in y?y[v]=y[g]:delete y[v];for(p=0;p<n;p++)y[p+_]=arguments[p+2];return y.length=b-r+n,u}})},8309:function(e,t,n){var r=n(9781),o=n(3070).f,i=Function.prototype,s=i.toString,a=/^\\s*function ([^ (]*)/,l=\"name\";r&&!(l in i)&&o(i,l,{configurable:!0,get:function(){try{return s.call(this).match(a)[1]}catch(e){return\"\"}}})},489:function(e,t,n){var r=n(2109),o=n(7293),i=n(7908),s=n(9518),a=n(8544);r({target:\"Object\",stat:!0,forced:o((function(){s(1)})),sham:!a},{getPrototypeOf:function(e){return s(i(e))}})},1539:function(e,t,n){var r=n(1694),o=n(1320),i=n(288);r||o(Object.prototype,\"toString\",i,{unsafe:!0})},4916:function(e,t,n){\"use strict\";var r=n(2109),o=n(2261);r({target:\"RegExp\",proto:!0,forced:/./.exec!==o},{exec:o})},9714:function(e,t,n){\"use strict\";var r=n(1320),o=n(9670),i=n(7293),s=n(7066),a=\"toString\",l=RegExp.prototype,c=l.toString,u=i((function(){return\"/a/b\"!=c.call({source:\"a\",flags:\"b\"})})),d=c.name!=a;(u||d)&&r(RegExp.prototype,a,(function(){var e=o(this),t=String(e.source),n=e.flags;return\"/\"+t+\"/\"+String(void 0===n&&e instanceof RegExp&&!(\"flags\"in l)?s.call(e):n)}),{unsafe:!0})},8783:function(e,t,n){\"use strict\";var r=n(8710).charAt,o=n(9909),i=n(654),s=\"String Iterator\",a=o.set,l=o.getterFor(s);i(String,\"String\",(function(e){a(this,{type:s,string:String(e),index:0})}),(function(){var e,t=l(this),n=t.string,o=t.index;return o>=n.length?{value:void 0,done:!0}:(e=r(n,o),t.index+=e.length,{value:e,done:!1})}))},4723:function(e,t,n){\"use strict\";var r=n(7007),o=n(9670),i=n(7466),s=n(4488),a=n(1530),l=n(7651);r(\"match\",1,(function(e,t,n){return[function(t){var n=s(this),r=null==t?void 0:t[e];return void 0!==r?r.call(t,n):new RegExp(t)[e](String(n))},function(e){var r=n(t,e,this);if(r.done)return r.value;var s=o(e),c=String(this);if(!s.global)return l(s,c);var u=s.unicode;s.lastIndex=0;for(var d,h=[],m=0;null!==(d=l(s,c));){var f=String(d[0]);h[m]=f,\"\"===f&&(s.lastIndex=a(c,i(s.lastIndex),u)),m++}return 0===m?null:h}]}))},5306:function(e,t,n){\"use strict\";var r=n(7007),o=n(9670),i=n(7466),s=n(9958),a=n(4488),l=n(1530),c=n(647),u=n(7651),d=Math.max,h=Math.min;r(\"replace\",2,(function(e,t,n,r){var m=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,f=r.REPLACE_KEEPS_$0,p=m?\"$\":\"$0\";return[function(n,r){var o=a(this),i=null==n?void 0:n[e];return void 0!==i?i.call(n,o,r):t.call(String(o),n,r)},function(e,r){if(!m&&f||\"string\"==typeof r&&-1===r.indexOf(p)){var a=n(t,e,this,r);if(a.done)return a.value}var g=o(e),v=String(this),y=\"function\"==typeof r;y||(r=String(r));var b=g.global;if(b){var _=g.unicode;g.lastIndex=0}for(var w=[];;){var x=u(g,v);if(null===x)break;if(w.push(x),!b)break;\"\"===String(x[0])&&(g.lastIndex=l(v,i(g.lastIndex),_))}for(var C,k=\"\",D=0,S=0;S<w.length;S++){x=w[S];for(var A=String(x[0]),M=d(h(s(x.index),v.length),0),L=[],E=1;E<x.length;E++)L.push(void 0===(C=x[E])?C:String(C));var T=x.groups;if(y){var F=[A].concat(L,M,v);void 0!==T&&F.push(T);var O=String(r.apply(void 0,F))}else O=c(A,v,M,L,T,r);M>=D&&(k+=v.slice(D,M)+O,D=M+A.length)}return k+v.slice(D)}]}))},3123:function(e,t,n){\"use strict\";var r=n(7007),o=n(7850),i=n(9670),s=n(4488),a=n(6707),l=n(1530),c=n(7466),u=n(7651),d=n(2261),h=n(7293),m=[].push,f=Math.min,p=4294967295,g=!h((function(){return!RegExp(p,\"y\")}));r(\"split\",2,(function(e,t,n){var r;return r=\"c\"==\"abbc\".split(/(b)*/)[1]||4!=\"test\".split(/(?:)/,-1).length||2!=\"ab\".split(/(?:ab)*/).length||4!=\".\".split(/(.?)(.?)/).length||\".\".split(/()()/).length>1||\"\".split(/.?/).length?function(e,n){var r=String(s(this)),i=void 0===n?p:n>>>0;if(0===i)return[];if(void 0===e)return[r];if(!o(e))return t.call(r,e,i);for(var a,l,c,u=[],h=(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.unicode?\"u\":\"\")+(e.sticky?\"y\":\"\"),f=0,g=new RegExp(e.source,h+\"g\");(a=d.call(g,r))&&!((l=g.lastIndex)>f&&(u.push(r.slice(f,a.index)),a.length>1&&a.index<r.length&&m.apply(u,a.slice(1)),c=a[0].length,f=l,u.length>=i));)g.lastIndex===a.index&&g.lastIndex++;return f===r.length?!c&&g.test(\"\")||u.push(\"\"):u.push(r.slice(f)),u.length>i?u.slice(0,i):u}:\"0\".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var o=s(this),i=null==t?void 0:t[e];return void 0!==i?i.call(t,o,n):r.call(String(o),t,n)},function(e,o){var s=n(r,e,this,o,r!==t);if(s.done)return s.value;var d=i(e),h=String(this),m=a(d,RegExp),v=d.unicode,y=(d.ignoreCase?\"i\":\"\")+(d.multiline?\"m\":\"\")+(d.unicode?\"u\":\"\")+(g?\"y\":\"g\"),b=new m(g?d:\"^(?:\"+d.source+\")\",y),_=void 0===o?p:o>>>0;if(0===_)return[];if(0===h.length)return null===u(b,h)?[h]:[];for(var w=0,x=0,C=[];x<h.length;){b.lastIndex=g?x:0;var k,D=u(b,g?h:h.slice(x));if(null===D||(k=f(c(b.lastIndex+(g?0:x)),h.length))===w)x=l(h,x,v);else{if(C.push(h.slice(w,x)),C.length===_)return C;for(var S=1;S<=D.length-1;S++)if(C.push(D[S]),C.length===_)return C;x=w=k}}return C.push(h.slice(w)),C}]}),!g)},3210:function(e,t,n){\"use strict\";var r=n(2109),o=n(3111).trim;r({target:\"String\",proto:!0,forced:n(6091)(\"trim\")},{trim:function(){return o(this)}})},2990:function(e,t,n){\"use strict\";var r=n(260),o=n(1048),i=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"copyWithin\",(function(e,t){return o.call(i(this),e,t,arguments.length>2?arguments[2]:void 0)}))},8927:function(e,t,n){\"use strict\";var r=n(260),o=n(2092).every,i=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"every\",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:void 0)}))},3105:function(e,t,n){\"use strict\";var r=n(260),o=n(1285),i=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"fill\",(function(e){return o.apply(i(this),arguments)}))},5035:function(e,t,n){\"use strict\";var r=n(260),o=n(2092).filter,i=n(3074),s=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"filter\",(function(e){var t=o(s(this),e,arguments.length>1?arguments[1]:void 0);return i(this,t)}))},7174:function(e,t,n){\"use strict\";var r=n(260),o=n(2092).findIndex,i=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"findIndex\",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:void 0)}))},4345:function(e,t,n){\"use strict\";var r=n(260),o=n(2092).find,i=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"find\",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:void 0)}))},2846:function(e,t,n){\"use strict\";var r=n(260),o=n(2092).forEach,i=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"forEach\",(function(e){o(i(this),e,arguments.length>1?arguments[1]:void 0)}))},4731:function(e,t,n){\"use strict\";var r=n(260),o=n(1318).includes,i=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"includes\",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:void 0)}))},7209:function(e,t,n){\"use strict\";var r=n(260),o=n(1318).indexOf,i=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"indexOf\",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:void 0)}))},6319:function(e,t,n){\"use strict\";var r=n(7854),o=n(260),i=n(6992),s=n(5112)(\"iterator\"),a=r.Uint8Array,l=i.values,c=i.keys,u=i.entries,d=o.aTypedArray,h=o.exportTypedArrayMethod,m=a&&a.prototype[s],f=!!m&&(\"values\"==m.name||null==m.name),p=function(){return l.call(d(this))};h(\"entries\",(function(){return u.call(d(this))})),h(\"keys\",(function(){return c.call(d(this))})),h(\"values\",p,!f),h(s,p,!f)},8867:function(e,t,n){\"use strict\";var r=n(260),o=r.aTypedArray,i=r.exportTypedArrayMethod,s=[].join;i(\"join\",(function(e){return s.apply(o(this),arguments)}))},7789:function(e,t,n){\"use strict\";var r=n(260),o=n(6583),i=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"lastIndexOf\",(function(e){return o.apply(i(this),arguments)}))},3739:function(e,t,n){\"use strict\";var r=n(260),o=n(2092).map,i=n(6707),s=r.aTypedArray,a=r.aTypedArrayConstructor;(0,r.exportTypedArrayMethod)(\"map\",(function(e){return o(s(this),e,arguments.length>1?arguments[1]:void 0,(function(e,t){return new(a(i(e,e.constructor)))(t)}))}))},4483:function(e,t,n){\"use strict\";var r=n(260),o=n(3671).right,i=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"reduceRight\",(function(e){return o(i(this),e,arguments.length,arguments.length>1?arguments[1]:void 0)}))},9368:function(e,t,n){\"use strict\";var r=n(260),o=n(3671).left,i=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"reduce\",(function(e){return o(i(this),e,arguments.length,arguments.length>1?arguments[1]:void 0)}))},2056:function(e,t,n){\"use strict\";var r=n(260),o=r.aTypedArray,i=r.exportTypedArrayMethod,s=Math.floor;i(\"reverse\",(function(){for(var e,t=this,n=o(t).length,r=s(n/2),i=0;i<r;)e=t[i],t[i++]=t[--n],t[n]=e;return t}))},3462:function(e,t,n){\"use strict\";var r=n(260),o=n(7466),i=n(4590),s=n(7908),a=n(7293),l=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"set\",(function(e){l(this);var t=i(arguments.length>1?arguments[1]:void 0,1),n=this.length,r=s(e),a=o(r.length),c=0;if(a+t>n)throw RangeError(\"Wrong length\");for(;c<a;)this[t+c]=r[c++]}),a((function(){new Int8Array(1).set({})})))},678:function(e,t,n){\"use strict\";var r=n(260),o=n(6707),i=n(7293),s=r.aTypedArray,a=r.aTypedArrayConstructor,l=r.exportTypedArrayMethod,c=[].slice;l(\"slice\",(function(e,t){for(var n=c.call(s(this),e,t),r=o(this,this.constructor),i=0,l=n.length,u=new(a(r))(l);l>i;)u[i]=n[i++];return u}),i((function(){new Int8Array(1).slice()})))},7462:function(e,t,n){\"use strict\";var r=n(260),o=n(2092).some,i=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"some\",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:void 0)}))},3824:function(e,t,n){\"use strict\";var r=n(260),o=r.aTypedArray,i=r.exportTypedArrayMethod,s=[].sort;i(\"sort\",(function(e){return s.call(o(this),e)}))},5021:function(e,t,n){\"use strict\";var r=n(260),o=n(7466),i=n(1400),s=n(6707),a=r.aTypedArray;(0,r.exportTypedArrayMethod)(\"subarray\",(function(e,t){var n=a(this),r=n.length,l=i(e,r);return new(s(n,n.constructor))(n.buffer,n.byteOffset+l*n.BYTES_PER_ELEMENT,o((void 0===t?r:i(t,r))-l))}))},2974:function(e,t,n){\"use strict\";var r=n(7854),o=n(260),i=n(7293),s=r.Int8Array,a=o.aTypedArray,l=o.exportTypedArrayMethod,c=[].toLocaleString,u=[].slice,d=!!s&&i((function(){c.call(new s(1))}));l(\"toLocaleString\",(function(){return c.apply(d?u.call(a(this)):a(this),arguments)}),i((function(){return[1,2].toLocaleString()!=new s([1,2]).toLocaleString()}))||!i((function(){s.prototype.toLocaleString.call([1,2])})))},5016:function(e,t,n){\"use strict\";var r=n(260).exportTypedArrayMethod,o=n(7293),i=n(7854).Uint8Array,s=i&&i.prototype||{},a=[].toString,l=[].join;o((function(){a.call({})}))&&(a=function(){return l.call(this)});var c=s.toString!=a;r(\"toString\",a,c)},2472:function(e,t,n){n(9843)(\"Uint8\",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},4747:function(e,t,n){var r=n(7854),o=n(8324),i=n(8533),s=n(8880);for(var a in o){var l=r[a],c=l&&l.prototype;if(c&&c.forEach!==i)try{s(c,\"forEach\",i)}catch(e){c.forEach=i}}},3948:function(e,t,n){var r=n(7854),o=n(8324),i=n(6992),s=n(8880),a=n(5112),l=a(\"iterator\"),c=a(\"toStringTag\"),u=i.values;for(var d in o){var h=r[d],m=h&&h.prototype;if(m){if(m[l]!==u)try{s(m,l,u)}catch(e){m[l]=u}if(m[c]||s(m,c,d),o[d])for(var f in i)if(m[f]!==i[f])try{s(m,f,i[f])}catch(e){m[f]=i[f]}}}},1637:function(e,t,n){\"use strict\";n(6992);var r=n(2109),o=n(5005),i=n(590),s=n(1320),a=n(2248),l=n(8003),c=n(4994),u=n(9909),d=n(5787),h=n(6656),m=n(9974),f=n(648),p=n(9670),g=n(111),v=n(30),y=n(9114),b=n(8554),_=n(1246),w=n(5112),x=o(\"fetch\"),C=o(\"Headers\"),k=w(\"iterator\"),D=\"URLSearchParams\",S=\"URLSearchParamsIterator\",A=u.set,M=u.getterFor(D),L=u.getterFor(S),E=/\\+/g,T=Array(4),F=function(e){return T[e-1]||(T[e-1]=RegExp(\"((?:%[\\\\da-f]{2}){\"+e+\"})\",\"gi\"))},O=function(e){try{return decodeURIComponent(e)}catch(t){return e}},B=function(e){var t=e.replace(E,\" \"),n=4;try{return decodeURIComponent(t)}catch(e){for(;n;)t=t.replace(F(n--),O);return t}},R=/[!'()~]|%20/g,$={\"!\":\"%21\",\"'\":\"%27\",\"(\":\"%28\",\")\":\"%29\",\"~\":\"%7E\",\"%20\":\"+\"},N=function(e){return $[e]},Y=function(e){return encodeURIComponent(e).replace(R,N)},P=function(e,t){if(t)for(var n,r,o=t.split(\"&\"),i=0;i<o.length;)(n=o[i++]).length&&(r=n.split(\"=\"),e.push({key:B(r.shift()),value:B(r.join(\"=\"))}))},I=function(e){this.entries.length=0,P(this.entries,e)},H=function(e,t){if(e<t)throw TypeError(\"Not enough arguments\")},j=c((function(e,t){A(this,{type:S,iterator:b(M(e).entries),kind:t})}),\"Iterator\",(function(){var e=L(this),t=e.kind,n=e.iterator.next(),r=n.value;return n.done||(n.value=\"keys\"===t?r.key:\"values\"===t?r.value:[r.key,r.value]),n})),W=function(){d(this,W,D);var e,t,n,r,o,i,s,a,l,c=arguments.length>0?arguments[0]:void 0,u=this,m=[];if(A(u,{type:D,entries:m,updateURL:function(){},updateSearchParams:I}),void 0!==c)if(g(c))if(\"function\"==typeof(e=_(c)))for(n=(t=e.call(c)).next;!(r=n.call(t)).done;){if((s=(i=(o=b(p(r.value))).next).call(o)).done||(a=i.call(o)).done||!i.call(o).done)throw TypeError(\"Expected sequence with length 2\");m.push({key:s.value+\"\",value:a.value+\"\"})}else for(l in c)h(c,l)&&m.push({key:l,value:c[l]+\"\"});else P(m,\"string\"==typeof c?\"?\"===c.charAt(0)?c.slice(1):c:c+\"\")},z=W.prototype;a(z,{append:function(e,t){H(arguments.length,2);var n=M(this);n.entries.push({key:e+\"\",value:t+\"\"}),n.updateURL()},delete:function(e){H(arguments.length,1);for(var t=M(this),n=t.entries,r=e+\"\",o=0;o<n.length;)n[o].key===r?n.splice(o,1):o++;t.updateURL()},get:function(e){H(arguments.length,1);for(var t=M(this).entries,n=e+\"\",r=0;r<t.length;r++)if(t[r].key===n)return t[r].value;return null},getAll:function(e){H(arguments.length,1);for(var t=M(this).entries,n=e+\"\",r=[],o=0;o<t.length;o++)t[o].key===n&&r.push(t[o].value);return r},has:function(e){H(arguments.length,1);for(var t=M(this).entries,n=e+\"\",r=0;r<t.length;)if(t[r++].key===n)return!0;return!1},set:function(e,t){H(arguments.length,1);for(var n,r=M(this),o=r.entries,i=!1,s=e+\"\",a=t+\"\",l=0;l<o.length;l++)(n=o[l]).key===s&&(i?o.splice(l--,1):(i=!0,n.value=a));i||o.push({key:s,value:a}),r.updateURL()},sort:function(){var e,t,n,r=M(this),o=r.entries,i=o.slice();for(o.length=0,n=0;n<i.length;n++){for(e=i[n],t=0;t<n;t++)if(o[t].key>e.key){o.splice(t,0,e);break}t===n&&o.push(e)}r.updateURL()},forEach:function(e){for(var t,n=M(this).entries,r=m(e,arguments.length>1?arguments[1]:void 0,3),o=0;o<n.length;)r((t=n[o++]).value,t.key,this)},keys:function(){return new j(this,\"keys\")},values:function(){return new j(this,\"values\")},entries:function(){return new j(this,\"entries\")}},{enumerable:!0}),s(z,k,z.entries),s(z,\"toString\",(function(){for(var e,t=M(this).entries,n=[],r=0;r<t.length;)e=t[r++],n.push(Y(e.key)+\"=\"+Y(e.value));return n.join(\"&\")}),{enumerable:!0}),l(W,D),r({global:!0,forced:!i},{URLSearchParams:W}),i||\"function\"!=typeof x||\"function\"!=typeof C||r({global:!0,enumerable:!0,forced:!0},{fetch:function(e){var t,n,r,o=[e];return arguments.length>1&&(g(t=arguments[1])&&(n=t.body,f(n)===D&&((r=t.headers?new C(t.headers):new C).has(\"content-type\")||r.set(\"content-type\",\"application/x-www-form-urlencoded;charset=UTF-8\"),t=v(t,{body:y(0,String(n)),headers:y(0,r)}))),o.push(t)),x.apply(this,o)}}),e.exports={URLSearchParams:W,getState:M}},285:function(e,t,n){\"use strict\";n(8783);var r,o=n(2109),i=n(9781),s=n(590),a=n(7854),l=n(6048),c=n(1320),u=n(5787),d=n(6656),h=n(1574),m=n(8457),f=n(8710).codeAt,p=n(3197),g=n(8003),v=n(1637),y=n(9909),b=a.URL,_=v.URLSearchParams,w=v.getState,x=y.set,C=y.getterFor(\"URL\"),k=Math.floor,D=Math.pow,S=\"Invalid scheme\",A=\"Invalid host\",M=\"Invalid port\",L=/[A-Za-z]/,E=/[\\d+-.A-Za-z]/,T=/\\d/,F=/^(0x|0X)/,O=/^[0-7]+$/,B=/^\\d+$/,R=/^[\\dA-Fa-f]+$/,$=/[\\u0000\\t\\u000A\\u000D #%/:?@[\\\\]]/,N=/[\\u0000\\t\\u000A\\u000D #/:?@[\\\\]]/,Y=/^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g,P=/[\\t\\u000A\\u000D]/g,I=function(e,t){var n,r,o;if(\"[\"==t.charAt(0)){if(\"]\"!=t.charAt(t.length-1))return A;if(!(n=j(t.slice(1,-1))))return A;e.host=n}else if(X(e)){if(t=p(t),$.test(t))return A;if(null===(n=H(t)))return A;e.host=n}else{if(N.test(t))return A;for(n=\"\",r=m(t),o=0;o<r.length;o++)n+=G(r[o],z);e.host=n}},H=function(e){var t,n,r,o,i,s,a,l=e.split(\".\");if(l.length&&\"\"==l[l.length-1]&&l.pop(),(t=l.length)>4)return e;for(n=[],r=0;r<t;r++){if(\"\"==(o=l[r]))return e;if(i=10,o.length>1&&\"0\"==o.charAt(0)&&(i=F.test(o)?16:8,o=o.slice(8==i?1:2)),\"\"===o)s=0;else{if(!(10==i?B:8==i?O:R).test(o))return e;s=parseInt(o,i)}n.push(s)}for(r=0;r<t;r++)if(s=n[r],r==t-1){if(s>=D(256,5-t))return null}else if(s>255)return null;for(a=n.pop(),r=0;r<n.length;r++)a+=n[r]*D(256,3-r);return a},j=function(e){var t,n,r,o,i,s,a,l=[0,0,0,0,0,0,0,0],c=0,u=null,d=0,h=function(){return e.charAt(d)};if(\":\"==h()){if(\":\"!=e.charAt(1))return;d+=2,u=++c}for(;h();){if(8==c)return;if(\":\"!=h()){for(t=n=0;n<4&&R.test(h());)t=16*t+parseInt(h(),16),d++,n++;if(\".\"==h()){if(0==n)return;if(d-=n,c>6)return;for(r=0;h();){if(o=null,r>0){if(!(\".\"==h()&&r<4))return;d++}if(!T.test(h()))return;for(;T.test(h());){if(i=parseInt(h(),10),null===o)o=i;else{if(0==o)return;o=10*o+i}if(o>255)return;d++}l[c]=256*l[c]+o,2!=++r&&4!=r||c++}if(4!=r)return;break}if(\":\"==h()){if(d++,!h())return}else if(h())return;l[c++]=t}else{if(null!==u)return;d++,u=++c}}if(null!==u)for(s=c-u,c=7;0!=c&&s>0;)a=l[c],l[c--]=l[u+s-1],l[u+--s]=a;else if(8!=c)return;return l},W=function(e){var t,n,r,o;if(\"number\"==typeof e){for(t=[],n=0;n<4;n++)t.unshift(e%256),e=k(e/256);return t.join(\".\")}if(\"object\"==typeof e){for(t=\"\",r=function(e){for(var t=null,n=1,r=null,o=0,i=0;i<8;i++)0!==e[i]?(o>n&&(t=r,n=o),r=null,o=0):(null===r&&(r=i),++o);return o>n&&(t=r,n=o),t}(e),n=0;n<8;n++)o&&0===e[n]||(o&&(o=!1),r===n?(t+=n?\":\":\"::\",o=!0):(t+=e[n].toString(16),n<7&&(t+=\":\")));return\"[\"+t+\"]\"}return e},z={},U=h({},z,{\" \":1,'\"':1,\"<\":1,\">\":1,\"`\":1}),V=h({},U,{\"#\":1,\"?\":1,\"{\":1,\"}\":1}),q=h({},V,{\"/\":1,\":\":1,\";\":1,\"=\":1,\"@\":1,\"[\":1,\"\\\\\":1,\"]\":1,\"^\":1,\"|\":1}),G=function(e,t){var n=f(e,0);return n>32&&n<127&&!d(t,e)?e:encodeURIComponent(e)},K={ftp:21,file:null,http:80,https:443,ws:80,wss:443},X=function(e){return d(K,e.scheme)},J=function(e){return\"\"!=e.username||\"\"!=e.password},Q=function(e){return!e.host||e.cannotBeABaseURL||\"file\"==e.scheme},Z=function(e,t){var n;return 2==e.length&&L.test(e.charAt(0))&&(\":\"==(n=e.charAt(1))||!t&&\"|\"==n)},ee=function(e){var t;return e.length>1&&Z(e.slice(0,2))&&(2==e.length||\"/\"===(t=e.charAt(2))||\"\\\\\"===t||\"?\"===t||\"#\"===t)},te=function(e){var t=e.path,n=t.length;!n||\"file\"==e.scheme&&1==n&&Z(t[0],!0)||t.pop()},ne=function(e){return\".\"===e||\"%2e\"===e.toLowerCase()},re={},oe={},ie={},se={},ae={},le={},ce={},ue={},de={},he={},me={},fe={},pe={},ge={},ve={},ye={},be={},_e={},we={},xe={},Ce={},ke=function(e,t,n,o){var i,s,a,l,c,u=n||re,h=0,f=\"\",p=!1,g=!1,v=!1;for(n||(e.scheme=\"\",e.username=\"\",e.password=\"\",e.host=null,e.port=null,e.path=[],e.query=null,e.fragment=null,e.cannotBeABaseURL=!1,t=t.replace(Y,\"\")),t=t.replace(P,\"\"),i=m(t);h<=i.length;){switch(s=i[h],u){case re:if(!s||!L.test(s)){if(n)return S;u=ie;continue}f+=s.toLowerCase(),u=oe;break;case oe:if(s&&(E.test(s)||\"+\"==s||\"-\"==s||\".\"==s))f+=s.toLowerCase();else{if(\":\"!=s){if(n)return S;f=\"\",u=ie,h=0;continue}if(n&&(X(e)!=d(K,f)||\"file\"==f&&(J(e)||null!==e.port)||\"file\"==e.scheme&&!e.host))return;if(e.scheme=f,n)return void(X(e)&&K[e.scheme]==e.port&&(e.port=null));f=\"\",\"file\"==e.scheme?u=ge:X(e)&&o&&o.scheme==e.scheme?u=se:X(e)?u=ue:\"/\"==i[h+1]?(u=ae,h++):(e.cannotBeABaseURL=!0,e.path.push(\"\"),u=we)}break;case ie:if(!o||o.cannotBeABaseURL&&\"#\"!=s)return S;if(o.cannotBeABaseURL&&\"#\"==s){e.scheme=o.scheme,e.path=o.path.slice(),e.query=o.query,e.fragment=\"\",e.cannotBeABaseURL=!0,u=Ce;break}u=\"file\"==o.scheme?ge:le;continue;case se:if(\"/\"!=s||\"/\"!=i[h+1]){u=le;continue}u=de,h++;break;case ae:if(\"/\"==s){u=he;break}u=_e;continue;case le:if(e.scheme=o.scheme,s==r)e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,e.path=o.path.slice(),e.query=o.query;else if(\"/\"==s||\"\\\\\"==s&&X(e))u=ce;else if(\"?\"==s)e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,e.path=o.path.slice(),e.query=\"\",u=xe;else{if(\"#\"!=s){e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,e.path=o.path.slice(),e.path.pop(),u=_e;continue}e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,e.path=o.path.slice(),e.query=o.query,e.fragment=\"\",u=Ce}break;case ce:if(!X(e)||\"/\"!=s&&\"\\\\\"!=s){if(\"/\"!=s){e.username=o.username,e.password=o.password,e.host=o.host,e.port=o.port,u=_e;continue}u=he}else u=de;break;case ue:if(u=de,\"/\"!=s||\"/\"!=f.charAt(h+1))continue;h++;break;case de:if(\"/\"!=s&&\"\\\\\"!=s){u=he;continue}break;case he:if(\"@\"==s){p&&(f=\"%40\"+f),p=!0,a=m(f);for(var y=0;y<a.length;y++){var b=a[y];if(\":\"!=b||v){var _=G(b,q);v?e.password+=_:e.username+=_}else v=!0}f=\"\"}else if(s==r||\"/\"==s||\"?\"==s||\"#\"==s||\"\\\\\"==s&&X(e)){if(p&&\"\"==f)return\"Invalid authority\";h-=m(f).length+1,f=\"\",u=me}else f+=s;break;case me:case fe:if(n&&\"file\"==e.scheme){u=ye;continue}if(\":\"!=s||g){if(s==r||\"/\"==s||\"?\"==s||\"#\"==s||\"\\\\\"==s&&X(e)){if(X(e)&&\"\"==f)return A;if(n&&\"\"==f&&(J(e)||null!==e.port))return;if(l=I(e,f))return l;if(f=\"\",u=be,n)return;continue}\"[\"==s?g=!0:\"]\"==s&&(g=!1),f+=s}else{if(\"\"==f)return A;if(l=I(e,f))return l;if(f=\"\",u=pe,n==fe)return}break;case pe:if(!T.test(s)){if(s==r||\"/\"==s||\"?\"==s||\"#\"==s||\"\\\\\"==s&&X(e)||n){if(\"\"!=f){var w=parseInt(f,10);if(w>65535)return M;e.port=X(e)&&w===K[e.scheme]?null:w,f=\"\"}if(n)return;u=be;continue}return M}f+=s;break;case ge:if(e.scheme=\"file\",\"/\"==s||\"\\\\\"==s)u=ve;else{if(!o||\"file\"!=o.scheme){u=_e;continue}if(s==r)e.host=o.host,e.path=o.path.slice(),e.query=o.query;else if(\"?\"==s)e.host=o.host,e.path=o.path.slice(),e.query=\"\",u=xe;else{if(\"#\"!=s){ee(i.slice(h).join(\"\"))||(e.host=o.host,e.path=o.path.slice(),te(e)),u=_e;continue}e.host=o.host,e.path=o.path.slice(),e.query=o.query,e.fragment=\"\",u=Ce}}break;case ve:if(\"/\"==s||\"\\\\\"==s){u=ye;break}o&&\"file\"==o.scheme&&!ee(i.slice(h).join(\"\"))&&(Z(o.path[0],!0)?e.path.push(o.path[0]):e.host=o.host),u=_e;continue;case ye:if(s==r||\"/\"==s||\"\\\\\"==s||\"?\"==s||\"#\"==s){if(!n&&Z(f))u=_e;else if(\"\"==f){if(e.host=\"\",n)return;u=be}else{if(l=I(e,f))return l;if(\"localhost\"==e.host&&(e.host=\"\"),n)return;f=\"\",u=be}continue}f+=s;break;case be:if(X(e)){if(u=_e,\"/\"!=s&&\"\\\\\"!=s)continue}else if(n||\"?\"!=s)if(n||\"#\"!=s){if(s!=r&&(u=_e,\"/\"!=s))continue}else e.fragment=\"\",u=Ce;else e.query=\"\",u=xe;break;case _e:if(s==r||\"/\"==s||\"\\\\\"==s&&X(e)||!n&&(\"?\"==s||\"#\"==s)){if(\"..\"===(c=(c=f).toLowerCase())||\"%2e.\"===c||\".%2e\"===c||\"%2e%2e\"===c?(te(e),\"/\"==s||\"\\\\\"==s&&X(e)||e.path.push(\"\")):ne(f)?\"/\"==s||\"\\\\\"==s&&X(e)||e.path.push(\"\"):(\"file\"==e.scheme&&!e.path.length&&Z(f)&&(e.host&&(e.host=\"\"),f=f.charAt(0)+\":\"),e.path.push(f)),f=\"\",\"file\"==e.scheme&&(s==r||\"?\"==s||\"#\"==s))for(;e.path.length>1&&\"\"===e.path[0];)e.path.shift();\"?\"==s?(e.query=\"\",u=xe):\"#\"==s&&(e.fragment=\"\",u=Ce)}else f+=G(s,V);break;case we:\"?\"==s?(e.query=\"\",u=xe):\"#\"==s?(e.fragment=\"\",u=Ce):s!=r&&(e.path[0]+=G(s,z));break;case xe:n||\"#\"!=s?s!=r&&(\"'\"==s&&X(e)?e.query+=\"%27\":e.query+=\"#\"==s?\"%23\":G(s,z)):(e.fragment=\"\",u=Ce);break;case Ce:s!=r&&(e.fragment+=G(s,U))}h++}},De=function(e){var t,n,r=u(this,De,\"URL\"),o=arguments.length>1?arguments[1]:void 0,s=String(e),a=x(r,{type:\"URL\"});if(void 0!==o)if(o instanceof De)t=C(o);else if(n=ke(t={},String(o)))throw TypeError(n);if(n=ke(a,s,null,t))throw TypeError(n);var l=a.searchParams=new _,c=w(l);c.updateSearchParams(a.query),c.updateURL=function(){a.query=String(l)||null},i||(r.href=Ae.call(r),r.origin=Me.call(r),r.protocol=Le.call(r),r.username=Ee.call(r),r.password=Te.call(r),r.host=Fe.call(r),r.hostname=Oe.call(r),r.port=Be.call(r),r.pathname=Re.call(r),r.search=$e.call(r),r.searchParams=Ne.call(r),r.hash=Ye.call(r))},Se=De.prototype,Ae=function(){var e=C(this),t=e.scheme,n=e.username,r=e.password,o=e.host,i=e.port,s=e.path,a=e.query,l=e.fragment,c=t+\":\";return null!==o?(c+=\"//\",J(e)&&(c+=n+(r?\":\"+r:\"\")+\"@\"),c+=W(o),null!==i&&(c+=\":\"+i)):\"file\"==t&&(c+=\"//\"),c+=e.cannotBeABaseURL?s[0]:s.length?\"/\"+s.join(\"/\"):\"\",null!==a&&(c+=\"?\"+a),null!==l&&(c+=\"#\"+l),c},Me=function(){var e=C(this),t=e.scheme,n=e.port;if(\"blob\"==t)try{return new URL(t.path[0]).origin}catch(e){return\"null\"}return\"file\"!=t&&X(e)?t+\"://\"+W(e.host)+(null!==n?\":\"+n:\"\"):\"null\"},Le=function(){return C(this).scheme+\":\"},Ee=function(){return C(this).username},Te=function(){return C(this).password},Fe=function(){var e=C(this),t=e.host,n=e.port;return null===t?\"\":null===n?W(t):W(t)+\":\"+n},Oe=function(){var e=C(this).host;return null===e?\"\":W(e)},Be=function(){var e=C(this).port;return null===e?\"\":String(e)},Re=function(){var e=C(this),t=e.path;return e.cannotBeABaseURL?t[0]:t.length?\"/\"+t.join(\"/\"):\"\"},$e=function(){var e=C(this).query;return e?\"?\"+e:\"\"},Ne=function(){return C(this).searchParams},Ye=function(){var e=C(this).fragment;return e?\"#\"+e:\"\"},Pe=function(e,t){return{get:e,set:t,configurable:!0,enumerable:!0}};if(i&&l(Se,{href:Pe(Ae,(function(e){var t=C(this),n=String(e),r=ke(t,n);if(r)throw TypeError(r);w(t.searchParams).updateSearchParams(t.query)})),origin:Pe(Me),protocol:Pe(Le,(function(e){var t=C(this);ke(t,String(e)+\":\",re)})),username:Pe(Ee,(function(e){var t=C(this),n=m(String(e));if(!Q(t)){t.username=\"\";for(var r=0;r<n.length;r++)t.username+=G(n[r],q)}})),password:Pe(Te,(function(e){var t=C(this),n=m(String(e));if(!Q(t)){t.password=\"\";for(var r=0;r<n.length;r++)t.password+=G(n[r],q)}})),host:Pe(Fe,(function(e){var t=C(this);t.cannotBeABaseURL||ke(t,String(e),me)})),hostname:Pe(Oe,(function(e){var t=C(this);t.cannotBeABaseURL||ke(t,String(e),fe)})),port:Pe(Be,(function(e){var t=C(this);Q(t)||(\"\"==(e=String(e))?t.port=null:ke(t,e,pe))})),pathname:Pe(Re,(function(e){var t=C(this);t.cannotBeABaseURL||(t.path=[],ke(t,e+\"\",be))})),search:Pe($e,(function(e){var t=C(this);\"\"==(e=String(e))?t.query=null:(\"?\"==e.charAt(0)&&(e=e.slice(1)),t.query=\"\",ke(t,e,xe)),w(t.searchParams).updateSearchParams(t.query)})),searchParams:Pe(Ne),hash:Pe(Ye,(function(e){var t=C(this);\"\"!=(e=String(e))?(\"#\"==e.charAt(0)&&(e=e.slice(1)),t.fragment=\"\",ke(t,e,Ce)):t.fragment=null}))}),c(Se,\"toJSON\",(function(){return Ae.call(this)}),{enumerable:!0}),c(Se,\"toString\",(function(){return Ae.call(this)}),{enumerable:!0}),b){var Ie=b.createObjectURL,He=b.revokeObjectURL;Ie&&c(De,\"createObjectURL\",(function(e){return Ie.apply(b,arguments)})),He&&c(De,\"revokeObjectURL\",(function(e){return He.apply(b,arguments)}))}g(De,\"URL\"),o({global:!0,forced:!s,sham:!i},{URL:De})}},t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var r={};return function(){\"use strict\";function e(e,n){var r;if(\"undefined\"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,n){if(e){if(\"string\"==typeof e)return t(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(e):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(e))||n&&e&&\"number\"==typeof e.length){r&&(e=r);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var s,a=!0,l=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return a=e.done,e},e:function(e){l=!0,s=e},f:function(){try{a||null==r.return||r.return()}finally{if(l)throw s}}}}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}n.r(r),n.d(r,{Dropzone:function(){return _},default:function(){return D}}),n(2222),n(7327),n(2772),n(6992),n(1249),n(7042),n(561),n(8264),n(8309),n(489),n(1539),n(4916),n(9714),n(8783),n(4723),n(5306),n(3123),n(3210),n(2472),n(2990),n(8927),n(3105),n(5035),n(4345),n(7174),n(2846),n(4731),n(7209),n(6319),n(8867),n(7789),n(3739),n(9368),n(4483),n(2056),n(3462),n(678),n(7462),n(3824),n(5021),n(2974),n(5016),n(4747),n(3948),n(285);var i=function(){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}var n,r,i;return n=t,r=[{key:\"on\",value:function(e,t){return this._callbacks=this._callbacks||{},this._callbacks[e]||(this._callbacks[e]=[]),this._callbacks[e].push(t),this}},{key:\"emit\",value:function(t){this._callbacks=this._callbacks||{};for(var n=this._callbacks[t],r=arguments.length,o=new Array(r>1?r-1:0),i=1;i<r;i++)o[i-1]=arguments[i];if(n){var s,a=e(n,!0);try{for(a.s();!(s=a.n()).done;){var l=s.value;l.apply(this,o)}}catch(e){a.e(e)}finally{a.f()}}return this.element&&this.element.dispatchEvent(this.makeEvent(\"dropzone:\"+t,{args:o})),this}},{key:\"makeEvent\",value:function(e,t){var n={bubbles:!0,cancelable:!0,detail:t};if(\"function\"==typeof window.CustomEvent)return new CustomEvent(e,n);var r=document.createEvent(\"CustomEvent\");return r.initCustomEvent(e,n.bubbles,n.cancelable,n.detail),r}},{key:\"off\",value:function(e,t){if(!this._callbacks||0===arguments.length)return this._callbacks={},this;var n=this._callbacks[e];if(!n)return this;if(1===arguments.length)return delete this._callbacks[e],this;for(var r=0;r<n.length;r++){var o=n[r];if(o===t){n.splice(r,1);break}}return this}}],r&&o(n.prototype,r),i&&o(n,i),t}();function s(e,t){var n;if(\"undefined\"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var i,s=!0,l=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return s=e.done,e},e:function(e){l=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw i}}}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var l={url:null,method:\"post\",withCredentials:!1,timeout:null,parallelUploads:2,uploadMultiple:!1,chunking:!1,forceChunking:!1,chunkSize:2e6,parallelChunkUploads:!1,retryChunks:!1,retryChunksLimit:3,maxFilesize:256,paramName:\"file\",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:\"crop\",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:\"contain\",filesizeBase:1e3,maxFiles:null,headers:null,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,disablePreviews:!1,hiddenInputContainer:\"body\",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:\"Drop files here to upload\",dictFallbackMessage:\"Your browser does not support drag'n'drop file uploads.\",dictFallbackText:\"Please use the fallback form below to upload your files like in the olden days.\",dictFileTooBig:\"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",dictInvalidFileType:\"You can't upload files of this type.\",dictResponseError:\"Server responded with {{statusCode}} code.\",dictCancelUpload:\"Cancel upload\",dictUploadCanceled:\"Upload canceled.\",dictCancelUploadConfirmation:\"Are you sure you want to cancel this upload?\",dictRemoveFile:\"Remove file\",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:\"You can not upload any more files.\",dictFileSizeUnits:{tb:\"TB\",gb:\"GB\",mb:\"MB\",kb:\"KB\",b:\"b\"},init:function(){},params:function(e,t,n){if(n)return{dzuuid:n.file.upload.uuid,dzchunkindex:n.index,dztotalfilesize:n.file.size,dzchunksize:this.options.chunkSize,dztotalchunkcount:n.file.upload.totalChunkCount,dzchunkbyteoffset:n.index*this.options.chunkSize}},accept:function(e,t){return t()},chunksUploaded:function(e,t){t()},fallback:function(){var e;this.element.className=\"\".concat(this.element.className,\" dz-browser-not-supported\");var t,n=s(this.element.getElementsByTagName(\"div\"),!0);try{for(n.s();!(t=n.n()).done;){var r=t.value;if(/(^| )dz-message($| )/.test(r.className)){e=r,r.className=\"dz-message\";break}}}catch(e){n.e(e)}finally{n.f()}e||(e=_.createElement('<div class=\"dz-message\"><span></span></div>'),this.element.appendChild(e));var o=e.getElementsByTagName(\"span\")[0];return o&&(null!=o.textContent?o.textContent=this.options.dictFallbackMessage:null!=o.innerText&&(o.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(e,t,n,r){var o={srcX:0,srcY:0,srcWidth:e.width,srcHeight:e.height},i=e.width/e.height;null==t&&null==n?(t=o.srcWidth,n=o.srcHeight):null==t?t=n*i:null==n&&(n=t/i);var s=(t=Math.min(t,o.srcWidth))/(n=Math.min(n,o.srcHeight));if(o.srcWidth>t||o.srcHeight>n)if(\"crop\"===r)i>s?(o.srcHeight=e.height,o.srcWidth=o.srcHeight*s):(o.srcWidth=e.width,o.srcHeight=o.srcWidth/s);else{if(\"contain\"!==r)throw new Error(\"Unknown resizeMethod '\".concat(r,\"'\"));i>s?n=t/i:t=n*i}return o.srcX=(e.width-o.srcWidth)/2,o.srcY=(e.height-o.srcHeight)/2,o.trgWidth=t,o.trgHeight=n,o},transformFile:function(e,t){return(this.options.resizeWidth||this.options.resizeHeight)&&e.type.match(/image.*/)?this.resizeImage(e,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,t):t(e)},previewTemplate:'<div class=\"dz-preview dz-file-preview\"> <div class=\"dz-image\"><img data-dz-thumbnail/></div> <div class=\"dz-details\"> <div class=\"dz-size\"><span data-dz-size></span></div> <div class=\"dz-filename\"><span data-dz-name></span></div> </div> <div class=\"dz-progress\"> <span class=\"dz-upload\" data-dz-uploadprogress></span> </div> <div class=\"dz-error-message\"><span data-dz-errormessage></span></div> <div class=\"dz-success-mark\"> <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"> <title>Check</title> <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <path d=\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" stroke-opacity=\"0.198794158\" stroke=\"#747474\" fill-opacity=\"0.816519475\" fill=\"#FFFFFF\"></path> </g> </svg> </div> <div class=\"dz-error-mark\"> <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"> <title>Error</title> <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g stroke=\"#747474\" stroke-opacity=\"0.198794158\" fill=\"#FFFFFF\" fill-opacity=\"0.816519475\"> <path d=\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\"></path> </g> </g> </svg> </div> </div> ',drop:function(e){return this.element.classList.remove(\"dz-drag-hover\")},dragstart:function(e){},dragend:function(e){return this.element.classList.remove(\"dz-drag-hover\")},dragenter:function(e){return this.element.classList.add(\"dz-drag-hover\")},dragover:function(e){return this.element.classList.add(\"dz-drag-hover\")},dragleave:function(e){return this.element.classList.remove(\"dz-drag-hover\")},paste:function(e){},reset:function(){return this.element.classList.remove(\"dz-started\")},addedfile:function(e){var t=this;if(this.element===this.previewsContainer&&this.element.classList.add(\"dz-started\"),this.previewsContainer&&!this.options.disablePreviews){e.previewElement=_.createElement(this.options.previewTemplate.trim()),e.previewTemplate=e.previewElement,this.previewsContainer.appendChild(e.previewElement);var n,r=s(e.previewElement.querySelectorAll(\"[data-dz-name]\"),!0);try{for(r.s();!(n=r.n()).done;){var o=n.value;o.textContent=e.name}}catch(e){r.e(e)}finally{r.f()}var i,a=s(e.previewElement.querySelectorAll(\"[data-dz-size]\"),!0);try{for(a.s();!(i=a.n()).done;)(o=i.value).innerHTML=this.filesize(e.size)}catch(e){a.e(e)}finally{a.f()}this.options.addRemoveLinks&&(e._removeLink=_.createElement('<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>'.concat(this.options.dictRemoveFile,\"</a>\")),e.previewElement.appendChild(e._removeLink));var l,c=function(n){return n.preventDefault(),n.stopPropagation(),e.status===_.UPLOADING?_.confirm(t.options.dictCancelUploadConfirmation,(function(){return t.removeFile(e)})):t.options.dictRemoveFileConfirmation?_.confirm(t.options.dictRemoveFileConfirmation,(function(){return t.removeFile(e)})):t.removeFile(e)},u=s(e.previewElement.querySelectorAll(\"[data-dz-remove]\"),!0);try{for(u.s();!(l=u.n()).done;)l.value.addEventListener(\"click\",c)}catch(e){u.e(e)}finally{u.f()}}},removedfile:function(e){return null!=e.previewElement&&null!=e.previewElement.parentNode&&e.previewElement.parentNode.removeChild(e.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(e,t){if(e.previewElement){e.previewElement.classList.remove(\"dz-file-preview\");var n,r=s(e.previewElement.querySelectorAll(\"[data-dz-thumbnail]\"),!0);try{for(r.s();!(n=r.n()).done;){var o=n.value;o.alt=e.name,o.src=t}}catch(e){r.e(e)}finally{r.f()}return setTimeout((function(){return e.previewElement.classList.add(\"dz-image-preview\")}),1)}},error:function(e,t){if(e.previewElement){e.previewElement.classList.add(\"dz-error\"),\"string\"!=typeof t&&t.error&&(t=t.error);var n,r=s(e.previewElement.querySelectorAll(\"[data-dz-errormessage]\"),!0);try{for(r.s();!(n=r.n()).done;)n.value.textContent=t}catch(e){r.e(e)}finally{r.f()}}},errormultiple:function(){},processing:function(e){if(e.previewElement&&(e.previewElement.classList.add(\"dz-processing\"),e._removeLink))return e._removeLink.innerHTML=this.options.dictCancelUpload},processingmultiple:function(){},uploadprogress:function(e,t,n){if(e.previewElement){var r,o=s(e.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\"),!0);try{for(o.s();!(r=o.n()).done;){var i=r.value;\"PROGRESS\"===i.nodeName?i.value=t:i.style.width=\"\".concat(t,\"%\")}}catch(e){o.e(e)}finally{o.f()}}},totaluploadprogress:function(){},sending:function(){},sendingmultiple:function(){},success:function(e){if(e.previewElement)return e.previewElement.classList.add(\"dz-success\")},successmultiple:function(){},canceled:function(e){return this.emit(\"error\",e,this.options.dictUploadCanceled)},canceledmultiple:function(){},complete:function(e){if(e._removeLink&&(e._removeLink.innerHTML=this.options.dictRemoveFile),e.previewElement)return e.previewElement.classList.add(\"dz-complete\")},completemultiple:function(){},maxfilesexceeded:function(){},maxfilesreached:function(){},queuecomplete:function(){},addedfiles:function(){}};function c(e){return c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c(e)}function u(e,t){var n;if(\"undefined\"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var i,s=!0,a=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return s=e.done,e},e:function(e){a=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw i}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function h(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function m(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function f(e,t,n){return t&&m(e.prototype,t),n&&m(e,n),e}function p(e,t){return p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},p(e,t)}function g(e){var t=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=b(e);if(t){var o=b(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return v(this,n)}}function v(e,t){return!t||\"object\"!==c(t)&&\"function\"!=typeof t?y(e):t}function y(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}var _=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&p(e,t)}(n,e);var t=g(n);function n(e,r){var o,i,s;if(h(this,n),(o=t.call(this)).element=e,o.version=n.version,o.clickableElements=[],o.listeners=[],o.files=[],\"string\"==typeof o.element&&(o.element=document.querySelector(o.element)),!o.element||null==o.element.nodeType)throw new Error(\"Invalid dropzone element.\");if(o.element.dropzone)throw new Error(\"Dropzone already attached.\");n.instances.push(y(o)),o.element.dropzone=y(o);var a=null!=(s=n.optionsForElement(o.element))?s:{};if(o.options=n.extend({},l,a,null!=r?r:{}),o.options.previewTemplate=o.options.previewTemplate.replace(/\\n*/g,\"\"),o.options.forceFallback||!n.isBrowserSupported())return v(o,o.options.fallback.call(y(o)));if(null==o.options.url&&(o.options.url=o.element.getAttribute(\"action\")),!o.options.url)throw new Error(\"No URL provided.\");if(o.options.acceptedFiles&&o.options.acceptedMimeTypes)throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");if(o.options.uploadMultiple&&o.options.chunking)throw new Error(\"You cannot set both: uploadMultiple and chunking.\");return o.options.acceptedMimeTypes&&(o.options.acceptedFiles=o.options.acceptedMimeTypes,delete o.options.acceptedMimeTypes),null!=o.options.renameFilename&&(o.options.renameFile=function(e){return o.options.renameFilename.call(y(o),e.name,e)}),\"string\"==typeof o.options.method&&(o.options.method=o.options.method.toUpperCase()),(i=o.getExistingFallback())&&i.parentNode&&i.parentNode.removeChild(i),!1!==o.options.previewsContainer&&(o.options.previewsContainer?o.previewsContainer=n.getElement(o.options.previewsContainer,\"previewsContainer\"):o.previewsContainer=o.element),o.options.clickable&&(!0===o.options.clickable?o.clickableElements=[o.element]:o.clickableElements=n.getElements(o.options.clickable,\"clickable\")),o.init(),o}return f(n,[{key:\"getAcceptedFiles\",value:function(){return this.files.filter((function(e){return e.accepted})).map((function(e){return e}))}},{key:\"getRejectedFiles\",value:function(){return this.files.filter((function(e){return!e.accepted})).map((function(e){return e}))}},{key:\"getFilesWithStatus\",value:function(e){return this.files.filter((function(t){return t.status===e})).map((function(e){return e}))}},{key:\"getQueuedFiles\",value:function(){return this.getFilesWithStatus(n.QUEUED)}},{key:\"getUploadingFiles\",value:function(){return this.getFilesWithStatus(n.UPLOADING)}},{key:\"getAddedFiles\",value:function(){return this.getFilesWithStatus(n.ADDED)}},{key:\"getActiveFiles\",value:function(){return this.files.filter((function(e){return e.status===n.UPLOADING||e.status===n.QUEUED})).map((function(e){return e}))}},{key:\"init\",value:function(){var e=this;\"form\"===this.element.tagName&&this.element.setAttribute(\"enctype\",\"multipart/form-data\"),this.element.classList.contains(\"dropzone\")&&!this.element.querySelector(\".dz-message\")&&this.element.appendChild(n.createElement('<div class=\"dz-default dz-message\"><button class=\"dz-button\" type=\"button\">'.concat(this.options.dictDefaultMessage,\"</button></div>\"))),this.clickableElements.length&&function t(){e.hiddenFileInput&&e.hiddenFileInput.parentNode.removeChild(e.hiddenFileInput),e.hiddenFileInput=document.createElement(\"input\"),e.hiddenFileInput.setAttribute(\"type\",\"file\"),(null===e.options.maxFiles||e.options.maxFiles>1)&&e.hiddenFileInput.setAttribute(\"multiple\",\"multiple\"),e.hiddenFileInput.className=\"dz-hidden-input\",null!==e.options.acceptedFiles&&e.hiddenFileInput.setAttribute(\"accept\",e.options.acceptedFiles),null!==e.options.capture&&e.hiddenFileInput.setAttribute(\"capture\",e.options.capture),e.hiddenFileInput.setAttribute(\"tabindex\",\"-1\"),e.hiddenFileInput.style.visibility=\"hidden\",e.hiddenFileInput.style.position=\"absolute\",e.hiddenFileInput.style.top=\"0\",e.hiddenFileInput.style.left=\"0\",e.hiddenFileInput.style.height=\"0\",e.hiddenFileInput.style.width=\"0\",n.getElement(e.options.hiddenInputContainer,\"hiddenInputContainer\").appendChild(e.hiddenFileInput),e.hiddenFileInput.addEventListener(\"change\",(function(){var n=e.hiddenFileInput.files;if(n.length){var r,o=u(n,!0);try{for(o.s();!(r=o.n()).done;){var i=r.value;e.addFile(i)}}catch(e){o.e(e)}finally{o.f()}}e.emit(\"addedfiles\",n),t()}))}(),this.URL=null!==window.URL?window.URL:window.webkitURL;var t,r=u(this.events,!0);try{for(r.s();!(t=r.n()).done;){var o=t.value;this.on(o,this.options[o])}}catch(e){r.e(e)}finally{r.f()}this.on(\"uploadprogress\",(function(){return e.updateTotalUploadProgress()})),this.on(\"removedfile\",(function(){return e.updateTotalUploadProgress()})),this.on(\"canceled\",(function(t){return e.emit(\"complete\",t)})),this.on(\"complete\",(function(t){if(0===e.getAddedFiles().length&&0===e.getUploadingFiles().length&&0===e.getQueuedFiles().length)return setTimeout((function(){return e.emit(\"queuecomplete\")}),0)}));var i=function(e){if(function(e){if(e.dataTransfer.types)for(var t=0;t<e.dataTransfer.types.length;t++)if(\"Files\"===e.dataTransfer.types[t])return!0;return!1}(e))return e.stopPropagation(),e.preventDefault?e.preventDefault():e.returnValue=!1};return this.listeners=[{element:this.element,events:{dragstart:function(t){return e.emit(\"dragstart\",t)},dragenter:function(t){return i(t),e.emit(\"dragenter\",t)},dragover:function(t){var n;try{n=t.dataTransfer.effectAllowed}catch(e){}return t.dataTransfer.dropEffect=\"move\"===n||\"linkMove\"===n?\"move\":\"copy\",i(t),e.emit(\"dragover\",t)},dragleave:function(t){return e.emit(\"dragleave\",t)},drop:function(t){return i(t),e.drop(t)},dragend:function(t){return e.emit(\"dragend\",t)}}}],this.clickableElements.forEach((function(t){return e.listeners.push({element:t,events:{click:function(r){return(t!==e.element||r.target===e.element||n.elementInside(r.target,e.element.querySelector(\".dz-message\")))&&e.hiddenFileInput.click(),!0}}})})),this.enable(),this.options.init.call(this)}},{key:\"destroy\",value:function(){return this.disable(),this.removeAllFiles(!0),(null!=this.hiddenFileInput?this.hiddenFileInput.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,n.instances.splice(n.instances.indexOf(this),1)}},{key:\"updateTotalUploadProgress\",value:function(){var e,t=0,n=0;if(this.getActiveFiles().length){var r,o=u(this.getActiveFiles(),!0);try{for(o.s();!(r=o.n()).done;){var i=r.value;t+=i.upload.bytesSent,n+=i.upload.total}}catch(e){o.e(e)}finally{o.f()}e=100*t/n}else e=100;return this.emit(\"totaluploadprogress\",e,n,t)}},{key:\"_getParamName\",value:function(e){return\"function\"==typeof this.options.paramName?this.options.paramName(e):\"\".concat(this.options.paramName).concat(this.options.uploadMultiple?\"[\".concat(e,\"]\"):\"\")}},{key:\"_renameFile\",value:function(e){return\"function\"!=typeof this.options.renameFile?e.name:this.options.renameFile(e)}},{key:\"getFallbackForm\",value:function(){var e,t;if(e=this.getExistingFallback())return e;var r='<div class=\"dz-fallback\">';this.options.dictFallbackText&&(r+=\"<p>\".concat(this.options.dictFallbackText,\"</p>\")),r+='<input type=\"file\" name=\"'.concat(this._getParamName(0),'\" ').concat(this.options.uploadMultiple?'multiple=\"multiple\"':void 0,' /><input type=\"submit\" value=\"Upload!\"></div>');var o=n.createElement(r);return\"FORM\"!==this.element.tagName?(t=n.createElement('<form action=\"'.concat(this.options.url,'\" enctype=\"multipart/form-data\" method=\"').concat(this.options.method,'\"></form>'))).appendChild(o):(this.element.setAttribute(\"enctype\",\"multipart/form-data\"),this.element.setAttribute(\"method\",this.options.method)),null!=t?t:o}},{key:\"getExistingFallback\",value:function(){for(var e=function(e){var t,n=u(e,!0);try{for(n.s();!(t=n.n()).done;){var r=t.value;if(/(^| )fallback($| )/.test(r.className))return r}}catch(e){n.e(e)}finally{n.f()}},t=0,n=[\"div\",\"form\"];t<n.length;t++){var r,o=n[t];if(r=e(this.element.getElementsByTagName(o)))return r}}},{key:\"setupEventListeners\",value:function(){return this.listeners.map((function(e){return function(){var t=[];for(var n in e.events){var r=e.events[n];t.push(e.element.addEventListener(n,r,!1))}return t}()}))}},{key:\"removeEventListeners\",value:function(){return this.listeners.map((function(e){return function(){var t=[];for(var n in e.events){var r=e.events[n];t.push(e.element.removeEventListener(n,r,!1))}return t}()}))}},{key:\"disable\",value:function(){var e=this;return this.clickableElements.forEach((function(e){return e.classList.remove(\"dz-clickable\")})),this.removeEventListeners(),this.disabled=!0,this.files.map((function(t){return e.cancelUpload(t)}))}},{key:\"enable\",value:function(){return delete this.disabled,this.clickableElements.forEach((function(e){return e.classList.add(\"dz-clickable\")})),this.setupEventListeners()}},{key:\"filesize\",value:function(e){var t=0,n=\"b\";if(e>0){for(var r=[\"tb\",\"gb\",\"mb\",\"kb\",\"b\"],o=0;o<r.length;o++){var i=r[o];if(e>=Math.pow(this.options.filesizeBase,4-o)/10){t=e/Math.pow(this.options.filesizeBase,4-o),n=i;break}}t=Math.round(10*t)/10}return\"<strong>\".concat(t,\"</strong> \").concat(this.options.dictFileSizeUnits[n])}},{key:\"_updateMaxFilesReachedClass\",value:function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit(\"maxfilesreached\",this.files),this.element.classList.add(\"dz-max-files-reached\")):this.element.classList.remove(\"dz-max-files-reached\")}},{key:\"drop\",value:function(e){if(e.dataTransfer){this.emit(\"drop\",e);for(var t=[],n=0;n<e.dataTransfer.files.length;n++)t[n]=e.dataTransfer.files[n];if(t.length){var r=e.dataTransfer.items;r&&r.length&&null!=r[0].webkitGetAsEntry?this._addFilesFromItems(r):this.handleFiles(t)}this.emit(\"addedfiles\",t)}}},{key:\"paste\",value:function(e){if(null!=(t=null!=e?e.clipboardData:void 0,n=function(e){return e.items},null!=t?n(t):void 0)){var t,n;this.emit(\"paste\",e);var r=e.clipboardData.items;return r.length?this._addFilesFromItems(r):void 0}}},{key:\"handleFiles\",value:function(e){var t,n=u(e,!0);try{for(n.s();!(t=n.n()).done;){var r=t.value;this.addFile(r)}}catch(e){n.e(e)}finally{n.f()}}},{key:\"_addFilesFromItems\",value:function(e){var t=this;return function(){var n,r=[],o=u(e,!0);try{for(o.s();!(n=o.n()).done;){var i,s=n.value;null!=s.webkitGetAsEntry&&(i=s.webkitGetAsEntry())?i.isFile?r.push(t.addFile(s.getAsFile())):i.isDirectory?r.push(t._addFilesFromDirectory(i,i.name)):r.push(void 0):null==s.getAsFile||null!=s.kind&&\"file\"!==s.kind?r.push(void 0):r.push(t.addFile(s.getAsFile()))}}catch(e){o.e(e)}finally{o.f()}return r}()}},{key:\"_addFilesFromDirectory\",value:function(e,t){var n=this,r=e.createReader(),o=function(e){return t=console,n=\"log\",r=function(t){return t.log(e)},null!=t&&\"function\"==typeof t[n]?r(t,n):void 0;var t,n,r};return function e(){return r.readEntries((function(r){if(r.length>0){var o,i=u(r,!0);try{for(i.s();!(o=i.n()).done;){var s=o.value;s.isFile?s.file((function(e){if(!n.options.ignoreHiddenFiles||\".\"!==e.name.substring(0,1))return e.fullPath=\"\".concat(t,\"/\").concat(e.name),n.addFile(e)})):s.isDirectory&&n._addFilesFromDirectory(s,\"\".concat(t,\"/\").concat(s.name))}}catch(e){i.e(e)}finally{i.f()}e()}return null}),o)}()}},{key:\"accept\",value:function(e,t){this.options.maxFilesize&&e.size>1024*this.options.maxFilesize*1024?t(this.options.dictFileTooBig.replace(\"{{filesize}}\",Math.round(e.size/1024/10.24)/100).replace(\"{{maxFilesize}}\",this.options.maxFilesize)):n.isValidFile(e,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(t(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\",this.options.maxFiles)),this.emit(\"maxfilesexceeded\",e)):this.options.accept.call(this,e,t):t(this.options.dictInvalidFileType)}},{key:\"addFile\",value:function(e){var t=this;e.upload={uuid:n.uuidv4(),progress:0,total:e.size,bytesSent:0,filename:this._renameFile(e)},this.files.push(e),e.status=n.ADDED,this.emit(\"addedfile\",e),this._enqueueThumbnail(e),this.accept(e,(function(n){n?(e.accepted=!1,t._errorProcessing([e],n)):(e.accepted=!0,t.options.autoQueue&&t.enqueueFile(e)),t._updateMaxFilesReachedClass()}))}},{key:\"enqueueFiles\",value:function(e){var t,n=u(e,!0);try{for(n.s();!(t=n.n()).done;){var r=t.value;this.enqueueFile(r)}}catch(e){n.e(e)}finally{n.f()}return null}},{key:\"enqueueFile\",value:function(e){var t=this;if(e.status!==n.ADDED||!0!==e.accepted)throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");if(e.status=n.QUEUED,this.options.autoProcessQueue)return setTimeout((function(){return t.processQueue()}),0)}},{key:\"_enqueueThumbnail\",value:function(e){var t=this;if(this.options.createImageThumbnails&&e.type.match(/image.*/)&&e.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(e),setTimeout((function(){return t._processThumbnailQueue()}),0)}},{key:\"_processThumbnailQueue\",value:function(){var e=this;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length){this._processingThumbnail=!0;var t=this._thumbnailQueue.shift();return this.createThumbnail(t,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,(function(n){return e.emit(\"thumbnail\",t,n),e._processingThumbnail=!1,e._processThumbnailQueue()}))}}},{key:\"removeFile\",value:function(e){if(e.status===n.UPLOADING&&this.cancelUpload(e),this.files=w(this.files,e),this.emit(\"removedfile\",e),0===this.files.length)return this.emit(\"reset\")}},{key:\"removeAllFiles\",value:function(e){null==e&&(e=!1);var t,r=u(this.files.slice(),!0);try{for(r.s();!(t=r.n()).done;){var o=t.value;(o.status!==n.UPLOADING||e)&&this.removeFile(o)}}catch(e){r.e(e)}finally{r.f()}return null}},{key:\"resizeImage\",value:function(e,t,r,o,i){var s=this;return this.createThumbnail(e,t,r,o,!0,(function(t,r){if(null==r)return i(e);var o=s.options.resizeMimeType;null==o&&(o=e.type);var a=r.toDataURL(o,s.options.resizeQuality);return\"image/jpeg\"!==o&&\"image/jpg\"!==o||(a=k.restore(e.dataURL,a)),i(n.dataURItoBlob(a))}))}},{key:\"createThumbnail\",value:function(e,t,n,r,o,i){var s=this,a=new FileReader;a.onload=function(){e.dataURL=a.result,\"image/svg+xml\"!==e.type?s.createThumbnailFromUrl(e,t,n,r,o,i):null!=i&&i(a.result)},a.readAsDataURL(e)}},{key:\"displayExistingFile\",value:function(e,t,n,r){var o=this,i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];if(this.emit(\"addedfile\",e),this.emit(\"complete\",e),i){var s=function(t){o.emit(\"thumbnail\",e,t),n&&n()};e.dataURL=t,this.createThumbnailFromUrl(e,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,this.options.fixOrientation,s,r)}else this.emit(\"thumbnail\",e,t),n&&n()}},{key:\"createThumbnailFromUrl\",value:function(e,t,n,r,o,i,s){var a=this,l=document.createElement(\"img\");return s&&(l.crossOrigin=s),o=\"from-image\"!=getComputedStyle(document.body).imageOrientation&&o,l.onload=function(){var s=function(e){return e(1)};return\"undefined\"!=typeof EXIF&&null!==EXIF&&o&&(s=function(e){return EXIF.getData(l,(function(){return e(EXIF.getTag(this,\"Orientation\"))}))}),s((function(o){e.width=l.width,e.height=l.height;var s=a.options.resize.call(a,e,t,n,r),c=document.createElement(\"canvas\"),u=c.getContext(\"2d\");switch(c.width=s.trgWidth,c.height=s.trgHeight,o>4&&(c.width=s.trgHeight,c.height=s.trgWidth),o){case 2:u.translate(c.width,0),u.scale(-1,1);break;case 3:u.translate(c.width,c.height),u.rotate(Math.PI);break;case 4:u.translate(0,c.height),u.scale(1,-1);break;case 5:u.rotate(.5*Math.PI),u.scale(1,-1);break;case 6:u.rotate(.5*Math.PI),u.translate(0,-c.width);break;case 7:u.rotate(.5*Math.PI),u.translate(c.height,-c.width),u.scale(-1,1);break;case 8:u.rotate(-.5*Math.PI),u.translate(-c.height,0)}C(u,l,null!=s.srcX?s.srcX:0,null!=s.srcY?s.srcY:0,s.srcWidth,s.srcHeight,null!=s.trgX?s.trgX:0,null!=s.trgY?s.trgY:0,s.trgWidth,s.trgHeight);var d=c.toDataURL(\"image/png\");if(null!=i)return i(d,c)}))},null!=i&&(l.onerror=i),l.src=e.dataURL}},{key:\"processQueue\",value:function(){var e=this.options.parallelUploads,t=this.getUploadingFiles().length,n=t;if(!(t>=e)){var r=this.getQueuedFiles();if(r.length>0){if(this.options.uploadMultiple)return this.processFiles(r.slice(0,e-t));for(;n<e;){if(!r.length)return;this.processFile(r.shift()),n++}}}}},{key:\"processFile\",value:function(e){return this.processFiles([e])}},{key:\"processFiles\",value:function(e){var t,r=u(e,!0);try{for(r.s();!(t=r.n()).done;){var o=t.value;o.processing=!0,o.status=n.UPLOADING,this.emit(\"processing\",o)}}catch(e){r.e(e)}finally{r.f()}return this.options.uploadMultiple&&this.emit(\"processingmultiple\",e),this.uploadFiles(e)}},{key:\"_getFilesWithXhr\",value:function(e){return this.files.filter((function(t){return t.xhr===e})).map((function(e){return e}))}},{key:\"cancelUpload\",value:function(e){if(e.status===n.UPLOADING){var t,r=this._getFilesWithXhr(e.xhr),o=u(r,!0);try{for(o.s();!(t=o.n()).done;)t.value.status=n.CANCELED}catch(e){o.e(e)}finally{o.f()}void 0!==e.xhr&&e.xhr.abort();var i,s=u(r,!0);try{for(s.s();!(i=s.n()).done;){var a=i.value;this.emit(\"canceled\",a)}}catch(e){s.e(e)}finally{s.f()}this.options.uploadMultiple&&this.emit(\"canceledmultiple\",r)}else e.status!==n.ADDED&&e.status!==n.QUEUED||(e.status=n.CANCELED,this.emit(\"canceled\",e),this.options.uploadMultiple&&this.emit(\"canceledmultiple\",[e]));if(this.options.autoProcessQueue)return this.processQueue()}},{key:\"resolveOption\",value:function(e){if(\"function\"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return e.apply(this,n)}return e}},{key:\"uploadFile\",value:function(e){return this.uploadFiles([e])}},{key:\"uploadFiles\",value:function(e){var t=this;this._transformFiles(e,(function(r){if(t.options.chunking){var o=r[0];e[0].upload.chunked=t.options.chunking&&(t.options.forceChunking||o.size>t.options.chunkSize),e[0].upload.totalChunkCount=Math.ceil(o.size/t.options.chunkSize)}if(e[0].upload.chunked){var i=e[0],s=r[0];i.upload.chunks=[];var a=function(){for(var r=0;void 0!==i.upload.chunks[r];)r++;if(!(r>=i.upload.totalChunkCount)){var o=r*t.options.chunkSize,a=Math.min(o+t.options.chunkSize,s.size),l={name:t._getParamName(0),data:s.webkitSlice?s.webkitSlice(o,a):s.slice(o,a),filename:i.upload.filename,chunkIndex:r};i.upload.chunks[r]={file:i,index:r,dataBlock:l,status:n.UPLOADING,progress:0,retries:0},t._uploadData(e,[l])}};if(i.upload.finishedChunkUpload=function(r,o){var s=!0;r.status=n.SUCCESS,r.dataBlock=null,r.xhr=null;for(var l=0;l<i.upload.totalChunkCount;l++){if(void 0===i.upload.chunks[l])return a();i.upload.chunks[l].status!==n.SUCCESS&&(s=!1)}s&&t.options.chunksUploaded(i,(function(){t._finished(e,o,null)}))},t.options.parallelChunkUploads)for(var l=0;l<i.upload.totalChunkCount;l++)a();else a()}else{for(var c=[],u=0;u<e.length;u++)c[u]={name:t._getParamName(u),data:r[u],filename:e[u].upload.filename};t._uploadData(e,c)}}))}},{key:\"_getChunk\",value:function(e,t){for(var n=0;n<e.upload.totalChunkCount;n++)if(void 0!==e.upload.chunks[n]&&e.upload.chunks[n].xhr===t)return e.upload.chunks[n]}},{key:\"_uploadData\",value:function(e,t){var r,o=this,i=new XMLHttpRequest,s=u(e,!0);try{for(s.s();!(r=s.n()).done;)r.value.xhr=i}catch(e){s.e(e)}finally{s.f()}e[0].upload.chunked&&(e[0].upload.chunks[t[0].chunkIndex].xhr=i);var a=this.resolveOption(this.options.method,e),l=this.resolveOption(this.options.url,e);i.open(a,l,!0),this.resolveOption(this.options.timeout,e)&&(i.timeout=this.resolveOption(this.options.timeout,e)),i.withCredentials=!!this.options.withCredentials,i.onload=function(t){o._finishedUploading(e,i,t)},i.ontimeout=function(){o._handleUploadError(e,i,\"Request timedout after \".concat(o.options.timeout/1e3,\" seconds\"))},i.onerror=function(){o._handleUploadError(e,i)},(null!=i.upload?i.upload:i).onprogress=function(t){return o._updateFilesUploadProgress(e,i,t)};var c={Accept:\"application/json\",\"Cache-Control\":\"no-cache\",\"X-Requested-With\":\"XMLHttpRequest\"};for(var d in this.options.headers&&n.extend(c,this.options.headers),c){var h=c[d];h&&i.setRequestHeader(d,h)}var m=new FormData;if(this.options.params){var f=this.options.params;for(var p in\"function\"==typeof f&&(f=f.call(this,e,i,e[0].upload.chunked?this._getChunk(e[0],i):null)),f){var g=f[p];if(Array.isArray(g))for(var v=0;v<g.length;v++)m.append(p,g[v]);else m.append(p,g)}}var y,b=u(e,!0);try{for(b.s();!(y=b.n()).done;){var _=y.value;this.emit(\"sending\",_,i,m)}}catch(e){b.e(e)}finally{b.f()}this.options.uploadMultiple&&this.emit(\"sendingmultiple\",e,i,m),this._addFormElementData(m);for(var w=0;w<t.length;w++){var x=t[w];m.append(x.name,x.data,x.filename)}this.submitRequest(i,m,e)}},{key:\"_transformFiles\",value:function(e,t){for(var n=this,r=[],o=0,i=function(i){n.options.transformFile.call(n,e[i],(function(n){r[i]=n,++o===e.length&&t(r)}))},s=0;s<e.length;s++)i(s)}},{key:\"_addFormElementData\",value:function(e){if(\"FORM\"===this.element.tagName){var t,n=u(this.element.querySelectorAll(\"input, textarea, select, button\"),!0);try{for(n.s();!(t=n.n()).done;){var r=t.value,o=r.getAttribute(\"name\"),i=r.getAttribute(\"type\");if(i&&(i=i.toLowerCase()),null!=o)if(\"SELECT\"===r.tagName&&r.hasAttribute(\"multiple\")){var s,a=u(r.options,!0);try{for(a.s();!(s=a.n()).done;){var l=s.value;l.selected&&e.append(o,l.value)}}catch(e){a.e(e)}finally{a.f()}}else(!i||\"checkbox\"!==i&&\"radio\"!==i||r.checked)&&e.append(o,r.value)}}catch(e){n.e(e)}finally{n.f()}}}},{key:\"_updateFilesUploadProgress\",value:function(e,t,n){if(e[0].upload.chunked){var r=e[0],o=this._getChunk(r,t);n?(o.progress=100*n.loaded/n.total,o.total=n.total,o.bytesSent=n.loaded):(o.progress=100,o.bytesSent=o.total),r.upload.progress=0,r.upload.total=0,r.upload.bytesSent=0;for(var i=0;i<r.upload.totalChunkCount;i++)r.upload.chunks[i]&&void 0!==r.upload.chunks[i].progress&&(r.upload.progress+=r.upload.chunks[i].progress,r.upload.total+=r.upload.chunks[i].total,r.upload.bytesSent+=r.upload.chunks[i].bytesSent);r.upload.progress=r.upload.progress/r.upload.totalChunkCount,this.emit(\"uploadprogress\",r,r.upload.progress,r.upload.bytesSent)}else{var s,a=u(e,!0);try{for(a.s();!(s=a.n()).done;){var l=s.value;l.upload.total&&l.upload.bytesSent&&l.upload.bytesSent==l.upload.total||(n?(l.upload.progress=100*n.loaded/n.total,l.upload.total=n.total,l.upload.bytesSent=n.loaded):(l.upload.progress=100,l.upload.bytesSent=l.upload.total),this.emit(\"uploadprogress\",l,l.upload.progress,l.upload.bytesSent))}}catch(e){a.e(e)}finally{a.f()}}}},{key:\"_finishedUploading\",value:function(e,t,r){var o;if(e[0].status!==n.CANCELED&&4===t.readyState){if(\"arraybuffer\"!==t.responseType&&\"blob\"!==t.responseType&&(o=t.responseText,t.getResponseHeader(\"content-type\")&&~t.getResponseHeader(\"content-type\").indexOf(\"application/json\")))try{o=JSON.parse(o)}catch(e){r=e,o=\"Invalid JSON response from server.\"}this._updateFilesUploadProgress(e,t),200<=t.status&&t.status<300?e[0].upload.chunked?e[0].upload.finishedChunkUpload(this._getChunk(e[0],t),o):this._finished(e,o,r):this._handleUploadError(e,t,o)}}},{key:\"_handleUploadError\",value:function(e,t,r){if(e[0].status!==n.CANCELED){if(e[0].upload.chunked&&this.options.retryChunks){var o=this._getChunk(e[0],t);if(o.retries++<this.options.retryChunksLimit)return void this._uploadData(e,[o.dataBlock]);console.warn(\"Retried this chunk too often. Giving up.\")}this._errorProcessing(e,r||this.options.dictResponseError.replace(\"{{statusCode}}\",t.status),t)}}},{key:\"submitRequest\",value:function(e,t,n){1==e.readyState?e.send(t):console.warn(\"Cannot send this request because the XMLHttpRequest.readyState is not OPENED.\")}},{key:\"_finished\",value:function(e,t,r){var o,i=u(e,!0);try{for(i.s();!(o=i.n()).done;){var s=o.value;s.status=n.SUCCESS,this.emit(\"success\",s,t,r),this.emit(\"complete\",s)}}catch(e){i.e(e)}finally{i.f()}if(this.options.uploadMultiple&&(this.emit(\"successmultiple\",e,t,r),this.emit(\"completemultiple\",e)),this.options.autoProcessQueue)return this.processQueue()}},{key:\"_errorProcessing\",value:function(e,t,r){var o,i=u(e,!0);try{for(i.s();!(o=i.n()).done;){var s=o.value;s.status=n.ERROR,this.emit(\"error\",s,t,r),this.emit(\"complete\",s)}}catch(e){i.e(e)}finally{i.f()}if(this.options.uploadMultiple&&(this.emit(\"errormultiple\",e,t,r),this.emit(\"completemultiple\",e)),this.options.autoProcessQueue)return this.processQueue()}}],[{key:\"initClass\",value:function(){this.prototype.Emitter=i,this.prototype.events=[\"drop\",\"dragstart\",\"dragend\",\"dragenter\",\"dragover\",\"dragleave\",\"addedfile\",\"addedfiles\",\"removedfile\",\"thumbnail\",\"error\",\"errormultiple\",\"processing\",\"processingmultiple\",\"uploadprogress\",\"totaluploadprogress\",\"sending\",\"sendingmultiple\",\"success\",\"successmultiple\",\"canceled\",\"canceledmultiple\",\"complete\",\"completemultiple\",\"reset\",\"maxfilesexceeded\",\"maxfilesreached\",\"queuecomplete\"],this.prototype._thumbnailQueue=[],this.prototype._processingThumbnail=!1}},{key:\"extend\",value:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];for(var o=0,i=n;o<i.length;o++){var s=i[o];for(var a in s){var l=s[a];e[a]=l}}return e}},{key:\"uuidv4\",value:function(){return\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return(\"x\"===e?t:3&t|8).toString(16)}))}}]),n}(i);_.initClass(),_.version=\"5.9.3\",_.options={},_.optionsForElement=function(e){return e.getAttribute(\"id\")?_.options[x(e.getAttribute(\"id\"))]:void 0},_.instances=[],_.forElement=function(e){if(\"string\"==typeof e&&(e=document.querySelector(e)),null==(null!=e?e.dropzone:void 0))throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");return e.dropzone},_.autoDiscover=!0,_.discover=function(){var e;if(document.querySelectorAll)e=document.querySelectorAll(\".dropzone\");else{e=[];var t=function(t){return function(){var n,r=[],o=u(t,!0);try{for(o.s();!(n=o.n()).done;){var i=n.value;/(^| )dropzone($| )/.test(i.className)?r.push(e.push(i)):r.push(void 0)}}catch(e){o.e(e)}finally{o.f()}return r}()};t(document.getElementsByTagName(\"div\")),t(document.getElementsByTagName(\"form\"))}return function(){var t,n=[],r=u(e,!0);try{for(r.s();!(t=r.n()).done;){var o=t.value;!1!==_.optionsForElement(o)?n.push(new _(o)):n.push(void 0)}}catch(e){r.e(e)}finally{r.f()}return n}()},_.blockedBrowsers=[/opera.*(Macintosh|Windows Phone).*version\\/12/i],_.isBrowserSupported=function(){var e=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if(\"classList\"in document.createElement(\"a\")){void 0!==_.blacklistedBrowsers&&(_.blockedBrowsers=_.blacklistedBrowsers);var t,n=u(_.blockedBrowsers,!0);try{for(n.s();!(t=n.n()).done;)t.value.test(navigator.userAgent)&&(e=!1)}catch(e){n.e(e)}finally{n.f()}}else e=!1;else e=!1;return e},_.dataURItoBlob=function(e){for(var t=atob(e.split(\",\")[1]),n=e.split(\",\")[0].split(\":\")[1].split(\";\")[0],r=new ArrayBuffer(t.length),o=new Uint8Array(r),i=0,s=t.length,a=0<=s;a?i<=s:i>=s;a?i++:i--)o[i]=t.charCodeAt(i);return new Blob([r],{type:n})};var w=function(e,t){return e.filter((function(e){return e!==t})).map((function(e){return e}))},x=function(e){return e.replace(/[\\-_](\\w)/g,(function(e){return e.charAt(1).toUpperCase()}))};_.createElement=function(e){var t=document.createElement(\"div\");return t.innerHTML=e,t.childNodes[0]},_.elementInside=function(e,t){if(e===t)return!0;for(;e=e.parentNode;)if(e===t)return!0;return!1},_.getElement=function(e,t){var n;if(\"string\"==typeof e?n=document.querySelector(e):null!=e.nodeType&&(n=e),null==n)throw new Error(\"Invalid `\".concat(t,\"` option provided. Please provide a CSS selector or a plain HTML element.\"));return n},_.getElements=function(e,t){var n,r;if(e instanceof Array){r=[];try{var o,i=u(e,!0);try{for(i.s();!(o=i.n()).done;)n=o.value,r.push(this.getElement(n,t))}catch(e){i.e(e)}finally{i.f()}}catch(e){r=null}}else if(\"string\"==typeof e){r=[];var s,a=u(document.querySelectorAll(e),!0);try{for(a.s();!(s=a.n()).done;)n=s.value,r.push(n)}catch(e){a.e(e)}finally{a.f()}}else null!=e.nodeType&&(r=[e]);if(null==r||!r.length)throw new Error(\"Invalid `\".concat(t,\"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\"));return r},_.confirm=function(e,t,n){return window.confirm(e)?t():null!=n?n():void 0},_.isValidFile=function(e,t){if(!t)return!0;t=t.split(\",\");var n,r=e.type,o=r.replace(/\\/.*$/,\"\"),i=u(t,!0);try{for(i.s();!(n=i.n()).done;){var s=n.value;if(\".\"===(s=s.trim()).charAt(0)){if(-1!==e.name.toLowerCase().indexOf(s.toLowerCase(),e.name.length-s.length))return!0}else if(/\\/\\*$/.test(s)){if(o===s.replace(/\\/.*$/,\"\"))return!0}else if(r===s)return!0}}catch(e){i.e(e)}finally{i.f()}return!1},\"undefined\"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(e){return this.each((function(){return new _(this,e)}))}),_.ADDED=\"added\",_.QUEUED=\"queued\",_.ACCEPTED=_.QUEUED,_.UPLOADING=\"uploading\",_.PROCESSING=_.UPLOADING,_.CANCELED=\"canceled\",_.ERROR=\"error\",_.SUCCESS=\"success\";var C=function(e,t,n,r,o,i,s,a,l,c){var u=function(e){e.naturalWidth;var t=e.naturalHeight,n=document.createElement(\"canvas\");n.width=1,n.height=t;var r=n.getContext(\"2d\");r.drawImage(e,0,0);for(var o=r.getImageData(1,0,1,t).data,i=0,s=t,a=t;a>i;)0===o[4*(a-1)+3]?s=a:i=a,a=s+i>>1;var l=a/t;return 0===l?1:l}(t);return e.drawImage(t,n,r,o,i,s,a,l,c/u)},k=function(){function e(){h(this,e)}return f(e,null,[{key:\"initClass\",value:function(){this.KEY_STR=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"}},{key:\"encode64\",value:function(e){for(var t=\"\",n=void 0,r=void 0,o=\"\",i=void 0,s=void 0,a=void 0,l=\"\",c=0;i=(n=e[c++])>>2,s=(3&n)<<4|(r=e[c++])>>4,a=(15&r)<<2|(o=e[c++])>>6,l=63&o,isNaN(r)?a=l=64:isNaN(o)&&(l=64),t=t+this.KEY_STR.charAt(i)+this.KEY_STR.charAt(s)+this.KEY_STR.charAt(a)+this.KEY_STR.charAt(l),n=r=o=\"\",i=s=a=l=\"\",c<e.length;);return t}},{key:\"restore\",value:function(e,t){if(!e.match(\"data:image/jpeg;base64,\"))return t;var n=this.decode64(e.replace(\"data:image/jpeg;base64,\",\"\")),r=this.slice2Segments(n),o=this.exifManipulation(t,r);return\"data:image/jpeg;base64,\".concat(this.encode64(o))}},{key:\"exifManipulation\",value:function(e,t){var n=this.getExifArray(t),r=this.insertExif(e,n);return new Uint8Array(r)}},{key:\"getExifArray\",value:function(e){for(var t=void 0,n=0;n<e.length;){if(255===(t=e[n])[0]&225===t[1])return t;n++}return[]}},{key:\"insertExif\",value:function(e,t){var n=e.replace(\"data:image/jpeg;base64,\",\"\"),r=this.decode64(n),o=r.indexOf(255,3),i=r.slice(0,o),s=r.slice(o),a=i;return a=(a=a.concat(t)).concat(s)}},{key:\"slice2Segments\",value:function(e){for(var t=0,n=[];!(255===e[t]&218===e[t+1]);){if(255===e[t]&216===e[t+1])t+=2;else{var r=t+(256*e[t+2]+e[t+3])+2,o=e.slice(t,r);n.push(o),t=r}if(t>e.length)break}return n}},{key:\"decode64\",value:function(e){var t=void 0,n=void 0,r=\"\",o=void 0,i=void 0,s=\"\",a=0,l=[];for(/[^A-Za-z0-9\\+\\/\\=]/g.exec(e)&&console.warn(\"There were invalid base64 characters in the input text.\\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\\nExpect errors in decoding.\"),e=e.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");t=this.KEY_STR.indexOf(e.charAt(a++))<<2|(o=this.KEY_STR.indexOf(e.charAt(a++)))>>4,n=(15&o)<<4|(i=this.KEY_STR.indexOf(e.charAt(a++)))>>2,r=(3&i)<<6|(s=this.KEY_STR.indexOf(e.charAt(a++))),l.push(t),64!==i&&l.push(n),64!==s&&l.push(r),t=n=r=\"\",o=i=s=\"\",a<e.length;);return l}}]),e}();k.initClass(),_._autoDiscoverFunction=function(){if(_.autoDiscover)return _.discover()},function(e,t){var n=!1,r=!0,o=e.document,i=o.documentElement,s=o.addEventListener?\"addEventListener\":\"attachEvent\",a=o.addEventListener?\"removeEventListener\":\"detachEvent\",l=o.addEventListener?\"\":\"on\",c=function r(i){if(\"readystatechange\"!==i.type||\"complete\"===o.readyState)return(\"load\"===i.type?e:o)[a](l+i.type,r,!1),!n&&(n=!0)?t.call(e,i.type||i):void 0};if(\"complete\"!==o.readyState){if(o.createEventObject&&i.doScroll){try{r=!e.frameElement}catch(e){}r&&function e(){try{i.doScroll(\"left\")}catch(t){return void setTimeout(e,50)}return c(\"poll\")}()}o[s](l+\"DOMContentLoaded\",c,!1),o[s](l+\"readystatechange\",c,!1),e[s](l+\"load\",c,!1)}}(window,_._autoDiscoverFunction),window.Dropzone=_;var D=_}(),r}()},e.exports=t()},6912:(e,t,n)=>{var r=n(4631);r.commands.tabAndIndentMarkdownList=function(e){var t=e.listSelections()[0].head;if(!1!==e.getStateAfter(t.line).list)e.execCommand(\"indentMore\");else if(e.options.indentWithTabs)e.execCommand(\"insertTab\");else{var n=Array(e.options.tabSize+1).join(\" \");e.replaceSelection(n)}},r.commands.shiftTabAndUnindentMarkdownList=function(e){var t=e.listSelections()[0].head;if(!1!==e.getStateAfter(t.line).list)e.execCommand(\"indentLess\");else if(e.options.indentWithTabs)e.execCommand(\"insertTab\");else{var n=Array(e.options.tabSize+1).join(\" \");e.replaceSelection(n)}}},4442:(e,t,n)=>{\"use strict\";var r=n(4631);n(3350),n(6912),n(960),n(9047),n(4146),n(8386),n(1994),n(4020),n(2095),n(2425),n(9589);var o=n(2354),i=n(970).TU,s=/Mac/.test(navigator.platform),a=new RegExp(/(<a.*?https?:\\/\\/.*?[^a]>)+?/g),l={toggleBold:y,toggleItalic:b,drawLink:B,toggleHeadingSmaller:C,toggleHeadingBigger:k,drawImage:R,toggleBlockquote:x,toggleOrderedList:F,toggleUnorderedList:T,toggleCodeBlock:w,togglePreview:z,toggleStrikethrough:_,toggleHeading1:D,toggleHeading2:S,toggleHeading3:A,toggleHeading4:M,toggleHeading5:L,toggleHeading6:E,cleanBlock:O,drawTable:P,drawHorizontalRule:I,undo:H,redo:j,toggleSideBySide:W,toggleFullScreen:v},c={toggleBold:\"Cmd-B\",toggleItalic:\"Cmd-I\",drawLink:\"Cmd-K\",toggleHeadingSmaller:\"Cmd-H\",toggleHeadingBigger:\"Shift-Cmd-H\",toggleHeading1:\"Ctrl+Alt+1\",toggleHeading2:\"Ctrl+Alt+2\",toggleHeading3:\"Ctrl+Alt+3\",toggleHeading4:\"Ctrl+Alt+4\",toggleHeading5:\"Ctrl+Alt+5\",toggleHeading6:\"Ctrl+Alt+6\",cleanBlock:\"Cmd-E\",drawImage:\"Cmd-Alt-I\",toggleBlockquote:\"Cmd-'\",toggleOrderedList:\"Cmd-Alt-L\",toggleUnorderedList:\"Cmd-L\",toggleCodeBlock:\"Cmd-Alt-C\",togglePreview:\"Cmd-P\",toggleSideBySide:\"F9\",toggleFullScreen:\"F11\"},u=function(){var e=!1;return function(t){(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(t.substr(0,4)))&&(e=!0)}(navigator.userAgent||navigator.vendor||window.opera),e};function d(e){return e=s?e.replace(\"Ctrl\",\"Cmd\"):e.replace(\"Cmd\",\"Ctrl\")}function h(e,t,n,r){var o=m(e,!1,t,n,\"button\",r);o.classList.add(\"easymde-dropdown\"),o.onclick=function(){o.focus()};var i=document.createElement(\"div\");i.className=\"easymde-dropdown-content\";for(var s=0;s<e.children.length;s++){var a,l=e.children[s];(a=m(\"string\"==typeof l&&l in te?te[l]:l,!0,t,n,\"button\",r)).addEventListener(\"click\",(function(e){e.stopPropagation()}),!1),i.appendChild(a)}return o.appendChild(i),o}function m(e,t,n,r,o,i){e=e||{};var a=document.createElement(o);if(e.attributes)for(var c in e.attributes)Object.prototype.hasOwnProperty.call(e.attributes,c)&&a.setAttribute(c,e.attributes[c]);var u=i.options.toolbarButtonClassPrefix?i.options.toolbarButtonClassPrefix+\"-\":\"\";a.className=u+e.name,a.setAttribute(\"type\",o),n=null==n||n,e.text&&(a.innerText=e.text),e.name&&e.name in r&&(l[e.name]=e.action),e.title&&n&&(a.title=function(e,t,n){var r,o=e;t&&n[r=function(e){for(var t in l)if(l[t]===e)return t;return null}(t)]&&(o+=\" (\"+d(n[r])+\")\");return o}(e.title,e.action,r),s&&(a.title=a.title.replace(\"Ctrl\",\"⌘\"),a.title=a.title.replace(\"Alt\",\"⌥\"))),e.title&&a.setAttribute(\"aria-label\",e.title),e.noDisable&&a.classList.add(\"no-disable\"),e.noMobile&&a.classList.add(\"no-mobile\");var h=[];void 0!==e.className&&(h=e.className.split(\" \"));for(var m=[],f=0;f<h.length;f++){var p=h[f];p.match(/^fa([srlb]|(-[\\w-]*)|$)/)?m.push(p):a.classList.add(p)}if(a.tabIndex=-1,m.length>0){for(var g=document.createElement(\"i\"),v=0;v<m.length;v++){var y=m[v];g.classList.add(y)}a.appendChild(g)}return void 0!==e.icon&&(a.innerHTML=e.icon),e.action&&t&&(\"function\"==typeof e.action?a.onclick=function(t){t.preventDefault(),e.action(i)}:\"string\"==typeof e.action&&(a.onclick=function(t){t.preventDefault(),window.open(e.action,\"_blank\")})),a}function f(){var e=document.createElement(\"i\");return e.className=\"separator\",e.innerHTML=\"|\",e}function p(e,t){t=t||e.getCursor(\"start\");var n=e.getTokenAt(t);if(!n.type)return{};for(var r,o,i=n.type.split(\" \"),s={},a=0;a<i.length;a++)\"strong\"===(r=i[a])?s.bold=!0:\"variable-2\"===r?(o=e.getLine(t.line),/^\\s*\\d+\\.\\s/.test(o)?s[\"ordered-list\"]=!0:s[\"unordered-list\"]=!0):\"atom\"===r?s.quote=!0:\"em\"===r?s.italic=!0:\"quote\"===r?s.quote=!0:\"strikethrough\"===r?s.strikethrough=!0:\"comment\"===r?s.code=!0:\"link\"!==r||s.image?\"image\"===r?s.image=!0:r.match(/^header(-[1-6])?$/)&&(s[r.replace(\"header\",\"heading\")]=!0):s.link=!0;return s}var g=\"\";function v(e){var t=e.codemirror;t.setOption(\"fullScreen\",!t.getOption(\"fullScreen\")),t.getOption(\"fullScreen\")?(g=document.body.style.overflow,document.body.style.overflow=\"hidden\"):document.body.style.overflow=g;var n=t.getWrapperElement(),r=n.nextSibling;if(r.classList.contains(\"editor-preview-active-side\"))if(!1===e.options.sideBySideFullscreen){var o=n.parentNode;t.getOption(\"fullScreen\")?o.classList.remove(\"sided--no-fullscreen\"):o.classList.add(\"sided--no-fullscreen\")}else W(e);(e.options.onToggleFullScreen&&e.options.onToggleFullScreen(t.getOption(\"fullScreen\")||!1),void 0!==e.options.maxHeight&&(t.getOption(\"fullScreen\")?(t.getScrollerElement().style.removeProperty(\"height\"),r.style.removeProperty(\"height\")):(t.getScrollerElement().style.height=e.options.maxHeight,e.setPreviewMaxHeight())),e.toolbar_div.classList.toggle(\"fullscreen\"),e.toolbarElements&&e.toolbarElements.fullscreen)&&e.toolbarElements.fullscreen.classList.toggle(\"active\")}function y(e){K(e,\"bold\",e.options.blockStyles.bold)}function b(e){K(e,\"italic\",e.options.blockStyles.italic)}function _(e){K(e,\"strikethrough\",\"~~\")}function w(e){var t=e.options.blockStyles.code;function n(e){if(\"object\"!=typeof e)throw\"fencing_line() takes a 'line' object (not a line number, or line text).  Got: \"+typeof e+\": \"+e;return e.styles&&e.styles[2]&&-1!==e.styles[2].indexOf(\"formatting-code-block\")}function r(e){return e.state.base.base||e.state.base}function o(e,t,o,i,s){o=o||e.getLineHandle(t),i=i||e.getTokenAt({line:t,ch:1}),s=s||!!o.text&&e.getTokenAt({line:t,ch:o.text.length-1});var a=i.type?i.type.split(\" \"):[];return s&&r(s).indentedCode?\"indented\":-1!==a.indexOf(\"comment\")&&(r(i).fencedChars||r(s).fencedChars||n(o)?\"fenced\":\"single\")}var i,s,a,l=e.codemirror,c=l.getCursor(\"start\"),u=l.getCursor(\"end\"),d=l.getTokenAt({line:c.line,ch:c.ch||1}),h=l.getLineHandle(c.line),m=o(l,c.line,h,d);if(\"single\"===m){var f=h.text.slice(0,c.ch).replace(\"`\",\"\"),p=h.text.slice(c.ch).replace(\"`\",\"\");l.replaceRange(f+p,{line:c.line,ch:0},{line:c.line,ch:99999999999999}),c.ch--,c!==u&&u.ch--,l.setSelection(c,u),l.focus()}else if(\"fenced\"===m)if(c.line!==u.line||c.ch!==u.ch){for(i=c.line;i>=0&&!n(h=l.getLineHandle(i));i--);var g,v,y,b,_=r(l.getTokenAt({line:i,ch:1})).fencedChars;n(l.getLineHandle(c.line))?(g=\"\",v=c.line):n(l.getLineHandle(c.line-1))?(g=\"\",v=c.line-1):(g=_+\"\\n\",v=c.line),n(l.getLineHandle(u.line))?(y=\"\",b=u.line,0===u.ch&&(b+=1)):0!==u.ch&&n(l.getLineHandle(u.line+1))?(y=\"\",b=u.line+1):(y=_+\"\\n\",b=u.line+1),0===u.ch&&(b-=1),l.operation((function(){l.replaceRange(y,{line:b,ch:0},{line:b+(y?0:1),ch:0}),l.replaceRange(g,{line:v,ch:0},{line:v+(g?0:1),ch:0})})),l.setSelection({line:v+(g?1:0),ch:0},{line:b+(g?1:-1),ch:0}),l.focus()}else{var w=c.line;if(n(l.getLineHandle(c.line))&&(\"fenced\"===o(l,c.line+1)?(i=c.line,w=c.line+1):(s=c.line,w=c.line-1)),void 0===i)for(i=w;i>=0&&!n(h=l.getLineHandle(i));i--);if(void 0===s)for(a=l.lineCount(),s=w;s<a&&!n(h=l.getLineHandle(s));s++);l.operation((function(){l.replaceRange(\"\",{line:i,ch:0},{line:i+1,ch:0}),l.replaceRange(\"\",{line:s-1,ch:0},{line:s,ch:0})})),l.focus()}else if(\"indented\"===m){if(c.line!==u.line||c.ch!==u.ch)i=c.line,s=u.line,0===u.ch&&s--;else{for(i=c.line;i>=0;i--)if(!(h=l.getLineHandle(i)).text.match(/^\\s*$/)&&\"indented\"!==o(l,i,h)){i+=1;break}for(a=l.lineCount(),s=c.line;s<a;s++)if(!(h=l.getLineHandle(s)).text.match(/^\\s*$/)&&\"indented\"!==o(l,s,h)){s-=1;break}}var x=l.getLineHandle(s+1),C=x&&l.getTokenAt({line:s+1,ch:x.text.length-1});C&&r(C).indentedCode&&l.replaceRange(\"\\n\",{line:s+1,ch:0});for(var k=i;k<=s;k++)l.indentLine(k,\"subtract\");l.focus()}else{var D=c.line===u.line&&c.ch===u.ch&&0===c.ch,S=c.line!==u.line;D||S?function(e,t,n,r){var o=t.line+1,i=n.line+1,s=t.line!==n.line,a=r+\"\\n\",l=\"\\n\"+r;s&&i++,s&&0===n.ch&&(l=r+\"\\n\",i--),U(e,!1,[a,l]),e.setSelection({line:o,ch:0},{line:i,ch:0})}(l,c,u,t):U(l,!1,[\"`\",\"`\"])}}function x(e){q(e.codemirror,\"quote\")}function C(e){V(e.codemirror,\"smaller\")}function k(e){V(e.codemirror,\"bigger\")}function D(e){V(e.codemirror,void 0,1)}function S(e){V(e.codemirror,void 0,2)}function A(e){V(e.codemirror,void 0,3)}function M(e){V(e.codemirror,void 0,4)}function L(e){V(e.codemirror,void 0,5)}function E(e){V(e.codemirror,void 0,6)}function T(e){var t=e.codemirror,n=\"*\";[\"-\",\"+\",\"*\"].includes(e.options.unorderedListStyle)&&(n=e.options.unorderedListStyle),q(t,\"unordered-list\",n)}function F(e){q(e.codemirror,\"ordered-list\")}function O(e){!function(e){if(e.getWrapperElement().lastChild.classList.contains(\"editor-preview-active\"))return;for(var t,n=e.getCursor(\"start\"),r=e.getCursor(\"end\"),o=n.line;o<=r.line;o++)t=(t=e.getLine(o)).replace(/^[ ]*([# ]+|\\*|-|[> ]+|[0-9]+(.|\\)))[ ]*/,\"\"),e.replaceRange(t,{line:o,ch:0},{line:o,ch:99999999999999})}(e.codemirror)}function B(e){var t=e.options,n=\"https://\";if(t.promptURLs){var r=prompt(t.promptTexts.link,n);if(!r)return!1;n=$(r)}G(e,\"link\",t.insertTexts.link,n)}function R(e){var t=e.options,n=\"https://\";if(t.promptURLs){var r=prompt(t.promptTexts.image,n);if(!r)return!1;n=$(r)}G(e,\"image\",t.insertTexts.image,n)}function $(e){return encodeURI(e).replace(/([\\\\()])/g,\"\\\\$1\")}function N(e){e.openBrowseFileWindow()}function Y(e,t){var n=e.codemirror,r=p(n),o=e.options,i=t.substr(t.lastIndexOf(\"/\")+1),s=i.substring(i.lastIndexOf(\".\")+1).replace(/\\?.*$/,\"\").toLowerCase();if([\"png\",\"jpg\",\"jpeg\",\"gif\",\"svg\",\"apng\",\"avif\",\"webp\"].includes(s))U(n,r.image,o.insertTexts.uploadedImage,t);else{var a=o.insertTexts.link;a[0]=\"[\"+i,U(n,r.link,a,t)}e.updateStatusBar(\"upload-image\",e.options.imageTexts.sbOnUploaded.replace(\"#image_name#\",i)),setTimeout((function(){e.updateStatusBar(\"upload-image\",e.options.imageTexts.sbInit)}),1e3)}function P(e){var t=e.codemirror,n=p(t),r=e.options;U(t,n.table,r.insertTexts.table)}function I(e){var t=e.codemirror,n=p(t),r=e.options;U(t,n.image,r.insertTexts.horizontalRule)}function H(e){var t=e.codemirror;t.undo(),t.focus()}function j(e){var t=e.codemirror;t.redo(),t.focus()}function W(e){var t=e.codemirror,n=t.getWrapperElement(),r=n.nextSibling,o=e.toolbarElements&&e.toolbarElements[\"side-by-side\"],i=!1,s=n.parentNode;r.classList.contains(\"editor-preview-active-side\")?(!1===e.options.sideBySideFullscreen&&s.classList.remove(\"sided--no-fullscreen\"),r.classList.remove(\"editor-preview-active-side\"),o&&o.classList.remove(\"active\"),n.classList.remove(\"CodeMirror-sided\")):(setTimeout((function(){t.getOption(\"fullScreen\")||(!1===e.options.sideBySideFullscreen?s.classList.add(\"sided--no-fullscreen\"):v(e)),r.classList.add(\"editor-preview-active-side\")}),1),o&&o.classList.add(\"active\"),n.classList.add(\"CodeMirror-sided\"),i=!0);var a=n.lastChild;if(a.classList.contains(\"editor-preview-active\")){a.classList.remove(\"editor-preview-active\");var l=e.toolbarElements.preview,c=e.toolbar_div;l.classList.remove(\"active\"),c.classList.remove(\"disabled-for-preview\")}if(t.sideBySideRenderingFunction||(t.sideBySideRenderingFunction=function(){var t=e.options.previewRender(e.value(),r);null!=t&&(r.innerHTML=t)}),i){var u=e.options.previewRender(e.value(),r);null!=u&&(r.innerHTML=u),t.on(\"update\",t.sideBySideRenderingFunction)}else t.off(\"update\",t.sideBySideRenderingFunction);t.refresh()}function z(e){var t=e.codemirror,n=t.getWrapperElement(),r=e.toolbar_div,o=!!e.options.toolbar&&e.toolbarElements.preview,i=n.lastChild;if(t.getWrapperElement().nextSibling.classList.contains(\"editor-preview-active-side\")&&W(e),!i||!i.classList.contains(\"editor-preview-full\")){if((i=document.createElement(\"div\")).className=\"editor-preview-full\",e.options.previewClass)if(Array.isArray(e.options.previewClass))for(var s=0;s<e.options.previewClass.length;s++)i.classList.add(e.options.previewClass[s]);else\"string\"==typeof e.options.previewClass&&i.classList.add(e.options.previewClass);n.appendChild(i)}i.classList.contains(\"editor-preview-active\")?(i.classList.remove(\"editor-preview-active\"),o&&(o.classList.remove(\"active\"),r.classList.remove(\"disabled-for-preview\"))):(setTimeout((function(){i.classList.add(\"editor-preview-active\")}),1),o&&(o.classList.add(\"active\"),r.classList.add(\"disabled-for-preview\")));var a=e.options.previewRender(e.value(),i);null!==a&&(i.innerHTML=a)}function U(e,t,n,r){if(!e.getWrapperElement().lastChild.classList.contains(\"editor-preview-active\")){var o,i=n[0],s=n[1],a={},l={};Object.assign(a,e.getCursor(\"start\")),Object.assign(l,e.getCursor(\"end\")),r&&(i=i.replace(\"#url#\",r),s=s.replace(\"#url#\",r)),t?(i=(o=e.getLine(a.line)).slice(0,a.ch),s=o.slice(a.ch),e.replaceRange(i+s,{line:a.line,ch:0})):(o=e.getSelection(),e.replaceSelection(i+o+s),a.ch+=i.length,a!==l&&(l.ch+=i.length)),e.setSelection(a,l),e.focus()}}function V(e,t,n){if(!e.getWrapperElement().lastChild.classList.contains(\"editor-preview-active\")){for(var r=e.getCursor(\"start\"),o=e.getCursor(\"end\"),i=r.line;i<=o.line;i++)!function(r){var o=e.getLine(r),i=o.search(/[^#]/);o=void 0!==t?i<=0?\"bigger\"==t?\"###### \"+o:\"# \"+o:6==i&&\"smaller\"==t?o.substr(7):1==i&&\"bigger\"==t?o.substr(2):\"bigger\"==t?o.substr(1):\"#\"+o:i<=0?\"#\".repeat(n)+\" \"+o:i==n?o.substr(i+1):\"#\".repeat(n)+\" \"+o.substr(i+1),e.replaceRange(o,{line:r,ch:0},{line:r,ch:99999999999999})}(i);e.focus()}}function q(e,t,n){if(!e.getWrapperElement().lastChild.classList.contains(\"editor-preview-active\")){for(var r=/^(\\s*)(\\*|-|\\+|\\d*\\.)(\\s+)/,o=/^\\s*/,i=p(e),s=e.getCursor(\"start\"),a=e.getCursor(\"end\"),l={quote:/^(\\s*)>\\s+/,\"unordered-list\":r,\"ordered-list\":r},c=function(e,t,i){var s=r.exec(t),a=function(e,t){return{quote:\">\",\"unordered-list\":n,\"ordered-list\":\"%%i.\"}[e].replace(\"%%i\",t)}(e,u);return null!==s?(function(e,t){var r=new RegExp({quote:\">\",\"unordered-list\":\"\\\\\"+n,\"ordered-list\":\"\\\\d+.\"}[e]);return t&&r.test(t)}(e,s[2])&&(a=\"\"),t=s[1]+a+s[3]+t.replace(o,\"\").replace(l[e],\"$1\")):0==i&&(t=a+\" \"+t),t},u=1,d=s.line;d<=a.line;d++)!function(n){var r=e.getLine(n);i[t]?r=r.replace(l[t],\"$1\"):(\"unordered-list\"==t&&(r=c(\"ordered-list\",r,!0)),r=c(t,r,!1),u+=1),e.replaceRange(r,{line:n,ch:0},{line:n,ch:99999999999999})}(d);e.focus()}}function G(e,t,n,r){if(e.codemirror&&!e.isPreviewActive()){var o=e.codemirror,i=p(o)[t];if(i){var s=o.getCursor(\"start\"),a=o.getCursor(\"end\"),l=o.getLine(s.line),c=l.slice(0,s.ch),u=l.slice(s.ch);\"link\"==t?c=c.replace(/(.*)[^!]\\[/,\"$1\"):\"image\"==t&&(c=c.replace(/(.*)!\\[$/,\"$1\")),u=u.replace(/]\\(.*?\\)/,\"\"),o.replaceRange(c+u,{line:s.line,ch:0},{line:s.line,ch:99999999999999}),s.ch-=n[0].length,s!==a&&(a.ch-=n[0].length),o.setSelection(s,a),o.focus()}else U(o,i,n,r)}}function K(e,t,n,r){if(e.codemirror&&!e.isPreviewActive()){r=void 0===r?n:r;var o,i=e.codemirror,s=p(i),a=n,l=r,c=i.getCursor(\"start\"),u=i.getCursor(\"end\");s[t]?(a=(o=i.getLine(c.line)).slice(0,c.ch),l=o.slice(c.ch),\"bold\"==t?(a=a.replace(/(\\*\\*|__)(?![\\s\\S]*(\\*\\*|__))/,\"\"),l=l.replace(/(\\*\\*|__)/,\"\")):\"italic\"==t?(a=a.replace(/(\\*|_)(?![\\s\\S]*(\\*|_))/,\"\"),l=l.replace(/(\\*|_)/,\"\")):\"strikethrough\"==t&&(a=a.replace(/(\\*\\*|~~)(?![\\s\\S]*(\\*\\*|~~))/,\"\"),l=l.replace(/(\\*\\*|~~)/,\"\")),i.replaceRange(a+l,{line:c.line,ch:0},{line:c.line,ch:99999999999999}),\"bold\"==t||\"strikethrough\"==t?(c.ch-=2,c!==u&&(u.ch-=2)):\"italic\"==t&&(c.ch-=1,c!==u&&(u.ch-=1))):(o=i.getSelection(),\"bold\"==t?o=(o=o.split(\"**\").join(\"\")).split(\"__\").join(\"\"):\"italic\"==t?o=(o=o.split(\"*\").join(\"\")).split(\"_\").join(\"\"):\"strikethrough\"==t&&(o=o.split(\"~~\").join(\"\")),i.replaceSelection(a+o+l),c.ch+=n.length,u.ch=c.ch+o.length),i.setSelection(c,u),i.focus()}}function X(e,t){if(Math.abs(e)<1024)return\"\"+e+t[0];var n=0;do{e/=1024,++n}while(Math.abs(e)>=1024&&n<t.length);return\"\"+e.toFixed(1)+t[n]}function J(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(t[n]instanceof Array?e[n]=t[n].concat(e[n]instanceof Array?e[n]:[]):null!==t[n]&&\"object\"==typeof t[n]&&t[n].constructor===Object?e[n]=J(e[n]||{},t[n]):e[n]=t[n]);return e}function Q(e){for(var t=1;t<arguments.length;t++)e=J(e,arguments[t]);return e}function Z(e){var t=e.match(/[a-zA-Z0-9_\\u00A0-\\u02AF\\u0392-\\u03c9\\u0410-\\u04F9]+|[\\u4E00-\\u9FFF\\u3400-\\u4dbf\\uf900-\\ufaff\\u3040-\\u309f\\uac00-\\ud7af]+/g),n=0;if(null===t)return n;for(var r=0;r<t.length;r++)t[r].charCodeAt(0)>=19968?n+=t[r].length:n+=1;return n}var ee={bold:\"fa fa-bold\",italic:\"fa fa-italic\",strikethrough:\"fa fa-strikethrough\",heading:\"fa fa-header fa-heading\",\"heading-smaller\":\"fa fa-header fa-heading header-smaller\",\"heading-bigger\":\"fa fa-header fa-heading header-bigger\",\"heading-1\":\"fa fa-header fa-heading header-1\",\"heading-2\":\"fa fa-header fa-heading header-2\",\"heading-3\":\"fa fa-header fa-heading header-3\",code:\"fa fa-code\",quote:\"fa fa-quote-left\",\"ordered-list\":\"fa fa-list-ol\",\"unordered-list\":\"fa fa-list-ul\",\"clean-block\":\"fa fa-eraser\",link:\"fa fa-link\",image:\"fa fa-image\",\"upload-image\":\"fa fa-image\",table:\"fa fa-table\",\"horizontal-rule\":\"fa fa-minus\",preview:\"fa fa-eye\",\"side-by-side\":\"fa fa-columns\",fullscreen:\"fa fa-arrows-alt\",guide:\"fa fa-question-circle\",undo:\"fa fa-undo\",redo:\"fa fa-repeat fa-redo\"},te={bold:{name:\"bold\",action:y,className:ee.bold,title:\"Bold\",default:!0},italic:{name:\"italic\",action:b,className:ee.italic,title:\"Italic\",default:!0},strikethrough:{name:\"strikethrough\",action:_,className:ee.strikethrough,title:\"Strikethrough\"},heading:{name:\"heading\",action:C,className:ee.heading,title:\"Heading\",default:!0},\"heading-smaller\":{name:\"heading-smaller\",action:C,className:ee[\"heading-smaller\"],title:\"Smaller Heading\"},\"heading-bigger\":{name:\"heading-bigger\",action:k,className:ee[\"heading-bigger\"],title:\"Bigger Heading\"},\"heading-1\":{name:\"heading-1\",action:D,className:ee[\"heading-1\"],title:\"Big Heading\"},\"heading-2\":{name:\"heading-2\",action:S,className:ee[\"heading-2\"],title:\"Medium Heading\"},\"heading-3\":{name:\"heading-3\",action:A,className:ee[\"heading-3\"],title:\"Small Heading\"},\"separator-1\":{name:\"separator-1\"},code:{name:\"code\",action:w,className:ee.code,title:\"Code\"},quote:{name:\"quote\",action:x,className:ee.quote,title:\"Quote\",default:!0},\"unordered-list\":{name:\"unordered-list\",action:T,className:ee[\"unordered-list\"],title:\"Generic List\",default:!0},\"ordered-list\":{name:\"ordered-list\",action:F,className:ee[\"ordered-list\"],title:\"Numbered List\",default:!0},\"clean-block\":{name:\"clean-block\",action:O,className:ee[\"clean-block\"],title:\"Clean block\"},\"separator-2\":{name:\"separator-2\"},link:{name:\"link\",action:B,className:ee.link,title:\"Create Link\",default:!0},image:{name:\"image\",action:R,className:ee.image,title:\"Insert Image\",default:!0},\"upload-image\":{name:\"upload-image\",action:N,className:ee[\"upload-image\"],title:\"Import an image\"},table:{name:\"table\",action:P,className:ee.table,title:\"Insert Table\"},\"horizontal-rule\":{name:\"horizontal-rule\",action:I,className:ee[\"horizontal-rule\"],title:\"Insert Horizontal Line\"},\"separator-3\":{name:\"separator-3\"},preview:{name:\"preview\",action:z,className:ee.preview,noDisable:!0,title:\"Toggle Preview\",default:!0},\"side-by-side\":{name:\"side-by-side\",action:W,className:ee[\"side-by-side\"],noDisable:!0,noMobile:!0,title:\"Toggle Side by Side\",default:!0},fullscreen:{name:\"fullscreen\",action:v,className:ee.fullscreen,noDisable:!0,noMobile:!0,title:\"Toggle Fullscreen\",default:!0},\"separator-4\":{name:\"separator-4\"},guide:{name:\"guide\",action:\"https://www.markdownguide.org/basic-syntax/\",className:ee.guide,noDisable:!0,title:\"Markdown Guide\",default:!0},\"separator-5\":{name:\"separator-5\"},undo:{name:\"undo\",action:H,className:ee.undo,noDisable:!0,title:\"Undo\"},redo:{name:\"redo\",action:j,className:ee.redo,noDisable:!0,title:\"Redo\"}},ne={link:[\"[\",\"](#url#)\"],image:[\"![\",\"](#url#)\"],uploadedImage:[\"![](#url#)\",\"\"],table:[\"\",\"\\n\\n| Column 1 | Column 2 | Column 3 |\\n| -------- | -------- | -------- |\\n| Text     | Text     | Text     |\\n\\n\"],horizontalRule:[\"\",\"\\n\\n-----\\n\\n\"]},re={link:\"URL for the link:\",image:\"URL of the image:\"},oe={locale:\"en-US\",format:{hour:\"2-digit\",minute:\"2-digit\"}},ie={bold:\"**\",code:\"```\",italic:\"*\"},se={sbInit:\"Attach files by drag and dropping or pasting from clipboard.\",sbOnDragEnter:\"Drop image to upload it.\",sbOnDrop:\"Uploading image #images_names#...\",sbProgress:\"Uploading #file_name#: #progress#%\",sbOnUploaded:\"Uploaded #image_name#\",sizeUnits:\" B, KB, MB\"},ae={noFileGiven:\"You must select a file.\",typeNotAllowed:\"This image type is not allowed.\",fileTooLarge:\"Image #image_name# is too big (#image_size#).\\nMaximum file size is #image_max_size#.\",importError:\"Something went wrong when uploading the image #image_name#.\"};function le(e){(e=e||{}).parent=this;var t=!0;if(!1===e.autoDownloadFontAwesome&&(t=!1),!0!==e.autoDownloadFontAwesome)for(var n=document.styleSheets,r=0;r<n.length;r++)n[r].href&&n[r].href.indexOf(\"//maxcdn.bootstrapcdn.com/font-awesome/\")>-1&&(t=!1);if(t){var o=document.createElement(\"link\");o.rel=\"stylesheet\",o.href=\"https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css\",document.getElementsByTagName(\"head\")[0].appendChild(o)}if(e.element)this.element=e.element;else if(null===e.element)return void console.log(\"EasyMDE: Error. No element was found.\");if(void 0===e.toolbar)for(var i in e.toolbar=[],te)Object.prototype.hasOwnProperty.call(te,i)&&(-1!=i.indexOf(\"separator-\")&&e.toolbar.push(\"|\"),(!0===te[i].default||e.showIcons&&e.showIcons.constructor===Array&&-1!=e.showIcons.indexOf(i))&&e.toolbar.push(i));if(Object.prototype.hasOwnProperty.call(e,\"previewClass\")||(e.previewClass=\"editor-preview\"),Object.prototype.hasOwnProperty.call(e,\"status\")||(e.status=[\"autosave\",\"lines\",\"words\",\"cursor\"],e.uploadImage&&e.status.unshift(\"upload-image\")),e.previewRender||(e.previewRender=function(e){return this.parent.markdown(e)}),e.parsingConfig=Q({highlightFormatting:!0},e.parsingConfig||{}),e.insertTexts=Q({},ne,e.insertTexts||{}),e.promptTexts=Q({},re,e.promptTexts||{}),e.blockStyles=Q({},ie,e.blockStyles||{}),null!=e.autosave&&(e.autosave.timeFormat=Q({},oe,e.autosave.timeFormat||{})),e.iconClassMap=Q({},ee,e.iconClassMap||{}),e.shortcuts=Q({},c,e.shortcuts||{}),e.maxHeight=e.maxHeight||void 0,e.direction=e.direction||\"ltr\",void 0!==e.maxHeight?e.minHeight=e.maxHeight:e.minHeight=e.minHeight||\"300px\",e.errorCallback=e.errorCallback||function(e){alert(e)},e.uploadImage=e.uploadImage||!1,e.imageMaxSize=e.imageMaxSize||2097152,e.imageAccept=e.imageAccept||\"image/png, image/jpeg, image/gif, image/avif\",e.imageTexts=Q({},se,e.imageTexts||{}),e.errorMessages=Q({},ae,e.errorMessages||{}),e.imagePathAbsolute=e.imagePathAbsolute||!1,e.imageCSRFName=e.imageCSRFName||\"csrfmiddlewaretoken\",e.imageCSRFHeader=e.imageCSRFHeader||!1,null!=e.autosave&&null!=e.autosave.unique_id&&\"\"!=e.autosave.unique_id&&(e.autosave.uniqueId=e.autosave.unique_id),e.overlayMode&&void 0===e.overlayMode.combine&&(e.overlayMode.combine=!0),this.options=e,this.render(),!e.initialValue||this.options.autosave&&!0===this.options.autosave.foundSavedValue||this.value(e.initialValue),e.uploadImage){var s=this;this.codemirror.on(\"dragenter\",(function(e,t){s.updateStatusBar(\"upload-image\",s.options.imageTexts.sbOnDragEnter),t.stopPropagation(),t.preventDefault()})),this.codemirror.on(\"dragend\",(function(e,t){s.updateStatusBar(\"upload-image\",s.options.imageTexts.sbInit),t.stopPropagation(),t.preventDefault()})),this.codemirror.on(\"dragleave\",(function(e,t){s.updateStatusBar(\"upload-image\",s.options.imageTexts.sbInit),t.stopPropagation(),t.preventDefault()})),this.codemirror.on(\"dragover\",(function(e,t){s.updateStatusBar(\"upload-image\",s.options.imageTexts.sbOnDragEnter),t.stopPropagation(),t.preventDefault()})),this.codemirror.on(\"drop\",(function(t,n){n.stopPropagation(),n.preventDefault(),e.imageUploadFunction?s.uploadImagesUsingCustomFunction(e.imageUploadFunction,n.dataTransfer.files):s.uploadImages(n.dataTransfer.files)})),this.codemirror.on(\"paste\",(function(t,n){e.imageUploadFunction?s.uploadImagesUsingCustomFunction(e.imageUploadFunction,n.clipboardData.files):s.uploadImages(n.clipboardData.files)}))}}function ce(){if(\"object\"!=typeof localStorage)return!1;try{localStorage.setItem(\"smde_localStorage\",1),localStorage.removeItem(\"smde_localStorage\")}catch(e){return!1}return!0}le.prototype.uploadImages=function(e,t,n){if(0!==e.length){for(var r=[],o=0;o<e.length;o++)r.push(e[o].name),this.uploadImage(e[o],t,n);this.updateStatusBar(\"upload-image\",this.options.imageTexts.sbOnDrop.replace(\"#images_names#\",r.join(\", \")))}},le.prototype.uploadImagesUsingCustomFunction=function(e,t){if(0!==t.length){for(var n=[],r=0;r<t.length;r++)n.push(t[r].name),this.uploadImageUsingCustomFunction(e,t[r]);this.updateStatusBar(\"upload-image\",this.options.imageTexts.sbOnDrop.replace(\"#images_names#\",n.join(\", \")))}},le.prototype.updateStatusBar=function(e,t){if(this.gui.statusbar){var n=this.gui.statusbar.getElementsByClassName(e);1===n.length?this.gui.statusbar.getElementsByClassName(e)[0].textContent=t:0===n.length?console.log(\"EasyMDE: status bar item \"+e+\" was not found.\"):console.log(\"EasyMDE: Several status bar items named \"+e+\" was found.\")}},le.prototype.markdown=function(e){if(i){var t;if(t=this.options&&this.options.renderingConfig&&this.options.renderingConfig.markedOptions?this.options.renderingConfig.markedOptions:{},this.options&&this.options.renderingConfig&&!1===this.options.renderingConfig.singleLineBreaks?t.breaks=!1:t.breaks=!0,this.options&&this.options.renderingConfig&&!0===this.options.renderingConfig.codeSyntaxHighlighting){var n=this.options.renderingConfig.hljs||window.hljs;n&&(t.highlight=function(e,t){return t&&n.getLanguage(t)?n.highlight(t,e).value:n.highlightAuto(e).value})}i.setOptions(t);var r=i.parse(e);return this.options.renderingConfig&&\"function\"==typeof this.options.renderingConfig.sanitizerFunction&&(r=this.options.renderingConfig.sanitizerFunction.call(this,r)),r=function(e){for(var t=(new DOMParser).parseFromString(e,\"text/html\"),n=t.getElementsByTagName(\"li\"),r=0;r<n.length;r++)for(var o=n[r],i=0;i<o.children.length;i++){var s=o.children[i];s instanceof HTMLInputElement&&\"checkbox\"===s.type&&(o.style.marginLeft=\"-1.5em\",o.style.listStyleType=\"none\")}return t.documentElement.innerHTML}(r=function(e){for(var t;null!==(t=a.exec(e));){var n=t[0];if(-1===n.indexOf(\"target=\")){var r=n.replace(/>$/,' target=\"_blank\">');e=e.replace(n,r)}}return e}(r))}},le.prototype.render=function(e){if(e||(e=this.element||document.getElementsByTagName(\"textarea\")[0]),!this._rendered||this._rendered!==e){this.element=e;var t,n,i=this.options,s=this,a={};for(var c in i.shortcuts)null!==i.shortcuts[c]&&null!==l[c]&&function(e){a[d(i.shortcuts[e])]=function(){var t=l[e];\"function\"==typeof t?t(s):\"string\"==typeof t&&window.open(t,\"_blank\")}}(c);if(a.Enter=\"newlineAndIndentContinueMarkdownList\",a.Tab=\"tabAndIndentMarkdownList\",a[\"Shift-Tab\"]=\"shiftTabAndUnindentMarkdownList\",a.Esc=function(e){e.getOption(\"fullScreen\")&&v(s)},this.documentOnKeyDown=function(e){27==(e=e||window.event).keyCode&&s.codemirror.getOption(\"fullScreen\")&&v(s)},document.addEventListener(\"keydown\",this.documentOnKeyDown,!1),i.overlayMode?(r.defineMode(\"overlay-mode\",(function(e){return r.overlayMode(r.getMode(e,!1!==i.spellChecker?\"spell-checker\":\"gfm\"),i.overlayMode.mode,i.overlayMode.combine)})),t=\"overlay-mode\",(n=i.parsingConfig).gitHubSpice=!1):((t=i.parsingConfig).name=\"gfm\",t.gitHubSpice=!1),!1!==i.spellChecker&&(t=\"spell-checker\",(n=i.parsingConfig).name=\"gfm\",n.gitHubSpice=!1,\"function\"==typeof i.spellChecker?i.spellChecker({codeMirrorInstance:r}):o({codeMirrorInstance:r})),this.codemirror=r.fromTextArea(e,{mode:t,backdrop:n,theme:null!=i.theme?i.theme:\"easymde\",tabSize:null!=i.tabSize?i.tabSize:2,indentUnit:null!=i.tabSize?i.tabSize:2,indentWithTabs:!1!==i.indentWithTabs,lineNumbers:!0===i.lineNumbers,autofocus:!0===i.autofocus,extraKeys:a,direction:i.direction,lineWrapping:!1!==i.lineWrapping,allowDropFileTypes:[\"text/plain\"],placeholder:i.placeholder||e.getAttribute(\"placeholder\")||\"\",styleSelectedText:null!=i.styleSelectedText?i.styleSelectedText:!u(),scrollbarStyle:null!=i.scrollbarStyle?i.scrollbarStyle:\"native\",configureMouse:function(e,t,n){return{addNew:!1}},inputStyle:null!=i.inputStyle?i.inputStyle:u()?\"contenteditable\":\"textarea\",spellcheck:null==i.nativeSpellcheck||i.nativeSpellcheck,autoRefresh:null!=i.autoRefresh&&i.autoRefresh}),this.codemirror.getScrollerElement().style.minHeight=i.minHeight,void 0!==i.maxHeight&&(this.codemirror.getScrollerElement().style.height=i.maxHeight),!0===i.forceSync){var h=this.codemirror;h.on(\"change\",(function(){h.save()}))}this.gui={};var m=document.createElement(\"div\");m.classList.add(\"EasyMDEContainer\"),m.setAttribute(\"role\",\"application\");var f=this.codemirror.getWrapperElement();f.parentNode.insertBefore(m,f),m.appendChild(f),!1!==i.toolbar&&(this.gui.toolbar=this.createToolbar()),!1!==i.status&&(this.gui.statusbar=this.createStatusbar()),null!=i.autosave&&!0===i.autosave.enabled&&(this.autosave(),this.codemirror.on(\"change\",(function(){clearTimeout(s._autosave_timeout),s._autosave_timeout=setTimeout((function(){s.autosave()}),s.options.autosave.submit_delay||s.options.autosave.delay||1e3)})));var p=this;this.codemirror.on(\"update\",(function(){i.previewImagesInEditor&&m.querySelectorAll(\".cm-image-marker\").forEach((function(e){var t=e.parentElement;if(t.innerText.match(/^!\\[.*?\\]\\(.*\\)/g)&&!t.hasAttribute(\"data-img-src\")){var n=t.innerText.match(\"\\\\((.*)\\\\)\");if(window.EMDEimagesCache||(window.EMDEimagesCache={}),n&&n.length>=2){var r=n[1];if(i.imagesPreviewHandler){var o=i.imagesPreviewHandler(n[1]);\"string\"==typeof o&&(r=o)}if(window.EMDEimagesCache[r])y(t,window.EMDEimagesCache[r]);else{var s=document.createElement(\"img\");s.onload=function(){window.EMDEimagesCache[r]={naturalWidth:s.naturalWidth,naturalHeight:s.naturalHeight,url:r},y(t,window.EMDEimagesCache[r])},s.src=r}}}}))})),this.gui.sideBySide=this.createSideBySide(),this._rendered=this.element,(!0===i.autofocus||e.autofocus)&&this.codemirror.focus();var g=this.codemirror;setTimeout(function(){g.refresh()}.bind(g),0)}function y(e,t){var n,r;e.setAttribute(\"data-img-src\",t.url),e.setAttribute(\"style\",\"--bg-image:url(\"+t.url+\");--width:\"+t.naturalWidth+\"px;--height:\"+(n=t.naturalWidth,r=t.naturalHeight,n<window.getComputedStyle(document.querySelector(\".CodeMirror-sizer\")).width.replace(\"px\",\"\")?r+\"px\":r/n*100+\"%\")),p.codemirror.setSize()}},le.prototype.cleanup=function(){document.removeEventListener(\"keydown\",this.documentOnKeyDown)},le.prototype.autosave=function(){if(ce()){var e=this;if(null==this.options.autosave.uniqueId||\"\"==this.options.autosave.uniqueId)return void console.log(\"EasyMDE: You must set a uniqueId to use the autosave feature\");!0!==this.options.autosave.binded&&(null!=e.element.form&&null!=e.element.form&&e.element.form.addEventListener(\"submit\",(function(){clearTimeout(e.autosaveTimeoutId),e.autosaveTimeoutId=void 0,localStorage.removeItem(\"smde_\"+e.options.autosave.uniqueId)})),this.options.autosave.binded=!0),!0!==this.options.autosave.loaded&&(\"string\"==typeof localStorage.getItem(\"smde_\"+this.options.autosave.uniqueId)&&\"\"!=localStorage.getItem(\"smde_\"+this.options.autosave.uniqueId)&&(this.codemirror.setValue(localStorage.getItem(\"smde_\"+this.options.autosave.uniqueId)),this.options.autosave.foundSavedValue=!0),this.options.autosave.loaded=!0);var t=e.value();\"\"!==t?localStorage.setItem(\"smde_\"+this.options.autosave.uniqueId,t):localStorage.removeItem(\"smde_\"+this.options.autosave.uniqueId);var n=document.getElementById(\"autosaved\");if(null!=n&&null!=n&&\"\"!=n){var r=new Date,o=new Intl.DateTimeFormat([this.options.autosave.timeFormat.locale,\"en-US\"],this.options.autosave.timeFormat.format).format(r),i=null==this.options.autosave.text?\"Autosaved: \":this.options.autosave.text;n.innerHTML=i+o}}else console.log(\"EasyMDE: localStorage not available, cannot autosave\")},le.prototype.clearAutosavedValue=function(){if(ce()){if(null==this.options.autosave||null==this.options.autosave.uniqueId||\"\"==this.options.autosave.uniqueId)return void console.log(\"EasyMDE: You must set a uniqueId to clear the autosave value\");localStorage.removeItem(\"smde_\"+this.options.autosave.uniqueId)}else console.log(\"EasyMDE: localStorage not available, cannot autosave\")},le.prototype.openBrowseFileWindow=function(e,t){var n=this,r=this.gui.toolbar.getElementsByClassName(\"imageInput\")[0];r.click(),r.addEventListener(\"change\",(function o(i){n.options.imageUploadFunction?n.uploadImagesUsingCustomFunction(n.options.imageUploadFunction,i.target.files):n.uploadImages(i.target.files,e,t),r.removeEventListener(\"change\",o)}))},le.prototype.uploadImage=function(e,t,n){var r=this;function o(e){r.updateStatusBar(\"upload-image\",e),setTimeout((function(){r.updateStatusBar(\"upload-image\",r.options.imageTexts.sbInit)}),1e4),n&&\"function\"==typeof n&&n(e),r.options.errorCallback(e)}function i(t){var n=r.options.imageTexts.sizeUnits.split(\",\");return t.replace(\"#image_name#\",e.name).replace(\"#image_size#\",X(e.size,n)).replace(\"#image_max_size#\",X(r.options.imageMaxSize,n))}if(t=t||function(e){Y(r,e)},e.size>this.options.imageMaxSize)o(i(this.options.errorMessages.fileTooLarge));else{var s=new FormData;s.append(\"image\",e),r.options.imageCSRFToken&&!r.options.imageCSRFHeader&&s.append(r.options.imageCSRFName,r.options.imageCSRFToken);var a=new XMLHttpRequest;a.upload.onprogress=function(t){if(t.lengthComputable){var n=\"\"+Math.round(100*t.loaded/t.total);r.updateStatusBar(\"upload-image\",r.options.imageTexts.sbProgress.replace(\"#file_name#\",e.name).replace(\"#progress#\",n))}},a.open(\"POST\",this.options.imageUploadEndpoint),r.options.imageCSRFToken&&r.options.imageCSRFHeader&&a.setRequestHeader(r.options.imageCSRFName,r.options.imageCSRFToken),a.onload=function(){try{var e=JSON.parse(this.responseText)}catch(e){return console.error(\"EasyMDE: The server did not return a valid json.\"),void o(i(r.options.errorMessages.importError))}200===this.status&&e&&!e.error&&e.data&&e.data.filePath?t((r.options.imagePathAbsolute?\"\":window.location.origin+\"/\")+e.data.filePath):e.error&&e.error in r.options.errorMessages?o(i(r.options.errorMessages[e.error])):e.error?o(i(e.error)):(console.error(\"EasyMDE: Received an unexpected response after uploading the image.\"+this.status+\" (\"+this.statusText+\")\"),o(i(r.options.errorMessages.importError)))},a.onerror=function(e){console.error(\"EasyMDE: An unexpected error occurred when trying to upload the image.\"+e.target.status+\" (\"+e.target.statusText+\")\"),o(r.options.errorMessages.importError)},a.send(s)}},le.prototype.uploadImageUsingCustomFunction=function(e,t){var n=this;e.apply(this,[t,function(e){Y(n,e)},function(e){var r=function(e){var r=n.options.imageTexts.sizeUnits.split(\",\");return e.replace(\"#image_name#\",t.name).replace(\"#image_size#\",X(t.size,r)).replace(\"#image_max_size#\",X(n.options.imageMaxSize,r))}(e);n.updateStatusBar(\"upload-image\",r),setTimeout((function(){n.updateStatusBar(\"upload-image\",n.options.imageTexts.sbInit)}),1e4),n.options.errorCallback(r)}])},le.prototype.setPreviewMaxHeight=function(){var e=this.codemirror.getWrapperElement(),t=e.nextSibling,n=parseInt(window.getComputedStyle(e).paddingTop),r=parseInt(window.getComputedStyle(e).borderTopWidth),o=(parseInt(this.options.maxHeight)+2*n+2*r).toString()+\"px\";t.style.height=o},le.prototype.createSideBySide=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.nextSibling;if(!n||!n.classList.contains(\"editor-preview-side\")){if((n=document.createElement(\"div\")).className=\"editor-preview-side\",this.options.previewClass)if(Array.isArray(this.options.previewClass))for(var r=0;r<this.options.previewClass.length;r++)n.classList.add(this.options.previewClass[r]);else\"string\"==typeof this.options.previewClass&&n.classList.add(this.options.previewClass);t.parentNode.insertBefore(n,t.nextSibling)}if(void 0!==this.options.maxHeight&&this.setPreviewMaxHeight(),!1===this.options.syncSideBySidePreviewScroll)return n;var o=!1,i=!1;return e.on(\"scroll\",(function(e){if(o)o=!1;else{i=!0;var t=e.getScrollInfo().height-e.getScrollInfo().clientHeight,r=parseFloat(e.getScrollInfo().top)/t,s=(n.scrollHeight-n.clientHeight)*r;n.scrollTop=s}})),n.onscroll=function(){if(i)i=!1;else{o=!0;var t=n.scrollHeight-n.clientHeight,r=parseFloat(n.scrollTop)/t,s=(e.getScrollInfo().height-e.getScrollInfo().clientHeight)*r;e.scrollTo(0,s)}},n},le.prototype.createToolbar=function(e){if((e=e||this.options.toolbar)&&0!==e.length){var t;for(t=0;t<e.length;t++)null!=te[e[t]]&&(e[t]=te[e[t]]);var n=document.createElement(\"div\");n.className=\"editor-toolbar\",n.setAttribute(\"role\",\"toolbar\");var r=this,o={};for(r.toolbar=e,t=0;t<e.length;t++)if((\"guide\"!=e[t].name||!1!==r.options.toolbarGuideIcon)&&!(r.options.hideIcons&&-1!=r.options.hideIcons.indexOf(e[t].name)||(\"fullscreen\"==e[t].name||\"side-by-side\"==e[t].name)&&u())){if(\"|\"===e[t]){for(var i=!1,s=t+1;s<e.length;s++)\"|\"===e[s]||r.options.hideIcons&&-1!=r.options.hideIcons.indexOf(e[s].name)||(i=!0);if(!i)continue}!function(e){var t;if(t=\"|\"===e?f():e.children?h(e,r.options.toolbarTips,r.options.shortcuts,r):m(e,!0,r.options.toolbarTips,r.options.shortcuts,\"button\",r),o[e.name||e]=t,n.appendChild(t),\"upload-image\"===e.name){var i=document.createElement(\"input\");i.className=\"imageInput\",i.type=\"file\",i.multiple=!0,i.name=\"image\",i.accept=r.options.imageAccept,i.style.display=\"none\",i.style.opacity=0,n.appendChild(i)}}(e[t])}r.toolbar_div=n,r.toolbarElements=o;var a=this.codemirror;a.on(\"cursorActivity\",(function(){var e=p(a);for(var t in o)!function(t){var n=o[t];e[t]?n.classList.add(\"active\"):\"fullscreen\"!=t&&\"side-by-side\"!=t&&n.classList.remove(\"active\")}(t)}));var l=a.getWrapperElement();return l.parentNode.insertBefore(n,l),n}},le.prototype.createStatusbar=function(e){e=e||this.options.status;var t=this.options,n=this.codemirror;if(e&&0!==e.length){var r,o,i,s,a=[];for(r=0;r<e.length;r++)if(o=void 0,i=void 0,s=void 0,\"object\"==typeof e[r])a.push({className:e[r].className,defaultValue:e[r].defaultValue,onUpdate:e[r].onUpdate,onActivity:e[r].onActivity});else{var l=e[r];\"words\"===l?(s=function(e){e.innerHTML=Z(n.getValue())},o=function(e){e.innerHTML=Z(n.getValue())}):\"lines\"===l?(s=function(e){e.innerHTML=n.lineCount()},o=function(e){e.innerHTML=n.lineCount()}):\"cursor\"===l?(s=function(e){e.innerHTML=\"1:1\"},i=function(e){var t=n.getCursor(),r=t.line+1,o=t.ch+1;e.innerHTML=r+\":\"+o}):\"autosave\"===l?s=function(e){null!=t.autosave&&!0===t.autosave.enabled&&e.setAttribute(\"id\",\"autosaved\")}:\"upload-image\"===l&&(s=function(e){e.innerHTML=t.imageTexts.sbInit}),a.push({className:l,defaultValue:s,onUpdate:o,onActivity:i})}var c=document.createElement(\"div\");for(c.className=\"editor-statusbar\",r=0;r<a.length;r++){var u=a[r],d=document.createElement(\"span\");d.className=u.className,\"function\"==typeof u.defaultValue&&u.defaultValue(d),\"function\"==typeof u.onUpdate&&this.codemirror.on(\"update\",function(e,t){return function(){t.onUpdate(e)}}(d,u)),\"function\"==typeof u.onActivity&&this.codemirror.on(\"cursorActivity\",function(e,t){return function(){t.onActivity(e)}}(d,u)),c.appendChild(d)}var h=this.codemirror.getWrapperElement();return h.parentNode.insertBefore(c,h.nextSibling),c}},le.prototype.value=function(e){var t=this.codemirror;if(void 0===e)return t.getValue();if(t.getDoc().setValue(e),this.isPreviewActive()){var n=t.getWrapperElement().lastChild,r=this.options.previewRender(e,n);null!==r&&(n.innerHTML=r)}return this},le.toggleBold=y,le.toggleItalic=b,le.toggleStrikethrough=_,le.toggleBlockquote=x,le.toggleHeadingSmaller=C,le.toggleHeadingBigger=k,le.toggleHeading1=D,le.toggleHeading2=S,le.toggleHeading3=A,le.toggleHeading4=M,le.toggleHeading5=L,le.toggleHeading6=E,le.toggleCodeBlock=w,le.toggleUnorderedList=T,le.toggleOrderedList=F,le.cleanBlock=O,le.drawLink=B,le.drawImage=R,le.drawUploadedImage=N,le.drawTable=P,le.drawHorizontalRule=I,le.undo=H,le.redo=j,le.togglePreview=z,le.toggleSideBySide=W,le.toggleFullScreen=v,le.prototype.toggleBold=function(){y(this)},le.prototype.toggleItalic=function(){b(this)},le.prototype.toggleStrikethrough=function(){_(this)},le.prototype.toggleBlockquote=function(){x(this)},le.prototype.toggleHeadingSmaller=function(){C(this)},le.prototype.toggleHeadingBigger=function(){k(this)},le.prototype.toggleHeading1=function(){D(this)},le.prototype.toggleHeading2=function(){S(this)},le.prototype.toggleHeading3=function(){A(this)},le.prototype.toggleHeading4=function(){M(this)},le.prototype.toggleHeading5=function(){L(this)},le.prototype.toggleHeading6=function(){E(this)},le.prototype.toggleCodeBlock=function(){w(this)},le.prototype.toggleUnorderedList=function(){T(this)},le.prototype.toggleOrderedList=function(){F(this)},le.prototype.cleanBlock=function(){O(this)},le.prototype.drawLink=function(){B(this)},le.prototype.drawImage=function(){R(this)},le.prototype.drawUploadedImage=function(){N(this)},le.prototype.drawTable=function(){P(this)},le.prototype.drawHorizontalRule=function(){I(this)},le.prototype.undo=function(){H(this)},le.prototype.redo=function(){j(this)},le.prototype.togglePreview=function(){z(this)},le.prototype.toggleSideBySide=function(){W(this)},le.prototype.toggleFullScreen=function(){v(this)},le.prototype.isPreviewActive=function(){return this.codemirror.getWrapperElement().lastChild.classList.contains(\"editor-preview-active\")},le.prototype.isSideBySideActive=function(){return this.codemirror.getWrapperElement().nextSibling.classList.contains(\"editor-preview-active-side\")},le.prototype.isFullscreenActive=function(){return this.codemirror.getOption(\"fullScreen\")},le.prototype.getState=function(){return p(this.codemirror)},le.prototype.toTextArea=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.parentNode;n&&(this.gui.toolbar&&n.removeChild(this.gui.toolbar),this.gui.statusbar&&n.removeChild(this.gui.statusbar),this.gui.sideBySide&&n.removeChild(this.gui.sideBySide)),n.parentNode.insertBefore(t,n),n.remove(),e.toTextArea(),this.autosaveTimeoutId&&(clearTimeout(this.autosaveTimeoutId),this.autosaveTimeoutId=void 0,this.clearAutosavedValue())},e.exports=le},9730:(e,t,n)=>{var r,o,i;!function(s){\"use strict\";o=[n(9755),n(381)],r=function(e,t){if(!t)throw new Error(\"bootstrap-datetimepicker requires Moment.js to be loaded first\");var n=function(n,r){var o,i,s,a,l,c,u,d={},h=!0,m=!1,f=!1,p=0,g=[{clsName:\"days\",navFnc:\"M\",navStep:1},{clsName:\"months\",navFnc:\"y\",navStep:1},{clsName:\"years\",navFnc:\"y\",navStep:10},{clsName:\"decades\",navFnc:\"y\",navStep:100}],v=[\"days\",\"months\",\"years\",\"decades\"],y=[\"top\",\"bottom\",\"auto\"],b=[\"left\",\"right\",\"auto\"],_=[\"default\",\"top\",\"bottom\"],w={up:38,38:\"up\",down:40,40:\"down\",left:37,37:\"left\",right:39,39:\"right\",tab:9,9:\"tab\",escape:27,27:\"escape\",enter:13,13:\"enter\",pageUp:33,33:\"pageUp\",pageDown:34,34:\"pageDown\",shift:16,16:\"shift\",control:17,17:\"control\",space:32,32:\"space\",t:84,84:\"t\",delete:46,46:\"delete\"},x={},C=function(){return void 0!==t.tz&&void 0!==r.timeZone&&null!==r.timeZone&&\"\"!==r.timeZone},k=function(e){var n;return n=null==e?t():t.isDate(e)||t.isMoment(e)?t(e):C()?t.tz(e,c,r.useStrict,r.timeZone):t(e,c,r.useStrict),C()&&n.tz(r.timeZone),n},D=function(e){if(\"string\"!=typeof e||e.length>1)throw new TypeError(\"isEnabled expects a single character string parameter\");switch(e){case\"y\":return-1!==l.indexOf(\"Y\");case\"M\":return-1!==l.indexOf(\"M\");case\"d\":return-1!==l.toLowerCase().indexOf(\"d\");case\"h\":case\"H\":return-1!==l.toLowerCase().indexOf(\"h\");case\"m\":return-1!==l.indexOf(\"m\");case\"s\":return-1!==l.indexOf(\"s\");default:return!1}},S=function(){return D(\"h\")||D(\"m\")||D(\"s\")},A=function(){return D(\"y\")||D(\"M\")||D(\"d\")},M=function(){var t=e(\"<thead>\").append(e(\"<tr>\").append(e(\"<th>\").addClass(\"prev\").attr(\"data-action\",\"previous\").append(e(\"<span>\").addClass(r.icons.previous))).append(e(\"<th>\").addClass(\"picker-switch\").attr(\"data-action\",\"pickerSwitch\").attr(\"colspan\",r.calendarWeeks?\"6\":\"5\")).append(e(\"<th>\").addClass(\"next\").attr(\"data-action\",\"next\").append(e(\"<span>\").addClass(r.icons.next)))),n=e(\"<tbody>\").append(e(\"<tr>\").append(e(\"<td>\").attr(\"colspan\",r.calendarWeeks?\"8\":\"7\")));return[e(\"<div>\").addClass(\"datepicker-days\").append(e(\"<table>\").addClass(\"table-condensed\").append(t).append(e(\"<tbody>\"))),e(\"<div>\").addClass(\"datepicker-months\").append(e(\"<table>\").addClass(\"table-condensed\").append(t.clone()).append(n.clone())),e(\"<div>\").addClass(\"datepicker-years\").append(e(\"<table>\").addClass(\"table-condensed\").append(t.clone()).append(n.clone())),e(\"<div>\").addClass(\"datepicker-decades\").append(e(\"<table>\").addClass(\"table-condensed\").append(t.clone()).append(n.clone()))]},L=function(){var t=e(\"<tr>\"),n=e(\"<tr>\"),o=e(\"<tr>\");return D(\"h\")&&(t.append(e(\"<td>\").append(e(\"<a>\").attr({href:\"#\",tabindex:\"-1\",title:r.tooltips.incrementHour}).addClass(\"btn\").attr(\"data-action\",\"incrementHours\").append(e(\"<span>\").addClass(r.icons.up)))),n.append(e(\"<td>\").append(e(\"<span>\").addClass(\"timepicker-hour\").attr({\"data-time-component\":\"hours\",title:r.tooltips.pickHour}).attr(\"data-action\",\"showHours\"))),o.append(e(\"<td>\").append(e(\"<a>\").attr({href:\"#\",tabindex:\"-1\",title:r.tooltips.decrementHour}).addClass(\"btn\").attr(\"data-action\",\"decrementHours\").append(e(\"<span>\").addClass(r.icons.down))))),D(\"m\")&&(D(\"h\")&&(t.append(e(\"<td>\").addClass(\"separator\")),n.append(e(\"<td>\").addClass(\"separator\").html(\":\")),o.append(e(\"<td>\").addClass(\"separator\"))),t.append(e(\"<td>\").append(e(\"<a>\").attr({href:\"#\",tabindex:\"-1\",title:r.tooltips.incrementMinute}).addClass(\"btn\").attr(\"data-action\",\"incrementMinutes\").append(e(\"<span>\").addClass(r.icons.up)))),n.append(e(\"<td>\").append(e(\"<span>\").addClass(\"timepicker-minute\").attr({\"data-time-component\":\"minutes\",title:r.tooltips.pickMinute}).attr(\"data-action\",\"showMinutes\"))),o.append(e(\"<td>\").append(e(\"<a>\").attr({href:\"#\",tabindex:\"-1\",title:r.tooltips.decrementMinute}).addClass(\"btn\").attr(\"data-action\",\"decrementMinutes\").append(e(\"<span>\").addClass(r.icons.down))))),D(\"s\")&&(D(\"m\")&&(t.append(e(\"<td>\").addClass(\"separator\")),n.append(e(\"<td>\").addClass(\"separator\").html(\":\")),o.append(e(\"<td>\").addClass(\"separator\"))),t.append(e(\"<td>\").append(e(\"<a>\").attr({href:\"#\",tabindex:\"-1\",title:r.tooltips.incrementSecond}).addClass(\"btn\").attr(\"data-action\",\"incrementSeconds\").append(e(\"<span>\").addClass(r.icons.up)))),n.append(e(\"<td>\").append(e(\"<span>\").addClass(\"timepicker-second\").attr({\"data-time-component\":\"seconds\",title:r.tooltips.pickSecond}).attr(\"data-action\",\"showSeconds\"))),o.append(e(\"<td>\").append(e(\"<a>\").attr({href:\"#\",tabindex:\"-1\",title:r.tooltips.decrementSecond}).addClass(\"btn\").attr(\"data-action\",\"decrementSeconds\").append(e(\"<span>\").addClass(r.icons.down))))),a||(t.append(e(\"<td>\").addClass(\"separator\")),n.append(e(\"<td>\").append(e(\"<button>\").addClass(\"btn btn-primary\").attr({\"data-action\":\"togglePeriod\",tabindex:\"-1\",title:r.tooltips.togglePeriod}))),o.append(e(\"<td>\").addClass(\"separator\"))),e(\"<div>\").addClass(\"timepicker-picker\").append(e(\"<table>\").addClass(\"table-condensed\").append([t,n,o]))},E=function(){var t=e(\"<div>\").addClass(\"timepicker-hours\").append(e(\"<table>\").addClass(\"table-condensed\")),n=e(\"<div>\").addClass(\"timepicker-minutes\").append(e(\"<table>\").addClass(\"table-condensed\")),r=e(\"<div>\").addClass(\"timepicker-seconds\").append(e(\"<table>\").addClass(\"table-condensed\")),o=[L()];return D(\"h\")&&o.push(t),D(\"m\")&&o.push(n),D(\"s\")&&o.push(r),o},T=function(){var t=[];return r.showTodayButton&&t.push(e(\"<td>\").append(e(\"<a>\").attr({\"data-action\":\"today\",title:r.tooltips.today}).append(e(\"<span>\").addClass(r.icons.today)))),!r.sideBySide&&A()&&S()&&t.push(e(\"<td>\").append(e(\"<a>\").attr({\"data-action\":\"togglePicker\",title:r.tooltips.selectTime}).append(e(\"<span>\").addClass(r.icons.time)))),r.showClear&&t.push(e(\"<td>\").append(e(\"<a>\").attr({\"data-action\":\"clear\",title:r.tooltips.clear}).append(e(\"<span>\").addClass(r.icons.clear)))),r.showClose&&t.push(e(\"<td>\").append(e(\"<a>\").attr({\"data-action\":\"close\",title:r.tooltips.close}).append(e(\"<span>\").addClass(r.icons.close)))),e(\"<table>\").addClass(\"table-condensed\").append(e(\"<tbody>\").append(e(\"<tr>\").append(t)))},F=function(){var t=e(\"<div>\").addClass(\"bootstrap-datetimepicker-widget dropdown-menu\"),n=e(\"<div>\").addClass(\"datepicker\").append(M()),o=e(\"<div>\").addClass(\"timepicker\").append(E()),i=e(\"<ul>\").addClass(\"list-unstyled\"),s=e(\"<li>\").addClass(\"picker-switch\"+(r.collapse?\" accordion-toggle\":\"\")).append(T());return r.inline&&t.removeClass(\"dropdown-menu\"),a&&t.addClass(\"usetwentyfour\"),D(\"s\")&&!a&&t.addClass(\"wider\"),r.sideBySide&&A()&&S()?(t.addClass(\"timepicker-sbs\"),\"top\"===r.toolbarPlacement&&t.append(s),t.append(e(\"<div>\").addClass(\"row\").append(n.addClass(\"col-md-6\")).append(o.addClass(\"col-md-6\"))),\"bottom\"===r.toolbarPlacement&&t.append(s),t):(\"top\"===r.toolbarPlacement&&i.append(s),A()&&i.append(e(\"<li>\").addClass(r.collapse&&S()?\"collapse in\":\"\").append(n)),\"default\"===r.toolbarPlacement&&i.append(s),S()&&i.append(e(\"<li>\").addClass(r.collapse&&A()?\"collapse\":\"\").append(o)),\"bottom\"===r.toolbarPlacement&&i.append(s),t.append(i))},O=function(){var t,o={};return(t=n.is(\"input\")||r.inline?n.data():n.find(\"input\").data()).dateOptions&&t.dateOptions instanceof Object&&(o=e.extend(!0,o,t.dateOptions)),e.each(r,(function(e){var n=\"date\"+e.charAt(0).toUpperCase()+e.slice(1);void 0!==t[n]&&(o[e]=t[n])})),o},B=function(){var t,o=(m||n).position(),i=(m||n).offset(),s=r.widgetPositioning.vertical,a=r.widgetPositioning.horizontal;if(r.widgetParent)t=r.widgetParent.append(f);else if(n.is(\"input\"))t=n.after(f).parent();else{if(r.inline)return void(t=n.append(f));t=n,n.children().first().after(f)}if(\"auto\"===s&&(s=i.top+1.5*f.height()>=e(window).height()+e(window).scrollTop()&&f.height()+n.outerHeight()<i.top?\"top\":\"bottom\"),\"auto\"===a&&(a=t.width()<i.left+f.outerWidth()/2&&i.left+f.outerWidth()>e(window).width()?\"right\":\"left\"),\"top\"===s?f.addClass(\"top\").removeClass(\"bottom\"):f.addClass(\"bottom\").removeClass(\"top\"),\"right\"===a?f.addClass(\"pull-right\"):f.removeClass(\"pull-right\"),\"static\"===t.css(\"position\")&&(t=t.parents().filter((function(){return\"static\"!==e(this).css(\"position\")})).first()),0===t.length)throw new Error(\"datetimepicker component should be placed within a non-static positioned container\");f.css({top:\"top\"===s?\"auto\":o.top+n.outerHeight(),bottom:\"top\"===s?t.outerHeight()-(t===n?0:o.top):\"auto\",left:\"left\"===a?t===n?0:o.left:\"auto\",right:\"left\"===a?\"auto\":t.outerWidth()-n.outerWidth()-(t===n?0:o.left)})},R=function(e){\"dp.change\"===e.type&&(e.date&&e.date.isSame(e.oldDate)||!e.date&&!e.oldDate)||n.trigger(e)},$=function(e){\"y\"===e&&(e=\"YYYY\"),R({type:\"dp.update\",change:e,viewDate:i.clone()})},N=function(e){f&&(e&&(u=Math.max(p,Math.min(3,u+e))),f.find(\".datepicker > div\").hide().filter(\".datepicker-\"+g[u].clsName).show())},Y=function(){var t=e(\"<tr>\"),n=i.clone().startOf(\"w\").startOf(\"d\");for(!0===r.calendarWeeks&&t.append(e(\"<th>\").addClass(\"cw\").text(\"#\"));n.isBefore(i.clone().endOf(\"w\"));)t.append(e(\"<th>\").addClass(\"dow\").text(n.format(\"dd\"))),n.add(1,\"d\");f.find(\".datepicker-days thead\").append(t)},P=function(e){return!0===r.disabledDates[e.format(\"YYYY-MM-DD\")]},I=function(e){return!0===r.enabledDates[e.format(\"YYYY-MM-DD\")]},H=function(e){return!0===r.disabledHours[e.format(\"H\")]},j=function(e){return!0===r.enabledHours[e.format(\"H\")]},W=function(t,n){if(!t.isValid())return!1;if(r.disabledDates&&\"d\"===n&&P(t))return!1;if(r.enabledDates&&\"d\"===n&&!I(t))return!1;if(r.minDate&&t.isBefore(r.minDate,n))return!1;if(r.maxDate&&t.isAfter(r.maxDate,n))return!1;if(r.daysOfWeekDisabled&&\"d\"===n&&-1!==r.daysOfWeekDisabled.indexOf(t.day()))return!1;if(r.disabledHours&&(\"h\"===n||\"m\"===n||\"s\"===n)&&H(t))return!1;if(r.enabledHours&&(\"h\"===n||\"m\"===n||\"s\"===n)&&!j(t))return!1;if(r.disabledTimeIntervals&&(\"h\"===n||\"m\"===n||\"s\"===n)){var o=!1;if(e.each(r.disabledTimeIntervals,(function(){if(t.isBetween(this[0],this[1]))return o=!0,!1})),o)return!1}return!0},z=function(){for(var t=[],n=i.clone().startOf(\"y\").startOf(\"d\");n.isSame(i,\"y\");)t.push(e(\"<span>\").attr(\"data-action\",\"selectMonth\").addClass(\"month\").text(n.format(\"MMM\"))),n.add(1,\"M\");f.find(\".datepicker-months td\").empty().append(t)},U=function(){var t=f.find(\".datepicker-months\"),n=t.find(\"th\"),s=t.find(\"tbody\").find(\"span\");n.eq(0).find(\"span\").attr(\"title\",r.tooltips.prevYear),n.eq(1).attr(\"title\",r.tooltips.selectYear),n.eq(2).find(\"span\").attr(\"title\",r.tooltips.nextYear),t.find(\".disabled\").removeClass(\"disabled\"),W(i.clone().subtract(1,\"y\"),\"y\")||n.eq(0).addClass(\"disabled\"),n.eq(1).text(i.year()),W(i.clone().add(1,\"y\"),\"y\")||n.eq(2).addClass(\"disabled\"),s.removeClass(\"active\"),o.isSame(i,\"y\")&&!h&&s.eq(o.month()).addClass(\"active\"),s.each((function(t){W(i.clone().month(t),\"M\")||e(this).addClass(\"disabled\")}))},V=function(){var e=f.find(\".datepicker-years\"),t=e.find(\"th\"),n=i.clone().subtract(5,\"y\"),s=i.clone().add(6,\"y\"),a=\"\";for(t.eq(0).find(\"span\").attr(\"title\",r.tooltips.prevDecade),t.eq(1).attr(\"title\",r.tooltips.selectDecade),t.eq(2).find(\"span\").attr(\"title\",r.tooltips.nextDecade),e.find(\".disabled\").removeClass(\"disabled\"),r.minDate&&r.minDate.isAfter(n,\"y\")&&t.eq(0).addClass(\"disabled\"),t.eq(1).text(n.year()+\"-\"+s.year()),r.maxDate&&r.maxDate.isBefore(s,\"y\")&&t.eq(2).addClass(\"disabled\");!n.isAfter(s,\"y\");)a+='<span data-action=\"selectYear\" class=\"year'+(n.isSame(o,\"y\")&&!h?\" active\":\"\")+(W(n,\"y\")?\"\":\" disabled\")+'\">'+n.year()+\"</span>\",n.add(1,\"y\");e.find(\"td\").html(a)},q=function(){var e,n=f.find(\".datepicker-decades\"),s=n.find(\"th\"),a=t({y:i.year()-i.year()%100-1}),l=a.clone().add(100,\"y\"),c=a.clone(),u=!1,d=!1,h=\"\";for(s.eq(0).find(\"span\").attr(\"title\",r.tooltips.prevCentury),s.eq(2).find(\"span\").attr(\"title\",r.tooltips.nextCentury),n.find(\".disabled\").removeClass(\"disabled\"),(a.isSame(t({y:1900}))||r.minDate&&r.minDate.isAfter(a,\"y\"))&&s.eq(0).addClass(\"disabled\"),s.eq(1).text(a.year()+\"-\"+l.year()),(a.isSame(t({y:2e3}))||r.maxDate&&r.maxDate.isBefore(l,\"y\"))&&s.eq(2).addClass(\"disabled\");!a.isAfter(l,\"y\");)e=a.year()+12,u=r.minDate&&r.minDate.isAfter(a,\"y\")&&r.minDate.year()<=e,d=r.maxDate&&r.maxDate.isAfter(a,\"y\")&&r.maxDate.year()<=e,h+='<span data-action=\"selectDecade\" class=\"decade'+(o.isAfter(a)&&o.year()<=e?\" active\":\"\")+(W(a,\"y\")||u||d?\"\":\" disabled\")+'\" data-selection=\"'+(a.year()+6)+'\">'+(a.year()+1)+\" - \"+(a.year()+12)+\"</span>\",a.add(12,\"y\");h+=\"<span></span><span></span><span></span>\",n.find(\"td\").html(h),s.eq(1).text(c.year()+1+\"-\"+a.year())},G=function(){var t,n,s,a=f.find(\".datepicker-days\"),l=a.find(\"th\"),c=[],u=[];if(A()){for(l.eq(0).find(\"span\").attr(\"title\",r.tooltips.prevMonth),l.eq(1).attr(\"title\",r.tooltips.selectMonth),l.eq(2).find(\"span\").attr(\"title\",r.tooltips.nextMonth),a.find(\".disabled\").removeClass(\"disabled\"),l.eq(1).text(i.format(r.dayViewHeaderFormat)),W(i.clone().subtract(1,\"M\"),\"M\")||l.eq(0).addClass(\"disabled\"),W(i.clone().add(1,\"M\"),\"M\")||l.eq(2).addClass(\"disabled\"),t=i.clone().startOf(\"M\").startOf(\"w\").startOf(\"d\"),s=0;s<42;s++)0===t.weekday()&&(n=e(\"<tr>\"),r.calendarWeeks&&n.append('<td class=\"cw\">'+t.week()+\"</td>\"),c.push(n)),u=[\"day\"],t.isBefore(i,\"M\")&&u.push(\"old\"),t.isAfter(i,\"M\")&&u.push(\"new\"),t.isSame(o,\"d\")&&!h&&u.push(\"active\"),W(t,\"d\")||u.push(\"disabled\"),t.isSame(k(),\"d\")&&u.push(\"today\"),0!==t.day()&&6!==t.day()||u.push(\"weekend\"),R({type:\"dp.classify\",date:t,classNames:u}),n.append('<td data-action=\"selectDay\" data-day=\"'+t.format(\"L\")+'\" class=\"'+u.join(\" \")+'\">'+t.date()+\"</td>\"),t.add(1,\"d\");a.find(\"tbody\").empty().append(c),U(),V(),q()}},K=function(){var t=f.find(\".timepicker-hours table\"),n=i.clone().startOf(\"d\"),r=[],o=e(\"<tr>\");for(i.hour()>11&&!a&&n.hour(12);n.isSame(i,\"d\")&&(a||i.hour()<12&&n.hour()<12||i.hour()>11);)n.hour()%4==0&&(o=e(\"<tr>\"),r.push(o)),o.append('<td data-action=\"selectHour\" class=\"hour'+(W(n,\"h\")?\"\":\" disabled\")+'\">'+n.format(a?\"HH\":\"hh\")+\"</td>\"),n.add(1,\"h\");t.empty().append(r)},X=function(){for(var t=f.find(\".timepicker-minutes table\"),n=i.clone().startOf(\"h\"),o=[],s=e(\"<tr>\"),a=1===r.stepping?5:r.stepping;i.isSame(n,\"h\");)n.minute()%(4*a)==0&&(s=e(\"<tr>\"),o.push(s)),s.append('<td data-action=\"selectMinute\" class=\"minute'+(W(n,\"m\")?\"\":\" disabled\")+'\">'+n.format(\"mm\")+\"</td>\"),n.add(a,\"m\");t.empty().append(o)},J=function(){for(var t=f.find(\".timepicker-seconds table\"),n=i.clone().startOf(\"m\"),r=[],o=e(\"<tr>\");i.isSame(n,\"m\");)n.second()%20==0&&(o=e(\"<tr>\"),r.push(o)),o.append('<td data-action=\"selectSecond\" class=\"second'+(W(n,\"s\")?\"\":\" disabled\")+'\">'+n.format(\"ss\")+\"</td>\"),n.add(5,\"s\");t.empty().append(r)},Q=function(){var e,t,n=f.find(\".timepicker span[data-time-component]\");a||(e=f.find(\".timepicker [data-action=togglePeriod]\"),t=o.clone().add(o.hours()>=12?-12:12,\"h\"),e.text(o.format(\"A\")),W(t,\"h\")?e.removeClass(\"disabled\"):e.addClass(\"disabled\")),n.filter(\"[data-time-component=hours]\").text(o.format(a?\"HH\":\"hh\")),n.filter(\"[data-time-component=minutes]\").text(o.format(\"mm\")),n.filter(\"[data-time-component=seconds]\").text(o.format(\"ss\")),K(),X(),J()},Z=function(){f&&(G(),Q())},ee=function(e){var t=h?null:o;if(!e)return h=!0,s.val(\"\"),n.data(\"date\",\"\"),R({type:\"dp.change\",date:!1,oldDate:t}),void Z();if(e=e.clone().locale(r.locale),C()&&e.tz(r.timeZone),1!==r.stepping)for(e.minutes(Math.round(e.minutes()/r.stepping)*r.stepping).seconds(0);r.minDate&&e.isBefore(r.minDate);)e.add(r.stepping,\"minutes\");W(e)?(i=(o=e).clone(),s.val(o.format(l)),n.data(\"date\",o.format(l)),h=!1,Z(),R({type:\"dp.change\",date:o.clone(),oldDate:t})):(r.keepInvalid?R({type:\"dp.change\",date:e,oldDate:t}):s.val(h?\"\":o.format(l)),R({type:\"dp.error\",date:e,oldDate:t}))},te=function(){var t=!1;return f?(f.find(\".collapse\").each((function(){var n=e(this).data(\"collapse\");return!n||!n.transitioning||(t=!0,!1)})),t||(m&&m.hasClass(\"btn\")&&m.toggleClass(\"active\"),f.hide(),e(window).off(\"resize\",B),f.off(\"click\",\"[data-action]\"),f.off(\"mousedown\",!1),f.remove(),f=!1,R({type:\"dp.hide\",date:o.clone()}),s.blur(),i=o.clone()),d):d},ne=function(){ee(null)},re=function(e){return void 0===r.parseInputDate?(!t.isMoment(e)||e instanceof Date)&&(e=k(e)):e=r.parseInputDate(e),e},oe={next:function(){var e=g[u].navFnc;i.add(g[u].navStep,e),G(),$(e)},previous:function(){var e=g[u].navFnc;i.subtract(g[u].navStep,e),G(),$(e)},pickerSwitch:function(){N(1)},selectMonth:function(t){var n=e(t.target).closest(\"tbody\").find(\"span\").index(e(t.target));i.month(n),u===p?(ee(o.clone().year(i.year()).month(i.month())),r.inline||te()):(N(-1),G()),$(\"M\")},selectYear:function(t){var n=parseInt(e(t.target).text(),10)||0;i.year(n),u===p?(ee(o.clone().year(i.year())),r.inline||te()):(N(-1),G()),$(\"YYYY\")},selectDecade:function(t){var n=parseInt(e(t.target).data(\"selection\"),10)||0;i.year(n),u===p?(ee(o.clone().year(i.year())),r.inline||te()):(N(-1),G()),$(\"YYYY\")},selectDay:function(t){var n=i.clone();e(t.target).is(\".old\")&&n.subtract(1,\"M\"),e(t.target).is(\".new\")&&n.add(1,\"M\"),ee(n.date(parseInt(e(t.target).text(),10))),S()||r.keepOpen||r.inline||te()},incrementHours:function(){var e=o.clone().add(1,\"h\");W(e,\"h\")&&ee(e)},incrementMinutes:function(){var e=o.clone().add(r.stepping,\"m\");W(e,\"m\")&&ee(e)},incrementSeconds:function(){var e=o.clone().add(1,\"s\");W(e,\"s\")&&ee(e)},decrementHours:function(){var e=o.clone().subtract(1,\"h\");W(e,\"h\")&&ee(e)},decrementMinutes:function(){var e=o.clone().subtract(r.stepping,\"m\");W(e,\"m\")&&ee(e)},decrementSeconds:function(){var e=o.clone().subtract(1,\"s\");W(e,\"s\")&&ee(e)},togglePeriod:function(){ee(o.clone().add(o.hours()>=12?-12:12,\"h\"))},togglePicker:function(t){var n,o=e(t.target),i=o.closest(\"ul\"),s=i.find(\".in\"),a=i.find(\".collapse:not(.in)\");if(s&&s.length){if((n=s.data(\"collapse\"))&&n.transitioning)return;s.collapse?(s.collapse(\"hide\"),a.collapse(\"show\")):(s.removeClass(\"in\"),a.addClass(\"in\")),o.is(\"span\")?o.toggleClass(r.icons.time+\" \"+r.icons.date):o.find(\"span\").toggleClass(r.icons.time+\" \"+r.icons.date)}},showPicker:function(){f.find(\".timepicker > div:not(.timepicker-picker)\").hide(),f.find(\".timepicker .timepicker-picker\").show()},showHours:function(){f.find(\".timepicker .timepicker-picker\").hide(),f.find(\".timepicker .timepicker-hours\").show()},showMinutes:function(){f.find(\".timepicker .timepicker-picker\").hide(),f.find(\".timepicker .timepicker-minutes\").show()},showSeconds:function(){f.find(\".timepicker .timepicker-picker\").hide(),f.find(\".timepicker .timepicker-seconds\").show()},selectHour:function(t){var n=parseInt(e(t.target).text(),10);a||(o.hours()>=12?12!==n&&(n+=12):12===n&&(n=0)),ee(o.clone().hours(n)),oe.showPicker.call(d)},selectMinute:function(t){ee(o.clone().minutes(parseInt(e(t.target).text(),10))),oe.showPicker.call(d)},selectSecond:function(t){ee(o.clone().seconds(parseInt(e(t.target).text(),10))),oe.showPicker.call(d)},clear:ne,today:function(){var e=k();W(e,\"d\")&&ee(e)},close:te},ie=function(t){return e(t.currentTarget).is(\".disabled\")||oe[e(t.currentTarget).data(\"action\")].apply(d,arguments),!1},se=function(){var t,n={year:function(e){return e.month(0).date(1).hours(0).seconds(0).minutes(0)},month:function(e){return e.date(1).hours(0).seconds(0).minutes(0)},day:function(e){return e.hours(0).seconds(0).minutes(0)},hour:function(e){return e.seconds(0).minutes(0)},minute:function(e){return e.seconds(0)}};return s.prop(\"disabled\")||!r.ignoreReadonly&&s.prop(\"readonly\")||f||(void 0!==s.val()&&0!==s.val().trim().length?ee(re(s.val().trim())):h&&r.useCurrent&&(r.inline||s.is(\"input\")&&0===s.val().trim().length)&&(t=k(),\"string\"==typeof r.useCurrent&&(t=n[r.useCurrent](t)),ee(t)),f=F(),Y(),z(),f.find(\".timepicker-hours\").hide(),f.find(\".timepicker-minutes\").hide(),f.find(\".timepicker-seconds\").hide(),Z(),N(),e(window).on(\"resize\",B),f.on(\"click\",\"[data-action]\",ie),f.on(\"mousedown\",!1),m&&m.hasClass(\"btn\")&&m.toggleClass(\"active\"),B(),f.show(),r.focusOnShow&&!s.is(\":focus\")&&s.focus(),R({type:\"dp.show\"})),d},ae=function(){return f?te():se()},le=function(e){var t,n,o,i,s=null,a=[],l={},c=e.which,u=\"p\";for(t in x[c]=u,x)x.hasOwnProperty(t)&&x[t]===u&&(a.push(t),parseInt(t,10)!==c&&(l[t]=!0));for(t in r.keyBinds)if(r.keyBinds.hasOwnProperty(t)&&\"function\"==typeof r.keyBinds[t]&&(o=t.split(\" \")).length===a.length&&w[c]===o[o.length-1]){for(i=!0,n=o.length-2;n>=0;n--)if(!(w[o[n]]in l)){i=!1;break}if(i){s=r.keyBinds[t];break}}s&&(s.call(d,f),e.stopPropagation(),e.preventDefault())},ce=function(e){x[e.which]=\"r\",e.stopPropagation(),e.preventDefault()},ue=function(t){var n=e(t.target).val().trim(),r=n?re(n):null;return ee(r),t.stopImmediatePropagation(),!1},de=function(){s.on({change:ue,blur:r.debug?\"\":te,keydown:le,keyup:ce,focus:r.allowInputToggle?se:\"\"}),n.is(\"input\")?s.on({focus:se}):m&&(m.on(\"click\",ae),m.on(\"mousedown\",!1))},he=function(){s.off({change:ue,blur,keydown:le,keyup:ce,focus:r.allowInputToggle?te:\"\"}),n.is(\"input\")?s.off({focus:se}):m&&(m.off(\"click\",ae),m.off(\"mousedown\",!1))},me=function(t){var n={};return e.each(t,(function(){var e=re(this);e.isValid()&&(n[e.format(\"YYYY-MM-DD\")]=!0)})),!!Object.keys(n).length&&n},fe=function(t){var n={};return e.each(t,(function(){n[this]=!0})),!!Object.keys(n).length&&n},pe=function(){var e=r.format||\"L LT\";l=e.replace(/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,(function(e){return(o.localeData().longDateFormat(e)||e).replace(/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,(function(e){return o.localeData().longDateFormat(e)||e}))})),(c=r.extraFormats?r.extraFormats.slice():[]).indexOf(e)<0&&c.indexOf(l)<0&&c.push(l),a=l.toLowerCase().indexOf(\"a\")<1&&l.replace(/\\[.*?\\]/g,\"\").indexOf(\"h\")<1,D(\"y\")&&(p=2),D(\"M\")&&(p=1),D(\"d\")&&(p=0),u=Math.max(p,u),h||ee(o)};if(d.destroy=function(){te(),he(),n.removeData(\"DateTimePicker\"),n.removeData(\"date\")},d.toggle=ae,d.show=se,d.hide=te,d.disable=function(){return te(),m&&m.hasClass(\"btn\")&&m.addClass(\"disabled\"),s.prop(\"disabled\",!0),d},d.enable=function(){return m&&m.hasClass(\"btn\")&&m.removeClass(\"disabled\"),s.prop(\"disabled\",!1),d},d.ignoreReadonly=function(e){if(0===arguments.length)return r.ignoreReadonly;if(\"boolean\"!=typeof e)throw new TypeError(\"ignoreReadonly () expects a boolean parameter\");return r.ignoreReadonly=e,d},d.options=function(t){if(0===arguments.length)return e.extend(!0,{},r);if(!(t instanceof Object))throw new TypeError(\"options() options parameter should be an object\");return e.extend(!0,r,t),e.each(r,(function(e,t){if(void 0===d[e])throw new TypeError(\"option \"+e+\" is not recognized!\");d[e](t)})),d},d.date=function(e){if(0===arguments.length)return h?null:o.clone();if(!(null===e||\"string\"==typeof e||t.isMoment(e)||e instanceof Date))throw new TypeError(\"date() parameter must be one of [null, string, moment or Date]\");return ee(null===e?null:re(e)),d},d.format=function(e){if(0===arguments.length)return r.format;if(\"string\"!=typeof e&&(\"boolean\"!=typeof e||!1!==e))throw new TypeError(\"format() expects a string or boolean:false parameter \"+e);return r.format=e,l&&pe(),d},d.timeZone=function(e){if(0===arguments.length)return r.timeZone;if(\"string\"!=typeof e)throw new TypeError(\"newZone() expects a string parameter\");return r.timeZone=e,d},d.dayViewHeaderFormat=function(e){if(0===arguments.length)return r.dayViewHeaderFormat;if(\"string\"!=typeof e)throw new TypeError(\"dayViewHeaderFormat() expects a string parameter\");return r.dayViewHeaderFormat=e,d},d.extraFormats=function(e){if(0===arguments.length)return r.extraFormats;if(!1!==e&&!(e instanceof Array))throw new TypeError(\"extraFormats() expects an array or false parameter\");return r.extraFormats=e,c&&pe(),d},d.disabledDates=function(t){if(0===arguments.length)return r.disabledDates?e.extend({},r.disabledDates):r.disabledDates;if(!t)return r.disabledDates=!1,Z(),d;if(!(t instanceof Array))throw new TypeError(\"disabledDates() expects an array parameter\");return r.disabledDates=me(t),r.enabledDates=!1,Z(),d},d.enabledDates=function(t){if(0===arguments.length)return r.enabledDates?e.extend({},r.enabledDates):r.enabledDates;if(!t)return r.enabledDates=!1,Z(),d;if(!(t instanceof Array))throw new TypeError(\"enabledDates() expects an array parameter\");return r.enabledDates=me(t),r.disabledDates=!1,Z(),d},d.daysOfWeekDisabled=function(e){if(0===arguments.length)return r.daysOfWeekDisabled.splice(0);if(\"boolean\"==typeof e&&!e)return r.daysOfWeekDisabled=!1,Z(),d;if(!(e instanceof Array))throw new TypeError(\"daysOfWeekDisabled() expects an array parameter\");if(r.daysOfWeekDisabled=e.reduce((function(e,t){return(t=parseInt(t,10))>6||t<0||isNaN(t)||-1===e.indexOf(t)&&e.push(t),e}),[]).sort(),r.useCurrent&&!r.keepInvalid){for(var t=0;!W(o,\"d\");){if(o.add(1,\"d\"),31===t)throw\"Tried 31 times to find a valid date\";t++}ee(o)}return Z(),d},d.maxDate=function(e){if(0===arguments.length)return r.maxDate?r.maxDate.clone():r.maxDate;if(\"boolean\"==typeof e&&!1===e)return r.maxDate=!1,Z(),d;\"string\"==typeof e&&(\"now\"!==e&&\"moment\"!==e||(e=k()));var t=re(e);if(!t.isValid())throw new TypeError(\"maxDate() Could not parse date parameter: \"+e);if(r.minDate&&t.isBefore(r.minDate))throw new TypeError(\"maxDate() date parameter is before options.minDate: \"+t.format(l));return r.maxDate=t,r.useCurrent&&!r.keepInvalid&&o.isAfter(e)&&ee(r.maxDate),i.isAfter(t)&&(i=t.clone().subtract(r.stepping,\"m\")),Z(),d},d.minDate=function(e){if(0===arguments.length)return r.minDate?r.minDate.clone():r.minDate;if(\"boolean\"==typeof e&&!1===e)return r.minDate=!1,Z(),d;\"string\"==typeof e&&(\"now\"!==e&&\"moment\"!==e||(e=k()));var t=re(e);if(!t.isValid())throw new TypeError(\"minDate() Could not parse date parameter: \"+e);if(r.maxDate&&t.isAfter(r.maxDate))throw new TypeError(\"minDate() date parameter is after options.maxDate: \"+t.format(l));return r.minDate=t,r.useCurrent&&!r.keepInvalid&&o.isBefore(e)&&ee(r.minDate),i.isBefore(t)&&(i=t.clone().add(r.stepping,\"m\")),Z(),d},d.defaultDate=function(e){if(0===arguments.length)return r.defaultDate?r.defaultDate.clone():r.defaultDate;if(!e)return r.defaultDate=!1,d;\"string\"==typeof e&&(e=\"now\"===e||\"moment\"===e?k():k(e));var t=re(e);if(!t.isValid())throw new TypeError(\"defaultDate() Could not parse date parameter: \"+e);if(!W(t))throw new TypeError(\"defaultDate() date passed is invalid according to component setup validations\");return r.defaultDate=t,(r.defaultDate&&r.inline||\"\"===s.val().trim())&&ee(r.defaultDate),d},d.locale=function(e){if(0===arguments.length)return r.locale;if(!t.localeData(e))throw new TypeError(\"locale() locale \"+e+\" is not loaded from moment locales!\");return r.locale=e,o.locale(r.locale),i.locale(r.locale),l&&pe(),f&&(te(),se()),d},d.stepping=function(e){return 0===arguments.length?r.stepping:(e=parseInt(e,10),(isNaN(e)||e<1)&&(e=1),r.stepping=e,d)},d.useCurrent=function(e){var t=[\"year\",\"month\",\"day\",\"hour\",\"minute\"];if(0===arguments.length)return r.useCurrent;if(\"boolean\"!=typeof e&&\"string\"!=typeof e)throw new TypeError(\"useCurrent() expects a boolean or string parameter\");if(\"string\"==typeof e&&-1===t.indexOf(e.toLowerCase()))throw new TypeError(\"useCurrent() expects a string parameter of \"+t.join(\", \"));return r.useCurrent=e,d},d.collapse=function(e){if(0===arguments.length)return r.collapse;if(\"boolean\"!=typeof e)throw new TypeError(\"collapse() expects a boolean parameter\");return r.collapse===e||(r.collapse=e,f&&(te(),se())),d},d.icons=function(t){if(0===arguments.length)return e.extend({},r.icons);if(!(t instanceof Object))throw new TypeError(\"icons() expects parameter to be an Object\");return e.extend(r.icons,t),f&&(te(),se()),d},d.tooltips=function(t){if(0===arguments.length)return e.extend({},r.tooltips);if(!(t instanceof Object))throw new TypeError(\"tooltips() expects parameter to be an Object\");return e.extend(r.tooltips,t),f&&(te(),se()),d},d.useStrict=function(e){if(0===arguments.length)return r.useStrict;if(\"boolean\"!=typeof e)throw new TypeError(\"useStrict() expects a boolean parameter\");return r.useStrict=e,d},d.sideBySide=function(e){if(0===arguments.length)return r.sideBySide;if(\"boolean\"!=typeof e)throw new TypeError(\"sideBySide() expects a boolean parameter\");return r.sideBySide=e,f&&(te(),se()),d},d.viewMode=function(e){if(0===arguments.length)return r.viewMode;if(\"string\"!=typeof e)throw new TypeError(\"viewMode() expects a string parameter\");if(-1===v.indexOf(e))throw new TypeError(\"viewMode() parameter must be one of (\"+v.join(\", \")+\") value\");return r.viewMode=e,u=Math.max(v.indexOf(e),p),N(),d},d.toolbarPlacement=function(e){if(0===arguments.length)return r.toolbarPlacement;if(\"string\"!=typeof e)throw new TypeError(\"toolbarPlacement() expects a string parameter\");if(-1===_.indexOf(e))throw new TypeError(\"toolbarPlacement() parameter must be one of (\"+_.join(\", \")+\") value\");return r.toolbarPlacement=e,f&&(te(),se()),d},d.widgetPositioning=function(t){if(0===arguments.length)return e.extend({},r.widgetPositioning);if(\"[object Object]\"!=={}.toString.call(t))throw new TypeError(\"widgetPositioning() expects an object variable\");if(t.horizontal){if(\"string\"!=typeof t.horizontal)throw new TypeError(\"widgetPositioning() horizontal variable must be a string\");if(t.horizontal=t.horizontal.toLowerCase(),-1===b.indexOf(t.horizontal))throw new TypeError(\"widgetPositioning() expects horizontal parameter to be one of (\"+b.join(\", \")+\")\");r.widgetPositioning.horizontal=t.horizontal}if(t.vertical){if(\"string\"!=typeof t.vertical)throw new TypeError(\"widgetPositioning() vertical variable must be a string\");if(t.vertical=t.vertical.toLowerCase(),-1===y.indexOf(t.vertical))throw new TypeError(\"widgetPositioning() expects vertical parameter to be one of (\"+y.join(\", \")+\")\");r.widgetPositioning.vertical=t.vertical}return Z(),d},d.calendarWeeks=function(e){if(0===arguments.length)return r.calendarWeeks;if(\"boolean\"!=typeof e)throw new TypeError(\"calendarWeeks() expects parameter to be a boolean value\");return r.calendarWeeks=e,Z(),d},d.showTodayButton=function(e){if(0===arguments.length)return r.showTodayButton;if(\"boolean\"!=typeof e)throw new TypeError(\"showTodayButton() expects a boolean parameter\");return r.showTodayButton=e,f&&(te(),se()),d},d.showClear=function(e){if(0===arguments.length)return r.showClear;if(\"boolean\"!=typeof e)throw new TypeError(\"showClear() expects a boolean parameter\");return r.showClear=e,f&&(te(),se()),d},d.widgetParent=function(t){if(0===arguments.length)return r.widgetParent;if(\"string\"==typeof t&&(t=e(t)),null!==t&&\"string\"!=typeof t&&!(t instanceof e))throw new TypeError(\"widgetParent() expects a string or a jQuery object parameter\");return r.widgetParent=t,f&&(te(),se()),d},d.keepOpen=function(e){if(0===arguments.length)return r.keepOpen;if(\"boolean\"!=typeof e)throw new TypeError(\"keepOpen() expects a boolean parameter\");return r.keepOpen=e,d},d.focusOnShow=function(e){if(0===arguments.length)return r.focusOnShow;if(\"boolean\"!=typeof e)throw new TypeError(\"focusOnShow() expects a boolean parameter\");return r.focusOnShow=e,d},d.inline=function(e){if(0===arguments.length)return r.inline;if(\"boolean\"!=typeof e)throw new TypeError(\"inline() expects a boolean parameter\");return r.inline=e,d},d.clear=function(){return ne(),d},d.keyBinds=function(e){return 0===arguments.length?r.keyBinds:(r.keyBinds=e,d)},d.getMoment=function(e){return k(e)},d.debug=function(e){if(\"boolean\"!=typeof e)throw new TypeError(\"debug() expects a boolean parameter\");return r.debug=e,d},d.allowInputToggle=function(e){if(0===arguments.length)return r.allowInputToggle;if(\"boolean\"!=typeof e)throw new TypeError(\"allowInputToggle() expects a boolean parameter\");return r.allowInputToggle=e,d},d.showClose=function(e){if(0===arguments.length)return r.showClose;if(\"boolean\"!=typeof e)throw new TypeError(\"showClose() expects a boolean parameter\");return r.showClose=e,d},d.keepInvalid=function(e){if(0===arguments.length)return r.keepInvalid;if(\"boolean\"!=typeof e)throw new TypeError(\"keepInvalid() expects a boolean parameter\");return r.keepInvalid=e,d},d.datepickerInput=function(e){if(0===arguments.length)return r.datepickerInput;if(\"string\"!=typeof e)throw new TypeError(\"datepickerInput() expects a string parameter\");return r.datepickerInput=e,d},d.parseInputDate=function(e){if(0===arguments.length)return r.parseInputDate;if(\"function\"!=typeof e)throw new TypeError(\"parseInputDate() sholud be as function\");return r.parseInputDate=e,d},d.disabledTimeIntervals=function(t){if(0===arguments.length)return r.disabledTimeIntervals?e.extend({},r.disabledTimeIntervals):r.disabledTimeIntervals;if(!t)return r.disabledTimeIntervals=!1,Z(),d;if(!(t instanceof Array))throw new TypeError(\"disabledTimeIntervals() expects an array parameter\");return r.disabledTimeIntervals=t,Z(),d},d.disabledHours=function(t){if(0===arguments.length)return r.disabledHours?e.extend({},r.disabledHours):r.disabledHours;if(!t)return r.disabledHours=!1,Z(),d;if(!(t instanceof Array))throw new TypeError(\"disabledHours() expects an array parameter\");if(r.disabledHours=fe(t),r.enabledHours=!1,r.useCurrent&&!r.keepInvalid){for(var n=0;!W(o,\"h\");){if(o.add(1,\"h\"),24===n)throw\"Tried 24 times to find a valid date\";n++}ee(o)}return Z(),d},d.enabledHours=function(t){if(0===arguments.length)return r.enabledHours?e.extend({},r.enabledHours):r.enabledHours;if(!t)return r.enabledHours=!1,Z(),d;if(!(t instanceof Array))throw new TypeError(\"enabledHours() expects an array parameter\");if(r.enabledHours=fe(t),r.disabledHours=!1,r.useCurrent&&!r.keepInvalid){for(var n=0;!W(o,\"h\");){if(o.add(1,\"h\"),24===n)throw\"Tried 24 times to find a valid date\";n++}ee(o)}return Z(),d},d.viewDate=function(e){if(0===arguments.length)return i.clone();if(!e)return i=o.clone(),d;if(!(\"string\"==typeof e||t.isMoment(e)||e instanceof Date))throw new TypeError(\"viewDate() parameter must be one of [string, moment or Date]\");return i=re(e),$(),d},n.is(\"input\"))s=n;else if(0===(s=n.find(r.datepickerInput)).length)s=n.find(\"input\");else if(!s.is(\"input\"))throw new Error('CSS class \"'+r.datepickerInput+'\" cannot be applied to non input element');if(n.hasClass(\"input-group\")&&(m=0===n.find(\".datepickerbutton\").length?n.find(\".input-group-addon\"):n.find(\".datepickerbutton\")),!r.inline&&!s.is(\"input\"))throw new Error(\"Could not initialize DateTimePicker without an input element\");return o=k(),i=o.clone(),e.extend(!0,r,O()),d.options(r),pe(),de(),s.prop(\"disabled\")&&d.disable(),s.is(\"input\")&&0!==s.val().trim().length?ee(re(s.val().trim())):r.defaultDate&&void 0===s.attr(\"placeholder\")&&ee(r.defaultDate),r.inline&&se(),d};return e.fn.datetimepicker=function(t){t=t||{};var r,o=Array.prototype.slice.call(arguments,1),i=!0,s=[\"destroy\",\"hide\",\"show\",\"toggle\"];if(\"object\"==typeof t)return this.each((function(){var r,o=e(this);o.data(\"DateTimePicker\")||(r=e.extend(!0,{},e.fn.datetimepicker.defaults,t),o.data(\"DateTimePicker\",n(o,r)))}));if(\"string\"==typeof t)return this.each((function(){var n=e(this).data(\"DateTimePicker\");if(!n)throw new Error('bootstrap-datetimepicker(\"'+t+'\") method was called on an element that is not using DateTimePicker');r=n[t].apply(n,o),i=r===n})),i||e.inArray(t,s)>-1?this:r;throw new TypeError(\"Invalid arguments for DateTimePicker: \"+t)},e.fn.datetimepicker.defaults={timeZone:\"\",format:!1,dayViewHeaderFormat:\"MMMM YYYY\",extraFormats:!1,stepping:1,minDate:!1,maxDate:!1,useCurrent:!0,collapse:!0,locale:t.locale(),defaultDate:!1,disabledDates:!1,enabledDates:!1,icons:{time:\"glyphicon glyphicon-time\",date:\"glyphicon glyphicon-calendar\",up:\"glyphicon glyphicon-chevron-up\",down:\"glyphicon glyphicon-chevron-down\",previous:\"glyphicon glyphicon-chevron-left\",next:\"glyphicon glyphicon-chevron-right\",today:\"glyphicon glyphicon-screenshot\",clear:\"glyphicon glyphicon-trash\",close:\"glyphicon glyphicon-remove\"},tooltips:{today:\"Go to today\",clear:\"Clear selection\",close:\"Close the picker\",selectMonth:\"Select Month\",prevMonth:\"Previous Month\",nextMonth:\"Next Month\",selectYear:\"Select Year\",prevYear:\"Previous Year\",nextYear:\"Next Year\",selectDecade:\"Select Decade\",prevDecade:\"Previous Decade\",nextDecade:\"Next Decade\",prevCentury:\"Previous Century\",nextCentury:\"Next Century\",pickHour:\"Pick Hour\",incrementHour:\"Increment Hour\",decrementHour:\"Decrement Hour\",pickMinute:\"Pick Minute\",incrementMinute:\"Increment Minute\",decrementMinute:\"Decrement Minute\",pickSecond:\"Pick Second\",incrementSecond:\"Increment Second\",decrementSecond:\"Decrement Second\",togglePeriod:\"Toggle Period\",selectTime:\"Select Time\"},useStrict:!1,sideBySide:!1,daysOfWeekDisabled:!1,calendarWeeks:!1,viewMode:\"days\",toolbarPlacement:\"default\",showTodayButton:!1,showClear:!1,showClose:!1,widgetPositioning:{horizontal:\"auto\",vertical:\"auto\"},widgetParent:null,ignoreReadonly:!1,keepOpen:!1,focusOnShow:!0,inline:!1,keepInvalid:!1,datepickerInput:\".datepickerinput\",keyBinds:{up:function(e){if(e){var t=this.date()||this.getMoment();e.find(\".datepicker\").is(\":visible\")?this.date(t.clone().subtract(7,\"d\")):this.date(t.clone().add(this.stepping(),\"m\"))}},down:function(e){if(e){var t=this.date()||this.getMoment();e.find(\".datepicker\").is(\":visible\")?this.date(t.clone().add(7,\"d\")):this.date(t.clone().subtract(this.stepping(),\"m\"))}else this.show()},\"control up\":function(e){if(e){var t=this.date()||this.getMoment();e.find(\".datepicker\").is(\":visible\")?this.date(t.clone().subtract(1,\"y\")):this.date(t.clone().add(1,\"h\"))}},\"control down\":function(e){if(e){var t=this.date()||this.getMoment();e.find(\".datepicker\").is(\":visible\")?this.date(t.clone().add(1,\"y\")):this.date(t.clone().subtract(1,\"h\"))}},left:function(e){if(e){var t=this.date()||this.getMoment();e.find(\".datepicker\").is(\":visible\")&&this.date(t.clone().subtract(1,\"d\"))}},right:function(e){if(e){var t=this.date()||this.getMoment();e.find(\".datepicker\").is(\":visible\")&&this.date(t.clone().add(1,\"d\"))}},pageUp:function(e){if(e){var t=this.date()||this.getMoment();e.find(\".datepicker\").is(\":visible\")&&this.date(t.clone().subtract(1,\"M\"))}},pageDown:function(e){if(e){var t=this.date()||this.getMoment();e.find(\".datepicker\").is(\":visible\")&&this.date(t.clone().add(1,\"M\"))}},enter:function(){this.hide()},escape:function(){this.hide()},\"control space\":function(e){e&&e.find(\".timepicker\").is(\":visible\")&&e.find('.btn[data-action=\"togglePeriod\"]').click()},t:function(){this.date(this.getMoment())},delete:function(){this.clear()}},debug:!1,allowInputToggle:!1,disabledTimeIntervals:!1,disabledHours:!1,enabledHours:!1,viewDate:!1},e.fn.datetimepicker},void 0===(i=\"function\"==typeof r?r.apply(t,o):r)||(e.exports=i)}()},4092:(e,t,n)=>{var r,o,i;!function(s){\"use strict\";o=[n(9755)],void 0===(i=\"function\"==typeof(r=function(e){var t=-1,n=-1,r=function(e){return parseFloat(e)||0},o=function(t){var n=1,o=e(t),i=null,s=[];return o.each((function(){var t=e(this),o=t.offset().top-r(t.css(\"margin-top\")),a=s.length>0?s[s.length-1]:null;null===a?s.push(t):Math.floor(Math.abs(i-o))<=n?s[s.length-1]=a.add(t):s.push(t),i=o})),s},i=function(t){var n={byRow:!0,property:\"height\",target:null,remove:!1};return\"object\"==typeof t?e.extend(n,t):(\"boolean\"==typeof t?n.byRow=t:\"remove\"===t&&(n.remove=!0),n)},s=e.fn.matchHeight=function(t){var n=i(t);if(n.remove){var r=this;return this.css(n.property,\"\"),e.each(s._groups,(function(e,t){t.elements=t.elements.not(r)})),this}return this.length<=1&&!n.target||(s._groups.push({elements:this,options:n}),s._apply(this,n)),this};s.version=\"0.7.2\",s._groups=[],s._throttle=80,s._maintainScroll=!1,s._beforeUpdate=null,s._afterUpdate=null,s._rows=o,s._parse=r,s._parseOptions=i,s._apply=function(t,n){var a=i(n),l=e(t),c=[l],u=e(window).scrollTop(),d=e(\"html\").outerHeight(!0),h=l.parents().filter(\":hidden\");return h.each((function(){var t=e(this);t.data(\"style-cache\",t.attr(\"style\"))})),h.css(\"display\",\"block\"),a.byRow&&!a.target&&(l.each((function(){var t=e(this),n=t.css(\"display\");\"inline-block\"!==n&&\"flex\"!==n&&\"inline-flex\"!==n&&(n=\"block\"),t.data(\"style-cache\",t.attr(\"style\")),t.css({display:n,\"padding-top\":\"0\",\"padding-bottom\":\"0\",\"margin-top\":\"0\",\"margin-bottom\":\"0\",\"border-top-width\":\"0\",\"border-bottom-width\":\"0\",height:\"100px\",overflow:\"hidden\"})})),c=o(l),l.each((function(){var t=e(this);t.attr(\"style\",t.data(\"style-cache\")||\"\")}))),e.each(c,(function(t,n){var o=e(n),i=0;if(a.target)i=a.target.outerHeight(!1);else{if(a.byRow&&o.length<=1)return void o.css(a.property,\"\");o.each((function(){var t=e(this),n=t.attr(\"style\"),r=t.css(\"display\");\"inline-block\"!==r&&\"flex\"!==r&&\"inline-flex\"!==r&&(r=\"block\");var o={display:r};o[a.property]=\"\",t.css(o),t.outerHeight(!1)>i&&(i=t.outerHeight(!1)),n?t.attr(\"style\",n):t.css(\"display\",\"\")}))}o.each((function(){var t=e(this),n=0;a.target&&t.is(a.target)||(\"border-box\"!==t.css(\"box-sizing\")&&(n+=r(t.css(\"border-top-width\"))+r(t.css(\"border-bottom-width\")),n+=r(t.css(\"padding-top\"))+r(t.css(\"padding-bottom\"))),t.css(a.property,i-n+\"px\"))}))})),h.each((function(){var t=e(this);t.attr(\"style\",t.data(\"style-cache\")||null)})),s._maintainScroll&&e(window).scrollTop(u/d*e(\"html\").outerHeight(!0)),this},s._applyDataApi=function(){var t={};e(\"[data-match-height], [data-mh]\").each((function(){var n=e(this),r=n.attr(\"data-mh\")||n.attr(\"data-match-height\");t[r]=r in t?t[r].add(n):n})),e.each(t,(function(){this.matchHeight(!0)}))};var a=function(t){s._beforeUpdate&&s._beforeUpdate(t,s._groups),e.each(s._groups,(function(){s._apply(this.elements,this.options)})),s._afterUpdate&&s._afterUpdate(t,s._groups)};s._update=function(r,o){if(o&&\"resize\"===o.type){var i=e(window).width();if(i===t)return;t=i}r?-1===n&&(n=setTimeout((function(){a(o),n=-1}),s._throttle)):a(o)},e(s._applyDataApi);var l=e.fn.on?\"on\":\"bind\";e(window)[l](\"load\",(function(e){s._update(!1,e)})),e(window)[l](\"resize orientationchange\",(function(e){s._update(!0,e)}))})?r.apply(t,o):r)||(e.exports=i)}()},9755:function(e,t){var n;!function(t,n){\"use strict\";\"object\"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return n(e)}:n(t)}(\"undefined\"!=typeof window?window:this,(function(r,o){\"use strict\";var i=[],s=Object.getPrototypeOf,a=i.slice,l=i.flat?function(e){return i.flat.call(e)}:function(e){return i.concat.apply([],e)},c=i.push,u=i.indexOf,d={},h=d.toString,m=d.hasOwnProperty,f=m.toString,p=f.call(Object),g={},v=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType&&\"function\"!=typeof e.item},y=function(e){return null!=e&&e===e.window},b=r.document,_={type:!0,src:!0,nonce:!0,noModule:!0};function w(e,t,n){var r,o,i=(n=n||b).createElement(\"script\");if(i.text=e,t)for(r in _)(o=t[r]||t.getAttribute&&t.getAttribute(r))&&i.setAttribute(r,o);n.head.appendChild(i).parentNode.removeChild(i)}function x(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?d[h.call(e)]||\"object\":typeof e}var C=\"3.6.1\",k=function(e,t){return new k.fn.init(e,t)};function D(e){var t=!!e&&\"length\"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}k.fn=k.prototype={jquery:C,constructor:k,length:0,toArray:function(){return a.call(this)},get:function(e){return null==e?a.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(e){return this.pushStack(k.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(k.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(k.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:c,sort:i.sort,splice:i.splice},k.extend=k.fn.extend=function(){var e,t,n,r,o,i,s=arguments[0]||{},a=1,l=arguments.length,c=!1;for(\"boolean\"==typeof s&&(c=s,s=arguments[a]||{},a++),\"object\"==typeof s||v(s)||(s={}),a===l&&(s=this,a--);a<l;a++)if(null!=(e=arguments[a]))for(t in e)r=e[t],\"__proto__\"!==t&&s!==r&&(c&&r&&(k.isPlainObject(r)||(o=Array.isArray(r)))?(n=s[t],i=o&&!Array.isArray(n)?[]:o||k.isPlainObject(n)?n:{},o=!1,s[t]=k.extend(c,i,r)):void 0!==r&&(s[t]=r));return s},k.extend({expando:\"jQuery\"+(C+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==h.call(e))&&(!(t=s(e))||\"function\"==typeof(n=m.call(t,\"constructor\")&&t.constructor)&&f.call(n)===p)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){w(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(D(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(D(Object(e))?k.merge(n,\"string\"==typeof e?[e]:e):c.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,o=e.length;r<n;r++)e[o++]=t[r];return e.length=o,e},grep:function(e,t,n){for(var r=[],o=0,i=e.length,s=!n;o<i;o++)!t(e[o],o)!==s&&r.push(e[o]);return r},map:function(e,t,n){var r,o,i=0,s=[];if(D(e))for(r=e.length;i<r;i++)null!=(o=t(e[i],i,n))&&s.push(o);else for(i in e)null!=(o=t(e[i],i,n))&&s.push(o);return l(s)},guid:1,support:g}),\"function\"==typeof Symbol&&(k.fn[Symbol.iterator]=i[Symbol.iterator]),k.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),(function(e,t){d[\"[object \"+t+\"]\"]=t.toLowerCase()}));var S=function(e){var t,n,r,o,i,s,a,l,c,u,d,h,m,f,p,g,v,y,b,_=\"sizzle\"+1*new Date,w=e.document,x=0,C=0,k=le(),D=le(),S=le(),A=le(),M=function(e,t){return e===t&&(d=!0),0},L={}.hasOwnProperty,E=[],T=E.pop,F=E.push,O=E.push,B=E.slice,R=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},$=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",N=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",Y=\"(?:\\\\\\\\[\\\\da-fA-F]{1,6}[\\\\x20\\\\t\\\\r\\\\n\\\\f]?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",P=\"\\\\[[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(\"+Y+\")(?:\"+N+\"*([*^$|!~]?=)\"+N+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+Y+\"))|)\"+N+\"*\\\\]\",I=\":(\"+Y+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+P+\")*)|.*)\\\\)|)\",H=new RegExp(N+\"+\",\"g\"),j=new RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)[\\\\x20\\\\t\\\\r\\\\n\\\\f]+$\",\"g\"),W=new RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]*,[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\"),z=new RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]*([>+~]|[\\\\x20\\\\t\\\\r\\\\n\\\\f])[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\"),U=new RegExp(N+\"|>\"),V=new RegExp(I),q=new RegExp(\"^\"+Y+\"$\"),G={ID:new RegExp(\"^#(\"+Y+\")\"),CLASS:new RegExp(\"^\\\\.(\"+Y+\")\"),TAG:new RegExp(\"^(\"+Y+\"|[*])\"),ATTR:new RegExp(\"^\"+P),PSEUDO:new RegExp(\"^\"+I),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\([\\\\x20\\\\t\\\\r\\\\n\\\\f]*(even|odd|(([+-]|)(\\\\d*)n|)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:([+-]|)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(\\\\d+)|))[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+$+\")$\",\"i\"),needsContext:new RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\([\\\\x20\\\\t\\\\r\\\\n\\\\f]*((?:-\\\\d)?\\\\d*)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\)|)(?=[^-]|$)\",\"i\")},K=/HTML$/i,X=/^(?:input|select|textarea|button)$/i,J=/^h\\d$/i,Q=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ee=/[+~]/,te=new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}[\\\\x20\\\\t\\\\r\\\\n\\\\f]?|\\\\\\\\([^\\\\r\\\\n\\\\f])\",\"g\"),ne=function(e,t){var n=\"0x\"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,oe=function(e,t){return t?\"\\0\"===e?\"�\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},ie=function(){h()},se=_e((function(e){return!0===e.disabled&&\"fieldset\"===e.nodeName.toLowerCase()}),{dir:\"parentNode\",next:\"legend\"});try{O.apply(E=B.call(w.childNodes),w.childNodes),E[w.childNodes.length].nodeType}catch(e){O={apply:E.length?function(e,t){F.apply(e,B.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function ae(e,t,r,o){var i,a,c,u,d,f,v,y=t&&t.ownerDocument,w=t?t.nodeType:9;if(r=r||[],\"string\"!=typeof e||!e||1!==w&&9!==w&&11!==w)return r;if(!o&&(h(t),t=t||m,p)){if(11!==w&&(d=Z.exec(e)))if(i=d[1]){if(9===w){if(!(c=t.getElementById(i)))return r;if(c.id===i)return r.push(c),r}else if(y&&(c=y.getElementById(i))&&b(t,c)&&c.id===i)return r.push(c),r}else{if(d[2])return O.apply(r,t.getElementsByTagName(e)),r;if((i=d[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(r,t.getElementsByClassName(i)),r}if(n.qsa&&!A[e+\" \"]&&(!g||!g.test(e))&&(1!==w||\"object\"!==t.nodeName.toLowerCase())){if(v=e,y=t,1===w&&(U.test(e)||z.test(e))){for((y=ee.test(e)&&ve(t.parentNode)||t)===t&&n.scope||((u=t.getAttribute(\"id\"))?u=u.replace(re,oe):t.setAttribute(\"id\",u=_)),a=(f=s(e)).length;a--;)f[a]=(u?\"#\"+u:\":scope\")+\" \"+be(f[a]);v=f.join(\",\")}try{return O.apply(r,y.querySelectorAll(v)),r}catch(t){A(e,!0)}finally{u===_&&t.removeAttribute(\"id\")}}}return l(e.replace(j,\"$1\"),t,r,o)}function le(){var e=[];return function t(n,o){return e.push(n+\" \")>r.cacheLength&&delete t[e.shift()],t[n+\" \"]=o}}function ce(e){return e[_]=!0,e}function ue(e){var t=m.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function de(e,t){for(var n=e.split(\"|\"),o=n.length;o--;)r.attrHandle[n[o]]=t}function he(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function me(e){return function(t){return\"input\"===t.nodeName.toLowerCase()&&t.type===e}}function fe(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function pe(e){return function(t){return\"form\"in t?t.parentNode&&!1===t.disabled?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&se(t)===e:t.disabled===e:\"label\"in t&&t.disabled===e}}function ge(e){return ce((function(t){return t=+t,ce((function(n,r){for(var o,i=e([],n.length,t),s=i.length;s--;)n[o=i[s]]&&(n[o]=!(r[o]=n[o]))}))}))}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=ae.support={},i=ae.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!K.test(t||n&&n.nodeName||\"HTML\")},h=ae.setDocument=function(e){var t,o,s=e?e.ownerDocument||e:w;return s!=m&&9===s.nodeType&&s.documentElement?(f=(m=s).documentElement,p=!i(m),w!=m&&(o=m.defaultView)&&o.top!==o&&(o.addEventListener?o.addEventListener(\"unload\",ie,!1):o.attachEvent&&o.attachEvent(\"onunload\",ie)),n.scope=ue((function(e){return f.appendChild(e).appendChild(m.createElement(\"div\")),void 0!==e.querySelectorAll&&!e.querySelectorAll(\":scope fieldset div\").length})),n.attributes=ue((function(e){return e.className=\"i\",!e.getAttribute(\"className\")})),n.getElementsByTagName=ue((function(e){return e.appendChild(m.createComment(\"\")),!e.getElementsByTagName(\"*\").length})),n.getElementsByClassName=Q.test(m.getElementsByClassName),n.getById=ue((function(e){return f.appendChild(e).id=_,!m.getElementsByName||!m.getElementsByName(_).length})),n.getById?(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute(\"id\")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&p){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&p){var n,r,o,i=t.getElementById(e);if(i){if((n=i.getAttributeNode(\"id\"))&&n.value===e)return[i];for(o=t.getElementsByName(e),r=0;i=o[r++];)if((n=i.getAttributeNode(\"id\"))&&n.value===e)return[i]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if(\"*\"===e){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&p)return t.getElementsByClassName(e)},v=[],g=[],(n.qsa=Q.test(m.querySelectorAll))&&(ue((function(e){var t;f.appendChild(e).innerHTML=\"<a id='\"+_+\"'></a><select id='\"+_+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&g.push(\"[*^$]=[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||g.push(\"\\\\[[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:value|\"+$+\")\"),e.querySelectorAll(\"[id~=\"+_+\"-]\").length||g.push(\"~=\"),(t=m.createElement(\"input\")).setAttribute(\"name\",\"\"),e.appendChild(t),e.querySelectorAll(\"[name='']\").length||g.push(\"\\\\[[\\\\x20\\\\t\\\\r\\\\n\\\\f]*name[\\\\x20\\\\t\\\\r\\\\n\\\\f]*=[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:''|\\\"\\\")\"),e.querySelectorAll(\":checked\").length||g.push(\":checked\"),e.querySelectorAll(\"a#\"+_+\"+*\").length||g.push(\".#.+[+~]\"),e.querySelectorAll(\"\\\\\\f\"),g.push(\"[\\\\r\\\\n\\\\f]\")})),ue((function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=m.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&g.push(\"name[\\\\x20\\\\t\\\\r\\\\n\\\\f]*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&g.push(\":enabled\",\":disabled\"),f.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&g.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),g.push(\",.*:\")}))),(n.matchesSelector=Q.test(y=f.matches||f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&ue((function(e){n.disconnectedMatch=y.call(e,\"*\"),y.call(e,\"[s!='']:x\"),v.push(\"!=\",I)})),g=g.length&&new RegExp(g.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),t=Q.test(f.compareDocumentPosition),b=t||Q.test(f.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},M=t?function(e,t){if(e===t)return d=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e==m||e.ownerDocument==w&&b(w,e)?-1:t==m||t.ownerDocument==w&&b(w,t)?1:u?R(u,e)-R(u,t):0:4&r?-1:1)}:function(e,t){if(e===t)return d=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,s=[e],a=[t];if(!o||!i)return e==m?-1:t==m?1:o?-1:i?1:u?R(u,e)-R(u,t):0;if(o===i)return he(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[r]===a[r];)r++;return r?he(s[r],a[r]):s[r]==w?-1:a[r]==w?1:0},m):m},ae.matches=function(e,t){return ae(e,null,null,t)},ae.matchesSelector=function(e,t){if(h(e),n.matchesSelector&&p&&!A[t+\" \"]&&(!v||!v.test(t))&&(!g||!g.test(t)))try{var r=y.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){A(t,!0)}return ae(t,m,null,[e]).length>0},ae.contains=function(e,t){return(e.ownerDocument||e)!=m&&h(e),b(e,t)},ae.attr=function(e,t){(e.ownerDocument||e)!=m&&h(e);var o=r.attrHandle[t.toLowerCase()],i=o&&L.call(r.attrHandle,t.toLowerCase())?o(e,t,!p):void 0;return void 0!==i?i:n.attributes||!p?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},ae.escape=function(e){return(e+\"\").replace(re,oe)},ae.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},ae.uniqueSort=function(e){var t,r=[],o=0,i=0;if(d=!n.detectDuplicates,u=!n.sortStable&&e.slice(0),e.sort(M),d){for(;t=e[i++];)t===e[i]&&(o=r.push(i));for(;o--;)e.splice(r[o],1)}return u=null,e},o=ae.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=o(t);return n},r=ae.selectors={cacheLength:50,createPseudo:ce,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||\"\").replace(te,ne),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||ae.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&ae.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&V.test(n)&&(t=s(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=k[e+\" \"];return t||(t=new RegExp(\"(^|[\\\\x20\\\\t\\\\r\\\\n\\\\f])\"+e+\"(\"+N+\"|$)\"))&&k(e,(function(e){return t.test(\"string\"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute(\"class\")||\"\")}))},ATTR:function(e,t,n){return function(r){var o=ae.attr(r,e);return null==o?\"!=\"===t:!t||(o+=\"\",\"=\"===t?o===n:\"!=\"===t?o!==n:\"^=\"===t?n&&0===o.indexOf(n):\"*=\"===t?n&&o.indexOf(n)>-1:\"$=\"===t?n&&o.slice(-n.length)===n:\"~=\"===t?(\" \"+o.replace(H,\" \")+\" \").indexOf(n)>-1:\"|=\"===t&&(o===n||o.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(e,t,n,r,o){var i=\"nth\"!==e.slice(0,3),s=\"last\"!==e.slice(-4),a=\"of-type\"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,h,m,f,p=i!==s?\"nextSibling\":\"previousSibling\",g=t.parentNode,v=a&&t.nodeName.toLowerCase(),y=!l&&!a,b=!1;if(g){if(i){for(;p;){for(h=t;h=h[p];)if(a?h.nodeName.toLowerCase()===v:1===h.nodeType)return!1;f=p=\"only\"===e&&!f&&\"nextSibling\"}return!0}if(f=[s?g.firstChild:g.lastChild],s&&y){for(b=(m=(c=(u=(d=(h=g)[_]||(h[_]={}))[h.uniqueID]||(d[h.uniqueID]={}))[e]||[])[0]===x&&c[1])&&c[2],h=m&&g.childNodes[m];h=++m&&h&&h[p]||(b=m=0)||f.pop();)if(1===h.nodeType&&++b&&h===t){u[e]=[x,m,b];break}}else if(y&&(b=m=(c=(u=(d=(h=t)[_]||(h[_]={}))[h.uniqueID]||(d[h.uniqueID]={}))[e]||[])[0]===x&&c[1]),!1===b)for(;(h=++m&&h&&h[p]||(b=m=0)||f.pop())&&((a?h.nodeName.toLowerCase()!==v:1!==h.nodeType)||!++b||(y&&((u=(d=h[_]||(h[_]={}))[h.uniqueID]||(d[h.uniqueID]={}))[e]=[x,b]),h!==t)););return(b-=o)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,t){var n,o=r.pseudos[e]||r.setFilters[e.toLowerCase()]||ae.error(\"unsupported pseudo: \"+e);return o[_]?o(t):o.length>1?(n=[e,e,\"\",t],r.setFilters.hasOwnProperty(e.toLowerCase())?ce((function(e,n){for(var r,i=o(e,t),s=i.length;s--;)e[r=R(e,i[s])]=!(n[r]=i[s])})):function(e){return o(e,0,n)}):o}},pseudos:{not:ce((function(e){var t=[],n=[],r=a(e.replace(j,\"$1\"));return r[_]?ce((function(e,t,n,o){for(var i,s=r(e,null,o,[]),a=e.length;a--;)(i=s[a])&&(e[a]=!(t[a]=i))})):function(e,o,i){return t[0]=e,r(t,null,i,n),t[0]=null,!n.pop()}})),has:ce((function(e){return function(t){return ae(e,t).length>0}})),contains:ce((function(e){return e=e.replace(te,ne),function(t){return(t.textContent||o(t)).indexOf(e)>-1}})),lang:ce((function(e){return q.test(e||\"\")||ae.error(\"unsupported lang: \"+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=p?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(n=n.toLowerCase())===e||0===n.indexOf(e+\"-\")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===m.activeElement&&(!m.hasFocus||m.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:pe(!1),disabled:pe(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return X.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:ge((function(){return[0]})),last:ge((function(e,t){return[t-1]})),eq:ge((function(e,t,n){return[n<0?n+t:n]})),even:ge((function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e})),odd:ge((function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e})),lt:ge((function(e,t,n){for(var r=n<0?n+t:n>t?t:n;--r>=0;)e.push(r);return e})),gt:ge((function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e}))}},r.pseudos.nth=r.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=me(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=fe(t);function ye(){}function be(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function _e(e,t,n){var r=t.dir,o=t.next,i=o||r,s=n&&\"parentNode\"===i,a=C++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||s)return e(t,n,o);return!1}:function(t,n,l){var c,u,d,h=[x,a];if(l){for(;t=t[r];)if((1===t.nodeType||s)&&e(t,n,l))return!0}else for(;t=t[r];)if(1===t.nodeType||s)if(u=(d=t[_]||(t[_]={}))[t.uniqueID]||(d[t.uniqueID]={}),o&&o===t.nodeName.toLowerCase())t=t[r]||t;else{if((c=u[i])&&c[0]===x&&c[1]===a)return h[2]=c[2];if(u[i]=h,h[2]=e(t,n,l))return!0}return!1}}function we(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function xe(e,t,n,r,o){for(var i,s=[],a=0,l=e.length,c=null!=t;a<l;a++)(i=e[a])&&(n&&!n(i,r,o)||(s.push(i),c&&t.push(a)));return s}function Ce(e,t,n,r,o,i){return r&&!r[_]&&(r=Ce(r)),o&&!o[_]&&(o=Ce(o,i)),ce((function(i,s,a,l){var c,u,d,h=[],m=[],f=s.length,p=i||function(e,t,n){for(var r=0,o=t.length;r<o;r++)ae(e,t[r],n);return n}(t||\"*\",a.nodeType?[a]:a,[]),g=!e||!i&&t?p:xe(p,h,e,a,l),v=n?o||(i?e:f||r)?[]:s:g;if(n&&n(g,v,a,l),r)for(c=xe(v,m),r(c,[],a,l),u=c.length;u--;)(d=c[u])&&(v[m[u]]=!(g[m[u]]=d));if(i){if(o||e){if(o){for(c=[],u=v.length;u--;)(d=v[u])&&c.push(g[u]=d);o(null,v=[],c,l)}for(u=v.length;u--;)(d=v[u])&&(c=o?R(i,d):h[u])>-1&&(i[c]=!(s[c]=d))}}else v=xe(v===s?v.splice(f,v.length):v),o?o(null,s,v,l):O.apply(s,v)}))}function ke(e){for(var t,n,o,i=e.length,s=r.relative[e[0].type],a=s||r.relative[\" \"],l=s?1:0,u=_e((function(e){return e===t}),a,!0),d=_e((function(e){return R(t,e)>-1}),a,!0),h=[function(e,n,r){var o=!s&&(r||n!==c)||((t=n).nodeType?u(e,n,r):d(e,n,r));return t=null,o}];l<i;l++)if(n=r.relative[e[l].type])h=[_e(we(h),n)];else{if((n=r.filter[e[l].type].apply(null,e[l].matches))[_]){for(o=++l;o<i&&!r.relative[e[o].type];o++);return Ce(l>1&&we(h),l>1&&be(e.slice(0,l-1).concat({value:\" \"===e[l-2].type?\"*\":\"\"})).replace(j,\"$1\"),n,l<o&&ke(e.slice(l,o)),o<i&&ke(e=e.slice(o)),o<i&&be(e))}h.push(n)}return we(h)}return ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,s=ae.tokenize=function(e,t){var n,o,i,s,a,l,c,u=D[e+\" \"];if(u)return t?0:u.slice(0);for(a=e,l=[],c=r.preFilter;a;){for(s in n&&!(o=W.exec(a))||(o&&(a=a.slice(o[0].length)||a),l.push(i=[])),n=!1,(o=z.exec(a))&&(n=o.shift(),i.push({value:n,type:o[0].replace(j,\" \")}),a=a.slice(n.length)),r.filter)!(o=G[s].exec(a))||c[s]&&!(o=c[s](o))||(n=o.shift(),i.push({value:n,type:s,matches:o}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ae.error(e):D(e,l).slice(0)},a=ae.compile=function(e,t){var n,o=[],i=[],a=S[e+\" \"];if(!a){for(t||(t=s(e)),n=t.length;n--;)(a=ke(t[n]))[_]?o.push(a):i.push(a);a=S(e,function(e,t){var n=t.length>0,o=e.length>0,i=function(i,s,a,l,u){var d,f,g,v=0,y=\"0\",b=i&&[],_=[],w=c,C=i||o&&r.find.TAG(\"*\",u),k=x+=null==w?1:Math.random()||.1,D=C.length;for(u&&(c=s==m||s||u);y!==D&&null!=(d=C[y]);y++){if(o&&d){for(f=0,s||d.ownerDocument==m||(h(d),a=!p);g=e[f++];)if(g(d,s||m,a)){l.push(d);break}u&&(x=k)}n&&((d=!g&&d)&&v--,i&&b.push(d))}if(v+=y,n&&y!==v){for(f=0;g=t[f++];)g(b,_,s,a);if(i){if(v>0)for(;y--;)b[y]||_[y]||(_[y]=T.call(l));_=xe(_)}O.apply(l,_),u&&!i&&_.length>0&&v+t.length>1&&ae.uniqueSort(l)}return u&&(x=k,c=w),b};return n?ce(i):i}(i,o)),a.selector=e}return a},l=ae.select=function(e,t,n,o){var i,l,c,u,d,h=\"function\"==typeof e&&e,m=!o&&s(e=h.selector||e);if(n=n||[],1===m.length){if((l=m[0]=m[0].slice(0)).length>2&&\"ID\"===(c=l[0]).type&&9===t.nodeType&&p&&r.relative[l[1].type]){if(!(t=(r.find.ID(c.matches[0].replace(te,ne),t)||[])[0]))return n;h&&(t=t.parentNode),e=e.slice(l.shift().value.length)}for(i=G.needsContext.test(e)?0:l.length;i--&&(c=l[i],!r.relative[u=c.type]);)if((d=r.find[u])&&(o=d(c.matches[0].replace(te,ne),ee.test(l[0].type)&&ve(t.parentNode)||t))){if(l.splice(i,1),!(e=o.length&&be(l)))return O.apply(n,o),n;break}}return(h||a(e,m))(o,t,!p,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},n.sortStable=_.split(\"\").sort(M).join(\"\")===_,n.detectDuplicates=!!d,h(),n.sortDetached=ue((function(e){return 1&e.compareDocumentPosition(m.createElement(\"fieldset\"))})),ue((function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")}))||de(\"type|href|height|width\",(function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)})),n.attributes&&ue((function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")}))||de(\"value\",(function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue})),ue((function(e){return null==e.getAttribute(\"disabled\")}))||de($,(function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null})),ae}(r);k.find=S,k.expr=S.selectors,k.expr[\":\"]=k.expr.pseudos,k.uniqueSort=k.unique=S.uniqueSort,k.text=S.getText,k.isXMLDoc=S.isXML,k.contains=S.contains,k.escapeSelector=S.escape;var A=function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&k(e).is(n))break;r.push(e)}return r},M=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},L=k.expr.match.needsContext;function E(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var T=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function F(e,t,n){return v(t)?k.grep(e,(function(e,r){return!!t.call(e,r,e)!==n})):t.nodeType?k.grep(e,(function(e){return e===t!==n})):\"string\"!=typeof t?k.grep(e,(function(e){return u.call(t,e)>-1!==n})):k.filter(t,e,n)}k.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,(function(e){return 1===e.nodeType})))},k.fn.extend({find:function(e){var t,n,r=this.length,o=this;if(\"string\"!=typeof e)return this.pushStack(k(e).filter((function(){for(t=0;t<r;t++)if(k.contains(o[t],this))return!0})));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,o[t],n);return r>1?k.uniqueSort(n):n},filter:function(e){return this.pushStack(F(this,e||[],!1))},not:function(e){return this.pushStack(F(this,e||[],!0))},is:function(e){return!!F(this,\"string\"==typeof e&&L.test(e)?k(e):e||[],!1).length}});var O,B=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(k.fn.init=function(e,t,n){var r,o;if(!e)return this;if(n=n||O,\"string\"==typeof e){if(!(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:B.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:b,!0)),T.test(r[1])&&k.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(o=b.getElementById(r[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,O=k(b);var R=/^(?:parents|prev(?:Until|All))/,$={children:!0,contents:!0,next:!0,prev:!0};function N(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter((function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0}))},closest:function(e,t){var n,r=0,o=this.length,i=[],s=\"string\"!=typeof e&&k(e);if(!L.test(e))for(;r<o;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&k.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(i.length>1?k.uniqueSort(i):i)},index:function(e){return e?\"string\"==typeof e?u.call(k(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return A(e,\"parentNode\")},parentsUntil:function(e,t,n){return A(e,\"parentNode\",n)},next:function(e){return N(e,\"nextSibling\")},prev:function(e){return N(e,\"previousSibling\")},nextAll:function(e){return A(e,\"nextSibling\")},prevAll:function(e){return A(e,\"previousSibling\")},nextUntil:function(e,t,n){return A(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return A(e,\"previousSibling\",n)},siblings:function(e){return M((e.parentNode||{}).firstChild,e)},children:function(e){return M(e.firstChild)},contents:function(e){return null!=e.contentDocument&&s(e.contentDocument)?e.contentDocument:(E(e,\"template\")&&(e=e.content||e),k.merge([],e.childNodes))}},(function(e,t){k.fn[e]=function(n,r){var o=k.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(o=k.filter(r,o)),this.length>1&&($[e]||k.uniqueSort(o),R.test(e)&&o.reverse()),this.pushStack(o)}}));var Y=/[^\\x20\\t\\r\\n\\f]+/g;function P(e){return e}function I(e){throw e}function H(e,t,n,r){var o;try{e&&v(o=e.promise)?o.call(e).done(t).fail(n):e&&v(o=e.then)?o.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(e){e=\"string\"==typeof e?function(e){var t={};return k.each(e.match(Y)||[],(function(e,n){t[n]=!0})),t}(e):k.extend({},e);var t,n,r,o,i=[],s=[],a=-1,l=function(){for(o=o||e.once,r=t=!0;s.length;a=-1)for(n=s.shift();++a<i.length;)!1===i[a].apply(n[0],n[1])&&e.stopOnFalse&&(a=i.length,n=!1);e.memory||(n=!1),t=!1,o&&(i=n?[]:\"\")},c={add:function(){return i&&(n&&!t&&(a=i.length-1,s.push(n)),function t(n){k.each(n,(function(n,r){v(r)?e.unique&&c.has(r)||i.push(r):r&&r.length&&\"string\"!==x(r)&&t(r)}))}(arguments),n&&!t&&l()),this},remove:function(){return k.each(arguments,(function(e,t){for(var n;(n=k.inArray(t,i,n))>-1;)i.splice(n,1),n<=a&&a--})),this},has:function(e){return e?k.inArray(e,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return o=s=[],i=n=\"\",this},disabled:function(){return!i},lock:function(){return o=s=[],n||t||(i=n=\"\"),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=[e,(n=n||[]).slice?n.slice():n],s.push(n),t||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},k.extend({Deferred:function(e){var t=[[\"notify\",\"progress\",k.Callbacks(\"memory\"),k.Callbacks(\"memory\"),2],[\"resolve\",\"done\",k.Callbacks(\"once memory\"),k.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",k.Callbacks(\"once memory\"),k.Callbacks(\"once memory\"),1,\"rejected\"]],n=\"pending\",o={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var e=arguments;return k.Deferred((function(n){k.each(t,(function(t,r){var o=v(e[r[4]])&&e[r[4]];i[r[1]]((function(){var e=o&&o.apply(this,arguments);e&&v(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+\"With\"](this,o?[e]:arguments)}))})),e=null})).promise()},then:function(e,n,o){var i=0;function s(e,t,n,o){return function(){var a=this,l=arguments,c=function(){var r,c;if(!(e<i)){if((r=n.apply(a,l))===t.promise())throw new TypeError(\"Thenable self-resolution\");c=r&&(\"object\"==typeof r||\"function\"==typeof r)&&r.then,v(c)?o?c.call(r,s(i,t,P,o),s(i,t,I,o)):(i++,c.call(r,s(i,t,P,o),s(i,t,I,o),s(i,t,P,t.notifyWith))):(n!==P&&(a=void 0,l=[r]),(o||t.resolveWith)(a,l))}},u=o?c:function(){try{c()}catch(r){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(r,u.stackTrace),e+1>=i&&(n!==I&&(a=void 0,l=[r]),t.rejectWith(a,l))}};e?u():(k.Deferred.getStackHook&&(u.stackTrace=k.Deferred.getStackHook()),r.setTimeout(u))}}return k.Deferred((function(r){t[0][3].add(s(0,r,v(o)?o:P,r.notifyWith)),t[1][3].add(s(0,r,v(e)?e:P)),t[2][3].add(s(0,r,v(n)?n:I))})).promise()},promise:function(e){return null!=e?k.extend(e,o):o}},i={};return k.each(t,(function(e,r){var s=r[2],a=r[5];o[r[1]]=s.add,a&&s.add((function(){n=a}),t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),s.add(r[3].fire),i[r[0]]=function(){return i[r[0]+\"With\"](this===i?void 0:this,arguments),this},i[r[0]+\"With\"]=s.fireWith})),o.promise(i),e&&e.call(i,i),i},when:function(e){var t=arguments.length,n=t,r=Array(n),o=a.call(arguments),i=k.Deferred(),s=function(e){return function(n){r[e]=this,o[e]=arguments.length>1?a.call(arguments):n,--t||i.resolveWith(r,o)}};if(t<=1&&(H(e,i.done(s(n)).resolve,i.reject,!t),\"pending\"===i.state()||v(o[n]&&o[n].then)))return i.then();for(;n--;)H(o[n],s(n),i.reject);return i.promise()}});var j=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){r.console&&r.console.warn&&e&&j.test(e.name)&&r.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},k.readyException=function(e){r.setTimeout((function(){throw e}))};var W=k.Deferred();function z(){b.removeEventListener(\"DOMContentLoaded\",z),r.removeEventListener(\"load\",z),k.ready()}k.fn.ready=function(e){return W.then(e).catch((function(e){k.readyException(e)})),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0,!0!==e&&--k.readyWait>0||W.resolveWith(b,[k]))}}),k.ready.then=W.then,\"complete\"===b.readyState||\"loading\"!==b.readyState&&!b.documentElement.doScroll?r.setTimeout(k.ready):(b.addEventListener(\"DOMContentLoaded\",z),r.addEventListener(\"load\",z));var U=function(e,t,n,r,o,i,s){var a=0,l=e.length,c=null==n;if(\"object\"===x(n))for(a in o=!0,n)U(e,t,a,n[a],!0,i,s);else if(void 0!==r&&(o=!0,v(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(k(e),n)})),t))for(;a<l;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return o?e:c?t.call(e):l?t(e[0],n):i},V=/^-ms-/,q=/-([a-z])/g;function G(e,t){return t.toUpperCase()}function K(e){return e.replace(V,\"ms-\").replace(q,G)}var X=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function J(){this.expando=k.expando+J.uid++}J.uid=1,J.prototype={cache:function(e){var t=e[this.expando];return t||(t={},X(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,o=this.cache(e);if(\"string\"==typeof t)o[K(t)]=n;else for(r in t)o[K(r)]=t[r];return o},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][K(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(K):(t=K(t))in r?[t]:t.match(Y)||[]).length;for(;n--;)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new J,Z=new J,ee=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,te=/[A-Z]/g;function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(te,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=function(e){return\"true\"===e||\"false\"!==e&&(\"null\"===e?null:e===+e+\"\"?+e:ee.test(e)?JSON.parse(e):e)}(n)}catch(e){}Z.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return Z.hasData(e)||Q.hasData(e)},data:function(e,t,n){return Z.access(e,t,n)},removeData:function(e,t){Z.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(e,t){var n,r,o,i=this[0],s=i&&i.attributes;if(void 0===e){if(this.length&&(o=Z.get(i),1===i.nodeType&&!Q.get(i,\"hasDataAttrs\"))){for(n=s.length;n--;)s[n]&&0===(r=s[n].name).indexOf(\"data-\")&&(r=K(r.slice(5)),ne(i,r,o[r]));Q.set(i,\"hasDataAttrs\",!0)}return o}return\"object\"==typeof e?this.each((function(){Z.set(this,e)})):U(this,(function(t){var n;if(i&&void 0===t)return void 0!==(n=Z.get(i,e))||void 0!==(n=ne(i,e))?n:void 0;this.each((function(){Z.set(this,e,t)}))}),null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each((function(){Z.remove(this,e)}))}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=k.queue(e,t),r=n.length,o=n.shift(),i=k._queueHooks(e,t);\"inprogress\"===o&&(o=n.shift(),r--),o&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete i.stop,o.call(e,(function(){k.dequeue(e,t)}),i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks(\"once memory\").add((function(){Q.remove(e,[t+\"queue\",n])}))})}}),k.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?k.queue(this[0],e):void 0===t?this:this.each((function(){var n=k.queue(this,e,t);k._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&k.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){k.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,o=k.Deferred(),i=this,s=this.length,a=function(){--r||o.resolveWith(i,[i])};for(\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";s--;)(n=Q.get(i[s],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(a));return a(),o.promise(t)}});var re=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,oe=new RegExp(\"^(?:([+-])=|)(\"+re+\")([a-z%]*)$\",\"i\"),ie=[\"Top\",\"Right\",\"Bottom\",\"Left\"],se=b.documentElement,ae=function(e){return k.contains(e.ownerDocument,e)},le={composed:!0};se.getRootNode&&(ae=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(le)===e.ownerDocument});var ce=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&ae(e)&&\"none\"===k.css(e,\"display\")};function ue(e,t,n,r){var o,i,s=20,a=r?function(){return r.cur()}:function(){return k.css(e,t,\"\")},l=a(),c=n&&n[3]||(k.cssNumber[t]?\"\":\"px\"),u=e.nodeType&&(k.cssNumber[t]||\"px\"!==c&&+l)&&oe.exec(k.css(e,t));if(u&&u[3]!==c){for(l/=2,c=c||u[3],u=+l||1;s--;)k.style(e,t,u+c),(1-i)*(1-(i=a()/l||.5))<=0&&(s=0),u/=i;u*=2,k.style(e,t,u+c),n=n||[]}return n&&(u=+u||+l||0,o=n[1]?u+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=u,r.end=o)),o}var de={};function he(e){var t,n=e.ownerDocument,r=e.nodeName,o=de[r];return o||(t=n.body.appendChild(n.createElement(r)),o=k.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"===o&&(o=\"block\"),de[r]=o,o)}function me(e,t){for(var n,r,o=[],i=0,s=e.length;i<s;i++)(r=e[i]).style&&(n=r.style.display,t?(\"none\"===n&&(o[i]=Q.get(r,\"display\")||null,o[i]||(r.style.display=\"\")),\"\"===r.style.display&&ce(r)&&(o[i]=he(r))):\"none\"!==n&&(o[i]=\"none\",Q.set(r,\"display\",n)));for(i=0;i<s;i++)null!=o[i]&&(e[i].style.display=o[i]);return e}k.fn.extend({show:function(){return me(this,!0)},hide:function(){return me(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each((function(){ce(this)?k(this).show():k(this).hide()}))}});var fe,pe,ge=/^(?:checkbox|radio)$/i,ve=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,ye=/^$|^module$|\\/(?:java|ecma)script/i;fe=b.createDocumentFragment().appendChild(b.createElement(\"div\")),(pe=b.createElement(\"input\")).setAttribute(\"type\",\"radio\"),pe.setAttribute(\"checked\",\"checked\"),pe.setAttribute(\"name\",\"t\"),fe.appendChild(pe),g.checkClone=fe.cloneNode(!0).cloneNode(!0).lastChild.checked,fe.innerHTML=\"<textarea>x</textarea>\",g.noCloneChecked=!!fe.cloneNode(!0).lastChild.defaultValue,fe.innerHTML=\"<option></option>\",g.option=!!fe.lastChild;var be={thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function _e(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):void 0!==e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&E(e,t)?k.merge([e],n):n}function we(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],\"globalEval\",!t||Q.get(t[n],\"globalEval\"))}be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,g.option||(be.optgroup=be.option=[1,\"<select multiple='multiple'>\",\"</select>\"]);var xe=/<|&#?\\w+;/;function Ce(e,t,n,r,o){for(var i,s,a,l,c,u,d=t.createDocumentFragment(),h=[],m=0,f=e.length;m<f;m++)if((i=e[m])||0===i)if(\"object\"===x(i))k.merge(h,i.nodeType?[i]:i);else if(xe.test(i)){for(s=s||d.appendChild(t.createElement(\"div\")),a=(ve.exec(i)||[\"\",\"\"])[1].toLowerCase(),l=be[a]||be._default,s.innerHTML=l[1]+k.htmlPrefilter(i)+l[2],u=l[0];u--;)s=s.lastChild;k.merge(h,s.childNodes),(s=d.firstChild).textContent=\"\"}else h.push(t.createTextNode(i));for(d.textContent=\"\",m=0;i=h[m++];)if(r&&k.inArray(i,r)>-1)o&&o.push(i);else if(c=ae(i),s=_e(d.appendChild(i),\"script\"),c&&we(s),n)for(u=0;i=s[u++];)ye.test(i.type||\"\")&&n.push(i);return d}var ke=/^([^.]*)(?:\\.(.+)|)/;function De(){return!0}function Se(){return!1}function Ae(e,t){return e===function(){try{return b.activeElement}catch(e){}}()==(\"focus\"===t)}function Me(e,t,n,r,o,i){var s,a;if(\"object\"==typeof t){for(a in\"string\"!=typeof n&&(r=r||n,n=void 0),t)Me(e,a,n,r,t[a],i);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&(\"string\"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),!1===o)o=Se;else if(!o)return e;return 1===i&&(s=o,o=function(e){return k().off(e),s.apply(this,arguments)},o.guid=s.guid||(s.guid=k.guid++)),e.each((function(){k.event.add(this,t,o,r,n)}))}function Le(e,t,n){n?(Q.set(e,t,!1),k.event.add(e,t,{namespace:!1,handler:function(e){var r,o,i=Q.get(this,t);if(1&e.isTrigger&&this[t]){if(i.length)(k.event.special[t]||{}).delegateType&&e.stopPropagation();else if(i=a.call(arguments),Q.set(this,t,i),r=n(this,t),this[t](),i!==(o=Q.get(this,t))||r?Q.set(this,t,!1):o={},i!==o)return e.stopImmediatePropagation(),e.preventDefault(),o&&o.value}else i.length&&(Q.set(this,t,{value:k.event.trigger(k.extend(i[0],k.Event.prototype),i.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,t)&&k.event.add(e,t,De)}k.event={global:{},add:function(e,t,n,r,o){var i,s,a,l,c,u,d,h,m,f,p,g=Q.get(e);if(X(e))for(n.handler&&(n=(i=n).handler,o=i.selector),o&&k.find.matchesSelector(se,o),n.guid||(n.guid=k.guid++),(l=g.events)||(l=g.events=Object.create(null)),(s=g.handle)||(s=g.handle=function(t){return void 0!==k&&k.event.triggered!==t.type?k.event.dispatch.apply(e,arguments):void 0}),c=(t=(t||\"\").match(Y)||[\"\"]).length;c--;)m=p=(a=ke.exec(t[c])||[])[1],f=(a[2]||\"\").split(\".\").sort(),m&&(d=k.event.special[m]||{},m=(o?d.delegateType:d.bindType)||m,d=k.event.special[m]||{},u=k.extend({type:m,origType:p,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&k.expr.match.needsContext.test(o),namespace:f.join(\".\")},i),(h=l[m])||((h=l[m]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,r,f,s)||e.addEventListener&&e.addEventListener(m,s)),d.add&&(d.add.call(e,u),u.handler.guid||(u.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,u):h.push(u),k.event.global[m]=!0)},remove:function(e,t,n,r,o){var i,s,a,l,c,u,d,h,m,f,p,g=Q.hasData(e)&&Q.get(e);if(g&&(l=g.events)){for(c=(t=(t||\"\").match(Y)||[\"\"]).length;c--;)if(m=p=(a=ke.exec(t[c])||[])[1],f=(a[2]||\"\").split(\".\").sort(),m){for(d=k.event.special[m]||{},h=l[m=(r?d.delegateType:d.bindType)||m]||[],a=a[2]&&new RegExp(\"(^|\\\\.)\"+f.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),s=i=h.length;i--;)u=h[i],!o&&p!==u.origType||n&&n.guid!==u.guid||a&&!a.test(u.namespace)||r&&r!==u.selector&&(\"**\"!==r||!u.selector)||(h.splice(i,1),u.selector&&h.delegateCount--,d.remove&&d.remove.call(e,u));s&&!h.length&&(d.teardown&&!1!==d.teardown.call(e,f,g.handle)||k.removeEvent(e,m,g.handle),delete l[m])}else for(m in l)k.event.remove(e,m+t[c],n,r,!0);k.isEmptyObject(l)&&Q.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,o,i,s,a=new Array(arguments.length),l=k.event.fix(e),c=(Q.get(this,\"events\")||Object.create(null))[l.type]||[],u=k.event.special[l.type]||{};for(a[0]=l,t=1;t<arguments.length;t++)a[t]=arguments[t];if(l.delegateTarget=this,!u.preDispatch||!1!==u.preDispatch.call(this,l)){for(s=k.event.handlers.call(this,l,c),t=0;(o=s[t++])&&!l.isPropagationStopped();)for(l.currentTarget=o.elem,n=0;(i=o.handlers[n++])&&!l.isImmediatePropagationStopped();)l.rnamespace&&!1!==i.namespace&&!l.rnamespace.test(i.namespace)||(l.handleObj=i,l.data=i.data,void 0!==(r=((k.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,a))&&!1===(l.result=r)&&(l.preventDefault(),l.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,l),l.result}},handlers:function(e,t){var n,r,o,i,s,a=[],l=t.delegateCount,c=e.target;if(l&&c.nodeType&&!(\"click\"===e.type&&e.button>=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&(\"click\"!==e.type||!0!==c.disabled)){for(i=[],s={},n=0;n<l;n++)void 0===s[o=(r=t[n]).selector+\" \"]&&(s[o]=r.needsContext?k(o,this).index(c)>-1:k.find(o,this,null,[c]).length),s[o]&&i.push(r);i.length&&a.push({elem:c,handlers:i})}return c=this,l<t.length&&a.push({elem:c,handlers:t.slice(l)}),a},addProp:function(e,t){Object.defineProperty(k.Event.prototype,e,{enumerable:!0,configurable:!0,get:v(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return ge.test(t.type)&&t.click&&E(t,\"input\")&&Le(t,\"click\",De),!1},trigger:function(e){var t=this||e;return ge.test(t.type)&&t.click&&E(t,\"input\")&&Le(t,\"click\"),!0},_default:function(e){var t=e.target;return ge.test(t.type)&&t.click&&E(t,\"input\")&&Q.get(t,\"click\")||E(t,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?De:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=De,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=De,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=De,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},k.event.addProp),k.each({focus:\"focusin\",blur:\"focusout\"},(function(e,t){k.event.special[e]={setup:function(){return Le(this,e,Ae),!1},trigger:function(){return Le(this,e),!0},_default:function(t){return Q.get(t.target,e)},delegateType:t}})),k.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},(function(e,t){k.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,o=e.relatedTarget,i=e.handleObj;return o&&(o===r||k.contains(r,o))||(e.type=i.origType,n=i.handler.apply(this,arguments),e.type=t),n}}})),k.fn.extend({on:function(e,t,n,r){return Me(this,e,t,n,r)},one:function(e,t,n,r){return Me(this,e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each((function(){k.event.remove(this,e,n,t)}))}});var Ee=/<script|<style|<link/i,Te=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Fe=/^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;function Oe(e,t){return E(e,\"table\")&&E(11!==t.nodeType?t:t.firstChild,\"tr\")&&k(e).children(\"tbody\")[0]||e}function Be(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Re(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function $e(e,t){var n,r,o,i,s,a;if(1===t.nodeType){if(Q.hasData(e)&&(a=Q.get(e).events))for(o in Q.remove(t,\"handle events\"),a)for(n=0,r=a[o].length;n<r;n++)k.event.add(t,o,a[o][n]);Z.hasData(e)&&(i=Z.access(e),s=k.extend({},i),Z.set(t,s))}}function Ne(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&ge.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function Ye(e,t,n,r){t=l(t);var o,i,s,a,c,u,d=0,h=e.length,m=h-1,f=t[0],p=v(f);if(p||h>1&&\"string\"==typeof f&&!g.checkClone&&Te.test(f))return e.each((function(o){var i=e.eq(o);p&&(t[0]=f.call(this,o,i.html())),Ye(i,t,n,r)}));if(h&&(i=(o=Ce(t,e[0].ownerDocument,!1,e,r)).firstChild,1===o.childNodes.length&&(o=i),i||r)){for(a=(s=k.map(_e(o,\"script\"),Be)).length;d<h;d++)c=o,d!==m&&(c=k.clone(c,!0,!0),a&&k.merge(s,_e(c,\"script\"))),n.call(e[d],c,d);if(a)for(u=s[s.length-1].ownerDocument,k.map(s,Re),d=0;d<a;d++)c=s[d],ye.test(c.type||\"\")&&!Q.access(c,\"globalEval\")&&k.contains(u,c)&&(c.src&&\"module\"!==(c.type||\"\").toLowerCase()?k._evalUrl&&!c.noModule&&k._evalUrl(c.src,{nonce:c.nonce||c.getAttribute(\"nonce\")},u):w(c.textContent.replace(Fe,\"\"),c,u))}return e}function Pe(e,t,n){for(var r,o=t?k.filter(t,e):e,i=0;null!=(r=o[i]);i++)n||1!==r.nodeType||k.cleanData(_e(r)),r.parentNode&&(n&&ae(r)&&we(_e(r,\"script\")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,o,i,s,a=e.cloneNode(!0),l=ae(e);if(!(g.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(s=_e(a),r=0,o=(i=_e(e)).length;r<o;r++)Ne(i[r],s[r]);if(t)if(n)for(i=i||_e(e),s=s||_e(a),r=0,o=i.length;r<o;r++)$e(i[r],s[r]);else $e(e,a);return(s=_e(a,\"script\")).length>0&&we(s,!l&&_e(e,\"script\")),a},cleanData:function(e){for(var t,n,r,o=k.event.special,i=0;void 0!==(n=e[i]);i++)if(X(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)o[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[Z.expando]&&(n[Z.expando]=void 0)}}}),k.fn.extend({detach:function(e){return Pe(this,e,!0)},remove:function(e){return Pe(this,e)},text:function(e){return U(this,(function(e){return void 0===e?k.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return Ye(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)}))},prepend:function(){return Ye(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return Ye(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return Ye(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(_e(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return k.clone(this,e,t)}))},html:function(e){return U(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!Ee.test(e)&&!be[(ve.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(_e(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)}),null,e,arguments.length)},replaceWith:function(){var e=[];return Ye(this,arguments,(function(t){var n=this.parentNode;k.inArray(this,e)<0&&(k.cleanData(_e(this)),n&&n.replaceChild(t,this))}),e)}}),k.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},(function(e,t){k.fn[e]=function(e){for(var n,r=[],o=k(e),i=o.length-1,s=0;s<=i;s++)n=s===i?this:this.clone(!0),k(o[s])[t](n),c.apply(r,n.get());return this.pushStack(r)}}));var Ie=new RegExp(\"^(\"+re+\")(?!px)[a-z%]+$\",\"i\"),He=/^--/,je=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=r),t.getComputedStyle(e)},We=function(e,t,n){var r,o,i={};for(o in t)i[o]=e.style[o],e.style[o]=t[o];for(o in r=n.call(e),t)e.style[o]=i[o];return r},ze=new RegExp(ie.join(\"|\"),\"i\"),Ue=new RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)[\\\\x20\\\\t\\\\r\\\\n\\\\f]+$\",\"g\");function Ve(e,t,n){var r,o,i,s,a=He.test(t),l=e.style;return(n=n||je(e))&&(s=n.getPropertyValue(t)||n[t],a&&(s=s.replace(Ue,\"$1\")),\"\"!==s||ae(e)||(s=k.style(e,t)),!g.pixelBoxStyles()&&Ie.test(s)&&ze.test(t)&&(r=l.width,o=l.minWidth,i=l.maxWidth,l.minWidth=l.maxWidth=l.width=s,s=n.width,l.width=r,l.minWidth=o,l.maxWidth=i)),void 0!==s?s+\"\":s}function qe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){c.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",u.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",se.appendChild(c).appendChild(u);var e=r.getComputedStyle(u);n=\"1%\"!==e.top,l=12===t(e.marginLeft),u.style.right=\"60%\",s=36===t(e.right),o=36===t(e.width),u.style.position=\"absolute\",i=12===t(u.offsetWidth/3),se.removeChild(c),u=null}}function t(e){return Math.round(parseFloat(e))}var n,o,i,s,a,l,c=b.createElement(\"div\"),u=b.createElement(\"div\");u.style&&(u.style.backgroundClip=\"content-box\",u.cloneNode(!0).style.backgroundClip=\"\",g.clearCloneStyle=\"content-box\"===u.style.backgroundClip,k.extend(g,{boxSizingReliable:function(){return e(),o},pixelBoxStyles:function(){return e(),s},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),l},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,o;return null==a&&(e=b.createElement(\"table\"),t=b.createElement(\"tr\"),n=b.createElement(\"div\"),e.style.cssText=\"position:absolute;left:-11111px;border-collapse:separate\",t.style.cssText=\"border:1px solid\",t.style.height=\"1px\",n.style.height=\"9px\",n.style.display=\"block\",se.appendChild(e).appendChild(t).appendChild(n),o=r.getComputedStyle(t),a=parseInt(o.height,10)+parseInt(o.borderTopWidth,10)+parseInt(o.borderBottomWidth,10)===t.offsetHeight,se.removeChild(e)),a}}))}();var Ge=[\"Webkit\",\"Moz\",\"ms\"],Ke=b.createElement(\"div\").style,Xe={};function Je(e){var t=k.cssProps[e]||Xe[e];return t||(e in Ke?e:Xe[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;n--;)if((e=Ge[n]+t)in Ke)return e}(e)||e)}var Qe=/^(none|table(?!-c[ea]).+)/,Ze={position:\"absolute\",visibility:\"hidden\",display:\"block\"},et={letterSpacing:\"0\",fontWeight:\"400\"};function tt(e,t,n){var r=oe.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function nt(e,t,n,r,o,i){var s=\"width\"===t?1:0,a=0,l=0;if(n===(r?\"border\":\"content\"))return 0;for(;s<4;s+=2)\"margin\"===n&&(l+=k.css(e,n+ie[s],!0,o)),r?(\"content\"===n&&(l-=k.css(e,\"padding\"+ie[s],!0,o)),\"margin\"!==n&&(l-=k.css(e,\"border\"+ie[s]+\"Width\",!0,o))):(l+=k.css(e,\"padding\"+ie[s],!0,o),\"padding\"!==n?l+=k.css(e,\"border\"+ie[s]+\"Width\",!0,o):a+=k.css(e,\"border\"+ie[s]+\"Width\",!0,o));return!r&&i>=0&&(l+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-i-l-a-.5))||0),l}function rt(e,t,n){var r=je(e),o=(!g.boxSizingReliable()||n)&&\"border-box\"===k.css(e,\"boxSizing\",!1,r),i=o,s=Ve(e,t,r),a=\"offset\"+t[0].toUpperCase()+t.slice(1);if(Ie.test(s)){if(!n)return s;s=\"auto\"}return(!g.boxSizingReliable()&&o||!g.reliableTrDimensions()&&E(e,\"tr\")||\"auto\"===s||!parseFloat(s)&&\"inline\"===k.css(e,\"display\",!1,r))&&e.getClientRects().length&&(o=\"border-box\"===k.css(e,\"boxSizing\",!1,r),(i=a in e)&&(s=e[a])),(s=parseFloat(s)||0)+nt(e,t,n||(o?\"border\":\"content\"),i,r,s)+\"px\"}function ot(e,t,n,r,o){return new ot.prototype.init(e,t,n,r,o)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ve(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,i,s,a=K(t),l=He.test(t),c=e.style;if(l||(t=Je(a)),s=k.cssHooks[t]||k.cssHooks[a],void 0===n)return s&&\"get\"in s&&void 0!==(o=s.get(e,!1,r))?o:c[t];\"string\"===(i=typeof n)&&(o=oe.exec(n))&&o[1]&&(n=ue(e,t,o),i=\"number\"),null!=n&&n==n&&(\"number\"!==i||l||(n+=o&&o[3]||(k.cssNumber[a]?\"\":\"px\")),g.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(c[t]=\"inherit\"),s&&\"set\"in s&&void 0===(n=s.set(e,n,r))||(l?c.setProperty(t,n):c[t]=n))}},css:function(e,t,n,r){var o,i,s,a=K(t);return He.test(t)||(t=Je(a)),(s=k.cssHooks[t]||k.cssHooks[a])&&\"get\"in s&&(o=s.get(e,!0,n)),void 0===o&&(o=Ve(e,t,r)),\"normal\"===o&&t in et&&(o=et[t]),\"\"===n||n?(i=parseFloat(o),!0===n||isFinite(i)?i||0:o):o}}),k.each([\"height\",\"width\"],(function(e,t){k.cssHooks[t]={get:function(e,n,r){if(n)return!Qe.test(k.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?rt(e,t,r):We(e,Ze,(function(){return rt(e,t,r)}))},set:function(e,n,r){var o,i=je(e),s=!g.scrollboxSize()&&\"absolute\"===i.position,a=(s||r)&&\"border-box\"===k.css(e,\"boxSizing\",!1,i),l=r?nt(e,t,r,a,i):0;return a&&s&&(l-=Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(i[t])-nt(e,t,\"border\",!1,i)-.5)),l&&(o=oe.exec(n))&&\"px\"!==(o[3]||\"px\")&&(e.style[t]=n,n=k.css(e,t)),tt(0,n,l)}}})),k.cssHooks.marginLeft=qe(g.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(Ve(e,\"marginLeft\"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+\"px\"})),k.each({margin:\"\",padding:\"\",border:\"Width\"},(function(e,t){k.cssHooks[e+t]={expand:function(n){for(var r=0,o={},i=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)o[e+ie[r]+t]=i[r]||i[r-2]||i[0];return o}},\"margin\"!==e&&(k.cssHooks[e+t].set=tt)})),k.fn.extend({css:function(e,t){return U(this,(function(e,t,n){var r,o,i={},s=0;if(Array.isArray(t)){for(r=je(e),o=t.length;s<o;s++)i[t[s]]=k.css(e,t[s],!1,r);return i}return void 0!==n?k.style(e,t,n):k.css(e,t)}),e,t,arguments.length>1)}}),k.Tween=ot,ot.prototype={constructor:ot,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(k.cssNumber[n]?\"\":\"px\")},cur:function(){var e=ot.propHooks[this.prop];return e&&e.get?e.get(this):ot.propHooks._default.get(this)},run:function(e){var t,n=ot.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):ot.propHooks._default.set(this),this}},ot.prototype.init.prototype=ot.prototype,ot.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Je(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}},ot.propHooks.scrollTop=ot.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},k.fx=ot.prototype.init,k.fx.step={};var it,st,at=/^(?:toggle|show|hide)$/,lt=/queueHooks$/;function ct(){st&&(!1===b.hidden&&r.requestAnimationFrame?r.requestAnimationFrame(ct):r.setTimeout(ct,k.fx.interval),k.fx.tick())}function ut(){return r.setTimeout((function(){it=void 0})),it=Date.now()}function dt(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)o[\"margin\"+(n=ie[r])]=o[\"padding\"+n]=e;return t&&(o.opacity=o.width=e),o}function ht(e,t,n){for(var r,o=(mt.tweeners[t]||[]).concat(mt.tweeners[\"*\"]),i=0,s=o.length;i<s;i++)if(r=o[i].call(n,t,e))return r}function mt(e,t,n){var r,o,i=0,s=mt.prefilters.length,a=k.Deferred().always((function(){delete l.elem})),l=function(){if(o)return!1;for(var t=it||ut(),n=Math.max(0,c.startTime+c.duration-t),r=1-(n/c.duration||0),i=0,s=c.tweens.length;i<s;i++)c.tweens[i].run(r);return a.notifyWith(e,[c,r,n]),r<1&&s?n:(s||a.notifyWith(e,[c,1,0]),a.resolveWith(e,[c]),!1)},c=a.promise({elem:e,props:k.extend({},t),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},n),originalProperties:t,originalOptions:n,startTime:it||ut(),duration:n.duration,tweens:[],createTween:function(t,n){var r=k.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(r),r},stop:function(t){var n=0,r=t?c.tweens.length:0;if(o)return this;for(o=!0;n<r;n++)c.tweens[n].run(1);return t?(a.notifyWith(e,[c,1,0]),a.resolveWith(e,[c,t])):a.rejectWith(e,[c,t]),this}}),u=c.props;for(!function(e,t){var n,r,o,i,s;for(n in e)if(o=t[r=K(n)],i=e[n],Array.isArray(i)&&(o=i[1],i=e[n]=i[0]),n!==r&&(e[r]=i,delete e[n]),(s=k.cssHooks[r])&&\"expand\"in s)for(n in i=s.expand(i),delete e[r],i)n in e||(e[n]=i[n],t[n]=o);else t[r]=o}(u,c.opts.specialEasing);i<s;i++)if(r=mt.prefilters[i].call(c,e,u,c.opts))return v(r.stop)&&(k._queueHooks(c.elem,c.opts.queue).stop=r.stop.bind(r)),r;return k.map(u,ht,c),v(c.opts.start)&&c.opts.start.call(e,c),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always),k.fx.timer(k.extend(l,{elem:e,anim:c,queue:c.opts.queue})),c}k.Animation=k.extend(mt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,oe.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=[\"*\"]):e=e.match(Y);for(var n,r=0,o=e.length;r<o;r++)n=e[r],mt.tweeners[n]=mt.tweeners[n]||[],mt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,o,i,s,a,l,c,u,d=\"width\"in t||\"height\"in t,h=this,m={},f=e.style,p=e.nodeType&&ce(e),g=Q.get(e,\"fxshow\");for(r in n.queue||(null==(s=k._queueHooks(e,\"fx\")).unqueued&&(s.unqueued=0,a=s.empty.fire,s.empty.fire=function(){s.unqueued||a()}),s.unqueued++,h.always((function(){h.always((function(){s.unqueued--,k.queue(e,\"fx\").length||s.empty.fire()}))}))),t)if(o=t[r],at.test(o)){if(delete t[r],i=i||\"toggle\"===o,o===(p?\"hide\":\"show\")){if(\"show\"!==o||!g||void 0===g[r])continue;p=!0}m[r]=g&&g[r]||k.style(e,r)}if((l=!k.isEmptyObject(t))||!k.isEmptyObject(m))for(r in d&&1===e.nodeType&&(n.overflow=[f.overflow,f.overflowX,f.overflowY],null==(c=g&&g.display)&&(c=Q.get(e,\"display\")),\"none\"===(u=k.css(e,\"display\"))&&(c?u=c:(me([e],!0),c=e.style.display||c,u=k.css(e,\"display\"),me([e]))),(\"inline\"===u||\"inline-block\"===u&&null!=c)&&\"none\"===k.css(e,\"float\")&&(l||(h.done((function(){f.display=c})),null==c&&(u=f.display,c=\"none\"===u?\"\":u)),f.display=\"inline-block\")),n.overflow&&(f.overflow=\"hidden\",h.always((function(){f.overflow=n.overflow[0],f.overflowX=n.overflow[1],f.overflowY=n.overflow[2]}))),l=!1,m)l||(g?\"hidden\"in g&&(p=g.hidden):g=Q.access(e,\"fxshow\",{display:c}),i&&(g.hidden=!p),p&&me([e],!0),h.done((function(){for(r in p||me([e]),Q.remove(e,\"fxshow\"),m)k.style(e,r,m[r])}))),l=ht(p?g[r]:0,r,h),r in g||(g[r]=l.start,p&&(l.end=l.start,l.start=0))}],prefilter:function(e,t){t?mt.prefilters.unshift(e):mt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&\"object\"==typeof e?k.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return k.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ce).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var o=k.isEmptyObject(e),i=k.speed(t,n,r),s=function(){var t=mt(this,k.extend({},e),i);(o||Q.get(this,\"finish\"))&&t.stop(!0)};return s.finish=s,o||!1===i.queue?this.each(s):this.queue(i.queue,s)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&this.queue(e||\"fx\",[]),this.each((function(){var t=!0,o=null!=e&&e+\"queueHooks\",i=k.timers,s=Q.get(this);if(o)s[o]&&s[o].stop&&r(s[o]);else for(o in s)s[o]&&s[o].stop&&lt.test(o)&&r(s[o]);for(o=i.length;o--;)i[o].elem!==this||null!=e&&i[o].queue!==e||(i[o].anim.stop(n),t=!1,i.splice(o,1));!t&&n||k.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||\"fx\"),this.each((function(){var t,n=Q.get(this),r=n[e+\"queue\"],o=n[e+\"queueHooks\"],i=k.timers,s=r?r.length:0;for(n.finish=!0,k.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=i.length;t--;)i[t].elem===this&&i[t].queue===e&&(i[t].anim.stop(!0),i.splice(t,1));for(t=0;t<s;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish}))}}),k.each([\"toggle\",\"show\",\"hide\"],(function(e,t){var n=k.fn[t];k.fn[t]=function(e,r,o){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(dt(t,!0),e,r,o)}})),k.each({slideDown:dt(\"show\"),slideUp:dt(\"hide\"),slideToggle:dt(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},(function(e,t){k.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}})),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(it=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),it=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){st||(st=!0,ct())},k.fx.stop=function(){st=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(e,t){return e=k.fx&&k.fx.speeds[e]||e,t=t||\"fx\",this.queue(t,(function(t,n){var o=r.setTimeout(t,e);n.stop=function(){r.clearTimeout(o)}}))},function(){var e=b.createElement(\"input\"),t=b.createElement(\"select\").appendChild(b.createElement(\"option\"));e.type=\"checkbox\",g.checkOn=\"\"!==e.value,g.optSelected=t.selected,(e=b.createElement(\"input\")).value=\"t\",e.type=\"radio\",g.radioValue=\"t\"===e.value}();var ft,pt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return U(this,k.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each((function(){k.removeAttr(this,e)}))}}),k.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===e.getAttribute?k.prop(e,t,n):(1===i&&k.isXMLDoc(e)||(o=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ft:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):o&&\"set\"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):o&&\"get\"in o&&null!==(r=o.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!g.radioValue&&\"radio\"===t&&E(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(Y);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),ft={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\\w+/g),(function(e,t){var n=pt[t]||k.find.attr;pt[t]=function(e,t,r){var o,i,s=t.toLowerCase();return r||(i=pt[s],pt[s]=o,o=null!=n(e,t,r)?s:null,pt[s]=i),o}}));var gt=/^(?:input|select|textarea|button)$/i,vt=/^(?:a|area)$/i;function yt(e){return(e.match(Y)||[]).join(\" \")}function bt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function _t(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(Y)||[]}k.fn.extend({prop:function(e,t){return U(this,k.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[k.propFix[e]||e]}))}}),k.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&k.isXMLDoc(e)||(t=k.propFix[t]||t,o=k.propHooks[t]),void 0!==n?o&&\"set\"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&\"get\"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,\"tabindex\");return t?parseInt(t,10):gt.test(e.nodeName)||vt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),g.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],(function(){k.propFix[this.toLowerCase()]=this})),k.fn.extend({addClass:function(e){var t,n,r,o,i,s;return v(e)?this.each((function(t){k(this).addClass(e.call(this,t,bt(this)))})):(t=_t(e)).length?this.each((function(){if(r=bt(this),n=1===this.nodeType&&\" \"+yt(r)+\" \"){for(i=0;i<t.length;i++)o=t[i],n.indexOf(\" \"+o+\" \")<0&&(n+=o+\" \");s=yt(n),r!==s&&this.setAttribute(\"class\",s)}})):this},removeClass:function(e){var t,n,r,o,i,s;return v(e)?this.each((function(t){k(this).removeClass(e.call(this,t,bt(this)))})):arguments.length?(t=_t(e)).length?this.each((function(){if(r=bt(this),n=1===this.nodeType&&\" \"+yt(r)+\" \"){for(i=0;i<t.length;i++)for(o=t[i];n.indexOf(\" \"+o+\" \")>-1;)n=n.replace(\" \"+o+\" \",\" \");s=yt(n),r!==s&&this.setAttribute(\"class\",s)}})):this:this.attr(\"class\",\"\")},toggleClass:function(e,t){var n,r,o,i,s=typeof e,a=\"string\"===s||Array.isArray(e);return v(e)?this.each((function(n){k(this).toggleClass(e.call(this,n,bt(this),t),t)})):\"boolean\"==typeof t&&a?t?this.addClass(e):this.removeClass(e):(n=_t(e),this.each((function(){if(a)for(i=k(this),o=0;o<n.length;o++)r=n[o],i.hasClass(r)?i.removeClass(r):i.addClass(r);else void 0!==e&&\"boolean\"!==s||((r=bt(this))&&Q.set(this,\"__className__\",r),this.setAttribute&&this.setAttribute(\"class\",r||!1===e?\"\":Q.get(this,\"__className__\")||\"\"))})))},hasClass:function(e){var t,n,r=0;for(t=\" \"+e+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+yt(bt(n))+\" \").indexOf(t)>-1)return!0;return!1}});var wt=/\\r/g;k.fn.extend({val:function(e){var t,n,r,o=this[0];return arguments.length?(r=v(e),this.each((function(n){var o;1===this.nodeType&&(null==(o=r?e.call(this,n,k(this).val()):e)?o=\"\":\"number\"==typeof o?o+=\"\":Array.isArray(o)&&(o=k.map(o,(function(e){return null==e?\"\":e+\"\"}))),(t=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,o,\"value\")||(this.value=o))}))):o?(t=k.valHooks[o.type]||k.valHooks[o.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(n=t.get(o,\"value\"))?n:\"string\"==typeof(n=o.value)?n.replace(wt,\"\"):null==n?\"\":n:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,\"value\");return null!=t?t:yt(k.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,s=\"select-one\"===e.type,a=s?null:[],l=s?i+1:o.length;for(r=i<0?l:s?i:0;r<l;r++)if(((n=o[r]).selected||r===i)&&!n.disabled&&(!n.parentNode.disabled||!E(n.parentNode,\"optgroup\"))){if(t=k(n).val(),s)return t;a.push(t)}return a},set:function(e,t){for(var n,r,o=e.options,i=k.makeArray(t),s=o.length;s--;)((r=o[s]).selected=k.inArray(k.valHooks.option.get(r),i)>-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),k.each([\"radio\",\"checkbox\"],(function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=k.inArray(k(e).val(),t)>-1}},g.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})})),g.focusin=\"onfocusin\"in r;var xt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,n,o){var i,s,a,l,c,u,d,h,f=[n||b],p=m.call(e,\"type\")?e.type:e,g=m.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(s=h=a=n=n||b,3!==n.nodeType&&8!==n.nodeType&&!xt.test(p+k.event.triggered)&&(p.indexOf(\".\")>-1&&(g=p.split(\".\"),p=g.shift(),g.sort()),c=p.indexOf(\":\")<0&&\"on\"+p,(e=e[k.expando]?e:new k.Event(p,\"object\"==typeof e&&e)).isTrigger=o?2:3,e.namespace=g.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+g.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),d=k.event.special[p]||{},o||!d.trigger||!1!==d.trigger.apply(n,t))){if(!o&&!d.noBubble&&!y(n)){for(l=d.delegateType||p,xt.test(l+p)||(s=s.parentNode);s;s=s.parentNode)f.push(s),a=s;a===(n.ownerDocument||b)&&f.push(a.defaultView||a.parentWindow||r)}for(i=0;(s=f[i++])&&!e.isPropagationStopped();)h=s,e.type=i>1?l:d.bindType||p,(u=(Q.get(s,\"events\")||Object.create(null))[e.type]&&Q.get(s,\"handle\"))&&u.apply(s,t),(u=c&&s[c])&&u.apply&&X(s)&&(e.result=u.apply(s,t),!1===e.result&&e.preventDefault());return e.type=p,o||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(f.pop(),t)||!X(n)||c&&v(n[p])&&!y(n)&&((a=n[c])&&(n[c]=null),k.event.triggered=p,e.isPropagationStopped()&&h.addEventListener(p,Ct),n[p](),e.isPropagationStopped()&&h.removeEventListener(p,Ct),k.event.triggered=void 0,a&&(n[c]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each((function(){k.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),g.focusin||k.each({focus:\"focusin\",blur:\"focusout\"},(function(e,t){var n=function(e){k.event.simulate(t,e.target,k.event.fix(e))};k.event.special[t]={setup:function(){var r=this.ownerDocument||this.document||this,o=Q.access(r,t);o||r.addEventListener(e,n,!0),Q.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,o=Q.access(r,t)-1;o?Q.access(r,t,o):(r.removeEventListener(e,n,!0),Q.remove(r,t))}}}));var kt=r.location,Dt={guid:Date.now()},St=/\\?/;k.parseXML=function(e){var t,n;if(!e||\"string\"!=typeof e)return null;try{t=(new r.DOMParser).parseFromString(e,\"text/xml\")}catch(e){}return n=t&&t.getElementsByTagName(\"parsererror\")[0],t&&!n||k.error(\"Invalid XML: \"+(n?k.map(n.childNodes,(function(e){return e.textContent})).join(\"\\n\"):e)),t};var At=/\\[\\]$/,Mt=/\\r?\\n/g,Lt=/^(?:submit|button|image|reset|file)$/i,Et=/^(?:input|select|textarea|keygen)/i;function Tt(e,t,n,r){var o;if(Array.isArray(t))k.each(t,(function(t,o){n||At.test(e)?r(e,o):Tt(e+\"[\"+(\"object\"==typeof o&&null!=o?t:\"\")+\"]\",o,n,r)}));else if(n||\"object\"!==x(t))r(e,t);else for(o in t)Tt(e+\"[\"+o+\"]\",t[o],n,r)}k.param=function(e,t){var n,r=[],o=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==e)return\"\";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,(function(){o(this.name,this.value)}));else for(n in e)Tt(n,e[n],t,o);return r.join(\"&\")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=k.prop(this,\"elements\");return e?k.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!k(this).is(\":disabled\")&&Et.test(this.nodeName)&&!Lt.test(e)&&(this.checked||!ge.test(e))})).map((function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,(function(e){return{name:t.name,value:e.replace(Mt,\"\\r\\n\")}})):{name:t.name,value:n.replace(Mt,\"\\r\\n\")}})).get()}});var Ft=/%20/g,Ot=/#.*$/,Bt=/([?&])_=[^&]*/,Rt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,$t=/^(?:GET|HEAD)$/,Nt=/^\\/\\//,Yt={},Pt={},It=\"*/\".concat(\"*\"),Ht=b.createElement(\"a\");function jt(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,o=0,i=t.toLowerCase().match(Y)||[];if(v(n))for(;r=i[o++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Wt(e,t,n,r){var o={},i=e===Pt;function s(a){var l;return o[a]=!0,k.each(e[a]||[],(function(e,a){var c=a(t,n,r);return\"string\"!=typeof c||i||o[c]?i?!(l=c):void 0:(t.dataTypes.unshift(c),s(c),!1)})),l}return s(t.dataTypes[0])||!o[\"*\"]&&s(\"*\")}function zt(e,t){var n,r,o=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ht.href=kt.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:kt.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(kt.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":It,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:jt(Yt),ajaxTransport:jt(Pt),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var n,o,i,s,a,l,c,u,d,h,m=k.ajaxSetup({},t),f=m.context||m,p=m.context&&(f.nodeType||f.jquery)?k(f):k.event,g=k.Deferred(),v=k.Callbacks(\"once memory\"),y=m.statusCode||{},_={},w={},x=\"canceled\",C={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s)for(s={};t=Rt.exec(i);)s[t[1].toLowerCase()+\" \"]=(s[t[1].toLowerCase()+\" \"]||[]).concat(t[2]);t=s[e.toLowerCase()+\" \"]}return null==t?null:t.join(\", \")},getAllResponseHeaders:function(){return c?i:null},setRequestHeader:function(e,t){return null==c&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,_[e]=t),this},overrideMimeType:function(e){return null==c&&(m.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)C.always(e[C.status]);else for(t in e)y[t]=[y[t],e[t]];return this},abort:function(e){var t=e||x;return n&&n.abort(t),D(0,t),this}};if(g.promise(C),m.url=((e||m.url||kt.href)+\"\").replace(Nt,kt.protocol+\"//\"),m.type=t.method||t.type||m.method||m.type,m.dataTypes=(m.dataType||\"*\").toLowerCase().match(Y)||[\"\"],null==m.crossDomain){l=b.createElement(\"a\");try{l.href=m.url,l.href=l.href,m.crossDomain=Ht.protocol+\"//\"+Ht.host!=l.protocol+\"//\"+l.host}catch(e){m.crossDomain=!0}}if(m.data&&m.processData&&\"string\"!=typeof m.data&&(m.data=k.param(m.data,m.traditional)),Wt(Yt,m,t,C),c)return C;for(d in(u=k.event&&m.global)&&0==k.active++&&k.event.trigger(\"ajaxStart\"),m.type=m.type.toUpperCase(),m.hasContent=!$t.test(m.type),o=m.url.replace(Ot,\"\"),m.hasContent?m.data&&m.processData&&0===(m.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(m.data=m.data.replace(Ft,\"+\")):(h=m.url.slice(o.length),m.data&&(m.processData||\"string\"==typeof m.data)&&(o+=(St.test(o)?\"&\":\"?\")+m.data,delete m.data),!1===m.cache&&(o=o.replace(Bt,\"$1\"),h=(St.test(o)?\"&\":\"?\")+\"_=\"+Dt.guid+++h),m.url=o+h),m.ifModified&&(k.lastModified[o]&&C.setRequestHeader(\"If-Modified-Since\",k.lastModified[o]),k.etag[o]&&C.setRequestHeader(\"If-None-Match\",k.etag[o])),(m.data&&m.hasContent&&!1!==m.contentType||t.contentType)&&C.setRequestHeader(\"Content-Type\",m.contentType),C.setRequestHeader(\"Accept\",m.dataTypes[0]&&m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+(\"*\"!==m.dataTypes[0]?\", \"+It+\"; q=0.01\":\"\"):m.accepts[\"*\"]),m.headers)C.setRequestHeader(d,m.headers[d]);if(m.beforeSend&&(!1===m.beforeSend.call(f,C,m)||c))return C.abort();if(x=\"abort\",v.add(m.complete),C.done(m.success),C.fail(m.error),n=Wt(Pt,m,t,C)){if(C.readyState=1,u&&p.trigger(\"ajaxSend\",[C,m]),c)return C;m.async&&m.timeout>0&&(a=r.setTimeout((function(){C.abort(\"timeout\")}),m.timeout));try{c=!1,n.send(_,D)}catch(e){if(c)throw e;D(-1,e)}}else D(-1,\"No Transport\");function D(e,t,s,l){var d,h,b,_,w,x=t;c||(c=!0,a&&r.clearTimeout(a),n=void 0,i=l||\"\",C.readyState=e>0?4:0,d=e>=200&&e<300||304===e,s&&(_=function(e,t,n){for(var r,o,i,s,a=e.contents,l=e.dataTypes;\"*\"===l[0];)l.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(o in a)if(a[o]&&a[o].test(r)){l.unshift(o);break}if(l[0]in n)i=l[0];else{for(o in n){if(!l[0]||e.converters[o+\" \"+l[0]]){i=o;break}s||(s=o)}i=i||s}if(i)return i!==l[0]&&l.unshift(i),n[i]}(m,C,s)),!d&&k.inArray(\"script\",m.dataTypes)>-1&&k.inArray(\"json\",m.dataTypes)<0&&(m.converters[\"text script\"]=function(){}),_=function(e,t,n,r){var o,i,s,a,l,c={},u=e.dataTypes.slice();if(u[1])for(s in e.converters)c[s.toLowerCase()]=e.converters[s];for(i=u.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=i,i=u.shift())if(\"*\"===i)i=l;else if(\"*\"!==l&&l!==i){if(!(s=c[l+\" \"+i]||c[\"* \"+i]))for(o in c)if((a=o.split(\" \"))[1]===i&&(s=c[l+\" \"+a[0]]||c[\"* \"+a[0]])){!0===s?s=c[o]:!0!==c[o]&&(i=a[0],u.unshift(a[1]));break}if(!0!==s)if(s&&e.throws)t=s(t);else try{t=s(t)}catch(e){return{state:\"parsererror\",error:s?e:\"No conversion from \"+l+\" to \"+i}}}return{state:\"success\",data:t}}(m,_,C,d),d?(m.ifModified&&((w=C.getResponseHeader(\"Last-Modified\"))&&(k.lastModified[o]=w),(w=C.getResponseHeader(\"etag\"))&&(k.etag[o]=w)),204===e||\"HEAD\"===m.type?x=\"nocontent\":304===e?x=\"notmodified\":(x=_.state,h=_.data,d=!(b=_.error))):(b=x,!e&&x||(x=\"error\",e<0&&(e=0))),C.status=e,C.statusText=(t||x)+\"\",d?g.resolveWith(f,[h,x,C]):g.rejectWith(f,[C,x,b]),C.statusCode(y),y=void 0,u&&p.trigger(d?\"ajaxSuccess\":\"ajaxError\",[C,m,d?h:b]),v.fireWith(f,[C,x]),u&&(p.trigger(\"ajaxComplete\",[C,m]),--k.active||k.event.trigger(\"ajaxStop\")))}return C},getJSON:function(e,t,n){return k.get(e,t,n,\"json\")},getScript:function(e,t){return k.get(e,void 0,t,\"script\")}}),k.each([\"get\",\"post\"],(function(e,t){k[t]=function(e,n,r,o){return v(n)&&(o=o||r,r=n,n=void 0),k.ajax(k.extend({url:e,type:t,dataType:o,data:n,success:r},k.isPlainObject(e)&&e))}})),k.ajaxPrefilter((function(e){var t;for(t in e.headers)\"content-type\"===t.toLowerCase()&&(e.contentType=e.headers[t]||\"\")})),k._evalUrl=function(e,t,n){return k.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){k.globalEval(e,t,n)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return v(e)?this.each((function(t){k(this).wrapInner(e.call(this,t))})):this.each((function(){var t=k(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=v(e);return this.each((function(n){k(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not(\"body\").each((function(){k(this).replaceWith(this.childNodes)})),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new r.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Vt=k.ajaxSettings.xhr();g.cors=!!Vt&&\"withCredentials\"in Vt,g.ajax=Vt=!!Vt,k.ajaxTransport((function(e){var t,n;if(g.cors||Vt&&!e.crossDomain)return{send:function(o,i){var s,a=e.xhr();if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(s in e.xhrFields)a[s]=e.xhrFields[s];for(s in e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||o[\"X-Requested-With\"]||(o[\"X-Requested-With\"]=\"XMLHttpRequest\"),o)a.setRequestHeader(s,o[s]);t=function(e){return function(){t&&(t=n=a.onload=a.onerror=a.onabort=a.ontimeout=a.onreadystatechange=null,\"abort\"===e?a.abort():\"error\"===e?\"number\"!=typeof a.status?i(0,\"error\"):i(a.status,a.statusText):i(Ut[a.status]||a.status,a.statusText,\"text\"!==(a.responseType||\"text\")||\"string\"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=t(),n=a.onerror=a.ontimeout=t(\"error\"),void 0!==a.onabort?a.onabort=n:a.onreadystatechange=function(){4===a.readyState&&r.setTimeout((function(){t&&n()}))},t=t(\"abort\");try{a.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}})),k.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),k.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter(\"script\",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")})),k.ajaxTransport(\"script\",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(r,o){t=k(\"<script>\").attr(e.scriptAttrs||{}).prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&o(\"error\"===e.type?404:200,e.type)}),b.head.appendChild(t[0])},abort:function(){n&&n()}}}));var qt,Gt=[],Kt=/(=)\\?(?=&|$)|\\?\\?/;k.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Gt.pop()||k.expando+\"_\"+Dt.guid++;return this[e]=!0,e}}),k.ajaxPrefilter(\"json jsonp\",(function(e,t,n){var o,i,s,a=!1!==e.jsonp&&(Kt.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Kt.test(e.data)&&\"data\");if(a||\"jsonp\"===e.dataTypes[0])return o=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Kt,\"$1\"+o):!1!==e.jsonp&&(e.url+=(St.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+o),e.converters[\"script json\"]=function(){return s||k.error(o+\" was not called\"),s[0]},e.dataTypes[0]=\"json\",i=r[o],r[o]=function(){s=arguments},n.always((function(){void 0===i?k(r).removeProp(o):r[o]=i,e[o]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(o)),s&&v(i)&&i(s[0]),s=i=void 0})),\"script\"})),g.createHTMLDocument=((qt=b.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===qt.childNodes.length),k.parseHTML=function(e,t,n){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(n=t,t=!1),t||(g.createHTMLDocument?((r=(t=b.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=b.location.href,t.head.appendChild(r)):t=b),i=!n&&[],(o=T.exec(e))?[t.createElement(o[1])]:(o=Ce([e],t,i),i&&i.length&&k(i).remove(),k.merge([],o.childNodes)));var r,o,i},k.fn.load=function(e,t,n){var r,o,i,s=this,a=e.indexOf(\" \");return a>-1&&(r=yt(e.slice(a)),e=e.slice(0,a)),v(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(o=\"POST\"),s.length>0&&k.ajax({url:e,type:o||\"GET\",dataType:\"html\",data:t}).done((function(e){i=arguments,s.html(r?k(\"<div>\").append(k.parseHTML(e)).find(r):e)})).always(n&&function(e,t){s.each((function(){n.apply(this,i||[e.responseText,t,e])}))}),this},k.expr.pseudos.animated=function(e){return k.grep(k.timers,(function(t){return e===t.elem})).length},k.offset={setOffset:function(e,t,n){var r,o,i,s,a,l,c=k.css(e,\"position\"),u=k(e),d={};\"static\"===c&&(e.style.position=\"relative\"),a=u.offset(),i=k.css(e,\"top\"),l=k.css(e,\"left\"),(\"absolute\"===c||\"fixed\"===c)&&(i+l).indexOf(\"auto\")>-1?(s=(r=u.position()).top,o=r.left):(s=parseFloat(i)||0,o=parseFloat(l)||0),v(t)&&(t=t.call(e,n,k.extend({},a))),null!=t.top&&(d.top=t.top-a.top+s),null!=t.left&&(d.left=t.left-a.left+o),\"using\"in t?t.using.call(e,d):u.css(d)}},k.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){k.offset.setOffset(this,e,t)}));var t,n,r=this[0];return r?r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],o={top:0,left:0};if(\"fixed\"===k.css(r,\"position\"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&\"static\"===k.css(e,\"position\");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((o=k(e).offset()).top+=k.css(e,\"borderTopWidth\",!0),o.left+=k.css(e,\"borderLeftWidth\",!0))}return{top:t.top-o.top-k.css(r,\"marginTop\",!0),left:t.left-o.left-k.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent;e&&\"static\"===k.css(e,\"position\");)e=e.offsetParent;return e||se}))}}),k.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},(function(e,t){var n=\"pageYOffset\"===t;k.fn[e]=function(r){return U(this,(function(e,r,o){var i;if(y(e)?i=e:9===e.nodeType&&(i=e.defaultView),void 0===o)return i?i[t]:e[r];i?i.scrollTo(n?i.pageXOffset:o,n?o:i.pageYOffset):e[r]=o}),e,r,arguments.length)}})),k.each([\"top\",\"left\"],(function(e,t){k.cssHooks[t]=qe(g.pixelPosition,(function(e,n){if(n)return n=Ve(e,t),Ie.test(n)?k(e).position()[t]+\"px\":n}))})),k.each({Height:\"height\",Width:\"width\"},(function(e,t){k.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},(function(n,r){k.fn[r]=function(o,i){var s=arguments.length&&(n||\"boolean\"!=typeof o),a=n||(!0===o||!0===i?\"margin\":\"border\");return U(this,(function(t,n,o){var i;return y(t)?0===r.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body[\"scroll\"+e],i[\"scroll\"+e],t.body[\"offset\"+e],i[\"offset\"+e],i[\"client\"+e])):void 0===o?k.css(t,n,a):k.style(t,n,o,a)}),t,s?o:void 0,s)}}))})),k.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],(function(e,t){k.fn[t]=function(e){return this.on(t,e)}})),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),(function(e,t){k.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}));var Xt=/^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;k.proxy=function(e,t){var n,r,o;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=a.call(arguments,2),o=function(){return e.apply(t||this,r.concat(a.call(arguments)))},o.guid=e.guid=e.guid||k.guid++,o},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=E,k.isFunction=v,k.isWindow=y,k.camelCase=K,k.type=x,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},k.trim=function(e){return null==e?\"\":(e+\"\").replace(Xt,\"$1\")},void 0===(n=function(){return k}.apply(t,[]))||(e.exports=n);var Jt=r.jQuery,Qt=r.$;return k.noConflict=function(e){return r.$===k&&(r.$=Qt),e&&r.jQuery===k&&(r.jQuery=Jt),k},void 0===o&&(r.jQuery=r.$=k),k}))},1102:()=>{},2786:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"af\",{months:\"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag\".split(\"_\"),weekdaysShort:\"Son_Maa_Din_Woe_Don_Vry_Sat\".split(\"_\"),weekdaysMin:\"So_Ma_Di_Wo_Do_Vr_Sa\".split(\"_\"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,t,n){return e<12?n?\"vm\":\"VM\":n?\"nm\":\"NM\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Vandag om] LT\",nextDay:\"[Môre om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[Gister om] LT\",lastWeek:\"[Laas] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"oor %s\",past:\"%s gelede\",s:\"'n paar sekondes\",ss:\"%d sekondes\",m:\"'n minuut\",mm:\"%d minute\",h:\"'n uur\",hh:\"%d ure\",d:\"'n dag\",dd:\"%d dae\",M:\"'n maand\",MM:\"%d maande\",y:\"'n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(n(381))},4130:function(e,t,n){!function(e){\"use strict\";var t=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},n={s:[\"أقل من ثانية\",\"ثانية واحدة\",[\"ثانيتان\",\"ثانيتين\"],\"%d ثوان\",\"%d ثانية\",\"%d ثانية\"],m:[\"أقل من دقيقة\",\"دقيقة واحدة\",[\"دقيقتان\",\"دقيقتين\"],\"%d دقائق\",\"%d دقيقة\",\"%d دقيقة\"],h:[\"أقل من ساعة\",\"ساعة واحدة\",[\"ساعتان\",\"ساعتين\"],\"%d ساعات\",\"%d ساعة\",\"%d ساعة\"],d:[\"أقل من يوم\",\"يوم واحد\",[\"يومان\",\"يومين\"],\"%d أيام\",\"%d يومًا\",\"%d يوم\"],M:[\"أقل من شهر\",\"شهر واحد\",[\"شهران\",\"شهرين\"],\"%d أشهر\",\"%d شهرا\",\"%d شهر\"],y:[\"أقل من عام\",\"عام واحد\",[\"عامان\",\"عامين\"],\"%d أعوام\",\"%d عامًا\",\"%d عام\"]},r=function(e){return function(r,o,i,s){var a=t(r),l=n[e][t(r)];return 2===a&&(l=l[o?0:1]),l.replace(/%d/i,r)}},o=[\"جانفي\",\"فيفري\",\"مارس\",\"أفريل\",\"ماي\",\"جوان\",\"جويلية\",\"أوت\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"];e.defineLocale(\"ar-dz\",{months:o,monthsShort:o,weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/‏M/‏YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/ص|م/,isPM:function(e){return\"م\"===e},meridiem:function(e,t,n){return e<12?\"ص\":\"م\"},calendar:{sameDay:\"[اليوم عند الساعة] LT\",nextDay:\"[غدًا عند الساعة] LT\",nextWeek:\"dddd [عند الساعة] LT\",lastDay:\"[أمس عند الساعة] LT\",lastWeek:\"dddd [عند الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"بعد %s\",past:\"منذ %s\",s:r(\"s\"),ss:r(\"s\"),m:r(\"m\"),mm:r(\"m\"),h:r(\"h\"),hh:r(\"h\"),d:r(\"d\"),dd:r(\"d\"),M:r(\"M\"),MM:r(\"M\"),y:r(\"y\"),yy:r(\"y\")},postformat:function(e){return e.replace(/,/g,\"،\")},week:{dow:0,doy:4}})}(n(381))},6135:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"ar-kw\",{months:\"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر\".split(\"_\"),monthsShort:\"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر\".split(\"_\"),weekdays:\"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",ss:\"%d ثانية\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},week:{dow:0,doy:12}})}(n(381))},6440:function(e,t,n){!function(e){\"use strict\";var t={1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",0:\"0\"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},r={s:[\"أقل من ثانية\",\"ثانية واحدة\",[\"ثانيتان\",\"ثانيتين\"],\"%d ثوان\",\"%d ثانية\",\"%d ثانية\"],m:[\"أقل من دقيقة\",\"دقيقة واحدة\",[\"دقيقتان\",\"دقيقتين\"],\"%d دقائق\",\"%d دقيقة\",\"%d دقيقة\"],h:[\"أقل من ساعة\",\"ساعة واحدة\",[\"ساعتان\",\"ساعتين\"],\"%d ساعات\",\"%d ساعة\",\"%d ساعة\"],d:[\"أقل من يوم\",\"يوم واحد\",[\"يومان\",\"يومين\"],\"%d أيام\",\"%d يومًا\",\"%d يوم\"],M:[\"أقل من شهر\",\"شهر واحد\",[\"شهران\",\"شهرين\"],\"%d أشهر\",\"%d شهرا\",\"%d شهر\"],y:[\"أقل من عام\",\"عام واحد\",[\"عامان\",\"عامين\"],\"%d أعوام\",\"%d عامًا\",\"%d عام\"]},o=function(e){return function(t,o,i,s){var a=n(t),l=r[e][n(t)];return 2===a&&(l=l[o?0:1]),l.replace(/%d/i,t)}},i=[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"];e.defineLocale(\"ar-ly\",{months:i,monthsShort:i,weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/‏M/‏YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/ص|م/,isPM:function(e){return\"م\"===e},meridiem:function(e,t,n){return e<12?\"ص\":\"م\"},calendar:{sameDay:\"[اليوم عند الساعة] LT\",nextDay:\"[غدًا عند الساعة] LT\",nextWeek:\"dddd [عند الساعة] LT\",lastDay:\"[أمس عند الساعة] LT\",lastWeek:\"dddd [عند الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"بعد %s\",past:\"منذ %s\",s:o(\"s\"),ss:o(\"s\"),m:o(\"m\"),mm:o(\"m\"),h:o(\"h\"),hh:o(\"h\"),d:o(\"d\"),dd:o(\"d\"),M:o(\"M\"),MM:o(\"M\"),y:o(\"y\"),yy:o(\"y\")},preparse:function(e){return e.replace(/،/g,\",\")},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]})).replace(/,/g,\"،\")},week:{dow:6,doy:12}})}(n(381))},7702:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"ar-ma\",{months:\"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر\".split(\"_\"),monthsShort:\"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر\".split(\"_\"),weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",ss:\"%d ثانية\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},week:{dow:1,doy:4}})}(n(381))},6040:function(e,t,n){!function(e){\"use strict\";var t={1:\"١\",2:\"٢\",3:\"٣\",4:\"٤\",5:\"٥\",6:\"٦\",7:\"٧\",8:\"٨\",9:\"٩\",0:\"٠\"},n={\"١\":\"1\",\"٢\":\"2\",\"٣\":\"3\",\"٤\":\"4\",\"٥\":\"5\",\"٦\":\"6\",\"٧\":\"7\",\"٨\":\"8\",\"٩\":\"9\",\"٠\":\"0\"};e.defineLocale(\"ar-sa\",{months:\"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),monthsShort:\"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/ص|م/,isPM:function(e){return\"م\"===e},meridiem:function(e,t,n){return e<12?\"ص\":\"م\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",ss:\"%d ثانية\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).replace(/،/g,\",\")},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]})).replace(/,/g,\"،\")},week:{dow:0,doy:6}})}(n(381))},7100:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"ar-tn\",{months:\"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),monthsShort:\"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",ss:\"%d ثانية\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},week:{dow:1,doy:4}})}(n(381))},867:function(e,t,n){!function(e){\"use strict\";var t={1:\"١\",2:\"٢\",3:\"٣\",4:\"٤\",5:\"٥\",6:\"٦\",7:\"٧\",8:\"٨\",9:\"٩\",0:\"٠\"},n={\"١\":\"1\",\"٢\":\"2\",\"٣\":\"3\",\"٤\":\"4\",\"٥\":\"5\",\"٦\":\"6\",\"٧\":\"7\",\"٨\":\"8\",\"٩\":\"9\",\"٠\":\"0\"},r=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},o={s:[\"أقل من ثانية\",\"ثانية واحدة\",[\"ثانيتان\",\"ثانيتين\"],\"%d ثوان\",\"%d ثانية\",\"%d ثانية\"],m:[\"أقل من دقيقة\",\"دقيقة واحدة\",[\"دقيقتان\",\"دقيقتين\"],\"%d دقائق\",\"%d دقيقة\",\"%d دقيقة\"],h:[\"أقل من ساعة\",\"ساعة واحدة\",[\"ساعتان\",\"ساعتين\"],\"%d ساعات\",\"%d ساعة\",\"%d ساعة\"],d:[\"أقل من يوم\",\"يوم واحد\",[\"يومان\",\"يومين\"],\"%d أيام\",\"%d يومًا\",\"%d يوم\"],M:[\"أقل من شهر\",\"شهر واحد\",[\"شهران\",\"شهرين\"],\"%d أشهر\",\"%d شهرا\",\"%d شهر\"],y:[\"أقل من عام\",\"عام واحد\",[\"عامان\",\"عامين\"],\"%d أعوام\",\"%d عامًا\",\"%d عام\"]},i=function(e){return function(t,n,i,s){var a=r(t),l=o[e][r(t)];return 2===a&&(l=l[n?0:1]),l.replace(/%d/i,t)}},s=[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"];e.defineLocale(\"ar\",{months:s,monthsShort:s,weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/‏M/‏YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/ص|م/,isPM:function(e){return\"م\"===e},meridiem:function(e,t,n){return e<12?\"ص\":\"م\"},calendar:{sameDay:\"[اليوم عند الساعة] LT\",nextDay:\"[غدًا عند الساعة] LT\",nextWeek:\"dddd [عند الساعة] LT\",lastDay:\"[أمس عند الساعة] LT\",lastWeek:\"dddd [عند الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"بعد %s\",past:\"منذ %s\",s:i(\"s\"),ss:i(\"s\"),m:i(\"m\"),mm:i(\"m\"),h:i(\"h\"),hh:i(\"h\"),d:i(\"d\"),dd:i(\"d\"),M:i(\"M\"),MM:i(\"M\"),y:i(\"y\"),yy:i(\"y\")},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).replace(/،/g,\",\")},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]})).replace(/,/g,\"،\")},week:{dow:6,doy:12}})}(n(381))},1083:function(e,t,n){!function(e){\"use strict\";var t={1:\"-inci\",5:\"-inci\",8:\"-inci\",70:\"-inci\",80:\"-inci\",2:\"-nci\",7:\"-nci\",20:\"-nci\",50:\"-nci\",3:\"-üncü\",4:\"-üncü\",100:\"-üncü\",6:\"-ncı\",9:\"-uncu\",10:\"-uncu\",30:\"-uncu\",60:\"-ıncı\",90:\"-ıncı\"};e.defineLocale(\"az\",{months:\"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr\".split(\"_\"),monthsShort:\"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek\".split(\"_\"),weekdays:\"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə\".split(\"_\"),weekdaysShort:\"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən\".split(\"_\"),weekdaysMin:\"Bz_BE_ÇA_Çə_CA_Cü_Şə\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[bugün saat] LT\",nextDay:\"[sabah saat] LT\",nextWeek:\"[gələn həftə] dddd [saat] LT\",lastDay:\"[dünən] LT\",lastWeek:\"[keçən həftə] dddd [saat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s sonra\",past:\"%s əvvəl\",s:\"bir neçə saniyə\",ss:\"%d saniyə\",m:\"bir dəqiqə\",mm:\"%d dəqiqə\",h:\"bir saat\",hh:\"%d saat\",d:\"bir gün\",dd:\"%d gün\",M:\"bir ay\",MM:\"%d ay\",y:\"bir il\",yy:\"%d il\"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(e){return/^(gündüz|axşam)$/.test(e)},meridiem:function(e,t,n){return e<4?\"gecə\":e<12?\"səhər\":e<17?\"gündüz\":\"axşam\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(e){if(0===e)return e+\"-ıncı\";var n=e%10,r=e%100-n,o=e>=100?100:null;return e+(t[n]||t[r]||t[o])},week:{dow:1,doy:7}})}(n(381))},9808:function(e,t,n){!function(e){\"use strict\";function t(e,t){var n=e.split(\"_\");return t%10==1&&t%100!=11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function n(e,n,r){return\"m\"===r?n?\"хвіліна\":\"хвіліну\":\"h\"===r?n?\"гадзіна\":\"гадзіну\":e+\" \"+t({ss:n?\"секунда_секунды_секунд\":\"секунду_секунды_секунд\",mm:n?\"хвіліна_хвіліны_хвілін\":\"хвіліну_хвіліны_хвілін\",hh:n?\"гадзіна_гадзіны_гадзін\":\"гадзіну_гадзіны_гадзін\",dd:\"дзень_дні_дзён\",MM:\"месяц_месяцы_месяцаў\",yy:\"год_гады_гадоў\"}[r],+e)}e.defineLocale(\"be\",{months:{format:\"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня\".split(\"_\"),standalone:\"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань\".split(\"_\")},monthsShort:\"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж\".split(\"_\"),weekdays:{format:\"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу\".split(\"_\"),standalone:\"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота\".split(\"_\"),isFormat:/\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/},weekdaysShort:\"нд_пн_ат_ср_чц_пт_сб\".split(\"_\"),weekdaysMin:\"нд_пн_ат_ср_чц_пт_сб\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY г.\",LLL:\"D MMMM YYYY г., HH:mm\",LLLL:\"dddd, D MMMM YYYY г., HH:mm\"},calendar:{sameDay:\"[Сёння ў] LT\",nextDay:\"[Заўтра ў] LT\",lastDay:\"[Учора ў] LT\",nextWeek:function(){return\"[У] dddd [ў] LT\"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return\"[У мінулую] dddd [ў] LT\";case 1:case 2:case 4:return\"[У мінулы] dddd [ў] LT\"}},sameElse:\"L\"},relativeTime:{future:\"праз %s\",past:\"%s таму\",s:\"некалькі секунд\",m:n,mm:n,h:n,hh:n,d:\"дзень\",dd:n,M:\"месяц\",MM:n,y:\"год\",yy:n},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(e){return/^(дня|вечара)$/.test(e)},meridiem:function(e,t,n){return e<4?\"ночы\":e<12?\"раніцы\":e<17?\"дня\":\"вечара\"},dayOfMonthOrdinalParse:/\\d{1,2}-(і|ы|га)/,ordinal:function(e,t){switch(t){case\"M\":case\"d\":case\"DDD\":case\"w\":case\"W\":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+\"-ы\":e+\"-і\";case\"D\":return e+\"-га\";default:return e}},week:{dow:1,doy:7}})}(n(381))},8338:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"bg\",{months:\"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември\".split(\"_\"),monthsShort:\"яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек\".split(\"_\"),weekdays:\"неделя_понеделник_вторник_сряда_четвъртък_петък_събота\".split(\"_\"),weekdaysShort:\"нед_пон_вто_сря_чет_пет_съб\".split(\"_\"),weekdaysMin:\"нд_пн_вт_ср_чт_пт_сб\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[Днес в] LT\",nextDay:\"[Утре в] LT\",nextWeek:\"dddd [в] LT\",lastDay:\"[Вчера в] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\"[Миналата] dddd [в] LT\";case 1:case 2:case 4:case 5:return\"[Миналия] dddd [в] LT\"}},sameElse:\"L\"},relativeTime:{future:\"след %s\",past:\"преди %s\",s:\"няколко секунди\",ss:\"%d секунди\",m:\"минута\",mm:\"%d минути\",h:\"час\",hh:\"%d часа\",d:\"ден\",dd:\"%d дена\",w:\"седмица\",ww:\"%d седмици\",M:\"месец\",MM:\"%d месеца\",y:\"година\",yy:\"%d години\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+\"-ев\":0===n?e+\"-ен\":n>10&&n<20?e+\"-ти\":1===t?e+\"-ви\":2===t?e+\"-ри\":7===t||8===t?e+\"-ми\":e+\"-ти\"},week:{dow:1,doy:7}})}(n(381))},7438:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"bm\",{months:\"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo\".split(\"_\"),monthsShort:\"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des\".split(\"_\"),weekdays:\"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri\".split(\"_\"),weekdaysShort:\"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib\".split(\"_\"),weekdaysMin:\"Ka_Nt_Ta_Ar_Al_Ju_Si\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"MMMM [tile] D [san] YYYY\",LLL:\"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm\",LLLL:\"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm\"},calendar:{sameDay:\"[Bi lɛrɛ] LT\",nextDay:\"[Sini lɛrɛ] LT\",nextWeek:\"dddd [don lɛrɛ] LT\",lastDay:\"[Kunu lɛrɛ] LT\",lastWeek:\"dddd [tɛmɛnen lɛrɛ] LT\",sameElse:\"L\"},relativeTime:{future:\"%s kɔnɔ\",past:\"a bɛ %s bɔ\",s:\"sanga dama dama\",ss:\"sekondi %d\",m:\"miniti kelen\",mm:\"miniti %d\",h:\"lɛrɛ kelen\",hh:\"lɛrɛ %d\",d:\"tile kelen\",dd:\"tile %d\",M:\"kalo kelen\",MM:\"kalo %d\",y:\"san kelen\",yy:\"san %d\"},week:{dow:1,doy:4}})}(n(381))},6225:function(e,t,n){!function(e){\"use strict\";var t={1:\"১\",2:\"২\",3:\"৩\",4:\"৪\",5:\"৫\",6:\"৬\",7:\"৭\",8:\"৮\",9:\"৯\",0:\"০\"},n={\"১\":\"1\",\"২\":\"2\",\"৩\":\"3\",\"৪\":\"4\",\"৫\":\"5\",\"৬\":\"6\",\"৭\":\"7\",\"৮\":\"8\",\"৯\":\"9\",\"০\":\"0\"};e.defineLocale(\"bn-bd\",{months:\"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর\".split(\"_\"),monthsShort:\"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে\".split(\"_\"),weekdays:\"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার\".split(\"_\"),weekdaysShort:\"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি\".split(\"_\"),weekdaysMin:\"রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি\".split(\"_\"),longDateFormat:{LT:\"A h:mm সময়\",LTS:\"A h:mm:ss সময়\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm সময়\",LLLL:\"dddd, D MMMM YYYY, A h:mm সময়\"},calendar:{sameDay:\"[আজ] LT\",nextDay:\"[আগামীকাল] LT\",nextWeek:\"dddd, LT\",lastDay:\"[গতকাল] LT\",lastWeek:\"[গত] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s পরে\",past:\"%s আগে\",s:\"কয়েক সেকেন্ড\",ss:\"%d সেকেন্ড\",m:\"এক মিনিট\",mm:\"%d মিনিট\",h:\"এক ঘন্টা\",hh:\"%d ঘন্টা\",d:\"এক দিন\",dd:\"%d দিন\",M:\"এক মাস\",MM:\"%d মাস\",y:\"এক বছর\",yy:\"%d বছর\"},preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]}))},meridiemParse:/রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,meridiemHour:function(e,t){return 12===e&&(e=0),\"রাত\"===t?e<4?e:e+12:\"ভোর\"===t||\"সকাল\"===t?e:\"দুপুর\"===t?e>=3?e:e+12:\"বিকাল\"===t||\"সন্ধ্যা\"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?\"রাত\":e<6?\"ভোর\":e<12?\"সকাল\":e<15?\"দুপুর\":e<18?\"বিকাল\":e<20?\"সন্ধ্যা\":\"রাত\"},week:{dow:0,doy:6}})}(n(381))},8905:function(e,t,n){!function(e){\"use strict\";var t={1:\"১\",2:\"২\",3:\"৩\",4:\"৪\",5:\"৫\",6:\"৬\",7:\"৭\",8:\"৮\",9:\"৯\",0:\"০\"},n={\"১\":\"1\",\"২\":\"2\",\"৩\":\"3\",\"৪\":\"4\",\"৫\":\"5\",\"৬\":\"6\",\"৭\":\"7\",\"৮\":\"8\",\"৯\":\"9\",\"০\":\"0\"};e.defineLocale(\"bn\",{months:\"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর\".split(\"_\"),monthsShort:\"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে\".split(\"_\"),weekdays:\"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার\".split(\"_\"),weekdaysShort:\"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি\".split(\"_\"),weekdaysMin:\"রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি\".split(\"_\"),longDateFormat:{LT:\"A h:mm সময়\",LTS:\"A h:mm:ss সময়\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm সময়\",LLLL:\"dddd, D MMMM YYYY, A h:mm সময়\"},calendar:{sameDay:\"[আজ] LT\",nextDay:\"[আগামীকাল] LT\",nextWeek:\"dddd, LT\",lastDay:\"[গতকাল] LT\",lastWeek:\"[গত] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s পরে\",past:\"%s আগে\",s:\"কয়েক সেকেন্ড\",ss:\"%d সেকেন্ড\",m:\"এক মিনিট\",mm:\"%d মিনিট\",h:\"এক ঘন্টা\",hh:\"%d ঘন্টা\",d:\"এক দিন\",dd:\"%d দিন\",M:\"এক মাস\",MM:\"%d মাস\",y:\"এক বছর\",yy:\"%d বছর\"},preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]}))},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(e,t){return 12===e&&(e=0),\"রাত\"===t&&e>=4||\"দুপুর\"===t&&e<5||\"বিকাল\"===t?e+12:e},meridiem:function(e,t,n){return e<4?\"রাত\":e<10?\"সকাল\":e<17?\"দুপুর\":e<20?\"বিকাল\":\"রাত\"},week:{dow:0,doy:6}})}(n(381))},1560:function(e,t,n){!function(e){\"use strict\";var t={1:\"༡\",2:\"༢\",3:\"༣\",4:\"༤\",5:\"༥\",6:\"༦\",7:\"༧\",8:\"༨\",9:\"༩\",0:\"༠\"},n={\"༡\":\"1\",\"༢\":\"2\",\"༣\":\"3\",\"༤\":\"4\",\"༥\":\"5\",\"༦\":\"6\",\"༧\":\"7\",\"༨\":\"8\",\"༩\":\"9\",\"༠\":\"0\"};e.defineLocale(\"bo\",{months:\"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ\".split(\"_\"),monthsShort:\"ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12\".split(\"_\"),monthsShortRegex:/^(ཟླ་\\d{1,2})/,monthsParseExact:!0,weekdays:\"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་\".split(\"_\"),weekdaysShort:\"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་\".split(\"_\"),weekdaysMin:\"ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm\",LLLL:\"dddd, D MMMM YYYY, A h:mm\"},calendar:{sameDay:\"[དི་རིང] LT\",nextDay:\"[སང་ཉིན] LT\",nextWeek:\"[བདུན་ཕྲག་རྗེས་མ], LT\",lastDay:\"[ཁ་སང] LT\",lastWeek:\"[བདུན་ཕྲག་མཐའ་མ] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s ལ་\",past:\"%s སྔན་ལ\",s:\"ལམ་སང\",ss:\"%d སྐར་ཆ།\",m:\"སྐར་མ་གཅིག\",mm:\"%d སྐར་མ\",h:\"ཆུ་ཚོད་གཅིག\",hh:\"%d ཆུ་ཚོད\",d:\"ཉིན་གཅིག\",dd:\"%d ཉིན་\",M:\"ཟླ་བ་གཅིག\",MM:\"%d ཟླ་བ\",y:\"ལོ་གཅིག\",yy:\"%d ལོ\"},preparse:function(e){return e.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]}))},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(e,t){return 12===e&&(e=0),\"མཚན་མོ\"===t&&e>=4||\"ཉིན་གུང\"===t&&e<5||\"དགོང་དག\"===t?e+12:e},meridiem:function(e,t,n){return e<4?\"མཚན་མོ\":e<10?\"ཞོགས་ཀས\":e<17?\"ཉིན་གུང\":e<20?\"དགོང་དག\":\"མཚན་མོ\"},week:{dow:0,doy:6}})}(n(381))},1278:function(e,t,n){!function(e){\"use strict\";function t(e,t,n){return e+\" \"+o({mm:\"munutenn\",MM:\"miz\",dd:\"devezh\"}[n],e)}function n(e){switch(r(e)){case 1:case 3:case 4:case 5:case 9:return e+\" bloaz\";default:return e+\" vloaz\"}}function r(e){return e>9?r(e%10):e}function o(e,t){return 2===t?i(e):e}function i(e){var t={m:\"v\",b:\"v\",d:\"z\"};return void 0===t[e.charAt(0)]?e:t[e.charAt(0)]+e.substring(1)}var s=[/^gen/i,/^c[ʼ\\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],a=/^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,l=/^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,c=/^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,u=[/^sul/i,/^lun/i,/^meurzh/i,/^merc[ʼ\\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],d=[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],h=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];e.defineLocale(\"br\",{months:\"Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu\".split(\"_\"),monthsShort:\"Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker\".split(\"_\"),weekdays:\"Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn\".split(\"_\"),weekdaysShort:\"Sul_Lun_Meu_Mer_Yao_Gwe_Sad\".split(\"_\"),weekdaysMin:\"Su_Lu_Me_Mer_Ya_Gw_Sa\".split(\"_\"),weekdaysParse:h,fullWeekdaysParse:u,shortWeekdaysParse:d,minWeekdaysParse:h,monthsRegex:a,monthsShortRegex:a,monthsStrictRegex:l,monthsShortStrictRegex:c,monthsParse:s,longMonthsParse:s,shortMonthsParse:s,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [a viz] MMMM YYYY\",LLL:\"D [a viz] MMMM YYYY HH:mm\",LLLL:\"dddd, D [a viz] MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Hiziv da] LT\",nextDay:\"[Warcʼhoazh da] LT\",nextWeek:\"dddd [da] LT\",lastDay:\"[Decʼh da] LT\",lastWeek:\"dddd [paset da] LT\",sameElse:\"L\"},relativeTime:{future:\"a-benn %s\",past:\"%s ʼzo\",s:\"un nebeud segondennoù\",ss:\"%d eilenn\",m:\"ur vunutenn\",mm:t,h:\"un eur\",hh:\"%d eur\",d:\"un devezh\",dd:t,M:\"ur miz\",MM:t,y:\"ur bloaz\",yy:n},dayOfMonthOrdinalParse:/\\d{1,2}(añ|vet)/,ordinal:function(e){return e+(1===e?\"añ\":\"vet\")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(e){return\"g.m.\"===e},meridiem:function(e,t,n){return e<12?\"a.m.\":\"g.m.\"}})}(n(381))},622:function(e,t,n){!function(e){\"use strict\";function t(e,t,n){var r=e+\" \";switch(n){case\"ss\":return r+=1===e?\"sekunda\":2===e||3===e||4===e?\"sekunde\":\"sekundi\";case\"m\":return t?\"jedna minuta\":\"jedne minute\";case\"mm\":return r+=1===e?\"minuta\":2===e||3===e||4===e?\"minute\":\"minuta\";case\"h\":return t?\"jedan sat\":\"jednog sata\";case\"hh\":return r+=1===e?\"sat\":2===e||3===e||4===e?\"sata\":\"sati\";case\"dd\":return r+=1===e?\"dan\":\"dana\";case\"MM\":return r+=1===e?\"mjesec\":2===e||3===e||4===e?\"mjeseca\":\"mjeseci\";case\"yy\":return r+=1===e?\"godina\":2===e||3===e||4===e?\"godine\":\"godina\"}}e.defineLocale(\"bs\",{months:\"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._čet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_če_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[jučer u] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:return\"[prošlu] dddd [u] LT\";case 6:return\"[prošle] [subote] [u] LT\";case 1:case 2:case 4:case 5:return\"[prošli] dddd [u] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"par sekundi\",ss:t,m:t,mm:t,h:t,hh:t,d:\"dan\",dd:t,M:\"mjesec\",MM:t,y:\"godinu\",yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(381))},2468:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"ca\",{months:{standalone:\"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre\".split(\"_\"),format:\"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\"_\"),isFormat:/D[oD]?(\\s)+MMMM/},monthsShort:\"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte\".split(\"_\"),weekdaysShort:\"dg._dl._dt._dc._dj._dv._ds.\".split(\"_\"),weekdaysMin:\"dg_dl_dt_dc_dj_dv_ds\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [de] YYYY\",ll:\"D MMM YYYY\",LLL:\"D MMMM [de] YYYY [a les] H:mm\",lll:\"D MMM YYYY, H:mm\",LLLL:\"dddd D MMMM [de] YYYY [a les] H:mm\",llll:\"ddd D MMM YYYY, H:mm\"},calendar:{sameDay:function(){return\"[avui a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},nextDay:function(){return\"[demà a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},nextWeek:function(){return\"dddd [a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},lastDay:function(){return\"[ahir a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [passat a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"d'aquí %s\",past:\"fa %s\",s:\"uns segons\",ss:\"%d segons\",m:\"un minut\",mm:\"%d minuts\",h:\"una hora\",hh:\"%d hores\",d:\"un dia\",dd:\"%d dies\",M:\"un mes\",MM:\"%d mesos\",y:\"un any\",yy:\"%d anys\"},dayOfMonthOrdinalParse:/\\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=1===e?\"r\":2===e?\"n\":3===e?\"r\":4===e?\"t\":\"è\";return\"w\"!==t&&\"W\"!==t||(n=\"a\"),e+n},week:{dow:1,doy:4}})}(n(381))},5822:function(e,t,n){!function(e){\"use strict\";var t={format:\"leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec\".split(\"_\"),standalone:\"ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince\".split(\"_\")},n=\"led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro\".split(\"_\"),r=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],o=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;function i(e){return e>1&&e<5&&1!=~~(e/10)}function s(e,t,n,r){var o=e+\" \";switch(n){case\"s\":return t||r?\"pár sekund\":\"pár sekundami\";case\"ss\":return t||r?o+(i(e)?\"sekundy\":\"sekund\"):o+\"sekundami\";case\"m\":return t?\"minuta\":r?\"minutu\":\"minutou\";case\"mm\":return t||r?o+(i(e)?\"minuty\":\"minut\"):o+\"minutami\";case\"h\":return t?\"hodina\":r?\"hodinu\":\"hodinou\";case\"hh\":return t||r?o+(i(e)?\"hodiny\":\"hodin\"):o+\"hodinami\";case\"d\":return t||r?\"den\":\"dnem\";case\"dd\":return t||r?o+(i(e)?\"dny\":\"dní\"):o+\"dny\";case\"M\":return t||r?\"měsíc\":\"měsícem\";case\"MM\":return t||r?o+(i(e)?\"měsíce\":\"měsíců\"):o+\"měsíci\";case\"y\":return t||r?\"rok\":\"rokem\";case\"yy\":return t||r?o+(i(e)?\"roky\":\"let\"):o+\"lety\"}}e.defineLocale(\"cs\",{months:t,monthsShort:n,monthsRegex:o,monthsShortRegex:o,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota\".split(\"_\"),weekdaysShort:\"ne_po_út_st_čt_pá_so\".split(\"_\"),weekdaysMin:\"ne_po_út_st_čt_pá_so\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\",l:\"D. M. YYYY\"},calendar:{sameDay:\"[dnes v] LT\",nextDay:\"[zítra v] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v neděli v] LT\";case 1:case 2:return\"[v] dddd [v] LT\";case 3:return\"[ve středu v] LT\";case 4:return\"[ve čtvrtek v] LT\";case 5:return\"[v pátek v] LT\";case 6:return\"[v sobotu v] LT\"}},lastDay:\"[včera v] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[minulou neděli v] LT\";case 1:case 2:return\"[minulé] dddd [v] LT\";case 3:return\"[minulou středu v] LT\";case 4:case 5:return\"[minulý] dddd [v] LT\";case 6:return\"[minulou sobotu v] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"před %s\",s,ss:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},877:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"cv\",{months:\"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав\".split(\"_\"),monthsShort:\"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш\".split(\"_\"),weekdays:\"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун\".split(\"_\"),weekdaysShort:\"выр_тун_ытл_юн_кӗҫ_эрн_шӑм\".split(\"_\"),weekdaysMin:\"вр_тн_ыт_юн_кҫ_эр_шм\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]\",LLL:\"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm\",LLLL:\"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm\"},calendar:{sameDay:\"[Паян] LT [сехетре]\",nextDay:\"[Ыран] LT [сехетре]\",lastDay:\"[Ӗнер] LT [сехетре]\",nextWeek:\"[Ҫитес] dddd LT [сехетре]\",lastWeek:\"[Иртнӗ] dddd LT [сехетре]\",sameElse:\"L\"},relativeTime:{future:function(e){return e+(/сехет$/i.exec(e)?\"рен\":/ҫул$/i.exec(e)?\"тан\":\"ран\")},past:\"%s каялла\",s:\"пӗр-ик ҫеккунт\",ss:\"%d ҫеккунт\",m:\"пӗр минут\",mm:\"%d минут\",h:\"пӗр сехет\",hh:\"%d сехет\",d:\"пӗр кун\",dd:\"%d кун\",M:\"пӗр уйӑх\",MM:\"%d уйӑх\",y:\"пӗр ҫул\",yy:\"%d ҫул\"},dayOfMonthOrdinalParse:/\\d{1,2}-мӗш/,ordinal:\"%d-мӗш\",week:{dow:1,doy:7}})}(n(381))},7373:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"cy\",{months:\"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr\".split(\"_\"),monthsShort:\"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag\".split(\"_\"),weekdays:\"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn\".split(\"_\"),weekdaysShort:\"Sul_Llun_Maw_Mer_Iau_Gwe_Sad\".split(\"_\"),weekdaysMin:\"Su_Ll_Ma_Me_Ia_Gw_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Heddiw am] LT\",nextDay:\"[Yfory am] LT\",nextWeek:\"dddd [am] LT\",lastDay:\"[Ddoe am] LT\",lastWeek:\"dddd [diwethaf am] LT\",sameElse:\"L\"},relativeTime:{future:\"mewn %s\",past:\"%s yn ôl\",s:\"ychydig eiliadau\",ss:\"%d eiliad\",m:\"munud\",mm:\"%d munud\",h:\"awr\",hh:\"%d awr\",d:\"diwrnod\",dd:\"%d diwrnod\",M:\"mis\",MM:\"%d mis\",y:\"blwyddyn\",yy:\"%d flynedd\"},dayOfMonthOrdinalParse:/\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var t=\"\";return e>20?t=40===e||50===e||60===e||80===e||100===e?\"fed\":\"ain\":e>0&&(t=[\"\",\"af\",\"il\",\"ydd\",\"ydd\",\"ed\",\"ed\",\"ed\",\"fed\",\"fed\",\"fed\",\"eg\",\"fed\",\"eg\",\"eg\",\"fed\",\"eg\",\"eg\",\"fed\",\"eg\",\"fed\"][e]),e+t},week:{dow:1,doy:4}})}(n(381))},4780:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"da\",{months:\"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag\".split(\"_\"),weekdaysShort:\"søn_man_tir_ons_tor_fre_lør\".split(\"_\"),weekdaysMin:\"sø_ma_ti_on_to_fr_lø\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd [d.] D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[i dag kl.] LT\",nextDay:\"[i morgen kl.] LT\",nextWeek:\"på dddd [kl.] LT\",lastDay:\"[i går kl.] LT\",lastWeek:\"[i] dddd[s kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"få sekunder\",ss:\"%d sekunder\",m:\"et minut\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dage\",M:\"en måned\",MM:\"%d måneder\",y:\"et år\",yy:\"%d år\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},217:function(e,t,n){!function(e){\"use strict\";function t(e,t,n,r){var o={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[e+\" Tage\",e+\" Tagen\"],w:[\"eine Woche\",\"einer Woche\"],M:[\"ein Monat\",\"einem Monat\"],MM:[e+\" Monate\",e+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[e+\" Jahre\",e+\" Jahren\"]};return t?o[n][0]:o[n][1]}e.defineLocale(\"de-at\",{months:\"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:t,mm:\"%d Minuten\",h:t,hh:\"%d Stunden\",d:t,dd:t,w:t,ww:\"%d Wochen\",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},894:function(e,t,n){!function(e){\"use strict\";function t(e,t,n,r){var o={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[e+\" Tage\",e+\" Tagen\"],w:[\"eine Woche\",\"einer Woche\"],M:[\"ein Monat\",\"einem Monat\"],MM:[e+\" Monate\",e+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[e+\" Jahre\",e+\" Jahren\"]};return t?o[n][0]:o[n][1]}e.defineLocale(\"de-ch\",{months:\"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:t,mm:\"%d Minuten\",h:t,hh:\"%d Stunden\",d:t,dd:t,w:t,ww:\"%d Wochen\",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},9740:function(e,t,n){!function(e){\"use strict\";function t(e,t,n,r){var o={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[e+\" Tage\",e+\" Tagen\"],w:[\"eine Woche\",\"einer Woche\"],M:[\"ein Monat\",\"einem Monat\"],MM:[e+\" Monate\",e+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[e+\" Jahre\",e+\" Jahren\"]};return t?o[n][0]:o[n][1]}e.defineLocale(\"de\",{months:\"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:t,mm:\"%d Minuten\",h:t,hh:\"%d Stunden\",d:t,dd:t,w:t,ww:\"%d Wochen\",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},5300:function(e,t,n){!function(e){\"use strict\";var t=[\"ޖެނުއަރީ\",\"ފެބްރުއަރީ\",\"މާރިޗު\",\"އޭޕްރީލު\",\"މޭ\",\"ޖޫން\",\"ޖުލައި\",\"އޯގަސްޓު\",\"ސެޕްޓެމްބަރު\",\"އޮކްޓޯބަރު\",\"ނޮވެމްބަރު\",\"ޑިސެމްބަރު\"],n=[\"އާދިއްތަ\",\"ހޯމަ\",\"އަންގާރަ\",\"ބުދަ\",\"ބުރާސްފަތި\",\"ހުކުރު\",\"ހޮނިހިރު\"];e.defineLocale(\"dv\",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:\"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/M/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/މކ|މފ/,isPM:function(e){return\"މފ\"===e},meridiem:function(e,t,n){return e<12?\"މކ\":\"މފ\"},calendar:{sameDay:\"[މިއަދު] LT\",nextDay:\"[މާދަމާ] LT\",nextWeek:\"dddd LT\",lastDay:\"[އިއްޔެ] LT\",lastWeek:\"[ފާއިތުވި] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"ތެރޭގައި %s\",past:\"ކުރިން %s\",s:\"ސިކުންތުކޮޅެއް\",ss:\"d% ސިކުންތު\",m:\"މިނިޓެއް\",mm:\"މިނިޓު %d\",h:\"ގަޑިއިރެއް\",hh:\"ގަޑިއިރު %d\",d:\"ދުވަހެއް\",dd:\"ދުވަސް %d\",M:\"މަހެއް\",MM:\"މަސް %d\",y:\"އަހަރެއް\",yy:\"އަހަރު %d\"},preparse:function(e){return e.replace(/،/g,\",\")},postformat:function(e){return e.replace(/,/g,\"،\")},week:{dow:7,doy:12}})}(n(381))},837:function(e,t,n){!function(e){\"use strict\";function t(e){return\"undefined\"!=typeof Function&&e instanceof Function||\"[object Function]\"===Object.prototype.toString.call(e)}e.defineLocale(\"el\",{monthsNominativeEl:\"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος\".split(\"_\"),monthsGenitiveEl:\"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου\".split(\"_\"),months:function(e,t){return e?\"string\"==typeof t&&/D/.test(t.substring(0,t.indexOf(\"MMMM\")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:\"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ\".split(\"_\"),weekdays:\"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο\".split(\"_\"),weekdaysShort:\"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ\".split(\"_\"),weekdaysMin:\"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα\".split(\"_\"),meridiem:function(e,t,n){return e>11?n?\"μμ\":\"ΜΜ\":n?\"πμ\":\"ΠΜ\"},isPM:function(e){return\"μ\"===(e+\"\").toLowerCase()[0]},meridiemParse:/[ΠΜ]\\.?Μ?\\.?/i,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendarEl:{sameDay:\"[Σήμερα {}] LT\",nextDay:\"[Αύριο {}] LT\",nextWeek:\"dddd [{}] LT\",lastDay:\"[Χθες {}] LT\",lastWeek:function(){return 6===this.day()?\"[το προηγούμενο] dddd [{}] LT\":\"[την προηγούμενη] dddd [{}] LT\"},sameElse:\"L\"},calendar:function(e,n){var r=this._calendarEl[e],o=n&&n.hours();return t(r)&&(r=r.apply(n)),r.replace(\"{}\",o%12==1?\"στη\":\"στις\")},relativeTime:{future:\"σε %s\",past:\"%s πριν\",s:\"λίγα δευτερόλεπτα\",ss:\"%d δευτερόλεπτα\",m:\"ένα λεπτό\",mm:\"%d λεπτά\",h:\"μία ώρα\",hh:\"%d ώρες\",d:\"μία μέρα\",dd:\"%d μέρες\",M:\"ένας μήνας\",MM:\"%d μήνες\",y:\"ένας χρόνος\",yy:\"%d χρόνια\"},dayOfMonthOrdinalParse:/\\d{1,2}η/,ordinal:\"%dη\",week:{dow:1,doy:4}})}(n(381))},8348:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"en-au\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")},week:{dow:0,doy:4}})}(n(381))},7925:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"en-ca\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"YYYY-MM-DD\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")}})}(n(381))},2243:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"en-gb\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")},week:{dow:1,doy:4}})}(n(381))},6436:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"en-ie\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")},week:{dow:1,doy:4}})}(n(381))},7207:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"en-il\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")}})}(n(381))},4175:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"en-in\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")},week:{dow:0,doy:6}})}(n(381))},6319:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"en-nz\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")},week:{dow:1,doy:4}})}(n(381))},1662:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"en-sg\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")},week:{dow:1,doy:4}})}(n(381))},2915:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"eo\",{months:\"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro\".split(\"_\"),monthsShort:\"jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec\".split(\"_\"),weekdays:\"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato\".split(\"_\"),weekdaysShort:\"dim_lun_mard_merk_ĵaŭ_ven_sab\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_ĵa_ve_sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"[la] D[-an de] MMMM, YYYY\",LLL:\"[la] D[-an de] MMMM, YYYY HH:mm\",LLLL:\"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm\",llll:\"ddd, [la] D[-an de] MMM, YYYY HH:mm\"},meridiemParse:/[ap]\\.t\\.m/i,isPM:function(e){return\"p\"===e.charAt(0).toLowerCase()},meridiem:function(e,t,n){return e>11?n?\"p.t.m.\":\"P.T.M.\":n?\"a.t.m.\":\"A.T.M.\"},calendar:{sameDay:\"[Hodiaŭ je] LT\",nextDay:\"[Morgaŭ je] LT\",nextWeek:\"dddd[n je] LT\",lastDay:\"[Hieraŭ je] LT\",lastWeek:\"[pasintan] dddd[n je] LT\",sameElse:\"L\"},relativeTime:{future:\"post %s\",past:\"antaŭ %s\",s:\"kelkaj sekundoj\",ss:\"%d sekundoj\",m:\"unu minuto\",mm:\"%d minutoj\",h:\"unu horo\",hh:\"%d horoj\",d:\"unu tago\",dd:\"%d tagoj\",M:\"unu monato\",MM:\"%d monatoj\",y:\"unu jaro\",yy:\"%d jaroj\"},dayOfMonthOrdinalParse:/\\d{1,2}a/,ordinal:\"%da\",week:{dow:1,doy:7}})}(n(381))},5251:function(e,t,n){!function(e){\"use strict\";var t=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),n=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],o=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;e.defineLocale(\"es-do\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:o,monthsShortRegex:o,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"domingo_lunes_martes_miércoles_jueves_viernes_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mié._jue._vie._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY h:mm A\",LLLL:\"dddd, D [de] MMMM [de] YYYY h:mm A\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[mañana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",w:\"una semana\",ww:\"%d semanas\",M:\"un mes\",MM:\"%d meses\",y:\"un año\",yy:\"%d años\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})}(n(381))},6112:function(e,t,n){!function(e){\"use strict\";var t=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),n=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],o=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;e.defineLocale(\"es-mx\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:o,monthsShortRegex:o,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"domingo_lunes_martes_miércoles_jueves_viernes_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mié._jue._vie._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[mañana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",w:\"una semana\",ww:\"%d semanas\",M:\"un mes\",MM:\"%d meses\",y:\"un año\",yy:\"%d años\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:0,doy:4},invalidDate:\"Fecha inválida\"})}(n(381))},1146:function(e,t,n){!function(e){\"use strict\";var t=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),n=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],o=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;e.defineLocale(\"es-us\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:o,monthsShortRegex:o,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"domingo_lunes_martes_miércoles_jueves_viernes_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mié._jue._vie._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"MM/DD/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY h:mm A\",LLLL:\"dddd, D [de] MMMM [de] YYYY h:mm A\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[mañana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",w:\"una semana\",ww:\"%d semanas\",M:\"un mes\",MM:\"%d meses\",y:\"un año\",yy:\"%d años\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:0,doy:6}})}(n(381))},5655:function(e,t,n){!function(e){\"use strict\";var t=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),n=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],o=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;e.defineLocale(\"es\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:o,monthsShortRegex:o,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"domingo_lunes_martes_miércoles_jueves_viernes_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mié._jue._vie._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[mañana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",w:\"una semana\",ww:\"%d semanas\",M:\"un mes\",MM:\"%d meses\",y:\"un año\",yy:\"%d años\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4},invalidDate:\"Fecha inválida\"})}(n(381))},5603:function(e,t,n){!function(e){\"use strict\";function t(e,t,n,r){var o={s:[\"mõne sekundi\",\"mõni sekund\",\"paar sekundit\"],ss:[e+\"sekundi\",e+\"sekundit\"],m:[\"ühe minuti\",\"üks minut\"],mm:[e+\" minuti\",e+\" minutit\"],h:[\"ühe tunni\",\"tund aega\",\"üks tund\"],hh:[e+\" tunni\",e+\" tundi\"],d:[\"ühe päeva\",\"üks päev\"],M:[\"kuu aja\",\"kuu aega\",\"üks kuu\"],MM:[e+\" kuu\",e+\" kuud\"],y:[\"ühe aasta\",\"aasta\",\"üks aasta\"],yy:[e+\" aasta\",e+\" aastat\"]};return t?o[n][2]?o[n][2]:o[n][1]:r?o[n][0]:o[n][1]}e.defineLocale(\"et\",{months:\"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember\".split(\"_\"),monthsShort:\"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets\".split(\"_\"),weekdays:\"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev\".split(\"_\"),weekdaysShort:\"P_E_T_K_N_R_L\".split(\"_\"),weekdaysMin:\"P_E_T_K_N_R_L\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[Täna,] LT\",nextDay:\"[Homme,] LT\",nextWeek:\"[Järgmine] dddd LT\",lastDay:\"[Eile,] LT\",lastWeek:\"[Eelmine] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s pärast\",past:\"%s tagasi\",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:\"%d päeva\",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},7763:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"eu\",{months:\"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua\".split(\"_\"),monthsShort:\"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.\".split(\"_\"),monthsParseExact:!0,weekdays:\"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata\".split(\"_\"),weekdaysShort:\"ig._al._ar._az._og._ol._lr.\".split(\"_\"),weekdaysMin:\"ig_al_ar_az_og_ol_lr\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY[ko] MMMM[ren] D[a]\",LLL:\"YYYY[ko] MMMM[ren] D[a] HH:mm\",LLLL:\"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm\",l:\"YYYY-M-D\",ll:\"YYYY[ko] MMM D[a]\",lll:\"YYYY[ko] MMM D[a] HH:mm\",llll:\"ddd, YYYY[ko] MMM D[a] HH:mm\"},calendar:{sameDay:\"[gaur] LT[etan]\",nextDay:\"[bihar] LT[etan]\",nextWeek:\"dddd LT[etan]\",lastDay:\"[atzo] LT[etan]\",lastWeek:\"[aurreko] dddd LT[etan]\",sameElse:\"L\"},relativeTime:{future:\"%s barru\",past:\"duela %s\",s:\"segundo batzuk\",ss:\"%d segundo\",m:\"minutu bat\",mm:\"%d minutu\",h:\"ordu bat\",hh:\"%d ordu\",d:\"egun bat\",dd:\"%d egun\",M:\"hilabete bat\",MM:\"%d hilabete\",y:\"urte bat\",yy:\"%d urte\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(381))},6959:function(e,t,n){!function(e){\"use strict\";var t={1:\"۱\",2:\"۲\",3:\"۳\",4:\"۴\",5:\"۵\",6:\"۶\",7:\"۷\",8:\"۸\",9:\"۹\",0:\"۰\"},n={\"۱\":\"1\",\"۲\":\"2\",\"۳\":\"3\",\"۴\":\"4\",\"۵\":\"5\",\"۶\":\"6\",\"۷\":\"7\",\"۸\":\"8\",\"۹\":\"9\",\"۰\":\"0\"};e.defineLocale(\"fa\",{months:\"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر\".split(\"_\"),monthsShort:\"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر\".split(\"_\"),weekdays:\"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه\".split(\"_\"),weekdaysShort:\"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه\".split(\"_\"),weekdaysMin:\"ی_د_س_چ_پ_ج_ش\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,t,n){return e<12?\"قبل از ظهر\":\"بعد از ظهر\"},calendar:{sameDay:\"[امروز ساعت] LT\",nextDay:\"[فردا ساعت] LT\",nextWeek:\"dddd [ساعت] LT\",lastDay:\"[دیروز ساعت] LT\",lastWeek:\"dddd [پیش] [ساعت] LT\",sameElse:\"L\"},relativeTime:{future:\"در %s\",past:\"%s پیش\",s:\"چند ثانیه\",ss:\"%d ثانیه\",m:\"یک دقیقه\",mm:\"%d دقیقه\",h:\"یک ساعت\",hh:\"%d ساعت\",d:\"یک روز\",dd:\"%d روز\",M:\"یک ماه\",MM:\"%d ماه\",y:\"یک سال\",yy:\"%d سال\"},preparse:function(e){return e.replace(/[۰-۹]/g,(function(e){return n[e]})).replace(/،/g,\",\")},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]})).replace(/,/g,\"،\")},dayOfMonthOrdinalParse:/\\d{1,2}م/,ordinal:\"%dم\",week:{dow:6,doy:12}})}(n(381))},1897:function(e,t,n){!function(e){\"use strict\";var t=\"nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän\".split(\" \"),n=[\"nolla\",\"yhden\",\"kahden\",\"kolmen\",\"neljän\",\"viiden\",\"kuuden\",t[7],t[8],t[9]];function r(e,t,n,r){var i=\"\";switch(n){case\"s\":return r?\"muutaman sekunnin\":\"muutama sekunti\";case\"ss\":i=r?\"sekunnin\":\"sekuntia\";break;case\"m\":return r?\"minuutin\":\"minuutti\";case\"mm\":i=r?\"minuutin\":\"minuuttia\";break;case\"h\":return r?\"tunnin\":\"tunti\";case\"hh\":i=r?\"tunnin\":\"tuntia\";break;case\"d\":return r?\"päivän\":\"päivä\";case\"dd\":i=r?\"päivän\":\"päivää\";break;case\"M\":return r?\"kuukauden\":\"kuukausi\";case\"MM\":i=r?\"kuukauden\":\"kuukautta\";break;case\"y\":return r?\"vuoden\":\"vuosi\";case\"yy\":i=r?\"vuoden\":\"vuotta\"}return i=o(e,r)+\" \"+i}function o(e,r){return e<10?r?n[e]:t[e]:e}e.defineLocale(\"fi\",{months:\"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu\".split(\"_\"),monthsShort:\"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu\".split(\"_\"),weekdays:\"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai\".split(\"_\"),weekdaysShort:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),weekdaysMin:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD.MM.YYYY\",LL:\"Do MMMM[ta] YYYY\",LLL:\"Do MMMM[ta] YYYY, [klo] HH.mm\",LLLL:\"dddd, Do MMMM[ta] YYYY, [klo] HH.mm\",l:\"D.M.YYYY\",ll:\"Do MMM YYYY\",lll:\"Do MMM YYYY, [klo] HH.mm\",llll:\"ddd, Do MMM YYYY, [klo] HH.mm\"},calendar:{sameDay:\"[tänään] [klo] LT\",nextDay:\"[huomenna] [klo] LT\",nextWeek:\"dddd [klo] LT\",lastDay:\"[eilen] [klo] LT\",lastWeek:\"[viime] dddd[na] [klo] LT\",sameElse:\"L\"},relativeTime:{future:\"%s päästä\",past:\"%s sitten\",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},2549:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"fil\",{months:\"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre\".split(\"_\"),monthsShort:\"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis\".split(\"_\"),weekdays:\"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado\".split(\"_\"),weekdaysShort:\"Lin_Lun_Mar_Miy_Huw_Biy_Sab\".split(\"_\"),weekdaysMin:\"Li_Lu_Ma_Mi_Hu_Bi_Sab\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"MM/D/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY HH:mm\",LLLL:\"dddd, MMMM DD, YYYY HH:mm\"},calendar:{sameDay:\"LT [ngayong araw]\",nextDay:\"[Bukas ng] LT\",nextWeek:\"LT [sa susunod na] dddd\",lastDay:\"LT [kahapon]\",lastWeek:\"LT [noong nakaraang] dddd\",sameElse:\"L\"},relativeTime:{future:\"sa loob ng %s\",past:\"%s ang nakalipas\",s:\"ilang segundo\",ss:\"%d segundo\",m:\"isang minuto\",mm:\"%d minuto\",h:\"isang oras\",hh:\"%d oras\",d:\"isang araw\",dd:\"%d araw\",M:\"isang buwan\",MM:\"%d buwan\",y:\"isang taon\",yy:\"%d taon\"},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(381))},4694:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"fo\",{months:\"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des\".split(\"_\"),weekdays:\"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur\".split(\"_\"),weekdaysShort:\"sun_mán_týs_mik_hós_frí_ley\".split(\"_\"),weekdaysMin:\"su_má_tý_mi_hó_fr_le\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D. MMMM, YYYY HH:mm\"},calendar:{sameDay:\"[Í dag kl.] LT\",nextDay:\"[Í morgin kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[Í gjár kl.] LT\",lastWeek:\"[síðstu] dddd [kl] LT\",sameElse:\"L\"},relativeTime:{future:\"um %s\",past:\"%s síðani\",s:\"fá sekund\",ss:\"%d sekundir\",m:\"ein minuttur\",mm:\"%d minuttir\",h:\"ein tími\",hh:\"%d tímar\",d:\"ein dagur\",dd:\"%d dagar\",M:\"ein mánaður\",MM:\"%d mánaðir\",y:\"eitt ár\",yy:\"%d ár\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},3049:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"fr-ca\",{months:\"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre\".split(\"_\"),monthsShort:\"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourd’hui à] LT\",nextDay:\"[Demain à] LT\",nextWeek:\"dddd [à] LT\",lastDay:\"[Hier à] LT\",lastWeek:\"dddd [dernier à] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case\"M\":case\"Q\":case\"D\":case\"DDD\":case\"d\":return e+(1===e?\"er\":\"e\");case\"w\":case\"W\":return e+(1===e?\"re\":\"e\")}}})}(n(381))},2330:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"fr-ch\",{months:\"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre\".split(\"_\"),monthsShort:\"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourd’hui à] LT\",nextDay:\"[Demain à] LT\",nextWeek:\"dddd [à] LT\",lastDay:\"[Hier à] LT\",lastWeek:\"dddd [dernier à] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case\"M\":case\"Q\":case\"D\":case\"DDD\":case\"d\":return e+(1===e?\"er\":\"e\");case\"w\":case\"W\":return e+(1===e?\"re\":\"e\")}},week:{dow:1,doy:4}})}(n(381))},4470:function(e,t,n){!function(e){\"use strict\";var t=/^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,n=/(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,r=/(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,o=[/^janv/i,/^févr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^août/i,/^sept/i,/^oct/i,/^nov/i,/^déc/i];e.defineLocale(\"fr\",{months:\"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre\".split(\"_\"),monthsShort:\"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.\".split(\"_\"),monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:t,monthsShortStrictRegex:n,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourd’hui à] LT\",nextDay:\"[Demain à] LT\",nextWeek:\"dddd [à] LT\",lastDay:\"[Hier à] LT\",lastWeek:\"dddd [dernier à] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",w:\"une semaine\",ww:\"%d semaines\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|)/,ordinal:function(e,t){switch(t){case\"D\":return e+(1===e?\"er\":\"\");default:case\"M\":case\"Q\":case\"DDD\":case\"d\":return e+(1===e?\"er\":\"e\");case\"w\":case\"W\":return e+(1===e?\"re\":\"e\")}},week:{dow:1,doy:4}})}(n(381))},5044:function(e,t,n){!function(e){\"use strict\";var t=\"jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.\".split(\"_\"),n=\"jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des\".split(\"_\");e.defineLocale(\"fy\",{months:\"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber\".split(\"_\"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsParseExact:!0,weekdays:\"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon\".split(\"_\"),weekdaysShort:\"si._mo._ti._wo._to._fr._so.\".split(\"_\"),weekdaysMin:\"Si_Mo_Ti_Wo_To_Fr_So\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[hjoed om] LT\",nextDay:\"[moarn om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[juster om] LT\",lastWeek:\"[ôfrûne] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"oer %s\",past:\"%s lyn\",s:\"in pear sekonden\",ss:\"%d sekonden\",m:\"ien minút\",mm:\"%d minuten\",h:\"ien oere\",hh:\"%d oeren\",d:\"ien dei\",dd:\"%d dagen\",M:\"ien moanne\",MM:\"%d moannen\",y:\"ien jier\",yy:\"%d jierren\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(n(381))},9295:function(e,t,n){!function(e){\"use strict\";var t=[\"Eanáir\",\"Feabhra\",\"Márta\",\"Aibreán\",\"Bealtaine\",\"Meitheamh\",\"Iúil\",\"Lúnasa\",\"Meán Fómhair\",\"Deireadh Fómhair\",\"Samhain\",\"Nollaig\"],n=[\"Ean\",\"Feabh\",\"Márt\",\"Aib\",\"Beal\",\"Meith\",\"Iúil\",\"Lún\",\"M.F.\",\"D.F.\",\"Samh\",\"Noll\"],r=[\"Dé Domhnaigh\",\"Dé Luain\",\"Dé Máirt\",\"Dé Céadaoin\",\"Déardaoin\",\"Dé hAoine\",\"Dé Sathairn\"],o=[\"Domh\",\"Luan\",\"Máirt\",\"Céad\",\"Déar\",\"Aoine\",\"Sath\"],i=[\"Do\",\"Lu\",\"Má\",\"Cé\",\"Dé\",\"A\",\"Sa\"];e.defineLocale(\"ga\",{months:t,monthsShort:n,monthsParseExact:!0,weekdays:r,weekdaysShort:o,weekdaysMin:i,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Inniu ag] LT\",nextDay:\"[Amárach ag] LT\",nextWeek:\"dddd [ag] LT\",lastDay:\"[Inné ag] LT\",lastWeek:\"dddd [seo caite] [ag] LT\",sameElse:\"L\"},relativeTime:{future:\"i %s\",past:\"%s ó shin\",s:\"cúpla soicind\",ss:\"%d soicind\",m:\"nóiméad\",mm:\"%d nóiméad\",h:\"uair an chloig\",hh:\"%d uair an chloig\",d:\"lá\",dd:\"%d lá\",M:\"mí\",MM:\"%d míonna\",y:\"bliain\",yy:\"%d bliain\"},dayOfMonthOrdinalParse:/\\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?\"d\":e%10==2?\"na\":\"mh\")},week:{dow:1,doy:4}})}(n(381))},2101:function(e,t,n){!function(e){\"use strict\";var t=[\"Am Faoilleach\",\"An Gearran\",\"Am Màrt\",\"An Giblean\",\"An Cèitean\",\"An t-Ògmhios\",\"An t-Iuchar\",\"An Lùnastal\",\"An t-Sultain\",\"An Dàmhair\",\"An t-Samhain\",\"An Dùbhlachd\"],n=[\"Faoi\",\"Gear\",\"Màrt\",\"Gibl\",\"Cèit\",\"Ògmh\",\"Iuch\",\"Lùn\",\"Sult\",\"Dàmh\",\"Samh\",\"Dùbh\"],r=[\"Didòmhnaich\",\"Diluain\",\"Dimàirt\",\"Diciadain\",\"Diardaoin\",\"Dihaoine\",\"Disathairne\"],o=[\"Did\",\"Dil\",\"Dim\",\"Dic\",\"Dia\",\"Dih\",\"Dis\"],i=[\"Dò\",\"Lu\",\"Mà\",\"Ci\",\"Ar\",\"Ha\",\"Sa\"];e.defineLocale(\"gd\",{months:t,monthsShort:n,monthsParseExact:!0,weekdays:r,weekdaysShort:o,weekdaysMin:i,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[An-diugh aig] LT\",nextDay:\"[A-màireach aig] LT\",nextWeek:\"dddd [aig] LT\",lastDay:\"[An-dè aig] LT\",lastWeek:\"dddd [seo chaidh] [aig] LT\",sameElse:\"L\"},relativeTime:{future:\"ann an %s\",past:\"bho chionn %s\",s:\"beagan diogan\",ss:\"%d diogan\",m:\"mionaid\",mm:\"%d mionaidean\",h:\"uair\",hh:\"%d uairean\",d:\"latha\",dd:\"%d latha\",M:\"mìos\",MM:\"%d mìosan\",y:\"bliadhna\",yy:\"%d bliadhna\"},dayOfMonthOrdinalParse:/\\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?\"d\":e%10==2?\"na\":\"mh\")},week:{dow:1,doy:4}})}(n(381))},8794:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"gl\",{months:\"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro\".split(\"_\"),monthsShort:\"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"domingo_luns_martes_mércores_xoves_venres_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mér._xov._ven._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mé_xo_ve_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoxe \"+(1!==this.hours()?\"ás\":\"á\")+\"] LT\"},nextDay:function(){return\"[mañá \"+(1!==this.hours()?\"ás\":\"á\")+\"] LT\"},nextWeek:function(){return\"dddd [\"+(1!==this.hours()?\"ás\":\"a\")+\"] LT\"},lastDay:function(){return\"[onte \"+(1!==this.hours()?\"á\":\"a\")+\"] LT\"},lastWeek:function(){return\"[o] dddd [pasado \"+(1!==this.hours()?\"ás\":\"a\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:function(e){return 0===e.indexOf(\"un\")?\"n\"+e:\"en \"+e},past:\"hai %s\",s:\"uns segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"unha hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",M:\"un mes\",MM:\"%d meses\",y:\"un ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})}(n(381))},7884:function(e,t,n){!function(e){\"use strict\";function t(e,t,n,r){var o={s:[\"थोडया सॅकंडांनी\",\"थोडे सॅकंड\"],ss:[e+\" सॅकंडांनी\",e+\" सॅकंड\"],m:[\"एका मिणटान\",\"एक मिनूट\"],mm:[e+\" मिणटांनी\",e+\" मिणटां\"],h:[\"एका वरान\",\"एक वर\"],hh:[e+\" वरांनी\",e+\" वरां\"],d:[\"एका दिसान\",\"एक दीस\"],dd:[e+\" दिसांनी\",e+\" दीस\"],M:[\"एका म्हयन्यान\",\"एक म्हयनो\"],MM:[e+\" म्हयन्यानी\",e+\" म्हयने\"],y:[\"एका वर्सान\",\"एक वर्स\"],yy:[e+\" वर्सांनी\",e+\" वर्सां\"]};return r?o[n][0]:o[n][1]}e.defineLocale(\"gom-deva\",{months:{standalone:\"जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर\".split(\"_\"),format:\"जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या\".split(\"_\"),isFormat:/MMMM(\\s)+D[oD]?/},monthsShort:\"जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.\".split(\"_\"),monthsParseExact:!0,weekdays:\"आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार\".split(\"_\"),weekdaysShort:\"आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.\".split(\"_\"),weekdaysMin:\"आ_सो_मं_बु_ब्रे_सु_शे\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"A h:mm [वाजतां]\",LTS:\"A h:mm:ss [वाजतां]\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY A h:mm [वाजतां]\",LLLL:\"dddd, MMMM Do, YYYY, A h:mm [वाजतां]\",llll:\"ddd, D MMM YYYY, A h:mm [वाजतां]\"},calendar:{sameDay:\"[आयज] LT\",nextDay:\"[फाल्यां] LT\",nextWeek:\"[फुडलो] dddd[,] LT\",lastDay:\"[काल] LT\",lastWeek:\"[फाटलो] dddd[,] LT\",sameElse:\"L\"},relativeTime:{future:\"%s\",past:\"%s आदीं\",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}(वेर)/,ordinal:function(e,t){return\"D\"===t?e+\"वेर\":e},week:{dow:0,doy:3},meridiemParse:/राती|सकाळीं|दनपारां|सांजे/,meridiemHour:function(e,t){return 12===e&&(e=0),\"राती\"===t?e<4?e:e+12:\"सकाळीं\"===t?e:\"दनपारां\"===t?e>12?e:e+12:\"सांजे\"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?\"राती\":e<12?\"सकाळीं\":e<16?\"दनपारां\":e<20?\"सांजे\":\"राती\"}})}(n(381))},3168:function(e,t,n){!function(e){\"use strict\";function t(e,t,n,r){var o={s:[\"thoddea sekondamni\",\"thodde sekond\"],ss:[e+\" sekondamni\",e+\" sekond\"],m:[\"eka mintan\",\"ek minut\"],mm:[e+\" mintamni\",e+\" mintam\"],h:[\"eka voran\",\"ek vor\"],hh:[e+\" voramni\",e+\" voram\"],d:[\"eka disan\",\"ek dis\"],dd:[e+\" disamni\",e+\" dis\"],M:[\"eka mhoinean\",\"ek mhoino\"],MM:[e+\" mhoineamni\",e+\" mhoine\"],y:[\"eka vorsan\",\"ek voros\"],yy:[e+\" vorsamni\",e+\" vorsam\"]};return r?o[n][0]:o[n][1]}e.defineLocale(\"gom-latn\",{months:{standalone:\"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr\".split(\"_\"),format:\"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea\".split(\"_\"),isFormat:/MMMM(\\s)+D[oD]?/},monthsShort:\"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split(\"_\"),weekdaysShort:\"Ait._Som._Mon._Bud._Bre._Suk._Son.\".split(\"_\"),weekdaysMin:\"Ai_Sm_Mo_Bu_Br_Su_Sn\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"A h:mm [vazta]\",LTS:\"A h:mm:ss [vazta]\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY A h:mm [vazta]\",LLLL:\"dddd, MMMM Do, YYYY, A h:mm [vazta]\",llll:\"ddd, D MMM YYYY, A h:mm [vazta]\"},calendar:{sameDay:\"[Aiz] LT\",nextDay:\"[Faleam] LT\",nextWeek:\"[Fuddlo] dddd[,] LT\",lastDay:\"[Kal] LT\",lastWeek:\"[Fattlo] dddd[,] LT\",sameElse:\"L\"},relativeTime:{future:\"%s\",past:\"%s adim\",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}(er)/,ordinal:function(e,t){return\"D\"===t?e+\"er\":e},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(e,t){return 12===e&&(e=0),\"rati\"===t?e<4?e:e+12:\"sokallim\"===t?e:\"donparam\"===t?e>12?e:e+12:\"sanje\"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?\"rati\":e<12?\"sokallim\":e<16?\"donparam\":e<20?\"sanje\":\"rati\"}})}(n(381))},5349:function(e,t,n){!function(e){\"use strict\";var t={1:\"૧\",2:\"૨\",3:\"૩\",4:\"૪\",5:\"૫\",6:\"૬\",7:\"૭\",8:\"૮\",9:\"૯\",0:\"૦\"},n={\"૧\":\"1\",\"૨\":\"2\",\"૩\":\"3\",\"૪\":\"4\",\"૫\":\"5\",\"૬\":\"6\",\"૭\":\"7\",\"૮\":\"8\",\"૯\":\"9\",\"૦\":\"0\"};e.defineLocale(\"gu\",{months:\"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર\".split(\"_\"),monthsShort:\"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.\".split(\"_\"),monthsParseExact:!0,weekdays:\"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર\".split(\"_\"),weekdaysShort:\"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ\".split(\"_\"),weekdaysMin:\"ર_સો_મં_બુ_ગુ_શુ_શ\".split(\"_\"),longDateFormat:{LT:\"A h:mm વાગ્યે\",LTS:\"A h:mm:ss વાગ્યે\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm વાગ્યે\",LLLL:\"dddd, D MMMM YYYY, A h:mm વાગ્યે\"},calendar:{sameDay:\"[આજ] LT\",nextDay:\"[કાલે] LT\",nextWeek:\"dddd, LT\",lastDay:\"[ગઇકાલે] LT\",lastWeek:\"[પાછલા] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s મા\",past:\"%s પહેલા\",s:\"અમુક પળો\",ss:\"%d સેકંડ\",m:\"એક મિનિટ\",mm:\"%d મિનિટ\",h:\"એક કલાક\",hh:\"%d કલાક\",d:\"એક દિવસ\",dd:\"%d દિવસ\",M:\"એક મહિનો\",MM:\"%d મહિનો\",y:\"એક વર્ષ\",yy:\"%d વર્ષ\"},preparse:function(e){return e.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]}))},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(e,t){return 12===e&&(e=0),\"રાત\"===t?e<4?e:e+12:\"સવાર\"===t?e:\"બપોર\"===t?e>=10?e:e+12:\"સાંજ\"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?\"રાત\":e<10?\"સવાર\":e<17?\"બપોર\":e<20?\"સાંજ\":\"રાત\"},week:{dow:0,doy:6}})}(n(381))},4206:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"he\",{months:\"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר\".split(\"_\"),monthsShort:\"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳\".split(\"_\"),weekdays:\"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת\".split(\"_\"),weekdaysShort:\"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳\".split(\"_\"),weekdaysMin:\"א_ב_ג_ד_ה_ו_ש\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [ב]MMMM YYYY\",LLL:\"D [ב]MMMM YYYY HH:mm\",LLLL:\"dddd, D [ב]MMMM YYYY HH:mm\",l:\"D/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},calendar:{sameDay:\"[היום ב־]LT\",nextDay:\"[מחר ב־]LT\",nextWeek:\"dddd [בשעה] LT\",lastDay:\"[אתמול ב־]LT\",lastWeek:\"[ביום] dddd [האחרון בשעה] LT\",sameElse:\"L\"},relativeTime:{future:\"בעוד %s\",past:\"לפני %s\",s:\"מספר שניות\",ss:\"%d שניות\",m:\"דקה\",mm:\"%d דקות\",h:\"שעה\",hh:function(e){return 2===e?\"שעתיים\":e+\" שעות\"},d:\"יום\",dd:function(e){return 2===e?\"יומיים\":e+\" ימים\"},M:\"חודש\",MM:function(e){return 2===e?\"חודשיים\":e+\" חודשים\"},y:\"שנה\",yy:function(e){return 2===e?\"שנתיים\":e%10==0&&10!==e?e+\" שנה\":e+\" שנים\"}},meridiemParse:/אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה\"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,t,n){return e<5?\"לפנות בוקר\":e<10?\"בבוקר\":e<12?n?'לפנה\"צ':\"לפני הצהריים\":e<18?n?'אחה\"צ':\"אחרי הצהריים\":\"בערב\"}})}(n(381))},94:function(e,t,n){!function(e){\"use strict\";var t={1:\"१\",2:\"२\",3:\"३\",4:\"४\",5:\"५\",6:\"६\",7:\"७\",8:\"८\",9:\"९\",0:\"०\"},n={\"१\":\"1\",\"२\":\"2\",\"३\":\"3\",\"४\":\"4\",\"५\":\"5\",\"६\":\"6\",\"७\":\"7\",\"८\":\"8\",\"९\":\"9\",\"०\":\"0\"},r=[/^जन/i,/^फ़र|फर/i,/^मार्च/i,/^अप्रै/i,/^मई/i,/^जून/i,/^जुल/i,/^अग/i,/^सितं|सित/i,/^अक्टू/i,/^नव|नवं/i,/^दिसं|दिस/i],o=[/^जन/i,/^फ़र/i,/^मार्च/i,/^अप्रै/i,/^मई/i,/^जून/i,/^जुल/i,/^अग/i,/^सित/i,/^अक्टू/i,/^नव/i,/^दिस/i];e.defineLocale(\"hi\",{months:{format:\"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर\".split(\"_\"),standalone:\"जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर\".split(\"_\")},monthsShort:\"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.\".split(\"_\"),weekdays:\"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार\".split(\"_\"),weekdaysShort:\"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि\".split(\"_\"),weekdaysMin:\"र_सो_मं_बु_गु_शु_श\".split(\"_\"),longDateFormat:{LT:\"A h:mm बजे\",LTS:\"A h:mm:ss बजे\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm बजे\",LLLL:\"dddd, D MMMM YYYY, A h:mm बजे\"},monthsParse:r,longMonthsParse:r,shortMonthsParse:o,monthsRegex:/^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,monthsShortRegex:/^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,monthsStrictRegex:/^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,monthsShortStrictRegex:/^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,calendar:{sameDay:\"[आज] LT\",nextDay:\"[कल] LT\",nextWeek:\"dddd, LT\",lastDay:\"[कल] LT\",lastWeek:\"[पिछले] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s में\",past:\"%s पहले\",s:\"कुछ ही क्षण\",ss:\"%d सेकंड\",m:\"एक मिनट\",mm:\"%d मिनट\",h:\"एक घंटा\",hh:\"%d घंटे\",d:\"एक दिन\",dd:\"%d दिन\",M:\"एक महीने\",MM:\"%d महीने\",y:\"एक वर्ष\",yy:\"%d वर्ष\"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]}))},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,t){return 12===e&&(e=0),\"रात\"===t?e<4?e:e+12:\"सुबह\"===t?e:\"दोपहर\"===t?e>=10?e:e+12:\"शाम\"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?\"रात\":e<10?\"सुबह\":e<17?\"दोपहर\":e<20?\"शाम\":\"रात\"},week:{dow:0,doy:6}})}(n(381))},316:function(e,t,n){!function(e){\"use strict\";function t(e,t,n){var r=e+\" \";switch(n){case\"ss\":return r+=1===e?\"sekunda\":2===e||3===e||4===e?\"sekunde\":\"sekundi\";case\"m\":return t?\"jedna minuta\":\"jedne minute\";case\"mm\":return r+=1===e?\"minuta\":2===e||3===e||4===e?\"minute\":\"minuta\";case\"h\":return t?\"jedan sat\":\"jednog sata\";case\"hh\":return r+=1===e?\"sat\":2===e||3===e||4===e?\"sata\":\"sati\";case\"dd\":return r+=1===e?\"dan\":\"dana\";case\"MM\":return r+=1===e?\"mjesec\":2===e||3===e||4===e?\"mjeseca\":\"mjeseci\";case\"yy\":return r+=1===e?\"godina\":2===e||3===e||4===e?\"godine\":\"godina\"}}e.defineLocale(\"hr\",{months:{format:\"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca\".split(\"_\"),standalone:\"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac\".split(\"_\")},monthsShort:\"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._čet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_če_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"Do MMMM YYYY\",LLL:\"Do MMMM YYYY H:mm\",LLLL:\"dddd, Do MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[jučer u] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[prošlu] [nedjelju] [u] LT\";case 3:return\"[prošlu] [srijedu] [u] LT\";case 6:return\"[prošle] [subote] [u] LT\";case 1:case 2:case 4:case 5:return\"[prošli] dddd [u] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"par sekundi\",ss:t,m:t,mm:t,h:t,hh:t,d:\"dan\",dd:t,M:\"mjesec\",MM:t,y:\"godinu\",yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(381))},2138:function(e,t,n){!function(e){\"use strict\";var t=\"vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton\".split(\" \");function n(e,t,n,r){var o=e;switch(n){case\"s\":return r||t?\"néhány másodperc\":\"néhány másodperce\";case\"ss\":return o+(r||t)?\" másodperc\":\" másodperce\";case\"m\":return\"egy\"+(r||t?\" perc\":\" perce\");case\"mm\":return o+(r||t?\" perc\":\" perce\");case\"h\":return\"egy\"+(r||t?\" óra\":\" órája\");case\"hh\":return o+(r||t?\" óra\":\" órája\");case\"d\":return\"egy\"+(r||t?\" nap\":\" napja\");case\"dd\":return o+(r||t?\" nap\":\" napja\");case\"M\":return\"egy\"+(r||t?\" hónap\":\" hónapja\");case\"MM\":return o+(r||t?\" hónap\":\" hónapja\");case\"y\":return\"egy\"+(r||t?\" év\":\" éve\");case\"yy\":return o+(r||t?\" év\":\" éve\")}return\"\"}function r(e){return(e?\"\":\"[múlt] \")+\"[\"+t[this.day()]+\"] LT[-kor]\"}e.defineLocale(\"hu\",{months:\"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december\".split(\"_\"),monthsShort:\"jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat\".split(\"_\"),weekdaysShort:\"vas_hét_kedd_sze_csüt_pén_szo\".split(\"_\"),weekdaysMin:\"v_h_k_sze_cs_p_szo\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"YYYY.MM.DD.\",LL:\"YYYY. MMMM D.\",LLL:\"YYYY. MMMM D. H:mm\",LLLL:\"YYYY. MMMM D., dddd H:mm\"},meridiemParse:/de|du/i,isPM:function(e){return\"u\"===e.charAt(1).toLowerCase()},meridiem:function(e,t,n){return e<12?!0===n?\"de\":\"DE\":!0===n?\"du\":\"DU\"},calendar:{sameDay:\"[ma] LT[-kor]\",nextDay:\"[holnap] LT[-kor]\",nextWeek:function(){return r.call(this,!0)},lastDay:\"[tegnap] LT[-kor]\",lastWeek:function(){return r.call(this,!1)},sameElse:\"L\"},relativeTime:{future:\"%s múlva\",past:\"%s\",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},1423:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"hy-am\",{months:{format:\"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի\".split(\"_\"),standalone:\"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր\".split(\"_\")},monthsShort:\"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ\".split(\"_\"),weekdays:\"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ\".split(\"_\"),weekdaysShort:\"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ\".split(\"_\"),weekdaysMin:\"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY թ.\",LLL:\"D MMMM YYYY թ., HH:mm\",LLLL:\"dddd, D MMMM YYYY թ., HH:mm\"},calendar:{sameDay:\"[այսօր] LT\",nextDay:\"[վաղը] LT\",lastDay:\"[երեկ] LT\",nextWeek:function(){return\"dddd [օրը ժամը] LT\"},lastWeek:function(){return\"[անցած] dddd [օրը ժամը] LT\"},sameElse:\"L\"},relativeTime:{future:\"%s հետո\",past:\"%s առաջ\",s:\"մի քանի վայրկյան\",ss:\"%d վայրկյան\",m:\"րոպե\",mm:\"%d րոպե\",h:\"ժամ\",hh:\"%d ժամ\",d:\"օր\",dd:\"%d օր\",M:\"ամիս\",MM:\"%d ամիս\",y:\"տարի\",yy:\"%d տարի\"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(e){return/^(ցերեկվա|երեկոյան)$/.test(e)},meridiem:function(e){return e<4?\"գիշերվա\":e<12?\"առավոտվա\":e<17?\"ցերեկվա\":\"երեկոյան\"},dayOfMonthOrdinalParse:/\\d{1,2}|\\d{1,2}-(ին|րդ)/,ordinal:function(e,t){switch(t){case\"DDD\":case\"w\":case\"W\":case\"DDDo\":return 1===e?e+\"-ին\":e+\"-րդ\";default:return e}},week:{dow:1,doy:7}})}(n(381))},9218:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"id\",{months:\"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu\".split(\"_\"),weekdaysShort:\"Min_Sen_Sel_Rab_Kam_Jum_Sab\".split(\"_\"),weekdaysMin:\"Mg_Sn_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),\"pagi\"===t?e:\"siang\"===t?e>=11?e:e+12:\"sore\"===t||\"malam\"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?\"pagi\":e<15?\"siang\":e<19?\"sore\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Besok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kemarin pukul] LT\",lastWeek:\"dddd [lalu pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lalu\",s:\"beberapa detik\",ss:\"%d detik\",m:\"semenit\",mm:\"%d menit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:0,doy:6}})}(n(381))},135:function(e,t,n){!function(e){\"use strict\";function t(e){return e%100==11||e%10!=1}function n(e,n,r,o){var i=e+\" \";switch(r){case\"s\":return n||o?\"nokkrar sekúndur\":\"nokkrum sekúndum\";case\"ss\":return t(e)?i+(n||o?\"sekúndur\":\"sekúndum\"):i+\"sekúnda\";case\"m\":return n?\"mínúta\":\"mínútu\";case\"mm\":return t(e)?i+(n||o?\"mínútur\":\"mínútum\"):n?i+\"mínúta\":i+\"mínútu\";case\"hh\":return t(e)?i+(n||o?\"klukkustundir\":\"klukkustundum\"):i+\"klukkustund\";case\"d\":return n?\"dagur\":o?\"dag\":\"degi\";case\"dd\":return t(e)?n?i+\"dagar\":i+(o?\"daga\":\"dögum\"):n?i+\"dagur\":i+(o?\"dag\":\"degi\");case\"M\":return n?\"mánuður\":o?\"mánuð\":\"mánuði\";case\"MM\":return t(e)?n?i+\"mánuðir\":i+(o?\"mánuði\":\"mánuðum\"):n?i+\"mánuður\":i+(o?\"mánuð\":\"mánuði\");case\"y\":return n||o?\"ár\":\"ári\";case\"yy\":return t(e)?i+(n||o?\"ár\":\"árum\"):i+(n||o?\"ár\":\"ári\")}}e.defineLocale(\"is\",{months:\"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des\".split(\"_\"),weekdays:\"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur\".split(\"_\"),weekdaysShort:\"sun_mán_þri_mið_fim_fös_lau\".split(\"_\"),weekdaysMin:\"Su_Má_Þr_Mi_Fi_Fö_La\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] H:mm\",LLLL:\"dddd, D. MMMM YYYY [kl.] H:mm\"},calendar:{sameDay:\"[í dag kl.] LT\",nextDay:\"[á morgun kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[í gær kl.] LT\",lastWeek:\"[síðasta] dddd [kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"eftir %s\",past:\"fyrir %s síðan\",s:n,ss:n,m:n,mm:n,h:\"klukkustund\",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},150:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"it-ch\",{months:\"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre\".split(\"_\"),monthsShort:\"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic\".split(\"_\"),weekdays:\"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato\".split(\"_\"),weekdaysShort:\"dom_lun_mar_mer_gio_ven_sab\".split(\"_\"),weekdaysMin:\"do_lu_ma_me_gi_ve_sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Oggi alle] LT\",nextDay:\"[Domani alle] LT\",nextWeek:\"dddd [alle] LT\",lastDay:\"[Ieri alle] LT\",lastWeek:function(){return 0===this.day()?\"[la scorsa] dddd [alle] LT\":\"[lo scorso] dddd [alle] LT\"},sameElse:\"L\"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?\"tra\":\"in\")+\" \"+e},past:\"%s fa\",s:\"alcuni secondi\",ss:\"%d secondi\",m:\"un minuto\",mm:\"%d minuti\",h:\"un'ora\",hh:\"%d ore\",d:\"un giorno\",dd:\"%d giorni\",M:\"un mese\",MM:\"%d mesi\",y:\"un anno\",yy:\"%d anni\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})}(n(381))},626:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"it\",{months:\"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre\".split(\"_\"),monthsShort:\"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic\".split(\"_\"),weekdays:\"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato\".split(\"_\"),weekdaysShort:\"dom_lun_mar_mer_gio_ven_sab\".split(\"_\"),weekdaysMin:\"do_lu_ma_me_gi_ve_sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:function(){return\"[Oggi a\"+(this.hours()>1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},nextDay:function(){return\"[Domani a\"+(this.hours()>1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},nextWeek:function(){return\"dddd [a\"+(this.hours()>1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},lastDay:function(){return\"[Ieri a\"+(this.hours()>1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},lastWeek:function(){return 0===this.day()?\"[La scorsa] dddd [a\"+(this.hours()>1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\":\"[Lo scorso] dddd [a\"+(this.hours()>1?\"lle \":0===this.hours()?\" \":\"ll'\")+\"]LT\"},sameElse:\"L\"},relativeTime:{future:\"tra %s\",past:\"%s fa\",s:\"alcuni secondi\",ss:\"%d secondi\",m:\"un minuto\",mm:\"%d minuti\",h:\"un'ora\",hh:\"%d ore\",d:\"un giorno\",dd:\"%d giorni\",w:\"una settimana\",ww:\"%d settimane\",M:\"un mese\",MM:\"%d mesi\",y:\"un anno\",yy:\"%d anni\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})}(n(381))},9183:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"ja\",{eras:[{since:\"2019-05-01\",offset:1,name:\"令和\",narrow:\"㋿\",abbr:\"R\"},{since:\"1989-01-08\",until:\"2019-04-30\",offset:1,name:\"平成\",narrow:\"㍻\",abbr:\"H\"},{since:\"1926-12-25\",until:\"1989-01-07\",offset:1,name:\"昭和\",narrow:\"㍼\",abbr:\"S\"},{since:\"1912-07-30\",until:\"1926-12-24\",offset:1,name:\"大正\",narrow:\"㍽\",abbr:\"T\"},{since:\"1873-01-01\",until:\"1912-07-29\",offset:6,name:\"明治\",narrow:\"㍾\",abbr:\"M\"},{since:\"0001-01-01\",until:\"1873-12-31\",offset:1,name:\"西暦\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"紀元前\",narrow:\"BC\",abbr:\"BC\"}],eraYearOrdinalRegex:/(元|\\d+)年/,eraYearOrdinalParse:function(e,t){return\"元\"===t[1]?1:parseInt(t[1]||e,10)},months:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),weekdays:\"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日\".split(\"_\"),weekdaysShort:\"日_月_火_水_木_金_土\".split(\"_\"),weekdaysMin:\"日_月_火_水_木_金_土\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日 HH:mm\",LLLL:\"YYYY年M月D日 dddd HH:mm\",l:\"YYYY/MM/DD\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日(ddd) HH:mm\"},meridiemParse:/午前|午後/i,isPM:function(e){return\"午後\"===e},meridiem:function(e,t,n){return e<12?\"午前\":\"午後\"},calendar:{sameDay:\"[今日] LT\",nextDay:\"[明日] LT\",nextWeek:function(e){return e.week()!==this.week()?\"[来週]dddd LT\":\"dddd LT\"},lastDay:\"[昨日] LT\",lastWeek:function(e){return this.week()!==e.week()?\"[先週]dddd LT\":\"dddd LT\"},sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}日/,ordinal:function(e,t){switch(t){case\"y\":return 1===e?\"元年\":e+\"年\";case\"d\":case\"D\":case\"DDD\":return e+\"日\";default:return e}},relativeTime:{future:\"%s後\",past:\"%s前\",s:\"数秒\",ss:\"%d秒\",m:\"1分\",mm:\"%d分\",h:\"1時間\",hh:\"%d時間\",d:\"1日\",dd:\"%d日\",M:\"1ヶ月\",MM:\"%dヶ月\",y:\"1年\",yy:\"%d年\"}})}(n(381))},4286:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"jv\",{months:\"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des\".split(\"_\"),weekdays:\"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu\".split(\"_\"),weekdaysShort:\"Min_Sen_Sel_Reb_Kem_Jem_Sep\".split(\"_\"),weekdaysMin:\"Mg_Sn_Sl_Rb_Km_Jm_Sp\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,t){return 12===e&&(e=0),\"enjing\"===t?e:\"siyang\"===t?e>=11?e:e+12:\"sonten\"===t||\"ndalu\"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?\"enjing\":e<15?\"siyang\":e<19?\"sonten\":\"ndalu\"},calendar:{sameDay:\"[Dinten puniko pukul] LT\",nextDay:\"[Mbenjang pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kala wingi pukul] LT\",lastWeek:\"dddd [kepengker pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"wonten ing %s\",past:\"%s ingkang kepengker\",s:\"sawetawis detik\",ss:\"%d detik\",m:\"setunggal menit\",mm:\"%d menit\",h:\"setunggal jam\",hh:\"%d jam\",d:\"sedinten\",dd:\"%d dinten\",M:\"sewulan\",MM:\"%d wulan\",y:\"setaun\",yy:\"%d taun\"},week:{dow:1,doy:7}})}(n(381))},2105:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"ka\",{months:\"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი\".split(\"_\"),monthsShort:\"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ\".split(\"_\"),weekdays:{standalone:\"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი\".split(\"_\"),format:\"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს\".split(\"_\"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:\"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ\".split(\"_\"),weekdaysMin:\"კვ_ორ_სა_ოთ_ხუ_პა_შა\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[დღეს] LT[-ზე]\",nextDay:\"[ხვალ] LT[-ზე]\",lastDay:\"[გუშინ] LT[-ზე]\",nextWeek:\"[შემდეგ] dddd LT[-ზე]\",lastWeek:\"[წინა] dddd LT-ზე\",sameElse:\"L\"},relativeTime:{future:function(e){return e.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,(function(e,t,n){return\"ი\"===n?t+\"ში\":t+n+\"ში\"}))},past:function(e){return/(წამი|წუთი|საათი|დღე|თვე)/.test(e)?e.replace(/(ი|ე)$/,\"ის წინ\"):/წელი/.test(e)?e.replace(/წელი$/,\"წლის წინ\"):e},s:\"რამდენიმე წამი\",ss:\"%d წამი\",m:\"წუთი\",mm:\"%d წუთი\",h:\"საათი\",hh:\"%d საათი\",d:\"დღე\",dd:\"%d დღე\",M:\"თვე\",MM:\"%d თვე\",y:\"წელი\",yy:\"%d წელი\"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,ordinal:function(e){return 0===e?e:1===e?e+\"-ლი\":e<20||e<=100&&e%20==0||e%100==0?\"მე-\"+e:e+\"-ე\"},week:{dow:1,doy:7}})}(n(381))},7772:function(e,t,n){!function(e){\"use strict\";var t={0:\"-ші\",1:\"-ші\",2:\"-ші\",3:\"-ші\",4:\"-ші\",5:\"-ші\",6:\"-шы\",7:\"-ші\",8:\"-ші\",9:\"-шы\",10:\"-шы\",20:\"-шы\",30:\"-шы\",40:\"-шы\",50:\"-ші\",60:\"-шы\",70:\"-ші\",80:\"-ші\",90:\"-шы\",100:\"-ші\"};e.defineLocale(\"kk\",{months:\"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан\".split(\"_\"),monthsShort:\"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел\".split(\"_\"),weekdays:\"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі\".split(\"_\"),weekdaysShort:\"жек_дүй_сей_сәр_бей_жұм_сен\".split(\"_\"),weekdaysMin:\"жк_дй_сй_ср_бй_жм_сн\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Бүгін сағат] LT\",nextDay:\"[Ертең сағат] LT\",nextWeek:\"dddd [сағат] LT\",lastDay:\"[Кеше сағат] LT\",lastWeek:\"[Өткен аптаның] dddd [сағат] LT\",sameElse:\"L\"},relativeTime:{future:\"%s ішінде\",past:\"%s бұрын\",s:\"бірнеше секунд\",ss:\"%d секунд\",m:\"бір минут\",mm:\"%d минут\",h:\"бір сағат\",hh:\"%d сағат\",d:\"бір күн\",dd:\"%d күн\",M:\"бір ай\",MM:\"%d ай\",y:\"бір жыл\",yy:\"%d жыл\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ші|шы)/,ordinal:function(e){var n=e%10,r=e>=100?100:null;return e+(t[e]||t[n]||t[r])},week:{dow:1,doy:7}})}(n(381))},8758:function(e,t,n){!function(e){\"use strict\";var t={1:\"១\",2:\"២\",3:\"៣\",4:\"៤\",5:\"៥\",6:\"៦\",7:\"៧\",8:\"៨\",9:\"៩\",0:\"០\"},n={\"១\":\"1\",\"២\":\"2\",\"៣\":\"3\",\"៤\":\"4\",\"៥\":\"5\",\"៦\":\"6\",\"៧\":\"7\",\"៨\":\"8\",\"៩\":\"9\",\"០\":\"0\"};e.defineLocale(\"km\",{months:\"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ\".split(\"_\"),monthsShort:\"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ\".split(\"_\"),weekdays:\"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍\".split(\"_\"),weekdaysShort:\"អា_ច_អ_ព_ព្រ_សុ_ស\".split(\"_\"),weekdaysMin:\"អា_ច_អ_ព_ព្រ_សុ_ស\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiemParse:/ព្រឹក|ល្ងាច/,isPM:function(e){return\"ល្ងាច\"===e},meridiem:function(e,t,n){return e<12?\"ព្រឹក\":\"ល្ងាច\"},calendar:{sameDay:\"[ថ្ងៃនេះ ម៉ោង] LT\",nextDay:\"[ស្អែក ម៉ោង] LT\",nextWeek:\"dddd [ម៉ោង] LT\",lastDay:\"[ម្សិលមិញ ម៉ោង] LT\",lastWeek:\"dddd [សប្តាហ៍មុន] [ម៉ោង] LT\",sameElse:\"L\"},relativeTime:{future:\"%sទៀត\",past:\"%sមុន\",s:\"ប៉ុន្មានវិនាទី\",ss:\"%d វិនាទី\",m:\"មួយនាទី\",mm:\"%d នាទី\",h:\"មួយម៉ោង\",hh:\"%d ម៉ោង\",d:\"មួយថ្ងៃ\",dd:\"%d ថ្ងៃ\",M:\"មួយខែ\",MM:\"%d ខែ\",y:\"មួយឆ្នាំ\",yy:\"%d ឆ្នាំ\"},dayOfMonthOrdinalParse:/ទី\\d{1,2}/,ordinal:\"ទី%d\",preparse:function(e){return e.replace(/[១២៣៤៥៦៧៨៩០]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]}))},week:{dow:1,doy:4}})}(n(381))},9282:function(e,t,n){!function(e){\"use strict\";var t={1:\"೧\",2:\"೨\",3:\"೩\",4:\"೪\",5:\"೫\",6:\"೬\",7:\"೭\",8:\"೮\",9:\"೯\",0:\"೦\"},n={\"೧\":\"1\",\"೨\":\"2\",\"೩\":\"3\",\"೪\":\"4\",\"೫\":\"5\",\"೬\":\"6\",\"೭\":\"7\",\"೮\":\"8\",\"೯\":\"9\",\"೦\":\"0\"};e.defineLocale(\"kn\",{months:\"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್\".split(\"_\"),monthsShort:\"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ\".split(\"_\"),monthsParseExact:!0,weekdays:\"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ\".split(\"_\"),weekdaysShort:\"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ\".split(\"_\"),weekdaysMin:\"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm\",LLLL:\"dddd, D MMMM YYYY, A h:mm\"},calendar:{sameDay:\"[ಇಂದು] LT\",nextDay:\"[ನಾಳೆ] LT\",nextWeek:\"dddd, LT\",lastDay:\"[ನಿನ್ನೆ] LT\",lastWeek:\"[ಕೊನೆಯ] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s ನಂತರ\",past:\"%s ಹಿಂದೆ\",s:\"ಕೆಲವು ಕ್ಷಣಗಳು\",ss:\"%d ಸೆಕೆಂಡುಗಳು\",m:\"ಒಂದು ನಿಮಿಷ\",mm:\"%d ನಿಮಿಷ\",h:\"ಒಂದು ಗಂಟೆ\",hh:\"%d ಗಂಟೆ\",d:\"ಒಂದು ದಿನ\",dd:\"%d ದಿನ\",M:\"ಒಂದು ತಿಂಗಳು\",MM:\"%d ತಿಂಗಳು\",y:\"ಒಂದು ವರ್ಷ\",yy:\"%d ವರ್ಷ\"},preparse:function(e){return e.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]}))},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(e,t){return 12===e&&(e=0),\"ರಾತ್ರಿ\"===t?e<4?e:e+12:\"ಬೆಳಿಗ್ಗೆ\"===t?e:\"ಮಧ್ಯಾಹ್ನ\"===t?e>=10?e:e+12:\"ಸಂಜೆ\"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?\"ರಾತ್ರಿ\":e<10?\"ಬೆಳಿಗ್ಗೆ\":e<17?\"ಮಧ್ಯಾಹ್ನ\":e<20?\"ಸಂಜೆ\":\"ರಾತ್ರಿ\"},dayOfMonthOrdinalParse:/\\d{1,2}(ನೇ)/,ordinal:function(e){return e+\"ನೇ\"},week:{dow:0,doy:6}})}(n(381))},3730:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"ko\",{months:\"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월\".split(\"_\"),monthsShort:\"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월\".split(\"_\"),weekdays:\"일요일_월요일_화요일_수요일_목요일_금요일_토요일\".split(\"_\"),weekdaysShort:\"일_월_화_수_목_금_토\".split(\"_\"),weekdaysMin:\"일_월_화_수_목_금_토\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"YYYY.MM.DD.\",LL:\"YYYY년 MMMM D일\",LLL:\"YYYY년 MMMM D일 A h:mm\",LLLL:\"YYYY년 MMMM D일 dddd A h:mm\",l:\"YYYY.MM.DD.\",ll:\"YYYY년 MMMM D일\",lll:\"YYYY년 MMMM D일 A h:mm\",llll:\"YYYY년 MMMM D일 dddd A h:mm\"},calendar:{sameDay:\"오늘 LT\",nextDay:\"내일 LT\",nextWeek:\"dddd LT\",lastDay:\"어제 LT\",lastWeek:\"지난주 dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s 후\",past:\"%s 전\",s:\"몇 초\",ss:\"%d초\",m:\"1분\",mm:\"%d분\",h:\"한 시간\",hh:\"%d시간\",d:\"하루\",dd:\"%d일\",M:\"한 달\",MM:\"%d달\",y:\"일 년\",yy:\"%d년\"},dayOfMonthOrdinalParse:/\\d{1,2}(일|월|주)/,ordinal:function(e,t){switch(t){case\"d\":case\"D\":case\"DDD\":return e+\"일\";case\"M\":return e+\"월\";case\"w\":case\"W\":return e+\"주\";default:return e}},meridiemParse:/오전|오후/,isPM:function(e){return\"오후\"===e},meridiem:function(e,t,n){return e<12?\"오전\":\"오후\"}})}(n(381))},1408:function(e,t,n){!function(e){\"use strict\";var t={1:\"١\",2:\"٢\",3:\"٣\",4:\"٤\",5:\"٥\",6:\"٦\",7:\"٧\",8:\"٨\",9:\"٩\",0:\"٠\"},n={\"١\":\"1\",\"٢\":\"2\",\"٣\":\"3\",\"٤\":\"4\",\"٥\":\"5\",\"٦\":\"6\",\"٧\":\"7\",\"٨\":\"8\",\"٩\":\"9\",\"٠\":\"0\"},r=[\"کانونی دووەم\",\"شوبات\",\"ئازار\",\"نیسان\",\"ئایار\",\"حوزەیران\",\"تەمموز\",\"ئاب\",\"ئەیلوول\",\"تشرینی یەكەم\",\"تشرینی دووەم\",\"كانونی یەکەم\"];e.defineLocale(\"ku\",{months:r,monthsShort:r,weekdays:\"یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌\".split(\"_\"),weekdaysShort:\"یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌\".split(\"_\"),weekdaysMin:\"ی_د_س_چ_پ_ه_ش\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiemParse:/ئێواره‌|به‌یانی/,isPM:function(e){return/ئێواره‌/.test(e)},meridiem:function(e,t,n){return e<12?\"به‌یانی\":\"ئێواره‌\"},calendar:{sameDay:\"[ئه‌مرۆ كاتژمێر] LT\",nextDay:\"[به‌یانی كاتژمێر] LT\",nextWeek:\"dddd [كاتژمێر] LT\",lastDay:\"[دوێنێ كاتژمێر] LT\",lastWeek:\"dddd [كاتژمێر] LT\",sameElse:\"L\"},relativeTime:{future:\"له‌ %s\",past:\"%s\",s:\"چه‌ند چركه‌یه‌ك\",ss:\"چركه‌ %d\",m:\"یه‌ك خوله‌ك\",mm:\"%d خوله‌ك\",h:\"یه‌ك كاتژمێر\",hh:\"%d كاتژمێر\",d:\"یه‌ك ڕۆژ\",dd:\"%d ڕۆژ\",M:\"یه‌ك مانگ\",MM:\"%d مانگ\",y:\"یه‌ك ساڵ\",yy:\"%d ساڵ\"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).replace(/،/g,\",\")},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]})).replace(/,/g,\"،\")},week:{dow:6,doy:12}})}(n(381))},3291:function(e,t,n){!function(e){\"use strict\";var t={0:\"-чү\",1:\"-чи\",2:\"-чи\",3:\"-чү\",4:\"-чү\",5:\"-чи\",6:\"-чы\",7:\"-чи\",8:\"-чи\",9:\"-чу\",10:\"-чу\",20:\"-чы\",30:\"-чу\",40:\"-чы\",50:\"-чү\",60:\"-чы\",70:\"-чи\",80:\"-чи\",90:\"-чу\",100:\"-чү\"};e.defineLocale(\"ky\",{months:\"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь\".split(\"_\"),monthsShort:\"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек\".split(\"_\"),weekdays:\"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби\".split(\"_\"),weekdaysShort:\"Жек_Дүй_Шей_Шар_Бей_Жум_Ише\".split(\"_\"),weekdaysMin:\"Жк_Дй_Шй_Шр_Бй_Жм_Иш\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Бүгүн саат] LT\",nextDay:\"[Эртең саат] LT\",nextWeek:\"dddd [саат] LT\",lastDay:\"[Кечээ саат] LT\",lastWeek:\"[Өткөн аптанын] dddd [күнү] [саат] LT\",sameElse:\"L\"},relativeTime:{future:\"%s ичинде\",past:\"%s мурун\",s:\"бирнече секунд\",ss:\"%d секунд\",m:\"бир мүнөт\",mm:\"%d мүнөт\",h:\"бир саат\",hh:\"%d саат\",d:\"бир күн\",dd:\"%d күн\",M:\"бир ай\",MM:\"%d ай\",y:\"бир жыл\",yy:\"%d жыл\"},dayOfMonthOrdinalParse:/\\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(e){var n=e%10,r=e>=100?100:null;return e+(t[e]||t[n]||t[r])},week:{dow:1,doy:7}})}(n(381))},6841:function(e,t,n){!function(e){\"use strict\";function t(e,t,n,r){var o={m:[\"eng Minutt\",\"enger Minutt\"],h:[\"eng Stonn\",\"enger Stonn\"],d:[\"een Dag\",\"engem Dag\"],M:[\"ee Mount\",\"engem Mount\"],y:[\"ee Joer\",\"engem Joer\"]};return t?o[n][0]:o[n][1]}function n(e){return o(e.substr(0,e.indexOf(\" \")))?\"a \"+e:\"an \"+e}function r(e){return o(e.substr(0,e.indexOf(\" \")))?\"viru \"+e:\"virun \"+e}function o(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var t=e%10;return o(0===t?e/10:t)}if(e<1e4){for(;e>=10;)e/=10;return o(e)}return o(e/=1e3)}e.defineLocale(\"lb\",{months:\"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg\".split(\"_\"),weekdaysShort:\"So._Mé._Dë._Më._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mé_Dë_Më_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm [Auer]\",LTS:\"H:mm:ss [Auer]\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm [Auer]\",LLLL:\"dddd, D. MMMM YYYY H:mm [Auer]\"},calendar:{sameDay:\"[Haut um] LT\",sameElse:\"L\",nextDay:\"[Muer um] LT\",nextWeek:\"dddd [um] LT\",lastDay:\"[Gëschter um] LT\",lastWeek:function(){switch(this.day()){case 2:case 4:return\"[Leschten] dddd [um] LT\";default:return\"[Leschte] dddd [um] LT\"}}},relativeTime:{future:n,past:r,s:\"e puer Sekonnen\",ss:\"%d Sekonnen\",m:t,mm:\"%d Minutten\",h:t,hh:\"%d Stonnen\",d:t,dd:\"%d Deeg\",M:t,MM:\"%d Méint\",y:t,yy:\"%d Joer\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},5466:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"lo\",{months:\"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ\".split(\"_\"),monthsShort:\"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ\".split(\"_\"),weekdays:\"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ\".split(\"_\"),weekdaysShort:\"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ\".split(\"_\"),weekdaysMin:\"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"ວັນdddd D MMMM YYYY HH:mm\"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(e){return\"ຕອນແລງ\"===e},meridiem:function(e,t,n){return e<12?\"ຕອນເຊົ້າ\":\"ຕອນແລງ\"},calendar:{sameDay:\"[ມື້ນີ້ເວລາ] LT\",nextDay:\"[ມື້ອື່ນເວລາ] LT\",nextWeek:\"[ວັນ]dddd[ໜ້າເວລາ] LT\",lastDay:\"[ມື້ວານນີ້ເວລາ] LT\",lastWeek:\"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT\",sameElse:\"L\"},relativeTime:{future:\"ອີກ %s\",past:\"%sຜ່ານມາ\",s:\"ບໍ່ເທົ່າໃດວິນາທີ\",ss:\"%d ວິນາທີ\",m:\"1 ນາທີ\",mm:\"%d ນາທີ\",h:\"1 ຊົ່ວໂມງ\",hh:\"%d ຊົ່ວໂມງ\",d:\"1 ມື້\",dd:\"%d ມື້\",M:\"1 ເດືອນ\",MM:\"%d ເດືອນ\",y:\"1 ປີ\",yy:\"%d ປີ\"},dayOfMonthOrdinalParse:/(ທີ່)\\d{1,2}/,ordinal:function(e){return\"ທີ່\"+e}})}(n(381))},7010:function(e,t,n){!function(e){\"use strict\";var t={ss:\"sekundė_sekundžių_sekundes\",m:\"minutė_minutės_minutę\",mm:\"minutės_minučių_minutes\",h:\"valanda_valandos_valandą\",hh:\"valandos_valandų_valandas\",d:\"diena_dienos_dieną\",dd:\"dienos_dienų_dienas\",M:\"mėnuo_mėnesio_mėnesį\",MM:\"mėnesiai_mėnesių_mėnesius\",y:\"metai_metų_metus\",yy:\"metai_metų_metus\"};function n(e,t,n,r){return t?\"kelios sekundės\":r?\"kelių sekundžių\":\"kelias sekundes\"}function r(e,t,n,r){return t?i(n)[0]:r?i(n)[1]:i(n)[2]}function o(e){return e%10==0||e>10&&e<20}function i(e){return t[e].split(\"_\")}function s(e,t,n,s){var a=e+\" \";return 1===e?a+r(e,t,n[0],s):t?a+(o(e)?i(n)[1]:i(n)[0]):s?a+i(n)[1]:a+(o(e)?i(n)[1]:i(n)[2])}e.defineLocale(\"lt\",{months:{format:\"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio\".split(\"_\"),standalone:\"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis\".split(\"_\"),isFormat:/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/},monthsShort:\"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd\".split(\"_\"),weekdays:{format:\"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį\".split(\"_\"),standalone:\"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis\".split(\"_\"),isFormat:/dddd HH:mm/},weekdaysShort:\"Sek_Pir_Ant_Tre_Ket_Pen_Šeš\".split(\"_\"),weekdaysMin:\"S_P_A_T_K_Pn_Š\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY [m.] MMMM D [d.]\",LLL:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",LLLL:\"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]\",l:\"YYYY-MM-DD\",ll:\"YYYY [m.] MMMM D [d.]\",lll:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",llll:\"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]\"},calendar:{sameDay:\"[Šiandien] LT\",nextDay:\"[Rytoj] LT\",nextWeek:\"dddd LT\",lastDay:\"[Vakar] LT\",lastWeek:\"[Praėjusį] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"po %s\",past:\"prieš %s\",s:n,ss:s,m:r,mm:s,h:r,hh:s,d:r,dd:s,M:r,MM:s,y:r,yy:s},dayOfMonthOrdinalParse:/\\d{1,2}-oji/,ordinal:function(e){return e+\"-oji\"},week:{dow:1,doy:4}})}(n(381))},7595:function(e,t,n){!function(e){\"use strict\";var t={ss:\"sekundes_sekundēm_sekunde_sekundes\".split(\"_\"),m:\"minūtes_minūtēm_minūte_minūtes\".split(\"_\"),mm:\"minūtes_minūtēm_minūte_minūtes\".split(\"_\"),h:\"stundas_stundām_stunda_stundas\".split(\"_\"),hh:\"stundas_stundām_stunda_stundas\".split(\"_\"),d:\"dienas_dienām_diena_dienas\".split(\"_\"),dd:\"dienas_dienām_diena_dienas\".split(\"_\"),M:\"mēneša_mēnešiem_mēnesis_mēneši\".split(\"_\"),MM:\"mēneša_mēnešiem_mēnesis_mēneši\".split(\"_\"),y:\"gada_gadiem_gads_gadi\".split(\"_\"),yy:\"gada_gadiem_gads_gadi\".split(\"_\")};function n(e,t,n){return n?t%10==1&&t%100!=11?e[2]:e[3]:t%10==1&&t%100!=11?e[0]:e[1]}function r(e,r,o){return e+\" \"+n(t[o],e,r)}function o(e,r,o){return n(t[o],e,r)}function i(e,t){return t?\"dažas sekundes\":\"dažām sekundēm\"}e.defineLocale(\"lv\",{months:\"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena\".split(\"_\"),weekdaysShort:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),weekdaysMin:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY.\",LL:\"YYYY. [gada] D. MMMM\",LLL:\"YYYY. [gada] D. MMMM, HH:mm\",LLLL:\"YYYY. [gada] D. MMMM, dddd, HH:mm\"},calendar:{sameDay:\"[Šodien pulksten] LT\",nextDay:\"[Rīt pulksten] LT\",nextWeek:\"dddd [pulksten] LT\",lastDay:\"[Vakar pulksten] LT\",lastWeek:\"[Pagājušā] dddd [pulksten] LT\",sameElse:\"L\"},relativeTime:{future:\"pēc %s\",past:\"pirms %s\",s:i,ss:r,m:o,mm:r,h:o,hh:r,d:o,dd:r,M:o,MM:r,y:o,yy:r},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},9861:function(e,t,n){!function(e){\"use strict\";var t={words:{ss:[\"sekund\",\"sekunda\",\"sekundi\"],m:[\"jedan minut\",\"jednog minuta\"],mm:[\"minut\",\"minuta\",\"minuta\"],h:[\"jedan sat\",\"jednog sata\"],hh:[\"sat\",\"sata\",\"sati\"],dd:[\"dan\",\"dana\",\"dana\"],MM:[\"mjesec\",\"mjeseca\",\"mjeseci\"],yy:[\"godina\",\"godine\",\"godina\"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,n,r){var o=t.words[r];return 1===r.length?n?o[0]:o[1]:e+\" \"+t.correctGrammaticalCase(e,o)}};e.defineLocale(\"me\",{months:\"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._čet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_če_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sjutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[juče u] LT\",lastWeek:function(){return[\"[prošle] [nedjelje] [u] LT\",\"[prošlog] [ponedjeljka] [u] LT\",\"[prošlog] [utorka] [u] LT\",\"[prošle] [srijede] [u] LT\",\"[prošlog] [četvrtka] [u] LT\",\"[prošlog] [petka] [u] LT\",\"[prošle] [subote] [u] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"nekoliko sekundi\",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:\"dan\",dd:t.translate,M:\"mjesec\",MM:t.translate,y:\"godinu\",yy:t.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(381))},5493:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"mi\",{months:\"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea\".split(\"_\"),monthsShort:\"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki\".split(\"_\"),monthsRegex:/(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,monthsShortRegex:/(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,weekdays:\"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei\".split(\"_\"),weekdaysShort:\"Ta_Ma_Tū_We_Tāi_Pa_Hā\".split(\"_\"),weekdaysMin:\"Ta_Ma_Tū_We_Tāi_Pa_Hā\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [i] HH:mm\",LLLL:\"dddd, D MMMM YYYY [i] HH:mm\"},calendar:{sameDay:\"[i teie mahana, i] LT\",nextDay:\"[apopo i] LT\",nextWeek:\"dddd [i] LT\",lastDay:\"[inanahi i] LT\",lastWeek:\"dddd [whakamutunga i] LT\",sameElse:\"L\"},relativeTime:{future:\"i roto i %s\",past:\"%s i mua\",s:\"te hēkona ruarua\",ss:\"%d hēkona\",m:\"he meneti\",mm:\"%d meneti\",h:\"te haora\",hh:\"%d haora\",d:\"he ra\",dd:\"%d ra\",M:\"he marama\",MM:\"%d marama\",y:\"he tau\",yy:\"%d tau\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})}(n(381))},5966:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"mk\",{months:\"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември\".split(\"_\"),monthsShort:\"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек\".split(\"_\"),weekdays:\"недела_понеделник_вторник_среда_четврток_петок_сабота\".split(\"_\"),weekdaysShort:\"нед_пон_вто_сре_чет_пет_саб\".split(\"_\"),weekdaysMin:\"нe_пo_вт_ср_че_пе_сa\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[Денес во] LT\",nextDay:\"[Утре во] LT\",nextWeek:\"[Во] dddd [во] LT\",lastDay:\"[Вчера во] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\"[Изминатата] dddd [во] LT\";case 1:case 2:case 4:case 5:return\"[Изминатиот] dddd [во] LT\"}},sameElse:\"L\"},relativeTime:{future:\"за %s\",past:\"пред %s\",s:\"неколку секунди\",ss:\"%d секунди\",m:\"една минута\",mm:\"%d минути\",h:\"еден час\",hh:\"%d часа\",d:\"еден ден\",dd:\"%d дена\",M:\"еден месец\",MM:\"%d месеци\",y:\"една година\",yy:\"%d години\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+\"-ев\":0===n?e+\"-ен\":n>10&&n<20?e+\"-ти\":1===t?e+\"-ви\":2===t?e+\"-ри\":7===t||8===t?e+\"-ми\":e+\"-ти\"},week:{dow:1,doy:7}})}(n(381))},7341:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"ml\",{months:\"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ\".split(\"_\"),monthsShort:\"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.\".split(\"_\"),monthsParseExact:!0,weekdays:\"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച\".split(\"_\"),weekdaysShort:\"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി\".split(\"_\"),weekdaysMin:\"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ\".split(\"_\"),longDateFormat:{LT:\"A h:mm -നു\",LTS:\"A h:mm:ss -നു\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm -നു\",LLLL:\"dddd, D MMMM YYYY, A h:mm -നു\"},calendar:{sameDay:\"[ഇന്ന്] LT\",nextDay:\"[നാളെ] LT\",nextWeek:\"dddd, LT\",lastDay:\"[ഇന്നലെ] LT\",lastWeek:\"[കഴിഞ്ഞ] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s കഴിഞ്ഞ്\",past:\"%s മുൻപ്\",s:\"അൽപ നിമിഷങ്ങൾ\",ss:\"%d സെക്കൻഡ്\",m:\"ഒരു മിനിറ്റ്\",mm:\"%d മിനിറ്റ്\",h:\"ഒരു മണിക്കൂർ\",hh:\"%d മണിക്കൂർ\",d:\"ഒരു ദിവസം\",dd:\"%d ദിവസം\",M:\"ഒരു മാസം\",MM:\"%d മാസം\",y:\"ഒരു വർഷം\",yy:\"%d വർഷം\"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(e,t){return 12===e&&(e=0),\"രാത്രി\"===t&&e>=4||\"ഉച്ച കഴിഞ്ഞ്\"===t||\"വൈകുന്നേരം\"===t?e+12:e},meridiem:function(e,t,n){return e<4?\"രാത്രി\":e<12?\"രാവിലെ\":e<17?\"ഉച്ച കഴിഞ്ഞ്\":e<20?\"വൈകുന്നേരം\":\"രാത്രി\"}})}(n(381))},5115:function(e,t,n){!function(e){\"use strict\";function t(e,t,n,r){switch(n){case\"s\":return t?\"хэдхэн секунд\":\"хэдхэн секундын\";case\"ss\":return e+(t?\" секунд\":\" секундын\");case\"m\":case\"mm\":return e+(t?\" минут\":\" минутын\");case\"h\":case\"hh\":return e+(t?\" цаг\":\" цагийн\");case\"d\":case\"dd\":return e+(t?\" өдөр\":\" өдрийн\");case\"M\":case\"MM\":return e+(t?\" сар\":\" сарын\");case\"y\":case\"yy\":return e+(t?\" жил\":\" жилийн\");default:return e}}e.defineLocale(\"mn\",{months:\"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар\".split(\"_\"),monthsShort:\"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар\".split(\"_\"),monthsParseExact:!0,weekdays:\"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба\".split(\"_\"),weekdaysShort:\"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям\".split(\"_\"),weekdaysMin:\"Ня_Да_Мя_Лх_Пү_Ба_Бя\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY оны MMMMын D\",LLL:\"YYYY оны MMMMын D HH:mm\",LLLL:\"dddd, YYYY оны MMMMын D HH:mm\"},meridiemParse:/ҮӨ|ҮХ/i,isPM:function(e){return\"ҮХ\"===e},meridiem:function(e,t,n){return e<12?\"ҮӨ\":\"ҮХ\"},calendar:{sameDay:\"[Өнөөдөр] LT\",nextDay:\"[Маргааш] LT\",nextWeek:\"[Ирэх] dddd LT\",lastDay:\"[Өчигдөр] LT\",lastWeek:\"[Өнгөрсөн] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s дараа\",past:\"%s өмнө\",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2} өдөр/,ordinal:function(e,t){switch(t){case\"d\":case\"D\":case\"DDD\":return e+\" өдөр\";default:return e}}})}(n(381))},370:function(e,t,n){!function(e){\"use strict\";var t={1:\"१\",2:\"२\",3:\"३\",4:\"४\",5:\"५\",6:\"६\",7:\"७\",8:\"८\",9:\"९\",0:\"०\"},n={\"१\":\"1\",\"२\":\"2\",\"३\":\"3\",\"४\":\"4\",\"५\":\"5\",\"६\":\"6\",\"७\":\"7\",\"८\":\"8\",\"९\":\"9\",\"०\":\"0\"};function r(e,t,n,r){var o=\"\";if(t)switch(n){case\"s\":o=\"काही सेकंद\";break;case\"ss\":o=\"%d सेकंद\";break;case\"m\":o=\"एक मिनिट\";break;case\"mm\":o=\"%d मिनिटे\";break;case\"h\":o=\"एक तास\";break;case\"hh\":o=\"%d तास\";break;case\"d\":o=\"एक दिवस\";break;case\"dd\":o=\"%d दिवस\";break;case\"M\":o=\"एक महिना\";break;case\"MM\":o=\"%d महिने\";break;case\"y\":o=\"एक वर्ष\";break;case\"yy\":o=\"%d वर्षे\"}else switch(n){case\"s\":o=\"काही सेकंदां\";break;case\"ss\":o=\"%d सेकंदां\";break;case\"m\":o=\"एका मिनिटा\";break;case\"mm\":o=\"%d मिनिटां\";break;case\"h\":o=\"एका तासा\";break;case\"hh\":o=\"%d तासां\";break;case\"d\":o=\"एका दिवसा\";break;case\"dd\":o=\"%d दिवसां\";break;case\"M\":o=\"एका महिन्या\";break;case\"MM\":o=\"%d महिन्यां\";break;case\"y\":o=\"एका वर्षा\";break;case\"yy\":o=\"%d वर्षां\"}return o.replace(/%d/i,e)}e.defineLocale(\"mr\",{months:\"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर\".split(\"_\"),monthsShort:\"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.\".split(\"_\"),monthsParseExact:!0,weekdays:\"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार\".split(\"_\"),weekdaysShort:\"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि\".split(\"_\"),weekdaysMin:\"र_सो_मं_बु_गु_शु_श\".split(\"_\"),longDateFormat:{LT:\"A h:mm वाजता\",LTS:\"A h:mm:ss वाजता\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm वाजता\",LLLL:\"dddd, D MMMM YYYY, A h:mm वाजता\"},calendar:{sameDay:\"[आज] LT\",nextDay:\"[उद्या] LT\",nextWeek:\"dddd, LT\",lastDay:\"[काल] LT\",lastWeek:\"[मागील] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%sमध्ये\",past:\"%sपूर्वी\",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]}))},meridiemParse:/पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,meridiemHour:function(e,t){return 12===e&&(e=0),\"पहाटे\"===t||\"सकाळी\"===t?e:\"दुपारी\"===t||\"सायंकाळी\"===t||\"रात्री\"===t?e>=12?e:e+12:void 0},meridiem:function(e,t,n){return e>=0&&e<6?\"पहाटे\":e<12?\"सकाळी\":e<17?\"दुपारी\":e<20?\"सायंकाळी\":\"रात्री\"},week:{dow:0,doy:6}})}(n(381))},1237:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"ms-my\",{months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),\"pagi\"===t?e:\"tengahari\"===t?e>=11?e:e+12:\"petang\"===t||\"malam\"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?\"pagi\":e<15?\"tengahari\":e<19?\"petang\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Esok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kelmarin pukul] LT\",lastWeek:\"dddd [lepas pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",ss:\"%d saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})}(n(381))},9847:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"ms\",{months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),\"pagi\"===t?e:\"tengahari\"===t?e>=11?e:e+12:\"petang\"===t||\"malam\"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?\"pagi\":e<15?\"tengahari\":e<19?\"petang\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Esok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kelmarin pukul] LT\",lastWeek:\"dddd [lepas pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",ss:\"%d saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})}(n(381))},2126:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"mt\",{months:\"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru\".split(\"_\"),monthsShort:\"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ\".split(\"_\"),weekdays:\"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt\".split(\"_\"),weekdaysShort:\"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib\".split(\"_\"),weekdaysMin:\"Ħa_Tn_Tl_Er_Ħa_Ġi_Si\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Illum fil-]LT\",nextDay:\"[Għada fil-]LT\",nextWeek:\"dddd [fil-]LT\",lastDay:\"[Il-bieraħ fil-]LT\",lastWeek:\"dddd [li għadda] [fil-]LT\",sameElse:\"L\"},relativeTime:{future:\"f’ %s\",past:\"%s ilu\",s:\"ftit sekondi\",ss:\"%d sekondi\",m:\"minuta\",mm:\"%d minuti\",h:\"siegħa\",hh:\"%d siegħat\",d:\"ġurnata\",dd:\"%d ġranet\",M:\"xahar\",MM:\"%d xhur\",y:\"sena\",yy:\"%d sni\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})}(n(381))},6165:function(e,t,n){!function(e){\"use strict\";var t={1:\"၁\",2:\"၂\",3:\"၃\",4:\"၄\",5:\"၅\",6:\"၆\",7:\"၇\",8:\"၈\",9:\"၉\",0:\"၀\"},n={\"၁\":\"1\",\"၂\":\"2\",\"၃\":\"3\",\"၄\":\"4\",\"၅\":\"5\",\"၆\":\"6\",\"၇\":\"7\",\"၈\":\"8\",\"၉\":\"9\",\"၀\":\"0\"};e.defineLocale(\"my\",{months:\"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ\".split(\"_\"),monthsShort:\"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ\".split(\"_\"),weekdays:\"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ\".split(\"_\"),weekdaysShort:\"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ\".split(\"_\"),weekdaysMin:\"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[ယနေ.] LT [မှာ]\",nextDay:\"[မနက်ဖြန်] LT [မှာ]\",nextWeek:\"dddd LT [မှာ]\",lastDay:\"[မနေ.က] LT [မှာ]\",lastWeek:\"[ပြီးခဲ့သော] dddd LT [မှာ]\",sameElse:\"L\"},relativeTime:{future:\"လာမည့် %s မှာ\",past:\"လွန်ခဲ့သော %s က\",s:\"စက္ကန်.အနည်းငယ်\",ss:\"%d စက္ကန့်\",m:\"တစ်မိနစ်\",mm:\"%d မိနစ်\",h:\"တစ်နာရီ\",hh:\"%d နာရီ\",d:\"တစ်ရက်\",dd:\"%d ရက်\",M:\"တစ်လ\",MM:\"%d လ\",y:\"တစ်နှစ်\",yy:\"%d နှစ်\"},preparse:function(e){return e.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]}))},week:{dow:1,doy:4}})}(n(381))},4924:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"nb\",{months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag\".split(\"_\"),weekdaysShort:\"sø._ma._ti._on._to._fr._lø.\".split(\"_\"),weekdaysMin:\"sø_ma_ti_on_to_fr_lø\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[i dag kl.] LT\",nextDay:\"[i morgen kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[i går kl.] LT\",lastWeek:\"[forrige] dddd [kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"noen sekunder\",ss:\"%d sekunder\",m:\"ett minutt\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dager\",w:\"en uke\",ww:\"%d uker\",M:\"en måned\",MM:\"%d måneder\",y:\"ett år\",yy:\"%d år\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},6744:function(e,t,n){!function(e){\"use strict\";var t={1:\"१\",2:\"२\",3:\"३\",4:\"४\",5:\"५\",6:\"६\",7:\"७\",8:\"८\",9:\"९\",0:\"०\"},n={\"१\":\"1\",\"२\":\"2\",\"३\":\"3\",\"४\":\"4\",\"५\":\"5\",\"६\":\"6\",\"७\":\"7\",\"८\":\"8\",\"९\":\"9\",\"०\":\"0\"};e.defineLocale(\"ne\",{months:\"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर\".split(\"_\"),monthsShort:\"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.\".split(\"_\"),monthsParseExact:!0,weekdays:\"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार\".split(\"_\"),weekdaysShort:\"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.\".split(\"_\"),weekdaysMin:\"आ._सो._मं._बु._बि._शु._श.\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"Aको h:mm बजे\",LTS:\"Aको h:mm:ss बजे\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, Aको h:mm बजे\",LLLL:\"dddd, D MMMM YYYY, Aको h:mm बजे\"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]}))},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(e,t){return 12===e&&(e=0),\"राति\"===t?e<4?e:e+12:\"बिहान\"===t?e:\"दिउँसो\"===t?e>=10?e:e+12:\"साँझ\"===t?e+12:void 0},meridiem:function(e,t,n){return e<3?\"राति\":e<12?\"बिहान\":e<16?\"दिउँसो\":e<20?\"साँझ\":\"राति\"},calendar:{sameDay:\"[आज] LT\",nextDay:\"[भोलि] LT\",nextWeek:\"[आउँदो] dddd[,] LT\",lastDay:\"[हिजो] LT\",lastWeek:\"[गएको] dddd[,] LT\",sameElse:\"L\"},relativeTime:{future:\"%sमा\",past:\"%s अगाडि\",s:\"केही क्षण\",ss:\"%d सेकेण्ड\",m:\"एक मिनेट\",mm:\"%d मिनेट\",h:\"एक घण्टा\",hh:\"%d घण्टा\",d:\"एक दिन\",dd:\"%d दिन\",M:\"एक महिना\",MM:\"%d महिना\",y:\"एक बर्ष\",yy:\"%d बर्ष\"},week:{dow:0,doy:6}})}(n(381))},9814:function(e,t,n){!function(e){\"use strict\";var t=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),n=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],o=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;e.defineLocale(\"nl-be\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:o,monthsShortRegex:o,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"zo_ma_di_wo_do_vr_za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",ss:\"%d seconden\",m:\"één minuut\",mm:\"%d minuten\",h:\"één uur\",hh:\"%d uur\",d:\"één dag\",dd:\"%d dagen\",M:\"één maand\",MM:\"%d maanden\",y:\"één jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(n(381))},3901:function(e,t,n){!function(e){\"use strict\";var t=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),n=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],o=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;e.defineLocale(\"nl\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:o,monthsShortRegex:o,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"zo_ma_di_wo_do_vr_za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",ss:\"%d seconden\",m:\"één minuut\",mm:\"%d minuten\",h:\"één uur\",hh:\"%d uur\",d:\"één dag\",dd:\"%d dagen\",w:\"één week\",ww:\"%d weken\",M:\"één maand\",MM:\"%d maanden\",y:\"één jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})}(n(381))},3877:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"nn\",{months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag\".split(\"_\"),weekdaysShort:\"su._må._ty._on._to._fr._lau.\".split(\"_\"),weekdaysMin:\"su_må_ty_on_to_fr_la\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] H:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[I dag klokka] LT\",nextDay:\"[I morgon klokka] LT\",nextWeek:\"dddd [klokka] LT\",lastDay:\"[I går klokka] LT\",lastWeek:\"[Føregåande] dddd [klokka] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s sidan\",s:\"nokre sekund\",ss:\"%d sekund\",m:\"eit minutt\",mm:\"%d minutt\",h:\"ein time\",hh:\"%d timar\",d:\"ein dag\",dd:\"%d dagar\",w:\"ei veke\",ww:\"%d veker\",M:\"ein månad\",MM:\"%d månader\",y:\"eit år\",yy:\"%d år\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},2135:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"oc-lnc\",{months:{standalone:\"genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre\".split(\"_\"),format:\"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\"_\"),isFormat:/D[oD]?(\\s)+MMMM/},monthsShort:\"gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte\".split(\"_\"),weekdaysShort:\"dg._dl._dm._dc._dj._dv._ds.\".split(\"_\"),weekdaysMin:\"dg_dl_dm_dc_dj_dv_ds\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [de] YYYY\",ll:\"D MMM YYYY\",LLL:\"D MMMM [de] YYYY [a] H:mm\",lll:\"D MMM YYYY, H:mm\",LLLL:\"dddd D MMMM [de] YYYY [a] H:mm\",llll:\"ddd D MMM YYYY, H:mm\"},calendar:{sameDay:\"[uèi a] LT\",nextDay:\"[deman a] LT\",nextWeek:\"dddd [a] LT\",lastDay:\"[ièr a] LT\",lastWeek:\"dddd [passat a] LT\",sameElse:\"L\"},relativeTime:{future:\"d'aquí %s\",past:\"fa %s\",s:\"unas segondas\",ss:\"%d segondas\",m:\"una minuta\",mm:\"%d minutas\",h:\"una ora\",hh:\"%d oras\",d:\"un jorn\",dd:\"%d jorns\",M:\"un mes\",MM:\"%d meses\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=1===e?\"r\":2===e?\"n\":3===e?\"r\":4===e?\"t\":\"è\";return\"w\"!==t&&\"W\"!==t||(n=\"a\"),e+n},week:{dow:1,doy:4}})}(n(381))},5858:function(e,t,n){!function(e){\"use strict\";var t={1:\"੧\",2:\"੨\",3:\"੩\",4:\"੪\",5:\"੫\",6:\"੬\",7:\"੭\",8:\"੮\",9:\"੯\",0:\"੦\"},n={\"੧\":\"1\",\"੨\":\"2\",\"੩\":\"3\",\"੪\":\"4\",\"੫\":\"5\",\"੬\":\"6\",\"੭\":\"7\",\"੮\":\"8\",\"੯\":\"9\",\"੦\":\"0\"};e.defineLocale(\"pa-in\",{months:\"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ\".split(\"_\"),monthsShort:\"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ\".split(\"_\"),weekdays:\"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ\".split(\"_\"),weekdaysShort:\"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ\".split(\"_\"),weekdaysMin:\"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ\".split(\"_\"),longDateFormat:{LT:\"A h:mm ਵਜੇ\",LTS:\"A h:mm:ss ਵਜੇ\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm ਵਜੇ\",LLLL:\"dddd, D MMMM YYYY, A h:mm ਵਜੇ\"},calendar:{sameDay:\"[ਅਜ] LT\",nextDay:\"[ਕਲ] LT\",nextWeek:\"[ਅਗਲਾ] dddd, LT\",lastDay:\"[ਕਲ] LT\",lastWeek:\"[ਪਿਛਲੇ] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s ਵਿੱਚ\",past:\"%s ਪਿਛਲੇ\",s:\"ਕੁਝ ਸਕਿੰਟ\",ss:\"%d ਸਕਿੰਟ\",m:\"ਇਕ ਮਿੰਟ\",mm:\"%d ਮਿੰਟ\",h:\"ਇੱਕ ਘੰਟਾ\",hh:\"%d ਘੰਟੇ\",d:\"ਇੱਕ ਦਿਨ\",dd:\"%d ਦਿਨ\",M:\"ਇੱਕ ਮਹੀਨਾ\",MM:\"%d ਮਹੀਨੇ\",y:\"ਇੱਕ ਸਾਲ\",yy:\"%d ਸਾਲ\"},preparse:function(e){return e.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]}))},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(e,t){return 12===e&&(e=0),\"ਰਾਤ\"===t?e<4?e:e+12:\"ਸਵੇਰ\"===t?e:\"ਦੁਪਹਿਰ\"===t?e>=10?e:e+12:\"ਸ਼ਾਮ\"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?\"ਰਾਤ\":e<10?\"ਸਵੇਰ\":e<17?\"ਦੁਪਹਿਰ\":e<20?\"ਸ਼ਾਮ\":\"ਰਾਤ\"},week:{dow:0,doy:6}})}(n(381))},4495:function(e,t,n){!function(e){\"use strict\";var t=\"styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień\".split(\"_\"),n=\"stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia\".split(\"_\"),r=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^paź/i,/^lis/i,/^gru/i];function o(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function i(e,t,n){var r=e+\" \";switch(n){case\"ss\":return r+(o(e)?\"sekundy\":\"sekund\");case\"m\":return t?\"minuta\":\"minutę\";case\"mm\":return r+(o(e)?\"minuty\":\"minut\");case\"h\":return t?\"godzina\":\"godzinę\";case\"hh\":return r+(o(e)?\"godziny\":\"godzin\");case\"ww\":return r+(o(e)?\"tygodnie\":\"tygodni\");case\"MM\":return r+(o(e)?\"miesiące\":\"miesięcy\");case\"yy\":return r+(o(e)?\"lata\":\"lat\")}}e.defineLocale(\"pl\",{months:function(e,r){return e?/D MMMM/.test(r)?n[e.month()]:t[e.month()]:t},monthsShort:\"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru\".split(\"_\"),monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:\"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota\".split(\"_\"),weekdaysShort:\"ndz_pon_wt_śr_czw_pt_sob\".split(\"_\"),weekdaysMin:\"Nd_Pn_Wt_Śr_Cz_Pt_So\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Dziś o] LT\",nextDay:\"[Jutro o] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[W niedzielę o] LT\";case 2:return\"[We wtorek o] LT\";case 3:return\"[W środę o] LT\";case 6:return\"[W sobotę o] LT\";default:return\"[W] dddd [o] LT\"}},lastDay:\"[Wczoraj o] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[W zeszłą niedzielę o] LT\";case 3:return\"[W zeszłą środę o] LT\";case 6:return\"[W zeszłą sobotę o] LT\";default:return\"[W zeszły] dddd [o] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"%s temu\",s:\"kilka sekund\",ss:i,m:i,mm:i,h:i,hh:i,d:\"1 dzień\",dd:\"%d dni\",w:\"tydzień\",ww:i,M:\"miesiąc\",MM:i,y:\"rok\",yy:i},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},7971:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"pt-br\",{months:\"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro\".split(\"_\"),monthsShort:\"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez\".split(\"_\"),weekdays:\"domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado\".split(\"_\"),weekdaysShort:\"dom_seg_ter_qua_qui_sex_sáb\".split(\"_\"),weekdaysMin:\"do_2ª_3ª_4ª_5ª_6ª_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY [às] HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY [às] HH:mm\"},calendar:{sameDay:\"[Hoje às] LT\",nextDay:\"[Amanhã às] LT\",nextWeek:\"dddd [às] LT\",lastDay:\"[Ontem às] LT\",lastWeek:function(){return 0===this.day()||6===this.day()?\"[Último] dddd [às] LT\":\"[Última] dddd [às] LT\"},sameElse:\"L\"},relativeTime:{future:\"em %s\",past:\"há %s\",s:\"poucos segundos\",ss:\"%d segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",M:\"um mês\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",invalidDate:\"Data inválida\"})}(n(381))},9520:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"pt\",{months:\"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro\".split(\"_\"),monthsShort:\"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez\".split(\"_\"),weekdays:\"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado\".split(\"_\"),weekdaysShort:\"Dom_Seg_Ter_Qua_Qui_Sex_Sáb\".split(\"_\"),weekdaysMin:\"Do_2ª_3ª_4ª_5ª_6ª_Sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY HH:mm\"},calendar:{sameDay:\"[Hoje às] LT\",nextDay:\"[Amanhã às] LT\",nextWeek:\"dddd [às] LT\",lastDay:\"[Ontem às] LT\",lastWeek:function(){return 0===this.day()||6===this.day()?\"[Último] dddd [às] LT\":\"[Última] dddd [às] LT\"},sameElse:\"L\"},relativeTime:{future:\"em %s\",past:\"há %s\",s:\"segundos\",ss:\"%d segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",w:\"uma semana\",ww:\"%d semanas\",M:\"um mês\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})}(n(381))},6459:function(e,t,n){!function(e){\"use strict\";function t(e,t,n){var r=\" \";return(e%100>=20||e>=100&&e%100==0)&&(r=\" de \"),e+r+{ss:\"secunde\",mm:\"minute\",hh:\"ore\",dd:\"zile\",ww:\"săptămâni\",MM:\"luni\",yy:\"ani\"}[n]}e.defineLocale(\"ro\",{months:\"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie\".split(\"_\"),monthsShort:\"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"duminică_luni_marți_miercuri_joi_vineri_sâmbătă\".split(\"_\"),weekdaysShort:\"Dum_Lun_Mar_Mie_Joi_Vin_Sâm\".split(\"_\"),weekdaysMin:\"Du_Lu_Ma_Mi_Jo_Vi_Sâ\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[azi la] LT\",nextDay:\"[mâine la] LT\",nextWeek:\"dddd [la] LT\",lastDay:\"[ieri la] LT\",lastWeek:\"[fosta] dddd [la] LT\",sameElse:\"L\"},relativeTime:{future:\"peste %s\",past:\"%s în urmă\",s:\"câteva secunde\",ss:t,m:\"un minut\",mm:t,h:\"o oră\",hh:t,d:\"o zi\",dd:t,w:\"o săptămână\",ww:t,M:\"o lună\",MM:t,y:\"un an\",yy:t},week:{dow:1,doy:7}})}(n(381))},1793:function(e,t,n){!function(e){\"use strict\";function t(e,t){var n=e.split(\"_\");return t%10==1&&t%100!=11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function n(e,n,r){return\"m\"===r?n?\"минута\":\"минуту\":e+\" \"+t({ss:n?\"секунда_секунды_секунд\":\"секунду_секунды_секунд\",mm:n?\"минута_минуты_минут\":\"минуту_минуты_минут\",hh:\"час_часа_часов\",dd:\"день_дня_дней\",ww:\"неделя_недели_недель\",MM:\"месяц_месяца_месяцев\",yy:\"год_года_лет\"}[r],+e)}var r=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];e.defineLocale(\"ru\",{months:{format:\"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря\".split(\"_\"),standalone:\"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь\".split(\"_\")},monthsShort:{format:\"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.\".split(\"_\"),standalone:\"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.\".split(\"_\")},weekdays:{standalone:\"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота\".split(\"_\"),format:\"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу\".split(\"_\"),isFormat:/\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/},weekdaysShort:\"вс_пн_вт_ср_чт_пт_сб\".split(\"_\"),weekdaysMin:\"вс_пн_вт_ср_чт_пт_сб\".split(\"_\"),monthsParse:r,longMonthsParse:r,shortMonthsParse:r,monthsRegex:/^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,monthsShortRegex:/^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY г.\",LLL:\"D MMMM YYYY г., H:mm\",LLLL:\"dddd, D MMMM YYYY г., H:mm\"},calendar:{sameDay:\"[Сегодня, в] LT\",nextDay:\"[Завтра, в] LT\",lastDay:\"[Вчера, в] LT\",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?\"[Во] dddd, [в] LT\":\"[В] dddd, [в] LT\";switch(this.day()){case 0:return\"[В следующее] dddd, [в] LT\";case 1:case 2:case 4:return\"[В следующий] dddd, [в] LT\";case 3:case 5:case 6:return\"[В следующую] dddd, [в] LT\"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?\"[Во] dddd, [в] LT\":\"[В] dddd, [в] LT\";switch(this.day()){case 0:return\"[В прошлое] dddd, [в] LT\";case 1:case 2:case 4:return\"[В прошлый] dddd, [в] LT\";case 3:case 5:case 6:return\"[В прошлую] dddd, [в] LT\"}},sameElse:\"L\"},relativeTime:{future:\"через %s\",past:\"%s назад\",s:\"несколько секунд\",ss:n,m:n,mm:n,h:\"час\",hh:n,d:\"день\",dd:n,w:\"неделя\",ww:n,M:\"месяц\",MM:n,y:\"год\",yy:n},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,t,n){return e<4?\"ночи\":e<12?\"утра\":e<17?\"дня\":\"вечера\"},dayOfMonthOrdinalParse:/\\d{1,2}-(й|го|я)/,ordinal:function(e,t){switch(t){case\"M\":case\"d\":case\"DDD\":return e+\"-й\";case\"D\":return e+\"-го\";case\"w\":case\"W\":return e+\"-я\";default:return e}},week:{dow:1,doy:4}})}(n(381))},950:function(e,t,n){!function(e){\"use strict\";var t=[\"جنوري\",\"فيبروري\",\"مارچ\",\"اپريل\",\"مئي\",\"جون\",\"جولاءِ\",\"آگسٽ\",\"سيپٽمبر\",\"آڪٽوبر\",\"نومبر\",\"ڊسمبر\"],n=[\"آچر\",\"سومر\",\"اڱارو\",\"اربع\",\"خميس\",\"جمع\",\"ڇنڇر\"];e.defineLocale(\"sd\",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd، D MMMM YYYY HH:mm\"},meridiemParse:/صبح|شام/,isPM:function(e){return\"شام\"===e},meridiem:function(e,t,n){return e<12?\"صبح\":\"شام\"},calendar:{sameDay:\"[اڄ] LT\",nextDay:\"[سڀاڻي] LT\",nextWeek:\"dddd [اڳين هفتي تي] LT\",lastDay:\"[ڪالهه] LT\",lastWeek:\"[گزريل هفتي] dddd [تي] LT\",sameElse:\"L\"},relativeTime:{future:\"%s پوء\",past:\"%s اڳ\",s:\"چند سيڪنڊ\",ss:\"%d سيڪنڊ\",m:\"هڪ منٽ\",mm:\"%d منٽ\",h:\"هڪ ڪلاڪ\",hh:\"%d ڪلاڪ\",d:\"هڪ ڏينهن\",dd:\"%d ڏينهن\",M:\"هڪ مهينو\",MM:\"%d مهينا\",y:\"هڪ سال\",yy:\"%d سال\"},preparse:function(e){return e.replace(/،/g,\",\")},postformat:function(e){return e.replace(/,/g,\"،\")},week:{dow:1,doy:4}})}(n(381))},490:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"se\",{months:\"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu\".split(\"_\"),monthsShort:\"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov\".split(\"_\"),weekdays:\"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat\".split(\"_\"),weekdaysShort:\"sotn_vuos_maŋ_gask_duor_bear_láv\".split(\"_\"),weekdaysMin:\"s_v_m_g_d_b_L\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"MMMM D. [b.] YYYY\",LLL:\"MMMM D. [b.] YYYY [ti.] HH:mm\",LLLL:\"dddd, MMMM D. [b.] YYYY [ti.] HH:mm\"},calendar:{sameDay:\"[otne ti] LT\",nextDay:\"[ihttin ti] LT\",nextWeek:\"dddd [ti] LT\",lastDay:\"[ikte ti] LT\",lastWeek:\"[ovddit] dddd [ti] LT\",sameElse:\"L\"},relativeTime:{future:\"%s geažes\",past:\"maŋit %s\",s:\"moadde sekunddat\",ss:\"%d sekunddat\",m:\"okta minuhta\",mm:\"%d minuhtat\",h:\"okta diimmu\",hh:\"%d diimmut\",d:\"okta beaivi\",dd:\"%d beaivvit\",M:\"okta mánnu\",MM:\"%d mánut\",y:\"okta jahki\",yy:\"%d jagit\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},124:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"si\",{months:\"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්\".split(\"_\"),monthsShort:\"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ\".split(\"_\"),weekdays:\"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා\".split(\"_\"),weekdaysShort:\"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන\".split(\"_\"),weekdaysMin:\"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"a h:mm\",LTS:\"a h:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY MMMM D\",LLL:\"YYYY MMMM D, a h:mm\",LLLL:\"YYYY MMMM D [වැනි] dddd, a h:mm:ss\"},calendar:{sameDay:\"[අද] LT[ට]\",nextDay:\"[හෙට] LT[ට]\",nextWeek:\"dddd LT[ට]\",lastDay:\"[ඊයේ] LT[ට]\",lastWeek:\"[පසුගිය] dddd LT[ට]\",sameElse:\"L\"},relativeTime:{future:\"%sකින්\",past:\"%sකට පෙර\",s:\"තත්පර කිහිපය\",ss:\"තත්පර %d\",m:\"මිනිත්තුව\",mm:\"මිනිත්තු %d\",h:\"පැය\",hh:\"පැය %d\",d:\"දිනය\",dd:\"දින %d\",M:\"මාසය\",MM:\"මාස %d\",y:\"වසර\",yy:\"වසර %d\"},dayOfMonthOrdinalParse:/\\d{1,2} වැනි/,ordinal:function(e){return e+\" වැනි\"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(e){return\"ප.ව.\"===e||\"පස් වරු\"===e},meridiem:function(e,t,n){return e>11?n?\"ප.ව.\":\"පස් වරු\":n?\"පෙ.ව.\":\"පෙර වරු\"}})}(n(381))},4249:function(e,t,n){!function(e){\"use strict\";var t=\"január_február_marec_apríl_máj_jún_júl_august_september_október_november_december\".split(\"_\"),n=\"jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec\".split(\"_\");function r(e){return e>1&&e<5}function o(e,t,n,o){var i=e+\" \";switch(n){case\"s\":return t||o?\"pár sekúnd\":\"pár sekundami\";case\"ss\":return t||o?i+(r(e)?\"sekundy\":\"sekúnd\"):i+\"sekundami\";case\"m\":return t?\"minúta\":o?\"minútu\":\"minútou\";case\"mm\":return t||o?i+(r(e)?\"minúty\":\"minút\"):i+\"minútami\";case\"h\":return t?\"hodina\":o?\"hodinu\":\"hodinou\";case\"hh\":return t||o?i+(r(e)?\"hodiny\":\"hodín\"):i+\"hodinami\";case\"d\":return t||o?\"deň\":\"dňom\";case\"dd\":return t||o?i+(r(e)?\"dni\":\"dní\"):i+\"dňami\";case\"M\":return t||o?\"mesiac\":\"mesiacom\";case\"MM\":return t||o?i+(r(e)?\"mesiace\":\"mesiacov\"):i+\"mesiacmi\";case\"y\":return t||o?\"rok\":\"rokom\";case\"yy\":return t||o?i+(r(e)?\"roky\":\"rokov\"):i+\"rokmi\"}}e.defineLocale(\"sk\",{months:t,monthsShort:n,weekdays:\"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota\".split(\"_\"),weekdaysShort:\"ne_po_ut_st_št_pi_so\".split(\"_\"),weekdaysMin:\"ne_po_ut_st_št_pi_so\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[dnes o] LT\",nextDay:\"[zajtra o] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v nedeľu o] LT\";case 1:case 2:return\"[v] dddd [o] LT\";case 3:return\"[v stredu o] LT\";case 4:return\"[vo štvrtok o] LT\";case 5:return\"[v piatok o] LT\";case 6:return\"[v sobotu o] LT\"}},lastDay:\"[včera o] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[minulú nedeľu o] LT\";case 1:case 2:case 4:case 5:return\"[minulý] dddd [o] LT\";case 3:return\"[minulú stredu o] LT\";case 6:return\"[minulú sobotu o] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pred %s\",s:o,ss:o,m:o,mm:o,h:o,hh:o,d:o,dd:o,M:o,MM:o,y:o,yy:o},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},4985:function(e,t,n){!function(e){\"use strict\";function t(e,t,n,r){var o=e+\" \";switch(n){case\"s\":return t||r?\"nekaj sekund\":\"nekaj sekundami\";case\"ss\":return o+=1===e?t?\"sekundo\":\"sekundi\":2===e?t||r?\"sekundi\":\"sekundah\":e<5?t||r?\"sekunde\":\"sekundah\":\"sekund\";case\"m\":return t?\"ena minuta\":\"eno minuto\";case\"mm\":return o+=1===e?t?\"minuta\":\"minuto\":2===e?t||r?\"minuti\":\"minutama\":e<5?t||r?\"minute\":\"minutami\":t||r?\"minut\":\"minutami\";case\"h\":return t?\"ena ura\":\"eno uro\";case\"hh\":return o+=1===e?t?\"ura\":\"uro\":2===e?t||r?\"uri\":\"urama\":e<5?t||r?\"ure\":\"urami\":t||r?\"ur\":\"urami\";case\"d\":return t||r?\"en dan\":\"enim dnem\";case\"dd\":return o+=1===e?t||r?\"dan\":\"dnem\":2===e?t||r?\"dni\":\"dnevoma\":t||r?\"dni\":\"dnevi\";case\"M\":return t||r?\"en mesec\":\"enim mesecem\";case\"MM\":return o+=1===e?t||r?\"mesec\":\"mesecem\":2===e?t||r?\"meseca\":\"mesecema\":e<5?t||r?\"mesece\":\"meseci\":t||r?\"mesecev\":\"meseci\";case\"y\":return t||r?\"eno leto\":\"enim letom\";case\"yy\":return o+=1===e?t||r?\"leto\":\"letom\":2===e?t||r?\"leti\":\"letoma\":e<5?t||r?\"leta\":\"leti\":t||r?\"let\":\"leti\"}}e.defineLocale(\"sl\",{months:\"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota\".split(\"_\"),weekdaysShort:\"ned._pon._tor._sre._čet._pet._sob.\".split(\"_\"),weekdaysMin:\"ne_po_to_sr_če_pe_so\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD. MM. YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danes ob] LT\",nextDay:\"[jutri ob] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v] [nedeljo] [ob] LT\";case 3:return\"[v] [sredo] [ob] LT\";case 6:return\"[v] [soboto] [ob] LT\";case 1:case 2:case 4:case 5:return\"[v] dddd [ob] LT\"}},lastDay:\"[včeraj ob] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[prejšnjo] [nedeljo] [ob] LT\";case 3:return\"[prejšnjo] [sredo] [ob] LT\";case 6:return\"[prejšnjo] [soboto] [ob] LT\";case 1:case 2:case 4:case 5:return\"[prejšnji] dddd [ob] LT\"}},sameElse:\"L\"},relativeTime:{future:\"čez %s\",past:\"pred %s\",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(381))},1104:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"sq\",{months:\"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor\".split(\"_\"),monthsShort:\"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj\".split(\"_\"),weekdays:\"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë\".split(\"_\"),weekdaysShort:\"Die_Hën_Mar_Mër_Enj_Pre_Sht\".split(\"_\"),weekdaysMin:\"D_H_Ma_Më_E_P_Sh\".split(\"_\"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return\"M\"===e.charAt(0)},meridiem:function(e,t,n){return e<12?\"PD\":\"MD\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Sot në] LT\",nextDay:\"[Nesër në] LT\",nextWeek:\"dddd [në] LT\",lastDay:\"[Dje në] LT\",lastWeek:\"dddd [e kaluar në] LT\",sameElse:\"L\"},relativeTime:{future:\"në %s\",past:\"%s më parë\",s:\"disa sekonda\",ss:\"%d sekonda\",m:\"një minutë\",mm:\"%d minuta\",h:\"një orë\",hh:\"%d orë\",d:\"një ditë\",dd:\"%d ditë\",M:\"një muaj\",MM:\"%d muaj\",y:\"një vit\",yy:\"%d vite\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},9915:function(e,t,n){!function(e){\"use strict\";var t={words:{ss:[\"секунда\",\"секунде\",\"секунди\"],m:[\"један минут\",\"једног минута\"],mm:[\"минут\",\"минута\",\"минута\"],h:[\"један сат\",\"једног сата\"],hh:[\"сат\",\"сата\",\"сати\"],d:[\"један дан\",\"једног дана\"],dd:[\"дан\",\"дана\",\"дана\"],M:[\"један месец\",\"једног месеца\"],MM:[\"месец\",\"месеца\",\"месеци\"],y:[\"једну годину\",\"једне године\"],yy:[\"годину\",\"године\",\"година\"]},correctGrammaticalCase:function(e,t){return e%10>=1&&e%10<=4&&(e%100<10||e%100>=20)?e%10==1?t[0]:t[1]:t[2]},translate:function(e,n,r,o){var i,s=t.words[r];return 1===r.length?\"y\"===r&&n?\"једна година\":o||n?s[0]:s[1]:(i=t.correctGrammaticalCase(e,s),\"yy\"===r&&n&&\"годину\"===i?e+\" година\":e+\" \"+i)}};e.defineLocale(\"sr-cyrl\",{months:\"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар\".split(\"_\"),monthsShort:\"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.\".split(\"_\"),monthsParseExact:!0,weekdays:\"недеља_понедељак_уторак_среда_четвртак_петак_субота\".split(\"_\"),weekdaysShort:\"нед._пон._уто._сре._чет._пет._суб.\".split(\"_\"),weekdaysMin:\"не_по_ут_ср_че_пе_су\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D. M. YYYY.\",LL:\"D. MMMM YYYY.\",LLL:\"D. MMMM YYYY. H:mm\",LLLL:\"dddd, D. MMMM YYYY. H:mm\"},calendar:{sameDay:\"[данас у] LT\",nextDay:\"[сутра у] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[у] [недељу] [у] LT\";case 3:return\"[у] [среду] [у] LT\";case 6:return\"[у] [суботу] [у] LT\";case 1:case 2:case 4:case 5:return\"[у] dddd [у] LT\"}},lastDay:\"[јуче у] LT\",lastWeek:function(){return[\"[прошле] [недеље] [у] LT\",\"[прошлог] [понедељка] [у] LT\",\"[прошлог] [уторка] [у] LT\",\"[прошле] [среде] [у] LT\",\"[прошлог] [четвртка] [у] LT\",\"[прошлог] [петка] [у] LT\",\"[прошле] [суботе] [у] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"за %s\",past:\"пре %s\",s:\"неколико секунди\",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:t.translate,dd:t.translate,M:t.translate,MM:t.translate,y:t.translate,yy:t.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(381))},9131:function(e,t,n){!function(e){\"use strict\";var t={words:{ss:[\"sekunda\",\"sekunde\",\"sekundi\"],m:[\"jedan minut\",\"jednog minuta\"],mm:[\"minut\",\"minuta\",\"minuta\"],h:[\"jedan sat\",\"jednog sata\"],hh:[\"sat\",\"sata\",\"sati\"],d:[\"jedan dan\",\"jednog dana\"],dd:[\"dan\",\"dana\",\"dana\"],M:[\"jedan mesec\",\"jednog meseca\"],MM:[\"mesec\",\"meseca\",\"meseci\"],y:[\"jednu godinu\",\"jedne godine\"],yy:[\"godinu\",\"godine\",\"godina\"]},correctGrammaticalCase:function(e,t){return e%10>=1&&e%10<=4&&(e%100<10||e%100>=20)?e%10==1?t[0]:t[1]:t[2]},translate:function(e,n,r,o){var i,s=t.words[r];return 1===r.length?\"y\"===r&&n?\"jedna godina\":o||n?s[0]:s[1]:(i=t.correctGrammaticalCase(e,s),\"yy\"===r&&n&&\"godinu\"===i?e+\" godina\":e+\" \"+i)}};e.defineLocale(\"sr\",{months:\"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sre._čet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_če_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D. M. YYYY.\",LL:\"D. MMMM YYYY.\",LLL:\"D. MMMM YYYY. H:mm\",LLLL:\"dddd, D. MMMM YYYY. H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedelju] [u] LT\";case 3:return\"[u] [sredu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[juče u] LT\",lastWeek:function(){return[\"[prošle] [nedelje] [u] LT\",\"[prošlog] [ponedeljka] [u] LT\",\"[prošlog] [utorka] [u] LT\",\"[prošle] [srede] [u] LT\",\"[prošlog] [četvrtka] [u] LT\",\"[prošlog] [petka] [u] LT\",\"[prošle] [subote] [u] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pre %s\",s:\"nekoliko sekundi\",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:t.translate,dd:t.translate,M:t.translate,MM:t.translate,y:t.translate,yy:t.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})}(n(381))},5893:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"ss\",{months:\"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\"_\"),monthsShort:\"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo\".split(\"_\"),weekdays:\"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo\".split(\"_\"),weekdaysShort:\"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg\".split(\"_\"),weekdaysMin:\"Li_Us_Lb_Lt_Ls_Lh_Ug\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Namuhla nga] LT\",nextDay:\"[Kusasa nga] LT\",nextWeek:\"dddd [nga] LT\",lastDay:\"[Itolo nga] LT\",lastWeek:\"dddd [leliphelile] [nga] LT\",sameElse:\"L\"},relativeTime:{future:\"nga %s\",past:\"wenteka nga %s\",s:\"emizuzwana lomcane\",ss:\"%d mzuzwana\",m:\"umzuzu\",mm:\"%d emizuzu\",h:\"lihora\",hh:\"%d emahora\",d:\"lilanga\",dd:\"%d emalanga\",M:\"inyanga\",MM:\"%d tinyanga\",y:\"umnyaka\",yy:\"%d iminyaka\"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,t,n){return e<11?\"ekuseni\":e<15?\"emini\":e<19?\"entsambama\":\"ebusuku\"},meridiemHour:function(e,t){return 12===e&&(e=0),\"ekuseni\"===t?e:\"emini\"===t?e>=11?e:e+12:\"entsambama\"===t||\"ebusuku\"===t?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:\"%d\",week:{dow:1,doy:4}})}(n(381))},8760:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"sv\",{months:\"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag\".split(\"_\"),weekdaysShort:\"sön_mån_tis_ons_tor_fre_lör\".split(\"_\"),weekdaysMin:\"sö_må_ti_on_to_fr_lö\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D MMMM YYYY [kl.] HH:mm\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd D MMM YYYY HH:mm\"},calendar:{sameDay:\"[Idag] LT\",nextDay:\"[Imorgon] LT\",lastDay:\"[Igår] LT\",nextWeek:\"[På] dddd LT\",lastWeek:\"[I] dddd[s] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"för %s sedan\",s:\"några sekunder\",ss:\"%d sekunder\",m:\"en minut\",mm:\"%d minuter\",h:\"en timme\",hh:\"%d timmar\",d:\"en dag\",dd:\"%d dagar\",M:\"en månad\",MM:\"%d månader\",y:\"ett år\",yy:\"%d år\"},dayOfMonthOrdinalParse:/\\d{1,2}(\\:e|\\:a)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?\":e\":1===t||2===t?\":a\":\":e\")},week:{dow:1,doy:4}})}(n(381))},1172:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"sw\",{months:\"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi\".split(\"_\"),weekdaysShort:\"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos\".split(\"_\"),weekdaysMin:\"J2_J3_J4_J5_Al_Ij_J1\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"hh:mm A\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[leo saa] LT\",nextDay:\"[kesho saa] LT\",nextWeek:\"[wiki ijayo] dddd [saat] LT\",lastDay:\"[jana] LT\",lastWeek:\"[wiki iliyopita] dddd [saat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s baadaye\",past:\"tokea %s\",s:\"hivi punde\",ss:\"sekunde %d\",m:\"dakika moja\",mm:\"dakika %d\",h:\"saa limoja\",hh:\"masaa %d\",d:\"siku moja\",dd:\"siku %d\",M:\"mwezi mmoja\",MM:\"miezi %d\",y:\"mwaka mmoja\",yy:\"miaka %d\"},week:{dow:1,doy:7}})}(n(381))},7333:function(e,t,n){!function(e){\"use strict\";var t={1:\"௧\",2:\"௨\",3:\"௩\",4:\"௪\",5:\"௫\",6:\"௬\",7:\"௭\",8:\"௮\",9:\"௯\",0:\"௦\"},n={\"௧\":\"1\",\"௨\":\"2\",\"௩\":\"3\",\"௪\":\"4\",\"௫\":\"5\",\"௬\":\"6\",\"௭\":\"7\",\"௮\":\"8\",\"௯\":\"9\",\"௦\":\"0\"};e.defineLocale(\"ta\",{months:\"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்\".split(\"_\"),monthsShort:\"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்\".split(\"_\"),weekdays:\"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை\".split(\"_\"),weekdaysShort:\"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி\".split(\"_\"),weekdaysMin:\"ஞா_தி_செ_பு_வி_வெ_ச\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, HH:mm\",LLLL:\"dddd, D MMMM YYYY, HH:mm\"},calendar:{sameDay:\"[இன்று] LT\",nextDay:\"[நாளை] LT\",nextWeek:\"dddd, LT\",lastDay:\"[நேற்று] LT\",lastWeek:\"[கடந்த வாரம்] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s இல்\",past:\"%s முன்\",s:\"ஒரு சில விநாடிகள்\",ss:\"%d விநாடிகள்\",m:\"ஒரு நிமிடம்\",mm:\"%d நிமிடங்கள்\",h:\"ஒரு மணி நேரம்\",hh:\"%d மணி நேரம்\",d:\"ஒரு நாள்\",dd:\"%d நாட்கள்\",M:\"ஒரு மாதம்\",MM:\"%d மாதங்கள்\",y:\"ஒரு வருடம்\",yy:\"%d ஆண்டுகள்\"},dayOfMonthOrdinalParse:/\\d{1,2}வது/,ordinal:function(e){return e+\"வது\"},preparse:function(e){return e.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\\d/g,(function(e){return t[e]}))},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(e,t,n){return e<2?\" யாமம்\":e<6?\" வைகறை\":e<10?\" காலை\":e<14?\" நண்பகல்\":e<18?\" எற்பாடு\":e<22?\" மாலை\":\" யாமம்\"},meridiemHour:function(e,t){return 12===e&&(e=0),\"யாமம்\"===t?e<2?e:e+12:\"வைகறை\"===t||\"காலை\"===t||\"நண்பகல்\"===t&&e>=10?e:e+12},week:{dow:0,doy:6}})}(n(381))},3110:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"te\",{months:\"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్\".split(\"_\"),monthsShort:\"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.\".split(\"_\"),monthsParseExact:!0,weekdays:\"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం\".split(\"_\"),weekdaysShort:\"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని\".split(\"_\"),weekdaysMin:\"ఆ_సో_మం_బు_గు_శు_శ\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm\",LLLL:\"dddd, D MMMM YYYY, A h:mm\"},calendar:{sameDay:\"[నేడు] LT\",nextDay:\"[రేపు] LT\",nextWeek:\"dddd, LT\",lastDay:\"[నిన్న] LT\",lastWeek:\"[గత] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s లో\",past:\"%s క్రితం\",s:\"కొన్ని క్షణాలు\",ss:\"%d సెకన్లు\",m:\"ఒక నిమిషం\",mm:\"%d నిమిషాలు\",h:\"ఒక గంట\",hh:\"%d గంటలు\",d:\"ఒక రోజు\",dd:\"%d రోజులు\",M:\"ఒక నెల\",MM:\"%d నెలలు\",y:\"ఒక సంవత్సరం\",yy:\"%d సంవత్సరాలు\"},dayOfMonthOrdinalParse:/\\d{1,2}వ/,ordinal:\"%dవ\",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(e,t){return 12===e&&(e=0),\"రాత్రి\"===t?e<4?e:e+12:\"ఉదయం\"===t?e:\"మధ్యాహ్నం\"===t?e>=10?e:e+12:\"సాయంత్రం\"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?\"రాత్రి\":e<10?\"ఉదయం\":e<17?\"మధ్యాహ్నం\":e<20?\"సాయంత్రం\":\"రాత్రి\"},week:{dow:0,doy:6}})}(n(381))},2455:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"tet\",{months:\"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru\".split(\"_\"),monthsShort:\"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez\".split(\"_\"),weekdays:\"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu\".split(\"_\"),weekdaysShort:\"Dom_Seg_Ters_Kua_Kint_Sest_Sab\".split(\"_\"),weekdaysMin:\"Do_Seg_Te_Ku_Ki_Ses_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ohin iha] LT\",nextDay:\"[Aban iha] LT\",nextWeek:\"dddd [iha] LT\",lastDay:\"[Horiseik iha] LT\",lastWeek:\"dddd [semana kotuk] [iha] LT\",sameElse:\"L\"},relativeTime:{future:\"iha %s\",past:\"%s liuba\",s:\"segundu balun\",ss:\"segundu %d\",m:\"minutu ida\",mm:\"minutu %d\",h:\"oras ida\",hh:\"oras %d\",d:\"loron ida\",dd:\"loron %d\",M:\"fulan ida\",MM:\"fulan %d\",y:\"tinan ida\",yy:\"tinan %d\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")},week:{dow:1,doy:4}})}(n(381))},7321:function(e,t,n){!function(e){\"use strict\";var t={0:\"-ум\",1:\"-ум\",2:\"-юм\",3:\"-юм\",4:\"-ум\",5:\"-ум\",6:\"-ум\",7:\"-ум\",8:\"-ум\",9:\"-ум\",10:\"-ум\",12:\"-ум\",13:\"-ум\",20:\"-ум\",30:\"-юм\",40:\"-ум\",50:\"-ум\",60:\"-ум\",70:\"-ум\",80:\"-ум\",90:\"-ум\",100:\"-ум\"};e.defineLocale(\"tg\",{months:{format:\"январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри\".split(\"_\"),standalone:\"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр\".split(\"_\")},monthsShort:\"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек\".split(\"_\"),weekdays:\"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе\".split(\"_\"),weekdaysShort:\"яшб_дшб_сшб_чшб_пшб_ҷум_шнб\".split(\"_\"),weekdaysMin:\"яш_дш_сш_чш_пш_ҷм_шб\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Имрӯз соати] LT\",nextDay:\"[Фардо соати] LT\",lastDay:\"[Дирӯз соати] LT\",nextWeek:\"dddd[и] [ҳафтаи оянда соати] LT\",lastWeek:\"dddd[и] [ҳафтаи гузашта соати] LT\",sameElse:\"L\"},relativeTime:{future:\"баъди %s\",past:\"%s пеш\",s:\"якчанд сония\",m:\"як дақиқа\",mm:\"%d дақиқа\",h:\"як соат\",hh:\"%d соат\",d:\"як рӯз\",dd:\"%d рӯз\",M:\"як моҳ\",MM:\"%d моҳ\",y:\"як сол\",yy:\"%d сол\"},meridiemParse:/шаб|субҳ|рӯз|бегоҳ/,meridiemHour:function(e,t){return 12===e&&(e=0),\"шаб\"===t?e<4?e:e+12:\"субҳ\"===t?e:\"рӯз\"===t?e>=11?e:e+12:\"бегоҳ\"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?\"шаб\":e<11?\"субҳ\":e<16?\"рӯз\":e<19?\"бегоҳ\":\"шаб\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ум|юм)/,ordinal:function(e){var n=e%10,r=e>=100?100:null;return e+(t[e]||t[n]||t[r])},week:{dow:1,doy:7}})}(n(381))},9041:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"th\",{months:\"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม\".split(\"_\"),monthsShort:\"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.\".split(\"_\"),monthsParseExact:!0,weekdays:\"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์\".split(\"_\"),weekdaysShort:\"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์\".split(\"_\"),weekdaysMin:\"อา._จ._อ._พ._พฤ._ศ._ส.\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY เวลา H:mm\",LLLL:\"วันddddที่ D MMMM YYYY เวลา H:mm\"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return\"หลังเที่ยง\"===e},meridiem:function(e,t,n){return e<12?\"ก่อนเที่ยง\":\"หลังเที่ยง\"},calendar:{sameDay:\"[วันนี้ เวลา] LT\",nextDay:\"[พรุ่งนี้ เวลา] LT\",nextWeek:\"dddd[หน้า เวลา] LT\",lastDay:\"[เมื่อวานนี้ เวลา] LT\",lastWeek:\"[วัน]dddd[ที่แล้ว เวลา] LT\",sameElse:\"L\"},relativeTime:{future:\"อีก %s\",past:\"%sที่แล้ว\",s:\"ไม่กี่วินาที\",ss:\"%d วินาที\",m:\"1 นาที\",mm:\"%d นาที\",h:\"1 ชั่วโมง\",hh:\"%d ชั่วโมง\",d:\"1 วัน\",dd:\"%d วัน\",w:\"1 สัปดาห์\",ww:\"%d สัปดาห์\",M:\"1 เดือน\",MM:\"%d เดือน\",y:\"1 ปี\",yy:\"%d ปี\"}})}(n(381))},9005:function(e,t,n){!function(e){\"use strict\";var t={1:\"'inji\",5:\"'inji\",8:\"'inji\",70:\"'inji\",80:\"'inji\",2:\"'nji\",7:\"'nji\",20:\"'nji\",50:\"'nji\",3:\"'ünji\",4:\"'ünji\",100:\"'ünji\",6:\"'njy\",9:\"'unjy\",10:\"'unjy\",30:\"'unjy\",60:\"'ynjy\",90:\"'ynjy\"};e.defineLocale(\"tk\",{months:\"Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr\".split(\"_\"),monthsShort:\"Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek\".split(\"_\"),weekdays:\"Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe\".split(\"_\"),weekdaysShort:\"Ýek_Duş_Siş_Çar_Pen_Ann_Şen\".split(\"_\"),weekdaysMin:\"Ýk_Dş_Sş_Çr_Pn_An_Şn\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[bugün sagat] LT\",nextDay:\"[ertir sagat] LT\",nextWeek:\"[indiki] dddd [sagat] LT\",lastDay:\"[düýn] LT\",lastWeek:\"[geçen] dddd [sagat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s soň\",past:\"%s öň\",s:\"birnäçe sekunt\",m:\"bir minut\",mm:\"%d minut\",h:\"bir sagat\",hh:\"%d sagat\",d:\"bir gün\",dd:\"%d gün\",M:\"bir aý\",MM:\"%d aý\",y:\"bir ýyl\",yy:\"%d ýyl\"},ordinal:function(e,n){switch(n){case\"d\":case\"D\":case\"Do\":case\"DD\":return e;default:if(0===e)return e+\"'unjy\";var r=e%10,o=e%100-r,i=e>=100?100:null;return e+(t[r]||t[o]||t[i])}},week:{dow:1,doy:7}})}(n(381))},5768:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"tl-ph\",{months:\"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre\".split(\"_\"),monthsShort:\"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis\".split(\"_\"),weekdays:\"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado\".split(\"_\"),weekdaysShort:\"Lin_Lun_Mar_Miy_Huw_Biy_Sab\".split(\"_\"),weekdaysMin:\"Li_Lu_Ma_Mi_Hu_Bi_Sab\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"MM/D/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY HH:mm\",LLLL:\"dddd, MMMM DD, YYYY HH:mm\"},calendar:{sameDay:\"LT [ngayong araw]\",nextDay:\"[Bukas ng] LT\",nextWeek:\"LT [sa susunod na] dddd\",lastDay:\"LT [kahapon]\",lastWeek:\"LT [noong nakaraang] dddd\",sameElse:\"L\"},relativeTime:{future:\"sa loob ng %s\",past:\"%s ang nakalipas\",s:\"ilang segundo\",ss:\"%d segundo\",m:\"isang minuto\",mm:\"%d minuto\",h:\"isang oras\",hh:\"%d oras\",d:\"isang araw\",dd:\"%d araw\",M:\"isang buwan\",MM:\"%d buwan\",y:\"isang taon\",yy:\"%d taon\"},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(381))},9444:function(e,t,n){!function(e){\"use strict\";var t=\"pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut\".split(\"_\");function n(e){var t=e;return t=-1!==e.indexOf(\"jaj\")?t.slice(0,-3)+\"leS\":-1!==e.indexOf(\"jar\")?t.slice(0,-3)+\"waQ\":-1!==e.indexOf(\"DIS\")?t.slice(0,-3)+\"nem\":t+\" pIq\"}function r(e){var t=e;return t=-1!==e.indexOf(\"jaj\")?t.slice(0,-3)+\"Hu’\":-1!==e.indexOf(\"jar\")?t.slice(0,-3)+\"wen\":-1!==e.indexOf(\"DIS\")?t.slice(0,-3)+\"ben\":t+\" ret\"}function o(e,t,n,r){var o=i(e);switch(n){case\"ss\":return o+\" lup\";case\"mm\":return o+\" tup\";case\"hh\":return o+\" rep\";case\"dd\":return o+\" jaj\";case\"MM\":return o+\" jar\";case\"yy\":return o+\" DIS\"}}function i(e){var n=Math.floor(e%1e3/100),r=Math.floor(e%100/10),o=e%10,i=\"\";return n>0&&(i+=t[n]+\"vatlh\"),r>0&&(i+=(\"\"!==i?\" \":\"\")+t[r]+\"maH\"),o>0&&(i+=(\"\"!==i?\" \":\"\")+t[o]),\"\"===i?\"pagh\":i}e.defineLocale(\"tlh\",{months:\"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’\".split(\"_\"),monthsShort:\"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’\".split(\"_\"),monthsParseExact:!0,weekdays:\"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj\".split(\"_\"),weekdaysShort:\"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj\".split(\"_\"),weekdaysMin:\"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[DaHjaj] LT\",nextDay:\"[wa’leS] LT\",nextWeek:\"LLL\",lastDay:\"[wa’Hu’] LT\",lastWeek:\"LLL\",sameElse:\"L\"},relativeTime:{future:n,past:r,s:\"puS lup\",ss:o,m:\"wa’ tup\",mm:o,h:\"wa’ rep\",hh:o,d:\"wa’ jaj\",dd:o,M:\"wa’ jar\",MM:o,y:\"wa’ DIS\",yy:o},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},2397:function(e,t,n){!function(e){\"use strict\";var t={1:\"'inci\",5:\"'inci\",8:\"'inci\",70:\"'inci\",80:\"'inci\",2:\"'nci\",7:\"'nci\",20:\"'nci\",50:\"'nci\",3:\"'üncü\",4:\"'üncü\",100:\"'üncü\",6:\"'ncı\",9:\"'uncu\",10:\"'uncu\",30:\"'uncu\",60:\"'ıncı\",90:\"'ıncı\"};e.defineLocale(\"tr\",{months:\"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık\".split(\"_\"),monthsShort:\"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara\".split(\"_\"),weekdays:\"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi\".split(\"_\"),weekdaysShort:\"Paz_Pzt_Sal_Çar_Per_Cum_Cmt\".split(\"_\"),weekdaysMin:\"Pz_Pt_Sa_Ça_Pe_Cu_Ct\".split(\"_\"),meridiem:function(e,t,n){return e<12?n?\"öö\":\"ÖÖ\":n?\"ös\":\"ÖS\"},meridiemParse:/öö|ÖÖ|ös|ÖS/,isPM:function(e){return\"ös\"===e||\"ÖS\"===e},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[bugün saat] LT\",nextDay:\"[yarın saat] LT\",nextWeek:\"[gelecek] dddd [saat] LT\",lastDay:\"[dün] LT\",lastWeek:\"[geçen] dddd [saat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s sonra\",past:\"%s önce\",s:\"birkaç saniye\",ss:\"%d saniye\",m:\"bir dakika\",mm:\"%d dakika\",h:\"bir saat\",hh:\"%d saat\",d:\"bir gün\",dd:\"%d gün\",w:\"bir hafta\",ww:\"%d hafta\",M:\"bir ay\",MM:\"%d ay\",y:\"bir yıl\",yy:\"%d yıl\"},ordinal:function(e,n){switch(n){case\"d\":case\"D\":case\"Do\":case\"DD\":return e;default:if(0===e)return e+\"'ıncı\";var r=e%10,o=e%100-r,i=e>=100?100:null;return e+(t[r]||t[o]||t[i])}},week:{dow:1,doy:7}})}(n(381))},8254:function(e,t,n){!function(e){\"use strict\";function t(e,t,n,r){var o={s:[\"viensas secunds\",\"'iensas secunds\"],ss:[e+\" secunds\",e+\" secunds\"],m:[\"'n míut\",\"'iens míut\"],mm:[e+\" míuts\",e+\" míuts\"],h:[\"'n þora\",\"'iensa þora\"],hh:[e+\" þoras\",e+\" þoras\"],d:[\"'n ziua\",\"'iensa ziua\"],dd:[e+\" ziuas\",e+\" ziuas\"],M:[\"'n mes\",\"'iens mes\"],MM:[e+\" mesen\",e+\" mesen\"],y:[\"'n ar\",\"'iens ar\"],yy:[e+\" ars\",e+\" ars\"]};return r||t?o[n][0]:o[n][1]}e.defineLocale(\"tzl\",{months:\"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar\".split(\"_\"),monthsShort:\"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec\".split(\"_\"),weekdays:\"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi\".split(\"_\"),weekdaysShort:\"Súl_Lún_Mai_Már_Xhú_Vié_Sát\".split(\"_\"),weekdaysMin:\"Sú_Lú_Ma_Má_Xh_Vi_Sá\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM [dallas] YYYY\",LLL:\"D. MMMM [dallas] YYYY HH.mm\",LLLL:\"dddd, [li] D. MMMM [dallas] YYYY HH.mm\"},meridiemParse:/d\\'o|d\\'a/i,isPM:function(e){return\"d'o\"===e.toLowerCase()},meridiem:function(e,t,n){return e>11?n?\"d'o\":\"D'O\":n?\"d'a\":\"D'A\"},calendar:{sameDay:\"[oxhi à] LT\",nextDay:\"[demà à] LT\",nextWeek:\"dddd [à] LT\",lastDay:\"[ieiri à] LT\",lastWeek:\"[sür el] dddd [lasteu à] LT\",sameElse:\"L\"},relativeTime:{future:\"osprei %s\",past:\"ja%s\",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})}(n(381))},699:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"tzm-latn\",{months:\"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir\".split(\"_\"),monthsShort:\"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir\".split(\"_\"),weekdays:\"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas\".split(\"_\"),weekdaysShort:\"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas\".split(\"_\"),weekdaysMin:\"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[asdkh g] LT\",nextDay:\"[aska g] LT\",nextWeek:\"dddd [g] LT\",lastDay:\"[assant g] LT\",lastWeek:\"dddd [g] LT\",sameElse:\"L\"},relativeTime:{future:\"dadkh s yan %s\",past:\"yan %s\",s:\"imik\",ss:\"%d imik\",m:\"minuḍ\",mm:\"%d minuḍ\",h:\"saɛa\",hh:\"%d tassaɛin\",d:\"ass\",dd:\"%d ossan\",M:\"ayowr\",MM:\"%d iyyirn\",y:\"asgas\",yy:\"%d isgasn\"},week:{dow:6,doy:12}})}(n(381))},1106:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"tzm\",{months:\"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ\".split(\"_\"),monthsShort:\"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ\".split(\"_\"),weekdays:\"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ\".split(\"_\"),weekdaysShort:\"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ\".split(\"_\"),weekdaysMin:\"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[ⴰⵙⴷⵅ ⴴ] LT\",nextDay:\"[ⴰⵙⴽⴰ ⴴ] LT\",nextWeek:\"dddd [ⴴ] LT\",lastDay:\"[ⴰⵚⴰⵏⵜ ⴴ] LT\",lastWeek:\"dddd [ⴴ] LT\",sameElse:\"L\"},relativeTime:{future:\"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s\",past:\"ⵢⴰⵏ %s\",s:\"ⵉⵎⵉⴽ\",ss:\"%d ⵉⵎⵉⴽ\",m:\"ⵎⵉⵏⵓⴺ\",mm:\"%d ⵎⵉⵏⵓⴺ\",h:\"ⵙⴰⵄⴰ\",hh:\"%d ⵜⴰⵙⵙⴰⵄⵉⵏ\",d:\"ⴰⵙⵙ\",dd:\"%d oⵙⵙⴰⵏ\",M:\"ⴰⵢoⵓⵔ\",MM:\"%d ⵉⵢⵢⵉⵔⵏ\",y:\"ⴰⵙⴳⴰⵙ\",yy:\"%d ⵉⵙⴳⴰⵙⵏ\"},week:{dow:6,doy:12}})}(n(381))},9288:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"ug-cn\",{months:\"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر\".split(\"_\"),monthsShort:\"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر\".split(\"_\"),weekdays:\"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە\".split(\"_\"),weekdaysShort:\"يە_دۈ_سە_چا_پە_جۈ_شە\".split(\"_\"),weekdaysMin:\"يە_دۈ_سە_چا_پە_جۈ_شە\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY-يىلىM-ئاينىڭD-كۈنى\",LLL:\"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm\",LLLL:\"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm\"},meridiemParse:/يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,meridiemHour:function(e,t){return 12===e&&(e=0),\"يېرىم كېچە\"===t||\"سەھەر\"===t||\"چۈشتىن بۇرۇن\"===t?e:\"چۈشتىن كېيىن\"===t||\"كەچ\"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,n){var r=100*e+t;return r<600?\"يېرىم كېچە\":r<900?\"سەھەر\":r<1130?\"چۈشتىن بۇرۇن\":r<1230?\"چۈش\":r<1800?\"چۈشتىن كېيىن\":\"كەچ\"},calendar:{sameDay:\"[بۈگۈن سائەت] LT\",nextDay:\"[ئەتە سائەت] LT\",nextWeek:\"[كېلەركى] dddd [سائەت] LT\",lastDay:\"[تۆنۈگۈن] LT\",lastWeek:\"[ئالدىنقى] dddd [سائەت] LT\",sameElse:\"L\"},relativeTime:{future:\"%s كېيىن\",past:\"%s بۇرۇن\",s:\"نەچچە سېكونت\",ss:\"%d سېكونت\",m:\"بىر مىنۇت\",mm:\"%d مىنۇت\",h:\"بىر سائەت\",hh:\"%d سائەت\",d:\"بىر كۈن\",dd:\"%d كۈن\",M:\"بىر ئاي\",MM:\"%d ئاي\",y:\"بىر يىل\",yy:\"%d يىل\"},dayOfMonthOrdinalParse:/\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,ordinal:function(e,t){switch(t){case\"d\":case\"D\":case\"DDD\":return e+\"-كۈنى\";case\"w\":case\"W\":return e+\"-ھەپتە\";default:return e}},preparse:function(e){return e.replace(/،/g,\",\")},postformat:function(e){return e.replace(/,/g,\"،\")},week:{dow:1,doy:7}})}(n(381))},7691:function(e,t,n){!function(e){\"use strict\";function t(e,t){var n=e.split(\"_\");return t%10==1&&t%100!=11?n[0]:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?n[1]:n[2]}function n(e,n,r){return\"m\"===r?n?\"хвилина\":\"хвилину\":\"h\"===r?n?\"година\":\"годину\":e+\" \"+t({ss:n?\"секунда_секунди_секунд\":\"секунду_секунди_секунд\",mm:n?\"хвилина_хвилини_хвилин\":\"хвилину_хвилини_хвилин\",hh:n?\"година_години_годин\":\"годину_години_годин\",dd:\"день_дні_днів\",MM:\"місяць_місяці_місяців\",yy:\"рік_роки_років\"}[r],+e)}function r(e,t){var n={nominative:\"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота\".split(\"_\"),accusative:\"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу\".split(\"_\"),genitive:\"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи\".split(\"_\")};return!0===e?n.nominative.slice(1,7).concat(n.nominative.slice(0,1)):e?n[/(\\[[ВвУу]\\]) ?dddd/.test(t)?\"accusative\":/\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(t)?\"genitive\":\"nominative\"][e.day()]:n.nominative}function o(e){return function(){return e+\"о\"+(11===this.hours()?\"б\":\"\")+\"] LT\"}}e.defineLocale(\"uk\",{months:{format:\"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня\".split(\"_\"),standalone:\"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень\".split(\"_\")},monthsShort:\"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд\".split(\"_\"),weekdays:r,weekdaysShort:\"нд_пн_вт_ср_чт_пт_сб\".split(\"_\"),weekdaysMin:\"нд_пн_вт_ср_чт_пт_сб\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY р.\",LLL:\"D MMMM YYYY р., HH:mm\",LLLL:\"dddd, D MMMM YYYY р., HH:mm\"},calendar:{sameDay:o(\"[Сьогодні \"),nextDay:o(\"[Завтра \"),lastDay:o(\"[Вчора \"),nextWeek:o(\"[У] dddd [\"),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return o(\"[Минулої] dddd [\").call(this);case 1:case 2:case 4:return o(\"[Минулого] dddd [\").call(this)}},sameElse:\"L\"},relativeTime:{future:\"за %s\",past:\"%s тому\",s:\"декілька секунд\",ss:n,m:n,mm:n,h:\"годину\",hh:n,d:\"день\",dd:n,M:\"місяць\",MM:n,y:\"рік\",yy:n},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,t,n){return e<4?\"ночі\":e<12?\"ранку\":e<17?\"дня\":\"вечора\"},dayOfMonthOrdinalParse:/\\d{1,2}-(й|го)/,ordinal:function(e,t){switch(t){case\"M\":case\"d\":case\"DDD\":case\"w\":case\"W\":return e+\"-й\";case\"D\":return e+\"-го\";default:return e}},week:{dow:1,doy:7}})}(n(381))},3795:function(e,t,n){!function(e){\"use strict\";var t=[\"جنوری\",\"فروری\",\"مارچ\",\"اپریل\",\"مئی\",\"جون\",\"جولائی\",\"اگست\",\"ستمبر\",\"اکتوبر\",\"نومبر\",\"دسمبر\"],n=[\"اتوار\",\"پیر\",\"منگل\",\"بدھ\",\"جمعرات\",\"جمعہ\",\"ہفتہ\"];e.defineLocale(\"ur\",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd، D MMMM YYYY HH:mm\"},meridiemParse:/صبح|شام/,isPM:function(e){return\"شام\"===e},meridiem:function(e,t,n){return e<12?\"صبح\":\"شام\"},calendar:{sameDay:\"[آج بوقت] LT\",nextDay:\"[کل بوقت] LT\",nextWeek:\"dddd [بوقت] LT\",lastDay:\"[گذشتہ روز بوقت] LT\",lastWeek:\"[گذشتہ] dddd [بوقت] LT\",sameElse:\"L\"},relativeTime:{future:\"%s بعد\",past:\"%s قبل\",s:\"چند سیکنڈ\",ss:\"%d سیکنڈ\",m:\"ایک منٹ\",mm:\"%d منٹ\",h:\"ایک گھنٹہ\",hh:\"%d گھنٹے\",d:\"ایک دن\",dd:\"%d دن\",M:\"ایک ماہ\",MM:\"%d ماہ\",y:\"ایک سال\",yy:\"%d سال\"},preparse:function(e){return e.replace(/،/g,\",\")},postformat:function(e){return e.replace(/,/g,\"،\")},week:{dow:1,doy:4}})}(n(381))},588:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"uz-latn\",{months:\"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr\".split(\"_\"),monthsShort:\"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek\".split(\"_\"),weekdays:\"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba\".split(\"_\"),weekdaysShort:\"Yak_Dush_Sesh_Chor_Pay_Jum_Shan\".split(\"_\"),weekdaysMin:\"Ya_Du_Se_Cho_Pa_Ju_Sha\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"D MMMM YYYY, dddd HH:mm\"},calendar:{sameDay:\"[Bugun soat] LT [da]\",nextDay:\"[Ertaga] LT [da]\",nextWeek:\"dddd [kuni soat] LT [da]\",lastDay:\"[Kecha soat] LT [da]\",lastWeek:\"[O'tgan] dddd [kuni soat] LT [da]\",sameElse:\"L\"},relativeTime:{future:\"Yaqin %s ichida\",past:\"Bir necha %s oldin\",s:\"soniya\",ss:\"%d soniya\",m:\"bir daqiqa\",mm:\"%d daqiqa\",h:\"bir soat\",hh:\"%d soat\",d:\"bir kun\",dd:\"%d kun\",M:\"bir oy\",MM:\"%d oy\",y:\"bir yil\",yy:\"%d yil\"},week:{dow:1,doy:7}})}(n(381))},6791:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"uz\",{months:\"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр\".split(\"_\"),monthsShort:\"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек\".split(\"_\"),weekdays:\"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба\".split(\"_\"),weekdaysShort:\"Якш_Душ_Сеш_Чор_Пай_Жум_Шан\".split(\"_\"),weekdaysMin:\"Як_Ду_Се_Чо_Па_Жу_Ша\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"D MMMM YYYY, dddd HH:mm\"},calendar:{sameDay:\"[Бугун соат] LT [да]\",nextDay:\"[Эртага] LT [да]\",nextWeek:\"dddd [куни соат] LT [да]\",lastDay:\"[Кеча соат] LT [да]\",lastWeek:\"[Утган] dddd [куни соат] LT [да]\",sameElse:\"L\"},relativeTime:{future:\"Якин %s ичида\",past:\"Бир неча %s олдин\",s:\"фурсат\",ss:\"%d фурсат\",m:\"бир дакика\",mm:\"%d дакика\",h:\"бир соат\",hh:\"%d соат\",d:\"бир кун\",dd:\"%d кун\",M:\"бир ой\",MM:\"%d ой\",y:\"бир йил\",yy:\"%d йил\"},week:{dow:1,doy:7}})}(n(381))},5666:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"vi\",{months:\"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12\".split(\"_\"),monthsShort:\"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12\".split(\"_\"),monthsParseExact:!0,weekdays:\"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy\".split(\"_\"),weekdaysShort:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),weekdaysMin:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,t,n){return e<12?n?\"sa\":\"SA\":n?\"ch\":\"CH\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [năm] YYYY\",LLL:\"D MMMM [năm] YYYY HH:mm\",LLLL:\"dddd, D MMMM [năm] YYYY HH:mm\",l:\"DD/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},calendar:{sameDay:\"[Hôm nay lúc] LT\",nextDay:\"[Ngày mai lúc] LT\",nextWeek:\"dddd [tuần tới lúc] LT\",lastDay:\"[Hôm qua lúc] LT\",lastWeek:\"dddd [tuần trước lúc] LT\",sameElse:\"L\"},relativeTime:{future:\"%s tới\",past:\"%s trước\",s:\"vài giây\",ss:\"%d giây\",m:\"một phút\",mm:\"%d phút\",h:\"một giờ\",hh:\"%d giờ\",d:\"một ngày\",dd:\"%d ngày\",w:\"một tuần\",ww:\"%d tuần\",M:\"một tháng\",MM:\"%d tháng\",y:\"một năm\",yy:\"%d năm\"},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(381))},4378:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"x-pseudo\",{months:\"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér\".split(\"_\"),monthsShort:\"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc\".split(\"_\"),monthsParseExact:!0,weekdays:\"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý\".split(\"_\"),weekdaysShort:\"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát\".split(\"_\"),weekdaysMin:\"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[T~ódá~ý át] LT\",nextDay:\"[T~ómó~rró~w át] LT\",nextWeek:\"dddd [át] LT\",lastDay:\"[Ý~ést~érdá~ý át] LT\",lastWeek:\"[L~ást] dddd [át] LT\",sameElse:\"L\"},relativeTime:{future:\"í~ñ %s\",past:\"%s á~gó\",s:\"á ~féw ~sécó~ñds\",ss:\"%d s~écóñ~ds\",m:\"á ~míñ~úté\",mm:\"%d m~íñú~tés\",h:\"á~ñ hó~úr\",hh:\"%d h~óúrs\",d:\"á ~dáý\",dd:\"%d d~áýs\",M:\"á ~móñ~th\",MM:\"%d m~óñt~hs\",y:\"á ~ýéár\",yy:\"%d ý~éárs\"},dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")},week:{dow:1,doy:4}})}(n(381))},5805:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"yo\",{months:\"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀\".split(\"_\"),monthsShort:\"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀\".split(\"_\"),weekdays:\"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta\".split(\"_\"),weekdaysShort:\"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá\".split(\"_\"),weekdaysMin:\"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Ònì ni] LT\",nextDay:\"[Ọ̀la ni] LT\",nextWeek:\"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",lastDay:\"[Àna ni] LT\",lastWeek:\"dddd [Ọsẹ̀ tólọ́] [ni] LT\",sameElse:\"L\"},relativeTime:{future:\"ní %s\",past:\"%s kọjá\",s:\"ìsẹjú aayá die\",ss:\"aayá %d\",m:\"ìsẹjú kan\",mm:\"ìsẹjú %d\",h:\"wákati kan\",hh:\"wákati %d\",d:\"ọjọ́ kan\",dd:\"ọjọ́ %d\",M:\"osù kan\",MM:\"osù %d\",y:\"ọdún kan\",yy:\"ọdún %d\"},dayOfMonthOrdinalParse:/ọjọ́\\s\\d{1,2}/,ordinal:\"ọjọ́ %d\",week:{dow:1,doy:4}})}(n(381))},3839:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"zh-cn\",{months:\"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),weekdays:\"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),weekdaysShort:\"周日_周一_周二_周三_周四_周五_周六\".split(\"_\"),weekdaysMin:\"日_一_二_三_四_五_六\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日Ah点mm分\",LLLL:\"YYYY年M月D日ddddAh点mm分\",l:\"YYYY/M/D\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日dddd HH:mm\"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),\"凌晨\"===t||\"早上\"===t||\"上午\"===t?e:\"下午\"===t||\"晚上\"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,n){var r=100*e+t;return r<600?\"凌晨\":r<900?\"早上\":r<1130?\"上午\":r<1230?\"中午\":r<1800?\"下午\":\"晚上\"},calendar:{sameDay:\"[今天]LT\",nextDay:\"[明天]LT\",nextWeek:function(e){return e.week()!==this.week()?\"[下]dddLT\":\"[本]dddLT\"},lastDay:\"[昨天]LT\",lastWeek:function(e){return this.week()!==e.week()?\"[上]dddLT\":\"[本]dddLT\"},sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case\"d\":case\"D\":case\"DDD\":return e+\"日\";case\"M\":return e+\"月\";case\"w\":case\"W\":return e+\"周\";default:return e}},relativeTime:{future:\"%s后\",past:\"%s前\",s:\"几秒\",ss:\"%d 秒\",m:\"1 分钟\",mm:\"%d 分钟\",h:\"1 小时\",hh:\"%d 小时\",d:\"1 天\",dd:\"%d 天\",w:\"1 周\",ww:\"%d 周\",M:\"1 个月\",MM:\"%d 个月\",y:\"1 年\",yy:\"%d 年\"},week:{dow:1,doy:4}})}(n(381))},5726:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"zh-hk\",{months:\"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),weekdays:\"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),weekdaysShort:\"週日_週一_週二_週三_週四_週五_週六\".split(\"_\"),weekdaysMin:\"日_一_二_三_四_五_六\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日 HH:mm\",LLLL:\"YYYY年M月D日dddd HH:mm\",l:\"YYYY/M/D\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日dddd HH:mm\"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),\"凌晨\"===t||\"早上\"===t||\"上午\"===t?e:\"中午\"===t?e>=11?e:e+12:\"下午\"===t||\"晚上\"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?\"凌晨\":r<900?\"早上\":r<1200?\"上午\":1200===r?\"中午\":r<1800?\"下午\":\"晚上\"},calendar:{sameDay:\"[今天]LT\",nextDay:\"[明天]LT\",nextWeek:\"[下]ddddLT\",lastDay:\"[昨天]LT\",lastWeek:\"[上]ddddLT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case\"d\":case\"D\":case\"DDD\":return e+\"日\";case\"M\":return e+\"月\";case\"w\":case\"W\":return e+\"週\";default:return e}},relativeTime:{future:\"%s後\",past:\"%s前\",s:\"幾秒\",ss:\"%d 秒\",m:\"1 分鐘\",mm:\"%d 分鐘\",h:\"1 小時\",hh:\"%d 小時\",d:\"1 天\",dd:\"%d 天\",M:\"1 個月\",MM:\"%d 個月\",y:\"1 年\",yy:\"%d 年\"}})}(n(381))},9807:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"zh-mo\",{months:\"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),weekdays:\"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),weekdaysShort:\"週日_週一_週二_週三_週四_週五_週六\".split(\"_\"),weekdaysMin:\"日_一_二_三_四_五_六\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日 HH:mm\",LLLL:\"YYYY年M月D日dddd HH:mm\",l:\"D/M/YYYY\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日dddd HH:mm\"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),\"凌晨\"===t||\"早上\"===t||\"上午\"===t?e:\"中午\"===t?e>=11?e:e+12:\"下午\"===t||\"晚上\"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?\"凌晨\":r<900?\"早上\":r<1130?\"上午\":r<1230?\"中午\":r<1800?\"下午\":\"晚上\"},calendar:{sameDay:\"[今天] LT\",nextDay:\"[明天] LT\",nextWeek:\"[下]dddd LT\",lastDay:\"[昨天] LT\",lastWeek:\"[上]dddd LT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case\"d\":case\"D\":case\"DDD\":return e+\"日\";case\"M\":return e+\"月\";case\"w\":case\"W\":return e+\"週\";default:return e}},relativeTime:{future:\"%s內\",past:\"%s前\",s:\"幾秒\",ss:\"%d 秒\",m:\"1 分鐘\",mm:\"%d 分鐘\",h:\"1 小時\",hh:\"%d 小時\",d:\"1 天\",dd:\"%d 天\",M:\"1 個月\",MM:\"%d 個月\",y:\"1 年\",yy:\"%d 年\"}})}(n(381))},4152:function(e,t,n){!function(e){\"use strict\";e.defineLocale(\"zh-tw\",{months:\"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),weekdays:\"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),weekdaysShort:\"週日_週一_週二_週三_週四_週五_週六\".split(\"_\"),weekdaysMin:\"日_一_二_三_四_五_六\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日 HH:mm\",LLLL:\"YYYY年M月D日dddd HH:mm\",l:\"YYYY/M/D\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日dddd HH:mm\"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),\"凌晨\"===t||\"早上\"===t||\"上午\"===t?e:\"中午\"===t?e>=11?e:e+12:\"下午\"===t||\"晚上\"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?\"凌晨\":r<900?\"早上\":r<1130?\"上午\":r<1230?\"中午\":r<1800?\"下午\":\"晚上\"},calendar:{sameDay:\"[今天] LT\",nextDay:\"[明天] LT\",nextWeek:\"[下]dddd LT\",lastDay:\"[昨天] LT\",lastWeek:\"[上]dddd LT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case\"d\":case\"D\":case\"DDD\":return e+\"日\";case\"M\":return e+\"月\";case\"w\":case\"W\":return e+\"週\";default:return e}},relativeTime:{future:\"%s後\",past:\"%s前\",s:\"幾秒\",ss:\"%d 秒\",m:\"1 分鐘\",mm:\"%d 分鐘\",h:\"1 小時\",hh:\"%d 小時\",d:\"1 天\",dd:\"%d 天\",M:\"1 個月\",MM:\"%d 個月\",y:\"1 年\",yy:\"%d 年\"}})}(n(381))},6700:(e,t,n)=>{var r={\"./af\":2786,\"./af.js\":2786,\"./ar\":867,\"./ar-dz\":4130,\"./ar-dz.js\":4130,\"./ar-kw\":6135,\"./ar-kw.js\":6135,\"./ar-ly\":6440,\"./ar-ly.js\":6440,\"./ar-ma\":7702,\"./ar-ma.js\":7702,\"./ar-sa\":6040,\"./ar-sa.js\":6040,\"./ar-tn\":7100,\"./ar-tn.js\":7100,\"./ar.js\":867,\"./az\":1083,\"./az.js\":1083,\"./be\":9808,\"./be.js\":9808,\"./bg\":8338,\"./bg.js\":8338,\"./bm\":7438,\"./bm.js\":7438,\"./bn\":8905,\"./bn-bd\":6225,\"./bn-bd.js\":6225,\"./bn.js\":8905,\"./bo\":1560,\"./bo.js\":1560,\"./br\":1278,\"./br.js\":1278,\"./bs\":622,\"./bs.js\":622,\"./ca\":2468,\"./ca.js\":2468,\"./cs\":5822,\"./cs.js\":5822,\"./cv\":877,\"./cv.js\":877,\"./cy\":7373,\"./cy.js\":7373,\"./da\":4780,\"./da.js\":4780,\"./de\":9740,\"./de-at\":217,\"./de-at.js\":217,\"./de-ch\":894,\"./de-ch.js\":894,\"./de.js\":9740,\"./dv\":5300,\"./dv.js\":5300,\"./el\":837,\"./el.js\":837,\"./en-au\":8348,\"./en-au.js\":8348,\"./en-ca\":7925,\"./en-ca.js\":7925,\"./en-gb\":2243,\"./en-gb.js\":2243,\"./en-ie\":6436,\"./en-ie.js\":6436,\"./en-il\":7207,\"./en-il.js\":7207,\"./en-in\":4175,\"./en-in.js\":4175,\"./en-nz\":6319,\"./en-nz.js\":6319,\"./en-sg\":1662,\"./en-sg.js\":1662,\"./eo\":2915,\"./eo.js\":2915,\"./es\":5655,\"./es-do\":5251,\"./es-do.js\":5251,\"./es-mx\":6112,\"./es-mx.js\":6112,\"./es-us\":1146,\"./es-us.js\":1146,\"./es.js\":5655,\"./et\":5603,\"./et.js\":5603,\"./eu\":7763,\"./eu.js\":7763,\"./fa\":6959,\"./fa.js\":6959,\"./fi\":1897,\"./fi.js\":1897,\"./fil\":2549,\"./fil.js\":2549,\"./fo\":4694,\"./fo.js\":4694,\"./fr\":4470,\"./fr-ca\":3049,\"./fr-ca.js\":3049,\"./fr-ch\":2330,\"./fr-ch.js\":2330,\"./fr.js\":4470,\"./fy\":5044,\"./fy.js\":5044,\"./ga\":9295,\"./ga.js\":9295,\"./gd\":2101,\"./gd.js\":2101,\"./gl\":8794,\"./gl.js\":8794,\"./gom-deva\":7884,\"./gom-deva.js\":7884,\"./gom-latn\":3168,\"./gom-latn.js\":3168,\"./gu\":5349,\"./gu.js\":5349,\"./he\":4206,\"./he.js\":4206,\"./hi\":94,\"./hi.js\":94,\"./hr\":316,\"./hr.js\":316,\"./hu\":2138,\"./hu.js\":2138,\"./hy-am\":1423,\"./hy-am.js\":1423,\"./id\":9218,\"./id.js\":9218,\"./is\":135,\"./is.js\":135,\"./it\":626,\"./it-ch\":150,\"./it-ch.js\":150,\"./it.js\":626,\"./ja\":9183,\"./ja.js\":9183,\"./jv\":4286,\"./jv.js\":4286,\"./ka\":2105,\"./ka.js\":2105,\"./kk\":7772,\"./kk.js\":7772,\"./km\":8758,\"./km.js\":8758,\"./kn\":9282,\"./kn.js\":9282,\"./ko\":3730,\"./ko.js\":3730,\"./ku\":1408,\"./ku.js\":1408,\"./ky\":3291,\"./ky.js\":3291,\"./lb\":6841,\"./lb.js\":6841,\"./lo\":5466,\"./lo.js\":5466,\"./lt\":7010,\"./lt.js\":7010,\"./lv\":7595,\"./lv.js\":7595,\"./me\":9861,\"./me.js\":9861,\"./mi\":5493,\"./mi.js\":5493,\"./mk\":5966,\"./mk.js\":5966,\"./ml\":7341,\"./ml.js\":7341,\"./mn\":5115,\"./mn.js\":5115,\"./mr\":370,\"./mr.js\":370,\"./ms\":9847,\"./ms-my\":1237,\"./ms-my.js\":1237,\"./ms.js\":9847,\"./mt\":2126,\"./mt.js\":2126,\"./my\":6165,\"./my.js\":6165,\"./nb\":4924,\"./nb.js\":4924,\"./ne\":6744,\"./ne.js\":6744,\"./nl\":3901,\"./nl-be\":9814,\"./nl-be.js\":9814,\"./nl.js\":3901,\"./nn\":3877,\"./nn.js\":3877,\"./oc-lnc\":2135,\"./oc-lnc.js\":2135,\"./pa-in\":5858,\"./pa-in.js\":5858,\"./pl\":4495,\"./pl.js\":4495,\"./pt\":9520,\"./pt-br\":7971,\"./pt-br.js\":7971,\"./pt.js\":9520,\"./ro\":6459,\"./ro.js\":6459,\"./ru\":1793,\"./ru.js\":1793,\"./sd\":950,\"./sd.js\":950,\"./se\":490,\"./se.js\":490,\"./si\":124,\"./si.js\":124,\"./sk\":4249,\"./sk.js\":4249,\"./sl\":4985,\"./sl.js\":4985,\"./sq\":1104,\"./sq.js\":1104,\"./sr\":9131,\"./sr-cyrl\":9915,\"./sr-cyrl.js\":9915,\"./sr.js\":9131,\"./ss\":5893,\"./ss.js\":5893,\"./sv\":8760,\"./sv.js\":8760,\"./sw\":1172,\"./sw.js\":1172,\"./ta\":7333,\"./ta.js\":7333,\"./te\":3110,\"./te.js\":3110,\"./tet\":2455,\"./tet.js\":2455,\"./tg\":7321,\"./tg.js\":7321,\"./th\":9041,\"./th.js\":9041,\"./tk\":9005,\"./tk.js\":9005,\"./tl-ph\":5768,\"./tl-ph.js\":5768,\"./tlh\":9444,\"./tlh.js\":9444,\"./tr\":2397,\"./tr.js\":2397,\"./tzl\":8254,\"./tzl.js\":8254,\"./tzm\":1106,\"./tzm-latn\":699,\"./tzm-latn.js\":699,\"./tzm.js\":1106,\"./ug-cn\":9288,\"./ug-cn.js\":9288,\"./uk\":7691,\"./uk.js\":7691,\"./ur\":3795,\"./ur.js\":3795,\"./uz\":6791,\"./uz-latn\":588,\"./uz-latn.js\":588,\"./uz.js\":6791,\"./vi\":5666,\"./vi.js\":5666,\"./x-pseudo\":4378,\"./x-pseudo.js\":4378,\"./yo\":5805,\"./yo.js\":5805,\"./zh-cn\":3839,\"./zh-cn.js\":3839,\"./zh-hk\":5726,\"./zh-hk.js\":5726,\"./zh-mo\":9807,\"./zh-mo.js\":9807,\"./zh-tw\":4152,\"./zh-tw.js\":4152};function o(e){var t=i(e);return n(t)}function i(e){if(!n.o(r,e)){var t=new Error(\"Cannot find module '\"+e+\"'\");throw t.code=\"MODULE_NOT_FOUND\",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=i,e.exports=o,o.id=6700},381:function(e,t,n){(e=n.nmd(e)).exports=function(){\"use strict\";var t,r;function o(){return t.apply(null,arguments)}function i(e){t=e}function s(e){return e instanceof Array||\"[object Array]\"===Object.prototype.toString.call(e)}function a(e){return null!=e&&\"[object Object]\"===Object.prototype.toString.call(e)}function l(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function c(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(l(e,t))return!1;return!0}function u(e){return void 0===e}function d(e){return\"number\"==typeof e||\"[object Number]\"===Object.prototype.toString.call(e)}function h(e){return e instanceof Date||\"[object Date]\"===Object.prototype.toString.call(e)}function m(e,t){var n,r=[],o=e.length;for(n=0;n<o;++n)r.push(t(e[n],n));return r}function f(e,t){for(var n in t)l(t,n)&&(e[n]=t[n]);return l(t,\"toString\")&&(e.toString=t.toString),l(t,\"valueOf\")&&(e.valueOf=t.valueOf),e}function p(e,t,n,r){return Kn(e,t,n,r,!0).utc()}function g(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function v(e){return null==e._pf&&(e._pf=g()),e._pf}function y(e){if(null==e._isValid){var t=v(e),n=r.call(t.parsedDateParts,(function(e){return null!=e})),o=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(o=o&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return o;e._isValid=o}return e._isValid}function b(e){var t=p(NaN);return null!=e?f(v(t),e):v(t).userInvalidated=!0,t}r=Array.prototype.some?Array.prototype.some:function(e){var t,n=Object(this),r=n.length>>>0;for(t=0;t<r;t++)if(t in n&&e.call(this,n[t],t,n))return!0;return!1};var _=o.momentProperties=[],w=!1;function x(e,t){var n,r,o,i=_.length;if(u(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),u(t._i)||(e._i=t._i),u(t._f)||(e._f=t._f),u(t._l)||(e._l=t._l),u(t._strict)||(e._strict=t._strict),u(t._tzm)||(e._tzm=t._tzm),u(t._isUTC)||(e._isUTC=t._isUTC),u(t._offset)||(e._offset=t._offset),u(t._pf)||(e._pf=v(t)),u(t._locale)||(e._locale=t._locale),i>0)for(n=0;n<i;n++)u(o=t[r=_[n]])||(e[r]=o);return e}function C(e){x(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===w&&(w=!0,o.updateOffset(this),w=!1)}function k(e){return e instanceof C||null!=e&&null!=e._isAMomentObject}function D(e){!1===o.suppressDeprecationWarnings&&\"undefined\"!=typeof console&&console.warn&&console.warn(\"Deprecation warning: \"+e)}function S(e,t){var n=!0;return f((function(){if(null!=o.deprecationHandler&&o.deprecationHandler(null,e),n){var r,i,s,a=[],c=arguments.length;for(i=0;i<c;i++){if(r=\"\",\"object\"==typeof arguments[i]){for(s in r+=\"\\n[\"+i+\"] \",arguments[0])l(arguments[0],s)&&(r+=s+\": \"+arguments[0][s]+\", \");r=r.slice(0,-2)}else r=arguments[i];a.push(r)}D(e+\"\\nArguments: \"+Array.prototype.slice.call(a).join(\"\")+\"\\n\"+(new Error).stack),n=!1}return t.apply(this,arguments)}),t)}var A,M={};function L(e,t){null!=o.deprecationHandler&&o.deprecationHandler(e,t),M[e]||(D(t),M[e]=!0)}function E(e){return\"undefined\"!=typeof Function&&e instanceof Function||\"[object Function]\"===Object.prototype.toString.call(e)}function T(e){var t,n;for(n in e)l(e,n)&&(E(t=e[n])?this[n]=t:this[\"_\"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)}function F(e,t){var n,r=f({},e);for(n in t)l(t,n)&&(a(e[n])&&a(t[n])?(r[n]={},f(r[n],e[n]),f(r[n],t[n])):null!=t[n]?r[n]=t[n]:delete r[n]);for(n in e)l(e,n)&&!l(t,n)&&a(e[n])&&(r[n]=f({},r[n]));return r}function O(e){null!=e&&this.set(e)}o.suppressDeprecationWarnings=!1,o.deprecationHandler=null,A=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)l(e,t)&&n.push(t);return n};var B={sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"};function R(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return E(r)?r.call(t,n):r}function $(e,t,n){var r=\"\"+Math.abs(e),o=t-r.length;return(e>=0?n?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,o)).toString().substr(1)+r}var N=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Y=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,P={},I={};function H(e,t,n,r){var o=r;\"string\"==typeof r&&(o=function(){return this[r]()}),e&&(I[e]=o),t&&(I[t[0]]=function(){return $(o.apply(this,arguments),t[1],t[2])}),n&&(I[n]=function(){return this.localeData().ordinal(o.apply(this,arguments),e)})}function j(e){return e.match(/\\[[\\s\\S]/)?e.replace(/^\\[|\\]$/g,\"\"):e.replace(/\\\\/g,\"\")}function W(e){var t,n,r=e.match(N);for(t=0,n=r.length;t<n;t++)I[r[t]]?r[t]=I[r[t]]:r[t]=j(r[t]);return function(t){var o,i=\"\";for(o=0;o<n;o++)i+=E(r[o])?r[o].call(t,e):r[o];return i}}function z(e,t){return e.isValid()?(t=U(t,e.localeData()),P[t]=P[t]||W(t),P[t](e)):e.localeData().invalidDate()}function U(e,t){var n=5;function r(e){return t.longDateFormat(e)||e}for(Y.lastIndex=0;n>=0&&Y.test(e);)e=e.replace(Y,r),Y.lastIndex=0,n-=1;return e}var V={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};function q(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(N).map((function(e){return\"MMMM\"===e||\"MM\"===e||\"DD\"===e||\"dddd\"===e?e.slice(1):e})).join(\"\"),this._longDateFormat[e])}var G=\"Invalid date\";function K(){return this._invalidDate}var X=\"%d\",J=/\\d{1,2}/;function Q(e){return this._ordinal.replace(\"%d\",e)}var Z={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function ee(e,t,n,r){var o=this._relativeTime[n];return E(o)?o(e,t,n,r):o.replace(/%d/i,e)}function te(e,t){var n=this._relativeTime[e>0?\"future\":\"past\"];return E(n)?n(t):n.replace(/%s/i,t)}var ne={};function re(e,t){var n=e.toLowerCase();ne[n]=ne[n+\"s\"]=ne[t]=e}function oe(e){return\"string\"==typeof e?ne[e]||ne[e.toLowerCase()]:void 0}function ie(e){var t,n,r={};for(n in e)l(e,n)&&(t=oe(n))&&(r[t]=e[n]);return r}var se={};function ae(e,t){se[e]=t}function le(e){var t,n=[];for(t in e)l(e,t)&&n.push({unit:t,priority:se[t]});return n.sort((function(e,t){return e.priority-t.priority})),n}function ce(e){return e%4==0&&e%100!=0||e%400==0}function ue(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function de(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=ue(t)),n}function he(e,t){return function(n){return null!=n?(fe(this,e,n),o.updateOffset(this,t),this):me(this,e)}}function me(e,t){return e.isValid()?e._d[\"get\"+(e._isUTC?\"UTC\":\"\")+t]():NaN}function fe(e,t,n){e.isValid()&&!isNaN(n)&&(\"FullYear\"===t&&ce(e.year())&&1===e.month()&&29===e.date()?(n=de(n),e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+t](n,e.month(),et(n,e.month()))):e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+t](n))}function pe(e){return E(this[e=oe(e)])?this[e]():this}function ge(e,t){if(\"object\"==typeof e){var n,r=le(e=ie(e)),o=r.length;for(n=0;n<o;n++)this[r[n].unit](e[r[n].unit])}else if(E(this[e=oe(e)]))return this[e](t);return this}var ve,ye=/\\d/,be=/\\d\\d/,_e=/\\d{3}/,we=/\\d{4}/,xe=/[+-]?\\d{6}/,Ce=/\\d\\d?/,ke=/\\d\\d\\d\\d?/,De=/\\d\\d\\d\\d\\d\\d?/,Se=/\\d{1,3}/,Ae=/\\d{1,4}/,Me=/[+-]?\\d{1,6}/,Le=/\\d+/,Ee=/[+-]?\\d+/,Te=/Z|[+-]\\d\\d:?\\d\\d/gi,Fe=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,Oe=/[+-]?\\d+(\\.\\d{1,3})?/,Be=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;function Re(e,t,n){ve[e]=E(t)?t:function(e,r){return e&&n?n:t}}function $e(e,t){return l(ve,e)?ve[e](t._strict,t._locale):new RegExp(Ne(e))}function Ne(e){return Ye(e.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,(function(e,t,n,r,o){return t||n||r||o})))}function Ye(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}ve={};var Pe={};function Ie(e,t){var n,r,o=t;for(\"string\"==typeof e&&(e=[e]),d(t)&&(o=function(e,n){n[t]=de(e)}),r=e.length,n=0;n<r;n++)Pe[e[n]]=o}function He(e,t){Ie(e,(function(e,n,r,o){r._w=r._w||{},t(e,r._w,r,o)}))}function je(e,t,n){null!=t&&l(Pe,e)&&Pe[e](t,n._a,n,e)}var We,ze=0,Ue=1,Ve=2,qe=3,Ge=4,Ke=5,Xe=6,Je=7,Qe=8;function Ze(e,t){return(e%t+t)%t}function et(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=Ze(t,12);return e+=(t-n)/12,1===n?ce(e)?29:28:31-n%7%2}We=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},H(\"M\",[\"MM\",2],\"Mo\",(function(){return this.month()+1})),H(\"MMM\",0,0,(function(e){return this.localeData().monthsShort(this,e)})),H(\"MMMM\",0,0,(function(e){return this.localeData().months(this,e)})),re(\"month\",\"M\"),ae(\"month\",8),Re(\"M\",Ce),Re(\"MM\",Ce,be),Re(\"MMM\",(function(e,t){return t.monthsShortRegex(e)})),Re(\"MMMM\",(function(e,t){return t.monthsRegex(e)})),Ie([\"M\",\"MM\"],(function(e,t){t[Ue]=de(e)-1})),Ie([\"MMM\",\"MMMM\"],(function(e,t,n,r){var o=n._locale.monthsParse(e,r,n._strict);null!=o?t[Ue]=o:v(n).invalidMonth=e}));var tt=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),nt=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),rt=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,ot=Be,it=Be;function st(e,t){return e?s(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||rt).test(t)?\"format\":\"standalone\"][e.month()]:s(this._months)?this._months:this._months.standalone}function at(e,t){return e?s(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[rt.test(t)?\"format\":\"standalone\"][e.month()]:s(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function lt(e,t,n){var r,o,i,s=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)i=p([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(i,\"\").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(i,\"\").toLocaleLowerCase();return n?\"MMM\"===t?-1!==(o=We.call(this._shortMonthsParse,s))?o:null:-1!==(o=We.call(this._longMonthsParse,s))?o:null:\"MMM\"===t?-1!==(o=We.call(this._shortMonthsParse,s))||-1!==(o=We.call(this._longMonthsParse,s))?o:null:-1!==(o=We.call(this._longMonthsParse,s))||-1!==(o=We.call(this._shortMonthsParse,s))?o:null}function ct(e,t,n){var r,o,i;if(this._monthsParseExact)return lt.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(o=p([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp(\"^\"+this.months(o,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[r]=new RegExp(\"^\"+this.monthsShort(o,\"\").replace(\".\",\"\")+\"$\",\"i\")),n||this._monthsParse[r]||(i=\"^\"+this.months(o,\"\")+\"|^\"+this.monthsShort(o,\"\"),this._monthsParse[r]=new RegExp(i.replace(\".\",\"\"),\"i\")),n&&\"MMMM\"===t&&this._longMonthsParse[r].test(e))return r;if(n&&\"MMM\"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function ut(e,t){var n;if(!e.isValid())return e;if(\"string\"==typeof t)if(/^\\d+$/.test(t))t=de(t);else if(!d(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),et(e.year(),t)),e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+\"Month\"](t,n),e}function dt(e){return null!=e?(ut(this,e),o.updateOffset(this,!0),this):me(this,\"Month\")}function ht(){return et(this.year(),this.month())}function mt(e){return this._monthsParseExact?(l(this,\"_monthsRegex\")||pt.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(l(this,\"_monthsShortRegex\")||(this._monthsShortRegex=ot),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function ft(e){return this._monthsParseExact?(l(this,\"_monthsRegex\")||pt.call(this),e?this._monthsStrictRegex:this._monthsRegex):(l(this,\"_monthsRegex\")||(this._monthsRegex=it),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function pt(){function e(e,t){return t.length-e.length}var t,n,r=[],o=[],i=[];for(t=0;t<12;t++)n=p([2e3,t]),r.push(this.monthsShort(n,\"\")),o.push(this.months(n,\"\")),i.push(this.months(n,\"\")),i.push(this.monthsShort(n,\"\"));for(r.sort(e),o.sort(e),i.sort(e),t=0;t<12;t++)r[t]=Ye(r[t]),o[t]=Ye(o[t]);for(t=0;t<24;t++)i[t]=Ye(i[t]);this._monthsRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\")}function gt(e){return ce(e)?366:365}H(\"Y\",0,0,(function(){var e=this.year();return e<=9999?$(e,4):\"+\"+e})),H(0,[\"YY\",2],0,(function(){return this.year()%100})),H(0,[\"YYYY\",4],0,\"year\"),H(0,[\"YYYYY\",5],0,\"year\"),H(0,[\"YYYYYY\",6,!0],0,\"year\"),re(\"year\",\"y\"),ae(\"year\",1),Re(\"Y\",Ee),Re(\"YY\",Ce,be),Re(\"YYYY\",Ae,we),Re(\"YYYYY\",Me,xe),Re(\"YYYYYY\",Me,xe),Ie([\"YYYYY\",\"YYYYYY\"],ze),Ie(\"YYYY\",(function(e,t){t[ze]=2===e.length?o.parseTwoDigitYear(e):de(e)})),Ie(\"YY\",(function(e,t){t[ze]=o.parseTwoDigitYear(e)})),Ie(\"Y\",(function(e,t){t[ze]=parseInt(e,10)})),o.parseTwoDigitYear=function(e){return de(e)+(de(e)>68?1900:2e3)};var vt=he(\"FullYear\",!0);function yt(){return ce(this.year())}function bt(e,t,n,r,o,i,s){var a;return e<100&&e>=0?(a=new Date(e+400,t,n,r,o,i,s),isFinite(a.getFullYear())&&a.setFullYear(e)):a=new Date(e,t,n,r,o,i,s),a}function _t(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function wt(e,t,n){var r=7+t-n;return-(7+_t(e,0,r).getUTCDay()-t)%7+r-1}function xt(e,t,n,r,o){var i,s,a=1+7*(t-1)+(7+n-r)%7+wt(e,r,o);return a<=0?s=gt(i=e-1)+a:a>gt(e)?(i=e+1,s=a-gt(e)):(i=e,s=a),{year:i,dayOfYear:s}}function Ct(e,t,n){var r,o,i=wt(e.year(),t,n),s=Math.floor((e.dayOfYear()-i-1)/7)+1;return s<1?r=s+kt(o=e.year()-1,t,n):s>kt(e.year(),t,n)?(r=s-kt(e.year(),t,n),o=e.year()+1):(o=e.year(),r=s),{week:r,year:o}}function kt(e,t,n){var r=wt(e,t,n),o=wt(e+1,t,n);return(gt(e)-r+o)/7}function Dt(e){return Ct(e,this._week.dow,this._week.doy).week}H(\"w\",[\"ww\",2],\"wo\",\"week\"),H(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),re(\"week\",\"w\"),re(\"isoWeek\",\"W\"),ae(\"week\",5),ae(\"isoWeek\",5),Re(\"w\",Ce),Re(\"ww\",Ce,be),Re(\"W\",Ce),Re(\"WW\",Ce,be),He([\"w\",\"ww\",\"W\",\"WW\"],(function(e,t,n,r){t[r.substr(0,1)]=de(e)}));var St={dow:0,doy:6};function At(){return this._week.dow}function Mt(){return this._week.doy}function Lt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),\"d\")}function Et(e){var t=Ct(this,1,4).week;return null==e?t:this.add(7*(e-t),\"d\")}function Tt(e,t){return\"string\"!=typeof e?e:isNaN(e)?\"number\"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}function Ft(e,t){return\"string\"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Ot(e,t){return e.slice(t,7).concat(e.slice(0,t))}H(\"d\",0,\"do\",\"day\"),H(\"dd\",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),H(\"ddd\",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),H(\"dddd\",0,0,(function(e){return this.localeData().weekdays(this,e)})),H(\"e\",0,0,\"weekday\"),H(\"E\",0,0,\"isoWeekday\"),re(\"day\",\"d\"),re(\"weekday\",\"e\"),re(\"isoWeekday\",\"E\"),ae(\"day\",11),ae(\"weekday\",11),ae(\"isoWeekday\",11),Re(\"d\",Ce),Re(\"e\",Ce),Re(\"E\",Ce),Re(\"dd\",(function(e,t){return t.weekdaysMinRegex(e)})),Re(\"ddd\",(function(e,t){return t.weekdaysShortRegex(e)})),Re(\"dddd\",(function(e,t){return t.weekdaysRegex(e)})),He([\"dd\",\"ddd\",\"dddd\"],(function(e,t,n,r){var o=n._locale.weekdaysParse(e,r,n._strict);null!=o?t.d=o:v(n).invalidWeekday=e})),He([\"d\",\"e\",\"E\"],(function(e,t,n,r){t[r]=de(e)}));var Bt=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),Rt=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),$t=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),Nt=Be,Yt=Be,Pt=Be;function It(e,t){var n=s(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?\"format\":\"standalone\"];return!0===e?Ot(n,this._week.dow):e?n[e.day()]:n}function Ht(e){return!0===e?Ot(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function jt(e){return!0===e?Ot(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Wt(e,t,n){var r,o,i,s=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=p([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,\"\").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,\"\").toLocaleLowerCase();return n?\"dddd\"===t?-1!==(o=We.call(this._weekdaysParse,s))?o:null:\"ddd\"===t?-1!==(o=We.call(this._shortWeekdaysParse,s))?o:null:-1!==(o=We.call(this._minWeekdaysParse,s))?o:null:\"dddd\"===t?-1!==(o=We.call(this._weekdaysParse,s))||-1!==(o=We.call(this._shortWeekdaysParse,s))||-1!==(o=We.call(this._minWeekdaysParse,s))?o:null:\"ddd\"===t?-1!==(o=We.call(this._shortWeekdaysParse,s))||-1!==(o=We.call(this._weekdaysParse,s))||-1!==(o=We.call(this._minWeekdaysParse,s))?o:null:-1!==(o=We.call(this._minWeekdaysParse,s))||-1!==(o=We.call(this._weekdaysParse,s))||-1!==(o=We.call(this._shortWeekdaysParse,s))?o:null}function zt(e,t,n){var r,o,i;if(this._weekdaysParseExact)return Wt.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(o=p([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp(\"^\"+this.weekdays(o,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[r]=new RegExp(\"^\"+this.weekdaysShort(o,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[r]=new RegExp(\"^\"+this.weekdaysMin(o,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[r]||(i=\"^\"+this.weekdays(o,\"\")+\"|^\"+this.weekdaysShort(o,\"\")+\"|^\"+this.weekdaysMin(o,\"\"),this._weekdaysParse[r]=new RegExp(i.replace(\".\",\"\"),\"i\")),n&&\"dddd\"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&\"ddd\"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&\"dd\"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Ut(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Tt(e,this.localeData()),this.add(e-t,\"d\")):t}function Vt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,\"d\")}function qt(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=Ft(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function Gt(e){return this._weekdaysParseExact?(l(this,\"_weekdaysRegex\")||Jt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,\"_weekdaysRegex\")||(this._weekdaysRegex=Nt),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function Kt(e){return this._weekdaysParseExact?(l(this,\"_weekdaysRegex\")||Jt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=Yt),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Xt(e){return this._weekdaysParseExact?(l(this,\"_weekdaysRegex\")||Jt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=Pt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Jt(){function e(e,t){return t.length-e.length}var t,n,r,o,i,s=[],a=[],l=[],c=[];for(t=0;t<7;t++)n=p([2e3,1]).day(t),r=Ye(this.weekdaysMin(n,\"\")),o=Ye(this.weekdaysShort(n,\"\")),i=Ye(this.weekdays(n,\"\")),s.push(r),a.push(o),l.push(i),c.push(r),c.push(o),c.push(i);s.sort(e),a.sort(e),l.sort(e),c.sort(e),this._weekdaysRegex=new RegExp(\"^(\"+c.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+l.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\")}function Qt(){return this.hours()%12||12}function Zt(){return this.hours()||24}function en(e,t){H(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function tn(e,t){return t._meridiemParse}function nn(e){return\"p\"===(e+\"\").toLowerCase().charAt(0)}H(\"H\",[\"HH\",2],0,\"hour\"),H(\"h\",[\"hh\",2],0,Qt),H(\"k\",[\"kk\",2],0,Zt),H(\"hmm\",0,0,(function(){return\"\"+Qt.apply(this)+$(this.minutes(),2)})),H(\"hmmss\",0,0,(function(){return\"\"+Qt.apply(this)+$(this.minutes(),2)+$(this.seconds(),2)})),H(\"Hmm\",0,0,(function(){return\"\"+this.hours()+$(this.minutes(),2)})),H(\"Hmmss\",0,0,(function(){return\"\"+this.hours()+$(this.minutes(),2)+$(this.seconds(),2)})),en(\"a\",!0),en(\"A\",!1),re(\"hour\",\"h\"),ae(\"hour\",13),Re(\"a\",tn),Re(\"A\",tn),Re(\"H\",Ce),Re(\"h\",Ce),Re(\"k\",Ce),Re(\"HH\",Ce,be),Re(\"hh\",Ce,be),Re(\"kk\",Ce,be),Re(\"hmm\",ke),Re(\"hmmss\",De),Re(\"Hmm\",ke),Re(\"Hmmss\",De),Ie([\"H\",\"HH\"],qe),Ie([\"k\",\"kk\"],(function(e,t,n){var r=de(e);t[qe]=24===r?0:r})),Ie([\"a\",\"A\"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),Ie([\"h\",\"hh\"],(function(e,t,n){t[qe]=de(e),v(n).bigHour=!0})),Ie(\"hmm\",(function(e,t,n){var r=e.length-2;t[qe]=de(e.substr(0,r)),t[Ge]=de(e.substr(r)),v(n).bigHour=!0})),Ie(\"hmmss\",(function(e,t,n){var r=e.length-4,o=e.length-2;t[qe]=de(e.substr(0,r)),t[Ge]=de(e.substr(r,2)),t[Ke]=de(e.substr(o)),v(n).bigHour=!0})),Ie(\"Hmm\",(function(e,t,n){var r=e.length-2;t[qe]=de(e.substr(0,r)),t[Ge]=de(e.substr(r))})),Ie(\"Hmmss\",(function(e,t,n){var r=e.length-4,o=e.length-2;t[qe]=de(e.substr(0,r)),t[Ge]=de(e.substr(r,2)),t[Ke]=de(e.substr(o))}));var rn=/[ap]\\.?m?\\.?/i,on=he(\"Hours\",!0);function sn(e,t,n){return e>11?n?\"pm\":\"PM\":n?\"am\":\"AM\"}var an,ln={calendar:B,longDateFormat:V,invalidDate:G,ordinal:X,dayOfMonthOrdinalParse:J,relativeTime:Z,months:tt,monthsShort:nt,week:St,weekdays:Bt,weekdaysMin:$t,weekdaysShort:Rt,meridiemParse:rn},cn={},un={};function dn(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n<r;n+=1)if(e[n]!==t[n])return n;return r}function hn(e){return e?e.toLowerCase().replace(\"_\",\"-\"):e}function mn(e){for(var t,n,r,o,i=0;i<e.length;){for(t=(o=hn(e[i]).split(\"-\")).length,n=(n=hn(e[i+1]))?n.split(\"-\"):null;t>0;){if(r=pn(o.slice(0,t).join(\"-\")))return r;if(n&&n.length>=t&&dn(o,n)>=t-1)break;t--}i++}return an}function fn(e){return null!=e.match(\"^[^/\\\\\\\\]*$\")}function pn(t){var r=null;if(void 0===cn[t]&&e&&e.exports&&fn(t))try{r=an._abbr,n(6700)(\"./\"+t),gn(r)}catch(e){cn[t]=null}return cn[t]}function gn(e,t){var n;return e&&((n=u(t)?bn(e):vn(e,t))?an=n:\"undefined\"!=typeof console&&console.warn&&console.warn(\"Locale \"+e+\" not found. Did you forget to load it?\")),an._abbr}function vn(e,t){if(null!==t){var n,r=ln;if(t.abbr=e,null!=cn[e])L(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),r=cn[e]._config;else if(null!=t.parentLocale)if(null!=cn[t.parentLocale])r=cn[t.parentLocale]._config;else{if(null==(n=pn(t.parentLocale)))return un[t.parentLocale]||(un[t.parentLocale]=[]),un[t.parentLocale].push({name:e,config:t}),null;r=n._config}return cn[e]=new O(F(r,t)),un[e]&&un[e].forEach((function(e){vn(e.name,e.config)})),gn(e),cn[e]}return delete cn[e],null}function yn(e,t){if(null!=t){var n,r,o=ln;null!=cn[e]&&null!=cn[e].parentLocale?cn[e].set(F(cn[e]._config,t)):(null!=(r=pn(e))&&(o=r._config),t=F(o,t),null==r&&(t.abbr=e),(n=new O(t)).parentLocale=cn[e],cn[e]=n),gn(e)}else null!=cn[e]&&(null!=cn[e].parentLocale?(cn[e]=cn[e].parentLocale,e===gn()&&gn(e)):null!=cn[e]&&delete cn[e]);return cn[e]}function bn(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return an;if(!s(e)){if(t=pn(e))return t;e=[e]}return mn(e)}function _n(){return A(cn)}function wn(e){var t,n=e._a;return n&&-2===v(e).overflow&&(t=n[Ue]<0||n[Ue]>11?Ue:n[Ve]<1||n[Ve]>et(n[ze],n[Ue])?Ve:n[qe]<0||n[qe]>24||24===n[qe]&&(0!==n[Ge]||0!==n[Ke]||0!==n[Xe])?qe:n[Ge]<0||n[Ge]>59?Ge:n[Ke]<0||n[Ke]>59?Ke:n[Xe]<0||n[Xe]>999?Xe:-1,v(e)._overflowDayOfYear&&(t<ze||t>Ve)&&(t=Ve),v(e)._overflowWeeks&&-1===t&&(t=Je),v(e)._overflowWeekday&&-1===t&&(t=Qe),v(e).overflow=t),e}var xn=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,Cn=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,kn=/Z|[+-]\\d\\d(?::?\\d\\d)?/,Dn=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/],[\"YYYYMM\",/\\d{6}/,!1],[\"YYYY\",/\\d{4}/,!1]],Sn=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],An=/^\\/?Date\\((-?\\d+)/i,Mn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,Ln={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function En(e){var t,n,r,o,i,s,a=e._i,l=xn.exec(a)||Cn.exec(a),c=Dn.length,u=Sn.length;if(l){for(v(e).iso=!0,t=0,n=c;t<n;t++)if(Dn[t][1].exec(l[1])){o=Dn[t][0],r=!1!==Dn[t][2];break}if(null==o)return void(e._isValid=!1);if(l[3]){for(t=0,n=u;t<n;t++)if(Sn[t][1].exec(l[3])){i=(l[2]||\" \")+Sn[t][0];break}if(null==i)return void(e._isValid=!1)}if(!r&&null!=i)return void(e._isValid=!1);if(l[4]){if(!kn.exec(l[4]))return void(e._isValid=!1);s=\"Z\"}e._f=o+(i||\"\")+(s||\"\"),jn(e)}else e._isValid=!1}function Tn(e,t,n,r,o,i){var s=[Fn(e),nt.indexOf(t),parseInt(n,10),parseInt(r,10),parseInt(o,10)];return i&&s.push(parseInt(i,10)),s}function Fn(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function On(e){return e.replace(/\\([^()]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\")}function Bn(e,t,n){return!e||Rt.indexOf(e)===new Date(t[0],t[1],t[2]).getDay()||(v(n).weekdayMismatch=!0,n._isValid=!1,!1)}function Rn(e,t,n){if(e)return Ln[e];if(t)return 0;var r=parseInt(n,10),o=r%100;return(r-o)/100*60+o}function $n(e){var t,n=Mn.exec(On(e._i));if(n){if(t=Tn(n[4],n[3],n[2],n[5],n[6],n[7]),!Bn(n[1],t,e))return;e._a=t,e._tzm=Rn(n[8],n[9],n[10]),e._d=_t.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),v(e).rfc2822=!0}else e._isValid=!1}function Nn(e){var t=An.exec(e._i);null===t?(En(e),!1===e._isValid&&(delete e._isValid,$n(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:o.createFromInputFallback(e)))):e._d=new Date(+t[1])}function Yn(e,t,n){return null!=e?e:null!=t?t:n}function Pn(e){var t=new Date(o.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function In(e){var t,n,r,o,i,s=[];if(!e._d){for(r=Pn(e),e._w&&null==e._a[Ve]&&null==e._a[Ue]&&Hn(e),null!=e._dayOfYear&&(i=Yn(e._a[ze],r[ze]),(e._dayOfYear>gt(i)||0===e._dayOfYear)&&(v(e)._overflowDayOfYear=!0),n=_t(i,0,e._dayOfYear),e._a[Ue]=n.getUTCMonth(),e._a[Ve]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=s[t]=r[t];for(;t<7;t++)e._a[t]=s[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[qe]&&0===e._a[Ge]&&0===e._a[Ke]&&0===e._a[Xe]&&(e._nextDay=!0,e._a[qe]=0),e._d=(e._useUTC?_t:bt).apply(null,s),o=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[qe]=24),e._w&&void 0!==e._w.d&&e._w.d!==o&&(v(e).weekdayMismatch=!0)}}function Hn(e){var t,n,r,o,i,s,a,l,c;null!=(t=e._w).GG||null!=t.W||null!=t.E?(i=1,s=4,n=Yn(t.GG,e._a[ze],Ct(Xn(),1,4).year),r=Yn(t.W,1),((o=Yn(t.E,1))<1||o>7)&&(l=!0)):(i=e._locale._week.dow,s=e._locale._week.doy,c=Ct(Xn(),i,s),n=Yn(t.gg,e._a[ze],c.year),r=Yn(t.w,c.week),null!=t.d?((o=t.d)<0||o>6)&&(l=!0):null!=t.e?(o=t.e+i,(t.e<0||t.e>6)&&(l=!0)):o=i),r<1||r>kt(n,i,s)?v(e)._overflowWeeks=!0:null!=l?v(e)._overflowWeekday=!0:(a=xt(n,r,o,i,s),e._a[ze]=a.year,e._dayOfYear=a.dayOfYear)}function jn(e){if(e._f!==o.ISO_8601)if(e._f!==o.RFC_2822){e._a=[],v(e).empty=!0;var t,n,r,i,s,a,l,c=\"\"+e._i,u=c.length,d=0;for(l=(r=U(e._f,e._locale).match(N)||[]).length,t=0;t<l;t++)i=r[t],(n=(c.match($e(i,e))||[])[0])&&((s=c.substr(0,c.indexOf(n))).length>0&&v(e).unusedInput.push(s),c=c.slice(c.indexOf(n)+n.length),d+=n.length),I[i]?(n?v(e).empty=!1:v(e).unusedTokens.push(i),je(i,n,e)):e._strict&&!n&&v(e).unusedTokens.push(i);v(e).charsLeftOver=u-d,c.length>0&&v(e).unusedInput.push(c),e._a[qe]<=12&&!0===v(e).bigHour&&e._a[qe]>0&&(v(e).bigHour=void 0),v(e).parsedDateParts=e._a.slice(0),v(e).meridiem=e._meridiem,e._a[qe]=Wn(e._locale,e._a[qe],e._meridiem),null!==(a=v(e).era)&&(e._a[ze]=e._locale.erasConvertYear(a,e._a[ze])),In(e),wn(e)}else $n(e);else En(e)}function Wn(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}function zn(e){var t,n,r,o,i,s,a=!1,l=e._f.length;if(0===l)return v(e).invalidFormat=!0,void(e._d=new Date(NaN));for(o=0;o<l;o++)i=0,s=!1,t=x({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[o],jn(t),y(t)&&(s=!0),i+=v(t).charsLeftOver,i+=10*v(t).unusedTokens.length,v(t).score=i,a?i<r&&(r=i,n=t):(null==r||i<r||s)&&(r=i,n=t,s&&(a=!0));f(e,n||t)}function Un(e){if(!e._d){var t=ie(e._i),n=void 0===t.day?t.date:t.day;e._a=m([t.year,t.month,n,t.hour,t.minute,t.second,t.millisecond],(function(e){return e&&parseInt(e,10)})),In(e)}}function Vn(e){var t=new C(wn(qn(e)));return t._nextDay&&(t.add(1,\"d\"),t._nextDay=void 0),t}function qn(e){var t=e._i,n=e._f;return e._locale=e._locale||bn(e._l),null===t||void 0===n&&\"\"===t?b({nullInput:!0}):(\"string\"==typeof t&&(e._i=t=e._locale.preparse(t)),k(t)?new C(wn(t)):(h(t)?e._d=t:s(n)?zn(e):n?jn(e):Gn(e),y(e)||(e._d=null),e))}function Gn(e){var t=e._i;u(t)?e._d=new Date(o.now()):h(t)?e._d=new Date(t.valueOf()):\"string\"==typeof t?Nn(e):s(t)?(e._a=m(t.slice(0),(function(e){return parseInt(e,10)})),In(e)):a(t)?Un(e):d(t)?e._d=new Date(t):o.createFromInputFallback(e)}function Kn(e,t,n,r,o){var i={};return!0!==t&&!1!==t||(r=t,t=void 0),!0!==n&&!1!==n||(r=n,n=void 0),(a(e)&&c(e)||s(e)&&0===e.length)&&(e=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=o,i._l=n,i._i=e,i._f=t,i._strict=r,Vn(i)}function Xn(e,t,n,r){return Kn(e,t,n,r,!1)}o.createFromInputFallback=S(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",(function(e){e._d=new Date(e._i+(e._useUTC?\" UTC\":\"\"))})),o.ISO_8601=function(){},o.RFC_2822=function(){};var Jn=S(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",(function(){var e=Xn.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:b()})),Qn=S(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",(function(){var e=Xn.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:b()}));function Zn(e,t){var n,r;if(1===t.length&&s(t[0])&&(t=t[0]),!t.length)return Xn();for(n=t[0],r=1;r<t.length;++r)t[r].isValid()&&!t[r][e](n)||(n=t[r]);return n}function er(){return Zn(\"isBefore\",[].slice.call(arguments,0))}function tr(){return Zn(\"isAfter\",[].slice.call(arguments,0))}var nr=function(){return Date.now?Date.now():+new Date},rr=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function or(e){var t,n,r=!1,o=rr.length;for(t in e)if(l(e,t)&&(-1===We.call(rr,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<o;++n)if(e[rr[n]]){if(r)return!1;parseFloat(e[rr[n]])!==de(e[rr[n]])&&(r=!0)}return!0}function ir(){return this._isValid}function sr(){return Lr(NaN)}function ar(e){var t=ie(e),n=t.year||0,r=t.quarter||0,o=t.month||0,i=t.week||t.isoWeek||0,s=t.day||0,a=t.hour||0,l=t.minute||0,c=t.second||0,u=t.millisecond||0;this._isValid=or(t),this._milliseconds=+u+1e3*c+6e4*l+1e3*a*60*60,this._days=+s+7*i,this._months=+o+3*r+12*n,this._data={},this._locale=bn(),this._bubble()}function lr(e){return e instanceof ar}function cr(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function ur(e,t,n){var r,o=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),s=0;for(r=0;r<o;r++)(n&&e[r]!==t[r]||!n&&de(e[r])!==de(t[r]))&&s++;return s+i}function dr(e,t){H(e,0,0,(function(){var e=this.utcOffset(),n=\"+\";return e<0&&(e=-e,n=\"-\"),n+$(~~(e/60),2)+t+$(~~e%60,2)}))}dr(\"Z\",\":\"),dr(\"ZZ\",\"\"),Re(\"Z\",Fe),Re(\"ZZ\",Fe),Ie([\"Z\",\"ZZ\"],(function(e,t,n){n._useUTC=!0,n._tzm=mr(Fe,e)}));var hr=/([\\+\\-]|\\d\\d)/gi;function mr(e,t){var n,r,o=(t||\"\").match(e);return null===o?null:0===(r=60*(n=((o[o.length-1]||[])+\"\").match(hr)||[\"-\",0,0])[1]+de(n[2]))?0:\"+\"===n[0]?r:-r}function fr(e,t){var n,r;return t._isUTC?(n=t.clone(),r=(k(e)||h(e)?e.valueOf():Xn(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+r),o.updateOffset(n,!1),n):Xn(e).local()}function pr(e){return-Math.round(e._d.getTimezoneOffset())}function gr(e,t,n){var r,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if(\"string\"==typeof e){if(null===(e=mr(Fe,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(r=pr(this)),this._offset=e,this._isUTC=!0,null!=r&&this.add(r,\"m\"),i!==e&&(!t||this._changeInProgress?Br(this,Lr(e-i,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,o.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:pr(this)}function vr(e,t){return null!=e?(\"string\"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function yr(e){return this.utcOffset(0,e)}function br(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(pr(this),\"m\")),this}function _r(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if(\"string\"==typeof this._i){var e=mr(Te,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function wr(e){return!!this.isValid()&&(e=e?Xn(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function xr(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Cr(){if(!u(this._isDSTShifted))return this._isDSTShifted;var e,t={};return x(t,this),(t=qn(t))._a?(e=t._isUTC?p(t._a):Xn(t._a),this._isDSTShifted=this.isValid()&&ur(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function kr(){return!!this.isValid()&&!this._isUTC}function Dr(){return!!this.isValid()&&this._isUTC}function Sr(){return!!this.isValid()&&this._isUTC&&0===this._offset}o.updateOffset=function(){};var Ar=/^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,Mr=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Lr(e,t){var n,r,o,i=e,s=null;return lr(e)?i={ms:e._milliseconds,d:e._days,M:e._months}:d(e)||!isNaN(+e)?(i={},t?i[t]=+e:i.milliseconds=+e):(s=Ar.exec(e))?(n=\"-\"===s[1]?-1:1,i={y:0,d:de(s[Ve])*n,h:de(s[qe])*n,m:de(s[Ge])*n,s:de(s[Ke])*n,ms:de(cr(1e3*s[Xe]))*n}):(s=Mr.exec(e))?(n=\"-\"===s[1]?-1:1,i={y:Er(s[2],n),M:Er(s[3],n),w:Er(s[4],n),d:Er(s[5],n),h:Er(s[6],n),m:Er(s[7],n),s:Er(s[8],n)}):null==i?i={}:\"object\"==typeof i&&(\"from\"in i||\"to\"in i)&&(o=Fr(Xn(i.from),Xn(i.to)),(i={}).ms=o.milliseconds,i.M=o.months),r=new ar(i),lr(e)&&l(e,\"_locale\")&&(r._locale=e._locale),lr(e)&&l(e,\"_isValid\")&&(r._isValid=e._isValid),r}function Er(e,t){var n=e&&parseFloat(e.replace(\",\",\".\"));return(isNaN(n)?0:n)*t}function Tr(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,\"M\").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,\"M\"),n}function Fr(e,t){var n;return e.isValid()&&t.isValid()?(t=fr(t,e),e.isBefore(t)?n=Tr(e,t):((n=Tr(t,e)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Or(e,t){return function(n,r){var o;return null===r||isNaN(+r)||(L(t,\"moment().\"+t+\"(period, number) is deprecated. Please use moment().\"+t+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),o=n,n=r,r=o),Br(this,Lr(n,r),e),this}}function Br(e,t,n,r){var i=t._milliseconds,s=cr(t._days),a=cr(t._months);e.isValid()&&(r=null==r||r,a&&ut(e,me(e,\"Month\")+a*n),s&&fe(e,\"Date\",me(e,\"Date\")+s*n),i&&e._d.setTime(e._d.valueOf()+i*n),r&&o.updateOffset(e,s||a))}Lr.fn=ar.prototype,Lr.invalid=sr;var Rr=Or(1,\"add\"),$r=Or(-1,\"subtract\");function Nr(e){return\"string\"==typeof e||e instanceof String}function Yr(e){return k(e)||h(e)||Nr(e)||d(e)||Ir(e)||Pr(e)||null==e}function Pr(e){var t,n,r=a(e)&&!c(e),o=!1,i=[\"years\",\"year\",\"y\",\"months\",\"month\",\"M\",\"days\",\"day\",\"d\",\"dates\",\"date\",\"D\",\"hours\",\"hour\",\"h\",\"minutes\",\"minute\",\"m\",\"seconds\",\"second\",\"s\",\"milliseconds\",\"millisecond\",\"ms\"],s=i.length;for(t=0;t<s;t+=1)n=i[t],o=o||l(e,n);return r&&o}function Ir(e){var t=s(e),n=!1;return t&&(n=0===e.filter((function(t){return!d(t)&&Nr(e)})).length),t&&n}function Hr(e){var t,n,r=a(e)&&!c(e),o=!1,i=[\"sameDay\",\"nextDay\",\"lastDay\",\"nextWeek\",\"lastWeek\",\"sameElse\"];for(t=0;t<i.length;t+=1)n=i[t],o=o||l(e,n);return r&&o}function jr(e,t){var n=e.diff(t,\"days\",!0);return n<-6?\"sameElse\":n<-1?\"lastWeek\":n<0?\"lastDay\":n<1?\"sameDay\":n<2?\"nextDay\":n<7?\"nextWeek\":\"sameElse\"}function Wr(e,t){1===arguments.length&&(arguments[0]?Yr(arguments[0])?(e=arguments[0],t=void 0):Hr(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var n=e||Xn(),r=fr(n,this).startOf(\"day\"),i=o.calendarFormat(this,r)||\"sameElse\",s=t&&(E(t[i])?t[i].call(this,n):t[i]);return this.format(s||this.localeData().calendar(i,this,Xn(n)))}function zr(){return new C(this)}function Ur(e,t){var n=k(e)?e:Xn(e);return!(!this.isValid()||!n.isValid())&&(\"millisecond\"===(t=oe(t)||\"millisecond\")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())}function Vr(e,t){var n=k(e)?e:Xn(e);return!(!this.isValid()||!n.isValid())&&(\"millisecond\"===(t=oe(t)||\"millisecond\")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())}function qr(e,t,n,r){var o=k(e)?e:Xn(e),i=k(t)?t:Xn(t);return!!(this.isValid()&&o.isValid()&&i.isValid())&&(\"(\"===(r=r||\"()\")[0]?this.isAfter(o,n):!this.isBefore(o,n))&&(\")\"===r[1]?this.isBefore(i,n):!this.isAfter(i,n))}function Gr(e,t){var n,r=k(e)?e:Xn(e);return!(!this.isValid()||!r.isValid())&&(\"millisecond\"===(t=oe(t)||\"millisecond\")?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))}function Kr(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function Xr(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function Jr(e,t,n){var r,o,i;if(!this.isValid())return NaN;if(!(r=fr(e,this)).isValid())return NaN;switch(o=6e4*(r.utcOffset()-this.utcOffset()),t=oe(t)){case\"year\":i=Qr(this,r)/12;break;case\"month\":i=Qr(this,r);break;case\"quarter\":i=Qr(this,r)/3;break;case\"second\":i=(this-r)/1e3;break;case\"minute\":i=(this-r)/6e4;break;case\"hour\":i=(this-r)/36e5;break;case\"day\":i=(this-r-o)/864e5;break;case\"week\":i=(this-r-o)/6048e5;break;default:i=this-r}return n?i:ue(i)}function Qr(e,t){if(e.date()<t.date())return-Qr(t,e);var n=12*(t.year()-e.year())+(t.month()-e.month()),r=e.clone().add(n,\"months\");return-(n+(t-r<0?(t-r)/(r-e.clone().add(n-1,\"months\")):(t-r)/(e.clone().add(n+1,\"months\")-r)))||0}function Zr(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")}function eo(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||n.year()>9999?z(n,t?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):E(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace(\"Z\",z(n,\"Z\")):z(n,t?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")}function to(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var e,t,n,r,o=\"moment\",i=\"\";return this.isLocal()||(o=0===this.utcOffset()?\"moment.utc\":\"moment.parseZone\",i=\"Z\"),e=\"[\"+o+'(\"]',t=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",n=\"-MM-DD[T]HH:mm:ss.SSS\",r=i+'[\")]',this.format(e+t+n+r)}function no(e){e||(e=this.isUtc()?o.defaultFormatUtc:o.defaultFormat);var t=z(this,e);return this.localeData().postformat(t)}function ro(e,t){return this.isValid()&&(k(e)&&e.isValid()||Xn(e).isValid())?Lr({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function oo(e){return this.from(Xn(),e)}function io(e,t){return this.isValid()&&(k(e)&&e.isValid()||Xn(e).isValid())?Lr({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function so(e){return this.to(Xn(),e)}function ao(e){var t;return void 0===e?this._locale._abbr:(null!=(t=bn(e))&&(this._locale=t),this)}o.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",o.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";var lo=S(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",(function(e){return void 0===e?this.localeData():this.locale(e)}));function co(){return this._locale}var uo=1e3,ho=60*uo,mo=60*ho,fo=3506328*mo;function po(e,t){return(e%t+t)%t}function go(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-fo:new Date(e,t,n).valueOf()}function vo(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-fo:Date.UTC(e,t,n)}function yo(e){var t,n;if(void 0===(e=oe(e))||\"millisecond\"===e||!this.isValid())return this;switch(n=this._isUTC?vo:go,e){case\"year\":t=n(this.year(),0,1);break;case\"quarter\":t=n(this.year(),this.month()-this.month()%3,1);break;case\"month\":t=n(this.year(),this.month(),1);break;case\"week\":t=n(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":t=n(this.year(),this.month(),this.date());break;case\"hour\":t=this._d.valueOf(),t-=po(t+(this._isUTC?0:this.utcOffset()*ho),mo);break;case\"minute\":t=this._d.valueOf(),t-=po(t,ho);break;case\"second\":t=this._d.valueOf(),t-=po(t,uo)}return this._d.setTime(t),o.updateOffset(this,!0),this}function bo(e){var t,n;if(void 0===(e=oe(e))||\"millisecond\"===e||!this.isValid())return this;switch(n=this._isUTC?vo:go,e){case\"year\":t=n(this.year()+1,0,1)-1;break;case\"quarter\":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":t=n(this.year(),this.month()+1,1)-1;break;case\"week\":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":t=n(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":t=this._d.valueOf(),t+=mo-po(t+(this._isUTC?0:this.utcOffset()*ho),mo)-1;break;case\"minute\":t=this._d.valueOf(),t+=ho-po(t,ho)-1;break;case\"second\":t=this._d.valueOf(),t+=uo-po(t,uo)-1}return this._d.setTime(t),o.updateOffset(this,!0),this}function _o(){return this._d.valueOf()-6e4*(this._offset||0)}function wo(){return Math.floor(this.valueOf()/1e3)}function xo(){return new Date(this.valueOf())}function Co(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function ko(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function Do(){return this.isValid()?this.toISOString():null}function So(){return y(this)}function Ao(){return f({},v(this))}function Mo(){return v(this).overflow}function Lo(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Eo(e,t){var n,r,i,s=this._eras||bn(\"en\")._eras;for(n=0,r=s.length;n<r;++n)switch(\"string\"==typeof s[n].since&&(i=o(s[n].since).startOf(\"day\"),s[n].since=i.valueOf()),typeof s[n].until){case\"undefined\":s[n].until=1/0;break;case\"string\":i=o(s[n].until).startOf(\"day\").valueOf(),s[n].until=i.valueOf()}return s}function To(e,t,n){var r,o,i,s,a,l=this.eras();for(e=e.toUpperCase(),r=0,o=l.length;r<o;++r)if(i=l[r].name.toUpperCase(),s=l[r].abbr.toUpperCase(),a=l[r].narrow.toUpperCase(),n)switch(t){case\"N\":case\"NN\":case\"NNN\":if(s===e)return l[r];break;case\"NNNN\":if(i===e)return l[r];break;case\"NNNNN\":if(a===e)return l[r]}else if([i,s,a].indexOf(e)>=0)return l[r]}function Fo(e,t){var n=e.since<=e.until?1:-1;return void 0===t?o(e.since).year():o(e.since).year()+(t-e.offset)*n}function Oo(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf(\"day\").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].name;if(r[e].until<=n&&n<=r[e].since)return r[e].name}return\"\"}function Bo(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf(\"day\").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].narrow;if(r[e].until<=n&&n<=r[e].since)return r[e].narrow}return\"\"}function Ro(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf(\"day\").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].abbr;if(r[e].until<=n&&n<=r[e].since)return r[e].abbr}return\"\"}function $o(){var e,t,n,r,i=this.localeData().eras();for(e=0,t=i.length;e<t;++e)if(n=i[e].since<=i[e].until?1:-1,r=this.clone().startOf(\"day\").valueOf(),i[e].since<=r&&r<=i[e].until||i[e].until<=r&&r<=i[e].since)return(this.year()-o(i[e].since).year())*n+i[e].offset;return this.year()}function No(e){return l(this,\"_erasNameRegex\")||zo.call(this),e?this._erasNameRegex:this._erasRegex}function Yo(e){return l(this,\"_erasAbbrRegex\")||zo.call(this),e?this._erasAbbrRegex:this._erasRegex}function Po(e){return l(this,\"_erasNarrowRegex\")||zo.call(this),e?this._erasNarrowRegex:this._erasRegex}function Io(e,t){return t.erasAbbrRegex(e)}function Ho(e,t){return t.erasNameRegex(e)}function jo(e,t){return t.erasNarrowRegex(e)}function Wo(e,t){return t._eraYearOrdinalRegex||Le}function zo(){var e,t,n=[],r=[],o=[],i=[],s=this.eras();for(e=0,t=s.length;e<t;++e)r.push(Ye(s[e].name)),n.push(Ye(s[e].abbr)),o.push(Ye(s[e].narrow)),i.push(Ye(s[e].name)),i.push(Ye(s[e].abbr)),i.push(Ye(s[e].narrow));this._erasRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\"),this._erasNameRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._erasAbbrRegex=new RegExp(\"^(\"+n.join(\"|\")+\")\",\"i\"),this._erasNarrowRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\")}function Uo(e,t){H(0,[e,e.length],0,t)}function Vo(e){return Qo.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function qo(e){return Qo.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function Go(){return kt(this.year(),1,4)}function Ko(){return kt(this.isoWeekYear(),1,4)}function Xo(){var e=this.localeData()._week;return kt(this.year(),e.dow,e.doy)}function Jo(){var e=this.localeData()._week;return kt(this.weekYear(),e.dow,e.doy)}function Qo(e,t,n,r,o){var i;return null==e?Ct(this,r,o).year:(t>(i=kt(e,r,o))&&(t=i),Zo.call(this,e,t,n,r,o))}function Zo(e,t,n,r,o){var i=xt(e,t,n,r,o),s=_t(i.year,0,i.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}function ei(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}H(\"N\",0,0,\"eraAbbr\"),H(\"NN\",0,0,\"eraAbbr\"),H(\"NNN\",0,0,\"eraAbbr\"),H(\"NNNN\",0,0,\"eraName\"),H(\"NNNNN\",0,0,\"eraNarrow\"),H(\"y\",[\"y\",1],\"yo\",\"eraYear\"),H(\"y\",[\"yy\",2],0,\"eraYear\"),H(\"y\",[\"yyy\",3],0,\"eraYear\"),H(\"y\",[\"yyyy\",4],0,\"eraYear\"),Re(\"N\",Io),Re(\"NN\",Io),Re(\"NNN\",Io),Re(\"NNNN\",Ho),Re(\"NNNNN\",jo),Ie([\"N\",\"NN\",\"NNN\",\"NNNN\",\"NNNNN\"],(function(e,t,n,r){var o=n._locale.erasParse(e,r,n._strict);o?v(n).era=o:v(n).invalidEra=e})),Re(\"y\",Le),Re(\"yy\",Le),Re(\"yyy\",Le),Re(\"yyyy\",Le),Re(\"yo\",Wo),Ie([\"y\",\"yy\",\"yyy\",\"yyyy\"],ze),Ie([\"yo\"],(function(e,t,n,r){var o;n._locale._eraYearOrdinalRegex&&(o=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[ze]=n._locale.eraYearOrdinalParse(e,o):t[ze]=parseInt(e,10)})),H(0,[\"gg\",2],0,(function(){return this.weekYear()%100})),H(0,[\"GG\",2],0,(function(){return this.isoWeekYear()%100})),Uo(\"gggg\",\"weekYear\"),Uo(\"ggggg\",\"weekYear\"),Uo(\"GGGG\",\"isoWeekYear\"),Uo(\"GGGGG\",\"isoWeekYear\"),re(\"weekYear\",\"gg\"),re(\"isoWeekYear\",\"GG\"),ae(\"weekYear\",1),ae(\"isoWeekYear\",1),Re(\"G\",Ee),Re(\"g\",Ee),Re(\"GG\",Ce,be),Re(\"gg\",Ce,be),Re(\"GGGG\",Ae,we),Re(\"gggg\",Ae,we),Re(\"GGGGG\",Me,xe),Re(\"ggggg\",Me,xe),He([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],(function(e,t,n,r){t[r.substr(0,2)]=de(e)})),He([\"gg\",\"GG\"],(function(e,t,n,r){t[r]=o.parseTwoDigitYear(e)})),H(\"Q\",0,\"Qo\",\"quarter\"),re(\"quarter\",\"Q\"),ae(\"quarter\",7),Re(\"Q\",ye),Ie(\"Q\",(function(e,t){t[Ue]=3*(de(e)-1)})),H(\"D\",[\"DD\",2],\"Do\",\"date\"),re(\"date\",\"D\"),ae(\"date\",9),Re(\"D\",Ce),Re(\"DD\",Ce,be),Re(\"Do\",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),Ie([\"D\",\"DD\"],Ve),Ie(\"Do\",(function(e,t){t[Ve]=de(e.match(Ce)[0])}));var ti=he(\"Date\",!0);function ni(e){var t=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return null==e?t:this.add(e-t,\"d\")}H(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),re(\"dayOfYear\",\"DDD\"),ae(\"dayOfYear\",4),Re(\"DDD\",Se),Re(\"DDDD\",_e),Ie([\"DDD\",\"DDDD\"],(function(e,t,n){n._dayOfYear=de(e)})),H(\"m\",[\"mm\",2],0,\"minute\"),re(\"minute\",\"m\"),ae(\"minute\",14),Re(\"m\",Ce),Re(\"mm\",Ce,be),Ie([\"m\",\"mm\"],Ge);var ri=he(\"Minutes\",!1);H(\"s\",[\"ss\",2],0,\"second\"),re(\"second\",\"s\"),ae(\"second\",15),Re(\"s\",Ce),Re(\"ss\",Ce,be),Ie([\"s\",\"ss\"],Ke);var oi,ii,si=he(\"Seconds\",!1);for(H(\"S\",0,0,(function(){return~~(this.millisecond()/100)})),H(0,[\"SS\",2],0,(function(){return~~(this.millisecond()/10)})),H(0,[\"SSS\",3],0,\"millisecond\"),H(0,[\"SSSS\",4],0,(function(){return 10*this.millisecond()})),H(0,[\"SSSSS\",5],0,(function(){return 100*this.millisecond()})),H(0,[\"SSSSSS\",6],0,(function(){return 1e3*this.millisecond()})),H(0,[\"SSSSSSS\",7],0,(function(){return 1e4*this.millisecond()})),H(0,[\"SSSSSSSS\",8],0,(function(){return 1e5*this.millisecond()})),H(0,[\"SSSSSSSSS\",9],0,(function(){return 1e6*this.millisecond()})),re(\"millisecond\",\"ms\"),ae(\"millisecond\",16),Re(\"S\",Se,ye),Re(\"SS\",Se,be),Re(\"SSS\",Se,_e),oi=\"SSSS\";oi.length<=9;oi+=\"S\")Re(oi,Le);function ai(e,t){t[Xe]=de(1e3*(\"0.\"+e))}for(oi=\"S\";oi.length<=9;oi+=\"S\")Ie(oi,ai);function li(){return this._isUTC?\"UTC\":\"\"}function ci(){return this._isUTC?\"Coordinated Universal Time\":\"\"}ii=he(\"Milliseconds\",!1),H(\"z\",0,0,\"zoneAbbr\"),H(\"zz\",0,0,\"zoneName\");var ui=C.prototype;function di(e){return Xn(1e3*e)}function hi(){return Xn.apply(null,arguments).parseZone()}function mi(e){return e}ui.add=Rr,ui.calendar=Wr,ui.clone=zr,ui.diff=Jr,ui.endOf=bo,ui.format=no,ui.from=ro,ui.fromNow=oo,ui.to=io,ui.toNow=so,ui.get=pe,ui.invalidAt=Mo,ui.isAfter=Ur,ui.isBefore=Vr,ui.isBetween=qr,ui.isSame=Gr,ui.isSameOrAfter=Kr,ui.isSameOrBefore=Xr,ui.isValid=So,ui.lang=lo,ui.locale=ao,ui.localeData=co,ui.max=Qn,ui.min=Jn,ui.parsingFlags=Ao,ui.set=ge,ui.startOf=yo,ui.subtract=$r,ui.toArray=Co,ui.toObject=ko,ui.toDate=xo,ui.toISOString=eo,ui.inspect=to,\"undefined\"!=typeof Symbol&&null!=Symbol.for&&(ui[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){return\"Moment<\"+this.format()+\">\"}),ui.toJSON=Do,ui.toString=Zr,ui.unix=wo,ui.valueOf=_o,ui.creationData=Lo,ui.eraName=Oo,ui.eraNarrow=Bo,ui.eraAbbr=Ro,ui.eraYear=$o,ui.year=vt,ui.isLeapYear=yt,ui.weekYear=Vo,ui.isoWeekYear=qo,ui.quarter=ui.quarters=ei,ui.month=dt,ui.daysInMonth=ht,ui.week=ui.weeks=Lt,ui.isoWeek=ui.isoWeeks=Et,ui.weeksInYear=Xo,ui.weeksInWeekYear=Jo,ui.isoWeeksInYear=Go,ui.isoWeeksInISOWeekYear=Ko,ui.date=ti,ui.day=ui.days=Ut,ui.weekday=Vt,ui.isoWeekday=qt,ui.dayOfYear=ni,ui.hour=ui.hours=on,ui.minute=ui.minutes=ri,ui.second=ui.seconds=si,ui.millisecond=ui.milliseconds=ii,ui.utcOffset=gr,ui.utc=yr,ui.local=br,ui.parseZone=_r,ui.hasAlignedHourOffset=wr,ui.isDST=xr,ui.isLocal=kr,ui.isUtcOffset=Dr,ui.isUtc=Sr,ui.isUTC=Sr,ui.zoneAbbr=li,ui.zoneName=ci,ui.dates=S(\"dates accessor is deprecated. Use date instead.\",ti),ui.months=S(\"months accessor is deprecated. Use month instead\",dt),ui.years=S(\"years accessor is deprecated. Use year instead\",vt),ui.zone=S(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",vr),ui.isDSTShifted=S(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",Cr);var fi=O.prototype;function pi(e,t,n,r){var o=bn(),i=p().set(r,t);return o[n](i,e)}function gi(e,t,n){if(d(e)&&(t=e,e=void 0),e=e||\"\",null!=t)return pi(e,t,n,\"month\");var r,o=[];for(r=0;r<12;r++)o[r]=pi(e,r,n,\"month\");return o}function vi(e,t,n,r){\"boolean\"==typeof e?(d(t)&&(n=t,t=void 0),t=t||\"\"):(n=t=e,e=!1,d(t)&&(n=t,t=void 0),t=t||\"\");var o,i=bn(),s=e?i._week.dow:0,a=[];if(null!=n)return pi(t,(n+s)%7,r,\"day\");for(o=0;o<7;o++)a[o]=pi(t,(o+s)%7,r,\"day\");return a}function yi(e,t){return gi(e,t,\"months\")}function bi(e,t){return gi(e,t,\"monthsShort\")}function _i(e,t,n){return vi(e,t,n,\"weekdays\")}function wi(e,t,n){return vi(e,t,n,\"weekdaysShort\")}function xi(e,t,n){return vi(e,t,n,\"weekdaysMin\")}fi.calendar=R,fi.longDateFormat=q,fi.invalidDate=K,fi.ordinal=Q,fi.preparse=mi,fi.postformat=mi,fi.relativeTime=ee,fi.pastFuture=te,fi.set=T,fi.eras=Eo,fi.erasParse=To,fi.erasConvertYear=Fo,fi.erasAbbrRegex=Yo,fi.erasNameRegex=No,fi.erasNarrowRegex=Po,fi.months=st,fi.monthsShort=at,fi.monthsParse=ct,fi.monthsRegex=ft,fi.monthsShortRegex=mt,fi.week=Dt,fi.firstDayOfYear=Mt,fi.firstDayOfWeek=At,fi.weekdays=It,fi.weekdaysMin=jt,fi.weekdaysShort=Ht,fi.weekdaysParse=zt,fi.weekdaysRegex=Gt,fi.weekdaysShortRegex=Kt,fi.weekdaysMinRegex=Xt,fi.isPM=nn,fi.meridiem=sn,gn(\"en\",{eras:[{since:\"0001-01-01\",until:1/0,offset:1,name:\"Anno Domini\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"Before Christ\",narrow:\"BC\",abbr:\"BC\"}],dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===de(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")}}),o.lang=S(\"moment.lang is deprecated. Use moment.locale instead.\",gn),o.langData=S(\"moment.langData is deprecated. Use moment.localeData instead.\",bn);var Ci=Math.abs;function ki(){var e=this._data;return this._milliseconds=Ci(this._milliseconds),this._days=Ci(this._days),this._months=Ci(this._months),e.milliseconds=Ci(e.milliseconds),e.seconds=Ci(e.seconds),e.minutes=Ci(e.minutes),e.hours=Ci(e.hours),e.months=Ci(e.months),e.years=Ci(e.years),this}function Di(e,t,n,r){var o=Lr(t,n);return e._milliseconds+=r*o._milliseconds,e._days+=r*o._days,e._months+=r*o._months,e._bubble()}function Si(e,t){return Di(this,e,t,1)}function Ai(e,t){return Di(this,e,t,-1)}function Mi(e){return e<0?Math.floor(e):Math.ceil(e)}function Li(){var e,t,n,r,o,i=this._milliseconds,s=this._days,a=this._months,l=this._data;return i>=0&&s>=0&&a>=0||i<=0&&s<=0&&a<=0||(i+=864e5*Mi(Ti(a)+s),s=0,a=0),l.milliseconds=i%1e3,e=ue(i/1e3),l.seconds=e%60,t=ue(e/60),l.minutes=t%60,n=ue(t/60),l.hours=n%24,s+=ue(n/24),a+=o=ue(Ei(s)),s-=Mi(Ti(o)),r=ue(a/12),a%=12,l.days=s,l.months=a,l.years=r,this}function Ei(e){return 4800*e/146097}function Ti(e){return 146097*e/4800}function Fi(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if(\"month\"===(e=oe(e))||\"quarter\"===e||\"year\"===e)switch(t=this._days+r/864e5,n=this._months+Ei(t),e){case\"month\":return n;case\"quarter\":return n/3;case\"year\":return n/12}else switch(t=this._days+Math.round(Ti(this._months)),e){case\"week\":return t/7+r/6048e5;case\"day\":return t+r/864e5;case\"hour\":return 24*t+r/36e5;case\"minute\":return 1440*t+r/6e4;case\"second\":return 86400*t+r/1e3;case\"millisecond\":return Math.floor(864e5*t)+r;default:throw new Error(\"Unknown unit \"+e)}}function Oi(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*de(this._months/12):NaN}function Bi(e){return function(){return this.as(e)}}var Ri=Bi(\"ms\"),$i=Bi(\"s\"),Ni=Bi(\"m\"),Yi=Bi(\"h\"),Pi=Bi(\"d\"),Ii=Bi(\"w\"),Hi=Bi(\"M\"),ji=Bi(\"Q\"),Wi=Bi(\"y\");function zi(){return Lr(this)}function Ui(e){return e=oe(e),this.isValid()?this[e+\"s\"]():NaN}function Vi(e){return function(){return this.isValid()?this._data[e]:NaN}}var qi=Vi(\"milliseconds\"),Gi=Vi(\"seconds\"),Ki=Vi(\"minutes\"),Xi=Vi(\"hours\"),Ji=Vi(\"days\"),Qi=Vi(\"months\"),Zi=Vi(\"years\");function es(){return ue(this.days()/7)}var ts=Math.round,ns={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function rs(e,t,n,r,o){return o.relativeTime(t||1,!!n,e,r)}function os(e,t,n,r){var o=Lr(e).abs(),i=ts(o.as(\"s\")),s=ts(o.as(\"m\")),a=ts(o.as(\"h\")),l=ts(o.as(\"d\")),c=ts(o.as(\"M\")),u=ts(o.as(\"w\")),d=ts(o.as(\"y\")),h=i<=n.ss&&[\"s\",i]||i<n.s&&[\"ss\",i]||s<=1&&[\"m\"]||s<n.m&&[\"mm\",s]||a<=1&&[\"h\"]||a<n.h&&[\"hh\",a]||l<=1&&[\"d\"]||l<n.d&&[\"dd\",l];return null!=n.w&&(h=h||u<=1&&[\"w\"]||u<n.w&&[\"ww\",u]),(h=h||c<=1&&[\"M\"]||c<n.M&&[\"MM\",c]||d<=1&&[\"y\"]||[\"yy\",d])[2]=t,h[3]=+e>0,h[4]=r,rs.apply(null,h)}function is(e){return void 0===e?ts:\"function\"==typeof e&&(ts=e,!0)}function ss(e,t){return void 0!==ns[e]&&(void 0===t?ns[e]:(ns[e]=t,\"s\"===e&&(ns.ss=t-1),!0))}function as(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,r,o=!1,i=ns;return\"object\"==typeof e&&(t=e,e=!1),\"boolean\"==typeof e&&(o=e),\"object\"==typeof t&&(i=Object.assign({},ns,t),null!=t.s&&null==t.ss&&(i.ss=t.s-1)),r=os(this,!o,i,n=this.localeData()),o&&(r=n.pastFuture(+this,r)),n.postformat(r)}var ls=Math.abs;function cs(e){return(e>0)-(e<0)||+e}function us(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,r,o,i,s,a,l=ls(this._milliseconds)/1e3,c=ls(this._days),u=ls(this._months),d=this.asSeconds();return d?(e=ue(l/60),t=ue(e/60),l%=60,e%=60,n=ue(u/12),u%=12,r=l?l.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",o=d<0?\"-\":\"\",i=cs(this._months)!==cs(d)?\"-\":\"\",s=cs(this._days)!==cs(d)?\"-\":\"\",a=cs(this._milliseconds)!==cs(d)?\"-\":\"\",o+\"P\"+(n?i+n+\"Y\":\"\")+(u?i+u+\"M\":\"\")+(c?s+c+\"D\":\"\")+(t||e||l?\"T\":\"\")+(t?a+t+\"H\":\"\")+(e?a+e+\"M\":\"\")+(l?a+r+\"S\":\"\")):\"P0D\"}var ds=ar.prototype;return ds.isValid=ir,ds.abs=ki,ds.add=Si,ds.subtract=Ai,ds.as=Fi,ds.asMilliseconds=Ri,ds.asSeconds=$i,ds.asMinutes=Ni,ds.asHours=Yi,ds.asDays=Pi,ds.asWeeks=Ii,ds.asMonths=Hi,ds.asQuarters=ji,ds.asYears=Wi,ds.valueOf=Oi,ds._bubble=Li,ds.clone=zi,ds.get=Ui,ds.milliseconds=qi,ds.seconds=Gi,ds.minutes=Ki,ds.hours=Xi,ds.days=Ji,ds.weeks=es,ds.months=Qi,ds.years=Zi,ds.humanize=as,ds.toISOString=us,ds.toString=us,ds.toJSON=us,ds.locale=ao,ds.localeData=co,ds.toIsoString=S(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",us),ds.lang=lo,H(\"X\",0,0,\"unix\"),H(\"x\",0,0,\"valueOf\"),Re(\"x\",Ee),Re(\"X\",Oe),Ie(\"X\",(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),Ie(\"x\",(function(e,t,n){n._d=new Date(de(e))})),o.version=\"2.29.4\",i(Xn),o.fn=ui,o.min=er,o.max=tr,o.now=nr,o.utc=p,o.unix=di,o.months=yi,o.isDate=h,o.locale=gn,o.invalid=b,o.duration=Lr,o.isMoment=k,o.weekdays=_i,o.parseZone=hi,o.localeData=bn,o.isDuration=lr,o.monthsShort=bi,o.weekdaysMin=xi,o.defineLocale=vn,o.updateLocale=yn,o.locales=_n,o.weekdaysShort=wi,o.normalizeUnits=oe,o.relativeTimeRounding=is,o.relativeTimeThreshold=ss,o.calendarFormat=jr,o.prototype=ui,o.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"},o}()},6675:()=>{!function(e,t,n,r){var o=\"ontouchstart\"in n,i=function(){var e=n.createElement(\"div\"),r=n.documentElement;if(!(\"pointerEvents\"in e.style))return!1;e.style.pointerEvents=\"auto\",e.style.pointerEvents=\"x\",r.appendChild(e);var o=t.getComputedStyle&&\"auto\"===t.getComputedStyle(e,\"\").pointerEvents;return r.removeChild(e),!!o}(),s={contentCallback:function(e){return e.content?e.content:e.id},listNodeName:\"ol\",itemNodeName:\"li\",handleNodeName:\"div\",contentNodeName:\"span\",rootClass:\"dd\",listClass:\"dd-list\",itemClass:\"dd-item\",dragClass:\"dd-dragel\",handleClass:\"dd-handle\",contentClass:\"dd-content\",collapsedClass:\"dd-collapsed\",placeClass:\"dd-placeholder\",noDragClass:\"dd-nodrag\",noChildrenClass:\"dd-nochildren\",emptyClass:\"dd-empty\",expandBtnHTML:'<button class=\"dd-expand\" data-action=\"expand\" type=\"button\">Expand</button>',collapseBtnHTML:'<button class=\"dd-collapse\" data-action=\"collapse\" type=\"button\">Collapse</button>',group:0,maxDepth:5,threshold:20,fixedDepth:!1,fixed:!1,includeContent:!1,scroll:!1,scrollSensitivity:1,scrollSpeed:5,scrollTriggers:{top:40,left:40,right:-40,bottom:-40},effect:{animation:\"none\",time:\"slow\"},callback:function(e,t,n){},onDragStart:function(e,t,n){},beforeDragStop:function(e,t,n){},listRenderer:function(e,t){var n=\"<\"+t.listNodeName+' class=\"'+t.listClass+'\">';return n+=e,n+=\"</\"+t.listNodeName+\">\"},itemRenderer:function(t,n,r,o,i){var s=e.map(t,(function(e,t){return\" \"+t+'=\"'+e+'\"'})).join(\" \"),a=\"<\"+o.itemNodeName+s+\">\";return a+=\"<\"+o.handleNodeName+' class=\"'+o.handleClass+'\">',a+=\"<\"+o.contentNodeName+' class=\"'+o.contentClass+'\">',a+=n,a+=\"</\"+o.contentNodeName+\">\",a+=\"</\"+o.handleNodeName+\">\",a+=r,a+=\"</\"+o.itemNodeName+\">\"}};function a(t,o){this.w=e(n),this.el=e(t),(o=o||s).rootClass!==r&&\"dd\"!==o.rootClass&&(o.listClass=o.listClass?o.listClass:o.rootClass+\"-list\",o.itemClass=o.itemClass?o.itemClass:o.rootClass+\"-item\",o.dragClass=o.dragClass?o.dragClass:o.rootClass+\"-dragel\",o.handleClass=o.handleClass?o.handleClass:o.rootClass+\"-handle\",o.collapsedClass=o.collapsedClass?o.collapsedClass:o.rootClass+\"-collapsed\",o.placeClass=o.placeClass?o.placeClass:o.rootClass+\"-placeholder\",o.noDragClass=o.noDragClass?o.noDragClass:o.rootClass+\"-nodrag\",o.noChildrenClass=o.noChildrenClass?o.noChildrenClass:o.rootClass+\"-nochildren\",o.emptyClass=o.emptyClass?o.emptyClass:o.rootClass+\"-empty\"),this.options=e.extend({},s,o),this.options.json!==r&&this._build(),this.init()}a.prototype={init:function(){var n=this;n.reset(),n.el.data(\"nestable-group\",this.options.group),n.placeEl=e('<div class=\"'+n.options.placeClass+'\"/>');var r=this.el.find(n.options.itemNodeName);e.each(r,(function(t,r){var o=e(r),i=o.parent();n.setParent(o),i.hasClass(n.options.collapsedClass)&&n.collapseItem(i.parent())})),r.length||this.appendEmptyElement(this.el),n.el.on(\"click\",\"button\",(function(t){if(!n.dragEl){var r=e(t.currentTarget),o=r.data(\"action\"),i=r.parents(n.options.itemNodeName).eq(0);\"collapse\"===o&&n.collapseItem(i),\"expand\"===o&&n.expandItem(i)}}));var i=function(t){var r=e(t.target);if(!r.hasClass(n.options.handleClass)){if(r.closest(\".\"+n.options.noDragClass).length)return;r=r.closest(\".\"+n.options.handleClass)}r.length&&!n.dragEl&&(n.isTouch=/^touch/.test(t.type),n.isTouch&&1!==t.touches.length||(t.preventDefault(),n.dragStart(t.touches?t.touches[0]:t)))},s=function(e){n.dragEl&&(e.preventDefault(),n.dragMove(e.touches?e.touches[0]:e))},a=function(e){n.dragEl&&(e.preventDefault(),n.dragStop(e.touches?e.changedTouches[0]:e))};o&&(n.el[0].addEventListener(\"touchstart\",i,!1),t.addEventListener(\"touchmove\",s,!1),t.addEventListener(\"touchend\",a,!1),t.addEventListener(\"touchcancel\",a,!1)),n.el.on(\"mousedown\",i),n.w.on(\"mousemove\",s),n.w.on(\"mouseup\",a);n.el.bind(\"destroy-nestable\",(function(){o&&(n.el[0].removeEventListener(\"touchstart\",i,!1),t.removeEventListener(\"touchmove\",s,!1),t.removeEventListener(\"touchend\",a,!1),t.removeEventListener(\"touchcancel\",a,!1)),n.el.off(\"mousedown\",i),n.w.off(\"mousemove\",s),n.w.off(\"mouseup\",a),n.el.off(\"click\"),n.el.unbind(\"destroy-nestable\"),n.el.data(\"nestable\",null)}))},destroy:function(){this.el.trigger(\"destroy-nestable\")},add:function(t){var n=\".\"+this.options.listClass,o=e(this.el).children(n);t.parent_id!==r&&(o=o.find('[data-id=\"'+t.parent_id+'\"]'),delete t.parent_id,0===o.children(n).length&&(o=o.append(this.options.listRenderer(\"\",this.options))),o=o.find(n+\":first\"),this.setParent(o.parent())),o.append(this._buildItem(t,this.options))},replace:function(e){var t=this._buildItem(e,this.options);this._getItemById(e.id).replaceWith(t)},removeItem:function(t){var n=this.options,r=this.el;(t=t||this).remove();var o=\".\"+n.listClass+\" .\"+n.listClass+\":not(:has(*))\";e(r).find(o).remove();e(r).find('[data-action=\"expand\"], [data-action=\"collapse\"]').each((function(){0===e(this).siblings(\".\"+n.listClass).length&&e(this).remove()}))},remove:function(e,t){var n=this.options,r=this,o=this._getItemById(e),i=n.effect.animation||\"fade\",s=n.effect.time||\"slow\";\"fade\"===i?o.fadeOut(s,(function(){r.removeItem(o)})):this.removeItem(o),t&&t()},removeAll:function(t){var n=this,r=this.options,o=n.el.find(r.listNodeName).first(),i=o.children(r.itemNodeName),s=r.effect.animation||\"fade\",a=r.effect.time||\"slow\";function l(){i.each((function(){n.removeItem(e(this))})),o.show(),t&&t()}\"fade\"===s?o.fadeOut(a,l):l()},_getItemById:function(t){return e(this.el).children(\".\"+this.options.listClass).find('[data-id=\"'+t+'\"]')},_build:function(){var t=this.options.json;\"string\"==typeof t&&(t=JSON.parse(t)),e(this.el).html(this._buildList(t,this.options))},_buildList:function(t,n){if(!t)return\"\";var r=\"\",o=this;return e.each(t,(function(e,t){r+=o._buildItem(t,n)})),n.listRenderer(r,n)},_buildItem:function(t,n){var r=function(t){delete(t=e.extend({},t)).children,delete t.classes,delete t.content;var n={};return e.each(t,(function(e,t){var r;\"object\"==typeof t&&(t=JSON.stringify(t)),n[\"data-\"+e]=(r={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#039;\"},t+\"\".replace(/[&<>\"']/g,(function(e){return r[e]})))})),n}(t);r.class=function(t,n){var r=t.classes||{};\"string\"==typeof r&&(r=[r]);var o=function(e){var t={};for(var n in e)t[e[n]]=e[n];return t}(r);return o[n.itemClass]=n.itemClass,e.map(o,(function(e){return e})).join(\" \")}(t,n);var o=n.contentCallback(t),i=this._buildList(t.children,n),s=e(n.itemRenderer(r,o,i,n,t));return this.setParent(s),s[0].outerHTML},serialize:function(){var t=this,n=function(r){var o=[];return r.children(t.options.itemNodeName).each((function(){var r=e(this),i=e.extend({},r.data()),s=r.children(t.options.listNodeName);if(t.options.includeContent){var a=r.find(\".\"+t.options.contentClass).html();a&&(i.content=a)}s.length&&(i.children=n(s)),o.push(i)})),o};return n(t.el.find(t.options.listNodeName).first())},asNestedSet:function(){var t=this.options,n=[],r=1;return this.el.find(t.listNodeName).first().children(t.itemNodeName).each((function(){r=o(this,0,r)})),n=n.sort((function(e,t){return e.lft-t.lft}));function o(r,s,a){var l,c,u=a+1;return e(r).children(t.listNodeName).children(t.itemNodeName).length>0&&(s++,e(r).children(t.listNodeName).children(t.itemNodeName).each((function(){u=o(e(this),s,u)})),s--),i(l=e(r).attr(\"data-id\"))&&(l=parseInt(l)),i(c=e(r).parent(t.listNodeName).parent(t.itemNodeName).attr(\"data-id\")||\"\")&&(l=parseInt(c)),l&&n.push({id:l,parent_id:c,depth:s,lft:a,rgt:u}),a=u+1}function i(t){return e.isNumeric(t)&&Math.floor(t)==t}},returnOptions:function(){return this.options},serialise:function(){return this.serialize()},toHierarchy:function(t){var n=e.extend({},this.options,t),r=[];return e(this.element).children(n.items).each((function(){var e=o(this);r.push(e)})),r;function o(t){var r=(e(t).attr(n.attribute||\"id\")||\"\").match(n.expression||/(.+)[-=_](.+)/);if(r){var i={id:r[2]};return e(t).children(n.listType).children(n.items).length>0&&(i.children=[],e(t).children(n.listType).children(n.items).each((function(){var e=o(this);i.children.push(e)}))),i}}},toArray:function(){var t=e.extend({},this.options,this),n=t.startDepthCount||0,r=[],o=2,i=this;return i.el.find(i.options.listNodeName).first().children(i.options.itemNodeName).each((function(){o=s(e(this),n+1,o)})),r=r.sort((function(e,t){return e.left-t.left}));function s(o,i,a){var l,c,u=a+1;(o.children(t.options.listNodeName).children(t.options.itemNodeName).length>0&&(i++,o.children(t.options.listNodeName).children(t.options.itemNodeName).each((function(){u=s(e(this),i,u)})),i--),l=o.data().id,i===n+1)?c=t.rootID:c=o.parent(t.options.listNodeName).parent(t.options.itemNodeName).data().id;return l&&r.push({id:l,parent_id:c,depth:i,left:a,right:u}),a=u+1}},reset:function(){this.mouse={offsetX:0,offsetY:0,startX:0,startY:0,lastX:0,lastY:0,nowX:0,nowY:0,distX:0,distY:0,dirAx:0,dirX:0,dirY:0,lastDirX:0,lastDirY:0,distAxX:0,distAxY:0},this.isTouch=!1,this.moving=!1,this.dragEl=null,this.dragRootEl=null,this.dragDepth=0,this.hasNewRoot=!1,this.pointEl=null},expandItem:function(e){e.removeClass(this.options.collapsedClass)},collapseItem:function(e){e.children(this.options.listNodeName).length&&e.addClass(this.options.collapsedClass)},expandAll:function(){var t=this;t.el.find(t.options.itemNodeName).each((function(){t.expandItem(e(this))}))},collapseAll:function(){var t=this;t.el.find(t.options.itemNodeName).each((function(){t.collapseItem(e(this))}))},setParent:function(t){t.is(this.options.itemNodeName)&&t.children(this.options.listNodeName).length&&(t.children(\"[data-action]\").remove(),t.prepend(e(this.options.expandBtnHTML)),t.prepend(e(this.options.collapseBtnHTML)))},unsetParent:function(e){e.removeClass(this.options.collapsedClass),e.children(\"[data-action]\").remove(),e.children(this.options.listNodeName).remove()},dragStart:function(t){var r=this.mouse,o=e(t.target).closest(this.options.itemNodeName),i={top:t.pageY,left:t.pageX},s=this.options.onDragStart.call(this,this.el,o,i);if(void 0===s||!1!==s){this.placeEl.css(\"height\",o.height()),r.offsetX=t.pageX-o.offset().left,r.offsetY=t.pageY-o.offset().top,r.startX=r.lastX=t.pageX,r.startY=r.lastY=t.pageY,this.dragRootEl=this.el,this.dragEl=e(n.createElement(this.options.listNodeName)).addClass(this.options.listClass+\" \"+this.options.dragClass),this.dragEl.css(\"width\",o.outerWidth()),this.setIndexOfItem(o),o.after(this.placeEl),o[0].parentNode.removeChild(o[0]),o.appendTo(this.dragEl),e(n.body).append(this.dragEl),this.dragEl.css({left:t.pageX-r.offsetX,top:t.pageY-r.offsetY});var a,l,c=this.dragEl.find(this.options.itemNodeName);for(a=0;a<c.length;a++)(l=e(c[a]).parents(this.options.listNodeName).length)>this.dragDepth&&(this.dragDepth=l)}},createSubLevel:function(t,n){var r=e(\"<\"+this.options.listNodeName+\"/>\").addClass(this.options.listClass);return n&&r.append(n),t.append(r),this.setParent(t),r},setIndexOfItem:function(t,n){(n=n||[]).unshift(t.index()),e(t[0].parentNode)[0]!==this.dragRootEl[0]?this.setIndexOfItem(e(t[0].parentNode),n):this.dragEl.data(\"indexOfItem\",n)},restoreItemAtIndex:function(t,n){var r=this.el,o=n.length-1;function i(t,r){0===n[o]?e(t).prepend(r.clone(!0)):e(t.children[n[o]-1]).after(r.clone(!0))}for(var s=0;s<n.length;s++){if(o===parseInt(s))return void i(r,t);var a=r[0]?r[0]:r,l=a.children[n[s]];r=l||this.createSubLevel(e(a))}},dragStop:function(e){var t={top:e.pageY,left:e.pageX},n=this.dragEl.data(\"indexOfItem\"),r=this.dragEl.children(this.options.itemNodeName).first();r[0].parentNode.removeChild(r[0]),this.dragEl.remove();var o=this.options.beforeDragStop.call(this,this.el,r,this.placeEl.parent());if(void 0!==o&&!1===o){var i=this.placeEl.parent();return this.placeEl.remove(),i.children().length||this.unsetParent(i.parent()),this.restoreItemAtIndex(r,n),void this.reset()}this.placeEl.replaceWith(r),this.hasNewRoot?(!0===this.options.fixed?this.restoreItemAtIndex(r,n):this.el.trigger(\"lostItem\"),this.dragRootEl.trigger(\"gainedItem\")):this.dragRootEl.trigger(\"change\"),this.options.callback.call(this,this.dragRootEl,r,t),this.reset()},dragMove:function(r){var o,s,a,l=this.options,c=this.mouse;this.dragEl.css({left:r.pageX-c.offsetX,top:r.pageY-c.offsetY}),c.lastX=c.nowX,c.lastY=c.nowY,c.nowX=r.pageX,c.nowY=r.pageY,c.distX=c.nowX-c.lastX,c.distY=c.nowY-c.lastY,c.lastDirX=c.dirX,c.lastDirY=c.dirY,c.dirX=0===c.distX?0:c.distX>0?1:-1,c.dirY=0===c.distY?0:c.distY>0?1:-1;var u=Math.abs(c.distX)>Math.abs(c.distY)?1:0;if(!c.moving)return c.dirAx=u,void(c.moving=!0);if(l.scroll)if(void 0!==t.jQuery.fn.scrollParent){var d=!1,h=this.el.scrollParent()[0];h!==n&&\"HTML\"!==h.tagName?(l.scrollTriggers.bottom+h.offsetHeight-r.pageY<l.scrollSensitivity?h.scrollTop=d=h.scrollTop+l.scrollSpeed:r.pageY-l.scrollTriggers.top<l.scrollSensitivity&&(h.scrollTop=d=h.scrollTop-l.scrollSpeed),l.scrollTriggers.right+h.offsetWidth-r.pageX<l.scrollSensitivity?h.scrollLeft=d=h.scrollLeft+l.scrollSpeed:r.pageX-l.scrollTriggers.left<l.scrollSensitivity&&(h.scrollLeft=d=h.scrollLeft-l.scrollSpeed)):(r.pageY-e(n).scrollTop()<l.scrollSensitivity?d=e(n).scrollTop(e(n).scrollTop()-l.scrollSpeed):e(t).height()-(r.pageY-e(n).scrollTop())<l.scrollSensitivity&&(d=e(n).scrollTop(e(n).scrollTop()+l.scrollSpeed)),r.pageX-e(n).scrollLeft()<l.scrollSensitivity?d=e(n).scrollLeft(e(n).scrollLeft()-l.scrollSpeed):e(t).width()-(r.pageX-e(n).scrollLeft())<l.scrollSensitivity&&(d=e(n).scrollLeft(e(n).scrollLeft()+l.scrollSpeed)))}else console.warn(\"To use scrolling you need to have scrollParent() function, check documentation for more information\");this.scrollTimer&&clearTimeout(this.scrollTimer),l.scroll&&d&&(this.scrollTimer=setTimeout((function(){e(t).trigger(r)}),10)),c.dirAx!==u?(c.distAxX=0,c.distAxY=0):(c.distAxX+=Math.abs(c.distX),0!==c.dirX&&c.dirX!==c.lastDirX&&(c.distAxX=0),c.distAxY+=Math.abs(c.distY),0!==c.dirY&&c.dirY!==c.lastDirY&&(c.distAxY=0)),c.dirAx=u,c.dirAx&&c.distAxX>=l.threshold&&(c.distAxX=0,a=this.placeEl.prev(l.itemNodeName),c.distX>0&&a.length&&!a.hasClass(l.collapsedClass)&&!a.hasClass(l.noChildrenClass)&&(o=a.find(l.listNodeName).last(),this.placeEl.parents(l.listNodeName).length+this.dragDepth<=l.maxDepth&&(o.length?(o=a.children(l.listNodeName).last()).append(this.placeEl):this.createSubLevel(a,this.placeEl))),c.distX<0&&(this.placeEl.next(l.itemNodeName).length||(s=this.placeEl.parent(),this.placeEl.closest(l.itemNodeName).after(this.placeEl),s.children().length||this.unsetParent(s.parent()))));var m=!1;if(i||(this.dragEl[0].style.visibility=\"hidden\"),this.pointEl=e(n.elementFromPoint(r.pageX-n.body.scrollLeft,r.pageY-(t.pageYOffset||n.documentElement.scrollTop))),i||(this.dragEl[0].style.visibility=\"visible\"),this.pointEl.hasClass(l.handleClass)&&(this.pointEl=this.pointEl.closest(l.itemNodeName)),this.pointEl.hasClass(l.emptyClass))m=!0;else if(!this.pointEl.length||!this.pointEl.hasClass(l.itemClass))return;var f=this.pointEl.closest(\".\"+l.rootClass),p=this.dragRootEl.data(\"nestable-id\")!==f.data(\"nestable-id\");if(!c.dirAx||p||m){if(p&&l.group!==f.data(\"nestable-group\"))return;if(this.options.fixedDepth&&this.dragDepth+1!==this.pointEl.parents(l.listNodeName).length)return;if(this.dragDepth-1+this.pointEl.parents(l.listNodeName).length>l.maxDepth)return;var g=r.pageY<this.pointEl.offset().top+this.pointEl.height()/2;s=this.placeEl.parent(),m?((o=e(n.createElement(l.listNodeName)).addClass(l.listClass)).append(this.placeEl),this.pointEl.replaceWith(o)):g?this.pointEl.before(this.placeEl):this.pointEl.after(this.placeEl),s.children().length||this.unsetParent(s.parent()),this.dragRootEl.find(l.itemNodeName).length||this.appendEmptyElement(this.dragRootEl),this.dragRootEl=f,p&&(this.hasNewRoot=this.el[0]!==this.dragRootEl[0])}},appendEmptyElement:function(e){e.append('<div class=\"'+this.options.emptyClass+'\"/>')}},e.fn.nestable=function(n){var r=this,o=this,i=arguments;return\"Nestable\"in t||(t.Nestable={},Nestable.counter=0),r.each((function(){var t=e(this).data(\"nestable\");if(t){if(\"string\"==typeof n&&\"function\"==typeof t[n])if(i.length>1){for(var r=[],s=1;s<i.length;s++)r.push(i[s]);o=t[n].apply(t,r)}else o=t[n]()}else Nestable.counter++,e(this).data(\"nestable\",new a(this,n)),e(this).data(\"nestable-id\",Nestable.counter)})),o||r}}(window.jQuery||window.Zepto,window,document)},686:(e,t,n)=>{var r,o,i;o=[n(9755)],r=function(e){var t=function(){if(e&&e.fn&&e.fn.select2&&e.fn.select2.amd)var t=e.fn.select2.amd;var n,r,o;return t&&t.requirejs||(t?r=t:t={},function(e){var t,i,s,a,l={},c={},u={},d={},h=Object.prototype.hasOwnProperty,m=[].slice,f=/\\.js$/;function p(e,t){return h.call(e,t)}function g(e,t){var n,r,o,i,s,a,l,c,d,h,m,p=t&&t.split(\"/\"),g=u.map,v=g&&g[\"*\"]||{};if(e){for(s=(e=e.split(\"/\")).length-1,u.nodeIdCompat&&f.test(e[s])&&(e[s]=e[s].replace(f,\"\")),\".\"===e[0].charAt(0)&&p&&(e=p.slice(0,p.length-1).concat(e)),d=0;d<e.length;d++)if(\".\"===(m=e[d]))e.splice(d,1),d-=1;else if(\"..\"===m){if(0===d||1===d&&\"..\"===e[2]||\"..\"===e[d-1])continue;d>0&&(e.splice(d-1,2),d-=2)}e=e.join(\"/\")}if((p||v)&&g){for(d=(n=e.split(\"/\")).length;d>0;d-=1){if(r=n.slice(0,d).join(\"/\"),p)for(h=p.length;h>0;h-=1)if((o=g[p.slice(0,h).join(\"/\")])&&(o=o[r])){i=o,a=d;break}if(i)break;!l&&v&&v[r]&&(l=v[r],c=d)}!i&&l&&(i=l,a=c),i&&(n.splice(0,a,i),e=n.join(\"/\"))}return e}function v(t,n){return function(){var r=m.call(arguments,0);return\"string\"!=typeof r[0]&&1===r.length&&r.push(null),i.apply(e,r.concat([t,n]))}}function y(e){return function(t){return g(t,e)}}function b(e){return function(t){l[e]=t}}function _(n){if(p(c,n)){var r=c[n];delete c[n],d[n]=!0,t.apply(e,r)}if(!p(l,n)&&!p(d,n))throw new Error(\"No \"+n);return l[n]}function w(e){var t,n=e?e.indexOf(\"!\"):-1;return n>-1&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function x(e){return e?w(e):[]}function C(e){return function(){return u&&u.config&&u.config[e]||{}}}s=function(e,t){var n,r=w(e),o=r[0],i=t[1];return e=r[1],o&&(n=_(o=g(o,i))),o?e=n&&n.normalize?n.normalize(e,y(i)):g(e,i):(o=(r=w(e=g(e,i)))[0],e=r[1],o&&(n=_(o))),{f:o?o+\"!\"+e:e,n:e,pr:o,p:n}},a={require:function(e){return v(e)},exports:function(e){var t=l[e];return void 0!==t?t:l[e]={}},module:function(e){return{id:e,uri:\"\",exports:l[e],config:C(e)}}},t=function(t,n,r,o){var i,u,h,m,f,g,y,w=[],C=typeof r;if(g=x(o=o||t),\"undefined\"===C||\"function\"===C){for(n=!n.length&&r.length?[\"require\",\"exports\",\"module\"]:n,f=0;f<n.length;f+=1)if(\"require\"===(u=(m=s(n[f],g)).f))w[f]=a.require(t);else if(\"exports\"===u)w[f]=a.exports(t),y=!0;else if(\"module\"===u)i=w[f]=a.module(t);else if(p(l,u)||p(c,u)||p(d,u))w[f]=_(u);else{if(!m.p)throw new Error(t+\" missing \"+u);m.p.load(m.n,v(o,!0),b(u),{}),w[f]=l[u]}h=r?r.apply(l[t],w):void 0,t&&(i&&i.exports!==e&&i.exports!==l[t]?l[t]=i.exports:h===e&&y||(l[t]=h))}else t&&(l[t]=r)},n=r=i=function(n,r,o,l,c){if(\"string\"==typeof n)return a[n]?a[n](r):_(s(n,x(r)).f);if(!n.splice){if((u=n).deps&&i(u.deps,u.callback),!r)return;r.splice?(n=r,r=o,o=null):n=e}return r=r||function(){},\"function\"==typeof o&&(o=l,l=c),l?t(e,n,r,o):setTimeout((function(){t(e,n,r,o)}),4),i},i.config=function(e){return i(e)},n._defined=l,(o=function(e,t,n){if(\"string\"!=typeof e)throw new Error(\"See almond README: incorrect module build, no module name\");t.splice||(n=t,t=[]),p(l,e)||p(c,e)||(c[e]=[e,t,n])}).amd={jQuery:!0}}(),t.requirejs=n,t.require=r,t.define=o),t.define(\"almond\",(function(){})),t.define(\"jquery\",[],(function(){var t=e||$;return null==t&&console&&console.error&&console.error(\"Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page.\"),t})),t.define(\"select2/utils\",[\"jquery\"],(function(e){var t={};function n(e){var t=e.prototype,n=[];for(var r in t)\"function\"==typeof t[r]&&\"constructor\"!==r&&n.push(r);return n}t.Extend=function(e,t){var n={}.hasOwnProperty;function r(){this.constructor=e}for(var o in t)n.call(t,o)&&(e[o]=t[o]);return r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype,e},t.Decorate=function(e,t){var r=n(t),o=n(e);function i(){var n=Array.prototype.unshift,r=t.prototype.constructor.length,o=e.prototype.constructor;r>0&&(n.call(arguments,e.prototype.constructor),o=t.prototype.constructor),o.apply(this,arguments)}function s(){this.constructor=i}t.displayName=e.displayName,i.prototype=new s;for(var a=0;a<o.length;a++){var l=o[a];i.prototype[l]=e.prototype[l]}for(var c=function(e){var n=function(){};e in i.prototype&&(n=i.prototype[e]);var r=t.prototype[e];return function(){return Array.prototype.unshift.call(arguments,n),r.apply(this,arguments)}},u=0;u<r.length;u++){var d=r[u];i.prototype[d]=c(d)}return i};var r=function(){this.listeners={}};r.prototype.on=function(e,t){this.listeners=this.listeners||{},e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t]},r.prototype.trigger=function(e){var t=Array.prototype.slice,n=t.call(arguments,1);this.listeners=this.listeners||{},null==n&&(n=[]),0===n.length&&n.push({}),n[0]._type=e,e in this.listeners&&this.invoke(this.listeners[e],t.call(arguments,1)),\"*\"in this.listeners&&this.invoke(this.listeners[\"*\"],arguments)},r.prototype.invoke=function(e,t){for(var n=0,r=e.length;n<r;n++)e[n].apply(this,t)},t.Observable=r,t.generateChars=function(e){for(var t=\"\",n=0;n<e;n++)t+=Math.floor(36*Math.random()).toString(36);return t},t.bind=function(e,t){return function(){e.apply(t,arguments)}},t._convertData=function(e){for(var t in e){var n=t.split(\"-\"),r=e;if(1!==n.length){for(var o=0;o<n.length;o++){var i=n[o];(i=i.substring(0,1).toLowerCase()+i.substring(1))in r||(r[i]={}),o==n.length-1&&(r[i]=e[t]),r=r[i]}delete e[t]}}return e},t.hasScroll=function(t,n){var r=e(n),o=n.style.overflowX,i=n.style.overflowY;return(o!==i||\"hidden\"!==i&&\"visible\"!==i)&&(\"scroll\"===o||\"scroll\"===i||r.innerHeight()<n.scrollHeight||r.innerWidth()<n.scrollWidth)},t.escapeMarkup=function(e){var t={\"\\\\\":\"&#92;\",\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#47;\"};return\"string\"!=typeof e?e:String(e).replace(/[&<>\"'\\/\\\\]/g,(function(e){return t[e]}))},t.appendMany=function(t,n){if(\"1.7\"===e.fn.jquery.substr(0,3)){var r=e();e.map(n,(function(e){r=r.add(e)})),n=r}t.append(n)},t.__cache={};var o=0;return t.GetUniqueElementId=function(e){var t=e.getAttribute(\"data-select2-id\");return null==t&&(e.id?(t=e.id,e.setAttribute(\"data-select2-id\",t)):(e.setAttribute(\"data-select2-id\",++o),t=o.toString())),t},t.StoreData=function(e,n,r){var o=t.GetUniqueElementId(e);t.__cache[o]||(t.__cache[o]={}),t.__cache[o][n]=r},t.GetData=function(n,r){var o=t.GetUniqueElementId(n);return r?t.__cache[o]&&null!=t.__cache[o][r]?t.__cache[o][r]:e(n).data(r):t.__cache[o]},t.RemoveData=function(e){var n=t.GetUniqueElementId(e);null!=t.__cache[n]&&delete t.__cache[n],e.removeAttribute(\"data-select2-id\")},t})),t.define(\"select2/results\",[\"jquery\",\"./utils\"],(function(e,t){function n(e,t,r){this.$element=e,this.data=r,this.options=t,n.__super__.constructor.call(this)}return t.Extend(n,t.Observable),n.prototype.render=function(){var t=e('<ul class=\"select2-results__options\" role=\"listbox\"></ul>');return this.options.get(\"multiple\")&&t.attr(\"aria-multiselectable\",\"true\"),this.$results=t,t},n.prototype.clear=function(){this.$results.empty()},n.prototype.displayMessage=function(t){var n=this.options.get(\"escapeMarkup\");this.clear(),this.hideLoading();var r=e('<li role=\"alert\" aria-live=\"assertive\" class=\"select2-results__option\"></li>'),o=this.options.get(\"translations\").get(t.message);r.append(n(o(t.args))),r[0].className+=\" select2-results__message\",this.$results.append(r)},n.prototype.hideMessages=function(){this.$results.find(\".select2-results__message\").remove()},n.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n<e.results.length;n++){var r=e.results[n],o=this.option(r);t.push(o)}this.$results.append(t)}else 0===this.$results.children().length&&this.trigger(\"results:message\",{message:\"noResults\"})},n.prototype.position=function(e,t){t.find(\".select2-results\").append(e)},n.prototype.sort=function(e){return this.options.get(\"sorter\")(e)},n.prototype.highlightFirstItem=function(){var e=this.$results.find(\".select2-results__option[aria-selected]\"),t=e.filter(\"[aria-selected=true]\");t.length>0?t.first().trigger(\"mouseenter\"):e.first().trigger(\"mouseenter\"),this.ensureHighlightVisible()},n.prototype.setClasses=function(){var n=this;this.data.current((function(r){var o=e.map(r,(function(e){return e.id.toString()}));n.$results.find(\".select2-results__option[aria-selected]\").each((function(){var n=e(this),r=t.GetData(this,\"data\"),i=\"\"+r.id;null!=r.element&&r.element.selected||null==r.element&&e.inArray(i,o)>-1?n.attr(\"aria-selected\",\"true\"):n.attr(\"aria-selected\",\"false\")}))}))},n.prototype.showLoading=function(e){this.hideLoading();var t={disabled:!0,loading:!0,text:this.options.get(\"translations\").get(\"searching\")(e)},n=this.option(t);n.className+=\" loading-results\",this.$results.prepend(n)},n.prototype.hideLoading=function(){this.$results.find(\".loading-results\").remove()},n.prototype.option=function(n){var r=document.createElement(\"li\");r.className=\"select2-results__option\";var o={role:\"option\",\"aria-selected\":\"false\"},i=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(var s in(null!=n.element&&i.call(n.element,\":disabled\")||null==n.element&&n.disabled)&&(delete o[\"aria-selected\"],o[\"aria-disabled\"]=\"true\"),null==n.id&&delete o[\"aria-selected\"],null!=n._resultId&&(r.id=n._resultId),n.title&&(r.title=n.title),n.children&&(o.role=\"group\",o[\"aria-label\"]=n.text,delete o[\"aria-selected\"]),o){var a=o[s];r.setAttribute(s,a)}if(n.children){var l=e(r),c=document.createElement(\"strong\");c.className=\"select2-results__group\",e(c),this.template(n,c);for(var u=[],d=0;d<n.children.length;d++){var h=n.children[d],m=this.option(h);u.push(m)}var f=e(\"<ul></ul>\",{class:\"select2-results__options select2-results__options--nested\"});f.append(u),l.append(c),l.append(f)}else this.template(n,r);return t.StoreData(r,\"data\",n),r},n.prototype.bind=function(n,r){var o=this,i=n.id+\"-results\";this.$results.attr(\"id\",i),n.on(\"results:all\",(function(e){o.clear(),o.append(e.data),n.isOpen()&&(o.setClasses(),o.highlightFirstItem())})),n.on(\"results:append\",(function(e){o.append(e.data),n.isOpen()&&o.setClasses()})),n.on(\"query\",(function(e){o.hideMessages(),o.showLoading(e)})),n.on(\"select\",(function(){n.isOpen()&&(o.setClasses(),o.options.get(\"scrollAfterSelect\")&&o.highlightFirstItem())})),n.on(\"unselect\",(function(){n.isOpen()&&(o.setClasses(),o.options.get(\"scrollAfterSelect\")&&o.highlightFirstItem())})),n.on(\"open\",(function(){o.$results.attr(\"aria-expanded\",\"true\"),o.$results.attr(\"aria-hidden\",\"false\"),o.setClasses(),o.ensureHighlightVisible()})),n.on(\"close\",(function(){o.$results.attr(\"aria-expanded\",\"false\"),o.$results.attr(\"aria-hidden\",\"true\"),o.$results.removeAttr(\"aria-activedescendant\")})),n.on(\"results:toggle\",(function(){var e=o.getHighlightedResults();0!==e.length&&e.trigger(\"mouseup\")})),n.on(\"results:select\",(function(){var e=o.getHighlightedResults();if(0!==e.length){var n=t.GetData(e[0],\"data\");\"true\"==e.attr(\"aria-selected\")?o.trigger(\"close\",{}):o.trigger(\"select\",{data:n})}})),n.on(\"results:previous\",(function(){var e=o.getHighlightedResults(),t=o.$results.find(\"[aria-selected]\"),n=t.index(e);if(!(n<=0)){var r=n-1;0===e.length&&(r=0);var i=t.eq(r);i.trigger(\"mouseenter\");var s=o.$results.offset().top,a=i.offset().top,l=o.$results.scrollTop()+(a-s);0===r?o.$results.scrollTop(0):a-s<0&&o.$results.scrollTop(l)}})),n.on(\"results:next\",(function(){var e=o.getHighlightedResults(),t=o.$results.find(\"[aria-selected]\"),n=t.index(e)+1;if(!(n>=t.length)){var r=t.eq(n);r.trigger(\"mouseenter\");var i=o.$results.offset().top+o.$results.outerHeight(!1),s=r.offset().top+r.outerHeight(!1),a=o.$results.scrollTop()+s-i;0===n?o.$results.scrollTop(0):s>i&&o.$results.scrollTop(a)}})),n.on(\"results:focus\",(function(e){e.element.addClass(\"select2-results__option--highlighted\")})),n.on(\"results:message\",(function(e){o.displayMessage(e)})),e.fn.mousewheel&&this.$results.on(\"mousewheel\",(function(e){var t=o.$results.scrollTop(),n=o.$results.get(0).scrollHeight-t+e.deltaY,r=e.deltaY>0&&t-e.deltaY<=0,i=e.deltaY<0&&n<=o.$results.height();r?(o.$results.scrollTop(0),e.preventDefault(),e.stopPropagation()):i&&(o.$results.scrollTop(o.$results.get(0).scrollHeight-o.$results.height()),e.preventDefault(),e.stopPropagation())})),this.$results.on(\"mouseup\",\".select2-results__option[aria-selected]\",(function(n){var r=e(this),i=t.GetData(this,\"data\");\"true\"!==r.attr(\"aria-selected\")?o.trigger(\"select\",{originalEvent:n,data:i}):o.options.get(\"multiple\")?o.trigger(\"unselect\",{originalEvent:n,data:i}):o.trigger(\"close\",{})})),this.$results.on(\"mouseenter\",\".select2-results__option[aria-selected]\",(function(n){var r=t.GetData(this,\"data\");o.getHighlightedResults().removeClass(\"select2-results__option--highlighted\"),o.trigger(\"results:focus\",{data:r,element:e(this)})}))},n.prototype.getHighlightedResults=function(){return this.$results.find(\".select2-results__option--highlighted\")},n.prototype.destroy=function(){this.$results.remove()},n.prototype.ensureHighlightVisible=function(){var e=this.getHighlightedResults();if(0!==e.length){var t=this.$results.find(\"[aria-selected]\").index(e),n=this.$results.offset().top,r=e.offset().top,o=this.$results.scrollTop()+(r-n),i=r-n;o-=2*e.outerHeight(!1),t<=2?this.$results.scrollTop(0):(i>this.$results.outerHeight()||i<0)&&this.$results.scrollTop(o)}},n.prototype.template=function(t,n){var r=this.options.get(\"templateResult\"),o=this.options.get(\"escapeMarkup\"),i=r(t,n);null==i?n.style.display=\"none\":\"string\"==typeof i?n.innerHTML=o(i):e(n).append(i)},n})),t.define(\"select2/keys\",[],(function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}})),t.define(\"select2/selection/base\",[\"jquery\",\"../utils\",\"../keys\"],(function(e,t,n){function r(e,t){this.$element=e,this.options=t,r.__super__.constructor.call(this)}return t.Extend(r,t.Observable),r.prototype.render=function(){var n=e('<span class=\"select2-selection\" role=\"combobox\"  aria-haspopup=\"true\" aria-expanded=\"false\"></span>');return this._tabindex=0,null!=t.GetData(this.$element[0],\"old-tabindex\")?this._tabindex=t.GetData(this.$element[0],\"old-tabindex\"):null!=this.$element.attr(\"tabindex\")&&(this._tabindex=this.$element.attr(\"tabindex\")),n.attr(\"title\",this.$element.attr(\"title\")),n.attr(\"tabindex\",this._tabindex),n.attr(\"aria-disabled\",\"false\"),this.$selection=n,n},r.prototype.bind=function(e,t){var r=this,o=e.id+\"-results\";this.container=e,this.$selection.on(\"focus\",(function(e){r.trigger(\"focus\",e)})),this.$selection.on(\"blur\",(function(e){r._handleBlur(e)})),this.$selection.on(\"keydown\",(function(e){r.trigger(\"keypress\",e),e.which===n.SPACE&&e.preventDefault()})),e.on(\"results:focus\",(function(e){r.$selection.attr(\"aria-activedescendant\",e.data._resultId)})),e.on(\"selection:update\",(function(e){r.update(e.data)})),e.on(\"open\",(function(){r.$selection.attr(\"aria-expanded\",\"true\"),r.$selection.attr(\"aria-owns\",o),r._attachCloseHandler(e)})),e.on(\"close\",(function(){r.$selection.attr(\"aria-expanded\",\"false\"),r.$selection.removeAttr(\"aria-activedescendant\"),r.$selection.removeAttr(\"aria-owns\"),r.$selection.trigger(\"focus\"),r._detachCloseHandler(e)})),e.on(\"enable\",(function(){r.$selection.attr(\"tabindex\",r._tabindex),r.$selection.attr(\"aria-disabled\",\"false\")})),e.on(\"disable\",(function(){r.$selection.attr(\"tabindex\",\"-1\"),r.$selection.attr(\"aria-disabled\",\"true\")}))},r.prototype._handleBlur=function(t){var n=this;window.setTimeout((function(){document.activeElement==n.$selection[0]||e.contains(n.$selection[0],document.activeElement)||n.trigger(\"blur\",t)}),1)},r.prototype._attachCloseHandler=function(n){e(document.body).on(\"mousedown.select2.\"+n.id,(function(n){var r=e(n.target).closest(\".select2\");e(\".select2.select2-container--open\").each((function(){this!=r[0]&&t.GetData(this,\"element\").select2(\"close\")}))}))},r.prototype._detachCloseHandler=function(t){e(document.body).off(\"mousedown.select2.\"+t.id)},r.prototype.position=function(e,t){t.find(\".selection\").append(e)},r.prototype.destroy=function(){this._detachCloseHandler(this.container)},r.prototype.update=function(e){throw new Error(\"The `update` method must be defined in child classes.\")},r.prototype.isEnabled=function(){return!this.isDisabled()},r.prototype.isDisabled=function(){return this.options.get(\"disabled\")},r})),t.define(\"select2/selection/single\",[\"jquery\",\"./base\",\"../utils\",\"../keys\"],(function(e,t,n,r){function o(){o.__super__.constructor.apply(this,arguments)}return n.Extend(o,t),o.prototype.render=function(){var e=o.__super__.render.call(this);return e.addClass(\"select2-selection--single\"),e.html('<span class=\"select2-selection__rendered\"></span><span class=\"select2-selection__arrow\" role=\"presentation\"><b role=\"presentation\"></b></span>'),e},o.prototype.bind=function(e,t){var n=this;o.__super__.bind.apply(this,arguments);var r=e.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",r).attr(\"role\",\"textbox\").attr(\"aria-readonly\",\"true\"),this.$selection.attr(\"aria-labelledby\",r),this.$selection.on(\"mousedown\",(function(e){1===e.which&&n.trigger(\"toggle\",{originalEvent:e})})),this.$selection.on(\"focus\",(function(e){})),this.$selection.on(\"blur\",(function(e){})),e.on(\"focus\",(function(t){e.isOpen()||n.$selection.trigger(\"focus\")}))},o.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},o.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},o.prototype.selectionContainer=function(){return e(\"<span></span>\")},o.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(\".select2-selection__rendered\"),r=this.display(t,n);n.empty().append(r);var o=t.title||t.text;o?n.attr(\"title\",o):n.removeAttr(\"title\")}else this.clear()},o})),t.define(\"select2/selection/multiple\",[\"jquery\",\"./base\",\"../utils\"],(function(e,t,n){function r(e,t){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,t),r.prototype.render=function(){var e=r.__super__.render.call(this);return e.addClass(\"select2-selection--multiple\"),e.html('<ul class=\"select2-selection__rendered\"></ul>'),e},r.prototype.bind=function(t,o){var i=this;r.__super__.bind.apply(this,arguments),this.$selection.on(\"click\",(function(e){i.trigger(\"toggle\",{originalEvent:e})})),this.$selection.on(\"click\",\".select2-selection__choice__remove\",(function(t){if(!i.isDisabled()){var r=e(this).parent(),o=n.GetData(r[0],\"data\");i.trigger(\"unselect\",{originalEvent:t,data:o})}}))},r.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},r.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},r.prototype.selectionContainer=function(){return e('<li class=\"select2-selection__choice\"><span class=\"select2-selection__choice__remove\" role=\"presentation\">&times;</span></li>')},r.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],r=0;r<e.length;r++){var o=e[r],i=this.selectionContainer(),s=this.display(o,i);i.append(s);var a=o.title||o.text;a&&i.attr(\"title\",a),n.StoreData(i[0],\"data\",o),t.push(i)}var l=this.$selection.find(\".select2-selection__rendered\");n.appendMany(l,t)}},r})),t.define(\"select2/selection/placeholder\",[\"../utils\"],(function(e){function t(e,t,n){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n)}return t.prototype.normalizePlaceholder=function(e,t){return\"string\"==typeof t&&(t={id:\"\",text:t}),t},t.prototype.createPlaceholder=function(e,t){var n=this.selectionContainer();return n.html(this.display(t)),n.addClass(\"select2-selection__placeholder\").removeClass(\"select2-selection__choice\"),n},t.prototype.update=function(e,t){var n=1==t.length&&t[0].id!=this.placeholder.id;if(t.length>1||n)return e.call(this,t);this.clear();var r=this.createPlaceholder(this.placeholder);this.$selection.find(\".select2-selection__rendered\").append(r)},t})),t.define(\"select2/selection/allowClear\",[\"jquery\",\"../keys\",\"../utils\"],(function(e,t,n){function r(){}return r.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),null==this.placeholder&&this.options.get(\"debug\")&&window.console&&console.error&&console.error(\"Select2: The `allowClear` option should be used in combination with the `placeholder` option.\"),this.$selection.on(\"mousedown\",\".select2-selection__clear\",(function(e){r._handleClear(e)})),t.on(\"keypress\",(function(e){r._handleKeyboardClear(e,t)}))},r.prototype._handleClear=function(e,t){if(!this.isDisabled()){var r=this.$selection.find(\".select2-selection__clear\");if(0!==r.length){t.stopPropagation();var o=n.GetData(r[0],\"data\"),i=this.$element.val();this.$element.val(this.placeholder.id);var s={data:o};if(this.trigger(\"clear\",s),s.prevented)this.$element.val(i);else{for(var a=0;a<o.length;a++)if(s={data:o[a]},this.trigger(\"unselect\",s),s.prevented)return void this.$element.val(i);this.$element.trigger(\"input\").trigger(\"change\"),this.trigger(\"toggle\",{})}}}},r.prototype._handleKeyboardClear=function(e,n,r){r.isOpen()||n.which!=t.DELETE&&n.which!=t.BACKSPACE||this._handleClear(n)},r.prototype.update=function(t,r){if(t.call(this,r),!(this.$selection.find(\".select2-selection__placeholder\").length>0||0===r.length)){var o=this.options.get(\"translations\").get(\"removeAllItems\"),i=e('<span class=\"select2-selection__clear\" title=\"'+o()+'\">&times;</span>');n.StoreData(i[0],\"data\",r),this.$selection.find(\".select2-selection__rendered\").prepend(i)}},r})),t.define(\"select2/selection/search\",[\"jquery\",\"../utils\",\"../keys\"],(function(e,t,n){function r(e,t,n){e.call(this,t,n)}return r.prototype.render=function(t){var n=e('<li class=\"select2-search select2-search--inline\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></li>');this.$searchContainer=n,this.$search=n.find(\"input\");var r=t.call(this);return this._transferTabIndex(),r},r.prototype.bind=function(e,r,o){var i=this,s=r.id+\"-results\";e.call(this,r,o),r.on(\"open\",(function(){i.$search.attr(\"aria-controls\",s),i.$search.trigger(\"focus\")})),r.on(\"close\",(function(){i.$search.val(\"\"),i.$search.removeAttr(\"aria-controls\"),i.$search.removeAttr(\"aria-activedescendant\"),i.$search.trigger(\"focus\")})),r.on(\"enable\",(function(){i.$search.prop(\"disabled\",!1),i._transferTabIndex()})),r.on(\"disable\",(function(){i.$search.prop(\"disabled\",!0)})),r.on(\"focus\",(function(e){i.$search.trigger(\"focus\")})),r.on(\"results:focus\",(function(e){e.data._resultId?i.$search.attr(\"aria-activedescendant\",e.data._resultId):i.$search.removeAttr(\"aria-activedescendant\")})),this.$selection.on(\"focusin\",\".select2-search--inline\",(function(e){i.trigger(\"focus\",e)})),this.$selection.on(\"focusout\",\".select2-search--inline\",(function(e){i._handleBlur(e)})),this.$selection.on(\"keydown\",\".select2-search--inline\",(function(e){if(e.stopPropagation(),i.trigger(\"keypress\",e),i._keyUpPrevented=e.isDefaultPrevented(),e.which===n.BACKSPACE&&\"\"===i.$search.val()){var r=i.$searchContainer.prev(\".select2-selection__choice\");if(r.length>0){var o=t.GetData(r[0],\"data\");i.searchRemoveChoice(o),e.preventDefault()}}})),this.$selection.on(\"click\",\".select2-search--inline\",(function(e){i.$search.val()&&e.stopPropagation()}));var a=document.documentMode,l=a&&a<=11;this.$selection.on(\"input.searchcheck\",\".select2-search--inline\",(function(e){l?i.$selection.off(\"input.search input.searchcheck\"):i.$selection.off(\"keyup.search\")})),this.$selection.on(\"keyup.search input.search\",\".select2-search--inline\",(function(e){if(l&&\"input\"===e.type)i.$selection.off(\"input.search input.searchcheck\");else{var t=e.which;t!=n.SHIFT&&t!=n.CTRL&&t!=n.ALT&&t!=n.TAB&&i.handleSearch(e)}}))},r.prototype._transferTabIndex=function(e){this.$search.attr(\"tabindex\",this.$selection.attr(\"tabindex\")),this.$selection.attr(\"tabindex\",\"-1\")},r.prototype.createPlaceholder=function(e,t){this.$search.attr(\"placeholder\",t.text)},r.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr(\"placeholder\",\"\"),e.call(this,t),this.$selection.find(\".select2-selection__rendered\").append(this.$searchContainer),this.resizeSearch(),n&&this.$search.trigger(\"focus\")},r.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var e=this.$search.val();this.trigger(\"query\",{term:e})}this._keyUpPrevented=!1},r.prototype.searchRemoveChoice=function(e,t){this.trigger(\"unselect\",{data:t}),this.$search.val(t.text),this.handleSearch()},r.prototype.resizeSearch=function(){this.$search.css(\"width\",\"25px\");var e=\"\";e=\"\"!==this.$search.attr(\"placeholder\")?this.$selection.find(\".select2-selection__rendered\").width():.75*(this.$search.val().length+1)+\"em\",this.$search.css(\"width\",e)},r})),t.define(\"select2/selection/eventRelay\",[\"jquery\"],(function(e){function t(){}return t.prototype.bind=function(t,n,r){var o=this,i=[\"open\",\"opening\",\"close\",\"closing\",\"select\",\"selecting\",\"unselect\",\"unselecting\",\"clear\",\"clearing\"],s=[\"opening\",\"closing\",\"selecting\",\"unselecting\",\"clearing\"];t.call(this,n,r),n.on(\"*\",(function(t,n){if(-1!==e.inArray(t,i)){n=n||{};var r=e.Event(\"select2:\"+t,{params:n});o.$element.trigger(r),-1!==e.inArray(t,s)&&(n.prevented=r.isDefaultPrevented())}}))},t})),t.define(\"select2/translation\",[\"jquery\",\"require\"],(function(e,t){function n(e){this.dict=e||{}}return n.prototype.all=function(){return this.dict},n.prototype.get=function(e){return this.dict[e]},n.prototype.extend=function(t){this.dict=e.extend({},t.all(),this.dict)},n._cache={},n.loadPath=function(e){if(!(e in n._cache)){var r=t(e);n._cache[e]=r}return new n(n._cache[e])},n})),t.define(\"select2/diacritics\",[],(function(){return{\"Ⓐ\":\"A\",Ａ:\"A\",À:\"A\",Á:\"A\",Â:\"A\",Ầ:\"A\",Ấ:\"A\",Ẫ:\"A\",Ẩ:\"A\",Ã:\"A\",Ā:\"A\",Ă:\"A\",Ằ:\"A\",Ắ:\"A\",Ẵ:\"A\",Ẳ:\"A\",Ȧ:\"A\",Ǡ:\"A\",Ä:\"A\",Ǟ:\"A\",Ả:\"A\",Å:\"A\",Ǻ:\"A\",Ǎ:\"A\",Ȁ:\"A\",Ȃ:\"A\",Ạ:\"A\",Ậ:\"A\",Ặ:\"A\",Ḁ:\"A\",Ą:\"A\",Ⱥ:\"A\",Ɐ:\"A\",Ꜳ:\"AA\",Æ:\"AE\",Ǽ:\"AE\",Ǣ:\"AE\",Ꜵ:\"AO\",Ꜷ:\"AU\",Ꜹ:\"AV\",Ꜻ:\"AV\",Ꜽ:\"AY\",\"Ⓑ\":\"B\",Ｂ:\"B\",Ḃ:\"B\",Ḅ:\"B\",Ḇ:\"B\",Ƀ:\"B\",Ƃ:\"B\",Ɓ:\"B\",\"Ⓒ\":\"C\",Ｃ:\"C\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",Ç:\"C\",Ḉ:\"C\",Ƈ:\"C\",Ȼ:\"C\",Ꜿ:\"C\",\"Ⓓ\":\"D\",Ｄ:\"D\",Ḋ:\"D\",Ď:\"D\",Ḍ:\"D\",Ḑ:\"D\",Ḓ:\"D\",Ḏ:\"D\",Đ:\"D\",Ƌ:\"D\",Ɗ:\"D\",Ɖ:\"D\",Ꝺ:\"D\",Ǳ:\"DZ\",Ǆ:\"DZ\",ǲ:\"Dz\",ǅ:\"Dz\",\"Ⓔ\":\"E\",Ｅ:\"E\",È:\"E\",É:\"E\",Ê:\"E\",Ề:\"E\",Ế:\"E\",Ễ:\"E\",Ể:\"E\",Ẽ:\"E\",Ē:\"E\",Ḕ:\"E\",Ḗ:\"E\",Ĕ:\"E\",Ė:\"E\",Ë:\"E\",Ẻ:\"E\",Ě:\"E\",Ȅ:\"E\",Ȇ:\"E\",Ẹ:\"E\",Ệ:\"E\",Ȩ:\"E\",Ḝ:\"E\",Ę:\"E\",Ḙ:\"E\",Ḛ:\"E\",Ɛ:\"E\",Ǝ:\"E\",\"Ⓕ\":\"F\",Ｆ:\"F\",Ḟ:\"F\",Ƒ:\"F\",Ꝼ:\"F\",\"Ⓖ\":\"G\",Ｇ:\"G\",Ǵ:\"G\",Ĝ:\"G\",Ḡ:\"G\",Ğ:\"G\",Ġ:\"G\",Ǧ:\"G\",Ģ:\"G\",Ǥ:\"G\",Ɠ:\"G\",Ꞡ:\"G\",Ᵹ:\"G\",Ꝿ:\"G\",\"Ⓗ\":\"H\",Ｈ:\"H\",Ĥ:\"H\",Ḣ:\"H\",Ḧ:\"H\",Ȟ:\"H\",Ḥ:\"H\",Ḩ:\"H\",Ḫ:\"H\",Ħ:\"H\",Ⱨ:\"H\",Ⱶ:\"H\",Ɥ:\"H\",\"Ⓘ\":\"I\",Ｉ:\"I\",Ì:\"I\",Í:\"I\",Î:\"I\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",İ:\"I\",Ï:\"I\",Ḯ:\"I\",Ỉ:\"I\",Ǐ:\"I\",Ȉ:\"I\",Ȋ:\"I\",Ị:\"I\",Į:\"I\",Ḭ:\"I\",Ɨ:\"I\",\"Ⓙ\":\"J\",Ｊ:\"J\",Ĵ:\"J\",Ɉ:\"J\",\"Ⓚ\":\"K\",Ｋ:\"K\",Ḱ:\"K\",Ǩ:\"K\",Ḳ:\"K\",Ķ:\"K\",Ḵ:\"K\",Ƙ:\"K\",Ⱪ:\"K\",Ꝁ:\"K\",Ꝃ:\"K\",Ꝅ:\"K\",Ꞣ:\"K\",\"Ⓛ\":\"L\",Ｌ:\"L\",Ŀ:\"L\",Ĺ:\"L\",Ľ:\"L\",Ḷ:\"L\",Ḹ:\"L\",Ļ:\"L\",Ḽ:\"L\",Ḻ:\"L\",Ł:\"L\",Ƚ:\"L\",Ɫ:\"L\",Ⱡ:\"L\",Ꝉ:\"L\",Ꝇ:\"L\",Ꞁ:\"L\",Ǉ:\"LJ\",ǈ:\"Lj\",\"Ⓜ\":\"M\",Ｍ:\"M\",Ḿ:\"M\",Ṁ:\"M\",Ṃ:\"M\",Ɱ:\"M\",Ɯ:\"M\",\"Ⓝ\":\"N\",Ｎ:\"N\",Ǹ:\"N\",Ń:\"N\",Ñ:\"N\",Ṅ:\"N\",Ň:\"N\",Ṇ:\"N\",Ņ:\"N\",Ṋ:\"N\",Ṉ:\"N\",Ƞ:\"N\",Ɲ:\"N\",Ꞑ:\"N\",Ꞥ:\"N\",Ǌ:\"NJ\",ǋ:\"Nj\",\"Ⓞ\":\"O\",Ｏ:\"O\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Ồ:\"O\",Ố:\"O\",Ỗ:\"O\",Ổ:\"O\",Õ:\"O\",Ṍ:\"O\",Ȭ:\"O\",Ṏ:\"O\",Ō:\"O\",Ṑ:\"O\",Ṓ:\"O\",Ŏ:\"O\",Ȯ:\"O\",Ȱ:\"O\",Ö:\"O\",Ȫ:\"O\",Ỏ:\"O\",Ő:\"O\",Ǒ:\"O\",Ȍ:\"O\",Ȏ:\"O\",Ơ:\"O\",Ờ:\"O\",Ớ:\"O\",Ỡ:\"O\",Ở:\"O\",Ợ:\"O\",Ọ:\"O\",Ộ:\"O\",Ǫ:\"O\",Ǭ:\"O\",Ø:\"O\",Ǿ:\"O\",Ɔ:\"O\",Ɵ:\"O\",Ꝋ:\"O\",Ꝍ:\"O\",Œ:\"OE\",Ƣ:\"OI\",Ꝏ:\"OO\",Ȣ:\"OU\",\"Ⓟ\":\"P\",Ｐ:\"P\",Ṕ:\"P\",Ṗ:\"P\",Ƥ:\"P\",Ᵽ:\"P\",Ꝑ:\"P\",Ꝓ:\"P\",Ꝕ:\"P\",\"Ⓠ\":\"Q\",Ｑ:\"Q\",Ꝗ:\"Q\",Ꝙ:\"Q\",Ɋ:\"Q\",\"Ⓡ\":\"R\",Ｒ:\"R\",Ŕ:\"R\",Ṙ:\"R\",Ř:\"R\",Ȑ:\"R\",Ȓ:\"R\",Ṛ:\"R\",Ṝ:\"R\",Ŗ:\"R\",Ṟ:\"R\",Ɍ:\"R\",Ɽ:\"R\",Ꝛ:\"R\",Ꞧ:\"R\",Ꞃ:\"R\",\"Ⓢ\":\"S\",Ｓ:\"S\",ẞ:\"S\",Ś:\"S\",Ṥ:\"S\",Ŝ:\"S\",Ṡ:\"S\",Š:\"S\",Ṧ:\"S\",Ṣ:\"S\",Ṩ:\"S\",Ș:\"S\",Ş:\"S\",Ȿ:\"S\",Ꞩ:\"S\",Ꞅ:\"S\",\"Ⓣ\":\"T\",Ｔ:\"T\",Ṫ:\"T\",Ť:\"T\",Ṭ:\"T\",Ț:\"T\",Ţ:\"T\",Ṱ:\"T\",Ṯ:\"T\",Ŧ:\"T\",Ƭ:\"T\",Ʈ:\"T\",Ⱦ:\"T\",Ꞇ:\"T\",Ꜩ:\"TZ\",\"Ⓤ\":\"U\",Ｕ:\"U\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ũ:\"U\",Ṹ:\"U\",Ū:\"U\",Ṻ:\"U\",Ŭ:\"U\",Ü:\"U\",Ǜ:\"U\",Ǘ:\"U\",Ǖ:\"U\",Ǚ:\"U\",Ủ:\"U\",Ů:\"U\",Ű:\"U\",Ǔ:\"U\",Ȕ:\"U\",Ȗ:\"U\",Ư:\"U\",Ừ:\"U\",Ứ:\"U\",Ữ:\"U\",Ử:\"U\",Ự:\"U\",Ụ:\"U\",Ṳ:\"U\",Ų:\"U\",Ṷ:\"U\",Ṵ:\"U\",Ʉ:\"U\",\"Ⓥ\":\"V\",Ｖ:\"V\",Ṽ:\"V\",Ṿ:\"V\",Ʋ:\"V\",Ꝟ:\"V\",Ʌ:\"V\",Ꝡ:\"VY\",\"Ⓦ\":\"W\",Ｗ:\"W\",Ẁ:\"W\",Ẃ:\"W\",Ŵ:\"W\",Ẇ:\"W\",Ẅ:\"W\",Ẉ:\"W\",Ⱳ:\"W\",\"Ⓧ\":\"X\",Ｘ:\"X\",Ẋ:\"X\",Ẍ:\"X\",\"Ⓨ\":\"Y\",Ｙ:\"Y\",Ỳ:\"Y\",Ý:\"Y\",Ŷ:\"Y\",Ỹ:\"Y\",Ȳ:\"Y\",Ẏ:\"Y\",Ÿ:\"Y\",Ỷ:\"Y\",Ỵ:\"Y\",Ƴ:\"Y\",Ɏ:\"Y\",Ỿ:\"Y\",\"Ⓩ\":\"Z\",Ｚ:\"Z\",Ź:\"Z\",Ẑ:\"Z\",Ż:\"Z\",Ž:\"Z\",Ẓ:\"Z\",Ẕ:\"Z\",Ƶ:\"Z\",Ȥ:\"Z\",Ɀ:\"Z\",Ⱬ:\"Z\",Ꝣ:\"Z\",\"ⓐ\":\"a\",ａ:\"a\",ẚ:\"a\",à:\"a\",á:\"a\",â:\"a\",ầ:\"a\",ấ:\"a\",ẫ:\"a\",ẩ:\"a\",ã:\"a\",ā:\"a\",ă:\"a\",ằ:\"a\",ắ:\"a\",ẵ:\"a\",ẳ:\"a\",ȧ:\"a\",ǡ:\"a\",ä:\"a\",ǟ:\"a\",ả:\"a\",å:\"a\",ǻ:\"a\",ǎ:\"a\",ȁ:\"a\",ȃ:\"a\",ạ:\"a\",ậ:\"a\",ặ:\"a\",ḁ:\"a\",ą:\"a\",ⱥ:\"a\",ɐ:\"a\",ꜳ:\"aa\",æ:\"ae\",ǽ:\"ae\",ǣ:\"ae\",ꜵ:\"ao\",ꜷ:\"au\",ꜹ:\"av\",ꜻ:\"av\",ꜽ:\"ay\",\"ⓑ\":\"b\",ｂ:\"b\",ḃ:\"b\",ḅ:\"b\",ḇ:\"b\",ƀ:\"b\",ƃ:\"b\",ɓ:\"b\",\"ⓒ\":\"c\",ｃ:\"c\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",ç:\"c\",ḉ:\"c\",ƈ:\"c\",ȼ:\"c\",ꜿ:\"c\",ↄ:\"c\",\"ⓓ\":\"d\",ｄ:\"d\",ḋ:\"d\",ď:\"d\",ḍ:\"d\",ḑ:\"d\",ḓ:\"d\",ḏ:\"d\",đ:\"d\",ƌ:\"d\",ɖ:\"d\",ɗ:\"d\",ꝺ:\"d\",ǳ:\"dz\",ǆ:\"dz\",\"ⓔ\":\"e\",ｅ:\"e\",è:\"e\",é:\"e\",ê:\"e\",ề:\"e\",ế:\"e\",ễ:\"e\",ể:\"e\",ẽ:\"e\",ē:\"e\",ḕ:\"e\",ḗ:\"e\",ĕ:\"e\",ė:\"e\",ë:\"e\",ẻ:\"e\",ě:\"e\",ȅ:\"e\",ȇ:\"e\",ẹ:\"e\",ệ:\"e\",ȩ:\"e\",ḝ:\"e\",ę:\"e\",ḙ:\"e\",ḛ:\"e\",ɇ:\"e\",ɛ:\"e\",ǝ:\"e\",\"ⓕ\":\"f\",ｆ:\"f\",ḟ:\"f\",ƒ:\"f\",ꝼ:\"f\",\"ⓖ\":\"g\",ｇ:\"g\",ǵ:\"g\",ĝ:\"g\",ḡ:\"g\",ğ:\"g\",ġ:\"g\",ǧ:\"g\",ģ:\"g\",ǥ:\"g\",ɠ:\"g\",ꞡ:\"g\",ᵹ:\"g\",ꝿ:\"g\",\"ⓗ\":\"h\",ｈ:\"h\",ĥ:\"h\",ḣ:\"h\",ḧ:\"h\",ȟ:\"h\",ḥ:\"h\",ḩ:\"h\",ḫ:\"h\",ẖ:\"h\",ħ:\"h\",ⱨ:\"h\",ⱶ:\"h\",ɥ:\"h\",ƕ:\"hv\",\"ⓘ\":\"i\",ｉ:\"i\",ì:\"i\",í:\"i\",î:\"i\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",ï:\"i\",ḯ:\"i\",ỉ:\"i\",ǐ:\"i\",ȉ:\"i\",ȋ:\"i\",ị:\"i\",į:\"i\",ḭ:\"i\",ɨ:\"i\",ı:\"i\",\"ⓙ\":\"j\",ｊ:\"j\",ĵ:\"j\",ǰ:\"j\",ɉ:\"j\",\"ⓚ\":\"k\",ｋ:\"k\",ḱ:\"k\",ǩ:\"k\",ḳ:\"k\",ķ:\"k\",ḵ:\"k\",ƙ:\"k\",ⱪ:\"k\",ꝁ:\"k\",ꝃ:\"k\",ꝅ:\"k\",ꞣ:\"k\",\"ⓛ\":\"l\",ｌ:\"l\",ŀ:\"l\",ĺ:\"l\",ľ:\"l\",ḷ:\"l\",ḹ:\"l\",ļ:\"l\",ḽ:\"l\",ḻ:\"l\",ſ:\"l\",ł:\"l\",ƚ:\"l\",ɫ:\"l\",ⱡ:\"l\",ꝉ:\"l\",ꞁ:\"l\",ꝇ:\"l\",ǉ:\"lj\",\"ⓜ\":\"m\",ｍ:\"m\",ḿ:\"m\",ṁ:\"m\",ṃ:\"m\",ɱ:\"m\",ɯ:\"m\",\"ⓝ\":\"n\",ｎ:\"n\",ǹ:\"n\",ń:\"n\",ñ:\"n\",ṅ:\"n\",ň:\"n\",ṇ:\"n\",ņ:\"n\",ṋ:\"n\",ṉ:\"n\",ƞ:\"n\",ɲ:\"n\",ŉ:\"n\",ꞑ:\"n\",ꞥ:\"n\",ǌ:\"nj\",\"ⓞ\":\"o\",ｏ:\"o\",ò:\"o\",ó:\"o\",ô:\"o\",ồ:\"o\",ố:\"o\",ỗ:\"o\",ổ:\"o\",õ:\"o\",ṍ:\"o\",ȭ:\"o\",ṏ:\"o\",ō:\"o\",ṑ:\"o\",ṓ:\"o\",ŏ:\"o\",ȯ:\"o\",ȱ:\"o\",ö:\"o\",ȫ:\"o\",ỏ:\"o\",ő:\"o\",ǒ:\"o\",ȍ:\"o\",ȏ:\"o\",ơ:\"o\",ờ:\"o\",ớ:\"o\",ỡ:\"o\",ở:\"o\",ợ:\"o\",ọ:\"o\",ộ:\"o\",ǫ:\"o\",ǭ:\"o\",ø:\"o\",ǿ:\"o\",ɔ:\"o\",ꝋ:\"o\",ꝍ:\"o\",ɵ:\"o\",œ:\"oe\",ƣ:\"oi\",ȣ:\"ou\",ꝏ:\"oo\",\"ⓟ\":\"p\",ｐ:\"p\",ṕ:\"p\",ṗ:\"p\",ƥ:\"p\",ᵽ:\"p\",ꝑ:\"p\",ꝓ:\"p\",ꝕ:\"p\",\"ⓠ\":\"q\",ｑ:\"q\",ɋ:\"q\",ꝗ:\"q\",ꝙ:\"q\",\"ⓡ\":\"r\",ｒ:\"r\",ŕ:\"r\",ṙ:\"r\",ř:\"r\",ȑ:\"r\",ȓ:\"r\",ṛ:\"r\",ṝ:\"r\",ŗ:\"r\",ṟ:\"r\",ɍ:\"r\",ɽ:\"r\",ꝛ:\"r\",ꞧ:\"r\",ꞃ:\"r\",\"ⓢ\":\"s\",ｓ:\"s\",ß:\"s\",ś:\"s\",ṥ:\"s\",ŝ:\"s\",ṡ:\"s\",š:\"s\",ṧ:\"s\",ṣ:\"s\",ṩ:\"s\",ș:\"s\",ş:\"s\",ȿ:\"s\",ꞩ:\"s\",ꞅ:\"s\",ẛ:\"s\",\"ⓣ\":\"t\",ｔ:\"t\",ṫ:\"t\",ẗ:\"t\",ť:\"t\",ṭ:\"t\",ț:\"t\",ţ:\"t\",ṱ:\"t\",ṯ:\"t\",ŧ:\"t\",ƭ:\"t\",ʈ:\"t\",ⱦ:\"t\",ꞇ:\"t\",ꜩ:\"tz\",\"ⓤ\":\"u\",ｕ:\"u\",ù:\"u\",ú:\"u\",û:\"u\",ũ:\"u\",ṹ:\"u\",ū:\"u\",ṻ:\"u\",ŭ:\"u\",ü:\"u\",ǜ:\"u\",ǘ:\"u\",ǖ:\"u\",ǚ:\"u\",ủ:\"u\",ů:\"u\",ű:\"u\",ǔ:\"u\",ȕ:\"u\",ȗ:\"u\",ư:\"u\",ừ:\"u\",ứ:\"u\",ữ:\"u\",ử:\"u\",ự:\"u\",ụ:\"u\",ṳ:\"u\",ų:\"u\",ṷ:\"u\",ṵ:\"u\",ʉ:\"u\",\"ⓥ\":\"v\",ｖ:\"v\",ṽ:\"v\",ṿ:\"v\",ʋ:\"v\",ꝟ:\"v\",ʌ:\"v\",ꝡ:\"vy\",\"ⓦ\":\"w\",ｗ:\"w\",ẁ:\"w\",ẃ:\"w\",ŵ:\"w\",ẇ:\"w\",ẅ:\"w\",ẘ:\"w\",ẉ:\"w\",ⱳ:\"w\",\"ⓧ\":\"x\",ｘ:\"x\",ẋ:\"x\",ẍ:\"x\",\"ⓨ\":\"y\",ｙ:\"y\",ỳ:\"y\",ý:\"y\",ŷ:\"y\",ỹ:\"y\",ȳ:\"y\",ẏ:\"y\",ÿ:\"y\",ỷ:\"y\",ẙ:\"y\",ỵ:\"y\",ƴ:\"y\",ɏ:\"y\",ỿ:\"y\",\"ⓩ\":\"z\",ｚ:\"z\",ź:\"z\",ẑ:\"z\",ż:\"z\",ž:\"z\",ẓ:\"z\",ẕ:\"z\",ƶ:\"z\",ȥ:\"z\",ɀ:\"z\",ⱬ:\"z\",ꝣ:\"z\",Ά:\"Α\",Έ:\"Ε\",Ή:\"Η\",Ί:\"Ι\",Ϊ:\"Ι\",Ό:\"Ο\",Ύ:\"Υ\",Ϋ:\"Υ\",Ώ:\"Ω\",ά:\"α\",έ:\"ε\",ή:\"η\",ί:\"ι\",ϊ:\"ι\",ΐ:\"ι\",ό:\"ο\",ύ:\"υ\",ϋ:\"υ\",ΰ:\"υ\",ώ:\"ω\",ς:\"σ\",\"’\":\"'\"}})),t.define(\"select2/data/base\",[\"../utils\"],(function(e){function t(e,n){t.__super__.constructor.call(this)}return e.Extend(t,e.Observable),t.prototype.current=function(e){throw new Error(\"The `current` method must be defined in child classes.\")},t.prototype.query=function(e,t){throw new Error(\"The `query` method must be defined in child classes.\")},t.prototype.bind=function(e,t){},t.prototype.destroy=function(){},t.prototype.generateResultId=function(t,n){var r=t.id+\"-result-\";return r+=e.generateChars(4),null!=n.id?r+=\"-\"+n.id.toString():r+=\"-\"+e.generateChars(4),r},t})),t.define(\"select2/data/select\",[\"./base\",\"../utils\",\"jquery\"],(function(e,t,n){function r(e,t){this.$element=e,this.options=t,r.__super__.constructor.call(this)}return t.Extend(r,e),r.prototype.current=function(e){var t=[],r=this;this.$element.find(\":selected\").each((function(){var e=n(this),o=r.item(e);t.push(o)})),e(t)},r.prototype.select=function(e){var t=this;if(e.selected=!0,n(e.element).is(\"option\"))return e.element.selected=!0,void this.$element.trigger(\"input\").trigger(\"change\");if(this.$element.prop(\"multiple\"))this.current((function(r){var o=[];(e=[e]).push.apply(e,r);for(var i=0;i<e.length;i++){var s=e[i].id;-1===n.inArray(s,o)&&o.push(s)}t.$element.val(o),t.$element.trigger(\"input\").trigger(\"change\")}));else{var r=e.id;this.$element.val(r),this.$element.trigger(\"input\").trigger(\"change\")}},r.prototype.unselect=function(e){var t=this;if(this.$element.prop(\"multiple\")){if(e.selected=!1,n(e.element).is(\"option\"))return e.element.selected=!1,void this.$element.trigger(\"input\").trigger(\"change\");this.current((function(r){for(var o=[],i=0;i<r.length;i++){var s=r[i].id;s!==e.id&&-1===n.inArray(s,o)&&o.push(s)}t.$element.val(o),t.$element.trigger(\"input\").trigger(\"change\")}))}},r.prototype.bind=function(e,t){var n=this;this.container=e,e.on(\"select\",(function(e){n.select(e.data)})),e.on(\"unselect\",(function(e){n.unselect(e.data)}))},r.prototype.destroy=function(){this.$element.find(\"*\").each((function(){t.RemoveData(this)}))},r.prototype.query=function(e,t){var r=[],o=this;this.$element.children().each((function(){var t=n(this);if(t.is(\"option\")||t.is(\"optgroup\")){var i=o.item(t),s=o.matches(e,i);null!==s&&r.push(s)}})),t({results:r})},r.prototype.addOptions=function(e){t.appendMany(this.$element,e)},r.prototype.option=function(e){var r;e.children?(r=document.createElement(\"optgroup\")).label=e.text:void 0!==(r=document.createElement(\"option\")).textContent?r.textContent=e.text:r.innerText=e.text,void 0!==e.id&&(r.value=e.id),e.disabled&&(r.disabled=!0),e.selected&&(r.selected=!0),e.title&&(r.title=e.title);var o=n(r),i=this._normalizeItem(e);return i.element=r,t.StoreData(r,\"data\",i),o},r.prototype.item=function(e){var r={};if(null!=(r=t.GetData(e[0],\"data\")))return r;if(e.is(\"option\"))r={id:e.val(),text:e.text(),disabled:e.prop(\"disabled\"),selected:e.prop(\"selected\"),title:e.prop(\"title\")};else if(e.is(\"optgroup\")){r={text:e.prop(\"label\"),children:[],title:e.prop(\"title\")};for(var o=e.children(\"option\"),i=[],s=0;s<o.length;s++){var a=n(o[s]),l=this.item(a);i.push(l)}r.children=i}return(r=this._normalizeItem(r)).element=e[0],t.StoreData(e[0],\"data\",r),r},r.prototype._normalizeItem=function(e){e!==Object(e)&&(e={id:e,text:e});var t={selected:!1,disabled:!1};return null!=(e=n.extend({},{text:\"\"},e)).id&&(e.id=e.id.toString()),null!=e.text&&(e.text=e.text.toString()),null==e._resultId&&e.id&&null!=this.container&&(e._resultId=this.generateResultId(this.container,e)),n.extend({},t,e)},r.prototype.matches=function(e,t){return this.options.get(\"matcher\")(e,t)},r})),t.define(\"select2/data/array\",[\"./select\",\"../utils\",\"jquery\"],(function(e,t,n){function r(e,t){this._dataToConvert=t.get(\"data\")||[],r.__super__.constructor.call(this,e,t)}return t.Extend(r,e),r.prototype.bind=function(e,t){r.__super__.bind.call(this,e,t),this.addOptions(this.convertToOptions(this._dataToConvert))},r.prototype.select=function(e){var t=this.$element.find(\"option\").filter((function(t,n){return n.value==e.id.toString()}));0===t.length&&(t=this.option(e),this.addOptions(t)),r.__super__.select.call(this,e)},r.prototype.convertToOptions=function(e){var r=this,o=this.$element.find(\"option\"),i=o.map((function(){return r.item(n(this)).id})).get(),s=[];function a(e){return function(){return n(this).val()==e.id}}for(var l=0;l<e.length;l++){var c=this._normalizeItem(e[l]);if(n.inArray(c.id,i)>=0){var u=o.filter(a(c)),d=this.item(u),h=n.extend(!0,{},c,d),m=this.option(h);u.replaceWith(m)}else{var f=this.option(c);if(c.children){var p=this.convertToOptions(c.children);t.appendMany(f,p)}s.push(f)}}return s},r})),t.define(\"select2/data/ajax\",[\"./array\",\"../utils\",\"jquery\"],(function(e,t,n){function r(e,t){this.ajaxOptions=this._applyDefaults(t.get(\"ajax\")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),r.__super__.constructor.call(this,e,t)}return t.Extend(r,e),r.prototype._applyDefaults=function(e){var t={data:function(e){return n.extend({},e,{q:e.term})},transport:function(e,t,r){var o=n.ajax(e);return o.then(t),o.fail(r),o}};return n.extend({},t,e,!0)},r.prototype.processResults=function(e){return e},r.prototype.query=function(e,t){var r=this;null!=this._request&&(n.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var o=n.extend({type:\"GET\"},this.ajaxOptions);function i(){var i=o.transport(o,(function(o){var i=r.processResults(o,e);r.options.get(\"debug\")&&window.console&&console.error&&(i&&i.results&&n.isArray(i.results)||console.error(\"Select2: The AJAX results did not return an array in the `results` key of the response.\")),t(i)}),(function(){(!(\"status\"in i)||0!==i.status&&\"0\"!==i.status)&&r.trigger(\"results:message\",{message:\"errorLoading\"})}));r._request=i}\"function\"==typeof o.url&&(o.url=o.url.call(this.$element,e)),\"function\"==typeof o.data&&(o.data=o.data.call(this.$element,e)),this.ajaxOptions.delay&&null!=e.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(i,this.ajaxOptions.delay)):i()},r})),t.define(\"select2/data/tags\",[\"jquery\"],(function(e){function t(t,n,r){var o=r.get(\"tags\"),i=r.get(\"createTag\");void 0!==i&&(this.createTag=i);var s=r.get(\"insertTag\");if(void 0!==s&&(this.insertTag=s),t.call(this,n,r),e.isArray(o))for(var a=0;a<o.length;a++){var l=o[a],c=this._normalizeItem(l),u=this.option(c);this.$element.append(u)}}return t.prototype.query=function(e,t,n){var r=this;function o(e,i){for(var s=e.results,a=0;a<s.length;a++){var l=s[a],c=null!=l.children&&!o({results:l.children},!0);if((l.text||\"\").toUpperCase()===(t.term||\"\").toUpperCase()||c)return!i&&(e.data=s,void n(e))}if(i)return!0;var u=r.createTag(t);if(null!=u){var d=r.option(u);d.attr(\"data-select2-tag\",!0),r.addOptions([d]),r.insertTag(s,u)}e.results=s,n(e)}this._removeOldTags(),null!=t.term&&null==t.page?e.call(this,t,o):e.call(this,t,n)},t.prototype.createTag=function(t,n){var r=e.trim(n.term);return\"\"===r?null:{id:r,text:r}},t.prototype.insertTag=function(e,t,n){t.unshift(n)},t.prototype._removeOldTags=function(t){this.$element.find(\"option[data-select2-tag]\").each((function(){this.selected||e(this).remove()}))},t})),t.define(\"select2/data/tokenizer\",[\"jquery\"],(function(e){function t(e,t,n){var r=n.get(\"tokenizer\");void 0!==r&&(this.tokenizer=r),e.call(this,t,n)}return t.prototype.bind=function(e,t,n){e.call(this,t,n),this.$search=t.dropdown.$search||t.selection.$search||n.find(\".select2-search__field\")},t.prototype.query=function(t,n,r){var o=this;function i(t){var n=o._normalizeItem(t);if(!o.$element.find(\"option\").filter((function(){return e(this).val()===n.id})).length){var r=o.option(n);r.attr(\"data-select2-tag\",!0),o._removeOldTags(),o.addOptions([r])}s(n)}function s(e){o.trigger(\"select\",{data:e})}n.term=n.term||\"\";var a=this.tokenizer(n,this.options,i);a.term!==n.term&&(this.$search.length&&(this.$search.val(a.term),this.$search.trigger(\"focus\")),n.term=a.term),t.call(this,n,r)},t.prototype.tokenizer=function(t,n,r,o){for(var i=r.get(\"tokenSeparators\")||[],s=n.term,a=0,l=this.createTag||function(e){return{id:e.term,text:e.term}};a<s.length;){var c=s[a];if(-1!==e.inArray(c,i)){var u=s.substr(0,a),d=l(e.extend({},n,{term:u}));null!=d?(o(d),s=s.substr(a+1)||\"\",a=0):a++}else a++}return{term:s}},t})),t.define(\"select2/data/minimumInputLength\",[],(function(){function e(e,t,n){this.minimumInputLength=n.get(\"minimumInputLength\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||\"\",t.term.length<this.minimumInputLength?this.trigger(\"results:message\",{message:\"inputTooShort\",args:{minimum:this.minimumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e})),t.define(\"select2/data/maximumInputLength\",[],(function(){function e(e,t,n){this.maximumInputLength=n.get(\"maximumInputLength\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||\"\",this.maximumInputLength>0&&t.term.length>this.maximumInputLength?this.trigger(\"results:message\",{message:\"inputTooLong\",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e})),t.define(\"select2/data/maximumSelectionLength\",[],(function(){function e(e,t,n){this.maximumSelectionLength=n.get(\"maximumSelectionLength\"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on(\"select\",(function(){r._checkIfMaximumSelected()}))},e.prototype.query=function(e,t,n){var r=this;this._checkIfMaximumSelected((function(){e.call(r,t,n)}))},e.prototype._checkIfMaximumSelected=function(e,t){var n=this;this.current((function(e){var r=null!=e?e.length:0;n.maximumSelectionLength>0&&r>=n.maximumSelectionLength?n.trigger(\"results:message\",{message:\"maximumSelected\",args:{maximum:n.maximumSelectionLength}}):t&&t()}))},e})),t.define(\"select2/dropdown\",[\"jquery\",\"./utils\"],(function(e,t){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return t.Extend(n,t.Observable),n.prototype.render=function(){var t=e('<span class=\"select2-dropdown\"><span class=\"select2-results\"></span></span>');return t.attr(\"dir\",this.options.get(\"dir\")),this.$dropdown=t,t},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n})),t.define(\"select2/dropdown/search\",[\"jquery\",\"../utils\"],(function(e,t){function n(){}return n.prototype.render=function(t){var n=t.call(this),r=e('<span class=\"select2-search select2-search--dropdown\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></span>');return this.$searchContainer=r,this.$search=r.find(\"input\"),n.prepend(r),n},n.prototype.bind=function(t,n,r){var o=this,i=n.id+\"-results\";t.call(this,n,r),this.$search.on(\"keydown\",(function(e){o.trigger(\"keypress\",e),o._keyUpPrevented=e.isDefaultPrevented()})),this.$search.on(\"input\",(function(t){e(this).off(\"keyup\")})),this.$search.on(\"keyup input\",(function(e){o.handleSearch(e)})),n.on(\"open\",(function(){o.$search.attr(\"tabindex\",0),o.$search.attr(\"aria-controls\",i),o.$search.trigger(\"focus\"),window.setTimeout((function(){o.$search.trigger(\"focus\")}),0)})),n.on(\"close\",(function(){o.$search.attr(\"tabindex\",-1),o.$search.removeAttr(\"aria-controls\"),o.$search.removeAttr(\"aria-activedescendant\"),o.$search.val(\"\"),o.$search.trigger(\"blur\")})),n.on(\"focus\",(function(){n.isOpen()||o.$search.trigger(\"focus\")})),n.on(\"results:all\",(function(e){null!=e.query.term&&\"\"!==e.query.term||(o.showSearch(e)?o.$searchContainer.removeClass(\"select2-search--hide\"):o.$searchContainer.addClass(\"select2-search--hide\"))})),n.on(\"results:focus\",(function(e){e.data._resultId?o.$search.attr(\"aria-activedescendant\",e.data._resultId):o.$search.removeAttr(\"aria-activedescendant\")}))},n.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger(\"query\",{term:t})}this._keyUpPrevented=!1},n.prototype.showSearch=function(e,t){return!0},n})),t.define(\"select2/dropdown/hidePlaceholder\",[],(function(){function e(e,t,n,r){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n,r)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return\"string\"==typeof t&&(t={id:\"\",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),r=t.length-1;r>=0;r--){var o=t[r];this.placeholder.id===o.id&&n.splice(r,1)}return n},e})),t.define(\"select2/dropdown/infiniteScroll\",[\"jquery\"],(function(e){function t(e,t,n,r){this.lastParams={},e.call(this,t,n,r),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return t.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},t.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on(\"query\",(function(e){r.lastParams=e,r.loading=!0})),t.on(\"query:append\",(function(e){r.lastParams=e,r.loading=!0})),this.$results.on(\"scroll\",this.loadMoreIfNeeded.bind(this))},t.prototype.loadMoreIfNeeded=function(){var t=e.contains(document.documentElement,this.$loadingMore[0]);!this.loading&&t&&this.$results.offset().top+this.$results.outerHeight(!1)+50>=this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)&&this.loadMore()},t.prototype.loadMore=function(){this.loading=!0;var t=e.extend({},{page:1},this.lastParams);t.page++,this.trigger(\"query:append\",t)},t.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},t.prototype.createLoadingMore=function(){var t=e('<li class=\"select2-results__option select2-results__option--load-more\"role=\"option\" aria-disabled=\"true\"></li>'),n=this.options.get(\"translations\").get(\"loadingMore\");return t.html(n(this.lastParams)),t},t})),t.define(\"select2/dropdown/attachBody\",[\"jquery\",\"../utils\"],(function(e,t){function n(t,n,r){this.$dropdownParent=e(r.get(\"dropdownParent\")||document.body),t.call(this,n,r)}return n.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on(\"open\",(function(){r._showDropdown(),r._attachPositioningHandler(t),r._bindContainerResultHandlers(t)})),t.on(\"close\",(function(){r._hideDropdown(),r._detachPositioningHandler(t)})),this.$dropdownContainer.on(\"mousedown\",(function(e){e.stopPropagation()}))},n.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},n.prototype.position=function(e,t,n){t.attr(\"class\",n.attr(\"class\")),t.removeClass(\"select2\"),t.addClass(\"select2-container--open\"),t.css({position:\"absolute\",top:-999999}),this.$container=n},n.prototype.render=function(t){var n=e(\"<span></span>\"),r=t.call(this);return n.append(r),this.$dropdownContainer=n,n},n.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},n.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on(\"results:all\",(function(){n._positionDropdown(),n._resizeDropdown()})),t.on(\"results:append\",(function(){n._positionDropdown(),n._resizeDropdown()})),t.on(\"results:message\",(function(){n._positionDropdown(),n._resizeDropdown()})),t.on(\"select\",(function(){n._positionDropdown(),n._resizeDropdown()})),t.on(\"unselect\",(function(){n._positionDropdown(),n._resizeDropdown()})),this._containerResultsHandlersBound=!0}},n.prototype._attachPositioningHandler=function(n,r){var o=this,i=\"scroll.select2.\"+r.id,s=\"resize.select2.\"+r.id,a=\"orientationchange.select2.\"+r.id,l=this.$container.parents().filter(t.hasScroll);l.each((function(){t.StoreData(this,\"select2-scroll-position\",{x:e(this).scrollLeft(),y:e(this).scrollTop()})})),l.on(i,(function(n){var r=t.GetData(this,\"select2-scroll-position\");e(this).scrollTop(r.y)})),e(window).on(i+\" \"+s+\" \"+a,(function(e){o._positionDropdown(),o._resizeDropdown()}))},n.prototype._detachPositioningHandler=function(n,r){var o=\"scroll.select2.\"+r.id,i=\"resize.select2.\"+r.id,s=\"orientationchange.select2.\"+r.id;this.$container.parents().filter(t.hasScroll).off(o),e(window).off(o+\" \"+i+\" \"+s)},n.prototype._positionDropdown=function(){var t=e(window),n=this.$dropdown.hasClass(\"select2-dropdown--above\"),r=this.$dropdown.hasClass(\"select2-dropdown--below\"),o=null,i=this.$container.offset();i.bottom=i.top+this.$container.outerHeight(!1);var s={height:this.$container.outerHeight(!1)};s.top=i.top,s.bottom=i.top+s.height;var a={height:this.$dropdown.outerHeight(!1)},l={top:t.scrollTop(),bottom:t.scrollTop()+t.height()},c=l.top<i.top-a.height,u=l.bottom>i.bottom+a.height,d={left:i.left,top:s.bottom},h=this.$dropdownParent;\"static\"===h.css(\"position\")&&(h=h.offsetParent());var m={top:0,left:0};(e.contains(document.body,h[0])||h[0].isConnected)&&(m=h.offset()),d.top-=m.top,d.left-=m.left,n||r||(o=\"below\"),u||!c||n?!c&&u&&n&&(o=\"below\"):o=\"above\",(\"above\"==o||n&&\"below\"!==o)&&(d.top=s.top-m.top-a.height),null!=o&&(this.$dropdown.removeClass(\"select2-dropdown--below select2-dropdown--above\").addClass(\"select2-dropdown--\"+o),this.$container.removeClass(\"select2-container--below select2-container--above\").addClass(\"select2-container--\"+o)),this.$dropdownContainer.css(d)},n.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+\"px\"};this.options.get(\"dropdownAutoWidth\")&&(e.minWidth=e.width,e.position=\"relative\",e.width=\"auto\"),this.$dropdown.css(e)},n.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},n})),t.define(\"select2/dropdown/minimumResultsForSearch\",[],(function(){function e(t){for(var n=0,r=0;r<t.length;r++){var o=t[r];o.children?n+=e(o.children):n++}return n}function t(e,t,n,r){this.minimumResultsForSearch=n.get(\"minimumResultsForSearch\"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,r)}return t.prototype.showSearch=function(t,n){return!(e(n.data.results)<this.minimumResultsForSearch)&&t.call(this,n)},t})),t.define(\"select2/dropdown/selectOnClose\",[\"../utils\"],(function(e){function t(){}return t.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on(\"close\",(function(e){r._handleSelectOnClose(e)}))},t.prototype._handleSelectOnClose=function(t,n){if(n&&null!=n.originalSelect2Event){var r=n.originalSelect2Event;if(\"select\"===r._type||\"unselect\"===r._type)return}var o=this.getHighlightedResults();if(!(o.length<1)){var i=e.GetData(o[0],\"data\");null!=i.element&&i.element.selected||null==i.element&&i.selected||this.trigger(\"select\",{data:i})}},t})),t.define(\"select2/dropdown/closeOnSelect\",[],(function(){function e(){}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on(\"select\",(function(e){r._selectTriggered(e)})),t.on(\"unselect\",(function(e){r._selectTriggered(e)}))},e.prototype._selectTriggered=function(e,t){var n=t.originalEvent;n&&(n.ctrlKey||n.metaKey)||this.trigger(\"close\",{originalEvent:n,originalSelect2Event:t})},e})),t.define(\"select2/i18n/en\",[],(function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Please delete \"+t+\" character\";return 1!=t&&(n+=\"s\"),n},inputTooShort:function(e){return\"Please enter \"+(e.minimum-e.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(e){var t=\"You can only select \"+e.maximum+\" item\";return 1!=e.maximum&&(t+=\"s\"),t},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"}}})),t.define(\"select2/defaults\",[\"jquery\",\"require\",\"./results\",\"./selection/single\",\"./selection/multiple\",\"./selection/placeholder\",\"./selection/allowClear\",\"./selection/search\",\"./selection/eventRelay\",\"./utils\",\"./translation\",\"./diacritics\",\"./data/select\",\"./data/array\",\"./data/ajax\",\"./data/tags\",\"./data/tokenizer\",\"./data/minimumInputLength\",\"./data/maximumInputLength\",\"./data/maximumSelectionLength\",\"./dropdown\",\"./dropdown/search\",\"./dropdown/hidePlaceholder\",\"./dropdown/infiniteScroll\",\"./dropdown/attachBody\",\"./dropdown/minimumResultsForSearch\",\"./dropdown/selectOnClose\",\"./dropdown/closeOnSelect\",\"./i18n/en\"],(function(e,t,n,r,o,i,s,a,l,c,u,d,h,m,f,p,g,v,y,b,_,w,x,C,k,D,S,A,M){function L(){this.reset()}return L.prototype.apply=function(u){if(null==(u=e.extend(!0,{},this.defaults,u)).dataAdapter){if(null!=u.ajax?u.dataAdapter=f:null!=u.data?u.dataAdapter=m:u.dataAdapter=h,u.minimumInputLength>0&&(u.dataAdapter=c.Decorate(u.dataAdapter,v)),u.maximumInputLength>0&&(u.dataAdapter=c.Decorate(u.dataAdapter,y)),u.maximumSelectionLength>0&&(u.dataAdapter=c.Decorate(u.dataAdapter,b)),u.tags&&(u.dataAdapter=c.Decorate(u.dataAdapter,p)),null==u.tokenSeparators&&null==u.tokenizer||(u.dataAdapter=c.Decorate(u.dataAdapter,g)),null!=u.query){var d=t(u.amdBase+\"compat/query\");u.dataAdapter=c.Decorate(u.dataAdapter,d)}if(null!=u.initSelection){var M=t(u.amdBase+\"compat/initSelection\");u.dataAdapter=c.Decorate(u.dataAdapter,M)}}if(null==u.resultsAdapter&&(u.resultsAdapter=n,null!=u.ajax&&(u.resultsAdapter=c.Decorate(u.resultsAdapter,C)),null!=u.placeholder&&(u.resultsAdapter=c.Decorate(u.resultsAdapter,x)),u.selectOnClose&&(u.resultsAdapter=c.Decorate(u.resultsAdapter,S))),null==u.dropdownAdapter){if(u.multiple)u.dropdownAdapter=_;else{var L=c.Decorate(_,w);u.dropdownAdapter=L}if(0!==u.minimumResultsForSearch&&(u.dropdownAdapter=c.Decorate(u.dropdownAdapter,D)),u.closeOnSelect&&(u.dropdownAdapter=c.Decorate(u.dropdownAdapter,A)),null!=u.dropdownCssClass||null!=u.dropdownCss||null!=u.adaptDropdownCssClass){var E=t(u.amdBase+\"compat/dropdownCss\");u.dropdownAdapter=c.Decorate(u.dropdownAdapter,E)}u.dropdownAdapter=c.Decorate(u.dropdownAdapter,k)}if(null==u.selectionAdapter){if(u.multiple?u.selectionAdapter=o:u.selectionAdapter=r,null!=u.placeholder&&(u.selectionAdapter=c.Decorate(u.selectionAdapter,i)),u.allowClear&&(u.selectionAdapter=c.Decorate(u.selectionAdapter,s)),u.multiple&&(u.selectionAdapter=c.Decorate(u.selectionAdapter,a)),null!=u.containerCssClass||null!=u.containerCss||null!=u.adaptContainerCssClass){var T=t(u.amdBase+\"compat/containerCss\");u.selectionAdapter=c.Decorate(u.selectionAdapter,T)}u.selectionAdapter=c.Decorate(u.selectionAdapter,l)}u.language=this._resolveLanguage(u.language),u.language.push(\"en\");for(var F=[],O=0;O<u.language.length;O++){var B=u.language[O];-1===F.indexOf(B)&&F.push(B)}return u.language=F,u.translations=this._processTranslations(u.language,u.debug),u},L.prototype.reset=function(){function t(e){function t(e){return d[e]||e}return e.replace(/[^\\u0000-\\u007E]/g,t)}function n(r,o){if(\"\"===e.trim(r.term))return o;if(o.children&&o.children.length>0){for(var i=e.extend(!0,{},o),s=o.children.length-1;s>=0;s--)null==n(r,o.children[s])&&i.children.splice(s,1);return i.children.length>0?i:n(r,i)}var a=t(o.text).toUpperCase(),l=t(r.term).toUpperCase();return a.indexOf(l)>-1?o:null}this.defaults={amdBase:\"./\",amdLanguageBase:\"./i18n/\",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:c.escapeMarkup,language:{},matcher:n,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(e){return e},templateResult:function(e){return e.text},templateSelection:function(e){return e.text},theme:\"default\",width:\"resolve\"}},L.prototype.applyFromElement=function(e,t){var n=e.language,r=this.defaults.language,o=t.prop(\"lang\"),i=t.closest(\"[lang]\").prop(\"lang\"),s=Array.prototype.concat.call(this._resolveLanguage(o),this._resolveLanguage(n),this._resolveLanguage(r),this._resolveLanguage(i));return e.language=s,e},L.prototype._resolveLanguage=function(t){if(!t)return[];if(e.isEmptyObject(t))return[];if(e.isPlainObject(t))return[t];var n;n=e.isArray(t)?t:[t];for(var r=[],o=0;o<n.length;o++)if(r.push(n[o]),\"string\"==typeof n[o]&&n[o].indexOf(\"-\")>0){var i=n[o].split(\"-\")[0];r.push(i)}return r},L.prototype._processTranslations=function(t,n){for(var r=new u,o=0;o<t.length;o++){var i=new u,s=t[o];if(\"string\"==typeof s)try{i=u.loadPath(s)}catch(e){try{s=this.defaults.amdLanguageBase+s,i=u.loadPath(s)}catch(e){n&&window.console&&console.warn&&console.warn('Select2: The language file for \"'+s+'\" could not be automatically loaded. A fallback will be used instead.')}}else i=e.isPlainObject(s)?new u(s):s;r.extend(i)}return r},L.prototype.set=function(t,n){var r={};r[e.camelCase(t)]=n;var o=c._convertData(r);e.extend(!0,this.defaults,o)},new L})),t.define(\"select2/options\",[\"require\",\"jquery\",\"./defaults\",\"./utils\"],(function(e,t,n,r){function o(t,o){if(this.options=t,null!=o&&this.fromElement(o),null!=o&&(this.options=n.applyFromElement(this.options,o)),this.options=n.apply(this.options),o&&o.is(\"input\")){var i=e(this.get(\"amdBase\")+\"compat/inputData\");this.options.dataAdapter=r.Decorate(this.options.dataAdapter,i)}}return o.prototype.fromElement=function(e){var n=[\"select2\"];null==this.options.multiple&&(this.options.multiple=e.prop(\"multiple\")),null==this.options.disabled&&(this.options.disabled=e.prop(\"disabled\")),null==this.options.dir&&(e.prop(\"dir\")?this.options.dir=e.prop(\"dir\"):e.closest(\"[dir]\").prop(\"dir\")?this.options.dir=e.closest(\"[dir]\").prop(\"dir\"):this.options.dir=\"ltr\"),e.prop(\"disabled\",this.options.disabled),e.prop(\"multiple\",this.options.multiple),r.GetData(e[0],\"select2Tags\")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags=\"true\"` attributes and will be removed in future versions of Select2.'),r.StoreData(e[0],\"data\",r.GetData(e[0],\"select2Tags\")),r.StoreData(e[0],\"tags\",!0)),r.GetData(e[0],\"ajaxUrl\")&&(this.options.debug&&window.console&&console.warn&&console.warn(\"Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2.\"),e.attr(\"ajax--url\",r.GetData(e[0],\"ajaxUrl\")),r.StoreData(e[0],\"ajax-Url\",r.GetData(e[0],\"ajaxUrl\")));var o={};function i(e,t){return t.toUpperCase()}for(var s=0;s<e[0].attributes.length;s++){var a=e[0].attributes[s].name,l=\"data-\";if(a.substr(0,l.length)==l){var c=a.substring(l.length),u=r.GetData(e[0],c);o[c.replace(/-([a-z])/g,i)]=u}}t.fn.jquery&&\"1.\"==t.fn.jquery.substr(0,2)&&e[0].dataset&&(o=t.extend(!0,{},e[0].dataset,o));var d=t.extend(!0,{},r.GetData(e[0]),o);for(var h in d=r._convertData(d))t.inArray(h,n)>-1||(t.isPlainObject(this.options[h])?t.extend(this.options[h],d[h]):this.options[h]=d[h]);return this},o.prototype.get=function(e){return this.options[e]},o.prototype.set=function(e,t){this.options[e]=t},o})),t.define(\"select2/core\",[\"jquery\",\"./options\",\"./utils\",\"./keys\"],(function(e,t,n,r){var o=function(e,r){null!=n.GetData(e[0],\"select2\")&&n.GetData(e[0],\"select2\").destroy(),this.$element=e,this.id=this._generateId(e),r=r||{},this.options=new t(r,e),o.__super__.constructor.call(this);var i=e.attr(\"tabindex\")||0;n.StoreData(e[0],\"old-tabindex\",i),e.attr(\"tabindex\",\"-1\");var s=this.options.get(\"dataAdapter\");this.dataAdapter=new s(e,this.options);var a=this.render();this._placeContainer(a);var l=this.options.get(\"selectionAdapter\");this.selection=new l(e,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,a);var c=this.options.get(\"dropdownAdapter\");this.dropdown=new c(e,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,a);var u=this.options.get(\"resultsAdapter\");this.results=new u(e,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var d=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current((function(e){d.trigger(\"selection:update\",{data:e})})),e.addClass(\"select2-hidden-accessible\"),e.attr(\"aria-hidden\",\"true\"),this._syncAttributes(),n.StoreData(e[0],\"select2\",this),e.data(\"select2\",this)};return n.Extend(o,n.Observable),o.prototype._generateId=function(e){return\"select2-\"+(null!=e.attr(\"id\")?e.attr(\"id\"):null!=e.attr(\"name\")?e.attr(\"name\")+\"-\"+n.generateChars(2):n.generateChars(4)).replace(/(:|\\.|\\[|\\]|,)/g,\"\")},o.prototype._placeContainer=function(e){e.insertAfter(this.$element);var t=this._resolveWidth(this.$element,this.options.get(\"width\"));null!=t&&e.css(\"width\",t)},o.prototype._resolveWidth=function(e,t){var n=/^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if(\"resolve\"==t){var r=this._resolveWidth(e,\"style\");return null!=r?r:this._resolveWidth(e,\"element\")}if(\"element\"==t){var o=e.outerWidth(!1);return o<=0?\"auto\":o+\"px\"}if(\"style\"==t){var i=e.attr(\"style\");if(\"string\"!=typeof i)return null;for(var s=i.split(\";\"),a=0,l=s.length;a<l;a+=1){var c=s[a].replace(/\\s/g,\"\").match(n);if(null!==c&&c.length>=1)return c[1]}return null}return\"computedstyle\"==t?window.getComputedStyle(e[0]).width:t},o.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},o.prototype._registerDomEvents=function(){var e=this;this.$element.on(\"change.select2\",(function(){e.dataAdapter.current((function(t){e.trigger(\"selection:update\",{data:t})}))})),this.$element.on(\"focus.select2\",(function(t){e.trigger(\"focus\",t)})),this._syncA=n.bind(this._syncAttributes,this),this._syncS=n.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent(\"onpropertychange\",this._syncA);var t=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=t?(this._observer=new t((function(t){e._syncA(),e._syncS(null,t)})),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener(\"DOMAttrModified\",e._syncA,!1),this.$element[0].addEventListener(\"DOMNodeInserted\",e._syncS,!1),this.$element[0].addEventListener(\"DOMNodeRemoved\",e._syncS,!1))},o.prototype._registerDataEvents=function(){var e=this;this.dataAdapter.on(\"*\",(function(t,n){e.trigger(t,n)}))},o.prototype._registerSelectionEvents=function(){var t=this,n=[\"toggle\",\"focus\"];this.selection.on(\"toggle\",(function(){t.toggleDropdown()})),this.selection.on(\"focus\",(function(e){t.focus(e)})),this.selection.on(\"*\",(function(r,o){-1===e.inArray(r,n)&&t.trigger(r,o)}))},o.prototype._registerDropdownEvents=function(){var e=this;this.dropdown.on(\"*\",(function(t,n){e.trigger(t,n)}))},o.prototype._registerResultsEvents=function(){var e=this;this.results.on(\"*\",(function(t,n){e.trigger(t,n)}))},o.prototype._registerEvents=function(){var e=this;this.on(\"open\",(function(){e.$container.addClass(\"select2-container--open\")})),this.on(\"close\",(function(){e.$container.removeClass(\"select2-container--open\")})),this.on(\"enable\",(function(){e.$container.removeClass(\"select2-container--disabled\")})),this.on(\"disable\",(function(){e.$container.addClass(\"select2-container--disabled\")})),this.on(\"blur\",(function(){e.$container.removeClass(\"select2-container--focus\")})),this.on(\"query\",(function(t){e.isOpen()||e.trigger(\"open\",{}),this.dataAdapter.query(t,(function(n){e.trigger(\"results:all\",{data:n,query:t})}))})),this.on(\"query:append\",(function(t){this.dataAdapter.query(t,(function(n){e.trigger(\"results:append\",{data:n,query:t})}))})),this.on(\"keypress\",(function(t){var n=t.which;e.isOpen()?n===r.ESC||n===r.TAB||n===r.UP&&t.altKey?(e.close(t),t.preventDefault()):n===r.ENTER?(e.trigger(\"results:select\",{}),t.preventDefault()):n===r.SPACE&&t.ctrlKey?(e.trigger(\"results:toggle\",{}),t.preventDefault()):n===r.UP?(e.trigger(\"results:previous\",{}),t.preventDefault()):n===r.DOWN&&(e.trigger(\"results:next\",{}),t.preventDefault()):(n===r.ENTER||n===r.SPACE||n===r.DOWN&&t.altKey)&&(e.open(),t.preventDefault())}))},o.prototype._syncAttributes=function(){this.options.set(\"disabled\",this.$element.prop(\"disabled\")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger(\"disable\",{})):this.trigger(\"enable\",{})},o.prototype._isChangeMutation=function(t,n){var r=!1,o=this;if(!t||!t.target||\"OPTION\"===t.target.nodeName||\"OPTGROUP\"===t.target.nodeName){if(n)if(n.addedNodes&&n.addedNodes.length>0)for(var i=0;i<n.addedNodes.length;i++)n.addedNodes[i].selected&&(r=!0);else n.removedNodes&&n.removedNodes.length>0?r=!0:e.isArray(n)&&e.each(n,(function(e,t){if(o._isChangeMutation(e,t))return r=!0,!1}));else r=!0;return r}},o.prototype._syncSubtree=function(e,t){var n=this._isChangeMutation(e,t),r=this;n&&this.dataAdapter.current((function(e){r.trigger(\"selection:update\",{data:e})}))},o.prototype.trigger=function(e,t){var n=o.__super__.trigger,r={open:\"opening\",close:\"closing\",select:\"selecting\",unselect:\"unselecting\",clear:\"clearing\"};if(void 0===t&&(t={}),e in r){var i=r[e],s={prevented:!1,name:e,args:t};if(n.call(this,i,s),s.prevented)return void(t.prevented=!0)}n.call(this,e,t)},o.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},o.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger(\"query\",{})},o.prototype.close=function(e){this.isOpen()&&this.trigger(\"close\",{originalEvent:e})},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get(\"disabled\")},o.prototype.isOpen=function(){return this.$container.hasClass(\"select2-container--open\")},o.prototype.hasFocus=function(){return this.$container.hasClass(\"select2-container--focus\")},o.prototype.focus=function(e){this.hasFocus()||(this.$container.addClass(\"select2-container--focus\"),this.trigger(\"focus\",{}))},o.prototype.enable=function(e){this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop(\"disabled\") instead.'),null!=e&&0!==e.length||(e=[!0]);var t=!e[0];this.$element.prop(\"disabled\",t)},o.prototype.data=function(){this.options.get(\"debug\")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You should consider setting the value instead using `$element.val()`.');var e=[];return this.dataAdapter.current((function(t){e=t})),e},o.prototype.val=function(t){if(this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"val\")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==t||0===t.length)return this.$element.val();var n=t[0];e.isArray(n)&&(n=e.map(n,(function(e){return e.toString()}))),this.$element.val(n).trigger(\"input\").trigger(\"change\")},o.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent(\"onpropertychange\",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener(\"DOMAttrModified\",this._syncA,!1),this.$element[0].removeEventListener(\"DOMNodeInserted\",this._syncS,!1),this.$element[0].removeEventListener(\"DOMNodeRemoved\",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(\".select2\"),this.$element.attr(\"tabindex\",n.GetData(this.$element[0],\"old-tabindex\")),this.$element.removeClass(\"select2-hidden-accessible\"),this.$element.attr(\"aria-hidden\",\"false\"),n.RemoveData(this.$element[0]),this.$element.removeData(\"select2\"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},o.prototype.render=function(){var t=e('<span class=\"select2 select2-container\"><span class=\"selection\"></span><span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span></span>');return t.attr(\"dir\",this.options.get(\"dir\")),this.$container=t,this.$container.addClass(\"select2-container--\"+this.options.get(\"theme\")),n.StoreData(t[0],\"element\",this.$element),t},o})),t.define(\"jquery-mousewheel\",[\"jquery\"],(function(e){return e})),t.define(\"jquery.select2\",[\"jquery\",\"jquery-mousewheel\",\"./select2/core\",\"./select2/defaults\",\"./select2/utils\"],(function(e,t,n,r,o){if(null==e.fn.select2){var i=[\"open\",\"close\",\"destroy\"];e.fn.select2=function(t){if(\"object\"==typeof(t=t||{}))return this.each((function(){var r=e.extend(!0,{},t);new n(e(this),r)})),this;if(\"string\"==typeof t){var r,s=Array.prototype.slice.call(arguments,1);return this.each((function(){var e=o.GetData(this,\"select2\");null==e&&window.console&&console.error&&console.error(\"The select2('\"+t+\"') method was called on an element that is not using Select2.\"),r=e[t].apply(e,s)})),e.inArray(t,i)>-1?this:r}throw new Error(\"Invalid arguments for Select2: \"+t)}}return null==e.fn.select2.defaults&&(e.fn.select2.defaults=r),n})),{define:t.define,require:t.require}}(),n=t.require(\"jquery.select2\");return e.fn.select2.amd=t,n},void 0===(i=\"function\"==typeof r?r.apply(t,o):r)||(e.exports=i)},8190:(e,t,n)=>{n(7440)},7440:()=>{!function(){\"use strict\";var e=tinymce.util.Tools.resolve(\"tinymce.PluginManager\");e.add(\"code\",(e=>((e=>{e.addCommand(\"mceCodeEditor\",(()=>{(e=>{const t=(e=>e.getContent({source_view:!0}))(e);e.windowManager.open({title:\"Source Code\",size:\"large\",body:{type:\"panel\",items:[{type:\"textarea\",name:\"code\"}]},buttons:[{type:\"cancel\",name:\"cancel\",text:\"Cancel\"},{type:\"submit\",name:\"save\",text:\"Save\",primary:!0}],initialData:{code:t},onSubmit:t=>{((e,t)=>{e.focus(),e.undoManager.transact((()=>{e.setContent(t)})),e.selection.setCursorLocation(),e.nodeChanged()})(e,t.getData().code),t.close()}})})(e)}))})(e),(e=>{const t=()=>e.execCommand(\"mceCodeEditor\");e.ui.registry.addButton(\"code\",{icon:\"sourcecode\",tooltip:\"Source code\",onAction:t}),e.ui.registry.addMenuItem(\"code\",{icon:\"sourcecode\",text:\"Source code\",onAction:t})})(e),{})))}()},2170:(e,t,n)=>{n(3302)},3302:()=>{!function(){\"use strict\";var e=tinymce.util.Tools.resolve(\"tinymce.PluginManager\");const t=Object.getPrototypeOf,n=(e,t,n)=>{var r;return!!n(e,t.prototype)||(null===(r=e.constructor)||void 0===r?void 0:r.name)===t.name},r=e=>t=>(e=>{const t=typeof e;return null===e?\"null\":\"object\"===t&&Array.isArray(e)?\"array\":\"object\"===t&&n(e,String,((e,t)=>t.isPrototypeOf(e)))?\"string\":t})(t)===e,o=e=>t=>typeof t===e,i=r(\"string\"),s=r(\"object\"),a=e=>((e,r)=>s(e)&&n(e,r,((e,n)=>t(e)===n)))(e,Object),l=r(\"array\"),c=(u=null,e=>u===e);var u;const d=o(\"boolean\"),h=e=>!(e=>null==e)(e),m=o(\"function\"),f=o(\"number\"),p=()=>{};class g{constructor(e,t){this.tag=e,this.value=t}static some(e){return new g(!0,e)}static none(){return g.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?g.some(e(this.value)):g.none()}bind(e){return this.tag?e(this.value):g.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:g.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:\"Called getOrDie on None\")}static from(e){return h(e)?g.some(e):g.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:\"none()\"}}g.singletonNone=new g(!1);const v=Object.keys,y=Object.hasOwnProperty,b=(e,t,n,r)=>{((e,t)=>{const n=v(e);for(let r=0,o=n.length;r<o;r++){const o=n[r];t(e[o],o)}})(e,((e,o)=>{(t(e,o)?n:r)(e,o)}))},_=(e,t)=>y.call(e,t),w=Array.prototype.push,x=e=>{const t=[];for(let n=0,r=e.length;n<r;++n){if(!l(e[n]))throw new Error(\"Arr.flatten item \"+n+\" was not an array, input: \"+e);w.apply(t,e[n])}return t},C=e=>((e,t)=>t>=0&&t<e.length?g.some(e[t]):g.none())(e,0);\"undefined\"!=typeof window?window:Function(\"return this;\")();const k=(e,t,n)=>{((e,t,n)=>{if(!(i(n)||d(n)||f(n)))throw console.error(\"Invalid call to Attribute.set. Key \",t,\":: Value \",n,\":: Element \",e),new Error(\"Attribute value was not simple\");e.setAttribute(t,n+\"\")})(e.dom,t,n)},D=e=>{if(null==e)throw new Error(\"Node cannot be null or undefined\");return{dom:e}},S={fromHtml:(e,t)=>{const n=(t||document).createElement(\"div\");if(n.innerHTML=e,!n.hasChildNodes()||n.childNodes.length>1){const t=\"HTML does not have a single root node\";throw console.error(t,e),new Error(t)}return D(n.childNodes[0])},fromTag:(e,t)=>{const n=(t||document).createElement(e);return D(n)},fromText:(e,t)=>{const n=(t||document).createTextNode(e);return D(n)},fromDom:D,fromPoint:(e,t,n)=>g.from(e.dom.elementFromPoint(t,n)).map(D)};var A=tinymce.util.Tools.resolve(\"tinymce.dom.DOMUtils\"),M=tinymce.util.Tools.resolve(\"tinymce.util.URI\");const L=e=>e.length>0,E=e=>t=>t.options.get(e),T=e=>{const t=e.options.register;t(\"image_dimensions\",{processor:\"boolean\",default:!0}),t(\"image_advtab\",{processor:\"boolean\",default:!1}),t(\"image_uploadtab\",{processor:\"boolean\",default:!0}),t(\"image_prepend_url\",{processor:\"string\",default:\"\"}),t(\"image_class_list\",{processor:\"object[]\"}),t(\"image_description\",{processor:\"boolean\",default:!0}),t(\"image_title\",{processor:\"boolean\",default:!1}),t(\"image_caption\",{processor:\"boolean\",default:!1}),t(\"image_list\",{processor:e=>{const t=!1===e||i(e)||((e,t)=>{if(l(e)){for(let n=0,r=e.length;n<r;++n)if(!t(e[n]))return!1;return!0}return!1})(e,s)||m(e);return t?{value:e,valid:t}:{valid:!1,message:\"Must be false, a string, an array or a function.\"}},default:!1})},F=E(\"image_dimensions\"),O=E(\"image_advtab\"),B=E(\"image_uploadtab\"),R=E(\"image_prepend_url\"),$=E(\"image_class_list\"),N=E(\"image_description\"),Y=E(\"image_title\"),P=E(\"image_caption\"),I=E(\"image_list\"),H=E(\"a11y_advanced_options\"),j=E(\"automatic_uploads\"),W=(e,t)=>Math.max(parseInt(e,10),parseInt(t,10)),z=e=>(e&&(e=e.replace(/px$/,\"\")),e),U=e=>(e.length>0&&/^[0-9]+$/.test(e)&&(e+=\"px\"),e),V=e=>\"IMG\"===e.nodeName&&(e.hasAttribute(\"data-mce-object\")||e.hasAttribute(\"data-mce-placeholder\")),q=(e,t)=>{const n=e.options.get;return M.isDomSafe(t,\"img\",{allow_html_data_urls:n(\"allow_html_data_urls\"),allow_script_urls:n(\"allow_script_urls\"),allow_svg_data_urls:n(\"allow_svg_data_urls\")})},G=A.DOM,K=e=>e.style.marginLeft&&e.style.marginRight&&e.style.marginLeft===e.style.marginRight?z(e.style.marginLeft):\"\",X=e=>e.style.marginTop&&e.style.marginBottom&&e.style.marginTop===e.style.marginBottom?z(e.style.marginTop):\"\",J=e=>e.style.borderWidth?z(e.style.borderWidth):\"\",Q=(e,t)=>{var n;return e.hasAttribute(t)&&null!==(n=e.getAttribute(t))&&void 0!==n?n:\"\"},Z=e=>null!==e.parentNode&&\"FIGURE\"===e.parentNode.nodeName,ee=(e,t,n)=>{\"\"===n||null===n?e.removeAttribute(t):e.setAttribute(t,n)},te=e=>{Z(e)?(e=>{const t=e.parentNode;h(t)&&(G.insertAfter(e,t),G.remove(t))})(e):(e=>{const t=G.create(\"figure\",{class:\"image\"});G.insertAfter(t,e),t.appendChild(e),t.appendChild(G.create(\"figcaption\",{contentEditable:\"true\"},\"Caption\")),t.contentEditable=\"false\"})(e)},ne=(e,t)=>{const n=e.getAttribute(\"style\"),r=t(null!==n?n:\"\");r.length>0?(e.setAttribute(\"style\",r),e.setAttribute(\"data-mce-style\",r)):e.removeAttribute(\"style\")},re=(e,t)=>(e,n,r)=>{const o=e.style;o[n]?(o[n]=U(r),ne(e,t)):ee(e,n,r)},oe=(e,t)=>e.style[t]?z(e.style[t]):Q(e,t),ie=(e,t)=>{const n=U(t);e.style.marginLeft=n,e.style.marginRight=n},se=(e,t)=>{const n=U(t);e.style.marginTop=n,e.style.marginBottom=n},ae=(e,t)=>{const n=U(t);e.style.borderWidth=n},le=(e,t)=>{e.style.borderStyle=t},ce=e=>{var t;return null!==(t=e.style.borderStyle)&&void 0!==t?t:\"\"},ue=e=>h(e)&&\"FIGURE\"===e.nodeName,de=e=>0===G.getAttrib(e,\"alt\").length&&\"presentation\"===G.getAttrib(e,\"role\"),he=e=>de(e)?\"\":Q(e,\"alt\"),me=(e,t)=>{var n;const r=document.createElement(\"img\");return ee(r,\"style\",t.style),(K(r)||\"\"!==t.hspace)&&ie(r,t.hspace),(X(r)||\"\"!==t.vspace)&&se(r,t.vspace),(J(r)||\"\"!==t.border)&&ae(r,t.border),(ce(r)||\"\"!==t.borderStyle)&&le(r,t.borderStyle),e(null!==(n=r.getAttribute(\"style\"))&&void 0!==n?n:\"\")},fe=(e,t)=>({src:Q(t,\"src\"),alt:he(t),title:Q(t,\"title\"),width:oe(t,\"width\"),height:oe(t,\"height\"),class:Q(t,\"class\"),style:e(Q(t,\"style\")),caption:Z(t),hspace:K(t),vspace:X(t),border:J(t),borderStyle:ce(t),isDecorative:de(t)}),pe=(e,t,n,r,o)=>{n[r]!==t[r]&&o(e,r,String(n[r]))},ge=(e,t,n)=>{if(n){G.setAttrib(e,\"role\",\"presentation\");const t=S.fromDom(e);k(t,\"alt\",\"\")}else{if(c(t)){const t=S.fromDom(e);r=\"alt\",t.dom.removeAttribute(r)}else{const n=S.fromDom(e);k(n,\"alt\",t)}\"presentation\"===G.getAttrib(e,\"role\")&&G.setAttrib(e,\"role\",\"\")}var r},ve=(e,t)=>(n,r,o)=>{e(n,o),ne(n,t)},ye=(e,t,n)=>{const r=fe(e,n);pe(n,r,t,\"caption\",((e,t,n)=>te(e))),pe(n,r,t,\"src\",ee),pe(n,r,t,\"title\",ee),pe(n,r,t,\"width\",re(0,e)),pe(n,r,t,\"height\",re(0,e)),pe(n,r,t,\"class\",ee),pe(n,r,t,\"style\",ve(((e,t)=>ee(e,\"style\",t)),e)),pe(n,r,t,\"hspace\",ve(ie,e)),pe(n,r,t,\"vspace\",ve(se,e)),pe(n,r,t,\"border\",ve(ae,e)),pe(n,r,t,\"borderStyle\",ve(le,e)),((e,t,n)=>{n.alt===t.alt&&n.isDecorative===t.isDecorative||ge(e,n.alt,n.isDecorative)})(n,r,t)},be=(e,t)=>{const n=(e=>{if(e.margin){const t=String(e.margin).split(\" \");switch(t.length){case 1:e[\"margin-top\"]=e[\"margin-top\"]||t[0],e[\"margin-right\"]=e[\"margin-right\"]||t[0],e[\"margin-bottom\"]=e[\"margin-bottom\"]||t[0],e[\"margin-left\"]=e[\"margin-left\"]||t[0];break;case 2:e[\"margin-top\"]=e[\"margin-top\"]||t[0],e[\"margin-right\"]=e[\"margin-right\"]||t[1],e[\"margin-bottom\"]=e[\"margin-bottom\"]||t[0],e[\"margin-left\"]=e[\"margin-left\"]||t[1];break;case 3:e[\"margin-top\"]=e[\"margin-top\"]||t[0],e[\"margin-right\"]=e[\"margin-right\"]||t[1],e[\"margin-bottom\"]=e[\"margin-bottom\"]||t[2],e[\"margin-left\"]=e[\"margin-left\"]||t[1];break;case 4:e[\"margin-top\"]=e[\"margin-top\"]||t[0],e[\"margin-right\"]=e[\"margin-right\"]||t[1],e[\"margin-bottom\"]=e[\"margin-bottom\"]||t[2],e[\"margin-left\"]=e[\"margin-left\"]||t[3]}delete e.margin}return e})(e.dom.styles.parse(t)),r=e.dom.styles.parse(e.dom.styles.serialize(n));return e.dom.styles.serialize(r)},_e=e=>{const t=e.selection.getNode(),n=e.dom.getParent(t,\"figure.image\");return n?e.dom.select(\"img\",n)[0]:t&&(\"IMG\"!==t.nodeName||V(t))?null:t},we=(e,t)=>{var n;const r=e.dom,o=((e,t)=>{const n={};var r;return b(e,t,(r=n,(e,t)=>{r[t]=e}),p),n})(e.schema.getTextBlockElements(),((t,n)=>!e.schema.isValidChild(n,\"figure\"))),i=r.getParent(t.parentNode,(e=>{return t=o,n=e.nodeName,_(t,n)&&void 0!==t[n]&&null!==t[n];var t,n}),e.getBody());return i&&null!==(n=r.split(i,t))&&void 0!==n?n:t},xe=(e,t)=>{const n=((e,t)=>{const n=document.createElement(\"img\");if(ye(e,{...t,caption:!1},n),ge(n,t.alt,t.isDecorative),t.caption){const e=G.create(\"figure\",{class:\"image\"});return e.appendChild(n),e.appendChild(G.create(\"figcaption\",{contentEditable:\"true\"},\"Caption\")),e.contentEditable=\"false\",e}return n})((t=>be(e,t)),t);e.dom.setAttrib(n,\"data-mce-id\",\"__mcenew\"),e.focus(),e.selection.setContent(n.outerHTML);const r=e.dom.select('*[data-mce-id=\"__mcenew\"]')[0];if(e.dom.setAttrib(r,\"data-mce-id\",null),ue(r)){const t=we(e,r);e.selection.select(t)}else e.selection.select(r)},Ce=(e,t)=>{const n=_e(e);if(n)if(ye((t=>be(e,t)),t,n),((e,t)=>{e.dom.setAttrib(t,\"src\",t.getAttribute(\"src\"))})(e,n),ue(n.parentNode)){const t=n.parentNode;we(e,t),e.selection.select(n.parentNode)}else e.selection.select(n),((e,t,n)=>{const r=()=>{n.onload=n.onerror=null,e.selection&&(e.selection.select(n),e.nodeChanged())};n.onload=()=>{t.width||t.height||!F(e)||e.dom.setAttribs(n,{width:String(n.clientWidth),height:String(n.clientHeight)}),r()},n.onerror=r})(e,t,n)},ke=(e,t)=>{const n=_e(e);if(n){const r={...fe((t=>be(e,t)),n),...t},o=((e,t)=>{const n=t.src;return{...t,src:q(e,n)?n:\"\"}})(e,r);r.src?Ce(e,o):((e,t)=>{if(t){const n=e.dom.is(t.parentNode,\"figure.image\")?t.parentNode:t;e.dom.remove(n),e.focus(),e.nodeChanged(),e.dom.isEmpty(e.getBody())&&(e.setContent(\"\"),e.selection.setCursorLocation())}})(e,n)}else t.src&&xe(e,{src:\"\",alt:\"\",title:\"\",width:\"\",height:\"\",class:\"\",style:\"\",caption:!1,hspace:\"\",vspace:\"\",border:\"\",borderStyle:\"\",isDecorative:!1,...t})},De=(Se=(e,t)=>a(e)&&a(t)?De(e,t):t,(...e)=>{if(0===e.length)throw new Error(\"Can't merge zero objects\");const t={};for(let n=0;n<e.length;n++){const r=e[n];for(const e in r)_(r,e)&&(t[e]=Se(t[e],r[e]))}return t});var Se,Ae=tinymce.util.Tools.resolve(\"tinymce.util.ImageUploader\"),Me=tinymce.util.Tools.resolve(\"tinymce.util.Tools\");const Le=e=>i(e.value)?e.value:\"\",Ee=(e,t)=>{const n=[];return Me.each(e,(e=>{const r=(e=>i(e.text)?e.text:i(e.title)?e.title:\"\")(e);if(void 0!==e.menu){const o=Ee(e.menu,t);n.push({text:r,items:o})}else{const o=t(e);n.push({text:r,value:o})}})),n},Te=(e=Le)=>t=>t?g.from(t).map((t=>Ee(t,e))):g.none(),Fe=(e,t)=>((e,t)=>{for(let n=0;n<e.length;n++){const r=t(e[n],n);if(r.isSome())return r}return g.none()})(e,(e=>(e=>_(e,\"items\"))(e)?Fe(e.items,t):e.value===t?g.some(e):g.none())),Oe=Te,Be=e=>Te(Le)(e),Re=(e,t)=>e.bind((e=>Fe(e,t))),$e=e=>({title:\"Advanced\",name:\"advanced\",items:[{type:\"grid\",columns:2,items:[{type:\"input\",label:\"Vertical space\",name:\"vspace\",inputMode:\"numeric\"},{type:\"input\",label:\"Horizontal space\",name:\"hspace\",inputMode:\"numeric\"},{type:\"input\",label:\"Border width\",name:\"border\",inputMode:\"numeric\"},{type:\"listbox\",name:\"borderstyle\",label:\"Border style\",items:[{text:\"Select...\",value:\"\"},{text:\"Solid\",value:\"solid\"},{text:\"Dotted\",value:\"dotted\"},{text:\"Dashed\",value:\"dashed\"},{text:\"Double\",value:\"double\"},{text:\"Groove\",value:\"groove\"},{text:\"Ridge\",value:\"ridge\"},{text:\"Inset\",value:\"inset\"},{text:\"Outset\",value:\"outset\"},{text:\"None\",value:\"none\"},{text:\"Hidden\",value:\"hidden\"}]}]}]}),Ne=e=>{const t=Oe((t=>e.convertURL(t.value||t.url||\"\",\"src\"))),n=new Promise((n=>{((e,t)=>{const n=I(e);i(n)?fetch(n).then((e=>{e.ok&&e.json().then(t)})):m(n)?n(t):t(n)})(e,(e=>{n(t(e).map((e=>x([[{text:\"None\",value:\"\"}],e]))))}))})),r=Be($(e)),o=O(e),s=B(e),a=(e=>L(e.options.get(\"images_upload_url\")))(e),l=(e=>h(e.options.get(\"images_upload_handler\")))(e),c=(e=>{const t=_e(e);return t?fe((t=>be(e,t)),t):{src:\"\",alt:\"\",title:\"\",width:\"\",height:\"\",class:\"\",style:\"\",caption:!1,hspace:\"\",vspace:\"\",border:\"\",borderStyle:\"\",isDecorative:!1}})(e),u=N(e),d=Y(e),f=F(e),p=P(e),v=H(e),y=j(e),b=g.some(R(e)).filter((e=>i(e)&&e.length>0));return n.then((e=>({image:c,imageList:e,classList:r,hasAdvTab:o,hasUploadTab:s,hasUploadUrl:a,hasUploadHandler:l,hasDescription:u,hasImageTitle:d,hasDimensions:f,hasImageCaption:p,prependURL:b,hasAccessibilityOptions:v,automaticUploads:y})))},Ye=e=>{const t=e.imageList.map((e=>({name:\"images\",type:\"listbox\",label:\"Image list\",items:e}))),n={name:\"alt\",type:\"input\",label:\"Alternative description\",enabled:!(e.hasAccessibilityOptions&&e.image.isDecorative)},r=e.classList.map((e=>({name:\"classes\",type:\"listbox\",label:\"Class\",items:e})));return x([[{name:\"src\",type:\"urlinput\",filetype:\"image\",label:\"Source\"}],t.toArray(),e.hasAccessibilityOptions&&e.hasDescription?[{type:\"label\",label:\"Accessibility\",items:[{name:\"isDecorative\",type:\"checkbox\",label:\"Image is decorative\"}]}]:[],e.hasDescription?[n]:[],e.hasImageTitle?[{name:\"title\",type:\"input\",label:\"Image title\"}]:[],e.hasDimensions?[{name:\"dimensions\",type:\"sizeinput\"}]:[],[{...(o=e.classList.isSome()&&e.hasImageCaption,o?{type:\"grid\",columns:2}:{type:\"panel\"}),items:x([r.toArray(),e.hasImageCaption?[{type:\"label\",label:\"Caption\",items:[{type:\"checkbox\",name:\"caption\",label:\"Show caption\"}]}]:[]])}]]);var o},Pe=e=>({title:\"General\",name:\"general\",items:Ye(e)}),Ie=Ye,He=e=>({title:\"Upload\",name:\"upload\",items:[{type:\"dropzone\",name:\"fileinput\"}]}),je=e=>({src:{value:e.src,meta:{}},images:e.src,alt:e.alt,title:e.title,dimensions:{width:e.width,height:e.height},classes:e.class,caption:e.caption,style:e.style,vspace:e.vspace,border:e.border,hspace:e.hspace,borderstyle:e.borderStyle,fileinput:[],isDecorative:e.isDecorative}),We=(e,t)=>({src:e.src.value,alt:null!==e.alt&&0!==e.alt.length||!t?e.alt:null,title:e.title,width:e.dimensions.width,height:e.dimensions.height,class:e.classes,style:e.style,caption:e.caption,hspace:e.hspace,vspace:e.vspace,border:e.border,borderStyle:e.borderstyle,isDecorative:e.isDecorative}),ze=(e,t)=>{const n=t.getData();((e,t)=>/^(?:[a-zA-Z]+:)?\\/\\//.test(t)?g.none():e.prependURL.bind((e=>t.substring(0,e.length)!==e?g.some(e+t):g.none())))(e,n.src.value).each((e=>{t.setData({src:{value:e,meta:n.src.meta}})}))},Ue=(e,t)=>{const n=t.getData(),r=n.src.meta;if(void 0!==r){const o=De({},n);((e,t,n)=>{e.hasDescription&&i(n.alt)&&(t.alt=n.alt),e.hasAccessibilityOptions&&(t.isDecorative=n.isDecorative||t.isDecorative||!1),e.hasImageTitle&&i(n.title)&&(t.title=n.title),e.hasDimensions&&(i(n.width)&&(t.dimensions.width=n.width),i(n.height)&&(t.dimensions.height=n.height)),i(n.class)&&Re(e.classList,n.class).each((e=>{t.classes=e.value})),e.hasImageCaption&&d(n.caption)&&(t.caption=n.caption),e.hasAdvTab&&(i(n.style)&&(t.style=n.style),i(n.vspace)&&(t.vspace=n.vspace),i(n.border)&&(t.border=n.border),i(n.hspace)&&(t.hspace=n.hspace),i(n.borderstyle)&&(t.borderstyle=n.borderstyle))})(e,o,r),t.setData(o)}},Ve=(e,t,n,r)=>{ze(t,r),Ue(t,r),((e,t,n,r)=>{const o=r.getData(),i=o.src.value,s=o.src.meta||{};s.width||s.height||!t.hasDimensions||(L(i)?e.imageSize(i).then((e=>{n.open&&r.setData({dimensions:e})})).catch((e=>console.error(e))):r.setData({dimensions:{width:\"\",height:\"\"}}))})(e,t,n,r),((e,t,n)=>{const r=n.getData(),o=Re(e.imageList,r.src.value);t.prevImage=o,n.setData({images:o.map((e=>e.value)).getOr(\"\")})})(t,n,r)},qe=(e,t,n,r)=>{const o=r.getData();r.block(\"Uploading image\"),C(o.fileinput).fold((()=>{r.unblock()}),(o=>{const i=URL.createObjectURL(o),s=()=>{r.unblock(),URL.revokeObjectURL(i)},a=o=>{r.setData({src:{value:o,meta:{}}}),r.showTab(\"general\"),Ve(e,t,n,r)};var l;(l=o,new Promise(((e,t)=>{const n=new FileReader;n.onload=()=>{e(n.result)},n.onerror=()=>{var e;t(null===(e=n.error)||void 0===e?void 0:e.message)},n.readAsDataURL(l)}))).then((n=>{const l=e.createBlobCache(o,i,n);t.automaticUploads?e.uploadImage(l).then((e=>{a(e.url),s()})).catch((t=>{s(),e.alertErr(t)})):(e.addToBlobCache(l),a(l.blobUri()),r.unblock())}))}))},Ge=(e,t,n)=>(r,o)=>{\"src\"===o.name?Ve(e,t,n,r):\"images\"===o.name?((e,t,n,r)=>{const o=r.getData(),i=Re(t.imageList,o.images);i.each((e=>{const t=\"\"===o.alt||n.prevImage.map((e=>e.text===o.alt)).getOr(!1);t?\"\"===e.value?r.setData({src:e,alt:n.prevAlt}):r.setData({src:e,alt:e.text}):r.setData({src:e})})),n.prevImage=i,Ve(e,t,n,r)})(e,t,n,r):\"alt\"===o.name?n.prevAlt=r.getData().alt:\"fileinput\"===o.name?qe(e,t,n,r):\"isDecorative\"===o.name&&r.setEnabled(\"alt\",!r.getData().isDecorative)},Ke=e=>()=>{e.open=!1},Xe=e=>{if(e.hasAdvTab||e.hasUploadUrl||e.hasUploadHandler){return{type:\"tabpanel\",tabs:x([[Pe(e)],e.hasAdvTab?[$e(e)]:[],e.hasUploadTab&&(e.hasUploadUrl||e.hasUploadHandler)?[He(e)]:[]])}}return{type:\"panel\",items:Ie(e)}},Je=(e,t,n)=>r=>{const o=De(je(t.image),r.getData()),i={...o,style:me(n.normalizeCss,We(o,!1))};e.execCommand(\"mceUpdateImage\",!1,We(i,t.hasAccessibilityOptions)),e.editorUpload.uploadImagesAuto(),r.close()},Qe=e=>t=>q(e,t)?(e=>new Promise((t=>{const n=document.createElement(\"img\"),r=e=>{n.onload=n.onerror=null,n.parentNode&&n.parentNode.removeChild(n),t(e)};n.onload=()=>{const e={width:W(n.width,n.clientWidth),height:W(n.height,n.clientHeight)};r(Promise.resolve(e))},n.onerror=()=>{r(Promise.reject(`Failed to get image dimensions for: ${e}`))};const o=n.style;o.visibility=\"hidden\",o.position=\"fixed\",o.bottom=o.left=\"0px\",o.width=o.height=\"auto\",document.body.appendChild(n),n.src=e})))(e.documentBaseURI.toAbsolute(t)).then((e=>({width:String(e.width),height:String(e.height)}))):Promise.resolve({width:\"\",height:\"\"}),Ze=e=>(t,n,r)=>{var o;return e.editorUpload.blobCache.create({blob:t,blobUri:n,name:null===(o=t.name)||void 0===o?void 0:o.replace(/\\.[^\\.]+$/,\"\"),filename:t.name,base64:r.split(\",\")[1]})},et=e=>t=>{e.editorUpload.blobCache.add(t)},tt=e=>t=>{e.windowManager.alert(t)},nt=e=>t=>be(e,t),rt=e=>t=>e.dom.parseStyle(t),ot=e=>(t,n)=>e.dom.serializeStyle(t,n),it=e=>t=>Ae(e).upload([t],!1).then((e=>{var t;return 0===e.length?Promise.reject(\"Failed to upload image\"):!1===e[0].status?Promise.reject(null===(t=e[0].error)||void 0===t?void 0:t.message):e[0]})),st=e=>{const t={imageSize:Qe(e),addToBlobCache:et(e),createBlobCache:Ze(e),alertErr:tt(e),normalizeCss:nt(e),parseStyle:rt(e),serializeStyle:ot(e),uploadImage:it(e)};return{open:()=>{Ne(e).then((n=>{const r=(e=>({prevImage:Re(e.imageList,e.image.src),prevAlt:e.image.alt,open:!0}))(n);return{title:\"Insert/Edit Image\",size:\"normal\",body:Xe(n),buttons:[{type:\"cancel\",name:\"cancel\",text:\"Cancel\"},{type:\"submit\",name:\"save\",text:\"Save\",primary:!0}],initialData:je(n.image),onSubmit:Je(e,n,t),onChange:Ge(t,n,r),onClose:Ke(r)}})).then(e.windowManager.open)}}},at=e=>{const t=e.attr(\"class\");return h(t)&&/\\bimage\\b/.test(t)},lt=e=>t=>{let n=t.length;const r=t=>{t.attr(\"contenteditable\",e?\"true\":null)};for(;n--;){const o=t[n];at(o)&&(o.attr(\"contenteditable\",e?\"false\":null),Me.each(o.getAll(\"figcaption\"),r))}};e.add(\"image\",(e=>{T(e),(e=>{e.on(\"PreInit\",(()=>{e.parser.addNodeFilter(\"figure\",lt(!0)),e.serializer.addNodeFilter(\"figure\",lt(!1))}))})(e),(e=>{e.ui.registry.addToggleButton(\"image\",{icon:\"image\",tooltip:\"Insert/edit image\",onAction:st(e).open,onSetup:t=>(t.setActive(h(_e(e))),e.selection.selectorChangedWithUnbind(\"img:not([data-mce-object]):not([data-mce-placeholder]),figure.image\",t.setActive).unbind)}),e.ui.registry.addMenuItem(\"image\",{icon:\"image\",text:\"Image...\",onAction:st(e).open}),e.ui.registry.addContextMenu(\"image\",{update:e=>ue(e)||\"IMG\"===e.nodeName&&!V(e)?[\"image\"]:[]})})(e),(e=>{e.addCommand(\"mceImage\",st(e).open),e.addCommand(\"mceUpdateImage\",((t,n)=>{e.undoManager.transact((()=>ke(e,n)))}))})(e)}))}()},2682:(e,t,n)=>{n(7384)},7384:()=>{!function(){\"use strict\";var e=tinymce.util.Tools.resolve(\"tinymce.PluginManager\");const t=e=>t=>(e=>{const t=typeof e;return null===e?\"null\":\"object\"===t&&Array.isArray(e)?\"array\":\"object\"===t&&(n=o=e,r=(i=String).prototype,r.isPrototypeOf(n)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===i.name)?\"string\":t;var n,r;var o,i,s})(t)===e,n=e=>t=>typeof t===e,r=t(\"string\"),o=t(\"object\"),i=t(\"array\"),s=(a=null,e=>a===e);var a;const l=n(\"boolean\"),c=e=>!(e=>null==e)(e),u=n(\"function\"),d=(e,t)=>{if(i(e)){for(let n=0,r=e.length;n<r;++n)if(!t(e[n]))return!1;return!0}return!1},h=()=>{},m=(e,t)=>e===t;class f{constructor(e,t){this.tag=e,this.value=t}static some(e){return new f(!0,e)}static none(){return f.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?f.some(e(this.value)):f.none()}bind(e){return this.tag?e(this.value):f.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:f.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:\"Called getOrDie on None\")}static from(e){return c(e)?f.some(e):f.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:\"none()\"}}f.singletonNone=new f(!1);const p=Array.prototype.indexOf,g=Array.prototype.push,v=(e,t)=>((e,t)=>p.call(e,t))(e,t)>-1,y=e=>{const t=[];for(let n=0,r=e.length;n<r;++n){if(!i(e[n]))throw new Error(\"Arr.flatten item \"+n+\" was not an array, input: \"+e);g.apply(t,e[n])}return t},b=(e,t)=>y(((e,t)=>{const n=e.length,r=new Array(n);for(let o=0;o<n;o++){const n=e[o];r[o]=t(n,o)}return r})(e,t)),_=(e,t)=>{for(let n=0;n<e.length;n++){const r=t(e[n],n);if(r.isSome())return r}return f.none()},w=(e,t,n=m)=>e.exists((e=>n(e,t))),x=e=>{const t=[],n=e=>{t.push(e)};for(let t=0;t<e.length;t++)e[t].each(n);return t},C=(e,t)=>e?f.some(t):f.none(),k=e=>t=>t.options.get(e),D=k(\"link_assume_external_targets\"),S=k(\"link_context_toolbar\"),A=k(\"link_list\"),M=k(\"link_default_target\"),L=k(\"link_default_protocol\"),E=k(\"link_target_list\"),T=k(\"link_rel_list\"),F=k(\"link_class_list\"),O=k(\"link_title\"),B=k(\"allow_unsafe_link_target\"),R=k(\"link_quicklink\");var $=tinymce.util.Tools.resolve(\"tinymce.util.Tools\");const N=e=>r(e.value)?e.value:\"\",Y=(e,t)=>{const n=[];return $.each(e,(e=>{const o=(e=>r(e.text)?e.text:r(e.title)?e.title:\"\")(e);if(void 0!==e.menu){const r=Y(e.menu,t);n.push({text:o,items:r})}else{const r=t(e);n.push({text:o,value:r})}})),n},P=(e=N)=>t=>f.from(t).map((t=>Y(t,e))),I={sanitize:e=>P(N)(e),sanitizeWith:P,createUi:(e,t)=>n=>({name:e,type:\"listbox\",label:t,items:n}),getValue:N},H=Object.keys,j=Object.hasOwnProperty,W=(e,t,n,r)=>{((e,t)=>{const n=H(e);for(let r=0,o=n.length;r<o;r++){const o=n[r];t(e[o],o)}})(e,((e,o)=>{(t(e,o)?n:r)(e,o)}))},z=(e,t)=>j.call(e,t);var U=tinymce.util.Tools.resolve(\"tinymce.dom.TreeWalker\"),V=tinymce.util.Tools.resolve(\"tinymce.util.URI\");const q=e=>c(e)&&\"a\"===e.nodeName.toLowerCase(),G=e=>q(e)&&!!J(e),K=(e,t)=>{if(e.collapsed)return[];{const n=e.cloneContents(),r=n.firstChild,o=new U(r,n),i=[];let s=r;do{t(s)&&i.push(s)}while(s=o.next());return i}},X=e=>/^\\w+:/i.test(e),J=e=>{var t,n;return null!==(n=null!==(t=e.getAttribute(\"data-mce-href\"))&&void 0!==t?t:e.getAttribute(\"href\"))&&void 0!==n?n:\"\"},Q=(e,t)=>{const n=[\"noopener\"],r=e?e.split(/\\s+/):[],o=e=>e.filter((e=>-1===$.inArray(n,e))),i=t?(e=>(e=o(e)).length>0?e.concat(n):n)(r):o(r);return i.length>0?(e=>$.trim(e.sort().join(\" \")))(i):\"\"},Z=(e,t)=>(t=t||e.selection.getNode(),oe(t)?f.from(e.dom.select(\"a[href]\",t)[0]):f.from(e.dom.getParent(t,\"a[href]\"))),ee=(e,t)=>Z(e,t).isSome(),te=(e,t)=>(e=>e.replace(/\\uFEFF/g,\"\"))(t.fold((()=>e.getContent({format:\"text\"})),(e=>e.innerText||e.textContent||\"\"))),ne=e=>$.grep(e,G).length>0,re=e=>{const t=e.schema.getTextInlineElements();return 0===K(e.selection.getRng(),(e=>1===e.nodeType&&!q(e)&&!z(t,e.nodeName.toLowerCase()))).length},oe=e=>c(e)&&\"FIGURE\"===e.nodeName&&/\\bimage\\b/i.test(e.className),ie=(e,t)=>{const n={...t};if(0===T(e).length&&!B(e)){const e=Q(n.rel,\"_blank\"===n.target);n.rel=e||null}return f.from(n.target).isNone()&&!1===E(e)&&(n.target=M(e)),n.href=((e,t)=>\"http\"!==t&&\"https\"!==t||X(e)?e:t+\"://\"+e)(n.href,D(e)),n},se=(e,t,n)=>{const r=e.selection.getNode(),o=Z(e,r),i=ie(e,(e=>{return t=[\"title\",\"rel\",\"class\",\"target\"],n=(t,n)=>(e[n].each((e=>{t[n]=e.length>0?e:null})),t),r={href:e.href},((e,t)=>{for(let n=0,r=e.length;n<r;n++)t(e[n],n)})(t,((e,t)=>{r=n(r,e,t)})),r;var t,n,r})(n));e.undoManager.transact((()=>{n.href===t.href&&t.attach(),o.fold((()=>{((e,t,n,r)=>{const o=e.dom;oe(t)?de(o,t,r):n.fold((()=>{e.execCommand(\"mceInsertLink\",!1,r)}),(t=>{e.insertContent(o.createHTML(\"a\",r,o.encode(t)))}))})(e,r,n.text,i)}),(t=>{e.focus(),((e,t,n,r)=>{n.each((e=>{z(t,\"innerText\")?t.innerText=e:t.textContent=e})),e.dom.setAttribs(t,r),e.selection.select(t)})(e,t,n.text,i)}))}))},ae=e=>{const{class:t,href:n,rel:r,target:o,text:i,title:a}=e;return((e,t)=>{const n={};var r;return W(e,t,(r=n,(e,t)=>{r[t]=e}),h),n})({class:t.getOrNull(),href:n,rel:r.getOrNull(),target:o.getOrNull(),text:i.getOrNull(),title:a.getOrNull()},((e,t)=>!1===s(e)))},le=(e,t,n)=>{const r=((e,t)=>{const n=e.options.get,r={allow_html_data_urls:n(\"allow_html_data_urls\"),allow_script_urls:n(\"allow_script_urls\"),allow_svg_data_urls:n(\"allow_svg_data_urls\")},o=t.href;return{...t,href:V.isDomSafe(o,\"a\",r)?o:\"\"}})(e,n);e.hasPlugin(\"rtc\",!0)?e.execCommand(\"createlink\",!1,ae(r)):se(e,t,r)},ce=e=>{e.hasPlugin(\"rtc\",!0)?e.execCommand(\"unlink\"):(e=>{e.undoManager.transact((()=>{const t=e.selection.getNode();oe(t)?ue(e,t):(e=>{const t=e.dom,n=e.selection,r=n.getBookmark(),o=n.getRng().cloneRange(),i=t.getParent(o.startContainer,\"a[href]\",e.getBody()),s=t.getParent(o.endContainer,\"a[href]\",e.getBody());i&&o.setStartBefore(i),s&&o.setEndAfter(s),n.setRng(o),e.execCommand(\"unlink\"),n.moveToBookmark(r)})(e),e.focus()}))})(e)},ue=(e,t)=>{var n;const r=e.dom.select(\"img\",t)[0];if(r){const o=e.dom.getParents(r,\"a[href]\",t)[0];o&&(null===(n=o.parentNode)||void 0===n||n.insertBefore(r,o),e.dom.remove(o))}},de=(e,t,n)=>{var r;const o=e.select(\"img\",t)[0];if(o){const t=e.create(\"a\",n);null===(r=o.parentNode)||void 0===r||r.insertBefore(t,o),t.appendChild(o)}},he=e=>{return z(t=e,n=\"items\")&&void 0!==t[n]&&null!==t[n];var t,n},me=(e,t)=>_(t,(t=>he(t)?me(e,t.items):C(t.value===e,t))),fe=(e,t,n,r)=>{const o=r[t],i=e.length>0;return void 0!==o?me(o,n).map((t=>({url:{value:t.value,meta:{text:i?e:t.text,attach:h}},text:i?e:t.text}))):f.none()},pe=(e,t)=>{const n={text:e.text,title:e.title},r=e=>{const t=(r=e.url,C(n.text.length<=0,f.from(null===(o=r.meta)||void 0===o?void 0:o.text).getOr(r.value)));var r,o;const i=(e=>{var t;return C(n.title.length<=0,f.from(null===(t=e.meta)||void 0===t?void 0:t.title).getOr(\"\"))})(e.url);return t.isSome()||i.isSome()?f.some({...t.map((e=>({text:e}))).getOr({}),...i.map((e=>({title:e}))).getOr({})}):f.none()},o=(e,r)=>{const o=(i=t,s=r,\"link\"===s?i.link:\"anchor\"===s?i.anchor:f.none()).getOr([]);var i,s;return fe(n.text,r,o,e)};return{onChange:(e,t)=>{const i=t.name;return\"url\"===i?r(e()):v([\"anchor\",\"link\"],i)?o(e(),i):\"text\"===i||\"title\"===i?(n[i]=e()[i],f.none()):f.none()}}};var ge=tinymce.util.Tools.resolve(\"tinymce.util.Delay\");const ve=e=>{const t=e.href;return t.indexOf(\"@\")>0&&-1===t.indexOf(\"/\")&&-1===t.indexOf(\"mailto:\")?f.some({message:\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\",preprocess:e=>({...e,href:\"mailto:\"+t})}):f.none()},ye=(e,t)=>n=>{const r=n.href;return 1===e&&!X(r)||0===e&&/^\\s*www(\\.|\\d\\.)/i.test(r)?f.some({message:`The URL you entered seems to be an external link. Do you want to add the required ${t}:// prefix?`,preprocess:e=>({...e,href:t+\"://\"+r})}):f.none()},be=(e,t)=>_([ve,ye(D(e),L(e))],(e=>e(t))).fold((()=>Promise.resolve(t)),(n=>new Promise((r=>{((e,t,n)=>{const r=e.selection.getRng();ge.setEditorTimeout(e,(()=>{e.windowManager.confirm(t,(t=>{e.selection.setRng(r),n(t)}))}))})(e,n.message,(e=>{r(e?n.preprocess(t):t)}))})))),_e=e=>{const t=e.dom.select(\"a:not([href])\"),n=b(t,(e=>{const t=e.name||e.id;return t?[{text:t,value:\"#\"+t}]:[]}));return n.length>0?f.some([{text:\"None\",value:\"\"}].concat(n)):f.none()},we=e=>{const t=F(e);return t.length>0?I.sanitize(t):f.none()},xe=e=>{try{return f.some(JSON.parse(e))}catch(e){return f.none()}},Ce=e=>{const t=t=>e.convertURL(t.value||t.url||\"\",\"href\"),n=A(e);return new Promise((e=>{r(n)?fetch(n).then((e=>e.ok?e.text().then(xe):Promise.reject())).then(e,(()=>e(f.none()))):u(n)?n((t=>e(f.some(t)))):e(f.from(n))})).then((e=>e.bind(I.sanitizeWith(t)).map((e=>{if(e.length>0){return[{text:\"None\",value:\"\"}].concat(e)}return e}))))},ke=(e,t)=>{const n=T(e);if(n.length>0){const r=w(t,\"_blank\"),o=e=>Q(I.getValue(e),r);return(!1===B(e)?I.sanitizeWith(o):I.sanitize)(n)}return f.none()},De=[{text:\"Current window\",value:\"\"},{text:\"New window\",value:\"_blank\"}],Se=e=>{const t=E(e);return i(t)?I.sanitize(t).orThunk((()=>f.some(De))):!1===t?f.none():f.some(De)},Ae=(e,t,n)=>{const r=e.getAttrib(t,n);return null!==r&&r.length>0?f.some(r):f.none()},Me=(e,t)=>Ce(e).then((n=>{const r=((e,t)=>{const n=e.dom,r=re(e)?f.some(te(e.selection,t)):f.none(),o=t.bind((e=>f.from(n.getAttrib(e,\"href\")))),i=t.bind((e=>f.from(n.getAttrib(e,\"target\")))),s=t.bind((e=>Ae(n,e,\"rel\"))),a=t.bind((e=>Ae(n,e,\"class\")));return{url:o,text:r,title:t.bind((e=>Ae(n,e,\"title\"))),target:i,rel:s,linkClass:a}})(e,t);return{anchor:r,catalogs:{targets:Se(e),rels:ke(e,r.target),classes:we(e),anchor:_e(e),link:n},optNode:t,flags:{titleEnabled:O(e)}}})),Le=e=>{const t=(e=>{const t=Z(e);return Me(e,t)})(e);t.then((t=>{const n=((e,t)=>n=>{const r=n.getData();if(!r.url.value)return ce(e),void n.close();const o=e=>f.from(r[e]).filter((n=>!w(t.anchor[e],n))),i={href:r.url.value,text:o(\"text\"),target:o(\"target\"),rel:o(\"rel\"),class:o(\"linkClass\"),title:o(\"title\")},s={href:r.url.value,attach:void 0!==r.url.meta&&r.url.meta.attach?r.url.meta.attach:h};be(e,i).then((t=>{le(e,s,t)})),n.close()})(e,t);return((e,t,n)=>{const r=e.anchor.text.map((()=>({name:\"text\",type:\"input\",label:\"Text to display\"}))).toArray(),o=e.flags.titleEnabled?[{name:\"title\",type:\"input\",label:\"Title\"}]:[],i=((e,t)=>{const n=e.anchor,r=n.url.getOr(\"\");return{url:{value:r,meta:{original:{value:r}}},text:n.text.getOr(\"\"),title:n.title.getOr(\"\"),anchor:r,link:r,rel:n.rel.getOr(\"\"),target:n.target.or(t).getOr(\"\"),linkClass:n.linkClass.getOr(\"\")}})(e,f.from(M(n))),s=e.catalogs,a=pe(i,s);return{title:\"Insert/Edit Link\",size:\"normal\",body:{type:\"panel\",items:y([[{name:\"url\",type:\"urlinput\",filetype:\"file\",label:\"URL\"}],r,o,x([s.anchor.map(I.createUi(\"anchor\",\"Anchors\")),s.rels.map(I.createUi(\"rel\",\"Rel\")),s.targets.map(I.createUi(\"target\",\"Open link in...\")),s.link.map(I.createUi(\"link\",\"Link list\")),s.classes.map(I.createUi(\"linkClass\",\"Class\"))])])},buttons:[{type:\"cancel\",name:\"cancel\",text:\"Cancel\"},{type:\"submit\",name:\"save\",text:\"Save\",primary:!0}],initialData:i,onChange:(e,{name:t})=>{a.onChange(e.getData,{name:t}).each((t=>{e.setData(t)}))},onSubmit:t}})(t,n,e)})).then((t=>{e.windowManager.open(t)}))};var Ee=tinymce.util.Tools.resolve(\"tinymce.util.VK\");const Te=e=>{const t=document.createElement(\"a\");t.target=\"_blank\",t.href=e,t.rel=\"noreferrer noopener\";const n=document.createEvent(\"MouseEvents\");n.initMouseEvent(\"click\",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),((e,t)=>{document.body.appendChild(e),e.dispatchEvent(t),document.body.removeChild(e)})(t,n)},Fe=(e,t)=>e.dom.getParent(t,\"a[href]\"),Oe=e=>Fe(e,e.selection.getStart()),Be=(e,t)=>{if(t){const n=J(t);if(/^#/.test(n)){const t=e.dom.select(n);t.length&&e.selection.scrollIntoView(t[0],!0)}else Te(t.href)}},Re=e=>()=>{e.execCommand(\"mceLink\",!1,{dialog:!0})},$e=e=>()=>{Be(e,Oe(e))},Ne=(e,t)=>(e.on(\"NodeChange\",t),()=>e.off(\"NodeChange\",t)),Ye=e=>t=>{const n=()=>t.setActive(!e.mode.isReadOnly()&&ee(e,e.selection.getNode()));return n(),Ne(e,n)},Pe=e=>t=>{const n=()=>t.setEnabled(ee(e,e.selection.getNode()));return n(),Ne(e,n)},Ie=e=>t=>{const n=t=>{return ne(t)||(n=e.selection.getRng(),K(n,G).length>0);var n},r=e.dom.getParents(e.selection.getStart());return t.setEnabled(n(r)),Ne(e,(e=>t.setEnabled(n(e.parents))))},He=e=>{const t=t=>{const n=e.selection.getNode();return t.setEnabled(ee(e,n)),h};e.ui.registry.addContextForm(\"quicklink\",{launch:{type:\"contextformtogglebutton\",icon:\"link\",tooltip:\"Link\",onSetup:Ye(e)},label:\"Link\",predicate:t=>S(e)&&ee(e,t),initValue:()=>{return Z(e).fold((t=\"\",()=>t),J);var t},commands:[{type:\"contextformtogglebutton\",icon:\"link\",tooltip:\"Link\",primary:!0,onSetup:t=>{const n=e.selection.getNode();return t.setActive(ee(e,n)),Ye(e)(t)},onAction:t=>{const n=t.getValue(),r=(t=>{const n=Z(e),r=re(e);if(n.isNone()&&r){const r=te(e.selection,n);return f.some(r.length>0?r:t)}return f.none()})(n);le(e,{href:n,attach:h},{href:n,text:r,title:f.none(),rel:f.none(),target:f.none(),class:f.none()}),(e=>{e.selection.collapse(!1)})(e),t.hide()}},{type:\"contextformbutton\",icon:\"unlink\",tooltip:\"Remove link\",onSetup:t,onAction:t=>{ce(e),t.hide()}},{type:\"contextformbutton\",icon:\"new-tab\",tooltip:\"Open link\",onSetup:t,onAction:t=>{$e(e)(),t.hide()}}]})};e.add(\"link\",(e=>{(e=>{const t=e.options.register;t(\"link_assume_external_targets\",{processor:e=>{const t=r(e)||l(e);return t?!0===e?{value:1,valid:t}:\"http\"===e||\"https\"===e?{value:e,valid:t}:{value:0,valid:t}:{valid:!1,message:\"Must be a string or a boolean.\"}},default:!1}),t(\"link_context_toolbar\",{processor:\"boolean\",default:!1}),t(\"link_list\",{processor:e=>r(e)||u(e)||d(e,o)}),t(\"link_default_target\",{processor:\"string\"}),t(\"link_default_protocol\",{processor:\"string\",default:\"https\"}),t(\"link_target_list\",{processor:e=>l(e)||d(e,o),default:!0}),t(\"link_rel_list\",{processor:\"object[]\",default:[]}),t(\"link_class_list\",{processor:\"object[]\",default:[]}),t(\"link_title\",{processor:\"boolean\",default:!0}),t(\"allow_unsafe_link_target\",{processor:\"boolean\",default:!1}),t(\"link_quicklink\",{processor:\"boolean\",default:!1})})(e),(e=>{e.ui.registry.addToggleButton(\"link\",{icon:\"link\",tooltip:\"Insert/edit link\",onAction:Re(e),onSetup:Ye(e)}),e.ui.registry.addButton(\"openlink\",{icon:\"new-tab\",tooltip:\"Open link\",onAction:$e(e),onSetup:Pe(e)}),e.ui.registry.addButton(\"unlink\",{icon:\"unlink\",tooltip:\"Remove link\",onAction:()=>ce(e),onSetup:Ie(e)})})(e),(e=>{e.ui.registry.addMenuItem(\"openlink\",{text:\"Open link\",icon:\"new-tab\",onAction:$e(e),onSetup:Pe(e)}),e.ui.registry.addMenuItem(\"link\",{icon:\"link\",text:\"Link...\",shortcut:\"Meta+K\",onAction:Re(e)}),e.ui.registry.addMenuItem(\"unlink\",{icon:\"unlink\",text:\"Remove link\",onAction:()=>ce(e),onSetup:Ie(e)})})(e),(e=>{e.ui.registry.addContextMenu(\"link\",{update:t=>ne(e.dom.getParents(t,\"a\"))?\"link unlink openlink\":\"link\"})})(e),He(e),(e=>{e.on(\"click\",(t=>{const n=Fe(e,t.target);n&&Ee.metaKeyPressed(t)&&(t.preventDefault(),Be(e,n))})),e.on(\"keydown\",(t=>{if(!t.isDefaultPrevented()&&13===t.keyCode&&(e=>!0===e.altKey&&!1===e.shiftKey&&!1===e.ctrlKey&&!1===e.metaKey)(t)){const n=Oe(e);n&&(t.preventDefault(),Be(e,n))}}))})(e),(e=>{e.addCommand(\"mceLink\",((t,n)=>{!0!==(null==n?void 0:n.dialog)&&R(e)?e.dispatch(\"contexttoolbar-show\",{toolbarKey:\"quicklink\"}):Le(e)}))})(e),(e=>{e.addShortcut(\"Meta+K\",\"\",(()=>{e.execCommand(\"mceLink\")}))})(e)}))}()},1236:(e,t,n)=>{n(7585)},7585:()=>{!function(){\"use strict\";var e=tinymce.util.Tools.resolve(\"tinymce.PluginManager\");const t=e=>t=>(e=>{const t=typeof e;return null===e?\"null\":\"object\"===t&&Array.isArray(e)?\"array\":\"object\"===t&&(n=o=e,r=(i=String).prototype,r.isPrototypeOf(n)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===i.name)?\"string\":t;var n,r;var o,i,s})(t)===e,n=e=>t=>typeof t===e,r=t(\"string\"),o=t(\"object\"),i=t(\"array\"),s=n(\"boolean\"),a=e=>!(e=>null==e)(e),l=n(\"function\"),c=n(\"number\"),u=()=>{},d=(e,t)=>e===t,h=e=>t=>!e(t),m=(f=!1,()=>f);var f;class p{constructor(e,t){this.tag=e,this.value=t}static some(e){return new p(!0,e)}static none(){return p.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?p.some(e(this.value)):p.none()}bind(e){return this.tag?e(this.value):p.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:p.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:\"Called getOrDie on None\")}static from(e){return a(e)?p.some(e):p.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:\"none()\"}}p.singletonNone=new p(!1);const g=Array.prototype.slice,v=Array.prototype.indexOf,y=Array.prototype.push,b=(e,t)=>{return n=e,r=t,v.call(n,r)>-1;var n,r},_=(e,t)=>{for(let n=0,r=e.length;n<r;n++){if(t(e[n],n))return!0}return!1},w=(e,t)=>{const n=e.length,r=new Array(n);for(let o=0;o<n;o++){const n=e[o];r[o]=t(n,o)}return r},x=(e,t)=>{for(let n=0,r=e.length;n<r;n++){t(e[n],n)}},C=(e,t)=>{const n=[];for(let r=0,o=e.length;r<o;r++){const o=e[r];t(o,r)&&n.push(o)}return n},k=(e,t,n)=>(x(e,((e,r)=>{n=t(n,e,r)})),n),D=(e,t,n)=>{for(let r=0,o=e.length;r<o;r++){const o=e[r];if(t(o,r))return p.some(o);if(n(o,r))break}return p.none()},S=(e,t)=>D(e,t,m),A=(e,t)=>(e=>{const t=[];for(let n=0,r=e.length;n<r;++n){if(!i(e[n]))throw new Error(\"Arr.flatten item \"+n+\" was not an array, input: \"+e);y.apply(t,e[n])}return t})(w(e,t)),M=e=>{const t=g.call(e,0);return t.reverse(),t},L=(e,t)=>t>=0&&t<e.length?p.some(e[t]):p.none(),E=e=>L(e,0),T=e=>L(e,e.length-1),F=(e,t)=>{const n=[],r=l(t)?e=>_(n,(n=>t(n,e))):e=>b(n,e);for(let t=0,o=e.length;t<o;t++){const o=e[t];r(o)||n.push(o)}return n},O=(e,t,n=d)=>e.exists((e=>n(e,t))),B=(e,t,n)=>e.isSome()&&t.isSome()?p.some(n(e.getOrDie(),t.getOrDie())):p.none(),R=e=>{if(null==e)throw new Error(\"Node cannot be null or undefined\");return{dom:e}},$={fromHtml:(e,t)=>{const n=(t||document).createElement(\"div\");if(n.innerHTML=e,!n.hasChildNodes()||n.childNodes.length>1){const t=\"HTML does not have a single root node\";throw console.error(t,e),new Error(t)}return R(n.childNodes[0])},fromTag:(e,t)=>{const n=(t||document).createElement(e);return R(n)},fromText:(e,t)=>{const n=(t||document).createTextNode(e);return R(n)},fromDom:R,fromPoint:(e,t,n)=>p.from(e.dom.elementFromPoint(t,n)).map(R)},N=(e,t)=>e.dom===t.dom,Y=(e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error(\"Browser lacks native selectors\")}};\"undefined\"!=typeof window?window:Function(\"return this;\")();const P=e=>e.dom.nodeName.toLowerCase(),I=(H=1,e=>(e=>e.dom.nodeType)(e)===H);var H;const j=e=>t=>I(t)&&P(t)===e,W=e=>p.from(e.dom.parentNode).map($.fromDom),z=e=>w(e.dom.childNodes,$.fromDom),U=(e,t)=>{const n=e.dom.childNodes;return p.from(n[t]).map($.fromDom)},V=e=>U(e,0),q=e=>U(e,e.dom.childNodes.length-1),G=(e,t,n)=>{let r=e.dom;const o=l(n)?n:m;for(;r.parentNode;){r=r.parentNode;const e=$.fromDom(r);if(t(e))return p.some(e);if(o(e))break}return p.none()},K=(e,t,n)=>((e,t,n,r,o)=>e(n,r)?p.some(n):l(o)&&o(n)?p.none():t(n,r,o))(((e,t)=>t(e)),G,e,t,n),X=(e,t)=>{W(e).each((n=>{n.dom.insertBefore(t.dom,e.dom)}))},J=(e,t)=>{const n=(e=>p.from(e.dom.nextSibling).map($.fromDom))(e);n.fold((()=>{W(e).each((e=>{Q(e,t)}))}),(e=>{X(e,t)}))},Q=(e,t)=>{e.dom.appendChild(t.dom)},Z=(e,t)=>{x(t,(t=>{Q(e,t)}))},ee=e=>{e.dom.textContent=\"\",x(z(e),(e=>{te(e)}))},te=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)};var ne=tinymce.util.Tools.resolve(\"tinymce.dom.RangeUtils\"),re=tinymce.util.Tools.resolve(\"tinymce.dom.TreeWalker\"),oe=tinymce.util.Tools.resolve(\"tinymce.util.VK\");const ie=e=>w(e,$.fromDom),se=Object.keys,ae=(e,t)=>{const n=se(e);for(let r=0,o=n.length;r<o;r++){const o=n[r];t(e[o],o)}},le=(e,t)=>{const n={};var r;return((e,t,n,r)=>{ae(e,((e,o)=>{(t(e,o)?n:r)(e,o)}))})(e,t,(r=n,(e,t)=>{r[t]=e}),u),n},ce=(e,t)=>{const n=e.dom;ae(t,((e,t)=>{((e,t,n)=>{if(!(r(n)||s(n)||c(n)))throw console.error(\"Invalid call to Attribute.set. Key \",t,\":: Value \",n,\":: Element \",e),new Error(\"Attribute value was not simple\");e.setAttribute(t,n+\"\")})(n,t,e)}))},ue=e=>k(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}),de=e=>((e,t)=>$.fromDom(e.dom.cloneNode(t)))(e,!0),he=(e,t)=>{const n=((e,t)=>{const n=$.fromTag(t),r=ue(e);return ce(n,r),n})(e,t);J(e,n);const r=z(e);return Z(n,r),te(e),n};var me=tinymce.util.Tools.resolve(\"tinymce.dom.DOMUtils\"),fe=tinymce.util.Tools.resolve(\"tinymce.util.Tools\");const pe=e=>t=>a(t)&&t.nodeName.toLowerCase()===e,ge=e=>t=>a(t)&&e.test(t.nodeName),ve=e=>a(e)&&3===e.nodeType,ye=e=>a(e)&&1===e.nodeType,be=ge(/^(OL|UL|DL)$/),_e=ge(/^(OL|UL)$/),we=pe(\"ol\"),xe=ge(/^(LI|DT|DD)$/),Ce=ge(/^(DT|DD)$/),ke=ge(/^(TH|TD)$/),De=pe(\"br\"),Se=(e,t)=>a(t)&&t.nodeName in e.schema.getTextBlockElements(),Ae=(e,t)=>a(e)&&e.nodeName in t,Me=(e,t,n)=>{const r=e.isEmpty(t);return!(n&&e.select(\"span[data-mce-type=bookmark]\",t).length>0)&&r},Le=(e,t)=>e.isChildOf(t,e.getRoot()),Ee=e=>t=>t.options.get(e),Te=Ee(\"lists_indent_on_tab\"),Fe=Ee(\"forced_root_block\"),Oe=Ee(\"forced_root_block_attrs\"),Be=(e,t)=>{const n=e.dom,r=e.schema.getBlockElements(),o=n.createFragment(),i=Fe(e),s=Oe(e);let a,l,c=!1;for(l=n.create(i,s),Ae(t.firstChild,r)||o.appendChild(l);a=t.firstChild;){const e=a.nodeName;c||\"SPAN\"===e&&\"bookmark\"===a.getAttribute(\"data-mce-type\")||(c=!0),Ae(a,r)?(o.appendChild(a),l=null):(l||(l=n.create(i,s),o.appendChild(l)),l.appendChild(a))}return!c&&l&&l.appendChild(n.create(\"br\",{\"data-mce-bogus\":\"1\"})),o},Re=me.DOM,$e=(e,t,n)=>{const r=Re.select('span[data-mce-type=\"bookmark\"]',t),o=Be(e,n),i=Re.createRng();i.setStartAfter(n),i.setEndAfter(t);const s=i.extractContents();for(let t=s.firstChild;t;t=t.firstChild)if(\"LI\"===t.nodeName&&e.dom.isEmpty(t)){Re.remove(t);break}e.dom.isEmpty(s)||Re.insertAfter(s,t),Re.insertAfter(o,t);const a=n.parentElement;a&&Me(e.dom,a)&&(e=>{const t=e.parentNode;t&&fe.each(r,(e=>{t.insertBefore(e,n.parentNode)})),Re.remove(e)})(a),Re.remove(n),Me(e.dom,t)&&Re.remove(t)},Ne=j(\"dd\"),Ye=j(\"dt\"),Pe=(e,t)=>{var n;Ne(t)?he(t,\"dt\"):Ye(t)&&(n=t,p.from(n.dom.parentElement).map($.fromDom)).each((n=>$e(e,n.dom,t.dom)))},Ie=e=>{Ye(e)&&he(e,\"dd\")},He=(e,t)=>{if(ve(e))return{container:e,offset:t};const n=ne.getNode(e,t);return ve(n)?{container:n,offset:t>=e.childNodes.length?n.data.length:0}:n.previousSibling&&ve(n.previousSibling)?{container:n.previousSibling,offset:n.previousSibling.data.length}:n.nextSibling&&ve(n.nextSibling)?{container:n.nextSibling,offset:0}:{container:e,offset:t}},je=e=>{const t=e.cloneRange(),n=He(e.startContainer,e.startOffset);t.setStart(n.container,n.offset);const r=He(e.endContainer,e.endOffset);return t.setEnd(r.container,r.offset),t},We=[\"OL\",\"UL\",\"DL\"],ze=We.join(\",\"),Ue=(e,t)=>{const n=t||e.selection.getStart(!0);return e.dom.getParent(n,ze,Ke(e,n))},Ve=e=>{const t=Ue(e),n=e.selection.getSelectedBlocks();return((e,t)=>a(e)&&1===t.length&&t[0]===e)(t,n)?(e=>C(e.querySelectorAll(ze),be))(t):C(n,(e=>be(e)&&t!==e))},qe=e=>{const t=e.selection.getSelectedBlocks();return C(((e,t)=>{const n=fe.map(t,(t=>e.dom.getParent(t,\"li,dd,dt\",Ke(e,t))||t));return F(n)})(e,t),xe)},Ge=(e,t)=>{const n=e.dom.getParents(t,\"TD,TH\");return n.length>0?n[0]:e.getBody()},Ke=(e,t)=>{const n=e.dom.getParents(t,e.dom.isBlock),r=S(n,(t=>{return n=e.schema,!be(r=t)&&!xe(r)&&_(We,(e=>n.isValidChild(r.nodeName,e)));var n,r}));return r.getOr(e.getBody())},Xe=(e,t)=>{const n=e.dom.getParents(t,\"ol,ul\",Ke(e,t));return T(n)},Je=e=>{const t=(e=>{const t=Xe(e,e.selection.getStart()),n=C(e.selection.getSelectedBlocks(),_e);return t.toArray().concat(n)})(e);return Qe(e,t)},Qe=(e,t)=>{const n=w(t,(t=>Xe(e,t).getOr(t)));return F(n)},Ze=e=>/\\btox\\-/.test(e.className),et=(e,t)=>D(e,be,ke).exists((e=>e.nodeName===t&&!Ze(e))),tt=(e,t)=>null!==t&&\"false\"===e.dom.getContentEditableParent(t),nt=(e,t)=>{const n=e.dom.getParent(t,\"ol,ul,dl\");return tt(e,n)},rt=(e,t)=>{const n=e.selection.getNode();return t({parents:e.dom.getParents(n),element:n}),e.on(\"NodeChange\",t),()=>e.off(\"NodeChange\",t)},ot=(e,t,n)=>e.dispatch(\"ListMutation\",{action:t,element:n}),it=(st=/^\\s+|\\s+$/g,e=>e.replace(st,\"\"));var st;const at=(e,t,n)=>{if(!r(n))throw console.error(\"Invalid call to CSS.set. Property \",t,\":: Value \",n,\":: Element \",e),new Error(\"CSS value must be a string: \"+n);(e=>void 0!==e.style&&l(e.style.getPropertyValue))(e)&&e.style.setProperty(t,n)},lt=(e,t,n)=>{const r=e.dom;at(r,t,n)},ct=(e,t)=>{Q(e.item,t.list)},ut=(e,t)=>{const n={list:$.fromTag(t,e),item:$.fromTag(\"li\",e)};return Q(n.list,n.item),n},dt=(e,t,n)=>{const r=t.slice(0,n.depth);return T(r).each((t=>{const r=((e,t,n)=>{const r=$.fromTag(\"li\",e);return ce(r,t),Z(r,n),r})(e,n.itemAttributes,n.content);((e,t)=>{Q(e.list,t),e.item=t})(t,r),((e,t)=>{P(e.list)!==t.listType&&(e.list=he(e.list,t.listType)),ce(e.list,t.listAttributes)})(t,n)})),r},ht=(e,t,n)=>{const r=((e,t,n)=>{const r=[];for(let o=0;o<n;o++)r.push(ut(e,t.listType));return r})(e,n,n.depth-t.length);var o;return(e=>{for(let t=1;t<e.length;t++)ct(e[t-1],e[t])})(r),((e,t)=>{for(let t=0;t<e.length-1;t++)lt(e[t].item,\"list-style-type\",\"none\");T(e).each((e=>{ce(e.list,t.listAttributes),ce(e.item,t.itemAttributes),Z(e.item,t.content)}))})(r,n),o=r,B(T(t),E(o),ct),t.concat(r)},mt=e=>Y(e,\"OL,UL\"),ft=e=>V(e).exists(mt),pt=e=>e.depth>0,gt=e=>e.isSelected,vt=e=>{const t=z(e),n=q(e).exists(mt)?t.slice(0,-1):t;return w(n,de)},yt=e=>(x(e,((t,n)=>{((e,t)=>{const n=e[t].depth,r=e=>e.depth===n&&!e.dirty,o=e=>e.depth<n;return D(M(e.slice(0,t)),r,o).orThunk((()=>D(e.slice(t+1),r,o)))})(e,n).fold((()=>{t.dirty&&(e=>{e.listAttributes=le(e.listAttributes,((e,t)=>\"start\"!==t))})(t)}),(e=>{return r=e,(n=t).listType=r.listType,void(n.listAttributes={...r.listAttributes});var n,r}))})),e),bt=(e,t,n,r)=>V(r).filter(mt).fold((()=>{t.each((e=>{N(e.start,r)&&n.set(!0)}));const o=((e,t,n)=>W(e).filter(I).map((r=>({depth:t,dirty:!1,isSelected:n,content:vt(e),itemAttributes:ue(e),listAttributes:ue(r),listType:P(r)}))))(r,e,n.get());t.each((e=>{N(e.end,r)&&n.set(!1)}));const i=q(r).filter(mt).map((r=>_t(e,t,n,r))).getOr([]);return o.toArray().concat(i)}),(r=>_t(e,t,n,r))),_t=(e,t,n,r)=>A(z(r),(r=>(mt(r)?_t:bt)(e+1,t,n,r))),wt=(e,t)=>{const n=yt(t);return w(n,(t=>{const n=((e,t)=>{const n=(t||document).createDocumentFragment();return x(e,(e=>{n.appendChild(e.dom)})),$.fromDom(n)})(t.content);return $.fromDom(Be(e,n.dom))}))},xt=(e,t)=>{const n=yt(t);return((e,t)=>{const n=k(t,((t,n)=>n.depth>t.length?ht(e,t,n):dt(e,t,n)),[]);return E(n).map((e=>e.list))})(e.contentDocument,n).toArray()},Ct=(e,t,n)=>{const r=((e,t)=>{const n=(e=>{let t=!1;return{get:()=>t,set:e=>{t=e}}})();return w(e,(e=>({sourceList:e,entries:_t(0,t,n,e)})))})(t,(e=>{const t=w(qe(e),$.fromDom);return B(S(t,h(ft)),S(M(t),h(ft)),((e,t)=>({start:e,end:t})))})(e));x(r,(t=>{((e,t)=>{x(C(e,gt),(e=>((e,t)=>{switch(e){case\"Indent\":t.depth++;break;case\"Outdent\":t.depth--;break;case\"Flatten\":t.depth=0}t.dirty=!0})(t,e)))})(t.entries,n);const r=((e,t)=>A(((e,t)=>{if(0===e.length)return[];{let n=t(e[0]);const r=[];let o=[];for(let i=0,s=e.length;i<s;i++){const s=e[i],a=t(s);a!==n&&(r.push(o),o=[]),n=a,o.push(s)}return 0!==o.length&&r.push(o),r}})(t,pt),(t=>E(t).exists(pt)?xt(e,t):wt(e,t))))(e,t.entries);var o;x(r,(t=>{ot(e,\"Indent\"===n?\"IndentList\":\"OutdentList\",t.dom)})),o=t.sourceList,x(r,(e=>{X(o,e)})),te(t.sourceList)}))},kt=(e,t)=>{const n=ie(Je(e)),r=ie((e=>C(qe(e),Ce))(e));let o=!1;if(n.length||r.length){const i=e.selection.getBookmark();Ct(e,n,t),((e,t,n)=>{x(n,\"Indent\"===t?Ie:t=>Pe(e,t))})(e,t,r),e.selection.moveToBookmark(i),e.selection.setRng(je(e.selection.getRng())),e.nodeChanged(),o=!0}return o},Dt=(e,t)=>!(e=>{const t=Ue(e);return tt(e,t)})(e)&&kt(e,t),St=e=>Dt(e,\"Indent\"),At=e=>Dt(e,\"Outdent\"),Mt=e=>Dt(e,\"Flatten\");var Lt=tinymce.util.Tools.resolve(\"tinymce.dom.BookmarkManager\");const Et=me.DOM,Tt=e=>{const t={},n=n=>{let r=e[n?\"startContainer\":\"endContainer\"],o=e[n?\"startOffset\":\"endOffset\"];if(ye(r)){const e=Et.create(\"span\",{\"data-mce-type\":\"bookmark\"});r.hasChildNodes()?(o=Math.min(o,r.childNodes.length-1),n?r.insertBefore(e,r.childNodes[o]):Et.insertAfter(e,r.childNodes[o])):r.appendChild(e),r=e,o=0}t[n?\"startContainer\":\"endContainer\"]=r,t[n?\"startOffset\":\"endOffset\"]=o};return n(!0),e.collapsed||n(),t},Ft=e=>{const t=t=>{let n=e[t?\"startContainer\":\"endContainer\"],r=e[t?\"startOffset\":\"endOffset\"];if(n){if(ye(n)&&n.parentNode){const e=n;r=(e=>{var t;let n=null===(t=e.parentNode)||void 0===t?void 0:t.firstChild,r=0;for(;n;){if(n===e)return r;ye(n)&&\"bookmark\"===n.getAttribute(\"data-mce-type\")||r++,n=n.nextSibling}return-1})(n),n=n.parentNode,Et.remove(e),!n.hasChildNodes()&&Et.isBlock(n)&&n.appendChild(Et.create(\"br\"))}e[t?\"startContainer\":\"endContainer\"]=n,e[t?\"startOffset\":\"endOffset\"]=r}};t(!0),t();const n=Et.createRng();return n.setStart(e.startContainer,e.startOffset),e.endContainer&&n.setEnd(e.endContainer,e.endOffset),je(n)},Ot=e=>{switch(e){case\"UL\":return\"ToggleUlList\";case\"OL\":return\"ToggleOlList\";case\"DL\":return\"ToggleDLList\"}},Bt=(e,t)=>{fe.each(t,((t,n)=>{e.setAttribute(n,t)}))},Rt=(e,t,n)=>{((e,t,n)=>{const r=n[\"list-style-type\"]?n[\"list-style-type\"]:null;e.setStyle(t,\"list-style-type\",r)})(e,t,n),((e,t,n)=>{Bt(t,n[\"list-attributes\"]),fe.each(e.select(\"li\",t),(e=>{Bt(e,n[\"list-item-attributes\"])}))})(e,t,n)},$t=(e,t,n,r)=>{let o=t[n?\"startContainer\":\"endContainer\"];const i=t[n?\"startOffset\":\"endOffset\"];for(ye(o)&&(o=o.childNodes[Math.min(i,o.childNodes.length-1)]||o),!n&&De(o.nextSibling)&&(o=o.nextSibling);o.parentNode!==r;){const t=o.parentNode;if(Se(e,o))return o;if(/^(TD|TH)$/.test(t.nodeName))return o;o=t}return o},Nt=(e,t,n)=>{const r=e.selection.getRng();let o=\"LI\";const i=Ke(e,e.selection.getStart(!0)),s=e.dom;if(\"false\"===s.getContentEditable(e.selection.getNode()))return;\"DL\"===(t=t.toUpperCase())&&(o=\"DT\");const a=Tt(r),l=((e,t,n)=>{const r=[],o=e.dom,i=$t(e,t,!0,n),s=$t(e,t,!1,n);let a;const l=[];for(let e=i;e&&(l.push(e),e!==s);e=e.nextSibling);return fe.each(l,(t=>{var i;if(Se(e,t))return r.push(t),void(a=null);if(o.isBlock(t)||De(t))return De(t)&&o.remove(t),void(a=null);const s=t.nextSibling;Lt.isBookmarkNode(t)&&(be(s)||Se(e,s)||!s&&t.parentNode===n)?a=null:(a||(a=o.create(\"p\"),null===(i=t.parentNode)||void 0===i||i.insertBefore(a,t),r.push(a)),a.appendChild(t))})),r})(e,r,i);fe.each(l,(r=>{let i;const a=r.previousSibling,l=r.parentNode;xe(l)||(a&&be(a)&&a.nodeName===t&&((e,t,n)=>{const r=e.getStyle(t,\"list-style-type\");let o=n?n[\"list-style-type\"]:\"\";return o=null===o?\"\":o,r===o})(s,a,n)?(i=a,r=s.rename(r,o),a.appendChild(r)):(i=s.create(t),l.insertBefore(i,r),i.appendChild(r),r=s.rename(r,o)),((e,t,n)=>{fe.each(n,(n=>e.setStyle(t,n,\"\")))})(s,r,[\"margin\",\"margin-right\",\"margin-bottom\",\"margin-left\",\"margin-top\",\"padding\",\"padding-right\",\"padding-bottom\",\"padding-left\",\"padding-top\"]),Rt(s,i,n),Pt(e.dom,i))})),e.selection.setRng(Ft(a))},Yt=(e,t,n)=>{return((e,t)=>be(e)&&e.nodeName===(null==t?void 0:t.nodeName))(t,n)&&((e,t,n)=>e.getStyle(t,\"list-style-type\",!0)===e.getStyle(n,\"list-style-type\",!0))(e,t,n)&&(r=n,t.className===r.className);var r},Pt=(e,t)=>{let n,r=t.nextSibling;if(Yt(e,t,r)){const o=r;for(;n=o.firstChild;)t.appendChild(n);e.remove(o)}if(r=t.previousSibling,Yt(e,t,r)){const o=r;for(;n=o.lastChild;)t.insertBefore(n,t.firstChild);e.remove(o)}},It=(e,t,n,r,o)=>{const i=be(t);if(i&&t.nodeName===r&&!Ht(o))Mt(e);else{Nt(e,r,o);const s=Tt(e.selection.getRng()),a=i?[t,...n]:n;fe.each(a,(t=>{((e,t,n,r)=>{if(t.nodeName!==n){const o=e.dom.rename(t,n);Rt(e.dom,o,r),ot(e,Ot(n),o)}else Rt(e.dom,t,r),ot(e,Ot(n),t)})(e,t,r,o)})),e.selection.setRng(Ft(s))}},Ht=e=>\"list-style-type\"in e,jt=(e,t,n)=>{const r=Ue(e);if(nt(e,r))return;const i=Ve(e),s=o(n)?n:{};i.length>0?It(e,r,i,t,s):((e,t,n,r)=>{if(t!==e.getBody())if(t)if(t.nodeName!==n||Ht(r)||Ze(t)){const o=Tt(e.selection.getRng());Rt(e.dom,t,r);const i=e.dom.rename(t,n);Pt(e.dom,i),e.selection.setRng(Ft(o)),Nt(e,n,r),ot(e,Ot(n),i)}else Mt(e);else Nt(e,n,r),ot(e,Ot(n),t)})(e,r,t,s)},Wt=me.DOM,zt=(e,t)=>{const n=fe.grep(e.select(\"ol,ul\",t));fe.each(n,(t=>{((e,t)=>{const n=t.parentElement;if(n&&\"LI\"===n.nodeName&&n.firstChild===t){const r=n.previousSibling;r&&\"LI\"===r.nodeName?(r.appendChild(t),Me(e,n)&&Wt.remove(n)):Wt.setStyle(n,\"listStyleType\",\"none\")}if(be(n)){const e=n.previousSibling;e&&\"LI\"===e.nodeName&&e.appendChild(t)}})(e,t)}))},Ut=(e,t,n,r)=>{let o=t.startContainer;const i=t.startOffset;if(ve(o)&&(n?i<o.data.length:i>0))return o;const s=e.schema.getNonEmptyElements();ye(o)&&(o=ne.getNode(o,i));const a=new re(o,r);n&&((e,t)=>!!De(t)&&e.isBlock(t.nextSibling)&&!De(t.previousSibling))(e.dom,o)&&a.next();const l=n?a.next.bind(a):a.prev2.bind(a);for(;o=l();){if(\"LI\"===o.nodeName&&!o.hasChildNodes())return o;if(s[o.nodeName])return o;if(ve(o)&&o.data.length>0)return o}return null},Vt=(e,t)=>{const n=t.childNodes;return 1===n.length&&!be(n[0])&&e.isBlock(n[0])},qt=(e,t,n)=>{let r;const o=Vt(e,n)?n.firstChild:n;if(((e,t)=>{Vt(e,t)&&e.remove(t.firstChild,!0)})(e,t),!Me(e,t,!0))for(;r=t.firstChild;)o.appendChild(r)},Gt=(e,t,n)=>{let r;const o=t.parentNode;if(!Le(e,t)||!Le(e,n))return;be(n.lastChild)&&(r=n.lastChild),o===n.lastChild&&De(o.previousSibling)&&e.remove(o.previousSibling);const i=n.lastChild;i&&De(i)&&t.hasChildNodes()&&e.remove(i),Me(e,n,!0)&&ee($.fromDom(n)),qt(e,t,n),r&&n.appendChild(r);const s=((e,t)=>{const n=e.dom,r=t.dom;return n!==r&&n.contains(r)})($.fromDom(n),$.fromDom(t))?e.getParents(t,be,n):[];e.remove(t),x(s,(t=>{Me(e,t)&&t!==e.getRoot()&&e.remove(t)}))},Kt=(e,t,n,r)=>{const o=e.dom;if(o.isEmpty(r))((e,t,n)=>{ee($.fromDom(n)),Gt(e.dom,t,n),e.selection.setCursorLocation(n,0)})(e,n,r);else{const i=Tt(t);Gt(o,n,r),e.selection.setRng(Ft(i))}},Xt=(e,t)=>{const n=e.dom,r=e.selection,o=r.getStart(),i=Ge(e,o),s=n.getParent(r.getStart(),\"LI\",i);if(s){const o=s.parentElement;if(o===e.getBody()&&Me(n,o))return!0;const a=je(r.getRng()),l=n.getParent(Ut(e,a,t,i),\"LI\",i);if(l&&l!==s)return e.undoManager.transact((()=>{var n,r;t?Kt(e,a,l,s):(null===(r=(n=s).parentNode)||void 0===r?void 0:r.firstChild)===n?At(e):((e,t,n,r)=>{const o=Tt(t);Gt(e.dom,n,r);const i=Ft(o);e.selection.setRng(i)})(e,a,s,l)})),!0;if(!l&&!t&&0===a.startOffset&&0===a.endOffset)return e.undoManager.transact((()=>{Mt(e)})),!0}return!1},Jt=(e,t)=>{const n=e.dom,r=e.selection.getStart(),o=Ge(e,r),i=n.getParent(r,n.isBlock,o);if(i&&n.isEmpty(i)){const r=je(e.selection.getRng()),s=n.getParent(Ut(e,r,t,o),\"LI\",o);if(s){const a=e=>b([\"td\",\"th\",\"caption\"],P(e)),l=e=>e.dom===o;return!!((e,t,n=d)=>B(e,t,n).getOr(e.isNone()&&t.isNone()))(K($.fromDom(s),a,l),K($.fromDom(r.startContainer),a,l),N)&&(e.undoManager.transact((()=>{((e,t,n)=>{const r=e.getParent(t.parentNode,e.isBlock,n);e.remove(t),r&&e.isEmpty(r)&&e.remove(r)})(n,i,o),Pt(n,s.parentNode),e.selection.select(s,!0),e.selection.collapse(t)})),!0)}}return!1},Qt=e=>{const t=e.selection.getStart(),n=Ge(e,t);return e.dom.getParent(t,\"LI,DT,DD\",n)||qe(e).length>0},Zt=(e,t)=>{const n=e.selection;return!nt(e,n.getNode())&&(n.isCollapsed()?((e,t)=>Xt(e,t)||Jt(e,t))(e,t):(e=>!!Qt(e)&&(e.undoManager.transact((()=>{e.execCommand(\"Delete\"),zt(e.dom,e.getBody())})),!0))(e))},en=e=>{const t=M(it(e).split(\"\")),n=w(t,((e,t)=>{const n=e.toUpperCase().charCodeAt(0)-\"A\".charCodeAt(0)+1;return Math.pow(26,t)*n}));return k(n,((e,t)=>e+t),0)},tn=e=>{if(--e<0)return\"\";{const t=e%26,n=Math.floor(e/26);return tn(n)+String.fromCharCode(\"A\".charCodeAt(0)+t)}},nn=e=>{const t=parseInt(e.start,10);return O(e.listStyleType,\"upper-alpha\")?tn(t):O(e.listStyleType,\"lower-alpha\")?tn(t).toLowerCase():e.start},rn=e=>{const t=Ue(e);we(t)&&!nt(e,t)&&e.windowManager.open({title:\"List Properties\",body:{type:\"panel\",items:[{type:\"input\",name:\"start\",label:\"Start list at number\",inputMode:\"numeric\"}]},initialData:{start:nn({start:e.dom.getAttrib(t,\"start\",\"1\"),listStyleType:p.from(e.dom.getStyle(t,\"list-style-type\"))})},buttons:[{type:\"cancel\",name:\"cancel\",text:\"Cancel\"},{type:\"submit\",name:\"save\",text:\"Save\",primary:!0}],onSubmit:t=>{(e=>{switch((e=>/^[0-9]+$/.test(e)?2:/^[A-Z]+$/.test(e)?0:(e=>/^[a-z]+$/.test(e))(e)?1:e.length>0?4:3)(e)){case 2:return p.some({listStyleType:p.none(),start:e});case 0:return p.some({listStyleType:p.some(\"upper-alpha\"),start:en(e).toString()});case 1:return p.some({listStyleType:p.some(\"lower-alpha\"),start:en(e).toString()});case 3:return p.some({listStyleType:p.none(),start:\"\"});case 4:return p.none()}})(t.getData().start).each((t=>{e.execCommand(\"mceListUpdate\",!1,{attrs:{start:\"1\"===t.start?\"\":t.start},styles:{\"list-style-type\":t.listStyleType.getOr(\"\")}})})),t.close()}})},on=(e,t)=>()=>{const n=Ue(e);return a(n)&&n.nodeName===t},sn=e=>{e.addCommand(\"mceListProps\",(()=>{rn(e)}))},an=e=>{e.on(\"BeforeExecCommand\",(t=>{const n=t.command.toLowerCase();\"indent\"===n?St(e):\"outdent\"===n&&At(e)})),e.addCommand(\"InsertUnorderedList\",((t,n)=>{jt(e,\"UL\",n)})),e.addCommand(\"InsertOrderedList\",((t,n)=>{jt(e,\"OL\",n)})),e.addCommand(\"InsertDefinitionList\",((t,n)=>{jt(e,\"DL\",n)})),e.addCommand(\"RemoveList\",(()=>{Mt(e)})),sn(e),e.addCommand(\"mceListUpdate\",((t,n)=>{o(n)&&((e,t)=>{const n=Ue(e);null===n||nt(e,n)||e.undoManager.transact((()=>{o(t.styles)&&e.dom.setStyles(n,t.styles),o(t.attrs)&&ae(t.attrs,((t,r)=>e.dom.setAttrib(n,r,t)))}))})(e,n)})),e.addQueryStateHandler(\"InsertUnorderedList\",on(e,\"UL\")),e.addQueryStateHandler(\"InsertOrderedList\",on(e,\"OL\")),e.addQueryStateHandler(\"InsertDefinitionList\",on(e,\"DL\"))},ln=e=>{Te(e)&&(e=>{e.on(\"keydown\",(t=>{t.keyCode!==oe.TAB||oe.metaKeyPressed(t)||e.undoManager.transact((()=>{(t.shiftKey?At(e):St(e))&&t.preventDefault()}))}))})(e),(e=>{e.on(\"ExecCommand\",(t=>{const n=t.command.toLowerCase();\"delete\"!==n&&\"forwarddelete\"!==n||!Qt(e)||zt(e.dom,e.getBody())})),e.on(\"keydown\",(t=>{t.keyCode===oe.BACKSPACE?Zt(e,!1)&&t.preventDefault():t.keyCode===oe.DELETE&&Zt(e,!0)&&t.preventDefault()}))})(e)},cn=(e,t)=>n=>rt(e,(r=>{n.setActive(et(r.parents,t)),n.setEnabled(!nt(e,r.element))})),un=(e,t)=>n=>rt(e,(r=>n.setEnabled(et(r.parents,t)&&!nt(e,r.element))));e.add(\"lists\",(e=>((e=>{(0,e.options.register)(\"lists_indent_on_tab\",{processor:\"boolean\",default:!0})})(e),e.hasPlugin(\"rtc\",!0)?sn(e):(ln(e),an(e)),(e=>{const t=t=>()=>e.execCommand(t);e.hasPlugin(\"advlist\")||(e.ui.registry.addToggleButton(\"numlist\",{icon:\"ordered-list\",active:!1,tooltip:\"Numbered list\",onAction:t(\"InsertOrderedList\"),onSetup:cn(e,\"OL\")}),e.ui.registry.addToggleButton(\"bullist\",{icon:\"unordered-list\",active:!1,tooltip:\"Bullet list\",onAction:t(\"InsertUnorderedList\"),onSetup:cn(e,\"UL\")}))})(e),(e=>{const t={text:\"List properties...\",icon:\"ordered-list\",onAction:()=>e.execCommand(\"mceListProps\"),onSetup:un(e,\"OL\")};e.ui.registry.addMenuItem(\"listprops\",t),e.ui.registry.addContextMenu(\"lists\",{update:t=>{const n=Ue(e,t);return we(n)?[\"listprops\"]:[]}})})(e),(e=>({backspaceDelete:t=>{Zt(e,t)}}))(e))))}()},8619:(e,t,n)=>{n(2590)},2590:()=>{!function(){\"use strict\";var e=tinymce.util.Tools.resolve(\"tinymce.PluginManager\");const t=e=>t=>(e=>{const t=typeof e;return null===e?\"null\":\"object\"===t&&Array.isArray(e)?\"array\":\"object\"===t&&(n=o=e,r=(i=String).prototype,r.isPrototypeOf(n)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===i.name)?\"string\":t;var n,r;var o,i,s})(t)===e,n=e=>t=>typeof t===e,r=t(\"string\"),o=t(\"array\"),i=n(\"boolean\"),s=(a=void 0,e=>a===e);var a;const l=e=>!(e=>null==e)(e),c=n(\"function\"),u=n(\"number\"),d=()=>{},h=e=>()=>e,m=e=>e,f=(e,t)=>e===t;function p(e,...t){return(...n)=>{const r=t.concat(n);return e.apply(null,r)}}const g=e=>{e()},v=h(!1),y=h(!0);class b{constructor(e,t){this.tag=e,this.value=t}static some(e){return new b(!0,e)}static none(){return b.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?b.some(e(this.value)):b.none()}bind(e){return this.tag?e(this.value):b.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:b.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:\"Called getOrDie on None\")}static from(e){return l(e)?b.some(e):b.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:\"none()\"}}b.singletonNone=new b(!1);const _=Object.keys,w=Object.hasOwnProperty,x=(e,t)=>{const n=_(e);for(let r=0,o=n.length;r<o;r++){const o=n[r];t(e[o],o)}},C=(e,t)=>{const n={};var r;return((e,t,n,r)=>{x(e,((e,o)=>{(t(e,o)?n:r)(e,o)}))})(e,t,(r=n,(e,t)=>{r[t]=e}),d),n},k=e=>((e,t)=>{const n=[];return x(e,((e,r)=>{n.push(t(e,r))})),n})(e,m),D=e=>_(e).length,S=(e,t)=>A(e,t)?b.from(e[t]):b.none(),A=(e,t)=>w.call(e,t),M=(e,t)=>A(e,t)&&void 0!==e[t]&&null!==e[t],L=Array.prototype.indexOf,E=Array.prototype.push,T=(e,t)=>((e,t)=>L.call(e,t))(e,t)>-1,F=(e,t)=>{for(let n=0,r=e.length;n<r;n++){if(t(e[n],n))return!0}return!1},O=(e,t)=>{const n=[];for(let r=0;r<e;r++)n.push(t(r));return n},B=(e,t)=>{const n=e.length,r=new Array(n);for(let o=0;o<n;o++){const n=e[o];r[o]=t(n,o)}return r},R=(e,t)=>{for(let n=0,r=e.length;n<r;n++){t(e[n],n)}},$=(e,t)=>{const n=[];for(let r=0,o=e.length;r<o;r++){const o=e[r];t(o,r)&&n.push(o)}return n},N=(e,t,n)=>(R(e,((e,r)=>{n=t(n,e,r)})),n),Y=(e,t)=>((e,t,n)=>{for(let r=0,o=e.length;r<o;r++){const o=e[r];if(t(o,r))return b.some(o);if(n(o,r))break}return b.none()})(e,t,v),P=(e,t)=>(e=>{const t=[];for(let n=0,r=e.length;n<r;++n){if(!o(e[n]))throw new Error(\"Arr.flatten item \"+n+\" was not an array, input: \"+e);E.apply(t,e[n])}return t})(B(e,t)),I=(e,t)=>{for(let n=0,r=e.length;n<r;++n){if(!0!==t(e[n],n))return!1}return!0},H=(e,t)=>t>=0&&t<e.length?b.some(e[t]):b.none(),j=(e,t)=>{for(let n=0;n<e.length;n++){const r=t(e[n],n);if(r.isSome())return r}return b.none()},W=e=>{if(null==e)throw new Error(\"Node cannot be null or undefined\");return{dom:e}},z={fromHtml:(e,t)=>{const n=(t||document).createElement(\"div\");if(n.innerHTML=e,!n.hasChildNodes()||n.childNodes.length>1){const t=\"HTML does not have a single root node\";throw console.error(t,e),new Error(t)}return W(n.childNodes[0])},fromTag:(e,t)=>{const n=(t||document).createElement(e);return W(n)},fromText:(e,t)=>{const n=(t||document).createTextNode(e);return W(n)},fromDom:W,fromPoint:(e,t,n)=>b.from(e.dom.elementFromPoint(t,n)).map(W)};\"undefined\"!=typeof window?window:Function(\"return this;\")();const U=e=>e.dom.nodeName.toLowerCase(),V=e=>e.dom.nodeType,q=e=>t=>V(t)===e,G=e=>8===V(e)||\"#comment\"===U(e),K=q(1),X=q(3),J=q(9),Q=q(11),Z=e=>t=>K(t)&&U(t)===e,ee=(e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error(\"Browser lacks native selectors\")}},te=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,ne=(e,t)=>e.dom===t.dom,re=ee,oe=e=>{return J(e)?e:(t=e,z.fromDom(t.dom.ownerDocument));var t},ie=e=>b.from(e.dom.parentNode).map(z.fromDom),se=(e,t)=>{const n=c(t)?t:v;let r=e.dom;const o=[];for(;null!==r.parentNode&&void 0!==r.parentNode;){const e=r.parentNode,t=z.fromDom(e);if(o.push(t),!0===n(t))break;r=e}return o},ae=e=>b.from(e.dom.previousSibling).map(z.fromDom),le=e=>b.from(e.dom.nextSibling).map(z.fromDom),ce=e=>B(e.dom.childNodes,z.fromDom),ue=e=>((e,t)=>{const n=e.dom.childNodes;return b.from(n[t]).map(z.fromDom)})(e,0),de=c(Element.prototype.attachShadow)&&c(Node.prototype.getRootNode)?e=>z.fromDom(e.dom.getRootNode()):oe,he=e=>{const t=de(e);return Q(n=t)&&l(n.dom.host)?b.some(t):b.none();var n},me=e=>z.fromDom(e.dom.host),fe=e=>{const t=X(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const n=t.ownerDocument;return he(z.fromDom(t)).fold((()=>n.body.contains(t)),(r=fe,o=me,e=>r(o(e))));var r,o},pe=(e,t)=>{let n=[];return R(ce(e),(e=>{t(e)&&(n=n.concat([e])),n=n.concat(pe(e,t))})),n},ge=(e,t)=>((e,t)=>$(ce(e),t))(e,(e=>ee(e,t))),ve=(e,t)=>((e,t)=>{const n=void 0===t?document:t.dom;return te(n)?[]:B(n.querySelectorAll(e),z.fromDom)})(t,e);const ye=(e,t,n)=>{let r=e.dom;const o=c(n)?n:v;for(;r.parentNode;){r=r.parentNode;const e=z.fromDom(r);if(t(e))return b.some(e);if(o(e))break}return b.none()},be=(e,t,n)=>ye(e,(e=>ee(e,t)),n),_e=(e,t)=>((e,t)=>Y(e.dom.childNodes,(e=>t(z.fromDom(e)))).map(z.fromDom))(e,(e=>ee(e,t))),we=(e,t)=>((e,t)=>{const n=void 0===t?document:t.dom;return te(n)?b.none():b.from(n.querySelector(e)).map(z.fromDom)})(t,e),xe=(e,t,n)=>((e,t,n,r,o)=>e(n,r)?b.some(n):c(o)&&o(n)?b.none():t(n,r,o))(((e,t)=>ee(e,t)),be,e,t,n),Ce=(e,t,n)=>{if(!(r(n)||i(n)||u(n)))throw console.error(\"Invalid call to Attribute.set. Key \",t,\":: Value \",n,\":: Element \",e),new Error(\"Attribute value was not simple\");e.setAttribute(t,n+\"\")},ke=(e,t,n)=>{Ce(e.dom,t,n)},De=(e,t)=>{const n=e.dom.getAttribute(t);return null===n?void 0:n},Se=(e,t)=>b.from(De(e,t)),Ae=(e,t)=>{e.dom.removeAttribute(t)},Me=(e,t,n=f)=>e.exists((e=>n(e,t))),Le=(e,t,n)=>e.isSome()&&t.isSome()?b.some(n(e.getOrDie(),t.getOrDie())):b.none(),Ee=(e,t)=>((e,t,n)=>\"\"===t||e.length>=t.length&&e.substr(n,n+t.length)===t)(e,t,0),Te=(Fe=/^\\s+|\\s+$/g,e=>e.replace(Fe,\"\"));var Fe;const Oe=e=>e.length>0,Be=(e,t=10)=>{const n=parseInt(e,t);return isNaN(n)?b.none():b.some(n)},Re=e=>void 0!==e.style&&c(e.style.getPropertyValue),$e=(e,t,n)=>{((e,t,n)=>{if(!r(n))throw console.error(\"Invalid call to CSS.set. Property \",t,\":: Value \",n,\":: Element \",e),new Error(\"CSS value must be a string: \"+n);Re(e)&&e.style.setProperty(t,n)})(e.dom,t,n)},Ne=(e,t)=>{const n=e.dom,r=window.getComputedStyle(n).getPropertyValue(t);return\"\"!==r||fe(e)?r:Ye(n,t)},Ye=(e,t)=>Re(e)?e.style.getPropertyValue(t):\"\",Pe=(e,t)=>{const n=e.dom,r=Ye(n,t);return b.from(r).filter((e=>e.length>0))},Ie=(e,t)=>{((e,t)=>{Re(e)&&e.style.removeProperty(t)})(e.dom,t),Me(Se(e,\"style\").map(Te),\"\")&&Ae(e,\"style\")},He=(e,t,n=0)=>Se(e,t).map((e=>parseInt(e,10))).getOr(n),je=(e,t)=>We(e,t,y),We=(e,t,n)=>P(ce(e),(e=>ee(e,t)?n(e)?[e]:[]:We(e,t,n))),ze=[\"tfoot\",\"thead\",\"tbody\",\"colgroup\"],Ue=(e,t,n)=>({element:e,rowspan:t,colspan:n}),Ve=(e,t,n)=>({element:e,cells:t,section:n}),qe=(e,t)=>((e,t,n=v)=>n(t)?b.none():T(e,U(t))?b.some(t):be(t,e.join(\",\"),(e=>ee(e,\"table\")||n(e))))([\"td\",\"th\"],e,t),Ge=(e,t)=>xe(e,\"table\",t),Ke=e=>je(e,\"tr\"),Xe=e=>Ge(e).fold(h([]),(e=>ge(e,\"colgroup\"))),Je=(e,t)=>B(e,(e=>{if(\"colgroup\"===U(e)){const t=B((e=>ee(e,\"colgroup\")?ge(e,\"col\"):P(Xe(e),(e=>ge(e,\"col\"))))(e),(e=>{const t=He(e,\"span\",1);return Ue(e,1,t)}));return Ve(e,t,\"colgroup\")}{const n=B((e=>je(e,\"th,td\"))(e),(e=>{const t=He(e,\"rowspan\",1),n=He(e,\"colspan\",1);return Ue(e,t,n)}));return Ve(e,n,t(e))}})),Qe=e=>ie(e).map((e=>{const t=U(e);return(e=>T(ze,e))(t)?t:\"tbody\"})).getOr(\"tbody\"),Ze=e=>Se(e,\"data-snooker-locked-cols\").bind((e=>b.from(e.match(/\\d+/g)))).map((e=>((e,t)=>{const n={};for(let r=0,o=e.length;r<o;r++){const o=e[r];n[String(o)]=t(o,r)}return n})(e,y))),et=(e,t)=>e+\",\"+t,tt=(e,t)=>{const n=P(e.all,(e=>e.cells));return $(n,t)},nt=e=>{const t={},n=[];var r;const o=(r=e,H(r,0)).map((e=>e.element)).bind(Ge).bind(Ze).getOr({});let i=0,s=0,a=0;const{pass:l,fail:c}=((e,t)=>{const n=[],r=[];for(let o=0,i=e.length;o<i;o++){const i=e[o];(t(i,o)?n:r).push(i)}return{pass:n,fail:r}})(e,(e=>\"colgroup\"===e.section));R(c,(e=>{const r=[];R(e.cells,(e=>{let n=0;for(;void 0!==t[et(a,n)];)n++;const i=M(o,n.toString()),l=((e,t,n,r,o,i)=>({element:e,rowspan:t,colspan:n,row:r,column:o,isLocked:i}))(e.element,e.rowspan,e.colspan,a,n,i);for(let r=0;r<e.colspan;r++)for(let o=0;o<e.rowspan;o++){const e=n+r,i=et(a+o,e);t[i]=l,s=Math.max(s,e+1)}r.push(l)})),i++,n.push(Ve(e.element,r,e.section)),a++}));const{columns:u,colgroups:d}=(e=>H(e,e.length-1))(l).map((e=>{const t=(e=>{const t={};let n=0;return R(e.cells,(e=>{const r=e.colspan;O(r,(o=>{const i=n+o;t[i]=((e,t,n)=>({element:e,colspan:t,column:n}))(e.element,r,i)})),n+=r})),t})(e),n=((e,t)=>({element:e,columns:t}))(e.element,k(t));return{colgroups:[n],columns:t}})).getOrThunk((()=>({colgroups:[],columns:{}}))),h=((e,t)=>({rows:e,columns:t}))(i,s);return{grid:h,access:t,all:n,columns:u,colgroups:d}},rt=e=>{const t=(e=>{const t=Ke(e),n=[...Xe(e),...t];return Je(n,Qe)})(e);return nt(t)},ot=(e,t,n)=>b.from(e.access[et(t,n)]),it=(e,t,n)=>{const r=tt(e,(e=>n(t,e.element)));return r.length>0?b.some(r[0]):b.none()},st=e=>P(e.all,(e=>e.cells)),at=(e,t)=>b.from(e.columns[t]);var lt=tinymce.util.Tools.resolve(\"tinymce.util.Tools\");const ct=(e,t,n)=>{const r=e.select(\"td,th\",t);let o;for(let t=0;t<r.length;t++){const i=e.getStyle(r[t],n);if(s(o)&&(o=i),o!==i)return\"\"}return o},ut=(e,t,n)=>{lt.each(\"left center right\".split(\" \"),(r=>{r!==n&&e.formatter.remove(\"align\"+r,{},t)})),n&&e.formatter.apply(\"align\"+n,{},t)},dt=(e,t,n)=>{e.dispatch(\"TableModified\",{...n,table:t})},ht=(e,t)=>(e=>{const t=parseFloat(e);return isNaN(t)?b.none():b.some(t)})(e).getOr(t),mt=(e,t,n)=>ht(Ne(e,t),n),ft=(e,t)=>{const n=e.dom,r=n.getBoundingClientRect().width||n.offsetWidth;return\"border-box\"===t?r:((e,t,n,r)=>t-mt(e,`padding-${n}`,0)-mt(e,`padding-${r}`,0)-mt(e,`border-${n}-width`,0)-mt(e,`border-${r}-width`,0))(e,r,\"left\",\"right\")},pt=e=>ft(e,\"content-box\");var gt=tinymce.util.Tools.resolve(\"tinymce.Env\");const vt=O(5,(e=>{const t=`${e+1}px`;return{title:t,value:t}})),yt=B([\"Solid\",\"Dotted\",\"Dashed\",\"Double\",\"Groove\",\"Ridge\",\"Inset\",\"Outset\",\"None\",\"Hidden\"],(e=>({title:e,value:e.toLowerCase()}))),bt=\"100%\",_t=e=>{var t;const n=e.dom,r=null!==(t=n.getParent(e.selection.getStart(),n.isBlock))&&void 0!==t?t:e.getBody();return pt(z.fromDom(r))+\"px\"},wt=e=>t=>t.options.get(e),xt=wt(\"table_sizing_mode\"),Ct=wt(\"table_border_widths\"),kt=wt(\"table_border_styles\"),Dt=wt(\"table_cell_advtab\"),St=wt(\"table_row_advtab\"),At=wt(\"table_advtab\"),Mt=wt(\"table_appearance_options\"),Lt=wt(\"table_grid\"),Et=wt(\"table_style_by_css\"),Tt=wt(\"table_cell_class_list\"),Ft=wt(\"table_row_class_list\"),Ot=wt(\"table_class_list\"),Bt=wt(\"table_toolbar\"),Rt=wt(\"table_background_color_map\"),$t=wt(\"table_border_color_map\"),Nt=e=>\"fixed\"===xt(e),Yt=e=>\"responsive\"===xt(e),Pt=e=>{const t=e.options,n=t.get(\"table_default_styles\");return t.isSet(\"table_default_styles\")?n:((e,t)=>Yt(e)||!Et(e)?t:Nt(e)?{...t,width:_t(e)}:{...t,width:bt})(e,n)},It=e=>{const t=e.options,n=t.get(\"table_default_attributes\");return t.isSet(\"table_default_attributes\")?n:((e,t)=>Yt(e)||Et(e)?t:Nt(e)?{...t,width:_t(e)}:{...t,width:bt})(e,n)},Ht=e=>t=>ne(t,(e=>z.fromDom(e.getBody()))(e)),jt=e=>/^\\d+(\\.\\d+)?$/.test(e)?e+\"px\":e,Wt=e=>z.fromDom(e.selection.getStart()),zt=(e,t)=>t.column>=e.startCol&&t.column+t.colspan-1<=e.finishCol&&t.row>=e.startRow&&t.row+t.rowspan-1<=e.finishRow,Ut=(e,t,n)=>{const r=it(e,t,ne),o=it(e,n,ne);return r.bind((e=>o.map((t=>{return n=e,r=t,o=Math.min(n.row,r.row),i=Math.min(n.column,r.column),s=Math.max(n.row+n.rowspan-1,r.row+r.rowspan-1),a=Math.max(n.column+n.colspan-1,r.column+r.colspan-1),{startRow:o,startCol:i,finishRow:s,finishCol:a};var n,r,o,i,s,a}))))},Vt=(e,t,n)=>Ut(e,t,n).bind((t=>((e,t)=>{let n=!0;const r=p(zt,t);for(let o=t.startRow;o<=t.finishRow;o++)for(let i=t.startCol;i<=t.finishCol;i++)n=n&&ot(e,o,i).exists(r);return n?b.some(t):b.none()})(e,t))),qt=rt,Gt=(e,t)=>{ie(e).each((n=>{n.dom.insertBefore(t.dom,e.dom)}))},Kt=(e,t)=>{le(e).fold((()=>{ie(e).each((e=>{Jt(e,t)}))}),(e=>{Gt(e,t)}))},Xt=(e,t)=>{ue(e).fold((()=>{Jt(e,t)}),(n=>{e.dom.insertBefore(t.dom,n.dom)}))},Jt=(e,t)=>{e.dom.appendChild(t.dom)},Qt=(e,t)=>{Gt(e,t),Jt(t,e)},Zt=(e,t)=>{R(t,((n,r)=>{const o=0===r?e:t[r-1];Kt(o,n)}))},en=(e,t)=>{R(t,(t=>{Jt(e,t)}))},tn=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},nn=e=>{const t=ce(e);t.length>0&&Zt(e,t),tn(e)},rn=((e,t)=>{const n=t=>e(t)?b.from(t.dom.nodeValue):b.none();return{get:r=>{if(!e(r))throw new Error(\"Can only get \"+t+\" value of a \"+t+\" node\");return n(r).getOr(\"\")},getOption:n,set:(n,r)=>{if(!e(n))throw new Error(\"Can only set raw \"+t+\" value of a \"+t+\" node\");n.dom.nodeValue=r}}})(X,\"text\"),on=e=>rn.get(e),sn=(e,t)=>rn.set(e,t);var an=[\"body\",\"p\",\"div\",\"article\",\"aside\",\"figcaption\",\"figure\",\"footer\",\"header\",\"nav\",\"section\",\"ol\",\"ul\",\"li\",\"table\",\"thead\",\"tbody\",\"tfoot\",\"caption\",\"tr\",\"td\",\"th\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"pre\",\"address\"];const ln=(e,t,n,r)=>{const o=t(e,n);return i=(n,r)=>{const o=t(e,r);return cn(e,n,o)},s=o,((e,t)=>{for(let n=e.length-1;n>=0;n--)t(e[n],n)})(r,((e,t)=>{s=i(s,e,t)})),s;var i,s},cn=(e,t,n)=>t.bind((t=>n.filter(p(e.eq,t)))),un=(e,t,n)=>n.length>0?((e,t,n,r)=>r(e,t,n[0],n.slice(1)))(e,t,n,ln):b.none(),dn={up:h({selector:be,closest:xe,predicate:ye,all:se}),down:h({selector:ve,predicate:pe}),styles:h({get:Ne,getRaw:Pe,set:$e,remove:Ie}),attrs:h({get:De,set:ke,remove:Ae,copyTo:(e,t)=>{((e,t)=>{const n=e.dom;x(t,((e,t)=>{Ce(n,t,e)}))})(t,N(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}))}}),insert:h({before:Gt,after:Kt,afterAll:Zt,append:Jt,appendAll:en,prepend:Xt,wrap:Qt}),remove:h({unwrap:nn,remove:tn}),create:h({nu:z.fromTag,clone:e=>z.fromDom(e.dom.cloneNode(!1)),text:z.fromText}),query:h({comparePosition:(e,t)=>e.dom.compareDocumentPosition(t.dom),prevSibling:ae,nextSibling:le}),property:h({children:ce,name:U,parent:ie,document:e=>oe(e).dom,isText:X,isComment:G,isElement:K,isSpecial:e=>{const t=U(e);return T([\"script\",\"noscript\",\"iframe\",\"noframes\",\"noembed\",\"title\",\"style\",\"textarea\",\"xmp\"],t)},getLanguage:e=>K(e)?Se(e,\"lang\"):b.none(),getText:on,setText:sn,isBoundary:e=>!!K(e)&&(\"body\"===U(e)||T(an,U(e))),isEmptyTag:e=>!!K(e)&&T([\"br\",\"img\",\"hr\",\"input\"],U(e)),isNonEditable:e=>K(e)&&\"false\"===De(e,\"contenteditable\")}),eq:ne,is:re},hn=e=>be(e,\"table\"),mn=(e,t,n)=>we(e,t).bind((t=>we(e,n).bind((e=>{return(n=hn,r=[t,e],un(dn,((e,t)=>n(t)),r)).map((n=>({first:t,last:e,table:n})));var n,r})))),fn=(e,t)=>((e,t)=>{const n=ve(e,t);return n.length>0?b.some(n):b.none()})(e,t),pn=(e,t,n)=>mn(e,t,n).bind((t=>{const n=t=>ne(e,t),r=\"thead,tfoot,tbody,table\",o=be(t.first,r,n),i=be(t.last,r,n);return o.bind((e=>i.bind((n=>ne(e,n)?((e,t,n)=>{const r=qt(e);return Vt(r,t,n)})(t.table,t.first,t.last):b.none()))))})),gn=e=>B(e,z.fromDom),vn=\"data-mce-selected\",yn=\"data-mce-first-selected\",bn=\"data-mce-last-selected\",_n={selected:vn,selectedSelector:\"td[data-mce-selected],th[data-mce-selected]\",firstSelected:yn,firstSelectedSelector:\"td[data-mce-first-selected],th[data-mce-first-selected]\",lastSelected:bn,lastSelectedSelector:\"td[data-mce-last-selected],th[data-mce-last-selected]\"},wn=e=>(t,n)=>{const r=U(t),o=\"col\"===r||\"colgroup\"===r?Ge(i=t).bind((e=>fn(e,_n.firstSelectedSelector))).fold(h(i),(e=>e[0])):t;var i;return xe(o,e,n)},xn=wn(\"th,td,caption\"),Cn=wn(\"th,td\"),kn=e=>gn(e.model.table.getSelectedCells()),Dn=(e,t)=>{const n=Cn(e),r=n.bind((e=>Ge(e))).map((e=>Ke(e)));return Le(n,r,((e,n)=>$(n,(n=>F(gn(n.dom.cells),(n=>\"1\"===De(n,t)||ne(n,e))))))).getOr([])},Sn=[{text:\"None\",value:\"\"},{text:\"Top\",value:\"top\"},{text:\"Middle\",value:\"middle\"},{text:\"Bottom\",value:\"bottom\"}],An=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,Mn=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,Ln=e=>{return(t=e,n=\"#\",Ee(t,n)?((e,t)=>e.substring(t))(t,n.length):t).toUpperCase();var t,n},En=e=>(e=>An.test(e)||Mn.test(e))(e)?b.some({value:Ln(e)}):b.none(),Tn=e=>{const t=e.toString(16);return(1===t.length?\"0\"+t:t).toUpperCase()},Fn=e=>(e=>({value:e}))(Tn(e.red)+Tn(e.green)+Tn(e.blue)),On=/^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i,Bn=/^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i,Rn=(e,t,n,r)=>({red:e,green:t,blue:n,alpha:r}),$n=(e,t,n,r)=>{const o=parseInt(e,10),i=parseInt(t,10),s=parseInt(n,10),a=parseFloat(r);return Rn(o,i,s,a)},Nn=e=>{if(\"transparent\"===e)return b.some(Rn(0,0,0,0));const t=On.exec(e);if(null!==t)return b.some($n(t[1],t[2],t[3],\"1\"));const n=Bn.exec(e);return null!==n?b.some($n(n[1],n[2],n[3],n[4])):b.none()},Yn=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}},Pn=()=>(e=>{const t=Yn(b.none()),n=()=>t.get().each(e);return{clear:()=>{n(),t.set(b.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{n(),t.set(b.some(e))}}})((e=>e.unbind())),In=(e,t,n)=>r=>{const o=Pn(),i=!Oe(n);const s=()=>{const s=kn(e),a=r=>e.formatter.match(t,{value:n},r.dom,i);i?(r.setActive(!F(s,a)),o.set(e.formatter.formatChanged(t,(e=>r.setActive(!e)),!0))):(r.setActive(I(s,a)),o.set(e.formatter.formatChanged(t,r.setActive,!1,{value:n})))};return e.initialized?s():e.on(\"init\",s),o.clear},Hn=e=>M(e,\"menu\"),jn=e=>B(e,(e=>{const t=e.text||e.title||\"\";return Hn(e)?{text:t,items:jn(e.menu)}:{text:t,value:e.value}})),Wn=(e,t,n,r)=>B(t,(t=>{const o=t.text||t.title;return Hn(t)?{type:\"nestedmenuitem\",text:o,getSubmenuItems:()=>Wn(e,t.menu,n,r)}:{text:o,type:\"togglemenuitem\",onAction:()=>r(t.value),onSetup:In(e,n,t.value)}})),zn=(e,t)=>n=>{e.execCommand(\"mceTableApplyCellStyle\",!1,{[t]:n})},Un=e=>P(e,(e=>Hn(e)?[{...e,menu:Un(e.menu)}]:Oe(e.value)?[e]:[])),Vn=(e,t,n,r)=>o=>o(Wn(e,t,n,r)),qn=(e,t,n)=>{const r=B(t,(e=>{return{text:e.title,value:\"#\"+(t=e.value,En(t).orThunk((()=>Nn(t).map(Fn))).getOrThunk((()=>{const e=document.createElement(\"canvas\");e.height=1,e.width=1;const n=e.getContext(\"2d\");n.clearRect(0,0,e.width,e.height),n.fillStyle=\"#FFFFFF\",n.fillStyle=t,n.fillRect(0,0,1,1);const r=n.getImageData(0,0,1,1).data,o=r[0],i=r[1],s=r[2],a=r[3];return Fn(Rn(o,i,s,a))}))).value,type:\"choiceitem\"};var t}));return[{type:\"fancymenuitem\",fancytype:\"colorswatch\",initData:{colors:r.length>0?r:void 0,allowCustomColors:!1},onAction:t=>{const r=\"remove\"===t.value?\"\":t.value;e.execCommand(\"mceTableApplyCellStyle\",!1,{[n]:r})}}]},Gn=e=>()=>{const t=\"header\"===e.queryCommandValue(\"mceTableRowType\")?\"body\":\"header\";e.execCommand(\"mceTableRowType\",!1,{type:t})},Kn=e=>()=>{const t=\"th\"===e.queryCommandValue(\"mceTableColType\")?\"td\":\"th\";e.execCommand(\"mceTableColType\",!1,{type:t})},Xn=[{name:\"width\",type:\"input\",label:\"Width\"},{name:\"height\",type:\"input\",label:\"Height\"},{name:\"celltype\",type:\"listbox\",label:\"Cell type\",items:[{text:\"Cell\",value:\"td\"},{text:\"Header cell\",value:\"th\"}]},{name:\"scope\",type:\"listbox\",label:\"Scope\",items:[{text:\"None\",value:\"\"},{text:\"Row\",value:\"row\"},{text:\"Column\",value:\"col\"},{text:\"Row group\",value:\"rowgroup\"},{text:\"Column group\",value:\"colgroup\"}]},{name:\"halign\",type:\"listbox\",label:\"Horizontal align\",items:[{text:\"None\",value:\"\"},{text:\"Left\",value:\"left\"},{text:\"Center\",value:\"center\"},{text:\"Right\",value:\"right\"}]},{name:\"valign\",type:\"listbox\",label:\"Vertical align\",items:Sn}],Jn=e=>Xn.concat((e=>{const t=jn(Tt(e));return t.length>0?b.some({name:\"class\",type:\"listbox\",label:\"Class\",items:t}):b.none()})(e).toArray()),Qn=(e,t)=>{const n=[{name:\"borderstyle\",type:\"listbox\",label:\"Border style\",items:[{text:\"Select...\",value:\"\"}].concat(jn(kt(e)))},{name:\"bordercolor\",type:\"colorinput\",label:\"Border color\"},{name:\"backgroundcolor\",type:\"colorinput\",label:\"Background color\"}];return{title:\"Advanced\",name:\"advanced\",items:\"cell\"===t?[{name:\"borderwidth\",type:\"input\",label:\"Border width\"}].concat(n):n}},Zn=(e,t)=>{const n=e.dom;return{setAttrib:(e,r)=>{n.setAttrib(t,e,r)},setStyle:(e,r)=>{n.setStyle(t,e,r)},setFormat:(n,r)=>{\"\"===r?e.formatter.remove(n,{value:null},t,!0):e.formatter.apply(n,{value:r},t)}}},er=Z(\"th\"),tr=(e,t)=>e&&t?\"sectionCells\":e?\"section\":\"cells\",nr=e=>{const t=$(e,(e=>er(e.element)));return 0===t.length?b.some(\"td\"):t.length===e.length?b.some(\"th\"):b.none()},rr=e=>{const t=B(e,(e=>(e=>{const t=\"thead\"===e.section,n=Me(nr(e.cells),\"th\");return\"tfoot\"===e.section?{type:\"footer\"}:t||n?{type:\"header\",subType:tr(t,n)}:{type:\"body\"}})(e).type)),n=T(t,\"header\"),r=T(t,\"footer\");if(n||r){const e=T(t,\"body\");return!n||e||r?n||e||!r?b.none():b.some(\"footer\"):b.some(\"header\")}return b.some(\"body\")},or=(e,t)=>j(e.all,(e=>Y(e.cells,(e=>ne(t,e.element))))),ir=(e,t,n)=>{const r=(e=>{const t=[],n=e=>{t.push(e)};for(let t=0;t<e.length;t++)e[t].each(n);return t})(B(t.selection,(t=>qe(t).bind((t=>or(e,t))).filter(n))));return((e,t)=>e?b.some(t):b.none())(r.length>0,r)},sr=(e,t)=>ir(e,t,y),ar=(e,t)=>I(t,(t=>((e,t)=>or(e,t).exists((e=>!e.isLocked)))(e,t))),lr=(e,t)=>((e,t)=>t.mergable)(0,t).filter((t=>ar(e,t.cells))),cr=(e,t)=>((e,t)=>t.unmergable)(0,t).filter((t=>ar(e,t))),ur=e=>{if(!o(e))throw new Error(\"cases must be an array\");if(0===e.length)throw new Error(\"there must be at least one case\");const t=[],n={};return R(e,((r,i)=>{const s=_(r);if(1!==s.length)throw new Error(\"one and only one name per case\");const a=s[0],l=r[a];if(void 0!==n[a])throw new Error(\"duplicate key detected:\"+a);if(\"cata\"===a)throw new Error(\"cannot have a case named cata (sorry)\");if(!o(l))throw new Error(\"case arguments must be an array\");t.push(a),n[a]=(...n)=>{const r=n.length;if(r!==l.length)throw new Error(\"Wrong number of arguments to case \"+a+\". Expected \"+l.length+\" (\"+l+\"), got \"+r);return{fold:(...t)=>{if(t.length!==e.length)throw new Error(\"Wrong number of arguments to fold. Expected \"+e.length+\", got \"+t.length);return t[i].apply(null,n)},match:e=>{const r=_(e);if(t.length!==r.length)throw new Error(\"Wrong number of arguments to match. Expected: \"+t.join(\",\")+\"\\nActual: \"+r.join(\",\"));if(!I(t,(e=>T(r,e))))throw new Error(\"Not all branches were specified when using match. Specified: \"+r.join(\", \")+\"\\nRequired: \"+t.join(\", \"));return e[a].apply(null,n)},log:e=>{console.log(e,{constructors:t,constructor:a,params:n})}}}})),n},dr=(ur([{none:[]},{only:[\"index\"]},{left:[\"index\",\"next\"]},{middle:[\"prev\",\"index\",\"next\"]},{right:[\"prev\",\"index\"]}]),(e,t)=>{const n=rt(e);return sr(n,t).bind((e=>{const t=e[e.length-1],r=e[0].row,o=t.row+t.rowspan,i=n.all.slice(r,o);return rr(i)})).getOr(\"\")}),hr=e=>{return Ee(e,\"rgb\")?Nn(t=e).map(Fn).map((e=>\"#\"+e.value)).getOr(t):e;var t},mr=e=>{const t=z.fromDom(e);return{borderwidth:Pe(t,\"border-width\").getOr(\"\"),borderstyle:Pe(t,\"border-style\").getOr(\"\"),bordercolor:Pe(t,\"border-color\").map(hr).getOr(\"\"),backgroundcolor:Pe(t,\"background-color\").map(hr).getOr(\"\")}},fr=e=>{const t=e[0],n=e.slice(1);return R(n,(e=>{R(_(t),(n=>{x(e,((e,r)=>{const o=t[n];\"\"!==o&&n===r&&o!==e&&(t[n]=\"\")}))}))})),t},pr=(e,t,n,r)=>Y(e,(e=>!s(n.formatter.matchNode(r,t+e)))).getOr(\"\"),gr=p(pr,[\"left\",\"center\",\"right\"],\"align\"),vr=p(pr,[\"top\",\"middle\",\"bottom\"],\"valign\"),yr=e=>Ge(z.fromDom(e)).map((t=>{const n={selection:gn(e.cells)};return dr(t,n)})).getOr(\"\"),br=(e,t)=>{const n=rt(e),r=st(n),o=$(r,(e=>F(t,(t=>ne(e.element,t)))));return B(o,(e=>({element:e.element.dom,column:at(n,e.column).map((e=>e.element.dom))})))},_r=(e,t,n,r)=>{const o=1===t.length;R(t,(t=>{const i=t.element,s=o?y:r,a=Zn(e,i);((e,t,n,r)=>{r(\"scope\")&&e.setAttrib(\"scope\",n.scope),r(\"class\")&&e.setAttrib(\"class\",n.class),r(\"height\")&&e.setStyle(\"height\",jt(n.height)),r(\"width\")&&t.setStyle(\"width\",jt(n.width))})(a,t.column.map((t=>Zn(e,t))).getOr(a),n,s),Dt(e)&&((e,t,n)=>{n(\"backgroundcolor\")&&e.setFormat(\"tablecellbackgroundcolor\",t.backgroundcolor),n(\"bordercolor\")&&e.setFormat(\"tablecellbordercolor\",t.bordercolor),n(\"borderstyle\")&&e.setFormat(\"tablecellborderstyle\",t.borderstyle),n(\"borderwidth\")&&e.setFormat(\"tablecellborderwidth\",jt(t.borderwidth))})(a,n,s),r(\"halign\")&&ut(e,i,n.halign),r(\"valign\")&&((e,t,n)=>{lt.each(\"top middle bottom\".split(\" \"),(r=>{r!==n&&e.formatter.remove(\"valign\"+r,{},t)})),n&&e.formatter.apply(\"valign\"+n,{},t)})(e,i,n.valign)}))},wr=(e,t,n,r)=>{const o=r.getData();r.close(),e.undoManager.transact((()=>{((e,t,n,r)=>{const o=C(r,((e,t)=>n[t]!==e));D(o)>0&&t.length>=1&&Ge(t[0]).each((n=>{const i=br(n,t),s=D(C(o,((e,t)=>\"scope\"!==t&&\"celltype\"!==t)))>0,a=A(o,\"celltype\");(s||A(o,\"scope\"))&&_r(e,i,r,p(A,o)),a&&((e,t)=>{e.execCommand(\"mceTableCellType\",!1,{type:t.celltype,no_events:!0})})(e,r),dt(e,n.dom,{structure:a,style:s})}))})(e,t,n,o),e.focus()}))},xr=(e,t)=>{const n=Ge(t[0]).map((n=>B(br(n,t),(t=>((e,t,n,r)=>{const o=e.dom,i=(e,t)=>o.getStyle(e,t)||o.getAttrib(e,t);return{width:i(r.getOr(t),\"width\"),height:i(t,\"height\"),scope:o.getAttrib(t,\"scope\"),celltype:(s=t,s.nodeName.toLowerCase()),class:o.getAttrib(t,\"class\",\"\"),halign:gr(e,t),valign:vr(e,t),...n?mr(t):{}};var s})(e,t.element,Dt(e),t.column)))));return fr(n.getOrDie())},Cr=e=>{const t=kn(e);if(0===t.length)return;const n=xr(e,t),r={type:\"tabpanel\",tabs:[{title:\"General\",name:\"general\",items:Jn(e)},Qn(e,\"cell\")]},o={type:\"panel\",items:[{type:\"grid\",columns:2,items:Jn(e)}]};e.windowManager.open({title:\"Cell Properties\",size:\"normal\",body:Dt(e)?r:o,buttons:[{type:\"cancel\",name:\"cancel\",text:\"Cancel\"},{type:\"submit\",name:\"save\",text:\"Save\",primary:!0}],initialData:n,onSubmit:p(wr,e,t,n)})},kr=[{type:\"listbox\",name:\"type\",label:\"Row type\",items:[{text:\"Header\",value:\"header\"},{text:\"Body\",value:\"body\"},{text:\"Footer\",value:\"footer\"}]},{type:\"listbox\",name:\"align\",label:\"Alignment\",items:[{text:\"None\",value:\"\"},{text:\"Left\",value:\"left\"},{text:\"Center\",value:\"center\"},{text:\"Right\",value:\"right\"}]},{label:\"Height\",name:\"height\",type:\"input\"}],Dr=e=>kr.concat((e=>{const t=jn(Ft(e));return t.length>0?b.some({name:\"class\",type:\"listbox\",label:\"Class\",items:t}):b.none()})(e).toArray()),Sr=(e,t,n,r)=>{const o=1===t.length?y:r;R(t,(t=>{const i=Zn(e,t);((e,t,n)=>{n(\"class\")&&e.setAttrib(\"class\",t.class),n(\"height\")&&e.setStyle(\"height\",jt(t.height))})(i,n,o),St(e)&&((e,t,n)=>{n(\"backgroundcolor\")&&e.setStyle(\"background-color\",t.backgroundcolor),n(\"bordercolor\")&&e.setStyle(\"border-color\",t.bordercolor),n(\"borderstyle\")&&e.setStyle(\"border-style\",t.borderstyle)})(i,n,o),r(\"align\")&&ut(e,t,n.align)}))},Ar=(e,t,n,r)=>{const o=r.getData();r.close(),e.undoManager.transact((()=>{((e,t,n,r)=>{const o=C(r,((e,t)=>n[t]!==e));if(D(o)>0){const n=A(o,\"type\"),i=!n||D(o)>1;i&&Sr(e,t,r,p(A,o)),n&&((e,t)=>{e.execCommand(\"mceTableRowType\",!1,{type:t.type,no_events:!0})})(e,r),Ge(z.fromDom(t[0])).each((t=>dt(e,t.dom,{structure:n,style:i})))}})(e,t,n,o),e.focus()}))},Mr=e=>{const t=Dn(Wt(e),_n.selected);if(0===t.length)return;const n=B(t,(t=>((e,t,n)=>{const r=e.dom;return{height:r.getStyle(t,\"height\")||r.getAttrib(t,\"height\"),class:r.getAttrib(t,\"class\",\"\"),type:yr(t),align:gr(e,t),...n?mr(t):{}}})(e,t.dom,St(e)))),r=fr(n),o={type:\"tabpanel\",tabs:[{title:\"General\",name:\"general\",items:Dr(e)},Qn(e,\"row\")]},i={type:\"panel\",items:[{type:\"grid\",columns:2,items:Dr(e)}]};e.windowManager.open({title:\"Row Properties\",size:\"normal\",body:St(e)?o:i,buttons:[{type:\"cancel\",name:\"cancel\",text:\"Cancel\"},{type:\"submit\",name:\"save\",text:\"Save\",primary:!0}],initialData:r,onSubmit:p(Ar,e,B(t,(e=>e.dom)),r)})},Lr=(e,t,n)=>{const r=n?[{type:\"input\",name:\"cols\",label:\"Cols\",inputMode:\"numeric\"},{type:\"input\",name:\"rows\",label:\"Rows\",inputMode:\"numeric\"}]:[],o=Mt(e)?[{type:\"input\",name:\"cellspacing\",label:\"Cell spacing\",inputMode:\"numeric\"},{type:\"input\",name:\"cellpadding\",label:\"Cell padding\",inputMode:\"numeric\"},{type:\"input\",name:\"border\",label:\"Border width\"},{type:\"label\",label:\"Caption\",items:[{type:\"checkbox\",name:\"caption\",label:\"Show caption\"}]}]:[],i=t.length>0?[{type:\"listbox\",name:\"class\",label:\"Class\",items:t}]:[];return r.concat([{type:\"input\",name:\"width\",label:\"Width\"},{type:\"input\",name:\"height\",label:\"Height\"}]).concat(o).concat([{type:\"listbox\",name:\"align\",label:\"Alignment\",items:[{text:\"None\",value:\"\"},{text:\"Left\",value:\"left\"},{text:\"Center\",value:\"center\"},{text:\"Right\",value:\"right\"}]}]).concat(i)},Er=(e,t,n,o)=>{if(\"TD\"===t.tagName||\"TH\"===t.tagName)r(n)&&l(o)?e.setStyle(t,n,o):e.setStyles(t,n);else if(t.children)for(let r=0;r<t.children.length;r++)Er(e,t.children[r],n,o)},Tr=(e,t,n,r)=>{const o=e.dom,i=r.getData(),a=C(i,((e,t)=>n[t]!==e));r.close(),\"\"===i.class&&delete i.class,e.undoManager.transact((()=>{if(!t){const n=Be(i.cols).getOr(1),r=Be(i.rows).getOr(1);e.execCommand(\"mceInsertTable\",!1,{rows:r,columns:n}),t=Cn(Wt(e),Ht(e)).bind((t=>Ge(t,Ht(e)))).map((e=>e.dom)).getOrDie()}if(D(a)>0){((e,t,n)=>{const r=e.dom,o={},i={};if(s(n.class)||(o.class=n.class),i.height=jt(n.height),Et(e)?i.width=jt(n.width):r.getAttrib(t,\"width\")&&(o.width=(e=>e?e.replace(/px$/,\"\"):\"\")(n.width)),Et(e)?(i[\"border-width\"]=jt(n.border),i[\"border-spacing\"]=jt(n.cellspacing)):(o.border=n.border,o.cellpadding=n.cellpadding,o.cellspacing=n.cellspacing),Et(e)&&t.children)for(let o=0;o<t.children.length;o++)Er(r,t.children[o],{\"border-width\":jt(n.border),padding:jt(n.cellpadding)}),At(e)&&Er(r,t.children[o],{\"border-color\":n.bordercolor});if(At(e)){const e=n;i[\"background-color\"]=e.backgroundcolor,i[\"border-color\"]=e.bordercolor,i[\"border-style\"]=e.borderstyle}o.style=r.serializeStyle({...Pt(e),...i}),r.setAttribs(t,{...It(e),...o})})(e,t,i);const n=o.select(\"caption\",t)[0];(n&&!i.caption||!n&&i.caption)&&e.execCommand(\"mceTableToggleCaption\"),ut(e,t,i.align)}if(e.focus(),e.addVisual(),D(a)>0){const n=A(a,\"caption\"),r=!n||D(a)>1;dt(e,t,{structure:n,style:r})}}))},Fr=(e,t)=>{const n=e.dom;let r,o=((e,t)=>{const n=Pt(e),r=It(e),o=t?{borderstyle:S(n,\"border-style\").getOr(\"\"),bordercolor:hr(S(n,\"border-color\").getOr(\"\")),backgroundcolor:hr(S(n,\"background-color\").getOr(\"\"))}:{};return{height:\"\",width:\"100%\",cellspacing:\"\",cellpadding:\"\",caption:!1,class:\"\",align:\"\",border:\"\",...n,...r,...o,...(()=>{const t=n[\"border-width\"];return Et(e)&&t?{border:t}:S(r,\"border\").fold((()=>({})),(e=>({border:e})))})(),...{...S(n,\"border-spacing\").or(S(r,\"cellspacing\")).fold((()=>({})),(e=>({cellspacing:e}))),...S(n,\"border-padding\").or(S(r,\"cellpadding\")).fold((()=>({})),(e=>({cellpadding:e})))}}})(e,At(e));t?(o.cols=\"1\",o.rows=\"1\",At(e)&&(o.borderstyle=\"\",o.bordercolor=\"\",o.backgroundcolor=\"\")):(r=n.getParent(e.selection.getStart(),\"table\",e.getBody()),r?o=((e,t,n)=>{const r=e.dom,o=Et(e)?r.getStyle(t,\"border-spacing\")||r.getAttrib(t,\"cellspacing\"):r.getAttrib(t,\"cellspacing\")||r.getStyle(t,\"border-spacing\"),i=Et(e)?ct(r,t,\"padding\")||r.getAttrib(t,\"cellpadding\"):r.getAttrib(t,\"cellpadding\")||ct(r,t,\"padding\");return{width:r.getStyle(t,\"width\")||r.getAttrib(t,\"width\"),height:r.getStyle(t,\"height\")||r.getAttrib(t,\"height\"),cellspacing:null!=o?o:\"\",cellpadding:null!=i?i:\"\",border:((t,n)=>{const r=Pe(z.fromDom(n),\"border-width\");return Et(e)&&r.isSome()?r.getOr(\"\"):t.getAttrib(n,\"border\")||ct(e.dom,n,\"border-width\")||ct(e.dom,n,\"border\")||\"\"})(r,t),caption:!!r.select(\"caption\",t)[0],class:r.getAttrib(t,\"class\",\"\"),align:gr(e,t),...n?mr(t):{}}})(e,r,At(e)):At(e)&&(o.borderstyle=\"\",o.bordercolor=\"\",o.backgroundcolor=\"\"));const i=jn(Ot(e));i.length>0&&o.class&&(o.class=o.class.replace(/\\s*mce\\-item\\-table\\s*/g,\"\"));const s={type:\"grid\",columns:2,items:Lr(e,i,t)},a=At(e)?{type:\"tabpanel\",tabs:[{title:\"General\",name:\"general\",items:[s]},Qn(e,\"table\")]}:{type:\"panel\",items:[s]};e.windowManager.open({title:\"Table Properties\",size:\"normal\",body:a,onSubmit:p(Tr,e,r,o),buttons:[{type:\"cancel\",name:\"cancel\",text:\"Cancel\"},{type:\"submit\",name:\"save\",text:\"Save\",primary:!0}],initialData:o})},Or=m,Br=e=>{const t=(e,t)=>Se(e,t).exists((e=>parseInt(e,10)>1));return e.length>0&&I(e,(e=>t(e,\"rowspan\")||t(e,\"colspan\")))?b.some(e):b.none()},Rr=(e,t,n)=>t.length<=1?b.none():pn(e,n.firstSelectedSelector,n.lastSelectedSelector).map((e=>({bounds:e,cells:t}))),$r=e=>{const t=Yn(b.none()),n=Yn([]);let r=b.none();const o=Z(\"caption\"),i=e=>r.forall((t=>!t[e])),s=()=>xn((e=>z.fromDom(e.selection.getEnd()))(e),Ht(e)),a=()=>xn(Wt(e),Ht(e)).bind((t=>{return n=Le(Ge(t),s().bind(Ge),((n,r)=>ne(n,r)?o(t)?b.some((e=>({element:e,mergable:b.none(),unmergable:b.none(),selection:[e]}))(t)):b.some(((e,t,n)=>({element:n,mergable:Rr(t,e,_n),unmergable:Br(e),selection:Or(e)}))(kn(e),n,t)):b.none())),n.bind(m);var n})),l=e=>Ge(e.element).map((t=>{const n=rt(t),r=sr(n,e).getOr([]),o=N(r,((e,t)=>(t.isLocked&&(e.onAny=!0,0===t.column?e.onFirst=!0:t.column+t.colspan>=n.grid.columns&&(e.onLast=!0)),e)),{onAny:!1,onFirst:!1,onLast:!1});return{mergeable:lr(n,e).isSome(),unmergeable:cr(n,e).isSome(),locked:o}})),c=()=>{t.set((e=>{let t,n=!1;return(...r)=>(n||(n=!0,t=e.apply(null,r)),t)})(a)()),r=t.get().bind(l),R(n.get(),g)},u=e=>(e(),n.set(n.get().concat([e])),()=>{n.set($(n.get(),(t=>t!==e)))}),d=(e,n)=>u((()=>t.get().fold((()=>{e.setEnabled(!1)}),(t=>{e.setEnabled(!n(t))})))),h=(e,n,r)=>u((()=>t.get().fold((()=>{e.setEnabled(!1),e.setActive(!1)}),(t=>{e.setEnabled(!n(t)),e.setActive(r(t))})))),f=e=>r.exists((t=>t.locked[e])),p=(t,n)=>r=>h(r,(e=>o(e.element)),(()=>e.queryCommandValue(t)===n)),y=p(\"mceTableRowType\",\"header\"),_=p(\"mceTableColType\",\"th\");return e.on(\"NodeChange ExecCommand TableSelectorChange\",c),{onSetupTable:e=>d(e,(e=>!1)),onSetupCellOrRow:e=>d(e,(e=>o(e.element))),onSetupColumn:e=>t=>d(t,(t=>o(t.element)||f(e))),onSetupPasteable:e=>t=>d(t,(t=>o(t.element)||e().isNone())),onSetupPasteableColumn:(e,t)=>n=>d(n,(n=>o(n.element)||e().isNone()||f(t))),onSetupMergeable:e=>d(e,(e=>i(\"mergeable\"))),onSetupUnmergeable:e=>d(e,(e=>i(\"unmergeable\"))),resetTargets:c,onSetupTableWithCaption:t=>h(t,v,(t=>Ge(t.element,Ht(e)).exists((e=>_e(e,\"caption\").isSome())))),onSetupTableRowHeaders:y,onSetupTableColumnHeaders:_,targets:t.get}};var Nr=tinymce.util.Tools.resolve(\"tinymce.FakeClipboard\");const Yr=e=>{var t;const n=null!==(t=Nr.read())&&void 0!==t?t:[];return j(n,(t=>b.from(t.getType(e))))},Pr=()=>Yr(\"x-tinymce/dom-table-rows\"),Ir=()=>Yr(\"x-tinymce/dom-table-columns\"),Hr=e=>{const t=$r(e);(e=>{const t=e.options.register;t(\"table_border_widths\",{processor:\"object[]\",default:vt}),t(\"table_border_styles\",{processor:\"object[]\",default:yt}),t(\"table_cell_advtab\",{processor:\"boolean\",default:!0}),t(\"table_row_advtab\",{processor:\"boolean\",default:!0}),t(\"table_advtab\",{processor:\"boolean\",default:!0}),t(\"table_appearance_options\",{processor:\"boolean\",default:!0}),t(\"table_grid\",{processor:\"boolean\",default:!gt.deviceType.isTouch()}),t(\"table_cell_class_list\",{processor:\"object[]\",default:[]}),t(\"table_row_class_list\",{processor:\"object[]\",default:[]}),t(\"table_class_list\",{processor:\"object[]\",default:[]}),t(\"table_toolbar\",{processor:\"string\",default:\"tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol\"}),t(\"table_background_color_map\",{processor:\"object[]\",default:[]}),t(\"table_border_color_map\",{processor:\"object[]\",default:[]})})(e),(e=>{x({mceTableProps:p(Fr,e,!1),mceTableRowProps:p(Mr,e),mceTableCellProps:p(Cr,e)},((t,n)=>e.addCommand(n,(()=>t())))),e.addCommand(\"mceInsertTableDialog\",(t=>{Fr(e,!0)}))})(e),((e,t)=>{const n=t=>()=>e.execCommand(t),r=(t,r)=>!!e.queryCommandSupported(r.command)&&(e.ui.registry.addMenuItem(t,{...r,onAction:c(r.onAction)?r.onAction:n(r.command)}),!0),o=(t,r)=>{e.queryCommandSupported(r.command)&&e.ui.registry.addToggleMenuItem(t,{...r,onAction:c(r.onAction)?r.onAction:n(r.command)})},i=t=>{e.execCommand(\"mceInsertTable\",!1,{rows:t.numRows,columns:t.numColumns})},s=[r(\"tableinsertrowbefore\",{text:\"Insert row before\",icon:\"table-insert-row-above\",command:\"mceTableInsertRowBefore\",onSetup:t.onSetupCellOrRow}),r(\"tableinsertrowafter\",{text:\"Insert row after\",icon:\"table-insert-row-after\",command:\"mceTableInsertRowAfter\",onSetup:t.onSetupCellOrRow}),r(\"tabledeleterow\",{text:\"Delete row\",icon:\"table-delete-row\",command:\"mceTableDeleteRow\",onSetup:t.onSetupCellOrRow}),r(\"tablerowprops\",{text:\"Row properties\",icon:\"table-row-properties\",command:\"mceTableRowProps\",onSetup:t.onSetupCellOrRow}),r(\"tablecutrow\",{text:\"Cut row\",icon:\"cut-row\",command:\"mceTableCutRow\",onSetup:t.onSetupCellOrRow}),r(\"tablecopyrow\",{text:\"Copy row\",icon:\"duplicate-row\",command:\"mceTableCopyRow\",onSetup:t.onSetupCellOrRow}),r(\"tablepasterowbefore\",{text:\"Paste row before\",icon:\"paste-row-before\",command:\"mceTablePasteRowBefore\",onSetup:t.onSetupPasteable(Pr)}),r(\"tablepasterowafter\",{text:\"Paste row after\",icon:\"paste-row-after\",command:\"mceTablePasteRowAfter\",onSetup:t.onSetupPasteable(Pr)})],a=[r(\"tableinsertcolumnbefore\",{text:\"Insert column before\",icon:\"table-insert-column-before\",command:\"mceTableInsertColBefore\",onSetup:t.onSetupColumn(\"onFirst\")}),r(\"tableinsertcolumnafter\",{text:\"Insert column after\",icon:\"table-insert-column-after\",command:\"mceTableInsertColAfter\",onSetup:t.onSetupColumn(\"onLast\")}),r(\"tabledeletecolumn\",{text:\"Delete column\",icon:\"table-delete-column\",command:\"mceTableDeleteCol\",onSetup:t.onSetupColumn(\"onAny\")}),r(\"tablecutcolumn\",{text:\"Cut column\",icon:\"cut-column\",command:\"mceTableCutCol\",onSetup:t.onSetupColumn(\"onAny\")}),r(\"tablecopycolumn\",{text:\"Copy column\",icon:\"duplicate-column\",command:\"mceTableCopyCol\",onSetup:t.onSetupColumn(\"onAny\")}),r(\"tablepastecolumnbefore\",{text:\"Paste column before\",icon:\"paste-column-before\",command:\"mceTablePasteColBefore\",onSetup:t.onSetupPasteableColumn(Ir,\"onFirst\")}),r(\"tablepastecolumnafter\",{text:\"Paste column after\",icon:\"paste-column-after\",command:\"mceTablePasteColAfter\",onSetup:t.onSetupPasteableColumn(Ir,\"onLast\")})],l=[r(\"tablecellprops\",{text:\"Cell properties\",icon:\"table-cell-properties\",command:\"mceTableCellProps\",onSetup:t.onSetupCellOrRow}),r(\"tablemergecells\",{text:\"Merge cells\",icon:\"table-merge-cells\",command:\"mceTableMergeCells\",onSetup:t.onSetupMergeable}),r(\"tablesplitcells\",{text:\"Split cell\",icon:\"table-split-cells\",command:\"mceTableSplitCells\",onSetup:t.onSetupUnmergeable})];Lt(e)?e.ui.registry.addNestedMenuItem(\"inserttable\",{text:\"Table\",icon:\"table\",getSubmenuItems:()=>[{type:\"fancymenuitem\",fancytype:\"inserttable\",onAction:i}]}):e.ui.registry.addMenuItem(\"inserttable\",{text:\"Table\",icon:\"table\",onAction:n(\"mceInsertTableDialog\")}),e.ui.registry.addMenuItem(\"inserttabledialog\",{text:\"Insert table\",icon:\"table\",onAction:n(\"mceInsertTableDialog\")}),r(\"tableprops\",{text:\"Table properties\",onSetup:t.onSetupTable,command:\"mceTableProps\"}),r(\"deletetable\",{text:\"Delete table\",icon:\"table-delete-table\",onSetup:t.onSetupTable,command:\"mceTableDelete\"}),T(s,!0)&&e.ui.registry.addNestedMenuItem(\"row\",{type:\"nestedmenuitem\",text:\"Row\",getSubmenuItems:h(\"tableinsertrowbefore tableinsertrowafter tabledeleterow tablerowprops | tablecutrow tablecopyrow tablepasterowbefore tablepasterowafter\")}),T(a,!0)&&e.ui.registry.addNestedMenuItem(\"column\",{type:\"nestedmenuitem\",text:\"Column\",getSubmenuItems:h(\"tableinsertcolumnbefore tableinsertcolumnafter tabledeletecolumn | tablecutcolumn tablecopycolumn tablepastecolumnbefore tablepastecolumnafter\")}),T(l,!0)&&e.ui.registry.addNestedMenuItem(\"cell\",{type:\"nestedmenuitem\",text:\"Cell\",getSubmenuItems:h(\"tablecellprops tablemergecells tablesplitcells\")}),e.ui.registry.addContextMenu(\"table\",{update:()=>(t.resetTargets(),t.targets().fold(h(\"\"),(e=>\"caption\"===U(e.element)?\"tableprops deletetable\":\"cell row column | advtablesort | tableprops deletetable\")))});const u=Un(Ot(e));0!==u.length&&e.queryCommandSupported(\"mceTableToggleClass\")&&e.ui.registry.addNestedMenuItem(\"tableclass\",{icon:\"table-classes\",text:\"Table styles\",getSubmenuItems:()=>Wn(e,u,\"tableclass\",(t=>e.execCommand(\"mceTableToggleClass\",!1,t))),onSetup:t.onSetupTable});const d=Un(Tt(e));0!==d.length&&e.queryCommandSupported(\"mceTableCellToggleClass\")&&e.ui.registry.addNestedMenuItem(\"tablecellclass\",{icon:\"table-cell-classes\",text:\"Cell styles\",getSubmenuItems:()=>Wn(e,d,\"tablecellclass\",(t=>e.execCommand(\"mceTableCellToggleClass\",!1,t))),onSetup:t.onSetupCellOrRow}),e.queryCommandSupported(\"mceTableApplyCellStyle\")&&(e.ui.registry.addNestedMenuItem(\"tablecellvalign\",{icon:\"vertical-align\",text:\"Vertical align\",getSubmenuItems:()=>Wn(e,Sn,\"tablecellverticalalign\",zn(e,\"vertical-align\")),onSetup:t.onSetupCellOrRow}),e.ui.registry.addNestedMenuItem(\"tablecellborderwidth\",{icon:\"border-width\",text:\"Border width\",getSubmenuItems:()=>Wn(e,Ct(e),\"tablecellborderwidth\",zn(e,\"border-width\")),onSetup:t.onSetupCellOrRow}),e.ui.registry.addNestedMenuItem(\"tablecellborderstyle\",{icon:\"border-style\",text:\"Border style\",getSubmenuItems:()=>Wn(e,kt(e),\"tablecellborderstyle\",zn(e,\"border-style\")),onSetup:t.onSetupCellOrRow}),e.ui.registry.addNestedMenuItem(\"tablecellbackgroundcolor\",{icon:\"cell-background-color\",text:\"Background color\",getSubmenuItems:()=>qn(e,Rt(e),\"background-color\"),onSetup:t.onSetupCellOrRow}),e.ui.registry.addNestedMenuItem(\"tablecellbordercolor\",{icon:\"cell-border-color\",text:\"Border color\",getSubmenuItems:()=>qn(e,$t(e),\"border-color\"),onSetup:t.onSetupCellOrRow})),o(\"tablecaption\",{icon:\"table-caption\",text:\"Table caption\",command:\"mceTableToggleCaption\",onSetup:t.onSetupTableWithCaption}),o(\"tablerowheader\",{text:\"Row header\",icon:\"table-top-header\",command:\"mceTableRowType\",onAction:Gn(e),onSetup:t.onSetupTableRowHeaders}),o(\"tablecolheader\",{text:\"Column header\",icon:\"table-left-header\",command:\"mceTableColType\",onAction:Kn(e),onSetup:t.onSetupTableRowHeaders})})(e,t),((e,t)=>{e.ui.registry.addMenuButton(\"table\",{tooltip:\"Table\",icon:\"table\",fetch:e=>e(\"inserttable | cell row column | advtablesort | tableprops deletetable\")});const n=t=>()=>e.execCommand(t),r=(t,r)=>{e.queryCommandSupported(r.command)&&e.ui.registry.addButton(t,{...r,onAction:c(r.onAction)?r.onAction:n(r.command)})},o=(t,r)=>{e.queryCommandSupported(r.command)&&e.ui.registry.addToggleButton(t,{...r,onAction:c(r.onAction)?r.onAction:n(r.command)})};r(\"tableprops\",{tooltip:\"Table properties\",command:\"mceTableProps\",icon:\"table\",onSetup:t.onSetupTable}),r(\"tabledelete\",{tooltip:\"Delete table\",command:\"mceTableDelete\",icon:\"table-delete-table\",onSetup:t.onSetupTable}),r(\"tablecellprops\",{tooltip:\"Cell properties\",command:\"mceTableCellProps\",icon:\"table-cell-properties\",onSetup:t.onSetupCellOrRow}),r(\"tablemergecells\",{tooltip:\"Merge cells\",command:\"mceTableMergeCells\",icon:\"table-merge-cells\",onSetup:t.onSetupMergeable}),r(\"tablesplitcells\",{tooltip:\"Split cell\",command:\"mceTableSplitCells\",icon:\"table-split-cells\",onSetup:t.onSetupUnmergeable}),r(\"tableinsertrowbefore\",{tooltip:\"Insert row before\",command:\"mceTableInsertRowBefore\",icon:\"table-insert-row-above\",onSetup:t.onSetupCellOrRow}),r(\"tableinsertrowafter\",{tooltip:\"Insert row after\",command:\"mceTableInsertRowAfter\",icon:\"table-insert-row-after\",onSetup:t.onSetupCellOrRow}),r(\"tabledeleterow\",{tooltip:\"Delete row\",command:\"mceTableDeleteRow\",icon:\"table-delete-row\",onSetup:t.onSetupCellOrRow}),r(\"tablerowprops\",{tooltip:\"Row properties\",command:\"mceTableRowProps\",icon:\"table-row-properties\",onSetup:t.onSetupCellOrRow}),r(\"tableinsertcolbefore\",{tooltip:\"Insert column before\",command:\"mceTableInsertColBefore\",icon:\"table-insert-column-before\",onSetup:t.onSetupColumn(\"onFirst\")}),r(\"tableinsertcolafter\",{tooltip:\"Insert column after\",command:\"mceTableInsertColAfter\",icon:\"table-insert-column-after\",onSetup:t.onSetupColumn(\"onLast\")}),r(\"tabledeletecol\",{tooltip:\"Delete column\",command:\"mceTableDeleteCol\",icon:\"table-delete-column\",onSetup:t.onSetupColumn(\"onAny\")}),r(\"tablecutrow\",{tooltip:\"Cut row\",command:\"mceTableCutRow\",icon:\"cut-row\",onSetup:t.onSetupCellOrRow}),r(\"tablecopyrow\",{tooltip:\"Copy row\",command:\"mceTableCopyRow\",icon:\"duplicate-row\",onSetup:t.onSetupCellOrRow}),r(\"tablepasterowbefore\",{tooltip:\"Paste row before\",command:\"mceTablePasteRowBefore\",icon:\"paste-row-before\",onSetup:t.onSetupPasteable(Pr)}),r(\"tablepasterowafter\",{tooltip:\"Paste row after\",command:\"mceTablePasteRowAfter\",icon:\"paste-row-after\",onSetup:t.onSetupPasteable(Pr)}),r(\"tablecutcol\",{tooltip:\"Cut column\",command:\"mceTableCutCol\",icon:\"cut-column\",onSetup:t.onSetupColumn(\"onAny\")}),r(\"tablecopycol\",{tooltip:\"Copy column\",command:\"mceTableCopyCol\",icon:\"duplicate-column\",onSetup:t.onSetupColumn(\"onAny\")}),r(\"tablepastecolbefore\",{tooltip:\"Paste column before\",command:\"mceTablePasteColBefore\",icon:\"paste-column-before\",onSetup:t.onSetupPasteableColumn(Ir,\"onFirst\")}),r(\"tablepastecolafter\",{tooltip:\"Paste column after\",command:\"mceTablePasteColAfter\",icon:\"paste-column-after\",onSetup:t.onSetupPasteableColumn(Ir,\"onLast\")}),r(\"tableinsertdialog\",{tooltip:\"Insert table\",command:\"mceInsertTableDialog\",icon:\"table\"});const i=Un(Ot(e));0!==i.length&&e.queryCommandSupported(\"mceTableToggleClass\")&&e.ui.registry.addMenuButton(\"tableclass\",{icon:\"table-classes\",tooltip:\"Table styles\",fetch:Vn(e,i,\"tableclass\",(t=>e.execCommand(\"mceTableToggleClass\",!1,t))),onSetup:t.onSetupTable});const s=Un(Tt(e));0!==s.length&&e.queryCommandSupported(\"mceTableCellToggleClass\")&&e.ui.registry.addMenuButton(\"tablecellclass\",{icon:\"table-cell-classes\",tooltip:\"Cell styles\",fetch:Vn(e,s,\"tablecellclass\",(t=>e.execCommand(\"mceTableCellToggleClass\",!1,t))),onSetup:t.onSetupCellOrRow}),e.queryCommandSupported(\"mceTableApplyCellStyle\")&&(e.ui.registry.addMenuButton(\"tablecellvalign\",{icon:\"vertical-align\",tooltip:\"Vertical align\",fetch:Vn(e,Sn,\"tablecellverticalalign\",zn(e,\"vertical-align\")),onSetup:t.onSetupCellOrRow}),e.ui.registry.addMenuButton(\"tablecellborderwidth\",{icon:\"border-width\",tooltip:\"Border width\",fetch:Vn(e,Ct(e),\"tablecellborderwidth\",zn(e,\"border-width\")),onSetup:t.onSetupCellOrRow}),e.ui.registry.addMenuButton(\"tablecellborderstyle\",{icon:\"border-style\",tooltip:\"Border style\",fetch:Vn(e,kt(e),\"tablecellborderstyle\",zn(e,\"border-style\")),onSetup:t.onSetupCellOrRow}),e.ui.registry.addMenuButton(\"tablecellbackgroundcolor\",{icon:\"cell-background-color\",tooltip:\"Background color\",fetch:t=>t(qn(e,Rt(e),\"background-color\")),onSetup:t.onSetupCellOrRow}),e.ui.registry.addMenuButton(\"tablecellbordercolor\",{icon:\"cell-border-color\",tooltip:\"Border color\",fetch:t=>t(qn(e,$t(e),\"border-color\")),onSetup:t.onSetupCellOrRow})),o(\"tablecaption\",{tooltip:\"Table caption\",icon:\"table-caption\",command:\"mceTableToggleCaption\",onSetup:t.onSetupTableWithCaption}),o(\"tablerowheader\",{tooltip:\"Row header\",icon:\"table-top-header\",command:\"mceTableRowType\",onAction:Gn(e),onSetup:t.onSetupTableRowHeaders}),o(\"tablecolheader\",{tooltip:\"Column header\",icon:\"table-left-header\",command:\"mceTableColType\",onAction:Kn(e),onSetup:t.onSetupTableColumnHeaders})})(e,t),(e=>{const t=t=>e.dom.is(t,\"table\")&&e.getBody().contains(t),n=Bt(e);n.length>0&&e.ui.registry.addContextToolbar(\"table\",{predicate:t,items:n,scope:\"node\",position:\"node\"})})(e)};e.add(\"table\",Hr)}()},1768:()=>{!function(){\"use strict\";const e=Object.getPrototypeOf,t=(e,t,n)=>{var r;return!!n(e,t.prototype)||(null===(r=e.constructor)||void 0===r?void 0:r.name)===t.name},n=e=>n=>(e=>{const n=typeof e;return null===e?\"null\":\"object\"===n&&Array.isArray(e)?\"array\":\"object\"===n&&t(e,String,((e,t)=>t.isPrototypeOf(e)))?\"string\":n})(n)===e,r=e=>t=>typeof t===e,o=e=>t=>e===t,i=n(\"string\"),s=n(\"object\"),a=n=>((n,r)=>s(n)&&t(n,r,((t,n)=>e(t)===n)))(n,Object),l=n(\"array\"),c=o(null),u=r(\"boolean\"),d=o(void 0),h=e=>null==e,m=e=>!h(e),f=r(\"function\"),p=r(\"number\"),g=(e,t)=>{if(l(e)){for(let n=0,r=e.length;n<r;++n)if(!t(e[n]))return!1;return!0}return!1},v=()=>{},y=(e,t)=>(...n)=>e(t.apply(null,n)),b=e=>()=>e,_=e=>e,w=(e,t)=>e===t;function x(e,...t){return(...n)=>{const r=t.concat(n);return e.apply(null,r)}}const C=e=>t=>!e(t),k=e=>()=>{throw new Error(e)},D=e=>e(),S=b(!1),A=b(!0);var M=tinymce.util.Tools.resolve(\"tinymce.ThemeManager\");class L{constructor(e,t){this.tag=e,this.value=t}static some(e){return new L(!0,e)}static none(){return L.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?L.some(e(this.value)):L.none()}bind(e){return this.tag?e(this.value):L.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:L.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:\"Called getOrDie on None\")}static from(e){return m(e)?L.some(e):L.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:\"none()\"}}L.singletonNone=new L(!1);const E=Array.prototype.slice,T=Array.prototype.indexOf,F=Array.prototype.push,O=(e,t)=>T.call(e,t),B=(e,t)=>{const n=O(e,t);return-1===n?L.none():L.some(n)},R=(e,t)=>O(e,t)>-1,$=(e,t)=>{for(let n=0,r=e.length;n<r;n++){if(t(e[n],n))return!0}return!1},N=(e,t)=>{const n=[];for(let r=0;r<e;r++)n.push(t(r));return n},Y=(e,t)=>{const n=[];for(let r=0;r<e.length;r+=t){const o=E.call(e,r,r+t);n.push(o)}return n},P=(e,t)=>{const n=e.length,r=new Array(n);for(let o=0;o<n;o++){const n=e[o];r[o]=t(n,o)}return r},I=(e,t)=>{for(let n=0,r=e.length;n<r;n++){t(e[n],n)}},H=(e,t)=>{const n=[],r=[];for(let o=0,i=e.length;o<i;o++){const i=e[o];(t(i,o)?n:r).push(i)}return{pass:n,fail:r}},j=(e,t)=>{const n=[];for(let r=0,o=e.length;r<o;r++){const o=e[r];t(o,r)&&n.push(o)}return n},W=(e,t,n)=>(((e,t)=>{for(let n=e.length-1;n>=0;n--)t(e[n],n)})(e,((e,r)=>{n=t(n,e,r)})),n),z=(e,t,n)=>(I(e,((e,r)=>{n=t(n,e,r)})),n),U=(e,t)=>((e,t,n)=>{for(let r=0,o=e.length;r<o;r++){const o=e[r];if(t(o,r))return L.some(o);if(n(o,r))break}return L.none()})(e,t,S),V=(e,t)=>{for(let n=0,r=e.length;n<r;n++){if(t(e[n],n))return L.some(n)}return L.none()},q=e=>{const t=[];for(let n=0,r=e.length;n<r;++n){if(!l(e[n]))throw new Error(\"Arr.flatten item \"+n+\" was not an array, input: \"+e);F.apply(t,e[n])}return t},G=(e,t)=>q(P(e,t)),K=(e,t)=>{for(let n=0,r=e.length;n<r;++n){if(!0!==t(e[n],n))return!1}return!0},X=e=>{const t=E.call(e,0);return t.reverse(),t},J=(e,t)=>j(e,(e=>!R(t,e))),Q=(e,t)=>{const n={};for(let r=0,o=e.length;r<o;r++){const o=e[r];n[String(o)]=t(o,r)}return n},Z=e=>[e],ee=(e,t)=>{const n=E.call(e,0);return n.sort(t),n},te=(e,t)=>t>=0&&t<e.length?L.some(e[t]):L.none(),ne=e=>te(e,0),re=e=>te(e,e.length-1),oe=f(Array.from)?Array.from:e=>E.call(e),ie=(e,t)=>{for(let n=0;n<e.length;n++){const r=t(e[n],n);if(r.isSome())return r}return L.none()},se=Object.keys,ae=Object.hasOwnProperty,le=(e,t)=>{const n=se(e);for(let r=0,o=n.length;r<o;r++){const o=n[r];t(e[o],o)}},ce=(e,t)=>ue(e,((e,n)=>({k:n,v:t(e,n)}))),ue=(e,t)=>{const n={};return le(e,((e,r)=>{const o=t(e,r);n[o.k]=o.v})),n},de=e=>(t,n)=>{e[n]=t},he=(e,t,n,r)=>{le(e,((e,o)=>{(t(e,o)?n:r)(e,o)}))},me=(e,t)=>{const n={};return he(e,t,de(n),v),n},fe=(e,t)=>{const n=[];return le(e,((e,r)=>{n.push(t(e,r))})),n},pe=(e,t)=>{const n=se(e);for(let r=0,o=n.length;r<o;r++){const o=n[r],i=e[o];if(t(i,o,e))return L.some(i)}return L.none()},ge=e=>fe(e,_),ve=(e,t)=>ye(e,t)?L.from(e[t]):L.none(),ye=(e,t)=>ae.call(e,t),be=(e,t)=>ye(e,t)&&void 0!==e[t]&&null!==e[t],_e=(e,t,n=w)=>e.exists((e=>n(e,t))),we=e=>{const t=[],n=e=>{t.push(e)};for(let t=0;t<e.length;t++)e[t].each(n);return t},xe=(e,t,n)=>e.isSome()&&t.isSome()?L.some(n(e.getOrDie(),t.getOrDie())):L.none(),Ce=(e,t)=>e?L.some(t):L.none(),ke=(e,t,n)=>\"\"===t||e.length>=t.length&&e.substr(n,n+t.length)===t,De=(e,t,n=0,r)=>{const o=e.indexOf(t,n);return-1!==o&&(!!d(r)||o+t.length<=r)},Se=(e,t)=>ke(e,t,0),Ae=(e,t)=>ke(e,t,e.length-t.length),Me=(e=>t=>t.replace(e,\"\"))(/^\\s+|\\s+$/g),Le=e=>e.length>0,Ee=e=>void 0!==e.style&&f(e.style.getPropertyValue),Te=e=>{if(null==e)throw new Error(\"Node cannot be null or undefined\");return{dom:e}},Fe={fromHtml:(e,t)=>{const n=(t||document).createElement(\"div\");if(n.innerHTML=e,!n.hasChildNodes()||n.childNodes.length>1){const t=\"HTML does not have a single root node\";throw console.error(t,e),new Error(t)}return Te(n.childNodes[0])},fromTag:(e,t)=>{const n=(t||document).createElement(e);return Te(n)},fromText:(e,t)=>{const n=(t||document).createTextNode(e);return Te(n)},fromDom:Te,fromPoint:(e,t,n)=>L.from(e.dom.elementFromPoint(t,n)).map(Te)},Oe=\"undefined\"!=typeof window?window:Function(\"return this;\")(),Be=(e,t)=>((e,t)=>{let n=null!=t?t:Oe;for(let t=0;t<e.length&&null!=n;++t)n=n[e[t]];return n})(e.split(\".\"),t),Re=(e,t)=>{const n=((e,t)=>Be(e,t))(e,t);if(null==n)throw new Error(e+\" not available on this browser\");return n},$e=Object.getPrototypeOf,Ne=e=>{const t=Be(\"ownerDocument.defaultView\",e);return s(e)&&((e=>Re(\"HTMLElement\",e))(t).prototype.isPrototypeOf(e)||/^HTML\\w*Element$/.test($e(e).constructor.name))},Ye=e=>e.dom.nodeName.toLowerCase(),Pe=e=>t=>(e=>e.dom.nodeType)(t)===e,Ie=Pe(1),He=Pe(3),je=Pe(9),We=Pe(11),ze=e=>t=>Ie(t)&&Ye(t)===e,Ue=(e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error(\"Browser lacks native selectors\")}},Ve=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,qe=(e,t)=>e.dom===t.dom,Ge=(e,t)=>{const n=e.dom,r=t.dom;return n!==r&&n.contains(r)},Ke=e=>Fe.fromDom(e.dom.ownerDocument),Xe=e=>je(e)?e:Ke(e),Je=e=>Fe.fromDom(Xe(e).dom.documentElement),Qe=e=>Fe.fromDom(Xe(e).dom.defaultView),Ze=e=>L.from(e.dom.parentNode).map(Fe.fromDom),et=e=>L.from(e.dom.parentElement).map(Fe.fromDom),tt=e=>L.from(e.dom.offsetParent).map(Fe.fromDom),nt=e=>P(e.dom.childNodes,Fe.fromDom),rt=(e,t)=>{const n=e.dom.childNodes;return L.from(n[t]).map(Fe.fromDom)},ot=(e,t)=>({element:e,offset:t}),it=(e,t)=>{const n=nt(e);return n.length>0&&t<n.length?ot(n[t],0):ot(e,t)},st=e=>We(e)&&m(e.dom.host),at=f(Element.prototype.attachShadow)&&f(Node.prototype.getRootNode),lt=b(at),ct=at?e=>Fe.fromDom(e.dom.getRootNode()):Xe,ut=e=>st(e)?e:Fe.fromDom(Xe(e).dom.body),dt=e=>{const t=ct(e);return st(t)?L.some(t):L.none()},ht=e=>Fe.fromDom(e.dom.host),mt=e=>m(e.dom.shadowRoot),ft=e=>{const t=He(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const n=t.ownerDocument;return dt(Fe.fromDom(t)).fold((()=>n.body.contains(t)),(r=ft,o=ht,e=>r(o(e))));var r,o},pt=()=>gt(Fe.fromDom(document)),gt=e=>{const t=e.dom.body;if(null==t)throw new Error(\"Body is not available yet\");return Fe.fromDom(t)},vt=(e,t,n)=>{if(!(i(n)||u(n)||p(n)))throw console.error(\"Invalid call to Attribute.set. Key \",t,\":: Value \",n,\":: Element \",e),new Error(\"Attribute value was not simple\");e.setAttribute(t,n+\"\")},yt=(e,t,n)=>{vt(e.dom,t,n)},bt=(e,t)=>{const n=e.dom;le(t,((e,t)=>{vt(n,t,e)}))},_t=(e,t)=>{const n=e.dom.getAttribute(t);return null===n?void 0:n},wt=(e,t)=>L.from(_t(e,t)),xt=(e,t)=>{const n=e.dom;return!(!n||!n.hasAttribute)&&n.hasAttribute(t)},Ct=(e,t)=>{e.dom.removeAttribute(t)},kt=(e,t,n)=>{if(!i(n))throw console.error(\"Invalid call to CSS.set. Property \",t,\":: Value \",n,\":: Element \",e),new Error(\"CSS value must be a string: \"+n);Ee(e)&&e.style.setProperty(t,n)},Dt=(e,t)=>{Ee(e)&&e.style.removeProperty(t)},St=(e,t,n)=>{const r=e.dom;kt(r,t,n)},At=(e,t)=>{const n=e.dom;le(t,((e,t)=>{kt(n,t,e)}))},Mt=(e,t)=>{const n=e.dom;le(t,((e,t)=>{e.fold((()=>{Dt(n,t)}),(e=>{kt(n,t,e)}))}))},Lt=(e,t)=>{const n=e.dom,r=window.getComputedStyle(n).getPropertyValue(t);return\"\"!==r||ft(e)?r:Et(n,t)},Et=(e,t)=>Ee(e)?e.style.getPropertyValue(t):\"\",Tt=(e,t)=>{const n=e.dom,r=Et(n,t);return L.from(r).filter((e=>e.length>0))},Ft=e=>{const t={},n=e.dom;if(Ee(n))for(let e=0;e<n.style.length;e++){const r=n.style.item(e);t[r]=n.style[r]}return t},Ot=(e,t,n)=>{const r=Fe.fromTag(e);St(r,t,n);return Tt(r,t).isSome()},Bt=(e,t)=>{const n=e.dom;Dt(n,t),_e(wt(e,\"style\").map(Me),\"\")&&Ct(e,\"style\")},Rt=e=>e.dom.offsetWidth,$t=(e,t)=>{const n=n=>{const r=t(n);if(r<=0||null===r){const t=Lt(n,e);return parseFloat(t)||0}return r},r=(e,t)=>z(t,((t,n)=>{const r=Lt(e,n),o=void 0===r?0:parseInt(r,10);return isNaN(o)?t:t+o}),0);return{set:(t,n)=>{if(!p(n)&&!n.match(/^[0-9]+$/))throw new Error(e+\".set accepts only positive integer values. Value was \"+n);const r=t.dom;Ee(r)&&(r.style[e]=n+\"px\")},get:n,getOuter:n,aggregate:r,max:(e,t,n)=>{const o=r(e,n);return t>o?t-o:0}}},Nt=$t(\"height\",(e=>{const t=e.dom;return ft(e)?t.getBoundingClientRect().height:t.offsetHeight})),Yt=e=>Nt.get(e),Pt=e=>Nt.getOuter(e),It=(e,t)=>({left:e,top:t,translate:(n,r)=>It(e+n,t+r)}),Ht=It,jt=(e,t)=>void 0!==e?e:void 0!==t?t:0,Wt=e=>{const t=e.dom.ownerDocument,n=t.body,r=t.defaultView,o=t.documentElement;if(n===e.dom)return Ht(n.offsetLeft,n.offsetTop);const i=jt(null==r?void 0:r.pageYOffset,o.scrollTop),s=jt(null==r?void 0:r.pageXOffset,o.scrollLeft),a=jt(o.clientTop,n.clientTop),l=jt(o.clientLeft,n.clientLeft);return zt(e).translate(s-l,i-a)},zt=e=>{const t=e.dom,n=t.ownerDocument.body;return n===t?Ht(n.offsetLeft,n.offsetTop):ft(e)?(e=>{const t=e.getBoundingClientRect();return Ht(t.left,t.top)})(t):Ht(0,0)},Ut=$t(\"width\",(e=>e.dom.offsetWidth)),Vt=e=>Ut.get(e),qt=e=>Ut.getOuter(e),Gt=e=>{let t,n=!1;return(...r)=>(n||(n=!0,t=e.apply(null,r)),t)},Kt=()=>Xt(0,0),Xt=(e,t)=>({major:e,minor:t}),Jt={nu:Xt,detect:(e,t)=>{const n=String(t).toLowerCase();return 0===e.length?Kt():((e,t)=>{const n=((e,t)=>{for(let n=0;n<e.length;n++){const r=e[n];if(r.test(t))return r}})(e,t);if(!n)return{major:0,minor:0};const r=e=>Number(t.replace(n,\"$\"+e));return Xt(r(1),r(2))})(e,n)},unknown:Kt},Qt=(e,t)=>{const n=String(t).toLowerCase();return U(e,(e=>e.search(n)))},Zt=/.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,en=e=>t=>De(t,e),tn=[{name:\"Edge\",versionRegexes:[/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],search:e=>De(e,\"edge/\")&&De(e,\"chrome\")&&De(e,\"safari\")&&De(e,\"applewebkit\")},{name:\"Chromium\",brand:\"Chromium\",versionRegexes:[/.*?chrome\\/([0-9]+)\\.([0-9]+).*/,Zt],search:e=>De(e,\"chrome\")&&!De(e,\"chromeframe\")},{name:\"IE\",versionRegexes:[/.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,/.*?rv:([0-9]+)\\.([0-9]+).*/],search:e=>De(e,\"msie\")||De(e,\"trident\")},{name:\"Opera\",versionRegexes:[Zt,/.*?opera\\/([0-9]+)\\.([0-9]+).*/],search:en(\"opera\")},{name:\"Firefox\",versionRegexes:[/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],search:en(\"firefox\")},{name:\"Safari\",versionRegexes:[Zt,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(De(e,\"safari\")||De(e,\"mobile/\"))&&De(e,\"applewebkit\")}],nn=[{name:\"Windows\",search:en(\"win\"),versionRegexes:[/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]},{name:\"iOS\",search:e=>De(e,\"iphone\")||De(e,\"ipad\"),versionRegexes:[/.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:\"Android\",search:en(\"android\"),versionRegexes:[/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]},{name:\"macOS\",search:en(\"mac os x\"),versionRegexes:[/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]},{name:\"Linux\",search:en(\"linux\"),versionRegexes:[]},{name:\"Solaris\",search:en(\"sunos\"),versionRegexes:[]},{name:\"FreeBSD\",search:en(\"freebsd\"),versionRegexes:[]},{name:\"ChromeOS\",search:en(\"cros\"),versionRegexes:[/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]}],rn={browsers:b(tn),oses:b(nn)},on=\"Edge\",sn=\"Chromium\",an=\"Opera\",ln=\"Firefox\",cn=\"Safari\",un=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isEdge:r(on),isChromium:r(sn),isIE:r(\"IE\"),isOpera:r(an),isFirefox:r(ln),isSafari:r(cn)}},dn={unknown:()=>un({current:void 0,version:Jt.unknown()}),nu:un,edge:b(on),chromium:b(sn),ie:b(\"IE\"),opera:b(an),firefox:b(ln),safari:b(cn)},hn=\"Windows\",mn=\"Android\",fn=\"Linux\",pn=\"macOS\",gn=\"Solaris\",vn=\"FreeBSD\",yn=\"ChromeOS\",bn=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isWindows:r(hn),isiOS:r(\"iOS\"),isAndroid:r(mn),isMacOS:r(pn),isLinux:r(fn),isSolaris:r(gn),isFreeBSD:r(vn),isChromeOS:r(yn)}},_n={unknown:()=>bn({current:void 0,version:Jt.unknown()}),nu:bn,windows:b(hn),ios:b(\"iOS\"),android:b(mn),linux:b(fn),macos:b(pn),solaris:b(gn),freebsd:b(vn),chromeos:b(yn)},wn=(e,t,n)=>{const r=rn.browsers(),o=rn.oses(),i=t.bind((e=>((e,t)=>ie(t.brands,(t=>{const n=t.brand.toLowerCase();return U(e,(e=>{var t;return n===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:Jt.nu(parseInt(t.version,10),0)})))})))(r,e))).orThunk((()=>((e,t)=>Qt(e,t).map((e=>{const n=Jt.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(r,e))).fold(dn.unknown,dn.nu),s=((e,t)=>Qt(e,t).map((e=>{const n=Jt.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(o,e).fold(_n.unknown,_n.nu),a=((e,t,n,r)=>{const o=e.isiOS()&&!0===/ipad/i.test(n),i=e.isiOS()&&!o,s=e.isiOS()||e.isAndroid(),a=s||r(\"(pointer:coarse)\"),l=o||!i&&s&&r(\"(min-device-width:768px)\"),c=i||s&&!l,u=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(n),d=!c&&!l&&!u;return{isiPad:b(o),isiPhone:b(i),isTablet:b(l),isPhone:b(c),isTouch:b(a),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:b(u),isDesktop:b(d)}})(s,i,e,n);return{browser:i,os:s,deviceType:a}},xn=e=>window.matchMedia(e).matches;let Cn=Gt((()=>wn(navigator.userAgent,L.from(navigator.userAgentData),xn)));const kn=()=>Cn(),Dn=e=>{const t=Fe.fromDom((e=>{if(lt()&&m(e.target)){const t=Fe.fromDom(e.target);if(Ie(t)&&mt(t)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return ne(t)}}return L.from(e.target)})(e).getOr(e.target)),n=()=>e.stopPropagation(),r=()=>e.preventDefault(),o=y(r,n);return((e,t,n,r,o,i,s)=>({target:e,x:t,y:n,stop:r,prevent:o,kill:i,raw:s}))(t,e.clientX,e.clientY,n,r,o,e)},Sn=(e,t,n,r,o)=>{const i=((e,t)=>n=>{e(n)&&t(Dn(n))})(n,r);return e.dom.addEventListener(t,i,o),{unbind:x(An,e,t,i,o)}},An=(e,t,n,r)=>{e.dom.removeEventListener(t,n,r)},Mn=(e,t)=>{Ze(e).each((n=>{n.dom.insertBefore(t.dom,e.dom)}))},Ln=(e,t)=>{const n=(e=>L.from(e.dom.nextSibling).map(Fe.fromDom))(e);n.fold((()=>{Ze(e).each((e=>{Tn(e,t)}))}),(e=>{Mn(e,t)}))},En=(e,t)=>{const n=(e=>rt(e,0))(e);n.fold((()=>{Tn(e,t)}),(n=>{e.dom.insertBefore(t.dom,n.dom)}))},Tn=(e,t)=>{e.dom.appendChild(t.dom)},Fn=(e,t)=>{I(t,(t=>{Tn(e,t)}))},On=e=>{e.dom.textContent=\"\",I(nt(e),(e=>{Bn(e)}))},Bn=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},Rn=e=>{const t=void 0!==e?e.dom:document,n=t.body.scrollLeft||t.documentElement.scrollLeft,r=t.body.scrollTop||t.documentElement.scrollTop;return Ht(n,r)},$n=(e,t,n)=>{const r=(void 0!==n?n.dom:document).defaultView;r&&r.scrollTo(e,t)},Nn=(e,t,n,r)=>({x:e,y:t,width:n,height:r,right:e+n,bottom:t+r}),Yn=e=>{const t=void 0===e?window:e,n=t.document,r=Rn(Fe.fromDom(n));return(e=>{const t=void 0===e?window:e;return kn().browser.isFirefox()?L.none():L.from(t.visualViewport)})(t).fold((()=>{const e=t.document.documentElement,n=e.clientWidth,o=e.clientHeight;return Nn(r.left,r.top,n,o)}),(e=>Nn(Math.max(e.pageLeft,r.left),Math.max(e.pageTop,r.top),e.width,e.height)))},Pn=()=>Fe.fromDom(document),In=(e,t)=>e.view(t).fold(b([]),(t=>{const n=e.owner(t),r=In(e,n);return[t].concat(r)}));var Hn=Object.freeze({__proto__:null,view:e=>{var t;return(e.dom===document?L.none():L.from(null===(t=e.dom.defaultView)||void 0===t?void 0:t.frameElement)).map(Fe.fromDom)},owner:e=>Ke(e)});const jn=e=>{const t=Pn(),n=Rn(t),r=((e,t)=>{const n=t.owner(e),r=In(t,n);return L.some(r)})(e,Hn);return r.fold(x(Wt,e),(t=>{const r=zt(e),o=W(t,((e,t)=>{const n=zt(t);return{left:e.left+n.left,top:e.top+n.top}}),{left:0,top:0});return Ht(o.left+r.left+n.left,o.top+r.top+n.top)}))},Wn=(e,t,n,r)=>({x:e,y:t,width:n,height:r,right:e+n,bottom:t+r}),zn=e=>{const t=Wt(e),n=qt(e),r=Pt(e);return Wn(t.left,t.top,n,r)},Un=e=>{const t=jn(e),n=qt(e),r=Pt(e);return Wn(t.left,t.top,n,r)},Vn=()=>Yn(window),qn=e=>{const t=t=>t(e),n=b(e),r=()=>o,o={tag:!0,inner:e,fold:(t,n)=>n(e),isValue:A,isError:S,map:t=>Kn.value(t(e)),mapError:r,bind:t,exists:t,forall:t,getOr:n,or:r,getOrThunk:n,orThunk:r,getOrDie:n,each:t=>{t(e)},toOptional:()=>L.some(e)};return o},Gn=e=>{const t=()=>n,n={tag:!1,inner:e,fold:(t,n)=>t(e),isValue:S,isError:A,map:t,mapError:t=>Kn.error(t(e)),bind:t,exists:S,forall:A,getOr:_,or:_,getOrThunk:D,orThunk:D,getOrDie:k(String(e)),each:v,toOptional:L.none};return n},Kn={value:qn,error:Gn,fromOption:(e,t)=>e.fold((()=>Gn(t)),qn)};var Xn;!function(e){e[e.Error=0]=\"Error\",e[e.Value=1]=\"Value\"}(Xn||(Xn={}));const Jn=(e,t,n)=>e.stype===Xn.Error?t(e.serror):n(e.svalue),Qn=e=>({stype:Xn.Value,svalue:e}),Zn=e=>({stype:Xn.Error,serror:e}),er=e=>e.fold(Zn,Qn),tr=e=>Jn(e,Kn.error,Kn.value),nr=Qn,rr=e=>{const t=[],n=[];return I(e,(e=>{Jn(e,(e=>n.push(e)),(e=>t.push(e)))})),{values:t,errors:n}},or=Zn,ir=(e,t)=>e.stype===Xn.Value?t(e.svalue):e,sr=(e,t)=>e.stype===Xn.Error?t(e.serror):e,ar=(e,t)=>e.stype===Xn.Value?{stype:Xn.Value,svalue:t(e.svalue)}:e,lr=(e,t)=>e.stype===Xn.Error?{stype:Xn.Error,serror:t(e.serror)}:e,cr=Jn,ur=(e,t,n,r)=>({tag:\"field\",key:e,newKey:t,presence:n,prop:r}),dr=(e,t,n)=>{switch(e.tag){case\"field\":return t(e.key,e.newKey,e.presence,e.prop);case\"custom\":return n(e.newKey,e.instantiator)}},hr=e=>(...t)=>{if(0===t.length)throw new Error(\"Can't merge zero objects\");const n={};for(let r=0;r<t.length;r++){const o=t[r];for(const t in o)ye(o,t)&&(n[t]=e(n[t],o[t]))}return n},mr=hr(((e,t)=>a(e)&&a(t)?mr(e,t):t)),fr=hr(((e,t)=>t)),pr=e=>({tag:\"defaultedThunk\",process:e}),gr=e=>pr(b(e)),vr=e=>({tag:\"mergeWithThunk\",process:e}),yr=e=>y(or,q)(e),br=e=>{const t=rr(e);return t.errors.length>0?yr(t.errors):nr(t.values)},_r=e=>s(e)&&se(e).length>100?\" removed due to size\":JSON.stringify(e,null,2),wr=(e,t)=>or([{path:e,getErrorInfo:t}]),xr=e=>({extract:(t,n)=>sr(e(n),(e=>((e,t)=>wr(e,b(t)))(t,e))),toString:b(\"val\")}),Cr=xr(nr),kr=(e,t,n,r)=>ve(t,n).fold((()=>((e,t,n)=>wr(e,(()=>'Could not find valid *required* value for \"'+t+'\" in '+_r(n))))(e,n,t)),r),Dr=(e,t,n,r)=>r(ve(e,t).getOrThunk((()=>n(e)))),Sr=(e,t,n,r,o)=>{const i=e=>o.extract(t.concat([r]),e),s=e=>e.fold((()=>nr(L.none())),(e=>{const n=o.extract(t.concat([r]),e);return ar(n,L.some)}));switch(e.tag){case\"required\":return kr(t,n,r,i);case\"defaultedThunk\":return Dr(n,r,e.process,i);case\"option\":return((e,t,n)=>n(ve(e,t)))(n,r,s);case\"defaultedOptionThunk\":return((e,t,n,r)=>r(ve(e,t).map((t=>!0===t?n(e):t))))(n,r,e.process,s);case\"mergeWithThunk\":return Dr(n,r,b({}),(t=>{const r=mr(e.process(n),t);return i(r)}))}},Ar=e=>({extract:(t,n)=>e().extract(t,n),toString:()=>e().toString()}),Mr=e=>se(me(e,m)),Lr=e=>{const t=Er(e),n=W(e,((e,t)=>dr(t,(t=>mr(e,{[t]:!0})),b(e))),{});return{extract:(e,r)=>{const o=u(r)?[]:Mr(r),i=j(o,(e=>!be(n,e)));return 0===i.length?t.extract(e,r):((e,t)=>wr(e,(()=>\"There are unsupported fields: [\"+t.join(\", \")+\"] specified\")))(e,i)},toString:t.toString}},Er=e=>({extract:(t,n)=>((e,t,n)=>{const r={},o=[];for(const i of n)dr(i,((n,i,s,a)=>{const l=Sr(s,e,t,n,a);cr(l,(e=>{o.push(...e)}),(e=>{r[i]=e}))}),((e,n)=>{r[e]=n(t)}));return o.length>0?or(o):nr(r)})(t,n,e),toString:()=>{const t=P(e,(e=>dr(e,((e,t,n,r)=>e+\" -> \"+r.toString()),((e,t)=>\"state(\"+e+\")\"))));return\"obj{\\n\"+t.join(\"\\n\")+\"}\"}}),Tr=e=>({extract:(t,n)=>{const r=P(n,((n,r)=>e.extract(t.concat([\"[\"+r+\"]\"]),n)));return br(r)},toString:()=>\"array(\"+e.toString()+\")\"}),Fr=(e,t)=>{const n=void 0!==t?t:_;return{extract:(t,r)=>{const o=[];for(const i of e){const e=i.extract(t,r);if(e.stype===Xn.Value)return{stype:Xn.Value,svalue:n(e.svalue)};o.push(e)}return br(o)},toString:()=>\"oneOf(\"+P(e,(e=>e.toString())).join(\", \")+\")\"}},Or=(e,t)=>({extract:(n,r)=>{const o=se(r),i=((t,n)=>Tr(xr(e)).extract(t,n))(n,o);return ir(i,(e=>{const o=P(e,(e=>ur(e,e,{tag:\"required\",process:{}},t)));return Er(o).extract(n,r)}))},toString:()=>\"setOf(\"+t.toString()+\")\"}),Br=y(Tr,Er),Rr=b(Cr),$r=(e,t)=>xr((n=>{const r=typeof n;return e(n)?nr(n):or(`Expected type: ${t} but got: ${r}`)})),Nr=$r(p,\"number\"),Yr=$r(i,\"string\"),Pr=$r(u,\"boolean\"),Ir=$r(f,\"function\"),Hr=e=>{if(Object(e)!==e)return!0;switch({}.toString.call(e).slice(8,-1)){case\"Boolean\":case\"Number\":case\"String\":case\"Date\":case\"RegExp\":case\"Blob\":case\"FileList\":case\"ImageData\":case\"ImageBitmap\":case\"ArrayBuffer\":return!0;case\"Array\":case\"Object\":return Object.keys(e).every((t=>Hr(e[t])));default:return!1}},jr=xr((e=>Hr(e)?nr(e):or(\"Expected value to be acceptable for sending via postMessage\"))),Wr=(e,t,n,r)=>ve(n,r).fold((()=>((e,t,n)=>wr(e,(()=>'The chosen schema: \"'+n+'\" did not exist in branches: '+_r(t))))(e,n,r)),(n=>n.extract(e.concat([\"branch: \"+r]),t))),zr=(e,t)=>({extract:(n,r)=>ve(r,e).fold((()=>((e,t)=>wr(e,(()=>'Choice schema did not contain choice key: \"'+t+'\"')))(n,e)),(e=>Wr(n,r,t,e))),toString:()=>\"chooseOn(\"+e+\"). Possible values: \"+se(t)}),Ur=e=>xr((t=>e(t).fold(or,nr))),Vr=(e,t)=>Or((t=>er(e(t))),t),qr=(e,t,n)=>tr(((e,t,n)=>{const r=t.extract([e],n);return lr(r,(e=>({input:n,errors:e})))})(e,t,n)),Gr=e=>e.fold((e=>{throw new Error(Xr(e))}),_),Kr=(e,t,n)=>Gr(qr(e,t,n)),Xr=e=>\"Errors: \\n\"+(e=>{const t=e.length>10?e.slice(0,10).concat([{path:[],getErrorInfo:b(\"... (only showing first ten failures)\")}]):e;return P(t,(e=>\"Failed path: (\"+e.path.join(\" > \")+\")\\n\"+e.getErrorInfo()))})(e.errors).join(\"\\n\")+\"\\n\\nInput object: \"+_r(e.input),Jr=(e,t)=>zr(e,ce(t,Er)),Qr=ur,Zr=(e,t)=>({tag:\"custom\",newKey:e,instantiator:t}),eo=e=>Ur((t=>R(e,t)?Kn.value(t):Kn.error(`Unsupported value: \"${t}\", choose one of \"${e.join(\", \")}\".`))),to=e=>Qr(e,e,{tag:\"required\",process:{}},Rr()),no=(e,t)=>Qr(e,e,{tag:\"required\",process:{}},t),ro=e=>no(e,Nr),oo=e=>no(e,Yr),io=(e,t)=>Qr(e,e,{tag:\"required\",process:{}},eo(t)),so=e=>no(e,Ir),ao=(e,t)=>Qr(e,e,{tag:\"required\",process:{}},Er(t)),lo=(e,t)=>Qr(e,e,{tag:\"required\",process:{}},Br(t)),co=(e,t)=>Qr(e,e,{tag:\"required\",process:{}},Tr(t)),uo=e=>Qr(e,e,{tag:\"option\",process:{}},Rr()),ho=(e,t)=>Qr(e,e,{tag:\"option\",process:{}},t),mo=e=>ho(e,Nr),fo=e=>ho(e,Yr),po=(e,t)=>ho(e,eo(t)),go=e=>ho(e,Ir),vo=(e,t)=>ho(e,Tr(t)),yo=(e,t)=>ho(e,Er(t)),bo=(e,t)=>Qr(e,e,gr(t),Rr()),_o=(e,t,n)=>Qr(e,e,gr(t),n),wo=(e,t)=>_o(e,t,Nr),xo=(e,t)=>_o(e,t,Yr),Co=(e,t,n)=>_o(e,t,eo(n)),ko=(e,t)=>_o(e,t,Pr),Do=(e,t)=>_o(e,t,Ir),So=(e,t,n)=>_o(e,t,Tr(n)),Ao=(e,t,n)=>_o(e,t,Er(n)),Mo=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}},Lo=e=>{if(!l(e))throw new Error(\"cases must be an array\");if(0===e.length)throw new Error(\"there must be at least one case\");const t=[],n={};return I(e,((r,o)=>{const i=se(r);if(1!==i.length)throw new Error(\"one and only one name per case\");const s=i[0],a=r[s];if(void 0!==n[s])throw new Error(\"duplicate key detected:\"+s);if(\"cata\"===s)throw new Error(\"cannot have a case named cata (sorry)\");if(!l(a))throw new Error(\"case arguments must be an array\");t.push(s),n[s]=(...n)=>{const r=n.length;if(r!==a.length)throw new Error(\"Wrong number of arguments to case \"+s+\". Expected \"+a.length+\" (\"+a+\"), got \"+r);return{fold:(...t)=>{if(t.length!==e.length)throw new Error(\"Wrong number of arguments to fold. Expected \"+e.length+\", got \"+t.length);return t[o].apply(null,n)},match:e=>{const r=se(e);if(t.length!==r.length)throw new Error(\"Wrong number of arguments to match. Expected: \"+t.join(\",\")+\"\\nActual: \"+r.join(\",\"));if(!K(t,(e=>R(r,e))))throw new Error(\"Not all branches were specified when using match. Specified: \"+r.join(\", \")+\"\\nRequired: \"+t.join(\", \"));return e[s].apply(null,n)},log:e=>{console.log(e,{constructors:t,constructor:s,params:n})}}}})),n};Lo([{bothErrors:[\"error1\",\"error2\"]},{firstError:[\"error1\",\"value2\"]},{secondError:[\"value1\",\"error2\"]},{bothValues:[\"value1\",\"value2\"]}]);const Eo=(e,t)=>((e,t)=>{const n={};return le(e,((e,r)=>{R(t,r)||(n[r]=e)})),n})(e,t),To=(e,t)=>((e,t)=>({[e]:t}))(e,t),Fo=e=>(e=>{const t={};return I(e,(e=>{t[e.key]=e.value})),t})(e),Oo=(e,t)=>{const n=(e=>{const t=[],n=[];return I(e,(e=>{e.fold((e=>{t.push(e)}),(e=>{n.push(e)}))})),{errors:t,values:n}})(e);return n.errors.length>0?(r=n.errors,Kn.error(q(r))):((e,t)=>0===e.length?Kn.value(t):Kn.value(mr(t,fr.apply(void 0,e))))(n.values,t);var r},Bo=e=>f(e)?e:S,Ro=(e,t,n)=>{let r=e.dom;const o=Bo(n);for(;r.parentNode;){r=r.parentNode;const e=Fe.fromDom(r),n=t(e);if(n.isSome())return n;if(o(e))break}return L.none()},$o=(e,t,n)=>{const r=t(e),o=Bo(n);return r.orThunk((()=>o(e)?L.none():Ro(e,t,o)))},No=(e,t)=>qe(e.element,t.event.target),Yo={can:A,abort:S,run:v},Po=e=>{if(!be(e,\"can\")&&!be(e,\"abort\")&&!be(e,\"run\"))throw new Error(\"EventHandler defined by: \"+JSON.stringify(e,null,2)+\" does not have can, abort, or run!\");return{...Yo,...e}},Io=e=>{const t=((e,t)=>(...n)=>z(e,((e,r)=>e&&t(r).apply(void 0,n)),!0))(e,(e=>e.can)),n=((e,t)=>(...n)=>z(e,((e,r)=>e||t(r).apply(void 0,n)),!1))(e,(e=>e.abort));return{can:t,abort:n,run:(...t)=>{I(e,(e=>{e.run.apply(void 0,t)}))}}},Ho=b,jo=Ho(\"touchstart\"),Wo=Ho(\"touchmove\"),zo=Ho(\"touchend\"),Uo=Ho(\"touchcancel\"),Vo=Ho(\"mousedown\"),qo=Ho(\"mousemove\"),Go=Ho(\"mouseout\"),Ko=Ho(\"mouseup\"),Xo=Ho(\"mouseover\"),Jo=Ho(\"focusin\"),Qo=Ho(\"focusout\"),Zo=Ho(\"keydown\"),ei=Ho(\"keyup\"),ti=Ho(\"input\"),ni=Ho(\"change\"),ri=Ho(\"click\"),oi=Ho(\"transitioncancel\"),ii=Ho(\"transitionend\"),si=Ho(\"transitionstart\"),ai=Ho(\"selectstart\"),li=e=>b(\"alloy.\"+e),ci={tap:li(\"tap\")},ui=li(\"focus\"),di=li(\"blur.post\"),hi=li(\"paste.post\"),mi=li(\"receive\"),fi=li(\"execute\"),pi=li(\"focus.item\"),gi=ci.tap,vi=li(\"longpress\"),yi=li(\"sandbox.close\"),bi=li(\"typeahead.cancel\"),_i=li(\"system.init\"),wi=li(\"system.touchmove\"),xi=li(\"system.touchend\"),Ci=li(\"system.scroll\"),ki=li(\"system.resize\"),Di=li(\"system.attached\"),Si=li(\"system.detached\"),Ai=li(\"system.dismissRequested\"),Mi=li(\"system.repositionRequested\"),Li=li(\"focusmanager.shifted\"),Ei=li(\"slotcontainer.visibility\"),Ti=li(\"change.tab\"),Fi=li(\"dismiss.tab\"),Oi=li(\"highlight\"),Bi=li(\"dehighlight\"),Ri=(e,t)=>{Pi(e,e.element,t,{})},$i=(e,t,n)=>{Pi(e,e.element,t,n)},Ni=e=>{Ri(e,fi())},Yi=(e,t,n)=>{Pi(e,t,n,{})},Pi=(e,t,n,r)=>{const o={target:t,...r};e.getSystem().triggerEvent(n,t,o)},Ii=(e,t,n,r)=>{e.getSystem().triggerEvent(n,t,r.event)},Hi=e=>Fo(e),ji=(e,t)=>({key:e,value:Po({abort:t})}),Wi=e=>({key:e,value:Po({run:(e,t)=>{t.event.prevent()}})}),zi=(e,t)=>({key:e,value:Po({run:t})}),Ui=(e,t,n)=>({key:e,value:Po({run:(e,r)=>{t.apply(void 0,[e,r].concat(n))}})}),Vi=e=>t=>({key:e,value:Po({run:(e,n)=>{No(e,n)&&t(e,n)}})}),qi=(e,t,n)=>((e,t)=>zi(e,((n,r)=>{n.getSystem().getByUid(t).each((t=>{Ii(t,t.element,e,r)}))})))(e,t.partUids[n]),Gi=(e,t)=>zi(e,((e,n)=>{const r=n.event,o=e.getSystem().getByDom(r.target).getOrThunk((()=>$o(r.target,(t=>e.getSystem().getByDom(t).toOptional()),S).getOr(e)));t(e,o,n)})),Ki=e=>zi(e,((e,t)=>{t.cut()})),Xi=e=>zi(e,((e,t)=>{t.stop()})),Ji=(e,t)=>Vi(e)(t),Qi=Vi(Di()),Zi=Vi(Si()),es=Vi(_i()),ts=(e=>t=>zi(e,t))(fi()),ns=e=>e.dom.innerHTML,rs=(e,t)=>{const n=Ke(e).dom,r=Fe.fromDom(n.createDocumentFragment()),o=((e,t)=>{const n=(t||document).createElement(\"div\");return n.innerHTML=e,nt(Fe.fromDom(n))})(t,n);Fn(r,o),On(e),Tn(e,r)},os=e=>((e,t)=>Fe.fromDom(e.dom.cloneNode(t)))(e,!1),is=e=>{if(st(e))return\"#shadow-root\";return(e=>{const t=Fe.fromTag(\"div\"),n=Fe.fromDom(e.dom.cloneNode(!0));return Tn(t,n),ns(t)})(os(e))},ss=e=>is(e),as=Hi([((e,t)=>({key:e,value:Po({can:t})}))(ui(),((e,t)=>{const n=t.event,r=n.originator,o=n.target;return!((e,t,n)=>qe(t,e.element)&&!qe(t,n))(e,r,o)||(console.warn(ui()+\" did not get interpreted by the desired target. \\nOriginator: \"+ss(r)+\"\\nTarget: \"+ss(o)+\"\\nCheck the \"+ui()+\" event handlers\"),!1)}))]);var ls=Object.freeze({__proto__:null,events:as});let cs=0;const us=e=>{const t=(new Date).getTime(),n=Math.floor(1e9*Math.random());return cs++,e+\"_\"+n+cs+String(t)},ds=b(\"alloy-id-\"),hs=b(\"data-alloy-id\"),ms=ds(),fs=hs(),ps=(e,t)=>{Object.defineProperty(e.dom,fs,{value:t,writable:!0})},gs=e=>{const t=Ie(e)?e.dom[fs]:null;return L.from(t)},vs=e=>us(e),ys=_,bs=e=>{const t=t=>`The component must be in a context to execute: ${t}`+(e?\"\\n\"+ss(e().element)+\" is not in context.\":\"\"),n=e=>()=>{throw new Error(t(e))},r=e=>()=>{console.warn(t(e))};return{debugInfo:b(\"fake\"),triggerEvent:r(\"triggerEvent\"),triggerFocus:r(\"triggerFocus\"),triggerEscape:r(\"triggerEscape\"),broadcast:r(\"broadcast\"),broadcastOn:r(\"broadcastOn\"),broadcastEvent:r(\"broadcastEvent\"),build:n(\"build\"),buildOrPatch:n(\"buildOrPatch\"),addToWorld:n(\"addToWorld\"),removeFromWorld:n(\"removeFromWorld\"),addToGui:n(\"addToGui\"),removeFromGui:n(\"removeFromGui\"),getByUid:n(\"getByUid\"),getByDom:n(\"getByDom\"),isConnected:S}},_s=bs(),ws=e=>P(e,(e=>Ae(e,\"/*\")?e.substring(0,e.length-\"/*\".length):e)),xs=(e,t)=>{const n=e.toString(),r=n.indexOf(\")\")+1,o=n.indexOf(\"(\"),i=n.substring(o+1,r-1).split(/,\\s*/);return e.toFunctionAnnotation=()=>({name:t,parameters:ws(i)}),e},Cs=us(\"alloy-premade\"),ks=e=>(Object.defineProperty(e.element.dom,Cs,{value:e.uid,writable:!0}),To(Cs,e)),Ds=e=>ve(e,Cs),Ss=e=>((e,t)=>{const n=t.toString(),r=n.indexOf(\")\")+1,o=n.indexOf(\"(\"),i=n.substring(o+1,r-1).split(/,\\s*/);return e.toFunctionAnnotation=()=>({name:\"OVERRIDE\",parameters:ws(i.slice(1))}),e})(((t,...n)=>e(t.getApis(),t,...n)),e),As={init:()=>Ms({readState:b(\"No State required\")})},Ms=e=>e,Ls=(e,t)=>{const n={};return le(e,((e,r)=>{le(e,((e,o)=>{const i=ve(n,o).getOr([]);n[o]=i.concat([t(r,e)])}))})),n},Es=e=>({classes:d(e.classes)?[]:e.classes,attributes:d(e.attributes)?{}:e.attributes,styles:d(e.styles)?{}:e.styles}),Ts=e=>e.cHandler,Fs=(e,t)=>({name:e,handler:t}),Os=(e,t)=>{const n={};return I(e,(e=>{n[e.name()]=e.handlers(t)})),n},Bs=(e,t,n,r)=>{const o=((e,t,n)=>{const r={...n,...Os(t,e)};return Ls(r,Fs)})(e,n,r);return Ns(o,t)},Rs=e=>{const t=(e=>f(e)?{can:A,abort:S,run:e}:e)(e);return(e,n,...r)=>{const o=[e,n].concat(r);t.abort.apply(void 0,o)?n.stop():t.can.apply(void 0,o)&&t.run.apply(void 0,o)}},$s=(e,t,n)=>{const r=t[n];return r?((e,t,n,r)=>{try{const o=ee(n,((n,o)=>{const i=n[t],s=o[t],a=r.indexOf(i),l=r.indexOf(s);if(-1===a)throw new Error(\"The ordering for \"+e+\" does not have an entry for \"+i+\".\\nOrder specified: \"+JSON.stringify(r,null,2));if(-1===l)throw new Error(\"The ordering for \"+e+\" does not have an entry for \"+s+\".\\nOrder specified: \"+JSON.stringify(r,null,2));return a<l?-1:l<a?1:0}));return Kn.value(o)}catch(e){return Kn.error([e])}})(\"Event: \"+n,\"name\",e,r).map((e=>{const t=P(e,(e=>e.handler));return Io(t)})):((e,t)=>Kn.error([\"The event (\"+e+') has more than one behaviour that listens to it.\\nWhen this occurs, you must specify an event ordering for the behaviours in your spec (e.g. [ \"listing\", \"toggling\" ]).\\nThe behaviours that can trigger it are: '+JSON.stringify(P(t,(e=>e.name)),null,2)]))(n,e)},Ns=(e,t)=>{const n=fe(e,((e,n)=>(1===e.length?Kn.value(e[0].handler):$s(e,t,n)).map((r=>{const o=Rs(r),i=e.length>1?j(t[n],(t=>$(e,(e=>e.name===t)))).join(\" > \"):e[0].name;return To(n,((e,t)=>({handler:e,purpose:t}))(o,i))}))));return Oo(n,{})},Ys=\"alloy.base.behaviour\",Ps=Er([Qr(\"dom\",\"dom\",{tag:\"required\",process:{}},Er([to(\"tag\"),bo(\"styles\",{}),bo(\"classes\",[]),bo(\"attributes\",{}),uo(\"value\"),uo(\"innerHtml\")])),to(\"components\"),to(\"uid\"),bo(\"events\",{}),bo(\"apis\",{}),Qr(\"eventOrder\",\"eventOrder\",(e=>vr(b(e)))({[fi()]:[\"disabling\",Ys,\"toggling\",\"typeaheadevents\"],[ui()]:[Ys,\"focusing\",\"keying\"],[_i()]:[Ys,\"disabling\",\"toggling\",\"representing\"],[ti()]:[Ys,\"representing\",\"streaming\",\"invalidating\"],[Si()]:[Ys,\"representing\",\"item-events\",\"tooltipping\"],[Vo()]:[\"focusing\",Ys,\"item-type-events\"],[jo()]:[\"focusing\",Ys,\"item-type-events\"],[Xo()]:[\"item-type-events\",\"tooltipping\"],[mi()]:[\"receiving\",\"reflecting\",\"tooltipping\"]}),Rr()),uo(\"domModification\")]),Is=e=>e.events,Hs=(e,t)=>{const n=_t(e,t);return void 0===n||\"\"===n?[]:n.split(\" \")},js=e=>void 0!==e.dom.classList,Ws=e=>Hs(e,\"class\"),zs=(e,t)=>((e,t,n)=>{const r=Hs(e,t).concat([n]);return yt(e,t,r.join(\" \")),!0})(e,\"class\",t),Us=(e,t)=>((e,t,n)=>{const r=j(Hs(e,t),(e=>e!==n));return r.length>0?yt(e,t,r.join(\" \")):Ct(e,t),!1})(e,\"class\",t),Vs=(e,t)=>{js(e)?e.dom.classList.add(t):zs(e,t)},qs=(e,t)=>{if(js(e)){e.dom.classList.remove(t)}else Us(e,t);(e=>{0===(js(e)?e.dom.classList:Ws(e)).length&&Ct(e,\"class\")})(e)},Gs=(e,t)=>js(e)&&e.dom.classList.contains(t),Ks=(e,t)=>{I(t,(t=>{Vs(e,t)}))},Xs=(e,t)=>{I(t,(t=>{qs(e,t)}))},Js=e=>js(e)?(e=>{const t=e.dom.classList,n=new Array(t.length);for(let e=0;e<t.length;e++){const r=t.item(e);null!==r&&(n[e]=r)}return n})(e):Ws(e),Qs=e=>e.dom.value,Zs=(e,t)=>{if(void 0===t)throw new Error(\"Value.set was undefined\");e.dom.value=t},ea=(e,t,n)=>{n.fold((()=>Tn(e,t)),(e=>{qe(e,t)||(Mn(e,t),Bn(e))}))},ta=(e,t,n)=>{const r=P(t,n),o=nt(e);return I(o.slice(r.length),Bn),r},na=(e,t,n,r)=>{const o=rt(e,t),i=r(n,o),s=((e,t,n)=>rt(e,t).map((e=>{if(n.exists((t=>!qe(t,e)))){const t=n.map(Ye).getOr(\"span\"),r=Fe.fromTag(t);return Mn(e,r),r}return e})))(e,t,o);return ea(e,i.element,s),i},ra=(e,t)=>{const n=se(e),r=se(t),o=J(r,n),i=((e,t)=>{const n={},r={};return he(e,t,de(n),de(r)),{t:n,f:r}})(e,((e,n)=>!ye(t,n)||e!==t[n])).t;return{toRemove:o,toSet:i}},oa=(e,t)=>{const{class:n,style:r,...o}=(e=>z(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}))(t),{toSet:i,toRemove:s}=ra(e.attributes,o),a=Ft(t),{toSet:l,toRemove:c}=ra(e.styles,a),u=Js(t),d=J(u,e.classes),h=J(e.classes,u);return I(s,(e=>Ct(t,e))),bt(t,i),Ks(t,h),Xs(t,d),I(c,(e=>Bt(t,e))),At(t,l),e.innerHtml.fold((()=>{const n=e.domChildren;((e,t)=>{ta(e,t,((t,n)=>{const r=rt(e,n);return ea(e,t,r),t}))})(t,n)}),(e=>{rs(t,e)})),(()=>{const n=t,r=e.value.getOrUndefined();r!==Qs(n)&&Zs(n,null!=r?r:\"\")})(),t},ia=(e,t)=>{const n=t.filter((t=>Ye(t)===e.tag&&!(e=>e.innerHtml.isSome()&&e.domChildren.length>0)(e)&&!(e=>ye(e.dom,Cs))(t))).bind((t=>((e,t)=>{try{const n=oa(e,t);return L.some(n)}catch(e){return L.none()}})(e,t))).getOrThunk((()=>(e=>{const t=Fe.fromTag(e.tag);bt(t,e.attributes),Ks(t,e.classes),At(t,e.styles),e.innerHtml.each((e=>rs(t,e)));const n=e.domChildren;return Fn(t,n),e.value.each((e=>{Zs(t,e)})),t})(e)));return ps(n,e.uid),n},sa=(e,t)=>((e,t)=>{const n=P(t,(e=>yo(e.name(),[to(\"config\"),bo(\"state\",As)]))),r=qr(\"component.behaviours\",Er(n),e.behaviours).fold((t=>{throw new Error(Xr(t)+\"\\nComplete spec:\\n\"+JSON.stringify(e,null,2))}),_);return{list:t,data:ce(r,(e=>{const t=e.map((e=>({config:e.config,state:e.state.init(e.config)})));return b(t)}))}})(e,t),aa=e=>{const t=(e=>{const t=ve(e,\"behaviours\").getOr({});return G(se(t),(e=>{const n=t[e];return m(n)?[n.me]:[]}))})(e);return sa(e,t)},la=(e,t,n)=>{const r={...(o=e).dom,uid:o.uid,domChildren:P(o.components,(e=>e.element))};var o;const i=(e=>e.domModification.fold((()=>Es({})),Es))(e),s={\"alloy.base.modification\":i},a=t.length>0?((e,t,n,r)=>{const o={...t};I(n,(t=>{o[t.name()]=t.exhibit(e,r)}));const i=Ls(o,((e,t)=>({name:e,modification:t}))),s=e=>W(e,((e,t)=>({...t.modification,...e})),{}),a=W(i.classes,((e,t)=>t.modification.concat(e)),[]),l=s(i.attributes),c=s(i.styles);return Es({classes:a,attributes:l,styles:c})})(n,s,t,r):i;return l=r,c=a,{...l,attributes:{...l.attributes,...c.attributes},styles:{...l.styles,...c.styles},classes:l.classes.concat(c.classes)};var l,c},ca=(e,t)=>{const n=()=>h,r=Mo(_s),o=Gr((e=>qr(\"custom.definition\",Ps,e))(e)),i=aa(e),s=(e=>e.list)(i),a=(e=>e.data)(i),l=la(o,s,a),c=ia(l,t),u=((e,t,n)=>{const r={\"alloy.base.behaviour\":Is(e)};return Bs(n,e.eventOrder,t,r).getOrDie()})(o,s,a),d=Mo(o.components),h={uid:e.uid,getSystem:r.get,config:t=>{const n=a;return(f(n[t.name()])?n[t.name()]:()=>{throw new Error(\"Could not find \"+t.name()+\" in \"+JSON.stringify(e,null,2))})()},hasConfigured:e=>f(a[e.name()]),spec:e,readState:e=>a[e]().map((e=>e.state.readState())).getOr(\"not enabled\"),getApis:()=>o.apis,connect:e=>{r.set(e)},disconnect:()=>{r.set(bs(n))},element:c,syncComponents:()=>{const e=nt(c),t=G(e,(e=>r.get().getByDom(e).fold((()=>[]),Z)));d.set(t)},components:d.get,events:u};return h},ua=(e,t)=>{const{events:n,...r}=ys(e),o=((e,t)=>{const n=ve(e,\"components\").getOr([]);return t.fold((()=>P(n,pa)),(e=>P(n,((t,n)=>fa(t,rt(e,n))))))})(r,t),i={...r,events:{...ls,...n},components:o};return Kn.value(ca(i,t))},da=e=>{const t=Fe.fromText(e);return ha({element:t})},ha=e=>{const t=Kr(\"external.component\",Lr([to(\"element\"),uo(\"uid\")]),e),n=Mo(bs()),r=t.uid.getOrThunk((()=>vs(\"external\")));ps(t.element,r);const o={uid:r,getSystem:n.get,config:L.none,hasConfigured:S,connect:e=>{n.set(e)},disconnect:()=>{n.set(bs((()=>o)))},getApis:()=>({}),element:t.element,spec:e,readState:b(\"No state\"),syncComponents:v,components:b([]),events:{}};return ks(o)},ma=vs,fa=(e,t)=>Ds(e).getOrThunk((()=>{const n=(e=>ye(e,\"uid\"))(e)?e:{uid:ma(\"\"),...e};return ua(n,t).getOrDie()})),pa=e=>fa(e,L.none()),ga=ks;var va=(e,t,n,r,o)=>e(n,r)?L.some(n):f(o)&&o(n)?L.none():t(n,r,o);const ya=(e,t,n)=>{let r=e.dom;const o=f(n)?n:S;for(;r.parentNode;){r=r.parentNode;const e=Fe.fromDom(r);if(t(e))return L.some(e);if(o(e))break}return L.none()},ba=(e,t,n)=>va(((e,t)=>t(e)),ya,e,t,n),_a=(e,t,n)=>ba(e,t,n).isSome(),wa=(e,t,n)=>ya(e,(e=>Ue(e,t)),n),xa=(e,t)=>((e,t)=>U(e.dom.childNodes,(e=>t(Fe.fromDom(e)))).map(Fe.fromDom))(e,(e=>Ue(e,t))),Ca=(e,t)=>((e,t)=>{const n=void 0===t?document:t.dom;return Ve(n)?L.none():L.from(n.querySelector(e)).map(Fe.fromDom)})(t,e),ka=(e,t,n)=>va(((e,t)=>Ue(e,t)),wa,e,t,n),Da=\"aria-controls\",Sa=()=>{const e=us(Da);return{id:e,link:t=>{yt(t,Da,e)},unlink:e=>{Ct(e,Da)}}},Aa=(e,t)=>(e=>ba(e,(e=>{if(!Ie(e))return!1;const t=_t(e,\"id\");return void 0!==t&&t.indexOf(Da)>-1})).bind((e=>{const t=_t(e,\"id\"),n=ct(e);return Ca(n,`[${Da}=\"${t}\"]`)})))(t).exists((t=>Ma(e,t))),Ma=(e,t)=>_a(t,(t=>qe(t,e.element)),S)||Aa(e,t),La=\"unknown\";var Ea;!function(e){e[e.STOP=0]=\"STOP\",e[e.NORMAL=1]=\"NORMAL\",e[e.LOGGING=2]=\"LOGGING\"}(Ea||(Ea={}));const Ta=Mo({}),Fa=(e,t,n)=>{switch(ve(Ta.get(),e).orThunk((()=>{const t=se(Ta.get());return ie(t,(t=>e.indexOf(t)>-1?L.some(Ta.get()[t]):L.none()))})).getOr(Ea.NORMAL)){case Ea.NORMAL:return n(Ra());case Ea.LOGGING:{const r=((e,t)=>{const n=[],r=(new Date).getTime();return{logEventCut:(e,t,r)=>{n.push({outcome:\"cut\",target:t,purpose:r})},logEventStopped:(e,t,r)=>{n.push({outcome:\"stopped\",target:t,purpose:r})},logNoParent:(e,t,r)=>{n.push({outcome:\"no-parent\",target:t,purpose:r})},logEventNoHandlers:(e,t)=>{n.push({outcome:\"no-handlers-left\",target:t})},logEventResponse:(e,t,r)=>{n.push({outcome:\"response\",purpose:r,target:t})},write:()=>{const o=(new Date).getTime();R([\"mousemove\",\"mouseover\",\"mouseout\",_i()],e)||console.log(e,{event:e,time:o-r,target:t.dom,sequence:P(n,(e=>R([\"cut\",\"stopped\",\"response\"],e.outcome)?\"{\"+e.purpose+\"} \"+e.outcome+\" at (\"+ss(e.target)+\")\":e.outcome))})}}})(e,t),o=n(r);return r.write(),o}case Ea.STOP:return!0}},Oa=[\"alloy/data/Fields\",\"alloy/debugging/Debugging\"],Ba=(e,t,n)=>Fa(e,t,n),Ra=b({logEventCut:v,logEventStopped:v,logNoParent:v,logEventNoHandlers:v,logEventResponse:v,write:v}),$a=b([to(\"menu\"),to(\"selectedMenu\")]),Na=b([to(\"item\"),to(\"selectedItem\")]);b(Er(Na().concat($a())));const Ya=b(Er(Na())),Pa=ao(\"initSize\",[to(\"numColumns\"),to(\"numRows\")]),Ia=()=>ao(\"markers\",[to(\"backgroundMenu\")].concat($a()).concat(Na())),Ha=e=>ao(\"markers\",P(e,to)),ja=(e,t,n)=>((()=>{const e=new Error;if(void 0!==e.stack){const t=e.stack.split(\"\\n\");return U(t,(e=>e.indexOf(\"alloy\")>0&&!$(Oa,(t=>e.indexOf(t)>-1)))).getOr(La)}})(),Qr(t,t,n,Ur((e=>Kn.value(((...t)=>e.apply(void 0,t))))))),Wa=e=>ja(0,e,gr(v)),za=e=>ja(0,e,gr(L.none)),Ua=e=>ja(0,e,{tag:\"required\",process:{}}),Va=e=>ja(0,e,{tag:\"required\",process:{}}),qa=(e,t)=>Zr(e,b(t)),Ga=e=>Zr(e,_),Ka=b(Pa),Xa=(e,t,n,r,o,i,s,a=!1)=>({x:e,y:t,bubble:n,direction:r,placement:o,restriction:i,label:`${s}-${o}`,alwaysFit:a}),Ja=Lo([{southeast:[]},{southwest:[]},{northeast:[]},{northwest:[]},{south:[]},{north:[]},{east:[]},{west:[]}]),Qa=Ja.southeast,Za=Ja.southwest,el=Ja.northeast,tl=Ja.northwest,nl=Ja.south,rl=Ja.north,ol=Ja.east,il=Ja.west,sl=(e,t,n,r)=>{const o=e+t;return o>r?n:o<n?r:o},al=(e,t,n)=>Math.min(Math.max(e,t),n),ll=(e,t)=>Q([\"left\",\"right\",\"top\",\"bottom\"],(n=>ve(t,n).map((t=>((e,t)=>{switch(t){case 1:return e.x;case 0:return e.x+e.width;case 2:return e.y;case 3:return e.y+e.height}})(e,t))))),cl=\"layout\",ul=e=>e.x,dl=(e,t)=>e.x+e.width/2-t.width/2,hl=(e,t)=>e.x+e.width-t.width,ml=(e,t)=>e.y-t.height,fl=e=>e.y+e.height,pl=(e,t)=>e.y+e.height/2-t.height/2,gl=(e,t,n)=>Xa(ul(e),fl(e),n.southeast(),Qa(),\"southeast\",ll(e,{left:1,top:3}),cl),vl=(e,t,n)=>Xa(hl(e,t),fl(e),n.southwest(),Za(),\"southwest\",ll(e,{right:0,top:3}),cl),yl=(e,t,n)=>Xa(ul(e),ml(e,t),n.northeast(),el(),\"northeast\",ll(e,{left:1,bottom:2}),cl),bl=(e,t,n)=>Xa(hl(e,t),ml(e,t),n.northwest(),tl(),\"northwest\",ll(e,{right:0,bottom:2}),cl),_l=(e,t,n)=>Xa(dl(e,t),ml(e,t),n.north(),rl(),\"north\",ll(e,{bottom:2}),cl),wl=(e,t,n)=>Xa(dl(e,t),fl(e),n.south(),nl(),\"south\",ll(e,{top:3}),cl),xl=(e,t,n)=>Xa((e=>e.x+e.width)(e),pl(e,t),n.east(),ol(),\"east\",ll(e,{left:0}),cl),Cl=(e,t,n)=>Xa(((e,t)=>e.x-t.width)(e,t),pl(e,t),n.west(),il(),\"west\",ll(e,{right:1}),cl),kl=()=>[gl,vl,yl,bl,wl,_l,xl,Cl],Dl=()=>[vl,gl,bl,yl,wl,_l,xl,Cl],Sl=()=>[yl,bl,gl,vl,_l,wl],Al=()=>[bl,yl,vl,gl,_l,wl],Ml=()=>[gl,vl,yl,bl,wl,_l],Ll=()=>[vl,gl,bl,yl,wl,_l];var El=Object.freeze({__proto__:null,events:e=>Hi([zi(mi(),((t,n)=>{const r=e.channels,o=se(r),i=n,s=((e,t)=>t.universal?e:j(e,(e=>R(t.channels,e))))(o,i);I(s,(e=>{const n=r[e],o=n.schema,s=Kr(\"channel[\"+e+\"] data\\nReceiver: \"+ss(t.element),o,i.data);n.onReceive(t,s)}))}))])}),Tl=[no(\"channels\",Vr(Kn.value,Lr([Ua(\"onReceive\"),bo(\"schema\",Rr())])))];const Fl=(e,t,n)=>es(((r,o)=>{n(r,e,t)})),Ol=(e,t,n)=>((e,t,n)=>{const r=n.toString(),o=r.indexOf(\")\")+1,i=r.indexOf(\"(\"),s=r.substring(i+1,o-1).split(/,\\s*/);return e.toFunctionAnnotation=()=>({name:t,parameters:ws(s.slice(0,1).concat(s.slice(3)))}),e})(((r,...o)=>{const i=[r].concat(o);return r.config({name:b(e)}).fold((()=>{throw new Error(\"We could not find any behaviour configuration for: \"+e+\". Using API: \"+n)}),(e=>{const n=Array.prototype.slice.call(i,1);return t.apply(void 0,[r,e.config,e.state].concat(n))}))}),n,t),Bl=e=>({key:e,value:void 0}),Rl=(e,t,n,r,o,i,s)=>{const a=e=>be(e,n)?e[n]():L.none(),l=ce(o,((e,t)=>Ol(n,e,t))),c={...ce(i,((e,t)=>xs(e,t))),...l,revoke:x(Bl,n),config:t=>{const r=Kr(n+\"-config\",e,t);return{key:n,value:{config:r,me:c,configAsRaw:Gt((()=>Kr(n+\"-config\",e,t))),initialConfig:t,state:s}}},schema:b(t),exhibit:(e,t)=>xe(a(e),ve(r,\"exhibit\"),((e,n)=>n(t,e.config,e.state))).getOrThunk((()=>Es({}))),name:b(n),handlers:e=>a(e).map((e=>ve(r,\"events\").getOr((()=>({})))(e.config,e.state))).getOr({})};return c},$l=e=>Fo(e),Nl=Lr([to(\"fields\"),to(\"name\"),bo(\"active\",{}),bo(\"apis\",{}),bo(\"state\",As),bo(\"extra\",{})]),Yl=e=>{const t=Kr(\"Creating behaviour: \"+e.name,Nl,e);return((e,t,n,r,o,i)=>{const s=Lr(e),a=yo(t,[(l=\"config\",c=e,ho(l,Lr(c)))]);var l,c;return Rl(s,a,t,n,r,o,i)})(t.fields,t.name,t.active,t.apis,t.extra,t.state)},Pl=Lr([to(\"branchKey\"),to(\"branches\"),to(\"name\"),bo(\"active\",{}),bo(\"apis\",{}),bo(\"state\",As),bo(\"extra\",{})]),Il=e=>{const t=Kr(\"Creating behaviour: \"+e.name,Pl,e);return((e,t,n,r,o,i)=>{const s=e,a=yo(t,[ho(\"config\",e)]);return Rl(s,a,t,n,r,o,i)})(Jr(t.branchKey,t.branches),t.name,t.active,t.apis,t.extra,t.state)},Hl=b(void 0),jl=Yl({fields:Tl,name:\"receiving\",active:El});var Wl=Object.freeze({__proto__:null,exhibit:(e,t)=>Es({classes:[],styles:t.useFixed()?{}:{position:\"relative\"}})});const zl=e=>e.dom.focus(),Ul=e=>{const t=ct(e).dom;return e.dom===t.activeElement},Vl=(e=Pn())=>L.from(e.dom.activeElement).map(Fe.fromDom),ql=e=>Vl(ct(e)).filter((t=>e.dom.contains(t.dom))),Gl=(e,t)=>{const n=ct(t),r=Vl(n).bind((e=>{const n=t=>qe(e,t);return n(t)?L.some(t):((e,t)=>{const n=e=>{for(let r=0;r<e.childNodes.length;r++){const o=Fe.fromDom(e.childNodes[r]);if(t(o))return L.some(o);const i=n(e.childNodes[r]);if(i.isSome())return i}return L.none()};return n(e.dom)})(t,n)})),o=e(t);return r.each((e=>{Vl(n).filter((t=>qe(t,e))).fold((()=>{zl(e)}),v)})),o},Kl=(e,t,n,r,o)=>{const i=e=>e+\"px\";return{position:e,left:t.map(i),top:n.map(i),right:r.map(i),bottom:o.map(i)}},Xl=(e,t)=>{Mt(e,(e=>({...e,position:L.some(e.position)}))(t))},Jl=Lo([{none:[]},{relative:[\"x\",\"y\",\"width\",\"height\"]},{fixed:[\"x\",\"y\",\"width\",\"height\"]}]),Ql=(e,t,n,r,o,i)=>{const s=t.rect,a=s.x-n,l=s.y-r,c=o-(a+s.width),u=i-(l+s.height),d=L.some(a),h=L.some(l),m=L.some(c),f=L.some(u),p=L.none();return((e,t,n,r,o,i,s,a,l)=>e.fold(t,n,r,o,i,s,a,l))(t.direction,(()=>Kl(e,d,h,p,p)),(()=>Kl(e,p,h,m,p)),(()=>Kl(e,d,p,p,f)),(()=>Kl(e,p,p,m,f)),(()=>Kl(e,d,h,p,p)),(()=>Kl(e,d,p,p,f)),(()=>Kl(e,d,h,p,p)),(()=>Kl(e,p,h,m,p)))},Zl=(e,t)=>e.fold((()=>{const e=t.rect;return Kl(\"absolute\",L.some(e.x),L.some(e.y),L.none(),L.none())}),((e,n,r,o)=>Ql(\"absolute\",t,e,n,r,o)),((e,n,r,o)=>Ql(\"fixed\",t,e,n,r,o))),ec=(e,t)=>{const n=x(jn,t),r=e.fold(n,n,(()=>{const e=Rn();return jn(t).translate(-e.left,-e.top)})),o=qt(t),i=Pt(t);return Wn(r.left,r.top,o,i)},tc=(e,t)=>t.fold((()=>e.fold(Vn,Vn,Wn)),(t=>e.fold(t,t,(()=>{const n=t(),r=nc(e,n.x,n.y);return Wn(r.left,r.top,n.width,n.height)})))),nc=(e,t,n)=>{const r=Ht(t,n);return e.fold(b(r),b(r),(()=>{const e=Rn();return r.translate(-e.left,-e.top)}))};Jl.none;const rc=Jl.relative,oc=Jl.fixed,ic=(e,t)=>((e,t)=>({anchorBox:e,origin:t}))(e,t),sc=\"data-alloy-placement\",ac=e=>wt(e,sc),lc=Lo([{fit:[\"reposition\"]},{nofit:[\"reposition\",\"visibleW\",\"visibleH\",\"isVisible\"]}]),cc=(e,t,n,r)=>{const o=e.bubble,i=o.offset,s=((e,t,n)=>{const r=(r,o)=>t[r].map((t=>{const i=\"top\"===r||\"bottom\"===r,s=i?n.top:n.left,a=(\"left\"===r||\"top\"===r?Math.max:Math.min)(t,o)+s;return i?al(a,e.y,e.bottom):al(a,e.x,e.right)})).getOr(o),o=r(\"left\",e.x),i=r(\"top\",e.y),s=r(\"right\",e.right),a=r(\"bottom\",e.bottom);return Wn(o,i,s-o,a-i)})(r,e.restriction,i),a=e.x+i.left,l=e.y+i.top,c=Wn(a,l,t,n),{originInBounds:u,sizeInBounds:d,visibleW:h,visibleH:m}=((e,t)=>{const{x:n,y:r,right:o,bottom:i}=t,{x:s,y:a,right:l,bottom:c,width:u,height:d}=e;return{originInBounds:s>=n&&s<=o&&a>=r&&a<=i,sizeInBounds:l<=o&&l>=n&&c<=i&&c>=r,visibleW:Math.min(u,s>=n?o-s:l-n),visibleH:Math.min(d,a>=r?i-a:c-r)}})(c,s),f=u&&d,p=f?c:((e,t)=>{const{x:n,y:r,right:o,bottom:i}=t,{x:s,y:a,width:l,height:c}=e,u=Math.max(n,o-l),d=Math.max(r,i-c),h=al(s,n,u),m=al(a,r,d),f=Math.min(h+l,o)-h,p=Math.min(m+c,i)-m;return Wn(h,m,f,p)})(c,s),g=p.width>0&&p.height>0,{maxWidth:v,maxHeight:y}=((e,t,n)=>{const r=b(t.bottom-n.y),o=b(n.bottom-t.y),i=((e,t,n,r)=>e.fold(t,t,r,r,t,r,n,n))(e,o,o,r),s=b(t.right-n.x),a=b(n.right-t.x),l=((e,t,n,r)=>e.fold(t,r,t,r,n,n,t,r))(e,a,a,s);return{maxWidth:l,maxHeight:i}})(e.direction,p,r),_={rect:p,maxHeight:y,maxWidth:v,direction:e.direction,placement:e.placement,classes:{on:o.classesOn,off:o.classesOff},layout:e.label,testY:l};return f||e.alwaysFit?lc.fit(_):lc.nofit(_,h,m,g)},uc=e=>{const t=Mo(L.none()),n=()=>t.get().each(e);return{clear:()=>{n(),t.set(L.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{n(),t.set(L.some(e))}}},dc=()=>uc((e=>e.unbind())),hc=()=>{const e=uc(v);return{...e,on:t=>e.get().each(t)}},mc=A,fc=(e,t,n)=>((e,t,n,r)=>Sn(e,t,n,r,!1))(e,t,mc,n),pc=(e,t,n)=>((e,t,n,r)=>Sn(e,t,n,r,!0))(e,t,mc,n),gc=Dn,vc=[\"top\",\"bottom\",\"right\",\"left\"],yc=\"data-alloy-transition-timer\",bc=(e,t)=>((e,t)=>K(t,(t=>Gs(e,t))))(e,t.classes),_c=(e,t)=>{const n=e=>parseFloat(e).toFixed(3);return pe(t,((t,r)=>!((e,t,n=w)=>xe(e,t,n).getOr(e.isNone()&&t.isNone()))(e[r].map(n),t.map(n)))).isSome()},wc=(e,t)=>{const n=dc(),r=dc();let o;const s=t=>{var n;const r=null!==(n=t.raw.pseudoElement)&&void 0!==n?n:\"\";return qe(t.target,e)&&!Le(r)&&R(vc,t.raw.propertyName)},a=i=>{if(h(i)||s(i)){n.clear(),r.clear();const s=null==i?void 0:i.raw.type;(h(s)||s===ii())&&(clearTimeout(o),Ct(e,yc),Xs(e,t.classes))}},l=fc(e,si(),(t=>{s(t)&&(l.unbind(),n.set(fc(e,ii(),a)),r.set(fc(e,oi(),a)))})),c=(e=>{const t=t=>{const n=Lt(e,t).split(/\\s*,\\s*/);return j(n,Le)},n=e=>{if(i(e)&&/^[\\d.]+/.test(e)){const t=parseFloat(e);return Ae(e,\"ms\")?t:1e3*t}return 0},r=t(\"transition-delay\"),o=t(\"transition-duration\");return z(o,((e,t,o)=>{const i=n(r[o])+n(t);return Math.max(e,i)}),0)})(e);requestAnimationFrame((()=>{o=setTimeout(a,c+17),yt(e,yc,o)}))},xc=(e,t,n,r,o,i)=>{const s=((e,t,n)=>n.exists((n=>{const r=e.mode;return\"all\"===r||n[r]!==t[r]})))(r,o,i);if(s||bc(e,r)){St(e,\"position\",n.position);const i=ec(t,e),a=Zl(t,{...o,rect:i}),l=Q(vc,(e=>a[e]));_c(n,l)&&(Mt(e,l),s&&((e,t)=>{Ks(e,t.classes),wt(e,yc).each((t=>{clearTimeout(parseInt(t,10)),Ct(e,yc)})),wc(e,t)})(e,r),Rt(e))}else Xs(e,r.classes)},Cc=(e,t,n,r)=>{Bt(t,\"max-height\"),Bt(t,\"max-width\");const o={width:qt(i=t),height:Pt(i)};var i;return((e,t,n,r,o,i)=>{const s=r.width,a=r.height,l=(t,l,c,u,d)=>{const h=t(n,r,o,e,i),m=cc(h,s,a,i);return m.fold(b(m),((e,t,n,r)=>(d===r?n>u||t>c:!d&&r)?m:lc.nofit(l,c,u,d)))},c=z(t,((e,t)=>{const n=x(l,t);return e.fold(b(e),n)}),lc.nofit({rect:n,maxHeight:r.height,maxWidth:r.width,direction:Qa(),placement:\"southeast\",classes:{on:[],off:[]},layout:\"none\",testY:n.y},-1,-1,!1));return c.fold(_,_)})(t,r.preference,e,o,n,r.bounds)},kc=(e,t)=>{((e,t)=>{yt(e,sc,t)})(e,t.placement)},Dc=(e,t)=>{((e,t)=>{const n=Nt.max(e,t,[\"margin-top\",\"border-top-width\",\"padding-top\",\"padding-bottom\",\"border-bottom-width\",\"margin-bottom\"]);St(e,\"max-height\",n+\"px\")})(e,Math.floor(t))},Sc=b(((e,t)=>{Dc(e,t),At(e,{\"overflow-x\":\"hidden\",\"overflow-y\":\"auto\"})})),Ac=b(((e,t)=>{Dc(e,t)})),Mc=(e,t,n)=>void 0===e[t]?n:e[t],Lc=(e,t,n,r)=>{const o=Cc(e,t,n,r);return((e,t,n)=>{const r=Zl(n.origin,t);n.transition.each((o=>{xc(e,n.origin,r,o,t,n.lastPlacement)})),Xl(e,r)})(t,o,r),kc(t,o),((e,t)=>{const n=t.classes;Xs(e,n.off),Ks(e,n.on)})(t,o),((e,t,n)=>{(0,n.maxHeightFunction)(e,t.maxHeight)})(t,o,r),((e,t,n)=>{(0,n.maxWidthFunction)(e,t.maxWidth)})(t,o,r),{layout:o.layout,placement:o.placement}},Ec=[\"valignCentre\",\"alignLeft\",\"alignRight\",\"alignCentre\",\"top\",\"bottom\",\"left\",\"right\",\"inset\"],Tc=(e,t,n,r=1)=>{const o=e*r,i=t*r,s=e=>ve(n,e).getOr([]),a=(e,t,n)=>{const r=J(Ec,n);return{offset:Ht(e,t),classesOn:G(n,s),classesOff:G(r,s)}};return{southeast:()=>a(-e,t,[\"top\",\"alignLeft\"]),southwest:()=>a(e,t,[\"top\",\"alignRight\"]),south:()=>a(-e/2,t,[\"top\",\"alignCentre\"]),northeast:()=>a(-e,-t,[\"bottom\",\"alignLeft\"]),northwest:()=>a(e,-t,[\"bottom\",\"alignRight\"]),north:()=>a(-e/2,-t,[\"bottom\",\"alignCentre\"]),east:()=>a(e,-t/2,[\"valignCentre\",\"left\"]),west:()=>a(-e,-t/2,[\"valignCentre\",\"right\"]),insetNortheast:()=>a(o,i,[\"top\",\"alignLeft\",\"inset\"]),insetNorthwest:()=>a(-o,i,[\"top\",\"alignRight\",\"inset\"]),insetNorth:()=>a(-o/2,i,[\"top\",\"alignCentre\",\"inset\"]),insetSoutheast:()=>a(o,-i,[\"bottom\",\"alignLeft\",\"inset\"]),insetSouthwest:()=>a(-o,-i,[\"bottom\",\"alignRight\",\"inset\"]),insetSouth:()=>a(-o/2,-i,[\"bottom\",\"alignCentre\",\"inset\"]),insetEast:()=>a(-o,-i/2,[\"valignCentre\",\"right\",\"inset\"]),insetWest:()=>a(o,-i/2,[\"valignCentre\",\"left\",\"inset\"])}},Fc=()=>Tc(0,0,{}),Oc=_,Bc=(e,t)=>n=>\"rtl\"===Rc(n)?t:e,Rc=e=>\"rtl\"===Lt(e,\"direction\")?\"rtl\":\"ltr\";var $c;!function(e){e.TopToBottom=\"toptobottom\",e.BottomToTop=\"bottomtotop\"}($c||($c={}));const Nc=\"data-alloy-vertical-dir\",Yc=e=>_a(e,(e=>Ie(e)&&_t(e,\"data-alloy-vertical-dir\")===$c.BottomToTop)),Pc=()=>yo(\"layouts\",[to(\"onLtr\"),to(\"onRtl\"),uo(\"onBottomLtr\"),uo(\"onBottomRtl\")]),Ic=(e,t,n,r,o,i,s)=>{const a=s.map(Yc).getOr(!1),l=t.layouts.map((t=>t.onLtr(e))),c=t.layouts.map((t=>t.onRtl(e))),u=a?t.layouts.bind((t=>t.onBottomLtr.map((t=>t(e))))).or(l).getOr(o):l.getOr(n),d=a?t.layouts.bind((t=>t.onBottomRtl.map((t=>t(e))))).or(c).getOr(i):c.getOr(r);return Bc(u,d)(e)};var Hc=[to(\"hotspot\"),uo(\"bubble\"),bo(\"overrides\",{}),Pc(),qa(\"placement\",((e,t,n)=>{const r=t.hotspot,o=ec(n,r.element),i=Ic(e.element,t,Ml(),Ll(),Sl(),Al(),L.some(t.hotspot.element));return L.some(Oc({anchorBox:o,bubble:t.bubble.getOr(Fc()),overrides:t.overrides,layouts:i,placer:L.none()}))}))];var jc=[to(\"x\"),to(\"y\"),bo(\"height\",0),bo(\"width\",0),bo(\"bubble\",Fc()),bo(\"overrides\",{}),Pc(),qa(\"placement\",((e,t,n)=>{const r=nc(n,t.x,t.y),o=Wn(r.left,r.top,t.width,t.height),i=Ic(e.element,t,kl(),Dl(),kl(),Dl(),L.none());return L.some(Oc({anchorBox:o,bubble:t.bubble,overrides:t.overrides,layouts:i,placer:L.none()}))}))];const Wc=Lo([{screen:[\"point\"]},{absolute:[\"point\",\"scrollLeft\",\"scrollTop\"]}]),zc=e=>e.fold(_,((e,t,n)=>e.translate(-t,-n))),Uc=e=>e.fold(_,_),Vc=e=>z(e,((e,t)=>e.translate(t.left,t.top)),Ht(0,0)),qc=e=>{const t=P(e,Uc);return Vc(t)},Gc=Wc.screen,Kc=Wc.absolute,Xc=(e,t,n)=>{const r=Ke(e.element),o=Rn(r),i=((e,t,n)=>{const r=Qe(n.root).dom;return L.from(r.frameElement).map(Fe.fromDom).filter((t=>{const n=Ke(t),r=Ke(e.element);return qe(n,r)})).map(Wt)})(e,0,n).getOr(o);return Kc(i,o.left,o.top)},Jc=(e,t,n,r)=>{const o=Gc(Ht(e,t));return L.some(((e,t,n)=>({point:e,width:t,height:n}))(o,n,r))},Qc=(e,t,n,r,o)=>e.map((e=>{const i=[t,e.point],s=(a=()=>qc(i),l=()=>qc(i),c=()=>(e=>{const t=P(e,zc);return Vc(t)})(i),r.fold(a,l,c));var a,l,c;const u=((e,t,n,r)=>({x:e,y:t,width:n,height:r}))(s.left,s.top,e.width,e.height),d=n.showAbove?Sl():Ml(),h=n.showAbove?Al():Ll(),m=Ic(o,n,d,h,d,h,L.none());return Oc({anchorBox:u,bubble:n.bubble.getOr(Fc()),overrides:n.overrides,layouts:m,placer:L.none()})}));var Zc=[to(\"node\"),to(\"root\"),uo(\"bubble\"),Pc(),bo(\"overrides\",{}),bo(\"showAbove\",!1),qa(\"placement\",((e,t,n)=>{const r=Xc(e,0,t);return t.node.filter(ft).bind((o=>{const i=o.dom.getBoundingClientRect(),s=Jc(i.left,i.top,i.width,i.height),a=t.node.getOr(e.element);return Qc(s,r,t,n,a)}))}))];const eu=(e,t,n,r)=>({start:e,soffset:t,finish:n,foffset:r}),tu=Lo([{before:[\"element\"]},{on:[\"element\",\"offset\"]},{after:[\"element\"]}]),nu=(tu.before,tu.on,tu.after,e=>e.fold(_,_,_)),ru=Lo([{domRange:[\"rng\"]},{relative:[\"startSitu\",\"finishSitu\"]},{exact:[\"start\",\"soffset\",\"finish\",\"foffset\"]}]),ou={domRange:ru.domRange,relative:ru.relative,exact:ru.exact,exactFromRange:e=>ru.exact(e.start,e.soffset,e.finish,e.foffset),getWin:e=>{const t=(e=>e.match({domRange:e=>Fe.fromDom(e.startContainer),relative:(e,t)=>nu(e),exact:(e,t,n,r)=>e}))(e);return Qe(t)},range:eu},iu=(e,t,n)=>{const r=e.document.createRange();var o;return o=r,t.fold((e=>{o.setStartBefore(e.dom)}),((e,t)=>{o.setStart(e.dom,t)}),(e=>{o.setStartAfter(e.dom)})),((e,t)=>{t.fold((t=>{e.setEndBefore(t.dom)}),((t,n)=>{e.setEnd(t.dom,n)}),(t=>{e.setEndAfter(t.dom)}))})(r,n),r},su=(e,t,n,r,o)=>{const i=e.document.createRange();return i.setStart(t.dom,n),i.setEnd(r.dom,o),i},au=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom,width:e.width,height:e.height}),lu=Lo([{ltr:[\"start\",\"soffset\",\"finish\",\"foffset\"]},{rtl:[\"start\",\"soffset\",\"finish\",\"foffset\"]}]),cu=(e,t,n)=>t(Fe.fromDom(n.startContainer),n.startOffset,Fe.fromDom(n.endContainer),n.endOffset),uu=(e,t)=>{const n=((e,t)=>t.match({domRange:e=>({ltr:b(e),rtl:L.none}),relative:(t,n)=>({ltr:Gt((()=>iu(e,t,n))),rtl:Gt((()=>L.some(iu(e,n,t))))}),exact:(t,n,r,o)=>({ltr:Gt((()=>su(e,t,n,r,o))),rtl:Gt((()=>L.some(su(e,r,o,t,n))))})}))(e,t);return((e,t)=>{const n=t.ltr();if(n.collapsed)return t.rtl().filter((e=>!1===e.collapsed)).map((e=>lu.rtl(Fe.fromDom(e.endContainer),e.endOffset,Fe.fromDom(e.startContainer),e.startOffset))).getOrThunk((()=>cu(0,lu.ltr,n)));return cu(0,lu.ltr,n)})(0,n)},du=(e,t)=>uu(e,t).match({ltr:(t,n,r,o)=>{const i=e.document.createRange();return i.setStart(t.dom,n),i.setEnd(r.dom,o),i},rtl:(t,n,r,o)=>{const i=e.document.createRange();return i.setStart(r.dom,o),i.setEnd(t.dom,n),i}});lu.ltr,lu.rtl;const hu=(e,t)=>((e,t)=>{const n=void 0===t?document:t.dom;return Ve(n)?[]:P(n.querySelectorAll(e),Fe.fromDom)})(t,e),mu=(e,t,n,r)=>{const o=((e,t,n,r)=>{const o=Ke(e).dom.createRange();return o.setStart(e.dom,t),o.setEnd(n.dom,r),o})(e,t,n,r),i=qe(e,n)&&t===r;return o.collapsed&&!i},fu=e=>{if(e.rangeCount>0){const t=e.getRangeAt(0),n=e.getRangeAt(e.rangeCount-1);return L.some(eu(Fe.fromDom(t.startContainer),t.startOffset,Fe.fromDom(n.endContainer),n.endOffset))}return L.none()},pu=e=>{if(null===e.anchorNode||null===e.focusNode)return fu(e);{const t=Fe.fromDom(e.anchorNode),n=Fe.fromDom(e.focusNode);return mu(t,e.anchorOffset,n,e.focusOffset)?L.some(eu(t,e.anchorOffset,n,e.focusOffset)):fu(e)}},gu=e=>(e=>L.from(e.getSelection()))(e).filter((e=>e.rangeCount>0)).bind(pu),vu=(e,t)=>(e=>{const t=e.getClientRects(),n=t.length>0?t[0]:e.getBoundingClientRect();return n.width>0||n.height>0?L.some(n).map(au):L.none()})(du(e,t)),yu=(e,t)=>(e=>{const t=e.getBoundingClientRect();return t.width>0||t.height>0?L.some(t).map(au):L.none()})(du(e,t)),bu=((e,t)=>{const n=t=>e(t)?L.from(t.dom.nodeValue):L.none();return{get:r=>{if(!e(r))throw new Error(\"Can only get \"+t+\" value of a \"+t+\" node\");return n(r).getOr(\"\")},getOption:n,set:(n,r)=>{if(!e(n))throw new Error(\"Can only set raw \"+t+\" value of a \"+t+\" node\");n.dom.nodeValue=r}}})(He,\"text\"),_u=(e,t)=>({element:e,offset:t}),wu=(e,t)=>{const n=nt(e);if(0===n.length)return _u(e,t);if(t<n.length)return _u(n[t],0);{const e=n[n.length-1],t=He(e)?(e=>bu.get(e))(e).length:nt(e).length;return _u(e,t)}},xu=(e,t)=>He(e)?_u(e,t):wu(e,t),Cu=(e,t)=>t.getSelection.getOrThunk((()=>()=>gu(e)))().map((e=>{const t=xu(e.start,e.soffset),n=xu(e.finish,e.foffset);return ou.range(t.element,t.offset,n.element,n.offset)}));var ku=[uo(\"getSelection\"),to(\"root\"),uo(\"bubble\"),Pc(),bo(\"overrides\",{}),bo(\"showAbove\",!1),qa(\"placement\",((e,t,n)=>{const r=Qe(t.root).dom,o=Xc(e,0,t),i=Cu(r,t).bind((e=>{const t=yu(r,ou.exactFromRange(e)).orThunk((()=>{const t=Fe.fromText(\"\\ufeff\");Mn(e.start,t);const n=vu(r,ou.exact(t,0,t,1));return Bn(t),n}));return t.bind((e=>Jc(e.left,e.top,e.width,e.height)))})),s=Cu(r,t).bind((e=>Ie(e.start)?L.some(e.start):et(e.start))).getOr(e.element);return Qc(i,o,t,n,s)}))];const Du=\"link-layout\",Su=e=>e.x+e.width,Au=(e,t)=>e.x-t.width,Mu=(e,t)=>e.y-t.height+e.height,Lu=e=>e.y,Eu=(e,t,n)=>Xa(Su(e),Lu(e),n.southeast(),Qa(),\"southeast\",ll(e,{left:0,top:2}),Du),Tu=(e,t,n)=>Xa(Au(e,t),Lu(e),n.southwest(),Za(),\"southwest\",ll(e,{right:1,top:2}),Du),Fu=(e,t,n)=>Xa(Su(e),Mu(e,t),n.northeast(),el(),\"northeast\",ll(e,{left:0,bottom:3}),Du),Ou=(e,t,n)=>Xa(Au(e,t),Mu(e,t),n.northwest(),tl(),\"northwest\",ll(e,{right:1,bottom:3}),Du),Bu=()=>[Eu,Tu,Fu,Ou],Ru=()=>[Tu,Eu,Ou,Fu];var $u=[to(\"item\"),Pc(),bo(\"overrides\",{}),qa(\"placement\",((e,t,n)=>{const r=ec(n,t.item.element),o=Ic(e.element,t,Bu(),Ru(),Bu(),Ru(),L.none());return L.some(Oc({anchorBox:r,bubble:Fc(),overrides:t.overrides,layouts:o,placer:L.none()}))}))],Nu=Jr(\"type\",{selection:ku,node:Zc,hotspot:Hc,submenu:$u,makeshift:jc});const Yu=[co(\"classes\",Yr),Co(\"mode\",\"all\",[\"all\",\"layout\",\"placement\"])],Pu=[bo(\"useFixed\",S),uo(\"getBounds\")],Iu=[no(\"anchor\",Nu),yo(\"transition\",Yu)],Hu=(e,t,n,r,o,i,s)=>((e,t,n,r,o,i,s,a)=>{const l=Mc(s,\"maxHeightFunction\",Sc()),c=Mc(s,\"maxWidthFunction\",v),u=e.anchorBox,d=e.origin,h={bounds:tc(d,i),origin:d,preference:r,maxHeightFunction:l,maxWidthFunction:c,lastPlacement:o,transition:a};return Lc(u,t,n,h)})(ic(n.anchorBox,t),o.element,n.bubble,n.layouts,i,r,n.overrides,s),ju=(e,t,n,r,o,i)=>{const s=i.map(zn);return Wu(e,t,n,r,o,s)},Wu=(e,t,n,r,o,i)=>{const s=Kr(\"placement.info\",Er(Iu),o),a=s.anchor,l=r.element,c=n.get(r.uid);Gl((()=>{St(l,\"position\",\"fixed\");const o=Tt(l,\"visibility\");St(l,\"visibility\",\"hidden\");const u=t.useFixed()?(()=>{const e=document.documentElement;return oc(0,0,e.clientWidth,e.clientHeight)})():(e=>{const t=Wt(e.element),n=e.element.dom.getBoundingClientRect();return rc(t.left,t.top,n.width,n.height)})(e),d=a.placement,h=i.map(b).or(t.getBounds);d(e,a,u).each((t=>{const o=t.placer.getOr(Hu)(e,u,t,h,r,c,s.transition);n.set(r.uid,o)})),o.fold((()=>{Bt(l,\"visibility\")}),(e=>{St(l,\"visibility\",e)})),Tt(l,\"left\").isNone()&&Tt(l,\"top\").isNone()&&Tt(l,\"right\").isNone()&&Tt(l,\"bottom\").isNone()&&_e(Tt(l,\"position\"),\"fixed\")&&Bt(l,\"position\")}),l)};var zu=Object.freeze({__proto__:null,position:(e,t,n,r,o)=>{ju(e,t,n,r,o,L.none())},positionWithin:ju,positionWithinBounds:Wu,getMode:(e,t,n)=>t.useFixed()?\"fixed\":\"absolute\",reset:(e,t,n,r)=>{const o=r.element;I([\"position\",\"left\",\"right\",\"top\",\"bottom\"],(e=>Bt(o,e))),(e=>{Ct(e,sc)})(o),n.clear(r.uid)}});const Uu=Yl({fields:Pu,name:\"positioning\",active:Wl,apis:zu,state:Object.freeze({__proto__:null,init:()=>{let e={};return Ms({readState:()=>e,clear:t=>{m(t)?delete e[t]:e={}},set:(t,n)=>{e[t]=n},get:t=>ve(e,t)})}})}),Vu=e=>e.getSystem().isConnected(),qu=e=>{Ri(e,Si());const t=e.components();I(t,qu)},Gu=e=>{const t=e.components();I(t,Gu),Ri(e,Di())},Ku=(e,t)=>{e.getSystem().addToWorld(t),ft(e.element)&&Gu(t)},Xu=e=>{qu(e),e.getSystem().removeFromWorld(e)},Ju=(e,t)=>{Tn(e.element,t.element)},Qu=(e,t,n)=>{const r=e.components();(e=>{I(e.components(),(e=>Bn(e.element))),On(e.element),e.syncComponents()})(e);const o=n(t),i=J(r,o);I(i,(t=>{qu(t),e.getSystem().removeFromWorld(t)})),I(o,(t=>{Vu(t)?Ju(e,t):(e.getSystem().addToWorld(t),Ju(e,t),ft(e.element)&&Gu(t))})),e.syncComponents()},Zu=(e,t)=>{ed(e,t,Tn)},ed=(e,t,n)=>{e.getSystem().addToWorld(t),n(e.element,t.element),ft(e.element)&&Gu(t),e.syncComponents()},td=e=>{qu(e),Bn(e.element),e.getSystem().removeFromWorld(e)},nd=e=>{const t=Ze(e.element).bind((t=>e.getSystem().getByDom(t).toOptional()));td(e),t.each((e=>{e.syncComponents()}))},rd=e=>{const t=e.components();I(t,td),On(e.element),e.syncComponents()},od=(e,t)=>{id(e,t,Tn)},id=(e,t,n)=>{n(e,t.element);const r=nt(t.element);I(r,(e=>{t.getByDom(e).each(Gu)}))},sd=e=>{const t=nt(e.element);I(t,(t=>{e.getByDom(t).each(qu)})),Bn(e.element)},ad=(e,t,n,r)=>{n.get().each((t=>{rd(e)}));const o=t.getAttachPoint(e);Zu(o,e);const i=e.getSystem().build(r);return Zu(e,i),n.set(i),i},ld=(e,t,n,r)=>{const o=ad(e,t,n,r);return t.onOpen(e,o),o},cd=(e,t,n)=>{n.get().each((r=>{rd(e),nd(e),t.onClose(e,r),n.clear()}))},ud=(e,t,n)=>n.isOpen(),dd=(e,t,n)=>{const r=t.getAttachPoint(e);St(e.element,\"position\",Uu.getMode(r)),((e,t,n,r)=>{Tt(e.element,t).fold((()=>{Ct(e.element,n)}),(t=>{yt(e.element,n,t)})),St(e.element,t,r)})(e,\"visibility\",t.cloakVisibilityAttr,\"hidden\")},hd=(e,t,n)=>{(e=>$([\"top\",\"left\",\"right\",\"bottom\"],(t=>Tt(e,t).isSome())))(e.element)||Bt(e.element,\"position\"),((e,t,n)=>{wt(e.element,n).fold((()=>Bt(e.element,t)),(n=>St(e.element,t,n)))})(e,\"visibility\",t.cloakVisibilityAttr)};var md=Object.freeze({__proto__:null,cloak:dd,decloak:hd,open:ld,openWhileCloaked:(e,t,n,r,o)=>{dd(e,t),ld(e,t,n,r),o(),hd(e,t)},close:cd,isOpen:ud,isPartOf:(e,t,n,r)=>ud(0,0,n)&&n.get().exists((n=>t.isPartOf(e,n,r))),getState:(e,t,n)=>n.get(),setContent:(e,t,n,r)=>n.get().map((()=>ad(e,t,n,r)))});var fd=Object.freeze({__proto__:null,events:(e,t)=>Hi([zi(yi(),((n,r)=>{cd(n,e,t)}))])}),pd=[Wa(\"onOpen\"),Wa(\"onClose\"),to(\"isPartOf\"),to(\"getAttachPoint\"),bo(\"cloakVisibilityAttr\",\"data-precloak-visibility\")];var gd=Object.freeze({__proto__:null,init:()=>{const e=hc(),t=b(\"not-implemented\");return Ms({readState:t,isOpen:e.isSet,clear:e.clear,set:e.set,get:e.get})}});const vd=Yl({fields:pd,name:\"sandboxing\",active:fd,apis:md,state:gd}),yd=b(\"dismiss.popups\"),bd=b(\"reposition.popups\"),_d=b(\"mouse.released\"),wd=Lr([bo(\"isExtraPart\",S),yo(\"fireEventInstead\",[bo(\"event\",Ai())])]),xd=e=>{const t=Kr(\"Dismissal\",wd,e);return{[yd()]:{schema:Lr([to(\"target\")]),onReceive:(e,n)=>{if(vd.isOpen(e)){vd.isPartOf(e,n.target)||t.isExtraPart(e,n.target)||t.fireEventInstead.fold((()=>vd.close(e)),(t=>Ri(e,t.event)))}}}}},Cd=Lr([yo(\"fireEventInstead\",[bo(\"event\",Mi())]),so(\"doReposition\")]),kd=e=>{const t=Kr(\"Reposition\",Cd,e);return{[bd()]:{onReceive:e=>{vd.isOpen(e)&&t.fireEventInstead.fold((()=>t.doReposition(e)),(t=>Ri(e,t.event)))}}}},Dd=(e,t,n)=>{t.store.manager.onLoad(e,t,n)},Sd=(e,t,n)=>{t.store.manager.onUnload(e,t,n)};var Ad=Object.freeze({__proto__:null,onLoad:Dd,onUnload:Sd,setValue:(e,t,n,r)=>{t.store.manager.setValue(e,t,n,r)},getValue:(e,t,n)=>t.store.manager.getValue(e,t,n),getState:(e,t,n)=>n});var Md=Object.freeze({__proto__:null,events:(e,t)=>{const n=e.resetOnDom?[Qi(((n,r)=>{Dd(n,e,t)})),Zi(((n,r)=>{Sd(n,e,t)}))]:[Fl(e,t,Dd)];return Hi(n)}});const Ld=()=>{const e=Mo(null);return Ms({set:e.set,get:e.get,isNotSet:()=>null===e.get(),clear:()=>{e.set(null)},readState:()=>({mode:\"memory\",value:e.get()})})},Ed=()=>{const e=Mo({}),t=Mo({});return Ms({readState:()=>({mode:\"dataset\",dataByValue:e.get(),dataByText:t.get()}),lookup:n=>ve(e.get(),n).orThunk((()=>ve(t.get(),n))),update:n=>{const r=e.get(),o=t.get(),i={},s={};I(n,(e=>{i[e.value]=e,ve(e,\"meta\").each((t=>{ve(t,\"text\").each((t=>{s[t]=e}))}))})),e.set({...r,...i}),t.set({...o,...s})},clear:()=>{e.set({}),t.set({})}})};var Td=Object.freeze({__proto__:null,memory:Ld,dataset:Ed,manual:()=>Ms({readState:v}),init:e=>e.store.manager.state(e)});const Fd=(e,t,n,r)=>{const o=t.store;n.update([r]),o.setValue(e,r),t.onSetValue(e,r)};var Od=[uo(\"initialValue\"),to(\"getFallbackEntry\"),to(\"getDataKey\"),to(\"setValue\"),qa(\"manager\",{setValue:Fd,getValue:(e,t,n)=>{const r=t.store,o=r.getDataKey(e);return n.lookup(o).getOrThunk((()=>r.getFallbackEntry(o)))},onLoad:(e,t,n)=>{t.store.initialValue.each((r=>{Fd(e,t,n,r)}))},onUnload:(e,t,n)=>{n.clear()},state:Ed})];var Bd=[to(\"getValue\"),bo(\"setValue\",v),uo(\"initialValue\"),qa(\"manager\",{setValue:(e,t,n,r)=>{t.store.setValue(e,r),t.onSetValue(e,r)},getValue:(e,t,n)=>t.store.getValue(e),onLoad:(e,t,n)=>{t.store.initialValue.each((n=>{t.store.setValue(e,n)}))},onUnload:v,state:As.init})];var Rd=[uo(\"initialValue\"),qa(\"manager\",{setValue:(e,t,n,r)=>{n.set(r),t.onSetValue(e,r)},getValue:(e,t,n)=>n.get(),onLoad:(e,t,n)=>{t.store.initialValue.each((e=>{n.isNotSet()&&n.set(e)}))},onUnload:(e,t,n)=>{n.clear()},state:Ld})],$d=[_o(\"store\",{mode:\"memory\"},Jr(\"mode\",{memory:Rd,manual:Bd,dataset:Od})),Wa(\"onSetValue\"),bo(\"resetOnDom\",!1)];const Nd=Yl({fields:$d,name:\"representing\",active:Md,apis:Ad,extra:{setValueFrom:(e,t)=>{const n=Nd.getValue(t);Nd.setValue(e,n)}},state:Td}),Yd=(e,t)=>Ao(e,{},P(t,(t=>{return n=t.name(),r=\"Cannot configure \"+t.name()+\" for \"+e,Qr(n,n,{tag:\"option\",process:{}},xr((e=>or(\"The field: \"+n+\" is forbidden. \"+r))));var n,r})).concat([Zr(\"dump\",_)])),Pd=e=>e.dump,Id=(e,t)=>({...$l(t),...e.dump}),Hd=Yd,jd=Id,Wd=\"placeholder\",zd=Lo([{single:[\"required\",\"valueThunk\"]},{multiple:[\"required\",\"valueThunks\"]}]),Ud=e=>ye(e,\"uiType\"),Vd=(e,t,n,r)=>Ud(n)&&n.uiType===Wd?((e,t,n,r)=>e.exists((e=>e!==n.owner))?zd.single(!0,b(n)):ve(r,n.name).fold((()=>{throw new Error(\"Unknown placeholder component: \"+n.name+\"\\nKnown: [\"+se(r)+\"]\\nNamespace: \"+e.getOr(\"none\")+\"\\nSpec: \"+JSON.stringify(n,null,2))}),(e=>e.replace())))(e,0,n,r):zd.single(!1,b(n)),qd=(e,t,n,r)=>Vd(e,0,n,r).fold(((o,i)=>{const s=Ud(n)?i(t,n.config,n.validated):i(t),a=ve(s,\"components\").getOr([]),l=G(a,(n=>qd(e,t,n,r)));return[{...s,components:l}]}),((e,r)=>{if(Ud(n)){const e=r(t,n.config,n.validated);return n.validated.preprocess.getOr(_)(e)}return r(t)})),Gd=(e,t,n,r)=>{const o=ce(r,((e,t)=>((e,t)=>{let n=!1;return{name:b(e),required:()=>t.fold(((e,t)=>e),((e,t)=>e)),used:()=>n,replace:()=>{if(n)throw new Error(\"Trying to use the same placeholder more than once: \"+e);return n=!0,t}}})(t,e))),i=((e,t,n,r)=>G(n,(n=>qd(e,t,n,r))))(e,t,n,o);return le(o,(n=>{if(!1===n.used()&&n.required())throw new Error(\"Placeholder: \"+n.name()+\" was not found in components list\\nNamespace: \"+e.getOr(\"none\")+\"\\nComponents: \"+JSON.stringify(t.components,null,2))})),i},Kd=zd.single,Xd=zd.multiple,Jd=b(Wd),Qd=Lo([{required:[\"data\"]},{external:[\"data\"]},{optional:[\"data\"]},{group:[\"data\"]}]),Zd=bo(\"factory\",{sketch:_}),eh=bo(\"schema\",[]),th=to(\"name\"),nh=Qr(\"pname\",\"pname\",pr((e=>\"<alloy.\"+us(e.name)+\">\")),Rr()),rh=Zr(\"schema\",(()=>[uo(\"preprocess\")])),oh=bo(\"defaults\",b({})),ih=bo(\"overrides\",b({})),sh=Er([Zd,eh,th,nh,oh,ih]),ah=Er([Zd,eh,th,oh,ih]),lh=Er([Zd,eh,th,nh,oh,ih]),ch=Er([Zd,rh,th,to(\"unit\"),nh,oh,ih]),uh=e=>e.fold(L.some,L.none,L.some,L.some),dh=e=>{const t=e=>e.name;return e.fold(t,t,t,t)},hh=(e,t)=>n=>{const r=Kr(\"Converting part type\",t,n);return e(r)},mh=hh(Qd.required,sh),fh=hh(Qd.external,ah),ph=hh(Qd.optional,lh),gh=hh(Qd.group,ch),vh=b(\"entirety\");var yh=Object.freeze({__proto__:null,required:mh,external:fh,optional:ph,group:gh,asNamedPart:uh,name:dh,asCommon:e=>e.fold(_,_,_,_),original:vh});const bh=(e,t,n,r)=>mr(t.defaults(e,n,r),n,{uid:e.partUids[t.name]},t.overrides(e,n,r)),_h=(e,t)=>{const n={};return I(t,(t=>{uh(t).each((t=>{const r=wh(e,t.pname);n[t.name]=n=>{const o=Kr(\"Part: \"+t.name+\" in \"+e,Er(t.schema),n);return{...r,config:n,validated:o}}}))})),n},wh=(e,t)=>({uiType:Jd(),owner:e,name:t}),xh=(e,t,n)=>({uiType:Jd(),owner:e,name:t,config:n,validated:{}}),Ch=e=>G(e,(e=>e.fold(L.none,L.some,L.none,L.none).map((e=>ao(e.name,e.schema.concat([Ga(vh())])))).toArray())),kh=e=>P(e,dh),Dh=(e,t,n)=>((e,t,n)=>{const r={},o={};return I(n,(e=>{e.fold((e=>{r[e.pname]=Kd(!0,((t,n,r)=>e.factory.sketch(bh(t,e,n,r))))}),(e=>{const n=t.parts[e.name];o[e.name]=b(e.factory.sketch(bh(t,e,n[vh()]),n))}),(e=>{r[e.pname]=Kd(!1,((t,n,r)=>e.factory.sketch(bh(t,e,n,r))))}),(e=>{r[e.pname]=Xd(!0,((t,n,r)=>{const o=t[e.name];return P(o,(n=>e.factory.sketch(mr(e.defaults(t,n,r),n,e.overrides(t,n)))))}))}))})),{internals:b(r),externals:b(o)}})(0,t,n),Sh=(e,t,n)=>Gd(L.some(e),t,t.components,n),Ah=(e,t,n)=>{const r=t.partUids[n];return e.getSystem().getByUid(r).toOptional()},Mh=(e,t,n)=>Ah(e,t,n).getOrDie(\"Could not find part: \"+n),Lh=(e,t,n)=>{const r={},o=t.partUids,i=e.getSystem();return I(n,(e=>{r[e]=b(i.getByUid(o[e]))})),r},Eh=(e,t)=>{const n=e.getSystem();return ce(t.partUids,((e,t)=>b(n.getByUid(e))))},Th=e=>se(e.partUids),Fh=(e,t,n)=>{const r={},o=t.partUids,i=e.getSystem();return I(n,(e=>{r[e]=b(i.getByUid(o[e]).getOrDie())})),r},Oh=(e,t)=>{const n=kh(t);return Fo(P(n,(t=>({key:t,value:e+\"-\"+t}))))},Bh=e=>Qr(\"partUids\",\"partUids\",vr((t=>Oh(t.uid,e))),Rr());var Rh=Object.freeze({__proto__:null,generate:_h,generateOne:xh,schemas:Ch,names:kh,substitutes:Dh,components:Sh,defaultUids:Oh,defaultUidsSchema:Bh,getAllParts:Eh,getAllPartNames:Th,getPart:Ah,getPartOrDie:Mh,getParts:Lh,getPartsOrDie:Fh});const $h=(e,t,n,r,o)=>{const i=((e,t)=>(e.length>0?[ao(\"parts\",e)]:[]).concat([to(\"uid\"),bo(\"dom\",{}),bo(\"components\",[]),Ga(\"originalSpec\"),bo(\"debug.sketcher\",{})]).concat(t))(r,o);return Kr(e+\" [SpecSchema]\",Lr(i.concat(t)),n)},Nh=(e,t,n,r,o)=>{const i=Yh(o),s=Ch(n),a=Bh(n),l=$h(e,t,i,s,[a]),c=Dh(0,l,n);return r(l,Sh(e,l,c.internals()),i,c.externals())},Yh=e=>(e=>ye(e,\"uid\"))(e)?e:{...e,uid:vs(\"uid\")},Ph=Lr([to(\"name\"),to(\"factory\"),to(\"configFields\"),bo(\"apis\",{}),bo(\"extraApis\",{})]),Ih=Lr([to(\"name\"),to(\"factory\"),to(\"configFields\"),to(\"partFields\"),bo(\"apis\",{}),bo(\"extraApis\",{})]),Hh=e=>{const t=Kr(\"Sketcher for \"+e.name,Ph,e),n=ce(t.apis,Ss),r=ce(t.extraApis,((e,t)=>xs(e,t)));return{name:t.name,configFields:t.configFields,sketch:e=>((e,t,n,r)=>{const o=Yh(r);return n($h(e,t,o,[],[]),o)})(t.name,t.configFields,t.factory,e),...n,...r}},jh=e=>{const t=Kr(\"Sketcher for \"+e.name,Ih,e),n=_h(t.name,t.partFields),r=ce(t.apis,Ss),o=ce(t.extraApis,((e,t)=>xs(e,t)));return{name:t.name,partFields:t.partFields,configFields:t.configFields,sketch:e=>Nh(t.name,t.configFields,t.partFields,t.factory,e),parts:n,...r,...o}},Wh=e=>ze(\"input\")(e)&&\"radio\"!==_t(e,\"type\")||ze(\"textarea\")(e);var zh=Object.freeze({__proto__:null,getCurrent:(e,t,n)=>t.find(e)});const Uh=[to(\"find\")],Vh=Yl({fields:Uh,name:\"composing\",apis:zh}),qh=[\"input\",\"button\",\"textarea\",\"select\"],Gh=(e,t,n)=>{(t.disabled()?em:tm)(e,t)},Kh=(e,t)=>!0===t.useNative&&R(qh,Ye(e.element)),Xh=e=>{yt(e.element,\"disabled\",\"disabled\")},Jh=e=>{Ct(e.element,\"disabled\")},Qh=e=>{yt(e.element,\"aria-disabled\",\"true\")},Zh=e=>{yt(e.element,\"aria-disabled\",\"false\")},em=(e,t,n)=>{t.disableClass.each((t=>{Vs(e.element,t)}));(Kh(e,t)?Xh:Qh)(e),t.onDisabled(e)},tm=(e,t,n)=>{t.disableClass.each((t=>{qs(e.element,t)}));(Kh(e,t)?Jh:Zh)(e),t.onEnabled(e)},nm=(e,t)=>Kh(e,t)?(e=>xt(e.element,\"disabled\"))(e):(e=>\"true\"===_t(e.element,\"aria-disabled\"))(e);var rm=Object.freeze({__proto__:null,enable:tm,disable:em,isDisabled:nm,onLoad:Gh,set:(e,t,n,r)=>{(r?em:tm)(e,t)}});var om=Object.freeze({__proto__:null,exhibit:(e,t)=>Es({classes:t.disabled()?t.disableClass.toArray():[]}),events:(e,t)=>Hi([ji(fi(),((t,n)=>nm(t,e))),Fl(e,t,Gh)])}),im=[Do(\"disabled\",S),bo(\"useNative\",!0),uo(\"disableClass\"),Wa(\"onDisabled\"),Wa(\"onEnabled\")];const sm=Yl({fields:im,name:\"disabling\",active:om,apis:rm}),am=(e,t,n,r)=>{const o=hu(e.element,\".\"+t.highlightClass);I(o,(n=>{$(r,(e=>qe(e.element,n)))||(qs(n,t.highlightClass),e.getSystem().getByDom(n).each((n=>{t.onDehighlight(e,n),Ri(n,Bi())})))}))},lm=(e,t,n,r)=>{am(e,t,0,[r]),cm(e,t,n,r)||(Vs(r.element,t.highlightClass),t.onHighlight(e,r),Ri(r,Oi()))},cm=(e,t,n,r)=>Gs(r.element,t.highlightClass),um=(e,t,n,r)=>{const o=hu(e.element,\".\"+t.itemClass);return L.from(o[r]).fold((()=>Kn.error(new Error(\"No element found with index \"+r))),e.getSystem().getByDom)},dm=(e,t,n)=>Ca(e.element,\".\"+t.itemClass).bind((t=>e.getSystem().getByDom(t).toOptional())),hm=(e,t,n)=>{const r=hu(e.element,\".\"+t.itemClass);return(r.length>0?L.some(r[r.length-1]):L.none()).bind((t=>e.getSystem().getByDom(t).toOptional()))},mm=(e,t,n,r)=>{const o=hu(e.element,\".\"+t.itemClass),i=V(o,(e=>Gs(e,t.highlightClass)));return i.bind((t=>{const n=sl(t,r,0,o.length-1);return e.getSystem().getByDom(o[n]).toOptional()}))},fm=(e,t,n)=>{const r=hu(e.element,\".\"+t.itemClass);return we(P(r,(t=>e.getSystem().getByDom(t).toOptional())))};var pm=Object.freeze({__proto__:null,dehighlightAll:(e,t,n)=>am(e,t,0,[]),dehighlight:(e,t,n,r)=>{cm(e,t,n,r)&&(qs(r.element,t.highlightClass),t.onDehighlight(e,r),Ri(r,Bi()))},highlight:lm,highlightFirst:(e,t,n)=>{dm(e,t).each((r=>{lm(e,t,n,r)}))},highlightLast:(e,t,n)=>{hm(e,t).each((r=>{lm(e,t,n,r)}))},highlightAt:(e,t,n,r)=>{um(e,t,n,r).fold((e=>{throw e}),(r=>{lm(e,t,n,r)}))},highlightBy:(e,t,n,r)=>{const o=fm(e,t);U(o,r).each((r=>{lm(e,t,n,r)}))},isHighlighted:cm,getHighlighted:(e,t,n)=>Ca(e.element,\".\"+t.highlightClass).bind((t=>e.getSystem().getByDom(t).toOptional())),getFirst:dm,getLast:hm,getPrevious:(e,t,n)=>mm(e,t,0,-1),getNext:(e,t,n)=>mm(e,t,0,1),getCandidates:fm}),gm=[to(\"highlightClass\"),to(\"itemClass\"),Wa(\"onHighlight\"),Wa(\"onDehighlight\")];const vm=Yl({fields:gm,name:\"highlighting\",apis:pm}),ym=[8],bm=[9],_m=[13],wm=[27],xm=[32],Cm=[37],km=[38],Dm=[39],Sm=[40],Am=(e,t,n)=>{const r=X(e.slice(0,t)),o=X(e.slice(t+1));return U(r.concat(o),n)},Mm=(e,t,n)=>{const r=X(e.slice(0,t));return U(r,n)},Lm=(e,t,n)=>{const r=e.slice(0,t),o=e.slice(t+1);return U(o.concat(r),n)},Em=(e,t,n)=>{const r=e.slice(t+1);return U(r,n)},Tm=e=>t=>{const n=t.raw;return R(e,n.which)},Fm=e=>t=>K(e,(e=>e(t))),Om=e=>!0===e.raw.shiftKey,Bm=e=>!0===e.raw.ctrlKey,Rm=C(Om),$m=(e,t)=>({matches:e,classification:t}),Nm=(e,t,n)=>{t.exists((e=>n.exists((t=>qe(t,e)))))||$i(e,Li(),{prevFocus:t,newFocus:n})},Ym=()=>{const e=e=>ql(e.element);return{get:e,set:(t,n)=>{const r=e(t);t.getSystem().triggerFocus(n,t.element);const o=e(t);Nm(t,r,o)}}},Pm=()=>{const e=e=>vm.getHighlighted(e).map((e=>e.element));return{get:e,set:(t,n)=>{const r=e(t);t.getSystem().getByDom(n).fold(v,(e=>{vm.highlight(t,e)}));const o=e(t);Nm(t,r,o)}}};var Im;!function(e){e.OnFocusMode=\"onFocus\",e.OnEnterOrSpaceMode=\"onEnterOrSpace\",e.OnApiMode=\"onApi\"}(Im||(Im={}));const Hm=(e,t,n,r,o)=>{const i=(e,t,n,r,o)=>((e,t)=>{const n=U(e,(e=>e.matches(t)));return n.map((e=>e.classification))})(n(e,t,r,o),t.event).bind((n=>n(e,t,r,o))),s={schema:()=>e.concat([bo(\"focusManager\",Ym()),_o(\"focusInside\",\"onFocus\",Ur((e=>R([\"onFocus\",\"onEnterOrSpace\",\"onApi\"],e)?Kn.value(e):Kn.error(\"Invalid value for focusInside\")))),qa(\"handler\",s),qa(\"state\",t),qa(\"sendFocusIn\",o)]),processKey:i,toEvents:(e,t)=>{const s=e.focusInside!==Im.OnFocusMode?L.none():o(e).map((n=>zi(ui(),((r,o)=>{n(r,e,t),o.stop()})))),a=[zi(Zo(),((r,s)=>{i(r,s,n,e,t).fold((()=>{((n,r)=>{const i=Tm(xm.concat(_m))(r.event);e.focusInside===Im.OnEnterOrSpaceMode&&i&&No(n,r)&&o(e).each((o=>{o(n,e,t),r.stop()}))})(r,s)}),(e=>{s.stop()}))})),zi(ei(),((n,o)=>{i(n,o,r,e,t).each((e=>{o.stop()}))}))];return Hi(s.toArray().concat(a))}};return s},jm=e=>{const t=[uo(\"onEscape\"),uo(\"onEnter\"),bo(\"selector\",'[data-alloy-tabstop=\"true\"]:not(:disabled)'),bo(\"firstTabstop\",0),bo(\"useTabstopAt\",A),uo(\"visibilitySelector\")].concat([e]),n=(e,t)=>{const n=e.visibilitySelector.bind((e=>ka(t,e))).getOr(t);return Yt(n)>0},r=(e,t,r)=>{((e,t)=>{const r=hu(e.element,t.selector),o=j(r,(e=>n(t,e)));return L.from(o[t.firstTabstop])})(e,t).each((n=>{t.focusManager.set(e,n)}))},o=(e,t,r,o,i)=>i(t,r,(e=>((e,t)=>n(e,t)&&e.useTabstopAt(t))(o,e))).fold((()=>o.cyclic?L.some(!0):L.none()),(t=>(o.focusManager.set(e,t),L.some(!0)))),i=(e,t,n,r)=>{const i=hu(e.element,n.selector);return((e,t)=>t.focusManager.get(e).bind((e=>ka(e,t.selector))))(e,n).bind((t=>V(i,x(qe,t)).bind((t=>o(e,i,t,n,r)))))},s=b([$m(Fm([Om,Tm(bm)]),((e,t,n)=>{const r=n.cyclic?Am:Mm;return i(e,0,n,r)})),$m(Tm(bm),((e,t,n)=>{const r=n.cyclic?Lm:Em;return i(e,0,n,r)})),$m(Fm([Rm,Tm(_m)]),((e,t,n)=>n.onEnter.bind((n=>n(e,t)))))]),a=b([$m(Tm(wm),((e,t,n)=>n.onEscape.bind((n=>n(e,t)))))]);return Hm(t,As.init,s,a,(()=>L.some(r)))};var Wm=jm(Zr(\"cyclic\",S)),zm=jm(Zr(\"cyclic\",A));const Um=(e,t,n)=>Wh(n)&&Tm(xm)(t.event)?L.none():((e,t,n)=>(Yi(e,n,fi()),L.some(!0)))(e,0,n),Vm=(e,t)=>L.some(!0),qm=[bo(\"execute\",Um),bo(\"useSpace\",!1),bo(\"useEnter\",!0),bo(\"useControlEnter\",!1),bo(\"useDown\",!1)],Gm=(e,t,n)=>n.execute(e,t,e.element);var Km=Hm(qm,As.init,((e,t,n,r)=>{const o=n.useSpace&&!Wh(e.element)?xm:[],i=n.useEnter?_m:[],s=n.useDown?Sm:[],a=o.concat(i).concat(s);return[$m(Tm(a),Gm)].concat(n.useControlEnter?[$m(Fm([Bm,Tm(_m)]),Gm)]:[])}),((e,t,n,r)=>n.useSpace&&!Wh(e.element)?[$m(Tm(xm),Vm)]:[]),(()=>L.none()));const Xm=()=>{const e=hc();return Ms({readState:()=>e.get().map((e=>({numRows:String(e.numRows),numColumns:String(e.numColumns)}))).getOr({numRows:\"?\",numColumns:\"?\"}),setGridSize:(t,n)=>{e.set({numRows:t,numColumns:n})},getNumRows:()=>e.get().map((e=>e.numRows)),getNumColumns:()=>e.get().map((e=>e.numColumns))})};var Jm=Object.freeze({__proto__:null,flatgrid:Xm,init:e=>e.state(e)});const Qm=e=>(t,n,r,o)=>{const i=e(t.element);return nf(i,t,n,r,o)},Zm=(e,t)=>{const n=Bc(e,t);return Qm(n)},ef=(e,t)=>{const n=Bc(t,e);return Qm(n)},tf=e=>(t,n,r,o)=>nf(e,t,n,r,o),nf=(e,t,n,r,o)=>r.focusManager.get(t).bind((n=>e(t.element,n,r,o))).map((e=>(r.focusManager.set(t,e),!0))),rf=tf,of=tf,sf=tf,af=e=>!(e=>e.offsetWidth<=0&&e.offsetHeight<=0)(e.dom),lf=(e,t,n)=>{const r=hu(e,n);return((e,t)=>V(e,t).map((t=>({index:t,candidates:e}))))(j(r,af),(e=>qe(e,t)))},cf=(e,t)=>V(e,(e=>qe(t,e))),uf=(e,t,n,r)=>r(Math.floor(t/n),t%n).bind((t=>{const r=t.row*n+t.column;return r>=0&&r<e.length?L.some(e[r]):L.none()})),df=(e,t,n,r,o)=>uf(e,t,r,((t,i)=>{const s=t===n-1?e.length-t*r:r,a=sl(i,o,0,s-1);return L.some({row:t,column:a})})),hf=(e,t,n,r,o)=>uf(e,t,r,((t,i)=>{const s=sl(t,o,0,n-1),a=s===n-1?e.length-s*r:r,l=al(i,0,a-1);return L.some({row:s,column:l})})),mf=[to(\"selector\"),bo(\"execute\",Um),za(\"onEscape\"),bo(\"captureTab\",!1),Ka()],ff=(e,t,n)=>{Ca(e.element,t.selector).each((n=>{t.focusManager.set(e,n)}))},pf=e=>(t,n,r,o)=>lf(t,n,r.selector).bind((t=>e(t.candidates,t.index,o.getNumRows().getOr(r.initSize.numRows),o.getNumColumns().getOr(r.initSize.numColumns)))),gf=(e,t,n)=>n.captureTab?L.some(!0):L.none(),vf=pf(((e,t,n,r)=>df(e,t,n,r,-1))),yf=pf(((e,t,n,r)=>df(e,t,n,r,1))),bf=pf(((e,t,n,r)=>hf(e,t,n,r,-1))),_f=pf(((e,t,n,r)=>hf(e,t,n,r,1))),wf=b([$m(Tm(Cm),Zm(vf,yf)),$m(Tm(Dm),ef(vf,yf)),$m(Tm(km),rf(bf)),$m(Tm(Sm),of(_f)),$m(Fm([Om,Tm(bm)]),gf),$m(Fm([Rm,Tm(bm)]),gf),$m(Tm(xm.concat(_m)),((e,t,n,r)=>((e,t)=>t.focusManager.get(e).bind((e=>ka(e,t.selector))))(e,n).bind((r=>n.execute(e,t,r)))))]),xf=b([$m(Tm(wm),((e,t,n)=>n.onEscape(e,t))),$m(Tm(xm),Vm)]);var Cf=Hm(mf,Xm,wf,xf,(()=>L.some(ff)));const kf=(e,t,n,r)=>{const o=(e,t,n)=>{const i=sl(t,r,0,n.length-1);return i===e?L.none():(s=n[i],\"button\"===Ye(s)&&\"disabled\"===_t(s,\"disabled\")?o(e,i,n):L.from(n[i]));var s};return lf(e,n,t).bind((e=>{const t=e.index,n=e.candidates;return o(t,t,n)}))},Df=[to(\"selector\"),bo(\"getInitial\",L.none),bo(\"execute\",Um),za(\"onEscape\"),bo(\"executeOnMove\",!1),bo(\"allowVertical\",!0)],Sf=(e,t,n)=>((e,t)=>t.focusManager.get(e).bind((e=>ka(e,t.selector))))(e,n).bind((r=>n.execute(e,t,r))),Af=(e,t,n)=>{t.getInitial(e).orThunk((()=>Ca(e.element,t.selector))).each((n=>{t.focusManager.set(e,n)}))},Mf=(e,t,n)=>kf(e,n.selector,t,-1),Lf=(e,t,n)=>kf(e,n.selector,t,1),Ef=e=>(t,n,r,o)=>e(t,n,r,o).bind((()=>r.executeOnMove?Sf(t,n,r):L.some(!0))),Tf=b([$m(Tm(xm),Vm),$m(Tm(wm),((e,t,n)=>n.onEscape(e,t)))]);var Ff=Hm(Df,As.init,((e,t,n,r)=>{const o=Cm.concat(n.allowVertical?km:[]),i=Dm.concat(n.allowVertical?Sm:[]);return[$m(Tm(o),Ef(Zm(Mf,Lf))),$m(Tm(i),Ef(ef(Mf,Lf))),$m(Tm(_m),Sf),$m(Tm(xm),Sf)]}),Tf,(()=>L.some(Af)));const Of=(e,t,n)=>L.from(e[t]).bind((e=>L.from(e[n]).map((e=>({rowIndex:t,columnIndex:n,cell:e}))))),Bf=(e,t,n,r)=>{const o=e[t].length,i=sl(n,r,0,o-1);return Of(e,t,i)},Rf=(e,t,n,r)=>{const o=sl(n,r,0,e.length-1),i=e[o].length,s=al(t,0,i-1);return Of(e,o,s)},$f=(e,t,n,r)=>{const o=e[t].length,i=al(n+r,0,o-1);return Of(e,t,i)},Nf=(e,t,n,r)=>{const o=al(n+r,0,e.length-1),i=e[o].length,s=al(t,0,i-1);return Of(e,o,s)},Yf=[ao(\"selectors\",[to(\"row\"),to(\"cell\")]),bo(\"cycles\",!0),bo(\"previousSelector\",L.none),bo(\"execute\",Um)],Pf=(e,t,n)=>{t.previousSelector(e).orThunk((()=>{const n=t.selectors;return Ca(e.element,n.cell)})).each((n=>{t.focusManager.set(e,n)}))},If=(e,t)=>(n,r,o)=>{const i=o.cycles?e:t;return ka(r,o.selectors.row).bind((e=>{const t=hu(e,o.selectors.cell);return cf(t,r).bind((t=>{const r=hu(n,o.selectors.row);return cf(r,e).bind((e=>{const n=((e,t)=>P(e,(e=>hu(e,t.selectors.cell))))(r,o);return i(n,e,t).map((e=>e.cell))}))}))}))},Hf=If(((e,t,n)=>Bf(e,t,n,-1)),((e,t,n)=>$f(e,t,n,-1))),jf=If(((e,t,n)=>Bf(e,t,n,1)),((e,t,n)=>$f(e,t,n,1))),Wf=If(((e,t,n)=>Rf(e,n,t,-1)),((e,t,n)=>Nf(e,n,t,-1))),zf=If(((e,t,n)=>Rf(e,n,t,1)),((e,t,n)=>Nf(e,n,t,1))),Uf=b([$m(Tm(Cm),Zm(Hf,jf)),$m(Tm(Dm),ef(Hf,jf)),$m(Tm(km),rf(Wf)),$m(Tm(Sm),of(zf)),$m(Tm(xm.concat(_m)),((e,t,n)=>ql(e.element).bind((r=>n.execute(e,t,r)))))]),Vf=b([$m(Tm(xm),Vm)]);var qf=Hm(Yf,As.init,Uf,Vf,(()=>L.some(Pf)));const Gf=[to(\"selector\"),bo(\"execute\",Um),bo(\"moveOnTab\",!1)],Kf=(e,t,n)=>n.focusManager.get(e).bind((r=>n.execute(e,t,r))),Xf=(e,t,n)=>{Ca(e.element,t.selector).each((n=>{t.focusManager.set(e,n)}))},Jf=(e,t,n)=>kf(e,n.selector,t,-1),Qf=(e,t,n)=>kf(e,n.selector,t,1),Zf=b([$m(Tm(km),sf(Jf)),$m(Tm(Sm),sf(Qf)),$m(Fm([Om,Tm(bm)]),((e,t,n,r)=>n.moveOnTab?sf(Jf)(e,t,n,r):L.none())),$m(Fm([Rm,Tm(bm)]),((e,t,n,r)=>n.moveOnTab?sf(Qf)(e,t,n,r):L.none())),$m(Tm(_m),Kf),$m(Tm(xm),Kf)]),ep=b([$m(Tm(xm),Vm)]);var tp=Hm(Gf,As.init,Zf,ep,(()=>L.some(Xf)));const np=[za(\"onSpace\"),za(\"onEnter\"),za(\"onShiftEnter\"),za(\"onLeft\"),za(\"onRight\"),za(\"onTab\"),za(\"onShiftTab\"),za(\"onUp\"),za(\"onDown\"),za(\"onEscape\"),bo(\"stopSpaceKeyup\",!1),uo(\"focusIn\")];var rp=Hm(np,As.init,((e,t,n)=>[$m(Tm(xm),n.onSpace),$m(Fm([Rm,Tm(_m)]),n.onEnter),$m(Fm([Om,Tm(_m)]),n.onShiftEnter),$m(Fm([Om,Tm(bm)]),n.onShiftTab),$m(Fm([Rm,Tm(bm)]),n.onTab),$m(Tm(km),n.onUp),$m(Tm(Sm),n.onDown),$m(Tm(Cm),n.onLeft),$m(Tm(Dm),n.onRight),$m(Tm(xm),n.onSpace)]),((e,t,n)=>[...n.stopSpaceKeyup?[$m(Tm(xm),Vm)]:[],$m(Tm(wm),n.onEscape)]),(e=>e.focusIn));const op=Wm.schema(),ip=zm.schema(),sp=Ff.schema(),ap=Cf.schema(),lp=qf.schema(),cp=Km.schema(),up=tp.schema(),dp=rp.schema();const hp=Il({branchKey:\"mode\",branches:Object.freeze({__proto__:null,acyclic:op,cyclic:ip,flow:sp,flatgrid:ap,matrix:lp,execution:cp,menu:up,special:dp}),name:\"keying\",active:{events:(e,t)=>e.handler.toEvents(e,t)},apis:{focusIn:(e,t,n)=>{t.sendFocusIn(t).fold((()=>{e.getSystem().triggerFocus(e.element,e.element)}),(r=>{r(e,t,n)}))},setGridSize:(e,t,n,r,o)=>{(e=>be(e,\"setGridSize\"))(n)?n.setGridSize(r,o):console.error(\"Layout does not support setGridSize\")}},state:Jm}),mp=(e,t)=>{Gl((()=>{Qu(e,t,(()=>P(t,e.getSystem().build)))}),e.element)},fp=(e,t)=>{Gl((()=>{((e,t,n)=>{const r=e.components(),o=G(t,(e=>Ds(e).toArray()));I(r,(e=>{R(o,e)||Xu(e)}));const i=n(t),s=J(r,i);I(s,(e=>{Vu(e)&&Xu(e)})),I(i,(t=>{Vu(t)||Ku(e,t)})),e.syncComponents()})(e,t,(()=>((e,t,n)=>ta(e,t,((t,r)=>na(e,r,t,n))))(e.element,t,e.getSystem().buildOrPatch)))}),e.element)},pp=(e,t,n,r)=>{Xu(t);const o=na(e.element,n,r,e.getSystem().buildOrPatch);Ku(e,o),e.syncComponents()},gp=(e,t,n)=>{const r=e.getSystem().build(n);ed(e,r,t)},vp=(e,t,n,r)=>{nd(t),gp(e,((e,t)=>((e,t,n)=>{rt(e,n).fold((()=>{Tn(e,t)}),(e=>{Mn(e,t)}))})(e,t,n)),r)},yp=(e,t)=>e.components(),bp=(e,t,n,r,o)=>{const i=yp(e);return L.from(i[r]).map((n=>(o.fold((()=>nd(n)),(o=>{(t.reuseDom?pp:vp)(e,n,r,o)})),n)))};var _p=Object.freeze({__proto__:null,append:(e,t,n,r)=>{gp(e,Tn,r)},prepend:(e,t,n,r)=>{gp(e,En,r)},remove:(e,t,n,r)=>{const o=yp(e),i=U(o,(e=>qe(r.element,e.element)));i.each(nd)},replaceAt:bp,replaceBy:(e,t,n,r,o)=>{const i=yp(e);return V(i,r).bind((n=>bp(e,t,0,n,o)))},set:(e,t,n,r)=>(t.reuseDom?fp:mp)(e,r),contents:yp});const wp=Yl({fields:[ko(\"reuseDom\",!0)],name:\"replacing\",apis:_p}),xp=(e,t)=>{const n=((e,t)=>{const n=Hi(t);return Yl({fields:[to(\"enabled\")],name:e,active:{events:b(n)}})})(e,t);return{key:e,value:{config:{},me:n,configAsRaw:b({}),initialConfig:{},state:As}}},Cp=(e,t)=>{t.ignore||(zl(e.element),t.onFocus(e))};var kp=Object.freeze({__proto__:null,focus:Cp,blur:(e,t)=>{t.ignore||(e=>{e.dom.blur()})(e.element)},isFocused:e=>Ul(e.element)});var Dp=Object.freeze({__proto__:null,exhibit:(e,t)=>{const n=t.ignore?{}:{attributes:{tabindex:\"-1\"}};return Es(n)},events:e=>Hi([zi(ui(),((t,n)=>{Cp(t,e),n.stop()}))].concat(e.stopMousedown?[zi(Vo(),((e,t)=>{t.event.prevent()}))]:[]))}),Sp=[Wa(\"onFocus\"),bo(\"stopMousedown\",!1),bo(\"ignore\",!1)];const Ap=Yl({fields:Sp,name:\"focusing\",active:Dp,apis:kp}),Mp=(e,t,n,r)=>{const o=n.get();n.set(r),((e,t,n)=>{t.toggleClass.each((t=>{n.get()?Vs(e.element,t):qs(e.element,t)}))})(e,t,n),((e,t,n)=>{const r=t.aria;r.update(e,r,n.get())})(e,t,n),o!==r&&t.onToggled(e,r)},Lp=(e,t,n)=>{Mp(e,t,n,!n.get())},Ep=(e,t,n)=>{Mp(e,t,n,t.selected)};var Tp=Object.freeze({__proto__:null,onLoad:Ep,toggle:Lp,isOn:(e,t,n)=>n.get(),on:(e,t,n)=>{Mp(e,t,n,!0)},off:(e,t,n)=>{Mp(e,t,n,!1)},set:Mp});var Fp=Object.freeze({__proto__:null,exhibit:()=>Es({}),events:(e,t)=>{const n=(r=e,o=t,i=Lp,ts((e=>{i(e,r,o)})));var r,o,i;const s=Fl(e,t,Ep);return Hi(q([e.toggleOnExecute?[n]:[],[s]]))}});const Op=(e,t,n)=>{yt(e.element,\"aria-expanded\",n)};var Bp=[bo(\"selected\",!1),uo(\"toggleClass\"),bo(\"toggleOnExecute\",!0),Wa(\"onToggled\"),_o(\"aria\",{mode:\"none\"},Jr(\"mode\",{pressed:[bo(\"syncWithExpanded\",!1),qa(\"update\",((e,t,n)=>{yt(e.element,\"aria-pressed\",n),t.syncWithExpanded&&Op(e,t,n)}))],checked:[qa(\"update\",((e,t,n)=>{yt(e.element,\"aria-checked\",n)}))],expanded:[qa(\"update\",Op)],selected:[qa(\"update\",((e,t,n)=>{yt(e.element,\"aria-selected\",n)}))],none:[qa(\"update\",v)]}))];const Rp=Yl({fields:Bp,name:\"toggling\",active:Fp,apis:Tp,state:($p=!1,{init:()=>{const e=Mo($p);return{get:()=>e.get(),set:t=>e.set(t),clear:()=>e.set($p),readState:()=>e.get()}}})});var $p;const Np=()=>{const e=(e,t)=>{t.stop(),Ni(e)};return[zi(ri(),e),zi(gi(),e),Ki(jo()),Ki(Vo())]},Yp=e=>Hi(q([e.map((e=>ts(((t,n)=>{e(t),n.stop()})))).toArray(),Np()])),Pp=\"alloy.item-hover\",Ip=\"alloy.item-focus\",Hp=\"alloy.item-toggled\",jp=e=>{(ql(e.element).isNone()||Ap.isFocused(e))&&(Ap.isFocused(e)||Ap.focus(e),$i(e,Pp,{item:e}))},Wp=e=>{$i(e,Ip,{item:e})},zp=b(Pp),Up=b(Ip),Vp=b(Hp),qp=e=>e.toggling.map((e=>e.exclusive?\"menuitemradio\":\"menuitemcheckbox\")).getOr(\"menuitem\"),Gp=e=>({aria:{mode:\"checked\"},...me(e,((e,t)=>\"exclusive\"!==t)),onToggled:(t,n)=>{f(e.onToggled)&&e.onToggled(t,n),((e,t)=>{$i(e,Hp,{item:e,state:t})})(t,n)}}),Kp=[to(\"data\"),to(\"components\"),to(\"dom\"),bo(\"hasSubmenu\",!1),uo(\"toggling\"),Hd(\"itemBehaviours\",[Rp,Ap,hp,Nd]),bo(\"ignoreFocus\",!1),bo(\"domModification\",{}),qa(\"builder\",(e=>({dom:e.dom,domModification:{...e.domModification,attributes:{role:qp(e),...e.domModification.attributes,\"aria-haspopup\":e.hasSubmenu,...e.hasSubmenu?{\"aria-expanded\":!1}:{}}},behaviours:jd(e.itemBehaviours,[e.toggling.fold(Rp.revoke,(e=>Rp.config(Gp(e)))),Ap.config({ignore:e.ignoreFocus,stopMousedown:e.ignoreFocus,onFocus:e=>{Wp(e)}}),hp.config({mode:\"execution\"}),Nd.config({store:{mode:\"memory\",initialValue:e.data}}),xp(\"item-type-events\",[...Np(),zi(Xo(),jp),zi(pi(),Ap.focus)])]),components:e.components,eventOrder:e.eventOrder}))),bo(\"eventOrder\",{})],Xp=[to(\"dom\"),to(\"components\"),qa(\"builder\",(e=>({dom:e.dom,components:e.components,events:Hi([Xi(pi())])})))],Jp=b(\"item-widget\"),Qp=b([mh({name:\"widget\",overrides:e=>({behaviours:$l([Nd.config({store:{mode:\"manual\",getValue:t=>e.data,setValue:v}})])})})]),Zp=[to(\"uid\"),to(\"data\"),to(\"components\"),to(\"dom\"),bo(\"autofocus\",!1),bo(\"ignoreFocus\",!1),Hd(\"widgetBehaviours\",[Nd,Ap,hp]),bo(\"domModification\",{}),Bh(Qp()),qa(\"builder\",(e=>{const t=Dh(Jp(),e,Qp()),n=Sh(Jp(),e,t.internals()),r=t=>Ah(t,e,\"widget\").map((e=>(hp.focusIn(e),e))),o=(t,n)=>Wh(n.event.target)?L.none():e.autofocus?(n.setSource(t.element),L.none()):L.none();return{dom:e.dom,components:n,domModification:e.domModification,events:Hi([ts(((e,t)=>{r(e).each((e=>{t.stop()}))})),zi(Xo(),jp),zi(pi(),((t,n)=>{e.autofocus?r(t):Ap.focus(t)}))]),behaviours:jd(e.widgetBehaviours,[Nd.config({store:{mode:\"memory\",initialValue:e.data}}),Ap.config({ignore:e.ignoreFocus,onFocus:e=>{Wp(e)}}),hp.config({mode:\"special\",focusIn:e.autofocus?e=>{r(e)}:Hl(),onLeft:o,onRight:o,onEscape:(t,n)=>Ap.isFocused(t)||e.autofocus?e.autofocus?(n.setSource(t.element),L.none()):L.none():(Ap.focus(t),L.some(!0))})])}}))],eg=Jr(\"type\",{widget:Zp,item:Kp,separator:Xp}),tg=b([gh({factory:{sketch:e=>{const t=Kr(\"menu.spec item\",eg,e);return t.builder(t)}},name:\"items\",unit:\"item\",defaults:(e,t)=>ye(t,\"uid\")?t:{...t,uid:vs(\"item\")},overrides:(e,t)=>({type:t.type,ignoreFocus:e.fakeFocus,domModification:{classes:[e.markers.item]}})})]),ng=b([to(\"value\"),to(\"items\"),to(\"dom\"),to(\"components\"),bo(\"eventOrder\",{}),Yd(\"menuBehaviours\",[vm,Nd,Vh,hp]),_o(\"movement\",{mode:\"menu\",moveOnTab:!0},Jr(\"mode\",{grid:[Ka(),qa(\"config\",((e,t)=>({mode:\"flatgrid\",selector:\".\"+e.markers.item,initSize:{numColumns:t.initSize.numColumns,numRows:t.initSize.numRows},focusManager:e.focusManager})))],matrix:[qa(\"config\",((e,t)=>({mode:\"matrix\",selectors:{row:t.rowSelector,cell:\".\"+e.markers.item},focusManager:e.focusManager}))),to(\"rowSelector\")],menu:[bo(\"moveOnTab\",!0),qa(\"config\",((e,t)=>({mode:\"menu\",selector:\".\"+e.markers.item,moveOnTab:t.moveOnTab,focusManager:e.focusManager})))]})),no(\"markers\",Ya()),bo(\"fakeFocus\",!1),bo(\"focusManager\",Ym()),Wa(\"onHighlight\"),Wa(\"onDehighlight\")]),rg=b(\"alloy.menu-focus\"),og=jh({name:\"Menu\",configFields:ng(),partFields:tg(),factory:(e,t,n,r)=>({uid:e.uid,dom:e.dom,markers:e.markers,behaviours:Id(e.menuBehaviours,[vm.config({highlightClass:e.markers.selectedItem,itemClass:e.markers.item,onHighlight:e.onHighlight,onDehighlight:e.onDehighlight}),Nd.config({store:{mode:\"memory\",initialValue:e.value}}),Vh.config({find:L.some}),hp.config(e.movement.config(e,e.movement))]),events:Hi([zi(Up(),((e,t)=>{const n=t.event;e.getSystem().getByDom(n.target).each((n=>{vm.highlight(e,n),t.stop(),$i(e,rg(),{menu:e,item:n})}))})),zi(zp(),((e,t)=>{const n=t.event.item;vm.highlight(e,n)})),zi(Vp(),((e,t)=>{const{item:n,state:r}=t.event;r&&\"menuitemradio\"===_t(n.element,\"role\")&&((e,t)=>{const n=hu(e.element,'[role=\"menuitemradio\"][aria-checked=\"true\"]');I(n,(n=>{qe(n,t.element)||e.getSystem().getByDom(n).each((e=>{Rp.off(e)}))}))})(e,n)}))]),components:t,eventOrder:e.eventOrder,domModification:{attributes:{role:\"menu\"}}})}),ig=(e,t,n,r)=>ve(n,r).bind((r=>ve(e,r).bind((r=>{const o=ig(e,t,n,r);return L.some([r].concat(o))})))).getOr([]),sg=(e,t)=>{const n={};le(e,((e,t)=>{I(e,(e=>{n[e]=t}))}));const r=t,o=ue(t,((e,t)=>({k:e,v:t})));const i=ce(o,((e,t)=>[t].concat(ig(n,r,o,t))));return ce(n,(e=>ve(i,e).getOr([e])))},ag=e=>\"prepared\"===e.type?L.some(e.menu):L.none(),lg={init:()=>{const e=Mo({}),t=Mo({}),n=Mo({}),r=hc(),o=Mo({}),i=(t,n,r)=>s(t).bind((o=>(t=>pe(e.get(),((e,n)=>e===t)))(t).bind((e=>n(e).map((e=>({triggeredMenu:o,triggeringItem:e,triggeringPath:r}))))))),s=e=>a(e).bind(ag),a=e=>ve(t.get(),e),l=t=>ve(e.get(),t);return{setMenuBuilt:(e,n)=>{t.set({...t.get(),[e]:{type:\"prepared\",menu:n}})},setContents:(i,s,a,l)=>{r.set(i),e.set(a),t.set(s),o.set(l);const c=sg(l,a);n.set(c)},expand:t=>ve(e.get(),t).map((e=>{const r=ve(n.get(),t).getOr([]);return[e].concat(r)})),refresh:e=>ve(n.get(),e),collapse:e=>ve(n.get(),e).bind((e=>e.length>1?L.some(e.slice(1)):L.none())),lookupMenu:a,lookupItem:l,otherMenus:e=>{const t=o.get();return J(se(t),e)},getPrimary:()=>r.get().bind(s),getMenus:()=>t.get(),clear:()=>{e.set({}),t.set({}),n.set({}),r.clear()},isClear:()=>r.get().isNone(),getTriggeringPath:(e,t)=>{const o=j(l(e).toArray(),(e=>s(e).isSome()));return ve(n.get(),e).bind((e=>{const n=X(o.concat(e));return(e=>{const t=[];for(let n=0;n<e.length;n++){const r=e[n];if(!r.isSome())return L.none();t.push(r.getOrDie())}return L.some(t)})(G(n,((e,o)=>i(e,t,n.slice(0,o+1)).fold((()=>_e(r.get(),e)?[]:[L.none()]),(e=>[L.some(e)])))))}))}}},extractPreparedMenu:ag},cg=us(\"tiered-menu-item-highlight\"),ug=us(\"tiered-menu-item-dehighlight\");var dg;!function(e){e[e.HighlightMenuAndItem=0]=\"HighlightMenuAndItem\",e[e.HighlightJustMenu=1]=\"HighlightJustMenu\",e[e.HighlightNone=2]=\"HighlightNone\"}(dg||(dg={}));const hg=b(\"collapse-item\"),mg=Hh({name:\"TieredMenu\",configFields:[Va(\"onExecute\"),Va(\"onEscape\"),Ua(\"onOpenMenu\"),Ua(\"onOpenSubmenu\"),Wa(\"onRepositionMenu\"),Wa(\"onCollapseMenu\"),bo(\"highlightOnOpen\",dg.HighlightMenuAndItem),ao(\"data\",[to(\"primary\"),to(\"menus\"),to(\"expansions\")]),bo(\"fakeFocus\",!1),Wa(\"onHighlightItem\"),Wa(\"onDehighlightItem\"),Wa(\"onHover\"),Ia(),to(\"dom\"),bo(\"navigateOnHover\",!0),bo(\"stayInDom\",!1),Yd(\"tmenuBehaviours\",[hp,vm,Vh,wp]),bo(\"eventOrder\",{})],apis:{collapseMenu:(e,t)=>{e.collapseMenu(t)},highlightPrimary:(e,t)=>{e.highlightPrimary(t)},repositionMenus:(e,t)=>{e.repositionMenus(t)}},factory:(e,t)=>{const n=hc(),r=lg.init(),o=t=>{const n=((t,n,r)=>ce(r,((r,o)=>{const i=()=>og.sketch({...r,value:o,markers:e.markers,fakeFocus:e.fakeFocus,onHighlight:(e,t)=>{$i(e,cg,{menuComp:e,itemComp:t})},onDehighlight:(e,t)=>{$i(e,ug,{menuComp:e,itemComp:t})},focusManager:e.fakeFocus?Pm():Ym()});return o===n?{type:\"prepared\",menu:t.getSystem().build(i())}:{type:\"notbuilt\",nbMenu:i}})))(t,e.data.primary,e.data.menus),o=s();return r.setContents(e.data.primary,n,e.data.expansions,o),r.getPrimary()},i=e=>Nd.getValue(e).value,s=t=>ce(e.data.menus,((e,t)=>G(e.items,(e=>\"separator\"===e.type?[]:[e.data.value])))),a=vm.highlight,l=(t,n)=>{a(t,n),vm.getHighlighted(n).orThunk((()=>vm.getFirst(n))).each((r=>{e.fakeFocus?vm.highlight(n,r):Yi(t,r.element,pi())}))},c=(e,t)=>we(P(t,(t=>e.lookupMenu(t).bind((e=>\"prepared\"===e.type?L.some(e.menu):L.none()))))),u=(t,n,r)=>{const o=c(n,n.otherMenus(r));I(o,(n=>{Xs(n.element,[e.markers.backgroundMenu]),e.stayInDom||wp.remove(t,n)}))},d=(t,r)=>{const o=(t=>n.get().getOrThunk((()=>{const r={},o=hu(t.element,`.${e.markers.item}`),s=j(o,(e=>\"true\"===_t(e,\"aria-haspopup\")));return I(s,(e=>{t.getSystem().getByDom(e).each((e=>{const t=i(e);r[t]=e}))})),n.set(r),r})))(t);le(o,((e,t)=>{const n=R(r,t);yt(e.element,\"aria-expanded\",n)}))},h=(t,n,r)=>L.from(r[0]).bind((o=>n.lookupMenu(o).bind((o=>{if(\"notbuilt\"===o.type)return L.none();{const i=o.menu,s=c(n,r.slice(1));return I(s,(t=>{Vs(t.element,e.markers.backgroundMenu)})),ft(i.element)||wp.append(t,ga(i)),Xs(i.element,[e.markers.backgroundMenu]),l(t,i),u(t,n,r),L.some(i)}}))));let m;!function(e){e[e.HighlightSubmenu=0]=\"HighlightSubmenu\",e[e.HighlightParent=1]=\"HighlightParent\"}(m||(m={}));const f=(t,n,o=m.HighlightSubmenu)=>{if(n.hasConfigured(sm)&&sm.isDisabled(n))return L.some(n);{const s=i(n);return r.expand(s).bind((i=>(d(t,i),L.from(i[0]).bind((s=>r.lookupMenu(s).bind((a=>{const l=((e,t,n)=>{if(\"notbuilt\"===n.type){const o=e.getSystem().build(n.nbMenu());return r.setMenuBuilt(t,o),o}return n.menu})(t,s,a);return ft(l.element)||wp.append(t,ga(l)),e.onOpenSubmenu(t,n,l,X(i)),o===m.HighlightSubmenu?(vm.highlightFirst(l),h(t,r,i)):(vm.dehighlightAll(l),L.some(n))})))))))}},p=(t,n)=>{const o=i(n);return r.collapse(o).bind((o=>(d(t,o),h(t,r,o).map((r=>(e.onCollapseMenu(t,n,r),r))))))},g=t=>(n,r)=>ka(r.getSource(),`.${e.markers.item}`).bind((e=>n.getSystem().getByDom(e).toOptional().bind((e=>t(n,e).map(A))))),y=Hi([zi(rg(),((e,t)=>{const n=t.event.item;r.lookupItem(i(n)).each((()=>{const n=t.event.menu;vm.highlight(e,n);const o=i(t.event.item);r.refresh(o).each((t=>u(e,r,t)))}))})),ts(((t,n)=>{const r=n.event.target;t.getSystem().getByDom(r).each((n=>{0===i(n).indexOf(\"collapse-item\")&&p(t,n),f(t,n,m.HighlightSubmenu).fold((()=>{e.onExecute(t,n)}),v)}))})),Qi(((t,n)=>{o(t).each((n=>{wp.append(t,ga(n)),e.onOpenMenu(t,n),e.highlightOnOpen===dg.HighlightMenuAndItem?l(t,n):e.highlightOnOpen===dg.HighlightJustMenu&&a(t,n)}))})),zi(cg,((t,n)=>{e.onHighlightItem(t,n.event.menuComp,n.event.itemComp)})),zi(ug,((t,n)=>{e.onDehighlightItem(t,n.event.menuComp,n.event.itemComp)})),...e.navigateOnHover?[zi(zp(),((t,n)=>{const o=n.event.item;((e,t)=>{const n=i(t);r.refresh(n).bind((t=>(d(e,t),h(e,r,t))))})(t,o),f(t,o,m.HighlightParent),e.onHover(t,o)}))]:[]]),b=e=>vm.getHighlighted(e).bind(vm.getHighlighted),_={collapseMenu:e=>{b(e).each((t=>{p(e,t)}))},highlightPrimary:e=>{r.getPrimary().each((t=>{l(e,t)}))},repositionMenus:t=>{const n=r.getPrimary().bind((e=>b(t).bind((e=>{const t=i(e),n=ge(r.getMenus()),o=we(P(n,lg.extractPreparedMenu));return r.getTriggeringPath(t,(e=>((e,t,n)=>ie(t,(e=>{if(!e.getSystem().isConnected())return L.none();const t=vm.getCandidates(e);return U(t,(e=>i(e)===n))})))(0,o,e)))})).map((t=>({primary:e,triggeringPath:t})))));n.fold((()=>{(e=>L.from(e.components()[0]).filter((e=>\"menu\"===_t(e.element,\"role\"))))(t).each((n=>{e.onRepositionMenu(t,n,[])}))}),(({primary:n,triggeringPath:r})=>{e.onRepositionMenu(t,n,r)}))}};return{uid:e.uid,dom:e.dom,markers:e.markers,behaviours:Id(e.tmenuBehaviours,[hp.config({mode:\"special\",onRight:g(((e,t)=>Wh(t.element)?L.none():f(e,t,m.HighlightSubmenu))),onLeft:g(((e,t)=>Wh(t.element)?L.none():p(e,t))),onEscape:g(((t,n)=>p(t,n).orThunk((()=>e.onEscape(t,n).map((()=>t)))))),focusIn:(e,t)=>{r.getPrimary().each((t=>{Yi(e,t.element,pi())}))}}),vm.config({highlightClass:e.markers.selectedMenu,itemClass:e.markers.menu}),Vh.config({find:e=>vm.getHighlighted(e)}),wp.config({})]),eventOrder:e.eventOrder,apis:_,events:y}},extraApis:{tieredData:(e,t,n)=>({primary:e,menus:t,expansions:n}),singleData:(e,t)=>({primary:e,menus:To(e,t),expansions:{}}),collapseItem:e=>({value:us(hg()),meta:{text:e}})}}),fg=Hh({name:\"InlineView\",configFields:[to(\"lazySink\"),Wa(\"onShow\"),Wa(\"onHide\"),go(\"onEscape\"),Yd(\"inlineBehaviours\",[vd,Nd,jl]),yo(\"fireDismissalEventInstead\",[bo(\"event\",Ai())]),yo(\"fireRepositionEventInstead\",[bo(\"event\",Mi())]),bo(\"getRelated\",L.none),bo(\"isExtraPart\",S),bo(\"eventOrder\",L.none)],factory:(e,t)=>{const n=(e,t,n,o)=>{r(e,t,n,(()=>o.map((e=>zn(e)))))},r=(t,n,r,o)=>{const i=e.lazySink(t).getOrDie();vd.openWhileCloaked(t,n,(()=>Uu.positionWithinBounds(i,t,r,o()))),Nd.setValue(t,L.some({mode:\"position\",config:r,getBounds:o}))},o=(t,n,r,o)=>{const i=((e,t,n,r,o)=>{const i=()=>e.lazySink(t),s=\"horizontal\"===r.type?{layouts:{onLtr:()=>Ml(),onRtl:()=>Ll()}}:{},a=e=>(e=>2===e.length)(e)?s:{};return mg.sketch({dom:{tag:\"div\"},data:r.data,markers:r.menu.markers,highlightOnOpen:r.menu.highlightOnOpen,fakeFocus:r.menu.fakeFocus,onEscape:()=>(vd.close(t),e.onEscape.map((e=>e(t))),L.some(!0)),onExecute:()=>L.some(!0),onOpenMenu:(e,t)=>{Uu.positionWithinBounds(i().getOrDie(),t,n,o())},onOpenSubmenu:(e,t,n,r)=>{const o=i().getOrDie();Uu.position(o,n,{anchor:{type:\"submenu\",item:t,...a(r)}})},onRepositionMenu:(e,t,r)=>{const s=i().getOrDie();Uu.positionWithinBounds(s,t,n,o()),I(r,(e=>{const t=a(e.triggeringPath);Uu.position(s,e.triggeredMenu,{anchor:{type:\"submenu\",item:e.triggeringItem,...t}})}))}})})(e,t,n,r,o);vd.open(t,i),Nd.setValue(t,L.some({mode:\"menu\",menu:i}))},i=t=>{vd.isOpen(t)&&Nd.getValue(t).each((n=>{switch(n.mode){case\"menu\":vd.getState(t).each(mg.repositionMenus);break;case\"position\":const r=e.lazySink(t).getOrDie();Uu.positionWithinBounds(r,t,n.config,n.getBounds())}}))},s={setContent:(e,t)=>{vd.setContent(e,t)},showAt:(e,t,r)=>{n(e,t,r,L.none())},showWithin:n,showWithinBounds:r,showMenuAt:(e,t,n)=>{o(e,t,n,L.none)},showMenuWithinBounds:o,hide:e=>{vd.isOpen(e)&&(Nd.setValue(e,L.none()),vd.close(e))},getContent:e=>vd.getState(e),reposition:i,isOpen:vd.isOpen};return{uid:e.uid,dom:e.dom,behaviours:Id(e.inlineBehaviours,[vd.config({isPartOf:(t,n,r)=>Ma(n,r)||((t,n)=>e.getRelated(t).exists((e=>Ma(e,n))))(t,r),getAttachPoint:t=>e.lazySink(t).getOrDie(),onOpen:t=>{e.onShow(t)},onClose:t=>{e.onHide(t)}}),Nd.config({store:{mode:\"memory\",initialValue:L.none()}}),jl.config({channels:{...xd({isExtraPart:t.isExtraPart,...e.fireDismissalEventInstead.map((e=>({fireEventInstead:{event:e.event}}))).getOr({})}),...kd({...e.fireRepositionEventInstead.map((e=>({fireEventInstead:{event:e.event}}))).getOr({}),doReposition:i})}})]),eventOrder:e.eventOrder,apis:s}},apis:{showAt:(e,t,n,r)=>{e.showAt(t,n,r)},showWithin:(e,t,n,r,o)=>{e.showWithin(t,n,r,o)},showWithinBounds:(e,t,n,r,o)=>{e.showWithinBounds(t,n,r,o)},showMenuAt:(e,t,n,r)=>{e.showMenuAt(t,n,r)},showMenuWithinBounds:(e,t,n,r,o)=>{e.showMenuWithinBounds(t,n,r,o)},hide:(e,t)=>{e.hide(t)},isOpen:(e,t)=>e.isOpen(t),getContent:(e,t)=>e.getContent(t),setContent:(e,t,n)=>{e.setContent(t,n)},reposition:(e,t)=>{e.reposition(t)}}});var pg=tinymce.util.Tools.resolve(\"tinymce.util.Delay\");const gg=Hh({name:\"Button\",factory:e=>{const t=Yp(e.action),n=e.dom.tag,r=t=>ve(e.dom,\"attributes\").bind((e=>ve(e,t)));return{uid:e.uid,dom:e.dom,components:e.components,events:t,behaviours:jd(e.buttonBehaviours,[Ap.config({}),hp.config({mode:\"execution\",useSpace:!0,useEnter:!0})]),domModification:{attributes:(()=>{if(\"button\"===n){return{type:r(\"type\").getOr(\"button\"),...r(\"role\").map((e=>({role:e}))).getOr({})}}return{role:r(\"role\").getOr(\"button\")}})()},eventOrder:e.eventOrder}},configFields:[bo(\"uid\",void 0),to(\"dom\"),bo(\"components\",[]),Hd(\"buttonBehaviours\",[Ap,hp]),uo(\"action\"),uo(\"role\"),bo(\"eventOrder\",{})]}),vg=e=>{const t=(e=>void 0!==e.uid)(e)&&be(e,\"uid\")?e.uid:vs(\"memento\");return{get:e=>e.getSystem().getByUid(t).getOrDie(),getOpt:e=>e.getSystem().getByUid(t).toOptional(),asSpec:()=>({...e,uid:t})}};var yg=tinymce.util.Tools.resolve(\"tinymce.util.I18n\");const bg={indent:!0,outdent:!0,\"table-insert-column-after\":!0,\"table-insert-column-before\":!0,\"paste-column-after\":!0,\"paste-column-before\":!0,\"unordered-list\":!0,\"list-bull-circle\":!0,\"list-bull-default\":!0,\"list-bull-square\":!0},_g=\"temporary-placeholder\",wg=e=>()=>ve(e,_g).getOr(\"!not found!\"),xg=(e,t)=>{const n=e.toLowerCase();if(yg.isRtl()){const e=((e,t)=>Ae(e,t)?e:((e,t)=>e+t)(e,t))(n,\"-rtl\");return ye(t,e)?e:n}return n},Cg=(e,t)=>ve(t,xg(e,t)),kg=(e,t)=>{const n=t();return Cg(e,n).getOrThunk(wg(n))},Dg=()=>xp(\"add-focusable\",[Qi((e=>{xa(e.element,\"svg\").each((e=>yt(e,\"focusable\",\"false\")))}))]),Sg=(e,t,n,r)=>{var o,i;const s=(e=>!!yg.isRtl()&&ye(bg,e))(t)?[\"tox-icon--flip\"]:[],a=ve(n,xg(t,n)).or(r).getOrThunk(wg(n));return{dom:{tag:e.tag,attributes:null!==(o=e.attributes)&&void 0!==o?o:{},classes:e.classes.concat(s),innerHtml:a},behaviours:$l([...null!==(i=e.behaviours)&&void 0!==i?i:[],Dg()])}},Ag=(e,t,n,r=L.none())=>Sg(t,e,n(),r),Mg={success:\"checkmark\",error:\"warning\",err:\"error\",warning:\"warning\",warn:\"warning\",info:\"info\"},Lg=Hh({name:\"Notification\",factory:e=>{const t=vg({dom:{tag:\"p\",innerHtml:e.translationProvider(e.text)},behaviours:$l([wp.config({})])}),n=e=>({dom:{tag:\"div\",classes:[\"tox-bar\"],styles:{width:`${e}%`}}}),r=e=>({dom:{tag:\"div\",classes:[\"tox-text\"],innerHtml:`${e}%`}}),o=vg({dom:{tag:\"div\",classes:e.progress?[\"tox-progress-bar\",\"tox-progress-indicator\"]:[\"tox-progress-bar\"]},components:[{dom:{tag:\"div\",classes:[\"tox-bar-container\"]},components:[n(0)]},r(0)],behaviours:$l([wp.config({})])}),i={updateProgress:(e,t)=>{e.getSystem().isConnected()&&o.getOpt(e).each((e=>{wp.set(e,[{dom:{tag:\"div\",classes:[\"tox-bar-container\"]},components:[n(t)]},r(t)])}))},updateText:(e,n)=>{if(e.getSystem().isConnected()){const r=t.get(e);wp.set(r,[da(n)])}}},s=q([e.icon.toArray(),e.level.toArray(),e.level.bind((e=>L.from(Mg[e]))).toArray()]),a=vg(gg.sketch({dom:{tag:\"button\",classes:[\"tox-notification__dismiss\",\"tox-button\",\"tox-button--naked\",\"tox-button--icon\"]},components:[Ag(\"close\",{tag:\"div\",classes:[\"tox-icon\"],attributes:{\"aria-label\":e.translationProvider(\"Close\")}},e.iconProvider)],action:t=>{e.onAction(t)}})),l=((e,t,n)=>{const r=n(),o=U(e,(e=>ye(r,xg(e,r))));return Sg(t,o.getOr(_g),r,L.none())})(s,{tag:\"div\",classes:[\"tox-notification__icon\"]},e.iconProvider),c=[l,{dom:{tag:\"div\",classes:[\"tox-notification__body\"]},components:[t.asSpec()],behaviours:$l([wp.config({})])}];return{uid:e.uid,dom:{tag:\"div\",attributes:{role:\"alert\"},classes:e.level.map((e=>[\"tox-notification\",\"tox-notification--in\",`tox-notification--${e}`])).getOr([\"tox-notification\",\"tox-notification--in\"])},behaviours:$l([Ap.config({}),xp(\"notification-events\",[zi(Jo(),(e=>{a.getOpt(e).each(Ap.focus)}))])]),components:c.concat(e.progress?[o.asSpec()]:[]).concat(e.closeButton?[a.asSpec()]:[]),apis:i}},configFields:[uo(\"level\"),to(\"progress\"),uo(\"icon\"),to(\"onAction\"),to(\"text\"),to(\"iconProvider\"),to(\"translationProvider\"),ko(\"closeButton\",!0)],apis:{updateProgress:(e,t,n)=>{e.updateProgress(t,n)},updateText:(e,t,n)=>{e.updateText(t,n)}}});var Eg,Tg,Fg=tinymce.util.Tools.resolve(\"tinymce.dom.DOMUtils\"),Og=tinymce.util.Tools.resolve(\"tinymce.EditorManager\"),Bg=tinymce.util.Tools.resolve(\"tinymce.Env\");!function(e){e.default=\"wrap\",e.floating=\"floating\",e.sliding=\"sliding\",e.scrolling=\"scrolling\"}(Eg||(Eg={})),function(e){e.auto=\"auto\",e.top=\"top\",e.bottom=\"bottom\"}(Tg||(Tg={}));const Rg=e=>t=>t.options.get(e),$g=e=>t=>L.from(e(t)),Ng=e=>{const t=Bg.deviceType.isPhone(),n=Bg.deviceType.isTablet()||t,r=e.options.register,o=e=>i(e)||!1===e,s=e=>i(e)||p(e);r(\"skin\",{processor:e=>i(e)||!1===e,default:\"oxide\"}),r(\"skin_url\",{processor:\"string\"}),r(\"height\",{processor:s,default:Math.max(e.getElement().offsetHeight,400)}),r(\"width\",{processor:s,default:Fg.DOM.getStyle(e.getElement(),\"width\")}),r(\"min_height\",{processor:\"number\",default:100}),r(\"min_width\",{processor:\"number\"}),r(\"max_height\",{processor:\"number\"}),r(\"max_width\",{processor:\"number\"}),r(\"style_formats\",{processor:\"object[]\"}),r(\"style_formats_merge\",{processor:\"boolean\",default:!1}),r(\"style_formats_autohide\",{processor:\"boolean\",default:!1}),r(\"line_height_formats\",{processor:\"string\",default:\"1 1.1 1.2 1.3 1.4 1.5 2\"}),r(\"font_family_formats\",{processor:\"string\",default:\"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats\"}),r(\"font_size_formats\",{processor:\"string\",default:\"8pt 10pt 12pt 14pt 18pt 24pt 36pt\"}),r(\"block_formats\",{processor:\"string\",default:\"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre\"}),r(\"content_langs\",{processor:\"object[]\"}),r(\"removed_menuitems\",{processor:\"string\",default:\"\"}),r(\"menubar\",{processor:e=>i(e)||u(e),default:!t}),r(\"menu\",{processor:\"object\",default:{}}),r(\"toolbar\",{processor:e=>u(e)||i(e)||l(e)?{value:e,valid:!0}:{valid:!1,message:\"Must be a boolean, string or array.\"},default:!0}),N(9,(e=>{r(\"toolbar\"+(e+1),{processor:\"string\"})})),r(\"toolbar_mode\",{processor:\"string\",default:n?\"scrolling\":\"floating\"}),r(\"toolbar_groups\",{processor:\"object\",default:{}}),r(\"toolbar_location\",{processor:\"string\",default:Tg.auto}),r(\"toolbar_persist\",{processor:\"boolean\",default:!1}),r(\"toolbar_sticky\",{processor:\"boolean\",default:e.inline}),r(\"toolbar_sticky_offset\",{processor:\"number\",default:0}),r(\"fixed_toolbar_container\",{processor:\"string\",default:\"\"}),r(\"fixed_toolbar_container_target\",{processor:\"object\"}),r(\"file_picker_callback\",{processor:\"function\"}),r(\"file_picker_validator_handler\",{processor:\"function\"}),r(\"file_picker_types\",{processor:\"string\"}),r(\"typeahead_urls\",{processor:\"boolean\",default:!0}),r(\"anchor_top\",{processor:o,default:\"#top\"}),r(\"anchor_bottom\",{processor:o,default:\"#bottom\"}),r(\"draggable_modal\",{processor:\"boolean\",default:!1}),r(\"statusbar\",{processor:\"boolean\",default:!0}),r(\"elementpath\",{processor:\"boolean\",default:!0}),r(\"branding\",{processor:\"boolean\",default:!0}),r(\"promotion\",{processor:\"boolean\",default:!0}),r(\"resize\",{processor:e=>\"both\"===e||u(e),default:!Bg.deviceType.isTouch()}),r(\"sidebar_show\",{processor:\"string\"})},Yg=Rg(\"readonly\"),Pg=Rg(\"height\"),Ig=Rg(\"width\"),Hg=$g(Rg(\"min_width\")),jg=$g(Rg(\"min_height\")),Wg=$g(Rg(\"max_width\")),zg=$g(Rg(\"max_height\")),Ug=$g(Rg(\"style_formats\")),Vg=Rg(\"style_formats_merge\"),qg=Rg(\"style_formats_autohide\"),Gg=Rg(\"content_langs\"),Kg=Rg(\"removed_menuitems\"),Xg=Rg(\"toolbar_mode\"),Jg=Rg(\"toolbar_groups\"),Qg=Rg(\"toolbar_location\"),Zg=Rg(\"fixed_toolbar_container\"),ev=Rg(\"fixed_toolbar_container_target\"),tv=Rg(\"toolbar_persist\"),nv=Rg(\"toolbar_sticky_offset\"),rv=Rg(\"menubar\"),ov=Rg(\"toolbar\"),iv=Rg(\"file_picker_callback\"),sv=Rg(\"file_picker_validator_handler\"),av=Rg(\"file_picker_types\"),lv=Rg(\"typeahead_urls\"),cv=Rg(\"anchor_top\"),uv=Rg(\"anchor_bottom\"),dv=Rg(\"draggable_modal\"),hv=Rg(\"statusbar\"),mv=Rg(\"elementpath\"),fv=Rg(\"branding\"),pv=Rg(\"resize\"),gv=Rg(\"paste_as_text\"),vv=Rg(\"sidebar_show\"),yv=Rg(\"promotion\"),bv=e=>!1===e.options.get(\"skin\"),_v=e=>!1!==e.options.get(\"menubar\"),wv=e=>{const t=e.options.get(\"skin_url\");if(bv(e))return t;if(t)return e.documentBaseURI.toAbsolute(t);{const t=e.options.get(\"skin\");return Og.baseURL+\"/skins/ui/\"+t}},xv=e=>e.options.get(\"line_height_formats\").split(\" \"),Cv=e=>{const t=ov(e),n=i(t),r=l(t)&&t.length>0;return!Dv(e)&&(r||n||!0===t)},kv=e=>{const t=N(9,(t=>e.options.get(\"toolbar\"+(t+1)))),n=j(t,i);return Ce(n.length>0,n)},Dv=e=>kv(e).fold((()=>{const t=ov(e);return g(t,i)&&t.length>0}),A),Sv=e=>Qg(e)===Tg.bottom,Av=e=>{var t;if(!e.inline)return L.none();const n=null!==(t=Zg(e))&&void 0!==t?t:\"\";if(n.length>0)return Ca(pt(),n);const r=ev(e);return m(r)?L.some(Fe.fromDom(r)):L.none()},Mv=e=>e.inline&&Av(e).isSome(),Lv=e=>Av(e).getOrThunk((()=>ut(ct(Fe.fromDom(e.getElement()))))),Ev=e=>e.inline&&!_v(e)&&!Cv(e)&&!Dv(e),Tv=e=>(e.options.get(\"toolbar_sticky\")||e.inline)&&!Mv(e)&&!Ev(e),Fv=e=>{const t=e.options.get(\"menu\");return ce(t,(e=>({...e,items:e.items})))};var Ov=Object.freeze({__proto__:null,get ToolbarMode(){return Eg},get ToolbarLocation(){return Tg},register:Ng,getSkinUrl:wv,isReadOnly:Yg,isSkinDisabled:bv,getHeightOption:Pg,getWidthOption:Ig,getMinWidthOption:Hg,getMinHeightOption:jg,getMaxWidthOption:Wg,getMaxHeightOption:zg,getUserStyleFormats:Ug,shouldMergeStyleFormats:Vg,shouldAutoHideStyleFormats:qg,getLineHeightFormats:xv,getContentLanguages:Gg,getRemovedMenuItems:Kg,isMenubarEnabled:_v,isMultipleToolbars:Dv,isToolbarEnabled:Cv,isToolbarPersist:tv,getMultipleToolbarsOption:kv,getUiContainer:Lv,useFixedContainer:Mv,getToolbarMode:Xg,isDraggableModal:dv,isDistractionFree:Ev,isStickyToolbar:Tv,getStickyToolbarOffset:nv,getToolbarLocation:Qg,isToolbarLocationBottom:Sv,getToolbarGroups:Jg,getMenus:Fv,getMenubar:rv,getToolbar:ov,getFilePickerCallback:iv,getFilePickerTypes:av,useTypeaheadUrls:lv,getAnchorTop:cv,getAnchorBottom:uv,getFilePickerValidatorHandler:sv,useStatusBar:hv,useElementPath:mv,promotionEnabled:yv,useBranding:fv,getResize:pv,getPasteAsText:gv,getSidebarShow:vv});const Bv=\"[data-mce-autocompleter]\",Rv=e=>ka(e,Bv),$v=(e,t)=>{const n=(e,t)=>{$i(e,Zo(),{raw:t})},r=()=>e.getMenu().bind(vm.getHighlighted);t.on(\"keydown\",(t=>{const o=t.which;e.isActive()&&(e.isMenuOpen()?13===o?(r().each(Ni),t.preventDefault()):40===o?(r().fold((()=>{e.getMenu().each(vm.highlightFirst)}),(e=>{n(e,t)})),t.preventDefault(),t.stopImmediatePropagation()):37!==o&&38!==o&&39!==o||r().each((e=>{n(e,t),t.preventDefault(),t.stopImmediatePropagation()})):13!==o&&38!==o&&40!==o||e.cancelIfNecessary())})),t.on(\"NodeChange\",(t=>{e.isActive()&&!e.isProcessingAction()&&Rv(Fe.fromDom(t.element)).isNone()&&e.cancelIfNecessary()}))};var Nv;!function(e){e[e.CLOSE_ON_EXECUTE=0]=\"CLOSE_ON_EXECUTE\",e[e.BUBBLE_TO_SANDBOX=1]=\"BUBBLE_TO_SANDBOX\"}(Nv||(Nv={}));var Yv=Nv;const Pv=\"tox-menu-nav__js\",Iv=\"tox-collection__item\",Hv=\"tox-swatch\",jv={normal:Pv,color:Hv},Wv=\"tox-collection__item--enabled\",zv=\"tox-collection__item-icon\",Uv=\"tox-collection__item-label\",Vv=\"tox-collection__item-caret\",qv=\"tox-collection__item--active\",Gv=\"tox-collection__item-container\",Kv=\"tox-collection__item-container--row\",Xv=e=>ve(jv,e).getOr(Pv),Jv=e=>\"color\"===e?\"tox-swatches\":\"tox-menu\",Qv=e=>({backgroundMenu:\"tox-background-menu\",selectedMenu:\"tox-selected-menu\",selectedItem:\"tox-collection__item--active\",hasIcons:\"tox-menu--has-icons\",menu:Jv(e),tieredMenu:\"tox-tiered-menu\"}),Zv=e=>{const t=Qv(e);return{backgroundMenu:t.backgroundMenu,selectedMenu:t.selectedMenu,menu:t.menu,selectedItem:t.selectedItem,item:Xv(e)}},ey=(e,t,n)=>{const r=Qv(n);return{tag:\"div\",classes:q([[r.menu,`tox-menu-${t}-column`],e?[r.hasIcons]:[]])}},ty=[og.parts.items({})],ny=(e,t,n)=>{const r=Qv(n);return{dom:{tag:\"div\",classes:q([[r.tieredMenu]])},markers:Zv(n)}},ry=b([uo(\"data\"),bo(\"inputAttributes\",{}),bo(\"inputStyles\",{}),bo(\"tag\",\"input\"),bo(\"inputClasses\",[]),Wa(\"onSetValue\"),bo(\"styles\",{}),bo(\"eventOrder\",{}),Yd(\"inputBehaviours\",[Nd,Ap]),bo(\"selectOnFocus\",!0)]),oy=e=>$l([Ap.config({onFocus:e.selectOnFocus?e=>{const t=e.element,n=Qs(t);t.dom.setSelectionRange(0,n.length)}:v})]),iy=e=>({...oy(e),...Id(e.inputBehaviours,[Nd.config({store:{mode:\"manual\",...e.data.map((e=>({initialValue:e}))).getOr({}),getValue:e=>Qs(e.element),setValue:(e,t)=>{Qs(e.element)!==t&&Zs(e.element,t)}},onSetValue:e.onSetValue})])}),sy=e=>({tag:e.tag,attributes:{type:\"text\",...e.inputAttributes},styles:e.inputStyles,classes:e.inputClasses}),ay=Hh({name:\"Input\",configFields:ry(),factory:(e,t)=>({uid:e.uid,dom:sy(e),components:[],behaviours:iy(e),eventOrder:e.eventOrder})}),ly=us(\"refetch-trigger-event\"),cy=us(\"redirect-menu-item-interaction\"),uy=\"tox-menu__searcher\",dy=e=>Ca(e.element,\".tox-menu__searcher\").bind((t=>e.getSystem().getByDom(t).toOptional())),hy=dy,my=e=>({fetchPattern:Nd.getValue(e),selectionStart:e.element.dom.selectionStart,selectionEnd:e.element.dom.selectionEnd}),fy=e=>{const t=(e,t)=>(t.cut(),L.none()),n=(e,t)=>{const n={interactionEvent:t.event,eventType:t.event.raw.type};return $i(e,cy,n),L.some(!0)},r=\"searcher-events\";return{dom:{tag:\"div\",classes:[Iv]},components:[ay.sketch({inputClasses:[uy,\"tox-textfield\"],inputAttributes:{...e.placeholder.map((t=>({placeholder:e.i18n(t)}))).getOr({}),type:\"search\",\"aria-autocomplete\":\"list\"},inputBehaviours:$l([xp(r,[zi(ti(),(e=>{Ri(e,ly)})),zi(Zo(),((e,t)=>{\"Escape\"===t.event.raw.key&&t.stop()}))]),hp.config({mode:\"special\",onLeft:t,onRight:t,onSpace:t,onEnter:n,onEscape:n,onUp:n,onDown:n})]),eventOrder:{keydown:[r,hp.name()]}})]}},py=\"tox-collection--results__js\",gy=e=>{var t;return e.dom?{...e,dom:{...e.dom,attributes:{...null!==(t=e.dom.attributes)&&void 0!==t?t:{},id:us(\"aria-item-search-result-id\"),\"aria-selected\":\"false\"}}}:e},vy=(e,t)=>n=>{const r=Y(n,t);return P(r,(t=>({dom:e,components:t})))},yy=(e,t)=>{const n=[];let r=[];return I(e,((e,o)=>{t(e,o)?(r.length>0&&n.push(r),r=[],(ye(e.dom,\"innerHtml\")||e.components&&e.components.length>0)&&r.push(e)):r.push(e)})),r.length>0&&n.push(r),P(n,(e=>({dom:{tag:\"div\",classes:[\"tox-collection__group\"]},components:e})))},by=(e,t,n)=>og.parts.items({preprocess:r=>{const o=P(r,n);return\"auto\"!==e&&e>1?vy({tag:\"div\",classes:[\"tox-collection__group\"]},e)(o):yy(o,((e,n)=>\"separator\"===t[n].type))}}),_y=(e,t,n=!0)=>({dom:{tag:\"div\",classes:[\"tox-menu\",\"tox-collection\"].concat(1===e?[\"tox-collection--list\"]:[\"tox-collection--grid\"])},components:[by(e,t,_)]}),wy=e=>$(e,(e=>\"icon\"in e&&void 0!==e.icon)),xy=e=>(console.error(Xr(e)),console.log(e),L.none()),Cy=(e,t,n,r,o)=>{const i=(s=n,{dom:{tag:\"div\",classes:[\"tox-collection\",\"tox-collection--horizontal\"]},components:[og.parts.items({preprocess:e=>yy(e,((e,t)=>\"separator\"===s[t].type))})]});var s;return{value:e,dom:i.dom,components:i.components,items:n}},ky=(e,t,n,r,o)=>{const i=()=>\"searchable\"!==o.menuType?_y(r,n):\"search-with-field\"===o.searchMode.searchMode?((e,t,n)=>{const r=us(\"aria-controls-search-results\");return{dom:{tag:\"div\",classes:[\"tox-menu\",\"tox-collection\"].concat(1===e?[\"tox-collection--list\"]:[\"tox-collection--grid\"])},components:[fy({i18n:yg.translate,placeholder:n.placeholder}),{dom:{tag:\"div\",classes:[...1===e?[\"tox-collection--list\"]:[\"tox-collection--grid\"],py],attributes:{id:r}},components:[by(e,t,gy)]}]}})(r,n,o.searchMode):((e,t,n=!0)=>{const r=us(\"aria-controls-search-results\");return{dom:{tag:\"div\",classes:[\"tox-menu\",\"tox-collection\",py].concat(1===e?[\"tox-collection--list\"]:[\"tox-collection--grid\"]),attributes:{id:r}},components:[by(e,t,gy)]}})(r,n);if(\"color\"===o.menuType){const t=(e=>({dom:{tag:\"div\",classes:[\"tox-menu\",\"tox-swatches-menu\"]},components:[{dom:{tag:\"div\",classes:[\"tox-swatches\"]},components:[og.parts.items({preprocess:\"auto\"!==e?vy({tag:\"div\",classes:[\"tox-swatches__row\"]},e):_})]}]}))(r);return{value:e,dom:t.dom,components:t.components,items:n}}if(\"normal\"===o.menuType&&\"auto\"===r){const t=_y(r,n);return{value:e,dom:t.dom,components:t.components,items:n}}if(\"normal\"===o.menuType||\"searchable\"===o.menuType){const t=i();return{value:e,dom:t.dom,components:t.components,items:n}}if(\"listpreview\"===o.menuType&&\"auto\"!==r){const t=(e=>({dom:{tag:\"div\",classes:[\"tox-menu\",\"tox-collection\",\"tox-collection--toolbar\",\"tox-collection--toolbar-lg\"]},components:[og.parts.items({preprocess:vy({tag:\"div\",classes:[\"tox-collection__group\"]},e)})]}))(r);return{value:e,dom:t.dom,components:t.components,items:n}}return{value:e,dom:ey(t,r,o.menuType),components:ty,items:n}},Dy=oo(\"type\"),Sy=oo(\"name\"),Ay=oo(\"label\"),My=oo(\"text\"),Ly=oo(\"title\"),Ey=oo(\"icon\"),Ty=oo(\"value\"),Fy=so(\"fetch\"),Oy=so(\"getSubmenuItems\"),By=so(\"onAction\"),Ry=so(\"onItemAction\"),$y=Do(\"onSetup\",(()=>v)),Ny=fo(\"name\"),Yy=fo(\"text\"),Py=fo(\"icon\"),Iy=fo(\"tooltip\"),Hy=fo(\"label\"),jy=fo(\"shortcut\"),Wy=go(\"select\"),zy=ko(\"active\",!1),Uy=ko(\"borderless\",!1),Vy=ko(\"enabled\",!0),qy=ko(\"primary\",!1),Gy=e=>bo(\"columns\",e),Ky=bo(\"meta\",{}),Xy=Do(\"onAction\",v),Jy=e=>xo(\"type\",e),Qy=e=>Qr(\"name\",\"name\",pr((()=>us(`${e}-name`))),Yr),Zy=Er([Dy,Yy]),eb=Er([Jy(\"autocompleteitem\"),zy,Vy,Ky,Ty,Yy,Py]),tb=[Vy,Iy,Py,Yy,$y],nb=Er([Dy,By].concat(tb)),rb=e=>qr(\"toolbarbutton\",nb,e),ob=[zy].concat(tb),ib=Er(ob.concat([Dy,By])),sb=e=>qr(\"ToggleButton\",ib,e),ab=[Do(\"predicate\",S),Co(\"scope\",\"node\",[\"node\",\"editor\"]),Co(\"position\",\"selection\",[\"node\",\"selection\",\"line\"])],lb=tb.concat([Jy(\"contextformbutton\"),qy,By,Zr(\"original\",_)]),cb=ob.concat([Jy(\"contextformbutton\"),qy,By,Zr(\"original\",_)]),ub=tb.concat([Jy(\"contextformbutton\")]),db=ob.concat([Jy(\"contextformtogglebutton\")]),hb=Jr(\"type\",{contextformbutton:lb,contextformtogglebutton:cb}),mb=Er([Jy(\"contextform\"),Do(\"initValue\",b(\"\")),Hy,co(\"commands\",hb),ho(\"launch\",Jr(\"type\",{contextformbutton:ub,contextformtogglebutton:db}))].concat(ab)),fb=Er([Jy(\"contexttoolbar\"),oo(\"items\")].concat(ab)),pb=[Dy,oo(\"src\"),fo(\"alt\"),So(\"classes\",[],Yr)],gb=Er(pb),vb=[Dy,My,Ny,So(\"classes\",[\"tox-collection__item-label\"],Yr)],yb=Er(vb),bb=Ar((()=>zr(\"type\",{cardimage:gb,cardtext:yb,cardcontainer:_b}))),_b=Er([Dy,xo(\"direction\",\"horizontal\"),xo(\"align\",\"left\"),xo(\"valign\",\"middle\"),co(\"items\",bb)]),wb=[Vy,Yy,jy,(xb=\"menuitem\",Qr(\"value\",\"value\",pr((()=>us(`${xb}-value`))),Rr())),Ky];var xb;const Cb=Er([Dy,Hy,co(\"items\",bb),$y,Xy].concat(wb)),kb=Er([Dy,zy,Py].concat(wb)),Db=[Dy,oo(\"fancytype\"),Xy],Sb=[bo(\"initData\",{})].concat(Db),Ab=[Ao(\"initData\",{},[ko(\"allowCustomColors\",!0),vo(\"colors\",Rr())])].concat(Db),Mb=Jr(\"fancytype\",{inserttable:Sb,colorswatch:Ab}),Lb=Er([Dy,$y,Xy,Py].concat(wb)),Eb=Er([Dy,Oy,$y,Py].concat(wb)),Tb=Er([Dy,Py,zy,$y,By].concat(wb)),Fb=(e,t,n)=>{const r=hu(e.element,\".\"+n);if(r.length>0){const e=V(r,(e=>{const n=e.dom.getBoundingClientRect().top,o=r[0].dom.getBoundingClientRect().top;return Math.abs(n-o)>t})).getOr(r.length);return L.some({numColumns:e,numRows:Math.ceil(r.length/e)})}return L.none()},Ob=(e,t)=>$l([xp(e,t)]),Bb=e=>Ob(us(\"unnamed-events\"),e),Rb=us(\"tooltip.exclusive\"),$b=us(\"tooltip.show\"),Nb=us(\"tooltip.hide\"),Yb=(e,t,n)=>{e.getSystem().broadcastOn([Rb],{})};var Pb=Object.freeze({__proto__:null,hideAllExclusive:Yb,setComponents:(e,t,n,r)=>{n.getTooltip().each((e=>{e.getSystem().isConnected()&&wp.set(e,r)}))}});var Ib=Object.freeze({__proto__:null,events:(e,t)=>{const n=n=>{t.getTooltip().each((r=>{nd(r),e.onHide(n,r),t.clearTooltip()})),t.clearTimer()};return Hi(q([[zi($b,(n=>{t.resetTimer((()=>{(n=>{if(!t.isShowing()){Yb(n);const r=e.lazySink(n).getOrDie(),o=n.getSystem().build({dom:e.tooltipDom,components:e.tooltipComponents,events:Hi(\"normal\"===e.mode?[zi(Xo(),(e=>{Ri(n,$b)})),zi(Go(),(e=>{Ri(n,Nb)}))]:[]),behaviours:$l([wp.config({})])});t.setTooltip(o),Zu(r,o),e.onShow(n,o),Uu.position(r,o,{anchor:e.anchor(n)})}})(n)}),e.delay)})),zi(Nb,(r=>{t.resetTimer((()=>{n(r)}),e.delay)})),zi(mi(),((e,t)=>{const r=t;r.universal||R(r.channels,Rb)&&n(e)})),Zi((e=>{n(e)}))],\"normal\"===e.mode?[zi(Jo(),(e=>{Ri(e,$b)})),zi(di(),(e=>{Ri(e,Nb)})),zi(Xo(),(e=>{Ri(e,$b)})),zi(Go(),(e=>{Ri(e,Nb)}))]:[zi(Oi(),((e,t)=>{Ri(e,$b)})),zi(Bi(),(e=>{Ri(e,Nb)}))]]))}}),Hb=[to(\"lazySink\"),to(\"tooltipDom\"),bo(\"exclusive\",!0),bo(\"tooltipComponents\",[]),bo(\"delay\",300),Co(\"mode\",\"normal\",[\"normal\",\"follow-highlight\"]),bo(\"anchor\",(e=>({type:\"hotspot\",hotspot:e,layouts:{onLtr:b([wl,_l,gl,yl,vl,bl]),onRtl:b([wl,_l,gl,yl,vl,bl])}}))),Wa(\"onHide\"),Wa(\"onShow\")];const jb=Yl({fields:Hb,name:\"tooltipping\",active:Ib,state:Object.freeze({__proto__:null,init:()=>{const e=hc(),t=hc(),n=()=>{e.on(clearTimeout)},r=b(\"not-implemented\");return Ms({getTooltip:t.get,isShowing:t.isSet,setTooltip:t.set,clearTooltip:t.clear,clearTimer:n,resetTimer:(t,r)=>{n(),e.set(setTimeout(t,r))},readState:r})}}),apis:Pb}),Wb=\"silver.readonly\",zb=Er([(Ub=\"readonly\",no(Ub,Pr))]);var Ub;const Vb=(e,t)=>{const n=e.outerContainer.element;t&&(e.mothership.broadcastOn([yd()],{target:n}),e.uiMothership.broadcastOn([yd()],{target:n})),e.mothership.broadcastOn([Wb],{readonly:t}),e.uiMothership.broadcastOn([Wb],{readonly:t})},qb=(e,t)=>{e.on(\"init\",(()=>{e.mode.isReadOnly()&&Vb(t,!0)})),e.on(\"SwitchMode\",(()=>Vb(t,e.mode.isReadOnly()))),Yg(e)&&e.mode.set(\"readonly\")},Gb=()=>jl.config({channels:{[Wb]:{schema:zb,onReceive:(e,t)=>{sm.set(e,t.readonly)}}}}),Kb=e=>sm.config({disabled:e,disableClass:\"tox-collection__item--state-disabled\"}),Xb=e=>sm.config({disabled:e}),Jb=e=>sm.config({disabled:e,disableClass:\"tox-tbtn--disabled\"}),Qb=e=>sm.config({disabled:e,disableClass:\"tox-tbtn--disabled\",useNative:!1}),Zb=(e,t)=>{const n=e.getApi(t);return e=>{e(n)}},e_=(e,t)=>Qi((n=>{Zb(e,n)((n=>{const r=e.onSetup(n);f(r)&&t.set(r)}))})),t_=(e,t)=>Zi((n=>Zb(e,n)(t.get()))),n_=(e,t)=>ts(((n,r)=>{Zb(e,n)(e.onAction),e.triggersSubmenu||t!==Yv.CLOSE_ON_EXECUTE||(n.getSystem().isConnected()&&Ri(n,yi()),r.stop())})),r_={[fi()]:[\"disabling\",\"alloy.base.behaviour\",\"toggling\",\"item-events\"]},o_=we,i_=(e,t,n,r)=>{const o=Mo(v);return{type:\"item\",dom:t.dom,components:o_(t.optComponents),data:e.data,eventOrder:r_,hasSubmenu:e.triggersSubmenu,itemBehaviours:$l([xp(\"item-events\",[n_(e,n),e_(e,o),t_(e,o)]),Kb((()=>!e.enabled||r.isDisabled())),Gb(),wp.config({})].concat(e.itemBehaviours))}},s_=e=>({value:e.value,meta:{text:e.text.getOr(\"\"),...e.meta}}),a_=e=>{const t=Bg.os.isMacOS()||Bg.os.isiOS(),n=t?{alt:\"⌥\",ctrl:\"⌃\",shift:\"⇧\",meta:\"⌘\",access:\"⌃⌥\"}:{meta:\"Ctrl\",access:\"Shift+Alt\"},r=e.split(\"+\"),o=P(r,(e=>{const t=e.toLowerCase().trim();return ye(n,t)?n[t]:e}));return t?o.join(\"\"):o.join(\"+\")},l_=(e,t,n=[zv])=>Ag(e,{tag:\"div\",classes:n},t),c_=e=>({dom:{tag:\"div\",classes:[Uv]},components:[da(yg.translate(e))]}),u_=(e,t)=>({dom:{tag:\"div\",classes:t,innerHtml:e}}),d_=(e,t)=>({dom:{tag:\"div\",classes:[Uv]},components:[{dom:{tag:e.tag,styles:e.styles},components:[da(yg.translate(t))]}]}),h_=e=>({dom:{tag:\"div\",classes:[\"tox-collection__item-accessory\"]},components:[da(a_(e))]}),m_=e=>l_(\"checkmark\",e,[\"tox-collection__item-checkmark\"]),f_=(e,t,n)=>{const r=e.ariaLabel,o=e.value,i=e.iconContent.map((e=>((e,t,n)=>{const r=t();return Cg(e,r).or(n).getOrThunk(wg(r))})(e,t.icons,n)));return{dom:(()=>{const e=i.getOr(\"\"),n=r.map((e=>({title:t.translate(e)}))).getOr({}),s={tag:\"div\",attributes:n,classes:[\"tox-swatch\"]};return\"custom\"===o?{...s,tag:\"button\",classes:[...s.classes,\"tox-swatches__picker-btn\"],innerHtml:e}:\"remove\"===o?{...s,classes:[...s.classes,\"tox-swatch--remove\"],innerHtml:e}:m(o)?{...s,attributes:{...s.attributes,\"data-mce-color\":o},styles:{\"background-color\":o}}:s})(),optComponents:[]}},p_=e=>{const t=e.map((e=>({attributes:{title:yg.translate(e)}}))).getOr({});return{tag:\"div\",classes:[Pv,Iv],...t}},g_=(e,t,n,r=L.none())=>\"color\"===e.presets?f_(e,t,r):((e,t,n,r)=>{const o={tag:\"div\",classes:[zv]},i=n?e.iconContent.map((e=>Ag(e,o,t.icons,r))).orThunk((()=>L.some({dom:o}))):L.none(),s=e.checkMark,a=L.from(e.meta).fold((()=>c_),(e=>ye(e,\"style\")?x(d_,e.style):c_)),l=e.htmlContent.fold((()=>e.textContent.map(a)),(e=>L.some(u_(e,[Uv]))));return{dom:p_(e.ariaLabel),optComponents:[i,l,e.shortcutContent.map(h_),s,e.caret]}})(e,t,n,r),v_=(e,t)=>ve(e,\"tooltipWorker\").map((e=>[jb.config({lazySink:t.getSink,tooltipDom:{tag:\"div\",classes:[\"tox-tooltip-worker-container\"]},tooltipComponents:[],anchor:e=>({type:\"submenu\",item:e,overrides:{maxHeightFunction:Ac}}),mode:\"follow-highlight\",onShow:(t,n)=>{e((e=>{jb.setComponents(t,[ha({element:Fe.fromDom(e)})])}))}})])).getOr([]),y_=(e,t)=>{const n=(e=>Fg.DOM.encode(e))(yg.translate(e));if(t.length>0){const e=new RegExp((e=>e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\"))(t),\"gi\");return n.replace(e,(e=>`<span class=\"tox-autocompleter-highlight\">${e}</span>`))}return n},b_=(e,t)=>P(e,(e=>{switch(e.type){case\"cardcontainer\":return((e,t)=>{const n=\"vertical\"===e.direction?\"tox-collection__item-container--column\":Kv,r=\"left\"===e.align?\"tox-collection__item-container--align-left\":\"tox-collection__item-container--align-right\";return{dom:{tag:\"div\",classes:[Gv,n,r,(()=>{switch(e.valign){case\"top\":return\"tox-collection__item-container--valign-top\";case\"middle\":return\"tox-collection__item-container--valign-middle\";case\"bottom\":return\"tox-collection__item-container--valign-bottom\"}})()]},components:t}})(e,b_(e.items,t));case\"cardimage\":return((e,t,n)=>({dom:{tag:\"img\",classes:t,attributes:{src:e,alt:n.getOr(\"\")}}}))(e.src,e.classes,e.alt);case\"cardtext\":const n=e.name.exists((e=>R(t.cardText.highlightOn,e))),r=n?L.from(t.cardText.matchText).getOr(\"\"):\"\";return u_(y_(e.text,r),e.classes)}})),__=_h(Jp(),Qp()),w_=e=>({value:e}),x_=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,C_=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,k_=e=>x_.test(e)||C_.test(e),D_=e=>((e,t)=>Se(e,t)?((e,t)=>e.substring(t))(e,t.length):e)(e,\"#\").toUpperCase(),S_=e=>{const t=(e=>{const t=e.value.replace(x_,((e,t,n,r)=>t+t+n+n+r+r));return{value:t}})(e),n=C_.exec(t.value);return null===n?[\"FFFFFF\",\"FF\",\"FF\",\"FF\"]:n},A_=e=>{const t=e.toString(16);return(1===t.length?\"0\"+t:t).toUpperCase()},M_=e=>{const t=A_(e.red)+A_(e.green)+A_(e.blue);return w_(t)},L_=Math.min,E_=Math.max,T_=Math.round,F_=/^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i,O_=/^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i,B_=(e,t,n,r)=>({red:e,green:t,blue:n,alpha:r}),R_=e=>{const t=parseInt(e,10);return t.toString()===e&&t>=0&&t<=255},$_=e=>{let t,n,r;const o=(e.hue||0)%360;let i=e.saturation/100,s=e.value/100;if(i=E_(0,L_(i,1)),s=E_(0,L_(s,1)),0===i)return t=n=r=T_(255*s),B_(t,n,r,1);const a=o/60,l=s*i,c=l*(1-Math.abs(a%2-1)),u=s-l;switch(Math.floor(a)){case 0:t=l,n=c,r=0;break;case 1:t=c,n=l,r=0;break;case 2:t=0,n=l,r=c;break;case 3:t=0,n=c,r=l;break;case 4:t=c,n=0,r=l;break;case 5:t=l,n=0,r=c;break;default:t=n=r=0}return t=T_(255*(t+u)),n=T_(255*(n+u)),r=T_(255*(r+u)),B_(t,n,r,1)},N_=e=>{const t=S_(e),n=parseInt(t[1],16),r=parseInt(t[2],16),o=parseInt(t[3],16);return B_(n,r,o,1)},Y_=(e,t,n,r)=>{const o=parseInt(e,10),i=parseInt(t,10),s=parseInt(n,10),a=parseFloat(r);return B_(o,i,s,a)},P_=e=>{if(\"transparent\"===e)return L.some(B_(0,0,0,0));const t=F_.exec(e);if(null!==t)return L.some(Y_(t[1],t[2],t[3],\"1\"));const n=O_.exec(e);return null!==n?L.some(Y_(n[1],n[2],n[3],n[4])):L.none()},I_=e=>`rgba(${e.red},${e.green},${e.blue},${e.alpha})`,H_=B_(255,0,0,1),j_=(e,t)=>{e.dispatch(\"ResizeContent\",t)},W_=(e,t)=>e.dispatch(\"ResolveName\",{name:t.nodeName.toLowerCase(),target:t}),z_=(e,t,n)=>({hue:e,saturation:t,value:n}),U_=e=>{let t=0,n=0,r=0;const o=e.red/255,i=e.green/255,s=e.blue/255,a=Math.min(o,Math.min(i,s)),l=Math.max(o,Math.max(i,s));if(a===l)return r=a,z_(0,0,100*r);return t=o===a?3:s===a?1:5,t=60*(t-(o===a?i-s:s===a?o-i:s-o)/(l-a)),n=(l-a)/l,r=l,z_(Math.round(t),Math.round(100*n),Math.round(100*r))},V_=e=>M_($_(e)),q_=e=>{return(t=e,k_(t)?L.some({value:D_(t)}):L.none()).orThunk((()=>P_(e).map(M_))).getOrThunk((()=>{const t=document.createElement(\"canvas\");t.height=1,t.width=1;const n=t.getContext(\"2d\");n.clearRect(0,0,t.width,t.height),n.fillStyle=\"#FFFFFF\",n.fillStyle=e,n.fillRect(0,0,1,1);const r=n.getImageData(0,0,1,1).data,o=r[0],i=r[1],s=r[2],a=r[3];return M_(B_(o,i,s,a))}));var t};var G_=tinymce.util.Tools.resolve(\"tinymce.util.LocalStorage\");const K_=\"tinymce-custom-colors\",X_=((e=10)=>{const t=G_.getItem(K_),n=i(t)?JSON.parse(t):[],r=e-(o=n).length<0?o.slice(0,e):o;var o;const s=e=>{r.splice(e,1)};return{add:t=>{B(r,t).each(s),r.unshift(t),r.length>e&&r.pop(),G_.setItem(K_,JSON.stringify(r))},state:()=>r.slice(0)}})(10),J_=e=>{const t=[];for(let n=0;n<e.length;n+=2)t.push({text:e[n+1],value:\"#\"+q_(e[n]).value,type:\"choiceitem\"});return t},Q_=e=>t=>t.options.get(e),Z_=Q_(\"color_cols\"),ew=Q_(\"custom_colors\"),tw=Q_(\"color_map\"),nw=e=>{X_.add(e)},rw=\"#000000\",ow=(e,t)=>{let n;return e.dom.getParents(e.selection.getStart(),(e=>{const r=m(e.style)?e.style[\"forecolor\"===t?\"color\":\"backgroundColor\"]:null;r&&(n=n||r)})),L.from(n)},iw=e=>{const t=\"choiceitem\",n={type:t,text:\"Remove color\",icon:\"color-swatch-remove-color\",value:\"remove\"};return e?[n,{type:t,text:\"Custom color\",icon:\"color-picker\",value:\"custom\"}]:[n]},sw=(e,t,n,r)=>{if(\"custom\"===n){hw(e)((n=>{n.each((n=>{nw(n),e.execCommand(\"mceApplyTextcolor\",t,n),r(n)}))}),rw)}else\"remove\"===n?(r(\"\"),e.execCommand(\"mceRemoveTextcolor\",t)):(r(n),e.execCommand(\"mceApplyTextcolor\",t,n))},aw=(e,t)=>e.concat(P(X_.state(),(e=>({type:\"choiceitem\",text:e,value:e}))).concat(iw(t))),lw=(e,t)=>n=>{n(aw(e,t))},cw=(e,t,n)=>{const r=\"forecolor\"===t?\"tox-icon-text-color__color\":\"tox-icon-highlight-bg-color__color\";e.setIconFill(r,n)},uw=(e,t,n,r,o)=>{e.ui.registry.addSplitButton(t,{tooltip:r,presets:\"color\",icon:\"forecolor\"===t?\"text-color\":\"highlight-bg-color\",select:t=>ow(e,n).bind((e=>P_(e).map((e=>{const n=M_(e).value;return De(t.toLowerCase(),n)})))).getOr(!1),columns:Z_(e),fetch:lw(tw(e),ew(e)),onAction:t=>{sw(e,n,o.get(),v)},onItemAction:(r,i)=>{sw(e,n,i,(n=>{o.set(n),((e,t)=>{e.dispatch(\"TextColorChange\",t)})(e,{name:t,color:n})}))},onSetup:n=>{cw(n,t,o.get());const r=e=>{e.name===t&&cw(n,e.name,e.color)};return e.on(\"TextColorChange\",r),()=>{e.off(\"TextColorChange\",r)}}})},dw=(e,t,n,r)=>{e.ui.registry.addNestedMenuItem(t,{text:r,icon:\"forecolor\"===t?\"text-color\":\"highlight-bg-color\",getSubmenuItems:()=>[{type:\"fancymenuitem\",fancytype:\"colorswatch\",onAction:t=>{sw(e,n,t.value,v)}}]})},hw=e=>(t,n)=>{let r=!1;const o={colorpicker:n};e.windowManager.open({title:\"Color Picker\",size:\"normal\",body:{type:\"panel\",items:[{type:\"colorpicker\",name:\"colorpicker\",label:\"Color\"}]},buttons:[{type:\"cancel\",name:\"cancel\",text:\"Cancel\"},{type:\"submit\",name:\"save\",text:\"Save\",primary:!0}],initialData:o,onAction:(e,t)=>{\"hex-valid\"===t.name&&(r=t.value)},onSubmit:n=>{const o=n.getData().colorpicker;r?(t(L.from(o)),n.close()):e.windowManager.alert(e.translate([\"Invalid hex color code: {0}\",o]))},onClose:v,onCancel:()=>{t(L.none())}})},mw=(e,t,n,r,o,i,s,a)=>{const l=wy(t),c=fw(t,n,r,\"color\"!==o?\"normal\":\"color\",i,s,a);return ky(e,l,c,r,{menuType:o})},fw=(e,t,n,r,o,i,s)=>we(P(e,(a=>{return\"choiceitem\"===a.type?(l=a,qr(\"choicemenuitem\",kb,l)).fold(xy,(a=>L.some(((e,t,n,r,o,i,s,a=!0)=>{const l=g_({presets:n,textContent:t?e.text:L.none(),htmlContent:L.none(),ariaLabel:e.text,iconContent:e.icon,shortcutContent:t?e.shortcut:L.none(),checkMark:t?L.some(m_(s.icons)):L.none(),caret:L.none(),value:e.value},s,a);return mr(i_({data:s_(e),enabled:e.enabled,getApi:e=>({setActive:t=>{Rp.set(e,t)},isActive:()=>Rp.isOn(e),isEnabled:()=>!sm.isDisabled(e),setEnabled:t=>sm.set(e,!t)}),onAction:t=>r(e.value),onSetup:e=>(e.setActive(o),v),triggersSubmenu:!1,itemBehaviours:[]},l,i,s),{toggling:{toggleClass:Wv,toggleOnExecute:!1,selected:e.active,exclusive:!0}})})(a,1===n,r,t,i(a.value),o,s,wy(e))))):L.none();var l}))),pw=(e,t)=>{const n=Zv(t);if(1===e)return{mode:\"menu\",moveOnTab:!0};if(\"auto\"===e)return{mode:\"grid\",selector:\".\"+n.item,initSize:{numColumns:1,numRows:1}};return{mode:\"matrix\",rowSelector:\".\"+(\"color\"===t?\"tox-swatches__row\":\"tox-collection__group\")}},gw=(e,t)=>{const n=e.initData.allowCustomColors&&t.colorinput.hasCustomColors();return e.initData.colors.fold((()=>aw(t.colorinput.getColors(),n)),(e=>e.concat(iw(n))))},vw=us(\"cell-over\"),yw=us(\"cell-execute\"),bw=(e,t,n)=>{const r=n=>$i(n,yw,{row:e,col:t}),o=(e,t)=>{t.stop(),r(e)};return pa({dom:{tag:\"div\",attributes:{role:\"button\",\"aria-labelledby\":n}},behaviours:$l([xp(\"insert-table-picker-cell\",[zi(Xo(),Ap.focus),zi(fi(),r),zi(ri(),o),zi(gi(),o)]),Rp.config({toggleClass:\"tox-insert-table-picker__selected\",toggleOnExecute:!1}),Ap.config({onFocus:n=>$i(n,vw,{row:e,col:t})})])})},_w=e=>G(e,(e=>P(e,ga))),ww=(e,t)=>da(`${t}x${e}`),xw={inserttable:e=>{const t=us(\"size-label\"),n=((e,t,n)=>{const r=[];for(let o=0;o<t;o++){const t=[];for(let r=0;r<n;r++)t.push(bw(o,r,e));r.push(t)}return r})(t,10,10),r=ww(0,0),o=vg({dom:{tag:\"span\",classes:[\"tox-insert-table-picker__label\"],attributes:{id:t}},components:[r],behaviours:$l([wp.config({})])});return{type:\"widget\",data:{value:us(\"widget-id\")},dom:{tag:\"div\",classes:[\"tox-fancymenuitem\"]},autofocus:!0,components:[__.widget({dom:{tag:\"div\",classes:[\"tox-insert-table-picker\"]},components:_w(n).concat(o.asSpec()),behaviours:$l([xp(\"insert-table-picker\",[Qi((e=>{wp.set(o.get(e),[r])})),Gi(vw,((e,t,r)=>{const{row:i,col:s}=r.event;((e,t,n,r,o)=>{for(let i=0;i<r;i++)for(let r=0;r<o;r++)Rp.set(e[i][r],i<=t&&r<=n)})(n,i,s,10,10),wp.set(o.get(e),[ww(i+1,s+1)])})),Gi(yw,((t,n,r)=>{const{row:o,col:i}=r.event;e.onAction({numRows:o+1,numColumns:i+1}),Ri(t,yi())}))]),hp.config({initSize:{numRows:10,numColumns:10},mode:\"flatgrid\",selector:'[role=\"button\"]'})])})]}},colorswatch:(e,t)=>{const n=gw(e,t),r=t.colorinput.getColorCols(),o=\"color\",i=mw(us(\"menu-value\"),n,(t=>{e.onAction({value:t})}),r,o,Yv.CLOSE_ON_EXECUTE,S,t.shared.providers),s={...i,markers:Zv(o),movement:pw(r,o)};return{type:\"widget\",data:{value:us(\"widget-id\")},dom:{tag:\"div\",classes:[\"tox-fancymenuitem\"]},autofocus:!0,components:[__.widget(og.sketch(s))]}}},Cw=(e,t,n,r,o,i,s,a=!0)=>{const l=g_({presets:r,textContent:L.none(),htmlContent:n?e.text.map((e=>y_(e,t))):L.none(),ariaLabel:e.text,iconContent:e.icon,shortcutContent:L.none(),checkMark:L.none(),caret:L.none(),value:e.value},s.providers,a,e.icon);return i_({data:s_(e),enabled:e.enabled,getApi:b({}),onAction:t=>o(e.value,e.meta),onSetup:b(v),triggersSubmenu:!1,itemBehaviours:v_(e.meta,s)},l,i,s.providers)},kw=e=>({type:\"separator\",dom:{tag:\"div\",classes:[Iv,\"tox-collection__group-heading\"]},components:e.text.map(da).toArray()}),Dw=(e,t,n,r=!0)=>{const o=g_({presets:\"normal\",iconContent:e.icon,textContent:e.text,htmlContent:L.none(),ariaLabel:e.text,caret:L.none(),checkMark:L.none(),shortcutContent:e.shortcut},n,r);return i_({data:s_(e),getApi:e=>({isEnabled:()=>!sm.isDisabled(e),setEnabled:t=>sm.set(e,!t)}),enabled:e.enabled,onAction:e.onAction,onSetup:e.onSetup,triggersSubmenu:!1,itemBehaviours:[]},o,t,n)},Sw=(e,t,n,r=!0,o=!1)=>{const i=o?(s=n.icons,l_(\"chevron-down\",s,[Vv])):(e=>l_(\"chevron-right\",e,[Vv]))(n.icons);var s;const a=g_({presets:\"normal\",iconContent:e.icon,textContent:e.text,htmlContent:L.none(),ariaLabel:e.text,caret:L.some(i),checkMark:L.none(),shortcutContent:e.shortcut},n,r);return i_({data:s_(e),getApi:e=>({isEnabled:()=>!sm.isDisabled(e),setEnabled:t=>sm.set(e,!t)}),enabled:e.enabled,onAction:v,onSetup:e.onSetup,triggersSubmenu:!0,itemBehaviours:[]},a,t,n)},Aw=(e,t,n,r=!0)=>{const o=g_({iconContent:e.icon,textContent:e.text,htmlContent:L.none(),ariaLabel:e.text,checkMark:L.some(m_(n.icons)),caret:L.none(),shortcutContent:e.shortcut,presets:\"normal\",meta:e.meta},n,r);return mr(i_({data:s_(e),enabled:e.enabled,getApi:e=>({setActive:t=>{Rp.set(e,t)},isActive:()=>Rp.isOn(e),isEnabled:()=>!sm.isDisabled(e),setEnabled:t=>sm.set(e,!t)}),onAction:e.onAction,onSetup:e.onSetup,triggersSubmenu:!1,itemBehaviours:[]},o,t,n),{toggling:{toggleClass:Wv,toggleOnExecute:!1,selected:e.active}})},Mw=(e,t)=>ve(xw,e.fancytype).map((n=>n(e,t))),Lw=(e,t,n,r)=>{const o={dom:p_(e.label),optComponents:[L.some({dom:{tag:\"div\",classes:[Gv,Kv]},components:b_(e.items,r)})]};return i_({data:s_({text:L.none(),...e}),enabled:e.enabled,getApi:e=>({isEnabled:()=>!sm.isDisabled(e),setEnabled:t=>{sm.set(e,!t),I(hu(e.element,\"*\"),(n=>{e.getSystem().getByDom(n).each((e=>{e.hasConfigured(sm)&&sm.set(e,!t)}))}))}}),onAction:e.onAction,onSetup:e.onSetup,triggersSubmenu:!1,itemBehaviours:L.from(r.itemBehaviours).getOr([])},o,t,n.providers)};var Ew=Object.freeze({__proto__:null,getCoupled:(e,t,n,r)=>n.getOrCreate(e,t,r),getExistingCoupled:(e,t,n,r)=>n.getExisting(e,t,r)}),Tw=[no(\"others\",Vr(Kn.value,Rr()))];var Fw=Object.freeze({__proto__:null,init:()=>{const e={},t=(t,n)=>{if(0===se(t.others).length)throw new Error(\"Cannot find any known coupled components\");return ve(e,n)},n=b({});return Ms({readState:n,getExisting:(e,n,r)=>t(n,r).orThunk((()=>(ve(n.others,r).getOrDie(\"No information found for coupled component: \"+r),L.none()))),getOrCreate:(n,r,o)=>t(r,o).getOrThunk((()=>{const t=ve(r.others,o).getOrDie(\"No information found for coupled component: \"+o)(n),i=n.getSystem().build(t);return e[o]=i,i}))})}});const Ow=Yl({fields:Tw,name:\"coupling\",apis:Ew,state:Fw}),Bw=e=>{let t=L.none(),n=[];const r=e=>{o()?s(e):n.push(e)},o=()=>t.isSome(),i=e=>{I(e,s)},s=e=>{t.each((t=>{setTimeout((()=>{e(t)}),0)}))};return e((e=>{o()||(t=L.some(e),i(n),n=[])})),{get:r,map:e=>Bw((t=>{r((n=>{t(e(n))}))})),isReady:o}},Rw={nu:Bw,pure:e=>Bw((t=>{t(e)}))},$w=e=>{setTimeout((()=>{throw e}),0)},Nw=e=>{const t=t=>{e().then(t,$w)};return{map:t=>Nw((()=>e().then(t))),bind:t=>Nw((()=>e().then((e=>t(e).toPromise())))),anonBind:t=>Nw((()=>e().then((()=>t.toPromise())))),toLazy:()=>Rw.nu(t),toCached:()=>{let t=null;return Nw((()=>(null===t&&(t=e()),t)))},toPromise:e,get:t}},Yw=e=>Nw((()=>new Promise(e))),Pw=e=>Nw((()=>Promise.resolve(e))),Iw=b(\"sink\"),Hw=b(ph({name:Iw(),overrides:b({dom:{tag:\"div\"},behaviours:$l([Uu.config({useFixed:A})]),events:Hi([Ki(Zo()),Ki(Vo()),Ki(ri())])})})),jw=(e,t)=>{const n=e.getHotspot(t).getOr(t),r=\"hotspot\",o=e.getAnchorOverrides();return e.layouts.fold((()=>({type:r,hotspot:n,overrides:o})),(e=>({type:r,hotspot:n,overrides:o,layouts:e})))},Ww=(e,t,n,r,o,i,s)=>{const a=((e,t,n,r,o,i,s)=>{const a=((e,t,n)=>(0,e.fetch)(n).map(t))(e,t,r),l=qw(r,e);return a.map((e=>e.bind((e=>L.from(mg.sketch({...i.menu(),uid:vs(\"\"),data:e,highlightOnOpen:s,onOpenMenu:(e,t)=>{const r=l().getOrDie();Uu.position(r,t,{anchor:n}),vd.decloak(o)},onOpenSubmenu:(e,t,n)=>{const r=l().getOrDie();Uu.position(r,n,{anchor:{type:\"submenu\",item:t}}),vd.decloak(o)},onRepositionMenu:(e,t,r)=>{const o=l().getOrDie();Uu.position(o,t,{anchor:n}),I(r,(e=>{Uu.position(o,e.triggeredMenu,{anchor:{type:\"submenu\",item:e.triggeringItem}})}))},onEscape:()=>(Ap.focus(r),vd.close(o),L.some(!0))}))))))})(e,t,jw(e,n),n,r,o,s);return a.map((e=>(e.fold((()=>{vd.isOpen(r)&&vd.close(r)}),(e=>{vd.cloak(r),vd.open(r,e),i(r)})),r)))},zw=(e,t,n,r,o,i,s)=>(vd.close(r),Pw(r)),Uw=(e,t,n,r,o,i)=>{const s=Ow.getCoupled(n,\"sandbox\");return(vd.isOpen(s)?zw:Ww)(e,t,n,s,r,o,i)},Vw=(e,t,n)=>{const r=Vh.getCurrent(t).getOr(t),o=Vt(e.element);n?St(r.element,\"min-width\",o+\"px\"):((e,t)=>{Ut.set(e,t)})(r.element,o)},qw=(e,t)=>e.getSystem().getByUid(t.uid+\"-\"+Iw()).map((e=>()=>Kn.value(e))).getOrThunk((()=>t.lazySink.fold((()=>()=>Kn.error(new Error(\"No internal sink is specified, nor could an external sink be found\"))),(t=>()=>t(e))))),Gw=e=>{vd.getState(e).each((e=>{mg.repositionMenus(e)}))},Kw=(e,t,n)=>{const r=Sa(),o=qw(t,e);return{dom:{tag:\"div\",classes:e.sandboxClasses,attributes:{id:r.id,role:\"listbox\"}},behaviours:jd(e.sandboxBehaviours,[Nd.config({store:{mode:\"memory\",initialValue:t}}),vd.config({onOpen:(o,i)=>{const s=jw(e,t);r.link(t.element),e.matchWidth&&Vw(s.hotspot,i,e.useMinWidth),e.onOpen(s,o,i),void 0!==n&&void 0!==n.onOpen&&n.onOpen(o,i)},onClose:(e,o)=>{r.unlink(t.element),void 0!==n&&void 0!==n.onClose&&n.onClose(e,o)},isPartOf:(e,n,r)=>Ma(n,r)||Ma(t,r),getAttachPoint:()=>o().getOrDie()}),Vh.config({find:e=>vd.getState(e).bind((e=>Vh.getCurrent(e)))}),jl.config({channels:{...xd({isExtraPart:S}),...kd({doReposition:Gw})}})])}},Xw=e=>{const t=Ow.getCoupled(e,\"sandbox\");Gw(t)},Jw=()=>[bo(\"sandboxClasses\",[]),Hd(\"sandboxBehaviours\",[Vh,jl,vd,Nd])],Qw=b([to(\"dom\"),to(\"fetch\"),Wa(\"onOpen\"),za(\"onExecute\"),bo(\"getHotspot\",L.some),bo(\"getAnchorOverrides\",b({})),Pc(),Yd(\"dropdownBehaviours\",[Rp,Ow,hp,Ap]),to(\"toggleClass\"),bo(\"eventOrder\",{}),uo(\"lazySink\"),bo(\"matchWidth\",!1),bo(\"useMinWidth\",!1),uo(\"role\")].concat(Jw())),Zw=b([fh({schema:[Ia(),bo(\"fakeFocus\",!1)],name:\"menu\",defaults:e=>({onExecute:e.onExecute})}),Hw()]),ex=jh({name:\"Dropdown\",configFields:Qw(),partFields:Zw(),factory:(e,t,n,r)=>{const o=e=>{vd.getState(e).each((e=>{mg.highlightPrimary(e)}))},i=(t,n,o)=>Uw(e,_,t,r,n,o),s={expand:e=>{Rp.isOn(e)||i(e,v,dg.HighlightNone).get(v)},open:e=>{Rp.isOn(e)||i(e,v,dg.HighlightMenuAndItem).get(v)},refetch:t=>Ow.getExistingCoupled(t,\"sandbox\").fold((()=>i(t,v,dg.HighlightMenuAndItem).map(v)),(n=>Ww(e,_,t,n,r,v,dg.HighlightMenuAndItem).map(v))),isOpen:Rp.isOn,close:e=>{Rp.isOn(e)&&i(e,v,dg.HighlightMenuAndItem).get(v)},repositionMenus:e=>{Rp.isOn(e)&&Xw(e)}},a=(e,t)=>(Ni(e),L.some(!0));return{uid:e.uid,dom:e.dom,components:t,behaviours:Id(e.dropdownBehaviours,[Rp.config({toggleClass:e.toggleClass,aria:{mode:\"expanded\"}}),Ow.config({others:{sandbox:t=>Kw(e,t,{onOpen:()=>Rp.on(t),onClose:()=>Rp.off(t)})}}),hp.config({mode:\"special\",onSpace:a,onEnter:a,onDown:(e,t)=>{if(ex.isOpen(e)){const t=Ow.getCoupled(e,\"sandbox\");o(t)}else ex.open(e);return L.some(!0)},onEscape:(e,t)=>ex.isOpen(e)?(ex.close(e),L.some(!0)):L.none()}),Ap.config({})]),events:Yp(L.some((e=>{i(e,o,dg.HighlightMenuAndItem).get(v)}))),eventOrder:{...e.eventOrder,[fi()]:[\"disabling\",\"toggling\",\"alloy.base.behaviour\"]},apis:s,domModification:{attributes:{\"aria-haspopup\":\"true\",...e.role.fold((()=>({})),(e=>({role:e}))),...\"button\"===e.dom.tag?{type:(l=\"type\",ve(e.dom,\"attributes\").bind((e=>ve(e,l)))).getOr(\"button\")}:{}}}};var l},apis:{open:(e,t)=>e.open(t),refetch:(e,t)=>e.refetch(t),expand:(e,t)=>e.expand(t),close:(e,t)=>e.close(t),isOpen:(e,t)=>e.isOpen(t),repositionMenus:(e,t)=>e.repositionMenus(t)}}),tx=e=>{const t=Nd.getValue(e),n=dy(e).map(my);ex.refetch(t).get((()=>{const e=Ow.getCoupled(t,\"sandbox\");n.each((t=>dy(e).each((e=>((e,t)=>{Nd.setValue(e,t.fetchPattern),e.element.dom.selectionStart=t.selectionStart,e.element.dom.selectionEnd=t.selectionEnd})(e,t)))))}))},nx=e=>vd.getState(e).bind(vm.getHighlighted).bind(vm.getHighlighted),rx=(e,t,n)=>{hy(e).each((e=>{((e,t)=>{wt(t.element,\"id\").each((t=>yt(e.element,\"aria-activedescendant\",t)))})(e,n);var r;(Gs((r=t).element,py)?L.some(r.element):Ca(r.element,\".\"+py)).each((t=>{wt(t,\"id\").each((t=>yt(e.element,\"aria-controls\",t)))}))})),yt(n.element,\"aria-selected\",\"true\")},ox=(e,t,n)=>{yt(n.element,\"aria-selected\",\"false\")},ix=e=>Ow.getExistingCoupled(e,\"sandbox\").bind(dy).map(my).map((e=>e.fetchPattern)).getOr(\"\");var sx;!function(e){e[e.ContentFocus=0]=\"ContentFocus\",e[e.UiFocus=1]=\"UiFocus\"}(sx||(sx={}));const ax=(e,t,n,r,o)=>{const i=n.shared.providers,s=e=>o?{...e,shortcut:L.none(),icon:e.text.isSome()?L.none():e.icon}:e;switch(e.type){case\"menuitem\":return(a=e,qr(\"menuitem\",Lb,a)).fold(xy,(e=>L.some(Dw(s(e),t,i,r))));case\"nestedmenuitem\":return(e=>qr(\"nestedmenuitem\",Eb,e))(e).fold(xy,(e=>L.some(Sw(s(e),t,i,r,o))));case\"togglemenuitem\":return(e=>qr(\"togglemenuitem\",Tb,e))(e).fold(xy,(e=>L.some(Aw(s(e),t,i,r))));case\"separator\":return(e=>qr(\"separatormenuitem\",Zy,e))(e).fold(xy,(e=>L.some(kw(e))));case\"fancymenuitem\":return(e=>qr(\"fancymenuitem\",Mb,e))(e).fold(xy,(e=>Mw(e,n)));default:return console.error(\"Unknown item in general menu\",e),L.none()}var a},lx=(e,t,n,r,o,i,s)=>{const a=1===r,l=!a||wy(e);return we(P(e,(e=>{switch(e.type){case\"separator\":return(r=e,qr(\"Autocompleter.Separator\",Zy,r)).fold(xy,(e=>L.some(kw(e))));case\"cardmenuitem\":return(e=>qr(\"cardmenuitem\",Cb,e))(e).fold(xy,(e=>L.some(Lw({...e,onAction:t=>{e.onAction(t),n(e.value,e.meta)}},o,i,{itemBehaviours:v_(e.meta,i),cardText:{matchText:t,highlightOn:s}}))));default:return(e=>qr(\"Autocompleter.Item\",eb,e))(e).fold(xy,(e=>L.some(Cw(e,t,a,\"normal\",n,o,i,l))))}var r})))},cx=(e,t,n,r,o,i)=>{const s=wy(t),a=we(P(t,(e=>{const t=e=>ax(e,n,r,(e=>o?!ye(e,\"text\"):s)(e),o);return\"nestedmenuitem\"===e.type&&e.getSubmenuItems().length<=0?t({...e,enabled:!1}):t(e)}))),l=(e=>\"no-search\"===e.searchMode?{menuType:\"normal\"}:{menuType:\"searchable\",searchMode:e})(i);return(o?Cy:ky)(e,s,a,1,l)},ux=e=>mg.singleData(e.value,e),dx=(e,t)=>{const n=Mo(!1),r=Mo(!1),o=pa(fg.sketch({dom:{tag:\"div\",classes:[\"tox-autocompleter\"]},components:[],fireDismissalEventInstead:{},inlineBehaviours:$l([xp(\"dismissAutocompleter\",[zi(Ai(),(()=>c()))])]),lazySink:t.getSink})),i=()=>fg.isOpen(o),s=r.get,a=()=>{i()&&fg.hide(o)},l=()=>fg.getContent(o).bind((e=>te(e.components(),0))),c=()=>e.execCommand(\"mceAutocompleterClose\"),u=r=>{const o=ie(r,(e=>L.from(e.columns))).getOr(1);return G(r,(r=>{const i=r.items;return lx(i,r.matchText,((t,o)=>{const i=e.selection.getRng();((e,t)=>Rv(Fe.fromDom(t.startContainer)).map((t=>{const n=e.createRng();return n.selectNode(t.dom),n})))(e.dom,i).each((i=>{const s={hide:()=>c(),reload:t=>{a(),e.execCommand(\"mceAutocompleterReload\",!1,{fetchOptions:t})}};n.set(!0),r.onAction(s,i,t,o),n.set(!1)}))}),o,Yv.BUBBLE_TO_SANDBOX,t,r.highlightOn)}))},d=(t,n)=>{var r;(r=Fe.fromDom(e.getBody()),Ca(r,Bv)).each((r=>{const i=ie(t,(e=>L.from(e.columns))).getOr(1);fg.showMenuAt(o,{anchor:{type:\"node\",root:Fe.fromDom(e.getBody()),node:L.from(r)}},((e,t,n,r)=>{const o=pw(t,r),i=Zv(r);return{data:ux({...e,movement:o,menuBehaviours:Bb(\"auto\"!==t?[]:[Qi(((e,t)=>{Fb(e,4,i.item).each((({numColumns:t,numRows:n})=>{hp.setGridSize(e,n,t)}))}))])}),menu:{markers:Zv(r),fakeFocus:n===sx.ContentFocus}}})(ky(\"autocompleter-value\",!0,n,i,{menuType:\"normal\"}),i,sx.ContentFocus,\"normal\"))})),l().each(vm.highlightFirst)},h=e=>{const t=u(e);t.length>0?d(e,t):a()};e.on(\"AutocompleterStart\",(({lookupData:e})=>{r.set(!0),n.set(!1),h(e)})),e.on(\"AutocompleterUpdate\",(({lookupData:e})=>h(e))),e.on(\"AutocompleterEnd\",(()=>{a(),r.set(!1),n.set(!1)}));const m={cancelIfNecessary:c,isMenuOpen:i,isActive:s,isProcessingAction:n.get,getMenu:l};$v(m,e)},hx=(e,t,n)=>ka(e,t,n).isSome(),mx=(e,t)=>{let n=null;return{cancel:()=>{null!==n&&(clearTimeout(n),n=null)},schedule:(...r)=>{n=setTimeout((()=>{e.apply(null,r),n=null}),t)}}},fx=e=>{const t=e.raw;return void 0===t.touches||1!==t.touches.length?L.none():L.some(t.touches[0])},px=e=>{const t=hc(),n=Mo(!1),r=mx((t=>{e.triggerEvent(vi(),t),n.set(!0)}),400),o=Fo([{key:jo(),value:e=>(fx(e).each((o=>{r.cancel();const i={x:o.clientX,y:o.clientY,target:e.target};r.schedule(e),n.set(!1),t.set(i)})),L.none())},{key:Wo(),value:e=>(r.cancel(),fx(e).each((e=>{t.on((n=>{((e,t)=>{const n=Math.abs(e.clientX-t.x),r=Math.abs(e.clientY-t.y);return n>5||r>5})(e,n)&&t.clear()}))})),L.none())},{key:zo(),value:o=>{r.cancel();return t.get().filter((e=>qe(e.target,o.target))).map((t=>n.get()?(o.prevent(),!1):e.triggerEvent(gi(),o)))}}]);return{fireIfReady:(e,t)=>ve(o,t).bind((t=>t(e)))}},gx=(e,t)=>{const n={stopBackspace:!0,...t},r=px(n),o=P([\"touchstart\",\"touchmove\",\"touchend\",\"touchcancel\",\"gesturestart\",\"mousedown\",\"mouseup\",\"mouseover\",\"mousemove\",\"mouseout\",\"click\"].concat([\"selectstart\",\"input\",\"contextmenu\",\"change\",\"transitionend\",\"transitioncancel\",\"drag\",\"dragstart\",\"dragend\",\"dragenter\",\"dragleave\",\"dragover\",\"drop\",\"keyup\"]),(t=>fc(e,t,(e=>{r.fireIfReady(e,t).each((t=>{t&&e.kill()}));n.triggerEvent(t,e)&&e.kill()})))),i=hc(),s=fc(e,\"paste\",(e=>{r.fireIfReady(e,\"paste\").each((t=>{t&&e.kill()}));n.triggerEvent(\"paste\",e)&&e.kill(),i.set(setTimeout((()=>{n.triggerEvent(hi(),e)}),0))})),a=fc(e,\"keydown\",(e=>{n.triggerEvent(\"keydown\",e)?e.kill():n.stopBackspace&&(e=>e.raw.which===ym[0]&&!R([\"input\",\"textarea\"],Ye(e.target))&&!hx(e.target,'[contenteditable=\"true\"]'))(e)&&e.prevent()})),l=fc(e,\"focusin\",(e=>{n.triggerEvent(\"focusin\",e)&&e.kill()})),c=hc(),u=fc(e,\"focusout\",(e=>{n.triggerEvent(\"focusout\",e)&&e.kill(),c.set(setTimeout((()=>{n.triggerEvent(di(),e)}),0))}));return{unbind:()=>{I(o,(e=>{e.unbind()})),a.unbind(),l.unbind(),u.unbind(),s.unbind(),i.on(clearTimeout),c.on(clearTimeout)}}},vx=(e,t)=>{const n=ve(e,\"target\").getOr(t);return Mo(n)},yx=Lo([{stopped:[]},{resume:[\"element\"]},{complete:[]}]),bx=(e,t,n,r,o,i)=>{const s=e(t,r),a=((e,t)=>{const n=Mo(!1),r=Mo(!1);return{stop:()=>{n.set(!0)},cut:()=>{r.set(!0)},isStopped:n.get,isCut:r.get,event:e,setSource:t.set,getSource:t.get}})(n,o);return s.fold((()=>(i.logEventNoHandlers(t,r),yx.complete())),(e=>{const n=e.descHandler;return Ts(n)(a),a.isStopped()?(i.logEventStopped(t,e.element,n.purpose),yx.stopped()):a.isCut()?(i.logEventCut(t,e.element,n.purpose),yx.complete()):Ze(e.element).fold((()=>(i.logNoParent(t,e.element,n.purpose),yx.complete())),(r=>(i.logEventResponse(t,e.element,n.purpose),yx.resume(r))))}))},_x=(e,t,n,r,o,i)=>bx(e,t,n,r,o,i).fold(A,(r=>_x(e,t,n,r,o,i)),S),wx=(e,t,n)=>{const r=(e=>{const t=Mo(!1);return{stop:()=>{t.set(!0)},cut:v,isStopped:t.get,isCut:S,event:e,setSource:k(\"Cannot set source of a broadcasted event\"),getSource:k(\"Cannot get source of a broadcasted event\")}})(t);return I(e,(e=>{const t=e.descHandler;Ts(t)(r)})),r.isStopped()},xx=(e,t,n,r,o)=>{const i=vx(n,r);return _x(e,t,n,r,i,o)},Cx=()=>{const e={};return{registerId:(t,n,r)=>{le(r,((r,o)=>{const i=void 0!==e[o]?e[o]:{};i[n]=((e,t)=>{return n=x.apply(void 0,[e.handler].concat(t)),r=e.purpose,{cHandler:n,purpose:r};var n,r})(r,t),e[o]=i}))},unregisterId:t=>{le(e,((e,n)=>{ye(e,t)&&delete e[t]}))},filterByType:t=>ve(e,t).map((e=>fe(e,((e,t)=>((e,t)=>({id:e,descHandler:t}))(t,e))))).getOr([]),find:(t,n,r)=>ve(e,n).bind((e=>$o(r,(t=>((e,t)=>gs(t).bind((t=>ve(e,t))).map((e=>((e,t)=>({element:e,descHandler:t}))(t,e))))(e,t)),t)))}},kx=()=>{const e=Cx(),t={},n=e=>{const t=e.element;return gs(t).getOrThunk((()=>((e,t)=>{const n=us(ms+e);return ps(t,n),n})(\"uid-\",e.element)))},r=n=>{gs(n.element).each((n=>{delete t[n],e.unregisterId(n)}))};return{find:(t,n,r)=>e.find(t,n,r),filter:t=>e.filterByType(t),register:o=>{const i=n(o);be(t,i)&&((e,n)=>{const o=t[n];if(o!==e)throw new Error('The tagId \"'+n+'\" is already used by: '+ss(o.element)+\"\\nCannot use it for: \"+ss(e.element)+\"\\nThe conflicting element is\"+(ft(o.element)?\" \":\" not \")+\"already in the DOM\");r(e)})(o,i);const s=[o];e.registerId(s,i,o.events),t[i]=o},unregister:r,getById:e=>ve(t,e)}},Dx=Hh({name:\"Container\",factory:e=>{const{attributes:t,...n}=e.dom;return{uid:e.uid,dom:{tag:\"div\",attributes:{role:\"presentation\",...t},...n},components:e.components,behaviours:Pd(e.containerBehaviours),events:e.events,domModification:e.domModification,eventOrder:e.eventOrder}},configFields:[bo(\"components\",[]),Yd(\"containerBehaviours\",[]),bo(\"events\",{}),bo(\"domModification\",{}),bo(\"eventOrder\",{})]}),Sx=e=>{const t=t=>Ze(e.element).fold(A,(e=>qe(t,e))),n=kx(),r=(e,r)=>n.find(t,e,r),o=gx(e.element,{triggerEvent:(e,t)=>Ba(e,t.target,(n=>((e,t,n,r)=>xx(e,t,n,n.target,r))(r,e,t,n)))}),i={debugInfo:b(\"real\"),triggerEvent:(e,t,n)=>{Ba(e,t,(o=>xx(r,e,n,t,o)))},triggerFocus:(e,t)=>{gs(e).fold((()=>{zl(e)}),(n=>{Ba(ui(),e,(n=>(((e,t,n,r,o)=>{const i=vx(n,r);bx(e,t,n,r,i,o)})(r,ui(),{originator:t,kill:v,prevent:v,target:e},e,n),!1)))}))},triggerEscape:(e,t)=>{i.triggerEvent(\"keydown\",e.element,t.event)},getByUid:e=>f(e),getByDom:e=>p(e),build:pa,buildOrPatch:fa,addToGui:e=>{l(e)},removeFromGui:e=>{c(e)},addToWorld:e=>{s(e)},removeFromWorld:e=>{a(e)},broadcast:e=>{d(e)},broadcastOn:(e,t)=>{h(e,t)},broadcastEvent:(e,t)=>{m(e,t)},isConnected:A},s=e=>{e.connect(i),He(e.element)||(n.register(e),I(e.components(),s),i.triggerEvent(_i(),e.element,{target:e.element}))},a=e=>{He(e.element)||(I(e.components(),a),n.unregister(e)),e.disconnect()},l=t=>{Zu(e,t)},c=e=>{nd(e)},u=e=>{const t=n.filter(mi());I(t,(t=>{const n=t.descHandler;Ts(n)(e)}))},d=e=>{u({universal:!0,data:e})},h=(e,t)=>{u({universal:!1,channels:e,data:t})},m=(e,t)=>{const r=n.filter(e);return wx(r,t)},f=e=>n.getById(e).fold((()=>Kn.error(new Error('Could not find component with uid: \"'+e+'\" in system.'))),Kn.value),p=e=>{const t=gs(e).getOr(\"not found\");return f(t)};return s(e),{root:e,element:e.element,destroy:()=>{o.unbind(),Bn(e.element)},add:l,remove:c,getByUid:f,getByDom:p,addToWorld:s,removeFromWorld:a,broadcast:d,broadcastOn:h,broadcastEvent:m}},Ax=b([bo(\"prefix\",\"form-field\"),Yd(\"fieldBehaviours\",[Vh,Nd])]),Mx=b([ph({schema:[to(\"dom\")],name:\"label\"}),ph({factory:{sketch:e=>({uid:e.uid,dom:{tag:\"span\",styles:{display:\"none\"},attributes:{\"aria-hidden\":\"true\"},innerHtml:e.text}})},schema:[to(\"text\")],name:\"aria-descriptor\"}),mh({factory:{sketch:e=>{const t=Eo(e,[\"factory\"]);return e.factory.sketch(t)}},schema:[to(\"factory\")],name:\"field\"})]),Lx=jh({name:\"FormField\",configFields:Ax(),partFields:Mx(),factory:(e,t,n,r)=>{const o=Id(e.fieldBehaviours,[Vh.config({find:t=>Ah(t,e,\"field\")}),Nd.config({store:{mode:\"manual\",getValue:e=>Vh.getCurrent(e).bind(Nd.getValue),setValue:(e,t)=>{Vh.getCurrent(e).each((e=>{Nd.setValue(e,t)}))}}})]),i=Hi([Qi(((t,n)=>{const r=Lh(t,e,[\"label\",\"field\",\"aria-descriptor\"]);r.field().each((t=>{const n=us(e.prefix);r.label().each((e=>{yt(e.element,\"for\",n),yt(t.element,\"id\",n)})),r[\"aria-descriptor\"]().each((n=>{const r=us(e.prefix);yt(n.element,\"id\",r),yt(t.element,\"aria-describedby\",r)}))}))}))]),s={getField:t=>Ah(t,e,\"field\"),getLabel:t=>Ah(t,e,\"label\")};return{uid:e.uid,dom:e.dom,components:t,behaviours:o,events:i,apis:s}},apis:{getField:(e,t)=>e.getField(t),getLabel:(e,t)=>e.getLabel(t)}});var Ex=Object.freeze({__proto__:null,exhibit:(e,t)=>Es({attributes:Fo([{key:t.tabAttr,value:\"true\"}])})}),Tx=[bo(\"tabAttr\",\"data-alloy-tabstop\")];const Fx=Yl({fields:Tx,name:\"tabstopping\",active:Ex});var Ox=tinymce.util.Tools.resolve(\"tinymce.html.Entities\");const Bx=(e,t,n,r)=>{const o=Rx(e,t,n,r);return Lx.sketch(o)},Rx=(e,t,n,r)=>({dom:$x(n),components:e.toArray().concat([t]),fieldBehaviours:$l(r)}),$x=e=>({tag:\"div\",classes:[\"tox-form__group\"].concat(e)}),Nx=(e,t)=>Lx.parts.label({dom:{tag:\"label\",classes:[\"tox-label\"]},components:[da(t.translate(e))]}),Yx=us(\"form-component-change\"),Px=us(\"form-close\"),Ix=us(\"form-cancel\"),Hx=us(\"form-action\"),jx=us(\"form-submit\"),Wx=us(\"form-block\"),zx=us(\"form-unblock\"),Ux=us(\"form-tabchange\"),Vx=us(\"form-resize\"),qx=(e,t,n)=>{const r=e.label.map((e=>Nx(e,t))),o=e=>(t,n)=>{ka(n.event.target,\"[data-collection-item-value]\").each((r=>{e(t,n,r,_t(r,\"data-collection-item-value\"))}))},i=o(((n,r,o,i)=>{r.stop(),t.isDisabled()||$i(n,Hx,{name:e.name,value:i})})),s=[zi(Xo(),o(((e,t,n)=>{zl(n)}))),zi(ri(),i),zi(gi(),i),zi(Jo(),o(((e,t,n)=>{Ca(e.element,\".\"+qv).each((e=>{qs(e,qv)})),Vs(n,qv)}))),zi(Qo(),o((e=>{Ca(e.element,\".\"+qv).each((e=>{qs(e,qv)}))}))),ts(o(((t,n,r,o)=>{$i(t,Hx,{name:e.name,value:o})})))],a=(e,t)=>P(hu(e.element,\".tox-collection__item\"),t),l=Lx.parts.field({dom:{tag:\"div\",classes:[\"tox-collection\"].concat(1!==e.columns?[\"tox-collection--grid\"]:[\"tox-collection--list\"])},components:[],factory:{sketch:_},behaviours:$l([sm.config({disabled:t.isDisabled,onDisabled:e=>{a(e,(e=>{Vs(e,\"tox-collection__item--state-disabled\"),yt(e,\"aria-disabled\",!0)}))},onEnabled:e=>{a(e,(e=>{qs(e,\"tox-collection__item--state-disabled\"),Ct(e,\"aria-disabled\")}))}}),Gb(),wp.config({}),Nd.config({store:{mode:\"memory\",initialValue:n.getOr([])},onSetValue:(n,r)=>{((n,r)=>{const o=P(r,(n=>{const r=yg.translate(n.text),o=1===e.columns?`<div class=\"tox-collection__item-label\">${r}</div>`:\"\",i=`<div class=\"tox-collection__item-icon\">${n.icon}</div>`,s={_:\" \",\" - \":\" \",\"-\":\" \"},a=r.replace(/\\_| \\- |\\-/g,(e=>s[e]));return`<div class=\"tox-collection__item${t.isDisabled()?\" tox-collection__item--state-disabled\":\"\"}\" tabindex=\"-1\" data-collection-item-value=\"${Ox.encodeAllRaw(n.value)}\" title=\"${a}\" aria-label=\"${a}\">${i}${o}</div>`})),i=\"auto\"!==e.columns&&e.columns>1?Y(o,e.columns):[o],s=P(i,(e=>`<div class=\"tox-collection__group\">${e.join(\"\")}</div>`));rs(n.element,s.join(\"\"))})(n,r),\"auto\"===e.columns&&Fb(n,5,\"tox-collection__item\").each((({numRows:e,numColumns:t})=>{hp.setGridSize(n,e,t)})),Ri(n,Vx)}}),Fx.config({}),hp.config((c=e.columns,u=\"normal\",1===c?{mode:\"menu\",moveOnTab:!1,selector:\".tox-collection__item\"}:\"auto\"===c?{mode:\"flatgrid\",selector:\".tox-collection__item\",initSize:{numColumns:1,numRows:1}}:{mode:\"matrix\",selectors:{row:\"color\"===u?\".tox-swatches__row\":\".tox-collection__group\",cell:\"color\"===u?\".tox-swatch\":`.${Iv}`}})),xp(\"collection-events\",s)]),eventOrder:{[fi()]:[\"disabling\",\"alloy.base.behaviour\",\"collection-events\"]}});var c,u;return Bx(r,l,[\"tox-form__group--collection\"],[])},Gx=[\"input\",\"textarea\"],Kx=e=>{const t=Ye(e);return R(Gx,t)},Xx=(e,t)=>{const n=t.getRoot(e).getOr(e.element);qs(n,t.invalidClass),t.notify.each((t=>{Kx(e.element)&&yt(e.element,\"aria-invalid\",!1),t.getContainer(e).each((e=>{rs(e,t.validHtml)})),t.onValid(e)}))},Jx=(e,t,n,r)=>{const o=t.getRoot(e).getOr(e.element);Vs(o,t.invalidClass),t.notify.each((t=>{Kx(e.element)&&yt(e.element,\"aria-invalid\",!0),t.getContainer(e).each((e=>{rs(e,r)})),t.onInvalid(e,r)}))},Qx=(e,t,n)=>t.validator.fold((()=>Pw(Kn.value(!0))),(t=>t.validate(e))),Zx=(e,t,n)=>(t.notify.each((t=>{t.onValidate(e)})),Qx(e,t).map((n=>e.getSystem().isConnected()?n.fold((n=>(Jx(e,t,0,n),Kn.error(n))),(n=>(Xx(e,t),Kn.value(n)))):Kn.error(\"No longer in system\"))));var eC=Object.freeze({__proto__:null,markValid:Xx,markInvalid:Jx,query:Qx,run:Zx,isInvalid:(e,t)=>{const n=t.getRoot(e).getOr(e.element);return Gs(n,t.invalidClass)}});var tC=Object.freeze({__proto__:null,events:(e,t)=>e.validator.map((t=>Hi([zi(t.onEvent,(t=>{Zx(t,e).get(_)}))].concat(t.validateOnLoad?[Qi((t=>{Zx(t,e).get(v)}))]:[])))).getOr({})}),nC=[to(\"invalidClass\"),bo(\"getRoot\",L.none),yo(\"notify\",[bo(\"aria\",\"alert\"),bo(\"getContainer\",L.none),bo(\"validHtml\",\"\"),Wa(\"onValid\"),Wa(\"onInvalid\"),Wa(\"onValidate\")]),yo(\"validator\",[to(\"validate\"),bo(\"onEvent\",\"input\"),bo(\"validateOnLoad\",!0)])];const rC=Yl({fields:nC,name:\"invalidating\",active:tC,apis:eC,extra:{validation:e=>t=>{const n=Nd.getValue(t);return Pw(e(n))}}});const oC=Yl({fields:[],name:\"unselecting\",active:Object.freeze({__proto__:null,events:()=>Hi([ji(ai(),A)]),exhibit:()=>Es({styles:{\"-webkit-user-select\":\"none\",\"user-select\":\"none\",\"-ms-user-select\":\"none\",\"-moz-user-select\":\"-moz-none\"},attributes:{unselectable:\"on\"}})})}),iC=us(\"color-input-change\"),sC=us(\"color-swatch-change\"),aC=us(\"color-picker-cancel\"),lC=(e,t,n,r)=>{const o=Lx.parts.field({factory:ay,inputClasses:[\"tox-textfield\"],data:r,onSetValue:e=>rC.run(e).get(v),inputBehaviours:$l([sm.config({disabled:t.providers.isDisabled}),Gb(),Fx.config({}),rC.config({invalidClass:\"tox-textbox-field-invalid\",getRoot:e=>et(e.element),notify:{onValid:e=>{const t=Nd.getValue(e);$i(e,iC,{color:t})}},validator:{validateOnLoad:!1,validate:e=>{const t=Nd.getValue(e);if(0===t.length)return Pw(Kn.value(!0));{const e=Fe.fromTag(\"span\");St(e,\"background-color\",t);const n=Tt(e,\"background-color\").fold((()=>Kn.error(\"blah\")),(e=>Kn.value(t)));return Pw(n)}}}})]),selectOnFocus:!1}),i=e.label.map((e=>Nx(e,t.providers))),s=(e,t)=>{$i(e,sC,{value:t})},a=vg(((e,t)=>ex.sketch({dom:e.dom,components:e.components,toggleClass:\"mce-active\",dropdownBehaviours:$l([Xb(t.providers.isDisabled),Gb(),oC.config({}),Fx.config({})]),layouts:e.layouts,sandboxClasses:[\"tox-dialog__popups\"],lazySink:t.getSink,fetch:n=>Yw((t=>e.fetch(t))).map((r=>L.from(ux(mr(mw(us(\"menu-value\"),r,(t=>{e.onItemAction(n,t)}),e.columns,e.presets,Yv.CLOSE_ON_EXECUTE,S,t.providers),{movement:pw(e.columns,e.presets)}))))),parts:{menu:ny(0,0,e.presets)}}))({dom:{tag:\"span\",attributes:{\"aria-label\":t.providers.translate(\"Color swatch\")}},layouts:{onRtl:()=>[vl,gl,wl],onLtr:()=>[gl,vl,wl]},components:[],fetch:lw(n.getColors(),n.hasCustomColors()),columns:n.getColorCols(),presets:\"color\",onItemAction:(e,t)=>{a.getOpt(e).each((e=>{\"custom\"===t?n.colorPicker((t=>{t.fold((()=>Ri(e,aC)),(t=>{s(e,t),nw(t)}))}),\"#ffffff\"):s(e,\"remove\"===t?\"\":t)}))}},t));return Lx.sketch({dom:{tag:\"div\",classes:[\"tox-form__group\"]},components:i.toArray().concat([{dom:{tag:\"div\",classes:[\"tox-color-input\"]},components:[o,a.asSpec()]}]),fieldBehaviours:$l([xp(\"form-field-events\",[zi(iC,((t,n)=>{a.getOpt(t).each((e=>{St(e.element,\"background-color\",n.event.color)})),$i(t,Yx,{name:e.name})})),zi(sC,((e,t)=>{Lx.getField(e).each((n=>{Nd.setValue(n,t.event.value),Vh.getCurrent(e).each(Ap.focus)}))})),zi(aC,((e,t)=>{Lx.getField(e).each((t=>{Vh.getCurrent(e).each(Ap.focus)}))}))])])})},cC=ph({schema:[to(\"dom\")],name:\"label\"}),uC=e=>ph({name:e+\"-edge\",overrides:t=>t.model.manager.edgeActions[e].fold((()=>({})),(e=>({events:Hi([Ui(jo(),((t,n,r)=>e(t,r)),[t]),Ui(Vo(),((t,n,r)=>e(t,r)),[t]),Ui(qo(),((t,n,r)=>{r.mouseIsDown.get()&&e(t,r)}),[t])])})))}),dC=uC(\"top-left\"),hC=uC(\"top\"),mC=uC(\"top-right\"),fC=uC(\"right\"),pC=uC(\"bottom-right\"),gC=uC(\"bottom\"),vC=uC(\"bottom-left\"),yC=uC(\"left\"),bC=mh({name:\"thumb\",defaults:b({dom:{styles:{position:\"absolute\"}}}),overrides:e=>({events:Hi([qi(jo(),e,\"spectrum\"),qi(Wo(),e,\"spectrum\"),qi(zo(),e,\"spectrum\"),qi(Vo(),e,\"spectrum\"),qi(qo(),e,\"spectrum\"),qi(Ko(),e,\"spectrum\")])})}),_C=mh({schema:[Zr(\"mouseIsDown\",(()=>Mo(!1)))],name:\"spectrum\",overrides:e=>{const t=e.model.manager,n=(n,r)=>t.getValueFromEvent(r).map((r=>t.setValueFrom(n,e,r)));return{behaviours:$l([hp.config({mode:\"special\",onLeft:n=>t.onLeft(n,e),onRight:n=>t.onRight(n,e),onUp:n=>t.onUp(n,e),onDown:n=>t.onDown(n,e)}),Ap.config({})]),events:Hi([zi(jo(),n),zi(Wo(),n),zi(Vo(),n),zi(qo(),((t,r)=>{e.mouseIsDown.get()&&n(t,r)}))])}}});var wC=[cC,yC,fC,hC,gC,dC,mC,vC,pC,bC,_C];const xC=b(\"slider.change.value\"),CC=e=>{const t=e.event.raw;if((e=>-1!==e.type.indexOf(\"touch\"))(t)){const e=t;return void 0!==e.touches&&1===e.touches.length?L.some(e.touches[0]).map((e=>Ht(e.clientX,e.clientY))):L.none()}{const e=t;return void 0!==e.clientX?L.some(e).map((e=>Ht(e.clientX,e.clientY))):L.none()}},kC=e=>e.model.minX,DC=e=>e.model.minY,SC=e=>e.model.minX-1,AC=e=>e.model.minY-1,MC=e=>e.model.maxX,LC=e=>e.model.maxY,EC=e=>e.model.maxX+1,TC=e=>e.model.maxY+1,FC=(e,t,n)=>t(e)-n(e),OC=e=>FC(e,MC,kC),BC=e=>FC(e,LC,DC),RC=e=>OC(e)/2,$C=e=>BC(e)/2,NC=e=>e.stepSize,YC=e=>e.snapToGrid,PC=e=>e.snapStart,IC=e=>e.rounded,HC=(e,t)=>void 0!==e[t+\"-edge\"],jC=e=>HC(e,\"left\"),WC=e=>HC(e,\"right\"),zC=e=>HC(e,\"top\"),UC=e=>HC(e,\"bottom\"),VC=e=>e.model.value.get(),qC=(e,t)=>({x:e,y:t}),GC=(e,t)=>{$i(e,xC(),{value:t})},KC=(e,t,n,r)=>e<t?e:e>n?n:e===t?t-1:Math.max(t,e-r),XC=(e,t,n,r)=>e>n?e:e<t?t:e===n?n+1:Math.min(n,e+r),JC=(e,t,n)=>Math.max(t,Math.min(n,e)),QC=e=>{const{min:t,max:n,range:r,value:o,step:i,snap:s,snapStart:a,rounded:l,hasMinEdge:c,hasMaxEdge:u,minBound:d,maxBound:h,screenRange:m}=e,f=c?t-1:t,p=u?n+1:n;if(o<d)return f;if(o>h)return p;{const e=((e,t,n)=>Math.min(n,Math.max(e,t))-t)(o,d,h),c=JC(e/m*r+t,f,p);return s&&c>=t&&c<=n?((e,t,n,r,o)=>o.fold((()=>{const o=e-t,i=Math.round(o/r)*r;return JC(t+i,t-1,n+1)}),(t=>{const o=(e-t)%r,i=Math.round(o/r),s=Math.floor((e-t)/r),a=Math.floor((n-t)/r),l=t+Math.min(a,s+i)*r;return Math.max(t,l)})))(c,t,n,i,a):l?Math.round(c):c}},ZC=e=>{const{min:t,max:n,range:r,value:o,hasMinEdge:i,hasMaxEdge:s,maxBound:a,maxOffset:l,centerMinEdge:c,centerMaxEdge:u}=e;return o<t?i?0:c:o>n?s?a:u:(o-t)/r*l},ek=\"top\",tk=\"right\",nk=\"bottom\",rk=\"left\",ok=e=>e.element.dom.getBoundingClientRect(),ik=(e,t)=>e[t],sk=e=>{const t=ok(e);return ik(t,rk)},ak=e=>{const t=ok(e);return ik(t,tk)},lk=e=>{const t=ok(e);return ik(t,ek)},ck=e=>{const t=ok(e);return ik(t,nk)},uk=e=>{const t=ok(e);return ik(t,\"width\")},dk=e=>{const t=ok(e);return ik(t,\"height\")},hk=(e,t,n)=>(e+t)/2-n,mk=(e,t)=>{const n=ok(e),r=ok(t),o=ik(n,rk),i=ik(n,tk),s=ik(r,rk);return hk(o,i,s)},fk=(e,t)=>{const n=ok(e),r=ok(t),o=ik(n,ek),i=ik(n,nk),s=ik(r,ek);return hk(o,i,s)},pk=(e,t)=>{$i(e,xC(),{value:t})},gk=(e,t,n)=>{const r={min:kC(t),max:MC(t),range:OC(t),value:n,step:NC(t),snap:YC(t),snapStart:PC(t),rounded:IC(t),hasMinEdge:jC(t),hasMaxEdge:WC(t),minBound:sk(e),maxBound:ak(e),screenRange:uk(e)};return QC(r)},vk=e=>(t,n)=>((e,t,n)=>{const r=(e>0?XC:KC)(VC(n),kC(n),MC(n),NC(n));return pk(t,r),L.some(r)})(e,t,n).map(A),yk=(e,t,n,r,o,i)=>{const s=((e,t,n,r,o)=>{const i=uk(e),s=r.bind((t=>L.some(mk(t,e)))).getOr(0),a=o.bind((t=>L.some(mk(t,e)))).getOr(i),l={min:kC(t),max:MC(t),range:OC(t),value:n,hasMinEdge:jC(t),hasMaxEdge:WC(t),minBound:sk(e),minOffset:0,maxBound:ak(e),maxOffset:i,centerMinEdge:s,centerMaxEdge:a};return ZC(l)})(t,i,n,r,o);return sk(t)-sk(e)+s},bk=vk(-1),_k=vk(1),wk=L.none,xk=L.none,Ck={\"top-left\":L.none(),top:L.none(),\"top-right\":L.none(),right:L.some(((e,t)=>{GC(e,EC(t))})),\"bottom-right\":L.none(),bottom:L.none(),\"bottom-left\":L.none(),left:L.some(((e,t)=>{GC(e,SC(t))}))};var kk=Object.freeze({__proto__:null,setValueFrom:(e,t,n)=>{const r=gk(e,t,n);return pk(e,r),r},setToMin:(e,t)=>{const n=kC(t);pk(e,n)},setToMax:(e,t)=>{const n=MC(t);pk(e,n)},findValueOfOffset:gk,getValueFromEvent:e=>CC(e).map((e=>e.left)),findPositionOfValue:yk,setPositionFromValue:(e,t,n,r)=>{const o=VC(n),i=yk(e,r.getSpectrum(e),o,r.getLeftEdge(e),r.getRightEdge(e),n),s=Vt(t.element)/2;St(t.element,\"left\",i-s+\"px\")},onLeft:bk,onRight:_k,onUp:wk,onDown:xk,edgeActions:Ck});const Dk=(e,t)=>{$i(e,xC(),{value:t})},Sk=(e,t,n)=>{const r={min:DC(t),max:LC(t),range:BC(t),value:n,step:NC(t),snap:YC(t),snapStart:PC(t),rounded:IC(t),hasMinEdge:zC(t),hasMaxEdge:UC(t),minBound:lk(e),maxBound:ck(e),screenRange:dk(e)};return QC(r)},Ak=e=>(t,n)=>((e,t,n)=>{const r=(e>0?XC:KC)(VC(n),DC(n),LC(n),NC(n));return Dk(t,r),L.some(r)})(e,t,n).map(A),Mk=(e,t,n,r,o,i)=>{const s=((e,t,n,r,o)=>{const i=dk(e),s=r.bind((t=>L.some(fk(t,e)))).getOr(0),a=o.bind((t=>L.some(fk(t,e)))).getOr(i),l={min:DC(t),max:LC(t),range:BC(t),value:n,hasMinEdge:zC(t),hasMaxEdge:UC(t),minBound:lk(e),minOffset:0,maxBound:ck(e),maxOffset:i,centerMinEdge:s,centerMaxEdge:a};return ZC(l)})(t,i,n,r,o);return lk(t)-lk(e)+s},Lk=L.none,Ek=L.none,Tk=Ak(-1),Fk=Ak(1),Ok={\"top-left\":L.none(),top:L.some(((e,t)=>{GC(e,AC(t))})),\"top-right\":L.none(),right:L.none(),\"bottom-right\":L.none(),bottom:L.some(((e,t)=>{GC(e,TC(t))})),\"bottom-left\":L.none(),left:L.none()};var Bk=Object.freeze({__proto__:null,setValueFrom:(e,t,n)=>{const r=Sk(e,t,n);return Dk(e,r),r},setToMin:(e,t)=>{const n=DC(t);Dk(e,n)},setToMax:(e,t)=>{const n=LC(t);Dk(e,n)},findValueOfOffset:Sk,getValueFromEvent:e=>CC(e).map((e=>e.top)),findPositionOfValue:Mk,setPositionFromValue:(e,t,n,r)=>{const o=VC(n),i=Mk(e,r.getSpectrum(e),o,r.getTopEdge(e),r.getBottomEdge(e),n),s=Yt(t.element)/2;St(t.element,\"top\",i-s+\"px\")},onLeft:Lk,onRight:Ek,onUp:Tk,onDown:Fk,edgeActions:Ok});const Rk=(e,t)=>{$i(e,xC(),{value:t})},$k=(e,t)=>({x:e,y:t}),Nk=(e,t)=>(n,r)=>((e,t,n,r)=>{const o=e>0?XC:KC,i=t?VC(r).x:o(VC(r).x,kC(r),MC(r),NC(r)),s=t?o(VC(r).y,DC(r),LC(r),NC(r)):VC(r).y;return Rk(n,$k(i,s)),L.some(i)})(e,t,n,r).map(A),Yk=Nk(-1,!1),Pk=Nk(1,!1),Ik=Nk(-1,!0),Hk=Nk(1,!0),jk={\"top-left\":L.some(((e,t)=>{GC(e,qC(SC(t),AC(t)))})),top:L.some(((e,t)=>{GC(e,qC(RC(t),AC(t)))})),\"top-right\":L.some(((e,t)=>{GC(e,qC(EC(t),AC(t)))})),right:L.some(((e,t)=>{GC(e,qC(EC(t),$C(t)))})),\"bottom-right\":L.some(((e,t)=>{GC(e,qC(EC(t),TC(t)))})),bottom:L.some(((e,t)=>{GC(e,qC(RC(t),TC(t)))})),\"bottom-left\":L.some(((e,t)=>{GC(e,qC(SC(t),TC(t)))})),left:L.some(((e,t)=>{GC(e,qC(SC(t),$C(t)))}))};var Wk=Object.freeze({__proto__:null,setValueFrom:(e,t,n)=>{const r=gk(e,t,n.left),o=Sk(e,t,n.top),i=$k(r,o);return Rk(e,i),i},setToMin:(e,t)=>{const n=kC(t),r=DC(t);Rk(e,$k(n,r))},setToMax:(e,t)=>{const n=MC(t),r=LC(t);Rk(e,$k(n,r))},getValueFromEvent:e=>CC(e),setPositionFromValue:(e,t,n,r)=>{const o=VC(n),i=yk(e,r.getSpectrum(e),o.x,r.getLeftEdge(e),r.getRightEdge(e),n),s=Mk(e,r.getSpectrum(e),o.y,r.getTopEdge(e),r.getBottomEdge(e),n),a=Vt(t.element)/2,l=Yt(t.element)/2;St(t.element,\"left\",i-a+\"px\"),St(t.element,\"top\",s-l+\"px\")},onLeft:Yk,onRight:Pk,onUp:Ik,onDown:Hk,edgeActions:jk});const zk=jh({name:\"Slider\",configFields:[bo(\"stepSize\",1),bo(\"onChange\",v),bo(\"onChoose\",v),bo(\"onInit\",v),bo(\"onDragStart\",v),bo(\"onDragEnd\",v),bo(\"snapToGrid\",!1),bo(\"rounded\",!0),uo(\"snapStart\"),no(\"model\",Jr(\"mode\",{x:[bo(\"minX\",0),bo(\"maxX\",100),Zr(\"value\",(e=>Mo(e.mode.minX))),to(\"getInitialValue\"),qa(\"manager\",kk)],y:[bo(\"minY\",0),bo(\"maxY\",100),Zr(\"value\",(e=>Mo(e.mode.minY))),to(\"getInitialValue\"),qa(\"manager\",Bk)],xy:[bo(\"minX\",0),bo(\"maxX\",100),bo(\"minY\",0),bo(\"maxY\",100),Zr(\"value\",(e=>Mo({x:e.mode.minX,y:e.mode.minY}))),to(\"getInitialValue\"),qa(\"manager\",Wk)]})),Yd(\"sliderBehaviours\",[hp,Nd]),Zr(\"mouseIsDown\",(()=>Mo(!1)))],partFields:wC,factory:(e,t,n,r)=>{const o=t=>Mh(t,e,\"thumb\"),i=t=>Mh(t,e,\"spectrum\"),s=t=>Ah(t,e,\"left-edge\"),a=t=>Ah(t,e,\"right-edge\"),l=t=>Ah(t,e,\"top-edge\"),c=t=>Ah(t,e,\"bottom-edge\"),u=e.model,d=u.manager,h=(t,n)=>{d.setPositionFromValue(t,n,e,{getLeftEdge:s,getRightEdge:a,getTopEdge:l,getBottomEdge:c,getSpectrum:i})},m=(e,t)=>{u.value.set(t);const n=o(e);h(e,n)},f=t=>{const n=e.mouseIsDown.get();e.mouseIsDown.set(!1),n&&Ah(t,e,\"thumb\").each((n=>{const r=u.value.get();e.onChoose(t,n,r)}))},p=(t,n)=>{n.stop(),e.mouseIsDown.set(!0),e.onDragStart(t,o(t))},g=(t,n)=>{n.stop(),e.onDragEnd(t,o(t)),f(t)};return{uid:e.uid,dom:e.dom,components:t,behaviours:Id(e.sliderBehaviours,[hp.config({mode:\"special\",focusIn:t=>Ah(t,e,\"spectrum\").map(hp.focusIn).map(A)}),Nd.config({store:{mode:\"manual\",getValue:e=>u.value.get(),setValue:m}}),jl.config({channels:{[_d()]:{onReceive:f}}})]),events:Hi([zi(xC(),((t,n)=>{((t,n)=>{m(t,n);const r=o(t);e.onChange(t,r,n),L.some(!0)})(t,n.event.value)})),Qi(((t,n)=>{const r=u.getInitialValue();u.value.set(r);const s=o(t);h(t,s);const a=i(t);e.onInit(t,s,a,u.value.get())})),zi(jo(),p),zi(zo(),g),zi(Vo(),p),zi(Ko(),g)]),apis:{resetToMin:t=>{d.setToMin(t,e)},resetToMax:t=>{d.setToMax(t,e)},setValue:m,refresh:h},domModification:{styles:{position:\"relative\"}}}},apis:{setValue:(e,t,n)=>{e.setValue(t,n)},resetToMin:(e,t)=>{e.resetToMin(t)},resetToMax:(e,t)=>{e.resetToMax(t)},refresh:(e,t)=>{e.refresh(t)}}}),Uk=us(\"rgb-hex-update\"),Vk=us(\"slider-update\"),qk=us(\"palette-update\"),Gk=\"form\",Kk=[Yd(\"formBehaviours\",[Nd])],Xk=e=>\"<alloy.field.\"+e+\">\",Jk=(e,t)=>({uid:e.uid,dom:e.dom,components:t,behaviours:Id(e.formBehaviours,[Nd.config({store:{mode:\"manual\",getValue:t=>{const n=Eh(t,e);return ce(n,((e,t)=>e().bind((e=>{const n=Vh.getCurrent(e);return r=n,o=new Error(`Cannot find a current component to extract the value from for form part '${t}': `+ss(e.element)),r.fold((()=>Kn.error(o)),Kn.value);var r,o})).map(Nd.getValue)))},setValue:(t,n)=>{le(n,((n,r)=>{Ah(t,e,r).each((e=>{Vh.getCurrent(e).each((e=>{Nd.setValue(e,n)}))}))}))}}})]),apis:{getField:(t,n)=>Ah(t,e,n).bind(Vh.getCurrent)}}),Qk={getField:Ss(((e,t,n)=>e.getField(t,n))),sketch:e=>{const t=(()=>{const e=[];return{field:(t,n)=>(e.push(t),xh(Gk,Xk(t),n)),record:b(e)}})(),n=e(t),r=t.record(),o=P(r,(e=>mh({name:e,pname:Xk(e)})));return Nh(Gk,Kk,o,Jk,n)}},Zk=us(\"valid-input\"),eD=us(\"invalid-input\"),tD=us(\"validating-input\"),nD=\"colorcustom.rgb.\",rD=(e,t,n,r)=>{const o=(n,r)=>rC.config({invalidClass:t(\"invalid\"),notify:{onValidate:e=>{$i(e,tD,{type:n})},onValid:e=>{$i(e,Zk,{type:n,value:Nd.getValue(e)})},onInvalid:e=>{$i(e,eD,{type:n,value:Nd.getValue(e)})}},validator:{validate:t=>{const n=Nd.getValue(t),o=r(n)?Kn.value(!0):Kn.error(e(\"aria.input.invalid\"));return Pw(o)},validateOnLoad:!1}}),i=(n,r,i,s,a)=>{const l=e(\"colorcustom.rgb.range\"),c=Lx.parts.label({dom:{tag:\"label\",attributes:{\"aria-label\":s}},components:[da(i)]}),u=Lx.parts.field({data:a,factory:ay,inputAttributes:{type:\"text\",...\"hex\"===r?{\"aria-live\":\"polite\"}:{}},inputClasses:[t(\"textfield\")],inputBehaviours:$l([o(r,n),Fx.config({})]),onSetValue:e=>{if(rC.isInvalid(e)){rC.run(e).get(v)}}}),d=[c,u],h=\"hex\"!==r?[Lx.parts[\"aria-descriptor\"]({text:l})]:[];return{dom:{tag:\"div\",attributes:{role:\"presentation\"}},components:d.concat(h)}},s=(e,t)=>{const n=t.red,r=t.green,o=t.blue;Nd.setValue(e,{red:n,green:r,blue:o})},a=vg({dom:{tag:\"div\",classes:[t(\"rgba-preview\")],styles:{\"background-color\":\"white\"},attributes:{role:\"presentation\"}}}),l=(e,t)=>{a.getOpt(e).each((e=>{St(e.element,\"background-color\",\"#\"+t.value)}))},c=Hh({factory:()=>{const o={red:Mo(L.some(255)),green:Mo(L.some(255)),blue:Mo(L.some(255)),hex:Mo(L.some(\"ffffff\"))},c=e=>o[e].get(),u=(e,t)=>{o[e].set(t)},d=e=>{const t=e.red,n=e.green,r=e.blue;u(\"red\",L.some(t)),u(\"green\",L.some(n)),u(\"blue\",L.some(r))},h=(e,t)=>{const n=t.event;\"hex\"!==n.type?u(n.type,L.none()):r(e)},m=(e,t,n)=>{const r=parseInt(n,10);u(t,L.some(r)),c(\"red\").bind((e=>c(\"green\").bind((t=>c(\"blue\").map((n=>B_(e,t,n,1))))))).each((t=>{const n=((e,t)=>{const n=M_(t);return Qk.getField(e,\"hex\").each((t=>{Ap.isFocused(t)||Nd.setValue(e,{hex:n.value})})),n})(e,t);$i(e,Uk,{hex:n}),l(e,n)}))},f=(e,t)=>{const r=t.event;(e=>\"hex\"===e.type)(r)?((e,t)=>{n(e);const r=w_(t);u(\"hex\",L.some(t));const o=N_(r);s(e,o),d(o),$i(e,Uk,{hex:r}),l(e,r)})(e,r.value):m(e,r.type,r.value)},p=t=>({label:e(nD+t+\".label\"),description:e(nD+t+\".description\")}),g=p(\"red\"),v=p(\"green\"),y=p(\"blue\"),b=p(\"hex\");return mr(Qk.sketch((n=>({dom:{tag:\"form\",classes:[t(\"rgb-form\")],attributes:{\"aria-label\":e(\"aria.color.picker\")}},components:[n.field(\"red\",Lx.sketch(i(R_,\"red\",g.label,g.description,255))),n.field(\"green\",Lx.sketch(i(R_,\"green\",v.label,v.description,255))),n.field(\"blue\",Lx.sketch(i(R_,\"blue\",y.label,y.description,255))),n.field(\"hex\",Lx.sketch(i(k_,\"hex\",b.label,b.description,\"ffffff\"))),a.asSpec()],formBehaviours:$l([rC.config({invalidClass:t(\"form-invalid\")}),xp(\"rgb-form-events\",[zi(Zk,f),zi(eD,h),zi(tD,h)])])}))),{apis:{updateHex:(e,t)=>{Nd.setValue(e,{hex:t.value}),((e,t)=>{const n=N_(t);s(e,n),d(n)})(e,t),l(e,t)}}})},name:\"RgbForm\",configFields:[],apis:{updateHex:(e,t,n)=>{e.updateHex(t,n)}},extraApis:{}});return c},oD=(e,t)=>{const n=zk.parts.spectrum({dom:{tag:\"canvas\",attributes:{role:\"presentation\"},classes:[t(\"sv-palette-spectrum\")]}}),r=zk.parts.thumb({dom:{tag:\"div\",attributes:{role:\"presentation\"},classes:[t(\"sv-palette-thumb\")],innerHtml:`<div class=${t(\"sv-palette-inner-thumb\")} role=\"presentation\"></div>`}}),o=(e,t)=>{const{width:n,height:r}=e,o=e.getContext(\"2d\");if(null===o)return;o.fillStyle=t,o.fillRect(0,0,n,r);const i=o.createLinearGradient(0,0,n,0);i.addColorStop(0,\"rgba(255,255,255,1)\"),i.addColorStop(1,\"rgba(255,255,255,0)\"),o.fillStyle=i,o.fillRect(0,0,n,r);const s=o.createLinearGradient(0,0,0,r);s.addColorStop(0,\"rgba(0,0,0,0)\"),s.addColorStop(1,\"rgba(0,0,0,1)\"),o.fillStyle=s,o.fillRect(0,0,n,r)},i=Hh({factory:e=>{const i=b({x:0,y:0}),s=$l([Vh.config({find:L.some}),Ap.config({})]);return zk.sketch({dom:{tag:\"div\",attributes:{role:\"presentation\"},classes:[t(\"sv-palette\")]},model:{mode:\"xy\",getInitialValue:i},rounded:!1,components:[n,r],onChange:(e,t,n)=>{$i(e,qk,{value:n})},onInit:(e,t,n,r)=>{o(n.element.dom,I_(H_))},sliderBehaviours:s})},name:\"SaturationBrightnessPalette\",configFields:[],apis:{setHue:(e,t,n)=>{((e,t)=>{const n=e.components()[0].element.dom,r=z_(t,100,100),i=$_(r);o(n,I_(i))})(t,n)},setThumb:(e,t,n)=>{((e,t)=>{const n=U_(N_(t));zk.setValue(e,{x:n.saturation,y:100-n.value})})(t,n)}},extraApis:{}});return i},iD=(e,t)=>{const n=Hh({name:\"ColourPicker\",configFields:[to(\"dom\"),bo(\"onValidHex\",v),bo(\"onInvalidHex\",v)],factory:n=>{const r=rD(e,t,n.onValidHex,n.onInvalidHex),o=oD(0,t),i={paletteRgba:Mo(H_),paletteHue:Mo(0)},s=vg(((e,t)=>{const n=zk.parts.spectrum({dom:{tag:\"div\",classes:[t(\"hue-slider-spectrum\")],attributes:{role:\"presentation\"}}}),r=zk.parts.thumb({dom:{tag:\"div\",classes:[t(\"hue-slider-thumb\")],attributes:{role:\"presentation\"}}});return zk.sketch({dom:{tag:\"div\",classes:[t(\"hue-slider\")],attributes:{role:\"presentation\"}},rounded:!1,model:{mode:\"y\",getInitialValue:b(0)},components:[n,r],sliderBehaviours:$l([Ap.config({})]),onChange:(e,t,n)=>{$i(e,Vk,{value:n})}})})(0,t)),a=vg(o.sketch({})),l=vg(r.sketch({})),c=(e,t,n)=>{a.getOpt(e).each((e=>{o.setHue(e,n)}))},u=(e,t)=>{l.getOpt(e).each((e=>{r.updateHex(e,t)}))},d=(e,t,n)=>{s.getOpt(e).each((e=>{zk.setValue(e,(e=>100-e/360*100)(n))}))},h=(e,t)=>{a.getOpt(e).each((e=>{o.setThumb(e,t)}))},m=(e,t,n,r)=>{((e,t)=>{const n=N_(e);i.paletteRgba.set(n),i.paletteHue.set(t)})(t,n),I(r,(r=>{r(e,t,n)}))};return{uid:n.uid,dom:n.dom,components:[a.asSpec(),s.asSpec(),l.asSpec()],behaviours:$l([xp(\"colour-picker-events\",[zi(Uk,(()=>{const e=[c,d,h];return(t,n)=>{const r=n.event.hex,o=(e=>U_(N_(e)))(r);m(t,r,o.hue,e)}})()),zi(qk,(()=>{const e=[u];return(t,n)=>{const r=n.event.value,o=i.paletteHue.get(),s=z_(o,r.x,100-r.y),a=V_(s);m(t,a,o,e)}})()),zi(Vk,(()=>{const e=[c,u];return(t,n)=>{const r=(e=>(100-e)/100*360)(n.event.value),o=i.paletteRgba.get(),s=U_(o),a=z_(r,s.saturation,s.value),l=V_(a);m(t,l,r,e)}})())]),Vh.config({find:e=>l.getOpt(e)}),hp.config({mode:\"acyclic\"})])}}});return n},sD=()=>Vh.config({find:L.some}),aD=e=>Vh.config({find:e.getOpt}),lD=e=>Vh.config({find:t=>rt(t.element,e).bind((e=>t.getSystem().getByDom(e).toOptional()))}),cD=Er([bo(\"preprocess\",_),bo(\"postprocess\",_)]),uD=(e,t,n)=>Nd.config({store:{mode:\"manual\",...e.map((e=>({initialValue:e}))).getOr({}),getValue:t,setValue:n}}),dD=(e,t,n)=>uD(e,(e=>t(e.element)),((e,t)=>n(e.element,t))),hD=(e,t)=>{const n=Kr(\"RepresentingConfigs.memento processors\",cD,t);return Nd.config({store:{mode:\"manual\",getValue:t=>{const r=e.get(t),o=Nd.getValue(r);return n.postprocess(o)},setValue:(t,r)=>{const o=n.preprocess(r),i=e.get(t);Nd.setValue(i,o)}}})},mD=dD,fD=uD,pD=e=>dD(e,ns,rs),gD=e=>Nd.config({store:{mode:\"memory\",initialValue:e}}),vD={\"colorcustom.rgb.red.label\":\"R\",\"colorcustom.rgb.red.description\":\"Red component\",\"colorcustom.rgb.green.label\":\"G\",\"colorcustom.rgb.green.description\":\"Green component\",\"colorcustom.rgb.blue.label\":\"B\",\"colorcustom.rgb.blue.description\":\"Blue component\",\"colorcustom.rgb.hex.label\":\"#\",\"colorcustom.rgb.hex.description\":\"Hex color code\",\"colorcustom.rgb.range\":\"Range 0 to 255\",\"aria.color.picker\":\"Color Picker\",\"aria.input.invalid\":\"Invalid input\"},yD=(e,t,n)=>{const r=e=>\"tox-\"+e,o=iD((e=>t=>e.translate(vD[t]))(t),r),i=vg(o.sketch({dom:{tag:\"div\",classes:[r(\"color-picker-container\")],attributes:{role:\"presentation\"}},onValidHex:e=>{$i(e,Hx,{name:\"hex-valid\",value:!0})},onInvalidHex:e=>{$i(e,Hx,{name:\"hex-valid\",value:!1})}}));return{dom:{tag:\"div\"},components:[i.asSpec()],behaviours:$l([fD(n,(e=>{const t=i.get(e);return Vh.getCurrent(t).bind((e=>Nd.getValue(e).hex)).map((e=>\"#\"+e)).getOr(\"\")}),((e,t)=>{const n=L.from(/^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/.exec(t)).bind((e=>te(e,1))),r=i.get(e);Vh.getCurrent(r).fold((()=>{console.log(\"Can not find form\")}),(e=>{Nd.setValue(e,{hex:n.getOr(\"\")}),Qk.getField(e,\"hex\").each((e=>{Ri(e,ti())}))}))})),sD()])}};var bD=tinymce.util.Tools.resolve(\"tinymce.Resource\");var _D=tinymce.util.Tools.resolve(\"tinymce.util.Tools\");const wD=(e,t,n)=>{const r=(e,t)=>{t.stop()},o=e=>(t,n)=>{I(e,(e=>{e(t,n)}))},i=(e,t)=>{var n;if(!sm.isDisabled(e)){const r=t.event.raw;a(e,null===(n=r.dataTransfer)||void 0===n?void 0:n.files)}},s=(e,t)=>{const n=t.event.raw.target;a(e,n.files)},a=(n,r)=>{r&&(Nd.setValue(n,((e,t)=>{const n=_D.explode(t.getOption(\"images_file_types\"));return j(oe(e),(e=>$(n,(t=>Ae(e.name.toLowerCase(),`.${t.toLowerCase()}`)))))})(r,t)),$i(n,Yx,{name:e.name}))},l=vg({dom:{tag:\"input\",attributes:{type:\"file\",accept:\"image/*\"},styles:{display:\"none\"}},behaviours:$l([xp(\"input-file-events\",[Ki(ri()),Ki(gi())])])}),c=e.label.map((e=>Nx(e,t))),u=Lx.parts.field({factory:{sketch:e=>({uid:e.uid,dom:{tag:\"div\",classes:[\"tox-dropzone-container\"]},behaviours:$l([gD(n.getOr([])),sD(),sm.config({}),Rp.config({toggleClass:\"dragenter\",toggleOnExecute:!1}),xp(\"dropzone-events\",[zi(\"dragenter\",o([r,Rp.toggle])),zi(\"dragleave\",o([r,Rp.toggle])),zi(\"dragover\",r),zi(\"drop\",o([r,i])),zi(ni(),s)])]),components:[{dom:{tag:\"div\",classes:[\"tox-dropzone\"],styles:{}},components:[{dom:{tag:\"p\"},components:[da(t.translate(\"Drop an image here\"))]},gg.sketch({dom:{tag:\"button\",styles:{position:\"relative\"},classes:[\"tox-button\",\"tox-button--secondary\"]},components:[da(t.translate(\"Browse for an image\")),l.asSpec()],action:e=>{l.get(e).element.dom.click()},buttonBehaviours:$l([Fx.config({}),Xb(t.isDisabled),Gb()])})]}]})}});return Bx(c,u,[\"tox-form__group--stretched\"],[])},xD=us(\"alloy-fake-before-tabstop\"),CD=us(\"alloy-fake-after-tabstop\"),kD=e=>({dom:{tag:\"div\",styles:{width:\"1px\",height:\"1px\",outline:\"none\"},attributes:{tabindex:\"0\"},classes:e},behaviours:$l([Ap.config({ignore:!0}),Fx.config({})])}),DD=e=>({dom:{tag:\"div\",classes:[\"tox-navobj\"]},components:[kD([xD]),e,kD([CD])],behaviours:$l([lD(1)])}),SD=(e,t)=>{$i(e,Zo(),{raw:{which:9,shiftKey:t}})},AD=(e,t)=>{const n=t.element;Gs(n,xD)?SD(e,!0):Gs(n,CD)&&SD(e,!1)},MD=e=>hx(e,[\".\"+xD,\".\"+CD].join(\",\"),S),LD=(e,t,n)=>{const r=e.sandboxed,o=e.transparent,i=\"tox-dialog__iframe\",s={...e.label.map((e=>({title:e}))).getOr({}),...n.map((e=>({srcdoc:e}))).getOr({}),...r?{sandbox:\"allow-scripts allow-same-origin\"}:{}},a=(e=>{const t=Mo(e.getOr(\"\"));return{getValue:e=>t.get(),setValue:(e,n)=>{t.get()!==n&&yt(e.element,\"srcdoc\",n),t.set(n)}}})(n),l=e.label.map((e=>Nx(e,t))),c=Lx.parts.field({factory:{sketch:e=>DD({uid:e.uid,dom:{tag:\"iframe\",attributes:s,classes:o?[i]:[i,`${i}--opaque`]},behaviours:$l([Fx.config({}),Ap.config({}),fD(n,a.getValue,a.setValue)])})}});return Bx(l,c,[\"tox-form__group--stretched\"],[])},ED=(e,t)=>{const n=Mo(t.getOr({url:\"\"})),r=vg({dom:{tag:\"img\",classes:[\"tox-imagepreview__image\"],attributes:t.map((e=>({src:e.url}))).getOr({})}}),o=vg({dom:{tag:\"div\",classes:[\"tox-imagepreview__container\"],attributes:{role:\"presentation\"}},components:[r.asSpec()]}),i={};e.height.each((e=>i.height=e));const s=t.map((e=>({url:e.url,zoom:L.from(e.zoom),cachedWidth:L.from(e.cachedWidth),cachedHeight:L.from(e.cachedHeight)})));return{dom:{tag:\"div\",classes:[\"tox-imagepreview\"],styles:i,attributes:{role:\"presentation\"}},components:[o.asSpec()],behaviours:$l([sD(),fD(s,(()=>n.get()),((e,t)=>{const i={url:t.url};t.zoom.each((e=>i.zoom=e)),t.cachedWidth.each((e=>i.cachedWidth=e)),t.cachedHeight.each((e=>i.cachedHeight=e)),n.set(i);const s=()=>{const{cachedWidth:t,cachedHeight:n,zoom:r}=i;if(!d(t)&&!d(n)){if(d(r)){const r=((e,t,n)=>{const r=Vt(e),o=Yt(e);return Math.min(r/t,o/n,1)})(e.element,t,n);i.zoom=r}const s=((e,t,n,r,o)=>{const i=n*o,s=r*o,a=Math.max(0,e/2-i/2),l=Math.max(0,t/2-s/2);return{left:a.toString()+\"px\",top:l.toString()+\"px\",width:i.toString()+\"px\",height:s.toString()+\"px\"}})(Vt(e.element),Yt(e.element),t,n,i.zoom);o.getOpt(e).each((e=>{At(e.element,s)}))}};r.getOpt(e).each((n=>{const r=n.element;t.url!==_t(r,\"src\")&&(yt(r,\"src\",t.url),qs(e.element,\"tox-imagepreview__loaded\")),s(),(e=>new Promise(((t,n)=>{const r=()=>{i(),t(e)},o=[fc(e,\"load\",r),fc(e,\"error\",(()=>{i(),n(\"Unable to load data from image: \"+e.dom.src)}))],i=()=>I(o,(e=>e.unbind()));e.dom.complete&&r()})))(r).then((t=>{e.getSystem().isConnected()&&(Vs(e.element,\"tox-imagepreview__loaded\"),i.cachedWidth=t.dom.naturalWidth,i.cachedHeight=t.dom.naturalHeight,s())}))}))}))])}},TD=us(\"toolbar.button.execute\"),FD={[fi()]:[\"disabling\",\"alloy.base.behaviour\",\"toggling\",\"toolbar-button-events\"]},OD=(e,t,n)=>Ag(e,{tag:\"span\",classes:[\"tox-icon\",\"tox-tbtn__icon-wrap\"],behaviours:n},t),BD=(e,t)=>OD(e,t,[]),RD=(e,t)=>OD(e,t,[wp.config({})]),$D=(e,t,n)=>({dom:{tag:\"span\",classes:[`${t}__select-label`]},components:[da(n.translate(e))],behaviours:$l([wp.config({})])}),ND=us(\"update-menu-text\"),YD=us(\"update-menu-icon\"),PD=(e,t,n)=>{const r=Mo(v),o=e.text.map((e=>vg($D(e,t,n.providers)))),i=e.icon.map((e=>vg(RD(e,n.providers.icons)))),s=(e,t)=>{const n=Nd.getValue(e);return Ap.focus(n),$i(n,\"keydown\",{raw:t.event.raw}),ex.close(n),L.some(!0)},a=e.role.fold((()=>({})),(e=>({role:e}))),l=e.tooltip.fold((()=>({})),(e=>{const t=n.providers.translate(e);return{title:t,\"aria-label\":t}})),c=Ag(\"chevron-down\",{tag:\"div\",classes:[`${t}__select-chevron`]},n.providers.icons),u=vg(ex.sketch({...e.uid?{uid:e.uid}:{},...a,dom:{tag:\"button\",classes:[t,`${t}--select`].concat(P(e.classes,(e=>`${t}--${e}`))),attributes:{...l}},components:o_([i.map((e=>e.asSpec())),o.map((e=>e.asSpec())),L.some(c)]),matchWidth:!0,useMinWidth:!0,onOpen:(t,n,r)=>{e.searchable&&(e=>{hy(e).each((e=>Ap.focus(e)))})(r)},dropdownBehaviours:$l([...e.dropdownBehaviours,Xb((()=>e.disabled||n.providers.isDisabled())),Gb(),oC.config({}),wp.config({}),xp(\"dropdown-events\",[e_(e,r),t_(e,r)]),xp(\"menubutton-update-display-text\",[zi(ND,((e,t)=>{o.bind((t=>t.getOpt(e))).each((e=>{wp.set(e,[da(n.providers.translate(t.event.text))])}))})),zi(YD,((e,t)=>{i.bind((t=>t.getOpt(e))).each((e=>{wp.set(e,[RD(t.event.icon,n.providers.icons)])}))}))])]),eventOrder:mr(FD,{mousedown:[\"focusing\",\"alloy.base.behaviour\",\"item-type-events\",\"normal-dropdown-events\"]}),sandboxBehaviours:$l([hp.config({mode:\"special\",onLeft:s,onRight:s}),xp(\"dropdown-sandbox-events\",[zi(ly,((e,t)=>{tx(e),t.stop()})),zi(cy,((e,t)=>{((e,t)=>{nx(e).each((n=>{((e,t,n,r)=>{const o={...r,target:t};e.getSystem().triggerEvent(n,t,o)})(e,n.element,t.event.eventType,t.event.interactionEvent)}))})(e,t),t.stop()}))])]),lazySink:n.getSink,toggleClass:`${t}--active`,parts:{menu:{...ny(0,e.columns,e.presets),fakeFocus:e.searchable,onHighlightItem:rx,onCollapseMenu:(e,t,n)=>{vm.getHighlighted(n).each((t=>{rx(e,n,t)}))},onDehighlightItem:ox}},fetch:t=>Yw(x(e.fetch,t))}));return u.asSpec()},ID=e=>\"separator\"===e.type,HD={type:\"separator\"},jD=(e,t)=>{const n=z(e,((e,n)=>(e=>i(e))(n)?\"\"===n?e:\"|\"===n?e.length>0&&!ID(e[e.length-1])?e.concat([HD]):e:ye(t,n.toLowerCase())?e.concat([t[n.toLowerCase()]]):e:e.concat([n])),[]);return n.length>0&&ID(n[n.length-1])&&n.pop(),n},WD=(e,t)=>{const n=jD(i(e)?e.split(\" \"):e,t);return W(n,((e,n)=>{if((e=>ye(e,\"getSubmenuItems\"))(n)){const r=(e=>{const t=ve(e,\"value\").getOrThunk((()=>us(\"generated-menu-item\")));return mr({value:t},e)})(n),o=((e,t)=>{const n=e.getSubmenuItems(),r=WD(n,t);return{item:e,menus:mr(r.menus,{[e.value]:r.items}),expansions:mr(r.expansions,{[e.value]:e.value})}})(r,t);return{menus:mr(e.menus,o.menus),items:[o.item,...e.items],expansions:mr(e.expansions,o.expansions)}}return{...e,items:[n,...e.items]}}),{menus:{},expansions:{},items:[]})},zD=(e,t,n,r)=>{const o=us(\"primary-menu\"),i=WD(e,n.shared.providers.menuItems());if(0===i.items.length)return L.none();const s=(e=>e.search.fold((()=>({searchMode:\"no-search\"})),(e=>({searchMode:\"search-with-field\",placeholder:e.placeholder}))))(r),a=cx(o,i.items,t,n,r.isHorizontalMenu,s),l=(e=>e.search.fold((()=>({searchMode:\"no-search\"})),(e=>({searchMode:\"search-with-results\"}))))(r),c=ce(i.menus,((e,r)=>cx(r,e,t,n,!1,l))),u=mr(c,To(o,a));return L.from(mg.tieredData(o,u,i.expansions))},UD=e=>!ye(e,\"items\"),VD=\"data-value\",qD=(e,t,n,r)=>P(n,(n=>UD(n)?{type:\"togglemenuitem\",text:n.text,value:n.value,active:n.value===r,onAction:()=>{Nd.setValue(e,n.value),$i(e,Yx,{name:t}),Ap.focus(e)}}:{type:\"nestedmenuitem\",text:n.text,getSubmenuItems:()=>qD(e,t,n.items,r)})),GD=(e,t)=>ie(e,(e=>UD(e)?Ce(e.value===t,e):GD(e.items,t))),KD=Hh({name:\"HtmlSelect\",configFields:[to(\"options\"),Yd(\"selectBehaviours\",[Ap,Nd]),bo(\"selectClasses\",[]),bo(\"selectAttributes\",{}),uo(\"data\")],factory:(e,t)=>{const n=P(e.options,(e=>({dom:{tag:\"option\",value:e.value,innerHtml:e.text}}))),r=e.data.map((e=>To(\"initialValue\",e))).getOr({});return{uid:e.uid,dom:{tag:\"select\",classes:e.selectClasses,attributes:e.selectAttributes},components:n,behaviours:Id(e.selectBehaviours,[Ap.config({}),Nd.config({store:{mode:\"manual\",getValue:e=>Qs(e.element),setValue:(t,n)=>{U(e.options,(e=>e.value===n)).isSome()&&Zs(t.element,n)},...r}})])}}}),XD=b([bo(\"field1Name\",\"field1\"),bo(\"field2Name\",\"field2\"),Ua(\"onLockedChange\"),Ha([\"lockClass\"]),bo(\"locked\",!1),Hd(\"coupledFieldBehaviours\",[Vh,Nd])]),JD=(e,t)=>mh({factory:Lx,name:e,overrides:e=>({fieldBehaviours:$l([xp(\"coupled-input-behaviour\",[zi(ti(),(n=>{((e,t,n)=>Ah(e,t,n).bind(Vh.getCurrent))(n,e,t).each((t=>{Ah(n,e,\"lock\").each((r=>{Rp.isOn(r)&&e.onLockedChange(n,t,r)}))}))}))])])})}),QD=b([JD(\"field1\",\"field2\"),JD(\"field2\",\"field1\"),mh({factory:gg,schema:[to(\"dom\")],name:\"lock\",overrides:e=>({buttonBehaviours:$l([Rp.config({selected:e.locked,toggleClass:e.markers.lockClass,aria:{mode:\"pressed\"}})])})})]),ZD=jh({name:\"FormCoupledInputs\",configFields:XD(),partFields:QD(),factory:(e,t,n,r)=>({uid:e.uid,dom:e.dom,components:t,behaviours:jd(e.coupledFieldBehaviours,[Vh.config({find:L.some}),Nd.config({store:{mode:\"manual\",getValue:t=>{const n=Fh(t,e,[\"field1\",\"field2\"]);return{[e.field1Name]:Nd.getValue(n.field1()),[e.field2Name]:Nd.getValue(n.field2())}},setValue:(t,n)=>{const r=Fh(t,e,[\"field1\",\"field2\"]);be(n,e.field1Name)&&Nd.setValue(r.field1(),n[e.field1Name]),be(n,e.field2Name)&&Nd.setValue(r.field2(),n[e.field2Name])}}})]),apis:{getField1:t=>Ah(t,e,\"field1\"),getField2:t=>Ah(t,e,\"field2\"),getLock:t=>Ah(t,e,\"lock\")}}),apis:{getField1:(e,t)=>e.getField1(t),getField2:(e,t)=>e.getField2(t),getLock:(e,t)=>e.getLock(t)}}),eS=e=>{const t=/^\\s*(\\d+(?:\\.\\d+)?)\\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\\s*$/.exec(e);if(null!==t){const e=parseFloat(t[1]),n=t[2];return Kn.value({value:e,unit:n})}return Kn.error(e)},tS=(e,t)=>{const n={\"\":96,px:96,pt:72,cm:2.54,pc:12,mm:25.4,in:1},r=e=>ye(n,e);return e.unit===t?L.some(e.value):r(e.unit)&&r(t)?n[e.unit]===n[t]?L.some(e.value):L.some(e.value/n[e.unit]*n[t]):L.none()},nS=e=>L.none(),rS=(e,t)=>{const n=eS(e).toOptional(),r=eS(t).toOptional();return xe(n,r,((e,t)=>tS(e,t.unit).map((e=>t.value/e)).map((e=>{return n=e,r=t.unit,e=>tS(e,r).map((e=>({value:e*n,unit:r})));var n,r})).getOr(nS))).getOr(nS)},oS=(e,t)=>{const n=e.label.map((e=>Nx(e,t))),r=[sm.config({disabled:()=>e.disabled||t.isDisabled()}),Gb(),hp.config({mode:\"execution\",useEnter:!0!==e.multiline,useControlEnter:!0===e.multiline,execute:e=>(Ri(e,jx),L.some(!0))}),xp(\"textfield-change\",[zi(ti(),((t,n)=>{$i(t,Yx,{name:e.name})})),zi(hi(),((t,n)=>{$i(t,Yx,{name:e.name})}))]),Fx.config({})],o=e.validation.map((e=>rC.config({getRoot:e=>et(e.element),invalidClass:\"tox-invalid\",validator:{validate:t=>{const n=Nd.getValue(t),r=e.validator(n);return Pw(!0===r?Kn.value(n):Kn.error(r))},validateOnLoad:e.validateOnLoad}}))).toArray(),i={...e.placeholder.fold(b({}),(e=>({placeholder:t.translate(e)}))),...e.inputMode.fold(b({}),(e=>({inputmode:e})))},s=Lx.parts.field({tag:!0===e.multiline?\"textarea\":\"input\",...e.data.map((e=>({data:e}))).getOr({}),inputAttributes:i,inputClasses:[e.classname],inputBehaviours:$l(q([r,o])),selectOnFocus:!1,factory:ay}),a=(e.flex?[\"tox-form__group--stretched\"]:[]).concat(e.maximized?[\"tox-form-group--maximize\"]:[]),l=[sm.config({disabled:()=>e.disabled||t.isDisabled(),onDisabled:e=>{Lx.getField(e).each(sm.disable)},onEnabled:e=>{Lx.getField(e).each(sm.enable)}}),Gb()];return Bx(n,s,a,l)};var iS=Object.freeze({__proto__:null,events:(e,t)=>{const n=e.stream.streams.setup(e,t);return Hi([zi(e.event,n),Zi((()=>t.cancel()))].concat(e.cancelEvent.map((e=>[zi(e,(()=>t.cancel()))])).getOr([])))}});const sS=(e,t)=>{let n=null;const r=()=>{c(n)||(clearTimeout(n),n=null)};return{cancel:r,throttle:(...o)=>{r(),n=setTimeout((()=>{n=null,e.apply(null,o)}),t)}}},aS=e=>{const t=Mo(null);return Ms({readState:()=>({timer:null!==t.get()?\"set\":\"unset\"}),setTimer:e=>{t.set(e)},cancel:()=>{const e=t.get();null!==e&&e.cancel()}})};var lS=Object.freeze({__proto__:null,throttle:aS,init:e=>e.stream.streams.state(e)});var cS=[no(\"stream\",Jr(\"mode\",{throttle:[to(\"delay\"),bo(\"stopEvent\",!0),qa(\"streams\",{setup:(e,t)=>{const n=e.stream,r=sS(e.onStream,n.delay);return t.setTimer(r),(e,t)=>{r.throttle(e,t),n.stopEvent&&t.stop()}},state:aS})]})),bo(\"event\",\"input\"),uo(\"cancelEvent\"),Ua(\"onStream\")];const uS=Yl({fields:cS,name:\"streaming\",active:iS,state:lS}),dS=(e,t,n)=>{const r=Nd.getValue(n);Nd.setValue(t,r),mS(t)},hS=(e,t)=>{const n=e.element,r=Qs(n),o=n.dom;\"number\"!==_t(n,\"type\")&&t(o,r)},mS=e=>{hS(e,((e,t)=>e.setSelectionRange(t.length,t.length)))},fS=(e,t,n)=>{if(e.selectsOver){const r=Nd.getValue(t),o=e.getDisplayText(r),i=Nd.getValue(n);return 0===e.getDisplayText(i).indexOf(o)?L.some((()=>{dS(0,t,n),((e,t)=>{hS(e,((e,n)=>e.setSelectionRange(t,n.length)))})(t,o.length)})):L.none()}return L.none()},pS=b(\"alloy.typeahead.itemexecute\"),gS=b([uo(\"lazySink\"),to(\"fetch\"),bo(\"minChars\",5),bo(\"responseTime\",1e3),Wa(\"onOpen\"),bo(\"getHotspot\",L.some),bo(\"getAnchorOverrides\",b({})),bo(\"layouts\",L.none()),bo(\"eventOrder\",{}),Ao(\"model\",{},[bo(\"getDisplayText\",(e=>void 0!==e.meta&&void 0!==e.meta.text?e.meta.text:e.value)),bo(\"selectsOver\",!0),bo(\"populateFromBrowse\",!0)]),Wa(\"onSetValue\"),za(\"onExecute\"),Wa(\"onItemExecute\"),bo(\"inputClasses\",[]),bo(\"inputAttributes\",{}),bo(\"inputStyles\",{}),bo(\"matchWidth\",!0),bo(\"useMinWidth\",!1),bo(\"dismissOnBlur\",!0),Ha([\"openClass\"]),uo(\"initialData\"),Yd(\"typeaheadBehaviours\",[Ap,Nd,uS,hp,Rp,Ow]),Zr(\"lazyTypeaheadComp\",(()=>Mo(L.none))),Zr(\"previewing\",(()=>Mo(!0)))].concat(ry()).concat(Jw())),vS=b([fh({schema:[Ia()],name:\"menu\",overrides:e=>({fakeFocus:!0,onHighlightItem:(t,n,r)=>{e.previewing.get()?e.lazyTypeaheadComp.get().each((t=>{fS(e.model,t,r).fold((()=>{e.model.selectsOver?(vm.dehighlight(n,r),e.previewing.set(!0)):e.previewing.set(!1)}),(t=>{t(),e.previewing.set(!1)}))})):e.lazyTypeaheadComp.get().each((t=>{e.model.populateFromBrowse&&dS(e.model,t,r)}))},onExecute:(t,n)=>e.lazyTypeaheadComp.get().map((e=>($i(e,pS(),{item:n}),!0))),onHover:(t,n)=>{e.previewing.set(!1),e.lazyTypeaheadComp.get().each((t=>{e.model.populateFromBrowse&&dS(e.model,t,n)}))}})})]),yS=jh({name:\"Typeahead\",configFields:gS(),partFields:vS(),factory:(e,t,n,r)=>{const o=(t,n,o)=>{e.previewing.set(!1);const i=Ow.getCoupled(t,\"sandbox\");if(vd.isOpen(i))Vh.getCurrent(i).each((e=>{vm.getHighlighted(e).fold((()=>{o(e)}),(()=>{Ii(i,e.element,\"keydown\",n)}))}));else{const n=e=>{Vh.getCurrent(e).each(o)};Ww(e,s(t),t,i,r,n,dg.HighlightMenuAndItem).get(v)}},i=oy(e),s=e=>t=>t.map((t=>{const n=ge(t.menus),r=G(n,(e=>j(e.items,(e=>\"item\"===e.type))));return Nd.getState(e).update(P(r,(e=>e.data))),t})),a=e=>Vh.getCurrent(e),l=\"typeaheadevents\",c=[Ap.config({}),Nd.config({onSetValue:e.onSetValue,store:{mode:\"dataset\",getDataKey:e=>Qs(e.element),getFallbackEntry:e=>({value:e,meta:{}}),setValue:(t,n)=>{Zs(t.element,e.model.getDisplayText(n))},...e.initialData.map((e=>To(\"initialValue\",e))).getOr({})}}),uS.config({stream:{mode:\"throttle\",delay:e.responseTime,stopEvent:!1},onStream:(t,n)=>{const o=Ow.getCoupled(t,\"sandbox\");if(Ap.isFocused(t)&&Qs(t.element).length>=e.minChars){const n=a(o).bind((e=>vm.getHighlighted(e).map(Nd.getValue)));e.previewing.set(!0);const i=t=>{a(o).each((t=>{n.fold((()=>{e.model.selectsOver&&vm.highlightFirst(t)}),(e=>{vm.highlightBy(t,(t=>Nd.getValue(t).value===e.value)),vm.getHighlighted(t).orThunk((()=>(vm.highlightFirst(t),L.none())))}))}))};Ww(e,s(t),t,o,r,i,dg.HighlightJustMenu).get(v)}},cancelEvent:bi()}),hp.config({mode:\"special\",onDown:(e,t)=>(o(e,t,vm.highlightFirst),L.some(!0)),onEscape:e=>{const t=Ow.getCoupled(e,\"sandbox\");return vd.isOpen(t)?(vd.close(t),L.some(!0)):L.none()},onUp:(e,t)=>(o(e,t,vm.highlightLast),L.some(!0)),onEnter:t=>{const n=Ow.getCoupled(t,\"sandbox\"),r=vd.isOpen(n);if(r&&!e.previewing.get())return a(n).bind((e=>vm.getHighlighted(e))).map((e=>($i(t,pS(),{item:e}),!0)));{const o=Nd.getValue(t);return Ri(t,bi()),e.onExecute(n,t,o),r&&vd.close(n),L.some(!0)}}}),Rp.config({toggleClass:e.markers.openClass,aria:{mode:\"expanded\"}}),Ow.config({others:{sandbox:t=>Kw(e,t,{onOpen:()=>Rp.on(t),onClose:()=>Rp.off(t)})}}),xp(l,[Qi((t=>{e.lazyTypeaheadComp.set(L.some(t))})),Zi((t=>{e.lazyTypeaheadComp.set(L.none())})),ts((t=>{const n=v;Uw(e,s(t),t,r,n,dg.HighlightMenuAndItem).get(v)})),zi(pS(),((t,n)=>{const r=Ow.getCoupled(t,\"sandbox\");dS(e.model,t,n.event.item),Ri(t,bi()),e.onItemExecute(t,r,n.event.item,Nd.getValue(t)),vd.close(r),mS(t)}))].concat(e.dismissOnBlur?[zi(di(),(e=>{const t=Ow.getCoupled(e,\"sandbox\");ql(t.element).isNone()&&vd.close(t)}))]:[]))],u={[Si()]:[Nd.name(),uS.name(),l],...e.eventOrder};return{uid:e.uid,dom:sy(mr(e,{inputAttributes:{role:\"combobox\",\"aria-autocomplete\":\"list\",\"aria-haspopup\":\"true\"}})),behaviours:{...i,...Id(e.typeaheadBehaviours,c)},eventOrder:u}}}),bS=e=>({...e,toCached:()=>bS(e.toCached()),bindFuture:t=>bS(e.bind((e=>e.fold((e=>Pw(Kn.error(e))),(e=>t(e)))))),bindResult:t=>bS(e.map((e=>e.bind(t)))),mapResult:t=>bS(e.map((e=>e.map(t)))),mapError:t=>bS(e.map((e=>e.mapError(t)))),foldResult:(t,n)=>e.map((e=>e.fold(t,n))),withTimeout:(t,n)=>bS(Yw((r=>{let o=!1;const i=setTimeout((()=>{o=!0,r(Kn.error(n()))}),t);e.get((e=>{o||(clearTimeout(i),r(e))}))})))}),_S=e=>bS(Yw(e)),wS=_S,xS=e=>({isEnabled:()=>!sm.isDisabled(e),setEnabled:t=>sm.set(e,!t),setActive:t=>{const n=e.element;t?(Vs(n,\"tox-tbtn--enabled\"),yt(n,\"aria-pressed\",!0)):(qs(n,\"tox-tbtn--enabled\"),Ct(n,\"aria-pressed\"))},isActive:()=>Gs(e.element,\"tox-tbtn--enabled\")}),CS=(e,t,n,r)=>PD({text:e.text,icon:e.icon,tooltip:e.tooltip,searchable:e.search.isSome(),role:r,fetch:(t,r)=>{const o={pattern:e.search.isSome()?ix(t):\"\"};e.fetch((t=>{r(zD(t,Yv.CLOSE_ON_EXECUTE,n,{isHorizontalMenu:!1,search:e.search}))}),o)},onSetup:e.onSetup,getApi:xS,columns:1,presets:\"normal\",classes:[],dropdownBehaviours:[Fx.config({})]},t,n.shared),kS=(e,t,n)=>{const r=e=>r=>{const o=!r.isActive();r.setActive(o),e.storage.set(o),n.shared.getSink().each((n=>{t().getOpt(n).each((t=>{zl(t.element),$i(t,Hx,{name:e.name,value:e.storage.get()})}))}))},o=e=>t=>{t.setActive(e.storage.get())};return t=>{t(P(e,(e=>{const t=e.text.fold((()=>({})),(e=>({text:e})));return{type:e.type,active:!1,...t,onAction:r(e),onSetup:o(e)}})))}},DS=(e,t,n=[],r,o,i)=>{const s=t.fold((()=>({})),(e=>({action:e}))),a={buttonBehaviours:$l([Xb((()=>!e.enabled||i.isDisabled())),Gb(),Fx.config({}),xp(\"button press\",[Wi(\"click\"),Wi(\"mousedown\")])].concat(n)),eventOrder:{click:[\"button press\",\"alloy.base.behaviour\"],mousedown:[\"button press\",\"alloy.base.behaviour\"]},...s},l=mr(a,{dom:r});return mr(l,{components:o})},SS=(e,t,n,r=[])=>{const o={tag:\"button\",classes:[\"tox-tbtn\"],attributes:e.tooltip.map((e=>({\"aria-label\":n.translate(e),title:n.translate(e)}))).getOr({})},i=e.icon.map((e=>BD(e,n.icons))),s=o_([i]);return DS(e,t,r,o,s,n)},AS=(e,t,n,r=[],o=[])=>{const i=n.translate(e.text),s=e.icon.map((e=>BD(e,n.icons))),a=[s.getOrThunk((()=>da(i)))],l=(e=>{switch(e){case\"primary\":return[\"tox-button\"];case\"toolbar\":return[\"tox-tbtn\"];default:return[\"tox-button\",\"tox-button--secondary\"]}})(e.buttonType.getOr(e.primary||e.borderless?\"primary\":\"secondary\")),c=[...l,...s.isSome()?[\"tox-button--icon\"]:[],...e.borderless?[\"tox-button--naked\"]:[],...o];return DS(e,t,r,{tag:\"button\",classes:c,attributes:{title:i}},a,n)},MS=(e,t,n,r=[],o=[])=>{const i=AS(e,L.some(t),n,r,o);return gg.sketch(i)},LS=(e,t)=>n=>{\"custom\"===t?$i(n,Hx,{name:e,value:{}}):\"submit\"===t?Ri(n,jx):\"cancel\"===t?Ri(n,Ix):console.error(\"Unknown button type: \",t)},ES=(e,t,n)=>{if(((e,t)=>\"menu\"===t)(0,t)){const t=()=>i,r=e,o={...e,type:\"menubutton\",search:L.none(),onSetup:t=>(t.setEnabled(e.enabled),v),fetch:kS(r.items,t,n)},i=vg(CS(o,\"tox-tbtn\",n,L.none()));return i.asSpec()}if(((e,t)=>\"custom\"===t||\"cancel\"===t||\"submit\"===t)(0,t)){const r=LS(e.name,t),o={...e,borderless:!1};return MS(o,r,n.shared.providers,[])}throw console.error(\"Unknown footer button type: \",t),new Error(\"Unknown footer button type\")},TS=(e,t)=>{const n=LS(e.name,\"custom\");return r=L.none(),o=Lx.parts.field({factory:gg,...AS(e,L.some(n),t,[gD(\"\"),sD()])}),Bx(r,o,[],[]);var r,o},FS={type:\"separator\"},OS=e=>({type:\"menuitem\",value:e.url,text:e.title,meta:{attach:e.attach},onAction:v}),BS=(e,t)=>({type:\"menuitem\",value:t,text:e,meta:{attach:void 0},onAction:v}),RS=(e,t)=>(e=>P(e,OS))(((e,t)=>j(t,(t=>t.type===e)))(e,t)),$S=e=>RS(\"header\",e.targets),NS=e=>RS(\"anchor\",e.targets),YS=e=>L.from(e.anchorTop).map((e=>BS(\"<top>\",e))).toArray(),PS=e=>L.from(e.anchorBottom).map((e=>BS(\"<bottom>\",e))).toArray(),IS=(e,t)=>{const n=e.toLowerCase();return j(t,(e=>{var t;const r=void 0!==e.meta&&void 0!==e.meta.text?e.meta.text:e.text,o=null!==(t=e.value)&&void 0!==t?t:\"\";return De(r.toLowerCase(),n)||De(o.toLowerCase(),n)}))},HS=(e,t,n)=>{const r=Nd.getValue(t),o=void 0!==r.meta.text?r.meta.text:r.value;return n.getLinkInformation().fold((()=>[]),(t=>{const r=IS(o,(e=>P(e,(e=>BS(e,e))))(n.getHistory(e)));return\"file\"===e?(i=[r,IS(o,$S(t)),IS(o,q([YS(t),NS(t),PS(t)]))],z(i,((e,t)=>0===e.length||0===t.length?e.concat(t):e.concat(FS,t)),[])):r;var i}))},jS=us(\"aria-invalid\"),WS=(e,t)=>{e.dom.checked=t},zS=e=>e.dom.checked,US=e=>(t,n,r,o)=>ve(n,\"name\").fold((()=>e(n,o,L.none())),(i=>t.field(i,e(n,o,ve(r,i))))),VS={bar:US(((e,t)=>((e,t)=>({dom:{tag:\"div\",classes:[\"tox-bar\",\"tox-form__controls-h-stack\"]},components:P(e.items,t.interpreter)}))(e,t.shared))),collection:US(((e,t,n)=>qx(e,t.shared.providers,n))),alertbanner:US(((e,t)=>((e,t)=>Dx.sketch({dom:{tag:\"div\",attributes:{role:\"alert\"},classes:[\"tox-notification\",\"tox-notification--in\",`tox-notification--${e.level}`]},components:[{dom:{tag:\"div\",classes:[\"tox-notification__icon\"]},components:[gg.sketch({dom:{tag:\"button\",classes:[\"tox-button\",\"tox-button--naked\",\"tox-button--icon\"],innerHtml:kg(e.icon,t.icons),attributes:{title:t.translate(e.iconTooltip)}},action:t=>{$i(t,Hx,{name:\"alert-banner\",value:e.url})},buttonBehaviours:$l([Dg()])})]},{dom:{tag:\"div\",classes:[\"tox-notification__body\"],innerHtml:t.translate(e.text)}}]}))(e,t.shared.providers))),input:US(((e,t,n)=>((e,t,n)=>oS({name:e.name,multiline:!1,label:e.label,inputMode:e.inputMode,placeholder:e.placeholder,flex:!1,disabled:!e.enabled,classname:\"tox-textfield\",validation:L.none(),maximized:e.maximized,data:n},t))(e,t.shared.providers,n))),textarea:US(((e,t,n)=>((e,t,n)=>oS({name:e.name,multiline:!0,label:e.label,inputMode:L.none(),placeholder:e.placeholder,flex:!0,disabled:!e.enabled,classname:\"tox-textarea\",validation:L.none(),maximized:e.maximized,data:n},t))(e,t.shared.providers,n))),label:US(((e,t)=>((e,t)=>({dom:{tag:\"div\",classes:[\"tox-form__group\"]},components:[{dom:{tag:\"label\",classes:[\"tox-label\"]},components:[da(t.providers.translate(e.label))]},...P(e.items,t.interpreter)],behaviours:$l([sD(),wp.config({}),pD(L.none()),hp.config({mode:\"acyclic\"})])}))(e,t.shared))),iframe:(e=>(t,n,r,o)=>{const i=mr(n,{source:\"dynamic\"});return US(e)(t,i,r,o)})(((e,t,n)=>LD(e,t.shared.providers,n))),button:US(((e,t)=>TS(e,t.shared.providers))),checkbox:US(((e,t,n)=>((e,t,n)=>{const r=e=>(e.element.dom.click(),L.some(!0)),o=Lx.parts.field({factory:{sketch:_},dom:{tag:\"input\",classes:[\"tox-checkbox__input\"],attributes:{type:\"checkbox\"}},behaviours:$l([sD(),sm.config({disabled:()=>!e.enabled||t.isDisabled()}),Fx.config({}),Ap.config({}),mD(n,zS,WS),hp.config({mode:\"special\",onEnter:r,onSpace:r,stopSpaceKeyup:!0}),xp(\"checkbox-events\",[zi(ni(),((t,n)=>{$i(t,Yx,{name:e.name})}))])])}),i=Lx.parts.label({dom:{tag:\"span\",classes:[\"tox-checkbox__label\"]},components:[da(t.translate(e.label))],behaviours:$l([oC.config({})])}),s=e=>Ag(\"checked\"===e?\"selected\":\"unselected\",{tag:\"span\",classes:[\"tox-icon\",\"tox-checkbox-icon__\"+e]},t.icons),a=vg({dom:{tag:\"div\",classes:[\"tox-checkbox__icons\"]},components:[s(\"checked\"),s(\"unchecked\")]});return Lx.sketch({dom:{tag:\"label\",classes:[\"tox-checkbox\"]},components:[o,a.asSpec(),i],fieldBehaviours:$l([sm.config({disabled:()=>!e.enabled||t.isDisabled(),disableClass:\"tox-checkbox--disabled\",onDisabled:e=>{Lx.getField(e).each(sm.disable)},onEnabled:e=>{Lx.getField(e).each(sm.enable)}}),Gb()])})})(e,t.shared.providers,n))),colorinput:US(((e,t,n)=>lC(e,t.shared,t.colorinput,n))),colorpicker:US(((e,t,n)=>yD(0,t.shared.providers,n))),dropzone:US(((e,t,n)=>wD(e,t.shared.providers,n))),grid:US(((e,t)=>((e,t)=>({dom:{tag:\"div\",classes:[\"tox-form__grid\",`tox-form__grid--${e.columns}col`]},components:P(e.items,t.interpreter)}))(e,t.shared))),listbox:US(((e,t,n)=>((e,t,n)=>{const r=t.shared.providers,o=n.bind((t=>GD(e.items,t))).orThunk((()=>ne(e.items).filter(UD))),i=e.label.map((e=>Nx(e,r))),s=Lx.parts.field({dom:{},factory:{sketch:n=>PD({uid:n.uid,text:o.map((e=>e.text)),icon:L.none(),tooltip:e.label,role:L.none(),fetch:(n,r)=>{const o=qD(n,e.name,e.items,Nd.getValue(n));r(zD(o,Yv.CLOSE_ON_EXECUTE,t,{isHorizontalMenu:!1,search:L.none()}))},onSetup:b(v),getApi:b({}),columns:1,presets:\"normal\",classes:[],dropdownBehaviours:[Fx.config({}),fD(o.map((e=>e.value)),(e=>_t(e.element,VD)),((t,n)=>{GD(e.items,n).each((e=>{yt(t.element,VD,e.value),$i(t,ND,{text:e.text})}))}))]},\"tox-listbox\",t.shared)}}),a={dom:{tag:\"div\",classes:[\"tox-listboxfield\"]},components:[s]};return Lx.sketch({dom:{tag:\"div\",classes:[\"tox-form__group\"]},components:q([i.toArray(),[a]]),fieldBehaviours:$l([sm.config({disabled:b(!e.enabled),onDisabled:e=>{Lx.getField(e).each(sm.disable)},onEnabled:e=>{Lx.getField(e).each(sm.enable)}})])})})(e,t,n))),selectbox:US(((e,t,n)=>((e,t,n)=>{const r=P(e.items,(e=>({text:t.translate(e.text),value:e.value}))),o=e.label.map((e=>Nx(e,t))),i=Lx.parts.field({dom:{},...n.map((e=>({data:e}))).getOr({}),selectAttributes:{size:e.size},options:r,factory:KD,selectBehaviours:$l([sm.config({disabled:()=>!e.enabled||t.isDisabled()}),Fx.config({}),xp(\"selectbox-change\",[zi(ni(),((t,n)=>{$i(t,Yx,{name:e.name})}))])])}),s=e.size>1?L.none():L.some(Ag(\"chevron-down\",{tag:\"div\",classes:[\"tox-selectfield__icon-js\"]},t.icons)),a={dom:{tag:\"div\",classes:[\"tox-selectfield\"]},components:q([[i],s.toArray()])};return Lx.sketch({dom:{tag:\"div\",classes:[\"tox-form__group\"]},components:q([o.toArray(),[a]]),fieldBehaviours:$l([sm.config({disabled:()=>!e.enabled||t.isDisabled(),onDisabled:e=>{Lx.getField(e).each(sm.disable)},onEnabled:e=>{Lx.getField(e).each(sm.enable)}}),Gb()])})})(e,t.shared.providers,n))),sizeinput:US(((e,t)=>((e,t)=>{let n=nS;const r=us(\"ratio-event\"),o=e=>Ag(e,{tag:\"span\",classes:[\"tox-icon\",\"tox-lock-icon__\"+e]},t.icons),i=ZD.parts.lock({dom:{tag:\"button\",classes:[\"tox-lock\",\"tox-button\",\"tox-button--naked\",\"tox-button--icon\"],attributes:{title:t.translate(e.label.getOr(\"Constrain proportions\"))}},components:[o(\"lock\"),o(\"unlock\")],buttonBehaviours:$l([sm.config({disabled:()=>!e.enabled||t.isDisabled()}),Gb(),Fx.config({})])}),s=e=>({dom:{tag:\"div\",classes:[\"tox-form__group\"]},components:e}),a=n=>Lx.parts.field({factory:ay,inputClasses:[\"tox-textfield\"],inputBehaviours:$l([sm.config({disabled:()=>!e.enabled||t.isDisabled()}),Gb(),Fx.config({}),xp(\"size-input-events\",[zi(Jo(),((e,t)=>{$i(e,r,{isField1:n})})),zi(ni(),((t,n)=>{$i(t,Yx,{name:e.name})}))])]),selectOnFocus:!1}),l=e=>({dom:{tag:\"label\",classes:[\"tox-label\"]},components:[da(t.translate(e))]}),c=ZD.parts.field1(s([Lx.parts.label(l(\"Width\")),a(!0)])),u=ZD.parts.field2(s([Lx.parts.label(l(\"Height\")),a(!1)]));return ZD.sketch({dom:{tag:\"div\",classes:[\"tox-form__group\"]},components:[{dom:{tag:\"div\",classes:[\"tox-form__controls-h-stack\"]},components:[c,u,s([l(\" \"),i])]}],field1Name:\"width\",field2Name:\"height\",locked:!0,markers:{lockClass:\"tox-locked\"},onLockedChange:(e,t,r)=>{eS(Nd.getValue(e)).each((e=>{n(e).each((e=>{Nd.setValue(t,(e=>{const t={\"\":0,px:0,pt:1,mm:1,pc:2,ex:2,em:2,ch:2,rem:2,cm:3,in:4,\"%\":4};let n=e.value.toFixed((r=e.unit)in t?t[r]:1);var r;return-1!==n.indexOf(\".\")&&(n=n.replace(/\\.?0*$/,\"\")),n+e.unit})(e))}))}))},coupledFieldBehaviours:$l([sm.config({disabled:()=>!e.enabled||t.isDisabled(),onDisabled:e=>{ZD.getField1(e).bind(Lx.getField).each(sm.disable),ZD.getField2(e).bind(Lx.getField).each(sm.disable),ZD.getLock(e).each(sm.disable)},onEnabled:e=>{ZD.getField1(e).bind(Lx.getField).each(sm.enable),ZD.getField2(e).bind(Lx.getField).each(sm.enable),ZD.getLock(e).each(sm.enable)}}),Gb(),xp(\"size-input-events2\",[zi(r,((e,t)=>{const r=t.event.isField1,o=r?ZD.getField1(e):ZD.getField2(e),i=r?ZD.getField2(e):ZD.getField1(e),s=o.map(Nd.getValue).getOr(\"\"),a=i.map(Nd.getValue).getOr(\"\");n=rS(s,a)}))])])})})(e,t.shared.providers))),slider:US(((e,t,n)=>((e,t,n)=>{const r=zk.parts.label({dom:{tag:\"label\",classes:[\"tox-label\"]},components:[da(t.translate(e.label))]}),o=zk.parts.spectrum({dom:{tag:\"div\",classes:[\"tox-slider__rail\"],attributes:{role:\"presentation\"}}}),i=zk.parts.thumb({dom:{tag:\"div\",classes:[\"tox-slider__handle\"],attributes:{role:\"presentation\"}}});return zk.sketch({dom:{tag:\"div\",classes:[\"tox-slider\"],attributes:{role:\"presentation\"}},model:{mode:\"x\",minX:e.min,maxX:e.max,getInitialValue:b(n.getOrThunk((()=>(Math.abs(e.max)-Math.abs(e.min))/2)))},components:[r,o,i],sliderBehaviours:$l([sD(),Ap.config({})]),onChoose:(t,n,r)=>{$i(t,Yx,{name:e.name,value:r})}})})(e,t.shared.providers,n))),urlinput:US(((e,t,n)=>((e,t,n,r)=>{const o=t.shared.providers,i=t=>{const r=Nd.getValue(t);n.addToHistory(r.value,e.filetype)},s={...r.map((e=>({initialData:e}))).getOr({}),dismissOnBlur:!0,inputClasses:[\"tox-textfield\"],sandboxClasses:[\"tox-dialog__popups\"],inputAttributes:{\"aria-errormessage\":jS,type:\"url\"},minChars:0,responseTime:0,fetch:r=>{const o=HS(e.filetype,r,n),i=zD(o,Yv.BUBBLE_TO_SANDBOX,t,{isHorizontalMenu:!1,search:L.none()});return Pw(i)},getHotspot:e=>m.getOpt(e),onSetValue:(e,t)=>{e.hasConfigured(rC)&&rC.run(e).get(v)},typeaheadBehaviours:$l([...n.getValidationHandler().map((t=>rC.config({getRoot:e=>et(e.element),invalidClass:\"tox-control-wrap--status-invalid\",notify:{onInvalid:(e,t)=>{c.getOpt(e).each((e=>{yt(e.element,\"title\",o.translate(t))}))}},validator:{validate:n=>{const r=Nd.getValue(n);return wS((n=>{t({type:e.filetype,url:r.value},(e=>{if(\"invalid\"===e.status){const t=Kn.error(e.message);n(t)}else{const t=Kn.value(e.message);n(t)}}))}))},validateOnLoad:!1}}))).toArray(),sm.config({disabled:()=>!e.enabled||o.isDisabled()}),Fx.config({}),xp(\"urlinput-events\",[zi(ti(),(t=>{const n=Qs(t.element),r=n.trim();r!==n&&Zs(t.element,r),\"file\"===e.filetype&&$i(t,Yx,{name:e.name})})),zi(ni(),(t=>{$i(t,Yx,{name:e.name}),i(t)})),zi(hi(),(t=>{$i(t,Yx,{name:e.name}),i(t)}))])]),eventOrder:{[ti()]:[\"streaming\",\"urlinput-events\",\"invalidating\"]},model:{getDisplayText:e=>e.value,selectsOver:!1,populateFromBrowse:!1},markers:{openClass:\"tox-textfield--popup-open\"},lazySink:t.shared.getSink,parts:{menu:ny(0,0,\"normal\")},onExecute:(e,t,n)=>{$i(t,jx,{})},onItemExecute:(t,n,r,o)=>{i(t),$i(t,Yx,{name:e.name})}},a=Lx.parts.field({...s,factory:yS}),l=e.label.map((e=>Nx(e,o))),c=vg(((e,t,n=e,r=e)=>Ag(n,{tag:\"div\",classes:[\"tox-icon\",\"tox-control-wrap__status-icon-\"+e],attributes:{title:o.translate(r),\"aria-live\":\"polite\",...t.fold((()=>({})),(e=>({id:e})))}},o.icons))(\"invalid\",L.some(jS),\"warning\")),u=vg({dom:{tag:\"div\",classes:[\"tox-control-wrap__status-icon-wrap\"]},components:[c.asSpec()]}),d=n.getUrlPicker(e.filetype),h=us(\"browser.url.event\"),m=vg({dom:{tag:\"div\",classes:[\"tox-control-wrap\"]},components:[a,u.asSpec()],behaviours:$l([sm.config({disabled:()=>!e.enabled||o.isDisabled()})])}),f=vg(MS({name:e.name,icon:L.some(\"browse\"),text:e.label.getOr(\"\"),enabled:e.enabled,primary:!1,buttonType:L.none(),borderless:!0},(e=>Ri(e,h)),o,[],[\"tox-browse-url\"]));return Lx.sketch({dom:$x([]),components:l.toArray().concat([{dom:{tag:\"div\",classes:[\"tox-form__controls-h-stack\"]},components:q([[m.asSpec()],d.map((()=>f.asSpec())).toArray()])}]),fieldBehaviours:$l([sm.config({disabled:()=>!e.enabled||o.isDisabled(),onDisabled:e=>{Lx.getField(e).each(sm.disable),f.getOpt(e).each(sm.disable)},onEnabled:e=>{Lx.getField(e).each(sm.enable),f.getOpt(e).each(sm.enable)}}),Gb(),xp(\"url-input-events\",[zi(h,(t=>{Vh.getCurrent(t).each((n=>{const r=Nd.getValue(n),o={fieldname:e.name,...r};d.each((r=>{r(o).get((r=>{Nd.setValue(n,r),$i(t,Yx,{name:e.name})}))}))}))}))])])})})(e,t,t.urlinput,n))),customeditor:US((e=>{const t=hc(),n=vg({dom:{tag:e.tag}}),r=hc();return{dom:{tag:\"div\",classes:[\"tox-custom-editor\"]},behaviours:$l([xp(\"custom-editor-events\",[Qi((o=>{n.getOpt(o).each((n=>{((e=>ye(e,\"init\"))(e)?e.init(n.element.dom):bD.load(e.scriptId,e.scriptUrl).then((t=>t(n.element.dom,e.settings)))).then((e=>{r.on((t=>{e.setValue(t)})),r.clear(),t.set(e)}))}))}))]),fD(L.none(),(()=>t.get().fold((()=>r.get().getOr(\"\")),(e=>e.getValue()))),((e,n)=>{t.get().fold((()=>r.set(n)),(e=>e.setValue(n)))})),sD()]),components:[n.asSpec()]}})),htmlpanel:US((e=>\"presentation\"===e.presets?Dx.sketch({dom:{tag:\"div\",classes:[\"tox-form__group\"],innerHtml:e.html}}):Dx.sketch({dom:{tag:\"div\",classes:[\"tox-form__group\"],innerHtml:e.html,attributes:{role:\"document\"}},containerBehaviours:$l([Fx.config({}),Ap.config({})])}))),imagepreview:US(((e,t,n)=>ED(e,n))),table:US(((e,t)=>((e,t)=>{const n=e=>({dom:{tag:\"th\",innerHtml:t.translate(e)}}),r=e=>({dom:{tag:\"td\",innerHtml:t.translate(e)}}),o=e=>({dom:{tag:\"tr\"},components:P(e,r)});return{dom:{tag:\"table\",classes:[\"tox-dialog__table\"]},components:[(s=e.header,{dom:{tag:\"thead\"},components:[{dom:{tag:\"tr\"},components:P(s,n)}]}),(i=e.cells,{dom:{tag:\"tbody\"},components:P(i,o)})],behaviours:$l([Fx.config({}),Ap.config({})])};var i,s})(e,t.shared.providers))),panel:US(((e,t)=>((e,t)=>({dom:{tag:\"div\",classes:e.classes},components:P(e.items,t.shared.interpreter)}))(e,t)))},qS={field:(e,t)=>t,record:b([])},GS=(e,t,n,r)=>{const o=mr(r,{shared:{interpreter:t=>KS(e,t,n,o)}});return KS(e,t,n,o)},KS=(e,t,n,r)=>ve(VS,t.type).fold((()=>(console.error(`Unknown factory type \"${t.type}\", defaulting to container: `,t),t)),(o=>o(e,t,n,r))),XS=\"layout-inset\",JS=e=>e.x,QS=(e,t)=>e.x+e.width/2-t.width/2,ZS=(e,t)=>e.x+e.width-t.width,eA=e=>e.y,tA=(e,t)=>e.y+e.height-t.height,nA=(e,t)=>e.y+e.height/2-t.height/2,rA=(e,t,n)=>Xa(ZS(e,t),tA(e,t),n.insetSouthwest(),tl(),\"southwest\",ll(e,{right:0,bottom:3}),XS),oA=(e,t,n)=>Xa(JS(e),tA(e,t),n.insetSoutheast(),el(),\"southeast\",ll(e,{left:1,bottom:3}),XS),iA=(e,t,n)=>Xa(ZS(e,t),eA(e),n.insetNorthwest(),Za(),\"northwest\",ll(e,{right:0,top:2}),XS),sA=(e,t,n)=>Xa(JS(e),eA(e),n.insetNortheast(),Qa(),\"northeast\",ll(e,{left:1,top:2}),XS),aA=(e,t,n)=>Xa(QS(e,t),eA(e),n.insetNorth(),nl(),\"north\",ll(e,{top:2}),XS),lA=(e,t,n)=>Xa(QS(e,t),tA(e,t),n.insetSouth(),rl(),\"south\",ll(e,{bottom:3}),XS),cA=(e,t,n)=>Xa(ZS(e,t),nA(e,t),n.insetEast(),il(),\"east\",ll(e,{right:0}),XS),uA=(e,t,n)=>Xa(JS(e),nA(e,t),n.insetWest(),ol(),\"west\",ll(e,{left:1}),XS),dA=e=>{switch(e){case\"north\":return aA;case\"northeast\":return sA;case\"northwest\":return iA;case\"south\":return lA;case\"southeast\":return oA;case\"southwest\":return rA;case\"east\":return cA;case\"west\":return uA}},hA=(e,t,n,r,o)=>ac(r).map(dA).getOr(aA)(e,t,n,r,o),mA=e=>{switch(e){case\"north\":return lA;case\"northeast\":return oA;case\"northwest\":return rA;case\"south\":return aA;case\"southeast\":return sA;case\"southwest\":return iA;case\"east\":return uA;case\"west\":return cA}},fA=(e,t,n,r,o)=>ac(r).map(mA).getOr(aA)(e,t,n,r,o),pA={valignCentre:[],alignCentre:[],alignLeft:[],alignRight:[],right:[],left:[],bottom:[],top:[]},gA=(e,t,n)=>{const r={maxHeightFunction:Ac()};return()=>n()?{type:\"node\",root:ut(ct(e())),node:L.from(e()),bubble:Tc(12,12,pA),layouts:{onRtl:()=>[sA],onLtr:()=>[iA]},overrides:r}:{type:\"hotspot\",hotspot:t(),bubble:Tc(-12,12,pA),layouts:{onRtl:()=>[gl],onLtr:()=>[vl]},overrides:r}},vA=(e,t,n)=>()=>n()?{type:\"node\",root:ut(ct(e())),node:L.from(e()),layouts:{onRtl:()=>[aA],onLtr:()=>[aA]}}:{type:\"hotspot\",hotspot:t(),layouts:{onRtl:()=>[wl],onLtr:()=>[wl]}},yA=(e,t)=>()=>({type:\"selection\",root:t(),getSelection:()=>{const t=e.selection.getRng();return L.some(ou.range(Fe.fromDom(t.startContainer),t.startOffset,Fe.fromDom(t.endContainer),t.endOffset))}}),bA=e=>t=>({type:\"node\",root:e(),node:t}),_A=(e,t,n)=>{const r=Mv(e),o=()=>Fe.fromDom(e.getBody()),i=()=>Fe.fromDom(e.getContentAreaContainer()),s=()=>r||!n();return{inlineDialog:gA(i,t,s),banner:vA(i,t,s),cursor:yA(e,o),node:bA(o)}},wA=e=>(t,n)=>{hw(e)(t,n)},xA=e=>()=>ew(e),CA=e=>()=>tw(e),kA=e=>()=>Z_(e),DA=e=>({colorPicker:wA(e),hasCustomColors:xA(e),getColors:CA(e),getColorCols:kA(e)}),SA=e=>()=>dv(e),AA=e=>({isDraggableModal:SA(e)}),MA=e=>be(e,\"items\"),LA=e=>be(e,\"format\"),EA=[{title:\"Headings\",items:[{title:\"Heading 1\",format:\"h1\"},{title:\"Heading 2\",format:\"h2\"},{title:\"Heading 3\",format:\"h3\"},{title:\"Heading 4\",format:\"h4\"},{title:\"Heading 5\",format:\"h5\"},{title:\"Heading 6\",format:\"h6\"}]},{title:\"Inline\",items:[{title:\"Bold\",format:\"bold\"},{title:\"Italic\",format:\"italic\"},{title:\"Underline\",format:\"underline\"},{title:\"Strikethrough\",format:\"strikethrough\"},{title:\"Superscript\",format:\"superscript\"},{title:\"Subscript\",format:\"subscript\"},{title:\"Code\",format:\"code\"}]},{title:\"Blocks\",items:[{title:\"Paragraph\",format:\"p\"},{title:\"Blockquote\",format:\"blockquote\"},{title:\"Div\",format:\"div\"},{title:\"Pre\",format:\"pre\"}]},{title:\"Align\",items:[{title:\"Left\",format:\"alignleft\"},{title:\"Center\",format:\"aligncenter\"},{title:\"Right\",format:\"alignright\"},{title:\"Justify\",format:\"alignjustify\"}]}],TA=e=>z(e,((e,t)=>{if(ye(t,\"items\")){const n=TA(t.items);return{customFormats:e.customFormats.concat(n.customFormats),formats:e.formats.concat([{title:t.title,items:n.formats}])}}if((e=>ye(e,\"inline\"))(t)||(e=>ye(e,\"block\"))(t)||(e=>ye(e,\"selector\"))(t)){const n=`custom-${i(t.name)?t.name:t.title.toLowerCase()}`;return{customFormats:e.customFormats.concat([{name:n,format:t}]),formats:e.formats.concat([{title:t.title,format:n,icon:t.icon}])}}return{...e,formats:e.formats.concat(t)}}),{customFormats:[],formats:[]}),FA=e=>Ug(e).map((t=>{const n=((e,t)=>{const n=TA(t),r=t=>{I(t,(t=>{e.formatter.has(t.name)||e.formatter.register(t.name,t.format)}))};return e.formatter?r(n.customFormats):e.on(\"init\",(()=>{r(n.customFormats)})),n.formats})(e,t);return Vg(e)?EA.concat(n):n})).getOr(EA),OA=(e,t,n)=>({...e,type:\"formatter\",isSelected:t(e.format),getStylePreview:n(e.format)}),BA=(e,t,n,r)=>{const o=t=>P(t,(t=>MA(t)?(e=>{const t=o(e.items);return{...e,type:\"submenu\",getStyleItems:b(t)}})(t):LA(t)?(e=>OA(e,n,r))(t):(e=>{const t=se(e);return 1===t.length&&R(t,\"title\")})(t)?{...t,type:\"separator\"}:(t=>{const o=i(t.name)?t.name:us(t.title),s=`custom-${o}`,a={...t,type:\"formatter\",format:s,isSelected:n(s),getStylePreview:r(s)};return e.formatter.register(o,a),a})(t)));return o(t)},RA=e=>{const t=t=>()=>e.formatter.match(t),n=t=>()=>{const n=e.formatter.get(t);return void 0!==n?L.some({tag:n.length>0&&(n[0].inline||n[0].block)||\"div\",styles:e.dom.parseStyle(e.formatter.getCssText(t))}):L.none()},r=Mo([]),o=Mo([]),i=Mo(!1);e.on(\"PreInit\",(o=>{const i=FA(e),s=BA(e,i,t,n);r.set(s)})),e.on(\"addStyleModifications\",(r=>{const s=BA(e,r.items,t,n);o.set(s),i.set(r.replace)}));return{getData:()=>{const e=i.get()?[]:r.get(),t=o.get();return e.concat(t)}}},$A=_D.trim,NA=e=>t=>{if((e=>m(e)&&1===e.nodeType)(t)){if(t.contentEditable===e)return!0;if(t.getAttribute(\"data-mce-contenteditable\")===e)return!0}return!1},YA=NA(\"true\"),PA=NA(\"false\"),IA=(e,t,n,r,o)=>({type:e,title:t,url:n,level:r,attach:o}),HA=e=>e.innerText||e.textContent,jA=e=>(e=>e&&\"A\"===e.nodeName&&void 0!==(e.id||e.name))(e)&&zA(e),WA=e=>e&&/^(H[1-6])$/.test(e.nodeName),zA=e=>(e=>{let t=e;for(;t=t.parentNode;){const e=t.contentEditable;if(e&&\"inherit\"!==e)return YA(t)}return!1})(e)&&!PA(e),UA=e=>WA(e)&&zA(e),VA=e=>{var t;const n=(e=>e.id?e.id:us(\"h\"))(e);return IA(\"header\",null!==(t=HA(e))&&void 0!==t?t:\"\",\"#\"+n,(e=>WA(e)?parseInt(e.nodeName.substr(1),10):0)(e),(()=>{e.id=n}))},qA=e=>{const t=e.id||e.name,n=HA(e);return IA(\"anchor\",n||\"#\"+t,\"#\"+t,0,v)},GA=e=>{const t=(n=\"h1,h2,h3,h4,h5,h6,a:not([href])\",r=e,P(hu(Fe.fromDom(r),n),(e=>e.dom)));var n,r;return t},KA=e=>$A(e.title).length>0,XA=e=>{const t=GA(e);return j((e=>P(j(e,UA),VA))(t).concat((e=>P(j(e,jA),qA))(t)),KA)},JA=\"tinymce-url-history\",QA=e=>i(e)&&/^https?/.test(e),ZA=e=>s(e)&&pe(e,(e=>!(e=>l(e)&&e.length<=5&&K(e,QA))(e))).isNone(),eM=()=>{const e=G_.getItem(JA);if(null===e)return{};let t;try{t=JSON.parse(e)}catch(e){if(e instanceof SyntaxError)return console.log(\"Local storage \"+JA+\" was not valid JSON\",e),{};throw e}return ZA(t)?t:(console.log(\"Local storage \"+JA+\" was not valid format\",t),{})},tM=e=>{const t=eM();return ve(t,e).getOr([])},nM=(e,t)=>{if(!QA(e))return;const n=eM(),r=ve(n,t).getOr([]),o=j(r,(t=>t!==e));n[t]=[e].concat(o).slice(0,5),(e=>{if(!ZA(e))throw new Error(\"Bad format for history:\\n\"+JSON.stringify(e));G_.setItem(JA,JSON.stringify(e))})(n)},rM=e=>!!e,oM=e=>ce(_D.makeMap(e,/[, ]/),rM),iM=e=>L.from(iv(e)),sM=(e,t)=>{const n=(e=>{const t=L.from(av(e)).filter(rM).map(oM);return iM(e).fold(S,(e=>t.fold(A,(e=>se(e).length>0&&e))))})(e);return u(n)?n?iM(e):L.none():n[t]?iM(e):L.none()},aM=e=>L.from(e).filter(i).getOrUndefined(),lM=e=>({getHistory:tM,addToHistory:nM,getLinkInformation:()=>(e=>lv(e)?L.some({targets:XA(e.getBody()),anchorTop:aM(cv(e)),anchorBottom:aM(uv(e))}):L.none())(e),getValidationHandler:()=>(e=>L.from(sv(e)))(e),getUrlPicker:t=>((e,t)=>sM(e,t).map((n=>r=>Yw((o=>{const a={filetype:t,fieldname:r.fieldname,...L.from(r.meta).getOr({})};n.call(e,((e,t)=>{if(!i(e))throw new Error(\"Expected value to be string\");if(void 0!==t&&!s(t))throw new Error(\"Expected meta to be a object\");o({value:e,meta:t})}),r.value,a)})))))(e,t)}),cM=(e,t,n)=>{const r=Mo(!1),o=(e=>{const t=Mo(Sv(e)?\"bottom\":\"top\");return{isPositionedAtTop:()=>\"top\"===t.get(),getDockingMode:t.get,setDockingMode:t.set}})(t),i={shared:{providers:{icons:()=>t.ui.registry.getAll().icons,menuItems:()=>t.ui.registry.getAll().menuItems,translate:yg.translate,isDisabled:()=>t.mode.isReadOnly()||!t.ui.isEnabled(),getOption:t.options.get},interpreter:e=>((e,t,n)=>KS(qS,e,t,n))(e,{},i),anchors:_A(t,n,o.isPositionedAtTop),header:o,getSink:e},urlinput:lM(t),styles:RA(t),colorinput:DA(t),dialog:AA(t),isContextMenuOpen:()=>r.get(),setContextMenuState:e=>r.set(e)};return i},uM=Rh,dM=yh,hM=b([bo(\"shell\",!1),to(\"makeItem\"),bo(\"setupItem\",v),Hd(\"listBehaviours\",[wp])]),mM=ph({name:\"items\",overrides:()=>({behaviours:$l([wp.config({})])})}),fM=b([mM]),pM=jh({name:b(\"CustomList\")(),configFields:hM(),partFields:fM(),factory:(e,t,n,r)=>{const o=e.shell?{behaviours:[wp.config({})],components:[]}:{behaviours:[],components:t},i=t=>e.shell?L.some(t):Ah(t,e,\"items\");return{uid:e.uid,dom:e.dom,components:o.components,behaviours:Id(e.listBehaviours,o.behaviours),apis:{setItems:(t,n)=>{i(t).fold((()=>{throw console.error(\"Custom List was defined to not be a shell, but no item container was specified in components\"),new Error(\"Custom List was defined to not be a shell, but no item container was specified in components\")}),(r=>{const o=wp.contents(r),i=n.length,s=i-o.length,a=s>0?N(s,(()=>e.makeItem())):[],l=o.slice(i);I(l,(e=>wp.remove(r,e))),I(a,(e=>wp.append(r,e)));const c=wp.contents(r);I(c,((r,o)=>{e.setupItem(t,r,n[o],o)}))}))}}}},apis:{setItems:(e,t,n)=>{e.setItems(t,n)}}}),gM=b([to(\"dom\"),bo(\"shell\",!0),Yd(\"toolbarBehaviours\",[wp])]),vM=b([ph({name:\"groups\",overrides:()=>({behaviours:$l([wp.config({})])})})]),yM=jh({name:\"Toolbar\",configFields:gM(),partFields:vM(),factory:(e,t,n,r)=>{const o=t=>e.shell?L.some(t):Ah(t,e,\"groups\"),i=e.shell?{behaviours:[wp.config({})],components:[]}:{behaviours:[],components:t};return{uid:e.uid,dom:e.dom,components:i.components,behaviours:Id(e.toolbarBehaviours,i.behaviours),apis:{setGroups:(e,t)=>{o(e).fold((()=>{throw console.error(\"Toolbar was defined to not be a shell, but no groups container was specified in components\"),new Error(\"Toolbar was defined to not be a shell, but no groups container was specified in components\")}),(e=>{wp.set(e,t)}))}},domModification:{attributes:{role:\"group\"}}}},apis:{setGroups:(e,t,n)=>{e.setGroups(t,n)}}}),bM=v,_M=S,wM=b([]);var xM=Object.freeze({__proto__:null,setup:bM,isDocked:_M,getBehaviours:wM});const CM=e=>(_e(Tt(e,\"position\"),\"fixed\")?L.none():tt(e)).orThunk((()=>{const t=Fe.fromTag(\"span\");return Ze(e).bind((e=>{Tn(e,t);const n=tt(t);return Bn(t),n}))})),kM=e=>CM(e).map(Wt).getOrThunk((()=>Ht(0,0))),DM=Lo([{static:[]},{absolute:[\"positionCss\"]},{fixed:[\"positionCss\"]}]),SM=(e,t)=>{const n=e.element;Vs(n,t.transitionClass),qs(n,t.fadeOutClass),Vs(n,t.fadeInClass),t.onShow(e)},AM=(e,t)=>{const n=e.element;Vs(n,t.transitionClass),qs(n,t.fadeInClass),Vs(n,t.fadeOutClass),t.onHide(e)},MM=(e,t,n)=>K(e,(e=>{switch(e){case\"bottom\":return((e,t)=>e.bottom<=t.bottom)(t,n);case\"top\":return((e,t)=>e.y>=t.y)(t,n)}})),LM=(e,t)=>t.getInitialPos().map((t=>Wn(t.bounds.x,t.bounds.y,Vt(e),Yt(e)))),EM=(e,t,n)=>n.getInitialPos().bind((r=>{switch(n.clearInitialPos(),r.position){case\"static\":return L.some(DM.static());case\"absolute\":const n=CM(e).map(zn).getOrThunk((()=>zn(pt())));return L.some(DM.absolute(Kl(\"absolute\",ve(r.style,\"left\").map((e=>t.x-n.x)),ve(r.style,\"top\").map((e=>t.y-n.y)),ve(r.style,\"right\").map((e=>n.right-t.right)),ve(r.style,\"bottom\").map((e=>n.bottom-t.bottom)))));default:return L.none()}})),TM=(e,t,n)=>{const r=zn(e);if(MM(n.getModes(),r,t))return L.none();{((e,t,n)=>{n.setInitialPos({style:Ft(e),position:Lt(e,\"position\")||\"static\",bounds:t})})(e,r,n);const o=Vn(),i=r.x-o.x,s=t.y-o.y,a=o.bottom-t.bottom,l=r.y<=t.y;return L.some(DM.fixed(Kl(\"fixed\",L.some(i),l?L.some(s):L.none(),L.none(),l?L.none():L.some(a))))}},FM=(e,t,n)=>{const r=e.element;return _e(Tt(r,\"position\"),\"fixed\")?((e,t,n)=>LM(e,n).filter((e=>MM(n.getModes(),e,t))).bind((t=>EM(e,t,n))))(r,t,n):TM(r,t,n)},OM=(e,t,n)=>{n.setDocked(!1),I([\"left\",\"right\",\"top\",\"bottom\",\"position\"],(t=>Bt(e.element,t))),t.onUndocked(e)},BM=(e,t,n,r)=>{const o=\"fixed\"===r.position;n.setDocked(o),Xl(e.element,r);(o?t.onDocked:t.onUndocked)(e)},RM=(e,t,n,r,o=!1)=>{t.contextual.each((t=>{t.lazyContext(e).each((i=>{const s=((e,t)=>e.y<t.bottom&&e.bottom>t.y)(i,r);if(s!==n.isVisible())if(n.setVisible(s),o&&!s)Ks(e.element,[t.fadeOutClass]),t.onHide(e);else{(s?SM:AM)(e,t)}}))}))},$M=(e,t,n)=>{const r=e.element;n.setDocked(!1),((e,t)=>{const n=e.element;return LM(n,t).bind((e=>EM(n,e,t)))})(e,n).each((r=>{r.fold((()=>OM(e,t,n)),(r=>BM(e,t,n,r)),v)})),n.setVisible(!0),t.contextual.each((t=>{Xs(r,[t.fadeInClass,t.fadeOutClass,t.transitionClass]),t.onShow(e)})),NM(e,t,n)},NM=(e,t,n)=>{e.getSystem().isConnected()&&((e,t,n)=>{const r=t.lazyViewport(e);n.isDocked()&&RM(e,t,n,r),FM(e,r,n).each((o=>{o.fold((()=>OM(e,t,n)),(r=>BM(e,t,n,r)),(o=>{RM(e,t,n,r,!0),BM(e,t,n,o)}))}))})(e,t,n)},YM=(e,t,n)=>{n.isDocked()&&$M(e,t,n)};var PM=Object.freeze({__proto__:null,refresh:NM,reset:YM,isDocked:(e,t,n)=>n.isDocked(),getModes:(e,t,n)=>n.getModes(),setModes:(e,t,n,r)=>n.setModes(r)});var IM=Object.freeze({__proto__:null,events:(e,t)=>Hi([Ji(ii(),((n,r)=>{e.contextual.each((e=>{if(Gs(n.element,e.transitionClass)){Xs(n.element,[e.transitionClass,e.fadeInClass]);(t.isVisible()?e.onShown:e.onHidden)(n)}r.stop()}))})),zi(Ci(),((n,r)=>{NM(n,e,t)})),zi(ki(),((n,r)=>{YM(n,e,t)}))])}),HM=[yo(\"contextual\",[oo(\"fadeInClass\"),oo(\"fadeOutClass\"),oo(\"transitionClass\"),so(\"lazyContext\"),Wa(\"onShow\"),Wa(\"onShown\"),Wa(\"onHide\"),Wa(\"onHidden\")]),Do(\"lazyViewport\",Vn),So(\"modes\",[\"top\",\"bottom\"],Yr),Wa(\"onDocked\"),Wa(\"onUndocked\")];const jM=Yl({fields:HM,name:\"docking\",active:IM,apis:PM,state:Object.freeze({__proto__:null,init:e=>{const t=Mo(!1),n=Mo(!0),r=hc(),o=Mo(e.modes);return Ms({isDocked:t.get,setDocked:t.set,getInitialPos:r.get,setInitialPos:r.set,clearInitialPos:r.clear,isVisible:n.get,setVisible:n.set,getModes:o.get,setModes:o.set,readState:()=>`docked:  ${t.get()}, visible: ${n.get()}, modes: ${o.get().join(\",\")}`})}})}),WM=b(us(\"toolbar-height-change\")),zM={fadeInClass:\"tox-editor-dock-fadein\",fadeOutClass:\"tox-editor-dock-fadeout\",transitionClass:\"tox-editor-dock-transition\"},UM=\"tox-tinymce--toolbar-sticky-on\",VM=\"tox-tinymce--toolbar-sticky-off\",qM=(e,t)=>R(jM.getModes(e),t),GM=e=>{const t=e.element;et(t).each((n=>{const r=\"padding-\"+jM.getModes(e)[0];if(jM.isDocked(e)){const e=Vt(n);St(t,\"width\",e+\"px\"),St(n,r,(e=>Pt(e)+(parseInt(Lt(e,\"margin-top\"),10)||0)+(parseInt(Lt(e,\"margin-bottom\"),10)||0))(t)+\"px\")}else Bt(t,\"width\"),Bt(n,r)}))},KM=(e,t)=>{t?(qs(e,zM.fadeOutClass),Ks(e,[zM.transitionClass,zM.fadeInClass])):(qs(e,zM.fadeInClass),Ks(e,[zM.fadeOutClass,zM.transitionClass]))},XM=(e,t)=>{const n=Fe.fromDom(e.getContainer());t?(Vs(n,UM),qs(n,VM)):(Vs(n,VM),qs(n,UM))},JM=(e,t)=>{const n=hc(),r=t.getSink,o=e=>{r().each((t=>e(t.element)))},i=t=>{e.inline||GM(t),XM(e,jM.isDocked(t)),t.getSystem().broadcastOn([bd()],{}),r().each((e=>e.getSystem().broadcastOn([bd()],{})))},s=e.inline?[]:[jl.config({channels:{[WM()]:{onReceive:GM}}})];return[Ap.config({}),jM.config({contextual:{lazyContext:t=>{const n=Pt(t.element),r=e.inline?e.getContentAreaContainer():e.getContainer(),o=zn(Fe.fromDom(r)),i=o.height-n,s=o.y+(qM(t,\"top\")?0:n);return L.some(Wn(o.x,s,o.width,i))},onShow:()=>{o((e=>KM(e,!0)))},onShown:e=>{o((e=>Xs(e,[zM.transitionClass,zM.fadeInClass]))),n.get().each((t=>{((e,t)=>{const n=Ke(t);Vl(n).filter((e=>!qe(t,e))).filter((t=>qe(t,Fe.fromDom(n.dom.body))||Ge(e,t))).each((()=>zl(t)))})(e.element,t),n.clear()}))},onHide:e=>{((e,t)=>ql(e).orThunk((()=>t().toOptional().bind((e=>ql(e.element))))))(e.element,r).fold(n.clear,n.set),o((e=>KM(e,!1)))},onHidden:()=>{o((e=>Xs(e,[zM.transitionClass])))},...zM},lazyViewport:t=>{const n=Vn(),r=nv(e),o=n.y+(qM(t,\"top\")?r:0),i=n.height-(qM(t,\"bottom\")?r:0);return Wn(n.x,o,n.width,i)},modes:[t.header.getDockingMode()],onDocked:i,onUndocked:i}),...s]};var QM=Object.freeze({__proto__:null,setup:(e,t,n)=>{e.inline||(t.header.isPositionedAtTop()||e.on(\"ResizeEditor\",(()=>{n().each(jM.reset)})),e.on(\"ResizeWindow ResizeEditor\",(()=>{n().each(GM)})),e.on(\"SkinLoaded\",(()=>{n().each((e=>{jM.isDocked(e)?jM.reset(e):jM.refresh(e)}))})),e.on(\"FullscreenStateChanged\",(()=>{n().each(jM.reset)}))),e.on(\"AfterScrollIntoView\",(e=>{n().each((t=>{jM.refresh(t);const n=t.element;af(n)&&((e,t)=>{const n=Ke(t),r=Qe(t).dom.innerHeight,o=Rn(n),i=Fe.fromDom(e.elm),s=Un(i),a=Yt(i),l=s.y,c=l+a,u=Wt(t),d=Yt(t),h=u.top,m=h+d,f=Math.abs(h-o.top)<2,p=Math.abs(m-(o.top+r))<2;if(f&&l<m)$n(o.left,l-d,n);else if(p&&c>h){const e=l-r+a+d;$n(o.left,e,n)}})(e,n)}))})),e.on(\"PostRender\",(()=>{XM(e,!1)}))},isDocked:e=>e().map(jM.isDocked).getOr(!1),getBehaviours:JM});const ZM=Er([Dy,no(\"items\",Fr([Br([Sy,co(\"items\",Yr)]),Yr]))].concat(tb)),eL=[fo(\"text\"),fo(\"tooltip\"),fo(\"icon\"),_o(\"search\",!1,Fr([Pr,Er([fo(\"placeholder\")])],(e=>u(e)?e?L.some({placeholder:L.none()}):L.none():L.some(e)))),so(\"fetch\"),Do(\"onSetup\",(()=>v))],tL=Er([Dy,...eL]),nL=e=>qr(\"menubutton\",tL,e),rL=Er([Dy,Iy,Py,Yy,Wy,Fy,$y,Co(\"presets\",\"normal\",[\"normal\",\"color\",\"listpreview\"]),Gy(1),By,Ry]);var oL=Hh({factory:(e,t)=>{const n={focus:hp.focusIn,setMenus:(e,n)=>{const r=P(n,(e=>{const n={type:\"menubutton\",text:e.text,fetch:t=>{t(e.getItems())}},r=nL(n).mapError((e=>Xr(e))).getOrDie();return CS(r,\"tox-mbtn\",t.backstage,L.some(\"menuitem\"))}));wp.set(e,r)}};return{uid:e.uid,dom:e.dom,components:[],behaviours:$l([wp.config({}),xp(\"menubar-events\",[Qi((t=>{e.onSetup(t)})),zi(Xo(),((e,t)=>{Ca(e.element,\".tox-mbtn--active\").each((n=>{ka(t.event.target,\".tox-mbtn\").each((t=>{qe(n,t)||e.getSystem().getByDom(n).each((n=>{e.getSystem().getByDom(t).each((e=>{ex.expand(e),ex.close(n),Ap.focus(e)}))}))}))}))})),zi(Li(),((e,t)=>{t.event.prevFocus.bind((t=>e.getSystem().getByDom(t).toOptional())).each((n=>{t.event.newFocus.bind((t=>e.getSystem().getByDom(t).toOptional())).each((e=>{ex.isOpen(n)&&(ex.expand(e),ex.close(n))}))}))}))]),hp.config({mode:\"flow\",selector:\".tox-mbtn\",onEscape:t=>(e.onEscape(t),L.some(!0))}),Fx.config({})]),apis:n,domModification:{attributes:{role:\"menubar\"}}}},name:\"silver.Menubar\",configFields:[to(\"dom\"),to(\"uid\"),to(\"onEscape\"),to(\"backstage\"),bo(\"onSetup\",v)],apis:{focus:(e,t)=>{e.focus(t)},setMenus:(e,t,n)=>{e.setMenus(t,n)}}});const iL=(e,t)=>t.getAnimationRoot.fold((()=>e.element),(t=>t(e))),sL=e=>e.dimension.property,aL=(e,t)=>e.dimension.getDimension(t),lL=(e,t)=>{const n=iL(e,t);Xs(n,[t.shrinkingClass,t.growingClass])},cL=(e,t)=>{qs(e.element,t.openClass),Vs(e.element,t.closedClass),St(e.element,sL(t),\"0px\"),Rt(e.element)},uL=(e,t)=>{qs(e.element,t.closedClass),Vs(e.element,t.openClass),Bt(e.element,sL(t))},dL=(e,t,n,r)=>{n.setCollapsed(),St(e.element,sL(t),aL(t,e.element)),lL(e,t),cL(e,t),t.onStartShrink(e),t.onShrunk(e)},hL=(e,t,n,r)=>{const o=r.getOrThunk((()=>aL(t,e.element)));n.setCollapsed(),St(e.element,sL(t),o),Rt(e.element);const i=iL(e,t);qs(i,t.growingClass),Vs(i,t.shrinkingClass),cL(e,t),t.onStartShrink(e)},mL=(e,t,n)=>{const r=aL(t,e.element);(\"0px\"===r?dL:hL)(e,t,n,L.some(r))},fL=(e,t,n)=>{const r=iL(e,t),o=Gs(r,t.shrinkingClass),i=aL(t,e.element);uL(e,t);const s=aL(t,e.element);(o?()=>{St(e.element,sL(t),i),Rt(e.element)}:()=>{cL(e,t)})(),qs(r,t.shrinkingClass),Vs(r,t.growingClass),uL(e,t),St(e.element,sL(t),s),n.setExpanded(),t.onStartGrow(e)},pL=(e,t,n)=>{const r=iL(e,t);return!0===Gs(r,t.growingClass)},gL=(e,t,n)=>{const r=iL(e,t);return!0===Gs(r,t.shrinkingClass)};var vL=Object.freeze({__proto__:null,refresh:(e,t,n)=>{if(n.isExpanded()){Bt(e.element,sL(t));const n=aL(t,e.element);St(e.element,sL(t),n)}},grow:(e,t,n)=>{n.isExpanded()||fL(e,t,n)},shrink:(e,t,n)=>{n.isExpanded()&&mL(e,t,n)},immediateShrink:(e,t,n)=>{n.isExpanded()&&dL(e,t,n)},hasGrown:(e,t,n)=>n.isExpanded(),hasShrunk:(e,t,n)=>n.isCollapsed(),isGrowing:pL,isShrinking:gL,isTransitioning:(e,t,n)=>pL(e,t)||gL(e,t),toggleGrow:(e,t,n)=>{(n.isExpanded()?mL:fL)(e,t,n)},disableTransitions:lL,immediateGrow:(e,t,n)=>{n.isExpanded()||(uL(e,t),St(e.element,sL(t),aL(t,e.element)),lL(e,t),n.setExpanded(),t.onStartGrow(e),t.onGrown(e))}});var yL=Object.freeze({__proto__:null,exhibit:(e,t,n)=>{const r=t.expanded;return Es(r?{classes:[t.openClass],styles:{}}:{classes:[t.closedClass],styles:To(t.dimension.property,\"0px\")})},events:(e,t)=>Hi([Ji(ii(),((n,r)=>{if(r.event.raw.propertyName===e.dimension.property){lL(n,e),t.isExpanded()&&Bt(n.element,e.dimension.property);(t.isExpanded()?e.onGrown:e.onShrunk)(n)}}))])}),bL=[to(\"closedClass\"),to(\"openClass\"),to(\"shrinkingClass\"),to(\"growingClass\"),uo(\"getAnimationRoot\"),Wa(\"onShrunk\"),Wa(\"onStartShrink\"),Wa(\"onGrown\"),Wa(\"onStartGrow\"),bo(\"expanded\",!1),no(\"dimension\",Jr(\"property\",{width:[qa(\"property\",\"width\"),qa(\"getDimension\",(e=>Vt(e)+\"px\"))],height:[qa(\"property\",\"height\"),qa(\"getDimension\",(e=>Yt(e)+\"px\"))]}))];const _L=Yl({fields:bL,name:\"sliding\",active:yL,apis:vL,state:Object.freeze({__proto__:null,init:e=>{const t=Mo(e.expanded);return Ms({isExpanded:()=>!0===t.get(),isCollapsed:()=>!1===t.get(),setCollapsed:x(t.set,!1),setExpanded:x(t.set,!0),readState:()=>\"expanded: \"+t.get()})}})}),wL=\"container\",xL=[Yd(\"slotBehaviours\",[])],CL=e=>\"<alloy.field.\"+e+\">\",kL=(e,t)=>{const n=t=>Th(e),r=(t,n)=>(r,o)=>Ah(r,e,o).map((e=>t(e,o))).getOr(n),o=(e,t)=>\"true\"!==_t(e.element,\"aria-hidden\"),i=r(o,!1),s=r(((e,t)=>{if(o(e)){const n=e.element;St(n,\"display\",\"none\"),yt(n,\"aria-hidden\",\"true\"),$i(e,Ei(),{name:t,visible:!1})}})),a=(l=s,(e,t)=>{I(t,(t=>l(e,t)))});var l;const c=r(((e,t)=>{if(!o(e)){const n=e.element;Bt(n,\"display\"),Ct(n,\"aria-hidden\"),$i(e,Ei(),{name:t,visible:!0})}})),u={getSlotNames:n,getSlot:(t,n)=>Ah(t,e,n),isShowing:i,hideSlot:s,hideAllSlots:e=>a(e,n()),showSlot:c};return{uid:e.uid,dom:e.dom,components:t,behaviours:Pd(e.slotBehaviours),apis:u}},DL=ce({getSlotNames:(e,t)=>e.getSlotNames(t),getSlot:(e,t,n)=>e.getSlot(t,n),isShowing:(e,t,n)=>e.isShowing(t,n),hideSlot:(e,t,n)=>e.hideSlot(t,n),hideAllSlots:(e,t)=>e.hideAllSlots(t),showSlot:(e,t,n)=>e.showSlot(t,n)},(e=>Ss(e))),SL={...DL,sketch:e=>{const t=(()=>{const e=[];return{slot:(t,n)=>(e.push(t),xh(wL,CL(t),n)),record:b(e)}})(),n=e(t),r=t.record(),o=P(r,(e=>mh({name:e,pname:CL(e)})));return Nh(wL,xL,o,kL,n)}},AL=Er([Py,Iy,Do(\"onShow\",v),Do(\"onHide\",v),$y]),ML=e=>({element:()=>e.element.dom}),LL=(e,t)=>{const n=P(se(t),(e=>{const n=t[e],r=Gr((e=>qr(\"sidebar\",AL,e))(n));return{name:e,getApi:ML,onSetup:r.onSetup,onShow:r.onShow,onHide:r.onHide}}));return P(n,(t=>{const r=Mo(v);return e.slot(t.name,{dom:{tag:\"div\",classes:[\"tox-sidebar__pane\"]},behaviours:Bb([e_(t,r),t_(t,r),zi(Ei(),((e,t)=>{const r=t.event,o=U(n,(e=>e.name===r.name));o.each((t=>{(r.visible?t.onShow:t.onHide)(t.getApi(e))}))}))])})}))},EL=e=>SL.sketch((t=>({dom:{tag:\"div\",classes:[\"tox-sidebar__pane-container\"]},components:LL(t,e),slotBehaviours:Bb([Qi((e=>SL.hideAllSlots(e)))])}))),TL=e=>Vh.getCurrent(e).bind((e=>{if(_L.isGrowing(e)||_L.hasGrown(e)){return Vh.getCurrent(e).bind((e=>U(SL.getSlotNames(e),(t=>SL.isShowing(e,t)))))}return L.none()})),FL=us(\"FixSizeEvent\"),OL=us(\"AutoSizeEvent\");var BL=Object.freeze({__proto__:null,block:(e,t,n,r)=>{yt(e.element,\"aria-busy\",!0);const o=t.getRoot(e).getOr(e),i=$l([hp.config({mode:\"special\",onTab:()=>L.some(!0),onShiftTab:()=>L.some(!0)}),Ap.config({})]),s=r(o,i),a=o.getSystem().build(s);wp.append(o,ga(a)),a.hasConfigured(hp)&&t.focus&&hp.focusIn(a),n.isBlocked()||t.onBlock(e),n.blockWith((()=>wp.remove(o,a)))},unblock:(e,t,n)=>{Ct(e.element,\"aria-busy\"),n.isBlocked()&&t.onUnblock(e),n.clear()}}),RL=[Do(\"getRoot\",L.none),ko(\"focus\",!0),Wa(\"onBlock\"),Wa(\"onUnblock\")];const $L=Yl({fields:RL,name:\"blocking\",apis:BL,state:Object.freeze({__proto__:null,init:()=>{const e=uc((e=>e.destroy()));return Ms({readState:e.isSet,blockWith:t=>{e.set({destroy:t})},clear:e.clear,isBlocked:e.isSet})}})}),NL=e=>{const t=Fe.fromHtml(e),n=nt(t),r=(e=>{const t=void 0!==e.dom.attributes?e.dom.attributes:[];return z(t,((e,t)=>\"class\"===t.name?e:{...e,[t.name]:t.value}),{})})(t),o=(e=>Array.prototype.slice.call(e.dom.classList,0))(t),i=0===n.length?{}:{innerHtml:ns(t)};return{tag:Ye(t),classes:o,attributes:r,...i}},YL=e=>Vh.getCurrent(e).each((e=>zl(e.element))),PL=(e,t,n,r)=>{const o=t.element;if(((e,t)=>{const n=\"tabindex\",r=\"data-mce-tabindex\";L.from(e.iframeElement).map(Fe.fromDom).each((e=>{t?(wt(e,n).each((t=>yt(e,r,t))),yt(e,n,-1)):(Ct(e,n),wt(e,r).each((t=>{yt(e,n,t),Ct(e,r)})))}))})(e,n),n)$L.block(t,(e=>(t,n)=>({dom:{tag:\"div\",attributes:{\"aria-label\":e.translate(\"Loading...\"),tabindex:\"0\"},classes:[\"tox-throbber__busy-spinner\"]},components:[{dom:NL('<div class=\"tox-spinner\"><div></div><div></div><div></div></div>')}]}))(r)),Bt(o,\"display\"),Ct(o,\"aria-hidden\"),e.hasFocus()&&YL(t);else{const n=Vh.getCurrent(t).exists((e=>Ul(e.element)));$L.unblock(t),St(o,\"display\",\"none\"),yt(o,\"aria-hidden\",\"true\"),n&&e.focus()}},IL=(e,t,n)=>{const r=Mo(!1),o=hc(),i=n=>{r.get()&&!(e=>{if((e=>\"focusin\"===e.type)(e))return(e.composed?ne(e.composedPath()):L.from(e.target)).map(Fe.fromDom).filter(Ie).exists((e=>Gs(e,\"mce-pastebin\")));return!1})(n)&&(n.preventDefault(),YL(t()),e.editorManager.setActive(e))};e.inline||e.on(\"PreInit\",(()=>{e.dom.bind(e.getWin(),\"focusin\",i),e.on(\"BeforeExecCommand\",(e=>{\"mcefocus\"===e.command.toLowerCase()&&!0!==e.value&&i(e)}))}));const s=o=>{o!==r.get()&&(r.set(o),PL(e,t(),o,n.providers),((e,t)=>{e.dispatch(\"AfterProgressState\",{state:t})})(e,o))};e.on(\"ProgressState\",(t=>{if(o.on(clearTimeout),p(t.time)){const n=pg.setEditorTimeout(e,(()=>s(t.state)),t.time);o.set(n)}else s(t.state),o.clear()}))},HL=(e,t,n)=>({within:e,extra:t,withinWidth:n}),jL=(e,t,n)=>{const r=((e,t)=>{const n=z(e,((e,n)=>t(n,e.len).fold(b(e),(t=>({len:t.finish,list:e.list.concat([t])})))),{len:0,list:[]});return n.list})(e,((e,t)=>{const r=n(e);return L.some({element:e,start:t,finish:t+r,width:r})})),o=j(r,(e=>e.finish<=t)),i=W(o,((e,t)=>e+t.width),0);return{within:o,extra:r.slice(o.length),withinWidth:i}},WL=e=>P(e,(e=>e.element)),zL=(e,t,n,r)=>{const o=((e,t,n)=>{const r=jL(t,e,n);return 0===r.extra.length?L.some(r):L.none()})(e,t,n).getOrThunk((()=>jL(t,e-n(r),n))),i=o.within,s=o.extra,a=o.withinWidth;return 1===s.length&&s[0].width<=n(r)?((e,t,n)=>{const r=WL(e.concat(t));return HL(r,[],n)})(i,s,a):s.length>=1?((e,t,n,r)=>{const o=WL(e).concat([n]);return HL(o,WL(t),r)})(i,s,r,a):((e,t,n)=>HL(WL(e),[],n))(i,0,a)},UL=(e,t)=>{const n=P(t,(e=>ga(e)));yM.setGroups(e,n)},VL=(e,t,n)=>{const r=t.builtGroups.get();if(0===r.length)return;const o=Mh(e,t,\"primary\"),i=Ow.getCoupled(e,\"overflowGroup\");St(o.element,\"visibility\",\"hidden\");const s=r.concat([i]),a=ie(s,(e=>ql(e.element).bind((t=>e.getSystem().getByDom(t).toOptional()))));n([]),UL(o,s);const l=Vt(o.element),c=zL(l,t.builtGroups.get(),(e=>Vt(e.element)),i);0===c.extra.length?(wp.remove(o,i),n([])):(UL(o,c.within),n(c.extra)),Bt(o.element,\"visibility\"),Rt(o.element),a.each(Ap.focus)},qL=b([Yd(\"splitToolbarBehaviours\",[Ow]),Zr(\"builtGroups\",(()=>Mo([])))]),GL=b([Ha([\"overflowToggledClass\"]),go(\"getOverflowBounds\"),to(\"lazySink\"),Zr(\"overflowGroups\",(()=>Mo([])))].concat(qL())),KL=b([mh({factory:yM,schema:gM(),name:\"primary\"}),fh({schema:gM(),name:\"overflow\"}),fh({name:\"overflow-button\"}),fh({name:\"overflow-group\"})]),XL=b(((e,t)=>{((e,t)=>{const n=Ut.max(e,t,[\"margin-left\",\"border-left-width\",\"padding-left\",\"padding-right\",\"border-right-width\",\"margin-right\"]);St(e,\"max-width\",n+\"px\")})(e,Math.floor(t))})),JL=b([Ha([\"toggledClass\"]),to(\"lazySink\"),so(\"fetch\"),go(\"getBounds\"),yo(\"fireDismissalEventInstead\",[bo(\"event\",Ai())]),Pc()]),QL=b([fh({name:\"button\",overrides:e=>({dom:{attributes:{\"aria-haspopup\":\"true\"}},buttonBehaviours:$l([Rp.config({toggleClass:e.markers.toggledClass,aria:{mode:\"expanded\"},toggleOnExecute:!1})])})}),fh({factory:yM,schema:gM(),name:\"toolbar\",overrides:e=>({toolbarBehaviours:$l([hp.config({mode:\"cyclic\",onEscape:t=>(Ah(t,e,\"button\").each(Ap.focus),L.none())})])})})]),ZL=(e,t)=>{const n=Ow.getCoupled(e,\"toolbarSandbox\");vd.isOpen(n)?vd.close(n):vd.open(n,t.toolbar())},eE=(e,t,n,r)=>{const o=n.getBounds.map((e=>e())),i=n.lazySink(e).getOrDie();Uu.positionWithinBounds(i,t,{anchor:{type:\"hotspot\",hotspot:e,layouts:r,overrides:{maxWidthFunction:XL()}}},o)},tE=(e,t,n,r,o)=>{yM.setGroups(t,o),eE(e,t,n,r),Rp.on(e)},nE=jh({name:\"FloatingToolbarButton\",factory:(e,t,n,r)=>({...gg.sketch({...r.button(),action:e=>{ZL(e,r)},buttonBehaviours:jd({dump:r.button().buttonBehaviours},[Ow.config({others:{toolbarSandbox:t=>((e,t,n)=>{const r=Sa();return{dom:{tag:\"div\",attributes:{id:r.id}},behaviours:$l([hp.config({mode:\"special\",onEscape:e=>(vd.close(e),L.some(!0))}),vd.config({onOpen:(o,i)=>{n.fetch().get((o=>{tE(e,i,n,t.layouts,o),r.link(e.element),hp.focusIn(i)}))},onClose:()=>{Rp.off(e),Ap.focus(e),r.unlink(e.element)},isPartOf:(t,n,r)=>Ma(n,r)||Ma(e,r),getAttachPoint:()=>n.lazySink(e).getOrDie()}),jl.config({channels:{...xd({isExtraPart:S,...n.fireDismissalEventInstead.map((e=>({fireEventInstead:{event:e.event}}))).getOr({})}),...kd({doReposition:()=>{vd.getState(Ow.getCoupled(e,\"toolbarSandbox\")).each((r=>{eE(e,r,n,t.layouts)}))}})}})])}})(t,n,e)}})])}),apis:{setGroups:(t,r)=>{vd.getState(Ow.getCoupled(t,\"toolbarSandbox\")).each((o=>{tE(t,o,e,n.layouts,r)}))},reposition:t=>{vd.getState(Ow.getCoupled(t,\"toolbarSandbox\")).each((r=>{eE(t,r,e,n.layouts)}))},toggle:e=>{ZL(e,r)},getToolbar:e=>vd.getState(Ow.getCoupled(e,\"toolbarSandbox\")),isOpen:e=>vd.isOpen(Ow.getCoupled(e,\"toolbarSandbox\"))}}),configFields:JL(),partFields:QL(),apis:{setGroups:(e,t,n)=>{e.setGroups(t,n)},reposition:(e,t)=>{e.reposition(t)},toggle:(e,t)=>{e.toggle(t)},getToolbar:(e,t)=>e.getToolbar(t),isOpen:(e,t)=>e.isOpen(t)}}),rE=b([to(\"items\"),Ha([\"itemSelector\"]),Yd(\"tgroupBehaviours\",[hp])]),oE=b([gh({name:\"items\",unit:\"item\"})]),iE=jh({name:\"ToolbarGroup\",configFields:rE(),partFields:oE(),factory:(e,t,n,r)=>({uid:e.uid,dom:e.dom,components:t,behaviours:Id(e.tgroupBehaviours,[hp.config({mode:\"flow\",selector:e.markers.itemSelector})]),domModification:{attributes:{role:\"toolbar\"}}})}),sE=e=>P(e,(e=>ga(e))),aE=(e,t,n)=>{VL(e,n,(r=>{n.overflowGroups.set(r),t.getOpt(e).each((e=>{nE.setGroups(e,sE(r))}))}))},lE=jh({name:\"SplitFloatingToolbar\",configFields:GL(),partFields:KL(),factory:(e,t,n,r)=>{const o=vg(nE.sketch({fetch:()=>Yw((t=>{t(sE(e.overflowGroups.get()))})),layouts:{onLtr:()=>[vl,gl],onRtl:()=>[gl,vl],onBottomLtr:()=>[bl,yl],onBottomRtl:()=>[yl,bl]},getBounds:n.getOverflowBounds,lazySink:e.lazySink,fireDismissalEventInstead:{},markers:{toggledClass:e.markers.overflowToggledClass},parts:{button:r[\"overflow-button\"](),toolbar:r.overflow()}}));return{uid:e.uid,dom:e.dom,components:t,behaviours:Id(e.splitToolbarBehaviours,[Ow.config({others:{overflowGroup:()=>iE.sketch({...r[\"overflow-group\"](),items:[o.asSpec()]})}})]),apis:{setGroups:(t,n)=>{e.builtGroups.set(P(n,t.getSystem().build)),aE(t,o,e)},refresh:t=>aE(t,o,e),toggle:e=>{o.getOpt(e).each((e=>{nE.toggle(e)}))},isOpen:e=>o.getOpt(e).map(nE.isOpen).getOr(!1),reposition:e=>{o.getOpt(e).each((e=>{nE.reposition(e)}))},getOverflow:e=>o.getOpt(e).bind(nE.getToolbar)},domModification:{attributes:{role:\"group\"}}}},apis:{setGroups:(e,t,n)=>{e.setGroups(t,n)},refresh:(e,t)=>{e.refresh(t)},reposition:(e,t)=>{e.reposition(t)},toggle:(e,t)=>{e.toggle(t)},isOpen:(e,t)=>e.isOpen(t),getOverflow:(e,t)=>e.getOverflow(t)}}),cE=b([Ha([\"closedClass\",\"openClass\",\"shrinkingClass\",\"growingClass\",\"overflowToggledClass\"]),Wa(\"onOpened\"),Wa(\"onClosed\")].concat(qL())),uE=b([mh({factory:yM,schema:gM(),name:\"primary\"}),mh({factory:yM,schema:gM(),name:\"overflow\",overrides:e=>({toolbarBehaviours:$l([_L.config({dimension:{property:\"height\"},closedClass:e.markers.closedClass,openClass:e.markers.openClass,shrinkingClass:e.markers.shrinkingClass,growingClass:e.markers.growingClass,onShrunk:t=>{Ah(t,e,\"overflow-button\").each((e=>{Rp.off(e),Ap.focus(e)})),e.onClosed(t)},onGrown:t=>{hp.focusIn(t),e.onOpened(t)},onStartGrow:t=>{Ah(t,e,\"overflow-button\").each(Rp.on)}}),hp.config({mode:\"acyclic\",onEscape:t=>(Ah(t,e,\"overflow-button\").each(Ap.focus),L.some(!0))})])})}),fh({name:\"overflow-button\",overrides:e=>({buttonBehaviours:$l([Rp.config({toggleClass:e.markers.overflowToggledClass,aria:{mode:\"pressed\"},toggleOnExecute:!1})])})}),fh({name:\"overflow-group\"})]),dE=(e,t)=>{Ah(e,t,\"overflow-button\").bind((()=>Ah(e,t,\"overflow\"))).each((n=>{hE(e,t),_L.toggleGrow(n)}))},hE=(e,t)=>{Ah(e,t,\"overflow\").each((n=>{VL(e,t,(e=>{const t=P(e,(e=>ga(e)));yM.setGroups(n,t)})),Ah(e,t,\"overflow-button\").each((e=>{_L.hasGrown(n)&&Rp.on(e)})),_L.refresh(n)}))},mE=jh({name:\"SplitSlidingToolbar\",configFields:cE(),partFields:uE(),factory:(e,t,n,r)=>{const o=\"alloy.toolbar.toggle\";return{uid:e.uid,dom:e.dom,components:t,behaviours:Id(e.splitToolbarBehaviours,[Ow.config({others:{overflowGroup:e=>iE.sketch({...r[\"overflow-group\"](),items:[gg.sketch({...r[\"overflow-button\"](),action:t=>{Ri(e,o)}})]})}}),xp(\"toolbar-toggle-events\",[zi(o,(t=>{dE(t,e)}))])]),apis:{setGroups:(t,n)=>{((t,n)=>{const r=P(n,t.getSystem().build);e.builtGroups.set(r)})(t,n),hE(t,e)},refresh:t=>hE(t,e),toggle:t=>dE(t,e),isOpen:t=>((e,t)=>Ah(e,t,\"overflow\").map(_L.hasGrown).getOr(!1))(t,e)},domModification:{attributes:{role:\"group\"}}}},apis:{setGroups:(e,t,n)=>{e.setGroups(t,n)},refresh:(e,t)=>{e.refresh(t)},toggle:(e,t)=>{e.toggle(t)},isOpen:(e,t)=>e.isOpen(t)}}),fE=e=>{const t=e.title.fold((()=>({})),(e=>({attributes:{title:e}})));return{dom:{tag:\"div\",classes:[\"tox-toolbar__group\"],...t},components:[iE.parts.items({})],items:e.items,markers:{itemSelector:\"*:not(.tox-split-button) > .tox-tbtn:not([disabled]), .tox-split-button:not([disabled]), .tox-toolbar-nav-js:not([disabled])\"},tgroupBehaviours:$l([Fx.config({}),Ap.config({})])}},pE=e=>iE.sketch(fE(e)),gE=(e,t)=>{const n=Qi((t=>{const n=P(e.initGroups,pE);yM.setGroups(t,n)}));return $l([Qb(e.providers.isDisabled),Gb(),hp.config({mode:t,onEscape:e.onEscape,selector:\".tox-toolbar__group\"}),xp(\"toolbar-events\",[n])])},vE=e=>{const t=e.cyclicKeying?\"cyclic\":\"acyclic\";return{uid:e.uid,dom:{tag:\"div\",classes:[\"tox-toolbar-overlord\"]},parts:{\"overflow-group\":fE({title:L.none(),items:[]}),\"overflow-button\":SS({name:\"more\",icon:L.some(\"more-drawer\"),enabled:!0,tooltip:L.some(\"More...\"),primary:!1,buttonType:L.none(),borderless:!1},L.none(),e.providers)},splitToolbarBehaviours:gE(e,t)}},yE=e=>{const t=vE(e),n=lE.parts.primary({dom:{tag:\"div\",classes:[\"tox-toolbar__primary\"]}});return lE.sketch({...t,lazySink:e.getSink,getOverflowBounds:()=>{const t=e.moreDrawerData.lazyHeader().element,n=Un(t),r=Je(t),o=Un(r),i=Math.max(r.dom.scrollHeight,o.height);return Wn(n.x+4,o.y,n.width-8,i)},parts:{...t.parts,overflow:{dom:{tag:\"div\",classes:[\"tox-toolbar__overflow\"],attributes:e.attributes}}},components:[n],markers:{overflowToggledClass:\"tox-tbtn--enabled\"}})},bE=e=>{const t=mE.parts.primary({dom:{tag:\"div\",classes:[\"tox-toolbar__primary\"]}}),n=mE.parts.overflow({dom:{tag:\"div\",classes:[\"tox-toolbar__overflow\"]}}),r=vE(e);return mE.sketch({...r,components:[t,n],markers:{openClass:\"tox-toolbar__overflow--open\",closedClass:\"tox-toolbar__overflow--closed\",growingClass:\"tox-toolbar__overflow--growing\",shrinkingClass:\"tox-toolbar__overflow--shrinking\",overflowToggledClass:\"tox-tbtn--enabled\"},onOpened:e=>{e.getSystem().broadcastOn([WM()],{type:\"opened\"})},onClosed:e=>{e.getSystem().broadcastOn([WM()],{type:\"closed\"})}})},_E=e=>{const t=e.cyclicKeying?\"cyclic\":\"acyclic\";return yM.sketch({uid:e.uid,dom:{tag:\"div\",classes:[\"tox-toolbar\"].concat(e.type===Eg.scrolling?[\"tox-toolbar--scrolling\"]:[])},components:[yM.parts.groups({})],toolbarBehaviours:gE(e,t)})},wE=dM.optional({factory:oL,name:\"menubar\",schema:[to(\"backstage\")]}),xE=dM.optional({factory:{sketch:e=>pM.sketch({uid:e.uid,dom:e.dom,listBehaviours:$l([hp.config({mode:\"acyclic\",selector:\".tox-toolbar\"})]),makeItem:()=>_E({type:e.type,uid:us(\"multiple-toolbar-item\"),cyclicKeying:!1,initGroups:[],providers:e.providers,onEscape:()=>(e.onEscape(),L.some(!0))}),setupItem:(e,t,n,r)=>{yM.setGroups(t,n)},shell:!0})},name:\"multiple-toolbar\",schema:[to(\"dom\"),to(\"onEscape\")]}),CE=dM.optional({factory:{sketch:e=>{const t=(e=>e.type===Eg.sliding?bE:e.type===Eg.floating?yE:_E)(e);return t({type:e.type,uid:e.uid,onEscape:()=>(e.onEscape(),L.some(!0)),cyclicKeying:!1,initGroups:[],getSink:e.getSink,providers:e.providers,moreDrawerData:{lazyToolbar:e.lazyToolbar,lazyMoreButton:e.lazyMoreButton,lazyHeader:e.lazyHeader},attributes:e.attributes})}},name:\"toolbar\",schema:[to(\"dom\"),to(\"onEscape\"),to(\"getSink\")]}),kE=dM.optional({factory:{sketch:e=>{const t=e.editor,n=e.sticky?JM:wM;return{uid:e.uid,dom:e.dom,components:e.components,behaviours:$l(n(t,e.sharedBackstage))}}},name:\"header\",schema:[to(\"dom\")]}),DE=dM.optional({factory:{sketch:e=>({uid:e.uid,dom:e.dom,components:[{dom:{tag:\"a\",attributes:{href:\"https://www.tiny.cloud/tinymce-self-hosted-premium-features/?utm_source=TinyMCE&utm_medium=SPAP&utm_campaign=SPAP&utm_id=editorreferral\",rel:\"noopener\",target:\"_blank\",\"aria-hidden\":\"true\"},classes:[\"tox-promotion-link\"],innerHtml:\"⚡️Upgrade\"}}]})},name:\"promotion\",schema:[to(\"dom\")]}),SE=dM.optional({name:\"socket\",schema:[to(\"dom\")]}),AE=dM.optional({factory:{sketch:e=>({uid:e.uid,dom:{tag:\"div\",classes:[\"tox-sidebar\"],attributes:{role:\"complementary\"}},components:[{dom:{tag:\"div\",classes:[\"tox-sidebar__slider\"]},components:[],behaviours:$l([Fx.config({}),Ap.config({}),_L.config({dimension:{property:\"width\"},closedClass:\"tox-sidebar--sliding-closed\",openClass:\"tox-sidebar--sliding-open\",shrinkingClass:\"tox-sidebar--sliding-shrinking\",growingClass:\"tox-sidebar--sliding-growing\",onShrunk:e=>{Vh.getCurrent(e).each(SL.hideAllSlots),Ri(e,OL)},onGrown:e=>{Ri(e,OL)},onStartGrow:e=>{$i(e,FL,{width:Tt(e.element,\"width\").getOr(\"\")})},onStartShrink:e=>{$i(e,FL,{width:Vt(e.element)+\"px\"})}}),wp.config({}),Vh.config({find:e=>{const t=wp.contents(e);return ne(t)}})])}],behaviours:$l([lD(0),xp(\"sidebar-sliding-events\",[zi(FL,((e,t)=>{St(e.element,\"width\",t.event.width)})),zi(OL,((e,t)=>{Bt(e.element,\"width\")}))])])})},name:\"sidebar\",schema:[to(\"dom\")]}),ME=dM.optional({factory:{sketch:e=>({uid:e.uid,dom:{tag:\"div\",attributes:{\"aria-hidden\":\"true\"},classes:[\"tox-throbber\"],styles:{display:\"none\"}},behaviours:$l([wp.config({}),$L.config({focus:!1}),Vh.config({find:e=>ne(e.components())})]),components:[]})},name:\"throbber\",schema:[to(\"dom\")]});var LE=jh({name:\"OuterContainer\",factory:(e,t,n)=>{const r={getSocket:t=>uM.getPart(t,e,\"socket\"),setSidebar:(t,n,r)=>{uM.getPart(t,e,\"sidebar\").each((e=>((e,t,n)=>{Vh.getCurrent(e).each((e=>{wp.set(e,[EL(t)]);const r=null==n?void 0:n.toLowerCase();i(r)&&ye(t,r)&&Vh.getCurrent(e).each((t=>{SL.showSlot(t,r),_L.immediateGrow(e),Bt(e.element,\"width\")}))}))})(e,n,r)))},toggleSidebar:(t,n)=>{uM.getPart(t,e,\"sidebar\").each((e=>((e,t)=>{Vh.getCurrent(e).each((e=>{Vh.getCurrent(e).each((n=>{_L.hasGrown(e)?SL.isShowing(n,t)?_L.shrink(e):(SL.hideAllSlots(n),SL.showSlot(n,t)):(SL.hideAllSlots(n),SL.showSlot(n,t),_L.grow(e))}))}))})(e,n)))},whichSidebar:t=>uM.getPart(t,e,\"sidebar\").bind(TL).getOrNull(),getHeader:t=>uM.getPart(t,e,\"header\"),getToolbar:t=>uM.getPart(t,e,\"toolbar\"),setToolbar:(t,n)=>{uM.getPart(t,e,\"toolbar\").each((e=>{const t=P(n,pE);e.getApis().setGroups(e,t)}))},setToolbars:(t,n)=>{uM.getPart(t,e,\"multiple-toolbar\").each((e=>{const t=P(n,(e=>P(e,pE)));pM.setItems(e,t)}))},refreshToolbar:t=>{uM.getPart(t,e,\"toolbar\").each((e=>e.getApis().refresh(e)))},toggleToolbarDrawer:t=>{uM.getPart(t,e,\"toolbar\").each((e=>{((e,t)=>{null!=e?L.some(t(e)):L.none()})(e.getApis().toggle,(t=>t(e)))}))},isToolbarDrawerToggled:t=>uM.getPart(t,e,\"toolbar\").bind((e=>L.from(e.getApis().isOpen).map((t=>t(e))))).getOr(!1),getThrobber:t=>uM.getPart(t,e,\"throbber\"),focusToolbar:t=>{uM.getPart(t,e,\"toolbar\").orThunk((()=>uM.getPart(t,e,\"multiple-toolbar\"))).each((e=>{hp.focusIn(e)}))},setMenubar:(t,n)=>{uM.getPart(t,e,\"menubar\").each((e=>{oL.setMenus(e,n)}))},focusMenubar:t=>{uM.getPart(t,e,\"menubar\").each((e=>{oL.focus(e)}))}};return{uid:e.uid,dom:e.dom,components:t,apis:r,behaviours:e.behaviours}},configFields:[to(\"dom\"),to(\"behaviours\")],partFields:[kE,wE,CE,xE,SE,AE,DE,ME],apis:{getSocket:(e,t)=>e.getSocket(t),setSidebar:(e,t,n,r)=>{e.setSidebar(t,n,r)},toggleSidebar:(e,t,n)=>{e.toggleSidebar(t,n)},whichSidebar:(e,t)=>e.whichSidebar(t),getHeader:(e,t)=>e.getHeader(t),getToolbar:(e,t)=>e.getToolbar(t),setToolbar:(e,t,n)=>{e.setToolbar(t,n)},setToolbars:(e,t,n)=>{e.setToolbars(t,n)},refreshToolbar:(e,t)=>e.refreshToolbar(t),toggleToolbarDrawer:(e,t)=>{e.toggleToolbarDrawer(t)},isToolbarDrawerToggled:(e,t)=>e.isToolbarDrawerToggled(t),getThrobber:(e,t)=>e.getThrobber(t),setMenubar:(e,t,n)=>{e.setMenubar(t,n)},focusMenubar:(e,t)=>{e.focusMenubar(t)},focusToolbar:(e,t)=>{e.focusToolbar(t)}}});const EE={file:{title:\"File\",items:\"newdocument restoredraft | preview | export print | deleteallconversations\"},edit:{title:\"Edit\",items:\"undo redo | cut copy paste pastetext | selectall | searchreplace\"},view:{title:\"View\",items:\"code | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments\"},insert:{title:\"Insert\",items:\"image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents footnotes | mergetags | insertdatetime\"},format:{title:\"Format\",items:\"bold italic underline strikethrough superscript subscript codeformat | styles blocks fontfamily fontsize align lineheight | forecolor backcolor | language | removeformat\"},tools:{title:\"Tools\",items:\"spellchecker spellcheckerlanguage | autocorrect capitalization | a11ycheck code wordcount\"},table:{title:\"Table\",items:\"inserttable | cell row column | advtablesort | tableprops deletetable\"},help:{title:\"Help\",items:\"help\"}},TE=e=>e.split(\" \"),FE=(e,t)=>{const n={...EE,...t.menus},r=se(t.menus).length>0,o=void 0===t.menubar||!0===t.menubar?TE(\"file edit view insert format tools table help\"):TE(!1===t.menubar?\"\":t.menubar),s=j(o,(e=>{const n=ye(EE,e);return r?n||ve(t.menus,e).exists((e=>ye(e,\"items\"))):n})),a=P(s,(r=>{const o=n[r];return((e,t,n)=>{const r=Kg(n).split(/[ ,]/);return{text:e.title,getItems:()=>G(e.items,(e=>{const n=e.toLowerCase();return 0===n.trim().length||$(r,(e=>e===n))?[]:\"separator\"===n||\"|\"===n?[{type:\"separator\"}]:t.menuItems[n]?[t.menuItems[n]]:[]}))}})({title:o.title,items:TE(o.items)},t,e)}));return j(a,(e=>e.getItems().length>0&&$(e.getItems(),(e=>i(e)||\"separator\"!==e.type))))},OE=e=>{const t=()=>{e._skinLoaded=!0,(e=>{e.dispatch(\"SkinLoaded\")})(e)};return()=>{e.initialized?t():e.on(\"init\",t)}},BE=(e,t,n)=>(e.on(\"remove\",(()=>n.unload(t))),n.load(t)),RE=(e,t)=>BE(e,t+\"/skin.min.css\",e.ui.styleSheetLoader),$E=(e,t)=>{var n;if(n=Fe.fromDom(e.getElement()),dt(n).isSome()){return BE(e,t+\"/skin.shadowdom.min.css\",Fg.DOM.styleSheetLoader)}return Promise.resolve()},NE=(e,t)=>{const n=wv(t);n&&t.contentCSS.push(n+(e?\"/content.inline\":\"/content\")+\".min.css\"),!bv(t)&&i(n)?Promise.all([RE(t,n),$E(t,n)]).then(OE(t),((e,t)=>()=>((e,t)=>{e.dispatch(\"SkinLoadError\",t)})(e,{message:t}))(t,\"Skin could not be loaded\")):OE(t)()},YE=x(NE,!1),PE=x(NE,!0),IE=(e,t)=>n=>{const r=dc(),o=()=>{n.setActive(e.formatter.match(t));const o=e.formatter.formatChanged(t,n.setActive);r.set(o)};return e.initialized?o():e.once(\"init\",o),()=>{e.off(\"init\",o),r.clear()}},HE=(e,t,n)=>r=>{const o=()=>n(r),i=()=>{n(r),e.on(t,o)};return e.initialized?i():e.once(\"init\",i),()=>{e.off(\"init\",i),e.off(t,o)}},jE=e=>t=>()=>{e.undoManager.transact((()=>{e.focus(),e.execCommand(\"mceToggleFormat\",!1,t.format)}))},WE=(e,t)=>()=>e.execCommand(t),zE=(e,t,n)=>{const r=(e,r,i,s)=>{const a=t.shared.providers.translate(e.title);if(\"separator\"===e.type)return L.some({type:\"separator\",text:a});if(\"submenu\"===e.type){const t=G(e.getStyleItems(),(e=>o(e,r,s)));return 0===r&&t.length<=0?L.none():L.some({type:\"nestedmenuitem\",text:a,enabled:t.length>0,getSubmenuItems:()=>G(e.getStyleItems(),(e=>o(e,r,s)))})}return L.some({type:\"togglemenuitem\",text:a,icon:e.icon,active:e.isSelected(s),enabled:!i,onAction:n.onAction(e),...e.getStylePreview().fold((()=>({})),(e=>({meta:{style:e}})))})},o=(e,t,o)=>{const i=\"formatter\"===e.type&&n.isInvalid(e);return 0===t?i?[]:r(e,t,!1,o).toArray():r(e,t,i,o).toArray()},i=e=>{const t=n.getCurrentValue(),r=n.shouldHide?0:1;return G(e,(e=>o(e,r,t)))};return{validateItems:i,getFetch:(e,t)=>(n,r)=>{const o=t(),s=i(o);r(zD(s,Yv.CLOSE_ON_EXECUTE,e,{isHorizontalMenu:!1,search:L.none()}))}}},UE=(e,t,n)=>{const r=n.dataset,o=\"basic\"===r.type?()=>P(r.data,(e=>OA(e,n.isSelectedFor,n.getPreviewFor))):r.getData;return{items:zE(0,t,n),getStyleItems:o}},VE=(e,t,n)=>{const{items:r,getStyleItems:o}=UE(0,t,n),i=HE(e,\"NodeChange\",(e=>{const t=e.getComponent();n.updateText(t)}));return PD({text:n.icon.isSome()?L.none():n.text,icon:n.icon,tooltip:L.from(n.tooltip),role:L.none(),fetch:r.getFetch(t,o),onSetup:i,getApi:e=>({getComponent:b(e)}),columns:1,presets:\"normal\",classes:n.icon.isSome()?[]:[\"bespoke\"],dropdownBehaviours:[]},\"tox-tbtn\",t.shared)};var qE;!function(e){e[e.SemiColon=0]=\"SemiColon\",e[e.Space=1]=\"Space\"}(qE||(qE={}));const GE=(e,t,n)=>{const r=(e=>P(e,(e=>{let t=e,n=e;const r=e.split(\"=\");return r.length>1&&(t=r[0],n=r[1]),{title:t,format:n}})))(((e,t)=>t===qE.SemiColon?e.replace(/;$/,\"\").split(\";\"):e.split(\" \"))(e.options.get(t),n));return{type:\"basic\",data:r}},KE=[{title:\"Left\",icon:\"align-left\",format:\"alignleft\",command:\"JustifyLeft\"},{title:\"Center\",icon:\"align-center\",format:\"aligncenter\",command:\"JustifyCenter\"},{title:\"Right\",icon:\"align-right\",format:\"alignright\",command:\"JustifyRight\"},{title:\"Justify\",icon:\"align-justify\",format:\"alignjustify\",command:\"JustifyFull\"}],XE=e=>{const t={type:\"basic\",data:KE};return{tooltip:\"Align\",text:L.none(),icon:L.some(\"align-left\"),isSelectedFor:t=>()=>e.formatter.match(t),getCurrentValue:L.none,getPreviewFor:e=>L.none,onAction:t=>()=>U(KE,(e=>e.format===t.format)).each((t=>e.execCommand(t.command))),updateText:t=>{const n=U(KE,(t=>e.formatter.match(t.format))),r=n.fold(b(\"left\"),(e=>e.title.toLowerCase()));$i(t,YD,{icon:`align-${r}`})},dataset:t,shouldHide:!1,isInvalid:t=>!e.formatter.canApply(t.format)}},JE=(e,t)=>{const n=t(),r=P(n,(e=>e.format));return L.from(e.formatter.closest(r)).bind((e=>U(n,(t=>t.format===e)))).orThunk((()=>Ce(e.formatter.match(\"p\"),{title:\"Paragraph\",format:\"p\"})))},QE=e=>{const t=\"Paragraph\",n=GE(e,\"block_formats\",qE.SemiColon);return{tooltip:\"Blocks\",text:L.some(t),icon:L.none(),isSelectedFor:t=>()=>e.formatter.match(t),getCurrentValue:L.none,getPreviewFor:t=>()=>{const n=e.formatter.get(t);return n?L.some({tag:n.length>0&&(n[0].inline||n[0].block)||\"div\",styles:e.dom.parseStyle(e.formatter.getCssText(t))}):L.none()},onAction:jE(e),updateText:r=>{const o=JE(e,(()=>n.data)).fold(b(t),(e=>e.title));$i(r,ND,{text:o})},dataset:n,shouldHide:!1,isInvalid:t=>!e.formatter.canApply(t.format)}},ZE=[\"-apple-system\",\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",\"sans-serif\"],eT=e=>{const t=e.split(/\\s*,\\s*/);return P(t,(e=>e.replace(/^['\"]+|['\"]+$/g,\"\")))},tT=e=>{const t=\"System Font\",n=()=>{const n=e=>e?eT(e)[0]:\"\",o=e.queryCommandValue(\"FontName\"),i=r.data,s=o?o.toLowerCase():\"\",a=U(i,(e=>{const t=e.format;return t.toLowerCase()===s||n(t).toLowerCase()===n(s).toLowerCase()})).orThunk((()=>Ce((e=>0===e.indexOf(\"-apple-system\")&&(()=>{const t=eT(e.toLowerCase());return K(ZE,(e=>t.indexOf(e.toLowerCase())>-1))})())(s),{title:t,format:s})));return{matchOpt:a,font:o}},r=GE(e,\"font_family_formats\",qE.SemiColon);return{tooltip:\"Fonts\",text:L.some(t),icon:L.none(),isSelectedFor:e=>t=>t.exists((t=>t.format===e)),getCurrentValue:()=>{const{matchOpt:e}=n();return e},getPreviewFor:e=>()=>L.some({tag:\"div\",styles:-1===e.indexOf(\"dings\")?{\"font-family\":e}:{}}),onAction:t=>()=>{e.undoManager.transact((()=>{e.focus(),e.execCommand(\"FontName\",!1,t.format)}))},updateText:e=>{const{matchOpt:t,font:r}=n(),o=t.fold(b(r),(e=>e.title));$i(e,ND,{text:o})},dataset:r,shouldHide:!1,isInvalid:S}},nT={\"8pt\":\"1\",\"10pt\":\"2\",\"12pt\":\"3\",\"14pt\":\"4\",\"18pt\":\"5\",\"24pt\":\"6\",\"36pt\":\"7\"},rT={\"xx-small\":\"7pt\",\"x-small\":\"8pt\",small:\"10pt\",medium:\"12pt\",large:\"14pt\",\"x-large\":\"18pt\",\"xx-large\":\"24pt\"},oT=(e,t)=>/[0-9.]+px$/.test(e)?((e,t)=>{const n=Math.pow(10,t);return Math.round(e*n)/n})(72*parseInt(e,10)/96,t||0)+\"pt\":ve(rT,e).getOr(e),iT=e=>ve(nT,e).getOr(\"\"),sT=e=>{const t=()=>{let t=L.none();const n=r.data,o=e.queryCommandValue(\"FontSize\");if(o)for(let e=3;t.isNone()&&e>=0;e--){const r=oT(o,e),i=iT(r);t=U(n,(e=>e.format===o||e.format===r||e.format===i))}return{matchOpt:t,size:o}},n=b(L.none),r=GE(e,\"font_size_formats\",qE.Space);return{tooltip:\"Font sizes\",text:L.some(\"12pt\"),icon:L.none(),isSelectedFor:e=>t=>t.exists((t=>t.format===e)),getPreviewFor:n,getCurrentValue:()=>{const{matchOpt:e}=t();return e},onAction:t=>()=>{e.undoManager.transact((()=>{e.focus(),e.execCommand(\"FontSize\",!1,t.format)}))},updateText:e=>{const{matchOpt:n,size:r}=t(),o=n.fold(b(r),(e=>e.title));$i(e,ND,{text:o})},dataset:r,shouldHide:!1,isInvalid:S}},aT=(e,t)=>{const n=\"Paragraph\";return{tooltip:\"Formats\",text:L.some(n),icon:L.none(),isSelectedFor:t=>()=>e.formatter.match(t),getCurrentValue:L.none,getPreviewFor:t=>()=>{const n=e.formatter.get(t);return void 0!==n?L.some({tag:n.length>0&&(n[0].inline||n[0].block)||\"div\",styles:e.dom.parseStyle(e.formatter.getCssText(t))}):L.none()},onAction:jE(e),updateText:t=>{const r=e=>MA(e)?G(e.items,r):LA(e)?[{title:e.title,format:e.format}]:[],o=G(FA(e),r),i=JE(e,b(o)).fold(b(n),(e=>e.title));$i(t,ND,{text:i})},shouldHide:qg(e),isInvalid:t=>!e.formatter.canApply(t.format),dataset:t}};var lT=Object.freeze({__proto__:null,events:(e,t)=>{const n=(n,r)=>{e.updateState.each((e=>{const o=e(n,r);t.set(o)})),e.renderComponents.each((o=>{const i=o(r,t.get());(e.reuseDom?fp:mp)(n,i)}))};return Hi([zi(mi(),((t,r)=>{const o=r;if(!o.universal){const r=e.channel;R(o.channels,r)&&n(t,o.data)}})),Qi(((t,r)=>{e.initialData.each((e=>{n(t,e)}))}))])}});var cT=Object.freeze({__proto__:null,getState:(e,t,n)=>n}),uT=[to(\"channel\"),uo(\"renderComponents\"),uo(\"updateState\"),uo(\"initialData\"),ko(\"reuseDom\",!0)];const dT=Yl({fields:uT,name:\"reflecting\",active:lT,apis:cT,state:Object.freeze({__proto__:null,init:()=>{const e=Mo(L.none());return{readState:()=>e.get().getOr(\"none\"),get:e.get,set:e.set,clear:()=>e.set(L.none())}}})}),hT=b([to(\"toggleClass\"),to(\"fetch\"),Ua(\"onExecute\"),bo(\"getHotspot\",L.some),bo(\"getAnchorOverrides\",b({})),Pc(),Ua(\"onItemExecute\"),uo(\"lazySink\"),to(\"dom\"),Wa(\"onOpen\"),Yd(\"splitDropdownBehaviours\",[Ow,hp,Ap]),bo(\"matchWidth\",!1),bo(\"useMinWidth\",!1),bo(\"eventOrder\",{}),uo(\"role\")].concat(Jw())),mT=mh({factory:gg,schema:[to(\"dom\")],name:\"arrow\",defaults:()=>({buttonBehaviours:$l([Ap.revoke()])}),overrides:e=>({dom:{tag:\"span\",attributes:{role:\"presentation\"}},action:t=>{t.getSystem().getByUid(e.uid).each(Ni)},buttonBehaviours:$l([Rp.config({toggleOnExecute:!1,toggleClass:e.toggleClass})])})}),fT=mh({factory:gg,schema:[to(\"dom\")],name:\"button\",defaults:()=>({buttonBehaviours:$l([Ap.revoke()])}),overrides:e=>({dom:{tag:\"span\",attributes:{role:\"presentation\"}},action:t=>{t.getSystem().getByUid(e.uid).each((n=>{e.onExecute(n,t)}))}})}),pT=b([mT,fT,ph({factory:{sketch:e=>({uid:e.uid,dom:{tag:\"span\",styles:{display:\"none\"},attributes:{\"aria-hidden\":\"true\"},innerHtml:e.text}})},schema:[to(\"text\")],name:\"aria-descriptor\"}),fh({schema:[Ia()],name:\"menu\",defaults:e=>({onExecute:(t,n)=>{t.getSystem().getByUid(e.uid).each((r=>{e.onItemExecute(r,t,n)}))}})}),Hw()]),gT=jh({name:\"SplitDropdown\",configFields:hT(),partFields:pT(),factory:(e,t,n,r)=>{const o=e=>{Vh.getCurrent(e).each((e=>{vm.highlightFirst(e),hp.focusIn(e)}))},i=t=>{Uw(e,_,t,r,o,dg.HighlightMenuAndItem).get(v)},s=t=>{const n=Mh(t,e,\"button\");return Ni(n),L.some(!0)},a={...Hi([Qi(((t,n)=>{Ah(t,e,\"aria-descriptor\").each((e=>{const n=us(\"aria\");yt(e.element,\"id\",n),yt(t.element,\"aria-describedby\",n)}))}))]),...Yp(L.some(i))},l={repositionMenus:e=>{Rp.isOn(e)&&Xw(e)}};return{uid:e.uid,dom:e.dom,components:t,apis:l,eventOrder:{...e.eventOrder,[fi()]:[\"disabling\",\"toggling\",\"alloy.base.behaviour\"]},events:a,behaviours:Id(e.splitDropdownBehaviours,[Ow.config({others:{sandbox:t=>{const n=Mh(t,e,\"arrow\");return Kw(e,t,{onOpen:()=>{Rp.on(n),Rp.on(t)},onClose:()=>{Rp.off(n),Rp.off(t)}})}}}),hp.config({mode:\"special\",onSpace:s,onEnter:s,onDown:e=>(i(e),L.some(!0))}),Ap.config({}),Rp.config({toggleOnExecute:!1,aria:{mode:\"expanded\"}})]),domModification:{attributes:{role:e.role.getOr(\"button\"),\"aria-haspopup\":!0}}}},apis:{repositionMenus:(e,t)=>e.repositionMenus(t)}}),vT=e=>({isEnabled:()=>!sm.isDisabled(e),setEnabled:t=>sm.set(e,!t)}),yT=e=>({setActive:t=>{Rp.set(e,t)},isActive:()=>Rp.isOn(e),isEnabled:()=>!sm.isDisabled(e),setEnabled:t=>sm.set(e,!t)}),bT=(e,t)=>e.map((e=>({\"aria-label\":t.translate(e),title:t.translate(e)}))).getOr({}),_T=us(\"focus-button\"),wT=(e,t,n,r,o,i)=>({dom:{tag:\"button\",classes:[\"tox-tbtn\"].concat(t.isSome()?[\"tox-tbtn--select\"]:[]),attributes:bT(n,i)},components:o_([e.map((e=>BD(e,i.icons))),t.map((e=>$D(e,\"tox-tbtn\",i)))]),eventOrder:{[Vo()]:[\"focusing\",\"alloy.base.behaviour\",\"common-button-display-events\"]},buttonBehaviours:$l([Qb(i.isDisabled),Gb(),xp(\"common-button-display-events\",[zi(Vo(),((e,t)=>{t.event.prevent(),Ri(e,_T)}))])].concat(r.map((n=>dT.config({channel:n,initialData:{icon:e,text:t},renderComponents:(e,t)=>o_([e.icon.map((e=>BD(e,i.icons))),e.text.map((e=>$D(e,\"tox-tbtn\",i)))])}))).toArray()).concat(o.getOr([])))}),xT=(e,t,n)=>{const r=Mo(v),o=wT(e.icon,e.text,e.tooltip,L.none(),L.none(),n);return gg.sketch({dom:o.dom,components:o.components,eventOrder:FD,buttonBehaviours:$l([xp(\"toolbar-button-events\",[(i={onAction:e.onAction,getApi:t.getApi},ts(((e,t)=>{Zb(i,e)((t=>{$i(e,TD,{buttonApi:t}),i.onAction(t)}))}))),e_(t,r),t_(t,r)]),Qb((()=>!e.enabled||n.isDisabled())),Gb()].concat(t.toolbarButtonBehaviours))});var i},CT=(e,t,n)=>xT(e,{toolbarButtonBehaviours:n.length>0?[xp(\"toolbarButtonWith\",n)]:[],getApi:vT,onSetup:e.onSetup},t),kT=(e,t,n)=>xT(e,{toolbarButtonBehaviours:[wp.config({}),Rp.config({toggleClass:\"tox-tbtn--enabled\",aria:{mode:\"pressed\"},toggleOnExecute:!1})].concat(n.length>0?[xp(\"toolbarToggleButtonWith\",n)]:[]),getApi:yT,onSetup:e.onSetup},t),DT=(e,t,n)=>r=>Yw((e=>t.fetch(e))).map((o=>L.from(ux(mr(mw(us(\"menu-value\"),o,(n=>{t.onItemAction(e(r),n)}),t.columns,t.presets,Yv.CLOSE_ON_EXECUTE,t.select.getOr(S),n),{movement:pw(t.columns,t.presets),menuBehaviours:Bb(\"auto\"!==t.columns?[]:[Qi(((e,n)=>{Fb(e,4,Xv(t.presets)).each((({numRows:t,numColumns:n})=>{hp.setGridSize(e,t,n)}))}))])}))))),ST=[{name:\"history\",items:[\"undo\",\"redo\"]},{name:\"styles\",items:[\"styles\"]},{name:\"formatting\",items:[\"bold\",\"italic\"]},{name:\"alignment\",items:[\"alignleft\",\"aligncenter\",\"alignright\",\"alignjustify\"]},{name:\"indentation\",items:[\"outdent\",\"indent\"]},{name:\"permanent pen\",items:[\"permanentpen\"]},{name:\"comments\",items:[\"addcomment\"]}],AT=(e,t)=>(n,r,o)=>{const i=e(n).mapError((e=>Xr(e))).getOrDie();return t(i,r,o)},MT={button:AT(rb,((e,t)=>{return n=e,r=t.shared.providers,CT(n,r,[]);var n,r})),togglebutton:AT(sb,((e,t)=>{return n=e,r=t.shared.providers,kT(n,r,[]);var n,r})),menubutton:AT(nL,((e,t)=>CS(e,\"tox-tbtn\",t,L.none()))),splitbutton:AT((e=>qr(\"SplitButton\",rL,e)),((e,t)=>((e,t)=>{const n=us(\"channel-update-split-dropdown-display\"),r=e=>({isEnabled:()=>!sm.isDisabled(e),setEnabled:t=>sm.set(e,!t),setIconFill:(t,n)=>{Ca(e.element,'svg path[id=\"'+t+'\"], rect[id=\"'+t+'\"]').each((e=>{yt(e,\"fill\",n)}))},setActive:t=>{yt(e.element,\"aria-pressed\",t),Ca(e.element,\"span\").each((n=>{e.getSystem().getByDom(n).each((e=>Rp.set(e,t)))}))},isActive:()=>Ca(e.element,\"span\").exists((t=>e.getSystem().getByDom(t).exists(Rp.isOn)))}),o=Mo(v),i={getApi:r,onSetup:e.onSetup};return gT.sketch({dom:{tag:\"div\",classes:[\"tox-split-button\"],attributes:{\"aria-pressed\":!1,...bT(e.tooltip,t.providers)}},onExecute:t=>{e.onAction(r(t))},onItemExecute:(e,t,n)=>{},splitDropdownBehaviours:$l([Jb(t.providers.isDisabled),Gb(),xp(\"split-dropdown-events\",[zi(_T,Ap.focus),e_(i,o),t_(i,o)]),oC.config({})]),eventOrder:{[Di()]:[\"alloy.base.behaviour\",\"split-dropdown-events\"]},toggleClass:\"tox-tbtn--enabled\",lazySink:t.getSink,fetch:DT(r,e,t.providers),parts:{menu:ny(0,e.columns,e.presets)},components:[gT.parts.button(wT(e.icon,e.text,L.none(),L.some(n),L.some([Rp.config({toggleClass:\"tox-tbtn--enabled\",toggleOnExecute:!1})]),t.providers)),gT.parts.arrow({dom:{tag:\"button\",classes:[\"tox-tbtn\",\"tox-split-button__chevron\"],innerHtml:kg(\"chevron-down\",t.providers.icons)},buttonBehaviours:$l([Jb(t.providers.isDisabled),Gb(),Dg()])}),gT.parts[\"aria-descriptor\"]({text:t.providers.translate(\"To open the popup, press Shift+Enter\")})]})})(e,t.shared))),grouptoolbarbutton:AT((e=>qr(\"GroupToolbarButton\",ZM,e)),((e,t,n)=>{const r=n.ui.registry.getAll().buttons,o=e=>FT(n,{buttons:r,toolbar:e,allowToolbarGroups:!1},t,L.none()),i={[Nc]:t.shared.header.isPositionedAtTop()?$c.TopToBottom:$c.BottomToTop};if(Xg(n)===Eg.floating)return((e,t,n,r)=>{const o=t.shared;return nE.sketch({lazySink:o.getSink,fetch:()=>Yw((t=>{t(P(n(e.items),pE))})),markers:{toggledClass:\"tox-tbtn--enabled\"},parts:{button:wT(e.icon,e.text,e.tooltip,L.none(),L.none(),o.providers),toolbar:{dom:{tag:\"div\",classes:[\"tox-toolbar__overflow\"],attributes:r}}}})})(e,t,o,i);throw new Error(\"Toolbar groups are only supported when using floating toolbar mode\")}))},LT={styles:(e,t)=>{const n={type:\"advanced\",...t.styles};return VE(e,t,aT(e,n))},fontsize:(e,t)=>VE(e,t,sT(e)),fontfamily:(e,t)=>VE(e,t,tT(e)),blocks:(e,t)=>VE(e,t,QE(e)),align:(e,t)=>VE(e,t,XE(e))},ET=e=>{const t=e.toolbar,n=e.buttons;return!1===t?[]:void 0===t||!0===t?(e=>{const t=P(ST,(t=>{const n=j(t.items,(t=>ye(e,t)||ye(LT,t)));return{name:t.name,items:n}}));return j(t,(e=>e.items.length>0))})(n):i(t)?(e=>{const t=e.split(\"|\");return P(t,(e=>({items:e.trim().split(\" \")})))})(t):(e=>g(e,(e=>ye(e,\"name\")&&ye(e,\"items\"))))(t)?t:(console.error(\"Toolbar type should be string, string[], boolean or ToolbarGroup[]\"),[])},TT=(e,t,n,r,o,i)=>ve(t,n.toLowerCase()).orThunk((()=>i.bind((e=>ie(e,(e=>ve(t,e+n.toLowerCase()))))))).fold((()=>ve(LT,n.toLowerCase()).map((t=>t(e,o)))),(t=>\"grouptoolbarbutton\"!==t.type||r?((e,t,n)=>ve(MT,e.type).fold((()=>(console.error(\"skipping button defined by\",e),L.none())),(r=>L.some(r(e,t,n)))))(t,o,e):(console.warn(`Ignoring the '${n}' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested.`),L.none()))),FT=(e,t,n,r)=>{const o=ET(t),i=P(o,(o=>{const i=G(o.items,(o=>0===o.trim().length?[]:TT(e,t.buttons,o,t.allowToolbarGroups,n,r).toArray()));return{title:L.from(e.translate(o.name)),items:i}}));return j(i,(e=>e.items.length>0))},OT=(e,t,n,r)=>{const o=t.outerContainer,s=n.toolbar,a=n.buttons;if(g(s,i)){const t=s.map((t=>{const o={toolbar:t,buttons:a,allowToolbarGroups:n.allowToolbarGroups};return FT(e,o,r,L.none())}));LE.setToolbars(o,t)}else LE.setToolbar(o,FT(e,n,r,L.none()))},BT=kn(),RT=BT.os.isiOS()&&BT.os.version.major<=12;var $T=Object.freeze({__proto__:null,render:(e,t,n,r,o)=>{const i=Mo(0),s=t.outerContainer;YE(e);const a=Fe.fromDom(o.targetNode),l=ut(ct(a));((e,t)=>{id(e,t,Ln)})(a,t.mothership),od(l,t.uiMothership),e.on(\"PostRender\",(()=>{LE.setSidebar(s,n.sidebar,vv(e)),OT(e,t,n,r),i.set(e.getWin().innerWidth),LE.setMenubar(s,FE(e,n)),((e,t)=>{const n=e.dom;let r=e.getWin();const o=e.getDoc().documentElement,i=Mo(Ht(r.innerWidth,r.innerHeight)),s=Mo(Ht(o.offsetWidth,o.offsetHeight)),a=()=>{const t=i.get();t.left===r.innerWidth&&t.top===r.innerHeight||(i.set(Ht(r.innerWidth,r.innerHeight)),j_(e))},l=()=>{const t=e.getDoc().documentElement,n=s.get();n.left===t.offsetWidth&&n.top===t.offsetHeight||(s.set(Ht(t.offsetWidth,t.offsetHeight)),j_(e))},c=t=>{((e,t)=>{e.dispatch(\"ScrollContent\",t)})(e,t)};n.bind(r,\"resize\",a),n.bind(r,\"scroll\",c);const u=pc(Fe.fromDom(e.getBody()),\"load\",l),d=t.uiMothership.element;e.on(\"hide\",(()=>{St(d,\"display\",\"none\")})),e.on(\"show\",(()=>{Bt(d,\"display\")})),e.on(\"NodeChange\",l),e.on(\"remove\",(()=>{u.unbind(),n.unbind(r,\"resize\",a),n.unbind(r,\"scroll\",c),r=null}))})(e,t)}));const u=LE.getSocket(s).getOrDie(\"Could not find expected socket element\");if(RT){At(u.element,{overflow:\"scroll\",\"-webkit-overflow-scrolling\":\"touch\"});const t=((e,t)=>{let n=null;return{cancel:()=>{c(n)||(clearTimeout(n),n=null)},throttle:(...r)=>{c(n)&&(n=setTimeout((()=>{n=null,e.apply(null,r)}),t))}}})((()=>{e.dispatch(\"ScrollContent\")}),20),n=fc(u.element,\"scroll\",t.throttle);e.on(\"remove\",n.unbind)}qb(e,t),e.addCommand(\"ToggleSidebar\",((t,n)=>{LE.toggleSidebar(s,n),e.dispatch(\"ToggleSidebar\")})),e.addQueryValueHandler(\"ToggleSidebar\",(()=>{var e;return null!==(e=LE.whichSidebar(s))&&void 0!==e?e:\"\"}));const d=Xg(e);d!==Eg.sliding&&d!==Eg.floating||e.on(\"ResizeWindow ResizeEditor ResizeContent\",(()=>{const n=e.getWin().innerWidth;n!==i.get()&&(LE.refreshToolbar(t.outerContainer),i.set(n))}));const h={setEnabled:e=>{Vb(t,!e)},isEnabled:()=>!sm.isDisabled(s)};return{iframeContainer:u.element.dom,editorContainer:s.element.dom,api:h}}});const NT=e=>/^[0-9\\.]+(|px)$/i.test(\"\"+e)?L.some(parseInt(\"\"+e,10)):L.none(),YT=e=>p(e)?e+\"px\":e,PT=(e,t,n)=>{const r=t.filter((t=>e<t)),o=n.filter((t=>e>t));return r.or(o).getOr(e)},IT=e=>{const t=(e=>{const t=Pg(e),n=jg(e),r=zg(e);return NT(t).map((e=>PT(e,n,r)))})(e);return t.getOr(Pg(e))},HT=e=>{const t=Ig(e),n=Hg(e),r=Wg(e);return NT(t).map((e=>PT(e,n,r)))},{ToolbarLocation:jT,ToolbarMode:WT}=Ov,zT=(e,t,n,r,o)=>{const{uiMothership:i,outerContainer:s}=n,a=Fg.DOM,l=Mv(e),c=Tv(e),u=Wg(e).or(HT(e)),d=r.shared.header,h=d.isPositionedAtTop,m=Xg(e),f=m===WT.sliding||m===WT.floating,p=Mo(!1),g=()=>p.get()&&!e.removed,v=e=>f?e.fold(b(0),(e=>e.components().length>1?Yt(e.components()[1].element):0)):0,y=()=>{i.broadcastOn([bd()],{})},_=(e=!1)=>{if(g()){if(l||o.on((e=>{const n=u.getOrThunk((()=>{const e=NT(Lt(pt(),\"margin-left\")).getOr(0);return Vt(pt())-Wt(t).left+e}));St(e.element,\"max-width\",n+\"px\")})),f&&LE.refreshToolbar(s),l||o.on((e=>{const n=LE.getToolbar(s),r=v(n),o=zn(t),i=h()?Math.max(o.y-Yt(e.element)+r,0):o.bottom;At(s.element,{position:\"absolute\",top:Math.round(i)+\"px\",left:Math.round(o.x)+\"px\"})})),c){const t=e?jM.reset:jM.refresh;o.on(t)}y()}},w=(n=!0)=>{!l&&c&&g()&&o.on((r=>{const i=d.getDockingMode(),a=(n=>{switch(Qg(e)){case jT.auto:const e=LE.getToolbar(s),r=v(e),o=Yt(n.element)-r,i=zn(t);if(i.y>o)return\"top\";{const e=Je(t),n=Math.max(e.dom.scrollHeight,Yt(e));return i.bottom<n-o||Vn().bottom<i.bottom-o?\"bottom\":\"top\"}case jT.bottom:return\"bottom\";case jT.top:default:return\"top\"}})(r);var l;a!==i&&(l=a,o.on((e=>{jM.setModes(e,[l]),d.setDockingMode(l);const t=h()?$c.TopToBottom:$c.BottomToTop;yt(e.element,Nc,t)})),n&&_(!0))}))};return{isVisible:g,isPositionedAtTop:h,show:()=>{p.set(!0),St(s.element,\"display\",\"flex\"),a.addClass(e.getBody(),\"mce-edit-focus\"),Bt(i.element,\"display\"),w(!1),_()},hide:()=>{p.set(!1),n.outerContainer&&(St(s.element,\"display\",\"none\"),a.removeClass(e.getBody(),\"mce-edit-focus\")),St(i.element,\"display\",\"none\")},update:_,updateMode:w,repositionPopups:y}},UT=(e,t)=>{const n=zn(e);return{pos:t?n.y:n.bottom,bounds:n}};var VT=Object.freeze({__proto__:null,render:(e,t,n,r,o)=>{const{mothership:i,uiMothership:s,outerContainer:a}=t,l=hc(),c=Fe.fromDom(o.targetNode),u=zT(e,c,t,r,l),d=tv(e);PE(e);const h=()=>{if(l.isSet())return void u.show();l.set(LE.getHeader(a).getOrDie());const o=Lv(e);od(o,i),od(o,s),OT(e,t,n,r),LE.setMenubar(a,FE(e,n)),u.show(),((e,t,n,r)=>{const o=Mo(UT(t,n.isPositionedAtTop())),i=r=>{const{pos:i,bounds:s}=UT(t,n.isPositionedAtTop()),{pos:a,bounds:l}=o.get(),c=s.height!==l.height||s.width!==l.width;o.set({pos:i,bounds:s}),c&&j_(e,r),n.isVisible()&&(a!==i?n.update(!0):c&&(n.updateMode(),n.repositionPopups()))};r||(e.on(\"activate\",n.show),e.on(\"deactivate\",n.hide)),e.on(\"SkinLoaded ResizeWindow\",(()=>n.update(!0))),e.on(\"NodeChange keydown\",(e=>{requestAnimationFrame((()=>i(e)))})),e.on(\"ScrollWindow\",(()=>n.updateMode()));const s=dc();s.set(pc(Fe.fromDom(e.getBody()),\"load\",(e=>i(e.raw)))),e.on(\"remove\",(()=>{s.clear()}))})(e,c,u,d),e.nodeChanged()};e.on(\"show\",h),e.on(\"hide\",u.hide),d||(e.on(\"focus\",h),e.on(\"blur\",u.hide)),e.on(\"init\",(()=>{(e.hasFocus()||d)&&h()})),qb(e,t);const m={show:h,hide:u.hide,setEnabled:e=>{Vb(t,!e)},isEnabled:()=>!sm.isDisabled(a)};return{editorContainer:a.element.dom,api:m}}});const qT=\"contexttoolbar-hide\",GT=(e,t)=>zi(TD,((n,r)=>{const o=(e=>({hide:()=>Ri(e,yi()),getValue:()=>Nd.getValue(e)}))(e.get(n));t.onAction(o,r.event.buttonApi)})),KT=(e,t,n)=>(e=>\"contextformtogglebutton\"===e.type)(t)?((e,t,n)=>{const{primary:r,...o}=t.original,i=Gr(sb({...o,type:\"togglebutton\",onAction:v}));return kT(i,n,[GT(e,t)])})(e,t,n):((e,t,n)=>{const{primary:r,...o}=t.original,i=Gr(rb({...o,type:\"button\",onAction:v}));return CT(i,n,[GT(e,t)])})(e,t,n),XT=(e,t)=>{const n=e.label.fold((()=>({})),(e=>({\"aria-label\":e}))),r=vg(ay.sketch({inputClasses:[\"tox-toolbar-textfield\",\"tox-toolbar-nav-js\"],data:e.initValue(),inputAttributes:n,selectOnFocus:!0,inputBehaviours:$l([hp.config({mode:\"special\",onEnter:e=>o.findPrimary(e).map((e=>(Ni(e),!0))),onLeft:(e,t)=>(t.cut(),L.none()),onRight:(e,t)=>(t.cut(),L.none())})])})),o=((e,t,n)=>{const r=P(t,(t=>vg(KT(e,t,n))));return{asSpecs:()=>P(r,(e=>e.asSpec())),findPrimary:e=>ie(t,((t,n)=>t.primary?L.from(r[n]).bind((t=>t.getOpt(e))).filter(C(sm.isDisabled)):L.none()))}})(r,e.commands,t);return[{title:L.none(),items:[r.asSpec()]},{title:L.none(),items:o.asSpecs()}]},JT=XT,QT=(e,t,n=.01)=>t.bottom-e.y>=n&&e.bottom-t.y>=n,ZT=e=>{const t=(e=>{const t=e.getBoundingClientRect();if(t.height<=0&&t.width<=0){const n=it(Fe.fromDom(e.startContainer),e.startOffset).element;return(He(n)?Ze(n):L.some(n)).filter(Ie).map((e=>e.dom.getBoundingClientRect())).getOr(t)}return t})(e.selection.getRng());if(e.inline){const e=Rn();return Wn(e.left+t.left,e.top+t.top,t.width,t.height)}{const n=Un(Fe.fromDom(e.getBody()));return Wn(n.x+t.left,n.y+t.top,t.width,t.height)}},eF=(e,t)=>t.filter((e=>ft(e)&&(e=>Ie(e)&&Ne(e.dom))(e))).map(Un).getOrThunk((()=>ZT(e))),tF=(e,t,n,r=0)=>{const o=Yn(window),i=zn(Fe.fromDom(e.getContentAreaContainer())),s=_v(e)||Cv(e)||Dv(e),{x:a,width:l}=((e,t,n)=>{const r=Math.max(e.x+n,t.x);return{x:r,width:Math.min(e.right-n,t.right)-r}})(i,o,r);if(e.inline&&!s)return Wn(a,o.y,l,o.height);{const s=t.header.isPositionedAtTop(),{y:c,bottom:u}=((e,t,n,r,o,i)=>{const s=Fe.fromDom(e.getContainer()),a=Ca(s,\".tox-editor-header\").getOr(s),l=zn(a),c=l.y>=t.bottom,u=r&&!c;if(e.inline&&u)return{y:Math.max(l.bottom+i,n.y),bottom:n.bottom};if(e.inline&&!u)return{y:n.y,bottom:Math.min(l.y-i,n.bottom)};const d=\"line\"===o?zn(s):t;return u?{y:Math.max(l.bottom+i,n.y),bottom:Math.min(d.bottom-i,n.bottom)}:{y:Math.max(d.y+i,n.y),bottom:Math.min(l.y-i,n.bottom)}})(e,i,o,s,n,r);return Wn(a,c,l,u-c)}},nF={valignCentre:[],alignCentre:[],alignLeft:[\"tox-pop--align-left\"],alignRight:[\"tox-pop--align-right\"],right:[\"tox-pop--right\"],left:[\"tox-pop--left\"],bottom:[\"tox-pop--bottom\"],top:[\"tox-pop--top\"],inset:[\"tox-pop--inset\"]},rF={maxHeightFunction:Ac(),maxWidthFunction:XL()},oF=e=>\"node\"===e,iF=(e,t,n,r,o)=>{const i=ZT(e),s=r.lastElement().exists((e=>qe(n,e)));if(((e,t)=>{const n=e.selection.getRng(),r=it(Fe.fromDom(n.startContainer),n.startOffset);return n.startContainer===n.endContainer&&n.startOffset===n.endOffset-1&&qe(r.element,t)})(e,n))return s?hA:aA;if(s)return((e,t,n)=>{const r=Tt(e,\"position\");St(e,\"position\",t);const o=n(e);return r.each((t=>St(e,\"position\",t))),o})(t,r.getMode(),(()=>QT(i,zn(t))&&!r.isReposition()?fA:hA));return(\"fixed\"===r.getMode()?o.y+Rn().top:o.y)+(Yt(t)+12)<=i.y?aA:lA},sF=(e,t,n,r)=>{const o=t=>(r,o,i,s,a)=>({...iF(e,s,t,n,a)({...r,y:a.y,height:a.height},o,i,s,a),alwaysFit:!0}),i=e=>oF(r)?[o(e)]:[];return t?{onLtr:e=>[wl,gl,vl,yl,bl,_l].concat(i(e)),onRtl:e=>[wl,vl,gl,bl,yl,_l].concat(i(e))}:{onLtr:e=>[_l,wl,yl,gl,bl,vl].concat(i(e)),onRtl:e=>[_l,wl,bl,vl,yl,gl].concat(i(e))}},aF=(e,t)=>{const n=j(t,(t=>t.predicate(e.dom))),{pass:r,fail:o}=H(n,(e=>\"contexttoolbar\"===e.type));return{contextToolbars:r,contextForms:o}},lF=(e,t,n)=>{const r=aF(e,t);if(r.contextForms.length>0)return L.some({elem:e,toolbars:[r.contextForms[0]]});{const t=aF(e,n);if(t.contextForms.length>0)return L.some({elem:e,toolbars:[t.contextForms[0]]});if(r.contextToolbars.length>0||t.contextToolbars.length>0){const n=(e=>{if(e.length<=1)return e;{const t=t=>$(e,(e=>e.position===t)),n=t=>j(e,(e=>e.position===t)),r=t(\"selection\"),o=t(\"node\");if(r||o){if(o&&r){const e=n(\"node\"),t=P(n(\"selection\"),(e=>({...e,position:\"node\"})));return e.concat(t)}return n(r?\"selection\":\"node\")}return n(\"line\")}})(r.contextToolbars.concat(t.contextToolbars));return L.some({elem:e,toolbars:n})}return L.none()}},cF=(e,t,n)=>e(t)?L.none():Ro(t,(e=>{if(Ie(e)){const{contextToolbars:t,contextForms:r}=aF(e,n.inNodeScope),o=r.length>0?r:(e=>{if(e.length<=1)return e;{const t=t=>U(e,(e=>e.position===t)),n=t(\"selection\").orThunk((()=>t(\"node\"))).orThunk((()=>t(\"line\"))).map((e=>e.position));return n.fold((()=>[]),(t=>j(e,(e=>e.position===t))))}})(t);return o.length>0?L.some({elem:e,toolbars:o}):L.none()}return L.none()}),e),uF=(e,t)=>{const n={},r=[],o=[],i={},s={},a=(e,a)=>{const l=Gr(qr(\"ContextForm\",mb,a));n[e]=l,l.launch.map((n=>{i[\"form:\"+e]={...a.launch,type:\"contextformtogglebutton\"===n.type?\"togglebutton\":\"button\",onAction:()=>{t(l)}}})),\"editor\"===l.scope?o.push(l):r.push(l),s[e]=l},l=(e,t)=>{var n;(n=t,qr(\"ContextToolbar\",fb,n)).each((n=>{\"editor\"===t.scope?o.push(n):r.push(n),s[e]=n}))},c=se(e);return I(c,(t=>{const n=e[t];\"contextform\"===n.type?a(t,n):\"contexttoolbar\"===n.type&&l(t,n)})),{forms:n,inNodeScope:r,inEditorScope:o,lookupTable:s,formNavigators:i}},dF=us(\"forward-slide\"),hF=us(\"backward-slide\"),mF=us(\"change-slide-event\"),fF=\"tox-pop--resizing\",pF=\"tox-pop--transition\",gF=(e,t,n,r)=>{const o=r.backstage,i=o.shared,s=kn().deviceType.isTouch,a=hc(),l=hc(),c=hc(),u=pa((e=>{const t=Mo([]);return fg.sketch({dom:{tag:\"div\",classes:[\"tox-pop\"]},fireDismissalEventInstead:{event:\"doNotDismissYet\"},onShow:e=>{t.set([]),fg.getContent(e).each((e=>{Bt(e.element,\"visibility\")})),qs(e.element,fF),Bt(e.element,\"width\")},inlineBehaviours:$l([xp(\"context-toolbar-events\",[Ji(ii(),((e,t)=>{\"width\"===t.event.raw.propertyName&&(qs(e.element,fF),Bt(e.element,\"width\"))})),zi(mF,((e,t)=>{const n=e.element;Bt(n,\"width\");const r=Vt(n);fg.setContent(e,t.event.contents),Vs(n,fF);const o=Vt(n);St(n,\"width\",r+\"px\"),fg.getContent(e).each((e=>{t.event.focus.bind((e=>(zl(e),ql(n)))).orThunk((()=>(hp.focusIn(e),Vl(ct(n)))))})),setTimeout((()=>{St(e.element,\"width\",o+\"px\")}),0)})),zi(dF,((e,n)=>{fg.getContent(e).each((n=>{t.set(t.get().concat([{bar:n,focus:Vl(ct(e.element))}]))})),$i(e,mF,{contents:n.event.forwardContents,focus:L.none()})})),zi(hF,((e,n)=>{re(t.get()).each((n=>{t.set(t.get().slice(0,t.get().length-1)),$i(e,mF,{contents:ga(n.bar),focus:n.focus})}))}))]),hp.config({mode:\"special\",onEscape:n=>re(t.get()).fold((()=>e.onEscape()),(e=>(Ri(n,hF),L.some(!0))))})]),lazySink:()=>Kn.value(e.sink)})})({sink:n,onEscape:()=>(e.focus(),L.some(!0))})),d=()=>{const t=c.get().getOr(\"node\"),n=oF(t)?1:0;return tF(e,i,t,n)},h=()=>!(e.removed||s()&&o.isContextMenuOpen()),m=()=>{if(h()){const t=d(),n=_e(c.get(),\"node\")?eF(e,a.get()):ZT(e);return t.height<=0||!QT(n,t)}return!0},f=()=>{a.clear(),l.clear(),c.clear(),fg.hide(u)},p=()=>{if(fg.isOpen(u)){const e=u.element;Bt(e,\"display\"),m()?St(e,\"display\",\"none\"):(l.set(0),fg.reposition(u))}},g=t=>({dom:{tag:\"div\",classes:[\"tox-pop__dialog\"]},components:[t],behaviours:$l([hp.config({mode:\"acyclic\"}),xp(\"pop-dialog-wrap-events\",[Qi((t=>{e.shortcuts.add(\"ctrl+F9\",\"focus statusbar\",(()=>hp.focusIn(t)))})),Zi((t=>{e.shortcuts.remove(\"ctrl+F9\")}))])])}),y=Gt((()=>uF(t,(e=>{const t=b([e]);$i(u,dF,{forwardContents:g(t)})})))),b=t=>{const{buttons:n}=e.ui.registry.getAll(),o={...n,...y().formNavigators},s=Xg(e)===Eg.scrolling?Eg.scrolling:Eg.default,a=q(P(t,(t=>\"contexttoolbar\"===t.type?((t,n)=>FT(e,{buttons:t,toolbar:n.items,allowToolbarGroups:!1},r.backstage,L.some([\"form:\"])))(o,t):((e,t)=>JT(e,t))(t,i.providers))));return _E({type:s,uid:us(\"context-toolbar\"),initGroups:a,onEscape:L.none,cyclicKeying:!0,providers:i.providers})},_=(t,r)=>{const o=\"node\"===t?i.anchors.node(r):i.anchors.cursor(),c=((e,t,n,r)=>\"line\"===t?{bubble:Tc(12,0,nF),layouts:{onLtr:()=>[xl],onRtl:()=>[Cl]},overrides:rF}:{bubble:Tc(0,12,nF,1/12),layouts:sF(e,n,r,t),overrides:rF})(e,t,s(),{lastElement:a.get,isReposition:()=>_e(l.get(),0),getMode:()=>Uu.getMode(n)});return mr(o,c)},w=(e,t)=>{if(x.cancel(),!h())return;const r=b(e),o=e[0].position,i=_(o,t);c.set(o),l.set(1);const s=u.element;Bt(s,\"display\"),(e=>_e(xe(e,a.get(),qe),!0))(t)||(qs(s,pF),Uu.reset(n,u)),fg.showWithinBounds(u,g(r),{anchor:i,transition:{classes:[pF],mode:\"placement\"}},(()=>L.some(d()))),t.fold(a.clear,a.set),m()&&St(s,\"display\",\"none\")},x=sS((()=>{if(e.hasFocus()&&!e.removed)if(Gs(u.element,pF))x.throttle();else{((e,t)=>{const n=Fe.fromDom(t.getBody()),r=e=>qe(e,n),o=Fe.fromDom(t.selection.getNode());return(e=>!r(e)&&!Ge(n,e))(o)?L.none():lF(o,e.inNodeScope,e.inEditorScope).orThunk((()=>cF(r,o,e)))})(y(),e).fold(f,(e=>{w(e.toolbars,L.some(e.elem))}))}}),17);e.on(\"init\",(()=>{e.on(\"remove\",f),e.on(\"ScrollContent ScrollWindow ObjectResized ResizeEditor longpress\",p),e.on(\"click keyup focus SetContent\",x.throttle),e.on(qT,f),e.on(\"contexttoolbar-show\",(t=>{const n=y();ve(n.lookupTable,t.toolbarKey).each((n=>{w([n],Ce(t.target!==e,t.target)),fg.getContent(u).each(hp.focusIn)}))})),e.on(\"focusout\",(t=>{pg.setEditorTimeout(e,(()=>{ql(n.element).isNone()&&ql(u.element).isNone()&&f()}),0)})),e.on(\"SwitchMode\",(()=>{e.mode.isReadOnly()&&f()})),e.on(\"AfterProgressState\",(t=>{t.state?f():e.hasFocus()&&x.throttle()})),e.on(\"NodeChange\",(e=>{ql(u.element).fold(x.throttle,v)}))}))},vF={unsupportedLength:[\"em\",\"ex\",\"cap\",\"ch\",\"ic\",\"rem\",\"lh\",\"rlh\",\"vw\",\"vh\",\"vi\",\"vb\",\"vmin\",\"vmax\",\"cm\",\"mm\",\"Q\",\"in\",\"pc\",\"pt\",\"px\"],fixed:[\"px\",\"pt\"],relative:[\"%\"],empty:[\"\"]},yF=(()=>{const e=\"[0-9]+\",t=\"[eE][+-]?[0-9]+\",n=e=>`(?:${e})?`,r=[\"Infinity\",\"[0-9]+\\\\.\"+n(e)+n(t),\"\\\\.[0-9]+\"+n(t),e+n(t)].join(\"|\");return new RegExp(`^(${`[+-]?(?:${r})`})(.*)$`)})(),bF=(e,t)=>L.from(yF.exec(e)).bind((e=>{const n=Number(e[1]),r=e[2];return((e,t)=>$(t,(t=>$(vF[t],(t=>e===t)))))(r,t)?L.some({value:n,unit:r}):L.none()})),_F=(e,t)=>{const n=()=>{const n=t.getOptions(e),r=t.getCurrent(e).map(t.hash),o=hc();return P(n,(n=>({type:\"togglemenuitem\",text:t.display(n),onSetup:i=>{const s=e=>{e&&(o.on((e=>e.setActive(!1))),o.set(i)),i.setActive(e)};s(_e(r,t.hash(n)));const a=t.watcher(e,n,s);return()=>{o.clear(),a()}},onAction:()=>t.setCurrent(e,n)})))};e.ui.registry.addMenuButton(t.name,{tooltip:t.text,icon:t.icon,fetch:e=>e(n()),onSetup:t.onToolbarSetup}),e.ui.registry.addNestedMenuItem(t.name,{type:\"nestedmenuitem\",text:t.text,getSubmenuItems:n,onSetup:t.onMenuSetup})},wF={name:\"lineheight\",text:\"Line height\",icon:\"line-height\",getOptions:xv,hash:e=>((e,t)=>bF(e,t).map((({value:e,unit:t})=>e+t)))(e,[\"fixed\",\"relative\",\"empty\"]).getOr(e),display:_,watcher:(e,t,n)=>e.formatter.formatChanged(\"lineheight\",n,!1,{value:t}).unbind,getCurrent:e=>L.from(e.queryCommandValue(\"LineHeight\")),setCurrent:(e,t)=>e.execCommand(\"LineHeight\",!1,t)},xF=e=>{_F(e,wF),(e=>L.from(Gg(e)).map((t=>({name:\"language\",text:\"Language\",icon:\"language\",getOptions:b(t),hash:e=>d(e.customCode)?e.code:`${e.code}/${e.customCode}`,display:e=>e.title,watcher:(e,t,n)=>{var r;return e.formatter.formatChanged(\"lang\",n,!1,{value:t.code,customValue:null!==(r=t.customCode)&&void 0!==r?r:null}).unbind},getCurrent:e=>{const t=Fe.fromDom(e.selection.getNode());return $o(t,(e=>L.some(e).filter(Ie).bind((e=>wt(e,\"lang\").map((t=>({code:t,customCode:wt(e,\"data-mce-lang\").getOrUndefined(),title:\"\"})))))))},setCurrent:(e,t)=>e.execCommand(\"Lang\",!1,t),onToolbarSetup:t=>{const n=dc();return t.setActive(e.formatter.match(\"lang\",{},void 0,!0)),n.set(e.formatter.formatChanged(\"lang\",t.setActive,!0)),n.clear}}))))(e).each((t=>_F(e,t)))},CF=(e,t)=>{((e,t)=>{const n=UE(0,t,XE(e));e.ui.registry.addNestedMenuItem(\"align\",{text:t.shared.providers.translate(\"Align\"),getSubmenuItems:()=>n.items.validateItems(n.getStyleItems())})})(e,t),((e,t)=>{const n=UE(0,t,tT(e));e.ui.registry.addNestedMenuItem(\"fontfamily\",{text:t.shared.providers.translate(\"Fonts\"),getSubmenuItems:()=>n.items.validateItems(n.getStyleItems())})})(e,t),((e,t)=>{const n={type:\"advanced\",...t.styles},r=UE(0,t,aT(e,n));e.ui.registry.addNestedMenuItem(\"styles\",{text:\"Formats\",getSubmenuItems:()=>r.items.validateItems(r.getStyleItems())})})(e,t),((e,t)=>{const n=UE(0,t,QE(e));e.ui.registry.addNestedMenuItem(\"blocks\",{text:\"Blocks\",getSubmenuItems:()=>n.items.validateItems(n.getStyleItems())})})(e,t),((e,t)=>{const n=UE(0,t,sT(e));e.ui.registry.addNestedMenuItem(\"fontsize\",{text:\"Font sizes\",getSubmenuItems:()=>n.items.validateItems(n.getStyleItems())})})(e,t)},kF=e=>HE(e,\"NodeChange\",(t=>{t.setEnabled(e.queryCommandState(\"outdent\"))})),DF=e=>{(e=>{e.ui.registry.addButton(\"outdent\",{tooltip:\"Decrease indent\",icon:\"outdent\",onSetup:kF(e),onAction:WE(e,\"outdent\")}),e.ui.registry.addButton(\"indent\",{tooltip:\"Increase indent\",icon:\"indent\",onAction:WE(e,\"indent\")})})(e)},SF=(e,t)=>n=>{n.setActive(t.get());const r=e=>{t.set(e.state),n.setActive(e.state)};return e.on(\"PastePlainTextToggle\",r),()=>e.off(\"PastePlainTextToggle\",r)},AF=(e,t)=>()=>{e.execCommand(\"mceToggleFormat\",!1,t)},MF=e=>{(e=>{_D.each([{name:\"bold\",text:\"Bold\",icon:\"bold\"},{name:\"italic\",text:\"Italic\",icon:\"italic\"},{name:\"underline\",text:\"Underline\",icon:\"underline\"},{name:\"strikethrough\",text:\"Strikethrough\",icon:\"strike-through\"},{name:\"subscript\",text:\"Subscript\",icon:\"subscript\"},{name:\"superscript\",text:\"Superscript\",icon:\"superscript\"}],((t,n)=>{e.ui.registry.addToggleButton(t.name,{tooltip:t.text,icon:t.icon,onSetup:IE(e,t.name),onAction:AF(e,t.name)})}));for(let t=1;t<=6;t++){const n=\"h\"+t;e.ui.registry.addToggleButton(n,{text:n.toUpperCase(),tooltip:\"Heading \"+t,onSetup:IE(e,n),onAction:AF(e,n)})}})(e),(e=>{_D.each([{name:\"cut\",text:\"Cut\",action:\"Cut\",icon:\"cut\"},{name:\"copy\",text:\"Copy\",action:\"Copy\",icon:\"copy\"},{name:\"paste\",text:\"Paste\",action:\"Paste\",icon:\"paste\"},{name:\"help\",text:\"Help\",action:\"mceHelp\",icon:\"help\"},{name:\"selectall\",text:\"Select all\",action:\"SelectAll\",icon:\"select-all\"},{name:\"newdocument\",text:\"New document\",action:\"mceNewDocument\",icon:\"new-document\"},{name:\"removeformat\",text:\"Clear formatting\",action:\"RemoveFormat\",icon:\"remove-formatting\"},{name:\"remove\",text:\"Remove\",action:\"Delete\",icon:\"remove\"},{name:\"print\",text:\"Print\",action:\"mcePrint\",icon:\"print\"},{name:\"hr\",text:\"Horizontal line\",action:\"InsertHorizontalRule\",icon:\"horizontal-rule\"}],(t=>{e.ui.registry.addButton(t.name,{tooltip:t.text,icon:t.icon,onAction:WE(e,t.action)})}))})(e),(e=>{_D.each([{name:\"blockquote\",text:\"Blockquote\",action:\"mceBlockQuote\",icon:\"quote\"}],(t=>{e.ui.registry.addToggleButton(t.name,{tooltip:t.text,icon:t.icon,onAction:WE(e,t.action),onSetup:IE(e,t.name)})}))})(e)},LF=e=>{MF(e),(e=>{_D.each([{name:\"bold\",text:\"Bold\",action:\"Bold\",icon:\"bold\",shortcut:\"Meta+B\"},{name:\"italic\",text:\"Italic\",action:\"Italic\",icon:\"italic\",shortcut:\"Meta+I\"},{name:\"underline\",text:\"Underline\",action:\"Underline\",icon:\"underline\",shortcut:\"Meta+U\"},{name:\"strikethrough\",text:\"Strikethrough\",action:\"Strikethrough\",icon:\"strike-through\"},{name:\"subscript\",text:\"Subscript\",action:\"Subscript\",icon:\"subscript\"},{name:\"superscript\",text:\"Superscript\",action:\"Superscript\",icon:\"superscript\"},{name:\"removeformat\",text:\"Clear formatting\",action:\"RemoveFormat\",icon:\"remove-formatting\"},{name:\"newdocument\",text:\"New document\",action:\"mceNewDocument\",icon:\"new-document\"},{name:\"cut\",text:\"Cut\",action:\"Cut\",icon:\"cut\",shortcut:\"Meta+X\"},{name:\"copy\",text:\"Copy\",action:\"Copy\",icon:\"copy\",shortcut:\"Meta+C\"},{name:\"paste\",text:\"Paste\",action:\"Paste\",icon:\"paste\",shortcut:\"Meta+V\"},{name:\"selectall\",text:\"Select all\",action:\"SelectAll\",icon:\"select-all\",shortcut:\"Meta+A\"},{name:\"print\",text:\"Print...\",action:\"mcePrint\",icon:\"print\",shortcut:\"Meta+P\"},{name:\"hr\",text:\"Horizontal line\",action:\"InsertHorizontalRule\",icon:\"horizontal-rule\"}],(t=>{e.ui.registry.addMenuItem(t.name,{text:t.text,icon:t.icon,shortcut:t.shortcut,onAction:WE(e,t.action)})})),e.ui.registry.addMenuItem(\"codeformat\",{text:\"Code\",icon:\"sourcecode\",onAction:AF(e,\"code\")})})(e)},EF=(e,t)=>HE(e,\"Undo Redo AddUndo TypingUndo ClearUndos SwitchMode\",(n=>{n.setEnabled(!e.mode.isReadOnly()&&e.undoManager[t]())})),TF=e=>{(e=>{e.ui.registry.addMenuItem(\"undo\",{text:\"Undo\",icon:\"undo\",shortcut:\"Meta+Z\",onSetup:EF(e,\"hasUndo\"),onAction:WE(e,\"undo\")}),e.ui.registry.addMenuItem(\"redo\",{text:\"Redo\",icon:\"redo\",shortcut:\"Meta+Y\",onSetup:EF(e,\"hasRedo\"),onAction:WE(e,\"redo\")})})(e),(e=>{e.ui.registry.addButton(\"undo\",{tooltip:\"Undo\",icon:\"undo\",enabled:!1,onSetup:EF(e,\"hasUndo\"),onAction:WE(e,\"undo\")}),e.ui.registry.addButton(\"redo\",{tooltip:\"Redo\",icon:\"redo\",enabled:!1,onSetup:EF(e,\"hasRedo\"),onAction:WE(e,\"redo\")})})(e)},FF=e=>HE(e,\"VisualAid\",(t=>{t.setActive(e.hasVisual)})),OF=e=>{(e=>{e.ui.registry.addButton(\"visualaid\",{tooltip:\"Visual aids\",text:\"Visual aids\",onAction:WE(e,\"mceToggleVisualAid\")})})(e),(e=>{e.ui.registry.addToggleMenuItem(\"visualaid\",{text:\"Visual aids\",onSetup:FF(e),onAction:WE(e,\"mceToggleVisualAid\")})})(e)},BF=(e,t)=>{(e=>{I([{name:\"alignleft\",text:\"Align left\",cmd:\"JustifyLeft\",icon:\"align-left\"},{name:\"aligncenter\",text:\"Align center\",cmd:\"JustifyCenter\",icon:\"align-center\"},{name:\"alignright\",text:\"Align right\",cmd:\"JustifyRight\",icon:\"align-right\"},{name:\"alignjustify\",text:\"Justify\",cmd:\"JustifyFull\",icon:\"align-justify\"}],(t=>{e.ui.registry.addToggleButton(t.name,{tooltip:t.text,icon:t.icon,onAction:WE(e,t.cmd),onSetup:IE(e,t.name)})})),e.ui.registry.addButton(\"alignnone\",{tooltip:\"No alignment\",icon:\"align-none\",onAction:WE(e,\"JustifyNone\")})})(e),LF(e),CF(e,t),TF(e),(e=>{(e=>{e.addCommand(\"mceApplyTextcolor\",((t,n)=>{((e,t,n)=>{e.undoManager.transact((()=>{e.focus(),e.formatter.apply(t,{value:n}),e.nodeChanged()}))})(e,t,n)})),e.addCommand(\"mceRemoveTextcolor\",(t=>{((e,t)=>{e.undoManager.transact((()=>{e.focus(),e.formatter.remove(t,{value:null},void 0,!0),e.nodeChanged()}))})(e,t)}))})(e);const t=Mo(rw),n=Mo(rw);uw(e,\"forecolor\",\"forecolor\",\"Text color\",t),uw(e,\"backcolor\",\"hilitecolor\",\"Background color\",n),dw(e,\"forecolor\",\"forecolor\",\"Text color\"),dw(e,\"backcolor\",\"hilitecolor\",\"Background color\")})(e),OF(e),DF(e),xF(e),(e=>{const t=Mo(gv(e)),n=()=>e.execCommand(\"mceTogglePlainTextPaste\");e.ui.registry.addToggleButton(\"pastetext\",{active:!1,icon:\"paste-text\",tooltip:\"Paste as text\",onAction:n,onSetup:SF(e,t)}),e.ui.registry.addToggleMenuItem(\"pastetext\",{text:\"Paste as text\",icon:\"paste-text\",onAction:n,onSetup:SF(e,t)})})(e)},RF=e=>i(e)?e.split(/[ ,]/):e,$F=e=>t=>t.options.get(e),NF=$F(\"contextmenu_never_use_native\"),YF=$F(\"contextmenu_avoid_overlap\"),PF=e=>{const t=e.ui.registry.getAll().contextMenus,n=e.options.get(\"contextmenu\");return e.options.isSet(\"contextmenu\")?n:j(n,(e=>ye(t,e)))},IF=(e,t)=>({type:\"makeshift\",x:e,y:t}),HF=e=>\"longpress\"===e.type||0===e.type.indexOf(\"touch\"),jF=(e,t)=>{const n=Fg.DOM.getPos(e);return((e,t,n)=>IF(e.x+t,e.y+n))(t,n.x,n.y)},WF=(e,t)=>\"contextmenu\"===t.type||\"longpress\"===t.type?e.inline?(e=>{if(HF(e)){const t=e.touches[0];return IF(t.pageX,t.pageY)}return IF(e.pageX,e.pageY)})(t):jF(e.getContentAreaContainer(),(e=>{if(HF(e)){const t=e.touches[0];return IF(t.clientX,t.clientY)}return IF(e.clientX,e.clientY)})(t)):zF(e),zF=e=>({type:\"selection\",root:Fe.fromDom(e.selection.getNode())}),UF=(e,t,n)=>{switch(n){case\"node\":return(e=>({type:\"node\",node:L.some(Fe.fromDom(e.selection.getNode())),root:Fe.fromDom(e.getBody())}))(e);case\"point\":return WF(e,t);case\"selection\":return zF(e)}},VF=(e,t,n,r,o,i)=>{const s=n(),a=UF(e,t,i);zD(s,Yv.CLOSE_ON_EXECUTE,r,{isHorizontalMenu:!1,search:L.none()}).map((e=>{t.preventDefault(),fg.showMenuAt(o,{anchor:a},{menu:{markers:Zv(\"normal\")},data:e})}))},qF={onLtr:()=>[wl,gl,vl,yl,bl,_l,aA,lA,sA,oA,iA,rA],onRtl:()=>[wl,vl,gl,bl,yl,_l,aA,lA,iA,rA,sA,oA]},GF={valignCentre:[],alignCentre:[],alignLeft:[\"tox-pop--align-left\"],alignRight:[\"tox-pop--align-right\"],right:[\"tox-pop--right\"],left:[\"tox-pop--left\"],bottom:[\"tox-pop--bottom\"],top:[\"tox-pop--top\"]},KF=(e,t,n,r,o,i,s)=>{const a=((e,t,n)=>{const r=UF(e,t,n);return{bubble:Tc(0,\"point\"===n?12:0,GF),layouts:qF,overrides:{maxWidthFunction:XL(),maxHeightFunction:Ac()},...r}})(e,t,i);zD(n,Yv.CLOSE_ON_EXECUTE,r,{isHorizontalMenu:!0,search:L.none()}).map((n=>{t.preventDefault();const l=s?dg.HighlightMenuAndItem:dg.HighlightNone;fg.showMenuWithinBounds(o,{anchor:a},{menu:{markers:Zv(\"normal\"),highlightOnOpen:l},data:n,type:\"horizontal\"},(()=>L.some(tF(e,r.shared,\"node\"===i?\"node\":\"selection\")))),e.dispatch(qT)}))},XF=(e,t,n,r,o,i)=>{const s=kn(),a=s.os.isiOS(),l=s.os.isMacOS(),c=s.os.isAndroid(),u=s.deviceType.isTouch(),d=()=>{const s=n();KF(e,t,s,r,o,i,!(c||a||l&&u))};if((l||a)&&\"node\"!==i){const n=()=>{(e=>{const t=e.selection.getRng(),n=()=>{pg.setEditorTimeout(e,(()=>{e.selection.setRng(t)}),10),i()};e.once(\"touchend\",n);const r=e=>{e.preventDefault(),e.stopImmediatePropagation()};e.on(\"mousedown\",r,!0);const o=()=>i();e.once(\"longpresscancel\",o);const i=()=>{e.off(\"touchend\",n),e.off(\"longpresscancel\",o),e.off(\"mousedown\",r)}})(e),d()};((e,t)=>{const n=e.selection;if(n.isCollapsed()||t.touches.length<1)return!1;{const r=t.touches[0],o=n.getRng();return vu(e.getWin(),ou.domRange(o)).exists((e=>e.left<=r.clientX&&e.right>=r.clientX&&e.top<=r.clientY&&e.bottom>=r.clientY))}})(e,t)?n():(e.once(\"selectionchange\",n),e.once(\"touchend\",(()=>e.off(\"selectionchange\",n))))}else d()},JF=e=>i(e)?\"|\"===e:\"separator\"===e.type,QF={type:\"separator\"},ZF=e=>{const t=e=>({text:e.text,icon:e.icon,enabled:e.enabled,shortcut:e.shortcut});if(i(e))return e;switch(e.type){case\"separator\":return QF;case\"submenu\":return{type:\"nestedmenuitem\",...t(e),getSubmenuItems:()=>{const t=e.getSubmenuItems();return i(t)?t:P(t,ZF)}};default:const r=e;return{type:\"menuitem\",...t(r),onAction:(n=r.onAction,()=>n())}}var n},eO=(e,t)=>{if(0===t.length)return e;const n=re(e).filter((e=>!JF(e))),r=n.fold((()=>[]),(e=>[QF]));return e.concat(r).concat(t).concat([QF])},tO=(e,t)=>!(e=>\"longpress\"===e.type||ye(e,\"touches\"))(t)&&(2!==t.button||t.target===e.getBody()&&\"\"===t.pointerType),nO=(e,t)=>tO(e,t)?e.selection.getStart(!0):t.target,rO=(e,t,n)=>{const r=kn().deviceType.isTouch,o=pa(fg.sketch({dom:{tag:\"div\"},lazySink:t,onEscape:()=>e.focus(),onShow:()=>n.setContextMenuState(!0),onHide:()=>n.setContextMenuState(!1),fireDismissalEventInstead:{},inlineBehaviours:$l([xp(\"dismissContextMenu\",[zi(Ai(),((t,n)=>{vd.close(t),e.focus()}))])])})),s=()=>fg.hide(o),a=t=>{if(NF(e)&&t.preventDefault(),((e,t)=>t.ctrlKey&&!NF(e))(e,t)||(e=>0===PF(e).length)(e))return;const s=((e,t)=>{const n=YF(e),r=tO(e,t)?\"selection\":\"point\";if(Le(n)){const o=nO(e,t);return hx(Fe.fromDom(o),n)?\"node\":r}return r})(e,t);(r()?XF:VF)(e,t,(()=>{const n=nO(e,t),r=e.ui.registry.getAll(),o=PF(e);return((e,t,n)=>{const r=z(t,((t,r)=>ve(e,r.toLowerCase()).map((e=>{const r=e.update(n);if(i(r))return eO(t,r.split(\" \"));if(r.length>0){const e=P(r,ZF);return eO(t,e)}return t})).getOrThunk((()=>t.concat([r])))),[]);return r.length>0&&JF(r[r.length-1])&&r.pop(),r})(r.contextMenus,o,n)}),n,o,s)};e.on(\"init\",(()=>{const t=\"ResizeEditor ScrollContent ScrollWindow longpresscancel\"+(r()?\"\":\" ResizeWindow\");e.on(t,s),e.on(\"longpress contextmenu\",a)}))},oO=Lo([{offset:[\"x\",\"y\"]},{absolute:[\"x\",\"y\"]},{fixed:[\"x\",\"y\"]}]),iO=e=>t=>t.translate(-e.left,-e.top),sO=e=>t=>t.translate(e.left,e.top),aO=e=>(t,n)=>z(e,((e,t)=>t(e)),Ht(t,n)),lO=(e,t,n)=>e.fold(aO([sO(n),iO(t)]),aO([iO(t)]),aO([])),cO=(e,t,n)=>e.fold(aO([sO(n)]),aO([]),aO([sO(t)])),uO=(e,t,n)=>e.fold(aO([]),aO([iO(n)]),aO([sO(t),iO(n)])),dO=(e,t,n)=>{const r=e.fold(((e,t)=>({position:L.some(\"absolute\"),left:L.some(e+\"px\"),top:L.some(t+\"px\")})),((e,t)=>({position:L.some(\"absolute\"),left:L.some(e-n.left+\"px\"),top:L.some(t-n.top+\"px\")})),((e,t)=>({position:L.some(\"fixed\"),left:L.some(e+\"px\"),top:L.some(t+\"px\")})));return{right:L.none(),bottom:L.none(),...r}},hO=(e,t,n,r)=>{const o=(e,o)=>(i,s)=>{const a=e(t,n,r);return o(i.getOr(a.left),s.getOr(a.top))};return e.fold(o(uO,mO),o(cO,fO),o(lO,pO))},mO=oO.offset,fO=oO.absolute,pO=oO.fixed,gO=(e,t)=>{const n=_t(e,t);return d(n)?NaN:parseInt(n,10)},vO=(e,t,n,r)=>((e,t)=>{const n=e.element,r=gO(n,t.leftAttr),o=gO(n,t.topAttr);return isNaN(r)||isNaN(o)?L.none():L.some(Ht(r,o))})(e,t).fold((()=>n),(e=>pO(e.left+r.left,e.top+r.top))),yO=(e,t,n,r,o,i)=>{const s=vO(e,t,n,r),a=t.mustSnap?wO(e,t,s,o,i):xO(e,t,s,o,i),l=lO(s,o,i);return((e,t,n)=>{const r=e.element;yt(r,t.leftAttr,n.left+\"px\"),yt(r,t.topAttr,n.top+\"px\")})(e,t,l),a.fold((()=>({coord:pO(l.left,l.top),extra:L.none()})),(e=>({coord:e.output,extra:e.extra})))},bO=(e,t)=>{((e,t)=>{const n=e.element;Ct(n,t.leftAttr),Ct(n,t.topAttr)})(e,t)},_O=(e,t,n,r)=>ie(e,(e=>{const o=e.sensor,i=((e,t,n,r,o,i)=>{const s=cO(e,o,i),a=cO(t,o,i);return Math.abs(s.left-a.left)<=n&&Math.abs(s.top-a.top)<=r})(t,o,e.range.left,e.range.top,n,r);return i?L.some({output:hO(e.output,t,n,r),extra:e.extra}):L.none()})),wO=(e,t,n,r,o)=>{const i=t.getSnapPoints(e);return _O(i,n,r,o).orThunk((()=>{const e=z(i,((e,t)=>{const i=t.sensor,s=((e,t,n,r,o,i)=>{const s=cO(e,o,i),a=cO(t,o,i),l=Math.abs(s.left-a.left),c=Math.abs(s.top-a.top);return Ht(l,c)})(n,i,t.range.left,t.range.top,r,o);return e.deltas.fold((()=>({deltas:L.some(s),snap:L.some(t)})),(n=>(s.left+s.top)/2<=(n.left+n.top)/2?{deltas:L.some(s),snap:L.some(t)}:e))}),{deltas:L.none(),snap:L.none()});return e.snap.map((e=>({output:hO(e.output,n,r,o),extra:e.extra})))}))},xO=(e,t,n,r,o)=>{const i=t.getSnapPoints(e);return _O(i,n,r,o)};var CO=Object.freeze({__proto__:null,snapTo:(e,t,n,r)=>{const o=t.getTarget(e.element);if(t.repositionTarget){const t=Ke(e.element),n=Rn(t),i=kM(o),s=((e,t,n)=>({coord:hO(e.output,e.output,t,n),extra:e.extra}))(r,n,i),a=dO(s.coord,0,i);Mt(o,a)}}});const kO=\"data-initial-z-index\",DO=(e,t)=>{e.getSystem().addToGui(t),(e=>{Ze(e.element).filter(Ie).each((t=>{Tt(t,\"z-index\").each((e=>{yt(t,kO,e)})),St(t,\"z-index\",Lt(e.element,\"z-index\"))}))})(t)},SO=e=>{(e=>{Ze(e.element).filter(Ie).each((e=>{wt(e,kO).fold((()=>Bt(e,\"z-index\")),(t=>St(e,\"z-index\",t))),Ct(e,kO)}))})(e),e.getSystem().removeFromGui(e)},AO=(e,t,n)=>e.getSystem().build(Dx.sketch({dom:{styles:{left:\"0px\",top:\"0px\",width:\"100%\",height:\"100%\",position:\"fixed\",\"z-index\":\"1000000000000000\"},classes:[t]},events:n}));var MO=yo(\"snaps\",[to(\"getSnapPoints\"),Wa(\"onSensor\"),to(\"leftAttr\"),to(\"topAttr\"),bo(\"lazyViewport\",Vn),bo(\"mustSnap\",!1)]);const LO=[bo(\"useFixed\",S),to(\"blockerClass\"),bo(\"getTarget\",_),bo(\"onDrag\",v),bo(\"repositionTarget\",!0),bo(\"onDrop\",v),Do(\"getBounds\",Vn),MO],EO=e=>{return(t=Tt(e,\"left\"),n=Tt(e,\"top\"),r=Tt(e,\"position\"),o=(e,t,n)=>(\"fixed\"===n?pO:mO)(parseInt(e,10),parseInt(t,10)),t.isSome()&&n.isSome()&&r.isSome()?L.some(o(t.getOrDie(),n.getOrDie(),r.getOrDie())):L.none()).getOrThunk((()=>{const t=Wt(e);return fO(t.left,t.top)}));var t,n,r,o},TO=(e,t,n,r,o,i,s)=>((e,t,n,r,o)=>{const i=o.bounds,s=cO(t,n,r),a=al(s.left,i.x,i.x+i.width-o.width),l=al(s.top,i.y,i.y+i.height-o.height),c=fO(a,l);return t.fold((()=>{const e=uO(c,n,r);return mO(e.left,e.top)}),b(c),(()=>{const e=lO(c,n,r);return pO(e.left,e.top)}))})(0,t.fold((()=>{const e=(t=n,s=i.left,a=i.top,t.fold(((e,t)=>mO(e+s,t+a)),((e,t)=>fO(e+s,t+a)),((e,t)=>pO(e+s,t+a))));var t,s,a;const l=lO(e,r,o);return pO(l.left,l.top)}),(t=>{const s=yO(e,t,n,i,r,o);return s.extra.each((n=>{t.onSensor(e,n)})),s.coord})),r,o,s),FO=(e,t)=>({bounds:e.getBounds(),height:Pt(t.element),width:qt(t.element)}),OO=(e,t,n,r,o)=>{const i=n.update(r,o),s=n.getStartData().getOrThunk((()=>FO(t,e)));i.each((n=>{((e,t,n,r)=>{const o=t.getTarget(e.element);if(t.repositionTarget){const i=Ke(e.element),s=Rn(i),a=kM(o),l=EO(o),c=TO(e,t.snaps,l,s,a,r,n),u=dO(c,0,a);Mt(o,u)}t.onDrag(e,o,r)})(e,t,s,n)}))},BO=(e,t,n,r)=>{t.each(SO),n.snaps.each((t=>{bO(e,t)}));const o=n.getTarget(e.element);r.reset(),n.onDrop(e,o)},RO=e=>(t,n)=>{const r=e=>{n.setStartData(FO(t,e))};return Hi([zi(Ci(),(e=>{n.getStartData().each((()=>r(e)))})),...e(t,n,r)])};var $O=Object.freeze({__proto__:null,getData:e=>L.from(Ht(e.x,e.y)),getDelta:(e,t)=>Ht(t.left-e.left,t.top-e.top)});const NO=(e,t,n)=>[zi(Vo(),((r,o)=>{if(0!==o.event.raw.button)return;o.stop();const i=()=>BO(r,L.some(l),e,t),s=mx(i,200),a={drop:i,delayDrop:s.schedule,forceDrop:i,move:n=>{s.cancel(),OO(r,e,t,$O,n)}},l=AO(r,e.blockerClass,(e=>Hi([zi(Vo(),e.forceDrop),zi(Ko(),e.drop),zi(qo(),((t,n)=>{e.move(n.event)})),zi(Go(),e.delayDrop)]))(a));n(r),DO(r,l)}))],YO=[...LO,qa(\"dragger\",{handlers:RO(NO)})];var PO=Object.freeze({__proto__:null,getData:e=>{const t=e.raw.touches;return 1===t.length?(e=>{const t=e[0];return L.some(Ht(t.clientX,t.clientY))})(t):L.none()},getDelta:(e,t)=>Ht(t.left-e.left,t.top-e.top)});const IO=(e,t,n)=>{const r=hc(),o=n=>{BO(n,r.get(),e,t),r.clear()};return[zi(jo(),((i,s)=>{s.stop();const a=()=>o(i),l={drop:a,delayDrop:v,forceDrop:a,move:n=>{OO(i,e,t,PO,n)}},c=AO(i,e.blockerClass,(e=>Hi([zi(jo(),e.forceDrop),zi(zo(),e.drop),zi(Uo(),e.drop),zi(Wo(),((t,n)=>{e.move(n.event)}))]))(l));r.set(c);n(i),DO(i,c)})),zi(Wo(),((n,r)=>{r.stop(),OO(n,e,t,PO,r.event)})),zi(zo(),((e,t)=>{t.stop(),o(e)})),zi(Uo(),o)]},HO=YO,jO=[...LO,qa(\"dragger\",{handlers:RO(IO)})],WO=[...LO,qa(\"dragger\",{handlers:RO(((e,t,n)=>[...NO(e,t,n),...IO(e,t,n)]))})];var zO=Object.freeze({__proto__:null,mouse:HO,touch:jO,mouseOrTouch:WO});var UO=Object.freeze({__proto__:null,init:()=>{let e=L.none(),t=L.none();const n=b({});return Ms({readState:n,reset:()=>{e=L.none(),t=L.none()},update:(t,n)=>t.getData(n).bind((n=>((t,n)=>{const r=e.map((e=>t.getDelta(e,n)));return e=L.some(n),r})(t,n))),getStartData:()=>t,setStartData:e=>{t=L.some(e)}})}});const VO=Il({branchKey:\"mode\",branches:zO,name:\"dragging\",active:{events:(e,t)=>e.dragger.handlers(e,t)},extra:{snap:e=>({sensor:e.sensor,range:e.range,output:e.output,extra:L.from(e.extra)})},state:UO,apis:CO}),qO=(e,t,n,r,o,i)=>e.fold((()=>VO.snap({sensor:fO(n-20,r-20),range:Ht(o,i),output:fO(L.some(n),L.some(r)),extra:{td:t}})),(e=>{const o=n-20,i=r-20,s=e.element.dom.getBoundingClientRect();return VO.snap({sensor:fO(o,i),range:Ht(40,40),output:fO(L.some(n-s.width/2),L.some(r-s.height/2)),extra:{td:t}})})),GO=(e,t,n)=>({getSnapPoints:e,leftAttr:\"data-drag-left\",topAttr:\"data-drag-top\",onSensor:(e,r)=>{const o=r.td;((e,t)=>e.exists((e=>qe(e,t))))(t.get(),o)||(t.set(o),n(o))},mustSnap:!0}),KO=e=>vg(gg.sketch({dom:{tag:\"div\",classes:[\"tox-selector\"]},buttonBehaviours:$l([VO.config({mode:\"mouseOrTouch\",blockerClass:\"blocker\",snaps:e}),oC.config({})]),eventOrder:{mousedown:[\"dragging\",\"alloy.base.behaviour\"],touchstart:[\"dragging\",\"alloy.base.behaviour\"]}})),XO=(e,t)=>{const n=Mo([]),r=Mo([]),o=Mo(!1),i=hc(),s=hc(),a=e=>{const n=Un(e);return qO(d.getOpt(t),e,n.x,n.y,n.width,n.height)},l=e=>{const n=Un(e);return qO(h.getOpt(t),e,n.right,n.bottom,n.width,n.height)},c=GO((()=>P(n.get(),(e=>a(e)))),i,(t=>{s.get().each((n=>{e.dispatch(\"TableSelectorChange\",{start:t,finish:n})}))})),u=GO((()=>P(r.get(),(e=>l(e)))),s,(t=>{i.get().each((n=>{e.dispatch(\"TableSelectorChange\",{start:n,finish:t})}))})),d=KO(c),h=KO(u),m=pa(d.asSpec()),f=pa(h.asSpec()),p=(t,n,r,o)=>{const i=r(n);VO.snapTo(t,i);((t,n,r,o)=>{const i=n.dom.getBoundingClientRect();Bt(t.element,\"display\");const s=Qe(Fe.fromDom(e.getBody())).dom.innerHeight,a=r(i),l=o(i,s);(a||l)&&St(t.element,\"display\",\"none\")})(t,n,(e=>e[o]<0),((e,t)=>e[o]>t))},g=e=>p(m,e,a,\"top\"),v=e=>p(f,e,l,\"bottom\");kn().deviceType.isTouch()&&(e.on(\"TableSelectionChange\",(e=>{o.get()||(Zu(t,m),Zu(t,f),o.set(!0)),i.set(e.start),s.set(e.finish),e.otherCells.each((t=>{n.set(t.upOrLeftCells),r.set(t.downOrRightCells),g(e.start),v(e.finish)}))})),e.on(\"ResizeEditor ResizeWindow ScrollContent\",(()=>{i.get().each(g),s.get().each(v)})),e.on(\"TableSelectionClear\",(()=>{o.get()&&(nd(m),nd(f),o.set(!1)),i.clear(),s.clear()})))};const JO=(e,t,n)=>{var r;const o=null!==(r=t.delimiter)&&void 0!==r?r:\"›\",i=t=>z(t,((t,r,i)=>{const s=((t,r,o)=>gg.sketch({dom:{tag:\"div\",classes:[\"tox-statusbar__path-item\"],attributes:{\"data-index\":o,\"aria-level\":o+1}},components:[da(t)],action:t=>{e.focus(),e.selection.select(r),e.nodeChanged()},buttonBehaviours:$l([Xb(n.isDisabled),Gb()])}))(r.name,r.element,i);return 0===i?t.concat([s]):t.concat([{dom:{tag:\"div\",classes:[\"tox-statusbar__path-divider\"],attributes:{\"aria-hidden\":!0}},components:[da(` ${o} `)]},s])}),[]);return{dom:{tag:\"div\",classes:[\"tox-statusbar__path\"],attributes:{role:\"navigation\"}},behaviours:$l([hp.config({mode:\"flow\",selector:\"div[role=button]\"}),sm.config({disabled:n.isDisabled}),Gb(),Fx.config({}),wp.config({}),xp(\"elementPathEvents\",[Qi(((t,n)=>{e.shortcuts.add(\"alt+F11\",\"focus statusbar elementpath\",(()=>hp.focusIn(t))),e.on(\"NodeChange\",(n=>{const r=(t=>{const n=[];let r=t.length;for(;r-- >0;){const i=t[r];if(1===i.nodeType&&\"BR\"!==(o=i).nodeName&&!o.getAttribute(\"data-mce-bogus\")&&\"bookmark\"!==o.getAttribute(\"data-mce-type\")){const t=W_(e,i);if(t.isDefaultPrevented()||n.push({name:t.name,element:i}),t.isPropagationStopped())break}}var o;return n})(n.parents),o=r.length>0?i(r):[];wp.set(t,o)}))}))])]),components:[]}};var QO;!function(e){e[e.None=0]=\"None\",e[e.Both=1]=\"Both\",e[e.Vertical=2]=\"Vertical\"}(QO||(QO={}));const ZO=(e,t,n)=>{const r=Fe.fromDom(e.getContainer()),o=((e,t,n,r,o)=>{const i={height:PT(r+t.top,jg(e),zg(e))};return n===QO.Both&&(i.width=PT(o+t.left,Hg(e),Wg(e))),i})(e,t,n,Yt(r),Vt(r));le(o,((e,t)=>{p(e)&&St(r,t,YT(e))})),(e=>{e.dispatch(\"ResizeEditor\")})(e)},eB=(e,t,n,r)=>{const o=Ht(20*n,20*r);return ZO(e,o,t),L.some(!0)},tB=(e,t)=>{const n=(e=>{const t=pv(e);return!1===t?QO.None:\"both\"===t?QO.Both:QO.Vertical})(e);return n===QO.None?L.none():L.some(Ag(\"resize-handle\",{tag:\"div\",classes:[\"tox-statusbar__resize-handle\"],attributes:{title:t.translate(\"Resize\")},behaviours:[VO.config({mode:\"mouse\",repositionTarget:!1,onDrag:(t,r,o)=>ZO(e,o,n),blockerClass:\"tox-blocker\"}),hp.config({mode:\"special\",onLeft:()=>eB(e,n,-1,0),onRight:()=>eB(e,n,1,0),onUp:()=>eB(e,n,0,-1),onDown:()=>eB(e,n,0,1)}),Fx.config({}),Ap.config({})]},t.icons))},nB=(e,t)=>{const n=()=>{const n=[];return mv(e)&&n.push(JO(e,{},t)),e.hasPlugin(\"wordcount\")&&n.push(((e,t)=>{const n=(e,n,r)=>wp.set(e,[da(t.translate([\"{0} \"+r,n[r]]))]);return gg.sketch({dom:{tag:\"button\",classes:[\"tox-statusbar__wordcount\"]},components:[],buttonBehaviours:$l([Xb(t.isDisabled),Gb(),Fx.config({}),wp.config({}),Nd.config({store:{mode:\"memory\",initialValue:{mode:\"words\",count:{words:0,characters:0}}}}),xp(\"wordcount-events\",[ts((e=>{const t=Nd.getValue(e),r=\"words\"===t.mode?\"characters\":\"words\";Nd.setValue(e,{mode:r,count:t.count}),n(e,t.count,r)})),Qi((t=>{e.on(\"wordCountUpdate\",(e=>{const{mode:r}=Nd.getValue(t);Nd.setValue(t,{mode:r,count:e.wordCount}),n(t,e.wordCount,r)}))}))])]),eventOrder:{[fi()]:[\"disabling\",\"alloy.base.behaviour\",\"wordcount-events\"]}})})(e,t)),fv(e)&&n.push({dom:{tag:\"span\",classes:[\"tox-statusbar__branding\"]},components:[{dom:{tag:\"a\",attributes:{href:\"https://www.tiny.cloud/powered-by-tiny?utm_campaign=editor_referral&utm_medium=poweredby&utm_source=tinymce&utm_content=v6\",rel:\"noopener\",target:\"_blank\",\"aria-label\":yg.translate([\"Powered by {0}\",\"Tiny\"])},innerHtml:'<svg width=\"50px\" height=\"16px\" viewBox=\"0 0 50 16\" xmlns=\"http://www.w3.org/2000/svg\">\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.143 0c2.608.015 5.186 2.178 5.186 5.331 0 0 .077 3.812-.084 4.87-.361 2.41-2.164 4.074-4.65 4.496-1.453.284-2.523.49-3.212.623-.373.071-.634.122-.785.152-.184.038-.997.145-1.35.145-2.732 0-5.21-2.04-5.248-5.33 0 0 0-3.514.03-4.442.093-2.4 1.758-4.342 4.926-4.963 0 0 3.875-.752 4.036-.782.368-.07.775-.1 1.15-.1Zm1.826 2.8L5.83 3.989v2.393l-2.455.475v5.968l6.137-1.189V9.243l2.456-.476V2.8ZM5.83 6.382l3.682-.713v3.574l-3.682.713V6.382Zm27.173-1.64-.084-1.066h-2.226v9.132h2.456V7.743c-.008-1.151.998-2.064 2.149-2.072 1.15-.008 1.987.92 1.995 2.072v5.065h2.455V7.359c-.015-2.18-1.657-3.929-3.837-3.913a3.993 3.993 0 0 0-2.908 1.296Zm-6.3-4.266L29.16 0v2.387l-2.456.475V.476Zm0 3.2v9.132h2.456V3.676h-2.456Zm18.179 11.787L49.11 3.676H46.58l-1.612 4.527-.46 1.382-.384-1.382-1.611-4.527H39.98l3.3 9.132L42.15 16l2.732-.537ZM22.867 9.738c0 .752.568 1.075.921 1.075.353 0 .668-.047.998-.154l.537 1.765c-.23.154-.92.537-2.225.537-1.305 0-2.655-.997-2.686-2.686a136.877 136.877 0 0 1 0-4.374H18.8V3.676h1.612v-1.98l2.455-.476v2.456h2.302V5.9h-2.302v3.837Z\"/>\\n</svg>\\n'.trim()},behaviours:$l([Ap.config({})])}]}),n.length>0?[{dom:{tag:\"div\",classes:[\"tox-statusbar__text-container\"]},components:n}]:[]};return{dom:{tag:\"div\",classes:[\"tox-statusbar\"]},components:(()=>{const r=n(),o=tB(e,t);return r.concat(o.toArray())})()}},rB=e=>e.get().getOrDie(\"UI has not been rendered\"),oB=e=>{const t=e.inline,n=t?VT:$T,r=Tv(e)?QM:xM,o=hc(),i=hc(),s=hc(),a=hc(),l=kn().deviceType.isTouch()?[\"tox-platform-touch\"]:[],c=Sv(e),u=Xg(e),d=vg({dom:{tag:\"div\",classes:[\"tox-anchorbar\"]}}),h=()=>i.get().bind(LE.getHeader),m=()=>Kn.fromOption(o.get(),\"UI has not been rendered\"),f=()=>i.get().bind((e=>LE.getToolbar(e))).getOrDie(\"Could not find more toolbar element\"),p=()=>i.get().bind((e=>LE.getThrobber(e))).getOrDie(\"Could not find throbber element\"),g=cM(m,e,(()=>i.get().bind((e=>d.getOpt(e))).getOrDie(\"Could not find a anchor bar element\"))),v=()=>LE.parts.promotion({dom:{tag:\"div\",classes:[\"tox-promotion\"]}}),y=()=>{const n=(()=>{const t={attributes:{[Nc]:c?$c.BottomToTop:$c.TopToBottom}},n=LE.parts.menubar({dom:{tag:\"div\",classes:[\"tox-menubar\"]},backstage:g,onEscape:()=>{e.focus()}}),r=LE.parts.toolbar({dom:{tag:\"div\",classes:[\"tox-toolbar\"]},getSink:m,providers:g.shared.providers,onEscape:()=>{e.focus()},type:u,lazyToolbar:f,lazyHeader:()=>h().getOrDie(\"Could not find header element\"),...t}),o=LE.parts[\"multiple-toolbar\"]({dom:{tag:\"div\",classes:[\"tox-toolbar-overlord\"]},providers:g.shared.providers,onEscape:()=>{e.focus()},type:u}),i=Dv(e),s=Cv(e),a=_v(e),l=yv(e),p=v(),y=l?[p,n]:[n];return LE.parts.header({dom:{tag:\"div\",classes:[\"tox-editor-header\"],...t},components:q([a?y:[],i?[o]:s?[r]:[],Mv(e)?[]:[d.asSpec()]]),sticky:Tv(e),editor:e,sharedBackstage:g.shared})})(),r={dom:{tag:\"div\",classes:[\"tox-sidebar-wrap\"]},components:[LE.parts.socket({dom:{tag:\"div\",classes:[\"tox-edit-area\"]}}),LE.parts.sidebar({dom:{tag:\"div\",classes:[\"tox-sidebar\"]}})]},o=LE.parts.throbber({dom:{tag:\"div\",classes:[\"tox-throbber\"]},backstage:g}),a=hv(e)&&!t?L.some(nB(e,g.shared.providers)):L.none(),p=q([c?[]:[n],t?[]:[r],c?[n]:[]]),y=q([[{dom:{tag:\"div\",classes:[\"tox-editor-container\"]},components:p}],t?[]:a.toArray(),[o]]),b=Ev(e),_={role:\"application\",...yg.isRtl()?{dir:\"rtl\"}:{},...b?{\"aria-hidden\":\"true\"}:{}},w=pa(LE.sketch({dom:{tag:\"div\",classes:[\"tox\",\"tox-tinymce\"].concat(t?[\"tox-tinymce-inline\"]:[]).concat(c?[\"tox-tinymce--toolbar-bottom\"]:[]).concat(l),styles:{visibility:\"hidden\",...b?{opacity:\"0\",border:\"0\"}:{}},attributes:_},components:y,behaviours:$l([Gb(),sm.config({disableClass:\"tox-tinymce--disabled\"}),hp.config({mode:\"cyclic\",selector:\".tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a, .tox-statusbar__resize-handle\"})])})),x=Sx(w);return i.set(w),s.set(x),{mothership:x,outerContainer:w}},b=t=>{const n=YT(IT(e)),r=YT((e=>HT(e).getOr(Ig(e)))(e));return e.inline||(Ot(\"div\",\"width\",r)&&St(t.element,\"width\",r),Ot(\"div\",\"height\",n)?St(t.element,\"height\",n):St(t.element,\"height\",\"400px\")),n};return{getMothership:()=>rB(s),getUiMothership:()=>rB(a),backstage:g,renderUI:()=>{const{mothership:t,outerContainer:i}=y(),{uiMothership:s,sink:c}=(()=>{const t=Lv(e),n=qe(pt(),t)&&\"grid\"===Lt(t,\"display\"),i={dom:{tag:\"div\",classes:[\"tox\",\"tox-silver-sink\",\"tox-tinymce-aux\"].concat(l),attributes:{...yg.isRtl()?{dir:\"rtl\"}:{}}},behaviours:$l([Uu.config({useFixed:()=>r.isDocked(h)})])},s={dom:{styles:{width:document.body.clientWidth+\"px\"}},events:Hi([zi(ki(),(e=>{St(e.element,\"width\",document.body.clientWidth+\"px\")}))])},c=pa(mr(i,n?s:{})),u=Sx(c);return o.set(c),a.set(u),{sink:c,uiMothership:u}})();ce(Jg(e),((t,n)=>{e.ui.registry.addGroupToolbarButton(n,t)}));const{buttons:d,menuItems:f,contextToolbars:v,sidebars:_}=e.ui.registry.getAll(),w=kv(e),x={menuItems:f,menus:Fv(e),menubar:rv(e),toolbar:w.getOrThunk((()=>ov(e))),allowToolbarGroups:u===Eg.floating,buttons:d,sidebar:_};(t=>{e.addShortcut(\"alt+F9\",\"focus menubar\",(()=>{LE.focusMenubar(t)})),e.addShortcut(\"alt+F10\",\"focus toolbar\",(()=>{LE.focusToolbar(t)})),e.addCommand(\"ToggleToolbarDrawer\",(()=>{LE.toggleToolbarDrawer(t)})),e.addQueryStateHandler(\"ToggleToolbarDrawer\",(()=>LE.isToolbarDrawerToggled(t)))})(i),((e,t,n)=>{const r=(e,r)=>{I([t,n],(t=>{t.broadcastEvent(e,r)}))},o=(e,r)=>{I([t,n],(t=>{t.broadcastOn([e],r)}))},i=e=>o(yd(),{target:e.target}),s=Pn(),a=fc(s,\"touchstart\",i),l=fc(s,\"touchmove\",(e=>r(wi(),e))),c=fc(s,\"touchend\",(e=>r(xi(),e))),u=fc(s,\"mousedown\",i),d=fc(s,\"mouseup\",(e=>{0===e.raw.button&&o(_d(),{target:e.target})})),h=e=>o(yd(),{target:Fe.fromDom(e.target)}),m=e=>{0===e.button&&o(_d(),{target:Fe.fromDom(e.target)})},f=()=>{I(e.editorManager.get(),(t=>{e!==t&&t.dispatch(\"DismissPopups\",{relatedTarget:e})}))},p=e=>r(Ci(),gc(e)),g=e=>{o(bd(),{}),r(ki(),gc(e))},v=()=>o(bd(),{}),y=t=>{t.state&&o(yd(),{target:Fe.fromDom(e.getContainer())})},b=e=>{o(yd(),{target:Fe.fromDom(e.relatedTarget.getContainer())})};e.on(\"PostRender\",(()=>{e.on(\"click\",h),e.on(\"tap\",h),e.on(\"mouseup\",m),e.on(\"mousedown\",f),e.on(\"ScrollWindow\",p),e.on(\"ResizeWindow\",g),e.on(\"ResizeEditor\",v),e.on(\"AfterProgressState\",y),e.on(\"DismissPopups\",b)})),e.on(\"remove\",(()=>{e.off(\"click\",h),e.off(\"tap\",h),e.off(\"mouseup\",m),e.off(\"mousedown\",f),e.off(\"ScrollWindow\",p),e.off(\"ResizeWindow\",g),e.off(\"ResizeEditor\",v),e.off(\"AfterProgressState\",y),e.off(\"DismissPopups\",b),u.unbind(),a.unbind(),l.unbind(),c.unbind(),d.unbind()})),e.on(\"detach\",(()=>{sd(t),sd(n),t.destroy(),n.destroy()}))})(e,t,s),r.setup(e,g.shared,h),BF(e,g),rO(e,m,g),(e=>{const{sidebars:t}=e.ui.registry.getAll();I(se(t),(n=>{const r=t[n],o=()=>_e(L.from(e.queryCommandValue(\"ToggleSidebar\")),n);e.ui.registry.addToggleButton(n,{icon:r.icon,tooltip:r.tooltip,onAction:t=>{e.execCommand(\"ToggleSidebar\",!1,n),t.setActive(o())},onSetup:t=>{t.setActive(o());const n=()=>t.setActive(o());return e.on(\"ToggleSidebar\",n),()=>{e.off(\"ToggleSidebar\",n)}}})}))})(e),IL(e,p,g.shared),gF(e,v,c,{backstage:g}),XO(e,c);const C={mothership:t,uiMothership:s,outerContainer:i,sink:c},k={targetNode:e.getElement(),height:b(i)};return n.render(e,C,x,g,k)}}},iB=b([to(\"lazySink\"),uo(\"dragBlockClass\"),Do(\"getBounds\",Vn),bo(\"useTabstopAt\",A),bo(\"eventOrder\",{}),Yd(\"modalBehaviours\",[hp]),za(\"onExecute\"),Va(\"onEscape\")]),sB={sketch:_},aB=b([ph({name:\"draghandle\",overrides:(e,t)=>({behaviours:$l([VO.config({mode:\"mouse\",getTarget:e=>wa(e,'[role=\"dialog\"]').getOr(e),blockerClass:e.dragBlockClass.getOrDie(new Error(\"The drag blocker class was not specified for a dialog with a drag handle: \\n\"+JSON.stringify(t,null,2)).message),getBounds:e.getDragBounds})])})}),mh({schema:[to(\"dom\")],name:\"title\"}),mh({factory:sB,schema:[to(\"dom\")],name:\"close\"}),mh({factory:sB,schema:[to(\"dom\")],name:\"body\"}),ph({factory:sB,schema:[to(\"dom\")],name:\"footer\"}),fh({factory:{sketch:(e,t)=>({...e,dom:t.dom,components:t.components})},schema:[bo(\"dom\",{tag:\"div\",styles:{position:\"fixed\",left:\"0px\",top:\"0px\",right:\"0px\",bottom:\"0px\"}}),bo(\"components\",[])],name:\"blocker\"})]),lB=jh({name:\"ModalDialog\",configFields:iB(),partFields:aB(),factory:(e,t,n,r)=>{const o=hc(),i=us(\"modal-events\"),s={...e.eventOrder,[Di()]:[i].concat(e.eventOrder[\"alloy.system.attached\"]||[])};return{uid:e.uid,dom:e.dom,components:t,apis:{show:t=>{o.set(t);const n=e.lazySink(t).getOrDie(),i=r.blocker(),s=n.getSystem().build({...i,components:i.components.concat([ga(t)]),behaviours:$l([Ap.config({}),xp(\"dialog-blocker-events\",[Ji(Jo(),(()=>{hp.focusIn(t)}))])])});Zu(n,s),hp.focusIn(t)},hide:e=>{o.clear(),Ze(e.element).each((t=>{e.getSystem().getByDom(t).each((e=>{nd(e)}))}))},getBody:t=>Mh(t,e,\"body\"),getFooter:t=>Mh(t,e,\"footer\"),setIdle:e=>{$L.unblock(e)},setBusy:(e,t)=>{$L.block(e,t)}},eventOrder:s,domModification:{attributes:{role:\"dialog\",\"aria-modal\":\"true\"}},behaviours:Id(e.modalBehaviours,[wp.config({}),hp.config({mode:\"cyclic\",onEnter:e.onExecute,onEscape:e.onEscape,useTabstopAt:e.useTabstopAt}),$L.config({getRoot:o.get}),xp(i,[Qi((t=>{((e,t)=>{const n=wt(e,\"id\").fold((()=>{const e=us(\"dialog-label\");return yt(t,\"id\",e),e}),_);yt(e,\"aria-labelledby\",n)})(t.element,Mh(t,e,\"title\").element),((e,t)=>{const n=L.from(_t(e,\"id\")).fold((()=>{const e=us(\"dialog-describe\");return yt(t,\"id\",e),e}),_);yt(e,\"aria-describedby\",n)})(t.element,Mh(t,e,\"body\").element)}))])])}},apis:{show:(e,t)=>{e.show(t)},hide:(e,t)=>{e.hide(t)},getBody:(e,t)=>e.getBody(t),getFooter:(e,t)=>e.getFooter(t),setBusy:(e,t,n)=>{e.setBusy(t,n)},setIdle:(e,t)=>{e.setIdle(t)}}}),cB=Er([Dy,Sy].concat(wb)),uB=Pr,dB=[Qy(\"button\"),Py,Co(\"align\",\"end\",[\"start\",\"end\"]),qy,Vy,po(\"buttonType\",[\"primary\",\"secondary\"])],hB=[...dB,My],mB=[io(\"type\",[\"submit\",\"cancel\",\"custom\"]),...hB],fB=[io(\"type\",[\"menu\"]),Yy,Iy,Py,co(\"items\",cB),...dB],pB=Jr(\"type\",{submit:mB,cancel:mB,custom:mB,menu:fB}),gB=[Dy,My,io(\"level\",[\"info\",\"warn\",\"error\",\"success\"]),Ey,bo(\"url\",\"\")],vB=Er(gB),yB=[Dy,My,Vy,Qy(\"button\"),Py,Uy,po(\"buttonType\",[\"primary\",\"secondary\",\"toolbar\"]),qy],bB=Er(yB),_B=[Dy,Sy],wB=_B.concat([Hy]),xB=_B.concat([Ay,Vy]),CB=Er(xB),kB=Pr,DB=wB.concat([Gy(\"auto\")]),SB=Er(DB),AB=Br([Ty,My,Ey]),MB=Er(wB),LB=Yr,EB=Er(wB),TB=Yr,FB=_B.concat([xo(\"tag\",\"textarea\"),oo(\"scriptId\"),oo(\"scriptUrl\"),((e,t)=>_o(e,t,jr))(\"settings\",void 0)]),OB=_B.concat([xo(\"tag\",\"textarea\"),so(\"init\")]),BB=Ur((e=>qr(\"customeditor.old\",Lr(OB),e).orThunk((()=>qr(\"customeditor.new\",Lr(FB),e))))),RB=Yr,$B=Er(wB),NB=Tr(Cr),YB=e=>[Dy,ro(\"columns\"),e],PB=[Dy,oo(\"html\"),Co(\"presets\",\"presentation\",[\"presentation\",\"document\"])],IB=Er(PB),HB=wB.concat([ko(\"sandboxed\",!0),ko(\"transparent\",!0)]),jB=Er(HB),WB=Yr,zB=Er(_B.concat([fo(\"height\")])),UB=Er([oo(\"url\"),mo(\"zoom\"),mo(\"cachedWidth\"),mo(\"cachedHeight\")]),VB=wB.concat([fo(\"inputMode\"),fo(\"placeholder\"),ko(\"maximized\",!1),Vy]),qB=Er(VB),GB=Yr,KB=e=>[Dy,Ay,e],XB=[My,Ty],JB=[My,co(\"items\",((e,t)=>((e,t)=>{const n=Gt(t);return{extract:(e,t)=>n().extract(e,t),toString:()=>n().toString()}})(0,t))(0,(()=>QB)))],QB=Fr([Er(XB),Er(JB)]),ZB=wB.concat([co(\"items\",QB),Vy]),eR=Er(ZB),tR=Yr,nR=wB.concat([lo(\"items\",[My,Ty]),wo(\"size\",1),Vy]),rR=Er(nR),oR=Yr,iR=wB.concat([ko(\"constrain\",!0),Vy]),sR=Er(iR),aR=Er([oo(\"width\"),oo(\"height\")]),lR=_B.concat([Ay,wo(\"min\",0),wo(\"max\",0)]),cR=Er(lR),uR=Nr,dR=[Dy,co(\"header\",Yr),co(\"cells\",Tr(Yr))],hR=Er(dR),mR=wB.concat([fo(\"placeholder\"),ko(\"maximized\",!1),Vy]),fR=Er(mR),pR=Yr,gR=wB.concat([Co(\"filetype\",\"file\",[\"image\",\"media\",\"file\"]),Vy]),vR=Er(gR),yR=Er([Ty,Ky]),bR=e=>Qr(\"items\",\"items\",{tag:\"required\",process:{}},Tr(Ur((t=>qr(`Checking item of ${e}`,_R,t).fold((e=>Kn.error(Xr(e))),(e=>Kn.value(e))))))),_R=Ar((()=>{return zr(\"type\",{alertbanner:vB,bar:Er((e=bR(\"bar\"),[Dy,e])),button:bB,checkbox:CB,colorinput:MB,colorpicker:EB,dropzone:$B,grid:Er(YB(bR(\"grid\"))),iframe:jB,input:qB,listbox:eR,selectbox:rR,sizeinput:sR,slider:cR,textarea:fR,urlinput:vR,customeditor:BB,htmlpanel:IB,imagepreview:zB,collection:SB,label:Er(KB(bR(\"label\"))),table:hR,panel:xR});var e})),wR=[Dy,bo(\"classes\",[]),co(\"items\",_R)],xR=Er(wR),CR=[Qy(\"tab\"),Ly,co(\"items\",_R)],kR=[Dy,lo(\"tabs\",CR)],DR=Er(kR),SR=hB,AR=pB,MR=Er([oo(\"title\"),no(\"body\",zr(\"type\",{panel:xR,tabpanel:DR})),xo(\"size\",\"normal\"),co(\"buttons\",AR),bo(\"initialData\",{}),Do(\"onAction\",v),Do(\"onChange\",v),Do(\"onSubmit\",v),Do(\"onClose\",v),Do(\"onCancel\",v),Do(\"onTabChange\",v)]),LR=Er([io(\"type\",[\"cancel\",\"custom\"]),...SR]),ER=Er([oo(\"title\"),oo(\"url\"),mo(\"height\"),mo(\"width\"),vo(\"buttons\",LR),Do(\"onAction\",v),Do(\"onCancel\",v),Do(\"onClose\",v),Do(\"onMessage\",v)]),TR=e=>s(e)?[e].concat(G(ge(e),TR)):l(e)?G(e,TR):[],FR=e=>i(e.type)&&i(e.name),OR={checkbox:kB,colorinput:LB,colorpicker:TB,dropzone:NB,input:GB,iframe:WB,imagepreview:UB,selectbox:oR,sizeinput:aR,slider:uR,listbox:tR,size:aR,textarea:pR,urlinput:yR,customeditor:RB,collection:AB,togglemenuitem:uB},BR=e=>{const t=(e=>j(TR(e),FR))(e),n=G(t,(e=>(e=>L.from(OR[e.type]))(e).fold((()=>[]),(t=>[no(e.name,t)]))));return Er(n)},RR=e=>{var t;return{internalDialog:Gr(qr(\"dialog\",MR,e)),dataValidator:BR(e),initialData:null!==(t=e.initialData)&&void 0!==t?t:{}}},$R={open:(e,t)=>{const n=RR(t);return e(n.internalDialog,n.initialData,n.dataValidator)},openUrl:(e,t)=>e(Gr(qr(\"dialog\",ER,t))),redial:e=>RR(e)},NR=e=>{const t=[],n={};return le(e,((e,r)=>{e.fold((()=>{t.push(r)}),(e=>{n[r]=e}))})),t.length>0?Kn.error(t):Kn.value(n)},YR=(e,t,n)=>{const r=vg(Qk.sketch((r=>({dom:{tag:\"div\",classes:[\"tox-form\"].concat(e.classes)},components:P(e.items,(e=>GS(r,e,t,n)))}))));return{dom:{tag:\"div\",classes:[\"tox-dialog__body\"]},components:[{dom:{tag:\"div\",classes:[\"tox-dialog__body-content\"]},components:[r.asSpec()]}],behaviours:$l([hp.config({mode:\"acyclic\",useTabstopAt:C(MD)}),aD(r),hD(r,{postprocess:e=>NR(e).fold((e=>(console.error(e),{})),_)})])}},PR=Hh({name:\"TabButton\",configFields:[bo(\"uid\",void 0),to(\"value\"),Qr(\"dom\",\"dom\",vr((()=>({attributes:{role:\"tab\",id:us(\"aria\"),\"aria-selected\":\"false\"}}))),Rr()),uo(\"action\"),bo(\"domModification\",{}),Yd(\"tabButtonBehaviours\",[Ap,hp,Nd]),to(\"view\")],factory:(e,t)=>({uid:e.uid,dom:e.dom,components:e.components,events:Yp(e.action),behaviours:Id(e.tabButtonBehaviours,[Ap.config({}),hp.config({mode:\"execution\",useSpace:!0,useEnter:!0}),Nd.config({store:{mode:\"memory\",initialValue:e.value}})]),domModification:e.domModification})}),IR=b([to(\"tabs\"),to(\"dom\"),bo(\"clickToDismiss\",!1),Yd(\"tabbarBehaviours\",[vm,hp]),Ha([\"tabClass\",\"selectedClass\"])]),HR=gh({factory:PR,name:\"tabs\",unit:\"tab\",overrides:e=>{const t=(e,t)=>{vm.dehighlight(e,t),$i(e,Fi(),{tabbar:e,button:t})},n=(e,t)=>{vm.highlight(e,t),$i(e,Ti(),{tabbar:e,button:t})};return{action:r=>{const o=r.getSystem().getByUid(e.uid).getOrDie(),i=vm.isHighlighted(o,r);(i&&e.clickToDismiss?t:i?v:n)(o,r)},domModification:{classes:[e.markers.tabClass]}}}}),jR=b([HR]),WR=jh({name:\"Tabbar\",configFields:IR(),partFields:jR(),factory:(e,t,n,r)=>({uid:e.uid,dom:e.dom,components:t,\"debug.sketcher\":\"Tabbar\",domModification:{attributes:{role:\"tablist\"}},behaviours:Id(e.tabbarBehaviours,[vm.config({highlightClass:e.markers.selectedClass,itemClass:e.markers.tabClass,onHighlight:(e,t)=>{yt(t.element,\"aria-selected\",\"true\")},onDehighlight:(e,t)=>{yt(t.element,\"aria-selected\",\"false\")}}),hp.config({mode:\"flow\",getInitial:e=>vm.getHighlighted(e).map((e=>e.element)),selector:\".\"+e.markers.tabClass,executeOnMove:!0})])})}),zR=Hh({name:\"Tabview\",configFields:[Yd(\"tabviewBehaviours\",[wp])],factory:(e,t)=>({uid:e.uid,dom:e.dom,behaviours:Id(e.tabviewBehaviours,[wp.config({})]),domModification:{attributes:{role:\"tabpanel\"}}})}),UR=b([bo(\"selectFirst\",!0),Wa(\"onChangeTab\"),Wa(\"onDismissTab\"),bo(\"tabs\",[]),Yd(\"tabSectionBehaviours\",[])]),VR=mh({factory:WR,schema:[to(\"dom\"),ao(\"markers\",[to(\"tabClass\"),to(\"selectedClass\")])],name:\"tabbar\",defaults:e=>({tabs:e.tabs})}),qR=mh({factory:zR,name:\"tabview\"}),GR=b([VR,qR]),KR=jh({name:\"TabSection\",configFields:UR(),partFields:GR(),factory:(e,t,n,r)=>{const o=(t,n)=>{Ah(t,e,\"tabbar\").each((e=>{n(e).each(Ni)}))};return{uid:e.uid,dom:e.dom,components:t,behaviours:Pd(e.tabSectionBehaviours),events:Hi(q([e.selectFirst?[Qi(((e,t)=>{o(e,vm.getFirst)}))]:[],[zi(Ti(),((t,n)=>{(t=>{const n=Nd.getValue(t);Ah(t,e,\"tabview\").each((r=>{const o=U(e.tabs,(e=>e.value===n));o.each((n=>{const o=n.view();wt(t.element,\"id\").each((e=>{yt(r.element,\"aria-labelledby\",e)})),wp.set(r,o),e.onChangeTab(r,t,o)}))}))})(n.event.button)})),zi(Fi(),((t,n)=>{const r=n.event.button;e.onDismissTab(t,r)}))]])),apis:{getViewItems:t=>Ah(t,e,\"tabview\").map((e=>wp.contents(e))).getOr([]),showTab:(e,t)=>{o(e,(e=>{const n=vm.getCandidates(e);return U(n,(e=>Nd.getValue(e)===t)).filter((t=>!vm.isHighlighted(e,t)))}))}}}},apis:{getViewItems:(e,t)=>e.getViewItems(t),showTab:(e,t,n)=>{e.showTab(t,n)}}}),XR=(e,t)=>{St(e,\"height\",t+\"px\"),St(e,\"flex-basis\",t+\"px\")},JR=(e,t,n)=>{wa(e,'[role=\"dialog\"]').each((e=>{Ca(e,'[role=\"tablist\"]').each((r=>{n.get().map((n=>(St(t,\"height\",\"0\"),St(t,\"flex-basis\",\"0\"),Math.min(n,((e,t,n)=>{const r=Je(e).dom,o=wa(e,\".tox-dialog-wrap\").getOr(e);let i;i=\"fixed\"===Lt(o,\"position\")?Math.max(r.clientHeight,window.innerHeight):Math.max(r.offsetHeight,r.scrollHeight);const s=Yt(t),a=t.dom.offsetLeft>=n.dom.offsetLeft+Vt(n)?Math.max(Yt(n),s):s,l=parseInt(Lt(e,\"margin-top\"),10)||0,c=parseInt(Lt(e,\"margin-bottom\"),10)||0;return i-(Yt(e)+l+c-a)})(e,t,r))))).each((e=>{XR(t,e)}))}))}))},QR=e=>Ca(e,'[role=\"tabpanel\"]'),ZR=e=>{const t=hc(),n=[Qi((n=>{const r=n.element;QR(r).each((o=>{St(o,\"visibility\",\"hidden\"),n.getSystem().getByDom(o).toOptional().each((n=>{const r=((e,t,n)=>P(e,((r,o)=>{wp.set(n,e[o].view());const i=t.dom.getBoundingClientRect();return wp.set(n,[]),i.height})))(e,o,n),i=(e=>ne(ee(e,((e,t)=>e>t?-1:e<t?1:0))))(r);i.fold(t.clear,t.set)})),JR(r,o,t),Bt(o,\"visibility\"),((e,t)=>{ne(e).each((e=>KR.showTab(t,e.value)))})(e,n),requestAnimationFrame((()=>{JR(r,o,t)}))}))})),zi(ki(),(e=>{const n=e.element;QR(n).each((e=>{JR(n,e,t)}))})),zi(Vx,((e,n)=>{const r=e.element;QR(r).each((e=>{const n=Vl(ct(e));St(e,\"visibility\",\"hidden\");const o=Tt(e,\"height\").map((e=>parseInt(e,10)));Bt(e,\"height\"),Bt(e,\"flex-basis\");const i=e.dom.getBoundingClientRect().height;o.forall((e=>i>e))?(t.set(i),JR(r,e,t)):o.each((t=>{XR(e,t)})),Bt(e,\"visibility\"),n.each(zl)}))}))];return{extraEvents:n,selectFirst:!1}},e$=\"send-data-to-section\",t$=\"send-data-to-view\",n$=(e,t,n)=>{const r=Mo({}),o=e=>{const t=Nd.getValue(e),n=NR(t).getOr({}),o=r.get(),i=mr(o,n);r.set(i)},i=e=>{const t=r.get();Nd.setValue(e,t)},s=Mo(null),a=P(e.tabs,(e=>({value:e.name,dom:{tag:\"div\",classes:[\"tox-dialog__body-nav-item\"]},components:[da(n.shared.providers.translate(e.title))],view:()=>[Qk.sketch((r=>({dom:{tag:\"div\",classes:[\"tox-form\"]},components:P(e.items,(e=>GS(r,e,t,n))),formBehaviours:$l([hp.config({mode:\"acyclic\",useTabstopAt:C(MD)}),xp(\"TabView.form.events\",[Qi(i),Zi(o)]),jl.config({channels:Fo([{key:e$,value:{onReceive:o}},{key:t$,value:{onReceive:i}}])})])})))]}))),l=ZR(a);return KR.sketch({dom:{tag:\"div\",classes:[\"tox-dialog__body\"]},onChangeTab:(e,t,n)=>{const r=Nd.getValue(t);$i(e,Ux,{name:r,oldName:s.get()}),s.set(r)},tabs:a,components:[KR.parts.tabbar({dom:{tag:\"div\",classes:[\"tox-dialog__body-nav\"]},components:[WR.parts.tabs({})],markers:{tabClass:\"tox-tab\",selectedClass:\"tox-dialog__body-nav-item--active\"},tabbarBehaviours:$l([Fx.config({})])}),KR.parts.tabview({dom:{tag:\"div\",classes:[\"tox-dialog__body-content\"]}})],selectFirst:l.selectFirst,tabSectionBehaviours:$l([xp(\"tabpanel\",l.extraEvents),hp.config({mode:\"acyclic\"}),Vh.config({find:e=>ne(KR.getViewItems(e))}),fD(L.none(),(e=>(e.getSystem().broadcastOn([e$],{}),r.get())),((e,t)=>{r.set(t),e.getSystem().broadcastOn([t$],{})}))])})},r$=us(\"update-dialog\"),o$=us(\"update-title\"),i$=us(\"update-body\"),s$=us(\"update-footer\"),a$=us(\"body-send-message\"),l$=(e,t,n,r,o)=>({dom:{tag:\"div\",classes:[\"tox-dialog__content-js\"],attributes:{...n.map((e=>({id:e}))).getOr({}),...o?{\"aria-live\":\"polite\"}:{}}},components:[],behaviours:$l([lD(0),dT.config({channel:`${i$}-${t}`,updateState:(e,t)=>L.some({isTabPanel:()=>\"tabpanel\"===t.body.type}),renderComponents:e=>{const t=e.body;return\"tabpanel\"===t.type?[n$(t,e.initialData,r)]:[YR(t,e.initialData,r)]},initialData:e})])}),c$=Bg.deviceType.isTouch(),u$=(e,t)=>({dom:{tag:\"div\",styles:{display:\"none\"},classes:[\"tox-dialog__header\"]},components:[e,t]}),d$=(e,t)=>lB.parts.close(gg.sketch({dom:{tag:\"button\",classes:[\"tox-button\",\"tox-button--icon\",\"tox-button--naked\"],attributes:{type:\"button\",\"aria-label\":t.translate(\"Close\")}},action:e,buttonBehaviours:$l([Fx.config({})])})),h$=()=>lB.parts.title({dom:{tag:\"div\",classes:[\"tox-dialog__title\"],innerHtml:\"\",styles:{display:\"none\"}}}),m$=(e,t)=>lB.parts.body({dom:{tag:\"div\",classes:[\"tox-dialog__body\"]},components:[{dom:{tag:\"div\",classes:[\"tox-dialog__body-content\"]},components:[{dom:NL(`<p>${t.translate(e)}</p>`)}]}]}),f$=e=>lB.parts.footer({dom:{tag:\"div\",classes:[\"tox-dialog__footer\"]},components:e}),p$=(e,t)=>[Dx.sketch({dom:{tag:\"div\",classes:[\"tox-dialog__footer-start\"]},components:e}),Dx.sketch({dom:{tag:\"div\",classes:[\"tox-dialog__footer-end\"]},components:t})],g$=e=>{const t=\"tox-dialog\",n=t+\"-wrap\",r=n+\"__backdrop\",o=t+\"__disable-scroll\";return lB.sketch({lazySink:e.lazySink,onEscape:t=>(e.onEscape(t),L.some(!0)),useTabstopAt:e=>!MD(e),dom:{tag:\"div\",classes:[t].concat(e.extraClasses),styles:{position:\"relative\",...e.extraStyles}},components:[e.header,e.body,...e.footer.toArray()],parts:{blocker:{dom:NL(`<div class=\"${n}\"></div>`),components:[{dom:{tag:\"div\",classes:c$?[r,r+\"--opaque\"]:[r]}}]}},dragBlockClass:n,modalBehaviours:$l([Ap.config({}),xp(\"dialog-events\",e.dialogEvents.concat([Ji(Jo(),((e,t)=>{hp.focusIn(e)}))])),xp(\"scroll-lock\",[Qi((()=>{Vs(pt(),o)})),Zi((()=>{qs(pt(),o)}))]),...e.extraBehaviours]),eventOrder:{[fi()]:[\"dialog-events\"],[Di()]:[\"scroll-lock\",\"dialog-events\",\"alloy.base.behaviour\"],[Si()]:[\"alloy.base.behaviour\",\"dialog-events\",\"scroll-lock\"],...e.eventOrder}})},v$=e=>gg.sketch({dom:{tag:\"button\",classes:[\"tox-button\",\"tox-button--icon\",\"tox-button--naked\"],attributes:{type:\"button\",\"aria-label\":e.translate(\"Close\"),title:e.translate(\"Close\")}},components:[Ag(\"close\",{tag:\"div\",classes:[\"tox-icon\"]},e.icons)],action:e=>{Ri(e,Ix)}}),y$=(e,t,n,r)=>({dom:{tag:\"div\",classes:[\"tox-dialog__title\"],attributes:{...n.map((e=>({id:e}))).getOr({})}},components:[],behaviours:$l([dT.config({channel:`${o$}-${t}`,initialData:e,renderComponents:e=>[da(r.translate(e.title))]})])}),b$=()=>({dom:NL('<div class=\"tox-dialog__draghandle\"></div>')}),_$=(e,t,n)=>((e,t,n)=>{const r=lB.parts.title(y$(e,t,L.none(),n)),o=lB.parts.draghandle(b$()),i=lB.parts.close(v$(n)),s=[r].concat(e.draggable?[o]:[]).concat([i]);return Dx.sketch({dom:NL('<div class=\"tox-dialog__header\"></div>'),components:s})})({title:n.shared.providers.translate(e),draggable:n.dialog.isDraggableModal()},t,n.shared.providers),w$=(e,t,n)=>({dom:{tag:\"div\",classes:[\"tox-dialog__busy-spinner\"],attributes:{\"aria-label\":n.translate(e)},styles:{left:\"0px\",right:\"0px\",bottom:\"0px\",top:\"0px\",position:\"absolute\"}},behaviours:t,components:[{dom:NL('<div class=\"tox-spinner\"><div></div><div></div><div></div></div>')}]}),x$=(e,t,n)=>({onClose:()=>n.closeWindow(),onBlock:n=>{lB.setBusy(e(),((e,r)=>w$(n.message,r,t)))},onUnblock:()=>{lB.setIdle(e())}}),C$=(e,t,n,r)=>pa(g$({...e,lazySink:r.shared.getSink,extraBehaviours:[dT.config({channel:`${r$}-${e.id}`,updateState:(e,t)=>L.some(t),initialData:t}),gD({}),...e.extraBehaviours],onEscape:e=>{Ri(e,Ix)},dialogEvents:n,eventOrder:{[mi()]:[dT.name(),jl.name()],[Di()]:[\"scroll-lock\",dT.name(),\"messages\",\"dialog-events\",\"alloy.base.behaviour\"],[Si()]:[\"alloy.base.behaviour\",\"dialog-events\",\"messages\",dT.name(),\"scroll-lock\"]}})),k$=e=>P(e,(e=>\"menu\"===e.type?(e=>{const t=P(e.items,(e=>({...e,storage:Mo(!1)})));return{...e,items:t}})(e):e)),D$=e=>z(e,((e,t)=>{if(\"menu\"===t.type){return z(t.items,((e,t)=>(e[t.name]=t.storage,e)),e)}return e}),{}),S$=(e,t)=>[Gi(Jo(),AD),e(Px,((e,n)=>{t.onClose(),n.onClose()})),e(Ix,((e,t,n,r)=>{t.onCancel(e),Ri(r,Px)})),zi(zx,((e,n)=>t.onUnblock())),zi(Wx,((e,n)=>t.onBlock(n.event)))],A$=(e,t)=>{const n=(t,n)=>zi(t,((t,o)=>{r(t,((r,i)=>{n(e(),r,o.event,t)}))})),r=(e,t)=>{dT.getState(e).get().each((n=>{t(n,e)}))};return[...S$(n,t),n(Hx,((e,t,n)=>{t.onAction(e,{name:n.name})}))]},M$=(e,t,n)=>{const r=(t,n)=>zi(t,((t,r)=>{o(t,((o,i)=>{n(e(),o,r.event,t)}))})),o=(e,t)=>{dT.getState(e).get().each((n=>{t(n.internalDialog,e)}))};return[...S$(r,t),r(jx,((e,t)=>t.onSubmit(e))),r(Yx,((e,t,n)=>{t.onChange(e,{name:n.name})})),r(Hx,((e,t,r,o)=>{const i=()=>hp.focusIn(o),s=e=>xt(e,\"disabled\")||wt(e,\"aria-disabled\").exists((e=>\"true\"===e)),a=ct(o.element),l=Vl(a);t.onAction(e,{name:r.name,value:r.value}),Vl(a).fold(i,(e=>{s(e)||l.exists((t=>Ge(e,t)&&s(t)))?i():n().toOptional().filter((t=>!Ge(t.element,e))).each(i)}))})),r(Ux,((e,t,n)=>{t.onTabChange(e,{newTabName:n.name,oldTabName:n.oldName})})),Zi((t=>{const n=e();Nd.setValue(t,n.getData())}))]},L$=(e,t)=>{const n=t.map((e=>e.footerButtons)).getOr([]),r=H(n,(e=>\"start\"===e.align)),o=(e,t)=>Dx.sketch({dom:{tag:\"div\",classes:[`tox-dialog__footer-${e}`]},components:P(t,(e=>e.memento.asSpec()))});return[o(\"start\",r.pass),o(\"end\",r.fail)]},E$=(e,t,n)=>({dom:NL('<div class=\"tox-dialog__footer\"></div>'),components:[],behaviours:$l([dT.config({channel:`${s$}-${t}`,initialData:e,updateState:(e,t)=>{const r=P(t.buttons,(e=>{const t=vg(((e,t)=>ES(e,e.type,t))(e,n));return{name:e.name,align:e.align,memento:t}}));return L.some({lookupByName:t=>((e,t,n)=>U(t,(e=>e.name===n)).bind((t=>t.memento.getOpt(e))))(e,r,t),footerButtons:r})},renderComponents:L$})])}),T$=(e,t,n)=>lB.parts.footer(E$(e,t,n)),F$=(e,t)=>{if(e.getRoot().getSystem().isConnected()){const n=Vh.getCurrent(e.getFormWrapper()).getOr(e.getFormWrapper());return Qk.getField(n,t).orThunk((()=>{const n=e.getFooter();return dT.getState(n).get().bind((e=>e.lookupByName(t)))}))}return L.none()},O$=(e,t,n)=>{const r=t=>{const n=e.getRoot();n.getSystem().isConnected()&&t(n)},o={getData:()=>{const t=e.getRoot(),r=t.getSystem().isConnected()?e.getFormWrapper():t;return{...Nd.getValue(r),...ce(n,(e=>e.get()))}},setData:t=>{r((r=>{const i=o.getData(),s=mr(i,t),a=((e,t)=>{const n=e.getRoot();return dT.getState(n).get().map((e=>Gr(qr(\"data\",e.dataValidator,t)))).getOr(t)})(e,s),l=e.getFormWrapper();Nd.setValue(l,a),le(n,((e,t)=>{ye(s,t)&&e.set(s[t])}))}))},setEnabled:(t,n)=>{F$(e,t).each(n?sm.enable:sm.disable)},focus:t=>{F$(e,t).each(Ap.focus)},block:e=>{if(!i(e))throw new Error(\"The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument\");r((t=>{$i(t,Wx,{message:e})}))},unblock:()=>{r((e=>{Ri(e,zx)}))},showTab:t=>{r((n=>{const r=e.getBody();dT.getState(r).get().exists((e=>e.isTabPanel()))&&Vh.getCurrent(r).each((e=>{KR.showTab(e,t)}))}))},redial:n=>{r((r=>{const i=e.getId(),s=t(n);r.getSystem().broadcastOn([`${r$}-${i}`],s),r.getSystem().broadcastOn([`${o$}-${i}`],s.internalDialog),r.getSystem().broadcastOn([`${i$}-${i}`],s.internalDialog),r.getSystem().broadcastOn([`${s$}-${i}`],s.internalDialog),o.setData(s.initialData)}))},close:()=>{r((e=>{Ri(e,Px)}))}};return o},B$=(e,t,n)=>{const r=us(\"dialog\"),o=e.internalDialog,i=_$(o.title,r,n),s=((e,t,n)=>{const r=l$(e,t,L.none(),n,!1);return lB.parts.body(r)})({body:o.body,initialData:o.initialData},r,n),a=k$(o.buttons),l=D$(a),c=T$({buttons:a},r,n),u=M$((()=>p),x$((()=>m),n.shared.providers,t),n.shared.getSink),d=(e=>{switch(e){case\"large\":return[\"tox-dialog--width-lg\"];case\"medium\":return[\"tox-dialog--width-md\"];default:return[]}})(o.size),h={id:r,header:i,body:s,footer:L.some(c),extraClasses:d,extraBehaviours:[],extraStyles:{}},m=C$(h,e,u,n),f={getId:b(r),getRoot:b(m),getBody:()=>lB.getBody(m),getFooter:()=>lB.getFooter(m),getFormWrapper:()=>{const e=lB.getBody(m);return Vh.getCurrent(e).getOr(e)}},p=O$(f,t.redial,l);return{dialog:m,instanceApi:p}},R$=(e,t,n,r)=>{const o=us(\"dialog\"),i=us(\"dialog-label\"),s=us(\"dialog-content\"),a=e.internalDialog,l=vg(((e,t,n,r)=>Dx.sketch({dom:NL('<div class=\"tox-dialog__header\"></div>'),components:[y$(e,t,L.some(n),r),b$(),v$(r)],containerBehaviours:$l([VO.config({mode:\"mouse\",blockerClass:\"blocker\",getTarget:e=>ka(e,'[role=\"dialog\"]').getOrDie(),snaps:{getSnapPoints:()=>[],leftAttr:\"data-drag-left\",topAttr:\"data-drag-top\"}})])}))({title:a.title,draggable:!0},o,i,n.shared.providers)),c=vg(((e,t,n,r,o)=>l$(e,t,L.some(n),r,o))({body:a.body,initialData:a.initialData},o,s,n,r)),u=k$(a.buttons),d=D$(u),h=vg(((e,t,n)=>E$(e,t,n))({buttons:u},o,n)),m=M$((()=>p),{onBlock:e=>{$L.block(f,((t,r)=>w$(e.message,r,n.shared.providers)))},onUnblock:()=>{$L.unblock(f)},onClose:()=>t.closeWindow()},n.shared.getSink),f=pa({dom:{tag:\"div\",classes:[\"tox-dialog\",\"tox-dialog-inline\"],attributes:{role:\"dialog\",\"aria-labelledby\":i,\"aria-describedby\":s}},eventOrder:{[mi()]:[dT.name(),jl.name()],[fi()]:[\"execute-on-form\"],[Di()]:[\"reflecting\",\"execute-on-form\"]},behaviours:$l([hp.config({mode:\"cyclic\",onEscape:e=>(Ri(e,Px),L.some(!0)),useTabstopAt:e=>!MD(e)&&(\"button\"!==Ye(e)||\"disabled\"!==_t(e,\"disabled\"))}),dT.config({channel:`${r$}-${o}`,updateState:(e,t)=>L.some(t),initialData:e}),Ap.config({}),xp(\"execute-on-form\",m.concat([Ji(Jo(),((e,t)=>{hp.focusIn(e)}))])),$L.config({getRoot:()=>L.some(f)}),wp.config({}),gD({})]),components:[l.asSpec(),c.asSpec(),h.asSpec()]}),p=O$({getId:b(o),getRoot:b(f),getFooter:()=>h.get(f),getBody:()=>c.get(f),getFormWrapper:()=>{const e=c.get(f);return Vh.getCurrent(e).getOr(e)}},t.redial,d);return{dialog:f,instanceApi:p}};var $$=tinymce.util.Tools.resolve(\"tinymce.util.URI\");const N$=[\"insertContent\",\"setContent\",\"execCommand\",\"close\",\"block\",\"unblock\"],Y$=e=>s(e)&&-1!==N$.indexOf(e.mceAction),P$=(e,t,n,r)=>{const o=us(\"dialog\"),a=_$(e.title,o,r),l=(e=>{const t={dom:{tag:\"div\",classes:[\"tox-dialog__content-js\"]},components:[{dom:{tag:\"div\",classes:[\"tox-dialog__body-iframe\"]},components:[DD({dom:{tag:\"iframe\",attributes:{src:e.url}},behaviours:$l([Fx.config({}),Ap.config({})])})]}],behaviours:$l([hp.config({mode:\"acyclic\",useTabstopAt:C(MD)})])};return lB.parts.body(t)})(e),c=e.buttons.bind((e=>0===e.length?L.none():L.some(T$({buttons:e},o,r)))),d=A$((()=>_),x$((()=>b),r.shared.providers,t)),h={...e.height.fold((()=>({})),(e=>({height:e+\"px\",\"max-height\":e+\"px\"}))),...e.width.fold((()=>({})),(e=>({width:e+\"px\",\"max-width\":e+\"px\"})))},f=e.width.isNone()&&e.height.isNone()?[\"tox-dialog--width-lg\"]:[],p=new $$(e.url,{base_uri:new $$(window.location.href)}),g=`${p.protocol}://${p.host}${p.port?\":\"+p.port:\"\"}`,v=dc(),y=[xp(\"messages\",[Qi((()=>{const t=fc(Fe.fromDom(window),\"message\",(t=>{if(p.isSameOrigin(new $$(t.raw.origin))){const r=t.raw.data;Y$(r)?((e,t,n)=>{switch(n.mceAction){case\"insertContent\":e.insertContent(n.content);break;case\"setContent\":e.setContent(n.content);break;case\"execCommand\":const r=!!u(n.ui)&&n.ui;e.execCommand(n.cmd,r,n.value);break;case\"close\":t.close();break;case\"block\":t.block(n.message);break;case\"unblock\":t.unblock()}})(n,_,r):(e=>!Y$(e)&&s(e)&&ye(e,\"mceAction\"))(r)&&e.onMessage(_,r)}}));v.set(t)})),Zi(v.clear)]),jl.config({channels:{[a$]:{onReceive:(e,t)=>{Ca(e.element,\"iframe\").each((e=>{const n=e.dom.contentWindow;m(n)&&n.postMessage(t,g)}))}}}})],b=C$({id:o,header:a,body:l,footer:c,extraClasses:f,extraBehaviours:y,extraStyles:h},e,d,r),_=(e=>{const t=t=>{e.getSystem().isConnected()&&t(e)};return{block:e=>{if(!i(e))throw new Error(\"The urlDialogInstanceAPI.block function should be passed a blocking message of type string as an argument\");t((t=>{$i(t,Wx,{message:e})}))},unblock:()=>{t((e=>{Ri(e,zx)}))},close:()=>{t((e=>{Ri(e,Px)}))},sendMessage:e=>{t((t=>{t.getSystem().broadcastOn([a$],e)}))}}})(b);return{dialog:b,instanceApi:_}},I$=(e,t,n)=>t&&n?[]:[jM.config({contextual:{lazyContext:()=>L.some(zn(Fe.fromDom(e.getContentAreaContainer()))),fadeInClass:\"tox-dialog-dock-fadein\",fadeOutClass:\"tox-dialog-dock-fadeout\",transitionClass:\"tox-dialog-dock-transition\"},modes:[\"top\"]})],H$=e=>{const t=e.backstage,n=e.editor,r=Tv(n),o=(e=>{const t=e.shared;return{open:(n,r)=>{const o=()=>{lB.hide(l),r()},i=vg(ES({name:\"close-alert\",text:\"OK\",primary:!0,buttonType:L.some(\"primary\"),align:\"end\",enabled:!0,icon:L.none()},\"cancel\",e)),s=h$(),a=d$(o,t.providers),l=pa(g$({lazySink:()=>t.getSink(),header:u$(s,a),body:m$(n,t.providers),footer:L.some(f$(p$([],[i.asSpec()]))),onEscape:o,extraClasses:[\"tox-alert-dialog\"],extraBehaviours:[],extraStyles:{},dialogEvents:[zi(Ix,o)],eventOrder:{}}));lB.show(l);const c=i.get(l);Ap.focus(c)}}})(t),i=(e=>{const t=e.shared;return{open:(n,r)=>{const o=e=>{lB.hide(c),r(e)},i=vg(ES({name:\"yes\",text:\"Yes\",primary:!0,buttonType:L.some(\"primary\"),align:\"end\",enabled:!0,icon:L.none()},\"submit\",e)),s=ES({name:\"no\",text:\"No\",primary:!1,buttonType:L.some(\"secondary\"),align:\"end\",enabled:!0,icon:L.none()},\"cancel\",e),a=h$(),l=d$((()=>o(!1)),t.providers),c=pa(g$({lazySink:()=>t.getSink(),header:u$(a,l),body:m$(n,t.providers),footer:L.some(f$(p$([],[s,i.asSpec()]))),onEscape:()=>o(!1),extraClasses:[\"tox-confirm-dialog\"],extraBehaviours:[],extraStyles:{},dialogEvents:[zi(Ix,(()=>o(!1))),zi(jx,(()=>o(!0)))],eventOrder:{}}));lB.show(c);const u=i.get(c);Ap.focus(u)}}})(t),s=(e,r)=>$R.openUrl((e=>{const o=P$(e,{closeWindow:()=>{lB.hide(o.dialog),r(o.instanceApi)}},n,t);return lB.show(o.dialog),o.instanceApi}),e),a=(e,n)=>$R.open(((e,r,o)=>{const i=r,s=B$({dataValidator:o,initialData:i,internalDialog:e},{redial:$R.redial,closeWindow:()=>{lB.hide(s.dialog),n(s.instanceApi)}},t);return lB.show(s.dialog),s.instanceApi.setData(i),s.instanceApi}),e),l=(e,o,i,s=!1)=>$R.open(((e,a,l)=>{const c=Gr(qr(\"data\",l,a));const u=hc(),d=t.shared.header.isPositionedAtTop(),h=()=>u.on((e=>{fg.reposition(e),jM.refresh(e)})),m=R$({dataValidator:l,initialData:c,internalDialog:e},{redial:$R.redial,closeWindow:()=>{u.on(fg.hide),n.off(\"ResizeEditor\",h),u.clear(),i(m.instanceApi)}},t,s),f=pa(fg.sketch({lazySink:t.shared.getSink,dom:{tag:\"div\",classes:[]},fireDismissalEventInstead:{},...d?{}:{fireRepositionEventInstead:{}},inlineBehaviours:$l([xp(\"window-manager-inline-events\",[zi(Ai(),((e,t)=>{Ri(m.dialog,Ix)}))]),...I$(n,r,d)]),isExtraPart:(e,t)=>(e=>hx(e,\".tox-alert-dialog\")||hx(e,\".tox-confirm-dialog\"))(t)}));return u.set(f),fg.showWithin(f,ga(m.dialog),{anchor:o},L.some(pt())),r&&d||(jM.refresh(f),n.on(\"ResizeEditor\",h)),m.instanceApi.setData(c),hp.focusIn(m.dialog),m.instanceApi}),e);return{open:(e,n,r)=>void 0!==n&&\"toolbar\"===n.inline?l(e,t.shared.anchors.inlineDialog(),r,n.ariaAttrs):void 0!==n&&\"cursor\"===n.inline?l(e,t.shared.anchors.cursor(),r,n.ariaAttrs):a(e,r),openUrl:(e,t)=>s(e,t),alert:(e,t)=>{o.open(e,t)},close:e=>{e.close()},confirm:(e,t)=>{i.open(e,t)}}},j$=e=>{Ng(e),(e=>{const t=e.options.register;var n;t(\"color_map\",{processor:e=>g(e,i)?{value:J_(e),valid:!0}:{valid:!1,message:\"Must be an array of strings.\"},default:[\"#BFEDD2\",\"Light Green\",\"#FBEEB8\",\"Light Yellow\",\"#F8CAC6\",\"Light Red\",\"#ECCAFA\",\"Light Purple\",\"#C2E0F4\",\"Light Blue\",\"#2DC26B\",\"Green\",\"#F1C40F\",\"Yellow\",\"#E03E2D\",\"Red\",\"#B96AD9\",\"Purple\",\"#3598DB\",\"Blue\",\"#169179\",\"Dark Turquoise\",\"#E67E23\",\"Orange\",\"#BA372A\",\"Dark Red\",\"#843FA1\",\"Dark Purple\",\"#236FA1\",\"Dark Blue\",\"#ECF0F1\",\"Light Gray\",\"#CED4D9\",\"Medium Gray\",\"#95A5A6\",\"Gray\",\"#7E8C8D\",\"Dark Gray\",\"#34495E\",\"Navy Blue\",\"#000000\",\"Black\",\"#ffffff\",\"White\"]}),t(\"color_cols\",{processor:\"number\",default:(n=tw(e).length,Math.max(5,Math.ceil(Math.sqrt(n))))}),t(\"custom_colors\",{processor:\"boolean\",default:!0})})(e),(e=>{const t=e.options.register;t(\"contextmenu_avoid_overlap\",{processor:\"string\",default:\"\"}),t(\"contextmenu_never_use_native\",{processor:\"boolean\",default:!1}),t(\"contextmenu\",{processor:e=>!1===e?{value:[],valid:!0}:i(e)||g(e,i)?{value:RF(e),valid:!0}:{valid:!1,message:\"Must be false or a string.\"},default:\"link linkchecker image editimage table spellchecker configurepermanentpen\"})})(e)};M.add(\"silver\",(e=>{j$(e);const{getUiMothership:t,backstage:n,renderUI:r}=oB(e);dx(e,n.shared);const o=H$({editor:e,backstage:n});return{renderUI:r,getWindowManagerImpl:b(o),getNotificationManagerImpl:()=>((e,t,n)=>{const r=t.backstage.shared,o=()=>{const t=zn(Fe.fromDom(e.getContentAreaContainer())),n=Vn(),r=al(n.x,t.x,t.right),o=al(n.y,t.y,t.bottom),i=Math.max(t.right,n.right),s=Math.max(t.bottom,n.bottom);return L.some(Wn(r,o,i-r,s-o))};return{open:(t,i)=>{const s=()=>{i(),fg.hide(l)},a=pa(Lg.sketch({text:t.text,level:R([\"success\",\"error\",\"warning\",\"warn\",\"info\"],t.type)?t.type:void 0,progress:!0===t.progressBar,icon:t.icon,closeButton:t.closeButton,onAction:s,iconProvider:r.providers.icons,translationProvider:r.providers.translate})),l=pa(fg.sketch({dom:{tag:\"div\",classes:[\"tox-notifications-container\"]},lazySink:r.getSink,fireDismissalEventInstead:{},...r.header.isPositionedAtTop()?{}:{fireRepositionEventInstead:{}}}));n.add(l),p(t.timeout)&&t.timeout>0&&pg.setEditorTimeout(e,(()=>{s()}),t.timeout);const c={close:s,reposition:()=>{const t=ga(a),n={maxHeightFunction:Ac()},i=e.notificationManager.getNotifications();if(i[0]===c){const e={...r.anchors.banner(),overrides:n};fg.showWithinBounds(l,t,{anchor:e},o)}else B(i,c).each((e=>{const r=i[e-1].getEl(),s={type:\"node\",root:pt(),node:L.some(Fe.fromDom(r)),overrides:n,layouts:{onRtl:()=>[wl],onLtr:()=>[wl]}};fg.showWithinBounds(l,t,{anchor:s},o)}))},text:e=>{Lg.updateText(a,e)},settings:t,getEl:()=>a.element.dom,progressBar:{value:e=>{Lg.updateProgress(a,e)}}};return c},close:e=>{e.close()},getArgs:e=>e.settings}})(e,{backstage:n},t())}}))}()},7575:e=>{!function(){\"use strict\";var t=function(e){if(null===e)return\"null\";if(void 0===e)return\"undefined\";var t=typeof e;return\"object\"===t&&(Array.prototype.isPrototypeOf(e)||e.constructor&&\"Array\"===e.constructor.name)?\"array\":\"object\"===t&&(String.prototype.isPrototypeOf(e)||e.constructor&&\"String\"===e.constructor.name)?\"string\":t},n=function(e){return{eq:e}},r=n((function(e,t){return e===t})),o=function(e){return n((function(t,n){if(t.length!==n.length)return!1;for(var r=t.length,o=0;o<r;o++)if(!e.eq(t[o],n[o]))return!1;return!0}))},i=function(e,t){return function(e,t){return n((function(n,r){return e.eq(t(n),t(r))}))}(o(e),(function(e){return function(e,t){return Array.prototype.slice.call(e).sort(t)}(e,t)}))},s=function(e){return n((function(t,n){var o=Object.keys(t),s=Object.keys(n);if(!i(r).eq(o,s))return!1;for(var a=o.length,l=0;l<a;l++){var c=o[l];if(!e.eq(t[c],n[c]))return!1}return!0}))},a=n((function(e,n){if(e===n)return!0;var r=t(e);return r===t(n)&&(function(e){return-1!==[\"undefined\",\"boolean\",\"number\",\"string\",\"function\",\"xml\",\"null\"].indexOf(e)}(r)?e===n:\"array\"===r?o(a).eq(e,n):\"object\"===r&&s(a).eq(e,n))}));const l=Object.getPrototypeOf,c=(e,t,n)=>{var r;return!!n(e,t.prototype)||(null===(r=e.constructor)||void 0===r?void 0:r.name)===t.name},u=e=>t=>(e=>{const t=typeof e;return null===e?\"null\":\"object\"===t&&Array.isArray(e)?\"array\":\"object\"===t&&c(e,String,((e,t)=>t.isPrototypeOf(e)))?\"string\":t})(t)===e,d=e=>t=>typeof t===e,h=e=>t=>e===t,m=(e,t)=>p(e)&&c(e,t,((e,t)=>l(e)===t)),f=u(\"string\"),p=u(\"object\"),g=e=>m(e,Object),v=u(\"array\"),y=h(null),b=d(\"boolean\"),_=h(void 0),w=e=>null==e,x=e=>!w(e),C=d(\"function\"),k=d(\"number\"),D=(e,t)=>{if(v(e)){for(let n=0,r=e.length;n<r;++n)if(!t(e[n]))return!1;return!0}return!1},S=()=>{},A=(e,t)=>(...n)=>e(t.apply(null,n)),M=(e,t)=>n=>e(t(n)),L=e=>()=>e,E=e=>e,T=(e,t)=>e===t;function F(e,...t){return(...n)=>{const r=t.concat(n);return e.apply(null,r)}}const O=e=>t=>!e(t),B=e=>e(),R=e=>{e()},$=L(!1),N=L(!0);class Y{constructor(e,t){this.tag=e,this.value=t}static some(e){return new Y(!0,e)}static none(){return Y.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?Y.some(e(this.value)):Y.none()}bind(e){return this.tag?e(this.value):Y.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:Y.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:\"Called getOrDie on None\")}static from(e){return x(e)?Y.some(e):Y.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:\"none()\"}}Y.singletonNone=new Y(!1);const P=Array.prototype.slice,I=Array.prototype.indexOf,H=Array.prototype.push,j=(e,t)=>I.call(e,t),W=(e,t)=>j(e,t)>-1,z=(e,t)=>{for(let n=0,r=e.length;n<r;n++){if(t(e[n],n))return!0}return!1},U=(e,t)=>{const n=e.length,r=new Array(n);for(let o=0;o<n;o++){const n=e[o];r[o]=t(n,o)}return r},V=(e,t)=>{for(let n=0,r=e.length;n<r;n++){t(e[n],n)}},q=(e,t)=>{for(let n=e.length-1;n>=0;n--){t(e[n],n)}},G=(e,t)=>{const n=[],r=[];for(let o=0,i=e.length;o<i;o++){const i=e[o];(t(i,o)?n:r).push(i)}return{pass:n,fail:r}},K=(e,t)=>{const n=[];for(let r=0,o=e.length;r<o;r++){const o=e[r];t(o,r)&&n.push(o)}return n},X=(e,t,n)=>(q(e,((e,r)=>{n=t(n,e,r)})),n),J=(e,t,n)=>(V(e,((e,r)=>{n=t(n,e,r)})),n),Q=(e,t,n)=>{for(let r=0,o=e.length;r<o;r++){const o=e[r];if(t(o,r))return Y.some(o);if(n(o,r))break}return Y.none()},Z=(e,t)=>Q(e,t,$),ee=(e,t)=>{for(let n=0,r=e.length;n<r;n++){if(t(e[n],n))return Y.some(n)}return Y.none()},te=e=>{const t=[];for(let n=0,r=e.length;n<r;++n){if(!v(e[n]))throw new Error(\"Arr.flatten item \"+n+\" was not an array, input: \"+e);H.apply(t,e[n])}return t},ne=(e,t)=>te(U(e,t)),re=(e,t)=>{for(let n=0,r=e.length;n<r;++n){if(!0!==t(e[n],n))return!1}return!0},oe=e=>{const t=P.call(e,0);return t.reverse(),t},ie=(e,t)=>K(e,(e=>!W(t,e))),se=(e,t)=>{const n={};for(let r=0,o=e.length;r<o;r++){const o=e[r];n[String(o)]=t(o,r)}return n},ae=(e,t)=>{const n=P.call(e,0);return n.sort(t),n},le=(e,t)=>t>=0&&t<e.length?Y.some(e[t]):Y.none(),ce=e=>le(e,0),ue=e=>le(e,e.length-1),de=C(Array.from)?Array.from:e=>P.call(e),he=(e,t)=>{for(let n=0;n<e.length;n++){const r=t(e[n],n);if(r.isSome())return r}return Y.none()},me=Object.keys,fe=Object.hasOwnProperty,pe=(e,t)=>{const n=me(e);for(let r=0,o=n.length;r<o;r++){const o=n[r];t(e[o],o)}},ge=(e,t)=>ve(e,((e,n)=>({k:n,v:t(e,n)}))),ve=(e,t)=>{const n={};return pe(e,((e,r)=>{const o=t(e,r);n[o.k]=o.v})),n},ye=e=>(t,n)=>{e[n]=t},be=(e,t,n,r)=>{pe(e,((e,o)=>{(t(e,o)?n:r)(e,o)}))},_e=(e,t)=>{const n={};return be(e,t,ye(n),S),n},we=(e,t)=>{const n=[];return pe(e,((e,r)=>{n.push(t(e,r))})),n},xe=e=>we(e,E),Ce=(e,t)=>ke(e,t)?Y.from(e[t]):Y.none(),ke=(e,t)=>fe.call(e,t),De=(e,t)=>ke(e,t)&&void 0!==e[t]&&null!==e[t],Se=e=>{const t={};return V(e,(e=>{t[e]={}})),me(t)},Ae=e=>void 0!==e.length,Me=Array.isArray,Le=(e,t,n)=>{if(!e)return!1;if(n=n||e,Ae(e)){for(let r=0,o=e.length;r<o;r++)if(!1===t.call(n,e[r],r,e))return!1}else for(const r in e)if(ke(e,r)&&!1===t.call(n,e[r],r,e))return!1;return!0},Ee=(e,t)=>{const n=[];return Le(e,((r,o)=>{n.push(t(r,o,e))})),n},Te=(e,t)=>{const n=[];return Le(e,((r,o)=>{t&&!t(r,o,e)||n.push(r)})),n},Fe=(e,t,n,r)=>{let o=_(n)?e[0]:n;for(let n=0;n<e.length;n++)o=t.call(r,o,e[n],n);return o},Oe=(e,t,n)=>{for(let r=0,o=e.length;r<o;r++)if(t.call(n,e[r],r,e))return r;return-1},Be=e=>e[e.length-1],Re=e=>{let t,n=!1;return(...r)=>(n||(n=!0,t=e.apply(null,r)),t)},$e=()=>Ne(0,0),Ne=(e,t)=>({major:e,minor:t}),Ye={nu:Ne,detect:(e,t)=>{const n=String(t).toLowerCase();return 0===e.length?$e():((e,t)=>{const n=((e,t)=>{for(let n=0;n<e.length;n++){const r=e[n];if(r.test(t))return r}})(e,t);if(!n)return{major:0,minor:0};const r=e=>Number(t.replace(n,\"$\"+e));return Ne(r(1),r(2))})(e,n)},unknown:$e},Pe=(e,t)=>{const n=String(t).toLowerCase();return Z(e,(e=>e.search(n)))},Ie=(e,t,n)=>\"\"===t||e.length>=t.length&&e.substr(n,n+t.length)===t,He=(e,t,n=0,r)=>{const o=e.indexOf(t,n);return-1!==o&&(!!_(r)||o+t.length<=r)},je=(e,t)=>Ie(e,t,0),We=(e,t)=>Ie(e,t,e.length-t.length),ze=e=>t=>t.replace(e,\"\"),Ue=ze(/^\\s+|\\s+$/g),Ve=ze(/^\\s+/g),qe=ze(/\\s+$/g),Ge=e=>e.length>0,Ke=e=>!Ge(e),Xe=(e,t=10)=>{const n=parseInt(e,t);return isNaN(n)?Y.none():Y.some(n)},Je=/.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,Qe=e=>t=>He(t,e),Ze=[{name:\"Edge\",versionRegexes:[/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],search:e=>He(e,\"edge/\")&&He(e,\"chrome\")&&He(e,\"safari\")&&He(e,\"applewebkit\")},{name:\"Chromium\",brand:\"Chromium\",versionRegexes:[/.*?chrome\\/([0-9]+)\\.([0-9]+).*/,Je],search:e=>He(e,\"chrome\")&&!He(e,\"chromeframe\")},{name:\"IE\",versionRegexes:[/.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,/.*?rv:([0-9]+)\\.([0-9]+).*/],search:e=>He(e,\"msie\")||He(e,\"trident\")},{name:\"Opera\",versionRegexes:[Je,/.*?opera\\/([0-9]+)\\.([0-9]+).*/],search:Qe(\"opera\")},{name:\"Firefox\",versionRegexes:[/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],search:Qe(\"firefox\")},{name:\"Safari\",versionRegexes:[Je,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(He(e,\"safari\")||He(e,\"mobile/\"))&&He(e,\"applewebkit\")}],et=[{name:\"Windows\",search:Qe(\"win\"),versionRegexes:[/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]},{name:\"iOS\",search:e=>He(e,\"iphone\")||He(e,\"ipad\"),versionRegexes:[/.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:\"Android\",search:Qe(\"android\"),versionRegexes:[/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]},{name:\"macOS\",search:Qe(\"mac os x\"),versionRegexes:[/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]},{name:\"Linux\",search:Qe(\"linux\"),versionRegexes:[]},{name:\"Solaris\",search:Qe(\"sunos\"),versionRegexes:[]},{name:\"FreeBSD\",search:Qe(\"freebsd\"),versionRegexes:[]},{name:\"ChromeOS\",search:Qe(\"cros\"),versionRegexes:[/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]}],tt={browsers:L(Ze),oses:L(et)},nt=\"Edge\",rt=\"Chromium\",ot=\"Opera\",it=\"Firefox\",st=\"Safari\",at=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isEdge:r(nt),isChromium:r(rt),isIE:r(\"IE\"),isOpera:r(ot),isFirefox:r(it),isSafari:r(st)}},lt={unknown:()=>at({current:void 0,version:Ye.unknown()}),nu:at,edge:L(nt),chromium:L(rt),ie:L(\"IE\"),opera:L(ot),firefox:L(it),safari:L(st)},ct=\"Windows\",ut=\"Android\",dt=\"Linux\",ht=\"macOS\",mt=\"Solaris\",ft=\"FreeBSD\",pt=\"ChromeOS\",gt=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isWindows:r(ct),isiOS:r(\"iOS\"),isAndroid:r(ut),isMacOS:r(ht),isLinux:r(dt),isSolaris:r(mt),isFreeBSD:r(ft),isChromeOS:r(pt)}},vt={unknown:()=>gt({current:void 0,version:Ye.unknown()}),nu:gt,windows:L(ct),ios:L(\"iOS\"),android:L(ut),linux:L(dt),macos:L(ht),solaris:L(mt),freebsd:L(ft),chromeos:L(pt)},yt=(e,t,n)=>{const r=tt.browsers(),o=tt.oses(),i=t.bind((e=>((e,t)=>he(t.brands,(t=>{const n=t.brand.toLowerCase();return Z(e,(e=>{var t;return n===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:Ye.nu(parseInt(t.version,10),0)})))})))(r,e))).orThunk((()=>((e,t)=>Pe(e,t).map((e=>{const n=Ye.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(r,e))).fold(lt.unknown,lt.nu),s=((e,t)=>Pe(e,t).map((e=>{const n=Ye.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(o,e).fold(vt.unknown,vt.nu),a=((e,t,n,r)=>{const o=e.isiOS()&&!0===/ipad/i.test(n),i=e.isiOS()&&!o,s=e.isiOS()||e.isAndroid(),a=s||r(\"(pointer:coarse)\"),l=o||!i&&s&&r(\"(min-device-width:768px)\"),c=i||s&&!l,u=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(n),d=!c&&!l&&!u;return{isiPad:L(o),isiPhone:L(i),isTablet:L(l),isPhone:L(c),isTouch:L(a),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:L(u),isDesktop:L(d)}})(s,i,e,n);return{browser:i,os:s,deviceType:a}},bt=e=>window.matchMedia(e).matches;let _t=Re((()=>yt(navigator.userAgent,Y.from(navigator.userAgentData),bt)));const wt=()=>_t(),xt=navigator.userAgent,Ct=wt(),kt=Ct.browser,Dt=Ct.os,St=Ct.deviceType,At=-1!==xt.indexOf(\"Windows Phone\"),Mt={transparentSrc:\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",documentMode:kt.isIE()?document.documentMode||7:10,cacheSuffix:null,container:null,canHaveCSP:!kt.isIE(),windowsPhone:At,browser:{current:kt.current,version:kt.version,isChromium:kt.isChromium,isEdge:kt.isEdge,isFirefox:kt.isFirefox,isIE:kt.isIE,isOpera:kt.isOpera,isSafari:kt.isSafari},os:{current:Dt.current,version:Dt.version,isAndroid:Dt.isAndroid,isChromeOS:Dt.isChromeOS,isFreeBSD:Dt.isFreeBSD,isiOS:Dt.isiOS,isLinux:Dt.isLinux,isMacOS:Dt.isMacOS,isSolaris:Dt.isSolaris,isWindows:Dt.isWindows},deviceType:{isDesktop:St.isDesktop,isiPad:St.isiPad,isiPhone:St.isiPhone,isPhone:St.isPhone,isTablet:St.isTablet,isTouch:St.isTouch,isWebView:St.isWebView}},Lt=/^\\s*|\\s*$/g,Et=e=>w(e)?\"\":(\"\"+e).replace(Lt,\"\"),Tt=function(e,t,n,r){r=r||this,e&&(n&&(e=e[n]),Le(e,((e,o)=>!1!==t.call(r,e,o,n)&&(Tt(e,t,n,r),!0))))},Ft={trim:Et,isArray:Me,is:(e,t)=>t?!(\"array\"!==t||!Me(e))||typeof e===t:void 0!==e,toArray:e=>{if(Me(e))return e;{const t=[];for(let n=0,r=e.length;n<r;n++)t[n]=e[n];return t}},makeMap:(e,t,n={})=>{const r=f(e)?e.split(t||\",\"):e||[];let o=r.length;for(;o--;)n[r[o]]={};return n},each:Le,map:Ee,grep:Te,inArray:(e,t)=>{if(e)for(let n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},hasOwn:ke,extend:(e,...t)=>{for(let n=0;n<t.length;n++){const r=t[n];for(const t in r)if(ke(r,t)){const n=r[t];void 0!==n&&(e[t]=n)}}return e},walk:Tt,resolve:(e,t=window)=>{const n=e.split(\".\");for(let e=0,r=n.length;e<r&&(t=t[n[e]]);e++);return t},explode:(e,t)=>v(e)?e:\"\"===e?[]:Ee(e.split(t||\",\"),Et),_addCacheSuffix:e=>{const t=Mt.cacheSuffix;return t&&(e+=(-1===e.indexOf(\"?\")?\"?\":\"&\")+t),e}},Ot=(e,t,n=T)=>e.exists((e=>n(e,t))),Bt=(e,t,n)=>e.isSome()&&t.isSome()?Y.some(n(e.getOrDie(),t.getOrDie())):Y.none(),Rt=(e,t)=>e?Y.some(t):Y.none();\"undefined\"!=typeof window?window:Function(\"return this;\")();const $t=e=>e.dom.nodeName.toLowerCase(),Nt=e=>e.dom.nodeType,Yt=e=>t=>Nt(t)===e,Pt=Yt(1),It=Yt(3),Ht=Yt(9),jt=Yt(11),Wt=e=>t=>Pt(t)&&$t(t)===e,zt=(e,t,n)=>{if(!(f(n)||b(n)||k(n)))throw console.error(\"Invalid call to Attribute.set. Key \",t,\":: Value \",n,\":: Element \",e),new Error(\"Attribute value was not simple\");e.setAttribute(t,n+\"\")},Ut=(e,t,n)=>{zt(e.dom,t,n)},Vt=(e,t)=>{const n=e.dom;pe(t,((e,t)=>{zt(n,t,e)}))},qt=(e,t)=>{const n=e.dom.getAttribute(t);return null===n?void 0:n},Gt=(e,t)=>Y.from(qt(e,t)),Kt=(e,t)=>{const n=e.dom;return!(!n||!n.hasAttribute)&&n.hasAttribute(t)},Xt=(e,t)=>{e.dom.removeAttribute(t)},Jt=e=>J(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}),Qt=(e,t)=>{const n=qt(e,t);return void 0===n||\"\"===n?[]:n.split(\" \")},Zt=e=>void 0!==e.dom.classList,en=e=>Qt(e,\"class\"),tn=(e,t)=>((e,t,n)=>{const r=Qt(e,t).concat([n]);return Ut(e,t,r.join(\" \")),!0})(e,\"class\",t),nn=(e,t)=>((e,t,n)=>{const r=K(Qt(e,t),(e=>e!==n));return r.length>0?Ut(e,t,r.join(\" \")):Xt(e,t),!1})(e,\"class\",t),rn=(e,t)=>{Zt(e)?e.dom.classList.add(t):tn(e,t)},on=e=>{0===(Zt(e)?e.dom.classList:en(e)).length&&Xt(e,\"class\")},sn=(e,t)=>{if(Zt(e)){e.dom.classList.remove(t)}else nn(e,t);on(e)},an=(e,t)=>{const n=Zt(e)?e.dom.classList.toggle(t):((e,t)=>W(en(e),t)?nn(e,t):tn(e,t))(e,t);return on(e),n},ln=(e,t)=>Zt(e)&&e.dom.classList.contains(t),cn=e=>void 0!==e.style&&C(e.style.getPropertyValue),un=e=>{if(null==e)throw new Error(\"Node cannot be null or undefined\");return{dom:e}},dn={fromHtml:(e,t)=>{const n=(t||document).createElement(\"div\");if(n.innerHTML=e,!n.hasChildNodes()||n.childNodes.length>1){const t=\"HTML does not have a single root node\";throw console.error(t,e),new Error(t)}return un(n.childNodes[0])},fromTag:(e,t)=>{const n=(t||document).createElement(e);return un(n)},fromText:(e,t)=>{const n=(t||document).createTextNode(e);return un(n)},fromDom:un,fromPoint:(e,t,n)=>Y.from(e.dom.elementFromPoint(t,n)).map(un)},hn=(e,t)=>{const n=[],r=e=>(n.push(e),t(e));let o=t(e);do{o=o.bind(r)}while(o.isSome());return n},mn=(e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error(\"Browser lacks native selectors\")}},fn=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,pn=(e,t)=>e.dom===t.dom,gn=(e,t)=>{const n=e.dom,r=t.dom;return n!==r&&n.contains(r)},vn=e=>dn.fromDom(e.dom.ownerDocument),yn=e=>Ht(e)?e:vn(e),bn=e=>dn.fromDom(yn(e).dom.defaultView),_n=e=>Y.from(e.dom.parentNode).map(dn.fromDom),wn=e=>Y.from(e.dom.previousSibling).map(dn.fromDom),xn=e=>Y.from(e.dom.nextSibling).map(dn.fromDom),Cn=e=>oe(hn(e,wn)),kn=e=>hn(e,xn),Dn=e=>U(e.dom.childNodes,dn.fromDom),Sn=(e,t)=>{const n=e.dom.childNodes;return Y.from(n[t]).map(dn.fromDom)},An=e=>Sn(e,0),Mn=e=>Sn(e,e.dom.childNodes.length-1),Ln=e=>e.dom.childNodes.length,En=e=>jt(e)&&x(e.dom.host),Tn=C(Element.prototype.attachShadow)&&C(Node.prototype.getRootNode),Fn=L(Tn),On=Tn?e=>dn.fromDom(e.dom.getRootNode()):yn,Bn=e=>En(e)?e:(e=>{const t=e.dom.head;if(null==t)throw new Error(\"Head is not available yet\");return dn.fromDom(t)})(yn(e)),Rn=e=>dn.fromDom(e.dom.host),$n=e=>{if(Fn()&&x(e.target)){const t=dn.fromDom(e.target);if(Pt(t)&&Nn(t)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return ce(t)}}return Y.from(e.target)},Nn=e=>x(e.dom.shadowRoot),Yn=e=>{const t=It(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const n=t.ownerDocument;return(e=>{const t=On(e);return En(t)?Y.some(t):Y.none()})(dn.fromDom(t)).fold((()=>n.body.contains(t)),M(Yn,Rn))},Pn=(e,t,n)=>{if(!f(n))throw console.error(\"Invalid call to CSS.set. Property \",t,\":: Value \",n,\":: Element \",e),new Error(\"CSS value must be a string: \"+n);cn(e)&&e.style.setProperty(t,n)},In=(e,t,n)=>{const r=e.dom;Pn(r,t,n)},Hn=(e,t)=>{const n=e.dom;pe(t,((e,t)=>{Pn(n,t,e)}))},jn=(e,t)=>{const n=e.dom,r=window.getComputedStyle(n).getPropertyValue(t);return\"\"!==r||Yn(e)?r:Wn(n,t)},Wn=(e,t)=>cn(e)?e.style.getPropertyValue(t):\"\",zn=(e,t)=>{const n=e.dom,r=Wn(n,t);return Y.from(r).filter((e=>e.length>0))},Un=e=>{const t={},n=e.dom;if(cn(n))for(let e=0;e<n.style.length;e++){const r=n.style.item(e);t[r]=n.style[r]}return t},Vn=(e,t)=>{((e,t)=>{cn(e)&&e.style.removeProperty(t)})(e.dom,t),Ot(Gt(e,\"style\").map(Ue),\"\")&&Xt(e,\"style\")},qn=(e,t)=>{_n(e).each((n=>{n.dom.insertBefore(t.dom,e.dom)}))},Gn=(e,t)=>{xn(e).fold((()=>{_n(e).each((e=>{Xn(e,t)}))}),(e=>{qn(e,t)}))},Kn=(e,t)=>{An(e).fold((()=>{Xn(e,t)}),(n=>{e.dom.insertBefore(t.dom,n.dom)}))},Xn=(e,t)=>{e.dom.appendChild(t.dom)},Jn=(e,t)=>{V(t,(t=>{Xn(e,t)}))},Qn=e=>{e.dom.textContent=\"\",V(Dn(e),(e=>{Zn(e)}))},Zn=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},er=e=>{const t=Dn(e);var n,r;t.length>0&&(n=e,V(r=t,((e,t)=>{const o=0===t?n:r[t-1];Gn(o,e)}))),Zn(e)},tr=e=>e.dom.innerHTML,nr=(e,t)=>{const n=vn(e).dom,r=dn.fromDom(n.createDocumentFragment()),o=((e,t)=>{const n=(t||document).createElement(\"div\");return n.innerHTML=e,Dn(dn.fromDom(n))})(t,n);Jn(r,o),Qn(e),Xn(e,r)},rr=(e,t)=>n=>{e(n)&&t((e=>{const t=dn.fromDom($n(e).getOr(e.target)),n=()=>e.stopPropagation(),r=()=>e.preventDefault(),o=A(r,n);return((e,t,n,r,o,i,s)=>({target:e,x:t,y:n,stop:r,prevent:o,kill:i,raw:s}))(t,e.clientX,e.clientY,n,r,o,e)})(n))},or=(e,t,n,r)=>((e,t,n,r,o)=>{const i=rr(n,r);return e.dom.addEventListener(t,i,o),{unbind:F(ir,e,t,i,o)}})(e,t,n,r,!1),ir=(e,t,n,r)=>{e.dom.removeEventListener(t,n,r)},sr=(e,t)=>({left:e,top:t,translate:(n,r)=>sr(e+n,t+r)}),ar=sr,lr=(e,t)=>void 0!==e?e:void 0!==t?t:0,cr=e=>{const t=e.dom,n=t.ownerDocument.body;return n===t?ar(n.offsetLeft,n.offsetTop):Yn(e)?(e=>{const t=e.getBoundingClientRect();return ar(t.left,t.top)})(t):ar(0,0)},ur=e=>{const t=void 0!==e?e.dom:document,n=t.body.scrollLeft||t.documentElement.scrollLeft,r=t.body.scrollTop||t.documentElement.scrollTop;return ar(n,r)},dr=(e,t,n)=>{const r=(void 0!==n?n.dom:document).defaultView;r&&r.scrollTo(e,t)},hr=(e,t)=>{wt().browser.isSafari()&&C(e.dom.scrollIntoViewIfNeeded)?e.dom.scrollIntoViewIfNeeded(!1):e.dom.scrollIntoView(t)},mr=(e,t,n,r)=>({x:e,y:t,width:n,height:r,right:e+n,bottom:t+r}),fr=e=>{const t=void 0===e?window:e,n=t.document,r=ur(dn.fromDom(n));return(e=>{const t=void 0===e?window:e;return wt().browser.isFirefox()?Y.none():Y.from(t.visualViewport)})(t).fold((()=>{const e=t.document.documentElement,n=e.clientWidth,o=e.clientHeight;return mr(r.left,r.top,n,o)}),(e=>mr(Math.max(e.pageLeft,r.left),Math.max(e.pageTop,r.top),e.width,e.height)))},pr=e=>t=>!!t&&t.nodeType===e,gr=e=>!!e&&!Object.getPrototypeOf(e),vr=pr(1),yr=e=>{const t=e.toLowerCase();return e=>x(e)&&e.nodeName.toLowerCase()===t},br=e=>{const t=e.map((e=>e.toLowerCase()));return e=>{if(e&&e.nodeName){const n=e.nodeName.toLowerCase();return W(t,n)}return!1}},_r=(e,t)=>{const n=t.toLowerCase().split(\" \");return t=>{if(vr(t)){const r=t.ownerDocument.defaultView;if(r)for(let o=0;o<n.length;o++){const i=r.getComputedStyle(t,null);if((i?i.getPropertyValue(e):null)===n[o])return!0}}return!1}},wr=e=>t=>vr(t)&&t.hasAttribute(e),xr=e=>vr(e)&&e.hasAttribute(\"data-mce-bogus\"),Cr=e=>vr(e)&&\"TABLE\"===e.tagName,kr=e=>t=>{if(vr(t)){if(t.contentEditable===e)return!0;if(t.getAttribute(\"data-mce-contenteditable\")===e)return!0}return!1},Dr=br([\"textarea\",\"input\"]),Sr=pr(3),Ar=pr(4),Mr=pr(7),Lr=pr(8),Er=pr(9),Tr=pr(11),Fr=yr(\"br\"),Or=yr(\"img\"),Br=kr(\"true\"),Rr=kr(\"false\"),$r=br([\"td\",\"th\"]),Nr=br([\"td\",\"th\",\"caption\"]),Yr=br([\"video\",\"audio\",\"object\",\"embed\"]),Pr=yr(\"li\"),Ir=wt().browser,Hr=e=>Z(e,Pt),jr=(e,t)=>e.children&&W(e.children,t),Wr=(e,t,n)=>{let r=0,o=0;const i=e.ownerDocument;if(n=n||e,t){if(n===e&&t.getBoundingClientRect&&\"static\"===jn(dn.fromDom(e),\"position\")){const n=t.getBoundingClientRect();return r=n.left+(i.documentElement.scrollLeft||e.scrollLeft)-i.documentElement.clientLeft,o=n.top+(i.documentElement.scrollTop||e.scrollTop)-i.documentElement.clientTop,{x:r,y:o}}let s=t;for(;s&&s!==n&&s.nodeType&&!jr(s,n);){const e=s;r+=e.offsetLeft||0,o+=e.offsetTop||0,s=e.offsetParent}for(s=t.parentNode;s&&s!==n&&s.nodeType&&!jr(s,n);)r-=s.scrollLeft||0,o-=s.scrollTop||0,s=s.parentNode;o+=(e=>Ir.isFirefox()&&\"table\"===$t(e)?Hr(Dn(e)).filter((e=>\"caption\"===$t(e))).bind((e=>Hr(kn(e)).map((t=>{const n=t.dom.offsetTop,r=e.dom.offsetTop,o=e.dom.offsetHeight;return n<=r?-o:0})))).getOr(0):0)(dn.fromDom(t))}return{x:r,y:o}};var zr=(e,t,n,r,o)=>e(n,r)?Y.some(n):C(o)&&o(n)?Y.none():t(n,r,o);const Ur=(e,t,n)=>{let r=e.dom;const o=C(n)?n:$;for(;r.parentNode;){r=r.parentNode;const e=dn.fromDom(r);if(t(e))return Y.some(e);if(o(e))break}return Y.none()},Vr=(e,t,n)=>zr(((e,t)=>t(e)),Ur,e,t,n),qr=(e,t)=>Z(e.dom.childNodes,(e=>t(dn.fromDom(e)))).map(dn.fromDom),Gr=(e,t,n)=>Ur(e,(e=>mn(e,t)),n),Kr=(e,t)=>((e,t)=>{const n=void 0===t?document:t.dom;return fn(n)?Y.none():Y.from(n.querySelector(e)).map(dn.fromDom)})(t,e),Xr=(e,t,n)=>zr(((e,t)=>mn(e,t)),Gr,e,t,n),Jr=(e,t={})=>{let n=0;const r={},o=dn.fromDom(e),i=yn(o),s=t.maxLoadTime||5e3,a=a=>new Promise(((l,c)=>{let u;const d=Ft._addCacheSuffix(a),h=(e=>Ce(r,e).getOrThunk((()=>({id:\"mce-u\"+n++,passed:[],failed:[],count:0}))))(d);r[d]=h,h.count++;const m=(e,t)=>{V(e,R),h.status=t,h.passed=[],h.failed=[],u&&(u.onload=null,u.onerror=null,u=null)},f=()=>m(h.passed,2),p=()=>m(h.failed,3),g=()=>{var t,n;t=()=>{const t=e.styleSheets;let n=t.length;for(;n--;){const e=t[n].ownerNode;if(e&&u&&e.id===u.id)return f(),!0}return!1},n=g,t()||(Date.now()-y<s?setTimeout(n):p())};if(l&&h.passed.push(l),c&&h.failed.push(c),1===h.status)return;if(2===h.status)return void f();if(3===h.status)return void p();h.status=1;const v=dn.fromTag(\"link\",i.dom);Vt(v,{rel:\"stylesheet\",type:\"text/css\",id:h.id});const y=Date.now();var b;t.contentCssCors&&Ut(v,\"crossOrigin\",\"anonymous\"),t.referrerPolicy&&Ut(v,\"referrerpolicy\",t.referrerPolicy),u=v.dom,u.onload=g,u.onerror=p,b=v,Xn(Bn(o),b),Ut(v,\"href\",d)})),l=e=>{const t=Ft._addCacheSuffix(e);Ce(r,t).each((e=>{0===--e.count&&(delete r[t],(e=>{const t=Bn(o);Kr(t,\"#\"+e).each(Zn)})(e.id))}))};return{load:a,loadAll:e=>Promise.allSettled(U(e,(e=>a(e).then(L(e))))).then((e=>{const t=G(e,(e=>\"fulfilled\"===e.status));return t.fail.length>0?Promise.reject(U(t.fail,(e=>e.reason))):U(t.pass,(e=>e.value))})),unload:l,unloadAll:e=>{V(e,(e=>{l(e)}))},_setReferrerPolicy:e=>{t.referrerPolicy=e}}},Qr=(()=>{const e=new WeakMap;return{forElement:(t,n)=>{const r=On(t).dom;return Y.from(e.get(r)).getOrThunk((()=>{const t=Jr(r,n);return e.set(r,t),t}))}}})();class Zr{constructor(e,t){this.node=e,this.rootNode=t,this.current=this.current.bind(this),this.next=this.next.bind(this),this.prev=this.prev.bind(this),this.prev2=this.prev2.bind(this)}current(){return this.node}next(e){return this.node=this.findSibling(this.node,\"firstChild\",\"nextSibling\",e),this.node}prev(e){return this.node=this.findSibling(this.node,\"lastChild\",\"previousSibling\",e),this.node}prev2(e){return this.node=this.findPreviousNode(this.node,e),this.node}findSibling(e,t,n,r){if(e){if(!r&&e[t])return e[t];if(e!==this.rootNode){let t=e[n];if(t)return t;for(let r=e.parentNode;r&&r!==this.rootNode;r=r.parentNode)if(t=r[n],t)return t}}}findPreviousNode(e,t){if(e){const n=e.previousSibling;if(this.rootNode&&n===this.rootNode)return;if(n){if(!t)for(let e=n.lastChild;e;e=e.lastChild)if(!e.lastChild)return e;return n}const r=e.parentNode;if(r&&r!==this.rootNode)return r}}}const eo=[\"pre\"].concat([\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"]),to=e=>{let t;return n=>(t=t||se(e,N),ke(t,$t(n)))},no=to([\"article\",\"aside\",\"details\",\"div\",\"dt\",\"figcaption\",\"footer\",\"form\",\"fieldset\",\"header\",\"hgroup\",\"html\",\"main\",\"nav\",\"section\",\"summary\",\"body\",\"p\",\"dl\",\"multicol\",\"dd\",\"figure\",\"address\",\"center\",\"blockquote\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"listing\",\"xmp\",\"pre\",\"plaintext\",\"menu\",\"dir\",\"ul\",\"ol\",\"li\",\"hr\",\"table\",\"tbody\",\"thead\",\"tfoot\",\"th\",\"tr\",\"td\",\"caption\"]),ro=e=>Pt(e)&&!no(e),oo=e=>Pt(e)&&\"br\"===$t(e),io=to([\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"p\",\"div\",\"address\",\"pre\",\"form\",\"blockquote\",\"center\",\"dir\",\"fieldset\",\"header\",\"footer\",\"article\",\"section\",\"hgroup\",\"aside\",\"nav\",\"figure\"]),so=to([\"ul\",\"ol\",\"dl\"]),ao=to([\"li\",\"dd\",\"dt\"]),lo=to([\"thead\",\"tbody\",\"tfoot\"]),co=to([\"td\",\"th\"]),uo=to([\"pre\",\"script\",\"textarea\",\"style\"]),ho=to(eo),mo=e=>ho(e)||ro(e),fo=(e,t,n)=>Gr(e,t,n).isSome(),po=\"\\ufeff\",go=\" \",vo=e=>e===po,yo=(e,t)=>{let n=[];return V(Dn(e),(e=>{t(e)&&(n=n.concat([e])),n=n.concat(yo(e,t))})),n},bo=(e,t)=>((e,t)=>{const n=void 0===t?document:t.dom;return fn(n)?[]:U(n.querySelectorAll(e),dn.fromDom)})(t,e),_o=((e,t)=>{const n=t=>e(t)?Y.from(t.dom.nodeValue):Y.none();return{get:r=>{if(!e(r))throw new Error(\"Can only get \"+t+\" value of a \"+t+\" node\");return n(r).getOr(\"\")},getOption:n,set:(n,r)=>{if(!e(n))throw new Error(\"Can only set raw \"+t+\" value of a \"+t+\" node\");n.dom.nodeValue=r}}})(It,\"text\"),wo=e=>_o.get(e),xo=e=>_o.getOption(e),Co=e=>{const t=bo(e,\"br\"),n=K((e=>{const t=[];let n=e.dom;for(;n;)t.push(dn.fromDom(n)),n=n.lastChild;return t})(e).slice(-1),oo);t.length===n.length&&V(n,Zn)},ko=()=>{const e=dn.fromTag(\"br\");return Ut(e,\"data-mce-bogus\",\"1\"),e},Do=e=>{Qn(e),Xn(e,ko())},So=e=>{Mn(e).each((t=>{wn(t).each((n=>{no(e)&&oo(t)&&no(n)&&Zn(t)}))}))},Ao=po,Mo=vo,Lo=e=>e.replace(/\\uFEFF/g,\"\"),Eo=vr,To=Sr,Fo=e=>(To(e)&&(e=e.parentNode),Eo(e)&&e.hasAttribute(\"data-mce-caret\")),Oo=e=>To(e)&&Mo(e.data),Bo=e=>Fo(e)||Oo(e),Ro=e=>e.firstChild!==e.lastChild||!Fr(e.firstChild),$o=e=>{const t=e.container();return!!Sr(t)&&(t.data.charAt(e.offset())===Ao||e.isAtStart()&&Oo(t.previousSibling))},No=e=>{const t=e.container();return!!Sr(t)&&(t.data.charAt(e.offset()-1)===Ao||e.isAtEnd()&&Oo(t.nextSibling))},Yo=e=>To(e)&&e.data[0]===Ao,Po=e=>To(e)&&e.data[e.data.length-1]===Ao,Io=e=>e&&e.hasAttribute(\"data-mce-caret\")?((e=>{var t;const n=e.getElementsByTagName(\"br\"),r=n[n.length-1];xr(r)&&(null===(t=r.parentNode)||void 0===t||t.removeChild(r))})(e),e.removeAttribute(\"data-mce-caret\"),e.removeAttribute(\"data-mce-bogus\"),e.removeAttribute(\"style\"),e.removeAttribute(\"data-mce-style\"),e.removeAttribute(\"_moz_abspos\"),e):null,Ho=e=>Fo(e.startContainer),jo=Br,Wo=Rr,zo=Fr,Uo=Sr,Vo=br([\"script\",\"style\",\"textarea\"]),qo=br([\"img\",\"input\",\"textarea\",\"hr\",\"iframe\",\"video\",\"audio\",\"object\",\"embed\"]),Go=br([\"table\"]),Ko=Bo,Xo=e=>!Ko(e)&&(Uo(e)?!Vo(e.parentNode):qo(e)||zo(e)||Go(e)||Jo(e)),Jo=e=>!(e=>vr(e)&&\"true\"===e.getAttribute(\"unselectable\"))(e)&&Wo(e),Qo=(e,t)=>Xo(e)&&((e,t)=>{for(let n=e.parentNode;n&&n!==t;n=n.parentNode){if(Jo(n))return!1;if(jo(n))return!0}return!0})(e,t),Zo=/^[ \\t\\r\\n]*$/,ei=e=>Zo.test(e),ti=e=>\"\\n\"===e||\"\\r\"===e,ni=(e,t=4,n=!0,r=!0)=>{const o=((e,t)=>t<=0?\"\":new Array(t+1).join(e))(\" \",t),i=e.replace(/\\t/g,o),s=J(i,((e,t)=>(e=>-1!==\" \\f\\t\\v\".indexOf(e))(t)||t===go?e.pcIsSpace||\"\"===e.str&&n||e.str.length===i.length-1&&r||((e,t)=>t<e.length&&t>=0&&ti(e[t]))(i,e.str.length+1)?{pcIsSpace:!1,str:e.str+go}:{pcIsSpace:!0,str:e.str+\" \"}:{pcIsSpace:ti(t),str:e.str+t}),{pcIsSpace:!1,str:\"\"});return s.str},ri=(e,t)=>Sr(e)&&ei(e.data)&&!((e,t)=>{const n=dn.fromDom(t),r=dn.fromDom(e);return fo(r,\"pre,code\",F(pn,n))})(e,t),oi=(e,t)=>Xo(e)&&!ri(e,t)||(e=>vr(e)&&\"A\"===e.nodeName&&!e.hasAttribute(\"href\")&&(e.hasAttribute(\"name\")||e.hasAttribute(\"id\")))(e)||ii(e),ii=wr(\"data-mce-bookmark\"),si=wr(\"data-mce-bogus\"),ai=(li=\"data-mce-bogus\",ci=\"all\",e=>vr(e)&&e.getAttribute(li)===ci);var li,ci;const ui=(e,t=!0)=>((e,t)=>{let n=0;if(oi(e,e))return!1;{let r=e.firstChild;if(!r)return!0;const o=new Zr(r,e);do{if(t){if(ai(r)){r=o.next(!0);continue}if(si(r)){r=o.next();continue}}if(Fr(r))n++,r=o.next();else{if(oi(r,e))return!1;r=o.next()}}while(r);return n<=1}})(e.dom,t),di=(e,t)=>x(e)&&(oi(e,t)||ro(dn.fromDom(e))),hi=e=>(e=>\"span\"===e.nodeName.toLowerCase())(e)&&\"bookmark\"===e.getAttribute(\"data-mce-type\"),mi=(e,t)=>Sr(e)&&e.data.length>0&&((e,t)=>{const n=new Zr(e,t).prev(!1),r=new Zr(e,t).next(!1),o=_(n)||di(n,t),i=_(r)||di(r,t);return o&&i})(e,t),fi=(e,t,n)=>{var r;const o=n||t;if(vr(t)&&hi(t))return t;const i=t.childNodes;for(let t=i.length-1;t>=0;t--)fi(e,i[t],o);if(vr(t)){const e=t.childNodes;1===e.length&&hi(e[0])&&(null===(r=t.parentNode)||void 0===r||r.insertBefore(e[0],t))}return(e=>Tr(e)||Er(e))(t)||oi(t,o)||(e=>!!vr(e)&&e.childNodes.length>0)(t)||mi(t,o)||e.remove(t),t},pi=Ft.makeMap,gi=/[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,vi=/[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,yi=/[<>&\\\"\\']/g,bi=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,_i={128:\"€\",130:\"‚\",131:\"ƒ\",132:\"„\",133:\"…\",134:\"†\",135:\"‡\",136:\"ˆ\",137:\"‰\",138:\"Š\",139:\"‹\",140:\"Œ\",142:\"Ž\",145:\"‘\",146:\"’\",147:\"“\",148:\"”\",149:\"•\",150:\"–\",151:\"—\",152:\"˜\",153:\"™\",154:\"š\",155:\"›\",156:\"œ\",158:\"ž\",159:\"Ÿ\"},wi={'\"':\"&quot;\",\"'\":\"&#39;\",\"<\":\"&lt;\",\">\":\"&gt;\",\"&\":\"&amp;\",\"`\":\"&#96;\"},xi={\"&lt;\":\"<\",\"&gt;\":\">\",\"&amp;\":\"&\",\"&quot;\":'\"',\"&apos;\":\"'\"},Ci=(e,t)=>{const n={};if(e){const r=e.split(\",\");t=t||10;for(let e=0;e<r.length;e+=2){const o=String.fromCharCode(parseInt(r[e],t));if(!wi[o]){const t=\"&\"+r[e+1]+\";\";n[o]=t,n[t]=o}}return n}},ki=Ci(\"50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro\",32),Di=(e,t)=>e.replace(t?gi:vi,(e=>wi[e]||e)),Si=(e,t)=>e.replace(t?gi:vi,(e=>e.length>1?\"&#\"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+\";\":wi[e]||\"&#\"+e.charCodeAt(0)+\";\")),Ai=(e,t,n)=>{const r=n||ki;return e.replace(t?gi:vi,(e=>wi[e]||r[e]||e))},Mi={encodeRaw:Di,encodeAllRaw:e=>(\"\"+e).replace(yi,(e=>wi[e]||e)),encodeNumeric:Si,encodeNamed:Ai,getEncodeFunc:(e,t)=>{const n=Ci(t)||ki,r=(e,t)=>e.replace(t?gi:vi,(e=>void 0!==wi[e]?wi[e]:void 0!==n[e]?n[e]:e.length>1?\"&#\"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+\";\":\"&#\"+e.charCodeAt(0)+\";\")),o=(e,t)=>Ai(e,t,n),i=pi(e.replace(/\\+/g,\",\"));return i.named&&i.numeric?r:i.named?t?o:Ai:i.numeric?Si:Di},decode:e=>e.replace(bi,((e,t)=>t?(t=\"x\"===t.charAt(0).toLowerCase()?parseInt(t.substr(1),16):parseInt(t,10))>65535?(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t))):_i[t]||String.fromCharCode(t):xi[e]||ki[e]||(e=>{const t=dn.fromTag(\"div\").dom;return t.innerHTML=e,t.textContent||t.innerText||e})(e)))},Li={},Ei={},Ti={},Fi=Ft.makeMap,Oi=Ft.each,Bi=Ft.extend,Ri=Ft.explode,$i=Ft.inArray,Ni=(e,t)=>(e=Ft.trim(e))?e.split(t||\" \"):[],Yi=(e,t={})=>{const n=Fi(e,\" \",Fi(e.toUpperCase(),\" \"));return Bi(n,t)},Pi=e=>Yi(\"td th li dt dd figcaption caption details summary\",e.getTextBlockElements()),Ii=(e,t)=>{if(e){const n={};return f(e)&&(e={\"*\":e}),Oi(e,((e,r)=>{n[r]=n[r.toUpperCase()]=\"map\"===t?Fi(e,/[, ]/):Ri(e,/[, ]/)})),n}},Hi=(e={})=>{var t;const n={},r={};let o=[];const i={},s={},a=(t,n,r)=>{const o=e[t];if(o)return Fi(o,/[, ]/,Fi(o.toUpperCase(),/[, ]/));{let e=Ei[t];return e||(e=Yi(n,r),Ei[t]=e),e}},l=null!==(t=e.schema)&&void 0!==t?t:\"html5\",c=(e=>{const t={};let n,r,o,i;const s=(e,r=\"\",o=\"\")=>{const i=Ni(o),s=Ni(e);let a=s.length;for(;a--;){const e=Ni([n,r].join(\" \"));t[s[a]]={attributes:se(e,(()=>({}))),attributesOrder:e,children:se(i,L(Ti))}}},a=(e,n)=>{const r=Ni(e),o=Ni(n);let i=r.length;for(;i--;){const e=t[r[i]];for(let t=0,n=o.length;t<n;t++)e.attributes[o[t]]={},e.attributesOrder.push(o[t])}};if(Li[e])return Li[e];if(n=\"id accesskey class dir lang style tabindex title role\",r=\"address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul\",o=\"a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment\",\"html4\"!==e&&(n+=\" contenteditable contextmenu draggable dropzone hidden spellcheck translate\",r+=\" article aside details dialog figure main header footer hgroup section nav\",o+=\" audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen\"),\"html5-strict\"!==e){n+=\" xml:lang\";const e=\"acronym applet basefont big font strike tt\";o=[o,e].join(\" \"),Oi(Ni(e),(e=>{s(e,\"\",o)}));const t=\"center dir isindex noframes\";r=[r,t].join(\" \"),i=[r,o].join(\" \"),Oi(Ni(t),(e=>{s(e,\"\",i)}))}return i=i||[r,o].join(\" \"),s(\"html\",\"manifest\",\"head body\"),s(\"head\",\"\",\"base command link meta noscript script style title\"),s(\"title hr noscript br\"),s(\"base\",\"href target\"),s(\"link\",\"href rel media hreflang type sizes hreflang\"),s(\"meta\",\"name http-equiv content charset\"),s(\"style\",\"media type scoped\"),s(\"script\",\"src async defer type charset\"),s(\"body\",\"onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload\",i),s(\"address dt dd div caption\",\"\",i),s(\"h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn\",\"\",o),s(\"blockquote\",\"cite\",i),s(\"ol\",\"reversed start type\",\"li\"),s(\"ul\",\"\",\"li\"),s(\"li\",\"value\",i),s(\"dl\",\"\",\"dt dd\"),s(\"a\",\"href target rel media hreflang type\",o),s(\"q\",\"cite\",o),s(\"ins del\",\"cite datetime\",i),s(\"img\",\"src sizes srcset alt usemap ismap width height\"),s(\"iframe\",\"src name width height\",i),s(\"embed\",\"src type width height\"),s(\"object\",\"data type typemustmatch name usemap form width height\",[i,\"param\"].join(\" \")),s(\"param\",\"name value\"),s(\"map\",\"name\",[i,\"area\"].join(\" \")),s(\"area\",\"alt coords shape href target rel media hreflang type\"),s(\"table\",\"border\",\"caption colgroup thead tfoot tbody tr\"+(\"html4\"===e?\" col\":\"\")),s(\"colgroup\",\"span\",\"col\"),s(\"col\",\"span\"),s(\"tbody thead tfoot\",\"\",\"tr\"),s(\"tr\",\"\",\"td th\"),s(\"td\",\"colspan rowspan headers\",i),s(\"th\",\"colspan rowspan headers scope abbr\",i),s(\"form\",\"accept-charset action autocomplete enctype method name novalidate target\",i),s(\"fieldset\",\"disabled form name\",[i,\"legend\"].join(\" \")),s(\"label\",\"form for\",o),s(\"input\",\"accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width\"),s(\"button\",\"disabled form formaction formenctype formmethod formnovalidate formtarget name type value\",\"html4\"===e?i:o),s(\"select\",\"disabled form multiple name required size\",\"option optgroup\"),s(\"optgroup\",\"disabled label\",\"option\"),s(\"option\",\"disabled label selected value\"),s(\"textarea\",\"cols dirname disabled form maxlength name readonly required rows wrap\"),s(\"menu\",\"type label\",[i,\"li\"].join(\" \")),s(\"noscript\",\"\",i),\"html4\"!==e&&(s(\"wbr\"),s(\"ruby\",\"\",[o,\"rt rp\"].join(\" \")),s(\"figcaption\",\"\",i),s(\"mark rt rp summary bdi\",\"\",o),s(\"canvas\",\"width height\",i),s(\"video\",\"src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered\",[i,\"track source\"].join(\" \")),s(\"audio\",\"src crossorigin preload autoplay mediagroup loop muted controls buffered volume\",[i,\"track source\"].join(\" \")),s(\"picture\",\"\",\"img source\"),s(\"source\",\"src srcset type media sizes\"),s(\"track\",\"kind src srclang label default\"),s(\"datalist\",\"\",[o,\"option\"].join(\" \")),s(\"article section nav aside main header footer\",\"\",i),s(\"hgroup\",\"\",\"h1 h2 h3 h4 h5 h6\"),s(\"figure\",\"\",[i,\"figcaption\"].join(\" \")),s(\"time\",\"datetime\",o),s(\"dialog\",\"open\",i),s(\"command\",\"type label icon disabled checked radiogroup command\"),s(\"output\",\"for form name\",o),s(\"progress\",\"value max\",o),s(\"meter\",\"value min max low high optimum\",o),s(\"details\",\"open\",[i,\"summary\"].join(\" \")),s(\"keygen\",\"autofocus challenge disabled form keytype name\")),\"html5-strict\"!==e&&(a(\"script\",\"language xml:space\"),a(\"style\",\"xml:space\"),a(\"object\",\"declare classid code codebase codetype archive standby align border hspace vspace\"),a(\"embed\",\"align name hspace vspace\"),a(\"param\",\"valuetype type\"),a(\"a\",\"charset name rev shape coords\"),a(\"br\",\"clear\"),a(\"applet\",\"codebase archive code object alt name width height align hspace vspace\"),a(\"img\",\"name longdesc align border hspace vspace\"),a(\"iframe\",\"longdesc frameborder marginwidth marginheight scrolling align\"),a(\"font basefont\",\"size color face\"),a(\"input\",\"usemap align\"),a(\"select\"),a(\"textarea\"),a(\"h1 h2 h3 h4 h5 h6 div p legend caption\",\"align\"),a(\"ul\",\"type compact\"),a(\"li\",\"type\"),a(\"ol dl menu dir\",\"compact\"),a(\"pre\",\"width xml:space\"),a(\"hr\",\"align noshade size width\"),a(\"isindex\",\"prompt\"),a(\"table\",\"summary width frame rules cellspacing cellpadding align bgcolor\"),a(\"col\",\"width align char charoff valign\"),a(\"colgroup\",\"width align char charoff valign\"),a(\"thead\",\"align char charoff valign\"),a(\"tr\",\"align char charoff valign bgcolor\"),a(\"th\",\"axis align char charoff valign nowrap bgcolor width height\"),a(\"form\",\"accept\"),a(\"td\",\"abbr axis scope align char charoff valign nowrap bgcolor width height\"),a(\"tfoot\",\"align char charoff valign\"),a(\"tbody\",\"align char charoff valign\"),a(\"area\",\"nohref\"),a(\"body\",\"background bgcolor text link vlink alink\")),\"html4\"!==e&&(a(\"input button select textarea\",\"autofocus\"),a(\"input textarea\",\"placeholder\"),a(\"a\",\"download\"),a(\"link script img\",\"crossorigin\"),a(\"img\",\"loading\"),a(\"iframe\",\"sandbox seamless allow allowfullscreen loading\")),\"html4\"!==e&&V([t.video,t.audio],(e=>{delete e.children.audio,delete e.children.video})),Oi(Ni(\"a form meter progress dfn\"),(e=>{t[e]&&delete t[e].children[e]})),delete t.caption.children.table,delete t.script,Li[e]=t,t})(l);!1===e.verify_html&&(e.valid_elements=\"*[*]\");const u=Ii(e.valid_styles),d=Ii(e.invalid_styles,\"map\"),h=Ii(e.valid_classes,\"map\"),m=a(\"whitespace_elements\",\"pre script noscript style textarea video audio iframe object code\"),f=a(\"self_closing_elements\",\"colgroup dd dt li option p td tfoot th thead tr\"),p=a(\"void_elements\",\"area base basefont br col frame hr img input isindex link meta param embed source wbr track\"),g=a(\"boolean_attributes\",\"checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls allowfullscreen\"),v=\"td th iframe video audio object script code\",y=a(\"non_empty_elements\",v+\" pre\",p),b=a(\"move_caret_before_on_enter_elements\",v+\" table\",p),_=a(\"text_block_elements\",\"h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside main nav figure\"),w=a(\"block_elements\",\"hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup figcaption details summary\",_),x=a(\"text_inline_elements\",\"span strong b em i font s strike u var cite dfn code mark q sup sub samp\");Oi(\"script noscript iframe noframes noembed title style textarea xmp plaintext\".split(\" \"),(e=>{s[e]=new RegExp(\"</\"+e+\"[^>]*>\",\"gi\")}));const C=e=>new RegExp(\"^\"+e.replace(/([?+*])/g,\".$1\")+\"$\"),k=e=>{const t=/^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/,r=/^([!\\-])?(\\w+[\\\\:]:\\w+|[^=~<]+)?(?:([=~<])(.*))?$/,i=/[*?+]/;if(e){const s=Ni(e,\",\");let a,l;n[\"@\"]&&(a=n[\"@\"].attributes,l=n[\"@\"].attributesOrder);for(let e=0,c=s.length;e<c;e++){let c=t.exec(s[e]);if(c){const e=c[1],t=c[2],s=c[3],u=c[5],d={},h=[],m={attributes:d,attributesOrder:h};if(\"#\"===e&&(m.paddEmpty=!0),\"-\"===e&&(m.removeEmpty=!0),\"!\"===c[4]&&(m.removeEmptyAttrs=!0),a&&(pe(a,((e,t)=>{d[t]=e})),l&&h.push(...l)),u){const e=Ni(u,\"|\");for(let t=0,n=e.length;t<n;t++)if(c=r.exec(e[t]),c){const e={},t=c[1],n=c[2].replace(/[\\\\:]:/g,\":\"),r=c[3],o=c[4];if(\"!\"===t&&(m.attributesRequired=m.attributesRequired||[],m.attributesRequired.push(n),e.required=!0),\"-\"===t){delete d[n],h.splice($i(h,n),1);continue}if(r&&(\"=\"===r&&(m.attributesDefault=m.attributesDefault||[],m.attributesDefault.push({name:n,value:o}),e.defaultValue=o),\"~\"===r&&(m.attributesForced=m.attributesForced||[],m.attributesForced.push({name:n,value:o}),e.forcedValue=o),\"<\"===r&&(e.validValues=Fi(o,\"?\"))),i.test(n)){const t=e;m.attributePatterns=m.attributePatterns||[],t.pattern=C(n),m.attributePatterns.push(t)}else d[n]||h.push(n),d[n]=e}}if(a||\"@\"!==t||(a=d,l=h),s&&(m.outputName=t,n[s]=m),i.test(t)){const e=m;e.pattern=C(t),o.push(e)}else n[t]=m}}}},D=e=>{o=[],V(me(n),(e=>{delete n[e]})),k(e),Oi(c,((e,t)=>{r[t]=e.children}))},S=e=>{const t=/^(~)?(.+)$/;e&&(delete Ei.text_block_elements,delete Ei.block_elements,Oi(Ni(e,\",\"),(e=>{const o=t.exec(e);if(o){const e=\"~\"===o[1],t=e?\"span\":\"div\",s=o[2];if(r[s]=r[t],i[s]=t,y[s.toUpperCase()]={},y[s]={},e||(w[s.toUpperCase()]={},w[s]={}),!n[s]){let e=n[t];e=Bi({},e),delete e.removeEmptyAttrs,delete e.removeEmpty,n[s]=e}Oi(r,((e,n)=>{e[t]&&(r[n]=e=Bi({},r[n]),e[s]=e[t])}))}})))},A=e=>{const t=/^([+\\-]?)([A-Za-z0-9_\\-.\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u203f-\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]+)\\[([^\\]]+)]$/;delete Li[l],e&&Oi(Ni(e,\",\"),(e=>{const n=t.exec(e);if(n){const e=n[1];let t;t=e?r[n[2]]:r[n[2]]={\"#comment\":{}},t=r[n[2]],Oi(Ni(n[3],\"|\"),(n=>{\"-\"===e?delete t[n]:t[n]={}}))}}))},M=e=>{const t=n[e];if(t)return t;let r=o.length;for(;r--;){const t=o[r];if(t.pattern.test(e))return t}};e.valid_elements?D(e.valid_elements):(Oi(c,((e,t)=>{n[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},r[t]=e.children})),Oi(Ni(\"strong/b em/i\"),(e=>{const t=Ni(e,\"/\");n[t[1]].outputName=t[0]})),Oi(x,((t,r)=>{n[r]&&(e.padd_empty_block_inline_children&&(n[r].paddInEmptyBlock=!0),n[r].removeEmpty=!0)})),Oi(Ni(\"ol ul blockquote a table tbody\"),(e=>{n[e]&&(n[e].removeEmpty=!0)})),Oi(Ni(\"p h1 h2 h3 h4 h5 h6 th td pre div address caption li\"),(e=>{n[e].paddEmpty=!0})),Oi(Ni(\"span\"),(e=>{n[e].removeEmptyAttrs=!0}))),S(e.custom_elements),A(e.valid_children),k(e.extended_valid_elements),A(\"+ol[ul|ol],+ul[ul|ol]\"),Oi({dd:\"dl\",dt:\"dl\",li:\"ul ol\",td:\"tr\",th:\"tr\",tr:\"tbody thead tfoot\",tbody:\"table\",thead:\"table\",tfoot:\"table\",legend:\"fieldset\",area:\"map\",param:\"video audio object\"},((e,t)=>{n[t]&&(n[t].parentsRequired=Ni(e))})),e.invalid_elements&&Oi(Ri(e.invalid_elements),(e=>{n[e]&&delete n[e]})),M(\"span\")||k(\"span[!data-mce-type|*]\");const E=L(u),T=L(d),F=L(h),O=L(g),B=L(w),R=L(_),$=L(x),N=L(Object.seal(p)),Y=L(f),P=L(y),I=L(b),H=L(m),j=L(Object.seal(s)),W=L(i);return{type:l,children:r,elements:n,getValidStyles:E,getValidClasses:F,getBlockElements:B,getInvalidStyles:T,getVoidElements:N,getTextBlockElements:R,getTextInlineElements:$,getBoolAttrs:O,getElementRule:M,getSelfClosingElements:Y,getNonEmptyElements:P,getMoveCaretBeforeOnEnterElements:I,getWhitespaceElements:H,getSpecialElements:j,isValidChild:(e,t)=>{const n=r[e.toLowerCase()];return!(!n||!n[t.toLowerCase()])},isValid:(e,t)=>{const n=M(e);if(n){if(!t)return!0;{if(n.attributes[t])return!0;const e=n.attributePatterns;if(e){let n=e.length;for(;n--;)if(e[n].pattern.test(t))return!0}}}return!1},getCustomElements:W,addValidElements:k,setValidElements:D,addCustomElements:S,addValidChildren:A}},ji=(e={},t)=>{const n=/(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi,r=/\\s*([^:]+):\\s*([^;]+);?/g,o=/\\s+$/,i={};let s,a;const l=po;t&&(s=t.getValidStyles(),a=t.getInvalidStyles());const c=\"\\\\\\\" \\\\' \\\\; \\\\: ; : \\ufeff\".split(\" \");for(let e=0;e<c.length;e++)i[c[e]]=l+e,i[l+e]=c[e];const u={parse:t=>{const s={};let a=!1;const c=e.url_converter,d=e.url_converter_scope||u,h=(e,t,n)=>{const r=s[e+\"-top\"+t];if(!r)return;const o=s[e+\"-right\"+t];if(!o)return;const i=s[e+\"-bottom\"+t];if(!i)return;const a=s[e+\"-left\"+t];if(!a)return;const l=[r,o,i,a];let c=l.length-1;for(;c--&&l[c]===l[c+1];);c>-1&&n||(s[e+t]=-1===c?l[0]:l.join(\" \"),delete s[e+\"-top\"+t],delete s[e+\"-right\"+t],delete s[e+\"-bottom\"+t],delete s[e+\"-left\"+t])},m=e=>{const t=s[e];if(!t)return;const n=t.split(\" \");let r=n.length;for(;r--;)if(n[r]!==n[0])return!1;return s[e]=n[0],!0},f=e=>(a=!0,i[e]),p=(e,t)=>(a&&(e=e.replace(/\\uFEFF[0-9]/g,(e=>i[e]))),t||(e=e.replace(/\\\\([\\'\\\";:])/g,\"$1\")),e),g=e=>String.fromCharCode(parseInt(e.slice(1),16)),v=e=>e.replace(/\\\\[0-9a-f]+/gi,g),y=(t,n,r,o,i,s)=>{if(i=i||s)return\"'\"+(i=p(i)).replace(/\\'/g,\"\\\\'\")+\"'\";if(n=p(n||r||o||\"\"),!e.allow_script_urls){const t=n.replace(/[\\s\\r\\n]+/g,\"\");if(/(java|vb)script:/i.test(t))return\"\";if(!e.allow_svg_data_urls&&/^data:image\\/svg/i.test(t))return\"\"}return c&&(n=c.call(d,n,\"style\")),\"url('\"+n.replace(/\\'/g,\"\\\\'\")+\"')\"};if(t){let i;for(t=(t=t.replace(/[\\u0000-\\u001F]/g,\"\")).replace(/\\\\[\\\"\\';:\\uFEFF]/g,f).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g,(e=>e.replace(/[;:]/g,f)));i=r.exec(t);){r.lastIndex=i.index+i[0].length;let t=i[1].replace(o,\"\").toLowerCase(),c=i[2].replace(o,\"\");if(t&&c){if(t=v(t),c=v(c),-1!==t.indexOf(l)||-1!==t.indexOf('\"'))continue;if(!e.allow_script_urls&&(\"behavior\"===t||/expression\\s*\\(|\\/\\*|\\*\\//.test(c)))continue;\"font-weight\"===t&&\"700\"===c?c=\"bold\":\"color\"!==t&&\"background-color\"!==t||(c=c.toLowerCase()),c=c.replace(n,y),s[t]=a?p(c,!0):c}}h(\"border\",\"\",!0),h(\"border\",\"-width\"),h(\"border\",\"-color\"),h(\"border\",\"-style\"),h(\"padding\",\"\"),h(\"margin\",\"\"),((e,t,n,r)=>{m(t)&&m(n)&&m(r)&&(s[e]=s[t]+\" \"+s[n]+\" \"+s[r],delete s[t],delete s[n],delete s[r])})(\"border\",\"border-width\",\"border-style\",\"border-color\"),\"medium none\"===s.border&&delete s.border,\"none\"===s[\"border-image\"]&&delete s[\"border-image\"]}return s},serialize:(e,t)=>{let n=\"\";const r=(t,r)=>{const o=r[t];if(o)for(let t=0,r=o.length;t<r;t++){const r=o[t],i=e[r];i&&(n+=(n.length>0?\" \":\"\")+r+\": \"+i+\";\")}};return t&&s?(r(\"*\",s),r(t,s)):pe(e,((e,r)=>{e&&((e,t)=>{if(!a||!t)return!0;let n=a[\"*\"];return!(n&&n[e]||(n=a[t],n&&n[e]))})(r,t)&&(n+=(n.length>0?\" \":\"\")+r+\": \"+e+\";\")})),n}};return u},Wi={keyLocation:!0,layerX:!0,layerY:!0,returnValue:!0,webkitMovementX:!0,webkitMovementY:!0,keyIdentifier:!0,mozPressure:!0},zi=e=>w(e.preventDefault)||(e=>e instanceof Event||C(e.initEvent))(e),Ui=(e,t)=>{const n=null!=t?t:{};for(const t in e)ke(Wi,t)||(n[t]=e[t]);return x(e.composedPath)&&(n.composedPath=()=>e.composedPath()),n},Vi=(e,t,n,r)=>{var o;const i=Ui(t,r);return i.type=e,w(i.target)&&(i.target=null!==(o=i.srcElement)&&void 0!==o?o:n),zi(t)&&(i.preventDefault=()=>{i.defaultPrevented=!0,i.isDefaultPrevented=N,C(t.preventDefault)&&t.preventDefault()},i.stopPropagation=()=>{i.cancelBubble=!0,i.isPropagationStopped=N,C(t.stopPropagation)&&t.stopPropagation()},i.stopImmediatePropagation=()=>{i.isImmediatePropagationStopped=N,i.stopPropagation()},(e=>e.isDefaultPrevented===N||e.isDefaultPrevented===$)(i)||(i.isDefaultPrevented=!0===i.defaultPrevented?N:$,i.isPropagationStopped=!0===i.cancelBubble?N:$,i.isImmediatePropagationStopped=$)),i},qi=/^(?:mouse|contextmenu)|click/,Gi=(e,t,n,r)=>{e.addEventListener(t,n,r||!1)},Ki=(e,t,n,r)=>{e.removeEventListener(t,n,r||!1)},Xi=(e,t)=>{const n=Vi(e.type,e,document,t);if((e=>x(e)&&qi.test(e.type))(e)&&_(e.pageX)&&!_(e.clientX)){const t=n.target.ownerDocument||document,r=t.documentElement,o=t.body,i=n;i.pageX=e.clientX+(r&&r.scrollLeft||o&&o.scrollLeft||0)-(r&&r.clientLeft||o&&o.clientLeft||0),i.pageY=e.clientY+(r&&r.scrollTop||o&&o.scrollTop||0)-(r&&r.clientTop||o&&o.clientTop||0)}return n},Ji=(e,t,n)=>{const r=e.document,o={type:\"ready\"};if(n.domLoaded)return void t(o);const i=()=>{Ki(e,\"DOMContentLoaded\",i),Ki(e,\"load\",i),n.domLoaded||(n.domLoaded=!0,t(o)),e=null};\"complete\"===r.readyState||\"interactive\"===r.readyState&&r.body?i():Gi(e,\"DOMContentLoaded\",i),n.domLoaded||Gi(e,\"load\",i)};class Qi{constructor(){this.domLoaded=!1,this.events={},this.count=1,this.expando=\"mce-data-\"+(+new Date).toString(32),this.hasFocusIn=\"onfocusin\"in document.documentElement,this.count=1}bind(e,t,n,r){const o=this;let i;const s=window,a=e=>{o.executeHandlers(Xi(e||s.event),l)};if(!e||Sr(e)||Lr(e))return n;let l;e[o.expando]?l=e[o.expando]:(l=o.count++,e[o.expando]=l,o.events[l]={}),r=r||e;const c=t.split(\" \");let u=c.length;for(;u--;){let t=c[u],d=a,h=!1,m=!1;\"DOMContentLoaded\"===t&&(t=\"ready\"),o.domLoaded&&\"ready\"===t&&\"complete\"===e.readyState?n.call(r,Xi({type:t})):(o.hasFocusIn||\"focusin\"!==t&&\"focusout\"!==t||(h=!0,m=\"focusin\"===t?\"focus\":\"blur\",d=e=>{const t=Xi(e||s.event);t.type=\"focus\"===t.type?\"focusin\":\"focusout\",o.executeHandlers(t,l)}),i=o.events[l][t],i?\"ready\"===t&&o.domLoaded?n(Xi({type:t})):i.push({func:n,scope:r}):(o.events[l][t]=i=[{func:n,scope:r}],i.fakeName=m,i.capture=h,i.nativeHandler=d,\"ready\"===t?Ji(e,d,o):Gi(e,m||t,d,h)))}return e=i=null,n}unbind(e,t,n){if(!e||Sr(e)||Lr(e))return this;const r=e[this.expando];if(r){let o=this.events[r];if(t){const r=t.split(\" \");let i=r.length;for(;i--;){const t=r[i],s=o[t];if(s){if(n){let e=s.length;for(;e--;)if(s[e].func===n){const n=s.nativeHandler,r=s.fakeName,i=s.capture,a=s.slice(0,e).concat(s.slice(e+1));a.nativeHandler=n,a.fakeName=r,a.capture=i,o[t]=a}}n&&0!==s.length||(delete o[t],Ki(e,s.fakeName||t,s.nativeHandler,s.capture))}}}else pe(o,((t,n)=>{Ki(e,t.fakeName||n,t.nativeHandler,t.capture)})),o={};for(const e in o)if(ke(o,e))return this;delete this.events[r];try{delete e[this.expando]}catch(t){e[this.expando]=null}}return this}fire(e,t,n){return this.dispatch(e,t,n)}dispatch(e,t,n){if(!e||Sr(e)||Lr(e))return this;const r=Xi({type:t,target:e},n);do{const t=e[this.expando];t&&this.executeHandlers(r,t),e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow}while(e&&!r.isPropagationStopped());return this}clean(e){if(!e||Sr(e)||Lr(e))return this;if(e[this.expando]&&this.unbind(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName){this.unbind(e);const t=e.getElementsByTagName(\"*\");let n=t.length;for(;n--;)e=t[n],e[this.expando]&&this.unbind(e)}return this}destroy(){this.events={}}cancel(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}executeHandlers(e,t){const n=this.events[t],r=n&&n[e.type];if(r)for(let t=0,n=r.length;t<n;t++){const n=r[t];if(n&&!1===n.func.call(n.scope,e)&&e.preventDefault(),e.isImmediatePropagationStopped())return}}}Qi.Event=new Qi;const Zi=Ft.each,es=Ft.grep,ts=\"data-mce-style\",ns=Ft.makeMap(\"fill-opacity font-weight line-height opacity orphans widows z-index zoom\",\" \"),rs=(e,t,n)=>{w(n)||\"\"===n?Xt(e,t):Ut(e,t,n)},os=e=>e.replace(/[A-Z]/g,(e=>\"-\"+e.toLowerCase())),is=(e,t)=>{let n=0;if(e)for(let r=e.nodeType,o=e.previousSibling;o;o=o.previousSibling){const e=o.nodeType;(!t||!Sr(o)||e!==r&&o.data.length)&&(n++,r=e)}return n},ss=(e,t)=>{const n=qt(t,\"style\"),r=e.serialize(e.parse(n),$t(t));rs(t,ts,r)},as=(e,t,n)=>{const r=os(t);w(n)||\"\"===n?Vn(e,r):In(e,r,((e,t)=>k(e)?ke(ns,t)?e+\"\":e+\"px\":e)(n,r))},ls=(e,t={})=>{const n={},r=window,o={};let i=0;const s=Qr.forElement(dn.fromDom(e),{contentCssCors:t.contentCssCors,referrerPolicy:t.referrerPolicy}),a=[],l=t.schema?t.schema:Hi({}),c=ji({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),u=t.ownEvents?new Qi:Qi.Event,d=l.getBlockElements(),h=t=>t&&e&&f(t)?e.getElementById(t):t,m=e=>{const t=h(e);return x(t)?dn.fromDom(t):null},p=(e,t,n=\"\")=>{let r;const o=m(e);if(x(o)&&Pt(o)){const e=G[t];r=e&&e.get?e.get(o.dom,t):qt(o,t)}return x(r)?r:n},g=e=>{const t=h(e);return w(t)?[]:t.attributes},y=(e,n,r)=>{T(e,(e=>{if(vr(e)){const o=dn.fromDom(e),i=\"\"===r?null:r,s=qt(o,n),a=G[n];a&&a.set?a.set(o.dom,i,n):rs(o,n,i),s!==i&&t.onSetAttrib&&t.onSetAttrib({attrElm:o.dom,attrName:n,attrValue:i})}}))},b=()=>t.root_element||e.body,_=(t,n)=>Wr(e.body,h(t),n),k=(e,t,n)=>{const r=h(e);if(!w(r)&&vr(r))return n?jn(dn.fromDom(r),os(t)):(\"float\"===(t=t.replace(/-(\\D)/g,((e,t)=>t.toUpperCase())))&&(t=\"cssFloat\"),r.style?r.style[t]:void 0)},D=e=>{const t=h(e);if(!t)return{w:0,h:0};let n=k(t,\"width\"),r=k(t,\"height\");return n&&-1!==n.indexOf(\"px\")||(n=\"0\"),r&&-1!==r.indexOf(\"px\")||(r=\"0\"),{w:parseInt(n,10)||t.offsetWidth||t.clientWidth,h:parseInt(r,10)||t.offsetHeight||t.clientHeight}},A=(e,t)=>{if(!e)return!1;const n=v(e)?e:[e];return z(n,(e=>mn(dn.fromDom(e),t)))},M=(e,t,n,r)=>{const o=[];let i=h(e);r=void 0===r;const s=n||(\"BODY\"!==b().nodeName?b().parentNode:null);if(f(t))if(\"*\"===t)t=vr;else{const e=t;t=t=>A(t,e)}for(;i&&!(i===s||w(i.nodeType)||Er(i)||Tr(i));){if(!t||t(i)){if(!r)return[i];o.push(i)}i=i.parentNode}return r?o:null},E=(e,t,n)=>{let r=t;if(e){f(t)&&(r=e=>A(e,t));for(let t=e[n];t;t=t[n])if(C(r)&&r(t))return t}return null},T=function(e,t,n){const r=null!=n?n:this;if(v(e)){const n=[];return Zi(e,((e,o)=>{const i=h(e);i&&n.push(t.call(r,i,o))})),n}{const n=h(e);return!!n&&t.call(r,n)}},F=(e,t)=>{T(e,(e=>{pe(t,((t,n)=>{y(e,n,t)}))}))},O=(e,t)=>{T(e,(e=>{const n=dn.fromDom(e);nr(n,t)}))},B=(t,n,r,o,i)=>T(t,(t=>{const s=f(n)?e.createElement(n):n;return x(r)&&F(s,r),o&&(!f(o)&&o.nodeType?s.appendChild(o):f(o)&&O(s,o)),i?s:t.appendChild(s)})),R=(t,n,r)=>B(e.createElement(t),t,n,r,!0),$=Mi.encodeAllRaw,N=(e,t)=>T(e,(e=>{const n=dn.fromDom(e);return t&&V(Dn(n),(e=>{It(e)&&0===e.dom.length?Zn(e):qn(n,e)})),Zn(n),n.dom})),Y=(e,t,n)=>{T(e,(e=>{if(vr(e)){const r=dn.fromDom(e),o=t.split(\" \");V(o,(e=>{if(x(n)){(n?rn:sn)(r,e)}else an(r,e)}))}}))},P=(e,t,n)=>T(t,(r=>{var o;const i=v(t)?e.cloneNode(!0):e;return n&&Zi(es(r.childNodes),(e=>{i.appendChild(e)})),null===(o=r.parentNode)||void 0===o||o.replaceChild(i,r),r})),I=e=>{if(vr(e)){const t=\"a\"===e.nodeName.toLowerCase()&&!p(e,\"href\")&&p(e,\"id\");if(p(e,\"name\")||p(e,\"data-mce-bookmark\")||t)return!0}return!1},H=()=>e.createRange(),j=(n,o,i,s)=>{if(v(n)){let e=n.length;const t=[];for(;e--;)t[e]=j(n[e],o,i,s);return t}return!t.collect||n!==e&&n!==r||a.push([n,o,i,s]),u.bind(n,o,i,s||q)},W=(t,n,o)=>{if(v(t)){let e=t.length;const r=[];for(;e--;)r[e]=W(t[e],n,o);return r}if(a.length>0&&(t===e||t===r)){let e=a.length;for(;e--;){const[r,i,s]=a[e];t!==r||n&&n!==i||o&&o!==s||u.unbind(r,i,s)}}return u.unbind(t,n,o)},U=e=>{if(e&&vr(e)){const t=e.getAttribute(\"data-mce-contenteditable\");return t&&\"inherit\"!==t?t:\"inherit\"!==e.contentEditable?e.contentEditable:null}return null},q={doc:e,settings:t,win:r,files:o,stdMode:!0,boxModel:!0,styleSheetLoader:s,boundEvents:a,styles:c,schema:l,events:u,isBlock:e=>f(e)?ke(d,e):vr(e)&&ke(d,e.nodeName),root:null,clone:(e,t)=>e.cloneNode(t),getRoot:b,getViewPort:e=>{const t=fr(e);return{x:t.x,y:t.y,w:t.width,h:t.height}},getRect:e=>{const t=h(e),n=_(t),r=D(t);return{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:D,getParent:(e,t,n)=>{const r=M(e,t,n,!1);return r&&r.length>0?r[0]:null},getParents:M,get:h,getNext:(e,t)=>E(e,t,\"nextSibling\"),getPrev:(e,t)=>E(e,t,\"previousSibling\"),select:(n,r)=>{var o,i;const s=null!==(i=null!==(o=h(r))&&void 0!==o?o:t.root_element)&&void 0!==i?i:e;return C(s.querySelectorAll)?de(s.querySelectorAll(n)):[]},is:A,add:B,create:R,createHTML:(e,t,n=\"\")=>{let r=\"<\"+e;for(const e in t)De(t,e)&&(r+=\" \"+e+'=\"'+$(t[e])+'\"');return Ke(n)&&ke(l.getVoidElements(),e)?r+\" />\":r+\">\"+n+\"</\"+e+\">\"},createFragment:t=>{const n=e.createElement(\"div\"),r=e.createDocumentFragment();let o;for(r.appendChild(n),t&&(n.innerHTML=t);o=n.firstChild;)r.appendChild(o);return r.removeChild(n),r},remove:N,setStyle:(e,n,r)=>{T(e,(e=>{const o=dn.fromDom(e);as(o,n,r),t.update_styles&&ss(c,o)}))},getStyle:k,setStyles:(e,n)=>{T(e,(e=>{const r=dn.fromDom(e);pe(n,((e,t)=>{as(r,t,e)})),t.update_styles&&ss(c,r)}))},removeAllAttribs:e=>T(e,(e=>{const t=e.attributes;for(let n=t.length-1;n>=0;n--)e.removeAttributeNode(t.item(n))})),setAttrib:y,setAttribs:F,getAttrib:p,getPos:_,parseStyle:e=>c.parse(e),serializeStyle:(e,t)=>c.serialize(e,t),addStyle:t=>{if(q!==ls.DOM&&e===document){if(n[t])return;n[t]=!0}let r=e.getElementById(\"mceDefaultStyles\");if(!r){r=e.createElement(\"style\"),r.id=\"mceDefaultStyles\",r.type=\"text/css\";const t=e.head;t.firstChild?t.insertBefore(r,t.firstChild):t.appendChild(r)}r.styleSheet?r.styleSheet.cssText+=t:r.appendChild(e.createTextNode(t))},loadCSS:e=>{e||(e=\"\"),V(e.split(\",\"),(e=>{o[e]=!0,s.load(e).catch(S)}))},addClass:(e,t)=>{Y(e,t,!0)},removeClass:(e,t)=>{Y(e,t,!1)},hasClass:(e,t)=>{const n=m(e),r=t.split(\" \");return x(n)&&re(r,(e=>ln(n,e)))},toggleClass:Y,show:e=>{T(e,(e=>Vn(dn.fromDom(e),\"display\")))},hide:e=>{T(e,(e=>In(dn.fromDom(e),\"display\",\"none\")))},isHidden:e=>{const t=m(e);return x(t)&&Ot(zn(t,\"display\"),\"none\")},uniqueId:e=>(e||\"mce_\")+i++,setHTML:O,getOuterHTML:e=>{const t=m(e);return x(t)?vr(t.dom)?t.dom.outerHTML:(e=>{const t=dn.fromTag(\"div\"),n=dn.fromDom(e.dom.cloneNode(!0));return Xn(t,n),tr(t)})(t):\"\"},setOuterHTML:(e,t)=>{T(e,(e=>{vr(e)&&(e.outerHTML=t)}))},decode:Mi.decode,encode:$,insertAfter:(e,t)=>{const n=h(t);return T(e,(e=>{const t=null==n?void 0:n.parentNode,r=null==n?void 0:n.nextSibling;return t&&(r?t.insertBefore(e,r):t.appendChild(e)),e}))},replace:P,rename:(e,t)=>{if(e.nodeName!==t.toUpperCase()){const n=R(t);return Zi(g(e),(t=>{y(n,t.nodeName,p(e,t.nodeName))})),P(n,e,!0),n}return e},findCommonAncestor:(e,t)=>{let n=e;for(;n;){let e=t;for(;e&&n!==e;)e=e.parentNode;if(n===e)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.documentElement:n},run:T,getAttribs:g,isEmpty:(e,t)=>{let n=0;if(I(e))return!1;const r=e.firstChild;if(r){const o=new Zr(r,e),i=l?l.getWhitespaceElements():{},s=t||(l?l.getNonEmptyElements():null);let a=r;do{if(vr(a)){const e=a.getAttribute(\"data-mce-bogus\");if(e){a=o.next(\"all\"===e);continue}const t=a.nodeName.toLowerCase();if(s&&s[t]){if(\"br\"===t){n++,a=o.next();continue}return!1}if(I(a))return!1}if(Lr(a))return!1;if(Sr(a)&&!ei(a.data))return!1;if(Sr(a)&&a.parentNode&&i[a.parentNode.nodeName]&&ei(a.data))return!1;a=o.next()}while(a)}return n<=1},createRng:H,nodeIndex:is,split:(e,t,n)=>{let r,o,i=H();if(e&&t&&e.parentNode&&t.parentNode){const s=e.parentNode;return i.setStart(s,is(e)),i.setEnd(t.parentNode,is(t)),r=i.extractContents(),i=H(),i.setStart(t.parentNode,is(t)+1),i.setEnd(s,is(e)+1),o=i.extractContents(),s.insertBefore(fi(q,r),e),n?s.insertBefore(n,e):s.insertBefore(t,e),s.insertBefore(fi(q,o),e),N(e),n||t}},bind:j,unbind:W,fire:(e,t,n)=>u.dispatch(e,t,n),dispatch:(e,t,n)=>u.dispatch(e,t,n),getContentEditable:U,getContentEditableParent:e=>{const t=b();let n=null;for(let r=e;r&&r!==t&&(n=U(r),null===n);r=r.parentNode);return n},destroy:()=>{if(a.length>0){let e=a.length;for(;e--;){const[t,n,r]=a[e];u.unbind(t,n,r)}}pe(o,((e,t)=>{s.unload(t),delete o[t]}))},isChildOf:(e,t)=>e===t||t.contains(e),dumpRng:e=>\"startContainer: \"+e.startContainer.nodeName+\", startOffset: \"+e.startOffset+\", endContainer: \"+e.endContainer.nodeName+\", endOffset: \"+e.endOffset},G=((e,t,n)=>{const r=t.keep_values,o={set:(e,r,o)=>{const i=dn.fromDom(e);C(t.url_converter)&&x(r)&&(r=t.url_converter.call(t.url_converter_scope||n(),String(r),o,e)),rs(i,\"data-mce-\"+o,r),rs(i,o,r)},get:(e,t)=>{const n=dn.fromDom(e);return qt(n,\"data-mce-\"+t)||qt(n,t)}},i={style:{set:(t,n)=>{const o=dn.fromDom(t);r&&rs(o,ts,n),Xt(o,\"style\"),f(n)&&Hn(o,e.parse(n))},get:t=>{const n=dn.fromDom(t),r=qt(n,ts)||qt(n,\"style\");return e.serialize(e.parse(r),$t(n))}}};return r&&(i.href=i.src=o),i})(c,t,L(q));return q};ls.DOM=ls(document),ls.nodeIndex=is;const cs=ls.DOM;class us{constructor(e={}){this.states={},this.queue=[],this.scriptLoadedCallbacks={},this.queueLoadedCallbacks=[],this.loading=!1,this.settings=e}_setReferrerPolicy(e){this.settings.referrerPolicy=e}loadScript(e){return new Promise(((t,n)=>{const r=cs;let o;const i=()=>{r.remove(s),o&&(o.onerror=o.onload=o=null)},s=r.uniqueId();o=document.createElement(\"script\"),o.id=s,o.type=\"text/javascript\",o.src=Ft._addCacheSuffix(e),this.settings.referrerPolicy&&r.setAttrib(o,\"referrerpolicy\",this.settings.referrerPolicy),o.onload=()=>{i(),t()},o.onerror=()=>{i(),n(\"Failed to load script: \"+e)},(document.getElementsByTagName(\"head\")[0]||document.body).appendChild(o)}))}isDone(e){return 2===this.states[e]}markDone(e){this.states[e]=2}add(e){const t=this;t.queue.push(e);return void 0===t.states[e]&&(t.states[e]=0),new Promise(((n,r)=>{t.scriptLoadedCallbacks[e]||(t.scriptLoadedCallbacks[e]=[]),t.scriptLoadedCallbacks[e].push({resolve:n,reject:r})}))}load(e){return this.add(e)}remove(e){delete this.states[e],delete this.scriptLoadedCallbacks[e]}loadQueue(){const e=this.queue;return this.queue=[],this.loadScripts(e)}loadScripts(e){const t=this,n=(e,n)=>{Ce(t.scriptLoadedCallbacks,n).each((t=>{V(t,(t=>t[e](n)))})),delete t.scriptLoadedCallbacks[n]},r=e=>{const t=K(e,(e=>\"rejected\"===e.status));return t.length>0?Promise.reject(ne(t,(({reason:e})=>v(e)?e:[e]))):Promise.resolve()},o=e=>Promise.allSettled(U(e,(e=>2===t.states[e]?(n(\"resolve\",e),Promise.resolve()):3===t.states[e]?(n(\"reject\",e),Promise.reject(e)):(t.states[e]=1,t.loadScript(e).then((()=>{t.states[e]=2,n(\"resolve\",e);const i=t.queue;return i.length>0?(t.queue=[],o(i).then(r)):Promise.resolve()}),(()=>(t.states[e]=3,n(\"reject\",e),Promise.reject(e)))))))),i=e=>(t.loading=!0,o(e).then((e=>{t.loading=!1;const n=t.queueLoadedCallbacks.shift();return Y.from(n).each(R),r(e)}))),s=Se(e);return t.loading?new Promise(((e,n)=>{t.queueLoadedCallbacks.push((()=>i(s).then(e,n)))})):i(s)}}us.ScriptLoader=new us;const ds=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}},hs={},ms=ds(\"en\"),fs=()=>Ce(hs,ms.get()),ps={getData:()=>ge(hs,(e=>({...e}))),setCode:e=>{e&&ms.set(e)},getCode:()=>ms.get(),add:(e,t)=>{let n=hs[e];n||(hs[e]=n={}),pe(t,((e,t)=>{n[t.toLowerCase()]=e}))},translate:e=>{const t=fs().getOr({}),n=e=>C(e)?Object.prototype.toString.call(e):r(e)?\"\":\"\"+e,r=e=>\"\"===e||null==e,o=e=>{const r=n(e);return Ce(t,r.toLowerCase()).map(n).getOr(r)},i=e=>e.replace(/{context:\\w+}$/,\"\");if(r(e))return\"\";if(p(s=e)&&ke(s,\"raw\"))return n(e.raw);var s;if((e=>v(e)&&e.length>1)(e)){const t=e.slice(1);return i(o(e[0]).replace(/\\{([0-9]+)\\}/g,((e,r)=>ke(t,r)?n(t[r]):e)))}return i(o(e))},isRtl:()=>fs().bind((e=>Ce(e,\"_dir\"))).exists((e=>\"rtl\"===e)),hasCode:e=>ke(hs,e)},gs=()=>{const e=[],t={},n={},r=[],o=(e,t)=>{const n=K(r,(n=>n.name===e&&n.state===t));V(n,(e=>e.resolve()))},i=e=>ke(t,e),s=(e,n)=>{const r=ps.getCode();!r||n&&-1===(\",\"+(n||\"\")+\",\").indexOf(\",\"+r+\",\")||us.ScriptLoader.add(t[e]+\"/langs/\"+r+\".js\")},a=(e,t=\"added\")=>\"added\"===t&&(e=>ke(n,e))(e)||\"loaded\"===t&&i(e)?Promise.resolve():new Promise((n=>{r.push({name:e,state:t,resolve:n})}));return{items:e,urls:t,lookup:n,get:e=>{if(n[e])return n[e].instance},requireLangPack:(e,t)=>{!1!==gs.languageLoad&&(i(e)?s(e,t):a(e,\"loaded\").then((()=>s(e,t))))},add:(t,r)=>(e.push(r),n[t]={instance:r},o(t,\"added\"),r),remove:e=>{delete t[e],delete n[e]},createUrl:(e,t)=>f(t)?f(e)?{prefix:\"\",resource:t,suffix:\"\"}:{prefix:e.prefix,resource:t,suffix:e.suffix}:t,load:(e,r)=>{if(t[e])return Promise.resolve();let i=f(r)?r:r.prefix+r.resource+r.suffix;0!==i.indexOf(\"/\")&&-1===i.indexOf(\"://\")&&(i=gs.baseURL+\"/\"+i),t[e]=i.substring(0,i.lastIndexOf(\"/\"));const s=()=>(o(e,\"loaded\"),Promise.resolve());return n[e]?s():us.ScriptLoader.add(i).then(s)},waitFor:a}};gs.languageLoad=!0,gs.baseURL=\"\",gs.PluginManager=gs(),gs.ThemeManager=gs(),gs.ModelManager=gs();const vs=e=>{const t=ds(Y.none()),n=()=>t.get().each((e=>clearInterval(e)));return{clear:()=>{n(),t.set(Y.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:r=>{n(),t.set(Y.some(setInterval(r,e)))}}},ys=()=>{const e=(e=>{const t=ds(Y.none()),n=()=>t.get().each(e);return{clear:()=>{n(),t.set(Y.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{n(),t.set(Y.some(e))}}})(S);return{...e,on:t=>e.get().each(t)}},bs=(e,t)=>{let n=null;return{cancel:()=>{y(n)||(clearTimeout(n),n=null)},throttle:(...r)=>{y(n)&&(n=setTimeout((()=>{n=null,e.apply(null,r)}),t))}}},_s=(e,t)=>{let n=null;const r=()=>{y(n)||(clearTimeout(n),n=null)};return{cancel:r,throttle:(...o)=>{r(),n=setTimeout((()=>{n=null,e.apply(null,o)}),t)}}},ws=L(\"mce-annotation\"),xs=L(\"data-mce-annotation\"),Cs=L(\"data-mce-annotation-uid\"),ks=L(\"data-mce-annotation-active\"),Ds=L(\"data-mce-annotation-classes\"),Ss=L(\"data-mce-annotation-attrs\"),As=e=>t=>pn(t,e),Ms=(e,t)=>{const n=e.selection.getRng(),r=dn.fromDom(n.startContainer),o=dn.fromDom(e.getBody()),i=t.fold((()=>\".\"+ws()),(e=>`[${xs()}=\"${e}\"]`)),s=Sn(r,n.startOffset).getOr(r);return Xr(s,i,As(o)).bind((t=>Gt(t,`${Cs()}`).bind((n=>Gt(t,`${xs()}`).map((t=>{const r=Es(e,n);return{uid:n,name:t,elements:r}}))))))},Ls=(e,t)=>Kt(e,\"data-mce-bogus\")||fo(e,'[data-mce-bogus=\"all\"]',As(t)),Es=(e,t)=>{const n=dn.fromDom(e.getBody()),r=bo(n,`[${Cs()}=\"${t}\"]`);return K(r,(e=>!Ls(e,n)))},Ts=(e,t)=>{const n=dn.fromDom(e.getBody()),r=bo(n,`[${xs()}=\"${t}\"]`),o={};return V(r,(e=>{if(!Ls(e,n)){const t=qt(e,Cs()),n=Ce(o,t).getOr([]);o[t]=n.concat([e])}})),o},Fs=(e,t)=>{const n=ds({}),r=()=>({listeners:[],previous:ys()}),o=(e,t)=>{i(e,(e=>(t(e),e)))},i=(e,t)=>{const o=n.get(),i=t(Ce(o,e).getOrThunk(r));o[e]=i,n.set(o)},s=(t,n)=>{V(Es(e,t),(e=>{n?Ut(e,ks(),\"true\"):Xt(e,ks())}))},a=_s((()=>{const n=ae(t.getNames());V(n,(t=>{i(t,(n=>{const r=n.previous.get();return Ms(e,Y.some(t)).fold((()=>{r.each((e=>{(e=>{o(e,(t=>{V(t.listeners,(t=>t(!1,e)))}))})(t),n.previous.clear(),s(e,!1)}))}),(({uid:e,name:t,elements:i})=>{Ot(r,e)||(r.each((e=>s(e,!1))),((e,t,n)=>{o(e,(r=>{V(r.listeners,(r=>r(!0,e,{uid:t,nodes:U(n,(e=>e.dom))})))}))})(t,e,i),n.previous.set(e),s(e,!0))})),{previous:n.previous,listeners:n.listeners}}))}))}),30);e.on(\"remove\",(()=>{a.cancel()})),e.on(\"NodeChange\",(()=>{a.throttle()}));return{addListener:(e,t)=>{i(e,(e=>({previous:e.previous,listeners:e.listeners.concat([t])})))}}};let Os=0;const Bs=e=>{const t=(new Date).getTime(),n=Math.floor(1e9*Math.random());return Os++,e+\"_\"+n+Os+String(t)},Rs=(e,t)=>dn.fromDom(e.dom.cloneNode(t)),$s=e=>Rs(e,!1),Ns=e=>Rs(e,!0),Ys=(e,t)=>{const n=((e,t)=>{const n=dn.fromTag(t),r=Jt(e);return Vt(n,r),n})(e,t);Gn(e,n);const r=Dn(e);return Jn(n,r),Zn(e),n},Ps=(e,t,n=$)=>{const r=new Zr(e,t),o=e=>{let t;do{t=r[e]()}while(t&&!Sr(t)&&!n(t));return Y.from(t).filter(Sr)};return{current:()=>Y.from(r.current()).filter(Sr),next:()=>o(\"next\"),prev:()=>o(\"prev\"),prev2:()=>o(\"prev2\")}},Is=(e,t)=>{const n=t||(t=>e.isBlock(t)||Fr(t)||Rr(t)),r=(e,t,n,o)=>{if(Sr(e)){const n=o(e,t,e.data);if(-1!==n)return Y.some({container:e,offset:n})}return n().bind((e=>r(e.container,e.offset,n,o)))};return{backwards:(t,o,i,s)=>{const a=Ps(t,null!=s?s:e.getRoot(),n);return r(t,o,(()=>a.prev().map((e=>({container:e,offset:e.length})))),i).getOrNull()},forwards:(t,o,i,s)=>{const a=Ps(t,null!=s?s:e.getRoot(),n);return r(t,o,(()=>a.next().map((e=>({container:e,offset:0})))),i).getOrNull()}}},Hs=Math.round,js=e=>e?{left:Hs(e.left),top:Hs(e.top),bottom:Hs(e.bottom),right:Hs(e.right),width:Hs(e.width),height:Hs(e.height)}:{left:0,top:0,bottom:0,right:0,width:0,height:0},Ws=(e,t)=>(e=js(e),t||(e.left=e.left+e.width),e.right=e.left,e.width=0,e),zs=(e,t,n)=>e>=0&&e<=Math.min(t.height,n.height)/2,Us=(e,t)=>{const n=Math.min(t.height/2,e.height/2);return e.bottom-n<t.top||!(e.top>t.bottom)&&zs(t.top-e.bottom,e,t)},Vs=(e,t)=>e.top>t.bottom||!(e.bottom<t.top)&&zs(t.bottom-e.top,e,t),qs=(e,t,n)=>{const r=Math.max(Math.min(t,e.left+e.width),e.left),o=Math.max(Math.min(n,e.top+e.height),e.top);return Math.sqrt((t-r)*(t-r)+(n-o)*(n-o))},Gs=e=>{const t=e.startContainer,n=e.startOffset;return t===e.endContainer&&t.hasChildNodes()&&e.endOffset===n+1?t.childNodes[n]:null},Ks=(e,t)=>{if(vr(e)&&e.hasChildNodes()){const n=e.childNodes,r=((e,t,n)=>Math.min(Math.max(e,t),n))(t,0,n.length-1);return n[r]}return e},Xs=new RegExp(\"[̀-ͯ҃-҇҈-҉֑-ֽֿׁ-ׂׄ-ׇׅؐ-ًؚ-ٰٟۖ-ۜ۟-ۤۧ-۪ۨ-ܑۭܰ-݊ަ-ް߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣣ-ंऺ़ु-ै्॑-ॗॢ-ॣঁ়াু-ৄ্ৗৢ-ৣਁ-ਂ਼ੁ-ੂੇ-ੈੋ-੍ੑੰ-ੱੵઁ-ં઼ુ-ૅે-ૈ્ૢ-ૣଁ଼ାିୁ-ୄ୍ୖୗୢ-ୣஂாீ்ௗఀా-ీె-ైొ-్ౕ-ౖౢ-ౣಁ಼ಿೂೆೌ-್ೕ-ೖೢ-ೣഁാു-ൄ്ൗൢ-ൣ්ාි-ුූෟัิ-ฺ็-๎ັິ-ູົ-ຼ່-ໍ༘-ཱ༹༙༵༷-ཾྀ-྄྆-྇ྍ-ྗྙ-ྼ࿆ိ-ူဲ-့္-်ွ-ှၘ-ၙၞ-ၠၱ-ၴႂႅ-ႆႍႝ፝-፟ᜒ-᜔ᜲ-᜴ᝒ-ᝓᝲ-ᝳ឴-឵ិ-ួំ៉-៓៝᠋-᠍ᢩᤠ-ᤢᤧ-ᤨᤲ᤹-᤻ᨗ-ᨘᨛᩖᩘ-ᩞ᩠ᩢᩥ-ᩬᩳ-᩿᩼᪰-᪽᪾ᬀ-ᬃ᬴ᬶ-ᬺᬼᭂ᭫-᭳ᮀ-ᮁᮢ-ᮥᮨ-ᮩ᮫-ᮭ᯦ᯨ-ᯩᯭᯯ-ᯱᰬ-ᰳᰶ-᰷᳐-᳔᳒-᳢᳠-᳨᳭᳴᳸-᳹᷀-᷵᷼-᷿‌-‍⃐-⃜⃝-⃠⃡⃢-⃤⃥-⃰⳯-⵿⳱ⷠ-〪ⷿ-〭〮-゙〯-゚꙯꙰-꙲ꙴ-꙽ꚞ-ꚟ꛰-꛱ꠂ꠆ꠋꠥ-ꠦ꣄꣠-꣱ꤦ-꤭ꥇ-ꥑꦀ-ꦂ꦳ꦶ-ꦹꦼꧥꨩ-ꨮꨱ-ꨲꨵ-ꨶꩃꩌꩼꪰꪲ-ꪴꪷ-ꪸꪾ-꪿꫁ꫬ-ꫭ꫶ꯥꯨ꯭ﬞ︀-️︠-︯ﾞ-ﾟ]\"),Js=e=>f(e)&&e.charCodeAt(0)>=768&&Xs.test(e),Qs=vr,Zs=Xo,ea=_r(\"display\",\"block table\"),ta=_r(\"float\",\"left right\"),na=((...e)=>t=>{for(let n=0;n<e.length;n++)if(!e[n](t))return!1;return!0})(Qs,Zs,O(ta)),ra=O(_r(\"white-space\",\"pre pre-line pre-wrap\")),oa=Sr,ia=Fr,sa=ls.nodeIndex,aa=(e,t)=>t<0&&vr(e)&&e.hasChildNodes()?void 0:Ks(e,t),la=e=>e?e.createRange():ls.DOM.createRng(),ca=e=>f(e)&&/[\\r\\n\\t ]/.test(e),ua=e=>!!e.setStart&&!!e.setEnd,da=e=>{const t=e.startContainer,n=e.startOffset;if(ca(e.toString())&&ra(t.parentNode)&&Sr(t)){const e=t.data;if(ca(e[n-1])||ca(e[n+1]))return!0}return!1},ha=e=>0===e.left&&0===e.right&&0===e.top&&0===e.bottom,ma=e=>{var t;let n;const r=e.getClientRects();return n=r.length>0?js(r[0]):js(e.getBoundingClientRect()),!ua(e)&&ia(e)&&ha(n)?(e=>{const t=e.ownerDocument,n=la(t),r=t.createTextNode(go),o=e.parentNode;o.insertBefore(r,e),n.setStart(r,0),n.setEnd(r,1);const i=js(n.getBoundingClientRect());return o.removeChild(r),i})(e):ha(n)&&ua(e)&&null!==(t=(e=>{const t=e.startContainer,n=e.endContainer,r=e.startOffset,o=e.endOffset;if(t===n&&Sr(n)&&0===r&&1===o){const t=e.cloneRange();return t.setEndAfter(n),ma(t)}return null})(e))&&void 0!==t?t:n},fa=(e,t)=>{const n=Ws(e,t);return n.width=1,n.right=n.left+1,n},pa=e=>{const t=[],n=e=>{var n,r;0!==e.height&&(t.length>0&&(n=e,r=t[t.length-1],n.left===r.left&&n.top===r.top&&n.bottom===r.bottom&&n.right===r.right)||t.push(e))},r=(e,t)=>{const r=la(e.ownerDocument);if(t<e.data.length){if(Js(e.data[t]))return;if(Js(e.data[t-1])&&(r.setStart(e,t),r.setEnd(e,t+1),!da(r)))return void n(fa(ma(r),!1))}t>0&&(r.setStart(e,t-1),r.setEnd(e,t),da(r)||n(fa(ma(r),!1))),t<e.data.length&&(r.setStart(e,t),r.setEnd(e,t+1),da(r)||n(fa(ma(r),!0)))},o=e.container(),i=e.offset();if(oa(o))return r(o,i),t;if(Qs(o))if(e.isAtEnd()){const e=aa(o,i);oa(e)&&r(e,e.data.length),na(e)&&!ia(e)&&n(fa(ma(e),!1))}else{const s=aa(o,i);if(oa(s)&&r(s,0),na(s)&&e.isAtEnd())return n(fa(ma(s),!1)),t;const a=aa(e.container(),e.offset()-1);na(a)&&!ia(a)&&(ea(a)||ea(s)||!na(s))&&n(fa(ma(a),!1)),na(s)&&n(fa(ma(s),!0))}return t},ga=(e,t,n)=>{const r=()=>(n||(n=pa(ga(e,t))),n);return{container:L(e),offset:L(t),toRange:()=>{const n=la(e.ownerDocument);return n.setStart(e,t),n.setEnd(e,t),n},getClientRects:r,isVisible:()=>r().length>0,isAtStart:()=>(oa(e),0===t),isAtEnd:()=>oa(e)?t>=e.data.length:t>=e.childNodes.length,isEqual:n=>n&&e===n.container()&&t===n.offset(),getNode:n=>aa(e,n?t-1:t)}};ga.fromRangeStart=e=>ga(e.startContainer,e.startOffset),ga.fromRangeEnd=e=>ga(e.endContainer,e.endOffset),ga.after=e=>ga(e.parentNode,sa(e)+1),ga.before=e=>ga(e.parentNode,sa(e)),ga.isAbove=(e,t)=>Bt(ce(t.getClientRects()),ue(e.getClientRects()),Us).getOr(!1),ga.isBelow=(e,t)=>Bt(ue(t.getClientRects()),ce(e.getClientRects()),Vs).getOr(!1),ga.isAtStart=e=>!!e&&e.isAtStart(),ga.isAtEnd=e=>!!e&&e.isAtEnd(),ga.isTextPosition=e=>!!e&&Sr(e.container()),ga.isElementPosition=e=>!ga.isTextPosition(e);const va=(e,t)=>{Sr(t)&&0===t.data.length&&e.remove(t)},ya=(e,t,n)=>{Tr(n)?((e,t,n)=>{const r=Y.from(n.firstChild),o=Y.from(n.lastChild);t.insertNode(n),r.each((t=>va(e,t.previousSibling))),o.each((t=>va(e,t.nextSibling)))})(e,t,n):((e,t,n)=>{t.insertNode(n),va(e,n.previousSibling),va(e,n.nextSibling)})(e,t,n)},ba=Sr,_a=xr,wa=ls.nodeIndex,xa=e=>{const t=e.parentNode;return _a(t)?xa(t):t},Ca=e=>e?Fe(e.childNodes,((e,t)=>(_a(t)&&\"BR\"!==t.nodeName?e=e.concat(Ca(t)):e.push(t),e)),[]):[],ka=e=>t=>e===t,Da=e=>(ba(e)?\"text()\":e.nodeName.toLowerCase())+\"[\"+(e=>{let t,n;t=Ca(xa(e)),n=Oe(t,ka(e),e),t=t.slice(0,n+1);const r=Fe(t,((e,n,r)=>(ba(n)&&ba(t[r-1])&&e++,e)),0);return t=Te(t,br([e.nodeName])),n=Oe(t,ka(e),e),n-r})(e)+\"]\",Sa=(e,t)=>{let n,r=[],o=t.container(),i=t.offset();if(ba(o))n=((e,t)=>{let n=e;for(;(n=n.previousSibling)&&ba(n);)t+=n.data.length;return t})(o,i);else{const e=o.childNodes;i>=e.length?(n=\"after\",i=e.length-1):n=\"before\",o=e[i]}r.push(Da(o));let s=((e,t,n)=>{const r=[];for(let o=t.parentNode;o&&o!==e&&(!n||!n(o));o=o.parentNode)r.push(o);return r})(e,o);return s=Te(s,O(xr)),r=r.concat(Ee(s,(e=>Da(e)))),r.reverse().join(\"/\")+\",\"+n},Aa=(e,t)=>{if(!t)return null;const n=t.split(\",\"),r=n[0].split(\"/\"),o=n.length>1?n[1]:\"before\",i=Fe(r,((e,t)=>{const n=/([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(t);return n?(\"text()\"===n[1]&&(n[1]=\"#text\"),((e,t,n)=>{let r=Ca(e);return r=Te(r,((e,t)=>!ba(e)||!ba(r[t-1]))),r=Te(r,br([t])),r[n]})(e,n[1],parseInt(n[2],10))):null}),e);if(!i)return null;if(!ba(i)&&i.parentNode){let e;return e=\"after\"===o?wa(i)+1:wa(i),ga(i.parentNode,e)}return((e,t)=>{let n=e,r=0;for(;ba(n);){const o=n.data.length;if(t>=r&&t<=r+o){e=n,t-=r;break}if(!ba(n.nextSibling)){e=n,t=o;break}r+=o,n=n.nextSibling}return ba(e)&&t>e.data.length&&(t=e.data.length),ga(e,t)})(i,parseInt(o,10))},Ma=Rr,La=(e,t,n,r,o)=>{const i=o?r.startContainer:r.endContainer;let s=o?r.startOffset:r.endOffset;const a=[],l=e.getRoot();if(Sr(i))a.push(n?((e,t,n)=>{let r=e(t.data.slice(0,n)).length;for(let n=t.previousSibling;n&&Sr(n);n=n.previousSibling)r+=e(n.data).length;return r})(t,i,s):s);else{let t=0;const r=i.childNodes;s>=r.length&&r.length&&(t=1,s=Math.max(0,r.length-1)),a.push(e.nodeIndex(r[s],n)+t)}for(let t=i;t&&t!==l;t=t.parentNode)a.push(e.nodeIndex(t,n));return a},Ea=(e,t,n)=>{let r=0;return Ft.each(e.select(t),(e=>\"all\"===e.getAttribute(\"data-mce-bogus\")?void 0:e!==n&&void r++)),r},Ta=(e,t)=>{let n=t?e.startContainer:e.endContainer,r=t?e.startOffset:e.endOffset;if(vr(n)&&\"TR\"===n.nodeName){const o=n.childNodes;n=o[Math.min(t?r:r-1,o.length-1)],n&&(r=t?0:n.childNodes.length,t?e.setStart(n,r):e.setEnd(n,r))}},Fa=e=>(Ta(e,!0),Ta(e,!1),e),Oa=(e,t)=>{if(vr(e)&&(e=Ks(e,t),Ma(e)))return e;if(Bo(e)){Sr(e)&&Fo(e)&&(e=e.parentNode);let t=e.previousSibling;if(Ma(t))return t;if(t=e.nextSibling,Ma(t))return t}},Ba=(e,t,n)=>{const r=n.getNode(),o=n.getRng();if(\"IMG\"===r.nodeName||Ma(r)){const e=r.nodeName;return{name:e,index:Ea(n.dom,e,r)}}const i=(e=>Oa(e.startContainer,e.startOffset)||Oa(e.endContainer,e.endOffset))(o);if(i){const e=i.tagName;return{name:e,index:Ea(n.dom,e,i)}}return((e,t,n,r)=>{const o=t.dom,i=La(o,e,n,r,!0),s=t.isForward(),a=Ho(r)?{isFakeCaret:!0}:{};return t.isCollapsed()?{start:i,forward:s,...a}:{start:i,end:La(o,e,n,r,!1),forward:s,...a}})(e,n,t,o)},Ra=(e,t,n)=>{const r={\"data-mce-type\":\"bookmark\",id:t,style:\"overflow:hidden;line-height:0px\"};return n?e.create(\"span\",r,\"&#xFEFF;\"):e.create(\"span\",r)},$a=(e,t)=>{const n=e.dom;let r=e.getRng();const o=n.uniqueId(),i=e.isCollapsed(),s=e.getNode(),a=s.nodeName,l=e.isForward();if(\"IMG\"===a)return{name:a,index:Ea(n,a,s)};const c=Fa(r.cloneRange());if(!i){c.collapse(!1);const e=Ra(n,o+\"_end\",t);ya(n,c,e)}r=Fa(r),r.collapse(!0);const u=Ra(n,o+\"_start\",t);return ya(n,r,u),e.moveToBookmark({id:o,keep:!0,forward:l}),{id:o,forward:l}},Na=(e,t,n=!1)=>2===t?Ba(Lo,n,e):3===t?(e=>{const t=e.getRng();return{start:Sa(e.dom.getRoot(),ga.fromRangeStart(t)),end:Sa(e.dom.getRoot(),ga.fromRangeEnd(t)),forward:e.isForward()}})(e):t?(e=>({rng:e.getRng(),forward:e.isForward()}))(e):$a(e,!1),Ya=F(Ba,E,!0),Pa=e=>{const t=t=>t(e),n=L(e),r=()=>o,o={tag:!0,inner:e,fold:(t,n)=>n(e),isValue:N,isError:$,map:t=>Ha.value(t(e)),mapError:r,bind:t,exists:t,forall:t,getOr:n,or:r,getOrThunk:n,orThunk:r,getOrDie:n,each:t=>{t(e)},toOptional:()=>Y.some(e)};return o},Ia=e=>{const t=()=>n,n={tag:!1,inner:e,fold:(t,n)=>t(e),isValue:$,isError:N,map:t,mapError:t=>Ha.error(t(e)),bind:t,exists:$,forall:N,getOr:E,or:E,getOrThunk:B,orThunk:B,getOrDie:(r=String(e),()=>{throw new Error(r)}),each:S,toOptional:Y.none};var r;return n},Ha={value:Pa,error:Ia,fromOption:(e,t)=>e.fold((()=>Ia(t)),Pa)},ja=e=>{if(!v(e))throw new Error(\"cases must be an array\");if(0===e.length)throw new Error(\"there must be at least one case\");const t=[],n={};return V(e,((r,o)=>{const i=me(r);if(1!==i.length)throw new Error(\"one and only one name per case\");const s=i[0],a=r[s];if(void 0!==n[s])throw new Error(\"duplicate key detected:\"+s);if(\"cata\"===s)throw new Error(\"cannot have a case named cata (sorry)\");if(!v(a))throw new Error(\"case arguments must be an array\");t.push(s),n[s]=(...n)=>{const r=n.length;if(r!==a.length)throw new Error(\"Wrong number of arguments to case \"+s+\". Expected \"+a.length+\" (\"+a+\"), got \"+r);return{fold:(...t)=>{if(t.length!==e.length)throw new Error(\"Wrong number of arguments to fold. Expected \"+e.length+\", got \"+t.length);return t[o].apply(null,n)},match:e=>{const r=me(e);if(t.length!==r.length)throw new Error(\"Wrong number of arguments to match. Expected: \"+t.join(\",\")+\"\\nActual: \"+r.join(\",\"));if(!re(t,(e=>W(r,e))))throw new Error(\"Not all branches were specified when using match. Specified: \"+r.join(\", \")+\"\\nRequired: \"+t.join(\", \"));return e[s].apply(null,n)},log:e=>{console.log(e,{constructors:t,constructor:s,params:n})}}}})),n};ja([{bothErrors:[\"error1\",\"error2\"]},{firstError:[\"error1\",\"value2\"]},{secondError:[\"value1\",\"error2\"]},{bothValues:[\"value1\",\"value2\"]}]);const Wa=e=>\"inline-command\"===e.type||\"inline-format\"===e.type,za=e=>\"block-command\"===e.type||\"block-format\"===e.type,Ua=e=>{const t=t=>Ha.error({message:t,pattern:e}),n=(n,r,o)=>{if(void 0!==e.format){let o;if(v(e.format)){if(!re(e.format,f))return t(n+\" pattern has non-string items in the `format` array\");o=e.format}else{if(!f(e.format))return t(n+\" pattern has non-string `format` parameter\");o=[e.format]}return Ha.value(r(o))}return void 0!==e.cmd?f(e.cmd)?Ha.value(o(e.cmd,e.value)):t(n+\" pattern has non-string `cmd` parameter\"):t(n+\" pattern is missing both `format` and `cmd` parameters\")};if(!p(e))return t(\"Raw pattern is not an object\");if(!f(e.start))return t(\"Raw pattern is missing `start` parameter\");if(void 0!==e.end){if(!f(e.end))return t(\"Inline pattern has non-string `end` parameter\");if(0===e.start.length&&0===e.end.length)return t(\"Inline pattern has empty `start` and `end` parameters\");let r=e.start,o=e.end;return 0===o.length&&(o=r,r=\"\"),n(\"Inline\",(e=>({type:\"inline-format\",start:r,end:o,format:e})),((e,t)=>({type:\"inline-command\",start:r,end:o,cmd:e,value:t})))}return void 0!==e.replacement?f(e.replacement)?0===e.start.length?t(\"Replacement pattern has empty `start` parameter\"):Ha.value({type:\"inline-command\",start:\"\",end:e.start,cmd:\"mceInsertContent\",value:e.replacement}):t(\"Replacement pattern has non-string `replacement` parameter\"):0===e.start.length?t(\"Block pattern has empty `start` parameter\"):n(\"Block\",(t=>({type:\"block-format\",start:e.start,format:t[0]})),((t,n)=>({type:\"block-command\",start:e.start,cmd:t,value:n})))},Va=e=>K(e,za),qa=e=>K(e,Wa),Ga=e=>{const t=(e=>{const t=[],n=[];return V(e,(e=>{e.fold((e=>{t.push(e)}),(e=>{n.push(e)}))})),{errors:t,values:n}})(U(e,Ua));return V(t.errors,(e=>console.error(e.message,e.pattern))),t.values},Ka=wt().deviceType,Xa=Ka.isTouch(),Ja=ls.DOM,Qa=e=>m(e,RegExp),Za=e=>t=>t.options.get(e),el=e=>f(e)||p(e),tl=(e,t=\"\")=>n=>{const r=f(n);if(r){if(-1!==n.indexOf(\"=\")){const o=(e=>{const t=e.indexOf(\"=\")>0?e.split(/[;,](?![^=;,]*(?:[;,]|$))/):e.split(\",\");return J(t,((e,t)=>{const n=t.split(\"=\"),r=n[0],o=n.length>1?n[1]:r;return e[Ue(r)]=Ue(o),e}),{})})(n);return{value:Ce(o,e.id).getOr(t),valid:r}}return{value:n,valid:r}}return{valid:!1,message:\"Must be a string.\"}},nl=Za(\"iframe_attrs\"),rl=Za(\"doctype\"),ol=Za(\"document_base_url\"),il=Za(\"body_id\"),sl=Za(\"body_class\"),al=Za(\"content_security_policy\"),ll=Za(\"br_in_pre\"),cl=Za(\"forced_root_block\"),ul=Za(\"forced_root_block_attrs\"),dl=Za(\"newline_behavior\"),hl=Za(\"br_newline_selector\"),ml=Za(\"no_newline_selector\"),fl=Za(\"keep_styles\"),pl=Za(\"end_container_on_empty_block\"),gl=Za(\"automatic_uploads\"),vl=Za(\"images_reuse_filename\"),yl=Za(\"images_replace_blob_uris\"),bl=Za(\"icons\"),_l=Za(\"icons_url\"),wl=Za(\"images_upload_url\"),xl=Za(\"images_upload_base_path\"),Cl=Za(\"images_upload_credentials\"),kl=Za(\"images_upload_handler\"),Dl=Za(\"content_css_cors\"),Sl=Za(\"referrer_policy\"),Al=Za(\"language\"),Ml=Za(\"language_url\"),Ll=Za(\"indent_use_margin\"),El=Za(\"indentation\"),Tl=Za(\"content_css\"),Fl=Za(\"content_style\"),Ol=Za(\"font_css\"),Bl=Za(\"directionality\"),Rl=Za(\"inline_boundaries_selector\"),$l=Za(\"object_resizing\"),Nl=Za(\"resize_img_proportional\"),Yl=Za(\"placeholder\"),Pl=Za(\"event_root\"),Il=Za(\"service_message\"),Hl=Za(\"theme\"),jl=Za(\"theme_url\"),Wl=Za(\"model\"),zl=Za(\"model_url\"),Ul=Za(\"inline_boundaries\"),Vl=Za(\"formats\"),ql=Za(\"preview_styles\"),Gl=Za(\"format_empty_lines\"),Kl=Za(\"format_noneditable_selector\"),Xl=Za(\"custom_ui_selector\"),Jl=Za(\"inline\"),Ql=Za(\"hidden_input\"),Zl=Za(\"submit_patch\"),ec=Za(\"add_form_submit_trigger\"),tc=Za(\"add_unload_trigger\"),nc=Za(\"custom_undo_redo_levels\"),rc=Za(\"disable_nodechange\"),oc=Za(\"readonly\"),ic=Za(\"content_css_cors\"),sc=Za(\"plugins\"),ac=Za(\"external_plugins\"),lc=Za(\"block_unsupported_drop\"),cc=Za(\"visual\"),uc=Za(\"visual_table_class\"),dc=Za(\"visual_anchor_class\"),hc=Za(\"iframe_aria_text\"),mc=Za(\"setup\"),fc=Za(\"init_instance_callback\"),pc=Za(\"urlconverter_callback\"),gc=Za(\"auto_focus\"),vc=Za(\"browser_spellcheck\"),yc=Za(\"protect\"),bc=Za(\"paste_block_drop\"),_c=Za(\"paste_data_images\"),wc=Za(\"paste_preprocess\"),xc=Za(\"paste_postprocess\"),Cc=Za(\"paste_webkit_styles\"),kc=Za(\"paste_remove_styles_if_webkit\"),Dc=Za(\"paste_merge_formats\"),Sc=Za(\"smart_paste\"),Ac=Za(\"paste_as_text\"),Mc=Za(\"paste_tab_spaces\"),Lc=Za(\"allow_html_data_urls\"),Ec=Za(\"text_patterns\"),Tc=Za(\"text_patterns_lookup\"),Fc=Za(\"noneditable_class\"),Oc=Za(\"editable_class\"),Bc=Za(\"noneditable_regexp\"),Rc=Za(\"preserve_cdata\"),$c=e=>Ft.explode(e.options.get(\"images_file_types\")),Nc=Za(\"table_tab_navigation\"),Yc=vr,Pc=Sr,Ic=e=>{const t=e.parentNode;t&&t.removeChild(e)},Hc=e=>{const t=Lo(e);return{count:e.length-t.length,text:t}},jc=e=>{let t;for(;-1!==(t=e.data.lastIndexOf(Ao));)e.deleteData(t,1)},Wc=(e,t)=>(qc(e),t),zc=(e,t)=>{const n=t.container(),r=((e,t)=>{const n=j(e,t);return-1===n?Y.none():Y.some(n)})(de(n.childNodes),e).map((e=>e<t.offset()?ga(n,t.offset()-1):t)).getOr(t);return qc(e),r},Uc=(e,t)=>Pc(e)&&t.container()===e?((e,t)=>{const n=Hc(e.data.substr(0,t.offset())),r=Hc(e.data.substr(t.offset()));return(n.text+r.text).length>0?(jc(e),ga(e,t.offset()-n.count)):t})(e,t):Wc(e,t),Vc=(e,t)=>ga.isTextPosition(t)?Uc(e,t):((e,t)=>t.container()===e.parentNode?zc(e,t):Wc(e,t))(e,t),qc=e=>{Yc(e)&&Bo(e)&&(Ro(e)?e.removeAttribute(\"data-mce-caret\"):Ic(e)),Pc(e)&&(jc(e),0===e.data.length&&Ic(e))},Gc=Rr,Kc=Yr,Xc=$r,Jc=(e,t,n)=>{const r=Ws(t.getBoundingClientRect(),n);let o,i;if(\"BODY\"===e.tagName){const t=e.ownerDocument.documentElement;o=e.scrollLeft||t.scrollLeft,i=e.scrollTop||t.scrollTop}else{const t=e.getBoundingClientRect();o=e.scrollLeft-t.left,i=e.scrollTop-t.top}r.left+=o,r.right+=o,r.top+=i,r.bottom+=i,r.width=1;let s=t.offsetWidth-t.clientWidth;return s>0&&(n&&(s*=-1),r.left+=s,r.right+=s),r},Qc=(e,t,n,r)=>{const o=ys();let i,s;const a=cl(e),l=e.dom,c=()=>{(e=>{var t,n;const r=bo(dn.fromDom(e),\"*[contentEditable=false],video,audio,embed,object\");for(let e=0;e<r.length;e++){const o=r[e].dom;let i=o.previousSibling;if(Po(i)){const e=i.data;1===e.length?null===(t=i.parentNode)||void 0===t||t.removeChild(i):i.deleteData(e.length-1,1)}i=o.nextSibling,Yo(i)&&(1===i.data.length?null===(n=i.parentNode)||void 0===n||n.removeChild(i):i.deleteData(0,1))}})(t),s&&(qc(s),s=null),o.on((e=>{l.remove(e.caret),o.clear()})),i&&(clearInterval(i),i=void 0)},u=()=>{i=setInterval((()=>{o.on((e=>{r()?l.toggleClass(e.caret,\"mce-visual-caret-hidden\"):l.addClass(e.caret,\"mce-visual-caret-hidden\")}))}),500)};return{show:(e,r)=>{let i;if(c(),Xc(r))return null;if(!n(r))return s=((e,t)=>{var n;const r=(null!==(n=e.ownerDocument)&&void 0!==n?n:document).createTextNode(Ao),o=e.parentNode;if(t){const t=e.previousSibling;if(To(t)){if(Bo(t))return t;if(Po(t))return t.splitText(t.data.length-1)}null==o||o.insertBefore(r,e)}else{const t=e.nextSibling;if(To(t)){if(Bo(t))return t;if(Yo(t))return t.splitText(1),t}e.nextSibling?null==o||o.insertBefore(r,e.nextSibling):null==o||o.appendChild(r)}return r})(r,e),i=r.ownerDocument.createRange(),eu(s.nextSibling)?(i.setStart(s,0),i.setEnd(s,0)):(i.setStart(s,1),i.setEnd(s,1)),i;{const n=((e,t,n)=>{var r;const o=(null!==(r=t.ownerDocument)&&void 0!==r?r:document).createElement(e);o.setAttribute(\"data-mce-caret\",n?\"before\":\"after\"),o.setAttribute(\"data-mce-bogus\",\"all\"),o.appendChild(ko().dom);const i=t.parentNode;return n?null==i||i.insertBefore(o,t):t.nextSibling?null==i||i.insertBefore(o,t.nextSibling):null==i||i.appendChild(o),o})(a,r,e),c=Jc(t,r,e);l.setStyle(n,\"top\",c.top),s=n;const d=l.create(\"div\",{class:\"mce-visual-caret\",\"data-mce-bogus\":\"all\"});l.setStyles(d,{...c}),l.add(t,d),o.set({caret:d,element:r,before:e}),e&&l.addClass(d,\"mce-visual-caret-before\"),u(),i=r.ownerDocument.createRange(),i.setStart(n,0),i.setEnd(n,0)}return i},hide:c,getCss:()=>\".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}\",reposition:()=>{o.on((e=>{const n=Jc(t,e.element,e.before);l.setStyles(e.caret,{...n})}))},destroy:()=>clearInterval(i)}},Zc=()=>Mt.browser.isFirefox(),eu=e=>Gc(e)||Kc(e),tu=e=>eu(e)||Cr(e)&&Zc(),nu=Br,ru=Rr,ou=Yr,iu=_r(\"display\",\"block table table-cell table-caption list-item\"),su=Bo,au=Fo,lu=vr,cu=Sr,uu=Xo,du=e=>e>0,hu=e=>e<0,mu=(e,t)=>{let n;for(;n=e(t);)if(!au(n))return n;return null},fu=(e,t,n,r,o)=>{const i=new Zr(e,r),s=ru(e)||au(e);let a;if(hu(t)){if(s&&(a=mu(i.prev.bind(i),!0),n(a)))return a;for(;a=mu(i.prev.bind(i),o);)if(n(a))return a}if(du(t)){if(s&&(a=mu(i.next.bind(i),!0),n(a)))return a;for(;a=mu(i.next.bind(i),o);)if(n(a))return a}return null},pu=(e,t)=>{for(;e&&e!==t;){if(iu(e))return e;e=e.parentNode}return null},gu=(e,t,n)=>pu(e.container(),n)===pu(t.container(),n),vu=(e,t)=>{if(!t)return Y.none();const n=t.container(),r=t.offset();return lu(n)?Y.from(n.childNodes[r+e]):Y.none()},yu=(e,t)=>{var n;const r=(null!==(n=t.ownerDocument)&&void 0!==n?n:document).createRange();return e?(r.setStartBefore(t),r.setEndBefore(t)):(r.setStartAfter(t),r.setEndAfter(t)),r},bu=(e,t,n)=>pu(t,e)===pu(n,e),_u=(e,t,n)=>{const r=e?\"previousSibling\":\"nextSibling\";let o=n;for(;o&&o!==t;){let e=o[r];if(e&&su(e)&&(e=e[r]),ru(e)||ou(e)){if(bu(t,e,o))return e;break}if(uu(e))break;o=o.parentNode}return null},wu=F(yu,!0),xu=F(yu,!1),Cu=(e,t,n)=>{let r;const o=F(_u,!0,t),i=F(_u,!1,t),s=n.startContainer,a=n.startOffset;if(Fo(s)){const e=cu(s)?s.parentNode:s,t=e.getAttribute(\"data-mce-caret\");if(\"before\"===t&&(r=e.nextSibling,tu(r)))return wu(r);if(\"after\"===t&&(r=e.previousSibling,tu(r)))return xu(r)}if(!n.collapsed)return n;if(Sr(s)){if(su(s)){if(1===e){if(r=i(s),r)return wu(r);if(r=o(s),r)return xu(r)}if(-1===e){if(r=o(s),r)return xu(r);if(r=i(s),r)return wu(r)}return n}if(Po(s)&&a>=s.data.length-1)return 1===e&&(r=i(s),r)?wu(r):n;if(Yo(s)&&a<=1)return-1===e&&(r=o(s),r)?xu(r):n;if(a===s.data.length)return r=i(s),r?wu(r):n;if(0===a)return r=o(s),r?xu(r):n}return n},ku=(e,t)=>vu(e?0:-1,t).filter(ru),Du=(e,t,n)=>{const r=Cu(e,t,n);return-1===e?ga.fromRangeStart(r):ga.fromRangeEnd(r)},Su=e=>Y.from(e.getNode()).map(dn.fromDom),Au=(e,t)=>{let n=t;for(;n=e(n);)if(n.isVisible())return n;return n},Mu=(e,t)=>{const n=gu(e,t);return!(n||!Fr(e.getNode()))||n};var Lu;!function(e){e[e.Backwards=-1]=\"Backwards\",e[e.Forwards=1]=\"Forwards\"}(Lu||(Lu={}));const Eu=Rr,Tu=Sr,Fu=vr,Ou=Fr,Bu=Xo,Ru=e=>qo(e)||(e=>!!Jo(e)&&!J(de(e.getElementsByTagName(\"*\")),((e,t)=>e||jo(t)),!1))(e),$u=Qo,Nu=(e,t)=>e.hasChildNodes()&&t<e.childNodes.length?e.childNodes[t]:null,Yu=(e,t)=>{if(du(e)){if(Bu(t.previousSibling)&&!Tu(t.previousSibling))return ga.before(t);if(Tu(t))return ga(t,0)}if(hu(e)){if(Bu(t.nextSibling)&&!Tu(t.nextSibling))return ga.after(t);if(Tu(t))return ga(t,t.data.length)}return hu(e)?Ou(t)?ga.before(t):ga.after(t):ga.before(t)},Pu=(e,t,n)=>{let r,o,i,s;if(!Fu(n)||!t)return null;if(t.isEqual(ga.after(n))&&n.lastChild){if(s=ga.after(n.lastChild),hu(e)&&Bu(n.lastChild)&&Fu(n.lastChild))return Ou(n.lastChild)?ga.before(n.lastChild):s}else s=t;const a=s.container();let l=s.offset();if(Tu(a)){if(hu(e)&&l>0)return ga(a,--l);if(du(e)&&l<a.length)return ga(a,++l);r=a}else{if(hu(e)&&l>0&&(o=Nu(a,l-1),Bu(o)))return!Ru(o)&&(i=fu(o,e,$u,o),i)?Tu(i)?ga(i,i.data.length):ga.after(i):Tu(o)?ga(o,o.data.length):ga.before(o);if(du(e)&&l<a.childNodes.length&&(o=Nu(a,l),Bu(o)))return Ou(o)?((e,t)=>{const n=t.nextSibling;return n&&Bu(n)?Tu(n)?ga(n,0):ga.before(n):Pu(Lu.Forwards,ga.after(t),e)})(n,o):!Ru(o)&&(i=fu(o,e,$u,o),i)?Tu(i)?ga(i,0):ga.before(i):Tu(o)?ga(o,0):ga.after(o);r=o||s.getNode()}if(r&&(du(e)&&s.isAtEnd()||hu(e)&&s.isAtStart())&&(r=fu(r,e,N,n,!0),$u(r,n)))return Yu(e,r);o=r?fu(r,e,$u,n):r;const c=Be(K(((e,t)=>{const n=[];let r=e;for(;r&&r!==t;)n.push(r),r=r.parentNode;return n})(a,n),Eu));return!c||o&&c.contains(o)?o?Yu(e,o):null:(s=du(e)?ga.after(c):ga.before(c),s)},Iu=e=>({next:t=>Pu(Lu.Forwards,t,e),prev:t=>Pu(Lu.Backwards,t,e)}),Hu=e=>ga.isTextPosition(e)?0===e.offset():Xo(e.getNode()),ju=e=>{if(ga.isTextPosition(e)){const t=e.container();return e.offset()===t.data.length}return Xo(e.getNode(!0))},Wu=(e,t)=>!ga.isTextPosition(e)&&!ga.isTextPosition(t)&&e.getNode()===t.getNode(!0),zu=(e,t,n)=>{return e?!Wu(t,n)&&(r=t,!(!ga.isTextPosition(r)&&Fr(r.getNode())))&&ju(t)&&Hu(n):!Wu(n,t)&&Hu(t)&&ju(n);var r},Uu=(e,t,n)=>{const r=Iu(t);return Y.from(e?r.next(n):r.prev(n))},Vu=(e,t,n)=>Uu(e,t,n).bind((r=>gu(n,r,t)&&zu(e,n,r)?Uu(e,t,r):Y.some(r))),qu=(e,t,n,r)=>Vu(e,t,n).bind((n=>r(n)?qu(e,t,n,r):Y.some(n))),Gu=(e,t)=>{const n=e?t.firstChild:t.lastChild;return Sr(n)?Y.some(ga(n,e?0:n.data.length)):n?Xo(n)?Y.some(e?ga.before(n):Fr(r=n)?ga.before(r):ga.after(r)):((e,t,n)=>{const r=e?ga.before(n):ga.after(n);return Uu(e,t,r)})(e,t,n):Y.none();var r},Ku=F(Uu,!0),Xu=F(Uu,!1),Ju=F(Gu,!0),Qu=F(Gu,!1),Zu=\"_mce_caret\",ed=e=>vr(e)&&e.id===Zu,td=(e,t)=>{let n=t;for(;n&&n!==e;){if(ed(n))return n;n=n.parentNode}return null},nd=e=>ke(e,\"name\"),rd=e=>Ft.isArray(e.start),od=e=>!(!nd(e)&&b(e.forward))||e.forward,id=(e,t)=>(vr(t)&&e.isBlock(t)&&!t.innerHTML&&(t.innerHTML='<br data-mce-bogus=\"1\" />'),t),sd=(e,t)=>Qu(e).fold($,(e=>(t.setStart(e.container(),e.offset()),t.setEnd(e.container(),e.offset()),!0))),ad=(e,t,n)=>!(!(e=>!e.hasChildNodes())(t)||!td(e,t))&&(((e,t)=>{var n;const r=(null!==(n=e.ownerDocument)&&void 0!==n?n:document).createTextNode(Ao);e.appendChild(r),t.setStart(r,0),t.setEnd(r,0)})(t,n),!0),ld=(e,t,n,r)=>{const o=n[t?\"start\":\"end\"],i=e.getRoot();if(o){let e=i,n=o[0];for(let t=o.length-1;e&&t>=1;t--){const n=e.childNodes;if(ad(i,e,r))return!0;if(o[t]>n.length-1)return!!ad(i,e,r)||sd(e,r);e=n[o[t]]}Sr(e)&&(n=Math.min(o[0],e.data.length)),vr(e)&&(n=Math.min(o[0],e.childNodes.length)),t?r.setStart(e,n):r.setEnd(e,n)}return!0},cd=e=>Sr(e)&&e.data.length>0,ud=(e,t,n)=>{const r=e.get(n.id+\"_\"+t),o=null==r?void 0:r.parentNode,i=n.keep;if(r&&o){let s,a;if(\"start\"===t?i?r.hasChildNodes()?(s=r.firstChild,a=1):cd(r.nextSibling)?(s=r.nextSibling,a=0):cd(r.previousSibling)?(s=r.previousSibling,a=r.previousSibling.data.length):(s=o,a=e.nodeIndex(r)+1):(s=o,a=e.nodeIndex(r)):i?r.hasChildNodes()?(s=r.firstChild,a=1):cd(r.previousSibling)?(s=r.previousSibling,a=r.previousSibling.data.length):(s=o,a=e.nodeIndex(r)):(s=o,a=e.nodeIndex(r)),!i){const o=r.previousSibling,i=r.nextSibling;let l;for(Ft.each(Ft.grep(r.childNodes),(e=>{Sr(e)&&(e.data=e.data.replace(/\\uFEFF/g,\"\"))}));l=e.get(n.id+\"_\"+t);)e.remove(l,!0);if(Sr(i)&&Sr(o)&&!Mt.browser.isOpera()){const t=o.data.length;o.appendData(i.data),e.remove(i),s=o,a=t}}return Y.some(ga(s,a))}return Y.none()},dd=(e,t)=>{const n=e.dom;if(t){if(rd(t))return((e,t)=>{const n=e.createRng();return ld(e,!0,t,n)&&ld(e,!1,t,n)?Y.some({range:n,forward:od(t)}):Y.none()})(n,t);if((e=>f(e.start))(t))return((e,t)=>{const n=Y.from(Aa(e.getRoot(),t.start)),r=Y.from(Aa(e.getRoot(),t.end));return Bt(n,r,((n,r)=>{const o=e.createRng();return o.setStart(n.container(),n.offset()),o.setEnd(r.container(),r.offset()),{range:o,forward:od(t)}}))})(n,t);if((e=>ke(e,\"id\"))(t))return((e,t)=>{const n=ud(e,\"start\",t),r=ud(e,\"end\",t);return Bt(n,r.or(n),((n,r)=>{const o=e.createRng();return o.setStart(id(e,n.container()),n.offset()),o.setEnd(id(e,r.container()),r.offset()),{range:o,forward:od(t)}}))})(n,t);if(nd(t))return((e,t)=>Y.from(e.select(t.name)[t.index]).map((t=>{const n=e.createRng();return n.selectNode(t),{range:n,forward:!0}})))(n,t);if((e=>ke(e,\"rng\"))(t))return Y.some({range:t.rng,forward:od(t)})}return Y.none()},hd=(e,t,n)=>Na(e,t,n),md=(e,t)=>{dd(e,t).each((({range:t,forward:n})=>{e.setRng(t,n)}))},fd=e=>vr(e)&&\"SPAN\"===e.tagName&&\"bookmark\"===e.getAttribute(\"data-mce-type\"),pd=(gd=go,e=>gd===e);var gd;const vd=e=>\"\"!==e&&-1!==\" \\f\\n\\r\\t\\v\".indexOf(e),yd=e=>!vd(e)&&!pd(e)&&!vo(e),bd=e=>{const t=e.toString(16);return(1===t.length?\"0\"+t:t).toUpperCase()},_d=e=>(e=>({value:e}))(bd(e.red)+bd(e.green)+bd(e.blue)),wd=/^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i,xd=/^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i,Cd=(e,t,n,r)=>({red:e,green:t,blue:n,alpha:r}),kd=(e,t,n,r)=>{const o=parseInt(e,10),i=parseInt(t,10),s=parseInt(n,10),a=parseFloat(r);return Cd(o,i,s,a)},Dd=e=>(e=>{if(\"transparent\"===e)return Y.some(Cd(0,0,0,0));const t=wd.exec(e);if(null!==t)return Y.some(kd(t[1],t[2],t[3],\"1\"));const n=xd.exec(e);return null!==n?Y.some(kd(n[1],n[2],n[3],n[4])):Y.none()})(e).map(_d).map((e=>\"#\"+e.value)).getOr(e),Sd=e=>{const t=[];if(e)for(let n=0;n<e.rangeCount;n++)t.push(e.getRangeAt(n));return t},Ad=e=>K((e=>ne(e,(e=>{const t=Gs(e);return t?[dn.fromDom(t)]:[]})))(e),co),Md=(e,t)=>{const n=bo(t,\"td[data-mce-selected],th[data-mce-selected]\");return n.length>0?n:Ad(e)},Ld=e=>Md(Sd(e.selection.getSel()),dn.fromDom(e.getBody())),Ed=(e,t)=>Gr(e,\"table\",t),Td=e=>An(e).fold(L([e]),(t=>[e].concat(Td(t)))),Fd=e=>Mn(e).fold(L([e]),(t=>\"br\"===$t(t)?wn(t).map((t=>[e].concat(Fd(t)))).getOr([]):[e].concat(Fd(t)))),Od=(e,t)=>Bt((e=>{const t=e.startContainer,n=e.startOffset;return Sr(t)?0===n?Y.some(dn.fromDom(t)):Y.none():Y.from(t.childNodes[n]).map(dn.fromDom)})(t),(e=>{const t=e.endContainer,n=e.endOffset;return Sr(t)?n===t.data.length?Y.some(dn.fromDom(t)):Y.none():Y.from(t.childNodes[n-1]).map(dn.fromDom)})(t),((t,n)=>{const r=Z(Td(e),F(pn,t)),o=Z(Fd(e),F(pn,n));return r.isSome()&&o.isSome()})).getOr(!1),Bd=(e,t,n,r)=>{const o=n,i=new Zr(n,o),s=_e(e.schema.getMoveCaretBeforeOnEnterElements(),((e,t)=>!W([\"td\",\"th\",\"table\"],t.toLowerCase())));let a=n;do{if(Sr(a)&&0!==Ft.trim(a.data).length)return void(r?t.setStart(a,0):t.setEnd(a,a.data.length));if(s[a.nodeName])return void(r?t.setStartBefore(a):\"BR\"===a.nodeName?t.setEndBefore(a):t.setEndAfter(a))}while(a=r?i.next():i.prev());\"BODY\"===o.nodeName&&(r?t.setStart(o,0):t.setEnd(o,o.childNodes.length))},Rd=e=>{const t=e.selection.getSel();return x(t)&&t.rangeCount>0},$d=(e,t)=>{const n=Ld(e);n.length>0?V(n,(n=>{const r=n.dom,o=e.dom.createRng();o.setStartBefore(r),o.setEndAfter(r),t(o,!0)})):t(e.selection.getRng(),!1)},Nd=(e,t,n)=>{const r=$a(e,t);n(r),e.moveToBookmark(r)},Yd=e=>k(null==e?void 0:e.nodeType),Pd=e=>vr(e)&&!fd(e)&&!ed(e)&&!xr(e),Id=e=>!0===e.isContentEditable,Hd=(e,t,n)=>{const{selection:r,dom:o}=e,i=r.getNode(),s=Rr(i);Nd(r,!0,(()=>{t()}));s&&Rr(i)&&o.isChildOf(i,e.getBody())?e.selection.select(i):n(r.getStart())&&jd(o,r)},jd=(e,t)=>{var n,r;const o=t.getRng(),{startContainer:i,startOffset:s}=o;if(!((e,t)=>{if(Pd(t)&&!/^(TD|TH)$/.test(t.nodeName)){const n=e.getAttrib(t,\"data-mce-selected\"),r=parseInt(n,10);return!isNaN(r)&&r>0}return!1})(e,t.getNode())&&vr(i)){const a=i.childNodes,l=e.getRoot();let c;if(s<a.length){const t=a[s];c=new Zr(t,null!==(n=e.getParent(t,e.isBlock))&&void 0!==n?n:l)}else{const t=a[a.length-1];c=new Zr(t,null!==(r=e.getParent(t,e.isBlock))&&void 0!==r?r:l),c.next(!0)}for(let n=c.current();n;n=c.next()){if(\"false\"===e.getContentEditable(n))return;if(Sr(n)&&!Vd(n))return o.setStart(n,0),void t.setRng(o)}}},Wd=(e,t,n)=>{if(e){const r=t?\"nextSibling\":\"previousSibling\";for(e=n?e:e[r];e;e=e[r])if(vr(e)||!Vd(e))return e}},zd=(e,t)=>(Yd(t)&&(t=t.nodeName),!!e.schema.getTextBlockElements()[t.toLowerCase()]),Ud=(e,t,n)=>e.schema.isValidChild(t,n),Vd=(e,t=!1)=>{if(x(e)&&Sr(e)){const n=t?e.data.replace(/ /g,\" \"):e.data;return ei(n)}return!1},qd=(e,t)=>{const n=e.dom;return Pd(t)&&\"false\"===n.getContentEditable(t)&&((e,t)=>{const n=\"[data-mce-cef-wrappable]\",r=Kl(e),o=Ke(r)?n:`${n},${r}`;return mn(dn.fromDom(t),o)})(e,t)&&0===n.select('[contenteditable=\"true\"]',t).length},Gd=(e,t)=>C(e)?e(t):(x(t)&&(e=e.replace(/%(\\w+)/g,((e,n)=>t[n]||e))),e),Kd=(e,t)=>(t=t||\"\",e=\"\"+((e=e||\"\").nodeName||e),t=\"\"+(t.nodeName||t),e.toLowerCase()===t.toLowerCase()),Xd=(e,t)=>{if(w(e))return null;{let n=String(e);return\"color\"!==t&&\"backgroundColor\"!==t||(n=Dd(n)),\"fontWeight\"===t&&700===e&&(n=\"bold\"),\"fontFamily\"===t&&(n=n.replace(/[\\'\\\"]/g,\"\").replace(/,\\s+/g,\",\")),n}},Jd=(e,t,n)=>{const r=e.getStyle(t,n);return Xd(r,n)},Qd=(e,t)=>{let n;return e.getParent(t,(t=>!!vr(t)&&(n=e.getStyle(t,\"text-decoration\"),!!n&&\"none\"!==n))),n},Zd=(e,t,n)=>e.getParents(t,n,e.getRoot()),eh=(e,t,n)=>{const r=e.formatter.get(t);return x(r)&&z(r,n)},th=(e,t,n)=>{const r=[\"inline\",\"block\",\"selector\",\"attributes\",\"styles\",\"classes\"],o=e=>_e(e,((e,t)=>z(r,(e=>e===t))));return eh(e,t,(t=>{const r=o(t);return eh(e,n,(e=>{const t=o(e);return((e,t,n=a)=>s(n).eq(e,t))(r,t)}))}))},nh=e=>De(e,\"block\"),rh=e=>De(e,\"selector\"),oh=e=>De(e,\"inline\"),ih=e=>rh(e)&&!1!==e.expand&&!oh(e),sh=fd,ah=Zd,lh=Vd,ch=zd,uh=(e,t)=>{let n=t;for(;n;){if(vr(n)&&e.getContentEditable(n))return\"false\"===e.getContentEditable(n)?n:t;n=n.parentNode}return t},dh=(e,t,n,r)=>{const o=t.data;for(let t=n;e?t>=0:t<o.length;e?t--:t++)if(r(o.charAt(t)))return e?t+1:t;return-1},hh=(e,t,n)=>dh(e,t,n,(e=>pd(e)||vd(e))),mh=(e,t,n)=>dh(e,t,n,yd),fh=(e,t,n,r,o,i)=>{let s;const a=e.getParent(n,e.isBlock)||t,l=(t,n,r)=>{const i=Is(e),l=o?i.backwards:i.forwards;return Y.from(l(t,n,((e,t)=>sh(e.parentNode)?-1:(s=e,r(o,e,t))),a))};return l(n,r,hh).bind((e=>i?l(e.container,e.offset+(o?-1:0),mh):Y.some(e))).orThunk((()=>s?Y.some({container:s,offset:o?0:s.length}):Y.none()))},ph=(e,t,n,r,o)=>{const i=r[o];Sr(r)&&Ke(r.data)&&i&&(r=i);const s=ah(e,r);for(let r=0;r<s.length;r++)for(let o=0;o<t.length;o++){const i=t[o];if((!x(i.collapsed)||i.collapsed===n.collapsed)&&(rh(i)&&e.is(s[r],i.selector)))return s[r]}return r},gh=(e,t,n,r)=>{var o;let i=n;const s=e.dom,a=s.getRoot(),l=t[0];if(nh(l)&&(i=l.wrapper?null:s.getParent(n,l.block,a)),!i){const t=null!==(o=s.getParent(n,\"LI,TD,TH\"))&&void 0!==o?o:a;i=s.getParent(Sr(n)?n.parentNode:n,(t=>t!==a&&ch(e,t)),t)}if(i&&nh(l)&&l.wrapper&&(i=ah(s,i,\"ul,ol\").reverse()[0]||i),!i)for(i=n;i&&i[r]&&!s.isBlock(i[r])&&(i=i[r],!Kd(i,\"br\")););return i||n},vh=(e,t,n,r)=>{const o=n.parentNode;return!x(n[r])&&(!(o!==t&&!w(o)&&!e.isBlock(o))||vh(e,t,o,r))},yh=(e,t,n,r,o)=>{let i=n;const s=o?\"previousSibling\":\"nextSibling\",a=e.getRoot();if(Sr(n)&&!lh(n)&&(o?r>0:r<n.data.length))return n;for(;i;){if(!t[0].block_expand&&e.isBlock(i))return i;for(let t=i[s];t;t=t[s]){const n=Sr(t)&&!vh(e,a,t,s);if(!sh(t)&&(!Fr(l=t)||!l.getAttribute(\"data-mce-bogus\")||l.nextSibling)&&!lh(t,n))return i}if(i===a||i.parentNode===a){n=i;break}i=i.parentNode}var l;return n},bh=e=>sh(e.parentNode)||sh(e),_h=(e,t,n,r=!1)=>{let{startContainer:o,startOffset:i,endContainer:s,endOffset:a}=t;const l=e.dom,c=n[0];if(vr(o)&&o.hasChildNodes()&&(o=Ks(o,i),Sr(o)&&(i=0)),vr(s)&&s.hasChildNodes()&&(s=Ks(s,t.collapsed?a:a-1),Sr(s)&&(a=s.data.length)),o=uh(l,o),s=uh(l,s),bh(o)&&(o=sh(o)?o:o.parentNode,o=t.collapsed?o.previousSibling||o:o.nextSibling||o,Sr(o)&&(i=t.collapsed?o.length:0)),bh(s)&&(s=sh(s)?s:s.parentNode,s=t.collapsed?s.nextSibling||s:s.previousSibling||s,Sr(s)&&(a=t.collapsed?0:s.length)),t.collapsed){fh(l,e.getBody(),o,i,!0,r).each((({container:e,offset:t})=>{o=e,i=t}));fh(l,e.getBody(),s,a,!1,r).each((({container:e,offset:t})=>{s=e,a=t}))}return(oh(c)||c.block_expand)&&(oh(c)&&Sr(o)&&0!==i||(o=yh(l,n,o,i,!0)),oh(c)&&Sr(s)&&a!==s.data.length||(s=yh(l,n,s,a,!1))),ih(c)&&(o=ph(l,n,t,o,\"previousSibling\"),s=ph(l,n,t,s,\"nextSibling\")),(nh(c)||rh(c))&&(o=gh(e,n,o,\"previousSibling\"),s=gh(e,n,s,\"nextSibling\"),nh(c)&&(l.isBlock(o)||(o=yh(l,n,o,i,!0)),l.isBlock(s)||(s=yh(l,n,s,a,!1)))),vr(o)&&o.parentNode&&(i=l.nodeIndex(o),o=o.parentNode),vr(s)&&s.parentNode&&(a=l.nodeIndex(s)+1,s=s.parentNode),{startContainer:o,startOffset:i,endContainer:s,endOffset:a}},wh=(e,t,n)=>{var r;const o=t.startOffset,i=Ks(t.startContainer,o),s=t.endOffset,a=Ks(t.endContainer,s-1),l=e=>{const t=e[0];Sr(t)&&t===i&&o>=t.data.length&&e.splice(0,1);const n=e[e.length-1];return 0===s&&e.length>0&&n===a&&Sr(n)&&e.splice(e.length-1,1),e},c=(e,t,n)=>{const r=[];for(;e&&e!==n;e=e[t])r.push(e);return r},u=(t,n)=>e.getParent(t,(e=>e.parentNode===n),n),d=(e,t,r)=>{const o=r?\"nextSibling\":\"previousSibling\";for(let i=e,s=i.parentNode;i&&i!==t;i=s){s=i.parentNode;const t=c(i===e?i:i[o],o);t.length&&(r||t.reverse(),n(l(t)))}};if(i===a)return n(l([i]));const h=null!==(r=e.findCommonAncestor(i,a))&&void 0!==r?r:e.getRoot();if(e.isChildOf(i,a))return d(i,h,!0);if(e.isChildOf(a,i))return d(a,h);const m=u(i,h)||i,f=u(a,h)||a;d(i,m,!0);const p=c(m===i?m:m.nextSibling,\"nextSibling\",f===a?f.nextSibling:f);p.length&&n(l(p)),d(a,f)},xh=['pre[class*=language-][contenteditable=\"false\"]',\"figure.image\",\"div[data-ephox-embed-iri]\",\"div.tiny-pageembed\",\"div.mce-toc\",\"div[data-mce-toc]\"],Ch=(e,t,n,r)=>_n(t).fold((()=>\"skipping\"),(o=>\"br\"===r||(e=>It(e)&&wo(e)===Ao)(t)?\"valid\":(e=>Pt(e)&&ln(e,ws()))(t)?\"existing\":ed(t.dom)?\"caret\":z(xh,(e=>mn(t,e)))?\"valid-block\":Ud(e,n,r)&&Ud(e,$t(o),n)?\"valid\":\"invalid-child\")),kh=(e,t,n,r,o,i)=>{const{uid:s=t,...a}=n;rn(e,ws()),Ut(e,`${Cs()}`,s),Ut(e,`${xs()}`,r);const{attributes:l={},classes:c=[]}=o(s,a);if(Vt(e,l),((e,t)=>{V(t,(t=>{rn(e,t)}))})(e,c),i){c.length>0&&Ut(e,`${Ds()}`,c.join(\",\"));const t=me(l);t.length>0&&Ut(e,`${Ss()}`,t.join(\",\"))}},Dh=e=>{sn(e,ws()),Xt(e,`${Cs()}`),Xt(e,`${xs()}`),Xt(e,`${ks()}`);const t=Gt(e,`${Ss()}`).map((e=>e.split(\",\"))).getOr([]),n=Gt(e,`${Ds()}`).map((e=>e.split(\",\"))).getOr([]);var r;V(t,(t=>Xt(e,t))),r=e,V(n,(e=>{sn(r,e)})),Xt(e,`${Ds()}`),Xt(e,`${Ss()}`)},Sh=(e,t,n,r,o)=>{const i=dn.fromTag(\"span\",e);return kh(i,t,n,r,o,!1),i},Ah=(e,t,n,r,o,i)=>{const s=[],a=Sh(e.getDoc(),n,i,r,o),l=ys(),c=()=>{l.clear()},u=e=>{V(e,d)},d=t=>{switch(Ch(e,t,\"span\",$t(t))){case\"invalid-child\":{c();const e=Dn(t);u(e),c();break}case\"valid-block\":c(),kh(t,n,i,r,o,!0);break;case\"valid\":{const e=l.get().getOrThunk((()=>{const e=$s(a);return s.push(e),l.set(e),e}));((e,t)=>{qn(e,t),Xn(t,e)})(t,e);break}}};return wh(e.dom,t,(e=>{c(),(e=>{const t=U(e,dn.fromDom);u(t)})(e)})),s},Mh=(e,t,n,r)=>{e.undoManager.transact((()=>{const o=e.selection,i=o.getRng(),s=Ld(e).length>0,a=Bs(\"mce-annotation\");if(i.collapsed&&!s&&((e,t)=>{const n=_h(e,t,[{inline:\"span\"}]);t.setStart(n.startContainer,n.startOffset),t.setEnd(n.endContainer,n.endOffset),e.selection.setRng(t)})(e,i),o.getRng().collapsed&&!s){const i=Sh(e.getDoc(),a,r,t,n.decorate);nr(i,go),o.getRng().insertNode(i.dom),o.select(i.dom)}else Nd(o,!1,(()=>{$d(e,(o=>{Ah(e,o,a,t,n.decorate,r)}))}))}))},Lh=e=>{const t=(()=>{const e={};return{register:(t,n)=>{e[t]={name:t,settings:n}},lookup:t=>Ce(e,t).map((e=>e.settings)),getNames:()=>me(e)}})();((e,t)=>{const n=xs(),r=e=>Y.from(e.attr(n)).bind(t.lookup),o=e=>{var t,n;e.attr(Cs(),null),e.attr(xs(),null),e.attr(ks(),null);const r=Y.from(e.attr(Ss())).map((e=>e.split(\",\"))).getOr([]),o=Y.from(e.attr(Ds())).map((e=>e.split(\",\"))).getOr([]);V(r,(t=>e.attr(t,null)));const i=null!==(n=null===(t=e.attr(\"class\"))||void 0===t?void 0:t.split(\" \"))&&void 0!==n?n:[],s=ie(i,[ws()].concat(o));e.attr(\"class\",s.length>0?s.join(\" \"):null),e.attr(Ds(),null),e.attr(Ss(),null)};e.serializer.addTempAttr(ks()),e.serializer.addAttributeFilter(n,(e=>{for(const t of e)r(t).each((e=>{!1===e.persistent&&(\"span\"===t.name?t.unwrap():o(t))}))}))})(e,t);const n=Fs(e,t),r=Wt(\"span\"),o=e=>{V(e,(e=>{r(e)?er(e):Dh(e)}))};return{register:(e,n)=>{t.register(e,n)},annotate:(n,r)=>{t.lookup(n).each((t=>{Mh(e,n,t,r)}))},annotationChanged:(e,t)=>{n.addListener(e,t)},remove:t=>{const n=e.selection.getBookmark();Ms(e,Y.some(t)).each((({elements:e})=>{o(e)})),e.selection.moveToBookmark(n)},removeAll:t=>{const n=e.selection.getBookmark();pe(Ts(e,t),((e,t)=>{o(e)})),e.selection.moveToBookmark(n)},getAll:t=>{const n=Ts(e,t);return ge(n,(e=>U(e,(e=>e.dom))))}}},Eh=e=>({getBookmark:F(hd,e),moveToBookmark:F(md,e)});Eh.isBookmarkNode=fd;const Th=(e,t,n)=>!n.collapsed&&z(n.getClientRects(),(n=>((e,t,n)=>t>=e.left&&t<=e.right&&n>=e.top&&n<=e.bottom)(n,e,t))),Fh=(e,t,n)=>{e.dispatch(t,n)},Oh=(e,t,n,r)=>{e.dispatch(\"FormatApply\",{format:t,node:n,vars:r})},Bh=(e,t,n,r)=>{e.dispatch(\"FormatRemove\",{format:t,node:n,vars:r})},Rh=(e,t)=>e.dispatch(\"SetContent\",t),$h=(e,t)=>e.dispatch(\"GetContent\",t),Nh=(e,t)=>e.dispatch(\"PastePlainTextToggle\",{state:t}),Yh={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,ESC:27,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,modifierPressed:e=>e.shiftKey||e.ctrlKey||e.altKey||Yh.metaKeyPressed(e),metaKeyPressed:e=>Mt.os.isMacOS()||Mt.os.isiOS()?e.metaKey:e.ctrlKey&&!e.altKey},Ph=\"data-mce-selected\",Ih=Math.abs,Hh=Math.round,jh={nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]},Wh=(e,t)=>{const n=t.dom,r=t.getDoc(),o=document,i=t.getBody();let s,a,l,c,u,d,h,m,f,p,g,v,y,b,_;const w=e=>x(e)&&(Or(e)||n.is(e,\"figure.image\")),C=e=>Yr(e)||n.hasClass(e,\"mce-preview-object\"),k=e=>{const n=e.target;((e,t)=>{if((e=>\"longpress\"===e.type||0===e.type.indexOf(\"touch\"))(e)){const n=e.touches[0];return w(e.target)&&!Th(n.clientX,n.clientY,t)}return w(e.target)&&!Th(e.clientX,e.clientY,t)})(e,t.selection.getRng())&&!e.isDefaultPrevented()&&t.selection.select(n)},D=e=>n.hasClass(e,\"mce-preview-object\")&&x(e.firstElementChild)?[e,e.firstElementChild]:n.is(e,\"figure.image\")?[e.querySelector(\"img\")]:[e],S=e=>{const r=$l(t);return!!r&&(\"false\"!==e.getAttribute(\"data-mce-resize\")&&(e!==t.getBody()&&(n.hasClass(e,\"mce-preview-object\")&&x(e.firstElementChild)?mn(dn.fromDom(e.firstElementChild),r):mn(dn.fromDom(e),r))))},A=(e,r,o)=>{if(x(o)){const i=D(e);V(i,(e=>{e.style[r]||!t.schema.isValid(e.nodeName.toLowerCase(),r)?n.setStyle(e,r,o):n.setAttrib(e,r,\"\"+o)}))}},M=(e,t,n)=>{A(e,\"width\",t),A(e,\"height\",n)},L=e=>{let r,o,u,x,k;r=e.screenX-d,o=e.screenY-h,v=r*c[2]+m,y=o*c[3]+f,v=v<5?5:v,y=y<5?5:y,u=(w(s)||C(s))&&!1!==Nl(t)?!Yh.modifierPressed(e):Yh.modifierPressed(e),u&&(Ih(r)>Ih(o)?(y=Hh(v*p),v=Hh(y/p)):(v=Hh(y/p),y=Hh(v*p))),M(a,v,y),x=c.startPos.x+r,k=c.startPos.y+o,x=x>0?x:0,k=k>0?k:0,n.setStyles(l,{left:x,top:k,display:\"block\"}),l.innerHTML=v+\" &times; \"+y,c[2]<0&&a.clientWidth<=v&&n.setStyle(a,\"left\",undefined+(m-v)),c[3]<0&&a.clientHeight<=y&&n.setStyle(a,\"top\",undefined+(f-y)),r=i.scrollWidth-b,o=i.scrollHeight-_,r+o!==0&&n.setStyles(l,{left:x-r,top:k-o}),g||(((e,t,n,r,o)=>{e.dispatch(\"ObjectResizeStart\",{target:t,width:n,height:r,origin:o})})(t,s,m,f,\"corner-\"+c.name),g=!0)},E=()=>{const e=g;g=!1,e&&(A(s,\"width\",v),A(s,\"height\",y)),n.unbind(r,\"mousemove\",L),n.unbind(r,\"mouseup\",E),o!==r&&(n.unbind(o,\"mousemove\",L),n.unbind(o,\"mouseup\",E)),n.remove(a),n.remove(l),n.remove(u),T(s),e&&(((e,t,n,r,o)=>{e.dispatch(\"ObjectResized\",{target:t,width:n,height:r,origin:o})})(t,s,v,y,\"corner-\"+c.name),n.setAttrib(s,\"style\",n.getAttrib(s,\"style\"))),t.nodeChanged()},T=e=>{$();const g=n.getPos(e,i),w=g.x,x=g.y,k=e.getBoundingClientRect(),A=k.width||k.right-k.left,T=k.height||k.bottom-k.top;s!==e&&(O(),s=e,v=y=0);const F=t.dispatch(\"ObjectSelected\",{target:e});S(e)&&!F.isDefaultPrevented()?pe(jh,((e,t)=>{const g=g=>{const v=D(s)[0];var y;d=g.screenX,h=g.screenY,m=v.clientWidth,f=v.clientHeight,p=f/m,c=e,c.name=t,c.startPos={x:A*e[0]+w,y:T*e[1]+x},b=i.scrollWidth,_=i.scrollHeight,u=n.add(i,\"div\",{class:\"mce-resize-backdrop\",\"data-mce-bogus\":\"all\"}),n.setStyles(u,{position:\"fixed\",left:\"0\",top:\"0\",width:\"100%\",height:\"100%\"}),a=C(y=s)?n.create(\"img\",{src:Mt.transparentSrc}):y.cloneNode(!0),n.addClass(a,\"mce-clonedresizable\"),n.setAttrib(a,\"data-mce-bogus\",\"all\"),a.contentEditable=\"false\",n.setStyles(a,{left:w,top:x,margin:0}),M(a,A,T),a.removeAttribute(Ph),i.appendChild(a),n.bind(r,\"mousemove\",L),n.bind(r,\"mouseup\",E),o!==r&&(n.bind(o,\"mousemove\",L),n.bind(o,\"mouseup\",E)),l=n.add(i,\"div\",{class:\"mce-resize-helper\",\"data-mce-bogus\":\"all\"},m+\" &times; \"+f)};let v=n.get(\"mceResizeHandle\"+t);v&&n.remove(v),v=n.add(i,\"div\",{id:\"mceResizeHandle\"+t,\"data-mce-bogus\":\"all\",class:\"mce-resizehandle\",unselectable:!0,style:\"cursor:\"+t+\"-resize; margin:0; padding:0\"}),n.bind(v,\"mousedown\",(e=>{e.stopImmediatePropagation(),e.preventDefault(),g(e)})),e.elm=v,n.setStyles(v,{left:A*e[0]+w-v.offsetWidth/2,top:T*e[1]+x-v.offsetHeight/2})})):O(!1)},F=bs(T,0),O=(e=!0)=>{F.cancel(),$(),s&&e&&s.removeAttribute(Ph),pe(jh,((e,t)=>{const r=n.get(\"mceResizeHandle\"+t);r&&(n.unbind(r),n.remove(r))}))},B=(e,t)=>n.isChildOf(e,t),R=r=>{if(g||t.removed||t.composing)return;const o=\"mousedown\"===r.type?r.target:e.getNode(),s=Xr(dn.fromDom(o),\"table,img,figure.image,hr,video,span.mce-preview-object\").map((e=>e.dom)).getOrUndefined(),a=x(s)?n.getAttrib(s,Ph,\"1\"):\"1\";if(V(n.select(\"img[data-mce-selected],hr[data-mce-selected]\"),(e=>{e.removeAttribute(Ph)})),x(s)&&B(s,i)){N();const t=e.getStart(!0);if(B(t,s)&&B(e.getEnd(!0),s))return n.setAttrib(s,Ph,a),void F.throttle(s)}O()},$=()=>{pe(jh,(e=>{e.elm&&(n.unbind(e.elm),delete e.elm)}))},N=()=>{try{t.getDoc().execCommand(\"enableObjectResizing\",!1,\"false\")}catch(e){}};t.on(\"init\",(()=>{N(),t.on(\"NodeChange ResizeEditor ResizeWindow ResizeContent drop\",R),t.on(\"keyup compositionend\",(e=>{s&&\"TABLE\"===s.nodeName&&R(e)})),t.on(\"hide blur\",O),t.on(\"contextmenu longpress\",k,!0)})),t.on(\"remove\",$);return{isResizable:S,showResizeRect:T,hideResizeRect:O,updateResizeRect:R,destroy:()=>{F.cancel(),s=a=u=null}}},zh=(e,t,n)=>{const r=e.document.createRange();var o;return o=r,t.fold((e=>{o.setStartBefore(e.dom)}),((e,t)=>{o.setStart(e.dom,t)}),(e=>{o.setStartAfter(e.dom)})),((e,t)=>{t.fold((t=>{e.setEndBefore(t.dom)}),((t,n)=>{e.setEnd(t.dom,n)}),(t=>{e.setEndAfter(t.dom)}))})(r,n),r},Uh=(e,t,n,r,o)=>{const i=e.document.createRange();return i.setStart(t.dom,n),i.setEnd(r.dom,o),i},Vh=ja([{ltr:[\"start\",\"soffset\",\"finish\",\"foffset\"]},{rtl:[\"start\",\"soffset\",\"finish\",\"foffset\"]}]),qh=(e,t,n)=>t(dn.fromDom(n.startContainer),n.startOffset,dn.fromDom(n.endContainer),n.endOffset),Gh=(e,t)=>{const n=((e,t)=>t.match({domRange:e=>({ltr:L(e),rtl:Y.none}),relative:(t,n)=>({ltr:Re((()=>zh(e,t,n))),rtl:Re((()=>Y.some(zh(e,n,t))))}),exact:(t,n,r,o)=>({ltr:Re((()=>Uh(e,t,n,r,o))),rtl:Re((()=>Y.some(Uh(e,r,o,t,n))))})}))(e,t);return((e,t)=>{const n=t.ltr();if(n.collapsed)return t.rtl().filter((e=>!1===e.collapsed)).map((e=>Vh.rtl(dn.fromDom(e.endContainer),e.endOffset,dn.fromDom(e.startContainer),e.startOffset))).getOrThunk((()=>qh(0,Vh.ltr,n)));return qh(0,Vh.ltr,n)})(0,n)};Vh.ltr,Vh.rtl;const Kh=(e,t,n,r)=>({start:e,soffset:t,finish:n,foffset:r}),Xh=(e,t,n)=>{var r,o;return Y.from(null===(o=(r=e.dom).caretPositionFromPoint)||void 0===o?void 0:o.call(r,t,n)).bind((t=>{if(null===t.offsetNode)return Y.none();const n=e.dom.createRange();return n.setStart(t.offsetNode,t.offset),n.collapse(),Y.some(n)}))},Jh=(e,t,n)=>{var r,o;return Y.from(null===(o=(r=e.dom).caretRangeFromPoint)||void 0===o?void 0:o.call(r,t,n))},Qh=document.caretPositionFromPoint?Xh:document.caretRangeFromPoint?Jh:Y.none,Zh=ja([{before:[\"element\"]},{on:[\"element\",\"offset\"]},{after:[\"element\"]}]),em={before:Zh.before,on:Zh.on,after:Zh.after,cata:(e,t,n,r)=>e.fold(t,n,r),getStart:e=>e.fold(E,E,E)},tm=ja([{domRange:[\"rng\"]},{relative:[\"startSitu\",\"finishSitu\"]},{exact:[\"start\",\"soffset\",\"finish\",\"foffset\"]}]),nm={domRange:tm.domRange,relative:tm.relative,exact:tm.exact,exactFromRange:e=>tm.exact(e.start,e.soffset,e.finish,e.foffset),getWin:e=>{const t=(e=>e.match({domRange:e=>dn.fromDom(e.startContainer),relative:(e,t)=>em.getStart(e),exact:(e,t,n,r)=>e}))(e);return bn(t)},range:Kh},rm=(e,t)=>{const n=$t(e);return\"input\"===n?em.after(e):W([\"br\",\"img\"],n)?0===t?em.before(e):em.after(e):em.on(e,t)},om=(e,t)=>{const n=e.fold(em.before,rm,em.after),r=t.fold(em.before,rm,em.after);return nm.relative(n,r)},im=(e,t,n,r)=>{const o=rm(e,t),i=rm(n,r);return nm.relative(o,i)},sm=(e,t)=>{const n=(t||document).createDocumentFragment();return V(e,(e=>{n.appendChild(e.dom)})),dn.fromDom(n)},am=e=>{const t=nm.getWin(e).dom,n=(e,n,r,o)=>Uh(t,e,n,r,o),r=(e=>e.match({domRange:e=>{const t=dn.fromDom(e.startContainer),n=dn.fromDom(e.endContainer);return im(t,e.startOffset,n,e.endOffset)},relative:om,exact:im}))(e);return Gh(t,r).match({ltr:n,rtl:n})},lm=(e,t,n)=>((e,t,n)=>{const r=dn.fromDom(e.document);return Qh(r,t,n).map((e=>Kh(dn.fromDom(e.startContainer),e.startOffset,dn.fromDom(e.endContainer),e.endOffset)))})(e,t,n),cm=(e,t,n)=>{const r=bn(dn.fromDom(n));return lm(r.dom,e,t).map((e=>{const t=n.createRange();return t.setStart(e.start.dom,e.soffset),t.setEnd(e.finish.dom,e.foffset),t})).getOrUndefined()},um=(e,t)=>x(e)&&x(t)&&e.startContainer===t.startContainer&&e.startOffset===t.startOffset&&e.endContainer===t.endContainer&&e.endOffset===t.endOffset,dm=(e,t,n)=>null!==((e,t,n)=>{let r=e;for(;r&&r!==t;){if(n(r))return r;r=r.parentNode}return null})(e,t,n),hm=(e,t,n)=>dm(e,t,(e=>e.nodeName===n)),mm=(e,t)=>Bo(e)&&!dm(e,t,ed),fm=(e,t,n)=>{const r=t.parentNode;if(r){const o=new Zr(t,e.getParent(r,e.isBlock)||e.getRoot());let i;for(;i=o[n?\"prev\":\"next\"]();)if(Fr(i))return!0}return!1},pm=(e,t,n,r,o)=>{const i=e.getRoot(),s=e.schema.getNonEmptyElements(),a=o.parentNode;let l,c;if(!a)return Y.none();const u=e.getParent(a,e.isBlock)||i;if(r&&Fr(o)&&t&&e.isEmpty(u))return Y.some(ga(a,e.nodeIndex(o)));const d=new Zr(o,u);for(;c=d[r?\"prev\":\"next\"]();){if(\"false\"===e.getContentEditableParent(c)||mm(c,i))return Y.none();if(Sr(c)&&c.data.length>0)return hm(c,i,\"A\")?Y.none():Y.some(ga(c,r?c.data.length:0));if(e.isBlock(c)||s[c.nodeName.toLowerCase()])return Y.none();l=c}return Lr(l)?Y.none():n&&l?Y.some(ga(l,0)):Y.none()},gm=(e,t,n,r)=>{const o=e.getRoot();let i,s=!1,a=n?r.startContainer:r.endContainer,l=n?r.startOffset:r.endOffset;const c=vr(a)&&l===a.childNodes.length,u=e.schema.getNonEmptyElements();let d=n;if(Bo(a))return Y.none();if(vr(a)&&l>a.childNodes.length-1&&(d=!1),Er(a)&&(a=o,l=0),a===o){if(d&&(i=a.childNodes[l>0?l-1:0],i)){if(Bo(i))return Y.none();if(u[i.nodeName]||Cr(i))return Y.none()}if(a.hasChildNodes()){if(l=Math.min(!d&&l>0?l-1:l,a.childNodes.length-1),a=a.childNodes[l],l=Sr(a)&&c?a.data.length:0,!t&&a===o.lastChild&&Cr(a))return Y.none();if(((e,t)=>{let n=t;for(;n&&n!==e;){if(Rr(n))return!0;n=n.parentNode}return!1})(o,a)||Bo(a))return Y.none();if(a.hasChildNodes()&&!Cr(a)){i=a;const t=new Zr(a,o);do{if(Rr(i)||Bo(i)){s=!1;break}if(Sr(i)&&i.data.length>0){l=d?0:i.data.length,a=i,s=!0;break}if(u[i.nodeName.toLowerCase()]&&!Nr(i)){l=e.nodeIndex(i),a=i.parentNode,d||l++,s=!0;break}}while(i=d?t.next():t.prev())}}}return t&&(Sr(a)&&0===l&&pm(e,c,t,!0,a).each((e=>{a=e.container(),l=e.offset(),s=!0})),vr(a)&&(i=a.childNodes[l],i||(i=a.childNodes[l-1]),!i||!Fr(i)||((e,t)=>{var n;return(null===(n=e.previousSibling)||void 0===n?void 0:n.nodeName)===t})(i,\"A\")||fm(e,i,!1)||fm(e,i,!0)||pm(e,c,t,!0,i).each((e=>{a=e.container(),l=e.offset(),s=!0})))),d&&!t&&Sr(a)&&l===a.data.length&&pm(e,c,t,!1,a).each((e=>{a=e.container(),l=e.offset(),s=!0})),s&&a?Y.some(ga(a,l)):Y.none()},vm=(e,t)=>{const n=t.collapsed,r=t.cloneRange(),o=ga.fromRangeStart(t);return gm(e,n,!0,r).each((e=>{n&&ga.isAbove(o,e)||r.setStart(e.container(),e.offset())})),n||gm(e,n,!1,r).each((e=>{r.setEnd(e.container(),e.offset())})),n&&r.collapse(!0),um(t,r)?Y.none():Y.some(r)},ym=(e,t)=>e.splitText(t),bm=e=>{let t=e.startContainer,n=e.startOffset,r=e.endContainer,o=e.endOffset;if(t===r&&Sr(t)){if(n>0&&n<t.data.length)if(r=ym(t,n),t=r.previousSibling,o>n){o-=n;const e=ym(r,o).previousSibling;t=r=e,o=e.data.length,n=0}else o=0}else if(Sr(t)&&n>0&&n<t.data.length&&(t=ym(t,n),n=0),Sr(r)&&o>0&&o<r.data.length){const e=ym(r,o).previousSibling;r=e,o=e.data.length}return{startContainer:t,startOffset:n,endContainer:r,endOffset:o}},_m=e=>({walk:(t,n)=>wh(e,t,n),split:bm,normalize:t=>vm(e,t).fold($,(e=>(t.setStart(e.startContainer,e.startOffset),t.setEnd(e.endContainer,e.endOffset),!0)))});_m.compareRanges=um,_m.getCaretRangeFromPoint=cm,_m.getSelectedNode=Gs,_m.getNode=Ks;const wm=((e,t)=>{const n=n=>{const r=t(n);if(r<=0||null===r){const t=jn(n,e);return parseFloat(t)||0}return r},r=(e,t)=>J(t,((t,n)=>{const r=jn(e,n),o=void 0===r?0:parseInt(r,10);return isNaN(o)?t:t+o}),0);return{set:(t,n)=>{if(!k(n)&&!n.match(/^[0-9]+$/))throw new Error(e+\".set accepts only positive integer values. Value was \"+n);const r=t.dom;cn(r)&&(r.style[e]=n+\"px\")},get:n,getOuter:n,aggregate:r,max:(e,t,n)=>{const o=r(e,n);return t>o?t-o:0}}})(\"height\",(e=>{const t=e.dom;return Yn(e)?t.getBoundingClientRect().height:t.offsetHeight})),xm=()=>dn.fromDom(document),Cm=(e,t)=>e.view(t).fold(L([]),(t=>{const n=e.owner(t),r=Cm(e,n);return[t].concat(r)}));var km=Object.freeze({__proto__:null,view:e=>{var t;return(e.dom===document?Y.none():Y.from(null===(t=e.dom.defaultView)||void 0===t?void 0:t.frameElement)).map(dn.fromDom)},owner:e=>yn(e)});const Dm=e=>{const t=xm(),n=ur(t),r=((e,t)=>{const n=t.owner(e);return Cm(t,n)})(e,km),o=cr(e),i=X(r,((e,t)=>{const n=cr(t);return{left:e.left+n.left,top:e.top+n.top}}),{left:0,top:0});return ar(i.left+o.left+n.left,i.top+o.top+n.top)},Sm=e=>\"textarea\"===$t(e),Am=(e,t)=>{const n=(e=>{const t=e.dom.ownerDocument,n=t.body,r=t.defaultView,o=t.documentElement;if(n===e.dom)return ar(n.offsetLeft,n.offsetTop);const i=lr(null==r?void 0:r.pageYOffset,o.scrollTop),s=lr(null==r?void 0:r.pageXOffset,o.scrollLeft),a=lr(o.clientTop,n.clientTop),l=lr(o.clientLeft,n.clientLeft);return cr(e).translate(s-l,i-a)})(e),r=(e=>wm.get(e))(e);return{element:e,bottom:n.top+r,height:r,pos:n,cleanup:t}},Mm=(e,t)=>{const n=((e,t)=>{const n=Dn(e);if(0===n.length||Sm(e))return{element:e,offset:t};if(t<n.length&&!Sm(n[t]))return{element:n[t],offset:0};{const r=n[n.length-1];return Sm(r)?{element:e,offset:t}:\"img\"===$t(r)?{element:r,offset:1}:It(r)?{element:r,offset:wo(r).length}:{element:r,offset:Dn(r).length}}})(e,t),r=dn.fromHtml('<span data-mce-bogus=\"all\" style=\"display: inline-block;\">\\ufeff</span>');return qn(n.element,r),Am(r,(()=>Zn(r)))},Lm=(e,t,n,r)=>{Om(e,((o,i)=>Tm(e,t,n,r)),n)},Em=(e,t,n,r,o)=>{const i={elm:r.element.dom,alignToTop:o};if(((e,t)=>e.dispatch(\"ScrollIntoView\",t).isDefaultPrevented())(e,i))return;n(t,ur(t).top,r,o),((e,t)=>{e.dispatch(\"AfterScrollIntoView\",t)})(e,i)},Tm=(e,t,n,r)=>{const o=dn.fromDom(e.getBody()),i=dn.fromDom(e.getDoc());o.dom.offsetWidth;const s=Mm(dn.fromDom(n.startContainer),n.startOffset);Em(e,i,t,s,r),s.cleanup()},Fm=(e,t,n,r)=>{const o=dn.fromDom(e.getDoc());Em(e,o,n,(e=>Am(dn.fromDom(e),S))(t),r)},Om=(e,t,n)=>{const r=n.startContainer,o=n.startOffset,i=n.endContainer,s=n.endOffset;t(dn.fromDom(r),dn.fromDom(i));const a=e.dom.createRng();a.setStart(r,o),a.setEnd(i,s),e.selection.setRng(n)},Bm=(e,t,n,r)=>{const o=e.pos;if(n)dr(o.left,o.top,r);else{const n=o.top-t+e.height;dr(o.left,n,r)}},Rm=(e,t,n,r,o)=>{const i=n+t,s=r.pos.top,a=r.bottom,l=a-s>=n;if(s<t)Bm(r,n,!1!==o,e);else if(s>i){Bm(r,n,l?!1!==o:!0===o,e)}else a>i&&!l&&Bm(r,n,!0===o,e)},$m=(e,t,n,r)=>{const o=bn(e).dom.innerHeight;Rm(e,t,o,n,r)},Nm=(e,t,n,r)=>{const o=bn(e).dom.innerHeight;Rm(e,t,o,n,r);const i=Dm(n.element),s=fr(window);i.top<s.y?hr(n.element,!1!==r):i.top>s.bottom&&hr(n.element,!0===r)},Ym=(e,t,n)=>Lm(e,$m,t,n),Pm=(e,t,n)=>Fm(e,t,$m,n),Im=(e,t,n)=>Lm(e,Nm,t,n),Hm=(e,t,n)=>Fm(e,t,Nm,n),jm=(e,t,n)=>{(e.inline?Ym:Im)(e,t,n)},Wm=e=>e.dom.focus(),zm=e=>{const t=On(e).dom;return e.dom===t.activeElement},Um=(e=xm())=>Y.from(e.dom.activeElement).map(dn.fromDom),Vm=(e,t)=>{const n=It(t)?wo(t).length:Dn(t).length+1;return e>n?n:e<0?0:e},qm=e=>nm.range(e.start,Vm(e.soffset,e.start),e.finish,Vm(e.foffset,e.finish)),Gm=(e,t)=>!gr(t.dom)&&(gn(e,t)||pn(e,t)),Km=e=>t=>Gm(e,t.start)&&Gm(e,t.finish),Xm=e=>nm.range(dn.fromDom(e.startContainer),e.startOffset,dn.fromDom(e.endContainer),e.endOffset),Jm=e=>(e=>{const t=e.getSelection();return(t&&0!==t.rangeCount?Y.from(t.getRangeAt(0)):Y.none()).map(Xm)})(bn(e).dom).filter(Km(e)),Qm=e=>{const t=document.createRange();try{return t.setStart(e.start.dom,e.soffset),t.setEnd(e.finish.dom,e.foffset),Y.some(t)}catch(e){return Y.none()}},Zm=e=>{const t=(e=>e.inline)(e)?Jm(dn.fromDom(e.getBody())):Y.none();e.bookmark=t.isSome()?t:e.bookmark},ef=e=>(e.bookmark?e.bookmark:Y.none()).bind((t=>((e,t)=>Y.from(t).filter(Km(e)).map(qm))(dn.fromDom(e.getBody()),t))).bind(Qm),tf={isEditorUIElement:e=>{const t=e.className.toString();return-1!==t.indexOf(\"tox-\")||-1!==t.indexOf(\"mce-\")}},nf={setEditorTimeout:(e,t,n)=>((e,t)=>(k(t)||(t=0),setTimeout(e,t)))((()=>{e.removed||t()}),n),setEditorInterval:(e,t,n)=>{const r=((e,t)=>(k(t)||(t=0),setInterval(e,t)))((()=>{e.removed?clearInterval(r):t()}),n);return r}},rf=e=>{const t=bs((()=>{Zm(e)}),0);e.on(\"init\",(()=>{e.inline&&((e,t)=>{const n=()=>{t.throttle()};ls.DOM.bind(document,\"mouseup\",n),e.on(\"remove\",(()=>{ls.DOM.unbind(document,\"mouseup\",n)}))})(e,t),((e,t)=>{((e,t)=>{e.on(\"mouseup touchend\",(e=>{t.throttle()}))})(e,t),e.on(\"keyup NodeChange AfterSetSelectionRange\",(t=>{(e=>\"nodechange\"===e.type&&e.selectionChange)(t)||Zm(e)}))})(e,t)})),e.on(\"remove\",(()=>{t.cancel()}))};let of;const sf=ls.DOM,af=(e,t)=>{const n=Xl(e),r=sf.getParent(t,(t=>(e=>vr(e)&&tf.isEditorUIElement(e))(t)||!!n&&e.dom.is(t,n)));return null!==r},lf=(e,t)=>{const n=t.editor;rf(n),n.on(\"focusin\",(()=>{const t=e.focusedEditor;t!==n&&(t&&t.dispatch(\"blur\",{focusedEditor:n}),e.setActive(n),e.focusedEditor=n,n.dispatch(\"focus\",{blurredEditor:t}),n.focus(!0))})),n.on(\"focusout\",(()=>{nf.setEditorTimeout(n,(()=>{const t=e.focusedEditor;af(n,(e=>{try{const t=On(dn.fromDom(e.getElement()));return Um(t).fold((()=>document.body),(e=>e.dom))}catch(e){return document.body}})(n))||t!==n||(n.dispatch(\"blur\",{focusedEditor:null}),e.focusedEditor=null)}))})),of||(of=t=>{const n=e.activeEditor;n&&$n(t).each((t=>{const r=t;r.ownerDocument===document&&(r===document.body||af(n,r)||e.focusedEditor!==n||(n.dispatch(\"blur\",{focusedEditor:null}),e.focusedEditor=null))}))},sf.bind(document,\"focusin\",of))},cf=(e,t)=>{e.focusedEditor===t.editor&&(e.focusedEditor=null),!e.activeEditor&&of&&(sf.unbind(document,\"focusin\",of),of=null)},uf=(e,t)=>(e=>e.collapsed?Y.from(Ks(e.startContainer,e.startOffset)).map(dn.fromDom):Y.none())(t).bind((t=>lo(t)?Y.some(t):gn(e,t)?Y.none():Y.some(e))),df=(e,t)=>{uf(dn.fromDom(e.getBody()),t).bind((e=>Ju(e.dom))).fold((()=>{e.selection.normalize()}),(t=>e.selection.setRng(t.toRange())))},hf=e=>{if(e.setActive)try{e.setActive()}catch(t){e.focus()}else e.focus()},mf=e=>{return zm(e)||(t=e,Um(On(t)).filter((e=>t.dom.contains(e.dom)))).isSome();var t},ff=e=>e.inline?(e=>{const t=e.getBody();return t&&mf(dn.fromDom(t))})(e):(e=>x(e.iframeElement)&&zm(dn.fromDom(e.iframeElement)))(e),pf=e=>ff(e)||(e=>{const t=On(dn.fromDom(e.getElement()));return Um(t).filter((t=>!(e=>{const t=e.classList;return void 0!==t&&(t.contains(\"tox-edit-area\")||t.contains(\"tox-edit-area__iframe\")||t.contains(\"mce-content-body\"))})(t.dom)&&af(e,t.dom))).isSome()})(e),gf=e=>e.editorManager.setActive(e),vf=(e,t)=>{e.removed||(t?gf(e):(e=>{const t=e.selection,n=e.getBody();let r=t.getRng();e.quirks.refreshContentEditable(),x(e.bookmark)&&!ff(e)&&ef(e).each((t=>{e.selection.setRng(t),r=t}));const o=((e,t)=>e.dom.getParent(t,(t=>\"true\"===e.dom.getContentEditable(t))))(e,t.getNode());if(o&&e.dom.isChildOf(o,n))return hf(o),df(e,r),void gf(e);e.inline||(Mt.browser.isOpera()||hf(n),e.getWin().focus()),(Mt.browser.isFirefox()||e.inline)&&(hf(n),df(e,r)),gf(e)})(e))},yf=(e,t,n,r,o)=>{const i=n?t.startContainer:t.endContainer,s=n?t.startOffset:t.endOffset;return Y.from(i).map(dn.fromDom).map((e=>r&&t.collapsed?e:Sn(e,o(e,s)).getOr(e))).bind((e=>Pt(e)?Y.some(e):_n(e).filter(Pt))).map((e=>e.dom)).getOr(e)},bf=(e,t,n=!1)=>yf(e,t,!0,n,((e,t)=>Math.min(Ln(e),t))),_f=(e,t,n=!1)=>yf(e,t,!1,n,((e,t)=>t>0?t-1:t)),wf=(e,t)=>{const n=e;for(;e&&Sr(e)&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n},xf=(e,t)=>U(t,(t=>{const n=e.dispatch(\"GetSelectionRange\",{range:t});return n.range!==t?n.range:t})),Cf=[\"img\",\"br\"],kf=e=>{const t=xo(e).filter((e=>0!==e.trim().length||e.indexOf(go)>-1)).isSome();return t||W(Cf,$t(e))},Df=e=>((e,t)=>{const n=e=>{for(let r=0;r<e.childNodes.length;r++){const o=dn.fromDom(e.childNodes[r]);if(t(o))return Y.some(o);const i=n(e.childNodes[r]);if(i.isSome())return i}return Y.none()};return n(e.dom)})(e,kf),Sf=(e,t)=>{const n=e=>{const r=Dn(e);for(let e=r.length-1;e>=0;e--){const o=r[e];if(t(o))return Y.some(o);const i=n(o);if(i.isSome())return i}return Y.none()};return n(e)},Af=\"[data-mce-autocompleter]\",Mf=(e,t)=>{if(Lf(dn.fromDom(e.getBody())).isNone()){const r=dn.fromHtml('<span data-mce-autocompleter=\"1\" data-mce-bogus=\"1\"></span>',e.getDoc());Xn(r,dn.fromDom(t.extractContents())),t.insertNode(r.dom),_n(r).each((e=>e.dom.normalize())),(n=r,Sf(n,kf)).map((t=>{e.selection.setCursorLocation(t.dom,(e=>\"img\"===$t(e)?1:xo(e).fold((()=>Dn(e).length),(e=>e.length)))(t))}))}var n},Lf=e=>Kr(e,Af),Ef={\"#text\":3,\"#comment\":8,\"#cdata\":4,\"#pi\":7,\"#doctype\":10,\"#document-fragment\":11},Tf=(e,t,n)=>{const r=n?\"lastChild\":\"firstChild\",o=n?\"prev\":\"next\";if(e[r])return e[r];if(e!==t){let n=e[o];if(n)return n;for(let r=e.parent;r&&r!==t;r=r.parent)if(n=r[o],n)return n}},Ff=e=>{var t;const n=null!==(t=e.value)&&void 0!==t?t:\"\";if(!ei(n))return!1;const r=e.parent;return!r||\"span\"===r.name&&!r.attr(\"style\")||!/^[ ]+$/.test(n)},Of=e=>{const t=\"a\"===e.name&&!e.attr(\"href\")&&e.attr(\"id\");return e.attr(\"name\")||e.attr(\"id\")&&!e.firstChild||e.attr(\"data-mce-bookmark\")||t};class Bf{constructor(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}static create(e,t){const n=new Bf(e,Ef[e]||1);return t&&pe(t,((e,t)=>{n.attr(t,e)})),n}replace(e){const t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t}attr(e,t){const n=this;if(!f(e))return x(e)&&pe(e,((e,t)=>{n.attr(t,e)})),n;const r=n.attributes;if(r){if(void 0!==t){if(null===t){if(e in r.map){delete r.map[e];let t=r.length;for(;t--;)if(r[t].name===e)return r.splice(t,1),n}return n}if(e in r.map){let n=r.length;for(;n--;)if(r[n].name===e){r[n].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}}clone(){const e=this,t=new Bf(e.name,e.type),n=e.attributes;if(n){const e=[];e.map={};for(let t=0,r=n.length;t<r;t++){const r=n[t];\"id\"!==r.name&&(e[e.length]={name:r.name,value:r.value},e.map[r.name]=r.value)}t.attributes=e}return t.value=e.value,t}wrap(e){const t=this;return t.parent&&(t.parent.insert(e,t),e.append(t)),t}unwrap(){const e=this;for(let t=e.firstChild;t;){const n=t.next;e.insert(t,e,!0),t=n}e.remove()}remove(){const e=this,t=e.parent,n=e.next,r=e.prev;return t&&(t.firstChild===e?(t.firstChild=n,n&&(n.prev=null)):r&&(r.next=n),t.lastChild===e?(t.lastChild=r,r&&(r.next=null)):n&&(n.prev=r),e.parent=e.next=e.prev=null),e}append(e){const t=this;e.parent&&e.remove();const n=t.lastChild;return n?(n.next=e,e.prev=n,t.lastChild=e):t.lastChild=t.firstChild=e,e.parent=t,e}insert(e,t,n){e.parent&&e.remove();const r=t.parent||this;return n?(t===r.firstChild?r.firstChild=e:t.prev&&(t.prev.next=e),e.prev=t.prev,e.next=t,t.prev=e):(t===r.lastChild?r.lastChild=e:t.next&&(t.next.prev=e),e.next=t.next,e.prev=t,t.next=e),e.parent=r,e}getAll(e){const t=this,n=[];for(let r=t.firstChild;r;r=Tf(r,t))r.name===e&&n.push(r);return n}children(){const e=[];for(let t=this.firstChild;t;t=t.next)e.push(t);return e}empty(){const e=this;if(e.firstChild){const t=[];for(let n=e.firstChild;n;n=Tf(n,e))t.push(n);let n=t.length;for(;n--;){const e=t[n];e.parent=e.firstChild=e.lastChild=e.next=e.prev=null}}return e.firstChild=e.lastChild=null,e}isEmpty(e,t={},n){var r;const o=this;let i=o.firstChild;if(Of(o))return!1;if(i)do{if(1===i.type){if(i.attr(\"data-mce-bogus\"))continue;if(e[i.name])return!1;if(Of(i))return!1}if(8===i.type)return!1;if(3===i.type&&!Ff(i))return!1;if(3===i.type&&i.parent&&t[i.parent.name]&&ei(null!==(r=i.value)&&void 0!==r?r:\"\"))return!1;if(n&&n(i))return!1}while(i=Tf(i,o));return!0}walk(e){return Tf(this,null,e)}}const Rf=(e,t,n=0)=>{const r=e.toLowerCase();if(-1!==r.indexOf(\"[if \",n)&&((e,t)=>/^\\s*\\[if [\\w\\W]+\\]>.*<!\\[endif\\](--!?)?>/.test(e.substr(t)))(r,n)){const e=r.indexOf(\"[endif]\",n);return r.indexOf(\">\",e)}if(t){const e=r.indexOf(\">\",n);return-1!==e?e:r.length}{const t=/--!?>/g;t.lastIndex=n;const o=t.exec(e);return o?o.index+o[0].length:r.length}},$f=(e,t,n)=>{const r=/<([!?\\/])?([A-Za-z0-9\\-_:.]+)/g,o=/(?:\\s(?:[^'\">]+(?:\"[^\"]*\"|'[^']*'))*[^\"'>]*(?:\"[^\">]*|'[^'>]*)?|\\s*|\\/)>/g,i=e.getVoidElements();let s=1,a=n;for(;0!==s;)for(r.lastIndex=a;;){const e=r.exec(t);if(null===e)return a;if(\"!\"===e[1]){a=je(e[2],\"--\")?Rf(t,!1,e.index+\"!--\".length):Rf(t,!0,e.index+1);break}{o.lastIndex=r.lastIndex;const n=o.exec(t);if(y(n)||n.index!==r.lastIndex)continue;\"/\"===e[1]?s-=1:ke(i,e[2])||(s+=1),a=r.lastIndex+n[0].length;break}}return a},Nf=(e,t)=>{const n=/<(\\w+) [^>]*data-mce-bogus=\"all\"[^>]*>/g,r=e.schema;let o=((e,t)=>{const n=new RegExp([\"\\\\s?(\"+e.join(\"|\")+')=\"[^\"]+\"'].join(\"|\"),\"gi\");return t.replace(n,\"\")})(e.getTempAttrs(),t);const i=r.getVoidElements();let s;for(;s=n.exec(o);){const e=n.lastIndex,t=s[0].length;let a;a=i[s[1]]?e:$f(r,o,e),o=o.substring(0,e-t)+o.substring(a),n.lastIndex=e-t}return Lo(o)},Yf=Nf,Pf=(e,t)=>{const n=e.getDoc(),r=On(dn.fromDom(e.getBody())),o=dn.fromTag(\"div\",n);Ut(o,\"data-mce-bogus\",\"all\"),Hn(o,{position:\"fixed\",left:\"-9999999px\",top:\"0\"}),nr(o,t.innerHTML);const i=bo(o,\"[data-mce-bogus]\");V(i,(e=>{\"all\"===qt(e,\"data-mce-bogus\")?Zn(e):oo(e)?(qn(e,dn.fromText(po)),Zn(e)):er(e)}));const s=(e=>En(e)?e:dn.fromDom(yn(e).dom.body))(r);Xn(s,o);const a=Lo(o.dom.innerText);return Zn(o),a},If=(e,t,n)=>{let r;r=\"raw\"===t.format?Ft.trim(Yf(e.serializer,n.innerHTML)):\"text\"===t.format?Pf(e,n):\"tree\"===t.format?e.serializer.serialize(n,t):((e,t)=>{const n=cl(e),r=new RegExp(`^(<${n}[^>]*>(&nbsp;|&#160;|\\\\s| |<br \\\\/>|)<\\\\/${n}>[\\r\\n]*|<br \\\\/>[\\r\\n]*)$`);return t.replace(r,\"\")})(e,e.serializer.serialize(n,t));return\"text\"!==t.format&&!uo(dn.fromDom(n))&&f(r)?Ft.trim(r):r},Hf=Ft.makeMap,jf=e=>{const t=[],n=(e=e||{}).indent,r=Hf(e.indent_before||\"\"),o=Hf(e.indent_after||\"\"),i=Mi.getEncodeFunc(e.entity_encoding||\"raw\",e.entities),s=\"xhtml\"!==e.element_format;return{start:(e,a,l)=>{if(n&&r[e]&&t.length>0){const e=t[t.length-1];e.length>0&&\"\\n\"!==e&&t.push(\"\\n\")}if(t.push(\"<\",e),a)for(let e=0,n=a.length;e<n;e++){const n=a[e];t.push(\" \",n.name,'=\"',i(n.value,!0),'\"')}if(t[t.length]=!l||s?\">\":\" />\",l&&n&&o[e]&&t.length>0){const e=t[t.length-1];e.length>0&&\"\\n\"!==e&&t.push(\"\\n\")}},end:e=>{let r;t.push(\"</\",e,\">\"),n&&o[e]&&t.length>0&&(r=t[t.length-1],r.length>0&&\"\\n\"!==r&&t.push(\"\\n\"))},text:(e,n)=>{e.length>0&&(t[t.length]=n?e:i(e))},cdata:e=>{t.push(\"<![CDATA[\",e,\"]]>\")},comment:e=>{t.push(\"\\x3c!--\",e,\"--\\x3e\")},pi:(e,r)=>{r?t.push(\"<?\",e,\" \",i(r),\"?>\"):t.push(\"<?\",e,\"?>\"),n&&t.push(\"\\n\")},doctype:e=>{t.push(\"<!DOCTYPE\",e,\">\",n?\"\\n\":\"\")},reset:()=>{t.length=0},getContent:()=>t.join(\"\").replace(/\\n$/,\"\")}},Wf=(e={},t=Hi())=>{const n=jf(e);e.validate=!(\"validate\"in e)||e.validate;return{serialize:r=>{const o=e.validate,i={3:e=>{var t;n.text(null!==(t=e.value)&&void 0!==t?t:\"\",e.raw)},8:e=>{var t;n.comment(null!==(t=e.value)&&void 0!==t?t:\"\")},7:e=>{n.pi(e.name,e.value)},10:e=>{var t;n.doctype(null!==(t=e.value)&&void 0!==t?t:\"\")},4:e=>{var t;n.cdata(null!==(t=e.value)&&void 0!==t?t:\"\")},11:e=>{let t=e;if(t=t.firstChild)do{s(t)}while(t=t.next)}};n.reset();const s=e=>{var r;const a=i[e.type];if(a)a(e);else{const i=e.name,a=i in t.getVoidElements();let l=e.attributes;if(o&&l&&l.length>1){const n=[];n.map={};const r=t.getElementRule(e.name);if(r){for(let e=0,t=r.attributesOrder.length;e<t;e++){const t=r.attributesOrder[e];if(t in l.map){const e=l.map[t];n.map[t]=e,n.push({name:t,value:e})}}for(let e=0,t=l.length;e<t;e++){const t=l[e].name;if(!(t in n.map)){const e=l.map[t];n.map[t]=e,n.push({name:t,value:e})}}l=n}}if(n.start(i,l,a),!a){let t=e.firstChild;if(t){\"pre\"!==i&&\"textarea\"!==i||3!==t.type||\"\\n\"!==(null===(r=t.value)||void 0===r?void 0:r[0])||n.text(\"\\n\",!0);do{s(t)}while(t=t.next)}n.end(i)}}};return 1!==r.type||e.inner?3===r.type?i[3](r):i[11](r):s(r),n.getContent()}}},zf=new Set;V([\"margin\",\"margin-left\",\"margin-right\",\"margin-top\",\"margin-bottom\",\"padding\",\"padding-left\",\"padding-right\",\"padding-top\",\"padding-bottom\",\"border\",\"border-width\",\"border-style\",\"border-color\",\"background\",\"background-attachment\",\"background-clip\",\"background-color\",\"background-image\",\"background-origin\",\"background-position\",\"background-repeat\",\"background-size\",\"float\",\"position\",\"left\",\"right\",\"top\",\"bottom\",\"z-index\",\"display\",\"transform\",\"width\",\"max-width\",\"min-width\",\"height\",\"max-height\",\"min-height\",\"overflow\",\"overflow-x\",\"overflow-y\",\"text-overflow\",\"vertical-align\",\"transition\",\"transition-delay\",\"transition-duration\",\"transition-property\",\"transition-timing-function\"],(e=>{zf.add(e)}));const Uf=[\"font\",\"text-decoration\",\"text-emphasis\"],Vf=(e,t)=>me(e.parseStyle(e.getAttrib(t,\"style\"))),qf=(e,t)=>re(Vf(e,t),(e=>!(e=>zf.has(e))(e))),Gf=(e,t,n)=>{const r=Vf(e,t),o=Vf(e,n),i=r=>{var o,i;const s=null!==(o=e.getStyle(t,r))&&void 0!==o?o:\"\",a=null!==(i=e.getStyle(n,r))&&void 0!==i?i:\"\";return Ge(s)&&Ge(a)&&s!==a};return z(r,(e=>{const t=t=>z(t,(t=>t===e));if(!t(o)&&t(Uf)){const e=K(o,(e=>z(Uf,(t=>je(e,t)))));return z(e,i)}return i(e)}))},Kf=(e,t,n)=>Y.from(n.container()).filter(Sr).exists((r=>{const o=e?0:-1;return t(r.data.charAt(n.offset()+o))})),Xf=F(Kf,!0,vd),Jf=F(Kf,!1,vd),Qf=e=>{const t=e.container();return Sr(t)&&(0===t.data.length||Mo(t.data)&&Eh.isBookmarkNode(t.parentNode))},Zf=(e,t)=>n=>vu(e?0:-1,n).filter(t).isSome(),ep=e=>Or(e)&&\"block\"===jn(dn.fromDom(e),\"display\"),tp=e=>Rr(e)&&!(e=>vr(e)&&\"all\"===e.getAttribute(\"data-mce-bogus\"))(e),np=Zf(!0,ep),rp=Zf(!1,ep),op=Zf(!0,Yr),ip=Zf(!1,Yr),sp=Zf(!0,Cr),ap=Zf(!1,Cr),lp=Zf(!0,tp),cp=Zf(!1,tp),up=(e,t,n)=>{return gn(t,e)?(r=((e,t)=>{const n=C(t)?t:$;let r=e.dom;const o=[];for(;null!==r.parentNode&&void 0!==r.parentNode;){const e=r.parentNode,t=dn.fromDom(e);if(o.push(t),!0===n(t))break;r=e}return o})(e,(e=>n(e)||pn(e,t))),r.slice(0,-1)):[];var r},dp=(e,t)=>up(e,t,$),hp=(e,t)=>[e].concat(dp(e,t)),mp=(e,t,n)=>qu(e,t,n,Qf),fp=(e,t)=>Z(hp(dn.fromDom(t.container()),e),no),pp=(e,t,n)=>mp(e,t.dom,n).forall((e=>fp(t,n).fold((()=>!gu(e,n,t.dom)),(r=>!gu(e,n,t.dom)&&gn(r,dn.fromDom(e.container())))))),gp=(e,t,n)=>fp(t,n).fold((()=>mp(e,t.dom,n).forall((e=>!gu(e,n,t.dom)))),(t=>mp(e,t.dom,n).isNone())),vp=F(gp,!1),yp=F(gp,!0),bp=F(pp,!1),_p=F(pp,!0),wp=e=>Su(e).exists(oo),xp=(e,t,n)=>{const r=K(hp(dn.fromDom(n.container()),t),no),o=ce(r).getOr(t);return Uu(e,o.dom,n).filter(wp)},Cp=(e,t)=>Su(t).exists(oo)||xp(!0,e,t).isSome(),kp=(e,t)=>(e=>Y.from(e.getNode(!0)).map(dn.fromDom))(t).exists(oo)||xp(!1,e,t).isSome(),Dp=F(xp,!1),Sp=F(xp,!0),Ap=e=>ga.isTextPosition(e)&&!e.isAtStart()&&!e.isAtEnd(),Mp=(e,t)=>{const n=K(hp(dn.fromDom(t.container()),e),no);return ce(n).getOr(e)},Lp=(e,t)=>Ap(t)?Jf(t):Jf(t)||Xu(Mp(e,t).dom,t).exists(Jf),Ep=(e,t)=>Ap(t)?Xf(t):Xf(t)||Ku(Mp(e,t).dom,t).exists(Xf),Tp=e=>Su(e).bind((e=>Vr(e,Pt))).exists((e=>(e=>W([\"pre\",\"pre-wrap\"],e))(jn(e,\"white-space\")))),Fp=(e,t)=>((e,t)=>Xu(e.dom,t).isNone())(e,t)||((e,t)=>Ku(e.dom,t).isNone())(e,t)||vp(e,t)||yp(e,t)||kp(e,t)||Cp(e,t),Op=(e,t)=>n=>{return r=new Zr(n,e)[t](),x(r)&&Rr(r)&&iu(r);var r},Bp=(e,t)=>!Tp(t)&&(vp(e,t)||bp(e,t)||kp(e,t)||Lp(e,t)||((e,t)=>{const n=Xu(e.dom,t).getOr(t),r=Op(e.dom,\"prev\");return t.isAtStart()&&(r(t.container())||r(n.container()))})(e,t)),Rp=(e,t)=>!Tp(t)&&(yp(e,t)||_p(e,t)||Cp(e,t)||Ep(e,t)||((e,t)=>{const n=Ku(e.dom,t).getOr(t),r=Op(e.dom,\"next\");return t.isAtEnd()&&(r(t.container())||r(n.container()))})(e,t)),$p=(e,t)=>Bp(e,t)||Rp(e,(e=>{const t=e.container(),n=e.offset();return Sr(t)&&n<t.data.length?ga(t,n+1):e})(t)),Np=(e,t)=>pd(e.charAt(t)),Yp=(e,t)=>vd(e.charAt(t)),Pp=(e,t,n)=>{const r=t.data,o=ga(t,0);return n||!Np(r,0)||$p(e,o)?!!(n&&Yp(r,0)&&Bp(e,o))&&(t.data=go+r.slice(1),!0):(t.data=\" \"+r.slice(1),!0)},Ip=e=>{const t=e.data,n=(e=>{const t=e.split(\"\");return U(t,((e,n)=>pd(e)&&n>0&&n<t.length-1&&yd(t[n-1])&&yd(t[n+1])?\" \":e)).join(\"\")})(t);return n!==t&&(e.data=n,!0)},Hp=(e,t,n)=>{const r=t.data,o=ga(t,r.length-1);return n||!Np(r,r.length-1)||$p(e,o)?!!(n&&Yp(r,r.length-1)&&Rp(e,o))&&(t.data=r.slice(0,-1)+go,!0):(t.data=r.slice(0,-1)+\" \",!0)},jp=(e,t)=>{const n=t.container();if(!Sr(n))return Y.none();if((e=>{const t=e.container();return Sr(t)&&He(t.data,go)})(t)){const r=Pp(e,n,!1)||Ip(n)||Hp(e,n,!1);return Rt(r,t)}if($p(e,t)){const r=Pp(e,n,!0)||Hp(e,n,!0);return Rt(r,t)}return Y.none()},Wp=(e,t,n)=>{if(0===n)return;const r=dn.fromDom(e),o=Ur(r,no).getOr(r),i=e.data.slice(t,t+n),s=t+n>=e.data.length&&Rp(o,ga(e,e.data.length)),a=0===t&&Bp(o,ga(e,0));e.replaceData(t,n,ni(i,4,a,s))},zp=(e,t)=>{const n=e.data.slice(t),r=n.length-Ve(n).length;Wp(e,t,r)},Up=(e,t)=>{const n=e.data.slice(0,t),r=n.length-qe(n).length;Wp(e,t-r,r)},Vp=(e,t,n,r=!0)=>{const o=qe(e.data).length,i=r?e:t,s=r?t:e;return r?i.appendData(s.data):i.insertData(0,s.data),Zn(dn.fromDom(s)),n&&zp(i,o),i},qp=(e,t)=>((e,t)=>{const n=e.container(),r=e.offset();return!ga.isTextPosition(e)&&n===t.parentNode&&r>ga.before(t).offset()})(t,e)?ga(t.container(),t.offset()-1):t,Gp=e=>{return Xo(e.previousSibling)?Y.some((t=e.previousSibling,Sr(t)?ga(t,t.data.length):ga.after(t))):e.previousSibling?Qu(e.previousSibling):Y.none();var t},Kp=e=>{return Xo(e.nextSibling)?Y.some((t=e.nextSibling,Sr(t)?ga(t,0):ga.before(t))):e.nextSibling?Ju(e.nextSibling):Y.none();var t},Xp=(e,t)=>Gp(t).orThunk((()=>Kp(t))).orThunk((()=>((e,t)=>Y.from(t.previousSibling?t.previousSibling:t.parentNode).bind((t=>Xu(e,ga.before(t)))).orThunk((()=>Ku(e,ga.after(t)))))(e,t))),Jp=(e,t)=>Kp(t).orThunk((()=>Gp(t))).orThunk((()=>((e,t)=>Ku(e,ga.after(t)).orThunk((()=>Xu(e,ga.before(t)))))(e,t))),Qp=(e,t,n)=>((e,t,n)=>e?Jp(t,n):Xp(t,n))(e,t,n).map(F(qp,n)),Zp=(e,t,n)=>{n.fold((()=>{e.focus()}),(n=>{e.selection.setRng(n.toRange(),t)}))},eg=(e,t)=>t&&ke(e.schema.getBlockElements(),$t(t)),tg=e=>{if(ui(e)){const t=dn.fromHtml('<br data-mce-bogus=\"1\">');return Qn(e),Xn(e,t),Y.some(ga.before(t.dom))}return Y.none()},ng=(e,t,n)=>{const r=wn(e).filter(It),o=xn(e).filter(It);return Zn(e),(i=r,s=o,a=t,l=(e,t,r)=>{const o=e.dom,i=t.dom,s=o.data.length;return Vp(o,i,n),r.container()===i?ga(o,s):r},i.isSome()&&s.isSome()&&a.isSome()?Y.some(l(i.getOrDie(),s.getOrDie(),a.getOrDie())):Y.none()).orThunk((()=>(n&&(r.each((e=>Up(e.dom,e.dom.length))),o.each((e=>zp(e.dom,0)))),t)));var i,s,a,l},rg=(e,t,n,r=!0)=>{const o=Qp(t,e.getBody(),n.dom),i=Ur(n,F(eg,e),(s=e.getBody(),e=>e.dom===s));var s;const a=ng(n,o,((e,t)=>ke(e.schema.getTextInlineElements(),$t(t)))(e,n));e.dom.isEmpty(e.getBody())?(e.setContent(\"\"),e.selection.setCursorLocation()):i.bind(tg).fold((()=>{r&&Zp(e,t,a)}),(n=>{r&&Zp(e,t,Y.some(n))}))},og=/[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/,ig=(e,t)=>mn(dn.fromDom(t),Rl(e)),sg=e=>{var t;return\"rtl\"===ls.DOM.getStyle(e,\"direction\",!0)||(e=>og.test(e))(null!==(t=e.textContent)&&void 0!==t?t:\"\")},ag=(e,t,n)=>{const r=((e,t,n)=>K(ls.DOM.getParents(n.container(),\"*\",t),e))(e,t,n);return Y.from(r[r.length-1])},lg=(e,t)=>{const n=t.container(),r=t.offset();return e?Oo(n)?Sr(n.nextSibling)?ga(n.nextSibling,0):ga.after(n):$o(t)?ga(n,r+1):t:Oo(n)?Sr(n.previousSibling)?ga(n.previousSibling,n.previousSibling.data.length):ga.before(n):No(t)?ga(n,r-1):t},cg=F(lg,!0),ug=F(lg,!1),dg=(e,t)=>{const n=e=>e.stopImmediatePropagation();e.on(\"beforeinput input\",n,!0),e.getDoc().execCommand(t),e.off(\"beforeinput input\",n)},hg=e=>dg(e,\"Delete\"),mg=e=>io(e)||ao(e),fg=(e,t)=>gn(e,t)?Vr(t,mg,(e=>t=>Ot(_n(t),e,pn))(e)):Y.none(),pg=(e,t=!0)=>{e.dom.isEmpty(e.getBody())&&e.setContent(\"\",{no_selection:!t})},gg=e=>{var t;return(8===Nt(t=e)||\"#comment\"===$t(t)?wn(e):Mn(e)).bind(gg).orThunk((()=>Y.some(e)))},vg=(e,t,n,r=!0)=>{var o;t.deleteContents();const i=gg(n).getOr(n),s=dn.fromDom(null!==(o=e.dom.getParent(i.dom,e.dom.isBlock))&&void 0!==o?o:n.dom);if(s.dom===e.getBody()?pg(e,r):ui(s)&&(Do(s),r&&e.selection.setCursorLocation(s.dom,0)),!pn(n,s)){const e=Ot(_n(s),n)?[]:_n(a=s).map(Dn).map((e=>K(e,(e=>!pn(a,e))))).getOr([]);V(e.concat(Dn(n)),(e=>{pn(e,s)||gn(e,s)||!ui(e)||Zn(e)}))}var a},yg=e=>bo(e,\"td,th\"),bg=(e,t)=>({start:e,end:t}),_g=ja([{singleCellTable:[\"rng\",\"cell\"]},{fullTable:[\"table\"]},{partialTable:[\"cells\",\"outsideDetails\"]},{multiTable:[\"startTableCells\",\"endTableCells\",\"betweenRng\"]}]),wg=(e,t)=>Xr(dn.fromDom(e),\"td,th\",t),xg=e=>!pn(e.start,e.end),Cg=(e,t)=>Ed(e.start,t).bind((n=>Ed(e.end,t).bind((e=>Rt(pn(n,e),n))))),kg=e=>t=>Cg(t,e).map((e=>((e,t,n)=>({rng:e,table:t,cells:n}))(t,e,yg(e)))),Dg=(e,t,n,r)=>{if(n.collapsed||!e.forall(xg))return Y.none();if(t.isSameTable){const t=e.bind(kg(r));return Y.some({start:t,end:t})}{const e=wg(n.startContainer,r),t=wg(n.endContainer,r),o=e.bind((e=>t=>Ed(t,e).bind((e=>ue(yg(e)).map((e=>bg(t,e))))))(r)).bind(kg(r)),i=t.bind((e=>t=>Ed(t,e).bind((e=>ce(yg(e)).map((e=>bg(e,t))))))(r)).bind(kg(r));return Y.some({start:o,end:i})}},Sg=(e,t)=>ee(e,(e=>pn(e,t))),Ag=e=>Bt(Sg(e.cells,e.rng.start),Sg(e.cells,e.rng.end),((t,n)=>e.cells.slice(t,n+1))),Mg=(e,t,n)=>e.exists((e=>((e,t)=>!xg(e)&&Cg(e,t).exists((e=>{const t=e.dom.rows;return 1===t.length&&1===t[0].cells.length})))(e,n)&&Od(e.start,t))),Lg=(e,t)=>{const{startTable:n,endTable:r}=t,o=e.cloneRange();return n.each((e=>o.setStartAfter(e.dom))),r.each((e=>o.setEndBefore(e.dom))),o},Eg=(e,t)=>{const n=(e=>t=>pn(e,t))(e),r=((e,t)=>{const n=wg(e.startContainer,t),r=wg(e.endContainer,t);return Bt(n,r,bg)})(t,n),o=((e,t)=>{const n=e=>Ed(dn.fromDom(e),t),r=n(e.startContainer),o=n(e.endContainer),i=r.isSome(),s=o.isSome(),a=Bt(r,o,pn).getOr(!1);return{startTable:r,endTable:o,isStartInTable:i,isEndInTable:s,isSameTable:a,isMultiTable:!a&&i&&s}})(t,n);return Mg(r,t,n)?r.map((e=>_g.singleCellTable(t,e.start))):o.isMultiTable?((e,t,n,r)=>Dg(e,t,n,r).bind((({start:e,end:r})=>{const o=e.bind(Ag).getOr([]),i=r.bind(Ag).getOr([]);if(o.length>0&&i.length>0){const e=Lg(n,t);return Y.some(_g.multiTable(o,i,e))}return Y.none()})))(r,o,t,n):((e,t,n,r)=>Dg(e,t,n,r).bind((({start:e,end:t})=>e.or(t))).bind((e=>{const{isSameTable:r}=t,o=Ag(e).getOr([]);if(r&&e.cells.length===o.length)return Y.some(_g.fullTable(e.table));if(o.length>0){if(r)return Y.some(_g.partialTable(o,Y.none()));{const e=Lg(n,t);return Y.some(_g.partialTable(o,Y.some({...t,rng:e})))}}return Y.none()})))(r,o,t,n)},Tg=e=>V(e,(e=>{Xt(e,\"contenteditable\"),Do(e)})),Fg=(e,t,n,r)=>{const o=n.cloneRange();r?(o.setStart(n.startContainer,n.startOffset),o.setEndAfter(t.dom.lastChild)):(o.setStartBefore(t.dom.firstChild),o.setEnd(n.endContainer,n.endOffset)),$g(e,o,t,!1).each((e=>e()))},Og=e=>{const t=Ld(e),n=dn.fromDom(e.selection.getNode());$r(n.dom)&&ui(n)?e.selection.setCursorLocation(n.dom,0):e.selection.collapse(!0),t.length>1&&z(t,(e=>pn(e,n)))&&Ut(n,\"data-mce-selected\",\"1\")},Bg=(e,t,n)=>Y.some((()=>{const r=e.selection.getRng(),o=n.bind((({rng:n,isStartInTable:o})=>{const i=((e,t)=>Y.from(e.dom.getParent(t,e.dom.isBlock)).map(dn.fromDom))(e,o?n.endContainer:n.startContainer);n.deleteContents(),((e,t,n)=>{n.each((n=>{t?Zn(n):(Do(n),e.selection.setCursorLocation(n.dom,0))}))})(e,o,i.filter(ui));const s=o?t[0]:t[t.length-1];return Fg(e,s,r,o),ui(s)?Y.none():Y.some(o?t.slice(1):t.slice(0,-1))})).getOr(t);Tg(o),Og(e)})),Rg=(e,t,n,r)=>Y.some((()=>{const o=e.selection.getRng(),i=t[0],s=n[n.length-1];Fg(e,i,o,!0),Fg(e,s,o,!1);const a=ui(i)?t:t.slice(1),l=ui(s)?n:n.slice(0,-1);Tg(a.concat(l)),r.deleteContents(),Og(e)})),$g=(e,t,n,r=!0)=>Y.some((()=>{vg(e,t,n,r)})),Ng=(e,t)=>Y.some((()=>rg(e,!1,t))),Yg=(e,t,n,r)=>Ig(t,r).fold((()=>((e,t,n)=>Eg(t,n).bind((t=>t.fold(F($g,e),F(Ng,e),F(Bg,e),F(Rg,e)))))(e,t,n)),(t=>((e,t)=>Hg(e,t))(e,t))),Pg=(e,t)=>Z(hp(t,e),co),Ig=(e,t)=>Z(hp(t,e),Wt(\"caption\")),Hg=(e,t)=>Y.some((()=>{Do(t),e.selection.setCursorLocation(t.dom,0)})),jg=(e,t,n,r,o)=>Vu(n,e.getBody(),o).fold((()=>Y.some(S)),(i=>((e,t,n,r)=>Ju(e.dom).bind((o=>Qu(e.dom).map((e=>t?n.isEqual(o)&&r.isEqual(e):n.isEqual(e)&&r.isEqual(o))))).getOr(!0))(r,n,o,i)?((e,t)=>Hg(e,t))(e,r):((e,t,n)=>Ig(e,dn.fromDom(n.getNode())).fold((()=>Y.some(S)),(e=>Rt(!pn(e,t),S))))(t,r,i))),Wg=(e,t,n,r)=>{const o=ga.fromRangeStart(e.selection.getRng());return Pg(n,r).bind((r=>ui(r)?Hg(e,r):((e,t,n,r,o)=>Vu(n,e.getBody(),o).bind((e=>Pg(t,dn.fromDom(e.getNode())).bind((e=>pn(e,r)?Y.none():Y.some(S))))))(e,n,t,r,o)))},zg=(e,t)=>e?sp(t):ap(t),Ug=(e,t,n)=>{const r=dn.fromDom(e.getBody());return Ig(r,n).fold((()=>Wg(e,t,r,n).orThunk((()=>Rt(((e,t)=>{const n=ga.fromRangeStart(e.selection.getRng());return zg(t,n)||Uu(t,e.getBody(),n).exists((e=>zg(t,e)))})(e,t),S)))),(n=>((e,t,n,r)=>{const o=ga.fromRangeStart(e.selection.getRng());return ui(r)?Hg(e,r):jg(e,n,t,r,o)})(e,t,r,n)))},Vg=(e,t)=>{const n=dn.fromDom(e.selection.getStart(!0)),r=Ld(e);return e.selection.isCollapsed()&&0===r.length?Ug(e,t,n):((e,t,n)=>{const r=dn.fromDom(e.getBody()),o=e.selection.getRng();return 0!==n.length?Bg(e,n,Y.none()):Yg(e,r,o,t)})(e,n,r)},qg=(e,t)=>{let n=t;for(;n&&n!==e;){if(Br(n)||Rr(n))return n;n=n.parentNode}return null},Gg=[\"data-ephox-\",\"data-mce-\",\"data-alloy-\",\"data-snooker-\",\"_\"],Kg=Ft.each,Xg=e=>{const t=e.dom,n=new Set(e.serializer.getTempAttrs()),r=e=>z(Gg,(t=>je(e,t)))||n.has(e);return{compare:(e,n)=>{if(e.nodeName!==n.nodeName||e.nodeType!==n.nodeType)return!1;const o=e=>{const n={};return Kg(t.getAttribs(e),(o=>{const i=o.nodeName.toLowerCase();\"style\"===i||r(i)||(n[i]=t.getAttrib(e,i))})),n},i=(e,t)=>{for(const n in e)if(ke(e,n)){const r=t[n];if(_(r))return!1;if(e[n]!==r)return!1;delete t[n]}for(const e in t)if(ke(t,e))return!1;return!0};if(vr(e)&&vr(n)){if(!i(o(e),o(n)))return!1;if(!i(t.parseStyle(t.getAttrib(e,\"style\")),t.parseStyle(t.getAttrib(n,\"style\"))))return!1}return!fd(e)&&!fd(n)},isAttributeInternal:r}},Jg=(e,t,n,r)=>{const o=n.name;for(let t=0,i=e.length;t<i;t++){const i=e[t];if(i.name===o){const e=r.nodes[o];e?e.nodes.push(n):r.nodes[o]={filter:i,nodes:[n]}}}if(n.attributes)for(let e=0,o=t.length;e<o;e++){const o=t[e],i=o.name;if(i in n.attributes.map){const e=r.attributes[i];e?e.nodes.push(n):r.attributes[i]={filter:o,nodes:[n]}}}},Qg=(e,t)=>{const n=(e,n)=>{pe(e,(e=>{const r=de(e.nodes);V(e.filter.callbacks,(o=>{for(let t=r.length-1;t>=0;t--){const o=r[t];(n?void 0!==o.attr(e.filter.name):o.name===e.filter.name)&&!w(o.parent)||r.splice(t,1)}r.length>0&&o(r,e.filter.name,t)}))}))};n(e.nodes,!1),n(e.attributes,!0)},Zg=(e,t,n,r={})=>{const o=((e,t,n)=>{const r={nodes:{},attributes:{}};return n.firstChild&&((e,t)=>{let n=e;for(;n=n.walk();)t(n)})(n,(n=>{Jg(e,t,n,r)})),r})(e,t,n);Qg(o,r)},ev=(e,t,n,r)=>{if(t.insert&&n[r.name]){const e=new Bf(\"br\",1);e.attr(\"data-mce-bogus\",\"1\"),r.empty().append(e)}else r.empty().append(new Bf(\"#text\",3)).value=go},tv=(e,t)=>{const n=null==e?void 0:e.firstChild;return x(n)&&n===e.lastChild&&n.name===t},nv=(e,t,n,r)=>r.isEmpty(t,n,(t=>((e,t)=>{const n=e.getElementRule(t.name);return!0===(null==n?void 0:n.paddEmpty)})(e,t))),rv=(e,t,n=e.parent)=>{if(t.getSpecialElements()[e.name])e.empty().remove();else{const r=e.children();for(const e of r)n&&!t.isValidChild(n.name,e.name)&&rv(e,t,n);e.unwrap()}},ov=(e,t,n=S)=>{const r=t.getTextBlockElements(),o=t.getNonEmptyElements(),i=t.getWhitespaceElements(),s=Ft.makeMap(\"tr,td,th,tbody,thead,tfoot,table\"),a=new Set;for(let l=0;l<e.length;l++){const c=e[l];let u,d,h;if(!c.parent||a.has(c))continue;if(r[c.name]&&\"li\"===c.parent.name){let e=c.next;for(;e&&r[e.name];)e.name=\"li\",a.add(e),c.parent.insert(e,c.parent),e=e.next;c.unwrap();continue}const m=[c];for(u=c.parent;u&&!t.isValidChild(u.name,c.name)&&!s[u.name];u=u.parent)m.push(u);if(u&&m.length>1)if(t.isValidChild(u.name,c.name)){m.reverse(),d=m[0].clone(),n(d);let e=d;for(let r=0;r<m.length-1;r++){t.isValidChild(e.name,m[r].name)?(h=m[r].clone(),n(h),e.append(h)):h=e;for(let e=m[r].firstChild;e&&e!==m[r+1];){const t=e.next;h.append(e),e=t}e=h}nv(t,o,i,d)?u.insert(c,m[0],!0):(u.insert(d,m[0],!0),u.insert(c,d)),u=m[0],(nv(t,o,i,u)||tv(u,\"br\"))&&u.empty().remove()}else rv(c,t);else if(c.parent){if(\"li\"===c.name){let e=c.prev;if(e&&(\"ul\"===e.name||\"ol\"===e.name)){e.append(c);continue}if(e=c.next,e&&(\"ul\"===e.name||\"ol\"===e.name)&&e.firstChild){e.insert(c,e.firstChild,!0);continue}const t=new Bf(\"ul\",1);n(t),c.wrap(t);continue}if(t.isValidChild(c.parent.name,\"div\")&&t.isValidChild(\"div\",c.name)){const e=new Bf(\"div\",1);n(e),c.wrap(e)}else rv(c,t)}}},iv=e=>{const t=ga.fromRangeStart(e),n=ga.fromRangeEnd(e),r=e.commonAncestorContainer;return Uu(!1,r,n).map((o=>!gu(t,n,r)&&gu(t,o,r)?((e,t,n,r)=>{const o=document.createRange();return o.setStart(e,t),o.setEnd(n,r),o})(t.container(),t.offset(),o.container(),o.offset()):e)).getOr(e)},sv=e=>e.collapsed?e:iv(e),av=(e,t)=>e.getBlockElements()[t.name]&&(e=>x(e.firstChild)&&e.firstChild===e.lastChild)(t)&&(e=>\"br\"===e.name||e.value===go)(t.firstChild),lv=(e,t)=>{let n=t.firstChild,r=t.lastChild;return n&&\"meta\"===n.name&&(n=n.next),r&&\"mce_marker\"===r.attr(\"id\")&&(r=r.prev),((e,t)=>{const n=e.getNonEmptyElements();return x(t)&&(t.isEmpty(n)||av(e,t))})(e,r)&&(r=null==r?void 0:r.prev),!(!n||n!==r)&&(\"ul\"===n.name||\"ol\"===n.name)},cv=e=>x(null==e?void 0:e.firstChild)&&e.firstChild===e.lastChild&&(e=>e.data===go||Fr(e))(e.firstChild),uv=e=>{return e.length>0&&(!(t=e[e.length-1]).firstChild||cv(t))?e.slice(0,-1):e;var t},dv=(e,t)=>{const n=e.getParent(t,e.isBlock);return n&&\"LI\"===n.nodeName?n:null},hv=(e,t)=>{const n=ga.after(e),r=Iu(t).prev(n);return r?r.toRange():null},mv=(e,t,n)=>{const r=e.parentNode;return r&&Ft.each(t,(t=>{r.insertBefore(t,e)})),((e,t)=>{const n=ga.before(e),r=Iu(t).next(n);return r?r.toRange():null})(e,n)},fv=(e,t,n,r)=>{const o=((e,t,n)=>{const r=t.serialize(n);return(e=>{var t,n;const r=e.firstChild,o=e.lastChild;return r&&\"META\"===r.nodeName&&(null===(t=r.parentNode)||void 0===t||t.removeChild(r)),o&&\"mce_marker\"===o.id&&(null===(n=o.parentNode)||void 0===n||n.removeChild(o)),e})(e.createFragment(r))})(t,e,r),i=dv(t,n.startContainer),s=uv((a=o.firstChild,K(null!==(l=null==a?void 0:a.childNodes)&&void 0!==l?l:[],(e=>\"LI\"===e.nodeName))));var a,l;const c=t.getRoot(),u=e=>{const r=ga.fromRangeStart(n),o=Iu(t.getRoot()),s=1===e?o.prev(r):o.next(r),a=null==s?void 0:s.getNode();return!a||dv(t,a)!==i};return i?u(1)?mv(i,s,c):u(2)?((e,t,n,r)=>(r.insertAfter(t.reverse(),e),hv(t[0],n)))(i,s,c,t):((e,t,n,r)=>{const o=((e,t)=>{const n=t.cloneRange(),r=t.cloneRange();return n.setStartBefore(e),r.setEndAfter(e),[n.cloneContents(),r.cloneContents()]})(e,r),i=e.parentNode;return i&&(i.insertBefore(o[0],e),Ft.each(t,(t=>{i.insertBefore(t,e)})),i.insertBefore(o[1],e),i.removeChild(e)),hv(t[t.length-1],n)})(i,s,c,n):null},pv=[\"pre\"],gv=$r,vv=(e,t)=>{var n,r,o;let i;const s=e.dom,a=e.selection;if(!t)return;a.scrollIntoView(t);const l=qg(e.getBody(),t);if(l&&\"false\"===s.getContentEditable(l))return s.remove(t),void a.select(l);let c=s.createRng();const u=t.previousSibling;if(Sr(u)){c.setStart(u,null!==(r=null===(n=u.nodeValue)||void 0===n?void 0:n.length)&&void 0!==r?r:0);const e=t.nextSibling;Sr(e)&&(u.appendData(e.data),null===(o=e.parentNode)||void 0===o||o.removeChild(e))}else c.setStartBefore(t),c.setEndBefore(t);const d=s.getParent(t,s.isBlock);s.remove(t),d&&s.isEmpty(d)&&(Qn(dn.fromDom(d)),c.setStart(d,0),c.setEnd(d,0),gv(d)||(e=>!!e.getAttribute(\"data-mce-fragment\"))(d)||!(i=(t=>{let n=ga.fromRangeStart(t);return n=Iu(e.getBody()).next(n),null==n?void 0:n.toRange()})(c))?s.add(d,s.create(\"br\",{\"data-mce-bogus\":\"1\"})):(c=i,s.remove(d))),a.setRng(c)},yv=e=>{const t=e.dom,n=sv(e.selection.getRng());e.selection.setRng(n);const r=t.getParent(n.startContainer,gv);((e,t,n)=>{if(x(n))return n===e.getParent(t.endContainer,gv)&&Od(dn.fromDom(n),t);return!1})(t,n,r)?$g(e,n,dn.fromDom(r)):e.getDoc().execCommand(\"Delete\",!1)},bv=(e,t,n)=>{var r,o,i;const s=e.selection,a=e.dom,l=e.parser,c=n.merge,u=Wf({validate:!0},e.schema),d='<span id=\"mce_marker\" data-mce-type=\"bookmark\">&#xFEFF;</span>';-1===t.indexOf(\"{$caret}\")&&(t+=\"{$caret}\"),t=t.replace(/\\{\\$caret\\}/,d);let h=s.getRng();const m=h.startContainer,f=e.getBody();m===f&&s.isCollapsed()&&a.isBlock(f.firstChild)&&((e,t)=>x(t)&&!e.schema.getVoidElements()[t.nodeName])(e,f.firstChild)&&a.isEmpty(f.firstChild)&&(h=a.createRng(),h.setStart(f.firstChild,0),h.setEnd(f.firstChild,0),s.setRng(h)),s.isCollapsed()||yv(e);const p=s.getNode(),g={context:p.nodeName.toLowerCase(),data:n.data,insert:!0},v=l.parse(t,g);if(!0===n.paste&&lv(e.schema,v)&&((e,t)=>!!dv(e,t))(a,p))return h=fv(u,a,s.getRng(),v),h&&s.setRng(h),t;!0===n.paste&&((e,t,n,r)=>{var o;const i=t.firstChild,s=t.lastChild,a=i===(\"bookmark\"===s.attr(\"data-mce-type\")?s.prev:s),l=W(pv,i.name);if(a&&l){const t=\"false\"!==i.attr(\"contenteditable\"),s=(null===(o=e.getParent(n,e.isBlock))||void 0===o?void 0:o.nodeName.toLowerCase())===i.name,a=Y.from(qg(r,n)).forall(Br);return t&&s&&a}return!1})(a,v,p,e.getBody())&&(null===(r=v.firstChild)||void 0===r||r.unwrap()),(e=>{let t=e;for(;t=t.walk();)1===t.type&&t.attr(\"data-mce-fragment\",\"1\")})(v);let y=v.lastChild;if(y&&\"mce_marker\"===y.attr(\"id\")){const t=y;for(y=y.prev;y;y=y.walk(!0))if(3===y.type||!a.isBlock(y.name)){y.parent&&e.schema.isValidChild(y.parent.name,\"span\")&&y.parent.insert(t,y,\"br\"===y.name);break}}if(e._selectionOverrides.showBlockCaretContainer(p),g.invalid){e.selection.setContent(d);let n,r=s.getNode();const c=e.getBody();for(Er(r)?r=n=c:n=r;n&&n!==c;)r=n,n=n.parentNode;t=r===c?c.innerHTML:a.getOuterHTML(r);const h=l.parse(t);for(let e=h;e;e=e.walk())if(\"mce_marker\"===e.attr(\"id\")){e.replace(v);break}const m=v.children(),f=null!==(i=null===(o=v.parent)||void 0===o?void 0:o.name)&&void 0!==i?i:h.name;v.unwrap();const p=K(m,(t=>!e.schema.isValidChild(f,t.name)));ov(p,e.schema),Zg(l.getNodeFilters(),l.getAttributeFilters(),h),t=u.serialize(h),r===c?a.setHTML(c,t):a.setOuterHTML(r,t)}else t=u.serialize(v),((e,t,n)=>{var r;if(\"all\"===n.getAttribute(\"data-mce-bogus\"))null===(r=n.parentNode)||void 0===r||r.insertBefore(e.dom.createFragment(t),n);else{const r=n.firstChild,o=n.lastChild;!r||r===o&&\"BR\"===r.nodeName?e.dom.setHTML(n,t):e.selection.setContent(t,{no_events:!0})}})(e,t,p);var b;return((e,t)=>{const n=e.schema.getTextInlineElements(),r=e.dom;if(t){const t=e.getBody(),o=Xg(e);Ft.each(r.select(\"*[data-mce-fragment]\"),(e=>{if(x(n[e.nodeName.toLowerCase()])&&qf(r,e))for(let n=e.parentElement;x(n)&&n!==t&&!Gf(r,e,n);n=n.parentElement)if(o.compare(n,e)){r.remove(e,!0);break}}))}})(e,c),vv(e,a.get(\"mce_marker\")),b=e.getBody(),Ft.each(b.getElementsByTagName(\"*\"),(e=>{e.removeAttribute(\"data-mce-fragment\")})),((e,t)=>{Y.from(e.getParent(t,\"td,th\")).map(dn.fromDom).each(So)})(a,s.getStart()),t},_v=e=>e instanceof Bf,wv=(e,t,n)=>{e.dom.setHTML(e.getBody(),t),!0!==n&&(e=>{ff(e)&&Ju(e.getBody()).each((t=>{const n=t.getNode(),r=Cr(n)?Ju(n).getOr(t):t;e.selection.setRng(r.toRange())}))})(e)},xv=(e,t,n)=>Y.from(e.getBody()).map((r=>_v(t)?((e,t,n,r)=>{Zg(e.parser.getNodeFilters(),e.parser.getAttributeFilters(),n);const o=Wf({validate:!1},e.schema).serialize(n),i=uo(dn.fromDom(t))?o:Ft.trim(o);return wv(e,i,r.no_selection),{content:n,html:i}})(e,r,t,n):((e,t,n,r)=>{if(0===n.length||/^\\s+$/.test(n)){const o='<br data-mce-bogus=\"1\">';\"TABLE\"===t.nodeName?n=\"<tr><td>\"+o+\"</td></tr>\":/^(UL|OL)$/.test(t.nodeName)&&(n=\"<li>\"+o+\"</li>\");const i=cl(e);return e.schema.isValidChild(t.nodeName.toLowerCase(),i.toLowerCase())?(n=o,n=e.dom.createHTML(i,ul(e),n)):n||(n=o),wv(e,n,r.no_selection),{content:n,html:n}}{\"raw\"!==r.format&&(n=Wf({validate:!1},e.schema).serialize(e.parser.parse(n,{isRootContent:!0,insert:!0})));const o=uo(dn.fromDom(t))?n:Ft.trim(n);return wv(e,o,r.no_selection),{content:o,html:o}}})(e,r,t,n))).getOr({content:t,html:_v(n.content)?\"\":n.content}),Cv=(e,t)=>((e,t)=>{const n=e.dom;return n.parentNode?qr(dn.fromDom(n.parentNode),(n=>!pn(e,n)&&t(n))):Y.none()})(e,t).isSome(),kv=e=>C(e)?e:$,Dv=(e,t,n)=>{const r=t(e),o=kv(n);return r.orThunk((()=>o(e)?Y.none():((e,t,n)=>{let r=e.dom;const o=kv(n);for(;r.parentNode;){r=r.parentNode;const e=dn.fromDom(r),n=t(e);if(n.isSome())return n;if(o(e))break}return Y.none()})(e,t,o)))},Sv=Kd,Av=(e,t,n)=>{const r=e.formatter.get(n);if(r)for(let n=0;n<r.length;n++){const o=r[n];if(rh(o)&&!1===o.inherit&&e.dom.is(t,o.selector))return!0}return!1},Mv=(e,t,n,r,o)=>{const i=e.dom.getRoot();if(t===i)return!1;const s=e.dom.getParent(t,(t=>!!Av(e,t,n)||(t.parentNode===i||!!Tv(e,t,n,r,!0))));return!!Tv(e,s,n,r,o)},Lv=(e,t,n)=>!(!oh(n)||!Sv(t,n.inline))||(!(!nh(n)||!Sv(t,n.block))||!!rh(n)&&(vr(t)&&e.is(t,n.selector))),Ev=(e,t,n,r,o,i)=>{const s=n[r],a=\"attributes\"===r;if(C(n.onmatch))return n.onmatch(t,n,r);if(s)if(Ae(s)){for(let n=0;n<s.length;n++)if(a?e.getAttrib(t,s[n]):Jd(e,t,s[n]))return!0}else for(const r in s)if(ke(s,r)){const l=a?e.getAttrib(t,r):Jd(e,t,r),c=Gd(s[r],i),u=w(l)||Ke(l);if(u&&w(c))continue;if(o&&u&&!n.exact)return!1;if((!o||n.exact)&&!Sv(l,Xd(c,r)))return!1}return!0},Tv=(e,t,n,r,o)=>{const i=e.formatter.get(n),s=e.dom;if(i&&vr(t))for(let n=0;n<i.length;n++){const a=i[n];if(Lv(e.dom,t,a)&&Ev(s,t,a,\"attributes\",o,r)&&Ev(s,t,a,\"styles\",o,r)){const n=a.classes;if(n)for(let o=0;o<n.length;o++)if(!e.dom.hasClass(t,Gd(n[o],r)))return;return a}}},Fv=(e,t,n,r,o)=>{if(r)return Mv(e,r,t,n,o);if(r=e.selection.getNode(),Mv(e,r,t,n,o))return!0;const i=e.selection.getStart();return!(i===r||!Mv(e,i,t,n,o))},Ov=(e,t)=>{const n=t=>pn(t,dn.fromDom(e.getBody()));return Y.from(e.selection.getStart(!0)).bind((r=>Dv(dn.fromDom(r),(n=>he(t,(t=>((t,n)=>Tv(e,t.dom,n)?Y.some(n):Y.none())(n,t)))),n))).getOrNull()},Bv=(e,t,n)=>J(n,((n,r)=>{const o=((e,t)=>eh(e,t,(e=>{const t=e=>C(e)||e.length>1&&\"%\"===e.charAt(0);return z([\"styles\",\"attributes\"],(n=>Ce(e,n).exists((e=>{const n=v(e)?e:xe(e);return z(n,t)}))))})))(e,r);return e.formatter.matchNode(t,r,{},o)?n.concat([r]):n}),[]),Rv=Ao,$v=e=>(e=>{const t=[];let n=e;for(;n;){if(Sr(n)&&n.data!==Rv||n.childNodes.length>1)return[];vr(n)&&t.push(n),n=n.firstChild}return t})(e).length>0,Nv=e=>{if(e){const t=new Zr(e,e);for(let e=t.current();e;e=t.next())if(Sr(e))return e}return null},Yv=e=>{const t=dn.fromTag(\"span\");return Vt(t,{id:Zu,\"data-mce-bogus\":\"1\",\"data-mce-type\":\"format-caret\"}),e&&Xn(t,dn.fromText(Rv)),t},Pv=(e,t,n=!0)=>{const r=e.dom,o=e.selection;if($v(t))rg(e,!1,dn.fromDom(t),n);else{const e=o.getRng(),n=r.getParent(t,r.isBlock),i=e.startContainer,s=e.startOffset,a=e.endContainer,l=e.endOffset,c=(e=>{const t=Nv(e);return t&&t.data.charAt(0)===Rv&&t.deleteData(0,1),t})(t);r.remove(t,!0),i===c&&s>0&&e.setStart(c,s-1),a===c&&l>0&&e.setEnd(c,l-1),n&&r.isEmpty(n)&&Do(dn.fromDom(n)),o.setRng(e)}},Iv=(e,t,n=!0)=>{const r=e.dom,o=e.selection;if(t)Pv(e,t,n);else if(!(t=td(e.getBody(),o.getStart())))for(;t=r.get(Zu);)Pv(e,t,!1)},Hv=(e,t)=>(e.appendChild(t),t),jv=(e,t)=>{var n;const r=X(e,((e,t)=>Hv(e,t.cloneNode(!1))),t),o=null!==(n=r.ownerDocument)&&void 0!==n?n:document;return Hv(r,o.createTextNode(Rv))},Wv=(e,t,n,r)=>{const o=e.dom,i=e.selection;let s=!1;const a=e.formatter.get(t);if(!a)return;const l=i.getRng(),c=l.startContainer,u=l.startOffset;let d=c;Sr(c)&&(u!==c.data.length&&(s=!0),d=d.parentNode);const h=[];let m;for(;d;){if(Tv(e,d,t,n,r)){m=d;break}d.nextSibling&&(s=!0),h.push(d),d=d.parentNode}if(m)if(s){const o=i.getBookmark();l.collapse(!0);let s=_h(e,l,a,!0);s=bm(s),e.formatter.remove(t,n,s,r),i.moveToBookmark(o)}else{const s=td(e.getBody(),m),a=Yv(!1).dom;((e,t,n)=>{var r,o;const i=e.dom,s=i.getParent(n,F(zd,e));s&&i.isEmpty(s)?null===(r=n.parentNode)||void 0===r||r.replaceChild(t,n):(Co(dn.fromDom(n)),i.isEmpty(n)?null===(o=n.parentNode)||void 0===o||o.replaceChild(t,n):i.insertAfter(t,n))})(e,a,null!=s?s:m);const l=((e,t,n,r,o,i)=>{const s=e.formatter,a=e.dom,l=K(me(s.get()),(e=>e!==r&&!He(e,\"removeformat\"))),c=Bv(e,n,l);if(K(c,(t=>!th(e,t,r))).length>0){const e=n.cloneNode(!1);return a.add(t,e),s.remove(r,o,e,i),a.remove(e),Y.some(e)}return Y.none()})(e,a,m,t,n,r),c=jv(h.concat(l.toArray()),a);s&&Pv(e,s,!1),i.setCursorLocation(c,1),o.isEmpty(m)&&o.remove(m)}},zv=e=>{e.on(\"mouseup keydown\",(t=>{((e,t)=>{const n=e.selection,r=e.getBody();Iv(e,null,!1),8!==t&&46!==t||!n.isCollapsed()||n.getStart().innerHTML!==Rv||Iv(e,td(r,n.getStart())),37!==t&&39!==t||Iv(e,td(r,n.getStart()))})(e,t.keyCode)}))},Uv=(e,t)=>{const n=e.schema.getTextInlineElements();return ke(n,$t(t))&&!ed(t.dom)&&!xr(t.dom)},Vv={},qv=br([\"pre\"]);((e,t)=>{Vv[e]||(Vv[e]=[]),Vv[e].push(t)})(\"pre\",(e=>{const t=e.selection.getRng();if(!t.collapsed){const t=e.selection.getSelectedBlocks(),n=K(K(t,qv),(e=>t=>{const n=t.previousSibling;return qv(n)&&W(e,n)})(t));V(n,(e=>{((e,t)=>{const n=dn.fromDom(t),r=yn(n).dom;Zn(n),Jn(dn.fromDom(e),[dn.fromTag(\"br\",r),dn.fromTag(\"br\",r),...Dn(n)])})(e.previousSibling,e)}))}}));const Gv=[\"fontWeight\",\"fontStyle\",\"color\",\"fontSize\",\"fontFamily\"],Kv=e=>Z(e,(e=>oh(e)&&\"span\"===e.inline&&(e=>p(e.styles)&&z(me(e.styles),(e=>W(Gv,e))))(e))),Xv=(e,t)=>{const n=e.get(t);return v(n)?Kv(n):Y.none()},Jv=(e,t)=>Xu(t,ga.fromRangeStart(e)).isNone(),Qv=(e,t)=>!1===Ku(t,ga.fromRangeEnd(e)).exists((e=>!Fr(e.getNode())||Ku(t,e).isSome())),Zv=e=>t=>Pr(t)&&\"false\"!==e.getContentEditableParent(t),ey=e=>K((e=>{const t=e.getSelectedBlocks(),n=e.getRng();if(e.isCollapsed())return[];if(1===t.length)return Jv(n,t[0])&&Qv(n,t[0])?t:[];{const e=ce(t).filter((e=>Jv(n,e))).toArray(),r=ue(t).filter((e=>Qv(n,e))).toArray(),o=t.slice(1,-1);return e.concat(o).concat(r)}})(e),Zv(e.dom)),ty=e=>K(e.getSelectedBlocks(),Zv(e.dom)),ny=Ft.each,ry=e=>vr(e)&&!fd(e)&&!ed(e)&&!xr(e),oy=(e,t)=>{for(let n=e;n;n=n[t]){if(Sr(n)&&Ge(n.data))return e;if(vr(n)&&!fd(n))return n}return e},iy=(e,t,n)=>{const r=Xg(e),o=vr(t)&&Id(t),i=vr(n)&&Id(n);if(o&&i){const o=oy(t,\"previousSibling\"),i=oy(n,\"nextSibling\");if(r.compare(o,i)){for(let e=o.nextSibling;e&&e!==i;){const t=e;e=e.nextSibling,o.appendChild(t)}return e.dom.remove(i),Ft.each(Ft.grep(i.childNodes),(e=>{o.appendChild(e)})),o}}return n},sy=(e,t,n,r)=>{var o;if(r&&!1!==t.merge_siblings){const t=null!==(o=iy(e,Wd(r),r))&&void 0!==o?o:r;iy(e,t,Wd(t,!0))}},ay=(e,t,n)=>{ny(e.childNodes,(e=>{ry(e)&&(t(e)&&n(e),e.hasChildNodes()&&ay(e,t,n))}))},ly=(e,t)=>n=>!(!n||!Jd(e,n,t)),cy=(e,t,n)=>r=>{e.setStyle(r,t,n),\"\"===r.getAttribute(\"style\")&&r.removeAttribute(\"style\"),((e,t)=>{\"SPAN\"===t.nodeName&&0===e.getAttribs(t).length&&e.remove(t,!0)})(e,r)},uy=ja([{keep:[]},{rename:[\"name\"]},{removed:[]}]),dy=/^(src|href|style)$/,hy=Ft.each,my=Kd,fy=(e,t,n)=>e.isChildOf(t,n)&&t!==n&&!e.isBlock(n),py=(e,t,n)=>{let r=t[n?\"startContainer\":\"endContainer\"],o=t[n?\"startOffset\":\"endOffset\"];if(vr(r)){const e=r.childNodes.length-1;!n&&o&&o--,r=r.childNodes[o>e?e:o]}return Sr(r)&&n&&o>=r.data.length&&(r=new Zr(r,e.getBody()).next()||r),Sr(r)&&!n&&0===o&&(r=new Zr(r,e.getBody()).prev()||r),r},gy=(e,t)=>{const n=t?\"firstChild\":\"lastChild\",r=e[n];return(e=>/^(TR|TH|TD)$/.test(e.nodeName))(e)&&r?\"TR\"===e.nodeName&&r[n]||r:e},vy=(e,t,n,r)=>{var o;const i=e.create(n,r);return null===(o=t.parentNode)||void 0===o||o.insertBefore(i,t),i.appendChild(t),i},yy=(e,t,n,r,o)=>{const i=dn.fromDom(t),s=dn.fromDom(e.create(r,o)),a=n?kn(i):Cn(i);return Jn(s,a),n?(qn(i,s),Kn(s,i)):(Gn(i,s),Xn(s,i)),s.dom},by=(e,t,n)=>{const r=t.parentNode;let o;const i=e.dom,s=cl(e);nh(n)&&r===i.getRoot()&&(n.list_block&&my(t,n.list_block)||V(de(t.childNodes),(t=>{Ud(e,s,t.nodeName.toLowerCase())?o?o.appendChild(t):(o=vy(i,t,s),i.setAttribs(o,ul(e))):o=null}))),(e=>rh(e)&&oh(e)&&Ot(Ce(e,\"mixed\"),!0))(n)&&!my(n.inline,t)||i.remove(t,!0)},_y=(e,t,n)=>k(e)?{name:t,value:null}:{name:e,value:Gd(t,n)},wy=(e,t)=>{\"\"===e.getAttrib(t,\"style\")&&(t.removeAttribute(\"style\"),t.removeAttribute(\"data-mce-style\"))},xy=(e,t,n,r,o)=>{let i=!1;hy(n.styles,((s,a)=>{const{name:l,value:c}=_y(a,s,r),u=Xd(c,l);(n.remove_similar||y(c)||!vr(o)||my(Jd(e,o,l),u))&&e.setStyle(t,l,\"\"),i=!0})),i&&wy(e,t)},Cy=(e,t,n,r,o)=>{const i=e.dom,s=Xg(e);if(!t.ceFalseOverride&&r&&\"false\"===i.getContentEditableParent(r))return uy.keep();if(r&&!Lv(i,r,t)&&!((e,t)=>t.links&&\"A\"===e.nodeName)(r,t))return uy.keep();const a=r,l=t.preserve_attributes;if(oh(t)&&\"all\"===t.remove&&v(l)){const e=K(i.getAttribs(a),(e=>W(l,e.name.toLowerCase())));if(i.removeAllAttribs(a),V(e,(e=>i.setAttrib(a,e.name,e.value))),e.length>0)return uy.rename(\"span\")}if(\"all\"!==t.remove){xy(i,a,t,n,o),hy(t.attributes,((e,r)=>{const{name:s,value:l}=_y(r,e,n);if(t.remove_similar||y(l)||!vr(o)||my(i.getAttrib(o,s),l)){if(\"class\"===s){const e=i.getAttrib(a,s);if(e){let t=\"\";if(V(e.split(/\\s+/),(e=>{/mce\\-\\w+/.test(e)&&(t+=(t?\" \":\"\")+e)})),t)return void i.setAttrib(a,s,t)}}if(dy.test(s)&&a.removeAttribute(\"data-mce-\"+s),\"style\"===s&&br([\"li\"])(a)&&\"none\"===i.getStyle(a,\"list-style-type\"))return a.removeAttribute(s),void i.setStyle(a,\"list-style-type\",\"none\");\"class\"===s&&a.removeAttribute(\"className\"),a.removeAttribute(s)}})),hy(t.classes,(e=>{e=Gd(e,n),vr(o)&&!i.hasClass(o,e)||i.removeClass(a,e)}));const e=i.getAttribs(a);for(let t=0;t<e.length;t++){const n=e[t].nodeName;if(!s.isAttributeInternal(n))return uy.keep()}}return\"none\"!==t.remove?(by(e,a,t),uy.removed()):uy.keep()},ky=(e,t,n,r,o)=>Cy(e,t,n,r,o).fold($,(t=>(e.dom.rename(r,t),!0)),N),Dy=(e,t,n,r)=>Cy(e,t,n,r,r).fold(L(r),(t=>(e.dom.createFragment().appendChild(r),e.dom.rename(r,t))),L(null)),Sy=(e,t,n,r,o)=>{const i=e.formatter.get(t),s=i[0],a=e.dom,l=e.selection,c=r=>{const a=((e,t,n,r,o)=>{let i;return t.parentNode&&V(Zd(e.dom,t.parentNode).reverse(),(t=>{if(!i&&vr(t)&&\"_start\"!==t.id&&\"_end\"!==t.id){const s=Tv(e,t,n,r,o);s&&!1!==s.split&&(i=t)}})),i})(e,r,t,n,o);return((e,t,n,r,o,i,s,a)=>{var l,c;let u,d;const h=e.dom;if(n){const m=n.parentNode;for(let n=r.parentNode;n&&n!==m;n=n.parentNode){let r=h.clone(n,!1);for(let n=0;n<t.length&&(r=Dy(e,t[n],a,r),null!==r);n++);r&&(u&&r.appendChild(u),d||(d=r),u=r)}!i||s.mixed&&h.isBlock(n)||(r=null!==(l=h.split(n,r))&&void 0!==l?l:r),u&&d&&(null===(c=o.parentNode)||void 0===c||c.insertBefore(u,o),d.appendChild(o),oh(s)&&sy(e,s,0,u))}return r})(e,i,a,r,r,!0,s,n)},u=t=>z(i,(r=>ky(e,r,n,t,t))),d=t=>{const n=de(t.childNodes),r=u(t)||z(i,(e=>Lv(a,t,e))),o=t.parentNode;if(!r&&x(o)&&ih(s)&&u(o),s.deep&&n.length)for(let e=0;e<n.length;e++)d(n[e]);V([\"underline\",\"line-through\",\"overline\"],(n=>{vr(t)&&e.dom.getStyle(t,\"text-decoration\")===n&&t.parentNode&&Qd(a,t.parentNode)===n&&ky(e,{deep:!1,exact:!0,inline:\"span\",styles:{textDecoration:n}},void 0,t)}))},h=e=>{const t=a.get(e?\"_start\":\"_end\");if(t){let n=t[e?\"firstChild\":\"lastChild\"];return(e=>fd(e)&&vr(e)&&(\"_start\"===e.id||\"_end\"===e.id))(n)&&(n=n[e?\"firstChild\":\"lastChild\"]),Sr(n)&&0===n.data.length&&(n=e?t.previousSibling||t.nextSibling:t.nextSibling||t.previousSibling),a.remove(t,!0),n}return null},m=t=>{let n,r,o=_h(e,t,i,t.collapsed);if(s.split){if(o=bm(o),n=py(e,o,!0),r=py(e,o),n!==r){if(n=gy(n,!0),r=gy(r,!1),fy(a,n,r)){const e=Y.from(n.firstChild).getOr(n);return c(yy(a,e,!0,\"span\",{id:\"_start\",\"data-mce-type\":\"bookmark\"})),void h(!0)}if(fy(a,r,n)){const e=Y.from(r.lastChild).getOr(r);return c(yy(a,e,!1,\"span\",{id:\"_end\",\"data-mce-type\":\"bookmark\"})),void h(!1)}n=vy(a,n,\"span\",{id:\"_start\",\"data-mce-type\":\"bookmark\"}),r=vy(a,r,\"span\",{id:\"_end\",\"data-mce-type\":\"bookmark\"});const e=a.createRng();e.setStartAfter(n),e.setEndBefore(r),wh(a,e,(e=>{V(e,(e=>{fd(e)||fd(e.parentNode)||c(e)}))})),c(n),c(r),n=h(!0),r=h()}else n=r=c(n);o.startContainer=n.parentNode?n.parentNode:n,o.startOffset=a.nodeIndex(n),o.endContainer=r.parentNode?r.parentNode:r,o.endOffset=a.nodeIndex(r)+1}wh(a,o,(e=>{V(e,d)}))};if(r){if(Yd(r)){const e=a.createRng();e.setStartBefore(r),e.setEndAfter(r),m(e)}else m(r);Bh(e,t,r,n)}else l.isCollapsed()&&oh(s)&&!Ld(e).length?Wv(e,t,n,o):(Hd(e,(()=>$d(e,m)),(r=>oh(s)&&Fv(e,t,n,r))),e.nodeChanged()),((e,t,n)=>{\"removeformat\"===t?V(ty(e.selection),(t=>{V(Gv,(n=>e.dom.setStyle(t,n,\"\"))),wy(e.dom,t)})):Xv(e.formatter,t).each((t=>{V(ty(e.selection),(r=>xy(e.dom,r,t,n,null)))}))})(e,t,n),Bh(e,t,r,n)},Ay=Ft.each,My=(e,t,n,r)=>{Ay(t,(t=>{oh(t)&&Ay(e.dom.select(t.inline,r),(r=>{ry(r)&&ky(e,t,n,r,t.exact?r:null)})),((e,t,n)=>{if(t.clear_child_styles){const r=t.links?\"*:not(a)\":\"*\";ny(e.select(r,n),(n=>{ry(n)&&Id(n)&&ny(t.styles,((t,r)=>{e.setStyle(n,r,\"\")}))}))}})(e.dom,t,r)}))},Ly=Ft.each,Ey=(e,t,n,r)=>{if(Ly(n.styles,((n,o)=>{e.setStyle(t,o,Gd(n,r))})),n.styles){const n=e.getAttrib(t,\"style\");n&&e.setAttrib(t,\"data-mce-style\",n)}},Ty=(e,t,n,r)=>{const o=e.formatter.get(t),i=o[0],s=!r&&e.selection.isCollapsed(),a=e.dom,l=e.selection,c=(e,t=i)=>{C(t.onformat)&&t.onformat(e,t,n,r),Ey(a,e,t,n),Ly(t.attributes,((t,r)=>{a.setAttrib(e,r,Gd(t,n))})),Ly(t.classes,(t=>{const r=Gd(t,n);a.hasClass(e,r)||a.addClass(e,r)}))},u=(e,t)=>{let n=!1;return Ly(e,(e=>!!rh(e)&&(\"false\"===a.getContentEditable(t)&&!e.ceFalseOverride||(!(!x(e.collapsed)||e.collapsed===s)||(!(a.is(t,e.selector)&&!ed(t))||(c(t,e),n=!0,!1)))))),n},d=e=>{if(f(e)){const t=a.create(e);return c(t),t}return null},h=(r,s,a)=>{const l=[];let h=!0;const m=i.inline||i.block,f=d(m),p=r=>(e=>nh(e)&&!0===e.wrapper)(i)&&Tv(e,r,t,n),g=(t,n,r)=>{const o=(e=>nh(e)&&!0!==e.wrapper)(i)&&zd(e,t)&&Ud(e,n,m);return r&&o};wh(r,s,(t=>{let n;const s=t=>{let d=!1,v=h,y=!1;const b=t.nodeName.toLowerCase(),_=t.parentNode,w=_.nodeName.toLowerCase(),C=r.getContentEditable(t);x(C)&&(v=h,h=\"true\"===C,d=!0,y=qd(e,t));const k=h&&!d;if(Fr(t)&&!((e,t,n,r)=>{if(Gl(e)&&oh(t)&&n.parentNode){const t=Pi(e.schema),o=Cv(dn.fromDom(n),(e=>ed(e.dom)));return De(t,r)&&ui(dn.fromDom(n.parentNode),!1)&&!o}return!1})(e,i,t,w))return n=null,void(nh(i)&&r.remove(t));if(p(t))n=null;else{if(g(b,w,k)){const e=r.rename(t,m);return c(e),l.push(e),void(n=null)}if(rh(i)){let e=u(o,t);if(!e&&x(_)&&ih(i)&&(e=u(o,_)),!oh(i)||e)return void(n=null)}x(f)&&((t,n,o,s)=>{const l=t.nodeName.toLowerCase(),c=Ud(e,m,l)&&Ud(e,n,m),u=!a&&Sr(t)&&Mo(t.data),d=ed(t),h=!oh(i)||!r.isBlock(t);return(o||s)&&c&&!u&&!d&&h})(t,w,k,y)?(n||(n=r.clone(f,!1),_.insertBefore(n,t),l.push(n)),y&&d&&(h=v),n.appendChild(t)):(n=null,V(de(t.childNodes),s),d&&(h=v),n=null)}};V(t,s)})),!0===i.links&&V(l,(e=>{const t=e=>{\"A\"===e.nodeName&&c(e,i),V(de(e.childNodes),t)};t(e)})),V(l,(s=>{const a=(e=>{let t=0;return V(e.childNodes,(e=>{(e=>x(e)&&Sr(e)&&0===e.length)(e)||fd(e)||t++})),t})(s);!(l.length>1)&&r.isBlock(s)||0!==a?(oh(i)||nh(i)&&i.wrapper)&&(i.exact||1!==a||(s=(e=>{const t=Z(e.childNodes,Pd).filter((e=>\"false\"!==r.getContentEditable(e)&&Lv(r,e,i)));return t.map((t=>{const n=r.clone(t,!1);return c(n),r.replace(n,e,!0),r.remove(t,!0),n})).getOr(e)})(s)),My(e,o,n,s),((e,t,n,r,o)=>{const i=o.parentNode;Tv(e,i,n,r)&&ky(e,t,r,o)||t.merge_with_parents&&i&&e.dom.getParent(i,(i=>!!Tv(e,i,n,r)&&(ky(e,t,r,o),!0)))})(e,i,t,n,s),((e,t,n,r)=>{if(t.styles&&t.styles.backgroundColor){const o=ly(e,\"fontSize\");ay(r,(e=>o(e)&&Id(e)),cy(e,\"backgroundColor\",Gd(t.styles.backgroundColor,n)))}})(r,i,n,s),((e,t,n,r)=>{const o=t=>{if(vr(t)&&vr(t.parentNode)&&Id(t)){const n=Qd(e,t.parentNode);e.getStyle(t,\"color\")&&n?e.setStyle(t,\"text-decoration\",n):e.getStyle(t,\"text-decoration\")===n&&e.setStyle(t,\"text-decoration\",null)}};t.styles&&(t.styles.color||t.styles.textDecoration)&&(Ft.walk(r,o,\"childNodes\"),o(r))})(r,i,0,s),((e,t,n,r)=>{if(oh(t)&&(\"sub\"===t.inline||\"sup\"===t.inline)){const n=ly(e,\"fontSize\");ay(r,(e=>n(e)&&Id(e)),cy(e,\"fontSize\",\"\"));const o=K(e.select(\"sup\"===t.inline?\"sub\":\"sup\",r),Id);e.remove(o,!0)}})(r,i,0,s),sy(e,i,0,s)):r.remove(s,!0)}))},m=Yd(r)?r:l.getNode();if(\"false\"===a.getContentEditable(m)&&!qd(e,m))return u(o,r=m),void Oh(e,t,r,n);if(i){if(r)if(Yd(r)){if(!u(o,r)){const t=a.createRng();t.setStartBefore(r),t.setEndAfter(r),h(a,_h(e,t,o),!0)}}else h(a,r,!0);else s&&oh(i)&&!Ld(e).length?((e,t,n)=>{let r;const o=e.selection,i=e.formatter.get(t);if(!i)return;const s=o.getRng();let a=s.startOffset;const l=s.startContainer.nodeValue;r=td(e.getBody(),o.getStart());const c=/[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;if(l&&a>0&&a<l.length&&c.test(l.charAt(a))&&c.test(l.charAt(a-1))){const r=o.getBookmark();s.collapse(!0);let a=_h(e,s,i);a=bm(a),e.formatter.apply(t,n,a),o.moveToBookmark(r)}else{let i=r?Nv(r):null;r&&(null==i?void 0:i.data)===Rv||(u=e.getDoc(),d=Yv(!0).dom,r=u.importNode(d,!0),i=r.firstChild,s.insertNode(r),a=1),e.formatter.apply(t,n,r),o.setCursorLocation(i,a)}var u,d})(e,t,n):(l.setRng(sv(l.getRng())),Hd(e,(()=>{$d(e,((t,n)=>{const r=n?t:_h(e,t,o);h(a,r,!1)}))}),N),e.nodeChanged()),Xv(e.formatter,t).each((t=>{V(ey(e.selection),(e=>Ey(a,e,t,n)))}));((e,t)=>{ke(Vv,e)&&V(Vv[e],(e=>{e(t)}))})(t,e)}Oh(e,t,r,n)},Fy=e=>ke(e,\"vars\"),Oy=e=>e.selection.getStart(),By=(e,t,n,r,o)=>Q(t,(t=>{const i=e.formatter.matchNode(t,n,null!=o?o:{},r);return!_(i)}),(t=>!!Av(e,t,n)||!r&&x(e.formatter.matchNode(t,n,o,!0)))),Ry=(e,t)=>{const n=null!=t?t:Oy(e);return K(Zd(e.dom,n),(e=>vr(e)&&!xr(e)))},$y=(e,t,n)=>{const r=Ry(e,t);pe(n,((n,o)=>{const i=n=>{const i=By(e,r,o,n.similar,Fy(n)?n.vars:void 0),s=i.isSome();if(n.state.get()!==s){n.state.set(s);const e=i.getOr(t);Fy(n)?n.callback(s,{node:e,format:o,parents:r}):V(n.callbacks,(t=>t(s,{node:e,format:o,parents:r})))}};V([n.withSimilar,n.withoutSimilar],i),V(n.withVars,i)}))},Ny=(e,t,n,r,o,i)=>(((e,t,n,r,o,i)=>{const s=t.get();V(n.split(\",\"),(t=>{const n=Ce(s,t).getOrThunk((()=>{const e={withSimilar:{state:ds(!1),similar:!0,callbacks:[]},withoutSimilar:{state:ds(!1),similar:!1,callbacks:[]},withVars:[]};return s[t]=e,e})),a=()=>{const n=Ry(e);return By(e,n,t,o,i).isSome()};if(_(i)){const e=o?n.withSimilar:n.withoutSimilar;e.callbacks.push(r),1===e.callbacks.length&&e.state.set(a())}else n.withVars.push({state:ds(a()),similar:o,vars:i,callback:r})})),t.set(s)})(e,t,n,r,o,i),{unbind:()=>((e,t,n)=>{const r=e.get();V(t.split(\",\"),(e=>Ce(r,e).each((t=>{r[e]={withSimilar:{...t.withSimilar,callbacks:K(t.withSimilar.callbacks,(e=>e!==n))},withoutSimilar:{...t.withoutSimilar,callbacks:K(t.withoutSimilar.callbacks,(e=>e!==n))},withVars:K(t.withVars,(e=>e.callback!==n))}})))),e.set(r)})(t,n,r)});function Yy(e){return Yy=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},Yy(e)}function Py(e,t){return Py=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},Py(e,t)}function Iy(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function Hy(e,t,n){return Hy=Iy()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&Py(o,n.prototype),o},Hy.apply(null,arguments)}function jy(e){return function(e){if(Array.isArray(e))return Wy(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||function(e,t){if(!e)return;if(\"string\"==typeof e)return Wy(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===n&&e.constructor&&(n=e.constructor.name);if(\"Map\"===n||\"Set\"===n)return Array.from(e);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Wy(e,t)}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function Wy(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var zy=Object.hasOwnProperty,Uy=Object.setPrototypeOf,Vy=Object.isFrozen,qy=Object.getPrototypeOf,Gy=Object.getOwnPropertyDescriptor,Ky=Object.freeze,Xy=Object.seal,Jy=Object.create,Qy=\"undefined\"!=typeof Reflect&&Reflect,Zy=Qy.apply,eb=Qy.construct;Zy||(Zy=function(e,t,n){return e.apply(t,n)}),Ky||(Ky=function(e){return e}),Xy||(Xy=function(e){return e}),eb||(eb=function(e,t){return Hy(e,jy(t))});var tb,nb=hb(Array.prototype.forEach),rb=hb(Array.prototype.pop),ob=hb(Array.prototype.push),ib=hb(String.prototype.toLowerCase),sb=hb(String.prototype.match),ab=hb(String.prototype.replace),lb=hb(String.prototype.indexOf),cb=hb(String.prototype.trim),ub=hb(RegExp.prototype.test),db=(tb=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return eb(tb,t)});function hb(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return Zy(e,t,r)}}function mb(e,t){Uy&&Uy(e,null);for(var n=t.length;n--;){var r=t[n];if(\"string\"==typeof r){var o=ib(r);o!==r&&(Vy(t)||(t[n]=o),r=o)}e[r]=!0}return e}function fb(e){var t,n=Jy(null);for(t in e)Zy(zy,e,[t])&&(n[t]=e[t]);return n}function pb(e,t){for(;null!==e;){var n=Gy(e,t);if(n){if(n.get)return hb(n.get);if(\"function\"==typeof n.value)return hb(n.value)}e=qy(e)}return function(e){return console.warn(\"fallback value for\",e),null}}var gb=Ky([\"a\",\"abbr\",\"acronym\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"bdi\",\"bdo\",\"big\",\"blink\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"center\",\"cite\",\"code\",\"col\",\"colgroup\",\"content\",\"data\",\"datalist\",\"dd\",\"decorator\",\"del\",\"details\",\"dfn\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"element\",\"em\",\"fieldset\",\"figcaption\",\"figure\",\"font\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"map\",\"mark\",\"marquee\",\"menu\",\"menuitem\",\"meter\",\"nav\",\"nobr\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"section\",\"select\",\"shadow\",\"small\",\"source\",\"spacer\",\"span\",\"strike\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"template\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"tt\",\"u\",\"ul\",\"var\",\"video\",\"wbr\"]),vb=Ky([\"svg\",\"a\",\"altglyph\",\"altglyphdef\",\"altglyphitem\",\"animatecolor\",\"animatemotion\",\"animatetransform\",\"circle\",\"clippath\",\"defs\",\"desc\",\"ellipse\",\"filter\",\"font\",\"g\",\"glyph\",\"glyphref\",\"hkern\",\"image\",\"line\",\"lineargradient\",\"marker\",\"mask\",\"metadata\",\"mpath\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialgradient\",\"rect\",\"stop\",\"style\",\"switch\",\"symbol\",\"text\",\"textpath\",\"title\",\"tref\",\"tspan\",\"view\",\"vkern\"]),yb=Ky([\"feBlend\",\"feColorMatrix\",\"feComponentTransfer\",\"feComposite\",\"feConvolveMatrix\",\"feDiffuseLighting\",\"feDisplacementMap\",\"feDistantLight\",\"feFlood\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feImage\",\"feMerge\",\"feMergeNode\",\"feMorphology\",\"feOffset\",\"fePointLight\",\"feSpecularLighting\",\"feSpotLight\",\"feTile\",\"feTurbulence\"]),bb=Ky([\"animate\",\"color-profile\",\"cursor\",\"discard\",\"fedropshadow\",\"font-face\",\"font-face-format\",\"font-face-name\",\"font-face-src\",\"font-face-uri\",\"foreignobject\",\"hatch\",\"hatchpath\",\"mesh\",\"meshgradient\",\"meshpatch\",\"meshrow\",\"missing-glyph\",\"script\",\"set\",\"solidcolor\",\"unknown\",\"use\"]),_b=Ky([\"math\",\"menclose\",\"merror\",\"mfenced\",\"mfrac\",\"mglyph\",\"mi\",\"mlabeledtr\",\"mmultiscripts\",\"mn\",\"mo\",\"mover\",\"mpadded\",\"mphantom\",\"mroot\",\"mrow\",\"ms\",\"mspace\",\"msqrt\",\"mstyle\",\"msub\",\"msup\",\"msubsup\",\"mtable\",\"mtd\",\"mtext\",\"mtr\",\"munder\",\"munderover\"]),wb=Ky([\"maction\",\"maligngroup\",\"malignmark\",\"mlongdiv\",\"mscarries\",\"mscarry\",\"msgroup\",\"mstack\",\"msline\",\"msrow\",\"semantics\",\"annotation\",\"annotation-xml\",\"mprescripts\",\"none\"]),xb=Ky([\"#text\"]),Cb=Ky([\"accept\",\"action\",\"align\",\"alt\",\"autocapitalize\",\"autocomplete\",\"autopictureinpicture\",\"autoplay\",\"background\",\"bgcolor\",\"border\",\"capture\",\"cellpadding\",\"cellspacing\",\"checked\",\"cite\",\"class\",\"clear\",\"color\",\"cols\",\"colspan\",\"controls\",\"controlslist\",\"coords\",\"crossorigin\",\"datetime\",\"decoding\",\"default\",\"dir\",\"disabled\",\"disablepictureinpicture\",\"disableremoteplayback\",\"download\",\"draggable\",\"enctype\",\"enterkeyhint\",\"face\",\"for\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"id\",\"inputmode\",\"integrity\",\"ismap\",\"kind\",\"label\",\"lang\",\"list\",\"loading\",\"loop\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"minlength\",\"multiple\",\"muted\",\"name\",\"nonce\",\"noshade\",\"novalidate\",\"nowrap\",\"open\",\"optimum\",\"pattern\",\"placeholder\",\"playsinline\",\"poster\",\"preload\",\"pubdate\",\"radiogroup\",\"readonly\",\"rel\",\"required\",\"rev\",\"reversed\",\"role\",\"rows\",\"rowspan\",\"spellcheck\",\"scope\",\"selected\",\"shape\",\"size\",\"sizes\",\"span\",\"srclang\",\"start\",\"src\",\"srcset\",\"step\",\"style\",\"summary\",\"tabindex\",\"title\",\"translate\",\"type\",\"usemap\",\"valign\",\"value\",\"width\",\"xmlns\",\"slot\"]),kb=Ky([\"accent-height\",\"accumulate\",\"additive\",\"alignment-baseline\",\"ascent\",\"attributename\",\"attributetype\",\"azimuth\",\"basefrequency\",\"baseline-shift\",\"begin\",\"bias\",\"by\",\"class\",\"clip\",\"clippathunits\",\"clip-path\",\"clip-rule\",\"color\",\"color-interpolation\",\"color-interpolation-filters\",\"color-profile\",\"color-rendering\",\"cx\",\"cy\",\"d\",\"dx\",\"dy\",\"diffuseconstant\",\"direction\",\"display\",\"divisor\",\"dur\",\"edgemode\",\"elevation\",\"end\",\"fill\",\"fill-opacity\",\"fill-rule\",\"filter\",\"filterunits\",\"flood-color\",\"flood-opacity\",\"font-family\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-variant\",\"font-weight\",\"fx\",\"fy\",\"g1\",\"g2\",\"glyph-name\",\"glyphref\",\"gradientunits\",\"gradienttransform\",\"height\",\"href\",\"id\",\"image-rendering\",\"in\",\"in2\",\"k\",\"k1\",\"k2\",\"k3\",\"k4\",\"kerning\",\"keypoints\",\"keysplines\",\"keytimes\",\"lang\",\"lengthadjust\",\"letter-spacing\",\"kernelmatrix\",\"kernelunitlength\",\"lighting-color\",\"local\",\"marker-end\",\"marker-mid\",\"marker-start\",\"markerheight\",\"markerunits\",\"markerwidth\",\"maskcontentunits\",\"maskunits\",\"max\",\"mask\",\"media\",\"method\",\"mode\",\"min\",\"name\",\"numoctaves\",\"offset\",\"operator\",\"opacity\",\"order\",\"orient\",\"orientation\",\"origin\",\"overflow\",\"paint-order\",\"path\",\"pathlength\",\"patterncontentunits\",\"patterntransform\",\"patternunits\",\"points\",\"preservealpha\",\"preserveaspectratio\",\"primitiveunits\",\"r\",\"rx\",\"ry\",\"radius\",\"refx\",\"refy\",\"repeatcount\",\"repeatdur\",\"restart\",\"result\",\"rotate\",\"scale\",\"seed\",\"shape-rendering\",\"specularconstant\",\"specularexponent\",\"spreadmethod\",\"startoffset\",\"stddeviation\",\"stitchtiles\",\"stop-color\",\"stop-opacity\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke\",\"stroke-width\",\"style\",\"surfacescale\",\"systemlanguage\",\"tabindex\",\"targetx\",\"targety\",\"transform\",\"transform-origin\",\"text-anchor\",\"text-decoration\",\"text-rendering\",\"textlength\",\"type\",\"u1\",\"u2\",\"unicode\",\"values\",\"viewbox\",\"visibility\",\"version\",\"vert-adv-y\",\"vert-origin-x\",\"vert-origin-y\",\"width\",\"word-spacing\",\"wrap\",\"writing-mode\",\"xchannelselector\",\"ychannelselector\",\"x\",\"x1\",\"x2\",\"xmlns\",\"y\",\"y1\",\"y2\",\"z\",\"zoomandpan\"]),Db=Ky([\"accent\",\"accentunder\",\"align\",\"bevelled\",\"close\",\"columnsalign\",\"columnlines\",\"columnspan\",\"denomalign\",\"depth\",\"dir\",\"display\",\"displaystyle\",\"encoding\",\"fence\",\"frame\",\"height\",\"href\",\"id\",\"largeop\",\"length\",\"linethickness\",\"lspace\",\"lquote\",\"mathbackground\",\"mathcolor\",\"mathsize\",\"mathvariant\",\"maxsize\",\"minsize\",\"movablelimits\",\"notation\",\"numalign\",\"open\",\"rowalign\",\"rowlines\",\"rowspacing\",\"rowspan\",\"rspace\",\"rquote\",\"scriptlevel\",\"scriptminsize\",\"scriptsizemultiplier\",\"selection\",\"separator\",\"separators\",\"stretchy\",\"subscriptshift\",\"supscriptshift\",\"symmetric\",\"voffset\",\"width\",\"xmlns\"]),Sb=Ky([\"xlink:href\",\"xml:id\",\"xlink:title\",\"xml:space\",\"xmlns:xlink\"]),Ab=Xy(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm),Mb=Xy(/<%[\\w\\W]*|[\\w\\W]*%>/gm),Lb=Xy(/^data-[\\-\\w.\\u00B7-\\uFFFF]/),Eb=Xy(/^aria-[\\-\\w]+$/),Tb=Xy(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i),Fb=Xy(/^(?:\\w+script|data):/i),Ob=Xy(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g),Bb=Xy(/^html$/i),Rb=function(){return\"undefined\"==typeof window?null:window},$b=function(e,t){if(\"object\"!==Yy(e)||\"function\"!=typeof e.createPolicy)return null;var n=null,r=\"data-tt-policy-suffix\";t.currentScript&&t.currentScript.hasAttribute(r)&&(n=t.currentScript.getAttribute(r));var o=\"dompurify\"+(n?\"#\"+n:\"\");try{return e.createPolicy(o,{createHTML:function(e){return e}})}catch(e){return console.warn(\"TrustedTypes policy \"+o+\" could not be created.\"),null}};var Nb=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Rb(),n=function(t){return e(t)};if(n.version=\"2.3.8\",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;var r=t.document,o=t.document,i=t.DocumentFragment,s=t.HTMLTemplateElement,a=t.Node,l=t.Element,c=t.NodeFilter,u=t.NamedNodeMap,d=void 0===u?t.NamedNodeMap||t.MozNamedAttrMap:u,h=t.HTMLFormElement,m=t.DOMParser,f=t.trustedTypes,p=l.prototype,g=pb(p,\"cloneNode\"),v=pb(p,\"nextSibling\"),y=pb(p,\"childNodes\"),b=pb(p,\"parentNode\");if(\"function\"==typeof s){var _=o.createElement(\"template\");_.content&&_.content.ownerDocument&&(o=_.content.ownerDocument)}var w=$b(f,r),x=w?w.createHTML(\"\"):\"\",C=o,k=C.implementation,D=C.createNodeIterator,S=C.createDocumentFragment,A=C.getElementsByTagName,M=r.importNode,L={};try{L=fb(o).documentMode?o.documentMode:{}}catch(e){}var E={};n.isSupported=\"function\"==typeof b&&k&&void 0!==k.createHTMLDocument&&9!==L;var T,F,O=Ab,B=Mb,R=Lb,$=Eb,N=Fb,Y=Ob,P=Tb,I=null,H=mb({},[].concat(jy(gb),jy(vb),jy(yb),jy(_b),jy(xb))),j=null,W=mb({},[].concat(jy(Cb),jy(kb),jy(Db),jy(Sb))),z=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),U=null,V=null,q=!0,G=!0,K=!1,X=!1,J=!1,Q=!1,Z=!1,ee=!1,te=!1,ne=!1,re=!0,oe=!0,ie=!1,se={},ae=null,le=mb({},[\"annotation-xml\",\"audio\",\"colgroup\",\"desc\",\"foreignobject\",\"head\",\"iframe\",\"math\",\"mi\",\"mn\",\"mo\",\"ms\",\"mtext\",\"noembed\",\"noframes\",\"noscript\",\"plaintext\",\"script\",\"style\",\"svg\",\"template\",\"thead\",\"title\",\"video\",\"xmp\"]),ce=null,ue=mb({},[\"audio\",\"video\",\"img\",\"source\",\"image\",\"track\"]),de=null,he=mb({},[\"alt\",\"class\",\"for\",\"id\",\"label\",\"name\",\"pattern\",\"placeholder\",\"role\",\"summary\",\"title\",\"value\",\"style\",\"xmlns\"]),me=\"http://www.w3.org/1998/Math/MathML\",fe=\"http://www.w3.org/2000/svg\",pe=\"http://www.w3.org/1999/xhtml\",ge=pe,ve=!1,ye=[\"application/xhtml+xml\",\"text/html\"],be=\"text/html\",_e=null,we=o.createElement(\"form\"),xe=function(e){return e instanceof RegExp||e instanceof Function},Ce=function(e){_e&&_e===e||(e&&\"object\"===Yy(e)||(e={}),e=fb(e),I=\"ALLOWED_TAGS\"in e?mb({},e.ALLOWED_TAGS):H,j=\"ALLOWED_ATTR\"in e?mb({},e.ALLOWED_ATTR):W,de=\"ADD_URI_SAFE_ATTR\"in e?mb(fb(he),e.ADD_URI_SAFE_ATTR):he,ce=\"ADD_DATA_URI_TAGS\"in e?mb(fb(ue),e.ADD_DATA_URI_TAGS):ue,ae=\"FORBID_CONTENTS\"in e?mb({},e.FORBID_CONTENTS):le,U=\"FORBID_TAGS\"in e?mb({},e.FORBID_TAGS):{},V=\"FORBID_ATTR\"in e?mb({},e.FORBID_ATTR):{},se=\"USE_PROFILES\"in e&&e.USE_PROFILES,q=!1!==e.ALLOW_ARIA_ATTR,G=!1!==e.ALLOW_DATA_ATTR,K=e.ALLOW_UNKNOWN_PROTOCOLS||!1,X=e.SAFE_FOR_TEMPLATES||!1,J=e.WHOLE_DOCUMENT||!1,ee=e.RETURN_DOM||!1,te=e.RETURN_DOM_FRAGMENT||!1,ne=e.RETURN_TRUSTED_TYPE||!1,Z=e.FORCE_BODY||!1,re=!1!==e.SANITIZE_DOM,oe=!1!==e.KEEP_CONTENT,ie=e.IN_PLACE||!1,P=e.ALLOWED_URI_REGEXP||P,ge=e.NAMESPACE||pe,e.CUSTOM_ELEMENT_HANDLING&&xe(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(z.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&xe(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(z.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&\"boolean\"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(z.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),T=T=-1===ye.indexOf(e.PARSER_MEDIA_TYPE)?be:e.PARSER_MEDIA_TYPE,F=\"application/xhtml+xml\"===T?function(e){return e}:ib,X&&(G=!1),te&&(ee=!0),se&&(I=mb({},jy(xb)),j=[],!0===se.html&&(mb(I,gb),mb(j,Cb)),!0===se.svg&&(mb(I,vb),mb(j,kb),mb(j,Sb)),!0===se.svgFilters&&(mb(I,yb),mb(j,kb),mb(j,Sb)),!0===se.mathMl&&(mb(I,_b),mb(j,Db),mb(j,Sb))),e.ADD_TAGS&&(I===H&&(I=fb(I)),mb(I,e.ADD_TAGS)),e.ADD_ATTR&&(j===W&&(j=fb(j)),mb(j,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&mb(de,e.ADD_URI_SAFE_ATTR),e.FORBID_CONTENTS&&(ae===le&&(ae=fb(ae)),mb(ae,e.FORBID_CONTENTS)),oe&&(I[\"#text\"]=!0),J&&mb(I,[\"html\",\"head\",\"body\"]),I.table&&(mb(I,[\"tbody\"]),delete U.tbody),Ky&&Ky(e),_e=e)},ke=mb({},[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\"]),De=mb({},[\"foreignobject\",\"desc\",\"title\",\"annotation-xml\"]),Se=mb({},[\"title\",\"style\",\"font\",\"a\",\"script\"]),Ae=mb({},vb);mb(Ae,yb),mb(Ae,bb);var Me=mb({},_b);mb(Me,wb);var Le=function(e){var t=b(e);t&&t.tagName||(t={namespaceURI:pe,tagName:\"template\"});var n=ib(e.tagName),r=ib(t.tagName);return e.namespaceURI===fe?t.namespaceURI===pe?\"svg\"===n:t.namespaceURI===me?\"svg\"===n&&(\"annotation-xml\"===r||ke[r]):Boolean(Ae[n]):e.namespaceURI===me?t.namespaceURI===pe?\"math\"===n:t.namespaceURI===fe?\"math\"===n&&De[r]:Boolean(Me[n]):e.namespaceURI===pe&&(!(t.namespaceURI===fe&&!De[r])&&(!(t.namespaceURI===me&&!ke[r])&&(!Me[n]&&(Se[n]||!Ae[n]))))},Ee=function(e){ob(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=x}catch(t){e.remove()}}},Te=function(e,t){try{ob(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){ob(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),\"is\"===e&&!j[e])if(ee||te)try{Ee(t)}catch(e){}else try{t.setAttribute(e,\"\")}catch(e){}},Fe=function(e){var t,n;if(Z)e=\"<remove></remove>\"+e;else{var r=sb(e,/^[\\r\\n\\t ]+/);n=r&&r[0]}\"application/xhtml+xml\"===T&&(e='<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>'+e+\"</body></html>\");var i=w?w.createHTML(e):e;if(ge===pe)try{t=(new m).parseFromString(i,T)}catch(e){}if(!t||!t.documentElement){t=k.createDocument(ge,\"template\",null);try{t.documentElement.innerHTML=ve?\"\":i}catch(e){}}var s=t.body||t.documentElement;return e&&n&&s.insertBefore(o.createTextNode(n),s.childNodes[0]||null),ge===pe?A.call(t,J?\"html\":\"body\")[0]:J?t.documentElement:s},Oe=function(e){return D.call(e.ownerDocument||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT,null,!1)},Be=function(e){return e instanceof h&&(\"string\"!=typeof e.nodeName||\"string\"!=typeof e.textContent||\"function\"!=typeof e.removeChild||!(e.attributes instanceof d)||\"function\"!=typeof e.removeAttribute||\"function\"!=typeof e.setAttribute||\"string\"!=typeof e.namespaceURI||\"function\"!=typeof e.insertBefore)},Re=function(e){return\"object\"===Yy(a)?e instanceof a:e&&\"object\"===Yy(e)&&\"number\"==typeof e.nodeType&&\"string\"==typeof e.nodeName},$e=function(e,t,r){E[e]&&nb(E[e],(function(e){e.call(n,t,r,_e)}))},Ne=function(e){var t;if($e(\"beforeSanitizeElements\",e,null),Be(e))return Ee(e),!0;if(ub(/[\\u0080-\\uFFFF]/,e.nodeName))return Ee(e),!0;var r=F(e.nodeName);if($e(\"uponSanitizeElement\",e,{tagName:r,allowedTags:I}),e.hasChildNodes()&&!Re(e.firstElementChild)&&(!Re(e.content)||!Re(e.content.firstElementChild))&&ub(/<[/\\w]/g,e.innerHTML)&&ub(/<[/\\w]/g,e.textContent))return Ee(e),!0;if(\"select\"===r&&ub(/<template/i,e.innerHTML))return Ee(e),!0;if(!I[r]||U[r]){if(!U[r]&&Pe(r)){if(z.tagNameCheck instanceof RegExp&&ub(z.tagNameCheck,r))return!1;if(z.tagNameCheck instanceof Function&&z.tagNameCheck(r))return!1}if(oe&&!ae[r]){var o=b(e)||e.parentNode,i=y(e)||e.childNodes;if(i&&o)for(var s=i.length-1;s>=0;--s)o.insertBefore(g(i[s],!0),v(e))}return Ee(e),!0}return e instanceof l&&!Le(e)?(Ee(e),!0):\"noscript\"!==r&&\"noembed\"!==r||!ub(/<\\/no(script|embed)/i,e.innerHTML)?(X&&3===e.nodeType&&(t=e.textContent,t=ab(t,O,\" \"),t=ab(t,B,\" \"),e.textContent!==t&&(ob(n.removed,{element:e.cloneNode()}),e.textContent=t)),$e(\"afterSanitizeElements\",e,null),!1):(Ee(e),!0)},Ye=function(e,t,n){if(re&&(\"id\"===t||\"name\"===t)&&(n in o||n in we))return!1;if(G&&!V[t]&&ub(R,t));else if(q&&ub($,t));else if(!j[t]||V[t]){if(!(Pe(e)&&(z.tagNameCheck instanceof RegExp&&ub(z.tagNameCheck,e)||z.tagNameCheck instanceof Function&&z.tagNameCheck(e))&&(z.attributeNameCheck instanceof RegExp&&ub(z.attributeNameCheck,t)||z.attributeNameCheck instanceof Function&&z.attributeNameCheck(t))||\"is\"===t&&z.allowCustomizedBuiltInElements&&(z.tagNameCheck instanceof RegExp&&ub(z.tagNameCheck,n)||z.tagNameCheck instanceof Function&&z.tagNameCheck(n))))return!1}else if(de[t]);else if(ub(P,ab(n,Y,\"\")));else if(\"src\"!==t&&\"xlink:href\"!==t&&\"href\"!==t||\"script\"===e||0!==lb(n,\"data:\")||!ce[e]){if(K&&!ub(N,ab(n,Y,\"\")));else if(n)return!1}else;return!0},Pe=function(e){return e.indexOf(\"-\")>0},Ie=function(e){var t,n,r,o;$e(\"beforeSanitizeAttributes\",e,null);var i=e.attributes;if(i){var s={attrName:\"\",attrValue:\"\",keepAttr:!0,allowedAttributes:j};for(o=i.length;o--;){var a=t=i[o],l=a.name,c=a.namespaceURI;n=\"value\"===l?t.value:cb(t.value),r=F(l);var u=n;if(s.attrName=r,s.attrValue=n,s.keepAttr=!0,s.forceKeepAttr=void 0,$e(\"uponSanitizeAttribute\",e,s),n=s.attrValue,!s.forceKeepAttr)if(s.keepAttr)if(ub(/\\/>/i,n))Te(l,e);else{X&&(n=ab(n,O,\" \"),n=ab(n,B,\" \"));var d=F(e.nodeName);if(Ye(d,r,n)){if(n!==u)try{c?e.setAttributeNS(c,l,n):e.setAttribute(l,n)}catch(t){Te(l,e)}}else Te(l,e)}else Te(l,e)}$e(\"afterSanitizeAttributes\",e,null)}},He=function e(t){var n,r=Oe(t);for($e(\"beforeSanitizeShadowDOM\",t,null);n=r.nextNode();)$e(\"uponSanitizeShadowNode\",n,null),Ne(n)||(n.content instanceof i&&e(n.content),Ie(n));$e(\"afterSanitizeShadowDOM\",t,null)};return n.sanitize=function(e,o){var s,l,c,u,d;if((ve=!e)&&(e=\"\\x3c!--\\x3e\"),\"string\"!=typeof e&&!Re(e)){if(\"function\"!=typeof e.toString)throw db(\"toString is not a function\");if(\"string\"!=typeof(e=e.toString()))throw db(\"dirty is not a string, aborting\")}if(!n.isSupported){if(\"object\"===Yy(t.toStaticHTML)||\"function\"==typeof t.toStaticHTML){if(\"string\"==typeof e)return t.toStaticHTML(e);if(Re(e))return t.toStaticHTML(e.outerHTML)}return e}if(Q||Ce(o),n.removed=[],\"string\"==typeof e&&(ie=!1),ie){if(e.nodeName){var h=F(e.nodeName);if(!I[h]||U[h])throw db(\"root node is forbidden and cannot be sanitized in-place\")}}else if(e instanceof a)1===(l=(s=Fe(\"\\x3c!----\\x3e\")).ownerDocument.importNode(e,!0)).nodeType&&\"BODY\"===l.nodeName||\"HTML\"===l.nodeName?s=l:s.appendChild(l);else{if(!ee&&!X&&!J&&-1===e.indexOf(\"<\"))return w&&ne?w.createHTML(e):e;if(!(s=Fe(e)))return ee?null:ne?x:\"\"}s&&Z&&Ee(s.firstChild);for(var m=Oe(ie?e:s);c=m.nextNode();)3===c.nodeType&&c===u||Ne(c)||(c.content instanceof i&&He(c.content),Ie(c),u=c);if(u=null,ie)return e;if(ee){if(te)for(d=S.call(s.ownerDocument);s.firstChild;)d.appendChild(s.firstChild);else d=s;return j.shadowroot&&(d=M.call(r,d,!0)),d}var f=J?s.outerHTML:s.innerHTML;return J&&I[\"!doctype\"]&&s.ownerDocument&&s.ownerDocument.doctype&&s.ownerDocument.doctype.name&&ub(Bb,s.ownerDocument.doctype.name)&&(f=\"<!DOCTYPE \"+s.ownerDocument.doctype.name+\">\\n\"+f),X&&(f=ab(f,O,\" \"),f=ab(f,B,\" \")),w&&ne?w.createHTML(f):f},n.setConfig=function(e){Ce(e),Q=!0},n.clearConfig=function(){_e=null,Q=!1},n.isValidAttribute=function(e,t,n){_e||Ce({});var r=F(e),o=F(t);return Ye(r,o,n)},n.addHook=function(e,t){\"function\"==typeof t&&(E[e]=E[e]||[],ob(E[e],t))},n.removeHook=function(e){if(E[e])return rb(E[e])},n.removeHooks=function(e){E[e]&&(E[e]=[])},n.removeAllHooks=function(){E={}},n}();const Yb=Ft.explode,Pb=()=>{const e={};return{addFilter:(t,n)=>{V(Yb(t),(t=>{ke(e,t)||(e[t]={name:t,callbacks:[]}),e[t].callbacks.push(n)}))},getFilters:()=>xe(e),removeFilter:(t,n)=>{V(Yb(t),(t=>{if(ke(e,t))if(x(n)){const r=e[t],o=K(r.callbacks,(e=>e!==n));o.length>0?r.callbacks=o:delete e[t]}else delete e[t]}))}}},Ib=(e,t,n)=>{e.addNodeFilter(\"font\",(e=>{V(e,(e=>{const r=t.parse(e.attr(\"style\")),o=e.attr(\"color\"),i=e.attr(\"face\"),s=e.attr(\"size\");o&&(r.color=o),i&&(r[\"font-family\"]=i),s&&Xe(s).each((e=>{r[\"font-size\"]=n[e-1]})),e.name=\"span\",e.attr(\"style\",t.serialize(r)),((e,t)=>{V(t,(t=>{e.attr(t,null)}))})(e,[\"color\",\"face\",\"size\"])}))}))},Hb=(e,t,n)=>{var r;const o=ji();t.convert_fonts_to_spans&&Ib(e,o,Ft.explode(null!==(r=t.font_size_legacy_values)&&void 0!==r?r:\"\")),((e,t,n)=>{e.addNodeFilter(\"strike\",(e=>{const r=\"html4\"!==t.type;V(e,(e=>{if(r)e.name=\"s\";else{const t=n.parse(e.attr(\"style\"));t[\"text-decoration\"]=\"line-through\",e.name=\"span\",e.attr(\"style\",n.serialize(t))}}))}))})(e,n,o)},jb=e=>{const[t,...n]=e.split(\",\"),r=n.join(\",\"),o=/data:([^/]+\\/[^;]+)(;.+)?/.exec(t);if(o){const e=\";base64\"===o[2],t=e?(e=>{const t=/([a-z0-9+\\/=\\s]+)/i.exec(e);return t?t[1]:\"\"})(r):decodeURIComponent(r);return Y.some({type:o[1],data:t,base64Encoded:e})}return Y.none()},Wb=(e,t,n=!0)=>{let r=t;if(n)try{r=atob(t)}catch(e){return Y.none()}const o=new Uint8Array(r.length);for(let e=0;e<o.length;e++)o[e]=r.charCodeAt(e);return Y.some(new Blob([o],{type:e}))},zb=e=>{return je(e,\"blob:\")?(e=>fetch(e).then((e=>e.ok?e.blob():Promise.reject())).catch((()=>Promise.reject(`Cannot convert ${e} to Blob. Resource might not exist or is inaccessible.`))))(e):je(e,\"data:\")?(t=e,new Promise(((e,n)=>{jb(t).bind((({type:e,data:t,base64Encoded:n})=>Wb(e,t,n))).fold((()=>n(\"Invalid data URI\")),e)}))):Promise.reject(\"Unknown URI format\");var t},Ub=e=>new Promise(((t,n)=>{const r=new FileReader;r.onloadend=()=>{t(r.result)},r.onerror=()=>{var e;n(null===(e=r.error)||void 0===e?void 0:e.message)},r.readAsDataURL(e)}));let Vb=0;const qb=(e,t,n)=>jb(e).bind((({data:e,type:r,base64Encoded:o})=>{if(t&&!o)return Y.none();{const t=o?e:btoa(e);return n(t,r)}})),Gb=(e,t,n)=>{const r=e.create((o||\"blobid\")+Vb++,t,n);var o;return e.add(r),r},Kb=(e,t,n=!1)=>qb(t,n,((t,n)=>Y.from(e.getByData(t,n)).orThunk((()=>Wb(n,t).map((n=>Gb(e,n,t))))))),Xb=(e,t)=>{const{blob_cache:n}=t;if(n){const t=e=>{const t=e.attr(\"src\");(e=>e.attr(\"src\")===Mt.transparentSrc||x(e.attr(\"data-mce-placeholder\")))(e)||(e=>x(e.attr(\"data-mce-bogus\")))(e)||w(t)||Kb(n,t,!0).each((t=>{e.attr(\"src\",t.blobUri())}))};e.addAttributeFilter(\"src\",(e=>V(e,t)))}},Jb=Ft.each,Qb=Ft.trim,Zb=[\"source\",\"protocol\",\"authority\",\"userInfo\",\"user\",\"password\",\"host\",\"port\",\"relative\",\"path\",\"directory\",\"file\",\"query\",\"anchor\"],e_={ftp:21,http:80,https:443,mailto:25},t_=[\"img\",\"video\"],n_=(e,t,n)=>{const r=(e=>{try{return decodeURIComponent(e)}catch(t){return unescape(e)}})(t);return!e.allow_script_urls&&(!!/((java|vb)script|mhtml):/i.test(r)||!e.allow_html_data_urls&&(/^data:image\\//i.test(r)?((e,t)=>x(e)?!e:!x(t)||!W(t_,t))(e.allow_svg_data_urls,n)&&/^data:image\\/svg\\+xml/i.test(r):/^data:/i.test(r)))};class r_{constructor(e,t={}){this.path=\"\",this.directory=\"\",e=Qb(e),this.settings=t;const n=t.base_uri,r=this;if(/^([\\w\\-]+):([^\\/]{2})/i.test(e)||/^\\s*#/.test(e))return void(r.source=e);const o=0===e.indexOf(\"//\");if(0!==e.indexOf(\"/\")||o||(e=(n&&n.protocol||\"http\")+\"://mce_host\"+e),!/^[\\w\\-]*:?\\/\\//.test(e)){const t=n?n.path:new r_(document.location.href).directory;if(\"\"===(null==n?void 0:n.protocol))e=\"//mce_host\"+r.toAbsPath(t,e);else{const o=/([^#?]*)([#?]?.*)/.exec(e);o&&(e=(n&&n.protocol||\"http\")+\"://mce_host\"+r.toAbsPath(t,o[1])+o[2])}}e=e.replace(/@@/g,\"(mce_at)\");const i=/^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?(\\[[a-zA-Z0-9:.%]+\\]|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(e);i&&Jb(Zb,((e,t)=>{let n=i[t];n&&(n=n.replace(/\\(mce_at\\)/g,\"@@\")),r[e]=n})),n&&(r.protocol||(r.protocol=n.protocol),r.userInfo||(r.userInfo=n.userInfo),r.port||\"mce_host\"!==r.host||(r.port=n.port),r.host&&\"mce_host\"!==r.host||(r.host=n.host),r.source=\"\"),o&&(r.protocol=\"\")}static parseDataUri(e){let t;const n=decodeURIComponent(e).split(\",\"),r=/data:([^;]+)/.exec(n[0]);return r&&(t=r[1]),{type:t,data:n[1]}}static isDomSafe(e,t,n={}){if(n.allow_script_urls)return!0;{const r=Mi.decode(e).replace(/[\\s\\u0000-\\u001F]+/g,\"\");return!n_(n,r,t)}}static getDocumentBaseUrl(e){var t;let n;return n=0!==e.protocol.indexOf(\"http\")&&\"file:\"!==e.protocol?null!==(t=e.href)&&void 0!==t?t:\"\":e.protocol+\"//\"+e.host+e.pathname,/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(n)&&(n=n.replace(/[\\?#].*$/,\"\").replace(/[\\/\\\\][^\\/]+$/,\"\"),/[\\/\\\\]$/.test(n)||(n+=\"/\")),n}setPath(e){const t=/^(.*?)\\/?(\\w+)?$/.exec(e);t&&(this.path=t[0],this.directory=t[1],this.file=t[2]),this.source=\"\",this.getURI()}toRelative(e){if(\"./\"===e)return e;const t=new r_(e,{base_uri:this});if(\"mce_host\"!==t.host&&this.host!==t.host&&t.host||this.port!==t.port||this.protocol!==t.protocol&&\"\"!==t.protocol)return t.getURI();const n=this.getURI(),r=t.getURI();if(n===r||\"/\"===n.charAt(n.length-1)&&n.substr(0,n.length-1)===r)return n;let o=this.toRelPath(this.path,t.path);return t.query&&(o+=\"?\"+t.query),t.anchor&&(o+=\"#\"+t.anchor),o}toAbsolute(e,t){const n=new r_(e,{base_uri:this});return n.getURI(t&&this.isSameOrigin(n))}isSameOrigin(e){if(this.host==e.host&&this.protocol==e.protocol){if(this.port==e.port)return!0;const t=this.protocol?e_[this.protocol]:null;if(t&&(this.port||t)==(e.port||t))return!0}return!1}toRelPath(e,t){let n,r,o=0,i=\"\";const s=e.substring(0,e.lastIndexOf(\"/\")).split(\"/\"),a=t.split(\"/\");if(s.length>=a.length)for(n=0,r=s.length;n<r;n++)if(n>=a.length||s[n]!==a[n]){o=n+1;break}if(s.length<a.length)for(n=0,r=a.length;n<r;n++)if(n>=s.length||s[n]!==a[n]){o=n+1;break}if(1===o)return t;for(n=0,r=s.length-(o-1);n<r;n++)i+=\"../\";for(n=o-1,r=a.length;n<r;n++)i+=n!==o-1?\"/\"+a[n]:a[n];return i}toAbsPath(e,t){let n=0;const r=/\\/$/.test(t)?\"/\":\"\",o=e.split(\"/\"),i=t.split(\"/\"),s=[];Jb(o,(e=>{e&&s.push(e)}));const a=[];for(let e=i.length-1;e>=0;e--)0!==i[e].length&&\".\"!==i[e]&&(\"..\"!==i[e]?n>0?n--:a.push(i[e]):n++);const l=s.length-n;let c;return c=l<=0?oe(a).join(\"/\"):s.slice(0,l).join(\"/\")+\"/\"+oe(a).join(\"/\"),0!==c.indexOf(\"/\")&&(c=\"/\"+c),r&&c.lastIndexOf(\"/\")!==c.length-1&&(c+=r),c}getURI(e=!1){let t;return this.source&&!e||(t=\"\",e||(this.protocol?t+=this.protocol+\"://\":t+=\"//\",this.userInfo&&(t+=this.userInfo+\"@\"),this.host&&(t+=this.host),this.port&&(t+=\":\"+this.port)),this.path&&(t+=this.path),this.query&&(t+=\"?\"+this.query),this.anchor&&(t+=\"#\"+this.anchor),this.source=t),this.source}}const o_=Ft.makeMap,i_=Ft.extend,s_={IN_PLACE:!0,ALLOW_UNKNOWN_PROTOCOLS:!0,ALLOWED_TAGS:[\"#comment\",\"#cdata-section\",\"body\"],ALLOWED_ATTR:[]},a_=Ft.makeMap(\"src,href,data,background,action,formaction,poster,xlink:href\"),l_=\"data-mce-type\",c_=(e,t)=>{const n=Nb(),r=t.getSpecialElements(),o=e.validate;let i=0;return n.addHook(\"uponSanitizeElement\",((n,s)=>{var a,l,c;8===n.nodeType&&!e.allow_conditional_comments&&/^\\[if/i.test(null!==(a=n.nodeValue)&&void 0!==a?a:\"\")&&(n.nodeValue=\" \"+n.nodeValue);const u=s.tagName;if(1!==n.nodeType||\"body\"===u)return;const d=dn.fromDom(n),h=u.toLowerCase(),m=Kt(d,l_),p=qt(d,\"data-mce-bogus\");if(!m&&f(p))return void(\"all\"===p?Zn(d):er(d));const g=t.getElementRule(h);if(!o||g){if(s.allowedTags[u]=!0,o&&g&&!m){if(V(null!==(l=g.attributesForced)&&void 0!==l?l:[],(e=>{Ut(d,e.name,\"{$uid}\"===e.value?\"mce_\"+i++:e.value)})),V(null!==(c=g.attributesDefault)&&void 0!==c?c:[],(e=>{Kt(d,e.name)||Ut(d,e.name,\"{$uid}\"===e.value?\"mce_\"+i++:e.value)})),g.attributesRequired&&!z(g.attributesRequired,(e=>Kt(d,e))))return void er(d);if(g.removeEmptyAttrs&&(e=>{const t=e.dom.attributes;return null==t||0===t.length})(d))return void er(d);g.outputName&&g.outputName!==h&&Ys(d,g.outputName)}}else ke(r,h)?Zn(d):er(d)})),n.addHook(\"uponSanitizeAttribute\",((n,r)=>{const i=n.tagName.toLowerCase(),{attrName:s,attrValue:a}=r;r.keepAttr=!o||t.isValid(i,s)||je(s,\"data-\")||je(s,\"aria-\"),s in a_&&n_(e,a,i)&&(r.keepAttr=!1),r.keepAttr?(r.allowedAttributes[s]=!0,s in t.getBoolAttrs()&&(r.attrValue=s),e.allow_svg_data_urls&&je(a,\"data:image/svg+xml\")&&(r.forceKeepAttr=!0)):!n.hasAttribute(l_)||\"id\"!==s&&\"class\"!==s&&\"style\"!==s||(r.forceKeepAttr=!0)})),n},u_=(e,t,n)=>{const r=e.name,o=r in n&&\"title\"!==r&&\"textarea\"!==r,i=t.childNodes;for(let t=0,r=i.length;t<r;t++){const r=i[t],s=new Bf(r.nodeName.toLowerCase(),r.nodeType);if(vr(r)){const e=r.attributes;for(let t=0,n=e.length;t<n;t++){const n=e[t];s.attr(n.name,n.value)}}else Sr(r)?(s.value=r.data,o&&(s.raw=!0)):(Lr(r)||Ar(r)||Mr(r))&&(s.value=r.data);u_(s,r,n),e.append(s)}},d_=(e,t,n,r)=>{const o=n.validate,i=t.getNonEmptyElements(),s=t.getWhitespaceElements(),a=i_(o_(\"script,style,head,html,body,title,meta,param\"),t.getBlockElements()),l=Pi(t),c=/[ \\t\\r\\n]+/g,u=/^[ \\t\\r\\n]+/,d=/[ \\t\\r\\n]+$/,h=e=>{let t=e.parent;for(;x(t);){if(t.name in s)return!0;t=t.parent}return!1},m=(t,n)=>{const o=n?t.prev:t.next;return!x(o)&&!w(t.parent)&&(t.parent.name in a&&(t.parent!==e||!0===r.isRootContent))};return[e=>{var t;if(3===e.type&&!h(e)){let n=null!==(t=e.value)&&void 0!==t?t:\"\";n=n.replace(c,\" \"),(((e,t)=>x(e)&&(e.name in t||\"br\"===e.name))(e.prev,a)||m(e,!0))&&(n=n.replace(u,\"\")),0===n.length?e.remove():e.value=n}},e=>{var n;if(1===e.type){const n=t.getElementRule(e.name);if(o&&n){const o=nv(t,i,s,e);n.paddInEmptyBlock&&o&&(e=>{let n=e;for(;x(n);){if(n.name in l)return nv(t,i,s,n);n=n.parent}return!1})(e)?ev(0,r,a,e):n.removeEmpty&&o?a[e.name]?e.remove():e.unwrap():n.paddEmpty&&(o||(e=>{var t;return tv(e,\"#text\")&&(null===(t=null==e?void 0:e.firstChild)||void 0===t?void 0:t.value)===go})(e))&&ev(0,r,a,e)}}else if(3===e.type&&!h(e)){let t=null!==(n=e.value)&&void 0!==n?n:\"\";(e.next&&a[e.next.name]||m(e,!1))&&(t=t.replace(d,\"\")),0===t.length?e.remove():e.value=t}}]},h_=(e={},t=Hi())=>{const n=Pb(),r=Pb(),o={validate:!0,root_name:\"body\",...e},i=new DOMParser,s=c_(o,t),a=(e,n,r=\"html\")=>{const a=\"xhtml\"===r?\"application/xhtml+xml\":\"text/html\",l=ke(t.getSpecialElements(),n.toLowerCase()),c=l?`<${n}>${e}</${n}>`:e,u=\"xhtml\"===r?`<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>${c}</body></html>`:`<body>${c}</body>`,d=i.parseFromString(u,a).body;return s.sanitize(d,((e,t)=>{const n={...s_};return n.PARSER_MEDIA_TYPE=t,e.allow_script_urls?n.ALLOWED_URI_REGEXP=/.*/:e.allow_html_data_urls&&(n.ALLOWED_URI_REGEXP=/^(?!(\\w+script|mhtml):)/i),n})(o,a)),s.removed=[],l?d.firstChild:d},l=n.addFilter,c=n.getFilters,u=n.removeFilter,d=r.addFilter,h=r.getFilters,m=r.removeFilter,f={schema:t,addAttributeFilter:d,getAttributeFilters:h,removeAttributeFilter:m,addNodeFilter:l,getNodeFilters:c,removeNodeFilter:u,parse:(e,n={})=>{var r;const i=o.validate,s=null!==(r=n.context)&&void 0!==r?r:o.root_name,l=a(e,s,n.format),u=new Bf(s,11);u_(u,l,t.getSpecialElements());const[d,m]=d_(u,t,o,n),f=[],p=i?e=>((e,n)=>{const r=e.parent;r&&t.children[e.name]&&!t.isValidChild(r.name,e.name)&&n.push(e)})(e,f):S,g={nodes:{},attributes:{}},v=e=>Jg(c(),h(),e,g);if(((e,t,n)=>{const r=[];for(let n=e,o=n;n;o=n,n=n.walk()){const i=n;V(t,(e=>e(i))),w(i.parent)&&i!==e?n=o:r.push(i)}for(let e=r.length-1;e>=0;e--){const t=r[e];V(n,(e=>e(t)))}})(u,[d,v],[m,p]),f.reverse(),i&&f.length>0)if(n.context){const{pass:e,fail:r}=G(f,(e=>e.parent===u));ov(r,t,v),n.invalid=e.length>0}else ov(f,t,v);const y=((e,t)=>{var n;const r=null!==(n=t.forced_root_block)&&void 0!==n?n:e.forced_root_block;return!1===r?\"\":!0===r?\"p\":r})(o,n);return y&&(\"body\"===u.name||n.isRootContent)&&((e,n)=>{const r=i_(o_(\"script,style,head,html,body,title,meta,param\"),t.getBlockElements()),i=/^[ \\t\\r\\n]+/,s=/[ \\t\\r\\n]+$/;let a=e.firstChild,l=null;const c=e=>{var t,n;e&&(a=e.firstChild,a&&3===a.type&&(a.value=null===(t=a.value)||void 0===t?void 0:t.replace(i,\"\")),a=e.lastChild,a&&3===a.type&&(a.value=null===(n=a.value)||void 0===n?void 0:n.replace(s,\"\")))};if(t.isValidChild(e.name,n.toLowerCase())){for(;a;){const t=a.next;3===a.type||1===a.type&&\"p\"!==a.name&&!r[a.name]&&!a.attr(l_)?(l||(l=new Bf(n,1),l.attr(o.forced_root_block_attrs),e.insert(l,a)),l.append(a)):(c(l),l=null),a=t}c(l)}})(u,y),n.invalid||Qg(g,n),u}};return((e,t)=>{const n=e.schema;t.remove_trailing_brs&&e.addNodeFilter(\"br\",((e,t,r)=>{const o=Ft.extend({},n.getBlockElements()),i=n.getNonEmptyElements(),s=n.getWhitespaceElements();o.body=1;for(let t=0,a=e.length;t<a;t++){let a=e[t],l=a.parent;if(l&&o[l.name]&&a===l.lastChild){let e=a.prev;for(;e;){const t=e.name;if(\"span\"!==t||\"bookmark\"!==e.attr(\"data-mce-type\")){\"br\"===t&&(a=null);break}e=e.prev}if(a&&(a.remove(),nv(n,i,s,l))){const e=n.getElementRule(l.name);e&&(e.removeEmpty?l.remove():e.paddEmpty&&ev(0,r,o,l))}}else{let e=a;for(;l&&l.firstChild===e&&l.lastChild===e&&(e=l,!o[l.name]);)l=l.parent;if(e===l){const e=new Bf(\"#text\",3);e.value=go,a.replace(e)}}}})),e.addAttributeFilter(\"href\",(e=>{let n=e.length;const r=e=>{const t=e?Ft.trim(e):\"\";return/\\b(noopener)\\b/g.test(t)?t:(e=>e.split(\" \").filter((e=>e.length>0)).concat([\"noopener\"]).sort().join(\" \"))(t)};if(!t.allow_unsafe_link_target)for(;n--;){const t=e[n];\"a\"===t.name&&\"_blank\"===t.attr(\"target\")&&t.attr(\"rel\",r(t.attr(\"rel\")))}})),t.allow_html_in_named_anchor||e.addAttributeFilter(\"id,name\",(e=>{let t,n,r,o,i=e.length;for(;i--;)if(o=e[i],\"a\"===o.name&&o.firstChild&&!o.attr(\"href\"))for(r=o.parent,t=o.lastChild;t&&r;)n=t.prev,r.insert(t,o),t=n})),t.fix_list_elements&&e.addNodeFilter(\"ul,ol\",(e=>{let t,n,r=e.length;for(;r--;)if(t=e[r],n=t.parent,n&&(\"ul\"===n.name||\"ol\"===n.name))if(t.prev&&\"li\"===t.prev.name)t.prev.append(t);else{const e=new Bf(\"li\",1);e.attr(\"style\",\"list-style-type: none\"),t.wrap(e)}}));const r=n.getValidClasses();t.validate&&r&&e.addAttributeFilter(\"class\",(e=>{var t;let n=e.length;for(;n--;){const o=e[n],i=null!==(t=o.attr(\"class\"))&&void 0!==t?t:\"\",s=Ft.explode(i,\" \");let a=\"\";for(let e=0;e<s.length;e++){const t=s[e];let n=!1,i=r[\"*\"];i&&i[t]&&(n=!0),i=r[o.name],!n&&i&&i[t]&&(n=!0),n&&(a&&(a+=\" \"),a+=t)}a.length||(a=null),o.attr(\"class\",a)}})),Xb(e,t)})(f,o),((e,t,n)=>{t.inline_styles&&Hb(e,t,n)})(f,o,t),f},m_=(e,t)=>{const n=(e=>_v(e)?Wf({validate:!1}).serialize(e):e)(e),r=t(n);if(r.isDefaultPrevented())return r;if(_v(e)){if(r.content!==n){const t=h_({validate:!1,forced_root_block:!1}).parse(r.content,{context:e.name});return{...r,content:t}}return{...r,content:e}}return r},f_=(e,t)=>{if(t.no_events)return Ha.value(t);{const n=((e,t)=>e.dispatch(\"BeforeGetContent\",t))(e,t);return n.isDefaultPrevented()?Ha.error($h(e,{content:\"\",...n}).content):Ha.value(n)}},p_=(e,t,n)=>{if(n.no_events)return t;return m_(t,(t=>$h(e,{...n,content:t}))).content},g_=(e,t)=>{if(t.no_events)return Ha.value(t);{const n=m_(t.content,(n=>((e,t)=>e.dispatch(\"BeforeSetContent\",t))(e,{...t,content:n})));return n.isDefaultPrevented()?(Rh(e,n),Ha.error(void 0)):Ha.value(n)}},v_=(e,t,n)=>{n.no_events||Rh(e,{...n,content:t})},y_=(e,t,n)=>({element:e,width:t,rows:n}),b_=(e,t)=>({element:e,cells:t}),__=(e,t)=>({x:e,y:t}),w_=(e,t)=>Gt(e,t).bind(Xe).getOr(1),x_=(e,t,n)=>{const r=e.rows;return!!(r[n]?r[n].cells:[])[t]},C_=e=>J(e,((e,t)=>t.cells.length>e?t.cells.length:e),0),k_=(e,t)=>{const n=e.rows;for(let e=0;e<n.length;e++){const r=n[e].cells;for(let n=0;n<r.length;n++)if(pn(r[n],t))return Y.some(__(n,e))}return Y.none()},D_=(e,t,n,r,o)=>{const i=[],s=e.rows;for(let e=n;e<=o;e++){const n=s[e].cells,o=t<r?n.slice(t,r+1):n.slice(r,t+1);i.push(b_(s[e].element,o))}return i},S_=e=>{const t=y_($s(e),0,[]);return V(bo(e,\"tr\"),((e,n)=>{V(bo(e,\"td,th\"),((r,o)=>{((e,t,n,r,o)=>{const i=w_(o,\"rowspan\"),s=w_(o,\"colspan\"),a=e.rows;for(let e=n;e<n+i;e++){a[e]||(a[e]=b_(Ns(r),[]));for(let r=t;r<t+s;r++)a[e].cells[r]=e===n&&r===t?o:$s(o)}})(t,((e,t,n)=>{for(;x_(e,t,n);)t++;return t})(t,o,n),n,e,r)}))})),y_(t.element,C_(t.rows),t.rows)},A_=e=>((e,t)=>{const n=$s(e.element),r=dn.fromTag(\"tbody\");return Jn(r,t),Xn(n,r),n})(e,(e=>U(e.rows,(e=>{const t=U(e.cells,(e=>{const t=Ns(e);return Xt(t,\"colspan\"),Xt(t,\"rowspan\"),t})),n=$s(e.element);return Jn(n,t),n})))(e)),M_=(e,t,n)=>k_(e,t).bind((t=>k_(e,n).map((n=>((e,t,n)=>{const r=t.x,o=t.y,i=n.x,s=n.y,a=o<s?D_(e,r,o,i,s):D_(e,r,s,i,o);return y_(e.element,C_(a),a)})(e,t,n))))),L_=(e,t)=>Z(e,(e=>\"li\"===$t(e)&&Od(e,t))).fold(L([]),(t=>(e=>Z(e,(e=>\"ul\"===$t(e)||\"ol\"===$t(e))))(e).map((e=>{const t=dn.fromTag($t(e)),n=_e(Un(e),((e,t)=>je(t,\"list-style\")));return Hn(t,n),[dn.fromTag(\"li\"),t]})).getOr([]))),E_=(e,t)=>{const n=dn.fromDom(t.commonAncestorContainer),r=hp(n,e),o=K(r,mo),i=L_(r,t),s=o.concat(i.length?i:(e=>ao(e)?_n(e).filter(so).fold(L([]),(t=>[e,t])):so(e)?[e]:[])(n));return U(s,$s)},T_=()=>sm([]),F_=(e,t)=>((e,t)=>{const n=J(t,((e,t)=>(Xn(t,e),t)),e);return t.length>0?sm([n]):n})(dn.fromDom(t.cloneContents()),E_(e,t)),O_=(e,t)=>((e,t)=>Gr(t,\"table\",F(pn,e)))(e,t[0]).bind((e=>{const n=t[0],r=t[t.length-1],o=S_(e);return M_(o,n,r).map((e=>sm([A_(e)])))})).getOrThunk(T_),B_=(e,t)=>{const n=Md(t,e);return n.length>0?O_(e,n):((e,t)=>t.length>0&&t[0].collapsed?T_():F_(e,t[0]))(e,t)},R_=(e,t)=>t>=0&&t<e.length&&vd(e.charAt(t)),$_=e=>Lo(e.innerText),N_=(e,t)=>{if(\"text\"===t.format)return(e=>Y.from(e.selection.getRng()).map((t=>{var n;const r=Y.from(e.dom.getParent(t.commonAncestorContainer,e.dom.isBlock)),o=e.getBody(),i=(e=>e.map((e=>e.nodeName)).getOr(\"div\").toLowerCase())(r),s=e.dom.add(o,i,{\"data-mce-bogus\":\"all\",style:\"overflow: hidden; opacity: 0;\"},t.cloneContents()),a=$_(s),l=Lo(null!==(n=s.textContent)&&void 0!==n?n:\"\");if(e.dom.remove(s),R_(l,0)||R_(l,l.length-1)){const e=r.getOr(o),t=$_(e),n=t.indexOf(a);return-1===n?a:(R_(t,n-1)?\" \":\"\")+a+(R_(t,n+a.length)?\" \":\"\")}return a})).getOr(\"\"))(e);{const n=((e,t)=>{const n=e.selection.getRng(),r=e.dom.create(\"body\"),o=e.selection.getSel(),i=xf(e,Sd(o)),s=t.contextual?B_(dn.fromDom(e.getBody()),i).dom:n.cloneContents();return s&&r.appendChild(s),e.selection.serializer.serialize(r,t)})(e,t);return\"tree\"===t.format?n:e.selection.isCollapsed()?\"\":n}},Y_=e=>vr(e)?e.outerHTML:Sr(e)?Mi.encodeRaw(e.data,!1):Lr(e)?\"\\x3c!--\"+e.data+\"--\\x3e\":\"\",P_=(e,t,n)=>{const r=(e=>{let t;const n=document.createElement(\"div\"),r=document.createDocumentFragment();for(e&&(n.innerHTML=e);t=n.firstChild;)r.appendChild(t);return r})(t);if(e.hasChildNodes()&&n<e.childNodes.length){const t=e.childNodes[n];e.insertBefore(r,t)}else e.appendChild(r)},I_=(e,t)=>(((e,t)=>{let n=0;V(e,(e=>{0===e[0]?n++:1===e[0]?(P_(t,e[1],n),n++):2===e[0]&&((e,t)=>{if(e.hasChildNodes()&&t<e.childNodes.length){const n=e.childNodes[t];e.removeChild(n)}})(t,n)}))})(((e,t)=>{const n=e.length+t.length+2,r=new Array(n),o=new Array(n),i=(n,r,o,s,l)=>{const c=a(n,r,o,s);if(null===c||c.start===r&&c.diag===r-s||c.end===n&&c.diag===n-o){let i=n,a=o;for(;i<r||a<s;)i<r&&a<s&&e[i]===t[a]?(l.push([0,e[i]]),++i,++a):r-n>s-o?(l.push([2,e[i]]),++i):(l.push([1,t[a]]),++a)}else{i(n,c.start,o,c.start-c.diag,l);for(let t=c.start;t<c.end;++t)l.push([0,e[t]]);i(c.end,r,c.end-c.diag,s,l)}},s=(n,r,o,i)=>{let s=n;for(;s-r<i&&s<o&&e[s]===t[s-r];)++s;return((e,t,n)=>({start:e,end:t,diag:n}))(n,s,r)},a=(n,i,a,l)=>{const c=i-n,u=l-a;if(0===c||0===u)return null;const d=c-u,h=u+c,m=(h%2==0?h:h+1)/2;let f,p,g,v,y;for(r[1+m]=n,o[1+m]=i+1,f=0;f<=m;++f){for(p=-f;p<=f;p+=2){for(g=p+m,p===-f||p!==f&&r[g-1]<r[g+1]?r[g]=r[g+1]:r[g]=r[g-1]+1,v=r[g],y=v-n+a-p;v<i&&y<l&&e[v]===t[y];)r[g]=++v,++y;if(d%2!=0&&d-f<=p&&p<=d+f&&o[g-d]<=r[g])return s(o[g-d],p+n-a,i,l)}for(p=d-f;p<=d+f;p+=2){for(g=p+m-d,p===d-f||p!==d+f&&o[g+1]<=o[g-1]?o[g]=o[g+1]-1:o[g]=o[g-1],v=o[g]-1,y=v-n+a-p;v>=n&&y>=a&&e[v]===t[y];)o[g]=v--,y--;if(d%2==0&&-f<=p&&p<=f&&o[g]<=r[g+d])return s(o[g],p+n-a,i,l)}}return null},l=[];return i(0,e.length,0,t.length,l),l})(U(de(t.childNodes),Y_),e),t),t),H_=Re((()=>document.implementation.createHTMLDocument(\"undo\"))),j_=e=>{const t=(n=e.getBody(),K(U(de(n.childNodes),Y_),(e=>e.length>0)));var n;const r=ne(t,(t=>{const n=Nf(e.serializer,t);return n.length>0?[n]:[]})),o=r.join(\"\");return(e=>-1!==e.indexOf(\"</iframe>\"))(o)?(e=>({type:\"fragmented\",fragments:e,content:\"\",bookmark:null,beforeBookmark:null}))(r):(e=>({type:\"complete\",fragments:null,content:e,bookmark:null,beforeBookmark:null}))(o)},W_=(e,t,n)=>{const r=n?t.beforeBookmark:t.bookmark;\"fragmented\"===t.type?I_(t.fragments,e.getBody()):e.setContent(t.content,{format:\"raw\",no_selection:!x(r)||!rd(r)||!r.isFakeCaret}),r&&e.selection.moveToBookmark(r)},z_=e=>\"fragmented\"===e.type?e.fragments.join(\"\"):e.content,U_=e=>{const t=dn.fromTag(\"body\",H_());return nr(t,z_(e)),V(bo(t,\"*[data-mce-bogus]\"),er),tr(t)},V_=(e,t)=>!(!e||!t)&&(!!((e,t)=>z_(e)===z_(t))(e,t)||((e,t)=>U_(e)===U_(t))(e,t)),q_=e=>0===e.get(),G_=(e,t,n)=>{q_(n)&&(e.typing=t)},K_=(e,t)=>{e.typing&&(G_(e,!1,t),e.add())},X_=e=>({init:{bindEvents:S},undoManager:{beforeChange:(t,n)=>((e,t,n)=>{q_(t)&&n.set(Ya(e.selection))})(e,t,n),add:(t,n,r,o,i,s)=>((e,t,n,r,o,i,s)=>{const a=j_(e),l=Ft.extend(i||{},a);if(!q_(r)||e.removed)return null;const c=t.data[n.get()];if(e.dispatch(\"BeforeAddUndo\",{level:l,lastLevel:c,originalEvent:s}).isDefaultPrevented())return null;if(c&&V_(c,l))return null;t.data[n.get()]&&o.get().each((e=>{t.data[n.get()].beforeBookmark=e}));const u=nc(e);if(u&&t.data.length>u){for(let e=0;e<t.data.length-1;e++)t.data[e]=t.data[e+1];t.data.length--,n.set(t.data.length)}l.bookmark=Ya(e.selection),n.get()<t.data.length-1&&(t.data.length=n.get()+1),t.data.push(l),n.set(t.data.length-1);const d={level:l,lastLevel:c,originalEvent:s};return n.get()>0?(e.setDirty(!0),e.dispatch(\"AddUndo\",d),e.dispatch(\"change\",d)):e.dispatch(\"AddUndo\",d),l})(e,t,n,r,o,i,s),undo:(t,n,r)=>((e,t,n,r)=>{let o;return t.typing&&(t.add(),t.typing=!1,G_(t,!1,n)),r.get()>0&&(r.set(r.get()-1),o=t.data[r.get()],W_(e,o,!0),e.setDirty(!0),e.dispatch(\"Undo\",{level:o})),o})(e,t,n,r),redo:(t,n)=>((e,t,n)=>{let r;return t.get()<n.length-1&&(t.set(t.get()+1),r=n[t.get()],W_(e,r,!1),e.setDirty(!0),e.dispatch(\"Redo\",{level:r})),r})(e,t,n),clear:(t,n)=>((e,t,n)=>{t.data=[],n.set(0),t.typing=!1,e.dispatch(\"ClearUndos\")})(e,t,n),reset:e=>(e=>{e.clear(),e.add()})(e),hasUndo:(t,n)=>((e,t,n)=>n.get()>0||t.typing&&t.data[0]&&!V_(j_(e),t.data[0]))(e,t,n),hasRedo:(e,t)=>((e,t)=>t.get()<e.data.length-1&&!e.typing)(e,t),transact:(e,t,n)=>((e,t,n)=>(K_(e,t),e.beforeChange(),e.ignore(n),e.add()))(e,t,n),ignore:(e,t)=>((e,t)=>{try{e.set(e.get()+1),t()}finally{e.set(e.get()-1)}})(e,t),extra:(t,n,r,o)=>((e,t,n,r,o)=>{if(t.transact(r)){const r=t.data[n.get()].bookmark,i=t.data[n.get()-1];W_(e,i,!0),t.transact(o)&&(t.data[n.get()-1].beforeBookmark=r)}})(e,t,n,r,o)},formatter:{match:(t,n,r,o)=>Fv(e,t,n,r,o),matchAll:(t,n)=>((e,t,n)=>{const r=[],o={},i=e.selection.getStart();return e.dom.getParent(i,(i=>{for(let s=0;s<t.length;s++){const a=t[s];!o[a]&&Tv(e,i,a,n)&&(o[a]=!0,r.push(a))}}),e.dom.getRoot()),r})(e,t,n),matchNode:(t,n,r,o)=>Tv(e,t,n,r,o),canApply:t=>((e,t)=>{const n=e.formatter.get(t),r=e.dom;if(n){const t=e.selection.getStart(),o=Zd(r,t);for(let e=n.length-1;e>=0;e--){const t=n[e];if(!rh(t))return!0;for(let e=o.length-1;e>=0;e--)if(r.is(o[e],t.selector))return!0}}return!1})(e,t),closest:t=>Ov(e,t),apply:(t,n,r)=>Ty(e,t,n,r),remove:(t,n,r,o)=>Sy(e,t,n,r,o),toggle:(t,n,r)=>((e,t,n,r)=>{const o=e.formatter.get(t);o&&(!Fv(e,t,n,r)||\"toggle\"in o[0]&&!o[0].toggle?Ty(e,t,n,r):Sy(e,t,n,r))})(e,t,n,r),formatChanged:(t,n,r,o,i)=>Ny(e,t,n,r,o,i)},editor:{getContent:t=>((e,t)=>Y.from(e.getBody()).fold(L(\"tree\"===t.format?new Bf(\"body\",11):\"\"),(n=>If(e,t,n))))(e,t),setContent:(t,n)=>xv(e,t,n),insertContent:(t,n)=>bv(e,t,n),addVisual:t=>((e,t)=>{const n=e.dom,r=x(t)?t:e.getBody();V(n.select(\"table,a\",r),(t=>{switch(t.nodeName){case\"TABLE\":const r=uc(e),o=n.getAttrib(t,\"border\");o&&\"0\"!==o||!e.hasVisual?n.removeClass(t,r):n.addClass(t,r);break;case\"A\":if(!n.getAttrib(t,\"href\")){const r=n.getAttrib(t,\"name\")||t.id,o=dc(e);r&&e.hasVisual?n.addClass(t,o):n.removeClass(t,o)}}})),e.dispatch(\"VisualAid\",{element:t,hasVisual:e.hasVisual})})(e,t)},selection:{getContent:(t,n)=>((e,t,n={})=>{const r=((e,t)=>({...e,format:t,get:!0,selection:!0,getInner:!0}))(n,t);return f_(e,r).fold(E,(t=>{const n=N_(e,t);return p_(e,n,t)}))})(e,t,n)},autocompleter:{addDecoration:t=>Mf(e,t),removeDecoration:()=>((e,t)=>Lf(t).each((t=>{const n=e.selection.getBookmark();er(t),e.selection.moveToBookmark(n)})))(e,dn.fromDom(e.getBody()))},raw:{getModel:()=>Y.none()}}),J_=e=>ke(e.plugins,\"rtc\"),Q_=e=>{const t=e;return(e=>Ce(e.plugins,\"rtc\").bind((e=>Y.from(e.setup))))(e).fold((()=>(t.rtcInstance=X_(e),Y.none())),(e=>(t.rtcInstance=(()=>{const e=L(null),t=L(\"\");return{init:{bindEvents:S},undoManager:{beforeChange:S,add:e,undo:e,redo:e,clear:S,reset:S,hasUndo:$,hasRedo:$,transact:e,ignore:S,extra:S},formatter:{match:$,matchAll:L([]),matchNode:L(void 0),canApply:$,closest:t,apply:S,remove:S,toggle:S,formatChanged:L({unbind:S})},editor:{getContent:t,setContent:L({content:\"\",html:\"\"}),insertContent:L(\"\"),addVisual:S},selection:{getContent:t},autocompleter:{addDecoration:S,removeDecoration:S},raw:{getModel:L(Y.none())}}})(),Y.some((()=>e().then((e=>(t.rtcInstance=(e=>{const t=e=>p(e)?e:{},{init:n,undoManager:r,formatter:o,editor:i,selection:s,autocompleter:a,raw:l}=e;return{init:{bindEvents:n.bindEvents},undoManager:{beforeChange:r.beforeChange,add:r.add,undo:r.undo,redo:r.redo,clear:r.clear,reset:r.reset,hasUndo:r.hasUndo,hasRedo:r.hasRedo,transact:(e,t,n)=>r.transact(n),ignore:(e,t)=>r.ignore(t),extra:(e,t,n,o)=>r.extra(n,o)},formatter:{match:(e,n,r,i)=>o.match(e,t(n),i),matchAll:o.matchAll,matchNode:o.matchNode,canApply:e=>o.canApply(e),closest:e=>o.closest(e),apply:(e,n,r)=>o.apply(e,t(n)),remove:(e,n,r,i)=>o.remove(e,t(n)),toggle:(e,n,r)=>o.toggle(e,t(n)),formatChanged:(e,t,n,r,i)=>o.formatChanged(t,n,r,i)},editor:{getContent:e=>i.getContent(e),setContent:(e,t)=>({content:i.setContent(e,t),html:\"\"}),insertContent:(e,t)=>(i.insertContent(e),\"\"),addVisual:i.addVisual},selection:{getContent:(e,t)=>s.getContent(t)},autocompleter:{addDecoration:a.addDecoration,removeDecoration:a.removeDecoration},raw:{getModel:()=>Y.some(l.getRawModel())}}})(e),e.rtc.isRemote))))))))},Z_=e=>e.rtcInstance?e.rtcInstance:X_(e),ew=e=>{const t=e.rtcInstance;if(t)return t;throw new Error(\"Failed to get RTC instance not yet initialized.\")},tw=e=>ew(e).init.bindEvents(),nw=(e,t={})=>((e,t,n)=>ew(e).selection.getContent(t,n))(e,t.format?t.format:\"html\",t),rw=e=>0===e.dom.length?(Zn(e),Y.none()):Y.some(e),ow=(e,t,n,r)=>{e.bind((e=>((r?Up:zp)(e.dom,r?e.dom.length:0),t.filter(It).map((t=>((e,t,n,r)=>{const o=e.dom,i=t.dom,s=r?o.length:i.length;r?(Vp(o,i,!1,!r),n.setStart(i,s)):(Vp(i,o,!1,!r),n.setEnd(i,s))})(e,t,n,r)))))).orThunk((()=>{const e=((e,t)=>e.filter((e=>Eh.isBookmarkNode(e.dom))).bind(t?xn:wn))(t,r).or(t).filter(It);return e.map((e=>((e,t)=>{_n(e).each((n=>{const r=e.dom;t&&Bp(n,ga(r,0))?zp(r,0):!t&&Rp(n,ga(r,r.length))&&Up(r,r.length)}))})(e,r)))}))},iw=(e,t,n={})=>{const r=((e,t)=>({format:\"html\",...e,set:!0,selection:!0,content:t}))(n,t);g_(e,r).each((t=>{const n=((e,t)=>{if(\"raw\"!==t.format){const n=e.selection.getRng(),r=e.dom.getParent(n.commonAncestorContainer,e.dom.isBlock),o=r?{context:r.nodeName.toLowerCase()}:{},i=e.parser.parse(t.content,{forced_root_block:!1,...o,...t});return Wf({validate:!1},e.schema).serialize(i)}return t.content})(e,t),r=e.selection.getRng();((e,t)=>{const n=Y.from(t.firstChild).map(dn.fromDom),r=Y.from(t.lastChild).map(dn.fromDom);e.deleteContents(),e.insertNode(t);const o=n.bind(wn).filter(It).bind(rw),i=r.bind(xn).filter(It).bind(rw);ow(o,n,e,!0),ow(i,r,e,!1),e.collapse(!1)})(r,r.createContextualFragment(n)),e.selection.setRng(r),jm(e,r),v_(e,n,t)}))},sw=(e,t,n)=>{if(ke(e,t)){const r=K(e[t],(e=>e!==n));0===r.length?delete e[t]:e[t]=r}};var aw=(e,t)=>{let n,r;const o=(t,n)=>Z(n,(n=>e.is(n,t))),i=t=>e.getParents(t,void 0,e.getRoot());return{selectorChangedWithUnbind:(e,s)=>(n||(n={},r={},t.on(\"NodeChange\",(e=>{const t=e.element,s=i(t),a={};pe(n,((e,t)=>{o(t,s).each((n=>{r[t]||(V(e,(e=>{e(!0,{node:n,selector:t,parents:s})})),r[t]=e),a[t]=e}))})),pe(r,((e,n)=>{a[n]||(delete r[n],V(e,(e=>{e(!1,{node:t,selector:n,parents:s})})))}))}))),n[e]||(n[e]=[]),n[e].push(s),o(e,i(t.selection.getStart())).each((()=>{r[e]=n[e]})),{unbind:()=>{sw(n,e,s),sw(r,e,s)}})}};const lw=e=>!(!e||!e.ownerDocument)&&gn(dn.fromDom(e.ownerDocument),dn.fromDom(e)),cw=(e,t,n,r)=>{let o,i;const{selectorChangedWithUnbind:s}=aw(e,r),a=(e,t)=>iw(r,e,t),l=e=>{const t=u();t.collapse(!!e),d(t)},c=()=>t.getSelection?t.getSelection():t.document.selection,u=()=>{let n;const s=(e,t,n)=>{try{return t.compareBoundaryPoints(e,n)}catch(e){return-1}},a=t.document;if(x(r.bookmark)&&!ff(r)){const e=ef(r);if(e.isSome())return e.map((e=>xf(r,[e])[0])).getOr(a.createRange())}try{const e=c();e&&!gr(e.anchorNode)&&(n=e.rangeCount>0?e.getRangeAt(0):a.createRange(),n=xf(r,[n])[0])}catch(e){}if(n||(n=a.createRange()),Er(n.startContainer)&&n.collapsed){const t=e.getRoot();n.setStart(t,0),n.setEnd(t,0)}return o&&i&&(0===s(n.START_TO_START,n,o)&&0===s(n.END_TO_END,n,o)?n=i:(o=null,i=null)),n},d=(e,t)=>{if(!(e=>!!e&&lw(e.startContainer)&&lw(e.endContainer))(e))return;const n=c();if(e=r.dispatch(\"SetSelectionRange\",{range:e,forward:t}).range,n){i=e;try{n.removeAllRanges(),n.addRange(e)}catch(e){}!1===t&&n.extend&&(n.collapse(e.endContainer,e.endOffset),n.extend(e.startContainer,e.startOffset)),o=n.rangeCount>0?n.getRangeAt(0):null}if(!e.collapsed&&e.startContainer===e.endContainer&&(null==n?void 0:n.setBaseAndExtent)&&e.endOffset-e.startOffset<2&&e.startContainer.hasChildNodes()){const t=e.startContainer.childNodes[e.startOffset];t&&\"IMG\"===t.nodeName&&(n.setBaseAndExtent(e.startContainer,e.startOffset,e.endContainer,e.endOffset),n.anchorNode===e.startContainer&&n.focusNode===e.endContainer||n.setBaseAndExtent(t,0,t,1))}r.dispatch(\"AfterSetSelectionRange\",{range:e,forward:t})},h=()=>{const t=c(),n=null==t?void 0:t.anchorNode,r=null==t?void 0:t.focusNode;if(!t||!n||!r||gr(n)||gr(r))return!0;const o=e.createRng(),i=e.createRng();try{o.setStart(n,t.anchorOffset),o.collapse(!0),i.setStart(r,t.focusOffset),i.collapse(!0)}catch(e){return!0}return o.compareBoundaryPoints(o.START_TO_START,i)<=0},m={dom:e,win:t,serializer:n,editor:r,collapse:l,setCursorLocation:(t,n)=>{const o=e.createRng();x(t)&&x(n)?(o.setStart(t,n),o.setEnd(t,n),d(o),l(!1)):(Bd(e,o,r.getBody(),!0),d(o))},getContent:e=>nw(r,e),setContent:a,getBookmark:(e,t)=>f.getBookmark(e,t),moveToBookmark:e=>f.moveToBookmark(e),select:(t,n)=>(((e,t,n)=>Y.from(t).bind((t=>Y.from(t.parentNode).map((r=>{const o=e.nodeIndex(t),i=e.createRng();return i.setStart(r,o),i.setEnd(r,o+1),n&&(Bd(e,i,t,!0),Bd(e,i,t,!1)),i})))))(e,t,n).each(d),t),isCollapsed:()=>{const e=u(),t=c();return!(!e||e.item)&&(e.compareEndPoints?0===e.compareEndPoints(\"StartToEnd\",e):!t||e.collapsed)},isForward:h,setNode:t=>(a(e.getOuterHTML(t)),t),getNode:()=>((e,t)=>{if(!t)return e;let n=t.startContainer,r=t.endContainer;const o=t.startOffset,i=t.endOffset;let s=t.commonAncestorContainer;t.collapsed||(n===r&&i-o<2&&n.hasChildNodes()&&(s=n.childNodes[o]),Sr(n)&&Sr(r)&&(n=n.length===o?wf(n.nextSibling,!0):n.parentNode,r=0===i?wf(r.previousSibling,!1):r.parentNode,n&&n===r&&(s=n)));const a=Sr(s)?s.parentNode:s;return vr(a)?a:e})(r.getBody(),u()),getSel:c,setRng:d,getRng:u,getStart:e=>bf(r.getBody(),u(),e),getEnd:e=>_f(r.getBody(),u(),e),getSelectedBlocks:(t,n)=>((e,t,n,r)=>{const o=[],i=e.getRoot(),s=e.getParent(n||bf(i,t,t.collapsed),e.isBlock),a=e.getParent(r||_f(i,t,t.collapsed),e.isBlock);if(s&&s!==i&&o.push(s),s&&a&&s!==a){let t=s;const n=new Zr(s,i);for(;(t=n.next())&&t!==a;)e.isBlock(t)&&o.push(t)}return a&&s!==a&&a!==i&&o.push(a),o})(e,u(),t,n),normalize:()=>{const t=u(),n=c();if(!(Sd(n).length>1)&&Rd(r)){const n=vm(e,t);return n.each((e=>{d(e,h())})),n.getOr(t)}return t},selectorChanged:(e,t)=>(s(e,t),m),selectorChangedWithUnbind:s,getScrollContainer:()=>{let t,n=e.getRoot();for(;n&&\"BODY\"!==n.nodeName;){if(n.scrollHeight>n.clientHeight){t=n;break}n=n.parentNode}return t},scrollIntoView:(e,t)=>{x(e)?((e,t,n)=>{(e.inline?Pm:Hm)(e,t,n)})(r,e,t):jm(r,u(),t)},placeCaretAt:(e,t)=>d(cm(e,t,r.getDoc())),getBoundingClientRect:()=>{const e=u();return e.collapsed?ga.fromRangeStart(e).getClientRects()[0]:e.getBoundingClientRect()},destroy:()=>{t=o=i=null,p.destroy()}},f=Eh(m),p=Wh(m,r);return m.bookmarkManager=f,m.controlSelection=p,m},uw=(e,t,n)=>((e,t)=>x(e)&&e.hasEventListeners(\"PreProcess\")&&!t.no_events)(e,n)?((e,t,n)=>{let r;const o=e.dom;let i=t.cloneNode(!0);const s=document.implementation;if(s.createHTMLDocument){const e=s.createHTMLDocument(\"\");Ft.each(\"BODY\"===i.nodeName?i.childNodes:[i],(t=>{e.body.appendChild(e.importNode(t,!0))})),i=\"BODY\"!==i.nodeName?e.body.firstChild:e.body,r=o.doc,o.doc=e}return((e,t)=>{e.dispatch(\"PreProcess\",t)})(e,{...n,node:i}),r&&(o.doc=r),i})(e,t,n):t,dw=(e,t,n)=>{-1===Ft.inArray(t,n)&&(e.addAttributeFilter(n,((e,t)=>{let n=e.length;for(;n--;)e[n].attr(t,null)})),t.push(n))},hw=(e,t,n,r,o)=>{const i=((e,t,n)=>Wf(e,t).serialize(n))(t,n,r);return((e,t,n)=>{if(!t.no_events&&e){const r=((e,t)=>e.dispatch(\"PostProcess\",t))(e,{...t,content:n});return r.content}return n})(e,o,i)},mw=(e,t)=>{const n=[\"data-mce-selected\"],r=t&&t.dom?t.dom:ls.DOM,o=t&&t.schema?t.schema:Hi(e);e.entity_encoding=e.entity_encoding||\"named\",e.remove_trailing_brs=!(\"remove_trailing_brs\"in e)||e.remove_trailing_brs;const i=h_(e,o);((e,t,n)=>{e.addAttributeFilter(\"data-mce-tabindex\",((e,t)=>{let n=e.length;for(;n--;){const r=e[n];r.attr(\"tabindex\",r.attr(\"data-mce-tabindex\")),r.attr(t,null)}})),e.addAttributeFilter(\"src,href,style\",((e,r)=>{const o=\"data-mce-\"+r,i=t.url_converter,s=t.url_converter_scope;let a=e.length;for(;a--;){const t=e[a];let l=t.attr(o);void 0!==l?(t.attr(r,l.length>0?l:null),t.attr(o,null)):(l=t.attr(r),\"style\"===r?l=n.serializeStyle(n.parseStyle(l),t.name):i&&(l=i.call(s,l,r,t.name)),t.attr(r,l.length>0?l:null))}})),e.addAttributeFilter(\"class\",(e=>{let t=e.length;for(;t--;){const n=e[t];let r=n.attr(\"class\");r&&(r=r.replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g,\"\"),n.attr(\"class\",r.length>0?r:null))}})),e.addAttributeFilter(\"data-mce-type\",((e,t,n)=>{let r=e.length;for(;r--;){const t=e[r];if(\"bookmark\"===t.attr(\"data-mce-type\")&&!n.cleanup){const e=Y.from(t.firstChild).exists((e=>{var t;return!Mo(null!==(t=e.value)&&void 0!==t?t:\"\")}));e?t.unwrap():t.remove()}}})),e.addNodeFilter(\"noscript\",(e=>{var t;let n=e.length;for(;n--;){const r=e[n].firstChild;r&&(r.value=Mi.decode(null!==(t=r.value)&&void 0!==t?t:\"\"))}})),e.addNodeFilter(\"script,style\",((e,n)=>{var r;const o=e=>e.replace(/(<!--\\[CDATA\\[|\\]\\]-->)/g,\"\\n\").replace(/^[\\r\\n]*|[\\r\\n]*$/g,\"\").replace(/^\\s*((<!--)?(\\s*\\/\\/)?\\s*<!\\[CDATA\\[|(<!--\\s*)?\\/\\*\\s*<!\\[CDATA\\[\\s*\\*\\/|(\\/\\/)?\\s*<!--|\\/\\*\\s*<!--\\s*\\*\\/)\\s*[\\r\\n]*/gi,\"\").replace(/\\s*(\\/\\*\\s*\\]\\]>\\s*\\*\\/(-->)?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g,\"\");let i=e.length;for(;i--;){const s=e[i],a=s.firstChild,l=null!==(r=null==a?void 0:a.value)&&void 0!==r?r:\"\";if(\"script\"===n){const e=s.attr(\"type\");e&&s.attr(\"type\",\"mce-no/type\"===e?null:e.replace(/^mce\\-/,\"\")),\"xhtml\"===t.element_format&&a&&l.length>0&&(a.value=\"// <![CDATA[\\n\"+o(l)+\"\\n// ]]>\")}else\"xhtml\"===t.element_format&&a&&l.length>0&&(a.value=\"\\x3c!--\\n\"+o(l)+\"\\n--\\x3e\")}})),e.addNodeFilter(\"#comment\",(e=>{let r=e.length;for(;r--;){const o=e[r],i=o.value;t.preserve_cdata&&0===(null==i?void 0:i.indexOf(\"[CDATA[\"))?(o.name=\"#cdata\",o.type=4,o.value=n.decode(i.replace(/^\\[CDATA\\[|\\]\\]$/g,\"\"))):0===(null==i?void 0:i.indexOf(\"mce:protected \"))&&(o.name=\"#text\",o.type=3,o.raw=!0,o.value=unescape(i).substr(14))}})),e.addNodeFilter(\"xml:namespace,input\",((e,t)=>{let n=e.length;for(;n--;){const r=e[n];7===r.type?r.remove():1===r.type&&(\"input\"!==t||r.attr(\"type\")||r.attr(\"type\",\"text\"))}})),e.addAttributeFilter(\"data-mce-type\",(t=>{V(t,(t=>{\"format-caret\"===t.attr(\"data-mce-type\")&&(t.isEmpty(e.schema.getNonEmptyElements())?t.remove():t.unwrap())}))})),e.addAttributeFilter(\"data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize,data-mce-placeholder\",((e,t)=>{let n=e.length;for(;n--;)e[n].attr(t,null)}))})(i,e,r);return{schema:o,addNodeFilter:i.addNodeFilter,addAttributeFilter:i.addAttributeFilter,serialize:(n,s={})=>{const a={format:\"html\",...s},l=uw(t,n,a),c=((e,t,n)=>{const r=Lo(n.getInner?t.innerHTML:e.getOuterHTML(t));return n.selection||uo(dn.fromDom(t))?r:Ft.trim(r)})(r,l,a),u=((e,t,n)=>{const r=n.selection?{forced_root_block:!1,...n}:n,o=e.parse(t,r);return(e=>{const t=e=>\"br\"===(null==e?void 0:e.name),n=e.lastChild;if(t(n)){const e=n.prev;t(e)&&(n.remove(),e.remove())}})(o),o})(i,c,a);return\"tree\"===a.format?u:hw(t,e,o,u,a)},addRules:o.addValidElements,setRules:o.setValidElements,addTempAttr:F(dw,i,n),getTempAttrs:L(n),getNodeFilters:i.getNodeFilters,getAttributeFilters:i.getAttributeFilters,removeNodeFilter:i.removeNodeFilter,removeAttributeFilter:i.removeAttributeFilter}},fw=(e,t)=>{const n=mw(e,t);return{schema:n.schema,addNodeFilter:n.addNodeFilter,addAttributeFilter:n.addAttributeFilter,serialize:n.serialize,addRules:n.addRules,setRules:n.setRules,addTempAttr:n.addTempAttr,getTempAttrs:n.getTempAttrs,getNodeFilters:n.getNodeFilters,getAttributeFilters:n.getAttributeFilters,removeNodeFilter:n.removeNodeFilter,removeAttributeFilter:n.removeAttributeFilter}},pw=(e,t={})=>{const n=((e,t)=>({...e,format:t,get:!0,getInner:!0}))(t,t.format?t.format:\"html\");return f_(e,n).fold(E,(t=>{const n=((e,t)=>Z_(e).editor.getContent(t))(e,t);return p_(e,n,t)}))},gw=(e,t,n={})=>{const r=((e,t)=>({format:\"html\",...e,set:!0,content:t}))(n,t);return g_(e,r).map((t=>{const n=((e,t,n)=>Z_(e).editor.setContent(t,n))(e,t.content,t);return v_(e,n.html,t),n.content})).getOr(t)},vw=\"autoresize_on_init,content_editable_state,padd_empty_with_br,block_elements,boolean_attributes,editor_deselector,editor_selector,elements,file_browser_callback_types,filepicker_validator_handler,force_hex_style_colors,force_p_newlines,gecko_spellcheck,images_dataimg_filter,media_scripts,mode,move_caret_before_on_enter_elements,non_empty_elements,self_closing_elements,short_ended_elements,special,spellchecker_select_languages,spellchecker_whitelist,tab_focus,tabfocus_elements,table_responsive_width,text_block_elements,text_inline_elements,toolbar_drawer,types,validate,whitespace_elements,paste_enable_default_filters,paste_filter_drop,paste_word_valid_elements,paste_retain_style_properties,paste_convert_word_fake_lists\".split(\",\"),yw=\"bbcode,colorpicker,contextmenu,fullpage,legacyoutput,spellchecker,textcolor\".split(\",\"),bw=e=>{const t=K(vw,(t=>ke(e,t))),n=e.forced_root_block;return!1!==n&&\"\"!==n||t.push(\"forced_root_block (false only)\"),ae(t)},_w=e=>{const t=Ft.makeMap(e.plugins,\" \"),n=K(yw,(e=>ke(t,e)));return ae(n)},ww=(e,t)=>{((e,t)=>{const n=bw(e),r=_w(t),o=r.length>0,i=n.length>0,s=\"mobile\"===t.theme;if(o||i||s){const e=\"\\n- \",t=s?`\\n\\nThemes:${e}mobile`:\"\",a=o?`\\n\\nPlugins:${e}${r.join(e)}`:\"\",l=i?`\\n\\nOptions:${e}${n.join(e)}`:\"\";console.warn(\"The following deprecated features are currently enabled and have been removed in TinyMCE 6.0. These features will no longer work and should be removed from the TinyMCE configuration. See https://www.tiny.cloud/docs/tinymce/6/migration-from-5x/ for more information.\"+t+a+l)}})(e,t)},xw=ls.DOM,Cw=e=>Y.from(e).each((e=>e.destroy())),kw=e=>{if(!e.removed){const{_selectionOverrides:t,editorUpload:n}=e,r=e.getBody(),o=e.getElement();r&&e.save({is_removing:!0}),e.removed=!0,e.unbindAllNativeEvents(),e.hasHiddenInput&&x(null==o?void 0:o.nextSibling)&&xw.remove(o.nextSibling),(e=>{e.dispatch(\"remove\")})(e),e.editorManager.remove(e),!e.inline&&r&&(e=>{xw.setStyle(e.id,\"display\",e.orgDisplay)})(e),(e=>{e.dispatch(\"detach\")})(e),xw.remove(e.getContainer()),Cw(t),Cw(n),e.destroy()}},Dw=(e,t)=>{const{selection:n,dom:r}=e;e.destroyed||(t||e.removed?(t||(e.editorManager.off(\"beforeunload\",e._beforeUnload),e.theme&&e.theme.destroy&&e.theme.destroy(),Cw(n),Cw(r)),(e=>{const t=e.formElement;t&&(t._mceOldSubmit&&(t.submit=t._mceOldSubmit,delete t._mceOldSubmit),xw.unbind(t,\"submit reset\",e.formEventDelegate))})(e),(e=>{const t=e;t.contentAreaContainer=t.formElement=t.container=t.editorContainer=null,t.bodyElement=t.contentDocument=t.contentWindow=null,t.iframeElement=t.targetElm=null;const n=e.selection;if(n){const e=n.dom;t.selection=n.win=n.dom=e.doc=null}})(e),e.destroyed=!0):e.remove())},Sw=(()=>{const e={};return{add:(t,n)=>{e[t]=n},get:t=>e[t]?e[t]:{icons:{}},has:t=>ke(e,t)}})(),Aw=gs.ModelManager,Mw=(e,t)=>t.dom[e],Lw=(e,t)=>parseInt(jn(t,e),10),Ew=F(Mw,\"clientWidth\"),Tw=F(Mw,\"clientHeight\"),Fw=F(Lw,\"margin-top\"),Ow=F(Lw,\"margin-left\"),Bw=(e,t,n)=>{const r=dn.fromDom(e.getBody()),o=e.inline?r:(i=r,dn.fromDom(yn(i).dom.documentElement));var i;const s=((e,t,n,r)=>{const o=(e=>e.dom.getBoundingClientRect())(t);return{x:n-(e?o.left+t.dom.clientLeft+Ow(t):0),y:r-(e?o.top+t.dom.clientTop+Fw(t):0)}})(e.inline,o,t,n);return((e,t,n)=>{const r=Ew(e),o=Tw(e);return t>=0&&n>=0&&t<=r&&n<=o})(o,s.x,s.y)},Rw=e=>{const t=e.inline?e.getBody():e.getContentAreaContainer();return(n=t,Y.from(n).map(dn.fromDom)).map(Yn).getOr(!1);var n};const $w=e=>{const t=[],n=()=>{const t=e.theme;return t&&t.getNotificationManagerImpl?t.getNotificationManagerImpl():(()=>{const e=()=>{throw new Error(\"Theme did not provide a NotificationManager implementation.\")};return{open:e,close:e,getArgs:e}})()},r=()=>Y.from(t[0]),o=()=>{V(t,(e=>{e.reposition()}))},i=e=>{ee(t,(t=>t===e)).each((e=>{t.splice(e,1)}))},s=(s,a=!0)=>e.removed||!Rw(e)?{}:(a&&e.dispatch(\"BeforeOpenNotification\",{notification:s}),Z(t,(e=>((e,t)=>!(e.type!==t.type||e.text!==t.text||e.progressBar||e.timeout||t.progressBar||t.timeout))(n().getArgs(e),s))).getOrThunk((()=>{e.editorManager.setActive(e);const a=n().open(s,(()=>{i(a),o(),r().fold((()=>e.focus()),(e=>Wm(dn.fromDom(e.getEl()))))}));return(e=>{t.push(e)})(a),o(),e.dispatch(\"OpenNotification\",{notification:{...a}}),a}))),a=L(t);return(e=>{e.on(\"SkinLoaded\",(()=>{const t=Il(e);t&&s({text:t,type:\"warning\",timeout:0},!1),o()})),e.on(\"show ResizeEditor ResizeWindow NodeChange\",(()=>{requestAnimationFrame(o)})),e.on(\"remove\",(()=>{V(t.slice(),(e=>{n().close(e)}))}))})(e),{open:s,close:()=>{r().each((e=>{n().close(e),i(e),o()}))},getNotifications:a}},Nw=gs.PluginManager,Yw=gs.ThemeManager;const Pw=e=>{let t=[];const n=()=>{const t=e.theme;return t&&t.getWindowManagerImpl?t.getWindowManagerImpl():(()=>{const e=()=>{throw new Error(\"Theme did not provide a WindowManager implementation.\")};return{open:e,openUrl:e,alert:e,confirm:e,close:e}})()},r=(e,t)=>(...n)=>t?t.apply(e,n):void 0,o=n=>{t.push(n),(t=>{e.dispatch(\"OpenWindow\",{dialog:t})})(n)},i=n=>{(t=>{e.dispatch(\"CloseWindow\",{dialog:t})})(n),t=K(t,(e=>e!==n)),0===t.length&&e.focus()},s=t=>{e.editorManager.setActive(e),Zm(e),e.ui.show();const n=t();return o(n),n};return e.on(\"remove\",(()=>{V(t,(e=>{n().close(e)}))})),{open:(e,t)=>s((()=>n().open(e,t,i))),openUrl:e=>s((()=>n().openUrl(e,i))),alert:(e,t,o)=>{const i=n();i.alert(e,r(o||i,t))},confirm:(e,t,o)=>{const i=n();i.confirm(e,r(o||i,t))},close:()=>{Y.from(t[t.length-1]).each((e=>{n().close(e),i(e)}))}}},Iw=(e,t)=>{e.notificationManager.open({type:\"error\",text:t})},Hw=(e,t)=>{e._skinLoaded?Iw(e,t):e.on(\"SkinLoaded\",(()=>{Iw(e,t)}))},jw=(e,t,n)=>{Fh(e,t,{message:n}),console.error(n)},Ww=(e,t,n)=>n?`Failed to load ${e}: ${n} from url ${t}`:`Failed to load ${e} url: ${t}`,zw=(e,...t)=>{const n=window.console;n&&(n.error?n.error(e,...t):n.log(e,...t))},Uw=(e,t)=>{const n=e.editorManager.baseURL+\"/skins/content\",r=`content${e.editorManager.suffix}.css`;return U(t,(t=>(e=>/^[a-z0-9\\-]+$/i.test(e))(t)&&!e.inline?`${n}/${t}/${r}`:e.documentBaseURI.toAbsolute(t)))},Vw=e=>{e.contentCSS=e.contentCSS.concat((e=>Uw(e,Tl(e)))(e),(e=>Uw(e,Ol(e)))(e))},qw=N,Gw=(e,t)=>{const n={};return{findAll:(r,o=N)=>{const i=K((e=>e?de(e.getElementsByTagName(\"img\")):[])(r),(t=>{const n=t.src;return!t.hasAttribute(\"data-mce-bogus\")&&(!t.hasAttribute(\"data-mce-placeholder\")&&(!(!n||n===Mt.transparentSrc)&&(je(n,\"blob:\")?!e.isUploaded(n)&&o(t):!!je(n,\"data:\")&&o(t))))})),s=U(i,(e=>{const r=e.src;if(ke(n,r))return n[r].then((t=>f(t)?t:{image:e,blobInfo:t.blobInfo}));{const o=((e,t)=>{const n=()=>Promise.reject(\"Invalid data URI\");if(je(t,\"blob:\")){const r=e.getByUri(t);return x(r)?Promise.resolve(r):zb(t).then((t=>Ub(t).then((r=>qb(r,!1,(n=>Y.some(Gb(e,t,n)))).getOrThunk(n)))))}return je(t,\"data:\")?Kb(e,t).fold(n,(e=>Promise.resolve(e))):Promise.reject(\"Unknown image data format\")})(t,r).then((t=>(delete n[r],{image:e,blobInfo:t}))).catch((e=>(delete n[r],e)));return n[r]=o,o}}));return Promise.all(s)}}},Kw=()=>{let e={};const t=(e,t)=>({status:e,resultUri:t}),n=t=>t in e;return{hasBlobUri:n,getResultUri:t=>{const n=e[t];return n?n.resultUri:null},isPending:t=>!!n(t)&&1===e[t].status,isUploaded:t=>!!n(t)&&2===e[t].status,markPending:n=>{e[n]=t(1,null)},markUploaded:(n,r)=>{e[n]=t(2,r)},removeFailed:t=>{delete e[t]},destroy:()=>{e={}}}};let Xw=0;const Jw=e=>e+Xw+++(()=>{const e=()=>Math.round(4294967295*Math.random()).toString(36);return\"s\"+(new Date).getTime().toString(36)+e()+e()+e()})(),Qw=(e,t)=>{const n={},r=(e,n)=>new Promise(((r,o)=>{const i=new XMLHttpRequest;i.open(\"POST\",t.url),i.withCredentials=t.credentials,i.upload.onprogress=e=>{n(e.loaded/e.total*100)},i.onerror=()=>{o(\"Image upload failed due to a XHR Transport error. Code: \"+i.status)},i.onload=()=>{if(i.status<200||i.status>=300)return void o(\"HTTP Error: \"+i.status);const e=JSON.parse(i.responseText);var n,s;e&&f(e.location)?r((n=t.basePath,s=e.location,n?n.replace(/\\/$/,\"\")+\"/\"+s.replace(/^\\//,\"\"):s)):o(\"Invalid JSON: \"+i.responseText)};const s=new FormData;s.append(\"file\",e.blob(),e.filename()),i.send(s)})),o=C(t.handler)?t.handler:r,i=(e,t)=>({url:t,blobInfo:e,status:!0}),s=(e,t)=>({url:\"\",blobInfo:e,status:!1,error:t}),a=(e,t)=>{Ft.each(n[e],(e=>{e(t)})),delete n[e]},l=(t,r)=>(t=Ft.grep(t,(t=>!e.isUploaded(t.blobUri()))),Promise.all(Ft.map(t,(t=>e.isPending(t.blobUri())?(e=>{const t=e.blobUri();return new Promise((e=>{n[t]=n[t]||[],n[t].push(e)}))})(t):((t,n,r)=>(e.markPending(t.blobUri()),new Promise((o=>{let l,c;try{const u=()=>{l&&(l.close(),c=S)},d=n=>{u(),e.markUploaded(t.blobUri(),n),a(t.blobUri(),i(t,n)),o(i(t,n))},h=n=>{u(),e.removeFailed(t.blobUri()),a(t.blobUri(),s(t,n)),o(s(t,n))};c=e=>{e<0||e>100||Y.from(l).orThunk((()=>Y.from(r).map(B))).each((t=>{l=t,t.progressBar.value(e)}))},n(t,c).then(d,(e=>{h(f(e)?{message:e}:e)}))}catch(e){o(s(t,e))}}))))(t,o,r)))));return{upload:(e,n)=>t.url||o!==r?l(e,n):new Promise((e=>{e([])}))}},Zw=e=>()=>e.notificationManager.open({text:e.translate(\"Image uploading...\"),type:\"info\",timeout:-1,progressBar:!0}),ex=(e,t)=>Qw(t,{url:wl(e),basePath:xl(e),credentials:Cl(e),handler:kl(e)}),tx=e=>{const t=(()=>{let e=[];const t=e=>{if(!e.blob||!e.base64)throw new Error(\"blob and base64 representations of the image are required for BlobInfo to be created\");const t=e.id||Jw(\"blobid\"),n=e.name||t,r=e.blob;return{id:L(t),name:L(n),filename:L(e.filename||n+\".\"+(o=r.type,{\"image/jpeg\":\"jpg\",\"image/jpg\":\"jpg\",\"image/gif\":\"gif\",\"image/png\":\"png\",\"image/apng\":\"apng\",\"image/avif\":\"avif\",\"image/svg+xml\":\"svg\",\"image/webp\":\"webp\",\"image/bmp\":\"bmp\",\"image/tiff\":\"tiff\"}[o.toLowerCase()]||\"dat\")),blob:L(r),base64:L(e.base64),blobUri:L(e.blobUri||URL.createObjectURL(r)),uri:L(e.uri)};var o},n=t=>Z(e,t).getOrUndefined(),r=e=>n((t=>t.id()===e));return{create:(e,n,r,o,i)=>{if(f(e))return t({id:e,name:o,filename:i,blob:n,base64:r});if(p(e))return t(e);throw new Error(\"Unknown input type\")},add:t=>{r(t.id())||e.push(t)},get:r,getByUri:e=>n((t=>t.blobUri()===e)),getByData:(e,t)=>n((n=>n.base64()===e&&n.blob().type===t)),findFirst:n,removeByUri:t=>{e=K(e,(e=>e.blobUri()!==t||(URL.revokeObjectURL(e.blobUri()),!1)))},destroy:()=>{V(e,(e=>{URL.revokeObjectURL(e.blobUri())})),e=[]}}})();let n,r;const o=Kw(),i=[],s=t=>n=>e.selection?t(n):[],a=(e,t,n)=>{let r=0;do{r=e.indexOf(t,r),-1!==r&&(e=e.substring(0,r)+n+e.substr(r+t.length),r+=n.length-t.length+1)}while(-1!==r);return e},l=(e,t,n)=>{const r=`src=\"${n}\"${n===Mt.transparentSrc?' data-mce-placeholder=\"1\"':\"\"}`;return e=a(e,`src=\"${t}\"`,r),e=a(e,'data-mce-src=\"'+t+'\"','data-mce-src=\"'+n+'\"')},c=(t,n)=>{V(e.undoManager.data,(e=>{\"fragmented\"===e.type?e.fragments=U(e.fragments,(e=>l(e,t,n))):e.content=l(e.content,t,n)}))},u=()=>(n||(n=ex(e,o)),m().then(s((r=>{const o=U(r,(e=>e.blobInfo));return n.upload(o,Zw(e)).then(s((n=>{const o=[];let i=!1;const s=U(n,((n,s)=>{const{blobInfo:a,image:l}=r[s];let u=!1;return n.status&&yl(e)?(n.url&&!He(l.src,n.url)&&(i=!0),t.removeByUri(l.src),J_(e)||((t,n)=>{const r=e.convertURL(n,\"src\");var o;c(t.src,n),Vt(dn.fromDom(t),{src:vl(e)?(o=n,o+(-1===o.indexOf(\"?\")?\"?\":\"&\")+(new Date).getTime()):n,\"data-mce-src\":r})})(l,n.url)):n.error&&(n.error.remove&&(c(l.src,Mt.transparentSrc),o.push(l),u=!0),((e,t)=>{Hw(e,ps.translate([\"Failed to upload image: {0}\",t]))})(e,n.error.message)),{element:l,status:n.status,uploadUri:n.url,blobInfo:a,removed:u}}));return o.length>0&&!J_(e)?e.undoManager.transact((()=>{V(o,(n=>{e.dom.remove(n),t.removeByUri(n.src)}))})):i&&e.undoManager.dispatchChange(),s})))})))),d=()=>gl(e)?u():Promise.resolve([]),h=e=>re(i,(t=>t(e))),m=()=>(r||(r=Gw(o,t)),r.findAll(e.getBody(),h).then(s((t=>{const n=K(t,(t=>!f(t)||(Hw(e,t),!1)));return J_(e)||V(n,(e=>{c(e.image.src,e.blobInfo.blobUri()),e.image.src=e.blobInfo.blobUri(),e.image.removeAttribute(\"data-mce-src\")})),n})))),g=n=>n.replace(/src=\"(blob:[^\"]+)\"/g,((n,r)=>{const i=o.getResultUri(r);if(i)return'src=\"'+i+'\"';let s=t.getByUri(r);if(s||(s=J(e.editorManager.get(),((e,t)=>e||t.editorUpload&&t.editorUpload.blobCache.getByUri(r)),void 0)),s){return'src=\"data:'+s.blob().type+\";base64,\"+s.base64()+'\"'}return n}));return e.on(\"SetContent\",(()=>{gl(e)?d():m()})),e.on(\"RawSaveContent\",(e=>{e.content=g(e.content)})),e.on(\"GetContent\",(e=>{e.source_view||\"raw\"===e.format||\"tree\"===e.format||(e.content=g(e.content))})),e.on(\"PostRender\",(()=>{e.parser.addNodeFilter(\"img\",(e=>{V(e,(e=>{const n=e.attr(\"src\");if(!n||t.getByUri(n))return;const r=o.getResultUri(n);r&&e.attr(\"src\",r)}))}))})),{blobCache:t,addFilter:e=>{i.push(e)},uploadImages:u,uploadImagesAuto:d,scanForImages:m,destroy:()=>{t.destroy(),o.destroy(),r=n=null}}},nx={remove_similar:!0,inherit:!1},rx={selector:\"td,th\",...nx},ox={tablecellbackgroundcolor:{styles:{backgroundColor:\"%value\"},...rx},tablecellverticalalign:{styles:{\"vertical-align\":\"%value\"},...rx},tablecellbordercolor:{styles:{borderColor:\"%value\"},...rx},tablecellclass:{classes:[\"%value\"],...rx},tableclass:{selector:\"table\",classes:[\"%value\"],...nx},tablecellborderstyle:{styles:{borderStyle:\"%value\"},...rx},tablecellborderwidth:{styles:{borderWidth:\"%value\"},...rx}},ix=L(ox),sx=e=>{const t={},n=(e,r)=>{e&&(f(e)?(v(r)||(r=[r]),V(r,(e=>{_(e.deep)&&(e.deep=!rh(e)),_(e.split)&&(e.split=!rh(e)||oh(e)),_(e.remove)&&rh(e)&&!oh(e)&&(e.remove=\"none\"),rh(e)&&oh(e)&&(e.mixed=!0,e.block_expand=!0),f(e.classes)&&(e.classes=e.classes.split(/\\s+/))})),t[e]=r):pe(e,((e,t)=>{n(t,e)})))};return n((e=>{const t=e.dom,n=e.schema.type,r={valigntop:[{selector:\"td,th\",styles:{verticalAlign:\"top\"}}],valignmiddle:[{selector:\"td,th\",styles:{verticalAlign:\"middle\"}}],valignbottom:[{selector:\"td,th\",styles:{verticalAlign:\"bottom\"}}],alignleft:[{selector:\"figure.image\",collapsed:!1,classes:\"align-left\",ceFalseOverride:!0,preview:\"font-family font-size\"},{selector:\"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre\",styles:{textAlign:\"left\"},inherit:!1,preview:!1},{selector:\"img,audio,video\",collapsed:!1,styles:{float:\"left\"},preview:\"font-family font-size\"},{selector:\"table\",collapsed:!1,styles:{marginLeft:\"0px\",marginRight:\"auto\"},onformat:e=>{t.setStyle(e,\"float\",null)},preview:\"font-family font-size\"},{selector:\".mce-preview-object,[data-ephox-embed-iri]\",ceFalseOverride:!0,styles:{float:\"left\"}}],aligncenter:[{selector:\"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre\",styles:{textAlign:\"center\"},inherit:!1,preview:\"font-family font-size\"},{selector:\"figure.image\",collapsed:!1,classes:\"align-center\",ceFalseOverride:!0,preview:\"font-family font-size\"},{selector:\"img,audio,video\",collapsed:!1,styles:{display:\"block\",marginLeft:\"auto\",marginRight:\"auto\"},preview:!1},{selector:\"table\",collapsed:!1,styles:{marginLeft:\"auto\",marginRight:\"auto\"},preview:\"font-family font-size\"},{selector:\".mce-preview-object\",ceFalseOverride:!0,styles:{display:\"table\",marginLeft:\"auto\",marginRight:\"auto\"},preview:!1},{selector:\"[data-ephox-embed-iri]\",ceFalseOverride:!0,styles:{marginLeft:\"auto\",marginRight:\"auto\"},preview:!1}],alignright:[{selector:\"figure.image\",collapsed:!1,classes:\"align-right\",ceFalseOverride:!0,preview:\"font-family font-size\"},{selector:\"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre\",styles:{textAlign:\"right\"},inherit:!1,preview:\"font-family font-size\"},{selector:\"img,audio,video\",collapsed:!1,styles:{float:\"right\"},preview:\"font-family font-size\"},{selector:\"table\",collapsed:!1,styles:{marginRight:\"0px\",marginLeft:\"auto\"},onformat:e=>{t.setStyle(e,\"float\",null)},preview:\"font-family font-size\"},{selector:\".mce-preview-object,[data-ephox-embed-iri]\",ceFalseOverride:!0,styles:{float:\"right\"},preview:!1}],alignjustify:[{selector:\"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre\",styles:{textAlign:\"justify\"},inherit:!1,preview:\"font-family font-size\"}],bold:[{inline:\"strong\",remove:\"all\",preserve_attributes:[\"class\",\"style\"]},{inline:\"span\",styles:{fontWeight:\"bold\"}},{inline:\"b\",remove:\"all\",preserve_attributes:[\"class\",\"style\"]}],italic:[{inline:\"em\",remove:\"all\",preserve_attributes:[\"class\",\"style\"]},{inline:\"span\",styles:{fontStyle:\"italic\"}},{inline:\"i\",remove:\"all\",preserve_attributes:[\"class\",\"style\"]}],underline:[{inline:\"span\",styles:{textDecoration:\"underline\"},exact:!0},{inline:\"u\",remove:\"all\",preserve_attributes:[\"class\",\"style\"]}],strikethrough:(()=>{const e={inline:\"span\",styles:{textDecoration:\"line-through\"},exact:!0},t={inline:\"strike\",remove:\"all\",preserve_attributes:[\"class\",\"style\"]},r={inline:\"s\",remove:\"all\",preserve_attributes:[\"class\",\"style\"]};return\"html4\"!==n?[r,e,t]:[e,r,t]})(),forecolor:{inline:\"span\",styles:{color:\"%value\"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:\"span\",styles:{backgroundColor:\"%value\"},links:!0,remove_similar:!0,clear_child_styles:!0},fontname:{inline:\"span\",toggle:!1,styles:{fontFamily:\"%value\"},clear_child_styles:!0},fontsize:{inline:\"span\",toggle:!1,styles:{fontSize:\"%value\"},clear_child_styles:!0},lineheight:{selector:\"h1,h2,h3,h4,h5,h6,p,li,td,th,div\",styles:{lineHeight:\"%value\"}},fontsize_class:{inline:\"span\",attributes:{class:\"%value\"}},blockquote:{block:\"blockquote\",wrapper:!0,remove:\"all\"},subscript:{inline:\"sub\"},superscript:{inline:\"sup\"},code:{inline:\"code\"},link:{inline:\"a\",selector:\"a\",remove:\"all\",split:!0,deep:!0,onmatch:(e,t,n)=>vr(e)&&e.hasAttribute(\"href\"),onformat:(e,n,r)=>{Ft.each(r,((n,r)=>{t.setAttrib(e,r,n)}))}},lang:{inline:\"span\",clear_child_styles:!0,remove_similar:!0,attributes:{lang:\"%value\",\"data-mce-lang\":e=>{var t;return null!==(t=null==e?void 0:e.customValue)&&void 0!==t?t:null}}},removeformat:[{selector:\"b,strong,em,i,font,u,strike,s,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins,small\",remove:\"all\",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:\"span\",attributes:[\"style\",\"class\"],remove:\"empty\",split:!0,expand:!1,deep:!0},{selector:\"*\",attributes:[\"style\",\"class\"],split:!1,expand:!1,deep:!0}]};return Ft.each(\"p h1 h2 h3 h4 h5 h6 div address pre dt dd samp\".split(/\\s/),(e=>{r[e]={block:e,remove:\"all\"}})),r})(e)),n(ix()),n(Vl(e)),{get:e=>x(e)?t[e]:t,has:e=>ke(t,e),register:n,unregister:e=>(e&&t[e]&&delete t[e],t)}},ax=Ft.each,lx=ls.DOM,cx=e=>x(e)&&p(e),ux=(e,t)=>{const n=t&&t.schema||Hi({}),r=e=>{const t=f(e)?{name:e,classes:[],attrs:{}}:e,n=lx.create(t.name);return((e,t)=>{t.classes.length>0&&lx.addClass(e,t.classes.join(\" \")),lx.setAttribs(e,t.attrs)})(n,t),n},o=(e,t,i)=>{let s;const a=t[0],l=cx(a)?a.name:void 0,c=((e,t)=>{const r=n.getElementRule(e.nodeName.toLowerCase()),o=null==r?void 0:r.parentsRequired;return!(!o||!o.length)&&(t&&W(o,t)?t:o[0])})(e,l);if(c)l===c?(s=a,t=t.slice(1)):s=c;else if(a)s=a,t=t.slice(1);else if(!i)return e;const u=s?r(s):lx.create(\"div\");u.appendChild(e),i&&Ft.each(i,(t=>{const n=r(t);u.insertBefore(n,e)}));const d=cx(s)?s.siblings:void 0;return o(u,t,d)},i=lx.create(\"div\");if(e.length>0){const t=e[0],n=r(t),s=cx(t)?t.siblings:void 0;i.appendChild(o(n,e.slice(1),s))}return i},dx=e=>{let t=\"div\";const n={name:t,classes:[],attrs:{},selector:e=Ft.trim(e)};return\"*\"!==e&&(t=e.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g,((e,t,r,o,i)=>{switch(t){case\"#\":n.attrs.id=r;break;case\".\":n.classes.push(r);break;case\":\":-1!==Ft.inArray(\"checked disabled enabled read-only required\".split(\" \"),r)&&(n.attrs[r]=r)}if(\"[\"===o){const e=i.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);e&&(n.attrs[e[1]]=e[2])}return\"\"}))),n.name=t||\"div\",n},hx=(e,t)=>{let n=\"\",r=ql(e);if(\"\"===r)return\"\";const o=e=>f(e)?e.replace(/%(\\w+)/g,\"\"):\"\",i=(t,n)=>lx.getStyle(null!=n?n:e.getBody(),t,!0);if(f(t)){const n=e.formatter.get(t);if(!n)return\"\";t=n[0]}if(\"preview\"in t){const e=t.preview;if(!1===e)return\"\";r=e||r}let s,a=t.block||t.inline||\"span\";const l=(c=t.selector,f(c)?(c=(c=c.split(/\\s*,\\s*/)[0]).replace(/\\s*(~\\+|~|\\+|>)\\s*/g,\"$1\"),Ft.map(c.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/),(e=>{const t=Ft.map(e.split(/(?:~\\+|~|\\+)/),dx),n=t.pop();return t.length&&(n.siblings=t),n})).reverse()):[]);var c;l.length>0?(l[0].name||(l[0].name=a),a=t.selector,s=ux(l,e)):s=ux([a],e);const u=lx.select(a,s)[0]||s.firstChild;ax(t.styles,((e,t)=>{const n=o(e);n&&lx.setStyle(u,t,n)})),ax(t.attributes,((e,t)=>{const n=o(e);n&&lx.setAttrib(u,t,n)})),ax(t.classes,(e=>{const t=o(e);lx.hasClass(u,t)||lx.addClass(u,t)})),e.dispatch(\"PreviewFormats\"),lx.setStyles(s,{position:\"absolute\",left:-65535}),e.getBody().appendChild(s);const d=i(\"fontSize\"),h=/px$/.test(d)?parseInt(d,10):0;return ax(r.split(\" \"),(e=>{let t=i(e,u);if(!(\"background-color\"===e&&/transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(t)&&(t=i(e),\"#ffffff\"===Dd(t).toLowerCase())||\"color\"===e&&\"#000000\"===Dd(t).toLowerCase())){if(\"font-size\"===e&&/em|%$/.test(t)){if(0===h)return;t=parseFloat(t)/(/%$/.test(t)?100:1)*h+\"px\"}\"border\"===e&&t&&(n+=\"padding:0 2px;\"),n+=e+\":\"+t+\";\"}})),e.dispatch(\"AfterPreviewFormats\"),lx.remove(s),n},mx=e=>{const t=sx(e),n=ds({});return(e=>{e.addShortcut(\"meta+b\",\"\",\"Bold\"),e.addShortcut(\"meta+i\",\"\",\"Italic\"),e.addShortcut(\"meta+u\",\"\",\"Underline\");for(let t=1;t<=6;t++)e.addShortcut(\"access+\"+t,\"\",[\"FormatBlock\",!1,\"h\"+t]);e.addShortcut(\"access+7\",\"\",[\"FormatBlock\",!1,\"p\"]),e.addShortcut(\"access+8\",\"\",[\"FormatBlock\",!1,\"div\"]),e.addShortcut(\"access+9\",\"\",[\"FormatBlock\",!1,\"address\"])})(e),zv(e),J_(e)||((e,t)=>{e.set({}),t.on(\"NodeChange\",(n=>{$y(t,n.element,e.get())})),t.on(\"FormatApply FormatRemove\",(n=>{const r=Y.from(n.node).map((e=>Yd(e)?e:e.startContainer)).bind((e=>vr(e)?Y.some(e):Y.from(e.parentElement))).getOrThunk((()=>Oy(t)));$y(t,r,e.get())}))})(n,e),{get:t.get,has:t.has,register:t.register,unregister:t.unregister,apply:(t,n,r)=>{((e,t,n,r)=>{ew(e).formatter.apply(t,n,r)})(e,t,n,r)},remove:(t,n,r,o)=>{((e,t,n,r,o)=>{ew(e).formatter.remove(t,n,r,o)})(e,t,n,r,o)},toggle:(t,n,r)=>{((e,t,n,r)=>{ew(e).formatter.toggle(t,n,r)})(e,t,n,r)},match:(t,n,r,o)=>((e,t,n,r,o)=>ew(e).formatter.match(t,n,r,o))(e,t,n,r,o),closest:t=>((e,t)=>ew(e).formatter.closest(t))(e,t),matchAll:(t,n)=>((e,t,n)=>ew(e).formatter.matchAll(t,n))(e,t,n),matchNode:(t,n,r,o)=>((e,t,n,r,o)=>ew(e).formatter.matchNode(t,n,r,o))(e,t,n,r,o),canApply:t=>((e,t)=>ew(e).formatter.canApply(t))(e,t),formatChanged:(t,r,o,i)=>((e,t,n,r,o,i)=>ew(e).formatter.formatChanged(t,n,r,o,i))(e,n,t,r,o,i),getCssText:F(hx,e)}},fx=e=>{switch(e.toLowerCase()){case\"undo\":case\"redo\":case\"mcefocus\":return!0;default:return!1}},px=e=>{const t=ys(),n=ds(0),r=ds(0),o={data:[],typing:!1,beforeChange:()=>{((e,t,n)=>{ew(e).undoManager.beforeChange(t,n)})(e,n,t)},add:(i,s)=>((e,t,n,r,o,i,s)=>ew(e).undoManager.add(t,n,r,o,i,s))(e,o,r,n,t,i,s),dispatchChange:()=>{e.setDirty(!0);const t=j_(e);t.bookmark=Ya(e.selection),e.dispatch(\"change\",{level:t,lastLevel:le(o.data,r.get()).getOrUndefined()})},undo:()=>((e,t,n,r)=>ew(e).undoManager.undo(t,n,r))(e,o,n,r),redo:()=>((e,t,n)=>ew(e).undoManager.redo(t,n))(e,r,o.data),clear:()=>{((e,t,n)=>{ew(e).undoManager.clear(t,n)})(e,o,r)},reset:()=>{((e,t)=>{ew(e).undoManager.reset(t)})(e,o)},hasUndo:()=>((e,t,n)=>ew(e).undoManager.hasUndo(t,n))(e,o,r),hasRedo:()=>((e,t,n)=>ew(e).undoManager.hasRedo(t,n))(e,o,r),transact:t=>((e,t,n,r)=>ew(e).undoManager.transact(t,n,r))(e,o,n,t),ignore:t=>{((e,t,n)=>{ew(e).undoManager.ignore(t,n)})(e,n,t)},extra:(t,n)=>{((e,t,n,r,o)=>{ew(e).undoManager.extra(t,n,r,o)})(e,o,r,t,n)}};return J_(e)||((e,t,n)=>{const r=ds(!1),o=e=>{G_(t,!1,n),t.add({},e)};e.on(\"init\",(()=>{t.add()})),e.on(\"BeforeExecCommand\",(e=>{const r=e.command;fx(r)||(K_(t,n),t.beforeChange())})),e.on(\"ExecCommand\",(e=>{const t=e.command;fx(t)||o(e)})),e.on(\"ObjectResizeStart cut\",(()=>{t.beforeChange()})),e.on(\"SaveContent ObjectResized blur\",o),e.on(\"dragend\",o),e.on(\"keyup\",(n=>{const i=n.keyCode;n.isDefaultPrevented()||((i>=33&&i<=36||i>=37&&i<=40||45===i||n.ctrlKey)&&(o(),e.nodeChanged()),46!==i&&8!==i||e.nodeChanged(),r.get()&&t.typing&&!V_(j_(e),t.data[0])&&(e.isDirty()||e.setDirty(!0),e.dispatch(\"TypingUndo\"),r.set(!1),e.nodeChanged()))})),e.on(\"keydown\",(e=>{const i=e.keyCode;if(e.isDefaultPrevented())return;if(i>=33&&i<=36||i>=37&&i<=40||45===i)return void(t.typing&&o(e));const s=e.ctrlKey&&!e.altKey||e.metaKey;!(i<16||i>20)||224===i||91===i||t.typing||s||(t.beforeChange(),G_(t,!0,n),t.add({},e),r.set(!0))})),e.on(\"mousedown\",(e=>{t.typing&&o(e)})),e.on(\"input\",(e=>{var t;e.inputType&&(\"insertReplacementText\"===e.inputType||\"insertText\"===(t=e).inputType&&null===t.data||(e=>\"insertFromPaste\"===e.inputType||\"insertFromDrop\"===e.inputType)(e))&&o(e)})),e.on(\"AddUndo Undo Redo ClearUndos\",(t=>{t.isDefaultPrevented()||e.nodeChanged()}))})(e,o,n),(e=>{e.addShortcut(\"meta+z\",\"\",\"Undo\"),e.addShortcut(\"meta+y,meta+shift+z\",\"\",\"Redo\")})(e),o},gx=[9,27,Yh.HOME,Yh.END,19,20,44,144,145,33,34,45,16,17,18,91,92,93,Yh.DOWN,Yh.UP,Yh.LEFT,Yh.RIGHT].concat(Mt.browser.isFirefox()?[224]:[]),vx=\"data-mce-placeholder\",yx=e=>\"keydown\"===e.type||\"keyup\"===e.type,bx=e=>{const t=e.keyCode;return t===Yh.BACKSPACE||t===Yh.DELETE},_x=e=>{var t;const n=e.dom,r=cl(e),o=null!==(t=Yl(e))&&void 0!==t?t:\"\",i=(t,s)=>{if((e=>{if(yx(e)){const t=e.keyCode;return!bx(e)&&(Yh.metaKeyPressed(e)||e.altKey||t>=112&&t<=123||W(gx,t))}return!1})(t))return;const a=e.getBody(),l=!(e=>yx(e)&&!(bx(e)||\"keyup\"===e.type&&229===e.keyCode))(t)&&((e,t,n)=>{if(ui(dn.fromDom(t),!1)){const r=t.firstElementChild;return!r||!e.getStyle(t.firstElementChild,\"padding-left\")&&!e.getStyle(t.firstElementChild,\"padding-right\")&&n===r.nodeName.toLowerCase()}return!1})(n,a,r);(\"\"!==n.getAttrib(a,vx)!==l||s)&&(n.setAttrib(a,vx,l?o:null),n.setAttrib(a,\"aria-placeholder\",l?o:null),((e,t)=>{e.dispatch(\"PlaceholderToggle\",{state:t})})(e,l),e.on(l?\"keydown\":\"keyup\",i),e.off(l?\"keyup\":\"keydown\",i))};Ge(o)&&e.on(\"init\",(t=>{i(t,!0),e.on(\"change SetContent ExecCommand\",i),e.on(\"paste\",(t=>nf.setEditorTimeout(e,(()=>i(t)))))}))},wx=(e,t)=>({from:e,to:t}),xx=(e,t)=>{const n=dn.fromDom(e),r=dn.fromDom(t.container());return fg(n,r).map((e=>((e,t)=>({block:e,position:t}))(e,t)))},Cx=(e,t,n)=>{const r=xx(e,ga.fromRangeStart(n)),o=r.bind((n=>Uu(t,e,n.position).bind((n=>xx(e,n).map((n=>((e,t,n)=>Fr(n.position.getNode())&&!ui(n.block)?Gu(!1,n.block.dom).bind((r=>r.isEqual(n.position)?Uu(t,e,r).bind((t=>xx(e,t))):Y.some(n))).getOr(n):n)(e,t,n)))))));return Bt(r,o,wx).filter((e=>(e=>!pn(e.from.block,e.to.block))(e)&&(e=>_n(e.from.block).bind((t=>_n(e.to.block).filter((e=>pn(t,e))))).isSome())(e)&&(e=>!1===Rr(e.from.block.dom)&&!1===Rr(e.to.block.dom))(e)))},kx=e=>{const t=Dn(e);return ee(t,no).fold(L(t),(e=>t.slice(0,e)))},Dx=e=>{const t=kx(e);return V(t,Zn),t},Sx=(e,t)=>{const n=hp(t,e);return Z(n.reverse(),(e=>ui(e))).each(Zn)},Ax=(e,t,n,r)=>{if(ui(n))return Do(n),Ju(n.dom);0===K(Cn(r),(e=>!ui(e))).length&&ui(t)&&qn(r,dn.fromTag(\"br\"));const o=Xu(n.dom,ga.before(r.dom));return V(Dx(t),(e=>{qn(r,e)})),Sx(e,t),o},Mx=(e,t,n)=>{if(ui(n))return Zn(n),ui(t)&&Do(t),Ju(t.dom);const r=Qu(n.dom);return V(Dx(t),(e=>{Xn(n,e)})),Sx(e,t),r},Lx=(e,t)=>gn(t,e)?((e,t)=>{const n=hp(t,e);return Y.from(n[n.length-1])})(t,e):Y.none(),Ex=(e,t)=>{Gu(e,t.dom).bind((e=>Y.from(e.getNode()))).map(dn.fromDom).filter(oo).each(Zn)},Tx=(e,t,n)=>(Ex(!0,t),Ex(!1,n),Lx(t,n).fold(F(Mx,e,t,n),F(Ax,e,t,n))),Fx=(e,t,n,r)=>t?Tx(e,r,n):Tx(e,n,r),Ox=(e,t)=>{const n=dn.fromDom(e.getBody()),r=((e,t,n)=>n.collapsed?Cx(e,t,n):Y.none())(n.dom,t,e.selection.getRng()).map((r=>()=>{Fx(n,t,r.from.block,r.to.block).each((t=>{e.selection.setRng(t.toRange())}))}));return r},Bx=(e,t)=>{const n=dn.fromDom(t),r=F(pn,e);return Ur(n,co,r).isSome()},Rx=(e,t)=>{const n=Xu(e.dom,ga.fromRangeStart(t)).isNone(),r=Ku(e.dom,ga.fromRangeEnd(t)).isNone();return!((e,t)=>Bx(e,t.startContainer)||Bx(e,t.endContainer))(e,t)&&n&&r},$x=e=>{const t=dn.fromDom(e.getBody()),n=e.selection.getRng();return Rx(t,n)?(e=>Y.some((()=>{e.setContent(\"\"),e.selection.setCursorLocation()})))(e):((e,t)=>{const n=t.getRng();return Bt(fg(e,dn.fromDom(n.startContainer)),fg(e,dn.fromDom(n.endContainer)),((r,o)=>pn(r,o)?Y.none():Y.some((()=>{n.deleteContents(),Fx(e,!0,r,o).each((e=>{t.setRng(e.toRange())}))})))).getOr(Y.none())})(t,e.selection)},Nx=(e,t)=>e.selection.isCollapsed()?Y.none():$x(e),Yx=(e,t,n,r,o)=>Y.from(t._selectionOverrides.showCaret(e,n,r,o)),Px=(e,t)=>e.dispatch(\"BeforeObjectSelected\",{target:t}).isDefaultPrevented()?Y.none():Y.some((e=>{const t=e.ownerDocument.createRange();return t.selectNode(e),t})(t)),Ix=(e,t,n)=>t.collapsed?((e,t,n)=>{const r=Cu(1,e.getBody(),t),o=ga.fromRangeStart(r),i=o.getNode();if(eu(i))return Yx(1,e,i,!o.isAtEnd(),!1);const s=o.getNode(!0);if(eu(s))return Yx(1,e,s,!1,!1);const a=qg(e.dom.getRoot(),o.getNode());return eu(a)?Yx(1,e,a,!1,n):Y.none()})(e,t,n).getOr(t):t,Hx=e=>lp(e)||op(e),jx=e=>cp(e)||ip(e),Wx=(e,t,n,r,o,i)=>{Yx(r,e,i.getNode(!o),o,!0).each((n=>{if(t.collapsed){const e=t.cloneRange();o?e.setEnd(n.startContainer,n.startOffset):e.setStart(n.endContainer,n.endOffset),e.deleteContents()}else t.deleteContents();e.selection.setRng(n)})),((e,t)=>{Sr(t)&&0===t.data.length&&e.remove(t)})(e.dom,n)},zx=(e,t)=>((e,t)=>{const n=e.selection.getRng();if(!Sr(n.commonAncestorContainer))return Y.none();const r=t?Lu.Forwards:Lu.Backwards,o=Iu(e.getBody()),i=F(Au,t?o.next:o.prev),s=t?Hx:jx,a=Du(r,e.getBody(),n),l=i(a),c=l?lg(t,l):l;if(!c||!Mu(a,c))return Y.none();if(s(c))return Y.some((()=>Wx(e,n,a.getNode(),r,t,c)));const u=i(c);return u&&s(u)&&Mu(c,u)?Y.some((()=>Wx(e,n,a.getNode(),r,t,u))):Y.none()})(e,t),Ux=(e,t)=>{const n=e.getBody();return t?Ju(n).filter(lp):Qu(n).filter(cp)},Vx=e=>{const t=e.selection.getRng();return!t.collapsed&&(Ux(e,!0).exists((e=>e.isEqual(ga.fromRangeStart(t))))||Ux(e,!1).exists((e=>e.isEqual(ga.fromRangeEnd(t)))))},qx=ja([{remove:[\"element\"]},{moveToElement:[\"element\"]},{moveToPosition:[\"position\"]}]),Gx=(e,t,n,r)=>{const o=r.getNode(!t);return fg(dn.fromDom(e),dn.fromDom(n.getNode())).map((e=>ui(e)?qx.remove(e.dom):qx.moveToElement(o))).orThunk((()=>Y.some(qx.moveToElement(o))))},Kx=(e,t,n)=>Uu(t,e,n).bind((r=>{return o=r.getNode(),x(o)&&(co(dn.fromDom(o))||ao(dn.fromDom(o)))||((e,t,n,r)=>{const o=t=>ro(dn.fromDom(t))&&!gu(n,r,e);return ku(!t,n).fold((()=>ku(t,r).fold($,o)),o)})(e,t,n,r)?Y.none():t&&Rr(r.getNode())||!t&&Rr(r.getNode(!0))?Gx(e,t,n,r):t&&cp(n)||!t&&lp(n)?Y.some(qx.moveToPosition(r)):Y.none();var o})),Xx=(e,t,n)=>((e,t)=>{const n=t.getNode(!e),r=e?\"after\":\"before\";return vr(n)&&n.getAttribute(\"data-mce-caret\")===r})(t,n)?((e,t)=>w(t)?Y.none():e&&Rr(t.nextSibling)?Y.some(qx.moveToElement(t.nextSibling)):!e&&Rr(t.previousSibling)?Y.some(qx.moveToElement(t.previousSibling)):Y.none())(t,n.getNode(!t)).orThunk((()=>Kx(e,t,n))):Kx(e,t,n).bind((t=>((e,t,n)=>n.fold((e=>Y.some(qx.remove(e))),(e=>Y.some(qx.moveToElement(e))),(n=>gu(t,n,e)?Y.none():Y.some(qx.moveToPosition(n)))))(e,n,t))),Jx=(e,t)=>Y.from(qg(e.getBody(),t)),Qx=(e,t)=>{const n=e.selection.getNode();return Jx(e,n).filter(Rr).fold((()=>((e,t,n)=>{const r=Cu(t?1:-1,e,n),o=ga.fromRangeStart(r),i=dn.fromDom(e);return!t&&cp(o)?Y.some(qx.remove(o.getNode(!0))):t&&lp(o)?Y.some(qx.remove(o.getNode())):!t&&lp(o)&&kp(i,o)?Dp(i,o).map((e=>qx.remove(e.getNode()))):t&&cp(o)&&Cp(i,o)?Sp(i,o).map((e=>qx.remove(e.getNode()))):Xx(e,t,o)})(e.getBody(),t,e.selection.getRng()).map((n=>()=>n.fold(((e,t)=>n=>(e._selectionOverrides.hideFakeCaret(),rg(e,t,dn.fromDom(n)),!0))(e,t),((e,t)=>n=>{const r=t?ga.before(n):ga.after(n);return e.selection.setRng(r.toRange()),!0})(e,t),(e=>t=>(e.selection.setRng(t.toRange()),!0))(e))))),(()=>Y.some(S)))},Zx=(e,t)=>{const n=e.selection.getNode();if(Rr(n)&&!$r(n)){return Jx(e,n.parentNode).filter(Rr).fold((()=>Y.some((()=>{var n;n=dn.fromDom(e.getBody()),V(bo(n,\".mce-offscreen-selection\"),Zn),rg(e,t,dn.fromDom(e.selection.getNode())),pg(e)}))),(()=>Y.some(S)))}return Vx(e)?Y.some((()=>{vg(e,e.selection.getRng(),dn.fromDom(e.getBody()))})):Y.none()},eC=e=>{const t=e.dom,n=e.selection,r=qg(e.getBody(),n.getNode());if(Br(r)&&t.isBlock(r)&&t.isEmpty(r)){const e=t.create(\"br\",{\"data-mce-bogus\":\"1\"});t.setHTML(r,\"\"),r.appendChild(e),n.setRng(ga.before(e).toRange())}return!0},tC=(e,t)=>e.selection.isCollapsed()?Qx(e,t):Zx(e,t),nC=(e,t)=>e.selection.isCollapsed()?((e,t)=>{const n=ga.fromRangeStart(e.selection.getRng());return Uu(t,e.getBody(),n).filter((e=>t?np(e):rp(e))).bind((e=>vu(t?0:-1,e))).map((t=>()=>e.selection.select(t)))})(e,t):Y.none(),rC=Sr,oC=e=>rC(e)&&e.data[0]===Ao,iC=e=>rC(e)&&e.data[e.data.length-1]===Ao,sC=e=>{var t;return(null!==(t=e.ownerDocument)&&void 0!==t?t:document).createTextNode(Ao)},aC=(e,t)=>e?(e=>{var t;if(rC(e.previousSibling))return iC(e.previousSibling)||e.previousSibling.appendData(Ao),e.previousSibling;if(rC(e))return oC(e)||e.insertData(0,Ao),e;{const n=sC(e);return null===(t=e.parentNode)||void 0===t||t.insertBefore(n,e),n}})(t):(e=>{var t,n;if(rC(e.nextSibling))return oC(e.nextSibling)||e.nextSibling.insertData(0,Ao),e.nextSibling;if(rC(e))return iC(e)||e.appendData(Ao),e;{const r=sC(e);return e.nextSibling?null===(t=e.parentNode)||void 0===t||t.insertBefore(r,e.nextSibling):null===(n=e.parentNode)||void 0===n||n.appendChild(r),r}})(t),lC=F(aC,!0),cC=F(aC,!1),uC=(e,t)=>Sr(e.container())?aC(t,e.container()):aC(t,e.getNode()),dC=(e,t)=>{const n=t.get();return n&&e.container()===n&&Oo(n)},hC=(e,t)=>t.fold((t=>{qc(e.get());const n=lC(t);return e.set(n),Y.some(ga(n,n.length-1))}),(t=>Ju(t).map((t=>{if(dC(t,e)){const t=e.get();return ga(t,1)}{qc(e.get());const n=uC(t,!0);return e.set(n),ga(n,1)}}))),(t=>Qu(t).map((t=>{if(dC(t,e)){const t=e.get();return ga(t,t.length-1)}{qc(e.get());const n=uC(t,!1);return e.set(n),ga(n,n.length-1)}}))),(t=>{qc(e.get());const n=cC(t);return e.set(n),Y.some(ga(n,1))})),mC=(e,t)=>{for(let n=0;n<e.length;n++){const r=e[n].apply(null,t);if(r.isSome())return r}return Y.none()},fC=ja([{before:[\"element\"]},{start:[\"element\"]},{end:[\"element\"]},{after:[\"element\"]}]),pC=(e,t)=>{const n=pu(t,e);return n||e},gC=(e,t,n)=>{const r=cg(n),o=pC(t,r.container());return ag(e,o,r).fold((()=>Ku(o,r).bind(F(ag,e,o)).map((e=>fC.before(e)))),Y.none)},vC=(e,t)=>null===td(e,t),yC=(e,t,n)=>ag(e,t,n).filter(F(vC,t)),bC=(e,t,n)=>{const r=ug(n);return yC(e,t,r).bind((e=>Xu(e,r).isNone()?Y.some(fC.start(e)):Y.none()))},_C=(e,t,n)=>{const r=cg(n);return yC(e,t,r).bind((e=>Ku(e,r).isNone()?Y.some(fC.end(e)):Y.none()))},wC=(e,t,n)=>{const r=ug(n),o=pC(t,r.container());return ag(e,o,r).fold((()=>Xu(o,r).bind(F(ag,e,o)).map((e=>fC.after(e)))),Y.none)},xC=e=>!sg(kC(e)),CC=(e,t,n)=>mC([gC,bC,_C,wC],[e,t,n]).filter(xC),kC=e=>e.fold(E,E,E,E),DC=e=>e.fold(L(\"before\"),L(\"start\"),L(\"end\"),L(\"after\")),SC=e=>e.fold(fC.before,fC.before,fC.after,fC.after),AC=e=>e.fold(fC.start,fC.start,fC.end,fC.end),MC=(e,t,n,r,o,i)=>Bt(ag(t,n,r),ag(t,n,o),((t,r)=>t!==r&&((e,t,n)=>{const r=pu(t,e),o=pu(n,e);return x(r)&&r===o})(n,t,r)?fC.after(e?t:r):i)).getOr(i),LC=(e,t)=>e.fold(N,(e=>{return r=t,!(DC(n=e)===DC(r)&&kC(n)===kC(r));var n,r})),EC=(e,t)=>e?t.fold(A(Y.some,fC.start),Y.none,A(Y.some,fC.after),Y.none):t.fold(Y.none,A(Y.some,fC.before),Y.none,A(Y.some,fC.end)),TC=(e,t,n,r)=>{const o=lg(e,r),i=CC(t,n,o);return CC(t,n,o).bind(F(EC,e)).orThunk((()=>((e,t,n,r,o)=>{const i=lg(e,o);return Uu(e,n,i).map(F(lg,e)).fold((()=>r.map(SC)),(o=>CC(t,n,o).map(F(MC,e,t,n,i,o)).filter(F(LC,r)))).filter(xC)})(e,t,n,i,r)))},FC=(e,t,n)=>{const r=e?1:-1;return t.setRng(ga(n.container(),n.offset()+r).toRange()),t.getSel().modify(\"move\",e?\"forward\":\"backward\",\"word\"),!0},OC=(e,t)=>{const n=t.selection.getRng(),r=e?ga.fromRangeEnd(n):ga.fromRangeStart(n);return!!(e=>C(e.selection.getSel().modify))(t)&&(e&&$o(r)?FC(!0,t.selection,r):!(e||!No(r))&&FC(!1,t.selection,r))};var BC;!function(e){e[e.Br=0]=\"Br\",e[e.Block=1]=\"Block\",e[e.Wrap=2]=\"Wrap\",e[e.Eol=3]=\"Eol\"}(BC||(BC={}));const RC=(e,t)=>e===Lu.Backwards?oe(t):t,$C=(e,t,n)=>e===Lu.Forwards?t.next(n):t.prev(n),NC=(e,t,n,r)=>Fr(r.getNode(t===Lu.Forwards))?BC.Br:!1===gu(n,r)?BC.Block:BC.Wrap,YC=(e,t,n,r)=>{const o=Iu(n);let i=r;const s=[];for(;i;){const n=$C(t,o,i);if(!n)break;if(Fr(n.getNode(!1)))return t===Lu.Forwards?{positions:RC(t,s).concat([n]),breakType:BC.Br,breakAt:Y.some(n)}:{positions:RC(t,s),breakType:BC.Br,breakAt:Y.some(n)};if(n.isVisible()){if(e(i,n)){const e=NC(0,t,i,n);return{positions:RC(t,s),breakType:e,breakAt:Y.some(n)}}s.push(n),i=n}else i=n}return{positions:RC(t,s),breakType:BC.Eol,breakAt:Y.none()}},PC=(e,t,n,r)=>t(n,r).breakAt.map((r=>{const o=t(n,r).positions;return e===Lu.Backwards?o.concat(r):[r].concat(o)})).getOr([]),IC=(e,t)=>J(e,((e,n)=>e.fold((()=>Y.some(n)),(r=>Bt(ce(r.getClientRects()),ce(n.getClientRects()),((e,o)=>{const i=Math.abs(t-e.left);return Math.abs(t-o.left)<=i?n:r})).or(e)))),Y.none()),HC=(e,t)=>ce(t.getClientRects()).bind((t=>IC(e,t.left))),jC=F(YC,ga.isAbove,-1),WC=F(YC,ga.isBelow,1),zC=F(PC,-1,jC),UC=F(PC,1,WC),VC=(e,t)=>HC(zC(e,t),t),qC=(e,t)=>HC(UC(e,t),t),GC=Rr,KC=(e,t)=>Math.abs(e.left-t),XC=(e,t)=>Math.abs(e.right-t),JC=(e,t)=>Fe(e,((e,n)=>{const r=Math.min(KC(e,t),XC(e,t)),o=Math.min(KC(n,t),XC(n,t));return o===r&&De(n,\"node\")&&GC(n.node)||o<r?n:e})),QC=e=>{const t=t=>U(t,(t=>{const n=js(t);return n.node=e,n}));if(vr(e))return t(e.getClientRects());if(Sr(e)){const n=e.ownerDocument.createRange();return n.setStart(e,0),n.setEnd(e,e.data.length),t(n.getClientRects())}return[]},ZC=e=>ne(e,QC);var ek;!function(e){e[e.Up=-1]=\"Up\",e[e.Down=1]=\"Down\"}(ek||(ek={}));const tk=(e,t,n,r,o,i)=>{let s=0;const a=[],l=r=>{let i=ZC([r]);-1===e&&(i=i.reverse());for(let e=0;e<i.length;e++){const r=i[e];if(!n(r,c)){if(a.length>0&&t(r,Be(a))&&s++,r.line=s,o(r))return!0;a.push(r)}}return!1},c=Be(i.getClientRects());if(!c)return a;const u=i.getNode();return u&&(l(u),((e,t,n,r)=>{let o=r;for(;o=fu(o,e,Qo,t);)if(n(o))return})(e,r,l,u)),a},nk=F(tk,ek.Up,Us,Vs),rk=F(tk,ek.Down,Vs,Us),ok=e=>Be(e.getClientRects()),ik=e=>t=>((e,t)=>t.line>e)(e,t),sk=e=>t=>((e,t)=>t.line===e)(e,t),ak=(e,t)=>{e.selection.setRng(t),jm(e,e.selection.getRng())},lk=(e,t,n)=>Y.some(Ix(e,t,n)),ck=(e,t,n,r,o,i)=>{const s=t===Lu.Forwards,a=Iu(e.getBody()),l=F(Au,s?a.next:a.prev),c=s?r:o;if(!n.collapsed){const r=Gs(n);if(i(r))return Yx(t,e,r,t===Lu.Backwards,!1);if(Vx(e)){const e=n.cloneRange();return e.collapse(t===Lu.Backwards),Y.from(e)}}const u=Du(t,e.getBody(),n);if(c(u))return Px(e,u.getNode(!s));let d=l(u);const h=Ho(n);if(!d)return h?Y.some(n):Y.none();if(d=lg(s,d),c(d))return Yx(t,e,d.getNode(!s),s,!1);const m=l(d);return m&&c(m)&&Mu(d,m)?Yx(t,e,m.getNode(!s),s,!1):h?lk(e,d.toRange(),!1):Y.none()},uk=(e,t,n,r,o,i)=>{const s=Du(t,e.getBody(),n),a=Be(s.getClientRects()),l=t===ek.Down,c=e.getBody();if(!a)return Y.none();if(Vx(e)){const e=l?ga.fromRangeEnd(n):ga.fromRangeStart(n);return(l?qC:VC)(c,e).orThunk((()=>Y.from(e))).map((e=>e.toRange()))}const u=(l?rk:nk)(c,ik(1),s),d=K(u,sk(1)),h=a.left,m=JC(d,h);if(m&&i(m.node)){const n=Math.abs(h-m.left),r=Math.abs(h-m.right);return Yx(t,e,m.node,n<r,!1)}let f;if(f=r(s)?s.getNode():o(s)?s.getNode(!0):Gs(n),f){const n=((e,t,n,r)=>{const o=Iu(t);let i,s,a,l;const c=[];let u=0;1===e?(i=o.next,s=Vs,a=Us,l=ga.after(r)):(i=o.prev,s=Us,a=Vs,l=ga.before(r));const d=ok(l);do{if(!l.isVisible())continue;const e=ok(l);if(a(e,d))continue;c.length>0&&s(e,Be(c))&&u++;const t=js(e);if(t.position=l,t.line=u,n(t))return c;c.push(t)}while(l=i(l));return c})(t,c,ik(1),f);let r=JC(K(n,sk(1)),h);if(r)return lk(e,r.position.toRange(),!1);if(r=Be(K(n,sk(0))),r)return lk(e,r.position.toRange(),!1)}return 0===d.length?dk(e,l).filter(l?o:r).map((t=>Ix(e,t.toRange(),!1))):Y.none()},dk=(e,t)=>{const n=e.selection.getRng(),r=t?ga.fromRangeEnd(n):ga.fromRangeStart(n),o=(i=r.container(),s=e.getBody(),Ur(dn.fromDom(i),(e=>nu(e.dom)),(e=>e.dom===s)).map((e=>e.dom)).getOr(s));var i,s;if(t){const e=WC(o,r);return ue(e.positions)}{const e=jC(o,r);return ce(e.positions)}},hk=(e,t,n)=>dk(e,t).filter(n).exists((t=>(e.selection.setRng(t.toRange()),!0))),mk=(e,t)=>{const n=e.dom.createRng();n.setStart(t.container(),t.offset()),n.setEnd(t.container(),t.offset()),e.selection.setRng(n)},fk=(e,t)=>{e?t.setAttribute(\"data-mce-selected\",\"inline-boundary\"):t.removeAttribute(\"data-mce-selected\")},pk=(e,t,n)=>hC(t,n).map((t=>(mk(e,t),n))),gk=(e,t,n)=>{const r=e.getBody(),o=((e,t,n)=>{const r=ga.fromRangeStart(e);if(e.collapsed)return r;{const o=ga.fromRangeEnd(e);return n?Xu(t,o).getOr(o):Ku(t,r).getOr(r)}})(e.selection.getRng(),r,n),i=F(ig,e);return TC(n,i,r,o).bind((n=>pk(e,t,n)))},vk=(e,t)=>{const n=t.get();if(e.selection.isCollapsed()&&!e.composing&&n){const r=ga.fromRangeStart(e.selection.getRng());ga.isTextPosition(r)&&!(e=>$o(e)||No(e))(r)&&(mk(e,Vc(n,r)),t.set(null))}},yk=(e,t,n)=>!!Ul(e)&&gk(e,t,n).isSome(),bk=(e,t,n)=>!!Ul(t)&&OC(e,t),_k=e=>{const t=ds(null),n=F(ig,e);return e.on(\"NodeChange\",(r=>{Ul(e)&&(((e,t,n)=>{const r=U(bo(dn.fromDom(t.getRoot()),'*[data-mce-selected=\"inline-boundary\"]'),(e=>e.dom)),o=K(r,e),i=K(n,e);V(ie(o,i),F(fk,!1)),V(ie(i,o),F(fk,!0))})(n,e.dom,r.parents),vk(e,t),((e,t,n,r)=>{if(t.selection.isCollapsed()){const o=K(r,e);V(o,(r=>{const o=ga.fromRangeStart(t.selection.getRng());CC(e,t.getBody(),o).bind((e=>pk(t,n,e)))}))}})(n,e,t,r.parents))})),t},wk=F(bk,!0),xk=F(bk,!1),Ck=(e,t,n)=>{if(Ul(e)){const r=dk(e,t).getOrThunk((()=>{const n=e.selection.getRng();return t?ga.fromRangeEnd(n):ga.fromRangeStart(n)}));return CC(F(ig,e),e.getBody(),r).exists((t=>{const r=SC(t);return hC(n,r).exists((t=>(mk(e,t),!0)))}))}return!1},kk=(e,t)=>n=>hC(t,n).map((t=>()=>mk(e,t))),Dk=(e,t,n,r)=>{const o=e.getBody(),i=F(ig,e);e.undoManager.ignore((()=>{e.selection.setRng(((e,t)=>{const n=document.createRange();return n.setStart(e.container(),e.offset()),n.setEnd(t.container(),t.offset()),n})(n,r)),hg(e),CC(i,o,ga.fromRangeStart(e.selection.getRng())).map(AC).bind(kk(e,t)).each(R)})),e.nodeChanged()},Sk=(e,t,n,r)=>{const o=((e,t)=>pu(t,e)||e)(e.getBody(),r.container()),i=F(ig,e),s=CC(i,o,r);return s.bind((e=>n?e.fold(L(Y.some(AC(e))),Y.none,L(Y.some(SC(e))),Y.none):e.fold(Y.none,L(Y.some(SC(e))),Y.none,L(Y.some(AC(e)))))).map(kk(e,t)).getOrThunk((()=>{const a=Vu(n,o,r),l=a.bind((e=>CC(i,o,e)));return Bt(s,l,(()=>ag(i,o,r).bind((t=>(e=>Bt(Ju(e),Qu(e),((t,n)=>{const r=lg(!0,t),o=lg(!1,n);return Ku(e,r).forall((e=>e.isEqual(o)))})).getOr(!0))(t)?Y.some((()=>{rg(e,n,dn.fromDom(t))})):Y.none())))).getOrThunk((()=>l.bind((()=>a.map((o=>()=>{n?Dk(e,t,r,o):Dk(e,t,o,r)}))))))}))},Ak=(e,t,n)=>{if(e.selection.isCollapsed()&&Ul(e)){const r=ga.fromRangeStart(e.selection.getRng());return Sk(e,t,n,r)}return Y.none()},Mk=e=>1===Ln(e),Lk=(e,t,n,r)=>{const o=F(Uv,t),i=U(K(r,o),(e=>e.dom));if(0===i.length)rg(t,e,n);else{const e=((e,t)=>{const n=Yv(!1),r=jv(t,n.dom);return qn(dn.fromDom(e),n),Zn(dn.fromDom(e)),ga(r,0)})(n.dom,i);t.selection.setRng(e.toRange())}},Ek=(e,t)=>{const n=dn.fromDom(e.getBody()),r=dn.fromDom(e.selection.getStart()),o=K(((e,t)=>{const n=hp(t,e);return ee(n,no).fold(L(n),(e=>n.slice(0,e)))})(n,r),Mk);return ue(o).bind((n=>{const r=ga.fromRangeStart(e.selection.getRng());return!((e,t,n)=>Bt(Ju(n),Qu(n),((r,o)=>{const i=lg(!0,r),s=lg(!1,o),a=lg(!1,t);return e?Ku(n,a).exists((e=>e.isEqual(s)&&t.isEqual(i))):Xu(n,a).exists((e=>e.isEqual(i)&&t.isEqual(s)))})).getOr(!0))(t,r,n.dom)||ed((i=n).dom)&&$v(i.dom)?Y.none():Y.some((()=>Lk(t,e,n,o)));var i}))},Tk=(e,t)=>e.selection.isCollapsed()?Ek(e,t):Y.none(),Fk=(e,t,n)=>x(n)?Y.some((()=>{e._selectionOverrides.hideFakeCaret(),rg(e,t,dn.fromDom(n))})):Y.none(),Ok=(e,t)=>e.selection.isCollapsed()?((e,t)=>{const n=t?op:ip,r=t?Lu.Forwards:Lu.Backwards,o=Du(r,e.getBody(),e.selection.getRng());return n(o)?Fk(e,t,o.getNode(!t)):Y.from(lg(t,o)).filter((e=>n(e)&&Mu(o,e))).bind((n=>Fk(e,t,n.getNode(!t))))})(e,t):((e,t)=>{const n=e.selection.getNode();return Yr(n)?Fk(e,t,n):Y.none()})(e,t),Bk=e=>Xe(null!=e?e:\"\").getOr(0),Rk=(e,t)=>(e||\"table\"===$t(t)?\"margin\":\"padding\")+(\"rtl\"===jn(t,\"direction\")?\"-right\":\"-left\"),$k=e=>{const t=Yk(e);return!e.mode.isReadOnly()&&(t.length>1||((e,t)=>re(t,(t=>{const n=Rk(Ll(e),t),r=zn(t,n).map(Bk).getOr(0);return\"false\"!==e.dom.getContentEditable(t.dom)&&r>0})))(e,t))},Nk=e=>so(e)||ao(e),Yk=e=>{return K((t=e.selection.getSelectedBlocks(),U(t,dn.fromDom)),(e=>!Nk(e)&&!(e=>_n(e).exists(Nk))(e)&&Vr(e,(e=>Br(e.dom)||Rr(e.dom))).exists((e=>Br(e.dom)))));var t},Pk=(e,t)=>{var n,r;const{dom:o}=e,i=El(e),s=null!==(r=null===(n=/[a-z%]+$/i.exec(i))||void 0===n?void 0:n[0])&&void 0!==r?r:\"px\",a=Bk(i),l=Ll(e);V(Yk(e),(e=>{((e,t,n,r,o,i)=>{const s=Rk(n,dn.fromDom(i)),a=Bk(e.getStyle(i,s));if(\"outdent\"===t){const t=Math.max(0,a-r);e.setStyle(i,s,t?t+o:\"\")}else{const t=a+r+o;e.setStyle(i,s,t)}})(o,t,l,a,s,e.dom)}))},Ik=e=>Pk(e,\"outdent\"),Hk=e=>{if(e.selection.isCollapsed()&&$k(e)){const t=e.dom,n=e.selection.getRng(),r=ga.fromRangeStart(n),o=t.getParent(n.startContainer,t.isBlock);if(null!==o&&vp(dn.fromDom(o),r))return Y.some((()=>Ik(e)))}return Y.none()},jk=(e,t,n)=>he([Hk,tC,zx,(e,n)=>Ak(e,t,n),Ox,Vg,nC,Ok,Nx,Tk],(t=>t(e,n))),Wk=(e,t)=>{jk(e,t,!0).fold((()=>(e=>dg(e,\"ForwardDelete\"))(e)),R)},zk=(e,t)=>{e.addCommand(\"delete\",(()=>{((e,t)=>{jk(e,t,!1).fold((()=>{hg(e),pg(e)}),R)})(e,t)})),e.addCommand(\"forwardDelete\",(()=>{Wk(e,t)}))},Uk=e=>void 0===e.touches||1!==e.touches.length?Y.none():Y.some(e.touches[0]),Vk=e=>{const t=ys(),n=ds(!1),r=_s((t=>{e.dispatch(\"longpress\",{...t,type:\"longpress\"}),n.set(!0)}),400);e.on(\"touchstart\",(e=>{Uk(e).each((o=>{r.cancel();const i={x:o.clientX,y:o.clientY,target:e.target};r.throttle(e),n.set(!1),t.set(i)}))}),!0),e.on(\"touchmove\",(o=>{r.cancel(),Uk(o).each((r=>{t.on((o=>{((e,t)=>{const n=Math.abs(e.clientX-t.x),r=Math.abs(e.clientY-t.y);return n>5||r>5})(r,o)&&(t.clear(),n.set(!1),e.dispatch(\"longpresscancel\"))}))}))}),!0),e.on(\"touchend touchcancel\",(o=>{r.cancel(),\"touchcancel\"!==o.type&&t.get().filter((e=>e.target.isEqualNode(o.target))).each((()=>{n.get()?o.preventDefault():e.dispatch(\"tap\",{...o,type:\"tap\"})}))}),!0)},qk=(e,t)=>ke(e,t.nodeName),Gk=(e,t)=>!!Sr(t)||!!vr(t)&&(!qk(e,t)&&!fd(t)),Kk=(e,t)=>{if(Sr(t)){if(0===t.data.length)return!0;if(/^\\s+$/.test(t.data)&&(!t.nextSibling||qk(e,t.nextSibling)))return!0}return!1},Xk=e=>e.dom.create(cl(e),ul(e)),Jk=e=>{const t=e.dom,n=e.selection,r=e.schema,o=r.getBlockElements(),i=n.getStart(),s=e.getBody();let a,l,c=!1;const u=cl(e);if(!i||!vr(i))return;const d=s.nodeName.toLowerCase();if(!r.isValidChild(d,u.toLowerCase())||((e,t,n)=>z(dp(dn.fromDom(n),dn.fromDom(t)),(t=>qk(e,t.dom))))(o,s,i))return;const h=n.getRng(),{startContainer:m,startOffset:f,endContainer:p,endOffset:g}=h,v=ff(e);let y=s.firstChild;for(;y;)if(Gk(o,y)){if(Kk(o,y)){l=y,y=y.nextSibling,t.remove(l);continue}a||(a=Xk(e),s.insertBefore(a,y),c=!0),l=y,y=y.nextSibling,a.appendChild(l)}else a=null,y=y.nextSibling;c&&v&&(h.setStart(m,f),h.setEnd(p,g),n.setRng(h),e.nodeChanged())},Qk=(e,t,n)=>{const r=dn.fromDom(Xk(e)),o=ko();Xn(r,o),n(t,r);const i=document.createRange();return i.setStartBefore(o.dom),i.setEndBefore(o.dom),i},Zk=e=>t=>-1!==(\" \"+t.attr(\"class\")+\" \").indexOf(e),eD=(e,t,n)=>function(r){const o=arguments,i=o[o.length-2],s=i>0?t.charAt(i-1):\"\";if('\"'===s)return r;if(\">\"===s){const e=t.lastIndexOf(\"<\",i);if(-1!==e){if(-1!==t.substring(e,i).indexOf('contenteditable=\"false\"'))return r}}return'<span class=\"'+n+'\" data-mce-content=\"'+e.dom.encode(o[0])+'\">'+e.dom.encode(\"string\"==typeof o[1]?o[1]:o[0])+\"</span>\"},tD=e=>{const t=\"contenteditable\",n=\" \"+Ft.trim(Oc(e))+\" \",r=\" \"+Ft.trim(Fc(e))+\" \",o=Zk(n),i=Zk(r),s=Bc(e);s.length>0&&e.on(\"BeforeSetContent\",(t=>{((e,t,n)=>{let r=t.length,o=n.content;if(\"raw\"!==n.format){for(;r--;)o=o.replace(t[r],eD(e,o,Fc(e)));n.content=o}})(e,s,t)})),e.parser.addAttributeFilter(\"class\",(e=>{let n=e.length;for(;n--;){const r=e[n];o(r)?r.attr(t,\"true\"):i(r)&&r.attr(t,\"false\")}})),e.serializer.addAttributeFilter(t,(e=>{let n=e.length;for(;n--;){const r=e[n];(o(r)||i(r))&&(s.length>0&&r.attr(\"data-mce-content\")?(r.name=\"#text\",r.type=3,r.raw=!0,r.value=r.attr(\"data-mce-content\")):r.attr(t,null))}}))},nD=(e,t)=>{t.hasAttribute(\"data-mce-caret\")&&(Io(t),e.selection.setRng(e.selection.getRng()),e.selection.scrollIntoView(t))},rD=(e,t)=>{const n=(e=>Kr(dn.fromDom(e.getBody()),\"*[data-mce-caret]\").map((e=>e.dom)).getOrNull())(e);if(n)return\"compositionstart\"===t.type?(t.preventDefault(),t.stopPropagation(),void nD(e,n)):void(Ro(n)&&(nD(e,n),e.undoManager.add()))},oD=Rr,iD=(e,t,n)=>{const r=Iu(e.getBody()),o=F(Au,1===t?r.next:r.prev);if(n.collapsed){const r=e.dom.getParent(n.startContainer,\"PRE\");if(!r)return;if(!o(ga.fromRangeStart(n))){const n=dn.fromDom((e=>{const t=e.dom.create(cl(e));return t.innerHTML='<br data-mce-bogus=\"1\">',t})(e));1===t?Gn(dn.fromDom(r),n):qn(dn.fromDom(r),n),e.selection.select(n.dom,!0),e.selection.collapse()}}},sD=(e,t)=>{const n=t?Lu.Forwards:Lu.Backwards,r=e.selection.getRng();return((e,t,n)=>ck(t,e,n,lp,cp,oD))(n,e,r).orThunk((()=>(iD(e,n,r),Y.none())))},aD=(e,t)=>{const n=t?1:-1,r=e.selection.getRng();return((e,t,n)=>uk(t,e,n,(e=>lp(e)||sp(e)),(e=>cp(e)||ap(e)),oD))(n,e,r).orThunk((()=>(iD(e,n,r),Y.none())))},lD=(e,t)=>sD(e,t).exists((t=>(ak(e,t),!0))),cD=(e,t)=>aD(e,t).exists((t=>(ak(e,t),!0))),uD=(e,t)=>hk(e,t,t?cp:lp),dD=(e,t)=>Ux(e,!t).map((n=>{const r=n.toRange(),o=e.selection.getRng();return t?r.setStart(o.startContainer,o.startOffset):r.setEnd(o.endContainer,o.endOffset),r})).exists((t=>(ak(e,t),!0))),hD=e=>W([\"figcaption\"],$t(e)),mD=(e,t,n)=>t?((e,t)=>WC(e,t).breakAt.isNone())(e.dom,n):((e,t)=>jC(e,t).breakAt.isNone())(e.dom,n),fD=(e,t)=>{const n=dn.fromDom(e.getBody()),r=ga.fromRangeStart(e.selection.getRng());return((e,t)=>{const n=F(pn,t);return Vr(dn.fromDom(e.container()),no,n).filter(hD)})(r,n).exists((()=>{if(mD(n,t,r)){const r=Qk(e,n,t?Xn:Kn);return e.selection.setRng(r),!0}return!1}))},pD=(e,t)=>!!e.selection.isCollapsed()&&fD(e,t),gD={shiftKey:!1,altKey:!1,ctrlKey:!1,metaKey:!1,keyCode:0},vD=(e,t)=>t.keyCode===e.keyCode&&t.shiftKey===e.shiftKey&&t.altKey===e.altKey&&t.ctrlKey===e.ctrlKey&&t.metaKey===e.metaKey,yD=(e,t)=>ne((e=>U(e,(e=>({...gD,...e}))))(e),(e=>vD(e,t)?[e]:[])),bD=(e,t)=>ne((e=>U(e,(e=>({...gD,...e}))))(e),(e=>vD(e,t)?[e]:[])),_D=(e,...t)=>()=>e.apply(null,t),wD=(e,t)=>Z(yD(e,t),(e=>e.action())),xD=(e,t)=>he(bD(e,t),(e=>e.action())),CD=(e,t)=>{const n=t?Lu.Forwards:Lu.Backwards,r=e.selection.getRng();return ck(e,n,r,op,ip,Yr).exists((t=>(ak(e,t),!0)))},kD=(e,t)=>{const n=t?1:-1,r=e.selection.getRng();return uk(e,n,r,op,ip,Yr).exists((t=>(ak(e,t),!0)))},DD=(e,t)=>hk(e,t,t?ip:op),SD=ja([{none:[\"current\"]},{first:[\"current\"]},{middle:[\"current\",\"target\"]},{last:[\"current\"]}]),AD={...SD,none:e=>SD.none(e)},MD=(e,t,n)=>ne(Dn(e),(e=>mn(e,t)?n(e)?[e]:[]:MD(e,t,n))),LD=(e,t)=>((e,t,n=$)=>n(t)?Y.none():W(e,$t(t))?Y.some(t):Gr(t,e.join(\",\"),(e=>mn(e,\"table\")||n(e))))([\"td\",\"th\"],e,t),ED=e=>MD(e,\"th,td\",N),TD=(e,t)=>Xr(e,\"table\",t),FD=(e,t,n,r,o=N)=>{const i=1===r;if(!i&&n<=0)return AD.first(e[0]);if(i&&n>=e.length-1)return AD.last(e[e.length-1]);{const i=n+r,s=e[i];return o(s)?AD.middle(t,s):FD(e,t,i,r,o)}},OD=(e,t)=>TD(e,t).bind((t=>{const n=ED(t);return ee(n,(t=>pn(e,t))).map((e=>({index:e,all:n})))})),BD=(e,t=!1)=>{return Yn(e)?e.dom.isContentEditable:(n=e,Xr(n,\"[contenteditable]\")).fold(L(t),(e=>\"true\"===RD(e)));var n},RD=e=>e.dom.contentEditable,$D=(e,t,n,r,o)=>{const i=bo(dn.fromDom(n),\"td,th,caption\").map((e=>e.dom)),s=K(((e,t)=>ne(t,(t=>{const n=((e,t)=>({left:e.left-t,top:e.top-t,right:e.right+2*t,bottom:e.bottom+2*t,width:e.width+t,height:e.height+t}))(js(t.getBoundingClientRect()),-1);return[{x:n.left,y:e(n),cell:t},{x:n.right,y:e(n),cell:t}]})))(e,i),(e=>t(e,o)));return((e,t,n)=>J(e,((e,r)=>e.fold((()=>Y.some(r)),(e=>{const o=Math.sqrt(Math.abs(e.x-t)+Math.abs(e.y-n)),i=Math.sqrt(Math.abs(r.x-t)+Math.abs(r.y-n));return Y.some(i<o?r:e)}))),Y.none()))(s,r,o).map((e=>e.cell))},ND=F($D,(e=>e.bottom),((e,t)=>e.y<t)),YD=F($D,(e=>e.top),((e,t)=>e.y>t)),PD=(e,t)=>ce(t.getClientRects()).bind((t=>ND(e,t.left,t.top))).bind((e=>{return HC(Qu(n=e).map((e=>jC(n,e).positions.concat(e))).getOr([]),t);var n})),ID=(e,t)=>ue(t.getClientRects()).bind((t=>YD(e,t.left,t.top))).bind((e=>{return HC(Ju(n=e).map((e=>[e].concat(WC(n,e).positions))).getOr([]),t);var n})),HD=(e,t,n)=>{const r=e(t,n);return(e=>e.breakType===BC.Wrap&&0===e.positions.length)(r)||!Fr(n.getNode())&&(e=>e.breakType===BC.Br&&1===e.positions.length)(r)?!((e,t,n)=>n.breakAt.exists((n=>e(t,n).breakAt.isSome())))(e,t,r):r.breakAt.isNone()},jD=F(HD,jC),WD=F(HD,WC),zD=(e,t,n,r)=>{const o=e.selection.getRng(),i=t?1:-1;return!(!Zc()||!((e,t,n)=>{const r=ga.fromRangeStart(t);return Gu(!e,n).exists((e=>e.isEqual(r)))})(t,o,n))&&(Yx(i,e,n,!t,!1).each((t=>{ak(e,t)})),!0)},UD=(e,t)=>{const n=t.getNode(e);return Cr(n)?Y.some(n):Y.none()},VD=(e,t,n)=>{const r=UD(!!t,n),o=!1===t;r.fold((()=>ak(e,n.toRange())),(r=>Gu(o,e.getBody()).filter((e=>e.isEqual(n))).fold((()=>ak(e,n.toRange())),(n=>((e,t,n)=>{t.undoManager.transact((()=>{const r=e?Gn:qn,o=Qk(t,dn.fromDom(n),r);ak(t,o)}))})(t,e,r)))))},qD=(e,t,n,r)=>{const o=e.selection.getRng(),i=ga.fromRangeStart(o),s=e.getBody();if(!t&&jD(r,i)){const r=((e,t,n)=>PD(t,n).orThunk((()=>ce(n.getClientRects()).bind((n=>IC(zC(e,ga.before(t)),n.left))))).getOr(ga.before(t)))(s,n,i);return VD(e,t,r),!0}if(t&&WD(r,i)){const r=((e,t,n)=>ID(t,n).orThunk((()=>ce(n.getClientRects()).bind((n=>IC(UC(e,ga.after(t)),n.left))))).getOr(ga.after(t)))(s,n,i);return VD(e,t,r),!0}return!1},GD=(e,t,n)=>Y.from(e.dom.getParent(e.selection.getNode(),\"td,th\")).bind((r=>Y.from(e.dom.getParent(r,\"table\")).map((o=>n(e,t,o,r))))).getOr(!1),KD=(e,t)=>GD(e,t,zD),XD=(e,t)=>GD(e,t,qD),JD=(e,t,n)=>n.fold(Y.none,Y.none,((e,t)=>Df(t).map((e=>(e=>{const t=nm.exact(e,0,e,0);return am(t)})(e)))),(n=>(e.execCommand(\"mceTableInsertRowAfter\"),QD(e,t,n)))),QD=(e,t,n)=>JD(e,t,((e,t,n)=>OD(e,n).fold((()=>AD.none(e)),(n=>FD(n.all,e,n.index,1,t))))(n,BD)),ZD=(e,t,n)=>JD(e,t,((e,t,n)=>OD(e,n).fold((()=>AD.none()),(n=>FD(n.all,e,n.index,-1,t))))(n,BD)),eS=(e,t)=>{const n=[\"table\",\"li\",\"dl\"],r=dn.fromDom(e.getBody()),o=e=>{const t=$t(e);return pn(e,r)||W(n,t)},i=e.selection.getRng(),s=dn.fromDom(t?i.endContainer:i.startContainer);return LD(s,o).map((n=>{TD(n,o).each((t=>{e.model.table.clearSelectedCells(t.dom)})),e.selection.collapse(!t);return(t?QD:ZD)(e,o,n).each((t=>{e.selection.setRng(t)})),!0})).getOr(!1)},tS=(e,t)=>{e.on(\"keydown\",(n=>{n.isDefaultPrevented()||((e,t,n)=>{const r=Mt.os.isMacOS()||Mt.os.isiOS();wD([{keyCode:Yh.RIGHT,action:_D(lD,e,!0)},{keyCode:Yh.LEFT,action:_D(lD,e,!1)},{keyCode:Yh.UP,action:_D(cD,e,!1)},{keyCode:Yh.DOWN,action:_D(cD,e,!0)},...r?[{keyCode:Yh.UP,action:_D(dD,e,!1),metaKey:!0,shiftKey:!0},{keyCode:Yh.DOWN,action:_D(dD,e,!0),metaKey:!0,shiftKey:!0}]:[],{keyCode:Yh.RIGHT,action:_D(KD,e,!0)},{keyCode:Yh.LEFT,action:_D(KD,e,!1)},{keyCode:Yh.UP,action:_D(XD,e,!1)},{keyCode:Yh.DOWN,action:_D(XD,e,!0)},{keyCode:Yh.RIGHT,action:_D(CD,e,!0)},{keyCode:Yh.LEFT,action:_D(CD,e,!1)},{keyCode:Yh.UP,action:_D(kD,e,!1)},{keyCode:Yh.DOWN,action:_D(kD,e,!0)},{keyCode:Yh.RIGHT,action:_D(yk,e,t,!0)},{keyCode:Yh.LEFT,action:_D(yk,e,t,!1)},{keyCode:Yh.RIGHT,ctrlKey:!r,altKey:r,action:_D(wk,e,t)},{keyCode:Yh.LEFT,ctrlKey:!r,altKey:r,action:_D(xk,e,t)},{keyCode:Yh.UP,action:_D(pD,e,!1)},{keyCode:Yh.DOWN,action:_D(pD,e,!0)}],n).each((e=>{n.preventDefault()}))})(e,t,n)}))},nS=(e,t)=>({container:e,offset:t}),rS=ls.DOM,oS=e=>t=>e===t?-1:0,iS=(e,t,n)=>{if(Sr(e)&&t>=0)return Y.some(nS(e,t));{const r=Is(rS);return Y.from(r.backwards(e,t,oS(e),n)).map((e=>nS(e.container,e.container.data.length)))}},sS=(e,t,n)=>{if(!Sr(e))return Y.none();const r=e.data;if(t>=0&&t<=r.length)return Y.some(nS(e,t));{const r=Is(rS);return Y.from(r.backwards(e,t,oS(e),n)).bind((e=>{const r=e.container.data;return sS(e.container,t+r.length,n)}))}},aS=(e,t,n)=>{if(!Sr(e))return Y.none();const r=e.data;if(t<=r.length)return Y.some(nS(e,t));{const o=Is(rS);return Y.from(o.forwards(e,t,oS(e),n)).bind((e=>aS(e.container,t-r.length,n)))}},lS=(e,t,n,r,o)=>{const i=Is(e,(e=>t=>e.isBlock(t)||W([\"BR\",\"IMG\",\"HR\",\"INPUT\"],t.nodeName)||\"false\"===e.getContentEditable(t))(e));return Y.from(i.backwards(t,n,r,o))},cS=e=>Lo(e.toString().replace(/\\u00A0/g,\" \")),uS=e=>\"\"!==e&&-1!==\"  \\f\\n\\r\\t\\v\".indexOf(e),dS=(e,t)=>e.substring(t.length),hS=(e,t,n,r=0)=>{if(!(o=t).collapsed||!Sr(o.startContainer))return Y.none();var o;const i={text:\"\",offset:0},s=e.getParent(t.startContainer,e.isBlock)||e.getRoot();return lS(e,t.startContainer,t.startOffset,((e,t,r)=>(i.text=r+i.text,i.offset+=t,((e,t,n)=>{let r;const o=n.charAt(0);for(r=t-1;r>=0;r--){const i=e.charAt(r);if(uS(i))return Y.none();if(o===i&&He(e,n,r,t))break}return Y.some(r)})(i.text,i.offset,n).getOr(t))),s).bind((e=>{const o=t.cloneRange();if(o.setStart(e.container,e.offset),o.setEnd(t.endContainer,t.endOffset),o.collapsed)return Y.none();const i=cS(o);return 0!==i.lastIndexOf(n)||dS(i,n).length<r?Y.none():Y.some({text:dS(i,n),range:o,trigger:n})}))},mS=(e,t,n,r=0)=>{return(o=dn.fromDom(t.startContainer),Xr(o,Af)).fold((()=>hS(e,t,n,r)),(t=>{const r=e.createRng();r.selectNode(t.dom);const o=cS(r);return Y.some({range:r,text:dS(o,n),trigger:n})}));var o},fS=e=>{if((e=>3===e.nodeType)(e))return nS(e,e.data.length);{const t=e.childNodes;return t.length>0?fS(t[t.length-1]):nS(e,t.length)}},pS=(e,t)=>{const n=e.childNodes;return n.length>0&&t<n.length?pS(n[t],0):n.length>0&&(e=>1===e.nodeType)(e)&&n.length===t?fS(n[n.length-1]):nS(e,t)},gS=e=>t=>{const n=pS(t.startContainer,t.startOffset);return!((e,t)=>{var n;const r=null!==(n=e.getParent(t.container,e.isBlock))&&void 0!==n?n:e.getRoot();return lS(e,t.container,t.offset,((e,t)=>0===t?-1:t),r).filter((e=>{const t=e.container.data.charAt(e.offset-1);return!uS(t)})).isSome()})(e,n)},vS=(e,t)=>{const n=t(),r=e.selection.getRng();return((e,t,n)=>he(n.triggers,(n=>mS(e,t,n))))(e.dom,r,n).bind((n=>yS(e,t,n)))},yS=(e,t,n,r={})=>{var o;const i=t(),s=null!==(o=e.selection.getRng().startContainer.nodeValue)&&void 0!==o?o:\"\",a=K(i.lookupByTrigger(n.trigger),(t=>n.text.length>=t.minChars&&t.matches.getOrThunk((()=>gS(e.dom)))(n.range,s,n.text)));if(0===a.length)return Y.none();const l=Promise.all(U(a,(e=>e.fetch(n.text,e.maxResults,r).then((t=>({matchText:n.text,items:t,columns:e.columns,onAction:e.onAction,highlightOn:e.highlightOn}))))));return Y.some({lookupData:l,context:n})};var bS;!function(e){e[e.Error=0]=\"Error\",e[e.Value=1]=\"Value\"}(bS||(bS={}));const _S=(e,t,n)=>e.stype===bS.Error?t(e.serror):n(e.svalue),wS=e=>({stype:bS.Value,svalue:e}),xS=e=>({stype:bS.Error,serror:e}),CS=e=>_S(e,Ha.error,Ha.value),kS=wS,DS=e=>{const t=[],n=[];return V(e,(e=>{_S(e,(e=>n.push(e)),(e=>t.push(e)))})),{values:t,errors:n}},SS=xS,AS=(e,t)=>e.stype===bS.Error?t(e.serror):e,MS=(e,t)=>e.stype===bS.Value?{stype:bS.Value,svalue:t(e.svalue)}:e,LS=(e,t)=>e.stype===bS.Error?{stype:bS.Error,serror:t(e.serror)}:e,ES=_S,TS=e=>p(e)&&me(e).length>100?\" removed due to size\":JSON.stringify(e,null,2),FS=(e,t)=>SS([{path:e,getErrorInfo:t}]),OS=(e,t,n,r)=>Ce(n,r).fold((()=>((e,t,n)=>FS(e,(()=>'The chosen schema: \"'+n+'\" did not exist in branches: '+TS(t))))(e,n,r)),(n=>n.extract(e.concat([\"branch: \"+r]),t))),BS=(e,t)=>({extract:(n,r)=>Ce(r,e).fold((()=>((e,t)=>FS(e,(()=>'Choice schema did not contain choice key: \"'+t+'\"')))(n,e)),(e=>OS(n,r,t,e))),toString:()=>\"chooseOn(\"+e+\"). Possible values: \"+me(t)}),RS=e=>(...t)=>{if(0===t.length)throw new Error(\"Can't merge zero objects\");const n={};for(let r=0;r<t.length;r++){const o=t[r];for(const t in o)ke(o,t)&&(n[t]=e(n[t],o[t]))}return n},$S=RS(((e,t)=>g(e)&&g(t)?$S(e,t):t)),NS=(RS(((e,t)=>t)),e=>({tag:\"defaultedThunk\",process:L(e)})),YS=e=>A(SS,te)(e),PS=e=>{const t=DS(e);return t.errors.length>0?YS(t.errors):kS(t.values)},IS=(e,t,n)=>{switch(e.tag){case\"field\":return t(e.key,e.newKey,e.presence,e.prop);case\"custom\":return n(e.newKey,e.instantiator)}},HS=e=>({extract:(t,n)=>AS(e(n),(e=>((e,t)=>FS(e,L(t)))(t,e))),toString:L(\"val\")}),jS=HS(kS),WS=(e,t,n,r)=>Ce(t,n).fold((()=>((e,t,n)=>FS(e,(()=>'Could not find valid *required* value for \"'+t+'\" in '+TS(n))))(e,n,t)),r),zS=(e,t,n,r)=>r(Ce(e,t).getOrThunk((()=>n(e)))),US=(e,t,n,r,o)=>{const i=e=>o.extract(t.concat([r]),e),s=e=>e.fold((()=>kS(Y.none())),(e=>{const n=o.extract(t.concat([r]),e);return MS(n,Y.some)}));switch(e.tag){case\"required\":return WS(t,n,r,i);case\"defaultedThunk\":return zS(n,r,e.process,i);case\"option\":return((e,t,n)=>n(Ce(e,t)))(n,r,s);case\"defaultedOptionThunk\":return((e,t,n,r)=>r(Ce(e,t).map((t=>!0===t?n(e):t))))(n,r,e.process,s);case\"mergeWithThunk\":return zS(n,r,L({}),(t=>{const r=$S(e.process(n),t);return i(r)}))}},VS=e=>({extract:(t,n)=>((e,t,n)=>{const r={},o=[];for(const i of n)IS(i,((n,i,s,a)=>{const l=US(s,e,t,n,a);ES(l,(e=>{o.push(...e)}),(e=>{r[i]=e}))}),((e,n)=>{r[e]=n(t)}));return o.length>0?SS(o):kS(r)})(t,n,e),toString:()=>{const t=U(e,(e=>IS(e,((e,t,n,r)=>e+\" -> \"+r.toString()),((e,t)=>\"state(\"+e+\")\"))));return\"obj{\\n\"+t.join(\"\\n\")+\"}\"}}),qS=e=>({extract:(t,n)=>{const r=U(n,((n,r)=>e.extract(t.concat([\"[\"+r+\"]\"]),n)));return PS(r)},toString:()=>\"array(\"+e.toString()+\")\"}),GS=(e,t,n)=>CS(((e,t,n)=>{const r=t.extract([e],n);return LS(r,(e=>({input:n,errors:e})))})(e,t,n)),KS=e=>\"Errors: \\n\"+(e=>{const t=e.length>10?e.slice(0,10).concat([{path:[],getErrorInfo:L(\"... (only showing first ten failures)\")}]):e;return U(t,(e=>\"Failed path: (\"+e.path.join(\" > \")+\")\\n\"+e.getErrorInfo()))})(e.errors).join(\"\\n\")+\"\\n\\nInput object: \"+TS(e.input),XS=(e,t)=>BS(e,ge(t,VS)),JS=L(jS),QS=(e,t)=>HS((n=>{const r=typeof n;return e(n)?kS(n):SS(`Expected type: ${t} but got: ${r}`)})),ZS=QS(k,\"number\"),eA=QS(f,\"string\"),tA=QS(b,\"boolean\"),nA=QS(C,\"function\"),rA=(e,t,n,r)=>({tag:\"field\",key:e,newKey:t,presence:n,prop:r}),oA=(e,t)=>({tag:\"custom\",newKey:e,instantiator:t}),iA=e=>{return t=t=>W(e,t)?Ha.value(t):Ha.error(`Unsupported value: \"${t}\", choose one of \"${e.join(\", \")}\".`),HS((e=>t(e).fold(SS,kS)));var t},sA=(e,t)=>rA(e,e,{tag:\"required\",process:{}},t),aA=e=>sA(e,eA),lA=e=>sA(e,nA),cA=(e,t)=>rA(e,e,{tag:\"option\",process:{}},t),uA=e=>cA(e,eA),dA=(e,t,n)=>rA(e,e,NS(t),n),hA=(e,t)=>dA(e,t,ZS),mA=(e,t,n)=>dA(e,t,iA(n)),fA=(e,t)=>dA(e,t,tA),pA=(e,t)=>dA(e,t,nA),gA=aA(\"type\"),vA=lA(\"fetch\"),yA=lA(\"onAction\"),bA=pA(\"onSetup\",(()=>S)),_A=uA(\"text\"),wA=uA(\"icon\"),xA=uA(\"tooltip\"),CA=uA(\"label\"),kA=fA(\"active\",!1),DA=fA(\"enabled\",!0),SA=fA(\"primary\",!1),AA=e=>((e,t)=>dA(e,t,eA))(\"type\",e),MA=VS([gA,aA(\"trigger\"),hA(\"minChars\",1),(EA=1,((e,t)=>rA(e,e,NS(t),JS()))(\"columns\",EA)),hA(\"maxResults\",10),(LA=\"matches\",cA(LA,nA)),vA,yA,((e,t,n)=>dA(e,t,qS(n)))(\"highlightOn\",[],eA)]);var LA,EA;const TA=[DA,xA,wA,_A,bA],FA=[kA].concat(TA),OA=[pA(\"predicate\",$),mA(\"scope\",\"node\",[\"node\",\"editor\"]),mA(\"position\",\"selection\",[\"node\",\"selection\",\"line\"])],BA=TA.concat([AA(\"contextformbutton\"),SA,yA,oA(\"original\",E)]),RA=FA.concat([AA(\"contextformbutton\"),SA,yA,oA(\"original\",E)]),$A=TA.concat([AA(\"contextformbutton\")]),NA=FA.concat([AA(\"contextformtogglebutton\")]),YA=XS(\"type\",{contextformbutton:BA,contextformtogglebutton:RA});VS([AA(\"contextform\"),pA(\"initValue\",L(\"\")),CA,((e,t)=>rA(e,e,{tag:\"required\",process:{}},qS(t)))(\"commands\",YA),cA(\"launch\",XS(\"type\",{contextformbutton:$A,contextformtogglebutton:NA}))].concat(OA));const PA=e=>{const t=e.ui.registry.getAll().popups,n=ge(t,(e=>{return(t=e,GS(\"Autocompleter\",MA,{trigger:t.ch,...t})).fold((e=>{throw new Error(KS(e))}),E);var t})),r=Se(we(n,(e=>e.trigger))),o=xe(n);return{dataset:n,triggers:r,lookupByTrigger:e=>K(o,(t=>t.trigger===e))}},IA=e=>{const t=ys(),n=ds(!1),r=t.isSet,o=()=>{r()&&((e=>{ew(e).autocompleter.removeDecoration()})(e),(e=>{e.dispatch(\"AutocompleterEnd\")})(e),n.set(!1),t.clear())},i=n=>{r()||(((e,t)=>{ew(e).autocompleter.addDecoration(t)})(e,n.range),t.set({trigger:n.trigger,matchLength:n.text.length}))},s=Re((()=>PA(e))),a=r=>{(n=>t.get().map((t=>mS(e.dom,e.selection.getRng(),t.trigger).bind((t=>yS(e,s,t,n))))).getOrThunk((()=>vS(e,s))))(r).fold(o,(r=>{i(r.context),r.lookupData.then((i=>{t.get().map((s=>{const a=r.context;s.trigger===a.trigger&&(a.text.length-s.matchLength>=10?o():(t.set({...s,matchLength:a.text.length}),n.get()?((e,t)=>{e.dispatch(\"AutocompleterUpdate\",t)})(e,{lookupData:i}):(n.set(!0),((e,t)=>{e.dispatch(\"AutocompleterStart\",t)})(e,{lookupData:i}))))}))}))}))};e.addCommand(\"mceAutocompleterReload\",((e,t)=>{const n=p(t)?t.fetchOptions:{};a(n)})),e.addCommand(\"mceAutocompleterClose\",o),((e,t)=>{const n=_s(t.load,50);e.on(\"keypress compositionend\",(e=>{27!==e.which&&n.throttle()})),e.on(\"keydown\",(e=>{const r=e.which;8===r?n.throttle():27===r&&t.cancelIfNecessary()})),e.on(\"remove\",n.cancel)})(e,{cancelIfNecessary:o,load:a})},HA=e=>(t,n,r={})=>{const o=t.getBody(),i={bubbles:!0,composed:!0,data:null,isComposing:!1,detail:0,view:null,target:o,currentTarget:o,eventPhase:Event.AT_TARGET,originalTarget:o,explicitOriginalTarget:o,isTrusted:!1,srcElement:o,cancelable:!1,preventDefault:S,inputType:n},s=Ui(new InputEvent(e));return t.dispatch(e,{...s,...i,...r})},jA=HA(\"input\"),WA=HA(\"beforeinput\"),zA=(e,t)=>{e.on(\"keydown\",(n=>{n.isDefaultPrevented()||((e,t,n)=>{const r=n.keyCode===Yh.BACKSPACE?\"deleteContentBackward\":\"deleteContentForward\";xD([{keyCode:Yh.BACKSPACE,action:_D(Hk,e)},{keyCode:Yh.BACKSPACE,action:_D(tC,e,!1)},{keyCode:Yh.DELETE,action:_D(tC,e,!0)},{keyCode:Yh.BACKSPACE,action:_D(zx,e,!1)},{keyCode:Yh.DELETE,action:_D(zx,e,!0)},{keyCode:Yh.BACKSPACE,action:_D(Ak,e,t,!1)},{keyCode:Yh.DELETE,action:_D(Ak,e,t,!0)},{keyCode:Yh.BACKSPACE,action:_D(Vg,e,!1)},{keyCode:Yh.DELETE,action:_D(Vg,e,!0)},{keyCode:Yh.BACKSPACE,action:_D(nC,e,!1)},{keyCode:Yh.DELETE,action:_D(nC,e,!0)},{keyCode:Yh.BACKSPACE,action:_D(Ok,e,!1)},{keyCode:Yh.DELETE,action:_D(Ok,e,!0)},{keyCode:Yh.BACKSPACE,action:_D(Nx,e,!1)},{keyCode:Yh.DELETE,action:_D(Nx,e,!0)},{keyCode:Yh.BACKSPACE,action:_D(Ox,e,!1)},{keyCode:Yh.DELETE,action:_D(Ox,e,!0)},{keyCode:Yh.BACKSPACE,action:_D(Tk,e,!1)},{keyCode:Yh.DELETE,action:_D(Tk,e,!0)}],n).each((t=>{n.preventDefault(),WA(e,r).isDefaultPrevented()||(t(),jA(e,r))}))})(e,t,n)})),e.on(\"keyup\",(t=>{t.isDefaultPrevented()||((e,t)=>{wD([{keyCode:Yh.BACKSPACE,action:_D(eC,e)},{keyCode:Yh.DELETE,action:_D(eC,e)}],t)})(e,t)}))},UA=(e,t)=>{const n=e.dom,r=e.schema.getMoveCaretBeforeOnEnterElements();if(!t)return;if(/^(LI|DT|DD)$/.test(t.nodeName)){const e=(e=>{for(;e;){if(vr(e)||Sr(e)&&e.data&&/[\\r\\n\\s]/.test(e.data))return e;e=e.nextSibling}return null})(t.firstChild);e&&/^(UL|OL|DL)$/.test(e.nodeName)&&t.insertBefore(n.doc.createTextNode(go),t.firstChild)}const o=n.createRng();if(t.normalize(),t.hasChildNodes()){const e=new Zr(t,t);let n,i=t;for(;n=e.current();){if(Sr(n)){o.setStart(n,0),o.setEnd(n,0);break}if(r[n.nodeName.toLowerCase()]){o.setStartBefore(n),o.setEndBefore(n);break}i=n,n=e.next()}n||(o.setStart(i,0),o.setEnd(i,0))}else Fr(t)?t.nextSibling&&n.isBlock(t.nextSibling)?(o.setStartBefore(t),o.setEndBefore(t)):(o.setStartAfter(t),o.setEndAfter(t)):(o.setStart(t,0),o.setEnd(t,0));e.selection.setRng(o),jm(e,o)},VA=(e,t)=>{const n=e.getRoot();let r,o=t;for(;o!==n&&o&&\"false\"!==e.getContentEditable(o);)\"true\"===e.getContentEditable(o)&&(r=o),o=o.parentNode;return o!==n?r:n},qA=e=>Y.from(e.dom.getParent(e.selection.getStart(!0),e.dom.isBlock)),GA=(e,t)=>{const n=null==e?void 0:e.parentNode;return x(n)&&n.nodeName===t},KA=e=>x(e)&&/^(OL|UL|LI)$/.test(e.nodeName),XA=e=>{const t=e.parentNode;return x(n=t)&&/^(LI|DT|DD)$/.test(n.nodeName)?t:e;var n},JA=(e,t,n)=>{let r=e[n?\"firstChild\":\"lastChild\"];for(;r&&!vr(r);)r=r[n?\"nextSibling\":\"previousSibling\"];return r===t},QA=(e,t,n,r,o)=>{const i=e.dom,s=e.selection.getRng(),a=n.parentNode;if(n===e.getBody()||!a)return;var l;KA(l=n)&&KA(l.parentNode)&&(o=\"LI\");let c=t(o);if(JA(n,r,!0)&&JA(n,r,!1))if(GA(n,\"LI\")){const e=XA(n);i.insertAfter(c,e),(e=>{var t;return(null===(t=e.parentNode)||void 0===t?void 0:t.firstChild)===e})(n)?i.remove(e):i.remove(n)}else i.replace(c,n);else if(JA(n,r,!0))GA(n,\"LI\")?(i.insertAfter(c,XA(n)),c.appendChild(i.doc.createTextNode(\" \")),c.appendChild(n)):a.insertBefore(c,n),i.remove(r);else if(JA(n,r,!1))i.insertAfter(c,XA(n)),i.remove(r);else{n=XA(n);const e=s.cloneRange();e.setStartAfter(r),e.setEndAfter(n);const t=e.extractContents();\"LI\"===o&&((e,t)=>e.firstChild&&e.firstChild.nodeName===t)(t,\"LI\")?(c=t.firstChild,i.insertAfter(t,n)):(i.insertAfter(t,n),i.insertAfter(c,n)),i.remove(r)}UA(e,c)},ZA=(e,t)=>t&&\"A\"===t.nodeName&&e.isEmpty(t),eM=e=>{e.innerHTML='<br data-mce-bogus=\"1\">'},tM=(e,t)=>e.nodeName===t||e.previousSibling&&e.previousSibling.nodeName===t,nM=(e,t)=>x(t)&&e.isBlock(t)&&!/^(TD|TH|CAPTION|FORM)$/.test(t.nodeName)&&!/^(fixed|absolute)/i.test(t.style.position)&&\"true\"!==e.getContentEditable(t),rM=(e,t,n)=>Sr(t)?e?1===n&&t.data.charAt(n-1)===Ao?0:n:n===t.data.length-1&&t.data.charAt(n)===Ao?t.data.length:n:n,oM=(e,t)=>{if(cl(e).toLowerCase()===t.tagName.toLowerCase()){((e,t,n)=>{const r=e.dom;Y.from(n.style).map(r.parseStyle).each((e=>{const n={...Un(dn.fromDom(t)),...e};r.setStyles(t,n)}));const o=Y.from(n.class).map((e=>e.split(/\\s+/))),i=Y.from(t.className).map((e=>K(e.split(/\\s+/),(e=>\"\"!==e))));Bt(o,i,((e,n)=>{const o=K(n,(t=>!W(e,t))),i=[...e,...o];r.setAttrib(t,\"class\",i.join(\" \"))}));const s=[\"style\",\"class\"],a=_e(n,((e,t)=>!W(s,t)));r.setAttribs(t,a)})(e,t,ul(e))}},iM={insert:(e,t)=>{let n,r,o,i,s=!1;const a=e.dom,l=e.schema,c=l.getNonEmptyElements(),u=e.selection.getRng(),d=cl(e),h=t=>{let r=n;const i=l.getTextInlineElements();let s;s=t||\"TABLE\"===o||\"HR\"===o?a.create(t||d):b.cloneNode(!1);let c=s;if(!1===fl(e))a.setAttrib(s,\"style\",null),a.setAttrib(s,\"class\",null);else do{if(i[r.nodeName]){if(ed(r)||fd(r))continue;const e=r.cloneNode(!1);a.setAttrib(e,\"id\",\"\"),s.hasChildNodes()?(e.appendChild(s.firstChild),s.appendChild(e)):(c=e,s.appendChild(e))}}while((r=r.parentNode)&&r!==y);return oM(e,s),eM(c),s},m=e=>{const t=rM(e,n,r);if(Sr(n)&&(e?t>0:t<n.data.length))return!1;if(n.parentNode===b&&s&&!e)return!0;if(e&&vr(n)&&n===b.firstChild)return!0;if(tM(n,\"TABLE\")||tM(n,\"HR\"))return s&&!e||!s&&e;const o=new Zr(n,b);let i;for(Sr(n)&&(e&&0===t?o.prev():e||t!==n.data.length||o.next());i=o.current();){if(vr(i)){if(!i.getAttribute(\"data-mce-bogus\")){const e=i.nodeName.toLowerCase();if(c[e]&&\"br\"!==e)return!1}}else if(Sr(i)&&!ei(i.data))return!1;e?o.prev():o.next()}return!0},p=()=>{let t;return t=/^(H[1-6]|PRE|FIGURE)$/.test(o)&&\"HGROUP\"!==_?h(d):h(),((e,t)=>{const n=pl(e);return!w(t)&&(f(n)?W(Ft.explode(n),t.nodeName.toLowerCase()):n)})(e,i)&&nM(a,i)&&a.isEmpty(b)?t=a.split(i,b):a.insertAfter(t,b),UA(e,t),t};vm(a,u).each((e=>{u.setStart(e.startContainer,e.startOffset),u.setEnd(e.endContainer,e.endOffset)})),n=u.startContainer,r=u.startOffset;const g=!(!t||!t.shiftKey),v=!(!t||!t.ctrlKey);vr(n)&&n.hasChildNodes()&&(s=r>n.childNodes.length-1,n=n.childNodes[Math.min(r,n.childNodes.length-1)]||n,r=s&&Sr(n)?n.data.length:0);const y=VA(a,n);if(!y||((e,t)=>{const n=e.dom.getParent(t,\"ol,ul,dl\");return null!==n&&\"false\"===e.dom.getContentEditableParent(n)})(e,n))return;g||(n=((e,t,n,r,o)=>{var i;const s=e.dom,a=null!==(i=VA(s,r))&&void 0!==i?i:s.getRoot();let l=s.getParent(r,s.isBlock);if(!l||!nM(s,l)){let i;if(l=l||a,i=l===e.getBody()||Nr(l)?l.nodeName.toLowerCase():l.parentNode?l.parentNode.nodeName.toLowerCase():\"\",!l.hasChildNodes()){const r=s.create(t);return oM(e,r),l.appendChild(r),n.setStart(r,0),n.setEnd(r,0),r}let c,u=r;for(;u&&u.parentNode!==l;)u=u.parentNode;for(;u&&!s.isBlock(u);)c=u,u=u.previousSibling;if(c&&e.schema.isValidChild(i,t.toLowerCase())){const i=c.parentNode,a=s.create(t);for(oM(e,a),i.insertBefore(a,c),u=c;u&&!s.isBlock(u);){const e=u.nextSibling;a.appendChild(u),u=e}n.setStart(r,o),n.setEnd(r,o)}}return r})(e,d,u,n,r));let b=a.getParent(n,a.isBlock)||a.getRoot();i=x(null==b?void 0:b.parentNode)?a.getParent(b.parentNode,a.isBlock):null,o=b?b.nodeName.toUpperCase():\"\";const _=i?i.nodeName.toUpperCase():\"\";if(\"LI\"===_&&!v){b=i,i=i.parentNode,o=_}if(/^(LI|DT|DD)$/.test(o)&&vr(i)&&a.isEmpty(b))return void QA(e,h,i,b,d);if(b===e.getBody())return;const C=b.parentNode;let k;if(Fo(b))k=Io(b),a.isEmpty(b)&&eM(b),oM(e,k),UA(e,k);else if(m(!1))k=p();else if(m(!0)&&C)k=C.insertBefore(h(),b),UA(e,tM(b,\"HR\")?k:b);else{const t=(e=>{const t=e.cloneRange();return t.setStart(e.startContainer,rM(!0,e.startContainer,e.startOffset)),t.setEnd(e.endContainer,rM(!1,e.endContainer,e.endOffset)),t})(u).cloneRange();t.setEndAfter(b);const n=t.extractContents();(e=>{V(yo(dn.fromDom(e),It),(e=>{const t=e.dom;t.nodeValue=Lo(t.data)}))})(n),(e=>{let t=e;do{Sr(t)&&(t.data=t.data.replace(/^[\\r\\n]+/,\"\")),t=t.firstChild}while(t)})(n),k=n.firstChild,a.insertAfter(n,b),((e,t,n)=>{var r;const o=[];if(!n)return;let i=n;for(;i=i.firstChild;){if(e.isBlock(i))return;vr(i)&&!t[i.nodeName.toLowerCase()]&&o.push(i)}let s=o.length;for(;s--;)i=o[s],(!i.hasChildNodes()||i.firstChild===i.lastChild&&\"\"===(null===(r=i.firstChild)||void 0===r?void 0:r.nodeValue)||ZA(e,i))&&e.remove(i)})(a,c,k),((e,t)=>{t.normalize();const n=t.lastChild;(!n||vr(n)&&/^(left|right)$/gi.test(e.getStyle(n,\"float\",!0)))&&e.add(t,\"br\")})(a,b),a.isEmpty(b)&&eM(b),k.normalize(),a.isEmpty(k)?(a.remove(k),p()):(oM(e,k),UA(e,k))}a.setAttrib(k,\"id\",\"\"),e.dispatch(\"NewBlock\",{newBlock:k})},fakeEventName:\"insertParagraph\"},sM=(e,t,n)=>{const r=e.dom.createRng();n?(r.setStartBefore(t),r.setEndBefore(t)):(r.setStartAfter(t),r.setEndAfter(t)),e.selection.setRng(r),jm(e,r)},aM=(e,t)=>{const n=e.selection,r=e.dom,o=n.getRng();let i,s=!1;vm(r,o).each((e=>{o.setStart(e.startContainer,e.startOffset),o.setEnd(e.endContainer,e.endOffset)}));let a=o.startOffset,l=o.startContainer;if(vr(l)&&l.hasChildNodes()){const e=a>l.childNodes.length-1;l=l.childNodes[Math.min(a,l.childNodes.length-1)]||l,a=e&&Sr(l)?l.data.length:0}let c=r.getParent(l,r.isBlock);const u=c&&c.parentNode?r.getParent(c.parentNode,r.isBlock):null,d=u?u.nodeName.toUpperCase():\"\",h=!(!t||!t.ctrlKey);\"LI\"!==d||h||(c=u),Sr(l)&&a>=l.data.length&&(((e,t,n)=>{const r=new Zr(t,n);let o;const i=e.getNonEmptyElements();for(;o=r.next();)if(i[o.nodeName.toLowerCase()]||Sr(o)&&o.length>0)return!0;return!1})(e.schema,l,c||r.getRoot())||(i=r.create(\"br\"),o.insertNode(i),o.setStartAfter(i),o.setEndAfter(i),s=!0)),i=r.create(\"br\"),ya(r,o,i),sM(e,i,s),e.undoManager.add()},lM=(e,t)=>{const n=dn.fromTag(\"br\");qn(dn.fromDom(t),n),e.undoManager.add()},cM=(e,t)=>{uM(e.getBody(),t)||Gn(dn.fromDom(t),dn.fromTag(\"br\"));const n=dn.fromTag(\"br\");Gn(dn.fromDom(t),n),sM(e,n.dom,!1),e.undoManager.add()},uM=(e,t)=>{return n=ga.after(t),!!Fr(n.getNode())||Ku(e,ga.after(t)).map((e=>Fr(e.getNode()))).getOr(!1);var n},dM=e=>e&&\"A\"===e.nodeName&&\"href\"in e,hM=e=>e.fold($,dM,dM,$),mM=(e,t)=>{t.fold(S,F(lM,e),F(cM,e),S)},fM={insert:(e,t)=>{const n=(e=>{const t=F(ig,e),n=ga.fromRangeStart(e.selection.getRng());return CC(t,e.getBody(),n).filter(hM)})(e);n.isSome()?n.each(F(mM,e)):aM(e,t)},fakeEventName:\"insertLineBreak\"},pM=(e,t)=>qA(e).filter((e=>t.length>0&&mn(dn.fromDom(e),t))).isSome(),gM=ja([{br:[]},{block:[]},{none:[]}]),vM=(e,t)=>(e=>pM(e,ml(e)))(e),yM=e=>(t,n)=>(e=>qA(e).filter((e=>ao(dn.fromDom(e)))).isSome())(t)===e,bM=(e,t)=>(n,r)=>{const o=(e=>qA(e).fold(L(\"\"),(e=>e.nodeName.toUpperCase())))(n)===e.toUpperCase();return o===t},_M=e=>{const t=VA(e.dom,e.selection.getStart());return w(t)},wM=e=>bM(\"pre\",e),xM=e=>(t,n)=>ll(t)===e,CM=(e,t)=>(e=>pM(e,hl(e)))(e),kM=(e,t)=>t,DM=e=>{const t=cl(e),n=VA(e.dom,e.selection.getStart());return x(n)&&e.schema.isValidChild(n.nodeName,t)},SM=(e,t)=>(n,r)=>J(e,((e,t)=>e&&t(n,r)),!0)?Y.some(t):Y.none(),AM=(e,t,n)=>{if(t.selection.isCollapsed()||(e=>{e.execCommand(\"delete\")})(t),x(n)){if(WA(t,e.fakeEventName).isDefaultPrevented())return}e.insert(t,n),x(n)&&jA(t,e.fakeEventName)},MM=(e,t)=>{const n=()=>AM(fM,e,t),r=()=>AM(iM,e,t),o=((e,t)=>mC([SM([vM],gM.none()),SM([wM(!0),_M],gM.none()),SM([bM(\"summary\",!0)],gM.br()),SM([wM(!0),xM(!1),kM],gM.br()),SM([wM(!0),xM(!1)],gM.block()),SM([wM(!0),xM(!0),kM],gM.block()),SM([wM(!0),xM(!0)],gM.br()),SM([yM(!0),kM],gM.br()),SM([yM(!0)],gM.block()),SM([CM],gM.br()),SM([kM],gM.br()),SM([DM],gM.block())],[e,!(!t||!t.shiftKey)]).getOr(gM.none()))(e,t);switch(dl(e)){case\"linebreak\":o.fold(n,n,S);break;case\"block\":o.fold(r,r,S);break;case\"invert\":o.fold(r,n,S);break;default:o.fold(n,r,S)}},LM=e=>{e.on(\"keydown\",(t=>{t.keyCode===Yh.ENTER&&((e,t)=>{var n;t.isDefaultPrevented()||(t.preventDefault(),(n=e.undoManager).typing&&(n.typing=!1,n.add()),e.undoManager.transact((()=>{MM(e,t)})))})(e,t)}))},EM=(e,t)=>{e.on(\"keydown\",(n=>{n.isDefaultPrevented()||((e,t,n)=>{const r=Mt.os.isMacOS()||Mt.os.isiOS();wD([{keyCode:Yh.END,action:_D(uD,e,!0)},{keyCode:Yh.HOME,action:_D(uD,e,!1)},...r?[]:[{keyCode:Yh.HOME,action:_D(dD,e,!1),ctrlKey:!0,shiftKey:!0},{keyCode:Yh.END,action:_D(dD,e,!0),ctrlKey:!0,shiftKey:!0}],{keyCode:Yh.END,action:_D(DD,e,!0)},{keyCode:Yh.HOME,action:_D(DD,e,!1)},{keyCode:Yh.END,action:_D(Ck,e,!0,t)},{keyCode:Yh.HOME,action:_D(Ck,e,!1,t)}],n).each((e=>{n.preventDefault()}))})(e,t,n)}))},TM=e=>{e.on(\"input\",(t=>{t.isComposing||(e=>{const t=dn.fromDom(e.getBody());e.selection.isCollapsed()&&jp(t,ga.fromRangeStart(e.selection.getRng())).each((t=>{e.selection.setRng(t.toRange())}))})(e)}))},FM=wt(),OM=e=>e.stopImmediatePropagation(),BM=e=>e.keyCode===Yh.PAGE_UP||e.keyCode===Yh.PAGE_DOWN,RM=(e,t,n)=>{n&&!e.get()?t.on(\"NodeChange\",OM,!0):!n&&e.get()&&t.off(\"NodeChange\",OM),e.set(n)},$M=(e,t)=>{if(FM.os.isMacOS())return;const n=ds(!1);e.on(\"keydown\",(t=>{BM(t)&&RM(n,e,!0)})),e.on(\"keyup\",(r=>{r.isDefaultPrevented()||((e,t,n)=>{wD([{keyCode:Yh.PAGE_UP,action:_D(Ck,e,!1,t)},{keyCode:Yh.PAGE_DOWN,action:_D(Ck,e,!0,t)}],n)})(e,t,r),BM(r)&&n.get()&&(RM(n,e,!1),e.nodeChanged())}))},NM=(e,t)=>{const n=t.container(),r=t.offset();return Sr(n)?(n.insertData(r,e),Y.some(ga(n,r+e.length))):Su(t).map((n=>{const r=dn.fromText(e);return t.isAtEnd()?Gn(n,r):qn(n,r),ga(r.dom,e.length)}))},YM=F(NM,go),PM=F(NM,\" \"),IM=(e,t)=>n=>((e,t)=>!Tp(t)&&(Fp(e,t)||Lp(e,t)||Ep(e,t)))(e,n)?YM(t):PM(t),HM=e=>{const t=ga.fromRangeStart(e.selection.getRng()),n=dn.fromDom(e.getBody());if(e.selection.isCollapsed()){const r=F(ig,e),o=ga.fromRangeStart(e.selection.getRng());return CC(r,e.getBody(),o).bind((e=>t=>t.fold((t=>Xu(e.dom,ga.before(t))),(e=>Ju(e)),(e=>Qu(e)),(t=>Ku(e.dom,ga.after(t)))))(n)).map((r=>()=>IM(n,t)(r).each((e=>t=>(e.selection.setRng(t.toRange()),e.nodeChanged(),!0))(e))))}return Y.none()},jM=e=>{e.on(\"keydown\",(t=>{t.isDefaultPrevented()||((e,t)=>{xD([{keyCode:Yh.SPACEBAR,action:_D(HM,e)}],t).each((n=>{t.preventDefault(),WA(e,\"insertText\",{data:\" \"}).isDefaultPrevented()||(n(),jA(e,\"insertText\",{data:\" \"}))}))})(e,t)}))},WM=e=>Nc(e)?[{keyCode:Yh.TAB,action:_D(eS,e,!0)},{keyCode:Yh.TAB,shiftKey:!0,action:_D(eS,e,!1)}]:[],zM=e=>{e.on(\"keydown\",(t=>{t.isDefaultPrevented()||((e,t)=>{wD([...WM(e)],t).each((e=>{t.preventDefault()}))})(e,t)}))},UM=e=>{if(e.addShortcut(\"Meta+P\",\"\",\"mcePrint\"),IA(e),J_(e))return ds(null);{const t=_k(e);return(e=>{e.on(\"keyup compositionstart\",F(rD,e))})(e),tS(e,t),zA(e,t),LM(e),jM(e),TM(e),zM(e),EM(e,t),$M(e,t),t}};class VM{constructor(e){let t;this.lastPath=[],this.editor=e;const n=this;\"onselectionchange\"in e.getDoc()||e.on(\"NodeChange click mouseup keyup focus\",(n=>{const r=e.selection.getRng(),o={startContainer:r.startContainer,startOffset:r.startOffset,endContainer:r.endContainer,endOffset:r.endOffset};\"nodechange\"!==n.type&&um(o,t)||e.dispatch(\"SelectionChange\"),t=o})),e.on(\"contextmenu\",(()=>{e.dispatch(\"SelectionChange\")})),e.on(\"SelectionChange\",(()=>{const t=e.selection.getStart(!0);t&&Rd(e)&&!n.isSameElementPath(t)&&e.dom.isChildOf(t,e.getBody())&&e.nodeChanged({selectionChange:!0})})),e.on(\"mouseup\",(t=>{!t.isDefaultPrevented()&&Rd(e)&&(\"IMG\"===e.selection.getNode().nodeName?nf.setEditorTimeout(e,(()=>{e.nodeChanged()})):e.nodeChanged())}))}nodeChanged(e={}){const t=this.editor.selection;let n;if(this.editor.initialized&&t&&!rc(this.editor)&&!this.editor.mode.isReadOnly()){const r=this.editor.getBody();n=t.getStart(!0)||r,n.ownerDocument===this.editor.getDoc()&&this.editor.dom.isChildOf(n,r)||(n=r);const o=[];this.editor.dom.getParent(n,(e=>e===r||(o.push(e),!1))),this.editor.dispatch(\"NodeChange\",{...e,element:n,parents:o})}}isSameElementPath(e){let t;const n=this.editor,r=oe(n.dom.getParents(e,N,n.getBody()));if(r.length===this.lastPath.length){for(t=r.length;t>=0&&r[t]===this.lastPath[t];t--);if(-1===t)return this.lastPath=r,!0}return this.lastPath=r,!1}}const qM=\"x-tinymce/html\",GM=L(qM),KM=\"\\x3c!-- x-tinymce/html --\\x3e\",XM=e=>KM+e,JM=e=>-1!==e.indexOf(KM),QM=(e,t,n)=>{const r=e.split(/\\n\\n/),o=((e,t)=>{let n=\"<\"+e;const r=we(t,((e,t)=>t+'=\"'+Mi.encodeAllRaw(e)+'\"'));return r.length&&(n+=\" \"+r.join(\" \")),n+\">\"})(t,n),i=\"</\"+t+\">\",s=U(r,(e=>e.split(/\\n/).join(\"<br />\")));return 1===s.length?s[0]:U(s,(e=>o+e+i)).join(\"\")},ZM=\"%MCEPASTEBIN%\",eL=e=>e.dom.get(\"mcepastebin\"),tL=e=>x(e)&&\"mcepastebin\"===e.id,nL=e=>e===ZM,rL=e=>{const t=ds(null);return{create:()=>((e,t)=>{const{dom:n,selection:r}=e,o=e.getBody();t.set(r.getRng());const i=n.add(e.getBody(),\"div\",{id:\"mcepastebin\",class:\"mce-pastebin\",contentEditable:!0,\"data-mce-bogus\":\"all\",style:\"position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0\"},ZM);Mt.browser.isFirefox()&&n.setStyle(i,\"left\",\"rtl\"===n.getStyle(o,\"direction\",!0)?65535:-65535),n.bind(i,\"beforedeactivate focusin focusout\",(e=>{e.stopPropagation()})),i.focus(),r.select(i,!0)})(e,t),remove:()=>((e,t)=>{const n=e.dom;if(eL(e)){let r;const o=t.get();for(;r=eL(e);)n.remove(r),n.unbind(r);o&&e.selection.setRng(o)}t.set(null)})(e,t),getEl:()=>eL(e),getHtml:()=>(e=>{const t=e.dom,n=(e,n)=>{e.appendChild(n),t.remove(n,!0)},[r,...o]=K(e.getBody().childNodes,tL);V(o,(e=>{n(r,e)}));const i=t.select(\"div[id=mcepastebin]\",r);for(let e=i.length-1;e>=0;e--){const o=t.create(\"div\");r.insertBefore(o,i[e]),n(o,i[e])}return r?r.innerHTML:\"\"})(e),getLastRng:t.get}},oL=(e,t)=>(Ft.each(t,(t=>{e=m(t,RegExp)?e.replace(t,\"\"):e.replace(t[0],t[1])})),e),iL=e=>e=oL(e,[/^[\\s\\S]*<body[^>]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/gi,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class=\"Apple-converted-space\">\\u00a0<\\/span>( ?)/g,(e,t,n)=>t||n?go:\" \"],/<br class=\"Apple-interchange-newline\">/g,/<br>$/i]),sL=(e,t)=>({content:e,cancelled:t}),aL=(e,t,n)=>{const r=((e,t,n)=>e.dispatch(\"PastePreProcess\",{content:t,internal:n}))(e,t,n),o=((e,t)=>{const n=h_({},e.schema);n.addNodeFilter(\"meta\",(e=>{Ft.each(e,(e=>{e.remove()}))}));const r=n.parse(t,{forced_root_block:!1,isRootContent:!0});return Wf({validate:!0},e.schema).serialize(r)})(e,r.content);return e.hasEventListeners(\"PastePostProcess\")&&!r.isDefaultPrevented()?((e,t,n)=>{const r=e.dom.create(\"div\",{style:\"display:none\"},t),o=((e,t,n)=>e.dispatch(\"PastePostProcess\",{node:t,internal:n}))(e,r,n);return sL(o.node.innerHTML,o.isDefaultPrevented())})(e,o,n):sL(o,r.isDefaultPrevented())},lL=(e,t)=>(e.insertContent(t,{merge:Dc(e),paste:!0}),!0),cL=e=>/^https?:\\/\\/[\\w\\-\\/+=.,!;:&%@^~(){}?#]+$/i.test(e),uL=(e,t,n)=>!(e.selection.isCollapsed()||!cL(t))&&((e,t,n)=>(e.undoManager.extra((()=>{n(e,t)}),(()=>{e.execCommand(\"mceInsertLink\",!1,t)})),!0))(e,t,n),dL=(e,t,n)=>!!((e,t)=>cL(t)&&z($c(e),(e=>We(t.toLowerCase(),`.${e.toLowerCase()}`))))(e,t)&&((e,t,n)=>(e.undoManager.extra((()=>{n(e,t)}),(()=>{e.insertContent('<img src=\"'+t+'\">')})),!0))(e,t,n),hL=(e,t,n)=>{n||!Sc(e)?lL(e,t):((e,t)=>{Ft.each([uL,dL,lL],(n=>!n(e,t,lL)))})(e,t)},mL=(e=>{let t=0;return()=>e+t++})(\"mceclip\"),fL=(e,t,n,r)=>{const o=((e,t,n)=>aL(e,t,n))(e,t,n);o.cancelled||hL(e,o.content,r)},pL=(e,t,n)=>{const r=n||JM(t);fL(e,(e=>e.replace(KM,\"\"))(t),r,!1)},gL=(e,t)=>{const n=e.dom.encode(t).replace(/\\r\\n/g,\"\\n\"),r=ni(n,Mc(e)),o=QM(r,cl(e),ul(e));fL(e,o,!1,!0)},vL=e=>{const t={};if(e&&e.types)for(let n=0;n<e.types.length;n++){const r=e.types[n];try{t[r]=e.getData(r)}catch(e){t[r]=\"\"}}return t},yL=(e,t)=>t in e&&e[t].length>0,bL=e=>yL(e,\"text/html\")||yL(e,\"text/plain\"),_L=(e,t,n,r)=>{const o=mL(),i=vl(e)&&x(n.name),s=i?((e,t)=>{const n=t.match(/([\\s\\S]+?)(?:\\.[a-z0-9.]+)$/i);return x(n)?e.dom.encode(n[1]):void 0})(e,n.name):o,a=i?n.name:void 0,l=t.create(o,n,r,s,a);return t.add(l),l},wL=e=>{const t=$c(e);return e=>je(e.type,\"image/\")&&z(t,(t=>(e=>{const t=e.toLowerCase(),n={jpg:\"jpeg\",jpe:\"jpeg\",jfi:\"jpeg\",jif:\"jpeg\",jfif:\"jpeg\",pjpeg:\"jpeg\",pjp:\"jpeg\",svg:\"svg+xml\"};return Ft.hasOwn(n,t)?\"image/\"+n[t]:\"image/\"+t})(t)===e.type))},xL=(e,t,n)=>{const r=\"paste\"===t.type?t.clipboardData:t.dataTransfer;var o;if(_c(e)&&r){const i=((e,t)=>{const n=t.items?ne(de(t.items),(e=>\"file\"===e.kind?[e.getAsFile()]:[])):[],r=t.files?de(t.files):[];return K(n.length>0?n:r,wL(e))})(e,r);if(i.length>0)return t.preventDefault(),(o=i,Promise.all(U(o,(e=>Ub(e).then((t=>({file:e,uri:t}))))))).then((t=>{n&&e.selection.setRng(n),V(t,(t=>{((e,t)=>{jb(t.uri).each((({data:n,type:r,base64Encoded:o})=>{const i=o?n:btoa(n),s=t.file,a=e.editorUpload.blobCache,l=a.getByData(i,r),c=null!=l?l:_L(e,a,s,i);pL(e,`<img src=\"${c.blobUri()}\">`,!1)}))})(e,t)}))})),!0}return!1},CL=(e,t,n,r)=>{let o=iL(n);const i=yL(t,GM())||JM(n),s=!i&&(e=>!/<(?:\\/?(?!(?:div|p|br|span)>)\\w+|(?:(?!(?:span style=\"white-space:\\s?pre;?\">)|br\\s?\\/>))\\w+\\s[^>]+)>/i.test(e))(o),a=cL(o);(nL(o)||!o.length||s&&!a)&&(r=!0),(r||a)&&(o=yL(t,\"text/plain\")&&s?t[\"text/plain\"]:(e=>{const t=Hi(),n=h_({},t);let r=\"\";const o=t.getVoidElements(),i=Ft.makeMap(\"script noscript style textarea video audio iframe object\",\" \"),s=t.getBlockElements(),a=e=>{const n=e.name,l=e;if(\"br\"!==n){if(\"wbr\"!==n)if(o[n]&&(r+=\" \"),i[n])r+=\" \";else{if(3===e.type&&(r+=e.value),!(e.name in t.getVoidElements())){let t=e.firstChild;if(t)do{a(t)}while(t=t.next)}s[n]&&l.next&&(r+=\"\\n\",\"p\"===n&&(r+=\"\\n\"))}}else r+=\"\\n\"};return e=oL(e,[/<!\\[[^\\]]+\\]>/g]),a(n.parse(e)),r})(o)),nL(o)||(r?gL(e,o):pL(e,o,i))},kL=(e,t,n)=>{let r;e.on(\"keydown\",(e=>{(e=>Yh.metaKeyPressed(e)&&86===e.keyCode||e.shiftKey&&45===e.keyCode)(e)&&!e.isDefaultPrevented()&&(r=e.shiftKey&&86===e.keyCode)})),e.on(\"paste\",(o=>{if(o.isDefaultPrevented()||(e=>{var t,n;return Mt.os.isAndroid()&&0===(null===(n=null===(t=e.clipboardData)||void 0===t?void 0:t.items)||void 0===n?void 0:n.length)})(o))return;const i=\"text\"===n.get()||r;r=!1;const s=vL(o.clipboardData);!bL(s)&&xL(e,o,t.getLastRng()||e.selection.getRng())||(yL(s,\"text/html\")?(o.preventDefault(),CL(e,s,s[\"text/html\"],i)):(t.create(),nf.setEditorTimeout(e,(()=>{const n=t.getHtml();t.remove(),CL(e,s,n,i)}),0)))}))},DL=(e,t,n)=>{kL(e,t,n),(e=>{const t=e=>je(e,\"webkit-fake-url\"),n=e=>je(e,\"data:\");e.parser.addNodeFilter(\"img\",((r,o,i)=>{if(!_c(e)&&(e=>{var t;return!0===(null===(t=e.data)||void 0===t?void 0:t.paste)})(i))for(const o of r){const r=o.attr(\"src\");f(r)&&!o.attr(\"data-mce-object\")&&r!==Mt.transparentSrc&&(t(r)||!Lc(e)&&n(r))&&o.remove()}}))})(e)},SL=(e,t)=>{e.addCommand(\"mceTogglePlainTextPaste\",(()=>{((e,t)=>{\"text\"===t.get()?(t.set(\"html\"),Nh(e,!1)):(t.set(\"text\"),Nh(e,!0)),e.focus()})(e,t)})),e.addCommand(\"mceInsertClipboardContent\",((t,n)=>{n.html&&pL(e,n.html,n.internal),n.text&&gL(e,n.text)}))},AL=(e,t,n,r)=>{((e,t,n)=>{if(!e)return!1;try{return e.clearData(),e.setData(\"text/html\",t),e.setData(\"text/plain\",n),e.setData(GM(),t),!0}catch(e){return!1}})(e.clipboardData,t.html,t.text)?(e.preventDefault(),r()):n(t.html,r)},ML=e=>(t,n)=>{const{dom:r,selection:o}=e,i=r.create(\"div\",{contenteditable:\"false\",\"data-mce-bogus\":\"all\"}),s=r.create(\"div\",{contenteditable:\"true\"},t);r.setStyles(i,{position:\"fixed\",top:\"0\",left:\"-3000px\",width:\"1000px\",overflow:\"hidden\"}),i.appendChild(s),r.add(e.getBody(),i);const a=o.getRng();s.focus();const l=r.createRng();l.selectNodeContents(s),o.setRng(l),nf.setEditorTimeout(e,(()=>{o.setRng(a),r.remove(i),n()}),0)},LL=e=>({html:XM(e.selection.getContent({contextual:!0})),text:e.selection.getContent({format:\"text\"})}),EL=e=>!e.selection.isCollapsed()||(e=>!!e.dom.getParent(e.selection.getStart(),\"td[data-mce-selected],th[data-mce-selected]\",e.getBody()))(e),TL=e=>{e.on(\"cut\",(e=>t=>{!t.isDefaultPrevented()&&EL(e)&&AL(t,LL(e),ML(e),(()=>{if(Mt.browser.isChromium()||Mt.browser.isFirefox()){const t=e.selection.getRng();nf.setEditorTimeout(e,(()=>{e.selection.setRng(t),e.execCommand(\"Delete\")}),0)}else e.execCommand(\"Delete\")}))})(e)),e.on(\"copy\",(e=>t=>{!t.isDefaultPrevented()&&EL(e)&&AL(t,LL(e),ML(e),S)})(e))},FL=(e,t)=>{var n,r;return _m.getCaretRangeFromPoint(null!==(n=t.clientX)&&void 0!==n?n:0,null!==(r=t.clientY)&&void 0!==r?r:0,e.getDoc())},OL=(e,t)=>{e.focus(),t&&e.selection.setRng(t)},BL=(e,t)=>{bc(e)&&e.on(\"dragend dragover draggesture dragdrop drop drag\",(e=>{e.preventDefault(),e.stopPropagation()})),_c(e)||e.on(\"drop\",(e=>{const t=e.dataTransfer;t&&(e=>z(e.files,(e=>/^image\\//.test(e.type))))(t)&&e.preventDefault()})),e.on(\"drop\",(n=>{if(n.isDefaultPrevented()||t.get())return;const r=FL(e,n);if(w(r))return;const o=vL(n.dataTransfer),i=yL(o,GM());if((!bL(o)||(e=>{const t=e[\"text/plain\"];return!!t&&0===t.indexOf(\"file://\")})(o))&&xL(e,n,r))return;const s=o[GM()],a=s||o[\"text/html\"]||o[\"text/plain\"];a&&(n.preventDefault(),nf.setEditorTimeout(e,(()=>{e.undoManager.transact((()=>{s&&e.execCommand(\"Delete\"),OL(e,r);const t=iL(a);o[\"text/html\"]?pL(e,t,i):gL(e,t)}))})))})),e.on(\"dragstart\",(e=>{t.set(!0)})),e.on(\"dragover dragend\",(n=>{_c(e)&&!t.get()&&(n.preventDefault(),OL(e,FL(e,n))),\"dragend\"===n.type&&t.set(!1)}))},RL=/rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi,$L=e=>Ft.trim(e).replace(RL,Dd).toLowerCase(),NL=(e,t,n)=>{const r=Cc(e);if(n||\"all\"===r||!kc(e))return t;const o=r?r.split(/[, ]/):[];if(o&&\"none\"!==r){const n=e.dom,r=e.selection.getNode();t=t.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi,((e,t,i,s)=>{const a=n.parseStyle(n.decode(i)),l={};for(let e=0;e<o.length;e++){const t=a[o[e]];let i=t,s=n.getStyle(r,o[e],!0);/color/.test(o[e])&&(i=$L(i),s=$L(s)),s!==i&&(l[o[e]]=t)}const c=n.serializeStyle(l,\"span\");return c?t+' style=\"'+c+'\"'+s:t+s}))}else t=t.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi,\"$1$3\");return t=t.replace(/(<[^>]+) data-mce-style=\"([^\"]+)\"([^>]*>)/gi,((e,t,n,r)=>t+' style=\"'+n+'\"'+r)),t},YL=e=>{const t=ds(!1),n=ds(Ac(e)?\"text\":\"html\"),r=rL(e);(e=>{(Mt.browser.isChromium()||Mt.browser.isSafari())&&((e,t)=>{e.on(\"PastePreProcess\",(n=>{n.content=t(e,n.content,n.internal)}))})(e,NL)})(e),SL(e,n),(e=>{const t=t=>n=>{t(e,n)},n=wc(e);C(n)&&e.on(\"PastePreProcess\",t(n));const r=xc(e);C(r)&&e.on(\"PastePostProcess\",t(r))})(e),e.on(\"PreInit\",(()=>{TL(e),BL(e,t),DL(e,r,n)}))},PL=e=>{(e=>{e.on(\"click\",(t=>{e.dom.getParent(t.target,\"details\")&&t.preventDefault()}))})(e),(e=>{e.parser.addNodeFilter(\"details\",(e=>{V(e,(e=>{e.attr(\"data-mce-open\",e.attr(\"open\")),e.attr(\"open\",\"open\")}))})),e.serializer.addNodeFilter(\"details\",(e=>{V(e,(e=>{const t=e.attr(\"data-mce-open\");e.attr(\"open\",f(t)?t:null),e.attr(\"data-mce-open\",null)}))}))})(e)},IL=Fr,HL=Sr,jL=e=>Rr(e.dom),WL=e=>t=>pn(dn.fromDom(e),t),zL=(e,t)=>Vr(dn.fromDom(e),(e=>(e=>Br(e.dom))(e)||no(e)),WL(t)).getOr(dn.fromDom(t)).dom,UL=(e,t)=>Vr(dn.fromDom(e),jL,WL(t)),VL=(e,t,n)=>{const r=new Zr(e,t),o=n?r.next.bind(r):r.prev.bind(r);let i=e;for(let t=n?e:o();t&&!IL(t);t=o())Xo(t)&&(i=t);return i},qL=e=>{const t=((e,t)=>{const n=ga.fromRangeStart(e).getNode(),r=zL(n,t),o=VL(n,r,!1),i=VL(n,r,!0),s=document.createRange();return UL(o,r).fold((()=>{HL(o)?s.setStart(o,0):s.setStartBefore(o)}),(e=>s.setStartBefore(e.dom))),UL(i,r).fold((()=>{HL(i)?s.setEnd(i,i.data.length):s.setEndAfter(i)}),(e=>s.setEndAfter(e.dom))),s})(e.selection.getRng(),e.getBody());e.selection.setRng(sv(t))};var GL;!function(e){e.Before=\"before\",e.After=\"after\"}(GL||(GL={}));const KL=(e,t)=>Math.abs(e.left-t),XL=(e,t)=>Math.abs(e.right-t),JL=(e,t)=>{const n=((e,t)=>Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top)))(e,t)/Math.min(e.height,t.height);return((e,t)=>e.top<t.bottom&&e.bottom>t.top)(e,t)&&n>.5},QL=(e,t)=>(e=>J(e,((e,t)=>e.fold((()=>Y.some(t)),(e=>{const n=Math.min(t.left,e.left),r=Math.min(t.top,e.top),o=Math.max(t.right,e.right),i=Math.max(t.bottom,e.bottom);return Y.some({top:r,right:o,bottom:i,left:n,width:o-n,height:i-r})}))),Y.none()))(K(e,(e=>{return(n=t)>=(r=e).top&&n<=r.bottom;var n,r}))).fold((()=>[[],e]),(t=>{const{pass:n,fail:r}=G(e,(e=>JL(e,t)));return[n,r]})),ZL=(e,t,n)=>t>e.left&&t<e.right?0:Math.min(Math.abs(e.left-t),Math.abs(e.right-t)),eE=(e,t,n)=>{const r=e=>Xo(e.node)?Y.some(e):vr(e.node)?eE(de(e.node.childNodes),t,n):Y.none(),o=(e,o)=>{const i=ae(e,((e,r)=>o(e,t,n)-o(r,t,n)));return((e,o)=>{if(e.length>=2){const i=r(e[0]).getOr(e[0]),s=r(e[1]).getOr(e[1]);if(Math.abs(o(i,t,n)-o(s,t,n))<2){if(Sr(i.node))return Y.some(i);if(Sr(s.node))return Y.some(s)}}return Y.none()})(i,o).orThunk((()=>he(i,r)))},[i,s]=QL(ZC(e),n),{pass:a,fail:l}=G(s,(e=>e.top<n));return o(i,ZL).orThunk((()=>o(l,qs))).orThunk((()=>o(a,qs)))},tE=(e,t,n,r)=>{const o=(t,i)=>i.fold((()=>eE(de(t.dom.childNodes),n,r)),(e=>{const o=K(de(t.dom.childNodes),(t=>t!==e.dom));return eE(o,n,r)})).orThunk((()=>{var n;return(pn(t,e)?Y.none():(n=t,Y.from(n.dom.parentElement).map(dn.fromDom))).bind((e=>o(e,Y.some(t))))}));return o(t,Y.none())},nE=(e,t,n)=>((e,t,n)=>{const r=dn.fromDom(e),o=yn(r),i=dn.fromPoint(o,t,n).filter((e=>gn(r,e))).getOr(r);return tE(r,i,t,n)})(e,t,n).filter((e=>tu(e.node))).map((e=>((e,t)=>({node:e.node,position:KL(e,t)<XL(e,t)?GL.Before:GL.After}))(e,t))),rE=e=>{var t,n;const r=e.getBoundingClientRect(),o=e.ownerDocument,i=o.documentElement,s=o.defaultView;return{top:r.top+(null!==(t=null==s?void 0:s.scrollY)&&void 0!==t?t:0)-i.clientTop,left:r.left+(null!==(n=null==s?void 0:s.scrollX)&&void 0!==n?n:0)-i.clientLeft}},oE=(e,t)=>{return n=(e=>e.inline?rE(e.getBody()):{left:0,top:0})(e),r=(e=>{const t=e.getBody();return e.inline?{left:t.scrollLeft,top:t.scrollTop}:{left:0,top:0}})(e),o=((e,t)=>{if(t.target.ownerDocument!==e.getDoc()){const n=rE(e.getContentAreaContainer()),r=(e=>{const t=e.getBody(),n=e.getDoc().documentElement,r={left:t.scrollLeft,top:t.scrollTop},o={left:t.scrollLeft||n.scrollLeft,top:t.scrollTop||n.scrollTop};return e.inline?r:o})(e);return{left:t.pageX-n.left+r.left,top:t.pageY-n.top+r.top}}return{left:t.pageX,top:t.pageY}})(e,t),{pageX:o.left-n.left+r.left,pageY:o.top-n.top+r.top};var n,r,o},iE=Rr,sE=((...e)=>t=>{for(let n=0;n<e.length;n++)if(e[n](t))return!0;return!1})(iE,Br),aE=(e,t,n,r)=>{const o=e.dom,i=t.cloneNode(!0);o.setStyles(i,{width:n,height:r}),o.setAttrib(i,\"data-mce-selected\",null);const s=o.create(\"div\",{class:\"mce-drag-container\",\"data-mce-bogus\":\"all\",unselectable:\"on\",contenteditable:\"false\"});return o.setStyles(s,{position:\"absolute\",opacity:.5,overflow:\"hidden\",border:0,padding:0,margin:0,width:n,height:r}),o.setStyles(i,{margin:0,boxSizing:\"border-box\"}),s.appendChild(i),s},lE=(e,t)=>n=>()=>{const r=\"left\"===e?n.scrollX:n.scrollY;n.scroll({[e]:r+t,behavior:\"smooth\"})},cE=lE(\"left\",-32),uE=lE(\"left\",32),dE=lE(\"top\",-32),hE=lE(\"top\",32),mE=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)},fE=(e,t)=>n=>{if((e=>0===e.button)(n)){const i=Z(t.dom.getParents(n.target),sE).getOr(null);if(x(i)&&(r=t.getBody(),iE(o=i)&&o!==r)){const r=t.dom.getPos(i),o=t.getBody(),s=t.getDoc().documentElement;e.set({element:i,dragging:!1,screenX:n.screenX,screenY:n.screenY,maxX:(t.inline?o.scrollWidth:s.offsetWidth)-2,maxY:(t.inline?o.scrollHeight:s.offsetHeight)-2,relX:n.pageX-r.x,relY:n.pageY-r.y,width:i.offsetWidth,height:i.offsetHeight,ghost:aE(t,i,i.offsetWidth,i.offsetHeight),intervalId:vs(100)})}}var r,o},pE=(e,t)=>{const n=bs(((e,n)=>{t._selectionOverrides.hideFakeCaret(),t.selection.placeCaretAt(e,n)}),0);t.on(\"remove\",n.cancel);const r=e;return o=>e.on((e=>{const i=Math.max(Math.abs(o.screenX-e.screenX),Math.abs(o.screenY-e.screenY));if(!e.dragging&&i>10){if(t.dispatch(\"dragstart\",{target:e.element}).isDefaultPrevented())return;e.dragging=!0,t.focus()}if(e.dragging){const i=((e,t)=>({pageX:t.pageX-e.relX,pageY:t.pageY+5}))(e,oE(t,o));s=e.ghost,a=t.getBody(),s.parentNode!==a&&a.appendChild(s),((e,t,n,r,o,i,s,a,l,c,u)=>{let d=0,h=0;e.style.left=t.pageX+\"px\",e.style.top=t.pageY+\"px\",t.pageX+n>o&&(d=t.pageX+n-o),t.pageY+r>i&&(h=t.pageY+r-i),e.style.width=n-d+\"px\",e.style.height=r-h+\"px\";const m=l.clientHeight,f=l.clientWidth,p=s+l.getBoundingClientRect().top,g=a+l.getBoundingClientRect().left;u.on((e=>{e.intervalId.clear(),e.dragging&&(s+8>=m?e.intervalId.set(hE(c)):s-8<=0?e.intervalId.set(dE(c)):a+8>=f?e.intervalId.set(uE(c)):a-8<=0?e.intervalId.set(cE(c)):p+16>=window.innerHeight?e.intervalId.set(hE(window)):p-16<=0?e.intervalId.set(dE(window)):g+16>=window.innerWidth?e.intervalId.set(uE(window)):g-16<=0&&e.intervalId.set(cE(window)))}))})(e.ghost,i,e.width,e.height,e.maxX,e.maxY,o.clientY,o.clientX,t.getContentAreaContainer(),t.getWin(),r),n.throttle(o.clientX,o.clientY)}var s,a}))},gE=(e,t)=>n=>{e.on((e=>{if(e.intervalId.clear(),e.dragging){if(((e,t,n)=>!w(t)&&t!==n&&!e.dom.isChildOf(t,n)&&!iE(t))(t,(e=>{const t=e.getSel();if(x(t)){const e=t.getRangeAt(0).startContainer;return Sr(e)?e.parentNode:e}return null})(t.selection),e.element)){const r=(e=>{const t=e.cloneNode(!0);return t.removeAttribute(\"data-mce-selected\"),t})(e.element);t.dispatch(\"drop\",{clientX:n.clientX,clientY:n.clientY}).isDefaultPrevented()||t.undoManager.transact((()=>{mE(e.element),t.insertContent(t.dom.getOuterHTML(r)),t._selectionOverrides.hideFakeCaret()}))}t.dispatch(\"dragend\")}})),vE(e)},vE=e=>{e.on((e=>{e.intervalId.clear(),mE(e.ghost)})),e.clear()},yE=e=>{const t=ys(),n=ls.DOM,r=document,o=fE(t,e),i=pE(t,e),s=gE(t,e),a=((e,t)=>()=>{e.on((e=>{e.intervalId.clear(),e.dragging&&t.dispatch(\"dragend\")})),vE(e)})(t,e);e.on(\"mousedown\",o),e.on(\"mousemove\",i),e.on(\"mouseup\",s),n.bind(r,\"mousemove\",i),n.bind(r,\"mouseup\",a),e.on(\"remove\",(()=>{n.unbind(r,\"mousemove\",i),n.unbind(r,\"mouseup\",a)})),e.on(\"keydown\",(e=>{e.keyCode===Yh.ESC&&a()}))},bE=e=>{yE(e),lc(e)&&(e=>{const t=t=>{if(!t.isDefaultPrevented()){const n=t.dataTransfer;n&&(W(n.types,\"Files\")||n.files.length>0)&&(t.preventDefault(),\"drop\"===t.type&&Hw(e,\"Dropped file type is not supported\"))}},n=n=>{af(e,n.target)&&t(n)},r=()=>{const r=ls.DOM,o=e.dom,i=document,s=e.inline?e.getBody():e.getDoc(),a=[\"drop\",\"dragover\"];V(a,(e=>{r.bind(i,e,n),o.bind(s,e,t)})),e.on(\"remove\",(()=>{V(a,(e=>{r.unbind(i,e,n),o.unbind(s,e,t)}))}))};e.on(\"init\",(()=>{nf.setEditorTimeout(e,r,0)}))})(e)},_E=Rr,wE=(e,t)=>qg(e.getBody(),t),xE=e=>{const t=e.selection,n=e.dom,r=e.getBody(),o=Qc(e,r,n.isBlock,(()=>ff(e))),i=\"sel-\"+n.uniqueId(),s=\"data-mce-selected\";let a;const l=e=>e!==r&&(_E(e)||Yr(e))&&n.isChildOf(e,r),c=(n,r,i,s=!0)=>e.dispatch(\"ShowCaret\",{target:r,direction:n,before:i}).isDefaultPrevented()?null:(s&&t.scrollIntoView(r,-1===n),o.show(i,r)),u=()=>{e.on(\"click\",(t=>{const n=wE(e,t.target);n&&_E(n)&&(t.preventDefault(),e.focus())})),e.on(\"blur NewBlock\",g),e.on(\"ResizeWindow FullscreenStateChanged\",o.reposition),e.on(\"tap\",(t=>{const n=t.target,r=wE(e,n);_E(r)?(t.preventDefault(),Px(e,r).each(p)):l(n)&&Px(e,n).each(p)}),!0),e.on(\"mousedown\",(o=>{const i=o.target;if(i!==r&&\"HTML\"!==i.nodeName&&!n.isChildOf(i,r))return;if(!Bw(e,o.clientX,o.clientY))return;g(),v();const s=wE(e,i);_E(s)?(o.preventDefault(),Px(e,s).each(p)):nE(r,o.clientX,o.clientY).each((n=>{o.preventDefault();(e=>{e&&t.setRng(e)})(c(1,n.node,n.position===GL.Before,!1)),vr(s)?s.focus():e.getBody().focus()}))})),e.on(\"keypress\",(e=>{Yh.modifierPressed(e)||_E(t.getNode())&&e.preventDefault()})),e.on(\"GetSelectionRange\",(e=>{let t=e.range;if(a){if(!a.parentNode)return void(a=null);t=t.cloneRange(),t.selectNode(a),e.range=t}})),e.on(\"SetSelectionRange\",(e=>{e.range=m(e.range);const t=p(e.range,e.forward);t&&(e.range=t)}));e.on(\"AfterSetSelectionRange\",(e=>{const t=e.range,r=t.startContainer.parentElement;var o;h(t)||vr(o=r)&&\"mcepastebin\"===o.id||v(),(e=>x(e)&&n.hasClass(e,\"mce-offscreen-selection\"))(r)||g()})),bE(e),(e=>{const t=bs((()=>{if(!e.removed&&e.getBody().contains(document.activeElement)){const t=e.selection.getRng();if(t.collapsed){const n=Ix(e,t,!1);e.selection.setRng(n)}}}),0);e.on(\"focus\",(()=>{t.throttle()})),e.on(\"blur\",(()=>{t.cancel()}))})(e),(e=>{e.on(\"init\",(()=>{e.on(\"focusin\",(t=>{const n=t.target;if(Yr(n)){const t=qg(e.getBody(),n),r=Rr(t)?t:n;e.selection.getNode()!==r&&Px(e,r).each((t=>e.selection.setRng(t)))}}))}))})(e)},d=e=>Bo(e)||Yo(e)||Po(e),h=e=>d(e.startContainer)||d(e.endContainer),m=t=>{const r=e.schema.getVoidElements(),o=n.createRng(),i=t.startContainer,s=t.startOffset,a=t.endContainer,l=t.endOffset;return ke(r,i.nodeName.toLowerCase())?0===s?o.setStartBefore(i):o.setStartAfter(i):o.setStart(i,s),ke(r,a.nodeName.toLowerCase())?0===l?o.setEndBefore(a):o.setEndAfter(a):o.setEnd(a,l),o},f=r=>{const o=r.cloneNode(!0),l=e.dispatch(\"ObjectSelected\",{target:r,targetClone:o});if(l.isDefaultPrevented())return null;const c=((r,o)=>{const s=dn.fromDom(e.getBody()),a=e.getDoc(),l=Kr(s,\"#\"+i).getOrThunk((()=>{const e=dn.fromHtml('<div data-mce-bogus=\"all\" class=\"mce-offscreen-selection\"></div>',a);return Ut(e,\"id\",i),Xn(s,e),e})),c=n.createRng();Qn(l),Jn(l,[dn.fromText(go,a),dn.fromDom(o),dn.fromText(go,a)]),c.setStart(l.dom.firstChild,1),c.setEnd(l.dom.lastChild,0),Hn(l,{top:n.getPos(r,e.getBody()).y+\"px\"}),Wm(l);const u=t.getSel();return u&&(u.removeAllRanges(),u.addRange(c)),c})(r,l.targetClone),u=dn.fromDom(r);return V(bo(dn.fromDom(e.getBody()),\"*[data-mce-selected]\"),(e=>{pn(u,e)||Xt(e,s)})),n.getAttrib(r,s)||r.setAttribute(s,\"1\"),a=r,v(),c},p=(e,t)=>{if(!e)return null;if(e.collapsed){if(!h(e)){const n=t?1:-1,o=Du(n,r,e),i=o.getNode(!t);if(tu(i))return c(n,i,!!t&&!o.isAtEnd(),!1);const s=o.getNode(t);if(tu(s))return c(n,s,!t&&!o.isAtEnd(),!1)}return null}let o=e.startContainer,i=e.startOffset;const s=e.endOffset;if(Sr(o)&&0===i&&_E(o.parentNode)&&(o=o.parentNode,i=n.nodeIndex(o),o=o.parentNode),!vr(o))return null;if(s===i+1&&o===e.endContainer){const e=o.childNodes[i];if(l(e))return f(e)}return null},g=()=>{a&&a.removeAttribute(s),Kr(dn.fromDom(e.getBody()),\"#\"+i).each(Zn),a=null},v=()=>{o.hide()};return J_(e)||u(),{showCaret:c,showBlockCaretContainer:e=>{e.hasAttribute(\"data-mce-caret\")&&(Io(e),t.scrollIntoView(e))},hideFakeCaret:v,destroy:()=>{o.destroy(),a=null}}},CE=(e,t)=>{let n=t;for(let t=e.previousSibling;Sr(t);t=t.previousSibling)n+=t.data.length;return n},kE=(e,t,n,r,o)=>{if(Sr(n)&&(r<0||r>n.data.length))return[];const i=o&&Sr(n)?[CE(n,r)]:[r];let s=n;for(;s!==t&&s.parentNode;)i.push(e.nodeIndex(s,o)),s=s.parentNode;return s===t?i.reverse():[]},DE=(e,t,n,r,o,i,s=!1)=>({start:kE(e,t,n,r,s),end:kE(e,t,o,i,s)}),SE=(e,t)=>{const n=t.slice(),r=n.pop();if(k(r)){return J(n,((e,t)=>e.bind((e=>Y.from(e.childNodes[t])))),Y.some(e)).bind((e=>Sr(e)&&(r<0||r>e.data.length)?Y.none():Y.some({node:e,offset:r})))}return Y.none()},AE=(e,t)=>SE(e,t.start).bind((({node:n,offset:r})=>SE(e,t.end).map((({node:e,offset:t})=>{const o=document.createRange();return o.setStart(n,r),o.setEnd(e,t),o})))),ME=(e,t,n)=>{if(t&&e.isEmpty(t)&&!n(t)){const r=t.parentNode;e.remove(t),ME(e,r,n)}},LE=(e,t,n,r=!0)=>{const o=t.startContainer.parentNode,i=t.endContainer.parentNode;t.deleteContents(),r&&!n(t.startContainer)&&(Sr(t.startContainer)&&0===t.startContainer.data.length&&e.remove(t.startContainer),Sr(t.endContainer)&&0===t.endContainer.data.length&&e.remove(t.endContainer),ME(e,o,n),o!==i&&ME(e,i,n))},EE=(e,t)=>Y.from(e.dom.getParent(t.startContainer,e.dom.isBlock)),TE=(e,t,n)=>{const r=e.dynamicPatternsLookup({text:n,block:t});return{...e,blockPatterns:Va(r).concat(e.blockPatterns),inlinePatterns:qa(r).concat(e.inlinePatterns)}},FE=(e,t,n,r)=>{const o=e.createRng();return o.setStart(t,0),o.setEnd(n,r),o.toString()},OE=(e,t,n)=>{const r=((e,t,n)=>{if(Sr(e)&&t>=e.length)return Y.some(nS(e,t));{const r=Is(rS);return Y.from(r.forwards(e,t,oS(e),n)).map((e=>nS(e.container,0)))}})(t,0,t);r.each((r=>{const o=r.container;aS(o,n.start.length,t).each((n=>{const r=e.createRng();r.setStart(o,0),r.setEnd(n.container,n.offset),LE(e,r,(e=>e===t))}))}))},BE=(e,t)=>{const n=e.dom,r=t.pattern,o=AE(n.getRoot(),t.range).getOrDie(\"Unable to resolve path range\");return EE(e,o).each((t=>{\"block-format\"===r.type?((e,t)=>{const n=t.get(e);return v(n)&&ce(n).exists((e=>ke(e,\"block\")))})(r.format,e.formatter)&&e.undoManager.transact((()=>{OE(e.dom,t,r),e.formatter.apply(r.format)})):\"block-command\"===r.type&&e.undoManager.transact((()=>{OE(e.dom,t,r),e.execCommand(r.cmd,!1,r.value)}))})),!0},RE=(e,t)=>{const n=(e=>ae(e,((e,t)=>t.start.length-e.start.length)))(e),r=t.replace(go,\" \");return Z(n,(e=>0===t.indexOf(e.start)||0===r.indexOf(e.start)))},$E=(e,t)=>e.create(\"span\",{\"data-mce-type\":\"bookmark\",id:t}),NE=(e,t)=>{const n=e.createRng();return n.setStartAfter(t.start),n.setEndBefore(t.end),n},YE=(e,t,n)=>{const r=AE(e.getRoot(),n).getOrDie(\"Unable to resolve path range\"),o=r.startContainer,i=r.endContainer,s=0===r.endOffset?i:i.splitText(r.endOffset),a=0===r.startOffset?o:o.splitText(r.startOffset),l=a.parentNode;return{prefix:t,end:s.parentNode.insertBefore($E(e,t+\"-end\"),s),start:l.insertBefore($E(e,t+\"-start\"),a)}},PE=(e,t,n)=>{ME(e,e.get(t.prefix+\"-end\"),n),ME(e,e.get(t.prefix+\"-start\"),n)},IE=e=>0===e.start.length,HE=(e,t,n,r)=>{const o=t.start;var i;return lS(e,r.container,r.offset,(i=o,(e,t)=>{const n=e.data.substring(0,t),r=n.lastIndexOf(i.charAt(i.length-1)),o=n.lastIndexOf(i);return-1!==o?o+i.length:-1!==r?r+1:-1}),n).bind((r=>{if(r.offset>=o.length){const t=e.createRng();return t.setStart(r.container,r.offset-o.length),t.setEnd(r.container,r.offset),Y.some(t)}{const i=r.offset-o.length;return sS(r.container,i,n).map((t=>{const n=e.createRng();return n.setStart(t.container,t.offset),n.setEnd(r.container,r.offset),n})).filter((e=>e.toString()===o)).orThunk((()=>HE(e,t,n,nS(r.container,0))))}}))},jE=(e,t,n,r)=>{const o=e.dom,i=o.getRoot(),s=n.pattern,a=n.position.container,l=n.position.offset;return sS(a,l-n.pattern.end.length,t).bind((c=>{const u=DE(o,i,c.container,c.offset,a,l,r);if(IE(s))return Y.some({matches:[{pattern:s,startRng:u,endRng:u}],position:c});{const a=WE(e,n.remainingPatterns,c.container,c.offset,t,r),l=a.getOr({matches:[],position:c}),d=l.position,h=((e,t,n,r,o,i=!1)=>{if(0===t.start.length&&!i){const t=e.createRng();return t.setStart(n,r),t.setEnd(n,r),Y.some(t)}return iS(n,r,o).bind((n=>HE(e,t,o,n).bind((e=>{var t;if(i){if(e.endContainer===n.container&&e.endOffset===n.offset)return Y.none();if(0===n.offset&&(null===(t=e.endContainer.textContent)||void 0===t?void 0:t.length)===e.endOffset)return Y.none()}return Y.some(e)}))))})(o,s,d.container,d.offset,t,a.isNone());return h.map((e=>{const t=((e,t,n,r=!1)=>DE(e,t,n.startContainer,n.startOffset,n.endContainer,n.endOffset,r))(o,i,e,r);return{matches:l.matches.concat([{pattern:s,startRng:t,endRng:u}]),position:nS(e.startContainer,e.startOffset)}}))}}))},WE=(e,t,n,r,o,i)=>{const s=e.dom;return iS(n,r,s.getRoot()).bind((a=>{const l=FE(s,o,n,r);for(let n=0;n<t.length;n++){const r=t[n];if(!We(l,r.end))continue;const s=t.slice();s.splice(n,1);const c=jE(e,o,{pattern:r,remainingPatterns:s,position:a},i);if(c.isSome())return c}return Y.none()}))},zE=(e,t,n)=>{e.selection.setRng(n),\"inline-format\"===t.type?V(t.format,(t=>{e.formatter.apply(t)})):e.execCommand(t.cmd,!1,t.value)},UE=(e,t,n,r,o,i)=>WE(e,o.inlinePatterns,n,r,t,i).fold((()=>[]),(e=>e.matches)),VE=(e,t)=>{if(0===t.length)return;const n=e.dom,r=e.selection.getBookmark(),o=((e,t)=>{const n=Bs(\"mce_textpattern\"),r=X(t,((t,r)=>{const o=YE(e,n+`_end${t.length}`,r.endRng);return t.concat([{...r,endMarker:o}])}),[]);return X(r,((t,o)=>{const i=r.length-t.length-1,s=IE(o.pattern)?o.endMarker:YE(e,n+`_start${i}`,o.startRng);return t.concat([{...o,startMarker:s}])}),[])})(n,t);V(o,(t=>{const r=n.getParent(t.startMarker.start,n.isBlock),o=e=>e===r;IE(t.pattern)?((e,t,n,r)=>{const o=NE(e.dom,n);LE(e.dom,o,r),zE(e,t,o)})(e,t.pattern,t.endMarker,o):((e,t,n,r,o)=>{const i=e.dom,s=NE(i,r),a=NE(i,n);LE(i,a,o),LE(i,s,o);const l={prefix:n.prefix,start:n.end,end:r.start},c=NE(i,l);zE(e,t,c)})(e,t.pattern,t.startMarker,t.endMarker,o),PE(n,t.endMarker,o),PE(n,t.startMarker,o)})),e.selection.moveToBookmark(r)},qE=(e,t)=>{const n=e.selection.getRng();return EE(e,n).map((r=>{var o;const i=Math.max(0,n.startOffset),s=TE(t,r,null!==(o=r.textContent)&&void 0!==o?o:\"\"),a=UE(e,r,n.startContainer,i,s,!0),l=((e,t,n,r)=>{var o;const i=e.dom,s=cl(e);if(!i.is(t,s))return[];const a=null!==(o=t.textContent)&&void 0!==o?o:\"\";return RE(n.blockPatterns,a).map((e=>Ft.trim(a).length===e.start.length?[]:[{pattern:e,range:DE(i,i.getRoot(),t,0,t,0,r)}])).getOr([])})(e,r,s,!0);return(l.length>0||a.length>0)&&(e.undoManager.add(),e.undoManager.extra((()=>{e.execCommand(\"mceInsertNewLine\")}),(()=>{e.insertContent(po),VE(e,a),((e,t)=>{if(0===t.length)return;const n=e.selection.getBookmark();V(t,(t=>BE(e,t))),e.selection.moveToBookmark(n)})(e,l);const t=e.selection.getRng(),n=iS(t.startContainer,t.startOffset,e.dom.getRoot());e.execCommand(\"mceInsertNewLine\"),n.each((t=>{const n=t.container;n.data.charAt(t.offset-1)===po&&(n.deleteData(t.offset-1,1),ME(e.dom,n.parentNode,(t=>t===e.dom.getRoot())))}))})),!0)})).getOr(!1)},GE=(e,t,n)=>{for(let r=0;r<e.length;r++)if(n(e[r],t))return!0;return!1},KE=e=>{const t=[\",\",\".\",\";\",\":\",\"!\",\"?\"],n=[32],r=()=>{return t=Ec(e),n=Tc(e),{inlinePatterns:qa(t),blockPatterns:Va(t),dynamicPatternsLookup:n};var t,n},o=()=>(e=>e.options.isSet(\"text_patterns_lookup\"))(e);e.on(\"keydown\",(t=>{if(13===t.keyCode&&!Yh.modifierPressed(t)&&e.selection.isCollapsed()){const n=r();(n.inlinePatterns.length>0||n.blockPatterns.length>0||o())&&qE(e,n)&&t.preventDefault()}}),!0);const i=()=>{if(e.selection.isCollapsed()){const t=r();(t.inlinePatterns.length>0||o())&&((e,t)=>{const n=e.selection.getRng();EE(e,n).map((r=>{const o=Math.max(0,n.startOffset-1),i=FE(e.dom,r,n.startContainer,o),s=TE(t,r,i),a=UE(e,r,n.startContainer,o,s,!1);a.length>0&&e.undoManager.transact((()=>{VE(e,a)}))}))})(e,t)}};e.on(\"keyup\",(e=>{GE(n,e,((e,t)=>e===t.keyCode&&!Yh.modifierPressed(t)))&&i()})),e.on(\"keypress\",(n=>{GE(t,n,((e,t)=>e.charCodeAt(0)===t.charCode))&&nf.setEditorTimeout(e,i)}))},XE=e=>{const t=Ft.each,n=Yh.BACKSPACE,r=Yh.DELETE,o=e.dom,i=e.selection,s=e.parser,a=Mt.browser,l=a.isFirefox(),c=a.isChromium()||a.isSafari(),u=Mt.deviceType.isiPhone()||Mt.deviceType.isiPad(),d=Mt.os.isMacOS()||Mt.os.isiOS(),h=(t,n)=>{try{e.getDoc().execCommand(t,!1,String(n))}catch(e){}},m=e=>e.isDefaultPrevented(),f=()=>{const t=e=>{const t=o.create(\"body\"),n=e.cloneContents();return t.appendChild(n),i.serializer.serialize(t,{format:\"html\"})};e.on(\"keydown\",(i=>{const s=i.keyCode;if(!m(i)&&(s===r||s===n)){const n=e.selection.isCollapsed(),r=e.getBody();if(n&&!o.isEmpty(r))return;if(!n&&!(n=>{const r=t(n),i=o.createRng();return i.selectNode(e.getBody()),r===t(i)})(e.selection.getRng()))return;i.preventDefault(),e.setContent(\"\"),r.firstChild&&o.isBlock(r.firstChild)?e.selection.setCursorLocation(r.firstChild,0):e.selection.setCursorLocation(r,0),e.nodeChanged()}}))},p=()=>{e.shortcuts.add(\"meta+a\",null,\"SelectAll\")},g=()=>{e.inline||o.bind(e.getDoc(),\"mousedown mouseup\",(t=>{let n;if(t.target===e.getDoc().documentElement)if(n=i.getRng(),e.getBody().focus(),\"mousedown\"===t.type){if(Bo(n.startContainer))return;i.placeCaretAt(t.clientX,t.clientY)}else i.setRng(n)}))},v=()=>{Range.prototype.getClientRects||e.on(\"mousedown\",(t=>{if(!m(t)&&\"HTML\"===t.target.nodeName){const t=e.getBody();t.blur(),nf.setEditorTimeout(e,(()=>{t.focus()}))}}))},y=()=>{const t=dc(e);e.on(\"click\",(n=>{const r=n.target;/^(IMG|HR)$/.test(r.nodeName)&&\"false\"!==o.getContentEditableParent(r)&&(n.preventDefault(),e.selection.select(r),e.nodeChanged()),\"A\"===r.nodeName&&o.hasClass(r,t)&&0===r.childNodes.length&&(n.preventDefault(),i.select(r))}))},b=()=>{e.on(\"keydown\",(e=>{if(!m(e)&&e.keyCode===n&&i.isCollapsed()&&0===i.getRng().startOffset){const t=i.getNode().previousSibling;if(t&&t.nodeName&&\"table\"===t.nodeName.toLowerCase())return e.preventDefault(),!1}return!0}))},_=()=>{const t=()=>{h(\"StyleWithCSS\",!1),h(\"enableInlineTableEditing\",!1),$l(e)||h(\"enableObjectResizing\",!1)};oc(e)||e.on(\"BeforeExecCommand mousedown\",t)},w=()=>{e.on(\"SetContent ExecCommand\",(e=>{\"setcontent\"!==e.type&&\"mceInsertLink\"!==e.command||t(o.select(\"a\"),(e=>{var t;let n=e.parentNode;const r=o.getRoot();if((null==n?void 0:n.lastChild)===e){for(;n&&!o.isBlock(n);){if((null===(t=n.parentNode)||void 0===t?void 0:t.lastChild)!==n||n===r)return;n=n.parentNode}o.add(n,\"br\",{\"data-mce-bogus\":1})}}))}))},x=()=>{e.contentStyles.push(\"img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}\")},C=()=>{e.inline||e.on(\"keydown\",(()=>{document.activeElement===document.body&&e.getWin().focus()}))},k=()=>{e.inline||(e.contentStyles.push(\"body {min-height: 150px}\"),e.on(\"click\",(t=>{let n;\"HTML\"===t.target.nodeName&&(n=e.selection.getRng(),e.getBody().focus(),e.selection.setRng(n),e.selection.normalize(),e.nodeChanged())})))},D=()=>{d&&e.on(\"keydown\",(t=>{if(Yh.metaKeyPressed(t)&&!t.shiftKey&&(37===t.keyCode||39===t.keyCode)){t.preventDefault();e.selection.getSel().modify(\"move\",37===t.keyCode?\"backward\":\"forward\",\"lineboundary\")}}))},A=()=>{e.on(\"click\",(e=>{let t=e.target;do{if(\"A\"===t.tagName)return void e.preventDefault()}while(t=t.parentNode)})),e.contentStyles.push(\".mce-content-body {-webkit-touch-callout: none}\")},M=()=>{e.on(\"init\",(()=>{e.dom.bind(e.getBody(),\"submit\",(e=>{e.preventDefault()}))}))},L=S,E=()=>{e.on(\"keydown\",(t=>{if(m(t)||t.keyCode!==Yh.BACKSPACE)return;let n=i.getRng();const r=n.startContainer,s=n.startOffset,a=o.getRoot();let l=r;if(n.collapsed&&0===s){for(;l.parentNode&&l.parentNode.firstChild===l&&l.parentNode!==a;)l=l.parentNode;\"BLOCKQUOTE\"===l.nodeName&&(e.formatter.toggle(\"blockquote\",void 0,l),n=o.createRng(),n.setStart(r,0),n.setEnd(r,0),i.setRng(n))}})),f(),Mt.windowsPhone||e.on(\"keyup focusin mouseup\",(t=>{Yh.modifierPressed(t)||(e=>{const t=e.getBody(),n=e.selection.getRng();return n.startContainer===n.endContainer&&n.startContainer===t&&0===n.startOffset&&n.endOffset===t.childNodes.length})(e)||i.normalize()}),!0),c&&(g(),y(),e.on(\"init\",(()=>{h(\"DefaultParagraphSeparator\",cl(e))})),M(),b(),s.addNodeFilter(\"br\",(e=>{let t=e.length;for(;t--;)\"Apple-interchange-newline\"===e[t].attr(\"class\")&&e[t].remove()})),u?(C(),k(),A()):p()),l&&(e.on(\"keydown\",(t=>{if(!m(t)&&t.keyCode===n){if(!e.getBody().getElementsByTagName(\"hr\").length)return;if(i.isCollapsed()&&0===i.getRng().startOffset){const e=i.getNode(),n=e.previousSibling;if(\"HR\"===e.nodeName)return o.remove(e),void t.preventDefault();n&&n.nodeName&&\"hr\"===n.nodeName.toLowerCase()&&(o.remove(n),t.preventDefault())}}})),v(),(()=>{const n=()=>{const n=o.getAttribs(i.getStart().cloneNode(!1));return()=>{const r=i.getStart();r!==e.getBody()&&(o.setAttrib(r,\"style\",null),t(n,(e=>{r.setAttributeNode(e.cloneNode(!0))})))}},r=()=>!i.isCollapsed()&&o.getParent(i.getStart(),o.isBlock)!==o.getParent(i.getEnd(),o.isBlock);e.on(\"keypress\",(t=>{let o;return!(!(m(t)||8!==t.keyCode&&46!==t.keyCode)&&r()&&(o=n(),e.getDoc().execCommand(\"delete\",!1),o(),t.preventDefault(),1))})),o.bind(e.getDoc(),\"cut\",(t=>{if(!m(t)&&r()){const t=n();nf.setEditorTimeout(e,(()=>{t()}))}}))})(),_(),w(),x(),D(),b())};return J_(e)?(c&&(g(),y(),M(),p(),u&&(C(),k(),A())),l&&(v(),_(),x(),D())):E(),{refreshContentEditable:L,isHidden:()=>{if(!l||e.removed)return!1;const t=e.selection.getSel();return!t||!t.rangeCount||0===t.rangeCount}}},JE=ls.DOM,QE=e=>e.inline?e.getElement().nodeName.toLowerCase():void 0,ZE=e=>_e(e,(e=>!1===_(e))),eT=e=>{const t=e.options.get,n=e.editorUpload.blobCache;return ZE({allow_conditional_comments:t(\"allow_conditional_comments\"),allow_html_data_urls:t(\"allow_html_data_urls\"),allow_svg_data_urls:t(\"allow_svg_data_urls\"),allow_html_in_named_anchor:t(\"allow_html_in_named_anchor\"),allow_script_urls:t(\"allow_script_urls\"),allow_unsafe_link_target:t(\"allow_unsafe_link_target\"),convert_fonts_to_spans:t(\"convert_fonts_to_spans\"),fix_list_elements:t(\"fix_list_elements\"),font_size_legacy_values:t(\"font_size_legacy_values\"),forced_root_block:t(\"forced_root_block\"),forced_root_block_attrs:t(\"forced_root_block_attrs\"),preserve_cdata:t(\"preserve_cdata\"),remove_trailing_brs:t(\"remove_trailing_brs\"),inline_styles:t(\"inline_styles\"),root_name:QE(e),validate:!0,blob_cache:n,document:e.getDoc()})},tT=e=>{const t=e.options.get;return ZE({custom_elements:t(\"custom_elements\"),extended_valid_elements:t(\"extended_valid_elements\"),invalid_elements:t(\"invalid_elements\"),invalid_styles:t(\"invalid_styles\"),schema:t(\"schema\"),valid_children:t(\"valid_children\"),valid_classes:t(\"valid_classes\"),valid_elements:t(\"valid_elements\"),valid_styles:t(\"valid_styles\"),verify_html:t(\"verify_html\"),padd_empty_block_inline_children:t(\"format_empty_lines\")})},nT=e=>{e.bindPendingEventDelegates(),e.initialized=!0,(e=>{e.dispatch(\"Init\")})(e),e.focus(!0),(e=>{const t=e.dom.getRoot();e.inline||Rd(e)&&e.selection.getStart(!0)!==t||Ju(t).each((t=>{const n=t.getNode(),r=Cr(n)?Ju(n).getOr(t):t;e.selection.setRng(r.toRange())}))})(e),e.nodeChanged({initial:!0});const t=fc(e);C(t)&&t.call(e,e),(e=>{const t=gc(e);t&&nf.setEditorTimeout(e,(()=>{let n;n=!0===t?e:e.editorManager.get(t),n&&!n.destroyed&&(n.focus(),n.selection.scrollIntoView())}),100)})(e)},rT=e=>e.inline?e.ui.styleSheetLoader:e.dom.styleSheetLoader,oT=e=>{const t=rT(e),n=Ol(e),r=e.contentCSS,o=()=>{t.unloadAll(r),e.inline||e.ui.styleSheetLoader.unloadAll(n)},i=()=>{e.removed?o():e.on(\"remove\",o)};if(e.contentStyles.length>0){let t=\"\";Ft.each(e.contentStyles,(e=>{t+=e+\"\\r\\n\"})),e.dom.addStyle(t)}const s=Promise.all(((e,t,n)=>{const r=[rT(e).loadAll(t)];return e.inline?r:r.concat([e.ui.styleSheetLoader.loadAll(n)])})(e,r,n)).then(i).catch(i),a=Fl(e);return a&&((e,t)=>{const n=dn.fromDom(e.getBody()),r=Bn(On(n)),o=dn.fromTag(\"style\");Ut(o,\"type\",\"text/css\"),Xn(o,dn.fromText(t)),Xn(r,o),e.on(\"remove\",(()=>{Zn(o)}))})(e,a),s},iT=e=>{!0!==e.removed&&((e=>{J_(e)||e.load({initial:!0,format:\"html\"}),e.startContent=e.getContent({format:\"raw\"})})(e),nT(e))},sT=e=>{const t=e.getElement();let n=e.getDoc();e.inline&&(JE.addClass(t,\"mce-content-body\"),e.contentDocument=n=document,e.contentWindow=window,e.bodyElement=t,e.contentAreaContainer=t);const r=e.getBody();r.disabled=!0,e.readonly=oc(e),e.readonly||(e.inline&&\"static\"===JE.getStyle(r,\"position\",!0)&&(r.style.position=\"relative\"),r.contentEditable=\"true\"),r.disabled=!1,e.editorUpload=tx(e),e.schema=Hi(tT(e)),e.dom=ls(n,{keep_values:!0,url_converter:e.convertURL,url_converter_scope:e,update_styles:!0,root_element:e.inline?e.getBody():null,collect:e.inline,schema:e.schema,contentCssCors:Dl(e),referrerPolicy:Sl(e),onSetAttrib:t=>{e.dispatch(\"SetAttrib\",t)}}),e.parser=(e=>{const t=h_(eT(e),e.schema);return t.addAttributeFilter(\"src,href,style,tabindex\",((t,n)=>{const r=e.dom,o=\"data-mce-\"+n;let i=t.length;for(;i--;){const s=t[i];let a=s.attr(n);if(a&&!s.attr(o)){if(0===a.indexOf(\"data:\")||0===a.indexOf(\"blob:\"))continue;\"style\"===n?(a=r.serializeStyle(r.parseStyle(a),s.name),a.length||(a=null),s.attr(o,a),s.attr(n,a)):\"tabindex\"===n?(s.attr(o,a),s.attr(n,null)):s.attr(o,e.convertURL(a,n,s.name))}}})),t.addNodeFilter(\"script\",(e=>{let t=e.length;for(;t--;){const n=e[t],r=n.attr(\"type\")||\"no/type\";0!==r.indexOf(\"mce-\")&&n.attr(\"type\",\"mce-\"+r)}})),Rc(e)&&t.addNodeFilter(\"#cdata\",(t=>{var n;let r=t.length;for(;r--;){const o=t[r];o.type=8,o.name=\"#comment\",o.value=\"[CDATA[\"+e.dom.encode(null!==(n=o.value)&&void 0!==n?n:\"\")+\"]]\"}})),t.addNodeFilter(\"p,h1,h2,h3,h4,h5,h6,div\",(t=>{let n=t.length;const r=e.schema.getNonEmptyElements();for(;n--;){const e=t[n];e.isEmpty(r)&&0===e.getAll(\"br\").length&&e.append(new Bf(\"br\",1))}})),t})(e),e.serializer=fw((e=>{const t=e.options.get;return{...eT(e),...tT(e),...ZE({url_converter:t(\"url_converter\"),url_converter_scope:t(\"url_converter_scope\"),element_format:t(\"element_format\"),entities:t(\"entities\"),entity_encoding:t(\"entity_encoding\"),indent:t(\"indent\"),indent_after:t(\"indent_after\"),indent_before:t(\"indent_before\")})}})(e),e),e.selection=cw(e.dom,e.getWin(),e.serializer,e),e.annotator=Lh(e),e.formatter=mx(e),e.undoManager=px(e),e._nodeChangeDispatcher=new VM(e),e._selectionOverrides=xE(e),Vk(e),PL(e),tD(e),J_(e)||((e=>{e.on(\"mousedown\",(t=>{t.detail>=3&&(t.preventDefault(),qL(e))}))})(e),(e=>{KE(e)})(e));const o=UM(e);zk(e,o),(e=>{e.on(\"NodeChange\",F(Jk,e))})(e),_x(e),YL(e);const i=Q_(e);(e=>{const t=e.getDoc(),n=e.getBody();(e=>{e.dispatch(\"PreInit\")})(e),vc(e)||(t.body.spellcheck=!1,JE.setAttrib(n,\"spellcheck\",\"false\")),e.quirks=XE(e),(e=>{e.dispatch(\"PostRender\")})(e);const r=Bl(e);void 0!==r&&(n.dir=r);const o=yc(e);o&&e.on(\"BeforeSetContent\",(e=>{Ft.each(o,(t=>{e.content=e.content.replace(t,(e=>\"\\x3c!--mce:protected \"+escape(e)+\"--\\x3e\"))}))})),e.on(\"SetContent\",(()=>{e.addVisual(e.getBody())})),e.on(\"compositionstart compositionend\",(t=>{e.composing=\"compositionstart\"===t.type}))})(e),i.fold((()=>{oT(e).then((()=>iT(e)))}),(t=>{e.setProgressState(!0),oT(e).then((()=>{t().then((t=>{e.setProgressState(!1),iT(e),tw(e)}),(t=>{e.notificationManager.open({type:\"error\",text:String(t)}),iT(e),tw(e)}))}))}))},aT=(e,t)=>{if(e.inline||(e.getElement().style.visibility=e.orgVisibility),t||e.inline)sT(e);else{const t=e.iframeElement,r=(n=dn.fromDom(t),or(n,\"load\",qw,(()=>{r.unbind(),e.contentDocument=t.contentDocument,sT(e)})));if(Mt.browser.isFirefox()){const t=e.getDoc();t.open(),t.write(e.iframeHTML),t.close()}else t.srcdoc=e.iframeHTML}var n},lT=ls.DOM,cT=(e,t)=>{const n=e.translate(\"Rich Text Area\"),r=Gt(dn.fromDom(e.getElement()),\"tabindex\").bind(Xe),o=((e,t,n,r)=>{const o=dn.fromTag(\"iframe\");return r.each((e=>Ut(o,\"tabindex\",e))),Vt(o,n),Vt(o,{id:e+\"_ifr\",frameBorder:\"0\",allowTransparency:\"true\",title:t}),rn(o,\"tox-edit-area__iframe\"),o})(e.id,n,nl(e),r).dom;o.onload=()=>{o.onload=null,e.dispatch(\"load\")},e.contentAreaContainer=t.iframeContainer,e.iframeElement=o,e.iframeHTML=(e=>{let t=rl(e)+\"<html><head>\";ol(e)!==e.documentBaseUrl&&(t+='<base href=\"'+e.documentBaseURI.getURI()+'\" />'),t+='<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />';const n=il(e),r=sl(e),o=e.translate(hc(e));return al(e)&&(t+='<meta http-equiv=\"Content-Security-Policy\" content=\"'+al(e)+'\" />'),t+=`</head><body id=\"${n}\" class=\"mce-content-body ${r}\" data-id=\"${e.id}\" aria-label=\"${o}\"><br></body></html>`,t})(e),lT.add(t.iframeContainer,o)},uT=ls.DOM,dT=(e,t,n)=>{const r=Nw.get(n),o=Nw.urls[n]||e.documentBaseUrl.replace(/\\/$/,\"\");if(n=Ft.trim(n),r&&-1===Ft.inArray(t,n)){if(e.plugins[n])return;try{const i=r(e,o)||{};e.plugins[n]=i,C(i.init)&&(i.init(e,o),t.push(n))}catch(t){((e,t,n)=>{const r=ps.translate([\"Failed to initialize plugin: {0}\",t]);Fh(e,\"PluginLoadError\",{message:r}),zw(r,n),Hw(e,r)})(e,n,t)}}},hT=(e,t)=>({editorContainer:e,iframeContainer:t,api:{}}),mT=e=>{const t=e.getElement();return e.inline?hT(null):(e=>{const t=uT.create(\"div\");return uT.insertAfter(t,e),hT(t,t)})(t)},fT=e=>{const t=e.getElement();return e.orgDisplay=t.style.display,f(Hl(e))?(e=>{const t=e.theme.renderUI;return t?t():mT(e)})(e):C(Hl(e))?(e=>{const t=e.getElement(),n=Hl(e)(e,t);return n.editorContainer.nodeType&&(n.editorContainer.id=n.editorContainer.id||e.id+\"_parent\"),n.iframeContainer&&n.iframeContainer.nodeType&&(n.iframeContainer.id=n.iframeContainer.id||e.id+\"_iframecontainer\"),n.height=n.iframeHeight?n.iframeHeight:t.offsetHeight,n})(e):mT(e)},pT=e=>{e.dispatch(\"ScriptsLoaded\"),(e=>{const t=Ft.trim(bl(e)),n=e.ui.registry.getAll().icons,r={...Sw.get(\"default\").icons,...Sw.get(t).icons};pe(r,((t,r)=>{ke(n,r)||e.ui.registry.addIcon(r,t)}))})(e),(e=>{const t=Hl(e);if(f(t)){const n=Yw.get(t);e.theme=n(e,Yw.urls[t])||{},C(e.theme.init)&&e.theme.init(e,Yw.urls[t]||e.documentBaseUrl.replace(/\\/$/,\"\"))}else e.theme={}})(e),(e=>{const t=Wl(e),n=Aw.get(t);e.model=n(e,Aw.urls[t])})(e),(e=>{const t=[];V(sc(e),(n=>{dT(e,t,(e=>e.replace(/^\\-/,\"\"))(n))}))})(e);const t=fT(e);((e,t)=>{const n={show:Y.from(t.show).getOr(S),hide:Y.from(t.hide).getOr(S),isEnabled:Y.from(t.isEnabled).getOr(N),setEnabled:n=>{e.mode.isReadOnly()||Y.from(t.setEnabled).each((e=>e(n)))}};e.ui={...e.ui,...n}})(e,Y.from(t.api).getOr({})),e.editorContainer=t.editorContainer,Vw(e),e.inline?aT(e):((e,t)=>{cT(e,t),t.editorContainer&&(t.editorContainer.style.display=e.orgDisplay,e.hidden=lT.isHidden(t.editorContainer)),e.getElement().style.display=\"none\",lT.setAttrib(e.id,\"aria-hidden\",\"true\"),aT(e)})(e,{editorContainer:t.editorContainer,iframeContainer:t.iframeContainer})},gT=ls.DOM,vT=e=>\"-\"===e.charAt(0),yT=(e,t)=>{const n=Al(t),r=Ml(t);if(!ps.hasCode(n)&&\"en\"!==n){const o=Ge(r)?r:`${t.editorManager.baseURL}/langs/${n}.js`;e.add(o).catch((()=>{((e,t,n)=>{jw(e,\"LanguageLoadError\",Ww(\"language\",t,n))})(t,o,n)}))}},bT=(e,t)=>{const n=Hl(e);if(f(n)&&!vT(n)&&!ke(Yw.urls,n)){const r=jl(e),o=r?e.documentBaseURI.toAbsolute(r):`themes/${n}/theme${t}.js`;Yw.load(n,o).catch((()=>{((e,t,n)=>{jw(e,\"ThemeLoadError\",Ww(\"theme\",t,n))})(e,o,n)}))}},_T=(e,t)=>{const n=Wl(e);if(\"plugin\"!==n&&!ke(Aw.urls,n)){const r=zl(e),o=f(r)?e.documentBaseURI.toAbsolute(r):`models/${n}/model${t}.js`;Aw.load(n,o).catch((()=>{((e,t,n)=>{jw(e,\"ModelLoadError\",Ww(\"model\",t,n))})(e,o,n)}))}},wT=(e,t,n)=>Y.from(t).filter((e=>Ge(e)&&!Sw.has(e))).map((t=>({url:`${e.editorManager.baseURL}/icons/${t}/icons${n}.js`,name:Y.some(t)}))),xT=(e,t,n)=>{const r=wT(t,\"default\",n),o=(e=>Y.from(_l(e)).filter(Ge).map((e=>({url:e,name:Y.none()}))))(t).orThunk((()=>wT(t,bl(t),\"\")));V((e=>{const t=[],n=e=>{t.push(e)};for(let t=0;t<e.length;t++)e[t].each(n);return t})([r,o]),(n=>{e.add(n.url).catch((()=>{((e,t,n)=>{jw(e,\"IconsLoadError\",Ww(\"icons\",t,n))})(t,n.url,n.name.getOrUndefined())}))}))},CT=(e,t)=>{const n=(t,n)=>{Nw.load(t,n).catch((()=>{((e,t,n)=>{jw(e,\"PluginLoadError\",Ww(\"plugin\",t,n))})(e,n,t)}))};pe(ac(e),((t,r)=>{n(r,t),e.options.set(\"plugins\",sc(e).concat(r))})),V(sc(e),(e=>{!(e=Ft.trim(e))||Nw.urls[e]||vT(e)||n(e,`plugins/${e}/plugin${t}.js`)}))},kT=(e,t)=>{const n=us.ScriptLoader,r=()=>{!e.removed&&(e=>{const t=Hl(e);return!f(t)||x(Yw.get(t))})(e)&&(e=>{const t=Wl(e);return x(Aw.get(t))})(e)&&pT(e)};bT(e,t),_T(e,t),yT(n,e),xT(n,e,t),CT(e,t),n.loadQueue().then(r,r)},DT=e=>{const t=e.id;ps.setCode(Al(e));const n=()=>{gT.unbind(window,\"ready\",n),e.render()};if(!Qi.Event.domLoaded)return void gT.bind(window,\"ready\",n);if(!e.getElement())return;const r=dn.fromDom(e.getElement()),o=Jt(r);e.on(\"remove\",(()=>{q(r.dom.attributes,(e=>Xt(r,e.name))),Vt(r,o)})),e.ui.styleSheetLoader=((e,t)=>Qr.forElement(e,{contentCssCors:ic(t),referrerPolicy:Sl(t)}))(r,e),Jl(e)?e.inline=!0:(e.orgVisibility=e.getElement().style.visibility,e.getElement().style.visibility=\"hidden\");const i=e.getElement().form||gT.getParent(t,\"form\");i&&(e.formElement=i,Ql(e)&&!Dr(e.getElement())&&(gT.insertAfter(gT.create(\"input\",{type:\"hidden\",name:t}),t),e.hasHiddenInput=!0),e.formEventDelegate=t=>{e.dispatch(t.type,t)},gT.bind(i,\"submit reset\",e.formEventDelegate),e.on(\"reset\",(()=>{e.resetContent()})),!Zl(e)||i.submit.nodeType||i.submit.length||i._mceOldSubmit||(i._mceOldSubmit=i.submit,i.submit=()=>(e.editorManager.triggerSave(),e.setDirty(!1),i._mceOldSubmit(i)))),e.windowManager=Pw(e),e.notificationManager=$w(e),(e=>\"xml\"===e.options.get(\"encoding\"))(e)&&e.on(\"GetContent\",(e=>{e.save&&(e.content=gT.encode(e.content))})),ec(e)&&e.on(\"submit\",(()=>{e.initialized&&e.save()})),tc(e)&&(e._beforeUnload=()=>{!e.initialized||e.destroyed||e.isHidden()||e.save({format:\"raw\",no_events:!0,set_dirty:!1})},e.editorManager.on(\"BeforeUnload\",e._beforeUnload)),e.editorManager.add(e),kT(e,e.suffix)},ST=wt().deviceType,AT=ST.isPhone(),MT=ST.isTablet(),LT=e=>{if(w(e))return[];{const t=v(e)?e:e.split(/[ ,]/),n=U(t,Ue);return K(n,Ge)}},ET=(e,t)=>{const n=((e,t)=>{const n={},r={};return be(e,t,ye(n),ye(r)),{t:n,f:r}})(t,((t,n)=>W(e,n)));return r=n.t,o=n.f,{sections:L(r),options:L(o)};var r,o},TT=(e,t)=>ke(e.sections(),t),FT=(e,t)=>({...{table_grid:!1,object_resizing:!1,resize:!1,toolbar_mode:Ce(e,\"toolbar_mode\").getOr(\"scrolling\"),toolbar_sticky:!1},...t?{menubar:!1}:{}}),OT=(e,t)=>{var n;const r=null!==(n=t.external_plugins)&&void 0!==n?n:{};return e&&e.external_plugins?Ft.extend({},e.external_plugins,r):r},BT=(e,t,n,r)=>{const o=LT(n.forced_plugins),i=LT(r.plugins),s=((e,t)=>TT(e,t)?e.sections()[t]:{})(t,\"mobile\"),a=((e,t,n,r)=>e&&TT(t,\"mobile\")?r:n)(e,t,i,s.plugins?LT(s.plugins):i),l=((e,t)=>[...LT(e),...LT(t)])(o,a);return Ft.extend(r,{forced_plugins:o,plugins:l})},RT=(e,t,n,r,o)=>{var i;const s=e?{mobile:FT(null!==(i=o.mobile)&&void 0!==i?i:{},t)}:{},a=ET([\"mobile\"],$S(s,o)),l=Ft.extend(n,r,a.options(),((e,t)=>e&&TT(t,\"mobile\"))(e,a)?((e,t,n={})=>{const r=e.sections(),o=Ce(r,t).getOr({});return Ft.extend({},n,o)})(a,\"mobile\"):{},{external_plugins:OT(r,a.options())});return BT(e,a,r,l)},$T=(e,t)=>((e,t)=>ew(e).editor.addVisual(t))(e,t),NT=e=>{const t=t=>()=>{V(\"left,center,right,justify\".split(\",\"),(n=>{t!==n&&e.formatter.remove(\"align\"+n)})),\"none\"!==t&&((t,n)=>{e.formatter.toggle(t,n),e.nodeChanged()})(\"align\"+t)};e.editorCommands.addCommands({JustifyLeft:t(\"left\"),JustifyCenter:t(\"center\"),JustifyRight:t(\"right\"),JustifyFull:t(\"justify\"),JustifyNone:t(\"none\")})},YT=e=>{NT(e),(e=>{const t=t=>()=>{const n=e.selection,r=n.isCollapsed()?[e.dom.getParent(n.getNode(),e.dom.isBlock)]:n.getSelectedBlocks();return z(r,(n=>x(e.formatter.matchNode(n,t))))};e.editorCommands.addCommands({JustifyLeft:t(\"alignleft\"),JustifyCenter:t(\"aligncenter\"),JustifyRight:t(\"alignright\"),JustifyFull:t(\"alignjustify\")},\"state\")})(e)},PT=(e,t)=>{const n=e.selection,r=e.dom;return/^ | $/.test(t)?((e,t,n)=>{const r=dn.fromDom(e.getRoot());return n=Bp(r,ga.fromRangeStart(t))?n.replace(/^ /,\"&nbsp;\"):n.replace(/^&nbsp;/,\" \"),Rp(r,ga.fromRangeEnd(t))?n.replace(/(&nbsp;| )(<br( \\/)>)?$/,\"&nbsp;\"):n.replace(/&nbsp;(<br( \\/)?>)?$/,\" \")})(r,n.getRng(),t):t},IT=(e,t)=>{const{content:n,details:r}=(e=>{if(\"string\"!=typeof e){const t=Ft.extend({paste:e.paste,data:{paste:e.paste}},e);return{content:e.content,details:t}}return{content:e,details:{}}})(t);g_(e,{...r,content:PT(e,n),format:\"html\",set:!1,selection:!0}).each((t=>{const n=((e,t,n)=>Z_(e).editor.insertContent(t,n))(e,t.content,r);v_(e,n,t),e.addVisual()}))},HT={\"font-size\":\"size\",\"font-family\":\"face\"},jT=Wt(\"font\"),WT=(e,t,n)=>Dv(dn.fromDom(n),(t=>(t=>zn(t,e).orThunk((()=>jT(t)?Ce(HT,e).bind((e=>Gt(t,e))):Y.none())))(t)),(e=>pn(dn.fromDom(t),e))),zT=e=>(t,n)=>Y.from(n).map(dn.fromDom).filter(Pt).bind((n=>WT(e,t,n.dom).or(((e,t)=>Y.from(ls.DOM.getStyle(t,e,!0)))(e,n.dom)))).getOr(\"\"),UT=zT(\"font-size\"),VT=A((e=>e.replace(/[\\'\\\"\\\\]/g,\"\").replace(/,\\s+/g,\",\")),zT(\"font-family\")),qT=e=>Ju(e.getBody()).bind((e=>{const t=e.container();return Y.from(Sr(t)?t.parentNode:t)})),GT=(e,t)=>(e=>Y.from(e.selection.getRng()).bind((t=>{const n=e.getBody();return t.startContainer===n&&0===t.startOffset?Y.none():Y.from(e.selection.getStart(!0))})))(e).orThunk(F(qT,e)).map(dn.fromDom).filter(Pt).bind(t),KT=(e,t)=>GT(e,M(Y.some,t)),XT=(e,t)=>{if(/^[0-9.]+$/.test(t)){const n=parseInt(t,10);if(n>=1&&n<=7){const r=(e=>Ft.explode(e.options.get(\"font_size_style_values\")))(e),o=(e=>Ft.explode(e.options.get(\"font_size_classes\")))(e);return o.length>0?o[n-1]||t:r[n-1]||t}return t}return t},JT=e=>{const t=e.split(/\\s*,\\s*/);return U(t,(e=>-1===e.indexOf(\" \")||je(e,'\"')||je(e,\"'\")?e:`'${e}'`)).join(\",\")},QT=e=>{const t=(t,n)=>{e.formatter.toggle(t,n),e.nodeChanged()};e.editorCommands.addCommands({\"Bold,Italic,Underline,Strikethrough,Superscript,Subscript\":e=>{t(e)},\"ForeColor,HiliteColor\":(e,n,r)=>{t(e,{value:r})},BackColor:(e,n,r)=>{t(\"hilitecolor\",{value:r})},FontName:(t,n,r)=>{((e,t)=>{const n=XT(e,t);e.formatter.toggle(\"fontname\",{value:JT(n)}),e.nodeChanged()})(e,r)},FontSize:(t,n,r)=>{((e,t)=>{e.formatter.toggle(\"fontsize\",{value:XT(e,t)}),e.nodeChanged()})(e,r)},LineHeight:(t,n,r)=>{((e,t)=>{e.formatter.toggle(\"lineheight\",{value:String(t)}),e.nodeChanged()})(e,r)},Lang:(e,n,r)=>{var o;t(e,{value:r.code,customValue:null!==(o=r.customCode)&&void 0!==o?o:null})},RemoveFormat:t=>{e.formatter.remove(t)},mceBlockQuote:()=>{t(\"blockquote\")},FormatBlock:(e,n,r)=>{t(f(r)?r:\"p\")},mceToggleFormat:(e,n,r)=>{t(r)}})},ZT=e=>{const t=t=>e.formatter.match(t);e.editorCommands.addCommands({\"Bold,Italic,Underline,Strikethrough,Superscript,Subscript\":e=>t(e),mceBlockQuote:()=>t(\"blockquote\")},\"state\"),e.editorCommands.addQueryValueHandler(\"FontName\",(()=>(e=>KT(e,(t=>VT(e.getBody(),t.dom))).getOr(\"\"))(e))),e.editorCommands.addQueryValueHandler(\"FontSize\",(()=>(e=>KT(e,(t=>UT(e.getBody(),t.dom))).getOr(\"\"))(e))),e.editorCommands.addQueryValueHandler(\"LineHeight\",(()=>(e=>KT(e,(t=>{const n=dn.fromDom(e.getBody()),r=Dv(t,(e=>zn(e,\"line-height\")),F(pn,n));return r.getOrThunk((()=>{const e=parseFloat(jn(t,\"line-height\")),n=parseFloat(jn(t,\"font-size\"));return String(e/n)}))})).getOr(\"\"))(e)))},eF=e=>{e.editorCommands.addCommands({Indent:()=>{(e=>{Pk(e,\"indent\")})(e)},Outdent:()=>{Ik(e)}}),e.editorCommands.addCommands({Outdent:()=>$k(e)},\"state\")},tF=e=>{YT(e),(e=>{e.editorCommands.addCommands({\"Cut,Copy,Paste\":t=>{const n=e.getDoc();let r;try{n.execCommand(t)}catch(e){r=!0}if(\"paste\"!==t||n.queryCommandEnabled(t)||(r=!0),r||!n.queryCommandSupported(t)){let t=e.translate(\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.\");(Mt.os.isMacOS()||Mt.os.isiOS())&&(t=t.replace(/Ctrl\\+/g,\"⌘+\")),e.notificationManager.open({text:t,type:\"error\"})}}})})(e),(e=>{e.editorCommands.addCommands({mceAddUndoLevel:()=>{e.undoManager.add()},mceEndUndoLevel:()=>{e.undoManager.add()},Undo:()=>{e.undoManager.undo()},Redo:()=>{e.undoManager.redo()}})})(e),(e=>{e.editorCommands.addCommands({mceSelectNodeDepth:(t,n,r)=>{let o=0;e.dom.getParent(e.selection.getNode(),(t=>!vr(t)||o++!==r||(e.selection.select(t),!1)),e.getBody())},mceSelectNode:(t,n,r)=>{e.selection.select(r)},selectAll:()=>{const t=e.dom.getParent(e.selection.getStart(),Br);if(t){const n=e.dom.createRng();n.selectNodeContents(t),e.selection.setRng(n)}}})})(e),(e=>{e.editorCommands.addCommands({mceCleanup:()=>{const t=e.selection.getBookmark();e.setContent(e.getContent()),e.selection.moveToBookmark(t)},insertImage:(t,n,r)=>{IT(e,e.dom.createHTML(\"img\",{src:r}))},insertHorizontalRule:()=>{e.execCommand(\"mceInsertContent\",!1,\"<hr>\")},insertText:(t,n,r)=>{IT(e,e.dom.encode(r))},insertHTML:(t,n,r)=>{IT(e,r)},mceInsertContent:(t,n,r)=>{IT(e,r)},mceSetContent:(t,n,r)=>{e.setContent(r)},mceReplaceContent:(t,n,r)=>{e.execCommand(\"mceInsertContent\",!1,r.replace(/\\{\\$selection\\}/g,e.selection.getContent({format:\"text\"})))},mceNewDocument:()=>{e.setContent(\"\")}})})(e),(e=>{const t=(t,n,r)=>{const o=f(r)?{href:r}:r,i=e.dom.getParent(e.selection.getNode(),\"a\");p(o)&&f(o.href)&&(o.href=o.href.replace(/ /g,\"%20\"),i&&o.href||e.formatter.remove(\"link\"),o.href&&e.formatter.apply(\"link\",o,i))};e.editorCommands.addCommands({unlink:()=>{if(e.selection.isCollapsed()){const t=e.dom.getParent(e.selection.getStart(),\"a\");t&&e.dom.remove(t,!0)}else e.formatter.remove(\"link\")},mceInsertLink:t,createLink:t})})(e),eF(e),(e=>{e.editorCommands.addCommands({insertParagraph:()=>{AM(iM,e)},mceInsertNewLine:(t,n,r)=>{MM(e,r)},InsertLineBreak:(t,n,r)=>{AM(fM,e)}})})(e),(e=>{(e=>{e.editorCommands.addCommands({\"InsertUnorderedList,InsertOrderedList\":t=>{e.getDoc().execCommand(t);const n=e.dom.getParent(e.selection.getNode(),\"ol,ul\");if(n){const t=n.parentNode;if(t&&/^(H[1-6]|P|ADDRESS|PRE)$/.test(t.nodeName)){const r=e.selection.getBookmark();e.dom.split(t,n),e.selection.moveToBookmark(r)}}}})})(e),(e=>{e.editorCommands.addCommands({\"InsertUnorderedList,InsertOrderedList\":t=>{const n=e.dom.getParent(e.selection.getNode(),\"ul,ol\");return n&&(\"insertunorderedlist\"===t&&\"UL\"===n.tagName||\"insertorderedlist\"===t&&\"OL\"===n.tagName)}},\"state\")})(e)})(e),(e=>{QT(e),ZT(e)})(e),(e=>{e.editorCommands.addCommands({mceRemoveNode:(t,n,r)=>{const o=null!=r?r:e.selection.getNode();if(o!==e.getBody()){const t=e.selection.getBookmark();e.dom.remove(o,!0),e.selection.moveToBookmark(t)}},mcePrint:()=>{e.getWin().print()},mceFocus:(t,n,r)=>{vf(e,!0===r)},mceToggleVisualAid:()=>{e.hasVisual=!e.hasVisual,e.addVisual()}})})(e)};class nF{constructor(e){this.commands={state:{},exec:{},value:{}},this.editor=e}execCommand(e,t=!1,n,r){const o=this.editor,i=e.toLowerCase(),s=null==r?void 0:r.skip_focus;if(o.removed)return!1;\"mcefocus\"!==i&&(/^(mceAddUndoLevel|mceEndUndoLevel)$/i.test(i)||s?(e=>{ef(e).each((t=>e.selection.setRng(t)))})(o):o.focus());if(o.dispatch(\"BeforeExecCommand\",{command:e,ui:t,value:n}).isDefaultPrevented())return!1;const a=this.commands.exec[i];return!!C(a)&&(a(i,t,n),o.dispatch(\"ExecCommand\",{command:e,ui:t,value:n}),!0)}queryCommandState(e){if(this.editor.quirks.isHidden()||this.editor.removed)return!1;const t=e.toLowerCase(),n=this.commands.state[t];return!!C(n)&&n(t)}queryCommandValue(e){if(this.editor.quirks.isHidden()||this.editor.removed)return\"\";const t=e.toLowerCase(),n=this.commands.value[t];return C(n)?n(t):\"\"}addCommands(e,t=\"exec\"){const n=this.commands;pe(e,((e,r)=>{V(r.toLowerCase().split(\",\"),(r=>{n[t][r]=e}))}))}addCommand(e,t,n){const r=e.toLowerCase();this.commands.exec[r]=(e,r,o)=>t.call(null!=n?n:this.editor,r,o)}queryCommandSupported(e){const t=e.toLowerCase();return!!this.commands.exec[t]}addQueryStateHandler(e,t,n){this.commands.state[e.toLowerCase()]=()=>t.call(null!=n?n:this.editor)}addQueryValueHandler(e,t,n){this.commands.value[e.toLowerCase()]=()=>t.call(null!=n?n:this.editor)}}const rF=\"data-mce-contenteditable\",oF=(e,t,n)=>{try{e.getDoc().execCommand(t,!1,String(n))}catch(e){}},iF=(e,t)=>{e.dom.contentEditable=t?\"true\":\"false\"},sF=(e,t)=>{const n=dn.fromDom(e.getBody());((e,t,n)=>{ln(e,t)&&!n?sn(e,t):n&&rn(e,t)})(n,\"mce-content-readonly\",t),t?(e.selection.controlSelection.hideResizeRect(),e._selectionOverrides.hideFakeCaret(),(e=>{Y.from(e.selection.getNode()).each((e=>{e.removeAttribute(\"data-mce-selected\")}))})(e),e.readonly=!0,iF(n,!1),V(bo(n,'*[contenteditable=\"true\"]'),(e=>{Ut(e,rF,\"true\"),iF(e,!1)}))):(e.readonly=!1,iF(n,!0),(e=>{V(bo(e,'*[data-mce-contenteditable=\"true\"]'),(e=>{Xt(e,rF),iF(e,!0)}))})(n),oF(e,\"StyleWithCSS\",!1),oF(e,\"enableInlineTableEditing\",!1),oF(e,\"enableObjectResizing\",!1),pf(e)&&e.focus(),(e=>{e.selection.setRng(e.selection.getRng())})(e),e.nodeChanged())},aF=e=>e.readonly,lF=e=>{e.parser.addAttributeFilter(\"contenteditable\",(t=>{aF(e)&&V(t,(e=>{e.attr(rF,e.attr(\"contenteditable\")),e.attr(\"contenteditable\",\"false\")}))})),e.serializer.addAttributeFilter(rF,(t=>{aF(e)&&V(t,(e=>{e.attr(\"contenteditable\",e.attr(rF))}))})),e.serializer.addTempAttr(rF)},cF=[\"copy\"],uF=(e,t)=>{if((e=>\"click\"===e.type)(t)&&!Yh.metaKeyPressed(t)){const n=dn.fromDom(t.target);((e,t)=>Xr(t,\"a\",(t=>pn(t,dn.fromDom(e.getBody())))).bind((e=>Gt(e,\"href\"))))(e,n).each((n=>{if(t.preventDefault(),/^#/.test(n)){const t=e.dom.select(`${n},[name=\"${r=n,o=\"#\",je(r,o)?((e,t)=>e.substring(t))(r,o.length):r}\"]`);t.length&&e.selection.scrollIntoView(t[0],!0)}else window.open(n,\"_blank\",\"rel=noopener noreferrer,menubar=yes,toolbar=yes,location=yes,status=yes,resizable=yes,scrollbars=yes\");var r,o}))}else(e=>W(cF,e.type))(t)&&e.dispatch(t.type,t)},dF=Ft.makeMap(\"focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel\",\" \");class hF{constructor(e){this.bindings={},this.settings=e||{},this.scope=this.settings.scope||this,this.toggleEvent=this.settings.toggleEvent||$}static isNative(e){return!!dF[e.toLowerCase()]}fire(e,t){return this.dispatch(e,t)}dispatch(e,t){const n=e.toLowerCase(),r=Vi(n,null!=t?t:{},this.scope);this.settings.beforeFire&&this.settings.beforeFire(r);const o=this.bindings[n];if(o)for(let e=0,t=o.length;e<t;e++){const t=o[e];if(!t.removed){if(t.once&&this.off(n,t.func),r.isImmediatePropagationStopped())return r;if(!1===t.func.call(this.scope,r))return r.preventDefault(),r}}return r}on(e,t,n,r){if(!1===t&&(t=$),t){const o={func:t,removed:!1};r&&Ft.extend(o,r);const i=e.toLowerCase().split(\" \");let s=i.length;for(;s--;){const e=i[s];let t=this.bindings[e];t||(t=[],this.toggleEvent(e,!0)),t=n?[o,...t]:[...t,o],this.bindings[e]=t}}return this}off(e,t){if(e){const n=e.toLowerCase().split(\" \");let r=n.length;for(;r--;){const o=n[r];let i=this.bindings[o];if(!o)return pe(this.bindings,((e,t)=>{this.toggleEvent(t,!1),delete this.bindings[t]})),this;if(i){if(t){const e=G(i,(e=>e.func===t));i=e.fail,this.bindings[o]=i,V(e.pass,(e=>{e.removed=!0}))}else i.length=0;i.length||(this.toggleEvent(e,!1),delete this.bindings[o])}}}else pe(this.bindings,((e,t)=>{this.toggleEvent(t,!1)})),this.bindings={};return this}once(e,t,n){return this.on(e,t,n,{once:!0})}has(e){e=e.toLowerCase();const t=this.bindings[e];return!(!t||0===t.length)}}const mF=e=>(e._eventDispatcher||(e._eventDispatcher=new hF({scope:e,toggleEvent:(t,n)=>{hF.isNative(t)&&e.toggleNativeEvent&&e.toggleNativeEvent(t,n)}})),e._eventDispatcher),fF={fire(e,t,n){return this.dispatch(e,t,n)},dispatch(e,t,n){const r=this;if(r.removed&&\"remove\"!==e&&\"detach\"!==e)return Vi(e.toLowerCase(),null!=t?t:{},r);const o=mF(r).dispatch(e,t);if(!1!==n&&r.parent){let t=r.parent();for(;t&&!o.isPropagationStopped();)t.dispatch(e,o,!1),t=t.parent?t.parent():void 0}return o},on(e,t,n){return mF(this).on(e,t,n)},off(e,t){return mF(this).off(e,t)},once(e,t){return mF(this).once(e,t)},hasEventListeners(e){return mF(this).has(e)}},pF=ls.DOM;let gF;const vF=(e,t)=>{if(\"selectionchange\"===t)return e.getDoc();if(!e.inline&&/^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(t))return e.getDoc().documentElement;const n=Pl(e);return n?(e.eventRoot||(e.eventRoot=pF.select(n)[0]),e.eventRoot):e.getBody()},yF=(e,t,n)=>{(e=>!e.hidden&&!aF(e))(e)?e.dispatch(t,n):aF(e)&&uF(e,n)},bF=(e,t)=>{if(e.delegates||(e.delegates={}),e.delegates[t]||e.removed)return;const n=vF(e,t);if(Pl(e)){if(gF||(gF={},e.editorManager.on(\"removeEditor\",(()=>{e.editorManager.activeEditor||gF&&(pe(gF,((t,n)=>{e.dom.unbind(vF(e,n))})),gF=null)}))),gF[t])return;const r=n=>{const r=n.target,o=e.editorManager.get();let i=o.length;for(;i--;){const e=o[i].getBody();(e===r||pF.isChildOf(r,e))&&yF(o[i],t,n)}};gF[t]=r,pF.bind(n,t,r)}else{const r=n=>{yF(e,t,n)};pF.bind(n,t,r),e.delegates[t]=r}},_F={...fF,bindPendingEventDelegates(){const e=this;Ft.each(e._pendingNativeEvents,(t=>{bF(e,t)}))},toggleNativeEvent(e,t){const n=this;\"focus\"!==e&&\"blur\"!==e&&(n.removed||(t?n.initialized?bF(n,e):n._pendingNativeEvents?n._pendingNativeEvents.push(e):n._pendingNativeEvents=[e]:n.initialized&&n.delegates&&(n.dom.unbind(vF(n,e),e,n.delegates[e]),delete n.delegates[e])))},unbindAllNativeEvents(){const e=this,t=e.getBody(),n=e.dom;e.delegates&&(pe(e.delegates,((t,n)=>{e.dom.unbind(vF(e,n),n,t)})),delete e.delegates),!e.inline&&t&&n&&(t.onload=null,n.unbind(e.getWin()),n.unbind(e.getDoc())),n&&(n.unbind(t),n.unbind(e.getContainer()))}},wF=e=>f(e)?{value:e.split(/[ ,]/),valid:!0}:D(e,f)?{value:e,valid:!0}:{valid:!1,message:\"The value must be a string[] or a comma/space separated string.\"},xF=(e,t)=>e+(Ke(t.message)?\"\":`. ${t.message}`),CF=e=>e.valid,kF=(e,t,n=\"\")=>{const r=t(e);return b(r)?r?{value:e,valid:!0}:{valid:!1,message:n}:r},DF=(e,t)=>{const n={},r={},o=(e,t,n)=>{const o=kF(t,n);return CF(o)?(r[e]=o.value,!0):(console.warn(xF(`Invalid value passed for the ${e} option`,o)),!1)},i=e=>ke(n,e);return{register:(e,i)=>{const s=(e=>f(e.processor))(i)?(e=>{const t=(()=>{switch(e){case\"array\":return v;case\"boolean\":return b;case\"function\":return C;case\"number\":return k;case\"object\":return p;case\"string\":return f;case\"string[]\":return wF;case\"object[]\":return e=>D(e,p);case\"regexp\":return e=>m(e,RegExp);default:return N}})();return n=>kF(n,t,`The value must be a ${e}.`)})(i.processor):i.processor,a=((e,t,n)=>{if(!_(t)){const r=kF(t,n);if(CF(r))return r.value;console.error(xF(`Invalid default value passed for the \"${e}\" option`,r))}})(e,i.default,s);n[e]={...i,default:a,processor:s};Ce(r,e).orThunk((()=>Ce(t,e))).each((t=>o(e,t,s)))},isRegistered:i,get:e=>Ce(r,e).orThunk((()=>Ce(n,e).map((e=>e.default)))).getOrUndefined(),set:(e,t)=>{if(i(e)){const r=n[e];return r.immutable?(console.error(`\"${e}\" is an immutable option and cannot be updated`),!1):o(e,t,r.processor)}return console.warn(`\"${e}\" is not a registered option. Ensure the option has been registered before setting a value.`),!1},unset:e=>{const t=i(e);return t&&delete r[e],t},isSet:e=>ke(r,e)}},SF=[\"design\",\"readonly\"],AF=(e,t,n,r)=>{const o=n[t.get()],i=n[r];try{i.activate()}catch(e){return void console.error(`problem while activating editor mode ${r}:`,e)}o.deactivate(),o.editorReadOnly!==i.editorReadOnly&&sF(e,i.editorReadOnly),t.set(r),((e,t)=>{e.dispatch(\"SwitchMode\",{mode:t})})(e,r)},MF=e=>{const t=ds(\"design\"),n=ds({design:{activate:S,deactivate:S,editorReadOnly:!1},readonly:{activate:S,deactivate:S,editorReadOnly:!0}});return(e=>{e.serializer?lF(e):e.on(\"PreInit\",(()=>{lF(e)}))})(e),(e=>{e.on(\"ShowCaret\",(t=>{aF(e)&&t.preventDefault()})),e.on(\"ObjectSelected\",(t=>{aF(e)&&t.preventDefault()}))})(e),{isReadOnly:()=>aF(e),set:r=>((e,t,n,r)=>{if(r!==n.get()){if(!ke(t,r))throw new Error(`Editor mode '${r}' is invalid`);e.initialized?AF(e,n,t,r):e.on(\"init\",(()=>AF(e,n,t,r)))}})(e,n.get(),t,r),get:()=>t.get(),register:(e,t)=>{n.set(((e,t,n)=>{if(W(SF,t))throw new Error(`Cannot override default mode ${t}`);return{...e,[t]:{...n,deactivate:()=>{try{n.deactivate()}catch(e){console.error(`problem while deactivating editor mode ${t}:`,e)}}}}})(n.get(),e,t))}}},LF=Ft.each,EF=Ft.explode,TF={f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123},FF=Ft.makeMap(\"alt,ctrl,shift,meta,access\"),OF=e=>{const t={},n=Mt.os.isMacOS()||Mt.os.isiOS();LF(EF(e.toLowerCase(),\"+\"),(e=>{(e=>e in FF)(e)?t[e]=!0:/^[0-9]{2,}$/.test(e)?t.keyCode=parseInt(e,10):(t.charCode=e.charCodeAt(0),t.keyCode=TF[e]||e.toUpperCase().charCodeAt(0))}));const r=[t.keyCode];let o;for(o in FF)t[o]?r.push(o):t[o]=!1;return t.id=r.join(\",\"),t.access&&(t.alt=!0,n?t.ctrl=!0:t.shift=!0),t.meta&&(n?t.meta=!0:(t.ctrl=!0,t.meta=!1)),t};class BF{constructor(e){this.shortcuts={},this.pendingPatterns=[],this.editor=e;const t=this;e.on(\"keyup keypress keydown\",(e=>{!t.hasModifier(e)&&!t.isFunctionKey(e)||e.isDefaultPrevented()||(LF(t.shortcuts,(n=>{t.matchShortcut(e,n)&&(t.pendingPatterns=n.subpatterns.slice(0),\"keydown\"===e.type&&t.executeShortcutAction(n))})),t.matchShortcut(e,t.pendingPatterns[0])&&(1===t.pendingPatterns.length&&\"keydown\"===e.type&&t.executeShortcutAction(t.pendingPatterns[0]),t.pendingPatterns.shift()))}))}add(e,t,n,r){const o=this,i=o.normalizeCommandFunc(n);return LF(EF(Ft.trim(e)),(e=>{const n=o.createShortcut(e,t,i,r);o.shortcuts[n.id]=n})),!0}remove(e){const t=this.createShortcut(e);return!!this.shortcuts[t.id]&&(delete this.shortcuts[t.id],!0)}normalizeCommandFunc(e){const t=this,n=e;return\"string\"==typeof n?()=>{t.editor.execCommand(n,!1,null)}:Ft.isArray(n)?()=>{t.editor.execCommand(n[0],n[1],n[2])}:n}createShortcut(e,t,n,r){const o=Ft.map(EF(e,\">\"),OF);return o[o.length-1]=Ft.extend(o[o.length-1],{func:n,scope:r||this.editor}),Ft.extend(o[0],{desc:this.editor.translate(t),subpatterns:o.slice(1)})}hasModifier(e){return e.altKey||e.ctrlKey||e.metaKey}isFunctionKey(e){return\"keydown\"===e.type&&e.keyCode>=112&&e.keyCode<=123}matchShortcut(e,t){return!!t&&(t.ctrl===e.ctrlKey&&t.meta===e.metaKey&&(t.alt===e.altKey&&t.shift===e.shiftKey&&(!!(e.keyCode===t.keyCode||e.charCode&&e.charCode===t.charCode)&&(e.preventDefault(),!0))))}executeShortcutAction(e){return e.func?e.func.call(e.scope):null}}const RF=()=>{const e=(()=>{const e={},t={},n={},r={},o={},i={},s={},a=(e,t)=>(n,r)=>{e[n.toLowerCase()]={...r,type:t}};return{addButton:a(e,\"button\"),addGroupToolbarButton:a(e,\"grouptoolbarbutton\"),addToggleButton:a(e,\"togglebutton\"),addMenuButton:a(e,\"menubutton\"),addSplitButton:a(e,\"splitbutton\"),addMenuItem:a(t,\"menuitem\"),addNestedMenuItem:a(t,\"nestedmenuitem\"),addToggleMenuItem:a(t,\"togglemenuitem\"),addAutocompleter:a(n,\"autocompleter\"),addContextMenu:a(o,\"contextmenu\"),addContextToolbar:a(i,\"contexttoolbar\"),addContextForm:a(i,\"contextform\"),addSidebar:a(s,\"sidebar\"),addIcon:(e,t)=>r[e.toLowerCase()]=t,getAll:()=>({buttons:e,menuItems:t,icons:r,popups:n,contextMenus:o,contextToolbars:i,sidebars:s})}})();return{addAutocompleter:e.addAutocompleter,addButton:e.addButton,addContextForm:e.addContextForm,addContextMenu:e.addContextMenu,addContextToolbar:e.addContextToolbar,addIcon:e.addIcon,addMenuButton:e.addMenuButton,addMenuItem:e.addMenuItem,addNestedMenuItem:e.addNestedMenuItem,addSidebar:e.addSidebar,addSplitButton:e.addSplitButton,addToggleButton:e.addToggleButton,addGroupToolbarButton:e.addGroupToolbarButton,addToggleMenuItem:e.addToggleMenuItem,getAll:e.getAll}},$F=ls.DOM,NF=Ft.extend,YF=Ft.each;class PF{constructor(e,t,n){this.plugins={},this.contentCSS=[],this.contentStyles=[],this.loadedCSS={},this.isNotDirty=!1,this.composing=!1,this.destroyed=!1,this.hasHiddenInput=!1,this.iframeElement=null,this.initialized=!1,this.readonly=!1,this.removed=!1,this.startContent=\"\",this._pendingNativeEvents=[],this._skinLoaded=!1,this.editorManager=n,this.documentBaseUrl=n.documentBaseURL,NF(this,_F);const r=this;this.id=e,this.hidden=!1;const o=((e,t)=>RT(AT||MT,AT,t,e,t))(n.defaultOptions,t);this.options=DF(0,o),(e=>{const t=e.options.register;t(\"id\",{processor:\"string\",default:e.id}),t(\"selector\",{processor:\"string\"}),t(\"target\",{processor:\"object\"}),t(\"suffix\",{processor:\"string\"}),t(\"cache_suffix\",{processor:\"string\"}),t(\"base_url\",{processor:\"string\"}),t(\"referrer_policy\",{processor:\"string\",default:\"\"}),t(\"language_load\",{processor:\"boolean\",default:!0}),t(\"inline\",{processor:\"boolean\",default:!1}),t(\"iframe_attrs\",{processor:\"object\",default:{}}),t(\"doctype\",{processor:\"string\",default:\"<!DOCTYPE html>\"}),t(\"document_base_url\",{processor:\"string\",default:e.documentBaseUrl}),t(\"body_id\",{processor:tl(e,\"tinymce\"),default:\"tinymce\"}),t(\"body_class\",{processor:tl(e),default:\"\"}),t(\"content_security_policy\",{processor:\"string\",default:\"\"}),t(\"br_in_pre\",{processor:\"boolean\",default:!0}),t(\"forced_root_block\",{processor:e=>{const t=f(e)&&Ge(e);return t?{value:e,valid:t}:{valid:!1,message:\"Must be a non-empty string.\"}},default:\"p\"}),t(\"forced_root_block_attrs\",{processor:\"object\",default:{}}),t(\"newline_behavior\",{processor:e=>{const t=W([\"block\",\"linebreak\",\"invert\",\"default\"],e);return t?{value:e,valid:t}:{valid:!1,message:\"Must be one of: block, linebreak, invert or default.\"}},default:\"default\"}),t(\"br_newline_selector\",{processor:\"string\",default:\".mce-toc h2,figcaption,caption\"}),t(\"no_newline_selector\",{processor:\"string\",default:\"\"}),t(\"keep_styles\",{processor:\"boolean\",default:!0}),t(\"end_container_on_empty_block\",{processor:e=>b(e)||f(e)?{valid:!0,value:e}:{valid:!1,message:\"Must be boolean or a string\"},default:\"blockquote\"}),t(\"font_size_style_values\",{processor:\"string\",default:\"xx-small,x-small,small,medium,large,x-large,xx-large\"}),t(\"font_size_legacy_values\",{processor:\"string\",default:\"xx-small,small,medium,large,x-large,xx-large,300%\"}),t(\"font_size_classes\",{processor:\"string\",default:\"\"}),t(\"automatic_uploads\",{processor:\"boolean\",default:!0}),t(\"images_reuse_filename\",{processor:\"boolean\",default:!1}),t(\"images_replace_blob_uris\",{processor:\"boolean\",default:!0}),t(\"icons\",{processor:\"string\",default:\"\"}),t(\"icons_url\",{processor:\"string\",default:\"\"}),t(\"images_upload_url\",{processor:\"string\",default:\"\"}),t(\"images_upload_base_path\",{processor:\"string\",default:\"\"}),t(\"images_upload_credentials\",{processor:\"boolean\",default:!1}),t(\"images_upload_handler\",{processor:\"function\"}),t(\"language\",{processor:\"string\",default:\"en\"}),t(\"language_url\",{processor:\"string\",default:\"\"}),t(\"entity_encoding\",{processor:\"string\",default:\"named\"}),t(\"indent\",{processor:\"boolean\",default:!0}),t(\"indent_before\",{processor:\"string\",default:\"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist\"}),t(\"indent_after\",{processor:\"string\",default:\"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist\"}),t(\"indent_use_margin\",{processor:\"boolean\",default:!1}),t(\"indentation\",{processor:\"string\",default:\"40px\"}),t(\"content_css\",{processor:e=>{const t=!1===e||f(e)||D(e,f);return t?f(e)?{value:U(e.split(\",\"),Ue),valid:t}:v(e)?{value:e,valid:t}:!1===e?{value:[],valid:t}:{value:e,valid:t}:{valid:!1,message:\"Must be false, a string or an array of strings.\"}},default:Jl(e)?[]:[\"default\"]}),t(\"content_style\",{processor:\"string\"}),t(\"content_css_cors\",{processor:\"boolean\",default:!1}),t(\"font_css\",{processor:e=>{const t=f(e)||D(e,f);return t?{value:v(e)?e:U(e.split(\",\"),Ue),valid:t}:{valid:!1,message:\"Must be a string or an array of strings.\"}},default:[]}),t(\"inline_boundaries\",{processor:\"boolean\",default:!0}),t(\"inline_boundaries_selector\",{processor:\"string\",default:\"a[href],code,span.mce-annotation\"}),t(\"object_resizing\",{processor:e=>{const t=b(e)||f(e);return t?!1===e||Ka.isiPhone()||Ka.isiPad()?{value:\"\",valid:t}:{value:!0===e?\"table,img,figure.image,div,video,iframe\":e,valid:t}:{valid:!1,message:\"Must be boolean or a string\"}},default:!Xa}),t(\"resize_img_proportional\",{processor:\"boolean\",default:!0}),t(\"event_root\",{processor:\"object\"}),t(\"service_message\",{processor:\"string\"}),t(\"theme\",{processor:e=>!1===e||f(e)||C(e),default:\"silver\"}),t(\"theme_url\",{processor:\"string\"}),t(\"formats\",{processor:\"object\"}),t(\"format_empty_lines\",{processor:\"boolean\",default:!1}),t(\"format_noneditable_selector\",{processor:\"string\",default:\"\"}),t(\"preview_styles\",{processor:e=>{const t=!1===e||f(e);return t?{value:!1===e?\"\":e,valid:t}:{valid:!1,message:\"Must be false or a string\"}},default:\"font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow\"}),t(\"custom_ui_selector\",{processor:\"string\",default:\"\"}),t(\"hidden_input\",{processor:\"boolean\",default:!0}),t(\"submit_patch\",{processor:\"boolean\",default:!0}),t(\"encoding\",{processor:\"string\"}),t(\"add_form_submit_trigger\",{processor:\"boolean\",default:!0}),t(\"add_unload_trigger\",{processor:\"boolean\",default:!0}),t(\"custom_undo_redo_levels\",{processor:\"number\",default:0}),t(\"disable_nodechange\",{processor:\"boolean\",default:!1}),t(\"readonly\",{processor:\"boolean\",default:!1}),t(\"plugins\",{processor:\"string[]\",default:[]}),t(\"external_plugins\",{processor:\"object\"}),t(\"forced_plugins\",{processor:\"string[]\"}),t(\"model\",{processor:\"string\",default:e.hasPlugin(\"rtc\")?\"plugin\":\"dom\"}),t(\"model_url\",{processor:\"string\"}),t(\"block_unsupported_drop\",{processor:\"boolean\",default:!0}),t(\"visual\",{processor:\"boolean\",default:!0}),t(\"visual_table_class\",{processor:\"string\",default:\"mce-item-table\"}),t(\"visual_anchor_class\",{processor:\"string\",default:\"mce-item-anchor\"}),t(\"iframe_aria_text\",{processor:\"string\",default:\"Rich Text Area. Press ALT-0 for help.\"}),t(\"setup\",{processor:\"function\"}),t(\"init_instance_callback\",{processor:\"function\"}),t(\"url_converter\",{processor:\"function\",default:e.convertURL}),t(\"url_converter_scope\",{processor:\"object\",default:e}),t(\"urlconverter_callback\",{processor:\"function\"}),t(\"allow_conditional_comments\",{processor:\"boolean\",default:!1}),t(\"allow_html_data_urls\",{processor:\"boolean\",default:!1}),t(\"allow_svg_data_urls\",{processor:\"boolean\"}),t(\"allow_html_in_named_anchor\",{processor:\"boolean\",default:!1}),t(\"allow_script_urls\",{processor:\"boolean\",default:!1}),t(\"allow_unsafe_link_target\",{processor:\"boolean\",default:!1}),t(\"convert_fonts_to_spans\",{processor:\"boolean\",default:!0,deprecated:!0}),t(\"fix_list_elements\",{processor:\"boolean\",default:!1}),t(\"preserve_cdata\",{processor:\"boolean\",default:!1}),t(\"remove_trailing_brs\",{processor:\"boolean\"}),t(\"inline_styles\",{processor:\"boolean\",default:!0,deprecated:!0}),t(\"element_format\",{processor:\"string\",default:\"html\"}),t(\"entities\",{processor:\"string\"}),t(\"schema\",{processor:\"string\",default:\"html5\"}),t(\"convert_urls\",{processor:\"boolean\",default:!0}),t(\"relative_urls\",{processor:\"boolean\",default:!0}),t(\"remove_script_host\",{processor:\"boolean\",default:!0}),t(\"custom_elements\",{processor:\"string\"}),t(\"extended_valid_elements\",{processor:\"string\"}),t(\"invalid_elements\",{processor:\"string\"}),t(\"invalid_styles\",{processor:el}),t(\"valid_children\",{processor:\"string\"}),t(\"valid_classes\",{processor:el}),t(\"valid_elements\",{processor:\"string\"}),t(\"valid_styles\",{processor:el}),t(\"verify_html\",{processor:\"boolean\",default:!0}),t(\"auto_focus\",{processor:e=>f(e)||!0===e}),t(\"browser_spellcheck\",{processor:\"boolean\",default:!1}),t(\"protect\",{processor:\"array\"}),t(\"images_file_types\",{processor:\"string\",default:\"jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp\"}),t(\"deprecation_warnings\",{processor:\"boolean\",default:!0}),t(\"a11y_advanced_options\",{processor:\"boolean\",default:!1}),t(\"api_key\",{processor:\"string\"}),t(\"paste_block_drop\",{processor:\"boolean\",default:!1}),t(\"paste_data_images\",{processor:\"boolean\",default:!0}),t(\"paste_preprocess\",{processor:\"function\"}),t(\"paste_postprocess\",{processor:\"function\"}),t(\"paste_webkit_styles\",{processor:\"string\",default:\"none\"}),t(\"paste_remove_styles_if_webkit\",{processor:\"boolean\",default:!0}),t(\"paste_merge_formats\",{processor:\"boolean\",default:!0}),t(\"smart_paste\",{processor:\"boolean\",default:!0}),t(\"paste_as_text\",{processor:\"boolean\",default:!1}),t(\"paste_tab_spaces\",{processor:\"number\",default:4}),t(\"text_patterns\",{processor:e=>D(e,p)||!1===e?{value:Ga(!1===e?[]:e),valid:!0}:{valid:!1,message:\"Must be an array of objects or false.\"},default:[{start:\"*\",end:\"*\",format:\"italic\"},{start:\"**\",end:\"**\",format:\"bold\"},{start:\"#\",format:\"h1\"},{start:\"##\",format:\"h2\"},{start:\"###\",format:\"h3\"},{start:\"####\",format:\"h4\"},{start:\"#####\",format:\"h5\"},{start:\"######\",format:\"h6\"},{start:\"1. \",cmd:\"InsertOrderedList\"},{start:\"* \",cmd:\"InsertUnorderedList\"},{start:\"- \",cmd:\"InsertUnorderedList\"}]}),t(\"text_patterns_lookup\",{processor:e=>{return C(e)?{value:(t=e,e=>{const n=t(e);return Ga(n)}),valid:!0}:{valid:!1,message:\"Must be a single function\"};var t},default:e=>[]}),t(\"noneditable_class\",{processor:\"string\",default:\"mceNonEditable\"}),t(\"editable_class\",{processor:\"string\",default:\"mceEditable\"}),t(\"noneditable_regexp\",{processor:e=>D(e,Qa)?{value:e,valid:!0}:Qa(e)?{value:[e],valid:!0}:{valid:!1,message:\"Must be a RegExp or an array of RegExp.\"},default:[]}),t(\"table_tab_navigation\",{processor:\"boolean\",default:!0}),e.on(\"ScriptsLoaded\",(()=>{t(\"directionality\",{processor:\"string\",default:ps.isRtl()?\"rtl\":void 0}),t(\"placeholder\",{processor:\"string\",default:Ja.getAttrib(e.getElement(),\"placeholder\")})}))})(r);const i=this.options.get;i(\"deprecation_warnings\")&&ww(t,o);const s=i(\"suffix\");s&&(n.suffix=s),this.suffix=n.suffix;const a=i(\"base_url\");a&&n._setBaseUrl(a),this.baseUri=n.baseURI;const l=Sl(r);l&&(us.ScriptLoader._setReferrerPolicy(l),ls.DOM.styleSheetLoader._setReferrerPolicy(l)),gs.languageLoad=i(\"language_load\"),gs.baseURL=n.baseURL,this.setDirty(!1),this.documentBaseURI=new r_(ol(r),{base_uri:this.baseUri}),this.baseURI=this.baseUri,this.inline=Jl(r),this.hasVisual=cc(r),this.shortcuts=new BF(this),this.editorCommands=new nF(this),tF(this);const c=i(\"cache_suffix\");c&&(Mt.cacheSuffix=c.replace(/^[\\?\\&]+/,\"\")),this.ui={registry:RF(),styleSheetLoader:void 0,show:S,hide:S,setEnabled:S,isEnabled:N},this.mode=MF(r),n.dispatch(\"SetupEditor\",{editor:this});const u=mc(r);C(u)&&u.call(r,r)}render(){DT(this)}focus(e){this.execCommand(\"mceFocus\",!1,e)}hasFocus(){return ff(this)}translate(e){return ps.translate(e)}getParam(e,t,n){const r=this.options;return r.isRegistered(e)||(x(n)?r.register(e,{processor:n,default:t}):r.register(e,{processor:N,default:t})),r.isSet(e)||_(t)?r.get(e):t}hasPlugin(e,t){return!!W(sc(this),e)&&(!t||void 0!==Nw.get(e))}nodeChanged(e){this._nodeChangeDispatcher.nodeChanged(e)}addCommand(e,t,n){this.editorCommands.addCommand(e,t,n)}addQueryStateHandler(e,t,n){this.editorCommands.addQueryStateHandler(e,t,n)}addQueryValueHandler(e,t,n){this.editorCommands.addQueryValueHandler(e,t,n)}addShortcut(e,t,n,r){this.shortcuts.add(e,t,n,r)}execCommand(e,t,n,r){return this.editorCommands.execCommand(e,t,n,r)}queryCommandState(e){return this.editorCommands.queryCommandState(e)}queryCommandValue(e){return this.editorCommands.queryCommandValue(e)}queryCommandSupported(e){return this.editorCommands.queryCommandSupported(e)}show(){const e=this;e.hidden&&(e.hidden=!1,e.inline?e.getBody().contentEditable=\"true\":($F.show(e.getContainer()),$F.hide(e.id)),e.load(),e.dispatch(\"show\"))}hide(){const e=this;e.hidden||(e.save(),e.inline?(e.getBody().contentEditable=\"false\",e===e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):($F.hide(e.getContainer()),$F.setStyle(e.id,\"display\",e.orgDisplay)),e.hidden=!0,e.dispatch(\"hide\"))}isHidden(){return this.hidden}setProgressState(e,t){this.dispatch(\"ProgressState\",{state:e,time:t})}load(e={}){const t=this,n=t.getElement();if(t.removed)return\"\";if(n){const r={...e,load:!0},o=Dr(n)?n.value:n.innerHTML,i=t.setContent(o,r);return r.no_events||t.dispatch(\"LoadContent\",{...r,element:n}),i}return\"\"}save(e={}){const t=this;let n=t.getElement();if(!n||!t.initialized||t.removed)return\"\";const r={...e,save:!0,element:n};let o=t.getContent(r);const i={...r,content:o};if(i.no_events||t.dispatch(\"SaveContent\",i),\"raw\"===i.format&&t.dispatch(\"RawSaveContent\",i),o=i.content,Dr(n))n.value=o;else{!e.is_removing&&t.inline||(n.innerHTML=o);const r=$F.getParent(t.id,\"form\");r&&YF(r.elements,(e=>e.name!==t.id||(e.value=o,!1)))}return i.element=r.element=n=null,!1!==i.set_dirty&&t.setDirty(!1),o}setContent(e,t){return gw(this,e,t)}getContent(e){return pw(this,e)}insertContent(e,t){t&&(e=NF({content:e},t)),this.execCommand(\"mceInsertContent\",!1,e)}resetContent(e){void 0===e?gw(this,this.startContent,{format:\"raw\"}):gw(this,e),this.undoManager.reset(),this.setDirty(!1),this.nodeChanged()}isDirty(){return!this.isNotDirty}setDirty(e){const t=!this.isNotDirty;this.isNotDirty=!e,e&&e!==t&&this.dispatch(\"dirty\")}getContainer(){const e=this;return e.container||(e.container=e.editorContainer||$F.get(e.id+\"_parent\")),e.container}getContentAreaContainer(){return this.contentAreaContainer}getElement(){return this.targetElm||(this.targetElm=$F.get(this.id)),this.targetElm}getWin(){const e=this;if(!e.contentWindow){const t=e.iframeElement;t&&(e.contentWindow=t.contentWindow)}return e.contentWindow}getDoc(){const e=this;if(!e.contentDocument){const t=e.getWin();t&&(e.contentDocument=t.document)}return e.contentDocument}getBody(){var e,t;const n=this.getDoc();return null!==(t=null!==(e=this.bodyElement)&&void 0!==e?e:null==n?void 0:n.body)&&void 0!==t?t:null}convertURL(e,t,n){const r=this,o=r.options.get,i=pc(r);return C(i)?i.call(r,e,n,!0,t):!o(\"convert_urls\")||\"link\"===n||p(n)&&\"LINK\"===n.nodeName||0===e.indexOf(\"file:\")||0===e.length?e:o(\"relative_urls\")?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,o(\"remove_script_host\"))}addVisual(e){$T(this,e)}remove(){kw(this)}destroy(e){Dw(this,e)}uploadImages(){return this.editorUpload.uploadImages()}_scanForImages(){return this.editorUpload.scanForImages()}}const IF=ls.DOM,HF=Ft.each;let jF,WF=!1,zF=[];const UF=e=>{const t=e.type;HF(KF.get(),(n=>{switch(t){case\"scroll\":n.dispatch(\"ScrollWindow\",e);break;case\"resize\":n.dispatch(\"ResizeWindow\",e)}}))},VF=e=>{if(e!==WF){const t=ls.DOM;e?(t.bind(window,\"resize\",UF),t.bind(window,\"scroll\",UF)):(t.unbind(window,\"resize\",UF),t.unbind(window,\"scroll\",UF)),WF=e}},qF=e=>{const t=zF;return zF=K(zF,(t=>e!==t)),KF.activeEditor===e&&(KF.activeEditor=zF.length>0?zF[0]:null),KF.focusedEditor===e&&(KF.focusedEditor=null),t.length!==zF.length},GF=\"CSS1Compat\"!==document.compatMode,KF={...fF,baseURI:null,baseURL:null,defaultOptions:{},documentBaseURL:null,suffix:null,majorVersion:\"6\",minorVersion:\"2.0\",releaseDate:\"2022-09-08\",i18n:ps,activeEditor:null,focusedEditor:null,setup(){const e=this;let t=\"\",n=\"\",r=r_.getDocumentBaseUrl(document.location);/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(r)&&(r=r.replace(/[\\?#].*$/,\"\").replace(/[\\/\\\\][^\\/]+$/,\"\"),/[\\/\\\\]$/.test(r)||(r+=\"/\"));const o=window.tinymce||window.tinyMCEPreInit;if(o)t=o.base||o.baseURL,n=o.suffix;else{const e=document.getElementsByTagName(\"script\");for(let r=0;r<e.length;r++){const o=e[r].src||\"\";if(\"\"===o)continue;const i=o.substring(o.lastIndexOf(\"/\"));if(/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(o)){-1!==i.indexOf(\".min\")&&(n=\".min\"),t=o.substring(0,o.lastIndexOf(\"/\"));break}}if(!t&&document.currentScript){const e=document.currentScript.src;-1!==e.indexOf(\".min\")&&(n=\".min\"),t=e.substring(0,e.lastIndexOf(\"/\"))}}var i;e.baseURL=new r_(r).toAbsolute(t),e.documentBaseURL=r,e.baseURI=new r_(e.baseURL),e.suffix=n,(i=e).on(\"AddEditor\",F(lf,i)),i.on(\"RemoveEditor\",F(cf,i))},overrideDefaults(e){const t=e.base_url;t&&this._setBaseUrl(t);const n=e.suffix;n&&(this.suffix=n),this.defaultOptions=e;const r=e.plugin_base_urls;void 0!==r&&pe(r,((e,t)=>{gs.PluginManager.urls[t]=e}))},init(e){const t=this;let n;const r=Ft.makeMap(\"area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu\",\" \");let o=e=>{n=e};const i=()=>{let n=0;const s=[];let a;IF.unbind(window,\"ready\",i),(n=>{const r=e[n];if(r)r.apply(t,[])})(\"onpageload\"),a=((e,t)=>{const n=[],r=C(t)?e=>z(n,(n=>t(n,e))):e=>W(n,e);for(let t=0,o=e.length;t<o;t++){const o=e[t];r(o)||n.push(o)}return n})((e=>Mt.browser.isIE()||Mt.browser.isEdge()?(zw(\"TinyMCE does not support the browser you are using. For a list of supported browsers please see: https://www.tiny.cloud/docs/tinymce/6/support/#supportedwebbrowsers\"),[]):GF?(zw(\"Failed to initialize the editor as the document is not in standards mode. TinyMCE requires standards mode.\"),[]):f(e.selector)?IF.select(e.selector):x(e.target)?[e.target]:[])(e)),Ft.each(a,(e=>{var n;(n=t.get(e.id))&&n.initialized&&!(n.getContainer()||n.getBody()).parentNode&&(qF(n),n.unbindAllNativeEvents(),n.destroy(!0),n.removed=!0)})),a=Ft.grep(a,(e=>!t.get(e.id))),0===a.length?o([]):HF(a,(i=>{((e,t)=>e.inline&&t.tagName.toLowerCase()in r)(e,i)?zw(\"Could not initialize inline editor on invalid inline target element\",i):((e,r,i)=>{const l=new PF(e,r,t);s.push(l),l.on(\"init\",(()=>{++n===a.length&&o(s)})),l.targetElm=l.targetElm||i,l.render()})((e=>{let t=e.id;return t||(t=Ce(e,\"name\").filter((e=>!IF.get(e))).getOrThunk(IF.uniqueId),e.setAttribute(\"id\",t)),t})(i),e,i)}))};return IF.bind(window,\"ready\",i),new Promise((e=>{n?e(n):o=t=>{e(t)}}))},get(e){return 0===arguments.length?zF.slice(0):f(e)?Z(zF,(t=>t.id===e)).getOr(null):k(e)&&zF[e]?zF[e]:null},add(e){const t=this,n=t.get(e.id);return n===e||(null===n&&zF.push(e),VF(!0),t.activeEditor=e,t.dispatch(\"AddEditor\",{editor:e}),jF||(jF=e=>{const n=t.dispatch(\"BeforeUnload\");if(n.returnValue)return e.preventDefault(),e.returnValue=n.returnValue,n.returnValue},window.addEventListener(\"beforeunload\",jF))),e},createEditor(e,t){return this.add(new PF(e,t,this))},remove(e){const t=this;let n;if(e){if(!f(e))return n=e,y(t.get(n.id))?null:(qF(n)&&t.dispatch(\"RemoveEditor\",{editor:n}),0===zF.length&&window.removeEventListener(\"beforeunload\",jF),n.remove(),VF(zF.length>0),n);HF(IF.select(e),(e=>{n=t.get(e.id),n&&t.remove(n)}))}else for(let e=zF.length-1;e>=0;e--)t.remove(zF[e])},execCommand(e,t,n){var r;const o=this,i=p(n)?null!==(r=n.id)&&void 0!==r?r:n.index:n;switch(e){case\"mceAddEditor\":if(!o.get(i)){const e=n.options;new PF(i,e,o).render()}return!0;case\"mceRemoveEditor\":{const e=o.get(i);return e&&e.remove(),!0}case\"mceToggleEditor\":{const e=o.get(i);return e?(e.isHidden()?e.show():e.hide(),!0):(o.execCommand(\"mceAddEditor\",!1,n),!0)}}return!!o.activeEditor&&o.activeEditor.execCommand(e,t,n)},triggerSave:()=>{HF(zF,(e=>{e.save()}))},addI18n:(e,t)=>{ps.add(e,t)},translate:e=>ps.translate(e),setActive(e){const t=this.activeEditor;this.activeEditor!==e&&(t&&t.dispatch(\"deactivate\",{relatedTarget:e}),e.dispatch(\"activate\",{relatedTarget:t})),this.activeEditor=e},_setBaseUrl(e){this.baseURL=new r_(this.documentBaseURL).toAbsolute(e.replace(/\\/+$/,\"\")),this.baseURI=new r_(this.baseURL)}};KF.setup();const XF=(()=>{const e=ys();return{FakeClipboardItem:e=>({items:e,types:me(e),getType:t=>Ce(e,t).getOrUndefined()}),write:t=>{e.set(t)},read:()=>e.get().getOrUndefined(),clear:e.clear}})(),JF=Math.min,QF=Math.max,ZF=Math.round,eO=(e,t,n)=>{let r=t.x,o=t.y;const i=e.w,s=e.h,a=t.w,l=t.h,c=(n||\"\").split(\"\");return\"b\"===c[0]&&(o+=l),\"r\"===c[1]&&(r+=a),\"c\"===c[0]&&(o+=ZF(l/2)),\"c\"===c[1]&&(r+=ZF(a/2)),\"b\"===c[3]&&(o-=s),\"r\"===c[4]&&(r-=i),\"c\"===c[3]&&(o-=ZF(s/2)),\"c\"===c[4]&&(r-=ZF(i/2)),tO(r,o,i,s)},tO=(e,t,n,r)=>({x:e,y:t,w:n,h:r}),nO={inflate:(e,t,n)=>tO(e.x-t,e.y-n,e.w+2*t,e.h+2*n),relativePosition:eO,findBestRelativePosition:(e,t,n,r)=>{for(let o=0;o<r.length;o++){const i=eO(e,t,r[o]);if(i.x>=n.x&&i.x+i.w<=n.w+n.x&&i.y>=n.y&&i.y+i.h<=n.h+n.y)return r[o]}return null},intersect:(e,t)=>{const n=QF(e.x,t.x),r=QF(e.y,t.y),o=JF(e.x+e.w,t.x+t.w),i=JF(e.y+e.h,t.y+t.h);return o-n<0||i-r<0?null:tO(n,r,o-n,i-r)},clamp:(e,t,n)=>{let r=e.x,o=e.y,i=e.x+e.w,s=e.y+e.h;const a=t.x+t.w,l=t.y+t.h,c=QF(0,t.x-r),u=QF(0,t.y-o),d=QF(0,i-a),h=QF(0,s-l);return r+=c,o+=u,n&&(i+=c,s+=u,r-=d,o-=h),i-=d,s-=h,tO(r,o,i-r,s-o)},create:tO,fromClientRect:e=>tO(e.left,e.top,e.width,e.height)},rO=(()=>{const e={},t={};return{load:(n,r)=>{const o=`Script at URL \"${r}\" failed to load`,i=`Script at URL \"${r}\" did not call \\`tinymce.Resource.add('${n}', data)\\` within 1 second`;if(void 0!==e[n])return e[n];{const s=new Promise(((e,s)=>{const a=((e,t,n=1e3)=>{let r=!1,o=null;const i=e=>(...t)=>{r||(r=!0,null!==o&&(clearTimeout(o),o=null),e.apply(null,t))},s=i(e),a=i(t);return{start:(...e)=>{r||null!==o||(o=setTimeout((()=>a.apply(null,e)),n))},resolve:s,reject:a}})(e,s);t[n]=a.resolve,us.ScriptLoader.loadScript(r).then((()=>a.start(i)),(()=>a.reject(o)))}));return e[n]=s,s}},add:(n,r)=>{void 0!==t[n]&&(t[n](r),delete t[n]),e[n]=Promise.resolve(r)},unload:t=>{delete e[t]}}})();let oO;try{const e=\"__storage_test__\";oO=window.localStorage,oO.setItem(e,e),oO.removeItem(e)}catch(e){oO=(()=>{let e={},t=[];const n={getItem:t=>e[t]||null,setItem:(n,r)=>{t.push(n),e[n]=String(r)},key:e=>t[e],removeItem:n=>{t=t.filter((e=>e===n)),delete e[n]},clear:()=>{t=[],e={}},length:0};return Object.defineProperty(n,\"length\",{get:()=>t.length,configurable:!1,enumerable:!1}),n})()}const iO={geom:{Rect:nO},util:{Delay:nf,Tools:Ft,VK:Yh,URI:r_,EventDispatcher:hF,Observable:fF,I18n:ps,LocalStorage:oO,ImageUploader:e=>{const t=Kw(),n=ex(e,t);return{upload:(t,r=!0)=>n.upload(t,r?Zw(e):void 0)}}},dom:{EventUtils:Qi,TreeWalker:Zr,TextSeeker:Is,DOMUtils:ls,ScriptLoader:us,RangeUtils:_m,Serializer:fw,StyleSheetLoader:Jr,ControlSelection:Wh,BookmarkManager:Eh,Selection:cw,Event:Qi.Event},html:{Styles:ji,Entities:Mi,Node:Bf,Schema:Hi,DomParser:h_,Writer:jf,Serializer:Wf},Env:Mt,AddOnManager:gs,Annotator:Lh,Formatter:mx,UndoManager:px,EditorCommands:nF,WindowManager:Pw,NotificationManager:$w,EditorObservable:_F,Shortcuts:BF,Editor:PF,FocusManager:tf,EditorManager:KF,DOM:ls.DOM,ScriptLoader:us.ScriptLoader,PluginManager:Nw,ThemeManager:Yw,ModelManager:Aw,IconManager:Sw,Resource:rO,FakeClipboard:XF,trim:Ft.trim,isArray:Ft.isArray,is:Ft.is,toArray:Ft.toArray,makeMap:Ft.makeMap,each:Ft.each,map:Ft.map,grep:Ft.grep,inArray:Ft.inArray,extend:Ft.extend,walk:Ft.walk,resolve:Ft.resolve,explode:Ft.explode,_addCacheSuffix:Ft._addCacheSuffix},sO=Ft.extend(KF,iO);(e=>{window.tinymce=e,window.tinyMCE=e})(sO),(t=>{try{e.exports=t}catch(e){}})(sO)}()},8901:(e,t,n)=>{var r,o;n.amdD,r=[n(9755)],void 0===(o=function(e){return function(){var t,n,r,o=0,i=\"error\",s=\"info\",a=\"success\",l=\"warning\",c={clear:function(n,r){var o=f();t||u(o),d(n,o,r)||function(n){for(var r=t.children(),o=r.length-1;o>=0;o--)d(e(r[o]),n)}(o)},remove:function(n){var r=f();t||u(r),n&&0===e(\":focus\",n).length?p(n):t.children().length&&t.remove()},error:function(e,t,n){return m({type:i,iconClass:f().iconClasses.error,message:e,optionsOverride:n,title:t})},getContainer:u,info:function(e,t,n){return m({type:s,iconClass:f().iconClasses.info,message:e,optionsOverride:n,title:t})},options:{},subscribe:function(e){n=e},success:function(e,t,n){return m({type:a,iconClass:f().iconClasses.success,message:e,optionsOverride:n,title:t})},version:\"2.1.4\",warning:function(e,t,n){return m({type:l,iconClass:f().iconClasses.warning,message:e,optionsOverride:n,title:t})}};return c;function u(n,r){return n||(n=f()),(t=e(\"#\"+n.containerId)).length||r&&(t=function(n){return(t=e(\"<div/>\").attr(\"id\",n.containerId).addClass(n.positionClass)).appendTo(e(n.target)),t}(n)),t}function d(t,n,r){var o=!(!r||!r.force)&&r.force;return!(!t||!o&&0!==e(\":focus\",t).length||(t[n.hideMethod]({duration:n.hideDuration,easing:n.hideEasing,complete:function(){p(t)}}),0))}function h(e){n&&n(e)}function m(n){var i=f(),s=n.iconClass||i.iconClass;if(void 0!==n.optionsOverride&&(i=e.extend(i,n.optionsOverride),s=n.optionsOverride.iconClass||s),!function(e,t){if(e.preventDuplicates){if(t.message===r)return!0;r=t.message}return!1}(i,n)){o++,t=u(i,!0);var a=null,l=e(\"<div/>\"),c=e(\"<div/>\"),d=e(\"<div/>\"),m=e(\"<div/>\"),g=e(i.closeHtml),v={intervalId:null,hideEta:null,maxHideTime:null},y={toastId:o,state:\"visible\",startTime:new Date,options:i,map:n};return n.iconClass&&l.addClass(i.toastClass).addClass(s),function(){if(n.title){var e=n.title;i.escapeHtml&&(e=b(n.title)),c.append(e).addClass(i.titleClass),l.append(c)}}(),function(){if(n.message){var e=n.message;i.escapeHtml&&(e=b(n.message)),d.append(e).addClass(i.messageClass),l.append(d)}}(),i.closeButton&&(g.addClass(i.closeClass).attr(\"role\",\"button\"),l.prepend(g)),i.progressBar&&(m.addClass(i.progressClass),l.prepend(m)),i.rtl&&l.addClass(\"rtl\"),i.newestOnTop?t.prepend(l):t.append(l),function(){var e=\"\";switch(n.iconClass){case\"toast-success\":case\"toast-info\":e=\"polite\";break;default:e=\"assertive\"}l.attr(\"aria-live\",e)}(),l.hide(),l[i.showMethod]({duration:i.showDuration,easing:i.showEasing,complete:i.onShown}),i.timeOut>0&&(a=setTimeout(_,i.timeOut),v.maxHideTime=parseFloat(i.timeOut),v.hideEta=(new Date).getTime()+v.maxHideTime,i.progressBar&&(v.intervalId=setInterval(C,10))),i.closeOnHover&&l.hover(x,w),!i.onclick&&i.tapToDismiss&&l.click(_),i.closeButton&&g&&g.click((function(e){e.stopPropagation?e.stopPropagation():void 0!==e.cancelBubble&&!0!==e.cancelBubble&&(e.cancelBubble=!0),i.onCloseClick&&i.onCloseClick(e),_(!0)})),i.onclick&&l.click((function(e){i.onclick(e),_()})),h(y),i.debug&&console&&console.log(y),l}function b(e){return null==e&&(e=\"\"),e.replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#39;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")}function _(t){var n=t&&!1!==i.closeMethod?i.closeMethod:i.hideMethod,r=t&&!1!==i.closeDuration?i.closeDuration:i.hideDuration,o=t&&!1!==i.closeEasing?i.closeEasing:i.hideEasing;if(!e(\":focus\",l).length||t)return clearTimeout(v.intervalId),l[n]({duration:r,easing:o,complete:function(){p(l),clearTimeout(a),i.onHidden&&\"hidden\"!==y.state&&i.onHidden(),y.state=\"hidden\",y.endTime=new Date,h(y)}})}function w(){(i.timeOut>0||i.extendedTimeOut>0)&&(a=setTimeout(_,i.extendedTimeOut),v.maxHideTime=parseFloat(i.extendedTimeOut),v.hideEta=(new Date).getTime()+v.maxHideTime)}function x(){clearTimeout(a),v.hideEta=0,l.stop(!0,!0)[i.showMethod]({duration:i.showDuration,easing:i.showEasing})}function C(){var e=(v.hideEta-(new Date).getTime())/v.maxHideTime*100;m.width(e+\"%\")}}function f(){return e.extend({},{tapToDismiss:!0,toastClass:\"toast\",containerId:\"toast-container\",debug:!1,showMethod:\"fadeIn\",showDuration:300,showEasing:\"swing\",onShown:void 0,hideMethod:\"fadeOut\",hideDuration:1e3,hideEasing:\"swing\",onHidden:void 0,closeMethod:!1,closeDuration:!1,closeEasing:!1,closeOnHover:!0,extendedTimeOut:1e3,iconClasses:{error:\"toast-error\",info:\"toast-info\",success:\"toast-success\",warning:\"toast-warning\"},iconClass:\"toast-info\",positionClass:\"toast-top-right\",timeOut:5e3,titleClass:\"toast-title\",messageClass:\"toast-message\",escapeHtml:!1,target:\"body\",closeHtml:'<button type=\"button\">&times;</button>',closeClass:\"toast-close-button\",newestOnTop:!0,preventDuplicates:!1,progressBar:!1,progressClass:\"toast-progress\",rtl:!1},c.options)}function p(e){t||(t=u()),e.is(\":visible\")||(e.remove(),e=null,0===t.children().length&&(t.remove(),r=void 0))}}()}.apply(t,r))||(e.exports=o)},4581:(e,t,n)=>{var r;!function(){\"use strict\";(r=function(e,t,n,r){r=r||{},this.dictionary=null,this.rules={},this.dictionaryTable={},this.compoundRules=[],this.compoundRuleCodes={},this.replacementTable=[],this.flags=r.flags||{},this.memoized={},this.loaded=!1;var o,i,s,a,l,c=this;function u(e,t){var n=c._readFile(e,null,r.asyncLoad);r.asyncLoad?n.then((function(e){t(e)})):t(n)}function d(e){t=e,n&&m()}function h(e){n=e,t&&m()}function m(){for(c.rules=c._parseAFF(t),c.compoundRuleCodes={},i=0,a=c.compoundRules.length;i<a;i++){var e=c.compoundRules[i];for(s=0,l=e.length;s<l;s++)c.compoundRuleCodes[e[s]]=[]}for(i in\"ONLYINCOMPOUND\"in c.flags&&(c.compoundRuleCodes[c.flags.ONLYINCOMPOUND]=[]),c.dictionaryTable=c._parseDIC(n),c.compoundRuleCodes)0===c.compoundRuleCodes[i].length&&delete c.compoundRuleCodes[i];for(i=0,a=c.compoundRules.length;i<a;i++){var o=c.compoundRules[i],u=\"\";for(s=0,l=o.length;s<l;s++){var d=o[s];d in c.compoundRuleCodes?u+=\"(\"+c.compoundRuleCodes[d].join(\"|\")+\")\":u+=d}c.compoundRules[i]=new RegExp(u,\"i\")}c.loaded=!0,r.asyncLoad&&r.loadedCallback&&r.loadedCallback(c)}return e&&(c.dictionary=e,t&&n?m():\"undefined\"!=typeof window&&\"chrome\"in window&&\"extension\"in window.chrome&&\"getURL\"in window.chrome.extension?(o=r.dictionaryPath?r.dictionaryPath:\"typo/dictionaries\",t||u(chrome.extension.getURL(o+\"/\"+e+\"/\"+e+\".aff\"),d),n||u(chrome.extension.getURL(o+\"/\"+e+\"/\"+e+\".dic\"),h)):(o=r.dictionaryPath?r.dictionaryPath:\"//dictionaries\",t||u(o+\"/\"+e+\"/\"+e+\".aff\",d),n||u(o+\"/\"+e+\"/\"+e+\".dic\",h))),this}).prototype={load:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);return this},_readFile:function(e,t,r){if(t=t||\"utf8\",\"undefined\"!=typeof XMLHttpRequest){var o,i=new XMLHttpRequest;return i.open(\"GET\",e,r),r&&(o=new Promise((function(e,t){i.onload=function(){200===i.status?e(i.responseText):t(i.statusText)},i.onerror=function(){t(i.statusText)}}))),i.overrideMimeType&&i.overrideMimeType(\"text/plain; charset=\"+t),i.send(null),r?o:i.responseText}var s=n(2562);try{if(s.existsSync(e))return s.readFileSync(e,t);console.log(\"Path \"+e+\" does not exist.\")}catch(e){return console.log(e),\"\"}},_parseAFF:function(e){var t,n,r,o,i,s,a,l={},c=e.split(/\\r?\\n/);for(o=0,s=c.length;o<s;o++)if(t=(t=this._removeAffixComments(c[o])).trim()){var u=t.split(/\\s+/),d=u[0];if(\"PFX\"==d||\"SFX\"==d){var h=u[1],m=u[2],f=[];for(i=o+1,a=o+1+(n=parseInt(u[3],10));i<a;i++){var p=(r=c[i].split(/\\s+/))[2],g=r[3].split(\"/\"),v=g[0];\"0\"===v&&(v=\"\");var y=this.parseRuleCodes(g[1]),b=r[4],_={};_.add=v,y.length>0&&(_.continuationClasses=y),\".\"!==b&&(_.match=\"SFX\"===d?new RegExp(b+\"$\"):new RegExp(\"^\"+b)),\"0\"!=p&&(_.remove=\"SFX\"===d?new RegExp(p+\"$\"):p),f.push(_)}l[h]={type:d,combineable:\"Y\"==m,entries:f},o+=n}else if(\"COMPOUNDRULE\"===d){for(i=o+1,a=o+1+(n=parseInt(u[1],10));i<a;i++)r=(t=c[i]).split(/\\s+/),this.compoundRules.push(r[1]);o+=n}else\"REP\"===d?3===(r=t.split(/\\s+/)).length&&this.replacementTable.push([r[1],r[2]]):this.flags[d]=u[1]}return l},_removeAffixComments:function(e){return e.match(/^\\s*#/,\"\")?\"\":e},_parseDIC:function(e){var t=(e=this._removeDicComments(e)).split(/\\r?\\n/),n={};function r(e,t){n.hasOwnProperty(e)||(n[e]=null),t.length>0&&(null===n[e]&&(n[e]=[]),n[e].push(t))}for(var o=1,i=t.length;o<i;o++){var s=t[o];if(s){var a=s.split(\"/\",2),l=a[0];if(a.length>1){var c=this.parseRuleCodes(a[1]);\"NEEDAFFIX\"in this.flags&&-1!=c.indexOf(this.flags.NEEDAFFIX)||r(l,c);for(var u=0,d=c.length;u<d;u++){var h=c[u],m=this.rules[h];if(m)for(var f=this._applyRule(l,m),p=0,g=f.length;p<g;p++){var v=f[p];if(r(v,[]),m.combineable)for(var y=u+1;y<d;y++){var b=c[y],_=this.rules[b];if(_&&_.combineable&&m.type!=_.type)for(var w=this._applyRule(v,_),x=0,C=w.length;x<C;x++){r(w[x],[])}}}h in this.compoundRuleCodes&&this.compoundRuleCodes[h].push(l)}}else r(l.trim(),[])}}return n},_removeDicComments:function(e){return e=e.replace(/^\\t.*$/gm,\"\")},parseRuleCodes:function(e){if(e){if(\"FLAG\"in this.flags){if(\"long\"===this.flags.FLAG){for(var t=[],n=0,r=e.length;n<r;n+=2)t.push(e.substr(n,2));return t}return\"num\"===this.flags.FLAG?e.split(\",\"):\"UTF-8\"===this.flags.FLAG?Array.from(e):e.split(\"\")}return e.split(\"\")}return[]},_applyRule:function(e,t){for(var n=t.entries,r=[],o=0,i=n.length;o<i;o++){var s=n[o];if(!s.match||e.match(s.match)){var a=e;if(s.remove&&(a=a.replace(s.remove,\"\")),\"SFX\"===t.type?a+=s.add:a=s.add+a,r.push(a),\"continuationClasses\"in s)for(var l=0,c=s.continuationClasses.length;l<c;l++){var u=this.rules[s.continuationClasses[l]];u&&(r=r.concat(this._applyRule(a,u)))}}}return r},check:function(e){if(!this.loaded)throw\"Dictionary not loaded.\";var t=e.replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\");if(this.checkExact(t))return!0;if(t.toUpperCase()===t){var n=t[0]+t.substring(1).toLowerCase();if(this.hasFlag(n,\"KEEPCASE\"))return!1;if(this.checkExact(n))return!0;if(this.checkExact(t.toLowerCase()))return!0}var r=t[0].toLowerCase()+t.substring(1);if(r!==t){if(this.hasFlag(r,\"KEEPCASE\"))return!1;if(this.checkExact(r))return!0}return!1},checkExact:function(e){if(!this.loaded)throw\"Dictionary not loaded.\";var t,n,r=this.dictionaryTable[e];if(void 0===r){if(\"COMPOUNDMIN\"in this.flags&&e.length>=this.flags.COMPOUNDMIN)for(t=0,n=this.compoundRules.length;t<n;t++)if(e.match(this.compoundRules[t]))return!0}else{if(null===r)return!0;if(\"object\"==typeof r)for(t=0,n=r.length;t<n;t++)if(!this.hasFlag(e,\"ONLYINCOMPOUND\",r[t]))return!0}return!1},hasFlag:function(e,t,n){if(!this.loaded)throw\"Dictionary not loaded.\";return!(!(t in this.flags)||(void 0===n&&(n=Array.prototype.concat.apply([],this.dictionaryTable[e])),!n||-1===n.indexOf(this.flags[t])))},alphabet:\"\",suggest:function(e,t){if(!this.loaded)throw\"Dictionary not loaded.\";if(t=t||5,this.memoized.hasOwnProperty(e)){var n=this.memoized[e].limit;if(t<=n||this.memoized[e].suggestions.length<n)return this.memoized[e].suggestions.slice(0,t)}if(this.check(e))return[];for(var r=0,o=this.replacementTable.length;r<o;r++){var i=this.replacementTable[r];if(-1!==e.indexOf(i[0])){var s=e.replace(i[0],i[1]);if(this.check(s))return[s]}}var a=this;function l(e,t){var n,r,o,i,s={},l=a.alphabet.length;if(\"string\"==typeof e){var c=e;(e={})[c]=!0}for(var c in e)for(n=0,o=c.length+1;n<o;n++){var u=[c.substring(0,n),c.substring(n)];if(u[1]&&(i=u[0]+u[1].substring(1),t&&!a.check(i)||(i in s?s[i]+=1:s[i]=1)),u[1].length>1&&u[1][1]!==u[1][0]&&(i=u[0]+u[1][1]+u[1][0]+u[1].substring(2),t&&!a.check(i)||(i in s?s[i]+=1:s[i]=1)),u[1]){var d=u[1].substring(0,1).toUpperCase()===u[1].substring(0,1)?\"uppercase\":\"lowercase\";for(r=0;r<l;r++){var h=a.alphabet[r];\"uppercase\"===d&&(h=h.toUpperCase()),h!=u[1].substring(0,1)&&(i=u[0]+h+u[1].substring(1),t&&!a.check(i)||(i in s?s[i]+=1:s[i]=1))}}if(u[1])for(r=0;r<l;r++){d=u[0].substring(-1).toUpperCase()===u[0].substring(-1)&&u[1].substring(0,1).toUpperCase()===u[1].substring(0,1)?\"uppercase\":\"lowercase\",h=a.alphabet[r];\"uppercase\"===d&&(h=h.toUpperCase()),i=u[0]+h+u[1],t&&!a.check(i)||(i in s?s[i]+=1:s[i]=1)}}return s}return a.alphabet=\"abcdefghijklmnopqrstuvwxyz\",this.memoized[e]={suggestions:function(e){var n,r=l(e),o=l(r,!0);for(var i in r)a.check(i)&&(i in o?o[i]+=r[i]:o[i]=r[i]);var s=[];for(n in o)o.hasOwnProperty(n)&&s.push([n,o[n]]);s.sort((function(e,t){var n=e[1],r=t[1];return n<r?-1:n>r?1:t[0].localeCompare(e[0])})).reverse();var c=[],u=\"lowercase\";e.toUpperCase()===e?u=\"uppercase\":e.substr(0,1).toUpperCase()+e.substr(1).toLowerCase()===e&&(u=\"capitalized\");var d=t;for(n=0;n<Math.min(d,s.length);n++)\"uppercase\"===u?s[n][0]=s[n][0].toUpperCase():\"capitalized\"===u&&(s[n][0]=s[n][0].substr(0,1).toUpperCase()+s[n][0].substr(1)),a.hasFlag(s[n][0],\"NOSUGGEST\")||-1!=c.indexOf(s[n][0])?d++:c.push(s[n][0]);return c}(e),limit:t},this.memoized[e].suggestions}}}(),e.exports=r},4060:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>o});var r=function(e,t,n,r,o,i,s,a){var l,c=\"function\"==typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),r&&(c.functional=!0),i&&(c._scopeId=\"data-v-\"+i),s?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(s)},c._ssrRegister=l):o&&(l=a?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}({props:{items:{type:Array,default:[]}},methods:{classes:function(e){var t=[];return e.children.length>0&&t.push(\"dropdown\"),e.active&&t.push(\"active\"),t.join(\" \")},color:function(e){return e.color&&\"#000000\"!=e.color?e.color:\"\"}}},(function(){var e=this,t=e._self._c;return t(\"ul\",{staticClass:\"nav navbar-nav\"},e._l(e.items,(function(n,r){return t(\"li\",{class:e.classes(n)},[t(\"a\",{style:\"color:\"+e.color(n),attrs:{target:n.target,href:n.children.length>0?\"#\"+n.id+\"-dropdown-element\":n.href,\"data-toggle\":n.children.length>0&&\"collapse\",\"aria-expanded\":n.children.length>0&&String(n.active)}},[t(\"span\",{class:\"icon \"+n.icon_class}),e._v(\" \"),t(\"span\",{staticClass:\"title\"},[e._v(e._s(n.title))])]),e._v(\" \"),n.children.length>0?t(\"div\",{class:\"panel-collapse collapse\"+(n.active?\" in\":\" \"),attrs:{id:n.id+\"-dropdown-element\"}},[t(\"div\",{staticClass:\"panel-body\"},[t(\"admin-menu\",{attrs:{items:n.children}})],1)]):e._e()])})),0)}),[],!1,null,null,null);const o=r.exports},2562:()=>{},970:(e,t)=>{\"use strict\";function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function o(e,t){var n=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function i(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:\"\",highlight:null,langPrefix:\"language-\",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}t.ce={async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:\"\",highlight:null,langPrefix:\"language-\",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1};var s=/[&<>\"']/,a=/[&<>\"']/g,l=/[<>\"']|&(?!#?\\w+;)/,c=/[<>\"']|&(?!#?\\w+;)/g,u={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},d=function(e){return u[e]};function h(e,t){if(t){if(s.test(e))return e.replace(a,d)}else if(l.test(e))return e.replace(c,d);return e}var m=/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/gi;function f(e){return e.replace(m,(function(e,t){return\"colon\"===(t=t.toLowerCase())?\":\":\"#\"===t.charAt(0)?\"x\"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):\"\"}))}var p=/(^|[^\\[])\\^/g;function g(e,t){e=\"string\"==typeof e?e:e.source,t=t||\"\";var n={replace:function(t,r){return r=(r=r.source||r).replace(p,\"$1\"),e=e.replace(t,r),n},getRegex:function(){return new RegExp(e,t)}};return n}var v=/[^\\w:]/g,y=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function b(e,t,n){if(e){var r;try{r=decodeURIComponent(f(n)).replace(v,\"\").toLowerCase()}catch(e){return null}if(0===r.indexOf(\"javascript:\")||0===r.indexOf(\"vbscript:\")||0===r.indexOf(\"data:\"))return null}t&&!y.test(n)&&(n=function(e,t){_[\" \"+e]||(w.test(e)?_[\" \"+e]=e+\"/\":_[\" \"+e]=A(e,\"/\",!0));var n=-1===(e=_[\" \"+e]).indexOf(\":\");return\"//\"===t.substring(0,2)?n?t:e.replace(x,\"$1\")+t:\"/\"===t.charAt(0)?n?t:e.replace(C,\"$1\")+t:e+t}(t,n));try{n=encodeURI(n).replace(/%25/g,\"%\")}catch(e){return null}return n}var _={},w=/^[^:]+:\\/*[^/]*$/,x=/^([^:]+:)[\\s\\S]*$/,C=/^([^:]+:\\/*[^/]*)[\\s\\S]*$/;var k={exec:function(){}};function D(e){for(var t,n,r=1;r<arguments.length;r++)for(n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}function S(e,t){var n=e.replace(/\\|/g,(function(e,t,n){for(var r=!1,o=t;--o>=0&&\"\\\\\"===n[o];)r=!r;return r?\"|\":\" |\"})).split(/ \\|/),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),n.length>t)n.splice(t);else for(;n.length<t;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\\\\|/g,\"|\");return n}function A(e,t,n){var r=e.length;if(0===r)return\"\";for(var o=0;o<r;){var i=e.charAt(r-o-1);if(i!==t||n){if(i===t||!n)break;o++}else o++}return e.slice(0,r-o)}function M(e){e&&e.sanitize&&!e.silent&&console.warn(\"marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options\")}function L(e,t){if(t<1)return\"\";for(var n=\"\";t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}function E(e,t,n,r){var o=t.href,i=t.title?h(t.title):null,s=e[1].replace(/\\\\([\\[\\]])/g,\"$1\");if(\"!\"!==e[0].charAt(0)){r.state.inLink=!0;var a={type:\"link\",raw:n,href:o,title:i,text:s,tokens:r.inlineTokens(s)};return r.state.inLink=!1,a}return{type:\"image\",raw:n,href:o,title:i,text:h(s)}}var T=function(){function e(e){this.options=e||t.ce}var n=e.prototype;return n.space=function(e){var t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}},n.code=function(e){var t=this.rules.block.code.exec(e);if(t){var n=t[0].replace(/^ {1,4}/gm,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:A(n,\"\\n\")}}},n.fences=function(e){var t=this.rules.block.fences.exec(e);if(t){var n=t[0],r=function(e,t){var n=e.match(/^(\\s+)(?:```)/);if(null===n)return t;var r=n[1];return t.split(\"\\n\").map((function(e){var t=e.match(/^\\s+/);return null===t?e:t[0].length>=r.length?e.slice(r.length):e})).join(\"\\n\")}(n,t[3]||\"\");return{type:\"code\",raw:n,lang:t[2]?t[2].trim():t[2],text:r}}},n.heading=function(e){var t=this.rules.block.heading.exec(e);if(t){var n=t[2].trim();if(/#$/.test(n)){var r=A(n,\"#\");this.options.pedantic?n=r.trim():r&&!/ $/.test(r)||(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}},n.hr=function(e){var t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:t[0]}},n.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){var n=t[0].replace(/^ *>[ \\t]?/gm,\"\");return{type:\"blockquote\",raw:t[0],tokens:this.lexer.blockTokens(n,[]),text:n}}},n.list=function(e){var t=this.rules.block.list.exec(e);if(t){var n,r,i,s,a,l,c,u,d,h,m,f,p=t[1].trim(),g=p.length>1,v={type:\"list\",raw:\"\",ordered:g,start:g?+p.slice(0,-1):\"\",loose:!1,items:[]};p=g?\"\\\\d{1,9}\\\\\"+p.slice(-1):\"\\\\\"+p,this.options.pedantic&&(p=g?p:\"[*+-]\");for(var y=new RegExp(\"^( {0,3}\"+p+\")((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))\");e&&(f=!1,t=y.exec(e))&&!this.rules.block.hr.test(e);){if(n=t[0],e=e.substring(n.length),u=t[2].split(\"\\n\",1)[0],d=e.split(\"\\n\",1)[0],this.options.pedantic?(s=2,m=u.trimLeft()):(s=(s=t[2].search(/[^ ]/))>4?1:s,m=u.slice(s),s+=t[1].length),l=!1,!u&&/^ *$/.test(d)&&(n+=d+\"\\n\",e=e.substring(d.length+1),f=!0),!f)for(var b=new RegExp(\"^ {0,\"+Math.min(3,s-1)+\"}(?:[*+-]|\\\\d{1,9}[.)])((?: [^\\\\n]*)?(?:\\\\n|$))\"),_=new RegExp(\"^ {0,\"+Math.min(3,s-1)+\"}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)\"),w=new RegExp(\"^ {0,\"+Math.min(3,s-1)+\"}(?:```|~~~)\"),x=new RegExp(\"^ {0,\"+Math.min(3,s-1)+\"}#\");e&&(u=h=e.split(\"\\n\",1)[0],this.options.pedantic&&(u=u.replace(/^ {1,4}(?=( {4})*[^ ])/g,\"  \")),!w.test(u))&&!x.test(u)&&!b.test(u)&&!_.test(e);){if(u.search(/[^ ]/)>=s||!u.trim())m+=\"\\n\"+u.slice(s);else{if(l)break;m+=\"\\n\"+u}l||u.trim()||(l=!0),n+=h+\"\\n\",e=e.substring(h.length+1)}v.loose||(c?v.loose=!0:/\\n *\\n *$/.test(n)&&(c=!0)),this.options.gfm&&(r=/^\\[[ xX]\\] /.exec(m))&&(i=\"[ ] \"!==r[0],m=m.replace(/^\\[[ xX]\\] +/,\"\")),v.items.push({type:\"list_item\",raw:n,task:!!r,checked:i,loose:!1,text:m}),v.raw+=n}v.items[v.items.length-1].raw=n.trimRight(),v.items[v.items.length-1].text=m.trimRight(),v.raw=v.raw.trimRight();var C=v.items.length;for(a=0;a<C;a++){this.lexer.state.top=!1,v.items[a].tokens=this.lexer.blockTokens(v.items[a].text,[]);var k=v.items[a].tokens.filter((function(e){return\"space\"===e.type})),D=k.every((function(e){for(var t,n=0,r=o(e.raw.split(\"\"));!(t=r()).done;){if(\"\\n\"===t.value&&(n+=1),n>1)return!0}return!1}));!v.loose&&k.length&&D&&(v.loose=!0,v.items[a].loose=!0)}return v}},n.html=function(e){var t=this.rules.block.html.exec(e);if(t){var n={type:\"html\",raw:t[0],pre:!this.options.sanitizer&&(\"pre\"===t[1]||\"script\"===t[1]||\"style\"===t[1]),text:t[0]};if(this.options.sanitize){var r=this.options.sanitizer?this.options.sanitizer(t[0]):h(t[0]);n.type=\"paragraph\",n.text=r,n.tokens=this.lexer.inline(r)}return n}},n.def=function(e){var t=this.rules.block.def.exec(e);if(t)return t[3]&&(t[3]=t[3].substring(1,t[3].length-1)),{type:\"def\",tag:t[1].toLowerCase().replace(/\\s+/g,\" \"),raw:t[0],href:t[2],title:t[3]}},n.table=function(e){var t=this.rules.block.table.exec(e);if(t){var n={type:\"table\",header:S(t[1]).map((function(e){return{text:e}})),align:t[2].replace(/^ *|\\| *$/g,\"\").split(/ *\\| */),rows:t[3]&&t[3].trim()?t[3].replace(/\\n[ \\t]*$/,\"\").split(\"\\n\"):[]};if(n.header.length===n.align.length){n.raw=t[0];var r,o,i,s,a=n.align.length;for(r=0;r<a;r++)/^ *-+: *$/.test(n.align[r])?n.align[r]=\"right\":/^ *:-+: *$/.test(n.align[r])?n.align[r]=\"center\":/^ *:-+ *$/.test(n.align[r])?n.align[r]=\"left\":n.align[r]=null;for(a=n.rows.length,r=0;r<a;r++)n.rows[r]=S(n.rows[r],n.header.length).map((function(e){return{text:e}}));for(a=n.header.length,o=0;o<a;o++)n.header[o].tokens=this.lexer.inline(n.header[o].text);for(a=n.rows.length,o=0;o<a;o++)for(s=n.rows[o],i=0;i<s.length;i++)s[i].tokens=this.lexer.inline(s[i].text);return n}}},n.lheading=function(e){var t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:\"=\"===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}},n.paragraph=function(e){var t=this.rules.block.paragraph.exec(e);if(t){var n=\"\\n\"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}},n.text=function(e){var t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}},n.escape=function(e){var t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:h(t[1])}},n.tag=function(e){var t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^<a /i.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\\/a>/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\\/(pre|code|kbd|script)(\\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?\"text\":\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):h(t[0]):t[0]}},n.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var n=t[2].trim();if(!this.options.pedantic&&/^</.test(n)){if(!/>$/.test(n))return;var r=A(n.slice(0,-1),\"\\\\\");if((n.length-r.length)%2==0)return}else{var o=function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=e.length,r=0,o=0;o<n;o++)if(\"\\\\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&--r<0)return o;return-1}(t[2],\"()\");if(o>-1){var i=(0===t[0].indexOf(\"!\")?5:4)+t[1].length+o;t[2]=t[2].substring(0,o),t[0]=t[0].substring(0,i).trim(),t[3]=\"\"}}var s=t[2],a=\"\";if(this.options.pedantic){var l=/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(s);l&&(s=l[1],a=l[3])}else a=t[3]?t[3].slice(1,-1):\"\";return s=s.trim(),/^</.test(s)&&(s=this.options.pedantic&&!/>$/.test(n)?s.slice(1):s.slice(1,-1)),E(t,{href:s?s.replace(this.rules.inline._escapes,\"$1\"):s,title:a?a.replace(this.rules.inline._escapes,\"$1\"):a},t[0],this.lexer)}},n.reflink=function(e,t){var n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){var r=(n[2]||n[1]).replace(/\\s+/g,\" \");if(!(r=t[r.toLowerCase()])||!r.href){var o=n[0].charAt(0);return{type:\"text\",raw:o,text:o}}return E(n,r,n[0],this.lexer)}},n.emStrong=function(e,t,n){void 0===n&&(n=\"\");var r=this.rules.inline.emStrong.lDelim.exec(e);if(r&&(!r[3]||!n.match(/(?:[0-9A-Za-z\\xAA\\xB2\\xB3\\xB5\\xB9\\xBA\\xBC-\\xBE\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09F4-\\u09F9\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71-\\u0B77\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BF2\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D58-\\u0D61\\u0D66-\\u0D78\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F33\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1369-\\u137C\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2070\\u2071\\u2074-\\u2079\\u207F-\\u2089\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2CFD\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u3192-\\u3195\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA830-\\uA835\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE1-\\uDEFB\\uDF00-\\uDF23\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC58-\\uDC76\\uDC79-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE40-\\uDE48\\uDE60-\\uDE7E\\uDE80-\\uDE9F\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDEEB-\\uDEEF\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD23\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF27\\uDF30-\\uDF45\\uDF51-\\uDF54\\uDF70-\\uDF81\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC52-\\uDC6F\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDDE1-\\uDDF4\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF3B\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCF2\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC6C\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0\\uDFC0-\\uDFD4]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDE70-\\uDEBE\\uDEC0-\\uDEC9\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE96\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCCF\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/))){var o=r[1]||r[2]||\"\";if(!o||o&&(\"\"===n||this.rules.inline.punctuation.exec(n))){var i,s,a=r[0].length-1,l=a,c=0,u=\"*\"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(u.lastIndex=0,t=t.slice(-1*e.length+a);null!=(r=u.exec(t));)if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6])if(s=i.length,r[3]||r[4])l+=s;else if(!((r[5]||r[6])&&a%3)||(a+s)%3){if(!((l-=s)>0)){if(s=Math.min(s,s+l+c),Math.min(a,s)%2){var d=e.slice(1,a+r.index+s);return{type:\"em\",raw:e.slice(0,a+r.index+s+1),text:d,tokens:this.lexer.inlineTokens(d)}}var h=e.slice(2,a+r.index+s-1);return{type:\"strong\",raw:e.slice(0,a+r.index+s+1),text:h,tokens:this.lexer.inlineTokens(h)}}}else c+=s}}},n.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var n=t[2].replace(/\\n/g,\" \"),r=/[^ ]/.test(n),o=/^ /.test(n)&&/ $/.test(n);return r&&o&&(n=n.substring(1,n.length-1)),n=h(n,!0),{type:\"codespan\",raw:t[0],text:n}}},n.br=function(e){var t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}},n.del=function(e){var t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}},n.autolink=function(e,t){var n,r,o=this.rules.inline.autolink.exec(e);if(o)return r=\"@\"===o[2]?\"mailto:\"+(n=h(this.options.mangle?t(o[1]):o[1])):n=h(o[1]),{type:\"link\",raw:o[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}},n.url=function(e,t){var n;if(n=this.rules.inline.url.exec(e)){var r,o;if(\"@\"===n[2])o=\"mailto:\"+(r=h(this.options.mangle?t(n[0]):n[0]));else{var i;do{i=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(i!==n[0]);r=h(n[0]),o=\"www.\"===n[1]?\"http://\"+r:r}return{type:\"link\",raw:n[0],text:r,href:o,tokens:[{type:\"text\",raw:r,text:r}]}}},n.inlineText=function(e,t){var n,r=this.rules.inline.text.exec(e);if(r)return n=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):h(r[0]):r[0]:h(this.options.smartypants?t(r[0]):r[0]),{type:\"text\",raw:r[0],text:n}},e}(),F={newline:/^(?: *(?:\\n|$))+/,code:/^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,hr:/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,list:/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/,html:\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$))\",def:/^ {0,3}\\[(label)\\]: *(?:\\n *)?<?([^\\s>]+)>?(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/,table:k,lheading:/^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,_paragraph:/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,text:/^[^\\n]+/,_label:/(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/,_title:/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/};F.def=g(F.def).replace(\"label\",F._label).replace(\"title\",F._title).getRegex(),F.bullet=/(?:[*+-]|\\d{1,9}[.)])/,F.listItemStart=g(/^( *)(bull) */).replace(\"bull\",F.bullet).getRegex(),F.list=g(F.list).replace(/bull/g,F.bullet).replace(\"hr\",\"\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))\").replace(\"def\",\"\\\\n+(?=\"+F.def.source+\")\").getRegex(),F._tag=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",F._comment=/<!--(?!-?>)[\\s\\S]*?(?:-->|$)/,F.html=g(F.html,\"i\").replace(\"comment\",F._comment).replace(\"tag\",F._tag).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),F.paragraph=g(F._paragraph).replace(\"hr\",F.hr).replace(\"heading\",\" {0,3}#{1,6} \").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",F._tag).getRegex(),F.blockquote=g(F.blockquote).replace(\"paragraph\",F.paragraph).getRegex(),F.normal=D({},F),F.gfm=D({},F.normal,{table:\"^ *([^\\\\n ].*\\\\|.*)\\\\n {0,3}(?:\\\\| *)?(:?-+:? *(?:\\\\| *:?-+:? *)*)(?:\\\\| *)?(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\"}),F.gfm.table=g(F.gfm.table).replace(\"hr\",F.hr).replace(\"heading\",\" {0,3}#{1,6} \").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\" {4}[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",F._tag).getRegex(),F.gfm.paragraph=g(F._paragraph).replace(\"hr\",F.hr).replace(\"heading\",\" {0,3}#{1,6} \").replace(\"|lheading\",\"\").replace(\"table\",F.gfm.table).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",F._tag).getRegex(),F.pedantic=D({},F.normal,{html:g(\"^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\\\"[^\\\"]*\\\"|'[^']*'|\\\\s[^'\\\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))\").replace(\"comment\",F._comment).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:k,paragraph:g(F.normal._paragraph).replace(\"hr\",F.hr).replace(\"heading\",\" *#{1,6} *[^\\n]\").replace(\"lheading\",F.lheading).replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").getRegex()});var O={escape:/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,autolink:/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,url:k,tag:\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\",link:/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,reflink:/^!?\\[(label)\\]\\[(ref)\\]/,nolink:/^!?\\[(ref)\\](?:\\[\\])?/,reflinkSearch:\"reflink|nolink(?!\\\\()\",emStrong:{lDelim:/^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,rDelimAst:/^[^_*]*?\\_\\_[^_*]*?\\*[^_*]*?(?=\\_\\_)|[^*]+(?=[^*])|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,rDelimUnd:/^[^_*]*?\\*\\*[^_*]*?\\_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,br:/^( {2,}|\\\\)\\n(?!\\s*$)/,del:k,text:/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,punctuation:/^([\\spunctuation])/};function B(e){return e.replace(/---/g,\"—\").replace(/--/g,\"–\").replace(/(^|[-\\u2014/(\\[{\"\\s])'/g,\"$1‘\").replace(/'/g,\"’\").replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g,\"$1“\").replace(/\"/g,\"”\").replace(/\\.{3}/g,\"…\")}function R(e){var t,n,r=\"\",o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n=\"x\"+n.toString(16)),r+=\"&#\"+n+\";\";return r}O._punctuation=\"!\\\"#$%&'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~\",O.punctuation=g(O.punctuation).replace(/punctuation/g,O._punctuation).getRegex(),O.blockSkip=/\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g,O.escapedEmSt=/\\\\\\*|\\\\_/g,O._comment=g(F._comment).replace(\"(?:--\\x3e|$)\",\"--\\x3e\").getRegex(),O.emStrong.lDelim=g(O.emStrong.lDelim).replace(/punct/g,O._punctuation).getRegex(),O.emStrong.rDelimAst=g(O.emStrong.rDelimAst,\"g\").replace(/punct/g,O._punctuation).getRegex(),O.emStrong.rDelimUnd=g(O.emStrong.rDelimUnd,\"g\").replace(/punct/g,O._punctuation).getRegex(),O._escapes=/\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g,O._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,O._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,O.autolink=g(O.autolink).replace(\"scheme\",O._scheme).replace(\"email\",O._email).getRegex(),O._attribute=/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/,O.tag=g(O.tag).replace(\"comment\",O._comment).replace(\"attribute\",O._attribute).getRegex(),O._label=/(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/,O._href=/<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/,O._title=/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/,O.link=g(O.link).replace(\"label\",O._label).replace(\"href\",O._href).replace(\"title\",O._title).getRegex(),O.reflink=g(O.reflink).replace(\"label\",O._label).replace(\"ref\",F._label).getRegex(),O.nolink=g(O.nolink).replace(\"ref\",F._label).getRegex(),O.reflinkSearch=g(O.reflinkSearch,\"g\").replace(\"reflink\",O.reflink).replace(\"nolink\",O.nolink).getRegex(),O.normal=D({},O),O.pedantic=D({},O.normal,{strong:{start:/^__|\\*\\*/,middle:/^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,endAst:/\\*\\*(?!\\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\\*/,middle:/^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,endAst:/\\*(?!\\*)/g,endUnd:/_(?!_)/g},link:g(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",O._label).getRegex(),reflink:g(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",O._label).getRegex()}),O.gfm=D({},O.normal,{escape:g(O.escape).replace(\"])\",\"~|])\").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/}),O.gfm.url=g(O.gfm.url,\"i\").replace(\"email\",O.gfm._extended_email).getRegex(),O.breaks=D({},O.gfm,{br:g(O.br).replace(\"{2,}\",\"*\").getRegex(),text:g(O.gfm.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()});var $=function(){function e(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||t.ce,this.options.tokenizer=this.options.tokenizer||new T,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};var n={block:F.normal,inline:O.normal};this.options.pedantic?(n.block=F.pedantic,n.inline=O.pedantic):this.options.gfm&&(n.block=F.gfm,this.options.breaks?n.inline=O.breaks:n.inline=O.gfm),this.tokenizer.rules=n}e.lex=function(t,n){return new e(n).lex(t)},e.lexInline=function(t,n){return new e(n).inlineTokens(t)};var r,o,i,s=e.prototype;return s.lex=function(e){var t;for(e=e.replace(/\\r\\n|\\r/g,\"\\n\"),this.blockTokens(e,this.tokens);t=this.inlineQueue.shift();)this.inlineTokens(t.src,t.tokens);return this.tokens},s.blockTokens=function(e,t){var n,r,o,i,s=this;for(void 0===t&&(t=[]),e=this.options.pedantic?e.replace(/\\t/g,\"    \").replace(/^ +$/gm,\"\"):e.replace(/^( *)(\\t+)/gm,(function(e,t,n){return t+\"    \".repeat(n.length)}));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((function(r){return!!(n=r.call({lexer:s},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)}))))if(n=this.tokenizer.space(e))e=e.substring(n.raw.length),1===n.raw.length&&t.length>0?t[t.length-1].raw+=\"\\n\":t.push(n);else if(n=this.tokenizer.code(e))e=e.substring(n.raw.length),!(r=t[t.length-1])||\"paragraph\"!==r.type&&\"text\"!==r.type?t.push(n):(r.raw+=\"\\n\"+n.raw,r.text+=\"\\n\"+n.text,this.inlineQueue[this.inlineQueue.length-1].src=r.text);else if(n=this.tokenizer.fences(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.heading(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.hr(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.blockquote(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.list(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.html(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.def(e))e=e.substring(n.raw.length),!(r=t[t.length-1])||\"paragraph\"!==r.type&&\"text\"!==r.type?this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title}):(r.raw+=\"\\n\"+n.raw,r.text+=\"\\n\"+n.raw,this.inlineQueue[this.inlineQueue.length-1].src=r.text);else if(n=this.tokenizer.table(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.lheading(e))e=e.substring(n.raw.length),t.push(n);else if(o=e,this.options.extensions&&this.options.extensions.startBlock&&function(){var t=1/0,n=e.slice(1),r=void 0;s.options.extensions.startBlock.forEach((function(e){\"number\"==typeof(r=e.call({lexer:this},n))&&r>=0&&(t=Math.min(t,r))})),t<1/0&&t>=0&&(o=e.substring(0,t+1))}(),this.state.top&&(n=this.tokenizer.paragraph(o)))r=t[t.length-1],i&&\"paragraph\"===r.type?(r.raw+=\"\\n\"+n.raw,r.text+=\"\\n\"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=r.text):t.push(n),i=o.length!==e.length,e=e.substring(n.raw.length);else if(n=this.tokenizer.text(e))e=e.substring(n.raw.length),(r=t[t.length-1])&&\"text\"===r.type?(r.raw+=\"\\n\"+n.raw,r.text+=\"\\n\"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=r.text):t.push(n);else if(e){var a=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(a);break}throw new Error(a)}return this.state.top=!0,t},s.inline=function(e,t){return void 0===t&&(t=[]),this.inlineQueue.push({src:e,tokens:t}),t},s.inlineTokens=function(e,t){var n,r,o,i=this;void 0===t&&(t=[]);var s,a,l,c=e;if(this.tokens.links){var u=Object.keys(this.tokens.links);if(u.length>0)for(;null!=(s=this.tokenizer.rules.inline.reflinkSearch.exec(c));)u.includes(s[0].slice(s[0].lastIndexOf(\"[\")+1,-1))&&(c=c.slice(0,s.index)+\"[\"+L(\"a\",s[0].length-2)+\"]\"+c.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(s=this.tokenizer.rules.inline.blockSkip.exec(c));)c=c.slice(0,s.index)+\"[\"+L(\"a\",s[0].length-2)+\"]\"+c.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(s=this.tokenizer.rules.inline.escapedEmSt.exec(c));)c=c.slice(0,s.index)+\"++\"+c.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(l=\"\"),a=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((function(r){return!!(n=r.call({lexer:i},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)}))))if(n=this.tokenizer.escape(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.tag(e))e=e.substring(n.raw.length),(r=t[t.length-1])&&\"text\"===n.type&&\"text\"===r.type?(r.raw+=n.raw,r.text+=n.text):t.push(n);else if(n=this.tokenizer.link(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(n.raw.length),(r=t[t.length-1])&&\"text\"===n.type&&\"text\"===r.type?(r.raw+=n.raw,r.text+=n.text):t.push(n);else if(n=this.tokenizer.emStrong(e,c,l))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.codespan(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.br(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.del(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.autolink(e,R))e=e.substring(n.raw.length),t.push(n);else if(this.state.inLink||!(n=this.tokenizer.url(e,R))){if(o=e,this.options.extensions&&this.options.extensions.startInline&&function(){var t=1/0,n=e.slice(1),r=void 0;i.options.extensions.startInline.forEach((function(e){\"number\"==typeof(r=e.call({lexer:this},n))&&r>=0&&(t=Math.min(t,r))})),t<1/0&&t>=0&&(o=e.substring(0,t+1))}(),n=this.tokenizer.inlineText(o,B))e=e.substring(n.raw.length),\"_\"!==n.raw.slice(-1)&&(l=n.raw.slice(-1)),a=!0,(r=t[t.length-1])&&\"text\"===r.type?(r.raw+=n.raw,r.text+=n.text):t.push(n);else if(e){var d=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(d);break}throw new Error(d)}}else e=e.substring(n.raw.length),t.push(n);return t},r=e,i=[{key:\"rules\",get:function(){return{block:F,inline:O}}}],(o=null)&&n(r.prototype,o),i&&n(r,i),Object.defineProperty(r,\"prototype\",{writable:!1}),e}(),N=function(){function e(e){this.options=e||t.ce}var n=e.prototype;return n.code=function(e,t,n){var r=(t||\"\").match(/\\S*/)[0];if(this.options.highlight){var o=this.options.highlight(e,r);null!=o&&o!==e&&(n=!0,e=o)}return e=e.replace(/\\n$/,\"\")+\"\\n\",r?'<pre><code class=\"'+this.options.langPrefix+h(r,!0)+'\">'+(n?e:h(e,!0))+\"</code></pre>\\n\":\"<pre><code>\"+(n?e:h(e,!0))+\"</code></pre>\\n\"},n.blockquote=function(e){return\"<blockquote>\\n\"+e+\"</blockquote>\\n\"},n.html=function(e){return e},n.heading=function(e,t,n,r){return this.options.headerIds?\"<h\"+t+' id=\"'+(this.options.headerPrefix+r.slug(n))+'\">'+e+\"</h\"+t+\">\\n\":\"<h\"+t+\">\"+e+\"</h\"+t+\">\\n\"},n.hr=function(){return this.options.xhtml?\"<hr/>\\n\":\"<hr>\\n\"},n.list=function(e,t,n){var r=t?\"ol\":\"ul\";return\"<\"+r+(t&&1!==n?' start=\"'+n+'\"':\"\")+\">\\n\"+e+\"</\"+r+\">\\n\"},n.listitem=function(e){return\"<li>\"+e+\"</li>\\n\"},n.checkbox=function(e){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\"'+(this.options.xhtml?\" /\":\"\")+\"> \"},n.paragraph=function(e){return\"<p>\"+e+\"</p>\\n\"},n.table=function(e,t){return t&&(t=\"<tbody>\"+t+\"</tbody>\"),\"<table>\\n<thead>\\n\"+e+\"</thead>\\n\"+t+\"</table>\\n\"},n.tablerow=function(e){return\"<tr>\\n\"+e+\"</tr>\\n\"},n.tablecell=function(e,t){var n=t.header?\"th\":\"td\";return(t.align?\"<\"+n+' align=\"'+t.align+'\">':\"<\"+n+\">\")+e+\"</\"+n+\">\\n\"},n.strong=function(e){return\"<strong>\"+e+\"</strong>\"},n.em=function(e){return\"<em>\"+e+\"</em>\"},n.codespan=function(e){return\"<code>\"+e+\"</code>\"},n.br=function(){return this.options.xhtml?\"<br/>\":\"<br>\"},n.del=function(e){return\"<del>\"+e+\"</del>\"},n.link=function(e,t,n){if(null===(e=b(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<a href=\"'+h(e)+'\"';return t&&(r+=' title=\"'+t+'\"'),r+=\">\"+n+\"</a>\"},n.image=function(e,t,n){if(null===(e=b(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<img src=\"'+e+'\" alt=\"'+n+'\"';return t&&(r+=' title=\"'+t+'\"'),r+=this.options.xhtml?\"/>\":\">\"},n.text=function(e){return e},e}(),Y=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,n){return\"\"+n},t.image=function(e,t,n){return\"\"+n},t.br=function(){return\"\"},e}(),P=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\\/a-z].*?>/gi,\"\").replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g,\"\").replace(/\\s/g,\"-\")},t.getNextSafeSlug=function(e,t){var n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{n=e+\"-\"+ ++r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n},t.slug=function(e,t){void 0===t&&(t={});var n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)},e}(),I=function(){function e(e){this.options=e||t.ce,this.options.renderer=this.options.renderer||new N,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Y,this.slugger=new P}e.parse=function(t,n){return new e(n).parse(t)},e.parseInline=function(t,n){return new e(n).parseInline(t)};var n=e.prototype;return n.parse=function(e,t){void 0===t&&(t=!0);var n,r,o,i,s,a,l,c,u,d,h,m,p,g,v,y,b,_,w,x=\"\",C=e.length;for(n=0;n<C;n++)if(d=e[n],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[d.type])||!1===(w=this.options.extensions.renderers[d.type].call({parser:this},d))&&[\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"paragraph\",\"text\"].includes(d.type))switch(d.type){case\"space\":continue;case\"hr\":x+=this.renderer.hr();continue;case\"heading\":x+=this.renderer.heading(this.parseInline(d.tokens),d.depth,f(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case\"code\":x+=this.renderer.code(d.text,d.lang,d.escaped);continue;case\"table\":for(c=\"\",l=\"\",i=d.header.length,r=0;r<i;r++)l+=this.renderer.tablecell(this.parseInline(d.header[r].tokens),{header:!0,align:d.align[r]});for(c+=this.renderer.tablerow(l),u=\"\",i=d.rows.length,r=0;r<i;r++){for(l=\"\",s=(a=d.rows[r]).length,o=0;o<s;o++)l+=this.renderer.tablecell(this.parseInline(a[o].tokens),{header:!1,align:d.align[o]});u+=this.renderer.tablerow(l)}x+=this.renderer.table(c,u);continue;case\"blockquote\":u=this.parse(d.tokens),x+=this.renderer.blockquote(u);continue;case\"list\":for(h=d.ordered,m=d.start,p=d.loose,i=d.items.length,u=\"\",r=0;r<i;r++)y=(v=d.items[r]).checked,b=v.task,g=\"\",v.task&&(_=this.renderer.checkbox(y),p?v.tokens.length>0&&\"paragraph\"===v.tokens[0].type?(v.tokens[0].text=_+\" \"+v.tokens[0].text,v.tokens[0].tokens&&v.tokens[0].tokens.length>0&&\"text\"===v.tokens[0].tokens[0].type&&(v.tokens[0].tokens[0].text=_+\" \"+v.tokens[0].tokens[0].text)):v.tokens.unshift({type:\"text\",text:_}):g+=_),g+=this.parse(v.tokens,p),u+=this.renderer.listitem(g,b,y);x+=this.renderer.list(u,h,m);continue;case\"html\":x+=this.renderer.html(d.text);continue;case\"paragraph\":x+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case\"text\":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1<C&&\"text\"===e[n+1].type;)u+=\"\\n\"+((d=e[++n]).tokens?this.parseInline(d.tokens):d.text);x+=t?this.renderer.paragraph(u):u;continue;default:var k='Token with \"'+d.type+'\" type was not found.';if(this.options.silent)return void console.error(k);throw new Error(k)}else x+=w||\"\";return x},n.parseInline=function(e,t){t=t||this.renderer;var n,r,o,i=\"\",s=e.length;for(n=0;n<s;n++)if(r=e[n],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[r.type])||!1===(o=this.options.extensions.renderers[r.type].call({parser:this},r))&&[\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(r.type))switch(r.type){case\"escape\":case\"text\":i+=t.text(r.text);break;case\"html\":i+=t.html(r.text);break;case\"link\":i+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case\"image\":i+=t.image(r.href,r.title,r.text);break;case\"strong\":i+=t.strong(this.parseInline(r.tokens,t));break;case\"em\":i+=t.em(this.parseInline(r.tokens,t));break;case\"codespan\":i+=t.codespan(r.text);break;case\"br\":i+=t.br();break;case\"del\":i+=t.del(this.parseInline(r.tokens,t));break;default:var a='Token with \"'+r.type+'\" type was not found.';if(this.options.silent)return void console.error(a);throw new Error(a)}else i+=o||\"\";return i},e}();function H(e,t,n){if(null==e)throw new Error(\"marked(): input parameter is undefined or null\");if(\"string\"!=typeof e)throw new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(e)+\", string expected\");if(\"function\"==typeof t&&(n=t,t=null),M(t=D({},H.defaults,t||{})),n){var r,o=t.highlight;try{r=$.lex(e,t)}catch(e){return n(e)}var i=function(e){var i;if(!e)try{t.walkTokens&&H.walkTokens(r,t.walkTokens),i=I.parse(r,t)}catch(t){e=t}return t.highlight=o,e?n(e):n(null,i)};if(!o||o.length<3)return i();if(delete t.highlight,!r.length)return i();var s=0;return H.walkTokens(r,(function(e){\"code\"===e.type&&(s++,setTimeout((function(){o(e.text,e.lang,(function(t,n){if(t)return i(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),0===--s&&i()}))}),0))})),void(0===s&&i())}function a(e){if(e.message+=\"\\nPlease report this to https://github.com/markedjs/marked.\",t.silent)return\"<p>An error occurred:</p><pre>\"+h(e.message+\"\",!0)+\"</pre>\";throw e}try{var l=$.lex(e,t);if(t.walkTokens){if(t.async)return Promise.all(H.walkTokens(l,t.walkTokens)).then((function(){return I.parse(l,t)})).catch(a);H.walkTokens(l,t.walkTokens)}return I.parse(l,t)}catch(e){a(e)}}H.options=H.setOptions=function(e){var n;return D(H.defaults,e),n=H.defaults,t.ce=n,H},H.getDefaults=i,H.defaults=t.ce,H.use=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r,o=D.apply(void 0,[{}].concat(t)),i=H.defaults.extensions||{renderers:{},childTokens:{}};t.forEach((function(e){if(e.extensions&&(r=!0,e.extensions.forEach((function(e){if(!e.name)throw new Error(\"extension name required\");if(e.renderer){var t=i.renderers?i.renderers[e.name]:null;i.renderers[e.name]=t?function(){for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];var i=e.renderer.apply(this,r);return!1===i&&(i=t.apply(this,r)),i}:e.renderer}if(e.tokenizer){if(!e.level||\"block\"!==e.level&&\"inline\"!==e.level)throw new Error(\"extension level must be 'block' or 'inline'\");i[e.level]?i[e.level].unshift(e.tokenizer):i[e.level]=[e.tokenizer],e.start&&(\"block\"===e.level?i.startBlock?i.startBlock.push(e.start):i.startBlock=[e.start]:\"inline\"===e.level&&(i.startInline?i.startInline.push(e.start):i.startInline=[e.start]))}e.childTokens&&(i.childTokens[e.name]=e.childTokens)}))),e.renderer&&function(){var t=H.defaults.renderer||new N,n=function(n){var r=t[n];t[n]=function(){for(var o=arguments.length,i=new Array(o),s=0;s<o;s++)i[s]=arguments[s];var a=e.renderer[n].apply(t,i);return!1===a&&(a=r.apply(t,i)),a}};for(var r in e.renderer)n(r);o.renderer=t}(),e.tokenizer&&function(){var t=H.defaults.tokenizer||new T,n=function(n){var r=t[n];t[n]=function(){for(var o=arguments.length,i=new Array(o),s=0;s<o;s++)i[s]=arguments[s];var a=e.tokenizer[n].apply(t,i);return!1===a&&(a=r.apply(t,i)),a}};for(var r in e.tokenizer)n(r);o.tokenizer=t}(),e.walkTokens){var t=H.defaults.walkTokens;o.walkTokens=function(n){var r=[];return r.push(e.walkTokens.call(this,n)),t&&(r=r.concat(t.call(this,n))),r}}r&&(o.extensions=i),H.setOptions(o)}))},H.walkTokens=function(e,t){for(var n,r=[],i=function(){var e=n.value;switch(r=r.concat(t.call(H,e)),e.type){case\"table\":for(var i,s=o(e.header);!(i=s()).done;){var a=i.value;r=r.concat(H.walkTokens(a.tokens,t))}for(var l,c=o(e.rows);!(l=c()).done;)for(var u,d=o(l.value);!(u=d()).done;){var h=u.value;r=r.concat(H.walkTokens(h.tokens,t))}break;case\"list\":r=r.concat(H.walkTokens(e.items,t));break;default:H.defaults.extensions&&H.defaults.extensions.childTokens&&H.defaults.extensions.childTokens[e.type]?H.defaults.extensions.childTokens[e.type].forEach((function(n){r=r.concat(H.walkTokens(e[n],t))})):e.tokens&&(r=r.concat(H.walkTokens(e.tokens,t)))}},s=o(e);!(n=s()).done;)i();return r},H.parseInline=function(e,t){if(null==e)throw new Error(\"marked.parseInline(): input parameter is undefined or null\");if(\"string\"!=typeof e)throw new Error(\"marked.parseInline(): input parameter is of type \"+Object.prototype.toString.call(e)+\", string expected\");M(t=D({},H.defaults,t||{}));try{var n=$.lexInline(e,t);return t.walkTokens&&H.walkTokens(n,t.walkTokens),I.parseInline(n,t)}catch(e){if(e.message+=\"\\nPlease report this to https://github.com/markedjs/marked.\",t.silent)return\"<p>An error occurred:</p><pre>\"+h(e.message+\"\",!0)+\"</pre>\";throw e}},H.Parser=I,H.parser=I.parse,H.Renderer=N,H.TextRenderer=Y,H.Lexer=$,H.lexer=$.lex,H.Tokenizer=T,H.Slugger=P,H.parse=H;var j=H.options,W=H.setOptions,z=H.use,U=H.walkTokens,V=H.parseInline,q=H,G=I.parse,K=$.lex;t.TU=H}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={id:e,loaded:!1,exports:{}};return t[e].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.m=t,r.amdD=function(){throw new Error(\"define cannot be used indirect\")},e=[],r.O=(t,n,o,i)=>{if(!n){var s=1/0;for(u=0;u<e.length;u++){for(var[n,o,i]=e[u],a=!0,l=0;l<n.length;l++)(!1&i||s>=i)&&Object.keys(r.O).every((e=>r.O[e](n[l])))?n.splice(l--,1):(a=!1,i<s&&(s=i));if(a){e.splice(u--,1);var c=o();void 0!==c&&(t=c)}}return t}i=i||0;for(var u=e.length;u>0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,o,i]},r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e={851:0,639:0};r.O.j=t=>0===e[t];var t=(t,n)=>{var o,i,[s,a,l]=n,c=0;if(s.some((t=>0!==e[t]))){for(o in a)r.o(a,o)&&(r.m[o]=a[o]);if(l)var u=l(r)}for(t&&t(n);c<s.length;c++)i=s[c],r.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return r.O(u)},n=self.webpackChunk=self.webpackChunk||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),r.O(void 0,[639],(()=>r(1818)));var o=r.O(void 0,[639],(()=>r(1102)));o=r.O(o)})();"
  },
  {
    "path": "publishable/assets/js/app.js.LICENSE.txt",
    "content": "/*!\n  * Bootstrap Datetime Picker v4.17.49\n  * Copyright 2015-2020 Jonathan Peterson\n  * Licensed under MIT (https://github.com/Eonasdan/bootstrap-datetimepicker/blob/master/LICENSE)\n  */\n\n/*!\n * Cropper.js v1.5.12\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2021-06-12T08:00:17.411Z\n */\n\n/*!\n * Nestable jQuery Plugin - Copyright (c) 2014 Ramon Smit - https://github.com/RamonSmit/Nestable\n */\n\n/*!\n * Select2 4.0.13\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n\n/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n\n/*!\n * Vue.js v2.7.13\n * (c) 2014-2022 Evan You\n * Released under the MIT License.\n */\n\n/*!\n * jQuery JavaScript Library v3.6.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2022-08-26T17:52Z\n */\n\n/*!\n * perfect-scrollbar v1.5.3\n * Copyright 2021 Hyunje Jun, MDBootstrap and Contributors\n * Licensed under MIT\n */\n\n/*! ========================================================================\n * Bootstrap Toggle: bootstrap-toggle.js v2.2.0\n * http://www.bootstraptoggle.com\n * ========================================================================\n * Copyright 2014 Min Hur, The New York Times Company\n * Licensed under MIT\n * ======================================================================== */\n\n/*! DataTables 1.10.18\n * ©2008-2018 SpryMedia Ltd - datatables.net/license\n */\n\n//! moment.js\n\n//! moment.js locale configuration\n"
  },
  {
    "path": "publishable/assets/js/icons/default/icons.js",
    "content": "tinymce.IconManager.add('default', {\n  icons: {\n    'accessibility-check': '<svg width=\"24\" height=\"24\"><path d=\"M12 2a2 2 0 0 1 2 2 2 2 0 0 1-2 2 2 2 0 0 1-2-2c0-1.1.9-2 2-2Zm8 7h-5v12c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-5c0-.6-.4-1-1-1a1 1 0 0 0-1 1v5c0 .6-.4 1-1 1a1 1 0 0 1-1-1V9H4a1 1 0 1 1 0-2h16c.6 0 1 .4 1 1s-.4 1-1 1Z\" fill-rule=\"nonzero\"/></svg>',\n    'action-next': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M5.7 7.3a1 1 0 0 0-1.4 1.4l7.7 7.7 7.7-7.7a1 1 0 1 0-1.4-1.4L12 13.6 5.7 7.3Z\"/></svg>',\n    'action-prev': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M18.3 15.7a1 1 0 0 0 1.4-1.4L12 6.6l-7.7 7.7a1 1 0 0 0 1.4 1.4L12 9.4l6.3 6.3Z\"/></svg>',\n    'addtag': '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15 5a2 2 0 0 1 1.6.8L21 12l-4.4 6.2a2 2 0 0 1-1.6.8h-3v-2h3l3.5-5L15 7H5v3H3V7c0-1.1.9-2 2-2h10Z\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6 12a1 1 0 0 0-1 1v2H3a1 1 0 1 0 0 2h2v2a1 1 0 1 0 2 0v-2h2a1 1 0 1 0 0-2H7v-2c0-.6-.4-1-1-1Z\"/></svg>',\n    'align-center': '<svg width=\"24\" height=\"24\"><path d=\"M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2Zm3 4h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 1 1 0-2Zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2Zm-3-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2Z\" fill-rule=\"evenodd\"/></svg>',\n    'align-justify': '<svg width=\"24\" height=\"24\"><path d=\"M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2Zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2Zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2Zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2Z\" fill-rule=\"evenodd\"/></svg>',\n    'align-left': '<svg width=\"24\" height=\"24\"><path d=\"M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2Zm0 4h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2Zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2Zm0-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2Z\" fill-rule=\"evenodd\"/></svg>',\n    'align-none': '<svg width=\"24\" height=\"24\"><path d=\"M14.2 5 13 7H5a1 1 0 1 1 0-2h9.2Zm4 0h.8a1 1 0 0 1 0 2h-2l1.2-2Zm-6.4 4-1.2 2H5a1 1 0 0 1 0-2h6.8Zm4 0H19a1 1 0 0 1 0 2h-4.4l1.2-2Zm-6.4 4-1.2 2H5a1 1 0 0 1 0-2h4.4Zm4 0H19a1 1 0 0 1 0 2h-6.8l1.2-2ZM7 17l-1.2 2H5a1 1 0 0 1 0-2h2Zm4 0h8a1 1 0 0 1 0 2H9.8l1.2-2Zm5.2-13.5 1.3.7-9.7 16.3-1.3-.7 9.7-16.3Z\" fill-rule=\"evenodd\"/></svg>',\n    'align-right': '<svg width=\"24\" height=\"24\"><path d=\"M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2Zm6 4h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Zm-6-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2Z\" fill-rule=\"evenodd\"/></svg>',\n    'arrow-left': '<svg width=\"24\" height=\"24\"><path d=\"m5.6 13 12 6a1 1 0 0 0 1.4-1V6a1 1 0 0 0-1.4-.9l-12 6a1 1 0 0 0 0 1.8Z\" fill-rule=\"evenodd\"/></svg>',\n    'arrow-right': '<svg width=\"24\" height=\"24\"><path d=\"m18.5 13-12 6A1 1 0 0 1 5 18V6a1 1 0 0 1 1.4-.9l12 6a1 1 0 0 1 0 1.8Z\" fill-rule=\"evenodd\"/></svg>',\n    'bold': '<svg width=\"24\" height=\"24\"><path d=\"M7.8 19c-.3 0-.5 0-.6-.2l-.2-.5V5.7c0-.2 0-.4.2-.5l.6-.2h5c1.5 0 2.7.3 3.5 1 .7.6 1.1 1.4 1.1 2.5a3 3 0 0 1-.6 1.9c-.4.6-1 1-1.6 1.2.4.1.9.3 1.3.6s.8.7 1 1.2c.4.4.5 1 .5 1.6 0 1.3-.4 2.3-1.3 3-.8.7-2.1 1-3.8 1H7.8Zm5-8.3c.6 0 1.2-.1 1.6-.5.4-.3.6-.7.6-1.3 0-1.1-.8-1.7-2.3-1.7H9.3v3.5h3.4Zm.5 6c.7 0 1.3-.1 1.7-.4.4-.4.6-.9.6-1.5s-.2-1-.7-1.4c-.4-.3-1-.4-2-.4H9.4v3.8h4Z\" fill-rule=\"evenodd\"/></svg>',\n    'bookmark': '<svg width=\"24\" height=\"24\"><path d=\"M6 4v17l6-4 6 4V4c0-.6-.4-1-1-1H7a1 1 0 0 0-1 1Z\" fill-rule=\"nonzero\"/></svg>',\n    'border-style': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><rect width=\"18\" height=\"2\" x=\"3\" y=\"6\" rx=\"1\"/><rect width=\"2.8\" height=\"2\" x=\"3\" y=\"16\" rx=\"1\"/><rect width=\"2.8\" height=\"2\" x=\"6.8\" y=\"16\" rx=\"1\"/><rect width=\"2.8\" height=\"2\" x=\"10.6\" y=\"16\" rx=\"1\"/><rect width=\"2.8\" height=\"2\" x=\"14.4\" y=\"16\" rx=\"1\"/><rect width=\"2.8\" height=\"2\" x=\"18.2\" y=\"16\" rx=\"1\"/><rect width=\"8\" height=\"2\" x=\"3\" y=\"11\" rx=\"1\"/><rect width=\"8\" height=\"2\" x=\"13\" y=\"11\" rx=\"1\"/></g></svg>',\n    'border-width': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><rect width=\"18\" height=\"5\" x=\"3\" y=\"5\" rx=\"1\"/><rect width=\"18\" height=\"3.5\" x=\"3\" y=\"11.5\" rx=\"1\"/><rect width=\"18\" height=\"2\" x=\"3\" y=\"17\" rx=\"1\"/></g></svg>',\n    'brightness': '<svg width=\"24\" height=\"24\"><path d=\"M12 17c.3 0 .5.1.7.3.2.2.3.4.3.7v1c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7v-1c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3Zm0-10a1 1 0 0 1-.7-.3A1 1 0 0 1 11 6V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v1c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3Zm7 4c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-1a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h1ZM7 12c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3H5a1 1 0 0 1-.7-.3A1 1 0 0 1 4 12c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h1c.3 0 .5.1.7.3.2.2.3.4.3.7Zm10 3.5.7.8c.2.1.3.4.3.6 0 .3-.1.6-.3.8a1 1 0 0 1-.8.3 1 1 0 0 1-.6-.3l-.8-.7a1 1 0 0 1-.3-.8c0-.2.1-.5.3-.7a1 1 0 0 1 1.4 0Zm-10-7-.7-.8a1 1 0 0 1-.3-.6c0-.3.1-.6.3-.8.2-.2.5-.3.8-.3.2 0 .5.1.7.3l.7.7c.2.2.3.5.3.8 0 .2-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.8-.3Zm10 0a1 1 0 0 1-.8.3 1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.6.3-.8l.8-.7c.1-.2.4-.3.6-.3.3 0 .6.1.8.3.2.2.3.5.3.8 0 .2-.1.5-.3.7l-.7.7Zm-10 7c.2-.2.5-.3.8-.3.2 0 .5.1.7.3a1 1 0 0 1 0 1.4l-.8.8a1 1 0 0 1-.6.3 1 1 0 0 1-.8-.3 1 1 0 0 1-.3-.8c0-.2.1-.5.3-.6l.7-.8ZM12 8a4 4 0 0 1 3.7 2.4 4 4 0 0 1 0 3.2A4 4 0 0 1 12 16a4 4 0 0 1-3.7-2.4 4 4 0 0 1 0-3.2A4 4 0 0 1 12 8Zm0 6.5c.7 0 1.3-.2 1.8-.7.5-.5.7-1.1.7-1.8s-.2-1.3-.7-1.8c-.5-.5-1.1-.7-1.8-.7s-1.3.2-1.8.7c-.5.5-.7 1.1-.7 1.8s.2 1.3.7 1.8c.5.5 1.1.7 1.8.7Z\" fill-rule=\"evenodd\"/></svg>',\n    'browse': '<svg width=\"24\" height=\"24\"><path d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-4v-2h4V8H5v10h4v2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14Zm-8 9.4-2.3 2.3a1 1 0 1 1-1.4-1.4l4-4a1 1 0 0 1 1.4 0l4 4a1 1 0 0 1-1.4 1.4L13 13.4V20a1 1 0 0 1-2 0v-6.6Z\" fill-rule=\"nonzero\"/></svg>',\n    'cancel': '<svg width=\"24\" height=\"24\"><path d=\"M12 4.6a7.4 7.4 0 1 1 0 14.8 7.4 7.4 0 0 1 0-14.8ZM12 3a9 9 0 1 0 0 18 9 9 0 0 0 0-18Zm0 8L14.8 8l1 1.1-2.7 2.8 2.7 2.7-1.1 1.1-2.7-2.7-2.7 2.7-1-1.1 2.6-2.7-2.7-2.7 1-1.1 2.8 2.7Z\" fill-rule=\"nonzero\"/></svg>',\n    'cell-background-color': '<svg width=\"24\" height=\"24\"><path d=\"m15.7 2 1.6 1.6-2.7 2.6 5.9 5.8c.7.7.7 1.7 0 2.4l-6.3 6.1a1.7 1.7 0 0 1-2.4 0l-6.3-6.1c-.7-.7-.7-1.7 0-2.4L15.7 2ZM18 12l-4.5-4L9 12h9ZM4 16s2 2.4 2 3.8C6 21 5.1 22 4 22s-2-1-2-2.2C2 18.4 4 16 4 16Z\"/></svg>',\n    'cell-border-color': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path fill-rule=\"nonzero\" d=\"M5 13v5h2v2H5a2 2 0 0 1-2-2v-5h2zm8-7V4h6a2 2 0 0 1 2 2h-8z\" opacity=\".2\"/><path fill-rule=\"nonzero\" d=\"M13 4v2H5v7H3V6c0-1.1.9-2 2-2h8zm-2.6 14.1.1-.1.1.1.2.3.2.2.2.2c.4.6.8 1.2.8 1.7 0 .8-.7 1.5-1.5 1.5S9 21.3 9 20.5c0-.5.4-1.1.8-1.7l.2-.2.2-.2.2-.3z\"/><path d=\"m13 11-2 2H5v-2h6V6h2z\"/><path fill-rule=\"nonzero\" d=\"m18.4 8 1 1-1.8 1.9 4 4c.5.4.5 1.1 0 1.6l-4.3 4.2a1.2 1.2 0 0 1-1.6 0l-4.4-4.2c-.4-.5-.4-1.2 0-1.7l7-6.8Zm1.6 7-3-3-3 3h6Z\"/></g></svg>',\n    'change-case': '<svg width=\"24\" height=\"24\"><path d=\"M18.4 18.2v-.6c-.5.8-1.3 1.2-2.4 1.2-2.2 0-3.3-1.6-3.3-4.8 0-3.1 1-4.7 3.3-4.7 1.1 0 1.8.3 2.4 1.1v-.6c0-.5.4-.8.8-.8s.8.3.8.8v8.4c0 .5-.4.8-.8.8a.8.8 0 0 1-.8-.8zm-2-7.4c-1.3 0-1.8.9-1.8 3.2 0 2.4.5 3.3 1.7 3.3 1.3 0 1.8-.9 1.8-3.2 0-2.4-.5-3.3-1.7-3.3zM10 15.7H5.5l-.8 2.6a1 1 0 0 1-1 .7h-.2a.7.7 0 0 1-.7-1l4-12a1 1 0 0 1 2 0l4 12a.7.7 0 0 1-.8 1h-.2a1 1 0 0 1-1-.7l-.8-2.6zm-.3-1.5-2-6.5-1.9 6.5h3.9z\" fill-rule=\"evenodd\"/></svg>',\n    'character-count': '<svg width=\"24\" height=\"24\"><path d=\"M4 11.5h16v1H4v-1Zm4.8-6.8V10H7.7V5.8h-1v-1h2ZM11 8.3V9h2v1h-3V7.7l2-1v-.9h-2v-1h3v2.4l-2 1Zm6.3-3.4V10h-3.1V9h2.1V8h-2.1V6.8h2.1v-1h-2.1v-1h3.1ZM5.8 16.4c0-.5.2-.8.5-1 .2-.2.6-.3 1.2-.3l.8.1c.2 0 .4.2.5.3l.4.4v2.8l.2.3H8.2V18.7l-.6.3H7c-.4 0-.7 0-1-.2a1 1 0 0 1-.3-.9c0-.3 0-.6.3-.8.3-.2.7-.4 1.2-.4l.6-.2h.3v-.2l-.1-.2a.8.8 0 0 0-.5-.1 1 1 0 0 0-.4 0l-.3.4h-1Zm2.3.8h-.2l-.2.1-.4.1a1 1 0 0 0-.4.2l-.2.2.1.3.5.1h.4l.4-.4v-.6Zm2-3.4h1.2v1.7l.5-.3h.5c.5 0 .9.1 1.2.5.3.4.5.8.5 1.4 0 .6-.2 1.1-.5 1.5-.3.4-.7.6-1.3.6l-.6-.1-.4-.4v.4h-1.1v-5.4Zm1.1 3.3c0 .3 0 .6.2.8a.7.7 0 0 0 1.2 0l.2-.8c0-.4 0-.6-.2-.8a.7.7 0 0 0-.6-.3l-.6.3-.2.8Zm6.1-.5c0-.2 0-.3-.2-.4a.8.8 0 0 0-.5-.2c-.3 0-.5.1-.6.3l-.2.9c0 .3 0 .6.2.8.1.2.3.3.6.3.2 0 .4 0 .5-.2l.2-.4h1.1c0 .5-.3.8-.6 1.1a2 2 0 0 1-1.3.4c-.5 0-1-.2-1.3-.6a2 2 0 0 1-.5-1.4c0-.6.1-1.1.5-1.5.3-.4.8-.5 1.4-.5.5 0 1 0 1.2.3.4.3.5.7.5 1.2h-1v-.1Z\" fill-rule=\"evenodd\"/></svg>',\n    'checklist-rtl': '<svg width=\"24\" height=\"24\"><path d=\"M5 17h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2zm14.2 11c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 20c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 14c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L18 8c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8z\" fill-rule=\"evenodd\"/></svg>',\n    'checklist': '<svg width=\"24\" height=\"24\"><path d=\"M11 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Zm0-6h8a1 1 0 0 1 0 2h-8a1 1 0 0 1 0-2ZM7.2 16c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 20c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8Zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 14c-.2.3-.7.4-1 0l-1.3-1.3a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8Zm0-6c.2-.4.6-.5.9-.3.3.2.4.6.2 1L6 8c-.2.3-.7.4-1 0L3.8 6.9a.7.7 0 0 1 0-1c.3-.2.7-.2 1 0l.7.9 1.7-2.8Z\" fill-rule=\"evenodd\"/></svg>',\n    'checkmark': '<svg width=\"24\" height=\"24\"><path d=\"M18.2 5.4a1 1 0 0 1 1.6 1.2l-8 12a1 1 0 0 1-1.5.1l-5-5a1 1 0 1 1 1.4-1.4l4.1 4.1 7.4-11Z\" fill-rule=\"nonzero\"/></svg>',\n    'chevron-down': '<svg width=\"10\" height=\"10\"><path d=\"M8.7 2.2c.3-.3.8-.3 1 0 .4.4.4.9 0 1.2L5.7 7.8c-.3.3-.9.3-1.2 0L.2 3.4a.8.8 0 0 1 0-1.2c.3-.3.8-.3 1.1 0L5 6l3.7-3.8Z\" fill-rule=\"nonzero\"/></svg>',\n    'chevron-left': '<svg width=\"10\" height=\"10\"><path d=\"M7.8 1.3 4 5l3.8 3.7c.3.3.3.8 0 1-.4.4-.9.4-1.2 0L2.2 5.7a.8.8 0 0 1 0-1.2L6.6.2C7 0 7.4 0 7.8.2c.3.3.3.8 0 1.1Z\" fill-rule=\"nonzero\"/></svg>',\n    'chevron-right': '<svg width=\"10\" height=\"10\"><path d=\"M2.2 1.3a.8.8 0 0 1 0-1c.4-.4.9-.4 1.2 0l4.4 4.1c.3.4.3.9 0 1.2L3.4 9.8c-.3.3-.8.3-1.2 0a.8.8 0 0 1 0-1.1L6 5 2.2 1.3Z\" fill-rule=\"nonzero\"/></svg>',\n    'chevron-up': '<svg width=\"10\" height=\"10\"><path d=\"M8.7 7.8 5 4 1.3 7.8c-.3.3-.8.3-1 0a.8.8 0 0 1 0-1.2l4.1-4.4c.3-.3.9-.3 1.2 0l4.2 4.4c.3.3.3.9 0 1.2-.3.3-.8.3-1.1 0Z\" fill-rule=\"nonzero\"/></svg>',\n    'close': '<svg width=\"24\" height=\"24\"><path d=\"M17.3 8.2 13.4 12l3.9 3.8a1 1 0 0 1-1.5 1.5L12 13.4l-3.8 3.9a1 1 0 0 1-1.5-1.5l3.9-3.8-3.9-3.8a1 1 0 0 1 1.5-1.5l3.8 3.9 3.8-3.9a1 1 0 0 1 1.5 1.5Z\" fill-rule=\"evenodd\"/></svg>',\n    'code-sample': '<svg width=\"24\" height=\"26\"><path d=\"M7.1 11a2.8 2.8 0 0 1-.8 2 2.8 2.8 0 0 1 .8 2v1.7c0 .3.1.6.4.8.2.3.5.4.8.4.3 0 .4.2.4.4v.8c0 .2-.1.4-.4.4-.7 0-1.4-.3-2-.8-.5-.6-.8-1.3-.8-2V15c0-.3-.1-.6-.4-.8-.2-.3-.5-.4-.8-.4a.4.4 0 0 1-.4-.4v-.8c0-.2.2-.4.4-.4.3 0 .6-.1.8-.4.3-.2.4-.5.4-.8V9.3c0-.7.3-1.4.8-2 .6-.5 1.3-.8 2-.8.3 0 .4.2.4.4v.8c0 .2-.1.4-.4.4-.3 0-.6.1-.8.4-.3.2-.4.5-.4.8V11Zm9.8 0V9.3c0-.3-.1-.6-.4-.8-.2-.3-.5-.4-.8-.4a.4.4 0 0 1-.4-.4V7c0-.2.1-.4.4-.4.7 0 1.4.3 2 .8.5.6.8 1.3.8 2V11c0 .3.1.6.4.8.2.3.5.4.8.4.2 0 .4.2.4.4v.8c0 .2-.2.4-.4.4-.3 0-.6.1-.8.4-.3.2-.4.5-.4.8v1.7c0 .7-.3 1.4-.8 2-.6.5-1.3.8-2 .8a.4.4 0 0 1-.4-.4v-.8c0-.2.1-.4.4-.4.3 0 .6-.1.8-.4.3-.2.4-.5.4-.8V15a2.8 2.8 0 0 1 .8-2 2.8 2.8 0 0 1-.8-2Zm-3.3-.4c0 .4-.1.8-.5 1.1-.3.3-.7.5-1.1.5-.4 0-.8-.2-1.1-.5-.4-.3-.5-.7-.5-1.1 0-.5.1-.9.5-1.2.3-.3.7-.4 1.1-.4.4 0 .8.1 1.1.4.4.3.5.7.5 1.2ZM12 13c.4 0 .8.1 1.1.5.4.3.5.7.5 1.1 0 1-.1 1.6-.5 2a3 3 0 0 1-1.1 1c-.4.3-.8.4-1.1.4a.5.5 0 0 1-.5-.5V17a3 3 0 0 0 1-.2l.6-.6c-.6 0-1-.2-1.3-.5-.2-.3-.3-.7-.3-1 0-.5.1-1 .5-1.2.3-.4.7-.5 1.1-.5Z\" fill-rule=\"evenodd\"/></svg>',\n    'color-levels': '<svg width=\"24\" height=\"24\"><path d=\"M17.5 11.4A9 9 0 0 1 18 14c0 .5 0 1-.2 1.4 0 .4-.3.9-.5 1.3a6.2 6.2 0 0 1-3.7 3 5.7 5.7 0 0 1-3.2 0A5.9 5.9 0 0 1 7.6 18a6.2 6.2 0 0 1-1.4-2.6 6.7 6.7 0 0 1 0-2.8c0-.4.1-.9.3-1.3a13.6 13.6 0 0 1 2.3-4A20 20 0 0 1 12 4a26.4 26.4 0 0 1 3.2 3.4 18.2 18.2 0 0 1 2.3 4Zm-2 4.5c.4-.7.5-1.4.5-2a7.3 7.3 0 0 0-1-3.2c.2.6.2 1.2.2 1.9a4.5 4.5 0 0 1-1.3 3 5.3 5.3 0 0 1-2.3 1.5 4.9 4.9 0 0 1-2 .1 4.3 4.3 0 0 0 2.4.8 4 4 0 0 0 2-.6 4 4 0 0 0 1.5-1.5Z\" fill-rule=\"evenodd\"/></svg>',\n    'color-picker': '<svg width=\"24\" height=\"24\"><path d=\"M12 3a9 9 0 0 0 0 18 1.5 1.5 0 0 0 1.1-2.5c-.2-.3-.4-.6-.4-1 0-.8.7-1.5 1.5-1.5H16a5 5 0 0 0 5-5c0-4.4-4-8-9-8Zm-5.5 9a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Zm3-4a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Zm5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Zm3 4a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3Z\" fill-rule=\"nonzero\"/></svg>',\n    'color-swatch-remove-color': '<svg width=\"24\" height=\"24\"><path stroke=\"#000\" stroke-width=\"2\" d=\"M21 3 3 21\" fill-rule=\"evenodd\"/></svg>',\n    'color-swatch': '<svg width=\"24\" height=\"24\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"1\" fill-rule=\"evenodd\"/></svg>',\n    'comment-add': '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"m9 19 3-2h7c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H5a1 1 0 0 0-1 1v10c0 .6.4 1 1 1h4v2Zm-2 4v-4H5a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3h-6.4L7 23Z\"/><path d=\"M13 10h2a1 1 0 0 1 0 2h-2v2a1 1 0 0 1-2 0v-2H9a1 1 0 0 1 0-2h2V8a1 1 0 0 1 2 0v2Z\"/></g></svg>',\n    'comment': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"m9 19 3-2h7c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H5a1 1 0 0 0-1 1v10c0 .6.4 1 1 1h4v2Zm-2 4v-4H5a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3h-6.4L7 23Z\"/></svg>',\n    'contrast': '<svg width=\"24\" height=\"24\"><path d=\"M12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4Zm-6 8a6 6 0 0 0 6 6V6a6 6 0 0 0-6 6Z\" fill-rule=\"evenodd\"/></svg>',\n    'copy': '<svg width=\"24\" height=\"24\"><path d=\"M16 3H6a2 2 0 0 0-2 2v11h2V5h10V3Zm1 4a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2V9c0-1.2.9-2 2-2h7Zm0 12V9h-7v10h7Z\" fill-rule=\"nonzero\"/></svg>',\n    'crop': '<svg width=\"24\" height=\"24\"><path d=\"M17 8v7h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v2c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-2H7V9H5a1 1 0 1 1 0-2h2V5c0-.6.4-1 1-1s1 .4 1 1v2h7l3-3 1 1-3 3ZM9 9v5l5-5H9Zm1 6h5v-5l-5 5Z\" fill-rule=\"evenodd\"/></svg>',\n    'cut-column': '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M7.2 4.5c.9 0 1.6.4 2.2 1A3.7 3.7 0 0 1 10.5 8v.5l1 1 4-4 1-.5a3.3 3.3 0 0 1 2 0c.4 0 .7.3 1 .5L17 8h4v13h-6V10l-1.5 1.5.5.5v4l-2.5-2.5-1 1v.5c0 .4 0 .8-.3 1.2-.2.5-.4.9-.8 1.2-.6.7-1.3 1-2.2 1-.8.2-1.5 0-2-.6l-.5-.8-.2-1c0-.4 0-.8.3-1.2A3.9 3.9 0 0 1 7 12.7c.5-.2 1-.3 1.5-.2l1-1-1-1c-.5 0-1 0-1.5-.2-.5-.1-1-.4-1.4-.9-.4-.3-.6-.7-.8-1.2L4.5 7c0-.4 0-.7.2-1 0-.3.3-.6.5-.8.5-.5 1.2-.8 2-.7Zm12.3 5h-3v10h3v-10ZM8 13.8h-.3l-.4.2a2.8 2.8 0 0 0-.7.4v.1a2.8 2.8 0 0 0-.6.8l-.1.4v.7l.2.5.5.2h.7a2.6 2.6 0 0 0 .8-.3 2.4 2.4 0 0 0 .7-.7 2.5 2.5 0 0 0 .3-.8 1.5 1.5 0 0 0 0-.8 1 1 0 0 0-.2-.4 1 1 0 0 0-.5-.2H8Zm3.5-3.7c-.4 0-.7.1-1 .4-.3.3-.4.6-.4 1s.1.7.4 1c.3.3.6.4 1 .4s.7-.1 1-.4c.3-.3.4-.6.4-1s-.1-.7-.4-1c-.3-.3-.6-.4-1-.4ZM7 5.8h-.4a1 1 0 0 0-.5.3 1 1 0 0 0-.2.5v.7a2.5 2.5 0 0 0 .3.8l.2.3h.1l.4.4.4.2.4.1h.7L9 9l.2-.4a1.6 1.6 0 0 0 0-.8 2.6 2.6 0 0 0-.3-.8A2.5 2.5 0 0 0 7.7 6l-.4-.1H7Z\"/></svg>',\n    'cut-row': '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M22 3v5H9l3 3 2-2h4l-4 4 1 1h.5c.4 0 .8 0 1.2.3.5.2.9.4 1.2.8.7.6 1 1.3 1 2.2.2.8 0 1.5-.6 2l-.8.5-1 .2c-.4 0-.8 0-1.2-.3a3.9 3.9 0 0 1-2.1-2.2c-.2-.5-.3-1-.2-1.5l-1-1-1 1c0 .5 0 1-.2 1.5-.1.5-.4 1-.9 1.4-.3.4-.7.6-1.2.8l-1.2.3c-.4 0-.7 0-1-.2-.3 0-.6-.3-.8-.5-.5-.5-.8-1.2-.7-2 0-.9.4-1.6 1-2.2A3.7 3.7 0 0 1 8.6 14H9l1-1-4-4-.5-1a3.3 3.3 0 0 1 0-2c0-.4.3-.7.5-1l2 2V3h14ZM8.5 15.3h-.3a2.6 2.6 0 0 0-.8.4 2.5 2.5 0 0 0-.9 1.1l-.1.4v.7l.2.5.5.2h.7a2.5 2.5 0 0 0 .8-.3L9 18V18l.4-.4.2-.4.1-.4v-.7a1 1 0 0 0-.2-.5 1 1 0 0 0-.4-.2h-.5Zm7 0H15a1 1 0 0 0-.4.3 1 1 0 0 0-.2.5 1.5 1.5 0 0 0 0 .7v.4a2.8 2.8 0 0 0 .5.7h.1a2.8 2.8 0 0 0 .8.6l.4.1h.7l.5-.2.2-.5v-.7a2.6 2.6 0 0 0-.3-.8 2.4 2.4 0 0 0-.7-.7 2.5 2.5 0 0 0-.8-.3h-.3ZM12 11.6c-.4 0-.7.1-1 .4-.3.3-.4.6-.4 1s.1.7.4 1c.3.3.6.4 1 .4s.7-.1 1-.4c.3-.3.4-.6.4-1s-.1-.7-.4-1c-.3-.3-.6-.4-1-.4Zm8.5-7.1h-11v2h11v-2Z\"/></svg>',\n    'cut': '<svg width=\"24\" height=\"24\"><path d=\"M18 15c.6.7 1 1.4 1 2.3 0 .8-.2 1.5-.7 2l-.8.5-1 .2c-.4 0-.8 0-1.2-.3a3.9 3.9 0 0 1-2.1-2.2c-.2-.5-.3-1-.2-1.5l-1-1-1 1c0 .5 0 1-.2 1.5-.1.5-.4 1-.9 1.4-.3.4-.7.6-1.2.8l-1.2.3c-.4 0-.7 0-1-.2-.3 0-.6-.3-.8-.5-.5-.5-.8-1.2-.7-2 0-.9.4-1.6 1-2.2A3.7 3.7 0 0 1 8.6 14H9l1-1-4-4-.5-1a3.3 3.3 0 0 1 0-2c0-.4.3-.7.5-1l6 6 6-6 .5 1a3.3 3.3 0 0 1 0 2c0 .4-.3.7-.5 1l-4 4 1 1h.5c.4 0 .8 0 1.2.3.5.2.9.4 1.2.8Zm-8.5 2.2.1-.4v-.7a1 1 0 0 0-.2-.5 1 1 0 0 0-.4-.2 1.6 1.6 0 0 0-.8 0 2.6 2.6 0 0 0-.8.3 2.5 2.5 0 0 0-.9 1.1l-.1.4v.7l.2.5.5.2h.7a2.5 2.5 0 0 0 .8-.3 2.8 2.8 0 0 0 1-1Zm2.5-2.8c.4 0 .7-.1 1-.4.3-.3.4-.6.4-1s-.1-.7-.4-1c-.3-.3-.6-.4-1-.4s-.7.1-1 .4c-.3.3-.4.6-.4 1s.1.7.4 1c.3.3.6.4 1 .4Zm5.4 4 .2-.5v-.7a2.6 2.6 0 0 0-.3-.8 2.4 2.4 0 0 0-.7-.7 2.5 2.5 0 0 0-.8-.3 1.5 1.5 0 0 0-.8 0 1 1 0 0 0-.4.2 1 1 0 0 0-.2.5 1.5 1.5 0 0 0 0 .7v.4l.3.4.3.4a2.8 2.8 0 0 0 .8.5l.4.1h.7l.5-.2Z\" fill-rule=\"evenodd\"/></svg>',\n    'document-properties': '<svg width=\"24\" height=\"24\"><path d=\"M14.4 3H7a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V7.6L14.4 3ZM17 19H7V5h6v4h4v10Z\" fill-rule=\"nonzero\"/></svg>',\n    'drag': '<svg width=\"24\" height=\"24\"><path d=\"M13 5h2v2h-2V5Zm0 4h2v2h-2V9ZM9 9h2v2H9V9Zm4 4h2v2h-2v-2Zm-4 0h2v2H9v-2Zm0 4h2v2H9v-2Zm4 0h2v2h-2v-2ZM9 5h2v2H9V5Z\" fill-rule=\"evenodd\"/></svg>',\n    'duplicate-column': '<svg width=\"24\" height=\"24\"><path d=\"M17 6v16h-7V6h7Zm-2 2h-3v12h3V8Zm-2-6v2H8v15H6V2h7Z\"/></svg>',\n    'duplicate-row': '<svg width=\"24\" height=\"24\"><path d=\"M22 11v7H6v-7h16Zm-2 2H8v3h12v-3Zm-1-6v2H4v5H2V7h17Z\"/></svg>',\n    'duplicate': '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"M16 3v2H6v11H4V5c0-1.1.9-2 2-2h10Zm3 8h-2V9h-7v10h9a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2V9c0-1.2.9-2 2-2h7a2 2 0 0 1 2 2v2Z\"/><path d=\"M17 14h1a1 1 0 0 1 0 2h-1v1a1 1 0 0 1-2 0v-1h-1a1 1 0 0 1 0-2h1v-1a1 1 0 0 1 2 0v1Z\"/></g></svg>',\n    'edit-block': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"m19.8 8.8-9.4 9.4c-.2.2-.5.4-.9.4l-5.4 1.2 1.2-5.4.5-.8 9.4-9.4c.7-.7 1.8-.7 2.5 0l2.1 2.1c.7.7.7 1.8 0 2.5Zm-2-.2 1-.9v-.3l-2.2-2.2a.3.3 0 0 0-.3 0l-1 1L18 8.5Zm-1 1-2.5-2.4-6 6 2.5 2.5 6-6Zm-7 7.1-2.6-2.4-.3.3-.1.2-.7 3 3.1-.6h.1l.4-.5Z\"/></svg>',\n    'edit-image': '<svg width=\"24\" height=\"24\"><path d=\"M18 16h2V7a2 2 0 0 0-2-2H7v2h11v9ZM6 17h15a1 1 0 0 1 0 2h-1v1a1 1 0 0 1-2 0v-1H6a2 2 0 0 1-2-2V7H3a1 1 0 1 1 0-2h1V4a1 1 0 1 1 2 0v13Zm3-5.3 1.3 2 3-4.7 3.7 6H7l2-3.3Z\" fill-rule=\"nonzero\"/></svg>',\n    'embed-page': '<svg width=\"24\" height=\"24\"><path d=\"M19 6V5H5v14h2A13 13 0 0 1 19 6Zm0 1.4c-.8.8-1.6 2.4-2.2 4.6H19V7.4Zm0 5.6h-2.4c-.4 1.8-.6 3.8-.6 6h3v-6Zm-4 6c0-2.2.2-4.2.6-6H13c-.7 1.8-1.1 3.8-1.1 6h3Zm-4 0c0-2.2.4-4.2 1-6H9.6A12 12 0 0 0 8 19h3ZM4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1Zm11.8 9c.4-1.9 1-3.4 1.8-4.5a9.2 9.2 0 0 0-4 4.5h2.2Zm-3.4 0a12 12 0 0 1 2.8-4 12 12 0 0 0-5 4h2.2Z\" fill-rule=\"nonzero\"/></svg>',\n    'embed': '<svg width=\"24\" height=\"24\"><path d=\"M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1Zm1 2v14h14V5H5Zm4.8 2.6 5.6 4a.5.5 0 0 1 0 .8l-5.6 4A.5.5 0 0 1 9 16V8a.5.5 0 0 1 .8-.4Z\" fill-rule=\"nonzero\"/></svg>',\n    'emoji': '<svg width=\"24\" height=\"24\"><path d=\"M9 11c.6 0 1-.4 1-1s-.4-1-1-1a1 1 0 0 0-1 1c0 .6.4 1 1 1Zm6 0c.6 0 1-.4 1-1s-.4-1-1-1a1 1 0 0 0-1 1c0 .6.4 1 1 1Zm-3 5.5c2.1 0 4-1.5 4.4-3.5H7.6c.5 2 2.3 3.5 4.4 3.5ZM12 4a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm0 14.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13Z\" fill-rule=\"nonzero\"/></svg>',\n    'export': '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"M14.4 3 18 7v1h-5V5H7v14h9a1 1 0 0 1 2 0c0 1-.8 2-1.9 2H7c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2h7.5Z\"/><path d=\"M18.1 12c.5 0 .9.4.9 1 0 .5-.3 1-.8 1h-7.3c-.5 0-.9-.4-.9-1 0-.5.3-1 .8-1h7.3Z\"/><path d=\"M16.4 9.2a1 1 0 0 1 1.4.2l2.4 3.6-2.4 3.6a1 1 0 0 1-1.7-1v-.2l1.7-2.4-1.6-2.4a1 1 0 0 1 .2-1.4Z\"/></g></svg>',\n    'fill': '<svg width=\"24\" height=\"26\"><path d=\"m16.6 12-9-9-1.4 1.4 2.4 2.4-5.2 5.1c-.5.6-.5 1.6 0 2.2L9 19.6a1.5 1.5 0 0 0 2.2 0l5.5-5.5c.5-.6.5-1.6 0-2.2ZM5.2 13 10 8.2l4.8 4.8H5.2ZM19 14.5s-2 2.2-2 3.5c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.3-2-3.5-2-3.5Z\" fill-rule=\"nonzero\"/></svg>',\n    'flip-horizontally': '<svg width=\"24\" height=\"24\"><path d=\"M14 19h2v-2h-2v2Zm4-8h2V9h-2v2ZM4 7v10c0 1.1.9 2 2 2h3v-2H6V7h3V5H6a2 2 0 0 0-2 2Zm14-2v2h2a2 2 0 0 0-2-2Zm-7 16h2V3h-2v18Zm7-6h2v-2h-2v2Zm-4-8h2V5h-2v2Zm4 12a2 2 0 0 0 2-2h-2v2Z\" fill-rule=\"nonzero\"/></svg>',\n    'flip-vertically': '<svg width=\"24\" height=\"24\"><path d=\"M5 14v2h2v-2H5Zm8 4v2h2v-2h-2Zm4-14H7a2 2 0 0 0-2 2v3h2V6h10v3h2V6a2 2 0 0 0-2-2Zm2 14h-2v2a2 2 0 0 0 2-2ZM3 11v2h18v-2H3Zm6 7v2h2v-2H9Zm8-4v2h2v-2h-2ZM5 18c0 1.1.9 2 2 2v-2H5Z\" fill-rule=\"nonzero\"/></svg>',\n    'footnote': '<svg width=\"24\" height=\"24\"><path d=\"M19 13c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2h14Z\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19 4v6h-1V5h-1.5V4h2.6Z\"/><path d=\"M12 18c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2h7ZM14 8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2h9Z\"/></svg>',\n    'format-painter': '<svg width=\"24\" height=\"24\"><path d=\"M18 5V4c0-.5-.4-1-1-1H5a1 1 0 0 0-1 1v4c0 .6.5 1 1 1h12c.6 0 1-.4 1-1V7h1v4H9v9c0 .6.4 1 1 1h2c.6 0 1-.4 1-1v-7h8V5h-3Z\" fill-rule=\"nonzero\"/></svg>',\n    'format': '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M17 5a1 1 0 0 1 0 2h-4v11a1 1 0 0 1-2 0V7H7a1 1 0 1 1 0-2h10Z\"/></svg>',\n    'fullscreen': '<svg width=\"24\" height=\"24\"><path d=\"m15.3 10-1.2-1.3 2.9-3h-2.3a.9.9 0 1 1 0-1.7H19c.5 0 .9.4.9.9v4.4a.9.9 0 1 1-1.8 0V7l-2.9 3Zm0 4 3 3v-2.3a.9.9 0 1 1 1.7 0V19c0 .5-.4.9-.9.9h-4.4a.9.9 0 1 1 0-1.8H17l-3-2.9 1.3-1.2ZM10 15.4l-2.9 3h2.3a.9.9 0 1 1 0 1.7H5a.9.9 0 0 1-.9-.9v-4.4a.9.9 0 1 1 1.8 0V17l2.9-3 1.2 1.3ZM8.7 10 5.7 7v2.3a.9.9 0 0 1-1.7 0V5c0-.5.4-.9.9-.9h4.4a.9.9 0 0 1 0 1.8H7l3 2.9-1.3 1.2Z\" fill-rule=\"nonzero\"/></svg>',\n    'gallery': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"m5 15.7 2.3-2.2c.3-.3.7-.3 1 0L11 16l5.1-5c.3-.4.8-.4 1 0l2 1.9V8H5v7.7ZM5 18V19h3l1.8-1.9-2-2L5 17.9Zm14-3-2.5-2.4-6.4 6.5H19v-4ZM4 6h16c.6 0 1 .4 1 1v13c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V7c0-.6.4-1 1-1Zm6 7a2 2 0 1 1 0-4 2 2 0 0 1 0 4ZM4.5 4h15a.5.5 0 1 1 0 1h-15a.5.5 0 0 1 0-1Zm2-2h11a.5.5 0 1 1 0 1h-11a.5.5 0 0 1 0-1Z\"/></svg>',\n    'gamma': '<svg width=\"24\" height=\"24\"><path d=\"M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1Zm1 2v14h14V5H5Zm6.5 11.8V14L9.2 8.7a5.1 5.1 0 0 0-.4-.8l-.1-.2H8v-1l.3-.1.3-.1h.7a1 1 0 0 1 .6.5l.1.3a8.5 8.5 0 0 1 .3.6l1.9 4.6 2-5.2a1 1 0 0 1 1-.6.5.5 0 0 1 .5.6L13 14v2.8a.7.7 0 0 1-1.4 0Z\" fill-rule=\"nonzero\"/></svg>',\n    'help': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path d=\"M12 5.5a6.5 6.5 0 0 0-6 9 6.3 6.3 0 0 0 1.4 2l1 1a6.3 6.3 0 0 0 3.6 1 6.5 6.5 0 0 0 6-9 6.3 6.3 0 0 0-1.4-2l-1-1a6.3 6.3 0 0 0-3.6-1ZM12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4Z\"/><path d=\"M9.6 9.7a.7.7 0 0 1-.7-.8c0-1.1 1.5-1.8 3.2-1.8 1.8 0 3.2.8 3.2 2.4 0 1.4-.4 2.1-1.5 2.8-.2 0-.3.1-.3.2a2 2 0 0 0-.8.8.8.8 0 0 1-1.4-.6c.3-.7.8-1 1.3-1.5l.4-.2c.7-.4.8-.6.8-1.5 0-.5-.6-.9-1.7-.9-.5 0-1 .1-1.4.3-.2 0-.3.1-.3.2v-.2c0 .4-.4.8-.8.8Z\" fill-rule=\"nonzero\"/><circle cx=\"12\" cy=\"16\" r=\"1\"/></g></svg>',\n    'highlight-bg-color': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path id=\"tox-icon-highlight-bg-color__color\" d=\"M3 18h18v3H3z\"/><path fill-rule=\"nonzero\" d=\"M7.7 16.7H3l3.3-3.3-.7-.8L10.2 8l4 4.1-4 4.2c-.2.2-.6.2-.8 0l-.6-.7-1.1 1.1zm5-7.5L11 7.4l3-2.9a2 2 0 0 1 2.6 0L18 6c.7.7.7 2 0 2.7l-2.9 2.9-1.8-1.8-.5-.6\"/></g></svg>',\n    'home': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"/></svg>',\n    'horizontal-rule': '<svg width=\"24\" height=\"24\"><path d=\"M4 11h16v2H4z\" fill-rule=\"evenodd\"/></svg>',\n    'image-options': '<svg width=\"24\" height=\"24\"><path d=\"M6 10a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2Zm12 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2Zm-6 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2Z\" fill-rule=\"nonzero\"/></svg>',\n    'image': '<svg width=\"24\" height=\"24\"><path d=\"m5 15.7 3.3-3.2c.3-.3.7-.3 1 0L12 15l4.1-4c.3-.4.8-.4 1 0l2 1.9V5H5v10.7ZM5 18V19h3l2.8-2.9-2-2L5 17.9Zm14-3-2.5-2.4-6.4 6.5H19v-4ZM4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1Zm6 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z\" fill-rule=\"nonzero\"/></svg>',\n    'indent': '<svg width=\"24\" height=\"24\"><path d=\"M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 1 1 0-2Zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2Zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2Zm-5 4h12a1 1 0 0 1 0 2H7a1 1 0 0 1 0-2Zm-2.6-3.8L6.2 12l-1.8-1.2a1 1 0 0 1 1.2-1.6l3 2a1 1 0 0 1 0 1.6l-3 2a1 1 0 1 1-1.2-1.6Z\" fill-rule=\"evenodd\"/></svg>',\n    'info': '<svg width=\"24\" height=\"24\"><path d=\"M12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4Zm-1 3v2h2V7h-2Zm3 10v-1h-1v-5h-3v1h1v4h-1v1h4Z\" fill-rule=\"evenodd\"/></svg>',\n    'insert-character': '<svg width=\"24\" height=\"24\"><path d=\"M15 18h4l1-2v4h-6v-3.3l1.4-1a6 6 0 0 0 1.8-2.9 6.3 6.3 0 0 0-.1-4.1 5.8 5.8 0 0 0-3-3.2c-.6-.3-1.3-.5-2.1-.5a5.1 5.1 0 0 0-3.9 1.8 6.3 6.3 0 0 0-1.3 6 6.2 6.2 0 0 0 1.8 3l1.4.9V20H4v-4l1 2h4v-.5l-2-1L5.4 15A6.5 6.5 0 0 1 4 11c0-1 .2-1.9.6-2.7A7 7 0 0 1 6.3 6C7.1 5.4 8 5 9 4.5c1-.3 2-.5 3.1-.5a8.8 8.8 0 0 1 5.7 2 7 7 0 0 1 1.7 2.3 6 6 0 0 1 .2 4.8c-.2.7-.6 1.3-1 1.9a7.6 7.6 0 0 1-3.6 2.5v.5Z\" fill-rule=\"evenodd\"/></svg>',\n    'insert-time': '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"M12 19a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm0 2a9 9 0 1 1 0-18 9 9 0 0 1 0 18Z\"/><path d=\"M16 12h-3V7c0-.6-.4-1-1-1a1 1 0 0 0-1 1v7h5c.6 0 1-.4 1-1s-.4-1-1-1Z\"/></g></svg>',\n    'invert': '<svg width=\"24\" height=\"24\"><path d=\"M18 19.3 16.5 18a5.8 5.8 0 0 1-3.1 1.9 6.1 6.1 0 0 1-5.5-1.6A5.8 5.8 0 0 1 6 14v-.3l.1-1.2A13.9 13.9 0 0 1 7.7 9l-3-3 .7-.8 2.8 2.9 9 8.9 1.5 1.6-.7.6Zm0-5.5v.3l-.1 1.1-.4 1-1.2-1.2a4.3 4.3 0 0 0 .2-1v-.2c0-.4 0-.8-.2-1.3l-.5-1.4a14.8 14.8 0 0 0-3-4.2L12 6a26.1 26.1 0 0 0-2.2 2.5l-1-1a20.9 20.9 0 0 1 2.9-3.3L12 4l1 .8a22.2 22.2 0 0 1 4 5.4c.6 1.2 1 2.4 1 3.6Z\" fill-rule=\"evenodd\"/></svg>',\n    'italic': '<svg width=\"24\" height=\"24\"><path d=\"m16.7 4.7-.1.9h-.3c-.6 0-1 0-1.4.3-.3.3-.4.6-.5 1.1l-2.1 9.8v.6c0 .5.4.8 1.4.8h.2l-.2.8H8l.2-.8h.2c1.1 0 1.8-.5 2-1.5l2-9.8.1-.5c0-.6-.4-.8-1.4-.8h-.3l.2-.9h5.8Z\" fill-rule=\"evenodd\"/></svg>',\n    'language': '<svg width=\"24\" height=\"24\"><path d=\"M12 3a9 9 0 1 1 0 18 9 9 0 0 1 0-18Zm4.3 13.3c-.5 1-1.2 2-2 2.9a7.5 7.5 0 0 0 3.2-2.1l-.2-.2a6 6 0 0 0-1-.6Zm-8.6 0c-.5.2-.9.5-1.2.8.9 1 2 1.7 3.2 2a10 10 0 0 1-2-2.8Zm3.6-.8c-.8 0-1.6.1-2.2.3.5 1 1.2 1.9 2.1 2.7Zm1.5 0v3c.9-.8 1.6-1.7 2.1-2.7-.6-.2-1.4-.3-2.1-.3Zm-6-2.7H4.5c.2 1 .5 2.1 1 3h.3l1.3-1a10 10 0 0 1-.3-2Zm12.7 0h-2.3c0 .7-.1 1.4-.3 2l1.6 1.1c.5-1 .9-2 1-3.1Zm-3.8 0h-3V14c1 0 2 .1 2.7.4.2-.5.3-1 .3-1.6Zm-4.4 0h-3l.3 1.6c.8-.3 1.7-.4 2.7-.4v-1.3Zm-5.5-5c-.7 1-1.1 2.2-1.3 3.5h2.3c0-1 .2-1.8.5-2.6l-1.5-1Zm2.9 1.4v.1c-.2.6-.4 1.3-.4 2h3V9.4c-1 0-1.8-.1-2.6-.3Zm6.6 0h-.1l-2.4.3v1.8h3l-.5-2.1Zm3-1.4-.3.1-1.3.8c.3.8.5 1.6.5 2.6h2.3a7.5 7.5 0 0 0-1.3-3.5Zm-9 0 2 .2V5.5a9 9 0 0 0-2 2.2Zm3.5-2.3V8c.6 0 1.3 0 1.9-.2a9 9 0 0 0-2-2.3Zm-3-.7h-.1c-1.1.4-2.1 1-3 1.8l1.2.7a10 10 0 0 1 1.9-2.5Zm4.4 0 .1.1a10 10 0 0 1 1.8 2.4l1.1-.7a7.5 7.5 0 0 0-3-1.8Z\"/></svg>',\n    'line-height': '<svg width=\"24\" height=\"24\"><path d=\"M21 5a1 1 0 0 1 .1 2H13a1 1 0 0 1-.1-2H21zm0 4a1 1 0 0 1 .1 2H13a1 1 0 0 1-.1-2H21zm0 4a1 1 0 0 1 .1 2H13a1 1 0 0 1-.1-2H21zm0 4a1 1 0 0 1 .1 2H13a1 1 0 0 1-.1-2H21zM7 3.6l3.7 3.7a1 1 0 0 1-1.3 1.5h-.1L8 7.3v9.2l1.3-1.3a1 1 0 0 1 1.3 0h.1c.4.4.4 1 0 1.3v.1L7 20.4l-3.7-3.7a1 1 0 0 1 1.3-1.5h.1L6 16.7V7.4L4.7 8.7a1 1 0 0 1-1.3 0h-.1a1 1 0 0 1 0-1.3v-.1L7 3.6z\"/></svg>',\n    'line': '<svg width=\"24\" height=\"24\"><path d=\"m15 9-8 8H4v-3l8-8 3 3Zm1-1-3-3 1-1h1c-.2 0 0 0 0 0l2 2s0 .2 0 0v1l-1 1ZM4 18h16v2H4v-2Z\" fill-rule=\"evenodd\"/></svg>',\n    'link': '<svg width=\"24\" height=\"24\"><path d=\"M6.2 12.3a1 1 0 0 1 1.4 1.4l-2 2a2 2 0 1 0 2.6 2.8l4.8-4.8a1 1 0 0 0 0-1.4 1 1 0 1 1 1.4-1.3 2.9 2.9 0 0 1 0 4L9.6 20a3.9 3.9 0 0 1-5.5-5.5l2-2Zm11.6-.6a1 1 0 0 1-1.4-1.4l2-2a2 2 0 1 0-2.6-2.8L11 10.3a1 1 0 0 0 0 1.4A1 1 0 1 1 9.6 13a2.9 2.9 0 0 1 0-4L14.4 4a3.9 3.9 0 0 1 5.5 5.5l-2 2Z\" fill-rule=\"nonzero\"/></svg>',\n    'list-bull-circle': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path d=\"M11 16a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 1a3 3 0 1 1 0-6 3 3 0 0 1 0 6ZM11 26a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 1a3 3 0 1 1 0-6 3 3 0 0 1 0 6ZM11 36a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 1a3 3 0 1 1 0-6 3 3 0 0 1 0 6Z\" fill-rule=\"nonzero\"/><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/></g></svg>',\n    'list-bull-default': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><circle cx=\"11\" cy=\"14\" r=\"3\"/><circle cx=\"11\" cy=\"24\" r=\"3\"/><circle cx=\"11\" cy=\"34\" r=\"3\"/><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/></g></svg>',\n    'list-bull-square': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path d=\"M8 11h6v6H8zM8 21h6v6H8zM8 31h6v6H8z\"/><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/></g></svg>',\n    'list-num-default-rtl': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z\"/><path d=\"M37.4 17v-4.8h-.1l-1.5 1v-1.1l1.6-1.1h1.2v6zM33.3 17.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm1.7 5.7c0-1.2 1-2 2.2-2 1.3 0 2.1.8 2.1 1.8 0 .7-.3 1.2-1.3 2.2l-1.2 1v.2h2.6v1h-4.3v-.9l2-1.9c.8-.8 1-1.1 1-1.5 0-.5-.4-.8-1-.8-.5 0-.9.3-.9.9H35zm-1.7 4.3c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7zm3.2 7.3v-1h.7c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7s-1 .3-1 .8H35c0-1.1 1-1.8 2.2-1.8 1.2 0 2.1.6 2.1 1.6 0 .7-.4 1.2-1 1.3v.1c.7.1 1.3.7 1.3 1.4 0 1-1 1.9-2.4 1.9-1.3 0-2.2-.8-2.3-2h1.2c0 .6.5 1 1.1 1 .6 0 1-.4 1-1 0-.5-.3-.8-1-.8h-.7zm-3.3 2.7c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7z\"/></g></svg>',\n    'list-num-default': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/><path d=\"M10 17v-4.8l-1.5 1v-1.1l1.6-1h1.2V17h-1.2Zm3.6.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7Zm-5 5.7c0-1.2.8-2 2.1-2s2.1.8 2.1 1.8c0 .7-.3 1.2-1.4 2.2l-1.1 1v.2h2.6v1H8.6v-.9l2-1.9c.8-.8 1-1.1 1-1.5 0-.5-.4-.8-1-.8-.5 0-.9.3-.9.9H8.5Zm6.3 4.3c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7ZM10 34.4v-1h.7c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7s-1 .3-1 .8H8.6c0-1.1 1-1.8 2.2-1.8 1.3 0 2.1.6 2.1 1.6 0 .7-.4 1.2-1 1.3v.1c.8.1 1.3.7 1.3 1.4 0 1-1 1.9-2.4 1.9-1.3 0-2.2-.8-2.3-2h1.2c0 .6.5 1 1.1 1 .7 0 1-.4 1-1 0-.5-.3-.8-1-.8h-.7Zm4.7 2.7c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7Z\"/></g></svg>',\n    'list-num-lower-alpha-rtl': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z\"/><path d=\"M36.5 16c-.9 0-1.5-.5-1.5-1.3s.6-1.3 1.8-1.4h1v-.4c0-.4-.2-.6-.7-.6-.4 0-.7.1-.8.4h-1.1c0-.8.8-1.4 2-1.4S39 12 39 13V16h-1.2v-.6c-.3.4-.8.7-1.4.7Zm.4-.8c.6 0 1-.4 1-.9V14h-1c-.5.1-.7.3-.7.6 0 .4.3.6.7.6ZM33.1 16.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7ZM37.7 26c-.7 0-1.2-.2-1.5-.7v.7H35v-6.3h1.2v2.5c.3-.5.8-.9 1.5-.9 1.1 0 1.8 1 1.8 2.4 0 1.5-.7 2.4-1.8 2.4Zm-.5-3.6c-.6 0-1 .5-1 1.3s.4 1.4 1 1.4c.7 0 1-.6 1-1.4 0-.8-.3-1.3-1-1.3ZM33.2 26.1c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7zm6 7h-1c-.1-.5-.4-.8-1-.8s-1 .5-1 1.4c0 1 .4 1.4 1 1.4.5 0 .9-.2 1-.7h1c0 1-.8 1.7-2 1.7-1.4 0-2.2-.9-2.2-2.4s.8-2.4 2.2-2.4c1.2 0 2 .7 2 1.7zm-6.1 3c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7z\"/></g></svg>',\n    'list-num-lower-alpha': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/><path d=\"M10.3 15.2c.5 0 1-.4 1-.9V14h-1c-.5.1-.8.3-.8.6 0 .4.3.6.8.6Zm-.4.9c-1 0-1.5-.6-1.5-1.4 0-.8.6-1.3 1.7-1.4h1.1v-.4c0-.4-.2-.6-.7-.6-.5 0-.8.1-.9.4h-1c0-.8.8-1.4 2-1.4 1.1 0 1.8.6 1.8 1.6V16h-1.1v-.6h-.1c-.2.4-.7.7-1.3.7Zm4.6 0c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7Zm-3.2 10c-.6 0-1.2-.3-1.4-.8v.7H8.5v-6.3H10v2.5c.3-.5.8-.9 1.4-.9 1.2 0 1.9 1 1.9 2.4 0 1.5-.7 2.4-1.9 2.4Zm-.4-3.7c-.7 0-1 .5-1 1.3s.3 1.4 1 1.4c.6 0 1-.6 1-1.4 0-.8-.4-1.3-1-1.3Zm4 3.7c-.5 0-.7-.3-.7-.7 0-.4.2-.7.7-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7Zm-2.2 7h-1.2c0-.5-.4-.8-.9-.8-.6 0-1 .5-1 1.4 0 1 .4 1.4 1 1.4.5 0 .8-.2 1-.7h1c0 1-.8 1.7-2 1.7-1.4 0-2.2-.9-2.2-2.4s.8-2.4 2.2-2.4c1.2 0 2 .7 2 1.7Zm1.8 3c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7Z\"/></g></svg>',\n    'list-num-lower-greek-rtl': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z\"/><path d=\"M37.4 16c-1.2 0-2-.8-2-2.3 0-1.5.8-2.4 2-2.4.6 0 1 .4 1.3 1v-.9H40v3.2c0 .4.1.5.4.5h.2v.9h-.6c-.6 0-1-.2-1-.7h-.2c-.2.4-.7.8-1.3.8Zm.3-1c.6 0 1-.5 1-1.3s-.4-1.3-1-1.3-1 .5-1 1.3.4 1.4 1 1.4ZM33.3 16.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7ZM36 21.9c0-1.5.8-2.3 2.1-2.3 1.2 0 2 .6 2 1.6 0 .6-.3 1-.9 1.3.9.3 1.3.8 1.3 1.7 0 1.2-.7 1.9-1.8 1.9-.6 0-1.1-.3-1.4-.8v2.2H36V22Zm1.8 1.2v-1h.3c.5 0 .9-.2.9-.7 0-.5-.3-.8-.9-.8-.5 0-.8.3-.8 1v2.2c0 .8.4 1.3 1 1.3s1-.4 1-1-.4-1-1.2-1h-.3ZM33.3 26.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7ZM37.1 34.6 34.8 30h1.4l1.7 3.5 1.7-3.5h1.1l-2.2 4.6v.1c.5.8.7 1.4.7 1.8 0 .4-.2.8-.4 1-.2.2-.6.3-1 .3-.9 0-1.3-.4-1.3-1.2 0-.5.2-1 .5-1.7l.1-.2Zm.7 1a2 2 0 0 0-.4.9c0 .3.1.4.4.4.3 0 .4-.1.4-.4 0-.2-.1-.6-.4-1ZM33.3 36.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7Z\"/></g></svg>',\n    'list-num-lower-greek': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/><path d=\"M10.5 15c.7 0 1-.5 1-1.3s-.3-1.3-1-1.3c-.5 0-.9.5-.9 1.3s.4 1.4 1 1.4Zm-.3 1c-1.1 0-1.8-.8-1.8-2.3 0-1.5.7-2.4 1.8-2.4.7 0 1.1.4 1.3 1h.1v-.9h1.2v3.2c0 .4.1.5.4.5h.2v.9h-.6c-.6 0-1-.2-1.1-.7h-.1c-.2.4-.7.8-1.4.8Zm5 .1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.7-.7.5 0 .8.3.8.7 0 .4-.3.7-.8.7Zm-4.9 7v-1h.3c.6 0 1-.2 1-.7 0-.5-.4-.8-1-.8-.5 0-.8.3-.8 1v2.2c0 .8.4 1.3 1.1 1.3.6 0 1-.4 1-1s-.5-1-1.3-1h-.3ZM8.6 22c0-1.5.7-2.3 2-2.3 1.2 0 2 .6 2 1.6 0 .6-.3 1-.8 1.3.8.3 1.3.8 1.3 1.7 0 1.2-.8 1.9-1.9 1.9-.6 0-1.1-.3-1.3-.8v2.2H8.5V22Zm6.2 4.2c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7Zm-4.5 8.5L8 30h1.4l1.7 3.5 1.7-3.5h1.1l-2.2 4.6v.1c.5.8.7 1.4.7 1.8 0 .4-.1.8-.4 1-.2.2-.6.3-1 .3-.9 0-1.3-.4-1.3-1.2 0-.5.2-1 .5-1.7l.1-.2Zm.7 1a2 2 0 0 0-.4.9c0 .3.1.4.4.4.3 0 .4-.1.4-.4 0-.2-.1-.6-.4-1Zm4.5.5c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7Z\"/></g></svg>',\n    'list-num-lower-roman-rtl': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z\"/><path d=\"M32.9 16v-1.2h-1.3V16H33Zm0 10v-1.2h-1.3V26H33Zm0 10v-1.2h-1.3V36H33Z\"/><path fill-rule=\"nonzero\" d=\"M36 21h-1.5v5H36zM36 31h-1.5v5H36zM39 21h-1.5v5H39zM39 31h-1.5v5H39zM42 31h-1.5v5H42zM36 11h-1.5v5H36zM36 19h-1.5v1H36zM36 29h-1.5v1H36zM39 19h-1.5v1H39zM39 29h-1.5v1H39zM42 29h-1.5v1H42zM36 9h-1.5v1H36z\"/></g></svg>',\n    'list-num-lower-roman': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/><path d=\"M15.1 16v-1.2h1.3V16H15Zm0 10v-1.2h1.3V26H15Zm0 10v-1.2h1.3V36H15Z\"/><path fill-rule=\"nonzero\" d=\"M12 21h1.5v5H12zM12 31h1.5v5H12zM9 21h1.5v5H9zM9 31h1.5v5H9zM6 31h1.5v5H6zM12 11h1.5v5H12zM12 19h1.5v1H12zM12 29h1.5v1H12zM9 19h1.5v1H9zM9 29h1.5v1H9zM6 29h1.5v1H6zM12 9h1.5v1H12z\"/></g></svg>',\n    'list-num-upper-alpha-rtl': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z\"/><path d=\"m39.3 17-.5-1.4h-2l-.5 1.4H35l2-6h1.6l2 6h-1.3Zm-1.6-4.7-.7 2.3h1.6l-.8-2.3ZM33.4 17c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7Zm4.7 9.9h-2.7v-6H38c1.2 0 1.9.6 1.9 1.5 0 .6-.5 1.2-1 1.3.7.1 1.3.7 1.3 1.5 0 1-.8 1.7-2 1.7Zm-1.4-5v1.5h1c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7h-1Zm0 4h1.1c.7 0 1.1-.3 1.1-.8 0-.6-.4-.9-1.1-.9h-1.1V26ZM33 27.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7Zm4.9 10c-1.8 0-2.8-1.1-2.8-3.1s1-3.1 2.8-3.1c1.4 0 2.5.9 2.6 2.2h-1.3c0-.7-.6-1.1-1.3-1.1-1 0-1.6.7-1.6 2s.6 2 1.6 2c.7 0 1.2-.4 1.4-1h1.2c-.1 1.3-1.2 2.2-2.6 2.2Zm-4.5 0c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7Z\"/></g></svg>',\n    'list-num-upper-alpha': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/><path d=\"m12.6 17-.5-1.4h-2L9.5 17H8.3l2-6H12l2 6h-1.3ZM11 12.3l-.7 2.3h1.6l-.8-2.3Zm4.7 4.8c-.4 0-.7-.3-.7-.7 0-.4.3-.7.7-.7.5 0 .7.3.7.7 0 .4-.2.7-.7.7ZM11.4 27H8.7v-6h2.6c1.2 0 1.9.6 1.9 1.5 0 .6-.5 1.2-1 1.3.7.1 1.3.7 1.3 1.5 0 1-.8 1.7-2 1.7ZM10 22v1.5h1c.6 0 1-.3 1-.8 0-.4-.4-.7-1-.7h-1Zm0 4H11c.7 0 1.1-.3 1.1-.8 0-.6-.4-.9-1.1-.9H10V26Zm5.4 1.1c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7Zm-4.1 10c-1.8 0-2.8-1.1-2.8-3.1s1-3.1 2.8-3.1c1.4 0 2.5.9 2.6 2.2h-1.3c0-.7-.6-1.1-1.3-1.1-1 0-1.6.7-1.6 2s.6 2 1.6 2c.7 0 1.2-.4 1.4-1h1.2c-.1 1.3-1.2 2.2-2.6 2.2Zm4.5 0c-.5 0-.8-.3-.8-.7 0-.4.3-.7.8-.7.4 0 .7.3.7.7 0 .4-.3.7-.7.7Z\"/></g></svg>',\n    'list-num-upper-roman-rtl': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M8 12h22v4H8zM8 22h22v4H8zM8 32h22v4H8z\"/><path d=\"M31.6 17v-1.2H33V17h-1.3Zm0 10v-1.2H33V27h-1.3Zm0 10v-1.2H33V37h-1.3Z\"/><path fill-rule=\"nonzero\" d=\"M34.5 20H36v7h-1.5zM34.5 30H36v7h-1.5zM37.5 20H39v7h-1.5zM37.5 30H39v7h-1.5zM40.5 30H42v7h-1.5zM34.5 10H36v7h-1.5z\"/></g></svg>',\n    'list-num-upper-roman': '<svg width=\"48\" height=\"48\"><g fill-rule=\"evenodd\"><path opacity=\".2\" d=\"M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z\"/><path d=\"M15.1 17v-1.2h1.3V17H15Zm0 10v-1.2h1.3V27H15Zm0 10v-1.2h1.3V37H15Z\"/><path fill-rule=\"nonzero\" d=\"M12 20h1.5v7H12zM12 30h1.5v7H12zM9 20h1.5v7H9zM9 30h1.5v7H9zM6 30h1.5v7H6zM12 10h1.5v7H12z\"/></g></svg>',\n    'lock': '<svg width=\"24\" height=\"24\"><path d=\"M16.3 11c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H8V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h.3ZM10 8v3h4V8a1 1 0 0 0-.3-.7A1 1 0 0 0 13 7h-2a1 1 0 0 0-.7.3 1 1 0 0 0-.3.7Z\" fill-rule=\"evenodd\"/></svg>',\n    'ltr': '<svg width=\"24\" height=\"24\"><path d=\"M11 5h7a1 1 0 0 1 0 2h-1v11a1 1 0 0 1-2 0V7h-2v11a1 1 0 0 1-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 7.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L11 5ZM4.4 16.2 6.2 15l-1.8-1.2a1 1 0 0 1 1.2-1.6l3 2a1 1 0 0 1 0 1.6l-3 2a1 1 0 1 1-1.2-1.6Z\" fill-rule=\"evenodd\"/></svg>',\n    'more-drawer': '<svg width=\"24\" height=\"24\"><path d=\"M6 10a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2Zm12 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2Zm-6 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2Z\" fill-rule=\"nonzero\"/></svg>',\n    'new-document': '<svg width=\"24\" height=\"24\"><path d=\"M14.4 3H7a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V7.6L14.4 3ZM17 19H7V5h6v4h4v10Z\" fill-rule=\"nonzero\"/></svg>',\n    'new-tab': '<svg width=\"24\" height=\"24\"><path d=\"m15 13 2-2v8H5V7h8l-2 2H7v8h8v-4Zm4-8v5.5l-2-2-5.6 5.5H10v-1.4L15.5 7l-2-2H19Z\" fill-rule=\"evenodd\"/></svg>',\n    'non-breaking': '<svg width=\"24\" height=\"24\"><path d=\"M11 11H8a1 1 0 1 1 0-2h3V6c0-.6.4-1 1-1s1 .4 1 1v3h3c.6 0 1 .4 1 1s-.4 1-1 1h-3v3c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-3Zm10 4v5H3v-5c0-.6.4-1 1-1s1 .4 1 1v3h14v-3c0-.6.4-1 1-1s1 .4 1 1Z\" fill-rule=\"evenodd\"/></svg>',\n    'notice': '<svg width=\"24\" height=\"24\"><path d=\"M17.8 9.8 15.4 4 20 8.5v7L15.5 20h-7L4 15.5v-7L8.5 4h7l2.3 5.8Zm0 0 2.2 5.7-2.3-5.8ZM13 17v-2h-2v2h2Zm0-4V7h-2v6h2Z\" fill-rule=\"evenodd\"/></svg>',\n    'ordered-list-rtl': '<svg width=\"24\" height=\"24\"><path d=\"M6 17h8a1 1 0 0 1 0 2H6a1 1 0 0 1 0-2Zm0-6h8a1 1 0 0 1 0 2H6a1 1 0 0 1 0-2Zm0-6h8a1 1 0 0 1 0 2H6a1 1 0 1 1 0-2Zm13-1v3.5a.5.5 0 1 1-1 0V5h-.5a.5.5 0 1 1 0-1H19Zm-1 8.8.2.2h1.3a.5.5 0 1 1 0 1h-1.6a1 1 0 0 1-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 0 0-.2-.2h-1.3a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3Zm2 4.2v2c0 .6-.4 1-1 1h-1.5a.5.5 0 0 1 0-1h1.2a.3.3 0 1 0 0-.6h-1.3a.4.4 0 1 1 0-.8h1.3a.3.3 0 0 0 0-.6h-1.2a.5.5 0 1 1 0-1H19c.6 0 1 .4 1 1Z\" fill-rule=\"evenodd\"/></svg>',\n    'ordered-list': '<svg width=\"24\" height=\"24\"><path d=\"M10 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 1 1 0-2ZM6 4v3.5c0 .3-.2.5-.5.5a.5.5 0 0 1-.5-.5V5h-.5a.5.5 0 0 1 0-1H6Zm-1 8.8.2.2h1.3c.3 0 .5.2.5.5s-.2.5-.5.5H4.9a1 1 0 0 1-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 0 0-.2-.2H4.5a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3ZM7 17v2c0 .6-.4 1-1 1H4.5a.5.5 0 0 1 0-1h1.2c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.4a.4.4 0 1 1 0-.8h1.3c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.5a.5.5 0 1 1 0-1H6c.6 0 1 .4 1 1Z\" fill-rule=\"evenodd\"/></svg>',\n    'orientation': '<svg width=\"24\" height=\"24\"><path d=\"M7.3 6.4 1 13l6.4 6.5 6.5-6.5-6.5-6.5ZM3.7 13l3.6-3.7L11 13l-3.7 3.7-3.6-3.7ZM12 6l2.8 2.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0L9.2 5.7a.8.8 0 0 1 0-1.2L13.6.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L12 4h1a9 9 0 1 1-4.3 16.9l1.5-1.5A7 7 0 1 0 13 6h-1Z\" fill-rule=\"nonzero\"/></svg>',\n    'outdent': '<svg width=\"24\" height=\"24\"><path d=\"M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 1 1 0-2Zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2Zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2Zm-5 4h12a1 1 0 0 1 0 2H7a1 1 0 0 1 0-2Zm1.6-3.8a1 1 0 0 1-1.2 1.6l-3-2a1 1 0 0 1 0-1.6l3-2a1 1 0 0 1 1.2 1.6L6.8 12l1.8 1.2Z\" fill-rule=\"evenodd\"/></svg>',\n    'page-break': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path d=\"M5 11c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2Zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2Zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2Zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1h-1a1 1 0 0 1 0-2Zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2ZM7 3v5h10V3c0-.6.4-1 1-1s1 .4 1 1v7H5V3c0-.6.4-1 1-1s1 .4 1 1ZM6 22a1 1 0 0 1-1-1v-7h14v7c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-5H7v5c0 .6-.4 1-1 1Z\"/></g></svg>',\n    'paragraph': '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M10 5h7a1 1 0 0 1 0 2h-1v11a1 1 0 0 1-2 0V7h-2v11a1 1 0 0 1-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 6.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L10 5Z\"/></svg>',\n    'paste-column-after': '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M12 1a3 3 0 0 1 2.8 2H18c1 0 2 .8 2 1.9V7h-2V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v13h7v2H6c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2H9.2A3 3 0 0 1 12 1Zm8 7v12h-6V8h6Zm-1.5 1.5h-3v9h3v-9ZM12 3a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z\"/></svg>',\n    'paste-column-before': '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M12 1a3 3 0 0 1 2.8 2H18c1 0 2 .8 2 1.9V18c0 1-.8 2-1.9 2H11v-2h7V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v2H4V5c0-1 .8-2 1.9-2H9.2A3 3 0 0 1 12 1Zm-2 7v12H4V8h6ZM8.5 9.5h-3v9h3v-9ZM12 3a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z\"/></svg>',\n    'paste-row-after': '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M12 1a3 3 0 0 1 2.8 2H18c1 0 2 .8 2 1.9V11h-2V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v13h14c0 1-.8 2-1.9 2H6c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2H9.2A3 3 0 0 1 12 1Zm10 11v5H8v-5h14Zm-1.5 1.5h-11v2h11v-2ZM12 3a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z\"/></svg>',\n    'paste-row-before': '<svg width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" d=\"M12 1a3 3 0 0 1 2.8 2H18c1 0 2 .8 2 1.9V7h-2V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v13h12v-4h2v4c0 1-.8 2-1.9 2H6c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2H9.2A3 3 0 0 1 12 1Zm10 7v5H8V8h14Zm-1.5 1.5h-11v2h11v-2ZM12 3a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z\"/></svg>',\n    'paste-text': '<svg width=\"24\" height=\"24\"><path d=\"M18 9V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v13h3V9h9ZM9 20H6a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.2A3 3 0 0 1 12 1a3 3 0 0 1 2.8 2H18a2 2 0 0 1 2 2v4h1v12H9v-1Zm1.5-9.5v9h9v-9h-9ZM12 3a1 1 0 0 0-1 1c0 .5.4 1 1 1s1-.5 1-1-.4-1-1-1Zm0 9h6v2h-.5l-.5-1h-1v4h.8v1h-3.6v-1h.8v-4h-1l-.5 1H12v-2Z\" fill-rule=\"nonzero\"/></svg>',\n    'paste': '<svg width=\"24\" height=\"24\"><path d=\"M18 9V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v13h3V9h9ZM9 20H6a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.2A3 3 0 0 1 12 1a3 3 0 0 1 2.8 2H18a2 2 0 0 1 2 2v4h1v12H9v-1Zm1.5-9.5v9h9v-9h-9ZM12 3a1 1 0 0 0-1 1c0 .5.4 1 1 1s1-.5 1-1-.4-1-1-1Z\" fill-rule=\"nonzero\"/></svg>',\n    'permanent-pen': '<svg width=\"24\" height=\"24\"><path d=\"M10.5 17.5 8 20H3v-3l3.5-3.5a2 2 0 0 1 0-3L14 3l1 1-7.3 7.3a1 1 0 0 0 0 1.4l3.6 3.6c.4.4 1 .4 1.4 0L20 9l1 1-7.6 7.6a2 2 0 0 1-2.8 0l-.1-.1Z\" fill-rule=\"nonzero\"/></svg>',\n    'plus': '<svg width=\"24\" height=\"24\"><path d=\"M12 4c.5 0 1 .4 1 .9V11h6a1 1 0 0 1 .1 2H13v6a1 1 0 0 1-2 .1V13H5a1 1 0 0 1-.1-2H11V5c0-.6.4-1 1-1Z\"/></svg>',\n    'preferences': '<svg width=\"24\" height=\"24\"><path d=\"m20.1 13.5-1.9.2a5.8 5.8 0 0 1-.6 1.5l1.2 1.5c.4.4.3 1 0 1.4l-.7.7a1 1 0 0 1-1.4 0l-1.5-1.2a6.2 6.2 0 0 1-1.5.6l-.2 1.9c0 .5-.5.9-1 .9h-1a1 1 0 0 1-1-.9l-.2-1.9a5.8 5.8 0 0 1-1.5-.6l-1.5 1.2a1 1 0 0 1-1.4 0l-.7-.7a1 1 0 0 1 0-1.4l1.2-1.5a6.2 6.2 0 0 1-.6-1.5l-1.9-.2a1 1 0 0 1-.9-1v-1c0-.5.4-1 .9-1l1.9-.2a5.8 5.8 0 0 1 .6-1.5L5.2 7.3a1 1 0 0 1 0-1.4l.7-.7a1 1 0 0 1 1.4 0l1.5 1.2a6.2 6.2 0 0 1 1.5-.6l.2-1.9c0-.5.5-.9 1-.9h1c.5 0 1 .4 1 .9l.2 1.9a5.8 5.8 0 0 1 1.5.6l1.5-1.2a1 1 0 0 1 1.4 0l.7.7c.3.4.4 1 0 1.4l-1.2 1.5a6.2 6.2 0 0 1 .6 1.5l1.9.2c.5 0 .9.5.9 1v1c0 .5-.4 1-.9 1ZM12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z\" fill-rule=\"evenodd\"/></svg>',\n    'preview': '<svg width=\"24\" height=\"24\"><path d=\"M3.5 12.5c.5.8 1.1 1.6 1.8 2.3 2 2 4.2 3.2 6.7 3.2s4.7-1.2 6.7-3.2a16.2 16.2 0 0 0 2.1-2.8 15.7 15.7 0 0 0-2.1-2.8c-2-2-4.2-3.2-6.7-3.2a9.3 9.3 0 0 0-6.7 3.2A16.2 16.2 0 0 0 3.2 12c0 .2.2.3.3.5Zm-2.4-1 .7-1.2L4 7.8C6.2 5.4 8.9 4 12 4c3 0 5.8 1.4 8.1 3.8a18.2 18.2 0 0 1 2.8 3.7v1l-.7 1.2-2.1 2.5c-2.3 2.4-5 3.8-8.1 3.8-3 0-5.8-1.4-8.1-3.8a18.2 18.2 0 0 1-2.8-3.7 1 1 0 0 1 0-1Zm12-3.3a2 2 0 1 0 2.7 2.6 4 4 0 1 1-2.6-2.6Z\" fill-rule=\"nonzero\"/></svg>',\n    'print': '<svg width=\"24\" height=\"24\"><path d=\"M18 8H6a3 3 0 0 0-3 3v6h2v3h14v-3h2v-6a3 3 0 0 0-3-3Zm-1 10H7v-4h10v4Zm.5-5c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5Zm.5-8H6v2h12V5Z\" fill-rule=\"nonzero\"/></svg>',\n    'quote': '<svg width=\"24\" height=\"24\"><path d=\"M7.5 17h.9c.4 0 .7-.2.9-.6L11 13V8c0-.6-.4-1-1-1H6a1 1 0 0 0-1 1v4c0 .6.4 1 1 1h2l-1.3 2.7a1 1 0 0 0 .8 1.3Zm8 0h.9c.4 0 .7-.2.9-.6L19 13V8c0-.6-.4-1-1-1h-4a1 1 0 0 0-1 1v4c0 .6.4 1 1 1h2l-1.3 2.7a1 1 0 0 0 .8 1.3Z\" fill-rule=\"nonzero\"/></svg>',\n    'redo': '<svg width=\"24\" height=\"24\"><path d=\"M17.6 10H12c-2.8 0-4.4 1.4-4.9 3.5-.4 2 .3 4 1.4 4.6a1 1 0 1 1-1 1.8c-2-1.2-2.9-4.1-2.3-6.8.6-3 3-5.1 6.8-5.1h5.6l-3.3-3.3a1 1 0 1 1 1.4-1.4l5 5a1 1 0 0 1 0 1.4l-5 5a1 1 0 0 1-1.4-1.4l3.3-3.3Z\" fill-rule=\"nonzero\"/></svg>',\n    'reload': '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"m5 22.1-1.2-4.7v-.2a1 1 0 0 1 1-1l5 .4a1 1 0 1 1-.2 2l-2.2-.2a7.8 7.8 0 0 0 8.4.2 7.5 7.5 0 0 0 3.5-6.4 1 1 0 1 1 2 0 9.5 9.5 0 0 1-4.5 8 9.9 9.9 0 0 1-10.2 0l.4 1.4a1 1 0 1 1-2 .5ZM13.6 7.4c0-.5.5-1 1-.9l2.8.2a8 8 0 0 0-9.5-1 7.5 7.5 0 0 0-3.6 7 1 1 0 0 1-2 0 9.5 9.5 0 0 1 4.5-8.6 10 10 0 0 1 10.9.3l-.3-1a1 1 0 0 1 2-.5l1.1 4.8a1 1 0 0 1-1 1.2l-5-.4a1 1 0 0 1-.9-1Z\"/></g></svg>',\n    'remove-formatting': '<svg width=\"24\" height=\"24\"><path d=\"M13.2 6a1 1 0 0 1 0 .2l-2.6 10a1 1 0 0 1-1 .8h-.2a.8.8 0 0 1-.8-1l2.6-10H8a1 1 0 1 1 0-2h9a1 1 0 0 1 0 2h-3.8ZM5 18h7a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2Zm13 1.5L16.5 18 15 19.5a.7.7 0 0 1-1-1l1.5-1.5-1.5-1.5a.7.7 0 0 1 1-1l1.5 1.5 1.5-1.5a.7.7 0 0 1 1 1L17.5 17l1.5 1.5a.7.7 0 0 1-1 1Z\" fill-rule=\"evenodd\"/></svg>',\n    'remove': '<svg width=\"24\" height=\"24\"><path d=\"M16 7h3a1 1 0 0 1 0 2h-1v9a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V9H5a1 1 0 1 1 0-2h3V6a3 3 0 0 1 3-3h2a3 3 0 0 1 3 3v1Zm-2 0V6c0-.6-.4-1-1-1h-2a1 1 0 0 0-1 1v1h4Zm2 2H8v9c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V9Zm-7 3a1 1 0 0 1 2 0v4a1 1 0 0 1-2 0v-4Zm4 0a1 1 0 0 1 2 0v4a1 1 0 0 1-2 0v-4Z\" fill-rule=\"nonzero\"/></svg>',\n    'resize-handle': '<svg width=\"10\" height=\"10\"><g fill-rule=\"nonzero\"><path d=\"M8.1 1.1A.5.5 0 1 1 9 2l-7 7A.5.5 0 1 1 1 8l7-7ZM8.1 5.1A.5.5 0 1 1 9 6l-3 3A.5.5 0 1 1 5 8l3-3Z\"/></g></svg>',\n    'resize': '<svg width=\"24\" height=\"24\"><path d=\"M4 5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h6c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 0 1-.7.3H7.4L18 16.6V13c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v6c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-6a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3.6L6 7.4V11c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.7-.3A1 1 0 0 1 4 11V5Z\" fill-rule=\"evenodd\"/></svg>',\n    'restore-draft': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path d=\"M17 13c0 .6-.4 1-1 1h-4V8c0-.6.4-1 1-1s1 .4 1 1v4h2c.6 0 1 .4 1 1Z\"/><path d=\"M4.7 10H9a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1V5a1 1 0 1 1 2 0v3l2.5-2.4a9.2 9.2 0 0 1 10.8-1.5A9 9 0 0 1 13.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 1 1 1.3-1.5 7.2 7.2 0 0 0 11.6-3.7 7 7 0 0 0-3.5-7.7A7.2 7.2 0 0 0 8 7L4.7 10Z\" fill-rule=\"nonzero\"/></g></svg>',\n    'rotate-left': '<svg width=\"24\" height=\"24\"><path d=\"M4.7 10H9a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1V5a1 1 0 1 1 2 0v3l2.5-2.4a9.2 9.2 0 0 1 10.8-1.5A9 9 0 0 1 13.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 1 1 1.3-1.5 7.2 7.2 0 0 0 11.6-3.7 7 7 0 0 0-3.5-7.7A7.2 7.2 0 0 0 8 7L4.7 10Z\" fill-rule=\"nonzero\"/></svg>',\n    'rotate-right': '<svg width=\"24\" height=\"24\"><path d=\"M20 8V5a1 1 0 0 1 2 0v6c0 .6-.4 1-1 1h-6a1 1 0 0 1 0-2h4.3L16 7A7.2 7.2 0 0 0 7.7 6a7 7 0 0 0 3 13.1c1.9.1 3.7-.5 5-1.7a1 1 0 0 1 1.4 1.5A9.2 9.2 0 0 1 2.2 14c-.9-3.9 1-8 4.5-9.9 3.5-1.9 8-1.3 10.8 1.5L20 8Z\" fill-rule=\"nonzero\"/></svg>',\n    'rtl': '<svg width=\"24\" height=\"24\"><path d=\"M8 5h8v2h-2v12h-2V7h-2v12H8v-7c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 4.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L8 5Zm12 11.2a1 1 0 1 1-1 1.6l-3-2a1 1 0 0 1 0-1.6l3-2a1 1 0 1 1 1 1.6L18.4 15l1.8 1.2Z\" fill-rule=\"evenodd\"/></svg>',\n    'save': '<svg width=\"24\" height=\"24\"><path d=\"M5 16h14a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-2c0-1.1.9-2 2-2Zm0 2v2h14v-2H5Zm10 0h2v2h-2v-2Zm-4-6.4L8.7 9.3a1 1 0 1 0-1.4 1.4l4 4c.4.4 1 .4 1.4 0l4-4a1 1 0 1 0-1.4-1.4L13 11.6V4a1 1 0 0 0-2 0v7.6Z\" fill-rule=\"nonzero\"/></svg>',\n    'search': '<svg width=\"24\" height=\"24\"><path d=\"M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3Zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12Z\" fill-rule=\"nonzero\"/></svg>',\n    'select-all': '<svg width=\"24\" height=\"24\"><path d=\"M3 5h2V3a2 2 0 0 0-2 2Zm0 8h2v-2H3v2Zm4 8h2v-2H7v2ZM3 9h2V7H3v2Zm10-6h-2v2h2V3Zm6 0v2h2a2 2 0 0 0-2-2ZM5 21v-2H3c0 1.1.9 2 2 2Zm-2-4h2v-2H3v2ZM9 3H7v2h2V3Zm2 18h2v-2h-2v2Zm8-8h2v-2h-2v2Zm0 8a2 2 0 0 0 2-2h-2v2Zm0-12h2V7h-2v2Zm0 8h2v-2h-2v2Zm-4 4h2v-2h-2v2Zm0-16h2V3h-2v2ZM7 17h10V7H7v10Zm2-8h6v6H9V9Z\" fill-rule=\"nonzero\"/></svg>',\n    'selected': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M6 4h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2Zm3.6 10.9L7 12.3a.7.7 0 0 0-1 1L9.6 17 18 8.6a.7.7 0 0 0 0-1 .7.7 0 0 0-1 0l-7.4 7.3Z\"/></svg>',\n    'settings': '<svg width=\"24\" height=\"24\"><path d=\"M11 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V8H5a1 1 0 1 1 0-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.5V6ZM8 8h2V6H8v2Zm9 2.8v.2h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v.3c0 .2 0 .3-.2.5l-.6.2h-2.4c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V13H5a1 1 0 0 1 0-2h8v-.3c0-.2 0-.3.2-.5l.6-.2h2.4c.3 0 .4 0 .6.2l.2.6ZM14 13h2v-2h-2v2Zm-3 2.8v.2h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V18H5a1 1 0 0 1 0-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.6ZM8 18h2v-2H8v2Z\" fill-rule=\"evenodd\"/></svg>',\n    'sharpen': '<svg width=\"24\" height=\"24\"><path d=\"m16 6 4 4-8 9-8-9 4-4h8Zm-4 10.2 5.5-6.2-.1-.1H12v-.3h5.1l-.2-.2H12V9h4.6l-.2-.2H12v-.3h4.1l-.2-.2H12V8h3.6l-.2-.2H8.7L6.5 10l.1.1H12v.3H6.9l.2.2H12v.3H7.3l.2.2H12v.3H7.7l.3.2h4v.3H8.2l.2.2H12v.3H8.6l.3.2H12v.3H9l.3.2H12v.3H9.5l.2.2H12v.3h-2l.2.2H12v.3h-1.6l.2.2H12v.3h-1.1l.2.2h.9v.3h-.7l.2.2h.5v.3h-.3l.3.2Z\" fill-rule=\"evenodd\"/></svg>',\n    'sourcecode': '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"M9.8 15.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0l-4.4-4.1a.8.8 0 0 1 0-1.2l4.4-4.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L6 12l3.8 3.7ZM14.2 15.7c-.3.3-.3.8 0 1 .4.4.9.4 1.2 0l4.4-4.1c.3-.3.3-.9 0-1.2l-4.4-4.2a.8.8 0 0 0-1.2 0c-.3.3-.3.8 0 1.1L18 12l-3.8 3.7Z\"/></g></svg>',\n    'spell-check': '<svg width=\"24\" height=\"24\"><path d=\"M6 8v3H5V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h2c.3 0 .5.1.7.3.2.2.3.4.3.7v6H8V8H6Zm0-3v2h2V5H6Zm13 0h-3v5h3v1h-3a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7V5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3v1Zm-5 1.5-.1.7c-.1.2-.3.3-.6.3.3 0 .5.1.6.3l.1.7V10c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-3V4h3c.3 0 .5.1.7.3.2.2.3.4.3.7v1.5ZM13 10V8h-2v2h2Zm0-3V5h-2v2h2Zm3 5 1 1-6.5 7L7 15.5l1.3-1 2.2 2.2L16 12Z\" fill-rule=\"evenodd\"/></svg>',\n    'strike-through': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path d=\"M15.6 8.5c-.5-.7-1-1.1-1.3-1.3-.6-.4-1.3-.6-2-.6-2.7 0-2.8 1.7-2.8 2.1 0 1.6 1.8 2 3.2 2.3 4.4.9 4.6 2.8 4.6 3.9 0 1.4-.7 4.1-5 4.1A6.2 6.2 0 0 1 7 16.4l1.5-1.1c.4.6 1.6 2 3.7 2 1.6 0 2.5-.4 3-1.2.4-.8.3-2-.8-2.6-.7-.4-1.6-.7-2.9-1-1-.2-3.9-.8-3.9-3.6C7.6 6 10.3 5 12.4 5c2.9 0 4.2 1.6 4.7 2.4l-1.5 1.1Z\"/><path d=\"M5 11h14a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2Z\" fill-rule=\"nonzero\"/></g></svg>',\n    'subscript': '<svg width=\"24\" height=\"24\"><path d=\"m10.4 10 4.6 4.6-1.4 1.4L9 11.4 4.4 16 3 14.6 7.6 10 3 5.4 4.4 4 9 8.6 13.6 4 15 5.4 10.4 10ZM21 19h-5v-1l1-.8 1.7-1.6c.3-.4.5-.8.5-1.2 0-.3 0-.6-.2-.7-.2-.2-.5-.3-.9-.3a2 2 0 0 0-.8.2l-.7.3-.4-1.1 1-.6 1.2-.2c.8 0 1.4.3 1.8.7.4.4.6.9.6 1.5s-.2 1.1-.5 1.6a8 8 0 0 1-1.3 1.3l-.6.6h2.6V19Z\" fill-rule=\"nonzero\"/></svg>',\n    'superscript': '<svg width=\"24\" height=\"24\"><path d=\"M15 9.4 10.4 14l4.6 4.6-1.4 1.4L9 15.4 4.4 20 3 18.6 7.6 14 3 9.4 4.4 8 9 12.6 13.6 8 15 9.4Zm5.9 1.6h-5v-1l1-.8 1.7-1.6c.3-.5.5-.9.5-1.3 0-.3 0-.5-.2-.7-.2-.2-.5-.3-.9-.3l-.8.2-.7.4-.4-1.2c.2-.2.5-.4 1-.5.3-.2.8-.2 1.2-.2.8 0 1.4.2 1.8.6.4.4.6 1 .6 1.6 0 .5-.2 1-.5 1.5l-1.3 1.4-.6.5h2.6V11Z\" fill-rule=\"nonzero\"/></svg>',\n    'table-caption': '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><rect width=\"12\" height=\"2\" x=\"3\" y=\"4\" rx=\"1\"/><path d=\"M19 8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-8c0-1.1.9-2 2-2h14ZM5 15v3h6v-3H5Zm14 0h-6v3h6v-3Zm0-5h-6v3h6v-3ZM5 13h6v-3H5v3Z\"/></g></svg>',\n    'table-cell-classes': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path fill-rule=\"nonzero\" d=\"M13 4v9H3V6c0-1.1.9-2 2-2h8Zm-2 2H5v5h6V6Z\"/><path fill-rule=\"nonzero\" d=\"M13 4h6a2 2 0 0 1 2 2v7h-8v-2h6V6h-6V4Z\" opacity=\".2\"/><path d=\"m18 20-2.6 1.6.7-3-2.4-2 3.1-.2 1.2-2.9 1.2 2.9 3.1.2-2.4 2 .7 3z\"/><path fill-rule=\"nonzero\" d=\"M3 13v5c0 1.1.9 2 2 2h8v-7h-2v5H5v-5H3Z\" opacity=\".2\"/></g></svg>',\n    'table-cell-properties': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14Zm-8 9H5v5h6v-5Zm8 0h-6v5h6v-5Zm-8-7H5v5h6V6Z\"/></svg>',\n    'table-cell-select-all': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14Zm0 2H5v12h14V6Z\"/><path d=\"M13 6v5h6v2h-6v5h-2v-5H5v-2h6V6h2Z\" opacity=\".2\"/></g></svg>',\n    'table-cell-select-inner': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14Zm0 2H5v12h14V6Z\" opacity=\".2\"/><path d=\"M13 6v5h6v2h-6v5h-2v-5H5v-2h6V6h2Z\"/></g></svg>',\n    'table-classes': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 0 1 2 2v7h-8v7H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14Zm-8 9H5v5h6v-5Zm8-7h-6v5h6V6Zm-8 0H5v5h6V6Z\"/><path d=\"m18 20-2.6 1.6.7-3-2.4-2 3.1-.2 1.2-2.9 1.2 2.9 3.1.2-2.4 2 .7 3z\"/></g></svg>',\n    'table-delete-column': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14Zm-4 4h-2V6h-2v2H9V6H5v12h4v-2h2v2h2v-2h2v2h4V6h-4v2Zm.3.5 1 1.2-3 2.3 3 2.3-1 1.2L12 13l-3.3 2.6-1-1.2 3-2.3-3-2.3 1-1.2L12 11l3.3-2.5Z\"/></svg>',\n    'table-delete-row': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14Zm0 2H5v3h2.5v2H5v2h2.5v2H5v3h14v-3h-2.5v-2H19v-2h-2.5V9H19V6Zm-4.7 1.8 1.2 1L13 12l2.6 3.3-1.2 1-2.3-3-2.3 3-1.2-1L11 12 8.5 8.7l1.2-1 2.3 3 2.3-3Z\"/></svg>',\n    'table-delete-table': '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><path d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14ZM5 6v12h14V6H5Z\"/><path d=\"m14.4 8.6 1.1 1-2.4 2.4 2.4 2.4-1.1 1.1-2.4-2.4-2.4 2.4-1-1.1 2.3-2.4-2.3-2.4 1-1 2.4 2.3z\"/></g></svg>',\n    'table-insert-column-after': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M20 4c.6 0 1 .4 1 1v2a1 1 0 0 1-2 0V6h-8v12h8v-1a1 1 0 0 1 2 0v2c0 .5-.4 1-.9 1H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h15ZM9 13H5v5h4v-5Zm7-5c.5 0 1 .4 1 .9V11h2a1 1 0 0 1 .1 2H17v2a1 1 0 0 1-2 .1V13h-2a1 1 0 0 1-.1-2H15V9c0-.6.4-1 1-1ZM9 6H5v5h4V6Z\"/></svg>',\n    'table-insert-column-before': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a1 1 0 0 1-1-1v-2a1 1 0 0 1 2 0v1h8V6H5v1a1 1 0 1 1-2 0V5c0-.6.4-1 1-1h15Zm0 9h-4v5h4v-5ZM8 8c.5 0 1 .4 1 .9V11h2a1 1 0 0 1 .1 2H9v2a1 1 0 0 1-2 .1V13H5a1 1 0 0 1-.1-2H7V9c0-.6.4-1 1-1Zm11-2h-4v5h4V6Z\"/></svg>',\n    'table-insert-row-above': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M6 4a1 1 0 1 1 0 2H5v6h14V6h-1a1 1 0 0 1 0-2h2c.6 0 1 .4 1 1v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5c0-.6.4-1 1-1h2Zm5 10H5v4h6v-4Zm8 0h-6v4h6v-4ZM12 3c.5 0 1 .4 1 .9V6h2a1 1 0 0 1 0 2h-2v2a1 1 0 0 1-2 .1V8H9a1 1 0 0 1 0-2h2V4c0-.6.4-1 1-1Z\"/></svg>',\n    'table-insert-row-after': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M12 13c.5 0 1 .4 1 .9V16h2a1 1 0 0 1 .1 2H13v2a1 1 0 0 1-2 .1V18H9a1 1 0 0 1-.1-2H11v-2c0-.6.4-1 1-1Zm6 7a1 1 0 0 1 0-2h1v-6H5v6h1a1 1 0 0 1 0 2H4a1 1 0 0 1-1-1V6c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v13c0 .5-.4 1-.9 1H18ZM11 6H5v4h6V6Zm8 0h-6v4h6V6Z\"/></svg>',\n    'table-left-header': '<svg width=\"24\" height=\"24\"><path d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14Zm0 9h-4v5h4v-5Zm-6 0H9v5h4v-5Zm0-7H9v5h4V6Zm6 0h-4v5h4V6Z\"/></svg>',\n    'table-merge-cells': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14ZM5 15.5V18h3v-2.5H5Zm14-5h-9V18h9v-7.5ZM19 6h-4v2.5h4V6ZM8 6H5v2.5h3V6Zm5 0h-3v2.5h3V6Zm-8 7.5h3v-3H5v3Z\"/></svg>',\n    'table-row-numbering-rtl': '<svg width=\"24\" height=\"24\"><path d=\"M6 4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2h12a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H6Zm0 12h8v3H6v-3Zm11 0c.6 0 1 .4 1 1v1a1 1 0 0 1-2 0v-1c0-.6.4-1 1-1ZM6 11h8v3H6v-3Zm11 0c.6 0 1 .4 1 1v1a1 1 0 0 1-2 0v-1c0-.6.4-1 1-1ZM6 6h8v3H6V6Zm11 0c.6 0 1 .4 1 1v1a1 1 0 1 1-2 0V7c0-.6.4-1 1-1Z\"/></svg>',\n    'table-row-numbering': '<svg width=\"24\" height=\"24\"><path d=\"M18 4a2 2 0 0 1 2 2v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h12Zm0 12h-8v3h8v-3ZM7 16a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1c0-.6-.4-1-1-1Zm11-5h-8v3h8v-3ZM7 11a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1c0-.6-.4-1-1-1Zm11-5h-8v3h8V6ZM7 6a1 1 0 0 0-1 1v1a1 1 0 1 0 2 0V7c0-.6-.4-1-1-1Z\"/></svg>',\n    'table-row-properties': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14ZM5 15v3h6v-3H5Zm14 0h-6v3h6v-3Zm0-9h-6v3h6V6ZM5 9h6V6H5v3Z\"/></svg>',\n    'table-split-cells': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14ZM8 15.5H5V18h3v-2.5Zm11-5h-9V18h9v-7.5Zm-2.5 1 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2-2-2 1-1 2 2 2-2Zm-8.5-1H5v3h3v-3ZM19 6h-4v2.5h4V6ZM8 6H5v2.5h3V6Zm5 0h-3v2.5h3V6Z\"/></svg>',\n    'table-top-header': '<svg width=\"24\" height=\"24\"><path d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14Zm-8 11H5v3h6v-3Zm8 0h-6v3h6v-3Zm0-5h-6v3h6v-3ZM5 13h6v-3H5v3Z\"/></svg>',\n    'table': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M19 4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h14ZM5 14v4h6v-4H5Zm14 0h-6v4h6v-4Zm0-6h-6v4h6V8ZM5 12h6V8H5v4Z\"/></svg>',\n    'template': '<svg width=\"24\" height=\"24\"><path d=\"M19 19v-1H5v1h14ZM9 16v-4a5 5 0 1 1 6 0v4h4a2 2 0 0 1 2 2v3H3v-3c0-1.1.9-2 2-2h4Zm4 0v-5l.8-.6a3 3 0 1 0-3.6 0l.8.6v5h2Z\" fill-rule=\"nonzero\"/></svg>',\n    'temporary-placeholder': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path d=\"M9 7.6V6h2.5V4.5a.5.5 0 1 1 1 0V6H15v1.6a8 8 0 1 1-6 0Zm-2.6 5.3a.5.5 0 0 0 .3.6c.3 0 .6 0 .6-.3l.1-.2a5 5 0 0 1 3.3-2.8c.3-.1.4-.4.4-.6-.1-.3-.4-.5-.6-.4a6 6 0 0 0-4.1 3.7Z\"/><circle cx=\"14\" cy=\"4\" r=\"1\"/><circle cx=\"12\" cy=\"2\" r=\"1\"/><circle cx=\"10\" cy=\"4\" r=\"1\"/></g></svg>',\n    'text-color': '<svg width=\"24\" height=\"24\"><g fill-rule=\"evenodd\"><path id=\"tox-icon-text-color__color\" d=\"M3 18h18v3H3z\"/><path d=\"M8.7 16h-.8a.5.5 0 0 1-.5-.6l2.7-9c.1-.3.3-.4.5-.4h2.8c.2 0 .4.1.5.4l2.7 9a.5.5 0 0 1-.5.6h-.8a.5.5 0 0 1-.4-.4l-.7-2.2c0-.3-.3-.4-.5-.4h-3.4c-.2 0-.4.1-.5.4l-.7 2.2c0 .3-.2.4-.4.4Zm2.6-7.6-.6 2a.5.5 0 0 0 .5.6h1.6a.5.5 0 0 0 .5-.6l-.6-2c0-.3-.3-.4-.5-.4h-.4c-.2 0-.4.1-.5.4Z\"/></g></svg>',\n    'toc': '<svg width=\"24\" height=\"24\"><path d=\"M5 5c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 1 1 0-2Zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 1 1 0-2Zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2Zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2Zm0-4c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 1 1 0-2Zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2Zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Z\" fill-rule=\"evenodd\"/></svg>',\n    'translate': '<svg width=\"24\" height=\"24\"><path d=\"m12.7 14.3-.3.7-.4.7-2.2-2.2-3.1 3c-.3.4-.8.4-1 0a.7.7 0 0 1 0-1l3.1-3A12.4 12.4 0 0 1 6.7 9H8a10.1 10.1 0 0 0 1.7 2.4c.5-.5 1-1.1 1.4-1.8l.9-2H4.7a.7.7 0 1 1 0-1.5h4.4v-.7c0-.4.3-.8.7-.8.4 0 .7.4.7.8v.7H15c.4 0 .8.3.8.7 0 .4-.4.8-.8.8h-1.4a12.3 12.3 0 0 1-1 2.4 13.5 13.5 0 0 1-1.7 2.3l1.9 1.8Zm4.3-3 2.7 7.3a.5.5 0 0 1-.4.7 1 1 0 0 1-1-.7l-.6-1.5h-3.4l-.6 1.5a1 1 0 0 1-1 .7.5.5 0 0 1-.4-.7l2.7-7.4a1 1 0 0 1 2 0Zm-2.2 4.4h2.4L16 12.5l-1.2 3.2Z\" fill-rule=\"evenodd\"/></svg>',\n    'underline': '<svg width=\"24\" height=\"24\"><path d=\"M16 5c.6 0 1 .4 1 1v5.5a4 4 0 0 1-.4 1.8l-1 1.4a5.3 5.3 0 0 1-5.5 1 5 5 0 0 1-1.6-1c-.5-.4-.8-.9-1.1-1.4a4 4 0 0 1-.4-1.8V6c0-.6.4-1 1-1s1 .4 1 1v5.5c0 .3 0 .6.2 1l.6.7a3.3 3.3 0 0 0 2.2.8 3.4 3.4 0 0 0 2.2-.8c.3-.2.4-.5.6-.8l.2-.9V6c0-.6.4-1 1-1ZM8 17h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2Z\" fill-rule=\"evenodd\"/></svg>',\n    'undo': '<svg width=\"24\" height=\"24\"><path d=\"M6.4 8H12c3.7 0 6.2 2 6.8 5.1.6 2.7-.4 5.6-2.3 6.8a1 1 0 0 1-1-1.8c1.1-.6 1.8-2.7 1.4-4.6-.5-2.1-2.1-3.5-4.9-3.5H6.4l3.3 3.3a1 1 0 1 1-1.4 1.4l-5-5a1 1 0 0 1 0-1.4l5-5a1 1 0 0 1 1.4 1.4L6.4 8Z\" fill-rule=\"nonzero\"/></svg>',\n    'unlink': '<svg width=\"24\" height=\"24\"><path d=\"M6.2 12.3a1 1 0 0 1 1.4 1.4l-2 2a2 2 0 1 0 2.6 2.8l4.8-4.8a1 1 0 0 0 0-1.4 1 1 0 1 1 1.4-1.3 2.9 2.9 0 0 1 0 4L9.6 20a3.9 3.9 0 0 1-5.5-5.5l2-2Zm11.6-.6a1 1 0 0 1-1.4-1.4l2.1-2a2 2 0 1 0-2.7-2.8L11 10.3a1 1 0 0 0 0 1.4A1 1 0 1 1 9.6 13a2.9 2.9 0 0 1 0-4L14.4 4a3.9 3.9 0 0 1 5.5 5.5l-2 2ZM7.6 6.3a.8.8 0 0 1-1 1.1L3.3 4.2a.7.7 0 1 1 1-1l3.2 3.1ZM5.1 8.6a.8.8 0 0 1 0 1.5H3a.8.8 0 0 1 0-1.5H5Zm5-3.5a.8.8 0 0 1-1.5 0V3a.8.8 0 0 1 1.5 0V5Zm6 11.8a.8.8 0 0 1 1-1l3.2 3.2a.8.8 0 0 1-1 1L16 17Zm-2.2 2a.8.8 0 0 1 1.5 0V21a.8.8 0 0 1-1.5 0V19Zm5-3.5a.7.7 0 1 1 0-1.5H21a.8.8 0 0 1 0 1.5H19Z\" fill-rule=\"nonzero\"/></svg>',\n    'unlock': '<svg width=\"24\" height=\"24\"><path d=\"M16 5c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h-2V8a1 1 0 0 0-.3-.7A1 1 0 0 0 16 7h-2a1 1 0 0 0-.7.3 1 1 0 0 0-.3.7v3h.3c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H4.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H11V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2Z\" fill-rule=\"evenodd\"/></svg>',\n    'unordered-list': '<svg width=\"24\" height=\"24\"><path d=\"M11 5h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Zm0 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2ZM4.5 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1Zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1Zm0 6c0-.4.1-.8.4-1 .3-.4.7-.5 1.1-.5.4 0 .8.1 1 .4.4.3.5.7.5 1.1 0 .4-.1.8-.4 1-.3.4-.7.5-1.1.5-.4 0-.8-.1-1-.4-.4-.3-.5-.7-.5-1.1Z\" fill-rule=\"evenodd\"/></svg>',\n    'unselected': '<svg width=\"24\" height=\"24\"><path fill-rule=\"nonzero\" d=\"M6 4h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2Zm0 1a1 1 0 0 0-1 1v12c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1H6Z\"/></svg>',\n    'upload': '<svg width=\"24\" height=\"24\"><path d=\"M18 19v-2a1 1 0 0 1 2 0v3c0 .6-.4 1-1 1H5a1 1 0 0 1-1-1v-3a1 1 0 0 1 2 0v2h12ZM11 6.4 8.7 8.7a1 1 0 0 1-1.4-1.4l4-4a1 1 0 0 1 1.4 0l4 4a1 1 0 1 1-1.4 1.4L13 6.4V16a1 1 0 0 1-2 0V6.4Z\" fill-rule=\"nonzero\"/></svg>',\n    'user': '<svg width=\"24\" height=\"24\"><path d=\"M12 24a12 12 0 1 1 0-24 12 12 0 0 1 0 24Zm-8.7-5.3a11 11 0 0 0 17.4 0C19.4 16.3 14.6 15 12 15c-2.6 0-7.4 1.3-8.7 3.7ZM12 13c2.2 0 4-2 4-4.5S14.2 4 12 4 8 6 8 8.5 9.8 13 12 13Z\" fill-rule=\"nonzero\"/></svg>',\n    'vertical-align': '<svg width=\"24\" height=\"24\"><g fill-rule=\"nonzero\"><rect width=\"18\" height=\"2\" x=\"3\" y=\"11\" rx=\"1\"/><path d=\"M12 2c.6 0 1 .4 1 1v4l2-1.3a1 1 0 0 1 1.2 1.5l-.1.1-4.1 3-4-3a1 1 0 0 1 1-1.7l2 1.5V3c0-.6.4-1 1-1zm0 11.8 4 2.9a1 1 0 0 1-1 1.7l-2-1.5V21c0 .5-.4 1-.9 1H12a1 1 0 0 1-1-1v-4l-2 1.3a1 1 0 0 1-1.2-.1l-.1-.1a1 1 0 0 1 .1-1.3l.1-.1 4.1-3z\"/></g></svg>',\n    'visualblocks': '<svg width=\"24\" height=\"24\"><path d=\"M9 19v2H7v-2h2Zm-4 0v2a2 2 0 0 1-2-2h2Zm8 0v2h-2v-2h2Zm8 0a2 2 0 0 1-2 2v-2h2Zm-4 0v2h-2v-2h2ZM15 7a1 1 0 0 1 0 2v7a1 1 0 0 1-2 0V9h-1v7a1 1 0 0 1-2 0v-4a2.5 2.5 0 0 1-.2-5H15ZM5 15v2H3v-2h2Zm16 0v2h-2v-2h2ZM5 11v2H3v-2h2Zm16 0v2h-2v-2h2ZM5 7v2H3V7h2Zm16 0v2h-2V7h2ZM5 3v2H3c0-1.1.9-2 2-2Zm8 0v2h-2V3h2Zm6 0a2 2 0 0 1 2 2h-2V3ZM9 3v2H7V3h2Zm8 0v2h-2V3h2Z\" fill-rule=\"evenodd\"/></svg>',\n    'visualchars': '<svg width=\"24\" height=\"24\"><path d=\"M10 5h7a1 1 0 0 1 0 2h-1v11a1 1 0 0 1-2 0V7h-2v11a1 1 0 0 1-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 6.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L10 5Z\" fill-rule=\"evenodd\"/></svg>',\n    'warning': '<svg width=\"24\" height=\"24\"><path d=\"M19.8 18.3c.2.5.3.9 0 1.2-.1.3-.5.5-1 .5H5.2c-.5 0-.9-.2-1-.5-.3-.3-.2-.7 0-1.2L11 4.7l.5-.5.5-.2c.2 0 .3 0 .5.2.2 0 .3.3.5.5l6.8 13.6ZM12 18c.3 0 .5-.1.7-.3.2-.2.3-.4.3-.7a1 1 0 0 0-.3-.7 1 1 0 0 0-.7-.3 1 1 0 0 0-.7.3 1 1 0 0 0-.3.7c0 .3.1.5.3.7.2.2.4.3.7.3Zm.7-3 .3-4a1 1 0 0 0-.3-.7 1 1 0 0 0-.7-.3 1 1 0 0 0-.7.3 1 1 0 0 0-.3.7l.3 4h1.4Z\" fill-rule=\"evenodd\"/></svg>',\n    'zoom-in': '<svg width=\"24\" height=\"24\"><path d=\"M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3Zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12Zm-1-9a1 1 0 0 1 2 0v6a1 1 0 0 1-2 0V8Zm-2 4a1 1 0 0 1 0-2h6a1 1 0 0 1 0 2H8Z\" fill-rule=\"nonzero\"/></svg>',\n    'zoom-out': '<svg width=\"24\" height=\"24\"><path d=\"M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3Zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12Zm-3-5a1 1 0 0 1 0-2h6a1 1 0 0 1 0 2H8Z\" fill-rule=\"nonzero\"/></svg>',\n  }\n});"
  },
  {
    "path": "publishable/assets/js/icons/default/index.js",
    "content": "// Exports the \"default\" icons for usage with module loaders\n// Usage:\n//   CommonJS:\n//     require('tinymce/icons/default')\n//   ES2015:\n//     import 'tinymce/icons/default'\nrequire('./icons.js');"
  },
  {
    "path": "publishable/assets/js/models/dom/index.js",
    "content": "// Exports the \"dom\" model for usage with module loaders\n// Usage:\n//   CommonJS:\n//     require('tinymce/models/dom')\n//   ES2015:\n//     import 'tinymce/models/dom'\nrequire('./model.js');"
  },
  {
    "path": "publishable/assets/js/models/dom/model.js",
    "content": "/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n    'use strict';\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.ModelManager');\n\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType$1 = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const eq$2 = t => a => t === a;\n    const isString = isType$1('string');\n    const isObject = isType$1('object');\n    const isArray = isType$1('array');\n    const isNull = eq$2(null);\n    const isBoolean = isSimpleType('boolean');\n    const isUndefined = eq$2(undefined);\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n    const isNumber = isSimpleType('number');\n\n    const noop = () => {\n    };\n    const compose = (fa, fb) => {\n      return (...args) => {\n        return fa(fb.apply(null, args));\n      };\n    };\n    const compose1 = (fbc, fab) => a => fbc(fab(a));\n    const constant = value => {\n      return () => {\n        return value;\n      };\n    };\n    const identity = x => {\n      return x;\n    };\n    const tripleEquals = (a, b) => {\n      return a === b;\n    };\n    function curry(fn, ...initialArgs) {\n      return (...restArgs) => {\n        const all = initialArgs.concat(restArgs);\n        return fn.apply(null, all);\n      };\n    }\n    const not = f => t => !f(t);\n    const die = msg => {\n      return () => {\n        throw new Error(msg);\n      };\n    };\n    const apply = f => {\n      return f();\n    };\n    const never = constant(false);\n    const always = constant(true);\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const nativeSlice = Array.prototype.slice;\n    const nativeIndexOf = Array.prototype.indexOf;\n    const nativePush = Array.prototype.push;\n    const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n    const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n    const exists = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const range$1 = (num, f) => {\n      const r = [];\n      for (let i = 0; i < num; i++) {\n        r.push(f(i));\n      }\n      return r;\n    };\n    const map$1 = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each$2 = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const eachr = (xs, f) => {\n      for (let i = xs.length - 1; i >= 0; i--) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const partition = (xs, pred) => {\n      const pass = [];\n      const fail = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        const arr = pred(x, i) ? pass : fail;\n        arr.push(x);\n      }\n      return {\n        pass,\n        fail\n      };\n    };\n    const filter$2 = (xs, pred) => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    const foldr = (xs, f, acc) => {\n      eachr(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const foldl = (xs, f, acc) => {\n      each$2(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const findUntil = (xs, pred, until) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(x);\n        } else if (until(x, i)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const find$1 = (xs, pred) => {\n      return findUntil(xs, pred, never);\n    };\n    const findIndex = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(i);\n        }\n      }\n      return Optional.none();\n    };\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const bind$2 = (xs, f) => flatten(map$1(xs, f));\n    const forall = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        const x = xs[i];\n        if (pred(x, i) !== true) {\n          return false;\n        }\n      }\n      return true;\n    };\n    const reverse = xs => {\n      const r = nativeSlice.call(xs, 0);\n      r.reverse();\n      return r;\n    };\n    const mapToObject = (xs, f) => {\n      const r = {};\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        r[String(x)] = f(x, i);\n      }\n      return r;\n    };\n    const sort$1 = (xs, comparator) => {\n      const copy = nativeSlice.call(xs, 0);\n      copy.sort(comparator);\n      return copy;\n    };\n    const get$d = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n    const head = xs => get$d(xs, 0);\n    const last$2 = xs => get$d(xs, xs.length - 1);\n    const findMap = (arr, f) => {\n      for (let i = 0; i < arr.length; i++) {\n        const r = f(arr[i], i);\n        if (r.isSome()) {\n          return r;\n        }\n      }\n      return Optional.none();\n    };\n\n    const keys = Object.keys;\n    const hasOwnProperty = Object.hasOwnProperty;\n    const each$1 = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n    const map = (obj, f) => {\n      return tupleMap(obj, (x, i) => ({\n        k: i,\n        v: f(x, i)\n      }));\n    };\n    const tupleMap = (obj, f) => {\n      const r = {};\n      each$1(obj, (x, i) => {\n        const tuple = f(x, i);\n        r[tuple.k] = tuple.v;\n      });\n      return r;\n    };\n    const objAcc = r => (x, i) => {\n      r[i] = x;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      each$1(obj, (x, i) => {\n        (pred(x, i) ? onTrue : onFalse)(x, i);\n      });\n    };\n    const filter$1 = (obj, pred) => {\n      const t = {};\n      internalFilter(obj, pred, objAcc(t), noop);\n      return t;\n    };\n    const mapToArray = (obj, f) => {\n      const r = [];\n      each$1(obj, (value, name) => {\n        r.push(f(value, name));\n      });\n      return r;\n    };\n    const values = obj => {\n      return mapToArray(obj, identity);\n    };\n    const get$c = (obj, key) => {\n      return has$1(obj, key) ? Optional.from(obj[key]) : Optional.none();\n    };\n    const has$1 = (obj, key) => hasOwnProperty.call(obj, key);\n    const hasNonNullableKey = (obj, key) => has$1(obj, key) && obj[key] !== undefined && obj[key] !== null;\n    const isEmpty = r => {\n      for (const x in r) {\n        if (hasOwnProperty.call(r, x)) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const COMMENT = 8;\n    const DOCUMENT = 9;\n    const DOCUMENT_FRAGMENT = 11;\n    const ELEMENT = 1;\n    const TEXT = 3;\n\n    const name = element => {\n      const r = element.dom.nodeName;\n      return r.toLowerCase();\n    };\n    const type = element => element.dom.nodeType;\n    const isType = t => element => type(element) === t;\n    const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n    const isElement = isType(ELEMENT);\n    const isText = isType(TEXT);\n    const isDocument = isType(DOCUMENT);\n    const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n    const isTag = tag => e => isElement(e) && name(e) === tag;\n\n    const rawSet = (dom, key, value) => {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    const set$2 = (element, key, value) => {\n      rawSet(element.dom, key, value);\n    };\n    const setAll$1 = (element, attrs) => {\n      const dom = element.dom;\n      each$1(attrs, (v, k) => {\n        rawSet(dom, k, v);\n      });\n    };\n    const setOptions = (element, attrs) => {\n      each$1(attrs, (v, k) => {\n        v.fold(() => {\n          remove$7(element, k);\n        }, value => {\n          rawSet(element.dom, k, value);\n        });\n      });\n    };\n    const get$b = (element, key) => {\n      const v = element.dom.getAttribute(key);\n      return v === null ? undefined : v;\n    };\n    const getOpt = (element, key) => Optional.from(get$b(element, key));\n    const remove$7 = (element, key) => {\n      element.dom.removeAttribute(key);\n    };\n    const clone$2 = element => foldl(element.dom.attributes, (acc, attr) => {\n      acc[attr.name] = attr.value;\n      return acc;\n    }, {});\n\n    const fromHtml$1 = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom$1(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom$1(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom$1(node);\n    };\n    const fromDom$1 = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint$1 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n    const SugarElement = {\n      fromHtml: fromHtml$1,\n      fromTag,\n      fromText,\n      fromDom: fromDom$1,\n      fromPoint: fromPoint$1\n    };\n\n    const is$2 = (element, selector) => {\n      const dom = element.dom;\n      if (dom.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n    const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n    const all$1 = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? [] : map$1(base.querySelectorAll(selector), SugarElement.fromDom);\n    };\n    const one = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n    };\n\n    const eq$1 = (e1, e2) => e1.dom === e2.dom;\n    const contains$1 = (e1, e2) => {\n      const d1 = e1.dom;\n      const d2 = e2.dom;\n      return d1 === d2 ? false : d1.contains(d2);\n    };\n    const is$1 = is$2;\n\n    const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n    const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);\n    const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n    const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n    const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n    const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n    const parents = (element, isRoot) => {\n      const stop = isFunction(isRoot) ? isRoot : never;\n      let dom = element.dom;\n      const ret = [];\n      while (dom.parentNode !== null && dom.parentNode !== undefined) {\n        const rawParent = dom.parentNode;\n        const p = SugarElement.fromDom(rawParent);\n        ret.push(p);\n        if (stop(p) === true) {\n          break;\n        } else {\n          dom = rawParent;\n        }\n      }\n      return ret;\n    };\n    const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n    const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n    const children$2 = element => map$1(element.dom.childNodes, SugarElement.fromDom);\n    const child$2 = (element, index) => {\n      const cs = element.dom.childNodes;\n      return Optional.from(cs[index]).map(SugarElement.fromDom);\n    };\n    const firstChild = element => child$2(element, 0);\n\n    const before$3 = (marker, element) => {\n      const parent$1 = parent(marker);\n      parent$1.each(v => {\n        v.dom.insertBefore(element.dom, marker.dom);\n      });\n    };\n    const after$5 = (marker, element) => {\n      const sibling = nextSibling(marker);\n      sibling.fold(() => {\n        const parent$1 = parent(marker);\n        parent$1.each(v => {\n          append$1(v, element);\n        });\n      }, v => {\n        before$3(v, element);\n      });\n    };\n    const prepend = (parent, element) => {\n      const firstChild$1 = firstChild(parent);\n      firstChild$1.fold(() => {\n        append$1(parent, element);\n      }, v => {\n        parent.dom.insertBefore(element.dom, v.dom);\n      });\n    };\n    const append$1 = (parent, element) => {\n      parent.dom.appendChild(element.dom);\n    };\n    const appendAt = (parent, element, index) => {\n      child$2(parent, index).fold(() => {\n        append$1(parent, element);\n      }, v => {\n        before$3(v, element);\n      });\n    };\n    const wrap = (element, wrapper) => {\n      before$3(element, wrapper);\n      append$1(wrapper, element);\n    };\n\n    const after$4 = (marker, elements) => {\n      each$2(elements, (x, i) => {\n        const e = i === 0 ? marker : elements[i - 1];\n        after$5(e, x);\n      });\n    };\n    const append = (parent, elements) => {\n      each$2(elements, x => {\n        append$1(parent, x);\n      });\n    };\n\n    const empty = element => {\n      element.dom.textContent = '';\n      each$2(children$2(element), rogue => {\n        remove$6(rogue);\n      });\n    };\n    const remove$6 = element => {\n      const dom = element.dom;\n      if (dom.parentNode !== null) {\n        dom.parentNode.removeChild(dom);\n      }\n    };\n    const unwrap = wrapper => {\n      const children = children$2(wrapper);\n      if (children.length > 0) {\n        after$4(wrapper, children);\n      }\n      remove$6(wrapper);\n    };\n\n    const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n    const shallow = original => clone$1(original, false);\n    const deep = original => clone$1(original, true);\n    const shallowAs = (original, tag) => {\n      const nu = SugarElement.fromTag(tag);\n      const attributes = clone$2(original);\n      setAll$1(nu, attributes);\n      return nu;\n    };\n    const copy$2 = (original, tag) => {\n      const nu = shallowAs(original, tag);\n      const cloneChildren = children$2(deep(original));\n      append(nu, cloneChildren);\n      return nu;\n    };\n    const mutate$1 = (original, tag) => {\n      const nu = shallowAs(original, tag);\n      after$5(original, nu);\n      const children = children$2(original);\n      append(nu, children);\n      remove$6(original);\n      return nu;\n    };\n\n    const validSectionList = [\n      'tfoot',\n      'thead',\n      'tbody',\n      'colgroup'\n    ];\n    const isValidSection = parentName => contains$2(validSectionList, parentName);\n    const grid = (rows, columns) => ({\n      rows,\n      columns\n    });\n    const address = (row, column) => ({\n      row,\n      column\n    });\n    const detail = (element, rowspan, colspan) => ({\n      element,\n      rowspan,\n      colspan\n    });\n    const detailnew = (element, rowspan, colspan, isNew) => ({\n      element,\n      rowspan,\n      colspan,\n      isNew\n    });\n    const extended = (element, rowspan, colspan, row, column, isLocked) => ({\n      element,\n      rowspan,\n      colspan,\n      row,\n      column,\n      isLocked\n    });\n    const rowdetail = (element, cells, section) => ({\n      element,\n      cells,\n      section\n    });\n    const rowdetailnew = (element, cells, section, isNew) => ({\n      element,\n      cells,\n      section,\n      isNew\n    });\n    const elementnew = (element, isNew, isLocked) => ({\n      element,\n      isNew,\n      isLocked\n    });\n    const rowcells = (element, cells, section, isNew) => ({\n      element,\n      cells,\n      section,\n      isNew\n    });\n    const bounds = (startRow, startCol, finishRow, finishCol) => ({\n      startRow,\n      startCol,\n      finishRow,\n      finishCol\n    });\n    const columnext = (element, colspan, column) => ({\n      element,\n      colspan,\n      column\n    });\n    const colgroup = (element, columns) => ({\n      element,\n      columns\n    });\n\n    const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n    const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n    const isSupported$1 = constant(supported);\n    const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n    const getShadowRoot = e => {\n      const r = getRootNode(e);\n      return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n    };\n    const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n    const getOriginalEventTarget = event => {\n      if (isSupported$1() && isNonNullable(event.target)) {\n        const el = SugarElement.fromDom(event.target);\n        if (isElement(el) && isOpenShadowHost(el)) {\n          if (event.composed && event.composedPath) {\n            const composedPath = event.composedPath();\n            if (composedPath) {\n              return head(composedPath);\n            }\n          }\n        }\n      }\n      return Optional.from(event.target);\n    };\n    const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n    const inBody = element => {\n      const dom = isText(element) ? element.dom.parentNode : element.dom;\n      if (dom === undefined || dom === null || dom.ownerDocument === null) {\n        return false;\n      }\n      const doc = dom.ownerDocument;\n      return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n    };\n    const body$1 = () => getBody$1(SugarElement.fromDom(document));\n    const getBody$1 = doc => {\n      const b = doc.dom.body;\n      if (b === null || b === undefined) {\n        throw new Error('Body is not available yet');\n      }\n      return SugarElement.fromDom(b);\n    };\n\n    const ancestors$4 = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate);\n    const children$1 = (scope, predicate) => filter$2(children$2(scope), predicate);\n    const descendants$1 = (scope, predicate) => {\n      let result = [];\n      each$2(children$2(scope), x => {\n        if (predicate(x)) {\n          result = result.concat([x]);\n        }\n        result = result.concat(descendants$1(x, predicate));\n      });\n      return result;\n    };\n\n    const ancestors$3 = (scope, selector, isRoot) => ancestors$4(scope, e => is$2(e, selector), isRoot);\n    const children = (scope, selector) => children$1(scope, e => is$2(e, selector));\n    const descendants = (scope, selector) => all$1(selector, scope);\n\n    var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n      if (is(scope, a)) {\n        return Optional.some(scope);\n      } else if (isFunction(isRoot) && isRoot(scope)) {\n        return Optional.none();\n      } else {\n        return ancestor(scope, a, isRoot);\n      }\n    };\n\n    const ancestor$2 = (scope, predicate, isRoot) => {\n      let element = scope.dom;\n      const stop = isFunction(isRoot) ? isRoot : never;\n      while (element.parentNode) {\n        element = element.parentNode;\n        const el = SugarElement.fromDom(element);\n        if (predicate(el)) {\n          return Optional.some(el);\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$2 = (scope, predicate, isRoot) => {\n      const is = (s, test) => test(s);\n      return ClosestOrAncestor(is, ancestor$2, scope, predicate, isRoot);\n    };\n    const child$1 = (scope, predicate) => {\n      const pred = node => predicate(SugarElement.fromDom(node));\n      const result = find$1(scope.dom.childNodes, pred);\n      return result.map(SugarElement.fromDom);\n    };\n    const descendant$1 = (scope, predicate) => {\n      const descend = node => {\n        for (let i = 0; i < node.childNodes.length; i++) {\n          const child = SugarElement.fromDom(node.childNodes[i]);\n          if (predicate(child)) {\n            return Optional.some(child);\n          }\n          const res = descend(node.childNodes[i]);\n          if (res.isSome()) {\n            return res;\n          }\n        }\n        return Optional.none();\n      };\n      return descend(scope.dom);\n    };\n\n    const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, e => is$2(e, selector), isRoot);\n    const child = (scope, selector) => child$1(scope, e => is$2(e, selector));\n    const descendant = (scope, selector) => one(selector, scope);\n    const closest$1 = (scope, selector, isRoot) => {\n      const is = (element, selector) => is$2(element, selector);\n      return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n    };\n\n    const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n    const cat = arr => {\n      const r = [];\n      const push = x => {\n        r.push(x);\n      };\n      for (let i = 0; i < arr.length; i++) {\n        arr[i].each(push);\n      }\n      return r;\n    };\n    const bindFrom = (a, f) => a !== undefined && a !== null ? f(a) : Optional.none();\n    const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n    const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n    const contains = (str, substr, start = 0, end) => {\n      const idx = str.indexOf(substr, start);\n      if (idx !== -1) {\n        return isUndefined(end) ? true : idx + substr.length <= end;\n      } else {\n        return false;\n      }\n    };\n    const startsWith = (str, prefix) => {\n      return checkRange(str, prefix, 0);\n    };\n    const endsWith = (str, suffix) => {\n      return checkRange(str, suffix, str.length - suffix.length);\n    };\n    const blank = r => s => s.replace(r, '');\n    const trim = blank(/^\\s+|\\s+$/g);\n    const isNotEmpty = s => s.length > 0;\n    const toFloat = value => {\n      const num = parseFloat(value);\n      return isNaN(num) ? Optional.none() : Optional.some(num);\n    };\n\n    const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n    const internalSet = (dom, property, value) => {\n      if (!isString(value)) {\n        console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n        throw new Error('CSS value must be a string: ' + value);\n      }\n      if (isSupported(dom)) {\n        dom.style.setProperty(property, value);\n      }\n    };\n    const internalRemove = (dom, property) => {\n      if (isSupported(dom)) {\n        dom.style.removeProperty(property);\n      }\n    };\n    const set$1 = (element, property, value) => {\n      const dom = element.dom;\n      internalSet(dom, property, value);\n    };\n    const setAll = (element, css) => {\n      const dom = element.dom;\n      each$1(css, (v, k) => {\n        internalSet(dom, k, v);\n      });\n    };\n    const get$a = (element, property) => {\n      const dom = element.dom;\n      const styles = window.getComputedStyle(dom);\n      const r = styles.getPropertyValue(property);\n      return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n    };\n    const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n    const getRaw$2 = (element, property) => {\n      const dom = element.dom;\n      const raw = getUnsafeProperty(dom, property);\n      return Optional.from(raw).filter(r => r.length > 0);\n    };\n    const remove$5 = (element, property) => {\n      const dom = element.dom;\n      internalRemove(dom, property);\n      if (is(getOpt(element, 'style').map(trim), '')) {\n        remove$7(element, 'style');\n      }\n    };\n    const copy$1 = (source, target) => {\n      const sourceDom = source.dom;\n      const targetDom = target.dom;\n      if (isSupported(sourceDom) && isSupported(targetDom)) {\n        targetDom.style.cssText = sourceDom.style.cssText;\n      }\n    };\n\n    const getAttrValue = (cell, name, fallback = 0) => getOpt(cell, name).map(value => parseInt(value, 10)).getOr(fallback);\n    const getSpan = (cell, type) => getAttrValue(cell, type, 1);\n    const hasColspan = cellOrCol => {\n      if (isTag('col')(cellOrCol)) {\n        return getAttrValue(cellOrCol, 'span', 1) > 1;\n      } else {\n        return getSpan(cellOrCol, 'colspan') > 1;\n      }\n    };\n    const hasRowspan = cell => getSpan(cell, 'rowspan') > 1;\n    const getCssValue = (element, property) => parseInt(get$a(element, property), 10);\n    const minWidth = constant(10);\n    const minHeight = constant(10);\n\n    const firstLayer = (scope, selector) => {\n      return filterFirstLayer(scope, selector, always);\n    };\n    const filterFirstLayer = (scope, selector, predicate) => {\n      return bind$2(children$2(scope), x => {\n        if (is$2(x, selector)) {\n          return predicate(x) ? [x] : [];\n        } else {\n          return filterFirstLayer(x, selector, predicate);\n        }\n      });\n    };\n\n    const lookup = (tags, element, isRoot = never) => {\n      if (isRoot(element)) {\n        return Optional.none();\n      }\n      if (contains$2(tags, name(element))) {\n        return Optional.some(element);\n      }\n      const isRootOrUpperTable = elm => is$2(elm, 'table') || isRoot(elm);\n      return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n    };\n    const cell = (element, isRoot) => lookup([\n      'td',\n      'th'\n    ], element, isRoot);\n    const cells$1 = ancestor => firstLayer(ancestor, 'th,td');\n    const columns$1 = ancestor => {\n      if (is$2(ancestor, 'colgroup')) {\n        return children(ancestor, 'col');\n      } else {\n        return bind$2(columnGroups(ancestor), columnGroup => children(columnGroup, 'col'));\n      }\n    };\n    const table = (element, isRoot) => closest$1(element, 'table', isRoot);\n    const rows$1 = ancestor => firstLayer(ancestor, 'tr');\n    const columnGroups = ancestor => table(ancestor).fold(constant([]), table => children(table, 'colgroup'));\n\n    const fromRowsOrColGroups = (elems, getSection) => map$1(elems, row => {\n      if (name(row) === 'colgroup') {\n        const cells = map$1(columns$1(row), column => {\n          const colspan = getAttrValue(column, 'span', 1);\n          return detail(column, 1, colspan);\n        });\n        return rowdetail(row, cells, 'colgroup');\n      } else {\n        const cells = map$1(cells$1(row), cell => {\n          const rowspan = getAttrValue(cell, 'rowspan', 1);\n          const colspan = getAttrValue(cell, 'colspan', 1);\n          return detail(cell, rowspan, colspan);\n        });\n        return rowdetail(row, cells, getSection(row));\n      }\n    });\n    const getParentSection = group => parent(group).map(parent => {\n      const parentName = name(parent);\n      return isValidSection(parentName) ? parentName : 'tbody';\n    }).getOr('tbody');\n    const fromTable$1 = table => {\n      const rows = rows$1(table);\n      const columnGroups$1 = columnGroups(table);\n      const elems = [\n        ...columnGroups$1,\n        ...rows\n      ];\n      return fromRowsOrColGroups(elems, getParentSection);\n    };\n    const fromPastedRows = (elems, section) => fromRowsOrColGroups(elems, () => section);\n\n    const cached = f => {\n      let called = false;\n      let r;\n      return (...args) => {\n        if (!called) {\n          called = true;\n          r = f.apply(null, args);\n        }\n        return r;\n      };\n    };\n\n    const DeviceType = (os, browser, userAgent, mediaMatch) => {\n      const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n      const isiPhone = os.isiOS() && !isiPad;\n      const isMobile = os.isiOS() || os.isAndroid();\n      const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n      const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n      const isPhone = isiPhone || isMobile && !isTablet;\n      const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n      const isDesktop = !isPhone && !isTablet && !iOSwebview;\n      return {\n        isiPad: constant(isiPad),\n        isiPhone: constant(isiPhone),\n        isTablet: constant(isTablet),\n        isPhone: constant(isPhone),\n        isTouch: constant(isTouch),\n        isAndroid: os.isAndroid,\n        isiOS: os.isiOS,\n        isWebView: constant(iOSwebview),\n        isDesktop: constant(isDesktop)\n      };\n    };\n\n    const firstMatch = (regexes, s) => {\n      for (let i = 0; i < regexes.length; i++) {\n        const x = regexes[i];\n        if (x.test(s)) {\n          return x;\n        }\n      }\n      return undefined;\n    };\n    const find = (regexes, agent) => {\n      const r = firstMatch(regexes, agent);\n      if (!r) {\n        return {\n          major: 0,\n          minor: 0\n        };\n      }\n      const group = i => {\n        return Number(agent.replace(r, '$' + i));\n      };\n      return nu$2(group(1), group(2));\n    };\n    const detect$5 = (versionRegexes, agent) => {\n      const cleanedAgent = String(agent).toLowerCase();\n      if (versionRegexes.length === 0) {\n        return unknown$2();\n      }\n      return find(versionRegexes, cleanedAgent);\n    };\n    const unknown$2 = () => {\n      return nu$2(0, 0);\n    };\n    const nu$2 = (major, minor) => {\n      return {\n        major,\n        minor\n      };\n    };\n    const Version = {\n      nu: nu$2,\n      detect: detect$5,\n      unknown: unknown$2\n    };\n\n    const detectBrowser$1 = (browsers, userAgentData) => {\n      return findMap(userAgentData.brands, uaBrand => {\n        const lcBrand = uaBrand.brand.toLowerCase();\n        return find$1(browsers, browser => {\n          var _a;\n          return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n        }).map(info => ({\n          current: info.name,\n          version: Version.nu(parseInt(uaBrand.version, 10), 0)\n        }));\n      });\n    };\n\n    const detect$4 = (candidates, userAgent) => {\n      const agent = String(userAgent).toLowerCase();\n      return find$1(candidates, candidate => {\n        return candidate.search(agent);\n      });\n    };\n    const detectBrowser = (browsers, userAgent) => {\n      return detect$4(browsers, userAgent).map(browser => {\n        const version = Version.detect(browser.versionRegexes, userAgent);\n        return {\n          current: browser.name,\n          version\n        };\n      });\n    };\n    const detectOs = (oses, userAgent) => {\n      return detect$4(oses, userAgent).map(os => {\n        const version = Version.detect(os.versionRegexes, userAgent);\n        return {\n          current: os.name,\n          version\n        };\n      });\n    };\n\n    const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n    const checkContains = target => {\n      return uastring => {\n        return contains(uastring, target);\n      };\n    };\n    const browsers = [\n      {\n        name: 'Edge',\n        versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n        search: uastring => {\n          return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n        }\n      },\n      {\n        name: 'Chromium',\n        brand: 'Chromium',\n        versionRegexes: [\n          /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n          normalVersionRegex\n        ],\n        search: uastring => {\n          return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n        }\n      },\n      {\n        name: 'IE',\n        versionRegexes: [\n          /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*?rv:([0-9]+)\\.([0-9]+).*/\n        ],\n        search: uastring => {\n          return contains(uastring, 'msie') || contains(uastring, 'trident');\n        }\n      },\n      {\n        name: 'Opera',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n        ],\n        search: checkContains('opera')\n      },\n      {\n        name: 'Firefox',\n        versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n        search: checkContains('firefox')\n      },\n      {\n        name: 'Safari',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\n        ],\n        search: uastring => {\n          return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n        }\n      }\n    ];\n    const oses = [\n      {\n        name: 'Windows',\n        search: checkContains('win'),\n        versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'iOS',\n        search: uastring => {\n          return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n        },\n        versionRegexes: [\n          /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n        ]\n      },\n      {\n        name: 'Android',\n        search: checkContains('android'),\n        versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'macOS',\n        search: checkContains('mac os x'),\n        versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n      },\n      {\n        name: 'Linux',\n        search: checkContains('linux'),\n        versionRegexes: []\n      },\n      {\n        name: 'Solaris',\n        search: checkContains('sunos'),\n        versionRegexes: []\n      },\n      {\n        name: 'FreeBSD',\n        search: checkContains('freebsd'),\n        versionRegexes: []\n      },\n      {\n        name: 'ChromeOS',\n        search: checkContains('cros'),\n        versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n      }\n    ];\n    const PlatformInfo = {\n      browsers: constant(browsers),\n      oses: constant(oses)\n    };\n\n    const edge = 'Edge';\n    const chromium = 'Chromium';\n    const ie = 'IE';\n    const opera = 'Opera';\n    const firefox = 'Firefox';\n    const safari = 'Safari';\n    const unknown$1 = () => {\n      return nu$1({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    const nu$1 = info => {\n      const current = info.current;\n      const version = info.version;\n      const isBrowser = name => () => current === name;\n      return {\n        current,\n        version,\n        isEdge: isBrowser(edge),\n        isChromium: isBrowser(chromium),\n        isIE: isBrowser(ie),\n        isOpera: isBrowser(opera),\n        isFirefox: isBrowser(firefox),\n        isSafari: isBrowser(safari)\n      };\n    };\n    const Browser = {\n      unknown: unknown$1,\n      nu: nu$1,\n      edge: constant(edge),\n      chromium: constant(chromium),\n      ie: constant(ie),\n      opera: constant(opera),\n      firefox: constant(firefox),\n      safari: constant(safari)\n    };\n\n    const windows = 'Windows';\n    const ios = 'iOS';\n    const android = 'Android';\n    const linux = 'Linux';\n    const macos = 'macOS';\n    const solaris = 'Solaris';\n    const freebsd = 'FreeBSD';\n    const chromeos = 'ChromeOS';\n    const unknown = () => {\n      return nu({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    const nu = info => {\n      const current = info.current;\n      const version = info.version;\n      const isOS = name => () => current === name;\n      return {\n        current,\n        version,\n        isWindows: isOS(windows),\n        isiOS: isOS(ios),\n        isAndroid: isOS(android),\n        isMacOS: isOS(macos),\n        isLinux: isOS(linux),\n        isSolaris: isOS(solaris),\n        isFreeBSD: isOS(freebsd),\n        isChromeOS: isOS(chromeos)\n      };\n    };\n    const OperatingSystem = {\n      unknown,\n      nu,\n      windows: constant(windows),\n      ios: constant(ios),\n      android: constant(android),\n      linux: constant(linux),\n      macos: constant(macos),\n      solaris: constant(solaris),\n      freebsd: constant(freebsd),\n      chromeos: constant(chromeos)\n    };\n\n    const detect$3 = (userAgent, userAgentDataOpt, mediaMatch) => {\n      const browsers = PlatformInfo.browsers();\n      const oses = PlatformInfo.oses();\n      const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n      const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n      const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n      return {\n        browser,\n        os,\n        deviceType\n      };\n    };\n    const PlatformDetection = { detect: detect$3 };\n\n    const mediaMatch = query => window.matchMedia(query).matches;\n    let platform = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n    const detect$2 = () => platform();\n\n    const Dimension = (name, getOffset) => {\n      const set = (element, h) => {\n        if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n          throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n        }\n        const dom = element.dom;\n        if (isSupported(dom)) {\n          dom.style[name] = h + 'px';\n        }\n      };\n      const get = element => {\n        const r = getOffset(element);\n        if (r <= 0 || r === null) {\n          const css = get$a(element, name);\n          return parseFloat(css) || 0;\n        }\n        return r;\n      };\n      const getOuter = get;\n      const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n        const val = get$a(element, property);\n        const value = val === undefined ? 0 : parseInt(val, 10);\n        return isNaN(value) ? acc : acc + value;\n      }, 0);\n      const max = (element, value, properties) => {\n        const cumulativeInclusions = aggregate(element, properties);\n        const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n        return absoluteMax;\n      };\n      return {\n        set,\n        get,\n        getOuter,\n        aggregate,\n        max\n      };\n    };\n\n    const toNumber = (px, fallback) => toFloat(px).getOr(fallback);\n    const getProp = (element, name, fallback) => toNumber(get$a(element, name), fallback);\n    const calcContentBoxSize = (element, size, upper, lower) => {\n      const paddingUpper = getProp(element, `padding-${ upper }`, 0);\n      const paddingLower = getProp(element, `padding-${ lower }`, 0);\n      const borderUpper = getProp(element, `border-${ upper }-width`, 0);\n      const borderLower = getProp(element, `border-${ lower }-width`, 0);\n      return size - paddingUpper - paddingLower - borderUpper - borderLower;\n    };\n    const getCalculatedWidth = (element, boxSizing) => {\n      const dom = element.dom;\n      const width = dom.getBoundingClientRect().width || dom.offsetWidth;\n      return boxSizing === 'border-box' ? width : calcContentBoxSize(element, width, 'left', 'right');\n    };\n    const getHeight$1 = element => getProp(element, 'height', element.dom.offsetHeight);\n    const getWidth = element => getProp(element, 'width', element.dom.offsetWidth);\n    const getInnerWidth = element => getCalculatedWidth(element, 'content-box');\n\n    const api$2 = Dimension('width', element => element.dom.offsetWidth);\n    const get$9 = element => api$2.get(element);\n    const getOuter$2 = element => api$2.getOuter(element);\n    const getInner = getInnerWidth;\n    const getRuntime$1 = getWidth;\n\n    const addCells = (gridRow, index, cells) => {\n      const existingCells = gridRow.cells;\n      const before = existingCells.slice(0, index);\n      const after = existingCells.slice(index);\n      const newCells = before.concat(cells).concat(after);\n      return setCells(gridRow, newCells);\n    };\n    const addCell = (gridRow, index, cell) => addCells(gridRow, index, [cell]);\n    const mutateCell = (gridRow, index, cell) => {\n      const cells = gridRow.cells;\n      cells[index] = cell;\n    };\n    const setCells = (gridRow, cells) => rowcells(gridRow.element, cells, gridRow.section, gridRow.isNew);\n    const mapCells = (gridRow, f) => {\n      const cells = gridRow.cells;\n      const r = map$1(cells, f);\n      return rowcells(gridRow.element, r, gridRow.section, gridRow.isNew);\n    };\n    const getCell = (gridRow, index) => gridRow.cells[index];\n    const getCellElement = (gridRow, index) => getCell(gridRow, index).element;\n    const cellLength = gridRow => gridRow.cells.length;\n    const extractGridDetails = grid => {\n      const result = partition(grid, row => row.section === 'colgroup');\n      return {\n        rows: result.fail,\n        cols: result.pass\n      };\n    };\n    const clone = (gridRow, cloneRow, cloneCell) => {\n      const newCells = map$1(gridRow.cells, cloneCell);\n      return rowcells(cloneRow(gridRow.element), newCells, gridRow.section, true);\n    };\n\n    const LOCKED_COL_ATTR = 'data-snooker-locked-cols';\n    const getLockedColumnsFromTable = table => getOpt(table, LOCKED_COL_ATTR).bind(lockedColStr => Optional.from(lockedColStr.match(/\\d+/g))).map(lockedCols => mapToObject(lockedCols, always));\n    const getLockedColumnsFromGrid = grid => {\n      const locked = foldl(extractGridDetails(grid).rows, (acc, row) => {\n        each$2(row.cells, (cell, idx) => {\n          if (cell.isLocked) {\n            acc[idx] = true;\n          }\n        });\n        return acc;\n      }, {});\n      const lockedArr = mapToArray(locked, (_val, key) => parseInt(key, 10));\n      return sort$1(lockedArr);\n    };\n\n    const key = (row, column) => {\n      return row + ',' + column;\n    };\n    const getAt = (warehouse, row, column) => Optional.from(warehouse.access[key(row, column)]);\n    const findItem = (warehouse, item, comparator) => {\n      const filtered = filterItems(warehouse, detail => {\n        return comparator(item, detail.element);\n      });\n      return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n    };\n    const filterItems = (warehouse, predicate) => {\n      const all = bind$2(warehouse.all, r => {\n        return r.cells;\n      });\n      return filter$2(all, predicate);\n    };\n    const generateColumns = rowData => {\n      const columnsGroup = {};\n      let index = 0;\n      each$2(rowData.cells, column => {\n        const colspan = column.colspan;\n        range$1(colspan, columnIndex => {\n          const colIndex = index + columnIndex;\n          columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n        });\n        index += colspan;\n      });\n      return columnsGroup;\n    };\n    const generate$1 = list => {\n      const access = {};\n      const cells = [];\n      const tableOpt = head(list).map(rowData => rowData.element).bind(table);\n      const lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({});\n      let maxRows = 0;\n      let maxColumns = 0;\n      let rowCount = 0;\n      const {\n        pass: colgroupRows,\n        fail: rows\n      } = partition(list, rowData => rowData.section === 'colgroup');\n      each$2(rows, rowData => {\n        const currentRow = [];\n        each$2(rowData.cells, rowCell => {\n          let start = 0;\n          while (access[key(rowCount, start)] !== undefined) {\n            start++;\n          }\n          const isLocked = hasNonNullableKey(lockedColumns, start.toString());\n          const current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked);\n          for (let occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) {\n            for (let occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) {\n              const rowPosition = rowCount + occupiedRowPosition;\n              const columnPosition = start + occupiedColumnPosition;\n              const newpos = key(rowPosition, columnPosition);\n              access[newpos] = current;\n              maxColumns = Math.max(maxColumns, columnPosition + 1);\n            }\n          }\n          currentRow.push(current);\n        });\n        maxRows++;\n        cells.push(rowdetail(rowData.element, currentRow, rowData.section));\n        rowCount++;\n      });\n      const {columns, colgroups} = last$2(colgroupRows).map(rowData => {\n        const columns = generateColumns(rowData);\n        const colgroup$1 = colgroup(rowData.element, values(columns));\n        return {\n          colgroups: [colgroup$1],\n          columns\n        };\n      }).getOrThunk(() => ({\n        colgroups: [],\n        columns: {}\n      }));\n      const grid$1 = grid(maxRows, maxColumns);\n      return {\n        grid: grid$1,\n        access,\n        all: cells,\n        columns,\n        colgroups\n      };\n    };\n    const fromTable = table => {\n      const list = fromTable$1(table);\n      return generate$1(list);\n    };\n    const justCells = warehouse => bind$2(warehouse.all, w => w.cells);\n    const justColumns = warehouse => values(warehouse.columns);\n    const hasColumns = warehouse => keys(warehouse.columns).length > 0;\n    const getColumnAt = (warehouse, columnIndex) => Optional.from(warehouse.columns[columnIndex]);\n    const Warehouse = {\n      fromTable,\n      generate: generate$1,\n      getAt,\n      findItem,\n      filterItems,\n      justCells,\n      justColumns,\n      hasColumns,\n      getColumnAt\n    };\n\n    const columns = (warehouse, isValidCell = always) => {\n      const grid = warehouse.grid;\n      const cols = range$1(grid.columns, identity);\n      const rowsArr = range$1(grid.rows, identity);\n      return map$1(cols, col => {\n        const getBlock = () => bind$2(rowsArr, r => Warehouse.getAt(warehouse, r, col).filter(detail => detail.column === col).toArray());\n        const isValid = detail => detail.colspan === 1 && isValidCell(detail.element);\n        const getFallback = () => Warehouse.getAt(warehouse, 0, col);\n        return decide(getBlock, isValid, getFallback);\n      });\n    };\n    const decide = (getBlock, isValid, getFallback) => {\n      const inBlock = getBlock();\n      const validInBlock = find$1(inBlock, isValid);\n      const detailOption = validInBlock.orThunk(() => Optional.from(inBlock[0]).orThunk(getFallback));\n      return detailOption.map(detail => detail.element);\n    };\n    const rows = warehouse => {\n      const grid = warehouse.grid;\n      const rowsArr = range$1(grid.rows, identity);\n      const cols = range$1(grid.columns, identity);\n      return map$1(rowsArr, row => {\n        const getBlock = () => bind$2(cols, c => Warehouse.getAt(warehouse, row, c).filter(detail => detail.row === row).fold(constant([]), detail => [detail]));\n        const isSingle = detail => detail.rowspan === 1;\n        const getFallback = () => Warehouse.getAt(warehouse, row, 0);\n        return decide(getBlock, isSingle, getFallback);\n      });\n    };\n\n    const deduce = (xs, index) => {\n      if (index < 0 || index >= xs.length - 1) {\n        return Optional.none();\n      }\n      const current = xs[index].fold(() => {\n        const rest = reverse(xs.slice(0, index));\n        return findMap(rest, (a, i) => a.map(aa => ({\n          value: aa,\n          delta: i + 1\n        })));\n      }, c => Optional.some({\n        value: c,\n        delta: 0\n      }));\n      const next = xs[index + 1].fold(() => {\n        const rest = xs.slice(index + 1);\n        return findMap(rest, (a, i) => a.map(aa => ({\n          value: aa,\n          delta: i + 1\n        })));\n      }, n => Optional.some({\n        value: n,\n        delta: 1\n      }));\n      return current.bind(c => next.map(n => {\n        const extras = n.delta + c.delta;\n        return Math.abs(n.value - c.value) / extras;\n      }));\n    };\n\n    const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n    const getDirection = element => get$a(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n    const api$1 = Dimension('height', element => {\n      const dom = element.dom;\n      return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n    });\n    const get$8 = element => api$1.get(element);\n    const getOuter$1 = element => api$1.getOuter(element);\n    const getRuntime = getHeight$1;\n\n    const r = (left, top) => {\n      const translate = (x, y) => r(left + x, top + y);\n      return {\n        left,\n        top,\n        translate\n      };\n    };\n    const SugarPosition = r;\n\n    const boxPosition = dom => {\n      const box = dom.getBoundingClientRect();\n      return SugarPosition(box.left, box.top);\n    };\n    const firstDefinedOrZero = (a, b) => {\n      if (a !== undefined) {\n        return a;\n      } else {\n        return b !== undefined ? b : 0;\n      }\n    };\n    const absolute = element => {\n      const doc = element.dom.ownerDocument;\n      const body = doc.body;\n      const win = doc.defaultView;\n      const html = doc.documentElement;\n      if (body === element.dom) {\n        return SugarPosition(body.offsetLeft, body.offsetTop);\n      }\n      const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n      const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n      const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n      const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n      return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n    };\n    const viewport = element => {\n      const dom = element.dom;\n      const doc = dom.ownerDocument;\n      const body = doc.body;\n      if (body === dom) {\n        return SugarPosition(body.offsetLeft, body.offsetTop);\n      }\n      if (!inBody(element)) {\n        return SugarPosition(0, 0);\n      }\n      return boxPosition(dom);\n    };\n\n    const rowInfo = (row, y) => ({\n      row,\n      y\n    });\n    const colInfo = (col, x) => ({\n      col,\n      x\n    });\n    const rtlEdge = cell => {\n      const pos = absolute(cell);\n      return pos.left + getOuter$2(cell);\n    };\n    const ltrEdge = cell => {\n      return absolute(cell).left;\n    };\n    const getLeftEdge = (index, cell) => {\n      return colInfo(index, ltrEdge(cell));\n    };\n    const getRightEdge = (index, cell) => {\n      return colInfo(index, rtlEdge(cell));\n    };\n    const getTop$1 = cell => {\n      return absolute(cell).top;\n    };\n    const getTopEdge = (index, cell) => {\n      return rowInfo(index, getTop$1(cell));\n    };\n    const getBottomEdge = (index, cell) => {\n      return rowInfo(index, getTop$1(cell) + getOuter$1(cell));\n    };\n    const findPositions = (getInnerEdge, getOuterEdge, array) => {\n      if (array.length === 0) {\n        return [];\n      }\n      const lines = map$1(array.slice(1), (cellOption, index) => {\n        return cellOption.map(cell => {\n          return getInnerEdge(index, cell);\n        });\n      });\n      const lastLine = array[array.length - 1].map(cell => {\n        return getOuterEdge(array.length - 1, cell);\n      });\n      return lines.concat([lastLine]);\n    };\n    const negate = step => {\n      return -step;\n    };\n    const height = {\n      delta: identity,\n      positions: optElements => findPositions(getTopEdge, getBottomEdge, optElements),\n      edge: getTop$1\n    };\n    const ltr$1 = {\n      delta: identity,\n      edge: ltrEdge,\n      positions: optElements => findPositions(getLeftEdge, getRightEdge, optElements)\n    };\n    const rtl$1 = {\n      delta: negate,\n      edge: rtlEdge,\n      positions: optElements => findPositions(getRightEdge, getLeftEdge, optElements)\n    };\n    const detect$1 = onDirection(ltr$1, rtl$1);\n    const width = {\n      delta: (amount, table) => detect$1(table).delta(amount, table),\n      positions: (cols, table) => detect$1(table).positions(cols, table),\n      edge: cell => detect$1(cell).edge(cell)\n    };\n\n    const units = {\n      unsupportedLength: [\n        'em',\n        'ex',\n        'cap',\n        'ch',\n        'ic',\n        'rem',\n        'lh',\n        'rlh',\n        'vw',\n        'vh',\n        'vi',\n        'vb',\n        'vmin',\n        'vmax',\n        'cm',\n        'mm',\n        'Q',\n        'in',\n        'pc',\n        'pt',\n        'px'\n      ],\n      fixed: [\n        'px',\n        'pt'\n      ],\n      relative: ['%'],\n      empty: ['']\n    };\n    const pattern = (() => {\n      const decimalDigits = '[0-9]+';\n      const signedInteger = '[+-]?' + decimalDigits;\n      const exponentPart = '[eE]' + signedInteger;\n      const dot = '\\\\.';\n      const opt = input => `(?:${ input })?`;\n      const unsignedDecimalLiteral = [\n        'Infinity',\n        decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n        dot + decimalDigits + opt(exponentPart),\n        decimalDigits + opt(exponentPart)\n      ].join('|');\n      const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n      return new RegExp(`^(${ float })(.*)$`);\n    })();\n    const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n    const parse = (input, accepted) => {\n      const match = Optional.from(pattern.exec(input));\n      return match.bind(array => {\n        const value = Number(array[1]);\n        const unitRaw = array[2];\n        if (isUnit(unitRaw, accepted)) {\n          return Optional.some({\n            value,\n            unit: unitRaw\n          });\n        } else {\n          return Optional.none();\n        }\n      });\n    };\n\n    const rPercentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n    const rPixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n    const isCol$2 = isTag('col');\n    const getPercentSize = (elm, outerGetter, innerGetter) => {\n      const relativeParent = parentElement(elm).getOrThunk(() => getBody$1(owner(elm)));\n      return outerGetter(elm) / innerGetter(relativeParent) * 100;\n    };\n    const setPixelWidth = (cell, amount) => {\n      set$1(cell, 'width', amount + 'px');\n    };\n    const setPercentageWidth = (cell, amount) => {\n      set$1(cell, 'width', amount + '%');\n    };\n    const setHeight = (cell, amount) => {\n      set$1(cell, 'height', amount + 'px');\n    };\n    const getHeightValue = cell => getRuntime(cell) + 'px';\n    const convert = (cell, number, getter, setter) => {\n      const newSize = table(cell).map(table => {\n        const total = getter(table);\n        return Math.floor(number / 100 * total);\n      }).getOr(number);\n      setter(cell, newSize);\n      return newSize;\n    };\n    const normalizePixelSize = (value, cell, getter, setter) => {\n      const number = parseFloat(value);\n      return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n    };\n    const getTotalHeight = cell => {\n      const value = getHeightValue(cell);\n      if (!value) {\n        return get$8(cell);\n      }\n      return normalizePixelSize(value, cell, get$8, setHeight);\n    };\n    const get$7 = (cell, type, f) => {\n      const v = f(cell);\n      const span = getSpan(cell, type);\n      return v / span;\n    };\n    const getRaw$1 = (element, prop) => {\n      return getRaw$2(element, prop).orThunk(() => {\n        return getOpt(element, prop).map(val => val + 'px');\n      });\n    };\n    const getRawWidth$1 = element => getRaw$1(element, 'width');\n    const getRawHeight = element => getRaw$1(element, 'height');\n    const getPercentageWidth = cell => getPercentSize(cell, get$9, getInner);\n    const getPixelWidth$1 = cell => isCol$2(cell) ? get$9(cell) : getRuntime$1(cell);\n    const getHeight = cell => {\n      return get$7(cell, 'rowspan', getTotalHeight);\n    };\n    const getGenericWidth = cell => {\n      const width = getRawWidth$1(cell);\n      return width.bind(w => parse(w, [\n        'fixed',\n        'relative',\n        'empty'\n      ]));\n    };\n    const setGenericWidth = (cell, amount, unit) => {\n      set$1(cell, 'width', amount + unit);\n    };\n    const getPixelTableWidth = table => get$9(table) + 'px';\n    const getPercentTableWidth = table => getPercentSize(table, get$9, getInner) + '%';\n    const isPercentSizing$1 = table => getRawWidth$1(table).exists(size => rPercentageBasedSizeRegex.test(size));\n    const isPixelSizing$1 = table => getRawWidth$1(table).exists(size => rPixelBasedSizeRegex.test(size));\n    const isNoneSizing$1 = table => getRawWidth$1(table).isNone();\n    const percentageBasedSizeRegex = constant(rPercentageBasedSizeRegex);\n\n    const isCol$1 = isTag('col');\n    const getRawW = cell => {\n      return getRawWidth$1(cell).getOrThunk(() => getPixelWidth$1(cell) + 'px');\n    };\n    const getRawH = cell => {\n      return getRawHeight(cell).getOrThunk(() => getHeight(cell) + 'px');\n    };\n    const justCols = warehouse => map$1(Warehouse.justColumns(warehouse), column => Optional.from(column.element));\n    const isValidColumn = cell => {\n      const browser = detect$2().browser;\n      const supportsColWidths = browser.isChromium() || browser.isFirefox();\n      return isCol$1(cell) ? supportsColWidths : true;\n    };\n    const getDimension = (cellOpt, index, backups, filter, getter, fallback) => cellOpt.filter(filter).fold(() => fallback(deduce(backups, index)), cell => getter(cell));\n    const getWidthFrom = (warehouse, table, getWidth, fallback) => {\n      const columnCells = columns(warehouse);\n      const columns$1 = Warehouse.hasColumns(warehouse) ? justCols(warehouse) : columnCells;\n      const backups = [Optional.some(width.edge(table))].concat(map$1(width.positions(columnCells, table), pos => pos.map(p => p.x)));\n      const colFilter = not(hasColspan);\n      return map$1(columns$1, (cellOption, c) => {\n        return getDimension(cellOption, c, backups, colFilter, column => {\n          if (isValidColumn(column)) {\n            return getWidth(column);\n          } else {\n            const cell = bindFrom(columnCells[c], identity);\n            return getDimension(cell, c, backups, colFilter, cell => fallback(Optional.some(get$9(cell))), fallback);\n          }\n        }, fallback);\n      });\n    };\n    const getDeduced = deduced => {\n      return deduced.map(d => {\n        return d + 'px';\n      }).getOr('');\n    };\n    const getRawWidths = (warehouse, table) => {\n      return getWidthFrom(warehouse, table, getRawW, getDeduced);\n    };\n    const getPercentageWidths = (warehouse, table, tableSize) => {\n      return getWidthFrom(warehouse, table, getPercentageWidth, deduced => {\n        return deduced.fold(() => {\n          return tableSize.minCellWidth();\n        }, cellWidth => {\n          return cellWidth / tableSize.pixelWidth() * 100;\n        });\n      });\n    };\n    const getPixelWidths = (warehouse, table, tableSize) => {\n      return getWidthFrom(warehouse, table, getPixelWidth$1, deduced => {\n        return deduced.getOrThunk(tableSize.minCellWidth);\n      });\n    };\n    const getHeightFrom = (warehouse, table, direction, getHeight, fallback) => {\n      const rows$1 = rows(warehouse);\n      const backups = [Optional.some(direction.edge(table))].concat(map$1(direction.positions(rows$1, table), pos => pos.map(p => p.y)));\n      return map$1(rows$1, (cellOption, c) => {\n        return getDimension(cellOption, c, backups, not(hasRowspan), getHeight, fallback);\n      });\n    };\n    const getPixelHeights = (warehouse, table, direction) => {\n      return getHeightFrom(warehouse, table, direction, getHeight, deduced => {\n        return deduced.getOrThunk(minHeight);\n      });\n    };\n    const getRawHeights = (warehouse, table, direction) => {\n      return getHeightFrom(warehouse, table, direction, getRawH, getDeduced);\n    };\n\n    const widthLookup = (table, getter) => () => {\n      if (inBody(table)) {\n        return getter(table);\n      } else {\n        return parseFloat(getRaw$2(table, 'width').getOr('0'));\n      }\n    };\n    const noneSize = table => {\n      const getWidth = widthLookup(table, get$9);\n      const zero = constant(0);\n      const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n      return {\n        width: getWidth,\n        pixelWidth: getWidth,\n        getWidths,\n        getCellDelta: zero,\n        singleColumnWidth: constant([0]),\n        minCellWidth: zero,\n        setElementWidth: noop,\n        adjustTableWidth: noop,\n        isRelative: true,\n        label: 'none'\n      };\n    };\n    const percentageSize = table => {\n      const getFloatWidth = widthLookup(table, elem => parseFloat(getPercentTableWidth(elem)));\n      const getWidth = widthLookup(table, get$9);\n      const getCellDelta = delta => delta / getWidth() * 100;\n      const singleColumnWidth = (w, _delta) => [100 - w];\n      const minCellWidth = () => minWidth() / getWidth() * 100;\n      const adjustTableWidth = delta => {\n        const currentWidth = getFloatWidth();\n        const change = delta / 100 * currentWidth;\n        const newWidth = currentWidth + change;\n        setPercentageWidth(table, newWidth);\n      };\n      const getWidths = (warehouse, tableSize) => getPercentageWidths(warehouse, table, tableSize);\n      return {\n        width: getFloatWidth,\n        pixelWidth: getWidth,\n        getWidths,\n        getCellDelta,\n        singleColumnWidth,\n        minCellWidth,\n        setElementWidth: setPercentageWidth,\n        adjustTableWidth,\n        isRelative: true,\n        label: 'percent'\n      };\n    };\n    const pixelSize = table => {\n      const getWidth = widthLookup(table, get$9);\n      const getCellDelta = identity;\n      const singleColumnWidth = (w, delta) => {\n        const newNext = Math.max(minWidth(), w + delta);\n        return [newNext - w];\n      };\n      const adjustTableWidth = delta => {\n        const newWidth = getWidth() + delta;\n        setPixelWidth(table, newWidth);\n      };\n      const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n      return {\n        width: getWidth,\n        pixelWidth: getWidth,\n        getWidths,\n        getCellDelta,\n        singleColumnWidth,\n        minCellWidth: minWidth,\n        setElementWidth: setPixelWidth,\n        adjustTableWidth,\n        isRelative: false,\n        label: 'pixel'\n      };\n    };\n    const chooseSize = (element, width) => {\n      const percentMatch = percentageBasedSizeRegex().exec(width);\n      if (percentMatch !== null) {\n        return percentageSize(element);\n      } else {\n        return pixelSize(element);\n      }\n    };\n    const getTableSize = table => {\n      const width = getRawWidth$1(table);\n      return width.fold(() => noneSize(table), w => chooseSize(table, w));\n    };\n    const TableSize = {\n      getTableSize,\n      pixelSize,\n      percentageSize,\n      noneSize\n    };\n\n    const statsStruct = (minRow, minCol, maxRow, maxCol, allCells, selectedCells) => ({\n      minRow,\n      minCol,\n      maxRow,\n      maxCol,\n      allCells,\n      selectedCells\n    });\n    const findSelectedStats = (house, isSelected) => {\n      const totalColumns = house.grid.columns;\n      const totalRows = house.grid.rows;\n      let minRow = totalRows;\n      let minCol = totalColumns;\n      let maxRow = 0;\n      let maxCol = 0;\n      const allCells = [];\n      const selectedCells = [];\n      each$1(house.access, detail => {\n        allCells.push(detail);\n        if (isSelected(detail)) {\n          selectedCells.push(detail);\n          const startRow = detail.row;\n          const endRow = startRow + detail.rowspan - 1;\n          const startCol = detail.column;\n          const endCol = startCol + detail.colspan - 1;\n          if (startRow < minRow) {\n            minRow = startRow;\n          } else if (endRow > maxRow) {\n            maxRow = endRow;\n          }\n          if (startCol < minCol) {\n            minCol = startCol;\n          } else if (endCol > maxCol) {\n            maxCol = endCol;\n          }\n        }\n      });\n      return statsStruct(minRow, minCol, maxRow, maxCol, allCells, selectedCells);\n    };\n    const makeCell = (list, seenSelected, rowIndex) => {\n      const row = list[rowIndex].element;\n      const td = SugarElement.fromTag('td');\n      append$1(td, SugarElement.fromTag('br'));\n      const f = seenSelected ? append$1 : prepend;\n      f(row, td);\n    };\n    const fillInGaps = (list, house, stats, isSelected) => {\n      const rows = filter$2(list, row => row.section !== 'colgroup');\n      const totalColumns = house.grid.columns;\n      const totalRows = house.grid.rows;\n      for (let i = 0; i < totalRows; i++) {\n        let seenSelected = false;\n        for (let j = 0; j < totalColumns; j++) {\n          if (!(i < stats.minRow || i > stats.maxRow || j < stats.minCol || j > stats.maxCol)) {\n            const needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n            if (needCell) {\n              makeCell(rows, seenSelected, i);\n            } else {\n              seenSelected = true;\n            }\n          }\n        }\n      }\n    };\n    const clean = (replica, stats, house, widthDelta) => {\n      each$1(house.columns, col => {\n        if (col.column < stats.minCol || col.column > stats.maxCol) {\n          remove$6(col.element);\n        }\n      });\n      const emptyRows = filter$2(firstLayer(replica, 'tr'), row => row.dom.childElementCount === 0);\n      each$2(emptyRows, remove$6);\n      if (stats.minCol === stats.maxCol || stats.minRow === stats.maxRow) {\n        each$2(firstLayer(replica, 'th,td'), cell => {\n          remove$7(cell, 'rowspan');\n          remove$7(cell, 'colspan');\n        });\n      }\n      remove$7(replica, LOCKED_COL_ATTR);\n      remove$7(replica, 'data-snooker-col-series');\n      const tableSize = TableSize.getTableSize(replica);\n      tableSize.adjustTableWidth(widthDelta);\n    };\n    const getTableWidthDelta = (table, warehouse, tableSize, stats) => {\n      if (stats.minCol === 0 && warehouse.grid.columns === stats.maxCol + 1) {\n        return 0;\n      }\n      const colWidths = getPixelWidths(warehouse, table, tableSize);\n      const allColsWidth = foldl(colWidths, (acc, width) => acc + width, 0);\n      const selectedColsWidth = foldl(colWidths.slice(stats.minCol, stats.maxCol + 1), (acc, width) => acc + width, 0);\n      const newWidth = selectedColsWidth / allColsWidth * tableSize.pixelWidth();\n      const delta = newWidth - tableSize.pixelWidth();\n      return tableSize.getCellDelta(delta);\n    };\n    const extract$1 = (table, selectedSelector) => {\n      const isSelected = detail => is$2(detail.element, selectedSelector);\n      const replica = deep(table);\n      const list = fromTable$1(replica);\n      const tableSize = TableSize.getTableSize(table);\n      const replicaHouse = Warehouse.generate(list);\n      const replicaStats = findSelectedStats(replicaHouse, isSelected);\n      const selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n      const unselectedCells = filterFirstLayer(replica, 'th,td', cell => is$2(cell, selector));\n      each$2(unselectedCells, remove$6);\n      fillInGaps(list, replicaHouse, replicaStats, isSelected);\n      const house = Warehouse.fromTable(table);\n      const widthDelta = getTableWidthDelta(table, house, tableSize, replicaStats);\n      clean(replica, replicaStats, replicaHouse, widthDelta);\n      return replica;\n    };\n\n    const nbsp = '\\xA0';\n\n    const NodeValue = (is, name) => {\n      const get = element => {\n        if (!is(element)) {\n          throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n        }\n        return getOption(element).getOr('');\n      };\n      const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n      const set = (element, value) => {\n        if (!is(element)) {\n          throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n        }\n        element.dom.nodeValue = value;\n      };\n      return {\n        get,\n        getOption,\n        set\n      };\n    };\n\n    const api = NodeValue(isText, 'text');\n    const get$6 = element => api.get(element);\n    const getOption = element => api.getOption(element);\n    const set = (element, value) => api.set(element, value);\n\n    const getEnd = element => name(element) === 'img' ? 1 : getOption(element).fold(() => children$2(element).length, v => v.length);\n    const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n    const elementsWithCursorPosition = [\n      'img',\n      'br'\n    ];\n    const isCursorPosition = elem => {\n      const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n      return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem));\n    };\n\n    const first = element => descendant$1(element, isCursorPosition);\n    const last$1 = element => descendantRtl(element, isCursorPosition);\n    const descendantRtl = (scope, predicate) => {\n      const descend = element => {\n        const children = children$2(element);\n        for (let i = children.length - 1; i >= 0; i--) {\n          const child = children[i];\n          if (predicate(child)) {\n            return Optional.some(child);\n          }\n          const res = descend(child);\n          if (res.isSome()) {\n            return res;\n          }\n        }\n        return Optional.none();\n      };\n      return descend(scope);\n    };\n\n    const transferableAttributes = {\n      scope: [\n        'row',\n        'col'\n      ]\n    };\n    const createCell = doc => () => {\n      const td = SugarElement.fromTag('td', doc.dom);\n      append$1(td, SugarElement.fromTag('br', doc.dom));\n      return td;\n    };\n    const createCol = doc => () => {\n      return SugarElement.fromTag('col', doc.dom);\n    };\n    const createColgroup = doc => () => {\n      return SugarElement.fromTag('colgroup', doc.dom);\n    };\n    const createRow$1 = doc => () => {\n      return SugarElement.fromTag('tr', doc.dom);\n    };\n    const replace$1 = (cell, tag, attrs) => {\n      const replica = copy$2(cell, tag);\n      each$1(attrs, (v, k) => {\n        if (v === null) {\n          remove$7(replica, k);\n        } else {\n          set$2(replica, k, v);\n        }\n      });\n      return replica;\n    };\n    const pasteReplace = cell => {\n      return cell;\n    };\n    const cloneFormats = (oldCell, newCell, formats) => {\n      const first$1 = first(oldCell);\n      return first$1.map(firstText => {\n        const formatSelector = formats.join(',');\n        const parents = ancestors$3(firstText, formatSelector, element => {\n          return eq$1(element, oldCell);\n        });\n        return foldr(parents, (last, parent) => {\n          const clonedFormat = shallow(parent);\n          remove$7(clonedFormat, 'contenteditable');\n          append$1(last, clonedFormat);\n          return clonedFormat;\n        }, newCell);\n      }).getOr(newCell);\n    };\n    const cloneAppropriateAttributes = (original, clone) => {\n      each$1(transferableAttributes, (validAttributes, attributeName) => getOpt(original, attributeName).filter(attribute => contains$2(validAttributes, attribute)).each(attribute => set$2(clone, attributeName, attribute)));\n    };\n    const cellOperations = (mutate, doc, formatsToClone) => {\n      const cloneCss = (prev, clone) => {\n        copy$1(prev.element, clone);\n        remove$5(clone, 'height');\n        if (prev.colspan !== 1) {\n          remove$5(clone, 'width');\n        }\n      };\n      const newCell = prev => {\n        const td = SugarElement.fromTag(name(prev.element), doc.dom);\n        const formats = formatsToClone.getOr([\n          'strong',\n          'em',\n          'b',\n          'i',\n          'span',\n          'font',\n          'h1',\n          'h2',\n          'h3',\n          'h4',\n          'h5',\n          'h6',\n          'p',\n          'div'\n        ]);\n        const lastNode = formats.length > 0 ? cloneFormats(prev.element, td, formats) : td;\n        append$1(lastNode, SugarElement.fromTag('br'));\n        cloneCss(prev, td);\n        cloneAppropriateAttributes(prev.element, td);\n        mutate(prev.element, td);\n        return td;\n      };\n      const newCol = prev => {\n        const col = SugarElement.fromTag(name(prev.element), doc.dom);\n        cloneCss(prev, col);\n        mutate(prev.element, col);\n        return col;\n      };\n      return {\n        col: newCol,\n        colgroup: createColgroup(doc),\n        row: createRow$1(doc),\n        cell: newCell,\n        replace: replace$1,\n        colGap: createCol(doc),\n        gap: createCell(doc)\n      };\n    };\n    const paste$1 = doc => {\n      return {\n        col: createCol(doc),\n        colgroup: createColgroup(doc),\n        row: createRow$1(doc),\n        cell: createCell(doc),\n        replace: pasteReplace,\n        colGap: createCol(doc),\n        gap: createCell(doc)\n      };\n    };\n\n    const fromHtml = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      return children$2(SugarElement.fromDom(div));\n    };\n    const fromDom = nodes => map$1(nodes, SugarElement.fromDom);\n\n    const getBody = editor => SugarElement.fromDom(editor.getBody());\n    const getIsRoot = editor => element => eq$1(element, getBody(editor));\n    const removeDataStyle = table => {\n      remove$7(table, 'data-mce-style');\n      const removeStyleAttribute = element => remove$7(element, 'data-mce-style');\n      each$2(cells$1(table), removeStyleAttribute);\n      each$2(columns$1(table), removeStyleAttribute);\n      each$2(rows$1(table), removeStyleAttribute);\n    };\n    const getSelectionStart = editor => SugarElement.fromDom(editor.selection.getStart());\n    const getPixelWidth = elm => elm.getBoundingClientRect().width;\n    const getPixelHeight = elm => elm.getBoundingClientRect().height;\n    const getRawWidth = (editor, elm) => {\n      const raw = editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n      return Optional.from(raw).filter(isNotEmpty);\n    };\n    const isPercentage$1 = value => /^(\\d+(\\.\\d+)?)%$/.test(value);\n    const isPixel = value => /^(\\d+(\\.\\d+)?)px$/.test(value);\n\n    const inSelection = (bounds, detail) => {\n      const leftEdge = detail.column;\n      const rightEdge = detail.column + detail.colspan - 1;\n      const topEdge = detail.row;\n      const bottomEdge = detail.row + detail.rowspan - 1;\n      return leftEdge <= bounds.finishCol && rightEdge >= bounds.startCol && (topEdge <= bounds.finishRow && bottomEdge >= bounds.startRow);\n    };\n    const isWithin = (bounds, detail) => {\n      return detail.column >= bounds.startCol && detail.column + detail.colspan - 1 <= bounds.finishCol && detail.row >= bounds.startRow && detail.row + detail.rowspan - 1 <= bounds.finishRow;\n    };\n    const isRectangular = (warehouse, bounds) => {\n      let isRect = true;\n      const detailIsWithin = curry(isWithin, bounds);\n      for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n        for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n          isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n        }\n      }\n      return isRect ? Optional.some(bounds) : Optional.none();\n    };\n\n    const getBounds = (detailA, detailB) => {\n      return bounds(Math.min(detailA.row, detailB.row), Math.min(detailA.column, detailB.column), Math.max(detailA.row + detailA.rowspan - 1, detailB.row + detailB.rowspan - 1), Math.max(detailA.column + detailA.colspan - 1, detailB.column + detailB.colspan - 1));\n    };\n    const getAnyBox = (warehouse, startCell, finishCell) => {\n      const startCoords = Warehouse.findItem(warehouse, startCell, eq$1);\n      const finishCoords = Warehouse.findItem(warehouse, finishCell, eq$1);\n      return startCoords.bind(sc => {\n        return finishCoords.map(fc => {\n          return getBounds(sc, fc);\n        });\n      });\n    };\n    const getBox$1 = (warehouse, startCell, finishCell) => {\n      return getAnyBox(warehouse, startCell, finishCell).bind(bounds => {\n        return isRectangular(warehouse, bounds);\n      });\n    };\n\n    const moveBy$1 = (warehouse, cell, row, column) => {\n      return Warehouse.findItem(warehouse, cell, eq$1).bind(detail => {\n        const startRow = row > 0 ? detail.row + detail.rowspan - 1 : detail.row;\n        const startCol = column > 0 ? detail.column + detail.colspan - 1 : detail.column;\n        const dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n        return dest.map(d => {\n          return d.element;\n        });\n      });\n    };\n    const intercepts$1 = (warehouse, start, finish) => {\n      return getAnyBox(warehouse, start, finish).map(bounds => {\n        const inside = Warehouse.filterItems(warehouse, curry(inSelection, bounds));\n        return map$1(inside, detail => {\n          return detail.element;\n        });\n      });\n    };\n    const parentCell = (warehouse, innerCell) => {\n      const isContainedBy = (c1, c2) => {\n        return contains$1(c2, c1);\n      };\n      return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(detail => {\n        return detail.element;\n      });\n    };\n\n    const moveBy = (cell, deltaRow, deltaColumn) => {\n      return table(cell).bind(table => {\n        const warehouse = getWarehouse(table);\n        return moveBy$1(warehouse, cell, deltaRow, deltaColumn);\n      });\n    };\n    const intercepts = (table, first, last) => {\n      const warehouse = getWarehouse(table);\n      return intercepts$1(warehouse, first, last);\n    };\n    const nestedIntercepts = (table, first, firstTable, last, lastTable) => {\n      const warehouse = getWarehouse(table);\n      const optStartCell = eq$1(table, firstTable) ? Optional.some(first) : parentCell(warehouse, first);\n      const optLastCell = eq$1(table, lastTable) ? Optional.some(last) : parentCell(warehouse, last);\n      return optStartCell.bind(startCell => optLastCell.bind(lastCell => intercepts$1(warehouse, startCell, lastCell)));\n    };\n    const getBox = (table, first, last) => {\n      const warehouse = getWarehouse(table);\n      return getBox$1(warehouse, first, last);\n    };\n    const getWarehouse = Warehouse.fromTable;\n\n    var TagBoundaries = [\n      'body',\n      'p',\n      'div',\n      'article',\n      'aside',\n      'figcaption',\n      'figure',\n      'footer',\n      'header',\n      'nav',\n      'section',\n      'ol',\n      'ul',\n      'li',\n      'table',\n      'thead',\n      'tbody',\n      'tfoot',\n      'caption',\n      'tr',\n      'td',\n      'th',\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'blockquote',\n      'pre',\n      'address'\n    ];\n\n    var DomUniverse = () => {\n      const clone = element => {\n        return SugarElement.fromDom(element.dom.cloneNode(false));\n      };\n      const document = element => documentOrOwner(element).dom;\n      const isBoundary = element => {\n        if (!isElement(element)) {\n          return false;\n        }\n        if (name(element) === 'body') {\n          return true;\n        }\n        return contains$2(TagBoundaries, name(element));\n      };\n      const isEmptyTag = element => {\n        if (!isElement(element)) {\n          return false;\n        }\n        return contains$2([\n          'br',\n          'img',\n          'hr',\n          'input'\n        ], name(element));\n      };\n      const isNonEditable = element => isElement(element) && get$b(element, 'contenteditable') === 'false';\n      const comparePosition = (element, other) => {\n        return element.dom.compareDocumentPosition(other.dom);\n      };\n      const copyAttributesTo = (source, destination) => {\n        const as = clone$2(source);\n        setAll$1(destination, as);\n      };\n      const isSpecial = element => {\n        const tag = name(element);\n        return contains$2([\n          'script',\n          'noscript',\n          'iframe',\n          'noframes',\n          'noembed',\n          'title',\n          'style',\n          'textarea',\n          'xmp'\n        ], tag);\n      };\n      const getLanguage = element => isElement(element) ? getOpt(element, 'lang') : Optional.none();\n      return {\n        up: constant({\n          selector: ancestor$1,\n          closest: closest$1,\n          predicate: ancestor$2,\n          all: parents\n        }),\n        down: constant({\n          selector: descendants,\n          predicate: descendants$1\n        }),\n        styles: constant({\n          get: get$a,\n          getRaw: getRaw$2,\n          set: set$1,\n          remove: remove$5\n        }),\n        attrs: constant({\n          get: get$b,\n          set: set$2,\n          remove: remove$7,\n          copyTo: copyAttributesTo\n        }),\n        insert: constant({\n          before: before$3,\n          after: after$5,\n          afterAll: after$4,\n          append: append$1,\n          appendAll: append,\n          prepend: prepend,\n          wrap: wrap\n        }),\n        remove: constant({\n          unwrap: unwrap,\n          remove: remove$6\n        }),\n        create: constant({\n          nu: SugarElement.fromTag,\n          clone,\n          text: SugarElement.fromText\n        }),\n        query: constant({\n          comparePosition,\n          prevSibling: prevSibling,\n          nextSibling: nextSibling\n        }),\n        property: constant({\n          children: children$2,\n          name: name,\n          parent: parent,\n          document,\n          isText: isText,\n          isComment: isComment,\n          isElement: isElement,\n          isSpecial,\n          getLanguage,\n          getText: get$6,\n          setText: set,\n          isBoundary,\n          isEmptyTag,\n          isNonEditable\n        }),\n        eq: eq$1,\n        is: is$1\n      };\n    };\n\n    const all = (universe, look, elements, f) => {\n      const head = elements[0];\n      const tail = elements.slice(1);\n      return f(universe, look, head, tail);\n    };\n    const oneAll = (universe, look, elements) => {\n      return elements.length > 0 ? all(universe, look, elements, unsafeOne) : Optional.none();\n    };\n    const unsafeOne = (universe, look, head, tail) => {\n      const start = look(universe, head);\n      return foldr(tail, (b, a) => {\n        const current = look(universe, a);\n        return commonElement(universe, b, current);\n      }, start);\n    };\n    const commonElement = (universe, start, end) => {\n      return start.bind(s => {\n        return end.filter(curry(universe.eq, s));\n      });\n    };\n\n    const eq = (universe, item) => {\n      return curry(universe.eq, item);\n    };\n    const ancestors$2 = (universe, start, end, isRoot = never) => {\n      const ps1 = [start].concat(universe.up().all(start));\n      const ps2 = [end].concat(universe.up().all(end));\n      const prune = path => {\n        const index = findIndex(path, isRoot);\n        return index.fold(() => {\n          return path;\n        }, ind => {\n          return path.slice(0, ind + 1);\n        });\n      };\n      const pruned1 = prune(ps1);\n      const pruned2 = prune(ps2);\n      const shared = find$1(pruned1, x => {\n        return exists(pruned2, eq(universe, x));\n      });\n      return {\n        firstpath: pruned1,\n        secondpath: pruned2,\n        shared\n      };\n    };\n\n    const sharedOne$1 = oneAll;\n    const ancestors$1 = ancestors$2;\n\n    const universe$3 = DomUniverse();\n    const sharedOne = (look, elements) => {\n      return sharedOne$1(universe$3, (_universe, element) => {\n        return look(element);\n      }, elements);\n    };\n    const ancestors = (start, finish, isRoot) => {\n      return ancestors$1(universe$3, start, finish, isRoot);\n    };\n\n    const lookupTable = container => {\n      return ancestor$1(container, 'table');\n    };\n    const identify = (start, finish, isRoot) => {\n      const getIsRoot = rootTable => {\n        return element => {\n          return isRoot !== undefined && isRoot(element) || eq$1(element, rootTable);\n        };\n      };\n      if (eq$1(start, finish)) {\n        return Optional.some({\n          boxes: Optional.some([start]),\n          start,\n          finish\n        });\n      } else {\n        return lookupTable(start).bind(startTable => {\n          return lookupTable(finish).bind(finishTable => {\n            if (eq$1(startTable, finishTable)) {\n              return Optional.some({\n                boxes: intercepts(startTable, start, finish),\n                start,\n                finish\n              });\n            } else if (contains$1(startTable, finishTable)) {\n              const ancestorCells = ancestors$3(finish, 'td,th', getIsRoot(startTable));\n              const finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n              return Optional.some({\n                boxes: nestedIntercepts(startTable, start, startTable, finish, finishTable),\n                start,\n                finish: finishCell\n              });\n            } else if (contains$1(finishTable, startTable)) {\n              const ancestorCells = ancestors$3(start, 'td,th', getIsRoot(finishTable));\n              const startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n              return Optional.some({\n                boxes: nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n                start,\n                finish: startCell\n              });\n            } else {\n              return ancestors(start, finish).shared.bind(lca => {\n                return closest$1(lca, 'table', isRoot).bind(lcaTable => {\n                  const finishAncestorCells = ancestors$3(finish, 'td,th', getIsRoot(lcaTable));\n                  const finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n                  const startAncestorCells = ancestors$3(start, 'td,th', getIsRoot(lcaTable));\n                  const startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n                  return Optional.some({\n                    boxes: nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n                    start: startCell,\n                    finish: finishCell\n                  });\n                });\n              });\n            }\n          });\n        });\n      }\n    };\n    const retrieve$1 = (container, selector) => {\n      const sels = descendants(container, selector);\n      return sels.length > 0 ? Optional.some(sels) : Optional.none();\n    };\n    const getLast = (boxes, lastSelectedSelector) => {\n      return find$1(boxes, box => {\n        return is$2(box, lastSelectedSelector);\n      });\n    };\n    const getEdges = (container, firstSelectedSelector, lastSelectedSelector) => {\n      return descendant(container, firstSelectedSelector).bind(first => {\n        return descendant(container, lastSelectedSelector).bind(last => {\n          return sharedOne(lookupTable, [\n            first,\n            last\n          ]).map(table => {\n            return {\n              first,\n              last,\n              table\n            };\n          });\n        });\n      });\n    };\n    const expandTo = (finish, firstSelectedSelector) => {\n      return ancestor$1(finish, 'table').bind(table => {\n        return descendant(table, firstSelectedSelector).bind(start => {\n          return identify(start, finish).bind(identified => {\n            return identified.boxes.map(boxes => {\n              return {\n                boxes,\n                start: identified.start,\n                finish: identified.finish\n              };\n            });\n          });\n        });\n      });\n    };\n    const shiftSelection = (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) => {\n      return getLast(boxes, lastSelectedSelector).bind(last => {\n        return moveBy(last, deltaRow, deltaColumn).bind(finish => {\n          return expandTo(finish, firstSelectedSelector);\n        });\n      });\n    };\n\n    const retrieve = (container, selector) => {\n      return retrieve$1(container, selector);\n    };\n    const retrieveBox = (container, firstSelectedSelector, lastSelectedSelector) => {\n      return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(edges => {\n        const isRoot = ancestor => {\n          return eq$1(container, ancestor);\n        };\n        const sectionSelector = 'thead,tfoot,tbody,table';\n        const firstAncestor = ancestor$1(edges.first, sectionSelector, isRoot);\n        const lastAncestor = ancestor$1(edges.last, sectionSelector, isRoot);\n        return firstAncestor.bind(fA => {\n          return lastAncestor.bind(lA => {\n            return eq$1(fA, lA) ? getBox(edges.table, edges.first, edges.last) : Optional.none();\n          });\n        });\n      });\n    };\n\n    const selection = identity;\n    const unmergable = selectedCells => {\n      const hasSpan = (elem, type) => getOpt(elem, type).exists(span => parseInt(span, 10) > 1);\n      const hasRowOrColSpan = elem => hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan');\n      return selectedCells.length > 0 && forall(selectedCells, hasRowOrColSpan) ? Optional.some(selectedCells) : Optional.none();\n    };\n    const mergable = (table, selectedCells, ephemera) => {\n      if (selectedCells.length <= 1) {\n        return Optional.none();\n      } else {\n        return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector).map(bounds => ({\n          bounds,\n          cells: selectedCells\n        }));\n      }\n    };\n\n    const strSelected = 'data-mce-selected';\n    const strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n    const strAttributeSelector = '[' + strSelected + ']';\n    const strFirstSelected = 'data-mce-first-selected';\n    const strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n    const strLastSelected = 'data-mce-last-selected';\n    const strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n    const attributeSelector = strAttributeSelector;\n    const ephemera = {\n      selected: strSelected,\n      selectedSelector: strSelectedSelector,\n      firstSelected: strFirstSelected,\n      firstSelectedSelector: strFirstSelectedSelector,\n      lastSelected: strLastSelected,\n      lastSelectedSelector: strLastSelectedSelector\n    };\n\n    const forMenu = (selectedCells, table, cell) => ({\n      element: cell,\n      mergable: mergable(table, selectedCells, ephemera),\n      unmergable: unmergable(selectedCells),\n      selection: selection(selectedCells)\n    });\n    const paste = (element, clipboard, generators) => ({\n      element,\n      clipboard,\n      generators\n    });\n    const pasteRows = (selectedCells, _cell, clipboard, generators) => ({\n      selection: selection(selectedCells),\n      clipboard,\n      generators\n    });\n\n    const getSelectionCellFallback = element => table(element).bind(table => retrieve(table, ephemera.firstSelectedSelector)).fold(constant(element), cells => cells[0]);\n    const getSelectionFromSelector = selector => (initCell, isRoot) => {\n      const cellName = name(initCell);\n      const cell = cellName === 'col' || cellName === 'colgroup' ? getSelectionCellFallback(initCell) : initCell;\n      return closest$1(cell, selector, isRoot);\n    };\n    const getSelectionCellOrCaption = getSelectionFromSelector('th,td,caption');\n    const getSelectionCell = getSelectionFromSelector('th,td');\n    const getCellsFromSelection = editor => fromDom(editor.model.table.getSelectedCells());\n    const getCellsFromFakeSelection = editor => filter$2(getCellsFromSelection(editor), cell => is$2(cell, ephemera.selectedSelector));\n\n    const extractSelected = cells => {\n      return table(cells[0]).map(table => {\n        const replica = extract$1(table, attributeSelector);\n        removeDataStyle(replica);\n        return [replica];\n      });\n    };\n    const serializeElements = (editor, elements) => map$1(elements, elm => editor.selection.serializer.serialize(elm.dom, {})).join('');\n    const getTextContent = elements => map$1(elements, element => element.dom.innerText).join('');\n    const registerEvents = (editor, actions) => {\n      editor.on('BeforeGetContent', e => {\n        const multiCellContext = cells => {\n          e.preventDefault();\n          extractSelected(cells).each(elements => {\n            e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);\n          });\n        };\n        if (e.selection === true) {\n          const cells = getCellsFromFakeSelection(editor);\n          if (cells.length >= 1) {\n            multiCellContext(cells);\n          }\n        }\n      });\n      editor.on('BeforeSetContent', e => {\n        if (e.selection === true && e.paste === true) {\n          const selectedCells = getCellsFromSelection(editor);\n          head(selectedCells).each(cell => {\n            table(cell).each(table => {\n              const elements = filter$2(fromHtml(e.content), content => {\n                return name(content) !== 'meta';\n              });\n              const isTable = isTag('table');\n              if (elements.length === 1 && isTable(elements[0])) {\n                e.preventDefault();\n                const doc = SugarElement.fromDom(editor.getDoc());\n                const generators = paste$1(doc);\n                const targets = paste(cell, elements[0], generators);\n                actions.pasteCells(table, targets).each(() => {\n                  editor.focus();\n                });\n              }\n            });\n          });\n        }\n      });\n    };\n\n    const point = (element, offset) => ({\n      element,\n      offset\n    });\n\n    const scan$1 = (universe, element, direction) => {\n      if (universe.property().isText(element) && universe.property().getText(element).trim().length === 0 || universe.property().isComment(element)) {\n        return direction(element).bind(elem => {\n          return scan$1(universe, elem, direction).orThunk(() => {\n            return Optional.some(elem);\n          });\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const toEnd = (universe, element) => {\n      if (universe.property().isText(element)) {\n        return universe.property().getText(element).length;\n      }\n      const children = universe.property().children(element);\n      return children.length;\n    };\n    const freefallRtl$2 = (universe, element) => {\n      const candidate = scan$1(universe, element, universe.query().prevSibling).getOr(element);\n      if (universe.property().isText(candidate)) {\n        return point(candidate, toEnd(universe, candidate));\n      }\n      const children = universe.property().children(candidate);\n      return children.length > 0 ? freefallRtl$2(universe, children[children.length - 1]) : point(candidate, toEnd(universe, candidate));\n    };\n\n    const freefallRtl$1 = freefallRtl$2;\n\n    const universe$2 = DomUniverse();\n    const freefallRtl = element => {\n      return freefallRtl$1(universe$2, element);\n    };\n\n    const halve = (main, other) => {\n      if (!hasColspan(main)) {\n        const width = getGenericWidth(main);\n        width.each(w => {\n          const newWidth = w.value / 2;\n          setGenericWidth(main, newWidth, w.unit);\n          setGenericWidth(other, newWidth, w.unit);\n        });\n      }\n    };\n\n    const zero = array => map$1(array, constant(0));\n    const surround = (sizes, startIndex, endIndex, results, f) => f(sizes.slice(0, startIndex)).concat(results).concat(f(sizes.slice(endIndex)));\n    const clampDeltaHelper = predicate => (sizes, index, delta, minCellSize) => {\n      if (!predicate(delta)) {\n        return delta;\n      } else {\n        const newSize = Math.max(minCellSize, sizes[index] - Math.abs(delta));\n        const diff = Math.abs(newSize - sizes[index]);\n        return delta >= 0 ? diff : -diff;\n      }\n    };\n    const clampNegativeDelta = clampDeltaHelper(delta => delta < 0);\n    const clampDelta = clampDeltaHelper(always);\n    const resizeTable = () => {\n      const calcFixedDeltas = (sizes, index, next, delta, minCellSize) => {\n        const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n        return surround(sizes, index, next + 1, [\n          clampedDelta,\n          0\n        ], zero);\n      };\n      const calcRelativeDeltas = (sizes, index, delta, minCellSize) => {\n        const ratio = (100 + delta) / 100;\n        const newThis = Math.max(minCellSize, (sizes[index] + delta) / ratio);\n        return map$1(sizes, (size, idx) => {\n          const newSize = idx === index ? newThis : size / ratio;\n          return newSize - size;\n        });\n      };\n      const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize, isRelative) => {\n        if (isRelative) {\n          return calcRelativeDeltas(sizes, index, delta, minCellSize);\n        } else {\n          return calcFixedDeltas(sizes, index, next, delta, minCellSize);\n        }\n      };\n      const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize, isRelative) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize, isRelative);\n      const resizeTable = (resizer, delta) => resizer(delta);\n      const calcRightEdgeDeltas = (sizes, _prev, index, delta, minCellSize, isRelative) => {\n        if (isRelative) {\n          return calcRelativeDeltas(sizes, index, delta, minCellSize);\n        } else {\n          const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n          return zero(sizes.slice(0, index)).concat([clampedDelta]);\n        }\n      };\n      const calcRedestributedWidths = (sizes, totalWidth, pixelDelta, isRelative) => {\n        if (isRelative) {\n          const tableWidth = totalWidth + pixelDelta;\n          const ratio = tableWidth / totalWidth;\n          const newSizes = map$1(sizes, size => size / ratio);\n          return {\n            delta: ratio * 100 - 100,\n            newSizes\n          };\n        } else {\n          return {\n            delta: pixelDelta,\n            newSizes: sizes\n          };\n        }\n      };\n      return {\n        resizeTable,\n        clampTableDelta: clampNegativeDelta,\n        calcLeftEdgeDeltas,\n        calcMiddleDeltas,\n        calcRightEdgeDeltas,\n        calcRedestributedWidths\n      };\n    };\n    const preserveTable = () => {\n      const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize) => {\n        const idx = delta >= 0 ? next : index;\n        const clampedDelta = clampDelta(sizes, idx, delta, minCellSize);\n        return surround(sizes, index, next + 1, [\n          clampedDelta,\n          -clampedDelta\n        ], zero);\n      };\n      const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize);\n      const resizeTable = (resizer, delta, isLastColumn) => {\n        if (isLastColumn) {\n          resizer(delta);\n        }\n      };\n      const calcRightEdgeDeltas = (sizes, _prev, _index, delta, _minCellSize, isRelative) => {\n        if (isRelative) {\n          return zero(sizes);\n        } else {\n          const diff = delta / sizes.length;\n          return map$1(sizes, constant(diff));\n        }\n      };\n      const clampTableDelta = (sizes, index, delta, minCellSize, isLastColumn) => {\n        if (isLastColumn) {\n          if (delta >= 0) {\n            return delta;\n          } else {\n            const maxDelta = foldl(sizes, (a, b) => a + b - minCellSize, 0);\n            return Math.max(-maxDelta, delta);\n          }\n        } else {\n          return clampNegativeDelta(sizes, index, delta, minCellSize);\n        }\n      };\n      const calcRedestributedWidths = (sizes, _totalWidth, _pixelDelta, _isRelative) => ({\n        delta: 0,\n        newSizes: sizes\n      });\n      return {\n        resizeTable,\n        clampTableDelta,\n        calcLeftEdgeDeltas,\n        calcMiddleDeltas,\n        calcRightEdgeDeltas,\n        calcRedestributedWidths\n      };\n    };\n\n    const getGridSize = table => {\n      const warehouse = Warehouse.fromTable(table);\n      return warehouse.grid;\n    };\n\n    const isHeaderCell = isTag('th');\n    const isHeaderCells = cells => forall(cells, cell => isHeaderCell(cell.element));\n    const getRowHeaderType = (isHeaderRow, isHeaderCells) => {\n      if (isHeaderRow && isHeaderCells) {\n        return 'sectionCells';\n      } else if (isHeaderRow) {\n        return 'section';\n      } else {\n        return 'cells';\n      }\n    };\n    const getRowType = row => {\n      const isHeaderRow = row.section === 'thead';\n      const isHeaderCells = is(findCommonCellType(row.cells), 'th');\n      if (row.section === 'tfoot') {\n        return { type: 'footer' };\n      } else if (isHeaderRow || isHeaderCells) {\n        return {\n          type: 'header',\n          subType: getRowHeaderType(isHeaderRow, isHeaderCells)\n        };\n      } else {\n        return { type: 'body' };\n      }\n    };\n    const findCommonCellType = cells => {\n      const headerCells = filter$2(cells, cell => isHeaderCell(cell.element));\n      if (headerCells.length === 0) {\n        return Optional.some('td');\n      } else if (headerCells.length === cells.length) {\n        return Optional.some('th');\n      } else {\n        return Optional.none();\n      }\n    };\n    const findCommonRowType = rows => {\n      const rowTypes = map$1(rows, row => getRowType(row).type);\n      const hasHeader = contains$2(rowTypes, 'header');\n      const hasFooter = contains$2(rowTypes, 'footer');\n      if (!hasHeader && !hasFooter) {\n        return Optional.some('body');\n      } else {\n        const hasBody = contains$2(rowTypes, 'body');\n        if (hasHeader && !hasBody && !hasFooter) {\n          return Optional.some('header');\n        } else if (!hasHeader && !hasBody && hasFooter) {\n          return Optional.some('footer');\n        } else {\n          return Optional.none();\n        }\n      }\n    };\n    const findTableRowHeaderType = warehouse => findMap(warehouse.all, row => {\n      const rowType = getRowType(row);\n      return rowType.type === 'header' ? Optional.from(rowType.subType) : Optional.none();\n    });\n\n    const transformCell = (cell, comparator, substitution) => elementnew(substitution(cell.element, comparator), true, cell.isLocked);\n    const transformRow = (row, section) => row.section !== section ? rowcells(row.element, row.cells, section, row.isNew) : row;\n    const section = () => ({\n      transformRow,\n      transformCell: (cell, comparator, substitution) => {\n        const newCell = substitution(cell.element, comparator);\n        const fixedCell = name(newCell) !== 'td' ? mutate$1(newCell, 'td') : newCell;\n        return elementnew(fixedCell, cell.isNew, cell.isLocked);\n      }\n    });\n    const sectionCells = () => ({\n      transformRow,\n      transformCell\n    });\n    const cells = () => ({\n      transformRow: (row, section) => {\n        const newSection = section === 'thead' ? 'tbody' : section;\n        return transformRow(row, newSection);\n      },\n      transformCell\n    });\n    const fallback = () => ({\n      transformRow: identity,\n      transformCell\n    });\n    const getTableSectionType = (table, fallback) => {\n      const warehouse = Warehouse.fromTable(table);\n      const type = findTableRowHeaderType(warehouse).getOr(fallback);\n      switch (type) {\n      case 'section':\n        return section();\n      case 'sectionCells':\n        return sectionCells();\n      case 'cells':\n        return cells();\n      }\n    };\n    const TableSection = {\n      getTableSectionType,\n      section,\n      sectionCells,\n      cells,\n      fallback\n    };\n\n    const closest = target => closest$1(target, '[contenteditable]');\n    const isEditable$1 = (element, assumeEditable = false) => {\n      if (inBody(element)) {\n        return element.dom.isContentEditable;\n      } else {\n        return closest(element).fold(constant(assumeEditable), editable => getRaw(editable) === 'true');\n      }\n    };\n    const getRaw = element => element.dom.contentEditable;\n\n    const setIfNot = (element, property, value, ignore) => {\n      if (value === ignore) {\n        remove$7(element, property);\n      } else {\n        set$2(element, property, value);\n      }\n    };\n    const insert$1 = (table, selector, element) => {\n      last$2(children(table, selector)).fold(() => prepend(table, element), child => after$5(child, element));\n    };\n    const generateSection = (table, sectionName) => {\n      const section = child(table, sectionName).getOrThunk(() => {\n        const newSection = SugarElement.fromTag(sectionName, owner(table).dom);\n        if (sectionName === 'thead') {\n          insert$1(table, 'caption,colgroup', newSection);\n        } else if (sectionName === 'colgroup') {\n          insert$1(table, 'caption', newSection);\n        } else {\n          append$1(table, newSection);\n        }\n        return newSection;\n      });\n      empty(section);\n      return section;\n    };\n    const render$1 = (table, grid) => {\n      const newRows = [];\n      const newCells = [];\n      const syncRows = gridSection => map$1(gridSection, row => {\n        if (row.isNew) {\n          newRows.push(row.element);\n        }\n        const tr = row.element;\n        empty(tr);\n        each$2(row.cells, cell => {\n          if (cell.isNew) {\n            newCells.push(cell.element);\n          }\n          setIfNot(cell.element, 'colspan', cell.colspan, 1);\n          setIfNot(cell.element, 'rowspan', cell.rowspan, 1);\n          append$1(tr, cell.element);\n        });\n        return tr;\n      });\n      const syncColGroup = gridSection => bind$2(gridSection, colGroup => map$1(colGroup.cells, col => {\n        setIfNot(col.element, 'span', col.colspan, 1);\n        return col.element;\n      }));\n      const renderSection = (gridSection, sectionName) => {\n        const section = generateSection(table, sectionName);\n        const sync = sectionName === 'colgroup' ? syncColGroup : syncRows;\n        const sectionElems = sync(gridSection);\n        append(section, sectionElems);\n      };\n      const removeSection = sectionName => {\n        child(table, sectionName).each(remove$6);\n      };\n      const renderOrRemoveSection = (gridSection, sectionName) => {\n        if (gridSection.length > 0) {\n          renderSection(gridSection, sectionName);\n        } else {\n          removeSection(sectionName);\n        }\n      };\n      const headSection = [];\n      const bodySection = [];\n      const footSection = [];\n      const columnGroupsSection = [];\n      each$2(grid, row => {\n        switch (row.section) {\n        case 'thead':\n          headSection.push(row);\n          break;\n        case 'tbody':\n          bodySection.push(row);\n          break;\n        case 'tfoot':\n          footSection.push(row);\n          break;\n        case 'colgroup':\n          columnGroupsSection.push(row);\n          break;\n        }\n      });\n      renderOrRemoveSection(columnGroupsSection, 'colgroup');\n      renderOrRemoveSection(headSection, 'thead');\n      renderOrRemoveSection(bodySection, 'tbody');\n      renderOrRemoveSection(footSection, 'tfoot');\n      return {\n        newRows,\n        newCells\n      };\n    };\n    const copy = grid => map$1(grid, row => {\n      const tr = shallow(row.element);\n      each$2(row.cells, cell => {\n        const clonedCell = deep(cell.element);\n        setIfNot(clonedCell, 'colspan', cell.colspan, 1);\n        setIfNot(clonedCell, 'rowspan', cell.rowspan, 1);\n        append$1(tr, clonedCell);\n      });\n      return tr;\n    });\n\n    const getColumn = (grid, index) => {\n      return map$1(grid, row => {\n        return getCell(row, index);\n      });\n    };\n    const getRow = (grid, index) => {\n      return grid[index];\n    };\n    const findDiff = (xs, comp) => {\n      if (xs.length === 0) {\n        return 0;\n      }\n      const first = xs[0];\n      const index = findIndex(xs, x => {\n        return !comp(first.element, x.element);\n      });\n      return index.getOr(xs.length);\n    };\n    const subgrid = (grid, row, column, comparator) => {\n      const gridRow = getRow(grid, row);\n      const isColRow = gridRow.section === 'colgroup';\n      const colspan = findDiff(gridRow.cells.slice(column), comparator);\n      const rowspan = isColRow ? 1 : findDiff(getColumn(grid.slice(row), column), comparator);\n      return {\n        colspan,\n        rowspan\n      };\n    };\n\n    const toDetails = (grid, comparator) => {\n      const seen = map$1(grid, row => map$1(row.cells, never));\n      const updateSeen = (rowIndex, columnIndex, rowspan, colspan) => {\n        for (let row = rowIndex; row < rowIndex + rowspan; row++) {\n          for (let column = columnIndex; column < columnIndex + colspan; column++) {\n            seen[row][column] = true;\n          }\n        }\n      };\n      return map$1(grid, (row, rowIndex) => {\n        const details = bind$2(row.cells, (cell, columnIndex) => {\n          if (seen[rowIndex][columnIndex] === false) {\n            const result = subgrid(grid, rowIndex, columnIndex, comparator);\n            updateSeen(rowIndex, columnIndex, result.rowspan, result.colspan);\n            return [detailnew(cell.element, result.rowspan, result.colspan, cell.isNew)];\n          } else {\n            return [];\n          }\n        });\n        return rowdetailnew(row.element, details, row.section, row.isNew);\n      });\n    };\n    const toGrid = (warehouse, generators, isNew) => {\n      const grid = [];\n      each$2(warehouse.colgroups, colgroup => {\n        const colgroupCols = [];\n        for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n          const element = Warehouse.getColumnAt(warehouse, columnIndex).map(column => elementnew(column.element, isNew, false)).getOrThunk(() => elementnew(generators.colGap(), true, false));\n          colgroupCols.push(element);\n        }\n        grid.push(rowcells(colgroup.element, colgroupCols, 'colgroup', isNew));\n      });\n      for (let rowIndex = 0; rowIndex < warehouse.grid.rows; rowIndex++) {\n        const rowCells = [];\n        for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n          const element = Warehouse.getAt(warehouse, rowIndex, columnIndex).map(item => elementnew(item.element, isNew, item.isLocked)).getOrThunk(() => elementnew(generators.gap(), true, false));\n          rowCells.push(element);\n        }\n        const rowDetail = warehouse.all[rowIndex];\n        const row = rowcells(rowDetail.element, rowCells, rowDetail.section, isNew);\n        grid.push(row);\n      }\n      return grid;\n    };\n\n    const fromWarehouse = (warehouse, generators) => toGrid(warehouse, generators, false);\n    const toDetailList = grid => toDetails(grid, eq$1);\n    const findInWarehouse = (warehouse, element) => findMap(warehouse.all, r => find$1(r.cells, e => eq$1(element, e.element)));\n    const extractCells = (warehouse, target, predicate) => {\n      const details = map$1(target.selection, cell$1 => {\n        return cell(cell$1).bind(lc => findInWarehouse(warehouse, lc)).filter(predicate);\n      });\n      const cells = cat(details);\n      return someIf(cells.length > 0, cells);\n    };\n    const run = (operation, extract, adjustment, postAction, genWrappers) => (table, target, generators, behaviours) => {\n      const warehouse = Warehouse.fromTable(table);\n      const tableSection = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.section).getOrThunk(TableSection.fallback);\n      const output = extract(warehouse, target).map(info => {\n        const model = fromWarehouse(warehouse, generators);\n        const result = operation(model, info, eq$1, genWrappers(generators), tableSection);\n        const lockedColumns = getLockedColumnsFromGrid(result.grid);\n        const grid = toDetailList(result.grid);\n        return {\n          info,\n          grid,\n          cursor: result.cursor,\n          lockedColumns\n        };\n      });\n      return output.bind(out => {\n        const newElements = render$1(table, out.grid);\n        const tableSizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.sizing).getOrThunk(() => TableSize.getTableSize(table));\n        const resizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.resize).getOrThunk(preserveTable);\n        adjustment(table, out.grid, out.info, {\n          sizing: tableSizing,\n          resize: resizing,\n          section: tableSection\n        });\n        postAction(table);\n        remove$7(table, LOCKED_COL_ATTR);\n        if (out.lockedColumns.length > 0) {\n          set$2(table, LOCKED_COL_ATTR, out.lockedColumns.join(','));\n        }\n        return Optional.some({\n          cursor: out.cursor,\n          newRows: newElements.newRows,\n          newCells: newElements.newCells\n        });\n      });\n    };\n    const onPaste = (warehouse, target) => cell(target.element).bind(cell => findInWarehouse(warehouse, cell).map(details => {\n      const value = {\n        ...details,\n        generators: target.generators,\n        clipboard: target.clipboard\n      };\n      return value;\n    }));\n    const onPasteByEditor = (warehouse, target) => extractCells(warehouse, target, always).map(cells => ({\n      cells,\n      generators: target.generators,\n      clipboard: target.clipboard\n    }));\n    const onMergable = (_warehouse, target) => target.mergable;\n    const onUnmergable = (_warehouse, target) => target.unmergable;\n    const onCells = (warehouse, target) => extractCells(warehouse, target, always);\n    const onUnlockedCells = (warehouse, target) => extractCells(warehouse, target, detail => !detail.isLocked);\n    const isUnlockedTableCell = (warehouse, cell) => findInWarehouse(warehouse, cell).exists(detail => !detail.isLocked);\n    const allUnlocked = (warehouse, cells) => forall(cells, cell => isUnlockedTableCell(warehouse, cell));\n    const onUnlockedMergable = (warehouse, target) => onMergable(warehouse, target).filter(mergeable => allUnlocked(warehouse, mergeable.cells));\n    const onUnlockedUnmergable = (warehouse, target) => onUnmergable(warehouse, target).filter(cells => allUnlocked(warehouse, cells));\n\n    const merge$2 = (grid, bounds, comparator, substitution) => {\n      const rows = extractGridDetails(grid).rows;\n      if (rows.length === 0) {\n        return grid;\n      }\n      for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n        for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n          const row = rows[i];\n          const isLocked = getCell(row, j).isLocked;\n          mutateCell(row, j, elementnew(substitution(), false, isLocked));\n        }\n      }\n      return grid;\n    };\n    const unmerge = (grid, target, comparator, substitution) => {\n      const rows = extractGridDetails(grid).rows;\n      let first = true;\n      for (let i = 0; i < rows.length; i++) {\n        for (let j = 0; j < cellLength(rows[0]); j++) {\n          const row = rows[i];\n          const currentCell = getCell(row, j);\n          const currentCellElm = currentCell.element;\n          const isToReplace = comparator(currentCellElm, target);\n          if (isToReplace && !first) {\n            mutateCell(row, j, elementnew(substitution(), true, currentCell.isLocked));\n          } else if (isToReplace) {\n            first = false;\n          }\n        }\n      }\n      return grid;\n    };\n    const uniqueCells = (row, comparator) => {\n      return foldl(row, (rest, cell) => {\n        return exists(rest, currentCell => {\n          return comparator(currentCell.element, cell.element);\n        }) ? rest : rest.concat([cell]);\n      }, []);\n    };\n    const splitCols = (grid, index, comparator, substitution) => {\n      if (index > 0 && index < grid[0].cells.length) {\n        each$2(grid, row => {\n          const prevCell = row.cells[index - 1];\n          let offset = 0;\n          const substitute = substitution();\n          while (row.cells.length > index + offset && comparator(prevCell.element, row.cells[index + offset].element)) {\n            mutateCell(row, index + offset, elementnew(substitute, true, row.cells[index + offset].isLocked));\n            offset++;\n          }\n        });\n      }\n      return grid;\n    };\n    const splitRows = (grid, index, comparator, substitution) => {\n      const rows = extractGridDetails(grid).rows;\n      if (index > 0 && index < rows.length) {\n        const rowPrevCells = rows[index - 1].cells;\n        const cells = uniqueCells(rowPrevCells, comparator);\n        each$2(cells, cell => {\n          let replacement = Optional.none();\n          for (let i = index; i < rows.length; i++) {\n            for (let j = 0; j < cellLength(rows[0]); j++) {\n              const row = rows[i];\n              const current = getCell(row, j);\n              const isToReplace = comparator(current.element, cell.element);\n              if (isToReplace) {\n                if (replacement.isNone()) {\n                  replacement = Optional.some(substitution());\n                }\n                replacement.each(sub => {\n                  mutateCell(row, j, elementnew(sub, true, current.isLocked));\n                });\n              }\n            }\n          }\n        });\n      }\n      return grid;\n    };\n\n    const value$1 = value => {\n      const applyHelper = fn => fn(value);\n      const constHelper = constant(value);\n      const outputHelper = () => output;\n      const output = {\n        tag: true,\n        inner: value,\n        fold: (_onError, onValue) => onValue(value),\n        isValue: always,\n        isError: never,\n        map: mapper => Result.value(mapper(value)),\n        mapError: outputHelper,\n        bind: applyHelper,\n        exists: applyHelper,\n        forall: applyHelper,\n        getOr: constHelper,\n        or: outputHelper,\n        getOrThunk: constHelper,\n        orThunk: outputHelper,\n        getOrDie: constHelper,\n        each: fn => {\n          fn(value);\n        },\n        toOptional: () => Optional.some(value)\n      };\n      return output;\n    };\n    const error = error => {\n      const outputHelper = () => output;\n      const output = {\n        tag: false,\n        inner: error,\n        fold: (onError, _onValue) => onError(error),\n        isValue: never,\n        isError: always,\n        map: outputHelper,\n        mapError: mapper => Result.error(mapper(error)),\n        bind: outputHelper,\n        exists: never,\n        forall: always,\n        getOr: identity,\n        or: identity,\n        getOrThunk: apply,\n        orThunk: apply,\n        getOrDie: die(String(error)),\n        each: noop,\n        toOptional: Optional.none\n      };\n      return output;\n    };\n    const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n    const Result = {\n      value: value$1,\n      error,\n      fromOption\n    };\n\n    const measure = (startAddress, gridA, gridB) => {\n      if (startAddress.row >= gridA.length || startAddress.column > cellLength(gridA[0])) {\n        return Result.error('invalid start address out of table bounds, row: ' + startAddress.row + ', column: ' + startAddress.column);\n      }\n      const rowRemainder = gridA.slice(startAddress.row);\n      const colRemainder = rowRemainder[0].cells.slice(startAddress.column);\n      const colRequired = cellLength(gridB[0]);\n      const rowRequired = gridB.length;\n      return Result.value({\n        rowDelta: rowRemainder.length - rowRequired,\n        colDelta: colRemainder.length - colRequired\n      });\n    };\n    const measureWidth = (gridA, gridB) => {\n      const colLengthA = cellLength(gridA[0]);\n      const colLengthB = cellLength(gridB[0]);\n      return {\n        rowDelta: 0,\n        colDelta: colLengthA - colLengthB\n      };\n    };\n    const measureHeight = (gridA, gridB) => {\n      const rowLengthA = gridA.length;\n      const rowLengthB = gridB.length;\n      return {\n        rowDelta: rowLengthA - rowLengthB,\n        colDelta: 0\n      };\n    };\n    const generateElements = (amount, row, generators, isLocked) => {\n      const generator = row.section === 'colgroup' ? generators.col : generators.cell;\n      return range$1(amount, idx => elementnew(generator(), true, isLocked(idx)));\n    };\n    const rowFill = (grid, amount, generators, lockedColumns) => {\n      const exampleRow = grid[grid.length - 1];\n      return grid.concat(range$1(amount, () => {\n        const generator = exampleRow.section === 'colgroup' ? generators.colgroup : generators.row;\n        const row = clone(exampleRow, generator, identity);\n        const elements = generateElements(row.cells.length, row, generators, idx => has$1(lockedColumns, idx.toString()));\n        return setCells(row, elements);\n      }));\n    };\n    const colFill = (grid, amount, generators, startIndex) => map$1(grid, row => {\n      const newChildren = generateElements(amount, row, generators, never);\n      return addCells(row, startIndex, newChildren);\n    });\n    const lockedColFill = (grid, generators, lockedColumns) => map$1(grid, row => {\n      return foldl(lockedColumns, (acc, colNum) => {\n        const newChild = generateElements(1, row, generators, always)[0];\n        return addCell(acc, colNum, newChild);\n      }, row);\n    });\n    const tailor = (gridA, delta, generators) => {\n      const fillCols = delta.colDelta < 0 ? colFill : identity;\n      const fillRows = delta.rowDelta < 0 ? rowFill : identity;\n      const lockedColumns = getLockedColumnsFromGrid(gridA);\n      const gridWidth = cellLength(gridA[0]);\n      const isLastColLocked = exists(lockedColumns, locked => locked === gridWidth - 1);\n      const modifiedCols = fillCols(gridA, Math.abs(delta.colDelta), generators, isLastColLocked ? gridWidth - 1 : gridWidth);\n      const newLockedColumns = getLockedColumnsFromGrid(modifiedCols);\n      return fillRows(modifiedCols, Math.abs(delta.rowDelta), generators, mapToObject(newLockedColumns, always));\n    };\n\n    const isSpanning = (grid, row, col, comparator) => {\n      const candidate = getCell(grid[row], col);\n      const matching = curry(comparator, candidate.element);\n      const currentRow = grid[row];\n      return grid.length > 1 && cellLength(currentRow) > 1 && (col > 0 && matching(getCellElement(currentRow, col - 1)) || col < currentRow.cells.length - 1 && matching(getCellElement(currentRow, col + 1)) || row > 0 && matching(getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(getCellElement(grid[row + 1], col)));\n    };\n    const mergeTables = (startAddress, gridA, gridBRows, generator, comparator, lockedColumns) => {\n      const startRow = startAddress.row;\n      const startCol = startAddress.column;\n      const mergeHeight = gridBRows.length;\n      const mergeWidth = cellLength(gridBRows[0]);\n      const endRow = startRow + mergeHeight;\n      const endCol = startCol + mergeWidth + lockedColumns.length;\n      const lockedColumnObj = mapToObject(lockedColumns, always);\n      for (let r = startRow; r < endRow; r++) {\n        let skippedCol = 0;\n        for (let c = startCol; c < endCol; c++) {\n          if (lockedColumnObj[c]) {\n            skippedCol++;\n            continue;\n          }\n          if (isSpanning(gridA, r, c, comparator)) {\n            unmerge(gridA, getCellElement(gridA[r], c), comparator, generator.cell);\n          }\n          const gridBColIndex = c - startCol - skippedCol;\n          const newCell = getCell(gridBRows[r - startRow], gridBColIndex);\n          const newCellElm = newCell.element;\n          const replacement = generator.replace(newCellElm);\n          mutateCell(gridA[r], c, elementnew(replacement, true, newCell.isLocked));\n        }\n      }\n      return gridA;\n    };\n    const getValidStartAddress = (currentStartAddress, grid, lockedColumns) => {\n      const gridColLength = cellLength(grid[0]);\n      const adjustedRowAddress = extractGridDetails(grid).cols.length + currentStartAddress.row;\n      const possibleColAddresses = range$1(gridColLength - currentStartAddress.column, num => num + currentStartAddress.column);\n      const validColAddress = find$1(possibleColAddresses, num => forall(lockedColumns, col => col !== num)).getOr(gridColLength - 1);\n      return {\n        row: adjustedRowAddress,\n        column: validColAddress\n      };\n    };\n    const getLockedColumnsWithinBounds = (startAddress, rows, lockedColumns) => filter$2(lockedColumns, colNum => colNum >= startAddress.column && colNum <= cellLength(rows[0]) + startAddress.column);\n    const merge$1 = (startAddress, gridA, gridB, generator, comparator) => {\n      const lockedColumns = getLockedColumnsFromGrid(gridA);\n      const validStartAddress = getValidStartAddress(startAddress, gridA, lockedColumns);\n      const gridBRows = extractGridDetails(gridB).rows;\n      const lockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, lockedColumns);\n      const result = measure(validStartAddress, gridA, gridBRows);\n      return result.map(diff => {\n        const delta = {\n          ...diff,\n          colDelta: diff.colDelta - lockedColumnsWithinBounds.length\n        };\n        const fittedGrid = tailor(gridA, delta, generator);\n        const newLockedColumns = getLockedColumnsFromGrid(fittedGrid);\n        const newLockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, newLockedColumns);\n        return mergeTables(validStartAddress, fittedGrid, gridBRows, generator, comparator, newLockedColumnsWithinBounds);\n      });\n    };\n    const insertCols = (index, gridA, gridB, generator, comparator) => {\n      splitCols(gridA, index, comparator, generator.cell);\n      const delta = measureHeight(gridB, gridA);\n      const fittedNewGrid = tailor(gridB, delta, generator);\n      const secondDelta = measureHeight(gridA, fittedNewGrid);\n      const fittedOldGrid = tailor(gridA, secondDelta, generator);\n      return map$1(fittedOldGrid, (gridRow, i) => {\n        return addCells(gridRow, index, fittedNewGrid[i].cells);\n      });\n    };\n    const insertRows = (index, gridA, gridB, generator, comparator) => {\n      splitRows(gridA, index, comparator, generator.cell);\n      const locked = getLockedColumnsFromGrid(gridA);\n      const diff = measureWidth(gridA, gridB);\n      const delta = {\n        ...diff,\n        colDelta: diff.colDelta - locked.length\n      };\n      const fittedOldGrid = tailor(gridA, delta, generator);\n      const {\n        cols: oldCols,\n        rows: oldRows\n      } = extractGridDetails(fittedOldGrid);\n      const newLocked = getLockedColumnsFromGrid(fittedOldGrid);\n      const secondDiff = measureWidth(gridB, gridA);\n      const secondDelta = {\n        ...secondDiff,\n        colDelta: secondDiff.colDelta + newLocked.length\n      };\n      const fittedGridB = lockedColFill(gridB, generator, newLocked);\n      const fittedNewGrid = tailor(fittedGridB, secondDelta, generator);\n      return [\n        ...oldCols,\n        ...oldRows.slice(0, index),\n        ...fittedNewGrid,\n        ...oldRows.slice(index, oldRows.length)\n      ];\n    };\n\n    const cloneRow = (row, cloneCell, comparator, substitution) => clone(row, elem => substitution(elem, comparator), cloneCell);\n    const insertRowAt = (grid, index, example, comparator, substitution) => {\n      const {rows, cols} = extractGridDetails(grid);\n      const before = rows.slice(0, index);\n      const after = rows.slice(index);\n      const newRow = cloneRow(rows[example], (ex, c) => {\n        const withinSpan = index > 0 && index < rows.length && comparator(getCellElement(rows[index - 1], c), getCellElement(rows[index], c));\n        const ret = withinSpan ? getCell(rows[index], c) : elementnew(substitution(ex.element, comparator), true, ex.isLocked);\n        return ret;\n      }, comparator, substitution);\n      return [\n        ...cols,\n        ...before,\n        newRow,\n        ...after\n      ];\n    };\n    const getElementFor = (row, column, section, withinSpan, example, comparator, substitution) => {\n      if (section === 'colgroup' || !withinSpan) {\n        const cell = getCell(row, example);\n        return elementnew(substitution(cell.element, comparator), true, false);\n      } else {\n        return getCell(row, column);\n      }\n    };\n    const insertColumnAt = (grid, index, example, comparator, substitution) => map$1(grid, row => {\n      const withinSpan = index > 0 && index < cellLength(row) && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n      const sub = getElementFor(row, index, row.section, withinSpan, example, comparator, substitution);\n      return addCell(row, index, sub);\n    });\n    const deleteColumnsAt = (grid, columns) => bind$2(grid, row => {\n      const existingCells = row.cells;\n      const cells = foldr(columns, (acc, column) => column >= 0 && column < acc.length ? acc.slice(0, column).concat(acc.slice(column + 1)) : acc, existingCells);\n      return cells.length > 0 ? [rowcells(row.element, cells, row.section, row.isNew)] : [];\n    });\n    const deleteRowsAt = (grid, start, finish) => {\n      const {rows, cols} = extractGridDetails(grid);\n      return [\n        ...cols,\n        ...rows.slice(0, start),\n        ...rows.slice(finish + 1)\n      ];\n    };\n\n    const notInStartRow = (grid, rowIndex, colIndex, comparator) => getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(getCellElement(grid[rowIndex - 1], colIndex), getCellElement(grid[rowIndex], colIndex)));\n    const notInStartColumn = (row, index, comparator) => index > 0 && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n    const isDuplicatedCell = (grid, rowIndex, colIndex, comparator) => notInStartRow(grid, rowIndex, colIndex, comparator) || notInStartColumn(grid[rowIndex], colIndex, comparator);\n    const rowReplacerPredicate = (targetRow, columnHeaders) => {\n      const entireTableIsHeader = forall(columnHeaders, identity) && isHeaderCells(targetRow.cells);\n      return entireTableIsHeader ? always : (cell, _rowIndex, colIndex) => {\n        const type = name(cell.element);\n        return !(type === 'th' && columnHeaders[colIndex]);\n      };\n    };\n    const columnReplacePredicate = (targetColumn, rowHeaders) => {\n      const entireTableIsHeader = forall(rowHeaders, identity) && isHeaderCells(targetColumn);\n      return entireTableIsHeader ? always : (cell, rowIndex, _colIndex) => {\n        const type = name(cell.element);\n        return !(type === 'th' && rowHeaders[rowIndex]);\n      };\n    };\n    const determineScope = (applyScope, cell, newScope, isInHeader) => {\n      const hasSpan = scope => scope === 'row' ? hasRowspan(cell) : hasColspan(cell);\n      const getScope = scope => hasSpan(scope) ? `${ scope }group` : scope;\n      if (applyScope) {\n        return isHeaderCell(cell) ? getScope(newScope) : null;\n      } else if (isInHeader && isHeaderCell(cell)) {\n        const oppositeScope = newScope === 'row' ? 'col' : 'row';\n        return getScope(oppositeScope);\n      } else {\n        return null;\n      }\n    };\n    const rowScopeGenerator = (applyScope, columnHeaders) => (cell, rowIndex, columnIndex) => Optional.some(determineScope(applyScope, cell.element, 'col', columnHeaders[columnIndex]));\n    const columnScopeGenerator = (applyScope, rowHeaders) => (cell, rowIndex) => Optional.some(determineScope(applyScope, cell.element, 'row', rowHeaders[rowIndex]));\n    const replace = (cell, comparator, substitute) => elementnew(substitute(cell.element, comparator), true, cell.isLocked);\n    const replaceIn = (grid, targets, comparator, substitute, replacer, genScope, shouldReplace) => {\n      const isTarget = cell => {\n        return exists(targets, target => {\n          return comparator(cell.element, target.element);\n        });\n      };\n      return map$1(grid, (row, rowIndex) => {\n        return mapCells(row, (cell, colIndex) => {\n          if (isTarget(cell)) {\n            const newCell = shouldReplace(cell, rowIndex, colIndex) ? replacer(cell, comparator, substitute) : cell;\n            genScope(newCell, rowIndex, colIndex).each(scope => {\n              setOptions(newCell.element, { scope: Optional.from(scope) });\n            });\n            return newCell;\n          } else {\n            return cell;\n          }\n        });\n      });\n    };\n    const getColumnCells = (rows, columnIndex, comparator) => bind$2(rows, (row, i) => {\n      return isDuplicatedCell(rows, i, columnIndex, comparator) ? [] : [getCell(row, columnIndex)];\n    });\n    const getRowCells = (rows, rowIndex, comparator) => {\n      const targetRow = rows[rowIndex];\n      return bind$2(targetRow.cells, (item, i) => {\n        return isDuplicatedCell(rows, rowIndex, i, comparator) ? [] : [item];\n      });\n    };\n    const replaceColumns = (grid, indexes, applyScope, comparator, substitution) => {\n      const rows = extractGridDetails(grid).rows;\n      const targets = bind$2(indexes, index => getColumnCells(rows, index, comparator));\n      const rowHeaders = map$1(rows, row => isHeaderCells(row.cells));\n      const shouldReplaceCell = columnReplacePredicate(targets, rowHeaders);\n      const scopeGenerator = columnScopeGenerator(applyScope, rowHeaders);\n      return replaceIn(grid, targets, comparator, substitution, replace, scopeGenerator, shouldReplaceCell);\n    };\n    const replaceRows = (grid, indexes, section, applyScope, comparator, substitution, tableSection) => {\n      const {cols, rows} = extractGridDetails(grid);\n      const targetRow = rows[indexes[0]];\n      const targets = bind$2(indexes, index => getRowCells(rows, index, comparator));\n      const columnHeaders = map$1(targetRow.cells, (_cell, index) => isHeaderCells(getColumnCells(rows, index, comparator)));\n      const newRows = [...rows];\n      each$2(indexes, index => {\n        newRows[index] = tableSection.transformRow(rows[index], section);\n      });\n      const newGrid = [\n        ...cols,\n        ...newRows\n      ];\n      const shouldReplaceCell = rowReplacerPredicate(targetRow, columnHeaders);\n      const scopeGenerator = rowScopeGenerator(applyScope, columnHeaders);\n      return replaceIn(newGrid, targets, comparator, substitution, tableSection.transformCell, scopeGenerator, shouldReplaceCell);\n    };\n    const replaceCells = (grid, details, comparator, substitution) => {\n      const rows = extractGridDetails(grid).rows;\n      const targetCells = map$1(details, detail => getCell(rows[detail.row], detail.column));\n      return replaceIn(grid, targetCells, comparator, substitution, replace, Optional.none, always);\n    };\n\n    const generate = cases => {\n      if (!isArray(cases)) {\n        throw new Error('cases must be an array');\n      }\n      if (cases.length === 0) {\n        throw new Error('there must be at least one case');\n      }\n      const constructors = [];\n      const adt = {};\n      each$2(cases, (acase, count) => {\n        const keys$1 = keys(acase);\n        if (keys$1.length !== 1) {\n          throw new Error('one and only one name per case');\n        }\n        const key = keys$1[0];\n        const value = acase[key];\n        if (adt[key] !== undefined) {\n          throw new Error('duplicate key detected:' + key);\n        } else if (key === 'cata') {\n          throw new Error('cannot have a case named cata (sorry)');\n        } else if (!isArray(value)) {\n          throw new Error('case arguments must be an array');\n        }\n        constructors.push(key);\n        adt[key] = (...args) => {\n          const argLength = args.length;\n          if (argLength !== value.length) {\n            throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n          }\n          const match = branches => {\n            const branchKeys = keys(branches);\n            if (constructors.length !== branchKeys.length) {\n              throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n            }\n            const allReqd = forall(constructors, reqKey => {\n              return contains$2(branchKeys, reqKey);\n            });\n            if (!allReqd) {\n              throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n            }\n            return branches[key].apply(null, args);\n          };\n          return {\n            fold: (...foldArgs) => {\n              if (foldArgs.length !== cases.length) {\n                throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n              }\n              const target = foldArgs[count];\n              return target.apply(null, args);\n            },\n            match,\n            log: label => {\n              console.log(label, {\n                constructors,\n                constructor: key,\n                params: args\n              });\n            }\n          };\n        };\n      });\n      return adt;\n    };\n    const Adt = { generate };\n\n    const adt$6 = Adt.generate([\n      { none: [] },\n      { only: ['index'] },\n      {\n        left: [\n          'index',\n          'next'\n        ]\n      },\n      {\n        middle: [\n          'prev',\n          'index',\n          'next'\n        ]\n      },\n      {\n        right: [\n          'prev',\n          'index'\n        ]\n      }\n    ]);\n    const ColumnContext = { ...adt$6 };\n\n    const neighbours = (input, index) => {\n      if (input.length === 0) {\n        return ColumnContext.none();\n      }\n      if (input.length === 1) {\n        return ColumnContext.only(0);\n      }\n      if (index === 0) {\n        return ColumnContext.left(0, 1);\n      }\n      if (index === input.length - 1) {\n        return ColumnContext.right(index - 1, index);\n      }\n      if (index > 0 && index < input.length - 1) {\n        return ColumnContext.middle(index - 1, index, index + 1);\n      }\n      return ColumnContext.none();\n    };\n    const determine = (input, column, step, tableSize, resize) => {\n      const result = input.slice(0);\n      const context = neighbours(input, column);\n      const onNone = constant(map$1(result, constant(0)));\n      const onOnly = index => tableSize.singleColumnWidth(result[index], step);\n      const onLeft = (index, next) => resize.calcLeftEdgeDeltas(result, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n      const onMiddle = (prev, index, next) => resize.calcMiddleDeltas(result, prev, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n      const onRight = (prev, index) => resize.calcRightEdgeDeltas(result, prev, index, step, tableSize.minCellWidth(), tableSize.isRelative);\n      return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n    };\n\n    const total = (start, end, measures) => {\n      let r = 0;\n      for (let i = start; i < end; i++) {\n        r += measures[i] !== undefined ? measures[i] : 0;\n      }\n      return r;\n    };\n    const recalculateWidthForCells = (warehouse, widths) => {\n      const all = Warehouse.justCells(warehouse);\n      return map$1(all, cell => {\n        const width = total(cell.column, cell.column + cell.colspan, widths);\n        return {\n          element: cell.element,\n          width,\n          colspan: cell.colspan\n        };\n      });\n    };\n    const recalculateWidthForColumns = (warehouse, widths) => {\n      const groups = Warehouse.justColumns(warehouse);\n      return map$1(groups, (column, index) => ({\n        element: column.element,\n        width: widths[index],\n        colspan: column.colspan\n      }));\n    };\n    const recalculateHeightForCells = (warehouse, heights) => {\n      const all = Warehouse.justCells(warehouse);\n      return map$1(all, cell => {\n        const height = total(cell.row, cell.row + cell.rowspan, heights);\n        return {\n          element: cell.element,\n          height,\n          rowspan: cell.rowspan\n        };\n      });\n    };\n    const matchRowHeight = (warehouse, heights) => {\n      return map$1(warehouse.all, (row, i) => {\n        return {\n          element: row.element,\n          height: heights[i]\n        };\n      });\n    };\n\n    const sumUp = newSize => foldr(newSize, (b, a) => b + a, 0);\n    const recalculate = (warehouse, widths) => {\n      if (Warehouse.hasColumns(warehouse)) {\n        return recalculateWidthForColumns(warehouse, widths);\n      } else {\n        return recalculateWidthForCells(warehouse, widths);\n      }\n    };\n    const recalculateAndApply = (warehouse, widths, tableSize) => {\n      const newSizes = recalculate(warehouse, widths);\n      each$2(newSizes, cell => {\n        tableSize.setElementWidth(cell.element, cell.width);\n      });\n    };\n    const adjustWidth = (table, delta, index, resizing, tableSize) => {\n      const warehouse = Warehouse.fromTable(table);\n      const step = tableSize.getCellDelta(delta);\n      const widths = tableSize.getWidths(warehouse, tableSize);\n      const isLastColumn = index === warehouse.grid.columns - 1;\n      const clampedStep = resizing.clampTableDelta(widths, index, step, tableSize.minCellWidth(), isLastColumn);\n      const deltas = determine(widths, index, clampedStep, tableSize, resizing);\n      const newWidths = map$1(deltas, (dx, i) => dx + widths[i]);\n      recalculateAndApply(warehouse, newWidths, tableSize);\n      resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn);\n    };\n    const adjustHeight = (table, delta, index, direction) => {\n      const warehouse = Warehouse.fromTable(table);\n      const heights = getPixelHeights(warehouse, table, direction);\n      const newHeights = map$1(heights, (dy, i) => index === i ? Math.max(delta + dy, minHeight()) : dy);\n      const newCellSizes = recalculateHeightForCells(warehouse, newHeights);\n      const newRowSizes = matchRowHeight(warehouse, newHeights);\n      each$2(newRowSizes, row => {\n        setHeight(row.element, row.height);\n      });\n      each$2(newCellSizes, cell => {\n        setHeight(cell.element, cell.height);\n      });\n      const total = sumUp(newHeights);\n      setHeight(table, total);\n    };\n    const adjustAndRedistributeWidths$1 = (_table, list, details, tableSize, resizeBehaviour) => {\n      const warehouse = Warehouse.generate(list);\n      const sizes = tableSize.getWidths(warehouse, tableSize);\n      const tablePixelWidth = tableSize.pixelWidth();\n      const {newSizes, delta} = resizeBehaviour.calcRedestributedWidths(sizes, tablePixelWidth, details.pixelDelta, tableSize.isRelative);\n      recalculateAndApply(warehouse, newSizes, tableSize);\n      tableSize.adjustTableWidth(delta);\n    };\n    const adjustWidthTo = (_table, list, _info, tableSize) => {\n      const warehouse = Warehouse.generate(list);\n      const widths = tableSize.getWidths(warehouse, tableSize);\n      recalculateAndApply(warehouse, widths, tableSize);\n    };\n\n    const uniqueColumns = details => {\n      const uniqueCheck = (rest, detail) => {\n        const columnExists = exists(rest, currentDetail => currentDetail.column === detail.column);\n        return columnExists ? rest : rest.concat([detail]);\n      };\n      return foldl(details, uniqueCheck, []).sort((detailA, detailB) => detailA.column - detailB.column);\n    };\n\n    const isCol = isTag('col');\n    const isColgroup = isTag('colgroup');\n    const isRow$1 = element => name(element) === 'tr' || isColgroup(element);\n    const elementToData = element => {\n      const colspan = getAttrValue(element, 'colspan', 1);\n      const rowspan = getAttrValue(element, 'rowspan', 1);\n      return {\n        element,\n        colspan,\n        rowspan\n      };\n    };\n    const modification = (generators, toData = elementToData) => {\n      const nuCell = data => isCol(data.element) ? generators.col(data) : generators.cell(data);\n      const nuRow = data => isColgroup(data.element) ? generators.colgroup(data) : generators.row(data);\n      const add = element => {\n        if (isRow$1(element)) {\n          return nuRow({ element });\n        } else {\n          const cell = element;\n          const replacement = nuCell(toData(cell));\n          recent = Optional.some({\n            item: cell,\n            replacement\n          });\n          return replacement;\n        }\n      };\n      let recent = Optional.none();\n      const getOrInit = (element, comparator) => {\n        return recent.fold(() => {\n          return add(element);\n        }, p => {\n          return comparator(element, p.item) ? p.replacement : add(element);\n        });\n      };\n      return { getOrInit };\n    };\n    const transform$1 = tag => {\n      return generators => {\n        const list = [];\n        const find = (element, comparator) => {\n          return find$1(list, x => {\n            return comparator(x.item, element);\n          });\n        };\n        const makeNew = element => {\n          const attrs = tag === 'td' ? { scope: null } : {};\n          const cell = generators.replace(element, tag, attrs);\n          list.push({\n            item: element,\n            sub: cell\n          });\n          return cell;\n        };\n        const replaceOrInit = (element, comparator) => {\n          if (isRow$1(element) || isCol(element)) {\n            return element;\n          } else {\n            const cell = element;\n            return find(cell, comparator).fold(() => {\n              return makeNew(cell);\n            }, p => {\n              return comparator(element, p.item) ? p.sub : makeNew(cell);\n            });\n          }\n        };\n        return { replaceOrInit };\n      };\n    };\n    const getScopeAttribute = cell => getOpt(cell, 'scope').map(attribute => attribute.substr(0, 3));\n    const merging = generators => {\n      const unmerge = cell => {\n        const scope = getScopeAttribute(cell);\n        scope.each(attribute => set$2(cell, 'scope', attribute));\n        return () => {\n          const raw = generators.cell({\n            element: cell,\n            colspan: 1,\n            rowspan: 1\n          });\n          remove$5(raw, 'width');\n          remove$5(cell, 'width');\n          scope.each(attribute => set$2(raw, 'scope', attribute));\n          return raw;\n        };\n      };\n      const merge = cells => {\n        const getScopeProperty = () => {\n          const stringAttributes = cat(map$1(cells, getScopeAttribute));\n          if (stringAttributes.length === 0) {\n            return Optional.none();\n          } else {\n            const baseScope = stringAttributes[0];\n            const scopes = [\n              'row',\n              'col'\n            ];\n            const isMixed = exists(stringAttributes, attribute => {\n              return attribute !== baseScope && contains$2(scopes, attribute);\n            });\n            return isMixed ? Optional.none() : Optional.from(baseScope);\n          }\n        };\n        remove$5(cells[0], 'width');\n        getScopeProperty().fold(() => remove$7(cells[0], 'scope'), attribute => set$2(cells[0], 'scope', attribute + 'group'));\n        return constant(cells[0]);\n      };\n      return {\n        unmerge,\n        merge\n      };\n    };\n    const Generators = {\n      modification,\n      transform: transform$1,\n      merging\n    };\n\n    const blockList = [\n      'body',\n      'p',\n      'div',\n      'article',\n      'aside',\n      'figcaption',\n      'figure',\n      'footer',\n      'header',\n      'nav',\n      'section',\n      'ol',\n      'ul',\n      'table',\n      'thead',\n      'tfoot',\n      'tbody',\n      'caption',\n      'tr',\n      'td',\n      'th',\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'blockquote',\n      'pre',\n      'address'\n    ];\n    const isList$1 = (universe, item) => {\n      const tagName = universe.property().name(item);\n      return contains$2([\n        'ol',\n        'ul'\n      ], tagName);\n    };\n    const isBlock$1 = (universe, item) => {\n      const tagName = universe.property().name(item);\n      return contains$2(blockList, tagName);\n    };\n    const isEmptyTag$1 = (universe, item) => {\n      return contains$2([\n        'br',\n        'img',\n        'hr',\n        'input'\n      ], universe.property().name(item));\n    };\n\n    const universe$1 = DomUniverse();\n    const isBlock = element => {\n      return isBlock$1(universe$1, element);\n    };\n    const isList = element => {\n      return isList$1(universe$1, element);\n    };\n    const isEmptyTag = element => {\n      return isEmptyTag$1(universe$1, element);\n    };\n\n    const merge = cells => {\n      const isBr = isTag('br');\n      const advancedBr = children => {\n        return forall(children, c => {\n          return isBr(c) || isText(c) && get$6(c).trim().length === 0;\n        });\n      };\n      const isListItem = el => {\n        return name(el) === 'li' || ancestor$2(el, isList).isSome();\n      };\n      const siblingIsBlock = el => {\n        return nextSibling(el).map(rightSibling => {\n          if (isBlock(rightSibling)) {\n            return true;\n          }\n          if (isEmptyTag(rightSibling)) {\n            return name(rightSibling) === 'img' ? false : true;\n          }\n          return false;\n        }).getOr(false);\n      };\n      const markCell = cell => {\n        return last$1(cell).bind(rightEdge => {\n          const rightSiblingIsBlock = siblingIsBlock(rightEdge);\n          return parent(rightEdge).map(parent => {\n            return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || isBlock(parent) && !eq$1(cell, parent) ? [] : [SugarElement.fromTag('br')];\n          });\n        }).getOr([]);\n      };\n      const markContent = () => {\n        const content = bind$2(cells, cell => {\n          const children = children$2(cell);\n          return advancedBr(children) ? [] : children.concat(markCell(cell));\n        });\n        return content.length === 0 ? [SugarElement.fromTag('br')] : content;\n      };\n      const contents = markContent();\n      empty(cells[0]);\n      append(cells[0], contents);\n    };\n\n    const isEditable = elem => isEditable$1(elem, true);\n    const prune = table => {\n      const cells = cells$1(table);\n      if (cells.length === 0) {\n        remove$6(table);\n      }\n    };\n    const outcome = (grid, cursor) => ({\n      grid,\n      cursor\n    });\n    const findEditableCursorPosition = rows => findMap(rows, row => findMap(row.cells, cell => {\n      const elem = cell.element;\n      return someIf(isEditable(elem), elem);\n    }));\n    const elementFromGrid = (grid, row, column) => {\n      var _a, _b;\n      const rows = extractGridDetails(grid).rows;\n      return Optional.from((_b = (_a = rows[row]) === null || _a === void 0 ? void 0 : _a.cells[column]) === null || _b === void 0 ? void 0 : _b.element).filter(isEditable).orThunk(() => findEditableCursorPosition(rows));\n    };\n    const bundle = (grid, row, column) => {\n      const cursorElement = elementFromGrid(grid, row, column);\n      return outcome(grid, cursorElement);\n    };\n    const uniqueRows = details => {\n      const rowCompilation = (rest, detail) => {\n        const rowExists = exists(rest, currentDetail => currentDetail.row === detail.row);\n        return rowExists ? rest : rest.concat([detail]);\n      };\n      return foldl(details, rowCompilation, []).sort((detailA, detailB) => detailA.row - detailB.row);\n    };\n    const opInsertRowsBefore = (grid, details, comparator, genWrappers) => {\n      const targetIndex = details[0].row;\n      const rows = uniqueRows(details);\n      const newGrid = foldr(rows, (acc, row) => {\n        const newG = insertRowAt(acc.grid, targetIndex, row.row + acc.delta, comparator, genWrappers.getOrInit);\n        return {\n          grid: newG,\n          delta: acc.delta + 1\n        };\n      }, {\n        grid,\n        delta: 0\n      }).grid;\n      return bundle(newGrid, targetIndex, details[0].column);\n    };\n    const opInsertRowsAfter = (grid, details, comparator, genWrappers) => {\n      const rows = uniqueRows(details);\n      const target = rows[rows.length - 1];\n      const targetIndex = target.row + target.rowspan;\n      const newGrid = foldr(rows, (newG, row) => {\n        return insertRowAt(newG, targetIndex, row.row, comparator, genWrappers.getOrInit);\n      }, grid);\n      return bundle(newGrid, targetIndex, details[0].column);\n    };\n    const opInsertColumnsBefore = (grid, extractDetail, comparator, genWrappers) => {\n      const details = extractDetail.details;\n      const columns = uniqueColumns(details);\n      const targetIndex = columns[0].column;\n      const newGrid = foldr(columns, (acc, col) => {\n        const newG = insertColumnAt(acc.grid, targetIndex, col.column + acc.delta, comparator, genWrappers.getOrInit);\n        return {\n          grid: newG,\n          delta: acc.delta + 1\n        };\n      }, {\n        grid,\n        delta: 0\n      }).grid;\n      return bundle(newGrid, details[0].row, targetIndex);\n    };\n    const opInsertColumnsAfter = (grid, extractDetail, comparator, genWrappers) => {\n      const details = extractDetail.details;\n      const target = details[details.length - 1];\n      const targetIndex = target.column + target.colspan;\n      const columns = uniqueColumns(details);\n      const newGrid = foldr(columns, (newG, col) => {\n        return insertColumnAt(newG, targetIndex, col.column, comparator, genWrappers.getOrInit);\n      }, grid);\n      return bundle(newGrid, details[0].row, targetIndex);\n    };\n    const opMakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n      const columns = uniqueColumns(details);\n      const columnIndexes = map$1(columns, detail => detail.column);\n      const newGrid = replaceColumns(initialGrid, columnIndexes, true, comparator, genWrappers.replaceOrInit);\n      return bundle(newGrid, details[0].row, details[0].column);\n    };\n    const opMakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n      const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n      return bundle(newGrid, details[0].row, details[0].column);\n    };\n    const opUnmakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n      const columns = uniqueColumns(details);\n      const columnIndexes = map$1(columns, detail => detail.column);\n      const newGrid = replaceColumns(initialGrid, columnIndexes, false, comparator, genWrappers.replaceOrInit);\n      return bundle(newGrid, details[0].row, details[0].column);\n    };\n    const opUnmakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n      const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n      return bundle(newGrid, details[0].row, details[0].column);\n    };\n    const makeRowsSection = (section, applyScope) => (initialGrid, details, comparator, genWrappers, tableSection) => {\n      const rows = uniqueRows(details);\n      const rowIndexes = map$1(rows, detail => detail.row);\n      const newGrid = replaceRows(initialGrid, rowIndexes, section, applyScope, comparator, genWrappers.replaceOrInit, tableSection);\n      return bundle(newGrid, details[0].row, details[0].column);\n    };\n    const opMakeRowsHeader = makeRowsSection('thead', true);\n    const opMakeRowsBody = makeRowsSection('tbody', false);\n    const opMakeRowsFooter = makeRowsSection('tfoot', false);\n    const opEraseColumns = (grid, extractDetail, _comparator, _genWrappers) => {\n      const columns = uniqueColumns(extractDetail.details);\n      const newGrid = deleteColumnsAt(grid, map$1(columns, column => column.column));\n      const maxColIndex = newGrid.length > 0 ? newGrid[0].cells.length - 1 : 0;\n      return bundle(newGrid, columns[0].row, Math.min(columns[0].column, maxColIndex));\n    };\n    const opEraseRows = (grid, details, _comparator, _genWrappers) => {\n      const rows = uniqueRows(details);\n      const newGrid = deleteRowsAt(grid, rows[0].row, rows[rows.length - 1].row);\n      const maxRowIndex = newGrid.length > 0 ? newGrid.length - 1 : 0;\n      return bundle(newGrid, Math.min(details[0].row, maxRowIndex), details[0].column);\n    };\n    const opMergeCells = (grid, mergable, comparator, genWrappers) => {\n      const cells = mergable.cells;\n      merge(cells);\n      const newGrid = merge$2(grid, mergable.bounds, comparator, genWrappers.merge(cells));\n      return outcome(newGrid, Optional.from(cells[0]));\n    };\n    const opUnmergeCells = (grid, unmergable, comparator, genWrappers) => {\n      const unmerge$1 = (b, cell) => unmerge(b, cell, comparator, genWrappers.unmerge(cell));\n      const newGrid = foldr(unmergable, unmerge$1, grid);\n      return outcome(newGrid, Optional.from(unmergable[0]));\n    };\n    const opPasteCells = (grid, pasteDetails, comparator, _genWrappers) => {\n      const gridify = (table, generators) => {\n        const wh = Warehouse.fromTable(table);\n        return toGrid(wh, generators, true);\n      };\n      const gridB = gridify(pasteDetails.clipboard, pasteDetails.generators);\n      const startAddress = address(pasteDetails.row, pasteDetails.column);\n      const mergedGrid = merge$1(startAddress, grid, gridB, pasteDetails.generators, comparator);\n      return mergedGrid.fold(() => outcome(grid, Optional.some(pasteDetails.element)), newGrid => {\n        return bundle(newGrid, pasteDetails.row, pasteDetails.column);\n      });\n    };\n    const gridifyRows = (rows, generators, context) => {\n      const pasteDetails = fromPastedRows(rows, context.section);\n      const wh = Warehouse.generate(pasteDetails);\n      return toGrid(wh, generators, true);\n    };\n    const opPasteColsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n      const rows = extractGridDetails(grid).rows;\n      const index = pasteDetails.cells[0].column;\n      const context = rows[pasteDetails.cells[0].row];\n      const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n      const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n      return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n    };\n    const opPasteColsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n      const rows = extractGridDetails(grid).rows;\n      const index = pasteDetails.cells[pasteDetails.cells.length - 1].column + pasteDetails.cells[pasteDetails.cells.length - 1].colspan;\n      const context = rows[pasteDetails.cells[0].row];\n      const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n      const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n      return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n    };\n    const opPasteRowsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n      const rows = extractGridDetails(grid).rows;\n      const index = pasteDetails.cells[0].row;\n      const context = rows[index];\n      const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n      const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n      return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n    };\n    const opPasteRowsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n      const rows = extractGridDetails(grid).rows;\n      const index = pasteDetails.cells[pasteDetails.cells.length - 1].row + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan;\n      const context = rows[pasteDetails.cells[0].row];\n      const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n      const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n      return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n    };\n    const opGetColumnsType = (table, target) => {\n      const house = Warehouse.fromTable(table);\n      const details = onCells(house, target);\n      return details.bind(selectedCells => {\n        const lastSelectedCell = selectedCells[selectedCells.length - 1];\n        const minColRange = selectedCells[0].column;\n        const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n        const selectedColumnCells = flatten(map$1(house.all, row => filter$2(row.cells, cell => cell.column >= minColRange && cell.column < maxColRange)));\n        return findCommonCellType(selectedColumnCells);\n      }).getOr('');\n    };\n    const opGetCellsType = (table, target) => {\n      const house = Warehouse.fromTable(table);\n      const details = onCells(house, target);\n      return details.bind(findCommonCellType).getOr('');\n    };\n    const opGetRowsType = (table, target) => {\n      const house = Warehouse.fromTable(table);\n      const details = onCells(house, target);\n      return details.bind(selectedCells => {\n        const lastSelectedCell = selectedCells[selectedCells.length - 1];\n        const minRowRange = selectedCells[0].row;\n        const maxRowRange = lastSelectedCell.row + lastSelectedCell.rowspan;\n        const selectedRows = house.all.slice(minRowRange, maxRowRange);\n        return findCommonRowType(selectedRows);\n      }).getOr('');\n    };\n    const resize = (table, list, details, behaviours) => adjustWidthTo(table, list, details, behaviours.sizing);\n    const adjustAndRedistributeWidths = (table, list, details, behaviours) => adjustAndRedistributeWidths$1(table, list, details, behaviours.sizing, behaviours.resize);\n    const firstColumnIsLocked = (_warehouse, details) => exists(details, detail => detail.column === 0 && detail.isLocked);\n    const lastColumnIsLocked = (warehouse, details) => exists(details, detail => detail.column + detail.colspan >= warehouse.grid.columns && detail.isLocked);\n    const getColumnsWidth = (warehouse, details) => {\n      const columns$1 = columns(warehouse);\n      const uniqueCols = uniqueColumns(details);\n      return foldl(uniqueCols, (acc, detail) => {\n        const column = columns$1[detail.column];\n        const colWidth = column.map(getOuter$2).getOr(0);\n        return acc + colWidth;\n      }, 0);\n    };\n    const insertColumnsExtractor = before => (warehouse, target) => onCells(warehouse, target).filter(details => {\n      const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n      return !checkLocked(warehouse, details);\n    }).map(details => ({\n      details,\n      pixelDelta: getColumnsWidth(warehouse, details)\n    }));\n    const eraseColumnsExtractor = (warehouse, target) => onUnlockedCells(warehouse, target).map(details => ({\n      details,\n      pixelDelta: -getColumnsWidth(warehouse, details)\n    }));\n    const pasteColumnsExtractor = before => (warehouse, target) => onPasteByEditor(warehouse, target).filter(details => {\n      const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n      return !checkLocked(warehouse, details.cells);\n    });\n    const headerCellGenerator = Generators.transform('th');\n    const bodyCellGenerator = Generators.transform('td');\n    const insertRowsBefore = run(opInsertRowsBefore, onCells, noop, noop, Generators.modification);\n    const insertRowsAfter = run(opInsertRowsAfter, onCells, noop, noop, Generators.modification);\n    const insertColumnsBefore = run(opInsertColumnsBefore, insertColumnsExtractor(true), adjustAndRedistributeWidths, noop, Generators.modification);\n    const insertColumnsAfter = run(opInsertColumnsAfter, insertColumnsExtractor(false), adjustAndRedistributeWidths, noop, Generators.modification);\n    const eraseColumns = run(opEraseColumns, eraseColumnsExtractor, adjustAndRedistributeWidths, prune, Generators.modification);\n    const eraseRows = run(opEraseRows, onCells, noop, prune, Generators.modification);\n    const makeColumnsHeader = run(opMakeColumnsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n    const unmakeColumnsHeader = run(opUnmakeColumnsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n    const makeRowsHeader = run(opMakeRowsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n    const makeRowsBody = run(opMakeRowsBody, onUnlockedCells, noop, noop, bodyCellGenerator);\n    const makeRowsFooter = run(opMakeRowsFooter, onUnlockedCells, noop, noop, bodyCellGenerator);\n    const makeCellsHeader = run(opMakeCellsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n    const unmakeCellsHeader = run(opUnmakeCellsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n    const mergeCells = run(opMergeCells, onUnlockedMergable, resize, noop, Generators.merging);\n    const unmergeCells = run(opUnmergeCells, onUnlockedUnmergable, resize, noop, Generators.merging);\n    const pasteCells = run(opPasteCells, onPaste, resize, noop, Generators.modification);\n    const pasteColsBefore = run(opPasteColsBefore, pasteColumnsExtractor(true), noop, noop, Generators.modification);\n    const pasteColsAfter = run(opPasteColsAfter, pasteColumnsExtractor(false), noop, noop, Generators.modification);\n    const pasteRowsBefore = run(opPasteRowsBefore, onPasteByEditor, noop, noop, Generators.modification);\n    const pasteRowsAfter = run(opPasteRowsAfter, onPasteByEditor, noop, noop, Generators.modification);\n    const getColumnsType = opGetColumnsType;\n    const getCellsType = opGetCellsType;\n    const getRowsType = opGetRowsType;\n\n    const fireNewRow = (editor, row) => editor.dispatch('NewRow', { node: row });\n    const fireNewCell = (editor, cell) => editor.dispatch('NewCell', { node: cell });\n    const fireTableModified = (editor, table, data) => {\n      editor.dispatch('TableModified', {\n        ...data,\n        table\n      });\n    };\n    const fireTableSelectionChange = (editor, cells, start, finish, otherCells) => {\n      editor.dispatch('TableSelectionChange', {\n        cells,\n        start,\n        finish,\n        otherCells\n      });\n    };\n    const fireTableSelectionClear = editor => {\n      editor.dispatch('TableSelectionClear');\n    };\n    const fireObjectResizeStart = (editor, target, width, height, origin) => {\n      editor.dispatch('ObjectResizeStart', {\n        target,\n        width,\n        height,\n        origin\n      });\n    };\n    const fireObjectResized = (editor, target, width, height, origin) => {\n      editor.dispatch('ObjectResized', {\n        target,\n        width,\n        height,\n        origin\n      });\n    };\n    const styleModified = {\n      structure: false,\n      style: true\n    };\n    const structureModified = {\n      structure: true,\n      style: false\n    };\n    const styleAndStructureModified = {\n      structure: true,\n      style: true\n    };\n\n    const option = name => editor => editor.options.get(name);\n    const defaultWidth = '100%';\n    const getPixelForcedWidth = editor => {\n      var _a;\n      const dom = editor.dom;\n      const parentBlock = (_a = dom.getParent(editor.selection.getStart(), dom.isBlock)) !== null && _a !== void 0 ? _a : editor.getBody();\n      return getInner(SugarElement.fromDom(parentBlock)) + 'px';\n    };\n    const determineDefaultTableStyles = (editor, defaultStyles) => {\n      if (isTableResponsiveForced(editor) || !shouldStyleWithCss(editor)) {\n        return defaultStyles;\n      } else if (isTablePixelsForced(editor)) {\n        return {\n          ...defaultStyles,\n          width: getPixelForcedWidth(editor)\n        };\n      } else {\n        return {\n          ...defaultStyles,\n          width: defaultWidth\n        };\n      }\n    };\n    const determineDefaultTableAttributes = (editor, defaultAttributes) => {\n      if (isTableResponsiveForced(editor) || shouldStyleWithCss(editor)) {\n        return defaultAttributes;\n      } else if (isTablePixelsForced(editor)) {\n        return {\n          ...defaultAttributes,\n          width: getPixelForcedWidth(editor)\n        };\n      } else {\n        return {\n          ...defaultAttributes,\n          width: defaultWidth\n        };\n      }\n    };\n    const register = editor => {\n      const registerOption = editor.options.register;\n      registerOption('table_clone_elements', { processor: 'string[]' });\n      registerOption('table_use_colgroups', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('table_header_type', {\n        processor: value => {\n          const valid = contains$2([\n            'section',\n            'cells',\n            'sectionCells',\n            'auto'\n          ], value);\n          return valid ? {\n            value,\n            valid\n          } : {\n            valid: false,\n            message: 'Must be one of: section, cells, sectionCells or auto.'\n          };\n        },\n        default: 'section'\n      });\n      registerOption('table_sizing_mode', {\n        processor: 'string',\n        default: 'auto'\n      });\n      registerOption('table_default_attributes', {\n        processor: 'object',\n        default: { border: '1' }\n      });\n      registerOption('table_default_styles', {\n        processor: 'object',\n        default: { 'border-collapse': 'collapse' }\n      });\n      registerOption('table_column_resizing', {\n        processor: value => {\n          const valid = contains$2([\n            'preservetable',\n            'resizetable'\n          ], value);\n          return valid ? {\n            value,\n            valid\n          } : {\n            valid: false,\n            message: 'Must be preservetable, or resizetable.'\n          };\n        },\n        default: 'preservetable'\n      });\n      registerOption('table_resize_bars', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('table_style_by_css', {\n        processor: 'boolean',\n        default: true\n      });\n    };\n    const getTableCloneElements = editor => {\n      return Optional.from(editor.options.get('table_clone_elements'));\n    };\n    const hasTableObjectResizing = editor => {\n      const objectResizing = editor.options.get('object_resizing');\n      return contains$2(objectResizing.split(','), 'table');\n    };\n    const getTableHeaderType = option('table_header_type');\n    const getTableColumnResizingBehaviour = option('table_column_resizing');\n    const isPreserveTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'preservetable';\n    const isResizeTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'resizetable';\n    const getTableSizingMode = option('table_sizing_mode');\n    const isTablePercentagesForced = editor => getTableSizingMode(editor) === 'relative';\n    const isTablePixelsForced = editor => getTableSizingMode(editor) === 'fixed';\n    const isTableResponsiveForced = editor => getTableSizingMode(editor) === 'responsive';\n    const hasTableResizeBars = option('table_resize_bars');\n    const shouldStyleWithCss = option('table_style_by_css');\n    const getTableDefaultAttributes = editor => {\n      const options = editor.options;\n      const defaultAttributes = options.get('table_default_attributes');\n      return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultTableAttributes(editor, defaultAttributes);\n    };\n    const getTableDefaultStyles = editor => {\n      const options = editor.options;\n      const defaultStyles = options.get('table_default_styles');\n      return options.isSet('table_default_styles') ? defaultStyles : determineDefaultTableStyles(editor, defaultStyles);\n    };\n    const tableUseColumnGroup = option('table_use_colgroups');\n\n    const get$5 = (editor, table) => {\n      if (isTablePercentagesForced(editor)) {\n        return TableSize.percentageSize(table);\n      } else if (isTablePixelsForced(editor)) {\n        return TableSize.pixelSize(table);\n      } else {\n        return TableSize.getTableSize(table);\n      }\n    };\n\n    const TableActions = (editor, resizeHandler, cellSelectionHandler) => {\n      const isTableBody = editor => name(getBody(editor)) === 'table';\n      const lastRowGuard = table => !isTableBody(editor) || getGridSize(table).rows > 1;\n      const lastColumnGuard = table => !isTableBody(editor) || getGridSize(table).columns > 1;\n      const cloneFormats = getTableCloneElements(editor);\n      const colMutationOp = isResizeTableColumnResizing(editor) ? noop : halve;\n      const getTableSectionType = table => {\n        switch (getTableHeaderType(editor)) {\n        case 'section':\n          return TableSection.section();\n        case 'sectionCells':\n          return TableSection.sectionCells();\n        case 'cells':\n          return TableSection.cells();\n        default:\n          return TableSection.getTableSectionType(table, 'section');\n        }\n      };\n      const setSelectionFromAction = (table, result) => result.cursor.fold(() => {\n        const cells = cells$1(table);\n        return head(cells).filter(inBody).map(firstCell => {\n          cellSelectionHandler.clearSelectedCells(table.dom);\n          const rng = editor.dom.createRng();\n          rng.selectNode(firstCell.dom);\n          editor.selection.setRng(rng);\n          set$2(firstCell, 'data-mce-selected', '1');\n          return rng;\n        });\n      }, cell => {\n        const des = freefallRtl(cell);\n        const rng = editor.dom.createRng();\n        rng.setStart(des.element.dom, des.offset);\n        rng.setEnd(des.element.dom, des.offset);\n        editor.selection.setRng(rng);\n        cellSelectionHandler.clearSelectedCells(table.dom);\n        return Optional.some(rng);\n      });\n      const execute = (operation, guard, mutate, effect) => (table, target, noEvents = false) => {\n        removeDataStyle(table);\n        const doc = SugarElement.fromDom(editor.getDoc());\n        const generators = cellOperations(mutate, doc, cloneFormats);\n        const behaviours = {\n          sizing: get$5(editor, table),\n          resize: isResizeTableColumnResizing(editor) ? resizeTable() : preserveTable(),\n          section: getTableSectionType(table)\n        };\n        return guard(table) ? operation(table, target, generators, behaviours).bind(result => {\n          resizeHandler.refresh(table.dom);\n          each$2(result.newRows, row => {\n            fireNewRow(editor, row.dom);\n          });\n          each$2(result.newCells, cell => {\n            fireNewCell(editor, cell.dom);\n          });\n          const range = setSelectionFromAction(table, result);\n          if (inBody(table)) {\n            removeDataStyle(table);\n            if (!noEvents) {\n              fireTableModified(editor, table.dom, effect);\n            }\n          }\n          return range.map(rng => ({\n            rng,\n            effect\n          }));\n        }) : Optional.none();\n      };\n      const deleteRow = execute(eraseRows, lastRowGuard, noop, structureModified);\n      const deleteColumn = execute(eraseColumns, lastColumnGuard, noop, structureModified);\n      const insertRowsBefore$1 = execute(insertRowsBefore, always, noop, structureModified);\n      const insertRowsAfter$1 = execute(insertRowsAfter, always, noop, structureModified);\n      const insertColumnsBefore$1 = execute(insertColumnsBefore, always, colMutationOp, structureModified);\n      const insertColumnsAfter$1 = execute(insertColumnsAfter, always, colMutationOp, structureModified);\n      const mergeCells$1 = execute(mergeCells, always, noop, structureModified);\n      const unmergeCells$1 = execute(unmergeCells, always, noop, structureModified);\n      const pasteColsBefore$1 = execute(pasteColsBefore, always, noop, structureModified);\n      const pasteColsAfter$1 = execute(pasteColsAfter, always, noop, structureModified);\n      const pasteRowsBefore$1 = execute(pasteRowsBefore, always, noop, structureModified);\n      const pasteRowsAfter$1 = execute(pasteRowsAfter, always, noop, structureModified);\n      const pasteCells$1 = execute(pasteCells, always, noop, styleAndStructureModified);\n      const makeCellsHeader$1 = execute(makeCellsHeader, always, noop, structureModified);\n      const unmakeCellsHeader$1 = execute(unmakeCellsHeader, always, noop, structureModified);\n      const makeColumnsHeader$1 = execute(makeColumnsHeader, always, noop, structureModified);\n      const unmakeColumnsHeader$1 = execute(unmakeColumnsHeader, always, noop, structureModified);\n      const makeRowsHeader$1 = execute(makeRowsHeader, always, noop, structureModified);\n      const makeRowsBody$1 = execute(makeRowsBody, always, noop, structureModified);\n      const makeRowsFooter$1 = execute(makeRowsFooter, always, noop, structureModified);\n      const getTableCellType = getCellsType;\n      const getTableColType = getColumnsType;\n      const getTableRowType = getRowsType;\n      return {\n        deleteRow,\n        deleteColumn,\n        insertRowsBefore: insertRowsBefore$1,\n        insertRowsAfter: insertRowsAfter$1,\n        insertColumnsBefore: insertColumnsBefore$1,\n        insertColumnsAfter: insertColumnsAfter$1,\n        mergeCells: mergeCells$1,\n        unmergeCells: unmergeCells$1,\n        pasteColsBefore: pasteColsBefore$1,\n        pasteColsAfter: pasteColsAfter$1,\n        pasteRowsBefore: pasteRowsBefore$1,\n        pasteRowsAfter: pasteRowsAfter$1,\n        pasteCells: pasteCells$1,\n        makeCellsHeader: makeCellsHeader$1,\n        unmakeCellsHeader: unmakeCellsHeader$1,\n        makeColumnsHeader: makeColumnsHeader$1,\n        unmakeColumnsHeader: unmakeColumnsHeader$1,\n        makeRowsHeader: makeRowsHeader$1,\n        makeRowsBody: makeRowsBody$1,\n        makeRowsFooter: makeRowsFooter$1,\n        getTableRowType,\n        getTableCellType,\n        getTableColType\n      };\n    };\n\n    const constrainSpan = (element, property, value) => {\n      const currentColspan = getAttrValue(element, property, 1);\n      if (value === 1 || currentColspan <= 1) {\n        remove$7(element, property);\n      } else {\n        set$2(element, property, Math.min(value, currentColspan));\n      }\n    };\n    const isColInRange = (minColRange, maxColRange) => cell => {\n      const endCol = cell.column + cell.colspan - 1;\n      const startCol = cell.column;\n      return endCol >= minColRange && startCol < maxColRange;\n    };\n    const generateColGroup = (house, minColRange, maxColRange) => {\n      if (Warehouse.hasColumns(house)) {\n        const colsToCopy = filter$2(Warehouse.justColumns(house), isColInRange(minColRange, maxColRange));\n        const copiedCols = map$1(colsToCopy, c => {\n          const clonedCol = deep(c.element);\n          constrainSpan(clonedCol, 'span', maxColRange - minColRange);\n          return clonedCol;\n        });\n        const fakeColgroup = SugarElement.fromTag('colgroup');\n        append(fakeColgroup, copiedCols);\n        return [fakeColgroup];\n      } else {\n        return [];\n      }\n    };\n    const generateRows = (house, minColRange, maxColRange) => map$1(house.all, row => {\n      const cellsToCopy = filter$2(row.cells, isColInRange(minColRange, maxColRange));\n      const copiedCells = map$1(cellsToCopy, cell => {\n        const clonedCell = deep(cell.element);\n        constrainSpan(clonedCell, 'colspan', maxColRange - minColRange);\n        return clonedCell;\n      });\n      const fakeTR = SugarElement.fromTag('tr');\n      append(fakeTR, copiedCells);\n      return fakeTR;\n    });\n    const copyCols = (table, target) => {\n      const house = Warehouse.fromTable(table);\n      const details = onUnlockedCells(house, target);\n      return details.map(selectedCells => {\n        const lastSelectedCell = selectedCells[selectedCells.length - 1];\n        const minColRange = selectedCells[0].column;\n        const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n        const fakeColGroups = generateColGroup(house, minColRange, maxColRange);\n        const fakeRows = generateRows(house, minColRange, maxColRange);\n        return [\n          ...fakeColGroups,\n          ...fakeRows\n        ];\n      });\n    };\n\n    const copyRows = (table, target, generators) => {\n      const warehouse = Warehouse.fromTable(table);\n      const details = onCells(warehouse, target);\n      return details.bind(selectedCells => {\n        const grid = toGrid(warehouse, generators, false);\n        const rows = extractGridDetails(grid).rows;\n        const slicedGrid = rows.slice(selectedCells[0].row, selectedCells[selectedCells.length - 1].row + selectedCells[selectedCells.length - 1].rowspan);\n        const filteredGrid = bind$2(slicedGrid, row => {\n          const newCells = filter$2(row.cells, cell => !cell.isLocked);\n          return newCells.length > 0 ? [{\n              ...row,\n              cells: newCells\n            }] : [];\n        });\n        const slicedDetails = toDetailList(filteredGrid);\n        return someIf(slicedDetails.length > 0, slicedDetails);\n      }).map(slicedDetails => copy(slicedDetails));\n    };\n\n    const adt$5 = Adt.generate([\n      { invalid: ['raw'] },\n      { pixels: ['value'] },\n      { percent: ['value'] }\n    ]);\n    const validateFor = (suffix, type, value) => {\n      const rawAmount = value.substring(0, value.length - suffix.length);\n      const amount = parseFloat(rawAmount);\n      return rawAmount === amount.toString() ? type(amount) : adt$5.invalid(value);\n    };\n    const from = value => {\n      if (endsWith(value, '%')) {\n        return validateFor('%', adt$5.percent, value);\n      }\n      if (endsWith(value, 'px')) {\n        return validateFor('px', adt$5.pixels, value);\n      }\n      return adt$5.invalid(value);\n    };\n    const Size = {\n      ...adt$5,\n      from\n    };\n\n    const redistributeToPercent = (widths, totalWidth) => {\n      return map$1(widths, w => {\n        const colType = Size.from(w);\n        return colType.fold(() => {\n          return w;\n        }, px => {\n          const ratio = px / totalWidth * 100;\n          return ratio + '%';\n        }, pc => {\n          return pc + '%';\n        });\n      });\n    };\n    const redistributeToPx = (widths, totalWidth, newTotalWidth) => {\n      const scale = newTotalWidth / totalWidth;\n      return map$1(widths, w => {\n        const colType = Size.from(w);\n        return colType.fold(() => {\n          return w;\n        }, px => {\n          return px * scale + 'px';\n        }, pc => {\n          return pc / 100 * newTotalWidth + 'px';\n        });\n      });\n    };\n    const redistributeEmpty = (newWidthType, columns) => {\n      const f = newWidthType.fold(() => constant(''), pixels => {\n        const num = pixels / columns;\n        return constant(num + 'px');\n      }, () => {\n        const num = 100 / columns;\n        return constant(num + '%');\n      });\n      return range$1(columns, f);\n    };\n    const redistributeValues = (newWidthType, widths, totalWidth) => {\n      return newWidthType.fold(() => {\n        return widths;\n      }, px => {\n        return redistributeToPx(widths, totalWidth, px);\n      }, _pc => {\n        return redistributeToPercent(widths, totalWidth);\n      });\n    };\n    const redistribute$1 = (widths, totalWidth, newWidth) => {\n      const newType = Size.from(newWidth);\n      const floats = forall(widths, s => {\n        return s === '0px';\n      }) ? redistributeEmpty(newType, widths.length) : redistributeValues(newType, widths, totalWidth);\n      return normalize(floats);\n    };\n    const sum = (values, fallback) => {\n      if (values.length === 0) {\n        return fallback;\n      }\n      return foldr(values, (rest, v) => {\n        return Size.from(v).fold(constant(0), identity, identity) + rest;\n      }, 0);\n    };\n    const roundDown = (num, unit) => {\n      const floored = Math.floor(num);\n      return {\n        value: floored + unit,\n        remainder: num - floored\n      };\n    };\n    const add$3 = (value, amount) => {\n      return Size.from(value).fold(constant(value), px => {\n        return px + amount + 'px';\n      }, pc => {\n        return pc + amount + '%';\n      });\n    };\n    const normalize = values => {\n      if (values.length === 0) {\n        return values;\n      }\n      const scan = foldr(values, (rest, value) => {\n        const info = Size.from(value).fold(() => ({\n          value,\n          remainder: 0\n        }), num => roundDown(num, 'px'), num => ({\n          value: num + '%',\n          remainder: 0\n        }));\n        return {\n          output: [info.value].concat(rest.output),\n          remainder: rest.remainder + info.remainder\n        };\n      }, {\n        output: [],\n        remainder: 0\n      });\n      const r = scan.output;\n      return r.slice(0, r.length - 1).concat([add$3(r[r.length - 1], Math.round(scan.remainder))]);\n    };\n    const validate = Size.from;\n\n    const redistributeToW = (newWidths, cells, unit) => {\n      each$2(cells, cell => {\n        const widths = newWidths.slice(cell.column, cell.colspan + cell.column);\n        const w = sum(widths, minWidth());\n        set$1(cell.element, 'width', w + unit);\n      });\n    };\n    const redistributeToColumns = (newWidths, columns, unit) => {\n      each$2(columns, (column, index) => {\n        const width = sum([newWidths[index]], minWidth());\n        set$1(column.element, 'width', width + unit);\n      });\n    };\n    const redistributeToH = (newHeights, rows, cells, unit) => {\n      each$2(cells, cell => {\n        const heights = newHeights.slice(cell.row, cell.rowspan + cell.row);\n        const h = sum(heights, minHeight());\n        set$1(cell.element, 'height', h + unit);\n      });\n      each$2(rows, (row, i) => {\n        set$1(row.element, 'height', newHeights[i]);\n      });\n    };\n    const getUnit = newSize => {\n      return validate(newSize).fold(constant('px'), constant('px'), constant('%'));\n    };\n    const redistribute = (table, optWidth, optHeight) => {\n      const warehouse = Warehouse.fromTable(table);\n      const rows = warehouse.all;\n      const cells = Warehouse.justCells(warehouse);\n      const columns = Warehouse.justColumns(warehouse);\n      optWidth.each(newWidth => {\n        const widthUnit = getUnit(newWidth);\n        const totalWidth = get$9(table);\n        const oldWidths = getRawWidths(warehouse, table);\n        const nuWidths = redistribute$1(oldWidths, totalWidth, newWidth);\n        if (Warehouse.hasColumns(warehouse)) {\n          redistributeToColumns(nuWidths, columns, widthUnit);\n        } else {\n          redistributeToW(nuWidths, cells, widthUnit);\n        }\n        set$1(table, 'width', newWidth);\n      });\n      optHeight.each(newHeight => {\n        const hUnit = getUnit(newHeight);\n        const totalHeight = get$8(table);\n        const oldHeights = getRawHeights(warehouse, table, height);\n        const nuHeights = redistribute$1(oldHeights, totalHeight, newHeight);\n        redistributeToH(nuHeights, rows, cells, hUnit);\n        set$1(table, 'height', newHeight);\n      });\n    };\n    const isPercentSizing = isPercentSizing$1;\n    const isPixelSizing = isPixelSizing$1;\n    const isNoneSizing = isNoneSizing$1;\n\n    const cleanupLegacyAttributes = element => {\n      remove$7(element, 'width');\n    };\n    const convertToPercentSize = table => {\n      const newWidth = getPercentTableWidth(table);\n      redistribute(table, Optional.some(newWidth), Optional.none());\n      cleanupLegacyAttributes(table);\n    };\n    const convertToPixelSize = table => {\n      const newWidth = getPixelTableWidth(table);\n      redistribute(table, Optional.some(newWidth), Optional.none());\n      cleanupLegacyAttributes(table);\n    };\n    const convertToNoneSize = table => {\n      remove$5(table, 'width');\n      const columns = columns$1(table);\n      const rowElements = columns.length > 0 ? columns : cells$1(table);\n      each$2(rowElements, cell => {\n        remove$5(cell, 'width');\n        cleanupLegacyAttributes(cell);\n      });\n      cleanupLegacyAttributes(table);\n    };\n\n    const DefaultRenderOptions = {\n      styles: {\n        'border-collapse': 'collapse',\n        'width': '100%'\n      },\n      attributes: { border: '1' },\n      colGroups: false\n    };\n    const tableHeaderCell = () => SugarElement.fromTag('th');\n    const tableCell = () => SugarElement.fromTag('td');\n    const tableColumn = () => SugarElement.fromTag('col');\n    const createRow = (columns, rowHeaders, columnHeaders, rowIndex) => {\n      const tr = SugarElement.fromTag('tr');\n      for (let j = 0; j < columns; j++) {\n        const td = rowIndex < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n        if (j < columnHeaders) {\n          set$2(td, 'scope', 'row');\n        }\n        if (rowIndex < rowHeaders) {\n          set$2(td, 'scope', 'col');\n        }\n        append$1(td, SugarElement.fromTag('br'));\n        append$1(tr, td);\n      }\n      return tr;\n    };\n    const createGroupRow = columns => {\n      const columnGroup = SugarElement.fromTag('colgroup');\n      range$1(columns, () => append$1(columnGroup, tableColumn()));\n      return columnGroup;\n    };\n    const createRows = (rows, columns, rowHeaders, columnHeaders) => range$1(rows, r => createRow(columns, rowHeaders, columnHeaders, r));\n    const render = (rows, columns, rowHeaders, columnHeaders, headerType, renderOpts = DefaultRenderOptions) => {\n      const table = SugarElement.fromTag('table');\n      const rowHeadersGoInThead = headerType !== 'cells';\n      setAll(table, renderOpts.styles);\n      setAll$1(table, renderOpts.attributes);\n      if (renderOpts.colGroups) {\n        append$1(table, createGroupRow(columns));\n      }\n      const actualRowHeaders = Math.min(rows, rowHeaders);\n      if (rowHeadersGoInThead && rowHeaders > 0) {\n        const thead = SugarElement.fromTag('thead');\n        append$1(table, thead);\n        const theadRowHeaders = headerType === 'sectionCells' ? actualRowHeaders : 0;\n        const theadRows = createRows(rowHeaders, columns, theadRowHeaders, columnHeaders);\n        append(thead, theadRows);\n      }\n      const tbody = SugarElement.fromTag('tbody');\n      append$1(table, tbody);\n      const numRows = rowHeadersGoInThead ? rows - actualRowHeaders : rows;\n      const numRowHeaders = rowHeadersGoInThead ? 0 : rowHeaders;\n      const tbodyRows = createRows(numRows, columns, numRowHeaders, columnHeaders);\n      append(tbody, tbodyRows);\n      return table;\n    };\n\n    const get$4 = element => element.dom.innerHTML;\n    const getOuter = element => {\n      const container = SugarElement.fromTag('div');\n      const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n      append$1(container, clone);\n      return get$4(container);\n    };\n\n    const placeCaretInCell = (editor, cell) => {\n      editor.selection.select(cell.dom, true);\n      editor.selection.collapse(true);\n    };\n    const selectFirstCellInTable = (editor, tableElm) => {\n      descendant(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n    };\n    const fireEvents = (editor, table) => {\n      each$2(descendants(table, 'tr'), row => {\n        fireNewRow(editor, row.dom);\n        each$2(descendants(row, 'th,td'), cell => {\n          fireNewCell(editor, cell.dom);\n        });\n      });\n    };\n    const isPercentage = width => isString(width) && width.indexOf('%') !== -1;\n    const insert = (editor, columns, rows, colHeaders, rowHeaders) => {\n      const defaultStyles = getTableDefaultStyles(editor);\n      const options = {\n        styles: defaultStyles,\n        attributes: getTableDefaultAttributes(editor),\n        colGroups: tableUseColumnGroup(editor)\n      };\n      editor.undoManager.ignore(() => {\n        const table = render(rows, columns, rowHeaders, colHeaders, getTableHeaderType(editor), options);\n        set$2(table, 'data-mce-id', '__mce');\n        const html = getOuter(table);\n        editor.insertContent(html);\n        editor.addVisual();\n      });\n      return descendant(getBody(editor), 'table[data-mce-id=\"__mce\"]').map(table => {\n        if (isTablePixelsForced(editor)) {\n          convertToPixelSize(table);\n        } else if (isTableResponsiveForced(editor)) {\n          convertToNoneSize(table);\n        } else if (isTablePercentagesForced(editor) || isPercentage(defaultStyles.width)) {\n          convertToPercentSize(table);\n        }\n        removeDataStyle(table);\n        remove$7(table, 'data-mce-id');\n        fireEvents(editor, table);\n        selectFirstCellInTable(editor, table);\n        return table.dom;\n      }).getOrNull();\n    };\n    const insertTable = (editor, rows, columns, options = {}) => {\n      const checkInput = val => isNumber(val) && val > 0;\n      if (checkInput(rows) && checkInput(columns)) {\n        const headerRows = options.headerRows || 0;\n        const headerColumns = options.headerColumns || 0;\n        return insert(editor, columns, rows, headerColumns, headerRows);\n      } else {\n        console.error('Invalid values for mceInsertTable - rows and columns values are required to insert a table.');\n        return null;\n      }\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.FakeClipboard');\n\n    const tableTypeBase = 'x-tinymce/dom-table-';\n    const tableTypeRow = tableTypeBase + 'rows';\n    const tableTypeColumn = tableTypeBase + 'columns';\n    const setData = items => {\n      const fakeClipboardItem = global.FakeClipboardItem(items);\n      global.write([fakeClipboardItem]);\n    };\n    const getData = type => {\n      var _a;\n      const items = (_a = global.read()) !== null && _a !== void 0 ? _a : [];\n      return findMap(items, item => Optional.from(item.getType(type)));\n    };\n    const clearData = type => {\n      if (getData(type).isSome()) {\n        global.clear();\n      }\n    };\n    const setRows = rowsOpt => {\n      rowsOpt.fold(clearRows, rows => setData({ [tableTypeRow]: rows }));\n    };\n    const getRows = () => getData(tableTypeRow);\n    const clearRows = () => clearData(tableTypeRow);\n    const setColumns = columnsOpt => {\n      columnsOpt.fold(clearColumns, columns => setData({ [tableTypeColumn]: columns }));\n    };\n    const getColumns = () => getData(tableTypeColumn);\n    const clearColumns = () => clearData(tableTypeColumn);\n\n    const getSelectionStartCellOrCaption = editor => getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor));\n    const getSelectionStartCell = editor => getSelectionCell(getSelectionStart(editor), getIsRoot(editor));\n    const registerCommands = (editor, actions) => {\n      const isRoot = getIsRoot(editor);\n      const eraseTable = () => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n        table(cellOrCaption, isRoot).filter(not(isRoot)).each(table => {\n          const cursor = SugarElement.fromText('');\n          after$5(table, cursor);\n          remove$6(table);\n          if (editor.dom.isEmpty(editor.getBody())) {\n            editor.setContent('');\n            editor.selection.setCursorLocation();\n          } else {\n            const rng = editor.dom.createRng();\n            rng.setStart(cursor.dom, 0);\n            rng.setEnd(cursor.dom, 0);\n            editor.selection.setRng(rng);\n            editor.nodeChanged();\n          }\n        });\n      });\n      const setSizingMode = sizing => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n        const isForcedSizing = isTableResponsiveForced(editor) || isTablePixelsForced(editor) || isTablePercentagesForced(editor);\n        if (!isForcedSizing) {\n          table(cellOrCaption, isRoot).each(table => {\n            if (sizing === 'relative' && !isPercentSizing(table)) {\n              convertToPercentSize(table);\n            } else if (sizing === 'fixed' && !isPixelSizing(table)) {\n              convertToPixelSize(table);\n            } else if (sizing === 'responsive' && !isNoneSizing(table)) {\n              convertToNoneSize(table);\n            }\n            removeDataStyle(table);\n            fireTableModified(editor, table.dom, structureModified);\n          });\n        }\n      });\n      const getTableFromCell = cell => table(cell, isRoot);\n      const performActionOnSelection = action => getSelectionStartCell(editor).bind(cell => getTableFromCell(cell).map(table => action(table, cell)));\n      const toggleTableClass = (_ui, clazz) => {\n        performActionOnSelection(table => {\n          editor.formatter.toggle('tableclass', { value: clazz }, table.dom);\n          fireTableModified(editor, table.dom, styleModified);\n        });\n      };\n      const toggleTableCellClass = (_ui, clazz) => {\n        performActionOnSelection(table => {\n          const selectedCells = getCellsFromSelection(editor);\n          const allHaveClass = forall(selectedCells, cell => editor.formatter.match('tablecellclass', { value: clazz }, cell.dom));\n          const formatterAction = allHaveClass ? editor.formatter.remove : editor.formatter.apply;\n          each$2(selectedCells, cell => formatterAction('tablecellclass', { value: clazz }, cell.dom));\n          fireTableModified(editor, table.dom, styleModified);\n        });\n      };\n      const toggleCaption = () => {\n        getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n          table(cellOrCaption, isRoot).each(table => {\n            child(table, 'caption').fold(() => {\n              const caption = SugarElement.fromTag('caption');\n              append$1(caption, SugarElement.fromText('Caption'));\n              appendAt(table, caption, 0);\n              editor.selection.setCursorLocation(caption.dom, 0);\n            }, caption => {\n              if (isTag('caption')(cellOrCaption)) {\n                one('td', table).each(td => editor.selection.setCursorLocation(td.dom, 0));\n              }\n              remove$6(caption);\n            });\n            fireTableModified(editor, table.dom, structureModified);\n          });\n        });\n      };\n      const postExecute = _data => {\n        editor.focus();\n      };\n      const actOnSelection = (execute, noEvents = false) => performActionOnSelection((table, startCell) => {\n        const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n        execute(table, targets, noEvents).each(postExecute);\n      });\n      const copyRowSelection = () => performActionOnSelection((table, startCell) => {\n        const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n        const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), Optional.none());\n        return copyRows(table, targets, generators);\n      });\n      const copyColSelection = () => performActionOnSelection((table, startCell) => {\n        const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n        return copyCols(table, targets);\n      });\n      const pasteOnSelection = (execute, getRows) => getRows().each(rows => {\n        const clonedRows = map$1(rows, row => deep(row));\n        performActionOnSelection((table, startCell) => {\n          const generators = paste$1(SugarElement.fromDom(editor.getDoc()));\n          const targets = pasteRows(getCellsFromSelection(editor), startCell, clonedRows, generators);\n          execute(table, targets).each(postExecute);\n        });\n      });\n      const actOnType = getAction => (_ui, args) => get$c(args, 'type').each(type => {\n        actOnSelection(getAction(type), args.no_events);\n      });\n      each$1({\n        mceTableSplitCells: () => actOnSelection(actions.unmergeCells),\n        mceTableMergeCells: () => actOnSelection(actions.mergeCells),\n        mceTableInsertRowBefore: () => actOnSelection(actions.insertRowsBefore),\n        mceTableInsertRowAfter: () => actOnSelection(actions.insertRowsAfter),\n        mceTableInsertColBefore: () => actOnSelection(actions.insertColumnsBefore),\n        mceTableInsertColAfter: () => actOnSelection(actions.insertColumnsAfter),\n        mceTableDeleteCol: () => actOnSelection(actions.deleteColumn),\n        mceTableDeleteRow: () => actOnSelection(actions.deleteRow),\n        mceTableCutCol: () => copyColSelection().each(selection => {\n          setColumns(selection);\n          actOnSelection(actions.deleteColumn);\n        }),\n        mceTableCutRow: () => copyRowSelection().each(selection => {\n          setRows(selection);\n          actOnSelection(actions.deleteRow);\n        }),\n        mceTableCopyCol: () => copyColSelection().each(selection => setColumns(selection)),\n        mceTableCopyRow: () => copyRowSelection().each(selection => setRows(selection)),\n        mceTablePasteColBefore: () => pasteOnSelection(actions.pasteColsBefore, getColumns),\n        mceTablePasteColAfter: () => pasteOnSelection(actions.pasteColsAfter, getColumns),\n        mceTablePasteRowBefore: () => pasteOnSelection(actions.pasteRowsBefore, getRows),\n        mceTablePasteRowAfter: () => pasteOnSelection(actions.pasteRowsAfter, getRows),\n        mceTableDelete: eraseTable,\n        mceTableCellToggleClass: toggleTableCellClass,\n        mceTableToggleClass: toggleTableClass,\n        mceTableToggleCaption: toggleCaption,\n        mceTableSizingMode: (_ui, sizing) => setSizingMode(sizing),\n        mceTableCellType: actOnType(type => type === 'th' ? actions.makeCellsHeader : actions.unmakeCellsHeader),\n        mceTableColType: actOnType(type => type === 'th' ? actions.makeColumnsHeader : actions.unmakeColumnsHeader),\n        mceTableRowType: actOnType(type => {\n          switch (type) {\n          case 'header':\n            return actions.makeRowsHeader;\n          case 'footer':\n            return actions.makeRowsFooter;\n          default:\n            return actions.makeRowsBody;\n          }\n        })\n      }, (func, name) => editor.addCommand(name, func));\n      editor.addCommand('mceInsertTable', (_ui, args) => {\n        insertTable(editor, args.rows, args.columns, args.options);\n      });\n      editor.addCommand('mceTableApplyCellStyle', (_ui, args) => {\n        const getFormatName = style => 'tablecell' + style.toLowerCase().replace('-', '');\n        if (!isObject(args)) {\n          return;\n        }\n        const cells = getCellsFromSelection(editor);\n        if (cells.length === 0) {\n          return;\n        }\n        const validArgs = filter$1(args, (value, style) => editor.formatter.has(getFormatName(style)) && isString(value));\n        if (isEmpty(validArgs)) {\n          return;\n        }\n        each$1(validArgs, (value, style) => {\n          const formatName = getFormatName(style);\n          each$2(cells, cell => {\n            if (value === '') {\n              editor.formatter.remove(formatName, { value: null }, cell.dom, true);\n            } else {\n              editor.formatter.apply(formatName, { value }, cell.dom);\n            }\n          });\n        });\n        getTableFromCell(cells[0]).each(table => fireTableModified(editor, table.dom, styleModified));\n      });\n    };\n\n    const registerQueryCommands = (editor, actions) => {\n      const isRoot = getIsRoot(editor);\n      const lookupOnSelection = action => getSelectionCell(getSelectionStart(editor)).bind(cell => table(cell, isRoot).map(table => {\n        const targets = forMenu(getCellsFromSelection(editor), table, cell);\n        return action(table, targets);\n      })).getOr('');\n      each$1({\n        mceTableRowType: () => lookupOnSelection(actions.getTableRowType),\n        mceTableCellType: () => lookupOnSelection(actions.getTableCellType),\n        mceTableColType: () => lookupOnSelection(actions.getTableColType)\n      }, (func, name) => editor.addQueryValueHandler(name, func));\n    };\n\n    const adt$4 = Adt.generate([\n      { before: ['element'] },\n      {\n        on: [\n          'element',\n          'offset'\n        ]\n      },\n      { after: ['element'] }\n    ]);\n    const cata$1 = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n    const getStart$1 = situ => situ.fold(identity, identity, identity);\n    const before$2 = adt$4.before;\n    const on = adt$4.on;\n    const after$3 = adt$4.after;\n    const Situ = {\n      before: before$2,\n      on,\n      after: after$3,\n      cata: cata$1,\n      getStart: getStart$1\n    };\n\n    const create$4 = (selection, kill) => ({\n      selection,\n      kill\n    });\n    const Response = { create: create$4 };\n\n    const selectNode = (win, element) => {\n      const rng = win.document.createRange();\n      rng.selectNode(element.dom);\n      return rng;\n    };\n    const selectNodeContents = (win, element) => {\n      const rng = win.document.createRange();\n      selectNodeContentsUsing(rng, element);\n      return rng;\n    };\n    const selectNodeContentsUsing = (rng, element) => rng.selectNodeContents(element.dom);\n    const setStart = (rng, situ) => {\n      situ.fold(e => {\n        rng.setStartBefore(e.dom);\n      }, (e, o) => {\n        rng.setStart(e.dom, o);\n      }, e => {\n        rng.setStartAfter(e.dom);\n      });\n    };\n    const setFinish = (rng, situ) => {\n      situ.fold(e => {\n        rng.setEndBefore(e.dom);\n      }, (e, o) => {\n        rng.setEnd(e.dom, o);\n      }, e => {\n        rng.setEndAfter(e.dom);\n      });\n    };\n    const relativeToNative = (win, startSitu, finishSitu) => {\n      const range = win.document.createRange();\n      setStart(range, startSitu);\n      setFinish(range, finishSitu);\n      return range;\n    };\n    const exactToNative = (win, start, soffset, finish, foffset) => {\n      const rng = win.document.createRange();\n      rng.setStart(start.dom, soffset);\n      rng.setEnd(finish.dom, foffset);\n      return rng;\n    };\n    const toRect = rect => ({\n      left: rect.left,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      width: rect.width,\n      height: rect.height\n    });\n    const getFirstRect$1 = rng => {\n      const rects = rng.getClientRects();\n      const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n      return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n    };\n\n    const adt$3 = Adt.generate([\n      {\n        ltr: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      },\n      {\n        rtl: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      }\n    ]);\n    const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n    const getRanges = (win, selection) => selection.match({\n      domRange: rng => {\n        return {\n          ltr: constant(rng),\n          rtl: Optional.none\n        };\n      },\n      relative: (startSitu, finishSitu) => {\n        return {\n          ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n          rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n        };\n      },\n      exact: (start, soffset, finish, foffset) => {\n        return {\n          ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n          rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n        };\n      }\n    });\n    const doDiagnose = (win, ranges) => {\n      const rng = ranges.ltr();\n      if (rng.collapsed) {\n        const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n        return reversed.map(rev => adt$3.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$3.ltr, rng));\n      } else {\n        return fromRange(win, adt$3.ltr, rng);\n      }\n    };\n    const diagnose = (win, selection) => {\n      const ranges = getRanges(win, selection);\n      return doDiagnose(win, ranges);\n    };\n    const asLtrRange = (win, selection) => {\n      const diagnosis = diagnose(win, selection);\n      return diagnosis.match({\n        ltr: (start, soffset, finish, foffset) => {\n          const rng = win.document.createRange();\n          rng.setStart(start.dom, soffset);\n          rng.setEnd(finish.dom, foffset);\n          return rng;\n        },\n        rtl: (start, soffset, finish, foffset) => {\n          const rng = win.document.createRange();\n          rng.setStart(finish.dom, foffset);\n          rng.setEnd(start.dom, soffset);\n          return rng;\n        }\n      });\n    };\n    adt$3.ltr;\n    adt$3.rtl;\n\n    const create$3 = (start, soffset, finish, foffset) => ({\n      start,\n      soffset,\n      finish,\n      foffset\n    });\n    const SimRange = { create: create$3 };\n\n    const create$2 = (start, soffset, finish, foffset) => {\n      return {\n        start: Situ.on(start, soffset),\n        finish: Situ.on(finish, foffset)\n      };\n    };\n    const Situs = { create: create$2 };\n\n    const convertToRange = (win, selection) => {\n      const rng = asLtrRange(win, selection);\n      return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n    };\n    const makeSitus = Situs.create;\n\n    const sync = (container, isRoot, start, soffset, finish, foffset, selectRange) => {\n      if (!(eq$1(start, finish) && soffset === foffset)) {\n        return closest$1(start, 'td,th', isRoot).bind(s => {\n          return closest$1(finish, 'td,th', isRoot).bind(f => {\n            return detect(container, isRoot, s, f, selectRange);\n          });\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const detect = (container, isRoot, start, finish, selectRange) => {\n      if (!eq$1(start, finish)) {\n        return identify(start, finish, isRoot).bind(cellSel => {\n          const boxes = cellSel.boxes.getOr([]);\n          if (boxes.length > 1) {\n            selectRange(container, boxes, cellSel.start, cellSel.finish);\n            return Optional.some(Response.create(Optional.some(makeSitus(start, 0, start, getEnd(start))), true));\n          } else {\n            return Optional.none();\n          }\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const update = (rows, columns, container, selected, annotations) => {\n      const updateSelection = newSels => {\n        annotations.clearBeforeUpdate(container);\n        annotations.selectRange(container, newSels.boxes, newSels.start, newSels.finish);\n        return newSels.boxes;\n      };\n      return shiftSelection(selected, rows, columns, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(updateSelection);\n    };\n\n    const traverse = (item, mode) => ({\n      item,\n      mode\n    });\n    const backtrack = (universe, item, _direction, transition = sidestep) => {\n      return universe.property().parent(item).map(p => {\n        return traverse(p, transition);\n      });\n    };\n    const sidestep = (universe, item, direction, transition = advance) => {\n      return direction.sibling(universe, item).map(p => {\n        return traverse(p, transition);\n      });\n    };\n    const advance = (universe, item, direction, transition = advance) => {\n      const children = universe.property().children(item);\n      const result = direction.first(children);\n      return result.map(r => {\n        return traverse(r, transition);\n      });\n    };\n    const successors = [\n      {\n        current: backtrack,\n        next: sidestep,\n        fallback: Optional.none()\n      },\n      {\n        current: sidestep,\n        next: advance,\n        fallback: Optional.some(backtrack)\n      },\n      {\n        current: advance,\n        next: advance,\n        fallback: Optional.some(sidestep)\n      }\n    ];\n    const go = (universe, item, mode, direction, rules = successors) => {\n      const ruleOpt = find$1(rules, succ => {\n        return succ.current === mode;\n      });\n      return ruleOpt.bind(rule => {\n        return rule.current(universe, item, direction, rule.next).orThunk(() => {\n          return rule.fallback.bind(fb => {\n            return go(universe, item, fb, direction);\n          });\n        });\n      });\n    };\n\n    const left$1 = () => {\n      const sibling = (universe, item) => {\n        return universe.query().prevSibling(item);\n      };\n      const first = children => {\n        return children.length > 0 ? Optional.some(children[children.length - 1]) : Optional.none();\n      };\n      return {\n        sibling,\n        first\n      };\n    };\n    const right$1 = () => {\n      const sibling = (universe, item) => {\n        return universe.query().nextSibling(item);\n      };\n      const first = children => {\n        return children.length > 0 ? Optional.some(children[0]) : Optional.none();\n      };\n      return {\n        sibling,\n        first\n      };\n    };\n    const Walkers = {\n      left: left$1,\n      right: right$1\n    };\n\n    const hone = (universe, item, predicate, mode, direction, isRoot) => {\n      const next = go(universe, item, mode, direction);\n      return next.bind(n => {\n        if (isRoot(n.item)) {\n          return Optional.none();\n        } else {\n          return predicate(n.item) ? Optional.some(n.item) : hone(universe, n.item, predicate, n.mode, direction, isRoot);\n        }\n      });\n    };\n    const left = (universe, item, predicate, isRoot) => {\n      return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n    };\n    const right = (universe, item, predicate, isRoot) => {\n      return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n    };\n\n    const isLeaf = universe => element => universe.property().children(element).length === 0;\n    const before$1 = (universe, item, isRoot) => {\n      return seekLeft$1(universe, item, isLeaf(universe), isRoot);\n    };\n    const after$2 = (universe, item, isRoot) => {\n      return seekRight$1(universe, item, isLeaf(universe), isRoot);\n    };\n    const seekLeft$1 = left;\n    const seekRight$1 = right;\n\n    const universe = DomUniverse();\n    const before = (element, isRoot) => {\n      return before$1(universe, element, isRoot);\n    };\n    const after$1 = (element, isRoot) => {\n      return after$2(universe, element, isRoot);\n    };\n    const seekLeft = (element, predicate, isRoot) => {\n      return seekLeft$1(universe, element, predicate, isRoot);\n    };\n    const seekRight = (element, predicate, isRoot) => {\n      return seekRight$1(universe, element, predicate, isRoot);\n    };\n\n    const ancestor = (scope, predicate, isRoot) => ancestor$2(scope, predicate, isRoot).isSome();\n\n    const adt$2 = Adt.generate([\n      { none: ['message'] },\n      { success: [] },\n      { failedUp: ['cell'] },\n      { failedDown: ['cell'] }\n    ]);\n    const isOverlapping = (bridge, before, after) => {\n      const beforeBounds = bridge.getRect(before);\n      const afterBounds = bridge.getRect(after);\n      return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n    };\n    const isRow = elem => {\n      return closest$1(elem, 'tr');\n    };\n    const verify = (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) => {\n      return closest$1(after, 'td,th', isRoot).bind(afterCell => {\n        return closest$1(before, 'td,th', isRoot).map(beforeCell => {\n          if (!eq$1(afterCell, beforeCell)) {\n            return sharedOne(isRow, [\n              afterCell,\n              beforeCell\n            ]).fold(() => {\n              return isOverlapping(bridge, beforeCell, afterCell) ? adt$2.success() : failure(beforeCell);\n            }, _sharedRow => {\n              return failure(beforeCell);\n            });\n          } else {\n            return eq$1(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$2.none('in same cell');\n          }\n        });\n      }).getOr(adt$2.none('default'));\n    };\n    const cata = (subject, onNone, onSuccess, onFailedUp, onFailedDown) => {\n      return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n    };\n    const BeforeAfter = {\n      ...adt$2,\n      verify,\n      cata\n    };\n\n    const inParent = (parent, children, element, index) => ({\n      parent,\n      children,\n      element,\n      index\n    });\n    const indexInParent = element => parent(element).bind(parent => {\n      const children = children$2(parent);\n      return indexOf(children, element).map(index => inParent(parent, children, element, index));\n    });\n    const indexOf = (elements, element) => findIndex(elements, curry(eq$1, element));\n\n    const isBr = isTag('br');\n    const gatherer = (cand, gather, isRoot) => {\n      return gather(cand, isRoot).bind(target => {\n        return isText(target) && get$6(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Optional.some(target);\n      });\n    };\n    const handleBr = (isRoot, element, direction) => {\n      return direction.traverse(element).orThunk(() => {\n        return gatherer(element, direction.gather, isRoot);\n      }).map(direction.relative);\n    };\n    const findBr = (element, offset) => {\n      return child$2(element, offset).filter(isBr).orThunk(() => {\n        return child$2(element, offset - 1).filter(isBr);\n      });\n    };\n    const handleParent = (isRoot, element, offset, direction) => {\n      return findBr(element, offset).bind(br => {\n        return direction.traverse(br).fold(() => {\n          return gatherer(br, direction.gather, isRoot).map(direction.relative);\n        }, adjacent => {\n          return indexInParent(adjacent).map(info => {\n            return Situ.on(info.parent, info.index);\n          });\n        });\n      });\n    };\n    const tryBr = (isRoot, element, offset, direction) => {\n      const target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n      return target.map(tgt => {\n        return {\n          start: tgt,\n          finish: tgt\n        };\n      });\n    };\n    const process = analysis => {\n      return BeforeAfter.cata(analysis, _message => {\n        return Optional.none();\n      }, () => {\n        return Optional.none();\n      }, cell => {\n        return Optional.some(point(cell, 0));\n      }, cell => {\n        return Optional.some(point(cell, getEnd(cell)));\n      });\n    };\n\n    const moveDown = (caret, amount) => {\n      return {\n        left: caret.left,\n        top: caret.top + amount,\n        right: caret.right,\n        bottom: caret.bottom + amount\n      };\n    };\n    const moveUp = (caret, amount) => {\n      return {\n        left: caret.left,\n        top: caret.top - amount,\n        right: caret.right,\n        bottom: caret.bottom - amount\n      };\n    };\n    const translate = (caret, xDelta, yDelta) => {\n      return {\n        left: caret.left + xDelta,\n        top: caret.top + yDelta,\n        right: caret.right + xDelta,\n        bottom: caret.bottom + yDelta\n      };\n    };\n    const getTop = caret => {\n      return caret.top;\n    };\n    const getBottom = caret => {\n      return caret.bottom;\n    };\n\n    const getPartialBox = (bridge, element, offset) => {\n      if (offset >= 0 && offset < getEnd(element)) {\n        return bridge.getRangedRect(element, offset, element, offset + 1);\n      } else if (offset > 0) {\n        return bridge.getRangedRect(element, offset - 1, element, offset);\n      }\n      return Optional.none();\n    };\n    const toCaret = rect => ({\n      left: rect.left,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom\n    });\n    const getElemBox = (bridge, element) => {\n      return Optional.some(bridge.getRect(element));\n    };\n    const getBoxAt = (bridge, element, offset) => {\n      if (isElement(element)) {\n        return getElemBox(bridge, element).map(toCaret);\n      } else if (isText(element)) {\n        return getPartialBox(bridge, element, offset).map(toCaret);\n      } else {\n        return Optional.none();\n      }\n    };\n    const getEntireBox = (bridge, element) => {\n      if (isElement(element)) {\n        return getElemBox(bridge, element).map(toCaret);\n      } else if (isText(element)) {\n        return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n      } else {\n        return Optional.none();\n      }\n    };\n\n    const JUMP_SIZE = 5;\n    const NUM_RETRIES = 100;\n    const adt$1 = Adt.generate([\n      { none: [] },\n      { retry: ['caret'] }\n    ]);\n    const isOutside = (caret, box) => {\n      return caret.left < box.left || Math.abs(box.right - caret.left) < 1 || caret.left > box.right;\n    };\n    const inOutsideBlock = (bridge, element, caret) => {\n      return closest$2(element, isBlock).fold(never, cell => {\n        return getEntireBox(bridge, cell).exists(box => {\n          return isOutside(caret, box);\n        });\n      });\n    };\n    const adjustDown = (bridge, element, guessBox, original, caret) => {\n      const lowerCaret = moveDown(caret, JUMP_SIZE);\n      if (Math.abs(guessBox.bottom - original.bottom) < 1) {\n        return adt$1.retry(lowerCaret);\n      } else if (guessBox.top > caret.bottom) {\n        return adt$1.retry(lowerCaret);\n      } else if (guessBox.top === caret.bottom) {\n        return adt$1.retry(moveDown(caret, 1));\n      } else {\n        return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(lowerCaret, JUMP_SIZE, 0)) : adt$1.none();\n      }\n    };\n    const adjustUp = (bridge, element, guessBox, original, caret) => {\n      const higherCaret = moveUp(caret, JUMP_SIZE);\n      if (Math.abs(guessBox.top - original.top) < 1) {\n        return adt$1.retry(higherCaret);\n      } else if (guessBox.bottom < caret.top) {\n        return adt$1.retry(higherCaret);\n      } else if (guessBox.bottom === caret.top) {\n        return adt$1.retry(moveUp(caret, 1));\n      } else {\n        return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(higherCaret, JUMP_SIZE, 0)) : adt$1.none();\n      }\n    };\n    const upMovement = {\n      point: getTop,\n      adjuster: adjustUp,\n      move: moveUp,\n      gather: before\n    };\n    const downMovement = {\n      point: getBottom,\n      adjuster: adjustDown,\n      move: moveDown,\n      gather: after$1\n    };\n    const isAtTable = (bridge, x, y) => {\n      return bridge.elementFromPoint(x, y).filter(elm => {\n        return name(elm) === 'table';\n      }).isSome();\n    };\n    const adjustForTable = (bridge, movement, original, caret, numRetries) => {\n      return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n    };\n    const adjustTil = (bridge, movement, original, caret, numRetries) => {\n      if (numRetries === 0) {\n        return Optional.some(caret);\n      }\n      if (isAtTable(bridge, caret.left, movement.point(caret))) {\n        return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n      }\n      return bridge.situsFromPoint(caret.left, movement.point(caret)).bind(guess => {\n        return guess.start.fold(Optional.none, element => {\n          return getEntireBox(bridge, element).bind(guessBox => {\n            return movement.adjuster(bridge, element, guessBox, original, caret).fold(Optional.none, newCaret => {\n              return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n            });\n          }).orThunk(() => {\n            return Optional.some(caret);\n          });\n        }, Optional.none);\n      });\n    };\n    const checkScroll = (movement, adjusted, bridge) => {\n      if (movement.point(adjusted) > bridge.getInnerHeight()) {\n        return Optional.some(movement.point(adjusted) - bridge.getInnerHeight());\n      } else if (movement.point(adjusted) < 0) {\n        return Optional.some(-movement.point(adjusted));\n      } else {\n        return Optional.none();\n      }\n    };\n    const retry = (movement, bridge, caret) => {\n      const moved = movement.move(caret, JUMP_SIZE);\n      const adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n      return checkScroll(movement, adjusted, bridge).fold(() => {\n        return bridge.situsFromPoint(adjusted.left, movement.point(adjusted));\n      }, delta => {\n        bridge.scrollBy(0, delta);\n        return bridge.situsFromPoint(adjusted.left, movement.point(adjusted) - delta);\n      });\n    };\n    const Retries = {\n      tryUp: curry(retry, upMovement),\n      tryDown: curry(retry, downMovement),\n      getJumpSize: constant(JUMP_SIZE)\n    };\n\n    const MAX_RETRIES = 20;\n    const findSpot = (bridge, isRoot, direction) => {\n      return bridge.getSelection().bind(sel => {\n        return tryBr(isRoot, sel.finish, sel.foffset, direction).fold(() => {\n          return Optional.some(point(sel.finish, sel.foffset));\n        }, brNeighbour => {\n          const range = bridge.fromSitus(brNeighbour);\n          const analysis = BeforeAfter.verify(bridge, sel.finish, sel.foffset, range.finish, range.foffset, direction.failure, isRoot);\n          return process(analysis);\n        });\n      });\n    };\n    const scan = (bridge, isRoot, element, offset, direction, numRetries) => {\n      if (numRetries === 0) {\n        return Optional.none();\n      }\n      return tryCursor(bridge, isRoot, element, offset, direction).bind(situs => {\n        const range = bridge.fromSitus(situs);\n        const analysis = BeforeAfter.verify(bridge, element, offset, range.finish, range.foffset, direction.failure, isRoot);\n        return BeforeAfter.cata(analysis, () => {\n          return Optional.none();\n        }, () => {\n          return Optional.some(situs);\n        }, cell => {\n          if (eq$1(element, cell) && offset === 0) {\n            return tryAgain(bridge, element, offset, moveUp, direction);\n          } else {\n            return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n          }\n        }, cell => {\n          if (eq$1(element, cell) && offset === getEnd(cell)) {\n            return tryAgain(bridge, element, offset, moveDown, direction);\n          } else {\n            return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n          }\n        });\n      });\n    };\n    const tryAgain = (bridge, element, offset, move, direction) => {\n      return getBoxAt(bridge, element, offset).bind(box => {\n        return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n      });\n    };\n    const tryAt = (bridge, direction, box) => {\n      const browser = detect$2().browser;\n      if (browser.isChromium() || browser.isSafari() || browser.isFirefox()) {\n        return direction.retry(bridge, box);\n      } else {\n        return Optional.none();\n      }\n    };\n    const tryCursor = (bridge, isRoot, element, offset, direction) => {\n      return getBoxAt(bridge, element, offset).bind(box => {\n        return tryAt(bridge, direction, box);\n      });\n    };\n    const handle$1 = (bridge, isRoot, direction) => {\n      return findSpot(bridge, isRoot, direction).bind(spot => {\n        return scan(bridge, isRoot, spot.element, spot.offset, direction, MAX_RETRIES).map(bridge.fromSitus);\n      });\n    };\n\n    const inSameTable = (elem, table) => {\n      return ancestor(elem, e => {\n        return parent(e).exists(p => {\n          return eq$1(p, table);\n        });\n      });\n    };\n    const simulate = (bridge, isRoot, direction, initial, anchor) => {\n      return closest$1(initial, 'td,th', isRoot).bind(start => {\n        return closest$1(start, 'table', isRoot).bind(table => {\n          if (!inSameTable(anchor, table)) {\n            return Optional.none();\n          }\n          return handle$1(bridge, isRoot, direction).bind(range => {\n            return closest$1(range.finish, 'td,th', isRoot).map(finish => {\n              return {\n                start,\n                finish,\n                range\n              };\n            });\n          });\n        });\n      });\n    };\n    const navigate = (bridge, isRoot, direction, initial, anchor, precheck) => {\n      return precheck(initial, isRoot).orThunk(() => {\n        return simulate(bridge, isRoot, direction, initial, anchor).map(info => {\n          const range = info.range;\n          return Response.create(Optional.some(makeSitus(range.start, range.soffset, range.finish, range.foffset)), true);\n        });\n      });\n    };\n    const firstUpCheck = (initial, isRoot) => {\n      return closest$1(initial, 'tr', isRoot).bind(startRow => {\n        return closest$1(startRow, 'table', isRoot).bind(table => {\n          const rows = descendants(table, 'tr');\n          if (eq$1(startRow, rows[0])) {\n            return seekLeft(table, element => {\n              return last$1(element).isSome();\n            }, isRoot).map(last => {\n              const lastOffset = getEnd(last);\n              return Response.create(Optional.some(makeSitus(last, lastOffset, last, lastOffset)), true);\n            });\n          } else {\n            return Optional.none();\n          }\n        });\n      });\n    };\n    const lastDownCheck = (initial, isRoot) => {\n      return closest$1(initial, 'tr', isRoot).bind(startRow => {\n        return closest$1(startRow, 'table', isRoot).bind(table => {\n          const rows = descendants(table, 'tr');\n          if (eq$1(startRow, rows[rows.length - 1])) {\n            return seekRight(table, element => {\n              return first(element).isSome();\n            }, isRoot).map(first => {\n              return Response.create(Optional.some(makeSitus(first, 0, first, 0)), true);\n            });\n          } else {\n            return Optional.none();\n          }\n        });\n      });\n    };\n    const select = (bridge, container, isRoot, direction, initial, anchor, selectRange) => {\n      return simulate(bridge, isRoot, direction, initial, anchor).bind(info => {\n        return detect(container, isRoot, info.start, info.finish, selectRange);\n      });\n    };\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    const singleton = doRevoke => {\n      const subject = Cell(Optional.none());\n      const revoke = () => subject.get().each(doRevoke);\n      const clear = () => {\n        revoke();\n        subject.set(Optional.none());\n      };\n      const isSet = () => subject.get().isSome();\n      const get = () => subject.get();\n      const set = s => {\n        revoke();\n        subject.set(Optional.some(s));\n      };\n      return {\n        clear,\n        isSet,\n        get,\n        set\n      };\n    };\n    const value = () => {\n      const subject = singleton(noop);\n      const on = f => subject.get().each(f);\n      return {\n        ...subject,\n        on\n      };\n    };\n\n    const findCell = (target, isRoot) => closest$1(target, 'td,th', isRoot);\n    const MouseSelection = (bridge, container, isRoot, annotations) => {\n      const cursor = value();\n      const clearstate = cursor.clear;\n      const applySelection = event => {\n        cursor.on(start => {\n          annotations.clearBeforeUpdate(container);\n          findCell(event.target, isRoot).each(finish => {\n            identify(start, finish, isRoot).each(cellSel => {\n              const boxes = cellSel.boxes.getOr([]);\n              if (boxes.length === 1) {\n                const singleCell = boxes[0];\n                const isNonEditableCell = getRaw(singleCell) === 'false';\n                const isCellClosestContentEditable = is(closest(event.target), singleCell, eq$1);\n                if (isNonEditableCell && isCellClosestContentEditable) {\n                  annotations.selectRange(container, boxes, singleCell, singleCell);\n                  bridge.selectContents(singleCell);\n                }\n              } else if (boxes.length > 1) {\n                annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n                bridge.selectContents(finish);\n              }\n            });\n          });\n        });\n      };\n      const mousedown = event => {\n        annotations.clear(container);\n        findCell(event.target, isRoot).each(cursor.set);\n      };\n      const mouseover = event => {\n        applySelection(event);\n      };\n      const mouseup = event => {\n        applySelection(event);\n        clearstate();\n      };\n      return {\n        clearstate,\n        mousedown,\n        mouseover,\n        mouseup\n      };\n    };\n\n    const down = {\n      traverse: nextSibling,\n      gather: after$1,\n      relative: Situ.before,\n      retry: Retries.tryDown,\n      failure: BeforeAfter.failedDown\n    };\n    const up = {\n      traverse: prevSibling,\n      gather: before,\n      relative: Situ.before,\n      retry: Retries.tryUp,\n      failure: BeforeAfter.failedUp\n    };\n\n    const isKey = key => {\n      return keycode => {\n        return keycode === key;\n      };\n    };\n    const isUp = isKey(38);\n    const isDown = isKey(40);\n    const isNavigation = keycode => {\n      return keycode >= 37 && keycode <= 40;\n    };\n    const ltr = {\n      isBackward: isKey(37),\n      isForward: isKey(39)\n    };\n    const rtl = {\n      isBackward: isKey(39),\n      isForward: isKey(37)\n    };\n\n    const get$3 = _DOC => {\n      const doc = _DOC !== undefined ? _DOC.dom : document;\n      const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n      const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n      return SugarPosition(x, y);\n    };\n    const by = (x, y, _DOC) => {\n      const doc = _DOC !== undefined ? _DOC.dom : document;\n      const win = doc.defaultView;\n      if (win) {\n        win.scrollBy(x, y);\n      }\n    };\n\n    const adt = Adt.generate([\n      { domRange: ['rng'] },\n      {\n        relative: [\n          'startSitu',\n          'finishSitu'\n        ]\n      },\n      {\n        exact: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      }\n    ]);\n    const exactFromRange = simRange => adt.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n    const getStart = selection => selection.match({\n      domRange: rng => SugarElement.fromDom(rng.startContainer),\n      relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n      exact: (start, _soffset, _finish, _foffset) => start\n    });\n    const domRange = adt.domRange;\n    const relative = adt.relative;\n    const exact = adt.exact;\n    const getWin = selection => {\n      const start = getStart(selection);\n      return defaultView(start);\n    };\n    const range = SimRange.create;\n    const SimSelection = {\n      domRange,\n      relative,\n      exact,\n      exactFromRange,\n      getWin,\n      range\n    };\n\n    const caretPositionFromPoint = (doc, x, y) => {\n      var _a, _b;\n      return Optional.from((_b = (_a = doc.dom).caretPositionFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y)).bind(pos => {\n        if (pos.offsetNode === null) {\n          return Optional.none();\n        }\n        const r = doc.dom.createRange();\n        r.setStart(pos.offsetNode, pos.offset);\n        r.collapse();\n        return Optional.some(r);\n      });\n    };\n    const caretRangeFromPoint = (doc, x, y) => {\n      var _a, _b;\n      return Optional.from((_b = (_a = doc.dom).caretRangeFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y));\n    };\n    const availableSearch = (() => {\n      if (document.caretPositionFromPoint) {\n        return caretPositionFromPoint;\n      } else if (document.caretRangeFromPoint) {\n        return caretRangeFromPoint;\n      } else {\n        return Optional.none;\n      }\n    })();\n    const fromPoint = (win, x, y) => {\n      const doc = SugarElement.fromDom(win.document);\n      return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n    };\n\n    const beforeSpecial = (element, offset) => {\n      const name$1 = name(element);\n      if ('input' === name$1) {\n        return Situ.after(element);\n      } else if (!contains$2([\n          'br',\n          'img'\n        ], name$1)) {\n        return Situ.on(element, offset);\n      } else {\n        return offset === 0 ? Situ.before(element) : Situ.after(element);\n      }\n    };\n    const preprocessRelative = (startSitu, finishSitu) => {\n      const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n      const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n      return SimSelection.relative(start, finish);\n    };\n    const preprocessExact = (start, soffset, finish, foffset) => {\n      const startSitu = beforeSpecial(start, soffset);\n      const finishSitu = beforeSpecial(finish, foffset);\n      return SimSelection.relative(startSitu, finishSitu);\n    };\n\n    const makeRange = (start, soffset, finish, foffset) => {\n      const doc = owner(start);\n      const rng = doc.dom.createRange();\n      rng.setStart(start.dom, soffset);\n      rng.setEnd(finish.dom, foffset);\n      return rng;\n    };\n    const after = (start, soffset, finish, foffset) => {\n      const r = makeRange(start, soffset, finish, foffset);\n      const same = eq$1(start, finish) && soffset === foffset;\n      return r.collapsed && !same;\n    };\n\n    const getNativeSelection = win => Optional.from(win.getSelection());\n    const doSetNativeRange = (win, rng) => {\n      getNativeSelection(win).each(selection => {\n        selection.removeAllRanges();\n        selection.addRange(rng);\n      });\n    };\n    const doSetRange = (win, start, soffset, finish, foffset) => {\n      const rng = exactToNative(win, start, soffset, finish, foffset);\n      doSetNativeRange(win, rng);\n    };\n    const setLegacyRtlRange = (win, selection, start, soffset, finish, foffset) => {\n      selection.collapse(start.dom, soffset);\n      selection.extend(finish.dom, foffset);\n    };\n    const setRangeFromRelative = (win, relative) => diagnose(win, relative).match({\n      ltr: (start, soffset, finish, foffset) => {\n        doSetRange(win, start, soffset, finish, foffset);\n      },\n      rtl: (start, soffset, finish, foffset) => {\n        getNativeSelection(win).each(selection => {\n          if (selection.setBaseAndExtent) {\n            selection.setBaseAndExtent(start.dom, soffset, finish.dom, foffset);\n          } else if (selection.extend) {\n            try {\n              setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n            } catch (e) {\n              doSetRange(win, finish, foffset, start, soffset);\n            }\n          } else {\n            doSetRange(win, finish, foffset, start, soffset);\n          }\n        });\n      }\n    });\n    const setExact = (win, start, soffset, finish, foffset) => {\n      const relative = preprocessExact(start, soffset, finish, foffset);\n      setRangeFromRelative(win, relative);\n    };\n    const setRelative = (win, startSitu, finishSitu) => {\n      const relative = preprocessRelative(startSitu, finishSitu);\n      setRangeFromRelative(win, relative);\n    };\n    const readRange = selection => {\n      if (selection.rangeCount > 0) {\n        const firstRng = selection.getRangeAt(0);\n        const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n        return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n      } else {\n        return Optional.none();\n      }\n    };\n    const doGetExact = selection => {\n      if (selection.anchorNode === null || selection.focusNode === null) {\n        return readRange(selection);\n      } else {\n        const anchor = SugarElement.fromDom(selection.anchorNode);\n        const focus = SugarElement.fromDom(selection.focusNode);\n        return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n      }\n    };\n    const setToElement = (win, element, selectNodeContents$1 = true) => {\n      const rngGetter = selectNodeContents$1 ? selectNodeContents : selectNode;\n      const rng = rngGetter(win, element);\n      doSetNativeRange(win, rng);\n    };\n    const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n    const get$2 = win => getExact(win).map(range => SimSelection.exact(range.start, range.soffset, range.finish, range.foffset));\n    const getFirstRect = (win, selection) => {\n      const rng = asLtrRange(win, selection);\n      return getFirstRect$1(rng);\n    };\n    const getAtPoint = (win, x, y) => fromPoint(win, x, y);\n    const clear = win => {\n      getNativeSelection(win).each(selection => selection.removeAllRanges());\n    };\n\n    const WindowBridge = win => {\n      const elementFromPoint = (x, y) => {\n        return SugarElement.fromPoint(SugarElement.fromDom(win.document), x, y);\n      };\n      const getRect = element => {\n        return element.dom.getBoundingClientRect();\n      };\n      const getRangedRect = (start, soffset, finish, foffset) => {\n        const sel = SimSelection.exact(start, soffset, finish, foffset);\n        return getFirstRect(win, sel);\n      };\n      const getSelection = () => {\n        return get$2(win).map(exactAdt => {\n          return convertToRange(win, exactAdt);\n        });\n      };\n      const fromSitus = situs => {\n        const relative = SimSelection.relative(situs.start, situs.finish);\n        return convertToRange(win, relative);\n      };\n      const situsFromPoint = (x, y) => {\n        return getAtPoint(win, x, y).map(exact => {\n          return Situs.create(exact.start, exact.soffset, exact.finish, exact.foffset);\n        });\n      };\n      const clearSelection = () => {\n        clear(win);\n      };\n      const collapseSelection = (toStart = false) => {\n        get$2(win).each(sel => sel.fold(rng => rng.collapse(toStart), (startSitu, finishSitu) => {\n          const situ = toStart ? startSitu : finishSitu;\n          setRelative(win, situ, situ);\n        }, (start, soffset, finish, foffset) => {\n          const node = toStart ? start : finish;\n          const offset = toStart ? soffset : foffset;\n          setExact(win, node, offset, node, offset);\n        }));\n      };\n      const selectNode = element => {\n        setToElement(win, element, false);\n      };\n      const selectContents = element => {\n        setToElement(win, element);\n      };\n      const setSelection = sel => {\n        setExact(win, sel.start, sel.soffset, sel.finish, sel.foffset);\n      };\n      const setRelativeSelection = (start, finish) => {\n        setRelative(win, start, finish);\n      };\n      const getInnerHeight = () => {\n        return win.innerHeight;\n      };\n      const getScrollY = () => {\n        const pos = get$3(SugarElement.fromDom(win.document));\n        return pos.top;\n      };\n      const scrollBy = (x, y) => {\n        by(x, y, SugarElement.fromDom(win.document));\n      };\n      return {\n        elementFromPoint,\n        getRect,\n        getRangedRect,\n        getSelection,\n        fromSitus,\n        situsFromPoint,\n        clearSelection,\n        collapseSelection,\n        setSelection,\n        setRelativeSelection,\n        selectNode,\n        selectContents,\n        getInnerHeight,\n        getScrollY,\n        scrollBy\n      };\n    };\n\n    const rc = (rows, cols) => ({\n      rows,\n      cols\n    });\n    const mouse = (win, container, isRoot, annotations) => {\n      const bridge = WindowBridge(win);\n      const handlers = MouseSelection(bridge, container, isRoot, annotations);\n      return {\n        clearstate: handlers.clearstate,\n        mousedown: handlers.mousedown,\n        mouseover: handlers.mouseover,\n        mouseup: handlers.mouseup\n      };\n    };\n    const keyboard = (win, container, isRoot, annotations) => {\n      const bridge = WindowBridge(win);\n      const clearToNavigate = () => {\n        annotations.clear(container);\n        return Optional.none();\n      };\n      const keydown = (event, start, soffset, finish, foffset, direction) => {\n        const realEvent = event.raw;\n        const keycode = realEvent.which;\n        const shiftKey = realEvent.shiftKey === true;\n        const handler = retrieve$1(container, annotations.selectedSelector).fold(() => {\n          if (isNavigation(keycode) && !shiftKey) {\n            annotations.clearBeforeUpdate(container);\n          }\n          if (isDown(keycode) && shiftKey) {\n            return curry(select, bridge, container, isRoot, down, finish, start, annotations.selectRange);\n          } else if (isUp(keycode) && shiftKey) {\n            return curry(select, bridge, container, isRoot, up, finish, start, annotations.selectRange);\n          } else if (isDown(keycode)) {\n            return curry(navigate, bridge, isRoot, down, finish, start, lastDownCheck);\n          } else if (isUp(keycode)) {\n            return curry(navigate, bridge, isRoot, up, finish, start, firstUpCheck);\n          } else {\n            return Optional.none;\n          }\n        }, selected => {\n          const update$1 = attempts => {\n            return () => {\n              const navigation = findMap(attempts, delta => {\n                return update(delta.rows, delta.cols, container, selected, annotations);\n              });\n              return navigation.fold(() => {\n                return getEdges(container, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(edges => {\n                  const relative = isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n                  bridge.setRelativeSelection(Situ.on(edges.first, 0), relative(edges.table));\n                  annotations.clear(container);\n                  return Response.create(Optional.none(), true);\n                });\n              }, _ => {\n                return Optional.some(Response.create(Optional.none(), true));\n              });\n            };\n          };\n          if (isDown(keycode) && shiftKey) {\n            return update$1([rc(+1, 0)]);\n          } else if (isUp(keycode) && shiftKey) {\n            return update$1([rc(-1, 0)]);\n          } else if (direction.isBackward(keycode) && shiftKey) {\n            return update$1([\n              rc(0, -1),\n              rc(-1, 0)\n            ]);\n          } else if (direction.isForward(keycode) && shiftKey) {\n            return update$1([\n              rc(0, +1),\n              rc(+1, 0)\n            ]);\n          } else if (isNavigation(keycode) && !shiftKey) {\n            return clearToNavigate;\n          } else {\n            return Optional.none;\n          }\n        });\n        return handler();\n      };\n      const keyup = (event, start, soffset, finish, foffset) => {\n        return retrieve$1(container, annotations.selectedSelector).fold(() => {\n          const realEvent = event.raw;\n          const keycode = realEvent.which;\n          const shiftKey = realEvent.shiftKey === true;\n          if (!shiftKey) {\n            return Optional.none();\n          }\n          if (isNavigation(keycode)) {\n            return sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n          } else {\n            return Optional.none();\n          }\n        }, Optional.none);\n      };\n      return {\n        keydown,\n        keyup\n      };\n    };\n    const external = (win, container, isRoot, annotations) => {\n      const bridge = WindowBridge(win);\n      return (start, finish) => {\n        annotations.clearBeforeUpdate(container);\n        identify(start, finish, isRoot).each(cellSel => {\n          const boxes = cellSel.boxes.getOr([]);\n          annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n          bridge.selectContents(finish);\n          bridge.collapseSelection();\n        });\n      };\n    };\n\n    const read = (element, attr) => {\n      const value = get$b(element, attr);\n      return value === undefined || value === '' ? [] : value.split(' ');\n    };\n    const add$2 = (element, attr, id) => {\n      const old = read(element, attr);\n      const nu = old.concat([id]);\n      set$2(element, attr, nu.join(' '));\n      return true;\n    };\n    const remove$4 = (element, attr, id) => {\n      const nu = filter$2(read(element, attr), v => v !== id);\n      if (nu.length > 0) {\n        set$2(element, attr, nu.join(' '));\n      } else {\n        remove$7(element, attr);\n      }\n      return false;\n    };\n\n    const supports = element => element.dom.classList !== undefined;\n    const get$1 = element => read(element, 'class');\n    const add$1 = (element, clazz) => add$2(element, 'class', clazz);\n    const remove$3 = (element, clazz) => remove$4(element, 'class', clazz);\n\n    const add = (element, clazz) => {\n      if (supports(element)) {\n        element.dom.classList.add(clazz);\n      } else {\n        add$1(element, clazz);\n      }\n    };\n    const cleanClass = element => {\n      const classList = supports(element) ? element.dom.classList : get$1(element);\n      if (classList.length === 0) {\n        remove$7(element, 'class');\n      }\n    };\n    const remove$2 = (element, clazz) => {\n      if (supports(element)) {\n        const classList = element.dom.classList;\n        classList.remove(clazz);\n      } else {\n        remove$3(element, clazz);\n      }\n      cleanClass(element);\n    };\n    const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n    const remove$1 = (element, classes) => {\n      each$2(classes, x => {\n        remove$2(element, x);\n      });\n    };\n\n    const addClass = clazz => element => {\n      add(element, clazz);\n    };\n    const removeClasses = classes => element => {\n      remove$1(element, classes);\n    };\n\n    const byClass = ephemera => {\n      const addSelectionClass = addClass(ephemera.selected);\n      const removeSelectionClasses = removeClasses([\n        ephemera.selected,\n        ephemera.lastSelected,\n        ephemera.firstSelected\n      ]);\n      const clear = container => {\n        const sels = descendants(container, ephemera.selectedSelector);\n        each$2(sels, removeSelectionClasses);\n      };\n      const selectRange = (container, cells, start, finish) => {\n        clear(container);\n        each$2(cells, addSelectionClass);\n        add(start, ephemera.firstSelected);\n        add(finish, ephemera.lastSelected);\n      };\n      return {\n        clearBeforeUpdate: clear,\n        clear,\n        selectRange,\n        selectedSelector: ephemera.selectedSelector,\n        firstSelectedSelector: ephemera.firstSelectedSelector,\n        lastSelectedSelector: ephemera.lastSelectedSelector\n      };\n    };\n    const byAttr = (ephemera, onSelection, onClear) => {\n      const removeSelectionAttributes = element => {\n        remove$7(element, ephemera.selected);\n        remove$7(element, ephemera.firstSelected);\n        remove$7(element, ephemera.lastSelected);\n      };\n      const addSelectionAttribute = element => {\n        set$2(element, ephemera.selected, '1');\n      };\n      const clear = container => {\n        clearBeforeUpdate(container);\n        onClear();\n      };\n      const clearBeforeUpdate = container => {\n        const sels = descendants(container, `${ ephemera.selectedSelector },${ ephemera.firstSelectedSelector },${ ephemera.lastSelectedSelector }`);\n        each$2(sels, removeSelectionAttributes);\n      };\n      const selectRange = (container, cells, start, finish) => {\n        clear(container);\n        each$2(cells, addSelectionAttribute);\n        set$2(start, ephemera.firstSelected, '1');\n        set$2(finish, ephemera.lastSelected, '1');\n        onSelection(cells, start, finish);\n      };\n      return {\n        clearBeforeUpdate,\n        clear,\n        selectRange,\n        selectedSelector: ephemera.selectedSelector,\n        firstSelectedSelector: ephemera.firstSelectedSelector,\n        lastSelectedSelector: ephemera.lastSelectedSelector\n      };\n    };\n    const SelectionAnnotation = {\n      byClass,\n      byAttr\n    };\n\n    const fold = (subject, onNone, onMultiple, onSingle) => {\n      switch (subject.tag) {\n      case 'none':\n        return onNone();\n      case 'single':\n        return onSingle(subject.element);\n      case 'multiple':\n        return onMultiple(subject.elements);\n      }\n    };\n    const none = () => ({ tag: 'none' });\n    const multiple = elements => ({\n      tag: 'multiple',\n      elements\n    });\n    const single = element => ({\n      tag: 'single',\n      element\n    });\n\n    const Selections = (lazyRoot, getStart, selectedSelector) => {\n      const get = () => retrieve(lazyRoot(), selectedSelector).fold(() => getStart().fold(none, single), multiple);\n      return { get };\n    };\n\n    const getUpOrLeftCells = (grid, selectedCells) => {\n      const upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row + 1);\n      const upDetails = toDetailList(upGrid);\n      return bind$2(upDetails, detail => {\n        const slicedCells = detail.cells.slice(0, selectedCells[selectedCells.length - 1].column + 1);\n        return map$1(slicedCells, cell => cell.element);\n      });\n    };\n    const getDownOrRightCells = (grid, selectedCells) => {\n      const downGrid = grid.slice(selectedCells[0].row + selectedCells[0].rowspan - 1, grid.length);\n      const downDetails = toDetailList(downGrid);\n      return bind$2(downDetails, detail => {\n        const slicedCells = detail.cells.slice(selectedCells[0].column + selectedCells[0].colspan - 1, detail.cells.length);\n        return map$1(slicedCells, cell => cell.element);\n      });\n    };\n    const getOtherCells = (table, target, generators) => {\n      const warehouse = Warehouse.fromTable(table);\n      const details = onCells(warehouse, target);\n      return details.map(selectedCells => {\n        const grid = toGrid(warehouse, generators, false);\n        const {rows} = extractGridDetails(grid);\n        const upOrLeftCells = getUpOrLeftCells(rows, selectedCells);\n        const downOrRightCells = getDownOrRightCells(rows, selectedCells);\n        return {\n          upOrLeftCells,\n          downOrRightCells\n        };\n      });\n    };\n\n    const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n      target,\n      x,\n      y,\n      stop,\n      prevent,\n      kill,\n      raw\n    });\n    const fromRawEvent$1 = rawEvent => {\n      const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n      const stop = () => rawEvent.stopPropagation();\n      const prevent = () => rawEvent.preventDefault();\n      const kill = compose(prevent, stop);\n      return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n    };\n    const handle = (filter, handler) => rawEvent => {\n      if (filter(rawEvent)) {\n        handler(fromRawEvent$1(rawEvent));\n      }\n    };\n    const binder = (element, event, filter, handler, useCapture) => {\n      const wrapped = handle(filter, handler);\n      element.dom.addEventListener(event, wrapped, useCapture);\n      return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n    };\n    const bind$1 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n    const unbind = (element, event, handler, useCapture) => {\n      element.dom.removeEventListener(event, handler, useCapture);\n    };\n\n    const filter = always;\n    const bind = (element, event, handler) => bind$1(element, event, filter, handler);\n    const fromRawEvent = fromRawEvent$1;\n\n    const hasInternalTarget = e => !has(SugarElement.fromDom(e.target), 'ephox-snooker-resizer-bar');\n    const TableCellSelectionHandler = (editor, resizeHandler) => {\n      const cellSelection = Selections(() => SugarElement.fromDom(editor.getBody()), () => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)), ephemera.selectedSelector);\n      const onSelection = (cells, start, finish) => {\n        const tableOpt = table(start);\n        tableOpt.each(table => {\n          const cloneFormats = getTableCloneElements(editor);\n          const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats);\n          const selectedCells = getCellsFromSelection(editor);\n          const otherCells = getOtherCells(table, { selection: selectedCells }, generators);\n          fireTableSelectionChange(editor, cells, start, finish, otherCells);\n        });\n      };\n      const onClear = () => fireTableSelectionClear(editor);\n      const annotations = SelectionAnnotation.byAttr(ephemera, onSelection, onClear);\n      editor.on('init', _e => {\n        const win = editor.getWin();\n        const body = getBody(editor);\n        const isRoot = getIsRoot(editor);\n        const syncSelection = () => {\n          const sel = editor.selection;\n          const start = SugarElement.fromDom(sel.getStart());\n          const end = SugarElement.fromDom(sel.getEnd());\n          const shared = sharedOne(table, [\n            start,\n            end\n          ]);\n          shared.fold(() => annotations.clear(body), noop);\n        };\n        const mouseHandlers = mouse(win, body, isRoot, annotations);\n        const keyHandlers = keyboard(win, body, isRoot, annotations);\n        const external$1 = external(win, body, isRoot, annotations);\n        const hasShiftKey = event => event.raw.shiftKey === true;\n        editor.on('TableSelectorChange', e => external$1(e.start, e.finish));\n        const handleResponse = (event, response) => {\n          if (!hasShiftKey(event)) {\n            return;\n          }\n          if (response.kill) {\n            event.kill();\n          }\n          response.selection.each(ns => {\n            const relative = SimSelection.relative(ns.start, ns.finish);\n            const rng = asLtrRange(win, relative);\n            editor.selection.setRng(rng);\n          });\n        };\n        const keyup = event => {\n          const wrappedEvent = fromRawEvent(event);\n          if (wrappedEvent.raw.shiftKey && isNavigation(wrappedEvent.raw.which)) {\n            const rng = editor.selection.getRng();\n            const start = SugarElement.fromDom(rng.startContainer);\n            const end = SugarElement.fromDom(rng.endContainer);\n            keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(response => {\n              handleResponse(wrappedEvent, response);\n            });\n          }\n        };\n        const keydown = event => {\n          const wrappedEvent = fromRawEvent(event);\n          resizeHandler.hide();\n          const rng = editor.selection.getRng();\n          const start = SugarElement.fromDom(rng.startContainer);\n          const end = SugarElement.fromDom(rng.endContainer);\n          const direction = onDirection(ltr, rtl)(SugarElement.fromDom(editor.selection.getStart()));\n          keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(response => {\n            handleResponse(wrappedEvent, response);\n          });\n          resizeHandler.show();\n        };\n        const isLeftMouse = raw => raw.button === 0;\n        const isLeftButtonPressed = raw => {\n          if (raw.buttons === undefined) {\n            return true;\n          }\n          return (raw.buttons & 1) !== 0;\n        };\n        const dragStart = _e => {\n          mouseHandlers.clearstate();\n        };\n        const mouseDown = e => {\n          if (isLeftMouse(e) && hasInternalTarget(e)) {\n            mouseHandlers.mousedown(fromRawEvent(e));\n          }\n        };\n        const mouseOver = e => {\n          if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n            mouseHandlers.mouseover(fromRawEvent(e));\n          }\n        };\n        const mouseUp = e => {\n          if (isLeftMouse(e) && hasInternalTarget(e)) {\n            mouseHandlers.mouseup(fromRawEvent(e));\n          }\n        };\n        const getDoubleTap = () => {\n          const lastTarget = Cell(SugarElement.fromDom(body));\n          const lastTimeStamp = Cell(0);\n          const touchEnd = t => {\n            const target = SugarElement.fromDom(t.target);\n            if (isTag('td')(target) || isTag('th')(target)) {\n              const lT = lastTarget.get();\n              const lTS = lastTimeStamp.get();\n              if (eq$1(lT, target) && t.timeStamp - lTS < 300) {\n                t.preventDefault();\n                external$1(target, target);\n              }\n            }\n            lastTarget.set(target);\n            lastTimeStamp.set(t.timeStamp);\n          };\n          return { touchEnd };\n        };\n        const doubleTap = getDoubleTap();\n        editor.on('dragstart', dragStart);\n        editor.on('mousedown', mouseDown);\n        editor.on('mouseover', mouseOver);\n        editor.on('mouseup', mouseUp);\n        editor.on('touchend', doubleTap.touchEnd);\n        editor.on('keyup', keyup);\n        editor.on('keydown', keydown);\n        editor.on('NodeChange', syncSelection);\n      });\n      editor.on('PreInit', () => {\n        editor.serializer.addTempAttr(ephemera.firstSelected);\n        editor.serializer.addTempAttr(ephemera.lastSelected);\n      });\n      const clearSelectedCells = container => annotations.clear(SugarElement.fromDom(container));\n      const getSelectedCells = () => fold(cellSelection.get(), constant([]), cells => {\n        return map$1(cells, cell => cell.dom);\n      }, cell => [cell.dom]);\n      return {\n        getSelectedCells,\n        clearSelectedCells\n      };\n    };\n\n    const Event = fields => {\n      let handlers = [];\n      const bind = handler => {\n        if (handler === undefined) {\n          throw new Error('Event bind error: undefined handler');\n        }\n        handlers.push(handler);\n      };\n      const unbind = handler => {\n        handlers = filter$2(handlers, h => {\n          return h !== handler;\n        });\n      };\n      const trigger = (...args) => {\n        const event = {};\n        each$2(fields, (name, i) => {\n          event[name] = args[i];\n        });\n        each$2(handlers, handler => {\n          handler(event);\n        });\n      };\n      return {\n        bind,\n        unbind,\n        trigger\n      };\n    };\n\n    const create$1 = typeDefs => {\n      const registry = map(typeDefs, event => {\n        return {\n          bind: event.bind,\n          unbind: event.unbind\n        };\n      });\n      const trigger = map(typeDefs, event => {\n        return event.trigger;\n      });\n      return {\n        registry,\n        trigger\n      };\n    };\n\n    const last = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        cancel();\n        timer = setTimeout(() => {\n          timer = null;\n          fn.apply(null, args);\n        }, rate);\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n\n    const sort = arr => {\n      return arr.slice(0).sort();\n    };\n    const reqMessage = (required, keys) => {\n      throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n    };\n    const unsuppMessage = unsupported => {\n      throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n    };\n    const validateStrArr = (label, array) => {\n      if (!isArray(array)) {\n        throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n      }\n      each$2(array, a => {\n        if (!isString(a)) {\n          throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n        }\n      });\n    };\n    const invalidTypeMessage = (incorrect, type) => {\n      throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n    };\n    const checkDupes = everything => {\n      const sorted = sort(everything);\n      const dupe = find$1(sorted, (s, i) => {\n        return i < sorted.length - 1 && s === sorted[i + 1];\n      });\n      dupe.each(d => {\n        throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n      });\n    };\n\n    const base = (handleUnsupported, required) => {\n      return baseWith(handleUnsupported, required, {\n        validate: isFunction,\n        label: 'function'\n      });\n    };\n    const baseWith = (handleUnsupported, required, pred) => {\n      if (required.length === 0) {\n        throw new Error('You must specify at least one required field.');\n      }\n      validateStrArr('required', required);\n      checkDupes(required);\n      return obj => {\n        const keys$1 = keys(obj);\n        const allReqd = forall(required, req => {\n          return contains$2(keys$1, req);\n        });\n        if (!allReqd) {\n          reqMessage(required, keys$1);\n        }\n        handleUnsupported(required, keys$1);\n        const invalidKeys = filter$2(required, key => {\n          return !pred.validate(obj[key], key);\n        });\n        if (invalidKeys.length > 0) {\n          invalidTypeMessage(invalidKeys, pred.label);\n        }\n        return obj;\n      };\n    };\n    const handleExact = (required, keys) => {\n      const unsupported = filter$2(keys, key => {\n        return !contains$2(required, key);\n      });\n      if (unsupported.length > 0) {\n        unsuppMessage(unsupported);\n      }\n    };\n    const exactly = required => base(handleExact, required);\n\n    const DragMode = exactly([\n      'compare',\n      'extract',\n      'mutate',\n      'sink'\n    ]);\n    const DragSink = exactly([\n      'element',\n      'start',\n      'stop',\n      'destroy'\n    ]);\n    const DragApi = exactly([\n      'forceDrop',\n      'drop',\n      'move',\n      'delayDrop'\n    ]);\n\n    const InDrag = () => {\n      let previous = Optional.none();\n      const reset = () => {\n        previous = Optional.none();\n      };\n      const update = (mode, nu) => {\n        const result = previous.map(old => {\n          return mode.compare(old, nu);\n        });\n        previous = Optional.some(nu);\n        return result;\n      };\n      const onEvent = (event, mode) => {\n        const dataOption = mode.extract(event);\n        dataOption.each(data => {\n          const offset = update(mode, data);\n          offset.each(d => {\n            events.trigger.move(d);\n          });\n        });\n      };\n      const events = create$1({ move: Event(['info']) });\n      return {\n        onEvent,\n        reset,\n        events: events.registry\n      };\n    };\n\n    const NoDrag = () => {\n      const events = create$1({ move: Event(['info']) });\n      return {\n        onEvent: noop,\n        reset: noop,\n        events: events.registry\n      };\n    };\n\n    const Movement = () => {\n      const noDragState = NoDrag();\n      const inDragState = InDrag();\n      let dragState = noDragState;\n      const on = () => {\n        dragState.reset();\n        dragState = inDragState;\n      };\n      const off = () => {\n        dragState.reset();\n        dragState = noDragState;\n      };\n      const onEvent = (event, mode) => {\n        dragState.onEvent(event, mode);\n      };\n      const isOn = () => {\n        return dragState === inDragState;\n      };\n      return {\n        on,\n        off,\n        isOn,\n        onEvent,\n        events: inDragState.events\n      };\n    };\n\n    const setup = (mutation, mode, settings) => {\n      let active = false;\n      const events = create$1({\n        start: Event([]),\n        stop: Event([])\n      });\n      const movement = Movement();\n      const drop = () => {\n        sink.stop();\n        if (movement.isOn()) {\n          movement.off();\n          events.trigger.stop();\n        }\n      };\n      const throttledDrop = last(drop, 200);\n      const go = parent => {\n        sink.start(parent);\n        movement.on();\n        events.trigger.start();\n      };\n      const mousemove = event => {\n        throttledDrop.cancel();\n        movement.onEvent(event, mode);\n      };\n      movement.events.move.bind(event => {\n        mode.mutate(mutation, event.info);\n      });\n      const on = () => {\n        active = true;\n      };\n      const off = () => {\n        active = false;\n      };\n      const runIfActive = f => {\n        return (...args) => {\n          if (active) {\n            f.apply(null, args);\n          }\n        };\n      };\n      const sink = mode.sink(DragApi({\n        forceDrop: drop,\n        drop: runIfActive(drop),\n        move: runIfActive(mousemove),\n        delayDrop: runIfActive(throttledDrop.throttle)\n      }), settings);\n      const destroy = () => {\n        sink.destroy();\n      };\n      return {\n        element: sink.element,\n        go,\n        on,\n        off,\n        destroy,\n        events: events.registry\n      };\n    };\n\n    const css = namespace => {\n      const dashNamespace = namespace.replace(/\\./g, '-');\n      const resolve = str => {\n        return dashNamespace + '-' + str;\n      };\n      return { resolve };\n    };\n\n    const styles$1 = css('ephox-dragster');\n    const resolve$1 = styles$1.resolve;\n\n    const Blocker = options => {\n      const settings = {\n        layerClass: resolve$1('blocker'),\n        ...options\n      };\n      const div = SugarElement.fromTag('div');\n      set$2(div, 'role', 'presentation');\n      setAll(div, {\n        position: 'fixed',\n        left: '0px',\n        top: '0px',\n        width: '100%',\n        height: '100%'\n      });\n      add(div, resolve$1('blocker'));\n      add(div, settings.layerClass);\n      const element = constant(div);\n      const destroy = () => {\n        remove$6(div);\n      };\n      return {\n        element,\n        destroy\n      };\n    };\n\n    const compare = (old, nu) => {\n      return SugarPosition(nu.left - old.left, nu.top - old.top);\n    };\n    const extract = event => {\n      return Optional.some(SugarPosition(event.x, event.y));\n    };\n    const mutate = (mutation, info) => {\n      mutation.mutate(info.left, info.top);\n    };\n    const sink = (dragApi, settings) => {\n      const blocker = Blocker(settings);\n      const mdown = bind(blocker.element(), 'mousedown', dragApi.forceDrop);\n      const mup = bind(blocker.element(), 'mouseup', dragApi.drop);\n      const mmove = bind(blocker.element(), 'mousemove', dragApi.move);\n      const mout = bind(blocker.element(), 'mouseout', dragApi.delayDrop);\n      const destroy = () => {\n        blocker.destroy();\n        mup.unbind();\n        mmove.unbind();\n        mout.unbind();\n        mdown.unbind();\n      };\n      const start = parent => {\n        append$1(parent, blocker.element());\n      };\n      const stop = () => {\n        remove$6(blocker.element());\n      };\n      return DragSink({\n        element: blocker.element,\n        start,\n        stop,\n        destroy\n      });\n    };\n    var MouseDrag = DragMode({\n      compare,\n      extract,\n      sink,\n      mutate\n    });\n\n    const transform = (mutation, settings = {}) => {\n      var _a;\n      const mode = (_a = settings.mode) !== null && _a !== void 0 ? _a : MouseDrag;\n      return setup(mutation, mode, settings);\n    };\n\n    const styles = css('ephox-snooker');\n    const resolve = styles.resolve;\n\n    const Mutation = () => {\n      const events = create$1({\n        drag: Event([\n          'xDelta',\n          'yDelta'\n        ])\n      });\n      const mutate = (x, y) => {\n        events.trigger.drag(x, y);\n      };\n      return {\n        mutate,\n        events: events.registry\n      };\n    };\n\n    const BarMutation = () => {\n      const events = create$1({\n        drag: Event([\n          'xDelta',\n          'yDelta',\n          'target'\n        ])\n      });\n      let target = Optional.none();\n      const delegate = Mutation();\n      delegate.events.drag.bind(event => {\n        target.each(t => {\n          events.trigger.drag(event.xDelta, event.yDelta, t);\n        });\n      });\n      const assign = t => {\n        target = Optional.some(t);\n      };\n      const get = () => {\n        return target;\n      };\n      return {\n        assign,\n        get,\n        mutate: delegate.mutate,\n        events: events.registry\n      };\n    };\n\n    const col = (column, x, y, w, h) => {\n      const bar = SugarElement.fromTag('div');\n      setAll(bar, {\n        position: 'absolute',\n        left: x - w / 2 + 'px',\n        top: y + 'px',\n        height: h + 'px',\n        width: w + 'px'\n      });\n      setAll$1(bar, {\n        'data-column': column,\n        'role': 'presentation'\n      });\n      return bar;\n    };\n    const row = (r, x, y, w, h) => {\n      const bar = SugarElement.fromTag('div');\n      setAll(bar, {\n        position: 'absolute',\n        left: x + 'px',\n        top: y - h / 2 + 'px',\n        height: h + 'px',\n        width: w + 'px'\n      });\n      setAll$1(bar, {\n        'data-row': r,\n        'role': 'presentation'\n      });\n      return bar;\n    };\n\n    const resizeBar = resolve('resizer-bar');\n    const resizeRowBar = resolve('resizer-rows');\n    const resizeColBar = resolve('resizer-cols');\n    const BAR_THICKNESS = 7;\n    const resizableRows = (warehouse, isResizable) => bind$2(warehouse.all, (row, i) => isResizable(row.element) ? [i] : []);\n    const resizableColumns = (warehouse, isResizable) => {\n      const resizableCols = [];\n      range$1(warehouse.grid.columns, index => {\n        const colElmOpt = Warehouse.getColumnAt(warehouse, index).map(col => col.element);\n        if (colElmOpt.forall(isResizable)) {\n          resizableCols.push(index);\n        }\n      });\n      return filter$2(resizableCols, colIndex => {\n        const columnCells = Warehouse.filterItems(warehouse, cell => cell.column === colIndex);\n        return forall(columnCells, cell => isResizable(cell.element));\n      });\n    };\n    const destroy = wire => {\n      const previous = descendants(wire.parent(), '.' + resizeBar);\n      each$2(previous, remove$6);\n    };\n    const drawBar = (wire, positions, create) => {\n      const origin = wire.origin();\n      each$2(positions, cpOption => {\n        cpOption.each(cp => {\n          const bar = create(origin, cp);\n          add(bar, resizeBar);\n          append$1(wire.parent(), bar);\n        });\n      });\n    };\n    const refreshCol = (wire, colPositions, position, tableHeight) => {\n      drawBar(wire, colPositions, (origin, cp) => {\n        const colBar = col(cp.col, cp.x - origin.left, position.top - origin.top, BAR_THICKNESS, tableHeight);\n        add(colBar, resizeColBar);\n        return colBar;\n      });\n    };\n    const refreshRow = (wire, rowPositions, position, tableWidth) => {\n      drawBar(wire, rowPositions, (origin, cp) => {\n        const rowBar = row(cp.row, position.left - origin.left, cp.y - origin.top, tableWidth, BAR_THICKNESS);\n        add(rowBar, resizeRowBar);\n        return rowBar;\n      });\n    };\n    const refreshGrid = (warhouse, wire, table, rows, cols) => {\n      const position = absolute(table);\n      const isResizable = wire.isResizable;\n      const rowPositions = rows.length > 0 ? height.positions(rows, table) : [];\n      const resizableRowBars = rowPositions.length > 0 ? resizableRows(warhouse, isResizable) : [];\n      const resizableRowPositions = filter$2(rowPositions, (_pos, i) => exists(resizableRowBars, barIndex => i === barIndex));\n      refreshRow(wire, resizableRowPositions, position, getOuter$2(table));\n      const colPositions = cols.length > 0 ? width.positions(cols, table) : [];\n      const resizableColBars = colPositions.length > 0 ? resizableColumns(warhouse, isResizable) : [];\n      const resizableColPositions = filter$2(colPositions, (_pos, i) => exists(resizableColBars, barIndex => i === barIndex));\n      refreshCol(wire, resizableColPositions, position, getOuter$1(table));\n    };\n    const refresh = (wire, table) => {\n      destroy(wire);\n      if (wire.isResizable(table)) {\n        const warehouse = Warehouse.fromTable(table);\n        const rows$1 = rows(warehouse);\n        const cols = columns(warehouse);\n        refreshGrid(warehouse, wire, table, rows$1, cols);\n      }\n    };\n    const each = (wire, f) => {\n      const bars = descendants(wire.parent(), '.' + resizeBar);\n      each$2(bars, f);\n    };\n    const hide = wire => {\n      each(wire, bar => {\n        set$1(bar, 'display', 'none');\n      });\n    };\n    const show = wire => {\n      each(wire, bar => {\n        set$1(bar, 'display', 'block');\n      });\n    };\n    const isRowBar = element => {\n      return has(element, resizeRowBar);\n    };\n    const isColBar = element => {\n      return has(element, resizeColBar);\n    };\n\n    const resizeBarDragging = resolve('resizer-bar-dragging');\n    const BarManager = wire => {\n      const mutation = BarMutation();\n      const resizing = transform(mutation, {});\n      let hoverTable = Optional.none();\n      const getResizer = (element, type) => {\n        return Optional.from(get$b(element, type));\n      };\n      mutation.events.drag.bind(event => {\n        getResizer(event.target, 'data-row').each(_dataRow => {\n          const currentRow = getCssValue(event.target, 'top');\n          set$1(event.target, 'top', currentRow + event.yDelta + 'px');\n        });\n        getResizer(event.target, 'data-column').each(_dataCol => {\n          const currentCol = getCssValue(event.target, 'left');\n          set$1(event.target, 'left', currentCol + event.xDelta + 'px');\n        });\n      });\n      const getDelta = (target, dir) => {\n        const newX = getCssValue(target, dir);\n        const oldX = getAttrValue(target, 'data-initial-' + dir, 0);\n        return newX - oldX;\n      };\n      resizing.events.stop.bind(() => {\n        mutation.get().each(target => {\n          hoverTable.each(table => {\n            getResizer(target, 'data-row').each(row => {\n              const delta = getDelta(target, 'top');\n              remove$7(target, 'data-initial-top');\n              events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n            });\n            getResizer(target, 'data-column').each(column => {\n              const delta = getDelta(target, 'left');\n              remove$7(target, 'data-initial-left');\n              events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n            });\n            refresh(wire, table);\n          });\n        });\n      });\n      const handler = (target, dir) => {\n        events.trigger.startAdjust();\n        mutation.assign(target);\n        set$2(target, 'data-initial-' + dir, getCssValue(target, dir));\n        add(target, resizeBarDragging);\n        set$1(target, 'opacity', '0.2');\n        resizing.go(wire.parent());\n      };\n      const mousedown = bind(wire.parent(), 'mousedown', event => {\n        if (isRowBar(event.target)) {\n          handler(event.target, 'top');\n        }\n        if (isColBar(event.target)) {\n          handler(event.target, 'left');\n        }\n      });\n      const isRoot = e => {\n        return eq$1(e, wire.view());\n      };\n      const findClosestEditableTable = target => closest$1(target, 'table', isRoot).filter(isEditable$1);\n      const mouseover = bind(wire.view(), 'mouseover', event => {\n        findClosestEditableTable(event.target).fold(() => {\n          if (inBody(event.target)) {\n            destroy(wire);\n          }\n        }, table => {\n          hoverTable = Optional.some(table);\n          refresh(wire, table);\n        });\n      });\n      const destroy$1 = () => {\n        mousedown.unbind();\n        mouseover.unbind();\n        resizing.destroy();\n        destroy(wire);\n      };\n      const refresh$1 = tbl => {\n        refresh(wire, tbl);\n      };\n      const events = create$1({\n        adjustHeight: Event([\n          'table',\n          'delta',\n          'row'\n        ]),\n        adjustWidth: Event([\n          'table',\n          'delta',\n          'column'\n        ]),\n        startAdjust: Event([])\n      });\n      return {\n        destroy: destroy$1,\n        refresh: refresh$1,\n        on: resizing.on,\n        off: resizing.off,\n        hideBars: curry(hide, wire),\n        showBars: curry(show, wire),\n        events: events.registry\n      };\n    };\n\n    const create = (wire, resizing, lazySizing) => {\n      const hdirection = height;\n      const vdirection = width;\n      const manager = BarManager(wire);\n      const events = create$1({\n        beforeResize: Event([\n          'table',\n          'type'\n        ]),\n        afterResize: Event([\n          'table',\n          'type'\n        ]),\n        startDrag: Event([])\n      });\n      manager.events.adjustHeight.bind(event => {\n        const table = event.table;\n        events.trigger.beforeResize(table, 'row');\n        const delta = hdirection.delta(event.delta, table);\n        adjustHeight(table, delta, event.row, hdirection);\n        events.trigger.afterResize(table, 'row');\n      });\n      manager.events.startAdjust.bind(_event => {\n        events.trigger.startDrag();\n      });\n      manager.events.adjustWidth.bind(event => {\n        const table = event.table;\n        events.trigger.beforeResize(table, 'col');\n        const delta = vdirection.delta(event.delta, table);\n        const tableSize = lazySizing(table);\n        adjustWidth(table, delta, event.column, resizing, tableSize);\n        events.trigger.afterResize(table, 'col');\n      });\n      return {\n        on: manager.on,\n        off: manager.off,\n        refreshBars: manager.refresh,\n        hideBars: manager.hideBars,\n        showBars: manager.showBars,\n        destroy: manager.destroy,\n        events: events.registry\n      };\n    };\n    const TableResize = { create };\n\n    const only = (element, isResizable) => {\n      const parent = isDocument(element) ? documentElement(element) : element;\n      return {\n        parent: constant(parent),\n        view: constant(element),\n        origin: constant(SugarPosition(0, 0)),\n        isResizable\n      };\n    };\n    const detached = (editable, chrome, isResizable) => {\n      const origin = () => absolute(chrome);\n      return {\n        parent: constant(chrome),\n        view: constant(editable),\n        origin,\n        isResizable\n      };\n    };\n    const body = (editable, chrome, isResizable) => {\n      return {\n        parent: constant(chrome),\n        view: constant(editable),\n        origin: constant(SugarPosition(0, 0)),\n        isResizable\n      };\n    };\n    const ResizeWire = {\n      only,\n      detached,\n      body\n    };\n\n    const createContainer = () => {\n      const container = SugarElement.fromTag('div');\n      setAll(container, {\n        position: 'static',\n        height: '0',\n        width: '0',\n        padding: '0',\n        margin: '0',\n        border: '0'\n      });\n      append$1(body$1(), container);\n      return container;\n    };\n    const get = (editor, isResizable) => {\n      return editor.inline ? ResizeWire.body(SugarElement.fromDom(editor.getBody()), createContainer(), isResizable) : ResizeWire.only(SugarElement.fromDom(editor.getDoc()), isResizable);\n    };\n    const remove = (editor, wire) => {\n      if (editor.inline) {\n        remove$6(wire.parent());\n      }\n    };\n\n    const isTable = node => isNonNullable(node) && node.nodeName === 'TABLE';\n    const barResizerPrefix = 'bar-';\n    const isResizable = elm => get$b(elm, 'data-mce-resize') !== 'false';\n    const syncPixels = table => {\n      const warehouse = Warehouse.fromTable(table);\n      if (!Warehouse.hasColumns(warehouse)) {\n        each$2(cells$1(table), cell => {\n          const computedWidth = get$a(cell, 'width');\n          set$1(cell, 'width', computedWidth);\n          remove$7(cell, 'width');\n        });\n      }\n    };\n    const TableResizeHandler = editor => {\n      const selectionRng = value();\n      const tableResize = value();\n      const resizeWire = value();\n      let startW;\n      let startRawW;\n      const lazySizing = table => get$5(editor, table);\n      const lazyResizingBehaviour = () => isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable();\n      const getNumColumns = table => getGridSize(table).columns;\n      const afterCornerResize = (table, origin, width) => {\n        const isRightEdgeResize = endsWith(origin, 'e');\n        if (startRawW === '') {\n          convertToPercentSize(table);\n        }\n        if (width !== startW && startRawW !== '') {\n          set$1(table, 'width', startRawW);\n          const resizing = lazyResizingBehaviour();\n          const tableSize = lazySizing(table);\n          const col = isPreserveTableColumnResizing(editor) || isRightEdgeResize ? getNumColumns(table) - 1 : 0;\n          adjustWidth(table, width - startW, col, resizing, tableSize);\n        } else if (isPercentage$1(startRawW)) {\n          const percentW = parseFloat(startRawW.replace('%', ''));\n          const targetPercentW = width * percentW / startW;\n          set$1(table, 'width', targetPercentW + '%');\n        }\n        if (isPixel(startRawW)) {\n          syncPixels(table);\n        }\n      };\n      const destroy = () => {\n        tableResize.on(sz => {\n          sz.destroy();\n        });\n        resizeWire.on(w => {\n          remove(editor, w);\n        });\n      };\n      editor.on('init', () => {\n        const rawWire = get(editor, isResizable);\n        resizeWire.set(rawWire);\n        if (hasTableObjectResizing(editor) && hasTableResizeBars(editor)) {\n          const resizing = lazyResizingBehaviour();\n          const sz = TableResize.create(rawWire, resizing, lazySizing);\n          sz.on();\n          sz.events.startDrag.bind(_event => {\n            selectionRng.set(editor.selection.getRng());\n          });\n          sz.events.beforeResize.bind(event => {\n            const rawTable = event.table.dom;\n            fireObjectResizeStart(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n          });\n          sz.events.afterResize.bind(event => {\n            const table = event.table;\n            const rawTable = table.dom;\n            removeDataStyle(table);\n            selectionRng.on(rng => {\n              editor.selection.setRng(rng);\n              editor.focus();\n            });\n            fireObjectResized(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n            editor.undoManager.add();\n          });\n          tableResize.set(sz);\n        }\n      });\n      editor.on('ObjectResizeStart', e => {\n        const targetElm = e.target;\n        if (isTable(targetElm)) {\n          const table = SugarElement.fromDom(targetElm);\n          each$2(editor.dom.select('.mce-clonedresizable'), clone => {\n            editor.dom.addClass(clone, 'mce-' + getTableColumnResizingBehaviour(editor) + '-columns');\n          });\n          if (!isPixelSizing(table) && isTablePixelsForced(editor)) {\n            convertToPixelSize(table);\n          } else if (!isPercentSizing(table) && isTablePercentagesForced(editor)) {\n            convertToPercentSize(table);\n          }\n          if (isNoneSizing(table) && startsWith(e.origin, barResizerPrefix)) {\n            convertToPercentSize(table);\n          }\n          startW = e.width;\n          startRawW = isTableResponsiveForced(editor) ? '' : getRawWidth(editor, targetElm).getOr('');\n        }\n      });\n      editor.on('ObjectResized', e => {\n        const targetElm = e.target;\n        if (isTable(targetElm)) {\n          const table = SugarElement.fromDom(targetElm);\n          const origin = e.origin;\n          if (startsWith(origin, 'corner-')) {\n            afterCornerResize(table, origin, e.width);\n          }\n          removeDataStyle(table);\n          fireTableModified(editor, table.dom, styleModified);\n        }\n      });\n      editor.on('SwitchMode', () => {\n        tableResize.on(resize => {\n          if (editor.mode.isReadOnly()) {\n            resize.hideBars();\n          } else {\n            resize.showBars();\n          }\n        });\n      });\n      editor.on('remove', () => {\n        destroy();\n      });\n      const refresh = table => {\n        tableResize.on(resize => resize.refreshBars(SugarElement.fromDom(table)));\n      };\n      const hide = () => {\n        tableResize.on(resize => resize.hideBars());\n      };\n      const show = () => {\n        tableResize.on(resize => resize.showBars());\n      };\n      return {\n        refresh,\n        hide,\n        show\n      };\n    };\n\n    const setupTable = editor => {\n      register(editor);\n      const resizeHandler = TableResizeHandler(editor);\n      const cellSelectionHandler = TableCellSelectionHandler(editor, resizeHandler);\n      const actions = TableActions(editor, resizeHandler, cellSelectionHandler);\n      registerCommands(editor, actions);\n      registerQueryCommands(editor, actions);\n      registerEvents(editor, actions);\n      return {\n        getSelectedCells: cellSelectionHandler.getSelectedCells,\n        clearSelectedCells: cellSelectionHandler.clearSelectedCells\n      };\n    };\n\n    const DomModel = editor => {\n      const table = setupTable(editor);\n      return { table };\n    };\n    var Model = () => {\n      global$1.add('dom', DomModel);\n    };\n\n    Model();\n\n})();\n"
  },
  {
    "path": "publishable/assets/js/skins/content/dark/content.css",
    "content": "body {\n  background-color: #222f3e;\n  color: #fff;\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n  line-height: 1.4;\n  margin: 1rem;\n}\na {\n  color: #4099ff;\n}\ntable {\n  border-collapse: collapse;\n}\n/* Apply a default padding if legacy cellpadding attribute is missing */\ntable:not([cellpadding]) th,\ntable:not([cellpadding]) td {\n  padding: 0.4rem;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-width\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-width\"]) td {\n  border-width: 1px;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-style\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-style\"]) td {\n  border-style: solid;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-color\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-color\"]) td {\n  border-color: #6d737b;\n}\nfigure {\n  display: table;\n  margin: 1rem auto;\n}\nfigure figcaption {\n  color: #8a8f97;\n  display: block;\n  margin-top: 0.25rem;\n  text-align: center;\n}\nhr {\n  border-color: #6d737b;\n  border-style: solid;\n  border-width: 1px 0 0 0;\n}\ncode {\n  background-color: #6d737b;\n  border-radius: 3px;\n  padding: 0.1rem 0.2rem;\n}\n.mce-content-body:not([dir=rtl]) blockquote {\n  border-left: 2px solid #6d737b;\n  margin-left: 1.5rem;\n  padding-left: 1rem;\n}\n.mce-content-body[dir=rtl] blockquote {\n  border-right: 2px solid #6d737b;\n  margin-right: 1.5rem;\n  padding-right: 1rem;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/content/default/content.css",
    "content": "body {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n  line-height: 1.4;\n  margin: 1rem;\n}\ntable {\n  border-collapse: collapse;\n}\n/* Apply a default padding if legacy cellpadding attribute is missing */\ntable:not([cellpadding]) th,\ntable:not([cellpadding]) td {\n  padding: 0.4rem;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-width\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-width\"]) td {\n  border-width: 1px;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-style\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-style\"]) td {\n  border-style: solid;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-color\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-color\"]) td {\n  border-color: #ccc;\n}\nfigure {\n  display: table;\n  margin: 1rem auto;\n}\nfigure figcaption {\n  color: #999;\n  display: block;\n  margin-top: 0.25rem;\n  text-align: center;\n}\nhr {\n  border-color: #ccc;\n  border-style: solid;\n  border-width: 1px 0 0 0;\n}\ncode {\n  background-color: #e8e8e8;\n  border-radius: 3px;\n  padding: 0.1rem 0.2rem;\n}\n.mce-content-body:not([dir=rtl]) blockquote {\n  border-left: 2px solid #ccc;\n  margin-left: 1.5rem;\n  padding-left: 1rem;\n}\n.mce-content-body[dir=rtl] blockquote {\n  border-right: 2px solid #ccc;\n  margin-right: 1.5rem;\n  padding-right: 1rem;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/content/document/content.css",
    "content": "@media screen {\n  html {\n    background: #f4f4f4;\n    min-height: 100%;\n  }\n}\nbody {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n}\n@media screen {\n  body {\n    background-color: #fff;\n    box-shadow: 0 0 4px rgba(0, 0, 0, 0.15);\n    box-sizing: border-box;\n    margin: 1rem auto 0;\n    max-width: 820px;\n    min-height: calc(100vh - 1rem);\n    padding: 4rem 6rem 6rem 6rem;\n  }\n}\ntable {\n  border-collapse: collapse;\n}\n/* Apply a default padding if legacy cellpadding attribute is missing */\ntable:not([cellpadding]) th,\ntable:not([cellpadding]) td {\n  padding: 0.4rem;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-width\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-width\"]) td {\n  border-width: 1px;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-style\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-style\"]) td {\n  border-style: solid;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-color\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-color\"]) td {\n  border-color: #ccc;\n}\nfigure figcaption {\n  color: #999;\n  margin-top: 0.25rem;\n  text-align: center;\n}\nhr {\n  border-color: #ccc;\n  border-style: solid;\n  border-width: 1px 0 0 0;\n}\n.mce-content-body:not([dir=rtl]) blockquote {\n  border-left: 2px solid #ccc;\n  margin-left: 1.5rem;\n  padding-left: 1rem;\n}\n.mce-content-body[dir=rtl] blockquote {\n  border-right: 2px solid #ccc;\n  margin-right: 1.5rem;\n  padding-right: 1rem;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/content/tinymce-5/content.css",
    "content": "body {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n  line-height: 1.4;\n  margin: 1rem;\n}\ntable {\n  border-collapse: collapse;\n}\n/* Apply a default padding if legacy cellpadding attribute is missing */\ntable:not([cellpadding]) th,\ntable:not([cellpadding]) td {\n  padding: 0.4rem;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-width\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-width\"]) td {\n  border-width: 1px;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-style\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-style\"]) td {\n  border-style: solid;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-color\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-color\"]) td {\n  border-color: #ccc;\n}\nfigure {\n  display: table;\n  margin: 1rem auto;\n}\nfigure figcaption {\n  color: #999;\n  display: block;\n  margin-top: 0.25rem;\n  text-align: center;\n}\nhr {\n  border-color: #ccc;\n  border-style: solid;\n  border-width: 1px 0 0 0;\n}\ncode {\n  background-color: #e8e8e8;\n  border-radius: 3px;\n  padding: 0.1rem 0.2rem;\n}\n.mce-content-body:not([dir=rtl]) blockquote {\n  border-left: 2px solid #ccc;\n  margin-left: 1.5rem;\n  padding-left: 1rem;\n}\n.mce-content-body[dir=rtl] blockquote {\n  border-right: 2px solid #ccc;\n  margin-right: 1.5rem;\n  padding-right: 1rem;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/content/tinymce-5-dark/content.css",
    "content": "body {\n  background-color: #2f3742;\n  color: #dfe0e4;\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n  line-height: 1.4;\n  margin: 1rem;\n}\na {\n  color: #4099ff;\n}\ntable {\n  border-collapse: collapse;\n}\n/* Apply a default padding if legacy cellpadding attribute is missing */\ntable:not([cellpadding]) th,\ntable:not([cellpadding]) td {\n  padding: 0.4rem;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-width\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-width\"]) td {\n  border-width: 1px;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-style\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-style\"]) td {\n  border-style: solid;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-color\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-color\"]) td {\n  border-color: #6d737b;\n}\nfigure {\n  display: table;\n  margin: 1rem auto;\n}\nfigure figcaption {\n  color: #8a8f97;\n  display: block;\n  margin-top: 0.25rem;\n  text-align: center;\n}\nhr {\n  border-color: #6d737b;\n  border-style: solid;\n  border-width: 1px 0 0 0;\n}\ncode {\n  background-color: #6d737b;\n  border-radius: 3px;\n  padding: 0.1rem 0.2rem;\n}\n.mce-content-body:not([dir=rtl]) blockquote {\n  border-left: 2px solid #6d737b;\n  margin-left: 1.5rem;\n  padding-left: 1rem;\n}\n.mce-content-body[dir=rtl] blockquote {\n  border-right: 2px solid #6d737b;\n  margin-right: 1.5rem;\n  padding-right: 1rem;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/content/writer/content.css",
    "content": "body {\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n  line-height: 1.4;\n  margin: 1rem auto;\n  max-width: 900px;\n}\ntable {\n  border-collapse: collapse;\n}\n/* Apply a default padding if legacy cellpadding attribute is missing */\ntable:not([cellpadding]) th,\ntable:not([cellpadding]) td {\n  padding: 0.4rem;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-width\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-width\"]) td {\n  border-width: 1px;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-style\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-style\"]) td {\n  border-style: solid;\n}\n/* Set default table styles if a table has a positive border attribute\n   and no inline css */\ntable[border]:not([border=\"0\"]):not([style*=\"border-color\"]) th,\ntable[border]:not([border=\"0\"]):not([style*=\"border-color\"]) td {\n  border-color: #ccc;\n}\nfigure {\n  display: table;\n  margin: 1rem auto;\n}\nfigure figcaption {\n  color: #999;\n  display: block;\n  margin-top: 0.25rem;\n  text-align: center;\n}\nhr {\n  border-color: #ccc;\n  border-style: solid;\n  border-width: 1px 0 0 0;\n}\ncode {\n  background-color: #e8e8e8;\n  border-radius: 3px;\n  padding: 0.1rem 0.2rem;\n}\n.mce-content-body:not([dir=rtl]) blockquote {\n  border-left: 2px solid #ccc;\n  margin-left: 1.5rem;\n  padding-left: 1rem;\n}\n.mce-content-body[dir=rtl] blockquote {\n  border-right: 2px solid #ccc;\n  margin-right: 1.5rem;\n  padding-right: 1rem;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/oxide/content.css",
    "content": ".mce-content-body .mce-item-anchor {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n}\n.mce-content-body .mce-item-anchor:empty {\n  cursor: default;\n  display: inline-block;\n  height: 12px !important;\n  padding: 0 2px;\n  -webkit-user-modify: read-only;\n  -moz-user-modify: read-only;\n  -webkit-user-select: all;\n  -moz-user-select: all;\n  user-select: all;\n  width: 8px !important;\n}\n.mce-content-body .mce-item-anchor:not(:empty) {\n  background-position-x: 2px;\n  display: inline-block;\n  padding-left: 12px;\n}\n.mce-content-body .mce-item-anchor[data-mce-selected] {\n  outline-offset: 1px;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"]:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #ffe89d;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"][data-mce-annotation-active=\"true\"]:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment:not([data-mce-selected]) {\n  background-color: #ffe89d;\n  outline: none;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"]:not([data-mce-selected=\"inline-boundary\"]) {\n  background-color: #fed635;\n}\n.tox-checklist > li:not(.tox-checklist--hidden) {\n  list-style: none;\n  margin: 0.25em 0;\n}\n.tox-checklist > li:not(.tox-checklist--hidden)::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n  cursor: pointer;\n  height: 1em;\n  margin-left: -1.5em;\n  margin-top: 0.125em;\n  position: absolute;\n  width: 1em;\n}\n.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n}\n[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {\n  margin-left: 0;\n  margin-right: -1.5em;\n}\n/* stylelint-disable */\n/* http://prismjs.com/ */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n  color: black;\n  background: none;\n  text-shadow: 0 1px white;\n  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n  font-size: 1em;\n  text-align: left;\n  white-space: pre;\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: normal;\n  line-height: 1.5;\n  -moz-tab-size: 4;\n  tab-size: 4;\n  -webkit-hyphens: none;\n  hyphens: none;\n}\npre[class*=\"language-\"]::-moz-selection,\npre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection,\ncode[class*=\"language-\"] ::-moz-selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\npre[class*=\"language-\"]::selection,\npre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection,\ncode[class*=\"language-\"] ::selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n@media print {\n  code[class*=\"language-\"],\n  pre[class*=\"language-\"] {\n    text-shadow: none;\n  }\n}\n/* Code blocks */\npre[class*=\"language-\"] {\n  padding: 1em;\n  margin: 0.5em 0;\n  overflow: auto;\n}\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n  background: #f5f2f0;\n}\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n  padding: 0.1em;\n  border-radius: 0.3em;\n  white-space: normal;\n}\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n  color: slategray;\n}\n.token.punctuation {\n  color: #999;\n}\n.token.namespace {\n  opacity: 0.7;\n}\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n  color: #905;\n}\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n  color: #690;\n}\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n  color: #9a6e3a;\n  /* This background color was intended by the author of this theme. */\n  background: hsla(0, 0%, 100%, 0.5);\n}\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n  color: #07a;\n}\n.token.function,\n.token.class-name {\n  color: #DD4A68;\n}\n.token.regex,\n.token.important,\n.token.variable {\n  color: #e90;\n}\n.token.important,\n.token.bold {\n  font-weight: bold;\n}\n.token.italic {\n  font-style: italic;\n}\n.token.entity {\n  cursor: help;\n}\n/* stylelint-enable */\n.mce-content-body {\n  overflow-wrap: break-word;\n  word-wrap: break-word;\n}\n.mce-content-body .mce-visual-caret {\n  background-color: black;\n  background-color: currentColor;\n  position: absolute;\n}\n.mce-content-body .mce-visual-caret-hidden {\n  display: none;\n}\n.mce-content-body *[data-mce-caret] {\n  left: -1000px;\n  margin: 0;\n  padding: 0;\n  position: absolute;\n  right: auto;\n  top: 0;\n}\n.mce-content-body .mce-offscreen-selection {\n  left: -2000000px;\n  max-width: 1000000px;\n  position: absolute;\n}\n.mce-content-body *[contentEditable=false] {\n  cursor: default;\n}\n.mce-content-body *[contentEditable=true] {\n  cursor: text;\n}\n.tox-cursor-format-painter {\n  cursor: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\"), default;\n}\ndiv.mce-footnotes hr {\n  margin-inline-end: auto;\n  margin-inline-start: 0;\n  width: 25%;\n}\ndiv.mce-footnotes li > a.mce-footnotes-backlink {\n  text-decoration: none;\n}\n@media print {\n  sup.mce-footnote a {\n    color: black;\n    text-decoration: none;\n  }\n  div.mce-footnotes {\n    break-inside: avoid;\n    width: 100%;\n  }\n  div.mce-footnotes li > a.mce-footnotes-backlink {\n    display: none;\n  }\n}\n.mce-content-body figure.align-left {\n  float: left;\n}\n.mce-content-body figure.align-right {\n  float: right;\n}\n.mce-content-body figure.image.align-center {\n  display: table;\n  margin-left: auto;\n  margin-right: auto;\n}\n.mce-preview-object {\n  border: 1px solid gray;\n  display: inline-block;\n  line-height: 0;\n  margin: 0 2px 0 2px;\n  position: relative;\n}\n.mce-preview-object .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-preview-object[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.mce-content-body .mce-mergetag:hover {\n  background-color: rgba(0, 108, 231, 0.1);\n}\n.mce-content-body .mce-mergetag-affix {\n  background-color: rgba(0, 108, 231, 0.1);\n  color: #006ce7;\n}\n.mce-object {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n  border: 1px dashed #aaa;\n}\n.mce-pagebreak {\n  border: 1px dashed #aaa;\n  cursor: default;\n  display: block;\n  height: 5px;\n  margin-top: 15px;\n  page-break-before: always;\n  width: 100%;\n}\n@media print {\n  .mce-pagebreak {\n    border: 0;\n  }\n}\n.tiny-pageembed .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tiny-pageembed[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.tiny-pageembed {\n  display: inline-block;\n  position: relative;\n}\n.tiny-pageembed--21by9,\n.tiny-pageembed--16by9,\n.tiny-pageembed--4by3,\n.tiny-pageembed--1by1 {\n  display: block;\n  overflow: hidden;\n  padding: 0;\n  position: relative;\n  width: 100%;\n}\n.tiny-pageembed--21by9 {\n  padding-top: 42.857143%;\n}\n.tiny-pageembed--16by9 {\n  padding-top: 56.25%;\n}\n.tiny-pageembed--4by3 {\n  padding-top: 75%;\n}\n.tiny-pageembed--1by1 {\n  padding-top: 100%;\n}\n.tiny-pageembed--21by9 iframe,\n.tiny-pageembed--16by9 iframe,\n.tiny-pageembed--4by3 iframe,\n.tiny-pageembed--1by1 iframe {\n  border: 0;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-content-body[data-mce-placeholder] {\n  position: relative;\n}\n.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  color: rgba(34, 47, 62, 0.7);\n  content: attr(data-mce-placeholder);\n  position: absolute;\n}\n.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  left: 1px;\n}\n.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {\n  right: 1px;\n}\n.mce-content-body div.mce-resizehandle {\n  background-color: #4099ff;\n  border-color: #4099ff;\n  border-style: solid;\n  border-width: 1px;\n  box-sizing: border-box;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n  z-index: 1298;\n}\n.mce-content-body div.mce-resizehandle:hover {\n  background-color: #4099ff;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(1) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(2) {\n  cursor: nesw-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(3) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(4) {\n  cursor: nesw-resize;\n}\n.mce-content-body .mce-resize-backdrop {\n  z-index: 10000;\n}\n.mce-content-body .mce-clonedresizable {\n  cursor: default;\n  opacity: 0.5;\n  outline: 1px dashed black;\n  position: absolute;\n  z-index: 10001;\n}\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {\n  border: 0;\n}\n.mce-content-body .mce-resize-helper {\n  background: #555;\n  background: rgba(0, 0, 0, 0.75);\n  border: 1px;\n  border-radius: 3px;\n  color: white;\n  display: none;\n  font-family: sans-serif;\n  font-size: 12px;\n  line-height: 14px;\n  margin: 5px 10px;\n  padding: 5px;\n  position: absolute;\n  white-space: nowrap;\n  z-index: 10002;\n}\n.tox-rtc-user-selection {\n  position: relative;\n}\n.tox-rtc-user-cursor {\n  bottom: 0;\n  cursor: default;\n  position: absolute;\n  top: 0;\n  width: 2px;\n}\n.tox-rtc-user-cursor::before {\n  background-color: inherit;\n  border-radius: 50%;\n  content: '';\n  display: block;\n  height: 8px;\n  position: absolute;\n  right: -3px;\n  top: -3px;\n  width: 8px;\n}\n.tox-rtc-user-cursor:hover::after {\n  background-color: inherit;\n  border-radius: 100px;\n  box-sizing: border-box;\n  color: #fff;\n  content: attr(data-user);\n  display: block;\n  font-size: 12px;\n  font-weight: bold;\n  left: -5px;\n  min-height: 8px;\n  min-width: 8px;\n  padding: 0 12px;\n  position: absolute;\n  top: -11px;\n  white-space: nowrap;\n  z-index: 1000;\n}\n.tox-rtc-user-selection--1 .tox-rtc-user-cursor {\n  background-color: #2dc26b;\n}\n.tox-rtc-user-selection--2 .tox-rtc-user-cursor {\n  background-color: #e03e2d;\n}\n.tox-rtc-user-selection--3 .tox-rtc-user-cursor {\n  background-color: #f1c40f;\n}\n.tox-rtc-user-selection--4 .tox-rtc-user-cursor {\n  background-color: #3598db;\n}\n.tox-rtc-user-selection--5 .tox-rtc-user-cursor {\n  background-color: #b96ad9;\n}\n.tox-rtc-user-selection--6 .tox-rtc-user-cursor {\n  background-color: #e67e23;\n}\n.tox-rtc-user-selection--7 .tox-rtc-user-cursor {\n  background-color: #aaa69d;\n}\n.tox-rtc-user-selection--8 .tox-rtc-user-cursor {\n  background-color: #f368e0;\n}\n.tox-rtc-remote-image {\n  background: #eaeaea url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\") no-repeat center center;\n  border: 1px solid #ccc;\n  min-height: 240px;\n  min-width: 320px;\n}\n.mce-match-marker {\n  background: #aaa;\n  color: #fff;\n}\n.mce-match-marker-selected {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::-moz-selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-content-body img[data-mce-selected],\n.mce-content-body video[data-mce-selected],\n.mce-content-body audio[data-mce-selected],\n.mce-content-body object[data-mce-selected],\n.mce-content-body embed[data-mce-selected],\n.mce-content-body table[data-mce-selected] {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body hr[data-mce-selected] {\n  outline: 3px solid #b4d7ff;\n  outline-offset: 1px;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body *[contentEditable=false][data-mce-selected] {\n  cursor: not-allowed;\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,\n.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {\n  outline: none;\n}\n.mce-content-body *[data-mce-selected=\"inline-boundary\"] {\n  background-color: #b4d7ff;\n}\n.mce-content-body .mce-edit-focus {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body td[data-mce-selected],\n.mce-content-body th[data-mce-selected] {\n  position: relative;\n}\n.mce-content-body td[data-mce-selected]::-moz-selection,\n.mce-content-body th[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected]::selection,\n.mce-content-body th[data-mce-selected]::selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected] *,\n.mce-content-body th[data-mce-selected] * {\n  outline: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.mce-content-body td[data-mce-selected]::after,\n.mce-content-body th[data-mce-selected]::after {\n  background-color: rgba(180, 215, 255, 0.7);\n  border: 1px solid rgba(180, 215, 255, 0.7);\n  bottom: -1px;\n  content: '';\n  left: -1px;\n  mix-blend-mode: multiply;\n  position: absolute;\n  right: -1px;\n  top: -1px;\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .mce-content-body td[data-mce-selected]::after,\n  .mce-content-body th[data-mce-selected]::after {\n    border-color: rgba(0, 84, 180, 0.7);\n  }\n}\n.mce-content-body img[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body img[data-mce-selected]::selection {\n  background: none;\n}\n.ephox-snooker-resizer-bar {\n  background-color: #b4d7ff;\n  opacity: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n.ephox-snooker-resizer-cols {\n  cursor: col-resize;\n}\n.ephox-snooker-resizer-rows {\n  cursor: row-resize;\n}\n.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {\n  opacity: 1;\n}\n.mce-spellchecker-word {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n  height: 2rem;\n}\n.mce-spellchecker-grammar {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n}\n.mce-toc {\n  border: 1px solid gray;\n}\n.mce-toc h2 {\n  margin: 4px;\n}\n.mce-toc li {\n  list-style-type: none;\n}\ntable[style*=\"border-width: 0px\"],\n.mce-item-table:not([border]),\n.mce-item-table[border=\"0\"],\ntable[style*=\"border-width: 0px\"] td,\n.mce-item-table:not([border]) td,\n.mce-item-table[border=\"0\"] td,\ntable[style*=\"border-width: 0px\"] th,\n.mce-item-table:not([border]) th,\n.mce-item-table[border=\"0\"] th,\ntable[style*=\"border-width: 0px\"] caption,\n.mce-item-table:not([border]) caption,\n.mce-item-table[border=\"0\"] caption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks p,\n.mce-visualblocks h1,\n.mce-visualblocks h2,\n.mce-visualblocks h3,\n.mce-visualblocks h4,\n.mce-visualblocks h5,\n.mce-visualblocks h6,\n.mce-visualblocks div:not([data-mce-bogus]),\n.mce-visualblocks section,\n.mce-visualblocks article,\n.mce-visualblocks blockquote,\n.mce-visualblocks address,\n.mce-visualblocks pre,\n.mce-visualblocks figure,\n.mce-visualblocks figcaption,\n.mce-visualblocks hgroup,\n.mce-visualblocks aside,\n.mce-visualblocks ul,\n.mce-visualblocks ol,\n.mce-visualblocks dl {\n  background-repeat: no-repeat;\n  border: 1px dashed #bbb;\n  margin-left: 3px;\n  padding-top: 10px;\n}\n.mce-visualblocks p {\n  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);\n}\n.mce-visualblocks h1 {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);\n}\n.mce-visualblocks h2 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);\n}\n.mce-visualblocks h3 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);\n}\n.mce-visualblocks h4 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);\n}\n.mce-visualblocks h5 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);\n}\n.mce-visualblocks h6 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);\n}\n.mce-visualblocks div:not([data-mce-bogus]) {\n  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);\n}\n.mce-visualblocks section {\n  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);\n}\n.mce-visualblocks article {\n  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);\n}\n.mce-visualblocks blockquote {\n  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);\n}\n.mce-visualblocks address {\n  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);\n}\n.mce-visualblocks pre {\n  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);\n}\n.mce-visualblocks figure {\n  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);\n}\n.mce-visualblocks figcaption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks hgroup {\n  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);\n}\n.mce-visualblocks aside {\n  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);\n}\n.mce-visualblocks ul {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);\n}\n.mce-visualblocks ol {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);\n}\n.mce-visualblocks dl {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);\n}\n.mce-visualblocks:not([dir=rtl]) p,\n.mce-visualblocks:not([dir=rtl]) h1,\n.mce-visualblocks:not([dir=rtl]) h2,\n.mce-visualblocks:not([dir=rtl]) h3,\n.mce-visualblocks:not([dir=rtl]) h4,\n.mce-visualblocks:not([dir=rtl]) h5,\n.mce-visualblocks:not([dir=rtl]) h6,\n.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),\n.mce-visualblocks:not([dir=rtl]) section,\n.mce-visualblocks:not([dir=rtl]) article,\n.mce-visualblocks:not([dir=rtl]) blockquote,\n.mce-visualblocks:not([dir=rtl]) address,\n.mce-visualblocks:not([dir=rtl]) pre,\n.mce-visualblocks:not([dir=rtl]) figure,\n.mce-visualblocks:not([dir=rtl]) figcaption,\n.mce-visualblocks:not([dir=rtl]) hgroup,\n.mce-visualblocks:not([dir=rtl]) aside,\n.mce-visualblocks:not([dir=rtl]) ul,\n.mce-visualblocks:not([dir=rtl]) ol,\n.mce-visualblocks:not([dir=rtl]) dl {\n  margin-left: 3px;\n}\n.mce-visualblocks[dir=rtl] p,\n.mce-visualblocks[dir=rtl] h1,\n.mce-visualblocks[dir=rtl] h2,\n.mce-visualblocks[dir=rtl] h3,\n.mce-visualblocks[dir=rtl] h4,\n.mce-visualblocks[dir=rtl] h5,\n.mce-visualblocks[dir=rtl] h6,\n.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),\n.mce-visualblocks[dir=rtl] section,\n.mce-visualblocks[dir=rtl] article,\n.mce-visualblocks[dir=rtl] blockquote,\n.mce-visualblocks[dir=rtl] address,\n.mce-visualblocks[dir=rtl] pre,\n.mce-visualblocks[dir=rtl] figure,\n.mce-visualblocks[dir=rtl] figcaption,\n.mce-visualblocks[dir=rtl] hgroup,\n.mce-visualblocks[dir=rtl] aside,\n.mce-visualblocks[dir=rtl] ul,\n.mce-visualblocks[dir=rtl] ol,\n.mce-visualblocks[dir=rtl] dl {\n  background-position-x: right;\n  margin-right: 3px;\n}\n.mce-nbsp,\n.mce-shy {\n  background: #aaa;\n}\n.mce-shy::after {\n  content: '-';\n}\nbody {\n  font-family: sans-serif;\n}\ntable {\n  border-collapse: collapse;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/oxide/content.inline.css",
    "content": ".mce-content-body .mce-item-anchor {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n}\n.mce-content-body .mce-item-anchor:empty {\n  cursor: default;\n  display: inline-block;\n  height: 12px !important;\n  padding: 0 2px;\n  -webkit-user-modify: read-only;\n  -moz-user-modify: read-only;\n  -webkit-user-select: all;\n  -moz-user-select: all;\n  user-select: all;\n  width: 8px !important;\n}\n.mce-content-body .mce-item-anchor:not(:empty) {\n  background-position-x: 2px;\n  display: inline-block;\n  padding-left: 12px;\n}\n.mce-content-body .mce-item-anchor[data-mce-selected] {\n  outline-offset: 1px;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"]:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #ffe89d;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"][data-mce-annotation-active=\"true\"]:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment:not([data-mce-selected]) {\n  background-color: #ffe89d;\n  outline: none;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"]:not([data-mce-selected=\"inline-boundary\"]) {\n  background-color: #fed635;\n}\n.tox-checklist > li:not(.tox-checklist--hidden) {\n  list-style: none;\n  margin: 0.25em 0;\n}\n.tox-checklist > li:not(.tox-checklist--hidden)::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n  cursor: pointer;\n  height: 1em;\n  margin-left: -1.5em;\n  margin-top: 0.125em;\n  position: absolute;\n  width: 1em;\n}\n.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n}\n[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {\n  margin-left: 0;\n  margin-right: -1.5em;\n}\n/* stylelint-disable */\n/* http://prismjs.com/ */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n  color: black;\n  background: none;\n  text-shadow: 0 1px white;\n  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n  font-size: 1em;\n  text-align: left;\n  white-space: pre;\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: normal;\n  line-height: 1.5;\n  -moz-tab-size: 4;\n  tab-size: 4;\n  -webkit-hyphens: none;\n  hyphens: none;\n}\npre[class*=\"language-\"]::-moz-selection,\npre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection,\ncode[class*=\"language-\"] ::-moz-selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\npre[class*=\"language-\"]::selection,\npre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection,\ncode[class*=\"language-\"] ::selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n@media print {\n  code[class*=\"language-\"],\n  pre[class*=\"language-\"] {\n    text-shadow: none;\n  }\n}\n/* Code blocks */\npre[class*=\"language-\"] {\n  padding: 1em;\n  margin: 0.5em 0;\n  overflow: auto;\n}\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n  background: #f5f2f0;\n}\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n  padding: 0.1em;\n  border-radius: 0.3em;\n  white-space: normal;\n}\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n  color: slategray;\n}\n.token.punctuation {\n  color: #999;\n}\n.token.namespace {\n  opacity: 0.7;\n}\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n  color: #905;\n}\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n  color: #690;\n}\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n  color: #9a6e3a;\n  /* This background color was intended by the author of this theme. */\n  background: hsla(0, 0%, 100%, 0.5);\n}\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n  color: #07a;\n}\n.token.function,\n.token.class-name {\n  color: #DD4A68;\n}\n.token.regex,\n.token.important,\n.token.variable {\n  color: #e90;\n}\n.token.important,\n.token.bold {\n  font-weight: bold;\n}\n.token.italic {\n  font-style: italic;\n}\n.token.entity {\n  cursor: help;\n}\n/* stylelint-enable */\n.mce-content-body {\n  overflow-wrap: break-word;\n  word-wrap: break-word;\n}\n.mce-content-body .mce-visual-caret {\n  background-color: black;\n  background-color: currentColor;\n  position: absolute;\n}\n.mce-content-body .mce-visual-caret-hidden {\n  display: none;\n}\n.mce-content-body *[data-mce-caret] {\n  left: -1000px;\n  margin: 0;\n  padding: 0;\n  position: absolute;\n  right: auto;\n  top: 0;\n}\n.mce-content-body .mce-offscreen-selection {\n  left: -2000000px;\n  max-width: 1000000px;\n  position: absolute;\n}\n.mce-content-body *[contentEditable=false] {\n  cursor: default;\n}\n.mce-content-body *[contentEditable=true] {\n  cursor: text;\n}\n.tox-cursor-format-painter {\n  cursor: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\"), default;\n}\ndiv.mce-footnotes hr {\n  margin-inline-end: auto;\n  margin-inline-start: 0;\n  width: 25%;\n}\ndiv.mce-footnotes li > a.mce-footnotes-backlink {\n  text-decoration: none;\n}\n@media print {\n  sup.mce-footnote a {\n    color: black;\n    text-decoration: none;\n  }\n  div.mce-footnotes {\n    break-inside: avoid;\n    width: 100%;\n  }\n  div.mce-footnotes li > a.mce-footnotes-backlink {\n    display: none;\n  }\n}\n.mce-content-body figure.align-left {\n  float: left;\n}\n.mce-content-body figure.align-right {\n  float: right;\n}\n.mce-content-body figure.image.align-center {\n  display: table;\n  margin-left: auto;\n  margin-right: auto;\n}\n.mce-preview-object {\n  border: 1px solid gray;\n  display: inline-block;\n  line-height: 0;\n  margin: 0 2px 0 2px;\n  position: relative;\n}\n.mce-preview-object .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-preview-object[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.mce-content-body .mce-mergetag:hover {\n  background-color: rgba(0, 108, 231, 0.1);\n}\n.mce-content-body .mce-mergetag-affix {\n  background-color: rgba(0, 108, 231, 0.1);\n  color: #006ce7;\n}\n.mce-object {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n  border: 1px dashed #aaa;\n}\n.mce-pagebreak {\n  border: 1px dashed #aaa;\n  cursor: default;\n  display: block;\n  height: 5px;\n  margin-top: 15px;\n  page-break-before: always;\n  width: 100%;\n}\n@media print {\n  .mce-pagebreak {\n    border: 0;\n  }\n}\n.tiny-pageembed .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tiny-pageembed[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.tiny-pageembed {\n  display: inline-block;\n  position: relative;\n}\n.tiny-pageembed--21by9,\n.tiny-pageembed--16by9,\n.tiny-pageembed--4by3,\n.tiny-pageembed--1by1 {\n  display: block;\n  overflow: hidden;\n  padding: 0;\n  position: relative;\n  width: 100%;\n}\n.tiny-pageembed--21by9 {\n  padding-top: 42.857143%;\n}\n.tiny-pageembed--16by9 {\n  padding-top: 56.25%;\n}\n.tiny-pageembed--4by3 {\n  padding-top: 75%;\n}\n.tiny-pageembed--1by1 {\n  padding-top: 100%;\n}\n.tiny-pageembed--21by9 iframe,\n.tiny-pageembed--16by9 iframe,\n.tiny-pageembed--4by3 iframe,\n.tiny-pageembed--1by1 iframe {\n  border: 0;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-content-body[data-mce-placeholder] {\n  position: relative;\n}\n.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  color: rgba(34, 47, 62, 0.7);\n  content: attr(data-mce-placeholder);\n  position: absolute;\n}\n.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  left: 1px;\n}\n.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {\n  right: 1px;\n}\n.mce-content-body div.mce-resizehandle {\n  background-color: #4099ff;\n  border-color: #4099ff;\n  border-style: solid;\n  border-width: 1px;\n  box-sizing: border-box;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n  z-index: 1298;\n}\n.mce-content-body div.mce-resizehandle:hover {\n  background-color: #4099ff;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(1) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(2) {\n  cursor: nesw-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(3) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(4) {\n  cursor: nesw-resize;\n}\n.mce-content-body .mce-resize-backdrop {\n  z-index: 10000;\n}\n.mce-content-body .mce-clonedresizable {\n  cursor: default;\n  opacity: 0.5;\n  outline: 1px dashed black;\n  position: absolute;\n  z-index: 10001;\n}\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {\n  border: 0;\n}\n.mce-content-body .mce-resize-helper {\n  background: #555;\n  background: rgba(0, 0, 0, 0.75);\n  border: 1px;\n  border-radius: 3px;\n  color: white;\n  display: none;\n  font-family: sans-serif;\n  font-size: 12px;\n  line-height: 14px;\n  margin: 5px 10px;\n  padding: 5px;\n  position: absolute;\n  white-space: nowrap;\n  z-index: 10002;\n}\n.tox-rtc-user-selection {\n  position: relative;\n}\n.tox-rtc-user-cursor {\n  bottom: 0;\n  cursor: default;\n  position: absolute;\n  top: 0;\n  width: 2px;\n}\n.tox-rtc-user-cursor::before {\n  background-color: inherit;\n  border-radius: 50%;\n  content: '';\n  display: block;\n  height: 8px;\n  position: absolute;\n  right: -3px;\n  top: -3px;\n  width: 8px;\n}\n.tox-rtc-user-cursor:hover::after {\n  background-color: inherit;\n  border-radius: 100px;\n  box-sizing: border-box;\n  color: #fff;\n  content: attr(data-user);\n  display: block;\n  font-size: 12px;\n  font-weight: bold;\n  left: -5px;\n  min-height: 8px;\n  min-width: 8px;\n  padding: 0 12px;\n  position: absolute;\n  top: -11px;\n  white-space: nowrap;\n  z-index: 1000;\n}\n.tox-rtc-user-selection--1 .tox-rtc-user-cursor {\n  background-color: #2dc26b;\n}\n.tox-rtc-user-selection--2 .tox-rtc-user-cursor {\n  background-color: #e03e2d;\n}\n.tox-rtc-user-selection--3 .tox-rtc-user-cursor {\n  background-color: #f1c40f;\n}\n.tox-rtc-user-selection--4 .tox-rtc-user-cursor {\n  background-color: #3598db;\n}\n.tox-rtc-user-selection--5 .tox-rtc-user-cursor {\n  background-color: #b96ad9;\n}\n.tox-rtc-user-selection--6 .tox-rtc-user-cursor {\n  background-color: #e67e23;\n}\n.tox-rtc-user-selection--7 .tox-rtc-user-cursor {\n  background-color: #aaa69d;\n}\n.tox-rtc-user-selection--8 .tox-rtc-user-cursor {\n  background-color: #f368e0;\n}\n.tox-rtc-remote-image {\n  background: #eaeaea url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\") no-repeat center center;\n  border: 1px solid #ccc;\n  min-height: 240px;\n  min-width: 320px;\n}\n.mce-match-marker {\n  background: #aaa;\n  color: #fff;\n}\n.mce-match-marker-selected {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::-moz-selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-content-body img[data-mce-selected],\n.mce-content-body video[data-mce-selected],\n.mce-content-body audio[data-mce-selected],\n.mce-content-body object[data-mce-selected],\n.mce-content-body embed[data-mce-selected],\n.mce-content-body table[data-mce-selected] {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body hr[data-mce-selected] {\n  outline: 3px solid #b4d7ff;\n  outline-offset: 1px;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body *[contentEditable=false][data-mce-selected] {\n  cursor: not-allowed;\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,\n.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {\n  outline: none;\n}\n.mce-content-body *[data-mce-selected=\"inline-boundary\"] {\n  background-color: #b4d7ff;\n}\n.mce-content-body .mce-edit-focus {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body td[data-mce-selected],\n.mce-content-body th[data-mce-selected] {\n  position: relative;\n}\n.mce-content-body td[data-mce-selected]::-moz-selection,\n.mce-content-body th[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected]::selection,\n.mce-content-body th[data-mce-selected]::selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected] *,\n.mce-content-body th[data-mce-selected] * {\n  outline: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.mce-content-body td[data-mce-selected]::after,\n.mce-content-body th[data-mce-selected]::after {\n  background-color: rgba(180, 215, 255, 0.7);\n  border: 1px solid rgba(180, 215, 255, 0.7);\n  bottom: -1px;\n  content: '';\n  left: -1px;\n  mix-blend-mode: multiply;\n  position: absolute;\n  right: -1px;\n  top: -1px;\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .mce-content-body td[data-mce-selected]::after,\n  .mce-content-body th[data-mce-selected]::after {\n    border-color: rgba(0, 84, 180, 0.7);\n  }\n}\n.mce-content-body img[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body img[data-mce-selected]::selection {\n  background: none;\n}\n.ephox-snooker-resizer-bar {\n  background-color: #b4d7ff;\n  opacity: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n.ephox-snooker-resizer-cols {\n  cursor: col-resize;\n}\n.ephox-snooker-resizer-rows {\n  cursor: row-resize;\n}\n.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {\n  opacity: 1;\n}\n.mce-spellchecker-word {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n  height: 2rem;\n}\n.mce-spellchecker-grammar {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n}\n.mce-toc {\n  border: 1px solid gray;\n}\n.mce-toc h2 {\n  margin: 4px;\n}\n.mce-toc li {\n  list-style-type: none;\n}\ntable[style*=\"border-width: 0px\"],\n.mce-item-table:not([border]),\n.mce-item-table[border=\"0\"],\ntable[style*=\"border-width: 0px\"] td,\n.mce-item-table:not([border]) td,\n.mce-item-table[border=\"0\"] td,\ntable[style*=\"border-width: 0px\"] th,\n.mce-item-table:not([border]) th,\n.mce-item-table[border=\"0\"] th,\ntable[style*=\"border-width: 0px\"] caption,\n.mce-item-table:not([border]) caption,\n.mce-item-table[border=\"0\"] caption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks p,\n.mce-visualblocks h1,\n.mce-visualblocks h2,\n.mce-visualblocks h3,\n.mce-visualblocks h4,\n.mce-visualblocks h5,\n.mce-visualblocks h6,\n.mce-visualblocks div:not([data-mce-bogus]),\n.mce-visualblocks section,\n.mce-visualblocks article,\n.mce-visualblocks blockquote,\n.mce-visualblocks address,\n.mce-visualblocks pre,\n.mce-visualblocks figure,\n.mce-visualblocks figcaption,\n.mce-visualblocks hgroup,\n.mce-visualblocks aside,\n.mce-visualblocks ul,\n.mce-visualblocks ol,\n.mce-visualblocks dl {\n  background-repeat: no-repeat;\n  border: 1px dashed #bbb;\n  margin-left: 3px;\n  padding-top: 10px;\n}\n.mce-visualblocks p {\n  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);\n}\n.mce-visualblocks h1 {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);\n}\n.mce-visualblocks h2 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);\n}\n.mce-visualblocks h3 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);\n}\n.mce-visualblocks h4 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);\n}\n.mce-visualblocks h5 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);\n}\n.mce-visualblocks h6 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);\n}\n.mce-visualblocks div:not([data-mce-bogus]) {\n  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);\n}\n.mce-visualblocks section {\n  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);\n}\n.mce-visualblocks article {\n  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);\n}\n.mce-visualblocks blockquote {\n  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);\n}\n.mce-visualblocks address {\n  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);\n}\n.mce-visualblocks pre {\n  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);\n}\n.mce-visualblocks figure {\n  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);\n}\n.mce-visualblocks figcaption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks hgroup {\n  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);\n}\n.mce-visualblocks aside {\n  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);\n}\n.mce-visualblocks ul {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);\n}\n.mce-visualblocks ol {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);\n}\n.mce-visualblocks dl {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);\n}\n.mce-visualblocks:not([dir=rtl]) p,\n.mce-visualblocks:not([dir=rtl]) h1,\n.mce-visualblocks:not([dir=rtl]) h2,\n.mce-visualblocks:not([dir=rtl]) h3,\n.mce-visualblocks:not([dir=rtl]) h4,\n.mce-visualblocks:not([dir=rtl]) h5,\n.mce-visualblocks:not([dir=rtl]) h6,\n.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),\n.mce-visualblocks:not([dir=rtl]) section,\n.mce-visualblocks:not([dir=rtl]) article,\n.mce-visualblocks:not([dir=rtl]) blockquote,\n.mce-visualblocks:not([dir=rtl]) address,\n.mce-visualblocks:not([dir=rtl]) pre,\n.mce-visualblocks:not([dir=rtl]) figure,\n.mce-visualblocks:not([dir=rtl]) figcaption,\n.mce-visualblocks:not([dir=rtl]) hgroup,\n.mce-visualblocks:not([dir=rtl]) aside,\n.mce-visualblocks:not([dir=rtl]) ul,\n.mce-visualblocks:not([dir=rtl]) ol,\n.mce-visualblocks:not([dir=rtl]) dl {\n  margin-left: 3px;\n}\n.mce-visualblocks[dir=rtl] p,\n.mce-visualblocks[dir=rtl] h1,\n.mce-visualblocks[dir=rtl] h2,\n.mce-visualblocks[dir=rtl] h3,\n.mce-visualblocks[dir=rtl] h4,\n.mce-visualblocks[dir=rtl] h5,\n.mce-visualblocks[dir=rtl] h6,\n.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),\n.mce-visualblocks[dir=rtl] section,\n.mce-visualblocks[dir=rtl] article,\n.mce-visualblocks[dir=rtl] blockquote,\n.mce-visualblocks[dir=rtl] address,\n.mce-visualblocks[dir=rtl] pre,\n.mce-visualblocks[dir=rtl] figure,\n.mce-visualblocks[dir=rtl] figcaption,\n.mce-visualblocks[dir=rtl] hgroup,\n.mce-visualblocks[dir=rtl] aside,\n.mce-visualblocks[dir=rtl] ul,\n.mce-visualblocks[dir=rtl] ol,\n.mce-visualblocks[dir=rtl] dl {\n  background-position-x: right;\n  margin-right: 3px;\n}\n.mce-nbsp,\n.mce-shy {\n  background: #aaa;\n}\n.mce-shy::after {\n  content: '-';\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/oxide/content.mobile.css",
    "content": "/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n */\n.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection {\n  /* Note: this file is used inside the content, so isn't part of theming */\n  background-color: green;\n  display: inline-block;\n  opacity: 0.5;\n  position: absolute;\n}\nbody {\n  -webkit-text-size-adjust: none;\n}\nbody img {\n  /* this is related to the content margin */\n  max-width: 96vw;\n}\nbody table img {\n  max-width: 95%;\n}\nbody {\n  font-family: sans-serif;\n}\ntable {\n  border-collapse: collapse;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/oxide/skin.css",
    "content": ".tox {\n  box-shadow: none;\n  box-sizing: content-box;\n  color: #222f3e;\n  cursor: auto;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: normal;\n  -webkit-tap-highlight-color: transparent;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  vertical-align: initial;\n  white-space: normal;\n}\n.tox *:not(svg):not(rect) {\n  box-sizing: inherit;\n  color: inherit;\n  cursor: inherit;\n  direction: inherit;\n  font-family: inherit;\n  font-size: inherit;\n  font-style: inherit;\n  font-weight: inherit;\n  line-height: inherit;\n  -webkit-tap-highlight-color: inherit;\n  text-align: inherit;\n  text-decoration: inherit;\n  text-shadow: inherit;\n  text-transform: inherit;\n  vertical-align: inherit;\n  white-space: inherit;\n}\n.tox *:not(svg):not(rect) {\n  /* stylelint-disable-line no-duplicate-selectors */\n  background: transparent;\n  border: 0;\n  box-shadow: none;\n  float: none;\n  height: auto;\n  margin: 0;\n  max-width: none;\n  outline: 0;\n  padding: 0;\n  position: static;\n  width: auto;\n}\n.tox:not([dir=rtl]) {\n  direction: ltr;\n  text-align: left;\n}\n.tox[dir=rtl] {\n  direction: rtl;\n  text-align: right;\n}\n.tox-tinymce {\n  border: 2px solid #eeeeee;\n  border-radius: 10px;\n  box-shadow: none;\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: column;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  overflow: hidden;\n  position: relative;\n  visibility: inherit !important;\n}\n.tox.tox-tinymce-inline {\n  border: none;\n  box-shadow: none;\n  overflow: initial;\n}\n.tox.tox-tinymce-inline .tox-editor-container {\n  overflow: initial;\n}\n.tox.tox-tinymce-inline .tox-editor-header {\n  background-color: #fff;\n  border: 2px solid #eeeeee;\n  border-radius: 10px;\n  box-shadow: none;\n  overflow: hidden;\n}\n.tox-tinymce-aux {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  z-index: 1300;\n}\n.tox-tinymce *:focus,\n.tox-tinymce-aux *:focus {\n  outline: none;\n}\nbutton::-moz-focus-inner {\n  border: 0;\n}\n.tox[dir=rtl] .tox-icon--flip svg {\n  transform: rotateY(180deg);\n}\n.tox .accessibility-issue__header {\n  align-items: center;\n  display: flex;\n  margin-bottom: 4px;\n}\n.tox .accessibility-issue__description {\n  align-items: stretch;\n  border: 1px solid #eeeeee;\n  border-radius: 6px;\n  display: flex;\n  justify-content: space-between;\n}\n.tox .accessibility-issue__description > div {\n  padding-bottom: 4px;\n}\n.tox .accessibility-issue__description > div > div {\n  align-items: center;\n  display: flex;\n  margin-bottom: 4px;\n}\n.tox .accessibility-issue__description > *:last-child:not(:only-child) {\n  border-color: #eeeeee;\n  border-style: solid;\n}\n.tox .accessibility-issue__repair {\n  margin-top: 16px;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description {\n  background-color: rgba(0, 108, 231, 0.1);\n  border-color: #006ce7;\n  color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description > *:last-child {\n  border-color: #006ce7;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 {\n  color: #006ce7;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg {\n  fill: #006ce7;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon {\n  color: #006ce7;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description {\n  background-color: rgba(255, 165, 0, 0.1);\n  border-color: rgba(255, 165, 0, 0.5);\n  color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description > *:last-child {\n  border-color: rgba(255, 165, 0, 0.5);\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 {\n  color: #cc8500;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg {\n  fill: #cc8500;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon {\n  color: #cc8500;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description {\n  background-color: rgba(204, 0, 0, 0.1);\n  border-color: rgba(204, 0, 0, 0.4);\n  color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description > *:last-child {\n  border-color: rgba(204, 0, 0, 0.4);\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 {\n  color: #c00;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg {\n  fill: #c00;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon {\n  color: #c00;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description {\n  background-color: rgba(120, 171, 70, 0.1);\n  border-color: rgba(120, 171, 70, 0.4);\n  color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child {\n  border-color: rgba(120, 171, 70, 0.4);\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 {\n  color: #78AB46;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg {\n  fill: #78AB46;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon {\n  color: #78AB46;\n}\n.tox .tox-dialog__body-content .accessibility-issue__header h1,\n.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 {\n  margin-top: 0;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button {\n  margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {\n  margin-left: auto;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description {\n  padding: 4px 4px 4px 8px;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description > *:last-child {\n  border-left-width: 1px;\n  padding-left: 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button {\n  margin-right: 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {\n  margin-right: auto;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description {\n  padding: 4px 8px 4px 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description > *:last-child {\n  border-right-width: 1px;\n  padding-right: 4px;\n}\n.tox .tox-anchorbar {\n  display: flex;\n  flex: 0 0 auto;\n}\n.tox .tox-bar {\n  display: flex;\n  flex: 0 0 auto;\n}\n.tox .tox-button {\n  background-color: #006ce7;\n  background-image: none;\n  background-position: 0 0;\n  background-repeat: repeat;\n  border-color: #006ce7;\n  border-radius: 6px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  color: #fff;\n  cursor: pointer;\n  display: inline-block;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  line-height: 24px;\n  margin: 0;\n  outline: none;\n  padding: 4px 16px;\n  position: relative;\n  text-align: center;\n  text-decoration: none;\n  text-transform: none;\n  white-space: nowrap;\n}\n.tox .tox-button::before {\n  border-radius: 6px;\n  bottom: -1px;\n  box-shadow: inset 0 0 0 2px #fff, 0 0 0 1px #006ce7, 0 0 0 3px rgba(0, 108, 231, 0.25);\n  content: '';\n  left: -1px;\n  opacity: 0;\n  pointer-events: none;\n  position: absolute;\n  right: -1px;\n  top: -1px;\n}\n.tox .tox-button[disabled] {\n  background-color: #006ce7;\n  background-image: none;\n  border-color: #006ce7;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-button:focus:not(:disabled) {\n  background-color: #0060ce;\n  background-image: none;\n  border-color: #0060ce;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button:focus-visible:not(:disabled)::before {\n  opacity: 1;\n}\n.tox .tox-button:hover:not(:disabled) {\n  background-color: #0060ce;\n  background-image: none;\n  border-color: #0060ce;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button:active:not(:disabled) {\n  background-color: #0054b4;\n  background-image: none;\n  border-color: #0054b4;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--secondary {\n  background-color: #f0f0f0;\n  background-image: none;\n  background-position: 0 0;\n  background-repeat: repeat;\n  border-color: #f0f0f0;\n  border-radius: 6px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  color: #222f3e;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  outline: none;\n  padding: 4px 16px;\n  text-decoration: none;\n  text-transform: none;\n}\n.tox .tox-button--secondary[disabled] {\n  background-color: #f0f0f0;\n  background-image: none;\n  border-color: #f0f0f0;\n  box-shadow: none;\n  color: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-button--secondary:focus:not(:disabled) {\n  background-color: #e3e3e3;\n  background-image: none;\n  border-color: #e3e3e3;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-button--secondary:hover:not(:disabled) {\n  background-color: #e3e3e3;\n  background-image: none;\n  border-color: #e3e3e3;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-button--secondary:active:not(:disabled) {\n  background-color: #d6d6d6;\n  background-image: none;\n  border-color: #d6d6d6;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-button--icon,\n.tox .tox-button.tox-button--icon,\n.tox .tox-button.tox-button--secondary.tox-button--icon {\n  padding: 4px;\n}\n.tox .tox-button--icon .tox-icon svg,\n.tox .tox-button.tox-button--icon .tox-icon svg,\n.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg {\n  display: block;\n  fill: currentColor;\n}\n.tox .tox-button-link {\n  background: 0;\n  border: none;\n  box-sizing: border-box;\n  cursor: pointer;\n  display: inline-block;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  font-weight: normal;\n  line-height: 1.3;\n  margin: 0;\n  padding: 0;\n  white-space: nowrap;\n}\n.tox .tox-button-link--sm {\n  font-size: 14px;\n}\n.tox .tox-button--naked {\n  background-color: transparent;\n  border-color: transparent;\n  box-shadow: unset;\n  color: #222f3e;\n}\n.tox .tox-button--naked[disabled] {\n  background-color: rgba(34, 47, 62, 0.12);\n  border-color: transparent;\n  box-shadow: unset;\n  color: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-button--naked:hover:not(:disabled) {\n  background-color: rgba(34, 47, 62, 0.12);\n  border-color: transparent;\n  box-shadow: unset;\n  color: #222f3e;\n}\n.tox .tox-button--naked:focus:not(:disabled) {\n  background-color: rgba(34, 47, 62, 0.12);\n  border-color: transparent;\n  box-shadow: unset;\n  color: #222f3e;\n}\n.tox .tox-button--naked:active:not(:disabled) {\n  background-color: rgba(34, 47, 62, 0.18);\n  border-color: transparent;\n  box-shadow: unset;\n  color: #222f3e;\n}\n.tox .tox-button--naked .tox-icon svg {\n  fill: currentColor;\n}\n.tox .tox-button--naked.tox-button--icon:hover:not(:disabled) {\n  color: #222f3e;\n}\n.tox .tox-checkbox {\n  align-items: center;\n  border-radius: 6px;\n  cursor: pointer;\n  display: flex;\n  height: 36px;\n  min-width: 36px;\n}\n.tox .tox-checkbox__input {\n  /* Hide from view but visible to screen readers */\n  height: 1px;\n  overflow: hidden;\n  position: absolute;\n  top: auto;\n  width: 1px;\n}\n.tox .tox-checkbox__icons {\n  align-items: center;\n  border-radius: 6px;\n  box-shadow: 0 0 0 2px transparent;\n  box-sizing: content-box;\n  display: flex;\n  height: 24px;\n  justify-content: center;\n  padding: calc(4px - 1px);\n  width: 24px;\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  display: block;\n  fill: rgba(34, 47, 62, 0.3);\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n  display: none;\n  fill: #006ce7;\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n  display: none;\n  fill: #006ce7;\n}\n.tox .tox-checkbox--disabled {\n  color: rgba(34, 47, 62, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  display: none;\n}\n.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n  display: block;\n}\n.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  display: none;\n}\n.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n  display: block;\n}\n.tox input.tox-checkbox__input:focus + .tox-checkbox__icons {\n  border-radius: 6px;\n  box-shadow: inset 0 0 0 1px #006ce7;\n  padding: calc(4px - 1px);\n}\n.tox:not([dir=rtl]) .tox-checkbox__label {\n  margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-checkbox__input {\n  left: -10000px;\n}\n.tox:not([dir=rtl]) .tox-bar .tox-checkbox {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-checkbox__label {\n  margin-right: 4px;\n}\n.tox[dir=rtl] .tox-checkbox__input {\n  right: -10000px;\n}\n.tox[dir=rtl] .tox-bar .tox-checkbox {\n  margin-right: 4px;\n}\n.tox {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox .tox-collection--toolbar .tox-collection__group {\n  display: flex;\n  padding: 0;\n}\n.tox .tox-collection--grid .tox-collection__group {\n  display: flex;\n  flex-wrap: wrap;\n  max-height: 208px;\n  overflow-x: hidden;\n  overflow-y: auto;\n  padding: 0;\n}\n.tox .tox-collection--list .tox-collection__group {\n  border-bottom-width: 0;\n  border-color: #e3e3e3;\n  border-left-width: 0;\n  border-right-width: 0;\n  border-style: solid;\n  border-top-width: 1px;\n  padding: 4px 0;\n}\n.tox .tox-collection--list .tox-collection__group:first-child {\n  border-top-width: 0;\n}\n.tox .tox-collection__group-heading {\n  background-color: #fcfcfc;\n  color: rgba(34, 47, 62, 0.7);\n  cursor: default;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  margin-bottom: 4px;\n  margin-top: -4px;\n  padding: 4px 8px;\n  text-transform: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.tox .tox-collection__item {\n  align-items: center;\n  border-radius: 3px;\n  color: #222f3e;\n  display: flex;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.tox .tox-collection--list .tox-collection__item {\n  padding: 4px 8px;\n}\n.tox .tox-collection--toolbar .tox-collection__item {\n  border-radius: 3px;\n  padding: 4px;\n}\n.tox .tox-collection--grid .tox-collection__item {\n  border-radius: 3px;\n  padding: 4px;\n}\n.tox .tox-collection--list .tox-collection__item--enabled {\n  background-color: #fff;\n  color: #222f3e;\n}\n.tox .tox-collection--list .tox-collection__item--active {\n  background-color: #cce2fa;\n}\n.tox .tox-collection--toolbar .tox-collection__item--enabled {\n  background-color: #a6ccf7;\n  color: #222f3e;\n}\n.tox .tox-collection--toolbar .tox-collection__item--active {\n  background-color: #cce2fa;\n}\n.tox .tox-collection--grid .tox-collection__item--enabled {\n  background-color: #a6ccf7;\n  color: #222f3e;\n}\n.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n  background-color: #cce2fa;\n  color: #222f3e;\n}\n.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n  color: #222f3e;\n}\n.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n  color: #222f3e;\n}\n.tox .tox-collection__item-icon,\n.tox .tox-collection__item-checkmark {\n  align-items: center;\n  display: flex;\n  height: 24px;\n  justify-content: center;\n  width: 24px;\n}\n.tox .tox-collection__item-icon svg,\n.tox .tox-collection__item-checkmark svg {\n  fill: currentColor;\n}\n.tox .tox-collection--toolbar-lg .tox-collection__item-icon {\n  height: 48px;\n  width: 48px;\n}\n.tox .tox-collection__item-label {\n  color: currentColor;\n  display: inline-block;\n  flex: 1;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 24px;\n  text-transform: none;\n  word-break: break-all;\n}\n.tox .tox-collection__item-accessory {\n  color: rgba(34, 47, 62, 0.7);\n  display: inline-block;\n  font-size: 14px;\n  height: 24px;\n  line-height: 24px;\n  text-transform: none;\n}\n.tox .tox-collection__item-caret {\n  align-items: center;\n  display: flex;\n  min-height: 24px;\n}\n.tox .tox-collection__item-caret::after {\n  content: '';\n  font-size: 0;\n  min-height: inherit;\n}\n.tox .tox-collection__item-caret svg {\n  fill: #222f3e;\n}\n.tox .tox-collection__item--state-disabled {\n  background-color: transparent;\n  color: rgba(34, 47, 62, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg {\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg {\n  display: none;\n}\n.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark {\n  display: none;\n}\n.tox .tox-collection--horizontal {\n  background-color: #fff;\n  border: 1px solid #e3e3e3;\n  border-radius: 6px;\n  box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n  display: flex;\n  flex: 0 0 auto;\n  flex-shrink: 0;\n  flex-wrap: nowrap;\n  margin-bottom: 0;\n  overflow-x: auto;\n  padding: 0;\n}\n.tox .tox-collection--horizontal .tox-collection__group {\n  align-items: center;\n  display: flex;\n  flex-wrap: nowrap;\n  margin: 0;\n  padding: 0 4px;\n}\n.tox .tox-collection--horizontal .tox-collection__item {\n  height: 28px;\n  margin: 6px 1px 5px 0;\n  padding: 0 4px;\n}\n.tox .tox-collection--horizontal .tox-collection__item-label {\n  white-space: nowrap;\n}\n.tox .tox-collection--horizontal .tox-collection__item-caret {\n  margin-left: 4px;\n}\n.tox .tox-collection__item-container {\n  display: flex;\n}\n.tox .tox-collection__item-container--row {\n  align-items: center;\n  flex: 1 1 auto;\n  flex-direction: row;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--align-left {\n  margin-right: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--align-right {\n  justify-content: flex-end;\n  margin-left: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top {\n  align-items: flex-start;\n  margin-bottom: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle {\n  align-items: center;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom {\n  align-items: flex-end;\n  margin-top: auto;\n}\n.tox .tox-collection__item-container--column {\n  align-self: center;\n  flex: 1 1 auto;\n  flex-direction: column;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--align-left {\n  align-items: flex-start;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--align-right {\n  align-items: flex-end;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top {\n  align-self: flex-start;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle {\n  align-self: center;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom {\n  align-self: flex-end;\n}\n.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {\n  border-right: 1px solid transparent;\n}\n.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) {\n  margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {\n  margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-collection__item-accessory {\n  margin-left: 16px;\n  text-align: right;\n}\n.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret {\n  margin-left: 16px;\n}\n.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {\n  border-left: 1px solid transparent;\n}\n.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) {\n  margin-right: 8px;\n}\n.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {\n  margin-right: 4px;\n}\n.tox[dir=rtl] .tox-collection__item-accessory {\n  margin-right: 16px;\n  text-align: left;\n}\n.tox[dir=rtl] .tox-collection .tox-collection__item-caret {\n  margin-right: 16px;\n  transform: rotateY(180deg);\n}\n.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret {\n  margin-right: 4px;\n}\n.tox .tox-color-picker-container {\n  display: flex;\n  flex-direction: row;\n  height: 225px;\n  margin: 0;\n}\n.tox .tox-sv-palette {\n  box-sizing: border-box;\n  display: flex;\n  height: 100%;\n}\n.tox .tox-sv-palette-spectrum {\n  height: 100%;\n}\n.tox .tox-sv-palette,\n.tox .tox-sv-palette-spectrum {\n  width: 225px;\n}\n.tox .tox-sv-palette-thumb {\n  background: none;\n  border: 1px solid black;\n  border-radius: 50%;\n  box-sizing: content-box;\n  height: 12px;\n  position: absolute;\n  width: 12px;\n}\n.tox .tox-sv-palette-inner-thumb {\n  border: 1px solid white;\n  border-radius: 50%;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n}\n.tox .tox-hue-slider {\n  box-sizing: border-box;\n  height: 100%;\n  width: 25px;\n}\n.tox .tox-hue-slider-spectrum {\n  background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00);\n  height: 100%;\n  width: 100%;\n}\n.tox .tox-hue-slider,\n.tox .tox-hue-slider-spectrum {\n  width: 20px;\n}\n.tox .tox-hue-slider-thumb {\n  background: white;\n  border: 1px solid black;\n  box-sizing: content-box;\n  height: 4px;\n  width: 100%;\n}\n.tox .tox-rgb-form {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n}\n.tox .tox-rgb-form div {\n  align-items: center;\n  display: flex;\n  justify-content: space-between;\n  margin-bottom: 5px;\n  width: inherit;\n}\n.tox .tox-rgb-form input {\n  width: 6em;\n}\n.tox .tox-rgb-form input.tox-invalid {\n  /* Need !important to override Chrome's focus styling unfortunately */\n  border: 1px solid red !important;\n}\n.tox .tox-rgb-form .tox-rgba-preview {\n  border: 1px solid black;\n  flex-grow: 2;\n  margin-bottom: 0;\n}\n.tox:not([dir=rtl]) .tox-sv-palette {\n  margin-right: 15px;\n}\n.tox:not([dir=rtl]) .tox-hue-slider {\n  margin-right: 15px;\n}\n.tox:not([dir=rtl]) .tox-hue-slider-thumb {\n  margin-left: -1px;\n}\n.tox:not([dir=rtl]) .tox-rgb-form label {\n  margin-right: 0.5em;\n}\n.tox[dir=rtl] .tox-sv-palette {\n  margin-left: 15px;\n}\n.tox[dir=rtl] .tox-hue-slider {\n  margin-left: 15px;\n}\n.tox[dir=rtl] .tox-hue-slider-thumb {\n  margin-right: -1px;\n}\n.tox[dir=rtl] .tox-rgb-form label {\n  margin-left: 0.5em;\n}\n.tox .tox-toolbar .tox-swatches,\n.tox .tox-toolbar__primary .tox-swatches,\n.tox .tox-toolbar__overflow .tox-swatches {\n  margin: 5px 0 6px 11px;\n}\n.tox .tox-collection--list .tox-collection__group .tox-swatches-menu {\n  border: 0;\n  margin: -4px -4px;\n}\n.tox .tox-swatches__row {\n  display: flex;\n}\n.tox .tox-swatch {\n  height: 30px;\n  transition: transform 0.15s, box-shadow 0.15s;\n  width: 30px;\n}\n.tox .tox-swatch:hover,\n.tox .tox-swatch:focus {\n  box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset;\n  transform: scale(0.8);\n}\n.tox .tox-swatch--remove {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n}\n.tox .tox-swatch--remove svg path {\n  stroke: #e74c3c;\n}\n.tox .tox-swatches__picker-btn {\n  align-items: center;\n  background-color: transparent;\n  border: 0;\n  cursor: pointer;\n  display: flex;\n  height: 30px;\n  justify-content: center;\n  outline: none;\n  padding: 0;\n  width: 30px;\n}\n.tox .tox-swatches__picker-btn svg {\n  fill: #222f3e;\n  height: 24px;\n  width: 24px;\n}\n.tox .tox-swatches__picker-btn:hover {\n  background: #cce2fa;\n}\n.tox:not([dir=rtl]) .tox-swatches__picker-btn {\n  margin-left: auto;\n}\n.tox[dir=rtl] .tox-swatches__picker-btn {\n  margin-right: auto;\n}\n.tox .tox-comment-thread {\n  background: #fff;\n  position: relative;\n}\n.tox .tox-comment-thread > *:not(:first-child) {\n  margin-top: 8px;\n}\n.tox .tox-comment {\n  background: #fff;\n  border: 1px solid #eeeeee;\n  border-radius: 6px;\n  box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1);\n  padding: 8px 8px 16px 8px;\n  position: relative;\n}\n.tox .tox-comment__header {\n  align-items: center;\n  color: #222f3e;\n  display: flex;\n  justify-content: space-between;\n}\n.tox .tox-comment__date {\n  color: #222f3e;\n  font-size: 12px;\n  line-height: 18px;\n}\n.tox .tox-comment__body {\n  color: #222f3e;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  margin-top: 8px;\n  position: relative;\n  text-transform: initial;\n}\n.tox .tox-comment__body textarea {\n  resize: none;\n  white-space: normal;\n  width: 100%;\n}\n.tox .tox-comment__expander {\n  padding-top: 8px;\n}\n.tox .tox-comment__expander p {\n  color: rgba(34, 47, 62, 0.7);\n  font-size: 14px;\n  font-style: normal;\n}\n.tox .tox-comment__body p {\n  margin: 0;\n}\n.tox .tox-comment__buttonspacing {\n  padding-top: 16px;\n  text-align: center;\n}\n.tox .tox-comment-thread__overlay::after {\n  background: #fff;\n  bottom: 0;\n  content: \"\";\n  display: flex;\n  left: 0;\n  opacity: 0.9;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 5;\n}\n.tox .tox-comment__reply {\n  display: flex;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  margin-top: 8px;\n}\n.tox .tox-comment__reply > *:first-child {\n  margin-bottom: 8px;\n  width: 100%;\n}\n.tox .tox-comment__edit {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  margin-top: 16px;\n}\n.tox .tox-comment__gradient::after {\n  background: linear-gradient(rgba(255, 255, 255, 0), #fff);\n  bottom: 0;\n  content: \"\";\n  display: block;\n  height: 5em;\n  margin-top: -40px;\n  position: absolute;\n  width: 100%;\n}\n.tox .tox-comment__overlay {\n  background: #fff;\n  bottom: 0;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  left: 0;\n  opacity: 0.9;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 0;\n  z-index: 5;\n}\n.tox .tox-comment__loading-text {\n  align-items: center;\n  color: #222f3e;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n}\n.tox .tox-comment__loading-text > div {\n  padding-bottom: 16px;\n}\n.tox .tox-comment__overlaytext {\n  bottom: 0;\n  flex-direction: column;\n  font-size: 14px;\n  left: 0;\n  padding: 1em;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 10;\n}\n.tox .tox-comment__overlaytext p {\n  background-color: #fff;\n  box-shadow: 0 0 8px 8px #fff;\n  color: #222f3e;\n  text-align: center;\n}\n.tox .tox-comment__overlaytext div:nth-of-type(2) {\n  font-size: 0.8em;\n}\n.tox .tox-comment__busy-spinner {\n  align-items: center;\n  background-color: #fff;\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 20;\n}\n.tox .tox-comment__scroll {\n  display: flex;\n  flex-direction: column;\n  flex-shrink: 1;\n  overflow: auto;\n}\n.tox .tox-conversations {\n  margin: 8px;\n}\n.tox:not([dir=rtl]) .tox-comment__edit {\n  margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child,\n.tox:not([dir=rtl]) .tox-comment__edit > *:last-child,\n.tox:not([dir=rtl]) .tox-comment__reply > *:last-child {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-comment__edit {\n  margin-right: 8px;\n}\n.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child,\n.tox[dir=rtl] .tox-comment__edit > *:last-child,\n.tox[dir=rtl] .tox-comment__reply > *:last-child {\n  margin-right: 8px;\n}\n.tox .tox-user {\n  align-items: center;\n  display: flex;\n}\n.tox .tox-user__avatar svg {\n  fill: rgba(34, 47, 62, 0.7);\n}\n.tox .tox-user__avatar img {\n  border-radius: 50%;\n  height: 36px;\n  object-fit: cover;\n  vertical-align: middle;\n  width: 36px;\n}\n.tox .tox-user__name {\n  color: #222f3e;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: bold;\n  line-height: 18px;\n  text-transform: none;\n}\n.tox:not([dir=rtl]) .tox-user__avatar svg,\n.tox:not([dir=rtl]) .tox-user__avatar img {\n  margin-right: 8px;\n}\n.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-user__avatar svg,\n.tox[dir=rtl] .tox-user__avatar img {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-user__avatar + .tox-user__name {\n  margin-right: 8px;\n}\n.tox .tox-dialog-wrap {\n  align-items: center;\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: fixed;\n  right: 0;\n  top: 0;\n  z-index: 1100;\n}\n.tox .tox-dialog-wrap__backdrop {\n  background-color: rgba(255, 255, 255, 0.75);\n  bottom: 0;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 1;\n}\n.tox .tox-dialog-wrap__backdrop--opaque {\n  background-color: #fff;\n}\n.tox .tox-dialog {\n  background-color: #fff;\n  border-color: #eeeeee;\n  border-radius: 10px;\n  border-style: solid;\n  border-width: 0px;\n  box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15);\n  display: flex;\n  flex-direction: column;\n  max-height: 100%;\n  max-width: 480px;\n  overflow: hidden;\n  position: relative;\n  width: 95vw;\n  z-index: 2;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox .tox-dialog {\n    align-self: flex-start;\n    margin: 8px auto;\n    max-height: calc(100vh - 8px * 2);\n    width: calc(100vw - 16px);\n  }\n}\n.tox .tox-dialog-inline {\n  z-index: 1100;\n}\n.tox .tox-dialog__header {\n  align-items: center;\n  background-color: #fff;\n  border-bottom: none;\n  color: #222f3e;\n  display: flex;\n  font-size: 16px;\n  justify-content: space-between;\n  padding: 8px 16px 0 16px;\n  position: relative;\n}\n.tox .tox-dialog__header .tox-button {\n  z-index: 1;\n}\n.tox .tox-dialog__draghandle {\n  cursor: grab;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tox .tox-dialog__draghandle:active {\n  cursor: grabbing;\n}\n.tox .tox-dialog__dismiss {\n  margin-left: auto;\n}\n.tox .tox-dialog__title {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 20px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  margin: 0;\n  text-transform: none;\n}\n.tox .tox-dialog__body {\n  color: #222f3e;\n  display: flex;\n  flex: 1;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  min-width: 0;\n  text-align: left;\n  text-transform: none;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox .tox-dialog__body {\n    flex-direction: column;\n  }\n}\n.tox .tox-dialog__body-nav {\n  align-items: flex-start;\n  display: flex;\n  flex-direction: column;\n  padding: 16px 16px;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox .tox-dialog__body-nav {\n    flex-direction: row;\n    -webkit-overflow-scrolling: touch;\n    overflow-x: auto;\n    padding-bottom: 0;\n  }\n}\n.tox .tox-dialog__body-nav-item {\n  border-bottom: 2px solid transparent;\n  color: rgba(34, 47, 62, 0.7);\n  display: inline-block;\n  font-size: 14px;\n  line-height: 1.3;\n  margin-bottom: 8px;\n  text-decoration: none;\n  white-space: nowrap;\n}\n.tox .tox-dialog__body-nav-item:focus {\n  background-color: rgba(0, 108, 231, 0.1);\n}\n.tox .tox-dialog__body-nav-item--active {\n  border-bottom: 2px solid #006ce7;\n  color: #006ce7;\n}\n.tox .tox-dialog__body-content {\n  box-sizing: border-box;\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  max-height: 650px;\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n  padding: 16px 16px;\n}\n.tox .tox-dialog__body-content > * {\n  margin-bottom: 0;\n  margin-top: 16px;\n}\n.tox .tox-dialog__body-content > *:first-child {\n  margin-top: 0;\n}\n.tox .tox-dialog__body-content > *:last-child {\n  margin-bottom: 0;\n}\n.tox .tox-dialog__body-content > *:only-child {\n  margin-bottom: 0;\n  margin-top: 0;\n}\n.tox .tox-dialog__body-content a {\n  color: #006ce7;\n  cursor: pointer;\n  text-decoration: none;\n}\n.tox .tox-dialog__body-content a:hover,\n.tox .tox-dialog__body-content a:focus {\n  color: #0054b4;\n  text-decoration: none;\n}\n.tox .tox-dialog__body-content a:active {\n  color: #0054b4;\n  text-decoration: none;\n}\n.tox .tox-dialog__body-content svg {\n  fill: #222f3e;\n}\n.tox .tox-dialog__body-content ul {\n  display: block;\n  list-style-type: disc;\n  margin-bottom: 16px;\n  margin-inline-end: 0;\n  margin-inline-start: 0;\n  padding-inline-start: 2.5rem;\n}\n.tox .tox-dialog__body-content .tox-form__group h1 {\n  color: #222f3e;\n  font-size: 20px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  margin-bottom: 16px;\n  margin-top: 2rem;\n  text-transform: none;\n}\n.tox .tox-dialog__body-content .tox-form__group h2 {\n  color: #222f3e;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  margin-bottom: 16px;\n  margin-top: 2rem;\n  text-transform: none;\n}\n.tox .tox-dialog__body-content .tox-form__group p {\n  margin-bottom: 16px;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:first-child,\n.tox .tox-dialog__body-content .tox-form__group h2:first-child,\n.tox .tox-dialog__body-content .tox-form__group p:first-child {\n  margin-top: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:last-child,\n.tox .tox-dialog__body-content .tox-form__group h2:last-child,\n.tox .tox-dialog__body-content .tox-form__group p:last-child {\n  margin-bottom: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:only-child,\n.tox .tox-dialog__body-content .tox-form__group h2:only-child,\n.tox .tox-dialog__body-content .tox-form__group p:only-child {\n  margin-bottom: 0;\n  margin-top: 0;\n}\n.tox .tox-dialog--width-lg {\n  height: 650px;\n  max-width: 1200px;\n}\n.tox .tox-dialog--width-md {\n  max-width: 800px;\n}\n.tox .tox-dialog--width-md .tox-dialog__body-content {\n  overflow: auto;\n}\n.tox .tox-dialog__body-content--centered {\n  text-align: center;\n}\n.tox .tox-dialog__footer {\n  align-items: center;\n  background-color: #fff;\n  border-top: none;\n  display: flex;\n  justify-content: space-between;\n  padding: 8px 16px;\n}\n.tox .tox-dialog__footer-start,\n.tox .tox-dialog__footer-end {\n  display: flex;\n}\n.tox .tox-dialog__busy-spinner {\n  align-items: center;\n  background-color: rgba(255, 255, 255, 0.75);\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 3;\n}\n.tox .tox-dialog__table {\n  border-collapse: collapse;\n  width: 100%;\n}\n.tox .tox-dialog__table thead th {\n  font-weight: bold;\n  padding-bottom: 8px;\n}\n.tox .tox-dialog__table tbody tr {\n  border-bottom: 1px solid #eeeeee;\n}\n.tox .tox-dialog__table tbody tr:last-child {\n  border-bottom: none;\n}\n.tox .tox-dialog__table td {\n  padding-bottom: 8px;\n  padding-top: 8px;\n}\n.tox .tox-dialog__iframe.tox-dialog__iframe--opaque {\n  background: #fff;\n}\n.tox .tox-dialog__popups {\n  position: absolute;\n  width: 100%;\n  z-index: 1100;\n}\n.tox .tox-dialog__body-iframe {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.tox .tox-dialog__body-iframe .tox-navobj {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) {\n  flex: 1;\n  height: 100%;\n}\n.tox .tox-dialog-dock-fadeout {\n  opacity: 0;\n  visibility: hidden;\n}\n.tox .tox-dialog-dock-fadein {\n  opacity: 1;\n  visibility: visible;\n}\n.tox .tox-dialog-dock-transition {\n  transition: visibility 0s linear 0.3s, opacity 0.3s ease;\n}\n.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein {\n  transition-delay: 0s;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav {\n    margin-right: 0;\n  }\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) {\n    margin-left: 8px;\n  }\n}\n.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *,\n.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-dialog__body {\n  text-align: right;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav {\n    margin-left: 0;\n  }\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) {\n    margin-right: 8px;\n  }\n}\n.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *,\n.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * {\n  margin-right: 8px;\n}\nbody.tox-dialog__disable-scroll {\n  overflow: hidden;\n}\n.tox .tox-dropzone-container {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-dropzone {\n  align-items: center;\n  background: #fff;\n  border: 2px dashed #eeeeee;\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  justify-content: center;\n  min-height: 100px;\n  padding: 10px;\n}\n.tox .tox-dropzone p {\n  color: rgba(34, 47, 62, 0.7);\n  margin: 0 0 16px 0;\n}\n.tox .tox-edit-area {\n  display: flex;\n  flex: 1;\n  overflow: hidden;\n  position: relative;\n}\n.tox .tox-edit-area__iframe {\n  background-color: #fff;\n  border: 0;\n  box-sizing: border-box;\n  flex: 1;\n  height: 100%;\n  position: absolute;\n  width: 100%;\n}\n.tox.tox-inline-edit-area {\n  border: 1px dotted #eeeeee;\n}\n.tox .tox-editor-container {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  overflow: hidden;\n}\n.tox .tox-editor-header {\n  display: grid;\n  grid-template-columns: 1fr min-content;\n  z-index: 1;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header {\n  background-color: #fff;\n  border-bottom: none;\n  box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.1), 0 8px 8px -4px rgba(34, 47, 62, 0.07);\n  padding: 4px 0;\n  transition: box-shadow 0.5s;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header {\n  border-top: 1px solid #e3e3e3;\n  box-shadow: none;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header {\n  background-color: #fff;\n  box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.2), 0 8px 8px -4px rgba(34, 47, 62, 0.15);\n  padding: 4px 0;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header {\n  box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.2), 0 8px 8px -4px rgba(34, 47, 62, 0.15);\n}\n.tox-editor-dock-fadeout {\n  opacity: 0;\n  visibility: hidden;\n}\n.tox-editor-dock-fadein {\n  opacity: 1;\n  visibility: visible;\n}\n.tox-editor-dock-transition {\n  transition: visibility 0s linear 0.25s, opacity 0.25s ease;\n}\n.tox-editor-dock-transition.tox-editor-dock-fadein {\n  transition-delay: 0s;\n}\n.tox .tox-control-wrap {\n  flex: 1;\n  position: relative;\n}\n.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,\n.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,\n.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid {\n  display: none;\n}\n.tox .tox-control-wrap svg {\n  display: block;\n}\n.tox .tox-control-wrap__status-icon-wrap {\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox .tox-control-wrap__status-icon-invalid svg {\n  fill: #c00;\n}\n.tox .tox-control-wrap__status-icon-unknown svg {\n  fill: orange;\n}\n.tox .tox-control-wrap__status-icon-valid svg {\n  fill: green;\n}\n.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,\n.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,\n.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield {\n  padding-right: 32px;\n}\n.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap {\n  right: 4px;\n}\n.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,\n.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,\n.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield {\n  padding-left: 32px;\n}\n.tox[dir=rtl] .tox-control-wrap__status-icon-wrap {\n  left: 4px;\n}\n.tox .tox-autocompleter {\n  max-width: 25em;\n}\n.tox .tox-autocompleter .tox-menu {\n  box-sizing: border-box;\n  max-width: 25em;\n}\n.tox .tox-autocompleter .tox-autocompleter-highlight {\n  font-weight: bold;\n}\n.tox .tox-color-input {\n  display: flex;\n  position: relative;\n  z-index: 1;\n}\n.tox .tox-color-input .tox-textfield {\n  z-index: -1;\n}\n.tox .tox-color-input span {\n  border-color: rgba(34, 47, 62, 0.2);\n  border-radius: 6px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  height: 24px;\n  position: absolute;\n  top: 6px;\n  width: 24px;\n}\n.tox .tox-color-input span:hover:not([aria-disabled=true]),\n.tox .tox-color-input span:focus:not([aria-disabled=true]) {\n  border-color: #006ce7;\n  cursor: pointer;\n}\n.tox .tox-color-input span::before {\n  background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%);\n  background-position: 0 0, 0 6px, 6px -6px, -6px 0;\n  background-size: 12px 12px;\n  border: 1px solid #fff;\n  border-radius: 6px;\n  box-sizing: border-box;\n  content: '';\n  height: 24px;\n  left: -1px;\n  position: absolute;\n  top: -1px;\n  width: 24px;\n  z-index: -1;\n}\n.tox .tox-color-input span[aria-disabled=true] {\n  cursor: not-allowed;\n}\n.tox:not([dir=rtl]) .tox-color-input {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox:not([dir=rtl]) .tox-color-input .tox-textfield {\n  padding-left: 36px;\n}\n.tox:not([dir=rtl]) .tox-color-input span {\n  left: 6px;\n}\n.tox[dir=\"rtl\"] .tox-color-input {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox[dir=\"rtl\"] .tox-color-input .tox-textfield {\n  padding-right: 36px;\n}\n.tox[dir=\"rtl\"] .tox-color-input span {\n  right: 6px;\n}\n.tox .tox-label,\n.tox .tox-toolbar-label {\n  color: rgba(34, 47, 62, 0.7);\n  display: block;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  padding: 0 8px 0 0;\n  text-transform: none;\n  white-space: nowrap;\n}\n.tox .tox-toolbar-label {\n  padding: 0 8px;\n}\n.tox[dir=rtl] .tox-label {\n  padding: 0 0 0 8px;\n}\n.tox .tox-form {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.tox .tox-form__group {\n  box-sizing: border-box;\n  margin-bottom: 4px;\n}\n.tox .tox-form-group--maximize {\n  flex: 1;\n}\n.tox .tox-form__group--error {\n  color: #c00;\n}\n.tox .tox-form__group--collection {\n  display: flex;\n}\n.tox .tox-form__grid {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n}\n.tox .tox-form__grid--2col > .tox-form__group {\n  width: calc(50% - (8px / 2));\n}\n.tox .tox-form__grid--3col > .tox-form__group {\n  width: calc(100% / 3 - (8px / 2));\n}\n.tox .tox-form__grid--4col > .tox-form__group {\n  width: calc(25% - (8px / 2));\n}\n.tox .tox-form__controls-h-stack {\n  align-items: center;\n  display: flex;\n}\n.tox .tox-form__group--inline {\n  align-items: center;\n  display: flex;\n}\n.tox .tox-form__group--stretched {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.tox .tox-form__group--stretched .tox-textarea {\n  flex: 1;\n}\n.tox .tox-form__group--stretched .tox-navobj {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-form__group--stretched .tox-navobj :nth-child(2) {\n  flex: 1;\n  height: 100%;\n}\n.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) {\n  margin-right: 4px;\n}\n.tox .tox-lock.tox-locked .tox-lock-icon__unlock,\n.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock {\n  display: none;\n}\n.tox .tox-textfield,\n.tox .tox-toolbar-textfield,\n.tox .tox-listboxfield .tox-listbox--select,\n.tox .tox-textarea {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  background-color: #fff;\n  border-color: #eeeeee;\n  border-radius: 6px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  color: #222f3e;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  line-height: 24px;\n  margin: 0;\n  min-height: 34px;\n  outline: none;\n  padding: 5px 5.5px;\n  resize: none;\n  width: 100%;\n}\n.tox .tox-textfield[disabled],\n.tox .tox-textarea[disabled] {\n  background-color: #f2f2f2;\n  color: rgba(34, 47, 62, 0.85);\n  cursor: not-allowed;\n}\n.tox .tox-textfield:focus,\n.tox .tox-listboxfield .tox-listbox--select:focus,\n.tox .tox-textarea:focus {\n  background-color: #fff;\n  border-color: #006ce7;\n  box-shadow: 0 0 0 2px rgba(0, 108, 231, 0.25);\n  outline: none;\n}\n.tox .tox-toolbar-textfield {\n  border-width: 0;\n  margin-bottom: 3px;\n  margin-top: 2px;\n  max-width: 250px;\n}\n.tox .tox-naked-btn {\n  background-color: transparent;\n  border: 0;\n  border-color: transparent;\n  box-shadow: unset;\n  color: #006ce7;\n  cursor: pointer;\n  display: block;\n  margin: 0;\n  padding: 0;\n}\n.tox .tox-naked-btn svg {\n  display: block;\n  fill: #222f3e;\n}\n.tox:not([dir=rtl]) .tox-toolbar-textfield + * {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-toolbar-textfield + * {\n  margin-right: 4px;\n}\n.tox .tox-listboxfield {\n  cursor: pointer;\n  position: relative;\n}\n.tox .tox-listboxfield .tox-listbox--select[disabled] {\n  background-color: #f2f2f2;\n  color: rgba(34, 47, 62, 0.85);\n  cursor: not-allowed;\n}\n.tox .tox-listbox__select-label {\n  cursor: default;\n  flex: 1;\n  margin: 0 4px;\n}\n.tox .tox-listbox__select-chevron {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  width: 16px;\n}\n.tox .tox-listbox__select-chevron svg {\n  fill: #222f3e;\n}\n.tox .tox-listboxfield .tox-listbox--select {\n  align-items: center;\n  display: flex;\n}\n.tox:not([dir=rtl]) .tox-listboxfield svg {\n  right: 8px;\n}\n.tox[dir=rtl] .tox-listboxfield svg {\n  left: 8px;\n}\n.tox .tox-selectfield {\n  cursor: pointer;\n  position: relative;\n}\n.tox .tox-selectfield select {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  background-color: #fff;\n  border-color: #eeeeee;\n  border-radius: 6px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  color: #222f3e;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  line-height: 24px;\n  margin: 0;\n  min-height: 34px;\n  outline: none;\n  padding: 5px 5.5px;\n  resize: none;\n  width: 100%;\n}\n.tox .tox-selectfield select[disabled] {\n  background-color: #f2f2f2;\n  color: rgba(34, 47, 62, 0.85);\n  cursor: not-allowed;\n}\n.tox .tox-selectfield select::-ms-expand {\n  display: none;\n}\n.tox .tox-selectfield select:focus {\n  background-color: #fff;\n  border-color: #006ce7;\n  box-shadow: 0 0 0 2px rgba(0, 108, 231, 0.25);\n  outline: none;\n}\n.tox .tox-selectfield svg {\n  pointer-events: none;\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox:not([dir=rtl]) .tox-selectfield select[size=\"0\"],\n.tox:not([dir=rtl]) .tox-selectfield select[size=\"1\"] {\n  padding-right: 24px;\n}\n.tox:not([dir=rtl]) .tox-selectfield svg {\n  right: 8px;\n}\n.tox[dir=rtl] .tox-selectfield select[size=\"0\"],\n.tox[dir=rtl] .tox-selectfield select[size=\"1\"] {\n  padding-left: 24px;\n}\n.tox[dir=rtl] .tox-selectfield svg {\n  left: 8px;\n}\n.tox .tox-textarea {\n  -webkit-appearance: textarea;\n     -moz-appearance: textarea;\n          appearance: textarea;\n  white-space: pre-wrap;\n}\n.tox-fullscreen {\n  border: 0;\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  overscroll-behavior: none;\n  padding: 0;\n  touch-action: pinch-zoom;\n  width: 100%;\n}\n.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {\n  display: none;\n}\n.tox.tox-tinymce.tox-fullscreen,\n.tox-shadowhost.tox-fullscreen {\n  left: 0;\n  position: fixed;\n  top: 0;\n  z-index: 1200;\n}\n.tox.tox-tinymce.tox-fullscreen {\n  background-color: transparent;\n}\n.tox-fullscreen .tox.tox-tinymce-aux,\n.tox-fullscreen ~ .tox.tox-tinymce-aux {\n  z-index: 1201;\n}\n.tox .tox-help__more-link {\n  list-style: none;\n  margin-top: 1em;\n}\n.tox .tox-imagepreview {\n  background-color: #666;\n  height: 380px;\n  overflow: hidden;\n  position: relative;\n  width: 100%;\n}\n.tox .tox-imagepreview.tox-imagepreview__loaded {\n  overflow: auto;\n}\n.tox .tox-imagepreview__container {\n  display: flex;\n  left: 100vw;\n  position: absolute;\n  top: 100vw;\n}\n.tox .tox-imagepreview__image {\n  background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);\n}\n.tox .tox-image-tools .tox-spacer {\n  flex: 1;\n}\n.tox .tox-image-tools .tox-bar {\n  align-items: center;\n  display: flex;\n  height: 60px;\n  justify-content: center;\n}\n.tox .tox-image-tools .tox-imagepreview,\n.tox .tox-image-tools .tox-imagepreview + .tox-bar {\n  margin-top: 8px;\n}\n.tox .tox-image-tools .tox-croprect-block {\n  background: black;\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n  position: absolute;\n  zoom: 1;\n}\n.tox .tox-image-tools .tox-croprect-handle {\n  border: 2px solid white;\n  height: 20px;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 20px;\n}\n.tox .tox-image-tools .tox-croprect-handle-move {\n  border: 0;\n  cursor: move;\n  position: absolute;\n}\n.tox .tox-image-tools .tox-croprect-handle-nw {\n  border-width: 2px 0 0 2px;\n  cursor: nw-resize;\n  left: 100px;\n  margin: -2px 0 0 -2px;\n  top: 100px;\n}\n.tox .tox-image-tools .tox-croprect-handle-ne {\n  border-width: 2px 2px 0 0;\n  cursor: ne-resize;\n  left: 200px;\n  margin: -2px 0 0 -20px;\n  top: 100px;\n}\n.tox .tox-image-tools .tox-croprect-handle-sw {\n  border-width: 0 0 2px 2px;\n  cursor: sw-resize;\n  left: 100px;\n  margin: -20px 2px 0 -2px;\n  top: 200px;\n}\n.tox .tox-image-tools .tox-croprect-handle-se {\n  border-width: 0 2px 2px 0;\n  cursor: se-resize;\n  left: 200px;\n  margin: -20px 0 0 -20px;\n  top: 200px;\n}\n.tox .tox-insert-table-picker {\n  display: flex;\n  flex-wrap: wrap;\n  width: 170px;\n}\n.tox .tox-insert-table-picker > div {\n  border-color: #eeeeee;\n  border-style: solid;\n  border-width: 0 1px 1px 0;\n  box-sizing: border-box;\n  height: 17px;\n  width: 17px;\n}\n.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker {\n  margin: -4px -4px;\n}\n.tox .tox-insert-table-picker .tox-insert-table-picker__selected {\n  background-color: rgba(0, 108, 231, 0.5);\n  border-color: rgba(0, 108, 231, 0.5);\n}\n.tox .tox-insert-table-picker__label {\n  color: rgba(34, 47, 62, 0.7);\n  display: block;\n  font-size: 14px;\n  padding: 4px;\n  text-align: center;\n  width: 100%;\n}\n.tox:not([dir=rtl]) {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) {\n  border-right: 0;\n}\n.tox[dir=rtl] {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) {\n  border-right: 0;\n}\n.tox {\n  /* stylelint-disable */\n  /* stylelint-enable */\n}\n.tox .tox-menu {\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 6px;\n  box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  z-index: 1150;\n}\n.tox .tox-menu.tox-collection.tox-collection--list {\n  padding: 0 4px;\n}\n.tox .tox-menu.tox-collection.tox-collection--toolbar {\n  padding: 8px;\n}\n.tox .tox-menu.tox-collection.tox-collection--grid {\n  padding: 8px;\n}\n@media only screen and (min-width: 768px ) {\n  .tox .tox-menu .tox-collection__item-label {\n    overflow-wrap: break-word;\n    word-break: normal;\n  }\n}\n.tox .tox-menu__label h1,\n.tox .tox-menu__label h2,\n.tox .tox-menu__label h3,\n.tox .tox-menu__label h4,\n.tox .tox-menu__label h5,\n.tox .tox-menu__label h6,\n.tox .tox-menu__label p,\n.tox .tox-menu__label blockquote,\n.tox .tox-menu__label code {\n  margin: 0;\n}\n.tox .tox-menubar {\n  background: repeating-linear-gradient(transparent 0px 1px, transparent 1px 39px) center top 39px / 100% calc(100% - 39px) no-repeat;\n  background-color: #fff;\n  display: flex;\n  flex: 0 0 auto;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  grid-column: 1 / -1;\n  grid-row: 1;\n  padding: 0 11px 0 12px;\n}\n.tox .tox-promotion + .tox-menubar {\n  grid-column: 1;\n}\n.tox .tox-promotion {\n  background: repeating-linear-gradient(transparent 0px 1px, transparent 1px 39px) center top 39px / 100% calc(100% - 39px) no-repeat;\n  background-color: #fff;\n  grid-column: 2;\n  grid-row: 1;\n  padding-inline-end: 8px;\n  padding-inline-start: 4px;\n  padding-top: 5px;\n}\n.tox .tox-promotion-link {\n  align-items: unsafe center;\n  background-color: #E8F1F8;\n  border-radius: 5px;\n  color: #086BE6;\n  cursor: pointer;\n  display: flex;\n  font-size: 14px;\n  height: 26.6px;\n  padding: 4px 8px;\n  white-space: nowrap;\n}\n.tox .tox-promotion-link:hover {\n  background-color: #B4D7FF;\n}\n.tox .tox-promotion-link:focus {\n  background-color: #D9EDF7;\n}\n/* Deprecated. Remove in next major release */\n.tox .tox-mbtn {\n  align-items: center;\n  background: transparent;\n  border: 0;\n  border-radius: 3px;\n  box-shadow: none;\n  color: #222f3e;\n  display: flex;\n  flex: 0 0 auto;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  height: 28px;\n  justify-content: center;\n  margin: 5px 1px 6px 0;\n  outline: none;\n  overflow: hidden;\n  padding: 0 4px;\n  text-transform: none;\n  width: auto;\n}\n.tox .tox-mbtn[disabled] {\n  background-color: transparent;\n  border: 0;\n  box-shadow: none;\n  color: rgba(34, 47, 62, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-mbtn:focus:not(:disabled) {\n  background: #cce2fa;\n  border: 0;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-mbtn--active {\n  background: #a6ccf7;\n  border: 0;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) {\n  background: #cce2fa;\n  border: 0;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-mbtn__select-label {\n  cursor: default;\n  font-weight: normal;\n  margin: 0 4px;\n}\n.tox .tox-mbtn[disabled] .tox-mbtn__select-label {\n  cursor: not-allowed;\n}\n.tox .tox-mbtn__select-chevron {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  width: 16px;\n  display: none;\n}\n.tox .tox-notification {\n  border-radius: 6px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  display: grid;\n  font-size: 14px;\n  font-weight: normal;\n  grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);\n  margin-top: 4px;\n  opacity: 0;\n  padding: 4px;\n  transition: transform 100ms ease-in, opacity 150ms ease-in;\n}\n.tox .tox-notification p {\n  font-size: 14px;\n  font-weight: normal;\n}\n.tox .tox-notification a {\n  cursor: pointer;\n  text-decoration: underline;\n}\n.tox .tox-notification--in {\n  opacity: 1;\n}\n.tox .tox-notification--success {\n  background-color: #e4eeda;\n  border-color: #d7e6c8;\n  color: #222f3e;\n}\n.tox .tox-notification--success p {\n  color: #222f3e;\n}\n.tox .tox-notification--success a {\n  color: #517342;\n}\n.tox .tox-notification--success svg {\n  fill: #222f3e;\n}\n.tox .tox-notification--error {\n  background-color: #f5cccc;\n  border-color: #f0b3b3;\n  color: #222f3e;\n}\n.tox .tox-notification--error p {\n  color: #222f3e;\n}\n.tox .tox-notification--error a {\n  color: #77181f;\n}\n.tox .tox-notification--error svg {\n  fill: #222f3e;\n}\n.tox .tox-notification--warn,\n.tox .tox-notification--warning {\n  background-color: #fff5cc;\n  border-color: #fff0b3;\n  color: #222f3e;\n}\n.tox .tox-notification--warn p,\n.tox .tox-notification--warning p {\n  color: #222f3e;\n}\n.tox .tox-notification--warn a,\n.tox .tox-notification--warning a {\n  color: #7a6e25;\n}\n.tox .tox-notification--warn svg,\n.tox .tox-notification--warning svg {\n  fill: #222f3e;\n}\n.tox .tox-notification--info {\n  background-color: #d6e7fb;\n  border-color: #c1dbf9;\n  color: #222f3e;\n}\n.tox .tox-notification--info p {\n  color: #222f3e;\n}\n.tox .tox-notification--info a {\n  color: #2a64a6;\n}\n.tox .tox-notification--info svg {\n  fill: #222f3e;\n}\n.tox .tox-notification__body {\n  align-self: center;\n  color: #222f3e;\n  font-size: 14px;\n  grid-column-end: 3;\n  grid-column-start: 2;\n  grid-row-end: 2;\n  grid-row-start: 1;\n  text-align: center;\n  white-space: normal;\n  word-break: break-all;\n  word-break: break-word;\n}\n.tox .tox-notification__body > * {\n  margin: 0;\n}\n.tox .tox-notification__body > * + * {\n  margin-top: 1rem;\n}\n.tox .tox-notification__icon {\n  align-self: center;\n  grid-column-end: 2;\n  grid-column-start: 1;\n  grid-row-end: 2;\n  grid-row-start: 1;\n  justify-self: end;\n}\n.tox .tox-notification__icon svg {\n  display: block;\n}\n.tox .tox-notification__dismiss {\n  align-self: start;\n  grid-column-end: 4;\n  grid-column-start: 3;\n  grid-row-end: 2;\n  grid-row-start: 1;\n  justify-self: end;\n}\n.tox .tox-notification .tox-progress-bar {\n  grid-column-end: 4;\n  grid-column-start: 1;\n  grid-row-end: 3;\n  grid-row-start: 2;\n  justify-self: center;\n}\n.tox .tox-pop {\n  display: inline-block;\n  position: relative;\n}\n.tox .tox-pop--resizing {\n  transition: width 0.1s ease;\n}\n.tox .tox-pop--resizing .tox-toolbar,\n.tox .tox-pop--resizing .tox-toolbar__group {\n  flex-wrap: nowrap;\n}\n.tox .tox-pop--transition {\n  transition: 0.15s ease;\n  transition-property: left, right, top, bottom;\n}\n.tox .tox-pop--transition::before,\n.tox .tox-pop--transition::after {\n  transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s;\n}\n.tox .tox-pop__dialog {\n  background-color: #fff;\n  border: 1px solid #eeeeee;\n  border-radius: 6px;\n  box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n  min-width: 0;\n  overflow: hidden;\n}\n.tox .tox-pop__dialog > *:not(.tox-toolbar) {\n  margin: 4px 4px 4px 8px;\n}\n.tox .tox-pop__dialog .tox-toolbar {\n  background-color: transparent;\n  margin-bottom: -1px;\n}\n.tox .tox-pop::before,\n.tox .tox-pop::after {\n  border-style: solid;\n  content: '';\n  display: block;\n  height: 0;\n  opacity: 1;\n  position: absolute;\n  width: 0;\n}\n.tox .tox-pop.tox-pop--inset::before,\n.tox .tox-pop.tox-pop--inset::after {\n  opacity: 0;\n  transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease;\n}\n.tox .tox-pop.tox-pop--bottom::before,\n.tox .tox-pop.tox-pop--bottom::after {\n  left: 50%;\n  top: 100%;\n}\n.tox .tox-pop.tox-pop--bottom::after {\n  border-color: #fff transparent transparent transparent;\n  border-width: 8px;\n  margin-left: -8px;\n  margin-top: -1px;\n}\n.tox .tox-pop.tox-pop--bottom::before {\n  border-color: #eeeeee transparent transparent transparent;\n  border-width: 9px;\n  margin-left: -9px;\n}\n.tox .tox-pop.tox-pop--top::before,\n.tox .tox-pop.tox-pop--top::after {\n  left: 50%;\n  top: 0;\n  transform: translateY(-100%);\n}\n.tox .tox-pop.tox-pop--top::after {\n  border-color: transparent transparent #fff transparent;\n  border-width: 8px;\n  margin-left: -8px;\n  margin-top: 1px;\n}\n.tox .tox-pop.tox-pop--top::before {\n  border-color: transparent transparent #eeeeee transparent;\n  border-width: 9px;\n  margin-left: -9px;\n}\n.tox .tox-pop.tox-pop--left::before,\n.tox .tox-pop.tox-pop--left::after {\n  left: 0;\n  top: calc(50% - 1px);\n  transform: translateY(-50%);\n}\n.tox .tox-pop.tox-pop--left::after {\n  border-color: transparent #fff transparent transparent;\n  border-width: 8px;\n  margin-left: -15px;\n}\n.tox .tox-pop.tox-pop--left::before {\n  border-color: transparent #eeeeee transparent transparent;\n  border-width: 10px;\n  margin-left: -19px;\n}\n.tox .tox-pop.tox-pop--right::before,\n.tox .tox-pop.tox-pop--right::after {\n  left: 100%;\n  top: calc(50% + 1px);\n  transform: translateY(-50%);\n}\n.tox .tox-pop.tox-pop--right::after {\n  border-color: transparent transparent transparent #fff;\n  border-width: 8px;\n  margin-left: -1px;\n}\n.tox .tox-pop.tox-pop--right::before {\n  border-color: transparent transparent transparent #eeeeee;\n  border-width: 10px;\n  margin-left: -1px;\n}\n.tox .tox-pop.tox-pop--align-left::before,\n.tox .tox-pop.tox-pop--align-left::after {\n  left: 20px;\n}\n.tox .tox-pop.tox-pop--align-right::before,\n.tox .tox-pop.tox-pop--align-right::after {\n  left: calc(100% - 20px);\n}\n.tox .tox-sidebar-wrap {\n  display: flex;\n  flex-direction: row;\n  flex-grow: 1;\n  min-height: 0;\n}\n.tox .tox-sidebar {\n  background-color: #fff;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-end;\n}\n.tox .tox-sidebar__slider {\n  display: flex;\n  overflow: hidden;\n}\n.tox .tox-sidebar__pane-container {\n  display: flex;\n}\n.tox .tox-sidebar__pane {\n  display: flex;\n}\n.tox .tox-sidebar--sliding-closed {\n  opacity: 0;\n}\n.tox .tox-sidebar--sliding-open {\n  opacity: 1;\n}\n.tox .tox-sidebar--sliding-growing,\n.tox .tox-sidebar--sliding-shrinking {\n  transition: width 0.5s ease, opacity 0.5s ease;\n}\n.tox .tox-selector {\n  background-color: #4099ff;\n  border-color: #4099ff;\n  border-style: solid;\n  border-width: 1px;\n  box-sizing: border-box;\n  display: inline-block;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n}\n.tox.tox-platform-touch .tox-selector {\n  height: 12px;\n  width: 12px;\n}\n.tox .tox-slider {\n  align-items: center;\n  display: flex;\n  flex: 1;\n  height: 24px;\n  justify-content: center;\n  position: relative;\n}\n.tox .tox-slider__rail {\n  background-color: transparent;\n  border: 1px solid #eeeeee;\n  border-radius: 6px;\n  height: 10px;\n  min-width: 120px;\n  width: 100%;\n}\n.tox .tox-slider__handle {\n  background-color: #006ce7;\n  border: 2px solid #0054b4;\n  border-radius: 6px;\n  box-shadow: none;\n  height: 24px;\n  left: 50%;\n  position: absolute;\n  top: 50%;\n  transform: translateX(-50%) translateY(-50%);\n  width: 14px;\n}\n.tox .tox-form__controls-h-stack > .tox-slider:not(:first-of-type) {\n  margin-inline-start: 8px;\n}\n.tox .tox-form__controls-h-stack > .tox-form__group + .tox-slider {\n  margin-inline-start: 32px;\n}\n.tox .tox-form__controls-h-stack > .tox-slider + .tox-form__group {\n  margin-inline-start: 32px;\n}\n.tox .tox-source-code {\n  overflow: auto;\n}\n.tox .tox-spinner {\n  display: flex;\n}\n.tox .tox-spinner > div {\n  animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;\n  background-color: rgba(34, 47, 62, 0.7);\n  border-radius: 100%;\n  height: 8px;\n  width: 8px;\n}\n.tox .tox-spinner > div:nth-child(1) {\n  animation-delay: -0.32s;\n}\n.tox .tox-spinner > div:nth-child(2) {\n  animation-delay: -0.16s;\n}\n@keyframes tam-bouncing-dots {\n  0%,\n  80%,\n  100% {\n    transform: scale(0);\n  }\n  40% {\n    transform: scale(1);\n  }\n}\n.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-spinner > div:not(:first-child) {\n  margin-right: 4px;\n}\n.tox .tox-statusbar {\n  align-items: center;\n  background-color: #fff;\n  border-top: 1px solid #e3e3e3;\n  color: rgba(34, 47, 62, 0.7);\n  display: flex;\n  flex: 0 0 auto;\n  font-size: 14px;\n  font-weight: normal;\n  height: 25px;\n  overflow: hidden;\n  padding: 0 8px;\n  position: relative;\n  text-transform: none;\n}\n.tox .tox-statusbar__text-container {\n  display: flex;\n  flex: 1 1 auto;\n  justify-content: flex-end;\n  overflow: hidden;\n}\n.tox .tox-statusbar__path {\n  display: flex;\n  flex: 1 1 auto;\n  margin-right: auto;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.tox .tox-statusbar__path > * {\n  display: inline;\n  white-space: nowrap;\n}\n.tox .tox-statusbar__wordcount {\n  flex: 0 0 auto;\n  margin-left: 1ch;\n}\n.tox .tox-statusbar a,\n.tox .tox-statusbar__path-item,\n.tox .tox-statusbar__wordcount {\n  color: rgba(34, 47, 62, 0.7);\n  text-decoration: none;\n}\n.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) {\n  color: #222f3e;\n  cursor: pointer;\n}\n.tox .tox-statusbar__branding svg {\n  fill: rgba(34, 47, 62, 0.8);\n  height: 1.14em;\n  vertical-align: -0.28em;\n  width: 3.6em;\n}\n.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg,\n.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg {\n  fill: #222f3e;\n}\n.tox .tox-statusbar__resize-handle {\n  align-items: flex-end;\n  align-self: stretch;\n  cursor: nwse-resize;\n  display: flex;\n  flex: 0 0 auto;\n  justify-content: flex-end;\n  margin-left: auto;\n  margin-right: -8px;\n  padding-bottom: 3px;\n  padding-left: 1ch;\n  padding-right: 3px;\n}\n.tox .tox-statusbar__resize-handle svg {\n  display: block;\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-statusbar__resize-handle:focus svg {\n  background-color: #dee0e2;\n  border-radius: 1px 1px 5px 1px;\n  box-shadow: 0 0 0 2px #dee0e2;\n}\n.tox:not([dir=rtl]) .tox-statusbar__path > * {\n  margin-right: 4px;\n}\n.tox:not([dir=rtl]) .tox-statusbar__branding {\n  margin-left: 2ch;\n}\n.tox[dir=rtl] .tox-statusbar {\n  flex-direction: row-reverse;\n}\n.tox[dir=rtl] .tox-statusbar__path > * {\n  margin-left: 4px;\n}\n.tox .tox-throbber {\n  z-index: 1299;\n}\n.tox .tox-throbber__busy-spinner {\n  align-items: center;\n  background-color: rgba(255, 255, 255, 0.6);\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n}\n.tox .tox-tbtn {\n  align-items: center;\n  background: transparent;\n  border: 0;\n  border-radius: 3px;\n  box-shadow: none;\n  color: #222f3e;\n  display: flex;\n  flex: 0 0 auto;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  height: 28px;\n  justify-content: center;\n  margin: 6px 1px 5px 0;\n  outline: none;\n  overflow: hidden;\n  padding: 0;\n  text-transform: none;\n  width: 34px;\n}\n.tox .tox-tbtn svg {\n  display: block;\n  fill: #222f3e;\n}\n.tox .tox-tbtn.tox-tbtn-more {\n  padding-left: 5px;\n  padding-right: 5px;\n  width: inherit;\n}\n.tox .tox-tbtn:focus {\n  background: #cce2fa;\n  border: 0;\n  box-shadow: none;\n}\n.tox .tox-tbtn:hover {\n  background: #cce2fa;\n  border: 0;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-tbtn:hover svg {\n  fill: #222f3e;\n}\n.tox .tox-tbtn:active {\n  background: #a6ccf7;\n  border: 0;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-tbtn:active svg {\n  fill: #222f3e;\n}\n.tox .tox-tbtn--disabled,\n.tox .tox-tbtn--disabled:hover,\n.tox .tox-tbtn:disabled,\n.tox .tox-tbtn:disabled:hover {\n  background: transparent;\n  border: 0;\n  box-shadow: none;\n  color: rgba(34, 47, 62, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-tbtn--disabled svg,\n.tox .tox-tbtn--disabled:hover svg,\n.tox .tox-tbtn:disabled svg,\n.tox .tox-tbtn:disabled:hover svg {\n  /* stylelint-disable-line no-descending-specificity */\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-tbtn--enabled,\n.tox .tox-tbtn--enabled:hover {\n  background: #a6ccf7;\n  border: 0;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-tbtn--enabled > *,\n.tox .tox-tbtn--enabled:hover > * {\n  transform: none;\n}\n.tox .tox-tbtn--enabled svg,\n.tox .tox-tbtn--enabled:hover svg {\n  /* stylelint-disable-line no-descending-specificity */\n  fill: #222f3e;\n}\n.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) {\n  color: #222f3e;\n}\n.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg {\n  fill: #222f3e;\n}\n.tox .tox-tbtn:active > * {\n  transform: none;\n}\n.tox .tox-tbtn--md {\n  height: 42px;\n  width: 51px;\n}\n.tox .tox-tbtn--lg {\n  flex-direction: column;\n  height: 56px;\n  width: 68px;\n}\n.tox .tox-tbtn--return {\n  align-self: stretch;\n  height: unset;\n  width: 16px;\n}\n.tox .tox-tbtn--labeled {\n  padding: 0 4px;\n  width: unset;\n}\n.tox .tox-tbtn__vlabel {\n  display: block;\n  font-size: 10px;\n  font-weight: normal;\n  letter-spacing: -0.025em;\n  margin-bottom: 4px;\n  white-space: nowrap;\n}\n.tox .tox-tbtn--select {\n  margin: 6px 1px 5px 0;\n  padding: 0 4px;\n  width: auto;\n}\n.tox .tox-tbtn__select-label {\n  cursor: default;\n  font-weight: normal;\n  margin: 0 4px;\n}\n.tox .tox-tbtn__select-chevron {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  width: 16px;\n}\n.tox .tox-tbtn__select-chevron svg {\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-tbtn--bespoke {\n  background: #f7f7f7;\n}\n.tox .tox-tbtn--bespoke + .tox-tbtn--bespoke {\n  margin-inline-start: 4px;\n}\n.tox .tox-tbtn--bespoke .tox-tbtn__select-label {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  width: 7em;\n}\n.tox .tox-split-button {\n  border: 0;\n  border-radius: 3px;\n  box-sizing: border-box;\n  display: flex;\n  margin: 6px 1px 5px 0;\n  overflow: hidden;\n}\n.tox .tox-split-button:hover {\n  box-shadow: 0 0 0 1px #cce2fa inset;\n}\n.tox .tox-split-button:focus {\n  background: #cce2fa;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-split-button > * {\n  border-radius: 0;\n}\n.tox .tox-split-button__chevron {\n  width: 16px;\n}\n.tox .tox-split-button__chevron svg {\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-split-button .tox-tbtn {\n  margin: 0;\n}\n.tox .tox-split-button.tox-tbtn--disabled:hover,\n.tox .tox-split-button.tox-tbtn--disabled:focus,\n.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,\n.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus {\n  background: transparent;\n  box-shadow: none;\n  color: rgba(34, 47, 62, 0.5);\n}\n.tox.tox-platform-touch .tox-split-button .tox-tbtn--select {\n  padding: 0 0px;\n}\n.tox.tox-platform-touch .tox-split-button .tox-tbtn:not(.tox-tbtn--select):first-child {\n  width: 30px;\n}\n.tox.tox-platform-touch .tox-split-button__chevron {\n  width: 20px;\n}\n.tox .tox-toolbar-overlord {\n  background-color: #fff;\n}\n.tox .tox-toolbar,\n.tox .tox-toolbar__primary,\n.tox .tox-toolbar__overflow {\n  background-color: #fff;\n  background-image: repeating-linear-gradient(#e3e3e3 0px 1px, transparent 1px 39px);\n  background-position: center top 40px;\n  background-repeat: no-repeat;\n  background-size: calc(100% - 11px * 2) calc(100% - 41px);\n  display: flex;\n  flex: 0 0 auto;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  padding: 0 0px;\n  transform: perspective(1px);\n}\n.tox .tox-toolbar-overlord > .tox-toolbar,\n.tox .tox-toolbar-overlord > .tox-toolbar__primary,\n.tox .tox-toolbar-overlord > .tox-toolbar__overflow {\n  background-position: center top 0px;\n  background-size: calc(100% - 11px * 2) calc(100% - 0px);\n}\n.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed {\n  height: 0;\n  opacity: 0;\n  padding-bottom: 0;\n  padding-top: 0;\n  visibility: hidden;\n}\n.tox .tox-toolbar__overflow--growing {\n  transition: height 0.3s ease, opacity 0.2s linear 0.1s;\n}\n.tox .tox-toolbar__overflow--shrinking {\n  transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s;\n}\n.tox .tox-toolbar-overlord,\n.tox .tox-anchorbar {\n  grid-column: 1 / -1;\n}\n.tox .tox-menubar + .tox-toolbar,\n.tox .tox-menubar + .tox-toolbar-overlord {\n  border-top: 1px solid transparent;\n  margin-top: -1px;\n  padding-bottom: 1px;\n  padding-top: 1px;\n}\n.tox .tox-toolbar--scrolling {\n  flex-wrap: nowrap;\n  overflow-x: auto;\n}\n.tox .tox-pop .tox-toolbar {\n  border-width: 0;\n}\n.tox .tox-toolbar--no-divider {\n  background-image: none;\n}\n.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,\n.tox .tox-toolbar-overlord .tox-toolbar__primary {\n  background-position: center top 39px;\n}\n.tox .tox-editor-header > .tox-toolbar--scrolling,\n.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child {\n  background-image: none;\n}\n.tox.tox-tinymce-aux .tox-toolbar__overflow {\n  background-color: #fff;\n  background-position: center top 43px;\n  background-size: calc(100% - 8px * 2) calc(100% - 51px);\n  border: none;\n  border-radius: 6px;\n  box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n  padding: 4px 0;\n}\n.tox-pop .tox-pop__dialog {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox-pop .tox-pop__dialog .tox-toolbar {\n  background-position: center top 43px;\n  background-size: calc(100% - 11px * 2) calc(100% - 51px);\n  padding: 4px 0;\n}\n.tox .tox-toolbar__group {\n  align-items: center;\n  display: flex;\n  flex-wrap: wrap;\n  margin: 0 0;\n  padding: 0 11px 0 12px;\n}\n.tox .tox-toolbar__group--pull-right {\n  margin-left: auto;\n}\n.tox .tox-toolbar--scrolling .tox-toolbar__group {\n  flex-shrink: 0;\n  flex-wrap: nowrap;\n}\n.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) {\n  border-right: 1px solid transparent;\n}\n.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) {\n  border-left: 1px solid transparent;\n}\n.tox .tox-tooltip {\n  display: inline-block;\n  padding: 8px;\n  position: relative;\n}\n.tox .tox-tooltip__body {\n  background-color: #222f3e;\n  border-radius: 6px;\n  box-shadow: 0 2px 4px rgba(34, 47, 62, 0.3);\n  color: rgba(255, 255, 255, 0.75);\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  padding: 4px 8px;\n  text-transform: none;\n}\n.tox .tox-tooltip__arrow {\n  position: absolute;\n}\n.tox .tox-tooltip--down .tox-tooltip__arrow {\n  border-left: 8px solid transparent;\n  border-right: 8px solid transparent;\n  border-top: 8px solid #222f3e;\n  bottom: 0;\n  left: 50%;\n  position: absolute;\n  transform: translateX(-50%);\n}\n.tox .tox-tooltip--up .tox-tooltip__arrow {\n  border-bottom: 8px solid #222f3e;\n  border-left: 8px solid transparent;\n  border-right: 8px solid transparent;\n  left: 50%;\n  position: absolute;\n  top: 0;\n  transform: translateX(-50%);\n}\n.tox .tox-tooltip--right .tox-tooltip__arrow {\n  border-bottom: 8px solid transparent;\n  border-left: 8px solid #222f3e;\n  border-top: 8px solid transparent;\n  position: absolute;\n  right: 0;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox .tox-tooltip--left .tox-tooltip__arrow {\n  border-bottom: 8px solid transparent;\n  border-right: 8px solid #222f3e;\n  border-top: 8px solid transparent;\n  left: 0;\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox .tox-well {\n  border: 1px solid #eeeeee;\n  border-radius: 6px;\n  padding: 8px;\n  width: 100%;\n}\n.tox .tox-well > *:first-child {\n  margin-top: 0;\n}\n.tox .tox-well > *:last-child {\n  margin-bottom: 0;\n}\n.tox .tox-well > *:only-child {\n  margin: 0;\n}\n.tox .tox-custom-editor {\n  border: 1px solid #eeeeee;\n  border-radius: 6px;\n  display: flex;\n  flex: 1;\n  position: relative;\n}\n/* stylelint-disable */\n.tox {\n  /* stylelint-enable */\n}\n.tox .tox-dialog-loading::before {\n  background-color: rgba(0, 0, 0, 0.5);\n  content: \"\";\n  height: 100%;\n  position: absolute;\n  width: 100%;\n  z-index: 1000;\n}\n.tox .tox-tab {\n  cursor: pointer;\n}\n.tox .tox-dialog__content-js {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-dialog__body-content .tox-collection {\n  display: flex;\n  flex: 1;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/oxide/skin.mobile.css",
    "content": "/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n */\n/* RESET all the things! */\n.tinymce-mobile-outer-container {\n  all: initial;\n  display: block;\n}\n.tinymce-mobile-outer-container * {\n  border: 0;\n  box-sizing: initial;\n  cursor: inherit;\n  float: none;\n  line-height: 1;\n  margin: 0;\n  outline: 0;\n  padding: 0;\n  -webkit-tap-highlight-color: transparent;\n  /* TBIO-3691, stop the gray flicker on touch. */\n  text-shadow: none;\n  white-space: nowrap;\n}\n.tinymce-mobile-icon-arrow-back::before {\n  content: \"\\e5cd\";\n}\n.tinymce-mobile-icon-image::before {\n  content: \"\\e412\";\n}\n.tinymce-mobile-icon-cancel-circle::before {\n  content: \"\\e5c9\";\n}\n.tinymce-mobile-icon-full-dot::before {\n  content: \"\\e061\";\n}\n.tinymce-mobile-icon-align-center::before {\n  content: \"\\e234\";\n}\n.tinymce-mobile-icon-align-left::before {\n  content: \"\\e236\";\n}\n.tinymce-mobile-icon-align-right::before {\n  content: \"\\e237\";\n}\n.tinymce-mobile-icon-bold::before {\n  content: \"\\e238\";\n}\n.tinymce-mobile-icon-italic::before {\n  content: \"\\e23f\";\n}\n.tinymce-mobile-icon-unordered-list::before {\n  content: \"\\e241\";\n}\n.tinymce-mobile-icon-ordered-list::before {\n  content: \"\\e242\";\n}\n.tinymce-mobile-icon-font-size::before {\n  content: \"\\e245\";\n}\n.tinymce-mobile-icon-underline::before {\n  content: \"\\e249\";\n}\n.tinymce-mobile-icon-link::before {\n  content: \"\\e157\";\n}\n.tinymce-mobile-icon-unlink::before {\n  content: \"\\eca2\";\n}\n.tinymce-mobile-icon-color::before {\n  content: \"\\e891\";\n}\n.tinymce-mobile-icon-previous::before {\n  content: \"\\e314\";\n}\n.tinymce-mobile-icon-next::before {\n  content: \"\\e315\";\n}\n.tinymce-mobile-icon-large-font::before,\n.tinymce-mobile-icon-style-formats::before {\n  content: \"\\e264\";\n}\n.tinymce-mobile-icon-undo::before {\n  content: \"\\e166\";\n}\n.tinymce-mobile-icon-redo::before {\n  content: \"\\e15a\";\n}\n.tinymce-mobile-icon-removeformat::before {\n  content: \"\\e239\";\n}\n.tinymce-mobile-icon-small-font::before {\n  content: \"\\e906\";\n}\n.tinymce-mobile-icon-readonly-back::before,\n.tinymce-mobile-format-matches::after {\n  content: \"\\e5ca\";\n}\n.tinymce-mobile-icon-small-heading::before {\n  content: \"small\";\n}\n.tinymce-mobile-icon-large-heading::before {\n  content: \"large\";\n}\n.tinymce-mobile-icon-small-heading::before,\n.tinymce-mobile-icon-large-heading::before {\n  font-family: sans-serif;\n  font-size: 80%;\n}\n.tinymce-mobile-mask-edit-icon::before {\n  content: \"\\e254\";\n}\n.tinymce-mobile-icon-back::before {\n  content: \"\\e5c4\";\n}\n.tinymce-mobile-icon-heading::before {\n  /* TODO: Translate */\n  content: \"Headings\";\n  font-family: sans-serif;\n  font-size: 80%;\n  font-weight: bold;\n}\n.tinymce-mobile-icon-h1::before {\n  content: \"H1\";\n  font-weight: bold;\n}\n.tinymce-mobile-icon-h2::before {\n  content: \"H2\";\n  font-weight: bold;\n}\n.tinymce-mobile-icon-h3::before {\n  content: \"H3\";\n  font-weight: bold;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  background: rgba(51, 51, 51, 0.5);\n  height: 100%;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container {\n  align-items: center;\n  border-radius: 50%;\n  display: flex;\n  flex-direction: column;\n  font-family: sans-serif;\n  font-size: 1em;\n  justify-content: space-between;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  border-radius: 50%;\n  height: 2.1em;\n  width: 2.1em;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  flex-direction: column;\n  font-size: 1em;\n}\n@media only screen and (min-device-width:700px) {\n  .tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {\n    font-size: 1.2em;\n  }\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  border-radius: 50%;\n  height: 2.1em;\n  width: 2.1em;\n  background-color: white;\n  color: #207ab7;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before {\n  content: \"\\e900\";\n  font-family: 'tinymce-mobile', sans-serif;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon {\n  z-index: 2;\n}\n.tinymce-mobile-android-container.tinymce-mobile-android-maximized {\n  background: #ffffff;\n  border: none;\n  bottom: 0;\n  display: flex;\n  flex-direction: column;\n  left: 0;\n  position: fixed;\n  right: 0;\n  top: 0;\n}\n.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized) {\n  position: relative;\n}\n.tinymce-mobile-android-container .tinymce-mobile-editor-socket {\n  display: flex;\n  flex-grow: 1;\n}\n.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe {\n  display: flex !important;\n  flex-grow: 1;\n  height: auto !important;\n}\n.tinymce-mobile-android-scroll-reload {\n  overflow: hidden;\n}\n:not(.tinymce-mobile-readonly-mode) > .tinymce-mobile-android-selection-context-toolbar {\n  margin-top: 23px;\n}\n.tinymce-mobile-toolstrip {\n  background: #fff;\n  display: flex;\n  flex: 0 0 auto;\n  z-index: 1;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar {\n  align-items: center;\n  background-color: #fff;\n  border-bottom: 1px solid #cccccc;\n  display: flex;\n  flex: 1;\n  height: 2.5em;\n  width: 100%;\n  /* Make it no larger than the toolstrip, so that it needs to scroll */\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group {\n  align-items: center;\n  display: flex;\n  height: 100%;\n  flex-shrink: 1;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group > div {\n  align-items: center;\n  display: flex;\n  height: 100%;\n  flex: 1;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container {\n  background: #f44336;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group {\n  flex-grow: 1;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button {\n  align-items: center;\n  display: flex;\n  height: 80%;\n  margin-left: 2px;\n  margin-right: 2px;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected {\n  background: #c8cbcf;\n  color: #cccccc;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type {\n  background: #207ab7;\n  color: #eceff1;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar {\n  /* Note, this file is imported inside .tinymce-mobile-context-toolbar, so that prefix is on everything here. */\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group {\n  align-items: center;\n  display: flex;\n  height: 100%;\n  flex: 1;\n  padding-bottom: 0.4em;\n  padding-top: 0.4em;\n  /* Make any buttons appearing on the left and right display in the centre (e.g. color edges) */\n  /* For widgets like the colour picker, use the whole height */\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog {\n  display: flex;\n  min-height: 1.5em;\n  overflow: hidden;\n  padding-left: 0;\n  padding-right: 0;\n  position: relative;\n  width: 100%;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain {\n  display: flex;\n  height: 100%;\n  transition: left cubic-bezier(0.4, 0, 1, 1) 0.15s;\n  width: 100%;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen {\n  display: flex;\n  flex: 0 0 auto;\n  justify-content: space-between;\n  width: 100%;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input {\n  font-family: Sans-serif;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container {\n  display: flex;\n  flex-grow: 1;\n  position: relative;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x {\n  -ms-grid-row-align: center;\n      align-self: center;\n  background: inherit;\n  border: none;\n  border-radius: 50%;\n  color: #888;\n  font-size: 0.6em;\n  font-weight: bold;\n  height: 100%;\n  padding-right: 2px;\n  position: absolute;\n  right: 0;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x {\n  display: none;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next {\n  align-items: center;\n  display: flex;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before {\n  align-items: center;\n  display: flex;\n  font-weight: bold;\n  height: 100%;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before {\n  visibility: hidden;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item {\n  color: #cccccc;\n  font-size: 10px;\n  line-height: 10px;\n  margin: 0 2px;\n  padding-top: 3px;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active {\n  color: #c8cbcf;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before {\n  margin-left: 0.5em;\n  margin-right: 0.9em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before {\n  margin-left: 0.9em;\n  margin-right: 0.5em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider {\n  display: flex;\n  flex: 1;\n  margin-left: 0;\n  margin-right: 0;\n  padding: 0.28em 0;\n  position: relative;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container {\n  align-items: center;\n  display: flex;\n  flex-grow: 1;\n  height: 100%;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line {\n  background: #cccccc;\n  display: flex;\n  flex: 1;\n  height: 0.2em;\n  margin-bottom: 0.3em;\n  margin-top: 0.3em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container {\n  padding-left: 2em;\n  padding-right: 2em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container {\n  align-items: center;\n  display: flex;\n  flex-grow: 1;\n  height: 100%;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient {\n  background: linear-gradient(to right, hsl(0, 100%, 50%) 0%, hsl(60, 100%, 50%) 17%, hsl(120, 100%, 50%) 33%, hsl(180, 100%, 50%) 50%, hsl(240, 100%, 50%) 67%, hsl(300, 100%, 50%) 83%, hsl(0, 100%, 50%) 100%);\n  display: flex;\n  flex: 1;\n  height: 0.2em;\n  margin-bottom: 0.3em;\n  margin-top: 0.3em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black {\n  /* Not part of theming */\n  background: black;\n  height: 0.2em;\n  margin-bottom: 0.3em;\n  margin-top: 0.3em;\n  width: 1.2em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white {\n  /* Not part of theming */\n  background: white;\n  height: 0.2em;\n  margin-bottom: 0.3em;\n  margin-top: 0.3em;\n  width: 1.2em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb {\n  /* vertically centering trick (margin: auto, top: 0, bottom: 0). On iOS and Safari, if you leave\n     * out these values, then it shows the thumb at the top of the spectrum. This is probably because it is\n     * absolutely positioned with only a left value, and not a top. Note, on Chrome it seems to be fine without\n     * this approach.\n    */\n  align-items: center;\n  background-clip: padding-box;\n  background-color: #455a64;\n  border: 0.5em solid rgba(136, 136, 136, 0);\n  border-radius: 3em;\n  bottom: 0;\n  color: #fff;\n  display: flex;\n  height: 0.5em;\n  justify-content: center;\n  left: -10px;\n  margin: auto;\n  position: absolute;\n  top: 0;\n  transition: border 120ms cubic-bezier(0.39, 0.58, 0.57, 1);\n  width: 0.5em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active {\n  border: 0.5em solid rgba(136, 136, 136, 0.39);\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group > div {\n  align-items: center;\n  display: flex;\n  height: 100%;\n  flex: 1;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper {\n  flex-direction: column;\n  justify-content: center;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {\n  align-items: center;\n  display: flex;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog) {\n  height: 100%;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container {\n  display: flex;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input {\n  background: #ffffff;\n  border: none;\n  border-radius: 0;\n  color: #455a64;\n  flex-grow: 1;\n  font-size: 0.85em;\n  padding-bottom: 0.1em;\n  padding-left: 5px;\n  padding-top: 0.1em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder {\n  /* WebKit, Blink, Edge */\n  color: #888;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder {\n  /* WebKit, Blink, Edge */\n  color: #888;\n}\n/* dropup */\n.tinymce-mobile-dropup {\n  background: white;\n  display: flex;\n  overflow: hidden;\n  width: 100%;\n}\n.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking {\n  transition: height 0.3s ease-out;\n}\n.tinymce-mobile-dropup.tinymce-mobile-dropup-growing {\n  transition: height 0.3s ease-in;\n}\n.tinymce-mobile-dropup.tinymce-mobile-dropup-closed {\n  flex-grow: 0;\n}\n.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing) {\n  flex-grow: 1;\n}\n/* TODO min-height for device size and orientation */\n.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {\n  min-height: 200px;\n}\n@media only screen and (orientation: landscape) {\n  .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {\n    min-height: 200px;\n  }\n}\n@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {\n  .tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {\n    min-height: 150px;\n  }\n}\n/* styles menu */\n.tinymce-mobile-styles-menu {\n  font-family: sans-serif;\n  outline: 4px solid black;\n  overflow: hidden;\n  position: relative;\n  width: 100%;\n}\n.tinymce-mobile-styles-menu [role=\"menu\"] {\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  position: absolute;\n  width: 100%;\n}\n.tinymce-mobile-styles-menu [role=\"menu\"].transitioning {\n  transition: transform 0.5s ease-in-out;\n}\n.tinymce-mobile-styles-menu .tinymce-mobile-styles-item {\n  border-bottom: 1px solid #ddd;\n  color: #455a64;\n  cursor: pointer;\n  display: flex;\n  padding: 1em 1em;\n  position: relative;\n}\n.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before {\n  color: #455a64;\n  content: \"\\e314\";\n  font-family: 'tinymce-mobile', sans-serif;\n}\n.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after {\n  color: #455a64;\n  content: \"\\e315\";\n  font-family: 'tinymce-mobile', sans-serif;\n  padding-left: 1em;\n  padding-right: 1em;\n  position: absolute;\n  right: 0;\n}\n.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after {\n  font-family: 'tinymce-mobile', sans-serif;\n  padding-left: 1em;\n  padding-right: 1em;\n  position: absolute;\n  right: 0;\n}\n.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator,\n.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser {\n  align-items: center;\n  background: #fff;\n  border-top: #455a64;\n  color: #455a64;\n  display: flex;\n  min-height: 2.5em;\n  padding-left: 1em;\n  padding-right: 1em;\n}\n.tinymce-mobile-styles-menu [data-transitioning-destination=\"before\"][data-transitioning-state],\n.tinymce-mobile-styles-menu [data-transitioning-state=\"before\"] {\n  transform: translate(-100%);\n}\n.tinymce-mobile-styles-menu [data-transitioning-destination=\"current\"][data-transitioning-state],\n.tinymce-mobile-styles-menu [data-transitioning-state=\"current\"] {\n  transform: translate(0%);\n}\n.tinymce-mobile-styles-menu [data-transitioning-destination=\"after\"][data-transitioning-state],\n.tinymce-mobile-styles-menu [data-transitioning-state=\"after\"] {\n  transform: translate(100%);\n}\n@font-face {\n  font-family: 'tinymce-mobile';\n  font-style: normal;\n  font-weight: normal;\n  src: url('fonts/tinymce-mobile.woff?8x92w3') format('woff');\n}\n@media (min-device-width: 700px) {\n  .tinymce-mobile-outer-container,\n  .tinymce-mobile-outer-container input {\n    font-size: 25px;\n  }\n}\n@media (max-device-width: 700px) {\n  .tinymce-mobile-outer-container,\n  .tinymce-mobile-outer-container input {\n    font-size: 18px;\n  }\n}\n.tinymce-mobile-icon {\n  font-family: 'tinymce-mobile', sans-serif;\n}\n.mixin-flex-and-centre {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n}\n.mixin-flex-bar {\n  align-items: center;\n  display: flex;\n  height: 100%;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe {\n  background-color: #fff;\n  width: 100%;\n}\n.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {\n  /* Note, on the iPod touch in landscape, this isn't visible when the navbar appears */\n  background-color: #207ab7;\n  border-radius: 50%;\n  bottom: 1em;\n  color: white;\n  font-size: 1em;\n  height: 2.1em;\n  position: fixed;\n  right: 2em;\n  width: 2.1em;\n  align-items: center;\n  display: flex;\n  justify-content: center;\n}\n@media only screen and (min-device-width:700px) {\n  .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {\n    font-size: 1.2em;\n  }\n}\n.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket {\n  height: 300px;\n  overflow: hidden;\n}\n.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe {\n  height: 100%;\n}\n.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip {\n  display: none;\n}\n/*\n  Note, that if you don't include this (::-webkit-file-upload-button), the toolbar width gets\n  increased and the whole body becomes scrollable. It's important!\n */\ninput[type=\"file\"]::-webkit-file-upload-button {\n  display: none;\n}\n@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {\n  .tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {\n    bottom: 50%;\n  }\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/oxide/skin.shadowdom.css",
    "content": "body.tox-dialog__disable-scroll {\n  overflow: hidden;\n}\n.tox-fullscreen {\n  border: 0;\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  overscroll-behavior: none;\n  padding: 0;\n  touch-action: pinch-zoom;\n  width: 100%;\n}\n.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {\n  display: none;\n}\n.tox.tox-tinymce.tox-fullscreen,\n.tox-shadowhost.tox-fullscreen {\n  left: 0;\n  position: fixed;\n  top: 0;\n  z-index: 1200;\n}\n.tox.tox-tinymce.tox-fullscreen {\n  background-color: transparent;\n}\n.tox-fullscreen .tox.tox-tinymce-aux,\n.tox-fullscreen ~ .tox.tox-tinymce-aux {\n  z-index: 1201;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/oxide-dark/content.css",
    "content": ".mce-content-body .mce-item-anchor {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n}\n.mce-content-body .mce-item-anchor:empty {\n  cursor: default;\n  display: inline-block;\n  height: 12px !important;\n  padding: 0 2px;\n  -webkit-user-modify: read-only;\n  -moz-user-modify: read-only;\n  -webkit-user-select: all;\n  -moz-user-select: all;\n  user-select: all;\n  width: 8px !important;\n}\n.mce-content-body .mce-item-anchor:not(:empty) {\n  background-position-x: 2px;\n  display: inline-block;\n  padding-left: 12px;\n}\n.mce-content-body .mce-item-anchor[data-mce-selected] {\n  outline-offset: 1px;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"]:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #ffe89d;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"][data-mce-annotation-active=\"true\"]:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment:not([data-mce-selected]) {\n  background-color: #ffe89d;\n  outline: none;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"]:not([data-mce-selected=\"inline-boundary\"]) {\n  background-color: #fed635;\n}\n.tox-checklist > li:not(.tox-checklist--hidden) {\n  list-style: none;\n  margin: 0.25em 0;\n}\n.tox-checklist > li:not(.tox-checklist--hidden)::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n  cursor: pointer;\n  height: 1em;\n  margin-left: -1.5em;\n  margin-top: 0.125em;\n  position: absolute;\n  width: 1em;\n}\n.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n}\n[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {\n  margin-left: 0;\n  margin-right: -1.5em;\n}\n/* stylelint-disable */\n/* http://prismjs.com/ */\n/**\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n  color: #f8f8f2;\n  background: none;\n  text-shadow: 0 1px rgba(0, 0, 0, 0.3);\n  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n  text-align: left;\n  white-space: pre;\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: normal;\n  line-height: 1.5;\n  -moz-tab-size: 4;\n  tab-size: 4;\n  -webkit-hyphens: none;\n  hyphens: none;\n}\n/* Code blocks */\npre[class*=\"language-\"] {\n  padding: 1em;\n  margin: 0.5em 0;\n  overflow: auto;\n  border-radius: 0.3em;\n}\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n  background: #282a36;\n}\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n  padding: 0.1em;\n  border-radius: 0.3em;\n  white-space: normal;\n}\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n  color: #6272a4;\n}\n.token.punctuation {\n  color: #f8f8f2;\n}\n.namespace {\n  opacity: 0.7;\n}\n.token.property,\n.token.tag,\n.token.constant,\n.token.symbol,\n.token.deleted {\n  color: #ff79c6;\n}\n.token.boolean,\n.token.number {\n  color: #bd93f9;\n}\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n  color: #50fa7b;\n}\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string,\n.token.variable {\n  color: #f8f8f2;\n}\n.token.atrule,\n.token.attr-value,\n.token.function,\n.token.class-name {\n  color: #f1fa8c;\n}\n.token.keyword {\n  color: #8be9fd;\n}\n.token.regex,\n.token.important {\n  color: #ffb86c;\n}\n.token.important,\n.token.bold {\n  font-weight: bold;\n}\n.token.italic {\n  font-style: italic;\n}\n.token.entity {\n  cursor: help;\n}\n/* stylelint-enable */\n.mce-content-body {\n  overflow-wrap: break-word;\n  word-wrap: break-word;\n}\n.mce-content-body .mce-visual-caret {\n  background-color: black;\n  background-color: currentColor;\n  position: absolute;\n}\n.mce-content-body .mce-visual-caret-hidden {\n  display: none;\n}\n.mce-content-body *[data-mce-caret] {\n  left: -1000px;\n  margin: 0;\n  padding: 0;\n  position: absolute;\n  right: auto;\n  top: 0;\n}\n.mce-content-body .mce-offscreen-selection {\n  left: -2000000px;\n  max-width: 1000000px;\n  position: absolute;\n}\n.mce-content-body *[contentEditable=false] {\n  cursor: default;\n}\n.mce-content-body *[contentEditable=true] {\n  cursor: text;\n}\n.tox-cursor-format-painter {\n  cursor: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\"), default;\n}\ndiv.mce-footnotes hr {\n  margin-inline-end: auto;\n  margin-inline-start: 0;\n  width: 25%;\n}\ndiv.mce-footnotes li > a.mce-footnotes-backlink {\n  text-decoration: none;\n}\n@media print {\n  sup.mce-footnote a {\n    color: black;\n    text-decoration: none;\n  }\n  div.mce-footnotes {\n    break-inside: avoid;\n    width: 100%;\n  }\n  div.mce-footnotes li > a.mce-footnotes-backlink {\n    display: none;\n  }\n}\n.mce-content-body figure.align-left {\n  float: left;\n}\n.mce-content-body figure.align-right {\n  float: right;\n}\n.mce-content-body figure.image.align-center {\n  display: table;\n  margin-left: auto;\n  margin-right: auto;\n}\n.mce-preview-object {\n  border: 1px solid gray;\n  display: inline-block;\n  line-height: 0;\n  margin: 0 2px 0 2px;\n  position: relative;\n}\n.mce-preview-object .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-preview-object[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.mce-content-body .mce-mergetag:hover {\n  background-color: rgba(0, 108, 231, 0.3);\n}\n.mce-content-body .mce-mergetag-affix {\n  background-color: rgba(0, 108, 231, 0.3);\n  color: #006ce7;\n}\n.mce-object {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n  border: 1px dashed #aaa;\n}\n.mce-pagebreak {\n  border: 1px dashed #aaa;\n  cursor: default;\n  display: block;\n  height: 5px;\n  margin-top: 15px;\n  page-break-before: always;\n  width: 100%;\n}\n@media print {\n  .mce-pagebreak {\n    border: 0;\n  }\n}\n.tiny-pageembed .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tiny-pageembed[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.tiny-pageembed {\n  display: inline-block;\n  position: relative;\n}\n.tiny-pageembed--21by9,\n.tiny-pageembed--16by9,\n.tiny-pageembed--4by3,\n.tiny-pageembed--1by1 {\n  display: block;\n  overflow: hidden;\n  padding: 0;\n  position: relative;\n  width: 100%;\n}\n.tiny-pageembed--21by9 {\n  padding-top: 42.857143%;\n}\n.tiny-pageembed--16by9 {\n  padding-top: 56.25%;\n}\n.tiny-pageembed--4by3 {\n  padding-top: 75%;\n}\n.tiny-pageembed--1by1 {\n  padding-top: 100%;\n}\n.tiny-pageembed--21by9 iframe,\n.tiny-pageembed--16by9 iframe,\n.tiny-pageembed--4by3 iframe,\n.tiny-pageembed--1by1 iframe {\n  border: 0;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-content-body[data-mce-placeholder] {\n  position: relative;\n}\n.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  color: rgba(34, 47, 62, 0.7);\n  content: attr(data-mce-placeholder);\n  position: absolute;\n}\n.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  left: 1px;\n}\n.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {\n  right: 1px;\n}\n.mce-content-body div.mce-resizehandle {\n  background-color: #4099ff;\n  border-color: #4099ff;\n  border-style: solid;\n  border-width: 1px;\n  box-sizing: border-box;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n  z-index: 1298;\n}\n.mce-content-body div.mce-resizehandle:hover {\n  background-color: #4099ff;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(1) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(2) {\n  cursor: nesw-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(3) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(4) {\n  cursor: nesw-resize;\n}\n.mce-content-body .mce-resize-backdrop {\n  z-index: 10000;\n}\n.mce-content-body .mce-clonedresizable {\n  cursor: default;\n  opacity: 0.5;\n  outline: 1px dashed black;\n  position: absolute;\n  z-index: 10001;\n}\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {\n  border: 0;\n}\n.mce-content-body .mce-resize-helper {\n  background: #555;\n  background: rgba(0, 0, 0, 0.75);\n  border: 1px;\n  border-radius: 3px;\n  color: white;\n  display: none;\n  font-family: sans-serif;\n  font-size: 12px;\n  line-height: 14px;\n  margin: 5px 10px;\n  padding: 5px;\n  position: absolute;\n  white-space: nowrap;\n  z-index: 10002;\n}\n.tox-rtc-user-selection {\n  position: relative;\n}\n.tox-rtc-user-cursor {\n  bottom: 0;\n  cursor: default;\n  position: absolute;\n  top: 0;\n  width: 2px;\n}\n.tox-rtc-user-cursor::before {\n  background-color: inherit;\n  border-radius: 50%;\n  content: '';\n  display: block;\n  height: 8px;\n  position: absolute;\n  right: -3px;\n  top: -3px;\n  width: 8px;\n}\n.tox-rtc-user-cursor:hover::after {\n  background-color: inherit;\n  border-radius: 100px;\n  box-sizing: border-box;\n  color: #fff;\n  content: attr(data-user);\n  display: block;\n  font-size: 12px;\n  font-weight: bold;\n  left: -5px;\n  min-height: 8px;\n  min-width: 8px;\n  padding: 0 12px;\n  position: absolute;\n  top: -11px;\n  white-space: nowrap;\n  z-index: 1000;\n}\n.tox-rtc-user-selection--1 .tox-rtc-user-cursor {\n  background-color: #2dc26b;\n}\n.tox-rtc-user-selection--2 .tox-rtc-user-cursor {\n  background-color: #e03e2d;\n}\n.tox-rtc-user-selection--3 .tox-rtc-user-cursor {\n  background-color: #f1c40f;\n}\n.tox-rtc-user-selection--4 .tox-rtc-user-cursor {\n  background-color: #3598db;\n}\n.tox-rtc-user-selection--5 .tox-rtc-user-cursor {\n  background-color: #b96ad9;\n}\n.tox-rtc-user-selection--6 .tox-rtc-user-cursor {\n  background-color: #e67e23;\n}\n.tox-rtc-user-selection--7 .tox-rtc-user-cursor {\n  background-color: #aaa69d;\n}\n.tox-rtc-user-selection--8 .tox-rtc-user-cursor {\n  background-color: #f368e0;\n}\n.tox-rtc-remote-image {\n  background: #eaeaea url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\") no-repeat center center;\n  border: 1px solid #ccc;\n  min-height: 240px;\n  min-width: 320px;\n}\n.mce-match-marker {\n  background: #aaa;\n  color: #fff;\n}\n.mce-match-marker-selected {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::-moz-selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-content-body img[data-mce-selected],\n.mce-content-body video[data-mce-selected],\n.mce-content-body audio[data-mce-selected],\n.mce-content-body object[data-mce-selected],\n.mce-content-body embed[data-mce-selected],\n.mce-content-body table[data-mce-selected] {\n  outline: 3px solid #4099ff;\n}\n.mce-content-body hr[data-mce-selected] {\n  outline: 3px solid #4099ff;\n  outline-offset: 1px;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {\n  outline: 3px solid #4099ff;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {\n  outline: 3px solid #4099ff;\n}\n.mce-content-body *[contentEditable=false][data-mce-selected] {\n  cursor: not-allowed;\n  outline: 3px solid #4099ff;\n}\n.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,\n.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {\n  outline: none;\n}\n.mce-content-body *[data-mce-selected=\"inline-boundary\"] {\n  background-color: #4099ff;\n}\n.mce-content-body .mce-edit-focus {\n  outline: 3px solid #4099ff;\n}\n.mce-content-body td[data-mce-selected],\n.mce-content-body th[data-mce-selected] {\n  position: relative;\n}\n.mce-content-body td[data-mce-selected]::-moz-selection,\n.mce-content-body th[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected]::selection,\n.mce-content-body th[data-mce-selected]::selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected] *,\n.mce-content-body th[data-mce-selected] * {\n  outline: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.mce-content-body td[data-mce-selected]::after,\n.mce-content-body th[data-mce-selected]::after {\n  background-color: rgba(180, 215, 255, 0.7);\n  border: 1px solid transparent;\n  bottom: -1px;\n  content: '';\n  left: -1px;\n  mix-blend-mode: lighten;\n  position: absolute;\n  right: -1px;\n  top: -1px;\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .mce-content-body td[data-mce-selected]::after,\n  .mce-content-body th[data-mce-selected]::after {\n    border-color: rgba(0, 84, 180, 0.7);\n  }\n}\n.mce-content-body img[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body img[data-mce-selected]::selection {\n  background: none;\n}\n.ephox-snooker-resizer-bar {\n  background-color: #4099ff;\n  opacity: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n.ephox-snooker-resizer-cols {\n  cursor: col-resize;\n}\n.ephox-snooker-resizer-rows {\n  cursor: row-resize;\n}\n.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {\n  opacity: 1;\n}\n.mce-spellchecker-word {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n  height: 2rem;\n}\n.mce-spellchecker-grammar {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n}\n.mce-toc {\n  border: 1px solid gray;\n}\n.mce-toc h2 {\n  margin: 4px;\n}\n.mce-toc li {\n  list-style-type: none;\n}\ntable[style*=\"border-width: 0px\"],\n.mce-item-table:not([border]),\n.mce-item-table[border=\"0\"],\ntable[style*=\"border-width: 0px\"] td,\n.mce-item-table:not([border]) td,\n.mce-item-table[border=\"0\"] td,\ntable[style*=\"border-width: 0px\"] th,\n.mce-item-table:not([border]) th,\n.mce-item-table[border=\"0\"] th,\ntable[style*=\"border-width: 0px\"] caption,\n.mce-item-table:not([border]) caption,\n.mce-item-table[border=\"0\"] caption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks p,\n.mce-visualblocks h1,\n.mce-visualblocks h2,\n.mce-visualblocks h3,\n.mce-visualblocks h4,\n.mce-visualblocks h5,\n.mce-visualblocks h6,\n.mce-visualblocks div:not([data-mce-bogus]),\n.mce-visualblocks section,\n.mce-visualblocks article,\n.mce-visualblocks blockquote,\n.mce-visualblocks address,\n.mce-visualblocks pre,\n.mce-visualblocks figure,\n.mce-visualblocks figcaption,\n.mce-visualblocks hgroup,\n.mce-visualblocks aside,\n.mce-visualblocks ul,\n.mce-visualblocks ol,\n.mce-visualblocks dl {\n  background-repeat: no-repeat;\n  border: 1px dashed #bbb;\n  margin-left: 3px;\n  padding-top: 10px;\n}\n.mce-visualblocks p {\n  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);\n}\n.mce-visualblocks h1 {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);\n}\n.mce-visualblocks h2 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);\n}\n.mce-visualblocks h3 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);\n}\n.mce-visualblocks h4 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);\n}\n.mce-visualblocks h5 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);\n}\n.mce-visualblocks h6 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);\n}\n.mce-visualblocks div:not([data-mce-bogus]) {\n  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);\n}\n.mce-visualblocks section {\n  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);\n}\n.mce-visualblocks article {\n  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);\n}\n.mce-visualblocks blockquote {\n  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);\n}\n.mce-visualblocks address {\n  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);\n}\n.mce-visualblocks pre {\n  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);\n}\n.mce-visualblocks figure {\n  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);\n}\n.mce-visualblocks figcaption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks hgroup {\n  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);\n}\n.mce-visualblocks aside {\n  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);\n}\n.mce-visualblocks ul {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);\n}\n.mce-visualblocks ol {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);\n}\n.mce-visualblocks dl {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);\n}\n.mce-visualblocks:not([dir=rtl]) p,\n.mce-visualblocks:not([dir=rtl]) h1,\n.mce-visualblocks:not([dir=rtl]) h2,\n.mce-visualblocks:not([dir=rtl]) h3,\n.mce-visualblocks:not([dir=rtl]) h4,\n.mce-visualblocks:not([dir=rtl]) h5,\n.mce-visualblocks:not([dir=rtl]) h6,\n.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),\n.mce-visualblocks:not([dir=rtl]) section,\n.mce-visualblocks:not([dir=rtl]) article,\n.mce-visualblocks:not([dir=rtl]) blockquote,\n.mce-visualblocks:not([dir=rtl]) address,\n.mce-visualblocks:not([dir=rtl]) pre,\n.mce-visualblocks:not([dir=rtl]) figure,\n.mce-visualblocks:not([dir=rtl]) figcaption,\n.mce-visualblocks:not([dir=rtl]) hgroup,\n.mce-visualblocks:not([dir=rtl]) aside,\n.mce-visualblocks:not([dir=rtl]) ul,\n.mce-visualblocks:not([dir=rtl]) ol,\n.mce-visualblocks:not([dir=rtl]) dl {\n  margin-left: 3px;\n}\n.mce-visualblocks[dir=rtl] p,\n.mce-visualblocks[dir=rtl] h1,\n.mce-visualblocks[dir=rtl] h2,\n.mce-visualblocks[dir=rtl] h3,\n.mce-visualblocks[dir=rtl] h4,\n.mce-visualblocks[dir=rtl] h5,\n.mce-visualblocks[dir=rtl] h6,\n.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),\n.mce-visualblocks[dir=rtl] section,\n.mce-visualblocks[dir=rtl] article,\n.mce-visualblocks[dir=rtl] blockquote,\n.mce-visualblocks[dir=rtl] address,\n.mce-visualblocks[dir=rtl] pre,\n.mce-visualblocks[dir=rtl] figure,\n.mce-visualblocks[dir=rtl] figcaption,\n.mce-visualblocks[dir=rtl] hgroup,\n.mce-visualblocks[dir=rtl] aside,\n.mce-visualblocks[dir=rtl] ul,\n.mce-visualblocks[dir=rtl] ol,\n.mce-visualblocks[dir=rtl] dl {\n  background-position-x: right;\n  margin-right: 3px;\n}\n.mce-nbsp,\n.mce-shy {\n  background: #aaa;\n}\n.mce-shy::after {\n  content: '-';\n}\nbody {\n  font-family: sans-serif;\n}\ntable {\n  border-collapse: collapse;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/oxide-dark/content.inline.css",
    "content": ".mce-content-body .mce-item-anchor {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n}\n.mce-content-body .mce-item-anchor:empty {\n  cursor: default;\n  display: inline-block;\n  height: 12px !important;\n  padding: 0 2px;\n  -webkit-user-modify: read-only;\n  -moz-user-modify: read-only;\n  -webkit-user-select: all;\n  -moz-user-select: all;\n  user-select: all;\n  width: 8px !important;\n}\n.mce-content-body .mce-item-anchor:not(:empty) {\n  background-position-x: 2px;\n  display: inline-block;\n  padding-left: 12px;\n}\n.mce-content-body .mce-item-anchor[data-mce-selected] {\n  outline-offset: 1px;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"]:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #ffe89d;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"][data-mce-annotation-active=\"true\"]:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment:not([data-mce-selected]) {\n  background-color: #ffe89d;\n  outline: none;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"]:not([data-mce-selected=\"inline-boundary\"]) {\n  background-color: #fed635;\n}\n.tox-checklist > li:not(.tox-checklist--hidden) {\n  list-style: none;\n  margin: 0.25em 0;\n}\n.tox-checklist > li:not(.tox-checklist--hidden)::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n  cursor: pointer;\n  height: 1em;\n  margin-left: -1.5em;\n  margin-top: 0.125em;\n  position: absolute;\n  width: 1em;\n}\n.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n}\n[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {\n  margin-left: 0;\n  margin-right: -1.5em;\n}\n/* stylelint-disable */\n/* http://prismjs.com/ */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n  color: black;\n  background: none;\n  text-shadow: 0 1px white;\n  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n  font-size: 1em;\n  text-align: left;\n  white-space: pre;\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: normal;\n  line-height: 1.5;\n  -moz-tab-size: 4;\n  tab-size: 4;\n  -webkit-hyphens: none;\n  hyphens: none;\n}\npre[class*=\"language-\"]::-moz-selection,\npre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection,\ncode[class*=\"language-\"] ::-moz-selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\npre[class*=\"language-\"]::selection,\npre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection,\ncode[class*=\"language-\"] ::selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n@media print {\n  code[class*=\"language-\"],\n  pre[class*=\"language-\"] {\n    text-shadow: none;\n  }\n}\n/* Code blocks */\npre[class*=\"language-\"] {\n  padding: 1em;\n  margin: 0.5em 0;\n  overflow: auto;\n}\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n  background: #f5f2f0;\n}\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n  padding: 0.1em;\n  border-radius: 0.3em;\n  white-space: normal;\n}\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n  color: slategray;\n}\n.token.punctuation {\n  color: #999;\n}\n.token.namespace {\n  opacity: 0.7;\n}\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n  color: #905;\n}\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n  color: #690;\n}\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n  color: #9a6e3a;\n  /* This background color was intended by the author of this theme. */\n  background: hsla(0, 0%, 100%, 0.5);\n}\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n  color: #07a;\n}\n.token.function,\n.token.class-name {\n  color: #DD4A68;\n}\n.token.regex,\n.token.important,\n.token.variable {\n  color: #e90;\n}\n.token.important,\n.token.bold {\n  font-weight: bold;\n}\n.token.italic {\n  font-style: italic;\n}\n.token.entity {\n  cursor: help;\n}\n/* stylelint-enable */\n.mce-content-body {\n  overflow-wrap: break-word;\n  word-wrap: break-word;\n}\n.mce-content-body .mce-visual-caret {\n  background-color: black;\n  background-color: currentColor;\n  position: absolute;\n}\n.mce-content-body .mce-visual-caret-hidden {\n  display: none;\n}\n.mce-content-body *[data-mce-caret] {\n  left: -1000px;\n  margin: 0;\n  padding: 0;\n  position: absolute;\n  right: auto;\n  top: 0;\n}\n.mce-content-body .mce-offscreen-selection {\n  left: -2000000px;\n  max-width: 1000000px;\n  position: absolute;\n}\n.mce-content-body *[contentEditable=false] {\n  cursor: default;\n}\n.mce-content-body *[contentEditable=true] {\n  cursor: text;\n}\n.tox-cursor-format-painter {\n  cursor: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\"), default;\n}\ndiv.mce-footnotes hr {\n  margin-inline-end: auto;\n  margin-inline-start: 0;\n  width: 25%;\n}\ndiv.mce-footnotes li > a.mce-footnotes-backlink {\n  text-decoration: none;\n}\n@media print {\n  sup.mce-footnote a {\n    color: black;\n    text-decoration: none;\n  }\n  div.mce-footnotes {\n    break-inside: avoid;\n    width: 100%;\n  }\n  div.mce-footnotes li > a.mce-footnotes-backlink {\n    display: none;\n  }\n}\n.mce-content-body figure.align-left {\n  float: left;\n}\n.mce-content-body figure.align-right {\n  float: right;\n}\n.mce-content-body figure.image.align-center {\n  display: table;\n  margin-left: auto;\n  margin-right: auto;\n}\n.mce-preview-object {\n  border: 1px solid gray;\n  display: inline-block;\n  line-height: 0;\n  margin: 0 2px 0 2px;\n  position: relative;\n}\n.mce-preview-object .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-preview-object[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.mce-content-body .mce-mergetag:hover {\n  background-color: rgba(0, 108, 231, 0.1);\n}\n.mce-content-body .mce-mergetag-affix {\n  background-color: rgba(0, 108, 231, 0.1);\n  color: #006ce7;\n}\n.mce-object {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n  border: 1px dashed #aaa;\n}\n.mce-pagebreak {\n  border: 1px dashed #aaa;\n  cursor: default;\n  display: block;\n  height: 5px;\n  margin-top: 15px;\n  page-break-before: always;\n  width: 100%;\n}\n@media print {\n  .mce-pagebreak {\n    border: 0;\n  }\n}\n.tiny-pageembed .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tiny-pageembed[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.tiny-pageembed {\n  display: inline-block;\n  position: relative;\n}\n.tiny-pageembed--21by9,\n.tiny-pageembed--16by9,\n.tiny-pageembed--4by3,\n.tiny-pageembed--1by1 {\n  display: block;\n  overflow: hidden;\n  padding: 0;\n  position: relative;\n  width: 100%;\n}\n.tiny-pageembed--21by9 {\n  padding-top: 42.857143%;\n}\n.tiny-pageembed--16by9 {\n  padding-top: 56.25%;\n}\n.tiny-pageembed--4by3 {\n  padding-top: 75%;\n}\n.tiny-pageembed--1by1 {\n  padding-top: 100%;\n}\n.tiny-pageembed--21by9 iframe,\n.tiny-pageembed--16by9 iframe,\n.tiny-pageembed--4by3 iframe,\n.tiny-pageembed--1by1 iframe {\n  border: 0;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-content-body[data-mce-placeholder] {\n  position: relative;\n}\n.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  color: rgba(34, 47, 62, 0.7);\n  content: attr(data-mce-placeholder);\n  position: absolute;\n}\n.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  left: 1px;\n}\n.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {\n  right: 1px;\n}\n.mce-content-body div.mce-resizehandle {\n  background-color: #4099ff;\n  border-color: #4099ff;\n  border-style: solid;\n  border-width: 1px;\n  box-sizing: border-box;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n  z-index: 1298;\n}\n.mce-content-body div.mce-resizehandle:hover {\n  background-color: #4099ff;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(1) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(2) {\n  cursor: nesw-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(3) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(4) {\n  cursor: nesw-resize;\n}\n.mce-content-body .mce-resize-backdrop {\n  z-index: 10000;\n}\n.mce-content-body .mce-clonedresizable {\n  cursor: default;\n  opacity: 0.5;\n  outline: 1px dashed black;\n  position: absolute;\n  z-index: 10001;\n}\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {\n  border: 0;\n}\n.mce-content-body .mce-resize-helper {\n  background: #555;\n  background: rgba(0, 0, 0, 0.75);\n  border: 1px;\n  border-radius: 3px;\n  color: white;\n  display: none;\n  font-family: sans-serif;\n  font-size: 12px;\n  line-height: 14px;\n  margin: 5px 10px;\n  padding: 5px;\n  position: absolute;\n  white-space: nowrap;\n  z-index: 10002;\n}\n.tox-rtc-user-selection {\n  position: relative;\n}\n.tox-rtc-user-cursor {\n  bottom: 0;\n  cursor: default;\n  position: absolute;\n  top: 0;\n  width: 2px;\n}\n.tox-rtc-user-cursor::before {\n  background-color: inherit;\n  border-radius: 50%;\n  content: '';\n  display: block;\n  height: 8px;\n  position: absolute;\n  right: -3px;\n  top: -3px;\n  width: 8px;\n}\n.tox-rtc-user-cursor:hover::after {\n  background-color: inherit;\n  border-radius: 100px;\n  box-sizing: border-box;\n  color: #fff;\n  content: attr(data-user);\n  display: block;\n  font-size: 12px;\n  font-weight: bold;\n  left: -5px;\n  min-height: 8px;\n  min-width: 8px;\n  padding: 0 12px;\n  position: absolute;\n  top: -11px;\n  white-space: nowrap;\n  z-index: 1000;\n}\n.tox-rtc-user-selection--1 .tox-rtc-user-cursor {\n  background-color: #2dc26b;\n}\n.tox-rtc-user-selection--2 .tox-rtc-user-cursor {\n  background-color: #e03e2d;\n}\n.tox-rtc-user-selection--3 .tox-rtc-user-cursor {\n  background-color: #f1c40f;\n}\n.tox-rtc-user-selection--4 .tox-rtc-user-cursor {\n  background-color: #3598db;\n}\n.tox-rtc-user-selection--5 .tox-rtc-user-cursor {\n  background-color: #b96ad9;\n}\n.tox-rtc-user-selection--6 .tox-rtc-user-cursor {\n  background-color: #e67e23;\n}\n.tox-rtc-user-selection--7 .tox-rtc-user-cursor {\n  background-color: #aaa69d;\n}\n.tox-rtc-user-selection--8 .tox-rtc-user-cursor {\n  background-color: #f368e0;\n}\n.tox-rtc-remote-image {\n  background: #eaeaea url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\") no-repeat center center;\n  border: 1px solid #ccc;\n  min-height: 240px;\n  min-width: 320px;\n}\n.mce-match-marker {\n  background: #aaa;\n  color: #fff;\n}\n.mce-match-marker-selected {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::-moz-selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-content-body img[data-mce-selected],\n.mce-content-body video[data-mce-selected],\n.mce-content-body audio[data-mce-selected],\n.mce-content-body object[data-mce-selected],\n.mce-content-body embed[data-mce-selected],\n.mce-content-body table[data-mce-selected] {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body hr[data-mce-selected] {\n  outline: 3px solid #b4d7ff;\n  outline-offset: 1px;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body *[contentEditable=false][data-mce-selected] {\n  cursor: not-allowed;\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,\n.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {\n  outline: none;\n}\n.mce-content-body *[data-mce-selected=\"inline-boundary\"] {\n  background-color: #b4d7ff;\n}\n.mce-content-body .mce-edit-focus {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body td[data-mce-selected],\n.mce-content-body th[data-mce-selected] {\n  position: relative;\n}\n.mce-content-body td[data-mce-selected]::-moz-selection,\n.mce-content-body th[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected]::selection,\n.mce-content-body th[data-mce-selected]::selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected] *,\n.mce-content-body th[data-mce-selected] * {\n  outline: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.mce-content-body td[data-mce-selected]::after,\n.mce-content-body th[data-mce-selected]::after {\n  background-color: rgba(180, 215, 255, 0.7);\n  border: 1px solid rgba(180, 215, 255, 0.7);\n  bottom: -1px;\n  content: '';\n  left: -1px;\n  mix-blend-mode: multiply;\n  position: absolute;\n  right: -1px;\n  top: -1px;\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .mce-content-body td[data-mce-selected]::after,\n  .mce-content-body th[data-mce-selected]::after {\n    border-color: rgba(0, 84, 180, 0.7);\n  }\n}\n.mce-content-body img[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body img[data-mce-selected]::selection {\n  background: none;\n}\n.ephox-snooker-resizer-bar {\n  background-color: #b4d7ff;\n  opacity: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n.ephox-snooker-resizer-cols {\n  cursor: col-resize;\n}\n.ephox-snooker-resizer-rows {\n  cursor: row-resize;\n}\n.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {\n  opacity: 1;\n}\n.mce-spellchecker-word {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n  height: 2rem;\n}\n.mce-spellchecker-grammar {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n}\n.mce-toc {\n  border: 1px solid gray;\n}\n.mce-toc h2 {\n  margin: 4px;\n}\n.mce-toc li {\n  list-style-type: none;\n}\ntable[style*=\"border-width: 0px\"],\n.mce-item-table:not([border]),\n.mce-item-table[border=\"0\"],\ntable[style*=\"border-width: 0px\"] td,\n.mce-item-table:not([border]) td,\n.mce-item-table[border=\"0\"] td,\ntable[style*=\"border-width: 0px\"] th,\n.mce-item-table:not([border]) th,\n.mce-item-table[border=\"0\"] th,\ntable[style*=\"border-width: 0px\"] caption,\n.mce-item-table:not([border]) caption,\n.mce-item-table[border=\"0\"] caption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks p,\n.mce-visualblocks h1,\n.mce-visualblocks h2,\n.mce-visualblocks h3,\n.mce-visualblocks h4,\n.mce-visualblocks h5,\n.mce-visualblocks h6,\n.mce-visualblocks div:not([data-mce-bogus]),\n.mce-visualblocks section,\n.mce-visualblocks article,\n.mce-visualblocks blockquote,\n.mce-visualblocks address,\n.mce-visualblocks pre,\n.mce-visualblocks figure,\n.mce-visualblocks figcaption,\n.mce-visualblocks hgroup,\n.mce-visualblocks aside,\n.mce-visualblocks ul,\n.mce-visualblocks ol,\n.mce-visualblocks dl {\n  background-repeat: no-repeat;\n  border: 1px dashed #bbb;\n  margin-left: 3px;\n  padding-top: 10px;\n}\n.mce-visualblocks p {\n  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);\n}\n.mce-visualblocks h1 {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);\n}\n.mce-visualblocks h2 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);\n}\n.mce-visualblocks h3 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);\n}\n.mce-visualblocks h4 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);\n}\n.mce-visualblocks h5 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);\n}\n.mce-visualblocks h6 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);\n}\n.mce-visualblocks div:not([data-mce-bogus]) {\n  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);\n}\n.mce-visualblocks section {\n  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);\n}\n.mce-visualblocks article {\n  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);\n}\n.mce-visualblocks blockquote {\n  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);\n}\n.mce-visualblocks address {\n  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);\n}\n.mce-visualblocks pre {\n  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);\n}\n.mce-visualblocks figure {\n  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);\n}\n.mce-visualblocks figcaption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks hgroup {\n  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);\n}\n.mce-visualblocks aside {\n  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);\n}\n.mce-visualblocks ul {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);\n}\n.mce-visualblocks ol {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);\n}\n.mce-visualblocks dl {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);\n}\n.mce-visualblocks:not([dir=rtl]) p,\n.mce-visualblocks:not([dir=rtl]) h1,\n.mce-visualblocks:not([dir=rtl]) h2,\n.mce-visualblocks:not([dir=rtl]) h3,\n.mce-visualblocks:not([dir=rtl]) h4,\n.mce-visualblocks:not([dir=rtl]) h5,\n.mce-visualblocks:not([dir=rtl]) h6,\n.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),\n.mce-visualblocks:not([dir=rtl]) section,\n.mce-visualblocks:not([dir=rtl]) article,\n.mce-visualblocks:not([dir=rtl]) blockquote,\n.mce-visualblocks:not([dir=rtl]) address,\n.mce-visualblocks:not([dir=rtl]) pre,\n.mce-visualblocks:not([dir=rtl]) figure,\n.mce-visualblocks:not([dir=rtl]) figcaption,\n.mce-visualblocks:not([dir=rtl]) hgroup,\n.mce-visualblocks:not([dir=rtl]) aside,\n.mce-visualblocks:not([dir=rtl]) ul,\n.mce-visualblocks:not([dir=rtl]) ol,\n.mce-visualblocks:not([dir=rtl]) dl {\n  margin-left: 3px;\n}\n.mce-visualblocks[dir=rtl] p,\n.mce-visualblocks[dir=rtl] h1,\n.mce-visualblocks[dir=rtl] h2,\n.mce-visualblocks[dir=rtl] h3,\n.mce-visualblocks[dir=rtl] h4,\n.mce-visualblocks[dir=rtl] h5,\n.mce-visualblocks[dir=rtl] h6,\n.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),\n.mce-visualblocks[dir=rtl] section,\n.mce-visualblocks[dir=rtl] article,\n.mce-visualblocks[dir=rtl] blockquote,\n.mce-visualblocks[dir=rtl] address,\n.mce-visualblocks[dir=rtl] pre,\n.mce-visualblocks[dir=rtl] figure,\n.mce-visualblocks[dir=rtl] figcaption,\n.mce-visualblocks[dir=rtl] hgroup,\n.mce-visualblocks[dir=rtl] aside,\n.mce-visualblocks[dir=rtl] ul,\n.mce-visualblocks[dir=rtl] ol,\n.mce-visualblocks[dir=rtl] dl {\n  background-position-x: right;\n  margin-right: 3px;\n}\n.mce-nbsp,\n.mce-shy {\n  background: #aaa;\n}\n.mce-shy::after {\n  content: '-';\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/oxide-dark/content.mobile.css",
    "content": "/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n */\n.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection {\n  /* Note: this file is used inside the content, so isn't part of theming */\n  background-color: green;\n  display: inline-block;\n  opacity: 0.5;\n  position: absolute;\n}\nbody {\n  -webkit-text-size-adjust: none;\n}\nbody img {\n  /* this is related to the content margin */\n  max-width: 96vw;\n}\nbody table img {\n  max-width: 95%;\n}\nbody {\n  font-family: sans-serif;\n}\ntable {\n  border-collapse: collapse;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/oxide-dark/skin.css",
    "content": ".tox {\n  box-shadow: none;\n  box-sizing: content-box;\n  color: #222f3e;\n  cursor: auto;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: normal;\n  -webkit-tap-highlight-color: transparent;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  vertical-align: initial;\n  white-space: normal;\n}\n.tox *:not(svg):not(rect) {\n  box-sizing: inherit;\n  color: inherit;\n  cursor: inherit;\n  direction: inherit;\n  font-family: inherit;\n  font-size: inherit;\n  font-style: inherit;\n  font-weight: inherit;\n  line-height: inherit;\n  -webkit-tap-highlight-color: inherit;\n  text-align: inherit;\n  text-decoration: inherit;\n  text-shadow: inherit;\n  text-transform: inherit;\n  vertical-align: inherit;\n  white-space: inherit;\n}\n.tox *:not(svg):not(rect) {\n  /* stylelint-disable-line no-duplicate-selectors */\n  background: transparent;\n  border: 0;\n  box-shadow: none;\n  float: none;\n  height: auto;\n  margin: 0;\n  max-width: none;\n  outline: 0;\n  padding: 0;\n  position: static;\n  width: auto;\n}\n.tox:not([dir=rtl]) {\n  direction: ltr;\n  text-align: left;\n}\n.tox[dir=rtl] {\n  direction: rtl;\n  text-align: right;\n}\n.tox-tinymce {\n  border: 2px solid #161f29;\n  border-radius: 10px;\n  box-shadow: none;\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: column;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  overflow: hidden;\n  position: relative;\n  visibility: inherit !important;\n}\n.tox.tox-tinymce-inline {\n  border: none;\n  box-shadow: none;\n  overflow: initial;\n}\n.tox.tox-tinymce-inline .tox-editor-container {\n  overflow: initial;\n}\n.tox.tox-tinymce-inline .tox-editor-header {\n  background-color: #222F3E;\n  border: 2px solid #161f29;\n  border-radius: 10px;\n  box-shadow: none;\n  overflow: hidden;\n}\n.tox-tinymce-aux {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  z-index: 1300;\n}\n.tox-tinymce *:focus,\n.tox-tinymce-aux *:focus {\n  outline: none;\n}\nbutton::-moz-focus-inner {\n  border: 0;\n}\n.tox[dir=rtl] .tox-icon--flip svg {\n  transform: rotateY(180deg);\n}\n.tox .accessibility-issue__header {\n  align-items: center;\n  display: flex;\n  margin-bottom: 4px;\n}\n.tox .accessibility-issue__description {\n  align-items: stretch;\n  border: 1px solid #161f29;\n  border-radius: 6px;\n  display: flex;\n  justify-content: space-between;\n}\n.tox .accessibility-issue__description > div {\n  padding-bottom: 4px;\n}\n.tox .accessibility-issue__description > div > div {\n  align-items: center;\n  display: flex;\n  margin-bottom: 4px;\n}\n.tox .accessibility-issue__description > *:last-child:not(:only-child) {\n  border-color: #161f29;\n  border-style: solid;\n}\n.tox .accessibility-issue__repair {\n  margin-top: 16px;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description {\n  background-color: rgba(0, 108, 231, 0.5);\n  border-color: rgba(0, 108, 231, 0.4);\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description > *:last-child {\n  border-color: rgba(0, 108, 231, 0.4);\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg {\n  fill: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description {\n  background-color: rgba(255, 165, 0, 0.5);\n  border-color: rgba(255, 165, 0, 0.8);\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description > *:last-child {\n  border-color: rgba(255, 165, 0, 0.8);\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg {\n  fill: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description {\n  background-color: rgba(204, 0, 0, 0.5);\n  border-color: rgba(204, 0, 0, 0.8);\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description > *:last-child {\n  border-color: rgba(204, 0, 0, 0.8);\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg {\n  fill: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description {\n  background-color: rgba(120, 171, 70, 0.5);\n  border-color: rgba(120, 171, 70, 0.8);\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child {\n  border-color: rgba(120, 171, 70, 0.8);\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg {\n  fill: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue__header h1,\n.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 {\n  margin-top: 0;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button {\n  margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {\n  margin-left: auto;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description {\n  padding: 4px 4px 4px 8px;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description > *:last-child {\n  border-left-width: 1px;\n  padding-left: 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button {\n  margin-right: 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {\n  margin-right: auto;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description {\n  padding: 4px 8px 4px 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description > *:last-child {\n  border-right-width: 1px;\n  padding-right: 4px;\n}\n.tox .tox-anchorbar {\n  display: flex;\n  flex: 0 0 auto;\n}\n.tox .tox-bar {\n  display: flex;\n  flex: 0 0 auto;\n}\n.tox .tox-button {\n  background-color: #006ce7;\n  background-image: none;\n  background-position: 0 0;\n  background-repeat: repeat;\n  border-color: #006ce7;\n  border-radius: 6px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  color: #fff;\n  cursor: pointer;\n  display: inline-block;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  line-height: 24px;\n  margin: 0;\n  outline: none;\n  padding: 4px 16px;\n  position: relative;\n  text-align: center;\n  text-decoration: none;\n  text-transform: none;\n  white-space: nowrap;\n}\n.tox .tox-button::before {\n  border-radius: 6px;\n  bottom: -1px;\n  box-shadow: inset 0 0 0 2px #fff, 0 0 0 1px #006ce7, 0 0 0 3px rgba(0, 108, 231, 0.25);\n  content: '';\n  left: -1px;\n  opacity: 0;\n  pointer-events: none;\n  position: absolute;\n  right: -1px;\n  top: -1px;\n}\n.tox .tox-button[disabled] {\n  background-color: #006ce7;\n  background-image: none;\n  border-color: #006ce7;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-button:focus:not(:disabled) {\n  background-color: #0060ce;\n  background-image: none;\n  border-color: #0060ce;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button:focus-visible:not(:disabled)::before {\n  opacity: 1;\n}\n.tox .tox-button:hover:not(:disabled) {\n  background-color: #0060ce;\n  background-image: none;\n  border-color: #0060ce;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button:active:not(:disabled) {\n  background-color: #0054b4;\n  background-image: none;\n  border-color: #0054b4;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--secondary {\n  background-color: #3d546f;\n  background-image: none;\n  background-position: 0 0;\n  background-repeat: repeat;\n  border-color: #3d546f;\n  border-radius: 6px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  color: #fff;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  outline: none;\n  padding: 4px 16px;\n  text-decoration: none;\n  text-transform: none;\n}\n.tox .tox-button--secondary[disabled] {\n  background-color: #3d546f;\n  background-image: none;\n  border-color: #3d546f;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-button--secondary:focus:not(:disabled) {\n  background-color: #34485f;\n  background-image: none;\n  border-color: #34485f;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--secondary:hover:not(:disabled) {\n  background-color: #34485f;\n  background-image: none;\n  border-color: #34485f;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--secondary:active:not(:disabled) {\n  background-color: #2b3b4e;\n  background-image: none;\n  border-color: #2b3b4e;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--icon,\n.tox .tox-button.tox-button--icon,\n.tox .tox-button.tox-button--secondary.tox-button--icon {\n  padding: 4px;\n}\n.tox .tox-button--icon .tox-icon svg,\n.tox .tox-button.tox-button--icon .tox-icon svg,\n.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg {\n  display: block;\n  fill: currentColor;\n}\n.tox .tox-button-link {\n  background: 0;\n  border: none;\n  box-sizing: border-box;\n  cursor: pointer;\n  display: inline-block;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  font-weight: normal;\n  line-height: 1.3;\n  margin: 0;\n  padding: 0;\n  white-space: nowrap;\n}\n.tox .tox-button-link--sm {\n  font-size: 14px;\n}\n.tox .tox-button--naked {\n  background-color: transparent;\n  border-color: transparent;\n  box-shadow: unset;\n  color: #fff;\n}\n.tox .tox-button--naked[disabled] {\n  background-color: rgba(255, 255, 255, 0.2);\n  border-color: transparent;\n  box-shadow: unset;\n  color: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-button--naked:hover:not(:disabled) {\n  background-color: rgba(255, 255, 255, 0.2);\n  border-color: transparent;\n  box-shadow: unset;\n  color: #fff;\n}\n.tox .tox-button--naked:focus:not(:disabled) {\n  background-color: rgba(255, 255, 255, 0.2);\n  border-color: transparent;\n  box-shadow: unset;\n  color: #fff;\n}\n.tox .tox-button--naked:active:not(:disabled) {\n  background-color: rgba(255, 255, 255, 0.3);\n  border-color: transparent;\n  box-shadow: unset;\n  color: #fff;\n}\n.tox .tox-button--naked .tox-icon svg {\n  fill: currentColor;\n}\n.tox .tox-button--naked.tox-button--icon:hover:not(:disabled) {\n  color: #fff;\n}\n.tox .tox-checkbox {\n  align-items: center;\n  border-radius: 6px;\n  cursor: pointer;\n  display: flex;\n  height: 36px;\n  min-width: 36px;\n}\n.tox .tox-checkbox__input {\n  /* Hide from view but visible to screen readers */\n  height: 1px;\n  overflow: hidden;\n  position: absolute;\n  top: auto;\n  width: 1px;\n}\n.tox .tox-checkbox__icons {\n  align-items: center;\n  border-radius: 6px;\n  box-shadow: 0 0 0 2px transparent;\n  box-sizing: content-box;\n  display: flex;\n  height: 24px;\n  justify-content: center;\n  padding: calc(4px - 1px);\n  width: 24px;\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  display: block;\n  fill: rgba(255, 255, 255, 0.2);\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n  display: none;\n  fill: #006ce7;\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n  display: none;\n  fill: #006ce7;\n}\n.tox .tox-checkbox--disabled {\n  color: rgba(255, 255, 255, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  display: none;\n}\n.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n  display: block;\n}\n.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  display: none;\n}\n.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n  display: block;\n}\n.tox input.tox-checkbox__input:focus + .tox-checkbox__icons {\n  border-radius: 6px;\n  box-shadow: inset 0 0 0 1px #006ce7;\n  padding: calc(4px - 1px);\n}\n.tox:not([dir=rtl]) .tox-checkbox__label {\n  margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-checkbox__input {\n  left: -10000px;\n}\n.tox:not([dir=rtl]) .tox-bar .tox-checkbox {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-checkbox__label {\n  margin-right: 4px;\n}\n.tox[dir=rtl] .tox-checkbox__input {\n  right: -10000px;\n}\n.tox[dir=rtl] .tox-bar .tox-checkbox {\n  margin-right: 4px;\n}\n.tox {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox .tox-collection--toolbar .tox-collection__group {\n  display: flex;\n  padding: 0;\n}\n.tox .tox-collection--grid .tox-collection__group {\n  display: flex;\n  flex-wrap: wrap;\n  max-height: 208px;\n  overflow-x: hidden;\n  overflow-y: auto;\n  padding: 0;\n}\n.tox .tox-collection--list .tox-collection__group {\n  border-bottom-width: 0;\n  border-color: rgba(255, 255, 255, 0.15);\n  border-left-width: 0;\n  border-right-width: 0;\n  border-style: solid;\n  border-top-width: 1px;\n  padding: 4px 0;\n}\n.tox .tox-collection--list .tox-collection__group:first-child {\n  border-top-width: 0;\n}\n.tox .tox-collection__group-heading {\n  background-color: rgba(255, 255, 255, 0.15);\n  color: rgba(255, 255, 255, 0.5);\n  cursor: default;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  margin-bottom: 4px;\n  margin-top: -4px;\n  padding: 4px 8px;\n  text-transform: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.tox .tox-collection__item {\n  align-items: center;\n  border-radius: 3px;\n  color: #fff;\n  display: flex;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.tox .tox-collection--list .tox-collection__item {\n  padding: 4px 8px;\n}\n.tox .tox-collection--toolbar .tox-collection__item {\n  border-radius: 3px;\n  padding: 4px;\n}\n.tox .tox-collection--grid .tox-collection__item {\n  border-radius: 3px;\n  padding: 4px;\n}\n.tox .tox-collection--list .tox-collection__item--enabled {\n  background-color: #2b3b4e;\n  color: #fff;\n}\n.tox .tox-collection--list .tox-collection__item--active {\n  background-color: #3389ec;\n}\n.tox .tox-collection--toolbar .tox-collection__item--enabled {\n  background-color: #599fef;\n  color: #fff;\n}\n.tox .tox-collection--toolbar .tox-collection__item--active {\n  background-color: #3389ec;\n}\n.tox .tox-collection--grid .tox-collection__item--enabled {\n  background-color: #599fef;\n  color: #fff;\n}\n.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n  background-color: #3389ec;\n  color: #fff;\n}\n.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n  color: #fff;\n}\n.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n  color: #fff;\n}\n.tox .tox-collection__item-icon,\n.tox .tox-collection__item-checkmark {\n  align-items: center;\n  display: flex;\n  height: 24px;\n  justify-content: center;\n  width: 24px;\n}\n.tox .tox-collection__item-icon svg,\n.tox .tox-collection__item-checkmark svg {\n  fill: currentColor;\n}\n.tox .tox-collection--toolbar-lg .tox-collection__item-icon {\n  height: 48px;\n  width: 48px;\n}\n.tox .tox-collection__item-label {\n  color: currentColor;\n  display: inline-block;\n  flex: 1;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 24px;\n  text-transform: none;\n  word-break: break-all;\n}\n.tox .tox-collection__item-accessory {\n  color: rgba(255, 255, 255, 0.5);\n  display: inline-block;\n  font-size: 14px;\n  height: 24px;\n  line-height: 24px;\n  text-transform: none;\n}\n.tox .tox-collection__item-caret {\n  align-items: center;\n  display: flex;\n  min-height: 24px;\n}\n.tox .tox-collection__item-caret::after {\n  content: '';\n  font-size: 0;\n  min-height: inherit;\n}\n.tox .tox-collection__item-caret svg {\n  fill: #fff;\n}\n.tox .tox-collection__item--state-disabled {\n  background-color: transparent;\n  color: rgba(255, 255, 255, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg {\n  display: none;\n}\n.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark {\n  display: none;\n}\n.tox .tox-collection--horizontal {\n  background-color: #2b3b4e;\n  border: 1px solid rgba(255, 255, 255, 0.15);\n  border-radius: 6px;\n  box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n  display: flex;\n  flex: 0 0 auto;\n  flex-shrink: 0;\n  flex-wrap: nowrap;\n  margin-bottom: 0;\n  overflow-x: auto;\n  padding: 0;\n}\n.tox .tox-collection--horizontal .tox-collection__group {\n  align-items: center;\n  display: flex;\n  flex-wrap: nowrap;\n  margin: 0;\n  padding: 0 4px;\n}\n.tox .tox-collection--horizontal .tox-collection__item {\n  height: 28px;\n  margin: 6px 1px 5px 0;\n  padding: 0 4px;\n}\n.tox .tox-collection--horizontal .tox-collection__item-label {\n  white-space: nowrap;\n}\n.tox .tox-collection--horizontal .tox-collection__item-caret {\n  margin-left: 4px;\n}\n.tox .tox-collection__item-container {\n  display: flex;\n}\n.tox .tox-collection__item-container--row {\n  align-items: center;\n  flex: 1 1 auto;\n  flex-direction: row;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--align-left {\n  margin-right: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--align-right {\n  justify-content: flex-end;\n  margin-left: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top {\n  align-items: flex-start;\n  margin-bottom: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle {\n  align-items: center;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom {\n  align-items: flex-end;\n  margin-top: auto;\n}\n.tox .tox-collection__item-container--column {\n  align-self: center;\n  flex: 1 1 auto;\n  flex-direction: column;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--align-left {\n  align-items: flex-start;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--align-right {\n  align-items: flex-end;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top {\n  align-self: flex-start;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle {\n  align-self: center;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom {\n  align-self: flex-end;\n}\n.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {\n  border-right: 1px solid transparent;\n}\n.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) {\n  margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {\n  margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-collection__item-accessory {\n  margin-left: 16px;\n  text-align: right;\n}\n.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret {\n  margin-left: 16px;\n}\n.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {\n  border-left: 1px solid transparent;\n}\n.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) {\n  margin-right: 8px;\n}\n.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {\n  margin-right: 4px;\n}\n.tox[dir=rtl] .tox-collection__item-accessory {\n  margin-right: 16px;\n  text-align: left;\n}\n.tox[dir=rtl] .tox-collection .tox-collection__item-caret {\n  margin-right: 16px;\n  transform: rotateY(180deg);\n}\n.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret {\n  margin-right: 4px;\n}\n.tox .tox-color-picker-container {\n  display: flex;\n  flex-direction: row;\n  height: 225px;\n  margin: 0;\n}\n.tox .tox-sv-palette {\n  box-sizing: border-box;\n  display: flex;\n  height: 100%;\n}\n.tox .tox-sv-palette-spectrum {\n  height: 100%;\n}\n.tox .tox-sv-palette,\n.tox .tox-sv-palette-spectrum {\n  width: 225px;\n}\n.tox .tox-sv-palette-thumb {\n  background: none;\n  border: 1px solid black;\n  border-radius: 50%;\n  box-sizing: content-box;\n  height: 12px;\n  position: absolute;\n  width: 12px;\n}\n.tox .tox-sv-palette-inner-thumb {\n  border: 1px solid white;\n  border-radius: 50%;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n}\n.tox .tox-hue-slider {\n  box-sizing: border-box;\n  height: 100%;\n  width: 25px;\n}\n.tox .tox-hue-slider-spectrum {\n  background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00);\n  height: 100%;\n  width: 100%;\n}\n.tox .tox-hue-slider,\n.tox .tox-hue-slider-spectrum {\n  width: 20px;\n}\n.tox .tox-hue-slider-thumb {\n  background: white;\n  border: 1px solid black;\n  box-sizing: content-box;\n  height: 4px;\n  width: 100%;\n}\n.tox .tox-rgb-form {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n}\n.tox .tox-rgb-form div {\n  align-items: center;\n  display: flex;\n  justify-content: space-between;\n  margin-bottom: 5px;\n  width: inherit;\n}\n.tox .tox-rgb-form input {\n  width: 6em;\n}\n.tox .tox-rgb-form input.tox-invalid {\n  /* Need !important to override Chrome's focus styling unfortunately */\n  border: 1px solid red !important;\n}\n.tox .tox-rgb-form .tox-rgba-preview {\n  border: 1px solid black;\n  flex-grow: 2;\n  margin-bottom: 0;\n}\n.tox:not([dir=rtl]) .tox-sv-palette {\n  margin-right: 15px;\n}\n.tox:not([dir=rtl]) .tox-hue-slider {\n  margin-right: 15px;\n}\n.tox:not([dir=rtl]) .tox-hue-slider-thumb {\n  margin-left: -1px;\n}\n.tox:not([dir=rtl]) .tox-rgb-form label {\n  margin-right: 0.5em;\n}\n.tox[dir=rtl] .tox-sv-palette {\n  margin-left: 15px;\n}\n.tox[dir=rtl] .tox-hue-slider {\n  margin-left: 15px;\n}\n.tox[dir=rtl] .tox-hue-slider-thumb {\n  margin-right: -1px;\n}\n.tox[dir=rtl] .tox-rgb-form label {\n  margin-left: 0.5em;\n}\n.tox .tox-toolbar .tox-swatches,\n.tox .tox-toolbar__primary .tox-swatches,\n.tox .tox-toolbar__overflow .tox-swatches {\n  margin: 5px 0 6px 11px;\n}\n.tox .tox-collection--list .tox-collection__group .tox-swatches-menu {\n  border: 0;\n  margin: -4px -4px;\n}\n.tox .tox-swatches__row {\n  display: flex;\n}\n.tox .tox-swatch {\n  height: 30px;\n  transition: transform 0.15s, box-shadow 0.15s;\n  width: 30px;\n}\n.tox .tox-swatch:hover,\n.tox .tox-swatch:focus {\n  box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset;\n  transform: scale(0.8);\n}\n.tox .tox-swatch--remove {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n}\n.tox .tox-swatch--remove svg path {\n  stroke: #e74c3c;\n}\n.tox .tox-swatches__picker-btn {\n  align-items: center;\n  background-color: transparent;\n  border: 0;\n  cursor: pointer;\n  display: flex;\n  height: 30px;\n  justify-content: center;\n  outline: none;\n  padding: 0;\n  width: 30px;\n}\n.tox .tox-swatches__picker-btn svg {\n  fill: #fff;\n  height: 24px;\n  width: 24px;\n}\n.tox .tox-swatches__picker-btn:hover {\n  background: #3389ec;\n}\n.tox:not([dir=rtl]) .tox-swatches__picker-btn {\n  margin-left: auto;\n}\n.tox[dir=rtl] .tox-swatches__picker-btn {\n  margin-right: auto;\n}\n.tox .tox-comment-thread {\n  background: #2b3b4e;\n  position: relative;\n}\n.tox .tox-comment-thread > *:not(:first-child) {\n  margin-top: 8px;\n}\n.tox .tox-comment {\n  background: #2b3b4e;\n  border: 1px solid #161f29;\n  border-radius: 6px;\n  box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1);\n  padding: 8px 8px 16px 8px;\n  position: relative;\n}\n.tox .tox-comment__header {\n  align-items: center;\n  color: #fff;\n  display: flex;\n  justify-content: space-between;\n}\n.tox .tox-comment__date {\n  color: #fff;\n  font-size: 12px;\n  line-height: 18px;\n}\n.tox .tox-comment__body {\n  color: #fff;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  margin-top: 8px;\n  position: relative;\n  text-transform: initial;\n}\n.tox .tox-comment__body textarea {\n  resize: none;\n  white-space: normal;\n  width: 100%;\n}\n.tox .tox-comment__expander {\n  padding-top: 8px;\n}\n.tox .tox-comment__expander p {\n  color: rgba(255, 255, 255, 0.5);\n  font-size: 14px;\n  font-style: normal;\n}\n.tox .tox-comment__body p {\n  margin: 0;\n}\n.tox .tox-comment__buttonspacing {\n  padding-top: 16px;\n  text-align: center;\n}\n.tox .tox-comment-thread__overlay::after {\n  background: #2b3b4e;\n  bottom: 0;\n  content: \"\";\n  display: flex;\n  left: 0;\n  opacity: 0.9;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 5;\n}\n.tox .tox-comment__reply {\n  display: flex;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  margin-top: 8px;\n}\n.tox .tox-comment__reply > *:first-child {\n  margin-bottom: 8px;\n  width: 100%;\n}\n.tox .tox-comment__edit {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  margin-top: 16px;\n}\n.tox .tox-comment__gradient::after {\n  background: linear-gradient(rgba(43, 59, 78, 0), #2b3b4e);\n  bottom: 0;\n  content: \"\";\n  display: block;\n  height: 5em;\n  margin-top: -40px;\n  position: absolute;\n  width: 100%;\n}\n.tox .tox-comment__overlay {\n  background: #2b3b4e;\n  bottom: 0;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  left: 0;\n  opacity: 0.9;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 0;\n  z-index: 5;\n}\n.tox .tox-comment__loading-text {\n  align-items: center;\n  color: #fff;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n}\n.tox .tox-comment__loading-text > div {\n  padding-bottom: 16px;\n}\n.tox .tox-comment__overlaytext {\n  bottom: 0;\n  flex-direction: column;\n  font-size: 14px;\n  left: 0;\n  padding: 1em;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 10;\n}\n.tox .tox-comment__overlaytext p {\n  background-color: #2b3b4e;\n  box-shadow: 0 0 8px 8px #2b3b4e;\n  color: #fff;\n  text-align: center;\n}\n.tox .tox-comment__overlaytext div:nth-of-type(2) {\n  font-size: 0.8em;\n}\n.tox .tox-comment__busy-spinner {\n  align-items: center;\n  background-color: #2b3b4e;\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 20;\n}\n.tox .tox-comment__scroll {\n  display: flex;\n  flex-direction: column;\n  flex-shrink: 1;\n  overflow: auto;\n}\n.tox .tox-conversations {\n  margin: 8px;\n}\n.tox:not([dir=rtl]) .tox-comment__edit {\n  margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child,\n.tox:not([dir=rtl]) .tox-comment__edit > *:last-child,\n.tox:not([dir=rtl]) .tox-comment__reply > *:last-child {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-comment__edit {\n  margin-right: 8px;\n}\n.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child,\n.tox[dir=rtl] .tox-comment__edit > *:last-child,\n.tox[dir=rtl] .tox-comment__reply > *:last-child {\n  margin-right: 8px;\n}\n.tox .tox-user {\n  align-items: center;\n  display: flex;\n}\n.tox .tox-user__avatar svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-user__avatar img {\n  border-radius: 50%;\n  height: 36px;\n  object-fit: cover;\n  vertical-align: middle;\n  width: 36px;\n}\n.tox .tox-user__name {\n  color: #fff;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: bold;\n  line-height: 18px;\n  text-transform: none;\n}\n.tox:not([dir=rtl]) .tox-user__avatar svg,\n.tox:not([dir=rtl]) .tox-user__avatar img {\n  margin-right: 8px;\n}\n.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-user__avatar svg,\n.tox[dir=rtl] .tox-user__avatar img {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-user__avatar + .tox-user__name {\n  margin-right: 8px;\n}\n.tox .tox-dialog-wrap {\n  align-items: center;\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: fixed;\n  right: 0;\n  top: 0;\n  z-index: 1100;\n}\n.tox .tox-dialog-wrap__backdrop {\n  background-color: rgba(34, 47, 62, 0.75);\n  bottom: 0;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 1;\n}\n.tox .tox-dialog-wrap__backdrop--opaque {\n  background-color: #222F3E;\n}\n.tox .tox-dialog {\n  background-color: #2b3b4e;\n  border-color: #161f29;\n  border-radius: 10px;\n  border-style: solid;\n  border-width: 0px;\n  box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15);\n  display: flex;\n  flex-direction: column;\n  max-height: 100%;\n  max-width: 480px;\n  overflow: hidden;\n  position: relative;\n  width: 95vw;\n  z-index: 2;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox .tox-dialog {\n    align-self: flex-start;\n    margin: 8px auto;\n    max-height: calc(100vh - 8px * 2);\n    width: calc(100vw - 16px);\n  }\n}\n.tox .tox-dialog-inline {\n  z-index: 1100;\n}\n.tox .tox-dialog__header {\n  align-items: center;\n  background-color: #2b3b4e;\n  border-bottom: none;\n  color: #fff;\n  display: flex;\n  font-size: 16px;\n  justify-content: space-between;\n  padding: 8px 16px 0 16px;\n  position: relative;\n}\n.tox .tox-dialog__header .tox-button {\n  z-index: 1;\n}\n.tox .tox-dialog__draghandle {\n  cursor: grab;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tox .tox-dialog__draghandle:active {\n  cursor: grabbing;\n}\n.tox .tox-dialog__dismiss {\n  margin-left: auto;\n}\n.tox .tox-dialog__title {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 20px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  margin: 0;\n  text-transform: none;\n}\n.tox .tox-dialog__body {\n  color: #fff;\n  display: flex;\n  flex: 1;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  min-width: 0;\n  text-align: left;\n  text-transform: none;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox .tox-dialog__body {\n    flex-direction: column;\n  }\n}\n.tox .tox-dialog__body-nav {\n  align-items: flex-start;\n  display: flex;\n  flex-direction: column;\n  padding: 16px 16px;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox .tox-dialog__body-nav {\n    flex-direction: row;\n    -webkit-overflow-scrolling: touch;\n    overflow-x: auto;\n    padding-bottom: 0;\n  }\n}\n.tox .tox-dialog__body-nav-item {\n  border-bottom: 2px solid transparent;\n  color: rgba(255, 255, 255, 0.5);\n  display: inline-block;\n  font-size: 14px;\n  line-height: 1.3;\n  margin-bottom: 8px;\n  text-decoration: none;\n  white-space: nowrap;\n}\n.tox .tox-dialog__body-nav-item:focus {\n  background-color: rgba(0, 108, 231, 0.1);\n}\n.tox .tox-dialog__body-nav-item--active {\n  border-bottom: 2px solid #006ce7;\n  color: #006ce7;\n}\n.tox .tox-dialog__body-content {\n  box-sizing: border-box;\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  max-height: 650px;\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n  padding: 16px 16px;\n}\n.tox .tox-dialog__body-content > * {\n  margin-bottom: 0;\n  margin-top: 16px;\n}\n.tox .tox-dialog__body-content > *:first-child {\n  margin-top: 0;\n}\n.tox .tox-dialog__body-content > *:last-child {\n  margin-bottom: 0;\n}\n.tox .tox-dialog__body-content > *:only-child {\n  margin-bottom: 0;\n  margin-top: 0;\n}\n.tox .tox-dialog__body-content a {\n  color: #006ce7;\n  cursor: pointer;\n  text-decoration: none;\n}\n.tox .tox-dialog__body-content a:hover,\n.tox .tox-dialog__body-content a:focus {\n  color: #0054b4;\n  text-decoration: none;\n}\n.tox .tox-dialog__body-content a:active {\n  color: #0054b4;\n  text-decoration: none;\n}\n.tox .tox-dialog__body-content svg {\n  fill: #fff;\n}\n.tox .tox-dialog__body-content ul {\n  display: block;\n  list-style-type: disc;\n  margin-bottom: 16px;\n  margin-inline-end: 0;\n  margin-inline-start: 0;\n  padding-inline-start: 2.5rem;\n}\n.tox .tox-dialog__body-content .tox-form__group h1 {\n  color: #fff;\n  font-size: 20px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  margin-bottom: 16px;\n  margin-top: 2rem;\n  text-transform: none;\n}\n.tox .tox-dialog__body-content .tox-form__group h2 {\n  color: #fff;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  margin-bottom: 16px;\n  margin-top: 2rem;\n  text-transform: none;\n}\n.tox .tox-dialog__body-content .tox-form__group p {\n  margin-bottom: 16px;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:first-child,\n.tox .tox-dialog__body-content .tox-form__group h2:first-child,\n.tox .tox-dialog__body-content .tox-form__group p:first-child {\n  margin-top: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:last-child,\n.tox .tox-dialog__body-content .tox-form__group h2:last-child,\n.tox .tox-dialog__body-content .tox-form__group p:last-child {\n  margin-bottom: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:only-child,\n.tox .tox-dialog__body-content .tox-form__group h2:only-child,\n.tox .tox-dialog__body-content .tox-form__group p:only-child {\n  margin-bottom: 0;\n  margin-top: 0;\n}\n.tox .tox-dialog--width-lg {\n  height: 650px;\n  max-width: 1200px;\n}\n.tox .tox-dialog--width-md {\n  max-width: 800px;\n}\n.tox .tox-dialog--width-md .tox-dialog__body-content {\n  overflow: auto;\n}\n.tox .tox-dialog__body-content--centered {\n  text-align: center;\n}\n.tox .tox-dialog__footer {\n  align-items: center;\n  background-color: #2b3b4e;\n  border-top: none;\n  display: flex;\n  justify-content: space-between;\n  padding: 8px 16px;\n}\n.tox .tox-dialog__footer-start,\n.tox .tox-dialog__footer-end {\n  display: flex;\n}\n.tox .tox-dialog__busy-spinner {\n  align-items: center;\n  background-color: rgba(34, 47, 62, 0.75);\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 3;\n}\n.tox .tox-dialog__table {\n  border-collapse: collapse;\n  width: 100%;\n}\n.tox .tox-dialog__table thead th {\n  font-weight: bold;\n  padding-bottom: 8px;\n}\n.tox .tox-dialog__table tbody tr {\n  border-bottom: 1px solid #161f29;\n}\n.tox .tox-dialog__table tbody tr:last-child {\n  border-bottom: none;\n}\n.tox .tox-dialog__table td {\n  padding-bottom: 8px;\n  padding-top: 8px;\n}\n.tox .tox-dialog__iframe.tox-dialog__iframe--opaque {\n  background: #fff;\n}\n.tox .tox-dialog__popups {\n  position: absolute;\n  width: 100%;\n  z-index: 1100;\n}\n.tox .tox-dialog__body-iframe {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.tox .tox-dialog__body-iframe .tox-navobj {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) {\n  flex: 1;\n  height: 100%;\n}\n.tox .tox-dialog-dock-fadeout {\n  opacity: 0;\n  visibility: hidden;\n}\n.tox .tox-dialog-dock-fadein {\n  opacity: 1;\n  visibility: visible;\n}\n.tox .tox-dialog-dock-transition {\n  transition: visibility 0s linear 0.3s, opacity 0.3s ease;\n}\n.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein {\n  transition-delay: 0s;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav {\n    margin-right: 0;\n  }\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) {\n    margin-left: 8px;\n  }\n}\n.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *,\n.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-dialog__body {\n  text-align: right;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav {\n    margin-left: 0;\n  }\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) {\n    margin-right: 8px;\n  }\n}\n.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *,\n.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * {\n  margin-right: 8px;\n}\nbody.tox-dialog__disable-scroll {\n  overflow: hidden;\n}\n.tox .tox-dropzone-container {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-dropzone {\n  align-items: center;\n  background: #fff;\n  border: 2px dashed #161f29;\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  justify-content: center;\n  min-height: 100px;\n  padding: 10px;\n}\n.tox .tox-dropzone p {\n  color: rgba(255, 255, 255, 0.5);\n  margin: 0 0 16px 0;\n}\n.tox .tox-edit-area {\n  display: flex;\n  flex: 1;\n  overflow: hidden;\n  position: relative;\n}\n.tox .tox-edit-area__iframe {\n  background-color: #fff;\n  border: 0;\n  box-sizing: border-box;\n  flex: 1;\n  height: 100%;\n  position: absolute;\n  width: 100%;\n}\n.tox.tox-inline-edit-area {\n  border: 1px dotted #161f29;\n}\n.tox .tox-editor-container {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  overflow: hidden;\n}\n.tox .tox-editor-header {\n  display: grid;\n  grid-template-columns: 1fr min-content;\n  z-index: 1;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header {\n  background-color: #222F3E;\n  border-bottom: 1px solid rgba(255, 255, 255, 0.15);\n  box-shadow: none;\n  padding: 4px 0;\n  transition: box-shadow 0.5s;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header {\n  border-top: 1px solid rgba(255, 255, 255, 0.15);\n  box-shadow: none;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header {\n  background-color: #222F3E;\n  box-shadow: none;\n  padding: 4px 0;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header {\n  box-shadow: none;\n}\n.tox-editor-dock-fadeout {\n  opacity: 0;\n  visibility: hidden;\n}\n.tox-editor-dock-fadein {\n  opacity: 1;\n  visibility: visible;\n}\n.tox-editor-dock-transition {\n  transition: visibility 0s linear 0.25s, opacity 0.25s ease;\n}\n.tox-editor-dock-transition.tox-editor-dock-fadein {\n  transition-delay: 0s;\n}\n.tox .tox-control-wrap {\n  flex: 1;\n  position: relative;\n}\n.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,\n.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,\n.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid {\n  display: none;\n}\n.tox .tox-control-wrap svg {\n  display: block;\n}\n.tox .tox-control-wrap__status-icon-wrap {\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox .tox-control-wrap__status-icon-invalid svg {\n  fill: #c00;\n}\n.tox .tox-control-wrap__status-icon-unknown svg {\n  fill: orange;\n}\n.tox .tox-control-wrap__status-icon-valid svg {\n  fill: green;\n}\n.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,\n.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,\n.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield {\n  padding-right: 32px;\n}\n.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap {\n  right: 4px;\n}\n.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,\n.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,\n.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield {\n  padding-left: 32px;\n}\n.tox[dir=rtl] .tox-control-wrap__status-icon-wrap {\n  left: 4px;\n}\n.tox .tox-autocompleter {\n  max-width: 25em;\n}\n.tox .tox-autocompleter .tox-menu {\n  box-sizing: border-box;\n  max-width: 25em;\n}\n.tox .tox-autocompleter .tox-autocompleter-highlight {\n  font-weight: bold;\n}\n.tox .tox-color-input {\n  display: flex;\n  position: relative;\n  z-index: 1;\n}\n.tox .tox-color-input .tox-textfield {\n  z-index: -1;\n}\n.tox .tox-color-input span {\n  border-color: rgba(34, 47, 62, 0.2);\n  border-radius: 6px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  height: 24px;\n  position: absolute;\n  top: 6px;\n  width: 24px;\n}\n.tox .tox-color-input span:hover:not([aria-disabled=true]),\n.tox .tox-color-input span:focus:not([aria-disabled=true]) {\n  border-color: #006ce7;\n  cursor: pointer;\n}\n.tox .tox-color-input span::before {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(255, 255, 255, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(255, 255, 255, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(255, 255, 255, 0.25) 75%);\n  background-position: 0 0, 0 6px, 6px -6px, -6px 0;\n  background-size: 12px 12px;\n  border: 1px solid #2b3b4e;\n  border-radius: 6px;\n  box-sizing: border-box;\n  content: '';\n  height: 24px;\n  left: -1px;\n  position: absolute;\n  top: -1px;\n  width: 24px;\n  z-index: -1;\n}\n.tox .tox-color-input span[aria-disabled=true] {\n  cursor: not-allowed;\n}\n.tox:not([dir=rtl]) .tox-color-input {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox:not([dir=rtl]) .tox-color-input .tox-textfield {\n  padding-left: 36px;\n}\n.tox:not([dir=rtl]) .tox-color-input span {\n  left: 6px;\n}\n.tox[dir=\"rtl\"] .tox-color-input {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox[dir=\"rtl\"] .tox-color-input .tox-textfield {\n  padding-right: 36px;\n}\n.tox[dir=\"rtl\"] .tox-color-input span {\n  right: 6px;\n}\n.tox .tox-label,\n.tox .tox-toolbar-label {\n  color: rgba(255, 255, 255, 0.5);\n  display: block;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  padding: 0 8px 0 0;\n  text-transform: none;\n  white-space: nowrap;\n}\n.tox .tox-toolbar-label {\n  padding: 0 8px;\n}\n.tox[dir=rtl] .tox-label {\n  padding: 0 0 0 8px;\n}\n.tox .tox-form {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.tox .tox-form__group {\n  box-sizing: border-box;\n  margin-bottom: 4px;\n}\n.tox .tox-form-group--maximize {\n  flex: 1;\n}\n.tox .tox-form__group--error {\n  color: #c00;\n}\n.tox .tox-form__group--collection {\n  display: flex;\n}\n.tox .tox-form__grid {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n}\n.tox .tox-form__grid--2col > .tox-form__group {\n  width: calc(50% - (8px / 2));\n}\n.tox .tox-form__grid--3col > .tox-form__group {\n  width: calc(100% / 3 - (8px / 2));\n}\n.tox .tox-form__grid--4col > .tox-form__group {\n  width: calc(25% - (8px / 2));\n}\n.tox .tox-form__controls-h-stack {\n  align-items: center;\n  display: flex;\n}\n.tox .tox-form__group--inline {\n  align-items: center;\n  display: flex;\n}\n.tox .tox-form__group--stretched {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.tox .tox-form__group--stretched .tox-textarea {\n  flex: 1;\n}\n.tox .tox-form__group--stretched .tox-navobj {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-form__group--stretched .tox-navobj :nth-child(2) {\n  flex: 1;\n  height: 100%;\n}\n.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) {\n  margin-right: 4px;\n}\n.tox .tox-lock.tox-locked .tox-lock-icon__unlock,\n.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock {\n  display: none;\n}\n.tox .tox-textfield,\n.tox .tox-toolbar-textfield,\n.tox .tox-listboxfield .tox-listbox--select,\n.tox .tox-textarea {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  background-color: #2b3b4e;\n  border-color: #161f29;\n  border-radius: 6px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  color: #fff;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  line-height: 24px;\n  margin: 0;\n  min-height: 34px;\n  outline: none;\n  padding: 5px 5.5px;\n  resize: none;\n  width: 100%;\n}\n.tox .tox-textfield[disabled],\n.tox .tox-textarea[disabled] {\n  background-color: #222f3e;\n  color: rgba(255, 255, 255, 0.85);\n  cursor: not-allowed;\n}\n.tox .tox-textfield:focus,\n.tox .tox-listboxfield .tox-listbox--select:focus,\n.tox .tox-textarea:focus {\n  background-color: #2b3b4e;\n  border-color: #006ce7;\n  box-shadow: 0 0 0 2px rgba(0, 108, 231, 0.25);\n  outline: none;\n}\n.tox .tox-toolbar-textfield {\n  border-width: 0;\n  margin-bottom: 3px;\n  margin-top: 2px;\n  max-width: 250px;\n}\n.tox .tox-naked-btn {\n  background-color: transparent;\n  border: 0;\n  border-color: transparent;\n  box-shadow: unset;\n  color: #006ce7;\n  cursor: pointer;\n  display: block;\n  margin: 0;\n  padding: 0;\n}\n.tox .tox-naked-btn svg {\n  display: block;\n  fill: #fff;\n}\n.tox:not([dir=rtl]) .tox-toolbar-textfield + * {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-toolbar-textfield + * {\n  margin-right: 4px;\n}\n.tox .tox-listboxfield {\n  cursor: pointer;\n  position: relative;\n}\n.tox .tox-listboxfield .tox-listbox--select[disabled] {\n  background-color: #19232e;\n  color: rgba(255, 255, 255, 0.85);\n  cursor: not-allowed;\n}\n.tox .tox-listbox__select-label {\n  cursor: default;\n  flex: 1;\n  margin: 0 4px;\n}\n.tox .tox-listbox__select-chevron {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  width: 16px;\n}\n.tox .tox-listbox__select-chevron svg {\n  fill: #fff;\n}\n.tox .tox-listboxfield .tox-listbox--select {\n  align-items: center;\n  display: flex;\n}\n.tox:not([dir=rtl]) .tox-listboxfield svg {\n  right: 8px;\n}\n.tox[dir=rtl] .tox-listboxfield svg {\n  left: 8px;\n}\n.tox .tox-selectfield {\n  cursor: pointer;\n  position: relative;\n}\n.tox .tox-selectfield select {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  background-color: #2b3b4e;\n  border-color: #161f29;\n  border-radius: 6px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  color: #fff;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  line-height: 24px;\n  margin: 0;\n  min-height: 34px;\n  outline: none;\n  padding: 5px 5.5px;\n  resize: none;\n  width: 100%;\n}\n.tox .tox-selectfield select[disabled] {\n  background-color: #19232e;\n  color: rgba(255, 255, 255, 0.85);\n  cursor: not-allowed;\n}\n.tox .tox-selectfield select::-ms-expand {\n  display: none;\n}\n.tox .tox-selectfield select:focus {\n  background-color: #2b3b4e;\n  border-color: #006ce7;\n  box-shadow: 0 0 0 2px rgba(0, 108, 231, 0.25);\n  outline: none;\n}\n.tox .tox-selectfield svg {\n  pointer-events: none;\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox:not([dir=rtl]) .tox-selectfield select[size=\"0\"],\n.tox:not([dir=rtl]) .tox-selectfield select[size=\"1\"] {\n  padding-right: 24px;\n}\n.tox:not([dir=rtl]) .tox-selectfield svg {\n  right: 8px;\n}\n.tox[dir=rtl] .tox-selectfield select[size=\"0\"],\n.tox[dir=rtl] .tox-selectfield select[size=\"1\"] {\n  padding-left: 24px;\n}\n.tox[dir=rtl] .tox-selectfield svg {\n  left: 8px;\n}\n.tox .tox-textarea {\n  -webkit-appearance: textarea;\n     -moz-appearance: textarea;\n          appearance: textarea;\n  white-space: pre-wrap;\n}\n.tox-fullscreen {\n  border: 0;\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  overscroll-behavior: none;\n  padding: 0;\n  touch-action: pinch-zoom;\n  width: 100%;\n}\n.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {\n  display: none;\n}\n.tox.tox-tinymce.tox-fullscreen,\n.tox-shadowhost.tox-fullscreen {\n  left: 0;\n  position: fixed;\n  top: 0;\n  z-index: 1200;\n}\n.tox.tox-tinymce.tox-fullscreen {\n  background-color: transparent;\n}\n.tox-fullscreen .tox.tox-tinymce-aux,\n.tox-fullscreen ~ .tox.tox-tinymce-aux {\n  z-index: 1201;\n}\n.tox .tox-help__more-link {\n  list-style: none;\n  margin-top: 1em;\n}\n.tox .tox-imagepreview {\n  background-color: #666;\n  height: 380px;\n  overflow: hidden;\n  position: relative;\n  width: 100%;\n}\n.tox .tox-imagepreview.tox-imagepreview__loaded {\n  overflow: auto;\n}\n.tox .tox-imagepreview__container {\n  display: flex;\n  left: 100vw;\n  position: absolute;\n  top: 100vw;\n}\n.tox .tox-imagepreview__image {\n  background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);\n}\n.tox .tox-image-tools .tox-spacer {\n  flex: 1;\n}\n.tox .tox-image-tools .tox-bar {\n  align-items: center;\n  display: flex;\n  height: 60px;\n  justify-content: center;\n}\n.tox .tox-image-tools .tox-imagepreview,\n.tox .tox-image-tools .tox-imagepreview + .tox-bar {\n  margin-top: 8px;\n}\n.tox .tox-image-tools .tox-croprect-block {\n  background: black;\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n  position: absolute;\n  zoom: 1;\n}\n.tox .tox-image-tools .tox-croprect-handle {\n  border: 2px solid white;\n  height: 20px;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 20px;\n}\n.tox .tox-image-tools .tox-croprect-handle-move {\n  border: 0;\n  cursor: move;\n  position: absolute;\n}\n.tox .tox-image-tools .tox-croprect-handle-nw {\n  border-width: 2px 0 0 2px;\n  cursor: nw-resize;\n  left: 100px;\n  margin: -2px 0 0 -2px;\n  top: 100px;\n}\n.tox .tox-image-tools .tox-croprect-handle-ne {\n  border-width: 2px 2px 0 0;\n  cursor: ne-resize;\n  left: 200px;\n  margin: -2px 0 0 -20px;\n  top: 100px;\n}\n.tox .tox-image-tools .tox-croprect-handle-sw {\n  border-width: 0 0 2px 2px;\n  cursor: sw-resize;\n  left: 100px;\n  margin: -20px 2px 0 -2px;\n  top: 200px;\n}\n.tox .tox-image-tools .tox-croprect-handle-se {\n  border-width: 0 2px 2px 0;\n  cursor: se-resize;\n  left: 200px;\n  margin: -20px 0 0 -20px;\n  top: 200px;\n}\n.tox .tox-insert-table-picker {\n  display: flex;\n  flex-wrap: wrap;\n  width: 170px;\n}\n.tox .tox-insert-table-picker > div {\n  border-color: rgba(255, 255, 255, 0.15);\n  border-style: solid;\n  border-width: 0 1px 1px 0;\n  box-sizing: border-box;\n  height: 17px;\n  width: 17px;\n}\n.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker {\n  margin: -4px -4px;\n}\n.tox .tox-insert-table-picker .tox-insert-table-picker__selected {\n  background-color: rgba(0, 108, 231, 0.5);\n  border-color: rgba(0, 108, 231, 0.5);\n}\n.tox .tox-insert-table-picker__label {\n  color: #fff;\n  display: block;\n  font-size: 14px;\n  padding: 4px;\n  text-align: center;\n  width: 100%;\n}\n.tox:not([dir=rtl]) {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) {\n  border-right: 0;\n}\n.tox[dir=rtl] {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) {\n  border-right: 0;\n}\n.tox {\n  /* stylelint-disable */\n  /* stylelint-enable */\n}\n.tox .tox-menu {\n  background-color: #2b3b4e;\n  border: 1px solid rgba(255, 255, 255, 0.15);\n  border-radius: 6px;\n  box-shadow: none;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  z-index: 1150;\n}\n.tox .tox-menu.tox-collection.tox-collection--list {\n  padding: 0 4px;\n}\n.tox .tox-menu.tox-collection.tox-collection--toolbar {\n  padding: 8px;\n}\n.tox .tox-menu.tox-collection.tox-collection--grid {\n  padding: 8px;\n}\n@media only screen and (min-width: 768px ) {\n  .tox .tox-menu .tox-collection__item-label {\n    overflow-wrap: break-word;\n    word-break: normal;\n  }\n}\n.tox .tox-menu__label h1,\n.tox .tox-menu__label h2,\n.tox .tox-menu__label h3,\n.tox .tox-menu__label h4,\n.tox .tox-menu__label h5,\n.tox .tox-menu__label h6,\n.tox .tox-menu__label p,\n.tox .tox-menu__label blockquote,\n.tox .tox-menu__label code {\n  margin: 0;\n}\n.tox .tox-menubar {\n  background: repeating-linear-gradient(transparent 0px 1px, transparent 1px 39px) center top 39px / 100% calc(100% - 39px) no-repeat;\n  background-color: #222F3E;\n  display: flex;\n  flex: 0 0 auto;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  grid-column: 1 / -1;\n  grid-row: 1;\n  padding: 0 11px 0 12px;\n}\n.tox .tox-promotion + .tox-menubar {\n  grid-column: 1;\n}\n.tox .tox-promotion {\n  background: repeating-linear-gradient(transparent 0px 1px, transparent 1px 39px) center top 39px / 100% calc(100% - 39px) no-repeat;\n  background-color: #222F3E;\n  grid-column: 2;\n  grid-row: 1;\n  padding-inline-end: 8px;\n  padding-inline-start: 4px;\n  padding-top: 5px;\n}\n.tox .tox-promotion-link {\n  align-items: unsafe center;\n  background-color: #E8F1F8;\n  border-radius: 5px;\n  color: #086BE6;\n  cursor: pointer;\n  display: flex;\n  font-size: 14px;\n  height: 26.6px;\n  padding: 4px 8px;\n  white-space: nowrap;\n}\n.tox .tox-promotion-link:hover {\n  background-color: #B4D7FF;\n}\n.tox .tox-promotion-link:focus {\n  background-color: #D9EDF7;\n}\n/* Deprecated. Remove in next major release */\n.tox .tox-mbtn {\n  align-items: center;\n  background: transparent;\n  border: 0;\n  border-radius: 3px;\n  box-shadow: none;\n  color: #fff;\n  display: flex;\n  flex: 0 0 auto;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  height: 28px;\n  justify-content: center;\n  margin: 5px 1px 6px 0;\n  outline: none;\n  overflow: hidden;\n  padding: 0 4px;\n  text-transform: none;\n  width: auto;\n}\n.tox .tox-mbtn[disabled] {\n  background-color: transparent;\n  border: 0;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-mbtn:focus:not(:disabled) {\n  background: #3389ec;\n  border: 0;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-mbtn--active {\n  background: #599fef;\n  border: 0;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) {\n  background: #3389ec;\n  border: 0;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-mbtn__select-label {\n  cursor: default;\n  font-weight: normal;\n  margin: 0 4px;\n}\n.tox .tox-mbtn[disabled] .tox-mbtn__select-label {\n  cursor: not-allowed;\n}\n.tox .tox-mbtn__select-chevron {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  width: 16px;\n  display: none;\n}\n.tox .tox-notification {\n  border-radius: 6px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  display: grid;\n  font-size: 14px;\n  font-weight: normal;\n  grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);\n  margin-top: 4px;\n  opacity: 0;\n  padding: 4px;\n  transition: transform 100ms ease-in, opacity 150ms ease-in;\n}\n.tox .tox-notification p {\n  font-size: 14px;\n  font-weight: normal;\n}\n.tox .tox-notification a {\n  cursor: pointer;\n  text-decoration: underline;\n}\n.tox .tox-notification--in {\n  opacity: 1;\n}\n.tox .tox-notification--success {\n  background-color: #334840;\n  border-color: #3c5440;\n  color: #fff;\n}\n.tox .tox-notification--success p {\n  color: #fff;\n}\n.tox .tox-notification--success a {\n  color: #b5d199;\n}\n.tox .tox-notification--success svg {\n  fill: #fff;\n}\n.tox .tox-notification--error {\n  background-color: #442632;\n  border-color: #55212b;\n  color: #fff;\n}\n.tox .tox-notification--error p {\n  color: #fff;\n}\n.tox .tox-notification--error a {\n  color: #e68080;\n}\n.tox .tox-notification--error svg {\n  fill: #fff;\n}\n.tox .tox-notification--warn,\n.tox .tox-notification--warning {\n  background-color: #222F3E;\n  border-color: rgba(255, 255, 255, 0.15);\n  color: #fff0b3;\n}\n.tox .tox-notification--warn p,\n.tox .tox-notification--warning p {\n  color: #fff0b3;\n}\n.tox .tox-notification--warn a,\n.tox .tox-notification--warning a {\n  color: #ffcc00;\n}\n.tox .tox-notification--warn svg,\n.tox .tox-notification--warning svg {\n  fill: #fff0b3;\n}\n.tox .tox-notification--info {\n  background-color: #254161;\n  border-color: #264972;\n  color: #fff;\n}\n.tox .tox-notification--info p {\n  color: #fff;\n}\n.tox .tox-notification--info a {\n  color: #83b7f3;\n}\n.tox .tox-notification--info svg {\n  fill: #fff;\n}\n.tox .tox-notification__body {\n  align-self: center;\n  color: #fff;\n  font-size: 14px;\n  grid-column-end: 3;\n  grid-column-start: 2;\n  grid-row-end: 2;\n  grid-row-start: 1;\n  text-align: center;\n  white-space: normal;\n  word-break: break-all;\n  word-break: break-word;\n}\n.tox .tox-notification__body > * {\n  margin: 0;\n}\n.tox .tox-notification__body > * + * {\n  margin-top: 1rem;\n}\n.tox .tox-notification__icon {\n  align-self: center;\n  grid-column-end: 2;\n  grid-column-start: 1;\n  grid-row-end: 2;\n  grid-row-start: 1;\n  justify-self: end;\n}\n.tox .tox-notification__icon svg {\n  display: block;\n}\n.tox .tox-notification__dismiss {\n  align-self: start;\n  grid-column-end: 4;\n  grid-column-start: 3;\n  grid-row-end: 2;\n  grid-row-start: 1;\n  justify-self: end;\n}\n.tox .tox-notification .tox-progress-bar {\n  grid-column-end: 4;\n  grid-column-start: 1;\n  grid-row-end: 3;\n  grid-row-start: 2;\n  justify-self: center;\n}\n.tox .tox-pop {\n  display: inline-block;\n  position: relative;\n}\n.tox .tox-pop--resizing {\n  transition: width 0.1s ease;\n}\n.tox .tox-pop--resizing .tox-toolbar,\n.tox .tox-pop--resizing .tox-toolbar__group {\n  flex-wrap: nowrap;\n}\n.tox .tox-pop--transition {\n  transition: 0.15s ease;\n  transition-property: left, right, top, bottom;\n}\n.tox .tox-pop--transition::before,\n.tox .tox-pop--transition::after {\n  transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s;\n}\n.tox .tox-pop__dialog {\n  background-color: #222F3E;\n  border: 1px solid #161f29;\n  border-radius: 6px;\n  box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n  min-width: 0;\n  overflow: hidden;\n}\n.tox .tox-pop__dialog > *:not(.tox-toolbar) {\n  margin: 4px 4px 4px 8px;\n}\n.tox .tox-pop__dialog .tox-toolbar {\n  background-color: transparent;\n  margin-bottom: -1px;\n}\n.tox .tox-pop::before,\n.tox .tox-pop::after {\n  border-style: solid;\n  content: '';\n  display: block;\n  height: 0;\n  opacity: 1;\n  position: absolute;\n  width: 0;\n}\n.tox .tox-pop.tox-pop--inset::before,\n.tox .tox-pop.tox-pop--inset::after {\n  opacity: 0;\n  transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease;\n}\n.tox .tox-pop.tox-pop--bottom::before,\n.tox .tox-pop.tox-pop--bottom::after {\n  left: 50%;\n  top: 100%;\n}\n.tox .tox-pop.tox-pop--bottom::after {\n  border-color: #222F3E transparent transparent transparent;\n  border-width: 8px;\n  margin-left: -8px;\n  margin-top: -1px;\n}\n.tox .tox-pop.tox-pop--bottom::before {\n  border-color: #161f29 transparent transparent transparent;\n  border-width: 9px;\n  margin-left: -9px;\n}\n.tox .tox-pop.tox-pop--top::before,\n.tox .tox-pop.tox-pop--top::after {\n  left: 50%;\n  top: 0;\n  transform: translateY(-100%);\n}\n.tox .tox-pop.tox-pop--top::after {\n  border-color: transparent transparent #222F3E transparent;\n  border-width: 8px;\n  margin-left: -8px;\n  margin-top: 1px;\n}\n.tox .tox-pop.tox-pop--top::before {\n  border-color: transparent transparent #161f29 transparent;\n  border-width: 9px;\n  margin-left: -9px;\n}\n.tox .tox-pop.tox-pop--left::before,\n.tox .tox-pop.tox-pop--left::after {\n  left: 0;\n  top: calc(50% - 1px);\n  transform: translateY(-50%);\n}\n.tox .tox-pop.tox-pop--left::after {\n  border-color: transparent #222F3E transparent transparent;\n  border-width: 8px;\n  margin-left: -15px;\n}\n.tox .tox-pop.tox-pop--left::before {\n  border-color: transparent #161f29 transparent transparent;\n  border-width: 10px;\n  margin-left: -19px;\n}\n.tox .tox-pop.tox-pop--right::before,\n.tox .tox-pop.tox-pop--right::after {\n  left: 100%;\n  top: calc(50% + 1px);\n  transform: translateY(-50%);\n}\n.tox .tox-pop.tox-pop--right::after {\n  border-color: transparent transparent transparent #222F3E;\n  border-width: 8px;\n  margin-left: -1px;\n}\n.tox .tox-pop.tox-pop--right::before {\n  border-color: transparent transparent transparent #161f29;\n  border-width: 10px;\n  margin-left: -1px;\n}\n.tox .tox-pop.tox-pop--align-left::before,\n.tox .tox-pop.tox-pop--align-left::after {\n  left: 20px;\n}\n.tox .tox-pop.tox-pop--align-right::before,\n.tox .tox-pop.tox-pop--align-right::after {\n  left: calc(100% - 20px);\n}\n.tox .tox-sidebar-wrap {\n  display: flex;\n  flex-direction: row;\n  flex-grow: 1;\n  min-height: 0;\n}\n.tox .tox-sidebar {\n  background-color: #222F3E;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-end;\n}\n.tox .tox-sidebar__slider {\n  display: flex;\n  overflow: hidden;\n}\n.tox .tox-sidebar__pane-container {\n  display: flex;\n}\n.tox .tox-sidebar__pane {\n  display: flex;\n}\n.tox .tox-sidebar--sliding-closed {\n  opacity: 0;\n}\n.tox .tox-sidebar--sliding-open {\n  opacity: 1;\n}\n.tox .tox-sidebar--sliding-growing,\n.tox .tox-sidebar--sliding-shrinking {\n  transition: width 0.5s ease, opacity 0.5s ease;\n}\n.tox .tox-selector {\n  background-color: #4099ff;\n  border-color: #4099ff;\n  border-style: solid;\n  border-width: 1px;\n  box-sizing: border-box;\n  display: inline-block;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n}\n.tox.tox-platform-touch .tox-selector {\n  height: 12px;\n  width: 12px;\n}\n.tox .tox-slider {\n  align-items: center;\n  display: flex;\n  flex: 1;\n  height: 24px;\n  justify-content: center;\n  position: relative;\n}\n.tox .tox-slider__rail {\n  background-color: transparent;\n  border: 1px solid #161f29;\n  border-radius: 6px;\n  height: 10px;\n  min-width: 120px;\n  width: 100%;\n}\n.tox .tox-slider__handle {\n  background-color: #006ce7;\n  border: 2px solid #0054b4;\n  border-radius: 6px;\n  box-shadow: none;\n  height: 24px;\n  left: 50%;\n  position: absolute;\n  top: 50%;\n  transform: translateX(-50%) translateY(-50%);\n  width: 14px;\n}\n.tox .tox-form__controls-h-stack > .tox-slider:not(:first-of-type) {\n  margin-inline-start: 8px;\n}\n.tox .tox-form__controls-h-stack > .tox-form__group + .tox-slider {\n  margin-inline-start: 32px;\n}\n.tox .tox-form__controls-h-stack > .tox-slider + .tox-form__group {\n  margin-inline-start: 32px;\n}\n.tox .tox-source-code {\n  overflow: auto;\n}\n.tox .tox-spinner {\n  display: flex;\n}\n.tox .tox-spinner > div {\n  animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;\n  background-color: rgba(255, 255, 255, 0.5);\n  border-radius: 100%;\n  height: 8px;\n  width: 8px;\n}\n.tox .tox-spinner > div:nth-child(1) {\n  animation-delay: -0.32s;\n}\n.tox .tox-spinner > div:nth-child(2) {\n  animation-delay: -0.16s;\n}\n@keyframes tam-bouncing-dots {\n  0%,\n  80%,\n  100% {\n    transform: scale(0);\n  }\n  40% {\n    transform: scale(1);\n  }\n}\n.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-spinner > div:not(:first-child) {\n  margin-right: 4px;\n}\n.tox .tox-statusbar {\n  align-items: center;\n  background-color: #222F3E;\n  border-top: 1px solid rgba(255, 255, 255, 0.15);\n  color: rgba(255, 255, 255, 0.75);\n  display: flex;\n  flex: 0 0 auto;\n  font-size: 14px;\n  font-weight: normal;\n  height: 25px;\n  overflow: hidden;\n  padding: 0 8px;\n  position: relative;\n  text-transform: none;\n}\n.tox .tox-statusbar__text-container {\n  display: flex;\n  flex: 1 1 auto;\n  justify-content: flex-end;\n  overflow: hidden;\n}\n.tox .tox-statusbar__path {\n  display: flex;\n  flex: 1 1 auto;\n  margin-right: auto;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.tox .tox-statusbar__path > * {\n  display: inline;\n  white-space: nowrap;\n}\n.tox .tox-statusbar__wordcount {\n  flex: 0 0 auto;\n  margin-left: 1ch;\n}\n.tox .tox-statusbar a,\n.tox .tox-statusbar__path-item,\n.tox .tox-statusbar__wordcount {\n  color: rgba(255, 255, 255, 0.75);\n  text-decoration: none;\n}\n.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) {\n  color: #fff;\n  cursor: pointer;\n}\n.tox .tox-statusbar__branding svg {\n  fill: rgba(255, 255, 255, 0.8);\n  height: 1.14em;\n  vertical-align: -0.28em;\n  width: 3.6em;\n}\n.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg,\n.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg {\n  fill: #fff;\n}\n.tox .tox-statusbar__resize-handle {\n  align-items: flex-end;\n  align-self: stretch;\n  cursor: nwse-resize;\n  display: flex;\n  flex: 0 0 auto;\n  justify-content: flex-end;\n  margin-left: auto;\n  margin-right: -8px;\n  padding-bottom: 3px;\n  padding-left: 1ch;\n  padding-right: 3px;\n}\n.tox .tox-statusbar__resize-handle svg {\n  display: block;\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-statusbar__resize-handle:focus svg {\n  background-color: #434e5b;\n  border-radius: 1px 1px 5px 1px;\n  box-shadow: 0 0 0 2px #434e5b;\n}\n.tox:not([dir=rtl]) .tox-statusbar__path > * {\n  margin-right: 4px;\n}\n.tox:not([dir=rtl]) .tox-statusbar__branding {\n  margin-left: 2ch;\n}\n.tox[dir=rtl] .tox-statusbar {\n  flex-direction: row-reverse;\n}\n.tox[dir=rtl] .tox-statusbar__path > * {\n  margin-left: 4px;\n}\n.tox .tox-throbber {\n  z-index: 1299;\n}\n.tox .tox-throbber__busy-spinner {\n  align-items: center;\n  background-color: rgba(34, 47, 62, 0.6);\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n}\n.tox .tox-tbtn {\n  align-items: center;\n  background: transparent;\n  border: 0;\n  border-radius: 3px;\n  box-shadow: none;\n  color: #fff;\n  display: flex;\n  flex: 0 0 auto;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  height: 28px;\n  justify-content: center;\n  margin: 6px 1px 5px 0;\n  outline: none;\n  overflow: hidden;\n  padding: 0;\n  text-transform: none;\n  width: 34px;\n}\n.tox .tox-tbtn svg {\n  display: block;\n  fill: #fff;\n}\n.tox .tox-tbtn.tox-tbtn-more {\n  padding-left: 5px;\n  padding-right: 5px;\n  width: inherit;\n}\n.tox .tox-tbtn:focus {\n  background: #3389ec;\n  border: 0;\n  box-shadow: none;\n}\n.tox .tox-tbtn:hover {\n  background: #3389ec;\n  border: 0;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-tbtn:hover svg {\n  fill: #fff;\n}\n.tox .tox-tbtn:active {\n  background: #599fef;\n  border: 0;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-tbtn:active svg {\n  fill: #fff;\n}\n.tox .tox-tbtn--disabled,\n.tox .tox-tbtn--disabled:hover,\n.tox .tox-tbtn:disabled,\n.tox .tox-tbtn:disabled:hover {\n  background: transparent;\n  border: 0;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-tbtn--disabled svg,\n.tox .tox-tbtn--disabled:hover svg,\n.tox .tox-tbtn:disabled svg,\n.tox .tox-tbtn:disabled:hover svg {\n  /* stylelint-disable-line no-descending-specificity */\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-tbtn--enabled,\n.tox .tox-tbtn--enabled:hover {\n  background: #599fef;\n  border: 0;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-tbtn--enabled > *,\n.tox .tox-tbtn--enabled:hover > * {\n  transform: none;\n}\n.tox .tox-tbtn--enabled svg,\n.tox .tox-tbtn--enabled:hover svg {\n  /* stylelint-disable-line no-descending-specificity */\n  fill: #fff;\n}\n.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) {\n  color: #fff;\n}\n.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg {\n  fill: #fff;\n}\n.tox .tox-tbtn:active > * {\n  transform: none;\n}\n.tox .tox-tbtn--md {\n  height: 42px;\n  width: 51px;\n}\n.tox .tox-tbtn--lg {\n  flex-direction: column;\n  height: 56px;\n  width: 68px;\n}\n.tox .tox-tbtn--return {\n  align-self: stretch;\n  height: unset;\n  width: 16px;\n}\n.tox .tox-tbtn--labeled {\n  padding: 0 4px;\n  width: unset;\n}\n.tox .tox-tbtn__vlabel {\n  display: block;\n  font-size: 10px;\n  font-weight: normal;\n  letter-spacing: -0.025em;\n  margin-bottom: 4px;\n  white-space: nowrap;\n}\n.tox .tox-tbtn--select {\n  margin: 6px 1px 5px 0;\n  padding: 0 4px;\n  width: auto;\n}\n.tox .tox-tbtn__select-label {\n  cursor: default;\n  font-weight: normal;\n  margin: 0 4px;\n}\n.tox .tox-tbtn__select-chevron {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  width: 16px;\n}\n.tox .tox-tbtn__select-chevron svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-tbtn--bespoke {\n  background: #2f4055;\n}\n.tox .tox-tbtn--bespoke + .tox-tbtn--bespoke {\n  margin-inline-start: 4px;\n}\n.tox .tox-tbtn--bespoke .tox-tbtn__select-label {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  width: 7em;\n}\n.tox .tox-split-button {\n  border: 0;\n  border-radius: 3px;\n  box-sizing: border-box;\n  display: flex;\n  margin: 6px 1px 5px 0;\n  overflow: hidden;\n}\n.tox .tox-split-button:hover {\n  box-shadow: 0 0 0 1px #3389ec inset;\n}\n.tox .tox-split-button:focus {\n  background: #3389ec;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-split-button > * {\n  border-radius: 0;\n}\n.tox .tox-split-button__chevron {\n  width: 16px;\n}\n.tox .tox-split-button__chevron svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-split-button .tox-tbtn {\n  margin: 0;\n}\n.tox .tox-split-button.tox-tbtn--disabled:hover,\n.tox .tox-split-button.tox-tbtn--disabled:focus,\n.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,\n.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus {\n  background: transparent;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n}\n.tox.tox-platform-touch .tox-split-button .tox-tbtn--select {\n  padding: 0 0px;\n}\n.tox.tox-platform-touch .tox-split-button .tox-tbtn:not(.tox-tbtn--select):first-child {\n  width: 30px;\n}\n.tox.tox-platform-touch .tox-split-button__chevron {\n  width: 20px;\n}\n.tox .tox-toolbar-overlord {\n  background-color: #222F3E;\n}\n.tox .tox-toolbar,\n.tox .tox-toolbar__primary,\n.tox .tox-toolbar__overflow {\n  background-color: #222F3E;\n  background-image: repeating-linear-gradient(rgba(255, 255, 255, 0.15) 0px 1px, transparent 1px 39px);\n  background-position: center top 40px;\n  background-repeat: no-repeat;\n  background-size: calc(100% - 11px * 2) calc(100% - 41px);\n  display: flex;\n  flex: 0 0 auto;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  padding: 0 0px;\n  transform: perspective(1px);\n}\n.tox .tox-toolbar-overlord > .tox-toolbar,\n.tox .tox-toolbar-overlord > .tox-toolbar__primary,\n.tox .tox-toolbar-overlord > .tox-toolbar__overflow {\n  background-position: center top 0px;\n  background-size: calc(100% - 11px * 2) calc(100% - 0px);\n}\n.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed {\n  height: 0;\n  opacity: 0;\n  padding-bottom: 0;\n  padding-top: 0;\n  visibility: hidden;\n}\n.tox .tox-toolbar__overflow--growing {\n  transition: height 0.3s ease, opacity 0.2s linear 0.1s;\n}\n.tox .tox-toolbar__overflow--shrinking {\n  transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s;\n}\n.tox .tox-toolbar-overlord,\n.tox .tox-anchorbar {\n  grid-column: 1 / -1;\n}\n.tox .tox-menubar + .tox-toolbar,\n.tox .tox-menubar + .tox-toolbar-overlord {\n  border-top: 1px solid transparent;\n  margin-top: -1px;\n  padding-bottom: 1px;\n  padding-top: 1px;\n}\n.tox .tox-toolbar--scrolling {\n  flex-wrap: nowrap;\n  overflow-x: auto;\n}\n.tox .tox-pop .tox-toolbar {\n  border-width: 0;\n}\n.tox .tox-toolbar--no-divider {\n  background-image: none;\n}\n.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,\n.tox .tox-toolbar-overlord .tox-toolbar__primary {\n  background-position: center top 39px;\n}\n.tox .tox-editor-header > .tox-toolbar--scrolling,\n.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child {\n  background-image: none;\n}\n.tox.tox-tinymce-aux .tox-toolbar__overflow {\n  background-color: #222F3E;\n  background-position: center top 43px;\n  background-size: calc(100% - 8px * 2) calc(100% - 51px);\n  border: none;\n  border-radius: 6px;\n  box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n  padding: 4px 0;\n}\n.tox-pop .tox-pop__dialog {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox-pop .tox-pop__dialog .tox-toolbar {\n  background-position: center top 43px;\n  background-size: calc(100% - 11px * 2) calc(100% - 51px);\n  padding: 4px 0;\n}\n.tox .tox-toolbar__group {\n  align-items: center;\n  display: flex;\n  flex-wrap: wrap;\n  margin: 0 0;\n  padding: 0 11px 0 12px;\n}\n.tox .tox-toolbar__group--pull-right {\n  margin-left: auto;\n}\n.tox .tox-toolbar--scrolling .tox-toolbar__group {\n  flex-shrink: 0;\n  flex-wrap: nowrap;\n}\n.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) {\n  border-right: 1px solid transparent;\n}\n.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) {\n  border-left: 1px solid transparent;\n}\n.tox .tox-tooltip {\n  display: inline-block;\n  padding: 8px;\n  position: relative;\n}\n.tox .tox-tooltip__body {\n  background-color: #3d546f;\n  border-radius: 6px;\n  box-shadow: 0 2px 4px rgba(34, 47, 62, 0.3);\n  color: rgba(255, 255, 255, 0.75);\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  padding: 4px 8px;\n  text-transform: none;\n}\n.tox .tox-tooltip__arrow {\n  position: absolute;\n}\n.tox .tox-tooltip--down .tox-tooltip__arrow {\n  border-left: 8px solid transparent;\n  border-right: 8px solid transparent;\n  border-top: 8px solid #3d546f;\n  bottom: 0;\n  left: 50%;\n  position: absolute;\n  transform: translateX(-50%);\n}\n.tox .tox-tooltip--up .tox-tooltip__arrow {\n  border-bottom: 8px solid #3d546f;\n  border-left: 8px solid transparent;\n  border-right: 8px solid transparent;\n  left: 50%;\n  position: absolute;\n  top: 0;\n  transform: translateX(-50%);\n}\n.tox .tox-tooltip--right .tox-tooltip__arrow {\n  border-bottom: 8px solid transparent;\n  border-left: 8px solid #3d546f;\n  border-top: 8px solid transparent;\n  position: absolute;\n  right: 0;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox .tox-tooltip--left .tox-tooltip__arrow {\n  border-bottom: 8px solid transparent;\n  border-right: 8px solid #3d546f;\n  border-top: 8px solid transparent;\n  left: 0;\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox .tox-well {\n  border: 1px solid #161f29;\n  border-radius: 6px;\n  padding: 8px;\n  width: 100%;\n}\n.tox .tox-well > *:first-child {\n  margin-top: 0;\n}\n.tox .tox-well > *:last-child {\n  margin-bottom: 0;\n}\n.tox .tox-well > *:only-child {\n  margin: 0;\n}\n.tox .tox-custom-editor {\n  border: 1px solid #161f29;\n  border-radius: 6px;\n  display: flex;\n  flex: 1;\n  position: relative;\n}\n/* stylelint-disable */\n.tox {\n  /* stylelint-enable */\n}\n.tox .tox-dialog-loading::before {\n  background-color: rgba(0, 0, 0, 0.5);\n  content: \"\";\n  height: 100%;\n  position: absolute;\n  width: 100%;\n  z-index: 1000;\n}\n.tox .tox-tab {\n  cursor: pointer;\n}\n.tox .tox-dialog__content-js {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-dialog__body-content .tox-collection {\n  display: flex;\n  flex: 1;\n}\n.tox.tox-tinymce-aux .tox-toolbar__overflow {\n  box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.15);\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/oxide-dark/skin.mobile.css",
    "content": "/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n */\n/* RESET all the things! */\n.tinymce-mobile-outer-container {\n  all: initial;\n  display: block;\n}\n.tinymce-mobile-outer-container * {\n  border: 0;\n  box-sizing: initial;\n  cursor: inherit;\n  float: none;\n  line-height: 1;\n  margin: 0;\n  outline: 0;\n  padding: 0;\n  -webkit-tap-highlight-color: transparent;\n  /* TBIO-3691, stop the gray flicker on touch. */\n  text-shadow: none;\n  white-space: nowrap;\n}\n.tinymce-mobile-icon-arrow-back::before {\n  content: \"\\e5cd\";\n}\n.tinymce-mobile-icon-image::before {\n  content: \"\\e412\";\n}\n.tinymce-mobile-icon-cancel-circle::before {\n  content: \"\\e5c9\";\n}\n.tinymce-mobile-icon-full-dot::before {\n  content: \"\\e061\";\n}\n.tinymce-mobile-icon-align-center::before {\n  content: \"\\e234\";\n}\n.tinymce-mobile-icon-align-left::before {\n  content: \"\\e236\";\n}\n.tinymce-mobile-icon-align-right::before {\n  content: \"\\e237\";\n}\n.tinymce-mobile-icon-bold::before {\n  content: \"\\e238\";\n}\n.tinymce-mobile-icon-italic::before {\n  content: \"\\e23f\";\n}\n.tinymce-mobile-icon-unordered-list::before {\n  content: \"\\e241\";\n}\n.tinymce-mobile-icon-ordered-list::before {\n  content: \"\\e242\";\n}\n.tinymce-mobile-icon-font-size::before {\n  content: \"\\e245\";\n}\n.tinymce-mobile-icon-underline::before {\n  content: \"\\e249\";\n}\n.tinymce-mobile-icon-link::before {\n  content: \"\\e157\";\n}\n.tinymce-mobile-icon-unlink::before {\n  content: \"\\eca2\";\n}\n.tinymce-mobile-icon-color::before {\n  content: \"\\e891\";\n}\n.tinymce-mobile-icon-previous::before {\n  content: \"\\e314\";\n}\n.tinymce-mobile-icon-next::before {\n  content: \"\\e315\";\n}\n.tinymce-mobile-icon-large-font::before,\n.tinymce-mobile-icon-style-formats::before {\n  content: \"\\e264\";\n}\n.tinymce-mobile-icon-undo::before {\n  content: \"\\e166\";\n}\n.tinymce-mobile-icon-redo::before {\n  content: \"\\e15a\";\n}\n.tinymce-mobile-icon-removeformat::before {\n  content: \"\\e239\";\n}\n.tinymce-mobile-icon-small-font::before {\n  content: \"\\e906\";\n}\n.tinymce-mobile-icon-readonly-back::before,\n.tinymce-mobile-format-matches::after {\n  content: \"\\e5ca\";\n}\n.tinymce-mobile-icon-small-heading::before {\n  content: \"small\";\n}\n.tinymce-mobile-icon-large-heading::before {\n  content: \"large\";\n}\n.tinymce-mobile-icon-small-heading::before,\n.tinymce-mobile-icon-large-heading::before {\n  font-family: sans-serif;\n  font-size: 80%;\n}\n.tinymce-mobile-mask-edit-icon::before {\n  content: \"\\e254\";\n}\n.tinymce-mobile-icon-back::before {\n  content: \"\\e5c4\";\n}\n.tinymce-mobile-icon-heading::before {\n  /* TODO: Translate */\n  content: \"Headings\";\n  font-family: sans-serif;\n  font-size: 80%;\n  font-weight: bold;\n}\n.tinymce-mobile-icon-h1::before {\n  content: \"H1\";\n  font-weight: bold;\n}\n.tinymce-mobile-icon-h2::before {\n  content: \"H2\";\n  font-weight: bold;\n}\n.tinymce-mobile-icon-h3::before {\n  content: \"H3\";\n  font-weight: bold;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  background: rgba(51, 51, 51, 0.5);\n  height: 100%;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container {\n  align-items: center;\n  border-radius: 50%;\n  display: flex;\n  flex-direction: column;\n  font-family: sans-serif;\n  font-size: 1em;\n  justify-content: space-between;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  border-radius: 50%;\n  height: 2.1em;\n  width: 2.1em;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  flex-direction: column;\n  font-size: 1em;\n}\n@media only screen and (min-device-width:700px) {\n  .tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {\n    font-size: 1.2em;\n  }\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  border-radius: 50%;\n  height: 2.1em;\n  width: 2.1em;\n  background-color: white;\n  color: #207ab7;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before {\n  content: \"\\e900\";\n  font-family: 'tinymce-mobile', sans-serif;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon {\n  z-index: 2;\n}\n.tinymce-mobile-android-container.tinymce-mobile-android-maximized {\n  background: #ffffff;\n  border: none;\n  bottom: 0;\n  display: flex;\n  flex-direction: column;\n  left: 0;\n  position: fixed;\n  right: 0;\n  top: 0;\n}\n.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized) {\n  position: relative;\n}\n.tinymce-mobile-android-container .tinymce-mobile-editor-socket {\n  display: flex;\n  flex-grow: 1;\n}\n.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe {\n  display: flex !important;\n  flex-grow: 1;\n  height: auto !important;\n}\n.tinymce-mobile-android-scroll-reload {\n  overflow: hidden;\n}\n:not(.tinymce-mobile-readonly-mode) > .tinymce-mobile-android-selection-context-toolbar {\n  margin-top: 23px;\n}\n.tinymce-mobile-toolstrip {\n  background: #fff;\n  display: flex;\n  flex: 0 0 auto;\n  z-index: 1;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar {\n  align-items: center;\n  background-color: #fff;\n  border-bottom: 1px solid #cccccc;\n  display: flex;\n  flex: 1;\n  height: 2.5em;\n  width: 100%;\n  /* Make it no larger than the toolstrip, so that it needs to scroll */\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group {\n  align-items: center;\n  display: flex;\n  height: 100%;\n  flex-shrink: 1;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group > div {\n  align-items: center;\n  display: flex;\n  height: 100%;\n  flex: 1;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container {\n  background: #f44336;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group {\n  flex-grow: 1;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button {\n  align-items: center;\n  display: flex;\n  height: 80%;\n  margin-left: 2px;\n  margin-right: 2px;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected {\n  background: #c8cbcf;\n  color: #cccccc;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type {\n  background: #207ab7;\n  color: #eceff1;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar {\n  /* Note, this file is imported inside .tinymce-mobile-context-toolbar, so that prefix is on everything here. */\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group {\n  align-items: center;\n  display: flex;\n  height: 100%;\n  flex: 1;\n  padding-bottom: 0.4em;\n  padding-top: 0.4em;\n  /* Make any buttons appearing on the left and right display in the centre (e.g. color edges) */\n  /* For widgets like the colour picker, use the whole height */\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog {\n  display: flex;\n  min-height: 1.5em;\n  overflow: hidden;\n  padding-left: 0;\n  padding-right: 0;\n  position: relative;\n  width: 100%;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain {\n  display: flex;\n  height: 100%;\n  transition: left cubic-bezier(0.4, 0, 1, 1) 0.15s;\n  width: 100%;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen {\n  display: flex;\n  flex: 0 0 auto;\n  justify-content: space-between;\n  width: 100%;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input {\n  font-family: Sans-serif;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container {\n  display: flex;\n  flex-grow: 1;\n  position: relative;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x {\n  -ms-grid-row-align: center;\n      align-self: center;\n  background: inherit;\n  border: none;\n  border-radius: 50%;\n  color: #888;\n  font-size: 0.6em;\n  font-weight: bold;\n  height: 100%;\n  padding-right: 2px;\n  position: absolute;\n  right: 0;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x {\n  display: none;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next {\n  align-items: center;\n  display: flex;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before {\n  align-items: center;\n  display: flex;\n  font-weight: bold;\n  height: 100%;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before {\n  visibility: hidden;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item {\n  color: #cccccc;\n  font-size: 10px;\n  line-height: 10px;\n  margin: 0 2px;\n  padding-top: 3px;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active {\n  color: #c8cbcf;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before {\n  margin-left: 0.5em;\n  margin-right: 0.9em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before {\n  margin-left: 0.9em;\n  margin-right: 0.5em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider {\n  display: flex;\n  flex: 1;\n  margin-left: 0;\n  margin-right: 0;\n  padding: 0.28em 0;\n  position: relative;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container {\n  align-items: center;\n  display: flex;\n  flex-grow: 1;\n  height: 100%;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line {\n  background: #cccccc;\n  display: flex;\n  flex: 1;\n  height: 0.2em;\n  margin-bottom: 0.3em;\n  margin-top: 0.3em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container {\n  padding-left: 2em;\n  padding-right: 2em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container {\n  align-items: center;\n  display: flex;\n  flex-grow: 1;\n  height: 100%;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient {\n  background: linear-gradient(to right, hsl(0, 100%, 50%) 0%, hsl(60, 100%, 50%) 17%, hsl(120, 100%, 50%) 33%, hsl(180, 100%, 50%) 50%, hsl(240, 100%, 50%) 67%, hsl(300, 100%, 50%) 83%, hsl(0, 100%, 50%) 100%);\n  display: flex;\n  flex: 1;\n  height: 0.2em;\n  margin-bottom: 0.3em;\n  margin-top: 0.3em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black {\n  /* Not part of theming */\n  background: black;\n  height: 0.2em;\n  margin-bottom: 0.3em;\n  margin-top: 0.3em;\n  width: 1.2em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white {\n  /* Not part of theming */\n  background: white;\n  height: 0.2em;\n  margin-bottom: 0.3em;\n  margin-top: 0.3em;\n  width: 1.2em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb {\n  /* vertically centering trick (margin: auto, top: 0, bottom: 0). On iOS and Safari, if you leave\n     * out these values, then it shows the thumb at the top of the spectrum. This is probably because it is\n     * absolutely positioned with only a left value, and not a top. Note, on Chrome it seems to be fine without\n     * this approach.\n    */\n  align-items: center;\n  background-clip: padding-box;\n  background-color: #455a64;\n  border: 0.5em solid rgba(136, 136, 136, 0);\n  border-radius: 3em;\n  bottom: 0;\n  color: #fff;\n  display: flex;\n  height: 0.5em;\n  justify-content: center;\n  left: -10px;\n  margin: auto;\n  position: absolute;\n  top: 0;\n  transition: border 120ms cubic-bezier(0.39, 0.58, 0.57, 1);\n  width: 0.5em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active {\n  border: 0.5em solid rgba(136, 136, 136, 0.39);\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group > div {\n  align-items: center;\n  display: flex;\n  height: 100%;\n  flex: 1;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper {\n  flex-direction: column;\n  justify-content: center;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {\n  align-items: center;\n  display: flex;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog) {\n  height: 100%;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container {\n  display: flex;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input {\n  background: #ffffff;\n  border: none;\n  border-radius: 0;\n  color: #455a64;\n  flex-grow: 1;\n  font-size: 0.85em;\n  padding-bottom: 0.1em;\n  padding-left: 5px;\n  padding-top: 0.1em;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder {\n  /* WebKit, Blink, Edge */\n  color: #888;\n}\n.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder {\n  /* WebKit, Blink, Edge */\n  color: #888;\n}\n/* dropup */\n.tinymce-mobile-dropup {\n  background: white;\n  display: flex;\n  overflow: hidden;\n  width: 100%;\n}\n.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking {\n  transition: height 0.3s ease-out;\n}\n.tinymce-mobile-dropup.tinymce-mobile-dropup-growing {\n  transition: height 0.3s ease-in;\n}\n.tinymce-mobile-dropup.tinymce-mobile-dropup-closed {\n  flex-grow: 0;\n}\n.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing) {\n  flex-grow: 1;\n}\n/* TODO min-height for device size and orientation */\n.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {\n  min-height: 200px;\n}\n@media only screen and (orientation: landscape) {\n  .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {\n    min-height: 200px;\n  }\n}\n@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {\n  .tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {\n    min-height: 150px;\n  }\n}\n/* styles menu */\n.tinymce-mobile-styles-menu {\n  font-family: sans-serif;\n  outline: 4px solid black;\n  overflow: hidden;\n  position: relative;\n  width: 100%;\n}\n.tinymce-mobile-styles-menu [role=\"menu\"] {\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  position: absolute;\n  width: 100%;\n}\n.tinymce-mobile-styles-menu [role=\"menu\"].transitioning {\n  transition: transform 0.5s ease-in-out;\n}\n.tinymce-mobile-styles-menu .tinymce-mobile-styles-item {\n  border-bottom: 1px solid #ddd;\n  color: #455a64;\n  cursor: pointer;\n  display: flex;\n  padding: 1em 1em;\n  position: relative;\n}\n.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before {\n  color: #455a64;\n  content: \"\\e314\";\n  font-family: 'tinymce-mobile', sans-serif;\n}\n.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after {\n  color: #455a64;\n  content: \"\\e315\";\n  font-family: 'tinymce-mobile', sans-serif;\n  padding-left: 1em;\n  padding-right: 1em;\n  position: absolute;\n  right: 0;\n}\n.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after {\n  font-family: 'tinymce-mobile', sans-serif;\n  padding-left: 1em;\n  padding-right: 1em;\n  position: absolute;\n  right: 0;\n}\n.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator,\n.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser {\n  align-items: center;\n  background: #fff;\n  border-top: #455a64;\n  color: #455a64;\n  display: flex;\n  min-height: 2.5em;\n  padding-left: 1em;\n  padding-right: 1em;\n}\n.tinymce-mobile-styles-menu [data-transitioning-destination=\"before\"][data-transitioning-state],\n.tinymce-mobile-styles-menu [data-transitioning-state=\"before\"] {\n  transform: translate(-100%);\n}\n.tinymce-mobile-styles-menu [data-transitioning-destination=\"current\"][data-transitioning-state],\n.tinymce-mobile-styles-menu [data-transitioning-state=\"current\"] {\n  transform: translate(0%);\n}\n.tinymce-mobile-styles-menu [data-transitioning-destination=\"after\"][data-transitioning-state],\n.tinymce-mobile-styles-menu [data-transitioning-state=\"after\"] {\n  transform: translate(100%);\n}\n@font-face {\n  font-family: 'tinymce-mobile';\n  font-style: normal;\n  font-weight: normal;\n  src: url('fonts/tinymce-mobile.woff?8x92w3') format('woff');\n}\n@media (min-device-width: 700px) {\n  .tinymce-mobile-outer-container,\n  .tinymce-mobile-outer-container input {\n    font-size: 25px;\n  }\n}\n@media (max-device-width: 700px) {\n  .tinymce-mobile-outer-container,\n  .tinymce-mobile-outer-container input {\n    font-size: 18px;\n  }\n}\n.tinymce-mobile-icon {\n  font-family: 'tinymce-mobile', sans-serif;\n}\n.mixin-flex-and-centre {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n}\n.mixin-flex-bar {\n  align-items: center;\n  display: flex;\n  height: 100%;\n}\n.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe {\n  background-color: #fff;\n  width: 100%;\n}\n.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {\n  /* Note, on the iPod touch in landscape, this isn't visible when the navbar appears */\n  background-color: #207ab7;\n  border-radius: 50%;\n  bottom: 1em;\n  color: white;\n  font-size: 1em;\n  height: 2.1em;\n  position: fixed;\n  right: 2em;\n  width: 2.1em;\n  align-items: center;\n  display: flex;\n  justify-content: center;\n}\n@media only screen and (min-device-width:700px) {\n  .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {\n    font-size: 1.2em;\n  }\n}\n.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket {\n  height: 300px;\n  overflow: hidden;\n}\n.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe {\n  height: 100%;\n}\n.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip {\n  display: none;\n}\n/*\n  Note, that if you don't include this (::-webkit-file-upload-button), the toolbar width gets\n  increased and the whole body becomes scrollable. It's important!\n */\ninput[type=\"file\"]::-webkit-file-upload-button {\n  display: none;\n}\n@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {\n  .tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {\n    bottom: 50%;\n  }\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/oxide-dark/skin.shadowdom.css",
    "content": "body.tox-dialog__disable-scroll {\n  overflow: hidden;\n}\n.tox-fullscreen {\n  border: 0;\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  overscroll-behavior: none;\n  padding: 0;\n  touch-action: pinch-zoom;\n  width: 100%;\n}\n.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {\n  display: none;\n}\n.tox.tox-tinymce.tox-fullscreen,\n.tox-shadowhost.tox-fullscreen {\n  left: 0;\n  position: fixed;\n  top: 0;\n  z-index: 1200;\n}\n.tox.tox-tinymce.tox-fullscreen {\n  background-color: transparent;\n}\n.tox-fullscreen .tox.tox-tinymce-aux,\n.tox-fullscreen ~ .tox.tox-tinymce-aux {\n  z-index: 1201;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/tinymce-5/content.css",
    "content": ".mce-content-body .mce-item-anchor {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n}\n.mce-content-body .mce-item-anchor:empty {\n  cursor: default;\n  display: inline-block;\n  height: 12px !important;\n  padding: 0 2px;\n  -webkit-user-modify: read-only;\n  -moz-user-modify: read-only;\n  -webkit-user-select: all;\n  -moz-user-select: all;\n  user-select: all;\n  width: 8px !important;\n}\n.mce-content-body .mce-item-anchor:not(:empty) {\n  background-position-x: 2px;\n  display: inline-block;\n  padding-left: 12px;\n}\n.mce-content-body .mce-item-anchor[data-mce-selected] {\n  outline-offset: 1px;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"]:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #ffe89d;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"][data-mce-annotation-active=\"true\"]:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment:not([data-mce-selected]) {\n  background-color: #ffe89d;\n  outline: none;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"]:not([data-mce-selected=\"inline-boundary\"]) {\n  background-color: #fed635;\n}\n.tox-checklist > li:not(.tox-checklist--hidden) {\n  list-style: none;\n  margin: 0.25em 0;\n}\n.tox-checklist > li:not(.tox-checklist--hidden)::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n  cursor: pointer;\n  height: 1em;\n  margin-left: -1.5em;\n  margin-top: 0.125em;\n  position: absolute;\n  width: 1em;\n}\n.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n}\n[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {\n  margin-left: 0;\n  margin-right: -1.5em;\n}\n/* stylelint-disable */\n/* http://prismjs.com/ */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n  color: black;\n  background: none;\n  text-shadow: 0 1px white;\n  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n  font-size: 1em;\n  text-align: left;\n  white-space: pre;\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: normal;\n  line-height: 1.5;\n  -moz-tab-size: 4;\n  tab-size: 4;\n  -webkit-hyphens: none;\n  hyphens: none;\n}\npre[class*=\"language-\"]::-moz-selection,\npre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection,\ncode[class*=\"language-\"] ::-moz-selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\npre[class*=\"language-\"]::selection,\npre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection,\ncode[class*=\"language-\"] ::selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n@media print {\n  code[class*=\"language-\"],\n  pre[class*=\"language-\"] {\n    text-shadow: none;\n  }\n}\n/* Code blocks */\npre[class*=\"language-\"] {\n  padding: 1em;\n  margin: 0.5em 0;\n  overflow: auto;\n}\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n  background: #f5f2f0;\n}\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n  padding: 0.1em;\n  border-radius: 0.3em;\n  white-space: normal;\n}\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n  color: slategray;\n}\n.token.punctuation {\n  color: #999;\n}\n.token.namespace {\n  opacity: 0.7;\n}\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n  color: #905;\n}\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n  color: #690;\n}\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n  color: #9a6e3a;\n  /* This background color was intended by the author of this theme. */\n  background: hsla(0, 0%, 100%, 0.5);\n}\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n  color: #07a;\n}\n.token.function,\n.token.class-name {\n  color: #DD4A68;\n}\n.token.regex,\n.token.important,\n.token.variable {\n  color: #e90;\n}\n.token.important,\n.token.bold {\n  font-weight: bold;\n}\n.token.italic {\n  font-style: italic;\n}\n.token.entity {\n  cursor: help;\n}\n/* stylelint-enable */\n.mce-content-body {\n  overflow-wrap: break-word;\n  word-wrap: break-word;\n}\n.mce-content-body .mce-visual-caret {\n  background-color: black;\n  background-color: currentColor;\n  position: absolute;\n}\n.mce-content-body .mce-visual-caret-hidden {\n  display: none;\n}\n.mce-content-body *[data-mce-caret] {\n  left: -1000px;\n  margin: 0;\n  padding: 0;\n  position: absolute;\n  right: auto;\n  top: 0;\n}\n.mce-content-body .mce-offscreen-selection {\n  left: -2000000px;\n  max-width: 1000000px;\n  position: absolute;\n}\n.mce-content-body *[contentEditable=false] {\n  cursor: default;\n}\n.mce-content-body *[contentEditable=true] {\n  cursor: text;\n}\n.tox-cursor-format-painter {\n  cursor: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\"), default;\n}\ndiv.mce-footnotes hr {\n  margin-inline-end: auto;\n  margin-inline-start: 0;\n  width: 25%;\n}\ndiv.mce-footnotes li > a.mce-footnotes-backlink {\n  text-decoration: none;\n}\n@media print {\n  sup.mce-footnote a {\n    color: black;\n    text-decoration: none;\n  }\n  div.mce-footnotes {\n    break-inside: avoid;\n    width: 100%;\n  }\n  div.mce-footnotes li > a.mce-footnotes-backlink {\n    display: none;\n  }\n}\n.mce-content-body figure.align-left {\n  float: left;\n}\n.mce-content-body figure.align-right {\n  float: right;\n}\n.mce-content-body figure.image.align-center {\n  display: table;\n  margin-left: auto;\n  margin-right: auto;\n}\n.mce-preview-object {\n  border: 1px solid gray;\n  display: inline-block;\n  line-height: 0;\n  margin: 0 2px 0 2px;\n  position: relative;\n}\n.mce-preview-object .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-preview-object[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.mce-content-body .mce-mergetag:hover {\n  background-color: rgba(0, 108, 231, 0.1);\n}\n.mce-content-body .mce-mergetag-affix {\n  background-color: rgba(0, 108, 231, 0.1);\n  color: #006ce7;\n}\n.mce-object {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n  border: 1px dashed #aaa;\n}\n.mce-pagebreak {\n  border: 1px dashed #aaa;\n  cursor: default;\n  display: block;\n  height: 5px;\n  margin-top: 15px;\n  page-break-before: always;\n  width: 100%;\n}\n@media print {\n  .mce-pagebreak {\n    border: 0;\n  }\n}\n.tiny-pageembed .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tiny-pageembed[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.tiny-pageembed {\n  display: inline-block;\n  position: relative;\n}\n.tiny-pageembed--21by9,\n.tiny-pageembed--16by9,\n.tiny-pageembed--4by3,\n.tiny-pageembed--1by1 {\n  display: block;\n  overflow: hidden;\n  padding: 0;\n  position: relative;\n  width: 100%;\n}\n.tiny-pageembed--21by9 {\n  padding-top: 42.857143%;\n}\n.tiny-pageembed--16by9 {\n  padding-top: 56.25%;\n}\n.tiny-pageembed--4by3 {\n  padding-top: 75%;\n}\n.tiny-pageembed--1by1 {\n  padding-top: 100%;\n}\n.tiny-pageembed--21by9 iframe,\n.tiny-pageembed--16by9 iframe,\n.tiny-pageembed--4by3 iframe,\n.tiny-pageembed--1by1 iframe {\n  border: 0;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-content-body[data-mce-placeholder] {\n  position: relative;\n}\n.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  color: rgba(34, 47, 62, 0.7);\n  content: attr(data-mce-placeholder);\n  position: absolute;\n}\n.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  left: 1px;\n}\n.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {\n  right: 1px;\n}\n.mce-content-body div.mce-resizehandle {\n  background-color: #4099ff;\n  border-color: #4099ff;\n  border-style: solid;\n  border-width: 1px;\n  box-sizing: border-box;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n  z-index: 1298;\n}\n.mce-content-body div.mce-resizehandle:hover {\n  background-color: #4099ff;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(1) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(2) {\n  cursor: nesw-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(3) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(4) {\n  cursor: nesw-resize;\n}\n.mce-content-body .mce-resize-backdrop {\n  z-index: 10000;\n}\n.mce-content-body .mce-clonedresizable {\n  cursor: default;\n  opacity: 0.5;\n  outline: 1px dashed black;\n  position: absolute;\n  z-index: 10001;\n}\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {\n  border: 0;\n}\n.mce-content-body .mce-resize-helper {\n  background: #555;\n  background: rgba(0, 0, 0, 0.75);\n  border: 1px;\n  border-radius: 3px;\n  color: white;\n  display: none;\n  font-family: sans-serif;\n  font-size: 12px;\n  line-height: 14px;\n  margin: 5px 10px;\n  padding: 5px;\n  position: absolute;\n  white-space: nowrap;\n  z-index: 10002;\n}\n.tox-rtc-user-selection {\n  position: relative;\n}\n.tox-rtc-user-cursor {\n  bottom: 0;\n  cursor: default;\n  position: absolute;\n  top: 0;\n  width: 2px;\n}\n.tox-rtc-user-cursor::before {\n  background-color: inherit;\n  border-radius: 50%;\n  content: '';\n  display: block;\n  height: 8px;\n  position: absolute;\n  right: -3px;\n  top: -3px;\n  width: 8px;\n}\n.tox-rtc-user-cursor:hover::after {\n  background-color: inherit;\n  border-radius: 100px;\n  box-sizing: border-box;\n  color: #fff;\n  content: attr(data-user);\n  display: block;\n  font-size: 12px;\n  font-weight: bold;\n  left: -5px;\n  min-height: 8px;\n  min-width: 8px;\n  padding: 0 12px;\n  position: absolute;\n  top: -11px;\n  white-space: nowrap;\n  z-index: 1000;\n}\n.tox-rtc-user-selection--1 .tox-rtc-user-cursor {\n  background-color: #2dc26b;\n}\n.tox-rtc-user-selection--2 .tox-rtc-user-cursor {\n  background-color: #e03e2d;\n}\n.tox-rtc-user-selection--3 .tox-rtc-user-cursor {\n  background-color: #f1c40f;\n}\n.tox-rtc-user-selection--4 .tox-rtc-user-cursor {\n  background-color: #3598db;\n}\n.tox-rtc-user-selection--5 .tox-rtc-user-cursor {\n  background-color: #b96ad9;\n}\n.tox-rtc-user-selection--6 .tox-rtc-user-cursor {\n  background-color: #e67e23;\n}\n.tox-rtc-user-selection--7 .tox-rtc-user-cursor {\n  background-color: #aaa69d;\n}\n.tox-rtc-user-selection--8 .tox-rtc-user-cursor {\n  background-color: #f368e0;\n}\n.tox-rtc-remote-image {\n  background: #eaeaea url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\") no-repeat center center;\n  border: 1px solid #ccc;\n  min-height: 240px;\n  min-width: 320px;\n}\n.mce-match-marker {\n  background: #aaa;\n  color: #fff;\n}\n.mce-match-marker-selected {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::-moz-selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-content-body img[data-mce-selected],\n.mce-content-body video[data-mce-selected],\n.mce-content-body audio[data-mce-selected],\n.mce-content-body object[data-mce-selected],\n.mce-content-body embed[data-mce-selected],\n.mce-content-body table[data-mce-selected] {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body hr[data-mce-selected] {\n  outline: 3px solid #b4d7ff;\n  outline-offset: 1px;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body *[contentEditable=false][data-mce-selected] {\n  cursor: not-allowed;\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,\n.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {\n  outline: none;\n}\n.mce-content-body *[data-mce-selected=\"inline-boundary\"] {\n  background-color: #b4d7ff;\n}\n.mce-content-body .mce-edit-focus {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body td[data-mce-selected],\n.mce-content-body th[data-mce-selected] {\n  position: relative;\n}\n.mce-content-body td[data-mce-selected]::-moz-selection,\n.mce-content-body th[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected]::selection,\n.mce-content-body th[data-mce-selected]::selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected] *,\n.mce-content-body th[data-mce-selected] * {\n  outline: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.mce-content-body td[data-mce-selected]::after,\n.mce-content-body th[data-mce-selected]::after {\n  background-color: rgba(180, 215, 255, 0.7);\n  border: 1px solid rgba(180, 215, 255, 0.7);\n  bottom: -1px;\n  content: '';\n  left: -1px;\n  mix-blend-mode: multiply;\n  position: absolute;\n  right: -1px;\n  top: -1px;\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .mce-content-body td[data-mce-selected]::after,\n  .mce-content-body th[data-mce-selected]::after {\n    border-color: rgba(0, 84, 180, 0.7);\n  }\n}\n.mce-content-body img[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body img[data-mce-selected]::selection {\n  background: none;\n}\n.ephox-snooker-resizer-bar {\n  background-color: #b4d7ff;\n  opacity: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n.ephox-snooker-resizer-cols {\n  cursor: col-resize;\n}\n.ephox-snooker-resizer-rows {\n  cursor: row-resize;\n}\n.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {\n  opacity: 1;\n}\n.mce-spellchecker-word {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n  height: 2rem;\n}\n.mce-spellchecker-grammar {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n}\n.mce-toc {\n  border: 1px solid gray;\n}\n.mce-toc h2 {\n  margin: 4px;\n}\n.mce-toc li {\n  list-style-type: none;\n}\ntable[style*=\"border-width: 0px\"],\n.mce-item-table:not([border]),\n.mce-item-table[border=\"0\"],\ntable[style*=\"border-width: 0px\"] td,\n.mce-item-table:not([border]) td,\n.mce-item-table[border=\"0\"] td,\ntable[style*=\"border-width: 0px\"] th,\n.mce-item-table:not([border]) th,\n.mce-item-table[border=\"0\"] th,\ntable[style*=\"border-width: 0px\"] caption,\n.mce-item-table:not([border]) caption,\n.mce-item-table[border=\"0\"] caption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks p,\n.mce-visualblocks h1,\n.mce-visualblocks h2,\n.mce-visualblocks h3,\n.mce-visualblocks h4,\n.mce-visualblocks h5,\n.mce-visualblocks h6,\n.mce-visualblocks div:not([data-mce-bogus]),\n.mce-visualblocks section,\n.mce-visualblocks article,\n.mce-visualblocks blockquote,\n.mce-visualblocks address,\n.mce-visualblocks pre,\n.mce-visualblocks figure,\n.mce-visualblocks figcaption,\n.mce-visualblocks hgroup,\n.mce-visualblocks aside,\n.mce-visualblocks ul,\n.mce-visualblocks ol,\n.mce-visualblocks dl {\n  background-repeat: no-repeat;\n  border: 1px dashed #bbb;\n  margin-left: 3px;\n  padding-top: 10px;\n}\n.mce-visualblocks p {\n  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);\n}\n.mce-visualblocks h1 {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);\n}\n.mce-visualblocks h2 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);\n}\n.mce-visualblocks h3 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);\n}\n.mce-visualblocks h4 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);\n}\n.mce-visualblocks h5 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);\n}\n.mce-visualblocks h6 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);\n}\n.mce-visualblocks div:not([data-mce-bogus]) {\n  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);\n}\n.mce-visualblocks section {\n  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);\n}\n.mce-visualblocks article {\n  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);\n}\n.mce-visualblocks blockquote {\n  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);\n}\n.mce-visualblocks address {\n  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);\n}\n.mce-visualblocks pre {\n  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);\n}\n.mce-visualblocks figure {\n  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);\n}\n.mce-visualblocks figcaption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks hgroup {\n  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);\n}\n.mce-visualblocks aside {\n  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);\n}\n.mce-visualblocks ul {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);\n}\n.mce-visualblocks ol {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);\n}\n.mce-visualblocks dl {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);\n}\n.mce-visualblocks:not([dir=rtl]) p,\n.mce-visualblocks:not([dir=rtl]) h1,\n.mce-visualblocks:not([dir=rtl]) h2,\n.mce-visualblocks:not([dir=rtl]) h3,\n.mce-visualblocks:not([dir=rtl]) h4,\n.mce-visualblocks:not([dir=rtl]) h5,\n.mce-visualblocks:not([dir=rtl]) h6,\n.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),\n.mce-visualblocks:not([dir=rtl]) section,\n.mce-visualblocks:not([dir=rtl]) article,\n.mce-visualblocks:not([dir=rtl]) blockquote,\n.mce-visualblocks:not([dir=rtl]) address,\n.mce-visualblocks:not([dir=rtl]) pre,\n.mce-visualblocks:not([dir=rtl]) figure,\n.mce-visualblocks:not([dir=rtl]) figcaption,\n.mce-visualblocks:not([dir=rtl]) hgroup,\n.mce-visualblocks:not([dir=rtl]) aside,\n.mce-visualblocks:not([dir=rtl]) ul,\n.mce-visualblocks:not([dir=rtl]) ol,\n.mce-visualblocks:not([dir=rtl]) dl {\n  margin-left: 3px;\n}\n.mce-visualblocks[dir=rtl] p,\n.mce-visualblocks[dir=rtl] h1,\n.mce-visualblocks[dir=rtl] h2,\n.mce-visualblocks[dir=rtl] h3,\n.mce-visualblocks[dir=rtl] h4,\n.mce-visualblocks[dir=rtl] h5,\n.mce-visualblocks[dir=rtl] h6,\n.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),\n.mce-visualblocks[dir=rtl] section,\n.mce-visualblocks[dir=rtl] article,\n.mce-visualblocks[dir=rtl] blockquote,\n.mce-visualblocks[dir=rtl] address,\n.mce-visualblocks[dir=rtl] pre,\n.mce-visualblocks[dir=rtl] figure,\n.mce-visualblocks[dir=rtl] figcaption,\n.mce-visualblocks[dir=rtl] hgroup,\n.mce-visualblocks[dir=rtl] aside,\n.mce-visualblocks[dir=rtl] ul,\n.mce-visualblocks[dir=rtl] ol,\n.mce-visualblocks[dir=rtl] dl {\n  background-position-x: right;\n  margin-right: 3px;\n}\n.mce-nbsp,\n.mce-shy {\n  background: #aaa;\n}\n.mce-shy::after {\n  content: '-';\n}\nbody {\n  font-family: sans-serif;\n}\ntable {\n  border-collapse: collapse;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/tinymce-5/content.inline.css",
    "content": ".mce-content-body .mce-item-anchor {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n}\n.mce-content-body .mce-item-anchor:empty {\n  cursor: default;\n  display: inline-block;\n  height: 12px !important;\n  padding: 0 2px;\n  -webkit-user-modify: read-only;\n  -moz-user-modify: read-only;\n  -webkit-user-select: all;\n  -moz-user-select: all;\n  user-select: all;\n  width: 8px !important;\n}\n.mce-content-body .mce-item-anchor:not(:empty) {\n  background-position-x: 2px;\n  display: inline-block;\n  padding-left: 12px;\n}\n.mce-content-body .mce-item-anchor[data-mce-selected] {\n  outline-offset: 1px;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"]:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #ffe89d;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"][data-mce-annotation-active=\"true\"]:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment:not([data-mce-selected]) {\n  background-color: #ffe89d;\n  outline: none;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"]:not([data-mce-selected=\"inline-boundary\"]) {\n  background-color: #fed635;\n}\n.tox-checklist > li:not(.tox-checklist--hidden) {\n  list-style: none;\n  margin: 0.25em 0;\n}\n.tox-checklist > li:not(.tox-checklist--hidden)::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n  cursor: pointer;\n  height: 1em;\n  margin-left: -1.5em;\n  margin-top: 0.125em;\n  position: absolute;\n  width: 1em;\n}\n.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n}\n[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {\n  margin-left: 0;\n  margin-right: -1.5em;\n}\n/* stylelint-disable */\n/* http://prismjs.com/ */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n  color: black;\n  background: none;\n  text-shadow: 0 1px white;\n  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n  font-size: 1em;\n  text-align: left;\n  white-space: pre;\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: normal;\n  line-height: 1.5;\n  -moz-tab-size: 4;\n  tab-size: 4;\n  -webkit-hyphens: none;\n  hyphens: none;\n}\npre[class*=\"language-\"]::-moz-selection,\npre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection,\ncode[class*=\"language-\"] ::-moz-selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\npre[class*=\"language-\"]::selection,\npre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection,\ncode[class*=\"language-\"] ::selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n@media print {\n  code[class*=\"language-\"],\n  pre[class*=\"language-\"] {\n    text-shadow: none;\n  }\n}\n/* Code blocks */\npre[class*=\"language-\"] {\n  padding: 1em;\n  margin: 0.5em 0;\n  overflow: auto;\n}\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n  background: #f5f2f0;\n}\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n  padding: 0.1em;\n  border-radius: 0.3em;\n  white-space: normal;\n}\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n  color: slategray;\n}\n.token.punctuation {\n  color: #999;\n}\n.token.namespace {\n  opacity: 0.7;\n}\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n  color: #905;\n}\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n  color: #690;\n}\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n  color: #9a6e3a;\n  /* This background color was intended by the author of this theme. */\n  background: hsla(0, 0%, 100%, 0.5);\n}\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n  color: #07a;\n}\n.token.function,\n.token.class-name {\n  color: #DD4A68;\n}\n.token.regex,\n.token.important,\n.token.variable {\n  color: #e90;\n}\n.token.important,\n.token.bold {\n  font-weight: bold;\n}\n.token.italic {\n  font-style: italic;\n}\n.token.entity {\n  cursor: help;\n}\n/* stylelint-enable */\n.mce-content-body {\n  overflow-wrap: break-word;\n  word-wrap: break-word;\n}\n.mce-content-body .mce-visual-caret {\n  background-color: black;\n  background-color: currentColor;\n  position: absolute;\n}\n.mce-content-body .mce-visual-caret-hidden {\n  display: none;\n}\n.mce-content-body *[data-mce-caret] {\n  left: -1000px;\n  margin: 0;\n  padding: 0;\n  position: absolute;\n  right: auto;\n  top: 0;\n}\n.mce-content-body .mce-offscreen-selection {\n  left: -2000000px;\n  max-width: 1000000px;\n  position: absolute;\n}\n.mce-content-body *[contentEditable=false] {\n  cursor: default;\n}\n.mce-content-body *[contentEditable=true] {\n  cursor: text;\n}\n.tox-cursor-format-painter {\n  cursor: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\"), default;\n}\ndiv.mce-footnotes hr {\n  margin-inline-end: auto;\n  margin-inline-start: 0;\n  width: 25%;\n}\ndiv.mce-footnotes li > a.mce-footnotes-backlink {\n  text-decoration: none;\n}\n@media print {\n  sup.mce-footnote a {\n    color: black;\n    text-decoration: none;\n  }\n  div.mce-footnotes {\n    break-inside: avoid;\n    width: 100%;\n  }\n  div.mce-footnotes li > a.mce-footnotes-backlink {\n    display: none;\n  }\n}\n.mce-content-body figure.align-left {\n  float: left;\n}\n.mce-content-body figure.align-right {\n  float: right;\n}\n.mce-content-body figure.image.align-center {\n  display: table;\n  margin-left: auto;\n  margin-right: auto;\n}\n.mce-preview-object {\n  border: 1px solid gray;\n  display: inline-block;\n  line-height: 0;\n  margin: 0 2px 0 2px;\n  position: relative;\n}\n.mce-preview-object .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-preview-object[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.mce-content-body .mce-mergetag:hover {\n  background-color: rgba(0, 108, 231, 0.1);\n}\n.mce-content-body .mce-mergetag-affix {\n  background-color: rgba(0, 108, 231, 0.1);\n  color: #006ce7;\n}\n.mce-object {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n  border: 1px dashed #aaa;\n}\n.mce-pagebreak {\n  border: 1px dashed #aaa;\n  cursor: default;\n  display: block;\n  height: 5px;\n  margin-top: 15px;\n  page-break-before: always;\n  width: 100%;\n}\n@media print {\n  .mce-pagebreak {\n    border: 0;\n  }\n}\n.tiny-pageembed .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tiny-pageembed[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.tiny-pageembed {\n  display: inline-block;\n  position: relative;\n}\n.tiny-pageembed--21by9,\n.tiny-pageembed--16by9,\n.tiny-pageembed--4by3,\n.tiny-pageembed--1by1 {\n  display: block;\n  overflow: hidden;\n  padding: 0;\n  position: relative;\n  width: 100%;\n}\n.tiny-pageembed--21by9 {\n  padding-top: 42.857143%;\n}\n.tiny-pageembed--16by9 {\n  padding-top: 56.25%;\n}\n.tiny-pageembed--4by3 {\n  padding-top: 75%;\n}\n.tiny-pageembed--1by1 {\n  padding-top: 100%;\n}\n.tiny-pageembed--21by9 iframe,\n.tiny-pageembed--16by9 iframe,\n.tiny-pageembed--4by3 iframe,\n.tiny-pageembed--1by1 iframe {\n  border: 0;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-content-body[data-mce-placeholder] {\n  position: relative;\n}\n.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  color: rgba(34, 47, 62, 0.7);\n  content: attr(data-mce-placeholder);\n  position: absolute;\n}\n.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  left: 1px;\n}\n.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {\n  right: 1px;\n}\n.mce-content-body div.mce-resizehandle {\n  background-color: #4099ff;\n  border-color: #4099ff;\n  border-style: solid;\n  border-width: 1px;\n  box-sizing: border-box;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n  z-index: 1298;\n}\n.mce-content-body div.mce-resizehandle:hover {\n  background-color: #4099ff;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(1) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(2) {\n  cursor: nesw-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(3) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(4) {\n  cursor: nesw-resize;\n}\n.mce-content-body .mce-resize-backdrop {\n  z-index: 10000;\n}\n.mce-content-body .mce-clonedresizable {\n  cursor: default;\n  opacity: 0.5;\n  outline: 1px dashed black;\n  position: absolute;\n  z-index: 10001;\n}\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {\n  border: 0;\n}\n.mce-content-body .mce-resize-helper {\n  background: #555;\n  background: rgba(0, 0, 0, 0.75);\n  border: 1px;\n  border-radius: 3px;\n  color: white;\n  display: none;\n  font-family: sans-serif;\n  font-size: 12px;\n  line-height: 14px;\n  margin: 5px 10px;\n  padding: 5px;\n  position: absolute;\n  white-space: nowrap;\n  z-index: 10002;\n}\n.tox-rtc-user-selection {\n  position: relative;\n}\n.tox-rtc-user-cursor {\n  bottom: 0;\n  cursor: default;\n  position: absolute;\n  top: 0;\n  width: 2px;\n}\n.tox-rtc-user-cursor::before {\n  background-color: inherit;\n  border-radius: 50%;\n  content: '';\n  display: block;\n  height: 8px;\n  position: absolute;\n  right: -3px;\n  top: -3px;\n  width: 8px;\n}\n.tox-rtc-user-cursor:hover::after {\n  background-color: inherit;\n  border-radius: 100px;\n  box-sizing: border-box;\n  color: #fff;\n  content: attr(data-user);\n  display: block;\n  font-size: 12px;\n  font-weight: bold;\n  left: -5px;\n  min-height: 8px;\n  min-width: 8px;\n  padding: 0 12px;\n  position: absolute;\n  top: -11px;\n  white-space: nowrap;\n  z-index: 1000;\n}\n.tox-rtc-user-selection--1 .tox-rtc-user-cursor {\n  background-color: #2dc26b;\n}\n.tox-rtc-user-selection--2 .tox-rtc-user-cursor {\n  background-color: #e03e2d;\n}\n.tox-rtc-user-selection--3 .tox-rtc-user-cursor {\n  background-color: #f1c40f;\n}\n.tox-rtc-user-selection--4 .tox-rtc-user-cursor {\n  background-color: #3598db;\n}\n.tox-rtc-user-selection--5 .tox-rtc-user-cursor {\n  background-color: #b96ad9;\n}\n.tox-rtc-user-selection--6 .tox-rtc-user-cursor {\n  background-color: #e67e23;\n}\n.tox-rtc-user-selection--7 .tox-rtc-user-cursor {\n  background-color: #aaa69d;\n}\n.tox-rtc-user-selection--8 .tox-rtc-user-cursor {\n  background-color: #f368e0;\n}\n.tox-rtc-remote-image {\n  background: #eaeaea url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\") no-repeat center center;\n  border: 1px solid #ccc;\n  min-height: 240px;\n  min-width: 320px;\n}\n.mce-match-marker {\n  background: #aaa;\n  color: #fff;\n}\n.mce-match-marker-selected {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::-moz-selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-content-body img[data-mce-selected],\n.mce-content-body video[data-mce-selected],\n.mce-content-body audio[data-mce-selected],\n.mce-content-body object[data-mce-selected],\n.mce-content-body embed[data-mce-selected],\n.mce-content-body table[data-mce-selected] {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body hr[data-mce-selected] {\n  outline: 3px solid #b4d7ff;\n  outline-offset: 1px;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body *[contentEditable=false][data-mce-selected] {\n  cursor: not-allowed;\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,\n.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {\n  outline: none;\n}\n.mce-content-body *[data-mce-selected=\"inline-boundary\"] {\n  background-color: #b4d7ff;\n}\n.mce-content-body .mce-edit-focus {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body td[data-mce-selected],\n.mce-content-body th[data-mce-selected] {\n  position: relative;\n}\n.mce-content-body td[data-mce-selected]::-moz-selection,\n.mce-content-body th[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected]::selection,\n.mce-content-body th[data-mce-selected]::selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected] *,\n.mce-content-body th[data-mce-selected] * {\n  outline: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.mce-content-body td[data-mce-selected]::after,\n.mce-content-body th[data-mce-selected]::after {\n  background-color: rgba(180, 215, 255, 0.7);\n  border: 1px solid rgba(180, 215, 255, 0.7);\n  bottom: -1px;\n  content: '';\n  left: -1px;\n  mix-blend-mode: multiply;\n  position: absolute;\n  right: -1px;\n  top: -1px;\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .mce-content-body td[data-mce-selected]::after,\n  .mce-content-body th[data-mce-selected]::after {\n    border-color: rgba(0, 84, 180, 0.7);\n  }\n}\n.mce-content-body img[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body img[data-mce-selected]::selection {\n  background: none;\n}\n.ephox-snooker-resizer-bar {\n  background-color: #b4d7ff;\n  opacity: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n.ephox-snooker-resizer-cols {\n  cursor: col-resize;\n}\n.ephox-snooker-resizer-rows {\n  cursor: row-resize;\n}\n.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {\n  opacity: 1;\n}\n.mce-spellchecker-word {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n  height: 2rem;\n}\n.mce-spellchecker-grammar {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n}\n.mce-toc {\n  border: 1px solid gray;\n}\n.mce-toc h2 {\n  margin: 4px;\n}\n.mce-toc li {\n  list-style-type: none;\n}\ntable[style*=\"border-width: 0px\"],\n.mce-item-table:not([border]),\n.mce-item-table[border=\"0\"],\ntable[style*=\"border-width: 0px\"] td,\n.mce-item-table:not([border]) td,\n.mce-item-table[border=\"0\"] td,\ntable[style*=\"border-width: 0px\"] th,\n.mce-item-table:not([border]) th,\n.mce-item-table[border=\"0\"] th,\ntable[style*=\"border-width: 0px\"] caption,\n.mce-item-table:not([border]) caption,\n.mce-item-table[border=\"0\"] caption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks p,\n.mce-visualblocks h1,\n.mce-visualblocks h2,\n.mce-visualblocks h3,\n.mce-visualblocks h4,\n.mce-visualblocks h5,\n.mce-visualblocks h6,\n.mce-visualblocks div:not([data-mce-bogus]),\n.mce-visualblocks section,\n.mce-visualblocks article,\n.mce-visualblocks blockquote,\n.mce-visualblocks address,\n.mce-visualblocks pre,\n.mce-visualblocks figure,\n.mce-visualblocks figcaption,\n.mce-visualblocks hgroup,\n.mce-visualblocks aside,\n.mce-visualblocks ul,\n.mce-visualblocks ol,\n.mce-visualblocks dl {\n  background-repeat: no-repeat;\n  border: 1px dashed #bbb;\n  margin-left: 3px;\n  padding-top: 10px;\n}\n.mce-visualblocks p {\n  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);\n}\n.mce-visualblocks h1 {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);\n}\n.mce-visualblocks h2 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);\n}\n.mce-visualblocks h3 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);\n}\n.mce-visualblocks h4 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);\n}\n.mce-visualblocks h5 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);\n}\n.mce-visualblocks h6 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);\n}\n.mce-visualblocks div:not([data-mce-bogus]) {\n  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);\n}\n.mce-visualblocks section {\n  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);\n}\n.mce-visualblocks article {\n  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);\n}\n.mce-visualblocks blockquote {\n  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);\n}\n.mce-visualblocks address {\n  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);\n}\n.mce-visualblocks pre {\n  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);\n}\n.mce-visualblocks figure {\n  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);\n}\n.mce-visualblocks figcaption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks hgroup {\n  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);\n}\n.mce-visualblocks aside {\n  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);\n}\n.mce-visualblocks ul {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);\n}\n.mce-visualblocks ol {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);\n}\n.mce-visualblocks dl {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);\n}\n.mce-visualblocks:not([dir=rtl]) p,\n.mce-visualblocks:not([dir=rtl]) h1,\n.mce-visualblocks:not([dir=rtl]) h2,\n.mce-visualblocks:not([dir=rtl]) h3,\n.mce-visualblocks:not([dir=rtl]) h4,\n.mce-visualblocks:not([dir=rtl]) h5,\n.mce-visualblocks:not([dir=rtl]) h6,\n.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),\n.mce-visualblocks:not([dir=rtl]) section,\n.mce-visualblocks:not([dir=rtl]) article,\n.mce-visualblocks:not([dir=rtl]) blockquote,\n.mce-visualblocks:not([dir=rtl]) address,\n.mce-visualblocks:not([dir=rtl]) pre,\n.mce-visualblocks:not([dir=rtl]) figure,\n.mce-visualblocks:not([dir=rtl]) figcaption,\n.mce-visualblocks:not([dir=rtl]) hgroup,\n.mce-visualblocks:not([dir=rtl]) aside,\n.mce-visualblocks:not([dir=rtl]) ul,\n.mce-visualblocks:not([dir=rtl]) ol,\n.mce-visualblocks:not([dir=rtl]) dl {\n  margin-left: 3px;\n}\n.mce-visualblocks[dir=rtl] p,\n.mce-visualblocks[dir=rtl] h1,\n.mce-visualblocks[dir=rtl] h2,\n.mce-visualblocks[dir=rtl] h3,\n.mce-visualblocks[dir=rtl] h4,\n.mce-visualblocks[dir=rtl] h5,\n.mce-visualblocks[dir=rtl] h6,\n.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),\n.mce-visualblocks[dir=rtl] section,\n.mce-visualblocks[dir=rtl] article,\n.mce-visualblocks[dir=rtl] blockquote,\n.mce-visualblocks[dir=rtl] address,\n.mce-visualblocks[dir=rtl] pre,\n.mce-visualblocks[dir=rtl] figure,\n.mce-visualblocks[dir=rtl] figcaption,\n.mce-visualblocks[dir=rtl] hgroup,\n.mce-visualblocks[dir=rtl] aside,\n.mce-visualblocks[dir=rtl] ul,\n.mce-visualblocks[dir=rtl] ol,\n.mce-visualblocks[dir=rtl] dl {\n  background-position-x: right;\n  margin-right: 3px;\n}\n.mce-nbsp,\n.mce-shy {\n  background: #aaa;\n}\n.mce-shy::after {\n  content: '-';\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/tinymce-5/skin.css",
    "content": ".tox {\n  box-shadow: none;\n  box-sizing: content-box;\n  color: #222f3e;\n  cursor: auto;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: normal;\n  -webkit-tap-highlight-color: transparent;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  vertical-align: initial;\n  white-space: normal;\n}\n.tox *:not(svg):not(rect) {\n  box-sizing: inherit;\n  color: inherit;\n  cursor: inherit;\n  direction: inherit;\n  font-family: inherit;\n  font-size: inherit;\n  font-style: inherit;\n  font-weight: inherit;\n  line-height: inherit;\n  -webkit-tap-highlight-color: inherit;\n  text-align: inherit;\n  text-decoration: inherit;\n  text-shadow: inherit;\n  text-transform: inherit;\n  vertical-align: inherit;\n  white-space: inherit;\n}\n.tox *:not(svg):not(rect) {\n  /* stylelint-disable-line no-duplicate-selectors */\n  background: transparent;\n  border: 0;\n  box-shadow: none;\n  float: none;\n  height: auto;\n  margin: 0;\n  max-width: none;\n  outline: 0;\n  padding: 0;\n  position: static;\n  width: auto;\n}\n.tox:not([dir=rtl]) {\n  direction: ltr;\n  text-align: left;\n}\n.tox[dir=rtl] {\n  direction: rtl;\n  text-align: right;\n}\n.tox-tinymce {\n  border: 1px solid #cccccc;\n  border-radius: 0;\n  box-shadow: none;\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: column;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  overflow: hidden;\n  position: relative;\n  visibility: inherit !important;\n}\n.tox.tox-tinymce-inline {\n  border: none;\n  box-shadow: none;\n  overflow: initial;\n}\n.tox.tox-tinymce-inline .tox-editor-container {\n  overflow: initial;\n}\n.tox.tox-tinymce-inline .tox-editor-header {\n  background-color: #fff;\n  border: 1px solid #cccccc;\n  border-radius: 0;\n  box-shadow: none;\n  overflow: hidden;\n}\n.tox-tinymce-aux {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  z-index: 1300;\n}\n.tox-tinymce *:focus,\n.tox-tinymce-aux *:focus {\n  outline: none;\n}\nbutton::-moz-focus-inner {\n  border: 0;\n}\n.tox[dir=rtl] .tox-icon--flip svg {\n  transform: rotateY(180deg);\n}\n.tox .accessibility-issue__header {\n  align-items: center;\n  display: flex;\n  margin-bottom: 4px;\n}\n.tox .accessibility-issue__description {\n  align-items: stretch;\n  border: 1px solid #cccccc;\n  border-radius: 3px;\n  display: flex;\n  justify-content: space-between;\n}\n.tox .accessibility-issue__description > div {\n  padding-bottom: 4px;\n}\n.tox .accessibility-issue__description > div > div {\n  align-items: center;\n  display: flex;\n  margin-bottom: 4px;\n}\n.tox .accessibility-issue__description > *:last-child:not(:only-child) {\n  border-color: #cccccc;\n  border-style: solid;\n}\n.tox .accessibility-issue__repair {\n  margin-top: 16px;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description {\n  background-color: rgba(32, 122, 183, 0.1);\n  border-color: rgba(32, 122, 183, 0.4);\n  color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description > *:last-child {\n  border-color: rgba(32, 122, 183, 0.4);\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 {\n  color: #207ab7;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg {\n  fill: #207ab7;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon {\n  color: #207ab7;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description {\n  background-color: rgba(255, 165, 0, 0.1);\n  border-color: rgba(255, 165, 0, 0.5);\n  color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description > *:last-child {\n  border-color: rgba(255, 165, 0, 0.5);\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 {\n  color: #cc8500;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg {\n  fill: #cc8500;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon {\n  color: #cc8500;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description {\n  background-color: rgba(204, 0, 0, 0.1);\n  border-color: rgba(204, 0, 0, 0.4);\n  color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description > *:last-child {\n  border-color: rgba(204, 0, 0, 0.4);\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 {\n  color: #c00;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg {\n  fill: #c00;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon {\n  color: #c00;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description {\n  background-color: rgba(120, 171, 70, 0.1);\n  border-color: rgba(120, 171, 70, 0.4);\n  color: #222f3e;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child {\n  border-color: rgba(120, 171, 70, 0.4);\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 {\n  color: #78AB46;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg {\n  fill: #78AB46;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon {\n  color: #78AB46;\n}\n.tox .tox-dialog__body-content .accessibility-issue__header h1,\n.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 {\n  margin-top: 0;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button {\n  margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {\n  margin-left: auto;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description {\n  padding: 4px 4px 4px 8px;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description > *:last-child {\n  border-left-width: 1px;\n  padding-left: 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button {\n  margin-right: 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {\n  margin-right: auto;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description {\n  padding: 4px 8px 4px 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description > *:last-child {\n  border-right-width: 1px;\n  padding-right: 4px;\n}\n.tox .tox-anchorbar {\n  display: flex;\n  flex: 0 0 auto;\n}\n.tox .tox-bar {\n  display: flex;\n  flex: 0 0 auto;\n}\n.tox .tox-button {\n  background-color: #207ab7;\n  background-image: none;\n  background-position: 0 0;\n  background-repeat: repeat;\n  border-color: #207ab7;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  color: #fff;\n  cursor: pointer;\n  display: inline-block;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  line-height: 24px;\n  margin: 0;\n  outline: none;\n  padding: 4px 16px;\n  position: relative;\n  text-align: center;\n  text-decoration: none;\n  text-transform: none;\n  white-space: nowrap;\n}\n.tox .tox-button::before {\n  border-radius: 3px;\n  bottom: -1px;\n  box-shadow: inset 0 0 0 2px #fff, 0 0 0 1px #207ab7, 0 0 0 3px rgba(32, 122, 183, 0.25);\n  content: '';\n  left: -1px;\n  opacity: 0;\n  pointer-events: none;\n  position: absolute;\n  right: -1px;\n  top: -1px;\n}\n.tox .tox-button[disabled] {\n  background-color: #207ab7;\n  background-image: none;\n  border-color: #207ab7;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-button:focus:not(:disabled) {\n  background-color: #1c6ca1;\n  background-image: none;\n  border-color: #1c6ca1;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button:focus-visible:not(:disabled)::before {\n  opacity: 1;\n}\n.tox .tox-button:hover:not(:disabled) {\n  background-color: #1c6ca1;\n  background-image: none;\n  border-color: #1c6ca1;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button:active:not(:disabled) {\n  background-color: #185d8c;\n  background-image: none;\n  border-color: #185d8c;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--secondary {\n  background-color: #f0f0f0;\n  background-image: none;\n  background-position: 0 0;\n  background-repeat: repeat;\n  border-color: #f0f0f0;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  color: #222f3e;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  outline: none;\n  padding: 4px 16px;\n  text-decoration: none;\n  text-transform: none;\n}\n.tox .tox-button--secondary[disabled] {\n  background-color: #f0f0f0;\n  background-image: none;\n  border-color: #f0f0f0;\n  box-shadow: none;\n  color: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-button--secondary:focus:not(:disabled) {\n  background-color: #e3e3e3;\n  background-image: none;\n  border-color: #e3e3e3;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-button--secondary:hover:not(:disabled) {\n  background-color: #e3e3e3;\n  background-image: none;\n  border-color: #e3e3e3;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-button--secondary:active:not(:disabled) {\n  background-color: #d6d6d6;\n  background-image: none;\n  border-color: #d6d6d6;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-button--icon,\n.tox .tox-button.tox-button--icon,\n.tox .tox-button.tox-button--secondary.tox-button--icon {\n  padding: 4px;\n}\n.tox .tox-button--icon .tox-icon svg,\n.tox .tox-button.tox-button--icon .tox-icon svg,\n.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg {\n  display: block;\n  fill: currentColor;\n}\n.tox .tox-button-link {\n  background: 0;\n  border: none;\n  box-sizing: border-box;\n  cursor: pointer;\n  display: inline-block;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  font-weight: normal;\n  line-height: 1.3;\n  margin: 0;\n  padding: 0;\n  white-space: nowrap;\n}\n.tox .tox-button-link--sm {\n  font-size: 14px;\n}\n.tox .tox-button--naked {\n  background-color: transparent;\n  border-color: transparent;\n  box-shadow: unset;\n  color: #222f3e;\n}\n.tox .tox-button--naked[disabled] {\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n  box-shadow: none;\n  color: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-button--naked:hover:not(:disabled) {\n  background-color: #e3e3e3;\n  border-color: #e3e3e3;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-button--naked:focus:not(:disabled) {\n  background-color: #e3e3e3;\n  border-color: #e3e3e3;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-button--naked:active:not(:disabled) {\n  background-color: #d6d6d6;\n  border-color: #d6d6d6;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-button--naked .tox-icon svg {\n  fill: currentColor;\n}\n.tox .tox-button--naked.tox-button--icon:hover:not(:disabled) {\n  color: #222f3e;\n}\n.tox .tox-checkbox {\n  align-items: center;\n  border-radius: 3px;\n  cursor: pointer;\n  display: flex;\n  height: 36px;\n  min-width: 36px;\n}\n.tox .tox-checkbox__input {\n  /* Hide from view but visible to screen readers */\n  height: 1px;\n  overflow: hidden;\n  position: absolute;\n  top: auto;\n  width: 1px;\n}\n.tox .tox-checkbox__icons {\n  align-items: center;\n  border-radius: 3px;\n  box-shadow: 0 0 0 2px transparent;\n  box-sizing: content-box;\n  display: flex;\n  height: 24px;\n  justify-content: center;\n  padding: calc(4px - 1px);\n  width: 24px;\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  display: block;\n  fill: rgba(34, 47, 62, 0.3);\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n  display: none;\n  fill: #207ab7;\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n  display: none;\n  fill: #207ab7;\n}\n.tox .tox-checkbox--disabled {\n  color: rgba(34, 47, 62, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  display: none;\n}\n.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n  display: block;\n}\n.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  display: none;\n}\n.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n  display: block;\n}\n.tox input.tox-checkbox__input:focus + .tox-checkbox__icons {\n  border-radius: 3px;\n  box-shadow: inset 0 0 0 1px #207ab7;\n  padding: calc(4px - 1px);\n}\n.tox:not([dir=rtl]) .tox-checkbox__label {\n  margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-checkbox__input {\n  left: -10000px;\n}\n.tox:not([dir=rtl]) .tox-bar .tox-checkbox {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-checkbox__label {\n  margin-right: 4px;\n}\n.tox[dir=rtl] .tox-checkbox__input {\n  right: -10000px;\n}\n.tox[dir=rtl] .tox-bar .tox-checkbox {\n  margin-right: 4px;\n}\n.tox {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox .tox-collection--toolbar .tox-collection__group {\n  display: flex;\n  padding: 0;\n}\n.tox .tox-collection--grid .tox-collection__group {\n  display: flex;\n  flex-wrap: wrap;\n  max-height: 208px;\n  overflow-x: hidden;\n  overflow-y: auto;\n  padding: 0;\n}\n.tox .tox-collection--list .tox-collection__group {\n  border-bottom-width: 0;\n  border-color: #cccccc;\n  border-left-width: 0;\n  border-right-width: 0;\n  border-style: solid;\n  border-top-width: 1px;\n  padding: 4px 0;\n}\n.tox .tox-collection--list .tox-collection__group:first-child {\n  border-top-width: 0;\n}\n.tox .tox-collection__group-heading {\n  background-color: #e6e6e6;\n  color: rgba(34, 47, 62, 0.7);\n  cursor: default;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  margin-bottom: 4px;\n  margin-top: -4px;\n  padding: 4px 8px;\n  text-transform: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.tox .tox-collection__item {\n  align-items: center;\n  border-radius: 3px;\n  color: #222f3e;\n  display: flex;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.tox .tox-collection--list .tox-collection__item {\n  padding: 4px 8px;\n}\n.tox .tox-collection--toolbar .tox-collection__item {\n  border-radius: 3px;\n  padding: 4px;\n}\n.tox .tox-collection--grid .tox-collection__item {\n  border-radius: 3px;\n  padding: 4px;\n}\n.tox .tox-collection--list .tox-collection__item--enabled {\n  background-color: #fff;\n  color: #222f3e;\n}\n.tox .tox-collection--list .tox-collection__item--active {\n  background-color: #dee0e2;\n}\n.tox .tox-collection--toolbar .tox-collection__item--enabled {\n  background-color: #c8cbcf;\n  color: #222f3e;\n}\n.tox .tox-collection--toolbar .tox-collection__item--active {\n  background-color: #dee0e2;\n}\n.tox .tox-collection--grid .tox-collection__item--enabled {\n  background-color: #c8cbcf;\n  color: #222f3e;\n}\n.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n  background-color: #dee0e2;\n  color: #222f3e;\n}\n.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n  color: #222f3e;\n}\n.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n  color: #222f3e;\n}\n.tox .tox-collection__item-icon,\n.tox .tox-collection__item-checkmark {\n  align-items: center;\n  display: flex;\n  height: 24px;\n  justify-content: center;\n  width: 24px;\n}\n.tox .tox-collection__item-icon svg,\n.tox .tox-collection__item-checkmark svg {\n  fill: currentColor;\n}\n.tox .tox-collection--toolbar-lg .tox-collection__item-icon {\n  height: 48px;\n  width: 48px;\n}\n.tox .tox-collection__item-label {\n  color: currentColor;\n  display: inline-block;\n  flex: 1;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 24px;\n  text-transform: none;\n  word-break: break-all;\n}\n.tox .tox-collection__item-accessory {\n  color: rgba(34, 47, 62, 0.7);\n  display: inline-block;\n  font-size: 14px;\n  height: 24px;\n  line-height: 24px;\n  text-transform: none;\n}\n.tox .tox-collection__item-caret {\n  align-items: center;\n  display: flex;\n  min-height: 24px;\n}\n.tox .tox-collection__item-caret::after {\n  content: '';\n  font-size: 0;\n  min-height: inherit;\n}\n.tox .tox-collection__item-caret svg {\n  fill: #222f3e;\n}\n.tox .tox-collection__item--state-disabled {\n  background-color: transparent;\n  color: rgba(34, 47, 62, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg {\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg {\n  display: none;\n}\n.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark {\n  display: none;\n}\n.tox .tox-collection--horizontal {\n  background-color: #fff;\n  border: 1px solid #cccccc;\n  border-radius: 3px;\n  box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n  display: flex;\n  flex: 0 0 auto;\n  flex-shrink: 0;\n  flex-wrap: nowrap;\n  margin-bottom: 0;\n  overflow-x: auto;\n  padding: 0;\n}\n.tox .tox-collection--horizontal .tox-collection__group {\n  align-items: center;\n  display: flex;\n  flex-wrap: nowrap;\n  margin: 0;\n  padding: 0 4px;\n}\n.tox .tox-collection--horizontal .tox-collection__item {\n  height: 34px;\n  margin: 3px 0 2px 0;\n  padding: 0 4px;\n}\n.tox .tox-collection--horizontal .tox-collection__item-label {\n  white-space: nowrap;\n}\n.tox .tox-collection--horizontal .tox-collection__item-caret {\n  margin-left: 4px;\n}\n.tox .tox-collection__item-container {\n  display: flex;\n}\n.tox .tox-collection__item-container--row {\n  align-items: center;\n  flex: 1 1 auto;\n  flex-direction: row;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--align-left {\n  margin-right: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--align-right {\n  justify-content: flex-end;\n  margin-left: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top {\n  align-items: flex-start;\n  margin-bottom: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle {\n  align-items: center;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom {\n  align-items: flex-end;\n  margin-top: auto;\n}\n.tox .tox-collection__item-container--column {\n  align-self: center;\n  flex: 1 1 auto;\n  flex-direction: column;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--align-left {\n  align-items: flex-start;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--align-right {\n  align-items: flex-end;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top {\n  align-self: flex-start;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle {\n  align-self: center;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom {\n  align-self: flex-end;\n}\n.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {\n  border-right: 1px solid #cccccc;\n}\n.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) {\n  margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {\n  margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-collection__item-accessory {\n  margin-left: 16px;\n  text-align: right;\n}\n.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret {\n  margin-left: 16px;\n}\n.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {\n  border-left: 1px solid #cccccc;\n}\n.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) {\n  margin-right: 8px;\n}\n.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {\n  margin-right: 4px;\n}\n.tox[dir=rtl] .tox-collection__item-accessory {\n  margin-right: 16px;\n  text-align: left;\n}\n.tox[dir=rtl] .tox-collection .tox-collection__item-caret {\n  margin-right: 16px;\n  transform: rotateY(180deg);\n}\n.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret {\n  margin-right: 4px;\n}\n.tox .tox-color-picker-container {\n  display: flex;\n  flex-direction: row;\n  height: 225px;\n  margin: 0;\n}\n.tox .tox-sv-palette {\n  box-sizing: border-box;\n  display: flex;\n  height: 100%;\n}\n.tox .tox-sv-palette-spectrum {\n  height: 100%;\n}\n.tox .tox-sv-palette,\n.tox .tox-sv-palette-spectrum {\n  width: 225px;\n}\n.tox .tox-sv-palette-thumb {\n  background: none;\n  border: 1px solid black;\n  border-radius: 50%;\n  box-sizing: content-box;\n  height: 12px;\n  position: absolute;\n  width: 12px;\n}\n.tox .tox-sv-palette-inner-thumb {\n  border: 1px solid white;\n  border-radius: 50%;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n}\n.tox .tox-hue-slider {\n  box-sizing: border-box;\n  height: 100%;\n  width: 25px;\n}\n.tox .tox-hue-slider-spectrum {\n  background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00);\n  height: 100%;\n  width: 100%;\n}\n.tox .tox-hue-slider,\n.tox .tox-hue-slider-spectrum {\n  width: 20px;\n}\n.tox .tox-hue-slider-thumb {\n  background: white;\n  border: 1px solid black;\n  box-sizing: content-box;\n  height: 4px;\n  width: 100%;\n}\n.tox .tox-rgb-form {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n}\n.tox .tox-rgb-form div {\n  align-items: center;\n  display: flex;\n  justify-content: space-between;\n  margin-bottom: 5px;\n  width: inherit;\n}\n.tox .tox-rgb-form input {\n  width: 6em;\n}\n.tox .tox-rgb-form input.tox-invalid {\n  /* Need !important to override Chrome's focus styling unfortunately */\n  border: 1px solid red !important;\n}\n.tox .tox-rgb-form .tox-rgba-preview {\n  border: 1px solid black;\n  flex-grow: 2;\n  margin-bottom: 0;\n}\n.tox:not([dir=rtl]) .tox-sv-palette {\n  margin-right: 15px;\n}\n.tox:not([dir=rtl]) .tox-hue-slider {\n  margin-right: 15px;\n}\n.tox:not([dir=rtl]) .tox-hue-slider-thumb {\n  margin-left: -1px;\n}\n.tox:not([dir=rtl]) .tox-rgb-form label {\n  margin-right: 0.5em;\n}\n.tox[dir=rtl] .tox-sv-palette {\n  margin-left: 15px;\n}\n.tox[dir=rtl] .tox-hue-slider {\n  margin-left: 15px;\n}\n.tox[dir=rtl] .tox-hue-slider-thumb {\n  margin-right: -1px;\n}\n.tox[dir=rtl] .tox-rgb-form label {\n  margin-left: 0.5em;\n}\n.tox .tox-toolbar .tox-swatches,\n.tox .tox-toolbar__primary .tox-swatches,\n.tox .tox-toolbar__overflow .tox-swatches {\n  margin: 2px 0 3px 4px;\n}\n.tox .tox-collection--list .tox-collection__group .tox-swatches-menu {\n  border: 0;\n  margin: -4px 0;\n}\n.tox .tox-swatches__row {\n  display: flex;\n}\n.tox .tox-swatch {\n  height: 30px;\n  transition: transform 0.15s, box-shadow 0.15s;\n  width: 30px;\n}\n.tox .tox-swatch:hover,\n.tox .tox-swatch:focus {\n  box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset;\n  transform: scale(0.8);\n}\n.tox .tox-swatch--remove {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n}\n.tox .tox-swatch--remove svg path {\n  stroke: #e74c3c;\n}\n.tox .tox-swatches__picker-btn {\n  align-items: center;\n  background-color: transparent;\n  border: 0;\n  cursor: pointer;\n  display: flex;\n  height: 30px;\n  justify-content: center;\n  outline: none;\n  padding: 0;\n  width: 30px;\n}\n.tox .tox-swatches__picker-btn svg {\n  fill: #222f3e;\n  height: 24px;\n  width: 24px;\n}\n.tox .tox-swatches__picker-btn:hover {\n  background: #dee0e2;\n}\n.tox:not([dir=rtl]) .tox-swatches__picker-btn {\n  margin-left: auto;\n}\n.tox[dir=rtl] .tox-swatches__picker-btn {\n  margin-right: auto;\n}\n.tox .tox-comment-thread {\n  background: #fff;\n  position: relative;\n}\n.tox .tox-comment-thread > *:not(:first-child) {\n  margin-top: 8px;\n}\n.tox .tox-comment {\n  background: #fff;\n  border: 1px solid #cccccc;\n  border-radius: 3px;\n  box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1);\n  padding: 8px 8px 16px 8px;\n  position: relative;\n}\n.tox .tox-comment__header {\n  align-items: center;\n  color: #222f3e;\n  display: flex;\n  justify-content: space-between;\n}\n.tox .tox-comment__date {\n  color: #222f3e;\n  font-size: 12px;\n  line-height: 18px;\n}\n.tox .tox-comment__body {\n  color: #222f3e;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  margin-top: 8px;\n  position: relative;\n  text-transform: initial;\n}\n.tox .tox-comment__body textarea {\n  resize: none;\n  white-space: normal;\n  width: 100%;\n}\n.tox .tox-comment__expander {\n  padding-top: 8px;\n}\n.tox .tox-comment__expander p {\n  color: rgba(34, 47, 62, 0.7);\n  font-size: 14px;\n  font-style: normal;\n}\n.tox .tox-comment__body p {\n  margin: 0;\n}\n.tox .tox-comment__buttonspacing {\n  padding-top: 16px;\n  text-align: center;\n}\n.tox .tox-comment-thread__overlay::after {\n  background: #fff;\n  bottom: 0;\n  content: \"\";\n  display: flex;\n  left: 0;\n  opacity: 0.9;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 5;\n}\n.tox .tox-comment__reply {\n  display: flex;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  margin-top: 8px;\n}\n.tox .tox-comment__reply > *:first-child {\n  margin-bottom: 8px;\n  width: 100%;\n}\n.tox .tox-comment__edit {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  margin-top: 16px;\n}\n.tox .tox-comment__gradient::after {\n  background: linear-gradient(rgba(255, 255, 255, 0), #fff);\n  bottom: 0;\n  content: \"\";\n  display: block;\n  height: 5em;\n  margin-top: -40px;\n  position: absolute;\n  width: 100%;\n}\n.tox .tox-comment__overlay {\n  background: #fff;\n  bottom: 0;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  left: 0;\n  opacity: 0.9;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 0;\n  z-index: 5;\n}\n.tox .tox-comment__loading-text {\n  align-items: center;\n  color: #222f3e;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n}\n.tox .tox-comment__loading-text > div {\n  padding-bottom: 16px;\n}\n.tox .tox-comment__overlaytext {\n  bottom: 0;\n  flex-direction: column;\n  font-size: 14px;\n  left: 0;\n  padding: 1em;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 10;\n}\n.tox .tox-comment__overlaytext p {\n  background-color: #fff;\n  box-shadow: 0 0 8px 8px #fff;\n  color: #222f3e;\n  text-align: center;\n}\n.tox .tox-comment__overlaytext div:nth-of-type(2) {\n  font-size: 0.8em;\n}\n.tox .tox-comment__busy-spinner {\n  align-items: center;\n  background-color: #fff;\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 20;\n}\n.tox .tox-comment__scroll {\n  display: flex;\n  flex-direction: column;\n  flex-shrink: 1;\n  overflow: auto;\n}\n.tox .tox-conversations {\n  margin: 8px;\n}\n.tox:not([dir=rtl]) .tox-comment__edit {\n  margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child,\n.tox:not([dir=rtl]) .tox-comment__edit > *:last-child,\n.tox:not([dir=rtl]) .tox-comment__reply > *:last-child {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-comment__edit {\n  margin-right: 8px;\n}\n.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child,\n.tox[dir=rtl] .tox-comment__edit > *:last-child,\n.tox[dir=rtl] .tox-comment__reply > *:last-child {\n  margin-right: 8px;\n}\n.tox .tox-user {\n  align-items: center;\n  display: flex;\n}\n.tox .tox-user__avatar svg {\n  fill: rgba(34, 47, 62, 0.7);\n}\n.tox .tox-user__avatar img {\n  border-radius: 50%;\n  height: 36px;\n  object-fit: cover;\n  vertical-align: middle;\n  width: 36px;\n}\n.tox .tox-user__name {\n  color: #222f3e;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: bold;\n  line-height: 18px;\n  text-transform: none;\n}\n.tox:not([dir=rtl]) .tox-user__avatar svg,\n.tox:not([dir=rtl]) .tox-user__avatar img {\n  margin-right: 8px;\n}\n.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-user__avatar svg,\n.tox[dir=rtl] .tox-user__avatar img {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-user__avatar + .tox-user__name {\n  margin-right: 8px;\n}\n.tox .tox-dialog-wrap {\n  align-items: center;\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: fixed;\n  right: 0;\n  top: 0;\n  z-index: 1100;\n}\n.tox .tox-dialog-wrap__backdrop {\n  background-color: rgba(255, 255, 255, 0.75);\n  bottom: 0;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 1;\n}\n.tox .tox-dialog-wrap__backdrop--opaque {\n  background-color: #fff;\n}\n.tox .tox-dialog {\n  background-color: #fff;\n  border-color: #cccccc;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15);\n  display: flex;\n  flex-direction: column;\n  max-height: 100%;\n  max-width: 480px;\n  overflow: hidden;\n  position: relative;\n  width: 95vw;\n  z-index: 2;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox .tox-dialog {\n    align-self: flex-start;\n    margin: 8px auto;\n    max-height: calc(100vh - 8px * 2);\n    width: calc(100vw - 16px);\n  }\n}\n.tox .tox-dialog-inline {\n  z-index: 1100;\n}\n.tox .tox-dialog__header {\n  align-items: center;\n  background-color: #fff;\n  border-bottom: none;\n  color: #222f3e;\n  display: flex;\n  font-size: 16px;\n  justify-content: space-between;\n  padding: 8px 16px 0 16px;\n  position: relative;\n}\n.tox .tox-dialog__header .tox-button {\n  z-index: 1;\n}\n.tox .tox-dialog__draghandle {\n  cursor: grab;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tox .tox-dialog__draghandle:active {\n  cursor: grabbing;\n}\n.tox .tox-dialog__dismiss {\n  margin-left: auto;\n}\n.tox .tox-dialog__title {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 20px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  margin: 0;\n  text-transform: none;\n}\n.tox .tox-dialog__body {\n  color: #222f3e;\n  display: flex;\n  flex: 1;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  min-width: 0;\n  text-align: left;\n  text-transform: none;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox .tox-dialog__body {\n    flex-direction: column;\n  }\n}\n.tox .tox-dialog__body-nav {\n  align-items: flex-start;\n  display: flex;\n  flex-direction: column;\n  padding: 16px 16px;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox .tox-dialog__body-nav {\n    flex-direction: row;\n    -webkit-overflow-scrolling: touch;\n    overflow-x: auto;\n    padding-bottom: 0;\n  }\n}\n.tox .tox-dialog__body-nav-item {\n  border-bottom: 2px solid transparent;\n  color: rgba(34, 47, 62, 0.7);\n  display: inline-block;\n  font-size: 14px;\n  line-height: 1.3;\n  margin-bottom: 8px;\n  text-decoration: none;\n  white-space: nowrap;\n}\n.tox .tox-dialog__body-nav-item:focus {\n  background-color: rgba(32, 122, 183, 0.1);\n}\n.tox .tox-dialog__body-nav-item--active {\n  border-bottom: 2px solid #207ab7;\n  color: #207ab7;\n}\n.tox .tox-dialog__body-content {\n  box-sizing: border-box;\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  max-height: 650px;\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n  padding: 16px 16px;\n}\n.tox .tox-dialog__body-content > * {\n  margin-bottom: 0;\n  margin-top: 16px;\n}\n.tox .tox-dialog__body-content > *:first-child {\n  margin-top: 0;\n}\n.tox .tox-dialog__body-content > *:last-child {\n  margin-bottom: 0;\n}\n.tox .tox-dialog__body-content > *:only-child {\n  margin-bottom: 0;\n  margin-top: 0;\n}\n.tox .tox-dialog__body-content a {\n  color: #207ab7;\n  cursor: pointer;\n  text-decoration: none;\n}\n.tox .tox-dialog__body-content a:hover,\n.tox .tox-dialog__body-content a:focus {\n  color: #185d8c;\n  text-decoration: none;\n}\n.tox .tox-dialog__body-content a:active {\n  color: #185d8c;\n  text-decoration: none;\n}\n.tox .tox-dialog__body-content svg {\n  fill: #222f3e;\n}\n.tox .tox-dialog__body-content ul {\n  display: block;\n  list-style-type: disc;\n  margin-bottom: 16px;\n  margin-inline-end: 0;\n  margin-inline-start: 0;\n  padding-inline-start: 2.5rem;\n}\n.tox .tox-dialog__body-content .tox-form__group h1 {\n  color: #222f3e;\n  font-size: 20px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  margin-bottom: 16px;\n  margin-top: 2rem;\n  text-transform: none;\n}\n.tox .tox-dialog__body-content .tox-form__group h2 {\n  color: #222f3e;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  margin-bottom: 16px;\n  margin-top: 2rem;\n  text-transform: none;\n}\n.tox .tox-dialog__body-content .tox-form__group p {\n  margin-bottom: 16px;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:first-child,\n.tox .tox-dialog__body-content .tox-form__group h2:first-child,\n.tox .tox-dialog__body-content .tox-form__group p:first-child {\n  margin-top: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:last-child,\n.tox .tox-dialog__body-content .tox-form__group h2:last-child,\n.tox .tox-dialog__body-content .tox-form__group p:last-child {\n  margin-bottom: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:only-child,\n.tox .tox-dialog__body-content .tox-form__group h2:only-child,\n.tox .tox-dialog__body-content .tox-form__group p:only-child {\n  margin-bottom: 0;\n  margin-top: 0;\n}\n.tox .tox-dialog--width-lg {\n  height: 650px;\n  max-width: 1200px;\n}\n.tox .tox-dialog--width-md {\n  max-width: 800px;\n}\n.tox .tox-dialog--width-md .tox-dialog__body-content {\n  overflow: auto;\n}\n.tox .tox-dialog__body-content--centered {\n  text-align: center;\n}\n.tox .tox-dialog__footer {\n  align-items: center;\n  background-color: #fff;\n  border-top: 1px solid #cccccc;\n  display: flex;\n  justify-content: space-between;\n  padding: 8px 16px;\n}\n.tox .tox-dialog__footer-start,\n.tox .tox-dialog__footer-end {\n  display: flex;\n}\n.tox .tox-dialog__busy-spinner {\n  align-items: center;\n  background-color: rgba(255, 255, 255, 0.75);\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 3;\n}\n.tox .tox-dialog__table {\n  border-collapse: collapse;\n  width: 100%;\n}\n.tox .tox-dialog__table thead th {\n  font-weight: bold;\n  padding-bottom: 8px;\n}\n.tox .tox-dialog__table tbody tr {\n  border-bottom: 1px solid #cccccc;\n}\n.tox .tox-dialog__table tbody tr:last-child {\n  border-bottom: none;\n}\n.tox .tox-dialog__table td {\n  padding-bottom: 8px;\n  padding-top: 8px;\n}\n.tox .tox-dialog__iframe.tox-dialog__iframe--opaque {\n  background: #fff;\n}\n.tox .tox-dialog__popups {\n  position: absolute;\n  width: 100%;\n  z-index: 1100;\n}\n.tox .tox-dialog__body-iframe {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.tox .tox-dialog__body-iframe .tox-navobj {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) {\n  flex: 1;\n  height: 100%;\n}\n.tox .tox-dialog-dock-fadeout {\n  opacity: 0;\n  visibility: hidden;\n}\n.tox .tox-dialog-dock-fadein {\n  opacity: 1;\n  visibility: visible;\n}\n.tox .tox-dialog-dock-transition {\n  transition: visibility 0s linear 0.3s, opacity 0.3s ease;\n}\n.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein {\n  transition-delay: 0s;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav {\n    margin-right: 0;\n  }\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) {\n    margin-left: 8px;\n  }\n}\n.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *,\n.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-dialog__body {\n  text-align: right;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav {\n    margin-left: 0;\n  }\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) {\n    margin-right: 8px;\n  }\n}\n.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *,\n.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * {\n  margin-right: 8px;\n}\nbody.tox-dialog__disable-scroll {\n  overflow: hidden;\n}\n.tox .tox-dropzone-container {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-dropzone {\n  align-items: center;\n  background: #fff;\n  border: 2px dashed #cccccc;\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  justify-content: center;\n  min-height: 100px;\n  padding: 10px;\n}\n.tox .tox-dropzone p {\n  color: rgba(34, 47, 62, 0.7);\n  margin: 0 0 16px 0;\n}\n.tox .tox-edit-area {\n  display: flex;\n  flex: 1;\n  overflow: hidden;\n  position: relative;\n}\n.tox .tox-edit-area__iframe {\n  background-color: #fff;\n  border: 0;\n  box-sizing: border-box;\n  flex: 1;\n  height: 100%;\n  position: absolute;\n  width: 100%;\n}\n.tox.tox-inline-edit-area {\n  border: 1px dotted #cccccc;\n}\n.tox .tox-editor-container {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  overflow: hidden;\n}\n.tox .tox-editor-header {\n  display: grid;\n  grid-template-columns: 1fr min-content;\n  z-index: 1;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header {\n  background-color: #fff;\n  border-bottom: none;\n  box-shadow: none;\n  padding: 4px 0;\n  transition: box-shadow 0.5s;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header {\n  border-top: 1px solid #cccccc;\n  box-shadow: none;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header {\n  background-color: #fff;\n  box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25);\n  padding: 4px 0;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header {\n  box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25);\n}\n.tox-editor-dock-fadeout {\n  opacity: 0;\n  visibility: hidden;\n}\n.tox-editor-dock-fadein {\n  opacity: 1;\n  visibility: visible;\n}\n.tox-editor-dock-transition {\n  transition: visibility 0s linear 0.25s, opacity 0.25s ease;\n}\n.tox-editor-dock-transition.tox-editor-dock-fadein {\n  transition-delay: 0s;\n}\n.tox .tox-control-wrap {\n  flex: 1;\n  position: relative;\n}\n.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,\n.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,\n.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid {\n  display: none;\n}\n.tox .tox-control-wrap svg {\n  display: block;\n}\n.tox .tox-control-wrap__status-icon-wrap {\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox .tox-control-wrap__status-icon-invalid svg {\n  fill: #c00;\n}\n.tox .tox-control-wrap__status-icon-unknown svg {\n  fill: orange;\n}\n.tox .tox-control-wrap__status-icon-valid svg {\n  fill: green;\n}\n.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,\n.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,\n.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield {\n  padding-right: 32px;\n}\n.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap {\n  right: 4px;\n}\n.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,\n.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,\n.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield {\n  padding-left: 32px;\n}\n.tox[dir=rtl] .tox-control-wrap__status-icon-wrap {\n  left: 4px;\n}\n.tox .tox-autocompleter {\n  max-width: 25em;\n}\n.tox .tox-autocompleter .tox-menu {\n  box-sizing: border-box;\n  max-width: 25em;\n}\n.tox .tox-autocompleter .tox-autocompleter-highlight {\n  font-weight: bold;\n}\n.tox .tox-color-input {\n  display: flex;\n  position: relative;\n  z-index: 1;\n}\n.tox .tox-color-input .tox-textfield {\n  z-index: -1;\n}\n.tox .tox-color-input span {\n  border-color: rgba(34, 47, 62, 0.2);\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  height: 24px;\n  position: absolute;\n  top: 6px;\n  width: 24px;\n}\n.tox .tox-color-input span:hover:not([aria-disabled=true]),\n.tox .tox-color-input span:focus:not([aria-disabled=true]) {\n  border-color: #207ab7;\n  cursor: pointer;\n}\n.tox .tox-color-input span::before {\n  background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%);\n  background-position: 0 0, 0 6px, 6px -6px, -6px 0;\n  background-size: 12px 12px;\n  border: 1px solid #fff;\n  border-radius: 3px;\n  box-sizing: border-box;\n  content: '';\n  height: 24px;\n  left: -1px;\n  position: absolute;\n  top: -1px;\n  width: 24px;\n  z-index: -1;\n}\n.tox .tox-color-input span[aria-disabled=true] {\n  cursor: not-allowed;\n}\n.tox:not([dir=rtl]) .tox-color-input {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox:not([dir=rtl]) .tox-color-input .tox-textfield {\n  padding-left: 36px;\n}\n.tox:not([dir=rtl]) .tox-color-input span {\n  left: 6px;\n}\n.tox[dir=\"rtl\"] .tox-color-input {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox[dir=\"rtl\"] .tox-color-input .tox-textfield {\n  padding-right: 36px;\n}\n.tox[dir=\"rtl\"] .tox-color-input span {\n  right: 6px;\n}\n.tox .tox-label,\n.tox .tox-toolbar-label {\n  color: rgba(34, 47, 62, 0.7);\n  display: block;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  padding: 0 8px 0 0;\n  text-transform: none;\n  white-space: nowrap;\n}\n.tox .tox-toolbar-label {\n  padding: 0 8px;\n}\n.tox[dir=rtl] .tox-label {\n  padding: 0 0 0 8px;\n}\n.tox .tox-form {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.tox .tox-form__group {\n  box-sizing: border-box;\n  margin-bottom: 4px;\n}\n.tox .tox-form-group--maximize {\n  flex: 1;\n}\n.tox .tox-form__group--error {\n  color: #c00;\n}\n.tox .tox-form__group--collection {\n  display: flex;\n}\n.tox .tox-form__grid {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n}\n.tox .tox-form__grid--2col > .tox-form__group {\n  width: calc(50% - (8px / 2));\n}\n.tox .tox-form__grid--3col > .tox-form__group {\n  width: calc(100% / 3 - (8px / 2));\n}\n.tox .tox-form__grid--4col > .tox-form__group {\n  width: calc(25% - (8px / 2));\n}\n.tox .tox-form__controls-h-stack {\n  align-items: center;\n  display: flex;\n}\n.tox .tox-form__group--inline {\n  align-items: center;\n  display: flex;\n}\n.tox .tox-form__group--stretched {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.tox .tox-form__group--stretched .tox-textarea {\n  flex: 1;\n}\n.tox .tox-form__group--stretched .tox-navobj {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-form__group--stretched .tox-navobj :nth-child(2) {\n  flex: 1;\n  height: 100%;\n}\n.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) {\n  margin-right: 4px;\n}\n.tox .tox-lock.tox-locked .tox-lock-icon__unlock,\n.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock {\n  display: none;\n}\n.tox .tox-textfield,\n.tox .tox-toolbar-textfield,\n.tox .tox-listboxfield .tox-listbox--select,\n.tox .tox-textarea {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  background-color: #fff;\n  border-color: #cccccc;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  color: #222f3e;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  line-height: 24px;\n  margin: 0;\n  min-height: 34px;\n  outline: none;\n  padding: 5px 4.75px;\n  resize: none;\n  width: 100%;\n}\n.tox .tox-textfield[disabled],\n.tox .tox-textarea[disabled] {\n  background-color: #f2f2f2;\n  color: rgba(34, 47, 62, 0.85);\n  cursor: not-allowed;\n}\n.tox .tox-textfield:focus,\n.tox .tox-listboxfield .tox-listbox--select:focus,\n.tox .tox-textarea:focus {\n  background-color: #fff;\n  border-color: #207ab7;\n  box-shadow: none;\n  outline: 2px solid rgba(32, 122, 183, 0.25);\n}\n.tox .tox-toolbar-textfield {\n  border-width: 0;\n  margin-bottom: 3px;\n  margin-top: 2px;\n  max-width: 250px;\n}\n.tox .tox-naked-btn {\n  background-color: transparent;\n  border: 0;\n  border-color: transparent;\n  box-shadow: unset;\n  color: #207ab7;\n  cursor: pointer;\n  display: block;\n  margin: 0;\n  padding: 0;\n}\n.tox .tox-naked-btn svg {\n  display: block;\n  fill: #222f3e;\n}\n.tox:not([dir=rtl]) .tox-toolbar-textfield + * {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-toolbar-textfield + * {\n  margin-right: 4px;\n}\n.tox .tox-listboxfield {\n  cursor: pointer;\n  position: relative;\n}\n.tox .tox-listboxfield .tox-listbox--select[disabled] {\n  background-color: #f2f2f2;\n  color: rgba(34, 47, 62, 0.85);\n  cursor: not-allowed;\n}\n.tox .tox-listbox__select-label {\n  cursor: default;\n  flex: 1;\n  margin: 0 4px;\n}\n.tox .tox-listbox__select-chevron {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  width: 16px;\n}\n.tox .tox-listbox__select-chevron svg {\n  fill: #222f3e;\n}\n.tox .tox-listboxfield .tox-listbox--select {\n  align-items: center;\n  display: flex;\n}\n.tox:not([dir=rtl]) .tox-listboxfield svg {\n  right: 8px;\n}\n.tox[dir=rtl] .tox-listboxfield svg {\n  left: 8px;\n}\n.tox .tox-selectfield {\n  cursor: pointer;\n  position: relative;\n}\n.tox .tox-selectfield select {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  background-color: #fff;\n  border-color: #cccccc;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  color: #222f3e;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  line-height: 24px;\n  margin: 0;\n  min-height: 34px;\n  outline: none;\n  padding: 5px 4.75px;\n  resize: none;\n  width: 100%;\n}\n.tox .tox-selectfield select[disabled] {\n  background-color: #f2f2f2;\n  color: rgba(34, 47, 62, 0.85);\n  cursor: not-allowed;\n}\n.tox .tox-selectfield select::-ms-expand {\n  display: none;\n}\n.tox .tox-selectfield select:focus {\n  background-color: #fff;\n  border-color: #207ab7;\n  box-shadow: none;\n  outline: 2px solid rgba(32, 122, 183, 0.25);\n}\n.tox .tox-selectfield svg {\n  pointer-events: none;\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox:not([dir=rtl]) .tox-selectfield select[size=\"0\"],\n.tox:not([dir=rtl]) .tox-selectfield select[size=\"1\"] {\n  padding-right: 24px;\n}\n.tox:not([dir=rtl]) .tox-selectfield svg {\n  right: 8px;\n}\n.tox[dir=rtl] .tox-selectfield select[size=\"0\"],\n.tox[dir=rtl] .tox-selectfield select[size=\"1\"] {\n  padding-left: 24px;\n}\n.tox[dir=rtl] .tox-selectfield svg {\n  left: 8px;\n}\n.tox .tox-textarea {\n  -webkit-appearance: textarea;\n     -moz-appearance: textarea;\n          appearance: textarea;\n  white-space: pre-wrap;\n}\n.tox-fullscreen {\n  border: 0;\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  overscroll-behavior: none;\n  padding: 0;\n  touch-action: pinch-zoom;\n  width: 100%;\n}\n.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {\n  display: none;\n}\n.tox.tox-tinymce.tox-fullscreen,\n.tox-shadowhost.tox-fullscreen {\n  left: 0;\n  position: fixed;\n  top: 0;\n  z-index: 1200;\n}\n.tox.tox-tinymce.tox-fullscreen {\n  background-color: transparent;\n}\n.tox-fullscreen .tox.tox-tinymce-aux,\n.tox-fullscreen ~ .tox.tox-tinymce-aux {\n  z-index: 1201;\n}\n.tox .tox-help__more-link {\n  list-style: none;\n  margin-top: 1em;\n}\n.tox .tox-imagepreview {\n  background-color: #666;\n  height: 380px;\n  overflow: hidden;\n  position: relative;\n  width: 100%;\n}\n.tox .tox-imagepreview.tox-imagepreview__loaded {\n  overflow: auto;\n}\n.tox .tox-imagepreview__container {\n  display: flex;\n  left: 100vw;\n  position: absolute;\n  top: 100vw;\n}\n.tox .tox-imagepreview__image {\n  background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);\n}\n.tox .tox-image-tools .tox-spacer {\n  flex: 1;\n}\n.tox .tox-image-tools .tox-bar {\n  align-items: center;\n  display: flex;\n  height: 60px;\n  justify-content: center;\n}\n.tox .tox-image-tools .tox-imagepreview,\n.tox .tox-image-tools .tox-imagepreview + .tox-bar {\n  margin-top: 8px;\n}\n.tox .tox-image-tools .tox-croprect-block {\n  background: black;\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n  position: absolute;\n  zoom: 1;\n}\n.tox .tox-image-tools .tox-croprect-handle {\n  border: 2px solid white;\n  height: 20px;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 20px;\n}\n.tox .tox-image-tools .tox-croprect-handle-move {\n  border: 0;\n  cursor: move;\n  position: absolute;\n}\n.tox .tox-image-tools .tox-croprect-handle-nw {\n  border-width: 2px 0 0 2px;\n  cursor: nw-resize;\n  left: 100px;\n  margin: -2px 0 0 -2px;\n  top: 100px;\n}\n.tox .tox-image-tools .tox-croprect-handle-ne {\n  border-width: 2px 2px 0 0;\n  cursor: ne-resize;\n  left: 200px;\n  margin: -2px 0 0 -20px;\n  top: 100px;\n}\n.tox .tox-image-tools .tox-croprect-handle-sw {\n  border-width: 0 0 2px 2px;\n  cursor: sw-resize;\n  left: 100px;\n  margin: -20px 2px 0 -2px;\n  top: 200px;\n}\n.tox .tox-image-tools .tox-croprect-handle-se {\n  border-width: 0 2px 2px 0;\n  cursor: se-resize;\n  left: 200px;\n  margin: -20px 0 0 -20px;\n  top: 200px;\n}\n.tox .tox-insert-table-picker {\n  display: flex;\n  flex-wrap: wrap;\n  width: 170px;\n}\n.tox .tox-insert-table-picker > div {\n  border-color: #cccccc;\n  border-style: solid;\n  border-width: 0 1px 1px 0;\n  box-sizing: border-box;\n  height: 17px;\n  width: 17px;\n}\n.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker {\n  margin: 0 -4px;\n}\n.tox .tox-insert-table-picker .tox-insert-table-picker__selected {\n  background-color: rgba(32, 122, 183, 0.5);\n  border-color: rgba(32, 122, 183, 0.5);\n}\n.tox .tox-insert-table-picker__label {\n  color: rgba(34, 47, 62, 0.7);\n  display: block;\n  font-size: 14px;\n  padding: 4px;\n  text-align: center;\n  width: 100%;\n}\n.tox:not([dir=rtl]) {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) {\n  border-right: 0;\n}\n.tox[dir=rtl] {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) {\n  border-right: 0;\n}\n.tox {\n  /* stylelint-disable */\n  /* stylelint-enable */\n}\n.tox .tox-menu {\n  background-color: #fff;\n  border: 1px solid #cccccc;\n  border-radius: 3px;\n  box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1);\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  z-index: 1150;\n}\n.tox .tox-menu.tox-collection.tox-collection--list {\n  padding: 0 0;\n}\n.tox .tox-menu.tox-collection.tox-collection--toolbar {\n  padding: 4px;\n}\n.tox .tox-menu.tox-collection.tox-collection--grid {\n  padding: 4px;\n}\n@media only screen and (min-width: 768px ) {\n  .tox .tox-menu .tox-collection__item-label {\n    overflow-wrap: break-word;\n    word-break: normal;\n  }\n}\n.tox .tox-menu__label h1,\n.tox .tox-menu__label h2,\n.tox .tox-menu__label h3,\n.tox .tox-menu__label h4,\n.tox .tox-menu__label h5,\n.tox .tox-menu__label h6,\n.tox .tox-menu__label p,\n.tox .tox-menu__label blockquote,\n.tox .tox-menu__label code {\n  margin: 0;\n}\n.tox .tox-menubar {\n  background: url(\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E\") left 0 top 0 #fff;\n  background-color: #fff;\n  display: flex;\n  flex: 0 0 auto;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  grid-column: 1 / -1;\n  grid-row: 1;\n  padding: 0 4px 0 4px;\n}\n.tox .tox-promotion + .tox-menubar {\n  grid-column: 1;\n}\n.tox .tox-promotion {\n  background: url(\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E\") left 0 top 0 #fff;\n  background-color: #fff;\n  grid-column: 2;\n  grid-row: 1;\n  padding-inline-end: 8px;\n  padding-inline-start: 4px;\n  padding-top: 5px;\n}\n.tox .tox-promotion-link {\n  align-items: unsafe center;\n  background-color: #E8F1F8;\n  border-radius: 5px;\n  color: #086BE6;\n  cursor: pointer;\n  display: flex;\n  font-size: 14px;\n  height: 26.6px;\n  padding: 4px 8px;\n  white-space: nowrap;\n}\n.tox .tox-promotion-link:hover {\n  background-color: #B4D7FF;\n}\n.tox .tox-promotion-link:focus {\n  background-color: #D9EDF7;\n}\n/* Deprecated. Remove in next major release */\n.tox .tox-mbtn {\n  align-items: center;\n  background: transparent;\n  border: 0;\n  border-radius: 3px;\n  box-shadow: none;\n  color: #222f3e;\n  display: flex;\n  flex: 0 0 auto;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  height: 34px;\n  justify-content: center;\n  margin: 2px 0 3px 0;\n  outline: none;\n  overflow: hidden;\n  padding: 0 4px;\n  text-transform: none;\n  width: auto;\n}\n.tox .tox-mbtn[disabled] {\n  background-color: transparent;\n  border: 0;\n  box-shadow: none;\n  color: rgba(34, 47, 62, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-mbtn:focus:not(:disabled) {\n  background: #dee0e2;\n  border: 0;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-mbtn--active {\n  background: #c8cbcf;\n  border: 0;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) {\n  background: #dee0e2;\n  border: 0;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-mbtn__select-label {\n  cursor: default;\n  font-weight: normal;\n  margin: 0 4px;\n}\n.tox .tox-mbtn[disabled] .tox-mbtn__select-label {\n  cursor: not-allowed;\n}\n.tox .tox-mbtn__select-chevron {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  width: 16px;\n  display: none;\n}\n.tox .tox-notification {\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  display: grid;\n  font-size: 14px;\n  font-weight: normal;\n  grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);\n  margin-top: 4px;\n  opacity: 0;\n  padding: 4px;\n  transition: transform 100ms ease-in, opacity 150ms ease-in;\n}\n.tox .tox-notification p {\n  font-size: 14px;\n  font-weight: normal;\n}\n.tox .tox-notification a {\n  cursor: pointer;\n  text-decoration: underline;\n}\n.tox .tox-notification--in {\n  opacity: 1;\n}\n.tox .tox-notification--success {\n  background-color: #e4eeda;\n  border-color: #d7e6c8;\n  color: #222f3e;\n}\n.tox .tox-notification--success p {\n  color: #222f3e;\n}\n.tox .tox-notification--success a {\n  color: #517342;\n}\n.tox .tox-notification--success svg {\n  fill: #222f3e;\n}\n.tox .tox-notification--error {\n  background-color: #f5cccc;\n  border-color: #f0b3b3;\n  color: #222f3e;\n}\n.tox .tox-notification--error p {\n  color: #222f3e;\n}\n.tox .tox-notification--error a {\n  color: #77181f;\n}\n.tox .tox-notification--error svg {\n  fill: #222f3e;\n}\n.tox .tox-notification--warn,\n.tox .tox-notification--warning {\n  background-color: #fff5cc;\n  border-color: #fff0b3;\n  color: #222f3e;\n}\n.tox .tox-notification--warn p,\n.tox .tox-notification--warning p {\n  color: #222f3e;\n}\n.tox .tox-notification--warn a,\n.tox .tox-notification--warning a {\n  color: #7a6e25;\n}\n.tox .tox-notification--warn svg,\n.tox .tox-notification--warning svg {\n  fill: #222f3e;\n}\n.tox .tox-notification--info {\n  background-color: #d6e7fb;\n  border-color: #c1dbf9;\n  color: #222f3e;\n}\n.tox .tox-notification--info p {\n  color: #222f3e;\n}\n.tox .tox-notification--info a {\n  color: #2a64a6;\n}\n.tox .tox-notification--info svg {\n  fill: #222f3e;\n}\n.tox .tox-notification__body {\n  align-self: center;\n  color: #222f3e;\n  font-size: 14px;\n  grid-column-end: 3;\n  grid-column-start: 2;\n  grid-row-end: 2;\n  grid-row-start: 1;\n  text-align: center;\n  white-space: normal;\n  word-break: break-all;\n  word-break: break-word;\n}\n.tox .tox-notification__body > * {\n  margin: 0;\n}\n.tox .tox-notification__body > * + * {\n  margin-top: 1rem;\n}\n.tox .tox-notification__icon {\n  align-self: center;\n  grid-column-end: 2;\n  grid-column-start: 1;\n  grid-row-end: 2;\n  grid-row-start: 1;\n  justify-self: end;\n}\n.tox .tox-notification__icon svg {\n  display: block;\n}\n.tox .tox-notification__dismiss {\n  align-self: start;\n  grid-column-end: 4;\n  grid-column-start: 3;\n  grid-row-end: 2;\n  grid-row-start: 1;\n  justify-self: end;\n}\n.tox .tox-notification .tox-progress-bar {\n  grid-column-end: 4;\n  grid-column-start: 1;\n  grid-row-end: 3;\n  grid-row-start: 2;\n  justify-self: center;\n}\n.tox .tox-pop {\n  display: inline-block;\n  position: relative;\n}\n.tox .tox-pop--resizing {\n  transition: width 0.1s ease;\n}\n.tox .tox-pop--resizing .tox-toolbar,\n.tox .tox-pop--resizing .tox-toolbar__group {\n  flex-wrap: nowrap;\n}\n.tox .tox-pop--transition {\n  transition: 0.15s ease;\n  transition-property: left, right, top, bottom;\n}\n.tox .tox-pop--transition::before,\n.tox .tox-pop--transition::after {\n  transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s;\n}\n.tox .tox-pop__dialog {\n  background-color: #fff;\n  border: 1px solid #cccccc;\n  border-radius: 3px;\n  box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n  min-width: 0;\n  overflow: hidden;\n}\n.tox .tox-pop__dialog > *:not(.tox-toolbar) {\n  margin: 4px 4px 4px 8px;\n}\n.tox .tox-pop__dialog .tox-toolbar {\n  background-color: transparent;\n  margin-bottom: -1px;\n}\n.tox .tox-pop::before,\n.tox .tox-pop::after {\n  border-style: solid;\n  content: '';\n  display: block;\n  height: 0;\n  opacity: 1;\n  position: absolute;\n  width: 0;\n}\n.tox .tox-pop.tox-pop--inset::before,\n.tox .tox-pop.tox-pop--inset::after {\n  opacity: 0;\n  transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease;\n}\n.tox .tox-pop.tox-pop--bottom::before,\n.tox .tox-pop.tox-pop--bottom::after {\n  left: 50%;\n  top: 100%;\n}\n.tox .tox-pop.tox-pop--bottom::after {\n  border-color: #fff transparent transparent transparent;\n  border-width: 8px;\n  margin-left: -8px;\n  margin-top: -1px;\n}\n.tox .tox-pop.tox-pop--bottom::before {\n  border-color: #cccccc transparent transparent transparent;\n  border-width: 9px;\n  margin-left: -9px;\n}\n.tox .tox-pop.tox-pop--top::before,\n.tox .tox-pop.tox-pop--top::after {\n  left: 50%;\n  top: 0;\n  transform: translateY(-100%);\n}\n.tox .tox-pop.tox-pop--top::after {\n  border-color: transparent transparent #fff transparent;\n  border-width: 8px;\n  margin-left: -8px;\n  margin-top: 1px;\n}\n.tox .tox-pop.tox-pop--top::before {\n  border-color: transparent transparent #cccccc transparent;\n  border-width: 9px;\n  margin-left: -9px;\n}\n.tox .tox-pop.tox-pop--left::before,\n.tox .tox-pop.tox-pop--left::after {\n  left: 0;\n  top: calc(50% - 1px);\n  transform: translateY(-50%);\n}\n.tox .tox-pop.tox-pop--left::after {\n  border-color: transparent #fff transparent transparent;\n  border-width: 8px;\n  margin-left: -15px;\n}\n.tox .tox-pop.tox-pop--left::before {\n  border-color: transparent #cccccc transparent transparent;\n  border-width: 10px;\n  margin-left: -19px;\n}\n.tox .tox-pop.tox-pop--right::before,\n.tox .tox-pop.tox-pop--right::after {\n  left: 100%;\n  top: calc(50% + 1px);\n  transform: translateY(-50%);\n}\n.tox .tox-pop.tox-pop--right::after {\n  border-color: transparent transparent transparent #fff;\n  border-width: 8px;\n  margin-left: -1px;\n}\n.tox .tox-pop.tox-pop--right::before {\n  border-color: transparent transparent transparent #cccccc;\n  border-width: 10px;\n  margin-left: -1px;\n}\n.tox .tox-pop.tox-pop--align-left::before,\n.tox .tox-pop.tox-pop--align-left::after {\n  left: 20px;\n}\n.tox .tox-pop.tox-pop--align-right::before,\n.tox .tox-pop.tox-pop--align-right::after {\n  left: calc(100% - 20px);\n}\n.tox .tox-sidebar-wrap {\n  display: flex;\n  flex-direction: row;\n  flex-grow: 1;\n  min-height: 0;\n}\n.tox .tox-sidebar {\n  background-color: #fff;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-end;\n}\n.tox .tox-sidebar__slider {\n  display: flex;\n  overflow: hidden;\n}\n.tox .tox-sidebar__pane-container {\n  display: flex;\n}\n.tox .tox-sidebar__pane {\n  display: flex;\n}\n.tox .tox-sidebar--sliding-closed {\n  opacity: 0;\n}\n.tox .tox-sidebar--sliding-open {\n  opacity: 1;\n}\n.tox .tox-sidebar--sliding-growing,\n.tox .tox-sidebar--sliding-shrinking {\n  transition: width 0.5s ease, opacity 0.5s ease;\n}\n.tox .tox-selector {\n  background-color: #4099ff;\n  border-color: #4099ff;\n  border-style: solid;\n  border-width: 1px;\n  box-sizing: border-box;\n  display: inline-block;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n}\n.tox.tox-platform-touch .tox-selector {\n  height: 12px;\n  width: 12px;\n}\n.tox .tox-slider {\n  align-items: center;\n  display: flex;\n  flex: 1;\n  height: 24px;\n  justify-content: center;\n  position: relative;\n}\n.tox .tox-slider__rail {\n  background-color: transparent;\n  border: 1px solid #cccccc;\n  border-radius: 3px;\n  height: 10px;\n  min-width: 120px;\n  width: 100%;\n}\n.tox .tox-slider__handle {\n  background-color: #207ab7;\n  border: 2px solid #185d8c;\n  border-radius: 3px;\n  box-shadow: none;\n  height: 24px;\n  left: 50%;\n  position: absolute;\n  top: 50%;\n  transform: translateX(-50%) translateY(-50%);\n  width: 14px;\n}\n.tox .tox-form__controls-h-stack > .tox-slider:not(:first-of-type) {\n  margin-inline-start: 8px;\n}\n.tox .tox-form__controls-h-stack > .tox-form__group + .tox-slider {\n  margin-inline-start: 32px;\n}\n.tox .tox-form__controls-h-stack > .tox-slider + .tox-form__group {\n  margin-inline-start: 32px;\n}\n.tox .tox-source-code {\n  overflow: auto;\n}\n.tox .tox-spinner {\n  display: flex;\n}\n.tox .tox-spinner > div {\n  animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;\n  background-color: rgba(34, 47, 62, 0.7);\n  border-radius: 100%;\n  height: 8px;\n  width: 8px;\n}\n.tox .tox-spinner > div:nth-child(1) {\n  animation-delay: -0.32s;\n}\n.tox .tox-spinner > div:nth-child(2) {\n  animation-delay: -0.16s;\n}\n@keyframes tam-bouncing-dots {\n  0%,\n  80%,\n  100% {\n    transform: scale(0);\n  }\n  40% {\n    transform: scale(1);\n  }\n}\n.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-spinner > div:not(:first-child) {\n  margin-right: 4px;\n}\n.tox .tox-statusbar {\n  align-items: center;\n  background-color: #fff;\n  border-top: 1px solid #cccccc;\n  color: rgba(34, 47, 62, 0.7);\n  display: flex;\n  flex: 0 0 auto;\n  font-size: 12px;\n  font-weight: normal;\n  height: 18px;\n  overflow: hidden;\n  padding: 0 8px;\n  position: relative;\n  text-transform: uppercase;\n}\n.tox .tox-statusbar__text-container {\n  display: flex;\n  flex: 1 1 auto;\n  justify-content: flex-end;\n  overflow: hidden;\n}\n.tox .tox-statusbar__path {\n  display: flex;\n  flex: 1 1 auto;\n  margin-right: auto;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.tox .tox-statusbar__path > * {\n  display: inline;\n  white-space: nowrap;\n}\n.tox .tox-statusbar__wordcount {\n  flex: 0 0 auto;\n  margin-left: 1ch;\n}\n.tox .tox-statusbar a,\n.tox .tox-statusbar__path-item,\n.tox .tox-statusbar__wordcount {\n  color: rgba(34, 47, 62, 0.7);\n  text-decoration: none;\n}\n.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) {\n  color: #222f3e;\n  cursor: pointer;\n}\n.tox .tox-statusbar__branding svg {\n  fill: rgba(34, 47, 62, 0.8);\n  height: 1.14em;\n  vertical-align: -0.28em;\n  width: 3.6em;\n}\n.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg,\n.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg {\n  fill: #222f3e;\n}\n.tox .tox-statusbar__resize-handle {\n  align-items: flex-end;\n  align-self: stretch;\n  cursor: nwse-resize;\n  display: flex;\n  flex: 0 0 auto;\n  justify-content: flex-end;\n  margin-left: auto;\n  margin-right: -8px;\n  padding-bottom: 3px;\n  padding-left: 1ch;\n  padding-right: 3px;\n}\n.tox .tox-statusbar__resize-handle svg {\n  display: block;\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-statusbar__resize-handle:focus svg {\n  background-color: #dee0e2;\n  border-radius: 1px 1px -4px 1px;\n  box-shadow: 0 0 0 2px #dee0e2;\n}\n.tox:not([dir=rtl]) .tox-statusbar__path > * {\n  margin-right: 4px;\n}\n.tox:not([dir=rtl]) .tox-statusbar__branding {\n  margin-left: 2ch;\n}\n.tox[dir=rtl] .tox-statusbar {\n  flex-direction: row-reverse;\n}\n.tox[dir=rtl] .tox-statusbar__path > * {\n  margin-left: 4px;\n}\n.tox .tox-throbber {\n  z-index: 1299;\n}\n.tox .tox-throbber__busy-spinner {\n  align-items: center;\n  background-color: rgba(255, 255, 255, 0.6);\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n}\n.tox .tox-tbtn {\n  align-items: center;\n  background: transparent;\n  border: 0;\n  border-radius: 3px;\n  box-shadow: none;\n  color: #222f3e;\n  display: flex;\n  flex: 0 0 auto;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  height: 34px;\n  justify-content: center;\n  margin: 3px 0 2px 0;\n  outline: none;\n  overflow: hidden;\n  padding: 0;\n  text-transform: none;\n  width: 34px;\n}\n.tox .tox-tbtn svg {\n  display: block;\n  fill: #222f3e;\n}\n.tox .tox-tbtn.tox-tbtn-more {\n  padding-left: 5px;\n  padding-right: 5px;\n  width: inherit;\n}\n.tox .tox-tbtn:focus {\n  background: #dee0e2;\n  border: 0;\n  box-shadow: none;\n}\n.tox .tox-tbtn:hover {\n  background: #dee0e2;\n  border: 0;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-tbtn:hover svg {\n  fill: #222f3e;\n}\n.tox .tox-tbtn:active {\n  background: #c8cbcf;\n  border: 0;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-tbtn:active svg {\n  fill: #222f3e;\n}\n.tox .tox-tbtn--disabled,\n.tox .tox-tbtn--disabled:hover,\n.tox .tox-tbtn:disabled,\n.tox .tox-tbtn:disabled:hover {\n  background: transparent;\n  border: 0;\n  box-shadow: none;\n  color: rgba(34, 47, 62, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-tbtn--disabled svg,\n.tox .tox-tbtn--disabled:hover svg,\n.tox .tox-tbtn:disabled svg,\n.tox .tox-tbtn:disabled:hover svg {\n  /* stylelint-disable-line no-descending-specificity */\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-tbtn--enabled,\n.tox .tox-tbtn--enabled:hover {\n  background: #c8cbcf;\n  border: 0;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-tbtn--enabled > *,\n.tox .tox-tbtn--enabled:hover > * {\n  transform: none;\n}\n.tox .tox-tbtn--enabled svg,\n.tox .tox-tbtn--enabled:hover svg {\n  /* stylelint-disable-line no-descending-specificity */\n  fill: #222f3e;\n}\n.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) {\n  color: #222f3e;\n}\n.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg {\n  fill: #222f3e;\n}\n.tox .tox-tbtn:active > * {\n  transform: none;\n}\n.tox .tox-tbtn--md {\n  height: 51px;\n  width: 51px;\n}\n.tox .tox-tbtn--lg {\n  flex-direction: column;\n  height: 68px;\n  width: 68px;\n}\n.tox .tox-tbtn--return {\n  align-self: stretch;\n  height: unset;\n  width: 16px;\n}\n.tox .tox-tbtn--labeled {\n  padding: 0 4px;\n  width: unset;\n}\n.tox .tox-tbtn__vlabel {\n  display: block;\n  font-size: 10px;\n  font-weight: normal;\n  letter-spacing: -0.025em;\n  margin-bottom: 4px;\n  white-space: nowrap;\n}\n.tox .tox-tbtn--select {\n  margin: 3px 0 2px 0;\n  padding: 0 4px;\n  width: auto;\n}\n.tox .tox-tbtn__select-label {\n  cursor: default;\n  font-weight: normal;\n  margin: 0 4px;\n}\n.tox .tox-tbtn__select-chevron {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  width: 16px;\n}\n.tox .tox-tbtn__select-chevron svg {\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-tbtn--bespoke {\n  background: transparent;\n}\n.tox .tox-tbtn--bespoke + .tox-tbtn--bespoke {\n  margin-inline-start: 0;\n}\n.tox .tox-tbtn--bespoke .tox-tbtn__select-label {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  width: 7em;\n}\n.tox .tox-split-button {\n  border: 0;\n  border-radius: 3px;\n  box-sizing: border-box;\n  display: flex;\n  margin: 3px 0 2px 0;\n  overflow: hidden;\n}\n.tox .tox-split-button:hover {\n  box-shadow: 0 0 0 1px #dee0e2 inset;\n}\n.tox .tox-split-button:focus {\n  background: #dee0e2;\n  box-shadow: none;\n  color: #222f3e;\n}\n.tox .tox-split-button > * {\n  border-radius: 0;\n}\n.tox .tox-split-button__chevron {\n  width: 16px;\n}\n.tox .tox-split-button__chevron svg {\n  fill: rgba(34, 47, 62, 0.5);\n}\n.tox .tox-split-button .tox-tbtn {\n  margin: 0;\n}\n.tox .tox-split-button.tox-tbtn--disabled:hover,\n.tox .tox-split-button.tox-tbtn--disabled:focus,\n.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,\n.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus {\n  background: transparent;\n  box-shadow: none;\n  color: rgba(34, 47, 62, 0.5);\n}\n.tox.tox-platform-touch .tox-split-button .tox-tbtn--select {\n  padding: 0 0px;\n}\n.tox.tox-platform-touch .tox-split-button .tox-tbtn:not(.tox-tbtn--select):first-child {\n  width: 30px;\n}\n.tox.tox-platform-touch .tox-split-button__chevron {\n  width: 20px;\n}\n.tox .tox-toolbar-overlord {\n  background-color: #fff;\n}\n.tox .tox-toolbar,\n.tox .tox-toolbar__primary,\n.tox .tox-toolbar__overflow {\n  background-color: #fff;\n  background-image: repeating-linear-gradient(#cccccc 0px 1px, transparent 1px 39px);\n  background-position: center top 39px;\n  background-repeat: no-repeat;\n  background-size: calc(100% - 4px * 2) calc(100% - 39px);\n  display: flex;\n  flex: 0 0 auto;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  padding: 0 0px;\n  transform: perspective(1px);\n}\n.tox .tox-toolbar-overlord > .tox-toolbar,\n.tox .tox-toolbar-overlord > .tox-toolbar__primary,\n.tox .tox-toolbar-overlord > .tox-toolbar__overflow {\n  background-position: center top 0px;\n  background-size: calc(100% - 4px * 2) calc(100% - 0px);\n}\n.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed {\n  height: 0;\n  opacity: 0;\n  padding-bottom: 0;\n  padding-top: 0;\n  visibility: hidden;\n}\n.tox .tox-toolbar__overflow--growing {\n  transition: height 0.3s ease, opacity 0.2s linear 0.1s;\n}\n.tox .tox-toolbar__overflow--shrinking {\n  transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s;\n}\n.tox .tox-toolbar-overlord,\n.tox .tox-anchorbar {\n  grid-column: 1 / -1;\n}\n.tox .tox-menubar + .tox-toolbar,\n.tox .tox-menubar + .tox-toolbar-overlord {\n  border-top: 1px solid #cccccc;\n  margin-top: -1px;\n  padding-bottom: 0px;\n  padding-top: 0px;\n}\n.tox .tox-toolbar--scrolling {\n  flex-wrap: nowrap;\n  overflow-x: auto;\n}\n.tox .tox-pop .tox-toolbar {\n  border-width: 0;\n}\n.tox .tox-toolbar--no-divider {\n  background-image: none;\n}\n.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,\n.tox .tox-toolbar-overlord .tox-toolbar__primary {\n  background-position: center top 39px;\n}\n.tox .tox-editor-header > .tox-toolbar--scrolling,\n.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child {\n  background-image: none;\n}\n.tox.tox-tinymce-aux .tox-toolbar__overflow {\n  background-color: #fff;\n  background-position: center top 43px;\n  background-size: calc(100% - 8px * 2) calc(100% - 51px);\n  border: none;\n  border-radius: 3px;\n  box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15);\n  padding: 4px 0;\n}\n.tox-pop .tox-pop__dialog {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox-pop .tox-pop__dialog .tox-toolbar {\n  background-position: center top 43px;\n  background-size: calc(100% - 4px * 2) calc(100% - 51px);\n  padding: 4px 0;\n}\n.tox .tox-toolbar__group {\n  align-items: center;\n  display: flex;\n  flex-wrap: wrap;\n  margin: 0 0;\n  padding: 0 4px 0 4px;\n}\n.tox .tox-toolbar__group--pull-right {\n  margin-left: auto;\n}\n.tox .tox-toolbar--scrolling .tox-toolbar__group {\n  flex-shrink: 0;\n  flex-wrap: nowrap;\n}\n.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) {\n  border-right: 1px solid #cccccc;\n}\n.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) {\n  border-left: 1px solid #cccccc;\n}\n.tox .tox-tooltip {\n  display: inline-block;\n  padding: 8px;\n  position: relative;\n}\n.tox .tox-tooltip__body {\n  background-color: #222f3e;\n  border-radius: 3px;\n  box-shadow: 0 2px 4px rgba(34, 47, 62, 0.3);\n  color: rgba(255, 255, 255, 0.75);\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  padding: 4px 8px;\n  text-transform: none;\n}\n.tox .tox-tooltip__arrow {\n  position: absolute;\n}\n.tox .tox-tooltip--down .tox-tooltip__arrow {\n  border-left: 8px solid transparent;\n  border-right: 8px solid transparent;\n  border-top: 8px solid #222f3e;\n  bottom: 0;\n  left: 50%;\n  position: absolute;\n  transform: translateX(-50%);\n}\n.tox .tox-tooltip--up .tox-tooltip__arrow {\n  border-bottom: 8px solid #222f3e;\n  border-left: 8px solid transparent;\n  border-right: 8px solid transparent;\n  left: 50%;\n  position: absolute;\n  top: 0;\n  transform: translateX(-50%);\n}\n.tox .tox-tooltip--right .tox-tooltip__arrow {\n  border-bottom: 8px solid transparent;\n  border-left: 8px solid #222f3e;\n  border-top: 8px solid transparent;\n  position: absolute;\n  right: 0;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox .tox-tooltip--left .tox-tooltip__arrow {\n  border-bottom: 8px solid transparent;\n  border-right: 8px solid #222f3e;\n  border-top: 8px solid transparent;\n  left: 0;\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox .tox-well {\n  border: 1px solid #cccccc;\n  border-radius: 3px;\n  padding: 8px;\n  width: 100%;\n}\n.tox .tox-well > *:first-child {\n  margin-top: 0;\n}\n.tox .tox-well > *:last-child {\n  margin-bottom: 0;\n}\n.tox .tox-well > *:only-child {\n  margin: 0;\n}\n.tox .tox-custom-editor {\n  border: 1px solid #cccccc;\n  border-radius: 3px;\n  display: flex;\n  flex: 1;\n  position: relative;\n}\n/* stylelint-disable */\n.tox {\n  /* stylelint-enable */\n}\n.tox .tox-dialog-loading::before {\n  background-color: rgba(0, 0, 0, 0.5);\n  content: \"\";\n  height: 100%;\n  position: absolute;\n  width: 100%;\n  z-index: 1000;\n}\n.tox .tox-tab {\n  cursor: pointer;\n}\n.tox .tox-dialog__content-js {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-dialog__body-content .tox-collection {\n  display: flex;\n  flex: 1;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header {\n  background-color: none;\n  padding: 0;\n}\n.tox.tox-tinymce--toolbar-bottom .tox-editor-header,\n.tox.tox-tinymce-inline .tox-editor-header {\n  margin-bottom: -1px;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header {\n  border-top: none;\n  box-shadow: none;\n}\n.tox.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header {\n  background-color: transparent;\n  box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25);\n  padding: 0;\n}\n.tox.tox.tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header {\n  box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25);\n}\n.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker {\n  margin: -4px 0;\n}\n.tox .tox-menu.tox-collection.tox-collection--list {\n  padding: 0;\n}\n.tox .tox-pop {\n  box-shadow: none;\n}\n.tox .tox-tbtn,\n.tox .tox-tbtn--select,\n.tox .tox-split-button {\n  margin: 2px 0 3px 0;\n}\n.tox .tox-toolbar,\n.tox .tox-toolbar__primary,\n.tox .tox-toolbar__overflow {\n  background: url(\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E\") left 0 top 0px #fff !important;\n}\n.tox .tox-menubar + .tox-toolbar-overlord {\n  border-top: none;\n}\n.tox .tox-menubar + .tox-toolbar,\n.tox .tox-menubar + .tox-toolbar-overlord .tox-toolbar__primary {\n  border-top: 1px solid #cccccc;\n  margin-top: -1px;\n}\n.tox.tox-tinymce-aux .tox-toolbar__overflow {\n  border: 1px solid #cccccc;\n  padding: 0;\n}\n.tox .tox-pop .tox-pop__dialog .tox-toolbar {\n  padding: 0;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar {\n  border-top: 1px solid #cccccc;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,\n.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child {\n  border-top: 1px solid #cccccc;\n}\n.tox .tox-toolbar__group {\n  padding: 0 4px 0 4px;\n}\n.tox .tox-collection__item {\n  border-radius: 0;\n  cursor: pointer;\n}\n.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) {\n  color: rgba(34, 47, 62, 0.7);\n  text-decoration: underline;\n}\n.tox .tox-statusbar__branding svg {\n  vertical-align: -0.25em;\n}\n.tox:not([dir=rtl]) .tox-statusbar__branding {\n  margin-left: 1ch;\n}\n.tox .tox-statusbar__resize-handle {\n  padding-bottom: 0;\n  padding-right: 0;\n}\n.tox .tox-button::before {\n  display: none;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/tinymce-5/skin.shadowdom.css",
    "content": "body.tox-dialog__disable-scroll {\n  overflow: hidden;\n}\n.tox-fullscreen {\n  border: 0;\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  overscroll-behavior: none;\n  padding: 0;\n  touch-action: pinch-zoom;\n  width: 100%;\n}\n.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {\n  display: none;\n}\n.tox.tox-tinymce.tox-fullscreen,\n.tox-shadowhost.tox-fullscreen {\n  left: 0;\n  position: fixed;\n  top: 0;\n  z-index: 1200;\n}\n.tox.tox-tinymce.tox-fullscreen {\n  background-color: transparent;\n}\n.tox-fullscreen .tox.tox-tinymce-aux,\n.tox-fullscreen ~ .tox.tox-tinymce-aux {\n  z-index: 1201;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/tinymce-5-dark/content.css",
    "content": ".mce-content-body .mce-item-anchor {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n}\n.mce-content-body .mce-item-anchor:empty {\n  cursor: default;\n  display: inline-block;\n  height: 12px !important;\n  padding: 0 2px;\n  -webkit-user-modify: read-only;\n  -moz-user-modify: read-only;\n  -webkit-user-select: all;\n  -moz-user-select: all;\n  user-select: all;\n  width: 8px !important;\n}\n.mce-content-body .mce-item-anchor:not(:empty) {\n  background-position-x: 2px;\n  display: inline-block;\n  padding-left: 12px;\n}\n.mce-content-body .mce-item-anchor[data-mce-selected] {\n  outline-offset: 1px;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"]:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #ffe89d;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"][data-mce-annotation-active=\"true\"]:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment:not([data-mce-selected]) {\n  background-color: #ffe89d;\n  outline: none;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"]:not([data-mce-selected=\"inline-boundary\"]) {\n  background-color: #fed635;\n}\n.tox-checklist > li:not(.tox-checklist--hidden) {\n  list-style: none;\n  margin: 0.25em 0;\n}\n.tox-checklist > li:not(.tox-checklist--hidden)::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n  cursor: pointer;\n  height: 1em;\n  margin-left: -1.5em;\n  margin-top: 0.125em;\n  position: absolute;\n  width: 1em;\n}\n.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n}\n[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {\n  margin-left: 0;\n  margin-right: -1.5em;\n}\n/* stylelint-disable */\n/* http://prismjs.com/ */\n/**\n * Dracula Theme originally by Zeno Rocha [@zenorocha]\n * https://draculatheme.com/\n *\n * Ported for PrismJS by Albert Vallverdu [@byverdu]\n */\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n  color: #f8f8f2;\n  background: none;\n  text-shadow: 0 1px rgba(0, 0, 0, 0.3);\n  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n  text-align: left;\n  white-space: pre;\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: normal;\n  line-height: 1.5;\n  -moz-tab-size: 4;\n  tab-size: 4;\n  -webkit-hyphens: none;\n  hyphens: none;\n}\n/* Code blocks */\npre[class*=\"language-\"] {\n  padding: 1em;\n  margin: 0.5em 0;\n  overflow: auto;\n  border-radius: 0.3em;\n}\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n  background: #282a36;\n}\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n  padding: 0.1em;\n  border-radius: 0.3em;\n  white-space: normal;\n}\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n  color: #6272a4;\n}\n.token.punctuation {\n  color: #f8f8f2;\n}\n.namespace {\n  opacity: 0.7;\n}\n.token.property,\n.token.tag,\n.token.constant,\n.token.symbol,\n.token.deleted {\n  color: #ff79c6;\n}\n.token.boolean,\n.token.number {\n  color: #bd93f9;\n}\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n  color: #50fa7b;\n}\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string,\n.token.variable {\n  color: #f8f8f2;\n}\n.token.atrule,\n.token.attr-value,\n.token.function,\n.token.class-name {\n  color: #f1fa8c;\n}\n.token.keyword {\n  color: #8be9fd;\n}\n.token.regex,\n.token.important {\n  color: #ffb86c;\n}\n.token.important,\n.token.bold {\n  font-weight: bold;\n}\n.token.italic {\n  font-style: italic;\n}\n.token.entity {\n  cursor: help;\n}\n/* stylelint-enable */\n.mce-content-body {\n  overflow-wrap: break-word;\n  word-wrap: break-word;\n}\n.mce-content-body .mce-visual-caret {\n  background-color: black;\n  background-color: currentColor;\n  position: absolute;\n}\n.mce-content-body .mce-visual-caret-hidden {\n  display: none;\n}\n.mce-content-body *[data-mce-caret] {\n  left: -1000px;\n  margin: 0;\n  padding: 0;\n  position: absolute;\n  right: auto;\n  top: 0;\n}\n.mce-content-body .mce-offscreen-selection {\n  left: -2000000px;\n  max-width: 1000000px;\n  position: absolute;\n}\n.mce-content-body *[contentEditable=false] {\n  cursor: default;\n}\n.mce-content-body *[contentEditable=true] {\n  cursor: text;\n}\n.tox-cursor-format-painter {\n  cursor: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\"), default;\n}\ndiv.mce-footnotes hr {\n  margin-inline-end: auto;\n  margin-inline-start: 0;\n  width: 25%;\n}\ndiv.mce-footnotes li > a.mce-footnotes-backlink {\n  text-decoration: none;\n}\n@media print {\n  sup.mce-footnote a {\n    color: black;\n    text-decoration: none;\n  }\n  div.mce-footnotes {\n    break-inside: avoid;\n    width: 100%;\n  }\n  div.mce-footnotes li > a.mce-footnotes-backlink {\n    display: none;\n  }\n}\n.mce-content-body figure.align-left {\n  float: left;\n}\n.mce-content-body figure.align-right {\n  float: right;\n}\n.mce-content-body figure.image.align-center {\n  display: table;\n  margin-left: auto;\n  margin-right: auto;\n}\n.mce-preview-object {\n  border: 1px solid gray;\n  display: inline-block;\n  line-height: 0;\n  margin: 0 2px 0 2px;\n  position: relative;\n}\n.mce-preview-object .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-preview-object[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.mce-content-body .mce-mergetag:hover {\n  background-color: rgba(0, 108, 231, 0.3);\n}\n.mce-content-body .mce-mergetag-affix {\n  background-color: rgba(0, 108, 231, 0.3);\n  color: #006ce7;\n}\n.mce-object {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n  border: 1px dashed #aaa;\n}\n.mce-pagebreak {\n  border: 1px dashed #aaa;\n  cursor: default;\n  display: block;\n  height: 5px;\n  margin-top: 15px;\n  page-break-before: always;\n  width: 100%;\n}\n@media print {\n  .mce-pagebreak {\n    border: 0;\n  }\n}\n.tiny-pageembed .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tiny-pageembed[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.tiny-pageembed {\n  display: inline-block;\n  position: relative;\n}\n.tiny-pageembed--21by9,\n.tiny-pageembed--16by9,\n.tiny-pageembed--4by3,\n.tiny-pageembed--1by1 {\n  display: block;\n  overflow: hidden;\n  padding: 0;\n  position: relative;\n  width: 100%;\n}\n.tiny-pageembed--21by9 {\n  padding-top: 42.857143%;\n}\n.tiny-pageembed--16by9 {\n  padding-top: 56.25%;\n}\n.tiny-pageembed--4by3 {\n  padding-top: 75%;\n}\n.tiny-pageembed--1by1 {\n  padding-top: 100%;\n}\n.tiny-pageembed--21by9 iframe,\n.tiny-pageembed--16by9 iframe,\n.tiny-pageembed--4by3 iframe,\n.tiny-pageembed--1by1 iframe {\n  border: 0;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-content-body[data-mce-placeholder] {\n  position: relative;\n}\n.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  color: rgba(34, 47, 62, 0.7);\n  content: attr(data-mce-placeholder);\n  position: absolute;\n}\n.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  left: 1px;\n}\n.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {\n  right: 1px;\n}\n.mce-content-body div.mce-resizehandle {\n  background-color: #4099ff;\n  border-color: #4099ff;\n  border-style: solid;\n  border-width: 1px;\n  box-sizing: border-box;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n  z-index: 1298;\n}\n.mce-content-body div.mce-resizehandle:hover {\n  background-color: #4099ff;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(1) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(2) {\n  cursor: nesw-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(3) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(4) {\n  cursor: nesw-resize;\n}\n.mce-content-body .mce-resize-backdrop {\n  z-index: 10000;\n}\n.mce-content-body .mce-clonedresizable {\n  cursor: default;\n  opacity: 0.5;\n  outline: 1px dashed black;\n  position: absolute;\n  z-index: 10001;\n}\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {\n  border: 0;\n}\n.mce-content-body .mce-resize-helper {\n  background: #555;\n  background: rgba(0, 0, 0, 0.75);\n  border: 1px;\n  border-radius: 3px;\n  color: white;\n  display: none;\n  font-family: sans-serif;\n  font-size: 12px;\n  line-height: 14px;\n  margin: 5px 10px;\n  padding: 5px;\n  position: absolute;\n  white-space: nowrap;\n  z-index: 10002;\n}\n.tox-rtc-user-selection {\n  position: relative;\n}\n.tox-rtc-user-cursor {\n  bottom: 0;\n  cursor: default;\n  position: absolute;\n  top: 0;\n  width: 2px;\n}\n.tox-rtc-user-cursor::before {\n  background-color: inherit;\n  border-radius: 50%;\n  content: '';\n  display: block;\n  height: 8px;\n  position: absolute;\n  right: -3px;\n  top: -3px;\n  width: 8px;\n}\n.tox-rtc-user-cursor:hover::after {\n  background-color: inherit;\n  border-radius: 100px;\n  box-sizing: border-box;\n  color: #fff;\n  content: attr(data-user);\n  display: block;\n  font-size: 12px;\n  font-weight: bold;\n  left: -5px;\n  min-height: 8px;\n  min-width: 8px;\n  padding: 0 12px;\n  position: absolute;\n  top: -11px;\n  white-space: nowrap;\n  z-index: 1000;\n}\n.tox-rtc-user-selection--1 .tox-rtc-user-cursor {\n  background-color: #2dc26b;\n}\n.tox-rtc-user-selection--2 .tox-rtc-user-cursor {\n  background-color: #e03e2d;\n}\n.tox-rtc-user-selection--3 .tox-rtc-user-cursor {\n  background-color: #f1c40f;\n}\n.tox-rtc-user-selection--4 .tox-rtc-user-cursor {\n  background-color: #3598db;\n}\n.tox-rtc-user-selection--5 .tox-rtc-user-cursor {\n  background-color: #b96ad9;\n}\n.tox-rtc-user-selection--6 .tox-rtc-user-cursor {\n  background-color: #e67e23;\n}\n.tox-rtc-user-selection--7 .tox-rtc-user-cursor {\n  background-color: #aaa69d;\n}\n.tox-rtc-user-selection--8 .tox-rtc-user-cursor {\n  background-color: #f368e0;\n}\n.tox-rtc-remote-image {\n  background: #eaeaea url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\") no-repeat center center;\n  border: 1px solid #ccc;\n  min-height: 240px;\n  min-width: 320px;\n}\n.mce-match-marker {\n  background: #aaa;\n  color: #fff;\n}\n.mce-match-marker-selected {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::-moz-selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-content-body img[data-mce-selected],\n.mce-content-body video[data-mce-selected],\n.mce-content-body audio[data-mce-selected],\n.mce-content-body object[data-mce-selected],\n.mce-content-body embed[data-mce-selected],\n.mce-content-body table[data-mce-selected] {\n  outline: 3px solid #4099ff;\n}\n.mce-content-body hr[data-mce-selected] {\n  outline: 3px solid #4099ff;\n  outline-offset: 1px;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {\n  outline: 3px solid #4099ff;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {\n  outline: 3px solid #4099ff;\n}\n.mce-content-body *[contentEditable=false][data-mce-selected] {\n  cursor: not-allowed;\n  outline: 3px solid #4099ff;\n}\n.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,\n.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {\n  outline: none;\n}\n.mce-content-body *[data-mce-selected=\"inline-boundary\"] {\n  background-color: #4099ff;\n}\n.mce-content-body .mce-edit-focus {\n  outline: 3px solid #4099ff;\n}\n.mce-content-body td[data-mce-selected],\n.mce-content-body th[data-mce-selected] {\n  position: relative;\n}\n.mce-content-body td[data-mce-selected]::-moz-selection,\n.mce-content-body th[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected]::selection,\n.mce-content-body th[data-mce-selected]::selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected] *,\n.mce-content-body th[data-mce-selected] * {\n  outline: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.mce-content-body td[data-mce-selected]::after,\n.mce-content-body th[data-mce-selected]::after {\n  background-color: rgba(180, 215, 255, 0.7);\n  border: 1px solid transparent;\n  bottom: -1px;\n  content: '';\n  left: -1px;\n  mix-blend-mode: lighten;\n  position: absolute;\n  right: -1px;\n  top: -1px;\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .mce-content-body td[data-mce-selected]::after,\n  .mce-content-body th[data-mce-selected]::after {\n    border-color: rgba(0, 84, 180, 0.7);\n  }\n}\n.mce-content-body img[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body img[data-mce-selected]::selection {\n  background: none;\n}\n.ephox-snooker-resizer-bar {\n  background-color: #4099ff;\n  opacity: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n.ephox-snooker-resizer-cols {\n  cursor: col-resize;\n}\n.ephox-snooker-resizer-rows {\n  cursor: row-resize;\n}\n.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {\n  opacity: 1;\n}\n.mce-spellchecker-word {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n  height: 2rem;\n}\n.mce-spellchecker-grammar {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n}\n.mce-toc {\n  border: 1px solid gray;\n}\n.mce-toc h2 {\n  margin: 4px;\n}\n.mce-toc li {\n  list-style-type: none;\n}\ntable[style*=\"border-width: 0px\"],\n.mce-item-table:not([border]),\n.mce-item-table[border=\"0\"],\ntable[style*=\"border-width: 0px\"] td,\n.mce-item-table:not([border]) td,\n.mce-item-table[border=\"0\"] td,\ntable[style*=\"border-width: 0px\"] th,\n.mce-item-table:not([border]) th,\n.mce-item-table[border=\"0\"] th,\ntable[style*=\"border-width: 0px\"] caption,\n.mce-item-table:not([border]) caption,\n.mce-item-table[border=\"0\"] caption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks p,\n.mce-visualblocks h1,\n.mce-visualblocks h2,\n.mce-visualblocks h3,\n.mce-visualblocks h4,\n.mce-visualblocks h5,\n.mce-visualblocks h6,\n.mce-visualblocks div:not([data-mce-bogus]),\n.mce-visualblocks section,\n.mce-visualblocks article,\n.mce-visualblocks blockquote,\n.mce-visualblocks address,\n.mce-visualblocks pre,\n.mce-visualblocks figure,\n.mce-visualblocks figcaption,\n.mce-visualblocks hgroup,\n.mce-visualblocks aside,\n.mce-visualblocks ul,\n.mce-visualblocks ol,\n.mce-visualblocks dl {\n  background-repeat: no-repeat;\n  border: 1px dashed #bbb;\n  margin-left: 3px;\n  padding-top: 10px;\n}\n.mce-visualblocks p {\n  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);\n}\n.mce-visualblocks h1 {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);\n}\n.mce-visualblocks h2 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);\n}\n.mce-visualblocks h3 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);\n}\n.mce-visualblocks h4 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);\n}\n.mce-visualblocks h5 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);\n}\n.mce-visualblocks h6 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);\n}\n.mce-visualblocks div:not([data-mce-bogus]) {\n  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);\n}\n.mce-visualblocks section {\n  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);\n}\n.mce-visualblocks article {\n  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);\n}\n.mce-visualblocks blockquote {\n  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);\n}\n.mce-visualblocks address {\n  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);\n}\n.mce-visualblocks pre {\n  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);\n}\n.mce-visualblocks figure {\n  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);\n}\n.mce-visualblocks figcaption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks hgroup {\n  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);\n}\n.mce-visualblocks aside {\n  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);\n}\n.mce-visualblocks ul {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);\n}\n.mce-visualblocks ol {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);\n}\n.mce-visualblocks dl {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);\n}\n.mce-visualblocks:not([dir=rtl]) p,\n.mce-visualblocks:not([dir=rtl]) h1,\n.mce-visualblocks:not([dir=rtl]) h2,\n.mce-visualblocks:not([dir=rtl]) h3,\n.mce-visualblocks:not([dir=rtl]) h4,\n.mce-visualblocks:not([dir=rtl]) h5,\n.mce-visualblocks:not([dir=rtl]) h6,\n.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),\n.mce-visualblocks:not([dir=rtl]) section,\n.mce-visualblocks:not([dir=rtl]) article,\n.mce-visualblocks:not([dir=rtl]) blockquote,\n.mce-visualblocks:not([dir=rtl]) address,\n.mce-visualblocks:not([dir=rtl]) pre,\n.mce-visualblocks:not([dir=rtl]) figure,\n.mce-visualblocks:not([dir=rtl]) figcaption,\n.mce-visualblocks:not([dir=rtl]) hgroup,\n.mce-visualblocks:not([dir=rtl]) aside,\n.mce-visualblocks:not([dir=rtl]) ul,\n.mce-visualblocks:not([dir=rtl]) ol,\n.mce-visualblocks:not([dir=rtl]) dl {\n  margin-left: 3px;\n}\n.mce-visualblocks[dir=rtl] p,\n.mce-visualblocks[dir=rtl] h1,\n.mce-visualblocks[dir=rtl] h2,\n.mce-visualblocks[dir=rtl] h3,\n.mce-visualblocks[dir=rtl] h4,\n.mce-visualblocks[dir=rtl] h5,\n.mce-visualblocks[dir=rtl] h6,\n.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),\n.mce-visualblocks[dir=rtl] section,\n.mce-visualblocks[dir=rtl] article,\n.mce-visualblocks[dir=rtl] blockquote,\n.mce-visualblocks[dir=rtl] address,\n.mce-visualblocks[dir=rtl] pre,\n.mce-visualblocks[dir=rtl] figure,\n.mce-visualblocks[dir=rtl] figcaption,\n.mce-visualblocks[dir=rtl] hgroup,\n.mce-visualblocks[dir=rtl] aside,\n.mce-visualblocks[dir=rtl] ul,\n.mce-visualblocks[dir=rtl] ol,\n.mce-visualblocks[dir=rtl] dl {\n  background-position-x: right;\n  margin-right: 3px;\n}\n.mce-nbsp,\n.mce-shy {\n  background: #aaa;\n}\n.mce-shy::after {\n  content: '-';\n}\nbody {\n  font-family: sans-serif;\n}\ntable {\n  border-collapse: collapse;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/tinymce-5-dark/content.inline.css",
    "content": ".mce-content-body .mce-item-anchor {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n}\n.mce-content-body .mce-item-anchor:empty {\n  cursor: default;\n  display: inline-block;\n  height: 12px !important;\n  padding: 0 2px;\n  -webkit-user-modify: read-only;\n  -moz-user-modify: read-only;\n  -webkit-user-select: all;\n  -moz-user-select: all;\n  user-select: all;\n  width: 8px !important;\n}\n.mce-content-body .mce-item-anchor:not(:empty) {\n  background-position-x: 2px;\n  display: inline-block;\n  padding-left: 12px;\n}\n.mce-content-body .mce-item-anchor[data-mce-selected] {\n  outline-offset: 1px;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"]:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #ffe89d;\n}\n.tox-comments-visible .tox-comment[contenteditable=\"false\"][data-mce-annotation-active=\"true\"]:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] img:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > audio:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] > video:not([data-mce-selected]),\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"] span.mce-preview-object:not([data-mce-selected]) {\n  outline: 3px solid #fed635;\n}\n.tox-comments-visible span.tox-comment:not([data-mce-selected]) {\n  background-color: #ffe89d;\n  outline: none;\n}\n.tox-comments-visible span.tox-comment[data-mce-annotation-active=\"true\"]:not([data-mce-selected=\"inline-boundary\"]) {\n  background-color: #fed635;\n}\n.tox-checklist > li:not(.tox-checklist--hidden) {\n  list-style: none;\n  margin: 0.25em 0;\n}\n.tox-checklist > li:not(.tox-checklist--hidden)::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n  cursor: pointer;\n  height: 1em;\n  margin-left: -1.5em;\n  margin-top: 0.125em;\n  position: absolute;\n  width: 1em;\n}\n.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {\n  content: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A\");\n}\n[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {\n  margin-left: 0;\n  margin-right: -1.5em;\n}\n/* stylelint-disable */\n/* http://prismjs.com/ */\n/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n  color: black;\n  background: none;\n  text-shadow: 0 1px white;\n  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n  font-size: 1em;\n  text-align: left;\n  white-space: pre;\n  word-spacing: normal;\n  word-break: normal;\n  word-wrap: normal;\n  line-height: 1.5;\n  -moz-tab-size: 4;\n  tab-size: 4;\n  -webkit-hyphens: none;\n  hyphens: none;\n}\npre[class*=\"language-\"]::-moz-selection,\npre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection,\ncode[class*=\"language-\"] ::-moz-selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\npre[class*=\"language-\"]::selection,\npre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection,\ncode[class*=\"language-\"] ::selection {\n  text-shadow: none;\n  background: #b3d4fc;\n}\n@media print {\n  code[class*=\"language-\"],\n  pre[class*=\"language-\"] {\n    text-shadow: none;\n  }\n}\n/* Code blocks */\npre[class*=\"language-\"] {\n  padding: 1em;\n  margin: 0.5em 0;\n  overflow: auto;\n}\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n  background: #f5f2f0;\n}\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n  padding: 0.1em;\n  border-radius: 0.3em;\n  white-space: normal;\n}\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n  color: slategray;\n}\n.token.punctuation {\n  color: #999;\n}\n.token.namespace {\n  opacity: 0.7;\n}\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n  color: #905;\n}\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n  color: #690;\n}\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n  color: #9a6e3a;\n  /* This background color was intended by the author of this theme. */\n  background: hsla(0, 0%, 100%, 0.5);\n}\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n  color: #07a;\n}\n.token.function,\n.token.class-name {\n  color: #DD4A68;\n}\n.token.regex,\n.token.important,\n.token.variable {\n  color: #e90;\n}\n.token.important,\n.token.bold {\n  font-weight: bold;\n}\n.token.italic {\n  font-style: italic;\n}\n.token.entity {\n  cursor: help;\n}\n/* stylelint-enable */\n.mce-content-body {\n  overflow-wrap: break-word;\n  word-wrap: break-word;\n}\n.mce-content-body .mce-visual-caret {\n  background-color: black;\n  background-color: currentColor;\n  position: absolute;\n}\n.mce-content-body .mce-visual-caret-hidden {\n  display: none;\n}\n.mce-content-body *[data-mce-caret] {\n  left: -1000px;\n  margin: 0;\n  padding: 0;\n  position: absolute;\n  right: auto;\n  top: 0;\n}\n.mce-content-body .mce-offscreen-selection {\n  left: -2000000px;\n  max-width: 1000000px;\n  position: absolute;\n}\n.mce-content-body *[contentEditable=false] {\n  cursor: default;\n}\n.mce-content-body *[contentEditable=true] {\n  cursor: text;\n}\n.tox-cursor-format-painter {\n  cursor: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A\"), default;\n}\ndiv.mce-footnotes hr {\n  margin-inline-end: auto;\n  margin-inline-start: 0;\n  width: 25%;\n}\ndiv.mce-footnotes li > a.mce-footnotes-backlink {\n  text-decoration: none;\n}\n@media print {\n  sup.mce-footnote a {\n    color: black;\n    text-decoration: none;\n  }\n  div.mce-footnotes {\n    break-inside: avoid;\n    width: 100%;\n  }\n  div.mce-footnotes li > a.mce-footnotes-backlink {\n    display: none;\n  }\n}\n.mce-content-body figure.align-left {\n  float: left;\n}\n.mce-content-body figure.align-right {\n  float: right;\n}\n.mce-content-body figure.image.align-center {\n  display: table;\n  margin-left: auto;\n  margin-right: auto;\n}\n.mce-preview-object {\n  border: 1px solid gray;\n  display: inline-block;\n  line-height: 0;\n  margin: 0 2px 0 2px;\n  position: relative;\n}\n.mce-preview-object .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-preview-object[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.mce-content-body .mce-mergetag:hover {\n  background-color: rgba(0, 108, 231, 0.1);\n}\n.mce-content-body .mce-mergetag-affix {\n  background-color: rgba(0, 108, 231, 0.1);\n  color: #006ce7;\n}\n.mce-object {\n  background: transparent url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A\") no-repeat center;\n  border: 1px dashed #aaa;\n}\n.mce-pagebreak {\n  border: 1px dashed #aaa;\n  cursor: default;\n  display: block;\n  height: 5px;\n  margin-top: 15px;\n  page-break-before: always;\n  width: 100%;\n}\n@media print {\n  .mce-pagebreak {\n    border: 0;\n  }\n}\n.tiny-pageembed .mce-shim {\n  background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tiny-pageembed[data-mce-selected=\"2\"] .mce-shim {\n  display: none;\n}\n.tiny-pageembed {\n  display: inline-block;\n  position: relative;\n}\n.tiny-pageembed--21by9,\n.tiny-pageembed--16by9,\n.tiny-pageembed--4by3,\n.tiny-pageembed--1by1 {\n  display: block;\n  overflow: hidden;\n  padding: 0;\n  position: relative;\n  width: 100%;\n}\n.tiny-pageembed--21by9 {\n  padding-top: 42.857143%;\n}\n.tiny-pageembed--16by9 {\n  padding-top: 56.25%;\n}\n.tiny-pageembed--4by3 {\n  padding-top: 75%;\n}\n.tiny-pageembed--1by1 {\n  padding-top: 100%;\n}\n.tiny-pageembed--21by9 iframe,\n.tiny-pageembed--16by9 iframe,\n.tiny-pageembed--4by3 iframe,\n.tiny-pageembed--1by1 iframe {\n  border: 0;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.mce-content-body[data-mce-placeholder] {\n  position: relative;\n}\n.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  color: rgba(34, 47, 62, 0.7);\n  content: attr(data-mce-placeholder);\n  position: absolute;\n}\n.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {\n  left: 1px;\n}\n.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {\n  right: 1px;\n}\n.mce-content-body div.mce-resizehandle {\n  background-color: #4099ff;\n  border-color: #4099ff;\n  border-style: solid;\n  border-width: 1px;\n  box-sizing: border-box;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n  z-index: 1298;\n}\n.mce-content-body div.mce-resizehandle:hover {\n  background-color: #4099ff;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(1) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(2) {\n  cursor: nesw-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(3) {\n  cursor: nwse-resize;\n}\n.mce-content-body div.mce-resizehandle:nth-of-type(4) {\n  cursor: nesw-resize;\n}\n.mce-content-body .mce-resize-backdrop {\n  z-index: 10000;\n}\n.mce-content-body .mce-clonedresizable {\n  cursor: default;\n  opacity: 0.5;\n  outline: 1px dashed black;\n  position: absolute;\n  z-index: 10001;\n}\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,\n.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {\n  border: 0;\n}\n.mce-content-body .mce-resize-helper {\n  background: #555;\n  background: rgba(0, 0, 0, 0.75);\n  border: 1px;\n  border-radius: 3px;\n  color: white;\n  display: none;\n  font-family: sans-serif;\n  font-size: 12px;\n  line-height: 14px;\n  margin: 5px 10px;\n  padding: 5px;\n  position: absolute;\n  white-space: nowrap;\n  z-index: 10002;\n}\n.tox-rtc-user-selection {\n  position: relative;\n}\n.tox-rtc-user-cursor {\n  bottom: 0;\n  cursor: default;\n  position: absolute;\n  top: 0;\n  width: 2px;\n}\n.tox-rtc-user-cursor::before {\n  background-color: inherit;\n  border-radius: 50%;\n  content: '';\n  display: block;\n  height: 8px;\n  position: absolute;\n  right: -3px;\n  top: -3px;\n  width: 8px;\n}\n.tox-rtc-user-cursor:hover::after {\n  background-color: inherit;\n  border-radius: 100px;\n  box-sizing: border-box;\n  color: #fff;\n  content: attr(data-user);\n  display: block;\n  font-size: 12px;\n  font-weight: bold;\n  left: -5px;\n  min-height: 8px;\n  min-width: 8px;\n  padding: 0 12px;\n  position: absolute;\n  top: -11px;\n  white-space: nowrap;\n  z-index: 1000;\n}\n.tox-rtc-user-selection--1 .tox-rtc-user-cursor {\n  background-color: #2dc26b;\n}\n.tox-rtc-user-selection--2 .tox-rtc-user-cursor {\n  background-color: #e03e2d;\n}\n.tox-rtc-user-selection--3 .tox-rtc-user-cursor {\n  background-color: #f1c40f;\n}\n.tox-rtc-user-selection--4 .tox-rtc-user-cursor {\n  background-color: #3598db;\n}\n.tox-rtc-user-selection--5 .tox-rtc-user-cursor {\n  background-color: #b96ad9;\n}\n.tox-rtc-user-selection--6 .tox-rtc-user-cursor {\n  background-color: #e67e23;\n}\n.tox-rtc-user-selection--7 .tox-rtc-user-cursor {\n  background-color: #aaa69d;\n}\n.tox-rtc-user-selection--8 .tox-rtc-user-cursor {\n  background-color: #f368e0;\n}\n.tox-rtc-remote-image {\n  background: #eaeaea url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A\") no-repeat center center;\n  border: 1px solid #ccc;\n  min-height: 240px;\n  min-width: 320px;\n}\n.mce-match-marker {\n  background: #aaa;\n  color: #fff;\n}\n.mce-match-marker-selected {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::-moz-selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-match-marker-selected::selection {\n  background: #39f;\n  color: #fff;\n}\n.mce-content-body img[data-mce-selected],\n.mce-content-body video[data-mce-selected],\n.mce-content-body audio[data-mce-selected],\n.mce-content-body object[data-mce-selected],\n.mce-content-body embed[data-mce-selected],\n.mce-content-body table[data-mce-selected] {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body hr[data-mce-selected] {\n  outline: 3px solid #b4d7ff;\n  outline-offset: 1px;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body *[contentEditable=false][data-mce-selected] {\n  cursor: not-allowed;\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,\n.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {\n  outline: none;\n}\n.mce-content-body *[data-mce-selected=\"inline-boundary\"] {\n  background-color: #b4d7ff;\n}\n.mce-content-body .mce-edit-focus {\n  outline: 3px solid #b4d7ff;\n}\n.mce-content-body td[data-mce-selected],\n.mce-content-body th[data-mce-selected] {\n  position: relative;\n}\n.mce-content-body td[data-mce-selected]::-moz-selection,\n.mce-content-body th[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected]::selection,\n.mce-content-body th[data-mce-selected]::selection {\n  background: none;\n}\n.mce-content-body td[data-mce-selected] *,\n.mce-content-body th[data-mce-selected] * {\n  outline: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.mce-content-body td[data-mce-selected]::after,\n.mce-content-body th[data-mce-selected]::after {\n  background-color: rgba(180, 215, 255, 0.7);\n  border: 1px solid rgba(180, 215, 255, 0.7);\n  bottom: -1px;\n  content: '';\n  left: -1px;\n  mix-blend-mode: multiply;\n  position: absolute;\n  right: -1px;\n  top: -1px;\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .mce-content-body td[data-mce-selected]::after,\n  .mce-content-body th[data-mce-selected]::after {\n    border-color: rgba(0, 84, 180, 0.7);\n  }\n}\n.mce-content-body img[data-mce-selected]::-moz-selection {\n  background: none;\n}\n.mce-content-body img[data-mce-selected]::selection {\n  background: none;\n}\n.ephox-snooker-resizer-bar {\n  background-color: #b4d7ff;\n  opacity: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n.ephox-snooker-resizer-cols {\n  cursor: col-resize;\n}\n.ephox-snooker-resizer-rows {\n  cursor: row-resize;\n}\n.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {\n  opacity: 1;\n}\n.mce-spellchecker-word {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n  height: 2rem;\n}\n.mce-spellchecker-grammar {\n  background-image: url(\"data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A\");\n  background-position: 0 calc(100% + 1px);\n  background-repeat: repeat-x;\n  background-size: auto 6px;\n  cursor: default;\n}\n.mce-toc {\n  border: 1px solid gray;\n}\n.mce-toc h2 {\n  margin: 4px;\n}\n.mce-toc li {\n  list-style-type: none;\n}\ntable[style*=\"border-width: 0px\"],\n.mce-item-table:not([border]),\n.mce-item-table[border=\"0\"],\ntable[style*=\"border-width: 0px\"] td,\n.mce-item-table:not([border]) td,\n.mce-item-table[border=\"0\"] td,\ntable[style*=\"border-width: 0px\"] th,\n.mce-item-table:not([border]) th,\n.mce-item-table[border=\"0\"] th,\ntable[style*=\"border-width: 0px\"] caption,\n.mce-item-table:not([border]) caption,\n.mce-item-table[border=\"0\"] caption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks p,\n.mce-visualblocks h1,\n.mce-visualblocks h2,\n.mce-visualblocks h3,\n.mce-visualblocks h4,\n.mce-visualblocks h5,\n.mce-visualblocks h6,\n.mce-visualblocks div:not([data-mce-bogus]),\n.mce-visualblocks section,\n.mce-visualblocks article,\n.mce-visualblocks blockquote,\n.mce-visualblocks address,\n.mce-visualblocks pre,\n.mce-visualblocks figure,\n.mce-visualblocks figcaption,\n.mce-visualblocks hgroup,\n.mce-visualblocks aside,\n.mce-visualblocks ul,\n.mce-visualblocks ol,\n.mce-visualblocks dl {\n  background-repeat: no-repeat;\n  border: 1px dashed #bbb;\n  margin-left: 3px;\n  padding-top: 10px;\n}\n.mce-visualblocks p {\n  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);\n}\n.mce-visualblocks h1 {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);\n}\n.mce-visualblocks h2 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);\n}\n.mce-visualblocks h3 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);\n}\n.mce-visualblocks h4 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);\n}\n.mce-visualblocks h5 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);\n}\n.mce-visualblocks h6 {\n  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);\n}\n.mce-visualblocks div:not([data-mce-bogus]) {\n  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);\n}\n.mce-visualblocks section {\n  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);\n}\n.mce-visualblocks article {\n  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);\n}\n.mce-visualblocks blockquote {\n  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);\n}\n.mce-visualblocks address {\n  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);\n}\n.mce-visualblocks pre {\n  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);\n}\n.mce-visualblocks figure {\n  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);\n}\n.mce-visualblocks figcaption {\n  border: 1px dashed #bbb;\n}\n.mce-visualblocks hgroup {\n  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);\n}\n.mce-visualblocks aside {\n  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);\n}\n.mce-visualblocks ul {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);\n}\n.mce-visualblocks ol {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);\n}\n.mce-visualblocks dl {\n  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);\n}\n.mce-visualblocks:not([dir=rtl]) p,\n.mce-visualblocks:not([dir=rtl]) h1,\n.mce-visualblocks:not([dir=rtl]) h2,\n.mce-visualblocks:not([dir=rtl]) h3,\n.mce-visualblocks:not([dir=rtl]) h4,\n.mce-visualblocks:not([dir=rtl]) h5,\n.mce-visualblocks:not([dir=rtl]) h6,\n.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),\n.mce-visualblocks:not([dir=rtl]) section,\n.mce-visualblocks:not([dir=rtl]) article,\n.mce-visualblocks:not([dir=rtl]) blockquote,\n.mce-visualblocks:not([dir=rtl]) address,\n.mce-visualblocks:not([dir=rtl]) pre,\n.mce-visualblocks:not([dir=rtl]) figure,\n.mce-visualblocks:not([dir=rtl]) figcaption,\n.mce-visualblocks:not([dir=rtl]) hgroup,\n.mce-visualblocks:not([dir=rtl]) aside,\n.mce-visualblocks:not([dir=rtl]) ul,\n.mce-visualblocks:not([dir=rtl]) ol,\n.mce-visualblocks:not([dir=rtl]) dl {\n  margin-left: 3px;\n}\n.mce-visualblocks[dir=rtl] p,\n.mce-visualblocks[dir=rtl] h1,\n.mce-visualblocks[dir=rtl] h2,\n.mce-visualblocks[dir=rtl] h3,\n.mce-visualblocks[dir=rtl] h4,\n.mce-visualblocks[dir=rtl] h5,\n.mce-visualblocks[dir=rtl] h6,\n.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),\n.mce-visualblocks[dir=rtl] section,\n.mce-visualblocks[dir=rtl] article,\n.mce-visualblocks[dir=rtl] blockquote,\n.mce-visualblocks[dir=rtl] address,\n.mce-visualblocks[dir=rtl] pre,\n.mce-visualblocks[dir=rtl] figure,\n.mce-visualblocks[dir=rtl] figcaption,\n.mce-visualblocks[dir=rtl] hgroup,\n.mce-visualblocks[dir=rtl] aside,\n.mce-visualblocks[dir=rtl] ul,\n.mce-visualblocks[dir=rtl] ol,\n.mce-visualblocks[dir=rtl] dl {\n  background-position-x: right;\n  margin-right: 3px;\n}\n.mce-nbsp,\n.mce-shy {\n  background: #aaa;\n}\n.mce-shy::after {\n  content: '-';\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/tinymce-5-dark/skin.css",
    "content": ".tox {\n  box-shadow: none;\n  box-sizing: content-box;\n  color: #2A3746;\n  cursor: auto;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: normal;\n  -webkit-tap-highlight-color: transparent;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  vertical-align: initial;\n  white-space: normal;\n}\n.tox *:not(svg):not(rect) {\n  box-sizing: inherit;\n  color: inherit;\n  cursor: inherit;\n  direction: inherit;\n  font-family: inherit;\n  font-size: inherit;\n  font-style: inherit;\n  font-weight: inherit;\n  line-height: inherit;\n  -webkit-tap-highlight-color: inherit;\n  text-align: inherit;\n  text-decoration: inherit;\n  text-shadow: inherit;\n  text-transform: inherit;\n  vertical-align: inherit;\n  white-space: inherit;\n}\n.tox *:not(svg):not(rect) {\n  /* stylelint-disable-line no-duplicate-selectors */\n  background: transparent;\n  border: 0;\n  box-shadow: none;\n  float: none;\n  height: auto;\n  margin: 0;\n  max-width: none;\n  outline: 0;\n  padding: 0;\n  position: static;\n  width: auto;\n}\n.tox:not([dir=rtl]) {\n  direction: ltr;\n  text-align: left;\n}\n.tox[dir=rtl] {\n  direction: rtl;\n  text-align: right;\n}\n.tox-tinymce {\n  border: 1px solid #000000;\n  border-radius: 0;\n  box-shadow: none;\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: column;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  overflow: hidden;\n  position: relative;\n  visibility: inherit !important;\n}\n.tox.tox-tinymce-inline {\n  border: none;\n  box-shadow: none;\n  overflow: initial;\n}\n.tox.tox-tinymce-inline .tox-editor-container {\n  overflow: initial;\n}\n.tox.tox-tinymce-inline .tox-editor-header {\n  background-color: #222f3e;\n  border: 1px solid #000000;\n  border-radius: 0;\n  box-shadow: none;\n  overflow: hidden;\n}\n.tox-tinymce-aux {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  z-index: 1300;\n}\n.tox-tinymce *:focus,\n.tox-tinymce-aux *:focus {\n  outline: none;\n}\nbutton::-moz-focus-inner {\n  border: 0;\n}\n.tox[dir=rtl] .tox-icon--flip svg {\n  transform: rotateY(180deg);\n}\n.tox .accessibility-issue__header {\n  align-items: center;\n  display: flex;\n  margin-bottom: 4px;\n}\n.tox .accessibility-issue__description {\n  align-items: stretch;\n  border: 1px solid #000000;\n  border-radius: 3px;\n  display: flex;\n  justify-content: space-between;\n}\n.tox .accessibility-issue__description > div {\n  padding-bottom: 4px;\n}\n.tox .accessibility-issue__description > div > div {\n  align-items: center;\n  display: flex;\n  margin-bottom: 4px;\n}\n.tox .accessibility-issue__description > *:last-child:not(:only-child) {\n  border-color: #000000;\n  border-style: solid;\n}\n.tox .accessibility-issue__repair {\n  margin-top: 16px;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description {\n  background-color: rgba(32, 122, 183, 0.5);\n  border-color: #207ab7;\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description > *:last-child {\n  border-color: #207ab7;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg {\n  fill: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description {\n  background-color: rgba(255, 165, 0, 0.5);\n  border-color: rgba(255, 165, 0, 0.8);\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description > *:last-child {\n  border-color: rgba(255, 165, 0, 0.8);\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg {\n  fill: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description {\n  background-color: rgba(204, 0, 0, 0.5);\n  border-color: rgba(204, 0, 0, 0.8);\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description > *:last-child {\n  border-color: rgba(204, 0, 0, 0.8);\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg {\n  fill: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description {\n  background-color: rgba(120, 171, 70, 0.5);\n  border-color: rgba(120, 171, 70, 0.8);\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child {\n  border-color: rgba(120, 171, 70, 0.8);\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg {\n  fill: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon {\n  color: #fff;\n}\n.tox .tox-dialog__body-content .accessibility-issue__header h1,\n.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 {\n  margin-top: 0;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button {\n  margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {\n  margin-left: auto;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description {\n  padding: 4px 4px 4px 8px;\n}\n.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description > *:last-child {\n  border-left-width: 1px;\n  padding-left: 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button {\n  margin-right: 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {\n  margin-right: auto;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description {\n  padding: 4px 8px 4px 4px;\n}\n.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description > *:last-child {\n  border-right-width: 1px;\n  padding-right: 4px;\n}\n.tox .tox-anchorbar {\n  display: flex;\n  flex: 0 0 auto;\n}\n.tox .tox-bar {\n  display: flex;\n  flex: 0 0 auto;\n}\n.tox .tox-button {\n  background-color: #207ab7;\n  background-image: none;\n  background-position: 0 0;\n  background-repeat: repeat;\n  border-color: #207ab7;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  color: #fff;\n  cursor: pointer;\n  display: inline-block;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  line-height: 24px;\n  margin: 0;\n  outline: none;\n  padding: 4px 16px;\n  position: relative;\n  text-align: center;\n  text-decoration: none;\n  text-transform: none;\n  white-space: nowrap;\n}\n.tox .tox-button::before {\n  border-radius: 3px;\n  bottom: -1px;\n  box-shadow: inset 0 0 0 2px #fff, 0 0 0 1px #207ab7, 0 0 0 3px rgba(32, 122, 183, 0.25);\n  content: '';\n  left: -1px;\n  opacity: 0;\n  pointer-events: none;\n  position: absolute;\n  right: -1px;\n  top: -1px;\n}\n.tox .tox-button[disabled] {\n  background-color: #207ab7;\n  background-image: none;\n  border-color: #207ab7;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-button:focus:not(:disabled) {\n  background-color: #1c6ca1;\n  background-image: none;\n  border-color: #1c6ca1;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button:focus-visible:not(:disabled)::before {\n  opacity: 1;\n}\n.tox .tox-button:hover:not(:disabled) {\n  background-color: #1c6ca1;\n  background-image: none;\n  border-color: #1c6ca1;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button:active:not(:disabled) {\n  background-color: #185d8c;\n  background-image: none;\n  border-color: #185d8c;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--secondary {\n  background-color: #3d546f;\n  background-image: none;\n  background-position: 0 0;\n  background-repeat: repeat;\n  border-color: #3d546f;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  color: #fff;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  outline: none;\n  padding: 4px 16px;\n  text-decoration: none;\n  text-transform: none;\n}\n.tox .tox-button--secondary[disabled] {\n  background-color: #3d546f;\n  background-image: none;\n  border-color: #3d546f;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-button--secondary:focus:not(:disabled) {\n  background-color: #34485f;\n  background-image: none;\n  border-color: #34485f;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--secondary:hover:not(:disabled) {\n  background-color: #34485f;\n  background-image: none;\n  border-color: #34485f;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--secondary:active:not(:disabled) {\n  background-color: #2b3b4e;\n  background-image: none;\n  border-color: #2b3b4e;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--icon,\n.tox .tox-button.tox-button--icon,\n.tox .tox-button.tox-button--secondary.tox-button--icon {\n  padding: 4px;\n}\n.tox .tox-button--icon .tox-icon svg,\n.tox .tox-button.tox-button--icon .tox-icon svg,\n.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg {\n  display: block;\n  fill: currentColor;\n}\n.tox .tox-button-link {\n  background: 0;\n  border: none;\n  box-sizing: border-box;\n  cursor: pointer;\n  display: inline-block;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  font-weight: normal;\n  line-height: 1.3;\n  margin: 0;\n  padding: 0;\n  white-space: nowrap;\n}\n.tox .tox-button-link--sm {\n  font-size: 14px;\n}\n.tox .tox-button--naked {\n  background-color: transparent;\n  border-color: transparent;\n  box-shadow: unset;\n  color: #fff;\n}\n.tox .tox-button--naked[disabled] {\n  background-color: #3d546f;\n  border-color: #3d546f;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-button--naked:hover:not(:disabled) {\n  background-color: #34485f;\n  border-color: #34485f;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--naked:focus:not(:disabled) {\n  background-color: #34485f;\n  border-color: #34485f;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--naked:active:not(:disabled) {\n  background-color: #2b3b4e;\n  border-color: #2b3b4e;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-button--naked .tox-icon svg {\n  fill: currentColor;\n}\n.tox .tox-button--naked.tox-button--icon:hover:not(:disabled) {\n  color: #fff;\n}\n.tox .tox-checkbox {\n  align-items: center;\n  border-radius: 3px;\n  cursor: pointer;\n  display: flex;\n  height: 36px;\n  min-width: 36px;\n}\n.tox .tox-checkbox__input {\n  /* Hide from view but visible to screen readers */\n  height: 1px;\n  overflow: hidden;\n  position: absolute;\n  top: auto;\n  width: 1px;\n}\n.tox .tox-checkbox__icons {\n  align-items: center;\n  border-radius: 3px;\n  box-shadow: 0 0 0 2px transparent;\n  box-sizing: content-box;\n  display: flex;\n  height: 24px;\n  justify-content: center;\n  padding: calc(4px - 1px);\n  width: 24px;\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  display: block;\n  fill: rgba(255, 255, 255, 0.2);\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n  display: none;\n  fill: #207ab7;\n}\n.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n  display: none;\n  fill: #207ab7;\n}\n.tox .tox-checkbox--disabled {\n  color: rgba(255, 255, 255, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  display: none;\n}\n.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg {\n  display: block;\n}\n.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {\n  display: none;\n}\n.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {\n  display: block;\n}\n.tox input.tox-checkbox__input:focus + .tox-checkbox__icons {\n  border-radius: 3px;\n  box-shadow: inset 0 0 0 1px #207ab7;\n  padding: calc(4px - 1px);\n}\n.tox:not([dir=rtl]) .tox-checkbox__label {\n  margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-checkbox__input {\n  left: -10000px;\n}\n.tox:not([dir=rtl]) .tox-bar .tox-checkbox {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-checkbox__label {\n  margin-right: 4px;\n}\n.tox[dir=rtl] .tox-checkbox__input {\n  right: -10000px;\n}\n.tox[dir=rtl] .tox-bar .tox-checkbox {\n  margin-right: 4px;\n}\n.tox {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox .tox-collection--toolbar .tox-collection__group {\n  display: flex;\n  padding: 0;\n}\n.tox .tox-collection--grid .tox-collection__group {\n  display: flex;\n  flex-wrap: wrap;\n  max-height: 208px;\n  overflow-x: hidden;\n  overflow-y: auto;\n  padding: 0;\n}\n.tox .tox-collection--list .tox-collection__group {\n  border-bottom-width: 0;\n  border-color: #1a1a1a;\n  border-left-width: 0;\n  border-right-width: 0;\n  border-style: solid;\n  border-top-width: 1px;\n  padding: 4px 0;\n}\n.tox .tox-collection--list .tox-collection__group:first-child {\n  border-top-width: 0;\n}\n.tox .tox-collection__group-heading {\n  background-color: #333333;\n  color: #fff;\n  cursor: default;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  margin-bottom: 4px;\n  margin-top: -4px;\n  padding: 4px 8px;\n  text-transform: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.tox .tox-collection__item {\n  align-items: center;\n  border-radius: 3px;\n  color: #fff;\n  display: flex;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n.tox .tox-collection--list .tox-collection__item {\n  padding: 4px 8px;\n}\n.tox .tox-collection--toolbar .tox-collection__item {\n  border-radius: 3px;\n  padding: 4px;\n}\n.tox .tox-collection--grid .tox-collection__item {\n  border-radius: 3px;\n  padding: 4px;\n}\n.tox .tox-collection--list .tox-collection__item--enabled {\n  background-color: #2b3b4e;\n  color: #fff;\n}\n.tox .tox-collection--list .tox-collection__item--active {\n  background-color: #4a5562;\n}\n.tox .tox-collection--toolbar .tox-collection__item--enabled {\n  background-color: #757d87;\n  color: #fff;\n}\n.tox .tox-collection--toolbar .tox-collection__item--active {\n  background-color: #4a5562;\n}\n.tox .tox-collection--grid .tox-collection__item--enabled {\n  background-color: #757d87;\n  color: #fff;\n}\n.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n  background-color: #4a5562;\n  color: #fff;\n}\n.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n  color: #fff;\n}\n.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) {\n  color: #fff;\n}\n.tox .tox-collection__item-icon,\n.tox .tox-collection__item-checkmark {\n  align-items: center;\n  display: flex;\n  height: 24px;\n  justify-content: center;\n  width: 24px;\n}\n.tox .tox-collection__item-icon svg,\n.tox .tox-collection__item-checkmark svg {\n  fill: currentColor;\n}\n.tox .tox-collection--toolbar-lg .tox-collection__item-icon {\n  height: 48px;\n  width: 48px;\n}\n.tox .tox-collection__item-label {\n  color: currentColor;\n  display: inline-block;\n  flex: 1;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 24px;\n  text-transform: none;\n  word-break: break-all;\n}\n.tox .tox-collection__item-accessory {\n  color: rgba(255, 255, 255, 0.5);\n  display: inline-block;\n  font-size: 14px;\n  height: 24px;\n  line-height: 24px;\n  text-transform: none;\n}\n.tox .tox-collection__item-caret {\n  align-items: center;\n  display: flex;\n  min-height: 24px;\n}\n.tox .tox-collection__item-caret::after {\n  content: '';\n  font-size: 0;\n  min-height: inherit;\n}\n.tox .tox-collection__item-caret svg {\n  fill: #fff;\n}\n.tox .tox-collection__item--state-disabled {\n  background-color: transparent;\n  color: rgba(255, 255, 255, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg {\n  display: none;\n}\n.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark {\n  display: none;\n}\n.tox .tox-collection--horizontal {\n  background-color: #2b3b4e;\n  border: 1px solid #1a1a1a;\n  border-radius: 3px;\n  box-shadow: 0 0 2px 0 rgba(42, 55, 70, 0.2), 0 4px 8px 0 rgba(42, 55, 70, 0.15);\n  display: flex;\n  flex: 0 0 auto;\n  flex-shrink: 0;\n  flex-wrap: nowrap;\n  margin-bottom: 0;\n  overflow-x: auto;\n  padding: 0;\n}\n.tox .tox-collection--horizontal .tox-collection__group {\n  align-items: center;\n  display: flex;\n  flex-wrap: nowrap;\n  margin: 0;\n  padding: 0 4px;\n}\n.tox .tox-collection--horizontal .tox-collection__item {\n  height: 34px;\n  margin: 3px 0 2px 0;\n  padding: 0 4px;\n}\n.tox .tox-collection--horizontal .tox-collection__item-label {\n  white-space: nowrap;\n}\n.tox .tox-collection--horizontal .tox-collection__item-caret {\n  margin-left: 4px;\n}\n.tox .tox-collection__item-container {\n  display: flex;\n}\n.tox .tox-collection__item-container--row {\n  align-items: center;\n  flex: 1 1 auto;\n  flex-direction: row;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--align-left {\n  margin-right: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--align-right {\n  justify-content: flex-end;\n  margin-left: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top {\n  align-items: flex-start;\n  margin-bottom: auto;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle {\n  align-items: center;\n}\n.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom {\n  align-items: flex-end;\n  margin-top: auto;\n}\n.tox .tox-collection__item-container--column {\n  align-self: center;\n  flex: 1 1 auto;\n  flex-direction: column;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--align-left {\n  align-items: flex-start;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--align-right {\n  align-items: flex-end;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top {\n  align-self: flex-start;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle {\n  align-self: center;\n}\n.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom {\n  align-self: flex-end;\n}\n.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {\n  border-right: 1px solid #000000;\n}\n.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) {\n  margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {\n  margin-left: 4px;\n}\n.tox:not([dir=rtl]) .tox-collection__item-accessory {\n  margin-left: 16px;\n  text-align: right;\n}\n.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret {\n  margin-left: 16px;\n}\n.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {\n  border-left: 1px solid #000000;\n}\n.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) {\n  margin-right: 8px;\n}\n.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {\n  margin-right: 4px;\n}\n.tox[dir=rtl] .tox-collection__item-accessory {\n  margin-right: 16px;\n  text-align: left;\n}\n.tox[dir=rtl] .tox-collection .tox-collection__item-caret {\n  margin-right: 16px;\n  transform: rotateY(180deg);\n}\n.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret {\n  margin-right: 4px;\n}\n.tox .tox-color-picker-container {\n  display: flex;\n  flex-direction: row;\n  height: 225px;\n  margin: 0;\n}\n.tox .tox-sv-palette {\n  box-sizing: border-box;\n  display: flex;\n  height: 100%;\n}\n.tox .tox-sv-palette-spectrum {\n  height: 100%;\n}\n.tox .tox-sv-palette,\n.tox .tox-sv-palette-spectrum {\n  width: 225px;\n}\n.tox .tox-sv-palette-thumb {\n  background: none;\n  border: 1px solid black;\n  border-radius: 50%;\n  box-sizing: content-box;\n  height: 12px;\n  position: absolute;\n  width: 12px;\n}\n.tox .tox-sv-palette-inner-thumb {\n  border: 1px solid white;\n  border-radius: 50%;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n}\n.tox .tox-hue-slider {\n  box-sizing: border-box;\n  height: 100%;\n  width: 25px;\n}\n.tox .tox-hue-slider-spectrum {\n  background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00);\n  height: 100%;\n  width: 100%;\n}\n.tox .tox-hue-slider,\n.tox .tox-hue-slider-spectrum {\n  width: 20px;\n}\n.tox .tox-hue-slider-thumb {\n  background: white;\n  border: 1px solid black;\n  box-sizing: content-box;\n  height: 4px;\n  width: 100%;\n}\n.tox .tox-rgb-form {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n}\n.tox .tox-rgb-form div {\n  align-items: center;\n  display: flex;\n  justify-content: space-between;\n  margin-bottom: 5px;\n  width: inherit;\n}\n.tox .tox-rgb-form input {\n  width: 6em;\n}\n.tox .tox-rgb-form input.tox-invalid {\n  /* Need !important to override Chrome's focus styling unfortunately */\n  border: 1px solid red !important;\n}\n.tox .tox-rgb-form .tox-rgba-preview {\n  border: 1px solid black;\n  flex-grow: 2;\n  margin-bottom: 0;\n}\n.tox:not([dir=rtl]) .tox-sv-palette {\n  margin-right: 15px;\n}\n.tox:not([dir=rtl]) .tox-hue-slider {\n  margin-right: 15px;\n}\n.tox:not([dir=rtl]) .tox-hue-slider-thumb {\n  margin-left: -1px;\n}\n.tox:not([dir=rtl]) .tox-rgb-form label {\n  margin-right: 0.5em;\n}\n.tox[dir=rtl] .tox-sv-palette {\n  margin-left: 15px;\n}\n.tox[dir=rtl] .tox-hue-slider {\n  margin-left: 15px;\n}\n.tox[dir=rtl] .tox-hue-slider-thumb {\n  margin-right: -1px;\n}\n.tox[dir=rtl] .tox-rgb-form label {\n  margin-left: 0.5em;\n}\n.tox .tox-toolbar .tox-swatches,\n.tox .tox-toolbar__primary .tox-swatches,\n.tox .tox-toolbar__overflow .tox-swatches {\n  margin: 2px 0 3px 4px;\n}\n.tox .tox-collection--list .tox-collection__group .tox-swatches-menu {\n  border: 0;\n  margin: -4px 0;\n}\n.tox .tox-swatches__row {\n  display: flex;\n}\n.tox .tox-swatch {\n  height: 30px;\n  transition: transform 0.15s, box-shadow 0.15s;\n  width: 30px;\n}\n.tox .tox-swatch:hover,\n.tox .tox-swatch:focus {\n  box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset;\n  transform: scale(0.8);\n}\n.tox .tox-swatch--remove {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n}\n.tox .tox-swatch--remove svg path {\n  stroke: #e74c3c;\n}\n.tox .tox-swatches__picker-btn {\n  align-items: center;\n  background-color: transparent;\n  border: 0;\n  cursor: pointer;\n  display: flex;\n  height: 30px;\n  justify-content: center;\n  outline: none;\n  padding: 0;\n  width: 30px;\n}\n.tox .tox-swatches__picker-btn svg {\n  fill: #fff;\n  height: 24px;\n  width: 24px;\n}\n.tox .tox-swatches__picker-btn:hover {\n  background: #4a5562;\n}\n.tox:not([dir=rtl]) .tox-swatches__picker-btn {\n  margin-left: auto;\n}\n.tox[dir=rtl] .tox-swatches__picker-btn {\n  margin-right: auto;\n}\n.tox .tox-comment-thread {\n  background: #2b3b4e;\n  position: relative;\n}\n.tox .tox-comment-thread > *:not(:first-child) {\n  margin-top: 8px;\n}\n.tox .tox-comment {\n  background: #2b3b4e;\n  border: 1px solid #000000;\n  border-radius: 3px;\n  box-shadow: 0 4px 8px 0 rgba(42, 55, 70, 0.1);\n  padding: 8px 8px 16px 8px;\n  position: relative;\n}\n.tox .tox-comment__header {\n  align-items: center;\n  color: #fff;\n  display: flex;\n  justify-content: space-between;\n}\n.tox .tox-comment__date {\n  color: #fff;\n  font-size: 12px;\n  line-height: 18px;\n}\n.tox .tox-comment__body {\n  color: #fff;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  margin-top: 8px;\n  position: relative;\n  text-transform: initial;\n}\n.tox .tox-comment__body textarea {\n  resize: none;\n  white-space: normal;\n  width: 100%;\n}\n.tox .tox-comment__expander {\n  padding-top: 8px;\n}\n.tox .tox-comment__expander p {\n  color: rgba(255, 255, 255, 0.5);\n  font-size: 14px;\n  font-style: normal;\n}\n.tox .tox-comment__body p {\n  margin: 0;\n}\n.tox .tox-comment__buttonspacing {\n  padding-top: 16px;\n  text-align: center;\n}\n.tox .tox-comment-thread__overlay::after {\n  background: #2b3b4e;\n  bottom: 0;\n  content: \"\";\n  display: flex;\n  left: 0;\n  opacity: 0.9;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 5;\n}\n.tox .tox-comment__reply {\n  display: flex;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  margin-top: 8px;\n}\n.tox .tox-comment__reply > *:first-child {\n  margin-bottom: 8px;\n  width: 100%;\n}\n.tox .tox-comment__edit {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-end;\n  margin-top: 16px;\n}\n.tox .tox-comment__gradient::after {\n  background: linear-gradient(rgba(43, 59, 78, 0), #2b3b4e);\n  bottom: 0;\n  content: \"\";\n  display: block;\n  height: 5em;\n  margin-top: -40px;\n  position: absolute;\n  width: 100%;\n}\n.tox .tox-comment__overlay {\n  background: #2b3b4e;\n  bottom: 0;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  left: 0;\n  opacity: 0.9;\n  position: absolute;\n  right: 0;\n  text-align: center;\n  top: 0;\n  z-index: 5;\n}\n.tox .tox-comment__loading-text {\n  align-items: center;\n  color: #fff;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n}\n.tox .tox-comment__loading-text > div {\n  padding-bottom: 16px;\n}\n.tox .tox-comment__overlaytext {\n  bottom: 0;\n  flex-direction: column;\n  font-size: 14px;\n  left: 0;\n  padding: 1em;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 10;\n}\n.tox .tox-comment__overlaytext p {\n  background-color: #2b3b4e;\n  box-shadow: 0 0 8px 8px #2b3b4e;\n  color: #fff;\n  text-align: center;\n}\n.tox .tox-comment__overlaytext div:nth-of-type(2) {\n  font-size: 0.8em;\n}\n.tox .tox-comment__busy-spinner {\n  align-items: center;\n  background-color: #2b3b4e;\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 20;\n}\n.tox .tox-comment__scroll {\n  display: flex;\n  flex-direction: column;\n  flex-shrink: 1;\n  overflow: auto;\n}\n.tox .tox-conversations {\n  margin: 8px;\n}\n.tox:not([dir=rtl]) .tox-comment__edit {\n  margin-left: 8px;\n}\n.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child,\n.tox:not([dir=rtl]) .tox-comment__edit > *:last-child,\n.tox:not([dir=rtl]) .tox-comment__reply > *:last-child {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-comment__edit {\n  margin-right: 8px;\n}\n.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child,\n.tox[dir=rtl] .tox-comment__edit > *:last-child,\n.tox[dir=rtl] .tox-comment__reply > *:last-child {\n  margin-right: 8px;\n}\n.tox .tox-user {\n  align-items: center;\n  display: flex;\n}\n.tox .tox-user__avatar svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-user__avatar img {\n  border-radius: 50%;\n  height: 36px;\n  object-fit: cover;\n  vertical-align: middle;\n  width: 36px;\n}\n.tox .tox-user__name {\n  color: #fff;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: bold;\n  line-height: 18px;\n  text-transform: none;\n}\n.tox:not([dir=rtl]) .tox-user__avatar svg,\n.tox:not([dir=rtl]) .tox-user__avatar img {\n  margin-right: 8px;\n}\n.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-user__avatar svg,\n.tox[dir=rtl] .tox-user__avatar img {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-user__avatar + .tox-user__name {\n  margin-right: 8px;\n}\n.tox .tox-dialog-wrap {\n  align-items: center;\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: fixed;\n  right: 0;\n  top: 0;\n  z-index: 1100;\n}\n.tox .tox-dialog-wrap__backdrop {\n  background-color: rgba(34, 47, 62, 0.75);\n  bottom: 0;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 1;\n}\n.tox .tox-dialog-wrap__backdrop--opaque {\n  background-color: #222f3e;\n}\n.tox .tox-dialog {\n  background-color: #2b3b4e;\n  border-color: #000000;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: 0 16px 16px -10px rgba(42, 55, 70, 0.15), 0 0 40px 1px rgba(42, 55, 70, 0.15);\n  display: flex;\n  flex-direction: column;\n  max-height: 100%;\n  max-width: 480px;\n  overflow: hidden;\n  position: relative;\n  width: 95vw;\n  z-index: 2;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox .tox-dialog {\n    align-self: flex-start;\n    margin: 8px auto;\n    max-height: calc(100vh - 8px * 2);\n    width: calc(100vw - 16px);\n  }\n}\n.tox .tox-dialog-inline {\n  z-index: 1100;\n}\n.tox .tox-dialog__header {\n  align-items: center;\n  background-color: #2b3b4e;\n  border-bottom: none;\n  color: #fff;\n  display: flex;\n  font-size: 16px;\n  justify-content: space-between;\n  padding: 8px 16px 0 16px;\n  position: relative;\n}\n.tox .tox-dialog__header .tox-button {\n  z-index: 1;\n}\n.tox .tox-dialog__draghandle {\n  cursor: grab;\n  height: 100%;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.tox .tox-dialog__draghandle:active {\n  cursor: grabbing;\n}\n.tox .tox-dialog__dismiss {\n  margin-left: auto;\n}\n.tox .tox-dialog__title {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 20px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  margin: 0;\n  text-transform: none;\n}\n.tox .tox-dialog__body {\n  color: #fff;\n  display: flex;\n  flex: 1;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  min-width: 0;\n  text-align: left;\n  text-transform: none;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox .tox-dialog__body {\n    flex-direction: column;\n  }\n}\n.tox .tox-dialog__body-nav {\n  align-items: flex-start;\n  display: flex;\n  flex-direction: column;\n  padding: 16px 16px;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox .tox-dialog__body-nav {\n    flex-direction: row;\n    -webkit-overflow-scrolling: touch;\n    overflow-x: auto;\n    padding-bottom: 0;\n  }\n}\n.tox .tox-dialog__body-nav-item {\n  border-bottom: 2px solid transparent;\n  color: rgba(255, 255, 255, 0.5);\n  display: inline-block;\n  font-size: 14px;\n  line-height: 1.3;\n  margin-bottom: 8px;\n  text-decoration: none;\n  white-space: nowrap;\n}\n.tox .tox-dialog__body-nav-item:focus {\n  background-color: rgba(32, 122, 183, 0.1);\n}\n.tox .tox-dialog__body-nav-item--active {\n  border-bottom: 2px solid #207ab7;\n  color: #207ab7;\n}\n.tox .tox-dialog__body-content {\n  box-sizing: border-box;\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  max-height: 650px;\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n  padding: 16px 16px;\n}\n.tox .tox-dialog__body-content > * {\n  margin-bottom: 0;\n  margin-top: 16px;\n}\n.tox .tox-dialog__body-content > *:first-child {\n  margin-top: 0;\n}\n.tox .tox-dialog__body-content > *:last-child {\n  margin-bottom: 0;\n}\n.tox .tox-dialog__body-content > *:only-child {\n  margin-bottom: 0;\n  margin-top: 0;\n}\n.tox .tox-dialog__body-content a {\n  color: #207ab7;\n  cursor: pointer;\n  text-decoration: none;\n}\n.tox .tox-dialog__body-content a:hover,\n.tox .tox-dialog__body-content a:focus {\n  color: #185d8c;\n  text-decoration: none;\n}\n.tox .tox-dialog__body-content a:active {\n  color: #185d8c;\n  text-decoration: none;\n}\n.tox .tox-dialog__body-content svg {\n  fill: #fff;\n}\n.tox .tox-dialog__body-content ul {\n  display: block;\n  list-style-type: disc;\n  margin-bottom: 16px;\n  margin-inline-end: 0;\n  margin-inline-start: 0;\n  padding-inline-start: 2.5rem;\n}\n.tox .tox-dialog__body-content .tox-form__group h1 {\n  color: #fff;\n  font-size: 20px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  margin-bottom: 16px;\n  margin-top: 2rem;\n  text-transform: none;\n}\n.tox .tox-dialog__body-content .tox-form__group h2 {\n  color: #fff;\n  font-size: 16px;\n  font-style: normal;\n  font-weight: bold;\n  letter-spacing: normal;\n  margin-bottom: 16px;\n  margin-top: 2rem;\n  text-transform: none;\n}\n.tox .tox-dialog__body-content .tox-form__group p {\n  margin-bottom: 16px;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:first-child,\n.tox .tox-dialog__body-content .tox-form__group h2:first-child,\n.tox .tox-dialog__body-content .tox-form__group p:first-child {\n  margin-top: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:last-child,\n.tox .tox-dialog__body-content .tox-form__group h2:last-child,\n.tox .tox-dialog__body-content .tox-form__group p:last-child {\n  margin-bottom: 0;\n}\n.tox .tox-dialog__body-content .tox-form__group h1:only-child,\n.tox .tox-dialog__body-content .tox-form__group h2:only-child,\n.tox .tox-dialog__body-content .tox-form__group p:only-child {\n  margin-bottom: 0;\n  margin-top: 0;\n}\n.tox .tox-dialog--width-lg {\n  height: 650px;\n  max-width: 1200px;\n}\n.tox .tox-dialog--width-md {\n  max-width: 800px;\n}\n.tox .tox-dialog--width-md .tox-dialog__body-content {\n  overflow: auto;\n}\n.tox .tox-dialog__body-content--centered {\n  text-align: center;\n}\n.tox .tox-dialog__footer {\n  align-items: center;\n  background-color: #2b3b4e;\n  border-top: 1px solid #000000;\n  display: flex;\n  justify-content: space-between;\n  padding: 8px 16px;\n}\n.tox .tox-dialog__footer-start,\n.tox .tox-dialog__footer-end {\n  display: flex;\n}\n.tox .tox-dialog__busy-spinner {\n  align-items: center;\n  background-color: rgba(34, 47, 62, 0.75);\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: 3;\n}\n.tox .tox-dialog__table {\n  border-collapse: collapse;\n  width: 100%;\n}\n.tox .tox-dialog__table thead th {\n  font-weight: bold;\n  padding-bottom: 8px;\n}\n.tox .tox-dialog__table tbody tr {\n  border-bottom: 1px solid #000000;\n}\n.tox .tox-dialog__table tbody tr:last-child {\n  border-bottom: none;\n}\n.tox .tox-dialog__table td {\n  padding-bottom: 8px;\n  padding-top: 8px;\n}\n.tox .tox-dialog__iframe.tox-dialog__iframe--opaque {\n  background: #fff;\n}\n.tox .tox-dialog__popups {\n  position: absolute;\n  width: 100%;\n  z-index: 1100;\n}\n.tox .tox-dialog__body-iframe {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.tox .tox-dialog__body-iframe .tox-navobj {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) {\n  flex: 1;\n  height: 100%;\n}\n.tox .tox-dialog-dock-fadeout {\n  opacity: 0;\n  visibility: hidden;\n}\n.tox .tox-dialog-dock-fadein {\n  opacity: 1;\n  visibility: visible;\n}\n.tox .tox-dialog-dock-transition {\n  transition: visibility 0s linear 0.3s, opacity 0.3s ease;\n}\n.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein {\n  transition-delay: 0s;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav {\n    margin-right: 0;\n  }\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) {\n    margin-left: 8px;\n  }\n}\n.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *,\n.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * {\n  margin-left: 8px;\n}\n.tox[dir=rtl] .tox-dialog__body {\n  text-align: right;\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav {\n    margin-left: 0;\n  }\n}\n@media only screen and (max-width: 767px ) {\n  body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) {\n    margin-right: 8px;\n  }\n}\n.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *,\n.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * {\n  margin-right: 8px;\n}\nbody.tox-dialog__disable-scroll {\n  overflow: hidden;\n}\n.tox .tox-dropzone-container {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-dropzone {\n  align-items: center;\n  background: #fff;\n  border: 2px dashed #000000;\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  justify-content: center;\n  min-height: 100px;\n  padding: 10px;\n}\n.tox .tox-dropzone p {\n  color: rgba(255, 255, 255, 0.5);\n  margin: 0 0 16px 0;\n}\n.tox .tox-edit-area {\n  display: flex;\n  flex: 1;\n  overflow: hidden;\n  position: relative;\n}\n.tox .tox-edit-area__iframe {\n  background-color: #fff;\n  border: 0;\n  box-sizing: border-box;\n  flex: 1;\n  height: 100%;\n  position: absolute;\n  width: 100%;\n}\n.tox.tox-inline-edit-area {\n  border: 1px dotted #000000;\n}\n.tox .tox-editor-container {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  overflow: hidden;\n}\n.tox .tox-editor-header {\n  display: grid;\n  grid-template-columns: 1fr min-content;\n  z-index: 1;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header {\n  background-color: #222f3e;\n  border-bottom: none;\n  box-shadow: none;\n  padding: 4px 0;\n  transition: box-shadow 0.5s;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header {\n  border-top: 1px solid #000000;\n  box-shadow: none;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header {\n  background-color: #222f3e;\n  box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25);\n  padding: 4px 0;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header {\n  box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25);\n}\n.tox-editor-dock-fadeout {\n  opacity: 0;\n  visibility: hidden;\n}\n.tox-editor-dock-fadein {\n  opacity: 1;\n  visibility: visible;\n}\n.tox-editor-dock-transition {\n  transition: visibility 0s linear 0.25s, opacity 0.25s ease;\n}\n.tox-editor-dock-transition.tox-editor-dock-fadein {\n  transition-delay: 0s;\n}\n.tox .tox-control-wrap {\n  flex: 1;\n  position: relative;\n}\n.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,\n.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,\n.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid {\n  display: none;\n}\n.tox .tox-control-wrap svg {\n  display: block;\n}\n.tox .tox-control-wrap__status-icon-wrap {\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox .tox-control-wrap__status-icon-invalid svg {\n  fill: #c00;\n}\n.tox .tox-control-wrap__status-icon-unknown svg {\n  fill: orange;\n}\n.tox .tox-control-wrap__status-icon-valid svg {\n  fill: green;\n}\n.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,\n.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,\n.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield {\n  padding-right: 32px;\n}\n.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap {\n  right: 4px;\n}\n.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,\n.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,\n.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield {\n  padding-left: 32px;\n}\n.tox[dir=rtl] .tox-control-wrap__status-icon-wrap {\n  left: 4px;\n}\n.tox .tox-autocompleter {\n  max-width: 25em;\n}\n.tox .tox-autocompleter .tox-menu {\n  box-sizing: border-box;\n  max-width: 25em;\n}\n.tox .tox-autocompleter .tox-autocompleter-highlight {\n  font-weight: bold;\n}\n.tox .tox-color-input {\n  display: flex;\n  position: relative;\n  z-index: 1;\n}\n.tox .tox-color-input .tox-textfield {\n  z-index: -1;\n}\n.tox .tox-color-input span {\n  border-color: rgba(42, 55, 70, 0.2);\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  height: 24px;\n  position: absolute;\n  top: 6px;\n  width: 24px;\n}\n.tox .tox-color-input span:hover:not([aria-disabled=true]),\n.tox .tox-color-input span:focus:not([aria-disabled=true]) {\n  border-color: #207ab7;\n  cursor: pointer;\n}\n.tox .tox-color-input span::before {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(255, 255, 255, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(255, 255, 255, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(255, 255, 255, 0.25) 75%);\n  background-position: 0 0, 0 6px, 6px -6px, -6px 0;\n  background-size: 12px 12px;\n  border: 1px solid #2b3b4e;\n  border-radius: 3px;\n  box-sizing: border-box;\n  content: '';\n  height: 24px;\n  left: -1px;\n  position: absolute;\n  top: -1px;\n  width: 24px;\n  z-index: -1;\n}\n.tox .tox-color-input span[aria-disabled=true] {\n  cursor: not-allowed;\n}\n.tox:not([dir=rtl]) .tox-color-input {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox:not([dir=rtl]) .tox-color-input .tox-textfield {\n  padding-left: 36px;\n}\n.tox:not([dir=rtl]) .tox-color-input span {\n  left: 6px;\n}\n.tox[dir=\"rtl\"] .tox-color-input {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox[dir=\"rtl\"] .tox-color-input .tox-textfield {\n  padding-right: 36px;\n}\n.tox[dir=\"rtl\"] .tox-color-input span {\n  right: 6px;\n}\n.tox .tox-label,\n.tox .tox-toolbar-label {\n  color: rgba(255, 255, 255, 0.5);\n  display: block;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.3;\n  padding: 0 8px 0 0;\n  text-transform: none;\n  white-space: nowrap;\n}\n.tox .tox-toolbar-label {\n  padding: 0 8px;\n}\n.tox[dir=rtl] .tox-label {\n  padding: 0 0 0 8px;\n}\n.tox .tox-form {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.tox .tox-form__group {\n  box-sizing: border-box;\n  margin-bottom: 4px;\n}\n.tox .tox-form-group--maximize {\n  flex: 1;\n}\n.tox .tox-form__group--error {\n  color: #c00;\n}\n.tox .tox-form__group--collection {\n  display: flex;\n}\n.tox .tox-form__grid {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n}\n.tox .tox-form__grid--2col > .tox-form__group {\n  width: calc(50% - (8px / 2));\n}\n.tox .tox-form__grid--3col > .tox-form__group {\n  width: calc(100% / 3 - (8px / 2));\n}\n.tox .tox-form__grid--4col > .tox-form__group {\n  width: calc(25% - (8px / 2));\n}\n.tox .tox-form__controls-h-stack {\n  align-items: center;\n  display: flex;\n}\n.tox .tox-form__group--inline {\n  align-items: center;\n  display: flex;\n}\n.tox .tox-form__group--stretched {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n}\n.tox .tox-form__group--stretched .tox-textarea {\n  flex: 1;\n}\n.tox .tox-form__group--stretched .tox-navobj {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-form__group--stretched .tox-navobj :nth-child(2) {\n  flex: 1;\n  height: 100%;\n}\n.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) {\n  margin-right: 4px;\n}\n.tox .tox-lock.tox-locked .tox-lock-icon__unlock,\n.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock {\n  display: none;\n}\n.tox .tox-textfield,\n.tox .tox-toolbar-textfield,\n.tox .tox-listboxfield .tox-listbox--select,\n.tox .tox-textarea {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  background-color: #2b3b4e;\n  border-color: #000000;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  color: #fff;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  line-height: 24px;\n  margin: 0;\n  min-height: 34px;\n  outline: none;\n  padding: 5px 4.75px;\n  resize: none;\n  width: 100%;\n}\n.tox .tox-textfield[disabled],\n.tox .tox-textarea[disabled] {\n  background-color: #222f3e;\n  color: rgba(255, 255, 255, 0.85);\n  cursor: not-allowed;\n}\n.tox .tox-textfield:focus,\n.tox .tox-listboxfield .tox-listbox--select:focus,\n.tox .tox-textarea:focus {\n  background-color: #2b3b4e;\n  border-color: #207ab7;\n  box-shadow: none;\n  outline: 2px solid rgba(32, 122, 183, 0.25);\n}\n.tox .tox-toolbar-textfield {\n  border-width: 0;\n  margin-bottom: 3px;\n  margin-top: 2px;\n  max-width: 250px;\n}\n.tox .tox-naked-btn {\n  background-color: transparent;\n  border: 0;\n  border-color: transparent;\n  box-shadow: unset;\n  color: #207ab7;\n  cursor: pointer;\n  display: block;\n  margin: 0;\n  padding: 0;\n}\n.tox .tox-naked-btn svg {\n  display: block;\n  fill: #fff;\n}\n.tox:not([dir=rtl]) .tox-toolbar-textfield + * {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-toolbar-textfield + * {\n  margin-right: 4px;\n}\n.tox .tox-listboxfield {\n  cursor: pointer;\n  position: relative;\n}\n.tox .tox-listboxfield .tox-listbox--select[disabled] {\n  background-color: #19232e;\n  color: rgba(255, 255, 255, 0.85);\n  cursor: not-allowed;\n}\n.tox .tox-listbox__select-label {\n  cursor: default;\n  flex: 1;\n  margin: 0 4px;\n}\n.tox .tox-listbox__select-chevron {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  width: 16px;\n}\n.tox .tox-listbox__select-chevron svg {\n  fill: #fff;\n}\n.tox .tox-listboxfield .tox-listbox--select {\n  align-items: center;\n  display: flex;\n}\n.tox:not([dir=rtl]) .tox-listboxfield svg {\n  right: 8px;\n}\n.tox[dir=rtl] .tox-listboxfield svg {\n  left: 8px;\n}\n.tox .tox-selectfield {\n  cursor: pointer;\n  position: relative;\n}\n.tox .tox-selectfield select {\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n  background-color: #2b3b4e;\n  border-color: #000000;\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  color: #fff;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n  font-size: 16px;\n  line-height: 24px;\n  margin: 0;\n  min-height: 34px;\n  outline: none;\n  padding: 5px 4.75px;\n  resize: none;\n  width: 100%;\n}\n.tox .tox-selectfield select[disabled] {\n  background-color: #19232e;\n  color: rgba(255, 255, 255, 0.85);\n  cursor: not-allowed;\n}\n.tox .tox-selectfield select::-ms-expand {\n  display: none;\n}\n.tox .tox-selectfield select:focus {\n  background-color: #2b3b4e;\n  border-color: #207ab7;\n  box-shadow: none;\n  outline: 2px solid rgba(32, 122, 183, 0.25);\n}\n.tox .tox-selectfield svg {\n  pointer-events: none;\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox:not([dir=rtl]) .tox-selectfield select[size=\"0\"],\n.tox:not([dir=rtl]) .tox-selectfield select[size=\"1\"] {\n  padding-right: 24px;\n}\n.tox:not([dir=rtl]) .tox-selectfield svg {\n  right: 8px;\n}\n.tox[dir=rtl] .tox-selectfield select[size=\"0\"],\n.tox[dir=rtl] .tox-selectfield select[size=\"1\"] {\n  padding-left: 24px;\n}\n.tox[dir=rtl] .tox-selectfield svg {\n  left: 8px;\n}\n.tox .tox-textarea {\n  -webkit-appearance: textarea;\n     -moz-appearance: textarea;\n          appearance: textarea;\n  white-space: pre-wrap;\n}\n.tox-fullscreen {\n  border: 0;\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  overscroll-behavior: none;\n  padding: 0;\n  touch-action: pinch-zoom;\n  width: 100%;\n}\n.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {\n  display: none;\n}\n.tox.tox-tinymce.tox-fullscreen,\n.tox-shadowhost.tox-fullscreen {\n  left: 0;\n  position: fixed;\n  top: 0;\n  z-index: 1200;\n}\n.tox.tox-tinymce.tox-fullscreen {\n  background-color: transparent;\n}\n.tox-fullscreen .tox.tox-tinymce-aux,\n.tox-fullscreen ~ .tox.tox-tinymce-aux {\n  z-index: 1201;\n}\n.tox .tox-help__more-link {\n  list-style: none;\n  margin-top: 1em;\n}\n.tox .tox-imagepreview {\n  background-color: #666;\n  height: 380px;\n  overflow: hidden;\n  position: relative;\n  width: 100%;\n}\n.tox .tox-imagepreview.tox-imagepreview__loaded {\n  overflow: auto;\n}\n.tox .tox-imagepreview__container {\n  display: flex;\n  left: 100vw;\n  position: absolute;\n  top: 100vw;\n}\n.tox .tox-imagepreview__image {\n  background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);\n}\n.tox .tox-image-tools .tox-spacer {\n  flex: 1;\n}\n.tox .tox-image-tools .tox-bar {\n  align-items: center;\n  display: flex;\n  height: 60px;\n  justify-content: center;\n}\n.tox .tox-image-tools .tox-imagepreview,\n.tox .tox-image-tools .tox-imagepreview + .tox-bar {\n  margin-top: 8px;\n}\n.tox .tox-image-tools .tox-croprect-block {\n  background: black;\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n  position: absolute;\n  zoom: 1;\n}\n.tox .tox-image-tools .tox-croprect-handle {\n  border: 2px solid white;\n  height: 20px;\n  left: 0;\n  position: absolute;\n  top: 0;\n  width: 20px;\n}\n.tox .tox-image-tools .tox-croprect-handle-move {\n  border: 0;\n  cursor: move;\n  position: absolute;\n}\n.tox .tox-image-tools .tox-croprect-handle-nw {\n  border-width: 2px 0 0 2px;\n  cursor: nw-resize;\n  left: 100px;\n  margin: -2px 0 0 -2px;\n  top: 100px;\n}\n.tox .tox-image-tools .tox-croprect-handle-ne {\n  border-width: 2px 2px 0 0;\n  cursor: ne-resize;\n  left: 200px;\n  margin: -2px 0 0 -20px;\n  top: 100px;\n}\n.tox .tox-image-tools .tox-croprect-handle-sw {\n  border-width: 0 0 2px 2px;\n  cursor: sw-resize;\n  left: 100px;\n  margin: -20px 2px 0 -2px;\n  top: 200px;\n}\n.tox .tox-image-tools .tox-croprect-handle-se {\n  border-width: 0 2px 2px 0;\n  cursor: se-resize;\n  left: 200px;\n  margin: -20px 0 0 -20px;\n  top: 200px;\n}\n.tox .tox-insert-table-picker {\n  display: flex;\n  flex-wrap: wrap;\n  width: 170px;\n}\n.tox .tox-insert-table-picker > div {\n  border-color: #000000;\n  border-style: solid;\n  border-width: 0 1px 1px 0;\n  box-sizing: border-box;\n  height: 17px;\n  width: 17px;\n}\n.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker {\n  margin: 0 -4px;\n}\n.tox .tox-insert-table-picker .tox-insert-table-picker__selected {\n  background-color: rgba(32, 122, 183, 0.5);\n  border-color: rgba(32, 122, 183, 0.5);\n}\n.tox .tox-insert-table-picker__label {\n  color: #fff;\n  display: block;\n  font-size: 14px;\n  padding: 4px;\n  text-align: center;\n  width: 100%;\n}\n.tox:not([dir=rtl]) {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) {\n  border-right: 0;\n}\n.tox[dir=rtl] {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) {\n  border-right: 0;\n}\n.tox {\n  /* stylelint-disable */\n  /* stylelint-enable */\n}\n.tox .tox-menu {\n  background-color: #2b3b4e;\n  border: 1px solid #000000;\n  border-radius: 3px;\n  box-shadow: 0 4px 8px 0 rgba(42, 55, 70, 0.1);\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  z-index: 1150;\n}\n.tox .tox-menu.tox-collection.tox-collection--list {\n  padding: 0 0;\n}\n.tox .tox-menu.tox-collection.tox-collection--toolbar {\n  padding: 4px;\n}\n.tox .tox-menu.tox-collection.tox-collection--grid {\n  padding: 4px;\n}\n@media only screen and (min-width: 768px ) {\n  .tox .tox-menu .tox-collection__item-label {\n    overflow-wrap: break-word;\n    word-break: normal;\n  }\n}\n.tox .tox-menu__label h1,\n.tox .tox-menu__label h2,\n.tox .tox-menu__label h3,\n.tox .tox-menu__label h4,\n.tox .tox-menu__label h5,\n.tox .tox-menu__label h6,\n.tox .tox-menu__label p,\n.tox .tox-menu__label blockquote,\n.tox .tox-menu__label code {\n  margin: 0;\n}\n.tox .tox-menubar {\n  background: url(\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E\") left 0 top 0 #222f3e;\n  background-color: #222f3e;\n  display: flex;\n  flex: 0 0 auto;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  grid-column: 1 / -1;\n  grid-row: 1;\n  padding: 0 4px 0 4px;\n}\n.tox .tox-promotion + .tox-menubar {\n  grid-column: 1;\n}\n.tox .tox-promotion {\n  background: url(\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E\") left 0 top 0 #222f3e;\n  background-color: #222f3e;\n  grid-column: 2;\n  grid-row: 1;\n  padding-inline-end: 8px;\n  padding-inline-start: 4px;\n  padding-top: 5px;\n}\n.tox .tox-promotion-link {\n  align-items: unsafe center;\n  background-color: #E8F1F8;\n  border-radius: 5px;\n  color: #086BE6;\n  cursor: pointer;\n  display: flex;\n  font-size: 14px;\n  height: 26.6px;\n  padding: 4px 8px;\n  white-space: nowrap;\n}\n.tox .tox-promotion-link:hover {\n  background-color: #B4D7FF;\n}\n.tox .tox-promotion-link:focus {\n  background-color: #D9EDF7;\n}\n/* Deprecated. Remove in next major release */\n.tox .tox-mbtn {\n  align-items: center;\n  background: transparent;\n  border: 0;\n  border-radius: 3px;\n  box-shadow: none;\n  color: #fff;\n  display: flex;\n  flex: 0 0 auto;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  height: 34px;\n  justify-content: center;\n  margin: 2px 0 3px 0;\n  outline: none;\n  overflow: hidden;\n  padding: 0 4px;\n  text-transform: none;\n  width: auto;\n}\n.tox .tox-mbtn[disabled] {\n  background-color: transparent;\n  border: 0;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-mbtn:focus:not(:disabled) {\n  background: #4a5562;\n  border: 0;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-mbtn--active {\n  background: #757d87;\n  border: 0;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) {\n  background: #4a5562;\n  border: 0;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-mbtn__select-label {\n  cursor: default;\n  font-weight: normal;\n  margin: 0 4px;\n}\n.tox .tox-mbtn[disabled] .tox-mbtn__select-label {\n  cursor: not-allowed;\n}\n.tox .tox-mbtn__select-chevron {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  width: 16px;\n  display: none;\n}\n.tox .tox-notification {\n  border-radius: 3px;\n  border-style: solid;\n  border-width: 1px;\n  box-shadow: none;\n  box-sizing: border-box;\n  display: grid;\n  font-size: 14px;\n  font-weight: normal;\n  grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);\n  margin-top: 4px;\n  opacity: 0;\n  padding: 4px;\n  transition: transform 100ms ease-in, opacity 150ms ease-in;\n}\n.tox .tox-notification p {\n  font-size: 14px;\n  font-weight: normal;\n}\n.tox .tox-notification a {\n  cursor: pointer;\n  text-decoration: underline;\n}\n.tox .tox-notification--in {\n  opacity: 1;\n}\n.tox .tox-notification--success {\n  background-color: #334840;\n  border-color: #3c5440;\n  color: #fff;\n}\n.tox .tox-notification--success p {\n  color: #fff;\n}\n.tox .tox-notification--success a {\n  color: #b5d199;\n}\n.tox .tox-notification--success svg {\n  fill: #fff;\n}\n.tox .tox-notification--error {\n  background-color: #442632;\n  border-color: #55212b;\n  color: #fff;\n}\n.tox .tox-notification--error p {\n  color: #fff;\n}\n.tox .tox-notification--error a {\n  color: #e68080;\n}\n.tox .tox-notification--error svg {\n  fill: #fff;\n}\n.tox .tox-notification--warn,\n.tox .tox-notification--warning {\n  background-color: #222f3e;\n  border-color: #000000;\n  color: #fff0b3;\n}\n.tox .tox-notification--warn p,\n.tox .tox-notification--warning p {\n  color: #fff0b3;\n}\n.tox .tox-notification--warn a,\n.tox .tox-notification--warning a {\n  color: #ffcc00;\n}\n.tox .tox-notification--warn svg,\n.tox .tox-notification--warning svg {\n  fill: #fff0b3;\n}\n.tox .tox-notification--info {\n  background-color: #254161;\n  border-color: #264972;\n  color: #fff;\n}\n.tox .tox-notification--info p {\n  color: #fff;\n}\n.tox .tox-notification--info a {\n  color: #83b7f3;\n}\n.tox .tox-notification--info svg {\n  fill: #fff;\n}\n.tox .tox-notification__body {\n  align-self: center;\n  color: #fff;\n  font-size: 14px;\n  grid-column-end: 3;\n  grid-column-start: 2;\n  grid-row-end: 2;\n  grid-row-start: 1;\n  text-align: center;\n  white-space: normal;\n  word-break: break-all;\n  word-break: break-word;\n}\n.tox .tox-notification__body > * {\n  margin: 0;\n}\n.tox .tox-notification__body > * + * {\n  margin-top: 1rem;\n}\n.tox .tox-notification__icon {\n  align-self: center;\n  grid-column-end: 2;\n  grid-column-start: 1;\n  grid-row-end: 2;\n  grid-row-start: 1;\n  justify-self: end;\n}\n.tox .tox-notification__icon svg {\n  display: block;\n}\n.tox .tox-notification__dismiss {\n  align-self: start;\n  grid-column-end: 4;\n  grid-column-start: 3;\n  grid-row-end: 2;\n  grid-row-start: 1;\n  justify-self: end;\n}\n.tox .tox-notification .tox-progress-bar {\n  grid-column-end: 4;\n  grid-column-start: 1;\n  grid-row-end: 3;\n  grid-row-start: 2;\n  justify-self: center;\n}\n.tox .tox-pop {\n  display: inline-block;\n  position: relative;\n}\n.tox .tox-pop--resizing {\n  transition: width 0.1s ease;\n}\n.tox .tox-pop--resizing .tox-toolbar,\n.tox .tox-pop--resizing .tox-toolbar__group {\n  flex-wrap: nowrap;\n}\n.tox .tox-pop--transition {\n  transition: 0.15s ease;\n  transition-property: left, right, top, bottom;\n}\n.tox .tox-pop--transition::before,\n.tox .tox-pop--transition::after {\n  transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s;\n}\n.tox .tox-pop__dialog {\n  background-color: #222f3e;\n  border: 1px solid #000000;\n  border-radius: 3px;\n  box-shadow: 0 0 2px 0 rgba(42, 55, 70, 0.2), 0 4px 8px 0 rgba(42, 55, 70, 0.15);\n  min-width: 0;\n  overflow: hidden;\n}\n.tox .tox-pop__dialog > *:not(.tox-toolbar) {\n  margin: 4px 4px 4px 8px;\n}\n.tox .tox-pop__dialog .tox-toolbar {\n  background-color: transparent;\n  margin-bottom: -1px;\n}\n.tox .tox-pop::before,\n.tox .tox-pop::after {\n  border-style: solid;\n  content: '';\n  display: block;\n  height: 0;\n  opacity: 1;\n  position: absolute;\n  width: 0;\n}\n.tox .tox-pop.tox-pop--inset::before,\n.tox .tox-pop.tox-pop--inset::after {\n  opacity: 0;\n  transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease;\n}\n.tox .tox-pop.tox-pop--bottom::before,\n.tox .tox-pop.tox-pop--bottom::after {\n  left: 50%;\n  top: 100%;\n}\n.tox .tox-pop.tox-pop--bottom::after {\n  border-color: #222f3e transparent transparent transparent;\n  border-width: 8px;\n  margin-left: -8px;\n  margin-top: -1px;\n}\n.tox .tox-pop.tox-pop--bottom::before {\n  border-color: #000000 transparent transparent transparent;\n  border-width: 9px;\n  margin-left: -9px;\n}\n.tox .tox-pop.tox-pop--top::before,\n.tox .tox-pop.tox-pop--top::after {\n  left: 50%;\n  top: 0;\n  transform: translateY(-100%);\n}\n.tox .tox-pop.tox-pop--top::after {\n  border-color: transparent transparent #222f3e transparent;\n  border-width: 8px;\n  margin-left: -8px;\n  margin-top: 1px;\n}\n.tox .tox-pop.tox-pop--top::before {\n  border-color: transparent transparent #000000 transparent;\n  border-width: 9px;\n  margin-left: -9px;\n}\n.tox .tox-pop.tox-pop--left::before,\n.tox .tox-pop.tox-pop--left::after {\n  left: 0;\n  top: calc(50% - 1px);\n  transform: translateY(-50%);\n}\n.tox .tox-pop.tox-pop--left::after {\n  border-color: transparent #222f3e transparent transparent;\n  border-width: 8px;\n  margin-left: -15px;\n}\n.tox .tox-pop.tox-pop--left::before {\n  border-color: transparent #000000 transparent transparent;\n  border-width: 10px;\n  margin-left: -19px;\n}\n.tox .tox-pop.tox-pop--right::before,\n.tox .tox-pop.tox-pop--right::after {\n  left: 100%;\n  top: calc(50% + 1px);\n  transform: translateY(-50%);\n}\n.tox .tox-pop.tox-pop--right::after {\n  border-color: transparent transparent transparent #222f3e;\n  border-width: 8px;\n  margin-left: -1px;\n}\n.tox .tox-pop.tox-pop--right::before {\n  border-color: transparent transparent transparent #000000;\n  border-width: 10px;\n  margin-left: -1px;\n}\n.tox .tox-pop.tox-pop--align-left::before,\n.tox .tox-pop.tox-pop--align-left::after {\n  left: 20px;\n}\n.tox .tox-pop.tox-pop--align-right::before,\n.tox .tox-pop.tox-pop--align-right::after {\n  left: calc(100% - 20px);\n}\n.tox .tox-sidebar-wrap {\n  display: flex;\n  flex-direction: row;\n  flex-grow: 1;\n  min-height: 0;\n}\n.tox .tox-sidebar {\n  background-color: #222f3e;\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-end;\n}\n.tox .tox-sidebar__slider {\n  display: flex;\n  overflow: hidden;\n}\n.tox .tox-sidebar__pane-container {\n  display: flex;\n}\n.tox .tox-sidebar__pane {\n  display: flex;\n}\n.tox .tox-sidebar--sliding-closed {\n  opacity: 0;\n}\n.tox .tox-sidebar--sliding-open {\n  opacity: 1;\n}\n.tox .tox-sidebar--sliding-growing,\n.tox .tox-sidebar--sliding-shrinking {\n  transition: width 0.5s ease, opacity 0.5s ease;\n}\n.tox .tox-selector {\n  background-color: #4099ff;\n  border-color: #4099ff;\n  border-style: solid;\n  border-width: 1px;\n  box-sizing: border-box;\n  display: inline-block;\n  height: 10px;\n  position: absolute;\n  width: 10px;\n}\n.tox.tox-platform-touch .tox-selector {\n  height: 12px;\n  width: 12px;\n}\n.tox .tox-slider {\n  align-items: center;\n  display: flex;\n  flex: 1;\n  height: 24px;\n  justify-content: center;\n  position: relative;\n}\n.tox .tox-slider__rail {\n  background-color: transparent;\n  border: 1px solid #000000;\n  border-radius: 3px;\n  height: 10px;\n  min-width: 120px;\n  width: 100%;\n}\n.tox .tox-slider__handle {\n  background-color: #207ab7;\n  border: 2px solid #185d8c;\n  border-radius: 3px;\n  box-shadow: none;\n  height: 24px;\n  left: 50%;\n  position: absolute;\n  top: 50%;\n  transform: translateX(-50%) translateY(-50%);\n  width: 14px;\n}\n.tox .tox-form__controls-h-stack > .tox-slider:not(:first-of-type) {\n  margin-inline-start: 8px;\n}\n.tox .tox-form__controls-h-stack > .tox-form__group + .tox-slider {\n  margin-inline-start: 32px;\n}\n.tox .tox-form__controls-h-stack > .tox-slider + .tox-form__group {\n  margin-inline-start: 32px;\n}\n.tox .tox-source-code {\n  overflow: auto;\n}\n.tox .tox-spinner {\n  display: flex;\n}\n.tox .tox-spinner > div {\n  animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;\n  background-color: rgba(255, 255, 255, 0.5);\n  border-radius: 100%;\n  height: 8px;\n  width: 8px;\n}\n.tox .tox-spinner > div:nth-child(1) {\n  animation-delay: -0.32s;\n}\n.tox .tox-spinner > div:nth-child(2) {\n  animation-delay: -0.16s;\n}\n@keyframes tam-bouncing-dots {\n  0%,\n  80%,\n  100% {\n    transform: scale(0);\n  }\n  40% {\n    transform: scale(1);\n  }\n}\n.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) {\n  margin-left: 4px;\n}\n.tox[dir=rtl] .tox-spinner > div:not(:first-child) {\n  margin-right: 4px;\n}\n.tox .tox-statusbar {\n  align-items: center;\n  background-color: #222f3e;\n  border-top: 1px solid #000000;\n  color: #fff;\n  display: flex;\n  flex: 0 0 auto;\n  font-size: 12px;\n  font-weight: normal;\n  height: 18px;\n  overflow: hidden;\n  padding: 0 8px;\n  position: relative;\n  text-transform: uppercase;\n}\n.tox .tox-statusbar__text-container {\n  display: flex;\n  flex: 1 1 auto;\n  justify-content: flex-end;\n  overflow: hidden;\n}\n.tox .tox-statusbar__path {\n  display: flex;\n  flex: 1 1 auto;\n  margin-right: auto;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.tox .tox-statusbar__path > * {\n  display: inline;\n  white-space: nowrap;\n}\n.tox .tox-statusbar__wordcount {\n  flex: 0 0 auto;\n  margin-left: 1ch;\n}\n.tox .tox-statusbar a,\n.tox .tox-statusbar__path-item,\n.tox .tox-statusbar__wordcount {\n  color: #fff;\n  text-decoration: none;\n}\n.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) {\n  color: #fff;\n  cursor: pointer;\n}\n.tox .tox-statusbar__branding svg {\n  fill: rgba(255, 255, 255, 0.8);\n  height: 1.14em;\n  vertical-align: -0.28em;\n  width: 3.6em;\n}\n.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg,\n.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg {\n  fill: #fff;\n}\n.tox .tox-statusbar__resize-handle {\n  align-items: flex-end;\n  align-self: stretch;\n  cursor: nwse-resize;\n  display: flex;\n  flex: 0 0 auto;\n  justify-content: flex-end;\n  margin-left: auto;\n  margin-right: -8px;\n  padding-bottom: 3px;\n  padding-left: 1ch;\n  padding-right: 3px;\n}\n.tox .tox-statusbar__resize-handle svg {\n  display: block;\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-statusbar__resize-handle:focus svg {\n  background-color: #4a5562;\n  border-radius: 1px 1px -4px 1px;\n  box-shadow: 0 0 0 2px #4a5562;\n}\n.tox:not([dir=rtl]) .tox-statusbar__path > * {\n  margin-right: 4px;\n}\n.tox:not([dir=rtl]) .tox-statusbar__branding {\n  margin-left: 2ch;\n}\n.tox[dir=rtl] .tox-statusbar {\n  flex-direction: row-reverse;\n}\n.tox[dir=rtl] .tox-statusbar__path > * {\n  margin-left: 4px;\n}\n.tox .tox-throbber {\n  z-index: 1299;\n}\n.tox .tox-throbber__busy-spinner {\n  align-items: center;\n  background-color: rgba(34, 47, 62, 0.6);\n  bottom: 0;\n  display: flex;\n  justify-content: center;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0;\n}\n.tox .tox-tbtn {\n  align-items: center;\n  background: transparent;\n  border: 0;\n  border-radius: 3px;\n  box-shadow: none;\n  color: #fff;\n  display: flex;\n  flex: 0 0 auto;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  height: 34px;\n  justify-content: center;\n  margin: 3px 0 2px 0;\n  outline: none;\n  overflow: hidden;\n  padding: 0;\n  text-transform: none;\n  width: 34px;\n}\n.tox .tox-tbtn svg {\n  display: block;\n  fill: #fff;\n}\n.tox .tox-tbtn.tox-tbtn-more {\n  padding-left: 5px;\n  padding-right: 5px;\n  width: inherit;\n}\n.tox .tox-tbtn:focus {\n  background: #4a5562;\n  border: 0;\n  box-shadow: none;\n}\n.tox .tox-tbtn:hover {\n  background: #4a5562;\n  border: 0;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-tbtn:hover svg {\n  fill: #fff;\n}\n.tox .tox-tbtn:active {\n  background: #757d87;\n  border: 0;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-tbtn:active svg {\n  fill: #fff;\n}\n.tox .tox-tbtn--disabled,\n.tox .tox-tbtn--disabled:hover,\n.tox .tox-tbtn:disabled,\n.tox .tox-tbtn:disabled:hover {\n  background: transparent;\n  border: 0;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n  cursor: not-allowed;\n}\n.tox .tox-tbtn--disabled svg,\n.tox .tox-tbtn--disabled:hover svg,\n.tox .tox-tbtn:disabled svg,\n.tox .tox-tbtn:disabled:hover svg {\n  /* stylelint-disable-line no-descending-specificity */\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-tbtn--enabled,\n.tox .tox-tbtn--enabled:hover {\n  background: #757d87;\n  border: 0;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-tbtn--enabled > *,\n.tox .tox-tbtn--enabled:hover > * {\n  transform: none;\n}\n.tox .tox-tbtn--enabled svg,\n.tox .tox-tbtn--enabled:hover svg {\n  /* stylelint-disable-line no-descending-specificity */\n  fill: #fff;\n}\n.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) {\n  color: #fff;\n}\n.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg {\n  fill: #fff;\n}\n.tox .tox-tbtn:active > * {\n  transform: none;\n}\n.tox .tox-tbtn--md {\n  height: 51px;\n  width: 51px;\n}\n.tox .tox-tbtn--lg {\n  flex-direction: column;\n  height: 68px;\n  width: 68px;\n}\n.tox .tox-tbtn--return {\n  align-self: stretch;\n  height: unset;\n  width: 16px;\n}\n.tox .tox-tbtn--labeled {\n  padding: 0 4px;\n  width: unset;\n}\n.tox .tox-tbtn__vlabel {\n  display: block;\n  font-size: 10px;\n  font-weight: normal;\n  letter-spacing: -0.025em;\n  margin-bottom: 4px;\n  white-space: nowrap;\n}\n.tox .tox-tbtn--select {\n  margin: 3px 0 2px 0;\n  padding: 0 4px;\n  width: auto;\n}\n.tox .tox-tbtn__select-label {\n  cursor: default;\n  font-weight: normal;\n  margin: 0 4px;\n}\n.tox .tox-tbtn__select-chevron {\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  width: 16px;\n}\n.tox .tox-tbtn__select-chevron svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-tbtn--bespoke {\n  background: transparent;\n}\n.tox .tox-tbtn--bespoke + .tox-tbtn--bespoke {\n  margin-inline-start: 0;\n}\n.tox .tox-tbtn--bespoke .tox-tbtn__select-label {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  width: 7em;\n}\n.tox .tox-split-button {\n  border: 0;\n  border-radius: 3px;\n  box-sizing: border-box;\n  display: flex;\n  margin: 3px 0 2px 0;\n  overflow: hidden;\n}\n.tox .tox-split-button:hover {\n  box-shadow: 0 0 0 1px #4a5562 inset;\n}\n.tox .tox-split-button:focus {\n  background: #4a5562;\n  box-shadow: none;\n  color: #fff;\n}\n.tox .tox-split-button > * {\n  border-radius: 0;\n}\n.tox .tox-split-button__chevron {\n  width: 16px;\n}\n.tox .tox-split-button__chevron svg {\n  fill: rgba(255, 255, 255, 0.5);\n}\n.tox .tox-split-button .tox-tbtn {\n  margin: 0;\n}\n.tox .tox-split-button.tox-tbtn--disabled:hover,\n.tox .tox-split-button.tox-tbtn--disabled:focus,\n.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,\n.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus {\n  background: transparent;\n  box-shadow: none;\n  color: rgba(255, 255, 255, 0.5);\n}\n.tox.tox-platform-touch .tox-split-button .tox-tbtn--select {\n  padding: 0 0px;\n}\n.tox.tox-platform-touch .tox-split-button .tox-tbtn:not(.tox-tbtn--select):first-child {\n  width: 30px;\n}\n.tox.tox-platform-touch .tox-split-button__chevron {\n  width: 20px;\n}\n.tox .tox-toolbar-overlord {\n  background-color: #222f3e;\n}\n.tox .tox-toolbar,\n.tox .tox-toolbar__primary,\n.tox .tox-toolbar__overflow {\n  background-color: #222f3e;\n  background-image: repeating-linear-gradient(#000000 0px 1px, transparent 1px 39px);\n  background-position: center top 39px;\n  background-repeat: no-repeat;\n  background-size: calc(100% - 4px * 2) calc(100% - 39px);\n  display: flex;\n  flex: 0 0 auto;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  padding: 0 0px;\n  transform: perspective(1px);\n}\n.tox .tox-toolbar-overlord > .tox-toolbar,\n.tox .tox-toolbar-overlord > .tox-toolbar__primary,\n.tox .tox-toolbar-overlord > .tox-toolbar__overflow {\n  background-position: center top 0px;\n  background-size: calc(100% - 4px * 2) calc(100% - 0px);\n}\n.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed {\n  height: 0;\n  opacity: 0;\n  padding-bottom: 0;\n  padding-top: 0;\n  visibility: hidden;\n}\n.tox .tox-toolbar__overflow--growing {\n  transition: height 0.3s ease, opacity 0.2s linear 0.1s;\n}\n.tox .tox-toolbar__overflow--shrinking {\n  transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s;\n}\n.tox .tox-toolbar-overlord,\n.tox .tox-anchorbar {\n  grid-column: 1 / -1;\n}\n.tox .tox-menubar + .tox-toolbar,\n.tox .tox-menubar + .tox-toolbar-overlord {\n  border-top: 1px solid #000000;\n  margin-top: -1px;\n  padding-bottom: 0px;\n  padding-top: 0px;\n}\n.tox .tox-toolbar--scrolling {\n  flex-wrap: nowrap;\n  overflow-x: auto;\n}\n.tox .tox-pop .tox-toolbar {\n  border-width: 0;\n}\n.tox .tox-toolbar--no-divider {\n  background-image: none;\n}\n.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,\n.tox .tox-toolbar-overlord .tox-toolbar__primary {\n  background-position: center top 39px;\n}\n.tox .tox-editor-header > .tox-toolbar--scrolling,\n.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child {\n  background-image: none;\n}\n.tox.tox-tinymce-aux .tox-toolbar__overflow {\n  background-color: #222f3e;\n  background-position: center top 43px;\n  background-size: calc(100% - 8px * 2) calc(100% - 51px);\n  border: none;\n  border-radius: 3px;\n  box-shadow: 0 0 2px 0 rgba(42, 55, 70, 0.2), 0 4px 8px 0 rgba(42, 55, 70, 0.15);\n  padding: 4px 0;\n}\n.tox-pop .tox-pop__dialog {\n  /* stylelint-disable-next-line no-descending-specificity */\n}\n.tox-pop .tox-pop__dialog .tox-toolbar {\n  background-position: center top 43px;\n  background-size: calc(100% - 4px * 2) calc(100% - 51px);\n  padding: 4px 0;\n}\n.tox .tox-toolbar__group {\n  align-items: center;\n  display: flex;\n  flex-wrap: wrap;\n  margin: 0 0;\n  padding: 0 4px 0 4px;\n}\n.tox .tox-toolbar__group--pull-right {\n  margin-left: auto;\n}\n.tox .tox-toolbar--scrolling .tox-toolbar__group {\n  flex-shrink: 0;\n  flex-wrap: nowrap;\n}\n.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) {\n  border-right: 1px solid #000000;\n}\n.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) {\n  border-left: 1px solid #000000;\n}\n.tox .tox-tooltip {\n  display: inline-block;\n  padding: 8px;\n  position: relative;\n}\n.tox .tox-tooltip__body {\n  background-color: #3d546f;\n  border-radius: 3px;\n  box-shadow: 0 2px 4px rgba(42, 55, 70, 0.3);\n  color: rgba(255, 255, 255, 0.75);\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  padding: 4px 8px;\n  text-transform: none;\n}\n.tox .tox-tooltip__arrow {\n  position: absolute;\n}\n.tox .tox-tooltip--down .tox-tooltip__arrow {\n  border-left: 8px solid transparent;\n  border-right: 8px solid transparent;\n  border-top: 8px solid #3d546f;\n  bottom: 0;\n  left: 50%;\n  position: absolute;\n  transform: translateX(-50%);\n}\n.tox .tox-tooltip--up .tox-tooltip__arrow {\n  border-bottom: 8px solid #3d546f;\n  border-left: 8px solid transparent;\n  border-right: 8px solid transparent;\n  left: 50%;\n  position: absolute;\n  top: 0;\n  transform: translateX(-50%);\n}\n.tox .tox-tooltip--right .tox-tooltip__arrow {\n  border-bottom: 8px solid transparent;\n  border-left: 8px solid #3d546f;\n  border-top: 8px solid transparent;\n  position: absolute;\n  right: 0;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox .tox-tooltip--left .tox-tooltip__arrow {\n  border-bottom: 8px solid transparent;\n  border-right: 8px solid #3d546f;\n  border-top: 8px solid transparent;\n  left: 0;\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n.tox .tox-well {\n  border: 1px solid #000000;\n  border-radius: 3px;\n  padding: 8px;\n  width: 100%;\n}\n.tox .tox-well > *:first-child {\n  margin-top: 0;\n}\n.tox .tox-well > *:last-child {\n  margin-bottom: 0;\n}\n.tox .tox-well > *:only-child {\n  margin: 0;\n}\n.tox .tox-custom-editor {\n  border: 1px solid #000000;\n  border-radius: 3px;\n  display: flex;\n  flex: 1;\n  position: relative;\n}\n/* stylelint-disable */\n.tox {\n  /* stylelint-enable */\n}\n.tox .tox-dialog-loading::before {\n  background-color: rgba(0, 0, 0, 0.5);\n  content: \"\";\n  height: 100%;\n  position: absolute;\n  width: 100%;\n  z-index: 1000;\n}\n.tox .tox-tab {\n  cursor: pointer;\n}\n.tox .tox-dialog__content-js {\n  display: flex;\n  flex: 1;\n}\n.tox .tox-dialog__body-content .tox-collection {\n  display: flex;\n  flex: 1;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header {\n  background-color: none;\n  padding: 0;\n}\n.tox.tox-tinymce--toolbar-bottom .tox-editor-header,\n.tox.tox-tinymce-inline .tox-editor-header {\n  margin-bottom: -1px;\n}\n.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header {\n  border-top: none;\n  box-shadow: none;\n}\n.tox.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header {\n  background-color: transparent;\n  box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25);\n  padding: 0;\n}\n.tox.tox.tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header {\n  box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25);\n}\n.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker {\n  margin: -4px 0;\n}\n.tox .tox-menu.tox-collection.tox-collection--list {\n  padding: 0;\n}\n.tox .tox-pop {\n  box-shadow: none;\n}\n.tox .tox-tbtn,\n.tox .tox-tbtn--select,\n.tox .tox-split-button {\n  margin: 2px 0 3px 0;\n}\n.tox .tox-toolbar,\n.tox .tox-toolbar__primary,\n.tox .tox-toolbar__overflow {\n  background: url(\"data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E\") left 0 top 0px #222f3e !important;\n}\n.tox .tox-menubar + .tox-toolbar-overlord {\n  border-top: none;\n}\n.tox .tox-menubar + .tox-toolbar,\n.tox .tox-menubar + .tox-toolbar-overlord .tox-toolbar__primary {\n  border-top: 1px solid #000000;\n  margin-top: -1px;\n}\n.tox.tox-tinymce-aux .tox-toolbar__overflow {\n  border: 1px solid #000000;\n  padding: 0;\n}\n.tox .tox-pop .tox-pop__dialog .tox-toolbar {\n  padding: 0;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar {\n  border-top: 1px solid #000000;\n}\n.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,\n.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child {\n  border-top: 1px solid #000000;\n}\n.tox .tox-toolbar__group {\n  padding: 0 4px 0 4px;\n}\n.tox .tox-collection__item {\n  border-radius: 0;\n  cursor: pointer;\n}\n.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),\n.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) {\n  color: #fff;\n  text-decoration: underline;\n}\n.tox .tox-statusbar__branding svg {\n  vertical-align: -0.25em;\n}\n.tox:not([dir=rtl]) .tox-statusbar__branding {\n  margin-left: 1ch;\n}\n.tox .tox-statusbar__resize-handle {\n  padding-bottom: 0;\n  padding-right: 0;\n}\n.tox .tox-button::before {\n  display: none;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/ui/tinymce-5-dark/skin.shadowdom.css",
    "content": "body.tox-dialog__disable-scroll {\n  overflow: hidden;\n}\n.tox-fullscreen {\n  border: 0;\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  overscroll-behavior: none;\n  padding: 0;\n  touch-action: pinch-zoom;\n  width: 100%;\n}\n.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {\n  display: none;\n}\n.tox.tox-tinymce.tox-fullscreen,\n.tox-shadowhost.tox-fullscreen {\n  left: 0;\n  position: fixed;\n  top: 0;\n  z-index: 1200;\n}\n.tox.tox-tinymce.tox-fullscreen {\n  background-color: transparent;\n}\n.tox-fullscreen .tox.tox-tinymce-aux,\n.tox-fullscreen ~ .tox.tox-tinymce-aux {\n  z-index: 1201;\n}\n"
  },
  {
    "path": "publishable/assets/js/skins/voyager/Variables.less",
    "content": "// Variables\n// Syntax: <control>-(<sub control>)-<bg|border|text>-(<state>)-(<extra>);\n// Example: @btn-primary-bg-hover-hlight;\n\n@prefix:                         mce;\n\n// Default font\n@font-family:                    \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-size:                      14px;\n@line-height:                    20px;\n@has-gradients:                  false;\n@has-radius:                     false;\n@has-boxshadow:                  false;\n@has-button-borders:             false;\n\n// Text colors\n@text:                           #333333;\n@text-inverse:                   #ffffff;\n@text-disabled:                  #aaaaaa;\n@text-shadow:                    0 1px 1px hsla(hue(@text-inverse), saturation(@text-inverse), lightness(@text-inverse), 0.75);\n@text-error:                     #aa0000;\n\n// Button\n@btn-text:                       #a3afb7;\n@btn-text-shadow:                #ffffff;\n@btn-border-top:                 rgba(0,0,0,0);\n@btn-border-right:               rgba(0,0,0,0);\n@btn-border-bottom:              rgba(0,0,0,0);\n@btn-border-left:                rgba(0,0,0,0);\n@btn-caret-border:               @btn-text;\n@btn-text-disabled:              @text-disabled;\n@btn-box-shadow:                 inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05);\n@btn-box-shadow-active:          inset 0 2px 4px rgba(0, 0, 0, .15), 0 1px 2px rgba(0, 0, 0, .05);\n@btn-box-disabled-opacity:       0.4;\n@btn-bg:                         #ffffff;\n@btn-bg-hlight:                  #ffffff;\n@btn-bg-hover:                   darken(@btn-bg, 5%);\n@btn-bg-hlight-hover:            darken(@btn-bg-hlight, 5%);\n@btn-border-hover:               darken(@btn-bg, 20%);\n@btn-border-active:              darken(@btn-bg, 20%);\n@btn-padding:                    4px 8px;\n\n@btn-primary-bg:                 #0088cc;\n@btn-primary-bg-hlight:          #ffffff;\n@btn-primary-bg-hover:           darken(@btn-primary-bg, 5%);\n@btn-primary-bg-hover-hlight:    darken(@btn-primary-bg-hlight, 5%);\n@btn-primary-text:               #ffffff;\n@btn-primary-text-shadow:        #ff0000;\n@btn-primary-border-top:         mix(@btn-border-top, @btn-primary-bg, 50%);\n@btn-primary-border-right:       mix(@btn-border-right, @btn-primary-bg, 50%);\n@btn-primary-border-bottom:      mix(@btn-border-bottom, @btn-primary-bg, 50%);\n@btn-primary-border-left:        mix(@btn-border-left, @btn-primary-bg, 50%);\n@btn-primary-border:             transparent;\n@btn-primary-border-hover:       transparent;\n\n// Button group\n@btn-group-border-width:         1px;\n\n// Menu\n@menuitem-text:                  #333333;\n@menu-bg:                        #ffffff;\n@menu-margin:                    -1px 0 0;\n@menu-border:                    rgba(0,0,0,0.2);\n@menubar-border:                 mix(@panel-border, @panel-bg, 60%);\n@menuitem-text-inverse:          #ffffff;\n@menubar-bg-active:              darken(@btn-bg, 10%);\n@menuitem-bg-hover:              #0081C2;\n@menuitem-bg-selected:           #0088cc;\n@menuitem-bg-selected-hlight:    #0077b3;\n@menuitem-bg-disabled:           #CCC;\n@menuitem-caret:                 @menuitem-text;\n@menuitem-caret-selected:        @menuitem-text-inverse;\n@menuitem-separator-top:         #cbcbcb;\n@menuitem-separator-bottom:      #ffffff;\n@menuitem-bg-active:             #c8def4;\n@menuitem-text-active:           #333333;\n@menuitem-preview-border-active: #aaaaaa;\n@menubar-menubtn-text:           #333333;\n\n// Panel\n@panel-border:                   #eeeeee;\n@panel-bg:                       #ffffff;\n@panel-bg-hlight:                #ffffff;\n\n// Tabs\n@tab-border:                     #c5c5c5;\n@tab-bg:                         #e3e3e3;\n@tab-bg-hover:                   #fdfdfd;\n@tab-bg-active:                  #fdfdfd;\n@tabs-bg:\t\t\t\t\t\t #ffffff;\n\n// Tooltip\n@tooltip-bg:                     #000;\n@tooltip-text:                   white;\n@tooltip-font-size:              11px;\n\n// Notification\n@notification-font-size:         14px;\n@notification-bg:                #f0f0f0;\n@notification-border:            #cccccc;\n@notification-text:              #333333;\n@notification-success-bg:        #dff0d8;\n@notification-success-border:    #d6e9c6;\n@notification-success-text:      #3c763d;\n@notification-info-bg:           #d9edf7;\n@notification-info-border:       #779ecb;\n@notification-info-text:         #31708f;\n@notification-warning-bg:        #fcf8e3;\n@notification-warning-border:    #faebcc;\n@notification-warning-text:      #8a6d3b;\n@notification-error-bg:          #f2dede;\n@notification-error-border:      #ebccd1;\n@notification-error-text:        #a94442;\n\n// Window\n@window-border:                  #eeeeee;\n@window-head-border:             @window-border;\n@window-head-close:              mix(@text, @window-bg, 60%);\n@window-head-close-hover:        mix(@text, @window-bg, 40%);\n@window-foot-border:             @window-border;\n@window-foot-bg:                 @window-bg;\n@window-fullscreen-bg:           #FFF;\n@window-modalblock-bg:           #000;\n@window-modalblock-opacity:      0.3;\n@window-box-shadow:              0 3px 7px rgba(0, 0, 0, 0.3);\n@window-bg:                      #ffffff;\n@window-title-font-size:         20px;\n\n// Popover\n@popover-bg:                     @window-bg;\n@popover-arrow-width:            10px;\n@popover-arrow:                  @window-bg;\n@popover-arrow-outer-width:      @popover-arrow-width + 1;\n@popover-arrow-outer:            rgba(0, 0, 0, 0.25);\n\n// Floatpanel\n@floatpanel-box-shadow:          0 5px 10px rgba(0, 0, 0, .2);\n\n// Checkbox\n@checkbox-bg:                    @btn-bg;\n@checkbox-bg-hlight:             @btn-bg-hlight;\n@checkbox-box-shadow:            inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05);\n@checkbox-border:                #c5c5c5;\n@checkbox-border-focus:          #59a5e1;\n\n// Path\n@path-text:                      @text;\n@path-bg-focus:                  #666;\n@path-text-focus:                #fff;\n\n// Textbox\n@textbox-text-placeholder:       #aaa;\n@textbox-box-shadow:             inset 0 1px 1px rgba(0, 0, 0, 0.075);\n@textbox-bg:                     #ffffff;\n@textbox-border:                 #c5c5c5;\n@textbox-border-focus:           #59a5e1;\n\n// Selectbox\n@selectbox-bg:                   @textbox-bg;\n@selectbox-border:               @textbox-border;\n\n// Throbber\n@throbber-bg:                    #fff url('img/loader.gif') no-repeat center center;\n\n// Combobox\n@combobox-border:                @textbox-border;\n\n// Colorpicker\n@colorpicker-border:             @textbox-border;\n@colorpicker-hue-bg:             #fff;\n@colorpicker-hue-border:         #333;\n\n// Grid\n@grid-bg-active:                 @menuitem-bg-active;\n@grid-border-active:             #a1a1a1;\n@grid-border:                    #d6d6d6;\n\n// Misc\n@colorbtn-backcolor-bg:          #bbbbbb;\n@iframe-border:                  @panel-border;\n\n// Slider\n@slider-border:                  #aaaaaa;\n@slider-bg:                      #eeeeee;\n@slider-handle-border:           #bbbbbb;\n@slider-handle-bg:               #dddddd;\n\n// Progress\n@progress-border:                #cccccc;\n@progress-bar-bg:                #dfdfdf;\n@progress-bar-bg-hlight:         #cccccc;\n@progress-text:                  #333333;\n@progress-text-shadow:           #ffffff;\n\n// Flow layout\n@flow-layout-spacing:            2px;\n"
  },
  {
    "path": "publishable/assets/js/skins/voyager/fonts/readme.md",
    "content": "Icons are generated and provided by the http://icomoon.io service.\n"
  },
  {
    "path": "publishable/assets/js/skins/voyager/fonts/tinymce-small.json",
    "content": "{\n\t\"IcoMoonType\": \"selection\",\n\t\"icons\": [\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M704 832v-37.004c151.348-61.628 256-193.82 256-346.996 0-212.078-200.576-384-448-384s-448 171.922-448 384c0 153.176 104.654 285.368 256 346.996v37.004h-192l-64-96v224h320v-222.812c-100.9-51.362-170.666-161.54-170.666-289.188 0-176.732 133.718-320 298.666-320 164.948 0 298.666 143.268 298.666 320 0 127.648-69.766 237.826-170.666 289.188v222.812h320v-224l-64 96h-192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57376,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 0,\n\t\t\t\t\"order\": 1,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57376,\n\t\t\t\t\"name\": \"charmap\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 0\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M256 64v896l256-256 256 256v-896h-512zM704 789.49l-192-192-192 192v-661.49h384v661.49z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57363,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 1,\n\t\t\t\t\"order\": 2,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57363,\n\t\t\t\t\"name\": \"bookmark\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 1\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M927.274 230.216l-133.49-133.488c-21.104-21.104-49.232-32.728-79.198-32.728s-58.094 11.624-79.196 32.726l-165.492 165.49c-43.668 43.668-43.668 114.724 0 158.392l2.746 2.746 67.882-67.882-2.746-2.746c-6.132-6.132-6.132-16.494 0-22.626l165.492-165.492c4.010-4.008 8.808-4.608 11.312-4.608s7.302 0.598 11.312 4.61l133.49 133.488c6.132 6.134 6.132 16.498 0.002 22.628l-165.494 165.494c-4.008 4.008-8.806 4.608-11.31 4.608s-7.302-0.6-11.312-4.612l-2.746-2.746-67.88 67.884 2.742 2.742c21.106 21.108 49.23 32.728 79.2 32.728s58.094-11.624 79.196-32.726l165.494-165.492c43.662-43.666 43.662-114.72-0.004-158.39zM551.356 600.644l-67.882 67.882 2.746 2.746c4.008 4.008 4.61 8.806 4.61 11.31 0 2.506-0.598 7.302-4.606 11.314l-165.494 165.49c-4.010 4.010-8.81 4.61-11.314 4.61s-7.304-0.6-11.314-4.61l-133.492-133.486c-4.010-4.010-4.61-8.81-4.61-11.314s0.598-7.3 4.61-11.312l165.49-165.488c4.010-4.012 8.81-4.612 11.314-4.612s7.304 0.6 11.314 4.612l2.746 2.742 67.882-67.88-2.746-2.746c-21.104-21.104-49.23-32.726-79.196-32.726s-58.092 11.624-79.196 32.726l-165.488 165.486c-21.106 21.104-32.73 49.234-32.73 79.198s11.624 58.094 32.726 79.198l133.49 133.49c21.106 21.102 49.232 32.726 79.198 32.726s58.092-11.624 79.196-32.726l165.494-165.492c21.104-21.104 32.722-49.23 32.722-79.196s-11.624-58.094-32.726-79.196l-2.744-2.746zM800 838c-9.724 0-19.45-3.708-26.87-11.13l-128-127.998c-14.844-14.84-14.844-38.898 0-53.738 14.84-14.844 38.896-14.844 53.736 0l128 128c14.844 14.84 14.844 38.896 0 53.736-7.416 7.422-17.142 11.13-26.866 11.13zM608 960c-17.674 0-32-14.326-32-32v-128c0-17.674 14.326-32 32-32s32 14.326 32 32v128c0 17.674-14.326 32-32 32zM928 640h-128c-17.674 0-32-14.326-32-32s14.326-32 32-32h128c17.674 0 32 14.326 32 32s-14.326 32-32 32zM224 186c9.724 0 19.45 3.708 26.87 11.13l128 128c14.842 14.84 14.842 38.898 0 53.738-14.84 14.844-38.898 14.844-53.738 0l-128-128c-14.842-14.84-14.842-38.898 0-53.738 7.418-7.422 17.144-11.13 26.868-11.13zM416 64c17.674 0 32 14.326 32 32v128c0 17.674-14.326 32-32 32s-32-14.326-32-32v-128c0-17.674 14.326-32 32-32zM96 384h128c17.674 0 32 14.326 32 32s-14.326 32-32 32h-128c-17.674 0-32-14.326-32-32s14.326-32 32-32z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57362,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 2,\n\t\t\t\t\"order\": 3,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57362,\n\t\t\t\t\"name\": \"link\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 2\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M927.274 230.216l-133.49-133.488c-21.104-21.104-49.232-32.728-79.198-32.728s-58.094 11.624-79.196 32.726l-165.492 165.49c-43.668 43.668-43.668 114.724 0 158.392l2.746 2.746 67.882-67.882-2.746-2.746c-6.132-6.132-6.132-16.494 0-22.626l165.492-165.492c4.010-4.008 8.808-4.608 11.312-4.608s7.302 0.598 11.312 4.61l133.49 133.488c6.132 6.134 6.132 16.498 0.002 22.628l-165.494 165.494c-4.008 4.008-8.806 4.608-11.31 4.608s-7.302-0.6-11.312-4.612l-2.746-2.746-67.88 67.884 2.742 2.742c21.106 21.108 49.23 32.728 79.2 32.728s58.094-11.624 79.196-32.726l165.494-165.492c43.662-43.666 43.662-114.72-0.004-158.39zM551.356 600.644l-67.882 67.882 2.746 2.746c4.008 4.008 4.61 8.806 4.61 11.31 0 2.506-0.598 7.302-4.606 11.314l-165.494 165.49c-4.010 4.010-8.81 4.61-11.314 4.61s-7.304-0.6-11.314-4.61l-133.492-133.486c-4.010-4.010-4.61-8.81-4.61-11.314s0.598-7.3 4.61-11.312l165.49-165.488c4.010-4.012 8.81-4.612 11.314-4.612s7.304 0.6 11.314 4.612l2.746 2.742 67.882-67.88-2.746-2.746c-21.104-21.104-49.23-32.726-79.196-32.726s-58.092 11.624-79.196 32.726l-165.488 165.486c-21.106 21.104-32.73 49.234-32.73 79.198s11.624 58.094 32.726 79.198l133.49 133.49c21.106 21.102 49.232 32.726 79.198 32.726s58.092-11.624 79.196-32.726l165.494-165.492c21.104-21.104 32.722-49.23 32.722-79.196s-11.624-58.094-32.726-79.196l-2.744-2.746zM352 710c-9.724 0-19.45-3.71-26.87-11.128-14.84-14.84-14.84-38.898 0-53.738l320-320c14.84-14.84 38.896-14.84 53.736 0 14.844 14.84 14.844 38.9 0 53.74l-320 320c-7.416 7.416-17.142 11.126-26.866 11.126z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57361,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 3,\n\t\t\t\t\"order\": 4,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57361,\n\t\t\t\t\"name\": \"unlink\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 3\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M576 281.326v-217.326l336.002 336-336.002 336v-222.096c-390.906-9.17-315 247.096-256 446.096-288-320-212.092-690.874 256-678.674z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57360,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 4,\n\t\t\t\t\"order\": 5,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57360,\n\t\t\t\t\"name\": \"redo\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 4\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M704 960c59-199 134.906-455.266-256-446.096v222.096l-336.002-336 336.002-336v217.326c468.092-12.2 544 358.674 256 678.674z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57359,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 5,\n\t\t\t\t\"order\": 6,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57359,\n\t\t\t\t\"name\": \"undo\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 5\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M256.428 424.726c105.8 0 191.572 91.17 191.572 203.638 0 112.464-85.772 203.636-191.572 203.636-105.802 0-191.572-91.17-191.572-203.636l-0.856-29.092c0-224.93 171.54-407.272 383.144-407.272v116.364c-73.1 0-141.826 30.26-193.516 85.204-9.954 10.578-19.034 21.834-27.224 33.656 9.784-1.64 19.806-2.498 30.024-2.498zM768.428 424.726c105.8 0 191.572 91.17 191.572 203.638 0 112.464-85.772 203.636-191.572 203.636-105.802 0-191.572-91.17-191.572-203.636l-0.856-29.092c0-224.93 171.54-407.272 383.144-407.272v116.364c-73.1 0-141.826 30.26-193.516 85.204-9.956 10.578-19.036 21.834-27.224 33.656 9.784-1.64 19.806-2.498 30.024-2.498z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57358,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 6,\n\t\t\t\t\"order\": 7,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57358,\n\t\t\t\t\"name\": \"blockquote\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 6\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192h896v128h-896zM384 576h576v128h-576zM384 384h576v128h-576zM64 768h896v128h-896zM64 384l224 160-224 160z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57356,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 7,\n\t\t\t\t\"order\": 8,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57356,\n\t\t\t\t\"name\": \"indent\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 7\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192h896v128h-896zM64 576h576v128h-576zM64 384h576v128h-576zM64 768h896v128h-896zM960 384l-224 160 224 160z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57357,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 8,\n\t\t\t\t\"order\": 9,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57357,\n\t\t\t\t\"name\": \"outdent\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 8\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M384 128h576v128h-576zM384 448h576v128h-576zM384 768h576v128h-576zM320 530v-146h-64v-320h-128v64h64v256h-64v64h128v50l-128 60v146h128v64h-128v64h128v64h-128v64h192v-320h-128v-50z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57355,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 9,\n\t\t\t\t\"order\": 10,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57355,\n\t\t\t\t\"name\": \"numlist\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 9\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M384 128h576v128h-576zM384 448h576v128h-576zM384 768h576v128h-576zM128 192c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM128 512c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM128 832c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57354,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 10,\n\t\t\t\t\"order\": 11,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57354,\n\t\t\t\t\"name\": \"bullist\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 10\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M888 384h-56v-256h64v-64h-320v64h64v256h-256v-256h64v-64h-320v64h64v256h-56c-39.6 0-72 32.4-72 72v432c0 39.6 32.4 72 72 72h240c39.6 0 72-32.4 72-72v-312h128v312c0 39.6 32.4 72 72 72h240c39.6 0 72-32.4 72-72v-432c0-39.6-32.4-72-72-72zM348 896h-184c-19.8 0-36-14.4-36-32s16.2-32 36-32h184c19.8 0 36 14.4 36 32s-16.2 32-36 32zM544 512h-64c-17.6 0-32-14.4-32-32s14.4-32 32-32h64c17.6 0 32 14.4 32 32s-14.4 32-32 32zM860 896h-184c-19.8 0-36-14.4-36-32s16.2-32 36-32h184c19.8 0 36 14.4 36 32s-16.2 32-36 32z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57353,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 11,\n\t\t\t\t\"order\": 12,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57353,\n\t\t\t\t\"name\": \"searchreplace\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 11\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M704 384v-160c0-17.6-14.4-32-32-32h-160v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-160c-17.602 0-32 14.4-32 32v512c0 17.6 14.398 32 32 32h224v192h384l192-192v-384h-192zM320 128.114c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114l0 63.886h-128v-63.886zM192 320v-64h384v64h-384zM704 869.49v-101.49h101.49l-101.49 101.49zM832 704h-192v192h-256v-448h448v256z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57352,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 12,\n\t\t\t\t\"order\": 13,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57352,\n\t\t\t\t\"name\": \"paste\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 12\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M832 320h-192v-64l-192-192h-384v704h384v192h576v-448l-192-192zM832 410.51l101.49 101.49h-101.49v-101.49zM448 154.51l101.49 101.49h-101.49v-101.49zM128 128h256v192h192v384h-448v-576zM960 896h-448v-128h128v-384h128v192h192v320z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57393,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 13,\n\t\t\t\t\"order\": 14,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57393,\n\t\t\t\t\"name\": \"copy\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 13\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M960 512h-265.876c-50.078-35.42-114.43-54.86-182.124-54.86-89.206 0-164.572-50.242-164.572-109.712 0-59.47 75.366-109.714 164.572-109.714 75.058 0 140.308 35.576 159.12 82.286h113.016c-7.93-50.644-37.58-97.968-84.058-132.826-50.88-38.16-117.676-59.174-188.078-59.174-70.404 0-137.196 21.014-188.074 59.174-54.788 41.090-86.212 99.502-86.212 160.254s31.424 119.164 86.212 160.254c1.956 1.466 3.942 2.898 5.946 4.316h-265.872v64h512.532c58.208 17.106 100.042 56.27 100.042 100.572 0 59.468-75.368 109.71-164.572 109.71-75.060 0-140.308-35.574-159.118-82.286h-113.016c7.93 50.64 37.582 97.968 84.060 132.826 50.876 38.164 117.668 59.18 188.072 59.18 70.402 0 137.198-21.016 188.074-59.174 54.79-41.090 86.208-99.502 86.208-160.254 0-35.298-10.654-69.792-30.294-100.572h204.012v-64z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57389,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 19,\n\t\t\t\t\"order\": 15,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57389,\n\t\t\t\t\"name\": \"strikethrough\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 14\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M192 832h576v64h-576v-64zM640 128v384c0 31.312-14.7 61.624-41.39 85.352-30.942 27.502-73.068 42.648-118.61 42.648-45.544 0-87.668-15.146-118.608-42.648-26.692-23.728-41.392-54.040-41.392-85.352v-384h-128v384c0 141.382 128.942 256 288 256s288-114.618 288-256v-384h-128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57388,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 20,\n\t\t\t\t\"order\": 16,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57388,\n\t\t\t\t\"name\": \"underline\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 15\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M832 128v64h-144l-256 640h144v64h-448v-64h144l256-640h-144v-64h448z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57387,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 21,\n\t\t\t\t\"order\": 17,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57387,\n\t\t\t\t\"name\": \"italic\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 16\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M625.442 494.182c48.074-38.15 78.558-94.856 78.558-158.182 0-114.876-100.29-208-224-208h-224v768h288c123.712 0 224-93.124 224-208 0-88.196-59.118-163.562-142.558-193.818zM384 304c0-26.51 21.49-48 48-48h67.204c42.414 0 76.796 42.98 76.796 96s-34.382 96-76.796 96h-115.204v-144zM547.2 768h-115.2c-26.51 0-48-21.49-48-48v-144h163.2c42.418 0 76.8 42.98 76.8 96s-34.382 96-76.8 96z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57386,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 22,\n\t\t\t\t\"order\": 18,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57386,\n\t\t\t\t\"name\": \"bold\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 17\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M850.746 242.746l-133.492-133.49c-24.888-24.892-74.054-45.256-109.254-45.256h-416c-35.2 0-64 28.8-64 64v768c0 35.2 28.8 64 64 64h640c35.2 0 64-28.8 64-64v-544c0-35.2-20.366-84.364-45.254-109.254zM805.49 287.998c6.792 6.796 13.792 19.162 18.894 32.002h-184.384v-184.386c12.84 5.1 25.204 12.1 32 18.896l133.49 133.488zM831.884 896h-639.77c-0.040-0.034-0.082-0.076-0.114-0.116v-767.77c0.034-0.040 0.076-0.082 0.114-0.114h383.886v256h256v511.884c-0.034 0.040-0.076 0.082-0.116 0.116z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57345,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 23,\n\t\t\t\t\"order\": 19,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57345,\n\t\t\t\t\"name\": \"newdocument\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 18\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M960 880v-591.938l-223.938-224.062h-592.062c-44.182 0-80 35.816-80 80v736c0 44.184 35.818 80 80 80h736c44.184 0 80-35.816 80-80zM576 192h64v192h-64v-192zM704 832h-384v-255.882c0.034-0.042 0.076-0.082 0.116-0.118h383.77c0.040 0.036 0.082 0.076 0.116 0.118l-0.002 255.882zM832 832h-64v-256c0-35.2-28.8-64-64-64h-384c-35.2 0-64 28.8-64 64v256h-64v-640h64v192c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-171.010l128 128.072v490.938z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57344,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 24,\n\t\t\t\t\"order\": 20,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57344,\n\t\t\t\t\"name\": \"save\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 19\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192v704h896v-704h-896zM384 640v-128h256v128h-256zM640 704v128h-256v-128h256zM640 320v128h-256v-128h256zM320 320v128h-192v-128h192zM128 512h192v128h-192v-128zM704 512h192v128h-192v-128zM704 448v-128h192v128h-192zM128 704h192v128h-192v-128zM704 832v-128h192v128h-192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57371,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 25,\n\t\t\t\t\"order\": 21,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57371,\n\t\t\t\t\"name\": \"table\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 20\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M512 140c99.366 0 192.782 38.694 263.042 108.956s108.958 163.678 108.958 263.044-38.696 192.782-108.958 263.042-163.676 108.958-263.042 108.958-192.782-38.696-263.044-108.958-108.956-163.676-108.956-263.042 38.694-192.782 108.956-263.044 163.678-108.956 263.044-108.956zM512 64c-247.424 0-448 200.576-448 448s200.576 448 448 448 448-200.576 448-448-200.576-448-448-448v0zM320 384c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM576 384c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM512 656c-101.84 0-192.56-36.874-251.166-94.328 23.126 117.608 126.778 206.328 251.166 206.328 124.388 0 228.040-88.72 251.168-206.328-58.608 57.454-149.328 94.328-251.168 94.328z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57377,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 26,\n\t\t\t\t\"order\": 22,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57377,\n\t\t\t\t\"name\": \"emoticons\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 21\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M480 384l-192-192 128-128h-352v352l128-128 192 192zM640 480l192-192 128 128v-352h-352l128 128-192 192zM544 640l192 192-128 128h352v-352l-128 128-192-192zM384 544l-192 192-128-128v352h352l-128-128 192-192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57379,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 27,\n\t\t\t\t\"order\": 23,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57379,\n\t\t\t\t\"name\": \"fullscreen\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 22\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 448h896v128h-896z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57372,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 28,\n\t\t\t\t\"order\": 24,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57372,\n\t\t\t\t\"name\": \"hr\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 23\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 768h512v128h-512v-128zM768 192h-220.558l-183.766 512h-132.288l183.762-512h-223.15v-128h576v128zM929.774 896l-129.774-129.774-129.774 129.774-62.226-62.226 129.774-129.774-129.774-129.774 62.226-62.226 129.774 129.774 129.774-129.774 62.226 62.226-129.774 129.774 129.774 129.774-62.226 62.226z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57373,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 29,\n\t\t\t\t\"order\": 25,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57373,\n\t\t\t\t\"name\": \"removefromat\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 24\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M256 128h512v128h-512v-128zM896 320h-768c-35.2 0-64 28.8-64 64v256c0 35.2 28.796 64 64 64h128v192h512v-192h128c35.2 0 64-28.8 64-64v-256c0-35.2-28.8-64-64-64zM704 832h-384v-256h384v256zM910.4 416c0 25.626-20.774 46.4-46.398 46.4s-46.402-20.774-46.402-46.4 20.778-46.4 46.402-46.4c25.626 0 46.398 20.774 46.398 46.4z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57378,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 30,\n\t\t\t\t\"order\": 26,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57378,\n\t\t\t\t\"name\": \"print\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 25\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M384 128c-123.712 0-224 100.288-224 224s100.288 224 224 224v320h128v-640h64v640h128v-640h128v-128h-448z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57390,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 31,\n\t\t\t\t\"order\": 27,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57390,\n\t\t\t\t\"name\": \"visualchars\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 26\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M448 128c-123.712 0-224 100.288-224 224s100.288 224 224 224v320h128v-640h64v640h128v-640h128v-128h-448zM64 896l224-192-224-192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57391,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 32,\n\t\t\t\t\"order\": 28,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57391,\n\t\t\t\t\"name\": \"ltr\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 27\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M416 704l-192-192 192-192-64-64-256 256 256 256zM672 256l-64 64 192 192-192 192 64 64 256-256z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57367,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 38,\n\t\t\t\t\"order\": 29,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57367,\n\t\t\t\t\"name\": \"code\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 28\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M448 704h128v128h-128v-128zM704 256c35.346 0 64 28.654 64 64v166l-228 154h-92v-64l192-128v-64h-320v-128h384zM512 64c-119.666 0-232.166 46.6-316.784 131.216-84.614 84.618-131.216 197.118-131.216 316.784 0 119.664 46.602 232.168 131.216 316.784 84.618 84.616 197.118 131.216 316.784 131.216 119.664 0 232.168-46.6 316.784-131.216 84.616-84.616 131.216-197.12 131.216-316.784 0-119.666-46.6-232.166-131.216-316.784-84.616-84.616-197.12-131.216-316.784-131.216z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57366,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 39,\n\t\t\t\t\"order\": 30,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57366,\n\t\t\t\t\"name\": \"help\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 29\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M896 128h-768c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h768c35.2 0 64-28.8 64-64v-640c0-35.2-28.8-64-64-64zM896 831.884c-0.012 0.014-0.030 0.028-0.042 0.042l-191.958-319.926-160 128-224-288-191.968 479.916c-0.010-0.010-0.022-0.022-0.032-0.032v-639.77c0.034-0.040 0.076-0.082 0.114-0.114h767.77c0.040 0.034 0.082 0.076 0.116 0.116v639.768zM640 352c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96-53.019 0-96 42.981-96 96z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57364,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 40,\n\t\t\t\t\"order\": 31,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57364,\n\t\t\t\t\"name\": \"image\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 30\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M896 128h-768c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h768c35.2 0 64-28.8 64-64v-640c0-35.2-28.8-64-64-64zM256 832h-128v-128h128v128zM256 576h-128v-128h128v128zM256 320h-128v-128h128v128zM704 832h-384v-640h384v640zM896 832h-128v-128h128v128zM896 576h-128v-128h128v128zM896 320h-128v-128h128v128zM384 320v384l288-192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57365,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 41,\n\t\t\t\t\"order\": 32,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57365,\n\t\t\t\t\"name\": \"media\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 31\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M77.798 304.624l81.414 50.882c50.802-81.114 128.788-143.454 221.208-174.246l-30.366-91.094c-113.748 37.898-209.728 114.626-272.256 214.458zM673.946 90.166l-30.366 91.094c92.422 30.792 170.404 93.132 221.208 174.248l81.412-50.882c-62.526-99.834-158.506-176.562-272.254-214.46zM607.974 704.008c-4.808 0-9.692-1.090-14.286-3.386l-145.688-72.844v-211.778c0-17.672 14.328-32 32-32s32 14.328 32 32v172.222l110.31 55.156c15.806 7.902 22.214 27.124 14.31 42.932-5.604 11.214-16.908 17.696-28.646 17.698zM512 192c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.078 0 384-171.922 384-384 0-212.078-171.922-384-384-384zM512 864c-159.058 0-288-128.942-288-288s128.942-288 288-288c159.058 0 288 128.942 288 288 0 159.058-128.942 288-288 288z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57368,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 42,\n\t\t\t\t\"order\": 33,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57368,\n\t\t\t\t\"name\": \"insertdatetime\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 32\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 455.746c45.318-49.92 97.162-92.36 153.272-125.124 90.332-52.744 192.246-80.622 294.728-80.622 102.48 0 204.396 27.878 294.726 80.624 56.112 32.764 107.956 75.204 153.274 125.124v-117.432c-33.010-28.118-68.124-53.14-104.868-74.594-105.006-61.314-223.658-93.722-343.132-93.722s-238.128 32.408-343.134 93.72c-36.742 21.454-71.856 46.478-104.866 74.596v117.43zM512 320c-183.196 0-345.838 100.556-448 256 102.162 155.448 264.804 256 448 256 183.196 0 345.838-100.552 448-256-102.162-155.444-264.804-256-448-256zM512 512c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.348 28.654-64 64-64s64 28.652 64 64zM728.066 696.662c-67.434 39.374-140.128 59.338-216.066 59.338s-148.632-19.964-216.066-59.338c-51.554-30.104-98.616-71.31-138.114-120.662 39.498-49.35 86.56-90.558 138.116-120.66 13.276-7.752 26.758-14.74 40.426-20.982-10.512 23.742-16.362 50.008-16.362 77.642 0 106.040 85.962 192 192 192 106.040 0 192-85.96 192-192 0-27.634-5.85-53.9-16.36-77.642 13.668 6.244 27.15 13.23 40.426 20.982 51.554 30.102 98.616 71.31 138.116 120.66-39.498 49.352-86.56 90.558-138.116 120.662z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57369,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 43,\n\t\t\t\t\"order\": 34,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57369,\n\t\t\t\t\"name\": \"preview\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 33\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M651.168 283.834c-24.612-81.962-28.876-91.834-107.168-91.834h-64c-79.618 0-82.664 10.152-108.418 96 0 0.002 0 0.002-0.002 0.004l-143.998 479.996h113.636l57.6-192h226.366l57.6 192h113.63l-145.246-484.166zM437.218 448l38.4-136c10.086-33.618 36.38-30 36.38-30s26.294-3.618 36.38 30h0.004l38.4 136h-149.564z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57370,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 44,\n\t\t\t\t\"order\": 35,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57370,\n\t\t\t\t\"name\": \"forecolor\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 34\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M576 64c247.424 0 448 200.576 448 448s-200.576 448-448 448v-96c94.024 0 182.418-36.614 248.902-103.098 66.484-66.484 103.098-154.878 103.098-248.902 0-94.022-36.614-182.418-103.098-248.902-66.484-66.484-154.878-103.098-248.902-103.098-94.022 0-182.418 36.614-248.902 103.098-51.14 51.138-84.582 115.246-97.306 184.902h186.208l-224 256-224-256h164.57c31.060-217.102 217.738-384 443.43-384zM768 448v128h-256v-320h128v192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57384,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 45,\n\t\t\t\t\"order\": 36,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57384,\n\t\t\t\t\"name\": \"restoredraft\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 35\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M1024 592.458v-160.916l-159.144-15.914c-8.186-30.042-20.088-58.548-35.21-84.98l104.596-127.838-113.052-113.050-127.836 104.596c-26.434-15.124-54.942-27.026-84.982-35.208l-15.914-159.148h-160.916l-15.914 159.146c-30.042 8.186-58.548 20.086-84.98 35.208l-127.838-104.594-113.050 113.050 104.596 127.836c-15.124 26.432-27.026 54.94-35.21 84.98l-159.146 15.916v160.916l159.146 15.914c8.186 30.042 20.086 58.548 35.21 84.982l-104.596 127.836 113.048 113.048 127.838-104.596c26.432 15.124 54.94 27.028 84.98 35.21l15.916 159.148h160.916l15.914-159.144c30.042-8.186 58.548-20.088 84.982-35.21l127.836 104.596 113.048-113.048-104.596-127.836c15.124-26.434 27.028-54.942 35.21-84.98l159.148-15.92zM704 576l-128 128h-128l-128-128v-128l128-128h128l128 128v128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57346,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 46,\n\t\t\t\t\"order\": 37,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57346,\n\t\t\t\t\"name\": \"fullpage\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 36\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M768 206v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57375,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 47,\n\t\t\t\t\"order\": 38,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57375,\n\t\t\t\t\"name\": \"superscript\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 37\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M768 910v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57374,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 48,\n\t\t\t\t\"order\": 39,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57374,\n\t\t\t\t\"name\": \"subscript\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 38\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M704 384v-160c0-17.6-14.4-32-32-32h-160v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-160c-17.602 0-32 14.4-32 32v512c0 17.6 14.398 32 32 32h224v192h576v-576h-192zM320 128.114c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114l0 63.886h-128v-63.886zM192 320v-64h384v64h-384zM832 896h-448v-448h448v448zM448 512v128h32l32-64h64v192h-48v64h160v-64h-48v-192h64l32 64h32v-128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"tags\": [\n\t\t\t\t\t\"pastetext\"\n\t\t\t\t],\n\t\t\t\t\"defaultCode\": 57397,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 49,\n\t\t\t\t\"order\": 40,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57397,\n\t\t\t\t\"name\": \"pastetext\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 39\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M768 256h64v64h-64zM640 384h64v64h-64zM640 512h64v64h-64zM640 640h64v64h-64zM512 512h64v64h-64zM512 640h64v64h-64zM384 640h64v64h-64zM768 384h64v64h-64zM768 512h64v64h-64zM768 640h64v64h-64zM768 768h64v64h-64zM640 768h64v64h-64zM512 768h64v64h-64zM384 768h64v64h-64zM256 768h64v64h-64z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"tags\": [\n\t\t\t\t\t\"resize\",\n\t\t\t\t\t\"dots\"\n\t\t\t\t],\n\t\t\t\t\"defaultCode\": 57394,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 50,\n\t\t\t\t\"order\": 41,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57394,\n\t\t\t\t\"name\": \"resize\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 40\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M928 128h-416l-32-64h-352l-64 128h896zM840.34 704h87.66l32-448h-896l64 640h356.080c-104.882-37.776-180.080-138.266-180.080-256 0-149.982 122.018-272 272-272 149.98 0 272 122.018 272 272 0 21.678-2.622 43.15-7.66 64zM874.996 849.75l-134.496-110.692c17.454-28.922 27.5-62.814 27.5-99.058 0-106.040-85.96-192-192-192s-192 85.96-192 192 85.96 192 192 192c36.244 0 70.138-10.046 99.058-27.5l110.692 134.496c22.962 26.678 62.118 28.14 87.006 3.252l5.492-5.492c24.888-24.888 23.426-64.044-3.252-87.006zM576 764c-68.484 0-124-55.516-124-124s55.516-124 124-124 124 55.516 124 124-55.516 124-124 124z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"tags\": [\n\t\t\t\t\t\"browse\"\n\t\t\t\t],\n\t\t\t\t\"defaultCode\": 57396,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 51,\n\t\t\t\t\"order\": 42,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57396,\n\t\t\t\t\"name\": \"browse\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 41\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M864.408 670.132c-46.47-46.47-106.938-68.004-161.082-62.806l-63.326-63.326 192-192c0 0 128-128 0-256l-320 320-320-320c-128 128 0 256 0 256l192 192-63.326 63.326c-54.144-5.198-114.61 16.338-161.080 62.806-74.98 74.98-85.112 186.418-22.626 248.9 62.482 62.482 173.92 52.354 248.9-22.626 46.47-46.468 68.002-106.938 62.806-161.080l63.326-63.326 63.328 63.328c-5.196 54.144 16.336 114.61 62.806 161.078 74.978 74.98 186.418 85.112 248.898 22.626 62.488-62.482 52.356-173.918-22.624-248.9zM353.124 758.578c-2.212 24.332-15.020 49.826-35.14 69.946-22.212 22.214-51.080 35.476-77.218 35.476-10.524 0-25.298-2.228-35.916-12.848-21.406-21.404-17.376-73.132 22.626-113.136 22.212-22.214 51.080-35.476 77.218-35.476 10.524 0 25.298 2.228 35.916 12.848 13.112 13.11 13.47 32.688 12.514 43.19zM512 608c-35.346 0-64-28.654-64-64s28.654-64 64-64 64 28.654 64 64-28.654 64-64 64zM819.152 851.152c-10.62 10.62-25.392 12.848-35.916 12.848-26.138 0-55.006-13.262-77.218-35.476-20.122-20.12-32.928-45.614-35.138-69.946-0.958-10.502-0.6-30.080 12.514-43.192 10.618-10.622 25.39-12.848 35.916-12.848 26.136 0 55.006 13.262 77.216 35.474 40.004 40.008 44.032 91.736 22.626 113.14z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57351,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 14,\n\t\t\t\t\"order\": 43,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57351,\n\t\t\t\t\"name\": \"cut\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 42\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192h896v128h-896zM64 576h896v128h-896zM64 384h896v128h-896zM64 768h896v128h-896z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57350,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 15,\n\t\t\t\t\"order\": 44,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57350,\n\t\t\t\t\"name\": \"alignjustify\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 43\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192h896v128h-896zM64 576h896v128h-896zM256 384h512v128h-512zM256 768h512v128h-512z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57348,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 16,\n\t\t\t\t\"order\": 45,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57348,\n\t\t\t\t\"name\": \"aligncenter\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 44\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192h896v128h-896zM64 576h896v128h-896zM384 384h576v128h-576zM384 768h576v128h-576z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57349,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 17,\n\t\t\t\t\"order\": 46,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57349,\n\t\t\t\t\"name\": \"alignright\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 45\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192h896v128h-896zM64 576h896v128h-896zM64 384h576v128h-576zM64 768h576v128h-576z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57347,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 18,\n\t\t\t\t\"order\": 47,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57347,\n\t\t\t\t\"name\": \"alignleft\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 46\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M320 128c-123.712 0-224 100.288-224 224s100.288 224 224 224v320h128v-640h64v640h128v-640h128v-128h-448zM960 512l-224 192 224 192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57392,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 33,\n\t\t\t\t\"order\": 48,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57392,\n\t\t\t\t\"name\": \"rtl\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 47\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M512 384h128v64h-128zM512 768h128v64h-128zM576 576h128v64h-128zM768 576v192h-64v64h128v-256zM384 576h128v64h-128zM320 768h128v64h-128zM320 384h128v64h-128zM192 192v256h64v-192h64v-64zM704 448h128v-256h-64v192h-64zM64 64v896h896v-896h-896zM896 896h-768v-768h768v768zM192 576v256h64v-192h64v-64zM576 192h128v64h-128zM384 192h128v64h-128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57382,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 34,\n\t\t\t\t\"order\": 49,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57382,\n\t\t\t\t\"name\": \"template\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 48\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M816 64l16 384h-640l16-384h32l16 320h512l16-320h32zM208 960l-16-320h640l-16 320h-32l-16-256h-512l-16 256h-32zM64 512h128v64h-128zM256 512h128v64h-128zM448 512h128v64h-128zM640 512h128v64h-128zM832 512h128v64h-128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57383,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 35,\n\t\t\t\t\"order\": 50,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57383,\n\t\t\t\t\"name\": \"pagebreak\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 49\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M960 128v-64h-192c-35.202 0-64 28.8-64 64v320c0 15.856 5.858 30.402 15.496 41.614l-303.496 260.386-142-148-82 70 224 288 416-448h128v-64h-192v-320h192zM256 512h64v-384c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v384h64v-192h128v192zM128 256v-128h128v128h-128zM640 448v-96c0-35.2-8.8-64-44-64 35.2 0 44-28.8 44-64v-96c0-35.2-28.8-64-64-64h-192v448h192c35.2 0 64-28.8 64-64zM448 128h128v128h-128v-128zM448 320h128v128h-128v-128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57380,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 36,\n\t\t\t\t\"order\": 51,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57380,\n\t\t\t\t\"name\": \"spellcheck\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 50\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M448 512h-128v-128h128v-128h128v128h128v128h-128v128h-128v-128zM960 576v320h-896v-320h128v192h640v-192h128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57381,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 37,\n\t\t\t\t\"order\": 52,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57381,\n\t\t\t\t\"name\": \"nonbreaking\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 51\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M256 352v-128c0-53.020 42.98-96 96-96h32v-128h-32c-123.712 0-224 100.288-224 224v128c0 53.020-42.98 96-96 96h-32v128h32c53.020 0 96 42.98 96 96v128c0 123.71 100.288 224 224 224h32v-128h-32c-53.020 0-96-42.98-96-96v-128c0-62.684-25.758-119.342-67.254-160 41.496-40.658 67.254-97.316 67.254-160z\",\n\t\t\t\t\t\"M1024 352v-128c0-53.020-42.98-96-96-96h-32v-128h32c123.71 0 224 100.288 224 224v128c0 53.020 42.98 96 96 96h32v128h-32c-53.020 0-96 42.98-96 96v128c0 123.71-100.29 224-224 224h-32v-128h32c53.020 0 96-42.98 96-96v-128c0-62.684 25.758-119.342 67.254-160-41.496-40.658-67.254-97.316-67.254-160z\",\n\t\t\t\t\t\"M768 320.882c0 70.692-57.308 128-128 128s-128-57.308-128-128c0-70.692 57.308-128 128-128s128 57.308 128 128z\",\n\t\t\t\t\t\"M640 511.118c-70.692 0-128 57.308-128 128 0 68.732 32 123.216 130.156 127.852-29.19 41.126-73.156 57.366-130.156 62.7v76c0 0 256 22.332 256-266.55-0.25-70.694-57.306-128.002-128-128.002z\"\n\t\t\t\t],\n\t\t\t\t\"width\": 1280,\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"tags\": [\n\t\t\t\t\t\"code\",\n\t\t\t\t\t\"semicolon\",\n\t\t\t\t\t\"curly-braces\"\n\t\t\t\t],\n\t\t\t\t\"grid\": 16\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"order\": 1,\n\t\t\t\t\"id\": 0,\n\t\t\t\t\"prevSize\": 16,\n\t\t\t\t\"code\": 58883,\n\t\t\t\t\"name\": \"codesample\"\n\t\t\t},\n\t\t\t\"setIdx\": 1,\n\t\t\t\"setId\": 1,\n\t\t\t\"iconIdx\": 0\n\t\t}\n\t],\n\t\"height\": 1024,\n\t\"metadata\": {\n\t\t\"name\": \"tinymce-small\"\n\t},\n\t\"preferences\": {\n\t\t\"showGlyphs\": true,\n\t\t\"showQuickUse\": true,\n\t\t\"showQuickUse2\": true,\n\t\t\"showSVGs\": true,\n\t\t\"fontPref\": {\n\t\t\t\"prefix\": \"icon-\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"fontFamily\": \"tinymce-small\",\n\t\t\t\t\"majorVersion\": 1,\n\t\t\t\t\"minorVersion\": 0\n\t\t\t},\n\t\t\t\"metrics\": {\n\t\t\t\t\"emSize\": 1024,\n\t\t\t\t\"baseline\": 6.25,\n\t\t\t\t\"whitespace\": 50\n\t\t\t},\n\t\t\t\"showMetrics\": false,\n\t\t\t\"showMetadata\": false,\n\t\t\t\"showVersion\": false,\n\t\t\t\"embed\": false\n\t\t},\n\t\t\"imagePref\": {\n\t\t\t\"prefix\": \"icon-\",\n\t\t\t\"png\": true,\n\t\t\t\"useClassSelector\": true,\n\t\t\t\"color\": 4473924,\n\t\t\t\"bgColor\": 16777215\n\t\t},\n\t\t\"historySize\": 100,\n\t\t\"showCodes\": true\n\t}\n}"
  },
  {
    "path": "publishable/assets/js/skins/voyager/fonts/tinymce.json",
    "content": "{\n\t\"selection\": [\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58882,\n\t\t\t\"name\": \"invert\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 0,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57396,\n\t\t\t\"name\": \"browse\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57394,\n\t\t\t\"name\": \"resize\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 2,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57393,\n\t\t\t\"name\": \"copy\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 3,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57392,\n\t\t\t\"name\": \"rtl\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 4,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57391,\n\t\t\t\"name\": \"ltr\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 5,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57390,\n\t\t\t\"name\": \"visualchars\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 6,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57389,\n\t\t\t\"name\": \"strikethrough\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 7,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57388,\n\t\t\t\"name\": \"underline\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 8,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57387,\n\t\t\t\"name\": \"italic\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 9,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57386,\n\t\t\t\"name\": \"bold\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 11,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57384,\n\t\t\t\"name\": \"restoredraft\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 12,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57383,\n\t\t\t\"name\": \"pagebreak\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 13,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57382,\n\t\t\t\"name\": \"template\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 14,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57381,\n\t\t\t\"name\": \"nonbreaking\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 15,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57380,\n\t\t\t\"name\": \"spellchecker\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 19,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57376,\n\t\t\t\"name\": \"charmap\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 20,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57375,\n\t\t\t\"name\": \"sup\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 21,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57374,\n\t\t\t\"name\": \"sub\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 22,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57373,\n\t\t\t\"name\": \"removeformat\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 23,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57372,\n\t\t\t\"name\": \"hr\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 24,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57371,\n\t\t\t\"name\": \"table\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 25,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57370,\n\t\t\t\"name\": \"forecolor\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 26,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57369,\n\t\t\t\"name\": \"preview\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 27,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57368,\n\t\t\t\"name\": \"inserttime\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 28,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57367,\n\t\t\t\"name\": \"code\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 29,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57366,\n\t\t\t\"name\": \"help\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 30,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57365,\n\t\t\t\"name\": \"media\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 31,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57364,\n\t\t\t\"name\": \"image\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 32,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57363,\n\t\t\t\"name\": \"anchor\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 33,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57362,\n\t\t\t\"name\": \"unlink\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 34,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57361,\n\t\t\t\"name\": \"link\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 38,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57357,\n\t\t\t\"name\": \"outdent\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 39,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57356,\n\t\t\t\"name\": \"indent\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 40,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57355,\n\t\t\t\"name\": \"numlist\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 41,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57354,\n\t\t\t\"name\": \"bullist\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 42,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57353,\n\t\t\t\"name\": \"searchreplace\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 43,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57352,\n\t\t\t\"name\": \"paste\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 44,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57351,\n\t\t\t\"name\": \"cut\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 45,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57350,\n\t\t\t\"name\": \"alignjustify\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 46,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57349,\n\t\t\t\"name\": \"alignright\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 47,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57348,\n\t\t\t\"name\": \"aligncenter\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 48,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57347,\n\t\t\t\"name\": \"alignleft\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 49,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57346,\n\t\t\t\"name\": \"fullpage\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 50,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57345,\n\t\t\t\"name\": \"newdocument\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 51,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57344,\n\t\t\t\"name\": \"save\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 52,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57395,\n\t\t\t\"name\": \"checkbox\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 53,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57397,\n\t\t\t\"name\": \"pastetext\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 16,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57379,\n\t\t\t\"name\": \"fullscreen\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 17,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57378,\n\t\t\t\"name\": \"print\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 18,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57377,\n\t\t\t\"name\": \"emoticons\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 37,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57358,\n\t\t\t\"name\": \"blockquote\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 36,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57359,\n\t\t\t\"name\": \"undo\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 35,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57360,\n\t\t\t\"name\": \"redo\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 1,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58883,\n\t\t\t\"name\": \"codesample\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 87,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 59700,\n\t\t\t\"ligatures\": \"droplet, color9\",\n\t\t\t\"name\": \"drop\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 635,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60327,\n\t\t\t\"ligatures\": \"diamond2, gem2\",\n\t\t\t\"name\": \"sharpen\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 854,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60628,\n\t\t\t\"ligatures\": \"contrast\",\n\t\t\t\"name\": \"contrast\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 24,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60778,\n\t\t\t\"ligatures\": \"cross2, cancel3\",\n\t\t\t\"name\": \"cross2\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1097,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60921,\n\t\t\t\"ligatures\": \"arrow-resize2, diagonal2\",\n\t\t\t\"name\": \"arrow-resize2\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 1,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58880,\n\t\t\t\"name\": \"gamma\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58881,\n\t\t\t\"name\": \"orientation\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 68,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 59668,\n\t\t\t\"ligatures\": \"pencil7, write7\",\n\t\t\t\"name\": \"editimage\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 22,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60072,\n\t\t\t\"ligatures\": \"rotate-ccw3, ccw4\",\n\t\t\t\"name\": \"rotateleft\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 1679,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60073,\n\t\t\t\"ligatures\": \"rotate-cw3, cw4\",\n\t\t\t\"name\": \"rotateright\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 403,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60074,\n\t\t\t\"ligatures\": \"flip-vertical, mirror\",\n\t\t\t\"name\": \"flipv\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 405,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60076,\n\t\t\t\"ligatures\": \"flip-horizontal, mirror3\",\n\t\t\t\"name\": \"fliph\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 534,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60213,\n\t\t\t\"ligatures\": \"zoom-in3, magnifier9\",\n\t\t\t\"name\": \"zoomin\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 535,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60214,\n\t\t\t\"ligatures\": \"zoom-out3, magnifier10\",\n\t\t\t\"name\": \"zoomout\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 1448,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60522,\n\t\t\t\"ligatures\": \"menu3, list4\",\n\t\t\t\"name\": \"options\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 844,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60620,\n\t\t\t\"ligatures\": \"sun2, weather21\",\n\t\t\t\"name\": \"sun\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 855,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60621,\n\t\t\t\"ligatures\": \"moon, night\",\n\t\t\t\"name\": \"moon\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1056,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60864,\n\t\t\t\"ligatures\": \"arrow-left, left4\",\n\t\t\t\"name\": \"arrowleft\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1201,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 61048,\n\t\t\t\"ligatures\": \"crop, resize\",\n\t\t\t\"name\": \"crop\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1680,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58884,\n\t\t\t\"name\": \"tablerowprops\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1681,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58885,\n\t\t\t\"name\": \"tablecellprops\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1682,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58886,\n\t\t\t\"name\": \"table2\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1683,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58887,\n\t\t\t\"name\": \"tablemergecells\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1684,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58888,\n\t\t\t\"name\": \"tableinsertcolbefore\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1685,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58889,\n\t\t\t\"name\": \"tableinsertcolafter\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1686,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58890,\n\t\t\t\"name\": \"tableinsertrowbefore\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1687,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58891,\n\t\t\t\"name\": \"tableinsertrowafter\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1688,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58893,\n\t\t\t\"name\": \"tablesplitcells\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1689,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58894,\n\t\t\t\"name\": \"tabledelete\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1690,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58922,\n\t\t\t\"name\": \"tableleftheader\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1691,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58923,\n\t\t\t\"name\": \"tabletopheader\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 1693,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 59392,\n\t\t\t\"name\": \"tabledeleterow\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 1692,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 59393,\n\t\t\t\"name\": \"tabledeletecol\",\n\t\t\t\"tempChar\": \"\"\n\t\t}\n\t],\n\t\"metadata\": {\n\t\t\"name\": \"tinymce\",\n\t\t\"iconsHash\": 757772004\n\t},\n\t\"height\": 1024,\n\t\"prevSize\": 32,\n\t\"icons\": [\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M892.8 982.4l-89.6-89.6c-70.4 80-172.8 131.2-288 131.2-208 0-380.8-166.4-384-377.6 0 0 0 0 0 0 0-3.2 0-3.2 0-6.4s0-3.2 0-6.4v0c0 0 0 0 0-3.2 0 0 0-3.2 0-3.2 3.2-105.6 48-211.2 105.6-304l-192-192 44.8-44.8 182.4 182.4c0 0 0 0 0 0l569.6 569.6c0 0 0 0 0 0l99.2 99.2-48 44.8zM896 633.6c0 0 0 0 0 0 0-3.2 0-6.4 0-6.4-9.6-316.8-384-627.2-384-627.2s-108.8 89.6-208 220.8l70.4 70.4c6.4-9.6 16-22.4 22.4-32 41.6-51.2 83.2-96 115.2-128v0c32 32 73.6 76.8 115.2 128 108.8 137.6 169.6 265.6 172.8 371.2 0 0 0 3.2 0 3.2v0 0c0 3.2 0 3.2 0 6.4s0 3.2 0 3.2v0 0c0 22.4-3.2 41.6-9.6 64l76.8 76.8c16-41.6 28.8-89.6 28.8-137.6 0 0 0 0 0 0 0-3.2 0-3.2 0-6.4s-0-3.2-0-6.4z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"invert\"\n\t\t\t],\n\t\t\t\"grid\": 16,\n\t\t\t\"defaultCode\": 58882\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M928 128h-416l-32-64h-352l-64 128h896zM904.34 704h74.86l44.8-448h-1024l64 640h484.080c-104.882-37.776-180.080-138.266-180.080-256 0-149.982 122.018-272 272-272 149.98 0 272 122.018 272 272 0 21.678-2.622 43.15-7.66 64zM1002.996 913.75l-198.496-174.692c17.454-28.92 27.5-62.814 27.5-99.058 0-106.040-85.96-192-192-192s-192 85.96-192 192 85.96 192 192 192c36.244 0 70.138-10.046 99.058-27.5l174.692 198.496c22.962 26.678 62.118 28.14 87.006 3.252l5.492-5.492c24.888-24.888 23.426-64.044-3.252-87.006zM640 764c-68.484 0-124-55.516-124-124s55.516-124 124-124 124 55.516 124 124-55.516 124-124 124z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"defaultCode\": 57396,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M768 256h64v64h-64zM640 384h64v64h-64zM640 512h64v64h-64zM640 640h64v64h-64zM512 512h64v64h-64zM512 640h64v64h-64zM384 640h64v64h-64zM768 384h64v64h-64zM768 512h64v64h-64zM768 640h64v64h-64zM768 768h64v64h-64zM640 768h64v64h-64zM512 768h64v64h-64zM384 768h64v64h-64zM256 768h64v64h-64z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"resize\",\n\t\t\t\t\"dots\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57394,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M832 256h-192v-64l-192-192h-448v768h384v256h640v-576l-192-192zM832 346.51l101.49 101.49h-101.49v-101.49zM448 90.51l101.49 101.49h-101.49v-101.49zM64 64h320v192h192v448h-512v-640zM960 960h-512v-192h192v-448h128v192h192v448z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"copy\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57393,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M256 64h512v128h-128v768h-128v-768h-128v768h-128v-448c-123.712 0-224-100.288-224-224s100.288-224 224-224zM960 896l-256-224 256-224z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"rtl\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57392,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M448 64h512v128h-128v768h-128v-768h-128v768h-128v-448c-123.712 0-224-100.288-224-224s100.288-224 224-224zM64 448l256 224-256 224z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"ltr\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57391,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M384 64h512v128h-128v768h-128v-768h-128v768h-128v-448c-123.712 0-224-100.288-224-224s100.288-224 224-224z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"visualchars\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57390,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M731.42 517.036c63.92 47.938 100.58 116.086 100.58 186.964s-36.66 139.026-100.58 186.964c-59.358 44.518-137.284 69.036-219.42 69.036-82.138 0-160.062-24.518-219.42-69.036-63.92-47.938-100.58-116.086-100.58-186.964h128c0 69.382 87.926 128 192 128 104.074 0 192-58.618 192-128 0-69.382-87.926-128-192-128-82.138 0-160.062-24.518-219.42-69.036-63.92-47.94-100.58-116.086-100.58-186.964 0-70.878 36.66-139.024 100.58-186.964 59.358-44.518 137.282-69.036 219.42-69.036 82.136 0 160.062 24.518 219.42 69.036 63.92 47.94 100.58 116.086 100.58 186.964h-128c0-69.382-87.926-128-192-128-104.074 0-192 58.618-192 128 0 69.382 87.926 128 192 128 82.136 0 160.062 24.518 219.42 69.036zM0 512h1024v64h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"strikethrough\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57389,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M704 64h128v416c0 159.058-143.268 288-320 288-176.73 0-320-128.942-320-288v-416h128v416c0 40.166 18.238 78.704 51.354 108.506 36.896 33.204 86.846 51.494 140.646 51.494 53.8 0 103.75-18.29 140.646-51.494 33.116-29.802 51.354-68.34 51.354-108.506v-416zM192 832h640v128h-640z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"underline\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57388,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M896 64v64h-128l-320 768h128v64h-448v-64h128l320-768h-128v-64z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"italic\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57387,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M707.88 484.652c37.498-44.542 60.12-102.008 60.12-164.652 0-141.16-114.842-256-256-256h-320v896h384c141.158 0 256-114.842 256-256 0-92.956-49.798-174.496-124.12-219.348zM384 192h101.5c55.968 0 101.5 57.42 101.5 128s-45.532 128-101.5 128h-101.5v-256zM543 832h-159v-256h159c58.45 0 106 57.42 106 128s-47.55 128-106 128z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"bold0\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57386,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M576 64c247.424 0 448 200.576 448 448s-200.576 448-448 448v-96c94.024 0 182.418-36.614 248.902-103.098 66.484-66.484 103.098-154.878 103.098-248.902 0-94.022-36.614-182.418-103.098-248.902-66.484-66.484-154.878-103.098-248.902-103.098-94.022 0-182.418 36.614-248.902 103.098-51.14 51.138-84.582 115.246-97.306 184.902h186.208l-224 256-224-256h164.57c31.060-217.102 217.738-384 443.43-384zM768 448v128h-256v-320h128v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"restoredraft\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57384,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 512h128v64h-128zM192 512h192v64h-192zM448 512h128v64h-128zM640 512h192v64h-192zM896 512h128v64h-128zM880 0l16 448h-768l16-448h32l16 384h640l16-384zM144 1024l-16-384h768l-16 384h-32l-16-320h-640l-16 320z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"pagebreak\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57383,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M384 192h128v64h-128zM576 192h128v64h-128zM896 192v256h-192v-64h128v-128h-64v-64zM320 384h128v64h-128zM512 384h128v64h-128zM192 256v128h64v64h-128v-256h192v64zM384 576h128v64h-128zM576 576h128v64h-128zM896 576v256h-192v-64h128v-128h-64v-64zM320 768h128v64h-128zM512 768h128v64h-128zM192 640v128h64v64h-128v-256h192v64zM960 64h-896v896h896v-896zM1024 0v0 1024h-1024v-1024h1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"template\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57382,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M448 576h-192v-128h192v-192h128v192h192v128h-192v192h-128zM1024 640v384h-1024v-384h128v256h768v-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"nonbreaking\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57381,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M128 256h128v192h64v-384c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v384h64v-192zM128 64h128v128h-128v-128zM960 64v-64h-192c-35.202 0-64 28.8-64 64v320c0 35.2 28.798 64 64 64h192v-64h-192v-320h192zM640 160v-96c0-35.2-28.8-64-64-64h-192v448h192c35.2 0 64-28.8 64-64v-96c0-35.2-8.8-64-44-64 35.2 0 44-28.8 44-64zM576 384h-128v-128h128v128zM576 192h-128v-128h128v128zM832 576l-416 448-224-288 82-70 142 148 352-302z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"spellchecker\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57380,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M704 896h256l64-128v256h-384v-214.214c131.112-56.484 224-197.162 224-361.786 0-214.432-157.598-382.266-352-382.266-194.406 0-352 167.832-352 382.266 0 164.624 92.886 305.302 224 361.786v214.214h-384v-256l64 128h256v-32.59c-187.63-66.46-320-227.402-320-415.41 0-247.424 229.23-448 512-448 282.77 0 512 200.576 512 448 0 188.008-132.37 348.95-320 415.41v32.59z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"charmap\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57376,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M768 206v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"sup\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57375,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M768 910v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"sub\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57374,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 896h576v128h-576zM192 0h704v128h-704zM277.388 832l204.688-784.164 123.85 32.328-196.25 751.836zM929.774 1024l-129.774-129.774-129.774 129.774-62.226-62.226 129.774-129.774-129.774-129.774 62.226-62.226 129.774 129.774 129.774-129.774 62.226 62.226-129.774 129.774 129.774 129.774z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"removeformat\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57373,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 448h1024v128h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"hr\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57372,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v896h1024v-896h-1024zM384 640v-192h256v192h-256zM640 704v192h-256v-192h256zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM64 448h256v192h-256v-192zM704 448h256v192h-256v-192zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192zM704 896v-192h256v192h-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"table\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57371,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M322.018 832l57.6-192h264.764l57.6 192h113.632l-191.996-640h-223.236l-192 640h113.636zM475.618 320h72.764l57.6 192h-187.964l57.6-192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"forecolor\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57370,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M512 320c-209.368 0-395.244 100.556-512 256 116.756 155.446 302.632 256 512 256 209.368 0 395.244-100.554 512-256-116.756-155.444-302.632-256-512-256zM448 448c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM773.616 705.296c-39.648 20.258-81.652 35.862-124.846 46.376-44.488 10.836-90.502 16.328-136.77 16.328-46.266 0-92.282-5.492-136.768-16.324-43.194-10.518-85.198-26.122-124.846-46.376-63.020-32.202-120.222-76.41-167.64-129.298 47.418-52.888 104.62-97.1 167.64-129.298 32.336-16.522 66.242-29.946 101.082-40.040-19.888 30.242-31.468 66.434-31.468 105.336 0 106.040 85.962 192 192 192 106.038 0 192-85.96 192-192 0-38.902-11.582-75.094-31.466-105.34 34.838 10.096 68.744 23.52 101.082 40.042 63.022 32.198 120.218 76.408 167.638 129.298-47.42 52.886-104.618 97.1-167.638 129.296zM860.918 243.722c-108.72-55.554-226.112-83.722-348.918-83.722-122.806 0-240.198 28.168-348.918 83.722-58.772 30.032-113.732 67.904-163.082 112.076v109.206c55.338-58.566 120.694-107.754 192.194-144.29 99.62-50.904 207.218-76.714 319.806-76.714s220.186 25.81 319.804 76.716c71.502 36.536 136.858 85.724 192.196 144.29v-109.206c-49.35-44.174-104.308-82.046-163.082-112.078z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"preview\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57369,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M512 192c-212.076 0-384 171.922-384 384s171.922 384 384 384c212.074 0 384-171.922 384-384s-171.926-384-384-384zM715.644 779.646c-54.392 54.396-126.716 84.354-203.644 84.354s-149.25-29.958-203.646-84.354c-54.396-54.394-84.354-126.718-84.354-203.646s29.958-149.25 84.354-203.646c54.396-54.396 126.718-84.354 203.646-84.354s149.252 29.958 203.642 84.354c54.402 54.396 84.358 126.718 84.358 203.646s-29.958 149.252-84.356 203.646zM325.93 203.862l-42.94-85.878c-98.874 49.536-179.47 130.132-229.006 229.008l85.876 42.94c40.248-80.336 105.732-145.822 186.070-186.070zM884.134 389.93l85.878-42.938c-49.532-98.876-130.126-179.472-229.004-229.008l-42.944 85.878c80.338 40.248 145.824 105.732 186.070 186.068zM512 384h-64v192c0 10.11 4.7 19.11 12.022 24.972l-0.012 0.016 160 128 39.976-49.976-147.986-118.39v-176.622z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"inserttime\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57368,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M320 256l-256 256 256 256h128l-256-256 256-256zM704 256h-128l256 256-256 256h128l256-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"code\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57367,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M448 704h128v128h-128zM704 256c35.346 0 64 28.654 64 64v192l-192 128h-128v-64l192-128v-64h-320v-128h384zM512 96c-111.118 0-215.584 43.272-294.156 121.844s-121.844 183.038-121.844 294.156c0 111.118 43.272 215.584 121.844 294.156 78.572 78.572 183.038 121.844 294.156 121.844 111.118 0 215.584-43.272 294.156-121.844 78.572-78.572 121.844-183.038 121.844-294.156 0-111.118-43.272-215.584-121.844-294.156-78.572-78.572-183.038-121.844-294.156-121.844zM512 0v0c282.77 0 512 229.23 512 512s-229.23 512-512 512c-282.77 0-512-229.23-512-512 0-282.77 229.23-512 512-512z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"help\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57366,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 128v768h1024v-768h-1024zM192 832h-128v-128h128v128zM192 576h-128v-128h128v128zM192 320h-128v-128h128v128zM768 832h-512v-640h512v640zM960 832h-128v-128h128v128zM960 576h-128v-128h128v128zM960 320h-128v-128h128v128zM384 320v384l256-192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"media\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57365,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 128v832h1024v-832h-1024zM960 896h-896v-704h896v704zM704 352c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96-53.019 0-96-42.981-96-96zM896 832h-768l192-512 256 320 128-96z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"image\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57364,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M192 0v1024l320-320 320 320v-1024h-640zM768 869.49l-256-256-256 256v-805.49h512v805.49z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"anchor\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57363,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M476.888 675.114c4.56 9.048 6.99 19.158 6.99 29.696 0 17.616-6.744 34.058-18.992 46.308l-163.38 163.38c-12.248 12.248-28.696 18.992-46.308 18.992s-34.060-6.744-46.308-18.992l-99.38-99.38c-12.248-12.25-18.992-28.696-18.992-46.308s6.744-34.060 18.992-46.308l163.38-163.382c12.248-12.246 28.696-18.992 46.308-18.992 10.538 0 20.644 2.43 29.696 6.988l65.338-65.336c-27.87-21.41-61.44-32.16-95.034-32.16-39.986 0-79.972 15.166-110.308 45.502l-163.38 163.382c-60.67 60.67-60.67 159.95 0 220.618l99.38 99.382c30.334 30.332 70.32 45.5 110.306 45.5 39.988 0 79.974-15.168 110.308-45.502l163.38-163.38c55.82-55.82 60.238-144.298 13.344-205.346l-65.34 65.338zM978.496 144.884l-99.38-99.382c-30.334-30.336-70.32-45.502-110.308-45.502-39.986 0-79.97 15.166-110.306 45.502l-163.382 163.382c-55.82 55.82-60.238 144.298-13.342 205.342l65.338-65.34c-4.558-9.050-6.988-19.16-6.988-29.694 0-17.616 6.744-34.060 18.992-46.308l163.382-163.382c12.246-12.248 28.694-18.994 46.306-18.994 17.616 0 34.060 6.746 46.308 18.994l99.38 99.382c12.248 12.248 18.992 28.694 18.992 46.308s-6.744 34.060-18.992 46.308l-163.38 163.382c-12.248 12.248-28.694 18.992-46.308 18.992-10.536 0-20.644-2.43-29.696-6.99l-65.338 65.338c27.872 21.41 61.44 32.16 95.034 32.16 39.988 0 79.974-15.168 110.308-45.504l163.38-163.38c60.672-60.666 60.672-159.944 0-220.614zM233.368 278.624l-191.994-191.994 45.256-45.256 191.994 191.994zM384 0h64v192h-64zM0 384h192v64h-192zM790.632 745.376l191.996 191.996-45.256 45.256-191.996-191.996zM576 832h64v192h-64zM832 576h192v64h-192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"unlink\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57362,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M320 704c17.6 17.6 47.274 16.726 65.942-1.942l316.118-316.116c18.668-18.668 19.54-48.342 1.94-65.942s-47.274-16.726-65.942 1.942l-316.116 316.116c-18.668 18.668-19.542 48.342-1.942 65.942zM476.888 675.112c4.56 9.050 6.99 19.16 6.99 29.696 0 17.616-6.744 34.060-18.992 46.308l-163.382 163.382c-12.248 12.248-28.694 18.992-46.308 18.992s-34.060-6.744-46.308-18.992l-99.382-99.382c-12.248-12.248-18.992-28.694-18.992-46.308s6.744-34.060 18.992-46.308l163.382-163.382c12.248-12.248 28.694-18.994 46.308-18.994 10.536 0 20.644 2.43 29.696 6.99l65.338-65.338c-27.87-21.41-61.44-32.16-95.034-32.16-39.986 0-79.972 15.166-110.308 45.502l-163.382 163.382c-60.67 60.67-60.67 159.948 0 220.618l99.382 99.382c30.334 30.332 70.32 45.5 110.306 45.5 39.988 0 79.974-15.168 110.308-45.502l163.382-163.382c55.82-55.82 60.238-144.298 13.344-205.344l-65.34 65.34zM978.498 144.884l-99.382-99.382c-30.334-30.336-70.32-45.502-110.308-45.502-39.986 0-79.972 15.166-110.308 45.502l-163.382 163.382c-55.82 55.82-60.238 144.298-13.342 205.342l65.338-65.34c-4.558-9.050-6.988-19.16-6.988-29.694 0-17.616 6.744-34.060 18.992-46.308l163.382-163.382c12.248-12.248 28.694-18.994 46.308-18.994s34.060 6.746 46.308 18.994l99.382 99.382c12.248 12.248 18.992 28.694 18.992 46.308s-6.744 34.060-18.992 46.308l-163.382 163.382c-12.248 12.248-28.694 18.992-46.308 18.992-10.536 0-20.644-2.43-29.696-6.99l-65.338 65.338c27.872 21.41 61.44 32.16 95.034 32.16 39.988 0 79.974-15.168 110.308-45.502l163.382-163.382c60.67-60.666 60.67-159.944 0-220.614z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"link\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57361,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v128h-1024zM384 256h640v128h-640zM384 448h640v128h-640zM384 640h640v128h-640zM0 832h1024v128h-1024zM256 320v384l-256-192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"outdent\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57357,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v128h-1024zM384 256h640v128h-640zM384 448h640v128h-640zM384 640h640v128h-640zM0 832h1024v128h-1024zM0 704v-384l256 192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"indent\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57356,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M384 832h640v128h-640zM384 448h640v128h-640zM384 64h640v128h-640zM192 0v256h-64v-192h-64v-64zM128 526v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM256 704v320h-192v-64h128v-64h-128v-64h128v-64h-128v-64z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"numlist\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57355,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M384 64h640v128h-640v-128zM384 448h640v128h-640v-128zM384 832h640v128h-640v-128zM0 128c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128zM0 512c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128zM0 896c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"bullist\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57354,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M64 0h384v64h-384zM576 0h384v64h-384zM952 320h-56v-256h-256v256h-256v-256h-256v256h-56c-39.6 0-72 32.4-72 72v560c0 39.6 32.4 72 72 72h304c39.6 0 72-32.4 72-72v-376h128v376c0 39.6 32.4 72 72 72h304c39.6 0 72-32.4 72-72v-560c0-39.6-32.4-72-72-72zM348 960h-248c-19.8 0-36-14.4-36-32s16.2-32 36-32h248c19.8 0 36 14.4 36 32s-16.2 32-36 32zM544 512h-64c-17.6 0-32-14.4-32-32s14.4-32 32-32h64c17.6 0 32 14.4 32 32s-14.4 32-32 32zM924 960h-248c-19.8 0-36-14.4-36-32s16.2-32 36-32h248c19.8 0 36 14.4 36 32s-16.2 32-36 32z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"searchreplace\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57353,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M832 320v-160c0-17.6-14.4-32-32-32h-224v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-224c-17.602 0-32 14.4-32 32v640c0 17.6 14.398 32 32 32h288v192h448l192-192v-512h-192zM384 64.114c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114l0 63.886h-128v-63.886zM192 256v-64h512v64h-512zM832 933.49v-101.49h101.49l-101.49 101.49zM960 768h-192v192h-320v-576h512v384z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"paste\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57352,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M890.774 709.154c-45.654-45.556-103.728-69.072-157.946-69.072h-29.112l-63.904-64.008 255.62-256.038c63.904-64.010 63.904-192.028 0-256.038l-383.43 384.056-383.432-384.054c-63.904 64.008-63.904 192.028 0 256.038l255.622 256.034-63.906 64.008h-29.114c-54.22 0-112.292 23.518-157.948 69.076-81.622 81.442-92.65 202.484-24.63 270.35 29.97 29.902 70.288 44.494 112.996 44.494 54.216 0 112.29-23.514 157.946-69.072 53.584-53.464 76.742-124 67.084-185.348l65.384-65.488 65.376 65.488c-9.656 61.348 13.506 131.882 67.084 185.348 45.662 45.558 103.732 69.072 157.948 69.072 42.708 0 83.024-14.592 112.994-44.496 68.020-67.866 56.988-188.908-24.632-270.35zM353.024 845.538c-7.698 17.882-19.010 34.346-33.626 48.926-14.636 14.604-31.172 25.918-49.148 33.624-16.132 6.916-32.96 10.568-48.662 10.568-15.146 0-36.612-3.402-52.862-19.612-16.136-16.104-19.52-37.318-19.52-52.288 0-15.542 3.642-32.21 10.526-48.212 7.7-17.884 19.014-34.346 33.626-48.926 14.634-14.606 31.172-25.914 49.15-33.624 16.134-6.914 32.96-10.568 48.664-10.568 15.146 0 36.612 3.4 52.858 19.614 16.134 16.098 19.522 37.316 19.522 52.284 0.002 15.542-3.638 32.216-10.528 48.214zM512.004 666.596c-49.914 0-90.376-40.532-90.376-90.526 0-49.992 40.462-90.52 90.376-90.52s90.372 40.528 90.372 90.52c0 49.998-40.46 90.526-90.372 90.526zM855.272 919.042c-16.248 16.208-37.712 19.612-52.86 19.612-15.704 0-32.53-3.652-48.666-10.568-17.972-7.706-34.508-19.020-49.142-33.624-14.614-14.58-25.926-31.042-33.626-48.926-6.886-15.998-10.526-32.672-10.526-48.212 0-14.966 3.384-36.188 19.52-52.286 16.246-16.208 37.712-19.614 52.86-19.614 15.7 0 32.53 3.654 48.66 10.568 17.978 7.708 34.516 19.018 49.15 33.624 14.61 14.58 25.924 31.042 33.626 48.926 6.884 15.998 10.526 32.67 10.526 48.212-0.002 14.97-3.39 36.186-19.522 52.288z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"cut\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57351,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v128h-1024zM0 256h1024v128h-1024zM0 448h1024v128h-1024zM0 640h1024v128h-1024zM0 832h1024v128h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"alignjustify\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57350,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v128h-1024zM384 256h640v128h-640zM384 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"alignright\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57349,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v128h-1024zM192 256h640v128h-640zM192 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"aligncenter\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57348,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v128h-1024zM0 256h640v128h-640zM0 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"alignleft\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57347,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M1024 592.458v-160.916l-159.144-15.914c-8.186-30.042-20.088-58.548-35.21-84.98l104.596-127.838-113.052-113.050-127.836 104.596c-26.434-15.124-54.942-27.026-84.982-35.208l-15.914-159.148h-160.916l-15.914 159.146c-30.042 8.186-58.548 20.086-84.98 35.208l-127.838-104.594-113.050 113.050 104.596 127.836c-15.124 26.432-27.026 54.94-35.21 84.98l-159.146 15.916v160.916l159.146 15.914c8.186 30.042 20.086 58.548 35.21 84.982l-104.596 127.836 113.048 113.048 127.838-104.596c26.432 15.124 54.94 27.028 84.98 35.21l15.916 159.148h160.916l15.914-159.144c30.042-8.186 58.548-20.088 84.982-35.21l127.836 104.596 113.048-113.048-104.596-127.836c15.124-26.434 27.028-54.942 35.21-84.98l159.148-15.92zM704 576l-128 128h-128l-128-128v-128l128-128h128l128 128v128z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"fullpage\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57346,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M903.432 199.43l-142.864-142.862c-31.112-31.112-92.568-56.568-136.568-56.568h-480c-44 0-80 36-80 80v864c0 44 36 80 80 80h736c44 0 80-36 80-80v-608c0-44-25.456-105.458-56.568-136.57zM858.178 244.686c3.13 3.13 6.25 6.974 9.28 11.314h-163.458v-163.456c4.34 3.030 8.184 6.15 11.314 9.28l142.864 142.862zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16h480c4.832 0 10.254 0.61 16 1.704v254.296h254.296c1.094 5.746 1.704 11.166 1.704 16v608z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"newdocument\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57345,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M896 0h-896v1024h1024v-896l-128-128zM512 128h128v256h-128v-256zM896 896h-768v-768h64v320h576v-320h74.978l53.022 53.018v714.982z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"save\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57344,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M128 544l288 288 480-480-128-128-352 352-160-160z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"defaultCode\": 57395,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M512 512v128h32l32-64h64v256h-48v64h224v-64h-48v-256h64l32 64h32v-128zM832 320v-160c0-17.6-14.4-32-32-32h-224v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-224c-17.602 0-32 14.4-32 32v640c0 17.6 14.398 32 32 32h288v192h640v-704h-192zM384 64.114c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114l0 63.886h-128v-63.886zM192 256v-64h512v64h-512zM960 960h-512v-576h512v576z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"pastetext\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57397,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M1024 0v384l-138.26-138.26-212 212-107.48-107.48 212-212-138.26-138.26zM245.74 138.26l212 212-107.48 107.48-212-212-138.26 138.26v-384h384zM885.74 778.26l138.26-138.26v384h-384l138.26-138.26-212-212 107.48-107.48zM457.74 673.74l-212 212 138.26 138.26h-384v-384l138.26 138.26 212-212z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"fullscreen\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57379,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M256 64h512v128h-512zM960 256h-896c-35.2 0-64 28.8-64 64v320c0 35.2 28.796 64 64 64h192v256h512v-256h192c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64zM704 896h-384v-320h384v320zM974.4 352c0 25.626-20.774 46.4-46.398 46.4-25.626 0-46.402-20.774-46.402-46.4s20.776-46.4 46.402-46.4c25.626 0 46.398 20.774 46.398 46.4z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"print\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57378,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M512 0c-282.77 0-512 229.228-512 512 0 282.77 229.228 512 512 512 282.77 0 512-229.23 512-512 0-282.772-229.23-512-512-512zM512 944c-238.586 0-432-193.412-432-432 0-238.586 193.414-432 432-432 238.59 0 432 193.414 432 432 0 238.588-193.41 432-432 432zM384 320c0 35.346-28.654 64-64 64s-64-28.654-64-64 28.654-64 64-64 64 28.654 64 64zM768 320c0 35.346-28.652 64-64 64s-64-28.654-64-64 28.652-64 64-64 64 28.654 64 64zM512 652c141.074 0 262.688-57.532 318.462-123.192-20.872 171.22-156.288 303.192-318.462 303.192-162.118 0-297.498-132.026-318.444-303.168 55.786 65.646 177.386 123.168 318.444 123.168z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"emoticons\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57377,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M225 448c123.712 0 224 100.29 224 224 0 123.712-100.288 224-224 224-123.712 0-224-100.288-224-224l-1-32c0-247.424 200.576-448 448-448v128c-85.474 0-165.834 33.286-226.274 93.726-11.634 11.636-22.252 24.016-31.83 37.020 11.438-1.8 23.16-2.746 35.104-2.746zM801 448c123.71 0 224 100.29 224 224 0 123.712-100.29 224-224 224-123.71 0-224-100.288-224-224l-1-32c0-247.424 200.576-448 448-448v128c-85.474 0-165.834 33.286-226.274 93.726-11.636 11.636-22.254 24.016-31.832 37.020 11.44-1.8 23.16-2.746 35.106-2.746z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"blockquote\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57358,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M761.862 1024c113.726-206.032 132.888-520.306-313.862-509.824v253.824l-384-384 384-384v248.372c534.962-13.942 594.57 472.214 313.862 775.628z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"undo\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57359,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M576 248.372v-248.372l384 384-384 384v-253.824c-446.75-10.482-427.588 303.792-313.86 509.824-280.712-303.414-221.1-789.57 313.86-775.628z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"redo\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57360,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M199.995 381.998v-104.002c0-43.078 34.923-78.001 78.001-78.001h26v-104.002h-26c-100.518 0-182.003 81.485-182.003 182.003v104.002c0 43.078-34.923 78.001-78.001 78.001h-26v104.002h26c43.078 0 78.001 34.923 78.001 78.001v104.002c0 100.515 81.485 182.003 182.003 182.003h26v-104.002h-26c-43.078 0-78.001-34.923-78.001-78.001v-104.002c0-50.931-20.928-96.966-54.646-130.002 33.716-33.036 54.646-79.072 54.646-130.002z\",\n\t\t\t\t\"M824.005 381.998v-104.002c0-43.078-34.923-78.001-78.001-78.001h-26v-104.002h26c100.515 0 182.003 81.485 182.003 182.003v104.002c0 43.078 34.923 78.001 78.001 78.001h26v104.002h-26c-43.078 0-78.001 34.923-78.001 78.001v104.002c0 100.515-81.488 182.003-182.003 182.003h-26v-104.002h26c43.078 0 78.001-34.923 78.001-78.001v-104.002c0-50.931 20.928-96.966 54.646-130.002-33.716-33.036-54.646-79.072-54.646-130.002z\",\n\t\t\t\t\"M616.002 356.715c0 57.439-46.562 104.002-104.002 104.002s-104.002-46.562-104.002-104.002c0-57.439 46.562-104.002 104.002-104.002s104.002 46.562 104.002 104.002z\",\n\t\t\t\t\"M512 511.283c-57.439 0-104.002 46.562-104.002 104.002 0 55.845 26 100.115 105.752 103.88-23.719 33.417-59.441 46.612-105.752 50.944v61.751c0 0 208.003 18.144 208.003-216.577-0.202-57.441-46.56-104.004-104.002-104.004z\"\n\t\t\t],\n\t\t\t\"width\": 1024,\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"code\",\n\t\t\t\t\"semicolon\",\n\t\t\t\t\"curly-braces\"\n\t\t\t],\n\t\t\t\"grid\": 16,\n\t\t\t\"defaultCode\": 58883\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M864.626 473.162c-65.754-183.44-205.11-348.15-352.626-473.162-147.516 125.012-286.87 289.722-352.626 473.162-40.664 113.436-44.682 236.562 12.584 345.4 65.846 125.14 198.632 205.438 340.042 205.438s274.196-80.298 340.040-205.44c57.27-108.838 53.25-231.962 12.586-345.398zM738.764 758.956c-43.802 83.252-132.812 137.044-226.764 137.044-55.12 0-108.524-18.536-152.112-50.652 13.242 1.724 26.632 2.652 40.112 2.652 117.426 0 228.668-67.214 283.402-171.242 44.878-85.292 40.978-173.848 23.882-244.338 14.558 28.15 26.906 56.198 36.848 83.932 22.606 63.062 40.024 156.34-5.368 242.604z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"drop\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57381,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M768 128h-512l-256 256 512 576 512-576-256-256zM512 778.666v-2.666h-2.37l-14.222-16h16.592v-16h-30.814l-14.222-16h45.036v-16h-59.258l-14.222-16h73.48v-16h-87.704l-14.222-16h101.926v-16h-116.148l-14.222-16h130.37v-16h-144.592l-14.222-16h158.814v-16h-173.038l-14.222-16h187.26v-16h-201.482l-14.222-16h215.704v-16h-229.926l-14.222-16h244.148v-16h-258.372l-14.222-16h272.594v-16h-286.816l-14.222-16h301.038v-16h-315.26l-14.222-16h329.482v-16h-343.706l-7.344-8.262 139.072-139.072h211.978v3.334h215.314l16 16h-231.314v16h247.314l16 16h-263.314v16h279.314l16 16h-295.314v16h311.314l16 16h-327.314v16h343.312l7.738 7.738-351.050 394.928z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"diamond\",\n\t\t\t\t\"gem\",\n\t\t\t\t\"jewelry\",\n\t\t\t\t\"dualtone\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57889,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM128 512c0-212.078 171.922-384 384-384v768c-212.078 0-384-171.922-384-384z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"contrast\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58104,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M893.254 221.254l-90.508-90.508-290.746 290.744-290.746-290.744-90.508 90.506 290.746 290.748-290.746 290.746 90.508 90.508 290.746-290.746 290.746 290.746 90.508-90.51-290.744-290.744z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"cross\",\n\t\t\t\t\"cancel\",\n\t\t\t\t\"close\",\n\t\t\t\t\"quit\",\n\t\t\t\t\"remove\"\n\t\t\t],\n\t\t\t\"defaultCode\": 60778,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v384c0 35.346 28.654 64 64 64s64-28.654 64-64v-229.488l677.488 677.488h-229.488c-35.346 0-64 28.652-64 64 0 35.346 28.654 64 64 64h384c35.346 0 64-28.654 64-64v-384c0-35.348-28.654-64-64-64s-64 28.652-64 64v229.488l-677.488-677.488h229.488c35.346 0 64-28.654 64-64s-28.652-64-64-64h-384c-35.346 0-64 28.654-64 64z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"arrow-resize\",\n\t\t\t\t\"diagonal\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58329,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M483.2 640l-147.2-336c-9.6-25.6-19.2-44.8-25.6-54.4s-16-12.8-25.6-12.8c-16 0-25.6 3.2-28.8 3.2v-70.4c9.6-6.4 25.6-6.4 38.4-9.6 32 0 57.6 6.4 73.6 22.4 6.4 6.4 12.8 16 19.2 25.6 6.4 12.8 12.8 25.6 16 41.6l121.6 291.2 150.4-371.2h92.8l-198.4 470.4v224h-86.4v-224z\",\n\t\t\t\t\"M0 0v1024h1024v-1024h-1024zM960 960h-896v-896h896v896z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{},\n\t\t\t\t{}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"gamma2\"\n\t\t\t],\n\t\t\t\"grid\": 16,\n\t\t\t\"defaultCode\": 58880\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M627.2 880h-579.2v-396.8h579.2v396.8zM553.6 553.6h-435.2v256h435.2v-256z\",\n\t\t\t\t\"M259.2 227.2c176-176 457.6-176 633.6 0s176 457.6 0 633.6c-121.6 121.6-297.6 160-454.4 108.8 121.6 28.8 262.4-9.6 361.6-108.8 150.4-150.4 160-384 22.4-521.6-121.6-121.6-320-128-470.4-19.2l86.4 86.4-294.4 22.4 22.4-294.4 92.8 92.8z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{},\n\t\t\t\t{}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"orientation\"\n\t\t\t],\n\t\t\t\"grid\": 16,\n\t\t\t\"defaultCode\": 58881\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M768 544v352h-640v-640h352l128-128h-512c-52.8 0-96 43.2-96 96v704c0 52.8 43.2 96 96 96h704c52.798 0 96-43.2 96-96v-512l-128 128z\",\n\t\t\t\t\"M864 0l-608 608v160h160l608-608c0-96-64-160-160-160zM416 640l-48-48 480-480 48 48-480 480z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"pencil\",\n\t\t\t\t\"write\",\n\t\t\t\t\"edit\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57361,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M607.998 128.014c-212.070 0-383.986 171.916-383.986 383.986h-191.994l246.848 246.848 246.848-246.848h-191.994c0-151.478 122.798-274.276 274.276-274.276 151.48 0 274.276 122.798 274.276 274.276 0 151.48-122.796 274.276-274.276 274.276v109.71c212.070 0 383.986-171.916 383.986-383.986s-171.916-383.986-383.986-383.986z\"\n\t\t\t],\n\t\t\t\"width\": 1024,\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"rotate-ccw\",\n\t\t\t\t\"ccw\",\n\t\t\t\t\"arrow\"\n\t\t\t],\n\t\t\t\"defaultCode\": 60072,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M416.002 128.014c212.070 0 383.986 171.916 383.986 383.986h191.994l-246.848 246.848-246.848-246.848h191.994c0-151.478-122.798-274.276-274.276-274.276-151.48 0-274.276 122.798-274.276 274.276 0 151.48 122.796 274.276 274.276 274.276v109.71c-212.070 0-383.986-171.916-383.986-383.986s171.916-383.986 383.986-383.986z\"\n\t\t\t],\n\t\t\t\"width\": 1024,\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"rotate-cw\",\n\t\t\t\t\"cw\",\n\t\t\t\t\"arrow\"\n\t\t\t],\n\t\t\t\"defaultCode\": 60073,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 384h1024v-384zM1024 960v-384h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"flip-vertical\",\n\t\t\t\t\"mirror\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57663,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M576 0v1024h384zM0 1024h384v-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"flip-horizontal\",\n\t\t\t\t\"mirror\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57664,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384 0 212.078 171.922 384 384 384 95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256zM448 192h-128v128h-128v128h128v128h128v-128h128v-128h-128z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"zoom-in\",\n\t\t\t\t\"magnifier\",\n\t\t\t\t\"magnifier-plus\",\n\t\t\t\t\"enlarge\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57788,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384 0 212.078 171.922 384 384 384 95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256zM192 320h384v128h-384z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"zoom-out\",\n\t\t\t\t\"magnifier\",\n\t\t\t\t\"magnifier-minus\",\n\t\t\t\t\"reduce\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57789,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M64 192h896v192h-896zM64 448h896v192h-896zM64 704h896v192h-896z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"menu\",\n\t\t\t\t\"list\",\n\t\t\t\t\"options\",\n\t\t\t\t\"lines\",\n\t\t\t\t\"hamburger\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58031,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M512 832c35.346 0 64 28.654 64 64v64c0 35.346-28.654 64-64 64s-64-28.654-64-64v-64c0-35.346 28.654-64 64-64zM512 192c-35.346 0-64-28.654-64-64v-64c0-35.346 28.654-64 64-64s64 28.654 64 64v64c0 35.346-28.654 64-64 64zM960 448c35.346 0 64 28.654 64 64s-28.654 64-64 64h-64c-35.348 0-64-28.654-64-64s28.652-64 64-64h64zM192 512c0 35.346-28.654 64-64 64h-64c-35.346 0-64-28.654-64-64s28.654-64 64-64h64c35.346 0 64 28.654 64 64zM828.784 738.274l45.256 45.258c24.992 24.99 24.992 65.516 0 90.508-24.994 24.992-65.518 24.992-90.51 0l-45.256-45.256c-24.992-24.99-24.992-65.516 0-90.51 24.994-24.992 65.518-24.992 90.51-0zM195.216 285.726l-45.256-45.256c-24.994-24.994-24.994-65.516 0-90.51s65.516-24.994 90.51 0l45.256 45.256c24.994 24.994 24.994 65.516 0 90.51s-65.516 24.994-90.51 0zM828.784 285.726c-24.992 24.992-65.516 24.992-90.51 0-24.992-24.994-24.992-65.516 0-90.51l45.256-45.254c24.992-24.994 65.516-24.994 90.51 0 24.992 24.994 24.992 65.516 0 90.51l-45.256 45.254zM195.216 738.274c24.992-24.992 65.518-24.992 90.508 0 24.994 24.994 24.994 65.52 0 90.51l-45.254 45.256c-24.994 24.992-65.516 24.992-90.51 0s-24.994-65.518 0-90.508l45.256-45.258z\",\n\t\t\t\t\"M512 256c-141.384 0-256 114.616-256 256 0 141.382 114.616 256 256 256 141.382 0 256-114.618 256-256 0-141.384-114.616-256-256-256zM512 672c-88.366 0-160-71.634-160-160s71.634-160 160-160 160 71.634 160 160-71.634 160-160 160z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"sun\",\n\t\t\t\t\"weather\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58094,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M715.812 64.48c-60.25-34.784-124.618-55.904-189.572-64.48 122.936 160.082 144.768 384.762 37.574 570.42-107.2 185.67-312.688 279.112-512.788 252.68 39.898 51.958 90.376 97.146 150.628 131.934 245.908 141.974 560.37 57.72 702.344-188.198 141.988-245.924 57.732-560.372-188.186-702.356z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"moon\",\n\t\t\t\t\"night\",\n\t\t\t\t\"sleep\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58105,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M672 1024l192-192-320-320 320-320-192-192-512 512z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"arrow-left\",\n\t\t\t\t\"left\",\n\t\t\t\t\"previous\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58291,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M832 256l192-192-64-64-192 192h-448v-192h-128v192h-192v128h192v512h512v192h128v-192h192v-128h-192v-448zM320 320h320l-320 320v-320zM384 704l320-320v320h-320z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"crop\",\n\t\t\t\t\"resize\",\n\t\t\t\t\"cut\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58428,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v896h1024v-896h-1024zM640 704v192h-256v-192h256zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192zM704 896v-192h256v192h-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tablerowprops\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58880,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v896h1024v-896h-1024zM640 704v192h-256v-192h256zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM64 448h256v192h-256v-192zM704 448h256v192h-256v-192zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192zM704 896v-192h256v192h-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tablecellprops\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58881,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v832h1024v-832h-1024zM320 832h-256v-192h256v192zM320 576h-256v-192h256v192zM640 832h-256v-192h256v192zM640 576h-256v-192h256v192zM960 832h-256v-192h256v192zM960 576h-256v-192h256v192zM960 320h-896v-192h896v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"table2\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58882,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v896h1024v-896h-1024zM384 896v-448h576v448h-576zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM64 448h256v192h-256v-192zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tablemergecells\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58884,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M320 771.2v-182.4h-182.4v-89.6h182.4v-182.4h86.4v182.4h185.6v89.6h-185.6v182.4zM0 64v896h1024v-896h-1024zM640 896h-576v-704h576v704zM960 896h-256v-192h256v192zM960 640h-256v-192h256v192zM960 384h-256v-192h256v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tableinsertcolbefore\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58885,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M704 316.8v182.4h182.4v89.6h-182.4v182.4h-86.4v-182.4h-185.6v-89.6h185.6v-182.4zM0 64v896h1024v-896h-1024zM320 896h-256v-192h256v192zM320 640h-256v-192h256v192zM320 384h-256v-192h256v192zM960 896h-576v-704h576v704z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tableinsertcolafter\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58886,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M691.2 451.2h-144v144h-70.4v-144h-144v-67.2h144v-144h70.4v144h144zM0 64v896h1024v-896h-1024zM320 896h-256v-192h256v192zM640 896h-256v-192h256v192zM960 896h-256v-192h256v192zM960 643.2h-896v-451.2h896v451.2z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tableinsertrowbefore\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58887,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M332.8 636.8h144v-144h70.4v144h144v67.2h-144v144h-70.4v-144h-144zM0 64v896h1024v-896h-1024zM384 192h256v192h-256v-192zM64 192h256v192h-256v-192zM960 896h-896v-451.2h896v451.2zM960 384h-256v-192h256v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tableinsertrowafter\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58888,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v896h1024v-896h-1024zM384 192h256v192h-256v-192zM320 896h-256v-192h256v192zM320 640h-256v-192h256v192zM320 384h-256v-192h256v192zM960 896h-576v-448h576v448zM960 384h-256v-192h256v192zM864 803.2l-60.8 60.8-131.2-131.2-131.2 131.2-60.8-60.8 131.2-131.2-131.2-131.2 60.8-60.8 131.2 131.2 131.2-131.2 60.8 60.8-131.2 131.2z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tablesplitcells\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58890,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v896h-1024v-896zM60.8 192v704h899.2v-704h-899.2zM809.6 748.8l-96 96-204.8-204.8-204.8 204.8-96-96 204.8-204.8-204.8-204.8 96-96 204.8 204.8 204.8-204.8 96 96-204.8 204.8z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tabledelete\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58891,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v832h1024v-832h-1024zM640 832h-256v-192h256v192zM640 576h-256v-192h256v192zM640 320h-256v-192h256v192zM960 832h-256v-192h256v192zM960 576h-256v-192h256v192zM960 320h-256v-192h256v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tableleftheader\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58922,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v832h1024v-832h-1024zM320 832h-256v-192h256v192zM320 576h-256v-192h256v192zM640 832h-256v-192h256v192zM640 576h-256v-192h256v192zM960 832h-256v-192h256v192zM960 576h-256v-192h256v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tabletopheader\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58923,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M886.4 387.2l-156.8 156.8 160 160-76.8 76.8-160-160-156.8 156.8-76.8-73.6 160-160-163.2-163.2 76.8-76.8 163.2 163.2 156.8-156.8 73.6 76.8zM0 64v896h1024v-896h-1024zM960 384h-22.4l-64 64h86.4v192h-89.6l64 64h25.6v192h-896v-192h310.4l64-64h-374.4v-192h371.2l-64-64h-307.2v-192h896v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"grid\": 16,\n\t\t\t\"tags\": [\n\t\t\t\t\"tabledeleterow\"\n\t\t\t],\n\t\t\t\"defaultCode\": 59392\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M320 460.8l64 64v12.8l-64 64v-140.8zM640 537.6l64 64v-137.6l-64 64v9.6zM1024 64v896h-1024v-896h1024zM960 192h-256v51.2l-12.8-12.8-51.2 51.2v-89.6h-256v89.6l-51.2-51.2-12.8 12.8v-51.2h-256v704h256v-118.4l35.2 35.2 28.8-28.8v115.2h256v-115.2l48 48 16-16v83.2h256v-707.2zM672 297.6l-156.8 156.8-163.2-163.2-76.8 76.8 163.2 163.2-156.8 156.8 76.8 76.8 156.8-156.8 160 160 76.8-76.8-160-160 156.8-156.8-76.8-76.8z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"grid\": 16,\n\t\t\t\"tags\": [\n\t\t\t\t\"tabledeletecol\"\n\t\t\t],\n\t\t\t\"defaultCode\": 59393\n\t\t}\n\t],\n\t\"preferences\": {\n\t\t\"showGlyphs\": true,\n\t\t\"showQuickUse\": true,\n\t\t\"showQuickUse2\": true,\n\t\t\"showSVGs\": true,\n\t\t\"fontPref\": {\n\t\t\t\"prefix\": \"icon-\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"fontFamily\": \"tinymce\",\n\t\t\t\t\"majorVersion\": 1,\n\t\t\t\t\"minorVersion\": 0\n\t\t\t},\n\t\t\t\"metrics\": {\n\t\t\t\t\"emSize\": 1024,\n\t\t\t\t\"baseline\": 6.25,\n\t\t\t\t\"whitespace\": 50\n\t\t\t},\n\t\t\t\"resetPoint\": 58880,\n\t\t\t\"embed\": false\n\t\t},\n\t\t\"imagePref\": {\n\t\t\t\"prefix\": \"icon-\",\n\t\t\t\"png\": true,\n\t\t\t\"useClassSelector\": true,\n\t\t\t\"color\": 4473924,\n\t\t\t\"bgColor\": 16777215\n\t\t},\n\t\t\"historySize\": 100,\n\t\t\"gridSize\": 16,\n\t\t\"showGrid\": true,\n\t\t\"showCodes\": true,\n\t\t\"showLiga\": false\n\t},\n\t\"IcoMoonType\": \"icon-set\"\n}"
  },
  {
    "path": "publishable/assets/js/skins/voyager/skin.json",
    "content": "{\n\t\"skin-name\": \"voyager\",\n\t\"preview-bg\": \"#ffffff\",\n\t\"text\": \"#333333\",\n\t\"text-inverse\": \"#ffffff\",\n\t\"text-disabled\": \"#aaaaaa\",\n\t\"has-gradients\": false,\n\t\"has-radius\": false,\n\t\"has-boxshadow\": false,\n\t\"has-button-borders\": false,\n\t\"btn-text\": \"#a3afb7\",\n\t\"btn-text-shadow\": \"#ffffff\",\n\t\"btn-bg\": \"#ffffff\",\n\t\"btn-bg-hlight\": \"#ffffff\",\n\t\"btn-border-top\": \"rgba(0,0,0,0)\",\n\t\"btn-border-right\": \"rgba(0,0,0,0)\",\n\t\"btn-border-bottom\": \"rgba(0,0,0,0)\",\n\t\"btn-border-left\": \"rgba(0,0,0,0)\",\n\t\"btn-split-border\": \"#eeeeee\",\n\t\"btn-primary-text\": \"#ffffff\",\n\t\"btn-primary-text-shadow\": \"#ff0000\",\n\t\"btn-primary-bg\": \"#0088cc\",\n\t\"btn-primary-bg-hlight\": \"#ffffff\",\n\t\"btn-padding\": \"4px 8px\",\n\t\"menu-bg\": \"#ffffff\",\n\t\"menu-border\": \"rgba(0,0,0,0.2)\",\n\t\"menuitem-text\": \"#333333\",\n\t\"menuitem-bg-selected\": \"#0088cc\",\n\t\"menuitem-bg-selected-hlight\": \"#0077b3\",\n\t\"menuitem-separator-top\": \"#cbcbcb\",\n\t\"menuitem-separator-bottom\": \"#ffffff\",\n\t\"menuitem-text-inverse\": \"#ffffff\",\n\t\"menuitem-bg-active\": \"#c8def4\",\n\t\"menuitem-text-active\": \"#333333\",\n\t\"menuitem-preview-border-active\": \"#aaaaaa\",\n\t\"menubar-menubtn-text\": \"#333333\",\n\t\"checkbox-border\": \"#c5c5c5\",\n\t\"checkbox-border-focus\": \"#59a5e1\",\n\t\"panel-border\": \"#eeeeee\",\n\t\"panel-bg\": \"#ffffff\",\n\t\"panel-bg-hlight\": \"#ffffff\",\n\t\"textbox-bg\": \"#ffffff\",\n\t\"textbox-border\": \"#c5c5c5\",\n\t\"textbox-border-focus\": \"#59a5e1\",\n\t\"window-bg\": \"#ffffff\",\n\t\"window-border\": \"#eeeeee\",\n\t\"tab-bg\": \"#e3e3e3\",\n\t\"tab-bg-hover\": \"#fdfdfd\",\n\t\"tab-bg-active\": \"#fdfdfd\",\n\t\"tab-border\": \"#c5c5c5\",\n\t\"tabs-bg\": \"#ffffff\",\n\t\"notification-bg\": \"#f0f0f0\",\n\t\"notification-border\": \"#cccccc\",\n\t\"notification-text\": \"#333333\",\n\t\"notification-success-bg\": \"#dff0d8\",\n\t\"notification-success-border\": \"#d6e9c6\",\n\t\"notification-success-text\": \"#3c763d\",\n\t\"notification-info-bg\": \"#d9edf7\",\n\t\"notification-info-border\": \"#779ecb\",\n\t\"notification-info-text\": \"#31708f\",\n\t\"notification-warning-bg\": \"#fcf8e3\",\n\t\"notification-warning-border\": \"#faebcc\",\n\t\"notification-warning-text\": \"#8a6d3b\",\n\t\"notification-error-bg\": \"#f2dede\",\n\t\"notification-error-border\": \"#ebccd1\",\n\t\"notification-error-text\": \"#a94442\",\n\t\"progress-bar-bg\": \"#dfdfdf\",\n\t\"progress-bar-bg-hlight\": \"#cccccc\",\n\t\"progress-border\": \"#cccccc\",\n\t\"progress-text\": \"#333333\",\n\t\"progress-text-shadow\": \"#ffffff\",\n\t\"slider-bg\": \"#eeeeee\",\n\t\"slider-border\": \"#aaaaaa\",\n\t\"slider-handle-bg\": \"#dddddd\",\n\t\"slider-handle-border\": \"#bbbbbb\",\n\t\"colorbtn-backcolor-bg\": \"#bbbbbb\",\n\t\"grid-border\": \"#d6d6d6\",\n\t\"grid-border-active\": \"#a1a1a1\"\n}"
  },
  {
    "path": "publishable/assets/js/themes/silver/index.js",
    "content": "// Exports the \"silver\" theme for usage with module loaders\n// Usage:\n//   CommonJS:\n//     require('tinymce/themes/silver')\n//   ES2015:\n//     import 'tinymce/themes/silver'\nrequire('./theme.js');"
  },
  {
    "path": "publishable/assets/js/themes/silver/theme.js",
    "content": "/**\n * TinyMCE version 6.2.0 (2022-09-08)\n */\n\n(function () {\n    'use strict';\n\n    const getPrototypeOf$1 = Object.getPrototypeOf;\n    const hasProto = (v, constructor, predicate) => {\n      var _a;\n      if (predicate(v, constructor.prototype)) {\n        return true;\n      } else {\n        return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n      }\n    };\n    const typeOf = x => {\n      const t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && Array.isArray(x)) {\n        return 'array';\n      } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    const isType$1 = type => value => typeOf(value) === type;\n    const isSimpleType = type => value => typeof value === type;\n    const eq$1 = t => a => t === a;\n    const is$2 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$1(o) === proto);\n    const isString = isType$1('string');\n    const isObject = isType$1('object');\n    const isPlainObject = value => is$2(value, Object);\n    const isArray = isType$1('array');\n    const isNull = eq$1(null);\n    const isBoolean = isSimpleType('boolean');\n    const isUndefined = eq$1(undefined);\n    const isNullable = a => a === null || a === undefined;\n    const isNonNullable = a => !isNullable(a);\n    const isFunction = isSimpleType('function');\n    const isNumber = isSimpleType('number');\n    const isArrayOf = (value, pred) => {\n      if (isArray(value)) {\n        for (let i = 0, len = value.length; i < len; ++i) {\n          if (!pred(value[i])) {\n            return false;\n          }\n        }\n        return true;\n      }\n      return false;\n    };\n\n    const noop = () => {\n    };\n    const noarg = f => () => f();\n    const compose = (fa, fb) => {\n      return (...args) => {\n        return fa(fb.apply(null, args));\n      };\n    };\n    const compose1 = (fbc, fab) => a => fbc(fab(a));\n    const constant$1 = value => {\n      return () => {\n        return value;\n      };\n    };\n    const identity = x => {\n      return x;\n    };\n    const tripleEquals = (a, b) => {\n      return a === b;\n    };\n    function curry(fn, ...initialArgs) {\n      return (...restArgs) => {\n        const all = initialArgs.concat(restArgs);\n        return fn.apply(null, all);\n      };\n    }\n    const not = f => t => !f(t);\n    const die = msg => {\n      return () => {\n        throw new Error(msg);\n      };\n    };\n    const apply = f => {\n      return f();\n    };\n    const never = constant$1(false);\n    const always = constant$1(true);\n\n    var global$a = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n    class Optional {\n      constructor(tag, value) {\n        this.tag = tag;\n        this.value = value;\n      }\n      static some(value) {\n        return new Optional(true, value);\n      }\n      static none() {\n        return Optional.singletonNone;\n      }\n      fold(onNone, onSome) {\n        if (this.tag) {\n          return onSome(this.value);\n        } else {\n          return onNone();\n        }\n      }\n      isSome() {\n        return this.tag;\n      }\n      isNone() {\n        return !this.tag;\n      }\n      map(mapper) {\n        if (this.tag) {\n          return Optional.some(mapper(this.value));\n        } else {\n          return Optional.none();\n        }\n      }\n      bind(binder) {\n        if (this.tag) {\n          return binder(this.value);\n        } else {\n          return Optional.none();\n        }\n      }\n      exists(predicate) {\n        return this.tag && predicate(this.value);\n      }\n      forall(predicate) {\n        return !this.tag || predicate(this.value);\n      }\n      filter(predicate) {\n        if (!this.tag || predicate(this.value)) {\n          return this;\n        } else {\n          return Optional.none();\n        }\n      }\n      getOr(replacement) {\n        return this.tag ? this.value : replacement;\n      }\n      or(replacement) {\n        return this.tag ? this : replacement;\n      }\n      getOrThunk(thunk) {\n        return this.tag ? this.value : thunk();\n      }\n      orThunk(thunk) {\n        return this.tag ? this : thunk();\n      }\n      getOrDie(message) {\n        if (!this.tag) {\n          throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n        } else {\n          return this.value;\n        }\n      }\n      static from(value) {\n        return isNonNullable(value) ? Optional.some(value) : Optional.none();\n      }\n      getOrNull() {\n        return this.tag ? this.value : null;\n      }\n      getOrUndefined() {\n        return this.value;\n      }\n      each(worker) {\n        if (this.tag) {\n          worker(this.value);\n        }\n      }\n      toArray() {\n        return this.tag ? [this.value] : [];\n      }\n      toString() {\n        return this.tag ? `some(${ this.value })` : 'none()';\n      }\n    }\n    Optional.singletonNone = new Optional(false);\n\n    const nativeSlice = Array.prototype.slice;\n    const nativeIndexOf = Array.prototype.indexOf;\n    const nativePush = Array.prototype.push;\n    const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n    const indexOf = (xs, x) => {\n      const r = rawIndexOf(xs, x);\n      return r === -1 ? Optional.none() : Optional.some(r);\n    };\n    const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n    const exists = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    const range$2 = (num, f) => {\n      const r = [];\n      for (let i = 0; i < num; i++) {\n        r.push(f(i));\n      }\n      return r;\n    };\n    const chunk$1 = (array, size) => {\n      const r = [];\n      for (let i = 0; i < array.length; i += size) {\n        const s = nativeSlice.call(array, i, i + size);\n        r.push(s);\n      }\n      return r;\n    };\n    const map$2 = (xs, f) => {\n      const len = xs.length;\n      const r = new Array(len);\n      for (let i = 0; i < len; i++) {\n        const x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    const each$1 = (xs, f) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const eachr = (xs, f) => {\n      for (let i = xs.length - 1; i >= 0; i--) {\n        const x = xs[i];\n        f(x, i);\n      }\n    };\n    const partition$3 = (xs, pred) => {\n      const pass = [];\n      const fail = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        const arr = pred(x, i) ? pass : fail;\n        arr.push(x);\n      }\n      return {\n        pass,\n        fail\n      };\n    };\n    const filter$2 = (xs, pred) => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    const foldr = (xs, f, acc) => {\n      eachr(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const foldl = (xs, f, acc) => {\n      each$1(xs, (x, i) => {\n        acc = f(acc, x, i);\n      });\n      return acc;\n    };\n    const findUntil = (xs, pred, until) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(x);\n        } else if (until(x, i)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const find$5 = (xs, pred) => {\n      return findUntil(xs, pred, never);\n    };\n    const findIndex$1 = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        if (pred(x, i)) {\n          return Optional.some(i);\n        }\n      }\n      return Optional.none();\n    };\n    const flatten = xs => {\n      const r = [];\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    const bind$3 = (xs, f) => flatten(map$2(xs, f));\n    const forall = (xs, pred) => {\n      for (let i = 0, len = xs.length; i < len; ++i) {\n        const x = xs[i];\n        if (pred(x, i) !== true) {\n          return false;\n        }\n      }\n      return true;\n    };\n    const reverse = xs => {\n      const r = nativeSlice.call(xs, 0);\n      r.reverse();\n      return r;\n    };\n    const difference = (a1, a2) => filter$2(a1, x => !contains$2(a2, x));\n    const mapToObject = (xs, f) => {\n      const r = {};\n      for (let i = 0, len = xs.length; i < len; i++) {\n        const x = xs[i];\n        r[String(x)] = f(x, i);\n      }\n      return r;\n    };\n    const pure$2 = x => [x];\n    const sort = (xs, comparator) => {\n      const copy = nativeSlice.call(xs, 0);\n      copy.sort(comparator);\n      return copy;\n    };\n    const get$h = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n    const head = xs => get$h(xs, 0);\n    const last$1 = xs => get$h(xs, xs.length - 1);\n    const from = isFunction(Array.from) ? Array.from : x => nativeSlice.call(x);\n    const findMap = (arr, f) => {\n      for (let i = 0; i < arr.length; i++) {\n        const r = f(arr[i], i);\n        if (r.isSome()) {\n          return r;\n        }\n      }\n      return Optional.none();\n    };\n\n    const keys = Object.keys;\n    const hasOwnProperty = Object.hasOwnProperty;\n    const each = (obj, f) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        f(x, i);\n      }\n    };\n    const map$1 = (obj, f) => {\n      return tupleMap(obj, (x, i) => ({\n        k: i,\n        v: f(x, i)\n      }));\n    };\n    const tupleMap = (obj, f) => {\n      const r = {};\n      each(obj, (x, i) => {\n        const tuple = f(x, i);\n        r[tuple.k] = tuple.v;\n      });\n      return r;\n    };\n    const objAcc = r => (x, i) => {\n      r[i] = x;\n    };\n    const internalFilter = (obj, pred, onTrue, onFalse) => {\n      each(obj, (x, i) => {\n        (pred(x, i) ? onTrue : onFalse)(x, i);\n      });\n    };\n    const bifilter = (obj, pred) => {\n      const t = {};\n      const f = {};\n      internalFilter(obj, pred, objAcc(t), objAcc(f));\n      return {\n        t,\n        f\n      };\n    };\n    const filter$1 = (obj, pred) => {\n      const t = {};\n      internalFilter(obj, pred, objAcc(t), noop);\n      return t;\n    };\n    const mapToArray = (obj, f) => {\n      const r = [];\n      each(obj, (value, name) => {\n        r.push(f(value, name));\n      });\n      return r;\n    };\n    const find$4 = (obj, pred) => {\n      const props = keys(obj);\n      for (let k = 0, len = props.length; k < len; k++) {\n        const i = props[k];\n        const x = obj[i];\n        if (pred(x, i, obj)) {\n          return Optional.some(x);\n        }\n      }\n      return Optional.none();\n    };\n    const values = obj => {\n      return mapToArray(obj, identity);\n    };\n    const get$g = (obj, key) => {\n      return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n    };\n    const has$2 = (obj, key) => hasOwnProperty.call(obj, key);\n    const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n    const is$1 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n    const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n    const cat = arr => {\n      const r = [];\n      const push = x => {\n        r.push(x);\n      };\n      for (let i = 0; i < arr.length; i++) {\n        arr[i].each(push);\n      }\n      return r;\n    };\n    const sequence = arr => {\n      const r = [];\n      for (let i = 0; i < arr.length; i++) {\n        const x = arr[i];\n        if (x.isSome()) {\n          r.push(x.getOrDie());\n        } else {\n          return Optional.none();\n        }\n      }\n      return Optional.some(r);\n    };\n    const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n    const lift3 = (oa, ob, oc, f) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n    const mapFrom = (a, f) => a !== undefined && a !== null ? Optional.some(f(a)) : Optional.none();\n    const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n    const addToEnd = (str, suffix) => {\n      return str + suffix;\n    };\n    const removeFromStart = (str, numChars) => {\n      return str.substring(numChars);\n    };\n\n    const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n    const removeLeading = (str, prefix) => {\n      return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n    };\n    const ensureTrailing = (str, suffix) => {\n      return endsWith(str, suffix) ? str : addToEnd(str, suffix);\n    };\n    const contains$1 = (str, substr, start = 0, end) => {\n      const idx = str.indexOf(substr, start);\n      if (idx !== -1) {\n        return isUndefined(end) ? true : idx + substr.length <= end;\n      } else {\n        return false;\n      }\n    };\n    const startsWith = (str, prefix) => {\n      return checkRange(str, prefix, 0);\n    };\n    const endsWith = (str, suffix) => {\n      return checkRange(str, suffix, str.length - suffix.length);\n    };\n    const blank = r => s => s.replace(r, '');\n    const trim$1 = blank(/^\\s+|\\s+$/g);\n    const isNotEmpty = s => s.length > 0;\n    const isEmpty = s => !isNotEmpty(s);\n\n    const isSupported$1 = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n    const fromHtml$2 = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        const message = 'HTML does not have a single root node';\n        console.error(message, html);\n        throw new Error(message);\n      }\n      return fromDom(div.childNodes[0]);\n    };\n    const fromTag = (tag, scope) => {\n      const doc = scope || document;\n      const node = doc.createElement(tag);\n      return fromDom(node);\n    };\n    const fromText = (text, scope) => {\n      const doc = scope || document;\n      const node = doc.createTextNode(text);\n      return fromDom(node);\n    };\n    const fromDom = node => {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: node };\n    };\n    const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n    const SugarElement = {\n      fromHtml: fromHtml$2,\n      fromTag,\n      fromText,\n      fromDom,\n      fromPoint\n    };\n\n    const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n    const path$1 = (parts, scope) => {\n      let o = scope !== undefined && scope !== null ? scope : Global;\n      for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n        o = o[parts[i]];\n      }\n      return o;\n    };\n    const resolve = (p, scope) => {\n      const parts = p.split('.');\n      return path$1(parts, scope);\n    };\n\n    const unsafe = (name, scope) => {\n      return resolve(name, scope);\n    };\n    const getOrDie$1 = (name, scope) => {\n      const actual = unsafe(name, scope);\n      if (actual === undefined || actual === null) {\n        throw new Error(name + ' not available on this browser');\n      }\n      return actual;\n    };\n\n    const getPrototypeOf = Object.getPrototypeOf;\n    const sandHTMLElement = scope => {\n      return getOrDie$1('HTMLElement', scope);\n    };\n    const isPrototypeOf = x => {\n      const scope = resolve('ownerDocument.defaultView', x);\n      return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n    };\n\n    const DOCUMENT = 9;\n    const DOCUMENT_FRAGMENT = 11;\n    const ELEMENT = 1;\n    const TEXT = 3;\n\n    const name$3 = element => {\n      const r = element.dom.nodeName;\n      return r.toLowerCase();\n    };\n    const type$1 = element => element.dom.nodeType;\n    const isType = t => element => type$1(element) === t;\n    const isHTMLElement = element => isElement$1(element) && isPrototypeOf(element.dom);\n    const isElement$1 = isType(ELEMENT);\n    const isText = isType(TEXT);\n    const isDocument = isType(DOCUMENT);\n    const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n    const isTag = tag => e => isElement$1(e) && name$3(e) === tag;\n\n    const is = (element, selector) => {\n      const dom = element.dom;\n      if (dom.nodeType !== ELEMENT) {\n        return false;\n      } else {\n        const elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n    const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n    const all$3 = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? [] : map$2(base.querySelectorAll(selector), SugarElement.fromDom);\n    };\n    const one = (selector, scope) => {\n      const base = scope === undefined ? document : scope.dom;\n      return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n    };\n\n    const eq = (e1, e2) => e1.dom === e2.dom;\n    const contains = (e1, e2) => {\n      const d1 = e1.dom;\n      const d2 = e2.dom;\n      return d1 === d2 ? false : d1.contains(d2);\n    };\n\n    const owner$4 = element => SugarElement.fromDom(element.dom.ownerDocument);\n    const documentOrOwner = dos => isDocument(dos) ? dos : owner$4(dos);\n    const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n    const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n    const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n    const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n    const offsetParent = element => Optional.from(element.dom.offsetParent).map(SugarElement.fromDom);\n    const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n    const children = element => map$2(element.dom.childNodes, SugarElement.fromDom);\n    const child$2 = (element, index) => {\n      const cs = element.dom.childNodes;\n      return Optional.from(cs[index]).map(SugarElement.fromDom);\n    };\n    const firstChild = element => child$2(element, 0);\n    const spot = (element, offset) => ({\n      element,\n      offset\n    });\n    const leaf = (element, offset) => {\n      const cs = children(element);\n      return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);\n    };\n\n    const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n    const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n    const isSupported = constant$1(supported);\n    const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n    const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n    const isInShadowRoot = e => getShadowRoot(e).isSome();\n    const getShadowRoot = e => {\n      const r = getRootNode(e);\n      return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n    };\n    const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n    const getOriginalEventTarget = event => {\n      if (isSupported() && isNonNullable(event.target)) {\n        const el = SugarElement.fromDom(event.target);\n        if (isElement$1(el) && isOpenShadowHost(el)) {\n          if (event.composed && event.composedPath) {\n            const composedPath = event.composedPath();\n            if (composedPath) {\n              return head(composedPath);\n            }\n          }\n        }\n      }\n      return Optional.from(event.target);\n    };\n    const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n    const inBody = element => {\n      const dom = isText(element) ? element.dom.parentNode : element.dom;\n      if (dom === undefined || dom === null || dom.ownerDocument === null) {\n        return false;\n      }\n      const doc = dom.ownerDocument;\n      return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n    };\n    const body = () => getBody(SugarElement.fromDom(document));\n    const getBody = doc => {\n      const b = doc.dom.body;\n      if (b === null || b === undefined) {\n        throw new Error('Body is not available yet');\n      }\n      return SugarElement.fromDom(b);\n    };\n\n    const rawSet = (dom, key, value) => {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    const set$9 = (element, key, value) => {\n      rawSet(element.dom, key, value);\n    };\n    const setAll$1 = (element, attrs) => {\n      const dom = element.dom;\n      each(attrs, (v, k) => {\n        rawSet(dom, k, v);\n      });\n    };\n    const get$f = (element, key) => {\n      const v = element.dom.getAttribute(key);\n      return v === null ? undefined : v;\n    };\n    const getOpt = (element, key) => Optional.from(get$f(element, key));\n    const has$1 = (element, key) => {\n      const dom = element.dom;\n      return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n    };\n    const remove$7 = (element, key) => {\n      element.dom.removeAttribute(key);\n    };\n    const clone$1 = element => foldl(element.dom.attributes, (acc, attr) => {\n      acc[attr.name] = attr.value;\n      return acc;\n    }, {});\n\n    const internalSet = (dom, property, value) => {\n      if (!isString(value)) {\n        console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n        throw new Error('CSS value must be a string: ' + value);\n      }\n      if (isSupported$1(dom)) {\n        dom.style.setProperty(property, value);\n      }\n    };\n    const internalRemove = (dom, property) => {\n      if (isSupported$1(dom)) {\n        dom.style.removeProperty(property);\n      }\n    };\n    const set$8 = (element, property, value) => {\n      const dom = element.dom;\n      internalSet(dom, property, value);\n    };\n    const setAll = (element, css) => {\n      const dom = element.dom;\n      each(css, (v, k) => {\n        internalSet(dom, k, v);\n      });\n    };\n    const setOptions = (element, css) => {\n      const dom = element.dom;\n      each(css, (v, k) => {\n        v.fold(() => {\n          internalRemove(dom, k);\n        }, value => {\n          internalSet(dom, k, value);\n        });\n      });\n    };\n    const get$e = (element, property) => {\n      const dom = element.dom;\n      const styles = window.getComputedStyle(dom);\n      const r = styles.getPropertyValue(property);\n      return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n    };\n    const getUnsafeProperty = (dom, property) => isSupported$1(dom) ? dom.style.getPropertyValue(property) : '';\n    const getRaw = (element, property) => {\n      const dom = element.dom;\n      const raw = getUnsafeProperty(dom, property);\n      return Optional.from(raw).filter(r => r.length > 0);\n    };\n    const getAllRaw = element => {\n      const css = {};\n      const dom = element.dom;\n      if (isSupported$1(dom)) {\n        for (let i = 0; i < dom.style.length; i++) {\n          const ruleName = dom.style.item(i);\n          css[ruleName] = dom.style[ruleName];\n        }\n      }\n      return css;\n    };\n    const isValidValue = (tag, property, value) => {\n      const element = SugarElement.fromTag(tag);\n      set$8(element, property, value);\n      const style = getRaw(element, property);\n      return style.isSome();\n    };\n    const remove$6 = (element, property) => {\n      const dom = element.dom;\n      internalRemove(dom, property);\n      if (is$1(getOpt(element, 'style').map(trim$1), '')) {\n        remove$7(element, 'style');\n      }\n    };\n    const reflow = e => e.dom.offsetWidth;\n\n    const Dimension = (name, getOffset) => {\n      const set = (element, h) => {\n        if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n          throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n        }\n        const dom = element.dom;\n        if (isSupported$1(dom)) {\n          dom.style[name] = h + 'px';\n        }\n      };\n      const get = element => {\n        const r = getOffset(element);\n        if (r <= 0 || r === null) {\n          const css = get$e(element, name);\n          return parseFloat(css) || 0;\n        }\n        return r;\n      };\n      const getOuter = get;\n      const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n        const val = get$e(element, property);\n        const value = val === undefined ? 0 : parseInt(val, 10);\n        return isNaN(value) ? acc : acc + value;\n      }, 0);\n      const max = (element, value, properties) => {\n        const cumulativeInclusions = aggregate(element, properties);\n        const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n        return absoluteMax;\n      };\n      return {\n        set,\n        get,\n        getOuter,\n        aggregate,\n        max\n      };\n    };\n\n    const api$2 = Dimension('height', element => {\n      const dom = element.dom;\n      return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n    });\n    const get$d = element => api$2.get(element);\n    const getOuter$2 = element => api$2.getOuter(element);\n    const setMax$1 = (element, value) => {\n      const inclusions = [\n        'margin-top',\n        'border-top-width',\n        'padding-top',\n        'padding-bottom',\n        'border-bottom-width',\n        'margin-bottom'\n      ];\n      const absMax = api$2.max(element, value, inclusions);\n      set$8(element, 'max-height', absMax + 'px');\n    };\n\n    const r$1 = (left, top) => {\n      const translate = (x, y) => r$1(left + x, top + y);\n      return {\n        left,\n        top,\n        translate\n      };\n    };\n    const SugarPosition = r$1;\n\n    const boxPosition = dom => {\n      const box = dom.getBoundingClientRect();\n      return SugarPosition(box.left, box.top);\n    };\n    const firstDefinedOrZero = (a, b) => {\n      if (a !== undefined) {\n        return a;\n      } else {\n        return b !== undefined ? b : 0;\n      }\n    };\n    const absolute$3 = element => {\n      const doc = element.dom.ownerDocument;\n      const body = doc.body;\n      const win = doc.defaultView;\n      const html = doc.documentElement;\n      if (body === element.dom) {\n        return SugarPosition(body.offsetLeft, body.offsetTop);\n      }\n      const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n      const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n      const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n      const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n      return viewport$1(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n    };\n    const viewport$1 = element => {\n      const dom = element.dom;\n      const doc = dom.ownerDocument;\n      const body = doc.body;\n      if (body === dom) {\n        return SugarPosition(body.offsetLeft, body.offsetTop);\n      }\n      if (!inBody(element)) {\n        return SugarPosition(0, 0);\n      }\n      return boxPosition(dom);\n    };\n\n    const api$1 = Dimension('width', element => element.dom.offsetWidth);\n    const set$7 = (element, h) => api$1.set(element, h);\n    const get$c = element => api$1.get(element);\n    const getOuter$1 = element => api$1.getOuter(element);\n    const setMax = (element, value) => {\n      const inclusions = [\n        'margin-left',\n        'border-left-width',\n        'padding-left',\n        'padding-right',\n        'border-right-width',\n        'margin-right'\n      ];\n      const absMax = api$1.max(element, value, inclusions);\n      set$8(element, 'max-width', absMax + 'px');\n    };\n\n    const cached = f => {\n      let called = false;\n      let r;\n      return (...args) => {\n        if (!called) {\n          called = true;\n          r = f.apply(null, args);\n        }\n        return r;\n      };\n    };\n\n    const DeviceType = (os, browser, userAgent, mediaMatch) => {\n      const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n      const isiPhone = os.isiOS() && !isiPad;\n      const isMobile = os.isiOS() || os.isAndroid();\n      const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n      const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n      const isPhone = isiPhone || isMobile && !isTablet;\n      const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n      const isDesktop = !isPhone && !isTablet && !iOSwebview;\n      return {\n        isiPad: constant$1(isiPad),\n        isiPhone: constant$1(isiPhone),\n        isTablet: constant$1(isTablet),\n        isPhone: constant$1(isPhone),\n        isTouch: constant$1(isTouch),\n        isAndroid: os.isAndroid,\n        isiOS: os.isiOS,\n        isWebView: constant$1(iOSwebview),\n        isDesktop: constant$1(isDesktop)\n      };\n    };\n\n    const firstMatch = (regexes, s) => {\n      for (let i = 0; i < regexes.length; i++) {\n        const x = regexes[i];\n        if (x.test(s)) {\n          return x;\n        }\n      }\n      return undefined;\n    };\n    const find$3 = (regexes, agent) => {\n      const r = firstMatch(regexes, agent);\n      if (!r) {\n        return {\n          major: 0,\n          minor: 0\n        };\n      }\n      const group = i => {\n        return Number(agent.replace(r, '$' + i));\n      };\n      return nu$d(group(1), group(2));\n    };\n    const detect$4 = (versionRegexes, agent) => {\n      const cleanedAgent = String(agent).toLowerCase();\n      if (versionRegexes.length === 0) {\n        return unknown$3();\n      }\n      return find$3(versionRegexes, cleanedAgent);\n    };\n    const unknown$3 = () => {\n      return nu$d(0, 0);\n    };\n    const nu$d = (major, minor) => {\n      return {\n        major,\n        minor\n      };\n    };\n    const Version = {\n      nu: nu$d,\n      detect: detect$4,\n      unknown: unknown$3\n    };\n\n    const detectBrowser$1 = (browsers, userAgentData) => {\n      return findMap(userAgentData.brands, uaBrand => {\n        const lcBrand = uaBrand.brand.toLowerCase();\n        return find$5(browsers, browser => {\n          var _a;\n          return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n        }).map(info => ({\n          current: info.name,\n          version: Version.nu(parseInt(uaBrand.version, 10), 0)\n        }));\n      });\n    };\n\n    const detect$3 = (candidates, userAgent) => {\n      const agent = String(userAgent).toLowerCase();\n      return find$5(candidates, candidate => {\n        return candidate.search(agent);\n      });\n    };\n    const detectBrowser = (browsers, userAgent) => {\n      return detect$3(browsers, userAgent).map(browser => {\n        const version = Version.detect(browser.versionRegexes, userAgent);\n        return {\n          current: browser.name,\n          version\n        };\n      });\n    };\n    const detectOs = (oses, userAgent) => {\n      return detect$3(oses, userAgent).map(os => {\n        const version = Version.detect(os.versionRegexes, userAgent);\n        return {\n          current: os.name,\n          version\n        };\n      });\n    };\n\n    const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n    const checkContains = target => {\n      return uastring => {\n        return contains$1(uastring, target);\n      };\n    };\n    const browsers = [\n      {\n        name: 'Edge',\n        versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n        search: uastring => {\n          return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n        }\n      },\n      {\n        name: 'Chromium',\n        brand: 'Chromium',\n        versionRegexes: [\n          /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n          normalVersionRegex\n        ],\n        search: uastring => {\n          return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n        }\n      },\n      {\n        name: 'IE',\n        versionRegexes: [\n          /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*?rv:([0-9]+)\\.([0-9]+).*/\n        ],\n        search: uastring => {\n          return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n        }\n      },\n      {\n        name: 'Opera',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n        ],\n        search: checkContains('opera')\n      },\n      {\n        name: 'Firefox',\n        versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n        search: checkContains('firefox')\n      },\n      {\n        name: 'Safari',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\n        ],\n        search: uastring => {\n          return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n        }\n      }\n    ];\n    const oses = [\n      {\n        name: 'Windows',\n        search: checkContains('win'),\n        versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'iOS',\n        search: uastring => {\n          return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n        },\n        versionRegexes: [\n          /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n        ]\n      },\n      {\n        name: 'Android',\n        search: checkContains('android'),\n        versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'macOS',\n        search: checkContains('mac os x'),\n        versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n      },\n      {\n        name: 'Linux',\n        search: checkContains('linux'),\n        versionRegexes: []\n      },\n      {\n        name: 'Solaris',\n        search: checkContains('sunos'),\n        versionRegexes: []\n      },\n      {\n        name: 'FreeBSD',\n        search: checkContains('freebsd'),\n        versionRegexes: []\n      },\n      {\n        name: 'ChromeOS',\n        search: checkContains('cros'),\n        versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n      }\n    ];\n    const PlatformInfo = {\n      browsers: constant$1(browsers),\n      oses: constant$1(oses)\n    };\n\n    const edge = 'Edge';\n    const chromium = 'Chromium';\n    const ie = 'IE';\n    const opera = 'Opera';\n    const firefox = 'Firefox';\n    const safari = 'Safari';\n    const unknown$2 = () => {\n      return nu$c({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    const nu$c = info => {\n      const current = info.current;\n      const version = info.version;\n      const isBrowser = name => () => current === name;\n      return {\n        current,\n        version,\n        isEdge: isBrowser(edge),\n        isChromium: isBrowser(chromium),\n        isIE: isBrowser(ie),\n        isOpera: isBrowser(opera),\n        isFirefox: isBrowser(firefox),\n        isSafari: isBrowser(safari)\n      };\n    };\n    const Browser = {\n      unknown: unknown$2,\n      nu: nu$c,\n      edge: constant$1(edge),\n      chromium: constant$1(chromium),\n      ie: constant$1(ie),\n      opera: constant$1(opera),\n      firefox: constant$1(firefox),\n      safari: constant$1(safari)\n    };\n\n    const windows = 'Windows';\n    const ios = 'iOS';\n    const android = 'Android';\n    const linux = 'Linux';\n    const macos = 'macOS';\n    const solaris = 'Solaris';\n    const freebsd = 'FreeBSD';\n    const chromeos = 'ChromeOS';\n    const unknown$1 = () => {\n      return nu$b({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    const nu$b = info => {\n      const current = info.current;\n      const version = info.version;\n      const isOS = name => () => current === name;\n      return {\n        current,\n        version,\n        isWindows: isOS(windows),\n        isiOS: isOS(ios),\n        isAndroid: isOS(android),\n        isMacOS: isOS(macos),\n        isLinux: isOS(linux),\n        isSolaris: isOS(solaris),\n        isFreeBSD: isOS(freebsd),\n        isChromeOS: isOS(chromeos)\n      };\n    };\n    const OperatingSystem = {\n      unknown: unknown$1,\n      nu: nu$b,\n      windows: constant$1(windows),\n      ios: constant$1(ios),\n      android: constant$1(android),\n      linux: constant$1(linux),\n      macos: constant$1(macos),\n      solaris: constant$1(solaris),\n      freebsd: constant$1(freebsd),\n      chromeos: constant$1(chromeos)\n    };\n\n    const detect$2 = (userAgent, userAgentDataOpt, mediaMatch) => {\n      const browsers = PlatformInfo.browsers();\n      const oses = PlatformInfo.oses();\n      const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n      const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n      const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n      return {\n        browser,\n        os,\n        deviceType\n      };\n    };\n    const PlatformDetection = { detect: detect$2 };\n\n    const mediaMatch = query => window.matchMedia(query).matches;\n    let platform = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n    const detect$1 = () => platform();\n\n    const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n      target,\n      x,\n      y,\n      stop,\n      prevent,\n      kill,\n      raw\n    });\n    const fromRawEvent$1 = rawEvent => {\n      const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n      const stop = () => rawEvent.stopPropagation();\n      const prevent = () => rawEvent.preventDefault();\n      const kill = compose(prevent, stop);\n      return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n    };\n    const handle = (filter, handler) => rawEvent => {\n      if (filter(rawEvent)) {\n        handler(fromRawEvent$1(rawEvent));\n      }\n    };\n    const binder = (element, event, filter, handler, useCapture) => {\n      const wrapped = handle(filter, handler);\n      element.dom.addEventListener(event, wrapped, useCapture);\n      return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n    };\n    const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n    const capture$1 = (element, event, filter, handler) => binder(element, event, filter, handler, true);\n    const unbind = (element, event, handler, useCapture) => {\n      element.dom.removeEventListener(event, handler, useCapture);\n    };\n\n    const before$1 = (marker, element) => {\n      const parent$1 = parent(marker);\n      parent$1.each(v => {\n        v.dom.insertBefore(element.dom, marker.dom);\n      });\n    };\n    const after$2 = (marker, element) => {\n      const sibling = nextSibling(marker);\n      sibling.fold(() => {\n        const parent$1 = parent(marker);\n        parent$1.each(v => {\n          append$2(v, element);\n        });\n      }, v => {\n        before$1(v, element);\n      });\n    };\n    const prepend$1 = (parent, element) => {\n      const firstChild$1 = firstChild(parent);\n      firstChild$1.fold(() => {\n        append$2(parent, element);\n      }, v => {\n        parent.dom.insertBefore(element.dom, v.dom);\n      });\n    };\n    const append$2 = (parent, element) => {\n      parent.dom.appendChild(element.dom);\n    };\n    const appendAt = (parent, element, index) => {\n      child$2(parent, index).fold(() => {\n        append$2(parent, element);\n      }, v => {\n        before$1(v, element);\n      });\n    };\n\n    const append$1 = (parent, elements) => {\n      each$1(elements, x => {\n        append$2(parent, x);\n      });\n    };\n\n    const empty = element => {\n      element.dom.textContent = '';\n      each$1(children(element), rogue => {\n        remove$5(rogue);\n      });\n    };\n    const remove$5 = element => {\n      const dom = element.dom;\n      if (dom.parentNode !== null) {\n        dom.parentNode.removeChild(dom);\n      }\n    };\n\n    const get$b = _DOC => {\n      const doc = _DOC !== undefined ? _DOC.dom : document;\n      const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n      const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n      return SugarPosition(x, y);\n    };\n    const to = (x, y, _DOC) => {\n      const doc = _DOC !== undefined ? _DOC.dom : document;\n      const win = doc.defaultView;\n      if (win) {\n        win.scrollTo(x, y);\n      }\n    };\n\n    const get$a = _win => {\n      const win = _win === undefined ? window : _win;\n      if (detect$1().browser.isFirefox()) {\n        return Optional.none();\n      } else {\n        return Optional.from(win.visualViewport);\n      }\n    };\n    const bounds$1 = (x, y, width, height) => ({\n      x,\n      y,\n      width,\n      height,\n      right: x + width,\n      bottom: y + height\n    });\n    const getBounds$3 = _win => {\n      const win = _win === undefined ? window : _win;\n      const doc = win.document;\n      const scroll = get$b(SugarElement.fromDom(doc));\n      return get$a(win).fold(() => {\n        const html = win.document.documentElement;\n        const width = html.clientWidth;\n        const height = html.clientHeight;\n        return bounds$1(scroll.left, scroll.top, width, height);\n      }, visualViewport => bounds$1(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n    };\n\n    const getDocument = () => SugarElement.fromDom(document);\n\n    const walkUp = (navigation, doc) => {\n      const frame = navigation.view(doc);\n      return frame.fold(constant$1([]), f => {\n        const parent = navigation.owner(f);\n        const rest = walkUp(navigation, parent);\n        return [f].concat(rest);\n      });\n    };\n    const pathTo = (element, navigation) => {\n      const d = navigation.owner(element);\n      const paths = walkUp(navigation, d);\n      return Optional.some(paths);\n    };\n\n    const view = doc => {\n      var _a;\n      const element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement);\n      return element.map(SugarElement.fromDom);\n    };\n    const owner$3 = element => owner$4(element);\n\n    var Navigation = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        view: view,\n        owner: owner$3\n    });\n\n    const find$2 = element => {\n      const doc = getDocument();\n      const scroll = get$b(doc);\n      const path = pathTo(element, Navigation);\n      return path.fold(curry(absolute$3, element), frames => {\n        const offset = viewport$1(element);\n        const r = foldr(frames, (b, a) => {\n          const loc = viewport$1(a);\n          return {\n            left: b.left + loc.left,\n            top: b.top + loc.top\n          };\n        }, {\n          left: 0,\n          top: 0\n        });\n        return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n      });\n    };\n\n    const pointed = (point, width, height) => ({\n      point,\n      width,\n      height\n    });\n    const rect = (x, y, width, height) => ({\n      x,\n      y,\n      width,\n      height\n    });\n    const bounds = (x, y, width, height) => ({\n      x,\n      y,\n      width,\n      height,\n      right: x + width,\n      bottom: y + height\n    });\n    const box$1 = element => {\n      const xy = absolute$3(element);\n      const w = getOuter$1(element);\n      const h = getOuter$2(element);\n      return bounds(xy.left, xy.top, w, h);\n    };\n    const absolute$2 = element => {\n      const position = find$2(element);\n      const width = getOuter$1(element);\n      const height = getOuter$2(element);\n      return bounds(position.left, position.top, width, height);\n    };\n    const win = () => getBounds$3(window);\n\n    const value$4 = value => {\n      const applyHelper = fn => fn(value);\n      const constHelper = constant$1(value);\n      const outputHelper = () => output;\n      const output = {\n        tag: true,\n        inner: value,\n        fold: (_onError, onValue) => onValue(value),\n        isValue: always,\n        isError: never,\n        map: mapper => Result.value(mapper(value)),\n        mapError: outputHelper,\n        bind: applyHelper,\n        exists: applyHelper,\n        forall: applyHelper,\n        getOr: constHelper,\n        or: outputHelper,\n        getOrThunk: constHelper,\n        orThunk: outputHelper,\n        getOrDie: constHelper,\n        each: fn => {\n          fn(value);\n        },\n        toOptional: () => Optional.some(value)\n      };\n      return output;\n    };\n    const error$1 = error => {\n      const outputHelper = () => output;\n      const output = {\n        tag: false,\n        inner: error,\n        fold: (onError, _onValue) => onError(error),\n        isValue: never,\n        isError: always,\n        map: outputHelper,\n        mapError: mapper => Result.error(mapper(error)),\n        bind: outputHelper,\n        exists: never,\n        forall: always,\n        getOr: identity,\n        or: identity,\n        getOrThunk: apply,\n        orThunk: apply,\n        getOrDie: die(String(error)),\n        each: noop,\n        toOptional: Optional.none\n      };\n      return output;\n    };\n    const fromOption = (optional, err) => optional.fold(() => error$1(err), value$4);\n    const Result = {\n      value: value$4,\n      error: error$1,\n      fromOption\n    };\n\n    var SimpleResultType;\n    (function (SimpleResultType) {\n      SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';\n      SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';\n    }(SimpleResultType || (SimpleResultType = {})));\n    const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n    const partition$2 = results => {\n      const values = [];\n      const errors = [];\n      each$1(results, obj => {\n        fold$1(obj, err => errors.push(err), val => values.push(val));\n      });\n      return {\n        values,\n        errors\n      };\n    };\n    const mapError = (res, f) => {\n      if (res.stype === SimpleResultType.Error) {\n        return {\n          stype: SimpleResultType.Error,\n          serror: f(res.serror)\n        };\n      } else {\n        return res;\n      }\n    };\n    const map = (res, f) => {\n      if (res.stype === SimpleResultType.Value) {\n        return {\n          stype: SimpleResultType.Value,\n          svalue: f(res.svalue)\n        };\n      } else {\n        return res;\n      }\n    };\n    const bind$1 = (res, f) => {\n      if (res.stype === SimpleResultType.Value) {\n        return f(res.svalue);\n      } else {\n        return res;\n      }\n    };\n    const bindError = (res, f) => {\n      if (res.stype === SimpleResultType.Error) {\n        return f(res.serror);\n      } else {\n        return res;\n      }\n    };\n    const svalue = v => ({\n      stype: SimpleResultType.Value,\n      svalue: v\n    });\n    const serror = e => ({\n      stype: SimpleResultType.Error,\n      serror: e\n    });\n    const toResult$1 = res => fold$1(res, Result.error, Result.value);\n    const fromResult$1 = res => res.fold(serror, svalue);\n    const SimpleResult = {\n      fromResult: fromResult$1,\n      toResult: toResult$1,\n      svalue,\n      partition: partition$2,\n      serror,\n      bind: bind$1,\n      bindError,\n      map,\n      mapError,\n      fold: fold$1\n    };\n\n    const field$2 = (key, newKey, presence, prop) => ({\n      tag: 'field',\n      key,\n      newKey,\n      presence,\n      prop\n    });\n    const customField$1 = (newKey, instantiator) => ({\n      tag: 'custom',\n      newKey,\n      instantiator\n    });\n    const fold = (value, ifField, ifCustom) => {\n      switch (value.tag) {\n      case 'field':\n        return ifField(value.key, value.newKey, value.presence, value.prop);\n      case 'custom':\n        return ifCustom(value.newKey, value.instantiator);\n      }\n    };\n\n    const shallow$1 = (old, nu) => {\n      return nu;\n    };\n    const deep = (old, nu) => {\n      const bothObjects = isPlainObject(old) && isPlainObject(nu);\n      return bothObjects ? deepMerge(old, nu) : nu;\n    };\n    const baseMerge = merger => {\n      return (...objects) => {\n        if (objects.length === 0) {\n          throw new Error(`Can't merge zero objects`);\n        }\n        const ret = {};\n        for (let j = 0; j < objects.length; j++) {\n          const curObject = objects[j];\n          for (const key in curObject) {\n            if (has$2(curObject, key)) {\n              ret[key] = merger(ret[key], curObject[key]);\n            }\n          }\n        }\n        return ret;\n      };\n    };\n    const deepMerge = baseMerge(deep);\n    const merge$1 = baseMerge(shallow$1);\n\n    const required$2 = () => ({\n      tag: 'required',\n      process: {}\n    });\n    const defaultedThunk = fallbackThunk => ({\n      tag: 'defaultedThunk',\n      process: fallbackThunk\n    });\n    const defaulted$1 = fallback => defaultedThunk(constant$1(fallback));\n    const asOption = () => ({\n      tag: 'option',\n      process: {}\n    });\n    const mergeWithThunk = baseThunk => ({\n      tag: 'mergeWithThunk',\n      process: baseThunk\n    });\n    const mergeWith = base => mergeWithThunk(constant$1(base));\n\n    const mergeValues$1 = (values, base) => values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge$1.apply(undefined, values))) : SimpleResult.svalue(base);\n    const mergeErrors$1 = errors => compose(SimpleResult.serror, flatten)(errors);\n    const consolidateObj = (objects, base) => {\n      const partition = SimpleResult.partition(objects);\n      return partition.errors.length > 0 ? mergeErrors$1(partition.errors) : mergeValues$1(partition.values, base);\n    };\n    const consolidateArr = objects => {\n      const partitions = SimpleResult.partition(objects);\n      return partitions.errors.length > 0 ? mergeErrors$1(partitions.errors) : SimpleResult.svalue(partitions.values);\n    };\n    const ResultCombine = {\n      consolidateObj,\n      consolidateArr\n    };\n\n    const formatObj = input => {\n      return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2);\n    };\n    const formatErrors = errors => {\n      const es = errors.length > 10 ? errors.slice(0, 10).concat([{\n          path: [],\n          getErrorInfo: constant$1('... (only showing first ten failures)')\n        }]) : errors;\n      return map$2(es, e => {\n        return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n      });\n    };\n\n    const nu$a = (path, getErrorInfo) => {\n      return SimpleResult.serror([{\n          path,\n          getErrorInfo\n        }]);\n    };\n    const missingRequired = (path, key, obj) => nu$a(path, () => 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj));\n    const missingKey = (path, key) => nu$a(path, () => 'Choice schema did not contain choice key: \"' + key + '\"');\n    const missingBranch = (path, branches, branch) => nu$a(path, () => 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches));\n    const unsupportedFields = (path, unsupported) => nu$a(path, () => 'There are unsupported fields: [' + unsupported.join(', ') + '] specified');\n    const custom = (path, err) => nu$a(path, constant$1(err));\n\n    const value$3 = validator => {\n      const extract = (path, val) => {\n        return SimpleResult.bindError(validator(val), err => custom(path, err));\n      };\n      const toString = constant$1('val');\n      return {\n        extract,\n        toString\n      };\n    };\n    const anyValue$1 = value$3(SimpleResult.svalue);\n\n    const requiredAccess = (path, obj, key, bundle) => get$g(obj, key).fold(() => missingRequired(path, key, obj), bundle);\n    const fallbackAccess = (obj, key, fallback, bundle) => {\n      const v = get$g(obj, key).getOrThunk(() => fallback(obj));\n      return bundle(v);\n    };\n    const optionAccess = (obj, key, bundle) => bundle(get$g(obj, key));\n    const optionDefaultedAccess = (obj, key, fallback, bundle) => {\n      const opt = get$g(obj, key).map(val => val === true ? fallback(obj) : val);\n      return bundle(opt);\n    };\n    const extractField = (field, path, obj, key, prop) => {\n      const bundle = av => prop.extract(path.concat([key]), av);\n      const bundleAsOption = optValue => optValue.fold(() => SimpleResult.svalue(Optional.none()), ov => {\n        const result = prop.extract(path.concat([key]), ov);\n        return SimpleResult.map(result, Optional.some);\n      });\n      switch (field.tag) {\n      case 'required':\n        return requiredAccess(path, obj, key, bundle);\n      case 'defaultedThunk':\n        return fallbackAccess(obj, key, field.process, bundle);\n      case 'option':\n        return optionAccess(obj, key, bundleAsOption);\n      case 'defaultedOptionThunk':\n        return optionDefaultedAccess(obj, key, field.process, bundleAsOption);\n      case 'mergeWithThunk': {\n          return fallbackAccess(obj, key, constant$1({}), v => {\n            const result = deepMerge(field.process(obj), v);\n            return bundle(result);\n          });\n        }\n      }\n    };\n    const extractFields = (path, obj, fields) => {\n      const success = {};\n      const errors = [];\n      for (const field of fields) {\n        fold(field, (key, newKey, presence, prop) => {\n          const result = extractField(presence, path, obj, key, prop);\n          SimpleResult.fold(result, err => {\n            errors.push(...err);\n          }, res => {\n            success[newKey] = res;\n          });\n        }, (newKey, instantiator) => {\n          success[newKey] = instantiator(obj);\n        });\n      }\n      return errors.length > 0 ? SimpleResult.serror(errors) : SimpleResult.svalue(success);\n    };\n    const valueThunk = getDelegate => {\n      const extract = (path, val) => getDelegate().extract(path, val);\n      const toString = () => getDelegate().toString();\n      return {\n        extract,\n        toString\n      };\n    };\n    const getSetKeys = obj => keys(filter$1(obj, isNonNullable));\n    const objOfOnly = fields => {\n      const delegate = objOf(fields);\n      const fieldNames = foldr(fields, (acc, value) => {\n        return fold(value, key => deepMerge(acc, { [key]: true }), constant$1(acc));\n      }, {});\n      const extract = (path, o) => {\n        const keys = isBoolean(o) ? [] : getSetKeys(o);\n        const extra = filter$2(keys, k => !hasNonNullableKey(fieldNames, k));\n        return extra.length === 0 ? delegate.extract(path, o) : unsupportedFields(path, extra);\n      };\n      return {\n        extract,\n        toString: delegate.toString\n      };\n    };\n    const objOf = values => {\n      const extract = (path, o) => extractFields(path, o, values);\n      const toString = () => {\n        const fieldStrings = map$2(values, value => fold(value, (key, _okey, _presence, prop) => key + ' -> ' + prop.toString(), (newKey, _instantiator) => 'state(' + newKey + ')'));\n        return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n      };\n      return {\n        extract,\n        toString\n      };\n    };\n    const arrOf = prop => {\n      const extract = (path, array) => {\n        const results = map$2(array, (a, i) => prop.extract(path.concat(['[' + i + ']']), a));\n        return ResultCombine.consolidateArr(results);\n      };\n      const toString = () => 'array(' + prop.toString() + ')';\n      return {\n        extract,\n        toString\n      };\n    };\n    const oneOf = (props, rawF) => {\n      const f = rawF !== undefined ? rawF : identity;\n      const extract = (path, val) => {\n        const errors = [];\n        for (const prop of props) {\n          const res = prop.extract(path, val);\n          if (res.stype === SimpleResultType.Value) {\n            return {\n              stype: SimpleResultType.Value,\n              svalue: f(res.svalue)\n            };\n          }\n          errors.push(res);\n        }\n        return ResultCombine.consolidateArr(errors);\n      };\n      const toString = () => 'oneOf(' + map$2(props, prop => prop.toString()).join(', ') + ')';\n      return {\n        extract,\n        toString\n      };\n    };\n    const setOf$1 = (validator, prop) => {\n      const validateKeys = (path, keys) => arrOf(value$3(validator)).extract(path, keys);\n      const extract = (path, o) => {\n        const keys$1 = keys(o);\n        const validatedKeys = validateKeys(path, keys$1);\n        return SimpleResult.bind(validatedKeys, validKeys => {\n          const schema = map$2(validKeys, vk => {\n            return field$2(vk, vk, required$2(), prop);\n          });\n          return objOf(schema).extract(path, o);\n        });\n      };\n      const toString = () => 'setOf(' + prop.toString() + ')';\n      return {\n        extract,\n        toString\n      };\n    };\n    const thunk = (_desc, processor) => {\n      const getP = cached(processor);\n      const extract = (path, val) => getP().extract(path, val);\n      const toString = () => getP().toString();\n      return {\n        extract,\n        toString\n      };\n    };\n    const arrOfObj = compose(arrOf, objOf);\n\n    const anyValue = constant$1(anyValue$1);\n    const typedValue = (validator, expectedType) => value$3(a => {\n      const actualType = typeof a;\n      return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror(`Expected type: ${ expectedType } but got: ${ actualType }`);\n    });\n    const number = typedValue(isNumber, 'number');\n    const string = typedValue(isString, 'string');\n    const boolean = typedValue(isBoolean, 'boolean');\n    const functionProcessor = typedValue(isFunction, 'function');\n    const isPostMessageable = val => {\n      if (Object(val) !== val) {\n        return true;\n      }\n      switch ({}.toString.call(val).slice(8, -1)) {\n      case 'Boolean':\n      case 'Number':\n      case 'String':\n      case 'Date':\n      case 'RegExp':\n      case 'Blob':\n      case 'FileList':\n      case 'ImageData':\n      case 'ImageBitmap':\n      case 'ArrayBuffer':\n        return true;\n      case 'Array':\n      case 'Object':\n        return Object.keys(val).every(prop => isPostMessageable(val[prop]));\n      default:\n        return false;\n      }\n    };\n    const postMessageable = value$3(a => {\n      if (isPostMessageable(a)) {\n        return SimpleResult.svalue(a);\n      } else {\n        return SimpleResult.serror('Expected value to be acceptable for sending via postMessage');\n      }\n    });\n\n    const chooseFrom = (path, input, branches, ch) => {\n      const fields = get$g(branches, ch);\n      return fields.fold(() => missingBranch(path, branches, ch), vp => vp.extract(path.concat(['branch: ' + ch]), input));\n    };\n    const choose$2 = (key, branches) => {\n      const extract = (path, input) => {\n        const choice = get$g(input, key);\n        return choice.fold(() => missingKey(path, key), chosen => chooseFrom(path, input, branches, chosen));\n      };\n      const toString = () => 'chooseOn(' + key + '). Possible values: ' + keys(branches);\n      return {\n        extract,\n        toString\n      };\n    };\n\n    const arrOfVal = () => arrOf(anyValue$1);\n    const valueOf = validator => value$3(v => validator(v).fold(SimpleResult.serror, SimpleResult.svalue));\n    const setOf = (validator, prop) => setOf$1(v => SimpleResult.fromResult(validator(v)), prop);\n    const extractValue = (label, prop, obj) => {\n      const res = prop.extract([label], obj);\n      return SimpleResult.mapError(res, errs => ({\n        input: obj,\n        errors: errs\n      }));\n    };\n    const asRaw = (label, prop, obj) => SimpleResult.toResult(extractValue(label, prop, obj));\n    const getOrDie = extraction => {\n      return extraction.fold(errInfo => {\n        throw new Error(formatError(errInfo));\n      }, identity);\n    };\n    const asRawOrDie$1 = (label, prop, obj) => getOrDie(asRaw(label, prop, obj));\n    const formatError = errInfo => {\n      return 'Errors: \\n' + formatErrors(errInfo.errors).join('\\n') + '\\n\\nInput object: ' + formatObj(errInfo.input);\n    };\n    const choose$1 = (key, branches) => choose$2(key, map$1(branches, objOf));\n    const thunkOf = (desc, schema) => thunk(desc, schema);\n\n    const field$1 = field$2;\n    const customField = customField$1;\n    const validateEnum = values => valueOf(value => contains$2(values, value) ? Result.value(value) : Result.error(`Unsupported value: \"${ value }\", choose one of \"${ values.join(', ') }\".`));\n    const required$1 = key => field$1(key, key, required$2(), anyValue());\n    const requiredOf = (key, schema) => field$1(key, key, required$2(), schema);\n    const requiredNumber = key => requiredOf(key, number);\n    const requiredString = key => requiredOf(key, string);\n    const requiredStringEnum = (key, values) => field$1(key, key, required$2(), validateEnum(values));\n    const requiredBoolean = key => requiredOf(key, boolean);\n    const requiredFunction = key => requiredOf(key, functionProcessor);\n    const forbid = (key, message) => field$1(key, key, asOption(), value$3(_v => SimpleResult.serror('The field: ' + key + ' is forbidden. ' + message)));\n    const requiredObjOf = (key, objSchema) => field$1(key, key, required$2(), objOf(objSchema));\n    const requiredArrayOfObj = (key, objFields) => field$1(key, key, required$2(), arrOfObj(objFields));\n    const requiredArrayOf = (key, schema) => field$1(key, key, required$2(), arrOf(schema));\n    const option$3 = key => field$1(key, key, asOption(), anyValue());\n    const optionOf = (key, schema) => field$1(key, key, asOption(), schema);\n    const optionNumber = key => optionOf(key, number);\n    const optionString = key => optionOf(key, string);\n    const optionStringEnum = (key, values) => optionOf(key, validateEnum(values));\n    const optionFunction = key => optionOf(key, functionProcessor);\n    const optionArrayOf = (key, schema) => optionOf(key, arrOf(schema));\n    const optionObjOf = (key, objSchema) => optionOf(key, objOf(objSchema));\n    const optionObjOfOnly = (key, objSchema) => optionOf(key, objOfOnly(objSchema));\n    const defaulted = (key, fallback) => field$1(key, key, defaulted$1(fallback), anyValue());\n    const defaultedOf = (key, fallback, schema) => field$1(key, key, defaulted$1(fallback), schema);\n    const defaultedNumber = (key, fallback) => defaultedOf(key, fallback, number);\n    const defaultedString = (key, fallback) => defaultedOf(key, fallback, string);\n    const defaultedStringEnum = (key, fallback, values) => defaultedOf(key, fallback, validateEnum(values));\n    const defaultedBoolean = (key, fallback) => defaultedOf(key, fallback, boolean);\n    const defaultedFunction = (key, fallback) => defaultedOf(key, fallback, functionProcessor);\n    const defaultedPostMsg = (key, fallback) => defaultedOf(key, fallback, postMessageable);\n    const defaultedArrayOf = (key, fallback, schema) => defaultedOf(key, fallback, arrOf(schema));\n    const defaultedObjOf = (key, fallback, objSchema) => defaultedOf(key, fallback, objOf(objSchema));\n\n    const Cell = initial => {\n      let value = initial;\n      const get = () => {\n        return value;\n      };\n      const set = v => {\n        value = v;\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    const generate$7 = cases => {\n      if (!isArray(cases)) {\n        throw new Error('cases must be an array');\n      }\n      if (cases.length === 0) {\n        throw new Error('there must be at least one case');\n      }\n      const constructors = [];\n      const adt = {};\n      each$1(cases, (acase, count) => {\n        const keys$1 = keys(acase);\n        if (keys$1.length !== 1) {\n          throw new Error('one and only one name per case');\n        }\n        const key = keys$1[0];\n        const value = acase[key];\n        if (adt[key] !== undefined) {\n          throw new Error('duplicate key detected:' + key);\n        } else if (key === 'cata') {\n          throw new Error('cannot have a case named cata (sorry)');\n        } else if (!isArray(value)) {\n          throw new Error('case arguments must be an array');\n        }\n        constructors.push(key);\n        adt[key] = (...args) => {\n          const argLength = args.length;\n          if (argLength !== value.length) {\n            throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n          }\n          const match = branches => {\n            const branchKeys = keys(branches);\n            if (constructors.length !== branchKeys.length) {\n              throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n            }\n            const allReqd = forall(constructors, reqKey => {\n              return contains$2(branchKeys, reqKey);\n            });\n            if (!allReqd) {\n              throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n            }\n            return branches[key].apply(null, args);\n          };\n          return {\n            fold: (...foldArgs) => {\n              if (foldArgs.length !== cases.length) {\n                throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n              }\n              const target = foldArgs[count];\n              return target.apply(null, args);\n            },\n            match,\n            log: label => {\n              console.log(label, {\n                constructors,\n                constructor: key,\n                params: args\n              });\n            }\n          };\n        };\n      });\n      return adt;\n    };\n    const Adt = { generate: generate$7 };\n\n    Adt.generate([\n      {\n        bothErrors: [\n          'error1',\n          'error2'\n        ]\n      },\n      {\n        firstError: [\n          'error1',\n          'value2'\n        ]\n      },\n      {\n        secondError: [\n          'value1',\n          'error2'\n        ]\n      },\n      {\n        bothValues: [\n          'value1',\n          'value2'\n        ]\n      }\n    ]);\n    const partition$1 = results => {\n      const errors = [];\n      const values = [];\n      each$1(results, result => {\n        result.fold(err => {\n          errors.push(err);\n        }, value => {\n          values.push(value);\n        });\n      });\n      return {\n        errors,\n        values\n      };\n    };\n\n    const exclude$1 = (obj, fields) => {\n      const r = {};\n      each(obj, (v, k) => {\n        if (!contains$2(fields, k)) {\n          r[k] = v;\n        }\n      });\n      return r;\n    };\n\n    const wrap$2 = (key, value) => ({ [key]: value });\n    const wrapAll$1 = keyvalues => {\n      const r = {};\n      each$1(keyvalues, kv => {\n        r[kv.key] = kv.value;\n      });\n      return r;\n    };\n\n    const exclude = (obj, fields) => exclude$1(obj, fields);\n    const wrap$1 = (key, value) => wrap$2(key, value);\n    const wrapAll = keyvalues => wrapAll$1(keyvalues);\n    const mergeValues = (values, base) => {\n      return values.length === 0 ? Result.value(base) : Result.value(deepMerge(base, merge$1.apply(undefined, values)));\n    };\n    const mergeErrors = errors => Result.error(flatten(errors));\n    const consolidate = (objs, base) => {\n      const partitions = partition$1(objs);\n      return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base);\n    };\n\n    const ensureIsRoot = isRoot => isFunction(isRoot) ? isRoot : never;\n    const ancestor$2 = (scope, transform, isRoot) => {\n      let element = scope.dom;\n      const stop = ensureIsRoot(isRoot);\n      while (element.parentNode) {\n        element = element.parentNode;\n        const el = SugarElement.fromDom(element);\n        const transformed = transform(el);\n        if (transformed.isSome()) {\n          return transformed;\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$4 = (scope, transform, isRoot) => {\n      const current = transform(scope);\n      const stop = ensureIsRoot(isRoot);\n      return current.orThunk(() => stop(scope) ? Optional.none() : ancestor$2(scope, transform, stop));\n    };\n\n    const isSource = (component, simulatedEvent) => eq(component.element, simulatedEvent.event.target);\n\n    const defaultEventHandler = {\n      can: always,\n      abort: never,\n      run: noop\n    };\n    const nu$9 = parts => {\n      if (!hasNonNullableKey(parts, 'can') && !hasNonNullableKey(parts, 'abort') && !hasNonNullableKey(parts, 'run')) {\n        throw new Error('EventHandler defined by: ' + JSON.stringify(parts, null, 2) + ' does not have can, abort, or run!');\n      }\n      return {\n        ...defaultEventHandler,\n        ...parts\n      };\n    };\n    const all$2 = (handlers, f) => (...args) => foldl(handlers, (acc, handler) => acc && f(handler).apply(undefined, args), true);\n    const any = (handlers, f) => (...args) => foldl(handlers, (acc, handler) => acc || f(handler).apply(undefined, args), false);\n    const read$2 = handler => isFunction(handler) ? {\n      can: always,\n      abort: never,\n      run: handler\n    } : handler;\n    const fuse$1 = handlers => {\n      const can = all$2(handlers, handler => handler.can);\n      const abort = any(handlers, handler => handler.abort);\n      const run = (...args) => {\n        each$1(handlers, handler => {\n          handler.run.apply(undefined, args);\n        });\n      };\n      return {\n        can,\n        abort,\n        run\n      };\n    };\n\n    const constant = constant$1;\n    const touchstart = constant('touchstart');\n    const touchmove = constant('touchmove');\n    const touchend = constant('touchend');\n    const touchcancel = constant('touchcancel');\n    const mousedown = constant('mousedown');\n    const mousemove = constant('mousemove');\n    const mouseout = constant('mouseout');\n    const mouseup = constant('mouseup');\n    const mouseover = constant('mouseover');\n    const focusin = constant('focusin');\n    const focusout = constant('focusout');\n    const keydown = constant('keydown');\n    const keyup = constant('keyup');\n    const input = constant('input');\n    const change = constant('change');\n    const click = constant('click');\n    const transitioncancel = constant('transitioncancel');\n    const transitionend = constant('transitionend');\n    const transitionstart = constant('transitionstart');\n    const selectstart = constant('selectstart');\n\n    const prefixName = name => constant$1('alloy.' + name);\n    const alloy = { tap: prefixName('tap') };\n    const focus$4 = prefixName('focus');\n    const postBlur = prefixName('blur.post');\n    const postPaste = prefixName('paste.post');\n    const receive = prefixName('receive');\n    const execute$5 = prefixName('execute');\n    const focusItem = prefixName('focus.item');\n    const tap = alloy.tap;\n    const longpress = prefixName('longpress');\n    const sandboxClose = prefixName('sandbox.close');\n    const typeaheadCancel = prefixName('typeahead.cancel');\n    const systemInit = prefixName('system.init');\n    const documentTouchmove = prefixName('system.touchmove');\n    const documentTouchend = prefixName('system.touchend');\n    const windowScroll = prefixName('system.scroll');\n    const windowResize = prefixName('system.resize');\n    const attachedToDom = prefixName('system.attached');\n    const detachedFromDom = prefixName('system.detached');\n    const dismissRequested = prefixName('system.dismissRequested');\n    const repositionRequested = prefixName('system.repositionRequested');\n    const focusShifted = prefixName('focusmanager.shifted');\n    const slotVisibility = prefixName('slotcontainer.visibility');\n    const changeTab = prefixName('change.tab');\n    const dismissTab = prefixName('dismiss.tab');\n    const highlight$1 = prefixName('highlight');\n    const dehighlight$1 = prefixName('dehighlight');\n\n    const emit = (component, event) => {\n      dispatchWith(component, component.element, event, {});\n    };\n    const emitWith = (component, event, properties) => {\n      dispatchWith(component, component.element, event, properties);\n    };\n    const emitExecute = component => {\n      emit(component, execute$5());\n    };\n    const dispatch = (component, target, event) => {\n      dispatchWith(component, target, event, {});\n    };\n    const dispatchWith = (component, target, event, properties) => {\n      const data = {\n        target,\n        ...properties\n      };\n      component.getSystem().triggerEvent(event, target, data);\n    };\n    const retargetAndDispatchWith = (component, target, eventName, properties) => {\n      const data = {\n        ...properties,\n        target\n      };\n      component.getSystem().triggerEvent(eventName, target, data);\n    };\n    const dispatchEvent = (component, target, event, simulatedEvent) => {\n      component.getSystem().triggerEvent(event, target, simulatedEvent.event);\n    };\n\n    const derive$2 = configs => wrapAll(configs);\n    const abort = (name, predicate) => {\n      return {\n        key: name,\n        value: nu$9({ abort: predicate })\n      };\n    };\n    const can = (name, predicate) => {\n      return {\n        key: name,\n        value: nu$9({ can: predicate })\n      };\n    };\n    const preventDefault = name => {\n      return {\n        key: name,\n        value: nu$9({\n          run: (component, simulatedEvent) => {\n            simulatedEvent.event.prevent();\n          }\n        })\n      };\n    };\n    const run$1 = (name, handler) => {\n      return {\n        key: name,\n        value: nu$9({ run: handler })\n      };\n    };\n    const runActionExtra = (name, action, extra) => {\n      return {\n        key: name,\n        value: nu$9({\n          run: (component, simulatedEvent) => {\n            action.apply(undefined, [\n              component,\n              simulatedEvent\n            ].concat(extra));\n          }\n        })\n      };\n    };\n    const runOnName = name => {\n      return handler => run$1(name, handler);\n    };\n    const runOnSourceName = name => {\n      return handler => ({\n        key: name,\n        value: nu$9({\n          run: (component, simulatedEvent) => {\n            if (isSource(component, simulatedEvent)) {\n              handler(component, simulatedEvent);\n            }\n          }\n        })\n      });\n    };\n    const redirectToUid = (name, uid) => {\n      return run$1(name, (component, simulatedEvent) => {\n        component.getSystem().getByUid(uid).each(redirectee => {\n          dispatchEvent(redirectee, redirectee.element, name, simulatedEvent);\n        });\n      });\n    };\n    const redirectToPart = (name, detail, partName) => {\n      const uid = detail.partUids[partName];\n      return redirectToUid(name, uid);\n    };\n    const runWithTarget = (name, f) => {\n      return run$1(name, (component, simulatedEvent) => {\n        const ev = simulatedEvent.event;\n        const target = component.getSystem().getByDom(ev.target).getOrThunk(() => {\n          const closest = closest$4(ev.target, el => component.getSystem().getByDom(el).toOptional(), never);\n          return closest.getOr(component);\n        });\n        f(component, target, simulatedEvent);\n      });\n    };\n    const cutter = name => {\n      return run$1(name, (component, simulatedEvent) => {\n        simulatedEvent.cut();\n      });\n    };\n    const stopper = name => {\n      return run$1(name, (component, simulatedEvent) => {\n        simulatedEvent.stop();\n      });\n    };\n    const runOnSource = (name, f) => {\n      return runOnSourceName(name)(f);\n    };\n    const runOnAttached = runOnSourceName(attachedToDom());\n    const runOnDetached = runOnSourceName(detachedFromDom());\n    const runOnInit = runOnSourceName(systemInit());\n    const runOnExecute$1 = runOnName(execute$5());\n\n    const fromHtml$1 = (html, scope) => {\n      const doc = scope || document;\n      const div = doc.createElement('div');\n      div.innerHTML = html;\n      return children(SugarElement.fromDom(div));\n    };\n\n    const get$9 = element => element.dom.innerHTML;\n    const set$6 = (element, content) => {\n      const owner = owner$4(element);\n      const docDom = owner.dom;\n      const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n      const contentElements = fromHtml$1(content, docDom);\n      append$1(fragment, contentElements);\n      empty(element);\n      append$2(element, fragment);\n    };\n    const getOuter = element => {\n      const container = SugarElement.fromTag('div');\n      const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n      append$2(container, clone);\n      return get$9(container);\n    };\n\n    const clone = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n    const shallow = original => clone(original, false);\n\n    const getHtml = element => {\n      if (isShadowRoot(element)) {\n        return '#shadow-root';\n      } else {\n        const clone = shallow(element);\n        return getOuter(clone);\n      }\n    };\n\n    const element = elem => getHtml(elem);\n\n    const isRecursive = (component, originator, target) => eq(originator, component.element) && !eq(originator, target);\n    const events$i = derive$2([can(focus$4(), (component, simulatedEvent) => {\n        const event = simulatedEvent.event;\n        const originator = event.originator;\n        const target = event.target;\n        if (isRecursive(component, originator, target)) {\n          console.warn(focus$4() + ' did not get interpreted by the desired target. ' + '\\nOriginator: ' + element(originator) + '\\nTarget: ' + element(target) + '\\nCheck the ' + focus$4() + ' event handlers');\n          return false;\n        } else {\n          return true;\n        }\n      })]);\n\n    var DefaultEvents = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        events: events$i\n    });\n\n    let unique = 0;\n    const generate$6 = prefix => {\n      const date = new Date();\n      const time = date.getTime();\n      const random = Math.floor(Math.random() * 1000000000);\n      unique++;\n      return prefix + '_' + random + unique + String(time);\n    };\n\n    const prefix$1 = constant$1('alloy-id-');\n    const idAttr$1 = constant$1('data-alloy-id');\n\n    const prefix = prefix$1();\n    const idAttr = idAttr$1();\n    const write = (label, elem) => {\n      const id = generate$6(prefix + label);\n      writeOnly(elem, id);\n      return id;\n    };\n    const writeOnly = (elem, uid) => {\n      Object.defineProperty(elem.dom, idAttr, {\n        value: uid,\n        writable: true\n      });\n    };\n    const read$1 = elem => {\n      const id = isElement$1(elem) ? elem.dom[idAttr] : null;\n      return Optional.from(id);\n    };\n    const generate$5 = prefix => generate$6(prefix);\n\n    const make$8 = identity;\n\n    const NoContextApi = getComp => {\n      const getMessage = event => `The component must be in a context to execute: ${ event }` + (getComp ? '\\n' + element(getComp().element) + ' is not in context.' : '');\n      const fail = event => () => {\n        throw new Error(getMessage(event));\n      };\n      const warn = event => () => {\n        console.warn(getMessage(event));\n      };\n      return {\n        debugInfo: constant$1('fake'),\n        triggerEvent: warn('triggerEvent'),\n        triggerFocus: warn('triggerFocus'),\n        triggerEscape: warn('triggerEscape'),\n        broadcast: warn('broadcast'),\n        broadcastOn: warn('broadcastOn'),\n        broadcastEvent: warn('broadcastEvent'),\n        build: fail('build'),\n        buildOrPatch: fail('buildOrPatch'),\n        addToWorld: fail('addToWorld'),\n        removeFromWorld: fail('removeFromWorld'),\n        addToGui: fail('addToGui'),\n        removeFromGui: fail('removeFromGui'),\n        getByUid: fail('getByUid'),\n        getByDom: fail('getByDom'),\n        isConnected: never\n      };\n    };\n    const singleton$1 = NoContextApi();\n\n    const markAsBehaviourApi = (f, apiName, apiFunction) => {\n      const delegate = apiFunction.toString();\n      const endIndex = delegate.indexOf(')') + 1;\n      const openBracketIndex = delegate.indexOf('(');\n      const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n      f.toFunctionAnnotation = () => ({\n        name: apiName,\n        parameters: cleanParameters(parameters.slice(0, 1).concat(parameters.slice(3)))\n      });\n      return f;\n    };\n    const cleanParameters = parameters => map$2(parameters, p => endsWith(p, '/*') ? p.substring(0, p.length - '/*'.length) : p);\n    const markAsExtraApi = (f, extraName) => {\n      const delegate = f.toString();\n      const endIndex = delegate.indexOf(')') + 1;\n      const openBracketIndex = delegate.indexOf('(');\n      const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n      f.toFunctionAnnotation = () => ({\n        name: extraName,\n        parameters: cleanParameters(parameters)\n      });\n      return f;\n    };\n    const markAsSketchApi = (f, apiFunction) => {\n      const delegate = apiFunction.toString();\n      const endIndex = delegate.indexOf(')') + 1;\n      const openBracketIndex = delegate.indexOf('(');\n      const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n      f.toFunctionAnnotation = () => ({\n        name: 'OVERRIDE',\n        parameters: cleanParameters(parameters.slice(1))\n      });\n      return f;\n    };\n\n    const premadeTag = generate$6('alloy-premade');\n    const premade$1 = comp => {\n      Object.defineProperty(comp.element.dom, premadeTag, {\n        value: comp.uid,\n        writable: true\n      });\n      return wrap$1(premadeTag, comp);\n    };\n    const isPremade = element => has$2(element.dom, premadeTag);\n    const getPremade = spec => get$g(spec, premadeTag);\n    const makeApi = f => markAsSketchApi((component, ...rest) => f(component.getApis(), component, ...rest), f);\n\n    const NoState = { init: () => nu$8({ readState: constant$1('No State required') }) };\n    const nu$8 = spec => spec;\n\n    const generateFrom$1 = (spec, all) => {\n      const schema = map$2(all, a => optionObjOf(a.name(), [\n        required$1('config'),\n        defaulted('state', NoState)\n      ]));\n      const validated = asRaw('component.behaviours', objOf(schema), spec.behaviours).fold(errInfo => {\n        throw new Error(formatError(errInfo) + '\\nComplete spec:\\n' + JSON.stringify(spec, null, 2));\n      }, identity);\n      return {\n        list: all,\n        data: map$1(validated, optBlobThunk => {\n          const output = optBlobThunk.map(blob => ({\n            config: blob.config,\n            state: blob.state.init(blob.config)\n          }));\n          return constant$1(output);\n        })\n      };\n    };\n    const getBehaviours$3 = bData => bData.list;\n    const getData$2 = bData => bData.data;\n\n    const byInnerKey = (data, tuple) => {\n      const r = {};\n      each(data, (detail, key) => {\n        each(detail, (value, indexKey) => {\n          const chain = get$g(r, indexKey).getOr([]);\n          r[indexKey] = chain.concat([tuple(key, value)]);\n        });\n      });\n      return r;\n    };\n\n    const nu$7 = s => ({\n      classes: isUndefined(s.classes) ? [] : s.classes,\n      attributes: isUndefined(s.attributes) ? {} : s.attributes,\n      styles: isUndefined(s.styles) ? {} : s.styles\n    });\n    const merge = (defnA, mod) => ({\n      ...defnA,\n      attributes: {\n        ...defnA.attributes,\n        ...mod.attributes\n      },\n      styles: {\n        ...defnA.styles,\n        ...mod.styles\n      },\n      classes: defnA.classes.concat(mod.classes)\n    });\n\n    const combine$2 = (info, baseMod, behaviours, base) => {\n      const modsByBehaviour = { ...baseMod };\n      each$1(behaviours, behaviour => {\n        modsByBehaviour[behaviour.name()] = behaviour.exhibit(info, base);\n      });\n      const byAspect = byInnerKey(modsByBehaviour, (name, modification) => ({\n        name,\n        modification\n      }));\n      const combineObjects = objects => foldr(objects, (b, a) => ({\n        ...a.modification,\n        ...b\n      }), {});\n      const combinedClasses = foldr(byAspect.classes, (b, a) => a.modification.concat(b), []);\n      const combinedAttributes = combineObjects(byAspect.attributes);\n      const combinedStyles = combineObjects(byAspect.styles);\n      return nu$7({\n        classes: combinedClasses,\n        attributes: combinedAttributes,\n        styles: combinedStyles\n      });\n    };\n\n    const sortKeys = (label, keyName, array, order) => {\n      try {\n        const sorted = sort(array, (a, b) => {\n          const aKey = a[keyName];\n          const bKey = b[keyName];\n          const aIndex = order.indexOf(aKey);\n          const bIndex = order.indexOf(bKey);\n          if (aIndex === -1) {\n            throw new Error('The ordering for ' + label + ' does not have an entry for ' + aKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n          }\n          if (bIndex === -1) {\n            throw new Error('The ordering for ' + label + ' does not have an entry for ' + bKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n          }\n          if (aIndex < bIndex) {\n            return -1;\n          } else if (bIndex < aIndex) {\n            return 1;\n          } else {\n            return 0;\n          }\n        });\n        return Result.value(sorted);\n      } catch (err) {\n        return Result.error([err]);\n      }\n    };\n\n    const uncurried = (handler, purpose) => ({\n      handler,\n      purpose\n    });\n    const curried = (handler, purpose) => ({\n      cHandler: handler,\n      purpose\n    });\n    const curryArgs = (descHandler, extraArgs) => curried(curry.apply(undefined, [descHandler.handler].concat(extraArgs)), descHandler.purpose);\n    const getCurried = descHandler => descHandler.cHandler;\n\n    const behaviourTuple = (name, handler) => ({\n      name,\n      handler\n    });\n    const nameToHandlers = (behaviours, info) => {\n      const r = {};\n      each$1(behaviours, behaviour => {\n        r[behaviour.name()] = behaviour.handlers(info);\n      });\n      return r;\n    };\n    const groupByEvents = (info, behaviours, base) => {\n      const behaviourEvents = {\n        ...base,\n        ...nameToHandlers(behaviours, info)\n      };\n      return byInnerKey(behaviourEvents, behaviourTuple);\n    };\n    const combine$1 = (info, eventOrder, behaviours, base) => {\n      const byEventName = groupByEvents(info, behaviours, base);\n      return combineGroups(byEventName, eventOrder);\n    };\n    const assemble = rawHandler => {\n      const handler = read$2(rawHandler);\n      return (component, simulatedEvent, ...rest) => {\n        const args = [\n          component,\n          simulatedEvent\n        ].concat(rest);\n        if (handler.abort.apply(undefined, args)) {\n          simulatedEvent.stop();\n        } else if (handler.can.apply(undefined, args)) {\n          handler.run.apply(undefined, args);\n        }\n      };\n    };\n    const missingOrderError = (eventName, tuples) => Result.error(['The event (' + eventName + ') has more than one behaviour that listens to it.\\nWhen this occurs, you must ' + 'specify an event ordering for the behaviours in your spec (e.g. [ \"listing\", \"toggling\" ]).\\nThe behaviours that ' + 'can trigger it are: ' + JSON.stringify(map$2(tuples, c => c.name), null, 2)]);\n    const fuse = (tuples, eventOrder, eventName) => {\n      const order = eventOrder[eventName];\n      if (!order) {\n        return missingOrderError(eventName, tuples);\n      } else {\n        return sortKeys('Event: ' + eventName, 'name', tuples, order).map(sortedTuples => {\n          const handlers = map$2(sortedTuples, tuple => tuple.handler);\n          return fuse$1(handlers);\n        });\n      }\n    };\n    const combineGroups = (byEventName, eventOrder) => {\n      const r = mapToArray(byEventName, (tuples, eventName) => {\n        const combined = tuples.length === 1 ? Result.value(tuples[0].handler) : fuse(tuples, eventOrder, eventName);\n        return combined.map(handler => {\n          const assembled = assemble(handler);\n          const purpose = tuples.length > 1 ? filter$2(eventOrder[eventName], o => exists(tuples, t => t.name === o)).join(' > ') : tuples[0].name;\n          return wrap$1(eventName, uncurried(assembled, purpose));\n        });\n      });\n      return consolidate(r, {});\n    };\n\n    const baseBehaviour = 'alloy.base.behaviour';\n    const schema$z = objOf([\n      field$1('dom', 'dom', required$2(), objOf([\n        required$1('tag'),\n        defaulted('styles', {}),\n        defaulted('classes', []),\n        defaulted('attributes', {}),\n        option$3('value'),\n        option$3('innerHtml')\n      ])),\n      required$1('components'),\n      required$1('uid'),\n      defaulted('events', {}),\n      defaulted('apis', {}),\n      field$1('eventOrder', 'eventOrder', mergeWith({\n        [execute$5()]: [\n          'disabling',\n          baseBehaviour,\n          'toggling',\n          'typeaheadevents'\n        ],\n        [focus$4()]: [\n          baseBehaviour,\n          'focusing',\n          'keying'\n        ],\n        [systemInit()]: [\n          baseBehaviour,\n          'disabling',\n          'toggling',\n          'representing'\n        ],\n        [input()]: [\n          baseBehaviour,\n          'representing',\n          'streaming',\n          'invalidating'\n        ],\n        [detachedFromDom()]: [\n          baseBehaviour,\n          'representing',\n          'item-events',\n          'tooltipping'\n        ],\n        [mousedown()]: [\n          'focusing',\n          baseBehaviour,\n          'item-type-events'\n        ],\n        [touchstart()]: [\n          'focusing',\n          baseBehaviour,\n          'item-type-events'\n        ],\n        [mouseover()]: [\n          'item-type-events',\n          'tooltipping'\n        ],\n        [receive()]: [\n          'receiving',\n          'reflecting',\n          'tooltipping'\n        ]\n      }), anyValue()),\n      option$3('domModification')\n    ]);\n    const toInfo = spec => asRaw('custom.definition', schema$z, spec);\n    const toDefinition = detail => ({\n      ...detail.dom,\n      uid: detail.uid,\n      domChildren: map$2(detail.components, comp => comp.element)\n    });\n    const toModification = detail => detail.domModification.fold(() => nu$7({}), nu$7);\n    const toEvents = info => info.events;\n\n    const read = (element, attr) => {\n      const value = get$f(element, attr);\n      return value === undefined || value === '' ? [] : value.split(' ');\n    };\n    const add$4 = (element, attr, id) => {\n      const old = read(element, attr);\n      const nu = old.concat([id]);\n      set$9(element, attr, nu.join(' '));\n      return true;\n    };\n    const remove$4 = (element, attr, id) => {\n      const nu = filter$2(read(element, attr), v => v !== id);\n      if (nu.length > 0) {\n        set$9(element, attr, nu.join(' '));\n      } else {\n        remove$7(element, attr);\n      }\n      return false;\n    };\n\n    const supports = element => element.dom.classList !== undefined;\n    const get$8 = element => read(element, 'class');\n    const add$3 = (element, clazz) => add$4(element, 'class', clazz);\n    const remove$3 = (element, clazz) => remove$4(element, 'class', clazz);\n\n    const add$2 = (element, clazz) => {\n      if (supports(element)) {\n        element.dom.classList.add(clazz);\n      } else {\n        add$3(element, clazz);\n      }\n    };\n    const cleanClass = element => {\n      const classList = supports(element) ? element.dom.classList : get$8(element);\n      if (classList.length === 0) {\n        remove$7(element, 'class');\n      }\n    };\n    const remove$2 = (element, clazz) => {\n      if (supports(element)) {\n        const classList = element.dom.classList;\n        classList.remove(clazz);\n      } else {\n        remove$3(element, clazz);\n      }\n      cleanClass(element);\n    };\n    const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n    const add$1 = (element, classes) => {\n      each$1(classes, x => {\n        add$2(element, x);\n      });\n    };\n    const remove$1 = (element, classes) => {\n      each$1(classes, x => {\n        remove$2(element, x);\n      });\n    };\n    const hasAll = (element, classes) => forall(classes, clazz => has(element, clazz));\n    const getNative = element => {\n      const classList = element.dom.classList;\n      const r = new Array(classList.length);\n      for (let i = 0; i < classList.length; i++) {\n        const item = classList.item(i);\n        if (item !== null) {\n          r[i] = item;\n        }\n      }\n      return r;\n    };\n    const get$7 = element => supports(element) ? getNative(element) : get$8(element);\n\n    const get$6 = element => element.dom.value;\n    const set$5 = (element, value) => {\n      if (value === undefined) {\n        throw new Error('Value.set was undefined');\n      }\n      element.dom.value = value;\n    };\n\n    const determineObsoleted = (parent, index, oldObsoleted) => {\n      const newObsoleted = child$2(parent, index);\n      return newObsoleted.map(newObs => {\n        const elemChanged = oldObsoleted.exists(o => !eq(o, newObs));\n        if (elemChanged) {\n          const oldTag = oldObsoleted.map(name$3).getOr('span');\n          const marker = SugarElement.fromTag(oldTag);\n          before$1(newObs, marker);\n          return marker;\n        } else {\n          return newObs;\n        }\n      });\n    };\n    const ensureInDom = (parent, child, obsoleted) => {\n      obsoleted.fold(() => append$2(parent, child), obs => {\n        if (!eq(obs, child)) {\n          before$1(obs, child);\n          remove$5(obs);\n        }\n      });\n    };\n    const patchChildrenWith = (parent, nu, f) => {\n      const builtChildren = map$2(nu, f);\n      const currentChildren = children(parent);\n      each$1(currentChildren.slice(builtChildren.length), remove$5);\n      return builtChildren;\n    };\n    const patchSpecChild = (parent, index, spec, build) => {\n      const oldObsoleted = child$2(parent, index);\n      const childComp = build(spec, oldObsoleted);\n      const obsoleted = determineObsoleted(parent, index, oldObsoleted);\n      ensureInDom(parent, childComp.element, obsoleted);\n      return childComp;\n    };\n    const patchSpecChildren = (parent, specs, build) => patchChildrenWith(parent, specs, (spec, index) => patchSpecChild(parent, index, spec, build));\n    const patchDomChildren = (parent, nodes) => patchChildrenWith(parent, nodes, (node, index) => {\n      const optObsoleted = child$2(parent, index);\n      ensureInDom(parent, node, optObsoleted);\n      return node;\n    });\n\n    const diffKeyValueSet = (newObj, oldObj) => {\n      const newKeys = keys(newObj);\n      const oldKeys = keys(oldObj);\n      const toRemove = difference(oldKeys, newKeys);\n      const toSet = bifilter(newObj, (v, k) => {\n        return !has$2(oldObj, k) || v !== oldObj[k];\n      }).t;\n      return {\n        toRemove,\n        toSet\n      };\n    };\n    const reconcileToDom = (definition, obsoleted) => {\n      const {\n        class: clazz,\n        style,\n        ...existingAttributes\n      } = clone$1(obsoleted);\n      const {\n        toSet: attrsToSet,\n        toRemove: attrsToRemove\n      } = diffKeyValueSet(definition.attributes, existingAttributes);\n      const updateAttrs = () => {\n        each$1(attrsToRemove, a => remove$7(obsoleted, a));\n        setAll$1(obsoleted, attrsToSet);\n      };\n      const existingStyles = getAllRaw(obsoleted);\n      const {\n        toSet: stylesToSet,\n        toRemove: stylesToRemove\n      } = diffKeyValueSet(definition.styles, existingStyles);\n      const updateStyles = () => {\n        each$1(stylesToRemove, s => remove$6(obsoleted, s));\n        setAll(obsoleted, stylesToSet);\n      };\n      const existingClasses = get$7(obsoleted);\n      const classesToRemove = difference(existingClasses, definition.classes);\n      const classesToAdd = difference(definition.classes, existingClasses);\n      const updateClasses = () => {\n        add$1(obsoleted, classesToAdd);\n        remove$1(obsoleted, classesToRemove);\n      };\n      const updateHtml = html => {\n        set$6(obsoleted, html);\n      };\n      const updateChildren = () => {\n        const children = definition.domChildren;\n        patchDomChildren(obsoleted, children);\n      };\n      const updateValue = () => {\n        const valueElement = obsoleted;\n        const value = definition.value.getOrUndefined();\n        if (value !== get$6(valueElement)) {\n          set$5(valueElement, value !== null && value !== void 0 ? value : '');\n        }\n      };\n      updateAttrs();\n      updateClasses();\n      updateStyles();\n      definition.innerHtml.fold(updateChildren, updateHtml);\n      updateValue();\n      return obsoleted;\n    };\n\n    const introduceToDom = definition => {\n      const subject = SugarElement.fromTag(definition.tag);\n      setAll$1(subject, definition.attributes);\n      add$1(subject, definition.classes);\n      setAll(subject, definition.styles);\n      definition.innerHtml.each(html => set$6(subject, html));\n      const children = definition.domChildren;\n      append$1(subject, children);\n      definition.value.each(value => {\n        set$5(subject, value);\n      });\n      return subject;\n    };\n    const attemptPatch = (definition, obsoleted) => {\n      try {\n        const e = reconcileToDom(definition, obsoleted);\n        return Optional.some(e);\n      } catch (err) {\n        return Optional.none();\n      }\n    };\n    const hasMixedChildren = definition => definition.innerHtml.isSome() && definition.domChildren.length > 0;\n    const renderToDom = (definition, optObsoleted) => {\n      const canBePatched = candidate => name$3(candidate) === definition.tag && !hasMixedChildren(definition) && !isPremade(candidate);\n      const elem = optObsoleted.filter(canBePatched).bind(obsoleted => attemptPatch(definition, obsoleted)).getOrThunk(() => introduceToDom(definition));\n      writeOnly(elem, definition.uid);\n      return elem;\n    };\n\n    const getBehaviours$2 = spec => {\n      const behaviours = get$g(spec, 'behaviours').getOr({});\n      return bind$3(keys(behaviours), name => {\n        const behaviour = behaviours[name];\n        return isNonNullable(behaviour) ? [behaviour.me] : [];\n      });\n    };\n    const generateFrom = (spec, all) => generateFrom$1(spec, all);\n    const generate$4 = spec => {\n      const all = getBehaviours$2(spec);\n      return generateFrom(spec, all);\n    };\n\n    const getDomDefinition = (info, bList, bData) => {\n      const definition = toDefinition(info);\n      const infoModification = toModification(info);\n      const baseModification = { 'alloy.base.modification': infoModification };\n      const modification = bList.length > 0 ? combine$2(bData, baseModification, bList, definition) : infoModification;\n      return merge(definition, modification);\n    };\n    const getEvents = (info, bList, bData) => {\n      const baseEvents = { 'alloy.base.behaviour': toEvents(info) };\n      return combine$1(bData, info.eventOrder, bList, baseEvents).getOrDie();\n    };\n    const build$2 = (spec, obsoleted) => {\n      const getMe = () => me;\n      const systemApi = Cell(singleton$1);\n      const info = getOrDie(toInfo(spec));\n      const bBlob = generate$4(spec);\n      const bList = getBehaviours$3(bBlob);\n      const bData = getData$2(bBlob);\n      const modDefinition = getDomDefinition(info, bList, bData);\n      const item = renderToDom(modDefinition, obsoleted);\n      const events = getEvents(info, bList, bData);\n      const subcomponents = Cell(info.components);\n      const connect = newApi => {\n        systemApi.set(newApi);\n      };\n      const disconnect = () => {\n        systemApi.set(NoContextApi(getMe));\n      };\n      const syncComponents = () => {\n        const children$1 = children(item);\n        const subs = bind$3(children$1, child => systemApi.get().getByDom(child).fold(() => [], pure$2));\n        subcomponents.set(subs);\n      };\n      const config = behaviour => {\n        const b = bData;\n        const f = isFunction(b[behaviour.name()]) ? b[behaviour.name()] : () => {\n          throw new Error('Could not find ' + behaviour.name() + ' in ' + JSON.stringify(spec, null, 2));\n        };\n        return f();\n      };\n      const hasConfigured = behaviour => isFunction(bData[behaviour.name()]);\n      const getApis = () => info.apis;\n      const readState = behaviourName => bData[behaviourName]().map(b => b.state.readState()).getOr('not enabled');\n      const me = {\n        uid: spec.uid,\n        getSystem: systemApi.get,\n        config,\n        hasConfigured,\n        spec,\n        readState,\n        getApis,\n        connect,\n        disconnect,\n        element: item,\n        syncComponents,\n        components: subcomponents.get,\n        events\n      };\n      return me;\n    };\n\n    const buildSubcomponents = (spec, obsoleted) => {\n      const components = get$g(spec, 'components').getOr([]);\n      return obsoleted.fold(() => map$2(components, build$1), obs => map$2(components, (c, i) => {\n        return buildOrPatch(c, child$2(obs, i));\n      }));\n    };\n    const buildFromSpec = (userSpec, obsoleted) => {\n      const {\n        events: specEvents,\n        ...spec\n      } = make$8(userSpec);\n      const components = buildSubcomponents(spec, obsoleted);\n      const completeSpec = {\n        ...spec,\n        events: {\n          ...DefaultEvents,\n          ...specEvents\n        },\n        components\n      };\n      return Result.value(build$2(completeSpec, obsoleted));\n    };\n    const text$1 = textContent => {\n      const element = SugarElement.fromText(textContent);\n      return external$1({ element });\n    };\n    const external$1 = spec => {\n      const extSpec = asRawOrDie$1('external.component', objOfOnly([\n        required$1('element'),\n        option$3('uid')\n      ]), spec);\n      const systemApi = Cell(NoContextApi());\n      const connect = newApi => {\n        systemApi.set(newApi);\n      };\n      const disconnect = () => {\n        systemApi.set(NoContextApi(() => me));\n      };\n      const uid = extSpec.uid.getOrThunk(() => generate$5('external'));\n      writeOnly(extSpec.element, uid);\n      const me = {\n        uid,\n        getSystem: systemApi.get,\n        config: Optional.none,\n        hasConfigured: never,\n        connect,\n        disconnect,\n        getApis: () => ({}),\n        element: extSpec.element,\n        spec,\n        readState: constant$1('No state'),\n        syncComponents: noop,\n        components: constant$1([]),\n        events: {}\n      };\n      return premade$1(me);\n    };\n    const uids = generate$5;\n    const isSketchSpec$1 = spec => has$2(spec, 'uid');\n    const buildOrPatch = (spec, obsoleted) => getPremade(spec).getOrThunk(() => {\n      const userSpecWithUid = isSketchSpec$1(spec) ? spec : {\n        uid: uids(''),\n        ...spec\n      };\n      return buildFromSpec(userSpecWithUid, obsoleted).getOrDie();\n    });\n    const build$1 = spec => buildOrPatch(spec, Optional.none());\n    const premade = premade$1;\n\n    var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n      if (is(scope, a)) {\n        return Optional.some(scope);\n      } else if (isFunction(isRoot) && isRoot(scope)) {\n        return Optional.none();\n      } else {\n        return ancestor(scope, a, isRoot);\n      }\n    };\n\n    const ancestor$1 = (scope, predicate, isRoot) => {\n      let element = scope.dom;\n      const stop = isFunction(isRoot) ? isRoot : never;\n      while (element.parentNode) {\n        element = element.parentNode;\n        const el = SugarElement.fromDom(element);\n        if (predicate(el)) {\n          return Optional.some(el);\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Optional.none();\n    };\n    const closest$3 = (scope, predicate, isRoot) => {\n      const is = (s, test) => test(s);\n      return ClosestOrAncestor(is, ancestor$1, scope, predicate, isRoot);\n    };\n    const child$1 = (scope, predicate) => {\n      const pred = node => predicate(SugarElement.fromDom(node));\n      const result = find$5(scope.dom.childNodes, pred);\n      return result.map(SugarElement.fromDom);\n    };\n    const descendant$1 = (scope, predicate) => {\n      const descend = node => {\n        for (let i = 0; i < node.childNodes.length; i++) {\n          const child = SugarElement.fromDom(node.childNodes[i]);\n          if (predicate(child)) {\n            return Optional.some(child);\n          }\n          const res = descend(node.childNodes[i]);\n          if (res.isSome()) {\n            return res;\n          }\n        }\n        return Optional.none();\n      };\n      return descend(scope.dom);\n    };\n\n    const closest$2 = (scope, predicate, isRoot) => closest$3(scope, predicate, isRoot).isSome();\n\n    const ancestor = (scope, selector, isRoot) => ancestor$1(scope, e => is(e, selector), isRoot);\n    const child = (scope, selector) => child$1(scope, e => is(e, selector));\n    const descendant = (scope, selector) => one(selector, scope);\n    const closest$1 = (scope, selector, isRoot) => {\n      const is$1 = (element, selector) => is(element, selector);\n      return ClosestOrAncestor(is$1, ancestor, scope, selector, isRoot);\n    };\n\n    const attribute = 'aria-controls';\n    const find$1 = queryElem => {\n      const dependent = closest$3(queryElem, elem => {\n        if (!isElement$1(elem)) {\n          return false;\n        }\n        const id = get$f(elem, 'id');\n        return id !== undefined && id.indexOf(attribute) > -1;\n      });\n      return dependent.bind(dep => {\n        const id = get$f(dep, 'id');\n        const dos = getRootNode(dep);\n        return descendant(dos, `[${ attribute }=\"${ id }\"]`);\n      });\n    };\n    const manager = () => {\n      const ariaId = generate$6(attribute);\n      const link = elem => {\n        set$9(elem, attribute, ariaId);\n      };\n      const unlink = elem => {\n        remove$7(elem, attribute);\n      };\n      return {\n        id: ariaId,\n        link,\n        unlink\n      };\n    };\n\n    const isAriaPartOf = (component, queryElem) => find$1(queryElem).exists(owner => isPartOf$1(component, owner));\n    const isPartOf$1 = (component, queryElem) => closest$2(queryElem, el => eq(el, component.element), never) || isAriaPartOf(component, queryElem);\n\n    const unknown = 'unknown';\n    var EventConfiguration;\n    (function (EventConfiguration) {\n      EventConfiguration[EventConfiguration['STOP'] = 0] = 'STOP';\n      EventConfiguration[EventConfiguration['NORMAL'] = 1] = 'NORMAL';\n      EventConfiguration[EventConfiguration['LOGGING'] = 2] = 'LOGGING';\n    }(EventConfiguration || (EventConfiguration = {})));\n    const eventConfig = Cell({});\n    const makeEventLogger = (eventName, initialTarget) => {\n      const sequence = [];\n      const startTime = new Date().getTime();\n      return {\n        logEventCut: (_name, target, purpose) => {\n          sequence.push({\n            outcome: 'cut',\n            target,\n            purpose\n          });\n        },\n        logEventStopped: (_name, target, purpose) => {\n          sequence.push({\n            outcome: 'stopped',\n            target,\n            purpose\n          });\n        },\n        logNoParent: (_name, target, purpose) => {\n          sequence.push({\n            outcome: 'no-parent',\n            target,\n            purpose\n          });\n        },\n        logEventNoHandlers: (_name, target) => {\n          sequence.push({\n            outcome: 'no-handlers-left',\n            target\n          });\n        },\n        logEventResponse: (_name, target, purpose) => {\n          sequence.push({\n            outcome: 'response',\n            purpose,\n            target\n          });\n        },\n        write: () => {\n          const finishTime = new Date().getTime();\n          if (contains$2([\n              'mousemove',\n              'mouseover',\n              'mouseout',\n              systemInit()\n            ], eventName)) {\n            return;\n          }\n          console.log(eventName, {\n            event: eventName,\n            time: finishTime - startTime,\n            target: initialTarget.dom,\n            sequence: map$2(sequence, s => {\n              if (!contains$2([\n                  'cut',\n                  'stopped',\n                  'response'\n                ], s.outcome)) {\n                return s.outcome;\n              } else {\n                return '{' + s.purpose + '} ' + s.outcome + ' at (' + element(s.target) + ')';\n              }\n            })\n          });\n        }\n      };\n    };\n    const processEvent = (eventName, initialTarget, f) => {\n      const status = get$g(eventConfig.get(), eventName).orThunk(() => {\n        const patterns = keys(eventConfig.get());\n        return findMap(patterns, p => eventName.indexOf(p) > -1 ? Optional.some(eventConfig.get()[p]) : Optional.none());\n      }).getOr(EventConfiguration.NORMAL);\n      switch (status) {\n      case EventConfiguration.NORMAL:\n        return f(noLogger());\n      case EventConfiguration.LOGGING: {\n          const logger = makeEventLogger(eventName, initialTarget);\n          const output = f(logger);\n          logger.write();\n          return output;\n        }\n      case EventConfiguration.STOP:\n        return true;\n      }\n    };\n    const path = [\n      'alloy/data/Fields',\n      'alloy/debugging/Debugging'\n    ];\n    const getTrace = () => {\n      const err = new Error();\n      if (err.stack !== undefined) {\n        const lines = err.stack.split('\\n');\n        return find$5(lines, line => line.indexOf('alloy') > 0 && !exists(path, p => line.indexOf(p) > -1)).getOr(unknown);\n      } else {\n        return unknown;\n      }\n    };\n    const ignoreEvent = {\n      logEventCut: noop,\n      logEventStopped: noop,\n      logNoParent: noop,\n      logEventNoHandlers: noop,\n      logEventResponse: noop,\n      write: noop\n    };\n    const monitorEvent = (eventName, initialTarget, f) => processEvent(eventName, initialTarget, f);\n    const noLogger = constant$1(ignoreEvent);\n\n    const menuFields = constant$1([\n      required$1('menu'),\n      required$1('selectedMenu')\n    ]);\n    const itemFields = constant$1([\n      required$1('item'),\n      required$1('selectedItem')\n    ]);\n    constant$1(objOf(itemFields().concat(menuFields())));\n    const itemSchema$3 = constant$1(objOf(itemFields()));\n\n    const _initSize = requiredObjOf('initSize', [\n      required$1('numColumns'),\n      required$1('numRows')\n    ]);\n    const itemMarkers = () => requiredOf('markers', itemSchema$3());\n    const tieredMenuMarkers = () => requiredObjOf('markers', [required$1('backgroundMenu')].concat(menuFields()).concat(itemFields()));\n    const markers$1 = required => requiredObjOf('markers', map$2(required, required$1));\n    const onPresenceHandler = (label, fieldName, presence) => {\n      getTrace();\n      return field$1(fieldName, fieldName, presence, valueOf(f => Result.value((...args) => {\n        return f.apply(undefined, args);\n      })));\n    };\n    const onHandler = fieldName => onPresenceHandler('onHandler', fieldName, defaulted$1(noop));\n    const onKeyboardHandler = fieldName => onPresenceHandler('onKeyboardHandler', fieldName, defaulted$1(Optional.none));\n    const onStrictHandler = fieldName => onPresenceHandler('onHandler', fieldName, required$2());\n    const onStrictKeyboardHandler = fieldName => onPresenceHandler('onKeyboardHandler', fieldName, required$2());\n    const output$1 = (name, value) => customField(name, constant$1(value));\n    const snapshot = name => customField(name, identity);\n    const initSize = constant$1(_initSize);\n\n    const nu$6 = (x, y, bubble, direction, placement, boundsRestriction, labelPrefix, alwaysFit = false) => ({\n      x,\n      y,\n      bubble,\n      direction,\n      placement,\n      restriction: boundsRestriction,\n      label: `${ labelPrefix }-${ placement }`,\n      alwaysFit\n    });\n\n    const adt$a = Adt.generate([\n      { southeast: [] },\n      { southwest: [] },\n      { northeast: [] },\n      { northwest: [] },\n      { south: [] },\n      { north: [] },\n      { east: [] },\n      { west: [] }\n    ]);\n    const cata$2 = (subject, southeast, southwest, northeast, northwest, south, north, east, west) => subject.fold(southeast, southwest, northeast, northwest, south, north, east, west);\n    const cataVertical = (subject, south, middle, north) => subject.fold(south, south, north, north, south, north, middle, middle);\n    const cataHorizontal = (subject, east, middle, west) => subject.fold(east, west, east, west, middle, middle, east, west);\n    const southeast$3 = adt$a.southeast;\n    const southwest$3 = adt$a.southwest;\n    const northeast$3 = adt$a.northeast;\n    const northwest$3 = adt$a.northwest;\n    const south$3 = adt$a.south;\n    const north$3 = adt$a.north;\n    const east$3 = adt$a.east;\n    const west$3 = adt$a.west;\n\n    const cycleBy = (value, delta, min, max) => {\n      const r = value + delta;\n      if (r > max) {\n        return min;\n      } else if (r < min) {\n        return max;\n      } else {\n        return r;\n      }\n    };\n    const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n\n    const getRestriction = (anchor, restriction) => {\n      switch (restriction) {\n      case 1:\n        return anchor.x;\n      case 0:\n        return anchor.x + anchor.width;\n      case 2:\n        return anchor.y;\n      case 3:\n        return anchor.y + anchor.height;\n      }\n    };\n    const boundsRestriction = (anchor, restrictions) => mapToObject([\n      'left',\n      'right',\n      'top',\n      'bottom'\n    ], dir => get$g(restrictions, dir).map(restriction => getRestriction(anchor, restriction)));\n    const adjustBounds = (bounds$1, restriction, bubbleOffset) => {\n      const applyRestriction = (dir, current) => restriction[dir].map(pos => {\n        const isVerticalAxis = dir === 'top' || dir === 'bottom';\n        const offset = isVerticalAxis ? bubbleOffset.top : bubbleOffset.left;\n        const comparator = dir === 'left' || dir === 'top' ? Math.max : Math.min;\n        const newPos = comparator(pos, current) + offset;\n        return isVerticalAxis ? clamp(newPos, bounds$1.y, bounds$1.bottom) : clamp(newPos, bounds$1.x, bounds$1.right);\n      }).getOr(current);\n      const adjustedLeft = applyRestriction('left', bounds$1.x);\n      const adjustedTop = applyRestriction('top', bounds$1.y);\n      const adjustedRight = applyRestriction('right', bounds$1.right);\n      const adjustedBottom = applyRestriction('bottom', bounds$1.bottom);\n      return bounds(adjustedLeft, adjustedTop, adjustedRight - adjustedLeft, adjustedBottom - adjustedTop);\n    };\n\n    const labelPrefix$2 = 'layout';\n    const eastX$1 = anchor => anchor.x;\n    const middleX$1 = (anchor, element) => anchor.x + anchor.width / 2 - element.width / 2;\n    const westX$1 = (anchor, element) => anchor.x + anchor.width - element.width;\n    const northY$2 = (anchor, element) => anchor.y - element.height;\n    const southY$2 = anchor => anchor.y + anchor.height;\n    const centreY$1 = (anchor, element) => anchor.y + anchor.height / 2 - element.height / 2;\n    const eastEdgeX$1 = anchor => anchor.x + anchor.width;\n    const westEdgeX$1 = (anchor, element) => anchor.x - element.width;\n    const southeast$2 = (anchor, element, bubbles) => nu$6(eastX$1(anchor), southY$2(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n      left: 1,\n      top: 3\n    }), labelPrefix$2);\n    const southwest$2 = (anchor, element, bubbles) => nu$6(westX$1(anchor, element), southY$2(anchor), bubbles.southwest(), southwest$3(), 'southwest', boundsRestriction(anchor, {\n      right: 0,\n      top: 3\n    }), labelPrefix$2);\n    const northeast$2 = (anchor, element, bubbles) => nu$6(eastX$1(anchor), northY$2(anchor, element), bubbles.northeast(), northeast$3(), 'northeast', boundsRestriction(anchor, {\n      left: 1,\n      bottom: 2\n    }), labelPrefix$2);\n    const northwest$2 = (anchor, element, bubbles) => nu$6(westX$1(anchor, element), northY$2(anchor, element), bubbles.northwest(), northwest$3(), 'northwest', boundsRestriction(anchor, {\n      right: 0,\n      bottom: 2\n    }), labelPrefix$2);\n    const north$2 = (anchor, element, bubbles) => nu$6(middleX$1(anchor, element), northY$2(anchor, element), bubbles.north(), north$3(), 'north', boundsRestriction(anchor, { bottom: 2 }), labelPrefix$2);\n    const south$2 = (anchor, element, bubbles) => nu$6(middleX$1(anchor, element), southY$2(anchor), bubbles.south(), south$3(), 'south', boundsRestriction(anchor, { top: 3 }), labelPrefix$2);\n    const east$2 = (anchor, element, bubbles) => nu$6(eastEdgeX$1(anchor), centreY$1(anchor, element), bubbles.east(), east$3(), 'east', boundsRestriction(anchor, { left: 0 }), labelPrefix$2);\n    const west$2 = (anchor, element, bubbles) => nu$6(westEdgeX$1(anchor, element), centreY$1(anchor, element), bubbles.west(), west$3(), 'west', boundsRestriction(anchor, { right: 1 }), labelPrefix$2);\n    const all$1 = () => [\n      southeast$2,\n      southwest$2,\n      northeast$2,\n      northwest$2,\n      south$2,\n      north$2,\n      east$2,\n      west$2\n    ];\n    const allRtl$1 = () => [\n      southwest$2,\n      southeast$2,\n      northwest$2,\n      northeast$2,\n      south$2,\n      north$2,\n      east$2,\n      west$2\n    ];\n    const aboveOrBelow = () => [\n      northeast$2,\n      northwest$2,\n      southeast$2,\n      southwest$2,\n      north$2,\n      south$2\n    ];\n    const aboveOrBelowRtl = () => [\n      northwest$2,\n      northeast$2,\n      southwest$2,\n      southeast$2,\n      north$2,\n      south$2\n    ];\n    const belowOrAbove = () => [\n      southeast$2,\n      southwest$2,\n      northeast$2,\n      northwest$2,\n      south$2,\n      north$2\n    ];\n    const belowOrAboveRtl = () => [\n      southwest$2,\n      southeast$2,\n      northwest$2,\n      northeast$2,\n      south$2,\n      north$2\n    ];\n\n    const chooseChannels = (channels, message) => message.universal ? channels : filter$2(channels, ch => contains$2(message.channels, ch));\n    const events$h = receiveConfig => derive$2([run$1(receive(), (component, message) => {\n        const channelMap = receiveConfig.channels;\n        const channels = keys(channelMap);\n        const receivingData = message;\n        const targetChannels = chooseChannels(channels, receivingData);\n        each$1(targetChannels, ch => {\n          const channelInfo = channelMap[ch];\n          const channelSchema = channelInfo.schema;\n          const data = asRawOrDie$1('channel[' + ch + '] data\\nReceiver: ' + element(component.element), channelSchema, receivingData.data);\n          channelInfo.onReceive(component, data);\n        });\n      })]);\n\n    var ActiveReceiving = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        events: events$h\n    });\n\n    var ReceivingSchema = [requiredOf('channels', setOf(Result.value, objOfOnly([\n        onStrictHandler('onReceive'),\n        defaulted('schema', anyValue())\n      ])))];\n\n    const executeEvent = (bConfig, bState, executor) => runOnExecute$1(component => {\n      executor(component, bConfig, bState);\n    });\n    const loadEvent = (bConfig, bState, f) => runOnInit((component, _simulatedEvent) => {\n      f(component, bConfig, bState);\n    });\n    const create$4 = (schema, name, active, apis, extra, state) => {\n      const configSchema = objOfOnly(schema);\n      const schemaSchema = optionObjOf(name, [optionObjOfOnly('config', schema)]);\n      return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n    };\n    const createModes$1 = (modes, name, active, apis, extra, state) => {\n      const configSchema = modes;\n      const schemaSchema = optionObjOf(name, [optionOf('config', modes)]);\n      return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n    };\n    const wrapApi = (bName, apiFunction, apiName) => {\n      const f = (component, ...rest) => {\n        const args = [component].concat(rest);\n        return component.config({ name: constant$1(bName) }).fold(() => {\n          throw new Error('We could not find any behaviour configuration for: ' + bName + '. Using API: ' + apiName);\n        }, info => {\n          const rest = Array.prototype.slice.call(args, 1);\n          return apiFunction.apply(undefined, [\n            component,\n            info.config,\n            info.state\n          ].concat(rest));\n        });\n      };\n      return markAsBehaviourApi(f, apiName, apiFunction);\n    };\n    const revokeBehaviour = name => ({\n      key: name,\n      value: undefined\n    });\n    const doCreate = (configSchema, schemaSchema, name, active, apis, extra, state) => {\n      const getConfig = info => hasNonNullableKey(info, name) ? info[name]() : Optional.none();\n      const wrappedApis = map$1(apis, (apiF, apiName) => wrapApi(name, apiF, apiName));\n      const wrappedExtra = map$1(extra, (extraF, extraName) => markAsExtraApi(extraF, extraName));\n      const me = {\n        ...wrappedExtra,\n        ...wrappedApis,\n        revoke: curry(revokeBehaviour, name),\n        config: spec => {\n          const prepared = asRawOrDie$1(name + '-config', configSchema, spec);\n          return {\n            key: name,\n            value: {\n              config: prepared,\n              me,\n              configAsRaw: cached(() => asRawOrDie$1(name + '-config', configSchema, spec)),\n              initialConfig: spec,\n              state\n            }\n          };\n        },\n        schema: constant$1(schemaSchema),\n        exhibit: (info, base) => {\n          return lift2(getConfig(info), get$g(active, 'exhibit'), (behaviourInfo, exhibitor) => {\n            return exhibitor(base, behaviourInfo.config, behaviourInfo.state);\n          }).getOrThunk(() => nu$7({}));\n        },\n        name: constant$1(name),\n        handlers: info => {\n          return getConfig(info).map(behaviourInfo => {\n            const getEvents = get$g(active, 'events').getOr(() => ({}));\n            return getEvents(behaviourInfo.config, behaviourInfo.state);\n          }).getOr({});\n        }\n      };\n      return me;\n    };\n\n    const derive$1 = capabilities => wrapAll(capabilities);\n    const simpleSchema = objOfOnly([\n      required$1('fields'),\n      required$1('name'),\n      defaulted('active', {}),\n      defaulted('apis', {}),\n      defaulted('state', NoState),\n      defaulted('extra', {})\n    ]);\n    const create$3 = data => {\n      const value = asRawOrDie$1('Creating behaviour: ' + data.name, simpleSchema, data);\n      return create$4(value.fields, value.name, value.active, value.apis, value.extra, value.state);\n    };\n    const modeSchema = objOfOnly([\n      required$1('branchKey'),\n      required$1('branches'),\n      required$1('name'),\n      defaulted('active', {}),\n      defaulted('apis', {}),\n      defaulted('state', NoState),\n      defaulted('extra', {})\n    ]);\n    const createModes = data => {\n      const value = asRawOrDie$1('Creating behaviour: ' + data.name, modeSchema, data);\n      return createModes$1(choose$1(value.branchKey, value.branches), value.name, value.active, value.apis, value.extra, value.state);\n    };\n    const revoke = constant$1(undefined);\n\n    const Receiving = create$3({\n      fields: ReceivingSchema,\n      name: 'receiving',\n      active: ActiveReceiving\n    });\n\n    const exhibit$6 = (base, posConfig) => nu$7({\n      classes: [],\n      styles: posConfig.useFixed() ? {} : { position: 'relative' }\n    });\n\n    var ActivePosition = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        exhibit: exhibit$6\n    });\n\n    const focus$3 = element => element.dom.focus();\n    const blur$1 = element => element.dom.blur();\n    const hasFocus = element => {\n      const root = getRootNode(element).dom;\n      return element.dom === root.activeElement;\n    };\n    const active$1 = (root = getDocument()) => Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n    const search = element => active$1(getRootNode(element)).filter(e => element.dom.contains(e.dom));\n\n    const preserve$1 = (f, container) => {\n      const dos = getRootNode(container);\n      const refocus = active$1(dos).bind(focused => {\n        const hasFocus = elem => eq(focused, elem);\n        return hasFocus(container) ? Optional.some(container) : descendant$1(container, hasFocus);\n      });\n      const result = f(container);\n      refocus.each(oldFocus => {\n        active$1(dos).filter(newFocus => eq(newFocus, oldFocus)).fold(() => {\n          focus$3(oldFocus);\n        }, noop);\n      });\n      return result;\n    };\n\n    const NuPositionCss = (position, left, top, right, bottom) => {\n      const toPx = num => num + 'px';\n      return {\n        position,\n        left: left.map(toPx),\n        top: top.map(toPx),\n        right: right.map(toPx),\n        bottom: bottom.map(toPx)\n      };\n    };\n    const toOptions = position => ({\n      ...position,\n      position: Optional.some(position.position)\n    });\n    const applyPositionCss = (element, position) => {\n      setOptions(element, toOptions(position));\n    };\n\n    const adt$9 = Adt.generate([\n      { none: [] },\n      {\n        relative: [\n          'x',\n          'y',\n          'width',\n          'height'\n        ]\n      },\n      {\n        fixed: [\n          'x',\n          'y',\n          'width',\n          'height'\n        ]\n      }\n    ]);\n    const positionWithDirection = (posName, decision, x, y, width, height) => {\n      const decisionRect = decision.rect;\n      const decisionX = decisionRect.x - x;\n      const decisionY = decisionRect.y - y;\n      const decisionWidth = decisionRect.width;\n      const decisionHeight = decisionRect.height;\n      const decisionRight = width - (decisionX + decisionWidth);\n      const decisionBottom = height - (decisionY + decisionHeight);\n      const left = Optional.some(decisionX);\n      const top = Optional.some(decisionY);\n      const right = Optional.some(decisionRight);\n      const bottom = Optional.some(decisionBottom);\n      const none = Optional.none();\n      return cata$2(decision.direction, () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, none, top, right, none), () => NuPositionCss(posName, left, none, none, bottom), () => NuPositionCss(posName, none, none, right, bottom), () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, left, none, none, bottom), () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, none, top, right, none));\n    };\n    const reposition = (origin, decision) => origin.fold(() => {\n      const decisionRect = decision.rect;\n      return NuPositionCss('absolute', Optional.some(decisionRect.x), Optional.some(decisionRect.y), Optional.none(), Optional.none());\n    }, (x, y, width, height) => {\n      return positionWithDirection('absolute', decision, x, y, width, height);\n    }, (x, y, width, height) => {\n      return positionWithDirection('fixed', decision, x, y, width, height);\n    });\n    const toBox = (origin, element) => {\n      const rel = curry(find$2, element);\n      const position = origin.fold(rel, rel, () => {\n        const scroll = get$b();\n        return find$2(element).translate(-scroll.left, -scroll.top);\n      });\n      const width = getOuter$1(element);\n      const height = getOuter$2(element);\n      return bounds(position.left, position.top, width, height);\n    };\n    const viewport = (origin, getBounds) => getBounds.fold(() => origin.fold(win, win, bounds), b => origin.fold(b, b, () => {\n      const bounds$1 = b();\n      const pos = translate$2(origin, bounds$1.x, bounds$1.y);\n      return bounds(pos.left, pos.top, bounds$1.width, bounds$1.height);\n    }));\n    const translate$2 = (origin, x, y) => {\n      const pos = SugarPosition(x, y);\n      const removeScroll = () => {\n        const outerScroll = get$b();\n        return pos.translate(-outerScroll.left, -outerScroll.top);\n      };\n      return origin.fold(constant$1(pos), constant$1(pos), removeScroll);\n    };\n    const cata$1 = (subject, onNone, onRelative, onFixed) => subject.fold(onNone, onRelative, onFixed);\n    adt$9.none;\n    const relative$1 = adt$9.relative;\n    const fixed$1 = adt$9.fixed;\n\n    const anchor = (anchorBox, origin) => ({\n      anchorBox,\n      origin\n    });\n    const box = (anchorBox, origin) => anchor(anchorBox, origin);\n\n    const placementAttribute = 'data-alloy-placement';\n    const setPlacement$1 = (element, placement) => {\n      set$9(element, placementAttribute, placement);\n    };\n    const getPlacement = element => getOpt(element, placementAttribute);\n    const reset$2 = element => remove$7(element, placementAttribute);\n\n    const adt$8 = Adt.generate([\n      { fit: ['reposition'] },\n      {\n        nofit: [\n          'reposition',\n          'visibleW',\n          'visibleH',\n          'isVisible'\n        ]\n      }\n    ]);\n    const determinePosition = (box, bounds) => {\n      const {\n        x: boundsX,\n        y: boundsY,\n        right: boundsRight,\n        bottom: boundsBottom\n      } = bounds;\n      const {x, y, right, bottom, width, height} = box;\n      const xInBounds = x >= boundsX && x <= boundsRight;\n      const yInBounds = y >= boundsY && y <= boundsBottom;\n      const originInBounds = xInBounds && yInBounds;\n      const rightInBounds = right <= boundsRight && right >= boundsX;\n      const bottomInBounds = bottom <= boundsBottom && bottom >= boundsY;\n      const sizeInBounds = rightInBounds && bottomInBounds;\n      const visibleW = Math.min(width, x >= boundsX ? boundsRight - x : right - boundsX);\n      const visibleH = Math.min(height, y >= boundsY ? boundsBottom - y : bottom - boundsY);\n      return {\n        originInBounds,\n        sizeInBounds,\n        visibleW,\n        visibleH\n      };\n    };\n    const calcReposition = (box, bounds$1) => {\n      const {\n        x: boundsX,\n        y: boundsY,\n        right: boundsRight,\n        bottom: boundsBottom\n      } = bounds$1;\n      const {x, y, width, height} = box;\n      const maxX = Math.max(boundsX, boundsRight - width);\n      const maxY = Math.max(boundsY, boundsBottom - height);\n      const restrictedX = clamp(x, boundsX, maxX);\n      const restrictedY = clamp(y, boundsY, maxY);\n      const restrictedWidth = Math.min(restrictedX + width, boundsRight) - restrictedX;\n      const restrictedHeight = Math.min(restrictedY + height, boundsBottom) - restrictedY;\n      return bounds(restrictedX, restrictedY, restrictedWidth, restrictedHeight);\n    };\n    const calcMaxSizes = (direction, box, bounds) => {\n      const upAvailable = constant$1(box.bottom - bounds.y);\n      const downAvailable = constant$1(bounds.bottom - box.y);\n      const maxHeight = cataVertical(direction, downAvailable, downAvailable, upAvailable);\n      const westAvailable = constant$1(box.right - bounds.x);\n      const eastAvailable = constant$1(bounds.right - box.x);\n      const maxWidth = cataHorizontal(direction, eastAvailable, eastAvailable, westAvailable);\n      return {\n        maxWidth,\n        maxHeight\n      };\n    };\n    const attempt = (candidate, width, height, bounds$1) => {\n      const bubble = candidate.bubble;\n      const bubbleOffset = bubble.offset;\n      const adjustedBounds = adjustBounds(bounds$1, candidate.restriction, bubbleOffset);\n      const newX = candidate.x + bubbleOffset.left;\n      const newY = candidate.y + bubbleOffset.top;\n      const box = bounds(newX, newY, width, height);\n      const {originInBounds, sizeInBounds, visibleW, visibleH} = determinePosition(box, adjustedBounds);\n      const fits = originInBounds && sizeInBounds;\n      const fittedBox = fits ? box : calcReposition(box, adjustedBounds);\n      const isPartlyVisible = fittedBox.width > 0 && fittedBox.height > 0;\n      const {maxWidth, maxHeight} = calcMaxSizes(candidate.direction, fittedBox, bounds$1);\n      const reposition = {\n        rect: fittedBox,\n        maxHeight,\n        maxWidth,\n        direction: candidate.direction,\n        placement: candidate.placement,\n        classes: {\n          on: bubble.classesOn,\n          off: bubble.classesOff\n        },\n        layout: candidate.label,\n        testY: newY\n      };\n      return fits || candidate.alwaysFit ? adt$8.fit(reposition) : adt$8.nofit(reposition, visibleW, visibleH, isPartlyVisible);\n    };\n    const attempts = (element, candidates, anchorBox, elementBox, bubbles, bounds) => {\n      const panelWidth = elementBox.width;\n      const panelHeight = elementBox.height;\n      const attemptBestFit = (layout, reposition, visibleW, visibleH, isVisible) => {\n        const next = layout(anchorBox, elementBox, bubbles, element, bounds);\n        const attemptLayout = attempt(next, panelWidth, panelHeight, bounds);\n        return attemptLayout.fold(constant$1(attemptLayout), (newReposition, newVisibleW, newVisibleH, newIsVisible) => {\n          const improved = isVisible === newIsVisible ? newVisibleH > visibleH || newVisibleW > visibleW : !isVisible && newIsVisible;\n          return improved ? attemptLayout : adt$8.nofit(reposition, visibleW, visibleH, isVisible);\n        });\n      };\n      const abc = foldl(candidates, (b, a) => {\n        const bestNext = curry(attemptBestFit, a);\n        return b.fold(constant$1(b), bestNext);\n      }, adt$8.nofit({\n        rect: anchorBox,\n        maxHeight: elementBox.height,\n        maxWidth: elementBox.width,\n        direction: southeast$3(),\n        placement: 'southeast',\n        classes: {\n          on: [],\n          off: []\n        },\n        layout: 'none',\n        testY: anchorBox.y\n      }, -1, -1, false));\n      return abc.fold(identity, identity);\n    };\n\n    const singleton = doRevoke => {\n      const subject = Cell(Optional.none());\n      const revoke = () => subject.get().each(doRevoke);\n      const clear = () => {\n        revoke();\n        subject.set(Optional.none());\n      };\n      const isSet = () => subject.get().isSome();\n      const get = () => subject.get();\n      const set = s => {\n        revoke();\n        subject.set(Optional.some(s));\n      };\n      return {\n        clear,\n        isSet,\n        get,\n        set\n      };\n    };\n    const destroyable = () => singleton(s => s.destroy());\n    const unbindable = () => singleton(s => s.unbind());\n    const value$2 = () => {\n      const subject = singleton(noop);\n      const on = f => subject.get().each(f);\n      return {\n        ...subject,\n        on\n      };\n    };\n\n    const filter = always;\n    const bind = (element, event, handler) => bind$2(element, event, filter, handler);\n    const capture = (element, event, handler) => capture$1(element, event, filter, handler);\n    const fromRawEvent = fromRawEvent$1;\n\n    const properties = [\n      'top',\n      'bottom',\n      'right',\n      'left'\n    ];\n    const timerAttr = 'data-alloy-transition-timer';\n    const isTransitioning$1 = (element, transition) => hasAll(element, transition.classes);\n    const shouldApplyTransitionCss = (transition, decision, lastPlacement) => {\n      return lastPlacement.exists(placer => {\n        const mode = transition.mode;\n        return mode === 'all' ? true : placer[mode] !== decision[mode];\n      });\n    };\n    const hasChanges = (position, intermediate) => {\n      const round = value => parseFloat(value).toFixed(3);\n      return find$4(intermediate, (value, key) => {\n        const newValue = position[key].map(round);\n        const val = value.map(round);\n        return !equals(newValue, val);\n      }).isSome();\n    };\n    const getTransitionDuration = element => {\n      const get = name => {\n        const style = get$e(element, name);\n        const times = style.split(/\\s*,\\s*/);\n        return filter$2(times, isNotEmpty);\n      };\n      const parse = value => {\n        if (isString(value) && /^[\\d.]+/.test(value)) {\n          const num = parseFloat(value);\n          return endsWith(value, 'ms') ? num : num * 1000;\n        } else {\n          return 0;\n        }\n      };\n      const delay = get('transition-delay');\n      const duration = get('transition-duration');\n      return foldl(duration, (acc, dur, i) => {\n        const time = parse(delay[i]) + parse(dur);\n        return Math.max(acc, time);\n      }, 0);\n    };\n    const setupTransitionListeners = (element, transition) => {\n      const transitionEnd = unbindable();\n      const transitionCancel = unbindable();\n      let timer;\n      const isSourceTransition = e => {\n        var _a;\n        const pseudoElement = (_a = e.raw.pseudoElement) !== null && _a !== void 0 ? _a : '';\n        return eq(e.target, element) && isEmpty(pseudoElement) && contains$2(properties, e.raw.propertyName);\n      };\n      const transitionDone = e => {\n        if (isNullable(e) || isSourceTransition(e)) {\n          transitionEnd.clear();\n          transitionCancel.clear();\n          const type = e === null || e === void 0 ? void 0 : e.raw.type;\n          if (isNullable(type) || type === transitionend()) {\n            clearTimeout(timer);\n            remove$7(element, timerAttr);\n            remove$1(element, transition.classes);\n          }\n        }\n      };\n      const transitionStart = bind(element, transitionstart(), e => {\n        if (isSourceTransition(e)) {\n          transitionStart.unbind();\n          transitionEnd.set(bind(element, transitionend(), transitionDone));\n          transitionCancel.set(bind(element, transitioncancel(), transitionDone));\n        }\n      });\n      const duration = getTransitionDuration(element);\n      requestAnimationFrame(() => {\n        timer = setTimeout(transitionDone, duration + 17);\n        set$9(element, timerAttr, timer);\n      });\n    };\n    const startTransitioning = (element, transition) => {\n      add$1(element, transition.classes);\n      getOpt(element, timerAttr).each(timerId => {\n        clearTimeout(parseInt(timerId, 10));\n        remove$7(element, timerAttr);\n      });\n      setupTransitionListeners(element, transition);\n    };\n    const applyTransitionCss = (element, origin, position, transition, decision, lastPlacement) => {\n      const shouldTransition = shouldApplyTransitionCss(transition, decision, lastPlacement);\n      if (shouldTransition || isTransitioning$1(element, transition)) {\n        set$8(element, 'position', position.position);\n        const rect = toBox(origin, element);\n        const intermediatePosition = reposition(origin, {\n          ...decision,\n          rect\n        });\n        const intermediateCssOptions = mapToObject(properties, prop => intermediatePosition[prop]);\n        if (hasChanges(position, intermediateCssOptions)) {\n          setOptions(element, intermediateCssOptions);\n          if (shouldTransition) {\n            startTransitioning(element, transition);\n          }\n          reflow(element);\n        }\n      } else {\n        remove$1(element, transition.classes);\n      }\n    };\n\n    const elementSize = p => ({\n      width: getOuter$1(p),\n      height: getOuter$2(p)\n    });\n    const layout = (anchorBox, element, bubbles, options) => {\n      remove$6(element, 'max-height');\n      remove$6(element, 'max-width');\n      const elementBox = elementSize(element);\n      return attempts(element, options.preference, anchorBox, elementBox, bubbles, options.bounds);\n    };\n    const setClasses = (element, decision) => {\n      const classInfo = decision.classes;\n      remove$1(element, classInfo.off);\n      add$1(element, classInfo.on);\n    };\n    const setHeight = (element, decision, options) => {\n      const maxHeightFunction = options.maxHeightFunction;\n      maxHeightFunction(element, decision.maxHeight);\n    };\n    const setWidth = (element, decision, options) => {\n      const maxWidthFunction = options.maxWidthFunction;\n      maxWidthFunction(element, decision.maxWidth);\n    };\n    const position$2 = (element, decision, options) => {\n      const positionCss = reposition(options.origin, decision);\n      options.transition.each(transition => {\n        applyTransitionCss(element, options.origin, positionCss, transition, decision, options.lastPlacement);\n      });\n      applyPositionCss(element, positionCss);\n    };\n    const setPlacement = (element, decision) => {\n      setPlacement$1(element, decision.placement);\n    };\n\n    const setMaxHeight = (element, maxHeight) => {\n      setMax$1(element, Math.floor(maxHeight));\n    };\n    const anchored = constant$1((element, available) => {\n      setMaxHeight(element, available);\n      setAll(element, {\n        'overflow-x': 'hidden',\n        'overflow-y': 'auto'\n      });\n    });\n    const expandable$1 = constant$1((element, available) => {\n      setMaxHeight(element, available);\n    });\n\n    const defaultOr = (options, key, dephault) => options[key] === undefined ? dephault : options[key];\n    const simple = (anchor, element, bubble, layouts, lastPlacement, getBounds, overrideOptions, transition) => {\n      const maxHeightFunction = defaultOr(overrideOptions, 'maxHeightFunction', anchored());\n      const maxWidthFunction = defaultOr(overrideOptions, 'maxWidthFunction', noop);\n      const anchorBox = anchor.anchorBox;\n      const origin = anchor.origin;\n      const options = {\n        bounds: viewport(origin, getBounds),\n        origin,\n        preference: layouts,\n        maxHeightFunction,\n        maxWidthFunction,\n        lastPlacement,\n        transition\n      };\n      return go(anchorBox, element, bubble, options);\n    };\n    const go = (anchorBox, element, bubble, options) => {\n      const decision = layout(anchorBox, element, bubble, options);\n      position$2(element, decision, options);\n      setPlacement(element, decision);\n      setClasses(element, decision);\n      setHeight(element, decision, options);\n      setWidth(element, decision, options);\n      return {\n        layout: decision.layout,\n        placement: decision.placement\n      };\n    };\n\n    const allAlignments = [\n      'valignCentre',\n      'alignLeft',\n      'alignRight',\n      'alignCentre',\n      'top',\n      'bottom',\n      'left',\n      'right',\n      'inset'\n    ];\n    const nu$5 = (xOffset, yOffset, classes, insetModifier = 1) => {\n      const insetXOffset = xOffset * insetModifier;\n      const insetYOffset = yOffset * insetModifier;\n      const getClasses = prop => get$g(classes, prop).getOr([]);\n      const make = (xDelta, yDelta, alignmentsOn) => {\n        const alignmentsOff = difference(allAlignments, alignmentsOn);\n        return {\n          offset: SugarPosition(xDelta, yDelta),\n          classesOn: bind$3(alignmentsOn, getClasses),\n          classesOff: bind$3(alignmentsOff, getClasses)\n        };\n      };\n      return {\n        southeast: () => make(-xOffset, yOffset, [\n          'top',\n          'alignLeft'\n        ]),\n        southwest: () => make(xOffset, yOffset, [\n          'top',\n          'alignRight'\n        ]),\n        south: () => make(-xOffset / 2, yOffset, [\n          'top',\n          'alignCentre'\n        ]),\n        northeast: () => make(-xOffset, -yOffset, [\n          'bottom',\n          'alignLeft'\n        ]),\n        northwest: () => make(xOffset, -yOffset, [\n          'bottom',\n          'alignRight'\n        ]),\n        north: () => make(-xOffset / 2, -yOffset, [\n          'bottom',\n          'alignCentre'\n        ]),\n        east: () => make(xOffset, -yOffset / 2, [\n          'valignCentre',\n          'left'\n        ]),\n        west: () => make(-xOffset, -yOffset / 2, [\n          'valignCentre',\n          'right'\n        ]),\n        insetNortheast: () => make(insetXOffset, insetYOffset, [\n          'top',\n          'alignLeft',\n          'inset'\n        ]),\n        insetNorthwest: () => make(-insetXOffset, insetYOffset, [\n          'top',\n          'alignRight',\n          'inset'\n        ]),\n        insetNorth: () => make(-insetXOffset / 2, insetYOffset, [\n          'top',\n          'alignCentre',\n          'inset'\n        ]),\n        insetSoutheast: () => make(insetXOffset, -insetYOffset, [\n          'bottom',\n          'alignLeft',\n          'inset'\n        ]),\n        insetSouthwest: () => make(-insetXOffset, -insetYOffset, [\n          'bottom',\n          'alignRight',\n          'inset'\n        ]),\n        insetSouth: () => make(-insetXOffset / 2, -insetYOffset, [\n          'bottom',\n          'alignCentre',\n          'inset'\n        ]),\n        insetEast: () => make(-insetXOffset, -insetYOffset / 2, [\n          'valignCentre',\n          'right',\n          'inset'\n        ]),\n        insetWest: () => make(insetXOffset, -insetYOffset / 2, [\n          'valignCentre',\n          'left',\n          'inset'\n        ])\n      };\n    };\n    const fallback = () => nu$5(0, 0, {});\n\n    const nu$4 = identity;\n\n    const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n    const getDirection = element => get$e(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n    var AttributeValue;\n    (function (AttributeValue) {\n      AttributeValue['TopToBottom'] = 'toptobottom';\n      AttributeValue['BottomToTop'] = 'bottomtotop';\n    }(AttributeValue || (AttributeValue = {})));\n    const Attribute = 'data-alloy-vertical-dir';\n    const isBottomToTopDir = el => closest$2(el, current => isElement$1(current) && get$f(current, 'data-alloy-vertical-dir') === AttributeValue.BottomToTop);\n\n    const schema$y = () => optionObjOf('layouts', [\n      required$1('onLtr'),\n      required$1('onRtl'),\n      option$3('onBottomLtr'),\n      option$3('onBottomRtl')\n    ]);\n    const get$5 = (elem, info, defaultLtr, defaultRtl, defaultBottomLtr, defaultBottomRtl, dirElement) => {\n      const isBottomToTop = dirElement.map(isBottomToTopDir).getOr(false);\n      const customLtr = info.layouts.map(ls => ls.onLtr(elem));\n      const customRtl = info.layouts.map(ls => ls.onRtl(elem));\n      const ltr = isBottomToTop ? info.layouts.bind(ls => ls.onBottomLtr.map(f => f(elem))).or(customLtr).getOr(defaultBottomLtr) : customLtr.getOr(defaultLtr);\n      const rtl = isBottomToTop ? info.layouts.bind(ls => ls.onBottomRtl.map(f => f(elem))).or(customRtl).getOr(defaultBottomRtl) : customRtl.getOr(defaultRtl);\n      const f = onDirection(ltr, rtl);\n      return f(elem);\n    };\n\n    const placement$4 = (component, anchorInfo, origin) => {\n      const hotspot = anchorInfo.hotspot;\n      const anchorBox = toBox(origin, hotspot.element);\n      const layouts = get$5(component.element, anchorInfo, belowOrAbove(), belowOrAboveRtl(), aboveOrBelow(), aboveOrBelowRtl(), Optional.some(anchorInfo.hotspot.element));\n      return Optional.some(nu$4({\n        anchorBox,\n        bubble: anchorInfo.bubble.getOr(fallback()),\n        overrides: anchorInfo.overrides,\n        layouts,\n        placer: Optional.none()\n      }));\n    };\n    var HotspotAnchor = [\n      required$1('hotspot'),\n      option$3('bubble'),\n      defaulted('overrides', {}),\n      schema$y(),\n      output$1('placement', placement$4)\n    ];\n\n    const placement$3 = (component, anchorInfo, origin) => {\n      const pos = translate$2(origin, anchorInfo.x, anchorInfo.y);\n      const anchorBox = bounds(pos.left, pos.top, anchorInfo.width, anchorInfo.height);\n      const layouts = get$5(component.element, anchorInfo, all$1(), allRtl$1(), all$1(), allRtl$1(), Optional.none());\n      return Optional.some(nu$4({\n        anchorBox,\n        bubble: anchorInfo.bubble,\n        overrides: anchorInfo.overrides,\n        layouts,\n        placer: Optional.none()\n      }));\n    };\n    var MakeshiftAnchor = [\n      required$1('x'),\n      required$1('y'),\n      defaulted('height', 0),\n      defaulted('width', 0),\n      defaulted('bubble', fallback()),\n      defaulted('overrides', {}),\n      schema$y(),\n      output$1('placement', placement$3)\n    ];\n\n    const adt$7 = Adt.generate([\n      { screen: ['point'] },\n      {\n        absolute: [\n          'point',\n          'scrollLeft',\n          'scrollTop'\n        ]\n      }\n    ]);\n    const toFixed = pos => pos.fold(identity, (point, scrollLeft, scrollTop) => point.translate(-scrollLeft, -scrollTop));\n    const toAbsolute = pos => pos.fold(identity, identity);\n    const sum = points => foldl(points, (b, a) => b.translate(a.left, a.top), SugarPosition(0, 0));\n    const sumAsFixed = positions => {\n      const points = map$2(positions, toFixed);\n      return sum(points);\n    };\n    const sumAsAbsolute = positions => {\n      const points = map$2(positions, toAbsolute);\n      return sum(points);\n    };\n    const screen = adt$7.screen;\n    const absolute$1 = adt$7.absolute;\n\n    const getOffset = (component, origin, anchorInfo) => {\n      const win = defaultView(anchorInfo.root).dom;\n      const hasSameOwner = frame => {\n        const frameOwner = owner$4(frame);\n        const compOwner = owner$4(component.element);\n        return eq(frameOwner, compOwner);\n      };\n      return Optional.from(win.frameElement).map(SugarElement.fromDom).filter(hasSameOwner).map(absolute$3);\n    };\n    const getRootPoint = (component, origin, anchorInfo) => {\n      const doc = owner$4(component.element);\n      const outerScroll = get$b(doc);\n      const offset = getOffset(component, origin, anchorInfo).getOr(outerScroll);\n      return absolute$1(offset, outerScroll.left, outerScroll.top);\n    };\n\n    const getBox = (left, top, width, height) => {\n      const point = screen(SugarPosition(left, top));\n      return Optional.some(pointed(point, width, height));\n    };\n    const calcNewAnchor = (optBox, rootPoint, anchorInfo, origin, elem) => optBox.map(box => {\n      const points = [\n        rootPoint,\n        box.point\n      ];\n      const topLeft = cata$1(origin, () => sumAsAbsolute(points), () => sumAsAbsolute(points), () => sumAsFixed(points));\n      const anchorBox = rect(topLeft.left, topLeft.top, box.width, box.height);\n      const layoutsLtr = anchorInfo.showAbove ? aboveOrBelow() : belowOrAbove();\n      const layoutsRtl = anchorInfo.showAbove ? aboveOrBelowRtl() : belowOrAboveRtl();\n      const layouts = get$5(elem, anchorInfo, layoutsLtr, layoutsRtl, layoutsLtr, layoutsRtl, Optional.none());\n      return nu$4({\n        anchorBox,\n        bubble: anchorInfo.bubble.getOr(fallback()),\n        overrides: anchorInfo.overrides,\n        layouts,\n        placer: Optional.none()\n      });\n    });\n\n    const placement$2 = (component, anchorInfo, origin) => {\n      const rootPoint = getRootPoint(component, origin, anchorInfo);\n      return anchorInfo.node.filter(inBody).bind(target => {\n        const rect = target.dom.getBoundingClientRect();\n        const nodeBox = getBox(rect.left, rect.top, rect.width, rect.height);\n        const elem = anchorInfo.node.getOr(component.element);\n        return calcNewAnchor(nodeBox, rootPoint, anchorInfo, origin, elem);\n      });\n    };\n    var NodeAnchor = [\n      required$1('node'),\n      required$1('root'),\n      option$3('bubble'),\n      schema$y(),\n      defaulted('overrides', {}),\n      defaulted('showAbove', false),\n      output$1('placement', placement$2)\n    ];\n\n    const zeroWidth = '\\uFEFF';\n    const nbsp = '\\xA0';\n\n    const create$2 = (start, soffset, finish, foffset) => ({\n      start,\n      soffset,\n      finish,\n      foffset\n    });\n    const SimRange = { create: create$2 };\n\n    const adt$6 = Adt.generate([\n      { before: ['element'] },\n      {\n        on: [\n          'element',\n          'offset'\n        ]\n      },\n      { after: ['element'] }\n    ]);\n    const cata = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n    const getStart$1 = situ => situ.fold(identity, identity, identity);\n    const before = adt$6.before;\n    const on$1 = adt$6.on;\n    const after$1 = adt$6.after;\n    const Situ = {\n      before,\n      on: on$1,\n      after: after$1,\n      cata,\n      getStart: getStart$1\n    };\n\n    const adt$5 = Adt.generate([\n      { domRange: ['rng'] },\n      {\n        relative: [\n          'startSitu',\n          'finishSitu'\n        ]\n      },\n      {\n        exact: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      }\n    ]);\n    const exactFromRange = simRange => adt$5.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n    const getStart = selection => selection.match({\n      domRange: rng => SugarElement.fromDom(rng.startContainer),\n      relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n      exact: (start, _soffset, _finish, _foffset) => start\n    });\n    const domRange = adt$5.domRange;\n    const relative = adt$5.relative;\n    const exact = adt$5.exact;\n    const getWin = selection => {\n      const start = getStart(selection);\n      return defaultView(start);\n    };\n    const range$1 = SimRange.create;\n    const SimSelection = {\n      domRange,\n      relative,\n      exact,\n      exactFromRange,\n      getWin,\n      range: range$1\n    };\n\n    const setStart = (rng, situ) => {\n      situ.fold(e => {\n        rng.setStartBefore(e.dom);\n      }, (e, o) => {\n        rng.setStart(e.dom, o);\n      }, e => {\n        rng.setStartAfter(e.dom);\n      });\n    };\n    const setFinish = (rng, situ) => {\n      situ.fold(e => {\n        rng.setEndBefore(e.dom);\n      }, (e, o) => {\n        rng.setEnd(e.dom, o);\n      }, e => {\n        rng.setEndAfter(e.dom);\n      });\n    };\n    const relativeToNative = (win, startSitu, finishSitu) => {\n      const range = win.document.createRange();\n      setStart(range, startSitu);\n      setFinish(range, finishSitu);\n      return range;\n    };\n    const exactToNative = (win, start, soffset, finish, foffset) => {\n      const rng = win.document.createRange();\n      rng.setStart(start.dom, soffset);\n      rng.setEnd(finish.dom, foffset);\n      return rng;\n    };\n    const toRect = rect => ({\n      left: rect.left,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      width: rect.width,\n      height: rect.height\n    });\n    const getFirstRect$1 = rng => {\n      const rects = rng.getClientRects();\n      const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n      return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n    };\n    const getBounds$2 = rng => {\n      const rect = rng.getBoundingClientRect();\n      return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n    };\n\n    const adt$4 = Adt.generate([\n      {\n        ltr: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      },\n      {\n        rtl: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      }\n    ]);\n    const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n    const getRanges = (win, selection) => selection.match({\n      domRange: rng => {\n        return {\n          ltr: constant$1(rng),\n          rtl: Optional.none\n        };\n      },\n      relative: (startSitu, finishSitu) => {\n        return {\n          ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n          rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n        };\n      },\n      exact: (start, soffset, finish, foffset) => {\n        return {\n          ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n          rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n        };\n      }\n    });\n    const doDiagnose = (win, ranges) => {\n      const rng = ranges.ltr();\n      if (rng.collapsed) {\n        const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n        return reversed.map(rev => adt$4.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$4.ltr, rng));\n      } else {\n        return fromRange(win, adt$4.ltr, rng);\n      }\n    };\n    const diagnose = (win, selection) => {\n      const ranges = getRanges(win, selection);\n      return doDiagnose(win, ranges);\n    };\n    const asLtrRange = (win, selection) => {\n      const diagnosis = diagnose(win, selection);\n      return diagnosis.match({\n        ltr: (start, soffset, finish, foffset) => {\n          const rng = win.document.createRange();\n          rng.setStart(start.dom, soffset);\n          rng.setEnd(finish.dom, foffset);\n          return rng;\n        },\n        rtl: (start, soffset, finish, foffset) => {\n          const rng = win.document.createRange();\n          rng.setStart(finish.dom, foffset);\n          rng.setEnd(start.dom, soffset);\n          return rng;\n        }\n      });\n    };\n    adt$4.ltr;\n    adt$4.rtl;\n\n    const descendants = (scope, selector) => all$3(selector, scope);\n\n    const makeRange = (start, soffset, finish, foffset) => {\n      const doc = owner$4(start);\n      const rng = doc.dom.createRange();\n      rng.setStart(start.dom, soffset);\n      rng.setEnd(finish.dom, foffset);\n      return rng;\n    };\n    const after = (start, soffset, finish, foffset) => {\n      const r = makeRange(start, soffset, finish, foffset);\n      const same = eq(start, finish) && soffset === foffset;\n      return r.collapsed && !same;\n    };\n\n    const getNativeSelection = win => Optional.from(win.getSelection());\n    const readRange = selection => {\n      if (selection.rangeCount > 0) {\n        const firstRng = selection.getRangeAt(0);\n        const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n        return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n      } else {\n        return Optional.none();\n      }\n    };\n    const doGetExact = selection => {\n      if (selection.anchorNode === null || selection.focusNode === null) {\n        return readRange(selection);\n      } else {\n        const anchor = SugarElement.fromDom(selection.anchorNode);\n        const focus = SugarElement.fromDom(selection.focusNode);\n        return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n      }\n    };\n    const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n    const getFirstRect = (win, selection) => {\n      const rng = asLtrRange(win, selection);\n      return getFirstRect$1(rng);\n    };\n    const getBounds$1 = (win, selection) => {\n      const rng = asLtrRange(win, selection);\n      return getBounds$2(rng);\n    };\n\n    const NodeValue = (is, name) => {\n      const get = element => {\n        if (!is(element)) {\n          throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n        }\n        return getOption(element).getOr('');\n      };\n      const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n      const set = (element, value) => {\n        if (!is(element)) {\n          throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n        }\n        element.dom.nodeValue = value;\n      };\n      return {\n        get,\n        getOption,\n        set\n      };\n    };\n\n    const api = NodeValue(isText, 'text');\n    const get$4 = element => api.get(element);\n\n    const point = (element, offset) => ({\n      element,\n      offset\n    });\n    const descendOnce$1 = (element, offset) => {\n      const children$1 = children(element);\n      if (children$1.length === 0) {\n        return point(element, offset);\n      } else if (offset < children$1.length) {\n        return point(children$1[offset], 0);\n      } else {\n        const last = children$1[children$1.length - 1];\n        const len = isText(last) ? get$4(last).length : children(last).length;\n        return point(last, len);\n      }\n    };\n\n    const descendOnce = (element, offset) => isText(element) ? point(element, offset) : descendOnce$1(element, offset);\n    const getAnchorSelection = (win, anchorInfo) => {\n      const getSelection = anchorInfo.getSelection.getOrThunk(() => () => getExact(win));\n      return getSelection().map(sel => {\n        const modStart = descendOnce(sel.start, sel.soffset);\n        const modFinish = descendOnce(sel.finish, sel.foffset);\n        return SimSelection.range(modStart.element, modStart.offset, modFinish.element, modFinish.offset);\n      });\n    };\n    const placement$1 = (component, anchorInfo, origin) => {\n      const win = defaultView(anchorInfo.root).dom;\n      const rootPoint = getRootPoint(component, origin, anchorInfo);\n      const selectionBox = getAnchorSelection(win, anchorInfo).bind(sel => {\n        const optRect = getBounds$1(win, SimSelection.exactFromRange(sel)).orThunk(() => {\n          const x = SugarElement.fromText(zeroWidth);\n          before$1(sel.start, x);\n          const rect = getFirstRect(win, SimSelection.exact(x, 0, x, 1));\n          remove$5(x);\n          return rect;\n        });\n        return optRect.bind(rawRect => getBox(rawRect.left, rawRect.top, rawRect.width, rawRect.height));\n      });\n      const targetElement = getAnchorSelection(win, anchorInfo).bind(sel => isElement$1(sel.start) ? Optional.some(sel.start) : parentElement(sel.start));\n      const elem = targetElement.getOr(component.element);\n      return calcNewAnchor(selectionBox, rootPoint, anchorInfo, origin, elem);\n    };\n    var SelectionAnchor = [\n      option$3('getSelection'),\n      required$1('root'),\n      option$3('bubble'),\n      schema$y(),\n      defaulted('overrides', {}),\n      defaulted('showAbove', false),\n      output$1('placement', placement$1)\n    ];\n\n    const labelPrefix$1 = 'link-layout';\n    const eastX = anchor => anchor.x + anchor.width;\n    const westX = (anchor, element) => anchor.x - element.width;\n    const northY$1 = (anchor, element) => anchor.y - element.height + anchor.height;\n    const southY$1 = anchor => anchor.y;\n    const southeast$1 = (anchor, element, bubbles) => nu$6(eastX(anchor), southY$1(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n      left: 0,\n      top: 2\n    }), labelPrefix$1);\n    const southwest$1 = (anchor, element, bubbles) => nu$6(westX(anchor, element), southY$1(anchor), bubbles.southwest(), southwest$3(), 'southwest', boundsRestriction(anchor, {\n      right: 1,\n      top: 2\n    }), labelPrefix$1);\n    const northeast$1 = (anchor, element, bubbles) => nu$6(eastX(anchor), northY$1(anchor, element), bubbles.northeast(), northeast$3(), 'northeast', boundsRestriction(anchor, {\n      left: 0,\n      bottom: 3\n    }), labelPrefix$1);\n    const northwest$1 = (anchor, element, bubbles) => nu$6(westX(anchor, element), northY$1(anchor, element), bubbles.northwest(), northwest$3(), 'northwest', boundsRestriction(anchor, {\n      right: 1,\n      bottom: 3\n    }), labelPrefix$1);\n    const all = () => [\n      southeast$1,\n      southwest$1,\n      northeast$1,\n      northwest$1\n    ];\n    const allRtl = () => [\n      southwest$1,\n      southeast$1,\n      northwest$1,\n      northeast$1\n    ];\n\n    const placement = (component, submenuInfo, origin) => {\n      const anchorBox = toBox(origin, submenuInfo.item.element);\n      const layouts = get$5(component.element, submenuInfo, all(), allRtl(), all(), allRtl(), Optional.none());\n      return Optional.some(nu$4({\n        anchorBox,\n        bubble: fallback(),\n        overrides: submenuInfo.overrides,\n        layouts,\n        placer: Optional.none()\n      }));\n    };\n    var SubmenuAnchor = [\n      required$1('item'),\n      schema$y(),\n      defaulted('overrides', {}),\n      output$1('placement', placement)\n    ];\n\n    var AnchorSchema = choose$1('type', {\n      selection: SelectionAnchor,\n      node: NodeAnchor,\n      hotspot: HotspotAnchor,\n      submenu: SubmenuAnchor,\n      makeshift: MakeshiftAnchor\n    });\n\n    const TransitionSchema = [\n      requiredArrayOf('classes', string),\n      defaultedStringEnum('mode', 'all', [\n        'all',\n        'layout',\n        'placement'\n      ])\n    ];\n    const PositionSchema = [\n      defaulted('useFixed', never),\n      option$3('getBounds')\n    ];\n    const PlacementSchema = [\n      requiredOf('anchor', AnchorSchema),\n      optionObjOf('transition', TransitionSchema)\n    ];\n\n    const getFixedOrigin = () => {\n      const html = document.documentElement;\n      return fixed$1(0, 0, html.clientWidth, html.clientHeight);\n    };\n    const getRelativeOrigin = component => {\n      const position = absolute$3(component.element);\n      const bounds = component.element.dom.getBoundingClientRect();\n      return relative$1(position.left, position.top, bounds.width, bounds.height);\n    };\n    const place = (component, origin, anchoring, getBounds, placee, lastPlace, transition) => {\n      const anchor = box(anchoring.anchorBox, origin);\n      return simple(anchor, placee.element, anchoring.bubble, anchoring.layouts, lastPlace, getBounds, anchoring.overrides, transition);\n    };\n    const position$1 = (component, posConfig, posState, placee, placementSpec) => {\n      positionWithin(component, posConfig, posState, placee, placementSpec, Optional.none());\n    };\n    const positionWithin = (component, posConfig, posState, placee, placementSpec, boxElement) => {\n      const boundsBox = boxElement.map(box$1);\n      return positionWithinBounds(component, posConfig, posState, placee, placementSpec, boundsBox);\n    };\n    const positionWithinBounds = (component, posConfig, posState, placee, placementSpec, bounds) => {\n      const placeeDetail = asRawOrDie$1('placement.info', objOf(PlacementSchema), placementSpec);\n      const anchorage = placeeDetail.anchor;\n      const element = placee.element;\n      const placeeState = posState.get(placee.uid);\n      preserve$1(() => {\n        set$8(element, 'position', 'fixed');\n        const oldVisibility = getRaw(element, 'visibility');\n        set$8(element, 'visibility', 'hidden');\n        const origin = posConfig.useFixed() ? getFixedOrigin() : getRelativeOrigin(component);\n        const placer = anchorage.placement;\n        const getBounds = bounds.map(constant$1).or(posConfig.getBounds);\n        placer(component, anchorage, origin).each(anchoring => {\n          const doPlace = anchoring.placer.getOr(place);\n          const newState = doPlace(component, origin, anchoring, getBounds, placee, placeeState, placeeDetail.transition);\n          posState.set(placee.uid, newState);\n        });\n        oldVisibility.fold(() => {\n          remove$6(element, 'visibility');\n        }, vis => {\n          set$8(element, 'visibility', vis);\n        });\n        if (getRaw(element, 'left').isNone() && getRaw(element, 'top').isNone() && getRaw(element, 'right').isNone() && getRaw(element, 'bottom').isNone() && is$1(getRaw(element, 'position'), 'fixed')) {\n          remove$6(element, 'position');\n        }\n      }, element);\n    };\n    const getMode = (component, pConfig, _pState) => pConfig.useFixed() ? 'fixed' : 'absolute';\n    const reset$1 = (component, pConfig, posState, placee) => {\n      const element = placee.element;\n      each$1([\n        'position',\n        'left',\n        'right',\n        'top',\n        'bottom'\n      ], prop => remove$6(element, prop));\n      reset$2(element);\n      posState.clear(placee.uid);\n    };\n\n    var PositionApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        position: position$1,\n        positionWithin: positionWithin,\n        positionWithinBounds: positionWithinBounds,\n        getMode: getMode,\n        reset: reset$1\n    });\n\n    const init$g = () => {\n      let state = {};\n      const set = (id, data) => {\n        state[id] = data;\n      };\n      const get = id => get$g(state, id);\n      const clear = id => {\n        if (isNonNullable(id)) {\n          delete state[id];\n        } else {\n          state = {};\n        }\n      };\n      return nu$8({\n        readState: () => state,\n        clear,\n        set,\n        get\n      });\n    };\n\n    var PositioningState = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        init: init$g\n    });\n\n    const Positioning = create$3({\n      fields: PositionSchema,\n      name: 'positioning',\n      active: ActivePosition,\n      apis: PositionApis,\n      state: PositioningState\n    });\n\n    const isConnected = comp => comp.getSystem().isConnected();\n    const fireDetaching = component => {\n      emit(component, detachedFromDom());\n      const children = component.components();\n      each$1(children, fireDetaching);\n    };\n    const fireAttaching = component => {\n      const children = component.components();\n      each$1(children, fireAttaching);\n      emit(component, attachedToDom());\n    };\n    const virtualAttach = (parent, child) => {\n      parent.getSystem().addToWorld(child);\n      if (inBody(parent.element)) {\n        fireAttaching(child);\n      }\n    };\n    const virtualDetach = comp => {\n      fireDetaching(comp);\n      comp.getSystem().removeFromWorld(comp);\n    };\n    const attach$1 = (parent, child) => {\n      append$2(parent.element, child.element);\n    };\n    const detachChildren$1 = component => {\n      each$1(component.components(), childComp => remove$5(childComp.element));\n      empty(component.element);\n      component.syncComponents();\n    };\n    const replaceChildren = (component, newSpecs, buildNewChildren) => {\n      const subs = component.components();\n      detachChildren$1(component);\n      const newChildren = buildNewChildren(newSpecs);\n      const deleted = difference(subs, newChildren);\n      each$1(deleted, comp => {\n        fireDetaching(comp);\n        component.getSystem().removeFromWorld(comp);\n      });\n      each$1(newChildren, childComp => {\n        if (!isConnected(childComp)) {\n          component.getSystem().addToWorld(childComp);\n          attach$1(component, childComp);\n          if (inBody(component.element)) {\n            fireAttaching(childComp);\n          }\n        } else {\n          attach$1(component, childComp);\n        }\n      });\n      component.syncComponents();\n    };\n    const virtualReplaceChildren = (component, newSpecs, buildNewChildren) => {\n      const subs = component.components();\n      const existingComps = bind$3(newSpecs, spec => getPremade(spec).toArray());\n      each$1(subs, childComp => {\n        if (!contains$2(existingComps, childComp)) {\n          virtualDetach(childComp);\n        }\n      });\n      const newChildren = buildNewChildren(newSpecs);\n      const deleted = difference(subs, newChildren);\n      each$1(deleted, deletedComp => {\n        if (isConnected(deletedComp)) {\n          virtualDetach(deletedComp);\n        }\n      });\n      each$1(newChildren, childComp => {\n        if (!isConnected(childComp)) {\n          virtualAttach(component, childComp);\n        }\n      });\n      component.syncComponents();\n    };\n\n    const attach = (parent, child) => {\n      attachWith(parent, child, append$2);\n    };\n    const attachWith = (parent, child, insertion) => {\n      parent.getSystem().addToWorld(child);\n      insertion(parent.element, child.element);\n      if (inBody(parent.element)) {\n        fireAttaching(child);\n      }\n      parent.syncComponents();\n    };\n    const doDetach = component => {\n      fireDetaching(component);\n      remove$5(component.element);\n      component.getSystem().removeFromWorld(component);\n    };\n    const detach = component => {\n      const parent$1 = parent(component.element).bind(p => component.getSystem().getByDom(p).toOptional());\n      doDetach(component);\n      parent$1.each(p => {\n        p.syncComponents();\n      });\n    };\n    const detachChildren = component => {\n      const subs = component.components();\n      each$1(subs, doDetach);\n      empty(component.element);\n      component.syncComponents();\n    };\n    const attachSystem = (element, guiSystem) => {\n      attachSystemWith(element, guiSystem, append$2);\n    };\n    const attachSystemAfter = (element, guiSystem) => {\n      attachSystemWith(element, guiSystem, after$2);\n    };\n    const attachSystemWith = (element, guiSystem, inserter) => {\n      inserter(element, guiSystem.element);\n      const children$1 = children(guiSystem.element);\n      each$1(children$1, child => {\n        guiSystem.getByDom(child).each(fireAttaching);\n      });\n    };\n    const detachSystem = guiSystem => {\n      const children$1 = children(guiSystem.element);\n      each$1(children$1, child => {\n        guiSystem.getByDom(child).each(fireDetaching);\n      });\n      remove$5(guiSystem.element);\n    };\n\n    const rebuild = (sandbox, sConfig, sState, data) => {\n      sState.get().each(_data => {\n        detachChildren(sandbox);\n      });\n      const point = sConfig.getAttachPoint(sandbox);\n      attach(point, sandbox);\n      const built = sandbox.getSystem().build(data);\n      attach(sandbox, built);\n      sState.set(built);\n      return built;\n    };\n    const open$1 = (sandbox, sConfig, sState, data) => {\n      const newState = rebuild(sandbox, sConfig, sState, data);\n      sConfig.onOpen(sandbox, newState);\n      return newState;\n    };\n    const setContent = (sandbox, sConfig, sState, data) => sState.get().map(() => rebuild(sandbox, sConfig, sState, data));\n    const openWhileCloaked = (sandbox, sConfig, sState, data, transaction) => {\n      cloak(sandbox, sConfig);\n      open$1(sandbox, sConfig, sState, data);\n      transaction();\n      decloak(sandbox, sConfig);\n    };\n    const close$1 = (sandbox, sConfig, sState) => {\n      sState.get().each(data => {\n        detachChildren(sandbox);\n        detach(sandbox);\n        sConfig.onClose(sandbox, data);\n        sState.clear();\n      });\n    };\n    const isOpen$1 = (_sandbox, _sConfig, sState) => sState.isOpen();\n    const isPartOf = (sandbox, sConfig, sState, queryElem) => isOpen$1(sandbox, sConfig, sState) && sState.get().exists(data => sConfig.isPartOf(sandbox, data, queryElem));\n    const getState$2 = (_sandbox, _sConfig, sState) => sState.get();\n    const store = (sandbox, cssKey, attr, newValue) => {\n      getRaw(sandbox.element, cssKey).fold(() => {\n        remove$7(sandbox.element, attr);\n      }, v => {\n        set$9(sandbox.element, attr, v);\n      });\n      set$8(sandbox.element, cssKey, newValue);\n    };\n    const restore = (sandbox, cssKey, attr) => {\n      getOpt(sandbox.element, attr).fold(() => remove$6(sandbox.element, cssKey), oldValue => set$8(sandbox.element, cssKey, oldValue));\n    };\n    const cloak = (sandbox, sConfig, _sState) => {\n      const sink = sConfig.getAttachPoint(sandbox);\n      set$8(sandbox.element, 'position', Positioning.getMode(sink));\n      store(sandbox, 'visibility', sConfig.cloakVisibilityAttr, 'hidden');\n    };\n    const hasPosition = element => exists([\n      'top',\n      'left',\n      'right',\n      'bottom'\n    ], pos => getRaw(element, pos).isSome());\n    const decloak = (sandbox, sConfig, _sState) => {\n      if (!hasPosition(sandbox.element)) {\n        remove$6(sandbox.element, 'position');\n      }\n      restore(sandbox, 'visibility', sConfig.cloakVisibilityAttr);\n    };\n\n    var SandboxApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        cloak: cloak,\n        decloak: decloak,\n        open: open$1,\n        openWhileCloaked: openWhileCloaked,\n        close: close$1,\n        isOpen: isOpen$1,\n        isPartOf: isPartOf,\n        getState: getState$2,\n        setContent: setContent\n    });\n\n    const events$g = (sandboxConfig, sandboxState) => derive$2([run$1(sandboxClose(), (sandbox, _simulatedEvent) => {\n        close$1(sandbox, sandboxConfig, sandboxState);\n      })]);\n\n    var ActiveSandbox = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        events: events$g\n    });\n\n    var SandboxSchema = [\n      onHandler('onOpen'),\n      onHandler('onClose'),\n      required$1('isPartOf'),\n      required$1('getAttachPoint'),\n      defaulted('cloakVisibilityAttr', 'data-precloak-visibility')\n    ];\n\n    const init$f = () => {\n      const contents = value$2();\n      const readState = constant$1('not-implemented');\n      return nu$8({\n        readState,\n        isOpen: contents.isSet,\n        clear: contents.clear,\n        set: contents.set,\n        get: contents.get\n      });\n    };\n\n    var SandboxState = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        init: init$f\n    });\n\n    const Sandboxing = create$3({\n      fields: SandboxSchema,\n      name: 'sandboxing',\n      active: ActiveSandbox,\n      apis: SandboxApis,\n      state: SandboxState\n    });\n\n    const dismissPopups = constant$1('dismiss.popups');\n    const repositionPopups = constant$1('reposition.popups');\n    const mouseReleased = constant$1('mouse.released');\n\n    const schema$x = objOfOnly([\n      defaulted('isExtraPart', never),\n      optionObjOf('fireEventInstead', [defaulted('event', dismissRequested())])\n    ]);\n    const receivingChannel$1 = rawSpec => {\n      const detail = asRawOrDie$1('Dismissal', schema$x, rawSpec);\n      return {\n        [dismissPopups()]: {\n          schema: objOfOnly([required$1('target')]),\n          onReceive: (sandbox, data) => {\n            if (Sandboxing.isOpen(sandbox)) {\n              const isPart = Sandboxing.isPartOf(sandbox, data.target) || detail.isExtraPart(sandbox, data.target);\n              if (!isPart) {\n                detail.fireEventInstead.fold(() => Sandboxing.close(sandbox), fe => emit(sandbox, fe.event));\n              }\n            }\n          }\n        }\n      };\n    };\n\n    const schema$w = objOfOnly([\n      optionObjOf('fireEventInstead', [defaulted('event', repositionRequested())]),\n      requiredFunction('doReposition')\n    ]);\n    const receivingChannel = rawSpec => {\n      const detail = asRawOrDie$1('Reposition', schema$w, rawSpec);\n      return {\n        [repositionPopups()]: {\n          onReceive: sandbox => {\n            if (Sandboxing.isOpen(sandbox)) {\n              detail.fireEventInstead.fold(() => detail.doReposition(sandbox), fe => emit(sandbox, fe.event));\n            }\n          }\n        }\n      };\n    };\n\n    const onLoad$5 = (component, repConfig, repState) => {\n      repConfig.store.manager.onLoad(component, repConfig, repState);\n    };\n    const onUnload$2 = (component, repConfig, repState) => {\n      repConfig.store.manager.onUnload(component, repConfig, repState);\n    };\n    const setValue$3 = (component, repConfig, repState, data) => {\n      repConfig.store.manager.setValue(component, repConfig, repState, data);\n    };\n    const getValue$3 = (component, repConfig, repState) => repConfig.store.manager.getValue(component, repConfig, repState);\n    const getState$1 = (component, repConfig, repState) => repState;\n\n    var RepresentApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        onLoad: onLoad$5,\n        onUnload: onUnload$2,\n        setValue: setValue$3,\n        getValue: getValue$3,\n        getState: getState$1\n    });\n\n    const events$f = (repConfig, repState) => {\n      const es = repConfig.resetOnDom ? [\n        runOnAttached((comp, _se) => {\n          onLoad$5(comp, repConfig, repState);\n        }),\n        runOnDetached((comp, _se) => {\n          onUnload$2(comp, repConfig, repState);\n        })\n      ] : [loadEvent(repConfig, repState, onLoad$5)];\n      return derive$2(es);\n    };\n\n    var ActiveRepresenting = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        events: events$f\n    });\n\n    const memory$1 = () => {\n      const data = Cell(null);\n      const readState = () => ({\n        mode: 'memory',\n        value: data.get()\n      });\n      const isNotSet = () => data.get() === null;\n      const clear = () => {\n        data.set(null);\n      };\n      return nu$8({\n        set: data.set,\n        get: data.get,\n        isNotSet,\n        clear,\n        readState\n      });\n    };\n    const manual = () => {\n      const readState = noop;\n      return nu$8({ readState });\n    };\n    const dataset = () => {\n      const dataByValue = Cell({});\n      const dataByText = Cell({});\n      const readState = () => ({\n        mode: 'dataset',\n        dataByValue: dataByValue.get(),\n        dataByText: dataByText.get()\n      });\n      const clear = () => {\n        dataByValue.set({});\n        dataByText.set({});\n      };\n      const lookup = itemString => get$g(dataByValue.get(), itemString).orThunk(() => get$g(dataByText.get(), itemString));\n      const update = items => {\n        const currentDataByValue = dataByValue.get();\n        const currentDataByText = dataByText.get();\n        const newDataByValue = {};\n        const newDataByText = {};\n        each$1(items, item => {\n          newDataByValue[item.value] = item;\n          get$g(item, 'meta').each(meta => {\n            get$g(meta, 'text').each(text => {\n              newDataByText[text] = item;\n            });\n          });\n        });\n        dataByValue.set({\n          ...currentDataByValue,\n          ...newDataByValue\n        });\n        dataByText.set({\n          ...currentDataByText,\n          ...newDataByText\n        });\n      };\n      return nu$8({\n        readState,\n        lookup,\n        update,\n        clear\n      });\n    };\n    const init$e = spec => spec.store.manager.state(spec);\n\n    var RepresentState = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        memory: memory$1,\n        dataset: dataset,\n        manual: manual,\n        init: init$e\n    });\n\n    const setValue$2 = (component, repConfig, repState, data) => {\n      const store = repConfig.store;\n      repState.update([data]);\n      store.setValue(component, data);\n      repConfig.onSetValue(component, data);\n    };\n    const getValue$2 = (component, repConfig, repState) => {\n      const store = repConfig.store;\n      const key = store.getDataKey(component);\n      return repState.lookup(key).getOrThunk(() => store.getFallbackEntry(key));\n    };\n    const onLoad$4 = (component, repConfig, repState) => {\n      const store = repConfig.store;\n      store.initialValue.each(data => {\n        setValue$2(component, repConfig, repState, data);\n      });\n    };\n    const onUnload$1 = (component, repConfig, repState) => {\n      repState.clear();\n    };\n    var DatasetStore = [\n      option$3('initialValue'),\n      required$1('getFallbackEntry'),\n      required$1('getDataKey'),\n      required$1('setValue'),\n      output$1('manager', {\n        setValue: setValue$2,\n        getValue: getValue$2,\n        onLoad: onLoad$4,\n        onUnload: onUnload$1,\n        state: dataset\n      })\n    ];\n\n    const getValue$1 = (component, repConfig, _repState) => repConfig.store.getValue(component);\n    const setValue$1 = (component, repConfig, _repState, data) => {\n      repConfig.store.setValue(component, data);\n      repConfig.onSetValue(component, data);\n    };\n    const onLoad$3 = (component, repConfig, _repState) => {\n      repConfig.store.initialValue.each(data => {\n        repConfig.store.setValue(component, data);\n      });\n    };\n    var ManualStore = [\n      required$1('getValue'),\n      defaulted('setValue', noop),\n      option$3('initialValue'),\n      output$1('manager', {\n        setValue: setValue$1,\n        getValue: getValue$1,\n        onLoad: onLoad$3,\n        onUnload: noop,\n        state: NoState.init\n      })\n    ];\n\n    const setValue = (component, repConfig, repState, data) => {\n      repState.set(data);\n      repConfig.onSetValue(component, data);\n    };\n    const getValue = (component, repConfig, repState) => repState.get();\n    const onLoad$2 = (component, repConfig, repState) => {\n      repConfig.store.initialValue.each(initVal => {\n        if (repState.isNotSet()) {\n          repState.set(initVal);\n        }\n      });\n    };\n    const onUnload = (component, repConfig, repState) => {\n      repState.clear();\n    };\n    var MemoryStore = [\n      option$3('initialValue'),\n      output$1('manager', {\n        setValue,\n        getValue,\n        onLoad: onLoad$2,\n        onUnload,\n        state: memory$1\n      })\n    ];\n\n    var RepresentSchema = [\n      defaultedOf('store', { mode: 'memory' }, choose$1('mode', {\n        memory: MemoryStore,\n        manual: ManualStore,\n        dataset: DatasetStore\n      })),\n      onHandler('onSetValue'),\n      defaulted('resetOnDom', false)\n    ];\n\n    const Representing = create$3({\n      fields: RepresentSchema,\n      name: 'representing',\n      active: ActiveRepresenting,\n      apis: RepresentApis,\n      extra: {\n        setValueFrom: (component, source) => {\n          const value = Representing.getValue(source);\n          Representing.setValue(component, value);\n        }\n      },\n      state: RepresentState\n    });\n\n    const field = (name, forbidden) => defaultedObjOf(name, {}, map$2(forbidden, f => forbid(f.name(), 'Cannot configure ' + f.name() + ' for ' + name)).concat([customField('dump', identity)]));\n    const get$3 = data => data.dump;\n    const augment = (data, original) => ({\n      ...derive$1(original),\n      ...data.dump\n    });\n    const SketchBehaviours = {\n      field,\n      augment,\n      get: get$3\n    };\n\n    const _placeholder = 'placeholder';\n    const adt$3 = Adt.generate([\n      {\n        single: [\n          'required',\n          'valueThunk'\n        ]\n      },\n      {\n        multiple: [\n          'required',\n          'valueThunks'\n        ]\n      }\n    ]);\n    const isSubstituted = spec => has$2(spec, 'uiType');\n    const subPlaceholder = (owner, detail, compSpec, placeholders) => {\n      if (owner.exists(o => o !== compSpec.owner)) {\n        return adt$3.single(true, constant$1(compSpec));\n      }\n      return get$g(placeholders, compSpec.name).fold(() => {\n        throw new Error('Unknown placeholder component: ' + compSpec.name + '\\nKnown: [' + keys(placeholders) + ']\\nNamespace: ' + owner.getOr('none') + '\\nSpec: ' + JSON.stringify(compSpec, null, 2));\n      }, newSpec => newSpec.replace());\n    };\n    const scan = (owner, detail, compSpec, placeholders) => {\n      if (isSubstituted(compSpec) && compSpec.uiType === _placeholder) {\n        return subPlaceholder(owner, detail, compSpec, placeholders);\n      } else {\n        return adt$3.single(false, constant$1(compSpec));\n      }\n    };\n    const substitute = (owner, detail, compSpec, placeholders) => {\n      const base = scan(owner, detail, compSpec, placeholders);\n      return base.fold((req, valueThunk) => {\n        const value = isSubstituted(compSpec) ? valueThunk(detail, compSpec.config, compSpec.validated) : valueThunk(detail);\n        const childSpecs = get$g(value, 'components').getOr([]);\n        const substituted = bind$3(childSpecs, c => substitute(owner, detail, c, placeholders));\n        return [{\n            ...value,\n            components: substituted\n          }];\n      }, (req, valuesThunk) => {\n        if (isSubstituted(compSpec)) {\n          const values = valuesThunk(detail, compSpec.config, compSpec.validated);\n          const preprocessor = compSpec.validated.preprocess.getOr(identity);\n          return preprocessor(values);\n        } else {\n          return valuesThunk(detail);\n        }\n      });\n    };\n    const substituteAll = (owner, detail, components, placeholders) => bind$3(components, c => substitute(owner, detail, c, placeholders));\n    const oneReplace = (label, replacements) => {\n      let called = false;\n      const used = () => called;\n      const replace = () => {\n        if (called) {\n          throw new Error('Trying to use the same placeholder more than once: ' + label);\n        }\n        called = true;\n        return replacements;\n      };\n      const required = () => replacements.fold((req, _) => req, (req, _) => req);\n      return {\n        name: constant$1(label),\n        required,\n        used,\n        replace\n      };\n    };\n    const substitutePlaces = (owner, detail, components, placeholders) => {\n      const ps = map$1(placeholders, (ph, name) => oneReplace(name, ph));\n      const outcome = substituteAll(owner, detail, components, ps);\n      each(ps, p => {\n        if (p.used() === false && p.required()) {\n          throw new Error('Placeholder: ' + p.name() + ' was not found in components list\\nNamespace: ' + owner.getOr('none') + '\\nComponents: ' + JSON.stringify(detail.components, null, 2));\n        }\n      });\n      return outcome;\n    };\n    const single$2 = adt$3.single;\n    const multiple = adt$3.multiple;\n    const placeholder = constant$1(_placeholder);\n\n    const adt$2 = Adt.generate([\n      { required: ['data'] },\n      { external: ['data'] },\n      { optional: ['data'] },\n      { group: ['data'] }\n    ]);\n    const fFactory = defaulted('factory', { sketch: identity });\n    const fSchema = defaulted('schema', []);\n    const fName = required$1('name');\n    const fPname = field$1('pname', 'pname', defaultedThunk(typeSpec => '<alloy.' + generate$6(typeSpec.name) + '>'), anyValue());\n    const fGroupSchema = customField('schema', () => [option$3('preprocess')]);\n    const fDefaults = defaulted('defaults', constant$1({}));\n    const fOverrides = defaulted('overrides', constant$1({}));\n    const requiredSpec = objOf([\n      fFactory,\n      fSchema,\n      fName,\n      fPname,\n      fDefaults,\n      fOverrides\n    ]);\n    const externalSpec = objOf([\n      fFactory,\n      fSchema,\n      fName,\n      fDefaults,\n      fOverrides\n    ]);\n    const optionalSpec = objOf([\n      fFactory,\n      fSchema,\n      fName,\n      fPname,\n      fDefaults,\n      fOverrides\n    ]);\n    const groupSpec = objOf([\n      fFactory,\n      fGroupSchema,\n      fName,\n      required$1('unit'),\n      fPname,\n      fDefaults,\n      fOverrides\n    ]);\n    const asNamedPart = part => {\n      return part.fold(Optional.some, Optional.none, Optional.some, Optional.some);\n    };\n    const name$2 = part => {\n      const get = data => data.name;\n      return part.fold(get, get, get, get);\n    };\n    const asCommon = part => {\n      return part.fold(identity, identity, identity, identity);\n    };\n    const convert = (adtConstructor, partSchema) => spec => {\n      const data = asRawOrDie$1('Converting part type', partSchema, spec);\n      return adtConstructor(data);\n    };\n    const required = convert(adt$2.required, requiredSpec);\n    const external = convert(adt$2.external, externalSpec);\n    const optional = convert(adt$2.optional, optionalSpec);\n    const group = convert(adt$2.group, groupSpec);\n    const original = constant$1('entirety');\n\n    var PartType = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        required: required,\n        external: external,\n        optional: optional,\n        group: group,\n        asNamedPart: asNamedPart,\n        name: name$2,\n        asCommon: asCommon,\n        original: original\n    });\n\n    const combine = (detail, data, partSpec, partValidated) => deepMerge(data.defaults(detail, partSpec, partValidated), partSpec, { uid: detail.partUids[data.name] }, data.overrides(detail, partSpec, partValidated));\n    const subs = (owner, detail, parts) => {\n      const internals = {};\n      const externals = {};\n      each$1(parts, part => {\n        part.fold(data => {\n          internals[data.pname] = single$2(true, (detail, partSpec, partValidated) => data.factory.sketch(combine(detail, data, partSpec, partValidated)));\n        }, data => {\n          const partSpec = detail.parts[data.name];\n          externals[data.name] = constant$1(data.factory.sketch(combine(detail, data, partSpec[original()]), partSpec));\n        }, data => {\n          internals[data.pname] = single$2(false, (detail, partSpec, partValidated) => data.factory.sketch(combine(detail, data, partSpec, partValidated)));\n        }, data => {\n          internals[data.pname] = multiple(true, (detail, _partSpec, _partValidated) => {\n            const units = detail[data.name];\n            return map$2(units, u => data.factory.sketch(deepMerge(data.defaults(detail, u, _partValidated), u, data.overrides(detail, u))));\n          });\n        });\n      });\n      return {\n        internals: constant$1(internals),\n        externals: constant$1(externals)\n      };\n    };\n\n    const generate$3 = (owner, parts) => {\n      const r = {};\n      each$1(parts, part => {\n        asNamedPart(part).each(np => {\n          const g = doGenerateOne(owner, np.pname);\n          r[np.name] = config => {\n            const validated = asRawOrDie$1('Part: ' + np.name + ' in ' + owner, objOf(np.schema), config);\n            return {\n              ...g,\n              config,\n              validated\n            };\n          };\n        });\n      });\n      return r;\n    };\n    const doGenerateOne = (owner, pname) => ({\n      uiType: placeholder(),\n      owner,\n      name: pname\n    });\n    const generateOne$1 = (owner, pname, config) => ({\n      uiType: placeholder(),\n      owner,\n      name: pname,\n      config,\n      validated: {}\n    });\n    const schemas = parts => bind$3(parts, part => part.fold(Optional.none, Optional.some, Optional.none, Optional.none).map(data => requiredObjOf(data.name, data.schema.concat([snapshot(original())]))).toArray());\n    const names = parts => map$2(parts, name$2);\n    const substitutes = (owner, detail, parts) => subs(owner, detail, parts);\n    const components$1 = (owner, detail, internals) => substitutePlaces(Optional.some(owner), detail, detail.components, internals);\n    const getPart = (component, detail, partKey) => {\n      const uid = detail.partUids[partKey];\n      return component.getSystem().getByUid(uid).toOptional();\n    };\n    const getPartOrDie = (component, detail, partKey) => getPart(component, detail, partKey).getOrDie('Could not find part: ' + partKey);\n    const getParts = (component, detail, partKeys) => {\n      const r = {};\n      const uids = detail.partUids;\n      const system = component.getSystem();\n      each$1(partKeys, pk => {\n        r[pk] = constant$1(system.getByUid(uids[pk]));\n      });\n      return r;\n    };\n    const getAllParts = (component, detail) => {\n      const system = component.getSystem();\n      return map$1(detail.partUids, (pUid, _k) => constant$1(system.getByUid(pUid)));\n    };\n    const getAllPartNames = detail => keys(detail.partUids);\n    const getPartsOrDie = (component, detail, partKeys) => {\n      const r = {};\n      const uids = detail.partUids;\n      const system = component.getSystem();\n      each$1(partKeys, pk => {\n        r[pk] = constant$1(system.getByUid(uids[pk]).getOrDie());\n      });\n      return r;\n    };\n    const defaultUids = (baseUid, partTypes) => {\n      const partNames = names(partTypes);\n      return wrapAll(map$2(partNames, pn => ({\n        key: pn,\n        value: baseUid + '-' + pn\n      })));\n    };\n    const defaultUidsSchema = partTypes => field$1('partUids', 'partUids', mergeWithThunk(spec => defaultUids(spec.uid, partTypes)), anyValue());\n\n    var AlloyParts = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        generate: generate$3,\n        generateOne: generateOne$1,\n        schemas: schemas,\n        names: names,\n        substitutes: substitutes,\n        components: components$1,\n        defaultUids: defaultUids,\n        defaultUidsSchema: defaultUidsSchema,\n        getAllParts: getAllParts,\n        getAllPartNames: getAllPartNames,\n        getPart: getPart,\n        getPartOrDie: getPartOrDie,\n        getParts: getParts,\n        getPartsOrDie: getPartsOrDie\n    });\n\n    const base = (partSchemas, partUidsSchemas) => {\n      const ps = partSchemas.length > 0 ? [requiredObjOf('parts', partSchemas)] : [];\n      return ps.concat([\n        required$1('uid'),\n        defaulted('dom', {}),\n        defaulted('components', []),\n        snapshot('originalSpec'),\n        defaulted('debug.sketcher', {})\n      ]).concat(partUidsSchemas);\n    };\n    const asRawOrDie = (label, schema, spec, partSchemas, partUidsSchemas) => {\n      const baseS = base(partSchemas, partUidsSchemas);\n      return asRawOrDie$1(label + ' [SpecSchema]', objOfOnly(baseS.concat(schema)), spec);\n    };\n\n    const single$1 = (owner, schema, factory, spec) => {\n      const specWithUid = supplyUid(spec);\n      const detail = asRawOrDie(owner, schema, specWithUid, [], []);\n      return factory(detail, specWithUid);\n    };\n    const composite$1 = (owner, schema, partTypes, factory, spec) => {\n      const specWithUid = supplyUid(spec);\n      const partSchemas = schemas(partTypes);\n      const partUidsSchema = defaultUidsSchema(partTypes);\n      const detail = asRawOrDie(owner, schema, specWithUid, partSchemas, [partUidsSchema]);\n      const subs = substitutes(owner, detail, partTypes);\n      const components = components$1(owner, detail, subs.internals());\n      return factory(detail, components, specWithUid, subs.externals());\n    };\n    const hasUid = spec => has$2(spec, 'uid');\n    const supplyUid = spec => {\n      return hasUid(spec) ? spec : {\n        ...spec,\n        uid: generate$5('uid')\n      };\n    };\n\n    const isSketchSpec = spec => {\n      return spec.uid !== undefined;\n    };\n    const singleSchema = objOfOnly([\n      required$1('name'),\n      required$1('factory'),\n      required$1('configFields'),\n      defaulted('apis', {}),\n      defaulted('extraApis', {})\n    ]);\n    const compositeSchema = objOfOnly([\n      required$1('name'),\n      required$1('factory'),\n      required$1('configFields'),\n      required$1('partFields'),\n      defaulted('apis', {}),\n      defaulted('extraApis', {})\n    ]);\n    const single = rawConfig => {\n      const config = asRawOrDie$1('Sketcher for ' + rawConfig.name, singleSchema, rawConfig);\n      const sketch = spec => single$1(config.name, config.configFields, config.factory, spec);\n      const apis = map$1(config.apis, makeApi);\n      const extraApis = map$1(config.extraApis, (f, k) => markAsExtraApi(f, k));\n      return {\n        name: config.name,\n        configFields: config.configFields,\n        sketch,\n        ...apis,\n        ...extraApis\n      };\n    };\n    const composite = rawConfig => {\n      const config = asRawOrDie$1('Sketcher for ' + rawConfig.name, compositeSchema, rawConfig);\n      const sketch = spec => composite$1(config.name, config.configFields, config.partFields, config.factory, spec);\n      const parts = generate$3(config.name, config.partFields);\n      const apis = map$1(config.apis, makeApi);\n      const extraApis = map$1(config.extraApis, (f, k) => markAsExtraApi(f, k));\n      return {\n        name: config.name,\n        partFields: config.partFields,\n        configFields: config.configFields,\n        sketch,\n        parts,\n        ...apis,\n        ...extraApis\n      };\n    };\n\n    const inside = target => isTag('input')(target) && get$f(target, 'type') !== 'radio' || isTag('textarea')(target);\n\n    const getCurrent = (component, composeConfig, _composeState) => composeConfig.find(component);\n\n    var ComposeApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        getCurrent: getCurrent\n    });\n\n    const ComposeSchema = [required$1('find')];\n\n    const Composing = create$3({\n      fields: ComposeSchema,\n      name: 'composing',\n      apis: ComposeApis\n    });\n\n    const nativeDisabled = [\n      'input',\n      'button',\n      'textarea',\n      'select'\n    ];\n    const onLoad$1 = (component, disableConfig, disableState) => {\n      const f = disableConfig.disabled() ? disable : enable;\n      f(component, disableConfig);\n    };\n    const hasNative = (component, config) => config.useNative === true && contains$2(nativeDisabled, name$3(component.element));\n    const nativeIsDisabled = component => has$1(component.element, 'disabled');\n    const nativeDisable = component => {\n      set$9(component.element, 'disabled', 'disabled');\n    };\n    const nativeEnable = component => {\n      remove$7(component.element, 'disabled');\n    };\n    const ariaIsDisabled = component => get$f(component.element, 'aria-disabled') === 'true';\n    const ariaDisable = component => {\n      set$9(component.element, 'aria-disabled', 'true');\n    };\n    const ariaEnable = component => {\n      set$9(component.element, 'aria-disabled', 'false');\n    };\n    const disable = (component, disableConfig, _disableState) => {\n      disableConfig.disableClass.each(disableClass => {\n        add$2(component.element, disableClass);\n      });\n      const f = hasNative(component, disableConfig) ? nativeDisable : ariaDisable;\n      f(component);\n      disableConfig.onDisabled(component);\n    };\n    const enable = (component, disableConfig, _disableState) => {\n      disableConfig.disableClass.each(disableClass => {\n        remove$2(component.element, disableClass);\n      });\n      const f = hasNative(component, disableConfig) ? nativeEnable : ariaEnable;\n      f(component);\n      disableConfig.onEnabled(component);\n    };\n    const isDisabled = (component, disableConfig) => hasNative(component, disableConfig) ? nativeIsDisabled(component) : ariaIsDisabled(component);\n    const set$4 = (component, disableConfig, disableState, disabled) => {\n      const f = disabled ? disable : enable;\n      f(component, disableConfig);\n    };\n\n    var DisableApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        enable: enable,\n        disable: disable,\n        isDisabled: isDisabled,\n        onLoad: onLoad$1,\n        set: set$4\n    });\n\n    const exhibit$5 = (base, disableConfig) => nu$7({ classes: disableConfig.disabled() ? disableConfig.disableClass.toArray() : [] });\n    const events$e = (disableConfig, disableState) => derive$2([\n      abort(execute$5(), (component, _simulatedEvent) => isDisabled(component, disableConfig)),\n      loadEvent(disableConfig, disableState, onLoad$1)\n    ]);\n\n    var ActiveDisable = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        exhibit: exhibit$5,\n        events: events$e\n    });\n\n    var DisableSchema = [\n      defaultedFunction('disabled', never),\n      defaulted('useNative', true),\n      option$3('disableClass'),\n      onHandler('onDisabled'),\n      onHandler('onEnabled')\n    ];\n\n    const Disabling = create$3({\n      fields: DisableSchema,\n      name: 'disabling',\n      active: ActiveDisable,\n      apis: DisableApis\n    });\n\n    const dehighlightAllExcept = (component, hConfig, hState, skip) => {\n      const highlighted = descendants(component.element, '.' + hConfig.highlightClass);\n      each$1(highlighted, h => {\n        const shouldSkip = exists(skip, skipComp => eq(skipComp.element, h));\n        if (!shouldSkip) {\n          remove$2(h, hConfig.highlightClass);\n          component.getSystem().getByDom(h).each(target => {\n            hConfig.onDehighlight(component, target);\n            emit(target, dehighlight$1());\n          });\n        }\n      });\n    };\n    const dehighlightAll = (component, hConfig, hState) => dehighlightAllExcept(component, hConfig, hState, []);\n    const dehighlight = (component, hConfig, hState, target) => {\n      if (isHighlighted(component, hConfig, hState, target)) {\n        remove$2(target.element, hConfig.highlightClass);\n        hConfig.onDehighlight(component, target);\n        emit(target, dehighlight$1());\n      }\n    };\n    const highlight = (component, hConfig, hState, target) => {\n      dehighlightAllExcept(component, hConfig, hState, [target]);\n      if (!isHighlighted(component, hConfig, hState, target)) {\n        add$2(target.element, hConfig.highlightClass);\n        hConfig.onHighlight(component, target);\n        emit(target, highlight$1());\n      }\n    };\n    const highlightFirst = (component, hConfig, hState) => {\n      getFirst(component, hConfig).each(firstComp => {\n        highlight(component, hConfig, hState, firstComp);\n      });\n    };\n    const highlightLast = (component, hConfig, hState) => {\n      getLast(component, hConfig).each(lastComp => {\n        highlight(component, hConfig, hState, lastComp);\n      });\n    };\n    const highlightAt = (component, hConfig, hState, index) => {\n      getByIndex(component, hConfig, hState, index).fold(err => {\n        throw err;\n      }, firstComp => {\n        highlight(component, hConfig, hState, firstComp);\n      });\n    };\n    const highlightBy = (component, hConfig, hState, predicate) => {\n      const candidates = getCandidates(component, hConfig);\n      const targetComp = find$5(candidates, predicate);\n      targetComp.each(c => {\n        highlight(component, hConfig, hState, c);\n      });\n    };\n    const isHighlighted = (component, hConfig, hState, queryTarget) => has(queryTarget.element, hConfig.highlightClass);\n    const getHighlighted = (component, hConfig, _hState) => descendant(component.element, '.' + hConfig.highlightClass).bind(e => component.getSystem().getByDom(e).toOptional());\n    const getByIndex = (component, hConfig, hState, index) => {\n      const items = descendants(component.element, '.' + hConfig.itemClass);\n      return Optional.from(items[index]).fold(() => Result.error(new Error('No element found with index ' + index)), component.getSystem().getByDom);\n    };\n    const getFirst = (component, hConfig, _hState) => descendant(component.element, '.' + hConfig.itemClass).bind(e => component.getSystem().getByDom(e).toOptional());\n    const getLast = (component, hConfig, _hState) => {\n      const items = descendants(component.element, '.' + hConfig.itemClass);\n      const last = items.length > 0 ? Optional.some(items[items.length - 1]) : Optional.none();\n      return last.bind(c => component.getSystem().getByDom(c).toOptional());\n    };\n    const getDelta$2 = (component, hConfig, hState, delta) => {\n      const items = descendants(component.element, '.' + hConfig.itemClass);\n      const current = findIndex$1(items, item => has(item, hConfig.highlightClass));\n      return current.bind(selected => {\n        const dest = cycleBy(selected, delta, 0, items.length - 1);\n        return component.getSystem().getByDom(items[dest]).toOptional();\n      });\n    };\n    const getPrevious = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, -1);\n    const getNext = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, +1);\n    const getCandidates = (component, hConfig, _hState) => {\n      const items = descendants(component.element, '.' + hConfig.itemClass);\n      return cat(map$2(items, i => component.getSystem().getByDom(i).toOptional()));\n    };\n\n    var HighlightApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        dehighlightAll: dehighlightAll,\n        dehighlight: dehighlight,\n        highlight: highlight,\n        highlightFirst: highlightFirst,\n        highlightLast: highlightLast,\n        highlightAt: highlightAt,\n        highlightBy: highlightBy,\n        isHighlighted: isHighlighted,\n        getHighlighted: getHighlighted,\n        getFirst: getFirst,\n        getLast: getLast,\n        getPrevious: getPrevious,\n        getNext: getNext,\n        getCandidates: getCandidates\n    });\n\n    var HighlightSchema = [\n      required$1('highlightClass'),\n      required$1('itemClass'),\n      onHandler('onHighlight'),\n      onHandler('onDehighlight')\n    ];\n\n    const Highlighting = create$3({\n      fields: HighlightSchema,\n      name: 'highlighting',\n      apis: HighlightApis\n    });\n\n    const BACKSPACE = [8];\n    const TAB = [9];\n    const ENTER = [13];\n    const ESCAPE = [27];\n    const SPACE = [32];\n    const LEFT = [37];\n    const UP = [38];\n    const RIGHT = [39];\n    const DOWN = [40];\n\n    const cyclePrev = (values, index, predicate) => {\n      const before = reverse(values.slice(0, index));\n      const after = reverse(values.slice(index + 1));\n      return find$5(before.concat(after), predicate);\n    };\n    const tryPrev = (values, index, predicate) => {\n      const before = reverse(values.slice(0, index));\n      return find$5(before, predicate);\n    };\n    const cycleNext = (values, index, predicate) => {\n      const before = values.slice(0, index);\n      const after = values.slice(index + 1);\n      return find$5(after.concat(before), predicate);\n    };\n    const tryNext = (values, index, predicate) => {\n      const after = values.slice(index + 1);\n      return find$5(after, predicate);\n    };\n\n    const inSet = keys => event => {\n      const raw = event.raw;\n      return contains$2(keys, raw.which);\n    };\n    const and = preds => event => forall(preds, pred => pred(event));\n    const isShift = event => {\n      const raw = event.raw;\n      return raw.shiftKey === true;\n    };\n    const isControl = event => {\n      const raw = event.raw;\n      return raw.ctrlKey === true;\n    };\n    const isNotShift = not(isShift);\n\n    const rule = (matches, action) => ({\n      matches,\n      classification: action\n    });\n    const choose = (transitions, event) => {\n      const transition = find$5(transitions, t => t.matches(event));\n      return transition.map(t => t.classification);\n    };\n\n    const reportFocusShifting = (component, prevFocus, newFocus) => {\n      const noChange = prevFocus.exists(p => newFocus.exists(n => eq(n, p)));\n      if (!noChange) {\n        emitWith(component, focusShifted(), {\n          prevFocus,\n          newFocus\n        });\n      }\n    };\n    const dom$2 = () => {\n      const get = component => search(component.element);\n      const set = (component, focusee) => {\n        const prevFocus = get(component);\n        component.getSystem().triggerFocus(focusee, component.element);\n        const newFocus = get(component);\n        reportFocusShifting(component, prevFocus, newFocus);\n      };\n      return {\n        get,\n        set\n      };\n    };\n    const highlights = () => {\n      const get = component => Highlighting.getHighlighted(component).map(item => item.element);\n      const set = (component, element) => {\n        const prevFocus = get(component);\n        component.getSystem().getByDom(element).fold(noop, item => {\n          Highlighting.highlight(component, item);\n        });\n        const newFocus = get(component);\n        reportFocusShifting(component, prevFocus, newFocus);\n      };\n      return {\n        get,\n        set\n      };\n    };\n\n    var FocusInsideModes;\n    (function (FocusInsideModes) {\n      FocusInsideModes['OnFocusMode'] = 'onFocus';\n      FocusInsideModes['OnEnterOrSpaceMode'] = 'onEnterOrSpace';\n      FocusInsideModes['OnApiMode'] = 'onApi';\n    }(FocusInsideModes || (FocusInsideModes = {})));\n\n    const typical = (infoSchema, stateInit, getKeydownRules, getKeyupRules, optFocusIn) => {\n      const schema = () => infoSchema.concat([\n        defaulted('focusManager', dom$2()),\n        defaultedOf('focusInside', 'onFocus', valueOf(val => contains$2([\n          'onFocus',\n          'onEnterOrSpace',\n          'onApi'\n        ], val) ? Result.value(val) : Result.error('Invalid value for focusInside'))),\n        output$1('handler', me),\n        output$1('state', stateInit),\n        output$1('sendFocusIn', optFocusIn)\n      ]);\n      const processKey = (component, simulatedEvent, getRules, keyingConfig, keyingState) => {\n        const rules = getRules(component, simulatedEvent, keyingConfig, keyingState);\n        return choose(rules, simulatedEvent.event).bind(rule => rule(component, simulatedEvent, keyingConfig, keyingState));\n      };\n      const toEvents = (keyingConfig, keyingState) => {\n        const onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode ? Optional.none() : optFocusIn(keyingConfig).map(focusIn => run$1(focus$4(), (component, simulatedEvent) => {\n          focusIn(component, keyingConfig, keyingState);\n          simulatedEvent.stop();\n        }));\n        const tryGoInsideComponent = (component, simulatedEvent) => {\n          const isEnterOrSpace = inSet(SPACE.concat(ENTER))(simulatedEvent.event);\n          if (keyingConfig.focusInside === FocusInsideModes.OnEnterOrSpaceMode && isEnterOrSpace && isSource(component, simulatedEvent)) {\n            optFocusIn(keyingConfig).each(focusIn => {\n              focusIn(component, keyingConfig, keyingState);\n              simulatedEvent.stop();\n            });\n          }\n        };\n        const keyboardEvents = [\n          run$1(keydown(), (component, simulatedEvent) => {\n            processKey(component, simulatedEvent, getKeydownRules, keyingConfig, keyingState).fold(() => {\n              tryGoInsideComponent(component, simulatedEvent);\n            }, _ => {\n              simulatedEvent.stop();\n            });\n          }),\n          run$1(keyup(), (component, simulatedEvent) => {\n            processKey(component, simulatedEvent, getKeyupRules, keyingConfig, keyingState).each(_ => {\n              simulatedEvent.stop();\n            });\n          })\n        ];\n        return derive$2(onFocusHandler.toArray().concat(keyboardEvents));\n      };\n      const me = {\n        schema,\n        processKey,\n        toEvents\n      };\n      return me;\n    };\n\n    const create$1 = cyclicField => {\n      const schema = [\n        option$3('onEscape'),\n        option$3('onEnter'),\n        defaulted('selector', '[data-alloy-tabstop=\"true\"]:not(:disabled)'),\n        defaulted('firstTabstop', 0),\n        defaulted('useTabstopAt', always),\n        option$3('visibilitySelector')\n      ].concat([cyclicField]);\n      const isVisible = (tabbingConfig, element) => {\n        const target = tabbingConfig.visibilitySelector.bind(sel => closest$1(element, sel)).getOr(element);\n        return get$d(target) > 0;\n      };\n      const findInitial = (component, tabbingConfig) => {\n        const tabstops = descendants(component.element, tabbingConfig.selector);\n        const visibles = filter$2(tabstops, elem => isVisible(tabbingConfig, elem));\n        return Optional.from(visibles[tabbingConfig.firstTabstop]);\n      };\n      const findCurrent = (component, tabbingConfig) => tabbingConfig.focusManager.get(component).bind(elem => closest$1(elem, tabbingConfig.selector));\n      const isTabstop = (tabbingConfig, element) => isVisible(tabbingConfig, element) && tabbingConfig.useTabstopAt(element);\n      const focusIn = (component, tabbingConfig, _tabbingState) => {\n        findInitial(component, tabbingConfig).each(target => {\n          tabbingConfig.focusManager.set(component, target);\n        });\n      };\n      const goFromTabstop = (component, tabstops, stopIndex, tabbingConfig, cycle) => cycle(tabstops, stopIndex, elem => isTabstop(tabbingConfig, elem)).fold(() => tabbingConfig.cyclic ? Optional.some(true) : Optional.none(), target => {\n        tabbingConfig.focusManager.set(component, target);\n        return Optional.some(true);\n      });\n      const go = (component, _simulatedEvent, tabbingConfig, cycle) => {\n        const tabstops = descendants(component.element, tabbingConfig.selector);\n        return findCurrent(component, tabbingConfig).bind(tabstop => {\n          const optStopIndex = findIndex$1(tabstops, curry(eq, tabstop));\n          return optStopIndex.bind(stopIndex => goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle));\n        });\n      };\n      const goBackwards = (component, simulatedEvent, tabbingConfig) => {\n        const navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev;\n        return go(component, simulatedEvent, tabbingConfig, navigate);\n      };\n      const goForwards = (component, simulatedEvent, tabbingConfig) => {\n        const navigate = tabbingConfig.cyclic ? cycleNext : tryNext;\n        return go(component, simulatedEvent, tabbingConfig, navigate);\n      };\n      const execute = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEnter.bind(f => f(component, simulatedEvent));\n      const exit = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEscape.bind(f => f(component, simulatedEvent));\n      const getKeydownRules = constant$1([\n        rule(and([\n          isShift,\n          inSet(TAB)\n        ]), goBackwards),\n        rule(inSet(TAB), goForwards),\n        rule(and([\n          isNotShift,\n          inSet(ENTER)\n        ]), execute)\n      ]);\n      const getKeyupRules = constant$1([rule(inSet(ESCAPE), exit)]);\n      return typical(schema, NoState.init, getKeydownRules, getKeyupRules, () => Optional.some(focusIn));\n    };\n\n    var AcyclicType = create$1(customField('cyclic', never));\n\n    var CyclicType = create$1(customField('cyclic', always));\n\n    const doDefaultExecute = (component, _simulatedEvent, focused) => {\n      dispatch(component, focused, execute$5());\n      return Optional.some(true);\n    };\n    const defaultExecute = (component, simulatedEvent, focused) => {\n      const isComplex = inside(focused) && inSet(SPACE)(simulatedEvent.event);\n      return isComplex ? Optional.none() : doDefaultExecute(component, simulatedEvent, focused);\n    };\n    const stopEventForFirefox = (_component, _simulatedEvent) => Optional.some(true);\n\n    const schema$v = [\n      defaulted('execute', defaultExecute),\n      defaulted('useSpace', false),\n      defaulted('useEnter', true),\n      defaulted('useControlEnter', false),\n      defaulted('useDown', false)\n    ];\n    const execute$4 = (component, simulatedEvent, executeConfig) => executeConfig.execute(component, simulatedEvent, component.element);\n    const getKeydownRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => {\n      const spaceExec = executeConfig.useSpace && !inside(component.element) ? SPACE : [];\n      const enterExec = executeConfig.useEnter ? ENTER : [];\n      const downExec = executeConfig.useDown ? DOWN : [];\n      const execKeys = spaceExec.concat(enterExec).concat(downExec);\n      return [rule(inSet(execKeys), execute$4)].concat(executeConfig.useControlEnter ? [rule(and([\n          isControl,\n          inSet(ENTER)\n        ]), execute$4)] : []);\n    };\n    const getKeyupRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => executeConfig.useSpace && !inside(component.element) ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n    var ExecutionType = typical(schema$v, NoState.init, getKeydownRules$5, getKeyupRules$5, () => Optional.none());\n\n    const flatgrid$1 = () => {\n      const dimensions = value$2();\n      const setGridSize = (numRows, numColumns) => {\n        dimensions.set({\n          numRows,\n          numColumns\n        });\n      };\n      const getNumRows = () => dimensions.get().map(d => d.numRows);\n      const getNumColumns = () => dimensions.get().map(d => d.numColumns);\n      return nu$8({\n        readState: () => dimensions.get().map(d => ({\n          numRows: String(d.numRows),\n          numColumns: String(d.numColumns)\n        })).getOr({\n          numRows: '?',\n          numColumns: '?'\n        }),\n        setGridSize,\n        getNumRows,\n        getNumColumns\n      });\n    };\n    const init$d = spec => spec.state(spec);\n\n    var KeyingState = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        flatgrid: flatgrid$1,\n        init: init$d\n    });\n\n    const useH = movement => (component, simulatedEvent, config, state) => {\n      const move = movement(component.element);\n      return use(move, component, simulatedEvent, config, state);\n    };\n    const west$1 = (moveLeft, moveRight) => {\n      const movement = onDirection(moveLeft, moveRight);\n      return useH(movement);\n    };\n    const east$1 = (moveLeft, moveRight) => {\n      const movement = onDirection(moveRight, moveLeft);\n      return useH(movement);\n    };\n    const useV = move => (component, simulatedEvent, config, state) => use(move, component, simulatedEvent, config, state);\n    const use = (move, component, simulatedEvent, config, state) => {\n      const outcome = config.focusManager.get(component).bind(focused => move(component.element, focused, config, state));\n      return outcome.map(newFocus => {\n        config.focusManager.set(component, newFocus);\n        return true;\n      });\n    };\n    const north$1 = useV;\n    const south$1 = useV;\n    const move$1 = useV;\n\n    const isHidden$1 = dom => dom.offsetWidth <= 0 && dom.offsetHeight <= 0;\n    const isVisible = element => !isHidden$1(element.dom);\n\n    const locate = (candidates, predicate) => findIndex$1(candidates, predicate).map(index => ({\n      index,\n      candidates\n    }));\n\n    const locateVisible = (container, current, selector) => {\n      const predicate = x => eq(x, current);\n      const candidates = descendants(container, selector);\n      const visible = filter$2(candidates, isVisible);\n      return locate(visible, predicate);\n    };\n    const findIndex = (elements, target) => findIndex$1(elements, elem => eq(target, elem));\n\n    const withGrid = (values, index, numCols, f) => {\n      const oldRow = Math.floor(index / numCols);\n      const oldColumn = index % numCols;\n      return f(oldRow, oldColumn).bind(address => {\n        const newIndex = address.row * numCols + address.column;\n        return newIndex >= 0 && newIndex < values.length ? Optional.some(values[newIndex]) : Optional.none();\n      });\n    };\n    const cycleHorizontal$1 = (values, index, numRows, numCols, delta) => withGrid(values, index, numCols, (oldRow, oldColumn) => {\n      const onLastRow = oldRow === numRows - 1;\n      const colsInRow = onLastRow ? values.length - oldRow * numCols : numCols;\n      const newColumn = cycleBy(oldColumn, delta, 0, colsInRow - 1);\n      return Optional.some({\n        row: oldRow,\n        column: newColumn\n      });\n    });\n    const cycleVertical$1 = (values, index, numRows, numCols, delta) => withGrid(values, index, numCols, (oldRow, oldColumn) => {\n      const newRow = cycleBy(oldRow, delta, 0, numRows - 1);\n      const onLastRow = newRow === numRows - 1;\n      const colsInRow = onLastRow ? values.length - newRow * numCols : numCols;\n      const newCol = clamp(oldColumn, 0, colsInRow - 1);\n      return Optional.some({\n        row: newRow,\n        column: newCol\n      });\n    });\n    const cycleRight$1 = (values, index, numRows, numCols) => cycleHorizontal$1(values, index, numRows, numCols, +1);\n    const cycleLeft$1 = (values, index, numRows, numCols) => cycleHorizontal$1(values, index, numRows, numCols, -1);\n    const cycleUp$1 = (values, index, numRows, numCols) => cycleVertical$1(values, index, numRows, numCols, -1);\n    const cycleDown$1 = (values, index, numRows, numCols) => cycleVertical$1(values, index, numRows, numCols, +1);\n\n    const schema$u = [\n      required$1('selector'),\n      defaulted('execute', defaultExecute),\n      onKeyboardHandler('onEscape'),\n      defaulted('captureTab', false),\n      initSize()\n    ];\n    const focusIn$3 = (component, gridConfig, _gridState) => {\n      descendant(component.element, gridConfig.selector).each(first => {\n        gridConfig.focusManager.set(component, first);\n      });\n    };\n    const findCurrent$1 = (component, gridConfig) => gridConfig.focusManager.get(component).bind(elem => closest$1(elem, gridConfig.selector));\n    const execute$3 = (component, simulatedEvent, gridConfig, _gridState) => findCurrent$1(component, gridConfig).bind(focused => gridConfig.execute(component, simulatedEvent, focused));\n    const doMove$2 = cycle => (element, focused, gridConfig, gridState) => locateVisible(element, focused, gridConfig.selector).bind(identified => cycle(identified.candidates, identified.index, gridState.getNumRows().getOr(gridConfig.initSize.numRows), gridState.getNumColumns().getOr(gridConfig.initSize.numColumns)));\n    const handleTab = (_component, _simulatedEvent, gridConfig) => gridConfig.captureTab ? Optional.some(true) : Optional.none();\n    const doEscape$1 = (component, simulatedEvent, gridConfig) => gridConfig.onEscape(component, simulatedEvent);\n    const moveLeft$3 = doMove$2(cycleLeft$1);\n    const moveRight$3 = doMove$2(cycleRight$1);\n    const moveNorth$1 = doMove$2(cycleUp$1);\n    const moveSouth$1 = doMove$2(cycleDown$1);\n    const getKeydownRules$4 = constant$1([\n      rule(inSet(LEFT), west$1(moveLeft$3, moveRight$3)),\n      rule(inSet(RIGHT), east$1(moveLeft$3, moveRight$3)),\n      rule(inSet(UP), north$1(moveNorth$1)),\n      rule(inSet(DOWN), south$1(moveSouth$1)),\n      rule(and([\n        isShift,\n        inSet(TAB)\n      ]), handleTab),\n      rule(and([\n        isNotShift,\n        inSet(TAB)\n      ]), handleTab),\n      rule(inSet(SPACE.concat(ENTER)), execute$3)\n    ]);\n    const getKeyupRules$4 = constant$1([\n      rule(inSet(ESCAPE), doEscape$1),\n      rule(inSet(SPACE), stopEventForFirefox)\n    ]);\n    var FlatgridType = typical(schema$u, flatgrid$1, getKeydownRules$4, getKeyupRules$4, () => Optional.some(focusIn$3));\n\n    const horizontal = (container, selector, current, delta) => {\n      const isDisabledButton = candidate => name$3(candidate) === 'button' && get$f(candidate, 'disabled') === 'disabled';\n      const tryCycle = (initial, index, candidates) => {\n        const newIndex = cycleBy(index, delta, 0, candidates.length - 1);\n        if (newIndex === initial) {\n          return Optional.none();\n        } else {\n          return isDisabledButton(candidates[newIndex]) ? tryCycle(initial, newIndex, candidates) : Optional.from(candidates[newIndex]);\n        }\n      };\n      return locateVisible(container, current, selector).bind(identified => {\n        const index = identified.index;\n        const candidates = identified.candidates;\n        return tryCycle(index, index, candidates);\n      });\n    };\n\n    const schema$t = [\n      required$1('selector'),\n      defaulted('getInitial', Optional.none),\n      defaulted('execute', defaultExecute),\n      onKeyboardHandler('onEscape'),\n      defaulted('executeOnMove', false),\n      defaulted('allowVertical', true)\n    ];\n    const findCurrent = (component, flowConfig) => flowConfig.focusManager.get(component).bind(elem => closest$1(elem, flowConfig.selector));\n    const execute$2 = (component, simulatedEvent, flowConfig) => findCurrent(component, flowConfig).bind(focused => flowConfig.execute(component, simulatedEvent, focused));\n    const focusIn$2 = (component, flowConfig, _state) => {\n      flowConfig.getInitial(component).orThunk(() => descendant(component.element, flowConfig.selector)).each(first => {\n        flowConfig.focusManager.set(component, first);\n      });\n    };\n    const moveLeft$2 = (element, focused, info) => horizontal(element, info.selector, focused, -1);\n    const moveRight$2 = (element, focused, info) => horizontal(element, info.selector, focused, +1);\n    const doMove$1 = movement => (component, simulatedEvent, flowConfig, flowState) => movement(component, simulatedEvent, flowConfig, flowState).bind(() => flowConfig.executeOnMove ? execute$2(component, simulatedEvent, flowConfig) : Optional.some(true));\n    const doEscape = (component, simulatedEvent, flowConfig) => flowConfig.onEscape(component, simulatedEvent);\n    const getKeydownRules$3 = (_component, _se, flowConfig, _flowState) => {\n      const westMovers = LEFT.concat(flowConfig.allowVertical ? UP : []);\n      const eastMovers = RIGHT.concat(flowConfig.allowVertical ? DOWN : []);\n      return [\n        rule(inSet(westMovers), doMove$1(west$1(moveLeft$2, moveRight$2))),\n        rule(inSet(eastMovers), doMove$1(east$1(moveLeft$2, moveRight$2))),\n        rule(inSet(ENTER), execute$2),\n        rule(inSet(SPACE), execute$2)\n      ];\n    };\n    const getKeyupRules$3 = constant$1([\n      rule(inSet(SPACE), stopEventForFirefox),\n      rule(inSet(ESCAPE), doEscape)\n    ]);\n    var FlowType = typical(schema$t, NoState.init, getKeydownRules$3, getKeyupRules$3, () => Optional.some(focusIn$2));\n\n    const toCell = (matrix, rowIndex, columnIndex) => Optional.from(matrix[rowIndex]).bind(row => Optional.from(row[columnIndex]).map(cell => ({\n      rowIndex,\n      columnIndex,\n      cell\n    })));\n    const cycleHorizontal = (matrix, rowIndex, startCol, deltaCol) => {\n      const row = matrix[rowIndex];\n      const colsInRow = row.length;\n      const newColIndex = cycleBy(startCol, deltaCol, 0, colsInRow - 1);\n      return toCell(matrix, rowIndex, newColIndex);\n    };\n    const cycleVertical = (matrix, colIndex, startRow, deltaRow) => {\n      const nextRowIndex = cycleBy(startRow, deltaRow, 0, matrix.length - 1);\n      const colsInNextRow = matrix[nextRowIndex].length;\n      const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n      return toCell(matrix, nextRowIndex, nextColIndex);\n    };\n    const moveHorizontal = (matrix, rowIndex, startCol, deltaCol) => {\n      const row = matrix[rowIndex];\n      const colsInRow = row.length;\n      const newColIndex = clamp(startCol + deltaCol, 0, colsInRow - 1);\n      return toCell(matrix, rowIndex, newColIndex);\n    };\n    const moveVertical = (matrix, colIndex, startRow, deltaRow) => {\n      const nextRowIndex = clamp(startRow + deltaRow, 0, matrix.length - 1);\n      const colsInNextRow = matrix[nextRowIndex].length;\n      const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n      return toCell(matrix, nextRowIndex, nextColIndex);\n    };\n    const cycleRight = (matrix, startRow, startCol) => cycleHorizontal(matrix, startRow, startCol, +1);\n    const cycleLeft = (matrix, startRow, startCol) => cycleHorizontal(matrix, startRow, startCol, -1);\n    const cycleUp = (matrix, startRow, startCol) => cycleVertical(matrix, startCol, startRow, -1);\n    const cycleDown = (matrix, startRow, startCol) => cycleVertical(matrix, startCol, startRow, +1);\n    const moveLeft$1 = (matrix, startRow, startCol) => moveHorizontal(matrix, startRow, startCol, -1);\n    const moveRight$1 = (matrix, startRow, startCol) => moveHorizontal(matrix, startRow, startCol, +1);\n    const moveUp$1 = (matrix, startRow, startCol) => moveVertical(matrix, startCol, startRow, -1);\n    const moveDown$1 = (matrix, startRow, startCol) => moveVertical(matrix, startCol, startRow, +1);\n\n    const schema$s = [\n      requiredObjOf('selectors', [\n        required$1('row'),\n        required$1('cell')\n      ]),\n      defaulted('cycles', true),\n      defaulted('previousSelector', Optional.none),\n      defaulted('execute', defaultExecute)\n    ];\n    const focusIn$1 = (component, matrixConfig, _state) => {\n      const focused = matrixConfig.previousSelector(component).orThunk(() => {\n        const selectors = matrixConfig.selectors;\n        return descendant(component.element, selectors.cell);\n      });\n      focused.each(cell => {\n        matrixConfig.focusManager.set(component, cell);\n      });\n    };\n    const execute$1 = (component, simulatedEvent, matrixConfig) => search(component.element).bind(focused => matrixConfig.execute(component, simulatedEvent, focused));\n    const toMatrix = (rows, matrixConfig) => map$2(rows, row => descendants(row, matrixConfig.selectors.cell));\n    const doMove = (ifCycle, ifMove) => (element, focused, matrixConfig) => {\n      const move = matrixConfig.cycles ? ifCycle : ifMove;\n      return closest$1(focused, matrixConfig.selectors.row).bind(inRow => {\n        const cellsInRow = descendants(inRow, matrixConfig.selectors.cell);\n        return findIndex(cellsInRow, focused).bind(colIndex => {\n          const allRows = descendants(element, matrixConfig.selectors.row);\n          return findIndex(allRows, inRow).bind(rowIndex => {\n            const matrix = toMatrix(allRows, matrixConfig);\n            return move(matrix, rowIndex, colIndex).map(next => next.cell);\n          });\n        });\n      });\n    };\n    const moveLeft = doMove(cycleLeft, moveLeft$1);\n    const moveRight = doMove(cycleRight, moveRight$1);\n    const moveNorth = doMove(cycleUp, moveUp$1);\n    const moveSouth = doMove(cycleDown, moveDown$1);\n    const getKeydownRules$2 = constant$1([\n      rule(inSet(LEFT), west$1(moveLeft, moveRight)),\n      rule(inSet(RIGHT), east$1(moveLeft, moveRight)),\n      rule(inSet(UP), north$1(moveNorth)),\n      rule(inSet(DOWN), south$1(moveSouth)),\n      rule(inSet(SPACE.concat(ENTER)), execute$1)\n    ]);\n    const getKeyupRules$2 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n    var MatrixType = typical(schema$s, NoState.init, getKeydownRules$2, getKeyupRules$2, () => Optional.some(focusIn$1));\n\n    const schema$r = [\n      required$1('selector'),\n      defaulted('execute', defaultExecute),\n      defaulted('moveOnTab', false)\n    ];\n    const execute = (component, simulatedEvent, menuConfig) => menuConfig.focusManager.get(component).bind(focused => menuConfig.execute(component, simulatedEvent, focused));\n    const focusIn = (component, menuConfig, _state) => {\n      descendant(component.element, menuConfig.selector).each(first => {\n        menuConfig.focusManager.set(component, first);\n      });\n    };\n    const moveUp = (element, focused, info) => horizontal(element, info.selector, focused, -1);\n    const moveDown = (element, focused, info) => horizontal(element, info.selector, focused, +1);\n    const fireShiftTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveUp)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n    const fireTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveDown)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n    const getKeydownRules$1 = constant$1([\n      rule(inSet(UP), move$1(moveUp)),\n      rule(inSet(DOWN), move$1(moveDown)),\n      rule(and([\n        isShift,\n        inSet(TAB)\n      ]), fireShiftTab),\n      rule(and([\n        isNotShift,\n        inSet(TAB)\n      ]), fireTab),\n      rule(inSet(ENTER), execute),\n      rule(inSet(SPACE), execute)\n    ]);\n    const getKeyupRules$1 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n    var MenuType = typical(schema$r, NoState.init, getKeydownRules$1, getKeyupRules$1, () => Optional.some(focusIn));\n\n    const schema$q = [\n      onKeyboardHandler('onSpace'),\n      onKeyboardHandler('onEnter'),\n      onKeyboardHandler('onShiftEnter'),\n      onKeyboardHandler('onLeft'),\n      onKeyboardHandler('onRight'),\n      onKeyboardHandler('onTab'),\n      onKeyboardHandler('onShiftTab'),\n      onKeyboardHandler('onUp'),\n      onKeyboardHandler('onDown'),\n      onKeyboardHandler('onEscape'),\n      defaulted('stopSpaceKeyup', false),\n      option$3('focusIn')\n    ];\n    const getKeydownRules = (component, simulatedEvent, specialInfo) => [\n      rule(inSet(SPACE), specialInfo.onSpace),\n      rule(and([\n        isNotShift,\n        inSet(ENTER)\n      ]), specialInfo.onEnter),\n      rule(and([\n        isShift,\n        inSet(ENTER)\n      ]), specialInfo.onShiftEnter),\n      rule(and([\n        isShift,\n        inSet(TAB)\n      ]), specialInfo.onShiftTab),\n      rule(and([\n        isNotShift,\n        inSet(TAB)\n      ]), specialInfo.onTab),\n      rule(inSet(UP), specialInfo.onUp),\n      rule(inSet(DOWN), specialInfo.onDown),\n      rule(inSet(LEFT), specialInfo.onLeft),\n      rule(inSet(RIGHT), specialInfo.onRight),\n      rule(inSet(SPACE), specialInfo.onSpace)\n    ];\n    const getKeyupRules = (component, simulatedEvent, specialInfo) => [\n      ...specialInfo.stopSpaceKeyup ? [rule(inSet(SPACE), stopEventForFirefox)] : [],\n      rule(inSet(ESCAPE), specialInfo.onEscape)\n    ];\n    var SpecialType = typical(schema$q, NoState.init, getKeydownRules, getKeyupRules, specialInfo => specialInfo.focusIn);\n\n    const acyclic = AcyclicType.schema();\n    const cyclic = CyclicType.schema();\n    const flow = FlowType.schema();\n    const flatgrid = FlatgridType.schema();\n    const matrix = MatrixType.schema();\n    const execution = ExecutionType.schema();\n    const menu = MenuType.schema();\n    const special = SpecialType.schema();\n\n    var KeyboardBranches = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        acyclic: acyclic,\n        cyclic: cyclic,\n        flow: flow,\n        flatgrid: flatgrid,\n        matrix: matrix,\n        execution: execution,\n        menu: menu,\n        special: special\n    });\n\n    const isFlatgridState = keyState => hasNonNullableKey(keyState, 'setGridSize');\n    const Keying = createModes({\n      branchKey: 'mode',\n      branches: KeyboardBranches,\n      name: 'keying',\n      active: {\n        events: (keyingConfig, keyingState) => {\n          const handler = keyingConfig.handler;\n          return handler.toEvents(keyingConfig, keyingState);\n        }\n      },\n      apis: {\n        focusIn: (component, keyConfig, keyState) => {\n          keyConfig.sendFocusIn(keyConfig).fold(() => {\n            component.getSystem().triggerFocus(component.element, component.element);\n          }, sendFocusIn => {\n            sendFocusIn(component, keyConfig, keyState);\n          });\n        },\n        setGridSize: (component, keyConfig, keyState, numRows, numColumns) => {\n          if (!isFlatgridState(keyState)) {\n            console.error('Layout does not support setGridSize');\n          } else {\n            keyState.setGridSize(numRows, numColumns);\n          }\n        }\n      },\n      state: KeyingState\n    });\n\n    const withoutReuse = (parent, data) => {\n      preserve$1(() => {\n        replaceChildren(parent, data, () => map$2(data, parent.getSystem().build));\n      }, parent.element);\n    };\n    const withReuse = (parent, data) => {\n      preserve$1(() => {\n        virtualReplaceChildren(parent, data, () => {\n          return patchSpecChildren(parent.element, data, parent.getSystem().buildOrPatch);\n        });\n      }, parent.element);\n    };\n\n    const virtualReplace = (component, replacee, replaceeIndex, childSpec) => {\n      virtualDetach(replacee);\n      const child = patchSpecChild(component.element, replaceeIndex, childSpec, component.getSystem().buildOrPatch);\n      virtualAttach(component, child);\n      component.syncComponents();\n    };\n    const insert = (component, insertion, childSpec) => {\n      const child = component.getSystem().build(childSpec);\n      attachWith(component, child, insertion);\n    };\n    const replace = (component, replacee, replaceeIndex, childSpec) => {\n      detach(replacee);\n      insert(component, (p, c) => appendAt(p, c, replaceeIndex), childSpec);\n    };\n    const set$3 = (component, replaceConfig, replaceState, data) => {\n      const replacer = replaceConfig.reuseDom ? withReuse : withoutReuse;\n      return replacer(component, data);\n    };\n    const append = (component, replaceConfig, replaceState, appendee) => {\n      insert(component, append$2, appendee);\n    };\n    const prepend = (component, replaceConfig, replaceState, prependee) => {\n      insert(component, prepend$1, prependee);\n    };\n    const remove = (component, replaceConfig, replaceState, removee) => {\n      const children = contents(component);\n      const foundChild = find$5(children, child => eq(removee.element, child.element));\n      foundChild.each(detach);\n    };\n    const contents = (component, _replaceConfig) => component.components();\n    const replaceAt = (component, replaceConfig, replaceState, replaceeIndex, replacer) => {\n      const children = contents(component);\n      return Optional.from(children[replaceeIndex]).map(replacee => {\n        replacer.fold(() => detach(replacee), r => {\n          const replacer = replaceConfig.reuseDom ? virtualReplace : replace;\n          replacer(component, replacee, replaceeIndex, r);\n        });\n        return replacee;\n      });\n    };\n    const replaceBy = (component, replaceConfig, replaceState, replaceePred, replacer) => {\n      const children = contents(component);\n      return findIndex$1(children, replaceePred).bind(replaceeIndex => replaceAt(component, replaceConfig, replaceState, replaceeIndex, replacer));\n    };\n\n    var ReplaceApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        append: append,\n        prepend: prepend,\n        remove: remove,\n        replaceAt: replaceAt,\n        replaceBy: replaceBy,\n        set: set$3,\n        contents: contents\n    });\n\n    const Replacing = create$3({\n      fields: [defaultedBoolean('reuseDom', true)],\n      name: 'replacing',\n      apis: ReplaceApis\n    });\n\n    const events$d = (name, eventHandlers) => {\n      const events = derive$2(eventHandlers);\n      return create$3({\n        fields: [required$1('enabled')],\n        name,\n        active: { events: constant$1(events) }\n      });\n    };\n    const config = (name, eventHandlers) => {\n      const me = events$d(name, eventHandlers);\n      return {\n        key: name,\n        value: {\n          config: {},\n          me,\n          configAsRaw: constant$1({}),\n          initialConfig: {},\n          state: NoState\n        }\n      };\n    };\n\n    const focus$2 = (component, focusConfig) => {\n      if (!focusConfig.ignore) {\n        focus$3(component.element);\n        focusConfig.onFocus(component);\n      }\n    };\n    const blur = (component, focusConfig) => {\n      if (!focusConfig.ignore) {\n        blur$1(component.element);\n      }\n    };\n    const isFocused = component => hasFocus(component.element);\n\n    var FocusApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        focus: focus$2,\n        blur: blur,\n        isFocused: isFocused\n    });\n\n    const exhibit$4 = (base, focusConfig) => {\n      const mod = focusConfig.ignore ? {} : { attributes: { tabindex: '-1' } };\n      return nu$7(mod);\n    };\n    const events$c = focusConfig => derive$2([run$1(focus$4(), (component, simulatedEvent) => {\n        focus$2(component, focusConfig);\n        simulatedEvent.stop();\n      })].concat(focusConfig.stopMousedown ? [run$1(mousedown(), (_, simulatedEvent) => {\n        simulatedEvent.event.prevent();\n      })] : []));\n\n    var ActiveFocus = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        exhibit: exhibit$4,\n        events: events$c\n    });\n\n    var FocusSchema = [\n      onHandler('onFocus'),\n      defaulted('stopMousedown', false),\n      defaulted('ignore', false)\n    ];\n\n    const Focusing = create$3({\n      fields: FocusSchema,\n      name: 'focusing',\n      active: ActiveFocus,\n      apis: FocusApis\n    });\n\n    const SetupBehaviourCellState = initialState => {\n      const init = () => {\n        const cell = Cell(initialState);\n        const get = () => cell.get();\n        const set = newState => cell.set(newState);\n        const clear = () => cell.set(initialState);\n        const readState = () => cell.get();\n        return {\n          get,\n          set,\n          clear,\n          readState\n        };\n      };\n      return { init };\n    };\n\n    const updateAriaState = (component, toggleConfig, toggleState) => {\n      const ariaInfo = toggleConfig.aria;\n      ariaInfo.update(component, ariaInfo, toggleState.get());\n    };\n    const updateClass = (component, toggleConfig, toggleState) => {\n      toggleConfig.toggleClass.each(toggleClass => {\n        if (toggleState.get()) {\n          add$2(component.element, toggleClass);\n        } else {\n          remove$2(component.element, toggleClass);\n        }\n      });\n    };\n    const set$2 = (component, toggleConfig, toggleState, state) => {\n      const initialState = toggleState.get();\n      toggleState.set(state);\n      updateClass(component, toggleConfig, toggleState);\n      updateAriaState(component, toggleConfig, toggleState);\n      if (initialState !== state) {\n        toggleConfig.onToggled(component, state);\n      }\n    };\n    const toggle$2 = (component, toggleConfig, toggleState) => {\n      set$2(component, toggleConfig, toggleState, !toggleState.get());\n    };\n    const on = (component, toggleConfig, toggleState) => {\n      set$2(component, toggleConfig, toggleState, true);\n    };\n    const off = (component, toggleConfig, toggleState) => {\n      set$2(component, toggleConfig, toggleState, false);\n    };\n    const isOn = (component, toggleConfig, toggleState) => toggleState.get();\n    const onLoad = (component, toggleConfig, toggleState) => {\n      set$2(component, toggleConfig, toggleState, toggleConfig.selected);\n    };\n\n    var ToggleApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        onLoad: onLoad,\n        toggle: toggle$2,\n        isOn: isOn,\n        on: on,\n        off: off,\n        set: set$2\n    });\n\n    const exhibit$3 = () => nu$7({});\n    const events$b = (toggleConfig, toggleState) => {\n      const execute = executeEvent(toggleConfig, toggleState, toggle$2);\n      const load = loadEvent(toggleConfig, toggleState, onLoad);\n      return derive$2(flatten([\n        toggleConfig.toggleOnExecute ? [execute] : [],\n        [load]\n      ]));\n    };\n\n    var ActiveToggle = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        exhibit: exhibit$3,\n        events: events$b\n    });\n\n    const updatePressed = (component, ariaInfo, status) => {\n      set$9(component.element, 'aria-pressed', status);\n      if (ariaInfo.syncWithExpanded) {\n        updateExpanded(component, ariaInfo, status);\n      }\n    };\n    const updateSelected = (component, ariaInfo, status) => {\n      set$9(component.element, 'aria-selected', status);\n    };\n    const updateChecked = (component, ariaInfo, status) => {\n      set$9(component.element, 'aria-checked', status);\n    };\n    const updateExpanded = (component, ariaInfo, status) => {\n      set$9(component.element, 'aria-expanded', status);\n    };\n\n    var ToggleSchema = [\n      defaulted('selected', false),\n      option$3('toggleClass'),\n      defaulted('toggleOnExecute', true),\n      onHandler('onToggled'),\n      defaultedOf('aria', { mode: 'none' }, choose$1('mode', {\n        pressed: [\n          defaulted('syncWithExpanded', false),\n          output$1('update', updatePressed)\n        ],\n        checked: [output$1('update', updateChecked)],\n        expanded: [output$1('update', updateExpanded)],\n        selected: [output$1('update', updateSelected)],\n        none: [output$1('update', noop)]\n      }))\n    ];\n\n    const Toggling = create$3({\n      fields: ToggleSchema,\n      name: 'toggling',\n      active: ActiveToggle,\n      apis: ToggleApis,\n      state: SetupBehaviourCellState(false)\n    });\n\n    const pointerEvents = () => {\n      const onClick = (component, simulatedEvent) => {\n        simulatedEvent.stop();\n        emitExecute(component);\n      };\n      return [\n        run$1(click(), onClick),\n        run$1(tap(), onClick),\n        cutter(touchstart()),\n        cutter(mousedown())\n      ];\n    };\n    const events$a = optAction => {\n      const executeHandler = action => runOnExecute$1((component, simulatedEvent) => {\n        action(component);\n        simulatedEvent.stop();\n      });\n      return derive$2(flatten([\n        optAction.map(executeHandler).toArray(),\n        pointerEvents()\n      ]));\n    };\n\n    const hoverEvent = 'alloy.item-hover';\n    const focusEvent = 'alloy.item-focus';\n    const toggledEvent = 'alloy.item-toggled';\n    const onHover = item => {\n      if (search(item.element).isNone() || Focusing.isFocused(item)) {\n        if (!Focusing.isFocused(item)) {\n          Focusing.focus(item);\n        }\n        emitWith(item, hoverEvent, { item });\n      }\n    };\n    const onFocus$1 = item => {\n      emitWith(item, focusEvent, { item });\n    };\n    const onToggled = (item, state) => {\n      emitWith(item, toggledEvent, {\n        item,\n        state\n      });\n    };\n    const hover = constant$1(hoverEvent);\n    const focus$1 = constant$1(focusEvent);\n    const toggled = constant$1(toggledEvent);\n\n    const getItemRole = detail => detail.toggling.map(toggling => toggling.exclusive ? 'menuitemradio' : 'menuitemcheckbox').getOr('menuitem');\n    const getTogglingSpec = tConfig => ({\n      aria: { mode: 'checked' },\n      ...filter$1(tConfig, (_value, name) => name !== 'exclusive'),\n      onToggled: (component, state) => {\n        if (isFunction(tConfig.onToggled)) {\n          tConfig.onToggled(component, state);\n        }\n        onToggled(component, state);\n      }\n    });\n    const builder$2 = detail => ({\n      dom: detail.dom,\n      domModification: {\n        ...detail.domModification,\n        attributes: {\n          'role': getItemRole(detail),\n          ...detail.domModification.attributes,\n          'aria-haspopup': detail.hasSubmenu,\n          ...detail.hasSubmenu ? { 'aria-expanded': false } : {}\n        }\n      },\n      behaviours: SketchBehaviours.augment(detail.itemBehaviours, [\n        detail.toggling.fold(Toggling.revoke, tConfig => Toggling.config(getTogglingSpec(tConfig))),\n        Focusing.config({\n          ignore: detail.ignoreFocus,\n          stopMousedown: detail.ignoreFocus,\n          onFocus: component => {\n            onFocus$1(component);\n          }\n        }),\n        Keying.config({ mode: 'execution' }),\n        Representing.config({\n          store: {\n            mode: 'memory',\n            initialValue: detail.data\n          }\n        }),\n        config('item-type-events', [\n          ...pointerEvents(),\n          run$1(mouseover(), onHover),\n          run$1(focusItem(), Focusing.focus)\n        ])\n      ]),\n      components: detail.components,\n      eventOrder: detail.eventOrder\n    });\n    const schema$p = [\n      required$1('data'),\n      required$1('components'),\n      required$1('dom'),\n      defaulted('hasSubmenu', false),\n      option$3('toggling'),\n      SketchBehaviours.field('itemBehaviours', [\n        Toggling,\n        Focusing,\n        Keying,\n        Representing\n      ]),\n      defaulted('ignoreFocus', false),\n      defaulted('domModification', {}),\n      output$1('builder', builder$2),\n      defaulted('eventOrder', {})\n    ];\n\n    const builder$1 = detail => ({\n      dom: detail.dom,\n      components: detail.components,\n      events: derive$2([stopper(focusItem())])\n    });\n    const schema$o = [\n      required$1('dom'),\n      required$1('components'),\n      output$1('builder', builder$1)\n    ];\n\n    const owner$2 = constant$1('item-widget');\n    const parts$h = constant$1([required({\n        name: 'widget',\n        overrides: detail => {\n          return {\n            behaviours: derive$1([Representing.config({\n                store: {\n                  mode: 'manual',\n                  getValue: _component => {\n                    return detail.data;\n                  },\n                  setValue: noop\n                }\n              })])\n          };\n        }\n      })]);\n\n    const builder = detail => {\n      const subs = substitutes(owner$2(), detail, parts$h());\n      const components = components$1(owner$2(), detail, subs.internals());\n      const focusWidget = component => getPart(component, detail, 'widget').map(widget => {\n        Keying.focusIn(widget);\n        return widget;\n      });\n      const onHorizontalArrow = (component, simulatedEvent) => inside(simulatedEvent.event.target) ? Optional.none() : (() => {\n        if (detail.autofocus) {\n          simulatedEvent.setSource(component.element);\n          return Optional.none();\n        } else {\n          return Optional.none();\n        }\n      })();\n      return {\n        dom: detail.dom,\n        components,\n        domModification: detail.domModification,\n        events: derive$2([\n          runOnExecute$1((component, simulatedEvent) => {\n            focusWidget(component).each(_widget => {\n              simulatedEvent.stop();\n            });\n          }),\n          run$1(mouseover(), onHover),\n          run$1(focusItem(), (component, _simulatedEvent) => {\n            if (detail.autofocus) {\n              focusWidget(component);\n            } else {\n              Focusing.focus(component);\n            }\n          })\n        ]),\n        behaviours: SketchBehaviours.augment(detail.widgetBehaviours, [\n          Representing.config({\n            store: {\n              mode: 'memory',\n              initialValue: detail.data\n            }\n          }),\n          Focusing.config({\n            ignore: detail.ignoreFocus,\n            onFocus: component => {\n              onFocus$1(component);\n            }\n          }),\n          Keying.config({\n            mode: 'special',\n            focusIn: detail.autofocus ? component => {\n              focusWidget(component);\n            } : revoke(),\n            onLeft: onHorizontalArrow,\n            onRight: onHorizontalArrow,\n            onEscape: (component, simulatedEvent) => {\n              if (!Focusing.isFocused(component) && !detail.autofocus) {\n                Focusing.focus(component);\n                return Optional.some(true);\n              } else if (detail.autofocus) {\n                simulatedEvent.setSource(component.element);\n                return Optional.none();\n              } else {\n                return Optional.none();\n              }\n            }\n          })\n        ])\n      };\n    };\n    const schema$n = [\n      required$1('uid'),\n      required$1('data'),\n      required$1('components'),\n      required$1('dom'),\n      defaulted('autofocus', false),\n      defaulted('ignoreFocus', false),\n      SketchBehaviours.field('widgetBehaviours', [\n        Representing,\n        Focusing,\n        Keying\n      ]),\n      defaulted('domModification', {}),\n      defaultUidsSchema(parts$h()),\n      output$1('builder', builder)\n    ];\n\n    const itemSchema$2 = choose$1('type', {\n      widget: schema$n,\n      item: schema$p,\n      separator: schema$o\n    });\n    const configureGrid = (detail, movementInfo) => ({\n      mode: 'flatgrid',\n      selector: '.' + detail.markers.item,\n      initSize: {\n        numColumns: movementInfo.initSize.numColumns,\n        numRows: movementInfo.initSize.numRows\n      },\n      focusManager: detail.focusManager\n    });\n    const configureMatrix = (detail, movementInfo) => ({\n      mode: 'matrix',\n      selectors: {\n        row: movementInfo.rowSelector,\n        cell: '.' + detail.markers.item\n      },\n      focusManager: detail.focusManager\n    });\n    const configureMenu = (detail, movementInfo) => ({\n      mode: 'menu',\n      selector: '.' + detail.markers.item,\n      moveOnTab: movementInfo.moveOnTab,\n      focusManager: detail.focusManager\n    });\n    const parts$g = constant$1([group({\n        factory: {\n          sketch: spec => {\n            const itemInfo = asRawOrDie$1('menu.spec item', itemSchema$2, spec);\n            return itemInfo.builder(itemInfo);\n          }\n        },\n        name: 'items',\n        unit: 'item',\n        defaults: (detail, u) => {\n          return has$2(u, 'uid') ? u : {\n            ...u,\n            uid: generate$5('item')\n          };\n        },\n        overrides: (detail, u) => {\n          return {\n            type: u.type,\n            ignoreFocus: detail.fakeFocus,\n            domModification: { classes: [detail.markers.item] }\n          };\n        }\n      })]);\n    const schema$m = constant$1([\n      required$1('value'),\n      required$1('items'),\n      required$1('dom'),\n      required$1('components'),\n      defaulted('eventOrder', {}),\n      field('menuBehaviours', [\n        Highlighting,\n        Representing,\n        Composing,\n        Keying\n      ]),\n      defaultedOf('movement', {\n        mode: 'menu',\n        moveOnTab: true\n      }, choose$1('mode', {\n        grid: [\n          initSize(),\n          output$1('config', configureGrid)\n        ],\n        matrix: [\n          output$1('config', configureMatrix),\n          required$1('rowSelector')\n        ],\n        menu: [\n          defaulted('moveOnTab', true),\n          output$1('config', configureMenu)\n        ]\n      })),\n      itemMarkers(),\n      defaulted('fakeFocus', false),\n      defaulted('focusManager', dom$2()),\n      onHandler('onHighlight'),\n      onHandler('onDehighlight')\n    ]);\n\n    const focus = constant$1('alloy.menu-focus');\n\n    const deselectOtherRadioItems = (menu, item) => {\n      const checkedRadioItems = descendants(menu.element, '[role=\"menuitemradio\"][aria-checked=\"true\"]');\n      each$1(checkedRadioItems, ele => {\n        if (!eq(ele, item.element)) {\n          menu.getSystem().getByDom(ele).each(c => {\n            Toggling.off(c);\n          });\n        }\n      });\n    };\n    const make$7 = (detail, components, _spec, _externals) => ({\n      uid: detail.uid,\n      dom: detail.dom,\n      markers: detail.markers,\n      behaviours: augment(detail.menuBehaviours, [\n        Highlighting.config({\n          highlightClass: detail.markers.selectedItem,\n          itemClass: detail.markers.item,\n          onHighlight: detail.onHighlight,\n          onDehighlight: detail.onDehighlight\n        }),\n        Representing.config({\n          store: {\n            mode: 'memory',\n            initialValue: detail.value\n          }\n        }),\n        Composing.config({ find: Optional.some }),\n        Keying.config(detail.movement.config(detail, detail.movement))\n      ]),\n      events: derive$2([\n        run$1(focus$1(), (menu, simulatedEvent) => {\n          const event = simulatedEvent.event;\n          menu.getSystem().getByDom(event.target).each(item => {\n            Highlighting.highlight(menu, item);\n            simulatedEvent.stop();\n            emitWith(menu, focus(), {\n              menu,\n              item\n            });\n          });\n        }),\n        run$1(hover(), (menu, simulatedEvent) => {\n          const item = simulatedEvent.event.item;\n          Highlighting.highlight(menu, item);\n        }),\n        run$1(toggled(), (menu, simulatedEvent) => {\n          const {item, state} = simulatedEvent.event;\n          if (state && get$f(item.element, 'role') === 'menuitemradio') {\n            deselectOtherRadioItems(menu, item);\n          }\n        })\n      ]),\n      components,\n      eventOrder: detail.eventOrder,\n      domModification: { attributes: { role: 'menu' } }\n    });\n\n    const Menu = composite({\n      name: 'Menu',\n      configFields: schema$m(),\n      partFields: parts$g(),\n      factory: make$7\n    });\n\n    const transpose$1 = obj => tupleMap(obj, (v, k) => ({\n      k: v,\n      v: k\n    }));\n    const trace = (items, byItem, byMenu, finish) => get$g(byMenu, finish).bind(triggerItem => get$g(items, triggerItem).bind(triggerMenu => {\n      const rest = trace(items, byItem, byMenu, triggerMenu);\n      return Optional.some([triggerMenu].concat(rest));\n    })).getOr([]);\n    const generate$2 = (menus, expansions) => {\n      const items = {};\n      each(menus, (menuItems, menu) => {\n        each$1(menuItems, item => {\n          items[item] = menu;\n        });\n      });\n      const byItem = expansions;\n      const byMenu = transpose$1(expansions);\n      const menuPaths = map$1(byMenu, (_triggerItem, submenu) => [submenu].concat(trace(items, byItem, byMenu, submenu)));\n      return map$1(items, menu => get$g(menuPaths, menu).getOr([menu]));\n    };\n\n    const init$c = () => {\n      const expansions = Cell({});\n      const menus = Cell({});\n      const paths = Cell({});\n      const primary = value$2();\n      const directory = Cell({});\n      const clear = () => {\n        expansions.set({});\n        menus.set({});\n        paths.set({});\n        primary.clear();\n      };\n      const isClear = () => primary.get().isNone();\n      const setMenuBuilt = (menuName, built) => {\n        menus.set({\n          ...menus.get(),\n          [menuName]: {\n            type: 'prepared',\n            menu: built\n          }\n        });\n      };\n      const setContents = (sPrimary, sMenus, sExpansions, dir) => {\n        primary.set(sPrimary);\n        expansions.set(sExpansions);\n        menus.set(sMenus);\n        directory.set(dir);\n        const sPaths = generate$2(dir, sExpansions);\n        paths.set(sPaths);\n      };\n      const getTriggeringItem = menuValue => find$4(expansions.get(), (v, _k) => v === menuValue);\n      const getTriggerData = (menuValue, getItemByValue, path) => getPreparedMenu(menuValue).bind(menu => getTriggeringItem(menuValue).bind(triggeringItemValue => getItemByValue(triggeringItemValue).map(triggeredItem => ({\n        triggeredMenu: menu,\n        triggeringItem: triggeredItem,\n        triggeringPath: path\n      }))));\n      const getTriggeringPath = (itemValue, getItemByValue) => {\n        const extraPath = filter$2(lookupItem(itemValue).toArray(), menuValue => getPreparedMenu(menuValue).isSome());\n        return get$g(paths.get(), itemValue).bind(path => {\n          const revPath = reverse(extraPath.concat(path));\n          const triggers = bind$3(revPath, (menuValue, menuIndex) => getTriggerData(menuValue, getItemByValue, revPath.slice(0, menuIndex + 1)).fold(() => is$1(primary.get(), menuValue) ? [] : [Optional.none()], data => [Optional.some(data)]));\n          return sequence(triggers);\n        });\n      };\n      const expand = itemValue => get$g(expansions.get(), itemValue).map(menu => {\n        const current = get$g(paths.get(), itemValue).getOr([]);\n        return [menu].concat(current);\n      });\n      const collapse = itemValue => get$g(paths.get(), itemValue).bind(path => path.length > 1 ? Optional.some(path.slice(1)) : Optional.none());\n      const refresh = itemValue => get$g(paths.get(), itemValue);\n      const getPreparedMenu = menuValue => lookupMenu(menuValue).bind(extractPreparedMenu);\n      const lookupMenu = menuValue => get$g(menus.get(), menuValue);\n      const lookupItem = itemValue => get$g(expansions.get(), itemValue);\n      const otherMenus = path => {\n        const menuValues = directory.get();\n        return difference(keys(menuValues), path);\n      };\n      const getPrimary = () => primary.get().bind(getPreparedMenu);\n      const getMenus = () => menus.get();\n      return {\n        setMenuBuilt,\n        setContents,\n        expand,\n        refresh,\n        collapse,\n        lookupMenu,\n        lookupItem,\n        otherMenus,\n        getPrimary,\n        getMenus,\n        clear,\n        isClear,\n        getTriggeringPath\n      };\n    };\n    const extractPreparedMenu = prep => prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none();\n    const LayeredState = {\n      init: init$c,\n      extractPreparedMenu\n    };\n\n    const onMenuItemHighlightedEvent = generate$6('tiered-menu-item-highlight');\n    const onMenuItemDehighlightedEvent = generate$6('tiered-menu-item-dehighlight');\n\n    var HighlightOnOpen;\n    (function (HighlightOnOpen) {\n      HighlightOnOpen[HighlightOnOpen['HighlightMenuAndItem'] = 0] = 'HighlightMenuAndItem';\n      HighlightOnOpen[HighlightOnOpen['HighlightJustMenu'] = 1] = 'HighlightJustMenu';\n      HighlightOnOpen[HighlightOnOpen['HighlightNone'] = 2] = 'HighlightNone';\n    }(HighlightOnOpen || (HighlightOnOpen = {})));\n\n    const make$6 = (detail, _rawUiSpec) => {\n      const submenuParentItems = value$2();\n      const buildMenus = (container, primaryName, menus) => map$1(menus, (spec, name) => {\n        const makeSketch = () => Menu.sketch({\n          ...spec,\n          value: name,\n          markers: detail.markers,\n          fakeFocus: detail.fakeFocus,\n          onHighlight: (menuComp, itemComp) => {\n            const highlightData = {\n              menuComp,\n              itemComp\n            };\n            emitWith(menuComp, onMenuItemHighlightedEvent, highlightData);\n          },\n          onDehighlight: (menuComp, itemComp) => {\n            const dehighlightData = {\n              menuComp,\n              itemComp\n            };\n            emitWith(menuComp, onMenuItemDehighlightedEvent, dehighlightData);\n          },\n          focusManager: detail.fakeFocus ? highlights() : dom$2()\n        });\n        return name === primaryName ? {\n          type: 'prepared',\n          menu: container.getSystem().build(makeSketch())\n        } : {\n          type: 'notbuilt',\n          nbMenu: makeSketch\n        };\n      });\n      const layeredState = LayeredState.init();\n      const setup = container => {\n        const componentMap = buildMenus(container, detail.data.primary, detail.data.menus);\n        const directory = toDirectory();\n        layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory);\n        return layeredState.getPrimary();\n      };\n      const getItemValue = item => Representing.getValue(item).value;\n      const getItemByValue = (_container, menus, itemValue) => findMap(menus, menu => {\n        if (!menu.getSystem().isConnected()) {\n          return Optional.none();\n        }\n        const candidates = Highlighting.getCandidates(menu);\n        return find$5(candidates, c => getItemValue(c) === itemValue);\n      });\n      const toDirectory = _container => map$1(detail.data.menus, (data, _menuName) => bind$3(data.items, item => item.type === 'separator' ? [] : [item.data.value]));\n      const setActiveMenu = Highlighting.highlight;\n      const setActiveMenuAndItem = (container, menu) => {\n        setActiveMenu(container, menu);\n        Highlighting.getHighlighted(menu).orThunk(() => Highlighting.getFirst(menu)).each(item => {\n          if (detail.fakeFocus) {\n            Highlighting.highlight(menu, item);\n          } else {\n            dispatch(container, item.element, focusItem());\n          }\n        });\n      };\n      const getMenus = (state, menuValues) => cat(map$2(menuValues, mv => state.lookupMenu(mv).bind(prep => prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none())));\n      const closeOthers = (container, state, path) => {\n        const others = getMenus(state, state.otherMenus(path));\n        each$1(others, o => {\n          remove$1(o.element, [detail.markers.backgroundMenu]);\n          if (!detail.stayInDom) {\n            Replacing.remove(container, o);\n          }\n        });\n      };\n      const getSubmenuParents = container => submenuParentItems.get().getOrThunk(() => {\n        const r = {};\n        const items = descendants(container.element, `.${ detail.markers.item }`);\n        const parentItems = filter$2(items, i => get$f(i, 'aria-haspopup') === 'true');\n        each$1(parentItems, i => {\n          container.getSystem().getByDom(i).each(itemComp => {\n            const key = getItemValue(itemComp);\n            r[key] = itemComp;\n          });\n        });\n        submenuParentItems.set(r);\n        return r;\n      });\n      const updateAriaExpansions = (container, path) => {\n        const parentItems = getSubmenuParents(container);\n        each(parentItems, (v, k) => {\n          const expanded = contains$2(path, k);\n          set$9(v.element, 'aria-expanded', expanded);\n        });\n      };\n      const updateMenuPath = (container, state, path) => Optional.from(path[0]).bind(latestMenuName => state.lookupMenu(latestMenuName).bind(menuPrep => {\n        if (menuPrep.type === 'notbuilt') {\n          return Optional.none();\n        } else {\n          const activeMenu = menuPrep.menu;\n          const rest = getMenus(state, path.slice(1));\n          each$1(rest, r => {\n            add$2(r.element, detail.markers.backgroundMenu);\n          });\n          if (!inBody(activeMenu.element)) {\n            Replacing.append(container, premade(activeMenu));\n          }\n          remove$1(activeMenu.element, [detail.markers.backgroundMenu]);\n          setActiveMenuAndItem(container, activeMenu);\n          closeOthers(container, state, path);\n          return Optional.some(activeMenu);\n        }\n      }));\n      let ExpandHighlightDecision;\n      (function (ExpandHighlightDecision) {\n        ExpandHighlightDecision[ExpandHighlightDecision['HighlightSubmenu'] = 0] = 'HighlightSubmenu';\n        ExpandHighlightDecision[ExpandHighlightDecision['HighlightParent'] = 1] = 'HighlightParent';\n      }(ExpandHighlightDecision || (ExpandHighlightDecision = {})));\n      const buildIfRequired = (container, menuName, menuPrep) => {\n        if (menuPrep.type === 'notbuilt') {\n          const menu = container.getSystem().build(menuPrep.nbMenu());\n          layeredState.setMenuBuilt(menuName, menu);\n          return menu;\n        } else {\n          return menuPrep.menu;\n        }\n      };\n      const expandRight = (container, item, decision = ExpandHighlightDecision.HighlightSubmenu) => {\n        if (item.hasConfigured(Disabling) && Disabling.isDisabled(item)) {\n          return Optional.some(item);\n        } else {\n          const value = getItemValue(item);\n          return layeredState.expand(value).bind(path => {\n            updateAriaExpansions(container, path);\n            return Optional.from(path[0]).bind(menuName => layeredState.lookupMenu(menuName).bind(activeMenuPrep => {\n              const activeMenu = buildIfRequired(container, menuName, activeMenuPrep);\n              if (!inBody(activeMenu.element)) {\n                Replacing.append(container, premade(activeMenu));\n              }\n              detail.onOpenSubmenu(container, item, activeMenu, reverse(path));\n              if (decision === ExpandHighlightDecision.HighlightSubmenu) {\n                Highlighting.highlightFirst(activeMenu);\n                return updateMenuPath(container, layeredState, path);\n              } else {\n                Highlighting.dehighlightAll(activeMenu);\n                return Optional.some(item);\n              }\n            }));\n          });\n        }\n      };\n      const collapseLeft = (container, item) => {\n        const value = getItemValue(item);\n        return layeredState.collapse(value).bind(path => {\n          updateAriaExpansions(container, path);\n          return updateMenuPath(container, layeredState, path).map(activeMenu => {\n            detail.onCollapseMenu(container, item, activeMenu);\n            return activeMenu;\n          });\n        });\n      };\n      const updateView = (container, item) => {\n        const value = getItemValue(item);\n        return layeredState.refresh(value).bind(path => {\n          updateAriaExpansions(container, path);\n          return updateMenuPath(container, layeredState, path);\n        });\n      };\n      const onRight = (container, item) => inside(item.element) ? Optional.none() : expandRight(container, item, ExpandHighlightDecision.HighlightSubmenu);\n      const onLeft = (container, item) => inside(item.element) ? Optional.none() : collapseLeft(container, item);\n      const onEscape = (container, item) => collapseLeft(container, item).orThunk(() => detail.onEscape(container, item).map(() => container));\n      const keyOnItem = f => (container, simulatedEvent) => {\n        return closest$1(simulatedEvent.getSource(), `.${ detail.markers.item }`).bind(target => container.getSystem().getByDom(target).toOptional().bind(item => f(container, item).map(always)));\n      };\n      const events = derive$2([\n        run$1(focus(), (tmenu, simulatedEvent) => {\n          const item = simulatedEvent.event.item;\n          layeredState.lookupItem(getItemValue(item)).each(() => {\n            const menu = simulatedEvent.event.menu;\n            Highlighting.highlight(tmenu, menu);\n            const value = getItemValue(simulatedEvent.event.item);\n            layeredState.refresh(value).each(path => closeOthers(tmenu, layeredState, path));\n          });\n        }),\n        runOnExecute$1((component, simulatedEvent) => {\n          const target = simulatedEvent.event.target;\n          component.getSystem().getByDom(target).each(item => {\n            const itemValue = getItemValue(item);\n            if (itemValue.indexOf('collapse-item') === 0) {\n              collapseLeft(component, item);\n            }\n            expandRight(component, item, ExpandHighlightDecision.HighlightSubmenu).fold(() => {\n              detail.onExecute(component, item);\n            }, noop);\n          });\n        }),\n        runOnAttached((container, _simulatedEvent) => {\n          setup(container).each(primary => {\n            Replacing.append(container, premade(primary));\n            detail.onOpenMenu(container, primary);\n            if (detail.highlightOnOpen === HighlightOnOpen.HighlightMenuAndItem) {\n              setActiveMenuAndItem(container, primary);\n            } else if (detail.highlightOnOpen === HighlightOnOpen.HighlightJustMenu) {\n              setActiveMenu(container, primary);\n            }\n          });\n        }),\n        run$1(onMenuItemHighlightedEvent, (tmenuComp, se) => {\n          detail.onHighlightItem(tmenuComp, se.event.menuComp, se.event.itemComp);\n        }),\n        run$1(onMenuItemDehighlightedEvent, (tmenuComp, se) => {\n          detail.onDehighlightItem(tmenuComp, se.event.menuComp, se.event.itemComp);\n        }),\n        ...detail.navigateOnHover ? [run$1(hover(), (tmenu, simulatedEvent) => {\n            const item = simulatedEvent.event.item;\n            updateView(tmenu, item);\n            expandRight(tmenu, item, ExpandHighlightDecision.HighlightParent);\n            detail.onHover(tmenu, item);\n          })] : []\n      ]);\n      const getActiveItem = container => Highlighting.getHighlighted(container).bind(Highlighting.getHighlighted);\n      const collapseMenuApi = container => {\n        getActiveItem(container).each(currentItem => {\n          collapseLeft(container, currentItem);\n        });\n      };\n      const highlightPrimary = container => {\n        layeredState.getPrimary().each(primary => {\n          setActiveMenuAndItem(container, primary);\n        });\n      };\n      const extractMenuFromContainer = container => Optional.from(container.components()[0]).filter(comp => get$f(comp.element, 'role') === 'menu');\n      const repositionMenus = container => {\n        const maybeActivePrimary = layeredState.getPrimary().bind(primary => getActiveItem(container).bind(currentItem => {\n          const itemValue = getItemValue(currentItem);\n          const allMenus = values(layeredState.getMenus());\n          const preparedMenus = cat(map$2(allMenus, LayeredState.extractPreparedMenu));\n          return layeredState.getTriggeringPath(itemValue, v => getItemByValue(container, preparedMenus, v));\n        }).map(triggeringPath => ({\n          primary,\n          triggeringPath\n        })));\n        maybeActivePrimary.fold(() => {\n          extractMenuFromContainer(container).each(primaryMenu => {\n            detail.onRepositionMenu(container, primaryMenu, []);\n          });\n        }, ({primary, triggeringPath}) => {\n          detail.onRepositionMenu(container, primary, triggeringPath);\n        });\n      };\n      const apis = {\n        collapseMenu: collapseMenuApi,\n        highlightPrimary,\n        repositionMenus\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        markers: detail.markers,\n        behaviours: augment(detail.tmenuBehaviours, [\n          Keying.config({\n            mode: 'special',\n            onRight: keyOnItem(onRight),\n            onLeft: keyOnItem(onLeft),\n            onEscape: keyOnItem(onEscape),\n            focusIn: (container, _keyInfo) => {\n              layeredState.getPrimary().each(primary => {\n                dispatch(container, primary.element, focusItem());\n              });\n            }\n          }),\n          Highlighting.config({\n            highlightClass: detail.markers.selectedMenu,\n            itemClass: detail.markers.menu\n          }),\n          Composing.config({\n            find: container => {\n              return Highlighting.getHighlighted(container);\n            }\n          }),\n          Replacing.config({})\n        ]),\n        eventOrder: detail.eventOrder,\n        apis,\n        events\n      };\n    };\n    const collapseItem$1 = constant$1('collapse-item');\n\n    const tieredData = (primary, menus, expansions) => ({\n      primary,\n      menus,\n      expansions\n    });\n    const singleData = (name, menu) => ({\n      primary: name,\n      menus: wrap$1(name, menu),\n      expansions: {}\n    });\n    const collapseItem = text => ({\n      value: generate$6(collapseItem$1()),\n      meta: { text }\n    });\n    const tieredMenu = single({\n      name: 'TieredMenu',\n      configFields: [\n        onStrictKeyboardHandler('onExecute'),\n        onStrictKeyboardHandler('onEscape'),\n        onStrictHandler('onOpenMenu'),\n        onStrictHandler('onOpenSubmenu'),\n        onHandler('onRepositionMenu'),\n        onHandler('onCollapseMenu'),\n        defaulted('highlightOnOpen', HighlightOnOpen.HighlightMenuAndItem),\n        requiredObjOf('data', [\n          required$1('primary'),\n          required$1('menus'),\n          required$1('expansions')\n        ]),\n        defaulted('fakeFocus', false),\n        onHandler('onHighlightItem'),\n        onHandler('onDehighlightItem'),\n        onHandler('onHover'),\n        tieredMenuMarkers(),\n        required$1('dom'),\n        defaulted('navigateOnHover', true),\n        defaulted('stayInDom', false),\n        field('tmenuBehaviours', [\n          Keying,\n          Highlighting,\n          Composing,\n          Replacing\n        ]),\n        defaulted('eventOrder', {})\n      ],\n      apis: {\n        collapseMenu: (apis, tmenu) => {\n          apis.collapseMenu(tmenu);\n        },\n        highlightPrimary: (apis, tmenu) => {\n          apis.highlightPrimary(tmenu);\n        },\n        repositionMenus: (apis, tmenu) => {\n          apis.repositionMenus(tmenu);\n        }\n      },\n      factory: make$6,\n      extraApis: {\n        tieredData,\n        singleData,\n        collapseItem\n      }\n    });\n\n    const makeMenu = (detail, menuSandbox, placementSpec, menuSpec, getBounds) => {\n      const lazySink = () => detail.lazySink(menuSandbox);\n      const layouts = menuSpec.type === 'horizontal' ? {\n        layouts: {\n          onLtr: () => belowOrAbove(),\n          onRtl: () => belowOrAboveRtl()\n        }\n      } : {};\n      const isFirstTierSubmenu = triggeringPaths => triggeringPaths.length === 2;\n      const getSubmenuLayouts = triggeringPaths => isFirstTierSubmenu(triggeringPaths) ? layouts : {};\n      return tieredMenu.sketch({\n        dom: { tag: 'div' },\n        data: menuSpec.data,\n        markers: menuSpec.menu.markers,\n        highlightOnOpen: menuSpec.menu.highlightOnOpen,\n        fakeFocus: menuSpec.menu.fakeFocus,\n        onEscape: () => {\n          Sandboxing.close(menuSandbox);\n          detail.onEscape.map(handler => handler(menuSandbox));\n          return Optional.some(true);\n        },\n        onExecute: () => {\n          return Optional.some(true);\n        },\n        onOpenMenu: (tmenu, menu) => {\n          Positioning.positionWithinBounds(lazySink().getOrDie(), menu, placementSpec, getBounds());\n        },\n        onOpenSubmenu: (tmenu, item, submenu, triggeringPaths) => {\n          const sink = lazySink().getOrDie();\n          Positioning.position(sink, submenu, {\n            anchor: {\n              type: 'submenu',\n              item,\n              ...getSubmenuLayouts(triggeringPaths)\n            }\n          });\n        },\n        onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => {\n          const sink = lazySink().getOrDie();\n          Positioning.positionWithinBounds(sink, primaryMenu, placementSpec, getBounds());\n          each$1(submenuTriggers, st => {\n            const submenuLayouts = getSubmenuLayouts(st.triggeringPath);\n            Positioning.position(sink, st.triggeredMenu, {\n              anchor: {\n                type: 'submenu',\n                item: st.triggeringItem,\n                ...submenuLayouts\n              }\n            });\n          });\n        }\n      });\n    };\n    const factory$m = (detail, spec) => {\n      const isPartOfRelated = (sandbox, queryElem) => {\n        const related = detail.getRelated(sandbox);\n        return related.exists(rel => isPartOf$1(rel, queryElem));\n      };\n      const setContent = (sandbox, thing) => {\n        Sandboxing.setContent(sandbox, thing);\n      };\n      const showAt = (sandbox, thing, placementSpec) => {\n        showWithin(sandbox, thing, placementSpec, Optional.none());\n      };\n      const showWithin = (sandbox, thing, placementSpec, boxElement) => {\n        showWithinBounds(sandbox, thing, placementSpec, () => boxElement.map(elem => box$1(elem)));\n      };\n      const showWithinBounds = (sandbox, thing, placementSpec, getBounds) => {\n        const sink = detail.lazySink(sandbox).getOrDie();\n        Sandboxing.openWhileCloaked(sandbox, thing, () => Positioning.positionWithinBounds(sink, sandbox, placementSpec, getBounds()));\n        Representing.setValue(sandbox, Optional.some({\n          mode: 'position',\n          config: placementSpec,\n          getBounds\n        }));\n      };\n      const showMenuAt = (sandbox, placementSpec, menuSpec) => {\n        showMenuWithinBounds(sandbox, placementSpec, menuSpec, Optional.none);\n      };\n      const showMenuWithinBounds = (sandbox, placementSpec, menuSpec, getBounds) => {\n        const menu = makeMenu(detail, sandbox, placementSpec, menuSpec, getBounds);\n        Sandboxing.open(sandbox, menu);\n        Representing.setValue(sandbox, Optional.some({\n          mode: 'menu',\n          menu\n        }));\n      };\n      const hide = sandbox => {\n        if (Sandboxing.isOpen(sandbox)) {\n          Representing.setValue(sandbox, Optional.none());\n          Sandboxing.close(sandbox);\n        }\n      };\n      const getContent = sandbox => Sandboxing.getState(sandbox);\n      const reposition = sandbox => {\n        if (Sandboxing.isOpen(sandbox)) {\n          Representing.getValue(sandbox).each(state => {\n            switch (state.mode) {\n            case 'menu':\n              Sandboxing.getState(sandbox).each(tieredMenu.repositionMenus);\n              break;\n            case 'position':\n              const sink = detail.lazySink(sandbox).getOrDie();\n              Positioning.positionWithinBounds(sink, sandbox, state.config, state.getBounds());\n              break;\n            }\n          });\n        }\n      };\n      const apis = {\n        setContent,\n        showAt,\n        showWithin,\n        showWithinBounds,\n        showMenuAt,\n        showMenuWithinBounds,\n        hide,\n        getContent,\n        reposition,\n        isOpen: Sandboxing.isOpen\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        behaviours: augment(detail.inlineBehaviours, [\n          Sandboxing.config({\n            isPartOf: (sandbox, data, queryElem) => {\n              return isPartOf$1(data, queryElem) || isPartOfRelated(sandbox, queryElem);\n            },\n            getAttachPoint: sandbox => {\n              return detail.lazySink(sandbox).getOrDie();\n            },\n            onOpen: sandbox => {\n              detail.onShow(sandbox);\n            },\n            onClose: sandbox => {\n              detail.onHide(sandbox);\n            }\n          }),\n          Representing.config({\n            store: {\n              mode: 'memory',\n              initialValue: Optional.none()\n            }\n          }),\n          Receiving.config({\n            channels: {\n              ...receivingChannel$1({\n                isExtraPart: spec.isExtraPart,\n                ...detail.fireDismissalEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({})\n              }),\n              ...receivingChannel({\n                ...detail.fireRepositionEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({}),\n                doReposition: reposition\n              })\n            }\n          })\n        ]),\n        eventOrder: detail.eventOrder,\n        apis\n      };\n    };\n    const InlineView = single({\n      name: 'InlineView',\n      configFields: [\n        required$1('lazySink'),\n        onHandler('onShow'),\n        onHandler('onHide'),\n        optionFunction('onEscape'),\n        field('inlineBehaviours', [\n          Sandboxing,\n          Representing,\n          Receiving\n        ]),\n        optionObjOf('fireDismissalEventInstead', [defaulted('event', dismissRequested())]),\n        optionObjOf('fireRepositionEventInstead', [defaulted('event', repositionRequested())]),\n        defaulted('getRelated', Optional.none),\n        defaulted('isExtraPart', never),\n        defaulted('eventOrder', Optional.none)\n      ],\n      factory: factory$m,\n      apis: {\n        showAt: (apis, component, anchor, thing) => {\n          apis.showAt(component, anchor, thing);\n        },\n        showWithin: (apis, component, anchor, thing, boxElement) => {\n          apis.showWithin(component, anchor, thing, boxElement);\n        },\n        showWithinBounds: (apis, component, anchor, thing, bounds) => {\n          apis.showWithinBounds(component, anchor, thing, bounds);\n        },\n        showMenuAt: (apis, component, anchor, menuSpec) => {\n          apis.showMenuAt(component, anchor, menuSpec);\n        },\n        showMenuWithinBounds: (apis, component, anchor, menuSpec, bounds) => {\n          apis.showMenuWithinBounds(component, anchor, menuSpec, bounds);\n        },\n        hide: (apis, component) => {\n          apis.hide(component);\n        },\n        isOpen: (apis, component) => apis.isOpen(component),\n        getContent: (apis, component) => apis.getContent(component),\n        setContent: (apis, component, thing) => {\n          apis.setContent(component, thing);\n        },\n        reposition: (apis, component) => {\n          apis.reposition(component);\n        }\n      }\n    });\n\n    var global$9 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n    const factory$l = detail => {\n      const events = events$a(detail.action);\n      const tag = detail.dom.tag;\n      const lookupAttr = attr => get$g(detail.dom, 'attributes').bind(attrs => get$g(attrs, attr));\n      const getModAttributes = () => {\n        if (tag === 'button') {\n          const type = lookupAttr('type').getOr('button');\n          const roleAttrs = lookupAttr('role').map(role => ({ role })).getOr({});\n          return {\n            type,\n            ...roleAttrs\n          };\n        } else {\n          const role = lookupAttr('role').getOr('button');\n          return { role };\n        }\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: detail.components,\n        events,\n        behaviours: SketchBehaviours.augment(detail.buttonBehaviours, [\n          Focusing.config({}),\n          Keying.config({\n            mode: 'execution',\n            useSpace: true,\n            useEnter: true\n          })\n        ]),\n        domModification: { attributes: getModAttributes() },\n        eventOrder: detail.eventOrder\n      };\n    };\n    const Button = single({\n      name: 'Button',\n      factory: factory$l,\n      configFields: [\n        defaulted('uid', undefined),\n        required$1('dom'),\n        defaulted('components', []),\n        SketchBehaviours.field('buttonBehaviours', [\n          Focusing,\n          Keying\n        ]),\n        option$3('action'),\n        option$3('role'),\n        defaulted('eventOrder', {})\n      ]\n    });\n\n    const record = spec => {\n      const uid = isSketchSpec(spec) && hasNonNullableKey(spec, 'uid') ? spec.uid : generate$5('memento');\n      const get = anyInSystem => anyInSystem.getSystem().getByUid(uid).getOrDie();\n      const getOpt = anyInSystem => anyInSystem.getSystem().getByUid(uid).toOptional();\n      const asSpec = () => ({\n        ...spec,\n        uid\n      });\n      return {\n        get,\n        getOpt,\n        asSpec\n      };\n    };\n\n    var global$8 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n    const rtlTransform = {\n      'indent': true,\n      'outdent': true,\n      'table-insert-column-after': true,\n      'table-insert-column-before': true,\n      'paste-column-after': true,\n      'paste-column-before': true,\n      'unordered-list': true,\n      'list-bull-circle': true,\n      'list-bull-default': true,\n      'list-bull-square': true\n    };\n    const defaultIconName = 'temporary-placeholder';\n    const defaultIcon = icons => () => get$g(icons, defaultIconName).getOr('!not found!');\n    const getIconName = (name, icons) => {\n      const lcName = name.toLowerCase();\n      if (global$8.isRtl()) {\n        const rtlName = ensureTrailing(lcName, '-rtl');\n        return has$2(icons, rtlName) ? rtlName : lcName;\n      } else {\n        return lcName;\n      }\n    };\n    const lookupIcon = (name, icons) => get$g(icons, getIconName(name, icons));\n    const get$2 = (name, iconProvider) => {\n      const icons = iconProvider();\n      return lookupIcon(name, icons).getOrThunk(defaultIcon(icons));\n    };\n    const getOr = (name, iconProvider, fallbackIcon) => {\n      const icons = iconProvider();\n      return lookupIcon(name, icons).or(fallbackIcon).getOrThunk(defaultIcon(icons));\n    };\n    const needsRtlTransform = iconName => global$8.isRtl() ? has$2(rtlTransform, iconName) : false;\n    const addFocusableBehaviour = () => config('add-focusable', [runOnAttached(comp => {\n        child(comp.element, 'svg').each(svg => set$9(svg, 'focusable', 'false'));\n      })]);\n    const renderIcon$2 = (spec, iconName, icons, fallbackIcon) => {\n      var _a, _b;\n      const rtlIconClasses = needsRtlTransform(iconName) ? ['tox-icon--flip'] : [];\n      const iconHtml = get$g(icons, getIconName(iconName, icons)).or(fallbackIcon).getOrThunk(defaultIcon(icons));\n      return {\n        dom: {\n          tag: spec.tag,\n          attributes: (_a = spec.attributes) !== null && _a !== void 0 ? _a : {},\n          classes: spec.classes.concat(rtlIconClasses),\n          innerHtml: iconHtml\n        },\n        behaviours: derive$1([\n          ...(_b = spec.behaviours) !== null && _b !== void 0 ? _b : [],\n          addFocusableBehaviour()\n        ])\n      };\n    };\n    const render$3 = (iconName, spec, iconProvider, fallbackIcon = Optional.none()) => renderIcon$2(spec, iconName, iconProvider(), fallbackIcon);\n    const renderFirst = (iconNames, spec, iconProvider) => {\n      const icons = iconProvider();\n      const iconName = find$5(iconNames, name => has$2(icons, getIconName(name, icons)));\n      return renderIcon$2(spec, iconName.getOr(defaultIconName), icons, Optional.none());\n    };\n\n    const notificationIconMap = {\n      success: 'checkmark',\n      error: 'warning',\n      err: 'error',\n      warning: 'warning',\n      warn: 'warning',\n      info: 'info'\n    };\n    const factory$k = detail => {\n      const memBannerText = record({\n        dom: {\n          tag: 'p',\n          innerHtml: detail.translationProvider(detail.text)\n        },\n        behaviours: derive$1([Replacing.config({})])\n      });\n      const renderPercentBar = percent => ({\n        dom: {\n          tag: 'div',\n          classes: ['tox-bar'],\n          styles: { width: `${ percent }%` }\n        }\n      });\n      const renderPercentText = percent => ({\n        dom: {\n          tag: 'div',\n          classes: ['tox-text'],\n          innerHtml: `${ percent }%`\n        }\n      });\n      const memBannerProgress = record({\n        dom: {\n          tag: 'div',\n          classes: detail.progress ? [\n            'tox-progress-bar',\n            'tox-progress-indicator'\n          ] : ['tox-progress-bar']\n        },\n        components: [\n          {\n            dom: {\n              tag: 'div',\n              classes: ['tox-bar-container']\n            },\n            components: [renderPercentBar(0)]\n          },\n          renderPercentText(0)\n        ],\n        behaviours: derive$1([Replacing.config({})])\n      });\n      const updateProgress = (comp, percent) => {\n        if (comp.getSystem().isConnected()) {\n          memBannerProgress.getOpt(comp).each(progress => {\n            Replacing.set(progress, [\n              {\n                dom: {\n                  tag: 'div',\n                  classes: ['tox-bar-container']\n                },\n                components: [renderPercentBar(percent)]\n              },\n              renderPercentText(percent)\n            ]);\n          });\n        }\n      };\n      const updateText = (comp, text) => {\n        if (comp.getSystem().isConnected()) {\n          const banner = memBannerText.get(comp);\n          Replacing.set(banner, [text$1(text)]);\n        }\n      };\n      const apis = {\n        updateProgress,\n        updateText\n      };\n      const iconChoices = flatten([\n        detail.icon.toArray(),\n        detail.level.toArray(),\n        detail.level.bind(level => Optional.from(notificationIconMap[level])).toArray()\n      ]);\n      const memButton = record(Button.sketch({\n        dom: {\n          tag: 'button',\n          classes: [\n            'tox-notification__dismiss',\n            'tox-button',\n            'tox-button--naked',\n            'tox-button--icon'\n          ]\n        },\n        components: [render$3('close', {\n            tag: 'div',\n            classes: ['tox-icon'],\n            attributes: { 'aria-label': detail.translationProvider('Close') }\n          }, detail.iconProvider)],\n        action: comp => {\n          detail.onAction(comp);\n        }\n      }));\n      const notificationIconSpec = renderFirst(iconChoices, {\n        tag: 'div',\n        classes: ['tox-notification__icon']\n      }, detail.iconProvider);\n      const notificationBodySpec = {\n        dom: {\n          tag: 'div',\n          classes: ['tox-notification__body']\n        },\n        components: [memBannerText.asSpec()],\n        behaviours: derive$1([Replacing.config({})])\n      };\n      const components = [\n        notificationIconSpec,\n        notificationBodySpec\n      ];\n      return {\n        uid: detail.uid,\n        dom: {\n          tag: 'div',\n          attributes: { role: 'alert' },\n          classes: detail.level.map(level => [\n            'tox-notification',\n            'tox-notification--in',\n            `tox-notification--${ level }`\n          ]).getOr([\n            'tox-notification',\n            'tox-notification--in'\n          ])\n        },\n        behaviours: derive$1([\n          Focusing.config({}),\n          config('notification-events', [run$1(focusin(), comp => {\n              memButton.getOpt(comp).each(Focusing.focus);\n            })])\n        ]),\n        components: components.concat(detail.progress ? [memBannerProgress.asSpec()] : []).concat(!detail.closeButton ? [] : [memButton.asSpec()]),\n        apis\n      };\n    };\n    const Notification = single({\n      name: 'Notification',\n      factory: factory$k,\n      configFields: [\n        option$3('level'),\n        required$1('progress'),\n        option$3('icon'),\n        required$1('onAction'),\n        required$1('text'),\n        required$1('iconProvider'),\n        required$1('translationProvider'),\n        defaultedBoolean('closeButton', true)\n      ],\n      apis: {\n        updateProgress: (apis, comp, percent) => {\n          apis.updateProgress(comp, percent);\n        },\n        updateText: (apis, comp, text) => {\n          apis.updateText(comp, text);\n        }\n      }\n    });\n\n    var NotificationManagerImpl = (editor, extras, uiMothership) => {\n      const sharedBackstage = extras.backstage.shared;\n      const getBounds = () => {\n        const contentArea = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n        const win$1 = win();\n        const x = clamp(win$1.x, contentArea.x, contentArea.right);\n        const y = clamp(win$1.y, contentArea.y, contentArea.bottom);\n        const right = Math.max(contentArea.right, win$1.right);\n        const bottom = Math.max(contentArea.bottom, win$1.bottom);\n        return Optional.some(bounds(x, y, right - x, bottom - y));\n      };\n      const open = (settings, closeCallback) => {\n        const close = () => {\n          closeCallback();\n          InlineView.hide(notificationWrapper);\n        };\n        const notification = build$1(Notification.sketch({\n          text: settings.text,\n          level: contains$2([\n            'success',\n            'error',\n            'warning',\n            'warn',\n            'info'\n          ], settings.type) ? settings.type : undefined,\n          progress: settings.progressBar === true,\n          icon: settings.icon,\n          closeButton: settings.closeButton,\n          onAction: close,\n          iconProvider: sharedBackstage.providers.icons,\n          translationProvider: sharedBackstage.providers.translate\n        }));\n        const notificationWrapper = build$1(InlineView.sketch({\n          dom: {\n            tag: 'div',\n            classes: ['tox-notifications-container']\n          },\n          lazySink: sharedBackstage.getSink,\n          fireDismissalEventInstead: {},\n          ...sharedBackstage.header.isPositionedAtTop() ? {} : { fireRepositionEventInstead: {} }\n        }));\n        uiMothership.add(notificationWrapper);\n        if (isNumber(settings.timeout) && settings.timeout > 0) {\n          global$9.setEditorTimeout(editor, () => {\n            close();\n          }, settings.timeout);\n        }\n        const reposition = () => {\n          const notificationSpec = premade(notification);\n          const anchorOverrides = { maxHeightFunction: expandable$1() };\n          const allNotifications = editor.notificationManager.getNotifications();\n          if (allNotifications[0] === thisNotification) {\n            const anchor = {\n              ...sharedBackstage.anchors.banner(),\n              overrides: anchorOverrides\n            };\n            InlineView.showWithinBounds(notificationWrapper, notificationSpec, { anchor }, getBounds);\n          } else {\n            indexOf(allNotifications, thisNotification).each(idx => {\n              const previousNotification = allNotifications[idx - 1].getEl();\n              const nodeAnchor = {\n                type: 'node',\n                root: body(),\n                node: Optional.some(SugarElement.fromDom(previousNotification)),\n                overrides: anchorOverrides,\n                layouts: {\n                  onRtl: () => [south$2],\n                  onLtr: () => [south$2]\n                }\n              };\n              InlineView.showWithinBounds(notificationWrapper, notificationSpec, { anchor: nodeAnchor }, getBounds);\n            });\n          }\n        };\n        const thisNotification = {\n          close,\n          reposition,\n          text: nuText => {\n            Notification.updateText(notification, nuText);\n          },\n          settings,\n          getEl: () => notification.element.dom,\n          progressBar: {\n            value: percent => {\n              Notification.updateProgress(notification, percent);\n            }\n          }\n        };\n        return thisNotification;\n      };\n      const close = notification => {\n        notification.close();\n      };\n      const getArgs = notification => {\n        return notification.settings;\n      };\n      return {\n        open,\n        close,\n        getArgs\n      };\n    };\n\n    var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n    var global$6 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n    var global$5 = tinymce.util.Tools.resolve('tinymce.Env');\n\n    var ToolbarMode$1;\n    (function (ToolbarMode) {\n      ToolbarMode['default'] = 'wrap';\n      ToolbarMode['floating'] = 'floating';\n      ToolbarMode['sliding'] = 'sliding';\n      ToolbarMode['scrolling'] = 'scrolling';\n    }(ToolbarMode$1 || (ToolbarMode$1 = {})));\n    var ToolbarLocation$1;\n    (function (ToolbarLocation) {\n      ToolbarLocation['auto'] = 'auto';\n      ToolbarLocation['top'] = 'top';\n      ToolbarLocation['bottom'] = 'bottom';\n    }(ToolbarLocation$1 || (ToolbarLocation$1 = {})));\n    const option$2 = name => editor => editor.options.get(name);\n    const wrapOptional = fn => editor => Optional.from(fn(editor));\n    const register$e = editor => {\n      const isPhone = global$5.deviceType.isPhone();\n      const isMobile = global$5.deviceType.isTablet() || isPhone;\n      const registerOption = editor.options.register;\n      const stringOrFalseProcessor = value => isString(value) || value === false;\n      const stringOrNumberProcessor = value => isString(value) || isNumber(value);\n      registerOption('skin', {\n        processor: value => isString(value) || value === false,\n        default: 'oxide'\n      });\n      registerOption('skin_url', { processor: 'string' });\n      registerOption('height', {\n        processor: stringOrNumberProcessor,\n        default: Math.max(editor.getElement().offsetHeight, 400)\n      });\n      registerOption('width', {\n        processor: stringOrNumberProcessor,\n        default: global$7.DOM.getStyle(editor.getElement(), 'width')\n      });\n      registerOption('min_height', {\n        processor: 'number',\n        default: 100\n      });\n      registerOption('min_width', { processor: 'number' });\n      registerOption('max_height', { processor: 'number' });\n      registerOption('max_width', { processor: 'number' });\n      registerOption('style_formats', { processor: 'object[]' });\n      registerOption('style_formats_merge', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('style_formats_autohide', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('line_height_formats', {\n        processor: 'string',\n        default: '1 1.1 1.2 1.3 1.4 1.5 2'\n      });\n      registerOption('font_family_formats', {\n        processor: 'string',\n        default: 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats'\n      });\n      registerOption('font_size_formats', {\n        processor: 'string',\n        default: '8pt 10pt 12pt 14pt 18pt 24pt 36pt'\n      });\n      registerOption('block_formats', {\n        processor: 'string',\n        default: 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre'\n      });\n      registerOption('content_langs', { processor: 'object[]' });\n      registerOption('removed_menuitems', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('menubar', {\n        processor: value => isString(value) || isBoolean(value),\n        default: !isPhone\n      });\n      registerOption('menu', {\n        processor: 'object',\n        default: {}\n      });\n      registerOption('toolbar', {\n        processor: value => {\n          if (isBoolean(value) || isString(value) || isArray(value)) {\n            return {\n              value,\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be a boolean, string or array.'\n            };\n          }\n        },\n        default: true\n      });\n      range$2(9, num => {\n        registerOption('toolbar' + (num + 1), { processor: 'string' });\n      });\n      registerOption('toolbar_mode', {\n        processor: 'string',\n        default: isMobile ? 'scrolling' : 'floating'\n      });\n      registerOption('toolbar_groups', {\n        processor: 'object',\n        default: {}\n      });\n      registerOption('toolbar_location', {\n        processor: 'string',\n        default: ToolbarLocation$1.auto\n      });\n      registerOption('toolbar_persist', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('toolbar_sticky', {\n        processor: 'boolean',\n        default: editor.inline\n      });\n      registerOption('toolbar_sticky_offset', {\n        processor: 'number',\n        default: 0\n      });\n      registerOption('fixed_toolbar_container', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('fixed_toolbar_container_target', { processor: 'object' });\n      registerOption('file_picker_callback', { processor: 'function' });\n      registerOption('file_picker_validator_handler', { processor: 'function' });\n      registerOption('file_picker_types', { processor: 'string' });\n      registerOption('typeahead_urls', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('anchor_top', {\n        processor: stringOrFalseProcessor,\n        default: '#top'\n      });\n      registerOption('anchor_bottom', {\n        processor: stringOrFalseProcessor,\n        default: '#bottom'\n      });\n      registerOption('draggable_modal', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('statusbar', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('elementpath', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('branding', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('promotion', {\n        processor: 'boolean',\n        default: true\n      });\n      registerOption('resize', {\n        processor: value => value === 'both' || isBoolean(value),\n        default: !global$5.deviceType.isTouch()\n      });\n      registerOption('sidebar_show', { processor: 'string' });\n    };\n    const isReadOnly = option$2('readonly');\n    const getHeightOption = option$2('height');\n    const getWidthOption = option$2('width');\n    const getMinWidthOption = wrapOptional(option$2('min_width'));\n    const getMinHeightOption = wrapOptional(option$2('min_height'));\n    const getMaxWidthOption = wrapOptional(option$2('max_width'));\n    const getMaxHeightOption = wrapOptional(option$2('max_height'));\n    const getUserStyleFormats = wrapOptional(option$2('style_formats'));\n    const shouldMergeStyleFormats = option$2('style_formats_merge');\n    const shouldAutoHideStyleFormats = option$2('style_formats_autohide');\n    const getContentLanguages = option$2('content_langs');\n    const getRemovedMenuItems = option$2('removed_menuitems');\n    const getToolbarMode = option$2('toolbar_mode');\n    const getToolbarGroups = option$2('toolbar_groups');\n    const getToolbarLocation = option$2('toolbar_location');\n    const fixedContainerSelector = option$2('fixed_toolbar_container');\n    const fixedToolbarContainerTarget = option$2('fixed_toolbar_container_target');\n    const isToolbarPersist = option$2('toolbar_persist');\n    const getStickyToolbarOffset = option$2('toolbar_sticky_offset');\n    const getMenubar = option$2('menubar');\n    const getToolbar = option$2('toolbar');\n    const getFilePickerCallback = option$2('file_picker_callback');\n    const getFilePickerValidatorHandler = option$2('file_picker_validator_handler');\n    const getFilePickerTypes = option$2('file_picker_types');\n    const useTypeaheadUrls = option$2('typeahead_urls');\n    const getAnchorTop = option$2('anchor_top');\n    const getAnchorBottom = option$2('anchor_bottom');\n    const isDraggableModal$1 = option$2('draggable_modal');\n    const useStatusBar = option$2('statusbar');\n    const useElementPath = option$2('elementpath');\n    const useBranding = option$2('branding');\n    const getResize = option$2('resize');\n    const getPasteAsText = option$2('paste_as_text');\n    const getSidebarShow = option$2('sidebar_show');\n    const promotionEnabled = option$2('promotion');\n    const isSkinDisabled = editor => editor.options.get('skin') === false;\n    const isMenubarEnabled = editor => editor.options.get('menubar') !== false;\n    const getSkinUrl = editor => {\n      const skinUrl = editor.options.get('skin_url');\n      if (isSkinDisabled(editor)) {\n        return skinUrl;\n      } else {\n        if (skinUrl) {\n          return editor.documentBaseURI.toAbsolute(skinUrl);\n        } else {\n          const skin = editor.options.get('skin');\n          return global$6.baseURL + '/skins/ui/' + skin;\n        }\n      }\n    };\n    const getLineHeightFormats = editor => editor.options.get('line_height_formats').split(' ');\n    const isToolbarEnabled = editor => {\n      const toolbar = getToolbar(editor);\n      const isToolbarString = isString(toolbar);\n      const isToolbarObjectArray = isArray(toolbar) && toolbar.length > 0;\n      return !isMultipleToolbars(editor) && (isToolbarObjectArray || isToolbarString || toolbar === true);\n    };\n    const getMultipleToolbarsOption = editor => {\n      const toolbars = range$2(9, num => editor.options.get('toolbar' + (num + 1)));\n      const toolbarArray = filter$2(toolbars, isString);\n      return someIf(toolbarArray.length > 0, toolbarArray);\n    };\n    const isMultipleToolbars = editor => getMultipleToolbarsOption(editor).fold(() => {\n      const toolbar = getToolbar(editor);\n      return isArrayOf(toolbar, isString) && toolbar.length > 0;\n    }, always);\n    const isToolbarLocationBottom = editor => getToolbarLocation(editor) === ToolbarLocation$1.bottom;\n    const fixedContainerTarget = editor => {\n      var _a;\n      if (!editor.inline) {\n        return Optional.none();\n      }\n      const selector = (_a = fixedContainerSelector(editor)) !== null && _a !== void 0 ? _a : '';\n      if (selector.length > 0) {\n        return descendant(body(), selector);\n      }\n      const element = fixedToolbarContainerTarget(editor);\n      if (isNonNullable(element)) {\n        return Optional.some(SugarElement.fromDom(element));\n      }\n      return Optional.none();\n    };\n    const useFixedContainer = editor => editor.inline && fixedContainerTarget(editor).isSome();\n    const getUiContainer = editor => {\n      const fixedContainer = fixedContainerTarget(editor);\n      return fixedContainer.getOrThunk(() => getContentContainer(getRootNode(SugarElement.fromDom(editor.getElement()))));\n    };\n    const isDistractionFree = editor => editor.inline && !isMenubarEnabled(editor) && !isToolbarEnabled(editor) && !isMultipleToolbars(editor);\n    const isStickyToolbar = editor => {\n      const isStickyToolbar = editor.options.get('toolbar_sticky');\n      return (isStickyToolbar || editor.inline) && !useFixedContainer(editor) && !isDistractionFree(editor);\n    };\n    const getMenus = editor => {\n      const menu = editor.options.get('menu');\n      return map$1(menu, menu => ({\n        ...menu,\n        items: menu.items\n      }));\n    };\n\n    var Options = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        get ToolbarMode () { return ToolbarMode$1; },\n        get ToolbarLocation () { return ToolbarLocation$1; },\n        register: register$e,\n        getSkinUrl: getSkinUrl,\n        isReadOnly: isReadOnly,\n        isSkinDisabled: isSkinDisabled,\n        getHeightOption: getHeightOption,\n        getWidthOption: getWidthOption,\n        getMinWidthOption: getMinWidthOption,\n        getMinHeightOption: getMinHeightOption,\n        getMaxWidthOption: getMaxWidthOption,\n        getMaxHeightOption: getMaxHeightOption,\n        getUserStyleFormats: getUserStyleFormats,\n        shouldMergeStyleFormats: shouldMergeStyleFormats,\n        shouldAutoHideStyleFormats: shouldAutoHideStyleFormats,\n        getLineHeightFormats: getLineHeightFormats,\n        getContentLanguages: getContentLanguages,\n        getRemovedMenuItems: getRemovedMenuItems,\n        isMenubarEnabled: isMenubarEnabled,\n        isMultipleToolbars: isMultipleToolbars,\n        isToolbarEnabled: isToolbarEnabled,\n        isToolbarPersist: isToolbarPersist,\n        getMultipleToolbarsOption: getMultipleToolbarsOption,\n        getUiContainer: getUiContainer,\n        useFixedContainer: useFixedContainer,\n        getToolbarMode: getToolbarMode,\n        isDraggableModal: isDraggableModal$1,\n        isDistractionFree: isDistractionFree,\n        isStickyToolbar: isStickyToolbar,\n        getStickyToolbarOffset: getStickyToolbarOffset,\n        getToolbarLocation: getToolbarLocation,\n        isToolbarLocationBottom: isToolbarLocationBottom,\n        getToolbarGroups: getToolbarGroups,\n        getMenus: getMenus,\n        getMenubar: getMenubar,\n        getToolbar: getToolbar,\n        getFilePickerCallback: getFilePickerCallback,\n        getFilePickerTypes: getFilePickerTypes,\n        useTypeaheadUrls: useTypeaheadUrls,\n        getAnchorTop: getAnchorTop,\n        getAnchorBottom: getAnchorBottom,\n        getFilePickerValidatorHandler: getFilePickerValidatorHandler,\n        useStatusBar: useStatusBar,\n        useElementPath: useElementPath,\n        promotionEnabled: promotionEnabled,\n        useBranding: useBranding,\n        getResize: getResize,\n        getPasteAsText: getPasteAsText,\n        getSidebarShow: getSidebarShow\n    });\n\n    const autocompleteSelector = '[data-mce-autocompleter]';\n    const detect = elm => closest$1(elm, autocompleteSelector);\n    const findIn = elm => descendant(elm, autocompleteSelector);\n\n    const setup$e = (api, editor) => {\n      const redirectKeyToItem = (item, e) => {\n        emitWith(item, keydown(), { raw: e });\n      };\n      const getItem = () => api.getMenu().bind(Highlighting.getHighlighted);\n      editor.on('keydown', e => {\n        const keyCode = e.which;\n        if (!api.isActive()) {\n          return;\n        }\n        if (api.isMenuOpen()) {\n          if (keyCode === 13) {\n            getItem().each(emitExecute);\n            e.preventDefault();\n          } else if (keyCode === 40) {\n            getItem().fold(() => {\n              api.getMenu().each(Highlighting.highlightFirst);\n            }, item => {\n              redirectKeyToItem(item, e);\n            });\n            e.preventDefault();\n            e.stopImmediatePropagation();\n          } else if (keyCode === 37 || keyCode === 38 || keyCode === 39) {\n            getItem().each(item => {\n              redirectKeyToItem(item, e);\n              e.preventDefault();\n              e.stopImmediatePropagation();\n            });\n          }\n        } else {\n          if (keyCode === 13 || keyCode === 38 || keyCode === 40) {\n            api.cancelIfNecessary();\n          }\n        }\n      });\n      editor.on('NodeChange', e => {\n        if (api.isActive() && !api.isProcessingAction() && detect(SugarElement.fromDom(e.element)).isNone()) {\n          api.cancelIfNecessary();\n        }\n      });\n    };\n    const AutocompleterEditorEvents = { setup: setup$e };\n\n    var ItemResponse;\n    (function (ItemResponse) {\n      ItemResponse[ItemResponse['CLOSE_ON_EXECUTE'] = 0] = 'CLOSE_ON_EXECUTE';\n      ItemResponse[ItemResponse['BUBBLE_TO_SANDBOX'] = 1] = 'BUBBLE_TO_SANDBOX';\n    }(ItemResponse || (ItemResponse = {})));\n    var ItemResponse$1 = ItemResponse;\n\n    const navClass = 'tox-menu-nav__js';\n    const selectableClass = 'tox-collection__item';\n    const colorClass = 'tox-swatch';\n    const presetClasses = {\n      normal: navClass,\n      color: colorClass\n    };\n    const tickedClass = 'tox-collection__item--enabled';\n    const groupHeadingClass = 'tox-collection__group-heading';\n    const iconClass = 'tox-collection__item-icon';\n    const textClass = 'tox-collection__item-label';\n    const accessoryClass = 'tox-collection__item-accessory';\n    const caretClass = 'tox-collection__item-caret';\n    const checkmarkClass = 'tox-collection__item-checkmark';\n    const activeClass = 'tox-collection__item--active';\n    const containerClass = 'tox-collection__item-container';\n    const containerColumnClass = 'tox-collection__item-container--column';\n    const containerRowClass = 'tox-collection__item-container--row';\n    const containerAlignRightClass = 'tox-collection__item-container--align-right';\n    const containerAlignLeftClass = 'tox-collection__item-container--align-left';\n    const containerValignTopClass = 'tox-collection__item-container--valign-top';\n    const containerValignMiddleClass = 'tox-collection__item-container--valign-middle';\n    const containerValignBottomClass = 'tox-collection__item-container--valign-bottom';\n    const classForPreset = presets => get$g(presetClasses, presets).getOr(navClass);\n\n    const forMenu = presets => {\n      if (presets === 'color') {\n        return 'tox-swatches';\n      } else {\n        return 'tox-menu';\n      }\n    };\n    const classes = presets => ({\n      backgroundMenu: 'tox-background-menu',\n      selectedMenu: 'tox-selected-menu',\n      selectedItem: 'tox-collection__item--active',\n      hasIcons: 'tox-menu--has-icons',\n      menu: forMenu(presets),\n      tieredMenu: 'tox-tiered-menu'\n    });\n\n    const markers = presets => {\n      const menuClasses = classes(presets);\n      return {\n        backgroundMenu: menuClasses.backgroundMenu,\n        selectedMenu: menuClasses.selectedMenu,\n        menu: menuClasses.menu,\n        selectedItem: menuClasses.selectedItem,\n        item: classForPreset(presets)\n      };\n    };\n    const dom$1 = (hasIcons, columns, presets) => {\n      const menuClasses = classes(presets);\n      return {\n        tag: 'div',\n        classes: flatten([\n          [\n            menuClasses.menu,\n            `tox-menu-${ columns }-column`\n          ],\n          hasIcons ? [menuClasses.hasIcons] : []\n        ])\n      };\n    };\n    const components = [Menu.parts.items({})];\n    const part = (hasIcons, columns, presets) => {\n      const menuClasses = classes(presets);\n      const d = {\n        tag: 'div',\n        classes: flatten([[menuClasses.tieredMenu]])\n      };\n      return {\n        dom: d,\n        markers: markers(presets)\n      };\n    };\n\n    const schema$l = constant$1([\n      option$3('data'),\n      defaulted('inputAttributes', {}),\n      defaulted('inputStyles', {}),\n      defaulted('tag', 'input'),\n      defaulted('inputClasses', []),\n      onHandler('onSetValue'),\n      defaulted('styles', {}),\n      defaulted('eventOrder', {}),\n      field('inputBehaviours', [\n        Representing,\n        Focusing\n      ]),\n      defaulted('selectOnFocus', true)\n    ]);\n    const focusBehaviours = detail => derive$1([Focusing.config({\n        onFocus: !detail.selectOnFocus ? noop : component => {\n          const input = component.element;\n          const value = get$6(input);\n          input.dom.setSelectionRange(0, value.length);\n        }\n      })]);\n    const behaviours = detail => ({\n      ...focusBehaviours(detail),\n      ...augment(detail.inputBehaviours, [Representing.config({\n          store: {\n            mode: 'manual',\n            ...detail.data.map(data => ({ initialValue: data })).getOr({}),\n            getValue: input => {\n              return get$6(input.element);\n            },\n            setValue: (input, data) => {\n              const current = get$6(input.element);\n              if (current !== data) {\n                set$5(input.element, data);\n              }\n            }\n          },\n          onSetValue: detail.onSetValue\n        })])\n    });\n    const dom = detail => ({\n      tag: detail.tag,\n      attributes: {\n        type: 'text',\n        ...detail.inputAttributes\n      },\n      styles: detail.inputStyles,\n      classes: detail.inputClasses\n    });\n\n    const factory$j = (detail, _spec) => ({\n      uid: detail.uid,\n      dom: dom(detail),\n      components: [],\n      behaviours: behaviours(detail),\n      eventOrder: detail.eventOrder\n    });\n    const Input = single({\n      name: 'Input',\n      configFields: schema$l(),\n      factory: factory$j\n    });\n\n    const refetchTriggerEvent = generate$6('refetch-trigger-event');\n    const redirectMenuItemInteractionEvent = generate$6('redirect-menu-item-interaction');\n\n    const menuSearcherClass = 'tox-menu__searcher';\n    const findWithinSandbox = sandboxComp => {\n      return descendant(sandboxComp.element, `.${ menuSearcherClass }`).bind(inputElem => sandboxComp.getSystem().getByDom(inputElem).toOptional());\n    };\n    const findWithinMenu = findWithinSandbox;\n    const restoreState = (inputComp, searcherState) => {\n      Representing.setValue(inputComp, searcherState.fetchPattern);\n      inputComp.element.dom.selectionStart = searcherState.selectionStart;\n      inputComp.element.dom.selectionEnd = searcherState.selectionEnd;\n    };\n    const saveState = inputComp => {\n      const fetchPattern = Representing.getValue(inputComp);\n      const selectionStart = inputComp.element.dom.selectionStart;\n      const selectionEnd = inputComp.element.dom.selectionEnd;\n      return {\n        fetchPattern,\n        selectionStart,\n        selectionEnd\n      };\n    };\n    const setActiveDescendant = (inputComp, active) => {\n      getOpt(active.element, 'id').each(id => set$9(inputComp.element, 'aria-activedescendant', id));\n    };\n    const renderMenuSearcher = spec => {\n      const handleByBrowser = (comp, se) => {\n        se.cut();\n        return Optional.none();\n      };\n      const handleByHighlightedItem = (comp, se) => {\n        const eventData = {\n          interactionEvent: se.event,\n          eventType: se.event.raw.type\n        };\n        emitWith(comp, redirectMenuItemInteractionEvent, eventData);\n        return Optional.some(true);\n      };\n      const customSearcherEventsName = 'searcher-events';\n      return {\n        dom: {\n          tag: 'div',\n          classes: [selectableClass]\n        },\n        components: [Input.sketch({\n            inputClasses: [\n              menuSearcherClass,\n              'tox-textfield'\n            ],\n            inputAttributes: {\n              ...spec.placeholder.map(placeholder => ({ placeholder: spec.i18n(placeholder) })).getOr({}),\n              'type': 'search',\n              'aria-autocomplete': 'list'\n            },\n            inputBehaviours: derive$1([\n              config(customSearcherEventsName, [\n                run$1(input(), inputComp => {\n                  emit(inputComp, refetchTriggerEvent);\n                }),\n                run$1(keydown(), (inputComp, se) => {\n                  if (se.event.raw.key === 'Escape') {\n                    se.stop();\n                  }\n                })\n              ]),\n              Keying.config({\n                mode: 'special',\n                onLeft: handleByBrowser,\n                onRight: handleByBrowser,\n                onSpace: handleByBrowser,\n                onEnter: handleByHighlightedItem,\n                onEscape: handleByHighlightedItem,\n                onUp: handleByHighlightedItem,\n                onDown: handleByHighlightedItem\n              })\n            ]),\n            eventOrder: {\n              keydown: [\n                customSearcherEventsName,\n                Keying.name()\n              ]\n            }\n          })]\n      };\n    };\n\n    const searchResultsClass = 'tox-collection--results__js';\n    const augmentWithAria = item => {\n      var _a;\n      if (item.dom) {\n        return {\n          ...item,\n          dom: {\n            ...item.dom,\n            attributes: {\n              ...(_a = item.dom.attributes) !== null && _a !== void 0 ? _a : {},\n              'id': generate$6('aria-item-search-result-id'),\n              'aria-selected': 'false'\n            }\n          }\n        };\n      } else {\n        return item;\n      }\n    };\n\n    const chunk = (rowDom, numColumns) => items => {\n      const chunks = chunk$1(items, numColumns);\n      return map$2(chunks, c => ({\n        dom: rowDom,\n        components: c\n      }));\n    };\n    const forSwatch = columns => ({\n      dom: {\n        tag: 'div',\n        classes: [\n          'tox-menu',\n          'tox-swatches-menu'\n        ]\n      },\n      components: [{\n          dom: {\n            tag: 'div',\n            classes: ['tox-swatches']\n          },\n          components: [Menu.parts.items({\n              preprocess: columns !== 'auto' ? chunk({\n                tag: 'div',\n                classes: ['tox-swatches__row']\n              }, columns) : identity\n            })]\n        }]\n    });\n    const forToolbar = columns => ({\n      dom: {\n        tag: 'div',\n        classes: [\n          'tox-menu',\n          'tox-collection',\n          'tox-collection--toolbar',\n          'tox-collection--toolbar-lg'\n        ]\n      },\n      components: [Menu.parts.items({\n          preprocess: chunk({\n            tag: 'div',\n            classes: ['tox-collection__group']\n          }, columns)\n        })]\n    });\n    const preprocessCollection = (items, isSeparator) => {\n      const allSplits = [];\n      let currentSplit = [];\n      each$1(items, (item, i) => {\n        if (isSeparator(item, i)) {\n          if (currentSplit.length > 0) {\n            allSplits.push(currentSplit);\n          }\n          currentSplit = [];\n          if (has$2(item.dom, 'innerHtml') || item.components && item.components.length > 0) {\n            currentSplit.push(item);\n          }\n        } else {\n          currentSplit.push(item);\n        }\n      });\n      if (currentSplit.length > 0) {\n        allSplits.push(currentSplit);\n      }\n      return map$2(allSplits, s => ({\n        dom: {\n          tag: 'div',\n          classes: ['tox-collection__group']\n        },\n        components: s\n      }));\n    };\n    const insertItemsPlaceholder = (columns, initItems, onItem) => {\n      return Menu.parts.items({\n        preprocess: rawItems => {\n          const enrichedItems = map$2(rawItems, onItem);\n          if (columns !== 'auto' && columns > 1) {\n            return chunk({\n              tag: 'div',\n              classes: ['tox-collection__group']\n            }, columns)(enrichedItems);\n          } else {\n            return preprocessCollection(enrichedItems, (_item, i) => initItems[i].type === 'separator');\n          }\n        }\n      });\n    };\n    const forCollection = (columns, initItems, _hasIcons = true) => ({\n      dom: {\n        tag: 'div',\n        classes: [\n          'tox-menu',\n          'tox-collection'\n        ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])\n      },\n      components: [insertItemsPlaceholder(columns, initItems, identity)]\n    });\n    const forCollectionWithSearchResults = (columns, initItems, _hasIcons = true) => {\n      const ariaControlsSearchResults = generate$6('aria-controls-search-results');\n      return {\n        dom: {\n          tag: 'div',\n          classes: [\n            'tox-menu',\n            'tox-collection',\n            searchResultsClass\n          ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid']),\n          attributes: { id: ariaControlsSearchResults }\n        },\n        components: [insertItemsPlaceholder(columns, initItems, augmentWithAria)]\n      };\n    };\n    const forCollectionWithSearchField = (columns, initItems, searchField) => {\n      const ariaControlsSearchResults = generate$6('aria-controls-search-results');\n      return {\n        dom: {\n          tag: 'div',\n          classes: [\n            'tox-menu',\n            'tox-collection'\n          ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])\n        },\n        components: [\n          renderMenuSearcher({\n            i18n: global$8.translate,\n            placeholder: searchField.placeholder\n          }),\n          {\n            dom: {\n              tag: 'div',\n              classes: [\n                ...columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'],\n                searchResultsClass\n              ],\n              attributes: { id: ariaControlsSearchResults }\n            },\n            components: [insertItemsPlaceholder(columns, initItems, augmentWithAria)]\n          }\n        ]\n      };\n    };\n    const forHorizontalCollection = (initItems, _hasIcons = true) => ({\n      dom: {\n        tag: 'div',\n        classes: [\n          'tox-collection',\n          'tox-collection--horizontal'\n        ]\n      },\n      components: [Menu.parts.items({ preprocess: items => preprocessCollection(items, (_item, i) => initItems[i].type === 'separator') })]\n    });\n\n    const menuHasIcons = xs => exists(xs, item => 'icon' in item && item.icon !== undefined);\n    const handleError = error => {\n      console.error(formatError(error));\n      console.log(error);\n      return Optional.none();\n    };\n    const createHorizontalPartialMenuWithAlloyItems = (value, _hasIcons, items, _columns, _menuLayout) => {\n      const structure = forHorizontalCollection(items);\n      return {\n        value,\n        dom: structure.dom,\n        components: structure.components,\n        items\n      };\n    };\n    const createPartialMenuWithAlloyItems = (value, hasIcons, items, columns, menuLayout) => {\n      const getNormalStructure = () => {\n        if (menuLayout.menuType !== 'searchable') {\n          return forCollection(columns, items);\n        } else {\n          return menuLayout.searchMode.searchMode === 'search-with-field' ? forCollectionWithSearchField(columns, items, menuLayout.searchMode) : forCollectionWithSearchResults(columns, items);\n        }\n      };\n      if (menuLayout.menuType === 'color') {\n        const structure = forSwatch(columns);\n        return {\n          value,\n          dom: structure.dom,\n          components: structure.components,\n          items\n        };\n      } else if (menuLayout.menuType === 'normal' && columns === 'auto') {\n        const structure = forCollection(columns, items);\n        return {\n          value,\n          dom: structure.dom,\n          components: structure.components,\n          items\n        };\n      } else if (menuLayout.menuType === 'normal' || menuLayout.menuType === 'searchable') {\n        const structure = getNormalStructure();\n        return {\n          value,\n          dom: structure.dom,\n          components: structure.components,\n          items\n        };\n      } else if (menuLayout.menuType === 'listpreview' && columns !== 'auto') {\n        const structure = forToolbar(columns);\n        return {\n          value,\n          dom: structure.dom,\n          components: structure.components,\n          items\n        };\n      } else {\n        return {\n          value,\n          dom: dom$1(hasIcons, columns, menuLayout.menuType),\n          components: components,\n          items\n        };\n      }\n    };\n\n    const type = requiredString('type');\n    const name$1 = requiredString('name');\n    const label = requiredString('label');\n    const text = requiredString('text');\n    const title = requiredString('title');\n    const icon = requiredString('icon');\n    const value$1 = requiredString('value');\n    const fetch$1 = requiredFunction('fetch');\n    const getSubmenuItems = requiredFunction('getSubmenuItems');\n    const onAction = requiredFunction('onAction');\n    const onItemAction = requiredFunction('onItemAction');\n    const onSetup = defaultedFunction('onSetup', () => noop);\n    const optionalName = optionString('name');\n    const optionalText = optionString('text');\n    const optionalIcon = optionString('icon');\n    const optionalTooltip = optionString('tooltip');\n    const optionalLabel = optionString('label');\n    const optionalShortcut = optionString('shortcut');\n    const optionalSelect = optionFunction('select');\n    const active = defaultedBoolean('active', false);\n    const borderless = defaultedBoolean('borderless', false);\n    const enabled = defaultedBoolean('enabled', true);\n    const primary = defaultedBoolean('primary', false);\n    const defaultedColumns = num => defaulted('columns', num);\n    const defaultedMeta = defaulted('meta', {});\n    const defaultedOnAction = defaultedFunction('onAction', noop);\n    const defaultedType = type => defaultedString('type', type);\n    const generatedName = namePrefix => field$1('name', 'name', defaultedThunk(() => generate$6(`${ namePrefix }-name`)), string);\n    const generatedValue = valuePrefix => field$1('value', 'value', defaultedThunk(() => generate$6(`${ valuePrefix }-value`)), anyValue());\n\n    const separatorMenuItemSchema = objOf([\n      type,\n      optionalText\n    ]);\n    const createSeparatorMenuItem = spec => asRaw('separatormenuitem', separatorMenuItemSchema, spec);\n\n    const autocompleterItemSchema = objOf([\n      defaultedType('autocompleteitem'),\n      active,\n      enabled,\n      defaultedMeta,\n      value$1,\n      optionalText,\n      optionalIcon\n    ]);\n    const createSeparatorItem = spec => asRaw('Autocompleter.Separator', separatorMenuItemSchema, spec);\n    const createAutocompleterItem = spec => asRaw('Autocompleter.Item', autocompleterItemSchema, spec);\n\n    const baseToolbarButtonFields = [\n      enabled,\n      optionalTooltip,\n      optionalIcon,\n      optionalText,\n      onSetup\n    ];\n    const toolbarButtonSchema = objOf([\n      type,\n      onAction\n    ].concat(baseToolbarButtonFields));\n    const createToolbarButton = spec => asRaw('toolbarbutton', toolbarButtonSchema, spec);\n\n    const baseToolbarToggleButtonFields = [active].concat(baseToolbarButtonFields);\n    const toggleButtonSchema = objOf(baseToolbarToggleButtonFields.concat([\n      type,\n      onAction\n    ]));\n    const createToggleButton = spec => asRaw('ToggleButton', toggleButtonSchema, spec);\n\n    const contextBarFields = [\n      defaultedFunction('predicate', never),\n      defaultedStringEnum('scope', 'node', [\n        'node',\n        'editor'\n      ]),\n      defaultedStringEnum('position', 'selection', [\n        'node',\n        'selection',\n        'line'\n      ])\n    ];\n\n    const contextButtonFields = baseToolbarButtonFields.concat([\n      defaultedType('contextformbutton'),\n      primary,\n      onAction,\n      customField('original', identity)\n    ]);\n    const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n      defaultedType('contextformbutton'),\n      primary,\n      onAction,\n      customField('original', identity)\n    ]);\n    const launchButtonFields = baseToolbarButtonFields.concat([defaultedType('contextformbutton')]);\n    const launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaultedType('contextformtogglebutton')]);\n    const toggleOrNormal = choose$1('type', {\n      contextformbutton: contextButtonFields,\n      contextformtogglebutton: contextToggleButtonFields\n    });\n    const contextFormSchema = objOf([\n      defaultedType('contextform'),\n      defaultedFunction('initValue', constant$1('')),\n      optionalLabel,\n      requiredArrayOf('commands', toggleOrNormal),\n      optionOf('launch', choose$1('type', {\n        contextformbutton: launchButtonFields,\n        contextformtogglebutton: launchToggleButtonFields\n      }))\n    ].concat(contextBarFields));\n    const createContextForm = spec => asRaw('ContextForm', contextFormSchema, spec);\n\n    const contextToolbarSchema = objOf([\n      defaultedType('contexttoolbar'),\n      requiredString('items')\n    ].concat(contextBarFields));\n    const createContextToolbar = spec => asRaw('ContextToolbar', contextToolbarSchema, spec);\n\n    const cardImageFields = [\n      type,\n      requiredString('src'),\n      optionString('alt'),\n      defaultedArrayOf('classes', [], string)\n    ];\n    const cardImageSchema = objOf(cardImageFields);\n\n    const cardTextFields = [\n      type,\n      text,\n      optionalName,\n      defaultedArrayOf('classes', ['tox-collection__item-label'], string)\n    ];\n    const cardTextSchema = objOf(cardTextFields);\n\n    const itemSchema$1 = valueThunk(() => choose$2('type', {\n      cardimage: cardImageSchema,\n      cardtext: cardTextSchema,\n      cardcontainer: cardContainerSchema\n    }));\n    const cardContainerSchema = objOf([\n      type,\n      defaultedString('direction', 'horizontal'),\n      defaultedString('align', 'left'),\n      defaultedString('valign', 'middle'),\n      requiredArrayOf('items', itemSchema$1)\n    ]);\n\n    const commonMenuItemFields = [\n      enabled,\n      optionalText,\n      optionalShortcut,\n      generatedValue('menuitem'),\n      defaultedMeta\n    ];\n\n    const cardMenuItemSchema = objOf([\n      type,\n      optionalLabel,\n      requiredArrayOf('items', itemSchema$1),\n      onSetup,\n      defaultedOnAction\n    ].concat(commonMenuItemFields));\n    const createCardMenuItem = spec => asRaw('cardmenuitem', cardMenuItemSchema, spec);\n\n    const choiceMenuItemSchema = objOf([\n      type,\n      active,\n      optionalIcon\n    ].concat(commonMenuItemFields));\n    const createChoiceMenuItem = spec => asRaw('choicemenuitem', choiceMenuItemSchema, spec);\n\n    const baseFields = [\n      type,\n      requiredString('fancytype'),\n      defaultedOnAction\n    ];\n    const insertTableFields = [defaulted('initData', {})].concat(baseFields);\n    const colorSwatchFields = [defaultedObjOf('initData', {}, [\n        defaultedBoolean('allowCustomColors', true),\n        optionArrayOf('colors', anyValue())\n      ])].concat(baseFields);\n    const fancyMenuItemSchema = choose$1('fancytype', {\n      inserttable: insertTableFields,\n      colorswatch: colorSwatchFields\n    });\n    const createFancyMenuItem = spec => asRaw('fancymenuitem', fancyMenuItemSchema, spec);\n\n    const menuItemSchema = objOf([\n      type,\n      onSetup,\n      defaultedOnAction,\n      optionalIcon\n    ].concat(commonMenuItemFields));\n    const createMenuItem = spec => asRaw('menuitem', menuItemSchema, spec);\n\n    const nestedMenuItemSchema = objOf([\n      type,\n      getSubmenuItems,\n      onSetup,\n      optionalIcon\n    ].concat(commonMenuItemFields));\n    const createNestedMenuItem = spec => asRaw('nestedmenuitem', nestedMenuItemSchema, spec);\n\n    const toggleMenuItemSchema = objOf([\n      type,\n      optionalIcon,\n      active,\n      onSetup,\n      onAction\n    ].concat(commonMenuItemFields));\n    const createToggleMenuItem = spec => asRaw('togglemenuitem', toggleMenuItemSchema, spec);\n\n    const detectSize = (comp, margin, selectorClass) => {\n      const descendants$1 = descendants(comp.element, '.' + selectorClass);\n      if (descendants$1.length > 0) {\n        const columnLength = findIndex$1(descendants$1, c => {\n          const thisTop = c.dom.getBoundingClientRect().top;\n          const cTop = descendants$1[0].dom.getBoundingClientRect().top;\n          return Math.abs(thisTop - cTop) > margin;\n        }).getOr(descendants$1.length);\n        return Optional.some({\n          numColumns: columnLength,\n          numRows: Math.ceil(descendants$1.length / columnLength)\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n\n    const namedEvents = (name, handlers) => derive$1([config(name, handlers)]);\n    const unnamedEvents = handlers => namedEvents(generate$6('unnamed-events'), handlers);\n    const SimpleBehaviours = {\n      namedEvents,\n      unnamedEvents\n    };\n\n    const ExclusivityChannel = generate$6('tooltip.exclusive');\n    const ShowTooltipEvent = generate$6('tooltip.show');\n    const HideTooltipEvent = generate$6('tooltip.hide');\n\n    const hideAllExclusive = (component, _tConfig, _tState) => {\n      component.getSystem().broadcastOn([ExclusivityChannel], {});\n    };\n    const setComponents = (component, tConfig, tState, specs) => {\n      tState.getTooltip().each(tooltip => {\n        if (tooltip.getSystem().isConnected()) {\n          Replacing.set(tooltip, specs);\n        }\n      });\n    };\n\n    var TooltippingApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        hideAllExclusive: hideAllExclusive,\n        setComponents: setComponents\n    });\n\n    const events$9 = (tooltipConfig, state) => {\n      const hide = comp => {\n        state.getTooltip().each(p => {\n          detach(p);\n          tooltipConfig.onHide(comp, p);\n          state.clearTooltip();\n        });\n        state.clearTimer();\n      };\n      const show = comp => {\n        if (!state.isShowing()) {\n          hideAllExclusive(comp);\n          const sink = tooltipConfig.lazySink(comp).getOrDie();\n          const popup = comp.getSystem().build({\n            dom: tooltipConfig.tooltipDom,\n            components: tooltipConfig.tooltipComponents,\n            events: derive$2(tooltipConfig.mode === 'normal' ? [\n              run$1(mouseover(), _ => {\n                emit(comp, ShowTooltipEvent);\n              }),\n              run$1(mouseout(), _ => {\n                emit(comp, HideTooltipEvent);\n              })\n            ] : []),\n            behaviours: derive$1([Replacing.config({})])\n          });\n          state.setTooltip(popup);\n          attach(sink, popup);\n          tooltipConfig.onShow(comp, popup);\n          Positioning.position(sink, popup, { anchor: tooltipConfig.anchor(comp) });\n        }\n      };\n      return derive$2(flatten([\n        [\n          run$1(ShowTooltipEvent, comp => {\n            state.resetTimer(() => {\n              show(comp);\n            }, tooltipConfig.delay);\n          }),\n          run$1(HideTooltipEvent, comp => {\n            state.resetTimer(() => {\n              hide(comp);\n            }, tooltipConfig.delay);\n          }),\n          run$1(receive(), (comp, message) => {\n            const receivingData = message;\n            if (!receivingData.universal) {\n              if (contains$2(receivingData.channels, ExclusivityChannel)) {\n                hide(comp);\n              }\n            }\n          }),\n          runOnDetached(comp => {\n            hide(comp);\n          })\n        ],\n        tooltipConfig.mode === 'normal' ? [\n          run$1(focusin(), comp => {\n            emit(comp, ShowTooltipEvent);\n          }),\n          run$1(postBlur(), comp => {\n            emit(comp, HideTooltipEvent);\n          }),\n          run$1(mouseover(), comp => {\n            emit(comp, ShowTooltipEvent);\n          }),\n          run$1(mouseout(), comp => {\n            emit(comp, HideTooltipEvent);\n          })\n        ] : [\n          run$1(highlight$1(), (comp, _se) => {\n            emit(comp, ShowTooltipEvent);\n          }),\n          run$1(dehighlight$1(), comp => {\n            emit(comp, HideTooltipEvent);\n          })\n        ]\n      ]));\n    };\n\n    var ActiveTooltipping = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        events: events$9\n    });\n\n    var TooltippingSchema = [\n      required$1('lazySink'),\n      required$1('tooltipDom'),\n      defaulted('exclusive', true),\n      defaulted('tooltipComponents', []),\n      defaulted('delay', 300),\n      defaultedStringEnum('mode', 'normal', [\n        'normal',\n        'follow-highlight'\n      ]),\n      defaulted('anchor', comp => ({\n        type: 'hotspot',\n        hotspot: comp,\n        layouts: {\n          onLtr: constant$1([\n            south$2,\n            north$2,\n            southeast$2,\n            northeast$2,\n            southwest$2,\n            northwest$2\n          ]),\n          onRtl: constant$1([\n            south$2,\n            north$2,\n            southeast$2,\n            northeast$2,\n            southwest$2,\n            northwest$2\n          ])\n        }\n      })),\n      onHandler('onHide'),\n      onHandler('onShow')\n    ];\n\n    const init$b = () => {\n      const timer = value$2();\n      const popup = value$2();\n      const clearTimer = () => {\n        timer.on(clearTimeout);\n      };\n      const resetTimer = (f, delay) => {\n        clearTimer();\n        timer.set(setTimeout(f, delay));\n      };\n      const readState = constant$1('not-implemented');\n      return nu$8({\n        getTooltip: popup.get,\n        isShowing: popup.isSet,\n        setTooltip: popup.set,\n        clearTooltip: popup.clear,\n        clearTimer,\n        resetTimer,\n        readState\n      });\n    };\n\n    var TooltippingState = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        init: init$b\n    });\n\n    const Tooltipping = create$3({\n      fields: TooltippingSchema,\n      name: 'tooltipping',\n      active: ActiveTooltipping,\n      state: TooltippingState,\n      apis: TooltippingApis\n    });\n\n    const escape = text => text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n    const ReadOnlyChannel = 'silver.readonly';\n    const ReadOnlyDataSchema = objOf([requiredBoolean('readonly')]);\n    const broadcastReadonly = (uiComponents, readonly) => {\n      const outerContainer = uiComponents.outerContainer;\n      const target = outerContainer.element;\n      if (readonly) {\n        uiComponents.mothership.broadcastOn([dismissPopups()], { target });\n        uiComponents.uiMothership.broadcastOn([dismissPopups()], { target });\n      }\n      uiComponents.mothership.broadcastOn([ReadOnlyChannel], { readonly });\n      uiComponents.uiMothership.broadcastOn([ReadOnlyChannel], { readonly });\n    };\n    const setupReadonlyModeSwitch = (editor, uiComponents) => {\n      editor.on('init', () => {\n        if (editor.mode.isReadOnly()) {\n          broadcastReadonly(uiComponents, true);\n        }\n      });\n      editor.on('SwitchMode', () => broadcastReadonly(uiComponents, editor.mode.isReadOnly()));\n      if (isReadOnly(editor)) {\n        editor.mode.set('readonly');\n      }\n    };\n    const receivingConfig = () => Receiving.config({\n      channels: {\n        [ReadOnlyChannel]: {\n          schema: ReadOnlyDataSchema,\n          onReceive: (comp, data) => {\n            Disabling.set(comp, data.readonly);\n          }\n        }\n      }\n    });\n\n    const item = disabled => Disabling.config({\n      disabled,\n      disableClass: 'tox-collection__item--state-disabled'\n    });\n    const button = disabled => Disabling.config({ disabled });\n    const splitButton = disabled => Disabling.config({\n      disabled,\n      disableClass: 'tox-tbtn--disabled'\n    });\n    const toolbarButton = disabled => Disabling.config({\n      disabled,\n      disableClass: 'tox-tbtn--disabled',\n      useNative: false\n    });\n    const DisablingConfigs = {\n      item,\n      button,\n      splitButton,\n      toolbarButton\n    };\n\n    const runWithApi = (info, comp) => {\n      const api = info.getApi(comp);\n      return f => {\n        f(api);\n      };\n    };\n    const onControlAttached = (info, editorOffCell) => runOnAttached(comp => {\n      const run = runWithApi(info, comp);\n      run(api => {\n        const onDestroy = info.onSetup(api);\n        if (isFunction(onDestroy)) {\n          editorOffCell.set(onDestroy);\n        }\n      });\n    });\n    const onControlDetached = (getApi, editorOffCell) => runOnDetached(comp => runWithApi(getApi, comp)(editorOffCell.get()));\n\n    const onMenuItemExecute = (info, itemResponse) => runOnExecute$1((comp, simulatedEvent) => {\n      runWithApi(info, comp)(info.onAction);\n      if (!info.triggersSubmenu && itemResponse === ItemResponse$1.CLOSE_ON_EXECUTE) {\n        if (comp.getSystem().isConnected()) {\n          emit(comp, sandboxClose());\n        }\n        simulatedEvent.stop();\n      }\n    });\n    const menuItemEventOrder = {\n      [execute$5()]: [\n        'disabling',\n        'alloy.base.behaviour',\n        'toggling',\n        'item-events'\n      ]\n    };\n\n    const componentRenderPipeline = cat;\n    const renderCommonItem = (spec, structure, itemResponse, providersBackstage) => {\n      const editorOffCell = Cell(noop);\n      return {\n        type: 'item',\n        dom: structure.dom,\n        components: componentRenderPipeline(structure.optComponents),\n        data: spec.data,\n        eventOrder: menuItemEventOrder,\n        hasSubmenu: spec.triggersSubmenu,\n        itemBehaviours: derive$1([\n          config('item-events', [\n            onMenuItemExecute(spec, itemResponse),\n            onControlAttached(spec, editorOffCell),\n            onControlDetached(spec, editorOffCell)\n          ]),\n          DisablingConfigs.item(() => !spec.enabled || providersBackstage.isDisabled()),\n          receivingConfig(),\n          Replacing.config({})\n        ].concat(spec.itemBehaviours))\n      };\n    };\n    const buildData = source => ({\n      value: source.value,\n      meta: {\n        text: source.text.getOr(''),\n        ...source.meta\n      }\n    });\n\n    const convertText = source => {\n      const isMac = global$5.os.isMacOS() || global$5.os.isiOS();\n      const mac = {\n        alt: '\\u2325',\n        ctrl: '\\u2303',\n        shift: '\\u21E7',\n        meta: '\\u2318',\n        access: '\\u2303\\u2325'\n      };\n      const other = {\n        meta: 'Ctrl',\n        access: 'Shift+Alt'\n      };\n      const replace = isMac ? mac : other;\n      const shortcut = source.split('+');\n      const updated = map$2(shortcut, segment => {\n        const search = segment.toLowerCase().trim();\n        return has$2(replace, search) ? replace[search] : segment;\n      });\n      return isMac ? updated.join('') : updated.join('+');\n    };\n\n    const renderIcon$1 = (name, icons, classes = [iconClass]) => render$3(name, {\n      tag: 'div',\n      classes\n    }, icons);\n    const renderText = text => ({\n      dom: {\n        tag: 'div',\n        classes: [textClass]\n      },\n      components: [text$1(global$8.translate(text))]\n    });\n    const renderHtml = (html, classes) => ({\n      dom: {\n        tag: 'div',\n        classes,\n        innerHtml: html\n      }\n    });\n    const renderStyledText = (style, text) => ({\n      dom: {\n        tag: 'div',\n        classes: [textClass]\n      },\n      components: [{\n          dom: {\n            tag: style.tag,\n            styles: style.styles\n          },\n          components: [text$1(global$8.translate(text))]\n        }]\n    });\n    const renderShortcut = shortcut => ({\n      dom: {\n        tag: 'div',\n        classes: [accessoryClass]\n      },\n      components: [text$1(convertText(shortcut))]\n    });\n    const renderCheckmark = icons => renderIcon$1('checkmark', icons, [checkmarkClass]);\n    const renderSubmenuCaret = icons => renderIcon$1('chevron-right', icons, [caretClass]);\n    const renderDownwardsCaret = icons => renderIcon$1('chevron-down', icons, [caretClass]);\n    const renderContainer = (container, components) => {\n      const directionClass = container.direction === 'vertical' ? containerColumnClass : containerRowClass;\n      const alignClass = container.align === 'left' ? containerAlignLeftClass : containerAlignRightClass;\n      const getValignClass = () => {\n        switch (container.valign) {\n        case 'top':\n          return containerValignTopClass;\n        case 'middle':\n          return containerValignMiddleClass;\n        case 'bottom':\n          return containerValignBottomClass;\n        }\n      };\n      return {\n        dom: {\n          tag: 'div',\n          classes: [\n            containerClass,\n            directionClass,\n            alignClass,\n            getValignClass()\n          ]\n        },\n        components\n      };\n    };\n    const renderImage = (src, classes, alt) => ({\n      dom: {\n        tag: 'img',\n        classes,\n        attributes: {\n          src,\n          alt: alt.getOr('')\n        }\n      }\n    });\n\n    const renderColorStructure = (item, providerBackstage, fallbackIcon) => {\n      const colorPickerCommand = 'custom';\n      const removeColorCommand = 'remove';\n      const itemText = item.ariaLabel;\n      const itemValue = item.value;\n      const iconSvg = item.iconContent.map(name => getOr(name, providerBackstage.icons, fallbackIcon));\n      const getDom = () => {\n        const common = colorClass;\n        const icon = iconSvg.getOr('');\n        const attributes = itemText.map(text => ({ title: providerBackstage.translate(text) })).getOr({});\n        const baseDom = {\n          tag: 'div',\n          attributes,\n          classes: [common]\n        };\n        if (itemValue === colorPickerCommand) {\n          return {\n            ...baseDom,\n            tag: 'button',\n            classes: [\n              ...baseDom.classes,\n              'tox-swatches__picker-btn'\n            ],\n            innerHtml: icon\n          };\n        } else if (itemValue === removeColorCommand) {\n          return {\n            ...baseDom,\n            classes: [\n              ...baseDom.classes,\n              'tox-swatch--remove'\n            ],\n            innerHtml: icon\n          };\n        } else if (isNonNullable(itemValue)) {\n          return {\n            ...baseDom,\n            attributes: {\n              ...baseDom.attributes,\n              'data-mce-color': itemValue\n            },\n            styles: { 'background-color': itemValue }\n          };\n        } else {\n          return baseDom;\n        }\n      };\n      return {\n        dom: getDom(),\n        optComponents: []\n      };\n    };\n    const renderItemDomStructure = ariaLabel => {\n      const domTitle = ariaLabel.map(label => ({ attributes: { title: global$8.translate(label) } })).getOr({});\n      return {\n        tag: 'div',\n        classes: [\n          navClass,\n          selectableClass\n        ],\n        ...domTitle\n      };\n    };\n    const renderNormalItemStructure = (info, providersBackstage, renderIcons, fallbackIcon) => {\n      const iconSpec = {\n        tag: 'div',\n        classes: [iconClass]\n      };\n      const renderIcon = iconName => render$3(iconName, iconSpec, providersBackstage.icons, fallbackIcon);\n      const renderEmptyIcon = () => Optional.some({ dom: iconSpec });\n      const leftIcon = renderIcons ? info.iconContent.map(renderIcon).orThunk(renderEmptyIcon) : Optional.none();\n      const checkmark = info.checkMark;\n      const textRender = Optional.from(info.meta).fold(() => renderText, meta => has$2(meta, 'style') ? curry(renderStyledText, meta.style) : renderText);\n      const content = info.htmlContent.fold(() => info.textContent.map(textRender), html => Optional.some(renderHtml(html, [textClass])));\n      const menuItem = {\n        dom: renderItemDomStructure(info.ariaLabel),\n        optComponents: [\n          leftIcon,\n          content,\n          info.shortcutContent.map(renderShortcut),\n          checkmark,\n          info.caret\n        ]\n      };\n      return menuItem;\n    };\n    const renderItemStructure = (info, providersBackstage, renderIcons, fallbackIcon = Optional.none()) => {\n      if (info.presets === 'color') {\n        return renderColorStructure(info, providersBackstage, fallbackIcon);\n      } else {\n        return renderNormalItemStructure(info, providersBackstage, renderIcons, fallbackIcon);\n      }\n    };\n\n    const tooltipBehaviour = (meta, sharedBackstage) => get$g(meta, 'tooltipWorker').map(tooltipWorker => [Tooltipping.config({\n        lazySink: sharedBackstage.getSink,\n        tooltipDom: {\n          tag: 'div',\n          classes: ['tox-tooltip-worker-container']\n        },\n        tooltipComponents: [],\n        anchor: comp => ({\n          type: 'submenu',\n          item: comp,\n          overrides: { maxHeightFunction: expandable$1 }\n        }),\n        mode: 'follow-highlight',\n        onShow: (component, _tooltip) => {\n          tooltipWorker(elm => {\n            Tooltipping.setComponents(component, [external$1({ element: SugarElement.fromDom(elm) })]);\n          });\n        }\n      })]).getOr([]);\n    const encodeText = text => global$7.DOM.encode(text);\n    const replaceText = (text, matchText) => {\n      const translated = global$8.translate(text);\n      const encoded = encodeText(translated);\n      if (matchText.length > 0) {\n        const escapedMatchRegex = new RegExp(escape(matchText), 'gi');\n        return encoded.replace(escapedMatchRegex, match => `<span class=\"tox-autocompleter-highlight\">${ match }</span>`);\n      } else {\n        return encoded;\n      }\n    };\n    const renderAutocompleteItem = (spec, matchText, useText, presets, onItemValueHandler, itemResponse, sharedBackstage, renderIcons = true) => {\n      const structure = renderItemStructure({\n        presets,\n        textContent: Optional.none(),\n        htmlContent: useText ? spec.text.map(text => replaceText(text, matchText)) : Optional.none(),\n        ariaLabel: spec.text,\n        iconContent: spec.icon,\n        shortcutContent: Optional.none(),\n        checkMark: Optional.none(),\n        caret: Optional.none(),\n        value: spec.value\n      }, sharedBackstage.providers, renderIcons, spec.icon);\n      return renderCommonItem({\n        data: buildData(spec),\n        enabled: spec.enabled,\n        getApi: constant$1({}),\n        onAction: _api => onItemValueHandler(spec.value, spec.meta),\n        onSetup: constant$1(noop),\n        triggersSubmenu: false,\n        itemBehaviours: tooltipBehaviour(spec.meta, sharedBackstage)\n      }, structure, itemResponse, sharedBackstage.providers);\n    };\n\n    const render$2 = (items, extras) => map$2(items, item => {\n      switch (item.type) {\n      case 'cardcontainer':\n        return renderContainer(item, render$2(item.items, extras));\n      case 'cardimage':\n        return renderImage(item.src, item.classes, item.alt);\n      case 'cardtext':\n        const shouldHighlight = item.name.exists(name => contains$2(extras.cardText.highlightOn, name));\n        const matchText = shouldHighlight ? Optional.from(extras.cardText.matchText).getOr('') : '';\n        return renderHtml(replaceText(item.text, matchText), item.classes);\n      }\n    });\n    const renderCardMenuItem = (spec, itemResponse, sharedBackstage, extras) => {\n      const getApi = component => ({\n        isEnabled: () => !Disabling.isDisabled(component),\n        setEnabled: state => {\n          Disabling.set(component, !state);\n          each$1(descendants(component.element, '*'), elm => {\n            component.getSystem().getByDom(elm).each(comp => {\n              if (comp.hasConfigured(Disabling)) {\n                Disabling.set(comp, !state);\n              }\n            });\n          });\n        }\n      });\n      const structure = {\n        dom: renderItemDomStructure(spec.label),\n        optComponents: [Optional.some({\n            dom: {\n              tag: 'div',\n              classes: [\n                containerClass,\n                containerRowClass\n              ]\n            },\n            components: render$2(spec.items, extras)\n          })]\n      };\n      return renderCommonItem({\n        data: buildData({\n          text: Optional.none(),\n          ...spec\n        }),\n        enabled: spec.enabled,\n        getApi,\n        onAction: spec.onAction,\n        onSetup: spec.onSetup,\n        triggersSubmenu: false,\n        itemBehaviours: Optional.from(extras.itemBehaviours).getOr([])\n      }, structure, itemResponse, sharedBackstage.providers);\n    };\n\n    const renderChoiceItem = (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage, renderIcons = true) => {\n      const getApi = component => ({\n        setActive: state => {\n          Toggling.set(component, state);\n        },\n        isActive: () => Toggling.isOn(component),\n        isEnabled: () => !Disabling.isDisabled(component),\n        setEnabled: state => Disabling.set(component, !state)\n      });\n      const structure = renderItemStructure({\n        presets,\n        textContent: useText ? spec.text : Optional.none(),\n        htmlContent: Optional.none(),\n        ariaLabel: spec.text,\n        iconContent: spec.icon,\n        shortcutContent: useText ? spec.shortcut : Optional.none(),\n        checkMark: useText ? Optional.some(renderCheckmark(providersBackstage.icons)) : Optional.none(),\n        caret: Optional.none(),\n        value: spec.value\n      }, providersBackstage, renderIcons);\n      return deepMerge(renderCommonItem({\n        data: buildData(spec),\n        enabled: spec.enabled,\n        getApi,\n        onAction: _api => onItemValueHandler(spec.value),\n        onSetup: api => {\n          api.setActive(isSelected);\n          return noop;\n        },\n        triggersSubmenu: false,\n        itemBehaviours: []\n      }, structure, itemResponse, providersBackstage), {\n        toggling: {\n          toggleClass: tickedClass,\n          toggleOnExecute: false,\n          selected: spec.active,\n          exclusive: true\n        }\n      });\n    };\n\n    const parts$f = generate$3(owner$2(), parts$h());\n\n    const hexColour = value => ({ value });\n    const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n    const longformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n    const isHexString = hex => shorthandRegex.test(hex) || longformRegex.test(hex);\n    const normalizeHex = hex => removeLeading(hex, '#').toUpperCase();\n    const fromString$1 = hex => isHexString(hex) ? Optional.some({ value: normalizeHex(hex) }) : Optional.none();\n    const getLongForm = hex => {\n      const hexString = hex.value.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n      return { value: hexString };\n    };\n    const extractValues = hex => {\n      const longForm = getLongForm(hex);\n      const splitForm = longformRegex.exec(longForm.value);\n      return splitForm === null ? [\n        'FFFFFF',\n        'FF',\n        'FF',\n        'FF'\n      ] : splitForm;\n    };\n    const toHex = component => {\n      const hex = component.toString(16);\n      return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n    };\n    const fromRgba = rgbaColour => {\n      const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n      return hexColour(value);\n    };\n\n    const min = Math.min;\n    const max = Math.max;\n    const round$1 = Math.round;\n    const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i;\n    const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)\\s*$/i;\n    const rgbaColour = (red, green, blue, alpha) => ({\n      red,\n      green,\n      blue,\n      alpha\n    });\n    const isRgbaComponent = value => {\n      const num = parseInt(value, 10);\n      return num.toString() === value && num >= 0 && num <= 255;\n    };\n    const fromHsv = hsv => {\n      let r;\n      let g;\n      let b;\n      const hue = (hsv.hue || 0) % 360;\n      let saturation = hsv.saturation / 100;\n      let brightness = hsv.value / 100;\n      saturation = max(0, min(saturation, 1));\n      brightness = max(0, min(brightness, 1));\n      if (saturation === 0) {\n        r = g = b = round$1(255 * brightness);\n        return rgbaColour(r, g, b, 1);\n      }\n      const side = hue / 60;\n      const chroma = brightness * saturation;\n      const x = chroma * (1 - Math.abs(side % 2 - 1));\n      const match = brightness - chroma;\n      switch (Math.floor(side)) {\n      case 0:\n        r = chroma;\n        g = x;\n        b = 0;\n        break;\n      case 1:\n        r = x;\n        g = chroma;\n        b = 0;\n        break;\n      case 2:\n        r = 0;\n        g = chroma;\n        b = x;\n        break;\n      case 3:\n        r = 0;\n        g = x;\n        b = chroma;\n        break;\n      case 4:\n        r = x;\n        g = 0;\n        b = chroma;\n        break;\n      case 5:\n        r = chroma;\n        g = 0;\n        b = x;\n        break;\n      default:\n        r = g = b = 0;\n      }\n      r = round$1(255 * (r + match));\n      g = round$1(255 * (g + match));\n      b = round$1(255 * (b + match));\n      return rgbaColour(r, g, b, 1);\n    };\n    const fromHex = hexColour => {\n      const result = extractValues(hexColour);\n      const red = parseInt(result[1], 16);\n      const green = parseInt(result[2], 16);\n      const blue = parseInt(result[3], 16);\n      return rgbaColour(red, green, blue, 1);\n    };\n    const fromStringValues = (red, green, blue, alpha) => {\n      const r = parseInt(red, 10);\n      const g = parseInt(green, 10);\n      const b = parseInt(blue, 10);\n      const a = parseFloat(alpha);\n      return rgbaColour(r, g, b, a);\n    };\n    const fromString = rgbaString => {\n      if (rgbaString === 'transparent') {\n        return Optional.some(rgbaColour(0, 0, 0, 0));\n      }\n      const rgbMatch = rgbRegex.exec(rgbaString);\n      if (rgbMatch !== null) {\n        return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n      }\n      const rgbaMatch = rgbaRegex.exec(rgbaString);\n      if (rgbaMatch !== null) {\n        return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n      }\n      return Optional.none();\n    };\n    const toString = rgba => `rgba(${ rgba.red },${ rgba.green },${ rgba.blue },${ rgba.alpha })`;\n    const red = rgbaColour(255, 0, 0, 1);\n\n    const fireSkinLoaded$1 = editor => {\n      editor.dispatch('SkinLoaded');\n    };\n    const fireSkinLoadError$1 = (editor, error) => {\n      editor.dispatch('SkinLoadError', error);\n    };\n    const fireResizeEditor = editor => {\n      editor.dispatch('ResizeEditor');\n    };\n    const fireResizeContent = (editor, e) => {\n      editor.dispatch('ResizeContent', e);\n    };\n    const fireScrollContent = (editor, e) => {\n      editor.dispatch('ScrollContent', e);\n    };\n    const fireTextColorChange = (editor, data) => {\n      editor.dispatch('TextColorChange', data);\n    };\n    const fireAfterProgressState = (editor, state) => {\n      editor.dispatch('AfterProgressState', { state });\n    };\n    const fireResolveName = (editor, node) => editor.dispatch('ResolveName', {\n      name: node.nodeName.toLowerCase(),\n      target: node\n    });\n\n    const hsvColour = (hue, saturation, value) => ({\n      hue,\n      saturation,\n      value\n    });\n    const fromRgb = rgbaColour => {\n      let h = 0;\n      let s = 0;\n      let v = 0;\n      const r = rgbaColour.red / 255;\n      const g = rgbaColour.green / 255;\n      const b = rgbaColour.blue / 255;\n      const minRGB = Math.min(r, Math.min(g, b));\n      const maxRGB = Math.max(r, Math.max(g, b));\n      if (minRGB === maxRGB) {\n        v = minRGB;\n        return hsvColour(0, 0, v * 100);\n      }\n      const d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n      h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n      h = 60 * (h - d / (maxRGB - minRGB));\n      s = (maxRGB - minRGB) / maxRGB;\n      v = maxRGB;\n      return hsvColour(Math.round(h), Math.round(s * 100), Math.round(v * 100));\n    };\n\n    const hexToHsv = hex => fromRgb(fromHex(hex));\n    const hsvToHex = hsv => fromRgba(fromHsv(hsv));\n    const anyToHex = color => fromString$1(color).orThunk(() => fromString(color).map(fromRgba)).getOrThunk(() => {\n      const canvas = document.createElement('canvas');\n      canvas.height = 1;\n      canvas.width = 1;\n      const canvasContext = canvas.getContext('2d');\n      canvasContext.clearRect(0, 0, canvas.width, canvas.height);\n      canvasContext.fillStyle = '#FFFFFF';\n      canvasContext.fillStyle = color;\n      canvasContext.fillRect(0, 0, 1, 1);\n      const rgba = canvasContext.getImageData(0, 0, 1, 1).data;\n      const r = rgba[0];\n      const g = rgba[1];\n      const b = rgba[2];\n      const a = rgba[3];\n      return fromRgba(rgbaColour(r, g, b, a));\n    });\n\n    var global$4 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n    const storageName = 'tinymce-custom-colors';\n    const ColorCache = (max = 10) => {\n      const storageString = global$4.getItem(storageName);\n      const localstorage = isString(storageString) ? JSON.parse(storageString) : [];\n      const prune = list => {\n        const diff = max - list.length;\n        return diff < 0 ? list.slice(0, max) : list;\n      };\n      const cache = prune(localstorage);\n      const add = key => {\n        indexOf(cache, key).each(remove);\n        cache.unshift(key);\n        if (cache.length > max) {\n          cache.pop();\n        }\n        global$4.setItem(storageName, JSON.stringify(cache));\n      };\n      const remove = idx => {\n        cache.splice(idx, 1);\n      };\n      const state = () => cache.slice(0);\n      return {\n        add,\n        state\n      };\n    };\n\n    const colorCache = ColorCache(10);\n    const calcCols = colors => Math.max(5, Math.ceil(Math.sqrt(colors)));\n    const mapColors = colorMap => {\n      const colors = [];\n      for (let i = 0; i < colorMap.length; i += 2) {\n        colors.push({\n          text: colorMap[i + 1],\n          value: '#' + anyToHex(colorMap[i]).value,\n          type: 'choiceitem'\n        });\n      }\n      return colors;\n    };\n    const option$1 = name => editor => editor.options.get(name);\n    const register$d = editor => {\n      const registerOption = editor.options.register;\n      registerOption('color_map', {\n        processor: value => {\n          if (isArrayOf(value, isString)) {\n            return {\n              value: mapColors(value),\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be an array of strings.'\n            };\n          }\n        },\n        default: [\n          '#BFEDD2',\n          'Light Green',\n          '#FBEEB8',\n          'Light Yellow',\n          '#F8CAC6',\n          'Light Red',\n          '#ECCAFA',\n          'Light Purple',\n          '#C2E0F4',\n          'Light Blue',\n          '#2DC26B',\n          'Green',\n          '#F1C40F',\n          'Yellow',\n          '#E03E2D',\n          'Red',\n          '#B96AD9',\n          'Purple',\n          '#3598DB',\n          'Blue',\n          '#169179',\n          'Dark Turquoise',\n          '#E67E23',\n          'Orange',\n          '#BA372A',\n          'Dark Red',\n          '#843FA1',\n          'Dark Purple',\n          '#236FA1',\n          'Dark Blue',\n          '#ECF0F1',\n          'Light Gray',\n          '#CED4D9',\n          'Medium Gray',\n          '#95A5A6',\n          'Gray',\n          '#7E8C8D',\n          'Dark Gray',\n          '#34495E',\n          'Navy Blue',\n          '#000000',\n          'Black',\n          '#ffffff',\n          'White'\n        ]\n      });\n      registerOption('color_cols', {\n        processor: 'number',\n        default: calcCols(getColors$2(editor).length)\n      });\n      registerOption('custom_colors', {\n        processor: 'boolean',\n        default: true\n      });\n    };\n    const getColorCols$1 = option$1('color_cols');\n    const hasCustomColors$1 = option$1('custom_colors');\n    const getColors$2 = option$1('color_map');\n    const getCurrentColors = () => map$2(colorCache.state(), color => ({\n      type: 'choiceitem',\n      text: color,\n      value: color\n    }));\n    const addColor = color => {\n      colorCache.add(color);\n    };\n\n    const fallbackColor = '#000000';\n    const hasStyleApi = node => isNonNullable(node.style);\n    const getCurrentColor = (editor, format) => {\n      let color;\n      editor.dom.getParents(editor.selection.getStart(), elm => {\n        const value = hasStyleApi(elm) ? elm.style[format === 'forecolor' ? 'color' : 'backgroundColor'] : null;\n        if (value) {\n          color = color ? color : value;\n        }\n      });\n      return Optional.from(color);\n    };\n    const applyFormat = (editor, format, value) => {\n      editor.undoManager.transact(() => {\n        editor.focus();\n        editor.formatter.apply(format, { value });\n        editor.nodeChanged();\n      });\n    };\n    const removeFormat = (editor, format) => {\n      editor.undoManager.transact(() => {\n        editor.focus();\n        editor.formatter.remove(format, { value: null }, undefined, true);\n        editor.nodeChanged();\n      });\n    };\n    const registerCommands = editor => {\n      editor.addCommand('mceApplyTextcolor', (format, value) => {\n        applyFormat(editor, format, value);\n      });\n      editor.addCommand('mceRemoveTextcolor', format => {\n        removeFormat(editor, format);\n      });\n    };\n    const getAdditionalColors = hasCustom => {\n      const type = 'choiceitem';\n      const remove = {\n        type,\n        text: 'Remove color',\n        icon: 'color-swatch-remove-color',\n        value: 'remove'\n      };\n      const custom = {\n        type,\n        text: 'Custom color',\n        icon: 'color-picker',\n        value: 'custom'\n      };\n      return hasCustom ? [\n        remove,\n        custom\n      ] : [remove];\n    };\n    const applyColor = (editor, format, value, onChoice) => {\n      if (value === 'custom') {\n        const dialog = colorPickerDialog(editor);\n        dialog(colorOpt => {\n          colorOpt.each(color => {\n            addColor(color);\n            editor.execCommand('mceApplyTextcolor', format, color);\n            onChoice(color);\n          });\n        }, fallbackColor);\n      } else if (value === 'remove') {\n        onChoice('');\n        editor.execCommand('mceRemoveTextcolor', format);\n      } else {\n        onChoice(value);\n        editor.execCommand('mceApplyTextcolor', format, value);\n      }\n    };\n    const getColors$1 = (colors, hasCustom) => colors.concat(getCurrentColors().concat(getAdditionalColors(hasCustom)));\n    const getFetch$1 = (colors, hasCustom) => callback => {\n      callback(getColors$1(colors, hasCustom));\n    };\n    const setIconColor = (splitButtonApi, name, newColor) => {\n      const id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';\n      splitButtonApi.setIconFill(id, newColor);\n    };\n    const registerTextColorButton = (editor, name, format, tooltip, lastColor) => {\n      editor.ui.registry.addSplitButton(name, {\n        tooltip,\n        presets: 'color',\n        icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n        select: value => {\n          const optCurrentRgb = getCurrentColor(editor, format);\n          return optCurrentRgb.bind(currentRgb => fromString(currentRgb).map(rgba => {\n            const currentHex = fromRgba(rgba).value;\n            return contains$1(value.toLowerCase(), currentHex);\n          })).getOr(false);\n        },\n        columns: getColorCols$1(editor),\n        fetch: getFetch$1(getColors$2(editor), hasCustomColors$1(editor)),\n        onAction: _splitButtonApi => {\n          applyColor(editor, format, lastColor.get(), noop);\n        },\n        onItemAction: (_splitButtonApi, value) => {\n          applyColor(editor, format, value, newColor => {\n            lastColor.set(newColor);\n            fireTextColorChange(editor, {\n              name,\n              color: newColor\n            });\n          });\n        },\n        onSetup: splitButtonApi => {\n          setIconColor(splitButtonApi, name, lastColor.get());\n          const handler = e => {\n            if (e.name === name) {\n              setIconColor(splitButtonApi, e.name, e.color);\n            }\n          };\n          editor.on('TextColorChange', handler);\n          return () => {\n            editor.off('TextColorChange', handler);\n          };\n        }\n      });\n    };\n    const registerTextColorMenuItem = (editor, name, format, text) => {\n      editor.ui.registry.addNestedMenuItem(name, {\n        text,\n        icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n        getSubmenuItems: () => [{\n            type: 'fancymenuitem',\n            fancytype: 'colorswatch',\n            onAction: data => {\n              applyColor(editor, format, data.value, noop);\n            }\n          }]\n      });\n    };\n    const colorPickerDialog = editor => (callback, value) => {\n      let isValid = false;\n      const onSubmit = api => {\n        const data = api.getData();\n        const hex = data.colorpicker;\n        if (isValid) {\n          callback(Optional.from(hex));\n          api.close();\n        } else {\n          editor.windowManager.alert(editor.translate([\n            'Invalid hex color code: {0}',\n            hex\n          ]));\n        }\n      };\n      const onAction = (_api, details) => {\n        if (details.name === 'hex-valid') {\n          isValid = details.value;\n        }\n      };\n      const initialData = { colorpicker: value };\n      editor.windowManager.open({\n        title: 'Color Picker',\n        size: 'normal',\n        body: {\n          type: 'panel',\n          items: [{\n              type: 'colorpicker',\n              name: 'colorpicker',\n              label: 'Color'\n            }]\n        },\n        buttons: [\n          {\n            type: 'cancel',\n            name: 'cancel',\n            text: 'Cancel'\n          },\n          {\n            type: 'submit',\n            name: 'save',\n            text: 'Save',\n            primary: true\n          }\n        ],\n        initialData,\n        onAction,\n        onSubmit,\n        onClose: noop,\n        onCancel: () => {\n          callback(Optional.none());\n        }\n      });\n    };\n    const register$c = editor => {\n      registerCommands(editor);\n      const lastForeColor = Cell(fallbackColor);\n      const lastBackColor = Cell(fallbackColor);\n      registerTextColorButton(editor, 'forecolor', 'forecolor', 'Text color', lastForeColor);\n      registerTextColorButton(editor, 'backcolor', 'hilitecolor', 'Background color', lastBackColor);\n      registerTextColorMenuItem(editor, 'forecolor', 'forecolor', 'Text color');\n      registerTextColorMenuItem(editor, 'backcolor', 'hilitecolor', 'Background color');\n    };\n\n    const createPartialChoiceMenu = (value, items, onItemValueHandler, columns, presets, itemResponse, select, providersBackstage) => {\n      const hasIcons = menuHasIcons(items);\n      const presetItemTypes = presets !== 'color' ? 'normal' : 'color';\n      const alloyItems = createChoiceItems(items, onItemValueHandler, columns, presetItemTypes, itemResponse, select, providersBackstage);\n      const menuLayout = { menuType: presets };\n      return createPartialMenuWithAlloyItems(value, hasIcons, alloyItems, columns, menuLayout);\n    };\n    const createChoiceItems = (items, onItemValueHandler, columns, itemPresets, itemResponse, select, providersBackstage) => cat(map$2(items, item => {\n      if (item.type === 'choiceitem') {\n        return createChoiceMenuItem(item).fold(handleError, d => Optional.some(renderChoiceItem(d, columns === 1, itemPresets, onItemValueHandler, select(d.value), itemResponse, providersBackstage, menuHasIcons(items))));\n      } else {\n        return Optional.none();\n      }\n    }));\n\n    const deriveMenuMovement = (columns, presets) => {\n      const menuMarkers = markers(presets);\n      if (columns === 1) {\n        return {\n          mode: 'menu',\n          moveOnTab: true\n        };\n      } else if (columns === 'auto') {\n        return {\n          mode: 'grid',\n          selector: '.' + menuMarkers.item,\n          initSize: {\n            numColumns: 1,\n            numRows: 1\n          }\n        };\n      } else {\n        const rowClass = presets === 'color' ? 'tox-swatches__row' : 'tox-collection__group';\n        return {\n          mode: 'matrix',\n          rowSelector: '.' + rowClass\n        };\n      }\n    };\n    const deriveCollectionMovement = (columns, presets) => {\n      if (columns === 1) {\n        return {\n          mode: 'menu',\n          moveOnTab: false,\n          selector: '.tox-collection__item'\n        };\n      } else if (columns === 'auto') {\n        return {\n          mode: 'flatgrid',\n          selector: '.' + 'tox-collection__item',\n          initSize: {\n            numColumns: 1,\n            numRows: 1\n          }\n        };\n      } else {\n        return {\n          mode: 'matrix',\n          selectors: {\n            row: presets === 'color' ? '.tox-swatches__row' : '.tox-collection__group',\n            cell: presets === 'color' ? `.${ colorClass }` : `.${ selectableClass }`\n          }\n        };\n      }\n    };\n\n    const renderColorSwatchItem = (spec, backstage) => {\n      const items = getColorItems(spec, backstage);\n      const columns = backstage.colorinput.getColorCols();\n      const presets = 'color';\n      const menuSpec = createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n        spec.onAction({ value });\n      }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, backstage.shared.providers);\n      const widgetSpec = {\n        ...menuSpec,\n        markers: markers(presets),\n        movement: deriveMenuMovement(columns, presets)\n      };\n      return {\n        type: 'widget',\n        data: { value: generate$6('widget-id') },\n        dom: {\n          tag: 'div',\n          classes: ['tox-fancymenuitem']\n        },\n        autofocus: true,\n        components: [parts$f.widget(Menu.sketch(widgetSpec))]\n      };\n    };\n    const getColorItems = (spec, backstage) => {\n      const useCustomColors = spec.initData.allowCustomColors && backstage.colorinput.hasCustomColors();\n      return spec.initData.colors.fold(() => getColors$1(backstage.colorinput.getColors(), useCustomColors), colors => colors.concat(getAdditionalColors(useCustomColors)));\n    };\n\n    const cellOverEvent = generate$6('cell-over');\n    const cellExecuteEvent = generate$6('cell-execute');\n    const makeCell = (row, col, labelId) => {\n      const emitCellOver = c => emitWith(c, cellOverEvent, {\n        row,\n        col\n      });\n      const emitExecute = c => emitWith(c, cellExecuteEvent, {\n        row,\n        col\n      });\n      const onClick = (c, se) => {\n        se.stop();\n        emitExecute(c);\n      };\n      return build$1({\n        dom: {\n          tag: 'div',\n          attributes: {\n            role: 'button',\n            ['aria-labelledby']: labelId\n          }\n        },\n        behaviours: derive$1([\n          config('insert-table-picker-cell', [\n            run$1(mouseover(), Focusing.focus),\n            run$1(execute$5(), emitExecute),\n            run$1(click(), onClick),\n            run$1(tap(), onClick)\n          ]),\n          Toggling.config({\n            toggleClass: 'tox-insert-table-picker__selected',\n            toggleOnExecute: false\n          }),\n          Focusing.config({ onFocus: emitCellOver })\n        ])\n      });\n    };\n    const makeCells = (labelId, numRows, numCols) => {\n      const cells = [];\n      for (let i = 0; i < numRows; i++) {\n        const row = [];\n        for (let j = 0; j < numCols; j++) {\n          row.push(makeCell(i, j, labelId));\n        }\n        cells.push(row);\n      }\n      return cells;\n    };\n    const selectCells = (cells, selectedRow, selectedColumn, numRows, numColumns) => {\n      for (let i = 0; i < numRows; i++) {\n        for (let j = 0; j < numColumns; j++) {\n          Toggling.set(cells[i][j], i <= selectedRow && j <= selectedColumn);\n        }\n      }\n    };\n    const makeComponents = cells => bind$3(cells, cellRow => map$2(cellRow, premade));\n    const makeLabelText = (row, col) => text$1(`${ col }x${ row }`);\n    const renderInsertTableMenuItem = spec => {\n      const numRows = 10;\n      const numColumns = 10;\n      const sizeLabelId = generate$6('size-label');\n      const cells = makeCells(sizeLabelId, numRows, numColumns);\n      const emptyLabelText = makeLabelText(0, 0);\n      const memLabel = record({\n        dom: {\n          tag: 'span',\n          classes: ['tox-insert-table-picker__label'],\n          attributes: { id: sizeLabelId }\n        },\n        components: [emptyLabelText],\n        behaviours: derive$1([Replacing.config({})])\n      });\n      return {\n        type: 'widget',\n        data: { value: generate$6('widget-id') },\n        dom: {\n          tag: 'div',\n          classes: ['tox-fancymenuitem']\n        },\n        autofocus: true,\n        components: [parts$f.widget({\n            dom: {\n              tag: 'div',\n              classes: ['tox-insert-table-picker']\n            },\n            components: makeComponents(cells).concat(memLabel.asSpec()),\n            behaviours: derive$1([\n              config('insert-table-picker', [\n                runOnAttached(c => {\n                  Replacing.set(memLabel.get(c), [emptyLabelText]);\n                }),\n                runWithTarget(cellOverEvent, (c, t, e) => {\n                  const {row, col} = e.event;\n                  selectCells(cells, row, col, numRows, numColumns);\n                  Replacing.set(memLabel.get(c), [makeLabelText(row + 1, col + 1)]);\n                }),\n                runWithTarget(cellExecuteEvent, (c, _, e) => {\n                  const {row, col} = e.event;\n                  spec.onAction({\n                    numRows: row + 1,\n                    numColumns: col + 1\n                  });\n                  emit(c, sandboxClose());\n                })\n              ]),\n              Keying.config({\n                initSize: {\n                  numRows,\n                  numColumns\n                },\n                mode: 'flatgrid',\n                selector: '[role=\"button\"]'\n              })\n            ])\n          })]\n      };\n    };\n\n    const fancyMenuItems = {\n      inserttable: renderInsertTableMenuItem,\n      colorswatch: renderColorSwatchItem\n    };\n    const renderFancyMenuItem = (spec, backstage) => get$g(fancyMenuItems, spec.fancytype).map(render => render(spec, backstage));\n\n    const renderNestedItem = (spec, itemResponse, providersBackstage, renderIcons = true, downwardsCaret = false) => {\n      const caret = downwardsCaret ? renderDownwardsCaret(providersBackstage.icons) : renderSubmenuCaret(providersBackstage.icons);\n      const getApi = component => ({\n        isEnabled: () => !Disabling.isDisabled(component),\n        setEnabled: state => Disabling.set(component, !state)\n      });\n      const structure = renderItemStructure({\n        presets: 'normal',\n        iconContent: spec.icon,\n        textContent: spec.text,\n        htmlContent: Optional.none(),\n        ariaLabel: spec.text,\n        caret: Optional.some(caret),\n        checkMark: Optional.none(),\n        shortcutContent: spec.shortcut\n      }, providersBackstage, renderIcons);\n      return renderCommonItem({\n        data: buildData(spec),\n        getApi,\n        enabled: spec.enabled,\n        onAction: noop,\n        onSetup: spec.onSetup,\n        triggersSubmenu: true,\n        itemBehaviours: []\n      }, structure, itemResponse, providersBackstage);\n    };\n\n    const renderNormalItem = (spec, itemResponse, providersBackstage, renderIcons = true) => {\n      const getApi = component => ({\n        isEnabled: () => !Disabling.isDisabled(component),\n        setEnabled: state => Disabling.set(component, !state)\n      });\n      const structure = renderItemStructure({\n        presets: 'normal',\n        iconContent: spec.icon,\n        textContent: spec.text,\n        htmlContent: Optional.none(),\n        ariaLabel: spec.text,\n        caret: Optional.none(),\n        checkMark: Optional.none(),\n        shortcutContent: spec.shortcut\n      }, providersBackstage, renderIcons);\n      return renderCommonItem({\n        data: buildData(spec),\n        getApi,\n        enabled: spec.enabled,\n        onAction: spec.onAction,\n        onSetup: spec.onSetup,\n        triggersSubmenu: false,\n        itemBehaviours: []\n      }, structure, itemResponse, providersBackstage);\n    };\n\n    const renderSeparatorItem = spec => ({\n      type: 'separator',\n      dom: {\n        tag: 'div',\n        classes: [\n          selectableClass,\n          groupHeadingClass\n        ]\n      },\n      components: spec.text.map(text$1).toArray()\n    });\n\n    const renderToggleMenuItem = (spec, itemResponse, providersBackstage, renderIcons = true) => {\n      const getApi = component => ({\n        setActive: state => {\n          Toggling.set(component, state);\n        },\n        isActive: () => Toggling.isOn(component),\n        isEnabled: () => !Disabling.isDisabled(component),\n        setEnabled: state => Disabling.set(component, !state)\n      });\n      const structure = renderItemStructure({\n        iconContent: spec.icon,\n        textContent: spec.text,\n        htmlContent: Optional.none(),\n        ariaLabel: spec.text,\n        checkMark: Optional.some(renderCheckmark(providersBackstage.icons)),\n        caret: Optional.none(),\n        shortcutContent: spec.shortcut,\n        presets: 'normal',\n        meta: spec.meta\n      }, providersBackstage, renderIcons);\n      return deepMerge(renderCommonItem({\n        data: buildData(spec),\n        enabled: spec.enabled,\n        getApi,\n        onAction: spec.onAction,\n        onSetup: spec.onSetup,\n        triggersSubmenu: false,\n        itemBehaviours: []\n      }, structure, itemResponse, providersBackstage), {\n        toggling: {\n          toggleClass: tickedClass,\n          toggleOnExecute: false,\n          selected: spec.active\n        }\n      });\n    };\n\n    const autocomplete = renderAutocompleteItem;\n    const separator$3 = renderSeparatorItem;\n    const normal = renderNormalItem;\n    const nested = renderNestedItem;\n    const toggle$1 = renderToggleMenuItem;\n    const fancy = renderFancyMenuItem;\n    const card = renderCardMenuItem;\n\n    const getCoupled = (component, coupleConfig, coupleState, name) => coupleState.getOrCreate(component, coupleConfig, name);\n    const getExistingCoupled = (component, coupleConfig, coupleState, name) => coupleState.getExisting(component, coupleConfig, name);\n\n    var CouplingApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        getCoupled: getCoupled,\n        getExistingCoupled: getExistingCoupled\n    });\n\n    var CouplingSchema = [requiredOf('others', setOf(Result.value, anyValue()))];\n\n    const init$a = () => {\n      const coupled = {};\n      const lookupCoupled = (coupleConfig, coupledName) => {\n        const available = keys(coupleConfig.others);\n        if (available.length === 0) {\n          throw new Error('Cannot find any known coupled components');\n        } else {\n          return get$g(coupled, coupledName);\n        }\n      };\n      const getOrCreate = (component, coupleConfig, name) => {\n        return lookupCoupled(coupleConfig, name).getOrThunk(() => {\n          const builder = get$g(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n          const spec = builder(component);\n          const built = component.getSystem().build(spec);\n          coupled[name] = built;\n          return built;\n        });\n      };\n      const getExisting = (component, coupleConfig, name) => {\n        return lookupCoupled(coupleConfig, name).orThunk(() => {\n          get$g(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n          return Optional.none();\n        });\n      };\n      const readState = constant$1({});\n      return nu$8({\n        readState,\n        getExisting,\n        getOrCreate\n      });\n    };\n\n    var CouplingState = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        init: init$a\n    });\n\n    const Coupling = create$3({\n      fields: CouplingSchema,\n      name: 'coupling',\n      apis: CouplingApis,\n      state: CouplingState\n    });\n\n    const nu$3 = baseFn => {\n      let data = Optional.none();\n      let callbacks = [];\n      const map = f => nu$3(nCallback => {\n        get(data => {\n          nCallback(f(data));\n        });\n      });\n      const get = nCallback => {\n        if (isReady()) {\n          call(nCallback);\n        } else {\n          callbacks.push(nCallback);\n        }\n      };\n      const set = x => {\n        if (!isReady()) {\n          data = Optional.some(x);\n          run(callbacks);\n          callbacks = [];\n        }\n      };\n      const isReady = () => data.isSome();\n      const run = cbs => {\n        each$1(cbs, call);\n      };\n      const call = cb => {\n        data.each(x => {\n          setTimeout(() => {\n            cb(x);\n          }, 0);\n        });\n      };\n      baseFn(set);\n      return {\n        get,\n        map,\n        isReady\n      };\n    };\n    const pure$1 = a => nu$3(callback => {\n      callback(a);\n    });\n    const LazyValue = {\n      nu: nu$3,\n      pure: pure$1\n    };\n\n    const errorReporter = err => {\n      setTimeout(() => {\n        throw err;\n      }, 0);\n    };\n    const make$5 = run => {\n      const get = callback => {\n        run().then(callback, errorReporter);\n      };\n      const map = fab => {\n        return make$5(() => run().then(fab));\n      };\n      const bind = aFutureB => {\n        return make$5(() => run().then(v => aFutureB(v).toPromise()));\n      };\n      const anonBind = futureB => {\n        return make$5(() => run().then(() => futureB.toPromise()));\n      };\n      const toLazy = () => {\n        return LazyValue.nu(get);\n      };\n      const toCached = () => {\n        let cache = null;\n        return make$5(() => {\n          if (cache === null) {\n            cache = run();\n          }\n          return cache;\n        });\n      };\n      const toPromise = run;\n      return {\n        map,\n        bind,\n        anonBind,\n        toLazy,\n        toCached,\n        toPromise,\n        get\n      };\n    };\n    const nu$2 = baseFn => {\n      return make$5(() => new Promise(baseFn));\n    };\n    const pure = a => {\n      return make$5(() => Promise.resolve(a));\n    };\n    const Future = {\n      nu: nu$2,\n      pure\n    };\n\n    const suffix = constant$1('sink');\n    const partType$1 = constant$1(optional({\n      name: suffix(),\n      overrides: constant$1({\n        dom: { tag: 'div' },\n        behaviours: derive$1([Positioning.config({ useFixed: always })]),\n        events: derive$2([\n          cutter(keydown()),\n          cutter(mousedown()),\n          cutter(click())\n        ])\n      })\n    }));\n\n    const getAnchor = (detail, component) => {\n      const hotspot = detail.getHotspot(component).getOr(component);\n      const type = 'hotspot';\n      const overrides = detail.getAnchorOverrides();\n      return detail.layouts.fold(() => ({\n        type,\n        hotspot,\n        overrides\n      }), layouts => ({\n        type,\n        hotspot,\n        overrides,\n        layouts\n      }));\n    };\n    const fetch = (detail, mapFetch, component) => {\n      const fetcher = detail.fetch;\n      return fetcher(component).map(mapFetch);\n    };\n    const openF = (detail, mapFetch, anchor, component, sandbox, externals, highlightOnOpen) => {\n      const futureData = fetch(detail, mapFetch, component);\n      const getLazySink = getSink(component, detail);\n      return futureData.map(tdata => tdata.bind(data => Optional.from(tieredMenu.sketch({\n        ...externals.menu(),\n        uid: generate$5(''),\n        data,\n        highlightOnOpen,\n        onOpenMenu: (tmenu, menu) => {\n          const sink = getLazySink().getOrDie();\n          Positioning.position(sink, menu, { anchor });\n          Sandboxing.decloak(sandbox);\n        },\n        onOpenSubmenu: (tmenu, item, submenu) => {\n          const sink = getLazySink().getOrDie();\n          Positioning.position(sink, submenu, {\n            anchor: {\n              type: 'submenu',\n              item\n            }\n          });\n          Sandboxing.decloak(sandbox);\n        },\n        onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => {\n          const sink = getLazySink().getOrDie();\n          Positioning.position(sink, primaryMenu, { anchor });\n          each$1(submenuTriggers, st => {\n            Positioning.position(sink, st.triggeredMenu, {\n              anchor: {\n                type: 'submenu',\n                item: st.triggeringItem\n              }\n            });\n          });\n        },\n        onEscape: () => {\n          Focusing.focus(component);\n          Sandboxing.close(sandbox);\n          return Optional.some(true);\n        }\n      }))));\n    };\n    const open = (detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen) => {\n      const anchor = getAnchor(detail, hotspot);\n      const processed = openF(detail, mapFetch, anchor, hotspot, sandbox, externals, highlightOnOpen);\n      return processed.map(tdata => {\n        tdata.fold(() => {\n          if (Sandboxing.isOpen(sandbox)) {\n            Sandboxing.close(sandbox);\n          }\n        }, data => {\n          Sandboxing.cloak(sandbox);\n          Sandboxing.open(sandbox, data);\n          onOpenSync(sandbox);\n        });\n        return sandbox;\n      });\n    };\n    const close = (detail, mapFetch, component, sandbox, _externals, _onOpenSync, _highlightOnOpen) => {\n      Sandboxing.close(sandbox);\n      return Future.pure(sandbox);\n    };\n    const togglePopup = (detail, mapFetch, hotspot, externals, onOpenSync, highlightOnOpen) => {\n      const sandbox = Coupling.getCoupled(hotspot, 'sandbox');\n      const showing = Sandboxing.isOpen(sandbox);\n      const action = showing ? close : open;\n      return action(detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen);\n    };\n    const matchWidth = (hotspot, container, useMinWidth) => {\n      const menu = Composing.getCurrent(container).getOr(container);\n      const buttonWidth = get$c(hotspot.element);\n      if (useMinWidth) {\n        set$8(menu.element, 'min-width', buttonWidth + 'px');\n      } else {\n        set$7(menu.element, buttonWidth);\n      }\n    };\n    const getSink = (anyInSystem, sinkDetail) => anyInSystem.getSystem().getByUid(sinkDetail.uid + '-' + suffix()).map(internalSink => () => Result.value(internalSink)).getOrThunk(() => sinkDetail.lazySink.fold(() => () => Result.error(new Error('No internal sink is specified, nor could an external sink be found')), lazySinkFn => () => lazySinkFn(anyInSystem)));\n    const doRepositionMenus = sandbox => {\n      Sandboxing.getState(sandbox).each(tmenu => {\n        tieredMenu.repositionMenus(tmenu);\n      });\n    };\n    const makeSandbox$1 = (detail, hotspot, extras) => {\n      const ariaControls = manager();\n      const onOpen = (component, menu) => {\n        const anchor = getAnchor(detail, hotspot);\n        ariaControls.link(hotspot.element);\n        if (detail.matchWidth) {\n          matchWidth(anchor.hotspot, menu, detail.useMinWidth);\n        }\n        detail.onOpen(anchor, component, menu);\n        if (extras !== undefined && extras.onOpen !== undefined) {\n          extras.onOpen(component, menu);\n        }\n      };\n      const onClose = (component, menu) => {\n        ariaControls.unlink(hotspot.element);\n        if (extras !== undefined && extras.onClose !== undefined) {\n          extras.onClose(component, menu);\n        }\n      };\n      const lazySink = getSink(hotspot, detail);\n      return {\n        dom: {\n          tag: 'div',\n          classes: detail.sandboxClasses,\n          attributes: {\n            id: ariaControls.id,\n            role: 'listbox'\n          }\n        },\n        behaviours: SketchBehaviours.augment(detail.sandboxBehaviours, [\n          Representing.config({\n            store: {\n              mode: 'memory',\n              initialValue: hotspot\n            }\n          }),\n          Sandboxing.config({\n            onOpen,\n            onClose,\n            isPartOf: (container, data, queryElem) => {\n              return isPartOf$1(data, queryElem) || isPartOf$1(hotspot, queryElem);\n            },\n            getAttachPoint: () => {\n              return lazySink().getOrDie();\n            }\n          }),\n          Composing.config({\n            find: sandbox => {\n              return Sandboxing.getState(sandbox).bind(menu => Composing.getCurrent(menu));\n            }\n          }),\n          Receiving.config({\n            channels: {\n              ...receivingChannel$1({ isExtraPart: never }),\n              ...receivingChannel({ doReposition: doRepositionMenus })\n            }\n          })\n        ])\n      };\n    };\n    const repositionMenus = comp => {\n      const sandbox = Coupling.getCoupled(comp, 'sandbox');\n      doRepositionMenus(sandbox);\n    };\n\n    const sandboxFields = () => [\n      defaulted('sandboxClasses', []),\n      SketchBehaviours.field('sandboxBehaviours', [\n        Composing,\n        Receiving,\n        Sandboxing,\n        Representing\n      ])\n    ];\n\n    const schema$k = constant$1([\n      required$1('dom'),\n      required$1('fetch'),\n      onHandler('onOpen'),\n      onKeyboardHandler('onExecute'),\n      defaulted('getHotspot', Optional.some),\n      defaulted('getAnchorOverrides', constant$1({})),\n      schema$y(),\n      field('dropdownBehaviours', [\n        Toggling,\n        Coupling,\n        Keying,\n        Focusing\n      ]),\n      required$1('toggleClass'),\n      defaulted('eventOrder', {}),\n      option$3('lazySink'),\n      defaulted('matchWidth', false),\n      defaulted('useMinWidth', false),\n      option$3('role')\n    ].concat(sandboxFields()));\n    const parts$e = constant$1([\n      external({\n        schema: [\n          tieredMenuMarkers(),\n          defaulted('fakeFocus', false)\n        ],\n        name: 'menu',\n        defaults: detail => {\n          return { onExecute: detail.onExecute };\n        }\n      }),\n      partType$1()\n    ]);\n\n    const factory$i = (detail, components, _spec, externals) => {\n      const lookupAttr = attr => get$g(detail.dom, 'attributes').bind(attrs => get$g(attrs, attr));\n      const switchToMenu = sandbox => {\n        Sandboxing.getState(sandbox).each(tmenu => {\n          tieredMenu.highlightPrimary(tmenu);\n        });\n      };\n      const togglePopup$1 = (dropdownComp, onOpenSync, highlightOnOpen) => {\n        return togglePopup(detail, identity, dropdownComp, externals, onOpenSync, highlightOnOpen);\n      };\n      const action = component => {\n        const onOpenSync = switchToMenu;\n        togglePopup$1(component, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n      };\n      const apis = {\n        expand: comp => {\n          if (!Toggling.isOn(comp)) {\n            togglePopup$1(comp, noop, HighlightOnOpen.HighlightNone).get(noop);\n          }\n        },\n        open: comp => {\n          if (!Toggling.isOn(comp)) {\n            togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n          }\n        },\n        refetch: comp => {\n          const optSandbox = Coupling.getExistingCoupled(comp, 'sandbox');\n          return optSandbox.fold(() => {\n            return togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).map(noop);\n          }, sandboxComp => {\n            return open(detail, identity, comp, sandboxComp, externals, noop, HighlightOnOpen.HighlightMenuAndItem).map(noop);\n          });\n        },\n        isOpen: Toggling.isOn,\n        close: comp => {\n          if (Toggling.isOn(comp)) {\n            togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n          }\n        },\n        repositionMenus: comp => {\n          if (Toggling.isOn(comp)) {\n            repositionMenus(comp);\n          }\n        }\n      };\n      const triggerExecute = (comp, _se) => {\n        emitExecute(comp);\n        return Optional.some(true);\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components,\n        behaviours: augment(detail.dropdownBehaviours, [\n          Toggling.config({\n            toggleClass: detail.toggleClass,\n            aria: { mode: 'expanded' }\n          }),\n          Coupling.config({\n            others: {\n              sandbox: hotspot => {\n                return makeSandbox$1(detail, hotspot, {\n                  onOpen: () => Toggling.on(hotspot),\n                  onClose: () => Toggling.off(hotspot)\n                });\n              }\n            }\n          }),\n          Keying.config({\n            mode: 'special',\n            onSpace: triggerExecute,\n            onEnter: triggerExecute,\n            onDown: (comp, _se) => {\n              if (Dropdown.isOpen(comp)) {\n                const sandbox = Coupling.getCoupled(comp, 'sandbox');\n                switchToMenu(sandbox);\n              } else {\n                Dropdown.open(comp);\n              }\n              return Optional.some(true);\n            },\n            onEscape: (comp, _se) => {\n              if (Dropdown.isOpen(comp)) {\n                Dropdown.close(comp);\n                return Optional.some(true);\n              } else {\n                return Optional.none();\n              }\n            }\n          }),\n          Focusing.config({})\n        ]),\n        events: events$a(Optional.some(action)),\n        eventOrder: {\n          ...detail.eventOrder,\n          [execute$5()]: [\n            'disabling',\n            'toggling',\n            'alloy.base.behaviour'\n          ]\n        },\n        apis,\n        domModification: {\n          attributes: {\n            'aria-haspopup': 'true',\n            ...detail.role.fold(() => ({}), role => ({ role })),\n            ...detail.dom.tag === 'button' ? { type: lookupAttr('type').getOr('button') } : {}\n          }\n        }\n      };\n    };\n    const Dropdown = composite({\n      name: 'Dropdown',\n      configFields: schema$k(),\n      partFields: parts$e(),\n      factory: factory$i,\n      apis: {\n        open: (apis, comp) => apis.open(comp),\n        refetch: (apis, comp) => apis.refetch(comp),\n        expand: (apis, comp) => apis.expand(comp),\n        close: (apis, comp) => apis.close(comp),\n        isOpen: (apis, comp) => apis.isOpen(comp),\n        repositionMenus: (apis, comp) => apis.repositionMenus(comp)\n      }\n    });\n\n    const identifyMenuLayout = searchMode => {\n      switch (searchMode.searchMode) {\n      case 'no-search': {\n          return { menuType: 'normal' };\n        }\n      default: {\n          return {\n            menuType: 'searchable',\n            searchMode\n          };\n        }\n      }\n    };\n    const handleRefetchTrigger = originalSandboxComp => {\n      const dropdown = Representing.getValue(originalSandboxComp);\n      const optSearcherState = findWithinSandbox(originalSandboxComp).map(saveState);\n      Dropdown.refetch(dropdown).get(() => {\n        const newSandboxComp = Coupling.getCoupled(dropdown, 'sandbox');\n        optSearcherState.each(searcherState => findWithinSandbox(newSandboxComp).each(inputComp => restoreState(inputComp, searcherState)));\n      });\n    };\n    const handleRedirectToMenuItem = (sandboxComp, se) => {\n      getActiveMenuItemFrom(sandboxComp).each(activeItem => {\n        retargetAndDispatchWith(sandboxComp, activeItem.element, se.event.eventType, se.event.interactionEvent);\n      });\n    };\n    const getActiveMenuItemFrom = sandboxComp => {\n      return Sandboxing.getState(sandboxComp).bind(Highlighting.getHighlighted).bind(Highlighting.getHighlighted);\n    };\n    const getSearchResults = activeMenuComp => {\n      return has(activeMenuComp.element, searchResultsClass) ? Optional.some(activeMenuComp.element) : descendant(activeMenuComp.element, '.' + searchResultsClass);\n    };\n    const updateAriaOnHighlight = (tmenuComp, menuComp, itemComp) => {\n      findWithinMenu(tmenuComp).each(inputComp => {\n        setActiveDescendant(inputComp, itemComp);\n        const optActiveResults = getSearchResults(menuComp);\n        optActiveResults.each(resultsElem => {\n          getOpt(resultsElem, 'id').each(controlledId => set$9(inputComp.element, 'aria-controls', controlledId));\n        });\n      });\n      set$9(itemComp.element, 'aria-selected', 'true');\n    };\n    const updateAriaOnDehighlight = (tmenuComp, menuComp, itemComp) => {\n      set$9(itemComp.element, 'aria-selected', 'false');\n    };\n    const focusSearchField = tmenuComp => {\n      findWithinMenu(tmenuComp).each(searcherComp => Focusing.focus(searcherComp));\n    };\n    const getSearchPattern = dropdownComp => {\n      const optSandboxComp = Coupling.getExistingCoupled(dropdownComp, 'sandbox');\n      return optSandboxComp.bind(findWithinSandbox).map(saveState).map(state => state.fetchPattern).getOr('');\n    };\n\n    var FocusMode;\n    (function (FocusMode) {\n      FocusMode[FocusMode['ContentFocus'] = 0] = 'ContentFocus';\n      FocusMode[FocusMode['UiFocus'] = 1] = 'UiFocus';\n    }(FocusMode || (FocusMode = {})));\n    const createMenuItemFromBridge = (item, itemResponse, backstage, menuHasIcons, isHorizontalMenu) => {\n      const providersBackstage = backstage.shared.providers;\n      const parseForHorizontalMenu = menuitem => !isHorizontalMenu ? menuitem : {\n        ...menuitem,\n        shortcut: Optional.none(),\n        icon: menuitem.text.isSome() ? Optional.none() : menuitem.icon\n      };\n      switch (item.type) {\n      case 'menuitem':\n        return createMenuItem(item).fold(handleError, d => Optional.some(normal(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons)));\n      case 'nestedmenuitem':\n        return createNestedMenuItem(item).fold(handleError, d => Optional.some(nested(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons, isHorizontalMenu)));\n      case 'togglemenuitem':\n        return createToggleMenuItem(item).fold(handleError, d => Optional.some(toggle$1(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons)));\n      case 'separator':\n        return createSeparatorMenuItem(item).fold(handleError, d => Optional.some(separator$3(d)));\n      case 'fancymenuitem':\n        return createFancyMenuItem(item).fold(handleError, d => fancy(d, backstage));\n      default: {\n          console.error('Unknown item in general menu', item);\n          return Optional.none();\n        }\n      }\n    };\n    const createAutocompleteItems = (items, matchText, onItemValueHandler, columns, itemResponse, sharedBackstage, highlightOn) => {\n      const renderText = columns === 1;\n      const renderIcons = !renderText || menuHasIcons(items);\n      return cat(map$2(items, item => {\n        switch (item.type) {\n        case 'separator':\n          return createSeparatorItem(item).fold(handleError, d => Optional.some(separator$3(d)));\n        case 'cardmenuitem':\n          return createCardMenuItem(item).fold(handleError, d => Optional.some(card({\n            ...d,\n            onAction: api => {\n              d.onAction(api);\n              onItemValueHandler(d.value, d.meta);\n            }\n          }, itemResponse, sharedBackstage, {\n            itemBehaviours: tooltipBehaviour(d.meta, sharedBackstage),\n            cardText: {\n              matchText,\n              highlightOn\n            }\n          })));\n        case 'autocompleteitem':\n        default:\n          return createAutocompleterItem(item).fold(handleError, d => Optional.some(autocomplete(d, matchText, renderText, 'normal', onItemValueHandler, itemResponse, sharedBackstage, renderIcons)));\n        }\n      }));\n    };\n    const createPartialMenu = (value, items, itemResponse, backstage, isHorizontalMenu, searchMode) => {\n      const hasIcons = menuHasIcons(items);\n      const alloyItems = cat(map$2(items, item => {\n        const itemHasIcon = i => isHorizontalMenu ? !has$2(i, 'text') : hasIcons;\n        const createItem = i => createMenuItemFromBridge(i, itemResponse, backstage, itemHasIcon(i), isHorizontalMenu);\n        if (item.type === 'nestedmenuitem' && item.getSubmenuItems().length <= 0) {\n          return createItem({\n            ...item,\n            enabled: false\n          });\n        } else {\n          return createItem(item);\n        }\n      }));\n      const menuLayout = identifyMenuLayout(searchMode);\n      const createPartial = isHorizontalMenu ? createHorizontalPartialMenuWithAlloyItems : createPartialMenuWithAlloyItems;\n      return createPartial(value, hasIcons, alloyItems, 1, menuLayout);\n    };\n    const createTieredDataFrom = partialMenu => tieredMenu.singleData(partialMenu.value, partialMenu);\n    const createInlineMenuFrom = (partialMenu, columns, focusMode, presets) => {\n      const movement = deriveMenuMovement(columns, presets);\n      const menuMarkers = markers(presets);\n      return {\n        data: createTieredDataFrom({\n          ...partialMenu,\n          movement,\n          menuBehaviours: SimpleBehaviours.unnamedEvents(columns !== 'auto' ? [] : [runOnAttached((comp, _se) => {\n              detectSize(comp, 4, menuMarkers.item).each(({numColumns, numRows}) => {\n                Keying.setGridSize(comp, numRows, numColumns);\n              });\n            })])\n        }),\n        menu: {\n          markers: markers(presets),\n          fakeFocus: focusMode === FocusMode.ContentFocus\n        }\n      };\n    };\n\n    const getAutocompleterRange = (dom, initRange) => {\n      return detect(SugarElement.fromDom(initRange.startContainer)).map(elm => {\n        const range = dom.createRng();\n        range.selectNode(elm.dom);\n        return range;\n      });\n    };\n    const register$b = (editor, sharedBackstage) => {\n      const processingAction = Cell(false);\n      const activeState = Cell(false);\n      const autocompleter = build$1(InlineView.sketch({\n        dom: {\n          tag: 'div',\n          classes: ['tox-autocompleter']\n        },\n        components: [],\n        fireDismissalEventInstead: {},\n        inlineBehaviours: derive$1([config('dismissAutocompleter', [run$1(dismissRequested(), () => cancelIfNecessary())])]),\n        lazySink: sharedBackstage.getSink\n      }));\n      const isMenuOpen = () => InlineView.isOpen(autocompleter);\n      const isActive = activeState.get;\n      const hideIfNecessary = () => {\n        if (isMenuOpen()) {\n          InlineView.hide(autocompleter);\n        }\n      };\n      const getMenu = () => InlineView.getContent(autocompleter).bind(tmenu => {\n        return get$h(tmenu.components(), 0);\n      });\n      const cancelIfNecessary = () => editor.execCommand('mceAutocompleterClose');\n      const getCombinedItems = matches => {\n        const columns = findMap(matches, m => Optional.from(m.columns)).getOr(1);\n        return bind$3(matches, match => {\n          const choices = match.items;\n          return createAutocompleteItems(choices, match.matchText, (itemValue, itemMeta) => {\n            const nr = editor.selection.getRng();\n            getAutocompleterRange(editor.dom, nr).each(range => {\n              const autocompleterApi = {\n                hide: () => cancelIfNecessary(),\n                reload: fetchOptions => {\n                  hideIfNecessary();\n                  editor.execCommand('mceAutocompleterReload', false, { fetchOptions });\n                }\n              };\n              processingAction.set(true);\n              match.onAction(autocompleterApi, range, itemValue, itemMeta);\n              processingAction.set(false);\n            });\n          }, columns, ItemResponse$1.BUBBLE_TO_SANDBOX, sharedBackstage, match.highlightOn);\n        });\n      };\n      const display = (lookupData, items) => {\n        findIn(SugarElement.fromDom(editor.getBody())).each(element => {\n          const columns = findMap(lookupData, ld => Optional.from(ld.columns)).getOr(1);\n          InlineView.showMenuAt(autocompleter, {\n            anchor: {\n              type: 'node',\n              root: SugarElement.fromDom(editor.getBody()),\n              node: Optional.from(element)\n            }\n          }, createInlineMenuFrom(createPartialMenuWithAlloyItems('autocompleter-value', true, items, columns, { menuType: 'normal' }), columns, FocusMode.ContentFocus, 'normal'));\n        });\n        getMenu().each(Highlighting.highlightFirst);\n      };\n      const updateDisplay = lookupData => {\n        const combinedItems = getCombinedItems(lookupData);\n        if (combinedItems.length > 0) {\n          display(lookupData, combinedItems);\n        } else {\n          hideIfNecessary();\n        }\n      };\n      editor.on('AutocompleterStart', ({lookupData}) => {\n        activeState.set(true);\n        processingAction.set(false);\n        updateDisplay(lookupData);\n      });\n      editor.on('AutocompleterUpdate', ({lookupData}) => updateDisplay(lookupData));\n      editor.on('AutocompleterEnd', () => {\n        hideIfNecessary();\n        activeState.set(false);\n        processingAction.set(false);\n      });\n      const autocompleterUiApi = {\n        cancelIfNecessary,\n        isMenuOpen,\n        isActive,\n        isProcessingAction: processingAction.get,\n        getMenu\n      };\n      AutocompleterEditorEvents.setup(autocompleterUiApi, editor);\n    };\n    const Autocompleter = { register: register$b };\n\n    const closest = (scope, selector, isRoot) => closest$1(scope, selector, isRoot).isSome();\n\n    const DelayedFunction = (fun, delay) => {\n      let ref = null;\n      const schedule = (...args) => {\n        ref = setTimeout(() => {\n          fun.apply(null, args);\n          ref = null;\n        }, delay);\n      };\n      const cancel = () => {\n        if (ref !== null) {\n          clearTimeout(ref);\n          ref = null;\n        }\n      };\n      return {\n        cancel,\n        schedule\n      };\n    };\n\n    const SIGNIFICANT_MOVE = 5;\n    const LONGPRESS_DELAY = 400;\n    const getTouch = event => {\n      const raw = event.raw;\n      if (raw.touches === undefined || raw.touches.length !== 1) {\n        return Optional.none();\n      }\n      return Optional.some(raw.touches[0]);\n    };\n    const isFarEnough = (touch, data) => {\n      const distX = Math.abs(touch.clientX - data.x);\n      const distY = Math.abs(touch.clientY - data.y);\n      return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n    };\n    const monitor = settings => {\n      const startData = value$2();\n      const longpressFired = Cell(false);\n      const longpress$1 = DelayedFunction(event => {\n        settings.triggerEvent(longpress(), event);\n        longpressFired.set(true);\n      }, LONGPRESS_DELAY);\n      const handleTouchstart = event => {\n        getTouch(event).each(touch => {\n          longpress$1.cancel();\n          const data = {\n            x: touch.clientX,\n            y: touch.clientY,\n            target: event.target\n          };\n          longpress$1.schedule(event);\n          longpressFired.set(false);\n          startData.set(data);\n        });\n        return Optional.none();\n      };\n      const handleTouchmove = event => {\n        longpress$1.cancel();\n        getTouch(event).each(touch => {\n          startData.on(data => {\n            if (isFarEnough(touch, data)) {\n              startData.clear();\n            }\n          });\n        });\n        return Optional.none();\n      };\n      const handleTouchend = event => {\n        longpress$1.cancel();\n        const isSame = data => eq(data.target, event.target);\n        return startData.get().filter(isSame).map(_data => {\n          if (longpressFired.get()) {\n            event.prevent();\n            return false;\n          } else {\n            return settings.triggerEvent(tap(), event);\n          }\n        });\n      };\n      const handlers = wrapAll([\n        {\n          key: touchstart(),\n          value: handleTouchstart\n        },\n        {\n          key: touchmove(),\n          value: handleTouchmove\n        },\n        {\n          key: touchend(),\n          value: handleTouchend\n        }\n      ]);\n      const fireIfReady = (event, type) => get$g(handlers, type).bind(handler => handler(event));\n      return { fireIfReady };\n    };\n\n    const isDangerous = event => {\n      const keyEv = event.raw;\n      return keyEv.which === BACKSPACE[0] && !contains$2([\n        'input',\n        'textarea'\n      ], name$3(event.target)) && !closest(event.target, '[contenteditable=\"true\"]');\n    };\n    const setup$d = (container, rawSettings) => {\n      const settings = {\n        stopBackspace: true,\n        ...rawSettings\n      };\n      const pointerEvents = [\n        'touchstart',\n        'touchmove',\n        'touchend',\n        'touchcancel',\n        'gesturestart',\n        'mousedown',\n        'mouseup',\n        'mouseover',\n        'mousemove',\n        'mouseout',\n        'click'\n      ];\n      const tapEvent = monitor(settings);\n      const simpleEvents = map$2(pointerEvents.concat([\n        'selectstart',\n        'input',\n        'contextmenu',\n        'change',\n        'transitionend',\n        'transitioncancel',\n        'drag',\n        'dragstart',\n        'dragend',\n        'dragenter',\n        'dragleave',\n        'dragover',\n        'drop',\n        'keyup'\n      ]), type => bind(container, type, event => {\n        tapEvent.fireIfReady(event, type).each(tapStopped => {\n          if (tapStopped) {\n            event.kill();\n          }\n        });\n        const stopped = settings.triggerEvent(type, event);\n        if (stopped) {\n          event.kill();\n        }\n      }));\n      const pasteTimeout = value$2();\n      const onPaste = bind(container, 'paste', event => {\n        tapEvent.fireIfReady(event, 'paste').each(tapStopped => {\n          if (tapStopped) {\n            event.kill();\n          }\n        });\n        const stopped = settings.triggerEvent('paste', event);\n        if (stopped) {\n          event.kill();\n        }\n        pasteTimeout.set(setTimeout(() => {\n          settings.triggerEvent(postPaste(), event);\n        }, 0));\n      });\n      const onKeydown = bind(container, 'keydown', event => {\n        const stopped = settings.triggerEvent('keydown', event);\n        if (stopped) {\n          event.kill();\n        } else if (settings.stopBackspace && isDangerous(event)) {\n          event.prevent();\n        }\n      });\n      const onFocusIn = bind(container, 'focusin', event => {\n        const stopped = settings.triggerEvent('focusin', event);\n        if (stopped) {\n          event.kill();\n        }\n      });\n      const focusoutTimeout = value$2();\n      const onFocusOut = bind(container, 'focusout', event => {\n        const stopped = settings.triggerEvent('focusout', event);\n        if (stopped) {\n          event.kill();\n        }\n        focusoutTimeout.set(setTimeout(() => {\n          settings.triggerEvent(postBlur(), event);\n        }, 0));\n      });\n      const unbind = () => {\n        each$1(simpleEvents, e => {\n          e.unbind();\n        });\n        onKeydown.unbind();\n        onFocusIn.unbind();\n        onFocusOut.unbind();\n        onPaste.unbind();\n        pasteTimeout.on(clearTimeout);\n        focusoutTimeout.on(clearTimeout);\n      };\n      return { unbind };\n    };\n\n    const derive = (rawEvent, rawTarget) => {\n      const source = get$g(rawEvent, 'target').getOr(rawTarget);\n      return Cell(source);\n    };\n\n    const fromSource = (event, source) => {\n      const stopper = Cell(false);\n      const cutter = Cell(false);\n      const stop = () => {\n        stopper.set(true);\n      };\n      const cut = () => {\n        cutter.set(true);\n      };\n      return {\n        stop,\n        cut,\n        isStopped: stopper.get,\n        isCut: cutter.get,\n        event,\n        setSource: source.set,\n        getSource: source.get\n      };\n    };\n    const fromExternal = event => {\n      const stopper = Cell(false);\n      const stop = () => {\n        stopper.set(true);\n      };\n      return {\n        stop,\n        cut: noop,\n        isStopped: stopper.get,\n        isCut: never,\n        event,\n        setSource: die('Cannot set source of a broadcasted event'),\n        getSource: die('Cannot get source of a broadcasted event')\n      };\n    };\n\n    const adt$1 = Adt.generate([\n      { stopped: [] },\n      { resume: ['element'] },\n      { complete: [] }\n    ]);\n    const doTriggerHandler = (lookup, eventType, rawEvent, target, source, logger) => {\n      const handler = lookup(eventType, target);\n      const simulatedEvent = fromSource(rawEvent, source);\n      return handler.fold(() => {\n        logger.logEventNoHandlers(eventType, target);\n        return adt$1.complete();\n      }, handlerInfo => {\n        const descHandler = handlerInfo.descHandler;\n        const eventHandler = getCurried(descHandler);\n        eventHandler(simulatedEvent);\n        if (simulatedEvent.isStopped()) {\n          logger.logEventStopped(eventType, handlerInfo.element, descHandler.purpose);\n          return adt$1.stopped();\n        } else if (simulatedEvent.isCut()) {\n          logger.logEventCut(eventType, handlerInfo.element, descHandler.purpose);\n          return adt$1.complete();\n        } else {\n          return parent(handlerInfo.element).fold(() => {\n            logger.logNoParent(eventType, handlerInfo.element, descHandler.purpose);\n            return adt$1.complete();\n          }, parent => {\n            logger.logEventResponse(eventType, handlerInfo.element, descHandler.purpose);\n            return adt$1.resume(parent);\n          });\n        }\n      });\n    };\n    const doTriggerOnUntilStopped = (lookup, eventType, rawEvent, rawTarget, source, logger) => doTriggerHandler(lookup, eventType, rawEvent, rawTarget, source, logger).fold(always, parent => doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger), never);\n    const triggerHandler = (lookup, eventType, rawEvent, target, logger) => {\n      const source = derive(rawEvent, target);\n      return doTriggerHandler(lookup, eventType, rawEvent, target, source, logger);\n    };\n    const broadcast = (listeners, rawEvent, _logger) => {\n      const simulatedEvent = fromExternal(rawEvent);\n      each$1(listeners, listener => {\n        const descHandler = listener.descHandler;\n        const handler = getCurried(descHandler);\n        handler(simulatedEvent);\n      });\n      return simulatedEvent.isStopped();\n    };\n    const triggerUntilStopped = (lookup, eventType, rawEvent, logger) => triggerOnUntilStopped(lookup, eventType, rawEvent, rawEvent.target, logger);\n    const triggerOnUntilStopped = (lookup, eventType, rawEvent, rawTarget, logger) => {\n      const source = derive(rawEvent, rawTarget);\n      return doTriggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, source, logger);\n    };\n\n    const eventHandler = (element, descHandler) => ({\n      element,\n      descHandler\n    });\n    const broadcastHandler = (id, handler) => ({\n      id,\n      descHandler: handler\n    });\n    const EventRegistry = () => {\n      const registry = {};\n      const registerId = (extraArgs, id, events) => {\n        each(events, (v, k) => {\n          const handlers = registry[k] !== undefined ? registry[k] : {};\n          handlers[id] = curryArgs(v, extraArgs);\n          registry[k] = handlers;\n        });\n      };\n      const findHandler = (handlers, elem) => read$1(elem).bind(id => get$g(handlers, id)).map(descHandler => eventHandler(elem, descHandler));\n      const filterByType = type => get$g(registry, type).map(handlers => mapToArray(handlers, (f, id) => broadcastHandler(id, f))).getOr([]);\n      const find = (isAboveRoot, type, target) => get$g(registry, type).bind(handlers => closest$4(target, elem => findHandler(handlers, elem), isAboveRoot));\n      const unregisterId = id => {\n        each(registry, (handlersById, _eventName) => {\n          if (has$2(handlersById, id)) {\n            delete handlersById[id];\n          }\n        });\n      };\n      return {\n        registerId,\n        unregisterId,\n        filterByType,\n        find\n      };\n    };\n\n    const Registry = () => {\n      const events = EventRegistry();\n      const components = {};\n      const readOrTag = component => {\n        const elem = component.element;\n        return read$1(elem).getOrThunk(() => write('uid-', component.element));\n      };\n      const failOnDuplicate = (component, tagId) => {\n        const conflict = components[tagId];\n        if (conflict === component) {\n          unregister(component);\n        } else {\n          throw new Error('The tagId \"' + tagId + '\" is already used by: ' + element(conflict.element) + '\\nCannot use it for: ' + element(component.element) + '\\n' + 'The conflicting element is' + (inBody(conflict.element) ? ' ' : ' not ') + 'already in the DOM');\n        }\n      };\n      const register = component => {\n        const tagId = readOrTag(component);\n        if (hasNonNullableKey(components, tagId)) {\n          failOnDuplicate(component, tagId);\n        }\n        const extraArgs = [component];\n        events.registerId(extraArgs, tagId, component.events);\n        components[tagId] = component;\n      };\n      const unregister = component => {\n        read$1(component.element).each(tagId => {\n          delete components[tagId];\n          events.unregisterId(tagId);\n        });\n      };\n      const filter = type => events.filterByType(type);\n      const find = (isAboveRoot, type, target) => events.find(isAboveRoot, type, target);\n      const getById = id => get$g(components, id);\n      return {\n        find,\n        filter,\n        register,\n        unregister,\n        getById\n      };\n    };\n\n    const factory$h = detail => {\n      const {attributes, ...domWithoutAttributes} = detail.dom;\n      return {\n        uid: detail.uid,\n        dom: {\n          tag: 'div',\n          attributes: {\n            role: 'presentation',\n            ...attributes\n          },\n          ...domWithoutAttributes\n        },\n        components: detail.components,\n        behaviours: get$3(detail.containerBehaviours),\n        events: detail.events,\n        domModification: detail.domModification,\n        eventOrder: detail.eventOrder\n      };\n    };\n    const Container = single({\n      name: 'Container',\n      factory: factory$h,\n      configFields: [\n        defaulted('components', []),\n        field('containerBehaviours', []),\n        defaulted('events', {}),\n        defaulted('domModification', {}),\n        defaulted('eventOrder', {})\n      ]\n    });\n\n    const takeover = root => {\n      const isAboveRoot = el => parent(root.element).fold(always, parent => eq(el, parent));\n      const registry = Registry();\n      const lookup = (eventName, target) => registry.find(isAboveRoot, eventName, target);\n      const domEvents = setup$d(root.element, {\n        triggerEvent: (eventName, event) => {\n          return monitorEvent(eventName, event.target, logger => triggerUntilStopped(lookup, eventName, event, logger));\n        }\n      });\n      const systemApi = {\n        debugInfo: constant$1('real'),\n        triggerEvent: (eventName, target, data) => {\n          monitorEvent(eventName, target, logger => triggerOnUntilStopped(lookup, eventName, data, target, logger));\n        },\n        triggerFocus: (target, originator) => {\n          read$1(target).fold(() => {\n            focus$3(target);\n          }, _alloyId => {\n            monitorEvent(focus$4(), target, logger => {\n              triggerHandler(lookup, focus$4(), {\n                originator,\n                kill: noop,\n                prevent: noop,\n                target\n              }, target, logger);\n              return false;\n            });\n          });\n        },\n        triggerEscape: (comp, simulatedEvent) => {\n          systemApi.triggerEvent('keydown', comp.element, simulatedEvent.event);\n        },\n        getByUid: uid => {\n          return getByUid(uid);\n        },\n        getByDom: elem => {\n          return getByDom(elem);\n        },\n        build: build$1,\n        buildOrPatch: buildOrPatch,\n        addToGui: c => {\n          add(c);\n        },\n        removeFromGui: c => {\n          remove(c);\n        },\n        addToWorld: c => {\n          addToWorld(c);\n        },\n        removeFromWorld: c => {\n          removeFromWorld(c);\n        },\n        broadcast: message => {\n          broadcast$1(message);\n        },\n        broadcastOn: (channels, message) => {\n          broadcastOn(channels, message);\n        },\n        broadcastEvent: (eventName, event) => {\n          broadcastEvent(eventName, event);\n        },\n        isConnected: always\n      };\n      const addToWorld = component => {\n        component.connect(systemApi);\n        if (!isText(component.element)) {\n          registry.register(component);\n          each$1(component.components(), addToWorld);\n          systemApi.triggerEvent(systemInit(), component.element, { target: component.element });\n        }\n      };\n      const removeFromWorld = component => {\n        if (!isText(component.element)) {\n          each$1(component.components(), removeFromWorld);\n          registry.unregister(component);\n        }\n        component.disconnect();\n      };\n      const add = component => {\n        attach(root, component);\n      };\n      const remove = component => {\n        detach(component);\n      };\n      const destroy = () => {\n        domEvents.unbind();\n        remove$5(root.element);\n      };\n      const broadcastData = data => {\n        const receivers = registry.filter(receive());\n        each$1(receivers, receiver => {\n          const descHandler = receiver.descHandler;\n          const handler = getCurried(descHandler);\n          handler(data);\n        });\n      };\n      const broadcast$1 = message => {\n        broadcastData({\n          universal: true,\n          data: message\n        });\n      };\n      const broadcastOn = (channels, message) => {\n        broadcastData({\n          universal: false,\n          channels,\n          data: message\n        });\n      };\n      const broadcastEvent = (eventName, event) => {\n        const listeners = registry.filter(eventName);\n        return broadcast(listeners, event);\n      };\n      const getByUid = uid => registry.getById(uid).fold(() => Result.error(new Error('Could not find component with uid: \"' + uid + '\" in system.')), Result.value);\n      const getByDom = elem => {\n        const uid = read$1(elem).getOr('not found');\n        return getByUid(uid);\n      };\n      addToWorld(root);\n      return {\n        root,\n        element: root.element,\n        destroy,\n        add,\n        remove,\n        getByUid,\n        getByDom,\n        addToWorld,\n        removeFromWorld,\n        broadcast: broadcast$1,\n        broadcastOn,\n        broadcastEvent\n      };\n    };\n\n    const renderBar = (spec, backstage) => ({\n      dom: {\n        tag: 'div',\n        classes: [\n          'tox-bar',\n          'tox-form__controls-h-stack'\n        ]\n      },\n      components: map$2(spec.items, backstage.interpreter)\n    });\n\n    const schema$j = constant$1([\n      defaulted('prefix', 'form-field'),\n      field('fieldBehaviours', [\n        Composing,\n        Representing\n      ])\n    ]);\n    const parts$d = constant$1([\n      optional({\n        schema: [required$1('dom')],\n        name: 'label'\n      }),\n      optional({\n        factory: {\n          sketch: spec => {\n            return {\n              uid: spec.uid,\n              dom: {\n                tag: 'span',\n                styles: { display: 'none' },\n                attributes: { 'aria-hidden': 'true' },\n                innerHtml: spec.text\n              }\n            };\n          }\n        },\n        schema: [required$1('text')],\n        name: 'aria-descriptor'\n      }),\n      required({\n        factory: {\n          sketch: spec => {\n            const excludeFactory = exclude(spec, ['factory']);\n            return spec.factory.sketch(excludeFactory);\n          }\n        },\n        schema: [required$1('factory')],\n        name: 'field'\n      })\n    ]);\n\n    const factory$g = (detail, components, _spec, _externals) => {\n      const behaviours = augment(detail.fieldBehaviours, [\n        Composing.config({\n          find: container => {\n            return getPart(container, detail, 'field');\n          }\n        }),\n        Representing.config({\n          store: {\n            mode: 'manual',\n            getValue: field => {\n              return Composing.getCurrent(field).bind(Representing.getValue);\n            },\n            setValue: (field, value) => {\n              Composing.getCurrent(field).each(current => {\n                Representing.setValue(current, value);\n              });\n            }\n          }\n        })\n      ]);\n      const events = derive$2([runOnAttached((component, _simulatedEvent) => {\n          const ps = getParts(component, detail, [\n            'label',\n            'field',\n            'aria-descriptor'\n          ]);\n          ps.field().each(field => {\n            const id = generate$6(detail.prefix);\n            ps.label().each(label => {\n              set$9(label.element, 'for', id);\n              set$9(field.element, 'id', id);\n            });\n            ps['aria-descriptor']().each(descriptor => {\n              const descriptorId = generate$6(detail.prefix);\n              set$9(descriptor.element, 'id', descriptorId);\n              set$9(field.element, 'aria-describedby', descriptorId);\n            });\n          });\n        })]);\n      const apis = {\n        getField: container => getPart(container, detail, 'field'),\n        getLabel: container => getPart(container, detail, 'label')\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components,\n        behaviours,\n        events,\n        apis\n      };\n    };\n    const FormField = composite({\n      name: 'FormField',\n      configFields: schema$j(),\n      partFields: parts$d(),\n      factory: factory$g,\n      apis: {\n        getField: (apis, comp) => apis.getField(comp),\n        getLabel: (apis, comp) => apis.getLabel(comp)\n      }\n    });\n\n    const exhibit$2 = (base, tabConfig) => nu$7({\n      attributes: wrapAll([{\n          key: tabConfig.tabAttr,\n          value: 'true'\n        }])\n    });\n\n    var ActiveTabstopping = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        exhibit: exhibit$2\n    });\n\n    var TabstopSchema = [defaulted('tabAttr', 'data-alloy-tabstop')];\n\n    const Tabstopping = create$3({\n      fields: TabstopSchema,\n      name: 'tabstopping',\n      active: ActiveTabstopping\n    });\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n    const renderFormFieldWith = (pLabel, pField, extraClasses, extraBehaviours) => {\n      const spec = renderFormFieldSpecWith(pLabel, pField, extraClasses, extraBehaviours);\n      return FormField.sketch(spec);\n    };\n    const renderFormField = (pLabel, pField) => renderFormFieldWith(pLabel, pField, [], []);\n    const renderFormFieldSpecWith = (pLabel, pField, extraClasses, extraBehaviours) => ({\n      dom: renderFormFieldDomWith(extraClasses),\n      components: pLabel.toArray().concat([pField]),\n      fieldBehaviours: derive$1(extraBehaviours)\n    });\n    const renderFormFieldDom = () => renderFormFieldDomWith([]);\n    const renderFormFieldDomWith = extraClasses => ({\n      tag: 'div',\n      classes: ['tox-form__group'].concat(extraClasses)\n    });\n    const renderLabel$2 = (label, providersBackstage) => FormField.parts.label({\n      dom: {\n        tag: 'label',\n        classes: ['tox-label']\n      },\n      components: [text$1(providersBackstage.translate(label))]\n    });\n\n    const formChangeEvent = generate$6('form-component-change');\n    const formCloseEvent = generate$6('form-close');\n    const formCancelEvent = generate$6('form-cancel');\n    const formActionEvent = generate$6('form-action');\n    const formSubmitEvent = generate$6('form-submit');\n    const formBlockEvent = generate$6('form-block');\n    const formUnblockEvent = generate$6('form-unblock');\n    const formTabChangeEvent = generate$6('form-tabchange');\n    const formResizeEvent = generate$6('form-resize');\n\n    const renderCollection = (spec, providersBackstage, initialData) => {\n      const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n      const runOnItem = f => (comp, se) => {\n        closest$1(se.event.target, '[data-collection-item-value]').each(target => {\n          f(comp, se, target, get$f(target, 'data-collection-item-value'));\n        });\n      };\n      const setContents = (comp, items) => {\n        const htmlLines = map$2(items, item => {\n          const itemText = global$8.translate(item.text);\n          const textContent = spec.columns === 1 ? `<div class=\"tox-collection__item-label\">${ itemText }</div>` : '';\n          const iconContent = `<div class=\"tox-collection__item-icon\">${ item.icon }</div>`;\n          const mapItemName = {\n            '_': ' ',\n            ' - ': ' ',\n            '-': ' '\n          };\n          const ariaLabel = itemText.replace(/\\_| \\- |\\-/g, match => mapItemName[match]);\n          const disabledClass = providersBackstage.isDisabled() ? ' tox-collection__item--state-disabled' : '';\n          return `<div class=\"tox-collection__item${ disabledClass }\" tabindex=\"-1\" data-collection-item-value=\"${ global$3.encodeAllRaw(item.value) }\" title=\"${ ariaLabel }\" aria-label=\"${ ariaLabel }\">${ iconContent }${ textContent }</div>`;\n        });\n        const chunks = spec.columns !== 'auto' && spec.columns > 1 ? chunk$1(htmlLines, spec.columns) : [htmlLines];\n        const html = map$2(chunks, ch => `<div class=\"tox-collection__group\">${ ch.join('') }</div>`);\n        set$6(comp.element, html.join(''));\n      };\n      const onClick = runOnItem((comp, se, tgt, itemValue) => {\n        se.stop();\n        if (!providersBackstage.isDisabled()) {\n          emitWith(comp, formActionEvent, {\n            name: spec.name,\n            value: itemValue\n          });\n        }\n      });\n      const collectionEvents = [\n        run$1(mouseover(), runOnItem((comp, se, tgt) => {\n          focus$3(tgt);\n        })),\n        run$1(click(), onClick),\n        run$1(tap(), onClick),\n        run$1(focusin(), runOnItem((comp, se, tgt) => {\n          descendant(comp.element, '.' + activeClass).each(currentActive => {\n            remove$2(currentActive, activeClass);\n          });\n          add$2(tgt, activeClass);\n        })),\n        run$1(focusout(), runOnItem(comp => {\n          descendant(comp.element, '.' + activeClass).each(currentActive => {\n            remove$2(currentActive, activeClass);\n          });\n        })),\n        runOnExecute$1(runOnItem((comp, se, tgt, itemValue) => {\n          emitWith(comp, formActionEvent, {\n            name: spec.name,\n            value: itemValue\n          });\n        }))\n      ];\n      const iterCollectionItems = (comp, applyAttributes) => map$2(descendants(comp.element, '.tox-collection__item'), applyAttributes);\n      const pField = FormField.parts.field({\n        dom: {\n          tag: 'div',\n          classes: ['tox-collection'].concat(spec.columns !== 1 ? ['tox-collection--grid'] : ['tox-collection--list'])\n        },\n        components: [],\n        factory: { sketch: identity },\n        behaviours: derive$1([\n          Disabling.config({\n            disabled: providersBackstage.isDisabled,\n            onDisabled: comp => {\n              iterCollectionItems(comp, childElm => {\n                add$2(childElm, 'tox-collection__item--state-disabled');\n                set$9(childElm, 'aria-disabled', true);\n              });\n            },\n            onEnabled: comp => {\n              iterCollectionItems(comp, childElm => {\n                remove$2(childElm, 'tox-collection__item--state-disabled');\n                remove$7(childElm, 'aria-disabled');\n              });\n            }\n          }),\n          receivingConfig(),\n          Replacing.config({}),\n          Representing.config({\n            store: {\n              mode: 'memory',\n              initialValue: initialData.getOr([])\n            },\n            onSetValue: (comp, items) => {\n              setContents(comp, items);\n              if (spec.columns === 'auto') {\n                detectSize(comp, 5, 'tox-collection__item').each(({numRows, numColumns}) => {\n                  Keying.setGridSize(comp, numRows, numColumns);\n                });\n              }\n              emit(comp, formResizeEvent);\n            }\n          }),\n          Tabstopping.config({}),\n          Keying.config(deriveCollectionMovement(spec.columns, 'normal')),\n          config('collection-events', collectionEvents)\n        ]),\n        eventOrder: {\n          [execute$5()]: [\n            'disabling',\n            'alloy.base.behaviour',\n            'collection-events'\n          ]\n        }\n      });\n      const extraClasses = ['tox-form__group--collection'];\n      return renderFormFieldWith(pLabel, pField, extraClasses, []);\n    };\n\n    const ariaElements = [\n      'input',\n      'textarea'\n    ];\n    const isAriaElement = elem => {\n      const name = name$3(elem);\n      return contains$2(ariaElements, name);\n    };\n    const markValid = (component, invalidConfig) => {\n      const elem = invalidConfig.getRoot(component).getOr(component.element);\n      remove$2(elem, invalidConfig.invalidClass);\n      invalidConfig.notify.each(notifyInfo => {\n        if (isAriaElement(component.element)) {\n          set$9(component.element, 'aria-invalid', false);\n        }\n        notifyInfo.getContainer(component).each(container => {\n          set$6(container, notifyInfo.validHtml);\n        });\n        notifyInfo.onValid(component);\n      });\n    };\n    const markInvalid = (component, invalidConfig, invalidState, text) => {\n      const elem = invalidConfig.getRoot(component).getOr(component.element);\n      add$2(elem, invalidConfig.invalidClass);\n      invalidConfig.notify.each(notifyInfo => {\n        if (isAriaElement(component.element)) {\n          set$9(component.element, 'aria-invalid', true);\n        }\n        notifyInfo.getContainer(component).each(container => {\n          set$6(container, text);\n        });\n        notifyInfo.onInvalid(component, text);\n      });\n    };\n    const query = (component, invalidConfig, _invalidState) => invalidConfig.validator.fold(() => Future.pure(Result.value(true)), validatorInfo => validatorInfo.validate(component));\n    const run = (component, invalidConfig, invalidState) => {\n      invalidConfig.notify.each(notifyInfo => {\n        notifyInfo.onValidate(component);\n      });\n      return query(component, invalidConfig).map(valid => {\n        if (component.getSystem().isConnected()) {\n          return valid.fold(err => {\n            markInvalid(component, invalidConfig, invalidState, err);\n            return Result.error(err);\n          }, v => {\n            markValid(component, invalidConfig);\n            return Result.value(v);\n          });\n        } else {\n          return Result.error('No longer in system');\n        }\n      });\n    };\n    const isInvalid = (component, invalidConfig) => {\n      const elem = invalidConfig.getRoot(component).getOr(component.element);\n      return has(elem, invalidConfig.invalidClass);\n    };\n\n    var InvalidateApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        markValid: markValid,\n        markInvalid: markInvalid,\n        query: query,\n        run: run,\n        isInvalid: isInvalid\n    });\n\n    const events$8 = (invalidConfig, invalidState) => invalidConfig.validator.map(validatorInfo => derive$2([run$1(validatorInfo.onEvent, component => {\n        run(component, invalidConfig, invalidState).get(identity);\n      })].concat(validatorInfo.validateOnLoad ? [runOnAttached(component => {\n        run(component, invalidConfig, invalidState).get(noop);\n      })] : []))).getOr({});\n\n    var ActiveInvalidate = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        events: events$8\n    });\n\n    var InvalidateSchema = [\n      required$1('invalidClass'),\n      defaulted('getRoot', Optional.none),\n      optionObjOf('notify', [\n        defaulted('aria', 'alert'),\n        defaulted('getContainer', Optional.none),\n        defaulted('validHtml', ''),\n        onHandler('onValid'),\n        onHandler('onInvalid'),\n        onHandler('onValidate')\n      ]),\n      optionObjOf('validator', [\n        required$1('validate'),\n        defaulted('onEvent', 'input'),\n        defaulted('validateOnLoad', true)\n      ])\n    ];\n\n    const Invalidating = create$3({\n      fields: InvalidateSchema,\n      name: 'invalidating',\n      active: ActiveInvalidate,\n      apis: InvalidateApis,\n      extra: {\n        validation: validator => {\n          return component => {\n            const v = Representing.getValue(component);\n            return Future.pure(validator(v));\n          };\n        }\n      }\n    });\n\n    const exhibit$1 = () => nu$7({\n      styles: {\n        '-webkit-user-select': 'none',\n        'user-select': 'none',\n        '-ms-user-select': 'none',\n        '-moz-user-select': '-moz-none'\n      },\n      attributes: { unselectable: 'on' }\n    });\n    const events$7 = () => derive$2([abort(selectstart(), always)]);\n\n    var ActiveUnselecting = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        events: events$7,\n        exhibit: exhibit$1\n    });\n\n    const Unselecting = create$3({\n      fields: [],\n      name: 'unselecting',\n      active: ActiveUnselecting\n    });\n\n    const renderPanelButton = (spec, sharedBackstage) => Dropdown.sketch({\n      dom: spec.dom,\n      components: spec.components,\n      toggleClass: 'mce-active',\n      dropdownBehaviours: derive$1([\n        DisablingConfigs.button(sharedBackstage.providers.isDisabled),\n        receivingConfig(),\n        Unselecting.config({}),\n        Tabstopping.config({})\n      ]),\n      layouts: spec.layouts,\n      sandboxClasses: ['tox-dialog__popups'],\n      lazySink: sharedBackstage.getSink,\n      fetch: comp => Future.nu(callback => spec.fetch(callback)).map(items => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n        spec.onItemAction(comp, value);\n      }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, sharedBackstage.providers), { movement: deriveMenuMovement(spec.columns, spec.presets) })))),\n      parts: { menu: part(false, 1, spec.presets) }\n    });\n\n    const colorInputChangeEvent = generate$6('color-input-change');\n    const colorSwatchChangeEvent = generate$6('color-swatch-change');\n    const colorPickerCancelEvent = generate$6('color-picker-cancel');\n    const renderColorInput = (spec, sharedBackstage, colorInputBackstage, initialData) => {\n      const pField = FormField.parts.field({\n        factory: Input,\n        inputClasses: ['tox-textfield'],\n        data: initialData,\n        onSetValue: c => Invalidating.run(c).get(noop),\n        inputBehaviours: derive$1([\n          Disabling.config({ disabled: sharedBackstage.providers.isDisabled }),\n          receivingConfig(),\n          Tabstopping.config({}),\n          Invalidating.config({\n            invalidClass: 'tox-textbox-field-invalid',\n            getRoot: comp => parentElement(comp.element),\n            notify: {\n              onValid: comp => {\n                const val = Representing.getValue(comp);\n                emitWith(comp, colorInputChangeEvent, { color: val });\n              }\n            },\n            validator: {\n              validateOnLoad: false,\n              validate: input => {\n                const inputValue = Representing.getValue(input);\n                if (inputValue.length === 0) {\n                  return Future.pure(Result.value(true));\n                } else {\n                  const span = SugarElement.fromTag('span');\n                  set$8(span, 'background-color', inputValue);\n                  const res = getRaw(span, 'background-color').fold(() => Result.error('blah'), _ => Result.value(inputValue));\n                  return Future.pure(res);\n                }\n              }\n            }\n          })\n        ]),\n        selectOnFocus: false\n      });\n      const pLabel = spec.label.map(label => renderLabel$2(label, sharedBackstage.providers));\n      const emitSwatchChange = (colorBit, value) => {\n        emitWith(colorBit, colorSwatchChangeEvent, { value });\n      };\n      const onItemAction = (comp, value) => {\n        memColorButton.getOpt(comp).each(colorBit => {\n          if (value === 'custom') {\n            colorInputBackstage.colorPicker(valueOpt => {\n              valueOpt.fold(() => emit(colorBit, colorPickerCancelEvent), value => {\n                emitSwatchChange(colorBit, value);\n                addColor(value);\n              });\n            }, '#ffffff');\n          } else if (value === 'remove') {\n            emitSwatchChange(colorBit, '');\n          } else {\n            emitSwatchChange(colorBit, value);\n          }\n        });\n      };\n      const memColorButton = record(renderPanelButton({\n        dom: {\n          tag: 'span',\n          attributes: { 'aria-label': sharedBackstage.providers.translate('Color swatch') }\n        },\n        layouts: {\n          onRtl: () => [\n            southwest$2,\n            southeast$2,\n            south$2\n          ],\n          onLtr: () => [\n            southeast$2,\n            southwest$2,\n            south$2\n          ]\n        },\n        components: [],\n        fetch: getFetch$1(colorInputBackstage.getColors(), colorInputBackstage.hasCustomColors()),\n        columns: colorInputBackstage.getColorCols(),\n        presets: 'color',\n        onItemAction\n      }, sharedBackstage));\n      return FormField.sketch({\n        dom: {\n          tag: 'div',\n          classes: ['tox-form__group']\n        },\n        components: pLabel.toArray().concat([{\n            dom: {\n              tag: 'div',\n              classes: ['tox-color-input']\n            },\n            components: [\n              pField,\n              memColorButton.asSpec()\n            ]\n          }]),\n        fieldBehaviours: derive$1([config('form-field-events', [\n            run$1(colorInputChangeEvent, (comp, se) => {\n              memColorButton.getOpt(comp).each(colorButton => {\n                set$8(colorButton.element, 'background-color', se.event.color);\n              });\n              emitWith(comp, formChangeEvent, { name: spec.name });\n            }),\n            run$1(colorSwatchChangeEvent, (comp, se) => {\n              FormField.getField(comp).each(field => {\n                Representing.setValue(field, se.event.value);\n                Composing.getCurrent(comp).each(Focusing.focus);\n              });\n            }),\n            run$1(colorPickerCancelEvent, (comp, _se) => {\n              FormField.getField(comp).each(_field => {\n                Composing.getCurrent(comp).each(Focusing.focus);\n              });\n            })\n          ])])\n      });\n    };\n\n    const labelPart = optional({\n      schema: [required$1('dom')],\n      name: 'label'\n    });\n    const edgePart = name => optional({\n      name: '' + name + '-edge',\n      overrides: detail => {\n        const action = detail.model.manager.edgeActions[name];\n        return action.fold(() => ({}), a => ({\n          events: derive$2([\n            runActionExtra(touchstart(), (comp, se, d) => a(comp, d), [detail]),\n            runActionExtra(mousedown(), (comp, se, d) => a(comp, d), [detail]),\n            runActionExtra(mousemove(), (comp, se, det) => {\n              if (det.mouseIsDown.get()) {\n                a(comp, det);\n              }\n            }, [detail])\n          ])\n        }));\n      }\n    });\n    const tlEdgePart = edgePart('top-left');\n    const tedgePart = edgePart('top');\n    const trEdgePart = edgePart('top-right');\n    const redgePart = edgePart('right');\n    const brEdgePart = edgePart('bottom-right');\n    const bedgePart = edgePart('bottom');\n    const blEdgePart = edgePart('bottom-left');\n    const ledgePart = edgePart('left');\n    const thumbPart = required({\n      name: 'thumb',\n      defaults: constant$1({ dom: { styles: { position: 'absolute' } } }),\n      overrides: detail => {\n        return {\n          events: derive$2([\n            redirectToPart(touchstart(), detail, 'spectrum'),\n            redirectToPart(touchmove(), detail, 'spectrum'),\n            redirectToPart(touchend(), detail, 'spectrum'),\n            redirectToPart(mousedown(), detail, 'spectrum'),\n            redirectToPart(mousemove(), detail, 'spectrum'),\n            redirectToPart(mouseup(), detail, 'spectrum')\n          ])\n        };\n      }\n    });\n    const spectrumPart = required({\n      schema: [customField('mouseIsDown', () => Cell(false))],\n      name: 'spectrum',\n      overrides: detail => {\n        const modelDetail = detail.model;\n        const model = modelDetail.manager;\n        const setValueFrom = (component, simulatedEvent) => model.getValueFromEvent(simulatedEvent).map(value => model.setValueFrom(component, detail, value));\n        return {\n          behaviours: derive$1([\n            Keying.config({\n              mode: 'special',\n              onLeft: spectrum => model.onLeft(spectrum, detail),\n              onRight: spectrum => model.onRight(spectrum, detail),\n              onUp: spectrum => model.onUp(spectrum, detail),\n              onDown: spectrum => model.onDown(spectrum, detail)\n            }),\n            Focusing.config({})\n          ]),\n          events: derive$2([\n            run$1(touchstart(), setValueFrom),\n            run$1(touchmove(), setValueFrom),\n            run$1(mousedown(), setValueFrom),\n            run$1(mousemove(), (spectrum, se) => {\n              if (detail.mouseIsDown.get()) {\n                setValueFrom(spectrum, se);\n              }\n            })\n          ])\n        };\n      }\n    });\n    var SliderParts = [\n      labelPart,\n      ledgePart,\n      redgePart,\n      tedgePart,\n      bedgePart,\n      tlEdgePart,\n      trEdgePart,\n      blEdgePart,\n      brEdgePart,\n      thumbPart,\n      spectrumPart\n    ];\n\n    const _sliderChangeEvent = 'slider.change.value';\n    const sliderChangeEvent = constant$1(_sliderChangeEvent);\n    const isTouchEvent$2 = evt => evt.type.indexOf('touch') !== -1;\n    const getEventSource = simulatedEvent => {\n      const evt = simulatedEvent.event.raw;\n      if (isTouchEvent$2(evt)) {\n        const touchEvent = evt;\n        return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? Optional.some(touchEvent.touches[0]).map(t => SugarPosition(t.clientX, t.clientY)) : Optional.none();\n      } else {\n        const mouseEvent = evt;\n        return mouseEvent.clientX !== undefined ? Optional.some(mouseEvent).map(me => SugarPosition(me.clientX, me.clientY)) : Optional.none();\n      }\n    };\n\n    const t = 'top', r = 'right', b = 'bottom', l = 'left';\n    const minX = detail => detail.model.minX;\n    const minY = detail => detail.model.minY;\n    const min1X = detail => detail.model.minX - 1;\n    const min1Y = detail => detail.model.minY - 1;\n    const maxX = detail => detail.model.maxX;\n    const maxY = detail => detail.model.maxY;\n    const max1X = detail => detail.model.maxX + 1;\n    const max1Y = detail => detail.model.maxY + 1;\n    const range = (detail, max, min) => max(detail) - min(detail);\n    const xRange = detail => range(detail, maxX, minX);\n    const yRange = detail => range(detail, maxY, minY);\n    const halfX = detail => xRange(detail) / 2;\n    const halfY = detail => yRange(detail) / 2;\n    const step = detail => detail.stepSize;\n    const snap = detail => detail.snapToGrid;\n    const snapStart = detail => detail.snapStart;\n    const rounded = detail => detail.rounded;\n    const hasEdge = (detail, edgeName) => detail[edgeName + '-edge'] !== undefined;\n    const hasLEdge = detail => hasEdge(detail, l);\n    const hasREdge = detail => hasEdge(detail, r);\n    const hasTEdge = detail => hasEdge(detail, t);\n    const hasBEdge = detail => hasEdge(detail, b);\n    const currentValue = detail => detail.model.value.get();\n\n    const xyValue = (x, y) => ({\n      x,\n      y\n    });\n    const fireSliderChange$3 = (component, value) => {\n      emitWith(component, sliderChangeEvent(), { value });\n    };\n    const setToTLEdgeXY = (edge, detail) => {\n      fireSliderChange$3(edge, xyValue(min1X(detail), min1Y(detail)));\n    };\n    const setToTEdge = (edge, detail) => {\n      fireSliderChange$3(edge, min1Y(detail));\n    };\n    const setToTEdgeXY = (edge, detail) => {\n      fireSliderChange$3(edge, xyValue(halfX(detail), min1Y(detail)));\n    };\n    const setToTREdgeXY = (edge, detail) => {\n      fireSliderChange$3(edge, xyValue(max1X(detail), min1Y(detail)));\n    };\n    const setToREdge = (edge, detail) => {\n      fireSliderChange$3(edge, max1X(detail));\n    };\n    const setToREdgeXY = (edge, detail) => {\n      fireSliderChange$3(edge, xyValue(max1X(detail), halfY(detail)));\n    };\n    const setToBREdgeXY = (edge, detail) => {\n      fireSliderChange$3(edge, xyValue(max1X(detail), max1Y(detail)));\n    };\n    const setToBEdge = (edge, detail) => {\n      fireSliderChange$3(edge, max1Y(detail));\n    };\n    const setToBEdgeXY = (edge, detail) => {\n      fireSliderChange$3(edge, xyValue(halfX(detail), max1Y(detail)));\n    };\n    const setToBLEdgeXY = (edge, detail) => {\n      fireSliderChange$3(edge, xyValue(min1X(detail), max1Y(detail)));\n    };\n    const setToLEdge = (edge, detail) => {\n      fireSliderChange$3(edge, min1X(detail));\n    };\n    const setToLEdgeXY = (edge, detail) => {\n      fireSliderChange$3(edge, xyValue(min1X(detail), halfY(detail)));\n    };\n\n    const reduceBy = (value, min, max, step) => {\n      if (value < min) {\n        return value;\n      } else if (value > max) {\n        return max;\n      } else if (value === min) {\n        return min - 1;\n      } else {\n        return Math.max(min, value - step);\n      }\n    };\n    const increaseBy = (value, min, max, step) => {\n      if (value > max) {\n        return value;\n      } else if (value < min) {\n        return min;\n      } else if (value === max) {\n        return max + 1;\n      } else {\n        return Math.min(max, value + step);\n      }\n    };\n    const capValue = (value, min, max) => Math.max(min, Math.min(max, value));\n    const snapValueOf = (value, min, max, step, snapStart) => snapStart.fold(() => {\n      const initValue = value - min;\n      const extraValue = Math.round(initValue / step) * step;\n      return capValue(min + extraValue, min - 1, max + 1);\n    }, start => {\n      const remainder = (value - start) % step;\n      const adjustment = Math.round(remainder / step);\n      const rawSteps = Math.floor((value - start) / step);\n      const maxSteps = Math.floor((max - start) / step);\n      const numSteps = Math.min(maxSteps, rawSteps + adjustment);\n      const r = start + numSteps * step;\n      return Math.max(start, r);\n    });\n    const findOffsetOf = (value, min, max) => Math.min(max, Math.max(value, min)) - min;\n    const findValueOf = args => {\n      const {min, max, range, value, step, snap, snapStart, rounded, hasMinEdge, hasMaxEdge, minBound, maxBound, screenRange} = args;\n      const capMin = hasMinEdge ? min - 1 : min;\n      const capMax = hasMaxEdge ? max + 1 : max;\n      if (value < minBound) {\n        return capMin;\n      } else if (value > maxBound) {\n        return capMax;\n      } else {\n        const offset = findOffsetOf(value, minBound, maxBound);\n        const newValue = capValue(offset / screenRange * range + min, capMin, capMax);\n        if (snap && newValue >= min && newValue <= max) {\n          return snapValueOf(newValue, min, max, step, snapStart);\n        } else if (rounded) {\n          return Math.round(newValue);\n        } else {\n          return newValue;\n        }\n      }\n    };\n    const findOffsetOfValue$2 = args => {\n      const {min, max, range, value, hasMinEdge, hasMaxEdge, maxBound, maxOffset, centerMinEdge, centerMaxEdge} = args;\n      if (value < min) {\n        return hasMinEdge ? 0 : centerMinEdge;\n      } else if (value > max) {\n        return hasMaxEdge ? maxBound : centerMaxEdge;\n      } else {\n        return (value - min) / range * maxOffset;\n      }\n    };\n\n    const top = 'top', right = 'right', bottom = 'bottom', left = 'left', width = 'width', height = 'height';\n    const getBounds = component => component.element.dom.getBoundingClientRect();\n    const getBoundsProperty = (bounds, property) => bounds[property];\n    const getMinXBounds = component => {\n      const bounds = getBounds(component);\n      return getBoundsProperty(bounds, left);\n    };\n    const getMaxXBounds = component => {\n      const bounds = getBounds(component);\n      return getBoundsProperty(bounds, right);\n    };\n    const getMinYBounds = component => {\n      const bounds = getBounds(component);\n      return getBoundsProperty(bounds, top);\n    };\n    const getMaxYBounds = component => {\n      const bounds = getBounds(component);\n      return getBoundsProperty(bounds, bottom);\n    };\n    const getXScreenRange = component => {\n      const bounds = getBounds(component);\n      return getBoundsProperty(bounds, width);\n    };\n    const getYScreenRange = component => {\n      const bounds = getBounds(component);\n      return getBoundsProperty(bounds, height);\n    };\n    const getCenterOffsetOf = (componentMinEdge, componentMaxEdge, spectrumMinEdge) => (componentMinEdge + componentMaxEdge) / 2 - spectrumMinEdge;\n    const getXCenterOffSetOf = (component, spectrum) => {\n      const componentBounds = getBounds(component);\n      const spectrumBounds = getBounds(spectrum);\n      const componentMinEdge = getBoundsProperty(componentBounds, left);\n      const componentMaxEdge = getBoundsProperty(componentBounds, right);\n      const spectrumMinEdge = getBoundsProperty(spectrumBounds, left);\n      return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n    };\n    const getYCenterOffSetOf = (component, spectrum) => {\n      const componentBounds = getBounds(component);\n      const spectrumBounds = getBounds(spectrum);\n      const componentMinEdge = getBoundsProperty(componentBounds, top);\n      const componentMaxEdge = getBoundsProperty(componentBounds, bottom);\n      const spectrumMinEdge = getBoundsProperty(spectrumBounds, top);\n      return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n    };\n\n    const fireSliderChange$2 = (spectrum, value) => {\n      emitWith(spectrum, sliderChangeEvent(), { value });\n    };\n    const findValueOfOffset$1 = (spectrum, detail, left) => {\n      const args = {\n        min: minX(detail),\n        max: maxX(detail),\n        range: xRange(detail),\n        value: left,\n        step: step(detail),\n        snap: snap(detail),\n        snapStart: snapStart(detail),\n        rounded: rounded(detail),\n        hasMinEdge: hasLEdge(detail),\n        hasMaxEdge: hasREdge(detail),\n        minBound: getMinXBounds(spectrum),\n        maxBound: getMaxXBounds(spectrum),\n        screenRange: getXScreenRange(spectrum)\n      };\n      return findValueOf(args);\n    };\n    const setValueFrom$2 = (spectrum, detail, value) => {\n      const xValue = findValueOfOffset$1(spectrum, detail, value);\n      const sliderVal = xValue;\n      fireSliderChange$2(spectrum, sliderVal);\n      return xValue;\n    };\n    const setToMin$2 = (spectrum, detail) => {\n      const min = minX(detail);\n      fireSliderChange$2(spectrum, min);\n    };\n    const setToMax$2 = (spectrum, detail) => {\n      const max = maxX(detail);\n      fireSliderChange$2(spectrum, max);\n    };\n    const moveBy$2 = (direction, spectrum, detail) => {\n      const f = direction > 0 ? increaseBy : reduceBy;\n      const xValue = f(currentValue(detail), minX(detail), maxX(detail), step(detail));\n      fireSliderChange$2(spectrum, xValue);\n      return Optional.some(xValue);\n    };\n    const handleMovement$2 = direction => (spectrum, detail) => moveBy$2(direction, spectrum, detail).map(always);\n    const getValueFromEvent$2 = simulatedEvent => {\n      const pos = getEventSource(simulatedEvent);\n      return pos.map(p => p.left);\n    };\n    const findOffsetOfValue$1 = (spectrum, detail, value, minEdge, maxEdge) => {\n      const minOffset = 0;\n      const maxOffset = getXScreenRange(spectrum);\n      const centerMinEdge = minEdge.bind(edge => Optional.some(getXCenterOffSetOf(edge, spectrum))).getOr(minOffset);\n      const centerMaxEdge = maxEdge.bind(edge => Optional.some(getXCenterOffSetOf(edge, spectrum))).getOr(maxOffset);\n      const args = {\n        min: minX(detail),\n        max: maxX(detail),\n        range: xRange(detail),\n        value,\n        hasMinEdge: hasLEdge(detail),\n        hasMaxEdge: hasREdge(detail),\n        minBound: getMinXBounds(spectrum),\n        minOffset,\n        maxBound: getMaxXBounds(spectrum),\n        maxOffset,\n        centerMinEdge,\n        centerMaxEdge\n      };\n      return findOffsetOfValue$2(args);\n    };\n    const findPositionOfValue$1 = (slider, spectrum, value, minEdge, maxEdge, detail) => {\n      const offset = findOffsetOfValue$1(spectrum, detail, value, minEdge, maxEdge);\n      return getMinXBounds(spectrum) - getMinXBounds(slider) + offset;\n    };\n    const setPositionFromValue$2 = (slider, thumb, detail, edges) => {\n      const value = currentValue(detail);\n      const pos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n      const thumbRadius = get$c(thumb.element) / 2;\n      set$8(thumb.element, 'left', pos - thumbRadius + 'px');\n    };\n    const onLeft$2 = handleMovement$2(-1);\n    const onRight$2 = handleMovement$2(1);\n    const onUp$2 = Optional.none;\n    const onDown$2 = Optional.none;\n    const edgeActions$2 = {\n      'top-left': Optional.none(),\n      'top': Optional.none(),\n      'top-right': Optional.none(),\n      'right': Optional.some(setToREdge),\n      'bottom-right': Optional.none(),\n      'bottom': Optional.none(),\n      'bottom-left': Optional.none(),\n      'left': Optional.some(setToLEdge)\n    };\n\n    var HorizontalModel = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        setValueFrom: setValueFrom$2,\n        setToMin: setToMin$2,\n        setToMax: setToMax$2,\n        findValueOfOffset: findValueOfOffset$1,\n        getValueFromEvent: getValueFromEvent$2,\n        findPositionOfValue: findPositionOfValue$1,\n        setPositionFromValue: setPositionFromValue$2,\n        onLeft: onLeft$2,\n        onRight: onRight$2,\n        onUp: onUp$2,\n        onDown: onDown$2,\n        edgeActions: edgeActions$2\n    });\n\n    const fireSliderChange$1 = (spectrum, value) => {\n      emitWith(spectrum, sliderChangeEvent(), { value });\n    };\n    const findValueOfOffset = (spectrum, detail, top) => {\n      const args = {\n        min: minY(detail),\n        max: maxY(detail),\n        range: yRange(detail),\n        value: top,\n        step: step(detail),\n        snap: snap(detail),\n        snapStart: snapStart(detail),\n        rounded: rounded(detail),\n        hasMinEdge: hasTEdge(detail),\n        hasMaxEdge: hasBEdge(detail),\n        minBound: getMinYBounds(spectrum),\n        maxBound: getMaxYBounds(spectrum),\n        screenRange: getYScreenRange(spectrum)\n      };\n      return findValueOf(args);\n    };\n    const setValueFrom$1 = (spectrum, detail, value) => {\n      const yValue = findValueOfOffset(spectrum, detail, value);\n      const sliderVal = yValue;\n      fireSliderChange$1(spectrum, sliderVal);\n      return yValue;\n    };\n    const setToMin$1 = (spectrum, detail) => {\n      const min = minY(detail);\n      fireSliderChange$1(spectrum, min);\n    };\n    const setToMax$1 = (spectrum, detail) => {\n      const max = maxY(detail);\n      fireSliderChange$1(spectrum, max);\n    };\n    const moveBy$1 = (direction, spectrum, detail) => {\n      const f = direction > 0 ? increaseBy : reduceBy;\n      const yValue = f(currentValue(detail), minY(detail), maxY(detail), step(detail));\n      fireSliderChange$1(spectrum, yValue);\n      return Optional.some(yValue);\n    };\n    const handleMovement$1 = direction => (spectrum, detail) => moveBy$1(direction, spectrum, detail).map(always);\n    const getValueFromEvent$1 = simulatedEvent => {\n      const pos = getEventSource(simulatedEvent);\n      return pos.map(p => {\n        return p.top;\n      });\n    };\n    const findOffsetOfValue = (spectrum, detail, value, minEdge, maxEdge) => {\n      const minOffset = 0;\n      const maxOffset = getYScreenRange(spectrum);\n      const centerMinEdge = minEdge.bind(edge => Optional.some(getYCenterOffSetOf(edge, spectrum))).getOr(minOffset);\n      const centerMaxEdge = maxEdge.bind(edge => Optional.some(getYCenterOffSetOf(edge, spectrum))).getOr(maxOffset);\n      const args = {\n        min: minY(detail),\n        max: maxY(detail),\n        range: yRange(detail),\n        value,\n        hasMinEdge: hasTEdge(detail),\n        hasMaxEdge: hasBEdge(detail),\n        minBound: getMinYBounds(spectrum),\n        minOffset,\n        maxBound: getMaxYBounds(spectrum),\n        maxOffset,\n        centerMinEdge,\n        centerMaxEdge\n      };\n      return findOffsetOfValue$2(args);\n    };\n    const findPositionOfValue = (slider, spectrum, value, minEdge, maxEdge, detail) => {\n      const offset = findOffsetOfValue(spectrum, detail, value, minEdge, maxEdge);\n      return getMinYBounds(spectrum) - getMinYBounds(slider) + offset;\n    };\n    const setPositionFromValue$1 = (slider, thumb, detail, edges) => {\n      const value = currentValue(detail);\n      const pos = findPositionOfValue(slider, edges.getSpectrum(slider), value, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n      const thumbRadius = get$d(thumb.element) / 2;\n      set$8(thumb.element, 'top', pos - thumbRadius + 'px');\n    };\n    const onLeft$1 = Optional.none;\n    const onRight$1 = Optional.none;\n    const onUp$1 = handleMovement$1(-1);\n    const onDown$1 = handleMovement$1(1);\n    const edgeActions$1 = {\n      'top-left': Optional.none(),\n      'top': Optional.some(setToTEdge),\n      'top-right': Optional.none(),\n      'right': Optional.none(),\n      'bottom-right': Optional.none(),\n      'bottom': Optional.some(setToBEdge),\n      'bottom-left': Optional.none(),\n      'left': Optional.none()\n    };\n\n    var VerticalModel = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        setValueFrom: setValueFrom$1,\n        setToMin: setToMin$1,\n        setToMax: setToMax$1,\n        findValueOfOffset: findValueOfOffset,\n        getValueFromEvent: getValueFromEvent$1,\n        findPositionOfValue: findPositionOfValue,\n        setPositionFromValue: setPositionFromValue$1,\n        onLeft: onLeft$1,\n        onRight: onRight$1,\n        onUp: onUp$1,\n        onDown: onDown$1,\n        edgeActions: edgeActions$1\n    });\n\n    const fireSliderChange = (spectrum, value) => {\n      emitWith(spectrum, sliderChangeEvent(), { value });\n    };\n    const sliderValue = (x, y) => ({\n      x,\n      y\n    });\n    const setValueFrom = (spectrum, detail, value) => {\n      const xValue = findValueOfOffset$1(spectrum, detail, value.left);\n      const yValue = findValueOfOffset(spectrum, detail, value.top);\n      const val = sliderValue(xValue, yValue);\n      fireSliderChange(spectrum, val);\n      return val;\n    };\n    const moveBy = (direction, isVerticalMovement, spectrum, detail) => {\n      const f = direction > 0 ? increaseBy : reduceBy;\n      const xValue = isVerticalMovement ? currentValue(detail).x : f(currentValue(detail).x, minX(detail), maxX(detail), step(detail));\n      const yValue = !isVerticalMovement ? currentValue(detail).y : f(currentValue(detail).y, minY(detail), maxY(detail), step(detail));\n      fireSliderChange(spectrum, sliderValue(xValue, yValue));\n      return Optional.some(xValue);\n    };\n    const handleMovement = (direction, isVerticalMovement) => (spectrum, detail) => moveBy(direction, isVerticalMovement, spectrum, detail).map(always);\n    const setToMin = (spectrum, detail) => {\n      const mX = minX(detail);\n      const mY = minY(detail);\n      fireSliderChange(spectrum, sliderValue(mX, mY));\n    };\n    const setToMax = (spectrum, detail) => {\n      const mX = maxX(detail);\n      const mY = maxY(detail);\n      fireSliderChange(spectrum, sliderValue(mX, mY));\n    };\n    const getValueFromEvent = simulatedEvent => getEventSource(simulatedEvent);\n    const setPositionFromValue = (slider, thumb, detail, edges) => {\n      const value = currentValue(detail);\n      const xPos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n      const yPos = findPositionOfValue(slider, edges.getSpectrum(slider), value.y, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n      const thumbXRadius = get$c(thumb.element) / 2;\n      const thumbYRadius = get$d(thumb.element) / 2;\n      set$8(thumb.element, 'left', xPos - thumbXRadius + 'px');\n      set$8(thumb.element, 'top', yPos - thumbYRadius + 'px');\n    };\n    const onLeft = handleMovement(-1, false);\n    const onRight = handleMovement(1, false);\n    const onUp = handleMovement(-1, true);\n    const onDown = handleMovement(1, true);\n    const edgeActions = {\n      'top-left': Optional.some(setToTLEdgeXY),\n      'top': Optional.some(setToTEdgeXY),\n      'top-right': Optional.some(setToTREdgeXY),\n      'right': Optional.some(setToREdgeXY),\n      'bottom-right': Optional.some(setToBREdgeXY),\n      'bottom': Optional.some(setToBEdgeXY),\n      'bottom-left': Optional.some(setToBLEdgeXY),\n      'left': Optional.some(setToLEdgeXY)\n    };\n\n    var TwoDModel = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        setValueFrom: setValueFrom,\n        setToMin: setToMin,\n        setToMax: setToMax,\n        getValueFromEvent: getValueFromEvent,\n        setPositionFromValue: setPositionFromValue,\n        onLeft: onLeft,\n        onRight: onRight,\n        onUp: onUp,\n        onDown: onDown,\n        edgeActions: edgeActions\n    });\n\n    const SliderSchema = [\n      defaulted('stepSize', 1),\n      defaulted('onChange', noop),\n      defaulted('onChoose', noop),\n      defaulted('onInit', noop),\n      defaulted('onDragStart', noop),\n      defaulted('onDragEnd', noop),\n      defaulted('snapToGrid', false),\n      defaulted('rounded', true),\n      option$3('snapStart'),\n      requiredOf('model', choose$1('mode', {\n        x: [\n          defaulted('minX', 0),\n          defaulted('maxX', 100),\n          customField('value', spec => Cell(spec.mode.minX)),\n          required$1('getInitialValue'),\n          output$1('manager', HorizontalModel)\n        ],\n        y: [\n          defaulted('minY', 0),\n          defaulted('maxY', 100),\n          customField('value', spec => Cell(spec.mode.minY)),\n          required$1('getInitialValue'),\n          output$1('manager', VerticalModel)\n        ],\n        xy: [\n          defaulted('minX', 0),\n          defaulted('maxX', 100),\n          defaulted('minY', 0),\n          defaulted('maxY', 100),\n          customField('value', spec => Cell({\n            x: spec.mode.minX,\n            y: spec.mode.minY\n          })),\n          required$1('getInitialValue'),\n          output$1('manager', TwoDModel)\n        ]\n      })),\n      field('sliderBehaviours', [\n        Keying,\n        Representing\n      ]),\n      customField('mouseIsDown', () => Cell(false))\n    ];\n\n    const sketch$2 = (detail, components, _spec, _externals) => {\n      const getThumb = component => getPartOrDie(component, detail, 'thumb');\n      const getSpectrum = component => getPartOrDie(component, detail, 'spectrum');\n      const getLeftEdge = component => getPart(component, detail, 'left-edge');\n      const getRightEdge = component => getPart(component, detail, 'right-edge');\n      const getTopEdge = component => getPart(component, detail, 'top-edge');\n      const getBottomEdge = component => getPart(component, detail, 'bottom-edge');\n      const modelDetail = detail.model;\n      const model = modelDetail.manager;\n      const refresh = (slider, thumb) => {\n        model.setPositionFromValue(slider, thumb, detail, {\n          getLeftEdge,\n          getRightEdge,\n          getTopEdge,\n          getBottomEdge,\n          getSpectrum\n        });\n      };\n      const setValue = (slider, newValue) => {\n        modelDetail.value.set(newValue);\n        const thumb = getThumb(slider);\n        refresh(slider, thumb);\n      };\n      const changeValue = (slider, newValue) => {\n        setValue(slider, newValue);\n        const thumb = getThumb(slider);\n        detail.onChange(slider, thumb, newValue);\n        return Optional.some(true);\n      };\n      const resetToMin = slider => {\n        model.setToMin(slider, detail);\n      };\n      const resetToMax = slider => {\n        model.setToMax(slider, detail);\n      };\n      const choose = slider => {\n        const fireOnChoose = () => {\n          getPart(slider, detail, 'thumb').each(thumb => {\n            const value = modelDetail.value.get();\n            detail.onChoose(slider, thumb, value);\n          });\n        };\n        const wasDown = detail.mouseIsDown.get();\n        detail.mouseIsDown.set(false);\n        if (wasDown) {\n          fireOnChoose();\n        }\n      };\n      const onDragStart = (slider, simulatedEvent) => {\n        simulatedEvent.stop();\n        detail.mouseIsDown.set(true);\n        detail.onDragStart(slider, getThumb(slider));\n      };\n      const onDragEnd = (slider, simulatedEvent) => {\n        simulatedEvent.stop();\n        detail.onDragEnd(slider, getThumb(slider));\n        choose(slider);\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components,\n        behaviours: augment(detail.sliderBehaviours, [\n          Keying.config({\n            mode: 'special',\n            focusIn: slider => {\n              return getPart(slider, detail, 'spectrum').map(Keying.focusIn).map(always);\n            }\n          }),\n          Representing.config({\n            store: {\n              mode: 'manual',\n              getValue: _ => {\n                return modelDetail.value.get();\n              },\n              setValue\n            }\n          }),\n          Receiving.config({ channels: { [mouseReleased()]: { onReceive: choose } } })\n        ]),\n        events: derive$2([\n          run$1(sliderChangeEvent(), (slider, simulatedEvent) => {\n            changeValue(slider, simulatedEvent.event.value);\n          }),\n          runOnAttached((slider, _simulatedEvent) => {\n            const getInitial = modelDetail.getInitialValue();\n            modelDetail.value.set(getInitial);\n            const thumb = getThumb(slider);\n            refresh(slider, thumb);\n            const spectrum = getSpectrum(slider);\n            detail.onInit(slider, thumb, spectrum, modelDetail.value.get());\n          }),\n          run$1(touchstart(), onDragStart),\n          run$1(touchend(), onDragEnd),\n          run$1(mousedown(), onDragStart),\n          run$1(mouseup(), onDragEnd)\n        ]),\n        apis: {\n          resetToMin,\n          resetToMax,\n          setValue,\n          refresh\n        },\n        domModification: { styles: { position: 'relative' } }\n      };\n    };\n\n    const Slider = composite({\n      name: 'Slider',\n      configFields: SliderSchema,\n      partFields: SliderParts,\n      factory: sketch$2,\n      apis: {\n        setValue: (apis, slider, value) => {\n          apis.setValue(slider, value);\n        },\n        resetToMin: (apis, slider) => {\n          apis.resetToMin(slider);\n        },\n        resetToMax: (apis, slider) => {\n          apis.resetToMax(slider);\n        },\n        refresh: (apis, slider) => {\n          apis.refresh(slider);\n        }\n      }\n    });\n\n    const fieldsUpdate = generate$6('rgb-hex-update');\n    const sliderUpdate = generate$6('slider-update');\n    const paletteUpdate = generate$6('palette-update');\n\n    const sliderFactory = (translate, getClass) => {\n      const spectrum = Slider.parts.spectrum({\n        dom: {\n          tag: 'div',\n          classes: [getClass('hue-slider-spectrum')],\n          attributes: { role: 'presentation' }\n        }\n      });\n      const thumb = Slider.parts.thumb({\n        dom: {\n          tag: 'div',\n          classes: [getClass('hue-slider-thumb')],\n          attributes: { role: 'presentation' }\n        }\n      });\n      return Slider.sketch({\n        dom: {\n          tag: 'div',\n          classes: [getClass('hue-slider')],\n          attributes: { role: 'presentation' }\n        },\n        rounded: false,\n        model: {\n          mode: 'y',\n          getInitialValue: constant$1(0)\n        },\n        components: [\n          spectrum,\n          thumb\n        ],\n        sliderBehaviours: derive$1([Focusing.config({})]),\n        onChange: (slider, _thumb, value) => {\n          emitWith(slider, sliderUpdate, { value });\n        }\n      });\n    };\n\n    const owner$1 = 'form';\n    const schema$i = [field('formBehaviours', [Representing])];\n    const getPartName$1 = name => '<alloy.field.' + name + '>';\n    const sketch$1 = fSpec => {\n      const parts = (() => {\n        const record = [];\n        const field = (name, config) => {\n          record.push(name);\n          return generateOne$1(owner$1, getPartName$1(name), config);\n        };\n        return {\n          field,\n          record: constant$1(record)\n        };\n      })();\n      const spec = fSpec(parts);\n      const partNames = parts.record();\n      const fieldParts = map$2(partNames, n => required({\n        name: n,\n        pname: getPartName$1(n)\n      }));\n      return composite$1(owner$1, schema$i, fieldParts, make$4, spec);\n    };\n    const toResult = (o, e) => o.fold(() => Result.error(e), Result.value);\n    const make$4 = (detail, components) => ({\n      uid: detail.uid,\n      dom: detail.dom,\n      components,\n      behaviours: augment(detail.formBehaviours, [Representing.config({\n          store: {\n            mode: 'manual',\n            getValue: form => {\n              const resPs = getAllParts(form, detail);\n              return map$1(resPs, (resPThunk, pName) => resPThunk().bind(v => {\n                const opt = Composing.getCurrent(v);\n                return toResult(opt, new Error(`Cannot find a current component to extract the value from for form part '${ pName }': ` + element(v.element)));\n              }).map(Representing.getValue));\n            },\n            setValue: (form, values) => {\n              each(values, (newValue, key) => {\n                getPart(form, detail, key).each(wrapper => {\n                  Composing.getCurrent(wrapper).each(field => {\n                    Representing.setValue(field, newValue);\n                  });\n                });\n              });\n            }\n          }\n        })]),\n      apis: {\n        getField: (form, key) => {\n          return getPart(form, detail, key).bind(Composing.getCurrent);\n        }\n      }\n    });\n    const Form = {\n      getField: makeApi((apis, component, key) => apis.getField(component, key)),\n      sketch: sketch$1\n    };\n\n    const validInput = generate$6('valid-input');\n    const invalidInput = generate$6('invalid-input');\n    const validatingInput = generate$6('validating-input');\n    const translatePrefix = 'colorcustom.rgb.';\n    const rgbFormFactory = (translate, getClass, onValidHexx, onInvalidHexx) => {\n      const invalidation = (label, isValid) => Invalidating.config({\n        invalidClass: getClass('invalid'),\n        notify: {\n          onValidate: comp => {\n            emitWith(comp, validatingInput, { type: label });\n          },\n          onValid: comp => {\n            emitWith(comp, validInput, {\n              type: label,\n              value: Representing.getValue(comp)\n            });\n          },\n          onInvalid: comp => {\n            emitWith(comp, invalidInput, {\n              type: label,\n              value: Representing.getValue(comp)\n            });\n          }\n        },\n        validator: {\n          validate: comp => {\n            const value = Representing.getValue(comp);\n            const res = isValid(value) ? Result.value(true) : Result.error(translate('aria.input.invalid'));\n            return Future.pure(res);\n          },\n          validateOnLoad: false\n        }\n      });\n      const renderTextField = (isValid, name, label, description, data) => {\n        const helptext = translate(translatePrefix + 'range');\n        const pLabel = FormField.parts.label({\n          dom: {\n            tag: 'label',\n            attributes: { 'aria-label': description }\n          },\n          components: [text$1(label)]\n        });\n        const pField = FormField.parts.field({\n          data,\n          factory: Input,\n          inputAttributes: {\n            type: 'text',\n            ...name === 'hex' ? { 'aria-live': 'polite' } : {}\n          },\n          inputClasses: [getClass('textfield')],\n          inputBehaviours: derive$1([\n            invalidation(name, isValid),\n            Tabstopping.config({})\n          ]),\n          onSetValue: input => {\n            if (Invalidating.isInvalid(input)) {\n              const run = Invalidating.run(input);\n              run.get(noop);\n            }\n          }\n        });\n        const comps = [\n          pLabel,\n          pField\n        ];\n        const concats = name !== 'hex' ? [FormField.parts['aria-descriptor']({ text: helptext })] : [];\n        const components = comps.concat(concats);\n        return {\n          dom: {\n            tag: 'div',\n            attributes: { role: 'presentation' }\n          },\n          components\n        };\n      };\n      const copyRgbToHex = (form, rgba) => {\n        const hex = fromRgba(rgba);\n        Form.getField(form, 'hex').each(hexField => {\n          if (!Focusing.isFocused(hexField)) {\n            Representing.setValue(form, { hex: hex.value });\n          }\n        });\n        return hex;\n      };\n      const copyRgbToForm = (form, rgb) => {\n        const red = rgb.red;\n        const green = rgb.green;\n        const blue = rgb.blue;\n        Representing.setValue(form, {\n          red,\n          green,\n          blue\n        });\n      };\n      const memPreview = record({\n        dom: {\n          tag: 'div',\n          classes: [getClass('rgba-preview')],\n          styles: { 'background-color': 'white' },\n          attributes: { role: 'presentation' }\n        }\n      });\n      const updatePreview = (anyInSystem, hex) => {\n        memPreview.getOpt(anyInSystem).each(preview => {\n          set$8(preview.element, 'background-color', '#' + hex.value);\n        });\n      };\n      const factory = () => {\n        const state = {\n          red: Cell(Optional.some(255)),\n          green: Cell(Optional.some(255)),\n          blue: Cell(Optional.some(255)),\n          hex: Cell(Optional.some('ffffff'))\n        };\n        const copyHexToRgb = (form, hex) => {\n          const rgb = fromHex(hex);\n          copyRgbToForm(form, rgb);\n          setValueRgb(rgb);\n        };\n        const get = prop => state[prop].get();\n        const set = (prop, value) => {\n          state[prop].set(value);\n        };\n        const getValueRgb = () => get('red').bind(red => get('green').bind(green => get('blue').map(blue => rgbaColour(red, green, blue, 1))));\n        const setValueRgb = rgb => {\n          const red = rgb.red;\n          const green = rgb.green;\n          const blue = rgb.blue;\n          set('red', Optional.some(red));\n          set('green', Optional.some(green));\n          set('blue', Optional.some(blue));\n        };\n        const onInvalidInput = (form, simulatedEvent) => {\n          const data = simulatedEvent.event;\n          if (data.type !== 'hex') {\n            set(data.type, Optional.none());\n          } else {\n            onInvalidHexx(form);\n          }\n        };\n        const onValidHex = (form, value) => {\n          onValidHexx(form);\n          const hex = hexColour(value);\n          set('hex', Optional.some(value));\n          const rgb = fromHex(hex);\n          copyRgbToForm(form, rgb);\n          setValueRgb(rgb);\n          emitWith(form, fieldsUpdate, { hex });\n          updatePreview(form, hex);\n        };\n        const onValidRgb = (form, prop, value) => {\n          const val = parseInt(value, 10);\n          set(prop, Optional.some(val));\n          getValueRgb().each(rgb => {\n            const hex = copyRgbToHex(form, rgb);\n            emitWith(form, fieldsUpdate, { hex });\n            updatePreview(form, hex);\n          });\n        };\n        const isHexInputEvent = data => data.type === 'hex';\n        const onValidInput = (form, simulatedEvent) => {\n          const data = simulatedEvent.event;\n          if (isHexInputEvent(data)) {\n            onValidHex(form, data.value);\n          } else {\n            onValidRgb(form, data.type, data.value);\n          }\n        };\n        const formPartStrings = key => ({\n          label: translate(translatePrefix + key + '.label'),\n          description: translate(translatePrefix + key + '.description')\n        });\n        const redStrings = formPartStrings('red');\n        const greenStrings = formPartStrings('green');\n        const blueStrings = formPartStrings('blue');\n        const hexStrings = formPartStrings('hex');\n        return deepMerge(Form.sketch(parts => ({\n          dom: {\n            tag: 'form',\n            classes: [getClass('rgb-form')],\n            attributes: { 'aria-label': translate('aria.color.picker') }\n          },\n          components: [\n            parts.field('red', FormField.sketch(renderTextField(isRgbaComponent, 'red', redStrings.label, redStrings.description, 255))),\n            parts.field('green', FormField.sketch(renderTextField(isRgbaComponent, 'green', greenStrings.label, greenStrings.description, 255))),\n            parts.field('blue', FormField.sketch(renderTextField(isRgbaComponent, 'blue', blueStrings.label, blueStrings.description, 255))),\n            parts.field('hex', FormField.sketch(renderTextField(isHexString, 'hex', hexStrings.label, hexStrings.description, 'ffffff'))),\n            memPreview.asSpec()\n          ],\n          formBehaviours: derive$1([\n            Invalidating.config({ invalidClass: getClass('form-invalid') }),\n            config('rgb-form-events', [\n              run$1(validInput, onValidInput),\n              run$1(invalidInput, onInvalidInput),\n              run$1(validatingInput, onInvalidInput)\n            ])\n          ])\n        })), {\n          apis: {\n            updateHex: (form, hex) => {\n              Representing.setValue(form, { hex: hex.value });\n              copyHexToRgb(form, hex);\n              updatePreview(form, hex);\n            }\n          }\n        });\n      };\n      const rgbFormSketcher = single({\n        factory,\n        name: 'RgbForm',\n        configFields: [],\n        apis: {\n          updateHex: (apis, form, hex) => {\n            apis.updateHex(form, hex);\n          }\n        },\n        extraApis: {}\n      });\n      return rgbFormSketcher;\n    };\n\n    const paletteFactory = (_translate, getClass) => {\n      const spectrumPart = Slider.parts.spectrum({\n        dom: {\n          tag: 'canvas',\n          attributes: { role: 'presentation' },\n          classes: [getClass('sv-palette-spectrum')]\n        }\n      });\n      const thumbPart = Slider.parts.thumb({\n        dom: {\n          tag: 'div',\n          attributes: { role: 'presentation' },\n          classes: [getClass('sv-palette-thumb')],\n          innerHtml: `<div class=${ getClass('sv-palette-inner-thumb') } role=\"presentation\"></div>`\n        }\n      });\n      const setColour = (canvas, rgba) => {\n        const {width, height} = canvas;\n        const ctx = canvas.getContext('2d');\n        if (ctx === null) {\n          return;\n        }\n        ctx.fillStyle = rgba;\n        ctx.fillRect(0, 0, width, height);\n        const grdWhite = ctx.createLinearGradient(0, 0, width, 0);\n        grdWhite.addColorStop(0, 'rgba(255,255,255,1)');\n        grdWhite.addColorStop(1, 'rgba(255,255,255,0)');\n        ctx.fillStyle = grdWhite;\n        ctx.fillRect(0, 0, width, height);\n        const grdBlack = ctx.createLinearGradient(0, 0, 0, height);\n        grdBlack.addColorStop(0, 'rgba(0,0,0,0)');\n        grdBlack.addColorStop(1, 'rgba(0,0,0,1)');\n        ctx.fillStyle = grdBlack;\n        ctx.fillRect(0, 0, width, height);\n      };\n      const setPaletteHue = (slider, hue) => {\n        const canvas = slider.components()[0].element.dom;\n        const hsv = hsvColour(hue, 100, 100);\n        const rgba = fromHsv(hsv);\n        setColour(canvas, toString(rgba));\n      };\n      const setPaletteThumb = (slider, hex) => {\n        const hsv = fromRgb(fromHex(hex));\n        Slider.setValue(slider, {\n          x: hsv.saturation,\n          y: 100 - hsv.value\n        });\n      };\n      const factory = _detail => {\n        const getInitialValue = constant$1({\n          x: 0,\n          y: 0\n        });\n        const onChange = (slider, _thumb, value) => {\n          emitWith(slider, paletteUpdate, { value });\n        };\n        const onInit = (_slider, _thumb, spectrum, _value) => {\n          setColour(spectrum.element.dom, toString(red));\n        };\n        const sliderBehaviours = derive$1([\n          Composing.config({ find: Optional.some }),\n          Focusing.config({})\n        ]);\n        return Slider.sketch({\n          dom: {\n            tag: 'div',\n            attributes: { role: 'presentation' },\n            classes: [getClass('sv-palette')]\n          },\n          model: {\n            mode: 'xy',\n            getInitialValue\n          },\n          rounded: false,\n          components: [\n            spectrumPart,\n            thumbPart\n          ],\n          onChange,\n          onInit,\n          sliderBehaviours\n        });\n      };\n      const saturationBrightnessPaletteSketcher = single({\n        factory,\n        name: 'SaturationBrightnessPalette',\n        configFields: [],\n        apis: {\n          setHue: (_apis, slider, hue) => {\n            setPaletteHue(slider, hue);\n          },\n          setThumb: (_apis, slider, hex) => {\n            setPaletteThumb(slider, hex);\n          }\n        },\n        extraApis: {}\n      });\n      return saturationBrightnessPaletteSketcher;\n    };\n\n    const makeFactory = (translate, getClass) => {\n      const factory = detail => {\n        const rgbForm = rgbFormFactory(translate, getClass, detail.onValidHex, detail.onInvalidHex);\n        const sbPalette = paletteFactory(translate, getClass);\n        const hueSliderToDegrees = hue => (100 - hue) / 100 * 360;\n        const hueDegreesToSlider = hue => 100 - hue / 360 * 100;\n        const state = {\n          paletteRgba: Cell(red),\n          paletteHue: Cell(0)\n        };\n        const memSlider = record(sliderFactory(translate, getClass));\n        const memPalette = record(sbPalette.sketch({}));\n        const memRgb = record(rgbForm.sketch({}));\n        const updatePalette = (anyInSystem, _hex, hue) => {\n          memPalette.getOpt(anyInSystem).each(palette => {\n            sbPalette.setHue(palette, hue);\n          });\n        };\n        const updateFields = (anyInSystem, hex) => {\n          memRgb.getOpt(anyInSystem).each(form => {\n            rgbForm.updateHex(form, hex);\n          });\n        };\n        const updateSlider = (anyInSystem, _hex, hue) => {\n          memSlider.getOpt(anyInSystem).each(slider => {\n            Slider.setValue(slider, hueDegreesToSlider(hue));\n          });\n        };\n        const updatePaletteThumb = (anyInSystem, hex) => {\n          memPalette.getOpt(anyInSystem).each(palette => {\n            sbPalette.setThumb(palette, hex);\n          });\n        };\n        const updateState = (hex, hue) => {\n          const rgba = fromHex(hex);\n          state.paletteRgba.set(rgba);\n          state.paletteHue.set(hue);\n        };\n        const runUpdates = (anyInSystem, hex, hue, updates) => {\n          updateState(hex, hue);\n          each$1(updates, update => {\n            update(anyInSystem, hex, hue);\n          });\n        };\n        const onPaletteUpdate = () => {\n          const updates = [updateFields];\n          return (form, simulatedEvent) => {\n            const value = simulatedEvent.event.value;\n            const oldHue = state.paletteHue.get();\n            const newHsv = hsvColour(oldHue, value.x, 100 - value.y);\n            const newHex = hsvToHex(newHsv);\n            runUpdates(form, newHex, oldHue, updates);\n          };\n        };\n        const onSliderUpdate = () => {\n          const updates = [\n            updatePalette,\n            updateFields\n          ];\n          return (form, simulatedEvent) => {\n            const hue = hueSliderToDegrees(simulatedEvent.event.value);\n            const oldRgb = state.paletteRgba.get();\n            const oldHsv = fromRgb(oldRgb);\n            const newHsv = hsvColour(hue, oldHsv.saturation, oldHsv.value);\n            const newHex = hsvToHex(newHsv);\n            runUpdates(form, newHex, hue, updates);\n          };\n        };\n        const onFieldsUpdate = () => {\n          const updates = [\n            updatePalette,\n            updateSlider,\n            updatePaletteThumb\n          ];\n          return (form, simulatedEvent) => {\n            const hex = simulatedEvent.event.hex;\n            const hsv = hexToHsv(hex);\n            runUpdates(form, hex, hsv.hue, updates);\n          };\n        };\n        return {\n          uid: detail.uid,\n          dom: detail.dom,\n          components: [\n            memPalette.asSpec(),\n            memSlider.asSpec(),\n            memRgb.asSpec()\n          ],\n          behaviours: derive$1([\n            config('colour-picker-events', [\n              run$1(fieldsUpdate, onFieldsUpdate()),\n              run$1(paletteUpdate, onPaletteUpdate()),\n              run$1(sliderUpdate, onSliderUpdate())\n            ]),\n            Composing.config({ find: comp => memRgb.getOpt(comp) }),\n            Keying.config({ mode: 'acyclic' })\n          ])\n        };\n      };\n      const colourPickerSketcher = single({\n        name: 'ColourPicker',\n        configFields: [\n          required$1('dom'),\n          defaulted('onValidHex', noop),\n          defaulted('onInvalidHex', noop)\n        ],\n        factory\n      });\n      return colourPickerSketcher;\n    };\n\n    const self = () => Composing.config({ find: Optional.some });\n    const memento$1 = mem => Composing.config({ find: mem.getOpt });\n    const childAt = index => Composing.config({ find: comp => child$2(comp.element, index).bind(element => comp.getSystem().getByDom(element).toOptional()) });\n    const ComposingConfigs = {\n      self,\n      memento: memento$1,\n      childAt\n    };\n\n    const processors = objOf([\n      defaulted('preprocess', identity),\n      defaulted('postprocess', identity)\n    ]);\n    const memento = (mem, rawProcessors) => {\n      const ps = asRawOrDie$1('RepresentingConfigs.memento processors', processors, rawProcessors);\n      return Representing.config({\n        store: {\n          mode: 'manual',\n          getValue: comp => {\n            const other = mem.get(comp);\n            const rawValue = Representing.getValue(other);\n            return ps.postprocess(rawValue);\n          },\n          setValue: (comp, rawValue) => {\n            const newValue = ps.preprocess(rawValue);\n            const other = mem.get(comp);\n            Representing.setValue(other, newValue);\n          }\n        }\n      });\n    };\n    const withComp = (optInitialValue, getter, setter) => Representing.config({\n      store: {\n        mode: 'manual',\n        ...optInitialValue.map(initialValue => ({ initialValue })).getOr({}),\n        getValue: getter,\n        setValue: setter\n      }\n    });\n    const withElement = (initialValue, getter, setter) => withComp(initialValue, c => getter(c.element), (c, v) => setter(c.element, v));\n    const domValue = optInitialValue => withElement(optInitialValue, get$6, set$5);\n    const domHtml = optInitialValue => withElement(optInitialValue, get$9, set$6);\n    const memory = initialValue => Representing.config({\n      store: {\n        mode: 'memory',\n        initialValue\n      }\n    });\n    const RepresentingConfigs = {\n      memento,\n      withElement,\n      withComp,\n      domValue,\n      domHtml,\n      memory\n    };\n\n    const english = {\n      'colorcustom.rgb.red.label': 'R',\n      'colorcustom.rgb.red.description': 'Red component',\n      'colorcustom.rgb.green.label': 'G',\n      'colorcustom.rgb.green.description': 'Green component',\n      'colorcustom.rgb.blue.label': 'B',\n      'colorcustom.rgb.blue.description': 'Blue component',\n      'colorcustom.rgb.hex.label': '#',\n      'colorcustom.rgb.hex.description': 'Hex color code',\n      'colorcustom.rgb.range': 'Range 0 to 255',\n      'aria.color.picker': 'Color Picker',\n      'aria.input.invalid': 'Invalid input'\n    };\n    const translate$1 = providerBackstage => key => {\n      return providerBackstage.translate(english[key]);\n    };\n    const renderColorPicker = (_spec, providerBackstage, initialData) => {\n      const getClass = key => 'tox-' + key;\n      const colourPickerFactory = makeFactory(translate$1(providerBackstage), getClass);\n      const onValidHex = form => {\n        emitWith(form, formActionEvent, {\n          name: 'hex-valid',\n          value: true\n        });\n      };\n      const onInvalidHex = form => {\n        emitWith(form, formActionEvent, {\n          name: 'hex-valid',\n          value: false\n        });\n      };\n      const memPicker = record(colourPickerFactory.sketch({\n        dom: {\n          tag: 'div',\n          classes: [getClass('color-picker-container')],\n          attributes: { role: 'presentation' }\n        },\n        onValidHex,\n        onInvalidHex\n      }));\n      return {\n        dom: { tag: 'div' },\n        components: [memPicker.asSpec()],\n        behaviours: derive$1([\n          RepresentingConfigs.withComp(initialData, comp => {\n            const picker = memPicker.get(comp);\n            const optRgbForm = Composing.getCurrent(picker);\n            const optHex = optRgbForm.bind(rgbForm => {\n              const formValues = Representing.getValue(rgbForm);\n              return formValues.hex;\n            });\n            return optHex.map(hex => '#' + hex).getOr('');\n          }, (comp, newValue) => {\n            const pattern = /^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/;\n            const valOpt = Optional.from(pattern.exec(newValue)).bind(matches => get$h(matches, 1));\n            const picker = memPicker.get(comp);\n            const optRgbForm = Composing.getCurrent(picker);\n            optRgbForm.fold(() => {\n              console.log('Can not find form');\n            }, rgbForm => {\n              Representing.setValue(rgbForm, { hex: valOpt.getOr('') });\n              Form.getField(rgbForm, 'hex').each(hexField => {\n                emit(hexField, input());\n              });\n            });\n          }),\n          ComposingConfigs.self()\n        ])\n      };\n    };\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.Resource');\n\n    const isOldCustomEditor = spec => has$2(spec, 'init');\n    const renderCustomEditor = spec => {\n      const editorApi = value$2();\n      const memReplaced = record({ dom: { tag: spec.tag } });\n      const initialValue = value$2();\n      return {\n        dom: {\n          tag: 'div',\n          classes: ['tox-custom-editor']\n        },\n        behaviours: derive$1([\n          config('custom-editor-events', [runOnAttached(component => {\n              memReplaced.getOpt(component).each(ta => {\n                (isOldCustomEditor(spec) ? spec.init(ta.element.dom) : global$2.load(spec.scriptId, spec.scriptUrl).then(init => init(ta.element.dom, spec.settings))).then(ea => {\n                  initialValue.on(cvalue => {\n                    ea.setValue(cvalue);\n                  });\n                  initialValue.clear();\n                  editorApi.set(ea);\n                });\n              });\n            })]),\n          RepresentingConfigs.withComp(Optional.none(), () => editorApi.get().fold(() => initialValue.get().getOr(''), ed => ed.getValue()), (component, value) => {\n            editorApi.get().fold(() => initialValue.set(value), ed => ed.setValue(value));\n          }),\n          ComposingConfigs.self()\n        ]),\n        components: [memReplaced.asSpec()]\n      };\n    };\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    const filterByExtension = (files, providersBackstage) => {\n      const allowedImageFileTypes = global$1.explode(providersBackstage.getOption('images_file_types'));\n      const isFileInAllowedTypes = file => exists(allowedImageFileTypes, type => endsWith(file.name.toLowerCase(), `.${ type.toLowerCase() }`));\n      return filter$2(from(files), isFileInAllowedTypes);\n    };\n    const renderDropZone = (spec, providersBackstage, initialData) => {\n      const stopper = (_, se) => {\n        se.stop();\n      };\n      const sequence = actions => (comp, se) => {\n        each$1(actions, a => {\n          a(comp, se);\n        });\n      };\n      const onDrop = (comp, se) => {\n        var _a;\n        if (!Disabling.isDisabled(comp)) {\n          const transferEvent = se.event.raw;\n          handleFiles(comp, (_a = transferEvent.dataTransfer) === null || _a === void 0 ? void 0 : _a.files);\n        }\n      };\n      const onSelect = (component, simulatedEvent) => {\n        const input = simulatedEvent.event.raw.target;\n        handleFiles(component, input.files);\n      };\n      const handleFiles = (component, files) => {\n        if (files) {\n          Representing.setValue(component, filterByExtension(files, providersBackstage));\n          emitWith(component, formChangeEvent, { name: spec.name });\n        }\n      };\n      const memInput = record({\n        dom: {\n          tag: 'input',\n          attributes: {\n            type: 'file',\n            accept: 'image/*'\n          },\n          styles: { display: 'none' }\n        },\n        behaviours: derive$1([config('input-file-events', [\n            cutter(click()),\n            cutter(tap())\n          ])])\n      });\n      const renderField = s => ({\n        uid: s.uid,\n        dom: {\n          tag: 'div',\n          classes: ['tox-dropzone-container']\n        },\n        behaviours: derive$1([\n          RepresentingConfigs.memory(initialData.getOr([])),\n          ComposingConfigs.self(),\n          Disabling.config({}),\n          Toggling.config({\n            toggleClass: 'dragenter',\n            toggleOnExecute: false\n          }),\n          config('dropzone-events', [\n            run$1('dragenter', sequence([\n              stopper,\n              Toggling.toggle\n            ])),\n            run$1('dragleave', sequence([\n              stopper,\n              Toggling.toggle\n            ])),\n            run$1('dragover', stopper),\n            run$1('drop', sequence([\n              stopper,\n              onDrop\n            ])),\n            run$1(change(), onSelect)\n          ])\n        ]),\n        components: [{\n            dom: {\n              tag: 'div',\n              classes: ['tox-dropzone'],\n              styles: {}\n            },\n            components: [\n              {\n                dom: { tag: 'p' },\n                components: [text$1(providersBackstage.translate('Drop an image here'))]\n              },\n              Button.sketch({\n                dom: {\n                  tag: 'button',\n                  styles: { position: 'relative' },\n                  classes: [\n                    'tox-button',\n                    'tox-button--secondary'\n                  ]\n                },\n                components: [\n                  text$1(providersBackstage.translate('Browse for an image')),\n                  memInput.asSpec()\n                ],\n                action: comp => {\n                  const inputComp = memInput.get(comp);\n                  inputComp.element.dom.click();\n                },\n                buttonBehaviours: derive$1([\n                  Tabstopping.config({}),\n                  DisablingConfigs.button(providersBackstage.isDisabled),\n                  receivingConfig()\n                ])\n              })\n            ]\n          }]\n      });\n      const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n      const pField = FormField.parts.field({ factory: { sketch: renderField } });\n      return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n    };\n\n    const renderGrid = (spec, backstage) => ({\n      dom: {\n        tag: 'div',\n        classes: [\n          'tox-form__grid',\n          `tox-form__grid--${ spec.columns }col`\n        ]\n      },\n      components: map$2(spec.items, backstage.interpreter)\n    });\n\n    const beforeObject = generate$6('alloy-fake-before-tabstop');\n    const afterObject = generate$6('alloy-fake-after-tabstop');\n    const craftWithClasses = classes => {\n      return {\n        dom: {\n          tag: 'div',\n          styles: {\n            width: '1px',\n            height: '1px',\n            outline: 'none'\n          },\n          attributes: { tabindex: '0' },\n          classes\n        },\n        behaviours: derive$1([\n          Focusing.config({ ignore: true }),\n          Tabstopping.config({})\n        ])\n      };\n    };\n    const craft = spec => {\n      return {\n        dom: {\n          tag: 'div',\n          classes: ['tox-navobj']\n        },\n        components: [\n          craftWithClasses([beforeObject]),\n          spec,\n          craftWithClasses([afterObject])\n        ],\n        behaviours: derive$1([ComposingConfigs.childAt(1)])\n      };\n    };\n    const triggerTab = (placeholder, shiftKey) => {\n      emitWith(placeholder, keydown(), {\n        raw: {\n          which: 9,\n          shiftKey\n        }\n      });\n    };\n    const onFocus = (container, targetComp) => {\n      const target = targetComp.element;\n      if (has(target, beforeObject)) {\n        triggerTab(container, true);\n      } else if (has(target, afterObject)) {\n        triggerTab(container, false);\n      }\n    };\n    const isPseudoStop = element => {\n      return closest(element, [\n        '.' + beforeObject,\n        '.' + afterObject\n      ].join(','), never);\n    };\n\n    const getDynamicSource = initialData => {\n      const cachedValue = Cell(initialData.getOr(''));\n      return {\n        getValue: _frameComponent => cachedValue.get(),\n        setValue: (frameComponent, html) => {\n          if (cachedValue.get() !== html) {\n            set$9(frameComponent.element, 'srcdoc', html);\n          }\n          cachedValue.set(html);\n        }\n      };\n    };\n    const renderIFrame = (spec, providersBackstage, initialData) => {\n      const isSandbox = spec.sandboxed;\n      const isTransparent = spec.transparent;\n      const baseClass = 'tox-dialog__iframe';\n      const attributes = {\n        ...spec.label.map(title => ({ title })).getOr({}),\n        ...initialData.map(html => ({ srcdoc: html })).getOr({}),\n        ...isSandbox ? { sandbox: 'allow-scripts allow-same-origin' } : {}\n      };\n      const sourcing = getDynamicSource(initialData);\n      const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n      const factory = newSpec => craft({\n        uid: newSpec.uid,\n        dom: {\n          tag: 'iframe',\n          attributes,\n          classes: isTransparent ? [baseClass] : [\n            baseClass,\n            `${ baseClass }--opaque`\n          ]\n        },\n        behaviours: derive$1([\n          Tabstopping.config({}),\n          Focusing.config({}),\n          RepresentingConfigs.withComp(initialData, sourcing.getValue, sourcing.setValue)\n        ])\n      });\n      const pField = FormField.parts.field({ factory: { sketch: factory } });\n      return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n    };\n\n    const image = image => new Promise((resolve, reject) => {\n      const loaded = () => {\n        destroy();\n        resolve(image);\n      };\n      const listeners = [\n        bind(image, 'load', loaded),\n        bind(image, 'error', () => {\n          destroy();\n          reject('Unable to load data from image: ' + image.dom.src);\n        })\n      ];\n      const destroy = () => each$1(listeners, l => l.unbind());\n      if (image.dom.complete) {\n        loaded();\n      }\n    });\n\n    const calculateImagePosition = (panelWidth, panelHeight, imageWidth, imageHeight, zoom) => {\n      const width = imageWidth * zoom;\n      const height = imageHeight * zoom;\n      const left = Math.max(0, panelWidth / 2 - width / 2);\n      const top = Math.max(0, panelHeight / 2 - height / 2);\n      return {\n        left: left.toString() + 'px',\n        top: top.toString() + 'px',\n        width: width.toString() + 'px',\n        height: height.toString() + 'px'\n      };\n    };\n    const zoomToFit = (panel, width, height) => {\n      const panelW = get$c(panel);\n      const panelH = get$d(panel);\n      return Math.min(panelW / width, panelH / height, 1);\n    };\n    const renderImagePreview = (spec, initialData) => {\n      const cachedData = Cell(initialData.getOr({ url: '' }));\n      const memImage = record({\n        dom: {\n          tag: 'img',\n          classes: ['tox-imagepreview__image'],\n          attributes: initialData.map(data => ({ src: data.url })).getOr({})\n        }\n      });\n      const memContainer = record({\n        dom: {\n          tag: 'div',\n          classes: ['tox-imagepreview__container'],\n          attributes: { role: 'presentation' }\n        },\n        components: [memImage.asSpec()]\n      });\n      const setValue = (frameComponent, data) => {\n        const translatedData = { url: data.url };\n        data.zoom.each(z => translatedData.zoom = z);\n        data.cachedWidth.each(z => translatedData.cachedWidth = z);\n        data.cachedHeight.each(z => translatedData.cachedHeight = z);\n        cachedData.set(translatedData);\n        const applyFramePositioning = () => {\n          const {cachedWidth, cachedHeight, zoom} = translatedData;\n          if (!isUndefined(cachedWidth) && !isUndefined(cachedHeight)) {\n            if (isUndefined(zoom)) {\n              const z = zoomToFit(frameComponent.element, cachedWidth, cachedHeight);\n              translatedData.zoom = z;\n            }\n            const position = calculateImagePosition(get$c(frameComponent.element), get$d(frameComponent.element), cachedWidth, cachedHeight, translatedData.zoom);\n            memContainer.getOpt(frameComponent).each(container => {\n              setAll(container.element, position);\n            });\n          }\n        };\n        memImage.getOpt(frameComponent).each(imageComponent => {\n          const img = imageComponent.element;\n          if (data.url !== get$f(img, 'src')) {\n            set$9(img, 'src', data.url);\n            remove$2(frameComponent.element, 'tox-imagepreview__loaded');\n          }\n          applyFramePositioning();\n          image(img).then(img => {\n            if (frameComponent.getSystem().isConnected()) {\n              add$2(frameComponent.element, 'tox-imagepreview__loaded');\n              translatedData.cachedWidth = img.dom.naturalWidth;\n              translatedData.cachedHeight = img.dom.naturalHeight;\n              applyFramePositioning();\n            }\n          });\n        });\n      };\n      const styles = {};\n      spec.height.each(h => styles.height = h);\n      const fakeValidatedData = initialData.map(d => ({\n        url: d.url,\n        zoom: Optional.from(d.zoom),\n        cachedWidth: Optional.from(d.cachedWidth),\n        cachedHeight: Optional.from(d.cachedHeight)\n      }));\n      return {\n        dom: {\n          tag: 'div',\n          classes: ['tox-imagepreview'],\n          styles,\n          attributes: { role: 'presentation' }\n        },\n        components: [memContainer.asSpec()],\n        behaviours: derive$1([\n          ComposingConfigs.self(),\n          RepresentingConfigs.withComp(fakeValidatedData, () => cachedData.get(), setValue)\n        ])\n      };\n    };\n\n    const renderLabel$1 = (spec, backstageShared) => {\n      const label = {\n        dom: {\n          tag: 'label',\n          classes: ['tox-label']\n        },\n        components: [text$1(backstageShared.providers.translate(spec.label))]\n      };\n      const comps = map$2(spec.items, backstageShared.interpreter);\n      return {\n        dom: {\n          tag: 'div',\n          classes: ['tox-form__group']\n        },\n        components: [\n          label,\n          ...comps\n        ],\n        behaviours: derive$1([\n          ComposingConfigs.self(),\n          Replacing.config({}),\n          RepresentingConfigs.domHtml(Optional.none()),\n          Keying.config({ mode: 'acyclic' })\n        ])\n      };\n    };\n\n    const internalToolbarButtonExecute = generate$6('toolbar.button.execute');\n    const onToolbarButtonExecute = info => runOnExecute$1((comp, _simulatedEvent) => {\n      runWithApi(info, comp)(itemApi => {\n        emitWith(comp, internalToolbarButtonExecute, { buttonApi: itemApi });\n        info.onAction(itemApi);\n      });\n    });\n    const toolbarButtonEventOrder = {\n      [execute$5()]: [\n        'disabling',\n        'alloy.base.behaviour',\n        'toggling',\n        'toolbar-button-events'\n      ]\n    };\n\n    const renderIcon = (iconName, iconsProvider, behaviours) => render$3(iconName, {\n      tag: 'span',\n      classes: [\n        'tox-icon',\n        'tox-tbtn__icon-wrap'\n      ],\n      behaviours\n    }, iconsProvider);\n    const renderIconFromPack = (iconName, iconsProvider) => renderIcon(iconName, iconsProvider, []);\n    const renderReplaceableIconFromPack = (iconName, iconsProvider) => renderIcon(iconName, iconsProvider, [Replacing.config({})]);\n    const renderLabel = (text, prefix, providersBackstage) => ({\n      dom: {\n        tag: 'span',\n        classes: [`${ prefix }__select-label`]\n      },\n      components: [text$1(providersBackstage.translate(text))],\n      behaviours: derive$1([Replacing.config({})])\n    });\n\n    const updateMenuText = generate$6('update-menu-text');\n    const updateMenuIcon = generate$6('update-menu-icon');\n    const renderCommonDropdown = (spec, prefix, sharedBackstage) => {\n      const editorOffCell = Cell(noop);\n      const optMemDisplayText = spec.text.map(text => record(renderLabel(text, prefix, sharedBackstage.providers)));\n      const optMemDisplayIcon = spec.icon.map(iconName => record(renderReplaceableIconFromPack(iconName, sharedBackstage.providers.icons)));\n      const onLeftOrRightInMenu = (comp, se) => {\n        const dropdown = Representing.getValue(comp);\n        Focusing.focus(dropdown);\n        emitWith(dropdown, 'keydown', { raw: se.event.raw });\n        Dropdown.close(dropdown);\n        return Optional.some(true);\n      };\n      const role = spec.role.fold(() => ({}), role => ({ role }));\n      const tooltipAttributes = spec.tooltip.fold(() => ({}), tooltip => {\n        const translatedTooltip = sharedBackstage.providers.translate(tooltip);\n        return {\n          'title': translatedTooltip,\n          'aria-label': translatedTooltip\n        };\n      });\n      const iconSpec = render$3('chevron-down', {\n        tag: 'div',\n        classes: [`${ prefix }__select-chevron`]\n      }, sharedBackstage.providers.icons);\n      const memDropdown = record(Dropdown.sketch({\n        ...spec.uid ? { uid: spec.uid } : {},\n        ...role,\n        dom: {\n          tag: 'button',\n          classes: [\n            prefix,\n            `${ prefix }--select`\n          ].concat(map$2(spec.classes, c => `${ prefix }--${ c }`)),\n          attributes: { ...tooltipAttributes }\n        },\n        components: componentRenderPipeline([\n          optMemDisplayIcon.map(mem => mem.asSpec()),\n          optMemDisplayText.map(mem => mem.asSpec()),\n          Optional.some(iconSpec)\n        ]),\n        matchWidth: true,\n        useMinWidth: true,\n        onOpen: (anchor, dropdownComp, tmenuComp) => {\n          if (spec.searchable) {\n            focusSearchField(tmenuComp);\n          }\n        },\n        dropdownBehaviours: derive$1([\n          ...spec.dropdownBehaviours,\n          DisablingConfigs.button(() => spec.disabled || sharedBackstage.providers.isDisabled()),\n          receivingConfig(),\n          Unselecting.config({}),\n          Replacing.config({}),\n          config('dropdown-events', [\n            onControlAttached(spec, editorOffCell),\n            onControlDetached(spec, editorOffCell)\n          ]),\n          config('menubutton-update-display-text', [\n            run$1(updateMenuText, (comp, se) => {\n              optMemDisplayText.bind(mem => mem.getOpt(comp)).each(displayText => {\n                Replacing.set(displayText, [text$1(sharedBackstage.providers.translate(se.event.text))]);\n              });\n            }),\n            run$1(updateMenuIcon, (comp, se) => {\n              optMemDisplayIcon.bind(mem => mem.getOpt(comp)).each(displayIcon => {\n                Replacing.set(displayIcon, [renderReplaceableIconFromPack(se.event.icon, sharedBackstage.providers.icons)]);\n              });\n            })\n          ])\n        ]),\n        eventOrder: deepMerge(toolbarButtonEventOrder, {\n          mousedown: [\n            'focusing',\n            'alloy.base.behaviour',\n            'item-type-events',\n            'normal-dropdown-events'\n          ]\n        }),\n        sandboxBehaviours: derive$1([\n          Keying.config({\n            mode: 'special',\n            onLeft: onLeftOrRightInMenu,\n            onRight: onLeftOrRightInMenu\n          }),\n          config('dropdown-sandbox-events', [\n            run$1(refetchTriggerEvent, (originalSandboxComp, se) => {\n              handleRefetchTrigger(originalSandboxComp);\n              se.stop();\n            }),\n            run$1(redirectMenuItemInteractionEvent, (sandboxComp, se) => {\n              handleRedirectToMenuItem(sandboxComp, se);\n              se.stop();\n            })\n          ])\n        ]),\n        lazySink: sharedBackstage.getSink,\n        toggleClass: `${ prefix }--active`,\n        parts: {\n          menu: {\n            ...part(false, spec.columns, spec.presets),\n            fakeFocus: spec.searchable,\n            onHighlightItem: updateAriaOnHighlight,\n            onCollapseMenu: (tmenuComp, itemCompCausingCollapse, nowActiveMenuComp) => {\n              Highlighting.getHighlighted(nowActiveMenuComp).each(itemComp => {\n                updateAriaOnHighlight(tmenuComp, nowActiveMenuComp, itemComp);\n              });\n            },\n            onDehighlightItem: updateAriaOnDehighlight\n          }\n        },\n        fetch: comp => Future.nu(curry(spec.fetch, comp))\n      }));\n      return memDropdown.asSpec();\n    };\n\n    const isMenuItemReference = item => isString(item);\n    const isSeparator$2 = item => item.type === 'separator';\n    const isExpandingMenuItem = item => has$2(item, 'getSubmenuItems');\n    const separator$2 = { type: 'separator' };\n    const unwrapReferences = (items, menuItems) => {\n      const realItems = foldl(items, (acc, item) => {\n        if (isMenuItemReference(item)) {\n          if (item === '') {\n            return acc;\n          } else if (item === '|') {\n            return acc.length > 0 && !isSeparator$2(acc[acc.length - 1]) ? acc.concat([separator$2]) : acc;\n          } else if (has$2(menuItems, item.toLowerCase())) {\n            return acc.concat([menuItems[item.toLowerCase()]]);\n          } else {\n            return acc;\n          }\n        } else {\n          return acc.concat([item]);\n        }\n      }, []);\n      if (realItems.length > 0 && isSeparator$2(realItems[realItems.length - 1])) {\n        realItems.pop();\n      }\n      return realItems;\n    };\n    const getFromExpandingItem = (item, menuItems) => {\n      const submenuItems = item.getSubmenuItems();\n      const rest = expand(submenuItems, menuItems);\n      const newMenus = deepMerge(rest.menus, { [item.value]: rest.items });\n      const newExpansions = deepMerge(rest.expansions, { [item.value]: item.value });\n      return {\n        item,\n        menus: newMenus,\n        expansions: newExpansions\n      };\n    };\n    const generateValueIfRequired = item => {\n      const itemValue = get$g(item, 'value').getOrThunk(() => generate$6('generated-menu-item'));\n      return deepMerge({ value: itemValue }, item);\n    };\n    const expand = (items, menuItems) => {\n      const realItems = unwrapReferences(isString(items) ? items.split(' ') : items, menuItems);\n      return foldr(realItems, (acc, item) => {\n        if (isExpandingMenuItem(item)) {\n          const itemWithValue = generateValueIfRequired(item);\n          const newData = getFromExpandingItem(itemWithValue, menuItems);\n          return {\n            menus: deepMerge(acc.menus, newData.menus),\n            items: [\n              newData.item,\n              ...acc.items\n            ],\n            expansions: deepMerge(acc.expansions, newData.expansions)\n          };\n        } else {\n          return {\n            ...acc,\n            items: [\n              item,\n              ...acc.items\n            ]\n          };\n        }\n      }, {\n        menus: {},\n        expansions: {},\n        items: []\n      });\n    };\n\n    const getSearchModeForField = settings => {\n      return settings.search.fold(() => ({ searchMode: 'no-search' }), searchSettings => ({\n        searchMode: 'search-with-field',\n        placeholder: searchSettings.placeholder\n      }));\n    };\n    const getSearchModeForResults = settings => {\n      return settings.search.fold(() => ({ searchMode: 'no-search' }), _ => ({ searchMode: 'search-with-results' }));\n    };\n    const build = (items, itemResponse, backstage, settings) => {\n      const primary = generate$6('primary-menu');\n      const data = expand(items, backstage.shared.providers.menuItems());\n      if (data.items.length === 0) {\n        return Optional.none();\n      }\n      const mainMenuSearchMode = getSearchModeForField(settings);\n      const mainMenu = createPartialMenu(primary, data.items, itemResponse, backstage, settings.isHorizontalMenu, mainMenuSearchMode);\n      const submenuSearchMode = getSearchModeForResults(settings);\n      const submenus = map$1(data.menus, (menuItems, menuName) => createPartialMenu(menuName, menuItems, itemResponse, backstage, false, submenuSearchMode));\n      const menus = deepMerge(submenus, wrap$1(primary, mainMenu));\n      return Optional.from(tieredMenu.tieredData(primary, menus, data.expansions));\n    };\n\n    const isSingleListItem = item => !has$2(item, 'items');\n    const dataAttribute = 'data-value';\n    const fetchItems = (dropdownComp, name, items, selectedValue) => map$2(items, item => {\n      if (!isSingleListItem(item)) {\n        return {\n          type: 'nestedmenuitem',\n          text: item.text,\n          getSubmenuItems: () => fetchItems(dropdownComp, name, item.items, selectedValue)\n        };\n      } else {\n        return {\n          type: 'togglemenuitem',\n          text: item.text,\n          value: item.value,\n          active: item.value === selectedValue,\n          onAction: () => {\n            Representing.setValue(dropdownComp, item.value);\n            emitWith(dropdownComp, formChangeEvent, { name });\n            Focusing.focus(dropdownComp);\n          }\n        };\n      }\n    });\n    const findItemByValue = (items, value) => findMap(items, item => {\n      if (!isSingleListItem(item)) {\n        return findItemByValue(item.items, value);\n      } else {\n        return someIf(item.value === value, item);\n      }\n    });\n    const renderListBox = (spec, backstage, initialData) => {\n      const providersBackstage = backstage.shared.providers;\n      const initialItem = initialData.bind(value => findItemByValue(spec.items, value)).orThunk(() => head(spec.items).filter(isSingleListItem));\n      const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n      const pField = FormField.parts.field({\n        dom: {},\n        factory: {\n          sketch: sketchSpec => renderCommonDropdown({\n            uid: sketchSpec.uid,\n            text: initialItem.map(item => item.text),\n            icon: Optional.none(),\n            tooltip: spec.label,\n            role: Optional.none(),\n            fetch: (comp, callback) => {\n              const items = fetchItems(comp, spec.name, spec.items, Representing.getValue(comp));\n              callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n                isHorizontalMenu: false,\n                search: Optional.none()\n              }));\n            },\n            onSetup: constant$1(noop),\n            getApi: constant$1({}),\n            columns: 1,\n            presets: 'normal',\n            classes: [],\n            dropdownBehaviours: [\n              Tabstopping.config({}),\n              RepresentingConfigs.withComp(initialItem.map(item => item.value), comp => get$f(comp.element, dataAttribute), (comp, data) => {\n                findItemByValue(spec.items, data).each(item => {\n                  set$9(comp.element, dataAttribute, item.value);\n                  emitWith(comp, updateMenuText, { text: item.text });\n                });\n              })\n            ]\n          }, 'tox-listbox', backstage.shared)\n        }\n      });\n      const listBoxWrap = {\n        dom: {\n          tag: 'div',\n          classes: ['tox-listboxfield']\n        },\n        components: [pField]\n      };\n      return FormField.sketch({\n        dom: {\n          tag: 'div',\n          classes: ['tox-form__group']\n        },\n        components: flatten([\n          pLabel.toArray(),\n          [listBoxWrap]\n        ]),\n        fieldBehaviours: derive$1([Disabling.config({\n            disabled: constant$1(!spec.enabled),\n            onDisabled: comp => {\n              FormField.getField(comp).each(Disabling.disable);\n            },\n            onEnabled: comp => {\n              FormField.getField(comp).each(Disabling.enable);\n            }\n          })])\n      });\n    };\n\n    const renderPanel = (spec, backstage) => ({\n      dom: {\n        tag: 'div',\n        classes: spec.classes\n      },\n      components: map$2(spec.items, backstage.shared.interpreter)\n    });\n\n    const factory$f = (detail, _spec) => {\n      const options = map$2(detail.options, option => ({\n        dom: {\n          tag: 'option',\n          value: option.value,\n          innerHtml: option.text\n        }\n      }));\n      const initialValues = detail.data.map(v => wrap$1('initialValue', v)).getOr({});\n      return {\n        uid: detail.uid,\n        dom: {\n          tag: 'select',\n          classes: detail.selectClasses,\n          attributes: detail.selectAttributes\n        },\n        components: options,\n        behaviours: augment(detail.selectBehaviours, [\n          Focusing.config({}),\n          Representing.config({\n            store: {\n              mode: 'manual',\n              getValue: select => {\n                return get$6(select.element);\n              },\n              setValue: (select, newValue) => {\n                const found = find$5(detail.options, opt => opt.value === newValue);\n                if (found.isSome()) {\n                  set$5(select.element, newValue);\n                }\n              },\n              ...initialValues\n            }\n          })\n        ])\n      };\n    };\n    const HtmlSelect = single({\n      name: 'HtmlSelect',\n      configFields: [\n        required$1('options'),\n        field('selectBehaviours', [\n          Focusing,\n          Representing\n        ]),\n        defaulted('selectClasses', []),\n        defaulted('selectAttributes', {}),\n        option$3('data')\n      ],\n      factory: factory$f\n    });\n\n    const renderSelectBox = (spec, providersBackstage, initialData) => {\n      const translatedOptions = map$2(spec.items, item => ({\n        text: providersBackstage.translate(item.text),\n        value: item.value\n      }));\n      const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n      const pField = FormField.parts.field({\n        dom: {},\n        ...initialData.map(data => ({ data })).getOr({}),\n        selectAttributes: { size: spec.size },\n        options: translatedOptions,\n        factory: HtmlSelect,\n        selectBehaviours: derive$1([\n          Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() }),\n          Tabstopping.config({}),\n          config('selectbox-change', [run$1(change(), (component, _) => {\n              emitWith(component, formChangeEvent, { name: spec.name });\n            })])\n        ])\n      });\n      const chevron = spec.size > 1 ? Optional.none() : Optional.some(render$3('chevron-down', {\n        tag: 'div',\n        classes: ['tox-selectfield__icon-js']\n      }, providersBackstage.icons));\n      const selectWrap = {\n        dom: {\n          tag: 'div',\n          classes: ['tox-selectfield']\n        },\n        components: flatten([\n          [pField],\n          chevron.toArray()\n        ])\n      };\n      return FormField.sketch({\n        dom: {\n          tag: 'div',\n          classes: ['tox-form__group']\n        },\n        components: flatten([\n          pLabel.toArray(),\n          [selectWrap]\n        ]),\n        fieldBehaviours: derive$1([\n          Disabling.config({\n            disabled: () => !spec.enabled || providersBackstage.isDisabled(),\n            onDisabled: comp => {\n              FormField.getField(comp).each(Disabling.disable);\n            },\n            onEnabled: comp => {\n              FormField.getField(comp).each(Disabling.enable);\n            }\n          }),\n          receivingConfig()\n        ])\n      });\n    };\n\n    const schema$h = constant$1([\n      defaulted('field1Name', 'field1'),\n      defaulted('field2Name', 'field2'),\n      onStrictHandler('onLockedChange'),\n      markers$1(['lockClass']),\n      defaulted('locked', false),\n      SketchBehaviours.field('coupledFieldBehaviours', [\n        Composing,\n        Representing\n      ])\n    ]);\n    const getField = (comp, detail, partName) => getPart(comp, detail, partName).bind(Composing.getCurrent);\n    const coupledPart = (selfName, otherName) => required({\n      factory: FormField,\n      name: selfName,\n      overrides: detail => {\n        return {\n          fieldBehaviours: derive$1([config('coupled-input-behaviour', [run$1(input(), me => {\n                getField(me, detail, otherName).each(other => {\n                  getPart(me, detail, 'lock').each(lock => {\n                    if (Toggling.isOn(lock)) {\n                      detail.onLockedChange(me, other, lock);\n                    }\n                  });\n                });\n              })])])\n        };\n      }\n    });\n    const parts$c = constant$1([\n      coupledPart('field1', 'field2'),\n      coupledPart('field2', 'field1'),\n      required({\n        factory: Button,\n        schema: [required$1('dom')],\n        name: 'lock',\n        overrides: detail => {\n          return {\n            buttonBehaviours: derive$1([Toggling.config({\n                selected: detail.locked,\n                toggleClass: detail.markers.lockClass,\n                aria: { mode: 'pressed' }\n              })])\n          };\n        }\n      })\n    ]);\n\n    const factory$e = (detail, components, _spec, _externals) => ({\n      uid: detail.uid,\n      dom: detail.dom,\n      components,\n      behaviours: SketchBehaviours.augment(detail.coupledFieldBehaviours, [\n        Composing.config({ find: Optional.some }),\n        Representing.config({\n          store: {\n            mode: 'manual',\n            getValue: comp => {\n              const parts = getPartsOrDie(comp, detail, [\n                'field1',\n                'field2'\n              ]);\n              return {\n                [detail.field1Name]: Representing.getValue(parts.field1()),\n                [detail.field2Name]: Representing.getValue(parts.field2())\n              };\n            },\n            setValue: (comp, value) => {\n              const parts = getPartsOrDie(comp, detail, [\n                'field1',\n                'field2'\n              ]);\n              if (hasNonNullableKey(value, detail.field1Name)) {\n                Representing.setValue(parts.field1(), value[detail.field1Name]);\n              }\n              if (hasNonNullableKey(value, detail.field2Name)) {\n                Representing.setValue(parts.field2(), value[detail.field2Name]);\n              }\n            }\n          }\n        })\n      ]),\n      apis: {\n        getField1: component => getPart(component, detail, 'field1'),\n        getField2: component => getPart(component, detail, 'field2'),\n        getLock: component => getPart(component, detail, 'lock')\n      }\n    });\n    const FormCoupledInputs = composite({\n      name: 'FormCoupledInputs',\n      configFields: schema$h(),\n      partFields: parts$c(),\n      factory: factory$e,\n      apis: {\n        getField1: (apis, component) => apis.getField1(component),\n        getField2: (apis, component) => apis.getField2(component),\n        getLock: (apis, component) => apis.getLock(component)\n      }\n    });\n\n    const formatSize = size => {\n      const unitDec = {\n        '': 0,\n        'px': 0,\n        'pt': 1,\n        'mm': 1,\n        'pc': 2,\n        'ex': 2,\n        'em': 2,\n        'ch': 2,\n        'rem': 2,\n        'cm': 3,\n        'in': 4,\n        '%': 4\n      };\n      const maxDecimal = unit => unit in unitDec ? unitDec[unit] : 1;\n      let numText = size.value.toFixed(maxDecimal(size.unit));\n      if (numText.indexOf('.') !== -1) {\n        numText = numText.replace(/\\.?0*$/, '');\n      }\n      return numText + size.unit;\n    };\n    const parseSize = sizeText => {\n      const numPattern = /^\\s*(\\d+(?:\\.\\d+)?)\\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\\s*$/;\n      const match = numPattern.exec(sizeText);\n      if (match !== null) {\n        const value = parseFloat(match[1]);\n        const unit = match[2];\n        return Result.value({\n          value,\n          unit\n        });\n      } else {\n        return Result.error(sizeText);\n      }\n    };\n    const convertUnit = (size, unit) => {\n      const inInch = {\n        '': 96,\n        'px': 96,\n        'pt': 72,\n        'cm': 2.54,\n        'pc': 12,\n        'mm': 25.4,\n        'in': 1\n      };\n      const supported = u => has$2(inInch, u);\n      if (size.unit === unit) {\n        return Optional.some(size.value);\n      } else if (supported(size.unit) && supported(unit)) {\n        if (inInch[size.unit] === inInch[unit]) {\n          return Optional.some(size.value);\n        } else {\n          return Optional.some(size.value / inInch[size.unit] * inInch[unit]);\n        }\n      } else {\n        return Optional.none();\n      }\n    };\n    const noSizeConversion = _input => Optional.none();\n    const ratioSizeConversion = (scale, unit) => size => convertUnit(size, unit).map(value => ({\n      value: value * scale,\n      unit\n    }));\n    const makeRatioConverter = (currentFieldText, otherFieldText) => {\n      const cValue = parseSize(currentFieldText).toOptional();\n      const oValue = parseSize(otherFieldText).toOptional();\n      return lift2(cValue, oValue, (cSize, oSize) => convertUnit(cSize, oSize.unit).map(val => oSize.value / val).map(r => ratioSizeConversion(r, oSize.unit)).getOr(noSizeConversion)).getOr(noSizeConversion);\n    };\n\n    const renderSizeInput = (spec, providersBackstage) => {\n      let converter = noSizeConversion;\n      const ratioEvent = generate$6('ratio-event');\n      const makeIcon = iconName => render$3(iconName, {\n        tag: 'span',\n        classes: [\n          'tox-icon',\n          'tox-lock-icon__' + iconName\n        ]\n      }, providersBackstage.icons);\n      const pLock = FormCoupledInputs.parts.lock({\n        dom: {\n          tag: 'button',\n          classes: [\n            'tox-lock',\n            'tox-button',\n            'tox-button--naked',\n            'tox-button--icon'\n          ],\n          attributes: { title: providersBackstage.translate(spec.label.getOr('Constrain proportions')) }\n        },\n        components: [\n          makeIcon('lock'),\n          makeIcon('unlock')\n        ],\n        buttonBehaviours: derive$1([\n          Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() }),\n          receivingConfig(),\n          Tabstopping.config({})\n        ])\n      });\n      const formGroup = components => ({\n        dom: {\n          tag: 'div',\n          classes: ['tox-form__group']\n        },\n        components\n      });\n      const getFieldPart = isField1 => FormField.parts.field({\n        factory: Input,\n        inputClasses: ['tox-textfield'],\n        inputBehaviours: derive$1([\n          Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() }),\n          receivingConfig(),\n          Tabstopping.config({}),\n          config('size-input-events', [\n            run$1(focusin(), (component, _simulatedEvent) => {\n              emitWith(component, ratioEvent, { isField1 });\n            }),\n            run$1(change(), (component, _simulatedEvent) => {\n              emitWith(component, formChangeEvent, { name: spec.name });\n            })\n          ])\n        ]),\n        selectOnFocus: false\n      });\n      const getLabel = label => ({\n        dom: {\n          tag: 'label',\n          classes: ['tox-label']\n        },\n        components: [text$1(providersBackstage.translate(label))]\n      });\n      const widthField = FormCoupledInputs.parts.field1(formGroup([\n        FormField.parts.label(getLabel('Width')),\n        getFieldPart(true)\n      ]));\n      const heightField = FormCoupledInputs.parts.field2(formGroup([\n        FormField.parts.label(getLabel('Height')),\n        getFieldPart(false)\n      ]));\n      return FormCoupledInputs.sketch({\n        dom: {\n          tag: 'div',\n          classes: ['tox-form__group']\n        },\n        components: [{\n            dom: {\n              tag: 'div',\n              classes: ['tox-form__controls-h-stack']\n            },\n            components: [\n              widthField,\n              heightField,\n              formGroup([\n                getLabel(nbsp),\n                pLock\n              ])\n            ]\n          }],\n        field1Name: 'width',\n        field2Name: 'height',\n        locked: true,\n        markers: { lockClass: 'tox-locked' },\n        onLockedChange: (current, other, _lock) => {\n          parseSize(Representing.getValue(current)).each(size => {\n            converter(size).each(newSize => {\n              Representing.setValue(other, formatSize(newSize));\n            });\n          });\n        },\n        coupledFieldBehaviours: derive$1([\n          Disabling.config({\n            disabled: () => !spec.enabled || providersBackstage.isDisabled(),\n            onDisabled: comp => {\n              FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable);\n              FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable);\n              FormCoupledInputs.getLock(comp).each(Disabling.disable);\n            },\n            onEnabled: comp => {\n              FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable);\n              FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable);\n              FormCoupledInputs.getLock(comp).each(Disabling.enable);\n            }\n          }),\n          receivingConfig(),\n          config('size-input-events2', [run$1(ratioEvent, (component, simulatedEvent) => {\n              const isField1 = simulatedEvent.event.isField1;\n              const optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);\n              const optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);\n              const value1 = optCurrent.map(Representing.getValue).getOr('');\n              const value2 = optOther.map(Representing.getValue).getOr('');\n              converter = makeRatioConverter(value1, value2);\n            })])\n        ])\n      });\n    };\n\n    const renderSlider = (spec, providerBackstage, initialData) => {\n      const labelPart = Slider.parts.label({\n        dom: {\n          tag: 'label',\n          classes: ['tox-label']\n        },\n        components: [text$1(providerBackstage.translate(spec.label))]\n      });\n      const spectrum = Slider.parts.spectrum({\n        dom: {\n          tag: 'div',\n          classes: ['tox-slider__rail'],\n          attributes: { role: 'presentation' }\n        }\n      });\n      const thumb = Slider.parts.thumb({\n        dom: {\n          tag: 'div',\n          classes: ['tox-slider__handle'],\n          attributes: { role: 'presentation' }\n        }\n      });\n      return Slider.sketch({\n        dom: {\n          tag: 'div',\n          classes: ['tox-slider'],\n          attributes: { role: 'presentation' }\n        },\n        model: {\n          mode: 'x',\n          minX: spec.min,\n          maxX: spec.max,\n          getInitialValue: constant$1(initialData.getOrThunk(() => (Math.abs(spec.max) - Math.abs(spec.min)) / 2))\n        },\n        components: [\n          labelPart,\n          spectrum,\n          thumb\n        ],\n        sliderBehaviours: derive$1([\n          ComposingConfigs.self(),\n          Focusing.config({})\n        ]),\n        onChoose: (component, thumb, value) => {\n          emitWith(component, formChangeEvent, {\n            name: spec.name,\n            value\n          });\n        }\n      });\n    };\n\n    const renderTable = (spec, providersBackstage) => {\n      const renderTh = text => ({\n        dom: {\n          tag: 'th',\n          innerHtml: providersBackstage.translate(text)\n        }\n      });\n      const renderHeader = header => ({\n        dom: { tag: 'thead' },\n        components: [{\n            dom: { tag: 'tr' },\n            components: map$2(header, renderTh)\n          }]\n      });\n      const renderTd = text => ({\n        dom: {\n          tag: 'td',\n          innerHtml: providersBackstage.translate(text)\n        }\n      });\n      const renderTr = row => ({\n        dom: { tag: 'tr' },\n        components: map$2(row, renderTd)\n      });\n      const renderRows = rows => ({\n        dom: { tag: 'tbody' },\n        components: map$2(rows, renderTr)\n      });\n      return {\n        dom: {\n          tag: 'table',\n          classes: ['tox-dialog__table']\n        },\n        components: [\n          renderHeader(spec.header),\n          renderRows(spec.cells)\n        ],\n        behaviours: derive$1([\n          Tabstopping.config({}),\n          Focusing.config({})\n        ])\n      };\n    };\n\n    const renderTextField = (spec, providersBackstage) => {\n      const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n      const baseInputBehaviours = [\n        Disabling.config({ disabled: () => spec.disabled || providersBackstage.isDisabled() }),\n        receivingConfig(),\n        Keying.config({\n          mode: 'execution',\n          useEnter: spec.multiline !== true,\n          useControlEnter: spec.multiline === true,\n          execute: comp => {\n            emit(comp, formSubmitEvent);\n            return Optional.some(true);\n          }\n        }),\n        config('textfield-change', [\n          run$1(input(), (component, _) => {\n            emitWith(component, formChangeEvent, { name: spec.name });\n          }),\n          run$1(postPaste(), (component, _) => {\n            emitWith(component, formChangeEvent, { name: spec.name });\n          })\n        ]),\n        Tabstopping.config({})\n      ];\n      const validatingBehaviours = spec.validation.map(vl => Invalidating.config({\n        getRoot: input => {\n          return parentElement(input.element);\n        },\n        invalidClass: 'tox-invalid',\n        validator: {\n          validate: input => {\n            const v = Representing.getValue(input);\n            const result = vl.validator(v);\n            return Future.pure(result === true ? Result.value(v) : Result.error(result));\n          },\n          validateOnLoad: vl.validateOnLoad\n        }\n      })).toArray();\n      const placeholder = spec.placeholder.fold(constant$1({}), p => ({ placeholder: providersBackstage.translate(p) }));\n      const inputMode = spec.inputMode.fold(constant$1({}), mode => ({ inputmode: mode }));\n      const inputAttributes = {\n        ...placeholder,\n        ...inputMode\n      };\n      const pField = FormField.parts.field({\n        tag: spec.multiline === true ? 'textarea' : 'input',\n        ...spec.data.map(data => ({ data })).getOr({}),\n        inputAttributes,\n        inputClasses: [spec.classname],\n        inputBehaviours: derive$1(flatten([\n          baseInputBehaviours,\n          validatingBehaviours\n        ])),\n        selectOnFocus: false,\n        factory: Input\n      });\n      const extraClasses = spec.flex ? ['tox-form__group--stretched'] : [];\n      const extraClasses2 = extraClasses.concat(spec.maximized ? ['tox-form-group--maximize'] : []);\n      const extraBehaviours = [\n        Disabling.config({\n          disabled: () => spec.disabled || providersBackstage.isDisabled(),\n          onDisabled: comp => {\n            FormField.getField(comp).each(Disabling.disable);\n          },\n          onEnabled: comp => {\n            FormField.getField(comp).each(Disabling.enable);\n          }\n        }),\n        receivingConfig()\n      ];\n      return renderFormFieldWith(pLabel, pField, extraClasses2, extraBehaviours);\n    };\n    const renderInput = (spec, providersBackstage, initialData) => renderTextField({\n      name: spec.name,\n      multiline: false,\n      label: spec.label,\n      inputMode: spec.inputMode,\n      placeholder: spec.placeholder,\n      flex: false,\n      disabled: !spec.enabled,\n      classname: 'tox-textfield',\n      validation: Optional.none(),\n      maximized: spec.maximized,\n      data: initialData\n    }, providersBackstage);\n    const renderTextarea = (spec, providersBackstage, initialData) => renderTextField({\n      name: spec.name,\n      multiline: true,\n      label: spec.label,\n      inputMode: Optional.none(),\n      placeholder: spec.placeholder,\n      flex: true,\n      disabled: !spec.enabled,\n      classname: 'tox-textarea',\n      validation: Optional.none(),\n      maximized: spec.maximized,\n      data: initialData\n    }, providersBackstage);\n\n    const events$6 = (streamConfig, streamState) => {\n      const streams = streamConfig.stream.streams;\n      const processor = streams.setup(streamConfig, streamState);\n      return derive$2([\n        run$1(streamConfig.event, processor),\n        runOnDetached(() => streamState.cancel())\n      ].concat(streamConfig.cancelEvent.map(e => [run$1(e, () => streamState.cancel())]).getOr([])));\n    };\n\n    var ActiveStreaming = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        events: events$6\n    });\n\n    const first = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        if (isNull(timer)) {\n          timer = setTimeout(() => {\n            timer = null;\n            fn.apply(null, args);\n          }, rate);\n        }\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n    const last = (fn, rate) => {\n      let timer = null;\n      const cancel = () => {\n        if (!isNull(timer)) {\n          clearTimeout(timer);\n          timer = null;\n        }\n      };\n      const throttle = (...args) => {\n        cancel();\n        timer = setTimeout(() => {\n          timer = null;\n          fn.apply(null, args);\n        }, rate);\n      };\n      return {\n        cancel,\n        throttle\n      };\n    };\n\n    const throttle = _config => {\n      const state = Cell(null);\n      const readState = () => ({ timer: state.get() !== null ? 'set' : 'unset' });\n      const setTimer = t => {\n        state.set(t);\n      };\n      const cancel = () => {\n        const t = state.get();\n        if (t !== null) {\n          t.cancel();\n        }\n      };\n      return nu$8({\n        readState,\n        setTimer,\n        cancel\n      });\n    };\n    const init$9 = spec => spec.stream.streams.state(spec);\n\n    var StreamingState = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        throttle: throttle,\n        init: init$9\n    });\n\n    const setup$c = (streamInfo, streamState) => {\n      const sInfo = streamInfo.stream;\n      const throttler = last(streamInfo.onStream, sInfo.delay);\n      streamState.setTimer(throttler);\n      return (component, simulatedEvent) => {\n        throttler.throttle(component, simulatedEvent);\n        if (sInfo.stopEvent) {\n          simulatedEvent.stop();\n        }\n      };\n    };\n    var StreamingSchema = [\n      requiredOf('stream', choose$1('mode', {\n        throttle: [\n          required$1('delay'),\n          defaulted('stopEvent', true),\n          output$1('streams', {\n            setup: setup$c,\n            state: throttle\n          })\n        ]\n      })),\n      defaulted('event', 'input'),\n      option$3('cancelEvent'),\n      onStrictHandler('onStream')\n    ];\n\n    const Streaming = create$3({\n      fields: StreamingSchema,\n      name: 'streaming',\n      active: ActiveStreaming,\n      state: StreamingState\n    });\n\n    const setValueFromItem = (model, input, item) => {\n      const itemData = Representing.getValue(item);\n      Representing.setValue(input, itemData);\n      setCursorAtEnd(input);\n    };\n    const setSelectionOn = (input, f) => {\n      const el = input.element;\n      const value = get$6(el);\n      const node = el.dom;\n      if (get$f(el, 'type') !== 'number') {\n        f(node, value);\n      }\n    };\n    const setCursorAtEnd = input => {\n      setSelectionOn(input, (node, value) => node.setSelectionRange(value.length, value.length));\n    };\n    const setSelectionToEnd = (input, startOffset) => {\n      setSelectionOn(input, (node, value) => node.setSelectionRange(startOffset, value.length));\n    };\n    const attemptSelectOver = (model, input, item) => {\n      if (!model.selectsOver) {\n        return Optional.none();\n      } else {\n        const currentValue = Representing.getValue(input);\n        const inputDisplay = model.getDisplayText(currentValue);\n        const itemValue = Representing.getValue(item);\n        const itemDisplay = model.getDisplayText(itemValue);\n        return itemDisplay.indexOf(inputDisplay) === 0 ? Optional.some(() => {\n          setValueFromItem(model, input, item);\n          setSelectionToEnd(input, inputDisplay.length);\n        }) : Optional.none();\n      }\n    };\n\n    const itemExecute = constant$1('alloy.typeahead.itemexecute');\n\n    const make$3 = (detail, components, spec, externals) => {\n      const navigateList = (comp, simulatedEvent, highlighter) => {\n        detail.previewing.set(false);\n        const sandbox = Coupling.getCoupled(comp, 'sandbox');\n        if (Sandboxing.isOpen(sandbox)) {\n          Composing.getCurrent(sandbox).each(menu => {\n            Highlighting.getHighlighted(menu).fold(() => {\n              highlighter(menu);\n            }, () => {\n              dispatchEvent(sandbox, menu.element, 'keydown', simulatedEvent);\n            });\n          });\n        } else {\n          const onOpenSync = sandbox => {\n            Composing.getCurrent(sandbox).each(highlighter);\n          };\n          open(detail, mapFetch(comp), comp, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n        }\n      };\n      const focusBehaviours$1 = focusBehaviours(detail);\n      const mapFetch = comp => tdata => tdata.map(data => {\n        const menus = values(data.menus);\n        const items = bind$3(menus, menu => filter$2(menu.items, item => item.type === 'item'));\n        const repState = Representing.getState(comp);\n        repState.update(map$2(items, item => item.data));\n        return data;\n      });\n      const getActiveMenu = sandboxComp => Composing.getCurrent(sandboxComp);\n      const typeaheadCustomEvents = 'typeaheadevents';\n      const behaviours = [\n        Focusing.config({}),\n        Representing.config({\n          onSetValue: detail.onSetValue,\n          store: {\n            mode: 'dataset',\n            getDataKey: comp => get$6(comp.element),\n            getFallbackEntry: itemString => ({\n              value: itemString,\n              meta: {}\n            }),\n            setValue: (comp, data) => {\n              set$5(comp.element, detail.model.getDisplayText(data));\n            },\n            ...detail.initialData.map(d => wrap$1('initialValue', d)).getOr({})\n          }\n        }),\n        Streaming.config({\n          stream: {\n            mode: 'throttle',\n            delay: detail.responseTime,\n            stopEvent: false\n          },\n          onStream: (component, _simulatedEvent) => {\n            const sandbox = Coupling.getCoupled(component, 'sandbox');\n            const focusInInput = Focusing.isFocused(component);\n            if (focusInInput) {\n              if (get$6(component.element).length >= detail.minChars) {\n                const previousValue = getActiveMenu(sandbox).bind(activeMenu => Highlighting.getHighlighted(activeMenu).map(Representing.getValue));\n                detail.previewing.set(true);\n                const onOpenSync = _sandbox => {\n                  getActiveMenu(sandbox).each(activeMenu => {\n                    previousValue.fold(() => {\n                      if (detail.model.selectsOver) {\n                        Highlighting.highlightFirst(activeMenu);\n                      }\n                    }, pv => {\n                      Highlighting.highlightBy(activeMenu, item => {\n                        const itemData = Representing.getValue(item);\n                        return itemData.value === pv.value;\n                      });\n                      Highlighting.getHighlighted(activeMenu).orThunk(() => {\n                        Highlighting.highlightFirst(activeMenu);\n                        return Optional.none();\n                      });\n                    });\n                  });\n                };\n                open(detail, mapFetch(component), component, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightJustMenu).get(noop);\n              }\n            }\n          },\n          cancelEvent: typeaheadCancel()\n        }),\n        Keying.config({\n          mode: 'special',\n          onDown: (comp, simulatedEvent) => {\n            navigateList(comp, simulatedEvent, Highlighting.highlightFirst);\n            return Optional.some(true);\n          },\n          onEscape: comp => {\n            const sandbox = Coupling.getCoupled(comp, 'sandbox');\n            if (Sandboxing.isOpen(sandbox)) {\n              Sandboxing.close(sandbox);\n              return Optional.some(true);\n            }\n            return Optional.none();\n          },\n          onUp: (comp, simulatedEvent) => {\n            navigateList(comp, simulatedEvent, Highlighting.highlightLast);\n            return Optional.some(true);\n          },\n          onEnter: comp => {\n            const sandbox = Coupling.getCoupled(comp, 'sandbox');\n            const sandboxIsOpen = Sandboxing.isOpen(sandbox);\n            if (sandboxIsOpen && !detail.previewing.get()) {\n              return getActiveMenu(sandbox).bind(activeMenu => Highlighting.getHighlighted(activeMenu)).map(item => {\n                emitWith(comp, itemExecute(), { item });\n                return true;\n              });\n            } else {\n              const currentValue = Representing.getValue(comp);\n              emit(comp, typeaheadCancel());\n              detail.onExecute(sandbox, comp, currentValue);\n              if (sandboxIsOpen) {\n                Sandboxing.close(sandbox);\n              }\n              return Optional.some(true);\n            }\n          }\n        }),\n        Toggling.config({\n          toggleClass: detail.markers.openClass,\n          aria: { mode: 'expanded' }\n        }),\n        Coupling.config({\n          others: {\n            sandbox: hotspot => {\n              return makeSandbox$1(detail, hotspot, {\n                onOpen: () => Toggling.on(hotspot),\n                onClose: () => Toggling.off(hotspot)\n              });\n            }\n          }\n        }),\n        config(typeaheadCustomEvents, [\n          runOnAttached(typeaheadComp => {\n            detail.lazyTypeaheadComp.set(Optional.some(typeaheadComp));\n          }),\n          runOnDetached(_typeaheadComp => {\n            detail.lazyTypeaheadComp.set(Optional.none());\n          }),\n          runOnExecute$1(comp => {\n            const onOpenSync = noop;\n            togglePopup(detail, mapFetch(comp), comp, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n          }),\n          run$1(itemExecute(), (comp, se) => {\n            const sandbox = Coupling.getCoupled(comp, 'sandbox');\n            setValueFromItem(detail.model, comp, se.event.item);\n            emit(comp, typeaheadCancel());\n            detail.onItemExecute(comp, sandbox, se.event.item, Representing.getValue(comp));\n            Sandboxing.close(sandbox);\n            setCursorAtEnd(comp);\n          })\n        ].concat(detail.dismissOnBlur ? [run$1(postBlur(), typeahead => {\n            const sandbox = Coupling.getCoupled(typeahead, 'sandbox');\n            if (search(sandbox.element).isNone()) {\n              Sandboxing.close(sandbox);\n            }\n          })] : []))\n      ];\n      const eventOrder = {\n        [detachedFromDom()]: [\n          Representing.name(),\n          Streaming.name(),\n          typeaheadCustomEvents\n        ],\n        ...detail.eventOrder\n      };\n      return {\n        uid: detail.uid,\n        dom: dom(deepMerge(detail, {\n          inputAttributes: {\n            'role': 'combobox',\n            'aria-autocomplete': 'list',\n            'aria-haspopup': 'true'\n          }\n        })),\n        behaviours: {\n          ...focusBehaviours$1,\n          ...augment(detail.typeaheadBehaviours, behaviours)\n        },\n        eventOrder\n      };\n    };\n\n    const schema$g = constant$1([\n      option$3('lazySink'),\n      required$1('fetch'),\n      defaulted('minChars', 5),\n      defaulted('responseTime', 1000),\n      onHandler('onOpen'),\n      defaulted('getHotspot', Optional.some),\n      defaulted('getAnchorOverrides', constant$1({})),\n      defaulted('layouts', Optional.none()),\n      defaulted('eventOrder', {}),\n      defaultedObjOf('model', {}, [\n        defaulted('getDisplayText', itemData => itemData.meta !== undefined && itemData.meta.text !== undefined ? itemData.meta.text : itemData.value),\n        defaulted('selectsOver', true),\n        defaulted('populateFromBrowse', true)\n      ]),\n      onHandler('onSetValue'),\n      onKeyboardHandler('onExecute'),\n      onHandler('onItemExecute'),\n      defaulted('inputClasses', []),\n      defaulted('inputAttributes', {}),\n      defaulted('inputStyles', {}),\n      defaulted('matchWidth', true),\n      defaulted('useMinWidth', false),\n      defaulted('dismissOnBlur', true),\n      markers$1(['openClass']),\n      option$3('initialData'),\n      field('typeaheadBehaviours', [\n        Focusing,\n        Representing,\n        Streaming,\n        Keying,\n        Toggling,\n        Coupling\n      ]),\n      customField('lazyTypeaheadComp', () => Cell(Optional.none)),\n      customField('previewing', () => Cell(true))\n    ].concat(schema$l()).concat(sandboxFields()));\n    const parts$b = constant$1([external({\n        schema: [tieredMenuMarkers()],\n        name: 'menu',\n        overrides: detail => {\n          return {\n            fakeFocus: true,\n            onHighlightItem: (_tmenu, menu, item) => {\n              if (!detail.previewing.get()) {\n                detail.lazyTypeaheadComp.get().each(input => {\n                  if (detail.model.populateFromBrowse) {\n                    setValueFromItem(detail.model, input, item);\n                  }\n                });\n              } else {\n                detail.lazyTypeaheadComp.get().each(input => {\n                  attemptSelectOver(detail.model, input, item).fold(() => {\n                    if (detail.model.selectsOver) {\n                      Highlighting.dehighlight(menu, item);\n                      detail.previewing.set(true);\n                    } else {\n                      detail.previewing.set(false);\n                    }\n                  }, selectOverTextInInput => {\n                    selectOverTextInInput();\n                    detail.previewing.set(false);\n                  });\n                });\n              }\n            },\n            onExecute: (_menu, item) => {\n              return detail.lazyTypeaheadComp.get().map(typeahead => {\n                emitWith(typeahead, itemExecute(), { item });\n                return true;\n              });\n            },\n            onHover: (menu, item) => {\n              detail.previewing.set(false);\n              detail.lazyTypeaheadComp.get().each(input => {\n                if (detail.model.populateFromBrowse) {\n                  setValueFromItem(detail.model, input, item);\n                }\n              });\n            }\n          };\n        }\n      })]);\n\n    const Typeahead = composite({\n      name: 'Typeahead',\n      configFields: schema$g(),\n      partFields: parts$b(),\n      factory: make$3\n    });\n\n    const wrap = delegate => {\n      const toCached = () => {\n        return wrap(delegate.toCached());\n      };\n      const bindFuture = f => {\n        return wrap(delegate.bind(resA => resA.fold(err => Future.pure(Result.error(err)), a => f(a))));\n      };\n      const bindResult = f => {\n        return wrap(delegate.map(resA => resA.bind(f)));\n      };\n      const mapResult = f => {\n        return wrap(delegate.map(resA => resA.map(f)));\n      };\n      const mapError = f => {\n        return wrap(delegate.map(resA => resA.mapError(f)));\n      };\n      const foldResult = (whenError, whenValue) => {\n        return delegate.map(res => res.fold(whenError, whenValue));\n      };\n      const withTimeout = (timeout, errorThunk) => {\n        return wrap(Future.nu(callback => {\n          let timedOut = false;\n          const timer = setTimeout(() => {\n            timedOut = true;\n            callback(Result.error(errorThunk()));\n          }, timeout);\n          delegate.get(result => {\n            if (!timedOut) {\n              clearTimeout(timer);\n              callback(result);\n            }\n          });\n        }));\n      };\n      return {\n        ...delegate,\n        toCached,\n        bindFuture,\n        bindResult,\n        mapResult,\n        mapError,\n        foldResult,\n        withTimeout\n      };\n    };\n    const nu$1 = worker => {\n      return wrap(Future.nu(worker));\n    };\n    const value = value => {\n      return wrap(Future.pure(Result.value(value)));\n    };\n    const error = error => {\n      return wrap(Future.pure(Result.error(error)));\n    };\n    const fromResult = result => {\n      return wrap(Future.pure(result));\n    };\n    const fromFuture = future => {\n      return wrap(future.map(Result.value));\n    };\n    const fromPromise = promise => {\n      return nu$1(completer => {\n        promise.then(value => {\n          completer(Result.value(value));\n        }, error => {\n          completer(Result.error(error));\n        });\n      });\n    };\n    const FutureResult = {\n      nu: nu$1,\n      wrap,\n      pure: value,\n      value,\n      error,\n      fromResult,\n      fromFuture,\n      fromPromise\n    };\n\n    const getMenuButtonApi = component => ({\n      isEnabled: () => !Disabling.isDisabled(component),\n      setEnabled: state => Disabling.set(component, !state),\n      setActive: state => {\n        const elm = component.element;\n        if (state) {\n          add$2(elm, 'tox-tbtn--enabled');\n          set$9(elm, 'aria-pressed', true);\n        } else {\n          remove$2(elm, 'tox-tbtn--enabled');\n          remove$7(elm, 'aria-pressed');\n        }\n      },\n      isActive: () => has(component.element, 'tox-tbtn--enabled')\n    });\n    const renderMenuButton = (spec, prefix, backstage, role) => {\n      return renderCommonDropdown({\n        text: spec.text,\n        icon: spec.icon,\n        tooltip: spec.tooltip,\n        searchable: spec.search.isSome(),\n        role,\n        fetch: (dropdownComp, callback) => {\n          const fetchContext = { pattern: spec.search.isSome() ? getSearchPattern(dropdownComp) : '' };\n          spec.fetch(items => {\n            callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n              isHorizontalMenu: false,\n              search: spec.search\n            }));\n          }, fetchContext);\n        },\n        onSetup: spec.onSetup,\n        getApi: getMenuButtonApi,\n        columns: 1,\n        presets: 'normal',\n        classes: [],\n        dropdownBehaviours: [Tabstopping.config({})]\n      }, prefix, backstage.shared);\n    };\n    const getFetch = (items, getButton, backstage) => {\n      const getMenuItemAction = item => api => {\n        const newValue = !api.isActive();\n        api.setActive(newValue);\n        item.storage.set(newValue);\n        backstage.shared.getSink().each(sink => {\n          getButton().getOpt(sink).each(orig => {\n            focus$3(orig.element);\n            emitWith(orig, formActionEvent, {\n              name: item.name,\n              value: item.storage.get()\n            });\n          });\n        });\n      };\n      const getMenuItemSetup = item => api => {\n        api.setActive(item.storage.get());\n      };\n      return success => {\n        success(map$2(items, item => {\n          const text = item.text.fold(() => ({}), text => ({ text }));\n          return {\n            type: item.type,\n            active: false,\n            ...text,\n            onAction: getMenuItemAction(item),\n            onSetup: getMenuItemSetup(item)\n          };\n        }));\n      };\n    };\n\n    const renderCommonSpec = (spec, actionOpt, extraBehaviours = [], dom, components, providersBackstage) => {\n      const action = actionOpt.fold(() => ({}), action => ({ action }));\n      const common = {\n        buttonBehaviours: derive$1([\n          DisablingConfigs.button(() => !spec.enabled || providersBackstage.isDisabled()),\n          receivingConfig(),\n          Tabstopping.config({}),\n          config('button press', [\n            preventDefault('click'),\n            preventDefault('mousedown')\n          ])\n        ].concat(extraBehaviours)),\n        eventOrder: {\n          click: [\n            'button press',\n            'alloy.base.behaviour'\n          ],\n          mousedown: [\n            'button press',\n            'alloy.base.behaviour'\n          ]\n        },\n        ...action\n      };\n      const domFinal = deepMerge(common, { dom });\n      return deepMerge(domFinal, { components });\n    };\n    const renderIconButtonSpec = (spec, action, providersBackstage, extraBehaviours = []) => {\n      const tooltipAttributes = spec.tooltip.map(tooltip => ({\n        'aria-label': providersBackstage.translate(tooltip),\n        'title': providersBackstage.translate(tooltip)\n      })).getOr({});\n      const dom = {\n        tag: 'button',\n        classes: ['tox-tbtn'],\n        attributes: tooltipAttributes\n      };\n      const icon = spec.icon.map(iconName => renderIconFromPack(iconName, providersBackstage.icons));\n      const components = componentRenderPipeline([icon]);\n      return renderCommonSpec(spec, action, extraBehaviours, dom, components, providersBackstage);\n    };\n    const calculateClassesFromButtonType = buttonType => {\n      switch (buttonType) {\n      case 'primary':\n        return ['tox-button'];\n      case 'toolbar':\n        return ['tox-tbtn'];\n      case 'secondary':\n      default:\n        return [\n          'tox-button',\n          'tox-button--secondary'\n        ];\n      }\n    };\n    const renderButtonSpec = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => {\n      const translatedText = providersBackstage.translate(spec.text);\n      const icon = spec.icon.map(iconName => renderIconFromPack(iconName, providersBackstage.icons));\n      const components = [icon.getOrThunk(() => text$1(translatedText))];\n      const buttonType = spec.buttonType.getOr(!spec.primary && !spec.borderless ? 'secondary' : 'primary');\n      const baseClasses = calculateClassesFromButtonType(buttonType);\n      const classes = [\n        ...baseClasses,\n        ...icon.isSome() ? ['tox-button--icon'] : [],\n        ...spec.borderless ? ['tox-button--naked'] : [],\n        ...extraClasses\n      ];\n      const dom = {\n        tag: 'button',\n        classes,\n        attributes: { title: translatedText }\n      };\n      return renderCommonSpec(spec, action, extraBehaviours, dom, components, providersBackstage);\n    };\n    const renderButton = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => {\n      const buttonSpec = renderButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours, extraClasses);\n      return Button.sketch(buttonSpec);\n    };\n    const getAction = (name, buttonType) => comp => {\n      if (buttonType === 'custom') {\n        emitWith(comp, formActionEvent, {\n          name,\n          value: {}\n        });\n      } else if (buttonType === 'submit') {\n        emit(comp, formSubmitEvent);\n      } else if (buttonType === 'cancel') {\n        emit(comp, formCancelEvent);\n      } else {\n        console.error('Unknown button type: ', buttonType);\n      }\n    };\n    const isMenuFooterButtonSpec = (spec, buttonType) => buttonType === 'menu';\n    const isNormalFooterButtonSpec = (spec, buttonType) => buttonType === 'custom' || buttonType === 'cancel' || buttonType === 'submit';\n    const renderFooterButton = (spec, buttonType, backstage) => {\n      if (isMenuFooterButtonSpec(spec, buttonType)) {\n        const getButton = () => memButton;\n        const menuButtonSpec = spec;\n        const fixedSpec = {\n          ...spec,\n          type: 'menubutton',\n          search: Optional.none(),\n          onSetup: api => {\n            api.setEnabled(spec.enabled);\n            return noop;\n          },\n          fetch: getFetch(menuButtonSpec.items, getButton, backstage)\n        };\n        const memButton = record(renderMenuButton(fixedSpec, 'tox-tbtn', backstage, Optional.none()));\n        return memButton.asSpec();\n      } else if (isNormalFooterButtonSpec(spec, buttonType)) {\n        const action = getAction(spec.name, buttonType);\n        const buttonSpec = {\n          ...spec,\n          borderless: false\n        };\n        return renderButton(buttonSpec, action, backstage.shared.providers, []);\n      } else {\n        console.error('Unknown footer button type: ', buttonType);\n        throw new Error('Unknown footer button type');\n      }\n    };\n    const renderDialogButton = (spec, providersBackstage) => {\n      const action = getAction(spec.name, 'custom');\n      return renderFormField(Optional.none(), FormField.parts.field({\n        factory: Button,\n        ...renderButtonSpec(spec, Optional.some(action), providersBackstage, [\n          RepresentingConfigs.memory(''),\n          ComposingConfigs.self()\n        ])\n      }));\n    };\n\n    const separator$1 = { type: 'separator' };\n    const toMenuItem = target => ({\n      type: 'menuitem',\n      value: target.url,\n      text: target.title,\n      meta: { attach: target.attach },\n      onAction: noop\n    });\n    const staticMenuItem = (title, url) => ({\n      type: 'menuitem',\n      value: url,\n      text: title,\n      meta: { attach: undefined },\n      onAction: noop\n    });\n    const toMenuItems = targets => map$2(targets, toMenuItem);\n    const filterLinkTargets = (type, targets) => filter$2(targets, target => target.type === type);\n    const filteredTargets = (type, targets) => toMenuItems(filterLinkTargets(type, targets));\n    const headerTargets = linkInfo => filteredTargets('header', linkInfo.targets);\n    const anchorTargets = linkInfo => filteredTargets('anchor', linkInfo.targets);\n    const anchorTargetTop = linkInfo => Optional.from(linkInfo.anchorTop).map(url => staticMenuItem('<top>', url)).toArray();\n    const anchorTargetBottom = linkInfo => Optional.from(linkInfo.anchorBottom).map(url => staticMenuItem('<bottom>', url)).toArray();\n    const historyTargets = history => map$2(history, url => staticMenuItem(url, url));\n    const joinMenuLists = items => {\n      return foldl(items, (a, b) => {\n        const bothEmpty = a.length === 0 || b.length === 0;\n        return bothEmpty ? a.concat(b) : a.concat(separator$1, b);\n      }, []);\n    };\n    const filterByQuery = (term, menuItems) => {\n      const lowerCaseTerm = term.toLowerCase();\n      return filter$2(menuItems, item => {\n        var _a;\n        const text = item.meta !== undefined && item.meta.text !== undefined ? item.meta.text : item.text;\n        const value = (_a = item.value) !== null && _a !== void 0 ? _a : '';\n        return contains$1(text.toLowerCase(), lowerCaseTerm) || contains$1(value.toLowerCase(), lowerCaseTerm);\n      });\n    };\n\n    const getItems = (fileType, input, urlBackstage) => {\n      const urlInputValue = Representing.getValue(input);\n      const term = urlInputValue.meta.text !== undefined ? urlInputValue.meta.text : urlInputValue.value;\n      const info = urlBackstage.getLinkInformation();\n      return info.fold(() => [], linkInfo => {\n        const history = filterByQuery(term, historyTargets(urlBackstage.getHistory(fileType)));\n        return fileType === 'file' ? joinMenuLists([\n          history,\n          filterByQuery(term, headerTargets(linkInfo)),\n          filterByQuery(term, flatten([\n            anchorTargetTop(linkInfo),\n            anchorTargets(linkInfo),\n            anchorTargetBottom(linkInfo)\n          ]))\n        ]) : history;\n      });\n    };\n    const errorId = generate$6('aria-invalid');\n    const renderUrlInput = (spec, backstage, urlBackstage, initialData) => {\n      const providersBackstage = backstage.shared.providers;\n      const updateHistory = component => {\n        const urlEntry = Representing.getValue(component);\n        urlBackstage.addToHistory(urlEntry.value, spec.filetype);\n      };\n      const typeaheadSpec = {\n        ...initialData.map(initialData => ({ initialData })).getOr({}),\n        dismissOnBlur: true,\n        inputClasses: ['tox-textfield'],\n        sandboxClasses: ['tox-dialog__popups'],\n        inputAttributes: {\n          'aria-errormessage': errorId,\n          'type': 'url'\n        },\n        minChars: 0,\n        responseTime: 0,\n        fetch: input => {\n          const items = getItems(spec.filetype, input, urlBackstage);\n          const tdata = build(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage, {\n            isHorizontalMenu: false,\n            search: Optional.none()\n          });\n          return Future.pure(tdata);\n        },\n        getHotspot: comp => memUrlBox.getOpt(comp),\n        onSetValue: (comp, _newValue) => {\n          if (comp.hasConfigured(Invalidating)) {\n            Invalidating.run(comp).get(noop);\n          }\n        },\n        typeaheadBehaviours: derive$1([\n          ...urlBackstage.getValidationHandler().map(handler => Invalidating.config({\n            getRoot: comp => parentElement(comp.element),\n            invalidClass: 'tox-control-wrap--status-invalid',\n            notify: {\n              onInvalid: (comp, err) => {\n                memInvalidIcon.getOpt(comp).each(invalidComp => {\n                  set$9(invalidComp.element, 'title', providersBackstage.translate(err));\n                });\n              }\n            },\n            validator: {\n              validate: input => {\n                const urlEntry = Representing.getValue(input);\n                return FutureResult.nu(completer => {\n                  handler({\n                    type: spec.filetype,\n                    url: urlEntry.value\n                  }, validation => {\n                    if (validation.status === 'invalid') {\n                      const err = Result.error(validation.message);\n                      completer(err);\n                    } else {\n                      const val = Result.value(validation.message);\n                      completer(val);\n                    }\n                  });\n                });\n              },\n              validateOnLoad: false\n            }\n          })).toArray(),\n          Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() }),\n          Tabstopping.config({}),\n          config('urlinput-events', [\n            run$1(input(), comp => {\n              const currentValue = get$6(comp.element);\n              const trimmedValue = currentValue.trim();\n              if (trimmedValue !== currentValue) {\n                set$5(comp.element, trimmedValue);\n              }\n              if (spec.filetype === 'file') {\n                emitWith(comp, formChangeEvent, { name: spec.name });\n              }\n            }),\n            run$1(change(), comp => {\n              emitWith(comp, formChangeEvent, { name: spec.name });\n              updateHistory(comp);\n            }),\n            run$1(postPaste(), comp => {\n              emitWith(comp, formChangeEvent, { name: spec.name });\n              updateHistory(comp);\n            })\n          ])\n        ]),\n        eventOrder: {\n          [input()]: [\n            'streaming',\n            'urlinput-events',\n            'invalidating'\n          ]\n        },\n        model: {\n          getDisplayText: itemData => itemData.value,\n          selectsOver: false,\n          populateFromBrowse: false\n        },\n        markers: { openClass: 'tox-textfield--popup-open' },\n        lazySink: backstage.shared.getSink,\n        parts: { menu: part(false, 1, 'normal') },\n        onExecute: (_menu, component, _entry) => {\n          emitWith(component, formSubmitEvent, {});\n        },\n        onItemExecute: (typeahead, _sandbox, _item, _value) => {\n          updateHistory(typeahead);\n          emitWith(typeahead, formChangeEvent, { name: spec.name });\n        }\n      };\n      const pField = FormField.parts.field({\n        ...typeaheadSpec,\n        factory: Typeahead\n      });\n      const pLabel = spec.label.map(label => renderLabel$2(label, providersBackstage));\n      const makeIcon = (name, errId, icon = name, label = name) => render$3(icon, {\n        tag: 'div',\n        classes: [\n          'tox-icon',\n          'tox-control-wrap__status-icon-' + name\n        ],\n        attributes: {\n          'title': providersBackstage.translate(label),\n          'aria-live': 'polite',\n          ...errId.fold(() => ({}), id => ({ id }))\n        }\n      }, providersBackstage.icons);\n      const memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning'));\n      const memStatus = record({\n        dom: {\n          tag: 'div',\n          classes: ['tox-control-wrap__status-icon-wrap']\n        },\n        components: [memInvalidIcon.asSpec()]\n      });\n      const optUrlPicker = urlBackstage.getUrlPicker(spec.filetype);\n      const browseUrlEvent = generate$6('browser.url.event');\n      const memUrlBox = record({\n        dom: {\n          tag: 'div',\n          classes: ['tox-control-wrap']\n        },\n        components: [\n          pField,\n          memStatus.asSpec()\n        ],\n        behaviours: derive$1([Disabling.config({ disabled: () => !spec.enabled || providersBackstage.isDisabled() })])\n      });\n      const memUrlPickerButton = record(renderButton({\n        name: spec.name,\n        icon: Optional.some('browse'),\n        text: spec.label.getOr(''),\n        enabled: spec.enabled,\n        primary: false,\n        buttonType: Optional.none(),\n        borderless: true\n      }, component => emit(component, browseUrlEvent), providersBackstage, [], ['tox-browse-url']));\n      const controlHWrapper = () => ({\n        dom: {\n          tag: 'div',\n          classes: ['tox-form__controls-h-stack']\n        },\n        components: flatten([\n          [memUrlBox.asSpec()],\n          optUrlPicker.map(() => memUrlPickerButton.asSpec()).toArray()\n        ])\n      });\n      const openUrlPicker = comp => {\n        Composing.getCurrent(comp).each(field => {\n          const componentData = Representing.getValue(field);\n          const urlData = {\n            fieldname: spec.name,\n            ...componentData\n          };\n          optUrlPicker.each(picker => {\n            picker(urlData).get(chosenData => {\n              Representing.setValue(field, chosenData);\n              emitWith(comp, formChangeEvent, { name: spec.name });\n            });\n          });\n        });\n      };\n      return FormField.sketch({\n        dom: renderFormFieldDom(),\n        components: pLabel.toArray().concat([controlHWrapper()]),\n        fieldBehaviours: derive$1([\n          Disabling.config({\n            disabled: () => !spec.enabled || providersBackstage.isDisabled(),\n            onDisabled: comp => {\n              FormField.getField(comp).each(Disabling.disable);\n              memUrlPickerButton.getOpt(comp).each(Disabling.disable);\n            },\n            onEnabled: comp => {\n              FormField.getField(comp).each(Disabling.enable);\n              memUrlPickerButton.getOpt(comp).each(Disabling.enable);\n            }\n          }),\n          receivingConfig(),\n          config('url-input-events', [run$1(browseUrlEvent, openUrlPicker)])\n        ])\n      });\n    };\n\n    const renderAlertBanner = (spec, providersBackstage) => Container.sketch({\n      dom: {\n        tag: 'div',\n        attributes: { role: 'alert' },\n        classes: [\n          'tox-notification',\n          'tox-notification--in',\n          `tox-notification--${ spec.level }`\n        ]\n      },\n      components: [\n        {\n          dom: {\n            tag: 'div',\n            classes: ['tox-notification__icon']\n          },\n          components: [Button.sketch({\n              dom: {\n                tag: 'button',\n                classes: [\n                  'tox-button',\n                  'tox-button--naked',\n                  'tox-button--icon'\n                ],\n                innerHtml: get$2(spec.icon, providersBackstage.icons),\n                attributes: { title: providersBackstage.translate(spec.iconTooltip) }\n              },\n              action: comp => {\n                emitWith(comp, formActionEvent, {\n                  name: 'alert-banner',\n                  value: spec.url\n                });\n              },\n              buttonBehaviours: derive$1([addFocusableBehaviour()])\n            })]\n        },\n        {\n          dom: {\n            tag: 'div',\n            classes: ['tox-notification__body'],\n            innerHtml: providersBackstage.translate(spec.text)\n          }\n        }\n      ]\n    });\n\n    const set$1 = (element, status) => {\n      element.dom.checked = status;\n    };\n    const get$1 = element => element.dom.checked;\n\n    const renderCheckbox = (spec, providerBackstage, initialData) => {\n      const toggleCheckboxHandler = comp => {\n        comp.element.dom.click();\n        return Optional.some(true);\n      };\n      const pField = FormField.parts.field({\n        factory: { sketch: identity },\n        dom: {\n          tag: 'input',\n          classes: ['tox-checkbox__input'],\n          attributes: { type: 'checkbox' }\n        },\n        behaviours: derive$1([\n          ComposingConfigs.self(),\n          Disabling.config({ disabled: () => !spec.enabled || providerBackstage.isDisabled() }),\n          Tabstopping.config({}),\n          Focusing.config({}),\n          RepresentingConfigs.withElement(initialData, get$1, set$1),\n          Keying.config({\n            mode: 'special',\n            onEnter: toggleCheckboxHandler,\n            onSpace: toggleCheckboxHandler,\n            stopSpaceKeyup: true\n          }),\n          config('checkbox-events', [run$1(change(), (component, _) => {\n              emitWith(component, formChangeEvent, { name: spec.name });\n            })])\n        ])\n      });\n      const pLabel = FormField.parts.label({\n        dom: {\n          tag: 'span',\n          classes: ['tox-checkbox__label']\n        },\n        components: [text$1(providerBackstage.translate(spec.label))],\n        behaviours: derive$1([Unselecting.config({})])\n      });\n      const makeIcon = className => {\n        const iconName = className === 'checked' ? 'selected' : 'unselected';\n        return render$3(iconName, {\n          tag: 'span',\n          classes: [\n            'tox-icon',\n            'tox-checkbox-icon__' + className\n          ]\n        }, providerBackstage.icons);\n      };\n      const memIcons = record({\n        dom: {\n          tag: 'div',\n          classes: ['tox-checkbox__icons']\n        },\n        components: [\n          makeIcon('checked'),\n          makeIcon('unchecked')\n        ]\n      });\n      return FormField.sketch({\n        dom: {\n          tag: 'label',\n          classes: ['tox-checkbox']\n        },\n        components: [\n          pField,\n          memIcons.asSpec(),\n          pLabel\n        ],\n        fieldBehaviours: derive$1([\n          Disabling.config({\n            disabled: () => !spec.enabled || providerBackstage.isDisabled(),\n            disableClass: 'tox-checkbox--disabled',\n            onDisabled: comp => {\n              FormField.getField(comp).each(Disabling.disable);\n            },\n            onEnabled: comp => {\n              FormField.getField(comp).each(Disabling.enable);\n            }\n          }),\n          receivingConfig()\n        ])\n      });\n    };\n\n    const renderHtmlPanel = spec => {\n      if (spec.presets === 'presentation') {\n        return Container.sketch({\n          dom: {\n            tag: 'div',\n            classes: ['tox-form__group'],\n            innerHtml: spec.html\n          }\n        });\n      } else {\n        return Container.sketch({\n          dom: {\n            tag: 'div',\n            classes: ['tox-form__group'],\n            innerHtml: spec.html,\n            attributes: { role: 'document' }\n          },\n          containerBehaviours: derive$1([\n            Tabstopping.config({}),\n            Focusing.config({})\n          ])\n        });\n      }\n    };\n\n    const make$2 = render => {\n      return (parts, spec, dialogData, backstage) => get$g(spec, 'name').fold(() => render(spec, backstage, Optional.none()), fieldName => parts.field(fieldName, render(spec, backstage, get$g(dialogData, fieldName))));\n    };\n    const makeIframe = render => (parts, spec, dialogData, backstage) => {\n      const iframeSpec = deepMerge(spec, { source: 'dynamic' });\n      return make$2(render)(parts, iframeSpec, dialogData, backstage);\n    };\n    const factories = {\n      bar: make$2((spec, backstage) => renderBar(spec, backstage.shared)),\n      collection: make$2((spec, backstage, data) => renderCollection(spec, backstage.shared.providers, data)),\n      alertbanner: make$2((spec, backstage) => renderAlertBanner(spec, backstage.shared.providers)),\n      input: make$2((spec, backstage, data) => renderInput(spec, backstage.shared.providers, data)),\n      textarea: make$2((spec, backstage, data) => renderTextarea(spec, backstage.shared.providers, data)),\n      label: make$2((spec, backstage) => renderLabel$1(spec, backstage.shared)),\n      iframe: makeIframe((spec, backstage, data) => renderIFrame(spec, backstage.shared.providers, data)),\n      button: make$2((spec, backstage) => renderDialogButton(spec, backstage.shared.providers)),\n      checkbox: make$2((spec, backstage, data) => renderCheckbox(spec, backstage.shared.providers, data)),\n      colorinput: make$2((spec, backstage, data) => renderColorInput(spec, backstage.shared, backstage.colorinput, data)),\n      colorpicker: make$2((spec, backstage, data) => renderColorPicker(spec, backstage.shared.providers, data)),\n      dropzone: make$2((spec, backstage, data) => renderDropZone(spec, backstage.shared.providers, data)),\n      grid: make$2((spec, backstage) => renderGrid(spec, backstage.shared)),\n      listbox: make$2((spec, backstage, data) => renderListBox(spec, backstage, data)),\n      selectbox: make$2((spec, backstage, data) => renderSelectBox(spec, backstage.shared.providers, data)),\n      sizeinput: make$2((spec, backstage) => renderSizeInput(spec, backstage.shared.providers)),\n      slider: make$2((spec, backstage, data) => renderSlider(spec, backstage.shared.providers, data)),\n      urlinput: make$2((spec, backstage, data) => renderUrlInput(spec, backstage, backstage.urlinput, data)),\n      customeditor: make$2(renderCustomEditor),\n      htmlpanel: make$2(renderHtmlPanel),\n      imagepreview: make$2((spec, _, data) => renderImagePreview(spec, data)),\n      table: make$2((spec, backstage) => renderTable(spec, backstage.shared.providers)),\n      panel: make$2((spec, backstage) => renderPanel(spec, backstage))\n    };\n    const noFormParts = {\n      field: (_name, spec) => spec,\n      record: constant$1([])\n    };\n    const interpretInForm = (parts, spec, dialogData, oldBackstage) => {\n      const newBackstage = deepMerge(oldBackstage, { shared: { interpreter: childSpec => interpretParts(parts, childSpec, dialogData, newBackstage) } });\n      return interpretParts(parts, spec, dialogData, newBackstage);\n    };\n    const interpretParts = (parts, spec, dialogData, backstage) => get$g(factories, spec.type).fold(() => {\n      console.error(`Unknown factory type \"${ spec.type }\", defaulting to container: `, spec);\n      return spec;\n    }, factory => factory(parts, spec, dialogData, backstage));\n    const interpretWithoutForm = (spec, dialogData, backstage) => interpretParts(noFormParts, spec, dialogData, backstage);\n\n    const labelPrefix = 'layout-inset';\n    const westEdgeX = anchor => anchor.x;\n    const middleX = (anchor, element) => anchor.x + anchor.width / 2 - element.width / 2;\n    const eastEdgeX = (anchor, element) => anchor.x + anchor.width - element.width;\n    const northY = anchor => anchor.y;\n    const southY = (anchor, element) => anchor.y + anchor.height - element.height;\n    const centreY = (anchor, element) => anchor.y + anchor.height / 2 - element.height / 2;\n    const southwest = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), southY(anchor, element), bubbles.insetSouthwest(), northwest$3(), 'southwest', boundsRestriction(anchor, {\n      right: 0,\n      bottom: 3\n    }), labelPrefix);\n    const southeast = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), southY(anchor, element), bubbles.insetSoutheast(), northeast$3(), 'southeast', boundsRestriction(anchor, {\n      left: 1,\n      bottom: 3\n    }), labelPrefix);\n    const northwest = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), northY(anchor), bubbles.insetNorthwest(), southwest$3(), 'northwest', boundsRestriction(anchor, {\n      right: 0,\n      top: 2\n    }), labelPrefix);\n    const northeast = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), northY(anchor), bubbles.insetNortheast(), southeast$3(), 'northeast', boundsRestriction(anchor, {\n      left: 1,\n      top: 2\n    }), labelPrefix);\n    const north = (anchor, element, bubbles) => nu$6(middleX(anchor, element), northY(anchor), bubbles.insetNorth(), south$3(), 'north', boundsRestriction(anchor, { top: 2 }), labelPrefix);\n    const south = (anchor, element, bubbles) => nu$6(middleX(anchor, element), southY(anchor, element), bubbles.insetSouth(), north$3(), 'south', boundsRestriction(anchor, { bottom: 3 }), labelPrefix);\n    const east = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), centreY(anchor, element), bubbles.insetEast(), west$3(), 'east', boundsRestriction(anchor, { right: 0 }), labelPrefix);\n    const west = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), centreY(anchor, element), bubbles.insetWest(), east$3(), 'west', boundsRestriction(anchor, { left: 1 }), labelPrefix);\n    const lookupPreserveLayout = lastPlacement => {\n      switch (lastPlacement) {\n      case 'north':\n        return north;\n      case 'northeast':\n        return northeast;\n      case 'northwest':\n        return northwest;\n      case 'south':\n        return south;\n      case 'southeast':\n        return southeast;\n      case 'southwest':\n        return southwest;\n      case 'east':\n        return east;\n      case 'west':\n        return west;\n      }\n    };\n    const preserve = (anchor, element, bubbles, placee, bounds) => {\n      const layout = getPlacement(placee).map(lookupPreserveLayout).getOr(north);\n      return layout(anchor, element, bubbles, placee, bounds);\n    };\n    const lookupFlippedLayout = lastPlacement => {\n      switch (lastPlacement) {\n      case 'north':\n        return south;\n      case 'northeast':\n        return southeast;\n      case 'northwest':\n        return southwest;\n      case 'south':\n        return north;\n      case 'southeast':\n        return northeast;\n      case 'southwest':\n        return northwest;\n      case 'east':\n        return west;\n      case 'west':\n        return east;\n      }\n    };\n    const flip = (anchor, element, bubbles, placee, bounds) => {\n      const layout = getPlacement(placee).map(lookupFlippedLayout).getOr(north);\n      return layout(anchor, element, bubbles, placee, bounds);\n    };\n\n    const bubbleAlignments$2 = {\n      valignCentre: [],\n      alignCentre: [],\n      alignLeft: [],\n      alignRight: [],\n      right: [],\n      left: [],\n      bottom: [],\n      top: []\n    };\n    const getInlineDialogAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => {\n      const bubbleSize = 12;\n      const overrides = { maxHeightFunction: expandable$1() };\n      const editableAreaAnchor = () => ({\n        type: 'node',\n        root: getContentContainer(getRootNode(contentAreaElement())),\n        node: Optional.from(contentAreaElement()),\n        bubble: nu$5(bubbleSize, bubbleSize, bubbleAlignments$2),\n        layouts: {\n          onRtl: () => [northeast],\n          onLtr: () => [northwest]\n        },\n        overrides\n      });\n      const standardAnchor = () => ({\n        type: 'hotspot',\n        hotspot: lazyAnchorbar(),\n        bubble: nu$5(-bubbleSize, bubbleSize, bubbleAlignments$2),\n        layouts: {\n          onRtl: () => [southeast$2],\n          onLtr: () => [southwest$2]\n        },\n        overrides\n      });\n      return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n    };\n    const getBannerAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => {\n      const editableAreaAnchor = () => ({\n        type: 'node',\n        root: getContentContainer(getRootNode(contentAreaElement())),\n        node: Optional.from(contentAreaElement()),\n        layouts: {\n          onRtl: () => [north],\n          onLtr: () => [north]\n        }\n      });\n      const standardAnchor = () => ({\n        type: 'hotspot',\n        hotspot: lazyAnchorbar(),\n        layouts: {\n          onRtl: () => [south$2],\n          onLtr: () => [south$2]\n        }\n      });\n      return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n    };\n    const getCursorAnchor = (editor, bodyElement) => () => ({\n      type: 'selection',\n      root: bodyElement(),\n      getSelection: () => {\n        const rng = editor.selection.getRng();\n        return Optional.some(SimSelection.range(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n      }\n    });\n    const getNodeAnchor$1 = bodyElement => element => ({\n      type: 'node',\n      root: bodyElement(),\n      node: element\n    });\n    const getAnchors = (editor, lazyAnchorbar, isToolbarTop) => {\n      const useFixedToolbarContainer = useFixedContainer(editor);\n      const bodyElement = () => SugarElement.fromDom(editor.getBody());\n      const contentAreaElement = () => SugarElement.fromDom(editor.getContentAreaContainer());\n      const lazyUseEditableAreaAnchor = () => useFixedToolbarContainer || !isToolbarTop();\n      return {\n        inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n        banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n        cursor: getCursorAnchor(editor, bodyElement),\n        node: getNodeAnchor$1(bodyElement)\n      };\n    };\n\n    const colorPicker = editor => (callback, value) => {\n      const dialog = colorPickerDialog(editor);\n      dialog(callback, value);\n    };\n    const hasCustomColors = editor => () => hasCustomColors$1(editor);\n    const getColors = editor => () => getColors$2(editor);\n    const getColorCols = editor => () => getColorCols$1(editor);\n    const ColorInputBackstage = editor => ({\n      colorPicker: colorPicker(editor),\n      hasCustomColors: hasCustomColors(editor),\n      getColors: getColors(editor),\n      getColorCols: getColorCols(editor)\n    });\n\n    const isDraggableModal = editor => () => isDraggableModal$1(editor);\n    const DialogBackstage = editor => ({ isDraggableModal: isDraggableModal(editor) });\n\n    const HeaderBackstage = editor => {\n      const mode = Cell(isToolbarLocationBottom(editor) ? 'bottom' : 'top');\n      return {\n        isPositionedAtTop: () => mode.get() === 'top',\n        getDockingMode: mode.get,\n        setDockingMode: mode.set\n      };\n    };\n\n    const isNestedFormat = format => hasNonNullableKey(format, 'items');\n    const isFormatReference = format => hasNonNullableKey(format, 'format');\n    const defaultStyleFormats = [\n      {\n        title: 'Headings',\n        items: [\n          {\n            title: 'Heading 1',\n            format: 'h1'\n          },\n          {\n            title: 'Heading 2',\n            format: 'h2'\n          },\n          {\n            title: 'Heading 3',\n            format: 'h3'\n          },\n          {\n            title: 'Heading 4',\n            format: 'h4'\n          },\n          {\n            title: 'Heading 5',\n            format: 'h5'\n          },\n          {\n            title: 'Heading 6',\n            format: 'h6'\n          }\n        ]\n      },\n      {\n        title: 'Inline',\n        items: [\n          {\n            title: 'Bold',\n            format: 'bold'\n          },\n          {\n            title: 'Italic',\n            format: 'italic'\n          },\n          {\n            title: 'Underline',\n            format: 'underline'\n          },\n          {\n            title: 'Strikethrough',\n            format: 'strikethrough'\n          },\n          {\n            title: 'Superscript',\n            format: 'superscript'\n          },\n          {\n            title: 'Subscript',\n            format: 'subscript'\n          },\n          {\n            title: 'Code',\n            format: 'code'\n          }\n        ]\n      },\n      {\n        title: 'Blocks',\n        items: [\n          {\n            title: 'Paragraph',\n            format: 'p'\n          },\n          {\n            title: 'Blockquote',\n            format: 'blockquote'\n          },\n          {\n            title: 'Div',\n            format: 'div'\n          },\n          {\n            title: 'Pre',\n            format: 'pre'\n          }\n        ]\n      },\n      {\n        title: 'Align',\n        items: [\n          {\n            title: 'Left',\n            format: 'alignleft'\n          },\n          {\n            title: 'Center',\n            format: 'aligncenter'\n          },\n          {\n            title: 'Right',\n            format: 'alignright'\n          },\n          {\n            title: 'Justify',\n            format: 'alignjustify'\n          }\n        ]\n      }\n    ];\n    const isNestedFormats = format => has$2(format, 'items');\n    const isBlockFormat = format => has$2(format, 'block');\n    const isInlineFormat = format => has$2(format, 'inline');\n    const isSelectorFormat = format => has$2(format, 'selector');\n    const mapFormats = userFormats => foldl(userFormats, (acc, fmt) => {\n      if (isNestedFormats(fmt)) {\n        const result = mapFormats(fmt.items);\n        return {\n          customFormats: acc.customFormats.concat(result.customFormats),\n          formats: acc.formats.concat([{\n              title: fmt.title,\n              items: result.formats\n            }])\n        };\n      } else if (isInlineFormat(fmt) || isBlockFormat(fmt) || isSelectorFormat(fmt)) {\n        const formatName = isString(fmt.name) ? fmt.name : fmt.title.toLowerCase();\n        const formatNameWithPrefix = `custom-${ formatName }`;\n        return {\n          customFormats: acc.customFormats.concat([{\n              name: formatNameWithPrefix,\n              format: fmt\n            }]),\n          formats: acc.formats.concat([{\n              title: fmt.title,\n              format: formatNameWithPrefix,\n              icon: fmt.icon\n            }])\n        };\n      } else {\n        return {\n          ...acc,\n          formats: acc.formats.concat(fmt)\n        };\n      }\n    }, {\n      customFormats: [],\n      formats: []\n    });\n    const registerCustomFormats = (editor, userFormats) => {\n      const result = mapFormats(userFormats);\n      const registerFormats = customFormats => {\n        each$1(customFormats, fmt => {\n          if (!editor.formatter.has(fmt.name)) {\n            editor.formatter.register(fmt.name, fmt.format);\n          }\n        });\n      };\n      if (editor.formatter) {\n        registerFormats(result.customFormats);\n      } else {\n        editor.on('init', () => {\n          registerFormats(result.customFormats);\n        });\n      }\n      return result.formats;\n    };\n    const getStyleFormats = editor => getUserStyleFormats(editor).map(userFormats => {\n      const registeredUserFormats = registerCustomFormats(editor, userFormats);\n      return shouldMergeStyleFormats(editor) ? defaultStyleFormats.concat(registeredUserFormats) : registeredUserFormats;\n    }).getOr(defaultStyleFormats);\n\n    const isSeparator$1 = format => {\n      const keys$1 = keys(format);\n      return keys$1.length === 1 && contains$2(keys$1, 'title');\n    };\n    const processBasic = (item, isSelectedFor, getPreviewFor) => ({\n      ...item,\n      type: 'formatter',\n      isSelected: isSelectedFor(item.format),\n      getStylePreview: getPreviewFor(item.format)\n    });\n    const register$a = (editor, formats, isSelectedFor, getPreviewFor) => {\n      const enrichSupported = item => processBasic(item, isSelectedFor, getPreviewFor);\n      const enrichMenu = item => {\n        const newItems = doEnrich(item.items);\n        return {\n          ...item,\n          type: 'submenu',\n          getStyleItems: constant$1(newItems)\n        };\n      };\n      const enrichCustom = item => {\n        const formatName = isString(item.name) ? item.name : generate$6(item.title);\n        const formatNameWithPrefix = `custom-${ formatName }`;\n        const newItem = {\n          ...item,\n          type: 'formatter',\n          format: formatNameWithPrefix,\n          isSelected: isSelectedFor(formatNameWithPrefix),\n          getStylePreview: getPreviewFor(formatNameWithPrefix)\n        };\n        editor.formatter.register(formatName, newItem);\n        return newItem;\n      };\n      const doEnrich = items => map$2(items, item => {\n        if (isNestedFormat(item)) {\n          return enrichMenu(item);\n        } else if (isFormatReference(item)) {\n          return enrichSupported(item);\n        } else if (isSeparator$1(item)) {\n          return {\n            ...item,\n            type: 'separator'\n          };\n        } else {\n          return enrichCustom(item);\n        }\n      });\n      return doEnrich(formats);\n    };\n\n    const init$8 = editor => {\n      const isSelectedFor = format => () => editor.formatter.match(format);\n      const getPreviewFor = format => () => {\n        const fmt = editor.formatter.get(format);\n        return fmt !== undefined ? Optional.some({\n          tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n          styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n        }) : Optional.none();\n      };\n      const settingsFormats = Cell([]);\n      const eventsFormats = Cell([]);\n      const replaceSettings = Cell(false);\n      editor.on('PreInit', _e => {\n        const formats = getStyleFormats(editor);\n        const enriched = register$a(editor, formats, isSelectedFor, getPreviewFor);\n        settingsFormats.set(enriched);\n      });\n      editor.on('addStyleModifications', e => {\n        const modifications = register$a(editor, e.items, isSelectedFor, getPreviewFor);\n        eventsFormats.set(modifications);\n        replaceSettings.set(e.replace);\n      });\n      const getData = () => {\n        const fromSettings = replaceSettings.get() ? [] : settingsFormats.get();\n        const fromEvents = eventsFormats.get();\n        return fromSettings.concat(fromEvents);\n      };\n      return { getData };\n    };\n\n    const isElement = node => isNonNullable(node) && node.nodeType === 1;\n    const trim = global$1.trim;\n    const hasContentEditableState = value => {\n      return node => {\n        if (isElement(node)) {\n          if (node.contentEditable === value) {\n            return true;\n          }\n          if (node.getAttribute('data-mce-contenteditable') === value) {\n            return true;\n          }\n        }\n        return false;\n      };\n    };\n    const isContentEditableTrue = hasContentEditableState('true');\n    const isContentEditableFalse = hasContentEditableState('false');\n    const create = (type, title, url, level, attach) => ({\n      type,\n      title,\n      url,\n      level,\n      attach\n    });\n    const isChildOfContentEditableTrue = node => {\n      let tempNode = node;\n      while (tempNode = tempNode.parentNode) {\n        const value = tempNode.contentEditable;\n        if (value && value !== 'inherit') {\n          return isContentEditableTrue(tempNode);\n        }\n      }\n      return false;\n    };\n    const select = (selector, root) => {\n      return map$2(descendants(SugarElement.fromDom(root), selector), element => {\n        return element.dom;\n      });\n    };\n    const getElementText = elm => {\n      return elm.innerText || elm.textContent;\n    };\n    const getOrGenerateId = elm => {\n      return elm.id ? elm.id : generate$6('h');\n    };\n    const isAnchor = elm => {\n      return elm && elm.nodeName === 'A' && (elm.id || elm.name) !== undefined;\n    };\n    const isValidAnchor = elm => {\n      return isAnchor(elm) && isEditable(elm);\n    };\n    const isHeader = elm => {\n      return elm && /^(H[1-6])$/.test(elm.nodeName);\n    };\n    const isEditable = elm => {\n      return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n    };\n    const isValidHeader = elm => {\n      return isHeader(elm) && isEditable(elm);\n    };\n    const getLevel = elm => {\n      return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n    };\n    const headerTarget = elm => {\n      var _a;\n      const headerId = getOrGenerateId(elm);\n      const attach = () => {\n        elm.id = headerId;\n      };\n      return create('header', (_a = getElementText(elm)) !== null && _a !== void 0 ? _a : '', '#' + headerId, getLevel(elm), attach);\n    };\n    const anchorTarget = elm => {\n      const anchorId = elm.id || elm.name;\n      const anchorText = getElementText(elm);\n      return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n    };\n    const getHeaderTargets = elms => {\n      return map$2(filter$2(elms, isValidHeader), headerTarget);\n    };\n    const getAnchorTargets = elms => {\n      return map$2(filter$2(elms, isValidAnchor), anchorTarget);\n    };\n    const getTargetElements = elm => {\n      const elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\n      return elms;\n    };\n    const hasTitle = target => {\n      return trim(target.title).length > 0;\n    };\n    const find = elm => {\n      const elms = getTargetElements(elm);\n      return filter$2(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n    };\n    const LinkTargets = { find };\n\n    const STORAGE_KEY = 'tinymce-url-history';\n    const HISTORY_LENGTH = 5;\n    const isHttpUrl = url => isString(url) && /^https?/.test(url);\n    const isArrayOfUrl = a => isArray(a) && a.length <= HISTORY_LENGTH && forall(a, isHttpUrl);\n    const isRecordOfUrlArray = r => isObject(r) && find$4(r, value => !isArrayOfUrl(value)).isNone();\n    const getAllHistory = () => {\n      const unparsedHistory = global$4.getItem(STORAGE_KEY);\n      if (unparsedHistory === null) {\n        return {};\n      }\n      let history;\n      try {\n        history = JSON.parse(unparsedHistory);\n      } catch (e) {\n        if (e instanceof SyntaxError) {\n          console.log('Local storage ' + STORAGE_KEY + ' was not valid JSON', e);\n          return {};\n        }\n        throw e;\n      }\n      if (!isRecordOfUrlArray(history)) {\n        console.log('Local storage ' + STORAGE_KEY + ' was not valid format', history);\n        return {};\n      }\n      return history;\n    };\n    const setAllHistory = history => {\n      if (!isRecordOfUrlArray(history)) {\n        throw new Error('Bad format for history:\\n' + JSON.stringify(history));\n      }\n      global$4.setItem(STORAGE_KEY, JSON.stringify(history));\n    };\n    const getHistory = fileType => {\n      const history = getAllHistory();\n      return get$g(history, fileType).getOr([]);\n    };\n    const addToHistory = (url, fileType) => {\n      if (!isHttpUrl(url)) {\n        return;\n      }\n      const history = getAllHistory();\n      const items = get$g(history, fileType).getOr([]);\n      const itemsWithoutUrl = filter$2(items, item => item !== url);\n      history[fileType] = [url].concat(itemsWithoutUrl).slice(0, HISTORY_LENGTH);\n      setAllHistory(history);\n    };\n\n    const isTruthy = value => !!value;\n    const makeMap = value => map$1(global$1.makeMap(value, /[, ]/), isTruthy);\n    const getPicker = editor => Optional.from(getFilePickerCallback(editor));\n    const getPickerTypes = editor => {\n      const optFileTypes = Optional.from(getFilePickerTypes(editor)).filter(isTruthy).map(makeMap);\n      return getPicker(editor).fold(never, _picker => optFileTypes.fold(always, types => keys(types).length > 0 ? types : false));\n    };\n    const getPickerSetting = (editor, filetype) => {\n      const pickerTypes = getPickerTypes(editor);\n      if (isBoolean(pickerTypes)) {\n        return pickerTypes ? getPicker(editor) : Optional.none();\n      } else {\n        return pickerTypes[filetype] ? getPicker(editor) : Optional.none();\n      }\n    };\n    const getUrlPicker = (editor, filetype) => getPickerSetting(editor, filetype).map(picker => entry => Future.nu(completer => {\n      const handler = (value, meta) => {\n        if (!isString(value)) {\n          throw new Error('Expected value to be string');\n        }\n        if (meta !== undefined && !isObject(meta)) {\n          throw new Error('Expected meta to be a object');\n        }\n        const r = {\n          value,\n          meta\n        };\n        completer(r);\n      };\n      const meta = {\n        filetype,\n        fieldname: entry.fieldname,\n        ...Optional.from(entry.meta).getOr({})\n      };\n      picker.call(editor, handler, entry.value, meta);\n    }));\n    const getTextSetting = value => Optional.from(value).filter(isString).getOrUndefined();\n    const getLinkInformation = editor => {\n      if (!useTypeaheadUrls(editor)) {\n        return Optional.none();\n      }\n      return Optional.some({\n        targets: LinkTargets.find(editor.getBody()),\n        anchorTop: getTextSetting(getAnchorTop(editor)),\n        anchorBottom: getTextSetting(getAnchorBottom(editor))\n      });\n    };\n    const getValidationHandler = editor => Optional.from(getFilePickerValidatorHandler(editor));\n    const UrlInputBackstage = editor => ({\n      getHistory,\n      addToHistory,\n      getLinkInformation: () => getLinkInformation(editor),\n      getValidationHandler: () => getValidationHandler(editor),\n      getUrlPicker: filetype => getUrlPicker(editor, filetype)\n    });\n\n    const init$7 = (lazySink, editor, lazyAnchorbar) => {\n      const contextMenuState = Cell(false);\n      const toolbar = HeaderBackstage(editor);\n      const backstage = {\n        shared: {\n          providers: {\n            icons: () => editor.ui.registry.getAll().icons,\n            menuItems: () => editor.ui.registry.getAll().menuItems,\n            translate: global$8.translate,\n            isDisabled: () => editor.mode.isReadOnly() || !editor.ui.isEnabled(),\n            getOption: editor.options.get\n          },\n          interpreter: s => interpretWithoutForm(s, {}, backstage),\n          anchors: getAnchors(editor, lazyAnchorbar, toolbar.isPositionedAtTop),\n          header: toolbar,\n          getSink: lazySink\n        },\n        urlinput: UrlInputBackstage(editor),\n        styles: init$8(editor),\n        colorinput: ColorInputBackstage(editor),\n        dialog: DialogBackstage(editor),\n        isContextMenuOpen: () => contextMenuState.get(),\n        setContextMenuState: state => contextMenuState.set(state)\n      };\n      return backstage;\n    };\n\n    const setup$b = (editor, mothership, uiMothership) => {\n      const broadcastEvent = (name, evt) => {\n        each$1([\n          mothership,\n          uiMothership\n        ], ship => {\n          ship.broadcastEvent(name, evt);\n        });\n      };\n      const broadcastOn = (channel, message) => {\n        each$1([\n          mothership,\n          uiMothership\n        ], ship => {\n          ship.broadcastOn([channel], message);\n        });\n      };\n      const fireDismissPopups = evt => broadcastOn(dismissPopups(), { target: evt.target });\n      const doc = getDocument();\n      const onTouchstart = bind(doc, 'touchstart', fireDismissPopups);\n      const onTouchmove = bind(doc, 'touchmove', evt => broadcastEvent(documentTouchmove(), evt));\n      const onTouchend = bind(doc, 'touchend', evt => broadcastEvent(documentTouchend(), evt));\n      const onMousedown = bind(doc, 'mousedown', fireDismissPopups);\n      const onMouseup = bind(doc, 'mouseup', evt => {\n        if (evt.raw.button === 0) {\n          broadcastOn(mouseReleased(), { target: evt.target });\n        }\n      });\n      const onContentClick = raw => broadcastOn(dismissPopups(), { target: SugarElement.fromDom(raw.target) });\n      const onContentMouseup = raw => {\n        if (raw.button === 0) {\n          broadcastOn(mouseReleased(), { target: SugarElement.fromDom(raw.target) });\n        }\n      };\n      const onContentMousedown = () => {\n        each$1(editor.editorManager.get(), loopEditor => {\n          if (editor !== loopEditor) {\n            loopEditor.dispatch('DismissPopups', { relatedTarget: editor });\n          }\n        });\n      };\n      const onWindowScroll = evt => broadcastEvent(windowScroll(), fromRawEvent(evt));\n      const onWindowResize = evt => {\n        broadcastOn(repositionPopups(), {});\n        broadcastEvent(windowResize(), fromRawEvent(evt));\n      };\n      const onEditorResize = () => broadcastOn(repositionPopups(), {});\n      const onEditorProgress = evt => {\n        if (evt.state) {\n          broadcastOn(dismissPopups(), { target: SugarElement.fromDom(editor.getContainer()) });\n        }\n      };\n      const onDismissPopups = event => {\n        broadcastOn(dismissPopups(), { target: SugarElement.fromDom(event.relatedTarget.getContainer()) });\n      };\n      editor.on('PostRender', () => {\n        editor.on('click', onContentClick);\n        editor.on('tap', onContentClick);\n        editor.on('mouseup', onContentMouseup);\n        editor.on('mousedown', onContentMousedown);\n        editor.on('ScrollWindow', onWindowScroll);\n        editor.on('ResizeWindow', onWindowResize);\n        editor.on('ResizeEditor', onEditorResize);\n        editor.on('AfterProgressState', onEditorProgress);\n        editor.on('DismissPopups', onDismissPopups);\n      });\n      editor.on('remove', () => {\n        editor.off('click', onContentClick);\n        editor.off('tap', onContentClick);\n        editor.off('mouseup', onContentMouseup);\n        editor.off('mousedown', onContentMousedown);\n        editor.off('ScrollWindow', onWindowScroll);\n        editor.off('ResizeWindow', onWindowResize);\n        editor.off('ResizeEditor', onEditorResize);\n        editor.off('AfterProgressState', onEditorProgress);\n        editor.off('DismissPopups', onDismissPopups);\n        onMousedown.unbind();\n        onTouchstart.unbind();\n        onTouchmove.unbind();\n        onTouchend.unbind();\n        onMouseup.unbind();\n      });\n      editor.on('detach', () => {\n        detachSystem(mothership);\n        detachSystem(uiMothership);\n        mothership.destroy();\n        uiMothership.destroy();\n      });\n    };\n\n    const parts$a = AlloyParts;\n    const partType = PartType;\n\n    const schema$f = constant$1([\n      defaulted('shell', false),\n      required$1('makeItem'),\n      defaulted('setupItem', noop),\n      SketchBehaviours.field('listBehaviours', [Replacing])\n    ]);\n    const customListDetail = () => ({ behaviours: derive$1([Replacing.config({})]) });\n    const itemsPart = optional({\n      name: 'items',\n      overrides: customListDetail\n    });\n    const parts$9 = constant$1([itemsPart]);\n    const name = constant$1('CustomList');\n\n    const factory$d = (detail, components, _spec, _external) => {\n      const setItems = (list, items) => {\n        getListContainer(list).fold(() => {\n          console.error('Custom List was defined to not be a shell, but no item container was specified in components');\n          throw new Error('Custom List was defined to not be a shell, but no item container was specified in components');\n        }, container => {\n          const itemComps = Replacing.contents(container);\n          const numListsRequired = items.length;\n          const numListsToAdd = numListsRequired - itemComps.length;\n          const itemsToAdd = numListsToAdd > 0 ? range$2(numListsToAdd, () => detail.makeItem()) : [];\n          const itemsToRemove = itemComps.slice(numListsRequired);\n          each$1(itemsToRemove, item => Replacing.remove(container, item));\n          each$1(itemsToAdd, item => Replacing.append(container, item));\n          const builtLists = Replacing.contents(container);\n          each$1(builtLists, (item, i) => {\n            detail.setupItem(list, item, items[i], i);\n          });\n        });\n      };\n      const extra = detail.shell ? {\n        behaviours: [Replacing.config({})],\n        components: []\n      } : {\n        behaviours: [],\n        components\n      };\n      const getListContainer = component => detail.shell ? Optional.some(component) : getPart(component, detail, 'items');\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: extra.components,\n        behaviours: augment(detail.listBehaviours, extra.behaviours),\n        apis: { setItems }\n      };\n    };\n    const CustomList = composite({\n      name: name(),\n      configFields: schema$f(),\n      partFields: parts$9(),\n      factory: factory$d,\n      apis: {\n        setItems: (apis, list, items) => {\n          apis.setItems(list, items);\n        }\n      }\n    });\n\n    const schema$e = constant$1([\n      required$1('dom'),\n      defaulted('shell', true),\n      field('toolbarBehaviours', [Replacing])\n    ]);\n    const enhanceGroups = () => ({ behaviours: derive$1([Replacing.config({})]) });\n    const parts$8 = constant$1([optional({\n        name: 'groups',\n        overrides: enhanceGroups\n      })]);\n\n    const factory$c = (detail, components, _spec, _externals) => {\n      const setGroups = (toolbar, groups) => {\n        getGroupContainer(toolbar).fold(() => {\n          console.error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n          throw new Error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n        }, container => {\n          Replacing.set(container, groups);\n        });\n      };\n      const getGroupContainer = component => detail.shell ? Optional.some(component) : getPart(component, detail, 'groups');\n      const extra = detail.shell ? {\n        behaviours: [Replacing.config({})],\n        components: []\n      } : {\n        behaviours: [],\n        components\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: extra.components,\n        behaviours: augment(detail.toolbarBehaviours, extra.behaviours),\n        apis: { setGroups },\n        domModification: { attributes: { role: 'group' } }\n      };\n    };\n    const Toolbar = composite({\n      name: 'Toolbar',\n      configFields: schema$e(),\n      partFields: parts$8(),\n      factory: factory$c,\n      apis: {\n        setGroups: (apis, toolbar, groups) => {\n          apis.setGroups(toolbar, groups);\n        }\n      }\n    });\n\n    const setup$a = noop;\n    const isDocked$2 = never;\n    const getBehaviours$1 = constant$1([]);\n\n    var StaticHeader = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        setup: setup$a,\n        isDocked: isDocked$2,\n        getBehaviours: getBehaviours$1\n    });\n\n    const getOffsetParent = element => {\n      const isFixed = is$1(getRaw(element, 'position'), 'fixed');\n      const offsetParent$1 = isFixed ? Optional.none() : offsetParent(element);\n      return offsetParent$1.orThunk(() => {\n        const marker = SugarElement.fromTag('span');\n        return parent(element).bind(parent => {\n          append$2(parent, marker);\n          const offsetParent$1 = offsetParent(marker);\n          remove$5(marker);\n          return offsetParent$1;\n        });\n      });\n    };\n    const getOrigin = element => getOffsetParent(element).map(absolute$3).getOrThunk(() => SugarPosition(0, 0));\n\n    const morphAdt = Adt.generate([\n      { static: [] },\n      { absolute: ['positionCss'] },\n      { fixed: ['positionCss'] }\n    ]);\n    const appear = (component, contextualInfo) => {\n      const elem = component.element;\n      add$2(elem, contextualInfo.transitionClass);\n      remove$2(elem, contextualInfo.fadeOutClass);\n      add$2(elem, contextualInfo.fadeInClass);\n      contextualInfo.onShow(component);\n    };\n    const disappear = (component, contextualInfo) => {\n      const elem = component.element;\n      add$2(elem, contextualInfo.transitionClass);\n      remove$2(elem, contextualInfo.fadeInClass);\n      add$2(elem, contextualInfo.fadeOutClass);\n      contextualInfo.onHide(component);\n    };\n    const isPartiallyVisible = (box, viewport) => box.y < viewport.bottom && box.bottom > viewport.y;\n    const isTopCompletelyVisible = (box, viewport) => box.y >= viewport.y;\n    const isBottomCompletelyVisible = (box, viewport) => box.bottom <= viewport.bottom;\n    const isVisibleForModes = (modes, box, viewport) => forall(modes, mode => {\n      switch (mode) {\n      case 'bottom':\n        return isBottomCompletelyVisible(box, viewport);\n      case 'top':\n        return isTopCompletelyVisible(box, viewport);\n      }\n    });\n    const getPrior = (elem, state) => state.getInitialPos().map(pos => bounds(pos.bounds.x, pos.bounds.y, get$c(elem), get$d(elem)));\n    const storePrior = (elem, box, state) => {\n      state.setInitialPos({\n        style: getAllRaw(elem),\n        position: get$e(elem, 'position') || 'static',\n        bounds: box\n      });\n    };\n    const revertToOriginal = (elem, box, state) => state.getInitialPos().bind(position => {\n      state.clearInitialPos();\n      switch (position.position) {\n      case 'static':\n        return Optional.some(morphAdt.static());\n      case 'absolute':\n        const offsetBox = getOffsetParent(elem).map(box$1).getOrThunk(() => box$1(body()));\n        return Optional.some(morphAdt.absolute(NuPositionCss('absolute', get$g(position.style, 'left').map(_left => box.x - offsetBox.x), get$g(position.style, 'top').map(_top => box.y - offsetBox.y), get$g(position.style, 'right').map(_right => offsetBox.right - box.right), get$g(position.style, 'bottom').map(_bottom => offsetBox.bottom - box.bottom))));\n      default:\n        return Optional.none();\n      }\n    });\n    const morphToOriginal = (elem, viewport, state) => getPrior(elem, state).filter(box => isVisibleForModes(state.getModes(), box, viewport)).bind(box => revertToOriginal(elem, box, state));\n    const morphToFixed = (elem, viewport, state) => {\n      const box = box$1(elem);\n      if (!isVisibleForModes(state.getModes(), box, viewport)) {\n        storePrior(elem, box, state);\n        const winBox = win();\n        const left = box.x - winBox.x;\n        const top = viewport.y - winBox.y;\n        const bottom = winBox.bottom - viewport.bottom;\n        const isTop = box.y <= viewport.y;\n        return Optional.some(morphAdt.fixed(NuPositionCss('fixed', Optional.some(left), isTop ? Optional.some(top) : Optional.none(), Optional.none(), !isTop ? Optional.some(bottom) : Optional.none())));\n      } else {\n        return Optional.none();\n      }\n    };\n    const getMorph = (component, viewport, state) => {\n      const elem = component.element;\n      const isDocked = is$1(getRaw(elem, 'position'), 'fixed');\n      return isDocked ? morphToOriginal(elem, viewport, state) : morphToFixed(elem, viewport, state);\n    };\n    const getMorphToOriginal = (component, state) => {\n      const elem = component.element;\n      return getPrior(elem, state).bind(box => revertToOriginal(elem, box, state));\n    };\n\n    const morphToStatic = (component, config, state) => {\n      state.setDocked(false);\n      each$1([\n        'left',\n        'right',\n        'top',\n        'bottom',\n        'position'\n      ], prop => remove$6(component.element, prop));\n      config.onUndocked(component);\n    };\n    const morphToCoord = (component, config, state, position) => {\n      const isDocked = position.position === 'fixed';\n      state.setDocked(isDocked);\n      applyPositionCss(component.element, position);\n      const method = isDocked ? config.onDocked : config.onUndocked;\n      method(component);\n    };\n    const updateVisibility = (component, config, state, viewport, morphToDocked = false) => {\n      config.contextual.each(contextInfo => {\n        contextInfo.lazyContext(component).each(box => {\n          const isVisible = isPartiallyVisible(box, viewport);\n          if (isVisible !== state.isVisible()) {\n            state.setVisible(isVisible);\n            if (morphToDocked && !isVisible) {\n              add$1(component.element, [contextInfo.fadeOutClass]);\n              contextInfo.onHide(component);\n            } else {\n              const method = isVisible ? appear : disappear;\n              method(component, contextInfo);\n            }\n          }\n        });\n      });\n    };\n    const refreshInternal = (component, config, state) => {\n      const viewport = config.lazyViewport(component);\n      const isDocked = state.isDocked();\n      if (isDocked) {\n        updateVisibility(component, config, state, viewport);\n      }\n      getMorph(component, viewport, state).each(morph => {\n        morph.fold(() => morphToStatic(component, config, state), position => morphToCoord(component, config, state, position), position => {\n          updateVisibility(component, config, state, viewport, true);\n          morphToCoord(component, config, state, position);\n        });\n      });\n    };\n    const resetInternal = (component, config, state) => {\n      const elem = component.element;\n      state.setDocked(false);\n      getMorphToOriginal(component, state).each(morph => {\n        morph.fold(() => morphToStatic(component, config, state), position => morphToCoord(component, config, state, position), noop);\n      });\n      state.setVisible(true);\n      config.contextual.each(contextInfo => {\n        remove$1(elem, [\n          contextInfo.fadeInClass,\n          contextInfo.fadeOutClass,\n          contextInfo.transitionClass\n        ]);\n        contextInfo.onShow(component);\n      });\n      refresh$4(component, config, state);\n    };\n    const refresh$4 = (component, config, state) => {\n      if (component.getSystem().isConnected()) {\n        refreshInternal(component, config, state);\n      }\n    };\n    const reset = (component, config, state) => {\n      if (state.isDocked()) {\n        resetInternal(component, config, state);\n      }\n    };\n    const isDocked$1 = (component, config, state) => state.isDocked();\n    const setModes = (component, config, state, modes) => state.setModes(modes);\n    const getModes = (component, config, state) => state.getModes();\n\n    var DockingApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        refresh: refresh$4,\n        reset: reset,\n        isDocked: isDocked$1,\n        getModes: getModes,\n        setModes: setModes\n    });\n\n    const events$5 = (dockInfo, dockState) => derive$2([\n      runOnSource(transitionend(), (component, simulatedEvent) => {\n        dockInfo.contextual.each(contextInfo => {\n          if (has(component.element, contextInfo.transitionClass)) {\n            remove$1(component.element, [\n              contextInfo.transitionClass,\n              contextInfo.fadeInClass\n            ]);\n            const notify = dockState.isVisible() ? contextInfo.onShown : contextInfo.onHidden;\n            notify(component);\n          }\n          simulatedEvent.stop();\n        });\n      }),\n      run$1(windowScroll(), (component, _) => {\n        refresh$4(component, dockInfo, dockState);\n      }),\n      run$1(windowResize(), (component, _) => {\n        reset(component, dockInfo, dockState);\n      })\n    ]);\n\n    var ActiveDocking = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        events: events$5\n    });\n\n    var DockingSchema = [\n      optionObjOf('contextual', [\n        requiredString('fadeInClass'),\n        requiredString('fadeOutClass'),\n        requiredString('transitionClass'),\n        requiredFunction('lazyContext'),\n        onHandler('onShow'),\n        onHandler('onShown'),\n        onHandler('onHide'),\n        onHandler('onHidden')\n      ]),\n      defaultedFunction('lazyViewport', win),\n      defaultedArrayOf('modes', [\n        'top',\n        'bottom'\n      ], string),\n      onHandler('onDocked'),\n      onHandler('onUndocked')\n    ];\n\n    const init$6 = spec => {\n      const docked = Cell(false);\n      const visible = Cell(true);\n      const initialBounds = value$2();\n      const modes = Cell(spec.modes);\n      const readState = () => `docked:  ${ docked.get() }, visible: ${ visible.get() }, modes: ${ modes.get().join(',') }`;\n      return nu$8({\n        isDocked: docked.get,\n        setDocked: docked.set,\n        getInitialPos: initialBounds.get,\n        setInitialPos: initialBounds.set,\n        clearInitialPos: initialBounds.clear,\n        isVisible: visible.get,\n        setVisible: visible.set,\n        getModes: modes.get,\n        setModes: modes.set,\n        readState\n      });\n    };\n\n    var DockingState = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        init: init$6\n    });\n\n    const Docking = create$3({\n      fields: DockingSchema,\n      name: 'docking',\n      active: ActiveDocking,\n      apis: DockingApis,\n      state: DockingState\n    });\n\n    const toolbarHeightChange = constant$1(generate$6('toolbar-height-change'));\n\n    const visibility = {\n      fadeInClass: 'tox-editor-dock-fadein',\n      fadeOutClass: 'tox-editor-dock-fadeout',\n      transitionClass: 'tox-editor-dock-transition'\n    };\n    const editorStickyOnClass = 'tox-tinymce--toolbar-sticky-on';\n    const editorStickyOffClass = 'tox-tinymce--toolbar-sticky-off';\n    const scrollFromBehindHeader = (e, containerHeader) => {\n      const doc = owner$4(containerHeader);\n      const win = defaultView(containerHeader);\n      const viewHeight = win.dom.innerHeight;\n      const scrollPos = get$b(doc);\n      const markerElement = SugarElement.fromDom(e.elm);\n      const markerPos = absolute$2(markerElement);\n      const markerHeight = get$d(markerElement);\n      const markerTop = markerPos.y;\n      const markerBottom = markerTop + markerHeight;\n      const editorHeaderPos = absolute$3(containerHeader);\n      const editorHeaderHeight = get$d(containerHeader);\n      const editorHeaderTop = editorHeaderPos.top;\n      const editorHeaderBottom = editorHeaderTop + editorHeaderHeight;\n      const editorHeaderDockedAtTop = Math.abs(editorHeaderTop - scrollPos.top) < 2;\n      const editorHeaderDockedAtBottom = Math.abs(editorHeaderBottom - (scrollPos.top + viewHeight)) < 2;\n      if (editorHeaderDockedAtTop && markerTop < editorHeaderBottom) {\n        to(scrollPos.left, markerTop - editorHeaderHeight, doc);\n      } else if (editorHeaderDockedAtBottom && markerBottom > editorHeaderTop) {\n        const y = markerTop - viewHeight + markerHeight + editorHeaderHeight;\n        to(scrollPos.left, y, doc);\n      }\n    };\n    const isDockedMode = (header, mode) => contains$2(Docking.getModes(header), mode);\n    const updateIframeContentFlow = header => {\n      const getOccupiedHeight = elm => getOuter$2(elm) + (parseInt(get$e(elm, 'margin-top'), 10) || 0) + (parseInt(get$e(elm, 'margin-bottom'), 10) || 0);\n      const elm = header.element;\n      parentElement(elm).each(parentElem => {\n        const padding = 'padding-' + Docking.getModes(header)[0];\n        if (Docking.isDocked(header)) {\n          const parentWidth = get$c(parentElem);\n          set$8(elm, 'width', parentWidth + 'px');\n          set$8(parentElem, padding, getOccupiedHeight(elm) + 'px');\n        } else {\n          remove$6(elm, 'width');\n          remove$6(parentElem, padding);\n        }\n      });\n    };\n    const updateSinkVisibility = (sinkElem, visible) => {\n      if (visible) {\n        remove$2(sinkElem, visibility.fadeOutClass);\n        add$1(sinkElem, [\n          visibility.transitionClass,\n          visibility.fadeInClass\n        ]);\n      } else {\n        remove$2(sinkElem, visibility.fadeInClass);\n        add$1(sinkElem, [\n          visibility.fadeOutClass,\n          visibility.transitionClass\n        ]);\n      }\n    };\n    const updateEditorClasses = (editor, docked) => {\n      const editorContainer = SugarElement.fromDom(editor.getContainer());\n      if (docked) {\n        add$2(editorContainer, editorStickyOnClass);\n        remove$2(editorContainer, editorStickyOffClass);\n      } else {\n        add$2(editorContainer, editorStickyOffClass);\n        remove$2(editorContainer, editorStickyOnClass);\n      }\n    };\n    const restoreFocus = (headerElem, focusedElem) => {\n      const ownerDoc = owner$4(focusedElem);\n      active$1(ownerDoc).filter(activeElm => !eq(focusedElem, activeElm)).filter(activeElm => eq(activeElm, SugarElement.fromDom(ownerDoc.dom.body)) || contains(headerElem, activeElm)).each(() => focus$3(focusedElem));\n    };\n    const findFocusedElem = (rootElm, lazySink) => search(rootElm).orThunk(() => lazySink().toOptional().bind(sink => search(sink.element)));\n    const setup$9 = (editor, sharedBackstage, lazyHeader) => {\n      if (!editor.inline) {\n        if (!sharedBackstage.header.isPositionedAtTop()) {\n          editor.on('ResizeEditor', () => {\n            lazyHeader().each(Docking.reset);\n          });\n        }\n        editor.on('ResizeWindow ResizeEditor', () => {\n          lazyHeader().each(updateIframeContentFlow);\n        });\n        editor.on('SkinLoaded', () => {\n          lazyHeader().each(comp => {\n            Docking.isDocked(comp) ? Docking.reset(comp) : Docking.refresh(comp);\n          });\n        });\n        editor.on('FullscreenStateChanged', () => {\n          lazyHeader().each(Docking.reset);\n        });\n      }\n      editor.on('AfterScrollIntoView', e => {\n        lazyHeader().each(header => {\n          Docking.refresh(header);\n          const headerElem = header.element;\n          if (isVisible(headerElem)) {\n            scrollFromBehindHeader(e, headerElem);\n          }\n        });\n      });\n      editor.on('PostRender', () => {\n        updateEditorClasses(editor, false);\n      });\n    };\n    const isDocked = lazyHeader => lazyHeader().map(Docking.isDocked).getOr(false);\n    const getIframeBehaviours = () => [Receiving.config({ channels: { [toolbarHeightChange()]: { onReceive: updateIframeContentFlow } } })];\n    const getBehaviours = (editor, sharedBackstage) => {\n      const focusedElm = value$2();\n      const lazySink = sharedBackstage.getSink;\n      const runOnSinkElement = f => {\n        lazySink().each(sink => f(sink.element));\n      };\n      const onDockingSwitch = comp => {\n        if (!editor.inline) {\n          updateIframeContentFlow(comp);\n        }\n        updateEditorClasses(editor, Docking.isDocked(comp));\n        comp.getSystem().broadcastOn([repositionPopups()], {});\n        lazySink().each(sink => sink.getSystem().broadcastOn([repositionPopups()], {}));\n      };\n      const additionalBehaviours = editor.inline ? [] : getIframeBehaviours();\n      return [\n        Focusing.config({}),\n        Docking.config({\n          contextual: {\n            lazyContext: comp => {\n              const headerHeight = getOuter$2(comp.element);\n              const container = editor.inline ? editor.getContentAreaContainer() : editor.getContainer();\n              const box = box$1(SugarElement.fromDom(container));\n              const boxHeight = box.height - headerHeight;\n              const topBound = box.y + (isDockedMode(comp, 'top') ? 0 : headerHeight);\n              return Optional.some(bounds(box.x, topBound, box.width, boxHeight));\n            },\n            onShow: () => {\n              runOnSinkElement(elem => updateSinkVisibility(elem, true));\n            },\n            onShown: comp => {\n              runOnSinkElement(elem => remove$1(elem, [\n                visibility.transitionClass,\n                visibility.fadeInClass\n              ]));\n              focusedElm.get().each(elem => {\n                restoreFocus(comp.element, elem);\n                focusedElm.clear();\n              });\n            },\n            onHide: comp => {\n              findFocusedElem(comp.element, lazySink).fold(focusedElm.clear, focusedElm.set);\n              runOnSinkElement(elem => updateSinkVisibility(elem, false));\n            },\n            onHidden: () => {\n              runOnSinkElement(elem => remove$1(elem, [visibility.transitionClass]));\n            },\n            ...visibility\n          },\n          lazyViewport: comp => {\n            const win$1 = win();\n            const offset = getStickyToolbarOffset(editor);\n            const top = win$1.y + (isDockedMode(comp, 'top') ? offset : 0);\n            const height = win$1.height - (isDockedMode(comp, 'bottom') ? offset : 0);\n            return bounds(win$1.x, top, win$1.width, height);\n          },\n          modes: [sharedBackstage.header.getDockingMode()],\n          onDocked: onDockingSwitch,\n          onUndocked: onDockingSwitch\n        }),\n        ...additionalBehaviours\n      ];\n    };\n\n    var StickyHeader = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        setup: setup$9,\n        isDocked: isDocked,\n        getBehaviours: getBehaviours\n    });\n\n    const renderHeader = spec => {\n      const editor = spec.editor;\n      const getBehaviours$2 = spec.sticky ? getBehaviours : getBehaviours$1;\n      return {\n        uid: spec.uid,\n        dom: spec.dom,\n        components: spec.components,\n        behaviours: derive$1(getBehaviours$2(editor, spec.sharedBackstage))\n      };\n    };\n\n    const groupToolbarButtonSchema = objOf([\n      type,\n      requiredOf('items', oneOf([\n        arrOfObj([\n          name$1,\n          requiredArrayOf('items', string)\n        ]),\n        string\n      ]))\n    ].concat(baseToolbarButtonFields));\n    const createGroupToolbarButton = spec => asRaw('GroupToolbarButton', groupToolbarButtonSchema, spec);\n\n    const baseMenuButtonFields = [\n      optionString('text'),\n      optionString('tooltip'),\n      optionString('icon'),\n      defaultedOf('search', false, oneOf([\n        boolean,\n        objOf([optionString('placeholder')])\n      ], x => {\n        if (isBoolean(x)) {\n          return x ? Optional.some({ placeholder: Optional.none() }) : Optional.none();\n        } else {\n          return Optional.some(x);\n        }\n      })),\n      requiredFunction('fetch'),\n      defaultedFunction('onSetup', () => noop)\n    ];\n\n    const MenuButtonSchema = objOf([\n      type,\n      ...baseMenuButtonFields\n    ]);\n    const createMenuButton = spec => asRaw('menubutton', MenuButtonSchema, spec);\n\n    const splitButtonSchema = objOf([\n      type,\n      optionalTooltip,\n      optionalIcon,\n      optionalText,\n      optionalSelect,\n      fetch$1,\n      onSetup,\n      defaultedStringEnum('presets', 'normal', [\n        'normal',\n        'color',\n        'listpreview'\n      ]),\n      defaultedColumns(1),\n      onAction,\n      onItemAction\n    ]);\n    const createSplitButton = spec => asRaw('SplitButton', splitButtonSchema, spec);\n\n    const factory$b = (detail, spec) => {\n      const setMenus = (comp, menus) => {\n        const newMenus = map$2(menus, m => {\n          const buttonSpec = {\n            type: 'menubutton',\n            text: m.text,\n            fetch: callback => {\n              callback(m.getItems());\n            }\n          };\n          const internal = createMenuButton(buttonSpec).mapError(errInfo => formatError(errInfo)).getOrDie();\n          return renderMenuButton(internal, 'tox-mbtn', spec.backstage, Optional.some('menuitem'));\n        });\n        Replacing.set(comp, newMenus);\n      };\n      const apis = {\n        focus: Keying.focusIn,\n        setMenus\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components: [],\n        behaviours: derive$1([\n          Replacing.config({}),\n          config('menubar-events', [\n            runOnAttached(component => {\n              detail.onSetup(component);\n            }),\n            run$1(mouseover(), (comp, se) => {\n              descendant(comp.element, '.' + 'tox-mbtn--active').each(activeButton => {\n                closest$1(se.event.target, '.' + 'tox-mbtn').each(hoveredButton => {\n                  if (!eq(activeButton, hoveredButton)) {\n                    comp.getSystem().getByDom(activeButton).each(activeComp => {\n                      comp.getSystem().getByDom(hoveredButton).each(hoveredComp => {\n                        Dropdown.expand(hoveredComp);\n                        Dropdown.close(activeComp);\n                        Focusing.focus(hoveredComp);\n                      });\n                    });\n                  }\n                });\n              });\n            }),\n            run$1(focusShifted(), (comp, se) => {\n              se.event.prevFocus.bind(prev => comp.getSystem().getByDom(prev).toOptional()).each(prev => {\n                se.event.newFocus.bind(nu => comp.getSystem().getByDom(nu).toOptional()).each(nu => {\n                  if (Dropdown.isOpen(prev)) {\n                    Dropdown.expand(nu);\n                    Dropdown.close(prev);\n                  }\n                });\n              });\n            })\n          ]),\n          Keying.config({\n            mode: 'flow',\n            selector: '.' + 'tox-mbtn',\n            onEscape: comp => {\n              detail.onEscape(comp);\n              return Optional.some(true);\n            }\n          }),\n          Tabstopping.config({})\n        ]),\n        apis,\n        domModification: { attributes: { role: 'menubar' } }\n      };\n    };\n    var SilverMenubar = single({\n      factory: factory$b,\n      name: 'silver.Menubar',\n      configFields: [\n        required$1('dom'),\n        required$1('uid'),\n        required$1('onEscape'),\n        required$1('backstage'),\n        defaulted('onSetup', noop)\n      ],\n      apis: {\n        focus: (apis, comp) => {\n          apis.focus(comp);\n        },\n        setMenus: (apis, comp, menus) => {\n          apis.setMenus(comp, menus);\n        }\n      }\n    });\n\n    const promotionMessage = '\\u26A1\\ufe0fUpgrade';\n    const promotionLink = 'https://www.tiny.cloud/tinymce-self-hosted-premium-features/?utm_source=TinyMCE&utm_medium=SPAP&utm_campaign=SPAP&utm_id=editorreferral';\n    const renderPromotion = spec => {\n      return {\n        uid: spec.uid,\n        dom: spec.dom,\n        components: [{\n            dom: {\n              tag: 'a',\n              attributes: {\n                'href': promotionLink,\n                'rel': 'noopener',\n                'target': '_blank',\n                'aria-hidden': 'true'\n              },\n              classes: ['tox-promotion-link'],\n              innerHtml: promotionMessage\n            }\n          }]\n      };\n    };\n\n    const getAnimationRoot = (component, slideConfig) => slideConfig.getAnimationRoot.fold(() => component.element, get => get(component));\n\n    const getDimensionProperty = slideConfig => slideConfig.dimension.property;\n    const getDimension = (slideConfig, elem) => slideConfig.dimension.getDimension(elem);\n    const disableTransitions = (component, slideConfig) => {\n      const root = getAnimationRoot(component, slideConfig);\n      remove$1(root, [\n        slideConfig.shrinkingClass,\n        slideConfig.growingClass\n      ]);\n    };\n    const setShrunk = (component, slideConfig) => {\n      remove$2(component.element, slideConfig.openClass);\n      add$2(component.element, slideConfig.closedClass);\n      set$8(component.element, getDimensionProperty(slideConfig), '0px');\n      reflow(component.element);\n    };\n    const setGrown = (component, slideConfig) => {\n      remove$2(component.element, slideConfig.closedClass);\n      add$2(component.element, slideConfig.openClass);\n      remove$6(component.element, getDimensionProperty(slideConfig));\n    };\n    const doImmediateShrink = (component, slideConfig, slideState, _calculatedSize) => {\n      slideState.setCollapsed();\n      set$8(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n      disableTransitions(component, slideConfig);\n      setShrunk(component, slideConfig);\n      slideConfig.onStartShrink(component);\n      slideConfig.onShrunk(component);\n    };\n    const doStartShrink = (component, slideConfig, slideState, calculatedSize) => {\n      const size = calculatedSize.getOrThunk(() => getDimension(slideConfig, component.element));\n      slideState.setCollapsed();\n      set$8(component.element, getDimensionProperty(slideConfig), size);\n      reflow(component.element);\n      const root = getAnimationRoot(component, slideConfig);\n      remove$2(root, slideConfig.growingClass);\n      add$2(root, slideConfig.shrinkingClass);\n      setShrunk(component, slideConfig);\n      slideConfig.onStartShrink(component);\n    };\n    const doStartSmartShrink = (component, slideConfig, slideState) => {\n      const size = getDimension(slideConfig, component.element);\n      const shrinker = size === '0px' ? doImmediateShrink : doStartShrink;\n      shrinker(component, slideConfig, slideState, Optional.some(size));\n    };\n    const doStartGrow = (component, slideConfig, slideState) => {\n      const root = getAnimationRoot(component, slideConfig);\n      const wasShrinking = has(root, slideConfig.shrinkingClass);\n      const beforeSize = getDimension(slideConfig, component.element);\n      setGrown(component, slideConfig);\n      const fullSize = getDimension(slideConfig, component.element);\n      const startPartialGrow = () => {\n        set$8(component.element, getDimensionProperty(slideConfig), beforeSize);\n        reflow(component.element);\n      };\n      const startCompleteGrow = () => {\n        setShrunk(component, slideConfig);\n      };\n      const setStartSize = wasShrinking ? startPartialGrow : startCompleteGrow;\n      setStartSize();\n      remove$2(root, slideConfig.shrinkingClass);\n      add$2(root, slideConfig.growingClass);\n      setGrown(component, slideConfig);\n      set$8(component.element, getDimensionProperty(slideConfig), fullSize);\n      slideState.setExpanded();\n      slideConfig.onStartGrow(component);\n    };\n    const refresh$3 = (component, slideConfig, slideState) => {\n      if (slideState.isExpanded()) {\n        remove$6(component.element, getDimensionProperty(slideConfig));\n        const fullSize = getDimension(slideConfig, component.element);\n        set$8(component.element, getDimensionProperty(slideConfig), fullSize);\n      }\n    };\n    const grow = (component, slideConfig, slideState) => {\n      if (!slideState.isExpanded()) {\n        doStartGrow(component, slideConfig, slideState);\n      }\n    };\n    const shrink = (component, slideConfig, slideState) => {\n      if (slideState.isExpanded()) {\n        doStartSmartShrink(component, slideConfig, slideState);\n      }\n    };\n    const immediateShrink = (component, slideConfig, slideState) => {\n      if (slideState.isExpanded()) {\n        doImmediateShrink(component, slideConfig, slideState);\n      }\n    };\n    const hasGrown = (component, slideConfig, slideState) => slideState.isExpanded();\n    const hasShrunk = (component, slideConfig, slideState) => slideState.isCollapsed();\n    const isGrowing = (component, slideConfig, _slideState) => {\n      const root = getAnimationRoot(component, slideConfig);\n      return has(root, slideConfig.growingClass) === true;\n    };\n    const isShrinking = (component, slideConfig, _slideState) => {\n      const root = getAnimationRoot(component, slideConfig);\n      return has(root, slideConfig.shrinkingClass) === true;\n    };\n    const isTransitioning = (component, slideConfig, slideState) => isGrowing(component, slideConfig) || isShrinking(component, slideConfig);\n    const toggleGrow = (component, slideConfig, slideState) => {\n      const f = slideState.isExpanded() ? doStartSmartShrink : doStartGrow;\n      f(component, slideConfig, slideState);\n    };\n    const immediateGrow = (component, slideConfig, slideState) => {\n      if (!slideState.isExpanded()) {\n        setGrown(component, slideConfig);\n        set$8(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n        disableTransitions(component, slideConfig);\n        slideState.setExpanded();\n        slideConfig.onStartGrow(component);\n        slideConfig.onGrown(component);\n      }\n    };\n\n    var SlidingApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        refresh: refresh$3,\n        grow: grow,\n        shrink: shrink,\n        immediateShrink: immediateShrink,\n        hasGrown: hasGrown,\n        hasShrunk: hasShrunk,\n        isGrowing: isGrowing,\n        isShrinking: isShrinking,\n        isTransitioning: isTransitioning,\n        toggleGrow: toggleGrow,\n        disableTransitions: disableTransitions,\n        immediateGrow: immediateGrow\n    });\n\n    const exhibit = (base, slideConfig, _slideState) => {\n      const expanded = slideConfig.expanded;\n      return expanded ? nu$7({\n        classes: [slideConfig.openClass],\n        styles: {}\n      }) : nu$7({\n        classes: [slideConfig.closedClass],\n        styles: wrap$1(slideConfig.dimension.property, '0px')\n      });\n    };\n    const events$4 = (slideConfig, slideState) => derive$2([runOnSource(transitionend(), (component, simulatedEvent) => {\n        const raw = simulatedEvent.event.raw;\n        if (raw.propertyName === slideConfig.dimension.property) {\n          disableTransitions(component, slideConfig);\n          if (slideState.isExpanded()) {\n            remove$6(component.element, slideConfig.dimension.property);\n          }\n          const notify = slideState.isExpanded() ? slideConfig.onGrown : slideConfig.onShrunk;\n          notify(component);\n        }\n      })]);\n\n    var ActiveSliding = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        exhibit: exhibit,\n        events: events$4\n    });\n\n    var SlidingSchema = [\n      required$1('closedClass'),\n      required$1('openClass'),\n      required$1('shrinkingClass'),\n      required$1('growingClass'),\n      option$3('getAnimationRoot'),\n      onHandler('onShrunk'),\n      onHandler('onStartShrink'),\n      onHandler('onGrown'),\n      onHandler('onStartGrow'),\n      defaulted('expanded', false),\n      requiredOf('dimension', choose$1('property', {\n        width: [\n          output$1('property', 'width'),\n          output$1('getDimension', elem => get$c(elem) + 'px')\n        ],\n        height: [\n          output$1('property', 'height'),\n          output$1('getDimension', elem => get$d(elem) + 'px')\n        ]\n      }))\n    ];\n\n    const init$5 = spec => {\n      const state = Cell(spec.expanded);\n      const readState = () => 'expanded: ' + state.get();\n      return nu$8({\n        isExpanded: () => state.get() === true,\n        isCollapsed: () => state.get() === false,\n        setCollapsed: curry(state.set, false),\n        setExpanded: curry(state.set, true),\n        readState\n      });\n    };\n\n    var SlidingState = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        init: init$5\n    });\n\n    const Sliding = create$3({\n      fields: SlidingSchema,\n      name: 'sliding',\n      active: ActiveSliding,\n      apis: SlidingApis,\n      state: SlidingState\n    });\n\n    const owner = 'container';\n    const schema$d = [field('slotBehaviours', [])];\n    const getPartName = name => '<alloy.field.' + name + '>';\n    const sketch = sSpec => {\n      const parts = (() => {\n        const record = [];\n        const slot = (name, config) => {\n          record.push(name);\n          return generateOne$1(owner, getPartName(name), config);\n        };\n        return {\n          slot,\n          record: constant$1(record)\n        };\n      })();\n      const spec = sSpec(parts);\n      const partNames = parts.record();\n      const fieldParts = map$2(partNames, n => required({\n        name: n,\n        pname: getPartName(n)\n      }));\n      return composite$1(owner, schema$d, fieldParts, make$1, spec);\n    };\n    const make$1 = (detail, components) => {\n      const getSlotNames = _ => getAllPartNames(detail);\n      const getSlot = (container, key) => getPart(container, detail, key);\n      const onSlot = (f, def) => (container, key) => getPart(container, detail, key).map(slot => f(slot, key)).getOr(def);\n      const onSlots = f => (container, keys) => {\n        each$1(keys, key => f(container, key));\n      };\n      const doShowing = (comp, _key) => get$f(comp.element, 'aria-hidden') !== 'true';\n      const doShow = (comp, key) => {\n        if (!doShowing(comp)) {\n          const element = comp.element;\n          remove$6(element, 'display');\n          remove$7(element, 'aria-hidden');\n          emitWith(comp, slotVisibility(), {\n            name: key,\n            visible: true\n          });\n        }\n      };\n      const doHide = (comp, key) => {\n        if (doShowing(comp)) {\n          const element = comp.element;\n          set$8(element, 'display', 'none');\n          set$9(element, 'aria-hidden', 'true');\n          emitWith(comp, slotVisibility(), {\n            name: key,\n            visible: false\n          });\n        }\n      };\n      const isShowing = onSlot(doShowing, false);\n      const hideSlot = onSlot(doHide);\n      const hideSlots = onSlots(hideSlot);\n      const hideAllSlots = container => hideSlots(container, getSlotNames());\n      const showSlot = onSlot(doShow);\n      const apis = {\n        getSlotNames,\n        getSlot,\n        isShowing,\n        hideSlot,\n        hideAllSlots,\n        showSlot\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components,\n        behaviours: get$3(detail.slotBehaviours),\n        apis\n      };\n    };\n    const slotApis = map$1({\n      getSlotNames: (apis, c) => apis.getSlotNames(c),\n      getSlot: (apis, c, key) => apis.getSlot(c, key),\n      isShowing: (apis, c, key) => apis.isShowing(c, key),\n      hideSlot: (apis, c, key) => apis.hideSlot(c, key),\n      hideAllSlots: (apis, c) => apis.hideAllSlots(c),\n      showSlot: (apis, c, key) => apis.showSlot(c, key)\n    }, value => makeApi(value));\n    const SlotContainer = {\n      ...slotApis,\n      ...{ sketch }\n    };\n\n    const sidebarSchema = objOf([\n      optionalIcon,\n      optionalTooltip,\n      defaultedFunction('onShow', noop),\n      defaultedFunction('onHide', noop),\n      onSetup\n    ]);\n    const createSidebar = spec => asRaw('sidebar', sidebarSchema, spec);\n\n    const setup$8 = editor => {\n      const {sidebars} = editor.ui.registry.getAll();\n      each$1(keys(sidebars), name => {\n        const spec = sidebars[name];\n        const isActive = () => is$1(Optional.from(editor.queryCommandValue('ToggleSidebar')), name);\n        editor.ui.registry.addToggleButton(name, {\n          icon: spec.icon,\n          tooltip: spec.tooltip,\n          onAction: buttonApi => {\n            editor.execCommand('ToggleSidebar', false, name);\n            buttonApi.setActive(isActive());\n          },\n          onSetup: buttonApi => {\n            buttonApi.setActive(isActive());\n            const handleToggle = () => buttonApi.setActive(isActive());\n            editor.on('ToggleSidebar', handleToggle);\n            return () => {\n              editor.off('ToggleSidebar', handleToggle);\n            };\n          }\n        });\n      });\n    };\n    const getApi = comp => ({ element: () => comp.element.dom });\n    const makePanels = (parts, panelConfigs) => {\n      const specs = map$2(keys(panelConfigs), name => {\n        const spec = panelConfigs[name];\n        const bridged = getOrDie(createSidebar(spec));\n        return {\n          name,\n          getApi,\n          onSetup: bridged.onSetup,\n          onShow: bridged.onShow,\n          onHide: bridged.onHide\n        };\n      });\n      return map$2(specs, spec => {\n        const editorOffCell = Cell(noop);\n        return parts.slot(spec.name, {\n          dom: {\n            tag: 'div',\n            classes: ['tox-sidebar__pane']\n          },\n          behaviours: SimpleBehaviours.unnamedEvents([\n            onControlAttached(spec, editorOffCell),\n            onControlDetached(spec, editorOffCell),\n            run$1(slotVisibility(), (sidepanel, se) => {\n              const data = se.event;\n              const optSidePanelSpec = find$5(specs, config => config.name === data.name);\n              optSidePanelSpec.each(sidePanelSpec => {\n                const handler = data.visible ? sidePanelSpec.onShow : sidePanelSpec.onHide;\n                handler(sidePanelSpec.getApi(sidepanel));\n              });\n            })\n          ])\n        });\n      });\n    };\n    const makeSidebar = panelConfigs => SlotContainer.sketch(parts => ({\n      dom: {\n        tag: 'div',\n        classes: ['tox-sidebar__pane-container']\n      },\n      components: makePanels(parts, panelConfigs),\n      slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached(slotContainer => SlotContainer.hideAllSlots(slotContainer))])\n    }));\n    const setSidebar = (sidebar, panelConfigs, showSidebar) => {\n      const optSlider = Composing.getCurrent(sidebar);\n      optSlider.each(slider => {\n        Replacing.set(slider, [makeSidebar(panelConfigs)]);\n        const configKey = showSidebar === null || showSidebar === void 0 ? void 0 : showSidebar.toLowerCase();\n        if (isString(configKey) && has$2(panelConfigs, configKey)) {\n          Composing.getCurrent(slider).each(slotContainer => {\n            SlotContainer.showSlot(slotContainer, configKey);\n            Sliding.immediateGrow(slider);\n            remove$6(slider.element, 'width');\n          });\n        }\n      });\n    };\n    const toggleSidebar = (sidebar, name) => {\n      const optSlider = Composing.getCurrent(sidebar);\n      optSlider.each(slider => {\n        const optSlotContainer = Composing.getCurrent(slider);\n        optSlotContainer.each(slotContainer => {\n          if (Sliding.hasGrown(slider)) {\n            if (SlotContainer.isShowing(slotContainer, name)) {\n              Sliding.shrink(slider);\n            } else {\n              SlotContainer.hideAllSlots(slotContainer);\n              SlotContainer.showSlot(slotContainer, name);\n            }\n          } else {\n            SlotContainer.hideAllSlots(slotContainer);\n            SlotContainer.showSlot(slotContainer, name);\n            Sliding.grow(slider);\n          }\n        });\n      });\n    };\n    const whichSidebar = sidebar => {\n      const optSlider = Composing.getCurrent(sidebar);\n      return optSlider.bind(slider => {\n        const sidebarOpen = Sliding.isGrowing(slider) || Sliding.hasGrown(slider);\n        if (sidebarOpen) {\n          const optSlotContainer = Composing.getCurrent(slider);\n          return optSlotContainer.bind(slotContainer => find$5(SlotContainer.getSlotNames(slotContainer), name => SlotContainer.isShowing(slotContainer, name)));\n        } else {\n          return Optional.none();\n        }\n      });\n    };\n    const fixSize = generate$6('FixSizeEvent');\n    const autoSize = generate$6('AutoSizeEvent');\n    const renderSidebar = spec => ({\n      uid: spec.uid,\n      dom: {\n        tag: 'div',\n        classes: ['tox-sidebar'],\n        attributes: { role: 'complementary' }\n      },\n      components: [{\n          dom: {\n            tag: 'div',\n            classes: ['tox-sidebar__slider']\n          },\n          components: [],\n          behaviours: derive$1([\n            Tabstopping.config({}),\n            Focusing.config({}),\n            Sliding.config({\n              dimension: { property: 'width' },\n              closedClass: 'tox-sidebar--sliding-closed',\n              openClass: 'tox-sidebar--sliding-open',\n              shrinkingClass: 'tox-sidebar--sliding-shrinking',\n              growingClass: 'tox-sidebar--sliding-growing',\n              onShrunk: slider => {\n                const optSlotContainer = Composing.getCurrent(slider);\n                optSlotContainer.each(SlotContainer.hideAllSlots);\n                emit(slider, autoSize);\n              },\n              onGrown: slider => {\n                emit(slider, autoSize);\n              },\n              onStartGrow: slider => {\n                emitWith(slider, fixSize, { width: getRaw(slider.element, 'width').getOr('') });\n              },\n              onStartShrink: slider => {\n                emitWith(slider, fixSize, { width: get$c(slider.element) + 'px' });\n              }\n            }),\n            Replacing.config({}),\n            Composing.config({\n              find: comp => {\n                const children = Replacing.contents(comp);\n                return head(children);\n              }\n            })\n          ])\n        }],\n      behaviours: derive$1([\n        ComposingConfigs.childAt(0),\n        config('sidebar-sliding-events', [\n          run$1(fixSize, (comp, se) => {\n            set$8(comp.element, 'width', se.event.width);\n          }),\n          run$1(autoSize, (comp, _se) => {\n            remove$6(comp.element, 'width');\n          })\n        ])\n      ])\n    });\n\n    const block = (component, config, state, getBusySpec) => {\n      set$9(component.element, 'aria-busy', true);\n      const root = config.getRoot(component).getOr(component);\n      const blockerBehaviours = derive$1([\n        Keying.config({\n          mode: 'special',\n          onTab: () => Optional.some(true),\n          onShiftTab: () => Optional.some(true)\n        }),\n        Focusing.config({})\n      ]);\n      const blockSpec = getBusySpec(root, blockerBehaviours);\n      const blocker = root.getSystem().build(blockSpec);\n      Replacing.append(root, premade(blocker));\n      if (blocker.hasConfigured(Keying) && config.focus) {\n        Keying.focusIn(blocker);\n      }\n      if (!state.isBlocked()) {\n        config.onBlock(component);\n      }\n      state.blockWith(() => Replacing.remove(root, blocker));\n    };\n    const unblock = (component, config, state) => {\n      remove$7(component.element, 'aria-busy');\n      if (state.isBlocked()) {\n        config.onUnblock(component);\n      }\n      state.clear();\n    };\n\n    var BlockingApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        block: block,\n        unblock: unblock\n    });\n\n    var BlockingSchema = [\n      defaultedFunction('getRoot', Optional.none),\n      defaultedBoolean('focus', true),\n      onHandler('onBlock'),\n      onHandler('onUnblock')\n    ];\n\n    const init$4 = () => {\n      const blocker = destroyable();\n      const blockWith = destroy => {\n        blocker.set({ destroy });\n      };\n      return nu$8({\n        readState: blocker.isSet,\n        blockWith,\n        clear: blocker.clear,\n        isBlocked: blocker.isSet\n      });\n    };\n\n    var BlockingState = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        init: init$4\n    });\n\n    const Blocking = create$3({\n      fields: BlockingSchema,\n      name: 'blocking',\n      apis: BlockingApis,\n      state: BlockingState\n    });\n\n    const getAttrs = elem => {\n      const attributes = elem.dom.attributes !== undefined ? elem.dom.attributes : [];\n      return foldl(attributes, (b, attr) => {\n        if (attr.name === 'class') {\n          return b;\n        } else {\n          return {\n            ...b,\n            [attr.name]: attr.value\n          };\n        }\n      }, {});\n    };\n    const getClasses = elem => Array.prototype.slice.call(elem.dom.classList, 0);\n    const fromHtml = html => {\n      const elem = SugarElement.fromHtml(html);\n      const children$1 = children(elem);\n      const attrs = getAttrs(elem);\n      const classes = getClasses(elem);\n      const contents = children$1.length === 0 ? {} : { innerHtml: get$9(elem) };\n      return {\n        tag: name$3(elem),\n        classes,\n        attributes: attrs,\n        ...contents\n      };\n    };\n\n    const getBusySpec$1 = providerBackstage => (_root, _behaviours) => ({\n      dom: {\n        tag: 'div',\n        attributes: {\n          'aria-label': providerBackstage.translate('Loading...'),\n          'tabindex': '0'\n        },\n        classes: ['tox-throbber__busy-spinner']\n      },\n      components: [{ dom: fromHtml('<div class=\"tox-spinner\"><div></div><div></div><div></div></div>') }]\n    });\n    const focusBusyComponent = throbber => Composing.getCurrent(throbber).each(comp => focus$3(comp.element));\n    const toggleEditorTabIndex = (editor, state) => {\n      const tabIndexAttr = 'tabindex';\n      const dataTabIndexAttr = `data-mce-${ tabIndexAttr }`;\n      Optional.from(editor.iframeElement).map(SugarElement.fromDom).each(iframe => {\n        if (state) {\n          getOpt(iframe, tabIndexAttr).each(tabIndex => set$9(iframe, dataTabIndexAttr, tabIndex));\n          set$9(iframe, tabIndexAttr, -1);\n        } else {\n          remove$7(iframe, tabIndexAttr);\n          getOpt(iframe, dataTabIndexAttr).each(tabIndex => {\n            set$9(iframe, tabIndexAttr, tabIndex);\n            remove$7(iframe, dataTabIndexAttr);\n          });\n        }\n      });\n    };\n    const toggleThrobber = (editor, comp, state, providerBackstage) => {\n      const element = comp.element;\n      toggleEditorTabIndex(editor, state);\n      if (state) {\n        Blocking.block(comp, getBusySpec$1(providerBackstage));\n        remove$6(element, 'display');\n        remove$7(element, 'aria-hidden');\n        if (editor.hasFocus()) {\n          focusBusyComponent(comp);\n        }\n      } else {\n        const throbberFocus = Composing.getCurrent(comp).exists(busyComp => hasFocus(busyComp.element));\n        Blocking.unblock(comp);\n        set$8(element, 'display', 'none');\n        set$9(element, 'aria-hidden', 'true');\n        if (throbberFocus) {\n          editor.focus();\n        }\n      }\n    };\n    const renderThrobber = spec => ({\n      uid: spec.uid,\n      dom: {\n        tag: 'div',\n        attributes: { 'aria-hidden': 'true' },\n        classes: ['tox-throbber'],\n        styles: { display: 'none' }\n      },\n      behaviours: derive$1([\n        Replacing.config({}),\n        Blocking.config({ focus: false }),\n        Composing.config({ find: comp => head(comp.components()) })\n      ]),\n      components: []\n    });\n    const isFocusEvent = event => event.type === 'focusin';\n    const isPasteBinTarget = event => {\n      if (isFocusEvent(event)) {\n        const node = event.composed ? head(event.composedPath()) : Optional.from(event.target);\n        return node.map(SugarElement.fromDom).filter(isElement$1).exists(targetElm => has(targetElm, 'mce-pastebin'));\n      } else {\n        return false;\n      }\n    };\n    const setup$7 = (editor, lazyThrobber, sharedBackstage) => {\n      const throbberState = Cell(false);\n      const timer = value$2();\n      const stealFocus = e => {\n        if (throbberState.get() && !isPasteBinTarget(e)) {\n          e.preventDefault();\n          focusBusyComponent(lazyThrobber());\n          editor.editorManager.setActive(editor);\n        }\n      };\n      if (!editor.inline) {\n        editor.on('PreInit', () => {\n          editor.dom.bind(editor.getWin(), 'focusin', stealFocus);\n          editor.on('BeforeExecCommand', e => {\n            if (e.command.toLowerCase() === 'mcefocus' && e.value !== true) {\n              stealFocus(e);\n            }\n          });\n        });\n      }\n      const toggle = state => {\n        if (state !== throbberState.get()) {\n          throbberState.set(state);\n          toggleThrobber(editor, lazyThrobber(), state, sharedBackstage.providers);\n          fireAfterProgressState(editor, state);\n        }\n      };\n      editor.on('ProgressState', e => {\n        timer.on(clearTimeout);\n        if (isNumber(e.time)) {\n          const timerId = global$9.setEditorTimeout(editor, () => toggle(e.state), e.time);\n          timer.set(timerId);\n        } else {\n          toggle(e.state);\n          timer.clear();\n        }\n      });\n    };\n\n    const generate$1 = (xs, f) => {\n      const init = {\n        len: 0,\n        list: []\n      };\n      const r = foldl(xs, (b, a) => {\n        const value = f(a, b.len);\n        return value.fold(constant$1(b), v => ({\n          len: v.finish,\n          list: b.list.concat([v])\n        }));\n      }, init);\n      return r.list;\n    };\n\n    const output = (within, extra, withinWidth) => ({\n      within,\n      extra,\n      withinWidth\n    });\n    const apportion = (units, total, len) => {\n      const parray = generate$1(units, (unit, current) => {\n        const width = len(unit);\n        return Optional.some({\n          element: unit,\n          start: current,\n          finish: current + width,\n          width\n        });\n      });\n      const within = filter$2(parray, unit => unit.finish <= total);\n      const withinWidth = foldr(within, (acc, el) => acc + el.width, 0);\n      const extra = parray.slice(within.length);\n      return {\n        within,\n        extra,\n        withinWidth\n      };\n    };\n    const toUnit = parray => map$2(parray, unit => unit.element);\n    const fitLast = (within, extra, withinWidth) => {\n      const fits = toUnit(within.concat(extra));\n      return output(fits, [], withinWidth);\n    };\n    const overflow = (within, extra, overflower, withinWidth) => {\n      const fits = toUnit(within).concat([overflower]);\n      return output(fits, toUnit(extra), withinWidth);\n    };\n    const fitAll = (within, extra, withinWidth) => output(toUnit(within), [], withinWidth);\n    const tryFit = (total, units, len) => {\n      const divide = apportion(units, total, len);\n      return divide.extra.length === 0 ? Optional.some(divide) : Optional.none();\n    };\n    const partition = (total, units, len, overflower) => {\n      const divide = tryFit(total, units, len).getOrThunk(() => apportion(units, total - len(overflower), len));\n      const within = divide.within;\n      const extra = divide.extra;\n      const withinWidth = divide.withinWidth;\n      if (extra.length === 1 && extra[0].width <= len(overflower)) {\n        return fitLast(within, extra, withinWidth);\n      } else if (extra.length >= 1) {\n        return overflow(within, extra, overflower, withinWidth);\n      } else {\n        return fitAll(within, extra, withinWidth);\n      }\n    };\n\n    const setGroups$1 = (toolbar, storedGroups) => {\n      const bGroups = map$2(storedGroups, g => premade(g));\n      Toolbar.setGroups(toolbar, bGroups);\n    };\n    const findFocusedComp = comps => findMap(comps, comp => search(comp.element).bind(focusedElm => comp.getSystem().getByDom(focusedElm).toOptional()));\n    const refresh$2 = (toolbar, detail, setOverflow) => {\n      const builtGroups = detail.builtGroups.get();\n      if (builtGroups.length === 0) {\n        return;\n      }\n      const primary = getPartOrDie(toolbar, detail, 'primary');\n      const overflowGroup = Coupling.getCoupled(toolbar, 'overflowGroup');\n      set$8(primary.element, 'visibility', 'hidden');\n      const groups = builtGroups.concat([overflowGroup]);\n      const focusedComp = findFocusedComp(groups);\n      setOverflow([]);\n      setGroups$1(primary, groups);\n      const availableWidth = get$c(primary.element);\n      const overflows = partition(availableWidth, detail.builtGroups.get(), comp => get$c(comp.element), overflowGroup);\n      if (overflows.extra.length === 0) {\n        Replacing.remove(primary, overflowGroup);\n        setOverflow([]);\n      } else {\n        setGroups$1(primary, overflows.within);\n        setOverflow(overflows.extra);\n      }\n      remove$6(primary.element, 'visibility');\n      reflow(primary.element);\n      focusedComp.each(Focusing.focus);\n    };\n\n    const schema$c = constant$1([\n      field('splitToolbarBehaviours', [Coupling]),\n      customField('builtGroups', () => Cell([]))\n    ]);\n\n    const schema$b = constant$1([\n      markers$1(['overflowToggledClass']),\n      optionFunction('getOverflowBounds'),\n      required$1('lazySink'),\n      customField('overflowGroups', () => Cell([]))\n    ].concat(schema$c()));\n    const parts$7 = constant$1([\n      required({\n        factory: Toolbar,\n        schema: schema$e(),\n        name: 'primary'\n      }),\n      external({\n        schema: schema$e(),\n        name: 'overflow'\n      }),\n      external({ name: 'overflow-button' }),\n      external({ name: 'overflow-group' })\n    ]);\n\n    const expandable = constant$1((element, available) => {\n      setMax(element, Math.floor(available));\n    });\n\n    const schema$a = constant$1([\n      markers$1(['toggledClass']),\n      required$1('lazySink'),\n      requiredFunction('fetch'),\n      optionFunction('getBounds'),\n      optionObjOf('fireDismissalEventInstead', [defaulted('event', dismissRequested())]),\n      schema$y()\n    ]);\n    const parts$6 = constant$1([\n      external({\n        name: 'button',\n        overrides: detail => ({\n          dom: { attributes: { 'aria-haspopup': 'true' } },\n          buttonBehaviours: derive$1([Toggling.config({\n              toggleClass: detail.markers.toggledClass,\n              aria: { mode: 'expanded' },\n              toggleOnExecute: false\n            })])\n        })\n      }),\n      external({\n        factory: Toolbar,\n        schema: schema$e(),\n        name: 'toolbar',\n        overrides: detail => {\n          return {\n            toolbarBehaviours: derive$1([Keying.config({\n                mode: 'cyclic',\n                onEscape: comp => {\n                  getPart(comp, detail, 'button').each(Focusing.focus);\n                  return Optional.none();\n                }\n              })])\n          };\n        }\n      })\n    ]);\n\n    const toggle = (button, externals) => {\n      const toolbarSandbox = Coupling.getCoupled(button, 'toolbarSandbox');\n      if (Sandboxing.isOpen(toolbarSandbox)) {\n        Sandboxing.close(toolbarSandbox);\n      } else {\n        Sandboxing.open(toolbarSandbox, externals.toolbar());\n      }\n    };\n    const position = (button, toolbar, detail, layouts) => {\n      const bounds = detail.getBounds.map(bounder => bounder());\n      const sink = detail.lazySink(button).getOrDie();\n      Positioning.positionWithinBounds(sink, toolbar, {\n        anchor: {\n          type: 'hotspot',\n          hotspot: button,\n          layouts,\n          overrides: { maxWidthFunction: expandable() }\n        }\n      }, bounds);\n    };\n    const setGroups = (button, toolbar, detail, layouts, groups) => {\n      Toolbar.setGroups(toolbar, groups);\n      position(button, toolbar, detail, layouts);\n      Toggling.on(button);\n    };\n    const makeSandbox = (button, spec, detail) => {\n      const ariaControls = manager();\n      const onOpen = (sandbox, toolbar) => {\n        detail.fetch().get(groups => {\n          setGroups(button, toolbar, detail, spec.layouts, groups);\n          ariaControls.link(button.element);\n          Keying.focusIn(toolbar);\n        });\n      };\n      const onClose = () => {\n        Toggling.off(button);\n        Focusing.focus(button);\n        ariaControls.unlink(button.element);\n      };\n      return {\n        dom: {\n          tag: 'div',\n          attributes: { id: ariaControls.id }\n        },\n        behaviours: derive$1([\n          Keying.config({\n            mode: 'special',\n            onEscape: comp => {\n              Sandboxing.close(comp);\n              return Optional.some(true);\n            }\n          }),\n          Sandboxing.config({\n            onOpen,\n            onClose,\n            isPartOf: (container, data, queryElem) => {\n              return isPartOf$1(data, queryElem) || isPartOf$1(button, queryElem);\n            },\n            getAttachPoint: () => {\n              return detail.lazySink(button).getOrDie();\n            }\n          }),\n          Receiving.config({\n            channels: {\n              ...receivingChannel$1({\n                isExtraPart: never,\n                ...detail.fireDismissalEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({})\n              }),\n              ...receivingChannel({\n                doReposition: () => {\n                  Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n                    position(button, toolbar, detail, spec.layouts);\n                  });\n                }\n              })\n            }\n          })\n        ])\n      };\n    };\n    const factory$a = (detail, components, spec, externals) => ({\n      ...Button.sketch({\n        ...externals.button(),\n        action: button => {\n          toggle(button, externals);\n        },\n        buttonBehaviours: SketchBehaviours.augment({ dump: externals.button().buttonBehaviours }, [Coupling.config({\n            others: {\n              toolbarSandbox: button => {\n                return makeSandbox(button, spec, detail);\n              }\n            }\n          })])\n      }),\n      apis: {\n        setGroups: (button, groups) => {\n          Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n            setGroups(button, toolbar, detail, spec.layouts, groups);\n          });\n        },\n        reposition: button => {\n          Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n            position(button, toolbar, detail, spec.layouts);\n          });\n        },\n        toggle: button => {\n          toggle(button, externals);\n        },\n        getToolbar: button => {\n          return Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox'));\n        },\n        isOpen: button => {\n          return Sandboxing.isOpen(Coupling.getCoupled(button, 'toolbarSandbox'));\n        }\n      }\n    });\n    const FloatingToolbarButton = composite({\n      name: 'FloatingToolbarButton',\n      factory: factory$a,\n      configFields: schema$a(),\n      partFields: parts$6(),\n      apis: {\n        setGroups: (apis, button, groups) => {\n          apis.setGroups(button, groups);\n        },\n        reposition: (apis, button) => {\n          apis.reposition(button);\n        },\n        toggle: (apis, button) => {\n          apis.toggle(button);\n        },\n        getToolbar: (apis, button) => apis.getToolbar(button),\n        isOpen: (apis, button) => apis.isOpen(button)\n      }\n    });\n\n    const schema$9 = constant$1([\n      required$1('items'),\n      markers$1(['itemSelector']),\n      field('tgroupBehaviours', [Keying])\n    ]);\n    const parts$5 = constant$1([group({\n        name: 'items',\n        unit: 'item'\n      })]);\n\n    const factory$9 = (detail, components, _spec, _externals) => ({\n      uid: detail.uid,\n      dom: detail.dom,\n      components,\n      behaviours: augment(detail.tgroupBehaviours, [Keying.config({\n          mode: 'flow',\n          selector: detail.markers.itemSelector\n        })]),\n      domModification: { attributes: { role: 'toolbar' } }\n    });\n    const ToolbarGroup = composite({\n      name: 'ToolbarGroup',\n      configFields: schema$9(),\n      partFields: parts$5(),\n      factory: factory$9\n    });\n\n    const buildGroups = comps => map$2(comps, g => premade(g));\n    const refresh$1 = (toolbar, memFloatingToolbarButton, detail) => {\n      refresh$2(toolbar, detail, overflowGroups => {\n        detail.overflowGroups.set(overflowGroups);\n        memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n          FloatingToolbarButton.setGroups(floatingToolbarButton, buildGroups(overflowGroups));\n        });\n      });\n    };\n    const factory$8 = (detail, components, spec, externals) => {\n      const memFloatingToolbarButton = record(FloatingToolbarButton.sketch({\n        fetch: () => Future.nu(resolve => {\n          resolve(buildGroups(detail.overflowGroups.get()));\n        }),\n        layouts: {\n          onLtr: () => [\n            southwest$2,\n            southeast$2\n          ],\n          onRtl: () => [\n            southeast$2,\n            southwest$2\n          ],\n          onBottomLtr: () => [\n            northwest$2,\n            northeast$2\n          ],\n          onBottomRtl: () => [\n            northeast$2,\n            northwest$2\n          ]\n        },\n        getBounds: spec.getOverflowBounds,\n        lazySink: detail.lazySink,\n        fireDismissalEventInstead: {},\n        markers: { toggledClass: detail.markers.overflowToggledClass },\n        parts: {\n          button: externals['overflow-button'](),\n          toolbar: externals.overflow()\n        }\n      }));\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components,\n        behaviours: augment(detail.splitToolbarBehaviours, [Coupling.config({\n            others: {\n              overflowGroup: () => {\n                return ToolbarGroup.sketch({\n                  ...externals['overflow-group'](),\n                  items: [memFloatingToolbarButton.asSpec()]\n                });\n              }\n            }\n          })]),\n        apis: {\n          setGroups: (toolbar, groups) => {\n            detail.builtGroups.set(map$2(groups, toolbar.getSystem().build));\n            refresh$1(toolbar, memFloatingToolbarButton, detail);\n          },\n          refresh: toolbar => refresh$1(toolbar, memFloatingToolbarButton, detail),\n          toggle: toolbar => {\n            memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n              FloatingToolbarButton.toggle(floatingToolbarButton);\n            });\n          },\n          isOpen: toolbar => memFloatingToolbarButton.getOpt(toolbar).map(FloatingToolbarButton.isOpen).getOr(false),\n          reposition: toolbar => {\n            memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n              FloatingToolbarButton.reposition(floatingToolbarButton);\n            });\n          },\n          getOverflow: toolbar => memFloatingToolbarButton.getOpt(toolbar).bind(FloatingToolbarButton.getToolbar)\n        },\n        domModification: { attributes: { role: 'group' } }\n      };\n    };\n    const SplitFloatingToolbar = composite({\n      name: 'SplitFloatingToolbar',\n      configFields: schema$b(),\n      partFields: parts$7(),\n      factory: factory$8,\n      apis: {\n        setGroups: (apis, toolbar, groups) => {\n          apis.setGroups(toolbar, groups);\n        },\n        refresh: (apis, toolbar) => {\n          apis.refresh(toolbar);\n        },\n        reposition: (apis, toolbar) => {\n          apis.reposition(toolbar);\n        },\n        toggle: (apis, toolbar) => {\n          apis.toggle(toolbar);\n        },\n        isOpen: (apis, toolbar) => apis.isOpen(toolbar),\n        getOverflow: (apis, toolbar) => apis.getOverflow(toolbar)\n      }\n    });\n\n    const schema$8 = constant$1([\n      markers$1([\n        'closedClass',\n        'openClass',\n        'shrinkingClass',\n        'growingClass',\n        'overflowToggledClass'\n      ]),\n      onHandler('onOpened'),\n      onHandler('onClosed')\n    ].concat(schema$c()));\n    const parts$4 = constant$1([\n      required({\n        factory: Toolbar,\n        schema: schema$e(),\n        name: 'primary'\n      }),\n      required({\n        factory: Toolbar,\n        schema: schema$e(),\n        name: 'overflow',\n        overrides: detail => {\n          return {\n            toolbarBehaviours: derive$1([\n              Sliding.config({\n                dimension: { property: 'height' },\n                closedClass: detail.markers.closedClass,\n                openClass: detail.markers.openClass,\n                shrinkingClass: detail.markers.shrinkingClass,\n                growingClass: detail.markers.growingClass,\n                onShrunk: comp => {\n                  getPart(comp, detail, 'overflow-button').each(button => {\n                    Toggling.off(button);\n                    Focusing.focus(button);\n                  });\n                  detail.onClosed(comp);\n                },\n                onGrown: comp => {\n                  Keying.focusIn(comp);\n                  detail.onOpened(comp);\n                },\n                onStartGrow: comp => {\n                  getPart(comp, detail, 'overflow-button').each(Toggling.on);\n                }\n              }),\n              Keying.config({\n                mode: 'acyclic',\n                onEscape: comp => {\n                  getPart(comp, detail, 'overflow-button').each(Focusing.focus);\n                  return Optional.some(true);\n                }\n              })\n            ])\n          };\n        }\n      }),\n      external({\n        name: 'overflow-button',\n        overrides: detail => ({\n          buttonBehaviours: derive$1([Toggling.config({\n              toggleClass: detail.markers.overflowToggledClass,\n              aria: { mode: 'pressed' },\n              toggleOnExecute: false\n            })])\n        })\n      }),\n      external({ name: 'overflow-group' })\n    ]);\n\n    const isOpen = (toolbar, detail) => getPart(toolbar, detail, 'overflow').map(Sliding.hasGrown).getOr(false);\n    const toggleToolbar = (toolbar, detail) => {\n      getPart(toolbar, detail, 'overflow-button').bind(() => getPart(toolbar, detail, 'overflow')).each(overf => {\n        refresh(toolbar, detail);\n        Sliding.toggleGrow(overf);\n      });\n    };\n    const refresh = (toolbar, detail) => {\n      getPart(toolbar, detail, 'overflow').each(overflow => {\n        refresh$2(toolbar, detail, groups => {\n          const builtGroups = map$2(groups, g => premade(g));\n          Toolbar.setGroups(overflow, builtGroups);\n        });\n        getPart(toolbar, detail, 'overflow-button').each(button => {\n          if (Sliding.hasGrown(overflow)) {\n            Toggling.on(button);\n          }\n        });\n        Sliding.refresh(overflow);\n      });\n    };\n    const factory$7 = (detail, components, spec, externals) => {\n      const toolbarToggleEvent = 'alloy.toolbar.toggle';\n      const doSetGroups = (toolbar, groups) => {\n        const built = map$2(groups, toolbar.getSystem().build);\n        detail.builtGroups.set(built);\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components,\n        behaviours: augment(detail.splitToolbarBehaviours, [\n          Coupling.config({\n            others: {\n              overflowGroup: toolbar => {\n                return ToolbarGroup.sketch({\n                  ...externals['overflow-group'](),\n                  items: [Button.sketch({\n                      ...externals['overflow-button'](),\n                      action: _button => {\n                        emit(toolbar, toolbarToggleEvent);\n                      }\n                    })]\n                });\n              }\n            }\n          }),\n          config('toolbar-toggle-events', [run$1(toolbarToggleEvent, toolbar => {\n              toggleToolbar(toolbar, detail);\n            })])\n        ]),\n        apis: {\n          setGroups: (toolbar, groups) => {\n            doSetGroups(toolbar, groups);\n            refresh(toolbar, detail);\n          },\n          refresh: toolbar => refresh(toolbar, detail),\n          toggle: toolbar => toggleToolbar(toolbar, detail),\n          isOpen: toolbar => isOpen(toolbar, detail)\n        },\n        domModification: { attributes: { role: 'group' } }\n      };\n    };\n    const SplitSlidingToolbar = composite({\n      name: 'SplitSlidingToolbar',\n      configFields: schema$8(),\n      partFields: parts$4(),\n      factory: factory$7,\n      apis: {\n        setGroups: (apis, toolbar, groups) => {\n          apis.setGroups(toolbar, groups);\n        },\n        refresh: (apis, toolbar) => {\n          apis.refresh(toolbar);\n        },\n        toggle: (apis, toolbar) => {\n          apis.toggle(toolbar);\n        },\n        isOpen: (apis, toolbar) => apis.isOpen(toolbar)\n      }\n    });\n\n    const renderToolbarGroupCommon = toolbarGroup => {\n      const attributes = toolbarGroup.title.fold(() => ({}), title => ({ attributes: { title } }));\n      return {\n        dom: {\n          tag: 'div',\n          classes: ['tox-toolbar__group'],\n          ...attributes\n        },\n        components: [ToolbarGroup.parts.items({})],\n        items: toolbarGroup.items,\n        markers: { itemSelector: '*:not(.tox-split-button) > .tox-tbtn:not([disabled]), ' + '.tox-split-button:not([disabled]), ' + '.tox-toolbar-nav-js:not([disabled])' },\n        tgroupBehaviours: derive$1([\n          Tabstopping.config({}),\n          Focusing.config({})\n        ])\n      };\n    };\n    const renderToolbarGroup = toolbarGroup => ToolbarGroup.sketch(renderToolbarGroupCommon(toolbarGroup));\n    const getToolbarBehaviours = (toolbarSpec, modeName) => {\n      const onAttached = runOnAttached(component => {\n        const groups = map$2(toolbarSpec.initGroups, renderToolbarGroup);\n        Toolbar.setGroups(component, groups);\n      });\n      return derive$1([\n        DisablingConfigs.toolbarButton(toolbarSpec.providers.isDisabled),\n        receivingConfig(),\n        Keying.config({\n          mode: modeName,\n          onEscape: toolbarSpec.onEscape,\n          selector: '.tox-toolbar__group'\n        }),\n        config('toolbar-events', [onAttached])\n      ]);\n    };\n    const renderMoreToolbarCommon = toolbarSpec => {\n      const modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n      return {\n        uid: toolbarSpec.uid,\n        dom: {\n          tag: 'div',\n          classes: ['tox-toolbar-overlord']\n        },\n        parts: {\n          'overflow-group': renderToolbarGroupCommon({\n            title: Optional.none(),\n            items: []\n          }),\n          'overflow-button': renderIconButtonSpec({\n            name: 'more',\n            icon: Optional.some('more-drawer'),\n            enabled: true,\n            tooltip: Optional.some('More...'),\n            primary: false,\n            buttonType: Optional.none(),\n            borderless: false\n          }, Optional.none(), toolbarSpec.providers)\n        },\n        splitToolbarBehaviours: getToolbarBehaviours(toolbarSpec, modeName)\n      };\n    };\n    const renderFloatingMoreToolbar = toolbarSpec => {\n      const baseSpec = renderMoreToolbarCommon(toolbarSpec);\n      const overflowXOffset = 4;\n      const primary = SplitFloatingToolbar.parts.primary({\n        dom: {\n          tag: 'div',\n          classes: ['tox-toolbar__primary']\n        }\n      });\n      return SplitFloatingToolbar.sketch({\n        ...baseSpec,\n        lazySink: toolbarSpec.getSink,\n        getOverflowBounds: () => {\n          const headerElem = toolbarSpec.moreDrawerData.lazyHeader().element;\n          const headerBounds = absolute$2(headerElem);\n          const docElem = documentElement(headerElem);\n          const docBounds = absolute$2(docElem);\n          const height = Math.max(docElem.dom.scrollHeight, docBounds.height);\n          return bounds(headerBounds.x + overflowXOffset, docBounds.y, headerBounds.width - overflowXOffset * 2, height);\n        },\n        parts: {\n          ...baseSpec.parts,\n          overflow: {\n            dom: {\n              tag: 'div',\n              classes: ['tox-toolbar__overflow'],\n              attributes: toolbarSpec.attributes\n            }\n          }\n        },\n        components: [primary],\n        markers: { overflowToggledClass: 'tox-tbtn--enabled' }\n      });\n    };\n    const renderSlidingMoreToolbar = toolbarSpec => {\n      const primary = SplitSlidingToolbar.parts.primary({\n        dom: {\n          tag: 'div',\n          classes: ['tox-toolbar__primary']\n        }\n      });\n      const overflow = SplitSlidingToolbar.parts.overflow({\n        dom: {\n          tag: 'div',\n          classes: ['tox-toolbar__overflow']\n        }\n      });\n      const baseSpec = renderMoreToolbarCommon(toolbarSpec);\n      return SplitSlidingToolbar.sketch({\n        ...baseSpec,\n        components: [\n          primary,\n          overflow\n        ],\n        markers: {\n          openClass: 'tox-toolbar__overflow--open',\n          closedClass: 'tox-toolbar__overflow--closed',\n          growingClass: 'tox-toolbar__overflow--growing',\n          shrinkingClass: 'tox-toolbar__overflow--shrinking',\n          overflowToggledClass: 'tox-tbtn--enabled'\n        },\n        onOpened: comp => {\n          comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'opened' });\n        },\n        onClosed: comp => {\n          comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'closed' });\n        }\n      });\n    };\n    const renderToolbar = toolbarSpec => {\n      const modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n      return Toolbar.sketch({\n        uid: toolbarSpec.uid,\n        dom: {\n          tag: 'div',\n          classes: ['tox-toolbar'].concat(toolbarSpec.type === ToolbarMode$1.scrolling ? ['tox-toolbar--scrolling'] : [])\n        },\n        components: [Toolbar.parts.groups({})],\n        toolbarBehaviours: getToolbarBehaviours(toolbarSpec, modeName)\n      });\n    };\n\n    const factory$6 = (detail, components, _spec) => {\n      const apis = {\n        getSocket: comp => {\n          return parts$a.getPart(comp, detail, 'socket');\n        },\n        setSidebar: (comp, panelConfigs, showSidebar) => {\n          parts$a.getPart(comp, detail, 'sidebar').each(sidebar => setSidebar(sidebar, panelConfigs, showSidebar));\n        },\n        toggleSidebar: (comp, name) => {\n          parts$a.getPart(comp, detail, 'sidebar').each(sidebar => toggleSidebar(sidebar, name));\n        },\n        whichSidebar: comp => {\n          return parts$a.getPart(comp, detail, 'sidebar').bind(whichSidebar).getOrNull();\n        },\n        getHeader: comp => {\n          return parts$a.getPart(comp, detail, 'header');\n        },\n        getToolbar: comp => {\n          return parts$a.getPart(comp, detail, 'toolbar');\n        },\n        setToolbar: (comp, groups) => {\n          parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n            const renderedGroups = map$2(groups, renderToolbarGroup);\n            toolbar.getApis().setGroups(toolbar, renderedGroups);\n          });\n        },\n        setToolbars: (comp, toolbars) => {\n          parts$a.getPart(comp, detail, 'multiple-toolbar').each(mToolbar => {\n            const renderedToolbars = map$2(toolbars, g => map$2(g, renderToolbarGroup));\n            CustomList.setItems(mToolbar, renderedToolbars);\n          });\n        },\n        refreshToolbar: comp => {\n          const toolbar = parts$a.getPart(comp, detail, 'toolbar');\n          toolbar.each(toolbar => toolbar.getApis().refresh(toolbar));\n        },\n        toggleToolbarDrawer: comp => {\n          parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n            mapFrom(toolbar.getApis().toggle, toggle => toggle(toolbar));\n          });\n        },\n        isToolbarDrawerToggled: comp => {\n          return parts$a.getPart(comp, detail, 'toolbar').bind(toolbar => Optional.from(toolbar.getApis().isOpen).map(isOpen => isOpen(toolbar))).getOr(false);\n        },\n        getThrobber: comp => {\n          return parts$a.getPart(comp, detail, 'throbber');\n        },\n        focusToolbar: comp => {\n          const optToolbar = parts$a.getPart(comp, detail, 'toolbar').orThunk(() => parts$a.getPart(comp, detail, 'multiple-toolbar'));\n          optToolbar.each(toolbar => {\n            Keying.focusIn(toolbar);\n          });\n        },\n        setMenubar: (comp, menus) => {\n          parts$a.getPart(comp, detail, 'menubar').each(menubar => {\n            SilverMenubar.setMenus(menubar, menus);\n          });\n        },\n        focusMenubar: comp => {\n          parts$a.getPart(comp, detail, 'menubar').each(menubar => {\n            SilverMenubar.focus(menubar);\n          });\n        }\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components,\n        apis,\n        behaviours: detail.behaviours\n      };\n    };\n    const partMenubar = partType.optional({\n      factory: SilverMenubar,\n      name: 'menubar',\n      schema: [required$1('backstage')]\n    });\n    const toolbarFactory = spec => {\n      if (spec.type === ToolbarMode$1.sliding) {\n        return renderSlidingMoreToolbar;\n      } else if (spec.type === ToolbarMode$1.floating) {\n        return renderFloatingMoreToolbar;\n      } else {\n        return renderToolbar;\n      }\n    };\n    const partMultipleToolbar = partType.optional({\n      factory: {\n        sketch: spec => CustomList.sketch({\n          uid: spec.uid,\n          dom: spec.dom,\n          listBehaviours: derive$1([Keying.config({\n              mode: 'acyclic',\n              selector: '.tox-toolbar'\n            })]),\n          makeItem: () => renderToolbar({\n            type: spec.type,\n            uid: generate$6('multiple-toolbar-item'),\n            cyclicKeying: false,\n            initGroups: [],\n            providers: spec.providers,\n            onEscape: () => {\n              spec.onEscape();\n              return Optional.some(true);\n            }\n          }),\n          setupItem: (_mToolbar, tc, data, _index) => {\n            Toolbar.setGroups(tc, data);\n          },\n          shell: true\n        })\n      },\n      name: 'multiple-toolbar',\n      schema: [\n        required$1('dom'),\n        required$1('onEscape')\n      ]\n    });\n    const partToolbar = partType.optional({\n      factory: {\n        sketch: spec => {\n          const renderer = toolbarFactory(spec);\n          const toolbarSpec = {\n            type: spec.type,\n            uid: spec.uid,\n            onEscape: () => {\n              spec.onEscape();\n              return Optional.some(true);\n            },\n            cyclicKeying: false,\n            initGroups: [],\n            getSink: spec.getSink,\n            providers: spec.providers,\n            moreDrawerData: {\n              lazyToolbar: spec.lazyToolbar,\n              lazyMoreButton: spec.lazyMoreButton,\n              lazyHeader: spec.lazyHeader\n            },\n            attributes: spec.attributes\n          };\n          return renderer(toolbarSpec);\n        }\n      },\n      name: 'toolbar',\n      schema: [\n        required$1('dom'),\n        required$1('onEscape'),\n        required$1('getSink')\n      ]\n    });\n    const partHeader = partType.optional({\n      factory: { sketch: renderHeader },\n      name: 'header',\n      schema: [required$1('dom')]\n    });\n    const partPromotion = partType.optional({\n      factory: { sketch: renderPromotion },\n      name: 'promotion',\n      schema: [required$1('dom')]\n    });\n    const partSocket = partType.optional({\n      name: 'socket',\n      schema: [required$1('dom')]\n    });\n    const partSidebar = partType.optional({\n      factory: { sketch: renderSidebar },\n      name: 'sidebar',\n      schema: [required$1('dom')]\n    });\n    const partThrobber = partType.optional({\n      factory: { sketch: renderThrobber },\n      name: 'throbber',\n      schema: [required$1('dom')]\n    });\n    var OuterContainer = composite({\n      name: 'OuterContainer',\n      factory: factory$6,\n      configFields: [\n        required$1('dom'),\n        required$1('behaviours')\n      ],\n      partFields: [\n        partHeader,\n        partMenubar,\n        partToolbar,\n        partMultipleToolbar,\n        partSocket,\n        partSidebar,\n        partPromotion,\n        partThrobber\n      ],\n      apis: {\n        getSocket: (apis, comp) => {\n          return apis.getSocket(comp);\n        },\n        setSidebar: (apis, comp, panelConfigs, showSidebar) => {\n          apis.setSidebar(comp, panelConfigs, showSidebar);\n        },\n        toggleSidebar: (apis, comp, name) => {\n          apis.toggleSidebar(comp, name);\n        },\n        whichSidebar: (apis, comp) => {\n          return apis.whichSidebar(comp);\n        },\n        getHeader: (apis, comp) => {\n          return apis.getHeader(comp);\n        },\n        getToolbar: (apis, comp) => {\n          return apis.getToolbar(comp);\n        },\n        setToolbar: (apis, comp, groups) => {\n          apis.setToolbar(comp, groups);\n        },\n        setToolbars: (apis, comp, toolbars) => {\n          apis.setToolbars(comp, toolbars);\n        },\n        refreshToolbar: (apis, comp) => {\n          return apis.refreshToolbar(comp);\n        },\n        toggleToolbarDrawer: (apis, comp) => {\n          apis.toggleToolbarDrawer(comp);\n        },\n        isToolbarDrawerToggled: (apis, comp) => {\n          return apis.isToolbarDrawerToggled(comp);\n        },\n        getThrobber: (apis, comp) => {\n          return apis.getThrobber(comp);\n        },\n        setMenubar: (apis, comp, menus) => {\n          apis.setMenubar(comp, menus);\n        },\n        focusMenubar: (apis, comp) => {\n          apis.focusMenubar(comp);\n        },\n        focusToolbar: (apis, comp) => {\n          apis.focusToolbar(comp);\n        }\n      }\n    });\n\n    const defaultMenubar = 'file edit view insert format tools table help';\n    const defaultMenus = {\n      file: {\n        title: 'File',\n        items: 'newdocument restoredraft | preview | export print | deleteallconversations'\n      },\n      edit: {\n        title: 'Edit',\n        items: 'undo redo | cut copy paste pastetext | selectall | searchreplace'\n      },\n      view: {\n        title: 'View',\n        items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments'\n      },\n      insert: {\n        title: 'Insert',\n        items: 'image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents footnotes | mergetags | insertdatetime'\n      },\n      format: {\n        title: 'Format',\n        items: 'bold italic underline strikethrough superscript subscript codeformat | styles blocks fontfamily fontsize align lineheight | forecolor backcolor | language | removeformat'\n      },\n      tools: {\n        title: 'Tools',\n        items: 'spellchecker spellcheckerlanguage | autocorrect capitalization | a11ycheck code wordcount'\n      },\n      table: {\n        title: 'Table',\n        items: 'inserttable | cell row column | advtablesort | tableprops deletetable'\n      },\n      help: {\n        title: 'Help',\n        items: 'help'\n      }\n    };\n    const make = (menu, registry, editor) => {\n      const removedMenuItems = getRemovedMenuItems(editor).split(/[ ,]/);\n      return {\n        text: menu.title,\n        getItems: () => bind$3(menu.items, i => {\n          const itemName = i.toLowerCase();\n          if (itemName.trim().length === 0) {\n            return [];\n          } else if (exists(removedMenuItems, removedMenuItem => removedMenuItem === itemName)) {\n            return [];\n          } else if (itemName === 'separator' || itemName === '|') {\n            return [{ type: 'separator' }];\n          } else if (registry.menuItems[itemName]) {\n            return [registry.menuItems[itemName]];\n          } else {\n            return [];\n          }\n        })\n      };\n    };\n    const parseItemsString = items => {\n      return items.split(' ');\n    };\n    const identifyMenus = (editor, registry) => {\n      const rawMenuData = {\n        ...defaultMenus,\n        ...registry.menus\n      };\n      const userDefinedMenus = keys(registry.menus).length > 0;\n      const menubar = registry.menubar === undefined || registry.menubar === true ? parseItemsString(defaultMenubar) : parseItemsString(registry.menubar === false ? '' : registry.menubar);\n      const validMenus = filter$2(menubar, menuName => {\n        const isDefaultMenu = has$2(defaultMenus, menuName);\n        if (userDefinedMenus) {\n          return isDefaultMenu || get$g(registry.menus, menuName).exists(menu => has$2(menu, 'items'));\n        } else {\n          return isDefaultMenu;\n        }\n      });\n      const menus = map$2(validMenus, menuName => {\n        const menuData = rawMenuData[menuName];\n        return make({\n          title: menuData.title,\n          items: parseItemsString(menuData.items)\n        }, registry, editor);\n      });\n      return filter$2(menus, menu => {\n        const isNotSeparator = item => isString(item) || item.type !== 'separator';\n        return menu.getItems().length > 0 && exists(menu.getItems(), isNotSeparator);\n      });\n    };\n\n    const fireSkinLoaded = editor => {\n      const done = () => {\n        editor._skinLoaded = true;\n        fireSkinLoaded$1(editor);\n      };\n      return () => {\n        if (editor.initialized) {\n          done();\n        } else {\n          editor.on('init', done);\n        }\n      };\n    };\n    const fireSkinLoadError = (editor, err) => () => fireSkinLoadError$1(editor, { message: err });\n\n    const loadStylesheet = (editor, stylesheetUrl, styleSheetLoader) => {\n      editor.on('remove', () => styleSheetLoader.unload(stylesheetUrl));\n      return styleSheetLoader.load(stylesheetUrl);\n    };\n    const loadUiSkins = (editor, skinUrl) => {\n      const skinUiCss = skinUrl + '/skin.min.css';\n      return loadStylesheet(editor, skinUiCss, editor.ui.styleSheetLoader);\n    };\n    const loadShadowDomUiSkins = (editor, skinUrl) => {\n      const isInShadowRoot$1 = isInShadowRoot(SugarElement.fromDom(editor.getElement()));\n      if (isInShadowRoot$1) {\n        const shadowDomSkinCss = skinUrl + '/skin.shadowdom.min.css';\n        return loadStylesheet(editor, shadowDomSkinCss, global$7.DOM.styleSheetLoader);\n      } else {\n        return Promise.resolve();\n      }\n    };\n    const loadSkin = (isInline, editor) => {\n      const skinUrl = getSkinUrl(editor);\n      if (skinUrl) {\n        editor.contentCSS.push(skinUrl + (isInline ? '/content.inline' : '/content') + '.min.css');\n      }\n      if (!isSkinDisabled(editor) && isString(skinUrl)) {\n        Promise.all([\n          loadUiSkins(editor, skinUrl),\n          loadShadowDomUiSkins(editor, skinUrl)\n        ]).then(fireSkinLoaded(editor), fireSkinLoadError(editor, 'Skin could not be loaded'));\n      } else {\n        fireSkinLoaded(editor)();\n      }\n    };\n    const iframe = curry(loadSkin, false);\n    const inline = curry(loadSkin, true);\n\n    const onSetupFormatToggle = (editor, name) => api => {\n      const boundCallback = unbindable();\n      const init = () => {\n        api.setActive(editor.formatter.match(name));\n        const binding = editor.formatter.formatChanged(name, api.setActive);\n        boundCallback.set(binding);\n      };\n      editor.initialized ? init() : editor.once('init', init);\n      return () => {\n        editor.off('init', init);\n        boundCallback.clear();\n      };\n    };\n    const onSetupEvent = (editor, event, f) => api => {\n      const handleEvent = () => f(api);\n      const init = () => {\n        f(api);\n        editor.on(event, handleEvent);\n      };\n      editor.initialized ? init() : editor.once('init', init);\n      return () => {\n        editor.off('init', init);\n        editor.off(event, handleEvent);\n      };\n    };\n    const onActionToggleFormat$1 = editor => rawItem => () => {\n      editor.undoManager.transact(() => {\n        editor.focus();\n        editor.execCommand('mceToggleFormat', false, rawItem.format);\n      });\n    };\n    const onActionExecCommand = (editor, command) => () => editor.execCommand(command);\n\n    const generateSelectItems = (_editor, backstage, spec) => {\n      const generateItem = (rawItem, response, invalid, value) => {\n        const translatedText = backstage.shared.providers.translate(rawItem.title);\n        if (rawItem.type === 'separator') {\n          return Optional.some({\n            type: 'separator',\n            text: translatedText\n          });\n        } else if (rawItem.type === 'submenu') {\n          const items = bind$3(rawItem.getStyleItems(), si => validate(si, response, value));\n          if (response === 0 && items.length <= 0) {\n            return Optional.none();\n          } else {\n            return Optional.some({\n              type: 'nestedmenuitem',\n              text: translatedText,\n              enabled: items.length > 0,\n              getSubmenuItems: () => bind$3(rawItem.getStyleItems(), si => validate(si, response, value))\n            });\n          }\n        } else {\n          return Optional.some({\n            type: 'togglemenuitem',\n            text: translatedText,\n            icon: rawItem.icon,\n            active: rawItem.isSelected(value),\n            enabled: !invalid,\n            onAction: spec.onAction(rawItem),\n            ...rawItem.getStylePreview().fold(() => ({}), preview => ({ meta: { style: preview } }))\n          });\n        }\n      };\n      const validate = (item, response, value) => {\n        const invalid = item.type === 'formatter' && spec.isInvalid(item);\n        if (response === 0) {\n          return invalid ? [] : generateItem(item, response, false, value).toArray();\n        } else {\n          return generateItem(item, response, invalid, value).toArray();\n        }\n      };\n      const validateItems = preItems => {\n        const value = spec.getCurrentValue();\n        const response = spec.shouldHide ? 0 : 1;\n        return bind$3(preItems, item => validate(item, response, value));\n      };\n      const getFetch = (backstage, getStyleItems) => (comp, callback) => {\n        const preItems = getStyleItems();\n        const items = validateItems(preItems);\n        const menu = build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n          isHorizontalMenu: false,\n          search: Optional.none()\n        });\n        callback(menu);\n      };\n      return {\n        validateItems,\n        getFetch\n      };\n    };\n    const createMenuItems = (editor, backstage, spec) => {\n      const dataset = spec.dataset;\n      const getStyleItems = dataset.type === 'basic' ? () => map$2(dataset.data, d => processBasic(d, spec.isSelectedFor, spec.getPreviewFor)) : dataset.getData;\n      return {\n        items: generateSelectItems(editor, backstage, spec),\n        getStyleItems\n      };\n    };\n    const createSelectButton = (editor, backstage, spec) => {\n      const {items, getStyleItems} = createMenuItems(editor, backstage, spec);\n      const getApi = comp => ({ getComponent: constant$1(comp) });\n      const onSetup = onSetupEvent(editor, 'NodeChange', api => {\n        const comp = api.getComponent();\n        spec.updateText(comp);\n      });\n      return renderCommonDropdown({\n        text: spec.icon.isSome() ? Optional.none() : spec.text,\n        icon: spec.icon,\n        tooltip: Optional.from(spec.tooltip),\n        role: Optional.none(),\n        fetch: items.getFetch(backstage, getStyleItems),\n        onSetup,\n        getApi,\n        columns: 1,\n        presets: 'normal',\n        classes: spec.icon.isSome() ? [] : ['bespoke'],\n        dropdownBehaviours: []\n      }, 'tox-tbtn', backstage.shared);\n    };\n\n    const process = rawFormats => map$2(rawFormats, item => {\n      let title = item, format = item;\n      const values = item.split('=');\n      if (values.length > 1) {\n        title = values[0];\n        format = values[1];\n      }\n      return {\n        title,\n        format\n      };\n    });\n    const buildBasicStaticDataset = data => ({\n      type: 'basic',\n      data\n    });\n    var Delimiter;\n    (function (Delimiter) {\n      Delimiter[Delimiter['SemiColon'] = 0] = 'SemiColon';\n      Delimiter[Delimiter['Space'] = 1] = 'Space';\n    }(Delimiter || (Delimiter = {})));\n    const split = (rawFormats, delimiter) => {\n      if (delimiter === Delimiter.SemiColon) {\n        return rawFormats.replace(/;$/, '').split(';');\n      } else {\n        return rawFormats.split(' ');\n      }\n    };\n    const buildBasicSettingsDataset = (editor, settingName, delimiter) => {\n      const rawFormats = editor.options.get(settingName);\n      const data = process(split(rawFormats, delimiter));\n      return {\n        type: 'basic',\n        data\n      };\n    };\n\n    const alignMenuItems = [\n      {\n        title: 'Left',\n        icon: 'align-left',\n        format: 'alignleft',\n        command: 'JustifyLeft'\n      },\n      {\n        title: 'Center',\n        icon: 'align-center',\n        format: 'aligncenter',\n        command: 'JustifyCenter'\n      },\n      {\n        title: 'Right',\n        icon: 'align-right',\n        format: 'alignright',\n        command: 'JustifyRight'\n      },\n      {\n        title: 'Justify',\n        icon: 'align-justify',\n        format: 'alignjustify',\n        command: 'JustifyFull'\n      }\n    ];\n    const getSpec$4 = editor => {\n      const getMatchingValue = () => find$5(alignMenuItems, item => editor.formatter.match(item.format));\n      const isSelectedFor = format => () => editor.formatter.match(format);\n      const getPreviewFor = _format => Optional.none;\n      const updateSelectMenuIcon = comp => {\n        const match = getMatchingValue();\n        const alignment = match.fold(constant$1('left'), item => item.title.toLowerCase());\n        emitWith(comp, updateMenuIcon, { icon: `align-${ alignment }` });\n      };\n      const dataset = buildBasicStaticDataset(alignMenuItems);\n      const onAction = rawItem => () => find$5(alignMenuItems, item => item.format === rawItem.format).each(item => editor.execCommand(item.command));\n      return {\n        tooltip: 'Align',\n        text: Optional.none(),\n        icon: Optional.some('align-left'),\n        isSelectedFor,\n        getCurrentValue: Optional.none,\n        getPreviewFor,\n        onAction,\n        updateText: updateSelectMenuIcon,\n        dataset,\n        shouldHide: false,\n        isInvalid: item => !editor.formatter.canApply(item.format)\n      };\n    };\n    const createAlignButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$4(editor));\n    const createAlignMenu = (editor, backstage) => {\n      const menuItems = createMenuItems(editor, backstage, getSpec$4(editor));\n      editor.ui.registry.addNestedMenuItem('align', {\n        text: backstage.shared.providers.translate('Align'),\n        getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n      });\n    };\n\n    const findNearest = (editor, getStyles) => {\n      const styles = getStyles();\n      const formats = map$2(styles, style => style.format);\n      return Optional.from(editor.formatter.closest(formats)).bind(fmt => find$5(styles, data => data.format === fmt)).orThunk(() => someIf(editor.formatter.match('p'), {\n        title: 'Paragraph',\n        format: 'p'\n      }));\n    };\n\n    const getSpec$3 = editor => {\n      const fallbackFormat = 'Paragraph';\n      const isSelectedFor = format => () => editor.formatter.match(format);\n      const getPreviewFor = format => () => {\n        const fmt = editor.formatter.get(format);\n        if (fmt) {\n          return Optional.some({\n            tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n            styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n          });\n        } else {\n          return Optional.none();\n        }\n      };\n      const updateSelectMenuText = comp => {\n        const detectedFormat = findNearest(editor, () => dataset.data);\n        const text = detectedFormat.fold(constant$1(fallbackFormat), fmt => fmt.title);\n        emitWith(comp, updateMenuText, { text });\n      };\n      const dataset = buildBasicSettingsDataset(editor, 'block_formats', Delimiter.SemiColon);\n      return {\n        tooltip: 'Blocks',\n        text: Optional.some(fallbackFormat),\n        icon: Optional.none(),\n        isSelectedFor,\n        getCurrentValue: Optional.none,\n        getPreviewFor,\n        onAction: onActionToggleFormat$1(editor),\n        updateText: updateSelectMenuText,\n        dataset,\n        shouldHide: false,\n        isInvalid: item => !editor.formatter.canApply(item.format)\n      };\n    };\n    const createBlocksButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$3(editor));\n    const createBlocksMenu = (editor, backstage) => {\n      const menuItems = createMenuItems(editor, backstage, getSpec$3(editor));\n      editor.ui.registry.addNestedMenuItem('blocks', {\n        text: 'Blocks',\n        getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n      });\n    };\n\n    const systemStackFonts = [\n      '-apple-system',\n      'Segoe UI',\n      'Roboto',\n      'Helvetica Neue',\n      'sans-serif'\n    ];\n    const splitFonts = fontFamily => {\n      const fonts = fontFamily.split(/\\s*,\\s*/);\n      return map$2(fonts, font => font.replace(/^['\"]+|['\"]+$/g, ''));\n    };\n    const isSystemFontStack = fontFamily => {\n      const matchesSystemStack = () => {\n        const fonts = splitFonts(fontFamily.toLowerCase());\n        return forall(systemStackFonts, font => fonts.indexOf(font.toLowerCase()) > -1);\n      };\n      return fontFamily.indexOf('-apple-system') === 0 && matchesSystemStack();\n    };\n    const getSpec$2 = editor => {\n      const systemFont = 'System Font';\n      const getMatchingValue = () => {\n        const getFirstFont = fontFamily => fontFamily ? splitFonts(fontFamily)[0] : '';\n        const fontFamily = editor.queryCommandValue('FontName');\n        const items = dataset.data;\n        const font = fontFamily ? fontFamily.toLowerCase() : '';\n        const matchOpt = find$5(items, item => {\n          const format = item.format;\n          return format.toLowerCase() === font || getFirstFont(format).toLowerCase() === getFirstFont(font).toLowerCase();\n        }).orThunk(() => {\n          return someIf(isSystemFontStack(font), {\n            title: systemFont,\n            format: font\n          });\n        });\n        return {\n          matchOpt,\n          font: fontFamily\n        };\n      };\n      const isSelectedFor = item => valueOpt => valueOpt.exists(value => value.format === item);\n      const getCurrentValue = () => {\n        const {matchOpt} = getMatchingValue();\n        return matchOpt;\n      };\n      const getPreviewFor = item => () => Optional.some({\n        tag: 'div',\n        styles: item.indexOf('dings') === -1 ? { 'font-family': item } : {}\n      });\n      const onAction = rawItem => () => {\n        editor.undoManager.transact(() => {\n          editor.focus();\n          editor.execCommand('FontName', false, rawItem.format);\n        });\n      };\n      const updateSelectMenuText = comp => {\n        const {matchOpt, font} = getMatchingValue();\n        const text = matchOpt.fold(constant$1(font), item => item.title);\n        emitWith(comp, updateMenuText, { text });\n      };\n      const dataset = buildBasicSettingsDataset(editor, 'font_family_formats', Delimiter.SemiColon);\n      return {\n        tooltip: 'Fonts',\n        text: Optional.some(systemFont),\n        icon: Optional.none(),\n        isSelectedFor,\n        getCurrentValue,\n        getPreviewFor,\n        onAction,\n        updateText: updateSelectMenuText,\n        dataset,\n        shouldHide: false,\n        isInvalid: never\n      };\n    };\n    const createFontFamilyButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$2(editor));\n    const createFontFamilyMenu = (editor, backstage) => {\n      const menuItems = createMenuItems(editor, backstage, getSpec$2(editor));\n      editor.ui.registry.addNestedMenuItem('fontfamily', {\n        text: backstage.shared.providers.translate('Fonts'),\n        getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n      });\n    };\n\n    const legacyFontSizes = {\n      '8pt': '1',\n      '10pt': '2',\n      '12pt': '3',\n      '14pt': '4',\n      '18pt': '5',\n      '24pt': '6',\n      '36pt': '7'\n    };\n    const keywordFontSizes = {\n      'xx-small': '7pt',\n      'x-small': '8pt',\n      'small': '10pt',\n      'medium': '12pt',\n      'large': '14pt',\n      'x-large': '18pt',\n      'xx-large': '24pt'\n    };\n    const round = (number, precision) => {\n      const factor = Math.pow(10, precision);\n      return Math.round(number * factor) / factor;\n    };\n    const toPt = (fontSize, precision) => {\n      if (/[0-9.]+px$/.test(fontSize)) {\n        return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n      } else {\n        return get$g(keywordFontSizes, fontSize).getOr(fontSize);\n      }\n    };\n    const toLegacy = fontSize => get$g(legacyFontSizes, fontSize).getOr('');\n    const getSpec$1 = editor => {\n      const getMatchingValue = () => {\n        let matchOpt = Optional.none();\n        const items = dataset.data;\n        const fontSize = editor.queryCommandValue('FontSize');\n        if (fontSize) {\n          for (let precision = 3; matchOpt.isNone() && precision >= 0; precision--) {\n            const pt = toPt(fontSize, precision);\n            const legacy = toLegacy(pt);\n            matchOpt = find$5(items, item => item.format === fontSize || item.format === pt || item.format === legacy);\n          }\n        }\n        return {\n          matchOpt,\n          size: fontSize\n        };\n      };\n      const isSelectedFor = item => valueOpt => valueOpt.exists(value => value.format === item);\n      const getCurrentValue = () => {\n        const {matchOpt} = getMatchingValue();\n        return matchOpt;\n      };\n      const getPreviewFor = constant$1(Optional.none);\n      const onAction = rawItem => () => {\n        editor.undoManager.transact(() => {\n          editor.focus();\n          editor.execCommand('FontSize', false, rawItem.format);\n        });\n      };\n      const updateSelectMenuText = comp => {\n        const {matchOpt, size} = getMatchingValue();\n        const text = matchOpt.fold(constant$1(size), match => match.title);\n        emitWith(comp, updateMenuText, { text });\n      };\n      const dataset = buildBasicSettingsDataset(editor, 'font_size_formats', Delimiter.Space);\n      return {\n        tooltip: 'Font sizes',\n        text: Optional.some('12pt'),\n        icon: Optional.none(),\n        isSelectedFor,\n        getPreviewFor,\n        getCurrentValue,\n        onAction,\n        updateText: updateSelectMenuText,\n        dataset,\n        shouldHide: false,\n        isInvalid: never\n      };\n    };\n    const createFontSizeButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$1(editor));\n    const createFontSizeMenu = (editor, backstage) => {\n      const menuItems = createMenuItems(editor, backstage, getSpec$1(editor));\n      editor.ui.registry.addNestedMenuItem('fontsize', {\n        text: 'Font sizes',\n        getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n      });\n    };\n\n    const getSpec = (editor, dataset) => {\n      const fallbackFormat = 'Paragraph';\n      const isSelectedFor = format => () => editor.formatter.match(format);\n      const getPreviewFor = format => () => {\n        const fmt = editor.formatter.get(format);\n        return fmt !== undefined ? Optional.some({\n          tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n          styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n        }) : Optional.none();\n      };\n      const updateSelectMenuText = comp => {\n        const getFormatItems = fmt => {\n          if (isNestedFormat(fmt)) {\n            return bind$3(fmt.items, getFormatItems);\n          } else if (isFormatReference(fmt)) {\n            return [{\n                title: fmt.title,\n                format: fmt.format\n              }];\n          } else {\n            return [];\n          }\n        };\n        const flattenedItems = bind$3(getStyleFormats(editor), getFormatItems);\n        const detectedFormat = findNearest(editor, constant$1(flattenedItems));\n        const text = detectedFormat.fold(constant$1(fallbackFormat), fmt => fmt.title);\n        emitWith(comp, updateMenuText, { text });\n      };\n      return {\n        tooltip: 'Formats',\n        text: Optional.some(fallbackFormat),\n        icon: Optional.none(),\n        isSelectedFor,\n        getCurrentValue: Optional.none,\n        getPreviewFor,\n        onAction: onActionToggleFormat$1(editor),\n        updateText: updateSelectMenuText,\n        shouldHide: shouldAutoHideStyleFormats(editor),\n        isInvalid: item => !editor.formatter.canApply(item.format),\n        dataset\n      };\n    };\n    const createStylesButton = (editor, backstage) => {\n      const dataset = {\n        type: 'advanced',\n        ...backstage.styles\n      };\n      return createSelectButton(editor, backstage, getSpec(editor, dataset));\n    };\n    const createStylesMenu = (editor, backstage) => {\n      const dataset = {\n        type: 'advanced',\n        ...backstage.styles\n      };\n      const menuItems = createMenuItems(editor, backstage, getSpec(editor, dataset));\n      editor.ui.registry.addNestedMenuItem('styles', {\n        text: 'Formats',\n        getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n      });\n    };\n\n    const events$3 = (reflectingConfig, reflectingState) => {\n      const update = (component, data) => {\n        reflectingConfig.updateState.each(updateState => {\n          const newState = updateState(component, data);\n          reflectingState.set(newState);\n        });\n        reflectingConfig.renderComponents.each(renderComponents => {\n          const newComponents = renderComponents(data, reflectingState.get());\n          const replacer = reflectingConfig.reuseDom ? withReuse : withoutReuse;\n          replacer(component, newComponents);\n        });\n      };\n      return derive$2([\n        run$1(receive(), (component, message) => {\n          const receivingData = message;\n          if (!receivingData.universal) {\n            const channel = reflectingConfig.channel;\n            if (contains$2(receivingData.channels, channel)) {\n              update(component, receivingData.data);\n            }\n          }\n        }),\n        runOnAttached((comp, _se) => {\n          reflectingConfig.initialData.each(rawData => {\n            update(comp, rawData);\n          });\n        })\n      ]);\n    };\n\n    var ActiveReflecting = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        events: events$3\n    });\n\n    const getState = (component, replaceConfig, reflectState) => reflectState;\n\n    var ReflectingApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        getState: getState\n    });\n\n    var ReflectingSchema = [\n      required$1('channel'),\n      option$3('renderComponents'),\n      option$3('updateState'),\n      option$3('initialData'),\n      defaultedBoolean('reuseDom', true)\n    ];\n\n    const init$3 = () => {\n      const cell = Cell(Optional.none());\n      const clear = () => cell.set(Optional.none());\n      const readState = () => cell.get().getOr('none');\n      return {\n        readState,\n        get: cell.get,\n        set: cell.set,\n        clear\n      };\n    };\n\n    var ReflectingState = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        init: init$3\n    });\n\n    const Reflecting = create$3({\n      fields: ReflectingSchema,\n      name: 'reflecting',\n      active: ActiveReflecting,\n      apis: ReflectingApis,\n      state: ReflectingState\n    });\n\n    const schema$7 = constant$1([\n      required$1('toggleClass'),\n      required$1('fetch'),\n      onStrictHandler('onExecute'),\n      defaulted('getHotspot', Optional.some),\n      defaulted('getAnchorOverrides', constant$1({})),\n      schema$y(),\n      onStrictHandler('onItemExecute'),\n      option$3('lazySink'),\n      required$1('dom'),\n      onHandler('onOpen'),\n      field('splitDropdownBehaviours', [\n        Coupling,\n        Keying,\n        Focusing\n      ]),\n      defaulted('matchWidth', false),\n      defaulted('useMinWidth', false),\n      defaulted('eventOrder', {}),\n      option$3('role')\n    ].concat(sandboxFields()));\n    const arrowPart = required({\n      factory: Button,\n      schema: [required$1('dom')],\n      name: 'arrow',\n      defaults: () => {\n        return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n      },\n      overrides: detail => {\n        return {\n          dom: {\n            tag: 'span',\n            attributes: { role: 'presentation' }\n          },\n          action: arrow => {\n            arrow.getSystem().getByUid(detail.uid).each(emitExecute);\n          },\n          buttonBehaviours: derive$1([Toggling.config({\n              toggleOnExecute: false,\n              toggleClass: detail.toggleClass\n            })])\n        };\n      }\n    });\n    const buttonPart = required({\n      factory: Button,\n      schema: [required$1('dom')],\n      name: 'button',\n      defaults: () => {\n        return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n      },\n      overrides: detail => {\n        return {\n          dom: {\n            tag: 'span',\n            attributes: { role: 'presentation' }\n          },\n          action: btn => {\n            btn.getSystem().getByUid(detail.uid).each(splitDropdown => {\n              detail.onExecute(splitDropdown, btn);\n            });\n          }\n        };\n      }\n    });\n    const parts$3 = constant$1([\n      arrowPart,\n      buttonPart,\n      optional({\n        factory: {\n          sketch: spec => {\n            return {\n              uid: spec.uid,\n              dom: {\n                tag: 'span',\n                styles: { display: 'none' },\n                attributes: { 'aria-hidden': 'true' },\n                innerHtml: spec.text\n              }\n            };\n          }\n        },\n        schema: [required$1('text')],\n        name: 'aria-descriptor'\n      }),\n      external({\n        schema: [tieredMenuMarkers()],\n        name: 'menu',\n        defaults: detail => {\n          return {\n            onExecute: (tmenu, item) => {\n              tmenu.getSystem().getByUid(detail.uid).each(splitDropdown => {\n                detail.onItemExecute(splitDropdown, tmenu, item);\n              });\n            }\n          };\n        }\n      }),\n      partType$1()\n    ]);\n\n    const factory$5 = (detail, components, spec, externals) => {\n      const switchToMenu = sandbox => {\n        Composing.getCurrent(sandbox).each(current => {\n          Highlighting.highlightFirst(current);\n          Keying.focusIn(current);\n        });\n      };\n      const action = component => {\n        const onOpenSync = switchToMenu;\n        togglePopup(detail, identity, component, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n      };\n      const openMenu = comp => {\n        action(comp);\n        return Optional.some(true);\n      };\n      const executeOnButton = comp => {\n        const button = getPartOrDie(comp, detail, 'button');\n        emitExecute(button);\n        return Optional.some(true);\n      };\n      const buttonEvents = {\n        ...derive$2([runOnAttached((component, _simulatedEvent) => {\n            const ariaDescriptor = getPart(component, detail, 'aria-descriptor');\n            ariaDescriptor.each(descriptor => {\n              const descriptorId = generate$6('aria');\n              set$9(descriptor.element, 'id', descriptorId);\n              set$9(component.element, 'aria-describedby', descriptorId);\n            });\n          })]),\n        ...events$a(Optional.some(action))\n      };\n      const apis = {\n        repositionMenus: comp => {\n          if (Toggling.isOn(comp)) {\n            repositionMenus(comp);\n          }\n        }\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components,\n        apis,\n        eventOrder: {\n          ...detail.eventOrder,\n          [execute$5()]: [\n            'disabling',\n            'toggling',\n            'alloy.base.behaviour'\n          ]\n        },\n        events: buttonEvents,\n        behaviours: augment(detail.splitDropdownBehaviours, [\n          Coupling.config({\n            others: {\n              sandbox: hotspot => {\n                const arrow = getPartOrDie(hotspot, detail, 'arrow');\n                const extras = {\n                  onOpen: () => {\n                    Toggling.on(arrow);\n                    Toggling.on(hotspot);\n                  },\n                  onClose: () => {\n                    Toggling.off(arrow);\n                    Toggling.off(hotspot);\n                  }\n                };\n                return makeSandbox$1(detail, hotspot, extras);\n              }\n            }\n          }),\n          Keying.config({\n            mode: 'special',\n            onSpace: executeOnButton,\n            onEnter: executeOnButton,\n            onDown: openMenu\n          }),\n          Focusing.config({}),\n          Toggling.config({\n            toggleOnExecute: false,\n            aria: { mode: 'expanded' }\n          })\n        ]),\n        domModification: {\n          attributes: {\n            'role': detail.role.getOr('button'),\n            'aria-haspopup': true\n          }\n        }\n      };\n    };\n    const SplitDropdown = composite({\n      name: 'SplitDropdown',\n      configFields: schema$7(),\n      partFields: parts$3(),\n      factory: factory$5,\n      apis: { repositionMenus: (apis, comp) => apis.repositionMenus(comp) }\n    });\n\n    const getButtonApi = component => ({\n      isEnabled: () => !Disabling.isDisabled(component),\n      setEnabled: state => Disabling.set(component, !state)\n    });\n    const getToggleApi = component => ({\n      setActive: state => {\n        Toggling.set(component, state);\n      },\n      isActive: () => Toggling.isOn(component),\n      isEnabled: () => !Disabling.isDisabled(component),\n      setEnabled: state => Disabling.set(component, !state)\n    });\n    const getTooltipAttributes = (tooltip, providersBackstage) => tooltip.map(tooltip => ({\n      'aria-label': providersBackstage.translate(tooltip),\n      'title': providersBackstage.translate(tooltip)\n    })).getOr({});\n    const focusButtonEvent = generate$6('focus-button');\n    const renderCommonStructure = (icon, text, tooltip, receiver, behaviours, providersBackstage) => {\n      return {\n        dom: {\n          tag: 'button',\n          classes: ['tox-tbtn'].concat(text.isSome() ? ['tox-tbtn--select'] : []),\n          attributes: getTooltipAttributes(tooltip, providersBackstage)\n        },\n        components: componentRenderPipeline([\n          icon.map(iconName => renderIconFromPack(iconName, providersBackstage.icons)),\n          text.map(text => renderLabel(text, 'tox-tbtn', providersBackstage))\n        ]),\n        eventOrder: {\n          [mousedown()]: [\n            'focusing',\n            'alloy.base.behaviour',\n            'common-button-display-events'\n          ]\n        },\n        buttonBehaviours: derive$1([\n          DisablingConfigs.toolbarButton(providersBackstage.isDisabled),\n          receivingConfig(),\n          config('common-button-display-events', [run$1(mousedown(), (button, se) => {\n              se.event.prevent();\n              emit(button, focusButtonEvent);\n            })])\n        ].concat(receiver.map(r => Reflecting.config({\n          channel: r,\n          initialData: {\n            icon,\n            text\n          },\n          renderComponents: (data, _state) => componentRenderPipeline([\n            data.icon.map(iconName => renderIconFromPack(iconName, providersBackstage.icons)),\n            data.text.map(text => renderLabel(text, 'tox-tbtn', providersBackstage))\n          ])\n        })).toArray()).concat(behaviours.getOr([])))\n      };\n    };\n    const renderFloatingToolbarButton = (spec, backstage, identifyButtons, attributes) => {\n      const sharedBackstage = backstage.shared;\n      return FloatingToolbarButton.sketch({\n        lazySink: sharedBackstage.getSink,\n        fetch: () => Future.nu(resolve => {\n          resolve(map$2(identifyButtons(spec.items), renderToolbarGroup));\n        }),\n        markers: { toggledClass: 'tox-tbtn--enabled' },\n        parts: {\n          button: renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), Optional.none(), sharedBackstage.providers),\n          toolbar: {\n            dom: {\n              tag: 'div',\n              classes: ['tox-toolbar__overflow'],\n              attributes\n            }\n          }\n        }\n      });\n    };\n    const renderCommonToolbarButton = (spec, specialisation, providersBackstage) => {\n      const editorOffCell = Cell(noop);\n      const structure = renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), Optional.none(), providersBackstage);\n      return Button.sketch({\n        dom: structure.dom,\n        components: structure.components,\n        eventOrder: toolbarButtonEventOrder,\n        buttonBehaviours: derive$1([\n          config('toolbar-button-events', [\n            onToolbarButtonExecute({\n              onAction: spec.onAction,\n              getApi: specialisation.getApi\n            }),\n            onControlAttached(specialisation, editorOffCell),\n            onControlDetached(specialisation, editorOffCell)\n          ]),\n          DisablingConfigs.toolbarButton(() => !spec.enabled || providersBackstage.isDisabled()),\n          receivingConfig()\n        ].concat(specialisation.toolbarButtonBehaviours))\n      });\n    };\n    const renderToolbarButton = (spec, providersBackstage) => renderToolbarButtonWith(spec, providersBackstage, []);\n    const renderToolbarButtonWith = (spec, providersBackstage, bonusEvents) => renderCommonToolbarButton(spec, {\n      toolbarButtonBehaviours: bonusEvents.length > 0 ? [config('toolbarButtonWith', bonusEvents)] : [],\n      getApi: getButtonApi,\n      onSetup: spec.onSetup\n    }, providersBackstage);\n    const renderToolbarToggleButton = (spec, providersBackstage) => renderToolbarToggleButtonWith(spec, providersBackstage, []);\n    const renderToolbarToggleButtonWith = (spec, providersBackstage, bonusEvents) => renderCommonToolbarButton(spec, {\n      toolbarButtonBehaviours: [\n        Replacing.config({}),\n        Toggling.config({\n          toggleClass: 'tox-tbtn--enabled',\n          aria: { mode: 'pressed' },\n          toggleOnExecute: false\n        })\n      ].concat(bonusEvents.length > 0 ? [config('toolbarToggleButtonWith', bonusEvents)] : []),\n      getApi: getToggleApi,\n      onSetup: spec.onSetup\n    }, providersBackstage);\n    const fetchChoices = (getApi, spec, providersBackstage) => comp => Future.nu(callback => spec.fetch(callback)).map(items => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n      spec.onItemAction(getApi(comp), value);\n    }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), providersBackstage), {\n      movement: deriveMenuMovement(spec.columns, spec.presets),\n      menuBehaviours: SimpleBehaviours.unnamedEvents(spec.columns !== 'auto' ? [] : [runOnAttached((comp, _se) => {\n          detectSize(comp, 4, classForPreset(spec.presets)).each(({numRows, numColumns}) => {\n            Keying.setGridSize(comp, numRows, numColumns);\n          });\n        })])\n    }))));\n    const renderSplitButton = (spec, sharedBackstage) => {\n      const displayChannel = generate$6('channel-update-split-dropdown-display');\n      const getApi = comp => ({\n        isEnabled: () => !Disabling.isDisabled(comp),\n        setEnabled: state => Disabling.set(comp, !state),\n        setIconFill: (id, value) => {\n          descendant(comp.element, 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(underlinePath => {\n            set$9(underlinePath, 'fill', value);\n          });\n        },\n        setActive: state => {\n          set$9(comp.element, 'aria-pressed', state);\n          descendant(comp.element, 'span').each(button => {\n            comp.getSystem().getByDom(button).each(buttonComp => Toggling.set(buttonComp, state));\n          });\n        },\n        isActive: () => descendant(comp.element, 'span').exists(button => comp.getSystem().getByDom(button).exists(Toggling.isOn))\n      });\n      const editorOffCell = Cell(noop);\n      const specialisation = {\n        getApi,\n        onSetup: spec.onSetup\n      };\n      return SplitDropdown.sketch({\n        dom: {\n          tag: 'div',\n          classes: ['tox-split-button'],\n          attributes: {\n            'aria-pressed': false,\n            ...getTooltipAttributes(spec.tooltip, sharedBackstage.providers)\n          }\n        },\n        onExecute: button => {\n          spec.onAction(getApi(button));\n        },\n        onItemExecute: (_a, _b, _c) => {\n        },\n        splitDropdownBehaviours: derive$1([\n          DisablingConfigs.splitButton(sharedBackstage.providers.isDisabled),\n          receivingConfig(),\n          config('split-dropdown-events', [\n            run$1(focusButtonEvent, Focusing.focus),\n            onControlAttached(specialisation, editorOffCell),\n            onControlDetached(specialisation, editorOffCell)\n          ]),\n          Unselecting.config({})\n        ]),\n        eventOrder: {\n          [attachedToDom()]: [\n            'alloy.base.behaviour',\n            'split-dropdown-events'\n          ]\n        },\n        toggleClass: 'tox-tbtn--enabled',\n        lazySink: sharedBackstage.getSink,\n        fetch: fetchChoices(getApi, spec, sharedBackstage.providers),\n        parts: { menu: part(false, spec.columns, spec.presets) },\n        components: [\n          SplitDropdown.parts.button(renderCommonStructure(spec.icon, spec.text, Optional.none(), Optional.some(displayChannel), Optional.some([Toggling.config({\n              toggleClass: 'tox-tbtn--enabled',\n              toggleOnExecute: false\n            })]), sharedBackstage.providers)),\n          SplitDropdown.parts.arrow({\n            dom: {\n              tag: 'button',\n              classes: [\n                'tox-tbtn',\n                'tox-split-button__chevron'\n              ],\n              innerHtml: get$2('chevron-down', sharedBackstage.providers.icons)\n            },\n            buttonBehaviours: derive$1([\n              DisablingConfigs.splitButton(sharedBackstage.providers.isDisabled),\n              receivingConfig(),\n              addFocusableBehaviour()\n            ])\n          }),\n          SplitDropdown.parts['aria-descriptor']({ text: sharedBackstage.providers.translate('To open the popup, press Shift+Enter') })\n        ]\n      });\n    };\n\n    const defaultToolbar = [\n      {\n        name: 'history',\n        items: [\n          'undo',\n          'redo'\n        ]\n      },\n      {\n        name: 'styles',\n        items: ['styles']\n      },\n      {\n        name: 'formatting',\n        items: [\n          'bold',\n          'italic'\n        ]\n      },\n      {\n        name: 'alignment',\n        items: [\n          'alignleft',\n          'aligncenter',\n          'alignright',\n          'alignjustify'\n        ]\n      },\n      {\n        name: 'indentation',\n        items: [\n          'outdent',\n          'indent'\n        ]\n      },\n      {\n        name: 'permanent pen',\n        items: ['permanentpen']\n      },\n      {\n        name: 'comments',\n        items: ['addcomment']\n      }\n    ];\n    const renderFromBridge = (bridgeBuilder, render) => (spec, backstage, editor) => {\n      const internal = bridgeBuilder(spec).mapError(errInfo => formatError(errInfo)).getOrDie();\n      return render(internal, backstage, editor);\n    };\n    const types = {\n      button: renderFromBridge(createToolbarButton, (s, backstage) => renderToolbarButton(s, backstage.shared.providers)),\n      togglebutton: renderFromBridge(createToggleButton, (s, backstage) => renderToolbarToggleButton(s, backstage.shared.providers)),\n      menubutton: renderFromBridge(createMenuButton, (s, backstage) => renderMenuButton(s, 'tox-tbtn', backstage, Optional.none())),\n      splitbutton: renderFromBridge(createSplitButton, (s, backstage) => renderSplitButton(s, backstage.shared)),\n      grouptoolbarbutton: renderFromBridge(createGroupToolbarButton, (s, backstage, editor) => {\n        const buttons = editor.ui.registry.getAll().buttons;\n        const identify = toolbar => identifyButtons(editor, {\n          buttons,\n          toolbar,\n          allowToolbarGroups: false\n        }, backstage, Optional.none());\n        const attributes = { [Attribute]: backstage.shared.header.isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop };\n        switch (getToolbarMode(editor)) {\n        case ToolbarMode$1.floating:\n          return renderFloatingToolbarButton(s, backstage, identify, attributes);\n        default:\n          throw new Error('Toolbar groups are only supported when using floating toolbar mode');\n        }\n      })\n    };\n    const extractFrom = (spec, backstage, editor) => get$g(types, spec.type).fold(() => {\n      console.error('skipping button defined by', spec);\n      return Optional.none();\n    }, render => Optional.some(render(spec, backstage, editor)));\n    const bespokeButtons = {\n      styles: createStylesButton,\n      fontsize: createFontSizeButton,\n      fontfamily: createFontFamilyButton,\n      blocks: createBlocksButton,\n      align: createAlignButton\n    };\n    const removeUnusedDefaults = buttons => {\n      const filteredItemGroups = map$2(defaultToolbar, group => {\n        const items = filter$2(group.items, subItem => has$2(buttons, subItem) || has$2(bespokeButtons, subItem));\n        return {\n          name: group.name,\n          items\n        };\n      });\n      return filter$2(filteredItemGroups, group => group.items.length > 0);\n    };\n    const convertStringToolbar = strToolbar => {\n      const groupsStrings = strToolbar.split('|');\n      return map$2(groupsStrings, g => ({ items: g.trim().split(' ') }));\n    };\n    const isToolbarGroupSettingArray = toolbar => isArrayOf(toolbar, t => has$2(t, 'name') && has$2(t, 'items'));\n    const createToolbar = toolbarConfig => {\n      const toolbar = toolbarConfig.toolbar;\n      const buttons = toolbarConfig.buttons;\n      if (toolbar === false) {\n        return [];\n      } else if (toolbar === undefined || toolbar === true) {\n        return removeUnusedDefaults(buttons);\n      } else if (isString(toolbar)) {\n        return convertStringToolbar(toolbar);\n      } else if (isToolbarGroupSettingArray(toolbar)) {\n        return toolbar;\n      } else {\n        console.error('Toolbar type should be string, string[], boolean or ToolbarGroup[]');\n        return [];\n      }\n    };\n    const lookupButton = (editor, buttons, toolbarItem, allowToolbarGroups, backstage, prefixes) => get$g(buttons, toolbarItem.toLowerCase()).orThunk(() => prefixes.bind(ps => findMap(ps, prefix => get$g(buttons, prefix + toolbarItem.toLowerCase())))).fold(() => get$g(bespokeButtons, toolbarItem.toLowerCase()).map(r => r(editor, backstage)), spec => {\n      if (spec.type === 'grouptoolbarbutton' && !allowToolbarGroups) {\n        console.warn(`Ignoring the '${ toolbarItem }' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested.`);\n        return Optional.none();\n      } else {\n        return extractFrom(spec, backstage, editor);\n      }\n    });\n    const identifyButtons = (editor, toolbarConfig, backstage, prefixes) => {\n      const toolbarGroups = createToolbar(toolbarConfig);\n      const groups = map$2(toolbarGroups, group => {\n        const items = bind$3(group.items, toolbarItem => {\n          return toolbarItem.trim().length === 0 ? [] : lookupButton(editor, toolbarConfig.buttons, toolbarItem, toolbarConfig.allowToolbarGroups, backstage, prefixes).toArray();\n        });\n        return {\n          title: Optional.from(editor.translate(group.name)),\n          items\n        };\n      });\n      return filter$2(groups, group => group.items.length > 0);\n    };\n\n    const setToolbar = (editor, uiComponents, rawUiConfig, backstage) => {\n      const comp = uiComponents.outerContainer;\n      const toolbarConfig = rawUiConfig.toolbar;\n      const toolbarButtonsConfig = rawUiConfig.buttons;\n      if (isArrayOf(toolbarConfig, isString)) {\n        const toolbars = toolbarConfig.map(t => {\n          const config = {\n            toolbar: t,\n            buttons: toolbarButtonsConfig,\n            allowToolbarGroups: rawUiConfig.allowToolbarGroups\n          };\n          return identifyButtons(editor, config, backstage, Optional.none());\n        });\n        OuterContainer.setToolbars(comp, toolbars);\n      } else {\n        OuterContainer.setToolbar(comp, identifyButtons(editor, rawUiConfig, backstage, Optional.none()));\n      }\n    };\n\n    const detection = detect$1();\n    const isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12;\n    const setupEvents$1 = (editor, uiComponents) => {\n      const dom = editor.dom;\n      let contentWindow = editor.getWin();\n      const initialDocEle = editor.getDoc().documentElement;\n      const lastWindowDimensions = Cell(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n      const lastDocumentDimensions = Cell(SugarPosition(initialDocEle.offsetWidth, initialDocEle.offsetHeight));\n      const resizeWindow = () => {\n        const outer = lastWindowDimensions.get();\n        if (outer.left !== contentWindow.innerWidth || outer.top !== contentWindow.innerHeight) {\n          lastWindowDimensions.set(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n          fireResizeContent(editor);\n        }\n      };\n      const resizeDocument = () => {\n        const docEle = editor.getDoc().documentElement;\n        const inner = lastDocumentDimensions.get();\n        if (inner.left !== docEle.offsetWidth || inner.top !== docEle.offsetHeight) {\n          lastDocumentDimensions.set(SugarPosition(docEle.offsetWidth, docEle.offsetHeight));\n          fireResizeContent(editor);\n        }\n      };\n      const scroll = e => {\n        fireScrollContent(editor, e);\n      };\n      dom.bind(contentWindow, 'resize', resizeWindow);\n      dom.bind(contentWindow, 'scroll', scroll);\n      const elementLoad = capture(SugarElement.fromDom(editor.getBody()), 'load', resizeDocument);\n      const mothership = uiComponents.uiMothership.element;\n      editor.on('hide', () => {\n        set$8(mothership, 'display', 'none');\n      });\n      editor.on('show', () => {\n        remove$6(mothership, 'display');\n      });\n      editor.on('NodeChange', resizeDocument);\n      editor.on('remove', () => {\n        elementLoad.unbind();\n        dom.unbind(contentWindow, 'resize', resizeWindow);\n        dom.unbind(contentWindow, 'scroll', scroll);\n        contentWindow = null;\n      });\n    };\n    const render$1 = (editor, uiComponents, rawUiConfig, backstage, args) => {\n      const lastToolbarWidth = Cell(0);\n      const outerContainer = uiComponents.outerContainer;\n      iframe(editor);\n      const eTargetNode = SugarElement.fromDom(args.targetNode);\n      const uiRoot = getContentContainer(getRootNode(eTargetNode));\n      attachSystemAfter(eTargetNode, uiComponents.mothership);\n      attachSystem(uiRoot, uiComponents.uiMothership);\n      editor.on('PostRender', () => {\n        OuterContainer.setSidebar(outerContainer, rawUiConfig.sidebar, getSidebarShow(editor));\n        setToolbar(editor, uiComponents, rawUiConfig, backstage);\n        lastToolbarWidth.set(editor.getWin().innerWidth);\n        OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n        setupEvents$1(editor, uiComponents);\n      });\n      const socket = OuterContainer.getSocket(outerContainer).getOrDie('Could not find expected socket element');\n      if (isiOS12) {\n        setAll(socket.element, {\n          'overflow': 'scroll',\n          '-webkit-overflow-scrolling': 'touch'\n        });\n        const limit = first(() => {\n          editor.dispatch('ScrollContent');\n        }, 20);\n        const unbinder = bind(socket.element, 'scroll', limit.throttle);\n        editor.on('remove', unbinder.unbind);\n      }\n      setupReadonlyModeSwitch(editor, uiComponents);\n      editor.addCommand('ToggleSidebar', (_ui, value) => {\n        OuterContainer.toggleSidebar(outerContainer, value);\n        editor.dispatch('ToggleSidebar');\n      });\n      editor.addQueryValueHandler('ToggleSidebar', () => {\n        var _a;\n        return (_a = OuterContainer.whichSidebar(outerContainer)) !== null && _a !== void 0 ? _a : '';\n      });\n      const toolbarMode = getToolbarMode(editor);\n      const refreshDrawer = () => {\n        OuterContainer.refreshToolbar(uiComponents.outerContainer);\n      };\n      if (toolbarMode === ToolbarMode$1.sliding || toolbarMode === ToolbarMode$1.floating) {\n        editor.on('ResizeWindow ResizeEditor ResizeContent', () => {\n          const width = editor.getWin().innerWidth;\n          if (width !== lastToolbarWidth.get()) {\n            refreshDrawer();\n            lastToolbarWidth.set(width);\n          }\n        });\n      }\n      const api = {\n        setEnabled: state => {\n          broadcastReadonly(uiComponents, !state);\n        },\n        isEnabled: () => !Disabling.isDisabled(outerContainer)\n      };\n      return {\n        iframeContainer: socket.element.dom,\n        editorContainer: outerContainer.element.dom,\n        api\n      };\n    };\n\n    var Iframe = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        render: render$1\n    });\n\n    const parseToInt = val => {\n      const re = /^[0-9\\.]+(|px)$/i;\n      if (re.test('' + val)) {\n        return Optional.some(parseInt('' + val, 10));\n      }\n      return Optional.none();\n    };\n    const numToPx = val => isNumber(val) ? val + 'px' : val;\n    const calcCappedSize = (size, minSize, maxSize) => {\n      const minOverride = minSize.filter(min => size < min);\n      const maxOverride = maxSize.filter(max => size > max);\n      return minOverride.or(maxOverride).getOr(size);\n    };\n\n    const getHeight = editor => {\n      const baseHeight = getHeightOption(editor);\n      const minHeight = getMinHeightOption(editor);\n      const maxHeight = getMaxHeightOption(editor);\n      return parseToInt(baseHeight).map(height => calcCappedSize(height, minHeight, maxHeight));\n    };\n    const getHeightWithFallback = editor => {\n      const height = getHeight(editor);\n      return height.getOr(getHeightOption(editor));\n    };\n    const getWidth = editor => {\n      const baseWidth = getWidthOption(editor);\n      const minWidth = getMinWidthOption(editor);\n      const maxWidth = getMaxWidthOption(editor);\n      return parseToInt(baseWidth).map(width => calcCappedSize(width, minWidth, maxWidth));\n    };\n    const getWidthWithFallback = editor => {\n      const width = getWidth(editor);\n      return width.getOr(getWidthOption(editor));\n    };\n\n    const {ToolbarLocation, ToolbarMode} = Options;\n    const InlineHeader = (editor, targetElm, uiComponents, backstage, floatContainer) => {\n      const {uiMothership, outerContainer} = uiComponents;\n      const DOM = global$7.DOM;\n      const useFixedToolbarContainer = useFixedContainer(editor);\n      const isSticky = isStickyToolbar(editor);\n      const editorMaxWidthOpt = getMaxWidthOption(editor).or(getWidth(editor));\n      const headerBackstage = backstage.shared.header;\n      const isPositionedAtTop = headerBackstage.isPositionedAtTop;\n      const toolbarMode = getToolbarMode(editor);\n      const isSplitToolbar = toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating;\n      const visible = Cell(false);\n      const isVisible = () => visible.get() && !editor.removed;\n      const calcToolbarOffset = toolbar => isSplitToolbar ? toolbar.fold(constant$1(0), tbar => tbar.components().length > 1 ? get$d(tbar.components()[1].element) : 0) : 0;\n      const calcMode = container => {\n        switch (getToolbarLocation(editor)) {\n        case ToolbarLocation.auto:\n          const toolbar = OuterContainer.getToolbar(outerContainer);\n          const offset = calcToolbarOffset(toolbar);\n          const toolbarHeight = get$d(container.element) - offset;\n          const targetBounds = box$1(targetElm);\n          const roomAtTop = targetBounds.y > toolbarHeight;\n          if (roomAtTop) {\n            return 'top';\n          } else {\n            const doc = documentElement(targetElm);\n            const docHeight = Math.max(doc.dom.scrollHeight, get$d(doc));\n            const roomAtBottom = targetBounds.bottom < docHeight - toolbarHeight;\n            if (roomAtBottom) {\n              return 'bottom';\n            } else {\n              const winBounds = win();\n              const isRoomAtBottomViewport = winBounds.bottom < targetBounds.bottom - toolbarHeight;\n              return isRoomAtBottomViewport ? 'bottom' : 'top';\n            }\n          }\n        case ToolbarLocation.bottom:\n          return 'bottom';\n        case ToolbarLocation.top:\n        default:\n          return 'top';\n        }\n      };\n      const setupMode = mode => {\n        floatContainer.on(container => {\n          Docking.setModes(container, [mode]);\n          headerBackstage.setDockingMode(mode);\n          const verticalDir = isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop;\n          set$9(container.element, Attribute, verticalDir);\n        });\n      };\n      const updateChromeWidth = () => {\n        floatContainer.on(container => {\n          const maxWidth = editorMaxWidthOpt.getOrThunk(() => {\n            const bodyMargin = parseToInt(get$e(body(), 'margin-left')).getOr(0);\n            return get$c(body()) - absolute$3(targetElm).left + bodyMargin;\n          });\n          set$8(container.element, 'max-width', maxWidth + 'px');\n        });\n      };\n      const updateChromePosition = () => {\n        floatContainer.on(container => {\n          const toolbar = OuterContainer.getToolbar(outerContainer);\n          const offset = calcToolbarOffset(toolbar);\n          const targetBounds = box$1(targetElm);\n          const top = isPositionedAtTop() ? Math.max(targetBounds.y - get$d(container.element) + offset, 0) : targetBounds.bottom;\n          setAll(outerContainer.element, {\n            position: 'absolute',\n            top: Math.round(top) + 'px',\n            left: Math.round(targetBounds.x) + 'px'\n          });\n        });\n      };\n      const repositionPopups$1 = () => {\n        uiMothership.broadcastOn([repositionPopups()], {});\n      };\n      const updateChromeUi = (resetDocking = false) => {\n        if (!isVisible()) {\n          return;\n        }\n        if (!useFixedToolbarContainer) {\n          updateChromeWidth();\n        }\n        if (isSplitToolbar) {\n          OuterContainer.refreshToolbar(outerContainer);\n        }\n        if (!useFixedToolbarContainer) {\n          updateChromePosition();\n        }\n        if (isSticky) {\n          const action = resetDocking ? Docking.reset : Docking.refresh;\n          floatContainer.on(action);\n        }\n        repositionPopups$1();\n      };\n      const updateMode = (updateUi = true) => {\n        if (useFixedToolbarContainer || !isSticky || !isVisible()) {\n          return;\n        }\n        floatContainer.on(container => {\n          const currentMode = headerBackstage.getDockingMode();\n          const newMode = calcMode(container);\n          if (newMode !== currentMode) {\n            setupMode(newMode);\n            if (updateUi) {\n              updateChromeUi(true);\n            }\n          }\n        });\n      };\n      const show = () => {\n        visible.set(true);\n        set$8(outerContainer.element, 'display', 'flex');\n        DOM.addClass(editor.getBody(), 'mce-edit-focus');\n        remove$6(uiMothership.element, 'display');\n        updateMode(false);\n        updateChromeUi();\n      };\n      const hide = () => {\n        visible.set(false);\n        if (uiComponents.outerContainer) {\n          set$8(outerContainer.element, 'display', 'none');\n          DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n        }\n        set$8(uiMothership.element, 'display', 'none');\n      };\n      return {\n        isVisible,\n        isPositionedAtTop,\n        show,\n        hide,\n        update: updateChromeUi,\n        updateMode,\n        repositionPopups: repositionPopups$1\n      };\n    };\n\n    const getTargetPosAndBounds = (targetElm, isToolbarTop) => {\n      const bounds = box$1(targetElm);\n      return {\n        pos: isToolbarTop ? bounds.y : bounds.bottom,\n        bounds\n      };\n    };\n    const setupEvents = (editor, targetElm, ui, toolbarPersist) => {\n      const prevPosAndBounds = Cell(getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()));\n      const resizeContent = e => {\n        const {pos, bounds} = getTargetPosAndBounds(targetElm, ui.isPositionedAtTop());\n        const {\n          pos: prevPos,\n          bounds: prevBounds\n        } = prevPosAndBounds.get();\n        const hasResized = bounds.height !== prevBounds.height || bounds.width !== prevBounds.width;\n        prevPosAndBounds.set({\n          pos,\n          bounds\n        });\n        if (hasResized) {\n          fireResizeContent(editor, e);\n        }\n        if (ui.isVisible()) {\n          if (prevPos !== pos) {\n            ui.update(true);\n          } else if (hasResized) {\n            ui.updateMode();\n            ui.repositionPopups();\n          }\n        }\n      };\n      if (!toolbarPersist) {\n        editor.on('activate', ui.show);\n        editor.on('deactivate', ui.hide);\n      }\n      editor.on('SkinLoaded ResizeWindow', () => ui.update(true));\n      editor.on('NodeChange keydown', e => {\n        requestAnimationFrame(() => resizeContent(e));\n      });\n      editor.on('ScrollWindow', () => ui.updateMode());\n      const elementLoad = unbindable();\n      elementLoad.set(capture(SugarElement.fromDom(editor.getBody()), 'load', e => resizeContent(e.raw)));\n      editor.on('remove', () => {\n        elementLoad.clear();\n      });\n    };\n    const render = (editor, uiComponents, rawUiConfig, backstage, args) => {\n      const {mothership, uiMothership, outerContainer} = uiComponents;\n      const floatContainer = value$2();\n      const targetElm = SugarElement.fromDom(args.targetNode);\n      const ui = InlineHeader(editor, targetElm, uiComponents, backstage, floatContainer);\n      const toolbarPersist = isToolbarPersist(editor);\n      inline(editor);\n      const render = () => {\n        if (floatContainer.isSet()) {\n          ui.show();\n          return;\n        }\n        floatContainer.set(OuterContainer.getHeader(outerContainer).getOrDie());\n        const uiContainer = getUiContainer(editor);\n        attachSystem(uiContainer, mothership);\n        attachSystem(uiContainer, uiMothership);\n        setToolbar(editor, uiComponents, rawUiConfig, backstage);\n        OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n        ui.show();\n        setupEvents(editor, targetElm, ui, toolbarPersist);\n        editor.nodeChanged();\n      };\n      editor.on('show', render);\n      editor.on('hide', ui.hide);\n      if (!toolbarPersist) {\n        editor.on('focus', render);\n        editor.on('blur', ui.hide);\n      }\n      editor.on('init', () => {\n        if (editor.hasFocus() || toolbarPersist) {\n          render();\n        }\n      });\n      setupReadonlyModeSwitch(editor, uiComponents);\n      const api = {\n        show: render,\n        hide: ui.hide,\n        setEnabled: state => {\n          broadcastReadonly(uiComponents, !state);\n        },\n        isEnabled: () => !Disabling.isDisabled(outerContainer)\n      };\n      return {\n        editorContainer: outerContainer.element.dom,\n        api\n      };\n    };\n\n    var Inline = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        render: render\n    });\n\n    const showContextToolbarEvent = 'contexttoolbar-show';\n    const hideContextToolbarEvent = 'contexttoolbar-hide';\n\n    const getFormApi = input => ({\n      hide: () => emit(input, sandboxClose()),\n      getValue: () => Representing.getValue(input)\n    });\n    const runOnExecute = (memInput, original) => run$1(internalToolbarButtonExecute, (comp, se) => {\n      const input = memInput.get(comp);\n      const formApi = getFormApi(input);\n      original.onAction(formApi, se.event.buttonApi);\n    });\n    const renderContextButton = (memInput, button, providers) => {\n      const {primary, ...rest} = button.original;\n      const bridged = getOrDie(createToolbarButton({\n        ...rest,\n        type: 'button',\n        onAction: noop\n      }));\n      return renderToolbarButtonWith(bridged, providers, [runOnExecute(memInput, button)]);\n    };\n    const renderContextToggleButton = (memInput, button, providers) => {\n      const {primary, ...rest} = button.original;\n      const bridged = getOrDie(createToggleButton({\n        ...rest,\n        type: 'togglebutton',\n        onAction: noop\n      }));\n      return renderToolbarToggleButtonWith(bridged, providers, [runOnExecute(memInput, button)]);\n    };\n    const isToggleButton = button => button.type === 'contextformtogglebutton';\n    const generateOne = (memInput, button, providersBackstage) => {\n      if (isToggleButton(button)) {\n        return renderContextToggleButton(memInput, button, providersBackstage);\n      } else {\n        return renderContextButton(memInput, button, providersBackstage);\n      }\n    };\n    const generate = (memInput, buttons, providersBackstage) => {\n      const mementos = map$2(buttons, button => record(generateOne(memInput, button, providersBackstage)));\n      const asSpecs = () => map$2(mementos, mem => mem.asSpec());\n      const findPrimary = compInSystem => findMap(buttons, (button, i) => {\n        if (button.primary) {\n          return Optional.from(mementos[i]).bind(mem => mem.getOpt(compInSystem)).filter(not(Disabling.isDisabled));\n        } else {\n          return Optional.none();\n        }\n      });\n      return {\n        asSpecs,\n        findPrimary\n      };\n    };\n\n    const buildInitGroups = (ctx, providers) => {\n      const inputAttributes = ctx.label.fold(() => ({}), label => ({ 'aria-label': label }));\n      const memInput = record(Input.sketch({\n        inputClasses: [\n          'tox-toolbar-textfield',\n          'tox-toolbar-nav-js'\n        ],\n        data: ctx.initValue(),\n        inputAttributes,\n        selectOnFocus: true,\n        inputBehaviours: derive$1([Keying.config({\n            mode: 'special',\n            onEnter: input => commands.findPrimary(input).map(primary => {\n              emitExecute(primary);\n              return true;\n            }),\n            onLeft: (comp, se) => {\n              se.cut();\n              return Optional.none();\n            },\n            onRight: (comp, se) => {\n              se.cut();\n              return Optional.none();\n            }\n          })])\n      }));\n      const commands = generate(memInput, ctx.commands, providers);\n      return [\n        {\n          title: Optional.none(),\n          items: [memInput.asSpec()]\n        },\n        {\n          title: Optional.none(),\n          items: commands.asSpecs()\n        }\n      ];\n    };\n    const renderContextForm = (toolbarType, ctx, providers) => renderToolbar({\n      type: toolbarType,\n      uid: generate$6('context-toolbar'),\n      initGroups: buildInitGroups(ctx, providers),\n      onEscape: Optional.none,\n      cyclicKeying: true,\n      providers\n    });\n    const ContextForm = {\n      renderContextForm,\n      buildInitGroups\n    };\n\n    const isVerticalOverlap = (a, b, threshold = 0.01) => b.bottom - a.y >= threshold && a.bottom - b.y >= threshold;\n    const getRangeRect = rng => {\n      const rect = rng.getBoundingClientRect();\n      if (rect.height <= 0 && rect.width <= 0) {\n        const leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset).element;\n        const elm = isText(leaf$1) ? parent(leaf$1) : Optional.some(leaf$1);\n        return elm.filter(isElement$1).map(e => e.dom.getBoundingClientRect()).getOr(rect);\n      } else {\n        return rect;\n      }\n    };\n    const getSelectionBounds = editor => {\n      const rng = editor.selection.getRng();\n      const rect = getRangeRect(rng);\n      if (editor.inline) {\n        const scroll = get$b();\n        return bounds(scroll.left + rect.left, scroll.top + rect.top, rect.width, rect.height);\n      } else {\n        const bodyPos = absolute$2(SugarElement.fromDom(editor.getBody()));\n        return bounds(bodyPos.x + rect.left, bodyPos.y + rect.top, rect.width, rect.height);\n      }\n    };\n    const getAnchorElementBounds = (editor, lastElement) => lastElement.filter(elem => inBody(elem) && isHTMLElement(elem)).map(absolute$2).getOrThunk(() => getSelectionBounds(editor));\n    const getHorizontalBounds = (contentAreaBox, viewportBounds, margin) => {\n      const x = Math.max(contentAreaBox.x + margin, viewportBounds.x);\n      const right = Math.min(contentAreaBox.right - margin, viewportBounds.right);\n      return {\n        x,\n        width: right - x\n      };\n    };\n    const getVerticalBounds = (editor, contentAreaBox, viewportBounds, isToolbarLocationTop, toolbarType, margin) => {\n      const container = SugarElement.fromDom(editor.getContainer());\n      const header = descendant(container, '.tox-editor-header').getOr(container);\n      const headerBox = box$1(header);\n      const isToolbarBelowContentArea = headerBox.y >= contentAreaBox.bottom;\n      const isToolbarAbove = isToolbarLocationTop && !isToolbarBelowContentArea;\n      if (editor.inline && isToolbarAbove) {\n        return {\n          y: Math.max(headerBox.bottom + margin, viewportBounds.y),\n          bottom: viewportBounds.bottom\n        };\n      }\n      if (editor.inline && !isToolbarAbove) {\n        return {\n          y: viewportBounds.y,\n          bottom: Math.min(headerBox.y - margin, viewportBounds.bottom)\n        };\n      }\n      const containerBounds = toolbarType === 'line' ? box$1(container) : contentAreaBox;\n      if (isToolbarAbove) {\n        return {\n          y: Math.max(headerBox.bottom + margin, viewportBounds.y),\n          bottom: Math.min(containerBounds.bottom - margin, viewportBounds.bottom)\n        };\n      }\n      return {\n        y: Math.max(containerBounds.y + margin, viewportBounds.y),\n        bottom: Math.min(headerBox.y - margin, viewportBounds.bottom)\n      };\n    };\n    const getContextToolbarBounds = (editor, sharedBackstage, toolbarType, margin = 0) => {\n      const viewportBounds = getBounds$3(window);\n      const contentAreaBox = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n      const toolbarOrMenubarEnabled = isMenubarEnabled(editor) || isToolbarEnabled(editor) || isMultipleToolbars(editor);\n      const {x, width} = getHorizontalBounds(contentAreaBox, viewportBounds, margin);\n      if (editor.inline && !toolbarOrMenubarEnabled) {\n        return bounds(x, viewportBounds.y, width, viewportBounds.height);\n      } else {\n        const isToolbarTop = sharedBackstage.header.isPositionedAtTop();\n        const {y, bottom} = getVerticalBounds(editor, contentAreaBox, viewportBounds, isToolbarTop, toolbarType, margin);\n        return bounds(x, y, width, bottom - y);\n      }\n    };\n\n    const bubbleSize$1 = 12;\n    const bubbleAlignments$1 = {\n      valignCentre: [],\n      alignCentre: [],\n      alignLeft: ['tox-pop--align-left'],\n      alignRight: ['tox-pop--align-right'],\n      right: ['tox-pop--right'],\n      left: ['tox-pop--left'],\n      bottom: ['tox-pop--bottom'],\n      top: ['tox-pop--top'],\n      inset: ['tox-pop--inset']\n    };\n    const anchorOverrides = {\n      maxHeightFunction: expandable$1(),\n      maxWidthFunction: expandable()\n    };\n    const isEntireElementSelected = (editor, elem) => {\n      const rng = editor.selection.getRng();\n      const leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n      return rng.startContainer === rng.endContainer && rng.startOffset === rng.endOffset - 1 && eq(leaf$1.element, elem);\n    };\n    const preservePosition = (elem, position, f) => {\n      const currentPosition = getRaw(elem, 'position');\n      set$8(elem, 'position', position);\n      const result = f(elem);\n      currentPosition.each(pos => set$8(elem, 'position', pos));\n      return result;\n    };\n    const shouldUseInsetLayouts = position => position === 'node';\n    const determineInsetLayout = (editor, contextbar, elem, data, bounds) => {\n      const selectionBounds = getSelectionBounds(editor);\n      const isSameAnchorElement = data.lastElement().exists(prev => eq(elem, prev));\n      if (isEntireElementSelected(editor, elem)) {\n        return isSameAnchorElement ? preserve : north;\n      } else if (isSameAnchorElement) {\n        return preservePosition(contextbar, data.getMode(), () => {\n          const isOverlapping = isVerticalOverlap(selectionBounds, box$1(contextbar));\n          return isOverlapping && !data.isReposition() ? flip : preserve;\n        });\n      } else {\n        const yBounds = data.getMode() === 'fixed' ? bounds.y + get$b().top : bounds.y;\n        const contextbarHeight = get$d(contextbar) + bubbleSize$1;\n        return yBounds + contextbarHeight <= selectionBounds.y ? north : south;\n      }\n    };\n    const getAnchorSpec$2 = (editor, mobile, data, position) => {\n      const smartInsetLayout = elem => (anchor, element, bubbles, placee, bounds) => {\n        const layout = determineInsetLayout(editor, placee, elem, data, bounds);\n        const newAnchor = {\n          ...anchor,\n          y: bounds.y,\n          height: bounds.height\n        };\n        return {\n          ...layout(newAnchor, element, bubbles, placee, bounds),\n          alwaysFit: true\n        };\n      };\n      const getInsetLayouts = elem => shouldUseInsetLayouts(position) ? [smartInsetLayout(elem)] : [];\n      const desktopAnchorSpecLayouts = {\n        onLtr: elem => [\n          north$2,\n          south$2,\n          northeast$2,\n          southeast$2,\n          northwest$2,\n          southwest$2\n        ].concat(getInsetLayouts(elem)),\n        onRtl: elem => [\n          north$2,\n          south$2,\n          northwest$2,\n          southwest$2,\n          northeast$2,\n          southeast$2\n        ].concat(getInsetLayouts(elem))\n      };\n      const mobileAnchorSpecLayouts = {\n        onLtr: elem => [\n          south$2,\n          southeast$2,\n          southwest$2,\n          northeast$2,\n          northwest$2,\n          north$2\n        ].concat(getInsetLayouts(elem)),\n        onRtl: elem => [\n          south$2,\n          southwest$2,\n          southeast$2,\n          northwest$2,\n          northeast$2,\n          north$2\n        ].concat(getInsetLayouts(elem))\n      };\n      return mobile ? mobileAnchorSpecLayouts : desktopAnchorSpecLayouts;\n    };\n    const getAnchorLayout = (editor, position, isTouch, data) => {\n      if (position === 'line') {\n        return {\n          bubble: nu$5(bubbleSize$1, 0, bubbleAlignments$1),\n          layouts: {\n            onLtr: () => [east$2],\n            onRtl: () => [west$2]\n          },\n          overrides: anchorOverrides\n        };\n      } else {\n        return {\n          bubble: nu$5(0, bubbleSize$1, bubbleAlignments$1, 1 / bubbleSize$1),\n          layouts: getAnchorSpec$2(editor, isTouch, data, position),\n          overrides: anchorOverrides\n        };\n      }\n    };\n\n    const matchTargetWith = (elem, candidates) => {\n      const ctxs = filter$2(candidates, toolbarApi => toolbarApi.predicate(elem.dom));\n      const {pass, fail} = partition$3(ctxs, t => t.type === 'contexttoolbar');\n      return {\n        contextToolbars: pass,\n        contextForms: fail\n      };\n    };\n    const filterByPositionForStartNode = toolbars => {\n      if (toolbars.length <= 1) {\n        return toolbars;\n      } else {\n        const doesPositionExist = value => exists(toolbars, t => t.position === value);\n        const filterToolbarsByPosition = value => filter$2(toolbars, t => t.position === value);\n        const hasSelectionToolbars = doesPositionExist('selection');\n        const hasNodeToolbars = doesPositionExist('node');\n        if (hasSelectionToolbars || hasNodeToolbars) {\n          if (hasNodeToolbars && hasSelectionToolbars) {\n            const nodeToolbars = filterToolbarsByPosition('node');\n            const selectionToolbars = map$2(filterToolbarsByPosition('selection'), t => ({\n              ...t,\n              position: 'node'\n            }));\n            return nodeToolbars.concat(selectionToolbars);\n          } else {\n            return hasSelectionToolbars ? filterToolbarsByPosition('selection') : filterToolbarsByPosition('node');\n          }\n        } else {\n          return filterToolbarsByPosition('line');\n        }\n      }\n    };\n    const filterByPositionForAncestorNode = toolbars => {\n      if (toolbars.length <= 1) {\n        return toolbars;\n      } else {\n        const findPosition = value => find$5(toolbars, t => t.position === value);\n        const basePosition = findPosition('selection').orThunk(() => findPosition('node')).orThunk(() => findPosition('line')).map(t => t.position);\n        return basePosition.fold(() => [], pos => filter$2(toolbars, t => t.position === pos));\n      }\n    };\n    const matchStartNode = (elem, nodeCandidates, editorCandidates) => {\n      const nodeMatches = matchTargetWith(elem, nodeCandidates);\n      if (nodeMatches.contextForms.length > 0) {\n        return Optional.some({\n          elem,\n          toolbars: [nodeMatches.contextForms[0]]\n        });\n      } else {\n        const editorMatches = matchTargetWith(elem, editorCandidates);\n        if (editorMatches.contextForms.length > 0) {\n          return Optional.some({\n            elem,\n            toolbars: [editorMatches.contextForms[0]]\n          });\n        } else if (nodeMatches.contextToolbars.length > 0 || editorMatches.contextToolbars.length > 0) {\n          const toolbars = filterByPositionForStartNode(nodeMatches.contextToolbars.concat(editorMatches.contextToolbars));\n          return Optional.some({\n            elem,\n            toolbars\n          });\n        } else {\n          return Optional.none();\n        }\n      }\n    };\n    const matchAncestor = (isRoot, startNode, scopes) => {\n      if (isRoot(startNode)) {\n        return Optional.none();\n      } else {\n        return ancestor$2(startNode, ancestorElem => {\n          if (isElement$1(ancestorElem)) {\n            const {contextToolbars, contextForms} = matchTargetWith(ancestorElem, scopes.inNodeScope);\n            const toolbars = contextForms.length > 0 ? contextForms : filterByPositionForAncestorNode(contextToolbars);\n            return toolbars.length > 0 ? Optional.some({\n              elem: ancestorElem,\n              toolbars\n            }) : Optional.none();\n          } else {\n            return Optional.none();\n          }\n        }, isRoot);\n      }\n    };\n    const lookup$1 = (scopes, editor) => {\n      const rootElem = SugarElement.fromDom(editor.getBody());\n      const isRoot = elem => eq(elem, rootElem);\n      const isOutsideRoot = startNode => !isRoot(startNode) && !contains(rootElem, startNode);\n      const startNode = SugarElement.fromDom(editor.selection.getNode());\n      if (isOutsideRoot(startNode)) {\n        return Optional.none();\n      }\n      return matchStartNode(startNode, scopes.inNodeScope, scopes.inEditorScope).orThunk(() => matchAncestor(isRoot, startNode, scopes));\n    };\n\n    const categorise = (contextToolbars, navigate) => {\n      const forms = {};\n      const inNodeScope = [];\n      const inEditorScope = [];\n      const formNavigators = {};\n      const lookupTable = {};\n      const registerForm = (key, toolbarSpec) => {\n        const contextForm = getOrDie(createContextForm(toolbarSpec));\n        forms[key] = contextForm;\n        contextForm.launch.map(launch => {\n          formNavigators['form:' + key + ''] = {\n            ...toolbarSpec.launch,\n            type: launch.type === 'contextformtogglebutton' ? 'togglebutton' : 'button',\n            onAction: () => {\n              navigate(contextForm);\n            }\n          };\n        });\n        if (contextForm.scope === 'editor') {\n          inEditorScope.push(contextForm);\n        } else {\n          inNodeScope.push(contextForm);\n        }\n        lookupTable[key] = contextForm;\n      };\n      const registerToolbar = (key, toolbarSpec) => {\n        createContextToolbar(toolbarSpec).each(contextToolbar => {\n          if (toolbarSpec.scope === 'editor') {\n            inEditorScope.push(contextToolbar);\n          } else {\n            inNodeScope.push(contextToolbar);\n          }\n          lookupTable[key] = contextToolbar;\n        });\n      };\n      const keys$1 = keys(contextToolbars);\n      each$1(keys$1, key => {\n        const toolbarApi = contextToolbars[key];\n        if (toolbarApi.type === 'contextform') {\n          registerForm(key, toolbarApi);\n        } else if (toolbarApi.type === 'contexttoolbar') {\n          registerToolbar(key, toolbarApi);\n        }\n      });\n      return {\n        forms,\n        inNodeScope,\n        inEditorScope,\n        lookupTable,\n        formNavigators\n      };\n    };\n\n    const forwardSlideEvent = generate$6('forward-slide');\n    const backSlideEvent = generate$6('backward-slide');\n    const changeSlideEvent = generate$6('change-slide-event');\n    const resizingClass = 'tox-pop--resizing';\n    const renderContextToolbar = spec => {\n      const stack = Cell([]);\n      return InlineView.sketch({\n        dom: {\n          tag: 'div',\n          classes: ['tox-pop']\n        },\n        fireDismissalEventInstead: { event: 'doNotDismissYet' },\n        onShow: comp => {\n          stack.set([]);\n          InlineView.getContent(comp).each(c => {\n            remove$6(c.element, 'visibility');\n          });\n          remove$2(comp.element, resizingClass);\n          remove$6(comp.element, 'width');\n        },\n        inlineBehaviours: derive$1([\n          config('context-toolbar-events', [\n            runOnSource(transitionend(), (comp, se) => {\n              if (se.event.raw.propertyName === 'width') {\n                remove$2(comp.element, resizingClass);\n                remove$6(comp.element, 'width');\n              }\n            }),\n            run$1(changeSlideEvent, (comp, se) => {\n              const elem = comp.element;\n              remove$6(elem, 'width');\n              const currentWidth = get$c(elem);\n              InlineView.setContent(comp, se.event.contents);\n              add$2(elem, resizingClass);\n              const newWidth = get$c(elem);\n              set$8(elem, 'width', currentWidth + 'px');\n              InlineView.getContent(comp).each(newContents => {\n                se.event.focus.bind(f => {\n                  focus$3(f);\n                  return search(elem);\n                }).orThunk(() => {\n                  Keying.focusIn(newContents);\n                  return active$1(getRootNode(elem));\n                });\n              });\n              setTimeout(() => {\n                set$8(comp.element, 'width', newWidth + 'px');\n              }, 0);\n            }),\n            run$1(forwardSlideEvent, (comp, se) => {\n              InlineView.getContent(comp).each(oldContents => {\n                stack.set(stack.get().concat([{\n                    bar: oldContents,\n                    focus: active$1(getRootNode(comp.element))\n                  }]));\n              });\n              emitWith(comp, changeSlideEvent, {\n                contents: se.event.forwardContents,\n                focus: Optional.none()\n              });\n            }),\n            run$1(backSlideEvent, (comp, _se) => {\n              last$1(stack.get()).each(last => {\n                stack.set(stack.get().slice(0, stack.get().length - 1));\n                emitWith(comp, changeSlideEvent, {\n                  contents: premade(last.bar),\n                  focus: last.focus\n                });\n              });\n            })\n          ]),\n          Keying.config({\n            mode: 'special',\n            onEscape: comp => last$1(stack.get()).fold(() => spec.onEscape(), _ => {\n              emit(comp, backSlideEvent);\n              return Optional.some(true);\n            })\n          })\n        ]),\n        lazySink: () => Result.value(spec.sink)\n      });\n    };\n\n    const transitionClass = 'tox-pop--transition';\n    const register$9 = (editor, registryContextToolbars, sink, extras) => {\n      const backstage = extras.backstage;\n      const sharedBackstage = backstage.shared;\n      const isTouch = detect$1().deviceType.isTouch;\n      const lastElement = value$2();\n      const lastTrigger = value$2();\n      const lastContextPosition = value$2();\n      const contextbar = build$1(renderContextToolbar({\n        sink,\n        onEscape: () => {\n          editor.focus();\n          return Optional.some(true);\n        }\n      }));\n      const getBounds = () => {\n        const position = lastContextPosition.get().getOr('node');\n        const margin = shouldUseInsetLayouts(position) ? 1 : 0;\n        return getContextToolbarBounds(editor, sharedBackstage, position, margin);\n      };\n      const canLaunchToolbar = () => {\n        return !editor.removed && !(isTouch() && backstage.isContextMenuOpen());\n      };\n      const isSameLaunchElement = elem => is$1(lift2(elem, lastElement.get(), eq), true);\n      const shouldContextToolbarHide = () => {\n        if (!canLaunchToolbar()) {\n          return true;\n        } else {\n          const contextToolbarBounds = getBounds();\n          const anchorBounds = is$1(lastContextPosition.get(), 'node') ? getAnchorElementBounds(editor, lastElement.get()) : getSelectionBounds(editor);\n          return contextToolbarBounds.height <= 0 || !isVerticalOverlap(anchorBounds, contextToolbarBounds);\n        }\n      };\n      const close = () => {\n        lastElement.clear();\n        lastTrigger.clear();\n        lastContextPosition.clear();\n        InlineView.hide(contextbar);\n      };\n      const hideOrRepositionIfNecessary = () => {\n        if (InlineView.isOpen(contextbar)) {\n          const contextBarEle = contextbar.element;\n          remove$6(contextBarEle, 'display');\n          if (shouldContextToolbarHide()) {\n            set$8(contextBarEle, 'display', 'none');\n          } else {\n            lastTrigger.set(0);\n            InlineView.reposition(contextbar);\n          }\n        }\n      };\n      const wrapInPopDialog = toolbarSpec => ({\n        dom: {\n          tag: 'div',\n          classes: ['tox-pop__dialog']\n        },\n        components: [toolbarSpec],\n        behaviours: derive$1([\n          Keying.config({ mode: 'acyclic' }),\n          config('pop-dialog-wrap-events', [\n            runOnAttached(comp => {\n              editor.shortcuts.add('ctrl+F9', 'focus statusbar', () => Keying.focusIn(comp));\n            }),\n            runOnDetached(_comp => {\n              editor.shortcuts.remove('ctrl+F9');\n            })\n          ])\n        ])\n      });\n      const getScopes = cached(() => categorise(registryContextToolbars, toolbarApi => {\n        const alloySpec = buildToolbar([toolbarApi]);\n        emitWith(contextbar, forwardSlideEvent, { forwardContents: wrapInPopDialog(alloySpec) });\n      }));\n      const buildContextToolbarGroups = (allButtons, ctx) => identifyButtons(editor, {\n        buttons: allButtons,\n        toolbar: ctx.items,\n        allowToolbarGroups: false\n      }, extras.backstage, Optional.some(['form:']));\n      const buildContextFormGroups = (ctx, providers) => ContextForm.buildInitGroups(ctx, providers);\n      const buildToolbar = toolbars => {\n        const {buttons} = editor.ui.registry.getAll();\n        const scopes = getScopes();\n        const allButtons = {\n          ...buttons,\n          ...scopes.formNavigators\n        };\n        const toolbarType = getToolbarMode(editor) === ToolbarMode$1.scrolling ? ToolbarMode$1.scrolling : ToolbarMode$1.default;\n        const initGroups = flatten(map$2(toolbars, ctx => ctx.type === 'contexttoolbar' ? buildContextToolbarGroups(allButtons, ctx) : buildContextFormGroups(ctx, sharedBackstage.providers)));\n        return renderToolbar({\n          type: toolbarType,\n          uid: generate$6('context-toolbar'),\n          initGroups,\n          onEscape: Optional.none,\n          cyclicKeying: true,\n          providers: sharedBackstage.providers\n        });\n      };\n      const getAnchor = (position, element) => {\n        const anchorage = position === 'node' ? sharedBackstage.anchors.node(element) : sharedBackstage.anchors.cursor();\n        const anchorLayout = getAnchorLayout(editor, position, isTouch(), {\n          lastElement: lastElement.get,\n          isReposition: () => is$1(lastTrigger.get(), 0),\n          getMode: () => Positioning.getMode(sink)\n        });\n        return deepMerge(anchorage, anchorLayout);\n      };\n      const launchContext = (toolbarApi, elem) => {\n        launchContextToolbar.cancel();\n        if (!canLaunchToolbar()) {\n          return;\n        }\n        const toolbarSpec = buildToolbar(toolbarApi);\n        const position = toolbarApi[0].position;\n        const anchor = getAnchor(position, elem);\n        lastContextPosition.set(position);\n        lastTrigger.set(1);\n        const contextBarEle = contextbar.element;\n        remove$6(contextBarEle, 'display');\n        if (!isSameLaunchElement(elem)) {\n          remove$2(contextBarEle, transitionClass);\n          Positioning.reset(sink, contextbar);\n        }\n        InlineView.showWithinBounds(contextbar, wrapInPopDialog(toolbarSpec), {\n          anchor,\n          transition: {\n            classes: [transitionClass],\n            mode: 'placement'\n          }\n        }, () => Optional.some(getBounds()));\n        elem.fold(lastElement.clear, lastElement.set);\n        if (shouldContextToolbarHide()) {\n          set$8(contextBarEle, 'display', 'none');\n        }\n      };\n      const launchContextToolbar = last(() => {\n        if (!editor.hasFocus() || editor.removed) {\n          return;\n        }\n        if (has(contextbar.element, transitionClass)) {\n          launchContextToolbar.throttle();\n        } else {\n          const scopes = getScopes();\n          lookup$1(scopes, editor).fold(close, info => {\n            launchContext(info.toolbars, Optional.some(info.elem));\n          });\n        }\n      }, 17);\n      editor.on('init', () => {\n        editor.on('remove', close);\n        editor.on('ScrollContent ScrollWindow ObjectResized ResizeEditor longpress', hideOrRepositionIfNecessary);\n        editor.on('click keyup focus SetContent', launchContextToolbar.throttle);\n        editor.on(hideContextToolbarEvent, close);\n        editor.on(showContextToolbarEvent, e => {\n          const scopes = getScopes();\n          get$g(scopes.lookupTable, e.toolbarKey).each(ctx => {\n            launchContext([ctx], someIf(e.target !== editor, e.target));\n            InlineView.getContent(contextbar).each(Keying.focusIn);\n          });\n        });\n        editor.on('focusout', _e => {\n          global$9.setEditorTimeout(editor, () => {\n            if (search(sink.element).isNone() && search(contextbar.element).isNone()) {\n              close();\n            }\n          }, 0);\n        });\n        editor.on('SwitchMode', () => {\n          if (editor.mode.isReadOnly()) {\n            close();\n          }\n        });\n        editor.on('AfterProgressState', event => {\n          if (event.state) {\n            close();\n          } else if (editor.hasFocus()) {\n            launchContextToolbar.throttle();\n          }\n        });\n        editor.on('NodeChange', _e => {\n          search(contextbar.element).fold(launchContextToolbar.throttle, noop);\n        });\n      });\n    };\n\n    const register$8 = editor => {\n      const alignToolbarButtons = [\n        {\n          name: 'alignleft',\n          text: 'Align left',\n          cmd: 'JustifyLeft',\n          icon: 'align-left'\n        },\n        {\n          name: 'aligncenter',\n          text: 'Align center',\n          cmd: 'JustifyCenter',\n          icon: 'align-center'\n        },\n        {\n          name: 'alignright',\n          text: 'Align right',\n          cmd: 'JustifyRight',\n          icon: 'align-right'\n        },\n        {\n          name: 'alignjustify',\n          text: 'Justify',\n          cmd: 'JustifyFull',\n          icon: 'align-justify'\n        }\n      ];\n      each$1(alignToolbarButtons, item => {\n        editor.ui.registry.addToggleButton(item.name, {\n          tooltip: item.text,\n          icon: item.icon,\n          onAction: onActionExecCommand(editor, item.cmd),\n          onSetup: onSetupFormatToggle(editor, item.name)\n        });\n      });\n      editor.ui.registry.addButton('alignnone', {\n        tooltip: 'No alignment',\n        icon: 'align-none',\n        onAction: onActionExecCommand(editor, 'JustifyNone')\n      });\n    };\n\n    const units = {\n      unsupportedLength: [\n        'em',\n        'ex',\n        'cap',\n        'ch',\n        'ic',\n        'rem',\n        'lh',\n        'rlh',\n        'vw',\n        'vh',\n        'vi',\n        'vb',\n        'vmin',\n        'vmax',\n        'cm',\n        'mm',\n        'Q',\n        'in',\n        'pc',\n        'pt',\n        'px'\n      ],\n      fixed: [\n        'px',\n        'pt'\n      ],\n      relative: ['%'],\n      empty: ['']\n    };\n    const pattern = (() => {\n      const decimalDigits = '[0-9]+';\n      const signedInteger = '[+-]?' + decimalDigits;\n      const exponentPart = '[eE]' + signedInteger;\n      const dot = '\\\\.';\n      const opt = input => `(?:${ input })?`;\n      const unsignedDecimalLiteral = [\n        'Infinity',\n        decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n        dot + decimalDigits + opt(exponentPart),\n        decimalDigits + opt(exponentPart)\n      ].join('|');\n      const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n      return new RegExp(`^(${ float })(.*)$`);\n    })();\n    const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n    const parse = (input, accepted) => {\n      const match = Optional.from(pattern.exec(input));\n      return match.bind(array => {\n        const value = Number(array[1]);\n        const unitRaw = array[2];\n        if (isUnit(unitRaw, accepted)) {\n          return Optional.some({\n            value,\n            unit: unitRaw\n          });\n        } else {\n          return Optional.none();\n        }\n      });\n    };\n    const normalise = (input, accepted) => parse(input, accepted).map(({value, unit}) => value + unit);\n\n    const registerController = (editor, spec) => {\n      const getMenuItems = () => {\n        const options = spec.getOptions(editor);\n        const initial = spec.getCurrent(editor).map(spec.hash);\n        const current = value$2();\n        return map$2(options, value => ({\n          type: 'togglemenuitem',\n          text: spec.display(value),\n          onSetup: api => {\n            const setActive = active => {\n              if (active) {\n                current.on(oldApi => oldApi.setActive(false));\n                current.set(api);\n              }\n              api.setActive(active);\n            };\n            setActive(is$1(initial, spec.hash(value)));\n            const unbindWatcher = spec.watcher(editor, value, setActive);\n            return () => {\n              current.clear();\n              unbindWatcher();\n            };\n          },\n          onAction: () => spec.setCurrent(editor, value)\n        }));\n      };\n      editor.ui.registry.addMenuButton(spec.name, {\n        tooltip: spec.text,\n        icon: spec.icon,\n        fetch: callback => callback(getMenuItems()),\n        onSetup: spec.onToolbarSetup\n      });\n      editor.ui.registry.addNestedMenuItem(spec.name, {\n        type: 'nestedmenuitem',\n        text: spec.text,\n        getSubmenuItems: getMenuItems,\n        onSetup: spec.onMenuSetup\n      });\n    };\n    const lineHeightSpec = {\n      name: 'lineheight',\n      text: 'Line height',\n      icon: 'line-height',\n      getOptions: getLineHeightFormats,\n      hash: input => normalise(input, [\n        'fixed',\n        'relative',\n        'empty'\n      ]).getOr(input),\n      display: identity,\n      watcher: (editor, value, callback) => editor.formatter.formatChanged('lineheight', callback, false, { value }).unbind,\n      getCurrent: editor => Optional.from(editor.queryCommandValue('LineHeight')),\n      setCurrent: (editor, value) => editor.execCommand('LineHeight', false, value)\n    };\n    const languageSpec = editor => {\n      const settingsOpt = Optional.from(getContentLanguages(editor));\n      return settingsOpt.map(settings => ({\n        name: 'language',\n        text: 'Language',\n        icon: 'language',\n        getOptions: constant$1(settings),\n        hash: input => isUndefined(input.customCode) ? input.code : `${ input.code }/${ input.customCode }`,\n        display: input => input.title,\n        watcher: (editor, value, callback) => {\n          var _a;\n          return editor.formatter.formatChanged('lang', callback, false, {\n            value: value.code,\n            customValue: (_a = value.customCode) !== null && _a !== void 0 ? _a : null\n          }).unbind;\n        },\n        getCurrent: editor => {\n          const node = SugarElement.fromDom(editor.selection.getNode());\n          return closest$4(node, n => Optional.some(n).filter(isElement$1).bind(ele => {\n            const codeOpt = getOpt(ele, 'lang');\n            return codeOpt.map(code => {\n              const customCode = getOpt(ele, 'data-mce-lang').getOrUndefined();\n              return {\n                code,\n                customCode,\n                title: ''\n              };\n            });\n          }));\n        },\n        setCurrent: (editor, lang) => editor.execCommand('Lang', false, lang),\n        onToolbarSetup: api => {\n          const unbinder = unbindable();\n          api.setActive(editor.formatter.match('lang', {}, undefined, true));\n          unbinder.set(editor.formatter.formatChanged('lang', api.setActive, true));\n          return unbinder.clear;\n        }\n      }));\n    };\n    const register$7 = editor => {\n      registerController(editor, lineHeightSpec);\n      languageSpec(editor).each(spec => registerController(editor, spec));\n    };\n\n    const register$6 = (editor, backstage) => {\n      createAlignMenu(editor, backstage);\n      createFontFamilyMenu(editor, backstage);\n      createStylesMenu(editor, backstage);\n      createBlocksMenu(editor, backstage);\n      createFontSizeMenu(editor, backstage);\n    };\n\n    const onSetupOutdentState = editor => onSetupEvent(editor, 'NodeChange', api => {\n      api.setEnabled(editor.queryCommandState('outdent'));\n    });\n    const registerButtons$2 = editor => {\n      editor.ui.registry.addButton('outdent', {\n        tooltip: 'Decrease indent',\n        icon: 'outdent',\n        onSetup: onSetupOutdentState(editor),\n        onAction: onActionExecCommand(editor, 'outdent')\n      });\n      editor.ui.registry.addButton('indent', {\n        tooltip: 'Increase indent',\n        icon: 'indent',\n        onAction: onActionExecCommand(editor, 'indent')\n      });\n    };\n    const register$5 = editor => {\n      registerButtons$2(editor);\n    };\n\n    const makeSetupHandler = (editor, pasteAsText) => api => {\n      api.setActive(pasteAsText.get());\n      const pastePlainTextToggleHandler = e => {\n        pasteAsText.set(e.state);\n        api.setActive(e.state);\n      };\n      editor.on('PastePlainTextToggle', pastePlainTextToggleHandler);\n      return () => editor.off('PastePlainTextToggle', pastePlainTextToggleHandler);\n    };\n    const register$4 = editor => {\n      const pasteAsText = Cell(getPasteAsText(editor));\n      const onAction = () => editor.execCommand('mceTogglePlainTextPaste');\n      editor.ui.registry.addToggleButton('pastetext', {\n        active: false,\n        icon: 'paste-text',\n        tooltip: 'Paste as text',\n        onAction,\n        onSetup: makeSetupHandler(editor, pasteAsText)\n      });\n      editor.ui.registry.addToggleMenuItem('pastetext', {\n        text: 'Paste as text',\n        icon: 'paste-text',\n        onAction,\n        onSetup: makeSetupHandler(editor, pasteAsText)\n      });\n    };\n\n    const onActionToggleFormat = (editor, fmt) => () => {\n      editor.execCommand('mceToggleFormat', false, fmt);\n    };\n    const registerFormatButtons = editor => {\n      global$1.each([\n        {\n          name: 'bold',\n          text: 'Bold',\n          icon: 'bold'\n        },\n        {\n          name: 'italic',\n          text: 'Italic',\n          icon: 'italic'\n        },\n        {\n          name: 'underline',\n          text: 'Underline',\n          icon: 'underline'\n        },\n        {\n          name: 'strikethrough',\n          text: 'Strikethrough',\n          icon: 'strike-through'\n        },\n        {\n          name: 'subscript',\n          text: 'Subscript',\n          icon: 'subscript'\n        },\n        {\n          name: 'superscript',\n          text: 'Superscript',\n          icon: 'superscript'\n        }\n      ], (btn, _idx) => {\n        editor.ui.registry.addToggleButton(btn.name, {\n          tooltip: btn.text,\n          icon: btn.icon,\n          onSetup: onSetupFormatToggle(editor, btn.name),\n          onAction: onActionToggleFormat(editor, btn.name)\n        });\n      });\n      for (let i = 1; i <= 6; i++) {\n        const name = 'h' + i;\n        editor.ui.registry.addToggleButton(name, {\n          text: name.toUpperCase(),\n          tooltip: 'Heading ' + i,\n          onSetup: onSetupFormatToggle(editor, name),\n          onAction: onActionToggleFormat(editor, name)\n        });\n      }\n    };\n    const registerCommandButtons = editor => {\n      global$1.each([\n        {\n          name: 'cut',\n          text: 'Cut',\n          action: 'Cut',\n          icon: 'cut'\n        },\n        {\n          name: 'copy',\n          text: 'Copy',\n          action: 'Copy',\n          icon: 'copy'\n        },\n        {\n          name: 'paste',\n          text: 'Paste',\n          action: 'Paste',\n          icon: 'paste'\n        },\n        {\n          name: 'help',\n          text: 'Help',\n          action: 'mceHelp',\n          icon: 'help'\n        },\n        {\n          name: 'selectall',\n          text: 'Select all',\n          action: 'SelectAll',\n          icon: 'select-all'\n        },\n        {\n          name: 'newdocument',\n          text: 'New document',\n          action: 'mceNewDocument',\n          icon: 'new-document'\n        },\n        {\n          name: 'removeformat',\n          text: 'Clear formatting',\n          action: 'RemoveFormat',\n          icon: 'remove-formatting'\n        },\n        {\n          name: 'remove',\n          text: 'Remove',\n          action: 'Delete',\n          icon: 'remove'\n        },\n        {\n          name: 'print',\n          text: 'Print',\n          action: 'mcePrint',\n          icon: 'print'\n        },\n        {\n          name: 'hr',\n          text: 'Horizontal line',\n          action: 'InsertHorizontalRule',\n          icon: 'horizontal-rule'\n        }\n      ], btn => {\n        editor.ui.registry.addButton(btn.name, {\n          tooltip: btn.text,\n          icon: btn.icon,\n          onAction: onActionExecCommand(editor, btn.action)\n        });\n      });\n    };\n    const registerCommandToggleButtons = editor => {\n      global$1.each([{\n          name: 'blockquote',\n          text: 'Blockquote',\n          action: 'mceBlockQuote',\n          icon: 'quote'\n        }], btn => {\n        editor.ui.registry.addToggleButton(btn.name, {\n          tooltip: btn.text,\n          icon: btn.icon,\n          onAction: onActionExecCommand(editor, btn.action),\n          onSetup: onSetupFormatToggle(editor, btn.name)\n        });\n      });\n    };\n    const registerButtons$1 = editor => {\n      registerFormatButtons(editor);\n      registerCommandButtons(editor);\n      registerCommandToggleButtons(editor);\n    };\n    const registerMenuItems$2 = editor => {\n      global$1.each([\n        {\n          name: 'bold',\n          text: 'Bold',\n          action: 'Bold',\n          icon: 'bold',\n          shortcut: 'Meta+B'\n        },\n        {\n          name: 'italic',\n          text: 'Italic',\n          action: 'Italic',\n          icon: 'italic',\n          shortcut: 'Meta+I'\n        },\n        {\n          name: 'underline',\n          text: 'Underline',\n          action: 'Underline',\n          icon: 'underline',\n          shortcut: 'Meta+U'\n        },\n        {\n          name: 'strikethrough',\n          text: 'Strikethrough',\n          action: 'Strikethrough',\n          icon: 'strike-through'\n        },\n        {\n          name: 'subscript',\n          text: 'Subscript',\n          action: 'Subscript',\n          icon: 'subscript'\n        },\n        {\n          name: 'superscript',\n          text: 'Superscript',\n          action: 'Superscript',\n          icon: 'superscript'\n        },\n        {\n          name: 'removeformat',\n          text: 'Clear formatting',\n          action: 'RemoveFormat',\n          icon: 'remove-formatting'\n        },\n        {\n          name: 'newdocument',\n          text: 'New document',\n          action: 'mceNewDocument',\n          icon: 'new-document'\n        },\n        {\n          name: 'cut',\n          text: 'Cut',\n          action: 'Cut',\n          icon: 'cut',\n          shortcut: 'Meta+X'\n        },\n        {\n          name: 'copy',\n          text: 'Copy',\n          action: 'Copy',\n          icon: 'copy',\n          shortcut: 'Meta+C'\n        },\n        {\n          name: 'paste',\n          text: 'Paste',\n          action: 'Paste',\n          icon: 'paste',\n          shortcut: 'Meta+V'\n        },\n        {\n          name: 'selectall',\n          text: 'Select all',\n          action: 'SelectAll',\n          icon: 'select-all',\n          shortcut: 'Meta+A'\n        },\n        {\n          name: 'print',\n          text: 'Print...',\n          action: 'mcePrint',\n          icon: 'print',\n          shortcut: 'Meta+P'\n        },\n        {\n          name: 'hr',\n          text: 'Horizontal line',\n          action: 'InsertHorizontalRule',\n          icon: 'horizontal-rule'\n        }\n      ], menuitem => {\n        editor.ui.registry.addMenuItem(menuitem.name, {\n          text: menuitem.text,\n          icon: menuitem.icon,\n          shortcut: menuitem.shortcut,\n          onAction: onActionExecCommand(editor, menuitem.action)\n        });\n      });\n      editor.ui.registry.addMenuItem('codeformat', {\n        text: 'Code',\n        icon: 'sourcecode',\n        onAction: onActionToggleFormat(editor, 'code')\n      });\n    };\n    const register$3 = editor => {\n      registerButtons$1(editor);\n      registerMenuItems$2(editor);\n    };\n\n    const onSetupUndoRedoState = (editor, type) => onSetupEvent(editor, 'Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', api => {\n      api.setEnabled(!editor.mode.isReadOnly() && editor.undoManager[type]());\n    });\n    const registerMenuItems$1 = editor => {\n      editor.ui.registry.addMenuItem('undo', {\n        text: 'Undo',\n        icon: 'undo',\n        shortcut: 'Meta+Z',\n        onSetup: onSetupUndoRedoState(editor, 'hasUndo'),\n        onAction: onActionExecCommand(editor, 'undo')\n      });\n      editor.ui.registry.addMenuItem('redo', {\n        text: 'Redo',\n        icon: 'redo',\n        shortcut: 'Meta+Y',\n        onSetup: onSetupUndoRedoState(editor, 'hasRedo'),\n        onAction: onActionExecCommand(editor, 'redo')\n      });\n    };\n    const registerButtons = editor => {\n      editor.ui.registry.addButton('undo', {\n        tooltip: 'Undo',\n        icon: 'undo',\n        enabled: false,\n        onSetup: onSetupUndoRedoState(editor, 'hasUndo'),\n        onAction: onActionExecCommand(editor, 'undo')\n      });\n      editor.ui.registry.addButton('redo', {\n        tooltip: 'Redo',\n        icon: 'redo',\n        enabled: false,\n        onSetup: onSetupUndoRedoState(editor, 'hasRedo'),\n        onAction: onActionExecCommand(editor, 'redo')\n      });\n    };\n    const register$2 = editor => {\n      registerMenuItems$1(editor);\n      registerButtons(editor);\n    };\n\n    const onSetupVisualAidState = editor => onSetupEvent(editor, 'VisualAid', api => {\n      api.setActive(editor.hasVisual);\n    });\n    const registerMenuItems = editor => {\n      editor.ui.registry.addToggleMenuItem('visualaid', {\n        text: 'Visual aids',\n        onSetup: onSetupVisualAidState(editor),\n        onAction: onActionExecCommand(editor, 'mceToggleVisualAid')\n      });\n    };\n    const registerToolbarButton = editor => {\n      editor.ui.registry.addButton('visualaid', {\n        tooltip: 'Visual aids',\n        text: 'Visual aids',\n        onAction: onActionExecCommand(editor, 'mceToggleVisualAid')\n      });\n    };\n    const register$1 = editor => {\n      registerToolbarButton(editor);\n      registerMenuItems(editor);\n    };\n\n    const setup$6 = (editor, backstage) => {\n      register$8(editor);\n      register$3(editor);\n      register$6(editor, backstage);\n      register$2(editor);\n      register$c(editor);\n      register$1(editor);\n      register$5(editor);\n      register$7(editor);\n      register$4(editor);\n    };\n\n    const patchPipeConfig = config => isString(config) ? config.split(/[ ,]/) : config;\n    const option = name => editor => editor.options.get(name);\n    const register = editor => {\n      const registerOption = editor.options.register;\n      registerOption('contextmenu_avoid_overlap', {\n        processor: 'string',\n        default: ''\n      });\n      registerOption('contextmenu_never_use_native', {\n        processor: 'boolean',\n        default: false\n      });\n      registerOption('contextmenu', {\n        processor: value => {\n          if (value === false) {\n            return {\n              value: [],\n              valid: true\n            };\n          } else if (isString(value) || isArrayOf(value, isString)) {\n            return {\n              value: patchPipeConfig(value),\n              valid: true\n            };\n          } else {\n            return {\n              valid: false,\n              message: 'Must be false or a string.'\n            };\n          }\n        },\n        default: 'link linkchecker image editimage table spellchecker configurepermanentpen'\n      });\n    };\n    const shouldNeverUseNative = option('contextmenu_never_use_native');\n    const getAvoidOverlapSelector = option('contextmenu_avoid_overlap');\n    const isContextMenuDisabled = editor => getContextMenu(editor).length === 0;\n    const getContextMenu = editor => {\n      const contextMenus = editor.ui.registry.getAll().contextMenus;\n      const contextMenu = editor.options.get('contextmenu');\n      if (editor.options.isSet('contextmenu')) {\n        return contextMenu;\n      } else {\n        return filter$2(contextMenu, item => has$2(contextMenus, item));\n      }\n    };\n\n    const nu = (x, y) => ({\n      type: 'makeshift',\n      x,\n      y\n    });\n    const transpose = (pos, dx, dy) => {\n      return nu(pos.x + dx, pos.y + dy);\n    };\n    const isTouchEvent$1 = e => e.type === 'longpress' || e.type.indexOf('touch') === 0;\n    const fromPageXY = e => {\n      if (isTouchEvent$1(e)) {\n        const touch = e.touches[0];\n        return nu(touch.pageX, touch.pageY);\n      } else {\n        return nu(e.pageX, e.pageY);\n      }\n    };\n    const fromClientXY = e => {\n      if (isTouchEvent$1(e)) {\n        const touch = e.touches[0];\n        return nu(touch.clientX, touch.clientY);\n      } else {\n        return nu(e.clientX, e.clientY);\n      }\n    };\n    const transposeContentAreaContainer = (element, pos) => {\n      const containerPos = global$7.DOM.getPos(element);\n      return transpose(pos, containerPos.x, containerPos.y);\n    };\n    const getPointAnchor = (editor, e) => {\n      if (e.type === 'contextmenu' || e.type === 'longpress') {\n        if (editor.inline) {\n          return fromPageXY(e);\n        } else {\n          return transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e));\n        }\n      } else {\n        return getSelectionAnchor(editor);\n      }\n    };\n    const getSelectionAnchor = editor => {\n      return {\n        type: 'selection',\n        root: SugarElement.fromDom(editor.selection.getNode())\n      };\n    };\n    const getNodeAnchor = editor => ({\n      type: 'node',\n      node: Optional.some(SugarElement.fromDom(editor.selection.getNode())),\n      root: SugarElement.fromDom(editor.getBody())\n    });\n    const getAnchorSpec$1 = (editor, e, anchorType) => {\n      switch (anchorType) {\n      case 'node':\n        return getNodeAnchor(editor);\n      case 'point':\n        return getPointAnchor(editor, e);\n      case 'selection':\n        return getSelectionAnchor(editor);\n      }\n    };\n\n    const initAndShow$1 = (editor, e, buildMenu, backstage, contextmenu, anchorType) => {\n      const items = buildMenu();\n      const anchorSpec = getAnchorSpec$1(editor, e, anchorType);\n      build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n        isHorizontalMenu: false,\n        search: Optional.none()\n      }).map(menuData => {\n        e.preventDefault();\n        InlineView.showMenuAt(contextmenu, { anchor: anchorSpec }, {\n          menu: { markers: markers('normal') },\n          data: menuData\n        });\n      });\n    };\n\n    const layouts = {\n      onLtr: () => [\n        south$2,\n        southeast$2,\n        southwest$2,\n        northeast$2,\n        northwest$2,\n        north$2,\n        north,\n        south,\n        northeast,\n        southeast,\n        northwest,\n        southwest\n      ],\n      onRtl: () => [\n        south$2,\n        southwest$2,\n        southeast$2,\n        northwest$2,\n        northeast$2,\n        north$2,\n        north,\n        south,\n        northwest,\n        southwest,\n        northeast,\n        southeast\n      ]\n    };\n    const bubbleSize = 12;\n    const bubbleAlignments = {\n      valignCentre: [],\n      alignCentre: [],\n      alignLeft: ['tox-pop--align-left'],\n      alignRight: ['tox-pop--align-right'],\n      right: ['tox-pop--right'],\n      left: ['tox-pop--left'],\n      bottom: ['tox-pop--bottom'],\n      top: ['tox-pop--top']\n    };\n    const isTouchWithinSelection = (editor, e) => {\n      const selection = editor.selection;\n      if (selection.isCollapsed() || e.touches.length < 1) {\n        return false;\n      } else {\n        const touch = e.touches[0];\n        const rng = selection.getRng();\n        const rngRectOpt = getFirstRect(editor.getWin(), SimSelection.domRange(rng));\n        return rngRectOpt.exists(rngRect => rngRect.left <= touch.clientX && rngRect.right >= touch.clientX && rngRect.top <= touch.clientY && rngRect.bottom >= touch.clientY);\n      }\n    };\n    const setupiOSOverrides = editor => {\n      const originalSelection = editor.selection.getRng();\n      const selectionReset = () => {\n        global$9.setEditorTimeout(editor, () => {\n          editor.selection.setRng(originalSelection);\n        }, 10);\n        unbindEventListeners();\n      };\n      editor.once('touchend', selectionReset);\n      const preventMousedown = e => {\n        e.preventDefault();\n        e.stopImmediatePropagation();\n      };\n      editor.on('mousedown', preventMousedown, true);\n      const clearSelectionReset = () => unbindEventListeners();\n      editor.once('longpresscancel', clearSelectionReset);\n      const unbindEventListeners = () => {\n        editor.off('touchend', selectionReset);\n        editor.off('longpresscancel', clearSelectionReset);\n        editor.off('mousedown', preventMousedown);\n      };\n    };\n    const getAnchorSpec = (editor, e, anchorType) => {\n      const anchorSpec = getAnchorSpec$1(editor, e, anchorType);\n      const bubbleYOffset = anchorType === 'point' ? bubbleSize : 0;\n      return {\n        bubble: nu$5(0, bubbleYOffset, bubbleAlignments),\n        layouts,\n        overrides: {\n          maxWidthFunction: expandable(),\n          maxHeightFunction: expandable$1()\n        },\n        ...anchorSpec\n      };\n    };\n    const show = (editor, e, items, backstage, contextmenu, anchorType, highlightImmediately) => {\n      const anchorSpec = getAnchorSpec(editor, e, anchorType);\n      build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n        isHorizontalMenu: true,\n        search: Optional.none()\n      }).map(menuData => {\n        e.preventDefault();\n        const highlightOnOpen = highlightImmediately ? HighlightOnOpen.HighlightMenuAndItem : HighlightOnOpen.HighlightNone;\n        InlineView.showMenuWithinBounds(contextmenu, { anchor: anchorSpec }, {\n          menu: {\n            markers: markers('normal'),\n            highlightOnOpen\n          },\n          data: menuData,\n          type: 'horizontal'\n        }, () => Optional.some(getContextToolbarBounds(editor, backstage.shared, anchorType === 'node' ? 'node' : 'selection')));\n        editor.dispatch(hideContextToolbarEvent);\n      });\n    };\n    const initAndShow = (editor, e, buildMenu, backstage, contextmenu, anchorType) => {\n      const detection = detect$1();\n      const isiOS = detection.os.isiOS();\n      const isMacOS = detection.os.isMacOS();\n      const isAndroid = detection.os.isAndroid();\n      const isTouch = detection.deviceType.isTouch();\n      const shouldHighlightImmediately = () => !(isAndroid || isiOS || isMacOS && isTouch);\n      const open = () => {\n        const items = buildMenu();\n        show(editor, e, items, backstage, contextmenu, anchorType, shouldHighlightImmediately());\n      };\n      if ((isMacOS || isiOS) && anchorType !== 'node') {\n        const openiOS = () => {\n          setupiOSOverrides(editor);\n          open();\n        };\n        if (isTouchWithinSelection(editor, e)) {\n          openiOS();\n        } else {\n          editor.once('selectionchange', openiOS);\n          editor.once('touchend', () => editor.off('selectionchange', openiOS));\n        }\n      } else {\n        open();\n      }\n    };\n\n    const isSeparator = item => isString(item) ? item === '|' : item.type === 'separator';\n    const separator = { type: 'separator' };\n    const makeContextItem = item => {\n      const commonMenuItem = item => ({\n        text: item.text,\n        icon: item.icon,\n        enabled: item.enabled,\n        shortcut: item.shortcut\n      });\n      if (isString(item)) {\n        return item;\n      } else {\n        switch (item.type) {\n        case 'separator':\n          return separator;\n        case 'submenu':\n          return {\n            type: 'nestedmenuitem',\n            ...commonMenuItem(item),\n            getSubmenuItems: () => {\n              const items = item.getSubmenuItems();\n              if (isString(items)) {\n                return items;\n              } else {\n                return map$2(items, makeContextItem);\n              }\n            }\n          };\n        default:\n          const commonItem = item;\n          return {\n            type: 'menuitem',\n            ...commonMenuItem(commonItem),\n            onAction: noarg(commonItem.onAction)\n          };\n        }\n      }\n    };\n    const addContextMenuGroup = (xs, groupItems) => {\n      if (groupItems.length === 0) {\n        return xs;\n      }\n      const lastMenuItem = last$1(xs).filter(item => !isSeparator(item));\n      const before = lastMenuItem.fold(() => [], _ => [separator]);\n      return xs.concat(before).concat(groupItems).concat([separator]);\n    };\n    const generateContextMenu = (contextMenus, menuConfig, selectedElement) => {\n      const sections = foldl(menuConfig, (acc, name) => {\n        return get$g(contextMenus, name.toLowerCase()).map(menu => {\n          const items = menu.update(selectedElement);\n          if (isString(items)) {\n            return addContextMenuGroup(acc, items.split(' '));\n          } else if (items.length > 0) {\n            const allItems = map$2(items, makeContextItem);\n            return addContextMenuGroup(acc, allItems);\n          } else {\n            return acc;\n          }\n        }).getOrThunk(() => acc.concat([name]));\n      }, []);\n      if (sections.length > 0 && isSeparator(sections[sections.length - 1])) {\n        sections.pop();\n      }\n      return sections;\n    };\n    const isNativeOverrideKeyEvent = (editor, e) => e.ctrlKey && !shouldNeverUseNative(editor);\n    const isTouchEvent = e => e.type === 'longpress' || has$2(e, 'touches');\n    const isTriggeredByKeyboard = (editor, e) => !isTouchEvent(e) && (e.button !== 2 || e.target === editor.getBody() && e.pointerType === '');\n    const getSelectedElement = (editor, e) => isTriggeredByKeyboard(editor, e) ? editor.selection.getStart(true) : e.target;\n    const getAnchorType = (editor, e) => {\n      const selector = getAvoidOverlapSelector(editor);\n      const anchorType = isTriggeredByKeyboard(editor, e) ? 'selection' : 'point';\n      if (isNotEmpty(selector)) {\n        const target = getSelectedElement(editor, e);\n        const selectorExists = closest(SugarElement.fromDom(target), selector);\n        return selectorExists ? 'node' : anchorType;\n      } else {\n        return anchorType;\n      }\n    };\n    const setup$5 = (editor, lazySink, backstage) => {\n      const detection = detect$1();\n      const isTouch = detection.deviceType.isTouch;\n      const contextmenu = build$1(InlineView.sketch({\n        dom: { tag: 'div' },\n        lazySink,\n        onEscape: () => editor.focus(),\n        onShow: () => backstage.setContextMenuState(true),\n        onHide: () => backstage.setContextMenuState(false),\n        fireDismissalEventInstead: {},\n        inlineBehaviours: derive$1([config('dismissContextMenu', [run$1(dismissRequested(), (comp, _se) => {\n              Sandboxing.close(comp);\n              editor.focus();\n            })])])\n      }));\n      const hideContextMenu = () => InlineView.hide(contextmenu);\n      const showContextMenu = e => {\n        if (shouldNeverUseNative(editor)) {\n          e.preventDefault();\n        }\n        if (isNativeOverrideKeyEvent(editor, e) || isContextMenuDisabled(editor)) {\n          return;\n        }\n        const anchorType = getAnchorType(editor, e);\n        const buildMenu = () => {\n          const selectedElement = getSelectedElement(editor, e);\n          const registry = editor.ui.registry.getAll();\n          const menuConfig = getContextMenu(editor);\n          return generateContextMenu(registry.contextMenus, menuConfig, selectedElement);\n        };\n        const initAndShow$2 = isTouch() ? initAndShow : initAndShow$1;\n        initAndShow$2(editor, e, buildMenu, backstage, contextmenu, anchorType);\n      };\n      editor.on('init', () => {\n        const hideEvents = 'ResizeEditor ScrollContent ScrollWindow longpresscancel' + (isTouch() ? '' : ' ResizeWindow');\n        editor.on(hideEvents, hideContextMenu);\n        editor.on('longpress contextmenu', showContextMenu);\n      });\n    };\n\n    const adt = Adt.generate([\n      {\n        offset: [\n          'x',\n          'y'\n        ]\n      },\n      {\n        absolute: [\n          'x',\n          'y'\n        ]\n      },\n      {\n        fixed: [\n          'x',\n          'y'\n        ]\n      }\n    ]);\n    const subtract = change => point => point.translate(-change.left, -change.top);\n    const add = change => point => point.translate(change.left, change.top);\n    const transform = changes => (x, y) => foldl(changes, (rest, f) => f(rest), SugarPosition(x, y));\n    const asFixed = (coord, scroll, origin) => coord.fold(transform([\n      add(origin),\n      subtract(scroll)\n    ]), transform([subtract(scroll)]), transform([]));\n    const asAbsolute = (coord, scroll, origin) => coord.fold(transform([add(origin)]), transform([]), transform([add(scroll)]));\n    const asOffset = (coord, scroll, origin) => coord.fold(transform([]), transform([subtract(origin)]), transform([\n      add(scroll),\n      subtract(origin)\n    ]));\n    const withinRange = (coord1, coord2, xRange, yRange, scroll, origin) => {\n      const a1 = asAbsolute(coord1, scroll, origin);\n      const a2 = asAbsolute(coord2, scroll, origin);\n      return Math.abs(a1.left - a2.left) <= xRange && Math.abs(a1.top - a2.top) <= yRange;\n    };\n    const getDeltas = (coord1, coord2, xRange, yRange, scroll, origin) => {\n      const a1 = asAbsolute(coord1, scroll, origin);\n      const a2 = asAbsolute(coord2, scroll, origin);\n      const left = Math.abs(a1.left - a2.left);\n      const top = Math.abs(a1.top - a2.top);\n      return SugarPosition(left, top);\n    };\n    const toStyles = (coord, scroll, origin) => {\n      const stylesOpt = coord.fold((x, y) => ({\n        position: Optional.some('absolute'),\n        left: Optional.some(x + 'px'),\n        top: Optional.some(y + 'px')\n      }), (x, y) => ({\n        position: Optional.some('absolute'),\n        left: Optional.some(x - origin.left + 'px'),\n        top: Optional.some(y - origin.top + 'px')\n      }), (x, y) => ({\n        position: Optional.some('fixed'),\n        left: Optional.some(x + 'px'),\n        top: Optional.some(y + 'px')\n      }));\n      return {\n        right: Optional.none(),\n        bottom: Optional.none(),\n        ...stylesOpt\n      };\n    };\n    const translate = (coord, deltaX, deltaY) => coord.fold((x, y) => offset(x + deltaX, y + deltaY), (x, y) => absolute(x + deltaX, y + deltaY), (x, y) => fixed(x + deltaX, y + deltaY));\n    const absorb = (partialCoord, originalCoord, scroll, origin) => {\n      const absorbOne = (stencil, nu) => (optX, optY) => {\n        const original = stencil(originalCoord, scroll, origin);\n        return nu(optX.getOr(original.left), optY.getOr(original.top));\n      };\n      return partialCoord.fold(absorbOne(asOffset, offset), absorbOne(asAbsolute, absolute), absorbOne(asFixed, fixed));\n    };\n    const offset = adt.offset;\n    const absolute = adt.absolute;\n    const fixed = adt.fixed;\n\n    const parseAttrToInt = (element, name) => {\n      const value = get$f(element, name);\n      return isUndefined(value) ? NaN : parseInt(value, 10);\n    };\n    const get = (component, snapsInfo) => {\n      const element = component.element;\n      const x = parseAttrToInt(element, snapsInfo.leftAttr);\n      const y = parseAttrToInt(element, snapsInfo.topAttr);\n      return isNaN(x) || isNaN(y) ? Optional.none() : Optional.some(SugarPosition(x, y));\n    };\n    const set = (component, snapsInfo, pt) => {\n      const element = component.element;\n      set$9(element, snapsInfo.leftAttr, pt.left + 'px');\n      set$9(element, snapsInfo.topAttr, pt.top + 'px');\n    };\n    const clear = (component, snapsInfo) => {\n      const element = component.element;\n      remove$7(element, snapsInfo.leftAttr);\n      remove$7(element, snapsInfo.topAttr);\n    };\n\n    const getCoords = (component, snapInfo, coord, delta) => get(component, snapInfo).fold(() => coord, fixed$1 => fixed(fixed$1.left + delta.left, fixed$1.top + delta.top));\n    const moveOrSnap = (component, snapInfo, coord, delta, scroll, origin) => {\n      const newCoord = getCoords(component, snapInfo, coord, delta);\n      const snap = snapInfo.mustSnap ? findClosestSnap(component, snapInfo, newCoord, scroll, origin) : findSnap(component, snapInfo, newCoord, scroll, origin);\n      const fixedCoord = asFixed(newCoord, scroll, origin);\n      set(component, snapInfo, fixedCoord);\n      return snap.fold(() => ({\n        coord: fixed(fixedCoord.left, fixedCoord.top),\n        extra: Optional.none()\n      }), spanned => ({\n        coord: spanned.output,\n        extra: spanned.extra\n      }));\n    };\n    const stopDrag = (component, snapInfo) => {\n      clear(component, snapInfo);\n    };\n    const findMatchingSnap = (snaps, newCoord, scroll, origin) => findMap(snaps, snap => {\n      const sensor = snap.sensor;\n      const inRange = withinRange(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin);\n      return inRange ? Optional.some({\n        output: absorb(snap.output, newCoord, scroll, origin),\n        extra: snap.extra\n      }) : Optional.none();\n    });\n    const findClosestSnap = (component, snapInfo, newCoord, scroll, origin) => {\n      const snaps = snapInfo.getSnapPoints(component);\n      const matchSnap = findMatchingSnap(snaps, newCoord, scroll, origin);\n      return matchSnap.orThunk(() => {\n        const bestSnap = foldl(snaps, (acc, snap) => {\n          const sensor = snap.sensor;\n          const deltas = getDeltas(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin);\n          return acc.deltas.fold(() => ({\n            deltas: Optional.some(deltas),\n            snap: Optional.some(snap)\n          }), bestDeltas => {\n            const currAvg = (deltas.left + deltas.top) / 2;\n            const bestAvg = (bestDeltas.left + bestDeltas.top) / 2;\n            if (currAvg <= bestAvg) {\n              return {\n                deltas: Optional.some(deltas),\n                snap: Optional.some(snap)\n              };\n            } else {\n              return acc;\n            }\n          });\n        }, {\n          deltas: Optional.none(),\n          snap: Optional.none()\n        });\n        return bestSnap.snap.map(snap => ({\n          output: absorb(snap.output, newCoord, scroll, origin),\n          extra: snap.extra\n        }));\n      });\n    };\n    const findSnap = (component, snapInfo, newCoord, scroll, origin) => {\n      const snaps = snapInfo.getSnapPoints(component);\n      return findMatchingSnap(snaps, newCoord, scroll, origin);\n    };\n    const snapTo$1 = (snap, scroll, origin) => ({\n      coord: absorb(snap.output, snap.output, scroll, origin),\n      extra: snap.extra\n    });\n\n    const snapTo = (component, dragConfig, _state, snap) => {\n      const target = dragConfig.getTarget(component.element);\n      if (dragConfig.repositionTarget) {\n        const doc = owner$4(component.element);\n        const scroll = get$b(doc);\n        const origin = getOrigin(target);\n        const snapPin = snapTo$1(snap, scroll, origin);\n        const styles = toStyles(snapPin.coord, scroll, origin);\n        setOptions(target, styles);\n      }\n    };\n\n    var DraggingApis = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        snapTo: snapTo\n    });\n\n    const initialAttribute = 'data-initial-z-index';\n    const resetZIndex = blocker => {\n      parent(blocker.element).filter(isElement$1).each(root => {\n        getOpt(root, initialAttribute).fold(() => remove$6(root, 'z-index'), zIndex => set$8(root, 'z-index', zIndex));\n        remove$7(root, initialAttribute);\n      });\n    };\n    const changeZIndex = blocker => {\n      parent(blocker.element).filter(isElement$1).each(root => {\n        getRaw(root, 'z-index').each(zindex => {\n          set$9(root, initialAttribute, zindex);\n        });\n        set$8(root, 'z-index', get$e(blocker.element, 'z-index'));\n      });\n    };\n    const instigate = (anyComponent, blocker) => {\n      anyComponent.getSystem().addToGui(blocker);\n      changeZIndex(blocker);\n    };\n    const discard = blocker => {\n      resetZIndex(blocker);\n      blocker.getSystem().removeFromGui(blocker);\n    };\n    const createComponent = (component, blockerClass, blockerEvents) => component.getSystem().build(Container.sketch({\n      dom: {\n        styles: {\n          'left': '0px',\n          'top': '0px',\n          'width': '100%',\n          'height': '100%',\n          'position': 'fixed',\n          'z-index': '1000000000000000'\n        },\n        classes: [blockerClass]\n      },\n      events: blockerEvents\n    }));\n\n    var SnapSchema = optionObjOf('snaps', [\n      required$1('getSnapPoints'),\n      onHandler('onSensor'),\n      required$1('leftAttr'),\n      required$1('topAttr'),\n      defaulted('lazyViewport', win),\n      defaulted('mustSnap', false)\n    ]);\n\n    const schema$6 = [\n      defaulted('useFixed', never),\n      required$1('blockerClass'),\n      defaulted('getTarget', identity),\n      defaulted('onDrag', noop),\n      defaulted('repositionTarget', true),\n      defaulted('onDrop', noop),\n      defaultedFunction('getBounds', win),\n      SnapSchema\n    ];\n\n    const getCurrentCoord = target => lift3(getRaw(target, 'left'), getRaw(target, 'top'), getRaw(target, 'position'), (left, top, position) => {\n      const nu = position === 'fixed' ? fixed : offset;\n      return nu(parseInt(left, 10), parseInt(top, 10));\n    }).getOrThunk(() => {\n      const location = absolute$3(target);\n      return absolute(location.left, location.top);\n    });\n    const clampCoords = (component, coords, scroll, origin, startData) => {\n      const bounds = startData.bounds;\n      const absoluteCoord = asAbsolute(coords, scroll, origin);\n      const newX = clamp(absoluteCoord.left, bounds.x, bounds.x + bounds.width - startData.width);\n      const newY = clamp(absoluteCoord.top, bounds.y, bounds.y + bounds.height - startData.height);\n      const newCoords = absolute(newX, newY);\n      return coords.fold(() => {\n        const offset$1 = asOffset(newCoords, scroll, origin);\n        return offset(offset$1.left, offset$1.top);\n      }, constant$1(newCoords), () => {\n        const fixed$1 = asFixed(newCoords, scroll, origin);\n        return fixed(fixed$1.left, fixed$1.top);\n      });\n    };\n    const calcNewCoord = (component, optSnaps, currentCoord, scroll, origin, delta, startData) => {\n      const newCoord = optSnaps.fold(() => {\n        const translated = translate(currentCoord, delta.left, delta.top);\n        const fixedCoord = asFixed(translated, scroll, origin);\n        return fixed(fixedCoord.left, fixedCoord.top);\n      }, snapInfo => {\n        const snapping = moveOrSnap(component, snapInfo, currentCoord, delta, scroll, origin);\n        snapping.extra.each(extra => {\n          snapInfo.onSensor(component, extra);\n        });\n        return snapping.coord;\n      });\n      return clampCoords(component, newCoord, scroll, origin, startData);\n    };\n    const dragBy = (component, dragConfig, startData, delta) => {\n      const target = dragConfig.getTarget(component.element);\n      if (dragConfig.repositionTarget) {\n        const doc = owner$4(component.element);\n        const scroll = get$b(doc);\n        const origin = getOrigin(target);\n        const currentCoord = getCurrentCoord(target);\n        const newCoord = calcNewCoord(component, dragConfig.snaps, currentCoord, scroll, origin, delta, startData);\n        const styles = toStyles(newCoord, scroll, origin);\n        setOptions(target, styles);\n      }\n      dragConfig.onDrag(component, target, delta);\n    };\n\n    const calcStartData = (dragConfig, comp) => ({\n      bounds: dragConfig.getBounds(),\n      height: getOuter$2(comp.element),\n      width: getOuter$1(comp.element)\n    });\n    const move = (component, dragConfig, dragState, dragMode, event) => {\n      const delta = dragState.update(dragMode, event);\n      const dragStartData = dragState.getStartData().getOrThunk(() => calcStartData(dragConfig, component));\n      delta.each(dlt => {\n        dragBy(component, dragConfig, dragStartData, dlt);\n      });\n    };\n    const stop = (component, blocker, dragConfig, dragState) => {\n      blocker.each(discard);\n      dragConfig.snaps.each(snapInfo => {\n        stopDrag(component, snapInfo);\n      });\n      const target = dragConfig.getTarget(component.element);\n      dragState.reset();\n      dragConfig.onDrop(component, target);\n    };\n    const handlers = events => (dragConfig, dragState) => {\n      const updateStartState = comp => {\n        dragState.setStartData(calcStartData(dragConfig, comp));\n      };\n      return derive$2([\n        run$1(windowScroll(), comp => {\n          dragState.getStartData().each(() => updateStartState(comp));\n        }),\n        ...events(dragConfig, dragState, updateStartState)\n      ]);\n    };\n\n    const init$2 = dragApi => derive$2([\n      run$1(mousedown(), dragApi.forceDrop),\n      run$1(mouseup(), dragApi.drop),\n      run$1(mousemove(), (comp, simulatedEvent) => {\n        dragApi.move(simulatedEvent.event);\n      }),\n      run$1(mouseout(), dragApi.delayDrop)\n    ]);\n\n    const getData$1 = event => Optional.from(SugarPosition(event.x, event.y));\n    const getDelta$1 = (old, nu) => SugarPosition(nu.left - old.left, nu.top - old.top);\n\n    var MouseData = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        getData: getData$1,\n        getDelta: getDelta$1\n    });\n\n    const events$2 = (dragConfig, dragState, updateStartState) => [run$1(mousedown(), (component, simulatedEvent) => {\n        const raw = simulatedEvent.event.raw;\n        if (raw.button !== 0) {\n          return;\n        }\n        simulatedEvent.stop();\n        const stop$1 = () => stop(component, Optional.some(blocker), dragConfig, dragState);\n        const delayDrop = DelayedFunction(stop$1, 200);\n        const dragApi = {\n          drop: stop$1,\n          delayDrop: delayDrop.schedule,\n          forceDrop: stop$1,\n          move: event => {\n            delayDrop.cancel();\n            move(component, dragConfig, dragState, MouseData, event);\n          }\n        };\n        const blocker = createComponent(component, dragConfig.blockerClass, init$2(dragApi));\n        const start = () => {\n          updateStartState(component);\n          instigate(component, blocker);\n        };\n        start();\n      })];\n    const schema$5 = [\n      ...schema$6,\n      output$1('dragger', { handlers: handlers(events$2) })\n    ];\n\n    const init$1 = dragApi => derive$2([\n      run$1(touchstart(), dragApi.forceDrop),\n      run$1(touchend(), dragApi.drop),\n      run$1(touchcancel(), dragApi.drop),\n      run$1(touchmove(), (comp, simulatedEvent) => {\n        dragApi.move(simulatedEvent.event);\n      })\n    ]);\n\n    const getDataFrom = touches => {\n      const touch = touches[0];\n      return Optional.some(SugarPosition(touch.clientX, touch.clientY));\n    };\n    const getData = event => {\n      const raw = event.raw;\n      const touches = raw.touches;\n      return touches.length === 1 ? getDataFrom(touches) : Optional.none();\n    };\n    const getDelta = (old, nu) => SugarPosition(nu.left - old.left, nu.top - old.top);\n\n    var TouchData = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        getData: getData,\n        getDelta: getDelta\n    });\n\n    const events$1 = (dragConfig, dragState, updateStartState) => {\n      const blockerSingleton = value$2();\n      const stopBlocking = component => {\n        stop(component, blockerSingleton.get(), dragConfig, dragState);\n        blockerSingleton.clear();\n      };\n      return [\n        run$1(touchstart(), (component, simulatedEvent) => {\n          simulatedEvent.stop();\n          const stop = () => stopBlocking(component);\n          const dragApi = {\n            drop: stop,\n            delayDrop: noop,\n            forceDrop: stop,\n            move: event => {\n              move(component, dragConfig, dragState, TouchData, event);\n            }\n          };\n          const blocker = createComponent(component, dragConfig.blockerClass, init$1(dragApi));\n          blockerSingleton.set(blocker);\n          const start = () => {\n            updateStartState(component);\n            instigate(component, blocker);\n          };\n          start();\n        }),\n        run$1(touchmove(), (component, simulatedEvent) => {\n          simulatedEvent.stop();\n          move(component, dragConfig, dragState, TouchData, simulatedEvent.event);\n        }),\n        run$1(touchend(), (component, simulatedEvent) => {\n          simulatedEvent.stop();\n          stopBlocking(component);\n        }),\n        run$1(touchcancel(), stopBlocking)\n      ];\n    };\n    const schema$4 = [\n      ...schema$6,\n      output$1('dragger', { handlers: handlers(events$1) })\n    ];\n\n    const events = (dragConfig, dragState, updateStartState) => [\n      ...events$2(dragConfig, dragState, updateStartState),\n      ...events$1(dragConfig, dragState, updateStartState)\n    ];\n    const schema$3 = [\n      ...schema$6,\n      output$1('dragger', { handlers: handlers(events) })\n    ];\n\n    const mouse = schema$5;\n    const touch = schema$4;\n    const mouseOrTouch = schema$3;\n\n    var DraggingBranches = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        mouse: mouse,\n        touch: touch,\n        mouseOrTouch: mouseOrTouch\n    });\n\n    const init = () => {\n      let previous = Optional.none();\n      let startData = Optional.none();\n      const reset = () => {\n        previous = Optional.none();\n        startData = Optional.none();\n      };\n      const calculateDelta = (mode, nu) => {\n        const result = previous.map(old => mode.getDelta(old, nu));\n        previous = Optional.some(nu);\n        return result;\n      };\n      const update = (mode, dragEvent) => mode.getData(dragEvent).bind(nuData => calculateDelta(mode, nuData));\n      const setStartData = data => {\n        startData = Optional.some(data);\n      };\n      const getStartData = () => startData;\n      const readState = constant$1({});\n      return nu$8({\n        readState,\n        reset,\n        update,\n        getStartData,\n        setStartData\n      });\n    };\n\n    var DragState = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        init: init\n    });\n\n    const Dragging = createModes({\n      branchKey: 'mode',\n      branches: DraggingBranches,\n      name: 'dragging',\n      active: {\n        events: (dragConfig, dragState) => {\n          const dragger = dragConfig.dragger;\n          return dragger.handlers(dragConfig, dragState);\n        }\n      },\n      extra: {\n        snap: sConfig => ({\n          sensor: sConfig.sensor,\n          range: sConfig.range,\n          output: sConfig.output,\n          extra: Optional.from(sConfig.extra)\n        })\n      },\n      state: DragState,\n      apis: DraggingApis\n    });\n\n    const snapWidth = 40;\n    const snapOffset = snapWidth / 2;\n    const calcSnap = (selectorOpt, td, x, y, width, height) => selectorOpt.fold(() => Dragging.snap({\n      sensor: absolute(x - snapOffset, y - snapOffset),\n      range: SugarPosition(width, height),\n      output: absolute(Optional.some(x), Optional.some(y)),\n      extra: { td }\n    }), selectorHandle => {\n      const sensorLeft = x - snapOffset;\n      const sensorTop = y - snapOffset;\n      const sensorWidth = snapWidth;\n      const sensorHeight = snapWidth;\n      const rect = selectorHandle.element.dom.getBoundingClientRect();\n      return Dragging.snap({\n        sensor: absolute(sensorLeft, sensorTop),\n        range: SugarPosition(sensorWidth, sensorHeight),\n        output: absolute(Optional.some(x - rect.width / 2), Optional.some(y - rect.height / 2)),\n        extra: { td }\n      });\n    });\n    const getSnapsConfig = (getSnapPoints, cell, onChange) => {\n      const isSameCell = (cellOpt, td) => cellOpt.exists(currentTd => eq(currentTd, td));\n      return {\n        getSnapPoints,\n        leftAttr: 'data-drag-left',\n        topAttr: 'data-drag-top',\n        onSensor: (component, extra) => {\n          const td = extra.td;\n          if (!isSameCell(cell.get(), td)) {\n            cell.set(td);\n            onChange(td);\n          }\n        },\n        mustSnap: true\n      };\n    };\n    const createSelector = snaps => record(Button.sketch({\n      dom: {\n        tag: 'div',\n        classes: ['tox-selector']\n      },\n      buttonBehaviours: derive$1([\n        Dragging.config({\n          mode: 'mouseOrTouch',\n          blockerClass: 'blocker',\n          snaps\n        }),\n        Unselecting.config({})\n      ]),\n      eventOrder: {\n        mousedown: [\n          'dragging',\n          'alloy.base.behaviour'\n        ],\n        touchstart: [\n          'dragging',\n          'alloy.base.behaviour'\n        ]\n      }\n    }));\n    const setup$4 = (editor, sink) => {\n      const tlTds = Cell([]);\n      const brTds = Cell([]);\n      const isVisible = Cell(false);\n      const startCell = value$2();\n      const finishCell = value$2();\n      const getTopLeftSnap = td => {\n        const box = absolute$2(td);\n        return calcSnap(memTopLeft.getOpt(sink), td, box.x, box.y, box.width, box.height);\n      };\n      const getTopLeftSnaps = () => map$2(tlTds.get(), td => getTopLeftSnap(td));\n      const getBottomRightSnap = td => {\n        const box = absolute$2(td);\n        return calcSnap(memBottomRight.getOpt(sink), td, box.right, box.bottom, box.width, box.height);\n      };\n      const getBottomRightSnaps = () => map$2(brTds.get(), td => getBottomRightSnap(td));\n      const topLeftSnaps = getSnapsConfig(getTopLeftSnaps, startCell, start => {\n        finishCell.get().each(finish => {\n          editor.dispatch('TableSelectorChange', {\n            start,\n            finish\n          });\n        });\n      });\n      const bottomRightSnaps = getSnapsConfig(getBottomRightSnaps, finishCell, finish => {\n        startCell.get().each(start => {\n          editor.dispatch('TableSelectorChange', {\n            start,\n            finish\n          });\n        });\n      });\n      const memTopLeft = createSelector(topLeftSnaps);\n      const memBottomRight = createSelector(bottomRightSnaps);\n      const topLeft = build$1(memTopLeft.asSpec());\n      const bottomRight = build$1(memBottomRight.asSpec());\n      const showOrHideHandle = (selector, cell, isAbove, isBelow) => {\n        const cellRect = cell.dom.getBoundingClientRect();\n        remove$6(selector.element, 'display');\n        const viewportHeight = defaultView(SugarElement.fromDom(editor.getBody())).dom.innerHeight;\n        const aboveViewport = isAbove(cellRect);\n        const belowViewport = isBelow(cellRect, viewportHeight);\n        if (aboveViewport || belowViewport) {\n          set$8(selector.element, 'display', 'none');\n        }\n      };\n      const snapTo = (selector, cell, getSnapConfig, pos) => {\n        const snap = getSnapConfig(cell);\n        Dragging.snapTo(selector, snap);\n        const isAbove = rect => rect[pos] < 0;\n        const isBelow = (rect, viewportHeight) => rect[pos] > viewportHeight;\n        showOrHideHandle(selector, cell, isAbove, isBelow);\n      };\n      const snapTopLeft = cell => snapTo(topLeft, cell, getTopLeftSnap, 'top');\n      const snapLastTopLeft = () => startCell.get().each(snapTopLeft);\n      const snapBottomRight = cell => snapTo(bottomRight, cell, getBottomRightSnap, 'bottom');\n      const snapLastBottomRight = () => finishCell.get().each(snapBottomRight);\n      if (detect$1().deviceType.isTouch()) {\n        editor.on('TableSelectionChange', e => {\n          if (!isVisible.get()) {\n            attach(sink, topLeft);\n            attach(sink, bottomRight);\n            isVisible.set(true);\n          }\n          startCell.set(e.start);\n          finishCell.set(e.finish);\n          e.otherCells.each(otherCells => {\n            tlTds.set(otherCells.upOrLeftCells);\n            brTds.set(otherCells.downOrRightCells);\n            snapTopLeft(e.start);\n            snapBottomRight(e.finish);\n          });\n        });\n        editor.on('ResizeEditor ResizeWindow ScrollContent', () => {\n          snapLastTopLeft();\n          snapLastBottomRight();\n        });\n        editor.on('TableSelectionClear', () => {\n          if (isVisible.get()) {\n            detach(topLeft);\n            detach(bottomRight);\n            isVisible.set(false);\n          }\n          startCell.clear();\n          finishCell.clear();\n        });\n      }\n    };\n\n    var Logo = \"<svg width=\\\"50px\\\" height=\\\"16px\\\" viewBox=\\\"0 0 50 16\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n  <path fill-rule=\\\"evenodd\\\" clip-rule=\\\"evenodd\\\" d=\\\"M10.143 0c2.608.015 5.186 2.178 5.186 5.331 0 0 .077 3.812-.084 4.87-.361 2.41-2.164 4.074-4.65 4.496-1.453.284-2.523.49-3.212.623-.373.071-.634.122-.785.152-.184.038-.997.145-1.35.145-2.732 0-5.21-2.04-5.248-5.33 0 0 0-3.514.03-4.442.093-2.4 1.758-4.342 4.926-4.963 0 0 3.875-.752 4.036-.782.368-.07.775-.1 1.15-.1Zm1.826 2.8L5.83 3.989v2.393l-2.455.475v5.968l6.137-1.189V9.243l2.456-.476V2.8ZM5.83 6.382l3.682-.713v3.574l-3.682.713V6.382Zm27.173-1.64-.084-1.066h-2.226v9.132h2.456V7.743c-.008-1.151.998-2.064 2.149-2.072 1.15-.008 1.987.92 1.995 2.072v5.065h2.455V7.359c-.015-2.18-1.657-3.929-3.837-3.913a3.993 3.993 0 0 0-2.908 1.296Zm-6.3-4.266L29.16 0v2.387l-2.456.475V.476Zm0 3.2v9.132h2.456V3.676h-2.456Zm18.179 11.787L49.11 3.676H46.58l-1.612 4.527-.46 1.382-.384-1.382-1.611-4.527H39.98l3.3 9.132L42.15 16l2.732-.537ZM22.867 9.738c0 .752.568 1.075.921 1.075.353 0 .668-.047.998-.154l.537 1.765c-.23.154-.92.537-2.225.537-1.305 0-2.655-.997-2.686-2.686a136.877 136.877 0 0 1 0-4.374H18.8V3.676h1.612v-1.98l2.455-.476v2.456h2.302V5.9h-2.302v3.837Z\\\"/>\\n</svg>\\n\";\n\n    const isHidden = elm => elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus') || elm.getAttribute('data-mce-type') === 'bookmark';\n    const renderElementPath = (editor, settings, providersBackstage) => {\n      var _a;\n      const delimiter = (_a = settings.delimiter) !== null && _a !== void 0 ? _a : '\\u203A';\n      const renderElement = (name, element, index) => Button.sketch({\n        dom: {\n          tag: 'div',\n          classes: ['tox-statusbar__path-item'],\n          attributes: {\n            'data-index': index,\n            'aria-level': index + 1\n          }\n        },\n        components: [text$1(name)],\n        action: _btn => {\n          editor.focus();\n          editor.selection.select(element);\n          editor.nodeChanged();\n        },\n        buttonBehaviours: derive$1([\n          DisablingConfigs.button(providersBackstage.isDisabled),\n          receivingConfig()\n        ])\n      });\n      const renderDivider = () => ({\n        dom: {\n          tag: 'div',\n          classes: ['tox-statusbar__path-divider'],\n          attributes: { 'aria-hidden': true }\n        },\n        components: [text$1(` ${ delimiter } `)]\n      });\n      const renderPathData = data => foldl(data, (acc, path, index) => {\n        const element = renderElement(path.name, path.element, index);\n        if (index === 0) {\n          return acc.concat([element]);\n        } else {\n          return acc.concat([\n            renderDivider(),\n            element\n          ]);\n        }\n      }, []);\n      const updatePath = parents => {\n        const newPath = [];\n        let i = parents.length;\n        while (i-- > 0) {\n          const parent = parents[i];\n          if (parent.nodeType === 1 && !isHidden(parent)) {\n            const args = fireResolveName(editor, parent);\n            if (!args.isDefaultPrevented()) {\n              newPath.push({\n                name: args.name,\n                element: parent\n              });\n            }\n            if (args.isPropagationStopped()) {\n              break;\n            }\n          }\n        }\n        return newPath;\n      };\n      return {\n        dom: {\n          tag: 'div',\n          classes: ['tox-statusbar__path'],\n          attributes: { role: 'navigation' }\n        },\n        behaviours: derive$1([\n          Keying.config({\n            mode: 'flow',\n            selector: 'div[role=button]'\n          }),\n          Disabling.config({ disabled: providersBackstage.isDisabled }),\n          receivingConfig(),\n          Tabstopping.config({}),\n          Replacing.config({}),\n          config('elementPathEvents', [runOnAttached((comp, _e) => {\n              editor.shortcuts.add('alt+F11', 'focus statusbar elementpath', () => Keying.focusIn(comp));\n              editor.on('NodeChange', e => {\n                const newPath = updatePath(e.parents);\n                const newChildren = newPath.length > 0 ? renderPathData(newPath) : [];\n                Replacing.set(comp, newChildren);\n              });\n            })])\n        ]),\n        components: []\n      };\n    };\n\n    var ResizeTypes;\n    (function (ResizeTypes) {\n      ResizeTypes[ResizeTypes['None'] = 0] = 'None';\n      ResizeTypes[ResizeTypes['Both'] = 1] = 'Both';\n      ResizeTypes[ResizeTypes['Vertical'] = 2] = 'Vertical';\n    }(ResizeTypes || (ResizeTypes = {})));\n    const getDimensions = (editor, deltas, resizeType, originalHeight, originalWidth) => {\n      const dimensions = { height: calcCappedSize(originalHeight + deltas.top, getMinHeightOption(editor), getMaxHeightOption(editor)) };\n      if (resizeType === ResizeTypes.Both) {\n        dimensions.width = calcCappedSize(originalWidth + deltas.left, getMinWidthOption(editor), getMaxWidthOption(editor));\n      }\n      return dimensions;\n    };\n    const resize = (editor, deltas, resizeType) => {\n      const container = SugarElement.fromDom(editor.getContainer());\n      const dimensions = getDimensions(editor, deltas, resizeType, get$d(container), get$c(container));\n      each(dimensions, (val, dim) => {\n        if (isNumber(val)) {\n          set$8(container, dim, numToPx(val));\n        }\n      });\n      fireResizeEditor(editor);\n    };\n\n    const getResizeType = editor => {\n      const resize = getResize(editor);\n      if (resize === false) {\n        return ResizeTypes.None;\n      } else if (resize === 'both') {\n        return ResizeTypes.Both;\n      } else {\n        return ResizeTypes.Vertical;\n      }\n    };\n    const keyboardHandler = (editor, resizeType, x, y) => {\n      const scale = 20;\n      const delta = SugarPosition(x * scale, y * scale);\n      resize(editor, delta, resizeType);\n      return Optional.some(true);\n    };\n    const renderResizeHandler = (editor, providersBackstage) => {\n      const resizeType = getResizeType(editor);\n      if (resizeType === ResizeTypes.None) {\n        return Optional.none();\n      }\n      return Optional.some(render$3('resize-handle', {\n        tag: 'div',\n        classes: ['tox-statusbar__resize-handle'],\n        attributes: { title: providersBackstage.translate('Resize') },\n        behaviours: [\n          Dragging.config({\n            mode: 'mouse',\n            repositionTarget: false,\n            onDrag: (_comp, _target, delta) => resize(editor, delta, resizeType),\n            blockerClass: 'tox-blocker'\n          }),\n          Keying.config({\n            mode: 'special',\n            onLeft: () => keyboardHandler(editor, resizeType, -1, 0),\n            onRight: () => keyboardHandler(editor, resizeType, 1, 0),\n            onUp: () => keyboardHandler(editor, resizeType, 0, -1),\n            onDown: () => keyboardHandler(editor, resizeType, 0, 1)\n          }),\n          Tabstopping.config({}),\n          Focusing.config({})\n        ]\n      }, providersBackstage.icons));\n    };\n\n    const renderWordCount = (editor, providersBackstage) => {\n      const replaceCountText = (comp, count, mode) => Replacing.set(comp, [text$1(providersBackstage.translate([\n          '{0} ' + mode,\n          count[mode]\n        ]))]);\n      return Button.sketch({\n        dom: {\n          tag: 'button',\n          classes: ['tox-statusbar__wordcount']\n        },\n        components: [],\n        buttonBehaviours: derive$1([\n          DisablingConfigs.button(providersBackstage.isDisabled),\n          receivingConfig(),\n          Tabstopping.config({}),\n          Replacing.config({}),\n          Representing.config({\n            store: {\n              mode: 'memory',\n              initialValue: {\n                mode: 'words',\n                count: {\n                  words: 0,\n                  characters: 0\n                }\n              }\n            }\n          }),\n          config('wordcount-events', [\n            runOnExecute$1(comp => {\n              const currentVal = Representing.getValue(comp);\n              const newMode = currentVal.mode === 'words' ? 'characters' : 'words';\n              Representing.setValue(comp, {\n                mode: newMode,\n                count: currentVal.count\n              });\n              replaceCountText(comp, currentVal.count, newMode);\n            }),\n            runOnAttached(comp => {\n              editor.on('wordCountUpdate', e => {\n                const {mode} = Representing.getValue(comp);\n                Representing.setValue(comp, {\n                  mode,\n                  count: e.wordCount\n                });\n                replaceCountText(comp, e.wordCount, mode);\n              });\n            })\n          ])\n        ]),\n        eventOrder: {\n          [execute$5()]: [\n            'disabling',\n            'alloy.base.behaviour',\n            'wordcount-events'\n          ]\n        }\n      });\n    };\n\n    const renderStatusbar = (editor, providersBackstage) => {\n      const renderBranding = () => {\n        return {\n          dom: {\n            tag: 'span',\n            classes: ['tox-statusbar__branding']\n          },\n          components: [{\n              dom: {\n                tag: 'a',\n                attributes: {\n                  'href': 'https://www.tiny.cloud/powered-by-tiny?utm_campaign=editor_referral&utm_medium=poweredby&utm_source=tinymce&utm_content=v6',\n                  'rel': 'noopener',\n                  'target': '_blank',\n                  'aria-label': global$8.translate([\n                    'Powered by {0}',\n                    'Tiny'\n                  ])\n                },\n                innerHtml: Logo.trim()\n              },\n              behaviours: derive$1([Focusing.config({})])\n            }]\n        };\n      };\n      const getTextComponents = () => {\n        const components = [];\n        if (useElementPath(editor)) {\n          components.push(renderElementPath(editor, {}, providersBackstage));\n        }\n        if (editor.hasPlugin('wordcount')) {\n          components.push(renderWordCount(editor, providersBackstage));\n        }\n        if (useBranding(editor)) {\n          components.push(renderBranding());\n        }\n        if (components.length > 0) {\n          return [{\n              dom: {\n                tag: 'div',\n                classes: ['tox-statusbar__text-container']\n              },\n              components\n            }];\n        }\n        return [];\n      };\n      const getComponents = () => {\n        const components = getTextComponents();\n        const resizeHandler = renderResizeHandler(editor, providersBackstage);\n        return components.concat(resizeHandler.toArray());\n      };\n      return {\n        dom: {\n          tag: 'div',\n          classes: ['tox-statusbar']\n        },\n        components: getComponents()\n      };\n    };\n\n    const getLazyMothership = singleton => singleton.get().getOrDie('UI has not been rendered');\n    const setup$3 = editor => {\n      const isInline = editor.inline;\n      const mode = isInline ? Inline : Iframe;\n      const header = isStickyToolbar(editor) ? StickyHeader : StaticHeader;\n      const lazySink = value$2();\n      const lazyOuterContainer = value$2();\n      const lazyMothership = value$2();\n      const lazyUiMothership = value$2();\n      const platform = detect$1();\n      const isTouch = platform.deviceType.isTouch();\n      const touchPlatformClass = 'tox-platform-touch';\n      const deviceClasses = isTouch ? [touchPlatformClass] : [];\n      const isToolbarBottom = isToolbarLocationBottom(editor);\n      const toolbarMode = getToolbarMode(editor);\n      const memAnchorBar = record({\n        dom: {\n          tag: 'div',\n          classes: ['tox-anchorbar']\n        }\n      });\n      const lazyHeader = () => lazyOuterContainer.get().bind(OuterContainer.getHeader);\n      const lazySinkResult = () => Result.fromOption(lazySink.get(), 'UI has not been rendered');\n      const lazyAnchorBar = () => lazyOuterContainer.get().bind(container => memAnchorBar.getOpt(container)).getOrDie('Could not find a anchor bar element');\n      const lazyToolbar = () => lazyOuterContainer.get().bind(container => OuterContainer.getToolbar(container)).getOrDie('Could not find more toolbar element');\n      const lazyThrobber = () => lazyOuterContainer.get().bind(container => OuterContainer.getThrobber(container)).getOrDie('Could not find throbber element');\n      const backstage = init$7(lazySinkResult, editor, lazyAnchorBar);\n      const makeHeaderPart = () => {\n        const verticalDirAttributes = { attributes: { [Attribute]: isToolbarBottom ? AttributeValue.BottomToTop : AttributeValue.TopToBottom } };\n        const partMenubar = OuterContainer.parts.menubar({\n          dom: {\n            tag: 'div',\n            classes: ['tox-menubar']\n          },\n          backstage,\n          onEscape: () => {\n            editor.focus();\n          }\n        });\n        const partToolbar = OuterContainer.parts.toolbar({\n          dom: {\n            tag: 'div',\n            classes: ['tox-toolbar']\n          },\n          getSink: lazySinkResult,\n          providers: backstage.shared.providers,\n          onEscape: () => {\n            editor.focus();\n          },\n          type: toolbarMode,\n          lazyToolbar,\n          lazyHeader: () => lazyHeader().getOrDie('Could not find header element'),\n          ...verticalDirAttributes\n        });\n        const partMultipleToolbar = OuterContainer.parts['multiple-toolbar']({\n          dom: {\n            tag: 'div',\n            classes: ['tox-toolbar-overlord']\n          },\n          providers: backstage.shared.providers,\n          onEscape: () => {\n            editor.focus();\n          },\n          type: toolbarMode\n        });\n        const hasMultipleToolbar = isMultipleToolbars(editor);\n        const hasToolbar = isToolbarEnabled(editor);\n        const hasMenubar = isMenubarEnabled(editor);\n        const shouldHavePromotion = promotionEnabled(editor);\n        const partPromotion = makePromotion();\n        const getPartToolbar = () => {\n          if (hasMultipleToolbar) {\n            return [partMultipleToolbar];\n          } else if (hasToolbar) {\n            return [partToolbar];\n          } else {\n            return [];\n          }\n        };\n        const menubarCollection = shouldHavePromotion ? [\n          partPromotion,\n          partMenubar\n        ] : [partMenubar];\n        return OuterContainer.parts.header({\n          dom: {\n            tag: 'div',\n            classes: ['tox-editor-header'],\n            ...verticalDirAttributes\n          },\n          components: flatten([\n            hasMenubar ? menubarCollection : [],\n            getPartToolbar(),\n            useFixedContainer(editor) ? [] : [memAnchorBar.asSpec()]\n          ]),\n          sticky: isStickyToolbar(editor),\n          editor,\n          sharedBackstage: backstage.shared\n        });\n      };\n      const makePromotion = () => {\n        return OuterContainer.parts.promotion({\n          dom: {\n            tag: 'div',\n            classes: ['tox-promotion']\n          }\n        });\n      };\n      const makeSidebarDefinition = () => {\n        const partSocket = OuterContainer.parts.socket({\n          dom: {\n            tag: 'div',\n            classes: ['tox-edit-area']\n          }\n        });\n        const partSidebar = OuterContainer.parts.sidebar({\n          dom: {\n            tag: 'div',\n            classes: ['tox-sidebar']\n          }\n        });\n        return {\n          dom: {\n            tag: 'div',\n            classes: ['tox-sidebar-wrap']\n          },\n          components: [\n            partSocket,\n            partSidebar\n          ]\n        };\n      };\n      const renderSink = () => {\n        const uiContainer = getUiContainer(editor);\n        const isGridUiContainer = eq(body(), uiContainer) && get$e(uiContainer, 'display') === 'grid';\n        const sinkSpec = {\n          dom: {\n            tag: 'div',\n            classes: [\n              'tox',\n              'tox-silver-sink',\n              'tox-tinymce-aux'\n            ].concat(deviceClasses),\n            attributes: { ...global$8.isRtl() ? { dir: 'rtl' } : {} }\n          },\n          behaviours: derive$1([Positioning.config({ useFixed: () => header.isDocked(lazyHeader) })])\n        };\n        const reactiveWidthSpec = {\n          dom: { styles: { width: document.body.clientWidth + 'px' } },\n          events: derive$2([run$1(windowResize(), comp => {\n              set$8(comp.element, 'width', document.body.clientWidth + 'px');\n            })])\n        };\n        const sink = build$1(deepMerge(sinkSpec, isGridUiContainer ? reactiveWidthSpec : {}));\n        const uiMothership = takeover(sink);\n        lazySink.set(sink);\n        lazyUiMothership.set(uiMothership);\n        return {\n          sink,\n          uiMothership\n        };\n      };\n      const renderContainer = () => {\n        const partHeader = makeHeaderPart();\n        const sidebarContainer = makeSidebarDefinition();\n        const partThrobber = OuterContainer.parts.throbber({\n          dom: {\n            tag: 'div',\n            classes: ['tox-throbber']\n          },\n          backstage\n        });\n        const statusbar = useStatusBar(editor) && !isInline ? Optional.some(renderStatusbar(editor, backstage.shared.providers)) : Optional.none();\n        const editorComponents = flatten([\n          isToolbarBottom ? [] : [partHeader],\n          isInline ? [] : [sidebarContainer],\n          isToolbarBottom ? [partHeader] : []\n        ]);\n        const editorContainer = {\n          dom: {\n            tag: 'div',\n            classes: ['tox-editor-container']\n          },\n          components: editorComponents\n        };\n        const containerComponents = flatten([\n          [editorContainer],\n          isInline ? [] : statusbar.toArray(),\n          [partThrobber]\n        ]);\n        const isHidden = isDistractionFree(editor);\n        const attributes = {\n          role: 'application',\n          ...global$8.isRtl() ? { dir: 'rtl' } : {},\n          ...isHidden ? { 'aria-hidden': 'true' } : {}\n        };\n        const outerContainer = build$1(OuterContainer.sketch({\n          dom: {\n            tag: 'div',\n            classes: [\n              'tox',\n              'tox-tinymce'\n            ].concat(isInline ? ['tox-tinymce-inline'] : []).concat(isToolbarBottom ? ['tox-tinymce--toolbar-bottom'] : []).concat(deviceClasses),\n            styles: {\n              visibility: 'hidden',\n              ...isHidden ? {\n                opacity: '0',\n                border: '0'\n              } : {}\n            },\n            attributes\n          },\n          components: containerComponents,\n          behaviours: derive$1([\n            receivingConfig(),\n            Disabling.config({ disableClass: 'tox-tinymce--disabled' }),\n            Keying.config({\n              mode: 'cyclic',\n              selector: '.tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a, .tox-statusbar__resize-handle'\n            })\n          ])\n        }));\n        const mothership = takeover(outerContainer);\n        lazyOuterContainer.set(outerContainer);\n        lazyMothership.set(mothership);\n        return {\n          mothership,\n          outerContainer\n        };\n      };\n      const setEditorSize = outerContainer => {\n        const parsedHeight = numToPx(getHeightWithFallback(editor));\n        const parsedWidth = numToPx(getWidthWithFallback(editor));\n        if (!editor.inline) {\n          if (isValidValue('div', 'width', parsedWidth)) {\n            set$8(outerContainer.element, 'width', parsedWidth);\n          }\n          if (isValidValue('div', 'height', parsedHeight)) {\n            set$8(outerContainer.element, 'height', parsedHeight);\n          } else {\n            set$8(outerContainer.element, 'height', '400px');\n          }\n        }\n        return parsedHeight;\n      };\n      const setupShortcutsAndCommands = outerContainer => {\n        editor.addShortcut('alt+F9', 'focus menubar', () => {\n          OuterContainer.focusMenubar(outerContainer);\n        });\n        editor.addShortcut('alt+F10', 'focus toolbar', () => {\n          OuterContainer.focusToolbar(outerContainer);\n        });\n        editor.addCommand('ToggleToolbarDrawer', () => {\n          OuterContainer.toggleToolbarDrawer(outerContainer);\n        });\n        editor.addQueryStateHandler('ToggleToolbarDrawer', () => OuterContainer.isToolbarDrawerToggled(outerContainer));\n      };\n      const renderUI = () => {\n        const {mothership, outerContainer} = renderContainer();\n        const {uiMothership, sink} = renderSink();\n        map$1(getToolbarGroups(editor), (toolbarGroupButtonConfig, name) => {\n          editor.ui.registry.addGroupToolbarButton(name, toolbarGroupButtonConfig);\n        });\n        const {buttons, menuItems, contextToolbars, sidebars} = editor.ui.registry.getAll();\n        const toolbarOpt = getMultipleToolbarsOption(editor);\n        const rawUiConfig = {\n          menuItems,\n          menus: getMenus(editor),\n          menubar: getMenubar(editor),\n          toolbar: toolbarOpt.getOrThunk(() => getToolbar(editor)),\n          allowToolbarGroups: toolbarMode === ToolbarMode$1.floating,\n          buttons,\n          sidebar: sidebars\n        };\n        setupShortcutsAndCommands(outerContainer);\n        setup$b(editor, mothership, uiMothership);\n        header.setup(editor, backstage.shared, lazyHeader);\n        setup$6(editor, backstage);\n        setup$5(editor, lazySinkResult, backstage);\n        setup$8(editor);\n        setup$7(editor, lazyThrobber, backstage.shared);\n        register$9(editor, contextToolbars, sink, { backstage });\n        setup$4(editor, sink);\n        const elm = editor.getElement();\n        const height = setEditorSize(outerContainer);\n        const uiComponents = {\n          mothership,\n          uiMothership,\n          outerContainer,\n          sink\n        };\n        const args = {\n          targetNode: elm,\n          height\n        };\n        return mode.render(editor, uiComponents, rawUiConfig, backstage, args);\n      };\n      const getMothership = () => getLazyMothership(lazyMothership);\n      const getUiMothership = () => getLazyMothership(lazyUiMothership);\n      return {\n        getMothership,\n        getUiMothership,\n        backstage,\n        renderUI\n      };\n    };\n\n    const describedBy = (describedElement, describeElement) => {\n      const describeId = Optional.from(get$f(describedElement, 'id')).fold(() => {\n        const id = generate$6('dialog-describe');\n        set$9(describeElement, 'id', id);\n        return id;\n      }, identity);\n      set$9(describedElement, 'aria-describedby', describeId);\n    };\n\n    const labelledBy = (labelledElement, labelElement) => {\n      const labelId = getOpt(labelledElement, 'id').fold(() => {\n        const id = generate$6('dialog-label');\n        set$9(labelElement, 'id', id);\n        return id;\n      }, identity);\n      set$9(labelledElement, 'aria-labelledby', labelId);\n    };\n\n    const schema$2 = constant$1([\n      required$1('lazySink'),\n      option$3('dragBlockClass'),\n      defaultedFunction('getBounds', win),\n      defaulted('useTabstopAt', always),\n      defaulted('eventOrder', {}),\n      field('modalBehaviours', [Keying]),\n      onKeyboardHandler('onExecute'),\n      onStrictKeyboardHandler('onEscape')\n    ]);\n    const basic = { sketch: identity };\n    const parts$2 = constant$1([\n      optional({\n        name: 'draghandle',\n        overrides: (detail, spec) => {\n          return {\n            behaviours: derive$1([Dragging.config({\n                mode: 'mouse',\n                getTarget: handle => {\n                  return ancestor(handle, '[role=\"dialog\"]').getOr(handle);\n                },\n                blockerClass: detail.dragBlockClass.getOrDie(new Error('The drag blocker class was not specified for a dialog with a drag handle: \\n' + JSON.stringify(spec, null, 2)).message),\n                getBounds: detail.getDragBounds\n              })])\n          };\n        }\n      }),\n      required({\n        schema: [required$1('dom')],\n        name: 'title'\n      }),\n      required({\n        factory: basic,\n        schema: [required$1('dom')],\n        name: 'close'\n      }),\n      required({\n        factory: basic,\n        schema: [required$1('dom')],\n        name: 'body'\n      }),\n      optional({\n        factory: basic,\n        schema: [required$1('dom')],\n        name: 'footer'\n      }),\n      external({\n        factory: {\n          sketch: (spec, detail) => ({\n            ...spec,\n            dom: detail.dom,\n            components: detail.components\n          })\n        },\n        schema: [\n          defaulted('dom', {\n            tag: 'div',\n            styles: {\n              position: 'fixed',\n              left: '0px',\n              top: '0px',\n              right: '0px',\n              bottom: '0px'\n            }\n          }),\n          defaulted('components', [])\n        ],\n        name: 'blocker'\n      })\n    ]);\n\n    const factory$4 = (detail, components, spec, externals) => {\n      const dialogComp = value$2();\n      const showDialog = dialog => {\n        dialogComp.set(dialog);\n        const sink = detail.lazySink(dialog).getOrDie();\n        const externalBlocker = externals.blocker();\n        const blocker = sink.getSystem().build({\n          ...externalBlocker,\n          components: externalBlocker.components.concat([premade(dialog)]),\n          behaviours: derive$1([\n            Focusing.config({}),\n            config('dialog-blocker-events', [runOnSource(focusin(), () => {\n                Keying.focusIn(dialog);\n              })])\n          ])\n        });\n        attach(sink, blocker);\n        Keying.focusIn(dialog);\n      };\n      const hideDialog = dialog => {\n        dialogComp.clear();\n        parent(dialog.element).each(blockerDom => {\n          dialog.getSystem().getByDom(blockerDom).each(blocker => {\n            detach(blocker);\n          });\n        });\n      };\n      const getDialogBody = dialog => getPartOrDie(dialog, detail, 'body');\n      const getDialogFooter = dialog => getPartOrDie(dialog, detail, 'footer');\n      const setBusy = (dialog, getBusySpec) => {\n        Blocking.block(dialog, getBusySpec);\n      };\n      const setIdle = dialog => {\n        Blocking.unblock(dialog);\n      };\n      const modalEventsId = generate$6('modal-events');\n      const eventOrder = {\n        ...detail.eventOrder,\n        [attachedToDom()]: [modalEventsId].concat(detail.eventOrder['alloy.system.attached'] || [])\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components,\n        apis: {\n          show: showDialog,\n          hide: hideDialog,\n          getBody: getDialogBody,\n          getFooter: getDialogFooter,\n          setIdle,\n          setBusy\n        },\n        eventOrder,\n        domModification: {\n          attributes: {\n            'role': 'dialog',\n            'aria-modal': 'true'\n          }\n        },\n        behaviours: augment(detail.modalBehaviours, [\n          Replacing.config({}),\n          Keying.config({\n            mode: 'cyclic',\n            onEnter: detail.onExecute,\n            onEscape: detail.onEscape,\n            useTabstopAt: detail.useTabstopAt\n          }),\n          Blocking.config({ getRoot: dialogComp.get }),\n          config(modalEventsId, [runOnAttached(c => {\n              labelledBy(c.element, getPartOrDie(c, detail, 'title').element);\n              describedBy(c.element, getPartOrDie(c, detail, 'body').element);\n            })])\n        ])\n      };\n    };\n    const ModalDialog = composite({\n      name: 'ModalDialog',\n      configFields: schema$2(),\n      partFields: parts$2(),\n      factory: factory$4,\n      apis: {\n        show: (apis, dialog) => {\n          apis.show(dialog);\n        },\n        hide: (apis, dialog) => {\n          apis.hide(dialog);\n        },\n        getBody: (apis, dialog) => apis.getBody(dialog),\n        getFooter: (apis, dialog) => apis.getFooter(dialog),\n        setBusy: (apis, dialog, getBusySpec) => {\n          apis.setBusy(dialog, getBusySpec);\n        },\n        setIdle: (apis, dialog) => {\n          apis.setIdle(dialog);\n        }\n      }\n    });\n\n    const dialogToggleMenuItemSchema = objOf([\n      type,\n      name$1\n    ].concat(commonMenuItemFields));\n    const dialogToggleMenuItemDataProcessor = boolean;\n\n    const baseFooterButtonFields = [\n      generatedName('button'),\n      optionalIcon,\n      defaultedStringEnum('align', 'end', [\n        'start',\n        'end'\n      ]),\n      primary,\n      enabled,\n      optionStringEnum('buttonType', [\n        'primary',\n        'secondary'\n      ])\n    ];\n    const dialogFooterButtonFields = [\n      ...baseFooterButtonFields,\n      text\n    ];\n    const normalFooterButtonFields = [\n      requiredStringEnum('type', [\n        'submit',\n        'cancel',\n        'custom'\n      ]),\n      ...dialogFooterButtonFields\n    ];\n    const menuFooterButtonFields = [\n      requiredStringEnum('type', ['menu']),\n      optionalText,\n      optionalTooltip,\n      optionalIcon,\n      requiredArrayOf('items', dialogToggleMenuItemSchema),\n      ...baseFooterButtonFields\n    ];\n    const dialogFooterButtonSchema = choose$1('type', {\n      submit: normalFooterButtonFields,\n      cancel: normalFooterButtonFields,\n      custom: normalFooterButtonFields,\n      menu: menuFooterButtonFields\n    });\n\n    const alertBannerFields = [\n      type,\n      text,\n      requiredStringEnum('level', [\n        'info',\n        'warn',\n        'error',\n        'success'\n      ]),\n      icon,\n      defaulted('url', '')\n    ];\n    const alertBannerSchema = objOf(alertBannerFields);\n\n    const createBarFields = itemsField => [\n      type,\n      itemsField\n    ];\n\n    const buttonFields = [\n      type,\n      text,\n      enabled,\n      generatedName('button'),\n      optionalIcon,\n      borderless,\n      optionStringEnum('buttonType', [\n        'primary',\n        'secondary',\n        'toolbar'\n      ]),\n      primary\n    ];\n    const buttonSchema = objOf(buttonFields);\n\n    const formComponentFields = [\n      type,\n      name$1\n    ];\n    const formComponentWithLabelFields = formComponentFields.concat([optionalLabel]);\n\n    const checkboxFields = formComponentFields.concat([\n      label,\n      enabled\n    ]);\n    const checkboxSchema = objOf(checkboxFields);\n    const checkboxDataProcessor = boolean;\n\n    const collectionFields = formComponentWithLabelFields.concat([defaultedColumns('auto')]);\n    const collectionSchema = objOf(collectionFields);\n    const collectionDataProcessor = arrOfObj([\n      value$1,\n      text,\n      icon\n    ]);\n\n    const colorInputFields = formComponentWithLabelFields;\n    const colorInputSchema = objOf(colorInputFields);\n    const colorInputDataProcessor = string;\n\n    const colorPickerFields = formComponentWithLabelFields;\n    const colorPickerSchema = objOf(colorPickerFields);\n    const colorPickerDataProcessor = string;\n\n    const customEditorFields = formComponentFields.concat([\n      defaultedString('tag', 'textarea'),\n      requiredString('scriptId'),\n      requiredString('scriptUrl'),\n      defaultedPostMsg('settings', undefined)\n    ]);\n    const customEditorFieldsOld = formComponentFields.concat([\n      defaultedString('tag', 'textarea'),\n      requiredFunction('init')\n    ]);\n    const customEditorSchema = valueOf(v => asRaw('customeditor.old', objOfOnly(customEditorFieldsOld), v).orThunk(() => asRaw('customeditor.new', objOfOnly(customEditorFields), v)));\n    const customEditorDataProcessor = string;\n\n    const dropZoneFields = formComponentWithLabelFields;\n    const dropZoneSchema = objOf(dropZoneFields);\n    const dropZoneDataProcessor = arrOfVal();\n\n    const createGridFields = itemsField => [\n      type,\n      requiredNumber('columns'),\n      itemsField\n    ];\n\n    const htmlPanelFields = [\n      type,\n      requiredString('html'),\n      defaultedStringEnum('presets', 'presentation', [\n        'presentation',\n        'document'\n      ])\n    ];\n    const htmlPanelSchema = objOf(htmlPanelFields);\n\n    const iframeFields = formComponentWithLabelFields.concat([\n      defaultedBoolean('sandboxed', true),\n      defaultedBoolean('transparent', true)\n    ]);\n    const iframeSchema = objOf(iframeFields);\n    const iframeDataProcessor = string;\n\n    const imagePreviewSchema = objOf(formComponentFields.concat([optionString('height')]));\n    const imagePreviewDataProcessor = objOf([\n      requiredString('url'),\n      optionNumber('zoom'),\n      optionNumber('cachedWidth'),\n      optionNumber('cachedHeight')\n    ]);\n\n    const inputFields = formComponentWithLabelFields.concat([\n      optionString('inputMode'),\n      optionString('placeholder'),\n      defaultedBoolean('maximized', false),\n      enabled\n    ]);\n    const inputSchema = objOf(inputFields);\n    const inputDataProcessor = string;\n\n    const createLabelFields = itemsField => [\n      type,\n      label,\n      itemsField\n    ];\n\n    const listBoxSingleItemFields = [\n      text,\n      value$1\n    ];\n    const listBoxNestedItemFields = [\n      text,\n      requiredArrayOf('items', thunkOf('items', () => listBoxItemSchema))\n    ];\n    const listBoxItemSchema = oneOf([\n      objOf(listBoxSingleItemFields),\n      objOf(listBoxNestedItemFields)\n    ]);\n    const listBoxFields = formComponentWithLabelFields.concat([\n      requiredArrayOf('items', listBoxItemSchema),\n      enabled\n    ]);\n    const listBoxSchema = objOf(listBoxFields);\n    const listBoxDataProcessor = string;\n\n    const selectBoxFields = formComponentWithLabelFields.concat([\n      requiredArrayOfObj('items', [\n        text,\n        value$1\n      ]),\n      defaultedNumber('size', 1),\n      enabled\n    ]);\n    const selectBoxSchema = objOf(selectBoxFields);\n    const selectBoxDataProcessor = string;\n\n    const sizeInputFields = formComponentWithLabelFields.concat([\n      defaultedBoolean('constrain', true),\n      enabled\n    ]);\n    const sizeInputSchema = objOf(sizeInputFields);\n    const sizeInputDataProcessor = objOf([\n      requiredString('width'),\n      requiredString('height')\n    ]);\n\n    const sliderFields = formComponentFields.concat([\n      label,\n      defaultedNumber('min', 0),\n      defaultedNumber('max', 0)\n    ]);\n    const sliderSchema = objOf(sliderFields);\n    const sliderInputDataProcessor = number;\n\n    const tableFields = [\n      type,\n      requiredArrayOf('header', string),\n      requiredArrayOf('cells', arrOf(string))\n    ];\n    const tableSchema = objOf(tableFields);\n\n    const textAreaFields = formComponentWithLabelFields.concat([\n      optionString('placeholder'),\n      defaultedBoolean('maximized', false),\n      enabled\n    ]);\n    const textAreaSchema = objOf(textAreaFields);\n    const textAreaDataProcessor = string;\n\n    const urlInputFields = formComponentWithLabelFields.concat([\n      defaultedStringEnum('filetype', 'file', [\n        'image',\n        'media',\n        'file'\n      ]),\n      enabled\n    ]);\n    const urlInputSchema = objOf(urlInputFields);\n    const urlInputDataProcessor = objOf([\n      value$1,\n      defaultedMeta\n    ]);\n\n    const createItemsField = name => field$1('items', 'items', required$2(), arrOf(valueOf(v => asRaw(`Checking item of ${ name }`, itemSchema, v).fold(sErr => Result.error(formatError(sErr)), passValue => Result.value(passValue)))));\n    const itemSchema = valueThunk(() => choose$2('type', {\n      alertbanner: alertBannerSchema,\n      bar: objOf(createBarFields(createItemsField('bar'))),\n      button: buttonSchema,\n      checkbox: checkboxSchema,\n      colorinput: colorInputSchema,\n      colorpicker: colorPickerSchema,\n      dropzone: dropZoneSchema,\n      grid: objOf(createGridFields(createItemsField('grid'))),\n      iframe: iframeSchema,\n      input: inputSchema,\n      listbox: listBoxSchema,\n      selectbox: selectBoxSchema,\n      sizeinput: sizeInputSchema,\n      slider: sliderSchema,\n      textarea: textAreaSchema,\n      urlinput: urlInputSchema,\n      customeditor: customEditorSchema,\n      htmlpanel: htmlPanelSchema,\n      imagepreview: imagePreviewSchema,\n      collection: collectionSchema,\n      label: objOf(createLabelFields(createItemsField('label'))),\n      table: tableSchema,\n      panel: panelSchema\n    }));\n    const panelFields = [\n      type,\n      defaulted('classes', []),\n      requiredArrayOf('items', itemSchema)\n    ];\n    const panelSchema = objOf(panelFields);\n\n    const tabFields = [\n      generatedName('tab'),\n      title,\n      requiredArrayOf('items', itemSchema)\n    ];\n    const tabPanelFields = [\n      type,\n      requiredArrayOfObj('tabs', tabFields)\n    ];\n    const tabPanelSchema = objOf(tabPanelFields);\n\n    const dialogButtonFields = dialogFooterButtonFields;\n    const dialogButtonSchema = dialogFooterButtonSchema;\n    const dialogSchema = objOf([\n      requiredString('title'),\n      requiredOf('body', choose$2('type', {\n        panel: panelSchema,\n        tabpanel: tabPanelSchema\n      })),\n      defaultedString('size', 'normal'),\n      requiredArrayOf('buttons', dialogButtonSchema),\n      defaulted('initialData', {}),\n      defaultedFunction('onAction', noop),\n      defaultedFunction('onChange', noop),\n      defaultedFunction('onSubmit', noop),\n      defaultedFunction('onClose', noop),\n      defaultedFunction('onCancel', noop),\n      defaultedFunction('onTabChange', noop)\n    ]);\n    const createDialog = spec => asRaw('dialog', dialogSchema, spec);\n\n    const urlDialogButtonSchema = objOf([\n      requiredStringEnum('type', [\n        'cancel',\n        'custom'\n      ]),\n      ...dialogButtonFields\n    ]);\n    const urlDialogSchema = objOf([\n      requiredString('title'),\n      requiredString('url'),\n      optionNumber('height'),\n      optionNumber('width'),\n      optionArrayOf('buttons', urlDialogButtonSchema),\n      defaultedFunction('onAction', noop),\n      defaultedFunction('onCancel', noop),\n      defaultedFunction('onClose', noop),\n      defaultedFunction('onMessage', noop)\n    ]);\n    const createUrlDialog = spec => asRaw('dialog', urlDialogSchema, spec);\n\n    const getAllObjects = obj => {\n      if (isObject(obj)) {\n        return [obj].concat(bind$3(values(obj), getAllObjects));\n      } else if (isArray(obj)) {\n        return bind$3(obj, getAllObjects);\n      } else {\n        return [];\n      }\n    };\n\n    const isNamedItem = obj => isString(obj.type) && isString(obj.name);\n    const dataProcessors = {\n      checkbox: checkboxDataProcessor,\n      colorinput: colorInputDataProcessor,\n      colorpicker: colorPickerDataProcessor,\n      dropzone: dropZoneDataProcessor,\n      input: inputDataProcessor,\n      iframe: iframeDataProcessor,\n      imagepreview: imagePreviewDataProcessor,\n      selectbox: selectBoxDataProcessor,\n      sizeinput: sizeInputDataProcessor,\n      slider: sliderInputDataProcessor,\n      listbox: listBoxDataProcessor,\n      size: sizeInputDataProcessor,\n      textarea: textAreaDataProcessor,\n      urlinput: urlInputDataProcessor,\n      customeditor: customEditorDataProcessor,\n      collection: collectionDataProcessor,\n      togglemenuitem: dialogToggleMenuItemDataProcessor\n    };\n    const getDataProcessor = item => Optional.from(dataProcessors[item.type]);\n    const getNamedItems = structure => filter$2(getAllObjects(structure), isNamedItem);\n\n    const createDataValidator = structure => {\n      const namedItems = getNamedItems(structure);\n      const fields = bind$3(namedItems, item => getDataProcessor(item).fold(() => [], schema => [requiredOf(item.name, schema)]));\n      return objOf(fields);\n    };\n\n    const extract = structure => {\n      var _a;\n      const internalDialog = getOrDie(createDialog(structure));\n      const dataValidator = createDataValidator(structure);\n      const initialData = (_a = structure.initialData) !== null && _a !== void 0 ? _a : {};\n      return {\n        internalDialog,\n        dataValidator,\n        initialData\n      };\n    };\n    const DialogManager = {\n      open: (factory, structure) => {\n        const extraction = extract(structure);\n        return factory(extraction.internalDialog, extraction.initialData, extraction.dataValidator);\n      },\n      openUrl: (factory, structure) => {\n        const internalDialog = getOrDie(createUrlDialog(structure));\n        return factory(internalDialog);\n      },\n      redial: structure => extract(structure)\n    };\n\n    const toValidValues = values => {\n      const errors = [];\n      const result = {};\n      each(values, (value, name) => {\n        value.fold(() => {\n          errors.push(name);\n        }, v => {\n          result[name] = v;\n        });\n      });\n      return errors.length > 0 ? Result.error(errors) : Result.value(result);\n    };\n\n    const renderBodyPanel = (spec, dialogData, backstage) => {\n      const memForm = record(Form.sketch(parts => ({\n        dom: {\n          tag: 'div',\n          classes: ['tox-form'].concat(spec.classes)\n        },\n        components: map$2(spec.items, item => interpretInForm(parts, item, dialogData, backstage))\n      })));\n      return {\n        dom: {\n          tag: 'div',\n          classes: ['tox-dialog__body']\n        },\n        components: [{\n            dom: {\n              tag: 'div',\n              classes: ['tox-dialog__body-content']\n            },\n            components: [memForm.asSpec()]\n          }],\n        behaviours: derive$1([\n          Keying.config({\n            mode: 'acyclic',\n            useTabstopAt: not(isPseudoStop)\n          }),\n          ComposingConfigs.memento(memForm),\n          RepresentingConfigs.memento(memForm, {\n            postprocess: formValue => toValidValues(formValue).fold(err => {\n              console.error(err);\n              return {};\n            }, identity)\n          })\n        ])\n      };\n    };\n\n    const factory$3 = (detail, _spec) => ({\n      uid: detail.uid,\n      dom: detail.dom,\n      components: detail.components,\n      events: events$a(detail.action),\n      behaviours: augment(detail.tabButtonBehaviours, [\n        Focusing.config({}),\n        Keying.config({\n          mode: 'execution',\n          useSpace: true,\n          useEnter: true\n        }),\n        Representing.config({\n          store: {\n            mode: 'memory',\n            initialValue: detail.value\n          }\n        })\n      ]),\n      domModification: detail.domModification\n    });\n    const TabButton = single({\n      name: 'TabButton',\n      configFields: [\n        defaulted('uid', undefined),\n        required$1('value'),\n        field$1('dom', 'dom', mergeWithThunk(() => ({\n          attributes: {\n            'role': 'tab',\n            'id': generate$6('aria'),\n            'aria-selected': 'false'\n          }\n        })), anyValue()),\n        option$3('action'),\n        defaulted('domModification', {}),\n        field('tabButtonBehaviours', [\n          Focusing,\n          Keying,\n          Representing\n        ]),\n        required$1('view')\n      ],\n      factory: factory$3\n    });\n\n    const schema$1 = constant$1([\n      required$1('tabs'),\n      required$1('dom'),\n      defaulted('clickToDismiss', false),\n      field('tabbarBehaviours', [\n        Highlighting,\n        Keying\n      ]),\n      markers$1([\n        'tabClass',\n        'selectedClass'\n      ])\n    ]);\n    const tabsPart = group({\n      factory: TabButton,\n      name: 'tabs',\n      unit: 'tab',\n      overrides: barDetail => {\n        const dismissTab$1 = (tabbar, button) => {\n          Highlighting.dehighlight(tabbar, button);\n          emitWith(tabbar, dismissTab(), {\n            tabbar,\n            button\n          });\n        };\n        const changeTab$1 = (tabbar, button) => {\n          Highlighting.highlight(tabbar, button);\n          emitWith(tabbar, changeTab(), {\n            tabbar,\n            button\n          });\n        };\n        return {\n          action: button => {\n            const tabbar = button.getSystem().getByUid(barDetail.uid).getOrDie();\n            const activeButton = Highlighting.isHighlighted(tabbar, button);\n            const response = (() => {\n              if (activeButton && barDetail.clickToDismiss) {\n                return dismissTab$1;\n              } else if (!activeButton) {\n                return changeTab$1;\n              } else {\n                return noop;\n              }\n            })();\n            response(tabbar, button);\n          },\n          domModification: { classes: [barDetail.markers.tabClass] }\n        };\n      }\n    });\n    const parts$1 = constant$1([tabsPart]);\n\n    const factory$2 = (detail, components, _spec, _externals) => ({\n      'uid': detail.uid,\n      'dom': detail.dom,\n      components,\n      'debug.sketcher': 'Tabbar',\n      'domModification': { attributes: { role: 'tablist' } },\n      'behaviours': augment(detail.tabbarBehaviours, [\n        Highlighting.config({\n          highlightClass: detail.markers.selectedClass,\n          itemClass: detail.markers.tabClass,\n          onHighlight: (tabbar, tab) => {\n            set$9(tab.element, 'aria-selected', 'true');\n          },\n          onDehighlight: (tabbar, tab) => {\n            set$9(tab.element, 'aria-selected', 'false');\n          }\n        }),\n        Keying.config({\n          mode: 'flow',\n          getInitial: tabbar => {\n            return Highlighting.getHighlighted(tabbar).map(tab => tab.element);\n          },\n          selector: '.' + detail.markers.tabClass,\n          executeOnMove: true\n        })\n      ])\n    });\n    const Tabbar = composite({\n      name: 'Tabbar',\n      configFields: schema$1(),\n      partFields: parts$1(),\n      factory: factory$2\n    });\n\n    const factory$1 = (detail, _spec) => ({\n      uid: detail.uid,\n      dom: detail.dom,\n      behaviours: augment(detail.tabviewBehaviours, [Replacing.config({})]),\n      domModification: { attributes: { role: 'tabpanel' } }\n    });\n    const Tabview = single({\n      name: 'Tabview',\n      configFields: [field('tabviewBehaviours', [Replacing])],\n      factory: factory$1\n    });\n\n    const schema = constant$1([\n      defaulted('selectFirst', true),\n      onHandler('onChangeTab'),\n      onHandler('onDismissTab'),\n      defaulted('tabs', []),\n      field('tabSectionBehaviours', [])\n    ]);\n    const barPart = required({\n      factory: Tabbar,\n      schema: [\n        required$1('dom'),\n        requiredObjOf('markers', [\n          required$1('tabClass'),\n          required$1('selectedClass')\n        ])\n      ],\n      name: 'tabbar',\n      defaults: detail => {\n        return { tabs: detail.tabs };\n      }\n    });\n    const viewPart = required({\n      factory: Tabview,\n      name: 'tabview'\n    });\n    const parts = constant$1([\n      barPart,\n      viewPart\n    ]);\n\n    const factory = (detail, components, _spec, _externals) => {\n      const changeTab$1 = button => {\n        const tabValue = Representing.getValue(button);\n        getPart(button, detail, 'tabview').each(tabview => {\n          const tabWithValue = find$5(detail.tabs, t => t.value === tabValue);\n          tabWithValue.each(tabData => {\n            const panel = tabData.view();\n            getOpt(button.element, 'id').each(id => {\n              set$9(tabview.element, 'aria-labelledby', id);\n            });\n            Replacing.set(tabview, panel);\n            detail.onChangeTab(tabview, button, panel);\n          });\n        });\n      };\n      const changeTabBy = (section, byPred) => {\n        getPart(section, detail, 'tabbar').each(tabbar => {\n          byPred(tabbar).each(emitExecute);\n        });\n      };\n      return {\n        uid: detail.uid,\n        dom: detail.dom,\n        components,\n        behaviours: get$3(detail.tabSectionBehaviours),\n        events: derive$2(flatten([\n          detail.selectFirst ? [runOnAttached((section, _simulatedEvent) => {\n              changeTabBy(section, Highlighting.getFirst);\n            })] : [],\n          [\n            run$1(changeTab(), (section, simulatedEvent) => {\n              const button = simulatedEvent.event.button;\n              changeTab$1(button);\n            }),\n            run$1(dismissTab(), (section, simulatedEvent) => {\n              const button = simulatedEvent.event.button;\n              detail.onDismissTab(section, button);\n            })\n          ]\n        ])),\n        apis: {\n          getViewItems: section => {\n            return getPart(section, detail, 'tabview').map(tabview => Replacing.contents(tabview)).getOr([]);\n          },\n          showTab: (section, tabKey) => {\n            const getTabIfNotActive = tabbar => {\n              const candidates = Highlighting.getCandidates(tabbar);\n              const optTab = find$5(candidates, c => Representing.getValue(c) === tabKey);\n              return optTab.filter(tab => !Highlighting.isHighlighted(tabbar, tab));\n            };\n            changeTabBy(section, getTabIfNotActive);\n          }\n        }\n      };\n    };\n    const TabSection = composite({\n      name: 'TabSection',\n      configFields: schema(),\n      partFields: parts(),\n      factory,\n      apis: {\n        getViewItems: (apis, component) => apis.getViewItems(component),\n        showTab: (apis, component, tabKey) => {\n          apis.showTab(component, tabKey);\n        }\n      }\n    });\n\n    const measureHeights = (allTabs, tabview, tabviewComp) => map$2(allTabs, (_tab, i) => {\n      Replacing.set(tabviewComp, allTabs[i].view());\n      const rect = tabview.dom.getBoundingClientRect();\n      Replacing.set(tabviewComp, []);\n      return rect.height;\n    });\n    const getMaxHeight = heights => head(sort(heights, (a, b) => {\n      if (a > b) {\n        return -1;\n      } else if (a < b) {\n        return +1;\n      } else {\n        return 0;\n      }\n    }));\n    const getMaxTabviewHeight = (dialog, tabview, tablist) => {\n      const documentElement$1 = documentElement(dialog).dom;\n      const rootElm = ancestor(dialog, '.tox-dialog-wrap').getOr(dialog);\n      const isFixed = get$e(rootElm, 'position') === 'fixed';\n      let maxHeight;\n      if (isFixed) {\n        maxHeight = Math.max(documentElement$1.clientHeight, window.innerHeight);\n      } else {\n        maxHeight = Math.max(documentElement$1.offsetHeight, documentElement$1.scrollHeight);\n      }\n      const tabviewHeight = get$d(tabview);\n      const isTabListBeside = tabview.dom.offsetLeft >= tablist.dom.offsetLeft + get$c(tablist);\n      const currentTabHeight = isTabListBeside ? Math.max(get$d(tablist), tabviewHeight) : tabviewHeight;\n      const dialogTopMargin = parseInt(get$e(dialog, 'margin-top'), 10) || 0;\n      const dialogBottomMargin = parseInt(get$e(dialog, 'margin-bottom'), 10) || 0;\n      const dialogHeight = get$d(dialog) + dialogTopMargin + dialogBottomMargin;\n      const chromeHeight = dialogHeight - currentTabHeight;\n      return maxHeight - chromeHeight;\n    };\n    const showTab = (allTabs, comp) => {\n      head(allTabs).each(tab => TabSection.showTab(comp, tab.value));\n    };\n    const setTabviewHeight = (tabview, height) => {\n      set$8(tabview, 'height', height + 'px');\n      set$8(tabview, 'flex-basis', height + 'px');\n    };\n    const updateTabviewHeight = (dialogBody, tabview, maxTabHeight) => {\n      ancestor(dialogBody, '[role=\"dialog\"]').each(dialog => {\n        descendant(dialog, '[role=\"tablist\"]').each(tablist => {\n          maxTabHeight.get().map(height => {\n            set$8(tabview, 'height', '0');\n            set$8(tabview, 'flex-basis', '0');\n            return Math.min(height, getMaxTabviewHeight(dialog, tabview, tablist));\n          }).each(height => {\n            setTabviewHeight(tabview, height);\n          });\n        });\n      });\n    };\n    const getTabview = dialog => descendant(dialog, '[role=\"tabpanel\"]');\n    const smartMode = allTabs => {\n      const maxTabHeight = value$2();\n      const extraEvents = [\n        runOnAttached(comp => {\n          const dialog = comp.element;\n          getTabview(dialog).each(tabview => {\n            set$8(tabview, 'visibility', 'hidden');\n            comp.getSystem().getByDom(tabview).toOptional().each(tabviewComp => {\n              const heights = measureHeights(allTabs, tabview, tabviewComp);\n              const maxTabHeightOpt = getMaxHeight(heights);\n              maxTabHeightOpt.fold(maxTabHeight.clear, maxTabHeight.set);\n            });\n            updateTabviewHeight(dialog, tabview, maxTabHeight);\n            remove$6(tabview, 'visibility');\n            showTab(allTabs, comp);\n            requestAnimationFrame(() => {\n              updateTabviewHeight(dialog, tabview, maxTabHeight);\n            });\n          });\n        }),\n        run$1(windowResize(), comp => {\n          const dialog = comp.element;\n          getTabview(dialog).each(tabview => {\n            updateTabviewHeight(dialog, tabview, maxTabHeight);\n          });\n        }),\n        run$1(formResizeEvent, (comp, _se) => {\n          const dialog = comp.element;\n          getTabview(dialog).each(tabview => {\n            const oldFocus = active$1(getRootNode(tabview));\n            set$8(tabview, 'visibility', 'hidden');\n            const oldHeight = getRaw(tabview, 'height').map(h => parseInt(h, 10));\n            remove$6(tabview, 'height');\n            remove$6(tabview, 'flex-basis');\n            const newHeight = tabview.dom.getBoundingClientRect().height;\n            const hasGrown = oldHeight.forall(h => newHeight > h);\n            if (hasGrown) {\n              maxTabHeight.set(newHeight);\n              updateTabviewHeight(dialog, tabview, maxTabHeight);\n            } else {\n              oldHeight.each(h => {\n                setTabviewHeight(tabview, h);\n              });\n            }\n            remove$6(tabview, 'visibility');\n            oldFocus.each(focus$3);\n          });\n        })\n      ];\n      const selectFirst = false;\n      return {\n        extraEvents,\n        selectFirst\n      };\n    };\n\n    const SendDataToSectionChannel = 'send-data-to-section';\n    const SendDataToViewChannel = 'send-data-to-view';\n    const renderTabPanel = (spec, dialogData, backstage) => {\n      const storedValue = Cell({});\n      const updateDataWithForm = form => {\n        const formData = Representing.getValue(form);\n        const validData = toValidValues(formData).getOr({});\n        const currentData = storedValue.get();\n        const newData = deepMerge(currentData, validData);\n        storedValue.set(newData);\n      };\n      const setDataOnForm = form => {\n        const tabData = storedValue.get();\n        Representing.setValue(form, tabData);\n      };\n      const oldTab = Cell(null);\n      const allTabs = map$2(spec.tabs, tab => {\n        return {\n          value: tab.name,\n          dom: {\n            tag: 'div',\n            classes: ['tox-dialog__body-nav-item']\n          },\n          components: [text$1(backstage.shared.providers.translate(tab.title))],\n          view: () => {\n            return [Form.sketch(parts => ({\n                dom: {\n                  tag: 'div',\n                  classes: ['tox-form']\n                },\n                components: map$2(tab.items, item => interpretInForm(parts, item, dialogData, backstage)),\n                formBehaviours: derive$1([\n                  Keying.config({\n                    mode: 'acyclic',\n                    useTabstopAt: not(isPseudoStop)\n                  }),\n                  config('TabView.form.events', [\n                    runOnAttached(setDataOnForm),\n                    runOnDetached(updateDataWithForm)\n                  ]),\n                  Receiving.config({\n                    channels: wrapAll([\n                      {\n                        key: SendDataToSectionChannel,\n                        value: { onReceive: updateDataWithForm }\n                      },\n                      {\n                        key: SendDataToViewChannel,\n                        value: { onReceive: setDataOnForm }\n                      }\n                    ])\n                  })\n                ])\n              }))];\n          }\n        };\n      });\n      const tabMode = smartMode(allTabs);\n      return TabSection.sketch({\n        dom: {\n          tag: 'div',\n          classes: ['tox-dialog__body']\n        },\n        onChangeTab: (section, button, _viewItems) => {\n          const name = Representing.getValue(button);\n          emitWith(section, formTabChangeEvent, {\n            name,\n            oldName: oldTab.get()\n          });\n          oldTab.set(name);\n        },\n        tabs: allTabs,\n        components: [\n          TabSection.parts.tabbar({\n            dom: {\n              tag: 'div',\n              classes: ['tox-dialog__body-nav']\n            },\n            components: [Tabbar.parts.tabs({})],\n            markers: {\n              tabClass: 'tox-tab',\n              selectedClass: 'tox-dialog__body-nav-item--active'\n            },\n            tabbarBehaviours: derive$1([Tabstopping.config({})])\n          }),\n          TabSection.parts.tabview({\n            dom: {\n              tag: 'div',\n              classes: ['tox-dialog__body-content']\n            }\n          })\n        ],\n        selectFirst: tabMode.selectFirst,\n        tabSectionBehaviours: derive$1([\n          config('tabpanel', tabMode.extraEvents),\n          Keying.config({ mode: 'acyclic' }),\n          Composing.config({ find: comp => head(TabSection.getViewItems(comp)) }),\n          RepresentingConfigs.withComp(Optional.none(), tsection => {\n            tsection.getSystem().broadcastOn([SendDataToSectionChannel], {});\n            return storedValue.get();\n          }, (tsection, value) => {\n            storedValue.set(value);\n            tsection.getSystem().broadcastOn([SendDataToViewChannel], {});\n          })\n        ])\n      });\n    };\n\n    const dialogChannel = generate$6('update-dialog');\n    const titleChannel = generate$6('update-title');\n    const bodyChannel = generate$6('update-body');\n    const footerChannel = generate$6('update-footer');\n    const bodySendMessageChannel = generate$6('body-send-message');\n\n    const renderBody = (spec, dialogId, contentId, backstage, ariaAttrs) => {\n      const renderComponents = incoming => {\n        const body = incoming.body;\n        switch (body.type) {\n        case 'tabpanel': {\n            return [renderTabPanel(body, incoming.initialData, backstage)];\n          }\n        default: {\n            return [renderBodyPanel(body, incoming.initialData, backstage)];\n          }\n        }\n      };\n      const updateState = (_comp, incoming) => Optional.some({ isTabPanel: () => incoming.body.type === 'tabpanel' });\n      const ariaAttributes = { 'aria-live': 'polite' };\n      return {\n        dom: {\n          tag: 'div',\n          classes: ['tox-dialog__content-js'],\n          attributes: {\n            ...contentId.map(x => ({ id: x })).getOr({}),\n            ...ariaAttrs ? ariaAttributes : {}\n          }\n        },\n        components: [],\n        behaviours: derive$1([\n          ComposingConfigs.childAt(0),\n          Reflecting.config({\n            channel: `${ bodyChannel }-${ dialogId }`,\n            updateState,\n            renderComponents,\n            initialData: spec\n          })\n        ])\n      };\n    };\n    const renderInlineBody = (spec, dialogId, contentId, backstage, ariaAttrs) => renderBody(spec, dialogId, Optional.some(contentId), backstage, ariaAttrs);\n    const renderModalBody = (spec, dialogId, backstage) => {\n      const bodySpec = renderBody(spec, dialogId, Optional.none(), backstage, false);\n      return ModalDialog.parts.body(bodySpec);\n    };\n    const renderIframeBody = spec => {\n      const bodySpec = {\n        dom: {\n          tag: 'div',\n          classes: ['tox-dialog__content-js']\n        },\n        components: [{\n            dom: {\n              tag: 'div',\n              classes: ['tox-dialog__body-iframe']\n            },\n            components: [craft({\n                dom: {\n                  tag: 'iframe',\n                  attributes: { src: spec.url }\n                },\n                behaviours: derive$1([\n                  Tabstopping.config({}),\n                  Focusing.config({})\n                ])\n              })]\n          }],\n        behaviours: derive$1([Keying.config({\n            mode: 'acyclic',\n            useTabstopAt: not(isPseudoStop)\n          })])\n      };\n      return ModalDialog.parts.body(bodySpec);\n    };\n\n    const isTouch = global$5.deviceType.isTouch();\n    const hiddenHeader = (title, close) => ({\n      dom: {\n        tag: 'div',\n        styles: { display: 'none' },\n        classes: ['tox-dialog__header']\n      },\n      components: [\n        title,\n        close\n      ]\n    });\n    const pClose = (onClose, providersBackstage) => ModalDialog.parts.close(Button.sketch({\n      dom: {\n        tag: 'button',\n        classes: [\n          'tox-button',\n          'tox-button--icon',\n          'tox-button--naked'\n        ],\n        attributes: {\n          'type': 'button',\n          'aria-label': providersBackstage.translate('Close')\n        }\n      },\n      action: onClose,\n      buttonBehaviours: derive$1([Tabstopping.config({})])\n    }));\n    const pUntitled = () => ModalDialog.parts.title({\n      dom: {\n        tag: 'div',\n        classes: ['tox-dialog__title'],\n        innerHtml: '',\n        styles: { display: 'none' }\n      }\n    });\n    const pBodyMessage = (message, providersBackstage) => ModalDialog.parts.body({\n      dom: {\n        tag: 'div',\n        classes: ['tox-dialog__body']\n      },\n      components: [{\n          dom: {\n            tag: 'div',\n            classes: ['tox-dialog__body-content']\n          },\n          components: [{ dom: fromHtml(`<p>${ providersBackstage.translate(message) }</p>`) }]\n        }]\n    });\n    const pFooter = buttons => ModalDialog.parts.footer({\n      dom: {\n        tag: 'div',\n        classes: ['tox-dialog__footer']\n      },\n      components: buttons\n    });\n    const pFooterGroup = (startButtons, endButtons) => [\n      Container.sketch({\n        dom: {\n          tag: 'div',\n          classes: ['tox-dialog__footer-start']\n        },\n        components: startButtons\n      }),\n      Container.sketch({\n        dom: {\n          tag: 'div',\n          classes: ['tox-dialog__footer-end']\n        },\n        components: endButtons\n      })\n    ];\n    const renderDialog$1 = spec => {\n      const dialogClass = 'tox-dialog';\n      const blockerClass = dialogClass + '-wrap';\n      const blockerBackdropClass = blockerClass + '__backdrop';\n      const scrollLockClass = dialogClass + '__disable-scroll';\n      return ModalDialog.sketch({\n        lazySink: spec.lazySink,\n        onEscape: comp => {\n          spec.onEscape(comp);\n          return Optional.some(true);\n        },\n        useTabstopAt: elem => !isPseudoStop(elem),\n        dom: {\n          tag: 'div',\n          classes: [dialogClass].concat(spec.extraClasses),\n          styles: {\n            position: 'relative',\n            ...spec.extraStyles\n          }\n        },\n        components: [\n          spec.header,\n          spec.body,\n          ...spec.footer.toArray()\n        ],\n        parts: {\n          blocker: {\n            dom: fromHtml(`<div class=\"${ blockerClass }\"></div>`),\n            components: [{\n                dom: {\n                  tag: 'div',\n                  classes: isTouch ? [\n                    blockerBackdropClass,\n                    blockerBackdropClass + '--opaque'\n                  ] : [blockerBackdropClass]\n                }\n              }]\n          }\n        },\n        dragBlockClass: blockerClass,\n        modalBehaviours: derive$1([\n          Focusing.config({}),\n          config('dialog-events', spec.dialogEvents.concat([runOnSource(focusin(), (comp, _se) => {\n              Keying.focusIn(comp);\n            })])),\n          config('scroll-lock', [\n            runOnAttached(() => {\n              add$2(body(), scrollLockClass);\n            }),\n            runOnDetached(() => {\n              remove$2(body(), scrollLockClass);\n            })\n          ]),\n          ...spec.extraBehaviours\n        ]),\n        eventOrder: {\n          [execute$5()]: ['dialog-events'],\n          [attachedToDom()]: [\n            'scroll-lock',\n            'dialog-events',\n            'alloy.base.behaviour'\n          ],\n          [detachedFromDom()]: [\n            'alloy.base.behaviour',\n            'dialog-events',\n            'scroll-lock'\n          ],\n          ...spec.eventOrder\n        }\n      });\n    };\n\n    const renderClose = providersBackstage => Button.sketch({\n      dom: {\n        tag: 'button',\n        classes: [\n          'tox-button',\n          'tox-button--icon',\n          'tox-button--naked'\n        ],\n        attributes: {\n          'type': 'button',\n          'aria-label': providersBackstage.translate('Close'),\n          'title': providersBackstage.translate('Close')\n        }\n      },\n      components: [render$3('close', {\n          tag: 'div',\n          classes: ['tox-icon']\n        }, providersBackstage.icons)],\n      action: comp => {\n        emit(comp, formCancelEvent);\n      }\n    });\n    const renderTitle = (spec, dialogId, titleId, providersBackstage) => {\n      const renderComponents = data => [text$1(providersBackstage.translate(data.title))];\n      return {\n        dom: {\n          tag: 'div',\n          classes: ['tox-dialog__title'],\n          attributes: { ...titleId.map(x => ({ id: x })).getOr({}) }\n        },\n        components: [],\n        behaviours: derive$1([Reflecting.config({\n            channel: `${ titleChannel }-${ dialogId }`,\n            initialData: spec,\n            renderComponents\n          })])\n      };\n    };\n    const renderDragHandle = () => ({ dom: fromHtml('<div class=\"tox-dialog__draghandle\"></div>') });\n    const renderInlineHeader = (spec, dialogId, titleId, providersBackstage) => Container.sketch({\n      dom: fromHtml('<div class=\"tox-dialog__header\"></div>'),\n      components: [\n        renderTitle(spec, dialogId, Optional.some(titleId), providersBackstage),\n        renderDragHandle(),\n        renderClose(providersBackstage)\n      ],\n      containerBehaviours: derive$1([Dragging.config({\n          mode: 'mouse',\n          blockerClass: 'blocker',\n          getTarget: handle => {\n            return closest$1(handle, '[role=\"dialog\"]').getOrDie();\n          },\n          snaps: {\n            getSnapPoints: () => [],\n            leftAttr: 'data-drag-left',\n            topAttr: 'data-drag-top'\n          }\n        })])\n    });\n    const renderModalHeader = (spec, dialogId, providersBackstage) => {\n      const pTitle = ModalDialog.parts.title(renderTitle(spec, dialogId, Optional.none(), providersBackstage));\n      const pHandle = ModalDialog.parts.draghandle(renderDragHandle());\n      const pClose = ModalDialog.parts.close(renderClose(providersBackstage));\n      const components = [pTitle].concat(spec.draggable ? [pHandle] : []).concat([pClose]);\n      return Container.sketch({\n        dom: fromHtml('<div class=\"tox-dialog__header\"></div>'),\n        components\n      });\n    };\n\n    const getHeader = (title, dialogId, backstage) => renderModalHeader({\n      title: backstage.shared.providers.translate(title),\n      draggable: backstage.dialog.isDraggableModal()\n    }, dialogId, backstage.shared.providers);\n    const getBusySpec = (message, bs, providers) => ({\n      dom: {\n        tag: 'div',\n        classes: ['tox-dialog__busy-spinner'],\n        attributes: { 'aria-label': providers.translate(message) },\n        styles: {\n          left: '0px',\n          right: '0px',\n          bottom: '0px',\n          top: '0px',\n          position: 'absolute'\n        }\n      },\n      behaviours: bs,\n      components: [{ dom: fromHtml('<div class=\"tox-spinner\"><div></div><div></div><div></div></div>') }]\n    });\n    const getEventExtras = (lazyDialog, providers, extra) => ({\n      onClose: () => extra.closeWindow(),\n      onBlock: blockEvent => {\n        ModalDialog.setBusy(lazyDialog(), (_comp, bs) => getBusySpec(blockEvent.message, bs, providers));\n      },\n      onUnblock: () => {\n        ModalDialog.setIdle(lazyDialog());\n      }\n    });\n    const renderModalDialog = (spec, initialData, dialogEvents, backstage) => {\n      const updateState = (_comp, incoming) => Optional.some(incoming);\n      return build$1(renderDialog$1({\n        ...spec,\n        lazySink: backstage.shared.getSink,\n        extraBehaviours: [\n          Reflecting.config({\n            channel: `${ dialogChannel }-${ spec.id }`,\n            updateState,\n            initialData\n          }),\n          RepresentingConfigs.memory({}),\n          ...spec.extraBehaviours\n        ],\n        onEscape: comp => {\n          emit(comp, formCancelEvent);\n        },\n        dialogEvents,\n        eventOrder: {\n          [receive()]: [\n            Reflecting.name(),\n            Receiving.name()\n          ],\n          [attachedToDom()]: [\n            'scroll-lock',\n            Reflecting.name(),\n            'messages',\n            'dialog-events',\n            'alloy.base.behaviour'\n          ],\n          [detachedFromDom()]: [\n            'alloy.base.behaviour',\n            'dialog-events',\n            'messages',\n            Reflecting.name(),\n            'scroll-lock'\n          ]\n        }\n      }));\n    };\n    const mapMenuButtons = buttons => {\n      const mapItems = button => {\n        const items = map$2(button.items, item => {\n          const cell = Cell(false);\n          return {\n            ...item,\n            storage: cell\n          };\n        });\n        return {\n          ...button,\n          items\n        };\n      };\n      return map$2(buttons, button => {\n        return button.type === 'menu' ? mapItems(button) : button;\n      });\n    };\n    const extractCellsToObject = buttons => foldl(buttons, (acc, button) => {\n      if (button.type === 'menu') {\n        const menuButton = button;\n        return foldl(menuButton.items, (innerAcc, item) => {\n          innerAcc[item.name] = item.storage;\n          return innerAcc;\n        }, acc);\n      }\n      return acc;\n    }, {});\n\n    const initCommonEvents = (fireApiEvent, extras) => [\n      runWithTarget(focusin(), onFocus),\n      fireApiEvent(formCloseEvent, (_api, spec) => {\n        extras.onClose();\n        spec.onClose();\n      }),\n      fireApiEvent(formCancelEvent, (api, spec, _event, self) => {\n        spec.onCancel(api);\n        emit(self, formCloseEvent);\n      }),\n      run$1(formUnblockEvent, (_c, _se) => extras.onUnblock()),\n      run$1(formBlockEvent, (_c, se) => extras.onBlock(se.event))\n    ];\n    const initUrlDialog = (getInstanceApi, extras) => {\n      const fireApiEvent = (eventName, f) => run$1(eventName, (c, se) => {\n        withSpec(c, (spec, _c) => {\n          f(getInstanceApi(), spec, se.event, c);\n        });\n      });\n      const withSpec = (c, f) => {\n        Reflecting.getState(c).get().each(currentDialog => {\n          f(currentDialog, c);\n        });\n      };\n      return [\n        ...initCommonEvents(fireApiEvent, extras),\n        fireApiEvent(formActionEvent, (api, spec, event) => {\n          spec.onAction(api, { name: event.name });\n        })\n      ];\n    };\n    const initDialog = (getInstanceApi, extras, getSink) => {\n      const fireApiEvent = (eventName, f) => run$1(eventName, (c, se) => {\n        withSpec(c, (spec, _c) => {\n          f(getInstanceApi(), spec, se.event, c);\n        });\n      });\n      const withSpec = (c, f) => {\n        Reflecting.getState(c).get().each(currentDialogInit => {\n          f(currentDialogInit.internalDialog, c);\n        });\n      };\n      return [\n        ...initCommonEvents(fireApiEvent, extras),\n        fireApiEvent(formSubmitEvent, (api, spec) => spec.onSubmit(api)),\n        fireApiEvent(formChangeEvent, (api, spec, event) => {\n          spec.onChange(api, { name: event.name });\n        }),\n        fireApiEvent(formActionEvent, (api, spec, event, component) => {\n          const focusIn = () => Keying.focusIn(component);\n          const isDisabled = focused => has$1(focused, 'disabled') || getOpt(focused, 'aria-disabled').exists(val => val === 'true');\n          const rootNode = getRootNode(component.element);\n          const current = active$1(rootNode);\n          spec.onAction(api, {\n            name: event.name,\n            value: event.value\n          });\n          active$1(rootNode).fold(focusIn, focused => {\n            if (isDisabled(focused)) {\n              focusIn();\n            } else if (current.exists(cur => contains(focused, cur) && isDisabled(cur))) {\n              focusIn();\n            } else {\n              getSink().toOptional().filter(sink => !contains(sink.element, focused)).each(focusIn);\n            }\n          });\n        }),\n        fireApiEvent(formTabChangeEvent, (api, spec, event) => {\n          spec.onTabChange(api, {\n            newTabName: event.name,\n            oldTabName: event.oldName\n          });\n        }),\n        runOnDetached(component => {\n          const api = getInstanceApi();\n          Representing.setValue(component, api.getData());\n        })\n      ];\n    };\n    const SilverDialogEvents = {\n      initUrlDialog,\n      initDialog\n    };\n\n    const makeButton = (button, backstage) => renderFooterButton(button, button.type, backstage);\n    const lookup = (compInSystem, footerButtons, buttonName) => find$5(footerButtons, button => button.name === buttonName).bind(memButton => memButton.memento.getOpt(compInSystem));\n    const renderComponents = (_data, state) => {\n      const footerButtons = state.map(s => s.footerButtons).getOr([]);\n      const buttonGroups = partition$3(footerButtons, button => button.align === 'start');\n      const makeGroup = (edge, buttons) => Container.sketch({\n        dom: {\n          tag: 'div',\n          classes: [`tox-dialog__footer-${ edge }`]\n        },\n        components: map$2(buttons, button => button.memento.asSpec())\n      });\n      const startButtons = makeGroup('start', buttonGroups.pass);\n      const endButtons = makeGroup('end', buttonGroups.fail);\n      return [\n        startButtons,\n        endButtons\n      ];\n    };\n    const renderFooter = (initSpec, dialogId, backstage) => {\n      const updateState = (comp, data) => {\n        const footerButtons = map$2(data.buttons, button => {\n          const memButton = record(makeButton(button, backstage));\n          return {\n            name: button.name,\n            align: button.align,\n            memento: memButton\n          };\n        });\n        const lookupByName = buttonName => lookup(comp, footerButtons, buttonName);\n        return Optional.some({\n          lookupByName,\n          footerButtons\n        });\n      };\n      return {\n        dom: fromHtml('<div class=\"tox-dialog__footer\"></div>'),\n        components: [],\n        behaviours: derive$1([Reflecting.config({\n            channel: `${ footerChannel }-${ dialogId }`,\n            initialData: initSpec,\n            updateState,\n            renderComponents\n          })])\n      };\n    };\n    const renderInlineFooter = (initSpec, dialogId, backstage) => renderFooter(initSpec, dialogId, backstage);\n    const renderModalFooter = (initSpec, dialogId, backstage) => ModalDialog.parts.footer(renderFooter(initSpec, dialogId, backstage));\n\n    const getCompByName = (access, name) => {\n      const root = access.getRoot();\n      if (root.getSystem().isConnected()) {\n        const form = Composing.getCurrent(access.getFormWrapper()).getOr(access.getFormWrapper());\n        return Form.getField(form, name).orThunk(() => {\n          const footer = access.getFooter();\n          const footerState = Reflecting.getState(footer).get();\n          return footerState.bind(f => f.lookupByName(name));\n        });\n      } else {\n        return Optional.none();\n      }\n    };\n    const validateData$1 = (access, data) => {\n      const root = access.getRoot();\n      return Reflecting.getState(root).get().map(dialogState => getOrDie(asRaw('data', dialogState.dataValidator, data))).getOr(data);\n    };\n    const getDialogApi = (access, doRedial, menuItemStates) => {\n      const withRoot = f => {\n        const root = access.getRoot();\n        if (root.getSystem().isConnected()) {\n          f(root);\n        }\n      };\n      const getData = () => {\n        const root = access.getRoot();\n        const valueComp = root.getSystem().isConnected() ? access.getFormWrapper() : root;\n        const representedValues = Representing.getValue(valueComp);\n        const menuItemCurrentState = map$1(menuItemStates, cell => cell.get());\n        return {\n          ...representedValues,\n          ...menuItemCurrentState\n        };\n      };\n      const setData = newData => {\n        withRoot(_ => {\n          const prevData = instanceApi.getData();\n          const mergedData = deepMerge(prevData, newData);\n          const newInternalData = validateData$1(access, mergedData);\n          const form = access.getFormWrapper();\n          Representing.setValue(form, newInternalData);\n          each(menuItemStates, (v, k) => {\n            if (has$2(mergedData, k)) {\n              v.set(mergedData[k]);\n            }\n          });\n        });\n      };\n      const setEnabled = (name, state) => {\n        getCompByName(access, name).each(state ? Disabling.enable : Disabling.disable);\n      };\n      const focus = name => {\n        getCompByName(access, name).each(Focusing.focus);\n      };\n      const block = message => {\n        if (!isString(message)) {\n          throw new Error('The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument');\n        }\n        withRoot(root => {\n          emitWith(root, formBlockEvent, { message });\n        });\n      };\n      const unblock = () => {\n        withRoot(root => {\n          emit(root, formUnblockEvent);\n        });\n      };\n      const showTab = name => {\n        withRoot(_ => {\n          const body = access.getBody();\n          const bodyState = Reflecting.getState(body);\n          if (bodyState.get().exists(b => b.isTabPanel())) {\n            Composing.getCurrent(body).each(tabSection => {\n              TabSection.showTab(tabSection, name);\n            });\n          }\n        });\n      };\n      const redial = d => {\n        withRoot(root => {\n          const id = access.getId();\n          const dialogInit = doRedial(d);\n          root.getSystem().broadcastOn([`${ dialogChannel }-${ id }`], dialogInit);\n          root.getSystem().broadcastOn([`${ titleChannel }-${ id }`], dialogInit.internalDialog);\n          root.getSystem().broadcastOn([`${ bodyChannel }-${ id }`], dialogInit.internalDialog);\n          root.getSystem().broadcastOn([`${ footerChannel }-${ id }`], dialogInit.internalDialog);\n          instanceApi.setData(dialogInit.initialData);\n        });\n      };\n      const close = () => {\n        withRoot(root => {\n          emit(root, formCloseEvent);\n        });\n      };\n      const instanceApi = {\n        getData,\n        setData,\n        setEnabled,\n        focus,\n        block,\n        unblock,\n        showTab,\n        redial,\n        close\n      };\n      return instanceApi;\n    };\n\n    const getDialogSizeClasses = size => {\n      switch (size) {\n      case 'large':\n        return ['tox-dialog--width-lg'];\n      case 'medium':\n        return ['tox-dialog--width-md'];\n      default:\n        return [];\n      }\n    };\n    const renderDialog = (dialogInit, extra, backstage) => {\n      const dialogId = generate$6('dialog');\n      const internalDialog = dialogInit.internalDialog;\n      const header = getHeader(internalDialog.title, dialogId, backstage);\n      const body = renderModalBody({\n        body: internalDialog.body,\n        initialData: internalDialog.initialData\n      }, dialogId, backstage);\n      const storedMenuButtons = mapMenuButtons(internalDialog.buttons);\n      const objOfCells = extractCellsToObject(storedMenuButtons);\n      const footer = renderModalFooter({ buttons: storedMenuButtons }, dialogId, backstage);\n      const dialogEvents = SilverDialogEvents.initDialog(() => instanceApi, getEventExtras(() => dialog, backstage.shared.providers, extra), backstage.shared.getSink);\n      const dialogSize = getDialogSizeClasses(internalDialog.size);\n      const spec = {\n        id: dialogId,\n        header,\n        body,\n        footer: Optional.some(footer),\n        extraClasses: dialogSize,\n        extraBehaviours: [],\n        extraStyles: {}\n      };\n      const dialog = renderModalDialog(spec, dialogInit, dialogEvents, backstage);\n      const modalAccess = (() => {\n        const getForm = () => {\n          const outerForm = ModalDialog.getBody(dialog);\n          return Composing.getCurrent(outerForm).getOr(outerForm);\n        };\n        return {\n          getId: constant$1(dialogId),\n          getRoot: constant$1(dialog),\n          getBody: () => ModalDialog.getBody(dialog),\n          getFooter: () => ModalDialog.getFooter(dialog),\n          getFormWrapper: getForm\n        };\n      })();\n      const instanceApi = getDialogApi(modalAccess, extra.redial, objOfCells);\n      return {\n        dialog,\n        instanceApi\n      };\n    };\n\n    const renderInlineDialog = (dialogInit, extra, backstage, ariaAttrs) => {\n      const dialogId = generate$6('dialog');\n      const dialogLabelId = generate$6('dialog-label');\n      const dialogContentId = generate$6('dialog-content');\n      const internalDialog = dialogInit.internalDialog;\n      const updateState = (_comp, incoming) => Optional.some(incoming);\n      const memHeader = record(renderInlineHeader({\n        title: internalDialog.title,\n        draggable: true\n      }, dialogId, dialogLabelId, backstage.shared.providers));\n      const memBody = record(renderInlineBody({\n        body: internalDialog.body,\n        initialData: internalDialog.initialData\n      }, dialogId, dialogContentId, backstage, ariaAttrs));\n      const storagedMenuButtons = mapMenuButtons(internalDialog.buttons);\n      const objOfCells = extractCellsToObject(storagedMenuButtons);\n      const memFooter = record(renderInlineFooter({ buttons: storagedMenuButtons }, dialogId, backstage));\n      const dialogEvents = SilverDialogEvents.initDialog(() => instanceApi, {\n        onBlock: event => {\n          Blocking.block(dialog, (_comp, bs) => getBusySpec(event.message, bs, backstage.shared.providers));\n        },\n        onUnblock: () => {\n          Blocking.unblock(dialog);\n        },\n        onClose: () => extra.closeWindow()\n      }, backstage.shared.getSink);\n      const dialog = build$1({\n        dom: {\n          tag: 'div',\n          classes: [\n            'tox-dialog',\n            'tox-dialog-inline'\n          ],\n          attributes: {\n            role: 'dialog',\n            ['aria-labelledby']: dialogLabelId,\n            ['aria-describedby']: dialogContentId\n          }\n        },\n        eventOrder: {\n          [receive()]: [\n            Reflecting.name(),\n            Receiving.name()\n          ],\n          [execute$5()]: ['execute-on-form'],\n          [attachedToDom()]: [\n            'reflecting',\n            'execute-on-form'\n          ]\n        },\n        behaviours: derive$1([\n          Keying.config({\n            mode: 'cyclic',\n            onEscape: c => {\n              emit(c, formCloseEvent);\n              return Optional.some(true);\n            },\n            useTabstopAt: elem => !isPseudoStop(elem) && (name$3(elem) !== 'button' || get$f(elem, 'disabled') !== 'disabled')\n          }),\n          Reflecting.config({\n            channel: `${ dialogChannel }-${ dialogId }`,\n            updateState,\n            initialData: dialogInit\n          }),\n          Focusing.config({}),\n          config('execute-on-form', dialogEvents.concat([runOnSource(focusin(), (comp, _se) => {\n              Keying.focusIn(comp);\n            })])),\n          Blocking.config({ getRoot: () => Optional.some(dialog) }),\n          Replacing.config({}),\n          RepresentingConfigs.memory({})\n        ]),\n        components: [\n          memHeader.asSpec(),\n          memBody.asSpec(),\n          memFooter.asSpec()\n        ]\n      });\n      const instanceApi = getDialogApi({\n        getId: constant$1(dialogId),\n        getRoot: constant$1(dialog),\n        getFooter: () => memFooter.get(dialog),\n        getBody: () => memBody.get(dialog),\n        getFormWrapper: () => {\n          const body = memBody.get(dialog);\n          return Composing.getCurrent(body).getOr(body);\n        }\n      }, extra.redial, objOfCells);\n      return {\n        dialog,\n        instanceApi\n      };\n    };\n\n    var global = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n    const getUrlDialogApi = root => {\n      const withRoot = f => {\n        if (root.getSystem().isConnected()) {\n          f(root);\n        }\n      };\n      const block = message => {\n        if (!isString(message)) {\n          throw new Error('The urlDialogInstanceAPI.block function should be passed a blocking message of type string as an argument');\n        }\n        withRoot(root => {\n          emitWith(root, formBlockEvent, { message });\n        });\n      };\n      const unblock = () => {\n        withRoot(root => {\n          emit(root, formUnblockEvent);\n        });\n      };\n      const close = () => {\n        withRoot(root => {\n          emit(root, formCloseEvent);\n        });\n      };\n      const sendMessage = data => {\n        withRoot(root => {\n          root.getSystem().broadcastOn([bodySendMessageChannel], data);\n        });\n      };\n      return {\n        block,\n        unblock,\n        close,\n        sendMessage\n      };\n    };\n\n    const SUPPORTED_MESSAGE_ACTIONS = [\n      'insertContent',\n      'setContent',\n      'execCommand',\n      'close',\n      'block',\n      'unblock'\n    ];\n    const isSupportedMessage = data => isObject(data) && SUPPORTED_MESSAGE_ACTIONS.indexOf(data.mceAction) !== -1;\n    const isCustomMessage = data => !isSupportedMessage(data) && isObject(data) && has$2(data, 'mceAction');\n    const handleMessage = (editor, api, data) => {\n      switch (data.mceAction) {\n      case 'insertContent':\n        editor.insertContent(data.content);\n        break;\n      case 'setContent':\n        editor.setContent(data.content);\n        break;\n      case 'execCommand':\n        const ui = isBoolean(data.ui) ? data.ui : false;\n        editor.execCommand(data.cmd, ui, data.value);\n        break;\n      case 'close':\n        api.close();\n        break;\n      case 'block':\n        api.block(data.message);\n        break;\n      case 'unblock':\n        api.unblock();\n        break;\n      }\n    };\n    const renderUrlDialog = (internalDialog, extra, editor, backstage) => {\n      const dialogId = generate$6('dialog');\n      const header = getHeader(internalDialog.title, dialogId, backstage);\n      const body = renderIframeBody(internalDialog);\n      const footer = internalDialog.buttons.bind(buttons => {\n        if (buttons.length === 0) {\n          return Optional.none();\n        } else {\n          return Optional.some(renderModalFooter({ buttons }, dialogId, backstage));\n        }\n      });\n      const dialogEvents = SilverDialogEvents.initUrlDialog(() => instanceApi, getEventExtras(() => dialog, backstage.shared.providers, extra));\n      const styles = {\n        ...internalDialog.height.fold(() => ({}), height => ({\n          'height': height + 'px',\n          'max-height': height + 'px'\n        })),\n        ...internalDialog.width.fold(() => ({}), width => ({\n          'width': width + 'px',\n          'max-width': width + 'px'\n        }))\n      };\n      const classes = internalDialog.width.isNone() && internalDialog.height.isNone() ? ['tox-dialog--width-lg'] : [];\n      const iframeUri = new global(internalDialog.url, { base_uri: new global(window.location.href) });\n      const iframeDomain = `${ iframeUri.protocol }://${ iframeUri.host }${ iframeUri.port ? ':' + iframeUri.port : '' }`;\n      const messageHandlerUnbinder = unbindable();\n      const extraBehaviours = [\n        config('messages', [\n          runOnAttached(() => {\n            const unbind = bind(SugarElement.fromDom(window), 'message', e => {\n              if (iframeUri.isSameOrigin(new global(e.raw.origin))) {\n                const data = e.raw.data;\n                if (isSupportedMessage(data)) {\n                  handleMessage(editor, instanceApi, data);\n                } else if (isCustomMessage(data)) {\n                  internalDialog.onMessage(instanceApi, data);\n                }\n              }\n            });\n            messageHandlerUnbinder.set(unbind);\n          }),\n          runOnDetached(messageHandlerUnbinder.clear)\n        ]),\n        Receiving.config({\n          channels: {\n            [bodySendMessageChannel]: {\n              onReceive: (comp, data) => {\n                descendant(comp.element, 'iframe').each(iframeEle => {\n                  const iframeWin = iframeEle.dom.contentWindow;\n                  if (isNonNullable(iframeWin)) {\n                    iframeWin.postMessage(data, iframeDomain);\n                  }\n                });\n              }\n            }\n          }\n        })\n      ];\n      const spec = {\n        id: dialogId,\n        header,\n        body,\n        footer,\n        extraClasses: classes,\n        extraBehaviours,\n        extraStyles: styles\n      };\n      const dialog = renderModalDialog(spec, internalDialog, dialogEvents, backstage);\n      const instanceApi = getUrlDialogApi(dialog);\n      return {\n        dialog,\n        instanceApi\n      };\n    };\n\n    const setup$2 = backstage => {\n      const sharedBackstage = backstage.shared;\n      const open = (message, callback) => {\n        const closeDialog = () => {\n          ModalDialog.hide(alertDialog);\n          callback();\n        };\n        const memFooterClose = record(renderFooterButton({\n          name: 'close-alert',\n          text: 'OK',\n          primary: true,\n          buttonType: Optional.some('primary'),\n          align: 'end',\n          enabled: true,\n          icon: Optional.none()\n        }, 'cancel', backstage));\n        const titleSpec = pUntitled();\n        const closeSpec = pClose(closeDialog, sharedBackstage.providers);\n        const alertDialog = build$1(renderDialog$1({\n          lazySink: () => sharedBackstage.getSink(),\n          header: hiddenHeader(titleSpec, closeSpec),\n          body: pBodyMessage(message, sharedBackstage.providers),\n          footer: Optional.some(pFooter(pFooterGroup([], [memFooterClose.asSpec()]))),\n          onEscape: closeDialog,\n          extraClasses: ['tox-alert-dialog'],\n          extraBehaviours: [],\n          extraStyles: {},\n          dialogEvents: [run$1(formCancelEvent, closeDialog)],\n          eventOrder: {}\n        }));\n        ModalDialog.show(alertDialog);\n        const footerCloseButton = memFooterClose.get(alertDialog);\n        Focusing.focus(footerCloseButton);\n      };\n      return { open };\n    };\n\n    const setup$1 = backstage => {\n      const sharedBackstage = backstage.shared;\n      const open = (message, callback) => {\n        const closeDialog = state => {\n          ModalDialog.hide(confirmDialog);\n          callback(state);\n        };\n        const memFooterYes = record(renderFooterButton({\n          name: 'yes',\n          text: 'Yes',\n          primary: true,\n          buttonType: Optional.some('primary'),\n          align: 'end',\n          enabled: true,\n          icon: Optional.none()\n        }, 'submit', backstage));\n        const footerNo = renderFooterButton({\n          name: 'no',\n          text: 'No',\n          primary: false,\n          buttonType: Optional.some('secondary'),\n          align: 'end',\n          enabled: true,\n          icon: Optional.none()\n        }, 'cancel', backstage);\n        const titleSpec = pUntitled();\n        const closeSpec = pClose(() => closeDialog(false), sharedBackstage.providers);\n        const confirmDialog = build$1(renderDialog$1({\n          lazySink: () => sharedBackstage.getSink(),\n          header: hiddenHeader(titleSpec, closeSpec),\n          body: pBodyMessage(message, sharedBackstage.providers),\n          footer: Optional.some(pFooter(pFooterGroup([], [\n            footerNo,\n            memFooterYes.asSpec()\n          ]))),\n          onEscape: () => closeDialog(false),\n          extraClasses: ['tox-confirm-dialog'],\n          extraBehaviours: [],\n          extraStyles: {},\n          dialogEvents: [\n            run$1(formCancelEvent, () => closeDialog(false)),\n            run$1(formSubmitEvent, () => closeDialog(true))\n          ],\n          eventOrder: {}\n        }));\n        ModalDialog.show(confirmDialog);\n        const footerYesButton = memFooterYes.get(confirmDialog);\n        Focusing.focus(footerYesButton);\n      };\n      return { open };\n    };\n\n    const validateData = (data, validator) => getOrDie(asRaw('data', validator, data));\n    const isAlertOrConfirmDialog = target => closest(target, '.tox-alert-dialog') || closest(target, '.tox-confirm-dialog');\n    const inlineAdditionalBehaviours = (editor, isStickyToolbar, isToolbarLocationTop) => {\n      if (isStickyToolbar && isToolbarLocationTop) {\n        return [];\n      } else {\n        return [Docking.config({\n            contextual: {\n              lazyContext: () => Optional.some(box$1(SugarElement.fromDom(editor.getContentAreaContainer()))),\n              fadeInClass: 'tox-dialog-dock-fadein',\n              fadeOutClass: 'tox-dialog-dock-fadeout',\n              transitionClass: 'tox-dialog-dock-transition'\n            },\n            modes: ['top']\n          })];\n      }\n    };\n    const setup = extras => {\n      const backstage = extras.backstage;\n      const editor = extras.editor;\n      const isStickyToolbar$1 = isStickyToolbar(editor);\n      const alertDialog = setup$2(backstage);\n      const confirmDialog = setup$1(backstage);\n      const open = (config, params, closeWindow) => {\n        if (params !== undefined && params.inline === 'toolbar') {\n          return openInlineDialog(config, backstage.shared.anchors.inlineDialog(), closeWindow, params.ariaAttrs);\n        } else if (params !== undefined && params.inline === 'cursor') {\n          return openInlineDialog(config, backstage.shared.anchors.cursor(), closeWindow, params.ariaAttrs);\n        } else {\n          return openModalDialog(config, closeWindow);\n        }\n      };\n      const openUrl = (config, closeWindow) => openModalUrlDialog(config, closeWindow);\n      const openModalUrlDialog = (config, closeWindow) => {\n        const factory = contents => {\n          const dialog = renderUrlDialog(contents, {\n            closeWindow: () => {\n              ModalDialog.hide(dialog.dialog);\n              closeWindow(dialog.instanceApi);\n            }\n          }, editor, backstage);\n          ModalDialog.show(dialog.dialog);\n          return dialog.instanceApi;\n        };\n        return DialogManager.openUrl(factory, config);\n      };\n      const openModalDialog = (config, closeWindow) => {\n        const factory = (contents, internalInitialData, dataValidator) => {\n          const initialData = internalInitialData;\n          const dialogInit = {\n            dataValidator,\n            initialData,\n            internalDialog: contents\n          };\n          const dialog = renderDialog(dialogInit, {\n            redial: DialogManager.redial,\n            closeWindow: () => {\n              ModalDialog.hide(dialog.dialog);\n              closeWindow(dialog.instanceApi);\n            }\n          }, backstage);\n          ModalDialog.show(dialog.dialog);\n          dialog.instanceApi.setData(initialData);\n          return dialog.instanceApi;\n        };\n        return DialogManager.open(factory, config);\n      };\n      const openInlineDialog = (config$1, anchor, closeWindow, ariaAttrs = false) => {\n        const factory = (contents, internalInitialData, dataValidator) => {\n          const initialData = validateData(internalInitialData, dataValidator);\n          const inlineDialog = value$2();\n          const isToolbarLocationTop = backstage.shared.header.isPositionedAtTop();\n          const dialogInit = {\n            dataValidator,\n            initialData,\n            internalDialog: contents\n          };\n          const refreshDocking = () => inlineDialog.on(dialog => {\n            InlineView.reposition(dialog);\n            Docking.refresh(dialog);\n          });\n          const dialogUi = renderInlineDialog(dialogInit, {\n            redial: DialogManager.redial,\n            closeWindow: () => {\n              inlineDialog.on(InlineView.hide);\n              editor.off('ResizeEditor', refreshDocking);\n              inlineDialog.clear();\n              closeWindow(dialogUi.instanceApi);\n            }\n          }, backstage, ariaAttrs);\n          const inlineDialogComp = build$1(InlineView.sketch({\n            lazySink: backstage.shared.getSink,\n            dom: {\n              tag: 'div',\n              classes: []\n            },\n            fireDismissalEventInstead: {},\n            ...isToolbarLocationTop ? {} : { fireRepositionEventInstead: {} },\n            inlineBehaviours: derive$1([\n              config('window-manager-inline-events', [run$1(dismissRequested(), (_comp, _se) => {\n                  emit(dialogUi.dialog, formCancelEvent);\n                })]),\n              ...inlineAdditionalBehaviours(editor, isStickyToolbar$1, isToolbarLocationTop)\n            ]),\n            isExtraPart: (_comp, target) => isAlertOrConfirmDialog(target)\n          }));\n          inlineDialog.set(inlineDialogComp);\n          InlineView.showWithin(inlineDialogComp, premade(dialogUi.dialog), { anchor }, Optional.some(body()));\n          if (!isStickyToolbar$1 || !isToolbarLocationTop) {\n            Docking.refresh(inlineDialogComp);\n            editor.on('ResizeEditor', refreshDocking);\n          }\n          dialogUi.instanceApi.setData(initialData);\n          Keying.focusIn(dialogUi.dialog);\n          return dialogUi.instanceApi;\n        };\n        return DialogManager.open(factory, config$1);\n      };\n      const confirm = (message, callback) => {\n        confirmDialog.open(message, callback);\n      };\n      const alert = (message, callback) => {\n        alertDialog.open(message, callback);\n      };\n      const close = instanceApi => {\n        instanceApi.close();\n      };\n      return {\n        open,\n        openUrl,\n        alert,\n        close,\n        confirm\n      };\n    };\n\n    const registerOptions = editor => {\n      register$e(editor);\n      register$d(editor);\n      register(editor);\n    };\n    var Theme = () => {\n      global$a.add('silver', editor => {\n        registerOptions(editor);\n        const {getUiMothership, backstage, renderUI} = setup$3(editor);\n        Autocompleter.register(editor, backstage.shared);\n        const windowMgr = setup({\n          editor,\n          backstage\n        });\n        return {\n          renderUI,\n          getWindowManagerImpl: constant$1(windowMgr),\n          getNotificationManagerImpl: () => NotificationManagerImpl(editor, { backstage }, getUiMothership())\n        };\n      });\n    };\n\n    Theme();\n\n})();\n"
  },
  {
    "path": "publishable/config/voyager.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | User config\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify voyager user configs\n    |\n    */\n\n    'user' => [\n        'add_default_role_on_register' => true,\n        'default_role'                 => 'user',\n        'default_avatar'               => 'users/default.png',\n        'redirect'                     => '/admin',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Controllers config\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify voyager controller settings\n    |\n    */\n\n    'controllers' => [\n        'namespace' => 'TCG\\\\Voyager\\\\Http\\\\Controllers',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Models config\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify default model namespace when creating BREAD.\n    | Must include trailing backslashes. If not defined the default application\n    | namespace will be used.\n    |\n    */\n\n    'models' => [\n       // 'namespace' => 'App\\\\Models\\\\',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Storage Config\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify attributes related to your application file system\n    |\n    */\n\n    'storage' => [\n        'disk' => 'public',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Media Manager\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify if media manager can show hidden files like(.gitignore)\n    |\n    */\n\n    'hidden_files' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Config\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify voyager database settings\n    |\n    */\n\n    'database' => [\n        'tables' => [\n            'hidden' => ['migrations', 'data_rows', 'data_types', 'menu_items', 'password_resets', 'permission_role', 'personal_access_tokens', 'settings'],\n        ],\n        'autoload_migrations' => true,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Multilingual configuration\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify if you want Voyager to ship with support for\n    | multilingual and what locales are enabled.\n    |\n    */\n\n    'multilingual' => [\n        /*\n         * Set whether or not the multilingual is supported by the BREAD input.\n         */\n        'enabled' => false,\n\n        /*\n         * Select default language\n         */\n        'default' => 'en',\n\n        /*\n         * Select languages that are supported.\n         */\n        'locales' => [\n            'en',\n            //'pt',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Dashboard config\n    |--------------------------------------------------------------------------\n    |\n    | Here you can modify some aspects of your dashboard\n    |\n    */\n\n    'dashboard' => [\n        // Add custom list items to navbar's dropdown\n        'navbar_items' => [\n            'voyager::generic.profile' => [\n                'route'      => 'voyager.profile',\n                'classes'    => 'class-full-of-rum',\n                'icon_class' => 'voyager-person',\n            ],\n            'voyager::generic.home' => [\n                'route'        => '/',\n                'icon_class'   => 'voyager-home',\n                'target_blank' => true,\n            ],\n            'voyager::generic.logout' => [\n                'route'      => 'voyager.logout',\n                'icon_class' => 'voyager-power',\n            ],\n        ],\n\n        'widgets' => [\n\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Automatic Procedures\n    |--------------------------------------------------------------------------\n    |\n    | When a change happens on Voyager, we can automate some routines.\n    |\n    */\n\n    'bread' => [\n        // When a BREAD is added, create the Menu item using the BREAD properties.\n        'add_menu_item' => true,\n\n        // which menu add item to\n        'default_menu' => 'admin',\n\n        // When a BREAD is added, create the related Permission.\n        'add_permission' => true,\n\n        // which role add premissions to\n        'default_role' => 'admin',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | UI Generic Config\n    |--------------------------------------------------------------------------\n    |\n    | Here you change some of the Voyager UI settings.\n    |\n    */\n\n    'primary_color' => '#22A7F0',\n\n    'show_dev_tips' => true, // Show development tip \"How To Use:\" in Menu and Settings\n\n    // Here you can specify additional assets you would like to be included in the master.blade\n    'additional_css' => [\n        //'css/custom.css',\n    ],\n\n    'additional_js' => [\n        //'js/custom.js',\n    ],\n\n    'googlemaps' => [\n        'key'    => env('GOOGLE_MAPS_KEY', ''),\n        'center' => [\n            'lat' => env('GOOGLE_MAPS_DEFAULT_CENTER_LAT', '32.715738'),\n            'lng' => env('GOOGLE_MAPS_DEFAULT_CENTER_LNG', '-117.161084'),\n        ],\n        'zoom' => env('GOOGLE_MAPS_DEFAULT_ZOOM', 11),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Model specific settings\n    |--------------------------------------------------------------------------\n    |\n    | Here you change some model specific settings\n    |\n    */\n\n    'settings' => [\n        // Enables Laravel cache method for\n        // storing cache values between requests\n        'cache' => false,\n    ],\n\n    // Activate compass when environment is NOT local\n    'compass_in_production' => false,\n\n    'media' => [\n        // The allowed mimetypes to be uploaded through the media-manager.\n        // 'allowed_mimetypes' => '*', //All types can be uploaded\n        'allowed_mimetypes' => [\n          'image/jpeg',\n          'image/png',\n          'image/gif',\n          'image/bmp',\n          'video/mp4',\n        ],\n        //Path for media-manager. Relative to the filesystem.\n        'path'                => '/',\n        'show_folders'        => true,\n        'allow_upload'        => true,\n        'allow_move'          => true,\n        'allow_delete'        => true,\n        'allow_create_folder' => true,\n        'allow_rename'        => true,\n        /*'watermark'           => [\n            'source'         => 'watermark.png',\n            'position'       => 'bottom-left',\n            'x'              => 0,\n            'y'              => 0,\n            'size'           => 15,\n       ],\n       'thumbnails'          => [\n           [\n                'type'  => 'fit',\n                'name'  => 'fit-500',\n                'width' => 500,\n                'height'=> 500\n           ],\n       ]*/\n    ],\n];\n"
  },
  {
    "path": "publishable/config/voyager_dummy.php",
    "content": "<?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | User config\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify voyager user configs\n    |\n    */\n\n    'user' => [\n        'add_default_role_on_register' => true,\n        'default_role'                 => 'user',\n        'default_avatar'               => 'users/default.png',\n        'redirect'                     => '/admin',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Controllers config\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify voyager controller settings\n    |\n    */\n\n    'controllers' => [\n        'namespace' => 'TCG\\\\Voyager\\\\Http\\\\Controllers',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Models config\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify default model namespace when creating BREAD.\n    | Must include trailing backslashes. If not defined the default application\n    | namespace will be used.\n    |\n    */\n\n    'models' => [\n        //'namespace' => 'App\\\\Models\\\\',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Storage Config\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify attributes related to your application file system\n    |\n    */\n\n    'storage' => [\n        'disk' => 'public',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Media Manager\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify if media manager can show hidden files like(.gitignore)\n    |\n    */\n\n    'hidden_files' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Config\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify voyager database settings\n    |\n    */\n\n    'database' => [\n        'tables' => [\n            'hidden' => ['migrations', 'data_rows', 'data_types', 'menu_items', 'password_resets', 'permission_role', 'personal_access_tokens', 'settings'],\n        ],\n        'autoload_migrations' => true,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Multilingual configuration\n    |--------------------------------------------------------------------------\n    |\n    | Here you can specify if you want Voyager to ship with support for\n    | multilingual and what locales are enabled.\n    |\n    */\n\n    'multilingual' => [\n        /*\n         * Set whether or not the multilingual is supported by the BREAD input.\n         */\n        'enabled' => false,\n\n        /*\n         * Select default language\n         */\n        'default' => 'en',\n\n        /*\n         * Select languages that are supported.\n         */\n        'locales' => [\n            'en',\n            //'pt',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Dashboard config\n    |--------------------------------------------------------------------------\n    |\n    | Here you can modify some aspects of your dashboard\n    |\n    */\n\n    'dashboard' => [\n        // Add custom list items to navbar's dropdown\n        'navbar_items' => [\n            'voyager::generic.profile' => [\n                'route'      => 'voyager.profile',\n                'classes'    => 'class-full-of-rum',\n                'icon_class' => 'voyager-person',\n            ],\n            'voyager::generic.home' => [\n                'route'        => '/',\n                'icon_class'   => 'voyager-home',\n                'target_blank' => true,\n            ],\n            'voyager::generic.logout' => [\n                'route'      => 'voyager.logout',\n                'icon_class' => 'voyager-power',\n            ],\n        ],\n\n        'widgets' => [\n            'TCG\\\\Voyager\\\\Widgets\\\\UserDimmer',\n            'TCG\\\\Voyager\\\\Widgets\\\\PostDimmer',\n            'TCG\\\\Voyager\\\\Widgets\\\\PageDimmer',\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Automatic Procedures\n    |--------------------------------------------------------------------------\n    |\n    | When a change happens on Voyager, we can automate some routines.\n    |\n    */\n\n    'bread' => [\n        // When a BREAD is added, create the Menu item using the BREAD properties.\n        'add_menu_item' => true,\n\n        // which menu add item to\n        'default_menu' => 'admin',\n\n        // When a BREAD is added, create the related Permission.\n        'add_permission' => true,\n\n        // which role add premissions to\n        'default_role' => 'admin',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | UI Generic Config\n    |--------------------------------------------------------------------------\n    |\n    | Here you change some of the Voyager UI settings.\n    |\n    */\n\n    'primary_color' => '#22A7F0',\n\n    'show_dev_tips' => true, // Show development tip \"How To Use:\" in Menu and Settings\n\n    // Here you can specify additional assets you would like to be included in the master.blade\n    'additional_css' => [\n        //'css/custom.css',\n    ],\n\n    'additional_js' => [\n        //'js/custom.js',\n    ],\n\n    'googlemaps' => [\n        'key'    => env('GOOGLE_MAPS_KEY', ''),\n        'center' => [\n            'lat' => env('GOOGLE_MAPS_DEFAULT_CENTER_LAT', '32.715738'),\n            'lng' => env('GOOGLE_MAPS_DEFAULT_CENTER_LNG', '-117.161084'),\n        ],\n        'zoom' => env('GOOGLE_MAPS_DEFAULT_ZOOM', 11),\n    ],\n\n    // Activate compass when environment is NOT local\n    'compass_in_production' => false,\n\n    'media' => [\n        // The allowed mimetypes to be uploaded through the media-manager.\n        // 'allowed_mimetypes' => '*', //All types can be uploaded\n        'allowed_mimetypes' => [\n          'image/jpeg',\n          'image/png',\n          'image/gif',\n          'image/bmp',\n          'video/mp4',\n        ],\n        //Path for media-manager. Relative to the filesystem.\n        'path'                => '/',\n        'show_folders'        => true,\n        'allow_upload'        => true,\n        'allow_move'          => true,\n        'allow_delete'        => true,\n        'allow_create_folder' => true,\n        'allow_rename'        => true,\n        /*'watermark'           => [\n            'source'         => 'watermark.png',\n            'position'       => 'bottom-left',\n            'x'              => 0,\n            'y'              => 0,\n            'size'           => 15,\n       ],\n       'thumbnails'          => [\n           [\n                'type'  => 'fit',\n                'name'  => 'fit-500',\n                'width' => 500,\n                'height'=> 500\n           ],\n       ]*/\n    ],\n];\n"
  },
  {
    "path": "publishable/database/dummy_seeders/CategoriesTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse TCG\\Voyager\\Models\\Category;\nuse TCG\\Voyager\\Models\\DataRow;\nuse TCG\\Voyager\\Models\\DataType;\nuse TCG\\Voyager\\Models\\Menu;\nuse TCG\\Voyager\\Models\\MenuItem;\nuse TCG\\Voyager\\Models\\Permission;\n\nclass CategoriesTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        //Data Type\n        $dataType = $this->dataType('name', 'categories');\n        if (!$dataType->exists) {\n            $dataType->fill([\n                'slug'                  => 'categories',\n                'display_name_singular' => __('voyager::seeders.data_types.category.singular'),\n                'display_name_plural'   => __('voyager::seeders.data_types.category.plural'),\n                'icon'                  => 'voyager-categories',\n                'model_name'            => 'TCG\\\\Voyager\\\\Models\\\\Category',\n                'controller'            => '',\n                'generate_permissions'  => 1,\n                'description'           => '',\n            ])->save();\n        }\n        //Data Rows\n        $categoryDataType = DataType::where('slug', 'categories')->firstOrFail();\n        $dataRow = $this->dataRow($categoryDataType, 'id');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'number',\n                'display_name' => __('voyager::seeders.data_rows.id'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 1,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($categoryDataType, 'parent_id');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'select_dropdown',\n                'display_name' => __('voyager::seeders.data_rows.parent'),\n                'required'     => 0,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'details'      => [\n                    'default' => '',\n                    'null'    => '',\n                    'options' => [\n                        '' => '-- None --',\n                    ],\n                    'relationship' => [\n                        'key'   => 'id',\n                        'label' => 'name',\n                    ],\n                ],\n                'order' => 2,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($categoryDataType, 'order');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.order'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'details'      => [\n                    'default' => 1,\n                ],\n                'order' => 3,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($categoryDataType, 'name');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.name'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 4,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($categoryDataType, 'slug');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.slug'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'details'      => [\n                    'slugify' => [\n                        'origin' => 'name',\n                    ],\n                ],\n                'order' => 5,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($categoryDataType, 'created_at');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'timestamp',\n                'display_name' => __('voyager::seeders.data_rows.created_at'),\n                'required'     => 0,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 6,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($categoryDataType, 'updated_at');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'timestamp',\n                'display_name' => __('voyager::seeders.data_rows.updated_at'),\n                'required'     => 0,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 7,\n            ])->save();\n        }\n\n        //Menu Item\n        $menu = Menu::where('name', 'admin')->firstOrFail();\n        $menuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.categories'),\n            'url'     => '',\n            'route'   => 'voyager.categories.index',\n        ]);\n        if (!$menuItem->exists) {\n            $menuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-categories',\n                'color'      => null,\n                'parent_id'  => null,\n                'order'      => 8,\n            ])->save();\n        }\n\n        //Permissions\n        Permission::generateFor('categories');\n\n        //Content\n        $category = Category::firstOrNew([\n            'slug' => 'category-1',\n        ]);\n        if (!$category->exists) {\n            $category->fill([\n                'name' => 'Category 1',\n            ])->save();\n        }\n\n        $category = Category::firstOrNew([\n            'slug' => 'category-2',\n        ]);\n        if (!$category->exists) {\n            $category->fill([\n                'name' => 'Category 2',\n            ])->save();\n        }\n    }\n\n    /**\n     * [dataRow description].\n     *\n     * @param [type] $type  [description]\n     * @param [type] $field [description]\n     *\n     * @return [type] [description]\n     */\n    protected function dataRow($type, $field)\n    {\n        return DataRow::firstOrNew([\n            'data_type_id' => $type->id,\n            'field'        => $field,\n        ]);\n    }\n\n    /**\n     * [dataType description].\n     *\n     * @param [type] $field [description]\n     * @param [type] $for   [description]\n     *\n     * @return [type] [description]\n     */\n    protected function dataType($field, $for)\n    {\n        return DataType::firstOrNew([$field => $for]);\n    }\n}\n"
  },
  {
    "path": "publishable/database/dummy_seeders/PagesTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse TCG\\Voyager\\Models\\DataRow;\nuse TCG\\Voyager\\Models\\DataType;\nuse TCG\\Voyager\\Models\\Menu;\nuse TCG\\Voyager\\Models\\MenuItem;\nuse TCG\\Voyager\\Models\\Page;\nuse TCG\\Voyager\\Models\\Permission;\n\nclass PagesTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        //Data Type\n        $dataType = $this->dataType('slug', 'pages');\n        if (!$dataType->exists) {\n            $dataType->fill([\n                'name'                  => 'pages',\n                'display_name_singular' => __('voyager::seeders.data_types.page.singular'),\n                'display_name_plural'   => __('voyager::seeders.data_types.page.plural'),\n                'icon'                  => 'voyager-file-text',\n                'model_name'            => 'TCG\\\\Voyager\\\\Models\\\\Page',\n                'controller'            => '',\n                'generate_permissions'  => 1,\n                'description'           => '',\n            ])->save();\n        }\n\n        //Data Rows\n        $pageDataType = DataType::where('slug', 'pages')->firstOrFail();\n        $dataRow = $this->dataRow($pageDataType, 'id');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'number',\n                'display_name' => __('voyager::seeders.data_rows.id'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 1,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($pageDataType, 'author_id');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.author'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 2,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($pageDataType, 'title');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.title'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 3,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($pageDataType, 'excerpt');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text_area',\n                'display_name' => __('voyager::seeders.data_rows.excerpt'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 4,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($pageDataType, 'body');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'rich_text_box',\n                'display_name' => __('voyager::seeders.data_rows.body'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 5,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($pageDataType, 'slug');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.slug'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'details'      => [\n                    'slugify' => [\n                        'origin' => 'title',\n                    ],\n                    'validation' => [\n                        'rule'  => 'unique:pages,slug',\n                    ],\n                ],\n                'order' => 6,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($pageDataType, 'meta_description');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.meta_description'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 7,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($pageDataType, 'meta_keywords');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.meta_keywords'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 8,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($pageDataType, 'status');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'select_dropdown',\n                'display_name' => __('voyager::seeders.data_rows.status'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'details'      => [\n                    'default' => 'INACTIVE',\n                    'options' => [\n                        'INACTIVE' => 'INACTIVE',\n                        'ACTIVE'   => 'ACTIVE',\n                    ],\n                ],\n                'order' => 9,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($pageDataType, 'created_at');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'timestamp',\n                'display_name' => __('voyager::seeders.data_rows.created_at'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 10,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($pageDataType, 'updated_at');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'timestamp',\n                'display_name' => __('voyager::seeders.data_rows.updated_at'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 11,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($pageDataType, 'image');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'image',\n                'display_name' => __('voyager::seeders.data_rows.page_image'),\n                'required'     => 0,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 12,\n            ])->save();\n        }\n\n        //Menu Item\n        $menu = Menu::where('name', 'admin')->firstOrFail();\n        $menuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.pages'),\n            'url'     => '',\n            'route'   => 'voyager.pages.index',\n        ]);\n        if (!$menuItem->exists) {\n            $menuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-file-text',\n                'color'      => null,\n                'parent_id'  => null,\n                'order'      => 7,\n            ])->save();\n        }\n\n        //Permissions\n        Permission::generateFor('pages');\n        //Content\n        $page = Page::firstOrNew([\n            'slug' => 'hello-world',\n        ]);\n        if (!$page->exists) {\n            $page->fill([\n                'author_id' => 0,\n                'title'     => 'Hello World',\n                'excerpt'   => 'Hang the jib grog grog blossom grapple dance the hempen jig gangway pressgang bilge rat to go on account lugger. Nelsons folly gabion line draught scallywag fire ship gaff fluke fathom case shot. Sea Legs bilge rat sloop matey gabion long clothes run a shot across the bow Gold Road cog league.',\n                'body'      => '<p>Hello World. Scallywag grog swab Cat o\\'nine tails scuttle rigging hardtack cable nipper Yellow Jack. Handsomely spirits knave lad killick landlubber or just lubber deadlights chantey pinnace crack Jennys tea cup. Provost long clothes black spot Yellow Jack bilged on her anchor league lateen sail case shot lee tackle.</p>\n<p>Ballast spirits fluke topmast me quarterdeck schooner landlubber or just lubber gabion belaying pin. Pinnace stern galleon starboard warp carouser to go on account dance the hempen jig jolly boat measured fer yer chains. Man-of-war fire in the hole nipperkin handsomely doubloon barkadeer Brethren of the Coast gibbet driver squiffy.</p>',\n                'image'            => 'pages/page1.jpg',\n                'meta_description' => 'Yar Meta Description',\n                'meta_keywords'    => 'Keyword1, Keyword2',\n                'status'           => 'ACTIVE',\n            ])->save();\n        }\n    }\n\n    /**\n     * [dataRow description].\n     *\n     * @param [type] $type  [description]\n     * @param [type] $field [description]\n     *\n     * @return [type] [description]\n     */\n    protected function dataRow($type, $field)\n    {\n        return DataRow::firstOrNew([\n            'data_type_id' => $type->id,\n            'field'        => $field,\n        ]);\n    }\n\n    /**\n     * [dataType description].\n     *\n     * @param [type] $field [description]\n     * @param [type] $for   [description]\n     *\n     * @return [type] [description]\n     */\n    protected function dataType($field, $for)\n    {\n        return DataType::firstOrNew([$field => $for]);\n    }\n}\n"
  },
  {
    "path": "publishable/database/dummy_seeders/PostsTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse TCG\\Voyager\\Models\\DataRow;\nuse TCG\\Voyager\\Models\\DataType;\nuse TCG\\Voyager\\Models\\Menu;\nuse TCG\\Voyager\\Models\\MenuItem;\nuse TCG\\Voyager\\Models\\Permission;\nuse TCG\\Voyager\\Models\\Post;\n\nclass PostsTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     */\n    public function run()\n    {\n        //Data Type\n        $dataType = $this->dataType('slug', 'posts');\n        if (!$dataType->exists) {\n            $dataType->fill([\n                'name'                  => 'posts',\n                'display_name_singular' => __('voyager::seeders.data_types.post.singular'),\n                'display_name_plural'   => __('voyager::seeders.data_types.post.plural'),\n                'icon'                  => 'voyager-news',\n                'model_name'            => 'TCG\\\\Voyager\\\\Models\\\\Post',\n                'policy_name'           => 'TCG\\\\Voyager\\\\Policies\\\\PostPolicy',\n                'controller'            => '',\n                'generate_permissions'  => 1,\n                'description'           => '',\n            ])->save();\n        }\n\n        //Data Rows\n        $postDataType = DataType::where('slug', 'posts')->firstOrFail();\n        $dataRow = $this->dataRow($postDataType, 'id');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'number',\n                'display_name' => __('voyager::seeders.data_rows.id'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 1,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'author_id');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.author'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 0,\n                'delete'       => 1,\n                'order'        => 2,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'category_id');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.category'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 0,\n                'order'        => 3,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'title');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.title'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 4,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'excerpt');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text_area',\n                'display_name' => __('voyager::seeders.data_rows.excerpt'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 5,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'body');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'rich_text_box',\n                'display_name' => __('voyager::seeders.data_rows.body'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 6,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'image');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'image',\n                'display_name' => __('voyager::seeders.data_rows.post_image'),\n                'required'     => 0,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'details'      => [\n                    'resize' => [\n                        'width'  => '1000',\n                        'height' => 'null',\n                    ],\n                    'quality'    => '70%',\n                    'upsize'     => true,\n                    'thumbnails' => [\n                        [\n                            'name'  => 'medium',\n                            'scale' => '50%',\n                        ],\n                        [\n                            'name'  => 'small',\n                            'scale' => '25%',\n                        ],\n                        [\n                            'name' => 'cropped',\n                            'crop' => [\n                                'width'  => '300',\n                                'height' => '250',\n                            ],\n                        ],\n                    ],\n                ],\n                'order' => 7,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'slug');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.slug'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'details'      => [\n                    'slugify' => [\n                        'origin'      => 'title',\n                        'forceUpdate' => true,\n                    ],\n                    'validation' => [\n                        'rule'  => 'unique:posts,slug',\n                    ],\n                ],\n                'order' => 8,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'meta_description');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text_area',\n                'display_name' => __('voyager::seeders.data_rows.meta_description'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 9,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'meta_keywords');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text_area',\n                'display_name' => __('voyager::seeders.data_rows.meta_keywords'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 10,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'status');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'select_dropdown',\n                'display_name' => __('voyager::seeders.data_rows.status'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'details'      => [\n                    'default' => 'DRAFT',\n                    'options' => [\n                        'PUBLISHED' => 'published',\n                        'DRAFT'     => 'draft',\n                        'PENDING'   => 'pending',\n                    ],\n                ],\n                'order' => 11,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'created_at');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'timestamp',\n                'display_name' => __('voyager::seeders.data_rows.created_at'),\n                'required'     => 0,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 12,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'updated_at');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'timestamp',\n                'display_name' => __('voyager::seeders.data_rows.updated_at'),\n                'required'     => 0,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 13,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($postDataType, 'seo_title');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.seo_title'),\n                'required'     => 0,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 14,\n            ])->save();\n        }\n        $dataRow = $this->dataRow($postDataType, 'featured');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'checkbox',\n                'display_name' => __('voyager::seeders.data_rows.featured'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 15,\n            ])->save();\n        }\n\n        //Menu Item\n        $menu = Menu::where('name', 'admin')->firstOrFail();\n        $menuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.posts'),\n            'url'     => '',\n            'route'   => 'voyager.posts.index',\n        ]);\n        if (!$menuItem->exists) {\n            $menuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-news',\n                'color'      => null,\n                'parent_id'  => null,\n                'order'      => 6,\n            ])->save();\n        }\n\n        //Permissions\n        Permission::generateFor('posts');\n\n        //Content\n        $post = $this->findPost('lorem-ipsum-post');\n        if (!$post->exists) {\n            $post->fill([\n                'title'            => 'Lorem Ipsum Post',\n                'author_id'        => 0,\n                'seo_title'        => null,\n                'excerpt'          => 'This is the excerpt for the Lorem Ipsum Post',\n                'body'             => '<p>This is the body of the lorem ipsum post</p>',\n                'image'            => 'posts/post1.jpg',\n                'slug'             => 'lorem-ipsum-post',\n                'meta_description' => 'This is the meta description',\n                'meta_keywords'    => 'keyword1, keyword2, keyword3',\n                'status'           => 'PUBLISHED',\n                'featured'         => 0,\n            ])->save();\n        }\n\n        $post = $this->findPost('my-sample-post');\n        if (!$post->exists) {\n            $post->fill([\n                'title'     => 'My Sample Post',\n                'author_id' => 0,\n                'seo_title' => null,\n                'excerpt'   => 'This is the excerpt for the sample Post',\n                'body'      => '<p>This is the body for the sample post, which includes the body.</p>\n                <h2>We can use all kinds of format!</h2>\n                <p>And include a bunch of other stuff.</p>',\n                'image'            => 'posts/post2.jpg',\n                'slug'             => 'my-sample-post',\n                'meta_description' => 'Meta Description for sample post',\n                'meta_keywords'    => 'keyword1, keyword2, keyword3',\n                'status'           => 'PUBLISHED',\n                'featured'         => 0,\n            ])->save();\n        }\n\n        $post = $this->findPost('latest-post');\n        if (!$post->exists) {\n            $post->fill([\n                'title'            => 'Latest Post',\n                'author_id'        => 0,\n                'seo_title'        => null,\n                'excerpt'          => 'This is the excerpt for the latest post',\n                'body'             => '<p>This is the body for the latest post</p>',\n                'image'            => 'posts/post3.jpg',\n                'slug'             => 'latest-post',\n                'meta_description' => 'This is the meta description',\n                'meta_keywords'    => 'keyword1, keyword2, keyword3',\n                'status'           => 'PUBLISHED',\n                'featured'         => 0,\n            ])->save();\n        }\n\n        $post = $this->findPost('yarr-post');\n        if (!$post->exists) {\n            $post->fill([\n                'title'     => 'Yarr Post',\n                'author_id' => 0,\n                'seo_title' => null,\n                'excerpt'   => 'Reef sails nipperkin bring a spring upon her cable coffer jury mast spike marooned Pieces of Eight poop deck pillage. Clipper driver coxswain galleon hempen halter come about pressgang gangplank boatswain swing the lead. Nipperkin yard skysail swab lanyard Blimey bilge water ho quarter Buccaneer.',\n                'body'      => '<p>Swab deadlights Buccaneer fire ship square-rigged dance the hempen jig weigh anchor cackle fruit grog furl. Crack Jennys tea cup chase guns pressgang hearties spirits hogshead Gold Road six pounders fathom measured fer yer chains. Main sheet provost come about trysail barkadeer crimp scuttle mizzenmast brig plunder.</p>\n<p>Mizzen league keelhaul galleon tender cog chase Barbary Coast doubloon crack Jennys tea cup. Blow the man down lugsail fire ship pinnace cackle fruit line warp Admiral of the Black strike colors doubloon. Tackle Jack Ketch come about crimp rum draft scuppers run a shot across the bow haul wind maroon.</p>\n<p>Interloper heave down list driver pressgang holystone scuppers tackle scallywag bilged on her anchor. Jack Tar interloper draught grapple mizzenmast hulk knave cable transom hogshead. Gaff pillage to go on account grog aft chase guns piracy yardarm knave clap of thunder.</p>',\n                'image'            => 'posts/post4.jpg',\n                'slug'             => 'yarr-post',\n                'meta_description' => 'this be a meta descript',\n                'meta_keywords'    => 'keyword1, keyword2, keyword3',\n                'status'           => 'PUBLISHED',\n                'featured'         => 0,\n            ])->save();\n        }\n    }\n\n    /**\n     * [post description].\n     *\n     * @param [type] $slug [description]\n     *\n     * @return [type] [description]\n     */\n    protected function findPost($slug)\n    {\n        return Post::firstOrNew(['slug' => $slug]);\n    }\n\n    /**\n     * [dataRow description].\n     *\n     * @param [type] $type  [description]\n     * @param [type] $field [description]\n     *\n     * @return [type] [description]\n     */\n    protected function dataRow($type, $field)\n    {\n        return DataRow::firstOrNew([\n            'data_type_id' => $type->id,\n            'field'        => $field,\n        ]);\n    }\n\n    /**\n     * [dataType description].\n     *\n     * @param [type] $field [description]\n     * @param [type] $for   [description]\n     *\n     * @return [type] [description]\n     */\n    protected function dataType($field, $for)\n    {\n        return DataType::firstOrNew([$field => $for]);\n    }\n}\n"
  },
  {
    "path": "publishable/database/dummy_seeders/UsersTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Illuminate\\Support\\Str;\nuse TCG\\Voyager\\Models\\Role;\nuse TCG\\Voyager\\Models\\User;\n\nclass UsersTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        if (User::count() == 0) {\n            $role = Role::where('name', 'admin')->firstOrFail();\n\n            User::create([\n                'name'           => 'Admin',\n                'email'          => 'admin@admin.com',\n                'password'       => bcrypt('password'),\n                'remember_token' => Str::random(60),\n                'role_id'        => $role->id,\n            ]);\n        }\n    }\n}\n"
  },
  {
    "path": "publishable/database/migrations/2016_01_01_000000_create_pages_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse TCG\\Voyager\\Models\\Page;\n\nclass CreatePagesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        // Create table for storing roles\n        Schema::create('pages', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('author_id');\n            $table->string('title');\n            $table->text('excerpt')->nullable();\n            $table->text('body')->nullable();\n            $table->string('image')->nullable();\n            $table->string('slug')->unique();\n            $table->text('meta_description')->nullable();\n            $table->text('meta_keywords')->nullable();\n            $table->enum('status', Page::$statuses)->default(Page::STATUS_INACTIVE);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('pages');\n    }\n}\n"
  },
  {
    "path": "publishable/database/migrations/2016_01_01_000000_create_posts_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreatePostsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        // Create table for storing roles\n        Schema::create('posts', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('author_id');\n            $table->integer('category_id')->nullable();\n            $table->string('title');\n            $table->string('seo_title')->nullable();\n            $table->text('excerpt');\n            $table->text('body');\n            $table->string('image')->nullable();\n            $table->string('slug')->unique();\n            $table->text('meta_description');\n            $table->text('meta_keywords');\n            $table->enum('status', ['PUBLISHED', 'DRAFT', 'PENDING'])->default('DRAFT');\n            $table->boolean('featured')->default(0);\n            $table->timestamps();\n\n            //$table->foreign('author_id')->references('id')->on('users');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('posts');\n    }\n}\n"
  },
  {
    "path": "publishable/database/migrations/2016_02_15_204651_create_categories_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass CreateCategoriesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        // Create table for storing categories\n        Schema::create('categories', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('parent_id')->unsigned()->nullable()->default(null);\n            $table->foreign('parent_id')->references('id')->on('categories')->onUpdate('cascade')->onDelete('set null');\n            $table->integer('order')->default(1);\n            $table->string('name');\n            $table->string('slug')->unique();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('categories');\n    }\n}\n"
  },
  {
    "path": "publishable/database/migrations/2017_04_11_000000_alter_post_nullable_fields_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AlterPostNullableFieldsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        $platform = \\DB::getDoctrineSchemaManager()->getDatabasePlatform();\n        $platform->registerDoctrineTypeMapping('enum', 'string');\n\n        Schema::table('posts', function (Blueprint $table) {\n            $table->text('excerpt')->nullable()->change();\n            $table->text('meta_description')->nullable()->change();\n            $table->text('meta_keywords')->nullable()->change();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('posts', function (Blueprint $table) {\n            $table->text('excerpt')->change();\n            $table->text('meta_description')->change();\n            $table->text('meta_keywords')->change();\n        });\n    }\n}\n"
  },
  {
    "path": "publishable/database/seeders/DataRowsTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse TCG\\Voyager\\Models\\DataRow;\nuse TCG\\Voyager\\Models\\DataType;\n\nclass DataRowsTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     */\n    public function run()\n    {\n        $userDataType = DataType::where('slug', 'users')->firstOrFail();\n        $menuDataType = DataType::where('slug', 'menus')->firstOrFail();\n        $roleDataType = DataType::where('slug', 'roles')->firstOrFail();\n\n        $dataRow = $this->dataRow($userDataType, 'id');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'number',\n                'display_name' => __('voyager::seeders.data_rows.id'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 1,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($userDataType, 'name');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.name'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 2,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($userDataType, 'email');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.email'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 3,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($userDataType, 'password');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'password',\n                'display_name' => __('voyager::seeders.data_rows.password'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 0,\n                'order'        => 4,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($userDataType, 'remember_token');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.remember_token'),\n                'required'     => 0,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 5,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($userDataType, 'created_at');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'timestamp',\n                'display_name' => __('voyager::seeders.data_rows.created_at'),\n                'required'     => 0,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 6,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($userDataType, 'updated_at');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'timestamp',\n                'display_name' => __('voyager::seeders.data_rows.updated_at'),\n                'required'     => 0,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 7,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($userDataType, 'avatar');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'image',\n                'display_name' => __('voyager::seeders.data_rows.avatar'),\n                'required'     => 0,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 8,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($userDataType, 'user_belongsto_role_relationship');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'relationship',\n                'display_name' => __('voyager::seeders.data_rows.role'),\n                'required'     => 0,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 0,\n                'details'      => [\n                    'model'       => 'TCG\\\\Voyager\\\\Models\\\\Role',\n                    'table'       => 'roles',\n                    'type'        => 'belongsTo',\n                    'column'      => 'role_id',\n                    'key'         => 'id',\n                    'label'       => 'display_name',\n                    'pivot_table' => 'roles',\n                    'pivot'       => 0,\n                ],\n                'order'        => 10,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($userDataType, 'user_belongstomany_role_relationship');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'relationship',\n                'display_name' => __('voyager::seeders.data_rows.roles'),\n                'required'     => 0,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 0,\n                'details'      => [\n                    'model'       => 'TCG\\\\Voyager\\\\Models\\\\Role',\n                    'table'       => 'roles',\n                    'type'        => 'belongsToMany',\n                    'column'      => 'id',\n                    'key'         => 'id',\n                    'label'       => 'display_name',\n                    'pivot_table' => 'user_roles',\n                    'pivot'       => '1',\n                    'taggable'    => '0',\n                ],\n                'order'        => 11,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($userDataType, 'settings');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'hidden',\n                'display_name' => 'Settings',\n                'required'     => 0,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 12,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($menuDataType, 'id');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'number',\n                'display_name' => __('voyager::seeders.data_rows.id'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 1,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($menuDataType, 'name');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.name'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 2,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($menuDataType, 'created_at');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'timestamp',\n                'display_name' => __('voyager::seeders.data_rows.created_at'),\n                'required'     => 0,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 3,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($menuDataType, 'updated_at');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'timestamp',\n                'display_name' => __('voyager::seeders.data_rows.updated_at'),\n                'required'     => 0,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 4,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($roleDataType, 'id');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'number',\n                'display_name' => __('voyager::seeders.data_rows.id'),\n                'required'     => 1,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 1,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($roleDataType, 'name');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.name'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 2,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($roleDataType, 'created_at');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'timestamp',\n                'display_name' => __('voyager::seeders.data_rows.created_at'),\n                'required'     => 0,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 3,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($roleDataType, 'updated_at');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'timestamp',\n                'display_name' => __('voyager::seeders.data_rows.updated_at'),\n                'required'     => 0,\n                'browse'       => 0,\n                'read'         => 0,\n                'edit'         => 0,\n                'add'          => 0,\n                'delete'       => 0,\n                'order'        => 4,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($roleDataType, 'display_name');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.display_name'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 5,\n            ])->save();\n        }\n\n        $dataRow = $this->dataRow($userDataType, 'role_id');\n        if (!$dataRow->exists) {\n            $dataRow->fill([\n                'type'         => 'text',\n                'display_name' => __('voyager::seeders.data_rows.role'),\n                'required'     => 1,\n                'browse'       => 1,\n                'read'         => 1,\n                'edit'         => 1,\n                'add'          => 1,\n                'delete'       => 1,\n                'order'        => 9,\n            ])->save();\n        }\n    }\n\n    /**\n     * [dataRow description].\n     *\n     * @param [type] $type  [description]\n     * @param [type] $field [description]\n     *\n     * @return [type] [description]\n     */\n    protected function dataRow($type, $field)\n    {\n        return DataRow::firstOrNew([\n            'data_type_id' => $type->id,\n            'field'        => $field,\n        ]);\n    }\n}\n"
  },
  {
    "path": "publishable/database/seeders/DataTypesTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse TCG\\Voyager\\Models\\DataType;\n\nclass DataTypesTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     */\n    public function run()\n    {\n        $dataType = $this->dataType('slug', 'users');\n        if (!$dataType->exists) {\n            $dataType->fill([\n                'name'                  => 'users',\n                'display_name_singular' => __('voyager::seeders.data_types.user.singular'),\n                'display_name_plural'   => __('voyager::seeders.data_types.user.plural'),\n                'icon'                  => 'voyager-person',\n                'model_name'            => 'TCG\\\\Voyager\\\\Models\\\\User',\n                'policy_name'           => 'TCG\\\\Voyager\\\\Policies\\\\UserPolicy',\n                'controller'            => 'TCG\\\\Voyager\\\\Http\\\\Controllers\\\\VoyagerUserController',\n                'generate_permissions'  => 1,\n                'description'           => '',\n            ])->save();\n        }\n\n        $dataType = $this->dataType('slug', 'menus');\n        if (!$dataType->exists) {\n            $dataType->fill([\n                'name'                  => 'menus',\n                'display_name_singular' => __('voyager::seeders.data_types.menu.singular'),\n                'display_name_plural'   => __('voyager::seeders.data_types.menu.plural'),\n                'icon'                  => 'voyager-list',\n                'model_name'            => 'TCG\\\\Voyager\\\\Models\\\\Menu',\n                'controller'            => '',\n                'generate_permissions'  => 1,\n                'description'           => '',\n            ])->save();\n        }\n\n        $dataType = $this->dataType('slug', 'roles');\n        if (!$dataType->exists) {\n            $dataType->fill([\n                'name'                  => 'roles',\n                'display_name_singular' => __('voyager::seeders.data_types.role.singular'),\n                'display_name_plural'   => __('voyager::seeders.data_types.role.plural'),\n                'icon'                  => 'voyager-lock',\n                'model_name'            => 'TCG\\\\Voyager\\\\Models\\\\Role',\n                'controller'            => 'TCG\\\\Voyager\\\\Http\\\\Controllers\\\\VoyagerRoleController',\n                'generate_permissions'  => 1,\n                'description'           => '',\n            ])->save();\n        }\n    }\n\n    /**\n     * [dataType description].\n     *\n     * @param [type] $field [description]\n     * @param [type] $for   [description]\n     *\n     * @return [type] [description]\n     */\n    protected function dataType($field, $for)\n    {\n        return DataType::firstOrNew([$field => $for]);\n    }\n}\n"
  },
  {
    "path": "publishable/database/seeders/MenuItemsTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse TCG\\Voyager\\Models\\Menu;\nuse TCG\\Voyager\\Models\\MenuItem;\n\nclass MenuItemsTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $menu = Menu::where('name', 'admin')->firstOrFail();\n\n        $menuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.dashboard'),\n            'url'     => '',\n            'route'   => 'voyager.dashboard',\n        ]);\n        if (!$menuItem->exists) {\n            $menuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-boat',\n                'color'      => null,\n                'parent_id'  => null,\n                'order'      => 1,\n            ])->save();\n        }\n\n        $menuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.media'),\n            'url'     => '',\n            'route'   => 'voyager.media.index',\n        ]);\n        if (!$menuItem->exists) {\n            $menuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-images',\n                'color'      => null,\n                'parent_id'  => null,\n                'order'      => 5,\n            ])->save();\n        }\n\n        $menuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.users'),\n            'url'     => '',\n            'route'   => 'voyager.users.index',\n        ]);\n        if (!$menuItem->exists) {\n            $menuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-person',\n                'color'      => null,\n                'parent_id'  => null,\n                'order'      => 3,\n            ])->save();\n        }\n\n        $menuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.roles'),\n            'url'     => '',\n            'route'   => 'voyager.roles.index',\n        ]);\n        if (!$menuItem->exists) {\n            $menuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-lock',\n                'color'      => null,\n                'parent_id'  => null,\n                'order'      => 2,\n            ])->save();\n        }\n\n        $toolsMenuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.tools'),\n            'url'     => '',\n        ]);\n        if (!$toolsMenuItem->exists) {\n            $toolsMenuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-tools',\n                'color'      => null,\n                'parent_id'  => null,\n                'order'      => 9,\n            ])->save();\n        }\n\n        $menuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.menu_builder'),\n            'url'     => '',\n            'route'   => 'voyager.menus.index',\n        ]);\n        if (!$menuItem->exists) {\n            $menuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-list',\n                'color'      => null,\n                'parent_id'  => $toolsMenuItem->id,\n                'order'      => 10,\n            ])->save();\n        }\n\n        $menuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.database'),\n            'url'     => '',\n            'route'   => 'voyager.database.index',\n        ]);\n        if (!$menuItem->exists) {\n            $menuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-data',\n                'color'      => null,\n                'parent_id'  => $toolsMenuItem->id,\n                'order'      => 11,\n            ])->save();\n        }\n\n        $menuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.compass'),\n            'url'     => '',\n            'route'   => 'voyager.compass.index',\n        ]);\n        if (!$menuItem->exists) {\n            $menuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-compass',\n                'color'      => null,\n                'parent_id'  => $toolsMenuItem->id,\n                'order'      => 12,\n            ])->save();\n        }\n\n        $menuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.bread'),\n            'url'     => '',\n            'route'   => 'voyager.bread.index',\n        ]);\n        if (!$menuItem->exists) {\n            $menuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-bread',\n                'color'      => null,\n                'parent_id'  => $toolsMenuItem->id,\n                'order'      => 13,\n            ])->save();\n        }\n\n        $menuItem = MenuItem::firstOrNew([\n            'menu_id' => $menu->id,\n            'title'   => __('voyager::seeders.menu_items.settings'),\n            'url'     => '',\n            'route'   => 'voyager.settings.index',\n        ]);\n        if (!$menuItem->exists) {\n            $menuItem->fill([\n                'target'     => '_self',\n                'icon_class' => 'voyager-settings',\n                'color'      => null,\n                'parent_id'  => null,\n                'order'      => 14,\n            ])->save();\n        }\n    }\n}\n"
  },
  {
    "path": "publishable/database/seeders/MenusTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse TCG\\Voyager\\Models\\Menu;\n\nclass MenusTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        Menu::firstOrCreate([\n            'name' => 'admin',\n        ]);\n    }\n}\n"
  },
  {
    "path": "publishable/database/seeders/PermissionRoleTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse TCG\\Voyager\\Models\\Permission;\nuse TCG\\Voyager\\Models\\Role;\n\nclass PermissionRoleTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $role = Role::where('name', 'admin')->firstOrFail();\n\n        $permissions = Permission::all();\n\n        $role->permissions()->sync(\n            $permissions->pluck('id')->all()\n        );\n    }\n}\n"
  },
  {
    "path": "publishable/database/seeders/PermissionsTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse TCG\\Voyager\\Models\\Permission;\n\nclass PermissionsTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     */\n    public function run()\n    {\n        $keys = [\n            'browse_admin',\n            'browse_bread',\n            'browse_database',\n            'browse_media',\n            'browse_compass',\n        ];\n\n        foreach ($keys as $key) {\n            Permission::firstOrCreate([\n                'key'        => $key,\n                'table_name' => null,\n            ]);\n        }\n\n        Permission::generateFor('menus');\n\n        Permission::generateFor('roles');\n\n        Permission::generateFor('users');\n\n        Permission::generateFor('settings');\n    }\n}\n"
  },
  {
    "path": "publishable/database/seeders/RolesTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse TCG\\Voyager\\Models\\Role;\n\nclass RolesTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     */\n    public function run()\n    {\n        $role = Role::firstOrNew(['name' => 'admin']);\n        if (!$role->exists) {\n            $role->fill([\n                'display_name' => __('voyager::seeders.roles.admin'),\n            ])->save();\n        }\n\n        $role = Role::firstOrNew(['name' => 'user']);\n        if (!$role->exists) {\n            $role->fill([\n                'display_name' => __('voyager::seeders.roles.user'),\n            ])->save();\n        }\n    }\n}\n"
  },
  {
    "path": "publishable/database/seeders/SettingsTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse TCG\\Voyager\\Models\\Setting;\n\nclass SettingsTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     */\n    public function run()\n    {\n        $setting = $this->findSetting('site.title');\n        if (!$setting->exists) {\n            $setting->fill([\n                'display_name' => __('voyager::seeders.settings.site.title'),\n                'value'        => __('voyager::seeders.settings.site.title'),\n                'details'      => '',\n                'type'         => 'text',\n                'order'        => 1,\n                'group'        => 'Site',\n            ])->save();\n        }\n\n        $setting = $this->findSetting('site.description');\n        if (!$setting->exists) {\n            $setting->fill([\n                'display_name' => __('voyager::seeders.settings.site.description'),\n                'value'        => __('voyager::seeders.settings.site.description'),\n                'details'      => '',\n                'type'         => 'text',\n                'order'        => 2,\n                'group'        => 'Site',\n            ])->save();\n        }\n\n        $setting = $this->findSetting('site.logo');\n        if (!$setting->exists) {\n            $setting->fill([\n                'display_name' => __('voyager::seeders.settings.site.logo'),\n                'value'        => '',\n                'details'      => '',\n                'type'         => 'image',\n                'order'        => 3,\n                'group'        => 'Site',\n            ])->save();\n        }\n\n        $setting = $this->findSetting('site.google_analytics_tracking_id');\n        if (!$setting->exists) {\n            $setting->fill([\n                'display_name' => __('voyager::seeders.settings.site.google_analytics_tracking_id'),\n                'value'        => '',\n                'details'      => '',\n                'type'         => 'text',\n                'order'        => 4,\n                'group'        => 'Site',\n            ])->save();\n        }\n\n        $setting = $this->findSetting('admin.bg_image');\n        if (!$setting->exists) {\n            $setting->fill([\n                'display_name' => __('voyager::seeders.settings.admin.background_image'),\n                'value'        => '',\n                'details'      => '',\n                'type'         => 'image',\n                'order'        => 5,\n                'group'        => 'Admin',\n            ])->save();\n        }\n\n        $setting = $this->findSetting('admin.title');\n        if (!$setting->exists) {\n            $setting->fill([\n                'display_name' => __('voyager::seeders.settings.admin.title'),\n                'value'        => 'Voyager',\n                'details'      => '',\n                'type'         => 'text',\n                'order'        => 1,\n                'group'        => 'Admin',\n            ])->save();\n        }\n\n        $setting = $this->findSetting('admin.description');\n        if (!$setting->exists) {\n            $setting->fill([\n                'display_name' => __('voyager::seeders.settings.admin.description'),\n                'value'        => __('voyager::seeders.settings.admin.description_value'),\n                'details'      => '',\n                'type'         => 'text',\n                'order'        => 2,\n                'group'        => 'Admin',\n            ])->save();\n        }\n\n        $setting = $this->findSetting('admin.loader');\n        if (!$setting->exists) {\n            $setting->fill([\n                'display_name' => __('voyager::seeders.settings.admin.loader'),\n                'value'        => '',\n                'details'      => '',\n                'type'         => 'image',\n                'order'        => 3,\n                'group'        => 'Admin',\n            ])->save();\n        }\n\n        $setting = $this->findSetting('admin.icon_image');\n        if (!$setting->exists) {\n            $setting->fill([\n                'display_name' => __('voyager::seeders.settings.admin.icon_image'),\n                'value'        => '',\n                'details'      => '',\n                'type'         => 'image',\n                'order'        => 4,\n                'group'        => 'Admin',\n            ])->save();\n        }\n\n        $setting = $this->findSetting('admin.google_analytics_client_id');\n        if (!$setting->exists) {\n            $setting->fill([\n                'display_name' => __('voyager::seeders.settings.admin.google_analytics_client_id'),\n                'value'        => '',\n                'details'      => '',\n                'type'         => 'text',\n                'order'        => 1,\n                'group'        => 'Admin',\n            ])->save();\n        }\n    }\n\n    /**\n     * [setting description].\n     *\n     * @param [type] $key [description]\n     *\n     * @return [type] [description]\n     */\n    protected function findSetting($key)\n    {\n        return Setting::firstOrNew(['key' => $key]);\n    }\n}\n"
  },
  {
    "path": "publishable/database/seeders/TranslationsTableSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse TCG\\Voyager\\Models\\Category;\nuse TCG\\Voyager\\Models\\DataType;\nuse TCG\\Voyager\\Models\\MenuItem;\nuse TCG\\Voyager\\Models\\Page;\nuse TCG\\Voyager\\Models\\Translation;\n\nclass TranslationsTableSeeder extends Seeder\n{\n    /**\n     * Auto generated seed file.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $this->dataTypesTranslations();\n        $this->categoriesTranslations();\n        $this->pagesTranslations();\n        $this->menusTranslations();\n    }\n\n    /**\n     * Auto generate Categories Translations.\n     *\n     * @return void\n     */\n    private function categoriesTranslations()\n    {\n        // Adding translations for 'categories'\n        //\n        $cat = Category::where('slug', 'category-1')->firstOrFail();\n        if ($cat->exists) {\n            $this->trans('pt', $this->arr(['categories', 'slug'], $cat->id), 'categoria-1');\n            $this->trans('pt', $this->arr(['categories', 'name'], $cat->id), 'Categoria 1');\n        }\n        $cat = Category::where('slug', 'category-2')->firstOrFail();\n        if ($cat->exists) {\n            $this->trans('pt', $this->arr(['categories', 'slug'], $cat->id), 'categoria-2');\n            $this->trans('pt', $this->arr(['categories', 'name'], $cat->id), 'Categoria 2');\n        }\n    }\n\n    /**\n     * Auto generate DataTypes Translations.\n     *\n     * @return void\n     */\n    private function dataTypesTranslations()\n    {\n        // Adding translations for 'display_name_singular'\n        //\n        $_fld = 'display_name_singular';\n        $_tpl = ['data_types', $_fld];\n        $dtp = DataType::where($_fld, __('voyager::seeders.data_types.post.singular'))->firstOrFail();\n        if ($dtp->exists) {\n            $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Post');\n        }\n        $dtp = DataType::where($_fld, __('voyager::seeders.data_types.page.singular'))->firstOrFail();\n        if ($dtp->exists) {\n            $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Página');\n        }\n        $dtp = DataType::where($_fld, __('voyager::seeders.data_types.user.singular'))->firstOrFail();\n        if ($dtp->exists) {\n            $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Utilizador');\n        }\n        $dtp = DataType::where($_fld, __('voyager::seeders.data_types.category.singular'))->firstOrFail();\n        if ($dtp->exists) {\n            $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Categoria');\n        }\n        $dtp = DataType::where($_fld, __('voyager::seeders.data_types.menu.singular'))->firstOrFail();\n        if ($dtp->exists) {\n            $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Menu');\n        }\n        $dtp = DataType::where($_fld, __('voyager::seeders.data_types.role.singular'))->firstOrFail();\n        if ($dtp->exists) {\n            $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Função');\n        }\n\n        // Adding translations for 'display_name_plural'\n        //\n        $_fld = 'display_name_plural';\n        $_tpl = ['data_types', $_fld];\n        $dtp = DataType::where($_fld, __('voyager::seeders.data_types.post.plural'))->firstOrFail();\n        if ($dtp->exists) {\n            $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Posts');\n        }\n        $dtp = DataType::where($_fld, __('voyager::seeders.data_types.page.plural'))->firstOrFail();\n        if ($dtp->exists) {\n            $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Páginas');\n        }\n        $dtp = DataType::where($_fld, __('voyager::seeders.data_types.user.plural'))->firstOrFail();\n        if ($dtp->exists) {\n            $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Utilizadores');\n        }\n        $dtp = DataType::where($_fld, __('voyager::seeders.data_types.category.plural'))->firstOrFail();\n        if ($dtp->exists) {\n            $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Categorias');\n        }\n        $dtp = DataType::where($_fld, __('voyager::seeders.data_types.menu.plural'))->firstOrFail();\n        if ($dtp->exists) {\n            $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Menus');\n        }\n        $dtp = DataType::where($_fld, __('voyager::seeders.data_types.role.plural'))->firstOrFail();\n        if ($dtp->exists) {\n            $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Funções');\n        }\n    }\n\n    /**\n     * Auto generate Pages Translations.\n     *\n     * @return void\n     */\n    private function pagesTranslations()\n    {\n        $page = Page::where('slug', 'hello-world')->firstOrFail();\n        if ($page->exists) {\n            $_arr = $this->arr(['pages', 'title'], $page->id);\n            $this->trans('pt', $_arr, 'Olá Mundo');\n            /**\n             * For configuring additional languages use it e.g.\n             *\n             * ```\n             *   $this->trans('es', $_arr, 'hola-mundo');\n             *   $this->trans('de', $_arr, 'hallo-welt');\n             * ```\n             */\n            $_arr = $this->arr(['pages', 'slug'], $page->id);\n            $this->trans('pt', $_arr, 'ola-mundo');\n\n            $_arr = $this->arr(['pages', 'body'], $page->id);\n            $this->trans('pt', $_arr, '<p>Olá Mundo. Scallywag grog swab Cat o\\'nine tails scuttle rigging hardtack cable nipper Yellow Jack. Handsomely spirits knave lad killick landlubber or just lubber deadlights chantey pinnace crack Jennys tea cup. Provost long clothes black spot Yellow Jack bilged on her anchor league lateen sail case shot lee tackle.</p>'\n                .\"\\r\\n\".'<p>Ballast spirits fluke topmast me quarterdeck schooner landlubber or just lubber gabion belaying pin. Pinnace stern galleon starboard warp carouser to go on account dance the hempen jig jolly boat measured fer yer chains. Man-of-war fire in the hole nipperkin handsomely doubloon barkadeer Brethren of the Coast gibbet driver squiffy.</p>');\n        }\n    }\n\n    /**\n     * Auto generate Menus Translations.\n     *\n     * @return void\n     */\n    private function menusTranslations()\n    {\n        $_tpl = ['menu_items', 'title'];\n        $_item = $this->findMenuItem(__('voyager::seeders.menu_items.dashboard'));\n        if ($_item->exists) {\n            $this->trans('pt', $this->arr($_tpl, $_item->id), 'Painel de Controle');\n        }\n\n        $_item = $this->findMenuItem(__('voyager::seeders.menu_items.media'));\n        if ($_item->exists) {\n            $this->trans('pt', $this->arr($_tpl, $_item->id), 'Media');\n        }\n\n        $_item = $this->findMenuItem(__('voyager::seeders.menu_items.posts'));\n        if ($_item->exists) {\n            $this->trans('pt', $this->arr($_tpl, $_item->id), 'Publicações');\n        }\n\n        $_item = $this->findMenuItem(__('voyager::seeders.menu_items.users'));\n        if ($_item->exists) {\n            $this->trans('pt', $this->arr($_tpl, $_item->id), 'Utilizadores');\n        }\n\n        $_item = $this->findMenuItem(__('voyager::seeders.menu_items.categories'));\n        if ($_item->exists) {\n            $this->trans('pt', $this->arr($_tpl, $_item->id), 'Categorias');\n        }\n\n        $_item = $this->findMenuItem(__('voyager::seeders.menu_items.pages'));\n        if ($_item->exists) {\n            $this->trans('pt', $this->arr($_tpl, $_item->id), 'Páginas');\n        }\n\n        $_item = $this->findMenuItem(__('voyager::seeders.menu_items.roles'));\n        if ($_item->exists) {\n            $this->trans('pt', $this->arr($_tpl, $_item->id), 'Funções');\n        }\n\n        $_item = $this->findMenuItem(__('voyager::seeders.menu_items.tools'));\n        if ($_item->exists) {\n            $this->trans('pt', $this->arr($_tpl, $_item->id), 'Ferramentas');\n        }\n\n        $_item = $this->findMenuItem(__('voyager::seeders.menu_items.menu_builder'));\n        if ($_item->exists) {\n            $this->trans('pt', $this->arr($_tpl, $_item->id), 'Menus');\n        }\n\n        $_item = $this->findMenuItem(__('voyager::seeders.menu_items.database'));\n        if ($_item->exists) {\n            $this->trans('pt', $this->arr($_tpl, $_item->id), 'Base de dados');\n        }\n\n        $_item = $this->findMenuItem(__('voyager::seeders.menu_items.settings'));\n        if ($_item->exists) {\n            $this->trans('pt', $this->arr($_tpl, $_item->id), 'Configurações');\n        }\n    }\n\n    private function findMenuItem($title)\n    {\n        return MenuItem::where('title', $title)->firstOrFail();\n    }\n\n    private function arr($par, $id)\n    {\n        return [\n            'table_name'  => $par[0],\n            'column_name' => $par[1],\n            'foreign_key' => $id,\n        ];\n    }\n\n    private function trans($lang, $keys, $value)\n    {\n        $_t = Translation::firstOrNew(array_merge($keys, [\n            'locale' => $lang,\n        ]));\n\n        if (!$_t->exists) {\n            $_t->fill(array_merge(\n                $keys,\n                ['value' => $value]\n            ))->save();\n        }\n    }\n}\n"
  },
  {
    "path": "publishable/database/seeders/VoyagerDatabaseSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass VoyagerDatabaseSeeder extends Seeder\n{\n    /**\n     * Run the database seeders.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $this->call([\n            DataTypesTableSeeder::class,\n            DataRowsTableSeeder::class,\n            MenusTableSeeder::class,\n            MenuItemsTableSeeder::class,\n            RolesTableSeeder::class,\n            PermissionsTableSeeder::class,\n            PermissionRoleTableSeeder::class,\n            SettingsTableSeeder::class,\n        ]);\n    }\n}\n"
  },
  {
    "path": "publishable/database/seeders/VoyagerDummyDatabaseSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass VoyagerDummyDatabaseSeeder extends Seeder\n{\n    /**\n     * Run the database seeders.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $this->call([\n            CategoriesTableSeeder::class,\n            UsersTableSeeder::class,\n            PostsTableSeeder::class,\n            PagesTableSeeder::class,\n            TranslationsTableSeeder::class,\n            PermissionRoleTableSeeder::class,\n        ]);\n    }\n}\n"
  },
  {
    "path": "publishable/lang/al/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'  => 'Nga pageview',\n    'by_sessions'  => 'Nga sesionet',\n    'by_users'     => 'Nga përdoruesit',\n    'no_client_id' => 'Për të parë analitikën që do t\\'ju nevojitet për të marrë një ID '\n    .'të klientit të analytics google dhe  shtoni në cilësimet tuaja për kodin '\n    .'<code>google_analytics_client_id</code>. Merrni çelësin tuaj në tastierën zhvilluese të Google: ',\n    'set_view'               => 'Zgjidh një pamje',\n    'this_vs_last_week'      => 'Këtë javë ndaj javës së kaluar',\n    'this_vs_last_year'      => 'Këtë vit kundër vitit të kaluar',\n    'top_browsers'           => 'Shfletuesit kryesorë',\n    'top_countries'          => 'Vendet më të mira',\n    'various_visualizations' => 'Vizualizime të ndryshme',\n];\n"
  },
  {
    "path": "publishable/lang/al/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Add BREAD to this table',\n    'bread_crud_actions'     => 'BREAD/CRUD Actions',\n    'bread_info'             => 'BREAD info',\n    'controller_name_hint'   => 'ex. PageController, if left empty will use the BREAD Controller',\n    'create_bread_for_table' => 'Create BREAD for :table table',\n    'delete_bread'           => 'Delete BREAD',\n    'delete_bread_conf'      => 'Yes, remove the BREAD',\n    'delete_bread_quest'     => 'Are you sure you want to delete the BREAD for the :table table?',\n    'edit_bread'             => 'Edit BREAD',\n    'edit_bread_for_table'   => 'Edit BREAD for :table table',\n    'error_creating_bread'   => 'Sorry it appears there may have been a problem creating this BREAD',\n    'error_removing_bread'   => 'Sorry it appears there was a problem removing this BREAD',\n    'error_updating_bread'   => 'Sorry it appears there may have been a problem updating this BREAD',\n    'error_tagging'          => 'Sorry it appears there may have been a problem creating the record. Please make sure your table has defaults for other fields.',\n    'success_created_bread'  => 'Successfully created new BREAD',\n    'success_remove_bread'   => 'Successfully removed BREAD from :datatype',\n    'success_update_bread'   => 'Successfully updated the :datatype BREAD',\n    'controller_name'        => 'Controller Name',\n    'create_migration'       => 'Create migration for this table?',\n    'description'            => 'Description',\n    'display_name'           => 'Display Name',\n    'display_name_plural'    => 'Display Name (Plural)',\n    'display_name_singular'  => 'Display Name (Singular)',\n    'edit_rows'              => 'Edit the rows for the :table table below',\n    'generate_permissions'   => 'Generate Permissions',\n    'icon_class'             => 'Icon to use for this Table',\n    'icon_hint'              => 'Icon (optional) Use a',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Model Class Name',\n    'model_name'             => 'Model Name',\n    'model_name_ph'          => 'ex. \\App\\User, if left empty will try and use the table name',\n    'order'                  => 'Order',\n    'order_column'           => 'Order column',\n    'order_column_ph'        => 'The column where the order is stored',\n    'order_ident_column'     => 'Order display column',\n    'order_ident_column_ph'  => 'The column which is displayed in the order page',\n    'ordering_not_set'       => 'You have to define ordering first',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'server_pagination'      => 'Server-side Pagination',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URL Slug (must be unique)',\n    'url_slug_ph'            => 'URL slug (ex. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/al/database.php",
    "content": "<?php\n\nreturn [\n    'add_bread'                 => 'Shto BREAD në këtë tabelë',\n    'add_new_column'            => 'Shto shtyllë të re',\n    'add_softdeletes'           => 'Shto butona të fshira',\n    'add_timestamps'            => 'Shto Timestamps',\n    'already_exists'            => 'ekziston tashmë',\n    'already_exists_table'      => 'Tabela: tabela tashmë ekziston',\n    'bread_crud_actions'        => 'BREAD / Actions',\n    'bread_info'                => 'BREAD info',\n    'column'                    => 'Column',\n    'composite_warning'         => 'Paralajmërim: kjo kolonë është pjesë e një indeksi të përbërë',\n    'controller_name'           => 'Emri i Kontrollorit',\n    'controller_name_hint'      => 'ex. Kontrolluesi i faqes, nëse bosh do të përdorë kontrollorin e BREAD',\n    'create_bread_for_table'    => 'Krijo BREAD për: table table',\n    'create_migration'          => 'Krijo migrim për këtë tryezë?',\n    'create_model_table'        => 'Krijo model për këtë tabelë?',\n    'create_new_table'          => 'Krijo tabelë të re',\n    'create_your_new_table'     => 'Krijo tabelën tënde të re',\n    'default'                   => 'Default',\n    'delete_bread'              => 'Fshi BREAD',\n    'delete_bread_before_table' => 'Ju lutemi sigurohuni që të hiqni BREAD në këtë '\n    .'tabelë përpara se të fshini tabelën.',\n    'delete_table_bread_conf'  => 'Po, hiq BREAD',\n    'delete_table_bread_quest' => 'Jeni i sigurt që dëshironi të fshini BREAD për: tabelën e tabelës?',\n    'delete_table_confirm'     => 'Po, fshij këtë tabelë',\n    'delete_table_question'    => 'A jeni i sigurt që doni të fshini: tabelën e tabelës?',\n    'description'              => 'Përshkrimi',\n    'display_name'             => 'Emri i shfaqjes',\n    'display_name_plural'      => 'Shfaq Emri (Plural)',\n    'display_name_singular'    => 'Shfaq emrin (Singular)',\n    'edit_bread'               => 'Edit BREAD',\n    'edit_bread_for_table'     => 'Ndrysho BREAD për: table table',\n    'edit_rows'                => 'Redakto rreshtave për: tabelën e tabelës më poshtë',\n    'edit_table'               => 'Ndrysho tabelën e tabelës më poshtë',\n    'edit_table_not_exist'     => 'Tabela që dëshironi të redaktoni nuk ekziston',\n    'error_creating_bread'     => 'Më vjen keq që duket se mund të ketë pasur një '\n    .'problem në krijimin e këtij brezi',\n    'error_removing_bread' => 'Më vjen keq që duket se ka pasur një problem'\n    .' duke hequr këtë BREAME',\n    'error_updating_bread' => 'Më vjen keq që duket se mund të ketë pasur '\n    .'një problem në përditësimin e këtij BREAK ',\n    'extra'                => 'Extra',\n    'field'                => 'Fusha',\n    'field_safe_failed'    => 'Dështoi në ruajtjen e fushës: fushë, ne do të kthehemi prapa!',\n    'generate_permissions' => 'Generate Permissions',\n    'icon_class'           => 'Ikona për t\\'u përdorur për këtë tabelë',\n    'icon_hint'            => 'Icon (opsional) Përdorni një',\n    'icon_hint2'           => 'Klasa Font Voyager',\n    'index'                => 'INDEKSI',\n    'input_type'           => 'Lloji i hyrjes',\n    'key'                  => 'Çelësi',\n    'model_class'          => 'Emri i emrit të modelit',\n    'model_name'           => 'Emri i modelit',\n    'model_name_ph'        => 'ex. \\ App \\ User, nëse majtas bosh do të përpiqet dhe '\n    .'të përdorë emrin e tabelës ',\n    'name_warning'          => 'Ju lutemi emri kolonën para se të shtoni një indeks',\n    'no_composites_warning' => 'Kjo tabelë ka indekse të përbërë. Ju lutem vini re se ato nuk janë '\n    .'të mbështetura për momentin. Kini kujdes kur përpiqeni të shtoni/hiqni indekset',\n    'null'             => 'Null',\n    'optional_details' => 'Detajet Opsionale',\n    'policy_class'     => 'Emri i klasës së politikës',\n    'policy_name'      => 'Emri i politikave',\n    'policy_name_ph'   => 'ex. \\ App \\ Policies \\ UserPolicy, nëse bosh bosh '\n    .'do të përpiqet dhe të përdorë parazgjedhjen ',\n    'primary'               => 'FILLORE',\n    'server_pagination'     => 'Paraqitja në anë të serverit',\n    'success_create_table'  => 'Krijohet me sukses: tabela e tabelës',\n    'success_created_bread' => 'Krijoi me sukses krijesën e re',\n    'success_delete_table'  => 'fshihet me sukses: tabela e tabelës',\n    'success_remove_bread'  => 'U largua me sukses BREAD nga: tipi i të dhënave',\n    'success_update_bread'  => 'Azhurohet me sukses: tipi i të dhënave BREAD',\n    'success_update_table'  => 'Përditësuar me sukses: tabela e tabelës',\n    'table_actions'         => 'Veprimet e tabelave',\n    'table_columns'         => 'Kolona e tabelave',\n    'table_has_index'       => 'Tabela tashmë ka një indeks primar.',\n    'table_name'            => 'Emri i tabelës',\n    'table_no_columns'      => 'Tabela nuk ka kollona ...',\n    'type'                  => 'Lloji',\n    'type_not_supported'    => 'Ky lloj nuk është i mbështetur',\n    'unique'                => 'UNIKË',\n    'unknown_type'          => 'Tip i panjohur',\n    'update_table'          => 'Tabela e përditësimit',\n    'url_slug'              => 'Slug URL (duhet të jetë unik)',\n    'url_slug_ph'           => 'Slug URL (ex posts)',\n    'visibility'            => 'Shikueshmëria',\n];\n"
  },
  {
    "path": "publishable/lang/al/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Nuk ka të dhëna të disponueshme në tabelë',\n    'sInfo'           => 'Duke shfaqur _START_ me _END_ të _TOTAL_ entries',\n    'sInfoEmpty'      => 'Duke shfaqur 0 deri në 0 nga 0 shënime',\n    'sInfoFiltered'   => '(filtruar nga hyrjet totale _MAX_)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Shfaq _MENU_ entries',\n    'sLoadingRecords' => 'Loading ...',\n    'sProcessing'     => 'Përpunimi ...',\n    'sSearch'         => 'Kërko:',\n    'sZeroRecords'    => 'Nuk u gjetën shënime përputhëse',\n    'oPaginate'       => [\n        'sFirst'    => 'Së pari',\n        'sLast'     => 'I fundit',\n        'sNext'     => 'Tjetra',\n        'sPrevious' => 'I mëparshmi',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': aktivizoni për të renditur kolonën në ngjitje',\n        'sSortDescending' => ': aktivizo për të renditur kolonën zbritëse',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/al/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Javën e kaluar',\n    'last_year' => 'Viti i kaluar',\n    'this_week' => 'Kjo javë',\n    'this_year' => 'Këtë vit',\n];\n"
  },
  {
    "path": "publishable/lang/al/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Faqe | Faqet',\n    'page_link_text' => 'Shikoni të gjitha faqet',\n    'page_text'      => 'Ju keni: count: string në databazën tuaj. Klikoni butonin më poshtë'\n    .' për të parë të gjitha faqet. ',\n    'post'           => 'Posta | Postime',\n    'post_link_text' => 'Shiko të gjitha postimet',\n    'post_text'      => 'Ju keni: count: string në databazën tuaj. Klikoni butonin '\n    .'më poshtë për të parë të gjitha postimet. ',\n    'user'           => 'Përdorues',\n    'user_link_text' => 'Shikoni të gjithë përdoruesit',\n    'user_text'      => 'Ju keni: count: string në databazën tuaj. Klikoni butonin'\n    .' më poshtë për të parë të gjithë përdoruesit. ',\n];\n"
  },
  {
    "path": "publishable/lang/al/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'  => 'Ne sapo krijuam linkun që mungon për ju.',\n    'symlink_created_title' => 'Sjellja e humbur e ruajtjes u krijua',\n    'symlink_failed_text'   => 'Ne nuk arritëm të gjeneronim simbolin e humbur për aplikacionin tënd.'\n    .' Duket se ofruesi juaj i pritjes nuk e mbështet atë.',\n    'symlink_failed_title'   => 'Nuk mundi të krijoj simbolin e ruajtjes së mungesës',\n    'symlink_missing_button' => 'Fix it',\n    'symlink_missing_text'   => 'Ne nuk mund të gjejmë një symlink të ruajtjes. '\n    .'Kjo mund të shkaktojë probleme me ngarkimi i skedarëve të medias nga shfletuesi.',\n    'loading media files from the browser.',\n    'symlink_missing_title' => 'Skeda e munguar e ruajtjes',\n];\n"
  },
  {
    "path": "publishable/lang/al/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Lëreni bosh për të mbajtur të njëjtën',\n    'field_select_dd_relationship' => 'Sigurohuni që të konfiguroni marrëdhënien e '\n    .'duhur në metodën e metodës së klasa e klasës.',\n    'the :class class.',\n    'type_checkbox'       => 'Kutia e Kontrollit',\n    'type_codeeditor'     => 'Editor Kodi',\n    'type_file'           => 'Skedar',\n    'type_image'          => 'Image',\n    'type_radiobutton'    => 'Radio Button',\n    'type_richtextbox'    => 'Rich Textbox',\n    'type_selectdropdown' => 'Zgjidh Dropdown',\n    'type_textarea'       => 'Zona e tekstit',\n    'type_textbox'        => 'Kutia e tekstit',\n];\n"
  },
  {
    "path": "publishable/lang/al/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'               => 'false',\n    'action'               => 'Veprimi',\n    'actions'              => 'Veprimet',\n    'add'                  => 'Shto',\n    'add_folder'           => 'Shto Dosje',\n    'add_new'              => 'Shto të ri',\n    'all_done'             => 'Të gjitha të kryera',\n    'are_you_sure'         => 'Jeni i sigurt',\n    'are_you_sure_delete'  => 'Jeni i sigurt që doni të fshini',\n    'auto_increment'       => 'Rritja automatike',\n    'browse'               => 'Shfleto',\n    'builder'              => 'Ndërtues',\n    'bulk_delete'          => 'Largo bulk',\n    'bulk_delete_confirm'  => 'Po, fshini këto',\n    'bulk_delete_nothing'  => 'Ju nuk keni zgjedhur ndonjë gjë për të fshirë',\n    'cancel'               => 'Anulo',\n    'choose_type'          => 'Zgjidhni Lloji',\n    'click_here'           => 'Kliko këtu',\n    'close'                => 'Mbyll',\n    'compass'              => 'Kompasë',\n    'created_at'           => 'Krijuar në',\n    'custom'               => 'Custom',\n    'dashboard'            => 'Dashboard',\n    'database'             => 'Baza e të dhënave',\n    'default'              => 'Default',\n    'delete'               => 'Fshije',\n    'delete_confirm'       => 'Po, fshij atë!',\n    'delete_question'      => 'Jeni i sigurt që dëshironi të fshini këtë',\n    'delete_this_confirm'  => 'Po, fshij këtë',\n    'deselect_all'         => 'Deselect All',\n    'download'             => 'Shkarko',\n    'edit'                 => 'Edit',\n    'email'                => 'E-mail',\n    'error_deleting'       => 'Më vjen keq që duket se ka pasur një problem duke fshirë këtë',\n    'exception'            => 'Përjashtim',\n    'featured'             => 'Të zgjedhura',\n    'field_does_not_exist' => 'Fusha nuk ekziston',\n    'how_to_use'           => 'Si të përdorni',\n    'index'                => 'Indeksi',\n    'internal_error'       => 'Gabim i brendshëm',\n    'items'                => 'artikull (et)',\n    'keep_sidebar_open'    => 'Yarr! Hidhni ankorat! (dhe mbani sidebar hapur) ',\n    'key'                  => 'Çelësi',\n    'last_modified'        => 'Modifikuar e fundit',\n    'length'               => 'Gjatësia',\n    'login'                => 'Login',\n    'media'                => 'Media',\n    'menu_builder'         => 'Ndërtuesi i menysë',\n    'move'                 => 'Leviz',\n    'name'                 => 'Emri',\n    'new'                  => 'New',\n    'no'                   => 'Jo',\n    'no_thanks'            => 'Jo faleminderit',\n    'not_null'             => 'Jo Null',\n    'no_results'           => 'No results',\n    'options'              => 'Opsionet',\n    'password'             => 'Fjalëkalimi',\n    'permissions'          => 'Lejet',\n    'profile'              => 'Profili',\n    'public_url'           => 'URL publik',\n    'read'                 => 'Lexo',\n    'rename'               => 'Riemërtoj',\n    'required'             => 'Required',\n    'return_to_list'       => 'Kthehu në listë',\n    'route'                => 'Rruga',\n    'save'                 => 'Ruaj',\n    'search'               => 'Kërko',\n    'select_all'           => 'Zgjidh të gjitha',\n    'select_group'         => 'Zgjidh grupin ekzistues ose Shto të ri',\n    'settings'             => 'Cilësimet',\n    'showing_entries'      => 'Duke treguar: nga në: të: të gjitha entrie | '\n                                .'Showing: from to: të: të gjitha shënimet',\n    'submit'                 => 'Paraqesë',\n    'successfully_added_new' => 'U shtua me sukses të ri',\n    'successfully_deleted'   => 'Deleted me sukses',\n    'successfully_updated'   => 'Përditëso me sukses',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'Titulli',\n    'type'                   => 'Lloji',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'Zhvidhos shiritin anësor',\n    'update'                 => 'Përditëso',\n    'update_failed'          => 'Përditëso dështimi',\n    'upload'                 => 'Ngarko',\n    'url'                    => 'URL',\n    'view'                   => 'Shikoni',\n    'viewing'                => 'Duke parë',\n    'yes'                    => 'Po',\n    'yes_please'             => 'Po, Ju lutem',\n];\n"
  },
  {
    "path": "publishable/lang/al/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Json i pavlefshëm',\n    'invalid_message'   => 'Duket sikur keni futur disa JSON të pavlefshëm.',\n    'valid'             => 'Valid Json',\n    'validation_errors' => 'Gabimet e validimit',\n];\n"
  },
  {
    "path": "publishable/lang/al/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Identifikimi',\n    'signin_below' => 'Hyni më poshtë:',\n    'welcome'      => 'Mirë se vini në Voyager. Adminja e zhdukur për Laravel ',\n];\n"
  },
  {
    "path": "publishable/lang/al/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Shto një dosje të re',\n    'audio_support'          => 'Shfletuesi juaj nuk e mbështet elementin audio.',\n    'create_new_folder'      => 'Krijo dosje të re',\n    'delete_folder_question' => 'Fshirja e një dosjeje do të heqë të gjitha skedarët '\n    .' dhe dosjet e përmbajtura brenda',\n    'destination_folder'   => 'Folder Destinacioni',\n    'drag_drop_info'       => 'Drag dhe rrëzo skedarët ose kliko më poshtë për të ngarkuar',\n    'error_already_exists' => 'Na vjen keq që ekziston një skedar / dosje me atë emër ekzistues në atë dosje.',\n    'error_creating_dir'   => 'Duket sikur diçka e keqe ka shkuar keq në krijimin e direktorisë.'\n    .' kontrolloni lejet tuaja',\n    'error_deleting_file' => 'Na duket diçka e keqe që duket se ka shkuar gabim duke fshirë këtë skedar,'\n    .' ju lutem kontrolloni lejet',\n    'error_deleting_folder' => 'Duket sikur diçka e keqe ka shkuar keq kur fshihet'\n    .' kjo dosje kontrolloni lejet tuaja',\n    'error_may_exist' => 'Skedari ose Folderi mund të ekzistojnë tashmë me këtë emër. '\n    .'Ju lutem zgjidhni një emër tjetër ose fshini skedarin tjetër.',\n    'error_moving' => 'Na vjen keq që duket se ka një problem të lëvizë atë '\n    .'skedar / dosje, ju lutemi bëni sigurohuni që keni lejet e duhura.',\n    'error_uploading'       => 'Ngarko dështoj: Gabim i panjohur ndodhi!',\n    'folder_exists_already' => 'Na vjen keq se dosja tashmë ekziston, ju lutem'\n    .' fshini atë dosje nëse dëshironi për ta rikrijuar atë',\n    'image_does_not_exist'  => 'Imazhi nuk ekziston',\n    'image_removed'         => 'Imazhi i hequr',\n    'library'               => 'Biblioteka e Medias',\n    'loading'               => 'LOADING YOUR MEDIA FILES',\n    'move_file_folder'      => 'Move File / Folder',\n    'new_file_folder'       => 'Emri i ri i skedarit / folderit',\n    'new_folder_name'       => 'Emri i ri i dosjes',\n    'no_files_here'         => 'Asnjë fotografi këtu.',\n    'no_files_in_folder'    => 'Asnjë fotografi në këtë dosje.',\n    'nothing_selected'      => 'Nuk ka skedar ose dosje të zgjedhur',\n    'rename_file_folder'    => 'Rename File / Folder',\n    'success_uploaded_file' => 'Skedari i ri i ngarkuar me sukses!',\n    'success_uploading'     => 'Ngarkuar me sukses!',\n    'uploading_wrong_type'  => 'Ngarko dështoj: Formati i skedarit të '\n    .'pambështetur ose Është tepër i madh për të ngarkuar!',\n    'video_support'         => 'Shfletuesi juaj nuk e mbështet videon.',\n    'crop'                  => 'Crop',\n    'crop_and_create'       => 'Crop & Krijo',\n    'crop_override_confirm' => 'Do të anashkalojë imazhin origjinal, a jeni i sigurt?',\n    'crop_image'            => 'Imazhi i prerë',\n    'success_crop_image'    => 'Kulloni me sukses imazhin',\n    'height'                => 'Lartësia:',\n    'width'                 => 'Gjerësia:',\n    'add_all_selected'      => 'Shtoni të gjitha të zgjedhura',\n];\n"
  },
  {
    "path": "publishable/lang/al/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Ngjyra në RGB ose magji (opsionale)',\n    'color_ph'             => 'Ngjyra (ex. #ffffff ose rgb (255, 255, 255)',\n    'create_new_item'      => 'Krijo një artikull të ri të menysë',\n    'delete_item_confirm'  => 'Po, fshini këtë artikull menu',\n    'delete_item_question' => 'A jeni i sigurt që doni ta fshini këtë artikull të menusë?',\n    'drag_drop_info'       => 'Zvarriteni dhe hiqni menunë Artikujt e mëposhtëm për të riorganizuar ato.',\n    'dynamic_route'        => 'Rruga dinamike',\n    'edit_item'            => 'Modifiko artikullin e menysë',\n    'icon_class'           => 'Klasa e Font Icon për Item Menu (Përdorni një',\n    'icon_class2'          => 'Klasa e Fonteve Voyager)',\n    'icon_class_ph'        => 'Klasa e ikonave (opsionale)',\n    'item_route'           => 'Rruga për artikullin e menysë',\n    'item_title'           => 'Titulli i artikullit të menysë',\n    'link_type'            => 'Lloji i lidhjes',\n    'new_menu_item'        => 'Artikulli i ri i menysë',\n    'open_in'              => 'Hapni',\n    'open_new'             => 'New Tab / Window',\n    'open_same'            => 'Same Tab / Window',\n    'route_parameter'      => 'Parametrat e rrugës (nëse ka)',\n    'static_url'           => 'URL statik',\n    'successfully_created' => 'Krijoi me sukses artikullin e ri të menysë.',\n    'successfully_deleted' => 'U zhduk me sukses artikullin e menysë.',\n    'successfully_updated' => 'U përditësua me sukses artikulli i menusë.',\n    'updated_order'        => 'Rendi i menysë i përditësuar me sukses.',\n    'url'                  => 'URL për artikullin e menysë',\n    'usage_hint'           => 'Ju mund të nxjerrni një menu kudo në faqen tuaj duke '\n    .'telefonuar Mund të dalni  këtë menu diku në faqen tënde duke telefonuar',\n];\n"
  },
  {
    "path": "publishable/lang/al/post.php",
    "content": "<?php\n\nreturn [\n    'category'         => 'Kategoria postare',\n    'content'          => 'Post Content',\n    'details'          => 'Detajet e Postës',\n    'excerpt'          => 'Ekstrakt <i vogël> Përshkrimi i vogël i këtij postimi </ small>',\n    'image'            => 'Imazhi i postës',\n    'meta_description' => 'Meta Description',\n    'meta_keywords'    => 'Meta Keywords',\n    'new'              => 'Krijo postë të re',\n    'seo_content'      => 'Përmbajtja SEO',\n    'seo_title'        => 'Titulli i Seo',\n    'slug'             => 'Slug URL',\n    'status'           => 'Statusi i Postës',\n    'status_draft'     => 'draft',\n    'status_pending'   => 'në pritje',\n    'status_published' => 'publikuar',\n    'title'            => 'Post Titulli',\n    'title_sub'        => 'Titulli për postin tuaj',\n    'update'           => 'Update Post',\n];\n"
  },
  {
    "path": "publishable/lang/al/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => 'Avatari',\n    'edit'          => 'Edit My Profile',\n    'edit_user'     => 'Edit User',\n    'password'      => 'Fjalëkalimi',\n    'password_hint' => 'Lëreni bosh për të mbajtur të njëjtën',\n    'role'          => 'Roli',\n    'user_role'     => 'Roli i përdoruesit',\n];\n"
  },
  {
    "path": "publishable/lang/al/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Ju mund të merrni vlerën e çdo cilësie kudo në faqen tuaj duke telefonuar',\n    'save'                 => 'Save Settings',\n    'new'                  => 'Vendosja e re',\n    'help_name'            => 'Vendosja e emrit ex: Title Admin',\n    'help_key'             => 'Vendosja e tastit ex: admin_title',\n    'help_option'          => '(opsional, vlen vetëm për lloje të caktuara si kuti dropdown ose radio button)',\n    'add_new'              => 'Shto vendosjen e re',\n    'delete_question'      => 'A jeni i sigurt që doni të fshini: vendosjen e Vendosjes?',\n    'delete_confirm'       => 'Po, fshij këtë cilësim',\n    'successfully_created' => 'Cilësimet e krijuara me sukses',\n    'successfully_saved'   => 'Parametrat e ruajtura me sukses',\n    'successfully_deleted' => 'Vendosja me sukses e fshirë',\n    'already_at_top'       => 'Kjo është tashmë në krye të listës',\n    'already_at_bottom'    => 'Kjo tashmë është në fund të listës',\n    'key_already_exists'   => 'Çelësi: çelësi tashmë ekziston',\n    'moved_order_up'       => 'Kaluar: emri i vendosjes së rendit lart',\n    'moved_order_down'     => 'Moved: rregullimi i emrit të rendit poshtë',\n    'successfully_removed' => 'Hiqet me sukses: vlera e emrit',\n    'group_general'        => 'Përgjithshme',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Site',\n    'group'                => 'Grupi',\n    'help_group'           => 'Grupi ky përcaktim është caktuar për',\n];\n"
  },
  {
    "path": "publishable/lang/al/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Bërë me <i class = \"voyager-heart\"> </ i> nga',\n    'footer_copyright2' => 'Bërë me rum dhe rum më shumë',\n];\n"
  },
  {
    "path": "publishable/lang/am/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'Ըստ Էջի դիտման',\n    'by_sessions'            => 'Ըստ Սեսիաների',\n    'by_users'               => 'Ըստ Օգտատերերի',\n    'no_client_id'           => 'Վերլուծությունը դիտելու համար հարկավոր է ստանալ Google Analytics-ի client id եւ այն ավելացնել <code> google_analytics_client_id </code> բանալին Ձեր կարգավորումներում: Ստացեք Ձեր բանալին Ձեր Google developer console-ից:',\n    'set_view'               => 'Ընտրել դիտում',\n    'this_vs_last_week'      => 'Այս շաբաթը համեմատած վերջին շաբաթվա',\n    'this_vs_last_year'      => 'Այս տարին համեմատած վերջին տարվա',\n    'top_browsers'           => 'Թոփ բրուզերները',\n    'top_countries'          => 'Թոփ երկրները',\n    'various_visualizations' => 'Տարբեր տեսանելություններ',\n];\n"
  },
  {
    "path": "publishable/lang/am/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Ավելացնել BREAD այս աղյուսակի համար',\n    'bread_crud_actions'     => 'BREAD/CRUD Գործողություններ',\n    'bread_info'             => 'BREAD ինֆորմացիա',\n    'controller_name_hint'   => 'օր. PageController, եթե թողնեք դատարկ կոգտագործի BREAD Controller-ը',\n    'create_bread_for_table' => 'Ստեղծել BREAD :table աղյուսակի համար',\n    'default_search_key'     => 'Սերվերային կողմի որոնման դաշտը',\n    'default_search_key_ph'  => 'Դաշտը կվերընտրվի սերվերային որոնման համար',\n    'delete_bread'           => 'Ջնջել BREAD',\n    'delete_bread_conf'      => 'Այո, ջնջել BREAD-ը',\n    'delete_bread_quest'     => 'Համոզված ե՞ք, որ ցանկանում եք ջնջել BREAD-ը :table աղյուսակի համար։',\n    'edit_bread'             => 'Փոփոխել BREAD-ը',\n    'edit_bread_for_table'   => 'Փոփոխել BREAD-ը :table աղյուսակի համար',\n    'error_creating_bread'   => 'Ներեցե՛ք, հնարավոր է առաջացել է խնդիր BREAD-ը ստեղծելիս',\n    'error_removing_bread'   => 'Ներեցե՛ք, հնարավոր է առաջացել է խնդիր BREAD-ը ջնջելիս',\n    'error_updating_bread'   => 'Ներեցե՛ք, հնարավոր է առաջացել է խնդիր BREAD-ը թարմացնելիս',\n    'error_tagging'          => 'Ներեցե՛ք, հնարավոր է առաջացել է խնդիր գրառում ստեղծելիս։ Խնդրում ենք համոզվել, որ ձեր աղյուսակը ունի լռելյայն արժեքներ այլ դաշտերի համար։',\n    'success_created_bread'  => 'Բարեհաջող ստեղծվել է նոր BREAD',\n    'success_remove_bread'   => 'Բարեհաջող ջնջվել է BREAD-ը :datatype-ից',\n    'success_update_bread'   => 'Բարեհաջող թարմացվել է :datatype BREAD-ը',\n    'controller_name'        => 'Controller-ի անունը',\n    'create_migration'       => 'Այս աղյուսակի համար ստեղծե՞լ միգրացիա։',\n    'description'            => 'Նկարագրություն',\n    'display_name'           => 'Ցուցադրել Անունը',\n    'display_name_plural'    => 'Ցուցադրել Անունը (Հոգնակի)',\n    'display_name_singular'  => 'Ցուցադրել Անունը (Եզակի)',\n    'edit_rows'              => 'Փոփոխել տողերը :table ստորև բերված աղյուսակի համար',\n    'generate_permissions'   => 'Գեներացնել Թույտվություններ',\n    'icon_class'             => 'Օգտագործել պատկերը այս աղյուսակի համար',\n    'icon_hint'              => 'Պատկերը (ոչ պարտադիր) Օգտագործում է',\n    'icon_hint2'             => 'Voyager ֆոնտի դասը',\n    'model_class'            => 'Model-ի Դասի անունը',\n    'model_name'             => 'Model- անունը',\n    'model_name_ph'          => 'օր. \\App\\User, եթե թողնեք դատարկ, այն կփորձի օգտագործել աղյուսակի անունը',\n    'order'                  => 'Դասավորել',\n    'order_column'           => 'Դասավորման սյունակ',\n    'order_column_ph'        => 'Սյունակը, որտեղ կարգը պահվում է',\n    'order_direction'        => 'Դասավորման ուղղությունը',\n    'order_ident_column'     => 'Դասավորման ցուցադրվող սյունակը',\n    'order_ident_column_ph'  => 'Սյունակը, որը ցուցադրվում է դասավորման էջում',\n    'ordering_not_set'       => 'Դուք պետք է առաջին հերթին սահմանեք դասակարգումը',\n    'policy_class'           => 'Քաղաքականության դասի անունը',\n    'policy_name'            => 'Քաղաքականության անունը',\n    'policy_name_ph'         => 'օր. \\App\\Policies\\UserPolicy, եթե թողնեք դատարկ, այն կփորձի օգտագործել լռելյայնը',\n    'server_pagination'      => 'Սերվերային էջանշում',\n    'scope'                  => 'Շրջանակը',\n    'soft_deletes_on'        => 'Ցուցադրել ջնջվածները',\n    'soft_deletes_off'       => 'Թաքցնել ջնջվածները',\n    'updated_order'          => 'Դասակարգումը բարեհաջող թարմացվել է',\n    'url_slug'               => 'URL Slug (պետք է լինի ունիկալ)',\n    'url_slug_ph'            => 'URL slug (օր. գրառումներ)',\n];\n"
  },
  {
    "path": "publishable/lang/am/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Բարի գալուստ Voyager կողմնացույց. Յուրաքանչյուր լավ հավելվածի պետք է կողմնացույց, որը կմատնանշի նրանց ճիշտ ուղղությամբ։\n    Այս բաժնում Դուք կգտնեք բազմաթիվ ռեսուրսներ եւ վարչական խնդիրներ, որոնք կօգնեն Ձեզ ստեղծել Ձեր հավելվածը։',\n    'links'         => [\n        'title'                 => 'Հղումներ',\n        'documentation'         => 'Փաստաթղթեր',\n        'voyager_homepage'      => 'Voyager Գլխավոր էջ',\n    ],\n    'commands'      => [\n        'title'                 => 'Հրամաններ',\n        'text'                  => 'Աշխատեցնել Artisan հրամանները Voyager-ից։',\n        'clear_output'          => 'հստակ արդյունք',\n        'command_output'        => 'Artisan-ի հրամանի արդյունքը',\n        'additional_args'       => 'Լարացուցիչ արգումենտնե՞ր',\n        'run_command'           => 'Աշխատեցնել հրամանը',\n    ],\n    'resources'     => [\n        'title'                 => 'Ռեսուրսներ',\n        'text'                  => 'Voyager-ի ռեսուրսները օգնում են Ձեզ գտնել ավելի արագ',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Տեղեկամատյաններ',\n        'text'                  => 'Ձեր հավելվածի տեղեկամատյանները',\n        'file_too_big'          => 'Տեղեկամատյանի ֆայլը >50M, խնդրում ենք բեռնել այն.',\n        'level'                 => 'Մակարդակ',\n        'context'               => 'Համատեքստ',\n        'date'                  => 'Ամսաթիվ',\n        'content'               => 'Բովանդակություն',\n        'download_file'         => 'Բեռնել ֆայլը',\n        'delete_file'           => 'Ջնջել ֆայլը',\n        'delete_all_files'      => 'Ջնջել բոլոր ֆայլերը',\n        'delete_success'        => 'Բարեհաջող ջնջվել է տեղեկամատյան ֆայլը:',\n        'delete_all_success'    => 'Բարեհաջող ջնջվել են բոլոր տեղեկամատյան ֆայլերը',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Տառատեսակներ',\n        'font_class'            => 'Voyager-ի տառատեսակների դասերի քարտեզագրում',\n        'font_character'        => 'Voyager-ի տառատեսակների նիշերի քարտեզագրում',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/am/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Ավելացնել նոր սյունակ',\n    'add_softdeletes'           => 'Ավելացնել փափուկ ջնջումներ',\n    'add_timestamps'            => 'Ավելացնել ժամանակահատվածներ',\n    'already_exists'            => 'արդեն գոյություն ունի',\n    'already_exists_table'      => 'Աղյուսակ :table արդեն գոյություն ունի',\n    'bread_crud_actions'        => 'BREAD/CRUD Գործողություններ',\n    'bread_info'                => 'BREAD ինֆորմացիա',\n    'browse_bread'              => 'Փնտրել BREAD',\n    'column'                    => 'Սյունակ',\n    'composite_warning'         => 'Զգուշացում: այս սյունակը կոմպոզիտային ինդեքսի մաս է կազմում',\n    'create_new_table'          => 'Ստեղծել նոր աղյուսակ',\n    'create_your_new_table'     => 'Ստեղծել Ձեր նոր աղյուսակը',\n    'create_model_table'        => 'Ստեղծել մոդել այս աղյուսակի համար',\n    'default'                   => 'Լռելյայն',\n    'delete_bread_before_table' => 'Խնդրում ենք, համոզվեք, որպեսզի ջնջեք աղյուսակի BREAD-ը նախքան աղյուսակի ջնջելը',\n    'delete_table_confirm'      => 'Այո, ջնջել այս աղյուսակը',\n    'delete_table_question'     => 'Համոզված ե՞ք, որ ցանկանում եք ջնջել :table աղյուսակը։',\n    'editing_table'             => 'Փոփոխել :table աղյուսակը',\n    'edit_table'                => 'Փոփոխել ստորև :table աղյուսակը',\n    'edit_table_not_exist'      => 'Աղյուսակը, որը ցանկանում եք ջնջել, գոյություն չունի',\n    'extra'                     => 'Հավելյալ',\n    'field'                     => 'Դաշտ',\n    'field_safe_failed'         => 'Չհաջողվեց պահպանել :field դաշտը, մենք վերադառնում ենք',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Մուտքի տիպը',\n    'key'                       => 'Բանալի',\n    'name_warning'              => 'Խնդրում ենք անվանեք սյունակը ինդեքսի ավելացումից առաջ',\n    'no_composites_warning'     => 'Այս աղյուսակն ունի ցուցանիշերի կազմ։Խնդրում ենք հիշել,որ նրանք տվյալ պահին չեն սպասարկվում։Եղեք ուշադիր, երբ փորձում եք ավելացնել/ջնջել ցուցանիշերը։',\n    'null'                      => 'Անվավեր',\n    'optional_details'          => 'Ոչ պարտադիր մանրամասներ',\n    'policy_class'              => 'Քաղաքականության դասի անունը',\n    'policy_name'               => 'Քաղաքականության անունը',\n    'policy_name_ph'            => 'օր. \\App\\Policies\\UserPolicy, եթե թողնեք դատարկ, այն կփորձի օգտագործել լռելյայնը',\n    'primary'                   => 'PRIMARY',\n    'server_pagination'         => 'Սերվերային էջանշում',\n    'success_create_table'      => 'Բարեհաջող ստեղծվել է :table աղյուսակը',\n    'success_created_bread'     => 'Բարեհաջող ստեղծվել է նոր BREAD',\n    'success_delete_table'      => 'Բարեհաջող ջնջվել է :table աղյուսակը',\n    'success_remove_bread'      => 'Բարեհաջող ջնջվել է BREAD-ը :datatype-ից',\n    'success_update_bread'      => 'Բարեհաջող թարմացվել է :datatype BREAD-ը',\n    'success_update_table'      => 'Բարեհաջող թարմացվել է :table աղյուսակը',\n    'table_actions'             => 'Աղյուսակի գործողությունները',\n    'table_columns'             => 'Աղյուսակի սյունակներ',\n    'table_has_index'           => 'Աղյուսակը արդեն ունի առաջնային ցուցանիշ։',\n    'table_name'                => 'Աղյուսակի անուն',\n    'table_no_columns'          => 'Աղյուսակը սյունակներ չունի...',\n    'type'                      => 'Տիպ',\n    'type_not_supported'        => 'Այս տիպը չի սպասարկվում',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Անհայտ տիպ',\n    'update_table'              => 'Թարմացնել Աղյուսակը',\n    'url_slug'                  => 'URL Slug (պետք է լինի ունիկալ)',\n    'url_slug_ph'               => 'URL slug (օր․ գրառումները)',\n    'visibility'                => 'Տեսանելիություն',\n    'relationship'              => [\n        'relationship'         => 'Հարաբերություն',\n        'relationships'        => 'Հարաբերություններ',\n        'has_one'              => 'Ունի մեկը',\n        'has_many'             => 'Ունի շատ',\n        'belongs_to'           => 'Պատկանում է',\n        'belongs_to_many'      => 'Շատերին է պատկանում',\n        'which_column_from'    => 'Որ սյունակն է',\n        'is_used_to_reference' => 'օգտագործում է հղում',\n        'pivot_table'          => 'Ամփոփիչ աղյուսակ',\n        'selection_details'    => 'Ընտրության մանրամասները',\n        'display_the'          => 'Ցուցադրել այն',\n        'store_the'            => 'Պահպանել այն',\n        'allow_tagging'        => 'Թույ տալ հատկորոշում',\n        'easy_there'           => 'Հեշտ այնտեղ Կապիտան',\n        'before_create'        => 'Մինչև դուք կարողանաք ստեղծել նոր հարաբերություն, Դթւք պետք է ստեղծեք BREAD սկզբից.<br> Հետո, վերադառնաք և փոփոխեք BREAD-ը և Դուք կկարողանաք ավելացնել հարաբերություններ.<br> Շնորհակալություն։',\n        'cancel'               => 'Չեղարկել',\n        'add_new'              => 'Ավելացնել հարաբերություն',\n        'open'                 => 'Բացել',\n        'close'                => 'Փակել',\n        'relationship_details' => 'Հարաբերության մանրամասներ',\n        'browse'               => 'Փնտրել',\n        'read'                 => 'Կարդալ',\n        'edit'                 => 'Փոփոխել',\n        'add'                  => 'Ավելացնել',\n        'delete'               => 'Ջնջել',\n        'create'               => 'Ստեղծել հարաբերությունը',\n        'namespace'            => 'Լիովին որակավորված Model-ի անունը(օր. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/am/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Աղյուսակում հաստանելի տվյալներ չկան',\n    'sInfo'           => 'Ցուցադրվում է _START_-ից _END_-ը՝ _TOTAL_ գրառումներից',\n    'sInfoEmpty'      => 'Ցուցադրվում է 0-ից 0-ն՝ 0 գրառումներից',\n    'sInfoFiltered'   => '(զտված է _MAX_ ընդհանուր գրառումներից)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Ցւոցադրել _MENU_ գրառումները',\n    'sLoadingRecords' => 'Բեռնվում է...',\n    'sProcessing'     => 'Մշակվում է...',\n    'sSearch'         => 'Փնտրել:',\n    'sZeroRecords'    => 'Համընկնող գրառումներ չեն գտնվել',\n    'oPaginate'       => [\n        'sFirst'    => 'Առաջին',\n        'sLast'     => 'Վերջին',\n        'sNext'     => 'Հաջորդ',\n        'sPrevious' => 'Նախորդ',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': ակտիվացնել դաշտերի դասակարգումն ըստ աճման',\n        'sSortDescending' => ': ակտիվացնել դաշտերի դասակարգումն ըստ նվազման',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/am/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Վերջին շաբաթ',\n    'last_year' => 'Վերջին տարի',\n    'this_week' => 'Այս շաբաթ',\n    'this_year' => 'Այս տարի',\n];\n"
  },
  {
    "path": "publishable/lang/am/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'                              => 'Էջ|Էջեր',\n    'page_link_text'                    => 'Դիտել բոլոր էջերը',\n    'page_text'                         => 'Դուք ունեք :count :string Ձեր տվյալների բազայում. Սեղմել ներքևի կոճակին տեսնելու բոլոր էջերը։',\n    'post'                              => 'Գրառում|Գրառումներ',\n    'post_link_text'                    => 'Տեսնել բոլոր գրառումները',\n    'post_text'                         => 'Դուք ունեք :count :string Ձեր տվյալների բազայում. Սեղմել ներքևի կոճակին տեսնելու բոլոր գրառումները։',\n    'user'                              => 'Օգտատեր|Օգտատերեր',\n    'user_link_text'                    => 'Տեսնել բոլոր օգտատերերին',\n    'user_text'                         => 'Դուք ունեք :count :string Ձեր տվյալների բազայում. Սեղմել ներքևի կոճակին տեսնելու բոլոր օգտատերերին։',\n];\n"
  },
  {
    "path": "publishable/lang/am/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Մենք ուղղակի ստեղծել ենք անհայտ սիմվոլիկ հղում Ձեզ համար։',\n    'symlink_created_title'  => 'Ստեղծվել է անհայտ պահեստավորման սիմվոլիկ հղում',\n    'symlink_failed_text'    => 'Մեզ չհաջողվեց ստեղծել անհայտ սիմվոլիկ հղում Ձեր հավելվածի համար։ Թվում է Ջեր հոսթինգի մատակարարը չի սպասարկում այն։',\n    'symlink_failed_title'   => 'Չհաջողվեց ստեղծել անհայտ պահպանման սիմվոլիկ հղում։',\n    'symlink_missing_button' => 'Ֆիքսել այն',\n    'symlink_missing_text'   => 'Մենք չենք կարողանում գտնել պահպանման սիմվոլիկ հղումը։Այն կարող է պրոբլեմներ առաջացնել բրաուզերից բեռնվող մեդիա ֆայլերի համար։',\n    'symlink_missing_title'  => 'Բացակայում է պահեստավորման սիմվոլիկ հղումը',\n];\n"
  },
  {
    "path": "publishable/lang/am/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Թողնել դատարկ, որպեսզի պահպանեք նույնը',\n    'field_select_dd_relationship' => 'Համոզվեք, որ դուք հաստատել եք համապատասխան հարաբերություն :class դասի :method մեթոդում',\n    'type_checkbox'                => 'Նշատուփ',\n    'type_codeeditor'              => 'Կոդի խմբագիր',\n    'type_file'                    => 'Ֆայլ',\n    'type_image'                   => 'Նկար',\n    'type_radiobutton'             => 'Ռադիո կոճակ',\n    'type_richtextbox'             => 'Տեքստային հարուստ խմբագիր',\n    'type_selectdropdown'          => 'Ցանկից ընտրովի',\n    'type_textarea'                => 'Տեքստային տարածք',\n    'type_textbox'                 => 'Տեքստային տուփ',\n];\n"
  },
  {
    "path": "publishable/lang/am/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'ոչ',\n    'action'                 => 'Գործողություն',\n    'actions'                => 'Գործողություններ',\n    'add'                    => 'Ավելացնել',\n    'add_folder'             => 'Ավելացնել թղթապանակ',\n    'add_new'                => 'Ավելացնել նորը',\n    'all_done'               => 'Բոլորն արված է',\n    'are_you_sure'           => 'Համոզված ե՞ք',\n    'are_you_sure_delete'    => 'Համոզված ե՞ք, որ ցանկանում եք ջնջել',\n    'ascending'              => 'Աճում',\n    'auto_increment'         => 'Ավտո Աճեցնել',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Փնտրել',\n    'builder'                => 'Կառուցող',\n    'bulk_delete'            => 'Խմբաքանակով ջնջել',\n    'bulk_delete_confirm'    => 'Այո, ջնջե՛լ դրանք',\n    'bulk_delete_nothing'    => 'Դուք չեք ընտրել ոչինչ ջնջելու համար',\n    'cancel'                 => 'Չեղարկել',\n    'choose_type'            => 'Ընտրել տիպը',\n    'click_here'             => 'Սեղմել այստեղ',\n    'close'                  => 'Փակել',\n    'compass'                => 'Կողմացույց',\n    'created_at'             => 'Ստեղծված է',\n    'custom'                 => 'Սովորական',\n    'dashboard'              => 'Ղեկավարման վահանակ',\n    'database'               => 'Տվյալների բազա',\n    'default'                => 'Լռելյայն',\n    'delete'                 => 'Ջնջել',\n    'delete_confirm'         => 'Այո, ջնջել այն',\n    'delete_question'        => 'Համոզված ե՞ք, որ ցանկանում եք ջնջել այս',\n    'delete_this_confirm'    => 'Այո, ջնջել այս',\n    'descending'             => 'Նվազում',\n    'deselect_all'           => 'Վերընտրել բոլորը',\n    'download'               => 'Ներբեռնել',\n    'drag_drop_info'         => 'Քաշել եւ թողնել էլեմենտները վերադասավորելու դրանք:',\n    'edit'                   => 'Խմբագրել',\n    'email'                  => 'Էլ․Հասցե',\n    'error_deleting'         => 'Ներեցե՛ք, կարծես թե առաջացել է խնդիր այն ջնջելու համար',\n    'error_restoring'        => 'Ներեցե՛ք, կարծես թե առաջացել է խնդիր այն վերականգնելու համար',\n    'exception'              => 'Բացառություն',\n    'featured'               => 'Առաջարկվող',\n    'field_does_not_exist'   => 'Դաշտը գոյություն չունի',\n    'home'                   => 'Գլխավոր',\n    'how_to_use'             => 'Ինչպե՞ս օգտագործել',\n    'index'                  => 'Ցուցիչ',\n    'internal_error'         => 'Ներքին սխալ',\n    'items'                  => 'էլեմենտ(ներ)',\n    'keep_sidebar_open'      => 'Թողնել խարիսխները!(և թողնել կողային պատուհանը բաց)',\n    'key'                    => 'Բանալի',\n    'last_modified'          => 'Վերջին փոփոխությունը',\n    'length'                 => 'Երկարություն',\n    'locale'                 => 'Տեղակայումը',\n    'login'                  => 'Մուտք',\n    'logout'                 => 'Ելք',\n    'media'                  => 'Մեդիա ֆայլեր',\n    'menu_builder'           => 'Մենյու կառուցող',\n    'mimetype_not_allowed'   => 'Այս տեսակը թույլատրված չէ',\n    'move'                   => 'Տեղափոխել',\n    'name'                   => 'Անուն',\n    'new'                    => 'Ներ',\n    'no'                     => 'Ոչ',\n    'no_thanks'              => 'Ոչ շնորհակալություն',\n    'none'                   => 'Ոչ ոք',\n    'not_null'               => 'Դատարկ չէ',\n    'no_results'             => 'Չկան արդյունքներ',\n    'open'                   => 'Բաց',\n    'options'                => 'Տարբերակներ',\n    'password'               => 'Գաղտնաբառ',\n    'permissions'            => 'Թույլտվություններ',\n    'profile'                => 'Անձնական էջ',\n    'public_url'             => 'Հանրային URL',\n    'read'                   => 'Կարդալ',\n    'rename'                 => 'Անվանափոխել',\n    'required'               => 'Պարտադիր',\n    'return_to_list'         => 'Վերադառնալ ցուցակին',\n    'route'                  => 'Ուղի',\n    'save'                   => 'Պահպանել',\n    'search'                 => 'Փնտրել',\n    'select_all'             => 'Փնտրել բոլորը',\n    'select_group'           => 'Ընտրել գոյություն ունցող խումբը կամ ստեղծել նորը',\n    'settings'               => 'Կարգավորումներ',\n    'showing_entries'        => 'Ծուցադրվում է :from-ից :to-ը :all գրառումից|Ցուցադրվում է :from-ից :to-ը :all գրառումներից',\n    'submit'                 => 'Ուղարկել',\n    'successfully_added_new' => 'Բարեհաջող ավելացվել է նորը',\n    'successfully_deleted'   => 'Բարեհաջող ջնջվել է',\n    'successfully_restored'  => 'Բարեհաջող վերականգնվել է',\n    'successfully_updated'   => 'Բարեհաջող թարմացվել է',\n    'successfully_created'   => 'Բարեհաջող ստեղծվել է',\n    'sweet_success'          => 'Բարեհաջողված',\n    'timestamp'              => 'Ժամանակահատվածը',\n    'title'                  => 'Վերնագիր',\n    'type'                   => 'Տիպ',\n    'restore'                => 'Վերականգնել',\n    'unsigned'               => 'Չստորագրված',\n    'unstick_sidebar'        => 'Անջատեք կողմնակի շարանը',\n    'update'                 => 'Թարմացնել',\n    'update_failed'          => 'Թարմացումը չեղարկվել է',\n    'updated_order'          => 'Պատվերը թարմացվել է',\n    'upload'                 => 'Ներբեռնել',\n    'url'                    => 'URL հասցե',\n    'view'                   => 'Դիտել',\n    'viewing'                => 'Դիտում',\n    'whoopsie'               => 'Փորձում ենք ուղղել!',\n    'yes'                    => 'Այո',\n    'yes_please'             => 'Այո խնդրում եմ',\n];\n"
  },
  {
    "path": "publishable/lang/am/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Անվավեր JSON',\n    'invalid_message'   => 'Կարծես թե ներկայացրել եք ինչ որ անվավել JSON.',\n    'valid'             => 'Վավեր JSON',\n    'validation_errors' => 'Վավերացման սխալներ',\n];\n"
  },
  {
    "path": "publishable/lang/am/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Մուտք գործել',\n    'signin_below' => 'Մուտք գործել Ստորև:',\n    'welcome'      => 'Բարի գալուստ Voyager: Laravel-ի համար անհայտ ղեկավարող',\n];\n"
  },
  {
    "path": "publishable/lang/am/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Ավելացնել նոր թղթապանակ',\n    'audio_support'          => 'Ձեր բրոուզերը չի սպասարկում աուդիո էլեմենտ։',\n    'create_new_folder'      => 'Ստեղծել նոր թղթապանակ',\n    'delete_folder_question' => 'Ջնջելով թղթապանակը կջնջվեն բոլոր այն ֆայլերը, որոնք գտնվում են նրա ներսում',\n    'delete_question'        => 'Համոզված ե՞ք, որ ցանկանում եք ջնջել համապատասխան ֆայլ(երը)',\n    'destination_folder'     => 'Թղթապանակի պարունակությունը',\n    'drag_drop_info'         => 'Քաշեք և թողեք ֆայլերը կամ սեղմեք ներքևում՝ ներբեռնելու համար',\n    'error_already_exists'   => 'Ներեցե՛ք, արդեն գոյություն ունի տվյալ անունով ֆայլ/թղթապանակ այդ թղթապանակում։',\n    'error_creating_dir'     => 'Ներեցե՛ք, ինչ որ սխալ է տեղի ունեցել գրացուցակը ստեղծելիս, խնդրում ենք ստուգել Ձեր թույտվությունները։',\n    'error_deleting_file'    => 'Ներեցե՛ք, ինչ որ սխալ է տեղի ունեցել այս ֆայլը ջնջելիս, խնդրում ենք ստուգել Ձեր թույտվությունները։',\n    'error_deleting_folder'  => 'Ներեցե՛ք, ինչ որ սխալ է տեղի ունեցել այս թղթապանակը ջնջելիս, խնդրում ենք ստուգել Ձեր թույտվությունները։',\n    'error_may_exist'        => 'Ֆայլը կամ Թղթապանակը գոյություն ունի տվյալ անունով։Խնդրում ենք ընտրել այլ անուն կամ ջնջել մյուս ֆայլը։',\n    'error_moving'           => 'Ներեցե՛ք, ինչ որ խնդիր է տեղի ունեցել այդ Ֆայլը/Թղթապանակը տեղափոխելիս, խնդրում ենք համոզվել, որ Դուք ունեք ճիշտ թույտվություններ։',\n    'error_uploading'        => 'Ներբեռնել ֆայլ: Անհայտ սխալ տեղի ունեցավ',\n    'files'                  => '1 ֆայլ|:count ֆայլեր',\n    'files_more'             => 'Եվ :count շատ',\n    'file_does_not_exist'    => 'Ֆայլը գոյություն չունի',\n    'file_removed'           => 'Ֆայլը ջնջված է',\n    'files_selected'         => 'ֆայլերը/թղթապանակները ընտրված են',\n    'folder_exists_already'  => 'Ներեցեք, այս թղթապանակն արդեն գոյություն ունի, խնդրում ենք ջնջել այդ թղթապանակը, եթե դուք ուզում եք վերստեղծել այն',\n    'image_does_not_exist'   => 'Նկարը գոյություն չունի',\n    'image_removed'          => 'Նկարը ջնջվել է',\n    'library'                => 'Մեդիա գրադարան',\n    'loading'                => 'Բեռնվում են Ձեր մեդիա ֆայլերը',\n    'max_files_select'       => 'Դուք կարող եք միայն ընտրել մեկ ֆայլ|Դուք կարող եք ընտրել առավելագույնը :count ֆայլեր',\n    'min_files_select'       => 'Դուք պետք է ընտրեք առնվազն մեկ ֆայլ|Դուք պետք է ընտրեք առնվազն :count ֆայլեր',\n    'move_file_folder'       => 'Տեղափոխել Ֆայլը/Թղթապանակը',\n    'new_file_folder'        => 'Նոր Ֆայլի/Թղթապանակի անուն',\n    'new_folder_name'        => 'Նոր թղթապանակի անունը',\n    'no_files_here'          => 'Այստեղ ֆայլ չկա',\n    'no_files_in_folder'     => 'Այս թղթապանակում ֆայլ չկա',\n    'nothing_selected'       => 'Ֆայլ կամ թղթապանակ չի ընտրվել',\n    'rename_file_folder'     => 'Անվանափոխել Ֆայլը/Թղթապանակը',\n    'success_uploaded_file'  => 'Բարեհաջող ներբեռնվել է նոր ֆայլ',\n    'success_uploading'      => 'Նկարը բարեհաջող ներբեռնվել է',\n    'success_moved'          => 'Բարեհաջող տեղափոխվել է ֆայլը/թղթապանակը',\n    'success_renamed'        => 'Բարեհաջող անվանափոխվել է ֆայլը/թղթապանակը',\n    'uploading_wrong_type'   => 'Ներբեռնել ֆայլ: Ֆայլի ֆորմատը չի սպասարկվում կամ նրա ծավալը փոքր ինչ շատ է ներբեռնելու համար',\n    'crop'                   => 'Կտրել',\n    'crop_and_create'        => 'Կտրել և Ստեղծել',\n    'crop_override_confirm'  => 'Այն կվերափոխի օրիգինալ նկարը, համոզված ե՞ք',\n    'crop_image'             => 'Կտրել Նկարը',\n    'success_crop_image'     => 'Բարեհաջող կտրեց նկարը',\n    'height'                 => 'Բարձրություն: ',\n    'title'                  => 'Վերնագիր',\n    'type'                   => 'Տիպը',\n    'size'                   => 'Չափը',\n    'public_url'             => 'Հանրային URL',\n    'last_modified'          => 'Վերջին փոփոխությունը',\n    'browser_video_support'  => 'Ձեր բրաուզերը չի սպասարկում վիդեո տեգը',\n    'browser_audio_support'  => 'Ձեր բրաուզերը չի սպասարկում աուդիո էլեմենտը',\n    'width'                  => 'Լայնություն: ',\n    'add_all_selected'       => 'ավելացնել ընտրված բոլորը',\n];\n"
  },
  {
    "path": "publishable/lang/am/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Գույն RGB-ով կամ Hex (ոչ պարտադիր)',\n    'color_ph'             => 'Գույն, օր. #ffffff կամ rgb(255, 255, 255)',\n    'create_new_item'      => 'Ստեղծել նոր մենյուի էլեմենտ',\n    'delete_item_confirm'  => 'Այո, ջնջել այս մենյուի էլեմենտը',\n    'delete_item_question' => 'Համոզված ե՞ք, որ ցանկանում եք ջնջել այս մենյուի էլեմենտը',\n    'drag_drop_info'       => 'Քաշեք և թողեք ներքևում գտնվող մենյուի էլեմենտները վերադասավորելու համար:',\n    'dynamic_route'        => 'Դինամիկ ուղի',\n    'edit_item'            => 'Փոփոխել Մենյու էլեմենտը',\n    'icon_class'           => 'Պատկերի ֆոնտի դասը Մենյու էլեմենտի համար (Օգտագործել',\n    'icon_class2'          => 'Voyager ֆոնտի դասը</a>)',\n    'icon_class_ph'        => 'Պատկերի դասը (ոչ պարտադիր)',\n    'item_route'           => 'Մենյու էլէմենտի ուղին',\n    'item_title'           => 'Մենյու էլեմենտի վերնագիրը',\n    'link_type'            => 'Ուղեցույցի տիպը',\n    'new_menu_item'        => 'Նոր Մենյու էլեմենտ',\n    'open_in'              => 'Բացել',\n    'open_new'             => 'Նոր էջանիշ/Պատուհան',\n    'open_same'            => 'Նույն էջանիշ/Պատուհան',\n    'route_parameter'      => 'Ուղու պարամետրերը (եթե կան)',\n    'static_url'           => 'Ստատիկ URL',\n    'successfully_created' => 'Բարեհաջող ստեղծվել է նոր Մենյու էլեմենտ։',\n    'successfully_deleted' => 'Մենյուի էլեմենտը բարեհաջող ջնջվել է։',\n    'successfully_updated' => 'Մենյուի էլեմենտը բարեհաջող թարմացվել է։',\n    'updated_order'        => 'Մենյուի դասակարգումը բարեհաջող թարմացվել է։',\n    'url'                  => 'URL Մենյու էլեմենտի համար',\n    'usage_hint'           => 'Դուք կարող եք արտածել մենյուն կայքի ցանկացած տեղում՝ կանչելով|Դուք կարող եք արտածել այս մենյուն կայքի ցանկացած տեղում՝ կանչելով',\n];\n"
  },
  {
    "path": "publishable/lang/am/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Լրացուցիչ Դաշտեր',\n    'category'         => 'Գրառման կատեգորիա',\n    'content'          => 'Գրառման Բովանդակություն',\n    'details'          => 'Գրառման մանրամասներ',\n    'excerpt'          => 'Քաղվածք <small>Փոքր նկարագրություն տվյալ գրառման համար</small>',\n    'image'            => 'Գրառման նկար',\n    'meta_description' => 'Մետա նկարագրություն',\n    'meta_keywords'    => 'Մետա բանալի բառ',\n    'new'              => 'Ստեղծել նոր գրառում',\n    'seo_content'      => 'SEO Բովանդակություն',\n    'seo_title'        => 'SEO Վերնագիր',\n    'slug'             => 'URL slug',\n    'status'           => 'Գրառման կարգավիճակը',\n    'status_draft'     => 'սևագիր',\n    'status_pending'   => 'սպասում',\n    'status_published' => 'հրատարակված',\n    'title'            => 'Գրառման Վերնագիր',\n    'title_sub'        => 'Ձեր գրառման վերնագիրը',\n    'update'           => 'Թարմացնել Գրառումը',\n];\n"
  },
  {
    "path": "publishable/lang/am/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'Անձնանշան',\n    'edit'             => 'Փոփոխել իմ անձնական էջը',\n    'edit_user'        => 'Փոփոխել Օգտատերը',\n    'password'         => 'Գաղտնաբառ',\n    'password_hint'    => 'Թողնել դատարկ, որպեսզի պահպանվի նույնը',\n    'role'             => 'Դեր',\n    'roles'            => 'Դերեր',\n    'role_default'     => 'Լռելյայն Դեր',\n    'roles_additional' => 'Լրացուցիչ Դերեր',\n    'user_role'        => 'Օգտատերի Դերը',\n];\n"
  },
  {
    "path": "publishable/lang/am/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Հեղինակ',\n        'avatar'           => 'Անձնանշան',\n        'body'             => 'Մարմին',\n        'category'         => 'Կատեգորիա',\n        'created_at'       => 'Ստեղծված է',\n        'display_name'     => 'Ցուցադրվող անուն',\n        'email'            => 'Էլ․Հասցե',\n        'excerpt'          => 'Ներածություն',\n        'featured'         => 'Առաջարվող',\n        'id'               => 'Համար',\n        'meta_description' => 'Մետա նկարագրություն',\n        'meta_keywords'    => 'Մետա հիմնաբառեր',\n        'name'             => 'Անուն',\n        'order'            => 'Դասավորել',\n        'page_image'       => 'Էջի նկար',\n        'parent'           => 'Ծնող',\n        'password'         => 'Գաղտնաբառ',\n        'post_image'       => 'Գրառման նկար',\n        'remember_token'   => 'Հիշել Token-ը',\n        'role'             => 'Դեր',\n        'seo_title'        => 'SEO Վերնագիր',\n        'slug'             => 'Slug',\n        'status'           => 'Կարգավիճակ',\n        'title'            => 'Վերնագիր',\n        'updated_at'       => 'Թարմացված է',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Կատեգորիա',\n            'plural'   => 'Կատեգորիաներ',\n        ],\n        'menu'     => [\n            'singular' => 'Մենյու',\n            'plural'   => 'Մենյուներ',\n        ],\n        'page'     => [\n            'singular' => 'Էջ',\n            'plural'   => 'Էջեր',\n        ],\n        'post'     => [\n            'singular' => 'Գրառում',\n            'plural'   => 'Գրառումներ',\n        ],\n        'role'     => [\n            'singular' => 'Դեր',\n            'plural'   => 'Դերեր',\n        ],\n        'user'     => [\n            'singular' => 'Օգտատեր',\n            'plural'   => 'Օգտատերեր',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Կատեգորիաներ',\n        'compass'      => 'Կողմնացույց',\n        'dashboard'    => 'Վահանակ',\n        'database'     => 'Տվյալների բազա',\n        'media'        => 'Մեդիա ֆայլեր',\n        'menu_builder' => 'Մենյու կառուցող',\n        'pages'        => 'Էջեր',\n        'posts'        => 'Գրառումներ',\n        'roles'        => 'Դերեր',\n        'settings'     => 'Կարգավորումներ',\n        'tools'        => 'Գործիքներ',\n        'users'        => 'Օգտատերեր',\n    ],\n    'roles'      => [\n        'admin' => 'Ադմինիստրատոր',\n        'user'  => 'Նորմալ օգտատեր',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Ղեկավարման էջի ֆոնային նկար',\n            'description'                => 'Ղեկավարման էջի վերնագիր',\n            'description_value'          => 'Բարի գալուստ Voyager։ Անհայտ ղեկավարող Laravel-ի համար',\n            'google_analytics_client_id' => 'Google Analytics Client ID (used for admin dashboard)',\n            'icon_image'                 => 'Ղեկավարման էջի Icon նկար',\n            'loader'                     => 'Ղեկավարման էջի Բեռնիչ',\n            'title'                      => 'Ղեկավարման էջի Վերնագիր',\n        ],\n        'site'  => [\n            'description'                  => 'Կայքի նկարագրություն',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Կայքի լոգո',\n            'title'                        => 'Կայքի վերնագիր',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/am/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Դուք կարող եք ստանալ յուրաքանչյուր կարգավորման արժեքը կայքի ցանկացած մասում կանչելով',\n    'save'                 => 'Պահպանել կարգավորումները',\n    'new'                  => 'Նոր կարգավորում',\n    'help_name'            => 'Անուն օր․ Admin Title',\n    'help_key'             => 'Բանալի օր․ admin_title',\n    'help_option'          => '(ընտրովի, միայն վերաբերում է որոշակի տեսակների, ինչպիսիք են dropdown-ը կամ radio կոճակը)',\n    'add_new'              => 'Ավելացնել նոր կարգավորում',\n    'delete_question'      => 'Համոզված ե՞ք, որ ցանկանում եք ջնջել :setting կարգավորումը',\n    'delete_confirm'       => 'Այո, ջնջել այս կարգավորումը',\n    'successfully_created' => 'Կարգավորումը բարեհաջող ստեղծվել է',\n    'successfully_saved'   => 'Կարգավորումը բարեհաջող պահպանվել է',\n    'successfully_deleted' => 'Կարգավորումը բարեհաջող ջնջվել է',\n    'already_at_top'       => 'Սա արդեն ցուցակի վերևի մասում է',\n    'already_at_bottom'    => 'Սա արդեն ցուցակի ներքևի մասում է',\n    'key_already_exists'   => 'Բանալին :key արդեն գոյություն ունի',\n    'moved_order_up'       => 'Տեղափոխվել է :name տվյալ կարգավորումը վերև',\n    'moved_order_down'     => 'Տեղափոխվել է :name տվյալ կարգավորումը ներքև',\n    'successfully_removed' => 'Բարեհաջող ջնջվել է :name արժեքը',\n    'group_general'        => 'Ընդհանուր',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Կայք',\n    'group'                => 'Խումբ',\n    'help_group'           => 'Այս խմբի կարգավորումը նշանակում է',\n];\n"
  },
  {
    "path": "publishable/lang/am/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Պատրաստված է <i class=\"voyager-heart\"></i> կողմից',\n    'footer_copyright2' => 'Պատրաստված է սիրով և նույնիսկ ավելի մեծ սիրով:',\n];\n"
  },
  {
    "path": "publishable/lang/ar/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'حسب المشاهدات',\n    'by_sessions'            => 'حسب الجلسات',\n    'by_users'               => 'حسب المستخدمين',\n    'no_client_id'           => 'لعرض التحليلات، ستحتاج إلى الحصول على معرف عميل google analytics وإضافته إلى إعدادات المفتاح <code> google_analytics_client_id </code>. احصل على المفتاح من لوحة تحكم مطوري جوجل:',\n    'set_view'               => 'حدد طريقة العرض',\n    'this_vs_last_week'      => 'هذا الأسبوع ضد الأسبوع الماضي',\n    'this_vs_last_year'      => 'هذا العام ضد العام الماضي',\n    'top_browsers'           => 'أفضل المتصفحات',\n    'top_countries'          => 'أعلى البلدان',\n    'various_visualizations' => 'تصورات مختلفة',\n];\n"
  },
  {
    "path": "publishable/lang/ar/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'أضف BREAD إلى هذا الجدول',\n    'bread_crud_actions'     => 'إجراءات BREAD/CRUD',\n    'bread_info'             => 'معلومات ال BREAD',\n    'controller_name_hint'   => 'مثال PageController, إذا تركت فارغة ستستخدم ال BREAD Controller',\n    'create_bread_for_table' => 'إنشاء ال BREAD للجدول :table',\n    'default_search_key'     => 'الخانة الافتراضية للبحث',\n    'default_search_key_ph'  => 'سيتم تحديد الحقل مسبقًا للبحث عن جانب الخادم',\n    'delete_bread'           => 'حذف ال BREAD',\n    'delete_bread_conf'      => 'نعم، إزالة ال BREAD',\n    'delete_bread_quest'     => 'هل أنت متأكد من حذف ال BREAD للجدول :table ؟',\n    'edit_bread'             => 'تعديل ال BREAD',\n    'edit_bread_for_table'   => 'تعديل ال BREAD للجدول :table',\n    'error_creating_bread'   => 'عذراً، يبدو أن هناك مشكلة في إنشاء هذا ال BREAD',\n    'error_removing_bread'   => 'عذراً، يبدو أنه حدثت مشكلة أثناء إزالة ال BREAD',\n    'error_updating_bread'   => 'عذرا، يبدو أنه قد حدثت مشكلة أثناء تحديث هذا ال BREAD',\n    'error_tagging'          => 'عذرًا ، يبدو أن هناك مشكلة في إنشاء السجل. الرجاء التأكد من أن جدولك يحتوي على إعدادات افتراضية للحقول الأخرى.',\n    'success_created_bread'  => 'تم إنشاء BREAD بنجاح',\n    'success_remove_bread'   => 'تم إزالة ال BREAD من :datatype بنجاح',\n    'success_update_bread'   => 'تم تحديث ال BREAD الخاصة ب :datatype بنجاح',\n    'controller_name'        => 'اسم وحدة التحكم Controller',\n    'create_migration'       => 'هل تريد إنشاء ملف تحديث قاعدة البيانات لهذا الجدول؟',\n    'description'            => 'الوصف',\n    'display_name'           => 'اسم العرض',\n    'display_name_plural'    => 'اسم العرض (جمع)',\n    'display_name_singular'  => 'اسم العرض (مفرد)',\n    'edit_rows'              => 'تعديل الصفوف للجدول :table أدناه',\n    'generate_permissions'   => 'توليد الصلاحيات',\n    'icon_class'             => 'رمز لاستخدامه لهذا الجدول',\n    'icon_hint'              => 'رمز (اختياري) استخدم',\n    'icon_hint2'             => 'معرفات أيقونات فوياجر',\n    'model_class'            => 'اسم فئة النموذج Model Class',\n    'model_name'             => 'اسم النموذج Model',\n    'model_name_ph'          => 'مثال. \\App\\User, إذا تركت فارغة ستستخدم اسم الجدول',\n    'order'                  => 'الترتيب',\n    'order_column'           => 'حقل الترتيب',\n    'order_column_ph'        => 'العمود حيث يتم تخزين الترتيب به',\n    'order_direction'        => 'نوع الترتيب',\n    'order_ident_column'     => 'حقل الترتيب الظاهر',\n    'order_ident_column_ph'  => 'العمود الذي يتم عرضه في صفحة الترتيب',\n    'ordering_not_set'       => 'يجب تختار الترتيب اولاً',\n    'policy_class'           => 'اسم Class البولسي',\n    'policy_name'            => 'اسم البولسي',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, اتركه فارغه ﻷستخدام البولسي الافتراضية',\n    'server_pagination'      => 'ترقيم الصفحات من جانب الخادم',\n    'updated_order'          => 'تم تحديث الترتيب',\n    'url_slug'               => 'رابط URL (يجب أن يكون فريد)',\n    'url_slug_ph'            => 'رابط URL (مثل posts)',\n];\n"
  },
  {
    "path": "publishable/lang/ar/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'إضافة عمود جديد',\n    'add_softdeletes'           => 'إضافة الحذف الناعم soft Deletes',\n    'add_timestamps'            => 'إضافة الطوابع الزمنية Timestamps',\n    'already_exists'            => 'موجود بالفعل',\n    'already_exists_table'      => 'الجدول :table موجود بالفعل',\n    'bread_crud_actions'        => 'إجراءات BREAD/CRUD',\n    'bread_info'                => 'معلومات ال BREAD',\n    'browse_bread'              => 'استعراض BREAD',\n    'column'                    => 'عمود',\n    'composite_warning'         => 'تحذير: هذا العمود جزء من فهرس مركب',\n    'create_new_table'          => 'إنشاء جدول جديد',\n    'create_your_new_table'     => 'إنشاء جدولك الجديد',\n    'default'                   => 'افتراضي',\n    'delete_bread_before_table' => 'الرجاء التأكد من إزالة ال BREAD الخاصة بهذا الجدول قبل حذف الجدول.',\n    'delete_table_confirm'      => 'نعم، احذف هذا الجدول',\n    'delete_table_question'     => 'هل تريد بالتأكيد حذف الجدول :table ؟',\n    'edit_table'                => 'تعديل الجدول :table أدناه',\n    'edit_table_not_exist'      => 'الجدول الذي تريد تعديله غير موجود',\n    'extra'                     => 'إضافي',\n    'field'                     => 'حقل',\n    'field_safe_failed'         => 'أخفق حفظ :field سيتم التراجع!',\n    'index'                     => 'فهرس',\n    'input_type'                => 'نوع الإدخال',\n    'key'                       => 'مفتاح',\n    'name_warning'              => 'يرجى تسمية العمود قبل إضافة فهرس',\n    'no_composites_warning'     => 'يحتوي هذا الجدول على فهارس مركبة. يرجى ملاحظة أنها غير معتمدة في الوقت الراهن. كن حذرا عند محاولة إضافة / إزالة الفهارس.',\n    'null'                      => 'Null',\n    'optional_details'          => 'تفاصيل اختيارية',\n    'policy_class'              => 'اسم فئة السياسة',\n    'policy_name'               => 'اسم السياسة Policy',\n    'policy_name_ph'            => 'مثل \\App\\Policies\\UserPolicy, اذا ترك فارغا سيتم استخدام الافترضي',\n    'primary'                   => 'اساسي Primary',\n    'success_create_table'      => 'تم إنشاء الجدول :table بنجاح',\n    'success_delete_table'      => 'تم حذف الجدول :table بنجاح',\n    'success_update_table'      => 'تم تحديث الدول :table بنجاح',\n    'table_actions'             => 'إجراءات الجدول',\n    'table_columns'             => 'أعمدة الجدول',\n    'table_has_index'           => 'يحتوي الجدول بالفعل على فهرس أساسي.',\n    'table_name'                => 'اسم الجدول',\n    'table_no_columns'          => 'لا يحتوي الجدول على أعمدة ...',\n    'type'                      => 'النوع',\n    'type_not_supported'        => 'هذا النوع غير معتمد',\n    'unique'                    => 'فريد',\n    'unknown_type'              => 'نوع غير معروف',\n    'update_table'              => 'تحديث الجدول',\n    'visibility'                => 'الظهور',\n    'relationship'              => [\n        'relationship'         => 'علاقة',\n        'relationships'        => 'علاقات',\n        'has_one'              => 'لديه واحدة',\n        'has_many'             => 'لديه العديد',\n        'belongs_to'           => 'ينتمي إلى',\n        'belongs_to_many'      => 'ينتمي إلى العديد',\n        'which_column_from'    => 'أي عمود من ',\n        'is_used_to_reference' => 'سيستخدم للدلالة إلى هذه',\n        'pivot_table'          => 'جدول محوري',\n        'selection_details'    => 'تفاصيل الاختيار',\n        'display_the'          => 'عرض العنصر',\n        'store_the'            => 'خزن العنصر',\n        'easy_there'           => 'تمهل قليلا',\n        'before_create'        => 'قبل أن تنشئ علاقة جديدة ستحتاج أن تنشئ BREAD أولا.<br>ثم عد لتعديل ال BREAD وستتمكن من إضافة العلاقات.<br>شكرا.',\n\n        'cancel'               => 'إلغاء',\n        'add_new'              => 'إضافة علاقة جديدة',\n        'open'                 => 'فتح',\n        'close'                => 'إغلاق',\n        'relationship_details' => 'تفاصيل العلاقة',\n        'browse'               => 'استعراض',\n        'read'                 => 'معاينة',\n        'edit'                 => 'تعديل',\n        'add'                  => 'إضافة',\n        'delete'               => 'حذف',\n        'create'               => 'إنشاء علاقة',\n        'namespace'            => 'اسم النموذج Model (مثال App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ar/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'لا تتوفر بيانات في هذا الجدول',\n    'sInfo'           => 'عرض من _START_ إلى _END_ من مجموع _TOTAL_ عنصر',\n    'sInfoEmpty'      => 'عرض عناصر 0 إلى 0 من مجموع 0 عنصر',\n    'sInfoFiltered'   => '(تمت تصفية من مجموع _MAX_ عناصر)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'عرض _MENU_ عنصر',\n    'sLoadingRecords' => 'جار التحميل...',\n    'sProcessing'     => 'جار المعالجة...',\n    'sSearch'         => 'بحث:',\n    'sZeroRecords'    => 'لم يتم العثور على سجلات مطابقة',\n    'oPaginate'       => [\n        'sFirst'    => 'الأول',\n        'sLast'     => 'الأخير',\n        'sNext'     => 'التالي',\n        'sPrevious' => 'السابق',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': فعل لترتيب العمود تصاعديا',\n        'sSortDescending' => ': فعل لترتيب العمود تنازليا',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ar/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'الأسبوع الماضي',\n    'last_year' => 'السنة الماضية',\n    'this_week' => 'هذا الأسبوع',\n    'this_year' => 'هذا العام',\n];\n"
  },
  {
    "path": "publishable/lang/ar/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'صفحات|صفحة',\n    'page_link_text' => 'عرض جميع الصفحات',\n    'page_text'      => 'لديك :count :string في قاعدة البيانات الخاصة بك. انقر على الزر أدناه لعرض جميع الصفحات.',\n    'post'           => 'مقالات|مقالة',\n    'post_link_text' => 'عرض جميع المقالات',\n    'post_text'      => 'لديك :count :string في قاعدة البيانات الخاصة بك. انقر على الزر أدناه لعرض جميع المقالات.',\n    'user'           => 'أعضاء|عضو',\n    'user_link_text' => 'عرض جميع المستخدمين',\n    'user_text'      => 'لديك :count :string في قاعدة البيانات الخاصة بك. انقر على الزر أدناه لعرض جميع المستخدمين.',\n];\n"
  },
  {
    "path": "publishable/lang/ar/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'  => 'لقد أنشأنا للتو الاختصار symlink المفقود.',\n    'symlink_created_title' => 'تم إنشاء الاختصار المفقود symlink إلى storage',\n    'symlink_failed_text'   => 'فشلنا في إنشاء الاختصار المفقود في تطبيقك. يبدو أن مزود خدمة الاستضافة لديك لا يدعمه.',\n\n    'symlink_failed_title'   => 'تعذر إنشاء الاختصار المفقود symlink إلى مجلد التخزين',\n    'symlink_missing_button' => 'إصلاح المشكلة',\n    'symlink_missing_text'   => 'لم نتمكن من العثور على اختصار symlink الى مجلد التخزين. قد يتسبب هذا في حدوث مشكلات في تحميل ملفات الوسائط من المتصفح.',\n\n    'symlink_missing_title' => 'الاختصار symlink إلى مجلد التخزين مفقود',\n];\n"
  },
  {
    "path": "publishable/lang/ar/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'اتركه فارغ لعدم التعديل',\n    'field_select_dd_relationship' => 'تأكد من إعداد العلاقة المناسبة في الطريقة :method الخاصة بالمعرف :class',\n\n    'type_checkbox'       => 'مربع اختيار Checkbox',\n    'type_codeeditor'     => 'محرر أكواد Code Editor',\n    'type_file'           => 'ملف',\n    'type_image'          => 'صورة',\n    'type_radiobutton'    => 'زر اختيار من متعدد Radio Button',\n    'type_richtextbox'    => 'مربع نص منسق Rich Textbox',\n    'type_selectdropdown' => 'قائمة تحديد منسدلة Dropdown',\n    'type_textarea'       => 'منطقة نص Text Area',\n    'type_textbox'        => 'مربع نص Text Box',\n];\n"
  },
  {
    "path": "publishable/lang/ar/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'true',\n    'action'                 => 'إجراء',\n    'actions'                => 'الإجراءات',\n    'add'                    => 'إضافة',\n    'add_folder'             => 'إضافة مجلد',\n    'add_new'                => 'إضافة جديد',\n    'all_done'               => 'تم الكل',\n    'are_you_sure'           => 'هل أنت واثق',\n    'are_you_sure_delete'    => 'هل انت من تأكد من الحذف',\n    'are_you_sure_delete'    => 'هل أنت متأكد أنك تريد الحذف',\n    'auto_increment'         => 'زيادة تلقائية',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'استعراض',\n    'builder'                => 'البناء',\n    'bulk_delete'            => 'حذف متعدد',\n    'bulk_delete_confirm'    => 'نعم, حذف هذه',\n    'bulk_delete_nothing'    => 'لم تقم بتحديد أي عنصر لحذفه',\n    'cancel'                 => 'إلغاء',\n    'choose_type'            => 'اختر النوع',\n    'click_here'             => 'اضغط هنا',\n    'close'                  => 'إغلاق',\n    'compass'                => 'البوصلة',\n    'created_at'             => 'تاريخ الإنشاء',\n    'custom'                 => 'معدل',\n    'dashboard'              => 'لوحة التحكم',\n    'database'               => 'قاعدة البيانات',\n    'default'                => 'افتراضي',\n    'delete'                 => 'حذف',\n    'delete_confirm'         => 'نعم، احذفه!',\n    'delete_question'        => 'هل أنت متأكد أنك تريد الحذف',\n    'delete_this_confirm'    => 'نعم، احذف',\n    'descending'             => 'تنازلي',\n    'deselect_all'           => 'إلغاء تحديد الكل',\n    'download'               => 'تحميل',\n    'drag_drop_info'         => 'اسحب وأفلت العناصر أدناه لإعادة ترتيبها.',\n    'edit'                   => 'تعديل',\n    'email'                  => 'البريد الإلكتروني',\n    'error_deleting'         => 'عذرا، يبدو أنه حدثت مشكلة أثناء الحذف',\n    'exception'              => 'استثناء',\n    'featured'               => 'مميز',\n    'field_does_not_exist'   => 'الحقل غير موجود',\n    'home'                   => 'الرئيسية',\n    'how_to_use'             => 'كيفة الاستخدام',\n    'index'                  => 'فهرس',\n    'internal_error'         => 'خطأ داخلي',\n    'items'                  => 'عناصر',\n    'keep_sidebar_open'      => 'الحفاظ على فتح الشريط الجانبي',\n    'key'                    => 'مفتاح',\n    'last_modified'          => 'آخر تعديل',\n    'length'                 => 'الطول',\n    'locale'                 => 'Locale',\n    'login'                  => 'تسجيل الدخول',\n    'logout'                 => 'تسجيل خروج',\n    'media'                  => 'الوسائط',\n    'menu_builder'           => 'منشئ القوائم',\n    'move'                   => 'نقل',\n    'name'                   => 'الاسم',\n    'new'                    => 'جديد',\n    'no'                     => 'لا',\n    'no_thanks'              => 'لا شكراً',\n    'none'                   => 'لا يوجد',\n    'not_null'               => 'غير فارغة',\n    'no_results'             => 'لا يوجد نتائج',\n    'options'                => 'خيارات',\n    'password'               => 'كلمه السر',\n    'permissions'            => 'الصلاحيات',\n    'profile'                => 'الملف الشخصي',\n    'public_url'             => 'الرابط URL المنشور',\n    'read'                   => 'معاينة',\n    'rename'                 => 'إعادة تسمية',\n    'remember_me'            => 'تذكرني',\n    'required'               => 'مطلوب',\n    'return_to_list'         => 'العودة إلى القائمة',\n    'route'                  => 'Route الرابط',\n    'save'                   => 'حفظ',\n    'search'                 => 'بحث',\n    'select_all'             => 'تحديد الكل',\n    'select_group'           => 'اختر مجموعة موجودة أو أضف جديدة',\n    'settings'               => 'الإعدادت',\n    'showing_entries'        => 'عرض :from إلى :to من :all عنصر|عرض :from إلى :to من :all عناصر',\n    'submit'                 => 'إرسال',\n    'successfully_added_new' => 'تمت إضافة جديد بنجاح',\n    'successfully_deleted'   => 'تم الحذف بنجاح',\n    'successfully_updated'   => 'تم التحديث بنجاح',\n    'timestamp'              => 'صيغة التوقيت',\n    'title'                  => 'العنوان',\n    'type'                   => 'النوع',\n    'unsigned'               => 'غير سالبة',\n    'unstick_sidebar'        => 'إلغاء تثبيت الشريط الجانبي',\n    'update'                 => 'تحديث',\n    'update_failed'          => 'فشل التحديث',\n    'updated_order'          => 'تم تحديث الترتيب',\n    'upload'                 => 'رفع',\n    'url'                    => 'URL الرابط',\n    'view'                   => 'معاينة',\n    'viewing'                => 'معاينة',\n    'yes'                    => 'نعم',\n    'yes_please'             => 'نعم، من فضلك',\n];\n"
  },
  {
    "path": "publishable/lang/ar/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Json غير صالح',\n    'invalid_message'   => 'يبدو أنك عرضت بعض Json الغير صالحة.',\n    'valid'             => 'Json صالح',\n    'validation_errors' => 'أخطاء أثناء التحقق',\n];\n"
  },
  {
    "path": "publishable/lang/ar/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'دخول',\n    'signin_below' => 'تسجيل الدخول :',\n    'welcome'      => 'مرحبا بكم في Voyager. لوحة التحكم المكملة للارافيل',\n];\n"
  },
  {
    "path": "publishable/lang/ar/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'إضافة مجلد جديد',\n    'audio_support'          => 'متصفحك لا يدعم عنصر الصوت.',\n    'create_new_folder'      => 'إنشاء مجلد جديد',\n    'delete_folder_question' => 'سيؤدي حذف مجلد إلى إزالة جميع الملفات والمجلدات الموجودة في داخله',\n    'destination_folder'     => 'مجلد الوجهة',\n    'drag_drop_info'         => 'يمكنك سحب الملفات وإفلاتها أو النقر أدناه لرفعها',\n    'error_already_exists'   => 'عذراً، يوجد بالفعل ملف/مجلد بهذا الاسم في هذا المجلد.',\n    'error_creating_dir'     => 'عذراً يبدو أن هناك خطأ في إنشاء المجلد، يرجى التحقق من صلاحياتك',\n    'error_deleting_file'    => 'عذراً، يبدو أنه حدث خطأ عند حذف هذا الملف، يرجى التحقق من صلاحياتك',\n    'error_deleting_folder'  => 'عذراً، يبدو أنه حدث خطأ عند حذف هذا المجلد، يرجى التحقق من صلاحياتك',\n    'error_may_exist'        => 'قد يكون هناك ملف أو مجلد موجود بالفعل بهذا الاسم. الرجاء اختيار اسم آخر أو حذف الملف الآخر.',\n    'error_moving'           => 'عذراً، يبدو أنه حصلت مشكلة أثناء نقل هذا الملف/المجلد، يرجى التأكد من أن لديك الصلاحيات الصحيحة.',\n    'error_uploading'        => 'أخفق الرفع: حدث خطأ غير معلوم!',\n    'file_does_not_exist'    => 'الملف غير موجود',\n    'file_removed'           => 'الملف تم حذفه',\n    'folder_exists_already'  => 'عذرًا أن المجلد موجود بالفعل ، يرجى حذف هذا المجلد إذا كنت ترغب في إعادة إنشائه',\n    'image_does_not_exist'   => 'الصورة غير موجودة',\n    'image_removed'          => 'تمت إزالة الصورة',\n    'library'                => 'مكتبة الوسائط',\n    'loading'                => 'تحميل ملفات الوسائط الخاصة بك',\n    'move_file_folder'       => 'نقل ملف/مجلد',\n    'new_file_folder'        => 'اسم ملف/مجلد جديد',\n    'new_folder_name'        => 'اسم مجلد جديد',\n    'no_files_here'          => 'لا توجد ملفات هنا.',\n    'no_files_in_folder'     => 'لا توجد ملفات في هذا المجلد.',\n    'nothing_selected'       => 'لم يتم تحديد ملف أو مجلد',\n    'rename_file_folder'     => 'إعادة تسمية ملف/مجلد',\n    'success_uploaded_file'  => 'تم رفع ملف جديد بنجاح!',\n    'success_uploading'      => 'تم رفع الصورة بنجاح!',\n    'uploading_wrong_type'   => 'فشل الرفع: تنسيق الملف غير مدعوم أو أنه كبير جدا لرفعه!',\n    'video_support'          => 'متصفحك الحالي لا يدعم تشغيل الفيديو.',\n    'crop'                   => 'قص',\n    'crop_and_create'        => 'قص وإنشاء',\n    'crop_override_confirm'  => 'ستستبدل الصورة الأصلية, هل أنت متأكد؟',\n    'crop_image'             => 'قص الصورة',\n    'success_crop_image'     => 'تم قص الصورة بنجاح',\n    'height'                 => 'الارتفاع: ',\n    'title'                  => 'العنوان',\n    'type'                   => 'النوع',\n    'size'                   => 'الحجم',\n    'public_url'             => 'الرابط',\n    'last_modified'          => 'آخر تعديل',\n    'browser_video_support'  => 'متصفحك الحالي لا يدعم تشغيل الفيديو.',\n    'browser_audio_support'  => 'متصفحك لا يدعم عنصر الصوت.',\n    'width'                  => 'العرض: ',\n    'add_all_selected'       => 'أضف كل المحدد',\n];\n"
  },
  {
    "path": "publishable/lang/ar/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'اللون بصيغة RGB أو hex (اختياري)',\n    'color_ph'             => 'اللون (مثل #ffffff أو rgb(255, 255, 255)',\n    'create_new_item'      => 'إنشاء عنصر جديد',\n    'delete_item_confirm'  => 'نعم، حذف هذا العنصر من القائمة',\n    'delete_item_question' => 'هل تريد بالتأكيد حذف هذا العنصر من القائمة؟',\n    'drag_drop_info'       => 'سحب وإسقاط عناصر القائمة أدناه لإعادة ترتيبها.',\n    'dynamic_route'        => 'موجه ديناميكي',\n    'edit_item'            => 'تعديل عنصر القائمة',\n    'icon_class'           => 'المعرف (class) لأيقونة عنصر القائمة (استخدم',\n    'icon_class2'          => 'معرفات أيقونات فوياجر</a>)',\n    'icon_class_ph'        => 'معرف الأيقونة (اختياري)',\n    'item_route'           => 'Route الخاص بعنصر القائمة',\n    'item_title'           => 'عنوان عنصر القائمة',\n    'link_type'            => 'نوع الرابط',\n    'new_menu_item'        => 'عنصر جديد',\n    'open_in'              => 'فتح في',\n    'open_new'             => 'تبويب/نافذة جديدة',\n    'open_same'            => 'نفس التبويب/النافذة',\n    'route_parameter'      => 'المتغيرات الخاصة بال Route  (إذا وجدت)',\n    'static_url'           => 'رابط URL ثابت',\n    'successfully_created' => 'تم إنشاء عنصر جديد فى القائمة بنجاح.',\n    'successfully_deleted' => 'تم حذف عنصر القائمة بنجاح.',\n    'successfully_updated' => 'تم تحديث عنصر فى القائمة بنجاح.',\n    'updated_order'        => 'تم تحديث ترتيب القائمة بنجاح.',\n    'url'                  => 'رابط URL لعنصر القائمة',\n    'usage_hint'           => 'يمكنك عرض قائمة في أي مكان في موقعك من طريق استدعاء | يمكنك عرض هذه القائمة في أي مكان على موقعك عن طريق استدعاء',\n];\n"
  },
  {
    "path": "publishable/lang/ar/post.php",
    "content": "<?php\n\nreturn [\n    'category'         => 'قسم المقال',\n    'content'          => 'محتويات المقال',\n    'details'          => 'تفاصيل المقال',\n    'excerpt'          => 'مقتطف <small> وصف صغير لهذا المقال </small>',\n    'image'            => 'صورة المقال',\n    'meta_description' => 'وصف',\n    'meta_keywords'    => 'كلمات دلالية',\n    'new'              => 'إنشاء مقال جديد',\n    'seo_content'      => 'محتوى متوافق مع محركات البحث SEO',\n    'seo_title'        => 'عنوان SEO',\n    'slug'             => 'الرابط URL',\n    'status'           => 'حالة المقال',\n    'status_draft'     => 'مسودة',\n    'status_pending'   => 'معلق',\n    'status_published' => 'منشور',\n    'title'            => 'عنوان المقال',\n    'title_sub'        => 'عنوان مقالك',\n    'update'           => 'تحديث المقال',\n];\n"
  },
  {
    "path": "publishable/lang/ar/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'                 => 'الصورة الرمزية',\n    'edit'                   => 'تعديل',\n    'edit_user'              => 'تعديل المستخدم',\n    'password'               => 'كلمه السر',\n    'password_hint'          => 'اتركها فارغة إذا لم ترد التعديل عليها',\n    'role'                   => 'الدور',\n    'user_role'              => 'دور المستخدم',\n    'role_default'           => 'الصلاحية',\n    'roles_additional'       => 'الصلاحية الإضافية',\n];\n"
  },
  {
    "path": "publishable/lang/ar/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'يمكنك الحصول على قيمة أي إعداد في أي مكان في موقعك عن طريق استخدام',\n    'save'                 => 'احفظ الإعدادات',\n    'new'                  => 'إعداد جديد',\n    'help_name'            => 'اسم الإعداد مثال : Admin Title',\n    'help_key'             => 'مفتاح الإعداد مثال : admin_title',\n    'help_option'          => '(اختياري، ينطبق فقط على أنواع معينة مثل القائمة المنسدلة أو زر الاختيار)',\n    'add_new'              => 'إضافة إعداد جديد',\n    'delete_question'      => 'هل تريد بالتأكيد حذف الإعداد :setting ؟',\n    'delete_confirm'       => 'نعم، حذف هذا الإعداد',\n    'successfully_created' => 'تم إنشاء الإعدادات بنجاح',\n    'successfully_saved'   => 'تم حفظ الإعدادات بنجاح',\n    'successfully_deleted' => 'تم حذف الإعداد بنجاح',\n    'already_at_top'       => 'موجود بالفعل في أعلى القائمة',\n    'already_at_bottom'    => 'موجود بالفعل في أسفل القائمة',\n    'key_already_exists'   => 'المفتاح :key موجود بالفعل',\n    'moved_order_up'       => 'القيمة :name تم نقلها إلى أعلى',\n    'moved_order_down'     => 'القيمة :name تم نقلها إلى أسفل',\n    'successfully_removed' => 'تم إزالة :name بنجاح',\n    'group_general'        => 'عام',\n    'group_admin'          => 'الإدارة',\n    'group_site'           => 'الموقع',\n    'group'                => 'المجموعة',\n    'help_group'           => 'مجموعة هذا الإعداد تنتمي إلى',\n];\n"
  },
  {
    "path": "publishable/lang/ar/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'صنعت بـ <i class=\"voyager-heart\"></i> بواسطة',\n    'footer_copyright2' => 'مصنوعة باستخدام الكثير من القهوة والشاي بالنعناع',\n];\n"
  },
  {
    "path": "publishable/lang/ar/voyager.php",
    "content": "<?php\n\nreturn [\n    'date' => [\n\n    ],\n\n    'generic' => [\n\n    ],\n\n    'login' => [\n\n    ],\n\n    'profile' => [\n\n    ],\n\n    'settings' => [\n\n    ],\n\n    'media' => [\n\n    ],\n\n    'menu_builder' => [\n\n    ],\n\n    'post' => [\n\n    ],\n\n    'bread' => [\n\n    ],\n\n    'database' => [\n\n    ],\n\n    'dimmer' => [\n\n    ],\n\n    'form' => [\n\n    ],\n\n    'datatable' => [\n\n    ],\n\n    'theme' => [\n\n    ],\n\n    'json' => [\n\n    ],\n\n    'analytics' => [\n\n    ],\n\n    'error' => [\n\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/az/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'Səhifənin baxışlarına əsasən',\n    'by_sessions'            => 'Sessiyalara əsasən',\n    'by_users'               => 'İstifadəçilərə əsasən',\n    'no_client_id'           => 'Analitikanı görmək üçün, siz gərək google analikanın \"client id\"-ni əldə edəsiniz və öz ayarlarınıza <code>google_analytics_client_id</code> açarı kimi əlavə edəsiniz. Açarı Google developer konsolundan əldə edə bilərsiniz: ',\n    'set_view'               => 'Görünüşü seçin',\n    'this_vs_last_week'      => 'Hazırki və Keçən həftə',\n    'this_vs_last_year'      => 'Hazırki və Keçən il',\n    'top_browsers'           => 'Top brauzerlər',\n    'top_countries'          => 'Top ölkələr',\n    'various_visualizations' => 'Fərqli vizualizasiyalar',\n];\n"
  },
  {
    "path": "publishable/lang/az/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Bu cədvələ BREADı əlavə et',\n    'bread_crud_actions'     => 'BREAD/CRUD fəaliyyətləri',\n    'bread_info'             => 'BREAD xəbər',\n    'controller_name_hint'   => 'misal. PageController, əgər boş saxlasanız BREAD Controller istifadə olunacaq',\n    'create_bread_for_table' => ':table cədvəli üçün BREAD yarat',\n    'default_search_key'     => 'Server tərəfdə susmaya görə axtarış sahəsi',\n    'default_search_key_ph'  => 'Sahə server tərəfdə axtarış üçün əvvəldən seçilən olacaq.',\n    'delete_bread'           => 'BREAD-ı sil',\n    'delete_bread_conf'      => 'Bəli, BREAD yığışdırılsın (silinsin)',\n    'delete_bread_quest'     => 'Dəqiq :table cədvəli üçün BREAD-in silinməsini istəyirsiz?',\n    'edit_bread'             => 'BREAD-ı dəyiş',\n    'edit_bread_for_table'   => ':table cədvəli üçün BREADı dəyiş',\n    'error_creating_bread'   => 'Təəssüf ki, bu BREAD-ın yaradılmasında problem ola bilər',\n    'error_removing_bread'   => 'Təəssüf ki, bu BREAD-ı silərkən problem yarandı',\n    'error_updating_bread'   => 'Təəssüf ki, bu BREAD-ı yeniləməkdə problem ola bilər',\n    'error_tagging'          => 'Təəssüf ki, qeydin yaradılmasında problem ola bilər. Zəhmət olmasa digər sahələr üçün susmaya görə qiymətin olmasını yoxlayın.',\n    'success_created_bread'  => 'Uğurla yeni BREAD yaradıldı',\n    'success_remove_bread'   => 'Uğurla BREAD :datatype -dan(-dən) silindi',\n    'success_update_bread'   => ':datatype BREAD uğurla yeniləndi',\n    'controller_name'        => 'Kontrollerin adı',\n    'create_migration'       => 'Bu cədvəl üçün miqrasiya yaradım?',\n    'description'            => 'Təsvir',\n    'display_name'           => 'Görsədiləcək ad',\n    'display_name_plural'    => 'Görsədiləcək ad (cəm)',\n    'display_name_singular'  => 'Görsədiləcək ad (tək)',\n    'edit_rows'              => 'Aşağıdakı :table cədvəli üçün sətirləri dəyişin',\n    'generate_permissions'   => 'İcazələri generasiya et',\n    'icon_class'             => 'Cədvəli sitfadə etmək üçün icon',\n    'icon_hint'              => 'İcon (vacib deyil) İstifadə',\n    'icon_hint2'             => 'Voyager Şrift Sinfi',\n    'model_class'            => 'Modelin Sinif adı',\n    'model_name'             => 'Modelin adı',\n    'model_name_ph'          => 'məs. \\App\\User, boş qaldıqda cədvəl adından istifadə etməyə çalışacaq',\n    'order'                  => 'Sıralanma',\n    'order_column'           => 'Sütünu sırala',\n    'order_column_ph'        => 'Sütunun sıralanmasının saxlanma yeri',\n    'order_direction'        => 'Sıralanmanın səmti',\n    'order_ident_column'     => 'Sıralamanın əks olunan sütunu',\n    'order_ident_column_ph'  => 'Sıralama səhifəsində əks olunan sütun',\n    'ordering_not_set'       => 'İlk öncə sıralamanın ardıcıllığını müəyyən etmək lazımdır',\n    'policy_class'           => 'Siyasətin sinif adı',\n    'policy_name'            => 'Siyasət',\n    'policy_name_ph'         => 'məsələn \\App\\Policies\\UserPolicy, əgər boş saxlasaq - susmaya görə olan siyasəti istifadə etməyə cəhd edəcək',\n    'server_pagination'      => 'Paginasiya server tərəfdə',\n    'scope'                  => 'Scope (Əhatə dairəsi)',\n    'soft_deletes_on'        => 'Silinmişləri göstər',\n    'soft_deletes_off'       => 'Silinmişləri gizlət',\n    'updated_order'          => 'Sıralanma uğurla yeniləndi',\n    'url_slug'               => 'URL Slug (unikal olmalıdır)',\n    'url_slug_ph'            => 'URL slug (məsələn, posts)',\n];\n"
  },
  {
    "path": "publishable/lang/az/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Voyager Compassa xoş gəlmisiniz. Bütün yaxşı tətbiqlərə Compass lazımdır ki, onun düzgün istiqamət göstərilsin.\n     Bu bölümdə tətbiqinizi yaratmağa kömək edəcək çoxlu resurs və administrativ misallar tapacaqsınız.',\n    'links'         => [\n        'title'                 => 'Linklər',\n        'documentation'         => 'Dokumentasiya',\n        'voyager_homepage'      => 'Voyager səhifəsi',\n    ],\n    'commands'      => [\n        'title'                 => 'Əmrlər',\n        'text'                  => 'Voyagerdən olan Artisan əmrini işlədin.',\n        'clear_output'          => 'çıxarılanı təmizlə',\n        'command_output'        => 'Artisan əmrinin çıxarılması',\n        'additional_args'       => 'Əlavə arqumentlər?',\n        'run_command'           => 'Əmri işə sal',\n    ],\n    'resources'     => [\n        'title'                 => 'Resurslar',\n        'text'                  => 'Axtardığınızı tez tapmağa kömək edəcək Voyager resursları.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Loglar',\n        'text'                  => 'Tətbiqin logları',\n        'file_too_big'          => 'Log faylı >50M, zəhmət olmasa yükləyin onu.',\n        'level'                 => 'Səviyyə',\n        'context'               => 'Kontekst',\n        'date'                  => 'Tarix',\n        'content'               => 'Mündəricat',\n        'download_file'         => 'Faylı yüklə',\n        'delete_file'           => 'Faylı sil',\n        'delete_all_files'      => 'Bütün faylları sil',\n        'delete_success'        => 'Log faylı uğurla silindi:',\n        'delete_all_success'    => 'Bütün log faylları uğurla silindi',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Şriftlər',\n        'font_class'            => 'Voyager şriftinin siniflərinin xəritəsi',\n        'font_character'        => 'Voyager simvol siniflərinin xəritəsi',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/az/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Yeni sütun əlavə et',\n    'add_softdeletes'           => 'Soft silinməni əlavə et',\n    'add_timestamps'            => 'Vaxt qeydləri əlavə et',\n    'already_exists'            => 'artıq mövcuddur',\n    'already_exists_table'      => 'Cədvəl :table artıq mövcuddur',\n    'bread_crud_actions'        => 'BREAD/CRUD ilə fəaliyyət',\n    'bread_info'                => 'BREAD haqqında məlumat',\n    'browse_bread'              => 'Bax',\n    'column'                    => 'Sütun',\n    'composite_warning'         => 'Xəbərdarlıq: bu sütun kompozit indeksin bir hissəsidir',\n    'create_new_table'          => 'Yeni cədvəl yarat',\n    'create_your_new_table'     => 'Yeni cədvəl yarat',\n    'create_model_table'        => 'Bu cədvəl üçün model yaradım?',\n    'default'                   => 'Susmaya görə',\n    'delete_bread_before_table' => 'Cədvəli silməzdən qabaq mütləq BREAD cədvəlini silin.',\n    'delete_table_confirm'      => 'Bəli, cədvəli sil',\n    'delete_table_question'     => 'Siz həqiqətəndə cədvəli :table silmək istəyirsiniz?',\n    'editing_table'             => ':table cədvəlinin dəyişdirilməsi',\n    'edit_table'                => 'Aşağıda olan :table cədvəlini dəyişdirilməsi',\n    'edit_table_not_exist'      => 'Dəyişmək istədiyiniz cədvəl mövcud deyil',\n    'extra'                     => 'Əlavə',\n    'field'                     => 'Sahə',\n    'field_safe_failed'         => ':field sahəsini yadda saxlamaq alınmadı, əvvəlki dəyərə qaytarılacaq.',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Daxil etmə növü',\n    'key'                       => 'Açar',\n    'name_warning'              => 'İndex əlavə etməzdən cədvəli qeyd edin',\n    'no_composites_warning'     => 'Bu cədvəlin birləşmiş indeksi var. Nəzərə alın ki, onlar hazırda dəstəklənmir. İndeksləri əlavə etmək/çıxarmaq istəyərkən diqqətli olun.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Əlavə məlumatlar',\n    'policy_class'              => 'Policy sinifinin adı',\n    'policy_name'               => 'Policy adı',\n    'policy_name_ph'            => 'məsələn \\App\\Policies\\UserPolicy, əgər boş qalarsa, susmaya görə olan dəyəri istifadə etməyə cəhd edəcək',\n    'primary'                   => 'Əsas açar (Primary key)',\n    'server_pagination'         => 'Server tərəfdə paginasiya',\n    'success_create_table'      => ':table cədvəli uğurla yaradıldı',\n    'success_created_bread'     => 'Yeni BREAD uğurla yaradıldı',\n    'success_delete_table'      => ':table cədvəli uğurla silindi',\n    'success_remove_bread'      => ':datatype üçün BREAD uğurla silindi',\n    'success_update_bread'      => ':datatype üçün BREAD uğurla yeniləndi',\n    'success_update_table'      => ':table cədvəli uğurla yeniləndi',\n    'table_actions'             => 'Cədvəl ilə fəaliyyətlər',\n    'table_columns'             => 'Cədvəlin sütunları',\n    'table_has_index'           => 'Bu cədvəlin artıq əsas açarı var.',\n    'table_name'                => 'Cədvəlin adı',\n    'table_no_columns'          => 'Cədvəldə sütün yoxdur...',\n    'type'                      => 'Növ',\n    'type_not_supported'        => 'Bu növ dəstəklənmir',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Naməlum növ',\n    'update_table'              => 'Cədvəli yenilə',\n    'url_slug'                  => 'URL Slug (Unikal olmalıdır)',\n    'url_slug_ph'               => 'URL slug (məsələn posts)',\n    'visibility'                => 'Görünüş',\n    'relationship'              => [\n        'relationship'         => 'Əlaqə',\n        'relationships'        => 'Əlaqələr',\n        'has_one'              => 'Birin birə',\n        'has_many'             => 'Biri çoxa',\n        'belongs_to'           => 'Çoxu birə',\n        'belongs_to_many'      => 'Çoxdan çoxlarına',\n        'which_column_from'    => 'Hansı sütunun',\n        'is_used_to_reference' => 'istinad etmək üçün istifadə olunur',\n        'pivot_table'          => 'Birləşdirilmiş cədvəl',\n        'selection_details'    => 'Seçim detalları',\n        'display_the'          => 'Göstər',\n        'store_the'            => 'Saxlamaq',\n        'allow_tagging'        => 'Teqləşdirməyə icazə ver',\n        'easy_there'           => 'Bu asandır, Kapitan',\n        'before_create'        => 'Yeni əlaqə qurmazdan qabaq BREAD yaratmaq lazımdır.<br> BREAD dəyişmək üçün geri qayıdın, və siz Əlaqələr əlavə edə biləcəksiz.<br> Təşəkkürlər.',\n        'cancel'               => 'Təxirə sal',\n        'add_new'              => 'Yeni əlaqə əlavə et',\n        'open'                 => 'Aç',\n        'close'                => 'Bağla',\n        'relationship_details' => 'Əlaqələrin detalları',\n        'browse'               => 'Bax',\n        'read'                 => 'Oxu',\n        'edit'                 => 'Dəyiş',\n        'add'                  => 'Əlavə et',\n        'delete'               => 'Sil',\n        'create'               => 'Əlaqə yarat',\n        'namespace'            => 'Ad məkanı modeli (məsələn App\\Models\\Category)',\n    ],\n\n];\n"
  },
  {
    "path": "publishable/lang/az/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Cədvəldə məlumat yoxdur',\n    'sInfo'           => '_START_ dan _END_ də qədər _TOTAL_ dan göstərilən yazı',\n    'sInfoEmpty'      => ' 0 dan 0 yazı göstərilən',\n    'sInfoFiltered'   => '( _MAX_ yazılardan seçilib)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => '_MENU_ yazısını gösdər',\n    'sLoadingRecords' => 'Yazıların yüklənməsi...',\n    'sProcessing'     => 'Gözləyin...',\n    'sSearch'         => 'Axtarış:',\n    'sZeroRecords'    => 'Yazılar yoxdur',\n    'oPaginate'       => [\n        'sFirst'    => 'İlkin',\n        'sLast'     => 'Sonuncu',\n        'sNext'     => 'Növbəti',\n        'sPrevious' => 'Əvvəlki',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': sütunu artan qaydada çeşidləmək üçün aktivləşdirin',\n        'sSortDescending' => ': sütunu azalan qaydada çeşidləmək üçün aktivləşdirin',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/az/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Keçən həftə',\n    'last_year' => 'Keçən il',\n    'this_week' => 'Bu həftə',\n    'this_year' => 'Bu il',\n];\n"
  },
  {
    "path": "publishable/lang/az/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'səhifə|səhifələr',\n    'page_link_text' => 'Bütün səhifələr',\n    'page_text'      => 'Verilənlər bazasında :count :string',\n    'post'           => 'yazı|yazılar',\n    'post_link_text' => 'Bütün yazılar',\n    'post_text'      => 'Verilənlər bazasında :count :string',\n    'user'           => 'istifadəçi|istifadəçilər',\n    'user_link_text' => 'Bütün istifadəçilər',\n    'user_text'      => 'Verilənlər bazasında :count :string',\n];\n"
  },
  {
    "path": "publishable/lang/az/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Sizin üçün link yaratdlq.',\n    'symlink_created_title'  => 'Çatışmayan məlumat anbarı bağlantısı yaradıldı.',\n    'symlink_failed_text'    => 'Çatışmayan linki yaratmaq alınmadı: görünür, hostinq problemidir.',\n    'symlink_failed_title'   => 'Məlumat anbarı üçün keçid linki yaratmaq alınmadı.',\n    'symlink_missing_button' => 'Düzəldin',\n    'symlink_missing_text'   => 'Datastore linki tapılmadı: Bu, media fayllarının endirilməsi ilə bağlı problemlər yarada bilər.',\n    'symlink_missing_title'  => 'Məlumat anbarına keçid linki yoxdur.',\n];\n"
  },
  {
    "path": "publishable/lang/az/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Əgər şifrəni dəyişmək istəmirsinizsə, boş saxlayın',\n    'field_select_dd_relationship' => 'Mütləq müvafiq əlaqələri (relationship) :class sinifinin :method metodunda ayarlayın.',\n    'type_checkbox'                => 'Bayraq',\n    'type_codeeditor'              => 'Kod redaktoru',\n    'type_file'                    => 'Fayl',\n    'type_image'                   => 'Şəkil',\n    'type_radiobutton'             => 'Radio-knopka',\n    'type_richtextbox'             => 'Vizual redaktor',\n    'type_selectdropdown'          => 'Düşən siyahı',\n    'type_textarea'                => 'Çoxsətirli mətn',\n    'type_textbox'                 => 'Təksətirli mətn',\n];\n"
  },
  {
    "path": "publishable/lang/az/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'fəaliyyət',\n    'actions'                => 'Mövcud fəaliyyətlər',\n    'add'                    => 'Əlavə et',\n    'add_folder'             => 'Qovluq yarat',\n    'add_new'                => 'Əlavə et',\n    'all_done'               => 'Hazırdır',\n    'are_you_sure'           => 'Əminsiniz?',\n    'are_you_sure_delete'    => 'Dəqiq silmək istəyirsiniz',\n    'ascending'              => 'Artana görə',\n    'auto_increment'         => 'Auto Increment',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Baxmaq',\n    'builder'                => 'Konstruktor',\n    'bulk_delete'            => 'Seçilmişi silin',\n    'bulk_delete_confirm'    => 'Bəli, silin bunu',\n    'bulk_delete_nothing'    => 'Silmək üçün heçnə seçmədiniz!',\n    'cancel'                 => 'İmtina',\n    'choose_type'            => 'Sahənin növünü seçin',\n    'click_here'             => 'Buraya klikləyin',\n    'close'                  => 'Bağla',\n    'compass'                => 'Dokumentasiya',\n    'created_at'             => 'Yaradılma tarixi',\n    'custom'                 => 'Fərdi kateqoriya',\n    'dashboard'              => 'İdarəetmə paneli',\n    'database'               => 'Verilənlər bazası',\n    'default'                => 'Susmaya görə',\n    'delete'                 => 'Sil',\n    'delete_confirm'         => 'Bəli, sil!',\n    'delete_question'        => 'Siz həqiqətən də bunu silmək istəyirsiniz?',\n    'delete_this_confirm'    => 'Bəli, sil bunu',\n    'descending'             => 'Azalana görə',\n    'deselect_all'           => 'Seçimi ləğv edin',\n    'download'               => 'Yüklənmə',\n    'drag_drop_info'         => 'Çeşidləməni dəyişmək üçün elementlərin yerlərini dəyişdirin',\n    'edit'                   => 'Dəyiş',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Bağışlayın, silərkən xəta baş verdi',\n    'error_restoring'        => 'Bağışlayın, bərpa edərkən xəta baş verdi',\n    'exception'              => 'İstisna',\n    'featured'               => 'Məsləhət görülən',\n    'field_does_not_exist'   => 'Sahələr mövcud deyil',\n    'home'                   => 'Ev (əsas)',\n    'how_to_use'             => 'Necə istifadə edilir',\n    'index'                  => 'İndeks',\n    'internal_error'         => 'Daxili xəta',\n    'items'                  => 'element(lər)',\n    'keep_sidebar_open'      => 'Paneli göstər',\n    'key'                    => 'Açar',\n    'last_modified'          => 'Son dəyişiklik',\n    'length'                 => 'Uzunluq',\n    'locale'                 => 'Local (locale)',\n    'login'                  => 'Giriş',\n    'logout'                 => 'Çıxış',\n    'media'                  => 'Media',\n    'menu_builder'           => 'Menyu konstruktoru',\n    'mimetype_not_allowed'   => 'Bu məlumat növü qadağandır',\n    'move'                   => 'Yerini dəyiş',\n    'name'                   => 'Ad',\n    'new'                    => 'Yenilik',\n    'no'                     => 'Xeyr',\n    'no_thanks'              => 'Xeyr, sağ ol',\n    'none'                   => 'Yoxdur',\n    'not_null'               => 'Null deyil',\n    'no_results'             => 'Məlumat yoxdur',\n    'open'                   => 'Aç',\n    'options'                => 'Parametrlər',\n    'password'               => 'Şifrə',\n    'permissions'            => 'Giriş hüquqları',\n    'profile'                => 'Profil',\n    'public_url'             => 'İctimai URL-adresi',\n    'read'                   => 'Oxunma',\n    'rename'                 => 'Adını dəyiş',\n    'remember_me'            => 'Məni yadda saxla',\n    'required'               => 'Mütləq',\n    'return_to_list'         => 'Siyahıya qayıt',\n    'route'                  => 'Marşrut',\n    'save'                   => 'Yadda saxla',\n    'search'                 => 'Axtar',\n    'select_all'             => 'Hamısını seç',\n    'select_group'           => 'Mövcud qrupu seçin və ya yenisini əlavə edin',\n    'settings'               => 'Ayarlar',\n    'showing_entries'        => ':from dan :to qədər :all yazılar görsədilir|:from dan :to qədər :all yazılar görsədilir',\n    'submit'                 => 'Göndər',\n    'successfully_added_new' => 'Uğurla əlavə edildi',\n    'successfully_deleted'   => 'Uğurla silindi',\n    'successfully_restored'  => 'Uğurlu bərpa',\n    'successfully_updated'   => 'Uğurlu yenilənmə',\n    'successfully_created'   => 'Uğurla yaradıldı',\n    'sweet_success'          => 'Uğurla!',\n    'timestamp'              => 'Vaxt qeydi',\n    'title'                  => 'Adı',\n    'type'                   => 'Növ',\n    'restore'                => 'Bərpa etmək',\n    'unsigned'               => 'İmzasız (Unsigned)',\n    'unstick_sidebar'        => 'Yan paneldən çıxarın',\n    'update'                 => 'Yenilə',\n    'update_failed'          => 'Yenilənmə baş tutmadı',\n    'updated_order'          => 'Çeşidləmə yeniləndi',\n    'upload'                 => 'Yüklənmə',\n    'url'                    => 'URL',\n    'view'                   => 'Bax',\n    'viewing'                => 'Baxmaq',\n    'whoopsie'               => 'Oy!',\n    'yes'                    => 'Bəli',\n    'yes_please'             => 'Bəli, zəhmət olmasa',\n];\n"
  },
  {
    "path": "publishable/lang/az/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'JSON yanlış formatı',\n    'invalid_message'   => 'JSON yanlış format daxil edilib',\n    'valid'             => 'JSON düzgün format',\n    'validation_errors' => 'Məlumatları yoxlayarkən xəta',\n];\n"
  },
  {
    "path": "publishable/lang/az/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Sistemə giriş',\n    'signin_below' => 'İdarəetmə panelinə giriş',\n    'welcome'      => 'Laraveldə çatışmayan, idarəetmə paneli',\n];\n"
  },
  {
    "path": "publishable/lang/az/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Yeni qovluq əlavə et',\n    'audio_support'          => 'Sizin brauzer audio element dəstəkləmir.',\n    'create_new_folder'      => 'Yeni qovluq yarat',\n    'delete_folder_question' => 'Qovluğun silinməsi onun məzmunu da siləcək.',\n    'delete_question'        => 'Bu faylların silinməsində qəti qərarlısız?',\n    'destination_folder'     => 'Hədəf qovluğu',\n    'drag_drop_info'         => 'Faylları sürükləyib buraxın və ya yükləmək üçün aşağıdakı düyməni basın.',\n    'error_already_exists'   => 'Verilmiş kataloqda eyni adlı fayl/qovluq artıq mövcuddur',\n    'error_creating_dir'     => 'Qovluq yaratmaq alınmadı: icazələri yoxlayın',\n    'error_deleting_file'    => 'Faylı silmək alınmadı: icazələri yoxlayın',\n    'error_deleting_folder'  => 'Qovluğu silmək alınmadı: icazələri yoxlayın',\n    'error_may_exist'        => 'Eyni adlı fayl və ya qovluq artıq mövcuddur: başqa ad seçin və ya mövcud faylı silin!',\n    'error_moving'           => 'Fayl və ya qovluğu köçürmək alınmadı: icazələri yoxlayın.',\n    'error_uploading'        => 'Yükləmə xətası: Naməlum xəta baş verdi!',\n    'files'                  => '1 fayl|:count fayllardan',\n    'files_more'             => 'daha çox :count',\n    'file_does_not_exist'    => 'Fayl mövcud deyil',\n    'file_removed'           => 'Fayl silinib',\n    'files_selected'         => 'Fayl/Qovluq seçildi',\n    'folder_exists_already'  => 'Eyni adlı qovluq artıq mövcuddur: eyni adlı yeni qovluq yaratmaq istəyirsinizsə, onu silin.',\n    'image_does_not_exist'   => 'Şəkil mövcud deyil',\n    'image_removed'          => 'Şəkil silinib',\n    'library'                => 'Media kitabxanası',\n    'loading'                => 'FAYLLARINIZ YÜKLƏNİR',\n    'max_files_select'       => 'Siz yalnız bir fayl seçə bilərsiniz|Siz maksimum :count faylı seçə bilərsiniz',\n    'min_files_select'       => 'Siz ən azı bir fayl seçməlisiniz|Siz ən azı :count faylları seçməlisiniz',\n    'move_file_folder'       => 'Faylı/qovluğu köçürün',\n    'new_file_folder'        => 'Faylın/qovluğun yeni adı',\n    'new_folder_name'        => 'Qovluğun yeni adı',\n    'no_files_here'          => 'Burada fayl yoxdur',\n    'no_files_in_folder'     => 'Bu qovluqda fayllar yoxdur',\n    'nothing_selected'       => 'Heçnə seçilməyib',\n    'rename_file_folder'     => 'Faylın/qovluğun adını dəyiş',\n    'success_uploaded_file'  => 'Fayl uğurla yükləndi!',\n    'success_uploading'      => 'Şəkil uğurla yükləndi!',\n    'success_moved'          => 'Fayl/qovluq uğurla köçürüldü',\n    'success_renamed'        => 'Faylın/qovluğun adı uğurla dəyişdirildi',\n    'uploading_wrong_type'   => 'Yükləmə xətası: Dəstəklənməyən fayl formatı və ya fayl ölçüsü yükləmək üçün çox böyükdür!',\n    'crop'                   => 'Kəsmək',\n    'crop_and_create'        => 'Yaratmaq və kəsmək',\n    'crop_override_confirm'  => 'Orijinal şəkil dəyişdiriləcək, əminsinizmi?',\n    'crop_image'             => 'Şəkili kəsmək',\n    'success_crop_image'     => 'Şəkil uğurla kəsildi',\n    'height'                 => 'Hündürlük: ',\n    'title'                  => 'Başlıq',\n    'type'                   => 'Növ',\n    'size'                   => 'Ölçüsü',\n    'public_url'             => 'İctimai link URL',\n    'last_modified'          => 'Son dəyişiklik',\n    'browser_video_support'  => 'Sizin brauser video teqi dəstəkləmir.',\n    'browser_audio_support'  => 'Sizin brauzer audio elemntləri dəstəkləmir.',\n    'width'                  => 'Eni: ',\n    'add_all_selected'       => 'Bütün seçilmişləri əlavə et',\n];\n"
  },
  {
    "path": "publishable/lang/az/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'RGB vəya hex rəngi (vacib deyil)',\n    'color_ph'             => 'Rəng (məsələn, #ffffff vəya rgb(255, 255, 255)',\n    'create_new_item'      => 'Yeni menyu punktu yarat',\n    'delete_item_confirm'  => 'Bəli, sil bu punktu',\n    'delete_item_question' => 'Punktu silməyinizdə qəti qərarlısız?',\n    'drag_drop_info'       => 'Ardıcıllığı dəyişmək üçün punkt meyunu aşağı keçirin.',\n    'dynamic_route'        => 'Dinamik yol',\n    'edit_item'            => 'Punkt menyunu dəyiş',\n    'icon_class'           => 'Punkt menyu üçün ikonka (İstifadə edin ',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'İkonka (vacib deyil)',\n    'item_route'           => 'Punkt menyu route',\n    'item_title'           => 'Punkt menyu başlığı',\n    'link_type'            => 'Link növü',\n    'new_menu_item'        => 'Yeni punkt menyu',\n    'open_in'              => 'Aç',\n    'open_new'             => 'Yeni tab/pəncərə',\n    'open_same'            => 'Eyni tab/pəncərə',\n    'route_parameter'      => 'Routun parametrləri (əgər varsa)',\n    'static_url'           => 'Statik URL',\n    'successfully_created' => 'Punkt menyu uğurla yaradıldı.',\n    'successfully_deleted' => 'Punkt menyu uğurla silindi.',\n    'successfully_updated' => 'Punkt menyu uğurla yeniləndi.',\n    'updated_order'        => 'Menyunun sktrukturu uğurla yeniləndi.',\n    'url'                  => 'URL punkt menyu üçün',\n    'usage_hint'           => 'Siz menyunu saytınızın istənilən yerində istifadə edə bilərsiniz | Siz bu menyunu saytınızın istənilən yerində istifadə edə bilərsiniz',\n];\n"
  },
  {
    "path": "publishable/lang/az/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Əlavə sahələr',\n    'category'         => 'Məqalənin Kateqoriyası',\n    'content'          => 'Məqalənin mətni',\n    'details'          => 'Xüsusiyyətlər',\n    'excerpt'          => 'Anons <small>məqalənin qısa təsviri</small>',\n    'image'            => 'Şəkil',\n    'meta_description' => 'Təsvir (meta)',\n    'meta_keywords'    => 'Açar sözləri (meta)',\n    'new'              => 'Yeni',\n    'seo_content'      => 'SEO mətni',\n    'seo_title'        => 'SEO adı',\n    'slug'             => 'slug',\n    'status'           => 'Paylaşımın statusu',\n    'status_draft'     => 'Cızmaqara',\n    'status_pending'   => 'Moderasiyada',\n    'status_published' => 'Paylaşılıb',\n    'title'            => 'Başlıq',\n    'title_sub'        => 'Məqalənin başlığı',\n    'update'           => 'Yenilə',\n];\n"
  },
  {
    "path": "publishable/lang/az/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'Foto',\n    'edit'             => 'Profil ayarları',\n    'edit_user'        => 'Profili dəyiş',\n    'password'         => 'Şifrə',\n    'password_hint'    => 'Eyni dəyəri saxlamaq üçün sahəni boş saxlayın',\n    'role'             => 'Qrup',\n    'roles'            => 'Rol',\n    'role_default'     => 'Susmaya görə rol',\n    'roles_additional' => 'Əlavə rollar',\n    'user_role'        => 'İstifadəçi qrupu',\n];\n"
  },
  {
    "path": "publishable/lang/az/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Müəllif',\n        'avatar'           => 'Avatar',\n        'body'             => 'Məzmun',\n        'category'         => 'Kateqoriya',\n        'created_at'       => 'Yaradılma tarixi',\n        'display_name'     => 'Təsvir olunan ad',\n        'email'            => 'Email',\n        'excerpt'          => 'Qısa məlumat',\n        'featured'         => 'Prioritetliləşdirib',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Description (Təsvir)',\n        'meta_keywords'    => 'Meta Keywords (Açar sözlər)',\n        'name'             => 'Ad',\n        'order'            => 'Çeşidləmə',\n        'page_image'       => 'Səhifənin şəkili',\n        'parent'           => 'Valideyn',\n        'password'         => 'Şifrə',\n        'post_image'       => 'Məqalənin Şəkli',\n        'remember_token'   => 'Bərpa tokeni',\n        'role'             => 'Rol',\n        'seo_title'        => 'SEO Adı',\n        'slug'             => 'Slug (İAU)',\n        'status'           => 'Statusu',\n        'title'            => 'Adı',\n        'updated_at'       => 'Yenilənmə tarixi',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Kateqoriya',\n            'plural'   => 'Kateqoriyalar',\n        ],\n        'menu'     => [\n            'singular' => 'Menyu',\n            'plural'   => 'Menyu',\n        ],\n        'page'     => [\n            'singular' => 'Səhifə',\n            'plural'   => 'Səhifələr',\n        ],\n        'post'     => [\n            'singular' => 'Məqalə',\n            'plural'   => 'Məqalələr',\n        ],\n        'role'     => [\n            'singular' => 'Rol',\n            'plural'   => 'Rollar',\n        ],\n        'user'     => [\n            'singular' => 'İsdifadəçi',\n            'plural'   => 'İstifadəçilər',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Kateqoriyalar',\n        'compass'      => 'Kompas',\n        'dashboard'    => 'İdarəetmə paneli',\n        'database'     => 'Verilənlər bazası',\n        'media'        => 'Media',\n        'menu_builder' => 'Menyu konstruktoru',\n        'pages'        => 'Səhifələr',\n        'posts'        => 'Məqalələr',\n        'roles'        => 'Rollar',\n        'settings'     => 'Ayarlar',\n        'tools'        => 'İnstrumentlər',\n        'users'        => 'İstifadəçilər',\n    ],\n    'roles'      => [\n        'admin' => 'Administrator',\n        'user'  => 'Adi istifadəçi',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Admin panel fon şəkli',\n            'description'                => 'Admin panelin təsviri',\n            'description_value'          => 'Voyagerə xoş gəlmisiniz. Laravel üçün itmiş admin panel',\n            'google_analytics_client_id' => 'Google Analytics Client ID (Admin panel üçün istifadə olunur)',\n            'icon_image'                 => 'Admin panelin ikonkası',\n            'loader'                     => 'Admin panelin loaderi',\n            'title'                      => 'Admin panelin taytlı',\n        ],\n        'site'  => [\n            'description'                  => 'Saytın təsviri',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Saytın loqosu',\n            'title'                        => 'Saytın taytlı',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/az/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Parametr dəyərlərini əldə etmək üçün şablondakı kodu istifadə edin',\n    'save'                 => 'Ayarları yadda saxla',\n    'new'                  => 'Ayar yarat',\n    'help_name'            => 'Parametrin adı (məsələn, Mənim parametrim)',\n    'help_key'             => 'Parametrin açarı (məsələn, my_parametr)',\n    'help_option'          => '(vacib deyil, ancaq düşən siyahıya (dropdown list) tətbiq olunur vəya radio-buttona)',\n    'add_new'              => 'Yeni parametr əlavə et',\n    'delete_question'      => ':setting paratmerin silinməsində qəti qərarlısız?',\n    'delete_confirm'       => 'Bəli, silin bu parametri',\n    'successfully_created' => 'Parametrlər uğurla yaradıldı',\n    'successfully_saved'   => 'Parametrlər uğurla saxlanıldı',\n    'successfully_deleted' => 'Parametrlər uğurla silindi',\n    'already_at_top'       => 'Siyahının üstündə yerləşdirilib artıq',\n    'already_at_bottom'    => 'Siyahının altında yerləçdirilib artıq',\n    'key_already_exists'   => ':key açarı artıq mövcuddur',\n    'moved_order_up'       => ':name parametri yuxarıya keçirildi',\n    'moved_order_down'     => ':name parametri aşağıya keçirildi',\n    'successfully_removed' => ':name parametrinin qiyməti uğurla silindi',\n    'group_general'        => 'Ümumi',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Sayt',\n    'group'                => 'Qrup',\n    'help_group'           => 'Ayarları qrupa bağla',\n];\n"
  },
  {
    "path": "publishable/lang/az/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => '<i class=\"voyager-heart\"></i> yaradılıb',\n    'footer_copyright2' => 'Rom altında yaradılıb :) ',\n];\n"
  },
  {
    "path": "publishable/lang/bg/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'По преглед на страница',\n    'by_sessions'            => 'По сесии',\n    'by_users'               => 'По потребители',\n    'no_client_id'           => 'За да видите анализи ще трябва да вземете вашият google analytics client id и го добавите към настройките на сайта ви за <code>google_analytics_client_id</code>. За да вземете вашия ключ, отидете в Google developer console:',\n    'set_view'               => 'Изберете преглед',\n    'this_vs_last_week'      => 'Тази седмица срещу последната седмица',\n    'this_vs_last_year'      => 'Тази година срещу последната година',\n    'top_browsers'           => 'Топ Browsers',\n    'top_countries'          => 'Топ Държави',\n    'various_visualizations' => 'Различни визуализации',\n];\n"
  },
  {
    "path": "publishable/lang/bg/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Добавяне на BREAD към тази таблица',\n    'bread_crud_actions'     => 'BREAD/CRUD Опции',\n    'bread_info'             => 'BREAD инфорамция',\n    'controller_name_hint'   => 'пример. PageController, ако е оставено празно ще използваме BREAD Controller',\n    'create_bread_for_table' => 'Създаване на BREAD за таблица :table',\n    'default_search_key'     => 'Поле по подразбиране за server-side търсения',\n    'default_search_key_ph'  => 'Това поле ще бъде използвано за server-side търсене',\n    'delete_bread'           => 'Изтриване на BREAD',\n    'delete_bread_conf'      => 'Да, премахване на BREAD',\n    'delete_bread_quest'     => 'Сигурни ли сте че искате да изтриете BREAD за таблица :table?',\n    'edit_bread'             => 'Редактиране на BREAD',\n    'edit_bread_for_table'   => 'Редактиране на BREAD за таблица :table',\n    'error_creating_bread'   => 'Извиняваме се, изглежда има проблем със създаването на този BREAD',\n    'error_removing_bread'   => 'Извиняваме се, изглежда има проблем със премахването на този BREAD',\n    'error_updating_bread'   => 'Извиняваме се, изглежда има проблем със обновяването на този BREAD',\n    'error_tagging'          => 'Sorry it appears there may have been a problem creating the record. Please make sure your table has defaults for other fields.',\n    'success_created_bread'  => 'Успешно добаване на нов BREAD',\n    'success_remove_bread'   => 'Успешно изтриване на BREAD от :datatype',\n    'success_update_bread'   => 'Успешно обновяване на :datatype BREAD',\n    'controller_name'        => 'Име на Controller',\n    'create_migration'       => 'Създаване на миграция/migration за тази таблица?',\n    'description'            => 'Описание',\n    'display_name'           => 'Display Name',\n    'display_name_plural'    => 'Display Name (Plural)',\n    'display_name_singular'  => 'Display Name (Singular)',\n    'edit_rows'              => 'Редактиране на редове за таблицата :table',\n    'generate_permissions'   => 'Генериране на пермисии',\n    'icon_class'             => 'Иконка за използване на тази Таблица',\n    'icon_hint'              => 'Иконка (по избор) Използвай',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Model Class Name',\n    'model_name'             => 'Име на Model',\n    'model_name_ph'          => 'пример. \\App\\User, ако бъде оставено празно ще опитаме да използваме името на таблицата ',\n    'order'                  => 'Подредба',\n    'order_column'           => 'Колона за подреба',\n    'order_column_ph'        => 'Колона където подредбата е запазена',\n    'order_direction'        => 'Насока на подредбата',\n    'order_ident_column'     => 'Order display column',\n    'order_ident_column_ph'  => 'Колоната която е показана на страницата за подредба',\n    'ordering_not_set'       => 'Трябва да дефенирането подредба първо',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'пример. \\App\\Policies\\UserPolicy, ако е оставено празно ще се изпозлва по подразбиране',\n    'server_pagination'      => 'Server-side Pagination',\n    'scope'                  => 'Обхват',\n    'soft_deletes_on'        => 'Покажи Изтрити',\n    'soft_deletes_off'       => 'Скрий Изтрити',\n    'updated_order'          => 'Подредба обновена успешно',\n    'url_slug'               => 'URL Slug (трябва да бъде уникален)',\n    'url_slug_ph'            => 'URL slug (пример. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/bg/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Добре дошли във Voyager Compass. Всяка хубава апликация има нужда от компас да насочва потребителите към правилната посока.\n\n    В тази секция ще намерите много ресурси и административки задачи, които ще ви помогнат да създадете вашата апликация.',\n    'links'         => [\n        'title'                 => 'Линкове',\n        'documentation'         => 'Документация',\n        'voyager_homepage'      => 'Начална страница на Voyager',\n    ],\n    'commands'      => [\n        'title'                 => 'Команди',\n        'text'                  => 'Run Artisan команди от Voyager.',\n        'clear_output'          => 'изчистване на информация ',\n        'command_output'        => 'Artisan Command Output',\n        'additional_args'       => 'Допълнителни аргументи?',\n        'run_command'           => 'Изпълняване на коамнда',\n    ],\n    'resources'     => [\n        'title'                 => 'Ресурси',\n        'text'                  => 'Voyager ресурси, които ще ви помогнат да намерите всичко по-бързо.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Логове',\n        'text'                  => 'Логове на вашата апликация',\n        'file_too_big'          => 'Лог файл >50M, моля свалето го.',\n        'level'                 => 'Ниво',\n        'context'               => 'Context',\n        'date'                  => 'Дата',\n        'content'               => 'Съдържание',\n        'download_file'         => 'Сваляне на файл',\n        'delete_file'           => 'Изтриване на файл',\n        'delete_all_files'      => 'Изтриване на всички файлове',\n        'delete_success'        => 'Успешно изтри лог файл:',\n        'delete_all_success'    => 'Успешно изтрити всички лог файлове',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Фонтове',\n        'font_class'            => 'Voyager Fonts Class Mapping',\n        'font_character'        => 'Voyager Fonts Character Mapping',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/bg/databale.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Nяма налични данни в таблицата',\n    'sInfo'           => 'Показване _START_ до _END_ от _TOTAL_ записи',\n    'sInfoEmpty'      => 'Показване 0 до 0 от 0 записа',\n    'sInfoFiltered'   => '(Филтрирани  от _MAX_ записи)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Показване на _MENU_ записи',\n    'sLoadingRecords' => 'Зареждане...',\n    'sProcessing'     => 'Обработване...',\n    'sSearch'         => 'Търсене:',\n    'sZeroRecords'    => 'Не са намерени записи',\n    'oPaginate'       => [\n        'sFirst'    => 'Първи',\n        'sLast'     => 'Последен',\n        'sNext'     => 'Следващ',\n        'sPrevious' => 'Предишен',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': активиране за сортиране на колоната във възходящ ред',\n        'sSortDescending' => ': активиране за сортиране на колоната в низходящ ред',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/bg/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Добавяне на нова колона',\n    'add_softdeletes'           => 'Add Soft Deletes',\n    'add_timestamps'            => 'Добавяне на времеви отпечатъци',\n    'already_exists'            => 'вече съществува',\n    'already_exists_table'      => 'Таблицата :table вече съществува',\n    'bread_crud_actions'        => 'BREAD/CRUD действия',\n    'bread_info'                => 'BREAD информация',\n    'browse_bread'              => 'Разгледай BREAD',\n    'column'                    => 'Колона',\n    'composite_warning'         => 'Внимание: тази колона е част от индекс на множество колони',\n    'create_new_table'          => 'Създаване на нова таблица',\n    'create_your_new_table'     => 'Създайте новата си таблица',\n    'create_model_table'        => 'Създаване на модел за тази таблица?',\n    'default'                   => 'По подразбиране',\n    'delete_bread_before_table' => 'Моля изтрийте BREAD на тази таблица преди да изтривата самата нея.',\n    'delete_table_confirm'      => 'Да, изтрии тази таблица.',\n    'delete_table_question'     => 'Сигурни ли сте че искате да изтриете таблицата :table?',\n    'editing_table'             => 'Редактиране на таблица :table',\n    'edit_table'                => 'Редактиране на таблицата :table ',\n    'edit_table_not_exist'      => 'Таблицата, която искате да редактиране не съществува',\n    'extra'                     => 'Допълнителен',\n    'field'                     => 'Поле',\n    'field_safe_failed'         => 'Неуспешно запазване на полето :field, връщаме промените назад!',\n    'index'                     => 'Индекс',\n    'input_type'                => 'Input Type',\n    'key'                       => 'Key',\n    'name_warning'              => 'Моля найменувайте колоната преди да добавите индекс',\n    'no_composites_warning'     => 'Тази таблица има индекс част от множество колони. Имайте предвид, че те не се поддържат. Внимавайте когато се опитвате да добавате/премахвате индекси.',\n    'null'                      => 'null',\n    'optional_details'          => 'Детайли по избор',\n    'policy_class'              => 'Policy Class Name',\n    'policy_name'               => 'Policy Name',\n    'policy_name_ph'            => 'пример. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'primary'                   => 'PRIMARY',\n    'server_pagination'         => 'Server-side Pagination',\n    'success_create_table'      => 'Успешно добавена :table таблица',\n    'success_created_bread'     => 'Успешно създаден BREAD',\n    'success_delete_table'      => 'Успешно изтрита :table таблица',\n    'success_remove_bread'      => 'Успешно изтрит BREAD от :datatype',\n    'success_update_bread'      => 'Успешно обновен :datatype BREAD',\n    'success_update_table'      => 'Успешно обновена :table таблица',\n    'table_actions'             => 'Table Actions',\n    'table_columns'             => 'Колони на таблицата Table Columns',\n    'table_has_index'           => 'The table already has a primary index.',\n    'table_name'                => 'Име на таблицата',\n    'table_no_columns'          => 'Таблицата няма колони...',\n    'type'                      => 'Type',\n    'type_not_supported'        => 'Този тип не се поддържа',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Unknown Type',\n    'update_table'              => 'Обновяване на таблицата',\n    'url_slug'                  => 'URL Slug (трябва да е уникален)',\n    'url_slug_ph'               => 'URL slug (пример Posts)',\n    'visibility'                => 'Видимост',\n    'relationship'              => [\n        'relationship'         => 'Връзка',\n        'relationships'        => 'Връзки',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => 'Коя колона от',\n        'is_used_to_reference' => 'Се използва за препратка на',\n        'pivot_table'          => 'Pivot таблица',\n        'selection_details'    => 'Selection Details',\n        'display_the'          => 'Показване на',\n        'store_the'            => 'Съхраняване на',\n        'allow_tagging'        => 'Allow Tagging',\n        'easy_there'           => 'Успокой се Капитане',\n        'before_create'        => 'Преди да може да създадете нова връзка трябва да създадете BREAD.<br> Когато сте готови се върнете да редактирате BREAD-а и ще можете да добавите връзката.<br> Благодарим.',\n        'cancel'               => 'Отказ',\n        'add_new'              => 'Добавяне на нова връзка',\n        'open'                 => 'Отваряне',\n        'close'                => 'Затваряне',\n        'relationship_details' => 'Детайли за връзката',\n        'browse'               => 'Преглед',\n        'read'                 => 'Прочети',\n        'edit'                 => 'Редактиране',\n        'add'                  => 'Добавяне',\n        'delete'               => 'Изтриване',\n        'create'               => 'Създаване на връзка',\n        'namespace'            => 'Пълен път до и име на модела (пример App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/bg/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'No data available in table',\n    'sInfo'           => 'Showing _START_ to _END_ of _TOTAL_ entries',\n    'sInfoEmpty'      => 'Showing 0 to 0 of 0 entries',\n    'sInfoFiltered'   => '(filtered from _MAX_ total entries)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Show _MENU_ entries',\n    'sLoadingRecords' => 'Loading...',\n    'sProcessing'     => 'Processing...',\n    'sSearch'         => 'Search:',\n    'sZeroRecords'    => 'No matching records found',\n    'oPaginate'       => [\n        'sFirst'    => 'First',\n        'sLast'     => 'Last',\n        'sNext'     => 'Next',\n        'sPrevious' => 'Previous',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': activate to sort column ascending',\n        'sSortDescending' => ': activate to sort column descending',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/bg/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Миналата седмица',\n    'last_year' => 'Миналата година',\n    'this_week' => 'Тази седмица',\n    'this_year' => 'Тази седмица',\n];\n"
  },
  {
    "path": "publishable/lang/bg/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Страница|Страници',\n    'page_link_text' => 'Вижте всички страници',\n    'page_text'      => 'Разполагате с  :count :string във вашата база. Кликнете на бутона за да ги видите всичките.',\n    'post'           => 'Пост|Постове',\n    'post_link_text' => 'Вижте всички постове',\n    'post_text'      => 'Разполагате с  :count :string във вашата база. Кликнете на бутона за да ги видите всичките.',\n    'user'           => 'Потребител|Потребители',\n    'user_link_text' => 'Вижте всички потребители',\n    'user_text'      => 'Разполагате с  :count :string във вашата база. Кликнете на бутона за да ги видите всичките.',\n];\n"
  },
  {
    "path": "publishable/lang/bg/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Създадохме липсвашия symlink за вас',\n    'symlink_created_title'  => 'Липсващ storage symlink създаден',\n    'symlink_failed_text'    => 'Не успяхме да генерираме липсващия symlink за вашата апликация. Изглежда вашия хостинг не го поддържа.',\n    'symlink_failed_title'   => 'Не можахме да създадем липсващия storage symlink',\n    'symlink_missing_button' => 'Поправи го',\n    'symlink_missing_text'   => 'Не можахме да намерим storage symlink. Това може да доведе до проблеми със зареждането на медиа файлове в браузъра.',\n    'symlink_missing_title'  => 'Липсващ storage symlink',\n];\n"
  },
  {
    "path": "publishable/lang/bg/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Оставете празно за да запазите същата стойност',\n    'field_select_dd_relationship' => 'Моля създайте правилната връзка в :method метода на :class класа.',\n    'type_checkbox'                => 'Kвадратче за Oтметка',\n    'type_codeeditor'              => 'Редактор на код',\n    'type_file'                    => 'Файл',\n    'type_image'                   => 'Изображение',\n    'type_radiobutton'             => 'Радио Бутон',\n    'type_richtextbox'             => 'Текстови редактор',\n    'type_selectdropdown'          => 'Падащо меню',\n    'type_textarea'                => 'Текстово област',\n    'type_textbox'                 => 'Текстово поле',\n];\n"
  },
  {
    "path": "publishable/lang/bg/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Действие',\n    'actions'                => 'Действия',\n    'add'                    => 'Добави',\n    'add_folder'             => 'Добави папка',\n    'add_new'                => 'Добави нов',\n    'all_done'               => 'Готово',\n    'are_you_sure'           => 'Сигурни ли сте',\n    'are_you_sure_delete'    => 'Сигурни ли сте че искате да изтриете',\n    'ascending'              => 'Възходящ',\n    'auto_increment'         => 'Auto Increment',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Преглед',\n    'builder'                => 'Строител',\n    'bulk_delete'            => 'Групово изтриване',\n    'bulk_delete_confirm'    => 'Да, изтрии тези',\n    'bulk_delete_nothing'    => 'Не сте селектирали нищо за изтриване',\n    'cancel'                 => 'Отказ',\n    'choose_type'            => 'Изберете тип',\n    'click_here'             => 'Натиснете тук',\n    'close'                  => 'Затворете',\n    'compass'                => 'Compass',\n    'created_at'             => 'Създадено на',\n    'custom'                 => 'Персонализиран',\n    'dashboard'              => 'Dashboard',\n    'database'               => 'База Данни',\n    'default'                => 'По подразбиране',\n    'delete'                 => 'Изтрий',\n    'delete_confirm'         => 'Да, Изтрий го!',\n    'delete_question'        => 'Сигурни ли сте че искате да изтриете това',\n    'delete_this_confirm'    => 'Да, Изтрий го',\n    'descending'             => 'Низходящ',\n    'deselect_all'           => 'Премахни селекция на всички',\n    'download'               => 'Свали',\n    'drag_drop_info'         => 'Плъзнете и пуснете елементите по-долу, за да ги подредите отново.',\n    'edit'                   => 'Редактирай',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Извинете ни, изглежда имаше проблем с изтриването на това',\n    'error_restoring'        => 'Извинете ни, изглежда имаше проблем с възстановането на това',\n    'exception'              => 'Изключение',\n    'featured'               => 'Препоръчани',\n    'field_does_not_exist'   => 'Полето не съществува',\n    'find_by_place'          => 'Намери по Place',\n    'home'                   => 'Home',\n    'how_to_use'             => 'Как се използва',\n    'index'                  => 'Индекс',\n    'internal_error'         => 'Internal error',\n    'items'                  => 'item(s)',\n    'keep_sidebar_open'      => 'Yarr! Пуснете котвите! (и дружте страничното меню отворено)',\n    'key'                    => 'Ключ',\n    'last_modified'          => 'Последно модифициран',\n    'latitude'               => 'Ширина',\n    'length'                 => 'Дължина',\n    'locale'                 => 'Език',\n    'login'                  => 'Вход',\n    'logout'                 => 'Изход',\n    'longitude'              => 'Дължина',\n    'media'                  => 'Медия',\n    'menu_builder'           => 'Меню стройтел',\n    'mimetype_not_allowed'   => 'Този mimetype не е позволен',\n    'move'                   => 'Move',\n    'name'                   => 'Име',\n    'new'                    => 'Нов',\n    'no'                     => 'Не',\n    'no_thanks'              => 'Не благодаря',\n    'none'                   => 'None',\n    'not_null'               => 'Not Null',\n    'no_results'             => 'Няма резултати',\n    'open'                   => 'Отвори',\n    'options'                => 'Опции',\n    'password'               => 'Парола',\n    'permissions'            => 'Пермисии',\n    'profile'                => 'Профил',\n    'public_url'             => 'Публичен URL',\n    'read'                   => 'Прочети',\n    'rename'                 => 'Прейменувай',\n    'remember_me'            => 'Запомни ме',\n    'required'               => 'Задължително',\n    'return_to_list'         => 'Върнете се в списъка',\n    'route'                  => 'Route',\n    'save'                   => 'Запази',\n    'search'                 => 'Търсене',\n    'select_all'             => 'Селектирай всички',\n    'select_group'           => 'Селектрай съществуваща група или създай нова',\n    'settings'               => 'Настройки',\n    'showing_entries'        => 'Показване :from до :to от :all запис|Показване :from до :to от :all записи',\n    'submit'                 => 'Submit',\n    'successfully_added_new' => 'Успешно добавен нов',\n    'successfully_deleted'   => 'Успешно изтрит',\n    'successfully_restored'  => 'Успешно възстановен',\n    'successfully_updated'   => 'Успешно обновен',\n    'successfully_created'   => 'Успешно създаден',\n    'sweet_success'          => 'Оо да, успех!',\n    'timestamp'              => 'Добавяне на времеви отпечатъци',\n    'title'                  => 'Заглавие',\n    'type'                   => 'Тип',\n    'restore'                => 'Възстанови',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'Unstick the страничното меню',\n    'update'                 => 'Обнови',\n    'update_failed'          => 'Неуспешно обновяване',\n    'updated_order'          => 'Подредбата е обновена',\n    'upload'                 => 'Качване',\n    'url'                    => 'URL',\n    'view'                   => 'Преглед',\n    'viewing'                => 'Преглед',\n    'whoopsie'               => 'Опаа!',\n    'yes'                    => 'Да',\n    'yes_please'             => 'Да, моля',\n];\n"
  },
  {
    "path": "publishable/lang/bg/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Неправилен JSON',\n    'invalid_message'   => 'Изглежда представихте неправилен JSON.',\n    'valid'             => 'Валиден JSON',\n    'validation_errors' => 'Проблеми с валидацията',\n];\n"
  },
  {
    "path": "publishable/lang/bg/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Влизане',\n    'signin_below' => 'Влезте по-долу:',\n    'welcome'      => 'Добре дошли във Voyager. Липсващата Админ система за Ларавел',\n];\n"
  },
  {
    "path": "publishable/lang/bg/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Добавяне на нова папка',\n    'audio_support'          => 'Вашия браузър не поддържка аудио елемента.',\n    'create_new_folder'      => 'Създаване на нова папка',\n    'delete_folder_question' => 'Изтриването на папка ще изтрие всички файлове и папки съдържащи се с нея',\n    'delete_question'        => 'Сигурен ли сте че искате да изтриете следния/следните файл/файлове?',\n    'destination_folder'     => 'Дестинация Папка',\n    'drag_drop_info'         => 'Плъзнете и пуснете файлове или щракнете по-долу, за да качите',\n    'error_already_exists'   => 'Извиняваме се, вече съществува файл/папка със същото име в тази папка.',\n    'error_creating_dir'     => 'Извиняваме се, нещо се обърка при създаването на директорията, моля проверете вашите пермисии',\n    'error_deleting_file'    => 'Извиняваме се, нещо се обърка при изтриването на този файл, моля проверете вашите пермисии',\n    'error_deleting_folder'  => 'Извиняваме се, нещо се обърка при изтриването на тази папка, моля проверете вашите пермисии',\n    'error_may_exist'        => 'Възможно е вече да съществуват папка или файл с това име. Моля изберете ново име или изтриийте другия файл/папка.',\n    'error_moving'           => 'Извиняваме се, нещо се обърка при местеното на този/тази файл/папка, моля проверете вашите пермисии.',\n    'error_uploading'        => 'Грешка при качването: Възникна неизвестна грешка!',\n    'files'                  => '1 файл|:count файла',\n    'files_more'             => 'и :count още',\n    'file_does_not_exist'    => 'Файлът не съществува',\n    'file_removed'           => 'Файлът бе премахнат',\n    'files_selected'         => 'селектирани файлове/папки',\n    'folder_exists_already'  => 'Извиняваме се, папката вече съществува.Моля изтрийте тази папка ако искате да я пресъздадете',\n    'image_does_not_exist'   => 'Изображението не съществува',\n    'image_removed'          => 'Изображението бе премахнато',\n    'library'                => 'Медийна библутека',\n    'loading'                => 'Зареждане на вашите медия файлове',\n    'max_files_select'       => 'Можете да селектирате само един файл|Можете да селектирате максимум :count файла',\n    'min_files_select'       => 'Трябва да селектирате поне един файл|Трябва да селектирате поне :count файла',\n    'move_file_folder'       => 'Премести Файл/Папка',\n    'new_file_folder'        => 'Ново име на файл/папка',\n    'new_folder_name'        => 'Ново име на папка',\n    'no_files_here'          => 'Няма файлове тук.',\n    'no_files_in_folder'     => 'Няма файлове в тази папка.',\n    'nothing_selected'       => 'Няма селектирани файлове или папки',\n    'rename_file_folder'     => 'Прейменувай папката/файла',\n    'success_uploaded_file'  => 'Файлът бе качен успешно!',\n    'success_uploading'      => 'Изображението бе качено успешно!',\n    'success_moved'          => 'Папката/файлът бе преместена успешно',\n    'success_renamed'        => 'Папката/файлът бе пременуван/а успешно',\n    'uploading_wrong_type'   => 'Проблем при качването: Форматът не се поддържа или размера е твърде голям за да се качи!',\n    'crop'                   => 'Изрежи',\n    'crop_and_create'        => 'Изрежи & Създай',\n    'crop_override_confirm'  => 'Ще замени оригиналното изображение, сигурен ли сте?',\n    'crop_image'             => 'Изрежи Изображение',\n    'success_crop_image'     => 'Изображението бе изрязано успешно',\n    'height'                 => 'Височина: ',\n    'title'                  => 'Заглавие',\n    'type'                   => 'Тип',\n    'size'                   => 'Размер',\n    'public_url'             => 'Публичен URL',\n    'last_modified'          => 'Последно модифициран',\n    'browser_video_support'  => 'Бразърът ви не поддържа този видео таг.',\n    'browser_audio_support'  => 'Бразърът ви не поддържа този аудио елемент.',\n    'width'                  => 'Ширина: ',\n    'add_all_selected'       => 'добавете всички избрани',\n];\n"
  },
  {
    "path": "publishable/lang/bg/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Цвят в RGB или Hex (по избор)',\n    'color_ph'             => 'Цвят, #ffffff или rgb(255, 255, 255)',\n    'create_new_item'      => 'Създаване на нов меню елемент',\n    'delete_item_confirm'  => 'Да, изтрий този елемент от менюто',\n    'delete_item_question' => 'Наистина ли искате да изтриете този елемент от менюто?',\n    'drag_drop_info'       => 'Drag and drop the menu Items below to re-arrange them.',\n    'dynamic_route'        => 'Динамичен път/линк',\n    'edit_item'            => 'Редактиране на елемент от менюто',\n    'icon_class'           => 'Клас на икона за елемент от менюто (Използвайте ',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icon Class (по избор)',\n    'item_route'           => 'Линк за елемента от менюто',\n    'item_title'           => 'Заглавие на елемента от менюто',\n    'link_type'            => 'Вид на линка',\n    'new_menu_item'        => 'Нов елемент от менюто',\n    'open_in'              => 'Отвори в',\n    'open_new'             => 'Нов таб / прозорец',\n    'open_same'            => 'Същият таб / прозорец',\n    'route_parameter'      => 'Параметри на линка (ако има такива)',\n    'static_url'           => 'Статичен линк/URL',\n    'successfully_created' => 'Успешно създаден нов елемент от менюто.',\n    'successfully_deleted' => 'Успешно изтрит елемент от менюто.',\n    'successfully_updated' => 'Успешно актуализиран елемент от менюто.',\n    'updated_order'        => 'Успешно актуализирана подредбата на менюто.',\n    'url'                  => 'URL адрес на елемента от менюто',\n    'usage_hint'           => 'Можете да изведете меню навсякъде на вашия сайт, като извикате | Можете да изведете това меню навсякъде на вашия сайт, като извикате',\n];\n"
  },
  {
    "path": "publishable/lang/bg/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Допълнителни полета',\n    'category'         => 'Категория',\n    'content'          => 'Съдържание',\n    'details'          => 'Детайли',\n    'excerpt'          => 'Извадка <small>Кратко описание на поста</small>',\n    'image'            => 'Снимка',\n    'meta_description' => 'Мета описание',\n    'meta_keywords'    => 'Мета ключови думи',\n    'new'              => 'Създаване на нов пост',\n    'seo_content'      => 'SEO съдържание',\n    'seo_title'        => 'SEO заглавие',\n    'slug'             => 'URL',\n    'status'           => 'Статус',\n    'status_draft'     => 'чернова',\n    'status_pending'   => 'изчакващ',\n    'status_published' => 'публикувано',\n    'title'            => 'Заглавие',\n    'title_sub'        => 'Заглавието на поста ви',\n    'update'           => 'Запази промените',\n];\n"
  },
  {
    "path": "publishable/lang/bg/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'Аватар',\n    'edit'             => 'Редактиране на моя профил',\n    'edit_user'        => 'Редактиране на потребител',\n    'password'         => 'Парола',\n    'password_hint'    => 'Оставете празно, за да запазите старата',\n    'role'             => 'Роля',\n    'roles'            => 'Роли',\n    'role_default'     => 'Роля по подразбиране',\n    'roles_additional' => 'Допълнителни роли',\n    'user_role'        => 'Роля на потребителя',\n];\n"
  },
  {
    "path": "publishable/lang/bg/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Автор',\n        'avatar'           => 'Аватар',\n        'body'             => 'Съдържание',\n        'category'         => 'Категория',\n        'created_at'       => 'Създадено на',\n        'display_name'     => 'Име',\n        'email'            => 'Имейл',\n        'excerpt'          => 'Извадка',\n        'featured'         => 'Препоръчан',\n        'id'               => 'ID',\n        'meta_description' => 'Мета Описание',\n        'meta_keywords'    => 'Мета ключови думи',\n        'name'             => 'Име',\n        'order'            => 'Ред',\n        'page_image'       => 'Изображение на страницата',\n        'parent'           => 'Родител',\n        'password'         => 'Парола',\n        'post_image'       => 'Изображение на поста',\n        'remember_token'   => 'Remember Token',\n        'role'             => 'Роля',\n        'seo_title'        => 'SEO Заглавие',\n        'slug'             => 'Slug',\n        'status'           => 'Статус',\n        'title'            => 'Заглавие',\n        'updated_at'       => 'Променено на',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Категория',\n            'plural'   => 'Категории',\n        ],\n        'menu'     => [\n            'singular' => 'Меню',\n            'plural'   => 'Менюта',\n        ],\n        'page'     => [\n            'singular' => 'Страница',\n            'plural'   => 'Страници',\n        ],\n        'post'     => [\n            'singular' => 'Пост',\n            'plural'   => 'Постове',\n        ],\n        'role'     => [\n            'singular' => 'Роля',\n            'plural'   => 'Роли',\n        ],\n        'user'     => [\n            'singular' => 'Потребител',\n            'plural'   => 'Потребители',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Категории',\n        'compass'      => 'Compass',\n        'dashboard'    => 'Dashboard',\n        'database'     => 'База данни',\n        'media'        => 'Медия',\n        'menu_builder' => 'Настройки на Менюто',\n        'pages'        => 'Страници',\n        'posts'        => 'Постове',\n        'roles'        => 'Роли',\n        'settings'     => 'Настройки',\n        'tools'        => 'Инструменти',\n        'users'        => 'Потребители',\n    ],\n    'roles'      => [\n        'admin' => 'Администратор',\n        'user'  => 'Нормален потребител',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Админ Изображение',\n            'description'                => 'Админ Описание',\n            'description_value'          => 'Добре дошли във Voyager. Липсващият админ панел за Laravel',\n            'google_analytics_client_id' => 'Google Analytics Client ID (използва се за административно табло)',\n            'icon_image'                 => 'Админ Лого',\n            'loader'                     => 'Админ Loader',\n            'title'                      => 'Админ Заглавие',\n        ],\n        'site'  => [\n            'description'                  => 'Описание на сайта',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Лого на сайта',\n            'title'                        => 'Заглавие на сайта',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/bg/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Можете да получите стойността на всяка настройка навсякъде на вашия сайт, като се извика',\n    'save'                 => 'Запазване на настройките',\n    'new'                  => 'Нова настройка',\n    'help_name'            => 'Наименование на настройка ex: Админ Заглавие',\n    'help_key'             => 'Ключ за настройка ex: admin_title',\n    'help_option'          => '(по избор, прилагат се същите опции, както за съответното поле на формата)',\n    'add_new'              => 'Добавяне на нова настройка',\n    'delete_question'      => 'Сигурни ли сте, че искате да изтриете :setting настройка?',\n    'delete_confirm'       => 'Да, изтрий тази настройка',\n    'successfully_created' => 'Настройките са успешно създадени',\n    'successfully_saved'   => 'Успешно запазване на настройките',\n    'successfully_deleted' => 'Успешно изтриване на настройките',\n    'already_at_top'       => 'Това вече е в най-горната част на списъка',\n    'already_at_bottom'    => 'Това вече е в най-долнате част на списъка',\n    'key_already_exists'   => 'Ключът :key вече съществува',\n    'moved_order_up'       => 'Настройката с име :name беше преместена на горе',\n    'moved_order_down'     => 'Настройката с име :name беше преместена на долу',\n    'successfully_removed' => 'Успешно премахване на :name',\n    'group_general'        => 'Общи',\n    'group_admin'          => 'Админ',\n    'group_site'           => 'Сайт',\n    'group'                => 'Група',\n    'help_group'           => 'Group this setting is assigned to',\n];\n"
  },
  {
    "path": "publishable/lang/bg/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Направено с <i class=\"voyager-heart\"></i> от',\n    'footer_copyright2' => 'Направено с ром и още ром',\n];\n"
  },
  {
    "path": "publishable/lang/ca/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'Per pàgina',\n    'by_sessions'            => 'Per sessions',\n    'by_users'               => 'Per usuaris',\n    'no_client_id'           => 'Per veure la analitica, es necessita una ID de client de Google Analytics i afegir-la a la configuració amb la clau <code>google_analytics_client_id</code>. Pots obtenir la clau de Google a la consola de desenvolupadors de Google: ',\n    'set_view'               => 'Seleccionar una vista',\n    'this_vs_last_week'      => 'Aquesta setmana vs la semana anterior',\n    'this_vs_last_year'      => 'Any actual vs Any anterior',\n    'top_browsers'           => 'Principals Navegadors',\n    'top_countries'          => 'Principals països',\n    'various_visualizations' => 'Varies visualizacions',\n];\n"
  },
  {
    "path": "publishable/lang/ca/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Afegir BREAD a la taula',\n    'bread_crud_actions'     => 'Accions BREAD / CRUD',\n    'bread_info'             => 'Informació del BREAD',\n    'controller_name_hint'   => 'Exemple. PageController, si es deixa buit, utilizarà el controlador BREAD ',\n    'create_bread_for_table' => 'Crear BREAD per a la taula :table',\n    'delete_bread'           => 'Eliminar BREAD',\n    'delete_bread_conf'      => 'Sí, eliminar el BREAD',\n    'delete_bread_quest'     => 'Estàs segur d\\'eliminar el BREAD per a la taula :table?',\n    'edit_bread'             => 'Editar BREAD',\n    'edit_bread_for_table'   => 'Editar BREAD per a la taula :table',\n    'error_creating_bread'   => 'Ho sento, hi ha hagut un problema al crear el BREAD',\n    'error_removing_bread'   => 'Ho sento, hi ha hagut un problema al eliminar el BREAD',\n    'error_updating_bread'   => 'Ho sento, hi ha hagut un problema al actualitzar el BREAD',\n    'success_created_bread'  => 'BREAD creat',\n    'success_remove_bread'   => 'BREAD del tipo :datatype borrat',\n    'success_update_bread'   => 'Actualitzat correctament el BREAD :datatype',\n    'controller_name'        => 'Nom del Controlador',\n    'create_migration'       => 'Crear migració per a aquesta taula?',\n    'create_model_table'     => 'Crear model per a aquesta taula?',\n    'description'            => 'Descripció',\n    'display_name'           => 'Nom per a mostrar',\n    'display_name_plural'    => 'Nom de visualizació (Plural)',\n    'display_name_singular'  => 'Nom de visualizació (Singular)',\n    'edit_rows'              => 'Editar les files de la taula següent:',\n    'generate_permissions'   => 'Generar permisos',\n    'icon_class'             => 'Icona a utilizar per a esta taula',\n    'icon_hint'              => 'Icona (opcional) utilitzar una ',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Nom de classe del model',\n    'model_name'             => 'Nom del model',\n    'model_name_ph'          => 'ex. \\App\\User, si es deixa buit s\\intentarà fer servir el Nom de la taula ',\n    'policy_class'           => 'Classe de restriccions',\n    'policy_name'            => 'Nom de restriccions',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, si es deixa buit, intentará fer servir el valor predeterminat',\n    'server_pagination'      => 'Paginació del servidor',\n    'updated_order'          => 'Ordre actualitzat correctament',\n    'url_slug'               => 'URL Slug (ha de ser únic)',\n    'url_slug_ph'            => 'URL slug (ex posts)',\n];\n"
  },
  {
    "path": "publishable/lang/ca/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Benvingut al Compàs de Voyager. Cada bona aplicació necessita un compàs perquè l\\'apunti en la direcció correcta. En aquesta seccion trobaràs moltes fonts i tasques administratives que t\\'ajudaran a guiar-te mentre construeixes la teva aplicació.',\n    'links'         => [\n        'title'                 => 'Links',\n        'documentation'         => 'Documentació',\n        'voyager_homepage'      => 'Pàgina de inici de Voyager',\n    ],\n    'commands'      => [\n        'title'                 => 'Comandes',\n        'text'                  => 'Corre comandes de Artisan desde Voyager',\n        'clear_output'          => 'borrar text',\n        'command_output'        => 'Resultat de la Commanda de Artisan',\n        'additional_args'       => 'Arguments Addicionals?',\n        'run_command'           => 'Executar commanda',\n    ],\n    'resources'     => [\n        'title'                 => 'Fonts',\n        'text'                  => 'Les fonts de Voyager t\\'ajudaran a trobar les coses ràpidament.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Registres',\n        'text'                  => 'Els registres de la teva aplicació',\n        'file_too_big'          => 'L\\'arxiu de regsitre pesa >50M, descarrega\\'l.',\n        'level'                 => 'Nivell',\n        'context'               => 'Context',\n        'date'                  => 'Data',\n        'content'               => 'Contingut',\n        'download_file'         => 'Descargar arxiu',\n        'delete_file'           => 'Eliminar arxiu',\n        'delete_all_files'      => 'Eliminar tots els arxius',\n        'delete_success'        => 'S\\'ha eliminat l\\'arxiu:',\n        'delete_all_success'    => 'Arxius eliminats correctament',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Fonts',\n        'font_class'            => 'Mapa de la Classe de Fonts de Voyager',\n        'font_character'        => 'Mapa dels Caràcacters de Fonts de Voyager',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ca/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Afegir nova columna',\n    'add_softdeletes'           => 'Afegir Soft Deletes',\n    'add_timestamps'            => 'Afegir Timestamps',\n    'already_exists'            => 'ja existeix',\n    'already_exists_table'      => 'La taula :table ja existeix',\n    'column'                    => 'Columna',\n    'composite_warning'         => 'Advertencia: aquesta columna forma part de un index compost',\n    'create_new_table'          => 'Crear nova taula',\n    'create_your_new_table'     => 'Crear nova taula',\n    'default'                   => 'Per defecte',\n    'delete_bread_before_table' => 'Assegura\\'s de treure el BREAD d\\'aquesta taula abans d\\'esborrar la taula.',\n    'delete_table_confirm'      => 'Sí, eliminar taula',\n    'delete_table_question'     => 'Eliminar taula :table?',\n    'description'               => 'Descripció',\n    'display_name'              => 'Nom per a mostrar',\n    'display_name_plural'       => 'Nom de visualizació (Plural)',\n    'display_name_singular'     => 'Nom de visualizació (Singular)',\n    'edit_bread'                => 'Editar BREAD',\n    'edit_bread_for_table'      => 'Editar BREAD per a la taula :table',\n    'edit_rows'                 => 'Editar files de la taula següent',\n    'edit_table'                => 'Editar la taula següent:',\n    'edit_table_not_exist'      => 'La taula que vols editar no existeix',\n    'editing_table'             => 'Editant la taula :table',\n    'extra'                     => 'Extra',\n    'field'                     => 'Camp',\n    'field_safe_failed'         => 'No es pot guardar el camp :field, Tornant enrere! ',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Tipo de entrada',\n    'key'                       => 'Clau',\n    'name_warning'              => 'Si us plau, posa un nom a la Columna abans de afegir un index',\n    'no_composites_warning'     => 'Aquesta taula té índexs composts. Tingui en compte que en aquest moment no s\\'admeten. Vagi amb compte en intentar afegir/treure índexs.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Detalls opcionals',\n    'policy_class'              => 'Clase de restriccions',\n    'policy_name'               => 'Nom de restriccions',\n    'policy_name_ph'            => 'ex. \\App\\Policies\\UserPolicy, si es deixa buit, intentará fer servir el valor predeterminat',\n    'primary'                   => 'PRIMARI',\n    'server_pagination'         => 'Paginació del Servidor',\n    'success_create_table'      => 'Taula :table creada',\n    'success_created_bread'     => 'BREAD creat',\n    'success_delete_table'      => 'Taula :table eliminada correctament',\n    'success_remove_bread'      => 'BREAD de tipo :datatype borrat correctament',\n    'success_update_bread'      => 'Actualitzat correctament el BREAD :datatype',\n    'success_update_table'      => 'Taula :table actualitzada correctament',\n    'table_actions'             => 'Accions de la taula',\n    'table_columns'             => 'Columnes de la taula',\n    'table_has_index'           => 'La taula ja té un index primari.',\n    'table_name'                => 'Nom de la taula',\n    'table_no_columns'          => 'La taula no te columnes ...',\n    'type'                      => 'Tipo',\n    'type_not_supported'        => 'Tipo no compatible',\n    'unique'                    => 'ÚNIC',\n    'unknown_type'              => 'Tipo desconegut',\n    'update_table'              => 'Actualizar taula',\n    'url_slug'                  => 'URL Slug (ha de ser únic)',\n    'url_slug_ph'               => 'URL slug (ex posts)',\n    'visibility'                => 'Visibilitat',\n    'relationship'              => [\n        'relationship'         => 'Relació',\n        'relationships'        => 'Relacions',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => 'Quina columna de',\n        'is_used_to_reference' => 'fa referència a',\n        'pivot_table'          => 'taula Pivot',\n        'selection_details'    => 'Selecció de Detalls',\n        'display_the'          => 'Veure de',\n        'store_the'            => 'Guardar de',\n        'easy_there'           => 'Tranquil Mariner',\n        'before_create'        => 'Abans que pugui crear una nova relació, primer haurà de crear el BREAD. <br> Després, torni per a editar el BREAD i podrà agregar relacions. Gràcies.',\n        'cancel'               => 'Cancelar',\n        'add_new'              => 'Afegir Nova Relació',\n        'open'                 => 'Obrir',\n        'close'                => 'Tancar',\n        'relationship_details' => 'Detalls de la Relació',\n        'browse'               => 'Veure',\n        'read'                 => 'Llegir',\n        'edit'                 => 'Editar',\n        'add'                  => 'Afegir',\n        'delete'               => 'Eliminar',\n        'create'               => 'Crear una Relació',\n        'namespace'            => 'Namespace del Model (ex. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ca/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'No hi ha dades disponibles',\n    'sInfo'           => 'Mostrant de _START_ a _END_ de _TOTAL_ entrades',\n    'sInfoEmpty'      => 'Mostrant de 0 a 0 de 0 entradas',\n    'sInfoFiltered'   => '(Filtrada de _MAX_ entrades totals)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Mostrar _MENU_ entrades',\n    'sLoadingRecords' => 'Carregant...',\n    'sProcessing'     => 'Processant...',\n    'sSearch'         => 'Cercar:',\n    'sZeroRecords'    => 'No s\\'han trobat coincidencies',\n    'oPaginate'       => [\n        'sFirst'    => 'Primer',\n        'sLast'     => 'Últim',\n        'sNext'     => 'Següent',\n        'sPrevious' => 'Anterior',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': Activar per a ordenar la columna ascendent',\n        'sSortDescending' => ': Activar per a ordenar la columna descendent',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ca/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'La setmana passada',\n    'last_year' => 'L\\'any passat',\n    'this_week' => 'Aquesta setmana',\n    'this_year' => 'Aquest any',\n];\n"
  },
  {
    "path": "publishable/lang/ca/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Pàgina|Pàgines',\n    'page_link_text' => 'Veure totes les pàgines',\n    'page_text'      => 'Tens :count :string a la base de dades. Fes click al boto de a sota per veure totes les pàgines. ',\n    'post'           => 'Post|Posts',\n    'post_link_text' => 'Veure tots els posts',\n    'post_text'      => 'Tiene :count :string a la base de dades. Fes click al boto de a sota per veure tots els posts. ',\n    'user'           => 'Usuario|Usuarios',\n    'user_link_text' => 'Veure tots els usuaris',\n    'user_text'      => 'Tens :count :string a la base de dades. Fes click al boto de a sota per veure tots els usuaris. ',\n];\n"
  },
  {
    "path": "publishable/lang/ca/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Hem creat l\\'enllaç simbòlic que faltava.',\n    'symlink_created_title'  => 'Hem creat l\\'enllaç simbòlic que faltava.',\n    'symlink_failed_text'    => 'No s\\'ha pogut crear l\\'enllaç simbòlic que faltava. El teu proveïdor web no ens ho permet',\n    'symlink_failed_title'   => 'No s\\'ha pogut crear l\\'enllaç simbòlic que faltava.',\n    'symlink_missing_button' => 'Arregla-ho',\n    'symlink_missing_text'   => 'No s\\'ha pogut crear l\\'enllaç simbòlic que faltava per a storage. Això pot afectar als elements multimedia.',\n    'symlink_missing_title'  => 'No s\\'ha pogut crear l\\'enllaç simbòlic que faltava per a storage.',\n];\n"
  },
  {
    "path": "publishable/lang/ca/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Deixar buit per mantenir el mateix',\n    'field_select_dd_relationship' => 'Assegura\\'t de crear la relació apropiada en el mètode :method de la clase :class.',\n    'type_checkbox'                => 'Casella de verificació',\n    'type_codeeditor'              => 'Editor de codi',\n    'type_file'                    => 'Arxiu',\n    'type_image'                   => 'Imatge',\n    'type_radiobutton'             => 'Botó de radi',\n    'type_richtextbox'             => 'Caixa de text enriquit',\n    'type_selectdropdown'          => 'Seleccionar Desplegable',\n    'type_textarea'                => 'Àrea de text',\n    'type_textbox'                 => 'Caixa de text',\n];\n"
  },
  {
    "path": "publishable/lang/ca/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Acció',\n    'actions'                => 'Accions',\n    'add'                    => 'Afegir',\n    'add_folder'             => 'Afegir carpeta',\n    'add_new'                => 'Afegir nou',\n    'all_done'               => 'Tot llest',\n    'are_you_sure'           => 'Estas segur',\n    'are_you_sure_delete'    => 'Estas segur que vols eliminar-ho',\n    'auto_increment'         => 'Autoincrement',\n    'browse'                 => 'Navegar',\n    'builder'                => 'Constructor',\n    'bulk_delete'            => 'Borrat massiu',\n    'bulk_delete_confirm'    => 'Sí, eliminar!',\n    'bulk_delete_nothing'    => 'Has de seleccionar com a mínim un registre per a fer el borrat massiu',\n    'cancel'                 => 'Cancelar',\n    'choose_type'            => 'Escollir tipo',\n    'click_here'             => 'Fes clic aquí',\n    'close'                  => 'Tancar',\n    'compass'                => 'Compàs',\n    'created_at'             => 'Creat el',\n    'custom'                 => 'Personalitzat',\n    'dashboard'              => 'Taulell',\n    'database'               => 'Base de dades',\n    'default'                => 'Per defecte',\n    'delete'                 => 'Eliminar',\n    'delete_confirm'         => 'Sí, Eliminar!',\n    'delete_question'        => 'Estas segur que vols eliminar això',\n    'delete_this_confirm'    => 'Sí, eliminar',\n    'deselect_all'           => 'Deseleccionar tot',\n    'download'               => 'Descarregar',\n    'drag_drop_info'         => 'Arrosega els Items a sota per a reordenar-los.',\n    'edit'                   => 'Editar',\n    'email'                  => 'Email',\n    'error_deleting'         => 'Ho sento, s\\'ha produït un error al eliminar',\n    'exception'              => 'Exepció',\n    'featured'               => 'Destacats',\n    'field_does_not_exist'   => 'El camp no existeix',\n    'how_to_use'             => 'Com fer-ho servir',\n    'index'                  => 'Index',\n    'internal_error'         => 'Error intern',\n    'items'                  => 'Item(s)',\n    'keep_sidebar_open'      => '¡Yarr! ¡Suelta las anclas! (Y mantén la barra lateral abierta) ',\n    'key'                    => 'Clau',\n    'last_modified'          => 'Última modificació',\n    'length'                 => 'Longitud',\n    'login'                  => 'Iniciar sessió',\n    'media'                  => 'Multimedia',\n    'menu_builder'           => 'Constructor de menús',\n    'move'                   => 'Moure',\n    'name'                   => 'Nom',\n    'new'                    => 'Nou',\n    'no'                     => 'No',\n    'no_thanks'              => 'No, gràcies',\n    'not_null'               => 'No null',\n    'no_results'             => 'Sense resultats',\n    'none'                   => 'Cap',\n    'options'                => 'Opcions',\n    'password'               => 'Contrasenya',\n    'permissions'            => 'Permisos',\n    'profile'                => 'Perfil',\n    'public_url'             => 'URL pública',\n    'read'                   => 'Llegir',\n    'remember_me'            => 'Recorda\\'m',\n    'rename'                 => 'Renombrar',\n    'required'               => 'Necessari',\n    'return_to_list'         => 'Tornar a la lista',\n    'route'                  => 'Ruta',\n    'save'                   => 'Guardar',\n    'search'                 => 'Cercar',\n    'select_all'             => 'Seleccionar tot',\n    'select_group'           => 'Selecciona un grup existent o afegeix un',\n    'settings'               => 'Configuració',\n    'showing_entries'        => 'Mostrant de :from a :to de :all entrades | Mostrant de :from a :to totes les entrades',\n    'submit'                 => 'Enviar',\n    'successfully_added_new' => 'Afegit correctament',\n    'successfully_deleted'   => 'Eliminado correctament',\n    'successfully_updated'   => 'Actualitzat correctament',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'Títol',\n    'type'                   => 'Tipo',\n    'unsigned'               => 'No assignat',\n    'unstick_sidebar'        => 'Desplegar la barra lateral',\n    'update'                 => 'Actualizar',\n    'update_failed'          => 'Actualizació fallida',\n    'updated_order'          => 'Ordre actualitzat',\n    'upload'                 => 'Pujar',\n    'url'                    => 'URL',\n    'view'                   => 'Veure',\n    'viewing'                => 'Veient',\n    'yes'                    => 'Sí',\n    'yes_please'             => 'Sí, si us plau',\n];\n"
  },
  {
    "path": "publishable/lang/ca/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Json invàlid',\n    'invalid_message'   => 'Sembla que has introduït un Json invàlid',\n    'valid'             => 'Json vàlid',\n    'validation_errors' => 'Errors de validació',\n];\n"
  },
  {
    "path": "publishable/lang/ca/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Iniciant sessió',\n    'signin_below' => 'Iniciar sessió:',\n    'welcome'      => 'Benvingut a Voyager. L\\'administrador que faltava a Laravel ',\n];\n"
  },
  {
    "path": "publishable/lang/ca/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Afegir nova carpeta',\n    'audio_support'          => 'El seu navegador no admet arxius d\\'audio',\n    'create_new_folder'      => 'Crear nova carpeta',\n    'delete_folder_question' => 'Eliminar una carpeta eliminarà tots els arxius i carpetes de dins',\n    'destination_folder'     => 'Carpeta de destí',\n    'drag_drop_info'         => 'Arrossega i deixa anar arxius o faci clic a baix per a carregar',\n    'error_already_exists'   => 'Ho sento, ja exiteix un arxiu/carpeta amb aquest nom',\n    'error_creating_dir'     => 'Ho sento, alguna cosa sembla haver anat malament amb la creació del directori, si us plau revisi els seus permisos',\n    'error_deleting_file'    => 'Ho sento, alguna cosa sembla haver anat malament amb en l\\'esborrat de l\\'arxiu, si us plau revisi els seus permisos',\n    'error_deleting_folder'  => 'Ho sento, alguna cosa sembla haver fallat en eliminar aquesta carpeta, si us plau revisi els seus permisos    ',\n    'error_may_exist'        => 'Pot ser que ja existeixi un arxiu o carpeta amb aquest nom. Si us plau, tria un altre nom o esborri l\\'altre arxiu.',\n    'error_moving'           => 'Ho sento, sembla que hi ha un problema en moure aquest arxivo/carpeta, si us plau assegura\\'t de tenir els permisos correctes.',\n    'error_uploading'        => 'Error desconegut',\n    'folder_exists_already'  => 'Ho sento, la carpeta ja existeix, elimina la carpeta si la vols tornar a crear',\n    'image_does_not_exist'   => 'La imatge no existeix',\n    'image_removed'          => 'Imatge eliminada',\n    'library'                => 'Mediateca',\n    'loading'                => 'CARREGANT ARXIUS MULTIMEDIA',\n    'move_file_folder'       => 'Moure Arxiu/Carpeta',\n    'new_file_folder'        => 'Renombrar arxiu/carpeta',\n    'new_folder_name'        => 'Nom de la nova carpeta',\n    'no_files_here'          => 'No hi ha arxius aquí.',\n    'no_files_in_folder'     => 'No hi ha arxius en aquesta carpeta.',\n    'nothing_selected'       => 'No s\\'ha seleccionat cap arxiu o carpeta',\n    'rename_file_folder'     => 'Renombrar arxiu/carpeta',\n    'success_uploaded_file'  => 'Nou arxiu pujat correctament!',\n    'success_uploading'      => 'Imatge carregada exitosamente!',\n    'uploading_wrong_type'   => 'Fallo de càrrega: format de arxiu no soportat, o massa gran!',\n    'video_support'          => 'El teu navegador no soporta la etiqueta de vídeo.',\n    'crop'                   => 'Tallar',\n    'crop_and_create'        => 'Tallar & Crear',\n    'crop_override_confirm'  => 'S\\'anularà la imatge original, estas segur?',\n    'crop_image'             => 'Tallar imatge',\n    'success_crop_image'     => 'Imatge tallada correctament',\n    'height'                 => 'Alt: ',\n    'width'                  => 'Ample: ',\n];\n"
  },
  {
    "path": "publishable/lang/ca/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Color en RGB o hex (opcional)',\n    'color_ph'             => 'Color (ex, #ffffff o rgb (255, 255, 255)',\n    'create_new_item'      => 'Crear una nova opció de menú',\n    'delete_item_confirm'  => 'Sí, eliminar la opción del menú',\n    'delete_item_question' => 'Estas segur que vols eliminar aquesta opció del menú?',\n    'drag_drop_info'       => 'Arrossega i deixa anar les opcions del menú per a reorganitzar-les',\n    'dynamic_route'        => 'Ruta Dinàmica',\n    'edit_item'            => 'Editar opció del menú',\n    'icon_class'           => 'Icona per a la opció de menú (Fes servir una',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icona (opcional)',\n    'item_route'           => 'Ruta per a la opció de menú',\n    'item_title'           => 'Títol de la opció de menú',\n    'link_type'            => 'Tipo de enllaç',\n    'new_menu_item'        => 'Nova opció de menú',\n    'open_in'              => 'Obrir',\n    'open_new'             => 'Nova pestanya / finestra',\n    'open_same'            => 'Mateixa pestanya / finestra',\n    'route_parameter'      => 'Paràmetres de ruta (si existeixen)',\n    'static_url'           => 'URL estàtica',\n    'successfully_created' => 'S\\'ha creat una nova opció de menú',\n    'successfully_deleted' => 'Opció de menú eliminada correctament.',\n    'successfully_updated' => 'Opció de menú actualitzada correctament.',\n    'updated_order'        => 'Ordre actualitzat correctament.',\n    'url'                  => 'URL per a la opció de menú',\n    'usage_hint'           => 'Pot emetre un menú en qualsevol lloc del seu lloc cridant a ',\n];\n"
  },
  {
    "path": "publishable/lang/ca/post.php",
    "content": "<?php\n\nreturn [\n    'category'         => 'Categoria del Post',\n    'content'          => 'Contingut del Post',\n    'details'          => 'Detalls del Post',\n    'excerpt'          => 'Extracte<small> Petita descripció del post </small>',\n    'image'            => 'Publicar imatge',\n    'meta_description' => 'Meta Descripció',\n    'meta_keywords'    => 'Meta paraules clau',\n    'new'              => 'Crear nou post',\n    'seo_content'      => 'Contingut SEO',\n    'seo_title'        => 'Títol SEO',\n    'slug'             => 'URL slug',\n    'status'           => 'Estat del Post',\n    'status_draft'     => 'borrador',\n    'status_pending'   => 'pendent',\n    'status_published' => 'publicat',\n    'title'            => 'Títol del Post',\n    'title_sub'        => 'El títol de Post',\n    'update'           => 'Actualitzar Post',\n];\n"
  },
  {
    "path": "publishable/lang/ca/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => 'Avatar',\n    'edit'          => 'Editar el meu perfil',\n    'edit_user'     => 'Editar usuari',\n    'password'      => 'Contrasenya',\n    'password_hint' => 'Deixar buit per mantenir la mateixa',\n    'role'          => 'Rol',\n    'user_role'     => 'Rol d\\'usuari',\n];\n"
  },
  {
    "path": "publishable/lang/ca/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Autor',\n        'avatar'           => 'Avatar',\n        'body'             => 'Cos',\n        'category'         => 'Categoria',\n        'created_at'       => 'Creat per',\n        'display_name'     => 'Nom a Mostrar',\n        'email'            => 'Correu Electrònic',\n        'excerpt'          => 'Extracte',\n        'featured'         => 'Destacat',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Descripció',\n        'meta_keywords'    => 'Meta Paraules Clau',\n        'name'             => 'Nom',\n        'order'            => 'Ordre',\n        'page_image'       => 'Imatge de la pàgina',\n        'parent'           => 'Pare',\n        'password'         => 'Constrasenya',\n        'post_image'       => 'Imatge del Post',\n        'remember_token'   => 'Token de Recordatori',\n        'role'             => 'Rol',\n        'seo_title'        => 'Títol SEO',\n        'slug'             => 'Slug',\n        'status'           => 'Estat',\n        'title'            => 'Títol',\n        'updated_at'       => 'Actualitzat a',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Categoria',\n            'plural'   => 'Categories',\n        ],\n        'menu'     => [\n            'singular' => 'Menú',\n            'plural'   => 'Menús',\n        ],\n        'page'     => [\n            'singular' => 'Pàgina',\n            'plural'   => 'Pàgines',\n        ],\n        'post'     => [\n            'singular' => 'Post',\n            'plural'   => 'Posts',\n        ],\n        'role'     => [\n            'singular' => 'Rol',\n            'plural'   => 'Rols',\n        ],\n        'user'     => [\n            'singular' => 'Usuari',\n            'plural'   => 'Usuaris',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Categories',\n        'compass'      => 'Compàs',\n        'dashboard'    => 'Taulell',\n        'database'     => 'Base de Dades',\n        'media'        => 'Media',\n        'menu_builder' => 'Disenyador de Menú',\n        'pages'        => 'Pàgines',\n        'posts'        => 'Posts',\n        'roles'        => 'Rols',\n        'settings'     => 'Configuració',\n        'tools'        => 'Eines',\n        'users'        => 'Usuaris',\n    ],\n    'roles'      => [\n        'admin' => 'Administrador',\n        'user'  => 'Usuari Normal',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Imatge de Fons del Administrador',\n            'description'                => 'Descripció del Administrador',\n            'description_value'          => 'Benvingut a Voyager. L\\'administrador que faltava a Laravel',\n            'google_analytics_client_id' => 'ID de Client per a Google Analytics (fet servir al taulell)',\n            'icon_image'                 => 'Imatge de l\\'Icona del Administrador',\n            'loader'                     => 'Imatge de Càrrega del Administrador',\n            'title'                      => 'Títol del Administrador',\n        ],\n        'site'  => [\n            'description'                  => 'Descripció del Lloc',\n            'google_analytics_tracking_id' => 'ID de Rastreig de Google Analytics',\n            'logo'                         => 'Logo del Lloc',\n            'title'                        => 'Títol del Lloc',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ca/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Pot obtenir el valor de cada paràmetre en qualsevol lloc del seu lloc cridant',\n    'save'                 => 'Guardar paràmetre',\n    'new'                  => 'Nou paràmetre',\n    'help_name'            => 'Nom del paràmetre Ex: Títol de Pàgina',\n    'help_key'             => 'Clau del paràmetre Ex: pag_titol',\n    'help_option'          => '(Opcional, només s\\'aplica a certs tipos com el desplegable o a les opcions)',\n    'add_new'              => 'Afegir nou paràmetre',\n    'delete_question'      => 'Segur que vols eliminar el paràmetre :setting?',\n    'delete_confirm'       => 'Sí, eliminar el paràmetre',\n    'successfully_created' => 'Paràmetre creat correctament',\n    'successfully_saved'   => 'Paràmetre guardat correctament',\n    'successfully_deleted' => 'Paràmetre eliminat correctament',\n    'already_at_top'       => 'Això ja esta a la part superior de la llista',\n    'already_at_bottom'    => 'Això ja esta a la part inferior de la llista',\n    'key_already_exists'   => 'Aquesta opció ja està creada',\n    'moved_order_up'       => 'Ordre del paràmetre :name augmentat',\n    'moved_order_down'     => 'Ordre del paràmetre :name disminuït',\n    'successfully_removed' => 'Eliminat correctament el paràmetre :name ',\n    'group_general'        => 'General',\n    'group_admin'          => 'Administrador',\n    'group_site'           => 'Lloc',\n    'group'                => 'Grup',\n    'help_group'           => 'Aquesta opció està assignada a',\n];\n"
  },
  {
    "path": "publishable/lang/ca/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Fet amb <i class = \"voyager-heart\"> </i> per',\n    'footer_copyright2' => 'Fet amb ron i inclús més ron',\n];\n"
  },
  {
    "path": "publishable/lang/cs/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'  => 'Podle zobrazení stránky',\n    'by_sessions'  => 'Podle sezení',\n    'by_users'     => 'Podle uživatelů',\n    'no_client_id' => 'Pro zobrazení analytických dat musíte znát klientské ID z Google Analytics '.\n                                 'a přidat ho pro konfiguraci pro klíč <code>google_analytics_client_id'.\n                                 '</code>. Obdržte svůj klíč z Google developer konzole:',\n    'set_view'               => 'Vyberte zobrazení',\n    'this_vs_last_week'      => 'tento týden vs minulý týden',\n    'this_vs_last_year'      => 'tento rok vs minulý rok',\n    'top_browsers'           => 'Top prohlížeče',\n    'top_countries'          => 'Top země',\n    'various_visualizations' => 'Různé vizualizace',\n];\n"
  },
  {
    "path": "publishable/lang/cs/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Add BREAD to this table',\n    'bread_crud_actions'     => 'BREAD/CRUD Actions',\n    'bread_info'             => 'BREAD info',\n    'controller_name_hint'   => 'ex. PageController, if left empty will use the BREAD Controller',\n    'create_bread_for_table' => 'Create BREAD for :table table',\n    'delete_bread'           => 'Delete BREAD',\n    'delete_bread_conf'      => 'Yes, remove the BREAD',\n    'delete_bread_quest'     => 'Are you sure you want to delete the BREAD for the :table table?',\n    'edit_bread'             => 'Edit BREAD',\n    'edit_bread_for_table'   => 'Edit BREAD for :table table',\n    'error_creating_bread'   => 'Sorry it appears there may have been a problem creating this BREAD',\n    'error_removing_bread'   => 'Sorry it appears there was a problem removing this BREAD',\n    'error_updating_bread'   => 'Sorry it appears there may have been a problem updating this BREAD',\n    'error_tagging'          => 'Sorry it appears there may have been a problem creating the record. Please make sure your table has defaults for other fields.',\n    'success_created_bread'  => 'Successfully created new BREAD',\n    'success_remove_bread'   => 'Successfully removed BREAD from :datatype',\n    'success_update_bread'   => 'Successfully updated the :datatype BREAD',\n    'controller_name'        => 'Controller Name',\n    'create_migration'       => 'Create migration for this table?',\n    'description'            => 'Description',\n    'display_name'           => 'Display Name',\n    'display_name_plural'    => 'Display Name (Plural)',\n    'display_name_singular'  => 'Display Name (Singular)',\n    'edit_rows'              => 'Edit the rows for the :table table below',\n    'generate_permissions'   => 'Generate Permissions',\n    'icon_class'             => 'Icon to use for this Table',\n    'icon_hint'              => 'Icon (optional) Use a',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Model Class Name',\n    'model_name'             => 'Model Name',\n    'model_name_ph'          => 'ex. \\App\\User, if left empty will try and use the table name',\n    'order'                  => 'Order',\n    'order_column'           => 'Order column',\n    'order_column_ph'        => 'The column where the order is stored',\n    'order_ident_column'     => 'Order display column',\n    'order_ident_column_ph'  => 'The column which is displayed in the order page',\n    'ordering_not_set'       => 'You have to define ordering first',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'server_pagination'      => 'Server-side Pagination',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URL Slug (must be unique)',\n    'url_slug_ph'            => 'URL slug (ex. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/cs/database.php",
    "content": "<?php\n\nreturn [\n    'add_bread'                 => 'Přidat BREAD do této tabulky',\n    'add_new_column'            => 'Přidat nový sloupec',\n    'add_softdeletes'           => 'Přidat neúplné mazání (soft deletes)',\n    'add_timestamps'            => 'Přidat Timestamps',\n    'already_exists'            => 'již existuje',\n    'already_exists_table'      => 'Tabulka :table již existuje',\n    'bread_crud_actions'        => 'BREAD/CRUD akce',\n    'bread_info'                => 'BREAD info',\n    'browse_bread'              => 'Prozkoumat BREAD',\n    'column'                    => 'Sloupec',\n    'composite_warning'         => 'Varování: tento sloupec je součástí composite index',\n    'controller_name'           => 'Název controlleru',\n    'controller_name_hint'      => 'např. PageController, pokud zůstane nevyplněno, bude použit BREAD Controller',\n    'create_bread_for_table'    => 'Vytvořit BREAD pro :table',\n    'create_migration'          => 'Vytvořit migraci pro tuto tabulku?',\n    'create_model_table'        => 'Vytvořit model pro tuto tabulku?',\n    'create_new_table'          => 'Vytvořit novou tabulku',\n    'create_your_new_table'     => 'Vytvořit tabulku',\n    'default'                   => 'Výchozí',\n    'delete_bread'              => 'Smazat BREAD',\n    'delete_bread_before_table' => 'Prosím smažte nejdříve BREAD odkazující na tuto tabulku před jejím smazání.',\n    'delete_table_bread_conf'   => 'Ano, smazat BREAD',\n    'delete_table_bread_quest'  => 'Jste si jist, že chcete smazat BREAD pro tabulku :table?',\n    'delete_table_confirm'      => 'Ano, smazat tuto tabulku',\n    'delete_table_question'     => 'Jste si jist, že chcete smazat tabulku :table?',\n    'description'               => 'Popis',\n    'display_name'              => 'Název pro zobrazení',\n    'display_name_plural'       => 'Název pro zobrazení (množné číslo)',\n    'display_name_singular'     => 'Název pro zobrazení (jednotné číslo)',\n    'edit_bread'                => 'Upravit BREAD',\n    'edit_bread_for_table'      => 'Upravit BREAD pro tabulku :table',\n    'edit_rows'                 => 'Upravit řádky pro tabulku :table níže',\n    'edit_table'                => 'Upravit tabulku :table níže',\n    'edit_table_not_exist'      => 'Tabulka, kterou chcete upravit, neexistuje',\n    'error_creating_bread'      => 'Vypadá to, že nastal problém při vytváření tohoto BREADu',\n    'error_removing_bread'      => 'Vypadá to, že nastal problém při mazání tohoto BREADu',\n    'error_updating_bread'      => 'Vypadá to, že nastal problém při editaci tohoto BREADu',\n    'extra'                     => 'Extra',\n    'field'                     => 'Pole',\n    'field_safe_failed'         => 'Nepodařilo se uložit pole :field, vracíme změny zpět!',\n    'generate_permissions'      => 'Vytvořit oprávnění',\n    'icon_class'                => 'Ikona pro tuto tabulku',\n    'icon_hint'                 => 'Ikona (nepovinné) použijte',\n    'icon_hint2'                => 'Voyager Font Class',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Input Type',\n    'key'                       => 'Klíč',\n    'model_class'               => 'Název třídy modelu',\n    'model_name'                => 'Název modelu',\n    'model_name_ph'             => 'např. \\App\\User, pokud zůstane prázdné, zkusí se vytvořit podle názvu tabulky',\n    'name_warning'              => 'Prosím pojmenujte sloupec před přidáním indexu',\n    'no_composites_warning'     => 'Tato tabulka má složené indexy. Prosím vemte v potaz, že nejsou momentálně podporovány. Buďte opatrní při manipulaci s nimi.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Nepovinné detaily',\n    'policy_class'              => 'Název třídy pro policy',\n    'policy_name'               => 'Policy název',\n    'policy_name_ph'            => 'např. \\App\\Policies\\UserPolicy, pokud ponecháno prázdné, pokusí se použít výchozí',\n    'primary'                   => 'PRIMARY',\n    'server_pagination'         => 'Server-side Pagination',\n    'success_create_table'      => 'Úspěšně vytvořena tabulka :table',\n    'success_created_bread'     => 'Úspěšně vytvořen nový BREAD',\n    'success_delete_table'      => 'Úspěšně smazána tabulka :table',\n    'success_remove_bread'      => 'Úspěšně smazán BREAD z :datatype',\n    'success_update_bread'      => 'Úspěšně upraven :datatype BREAD',\n    'success_update_table'      => 'Úspěšně upravena tabulka :table',\n    'table_actions'             => 'Akce pro tabulku',\n    'table_columns'             => 'Sloupce tabulky',\n    'table_has_index'           => 'Tabulka již má hlavní klíč.',\n    'table_name'                => 'Název tabulky',\n    'table_no_columns'          => 'Tabulka nemá žádné sloupce...',\n    'type'                      => 'Typ',\n    'type_not_supported'        => 'Tento typ není podporován',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Neznámý typ',\n    'update_table'              => 'Upravit tabulku',\n    'url_slug'                  => 'URL Slug (musí být unikátní)',\n    'url_slug_ph'               => 'URL slug (např. posts)',\n    'visibility'                => 'Viditelnost',\n    'relationship'              => [\n        'relationship'         => 'Vztah',\n        'relationships'        => 'Vztahy',\n        'has_one'              => 'Obsahuje jeden',\n        'has_many'             => 'Obsahuje více',\n        'belongs_to'           => 'Spadá pod jeden',\n        'belongs_to_many'      => 'Spadá pod více',\n        'which_column_from'    => 'Který sloupec z',\n        'is_used_to_reference' => 'je použito pro odkazování ',\n        'pivot_table'          => 'Pivot tabulka',\n        'selection_details'    => 'Detaily výběru',\n        'display_the'          => 'Zobrazit',\n        'store_the'            => 'Uložit',\n        'easy_there'           => 'Zlehka, kapitáne',\n        'before_create'        => 'Než vytvoříte nový vztah, musíte vytvořit nejdříve BREAD.<br> Poté se vraťte zpět pro editaci BREADu a teprve pak můžete vytvořit vztah.<br> Díky.',\n        'cancel'               => 'Zrušit',\n        'add_new'              => 'Přidat nový vztah',\n        'open'                 => 'Otevřít',\n        'close'                => 'Zavřít',\n        'relationship_details' => 'Detaily vazby',\n        'browse'               => 'Prozkoumat',\n        'read'                 => 'Číst',\n        'edit'                 => 'Upravit',\n        'add'                  => 'Přidat',\n        'delete'               => 'Smazat',\n        'create'               => 'Vytvořit vztah',\n        'namespace'            => 'Namespace pro model (např. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/cs/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Žádná dostupná data v tabulce',\n    'sInfo'           => 'Zobrazuji _START_ - _END_ z _TOTAL_ záznamů',\n    'sInfoEmpty'      => 'Zobrazuji 0 - 0 z 0 záznamů',\n    'sInfoFiltered'   => '(filtrováno z _MAX_ všech záznamů)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Zobrazit _MENU_ záznamů',\n    'sLoadingRecords' => 'Načítání...',\n    'sProcessing'     => 'Zpracovávání...',\n    'sSearch'         => 'Vyhledat:',\n    'sZeroRecords'    => 'Žádné záznamy nenalezeny',\n    'oPaginate'       => [\n        'sFirst'    => 'První',\n        'sLast'     => 'Poslední',\n        'sNext'     => 'Další',\n        'sPrevious' => 'Předchozí',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': třídění sloupce vzestupně',\n        'sSortDescending' => ': třídění sloupce sestupně',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/cs/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Minulý týden',\n    'last_year' => 'Minulý rok',\n    'this_week' => 'Tento týden',\n    'this_year' => 'Tento rok',\n];\n"
  },
  {
    "path": "publishable/lang/cs/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Stránek|Stránky',\n    'page_link_text' => 'Zobrazit všechny stránky',\n    'page_text'      => 'Máte :count :string ve vaší databázi. Klikněte na tlačítko níže pro zobrazení všech stránek.',\n    'post'           => 'Příspěvků|Příspěvků',\n    'post_link_text' => 'Zobrazit všechny příspěvky',\n    'post_text'      => 'Máte :count :string ve vaší databázi. Klikněte na tlačítko níže pro zobrazení všech příspěvků.',\n    'user'           => 'Uživatelů|Uživatelů',\n    'user_link_text' => 'Zobrazit všechny uživatele',\n    'user_text'      => 'Máte :count :string ve vaší databázi. Klikněte na tlačítko níže pro zobrazení všech uživatelů.',\n];\n"
  },
  {
    "path": "publishable/lang/cs/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'  => 'Vytvořili jsme chybějící symlink pro vás.',\n    'symlink_created_title' => 'Chybějící storage symlink vytvořen',\n    'symlink_failed_text'   => 'Nepodařilo se nám vytvořit chybějící symlink pro vaši aplikaci. '.\n                                'Vypadá to, že to váš hosting nepodporuje.',\n    'symlink_failed_title'   => 'Nepodařilo se vytvořit storage symlink',\n    'symlink_missing_button' => 'Opravit to',\n    'symlink_missing_text'   => 'Nemohli jsme najít storage symlink. To může dělat problémy s '.\n                                'načítáním souborů z prohlížeče.',\n    'symlink_missing_title' => 'Chybějící storage symlink',\n];\n"
  },
  {
    "path": "publishable/lang/cs/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Zanechte prázdné pro zachování aktuálního hesla',\n    'field_select_dd_relationship' => 'Ujistěte se, že je nastavený správný vztah pro :method metodu '.\n                                      'třídy :class',\n    'type_checkbox'       => 'Check Box',\n    'type_codeeditor'     => 'Code Editor',\n    'type_file'           => 'File',\n    'type_image'          => 'Image',\n    'type_radiobutton'    => 'Radio Button',\n    'type_richtextbox'    => 'Rich Textbox',\n    'type_selectdropdown' => 'Select Dropdown',\n    'type_textarea'       => 'Text Area',\n    'type_textbox'        => 'Text Box',\n];\n"
  },
  {
    "path": "publishable/lang/cs/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Akce',\n    'actions'                => 'Akce',\n    'add'                    => 'Přidat',\n    'add_folder'             => 'Přidat složku',\n    'add_new'                => 'Vytvořit nový',\n    'all_done'               => 'Hotovo',\n    'are_you_sure'           => 'Jste si jist',\n    'are_you_sure_delete'    => 'Jste si jist, že chcete odstranit',\n    'auto_increment'         => 'Automatické zvýšení',\n    'browse'                 => 'Procházet',\n    'builder'                => 'Konstruktor',\n    'bulk_delete'            => 'Hromadné mazání',\n    'bulk_delete_confirm'    => 'Ano, hromadně smazat',\n    'bulk_delete_nothing'    => 'Nevybrali jste záznamy pro hromadné mazání',\n    'cancel'                 => 'Zrušit',\n    'choose_type'            => 'Vyberte typ',\n    'click_here'             => 'Klikněte sem',\n    'close'                  => 'Zavřít',\n    'compass'                => 'Kompas',\n    'created_at'             => 'Vytvořeno',\n    'custom'                 => 'Vlastní',\n    'dashboard'              => 'Dashboard',\n    'database'               => 'Databáze',\n    'default'                => 'Výchozí',\n    'delete'                 => 'Odstranit',\n    'delete_confirm'         => 'Ano, smazat!',\n    'delete_question'        => 'Jste si jistý, že to chcete smazat?',\n    'delete_this_confirm'    => 'Ano, smazat',\n    'deselect_all'           => 'Zrušit výběr',\n    'download'               => 'Stáhnout',\n    'edit'                   => 'Editovat',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Vypadá to, že se vyskytnul problém s mazáním tohoto záznamu',\n    'exception'              => 'Vyjímka',\n    'featured'               => 'Featured',\n    'field_does_not_exist'   => 'Pole neexistuje',\n    'how_to_use'             => 'Jak použít',\n    'index'                  => 'Index',\n    'internal_error'         => 'Internal error',\n    'items'                  => 'položka/y',\n    'keep_sidebar_open'      => 'Yarr! Zakotvit! (a nechat otevřený boční panel)',\n    'key'                    => 'Klíč',\n    'last_modified'          => 'Naposledy upraveno',\n    'length'                 => 'Délka',\n    'login'                  => 'Přihlásit',\n    'media'                  => 'Média',\n    'menu_builder'           => 'Menu konstruktor',\n    'move'                   => 'Přesunout',\n    'name'                   => 'Název',\n    'new'                    => 'Nový',\n    'no'                     => 'Ne',\n    'no_thanks'              => 'Ne, děkuji',\n    'not_null'               => 'Nenulový',\n    'no_results'             => 'No results',\n    'options'                => 'Možnosti',\n    'password'               => 'Heslo',\n    'permissions'            => 'Oprávnění',\n    'profile'                => 'Profil',\n    'public_url'             => 'Veřejná URL',\n    'read'                   => 'Číst',\n    'rename'                 => 'Přejmenovat',\n    'required'               => 'Požadováno',\n    'return_to_list'         => 'Zpět na seznam',\n    'route'                  => 'Cesta',\n    'save'                   => 'Uložit',\n    'search'                 => 'Vyhledat',\n    'select_all'             => 'Vybrat vše',\n    'select_group'           => 'Vybrat existující skupinu nebo vytvořit novou',\n    'settings'               => 'Nastavení',\n    'showing_entries'        => 'Zobrazuji :from - :to ze :all záznamů|Zobrazuji :from - :to ze :all záznamů',\n    'submit'                 => 'Odeslat',\n    'successfully_added_new' => 'Úspěšně přidán nový',\n    'successfully_deleted'   => 'Úspěšně smazáno',\n    'successfully_updated'   => 'Úspěšně upraveno',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'Nadpis',\n    'type'                   => 'Typ',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'Odkotvit boční panel',\n    'update'                 => 'Upravit',\n    'update_failed'          => 'Úprava selhala',\n    'upload'                 => 'Upload',\n    'url'                    => 'URL',\n    'view'                   => 'Zobrazení',\n    'viewing'                => 'Zobrazení',\n    'yes'                    => 'Ano',\n    'yes_please'             => 'Ano, prosím',\n];\n"
  },
  {
    "path": "publishable/lang/cs/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Neplatný Json',\n    'invalid_message'   => 'Vypadá to, že jste zvolil neplatný JSON.',\n    'valid'             => 'Platný Json',\n    'validation_errors' => 'Chyby validace',\n];\n"
  },
  {
    "path": "publishable/lang/cs/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Přihlašuji',\n    'signin_below' => 'Přihlašte se:',\n    'welcome'      => 'Vítá vás Voyager, chybějící administrace pro Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/cs/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Přidat složku',\n    'audio_support'          => 'Váš prohlížeč nepodporuje zvukové prvky.',\n    'create_new_folder'      => 'Vytvořit novou složku',\n    'delete_folder_question' => 'Smazáním složky se také smaže i obsah uvnitř',\n    'destination_folder'     => 'Cílová složka',\n    'drag_drop_info'         => 'Natáhněte soubory sem nebo použijte upload níže',\n    'error_already_exists'   => 'Složka nebo soubor v tomto adresáři již existuje',\n    'error_creating_dir'     => 'Něco se nezdařilo při vytváření složky, '.\n                                'zkontrolujte prosím své oprávnění',\n    'error_deleting_file' => 'Něco se nezdařilo při mazání souboru, prosím zkontrolujte své '.\n                                'oprávnění',\n    'error_deleting_folder' => 'Něco se nezdařilo při mazání složky, '.\n                                'zkontrolujte prosím své oprávnění',\n    'error_may_exist' => 'Soubor nebo složka s tímto názvem již existuje, '.\n                                'smažte prosím původní soubor.',\n    'error_moving' => 'Něco se nezdařilo při přesouvání dané složky nebo souboru, '.\n                                'zkontrolujte své oprávnění.',\n    'error_uploading'       => 'Vyskytla se chyba při nahrávání souboru',\n    'folder_exists_already' => 'Tato složka již existuje, prosím odstraňte ji, pokud ji chcete '.\n                                'znovu vytvořit',\n    'image_does_not_exist'  => 'Obrázek neexistuje',\n    'image_removed'         => 'Obrázek byl smazán',\n    'library'               => 'Knihovna souborů',\n    'loading'               => 'NAČÍTÁM VAŠE SOUBORY',\n    'move_file_folder'      => 'Přesunout složku/soubor',\n    'new_file_folder'       => 'Název souboru/složky',\n    'new_folder_name'       => 'Název složky',\n    'no_files_here'         => 'Žádné soubory zde nejsou. Nic. Tečka.',\n    'no_files_in_folder'    => 'Žádné soubory v této složce',\n    'nothing_selected'      => 'Složky/soubor nevybrány',\n    'rename_file_folder'    => 'Přejmenovat složku/soubor',\n    'success_uploaded_file' => 'Soubor úspěšně nahrán!',\n    'success_uploading'     => 'Obrázek úspěšně nahrán!',\n    'uploading_wrong_type'  => 'Vyskytla se chyba: nepodporovaný souborový typ nebo velikost souboru',\n    'video_support'         => 'Váš prohlížeč nepodporuje video tag',\n    'crop'                  => 'Oříznout',\n    'crop_and_create'       => 'Oříznout a vytvořit',\n    'crop_override_confirm' => 'Toto přepíše originální obrázek, jste si jist?',\n    'crop_image'            => 'Oříznout obrázek',\n    'success_crop_image'    => 'Obrázek úspěšně oříznut',\n    'height'                => 'Výška: ',\n    'width'                 => 'Šířka: ',\n    'add_all_selected'      => 'přidat všechny vybrané',\n];\n"
  },
  {
    "path": "publishable/lang/cs/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Barva v zápisu RGB nebo hex (nepovinné)',\n    'color_ph'             => 'Barva (např. #ffffff nebo rgb(255, 255, 255)',\n    'create_new_item'      => 'Vytvořit novou položku menu',\n    'delete_item_confirm'  => 'Ano, smazat položku',\n    'delete_item_question' => 'Jste si jist, že chcete smazat tuhle položku?',\n    'drag_drop_info'       => 'Přetáhněte položky níže pro změnu pořadí.',\n    'dynamic_route'        => 'Dynamická cesta',\n    'edit_item'            => 'Upravit položku',\n    'icon_class'           => 'Font Icon class pro položku (Použijte ',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icon Class (nepovinné)',\n    'item_route'           => 'Cesta pro položku',\n    'item_title'           => 'Název položky',\n    'link_type'            => 'Link type',\n    'new_menu_item'        => 'Nová položka',\n    'open_in'              => 'Otevřít v',\n    'open_new'             => 'Novém okně/záložce',\n    'open_same'            => 'Stejném okně/záložce',\n    'route_parameter'      => 'Parametry pro cestu (pokud nějaké jsou)',\n    'static_url'           => 'Statická URL',\n    'successfully_created' => 'Položka byla úspěšně vytvořena.',\n    'successfully_deleted' => 'Položka byla úspěšně smazána.',\n    'successfully_updated' => 'Položka byla úspěšně upravena.',\n    'updated_order'        => 'Pořadí bylo úspěšně upraveno.',\n    'url'                  => 'URL pro položku',\n    'usage_hint'           => 'Menu můžete zobrazit kdekoliv zavoláním|Toto menu můžete '.\n                              'zobrazit kdekoliv na stránce zavoláním',\n];\n"
  },
  {
    "path": "publishable/lang/cs/post.php",
    "content": "<?php\n\nreturn [\n    'category'         => 'Kategorie příspěvku',\n    'content'          => 'Obsah příspěvku',\n    'details'          => 'Detaily',\n    'excerpt'          => 'Perex <small>Krátký popisek tohoto příspěvku</small>',\n    'image'            => 'Obrázek',\n    'meta_description' => 'Meta Description',\n    'meta_keywords'    => 'Meta Keywords',\n    'new'              => 'Vytvořit nový příspěvek',\n    'seo_content'      => 'SEO obsah',\n    'seo_title'        => 'SEO nadpis',\n    'slug'             => 'URL slug',\n    'status'           => 'Status příspěvku',\n    'status_draft'     => 'návrh',\n    'status_pending'   => 'čekající',\n    'status_published' => 'publikován',\n    'title'            => 'Název příspěvku',\n    'title_sub'        => 'Název pro váš příspěvek',\n    'update'           => 'Upravit příspěvek',\n];\n"
  },
  {
    "path": "publishable/lang/cs/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => 'Avatar',\n    'edit'          => 'Upravit profil',\n    'edit_user'     => 'Upravit uživatele',\n    'password'      => 'Heslo',\n    'password_hint' => 'Zanechte prázdné, pokud chcete uchovat stávající heslo',\n    'role'          => 'Role',\n    'user_role'     => 'Uživatelská role',\n];\n"
  },
  {
    "path": "publishable/lang/cs/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Autor',\n        'avatar'           => 'Avatar',\n        'body'             => 'Obsah',\n        'category'         => 'Kategorie',\n        'created_at'       => 'Vytvořeno',\n        'display_name'     => 'Název pro zobrazení',\n        'email'            => 'E-mail',\n        'excerpt'          => 'Perex',\n        'featured'         => 'Doporučené',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Description',\n        'meta_keywords'    => 'Meta Keywords',\n        'name'             => 'Jméno',\n        'order'            => 'Pořadí',\n        'page_image'       => 'Obrázek stránky',\n        'parent'           => 'Rodič',\n        'password'         => 'Heslo',\n        'post_image'       => 'Obrázek příspěvku',\n        'remember_token'   => 'Remember Token',\n        'role'             => 'Role',\n        'seo_title'        => 'SEO nadpis',\n        'slug'             => 'URL slug',\n        'status'           => 'Stav',\n        'title'            => 'Titulek',\n        'updated_at'       => 'Upraveno',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Kategorie',\n            'plural'   => 'Kategorie',\n        ],\n        'menu'     => [\n            'singular' => 'Menu',\n            'plural'   => 'Menu',\n        ],\n        'page'     => [\n            'singular' => 'Stránka',\n            'plural'   => 'Stránky',\n        ],\n        'post'     => [\n            'singular' => 'Článek',\n            'plural'   => 'Články',\n        ],\n        'role'     => [\n            'singular' => 'Role',\n            'plural'   => 'Role',\n        ],\n        'user'     => [\n            'singular' => 'Uživatel',\n            'plural'   => 'Uživatelé',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Kategorie',\n        'compass'      => 'Kompas',\n        'dashboard'    => 'Dashboard',\n        'database'     => 'Databáze',\n        'media'        => 'Média',\n        'menu_builder' => 'Menu konstruktor',\n        'pages'        => 'Stránky',\n        'posts'        => 'Články',\n        'roles'        => 'Role',\n        'settings'     => 'Nastavení',\n        'tools'        => 'Nástroje',\n        'users'        => 'Uživatelé',\n    ],\n    'roles'      => [\n        'admin' => 'Administrátor',\n        'user'  => 'Normální Uživatel',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Admin Obrázek Pozadí',\n            'description'                => 'Admin Popisek',\n            'description_value'          => 'Vítej v adminu',\n            'google_analytics_client_id' => 'Google Analytics Client ID (používáno pro admin dashboard)',\n            'icon_image'                 => 'Admin Icon Image',\n            'loader'                     => 'Admin Loader',\n            'title'                      => 'Admin nadpis',\n        ],\n        'site'  => [\n            'description'                  => 'Popisek stránky',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Logo Stránky',\n            'title'                        => 'Nadpis Stránky',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/cs/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Můžete získat hodnotu každého nastavení kdekoliv na stránce zavoláním',\n    'save'                 => 'Uložit nastavení',\n    'new'                  => 'Nové nastavení',\n    'help_name'            => 'Název nastavení, např. \"Název stránky\"',\n    'help_key'             => 'Klíč nastavení, např. \"nazev_stranky\"',\n    'help_option'          => '(nepovinné, vztahuje se pouze na věci jako dropdown menu nebo tlačítka)',\n    'add_new'              => 'Přidat nové nastavení',\n    'delete_question'      => 'Jste si jist, že chcete smazat :setting ?',\n    'delete_confirm'       => 'Ano, smazat toto nastavení',\n    'successfully_created' => 'Nastavení úspěšně vytvořeno',\n    'successfully_saved'   => 'Nastavení úspěšně uloženo',\n    'successfully_deleted' => 'Nastavení úspěšně smazáno',\n    'already_at_top'       => 'Toto již je na počátku seznamu',\n    'already_at_bottom'    => 'Toto již je na konci seznamu',\n    'key_already_exists'   => 'Klíč s názvem :key již existuje',\n    'moved_order_up'       => 'Nastavení :name posunuto v pořadí výše',\n    'moved_order_down'     => 'Nastavení :name posunuto v pořadí níže',\n    'successfully_removed' => 'Úspěšně odstraněna hodnota :name',\n    'group_general'        => 'Hlavní',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Site',\n    'group'                => 'Skupina',\n    'help_group'           => 'Skupina tohoto nastavení je přiřazena',\n];\n"
  },
  {
    "path": "publishable/lang/cs/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Vytvořeno s <i class=\"voyager-heart\"></i> od',\n    'footer_copyright2' => 'Vytvořeno s rumem',\n];\n"
  },
  {
    "path": "publishable/lang/de/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'nach Pageviews',\n    'by_sessions'            => 'nach Sessions',\n    'by_users'               => 'nach Benutzern',\n    'no_client_id'           => 'Um Analytics zu sehen müssen Sie Ihre Google Analytics Client ID zu Ihren Einstellungen unter dem Schlüssel <code>google_analytics_client_id</code> hinzufügen. Holen Sie sich Ihren Key in der Google Developer Console:',\n    'set_view'               => 'eine Ansicht wählen',\n    'this_vs_last_week'      => 'Diese Woche im Vergleich zu letzter Woche',\n    'this_vs_last_year'      => 'Dieses Jahr im Vergleich zum letzten Jahr',\n    'top_browsers'           => 'Top Browser',\n    'top_countries'          => 'Top Länder',\n    'various_visualizations' => 'verschiedenartige Visualisierungen',\n];\n"
  },
  {
    "path": "publishable/lang/de/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'BREAD zu Tabelle Hinzufügen',\n    'bread_crud_actions'     => 'BREAD/CRUD Aktionen',\n    'bread_info'             => 'BREAD Info',\n    'controller_name_hint'   => 'z. B. PageController, falls leer gelassen wird der BREAD Controller verwendet',\n    'create_bread_for_table' => 'BREAD Erstellen für :table Tabelle',\n    'default_search_key'     => 'Standard serverseitiges Suchfeld',\n    'default_search_key_ph'  => 'Dieses Feld wird in der serverseitigen Suche vorgewählt',\n    'delete_bread'           => 'BREAD Löschen',\n    'delete_bread_conf'      => 'Ja, BREAD Entfernen',\n    'delete_bread_quest'     => 'Sind Sie sicher, dass Sie das BREAD für Tabelle :table Löschen möchten?',\n    'edit_bread'             => 'BREAD Bearbeiten',\n    'edit_bread_for_table'   => 'Bearbeite BREAD für Tabelle :table',\n    'error_creating_bread'   => 'Es ist ein Fehler aufgetreten beim Versuch dieses BREAD anzulegen',\n    'error_removing_bread'   => 'Es ist ein Fehler aufgetreten beim Versuch dieses BREAD zu Löschen',\n    'error_updating_bread'   => 'Es ist ein Fehler aufgetreten beim Versuch dieses BREAD zu Aktualisieren',\n    'error_tagging'          => 'Entschuldigung, dieser Eintrag konnte nicht erstellt werden. Bitte stellen Sie sicher, dass alle anderen Felder Defaultwerte haben.',\n    'success_created_bread'  => 'Neues BREAD erfolgreich erstellt',\n    'success_remove_bread'   => 'BREAD erfolgreich von :datatype entfernt',\n    'success_update_bread'   => ':datatype BREAD erfolgreich aktualisiert',\n    'controller_name'        => 'Controller Name',\n    'create_migration'       => 'Migration Erstellen für diese Tabelle?',\n    'description'            => 'Beschreibung',\n    'display_name'           => 'Anzeigename',\n    'display_name_plural'    => 'Anzeigename (Plural)',\n    'display_name_singular'  => 'Anzeigename (Singular)',\n    'edit_rows'              => 'Bearbeite die Zeilen für untenstehende Tabelle :table',\n    'generate_permissions'   => 'Zugriffsrechte Generieren',\n    'icon_class'             => 'Icon CSS-Klasse für diese Tabelle',\n    'icon_hint'              => 'Icon (optional) Benutze',\n    'icon_hint2'             => 'Voyager Font CSS-Klasse',\n    'model_class'            => 'Name der Model Klasse',\n    'model_name'             => 'Model Name',\n    'model_name_ph'          => 'z. B. \\App\\User, falls leer gelassen wird versucht den Namen der Tabelle zu verwenden',\n    'order'                  => 'Sortieren',\n    'order_column'           => 'Sortierungs-Spalte',\n    'order_column_ph'        => 'Die Spalte wo die Sortierung gespeichert wird',\n    'order_direction'        => 'Sortierungs Reihenfolge',\n    'order_ident_column'     => 'Sortierungs Anzeige Spalte',\n    'order_ident_column_ph'  => 'Die Spalte die in der Sortierungs-Seite angezeigt wird',\n    'ordering_not_set'       => 'Sie müssen zuerst die Sortierung einstellen',\n    'policy_class'           => 'Policy Klassenname',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'Bspw. \\App\\Policies\\UserPolicy, falls leer gelassen wird versucht den Default Wert zu Verwenden.',\n    'server_pagination'      => 'Serverseitige Pagination',\n    'scope'                  => 'Scope',\n    'soft_deletes_on'        => 'Zeige Gelöschte',\n    'soft_deletes_off'       => 'Verstecke Gelöschte',\n    'updated_order'          => 'Reihenfolge erfolgreich geändert',\n    'url_slug'               => 'URL Slug (muss unique sein)',\n    'url_slug_ph'            => 'URL slug (z. B. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/de/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Willkommen beim Voyager Kompass. Jede gute App braucht einen Kompass um einen in die richtige Richtung zu lenken.\n    In dieser Sektion finden Sie viele Ressourcen und administrative Ausgaben die Ihnen beim Bauen Ihrer App helfen.',\n    'links'         => [\n        'title'                 => 'Links',\n        'documentation'         => 'Dokumentation',\n        'voyager_homepage'      => 'Voyager Homepage',\n    ],\n    'commands'      => [\n        'title'                 => 'Befehle',\n        'text'                  => 'Artisan Befehle aus Voyager ausführen.',\n        'clear_output'          => 'ausgabe leeren',\n        'command_output'        => 'Artisan Befehl-Ausgabe',\n        'additional_args'       => 'Zusätzliche Argumente?',\n        'run_command'           => 'Befehl ausführen',\n    ],\n    'resources'     => [\n        'title'                 => 'Ressourcen',\n        'text'                  => 'Voyager Ressourcen helfen Ihnen Dinge schneller zu finden.',\n    ],\n    'logs'          => [\n        'title'                 => 'Logs',\n        'text'                  => 'Ihre App Logs',\n        'file_too_big'          => 'Log Datei >50M, bitte herunterladen.',\n        'level'                 => 'Level',\n        'context'               => 'Kontext',\n        'date'                  => 'Datum',\n        'content'               => 'Inhalt',\n        'download_file'         => 'Datei downloaden',\n        'delete_file'           => 'Datei löschen',\n        'delete_all_files'      => 'Alle Dateien löschen',\n        'delete_success'        => 'Datei erfolgreich gelöscht:',\n        'delete_all_success'    => 'Alle Log Dateien erfolgreich gelöscht',\n    ],\n    'fonts'         => [\n        'title'                 => 'Schriftarten',\n        'font_class'            => 'Voyager Fonts Class Mapping',\n        'font_character'        => 'Voyager Fonts Character Mapping',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/de/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Neue Spalte hinzufügen',\n    'add_softdeletes'           => 'Soft Deletes hinzufügen',\n    'add_timestamps'            => 'Zeitstempel hinzufügen',\n    'already_exists'            => 'existiert bereits',\n    'already_exists_table'      => 'Tabelle :table existiert bereits',\n    'bread_crud_actions'        => 'BREAD/CRUD Aktionen',\n    'bread_info'                => 'BREAD Info',\n    'browse_bread'              => 'BREAD ansehen',\n    'column'                    => 'Spalte',\n    'composite_warning'         => 'Warnung: Diese Spalte ist Teil eines zusammengesetzten Indexes',\n    'create_model_table'        => 'Model für diese Tabelle erstellen?',\n    'create_new_table'          => 'Neue Tabelle erstellen',\n    'create_your_new_table'     => 'Erstellen Sie Ihre neue Tabelle',\n    'default'                   => 'Default',\n    'delete_bread_before_table' => 'Sie müssen zuerst das BREAD dieser Tabelle entfernen bevor Sie die Tabelle löschen können.',\n    'delete_table_confirm'      => 'Ja, diese Tabelle löschen',\n    'delete_table_question'     => 'Sind Sie sicher, dass Sie die Tabelle :table löschen möchten?',\n    'editing_table'             => 'Tabelle :table bearbeiten',\n    'edit_table'                => 'Bearbeite die Tabelle :table',\n    'edit_table_not_exist'      => 'Die Tabelle welche Sie bearbeiten möchten existiert nicht',\n    'extra'                     => 'Extra',\n    'field'                     => 'Feld',\n    'field_safe_failed'         => 'Konnte Feld :field nicht speichern, Änderungen zurückgerollt!',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Eingabe-Typ',\n    'key'                       => 'Key',\n    'name_warning'              => 'Sie müssen einen Namen für die Spalte vergeben, bevor Sie einen Index hinzufügen',\n    'no_composites_warning'     => 'Hinweis: Diese Tabelle hat zusammengesetzte Indexe. Diese werden momentan nicht unterstützt. Seien Sie vorsichtig beim Hinzufügen/Ändern von Indexen.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Optionale Details',\n    'policy_class'              => 'Policy Klassenname',\n    'policy_name'               => 'Policy Name',\n    'policy_name_ph'            => 'Bspw. \\App\\Policies\\UserPolicy, falls leer gelassen wird versucht den Default Wert zu Verwenden.',\n    'primary'                   => 'PRIMARY',\n    'server_pagination'         => 'Serverseitige Pagination',\n    'success_create_table'      => 'Tabelle :table erfolgreich erstellt',\n    'success_created_bread'     => 'Neues BREAD erfolgreich erstellt',\n    'success_delete_table'      => 'Tabelle :table erfolgreich erstellt',\n    'success_remove_bread'      => 'BREAD erfolgreich von :datatype entfernt',\n    'success_update_bread'      => ':datatype BREAD erfolgreich aktualisiert',\n    'success_update_table'      => 'Tabelle :table erfolgreich aktualisiert',\n    'table_actions'             => 'Tabellen Aktionen',\n    'table_columns'             => 'Tabellen Spalten',\n    'table_has_index'           => 'Die Tabelle hat bereits einen primären Index.',\n    'table_name'                => 'Tabellenname',\n    'table_no_columns'          => 'Die Tabelle hat keine Spalten...',\n    'type'                      => 'Typ',\n    'type_not_supported'        => 'Dieser Typ wird nicht unterstützt',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Unbekannter Typ',\n    'update_table'              => 'Tabelle aktualisieren',\n    'url_slug'                  => 'URL Slug (muss einzigartig sein)',\n    'url_slug_ph'               => 'URL Slug (z.B. posts)',\n    'visibility'                => 'Sichtbarkeit',\n    'relationship'              => [\n        'relationship'         => 'Beziehung',\n        'relationships'        => 'Beziehungen',\n        'has_one'              => 'Hat eine/n',\n        'has_many'             => 'Hat viele',\n        'belongs_to'           => 'Gehört zu',\n        'belongs_to_many'      => 'Gehört zu vielen',\n        'which_column_from'    => 'Welche Spalte von',\n        'is_used_to_reference' => 'referenziert',\n        'pivot_table'          => 'Pivot-Tabelle',\n        'selection_details'    => 'Auswahl-Details',\n        'display_the'          => 'Zeige',\n        'store_the'            => 'Speichert',\n        'allow_tagging'        => 'Allow Tagging',\n        'easy_there'           => 'Ruhig Kapitän',\n        'before_create'        => 'Bevor Sie eine neue Beziehung erstellen können müssen Sie das BREAD erstellen.<br>Kommen Sie dann zurück und Sie werden Beziehungen hinzufügen können.<br>Danke.',\n        'cancel'               => 'Abbrechen',\n        'add_new'              => 'Neue Beziehung hinzufügen',\n        'open'                 => 'Öffne',\n        'close'                => 'Schließe',\n        'relationship_details' => 'Beziehungs-Details',\n        'browse'               => 'Browse',\n        'read'                 => 'Lesen',\n        'edit'                 => 'Bearbeiten',\n        'add'                  => 'Hinzufügen',\n        'delete'               => 'Löschen',\n        'create'               => 'Beziehung erstellen',\n        'namespace'            => 'Vollständig angegebener Model-Name (z.B. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/de/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Keine Daten in der Tabelle vorhanden',\n    'sInfo'           => 'Zeige _START_ bis _END_ von _TOTAL_ Einträgen',\n    'sInfoEmpty'      => 'Zeige 0 von 0 Einträgen',\n    'sInfoFiltered'   => '(gefiltert von _MAX_ Einträgen)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => '.',\n    'sLengthMenu'     => 'Zeige _MENU_ Einträge',\n    'sLoadingRecords' => 'Wird geladen...',\n    'sProcessing'     => 'Bitte warten...',\n    'sSearch'         => 'Suche:',\n    'sZeroRecords'    => 'Keine Einträge vorhanden.',\n    'oPaginate'       => [\n        'sFirst'    => 'Erste',\n        'sLast'     => 'Letzte',\n        'sNext'     => 'Nächste',\n        'sPrevious' => 'Zurück',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': aktivieren, um Spalte aufsteigend zu sortieren',\n        'sSortDescending' => ': aktivieren, um Spalte absteigend zu sortieren',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/de/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Letzte Woche',\n    'last_year' => 'Letztes Jahr',\n    'this_week' => 'Diese Woche',\n    'this_year' => 'Dieses Jahr',\n];\n"
  },
  {
    "path": "publishable/lang/de/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Seite|Seiten',\n    'page_link_text' => 'Alle Seiten anzeigen',\n    'page_text'      => 'Sie haben :count :string in Ihrer Datenbank.',\n    'post'           => 'Post|Posts',\n    'post_link_text' => 'Alle Posts anzeigen',\n    'post_text'      => 'Sie haben :count :string in Ihrer Datenbank.',\n    'user'           => 'Benutzer|Benutzer',\n    'user_link_text' => 'Alle Benutzer anzeigen',\n    'user_text'      => 'Sie haben :count :string in Ihrer Datenbank.',\n];\n"
  },
  {
    "path": "publishable/lang/de/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Wir haben soeben den fehlenden Symlink für Sie angelegt.',\n    'symlink_created_title'  => 'Fehlender Storage Symlink angelegt',\n    'symlink_failed_text'    => 'Fehlender Symlink für Ihre Anwendung konnte nicht angelegt werden. Es scheint so als würde Ihr Hosting Provider dies nicht anbieten.',\n    'symlink_failed_title'   => 'Fehlender Storage Symlink konnte nicht angelegt werden',\n    'symlink_missing_button' => 'Bereinigen',\n    'symlink_missing_text'   => 'Wir konnten keinen Storage Symlink finden. Dies könnte zu Problemen führen beim Laden von Medien Dateien aus dem Browser.',\n    'symlink_missing_title'  => 'Fehlender Storage Symlink',\n];\n"
  },
  {
    "path": "publishable/lang/de/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Leer lassen um das aktuelle Passwort zu behalten',\n    'field_select_dd_relationship' => 'Stellen Sie sicher, dass Sie die entsprechende Relation in der :method Methode der :class Klasse setzen.',\n    'type_checkbox'                => 'Check Box',\n    'type_codeeditor'              => 'Code Editor',\n    'type_file'                    => 'Datei',\n    'type_image'                   => 'Bild',\n    'type_radiobutton'             => 'Radio Button',\n    'type_richtextbox'             => 'Rich Textbox',\n    'type_selectdropdown'          => 'Select Dropdown',\n    'type_textarea'                => 'Text Area',\n    'type_textbox'                 => 'Text Box',\n];\n"
  },
  {
    "path": "publishable/lang/de/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Aktion',\n    'actions'                => 'Aktionen',\n    'add'                    => 'Hinzufügen',\n    'add_folder'             => 'Ordner hinzufügen',\n    'add_new'                => 'Neu hinzufügen',\n    'all_done'               => 'Alles erledigt',\n    'are_you_sure'           => 'Sind Sie sicher',\n    'are_you_sure_delete'    => 'Sind Sie sicher dass Sie löschen möchten',\n    'ascending'              => 'Aufsteigend',\n    'auto_increment'         => 'Automatische Werterhöhung',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Browse',\n    'builder'                => 'Builder',\n    'bulk_delete'            => 'Massenlöschung',\n    'bulk_delete_confirm'    => 'Ja, alle löschen',\n    'bulk_delete_nothing'    => 'Sie haben nichts ausgewählt',\n    'cancel'                 => 'Abbruch',\n    'choose_type'            => 'Typ auswählen',\n    'click_here'             => 'Hier klicken',\n    'close'                  => 'Schließen',\n    'compass'                => 'Kompass',\n    'created_at'             => 'Angelegt',\n    'custom'                 => 'Custom',\n    'dashboard'              => 'Dashboard',\n    'database'               => 'Datenbank',\n    'default'                => 'Defaultwert',\n    'delete'                 => 'Löschen',\n    'delete_confirm'         => 'Ja, löschen!',\n    'delete_question'        => 'Wirklich löschen',\n    'delete_this_confirm'    => 'Ja, löschen',\n    'descending'             => 'Absteigend',\n    'deselect_all'           => 'Alles abwählen',\n    'download'               => 'Herunterladen',\n    'drag_drop_info'         => 'Ändern Sie die Reihenfolge der Elemente durch Drag und Drop.',\n    'edit'                   => 'Bearbeiten',\n    'email'                  => 'E-Mail',\n    'error_deleting'         => 'Es gab ein Problem beim Versuch dies zu löschen',\n    'error_restoring'        => 'Es gab ein Problem beim Wiederherstellen dieses',\n    'exception'              => 'Exception',\n    'featured'               => 'Featured',\n    'field_does_not_exist'   => 'Feld existiert nicht',\n    'home'                   => 'Startseite',\n    'how_to_use'             => 'Verwendung',\n    'index'                  => 'Index',\n    'internal_error'         => 'Interner Fehler',\n    'items'                  => 'Element(e)',\n    'keep_sidebar_open'      => 'Yarr! Anker werfen! (und Sidebar geöffnet lassen)',\n    'key'                    => 'Key',\n    'last_modified'          => 'Zuletzt modifiziert',\n    'length'                 => 'Länge',\n    'locale'                 => 'Sprache',\n    'login'                  => 'Login',\n    'logout'                 => 'Logout',\n    'media'                  => 'Medien',\n    'menu_builder'           => 'Menü Editor',\n    'mimetype_not_allowed'   => 'Dieser Medientyp ist nicht erlaubt',\n    'move'                   => 'Verschieben',\n    'name'                   => 'Name',\n    'new'                    => 'Neu',\n    'no'                     => 'Nein',\n    'no_thanks'              => 'Nein Danke',\n    'none'                   => 'Keine',\n    'not_null'               => 'Not Null',\n    'no_results'             => 'Keine Ergebnisse',\n    'open'                   => 'Öffnen',\n    'options'                => 'Optionen',\n    'password'               => 'Passwort',\n    'permissions'            => 'Rechte',\n    'profile'                => 'Profil',\n    'public_url'             => 'Öffentliche URL',\n    'read'                   => 'Lesen',\n    'rename'                 => 'Umbenennen',\n    'remember_me'            => 'Angemeldet bleiben',\n    'required'               => 'Notwendig',\n    'return_to_list'         => 'Zurück zur Liste',\n    'route'                  => 'Route',\n    'save'                   => 'Speichern',\n    'search'                 => 'Suchen',\n    'select_all'             => 'Alles auswählen',\n    'select_group'           => 'Bestehende Gruppe auswählen oder neue Gruppe hinzufügen',\n    'settings'               => 'Einstellungen',\n    'showing_entries'        => 'Zeige :from bis :to von :all Eintrag|Zeige :from bis :to von :all Einträgen',\n    'submit'                 => 'Absenden',\n    'successfully_added_new' => 'Erfolgreich neu hinzugefügt',\n    'successfully_deleted'   => 'Erfolgreich gelöscht',\n    'successfully_restored'  => 'Erfolgreich wiederhergestellt',\n    'successfully_updated'   => 'Erfolgreich bearbeitet',\n    'successfully_created'   => 'Erfolgreich erstellt',\n    'sweet_success'          => 'Sweet Success!',\n    'timestamp'              => 'Zeitstempel',\n    'title'                  => 'Titel',\n    'type'                   => 'Typ',\n    'restore'                => 'Wiederherstellen',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'Sidebar ablösen',\n    'update'                 => 'Aktualisierung',\n    'update_failed'          => 'Aktualisierung fehlgeschlagen',\n    'updated_order'          => 'Reihenfolge wurde aktualisiert',\n    'upload'                 => 'Upload',\n    'url'                    => 'URL',\n    'view'                   => 'Anzeigen',\n    'viewing'                => 'Zeige',\n    'whoopsie'               => 'Whoopsie!',\n    'yes'                    => 'Ja',\n    'yes_please'             => 'Ja, Bitte',\n];\n"
  },
  {
    "path": "publishable/lang/de/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Ungültiges JSON',\n    'invalid_message'   => 'Es scheint Sie haben ungültiges JSON eingebracht.',\n    'valid'             => 'Gültiges JSON',\n    'validation_errors' => 'Validierungsfehler',\n];\n"
  },
  {
    "path": "publishable/lang/de/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Einloggen',\n    'signin_below' => 'Unten anmelden:',\n    'welcome'      => 'Willkommen bei Voyager. Der fehlende Admin für Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/de/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Neuen Ordner hinzufügen',\n    'audio_support'          => 'Ihr Browser unterstützt das Audio Element nicht.',\n    'create_new_folder'      => 'Neuen Ordner erstellen',\n    'delete_folder_question' => 'Das Löschen eines Ordners wird alle darin enthaltenen Dateien und Ordnder löschen.',\n    'delete_question'        => 'Sind Sie sicher dass Sie die folgenden Dateien löschen möchten?',\n    'destination_folder'     => 'Ziel Ordner',\n    'drag_drop_info'         => 'Dateien mit Drag und Drop hineinziehen oder unten klicken um hochzuladen',\n    'error_already_exists'   => 'Es ist bereits eine Datei bzw. ein Ordner mit diesem Namen in diesem Ordner vorhanden.',\n    'error_creating_dir'     => 'Beim Versuch das Verzeichnis anzulegen ist ein Fehler aufgetreten. Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte dafür haben',\n    'error_deleting_file'    => 'Beim Versuch diese Datei zu löschen ist ein Fehler aufgetreten. Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte dafür haben',\n    'error_deleting_folder'  => 'Beim Versuch diesen Ordner zu löschen ist ein Fehler aufgetreten. Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte dafür haben',\n    'error_may_exist'        => 'Datei oder Ordner unter diesem Namen können bereits existieren. Wählen Sie einen anderen Namen oder löschen Sie die andere Datei.',\n    'error_moving'           => 'Beim Versuch diese Datei bzw. Ordner zu verschieben ist ein Fehler aufgetreten. Stellen Sie sicher, dass Sie ausreichende Zugriffsrechte dafür haben.',\n    'error_renaming_ext'     => 'Die Erweiterung einer Datei kann nicht geändert werden!',\n    'error_uploading'        => 'Hochladen fehlgeschlagen: Unbekannter Fehler aufgetreten!',\n    'files'                  => '1 Datei|:count Dateien',\n    'files_more'             => 'Und :count Weitere',\n    'file_does_not_exist'    => 'Datei existiert nicht',\n    'file_removed'           => 'Datei entfernt',\n    'files_selected'         => 'Dateien/Ordner ausgewählt',\n    'folder_exists_already'  => 'Dieser Ordner existiert bereits. Bitte löschen Sie diesen Ordner falls Sie ihn neu anlegen möchten',\n    'image_does_not_exist'   => 'Bild existiert nicht',\n    'image_removed'          => 'Bild entfernt',\n    'library'                => 'Medien Bibliothek',\n    'loading'                => 'LADE IHRE MEDIEN DATEIEN',\n    'max_files_select'       => 'Sie können nur eine Datei auswählen|Sie können maximal :count Dateien auswählen',\n    'min_files_select'       => 'Sie müssen mindestens eine Datei auswählen|Sie müssen mindestens :count Dateien auswählen',\n    'move_file_folder'       => 'Datei/Ordner verschieben',\n    'new_file_folder'        => 'Datei/Ordner anlegen',\n    'new_folder_name'        => 'Name des neuen Ordners',\n    'no_files_here'          => 'Hier sind keine Dateien vorhanden.',\n    'no_files_in_folder'     => 'Keine Dateien in diesem Ordner.',\n    'nothing_selected'       => 'Keine Datei oder Ordner ausgewählt',\n    'rename_file_folder'     => 'Datei/Ordner umbenennen',\n    'success_uploaded_file'  => 'Neue Datei erfolgreich hochgeladen!',\n    'success_uploading'      => 'Bild erfolgreich hochgeladen!',\n    'success_moved'          => 'Datei/Ordner erfolgreich verschoben',\n    'success_renamed'        => 'Datei/Ordner erfolgreich umbenannt',\n    'uploading_wrong_type'   => 'Fehler beim Hochladen: Nicht unterstütztes Dateiformat oder Datei zu groß zum Hochladen!',\n    'crop'                   => 'Beschneiden',\n    'crop_and_create'        => 'Beschneiden & erstellen',\n    'crop_override_confirm'  => 'Dies wird das Original überschreiben, sind Sie sicher?',\n    'crop_image'             => 'Bild beschneiden',\n    'success_crop_image'     => 'Bild erfolgreich beschnitten',\n    'height'                 => 'Höhe: ',\n    'title'                  => 'Titel',\n    'type'                   => 'Typ',\n    'size'                   => 'Größe',\n    'public_url'             => 'Öffentliche URL',\n    'last_modified'          => 'Zuletzt bearbeitet',\n    'browser_video_support'  => 'Ihr Browser unterstützt das Video Tag nicht.',\n    'browser_audio_support'  => 'Ihr Browser unterstützt das Audio Tag nicht.',\n    'width'                  => 'Breite: ',\n    'add_all_selected'       => 'Alle ausgewählten hinzufügen',\n];\n"
  },
  {
    "path": "publishable/lang/de/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Farbe in RGB oder hex (optional)',\n    'color_ph'             => 'Farbe (z. B. #ffffff oder rgb(255, 255, 255)',\n    'create_new_item'      => 'Erstelle einen neues Menü Element',\n    'delete_item_confirm'  => 'Ja, lösche dieses Menü Element',\n    'delete_item_question' => 'Sind Sie sicher dass Sie dieses Menü Element löschen möchten?',\n    'drag_drop_info'       => 'Sie können die Reihenfolge der Menü Elemente durch Drag und Drop verändern.',\n    'dynamic_route'        => 'Dynamische Route',\n    'edit_item'            => 'Menü Element bearbeiten',\n    'icon_class'           => 'Font Icon CSS-Klasse für das Menü Element (Benutze ',\n    'icon_class2'          => 'Voyager Font CSS-Klasse</a>)',\n    'icon_class_ph'        => 'Icon CSS-Klasse (optional)',\n    'item_route'           => 'Route für das Menü Element',\n    'item_title'           => 'Titel für das Menü Element',\n    'link_type'            => 'Link Typ',\n    'new_menu_item'        => 'Neues Menü Element',\n    'open_in'              => 'Öffnen in',\n    'open_new'             => 'Neuem Tab/Fenster',\n    'open_same'            => 'Selber Tab/Fenster',\n    'route_parameter'      => 'Route Parameter (falls vorhanden)',\n    'static_url'           => 'Statische URL',\n    'successfully_created' => 'Neues Menü Element erfolgreich erstellt.',\n    'successfully_deleted' => 'Menü Element erfolgreich gelöscht.',\n    'successfully_updated' => 'Menü Element erfolgreich aktualisiert.',\n    'updated_order'        => 'Menü Reihenfolge erfolgreich aktualisiert.',\n    'url'                  => 'URL des Menü Elements',\n    'usage_hint'           => 'Sie können ein Menü überall auf der Seite ausgeben durch den Aufruf von|Sie können dieses Menü überall auf der Seite ausgeben durch den Aufruf von',\n];\n"
  },
  {
    "path": "publishable/lang/de/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Zusätzliche Felder',\n    'category'         => 'Post Kategorie',\n    'content'          => 'Post Inhalt',\n    'details'          => 'Post Details',\n    'excerpt'          => 'Ausschnitt <small>Kurzbeschreibung dieses Posts</small>',\n    'image'            => 'Post Bild',\n    'meta_description' => 'Meta Beschreibung',\n    'meta_keywords'    => 'Meta Keywords',\n    'new'              => 'Post anlegen',\n    'seo_content'      => 'SEO Content',\n    'seo_title'        => 'SEO Titel',\n    'slug'             => 'URL Slug',\n    'status'           => 'Post Status',\n    'status_draft'     => 'Entwurf',\n    'status_pending'   => 'Warten auf Freigabe',\n    'status_published' => 'veröffentlicht',\n    'title'            => 'Post Titel',\n    'title_sub'        => 'Der Titel des Posts',\n    'update'           => 'Post aktualisieren',\n];\n"
  },
  {
    "path": "publishable/lang/de/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'Avatar',\n    'edit'             => 'Mein Profil bearbeiten',\n    'edit_user'        => 'Benutzer bearbeiten',\n    'password'         => 'Passwort',\n    'password_hint'    => 'Leer lassen um das Bisherige zu behalten',\n    'role'             => 'Rolle',\n    'roles'            => 'Rollen',\n    'role_default'     => 'Standard-Rolle',\n    'roles_additional' => 'Zusätzliche Rollen',\n    'user_role'        => 'Benutzerrolle',\n];\n"
  },
  {
    "path": "publishable/lang/de/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Autor',\n        'avatar'           => 'Avatar',\n        'body'             => 'Inhalt',\n        'category'         => 'Kategorie',\n        'created_at'       => 'Erstellt am',\n        'display_name'     => 'Anzeigename',\n        'email'            => 'Email',\n        'excerpt'          => 'Ausschnitt',\n        'featured'         => 'Featured',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Beschreibung',\n        'meta_keywords'    => 'Meta Keywords',\n        'name'             => 'Name',\n        'order'            => 'Reihenfolge',\n        'page_image'       => 'Seiten-Bild',\n        'parent'           => 'Parent',\n        'password'         => 'Passwort',\n        'post_image'       => 'Post-Bild',\n        'remember_token'   => 'Remember Token',\n        'role'             => 'Rolle',\n        'seo_title'        => 'SEO Titel',\n        'slug'             => 'Slug',\n        'status'           => 'Status',\n        'title'            => 'Titel',\n        'updated_at'       => 'Aktualisiert am',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Kategorie',\n            'plural'   => 'Kategorien',\n        ],\n        'menu'     => [\n            'singular' => 'Menu',\n            'plural'   => 'Menus',\n        ],\n        'page'     => [\n            'singular' => 'Seite',\n            'plural'   => 'Seiten',\n        ],\n        'post'     => [\n            'singular' => 'Post',\n            'plural'   => 'Posts',\n        ],\n        'role'     => [\n            'singular' => 'Rolle',\n            'plural'   => 'Rollen',\n        ],\n        'user'     => [\n            'singular' => 'Benutzer',\n            'plural'   => 'Benutzer',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Kategorien',\n        'compass'      => 'Compass',\n        'dashboard'    => 'Dashboard',\n        'database'     => 'Datenbank',\n        'media'        => 'Medien',\n        'menu_builder' => 'Menu Builder',\n        'pages'        => 'Seiten',\n        'posts'        => 'Posts',\n        'roles'        => 'Rollen',\n        'settings'     => 'Einstellungen',\n        'tools'        => 'Tools',\n        'users'        => 'Benutzer',\n    ],\n    'roles'      => [\n        'admin' => 'Administrator',\n        'user'  => 'Normaller Benutzer',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Admin Hintergrundbild',\n            'description'                => 'Admin Beschreibung',\n            'description_value'          => 'Willkommen bei Voyager. Dem fehlendem Admin für Laravel',\n            'google_analytics_client_id' => 'Google Analytics Client ID (für Dashboard)',\n            'icon_image'                 => 'Admin Icon',\n            'loader'                     => 'Admin Ladebild',\n            'title'                      => 'Admin Titel',\n        ],\n        'site'  => [\n            'description'                  => 'Seiten Beschreibung',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Seiten Logo',\n            'title'                        => 'Seiten Titel',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/de/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Sie können den Wert jeder Einstellung überall auf der Seite erhalten durch den Aufruf von',\n    'save'                 => 'Einstellungen speichern',\n    'new'                  => 'Neue Einstellung',\n    'help_name'            => 'Einstellungs-Name z.B. Admin Titel',\n    'help_key'             => 'Einstellungs-Schlüssel z.B. title',\n    'help_option'          => '(optional, die selben Optionen wie für das entsprechende Formfield können benutzt werden)',\n    'add_new'              => 'Neue Einstellung hinzufügen',\n    'delete_question'      => 'Wollen Sie die Einstellung :setting wirklich löschen?',\n    'delete_confirm'       => 'Ja, diese Einstellung löschen',\n    'successfully_created' => 'Einstellungen erfolgreich erstellt',\n    'successfully_saved'   => 'Einstellungen erfolgreich gespeichert',\n    'successfully_deleted' => 'Einstellungen erfolgreich gelöscht',\n    'already_at_top'       => 'Dies ist bereits an erster Stelle der Liste',\n    'already_at_bottom'    => 'Dies ist bereits an letzter Stelle der Liste',\n    'key_already_exists'   => 'Der Schlüssel :key existiert bereits',\n    'moved_order_up'       => 'Einstellung :name wurde nach oben geschoben',\n    'moved_order_down'     => 'Einstellung :name wurde nach unten geschoben',\n    'successfully_removed' => 'Wert :name wurde erfolgreich gelöscht',\n    'group_general'        => 'General',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Site',\n    'group'                => 'Gruppe',\n    'help_group'           => 'Diese Einstellung ist zugewiesen zu',\n];\n"
  },
  {
    "path": "publishable/lang/de/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Gemacht mit <i class=\"voyager-heart\"></i> von',\n    'footer_copyright2' => 'Gemacht mit Rum und noch mehr Rum',\n];\n"
  },
  {
    "path": "publishable/lang/el/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'Ανά εμφάνιση σελίδας',\n    'by_sessions'            => 'Ανά συνεδρία',\n    'by_users'               => 'Ανά χρήστες',\n    'no_client_id'           => 'Για να δείτε στατιστικά θα πρέπει να πάρετε το google analytics client id και να το προσθέσετε στις ρυθμίσεις για το κλειδί <code>google_analytics_client_id</code>. Πάρτε το κλειδί σας από την Google developer console:',\n    'set_view'               => 'Διαλέξτε τύπο εμφάνισης',\n    'this_vs_last_week'      => 'Σύγκριση αυτής της εβδομάδας με την προηγούμενη',\n    'this_vs_last_year'      => 'Σύγκριση αυτού του έτους με το προηγούμενο',\n    'top_browsers'           => 'Κορυφαίοι Browsers',\n    'top_countries'          => 'Κορυφαίες χώρες',\n    'various_visualizations' => 'Διάφορες οπτικοποιήσεις',\n];\n"
  },
  {
    "path": "publishable/lang/el/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Προσθήκη BREAD σε αυτόν τον πίνακα',\n    'bread_crud_actions'     => 'Ενέργειες BREAD/CRUD',\n    'bread_info'             => 'BREAD πληροφορίες',\n    'controller_name_hint'   => 'Π.χ. PageController, αν μείνει κενό θα χρησιμοποιηθεί ο BREAD Controller',\n    'create_bread_for_table' => 'Δημιουργία BREAD για τον πίνακα :table',\n    'default_search_key'     => 'Προεπιλεγμένο πεδίο αναζήτησης διακομιστή',\n    'default_search_key_ph'  => 'Αυτό το πεδίο θα είναι προεπιλεγμένο για αναζήτηση από την πλευρά του διακομιστή',\n    'delete_bread'           => 'Διαγραφή του BREAD',\n    'delete_bread_conf'      => 'Ναι, διάγραψε το BREAD',\n    'delete_bread_quest'     => 'Είστε σίγουροι ότι θέλετε να διαγράψετε το BREAD για τον πίνακα :table;',\n    'edit_bread'             => 'Επεξεργασία BREAD',\n    'edit_bread_for_table'   => 'Επεξεργασία BREAD για τον πίνακα :table',\n    'error_creating_bread'   => 'Συγγνώμη, φαίνεται να προέκυψε ένα πρόβλημα κατά τη δημιουργία αυτού του BREAD',\n    'error_removing_bread'   => 'Συγγνώμη, φαίνεται να προέκυψε ένα πρόβλημα κατά τη διαγραφή αυτού του BREAD',\n    'error_updating_bread'   => 'Συγγνώμη, φαίνεται να προέκυψε ένα πρόβλημα κατά τη ενημέρωση αυτού του BREAD',\n    'error_tagging'          => 'Συγγνώμη, φαίνεται να προέκυψε ένα πρόβλημα κατά τη δημιουργία αυτής της εγγραφής. Παρακαλούμε σιγουρευτείτε ότι ο πίνακας έχεις προεπιλογμένες τιμές για τα υπόλοιπα πεδία.',\n    'success_created_bread'  => 'Το νέο BREAD δημιουργήθηκε με επιτυχία',\n    'success_remove_bread'   => 'Το BREAD του :datatype διαγράφηκε με επιτυχία',\n    'success_update_bread'   => 'Το BREAD του :datatype ενημερώθηκε με επιτυχία',\n    'controller_name'        => 'Όνομα του Controller',\n    'create_migration'       => 'Δημιουργία migration για αυτόν τον πίνακα;',\n    'description'            => 'Περιγραφή',\n    'display_name'           => 'Εμφανιζόμενο όνομα',\n    'display_name_plural'    => 'Εμφανιζόμενο όνομα (Πληθυντικός)',\n    'display_name_singular'  => 'Εμφανιζόμενο όνομα (Ενικός)',\n    'edit_rows'              => 'Επεξεργαστείτε τις σειρές για τον πίνακα :table παρακάτω',\n    'generate_permissions'   => 'Δημιουργία αδειών',\n    'icon_class'             => 'Εικονίδιο για αυτόν τον πίνακα',\n    'icon_hint'              => 'Εικονίδιο (προαιρετικό) Χρησιμοποιήστε μία',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Model Class Name',\n    'model_name'             => 'Model Name',\n    'model_name_ph'          => 'Π.χ. \\App\\User, αν μείνει κενό θα γίνει προσπάθεια χρήσης του ονόματος του πίνακα',\n    'order'                  => 'Ταξινόμηση',\n    'order_column'           => 'Στήλη ταξινόμησης',\n    'order_column_ph'        => 'Η στήλη όπου αποθηκεύεται η ταξινόμηση',\n    'order_direction'        => 'Κατεύθυνση ταξινόμησης',\n    'order_ident_column'     => 'Στήλη εμφάνισης ταξινόμησης',\n    'order_ident_column_ph'  => 'Η στήλη που εμφανίζεται στη σελίδα ταξινόμησης',\n    'ordering_not_set'       => 'Πρέπει πρώτα να ορίσετε ταξινόμηση',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'π.χ. \\App\\Policies\\UserPolicy, Αν μείνει κενό θα γίνει προσπάθεια να χρησιμοποιηθεί η προεπιλογή',\n    'server_pagination'      => 'Server-side Pagination',\n    'scope'                  => 'Πεδίο εφαρμογής (scope)',\n    'soft_deletes_on'        => 'Εμφάνιση διαγραμμένων',\n    'soft_deletes_off'       => 'Απόκρυψη διαγραμμένων',\n    'updated_order'          => 'Η ταξινόμηση ενημερώθηκε επιτυχώς',\n    'url_slug'               => 'Μόνιμος σύνδεσμος (πρέπει να είναι μοναδικό)',\n    'url_slug_ph'            => 'Μόνιμος σύνδεσμος (π.χ. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/el/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Καλωσήρθατε στην Πυξίδα Voyager. Κάθε καλή εφαρμογή χρειάζεται μία πυξίδα για να σας καθοδηγήσει προς τη σωστή κατεύθυνση. Σε αυτό τον τομέα θα βρείτε πολλές πηγές και ενέργειες διαχείρισης που θα σας βοηθήσουν όσο χτίζετε την εφαρμογή σας.',\n    'links'                  => [\n        'title'                 => 'Σύνδεσμοι',\n        'documentation'         => 'Τεκμηρίωση',\n        'voyager_homepage'      => 'Αρχική σελίδα Voyager',\n    ],\n    'commands'      => [\n        'title'                 => 'Εντολές',\n        'text'                  => 'Τρέξτε Artisan εντολές μέσα από το Voyager.',\n        'clear_output'          => 'Καθαρισμός εξόδου',\n        'command_output'        => 'Έξοδος εντολής Artisan',\n        'additional_args'       => 'Επιπλέον παράμετροι;',\n        'run_command'           => 'Εκτέλεση εντολής',\n    ],\n    'resources'     => [\n        'title'                 => 'Πηγές',\n        'text'                  => 'Πηγές για το Voyager ώστε να βρείτε ό,τι ψάχνετε γρηγορότερα.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Αρχεία καταγραφής',\n        'text'                  => 'Τα αρχεία καταγραφής της εφαρμογής σας',\n        'file_too_big'          => 'Αρχείο καταγραφής >50M, παρακαλούμε κατεβάστε το.',\n        'level'                 => 'Επίπεδο',\n        'context'               => 'Γενικό πλαίσιο',\n        'date'                  => 'Ημερομηνία',\n        'content'               => 'Περιεχόμενο',\n        'download_file'         => 'Κατεβάστε το αρχείο',\n        'delete_file'           => 'Διαγράψτε το αρχείο',\n        'delete_all_files'      => 'Διαγράψτε όλα τα αρχεία',\n        'delete_success'        => 'Διαγράφηκε επιτυχώς το αρχείο:',\n        'delete_all_success'    => 'Διαγράφηκαν επιτυχώς όλα τα αρχεία καταγραφής',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Γραμματοσειρές',\n        'font_class'            => 'Voyager Fonts Class Mapping',\n        'font_character'        => 'Voyager Fonts Character Mapping',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/el/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Προσθέστε νέα στήλη',\n    'add_softdeletes'           => 'Προσθέστε Soft Deletes',\n    'add_timestamps'            => 'Προσθέστε Timestamps',\n    'already_exists'            => 'υπάρχει ήδη',\n    'already_exists_table'      => 'Ο πίνακας :table υπάρχει ήδη',\n    'bread_crud_actions'        => 'Ενέργειες BREAD/CRUD',\n    'bread_info'                => 'Πληροφορίες BREAD',\n    'browse_bread'              => 'Περιήγηση BREAD',\n    'column'                    => 'Στήλη',\n    'composite_warning'         => 'Προειδοποίηση: Αυτή η στήλη είναι μέρος ενός composite index',\n    'create_new_table'          => 'Δημιουργία νέου πίνακα',\n    'create_your_new_table'     => 'Δημιουργήστε το νέο σας πίνακα',\n    'create_model_table'        => 'Δημιουργία μοντέλου (model) για αυτόν τον πίνακα;',\n    'default'                   => 'Προεπιλογή',\n    'delete_bread_before_table' => 'Παρακαλούμε βεβαιωθείτε ότι διαγράψατε το BREAD για αυτόν τον πίνακα πριν τον διαγράψετε.',\n    'delete_table_confirm'      => 'Ναι, διάγραψε τον πίνακα',\n    'delete_table_question'     => 'Είστε σίγουροι ότι θέλετε να διαγράψετε τον πίνακα :table;',\n    'editing_table'             => 'Επεξεργασία του πίνακα :table',\n    'edit_table'                => 'Επεξεργαστείτε τον πίνακα :table παρακάτω',\n    'edit_table_not_exist'      => 'Ο πίνακας που θέλετε να επεξεργαστείτε δεν υπάρχει',\n    'extra'                     => 'Επιπλέον',\n    'field'                     => 'Πεδίο',\n    'field_safe_failed'         => 'Το πεδίο :field δεν αποθηκεύτηκε, γίνεται επαναφορά!',\n    'index'                     => 'ΔΕΙΚΤΗΣ',\n    'input_type'                => 'Τύπος Εισόδου',\n    'key'                       => 'Κλειδί',\n    'name_warning'              => 'Παρακαλούμε ονομάστε τη στήλη πριν προσθέσετε index',\n    'no_composites_warning'     => 'Αυτός ο πίνακας έχει composite indexes. Παρακαλούμε σημειώστε ότι μέχρι στιγμής δεν υποστηρίζονται. Προσέξτε όταν προσπαθείτε να προσθαφαιρέσετε indexes.',\n    'null'                      => 'Κενό',\n    'optional_details'          => 'Προαιρετικές Λεπτομέρειες',\n    'policy_class'              => 'Policy Class Name',\n    'policy_name'               => 'Policy Name',\n    'policy_name_ph'            => 'π.χ. \\App\\Policies\\UserPolicy, αν μείνει κενό θα γίνει προσπάθεια να χρησιμοποιηθεί η προεπιλογή',\n    'primary'                   => 'ΠΡΩΤΕΥΩΝ',\n    'server_pagination'         => 'Server-side Σελιδοποίηση',\n    'success_create_table'      => 'Ο πίνακας :table δημιουργήθηκε με επιτυχία',\n    'success_created_bread'     => 'Το νέο BREAD δημιουργήθηκε με επιτυχία',\n    'success_delete_table'      => 'Ο πίνακας :table διαγράφηκε με επιτυχία',\n    'success_remove_bread'      => 'Το BREAD του :datatype διαγράφηκε με επιτυχία',\n    'success_update_bread'      => 'Το BREAD του :datatype ενημερώθηκε με επιτυχία',\n    'success_update_table'      => 'Ο πίνακας :table ενημερώθηκε με επιτυχία',\n    'table_actions'             => 'Ενέργειες Πίνακα',\n    'table_columns'             => 'Στήλες Πίνακα',\n    'table_has_index'           => 'Ο πίνακας έχει ήδη ένα πρωτεύων index.',\n    'table_name'                => 'Όνομα Πίνακα',\n    'table_no_columns'          => 'Ο πίνακας δεν έχει στήλες...',\n    'type'                      => 'Τύπος',\n    'type_not_supported'        => 'Αυτός ο τύπος δεν υποστηρίζεται',\n    'unique'                    => 'ΜΟΝΑΔΙΚΟ',\n    'unknown_type'              => 'Άγνωστος Τύπος',\n    'update_table'              => 'Ενημέρωση Πίνακα',\n    'url_slug'                  => 'Μόνιμος σύνδεσμος (πρέπει να είναι μοναδικό)',\n    'url_slug_ph'               => 'Μόνιμος σύνδεσμος (π.χ. posts)',\n    'visibility'                => 'Ορατότητα',\n    'relationship'              => [\n        'relationship'         => 'Σχέση',\n        'relationships'        => 'Σχέσεις',\n        'has_one'              => 'Έχει ένα (Has One)',\n        'has_many'             => 'Έχει πολλά (Has Many)',\n        'belongs_to'           => 'Ανήκει σε (Belongs To)',\n        'belongs_to_many'      => 'Ανήκει σε πολλά (Belongs To Many)',\n        'which_column_from'    => 'Ποιά στήλη από το',\n        'is_used_to_reference' => 'χρησιμοποιείται για να συνδέσει το',\n        'pivot_table'          => 'Πίνακας πίβοτ (Pivot Table)',\n        'selection_details'    => 'Λεπτομέρειες επιλογής',\n        'display_the'          => 'Εμφάνισε το',\n        'store_the'            => 'Αποθήκευσε το',\n        'allow_tagging'        => 'Επίτρεψε το Tagging',\n        'easy_there'           => 'Ώπα καπετάνιε, χαλάρωσε',\n        'before_create'        => 'Πριν μπορέσετε να δημιουργήσετε νέα σχέση, θα πρέπει πρώτα να δημιουργήσετε το BREAD.<br> Αφού το κάνετε, επιστρέψτε πίσω να επεξεργαστείτε το BREAD και τότε θα μπορείτε να δημιουργήσετε σχέσεις.<br> Ευχαριστούμε.',\n        'cancel'               => 'Ακύρωση',\n        'add_new'              => 'Προσθήκη νέας Σχέσης',\n        'open'                 => 'Άνοιγμα',\n        'close'                => 'Κλείσιμο',\n        'relationship_details' => 'Λεπτομέρειες Σχέσης',\n        'browse'               => 'Περιήγηση',\n        'read'                 => 'Ανάγνωση',\n        'edit'                 => 'Επεξεργασία',\n        'add'                  => 'Προσθήκη',\n        'delete'               => 'Διαγραφή',\n        'create'               => 'Δημιουργήστε μία Σχέση',\n        'namespace'            => 'Fully Qualified Model Name (π.χ. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/el/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Δεν υπάρχουν δεδομένα στον πίνακα',\n    'sInfo'           => 'Εμφανίζονται _START_ έως _END_ από _TOTAL_ εγγραφές',\n    'sInfoEmpty'      => 'Εμφανίζονται 0 έως 0 από 0 εγγραφές',\n    'sInfoFiltered'   => '(Φιλτραρισμένες από _MAX_ εγγραφές συνολικά)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => '.',\n    'sLengthMenu'     => 'Εμφάνισε _MENU_ εγγραφές',\n    'sLoadingRecords' => 'Φόρτωση...',\n    'sProcessing'     => 'Επεξεργασία...',\n    'sSearch'         => 'Αναζήτηση:',\n    'sZeroRecords'    => 'Δεν βρέθηκαν εγγραφές που να ταιριάζουν',\n    'oPaginate'       => [\n        'sFirst'    => 'Πρώτη',\n        'sLast'     => 'Τελευταία',\n        'sNext'     => 'Επόμενη',\n        'sPrevious' => 'Προηγούμενη',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': ενεργοποιήστε για αύξουσα ταξινόμηση',\n        'sSortDescending' => ': ενεργοποιήστε για φθίνουσα ταξινόμηση',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/el/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Προηγούμενη εβδομάδα',\n    'last_year' => 'Προηγούμενο έτος',\n    'this_week' => 'Αυτή την εβδομάδα',\n    'this_year' => 'Αυτό το έτος',\n];\n"
  },
  {
    "path": "publishable/lang/el/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Σελίδα|Σελίδες',\n    'page_link_text' => 'Όλες οι σελίδες',\n    'page_text'      => 'Έχετε :count :string στη βάση δεδομένων σας. Κάντε κλικ παρακάτω για να δείτε όλες τις σελίδες.',\n    'post'           => 'Άρθρο|Άρθρα',\n    'post_link_text' => 'Όλα τα άρθρα',\n    'post_text'      => 'Έχετε :count :string στη βάση δεδομένων σας. Κάντε κλικ παρακάτω για να δείτε όλα τα άρθρα.',\n    'user'           => 'Χρήστη|Χρήστες',\n    'user_link_text' => 'Όλοι οι χρήστες',\n    'user_text'      => 'Έχετε :count :string στη βάση δεδομένων σας. Κάντε κλικ παρακάτω για να δείτε όλους τους χρήστες.',\n];\n"
  },
  {
    "path": "publishable/lang/el/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Μόλις δημιουργήσαμε το symlink που έλειπε για εσάς.',\n    'symlink_created_title'  => 'Το storage symlink που έλειπε δημιουργήθηκε',\n    'symlink_failed_text'    => 'Δεν καταφέραμε να δημιουργήσουμε το symlink που έλειπε για την εφαρμογή σας. Φαίνεται ότι ο πάροχος φιλοξενία του site σας δεν το υποστηρίζει.',\n    'symlink_failed_title'   => 'Δεν καταφέραμε να δημιουργήσουμε το storage symlink που έλειπε',\n    'symlink_missing_button' => 'Επιδιόρθωση',\n    'symlink_missing_text'   => 'Δεν μπορέσαμε να βρούμε το storage symlink. Αυτό μπορεί να προκαλέσει προβλήματα με τη φόρτωση αρχείων από τον browser.',\n    'symlink_missing_title'  => 'Λείπει το storage symlink',\n];\n"
  },
  {
    "path": "publishable/lang/el/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Αφήστε το κενό για να παραμείνει το ίδιο',\n    'field_select_dd_relationship' => 'Σιγουρευτείτε ότι έχετε ρυθμίσει την κατάλληλη σχέση στη μέθοδο :method της κλάσης :class',\n    'type_checkbox'                => 'Πεδίο ναι/όχι (check box)',\n    'type_codeeditor'              => 'Πεδίο κώδικα',\n    'type_file'                    => 'Αρχείο',\n    'type_image'                   => 'Εικόνα',\n    'type_radiobutton'             => 'Πεδίο επιλογής (radio)',\n    'type_richtextbox'             => 'Πεδίο επεξεργασίας κειμένου',\n    'type_selectdropdown'          => 'Πεδίο επιλογής (dropdown)',\n    'type_textarea'                => 'Μεγάλο πεδίο κειμένου',\n    'type_textbox'                 => 'Πεδίο κειμένου',\n];\n"
  },
  {
    "path": "publishable/lang/el/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Ενέργεια',\n    'actions'                => 'Ενέργειες',\n    'add'                    => 'Προσθήκη',\n    'add_folder'             => 'Προσθήκη φακέλου',\n    'add_new'                => 'Προσθήκη νέου',\n    'all_done'               => 'Όλα έτοιμα',\n    'are_you_sure'           => 'Είστε σίγουρος',\n    'are_you_sure_delete'    => 'Είστε σίγουρος ότι θέλετε να διαγράψετε',\n    'ascending'              => 'Αύξουσα',\n    'auto_increment'         => 'Αυτόματη αρίθμηση',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Περιήγηση',\n    'builder'                => 'Δόμηση',\n    'bulk_delete'            => 'Μαζική διαγραφή',\n    'bulk_delete_confirm'    => 'Ναι, διαγραφή αυτών',\n    'bulk_delete_nothing'    => 'Δεν έχετε επιλέξει τίποτα για διαγραφή',\n    'cancel'                 => 'Ακύρωση',\n    'choose_type'            => 'Επιλέξτε τύπο',\n    'click_here'             => 'Κλικ εδώ',\n    'close'                  => 'Κλείσιμο',\n    'compass'                => 'Πυξίδα',\n    'created_at'             => 'Δημιουργήθηκε στις',\n    'custom'                 => 'Προσαρμογή',\n    'dashboard'              => 'Πίνακας Ελέγχου',\n    'database'               => 'Βάση Δεδομένων',\n    'default'                => 'Προεπιλογή',\n    'delete'                 => 'Διαγραφή',\n    'delete_confirm'         => 'Ναι, διάγραψέ το!',\n    'delete_question'        => 'Είστε σίγουρος ότι θέλετε να το διαγράψετε',\n    'delete_this_confirm'    => 'Ναι, διάγραψέ το!',\n    'descending'             => 'Φθίνουσα',\n    'deselect_all'           => 'Αποεπιλογή όλων',\n    'download'               => 'Λήψη',\n    'drag_drop_info'         => 'Μετακινήστε τα παρακάτω αντικείμενα με \"σύρε και άσε\" για να τα ανακατατάξετε.',\n    'edit'                   => 'Επεξεργασία',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Συγγνώμη, υπήρξε κάποιο πρόβλημα κατά τη διαγραφή',\n    'error_restoring'        => 'Συγγνώμη, υπήρξε κάποιο πρόβλημα κατά την επαναφορά',\n    'exception'              => 'Εξαίρεση',\n    'featured'               => 'Επιλεγμένο (featured)',\n    'field_does_not_exist'   => 'Το πεδίο δεν υπάρχει',\n    'find_by_place'          => 'Find by Place',\n    'home'                   => 'Αρχική',\n    'how_to_use'             => 'Πως χρησιμοποιείται',\n    'index'                  => 'Λίστα',\n    'internal_error'         => 'Εσωτερικό σφάλμα',\n    'items'                  => 'αντικείμενο/α',\n    'keep_sidebar_open'      => 'Γιαρρ! Ρίξτε τις άγκυρες! (και κρατήστε την sidebar ανοιχτή)',\n    'key'                    => 'Κλειδί',\n    'last_modified'          => 'Τελευταία τροποποίηση',\n    'latitude'               => 'Γεωγραφικό πλάτος',\n    'length'                 => 'Μήκος',\n    'locale'                 => 'Τοποθεσία',\n    'login'                  => 'Σύνδεση',\n    'logout'                 => 'Αποσύνδεση',\n    'longitude'              => 'Γεωγραφικό μήκος',\n    'media'                  => 'Πολυμέσα',\n    'menu_builder'           => 'Δόμηση μενού',\n    'mimetype_not_allowed'   => 'Αυτός ο τύπος αρχείου δεν επιτρέπεται',\n    'move'                   => 'Μετακίνηση',\n    'name'                   => 'Όνομα',\n    'new'                    => 'Νέο',\n    'no'                     => 'Όχι',\n    'no_thanks'              => 'Όχι ευχαριστώ',\n    'none'                   => 'Κανένα',\n    'not_null'               => 'Όχι κενό (not null)',\n    'no_results'             => 'Κανένα αποτέλεσμα',\n    'open'                   => 'Άνοιγμα',\n    'options'                => 'Επιλογές',\n    'password'               => 'Κωδικός',\n    'permissions'            => 'Άδειες',\n    'profile'                => 'Προφίλ',\n    'public_url'             => 'Δημόσιο URL',\n    'read'                   => 'Εμφάνιση',\n    'rename'                 => 'Μετονομασία',\n    'remember_me'            => 'Να με θυμάσαι',\n    'required'               => 'Απαραίτητο',\n    'return_to_list'         => 'Επιστροφή στη λίστα',\n    'route'                  => 'Διαδρομή (Route)',\n    'save'                   => 'Αποθήκευση',\n    'search'                 => 'Αναζήτηση',\n    'select_all'             => 'Επιλογή όλων',\n    'select_group'           => 'Επιλέξτε υπάρχον γκρουπ ή δημιουργήστε νέο',\n    'settings'               => 'Ρυθμίσεις',\n    'showing_entries'        => 'Showing :from to :to of :all entry|Showing :from to :to of :all entries',\n    'submit'                 => 'Υποβολή',\n    'successfully_added_new' => 'Προστέθηκε επιτυχώς',\n    'successfully_deleted'   => 'Διαγράφηκε επιτυχώς',\n    'successfully_restored'  => 'Επανήλθε επιτυχώς',\n    'successfully_updated'   => 'Ενημερώθηκε επιτυχώς',\n    'successfully_created'   => 'Δημιουργήθηκε επιτυχώς',\n    'sweet_success'          => 'Γλυκιά επιτυχία!',\n    'timestamp'              => 'Χρονική σήμανση (Timestamp)',\n    'title'                  => 'Τίτλος',\n    'type'                   => 'Τύπος',\n    'restore'                => 'Επαναφορά',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'Unstick the sidebar',\n    'update'                 => 'Ενημέρωση',\n    'update_failed'          => 'Η ενημέρωση απέτυχε',\n    'updated_order'          => 'Η ταξινόμηση ενημερώθηκε',\n    'upload'                 => 'Ανεβάστε',\n    'url'                    => 'URL',\n    'view'                   => 'Προβολή',\n    'viewing'                => 'Βλέπετε:',\n    'whoopsie'               => 'Ουυυπς!',\n    'yes'                    => 'Ναι',\n    'yes_please'             => 'Ναι παρακαλώ',\n];\n"
  },
  {
    "path": "publishable/lang/el/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Μη έγκυρο JSON',\n    'invalid_message'   => 'Φαίνεται ότι εισάγατε μη έγκυρο JSON.',\n    'valid'             => 'Έγκυρο JSON',\n    'validation_errors' => 'Λάθη επικύρωσης',\n];\n"
  },
  {
    "path": "publishable/lang/el/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Logging in',\n    'signin_below' => 'Κάντε σύνδεση παρακάτω:',\n    'welcome'      => 'Καλωσήρθατε στο Voyager. Τον πίνακα διαχείρισης που έλειπε από το Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/el/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Προθήκη Νέου Φακέλου',\n    'audio_support'          => 'Ο browser που χρησιμοποιείτε δεν υποστηρίζει στοιχείο ήχου',\n    'create_new_folder'      => 'Δημιουργία Νέου Φακέλου',\n    'delete_folder_question' => 'Διαγράφοντας έναν φάκελο θα διαγραφούν μαζί και όλα τα αρχεία και οι φάκελοι που περιέχει.',\n    'delete_question'        => 'Είστε σίγουρος ότι θέλετε να διαγράψετε τα ακόλουθα αρχεία;',\n    'destination_folder'     => 'Φάκελος προορισμού',\n    'drag_drop_info'         => 'Σύρετε αρχεία εδώ ή κάντε κλικ παρακάτω για μεταφόρτωση',\n    'error_already_exists'   => 'Συγγνώμη αλλά υπάρχει ήδη ένα αρχείο/φάκελος με αυτό το όνομα σε αυτόν τον φάκελο.',\n    'error_creating_dir'     => 'Συγγνώμη αλλά κάτι πήγε στραβά με τη δημιουργία του φακέλου, παρακαλούμε ελέγξτε τις άδειες (permissions)',\n    'error_deleting_file'    => 'Συγγνώμη αλλά κάτι πήγε στραβά με τη διαγραφή του αρχείου, παρακαλούμε ελέγξτε τις άδειες (permissions)',\n    'error_deleting_folder'  => 'Συγγνώμη αλλά κάτι πήγε στραβά με τη διαγραφή του φακέλου, παρακαλούμε ελέγξτε τις άδειες (permissions)',\n    'error_may_exist'        => 'Μπορεί να υπάρχει ήδη αρχείο ή φάκελος με αυτό το όνομα. Παρακαλούμε επιλέξτε ένα άλλο όνομα ή διαγράψτε το άλλο αρχείο.',\n    'error_moving'           => 'Συγγνώμη αλλά κάτι πήγε στραβά με τη μετακίνηση αυτού του αρχείου/φακέλου, παρακαλούμε σιγουρευτείτε ότι έχετε τις σωστές τις άδειες (permissions).',\n    'error_uploading'        => 'Η μεταφόρτωση απέτυχε: Συνέβη ένα άγνωστο σφάλμα!',\n    'files'                  => '1 αρχείο|:count αρχεία',\n    'files_more'             => 'και :count ακόμα',\n    'file_does_not_exist'    => 'Το αρχείο δεν υπάρχει',\n    'file_removed'           => 'Το αρχείο διαγράφηκε',\n    'files_selected'         => 'Αρχεία/φάκελοι επιλεγμένα',\n    'folder_exists_already'  => 'Συγγνώμη, αυτός ο φακελος υπάρχει ήδη, παρακαλούμε διαγράψτε τον φάκελο πρώτα αν θέλετε να τον δημιουργήσετε ξανά.',\n    'image_does_not_exist'   => 'Η εικόνα δεν υπάρχει',\n    'image_removed'          => 'Η εικόνα διαγράφηκε',\n    'library'                => 'Βιβλιοθήκη αρχείων',\n    'loading'                => 'ΦΩΡΤΩΝΟΥΜΕ ΤΑ ΑΡΧΕΙΑ ΣΑΣ',\n    'max_files_select'       => 'Μπορείτε να διαλέξετε ένα μόνο αρχείο|Μπορείτε να διαλέξετε μέχρι :count αρχεία',\n    'min_files_select'       => 'Πρέπει να διαλέξετε τουλάχιστον ένα αρχείο|Πρέπει να διαλέξετε τουλάχιστον :count αρχεία',\n    'move_file_folder'       => 'Μετακίνηση Αρχείου/Φακέλου',\n    'new_file_folder'        => 'Νέο Όνομα Αρχείου/Φακέλου',\n    'new_folder_name'        => 'Νέο Όνομα Φακέλου',\n    'no_files_here'          => 'Δεν υπάρχουν αρχεία.',\n    'no_files_in_folder'     => 'Δεν υπάρχουν αρχεία σε αυτό τον φάκελο.',\n    'nothing_selected'       => 'Κανένα αρχείο ή φάκελος δεν επιλέχθηκε',\n    'rename_file_folder'     => 'Μετονομασία Αρχείου/Φακέλου',\n    'success_uploaded_file'  => 'Το αρχείο μεταφορτώθηκε με επιτυχία!',\n    'success_uploading'      => 'Η εικόνα μεταφορτώθηκε με επιτυχία!',\n    'success_moved'          => 'Το αρχείο/φάκελος μετακινήθηκε με επιτυχία',\n    'success_renamed'        => 'Το αρχείο/φάκελος μετονομάστηκε με επιτυχία',\n    'uploading_wrong_type'   => 'Η μεταφόρτωση απέτυχε: Μη υποστηριζόμενος τύπος αρχείου ή το αρχείο είναι πολύ μεγάλο για μεταφόρτωση!',\n    'crop'                   => 'Περικοπή',\n    'crop_and_create'        => 'Περικοπή & Δημιουργία',\n    'crop_override_confirm'  => 'Η αρχική εικόνα θα αντικατασταθεί, είστε σίγουρος;',\n    'crop_image'             => 'Περικοπή εικόνας',\n    'success_crop_image'     => 'Έγινε περικοπή της εικόνας με επιτυχία',\n    'height'                 => 'Ύψος: ',\n    'title'                  => 'Τίτλος',\n    'type'                   => 'Τύπος',\n    'size'                   => 'Μέγεθος',\n    'public_url'             => 'Δημόσιο URL',\n    'last_modified'          => 'Τελευταία τροποποίηση',\n    'browser_video_support'  => 'Ο browser που χρησιμοποιείτε δεν υποστηρίζει το στοιχείο για αρχεία βίντεο.',\n    'browser_audio_support'  => 'Ο browser που χρησιμοποιείτε δεν υποστηρίζει το στοιχείο για αρχεία ήχου.',\n    'width'                  => 'Πλάτος: ',\n    'add_all_selected'       => 'Προσθήκη όλων των επιλεγμένων',\n];\n"
  },
  {
    "path": "publishable/lang/el/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Χρώμα σε RGB ή Hex (προαιρετικό)',\n    'color_ph'             => 'Χρώμα, π.χ. #ffffff ή rgb(255, 255, 255)',\n    'create_new_item'      => 'Δημιουργία νέου στοιχείου μενού',\n    'delete_item_confirm'  => 'Ναι, διάγραψε αυτό το στοιχείο από το μενού',\n    'delete_item_question' => 'Είστε σίγουρος ότι θέλετε να διαγράψετε αυτό το στοιχείο από το μενού;',\n    'drag_drop_info'       => 'Σύρετε και αφήστε τα στοιχεία του μενού για να τα ανακατατάξετε.',\n    'dynamic_route'        => 'Δυναμική Διαδρομή',\n    'edit_item'            => 'Επεξεργασία στοιχείου μενού',\n    'icon_class'           => 'Font Icon class για το στοιχείο μενού (Χρησιμοποιήστε μία',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icon Class (προαιρετικό)',\n    'item_route'           => 'Διαδρομή για το στοιχείο μενού',\n    'item_title'           => 'Τίτλος στοιχείου μενού',\n    'link_type'            => 'Τύπος συνδέσμου',\n    'new_menu_item'        => 'Νέο στοιχείο μενού',\n    'open_in'              => 'Άνοιγμα σε',\n    'open_new'             => 'Νέα Καρτέλα/Παράθυρο',\n    'open_same'            => 'Ίδια Καρτέλα/Παράθυρο',\n    'route_parameter'      => 'Παράμετροι Διαδρομής (αν υπάρχουν)',\n    'static_url'           => 'Στατικό URL',\n    'successfully_created' => 'Το νέο στοιχείο μενού δημιουργήθηκε με επιτυχία.',\n    'successfully_deleted' => 'Το στοιχείο μενού διαγράφηκε με επιτυχία.',\n    'successfully_updated' => 'Το στοιχείο μενού ενημερώθηκε με επιτυχία.',\n    'updated_order'        => 'Η σειρά του στοιχείων του μενού ενημερώθηκε με επιτυχία.',\n    'url'                  => 'URL για το στοιχείο μενού',\n    'usage_hint'           => 'Μπορείτε να εμφανίσετε ένα μενού οπουδήποτε στο site με τον κώδικα|Μπορείτε να εμφανίσετε αυτό το μενού οπουδήποτε στο site με τον κώδικα',\n];\n"
  },
  {
    "path": "publishable/lang/el/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields' => 'Επιπλέον πεδία',\n    'category'          => 'Κατηγορία άρθρου',\n    'content'           => 'Περιεχόμενο άρθρου',\n    'details'           => 'Λεπτομέρειες άρθρου',\n    'excerpt'           => 'Απόσπασμα <small>μικρή περιγραφή για το άρθρο</small>',\n    'image'             => 'Εικόνα Άρθρου',\n    'meta_description'  => 'Meta Description',\n    'meta_keywords'     => 'Meta Keywords',\n    'new'               => 'Δημιουργία νέου άρθρου',\n    'seo_content'       => 'Περιεχόμενο SEO',\n    'seo_title'         => 'Τίτλος SEO',\n    'slug'              => 'Μόνιμος σύνδεσμος',\n    'status'            => 'Κατάσταση άρθρου',\n    'status_draft'      => 'πρόχειρο',\n    'status_pending'    => 'εκκρεμεί',\n    'status_published'  => 'δημοσιεύτηκε',\n    'title'             => 'Τίτλος άρθρου',\n    'title_sub'         => 'Ο τίτλος του άρθρου σας',\n    'update'            => 'Ενημέρωση άρθρου',\n];\n"
  },
  {
    "path": "publishable/lang/el/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'Εικόνα προφίλ',\n    'edit'             => 'Επεξεργασία του προφίλ μου',\n    'edit_user'        => 'Επεξεργασία χρήστη',\n    'password'         => 'Κωδικός',\n    'password_hint'    => 'Αφήστε το κενό για να κρατήσετε τον ίδιο',\n    'role'             => 'Ρόλος',\n    'roles'            => 'Ρόλοι',\n    'role_default'     => 'Προεπιλεγμένος ρόλος',\n    'roles_additional' => 'Επιπλέον ρόλοι',\n    'user_role'        => 'Ρόλος χρήστη',\n];\n"
  },
  {
    "path": "publishable/lang/el/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Συγγραφέας',\n        'avatar'           => 'Εικόνα προφίλ',\n        'body'             => 'Σώμα κειμένου',\n        'category'         => 'Κατηγορία',\n        'created_at'       => 'Δημιουργήθηκε στις',\n        'display_name'     => 'Εμφανιζόμενο όνομα',\n        'email'            => 'Email',\n        'excerpt'          => 'Απόσπασμα',\n        'featured'         => 'Επιλεγμένο',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Description',\n        'meta_keywords'    => 'Meta Keywords',\n        'name'             => 'Όνομα',\n        'order'            => 'Σειρά',\n        'page_image'       => 'Εικόνα σελίδας',\n        'parent'           => 'Γονέας',\n        'password'         => 'Κωδικός',\n        'post_image'       => 'Εικόνα άρθρου',\n        'remember_token'   => 'Remember Token',\n        'role'             => 'Ρόλος',\n        'seo_title'        => 'Τίτλος SEO',\n        'slug'             => 'Μόνιμος σύνδεσμος',\n        'status'           => 'Κατάσταση',\n        'title'            => 'Τίτλος',\n        'updated_at'       => 'Ενημερώθηκε στις',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Κατηγορία',\n            'plural'   => 'ΚΑτηγορίες',\n        ],\n        'menu'     => [\n            'singular' => 'Μενού',\n            'plural'   => 'Μενού',\n        ],\n        'page'     => [\n            'singular' => 'Σελίδα',\n            'plural'   => 'Σελίδες',\n        ],\n        'post'     => [\n            'singular' => 'Άρθρο',\n            'plural'   => 'Άρθρα',\n        ],\n        'role'     => [\n            'singular' => 'Ρόλος',\n            'plural'   => 'Ρόλοι',\n        ],\n        'user'     => [\n            'singular' => 'Χρήστης',\n            'plural'   => 'Χρήστες',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Κατηγορίες',\n        'compass'      => 'Πυξίδα',\n        'dashboard'    => 'Πίνακας ελέγχου',\n        'database'     => 'Βάση Δεδομένων',\n        'media'        => 'Αρχεία',\n        'menu_builder' => 'Δόμηση μενού',\n        'pages'        => 'Σελίδες',\n        'posts'        => 'Άρθρα',\n        'roles'        => 'Ρόλοι',\n        'settings'     => 'Ρυθμίσεις',\n        'tools'        => 'Εργαλεία',\n        'users'        => 'Χρήστες',\n    ],\n    'roles'      => [\n        'admin' => 'Διαχειριστής',\n        'user'  => 'Απλός χρήστης',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Εικόνα υπόβαθρου για τον τομέα διαχείρισης',\n            'description'                => 'Περιγραφή τομέα διαχείρισης',\n            'description_value'          => 'Καλωσήρθατε στο Voyager. Το διαχειριστικό εργαλείο που έλειπε από την Laravel',\n            'google_analytics_client_id' => 'Google Analytics Client ID (χρησιμοποιείται για τον πίνακα ελέγχου)',\n            'icon_image'                 => 'Εικονίδιο τομέα διαχείρισης',\n            'loader'                     => 'Εικονίδιο φόρτωσης στον τομέα διαχείρισης',\n            'title'                      => 'Τίτλος τομέα διαχείρισης',\n        ],\n        'site'  => [\n            'description'                  => 'Περιγραφή του Site',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Λογότυπο του Site',\n            'title'                        => 'Τίτλος του Site',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/el/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Μπορείτε να εμφανίσετε την τιμή κάθε ρύθμισης οπουδήποτε στο Site σας με τον κώδικα',\n    'save'                 => 'Αποθήκευση ρυθμίσεων',\n    'new'                  => 'Νέα ρύθμιση',\n    'help_name'            => 'Όνομα ρύθμισης. π.χ.: Τίτλος διαχείρισης',\n    'help_key'             => 'Κλειδί ρύθμισης, π.χ.: admin_title',\n    'help_option'          => '(προαιρετικό, ισχύουν οι ίδιες επιλογές όπως για το αντίστοιχο πεδίο φόρμας)',\n    'add_new'              => 'Προσθήκη νέας ρύθμισης',\n    'delete_question'      => 'Είστε σίγουρος ότι θέλετε να διαγράψετε τη ρύθμιση :setting;',\n    'delete_confirm'       => 'Ναι, διάγραψε τη ρύθμιση',\n    'successfully_created' => 'Οι ρυθμίσεις δημιουργήθηκαν',\n    'successfully_saved'   => 'Οι ρυθμίσεις αποθηκεύτηκαν',\n    'successfully_deleted' => 'Οι ρυθμίσεις διαγράφηκαν',\n    'already_at_top'       => 'Αυτή η ρύθμιση είναι ήδη στην αρχή της λίστας',\n    'already_at_bottom'    => 'Αυτή η ρύθμιση είναι ήδη στο τέλος της λίστας',\n    'key_already_exists'   => 'Το κλειδί :key υπάρχει ήδη',\n    'moved_order_up'       => 'Μετακινήσαμε τη ρύθμιση :name προς τα πάνω',\n    'moved_order_down'     => 'Μετακινήσαμε τη ρύθμιση :name προς τα κάτω',\n    'successfully_removed' => 'Η ρύθμιση :name διαγράφηκε',\n    'group_general'        => 'Γενικά',\n    'group_admin'          => 'Διαχείριση',\n    'group_site'           => 'Site',\n    'group'                => 'Ομάδα',\n    'help_group'           => 'Η ομάδα ρυθμίσεων έχει ανατεθεί στο',\n];\n"
  },
  {
    "path": "publishable/lang/el/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Δημιουργήθηκε με <i class=\"voyager-heart\"></i> από το',\n    'footer_copyright2' => 'Δημιουργήθηκε με ρούμι και ακόμα περισσότερο ρούμι',\n];\n"
  },
  {
    "path": "publishable/lang/en/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'By pageview',\n    'by_sessions'            => 'By sessions',\n    'by_users'               => 'By users',\n    'no_client_id'           => 'To view analytics you\\'ll need to get a google analytics client id and add it to your settings for the key <code>google_analytics_client_id</code>. Get your key in your Google developer console:',\n    'set_view'               => 'Select a View',\n    'this_vs_last_week'      => 'This Week vs Last Week',\n    'this_vs_last_year'      => 'This Year vs Last Year',\n    'top_browsers'           => 'Top Browsers',\n    'top_countries'          => 'Top Countries',\n    'various_visualizations' => 'Various visualizations',\n];\n"
  },
  {
    "path": "publishable/lang/en/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Add BREAD to this table',\n    'bread_crud_actions'     => 'BREAD/CRUD Actions',\n    'bread_info'             => 'BREAD info',\n    'controller_name_hint'   => 'ex. PageController, if left empty will use the BREAD Controller',\n    'create_bread_for_table' => 'Create BREAD for :table table',\n    'default_search_key'     => 'Default server-side search field',\n    'default_search_key_ph'  => 'The field will be pre-selected for server-side searching',\n    'delete_bread'           => 'Delete BREAD',\n    'delete_bread_conf'      => 'Yes, remove the BREAD',\n    'delete_bread_quest'     => 'Are you sure you want to delete the BREAD for the :table table?',\n    'edit_bread'             => 'Edit BREAD',\n    'edit_bread_for_table'   => 'Edit BREAD for :table table',\n    'error_creating_bread'   => 'Sorry it appears there may have been a problem creating this BREAD',\n    'error_removing_bread'   => 'Sorry it appears there was a problem removing this BREAD',\n    'error_updating_bread'   => 'Sorry it appears there may have been a problem updating this BREAD',\n    'error_tagging'          => 'Sorry it appears there may have been a problem creating the record. Please make sure your table has defaults for other fields.',\n    'success_created_bread'  => 'Successfully created new BREAD',\n    'success_remove_bread'   => 'Successfully removed BREAD from :datatype',\n    'success_update_bread'   => 'Successfully updated the :datatype BREAD',\n    'controller_name'        => 'Controller Name',\n    'create_migration'       => 'Create migration for this table?',\n    'description'            => 'Description',\n    'display_name'           => 'Display Name',\n    'display_name_plural'    => 'Display Name (Plural)',\n    'display_name_singular'  => 'Display Name (Singular)',\n    'edit_rows'              => 'Edit the rows for the :table table below',\n    'generate_permissions'   => 'Generate Permissions',\n    'icon_class'             => 'Icon to use for this Table',\n    'icon_hint'              => 'Icon (optional) Use a',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Model Class Name',\n    'model_name'             => 'Model Name',\n    'model_name_ph'          => 'ex. \\App\\User, if left empty will try and use the table name',\n    'order'                  => 'Order',\n    'order_column'           => 'Order column',\n    'order_column_ph'        => 'The column where the order is stored',\n    'order_direction'        => 'Order direction',\n    'order_ident_column'     => 'Order display column',\n    'order_ident_column_ph'  => 'The column which is displayed in the order page',\n    'ordering_not_set'       => 'You have to define ordering first',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'server_pagination'      => 'Server-side Pagination',\n    'scope'                  => 'Scope',\n    'soft_deletes_on'        => 'Show Deleted',\n    'soft_deletes_off'       => 'Hide Deleted',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URL Slug (must be unique)',\n    'url_slug_ph'            => 'URL slug (ex. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/en/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Welcome to the Voyager Compass. Every good app needs a compass to point them in the right direction.\n    In this section you will find many resources and administrative tasks to help guide you as you build out your application.',\n    'links'         => [\n        'title'                 => 'Links',\n        'documentation'         => 'Documentation',\n        'voyager_homepage'      => 'Voyager Homepage',\n    ],\n    'commands'      => [\n        'title'                 => 'Commands',\n        'text'                  => 'Run Artisan Commands from Voyager.',\n        'clear_output'          => 'clear output',\n        'command_output'        => 'Artisan Command Output',\n        'additional_args'       => 'Additional Args?',\n        'run_command'           => 'Run Command',\n    ],\n    'resources'     => [\n        'title'                 => 'Resources',\n        'text'                  => 'Voyager resources to help you find things quicker.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Logs',\n        'text'                  => 'Your app logs',\n        'file_too_big'          => 'Log file >50M, please download it.',\n        'level'                 => 'Level',\n        'context'               => 'Context',\n        'date'                  => 'Date',\n        'content'               => 'Content',\n        'download_file'         => 'Download file',\n        'delete_file'           => 'Delete file',\n        'delete_all_files'      => 'Delete all files',\n        'delete_success'        => 'Successfully deleted log file:',\n        'delete_all_success'    => 'Successfully deleted all log files',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Fonts',\n        'font_class'            => 'Voyager Fonts Class Mapping',\n        'font_character'        => 'Voyager Fonts Character Mapping',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/en/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Add New Column',\n    'add_softdeletes'           => 'Add Soft Deletes',\n    'add_timestamps'            => 'Add Timestamps',\n    'already_exists'            => 'already exists',\n    'already_exists_table'      => 'Table :table already exists',\n    'bread_crud_actions'        => 'BREAD/CRUD Actions',\n    'bread_info'                => 'BREAD info',\n    'browse_bread'              => 'Browse BREAD',\n    'column'                    => 'Column',\n    'composite_warning'         => 'Warning: this column is part of a composite index',\n    'create_new_table'          => 'Create New Table',\n    'create_your_new_table'     => 'Create Your New Table',\n    'create_model_table'        => 'Create model for this table?',\n    'default'                   => 'Default',\n    'delete_bread_before_table' => 'Please make sure to remove the BREAD on this table before deleting the table.',\n    'delete_table_confirm'      => 'Yes, delete this table',\n    'delete_table_question'     => 'Are you sure you want to delete the :table table?',\n    'editing_table'             => 'Editing table :table',\n    'edit_table'                => 'Edit the :table table below',\n    'edit_table_not_exist'      => 'The table you want to edit doesn\\'t exist',\n    'extra'                     => 'Extra',\n    'field'                     => 'Field',\n    'field_safe_failed'         => 'Failed to save field :field, we\\'re rolling back!',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Input Type',\n    'key'                       => 'Key',\n    'name_warning'              => 'Please name the column before adding an index',\n    'no_composites_warning'     => 'This table has composite indexes. Please note that they are not supported at the moment. Be careful when trying to add/remove indexes.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Optional Details',\n    'policy_class'              => 'Policy Class Name',\n    'policy_name'               => 'Policy Name',\n    'policy_name_ph'            => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'primary'                   => 'PRIMARY',\n    'server_pagination'         => 'Server-side Pagination',\n    'success_create_table'      => 'Successfully created :table table',\n    'success_created_bread'     => 'Successfully created new BREAD',\n    'success_delete_table'      => 'Successfully deleted :table table',\n    'success_remove_bread'      => 'Successfully removed BREAD from :datatype',\n    'success_update_bread'      => 'Successfully updated the :datatype BREAD',\n    'success_update_table'      => 'Successfully updated :table table',\n    'table_actions'             => 'Table Actions',\n    'table_columns'             => 'Table Columns',\n    'table_has_index'           => 'The table already has a primary index.',\n    'table_name'                => 'Table Name',\n    'table_no_columns'          => 'The table has no columns...',\n    'type'                      => 'Type',\n    'type_not_supported'        => 'This type is not supported',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Unknown Type',\n    'update_table'              => 'Update Table',\n    'url_slug'                  => 'URL Slug (must be unique)',\n    'url_slug_ph'               => 'URL slug (ex. posts)',\n    'visibility'                => 'Visibility',\n    'relationship'              => [\n        'relationship'         => 'Relationship',\n        'relationships'        => 'Relationships',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => 'Which column from the',\n        'is_used_to_reference' => 'is used to reference the',\n        'pivot_table'          => 'Pivot Table',\n        'selection_details'    => 'Selection Details',\n        'display_the'          => 'Display the',\n        'store_the'            => 'Store the',\n        'allow_tagging'        => 'Allow Tagging',\n        'easy_there'           => 'Easy there Captain',\n        'before_create'        => 'Before you can create a new relationship you will need to create the BREAD first.<br> Then, return back to edit the BREAD and you will be able to add relationships.<br> Thanks.',\n        'cancel'               => 'Cancel',\n        'add_new'              => 'Add New relationship',\n        'open'                 => 'Open',\n        'close'                => 'Close',\n        'relationship_details' => 'Relationship Details',\n        'browse'               => 'Browse',\n        'read'                 => 'Read',\n        'edit'                 => 'Edit',\n        'add'                  => 'Add',\n        'delete'               => 'Delete',\n        'create'               => 'Create a Relationship',\n        'namespace'            => 'Fully Qualified Model Name (ex. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/en/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'No data available in table',\n    'sInfo'           => 'Showing _START_ to _END_ of _TOTAL_ entries',\n    'sInfoEmpty'      => 'Showing 0 to 0 of 0 entries',\n    'sInfoFiltered'   => '(filtered from _MAX_ total entries)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Show _MENU_ entries',\n    'sLoadingRecords' => 'Loading...',\n    'sProcessing'     => 'Processing...',\n    'sSearch'         => 'Search:',\n    'sZeroRecords'    => 'No matching records found',\n    'oPaginate'       => [\n        'sFirst'    => 'First',\n        'sLast'     => 'Last',\n        'sNext'     => 'Next',\n        'sPrevious' => 'Previous',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': activate to sort column ascending',\n        'sSortDescending' => ': activate to sort column descending',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/en/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Last Week',\n    'last_year' => 'Last Year',\n    'this_week' => 'This Week',\n    'this_year' => 'This Year',\n];\n"
  },
  {
    "path": "publishable/lang/en/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Page|Pages',\n    'page_link_text' => 'View all pages',\n    'page_text'      => 'You have :count :string in your database. Click on button below to view all pages.',\n    'post'           => 'Post|Posts',\n    'post_link_text' => 'View all posts',\n    'post_text'      => 'You have :count :string in your database. Click on button below to view all posts.',\n    'user'           => 'User|Users',\n    'user_link_text' => 'View all users',\n    'user_text'      => 'You have :count :string in your database. Click on button below to view all users.',\n];\n"
  },
  {
    "path": "publishable/lang/en/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'We just created the missing symlink for you.',\n    'symlink_created_title'  => 'Missing storage symlink created',\n    'symlink_failed_text'    => 'We failed to generate the missing symlink for your application. It seems like your hosting provider does not support it.',\n    'symlink_failed_title'   => 'Could not create missing storage symlink',\n    'symlink_missing_button' => 'Fix it',\n    'symlink_missing_text'   => 'We could not find a storage symlink. This could cause problems with loading media files from the browser.',\n    'symlink_missing_title'  => 'Missing storage symlink',\n];\n"
  },
  {
    "path": "publishable/lang/en/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Leave empty to keep the same',\n    'field_select_dd_relationship' => 'Make sure to setup the appropriate relationship in the :method method of the :class class.',\n    'type_checkbox'                => 'Check Box',\n    'type_codeeditor'              => 'Code Editor',\n    'type_file'                    => 'File',\n    'type_image'                   => 'Image',\n    'type_radiobutton'             => 'Radio Button',\n    'type_richtextbox'             => 'Rich Textbox',\n    'type_selectdropdown'          => 'Select Dropdown',\n    'type_textarea'                => 'Text Area',\n    'type_textbox'                 => 'Text Box',\n    'type_markdowneditor'          => 'Markdown Editor',\n];\n"
  },
  {
    "path": "publishable/lang/en/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Action',\n    'actions'                => 'Actions',\n    'add'                    => 'Add',\n    'add_folder'             => 'Add Folder',\n    'add_new'                => 'Add New',\n    'all_done'               => 'All done',\n    'are_you_sure'           => 'Are you sure',\n    'are_you_sure_delete'    => 'Are you sure you want to delete',\n    'ascending'              => 'Ascending',\n    'auto_increment'         => 'Auto Increment',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Browse',\n    'builder'                => 'Builder',\n    'bulk_delete'            => 'Bulk Delete',\n    'bulk_delete_confirm'    => 'Yes, Delete These',\n    'bulk_delete_nothing'    => 'You haven\\'t selected anything to delete',\n    'cancel'                 => 'Cancel',\n    'choose_type'            => 'Choose Type',\n    'click_here'             => 'Click Here',\n    'close'                  => 'Close',\n    'compass'                => 'Compass',\n    'created_at'             => 'Created at',\n    'custom'                 => 'Custom',\n    'dashboard'              => 'Dashboard',\n    'database'               => 'Database',\n    'default'                => 'Default',\n    'delete'                 => 'Delete',\n    'delete_confirm'         => 'Yes, Delete it!',\n    'delete_question'        => 'Are you sure you want to delete this',\n    'delete_this_confirm'    => 'Yes, Delete This',\n    'descending'             => 'Descending',\n    'deselect_all'           => 'Deselect All',\n    'download'               => 'Download',\n    'drag_drop_info'         => 'Drag and drop the Items below to re-arrange them.',\n    'edit'                   => 'Edit',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Sorry it appears there was a problem deleting this',\n    'error_restoring'        => 'Sorry it appears there was a problem restoring this',\n    'exception'              => 'Exception',\n    'featured'               => 'Featured',\n    'field_does_not_exist'   => 'Field does not exist',\n    'find_by_place'          => 'Find by Place',\n    'home'                   => 'Home',\n    'how_to_use'             => 'How To Use',\n    'index'                  => 'Index',\n    'internal_error'         => 'Internal error',\n    'items'                  => 'item(s)',\n    'keep_sidebar_open'      => 'Yarr! Drop the anchors! (and keep the sidebar open)',\n    'key'                    => 'Key',\n    'last_modified'          => 'Last modified',\n    'latitude'               => 'Latitude',\n    'length'                 => 'Length',\n    'locale'                 => 'Locale',\n    'login'                  => 'Login',\n    'logout'                 => 'Logout',\n    'longitude'              => 'Longitude',\n    'media'                  => 'Media',\n    'menu_builder'           => 'Menu Builder',\n    'mimetype_not_allowed'   => 'This mimetype is not allowed',\n    'move'                   => 'Move',\n    'name'                   => 'Name',\n    'new'                    => 'New',\n    'no'                     => 'No',\n    'no_thanks'              => 'No Thanks',\n    'none'                   => 'None',\n    'not_null'               => 'Not Null',\n    'no_results'             => 'No results',\n    'open'                   => 'Open',\n    'options'                => 'Options',\n    'password'               => 'Password',\n    'permissions'            => 'Permissions',\n    'profile'                => 'Profile',\n    'public_url'             => 'Public URL',\n    'read'                   => 'Read',\n    'rename'                 => 'Rename',\n    'remember_me'            => 'Remember me',\n    'required'               => 'Required',\n    'return_to_list'         => 'Return to List',\n    'route'                  => 'Route',\n    'save'                   => 'Save',\n    'search'                 => 'Search',\n    'select_all'             => 'Select All',\n    'select_group'           => 'Select Existing Group or Add New',\n    'settings'               => 'Settings',\n    'showing_entries'        => 'Showing :from to :to of :all entry|Showing :from to :to of :all entries',\n    'submit'                 => 'Submit',\n    'successfully_added_new' => 'Successfully Added New',\n    'successfully_deleted'   => 'Successfully Deleted',\n    'successfully_restored'  => 'Successfully Restored',\n    'successfully_updated'   => 'Successfully Updated',\n    'successfully_created'   => 'Successfully created',\n    'sweet_success'          => 'Sweet Success!',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'Title',\n    'type'                   => 'Type',\n    'restore'                => 'Restore',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'Unstick the sidebar',\n    'update'                 => 'Update',\n    'update_failed'          => 'Update Failed',\n    'updated_order'          => 'Order updated',\n    'upload'                 => 'Upload',\n    'url'                    => 'URL',\n    'view'                   => 'View',\n    'viewing'                => 'Viewing',\n    'whoopsie'               => 'Whoopsie!',\n    'yes'                    => 'Yes',\n    'yes_please'             => 'Yes, Please',\n    'contains'               => 'contains',\n];\n"
  },
  {
    "path": "publishable/lang/en/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Invalid JSON',\n    'invalid_message'   => 'Seems like you introduced some invalid JSON.',\n    'valid'             => 'Valid JSON',\n    'validation_errors' => 'Validation errors',\n];\n"
  },
  {
    "path": "publishable/lang/en/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Logging in',\n    'signin_below' => 'Sign In Below:',\n    'welcome'      => 'Welcome to Voyager. The Missing Admin for Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/en/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Add New Folder',\n    'audio_support'          => 'Your browser does not support the audio element.',\n    'create_new_folder'      => 'Create New Folder',\n    'delete_folder_question' => 'Deleting a folder will remove all files and folders contained inside',\n    'delete_question'        => 'Are you sure you want to delete the following file(s)?',\n    'destination_folder'     => 'Destination Folder',\n    'drag_drop_info'         => 'Drag and drop files or click below to upload',\n    'error_already_exists'   => 'Sorry there is already a file/folder with that existing name in that folder.',\n    'error_creating_dir'     => 'Sorry something seems to have gone wrong with creating the directory, please check your permissions',\n    'error_deleting_file'    => 'Sorry something seems to have gone wrong deleting this file, please check your permissions',\n    'error_deleting_folder'  => 'Sorry something seems to have gone wrong when deleting this folder, please check your permissions',\n    'error_may_exist'        => 'File or Folder may already exist with that name. Please choose another name or delete the other file.',\n    'error_moving'           => 'Sorry there seems to be a problem moving that file/folder, please make sure you have the correct permissions.',\n    'error_renaming_ext'     => 'The extension of a file can not be changed!',\n    'error_uploading'        => 'Upload Fail: Unknown error occurred!',\n    'files'                  => '1 file|:count files',\n    'files_more'             => 'And :count more',\n    'file_does_not_exist'    => 'File does not exist',\n    'file_removed'           => 'File removed',\n    'files_selected'         => 'files/folder selected',\n    'folder_exists_already'  => 'Sorry that folder already exists, please delete that folder if you wish to re-create it',\n    'image_does_not_exist'   => 'Image does not exist',\n    'image_removed'          => 'Image removed',\n    'library'                => 'Media Library',\n    'loading'                => 'LOADING YOUR MEDIA FILES',\n    'max_files_select'       => 'You can only select one file|You can only select a maximum of :count files',\n    'min_files_select'       => 'You must select at least one file|You must select at least :count files',\n    'move_file_folder'       => 'Move File/Folder',\n    'new_file_folder'        => 'New File/Folder Name',\n    'new_folder_name'        => 'New Folder Name',\n    'no_files_here'          => 'No files here.',\n    'no_files_in_folder'     => 'No files in this folder.',\n    'nothing_selected'       => 'No file or folder selected',\n    'rename_file_folder'     => 'Rename File/Folder',\n    'success_uploaded_file'  => 'Successfully uploaded new file!',\n    'success_uploading'      => 'Image successfully uploaded!',\n    'success_moved'          => 'Successfully moved file/folder',\n    'success_renamed'        => 'Successfully renamed file/folder',\n    'uploading_wrong_type'   => 'Upload Fail: Unsupported file format or It is too large to upload!',\n    'crop'                   => 'Crop',\n    'crop_and_create'        => 'Crop & Create',\n    'crop_override_confirm'  => 'It will override the original image, are you sure?',\n    'crop_image'             => 'Crop Image',\n    'success_crop_image'     => 'Successfully cropped the image',\n    'height'                 => 'Height: ',\n    'title'                  => 'Title',\n    'type'                   => 'Type',\n    'size'                   => 'Size',\n    'public_url'             => 'Public URL',\n    'last_modified'          => 'Last Modified',\n    'browser_video_support'  => 'Your browser does not support the video tag.',\n    'browser_audio_support'  => 'Your browser does not support the audio element.',\n    'width'                  => 'Width: ',\n    'add_all_selected'       => 'Add all selected',\n];\n"
  },
  {
    "path": "publishable/lang/en/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Color in RGB or Hex (optional)',\n    'color_ph'             => 'Color, ex. #ffffff or rgb(255, 255, 255)',\n    'create_new_item'      => 'Create a New Menu Item',\n    'delete_item_confirm'  => 'Yes, Delete This Menu Item',\n    'delete_item_question' => 'Are you sure you want to delete this menu item?',\n    'drag_drop_info'       => 'Drag and drop the menu Items below to re-arrange them.',\n    'dynamic_route'        => 'Dynamic Route',\n    'edit_item'            => 'Edit Menu Item',\n    'icon_class'           => 'Font Icon class for the Menu Item (Use a',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icon Class (optional)',\n    'item_route'           => 'Route for the menu item',\n    'item_title'           => 'Title of the Menu Item',\n    'link_type'            => 'Link type',\n    'new_menu_item'        => 'New Menu Item',\n    'open_in'              => 'Open In',\n    'open_new'             => 'New Tab/Window',\n    'open_same'            => 'Same Tab/Window',\n    'route_parameter'      => 'Route parameters (if any)',\n    'static_url'           => 'Static URL',\n    'successfully_created' => 'Successfully Created New Menu Item.',\n    'successfully_deleted' => 'Successfully Deleted Menu Item.',\n    'successfully_updated' => 'Successfully Updated Menu Item.',\n    'updated_order'        => 'Successfully updated menu order.',\n    'url'                  => 'URL for the Menu Item',\n    'usage_hint'           => 'You can output a menu anywhere on your site by calling|You can output this menu anywhere on your site by calling',\n];\n"
  },
  {
    "path": "publishable/lang/en/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Additional Fields',\n    'category'         => 'Post Category',\n    'content'          => 'Post Content',\n    'details'          => 'Post Details',\n    'excerpt'          => 'Excerpt <small>Small description of this post</small>',\n    'image'            => 'Post Image',\n    'meta_description' => 'Meta Description',\n    'meta_keywords'    => 'Meta Keywords',\n    'new'              => 'Create New Post',\n    'seo_content'      => 'SEO Content',\n    'seo_title'        => 'SEO Title',\n    'slug'             => 'URL slug',\n    'status'           => 'Post Status',\n    'status_draft'     => 'draft',\n    'status_pending'   => 'pending',\n    'status_published' => 'published',\n    'title'            => 'Post Title',\n    'title_sub'        => 'The title for your post',\n    'update'           => 'Update Post',\n];\n"
  },
  {
    "path": "publishable/lang/en/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'Avatar',\n    'edit'             => 'Edit My Profile',\n    'edit_user'        => 'Edit User',\n    'password'         => 'Password',\n    'password_hint'    => 'Leave empty to keep the same',\n    'role'             => 'Role',\n    'roles'            => 'Roles',\n    'role_default'     => 'Default Role',\n    'roles_additional' => 'Additional Roles',\n    'user_role'        => 'User Role',\n];\n"
  },
  {
    "path": "publishable/lang/en/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Author',\n        'avatar'           => 'Avatar',\n        'body'             => 'Body',\n        'category'         => 'Category',\n        'created_at'       => 'Created At',\n        'display_name'     => 'Display Name',\n        'email'            => 'Email',\n        'excerpt'          => 'Excerpt',\n        'featured'         => 'Featured',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Description',\n        'meta_keywords'    => 'Meta Keywords',\n        'name'             => 'Name',\n        'order'            => 'Order',\n        'page_image'       => 'Page Image',\n        'parent'           => 'Parent',\n        'password'         => 'Password',\n        'post_image'       => 'Post Image',\n        'remember_token'   => 'Remember Token',\n        'role'             => 'Role',\n        'roles'            => 'Roles',\n        'seo_title'        => 'SEO Title',\n        'slug'             => 'Slug',\n        'status'           => 'Status',\n        'title'            => 'Title',\n        'updated_at'       => 'Updated At',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Category',\n            'plural'   => 'Categories',\n        ],\n        'menu'     => [\n            'singular' => 'Menu',\n            'plural'   => 'Menus',\n        ],\n        'page'     => [\n            'singular' => 'Page',\n            'plural'   => 'Pages',\n        ],\n        'post'     => [\n            'singular' => 'Post',\n            'plural'   => 'Posts',\n        ],\n        'role'     => [\n            'singular' => 'Role',\n            'plural'   => 'Roles',\n        ],\n        'user'     => [\n            'singular' => 'User',\n            'plural'   => 'Users',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Categories',\n        'compass'      => 'Compass',\n        'dashboard'    => 'Dashboard',\n        'database'     => 'Database',\n        'media'        => 'Media',\n        'menu_builder' => 'Menu Builder',\n        'pages'        => 'Pages',\n        'posts'        => 'Posts',\n        'roles'        => 'Roles',\n        'settings'     => 'Settings',\n        'tools'        => 'Tools',\n        'users'        => 'Users',\n    ],\n    'roles'      => [\n        'admin' => 'Administrator',\n        'user'  => 'Normal User',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Admin Background Image',\n            'description'                => 'Admin Description',\n            'description_value'          => 'Welcome to Voyager. The Missing Admin for Laravel',\n            'google_analytics_client_id' => 'Google Analytics Client ID (used for admin dashboard)',\n            'icon_image'                 => 'Admin Icon Image',\n            'loader'                     => 'Admin Loader',\n            'title'                      => 'Admin Title',\n        ],\n        'site'  => [\n            'description'                  => 'Site Description',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Site Logo',\n            'title'                        => 'Site Title',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/en/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'You can get the value of each setting anywhere on your site by calling',\n    'save'                 => 'Save Settings',\n    'new'                  => 'New Setting',\n    'help_name'            => 'Setting name ex: Admin Title',\n    'help_key'             => 'Setting key ex: admin_title',\n    'help_option'          => '(optional, the same options as for the corresponding formfield apply)',\n    'add_new'              => 'Add New Setting',\n    'delete_question'      => 'Are you sure you want to delete the :setting Setting?',\n    'delete_confirm'       => 'Yes, Delete This Setting',\n    'successfully_created' => 'Successfully Created Settings',\n    'successfully_saved'   => 'Successfully Saved Settings',\n    'successfully_deleted' => 'Successfully Deleted Setting',\n    'already_at_top'       => 'This is already at the top of the list',\n    'already_at_bottom'    => 'This is already at the bottom of the list',\n    'key_already_exists'   => 'The key :key already exists',\n    'moved_order_up'       => 'Moved :name setting order up',\n    'moved_order_down'     => 'Moved :name setting order down',\n    'successfully_removed' => 'Successfully removed :name value',\n    'group_general'        => 'General',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Site',\n    'group'                => 'Group',\n    'help_group'           => 'Group this setting is assigned to',\n];\n"
  },
  {
    "path": "publishable/lang/en/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Made with <i class=\"voyager-heart\"></i> by',\n    'footer_copyright2' => 'Made with rum and even more rum',\n];\n"
  },
  {
    "path": "publishable/lang/es/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'Por página',\n    'by_sessions'            => 'Por sesiones',\n    'by_users'               => 'Por usuarios',\n    'no_client_id'           => 'Para ver las estadísticas, necesitará obtener una ID de cliente de Google Analytics y añadirla a su configuración para la clave <code>google_analytics_client_id</code>. Obtenga su clave en la consola de desarrolladores de Google:',\n    'set_view'               => 'Seleccionar una vista',\n    'this_vs_last_week'      => 'Semana actual vs pasada',\n    'this_vs_last_year'      => 'Año actual vs pasado',\n    'top_browsers'           => 'Principales Navegadores',\n    'top_countries'          => 'Principales Países',\n    'various_visualizations' => 'Varias visualizaciones',\n];\n"
  },
  {
    "path": "publishable/lang/es/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Añadir BREAD a esta tabla',\n    'bread_crud_actions'     => 'Acciones BREAD / CRUD',\n    'bread_info'             => 'Información de BREAD',\n    'controller_name'        => 'Nombre del Controlador',\n    'controller_name_hint'   => 'P. ej. PageController (Si se deja vacío, utilizará el controlador BREAD)',\n    'create_bread_for_table' => 'Crear BREAD para la tabla :table',\n    'create_migration'       => '¿Crear migración para esta tabla?',\n    'default_search_key'     => 'Campo predeterminado para búsquedas del lado del servidor',\n    'default_search_key_ph'  => 'El campo será preseleccionado para búsquedas del lado del servidor',\n    'delete_bread'           => 'Eliminar BREAD',\n    'delete_bread_conf'      => 'Sí, eliminar el BREAD',\n    'delete_bread_quest'     => '¿Está seguro de que desea eliminar el BREAD para la tabla :table?',\n    'description'            => 'Descripción',\n    'display_name'           => 'Nombre para mostrar',\n    'display_name_plural'    => 'Nombre para mostrar (Plural)',\n    'display_name_singular'  => 'Nombre para mostrar (Singular)',\n    'edit_bread'             => 'Editar BREAD',\n    'edit_bread_for_table'   => 'Editar BREAD para la tabla :table',\n    'edit_rows'              => 'Editar las filas de la tabla siguiente:',\n    'error_creating_bread'   => 'Lo sentimos, pero falló la creación del BREAD',\n    'error_removing_bread'   => 'Lo sentimos, pero falló la eliminación del BREAD',\n    'error_tagging'          => 'Lo sentimos, pero falló la creación del registro. Asegúrese que la tabla tiene valores predeterminados para el resto de los campos.',\n    'error_updating_bread'   => 'Lo sentimos, pero falló la actualización del BREAD',\n    'generate_permissions'   => 'Generar permisos',\n    'icon_class'             => 'Ícono a utilizar para esta tabla',\n    'icon_hint'              => 'Ícono (opcional) Use una ',\n    'icon_hint2'             => 'clase de Voyager Fonts',\n    'model_class'            => 'Nombre de la clase del modelo',\n    'model_name'             => 'Nombre del modelo',\n    'model_name_ph'          => 'P. ej. \\App\\User (Si se deja vacío, intentará usar el nombre de la tabla)',\n    'order'                  => 'Orden',\n    'order_column'           => 'Columna de ordenación',\n    'order_column_ph'        => 'La columna que contiene el valor de ordenación',\n    'order_direction'        => 'Sentido de ordenación',\n    'order_ident_column'     => 'Columna texto de ordenación',\n    'order_ident_column_ph'  => 'La columna que contiene el nombre a mostrar en la lista de ordenación',\n    'ordering_not_set'       => 'Defina la ordenación primero',\n    'policy_class'           => 'Clase de Política',\n    'policy_name'            => 'Nombre de Política',\n    'policy_name_ph'         => 'P. ej. \\App\\Policies\\UserPolicy (Si se deja vacío, intentará usar el valor predeterminado)',\n    'scope'                  => 'Alcance',\n    'server_pagination'      => 'Paginación del servidor',\n    'soft_deletes_off'       => 'Ocultar eliminados',\n    'soft_deletes_on'        => 'Mostrar eliminados',\n    'success_created_bread'  => 'BREAD creado exitosamente',\n    'success_remove_bread'   => 'BREAD de tipo :datatype borrado exitosamente',\n    'success_update_bread'   => 'Se actualizó correctamente el BREAD :datatype',\n    'updated_order'          => 'Orden actualizado exitosamente',\n    'url_slug'               => 'Slug (debe ser único)',\n    'url_slug_ph'            => 'URL slug (p. ej. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/es/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Bienvenido(a) a Voyager Compass. Toda buena aplicación necesita una brújula que guíe en la dirección correcta.\n    En esta sección encontrará recursos y tareas administrativas para ayudarle con la construcción de su aplicación.',\n    'links'         => [\n        'title'                 => 'Enlaces',\n        'documentation'         => 'Documentación',\n        'voyager_homepage'      => 'Página de inicio de Voyager',\n    ],\n    'commands'      => [\n        'title'                 => 'Comandos',\n        'text'                  => 'Ejecute comandos Artisan desde Voyager.',\n        'clear_output'          => 'limpiar resultado',\n        'command_output'        => 'Resultado del comando Artisan',\n        'additional_args'       => '¿Argumentos adicionales?',\n        'run_command'           => 'Ejecutar comando',\n    ],\n    'resources'     => [\n        'title'                 => 'Recursos',\n        'text'                  => 'Recursos sobre Voyager a la mano.',\n    ],\n    'logs'          => [\n        'title'                 => 'Registros',\n        'text'                  => 'Los registros (logs) de tu aplicación',\n        'file_too_big'          => 'Archivo de registro >50M. Descárguelo para visualizarlo, por favor.',\n        'level'                 => 'Nivel',\n        'context'               => 'Contexto',\n        'date'                  => 'Fecha',\n        'content'               => 'Contenido',\n        'download_file'         => 'Descargar archivo',\n        'delete_file'           => 'Eliminar archivo',\n        'delete_all_files'      => 'Eliminar todo',\n        'delete_success'        => 'Registro eliminado correctamente:',\n        'delete_all_success'    => 'Todos los registros eliminados correctamente',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Fuentes',\n        'font_class'            => 'Mapa de clases de Voyager Fonts',\n        'font_character'        => 'Mapa de caracteres de Voyager Fonts',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/es/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Añadir Columna',\n    'add_softdeletes'           => 'Añadir Soft Deletes',\n    'add_timestamps'            => 'Añadir Timestamps',\n    'already_exists'            => 'ya existe',\n    'already_exists_table'      => 'Tabla :table ya existe',\n    'bread_crud_actions'        => 'Acciones BREAD/CRUD',\n    'bread_info'                => 'Información BREAD',\n    'browse_bread'              => 'Navegar BREAD',\n    'column'                    => 'Columna',\n    'composite_warning'         => 'Advertencia: esta columna forma parte de un índice compuesto',\n    'create_model_table'        => '¿Generar el modelo?',\n    'create_new_table'          => 'Crear tabla',\n    'create_your_new_table'     => 'Cree su nueva tabla',\n    'default'                   => 'Defecto',\n    'delete_bread_before_table' => 'Asegúrese de quitar el BREAD de la tabla antes de borrarla.',\n    'delete_table_confirm'      => 'Sí, borrar esta tabla',\n    'delete_table_question'     => '¿Está seguro de que desea eliminar la tabla :table?',\n    'edit_table'                => 'Editar la tabla siguiente:',\n    'edit_table_not_exist'      => 'La tabla que desea editar no existe',\n    'editing_table'             => 'Editando tabla :table',\n    'extra'                     => 'Extra',\n    'field'                     => 'Campo',\n    'field_safe_failed'         => 'No se pudo guardar el campo :field, ¡revirtiendo cambios!',\n    'index'                     => 'ÍNDICE',\n    'input_type'                => 'Tipo de entrada',\n    'key'                       => 'Clave',\n    'name_warning'              => 'Por favor, nombre la columna antes de añadir un índice',\n    'no_composites_warning'     => 'Esta tabla tiene índices compuestos. Tenga en cuenta que en este momento no se admiten. Tenga cuidado al intentar agregar/quitar índices.',\n    'null'                      => 'Nulo',\n    'optional_details'          => 'Detalles opcionales',\n    'policy_class'              => 'Clase de restricciones',\n    'policy_name'               => 'Nombre de restricciones',\n    'policy_name_ph'            => 'P. ej. \\App\\Policies\\UserPolicy (Si se deja vacío, intentará usar el valor predeterminado)',\n    'primary'                   => 'PRIMARIO',\n    'server_pagination'         => 'Paginación del servidor',\n    'success_create_table'      => 'Tabla :table creada exitosamente',\n    'success_created_bread'     => 'BREAD creado exitosamente',\n    'success_delete_table'      => 'Tabla :table eliminada exitosamente',\n    'success_remove_bread'      => 'BREAD de tipo :datatype borrado exitosamente',\n    'success_update_bread'      => 'Se actualizó correctamente el BREAD :datatype',\n    'success_update_table'      => 'Tabla :table actualizada exitosamente',\n    'table_actions'             => 'Acciones de la tabla',\n    'table_columns'             => 'Columnas de la tabla',\n    'table_has_index'           => 'La tabla ya tiene un índice primario.',\n    'table_name'                => 'Nombre de la tabla',\n    'table_no_columns'          => 'La tabla no tiene columnas ...',\n    'type'                      => 'Tipo',\n    'type_not_supported'        => 'Este tipo no es compatible',\n    'unique'                    => 'ÚNICO',\n    'unknown_type'              => 'Tipo desconocido',\n    'update_table'              => 'Actualizar tabla',\n    'url_slug'                  => 'Slug (debe ser único)',\n    'url_slug_ph'               => 'URL slug (p. ej. posts)',\n    'visibility'                => 'Visibilidad',\n    'relationship'              => [\n        'add'                  => 'Agregar',\n        'add_new'              => 'Crear Relación',\n        'allow_tagging'        => 'Permitir Tagging',\n        'before_create'        => 'Antes de que pueda crear una nueva relación, primero deberá crear el BREAD. <br> Luego, regrese para editar el BREAD y podrá agregar relaciones.',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'browse'               => 'Ver',\n        'cancel'               => 'Cancelar',\n        'close'                => 'Cerrar',\n        'create'               => 'Crear una Relación',\n        'delete'               => 'Eliminar',\n        'display_the'          => 'Mostrar de',\n        'easy_there'           => 'Tranquilo, Capitán',\n        'edit'                 => 'Editar',\n        'has_many'             => 'Has Many',\n        'has_one'              => 'Has One',\n        'is_used_to_reference' => 'se usará para hacer referencia a',\n        'namespace'            => 'Espacio de nombres del modelo (p. ej. App\\Category)',\n        'open'                 => 'Abrir',\n        'pivot_table'          => 'Tabla Pivote',\n        'read'                 => 'Leer',\n        'relationship'         => 'Relación',\n        'relationship_details' => 'Detalles de Relación',\n        'relationships'        => 'Relaciones',\n        'selection_details'    => 'Selección de Detalles',\n        'store_the'            => 'Guardar de',\n        'which_column_from'    => '¿Qué columna de',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/es/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'No hay datos disponibles en la tabla',\n    'sInfo'           => 'Mostrando _START_ a _END_ de _TOTAL_ entradas',\n    'sInfoEmpty'      => 'Mostrando 0 a 0 de 0 entradas',\n    'sInfoFiltered'   => '(Filtrada de _MAX_ entradas totales)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Mostrar _MENU_ entradas',\n    'sLoadingRecords' => 'Cargando...',\n    'sProcessing'     => 'Procesando...',\n    'sSearch'         => 'Buscar:',\n    'sZeroRecords'    => 'No se encontraron registros coincidentes',\n    'oPaginate'       => [\n        'sFirst'    => 'Primero',\n        'sLast'     => 'Último',\n        'sNext'     => 'Siguiente',\n        'sPrevious' => 'Anterior',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': Activar para ordenar la columna ascendente',\n        'sSortDescending' => ': Activar para ordenar la columna descendente',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/es/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'La semana pasada',\n    'last_year' => 'El año pasado',\n    'this_week' => 'Esta semana',\n    'this_year' => 'Este año',\n];\n"
  },
  {
    "path": "publishable/lang/es/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Página|Páginas',\n    'page_link_text' => 'Ver todas las páginas',\n    'page_text'      => 'Tiene :count :string en su base de datos. Haga clic en el botón de abajo para ver todas las páginas.',\n    'post'           => 'Post|Posts',\n    'post_link_text' => 'Ver todos los posts',\n    'post_text'      => 'Tiene :count :string en su base de datos. Haga clic en el botón de abajo para ver todos los posts.',\n    'user'           => 'Usuario|Usuarios',\n    'user_link_text' => 'Ver todos los usuarios',\n    'user_text'      => 'Tiene :count :string en su base de datos. Haga clic en el botón de abajo para ver todos los usuarios.',\n];\n"
  },
  {
    "path": "publishable/lang/es/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Acabamos de crear por usted el enlace simbólico que faltaba.',\n    'symlink_created_title'  => 'Enlace simbólico de almacenamiento faltante creado',\n    'symlink_failed_text'    => 'No hemos podido generar el enlace simbólico faltante para su aplicación. Parece que su proveedor de alojamiento no lo permite.',\n    'symlink_failed_title'   => 'No se pudo crear el enlace simbólico de almacenamiento faltante',\n    'symlink_missing_button' => 'Solucionarlo',\n    'symlink_missing_text'   => 'No pudimos encontrar un enlace simbólico de almacenamiento. Esto podría causar problemas con la carga de archivos multimedia desde el navegador.',\n    'symlink_missing_title'  => 'Falta el enlace simbólico de almacenamiento',\n];\n"
  },
  {
    "path": "publishable/lang/es/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Dejar vacío para mantener el mismo',\n    'field_select_dd_relationship' => 'Asegúrese de configurar la relación apropiada en el método :method de la clase :class.',\n    'type_checkbox'                => 'Casilla de verificación',\n    'type_codeeditor'              => 'Editor de código',\n    'type_file'                    => 'Archivo',\n    'type_image'                   => 'Imagen',\n    'type_radiobutton'             => 'Botón de radio',\n    'type_richtextbox'             => 'Caja de texto enriquecido',\n    'type_selectdropdown'          => 'Lista desplegable',\n    'type_textarea'                => 'Área de texto',\n    'type_textbox'                 => 'Caja de texto',\n];\n"
  },
  {
    "path": "publishable/lang/es/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n\n    'action'                 => 'Acción',\n    'actions'                => 'Acciones',\n    'add'                    => 'Añadir',\n    'add_folder'             => 'Añadir carpeta',\n    'add_new'                => 'Crear',\n    'all_done'               => 'Todo listo',\n    'are_you_sure'           => '¿Estás seguro?',\n    'are_you_sure_delete'    => '¿Estás seguro que quieres eliminar?',\n    'ascending'              => 'Ascendente',\n    'auto_increment'         => 'Autoincremento',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Navegar',\n    'builder'                => 'Constructor',\n    'bulk_delete'            => 'Borrado masivo',\n    'bulk_delete_confirm'    => 'Sí, ¡Bórralo!',\n    'bulk_delete_nothing'    => 'Debe seleccionar al menos un registro antes de usar el borrado masivo.',\n    'cancel'                 => 'Cancelar',\n    'choose_type'            => 'Elegir tipo',\n    'click_here'             => 'Haga clic aquí',\n    'close'                  => 'Cerrar',\n    'compass'                => 'Compás',\n    'created_at'             => 'Creado en',\n    'custom'                 => 'Personalizado',\n    'dashboard'              => 'Tablero',\n    'database'               => 'Base de datos',\n    'default'                => 'Defecto',\n    'delete'                 => 'Borrar',\n    'delete_confirm'         => 'Sí, ¡Bórralo!',\n    'delete_question'        => '¿Estás seguro que quieres eliminar ',\n    'delete_this_confirm'    => 'Sí, eliminar',\n    'descending'             => 'Descendente',\n    'deselect_all'           => 'Deseleccionar todo',\n    'download'               => 'Descargar',\n    'drag_drop_info'         => 'Arrastre los elementos debajo para reacomodarlos.',\n    'edit'                   => 'Editar',\n    'email'                  => 'Email',\n    'error_deleting'         => 'Lo sentimos, pero falló la eliminación',\n    'error_restoring'        => 'Lo sentimos, pero falló la restauración',\n    'exception'              => 'Excepción',\n    'featured'               => 'Destacados',\n    'field_does_not_exist'   => 'El campo no existe',\n    'find_by_place'          => 'Buscar por lugar',\n    'home'                   => 'Página de Inicio',\n    'how_to_use'             => 'Cómo utilizar',\n    'index'                  => 'Índice',\n    'internal_error'         => 'Error interno',\n    'items'                  => 'Elemento(s)',\n    'keep_sidebar_open'      => '¡Yarr! ¡Suelta las anclas! (Y mantén la barra lateral abierta) ',\n    'key'                    => 'Clave',\n    'last_modified'          => 'Última modificación',\n    'latitude'               => 'Latitud',\n    'length'                 => 'Longitud',\n    'locale'                 => 'Idioma',\n    'login'                  => 'Iniciar sesión',\n    'logout'                 => 'Cerrar sesión',\n    'longitude'              => 'Longitud',\n    'media'                  => 'Medios',\n    'menu_builder'           => 'Constructor de menús',\n    'mimetype_not_allowed'   => 'Tipo de contenido no permitido',\n    'move'                   => 'Mover',\n    'name'                   => 'Nombre',\n    'new'                    => 'Nuevo',\n    'no'                     => 'No',\n    'no_results'             => 'Sin resultados',\n    'no_thanks'              => 'No, gracias',\n    'none'                   => 'Ninguno',\n    'not_null'               => 'No nulo',\n    'open'                   => 'Abrir',\n    'options'                => 'Opciones',\n    'password'               => 'Contraseña',\n    'permissions'            => 'Permisos',\n    'profile'                => 'Perfil',\n    'public_url'             => 'URL pública',\n    'read'                   => 'Leer',\n    'remember_me'            => 'Recuérdame',\n    'rename'                 => 'Renombrar',\n    'required'               => 'Requerido',\n    'restore'                => 'Restaurar',\n    'return_to_list'         => 'Volver a la lista',\n    'route'                  => 'Ruta',\n    'save'                   => 'Guardar',\n    'search'                 => 'Buscar',\n    'select_all'             => 'Seleccionar todo',\n    'select_group'           => 'Seleccione un grupo existente o añada uno',\n    'settings'               => 'Ajustes',\n    'showing_entries'        => 'Mostrando :from a :to de :all entrada|Mostrando :from a :to de :all entradas',\n    'submit'                 => 'Enviar',\n    'successfully_added_new' => 'Añadido exitosamente',\n    'successfully_created'   => 'Creado exitosamente',\n    'successfully_deleted'   => 'Eliminado exitosamente',\n    'successfully_restored'  => 'Restaurado exitosamente',\n    'successfully_updated'   => 'Actualizado exitosamente',\n    'sweet_success'          => '¡Dulce Éxito!',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'Título',\n    'type'                   => 'Tipo',\n    'unsigned'               => 'No signado',\n    'unstick_sidebar'        => 'Despegar la barra lateral',\n    'update'                 => 'Actualizar',\n    'update_failed'          => 'Actualización fallida',\n    'updated_order'          => 'Orden actualizado',\n    'upload'                 => 'Subir',\n    'url'                    => 'URL',\n    'view'                   => 'Ver',\n    'viewing'                => 'Viendo',\n    'whoopsie'               => '¡Ups!',\n    'yes'                    => 'Sí',\n    'yes_please'             => 'Sí, por favor',\n];\n"
  },
  {
    "path": "publishable/lang/es/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'JSON inválido',\n    'invalid_message'   => 'Parece que has introducido un JSON inválido.',\n    'valid'             => 'JSON Válido',\n    'validation_errors' => 'Errores de validación',\n];\n"
  },
  {
    "path": "publishable/lang/es/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Iniciando sesión',\n    'signin_below' => 'Inicie sesión aquí:',\n    'welcome'      => 'Bienvenido a Voyager. El administrador que le faltaba a Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/es/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Añadir carpeta',\n    'audio_support'          => 'Su navegador no soporta elementos de audio.',\n    'browser_audio_support'  => 'Su navegador no soporta elementos de audio.',\n    'browser_video_support'  => 'Su navegador no soporta la etiqueta de video.',\n    'create_new_folder'      => 'Crear carpeta',\n    'crop'                   => 'Cortar',\n    'crop_and_create'        => 'Cortar & Crear',\n    'crop_image'             => 'Recortar imagen',\n    'crop_override_confirm'  => 'Se anulará la imagen original, ¿está seguro?',\n    'delete_folder_question' => 'Eliminar una carpeta eliminará todos los archivos y carpetas contenidos dentro',\n    'delete_question'        => '¿Está seguro que quiere eliminar los siguientes archivos?',\n    'destination_folder'     => 'Carpeta de destino',\n    'drag_drop_info'         => 'Arrastre y suelte archivos o haga clic abajo para cargar',\n    'error_already_exists'   => 'Lo sentimos, pero ya hay un archivo/carpeta con ese nombre en esa ubicación.',\n    'error_creating_dir'     => 'Lo sentimos, pero falló la creación del directorio. Por favor, revise sus permisos',\n    'error_deleting_file'    => 'Lo sentimos, pero falló la eliminación del archivo. Por favor, revise sus permisos',\n    'error_deleting_folder'  => 'Lo sentimos, pero falló la eliminación de la carpeta. Por favor, revise sus permisos',\n    'error_may_exist'        => 'Puede que ya exista un archivo o carpeta con ese nombre. Por favor, elija otro nombre o borre el otro archivo.',\n    'error_moving'           => 'Lo sentimos, pero falló la reubicación del archivo/carpeta. Por favor, asegúrese de tener los permisos correctos.',\n    'error_uploading'        => 'Carga fallida: Ocurrió un error desconocido',\n    'file_does_not_exist'    => 'El archivo no existe',\n    'file_removed'           => 'Archivo eliminado',\n    'files'                  => '1 archivo|:count archivos',\n    'files_more'             => 'Y :count más',\n    'files_selected'         => 'Archivos/Carpeta seleccionados',\n    'folder_exists_already'  => 'Lo sentimos, pero la carpeta ya existe. Por favor, elimine esa carpeta si desea crearla nuevamente',\n    'height'                 => 'Alto: ',\n    'image_does_not_exist'   => 'La imagen no existe',\n    'image_removed'          => 'Imagen eliminada',\n    'last_modified'          => 'Última modificación',\n    'library'                => 'Mediateca',\n    'loading'                => 'CARGANDO SUS ARCHIVOS DE MEDIOS',\n    'max_files_select'       => 'Solo puede seleccionar un archivo|Solo puede seleccionar un máximo de :count archivos',\n    'min_files_select'       => 'Debe seleccionar al menos un archivo|Debe seleccionar al menos :count archivos',\n    'move_file_folder'       => 'Mover archivo/carpeta',\n    'new_file_folder'        => 'Nuevo nombre de archivo/carpeta',\n    'new_folder_name'        => 'Nombre de nueva carpeta',\n    'no_files_here'          => 'No hay archivos aquí.',\n    'no_files_in_folder'     => 'No hay archivos en esta carpeta.',\n    'nothing_selected'       => 'No ha seleccionado ningún archivo o carpeta',\n    'public_url'             => 'URL pública',\n    'rename_file_folder'     => 'Renombrar archivo/carpeta',\n    'size'                   => 'Tamaño',\n    'success_crop_image'     => 'Imagen recortada con éxito',\n    'success_moved'          => 'Archivo/Carpeta movido exitosamente',\n    'success_renamed'        => 'Archivo/Carpeta renombrado exitosamente',\n    'success_uploaded_file'  => 'Nuevo archivo subido exitosamente',\n    'success_uploading'      => 'Imagen cargada exitosamente',\n    'title'                  => 'Título',\n    'type'                   => 'Tipo',\n    'uploading_wrong_type'   => 'Falla de carga: formato de archivo no soportado o es demasiado grande para cargar',\n    'video_support'          => 'Su navegador no soporta la etiqueta de video.',\n    'width'                  => 'Ancho: ',\n    'add_all_selected'       => 'Agregar todos los seleccionados',\n];\n"
  },
  {
    "path": "publishable/lang/es/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Color en RGB o hex (opcional)',\n    'color_ph'             => 'Color (p. ej. #ffffff o rgb (255, 255, 255)',\n    'create_new_item'      => 'Crear una opción de menú',\n    'delete_item_confirm'  => 'Sí, eliminar esta opción de menú',\n    'delete_item_question' => '¿Está seguro de que desea eliminar esta opción del menú?',\n    'drag_drop_info'       => 'Arraste y suelte las opciones de menú para reorganizarlas',\n    'dynamic_route'        => 'Ruta dinámica',\n    'edit_item'            => 'Editar opción del menú',\n    'icon_class'           => 'Ícono para la opción de menú (Use una',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Ícono (opcional)',\n    'item_route'           => 'Ruta para la opción de menú',\n    'item_title'           => 'Título de la opción de menú',\n    'link_type'            => 'Tipo de enlace',\n    'new_menu_item'        => 'Nueva opción de menú',\n    'open_in'              => 'Abrir en',\n    'open_new'             => 'Nueva pestaña/ventana',\n    'open_same'            => 'Misma pestaña/ventana',\n    'route_parameter'      => 'Parámetros de ruta (si existen)',\n    'static_url'           => 'URL estática',\n    'successfully_created' => 'Se creó una opción de menú.',\n    'successfully_deleted' => 'Opción de menú eliminada exitosamente.',\n    'successfully_updated' => 'Opción de menú actualizada exitosamente.',\n    'updated_order'        => 'Orden actualizado exitosamente.',\n    'url'                  => 'URL para la opción de menú',\n    'usage_hint'           => 'Puede imprimir un menú en cualquier lugar de su sitio llamando a ',\n];\n"
  },
  {
    "path": "publishable/lang/es/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Campos adicionales',\n    'category'         => 'Categoría',\n    'content'          => 'Contenido',\n    'details'          => 'Detalles',\n    'excerpt'          => 'Extracto <small>Pequeña descripción de este post</small>',\n    'image'            => 'Imagen',\n    'meta_description' => 'Meta descripción',\n    'meta_keywords'    => 'Meta palabras clave',\n    'new'              => 'Nuevo Post',\n    'seo_content'      => 'Contenido SEO',\n    'seo_title'        => 'Título SEO',\n    'slug'             => 'URL slug',\n    'status'           => 'Estado',\n    'status_draft'     => 'borrador',\n    'status_pending'   => 'pendiente',\n    'status_published' => 'publicado',\n    'title'            => 'Título',\n    'title_sub'        => 'El título del post',\n    'update'           => 'Actualizar Post',\n];\n"
  },
  {
    "path": "publishable/lang/es/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'            => 'Avatar',\n    'edit'              => 'Editar mi perfil',\n    'edit_user'         => 'Editar usuario',\n    'password'          => 'Contraseña',\n    'password_hint'     => 'Dejar vacío para mantener el mismo',\n    'role'              => 'Rol',\n    'role_default'      => 'Rol predeterminado',\n    'roles'             => 'Roles',\n    'roles_additional'  => 'Roles adicionales',\n    'user_role'         => 'Rol del usuario',\n];\n"
  },
  {
    "path": "publishable/lang/es/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Autor',\n        'avatar'           => 'Avatar',\n        'body'             => 'Cuerpo',\n        'category'         => 'Categoría',\n        'created_at'       => 'Creado',\n        'display_name'     => 'Nombre a Mostrar',\n        'email'            => 'Correo Electrónico',\n        'excerpt'          => 'Extracto',\n        'featured'         => 'Destacado',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Descripción',\n        'meta_keywords'    => 'Meta Palabras Clave',\n        'name'             => 'Nombre',\n        'order'            => 'Orden',\n        'page_image'       => 'Imagen de la página',\n        'parent'           => 'Padre',\n        'password'         => 'Constraseña',\n        'post_image'       => 'Imagen del Post',\n        'remember_token'   => 'Token de Recuerdo',\n        'role'             => 'Rol',\n        'seo_title'        => 'Título SEO',\n        'slug'             => 'Slug',\n        'status'           => 'Estatus',\n        'title'            => 'Título',\n        'updated_at'       => 'Actualizado',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Categoría',\n            'plural'   => 'Categorías',\n        ],\n        'menu'     => [\n            'singular' => 'Menú',\n            'plural'   => 'Menús',\n        ],\n        'page'     => [\n            'singular' => 'Página',\n            'plural'   => 'Páginas',\n        ],\n        'post'     => [\n            'singular' => 'Post',\n            'plural'   => 'Posts',\n        ],\n        'role'     => [\n            'singular' => 'Rol',\n            'plural'   => 'Roles',\n        ],\n        'user'     => [\n            'singular' => 'Usuario',\n            'plural'   => 'Usuarios',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Categorías',\n        'compass'      => 'Compás',\n        'dashboard'    => 'Tablero',\n        'database'     => 'Base de Datos',\n        'media'        => 'Multimedia',\n        'menu_builder' => 'Diseñador de Menús',\n        'pages'        => 'Páginas',\n        'posts'        => 'Posts',\n        'roles'        => 'Roles',\n        'settings'     => 'Parámetros',\n        'tools'        => 'Herramientas',\n        'users'        => 'Usuarios',\n    ],\n    'roles'      => [\n        'admin' => 'Administrador',\n        'user'  => 'Usuario Normal',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Imagen de fondo del administrador',\n            'description'                => 'Descripción del administrador',\n            'description_value'          => 'Bienvenido a Voyager. El administrador que le faltaba a Laravel',\n            'google_analytics_client_id' => 'ID de Cliente para Google Analytics (usado para el tablero de administrador)',\n            'icon_image'                 => 'Ícono del administrador',\n            'loader'                     => 'Imagen de carga del administrador',\n            'title'                      => 'Título del administrador',\n        ],\n        'site'  => [\n            'description'                  => 'Descripción del sitio',\n            'google_analytics_tracking_id' => 'ID de rastreo de Google Analytics',\n            'logo'                         => 'Logo del sitio',\n            'title'                        => 'Título del sitio',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/es/settings.php",
    "content": "<?php\n\nreturn [\n    'add_new'              => 'Añadir parámetro',\n    'already_at_bottom'    => 'Esto ya está en la parte inferior de la lista',\n    'already_at_top'       => 'Esto ya está en la parte superior de la lista',\n    'delete_confirm'       => 'Sí, eliminar parámetro',\n    'delete_question'      => '¿Está seguro de que desea eliminar el parámetro :setting?',\n    'group'                => 'Grupo',\n    'group_admin'          => 'Administrador',\n    'group_general'        => 'General',\n    'group_site'           => 'Sitio',\n    'help_group'           => 'Grupo al que la opción será asignada',\n    'help_key'             => 'Clave del parámetro, p. ej. pag_titulo',\n    'help_name'            => 'Nombre del parámetro, p. ej. Título de Página',\n    'help_option'          => '(Opcional, sólo aplica a ciertos tipos como lista desplegable o botón de opción)',\n    'key_already_exists'   => 'Esta opción ya existe',\n    'moved_order_down'     => 'Se movió el parámetro :name',\n    'moved_order_up'       => 'Se movió el parámetro :name',\n    'new'                  => 'Nuevo parámetro',\n    'save'                 => 'Guardar parámetro',\n    'successfully_created' => 'Parámetro creado exitosamente',\n    'successfully_deleted' => 'Parámetro eliminado exitosamente',\n    'successfully_removed' => 'Parámetro :name eliminado correctamente',\n    'successfully_saved'   => 'Parámetro guardado exitosamente',\n    'usage_help'           => 'Puede obtener el valor de cada parámetro en cualquier lugar de su sitio llamando',\n];\n"
  },
  {
    "path": "publishable/lang/es/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Hecho con <i class = \"voyager-heart\"> </i> por',\n    'footer_copyright2' => 'Hecho con ron e incluso más ron',\n];\n"
  },
  {
    "path": "publishable/lang/fa/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'براساس بازدید',\n    'by_sessions'            => 'بر اساس سشن',\n    'by_users'               => 'براساس کاربران',\n    'no_client_id'           => 'برای مشاهده وضعیت بازدیدها و آنالیز ورودی ها باید کلید دسترسی از گوگل آنالیز دریافت کرده و آن را در فیلد <code>google_analytics_client_id</code> در تنظیمات وارد نمایید. برای دریافت کلید دسترسی به کنسول گوگل مراجعه نمایید:',\n    'set_view'               => 'یک View انتخاب نمایید',\n    'this_vs_last_week'      => 'این هفته در مقایسه با هفته پیش',\n    'this_vs_last_year'      => 'امسال در مقایسه با سال پیش',\n    'top_browsers'           => 'آمار براساس مرورگر',\n    'top_countries'          => 'آمار براساس کشور بازدیدکنندگان',\n    'various_visualizations' => 'گراف های متنوع',\n];\n"
  },
  {
    "path": "publishable/lang/fa/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'افزودن BREAD برای این جدول',\n    'bread_crud_actions'     => 'اعمال قابل انجام در این BREAD/CRUD',\n    'bread_info'             => 'جزئیات BREAD',\n    'controller_name_hint'   => 'مثال: PageController. در صورت خالی بودن از کنترلر پیشفرض BREAD استفاده خواهد شد',\n    'create_bread_for_table' => 'ایجاد BREAD برای جدول :table',\n    'delete_bread'           => 'حذف BREAD',\n    'delete_bread_conf'      => 'بله BREAD را حذف کن',\n    'delete_bread_quest'     => 'آیا از حذف BREAD برای جدول :table اطمینان دارید؟',\n    'edit_bread'             => 'ویرایش BREAD',\n    'edit_bread_for_table'   => 'ویرایش BREAD برای جدول :table',\n    'error_creating_bread'   => 'متاسفانه به نظر می رسد مشکلی در ایجاد این BREAD وجود دارد',\n    'error_removing_bread'   => 'متاسفانه به نظر می رسد مشکلی در حذف این BREAD وجود دارد',\n    'error_updating_bread'   => 'متاسفانه به نظر می رسد مشکلی در به روزرسانی این BREAD وجود دارد',\n    'error_tagging'          => 'متاسفانه مشکلی در ایجاد رکورد به وجود آمد. لطفا از وجود مقادیر پیشفرض برای سایر فیلد‌های جدول اطمینان حاصل کنید.',\n    'success_created_bread'  => 'BREAD جدید با موفقیت ایجاد گردید',\n    'success_remove_bread'   => ':datatype با موفقیت حذف شد',\n    'success_update_bread'   => 'BREAD :datatype با موفقیت به روز گردید',\n    'controller_name'        => 'نام کنترلر',\n    'create_migration'       => 'یک فایل سازنده برای این جدول ایجاد شود؟ (migration)',\n    'description'            => 'توضیحات',\n    'display_name'           => 'نام نمایشی',\n    'display_name_plural'    => 'نام نمایشی برای چند نمونه (plural)',\n    'display_name_singular'  => 'نام نمایشی برای یک نمونه (singular)',\n    'edit_rows'              => 'ویرایش ردیف‌های جدول :table زیر',\n    'generate_permissions'   => 'تولید مجوزها',\n    'icon_class'             => 'آیکون برای این جدول',\n    'icon_hint'              => 'آیکون (دلبخواه) استفاده کنید از',\n    'icon_hint2'             => 'کلاس فونت voyager',\n    'model_class'            => 'نام کلاس مدل',\n    'model_name'             => 'نام مدل',\n    'model_name_ph'          => 'مثال App\\User. در صورت خالی بودن از نام جدول استفاده خواهد شد',\n    'order'                  => 'چینش',\n    'order_column'           => 'ستون مرتب سازی',\n    'order_column_ph'        => 'ستونی که مرتب سازی در آن دخیره می‌شود',\n    'order_ident_column'     => 'ستون نمای برای مرتب سازی',\n    'order_ident_column_ph'  => 'ستونی که در صفحه مرتب سازی نشان داده می‌شود',\n    'ordering_not_set'       => 'شما اول باید مرتب سازی را تعریف کنید.',\n    'policy_class'           => 'نام کلاس Policy',\n    'policy_name'            => 'نام policy',\n    'policy_name_ph'         => 'مانند \\App\\Policies\\UserPolicy, اگر خالی گذاشته شود از مقدار پیشفرض استفاده می‌شود.',\n    'server_pagination'      => 'صفحه بندی سمت سرور',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'نامک برای آدرس (باید یکتا باشد)',\n    'url_slug_ph'            => 'نامک برای آدرس. مثال: posts',\n];\n"
  },
  {
    "path": "publishable/lang/fa/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => '\n    به قطب نمای voyager خوش آمدید! هر اپلیکیشن خوب باید یک قطب نما داشته باشد که کاربران را به جهات صحیح هدایت کند!.\n    در این بخش می توانید منابعی را بیابید که به شما در انجام امور مدیریتی کمک می کند، تا بتوانید اپلیکیشنتان را بسازید.',\n    'links'         => [\n        'title'                 => 'لینک ها',\n        'documentation'         => 'راهنمای استفاده',\n        'voyager_homepage'      => 'صفحه اصلی voyager',\n    ],\n    'commands'      => [\n        'title'                 => 'دستورات',\n        'text'                  => 'اجرای دستورات Artisan از voyager',\n        'clear_output'          => 'پاکسازی خروجی',\n        'command_output'        => 'خروجی دستور Artisan',\n        'additional_args'       => 'آرگومان های بیشتر؟',\n        'run_command'           => 'اجرای دستور',\n    ],\n    'resources'     => [\n        'title'                 => 'منابع',\n        'text'                  => 'منابع Voyager برای کمک به شما جهت یافتن سریع تر آنچه به دنبالش هستید',\n\n    ],\n    'logs'          => [\n        'title'                 => 'لاگ ها',\n        'text'                  => 'لاگ های اپ شما',\n        'file_too_big'          => 'حجم لاگ بیش از 50 مگ است. لطفا آن را دانلود نمایید',\n        'level'                 => 'سطح',\n        'context'               => 'Context',\n        'date'                  => 'تاریخ',\n        'content'               => 'محتوا',\n        'download_file'         => 'دانلود فایل',\n        'delete_file'           => 'حذف فایل',\n        'delete_all_files'      => 'حذف همه فایل ها',\n        'delete_success'        => ' فایل لاگ با موفقیت حذف گردید:',\n        'delete_all_success'    => 'همه فایل های لاگ با موفقیت حذف شدند',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'فونت ها',\n        'font_class'            => 'نقشه کلاس های فونت Voyager',\n        'font_character'        => 'نقشه کاراکترهای فونت Voyager',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/fa/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'افزودن ستون جدید',\n    'add_softdeletes'           => 'افزودن Soft Deletes',\n    'add_timestamps'            => 'افزودن Timestamps',\n    'already_exists'            => 'از قبل وجود دارد',\n    'already_exists_table'      => 'جدول :table از قبل وجود دارد',\n    'bread_crud_actions'        => 'اعمال BREAD/CRUD',\n    'bread_info'                => 'اطلاعات BREAD',\n    'browse_bread'              => 'مشاهده BREAD',\n    'column'                    => 'ستون',\n    'composite_warning'         => 'Warning: این ستون قسمتی از ترکیب INDEX است',\n    'create_new_table'          => 'ایجاد جدول جدید',\n    'create_your_new_table'     => 'جدول جدیدتان را ایجاد نمایید',\n    'create_model_table'        => 'یک مدل برای جدول جدید ایجاد شود ؟',\n    'default'                   => 'پیشفرض',\n    'delete_bread_before_table' => 'حتما پیش از حذف این جدول از جذف BREAD ایجاد شده برای آن اطمینان حاصل نمایید',\n    'delete_table_confirm'      => 'بله، این جدول را حذف کن',\n    'delete_table_question'     => 'آیا از حذف جدول :table اطمینان دارید؟',\n    'editing_table'             => 'ویرایش جدول :table',\n    'edit_table'                => 'جدول :table را در زیر ویرایش نمایید',\n    'edit_table_not_exist'      => 'جدولی که می خواهید ویاریش نمایید وجود ندارد!',\n    'extra'                     => 'بیشتر',\n    'field'                     => 'فیلد',\n    'field_safe_failed'         => 'ذخیره سازی فیلد :field ناموفق بود. در حال بازگردانی تغییرات..',\n    'index'                     => 'INDEX',\n    'input_type'                => 'نوع ورودی',\n    'key'                       => 'Key',\n    'name_warning'              => 'لطفا پیش از افزودن index یک نام برای ستون وارد کنید',\n    'no_composites_warning'     => 'این جدول INDEXهای ترکیبی دارد. لطفا توجه داشته باشید که این مورد هم اکنون پشتیبانی نمی‌شود. هنگام اضافه و حذف کردن شاخص‌ها احتیاط کنید.',\n    'null'                      => 'Null',\n    'optional_details'          => 'جزئیات غیراجباری',\n    'policy_class'              => 'نام کلاس Policy',\n    'policy_name'               => 'نام Policy',\n    'policy_name_ph'            => 'مانند \\App\\Policies\\UserPolicy, در صورت خالی بودن از مقدار پیشفرض استفاده خواهد شد',\n    'primary'                   => 'PRIMARY',\n    'server_pagination'         => 'صفحه بندی نتایج در سمت سرور',\n    'success_create_table'      => 'جدول :table با موفقیت ایجاد گردید',\n    'success_created_bread'     => 'BREAD جدید با موفقیت ایجاد گردید',\n    'success_delete_table'      => 'جدول :table با موفقیت حذف گردید',\n    'success_remove_bread'      => 'BREAD با موفقیت از :datatype حذف گردید',\n    'success_update_bread'      => 'BREAD :datatype با موفقیت به روز گردید',\n    'success_update_table'      => 'جدول :table با موفقیت به روز گردید',\n    'table_actions'             => 'اعمال قابل انجام بر روی جدول',\n    'table_columns'             => 'ستون های جدول',\n    'table_has_index'           => 'این جدول از قبل یک primary index دارد.',\n    'table_name'                => 'نام جدول',\n    'table_no_columns'          => 'جدول ستونی ندارد',\n    'type'                      => 'نوع',\n    'type_not_supported'        => 'این نوع پشتیبانی نمی شود',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'نوع ناشناخته',\n    'update_table'              => 'به روزرسانی جدول',\n    'url_slug'                  => 'نامک برای استفاده در آدرس (باید یکتا باشد)',\n    'url_slug_ph'               => 'نامک در آدرس (مثال posts)',\n    'visibility'                => 'وضعیت نمایش',\n    'relationship'              => [\n        'relationship'         => 'ارتباط',\n        'relationships'        => 'ارتباطات',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => 'Which column from the',\n        'is_used_to_reference' => 'is used to reference the',\n        'pivot_table'          => 'Pivot Table',\n        'selection_details'    => 'Selection Details',\n        'display_the'          => 'نشان دادن',\n        'store_the'            => 'ذخیره کردن',\n        'allow_tagging'        => 'Allow Tagging',\n        'easy_there'           => 'Easy there Captain',\n        'before_create'        => 'برای اینکه بتوانید ارتباط بین این جدول و جداول دیگر ایجاد نمایید، باید ابتدا برای آن یک BREAD بسازید. سپس به اینجا برگشته و اقدام به ایجاد ارتباط نمایید. باتشکر',\n        'cancel'               => 'لغو',\n        'add_new'              => 'افزودن ارتباط جدید',\n        'open'                 => 'باز',\n        'close'                => 'بسته',\n        'relationship_details' => 'جزئیات ارتباط',\n        'browse'               => 'مشاهده',\n        'read'                 => 'خواندن',\n        'edit'                 => 'ویرایش',\n        'add'                  => 'افزودن',\n        'delete'               => 'حذف',\n        'create'               => 'ایجاد یک ارتباط',\n        'namespace'            => 'Model Namespace (ex. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/fa/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'اطلاعاتی در جدول موجود نیست',\n    'sInfo'           => 'نمایش _START_ تا _END_ مورد از مجموع _TOTAL_ مورد',\n    'sInfoEmpty'      => 'نمایش 0 تا 0 از مجموع 0 مورد',\n    'sInfoFiltered'   => '(نتایج از مجموع _MAX_ مورد، موجود)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'نمایش ورودی‌های _MENU_',\n    'sLoadingRecords' => 'درحال بارگزاری...',\n    'sProcessing'     => 'درحال پردازش...',\n    'sSearch'         => 'جستجو:',\n    'sZeroRecords'    => 'هیچ رکوردی مطابقت نداشت',\n    'oPaginate'       => [\n        'sFirst'    => 'اولین',\n        'sLast'     => 'آخرین',\n        'sNext'     => 'بعدی',\n        'sPrevious' => 'قبلی',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': برای چینش صعودی فعال نمایید',\n        'sSortDescending' => ': برای چینش نزولی فعال نمایید',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/fa/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'هفته پیش',\n    'last_year' => 'سال پیش',\n    'this_week' => 'این هفته',\n    'this_year' => 'امسال',\n];\n"
  },
  {
    "path": "publishable/lang/fa/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'برگه|برگه ها',\n    'page_link_text' => 'مشاهده همه برگه ها',\n    'page_text'      => 'شما :count :string در جدولتان دارد. برای مشاهده همه برگه ها بر روی دکمه زیر کلیک کنید.',\n    'post'           => 'نوشته|نوشته ها',\n    'post_link_text' => 'مشاهده همه نوشته ها',\n    'post_text'      => 'شما :count :string در جدولتان دارد. برای مشاهده همه نوشته ها بر روی دکمه زیر کلیک کنید.',\n    'user'           => 'کاربر|کاربران',\n    'user_link_text' => 'مشاهده همه کاربران',\n    'user_text'      => 'شما :count :string در جدولتان دارد. برای مشاهده همه کاربران بر روی دکمه زیر کلیک کنید.',\n];\n"
  },
  {
    "path": "publishable/lang/fa/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'ما شورت کات (symlink) مفقوده را برایتان ایجاد کردیم',\n    'symlink_created_title'  => 'شورتکات مفقوده ایجاد گردید',\n    'symlink_failed_text'    => 'ایجاد شورتکات مورد مفقوده ناموفق بود. به نظر می رسد هاستینگ شما از این قابلیت پشتیبانی نمی کند.',\n    'symlink_failed_title'   => 'قادر به ایجاد شورت کات به فضای ذخیره سازی نیستیم',\n    'symlink_missing_button' => 'برطرف کن',\n    'symlink_missing_text'   => 'قادر به یافتن شورتکات به فضای ذخیره سازیتان نیستیم. این مساله می تواند در هنگام آپلود فایل ها در مرورگر شما را دچار مشکل کند',\n    'symlink_missing_title'  => 'شورتکات به فضای ذخیره سازی یافت نشد',\n];\n"
  },
  {
    "path": "publishable/lang/fa/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'برای یکسان بودن خالی بگذارید',\n    'field_select_dd_relationship' => 'از تنظیم مناسب ارتباط در متن :method از کلاس :class اطمینان حاصل کنید.',\n\n    'type_checkbox'                => 'چک باکس',\n    'type_codeeditor'              => 'ویرایشگر کد',\n    'type_file'                    => 'فایل',\n    'type_image'                   => 'تصویر',\n    'type_radiobutton'             => 'دکمه رادیویی',\n    'type_richtextbox'             => 'ویرایشگر متن',\n    'type_selectdropdown'          => 'انتخابگر کشویی',\n    'type_textarea'                => 'فضای متنی',\n    'type_textbox'                 => 'قسمت متنی',\n];\n"
  },
  {
    "path": "publishable/lang/fa/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'true',\n    'action'                 => 'فعالیت',\n    'actions'                => 'فعالیت ها',\n    'add'                    => 'افزودن',\n    'add_folder'             => 'افزودن فولدر',\n    'add_new'                => 'افزودن جدید',\n    'all_done'               => 'همه کامل شدند',\n    'are_you_sure'           => 'اطمینان دارید',\n    'are_you_sure_delete'    => 'از حذف اطمینان دارید',\n    'auto_increment'         => 'Auto Increment',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'مشاهده',\n    'builder'                => 'سازنده',\n    'bulk_delete'            => 'حذف دسته جمعی',\n    'bulk_delete_confirm'    => 'بله، این را حذف کن',\n    'bulk_delete_nothing'    => 'شما چیزی برای حذف انتخاب نکرده اید',\n    'cancel'                 => 'لغو',\n    'choose_type'            => 'نوع را انتخاب نمایید',\n    'click_here'             => 'اینجا کلیک کنید',\n    'close'                  => 'بستن',\n    'compass'                => 'قطب نما',\n    'created_at'             => 'ایجاد شده در',\n    'custom'                 => 'سفارشی',\n    'dashboard'              => 'داشبورد',\n    'database'               => 'دیتابیس',\n    'default'                => 'پیشفرض',\n    'delete'                 => 'حذف',\n    'delete_confirm'         => 'بله، این را حذف کن!',\n    'delete_question'        => 'آیا از حذف این مورد اطمینان دارید',\n    'delete_this_confirm'    => 'بله، حذف کن',\n    'deselect_all'           => 'لغو انتخاب همه',\n    'download'               => 'دانلود',\n    'drag_drop_info'         => 'برای چیدن آیتم ها آنها را در زیر کشیده و رها کنید',\n    'edit'                   => 'ویرایش',\n    'email'                  => 'ایمیل',\n    'error_deleting'         => 'متاسفانه به نظر می رسد در حذف این مورد اشکالی پیش آمده',\n    'exception'              => 'خطا',\n    'featured'               => 'ثابت کردن پست',\n    'field_does_not_exist'   => 'فیلد وجود ندارد',\n    'how_to_use'             => 'نحوه استفاده',\n    'index'                  => 'Index',\n    'internal_error'         => 'خطای داخلی',\n    'items'                  => 'آیتم (ها)',\n    'keep_sidebar_open'      => 'کاپیتان! قلاب رو بکش ! و نوار کناری رو باز نگهدار!',\n    'key'                    => 'Key',\n    'last_modified'          => 'آخرین ویرایش',\n    'length'                 => 'طول',\n    'locale'                 => 'زبان',\n    'login'                  => 'ورود',\n    'media'                  => 'رسانه',\n    'menu_builder'           => 'منو ساز',\n    'move'                   => 'انتقال',\n    'name'                   => 'نام',\n    'new'                    => 'جدید',\n    'no'                     => 'خیر',\n    'no_thanks'              => 'خیر متشکرم',\n    'none'                   => 'هیچ',\n    'not_null'               => 'Not Null',\n    'no_results'             => 'No results',\n    'options'                => 'گزینه‌ها',\n    'password'               => 'پسورد',\n    'permissions'            => 'مجوزها',\n    'profile'                => 'پروفایل',\n    'public_url'             => 'آدرس عمومی',\n    'read'                   => 'خواندن',\n    'rename'                 => 'تغییرنام',\n    'required'               => 'الزامی',\n    'return_to_list'         => 'بازگشت به لیست',\n    'route'                  => 'Route',\n    'save'                   => 'ذخیره',\n    'search'                 => 'جستجو',\n    'select_all'             => 'انتخاب همه',\n    'select_group'           => 'یک گروه انتخاب نموده و یا یکی بسازید',\n    'settings'               => 'تنظیمات',\n    'showing_entries'        => 'نمایش :from تا :to از مجموع :all رکورد|نمایش :from تا :to از مجموع :all رکورد',\n    'submit'                 => 'تایید',\n    'successfully_added_new' => 'جدید با موفقیت ایجاد شد',\n    'successfully_deleted'   => 'با موفقیت حذف گردید',\n    'successfully_updated'   => 'با موفقیت به روز شد',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'عنوان',\n    'type'                   => 'نوع',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'غیرچسبان سازی نوار کناری',\n    'update'                 => 'به روزرسانی',\n    'update_failed'          => 'به روزرسانی ناموفق بود',\n    'updated_order'          => 'مرتب سازی به روزرسانی شد',\n    'upload'                 => 'آپلود',\n    'url'                    => 'آدرس',\n    'view'                   => 'مشاهده',\n    'viewing'                => 'در حال مشاهده',\n    'yes'                    => 'بله',\n    'yes_please'             => 'بله، لطفا',\n];\n"
  },
  {
    "path": "publishable/lang/fa/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'جیسون نامعتبر',\n    'invalid_message'   => 'به نظر می رسد جیسون معرفی شده دارای ایراد است.',\n    'valid'             => 'جیسون معتبر',\n    'validation_errors' => 'خطا در اعتبارسنجی',\n];\n"
  },
  {
    "path": "publishable/lang/fa/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'ورود',\n    'signin_below' => 'در زیر وارد شوید:',\n    'welcome'      => 'به Voyager پنل ادمینی که لاراول کم داشت خوش آمدید!',\n];\n"
  },
  {
    "path": "publishable/lang/fa/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'افزودن فولدر جدید',\n    'audio_support'          => 'مرورگر شما از تگ audio پشتیبانی نمی کند',\n    'create_new_folder'      => 'ایجاد فولدر جدید',\n    'delete_folder_question' => 'حذف یک فولدر تمام فایل ها و فولدرهای درون آن را حذف خواهد کرد.',\n    'destination_folder'     => 'فولدر مقصد',\n    'drag_drop_info'         => 'فایل ها را کشیده و رها کنید و یا برای آپلود در زیر کلیک کنید',\n    'error_already_exists'   => 'یک فایل یا فولدر با همین نام در این پوشه وجود دارد.',\n    'error_creating_dir'     => 'متاسفانه خطایی در هنگام ایجاد این پوشه رخ داد، لطفا مجوزهایتان را بررسی نمایید.',\n    'error_deleting_file'    => 'متاسفانه خطایی در هنگام حذف این فایل رخ داده است، لطفا مجوزهایتان را بررسی نمایید.',\n    'error_deleting_folder'  => 'متاسفانه خطایی در هنگام حذف این فولدر رخ داده است، لطفا مجوزهایتان را بررسی نمایید.',\n    'error_may_exist'        => 'احتمالا فایل یا فولدری با همین نام از قبل وجود دارد. لطفا یک نام دیگر انتخاب نمایید و یا آن فایل را حذف کنید.',\n    'error_moving'           => 'متاسفانه خطایی در هنگام جابه جایی فایل/فولدر مورد نظر رخ داد، لطفا اطمینان حاصل نمایید که مجوزهای لازم را دارید.',\n    'error_uploading'        => 'آپلود ناموفق: خطای ناشناخته ای رخ داده است!',\n    'folder_exists_already'  => 'متاسفانه این فولدر از قبل وجود دارد، لطفا ابتدا فولدر قبلی را حذف نمایید، در صورتی که قصد ساخت مجدد آن را دارید',\n    'image_does_not_exist'   => 'تصویر موجود نیست',\n    'image_removed'          => 'تصویر حذف شده است',\n    'library'                => 'کتابخانه پرونده های چندرسانه ای',\n    'loading'                => 'بارگزاری پرونده های چندرسانه ای شما',\n    'move_file_folder'       => 'انتقال فایل/فولدر',\n    'new_file_folder'        => 'نام فایل/فولدر جدید',\n    'new_folder_name'        => 'نام فولدر جدید',\n    'no_files_here'          => 'فایلی در اینجا نیست.',\n    'no_files_in_folder'     => 'فایلی در این فولدر نیست.',\n    'nothing_selected'       => 'هیچ فایل یا فالودری انتخاب نشده است',\n    'rename_file_folder'     => 'تغییرنام فایل/فولدر',\n    'success_uploaded_file'  => 'فایل جدید با موفقیت آپلود شد!',\n    'success_uploading'      => 'تصویر با موفقیت آپلود شد!',\n    'uploading_wrong_type'   => 'خطا در آپلود: فرمت فایل پشتیبانی نمی شود و یا حجم فایل برای آپلود بسیار زیاد است!',\n    'video_support'          => 'مرورگر شما از تگ ویدئو پشتیبانی نمی کند.',\n    'crop'                   => 'برش',\n    'crop_and_create'        => 'برش و ایجاد',\n    'crop_override_confirm'  => 'این پروسه تصویر اصلی را از بین می برد. آیا اطمینان دارید؟',\n    'crop_image'             => 'برش تصویر',\n    'success_crop_image'     => 'تصویر با موفقیت برش داده شد',\n    'height'                 => 'ارتفاع: ',\n    'title'                  => 'عنوان',\n    'type'                   => 'نوع',\n    'size'                   => 'سایز',\n    'public_url'             => 'آدرس عمومی',\n    'last_modified'          => 'آخرین ویرایش',\n    'browser_video_support'  => 'مرورگر شما از تگ ویدئو پشتیبانی نمی کند.',\n    'browser_audio_support'  => 'مرورگر شما از تگ audio پشتیبانی نمی کند',\n    'width'                  => 'پهنا: ',\n    'add_all_selected'       => 'همه انتخاب شده را اضافه کنید',\n];\n"
  },
  {
    "path": "publishable/lang/fa/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'رنگ بر حسب RGB یا HEX (دلخواه)',\n    'color_ph'             => 'رنگ، مثال: #ffffff یا rgb(255,255,255) (دلخواه)',\n    'create_new_item'      => 'ایجاد آیتم منو',\n    'delete_item_confirm'  => 'بله این آیتم منو را حذف کن',\n    'delete_item_question' => 'آیا از حذف این آیتم منو اطمینان دارید?',\n    'drag_drop_info'       => 'آیتم‌های منوی زیر را بکشید و رها کنید تا چینش آیتم‌ها را تعیین کنید',\n    'dynamic_route'        => 'Route متغییر',\n    'edit_item'            => 'ویرایش آیتم منو',\n    'icon_class'           => 'کلاس آیکون این آیتم منو (استفاده از',\n    'icon_class2'          => 'کلاس Voyager Font</a>)',\n    'icon_class_ph'        => 'کلاس آیکون (دلخواه)',\n    'item_route'           => 'نامک برای آیتم منو',\n    'item_title'           => 'عنوان آیتم منو',\n    'link_type'            => 'نوع لینک',\n    'new_menu_item'        => 'آیتم منوی جدید',\n    'open_in'              => 'بازکردن در',\n    'open_new'             => 'تب/پنجره جدید',\n    'open_same'            => 'همان تب/پنجره',\n    'route_parameter'      => 'پارامترهای Route (در صورت وجود)',\n    'static_url'           => 'آدرس استاتیک',\n    'successfully_created' => 'آیتم جدید منو با موفقیت ایجاد گردید.',\n    'successfully_deleted' => 'آیتم منو با موفقیت حذف گردید.',\n    'successfully_updated' => 'آیتم منو با موفقیت به روز گردید.',\n    'updated_order'        => 'چینش منو با موفقیت به روز شد.',\n    'url'                  => 'آدرس آیتم منو',\n    'usage_hint'           => 'شما می توانید منو را در هر جایی از سایتتان نمایش دهید با فراخوانی| شما می توانید این منو را در هر جایی از سایتتان نمایش دهید با فراخوانی',\n];\n"
  },
  {
    "path": "publishable/lang/fa/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'فیلدهای اضافی',\n    'category'         => 'موضوع نوشته',\n    'content'          => 'محتوای نوشته',\n    'details'          => 'جزئیات نوشته',\n    'excerpt'          => 'شرح مختصر <small>توضیحی کوتاه از نوشته</small>',\n    'image'            => 'تصویر نوشته',\n    'meta_description' => 'توضیحات متا',\n    'meta_keywords'    => 'کلمات کلیدی متا',\n    'new'              => 'ایجاد نوشته جدید',\n    'seo_content'      => 'محتوای سئو',\n    'seo_title'        => 'عنوان سئو',\n    'slug'             => 'نامک در آدرس',\n    'status'           => 'وضعیت انتشار',\n    'status_draft'     => 'پیش نویس',\n    'status_pending'   => 'در انتظار بازبینی',\n    'status_published' => 'منتشر شده',\n    'title'            => 'عنوان نوشته',\n    'title_sub'        => 'عنوان برای نوشته تان',\n    'update'           => 'به روزرسانی نوشته',\n];\n"
  },
  {
    "path": "publishable/lang/fa/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'آواتار',\n    'edit'             => 'ویرایش پروفایل من',\n    'edit_user'        => 'ویرایش کاربر',\n    'password'         => 'رمز عبور',\n    'password_hint'    => 'برای یکسان بودن خالی بگذارید',\n    'role'             => 'نقش',\n    'roles'            => 'نقش ها',\n    'role_default'     => 'نقش پیشفرض',\n    'roles_additional' => 'نقش های دیگر',\n    'user_role'        => 'نقش کاربر',\n];\n"
  },
  {
    "path": "publishable/lang/fa/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'نویسنده',\n        'avatar'           => 'آواتار',\n        'body'             => 'بدنه',\n        'category'         => 'دسته',\n        'created_at'       => 'ایجاد شده در',\n        'display_name'     => 'نام نمایشی',\n        'email'            => 'ایمیل',\n        'excerpt'          => 'شرح مختصر',\n        'featured'         => 'شاخص',\n        'id'               => 'ID',\n        'meta_description' => 'توضیحات متا',\n        'meta_keywords'    => 'کلیدواژه های متا',\n        'name'             => 'نام',\n        'order'            => 'چیدمان',\n        'page_image'       => 'تصویر برگه',\n        'parent'           => 'والد',\n        'password'         => 'پسورد',\n        'post_image'       => 'تصویر نوشته',\n        'remember_token'   => 'به یادسپاری توکن',\n        'role'             => 'نقش',\n        'seo_title'        => 'عنوان سئو',\n        'slug'             => 'نامک',\n        'status'           => 'وضعیت',\n        'title'            => 'عنوان',\n        'updated_at'       => 'به روز شده در',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'دسته بندی',\n            'plural'   => 'دسته بندی ها',\n        ],\n        'menu'     => [\n            'singular' => 'منو',\n            'plural'   => 'منوها',\n        ],\n        'page'     => [\n            'singular' => 'برگه',\n            'plural'   => 'برگه ها',\n        ],\n        'post'     => [\n            'singular' => 'نوشته',\n            'plural'   => 'نوشته ها',\n        ],\n        'role'     => [\n            'singular' => 'نقش',\n            'plural'   => 'نقش ها',\n        ],\n        'user'     => [\n            'singular' => 'کاربر',\n            'plural'   => 'کاربران',\n        ],\n    ],\n    'menu_items' => [\n        'categories'   => 'دسته بندی ها',\n        'compass'      => 'قطب نما',\n        'dashboard'    => 'داشبورد',\n        'database'     => 'دیتابیس',\n        'media'        => 'چند رسانه ای',\n        'menu_builder' => 'منو ساز',\n        'pages'        => 'برگه ها',\n        'posts'        => 'نوشته ها',\n        'roles'        => 'نقش ها',\n        'settings'     => 'تنظیمات',\n        'tools'        => 'ابزارها',\n        'users'        => 'کاربران',\n    ],\n    'roles'      => [\n        'admin' => 'ادمین',\n        'user'  => 'کاربر عادی',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'تصویر پس زمینه برای ادمین',\n            'description'                => 'توضیحات ادمین',\n            'description_value'          => 'به Voyager ، پنل گم شده ی لاراول خوش آمدید',\n            'google_analytics_client_id' => 'شناسه گوگل انالیز (برای داشبورد ادمین مورد استفاده قرار می گیرد)',\n            'icon_image'                 => 'تصویر آیکون ادمین',\n            'loader'                     => 'لودر ادمین',\n            'title'                      => 'عنوان ادمین',\n        ],\n        'site'  => [\n            'description'                  => 'شرح مختصر فعالیت سایت',\n            'google_analytics_tracking_id' => 'شناسه رهگیری گوگل آنالیز',\n            'logo'                         => 'لوگوی سایت',\n            'title'                        => 'عنوان سایت',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/fa/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'با فراخوانی تابع مقابل می توانید مقدار هر تنظیم را در قالبتان دریافت نمایید',\n    'save'                 => 'ذخیره تنظیمات',\n    'new'                  => 'تنظیم جدید',\n    'help_name'            => 'نام تنظیم: مثال: عنوان ادمین',\n    'help_key'             => 'کلید این تنظیم: مثال: admin_title',\n    'help_option'          => '(دلبخواه، فقط به نوع خاصی از اینپوت ها مانند دراپ داون و دکمه های رادیویی اعمال میشود)',\n    'add_new'              => 'ایجاد تنظیم جدید',\n    'delete_question'      => 'آیا از حذف تنظیم  :setting اطمینان دارید؟',\n    'delete_confirm'       => 'بله، این تنظیم را حذف کن',\n    'successfully_created' => 'تنظیمات با موفقیت ایجاد شدند',\n    'successfully_saved'   => 'تنظیمات با موفقیت ذخیره شدند',\n    'successfully_deleted' => 'تنظیم با موفقیت حذف شد',\n    'already_at_top'       => 'از قبل در بالای لیست هست.',\n    'already_at_bottom'    => 'از قبل در انتهای لیست هست',\n    'key_already_exists'   => 'کلید :key از قبل وجود دارد',\n    'moved_order_up'       => 'چینش تنظیم :name به بالا انتقال یافت',\n    'moved_order_down'     => 'چینش تنظیم :name به پایین انتقال یافت',\n    'successfully_removed' => 'مقدار :name با موقیت حذف گردید',\n    'group_general'        => 'عمومی',\n    'group_admin'          => 'ادمین',\n    'group_site'           => 'سایت',\n    'group'                => 'گروه',\n    'help_group'           => 'گروهی که این تنظیم متعلق به آن است',\n];\n"
  },
  {
    "path": "publishable/lang/fa/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'ایجاد شده <i class=\"voyager-heart\"></i> با',\n    'footer_copyright2' => 'Made with rum and even more rum',\n];\n"
  },
  {
    "path": "publishable/lang/fi/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'  => 'Sivunäyttöjen mukaan',\n    'by_sessions'  => 'Istuntojen mukaan',\n    'by_users'     => 'Käyttäjien mukaan',\n    'no_client_id' => 'Näyttääksesi kävijätilastoja sinulla täytyy olla google analytics client id ja lisätä se '.\n                                'asetusriviin avainnimeltään <code>google_analytics_client_id</code>.'.\n                                ' Saat idn Google developer konsolista:',\n    'set_view'               => 'Valitse näkymä',\n    'this_vs_last_week'      => 'Tämä viikko vs viime viikko',\n    'this_vs_last_year'      => 'Tämä vuosi vs viime vuosi',\n    'top_browsers'           => 'Suosituimmat selaimet',\n    'top_countries'          => 'Suosituimmat maat',\n    'various_visualizations' => 'Monia eri visualisointeja',\n];\n"
  },
  {
    "path": "publishable/lang/fi/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Add BREAD to this table',\n    'bread_crud_actions'     => 'BREAD/CRUD Actions',\n    'bread_info'             => 'BREAD info',\n    'controller_name_hint'   => 'ex. PageController, if left empty will use the BREAD Controller',\n    'create_bread_for_table' => 'Create BREAD for :table table',\n    'delete_bread'           => 'Delete BREAD',\n    'delete_bread_conf'      => 'Yes, remove the BREAD',\n    'delete_bread_quest'     => 'Are you sure you want to delete the BREAD for the :table table?',\n    'edit_bread'             => 'Edit BREAD',\n    'edit_bread_for_table'   => 'Edit BREAD for :table table',\n    'error_creating_bread'   => 'Sorry it appears there may have been a problem creating this BREAD',\n    'error_removing_bread'   => 'Sorry it appears there was a problem removing this BREAD',\n    'error_updating_bread'   => 'Sorry it appears there may have been a problem updating this BREAD',\n    'error_tagging'          => 'Sorry it appears there may have been a problem creating the record. Please make sure your table has defaults for other fields.',\n    'success_created_bread'  => 'Successfully created new BREAD',\n    'success_remove_bread'   => 'Successfully removed BREAD from :datatype',\n    'success_update_bread'   => 'Successfully updated the :datatype BREAD',\n    'controller_name'        => 'Controller Name',\n    'create_migration'       => 'Create migration for this table?',\n    'description'            => 'Description',\n    'display_name'           => 'Display Name',\n    'display_name_plural'    => 'Display Name (Plural)',\n    'display_name_singular'  => 'Display Name (Singular)',\n    'edit_rows'              => 'Edit the rows for the :table table below',\n    'generate_permissions'   => 'Generate Permissions',\n    'icon_class'             => 'Icon to use for this Table',\n    'icon_hint'              => 'Icon (optional) Use a',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Model Class Name',\n    'model_name'             => 'Model Name',\n    'model_name_ph'          => 'ex. \\App\\User, if left empty will try and use the table name',\n    'order'                  => 'Order',\n    'order_column'           => 'Order column',\n    'order_column_ph'        => 'The column where the order is stored',\n    'order_ident_column'     => 'Order display column',\n    'order_ident_column_ph'  => 'The column which is displayed in the order page',\n    'ordering_not_set'       => 'You have to define ordering first',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'server_pagination'      => 'Server-side Pagination',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URL Slug (must be unique)',\n    'url_slug_ph'            => 'URL slug (ex. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/fi/database.php",
    "content": "<?php\n\nreturn [\n    'add_bread'                 => 'Lisää BREAD tälle taululle',\n    'add_new_column'            => 'Lisää uusi sarake',\n    'add_softdeletes'           => 'Lisää pehmytpoisto',\n    'add_timestamps'            => 'Lisää aikaleimat',\n    'already_exists'            => 'on jo olemassa',\n    'already_exists_table'      => 'Taulu :table on jo olemassa',\n    'bread_crud_actions'        => 'BREAD/CRUD toiminnot',\n    'bread_info'                => 'BREAD tiedot',\n    'browse_bread'              => 'Selaa BREAD',\n    'column'                    => 'Sarake',\n    'composite_warning'         => 'Varoitus: tämä sarake kuuluu komposiitti-indeksiin',\n    'controller_name'           => 'Kontrollerin nimi',\n    'controller_name_hint'      => 'esim. PageController, oletuksen käytetään BREAD Controlleria',\n    'create_bread_for_table'    => 'Lisää BREAD taululle :table',\n    'create_migration'          => 'Luodaanko migraatiotiedosto?',\n    'create_model_table'        => 'Luodaanko modellitiedosto?',\n    'create_new_table'          => 'Luo taulu',\n    'create_your_new_table'     => 'Luo uusi taulu',\n    'default'                   => 'Oletusarvo',\n    'delete_bread'              => 'Poista BREAD',\n    'delete_bread_before_table' => 'Ole hyvä ja varmista että BREAD tulee poistetuksi ennen kuin poistat taulun.',\n    'delete_table_bread_conf'   => 'Kyllä, poista BREAD',\n    'delete_table_bread_quest'  => 'Oletko varma että haluat poistaa BREADin taululle nimeltä :table?',\n    'delete_table_confirm'      => 'Kyllä, poista tämä taulu',\n    'delete_table_question'     => 'Oletko varma että haluat poistaa taulun nimeltä :table?',\n    'description'               => 'Kuvausteksti',\n    'display_name'              => 'Näyttönimi',\n    'display_name_plural'       => 'Näyttönimi (monikkomuoto)',\n    'display_name_singular'     => 'Näyttönimi (yksikkömuoto)',\n    'edit_bread'                => 'Muokkaa BREAD',\n    'edit_bread_for_table'      => 'Muokkaa BREAD taululle nimeltä :table',\n    'edit_rows'                 => 'Muokkaa rivejä alla olevalle taululle nimeltä :table',\n    'edit_table'                => 'Muokkaa alla olevaa taulua nimeltä :table',\n    'edit_table_not_exist'      => 'Taulua jota halusit muokata ei löytynyt',\n    'error_creating_bread'      => 'Pahoittelut, kohtasimme jonkin virheen luodessa tätä BREADiä',\n    'error_removing_bread'      => 'Pahoittelut, kohtasimme jonkin virheen poistaessa tätä BREADiä',\n    'error_updating_bread'      => 'Pahoittelut, kohtasimme jonkin virheen muokatessa luodessa tätä BREADiä',\n    'extra'                     => 'Ekstra',\n    'field'                     => 'Kenttä',\n    'field_safe_failed'         => 'Virhe tallentaessa kenttää :field, toiminto perutaan!',\n    'generate_permissions'      => 'Luo käyttöoikeudet',\n    'icon_class'                => 'Taulua kuvaava ikoni',\n    'icon_hint'                 => 'Ikoni (valinnainen) Käytä',\n    'icon_hint2'                => 'Voyager Fonttiluokkaa',\n    'index'                     => 'INDEKSI',\n    'input_type'                => 'Tietotyyppi',\n    'key'                       => 'Avainkenttä',\n    'model_class'               => 'Modellin luokkanimi',\n    'model_name'                => 'Modellin nimi',\n    'model_name_ph'             => 'esim. \\App\\User, oletuksena kokeillaan käyttää taulun nimeä',\n    'name_warning'              => 'Ole hyvä ja nimeä sarake ennen indeksin lisäämistä',\n    'no_composites_warning'     => 'Tällä taululla on komposiitti-indeksejä. Huomaathan että ne eivät ole tuettuja tällä hetkellä. Olethan varovainen muuttaessasi indeksejä.',\n    'null'                      => 'Null-arvo',\n    'optional_details'          => 'Vaihtoehtoiset lisätiedot',\n    'policy_class'              => 'Policyn luokkanimi',\n    'policy_name'               => 'Policyn nimi',\n    'policy_name_ph'            => 'esim. \\App\\Policies\\UserPolicy, jos tyhjä niin yritetään käyttää oletusta',\n    'primary'                   => 'PRIMÄÄRI',\n    'server_pagination'         => 'Palvelinpuolen sivutustoiminto',\n    'success_create_table'      => 'Taulu :table luotiin onnistuneesti',\n    'success_created_bread'     => 'Uusi BREAD lisätty onnistuneesti',\n    'success_delete_table'      => 'Taulu :table poistettiin onnistuneesti',\n    'success_remove_bread'      => 'Tietotyypin :datatype BREAD poistettiin onnistuneesti',\n    'success_update_bread'      => 'Tietotyypin :datatype BREADiä muokattiin onnistuneesti',\n    'success_update_table'      => 'Taulua :table muokattiin onnistuneesti',\n    'table_actions'             => 'Taulun toiminnot',\n    'table_columns'             => 'Taulun sarakkeet',\n    'table_has_index'           => 'Taululla on jo primääri-indeksi.',\n    'table_name'                => 'Taulun nimi',\n    'table_no_columns'          => 'Taululla ei ole sarakkeita...',\n    'type'                      => 'Tyyppi',\n    'type_not_supported'        => 'Tätä tyyppiä ei tueta',\n    'unique'                    => 'UNIIIKKI',\n    'unknown_type'              => 'Tuntematon tyyppi',\n    'update_table'              => 'Päivitä taulu',\n    'url_slug'                  => 'Sivupolun slugi (täytyy olla uniikki)',\n    'url_slug_ph'               => 'Sivupolun slugi (esim. kirjoitukset)',\n    'visibility'                => 'Näkyvyys',\n    'relationship'              => [\n        'relationship'         => 'Riippuvuussuhde',\n        'relationships'        => 'Riippuvuussuhteet',\n        'has_one'              => 'On yksi',\n        'has_many'             => 'On monia',\n        'belongs_to'           => 'Kuuluu yhdelle',\n        'belongs_to_many'      => 'Kuuluu monelle',\n        'which_column_from'    => 'Mikä sarake',\n        'is_used_to_reference' => 'on käytössä viittauksena',\n        'pivot_table'          => 'Pivot taulukko',\n        'selection_details'    => 'Valinnan lisätiedot',\n        'display_the'          => 'Näytä',\n        'store_the'            => 'Tallenna',\n        'easy_there'           => 'Varrohan siel, kapu',\n        'before_create'        => 'Sinun täytyy luoda ensin BREAD vuodaksesi lisätä riippuvuussuhteen. <br>Palaa sitten takaisin tämän BREADin muokkaukseen, niin voit lisätä riippuvuuden.<br> Kiitos.',\n        'cancel'               => 'Peru',\n        'add_new'              => 'Lisää uusi riippuvuus',\n        'open'                 => 'Avaa',\n        'close'                => 'Sulje',\n        'relationship_details' => 'Riippuvuuden tiedot',\n        'browse'               => 'Selaa',\n        'read'                 => 'Lue',\n        'edit'                 => 'Muokkaa',\n        'add'                  => 'Lisää',\n        'delete'               => 'Poista',\n        'create'               => 'Luo riippuvuussuhde',\n        'namespace'            => 'Modellin nimiavaruus (esim. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/fi/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Taulu ei sisällä tietoja',\n    'sInfo'           => 'Näytetään _START_ - _END_ yhteensä _TOTAL_ rivistä',\n    'sInfoEmpty'      => 'Näytetään 0 - 0 yhteensä 0 rivistä',\n    'sInfoFiltered'   => '(suodatettu kaikista _MAX_ rivistä)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Näytä _MENU_ rivit',\n    'sLoadingRecords' => 'Ladataan...',\n    'sProcessing'     => 'Prosessoidaan...',\n    'sSearch'         => 'Hae:',\n    'sZeroRecords'    => 'Yhtään osumaa ei löytynyt',\n    'oPaginate'       => [\n        'sFirst'    => 'Ensimmäinen',\n        'sLast'     => 'Viimeinen',\n        'sNext'     => 'Seuraava',\n        'sPrevious' => 'Edellinen',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': lajittele nousevassa järjestyksessä',\n        'sSortDescending' => ': lajittele laskevassa järjestyksessä',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/fi/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Viime viikko',\n    'last_year' => 'Viime vuosi',\n    'this_week' => 'Tämä viikko',\n    'this_year' => 'Tämä vuosi',\n];\n"
  },
  {
    "path": "publishable/lang/fi/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Sivu|Sivua',\n    'page_link_text' => 'Näytä kaikki sivut',\n    'page_text'      => 'Sinulla on :count :string tietokannassa. Klikkaa alta näyttääksesi kaikki sivut.',\n    'post'           => 'Kirjoitus|Kirjoitusta',\n    'post_link_text' => 'Näytä kaikki kirjoitukset',\n    'post_text'      => 'Sinulla on :count :string tietokannassa. Klikkaa alta näyttääksesi kaikki kirjoitukset.',\n    'user'           => 'Käyttäjä|Käyttäjää',\n    'user_link_text' => 'Näytä kaikki käyttäjät',\n    'user_text'      => 'Sinulla on :count :string tietokannassa. Klikkaa alta näyttääksesi kaikki käyttäjät.',\n];\n"
  },
  {
    "path": "publishable/lang/fi/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'  => 'Loimme sinulle juuri puuttuneen symlinkkauksen.',\n    'symlink_created_title' => 'Puuttunut tiedostovaraston symlinkkaus luotu',\n    'symlink_failed_text'   => 'Epäonnistuimme luodessa puuttunutta symlinkkiä sovelluksellesi. '.\n                                'Näyttää siltä että hostausalustasi ei tue sitä.',\n    'symlink_failed_title'   => 'Puuttuneen symlinkkauksen luonti epäonnistui',\n    'symlink_missing_button' => 'Korjaa asia',\n    'symlink_missing_text'   => 'Emme löytäneet tiedostovaraston symlinkkausta. '.\n                                'Tämä voi aiheuttaa ongelmia mediatiedostojen näyttämisen kanssa selaimessa.',\n    'symlink_missing_title' => 'Tiedostovaraston puuttuva symlinkkaus',\n];\n"
  },
  {
    "path": "publishable/lang/fi/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Jätä tyhjäksi jos et halua muuttaa',\n    'field_select_dd_relationship' => 'Varmistathan että lisäät tarpeellisen riippuvuustiedon metodiin :method luokassa :class.',\n    'type_checkbox'                => 'Valintaruutu',\n    'type_codeeditor'              => 'Koodieditori',\n    'type_file'                    => 'Tiedosto',\n    'type_image'                   => 'Kuva',\n    'type_radiobutton'             => 'Vaihtoehtonappi',\n    'type_richtextbox'             => 'Rikastekstieditori',\n    'type_selectdropdown'          => 'Alasvetolista',\n    'type_textarea'                => 'Tekstialue',\n    'type_textbox'                 => 'Tekstilaatikko',\n];\n"
  },
  {
    "path": "publishable/lang/fi/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Toiminto',\n    'actions'                => 'Toiminnot',\n    'add'                    => 'Lisää',\n    'add_folder'             => 'Luo kansio',\n    'add_new'                => 'Lisää uusi',\n    'all_done'               => 'Valmis',\n    'are_you_sure'           => 'Oletko varma',\n    'are_you_sure_delete'    => 'Haluatko varmasti poistaa',\n    'auto_increment'         => 'Korota automaattisesti',\n    'browse'                 => 'Selaa',\n    'builder'                => 'Rakentaja',\n    'bulk_delete'            => 'Poista kerralla useampi',\n    'bulk_delete_confirm'    => 'Kyllä, poista nämä',\n    'bulk_delete_nothing'    => 'Et ole valinnut mitään poistettavaksi',\n    'cancel'                 => 'Peru',\n    'choose_type'            => 'Valitse tyyppi',\n    'click_here'             => 'Klikkaa tästä',\n    'close'                  => 'Sulje',\n    'compass'                => 'Kompassi',\n    'created_at'             => 'Luotu',\n    'custom'                 => 'Räätälöity',\n    'dashboard'              => 'Kojelauta',\n    'database'               => 'Tietokanta',\n    'default'                => 'Oletusarvo',\n    'delete'                 => 'Poista',\n    'delete_confirm'         => 'Kyllä, poista tämä!',\n    'delete_question'        => 'Oletko varma että haluat poistaa tämän',\n    'delete_this_confirm'    => 'Kyllä, poista tämä',\n    'deselect_all'           => 'Peru kohteiden valinta',\n    'download'               => 'Lataa koneellesi',\n    'edit'                   => 'Muokkaa',\n    'email'                  => 'Sähköposti',\n    'error_deleting'         => 'Valitettavasti poistotoiminnon aikana sattui virhe',\n    'exception'              => 'Virhe',\n    'featured'               => 'Mainostettu',\n    'field_does_not_exist'   => 'Kenttää ei löytynyt',\n    'how_to_use'             => 'Käyttöopastus',\n    'index'                  => 'Järjestysnumero',\n    'internal_error'         => 'Palvelinvirhe',\n    'items'                  => 'kohde(tta)',\n    'keep_sidebar_open'      => 'Yarr! Pudottakaa ankkurit! (ja pidä tämä sivupalkki avoinna)',\n    'key'                    => 'Avainarvo',\n    'last_modified'          => 'Viimeksi muokattu',\n    'length'                 => 'Pituus',\n    'login'                  => 'Kirjaudu',\n    'media'                  => 'Multimedia',\n    'menu_builder'           => 'Valikonrakentaja',\n    'move'                   => 'Liikuta',\n    'name'                   => 'Nimi',\n    'new'                    => 'Uusi',\n    'no'                     => 'Ei',\n    'no_thanks'              => 'Ei kiitos',\n    'not_null'               => 'Ei Null-arvo',\n    'no_results'             => 'No results',\n    'options'                => 'Valinnat',\n    'password'               => 'Salasana',\n    'permissions'            => 'Käyttöoikeus',\n    'profile'                => 'Profiili',\n    'public_url'             => 'Julkinen verkko-osoite',\n    'read'                   => 'Lue',\n    'rename'                 => 'Muuta nimeä',\n    'required'               => 'Vaadittu',\n    'return_to_list'         => 'Palaa listaukseen',\n    'route'                  => 'Routtaus',\n    'save'                   => 'Tallenna',\n    'search'                 => 'Etsi',\n    'select_all'             => 'Valitse kaikki',\n    'select_group'           => 'Valitse ryhmä tai luo uusi',\n    'settings'               => 'Asetukset',\n    'showing_entries'        => 'Näytä kohteet :from - :to / :all|Näytetään kohteet :from - :to / :all',\n    'submit'                 => 'Tallenna',\n    'successfully_added_new' => 'Lisättiin onnistuneesti',\n    'successfully_deleted'   => 'Poistettiin onnistuneesti',\n    'successfully_updated'   => 'Muokattiin onnistuneesti',\n    'timestamp'              => 'Aikaleima',\n    'title'                  => 'Otsikko',\n    'type'                   => 'Tyyppi',\n    'unsigned'               => 'Positiivinen luku',\n    'unstick_sidebar'        => 'Irrota sivupalkki',\n    'update'                 => 'Päivitä',\n    'update_failed'          => 'Päivitys epäonnistui',\n    'upload'                 => 'Lähetä',\n    'url'                    => 'Verkko-osoite',\n    'view'                   => 'Näytä',\n    'viewing'                => 'Näytetään',\n    'yes'                    => 'Kyllä',\n    'yes_please'             => 'Kyllä kiitos',\n];\n"
  },
  {
    "path": "publishable/lang/fi/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Virheellinen JSON',\n    'invalid_message'   => 'Näyttää siltä että JSON muoto oli virheellinen.',\n    'valid'             => 'Kelpaava JSON',\n    'validation_errors' => 'Muototarkistuksen virheet',\n];\n"
  },
  {
    "path": "publishable/lang/fi/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Kirjaudutaan sisään',\n    'signin_below' => 'Kirjaudu sisään:',\n    'welcome'      => 'Tervetuloa Voyageriin. Tämä on se Laravelista puuttunut hallintapaneeli.',\n];\n"
  },
  {
    "path": "publishable/lang/fi/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Lisää kansio',\n    'audio_support'          => 'Selaimesi ei tue äänitiedostoelementtiä.',\n    'create_new_folder'      => 'Luo uusi kansio',\n    'delete_folder_question' => 'Kansion poistaminen tuhoaa myös kaikki sen sisältämät tiedostot ja kansiot',\n    'destination_folder'     => 'Kohdekansio',\n    'drag_drop_info'         => 'Raahaa ja tiputa tiedosto tai klikkaa alla lähettääksesi',\n    'error_already_exists'   => 'Tämä kansio sisältää jo samannimisen tiedoston/kansion.',\n    'error_creating_dir'     => 'Valitettavasti jotain meni pieleen kansiota luodessa. '.\n                                    'Olkaa hyvä ja tarkastakaa tiedostojärjestelmän käyttöoikeudet.',\n    'error_deleting_file' => 'Valitettavasti jotain meni pieleen tiedostoa poistettaessa. '.\n                                    'Olkaa hyvä ja tarkastakaa tiedostojärjestelmän käyttöoikeudet.',\n    'error_deleting_folder' => 'Valitettavasti jotain meni pieleen kansiota poistettaessa. '.\n                                    'Olkaa hyvä ja tarkastakaa tiedostojärjestelmän käyttöoikeudet.',\n    'error_may_exist' => 'Tiedosto tai kansio saattaa jo olemassa samalla nimellä. Ole hyvä ja valitse toinen nimi '.\n                                'tai poista/uudelleennimeä toinen tiedosto.',\n    'error_moving' => 'Valitettavasti tiedostoa/kansiota siirrossa on ongelmaa.'.\n                                    'Ole hyvä varmista että sinulla riittävät käyttöoikeudet.',\n    'error_uploading'       => 'Lähetys epäonnistui: Tuntematon virhe kohdattiin!',\n    'folder_exists_already' => 'Valitettavasti kyseinen kansio on jo olemassa. '.\n                                    'Ole hyvä ja poista kansio ensin jos haluat luoda sen uudestaan.',\n    'image_does_not_exist'  => 'Kuvaa ei löytynyt',\n    'image_removed'         => 'Kuva poistettiin',\n    'library'               => 'Mediakirjasto',\n    'loading'               => 'LADATAAN TIEDOSTOLISTAA',\n    'move_file_folder'      => 'Siirrä tiedosto/kansio',\n    'new_file_folder'       => 'Uuden tiedoston/kansio nimi',\n    'new_folder_name'       => 'Uuden kansion nimi',\n    'no_files_here'         => 'Ei tiedostoja.',\n    'no_files_in_folder'    => 'Kansio ei sisällä tiedostoja.',\n    'nothing_selected'      => 'Tiedosto tai kansio ei valittuna',\n    'rename_file_folder'    => 'Uudelleennimeä tiedosto/kansio',\n    'success_uploaded_file' => 'Tiedosto lisättiin onnistuneesti!',\n    'success_uploading'     => 'Kuva lisättiin onnistuneesti!',\n    'uploading_wrong_type'  => 'Lähetys epäonnistui: Tuntematon tiedostomuoto tai tiedostokoko liian suuri!',\n    'video_support'         => 'Selaimesi ei tue videoelementtiä.',\n    'crop'                  => 'Rajaa',\n    'crop_and_create'       => 'Rajaa & luo',\n    'crop_override_confirm' => 'Alkuperäinen kuvatiedosto ylikirjoitetaan, oletko varma?',\n    'crop_image'            => 'Rajaa kuvaa',\n    'success_crop_image'    => 'Kuva rajattu onnistuneesti',\n    'height'                => 'Korkeus: ',\n    'width'                 => 'Leveys: ',\n    'add_all_selected'      => 'Lisää kaikki valitut',\n];\n"
  },
  {
    "path": "publishable/lang/fi/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Värikoodi RGB tai hex (valinnainen)',\n    'color_ph'             => 'Värikoodi, esim. #ffffff tai rgb(255, 255, 255)',\n    'create_new_item'      => 'Lisää uusi valikkorivi',\n    'delete_item_confirm'  => 'Kyllä, poista tämä valikkorivi',\n    'delete_item_question' => 'Oletko varma että haluat poistaa tämän valikkorivin?',\n    'drag_drop_info'       => 'Raahaa ja tiputa valikkorivejä alla jos haluat muuttaa niiden järjestystä.',\n    'dynamic_route'        => 'Dynaaminen routtaus',\n    'edit_item'            => 'Muokkaa valikkoriviä',\n    'icon_class'           => 'Fontti-ikonin luokka valikkoriville (käytä ',\n    'icon_class2'          => 'Voyager Fonttiluokkaa</a>)',\n    'icon_class_ph'        => 'ikoniluokka (valinnainen)',\n    'item_route'           => 'Valikkorivin routtaus',\n    'item_title'           => 'Valikkorivin otsikko',\n    'link_type'            => 'Linkkityyppi',\n    'new_menu_item'        => 'Uusi valikkorivi',\n    'open_in'              => 'Avataan',\n    'open_new'             => 'Uudessa selainruudussa',\n    'open_same'            => 'Samassa selainruudussa',\n    'route_parameter'      => 'Routtausparametrit (jos tarpeen)',\n    'static_url'           => 'Staattinen verkko-osoite',\n    'successfully_created' => 'Uusi valikkorivi luotiin onnistuneesti.',\n    'successfully_deleted' => 'Valikkorivi poistettiin onnistuneesti.',\n    'successfully_updated' => 'Valikkoriviä muokattiin onnistuneesti.',\n    'updated_order'        => 'Valikon järjestystä muutettiin onnistuneesti.',\n    'url'                  => 'Valikkorivin verkko-osoite',\n    'usage_hint'           => 'Voit esittää valikon missä kohdassa tahansa sivustollasi kutsumalla|Voit esittää '.\n                                'tämän valikon missä kohdassa tahansa sivustollasi kutsumalla',\n];\n"
  },
  {
    "path": "publishable/lang/fi/post.php",
    "content": "<?php\n\nreturn [\n    'category'         => 'Kirjoituksen kategoria',\n    'content'          => 'Kirjoituksen sisältö',\n    'details'          => 'Kirjoituksen tiedot',\n    'excerpt'          => 'Katkelma <small>Lyhyt ote kirjoituksen sisällöstä</small>',\n    'image'            => 'Kirjoituksen kansikuva',\n    'meta_description' => 'Metakuvaus',\n    'meta_keywords'    => 'Meta-avainsanat',\n    'new'              => 'Luo uusi kirjoitus',\n    'seo_content'      => 'Hakukoneoptimoinnin sisältö',\n    'seo_title'        => 'Hakukoneoptimoinnin otsikko',\n    'slug'             => 'Sivupolun slugi',\n    'status'           => 'Kirjoituksen tila',\n    'status_draft'     => 'luonnos',\n    'status_pending'   => 'odottaa',\n    'status_published' => 'julkaistu',\n    'title'            => 'Kirjoituksen otsikko',\n    'title_sub'        => 'Kuvaava ootsikko kirjoituksellesi',\n    'update'           => 'Päivitä kirjoitusta',\n];\n"
  },
  {
    "path": "publishable/lang/fi/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => 'Profiilikuva',\n    'edit'          => 'Muokkaa profiiliani',\n    'edit_user'     => 'Muokkaa käyttäjää',\n    'password'      => 'Salasana',\n    'password_hint' => 'Jätä tyhjä jos et halua muuttaa',\n    'role'          => 'Rooli',\n    'user_role'     => 'Käyttäjän rooli',\n];\n"
  },
  {
    "path": "publishable/lang/fi/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Voit käyttää mitä tahansa asetusarvoa sivustollasi kutsumalla',\n    'save'                 => 'Tallenna asetusrivi',\n    'new'                  => 'Uusi asetusrivi',\n    'help_name'            => 'Asetuksen nimi, esim. Ylläpidon otsikko',\n    'help_key'             => 'Asetuksen avain, esim. yllapito_otsikko',\n    'help_option'          => '(vaihtoehtoinen, pätee vain tietyn tyyppisiin kenttiin kuten valintalista tai vaihtoehtonappi)',\n    'add_new'              => 'Lisää uusi asetusrivi',\n    'delete_question'      => 'Oletko varma että haluat poistaa asetusrivin :setting?',\n    'delete_confirm'       => 'Kyllä, poista asetusrivi',\n    'successfully_created' => 'Asetusrivi luotiin onnistuneesti',\n    'successfully_saved'   => 'Asetusrivi tallennettiin onnistuneesti',\n    'successfully_deleted' => 'Asetusrivi poistettiin onnistuneesti',\n    'already_at_top'       => 'Tämä on jo valmiiksi listan kärjessä',\n    'already_at_bottom'    => 'Tämä on jo valmiiksi listan pohjalla',\n    'key_already_exists'   => 'Avainluku nimeltään :key on jo olemassa',\n    'moved_order_up'       => 'Siirrettiin asetusrivin :name järjestystä ylöspäin',\n    'moved_order_down'     => 'Siirrettiin asetusrivin :name järjestystä alaspäin',\n    'successfully_removed' => 'Poistettiin :name arvo onnistuneesti',\n    'group_general'        => 'Yleinen',\n    'group_admin'          => 'Hallinta',\n    'group_site'           => 'Sivusto',\n    'group'                => 'Asetusryhmä',\n    'help_group'           => 'Asetusryhmä johon tämä asetus on lisättynä',\n];\n"
  },
  {
    "path": "publishable/lang/fi/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Tehtiin <i class=\"voyager-heart\"></i> kanssa',\n    'footer_copyright2' => 'Tehtiin rommin ja lisärommin kanssa',\n];\n"
  },
  {
    "path": "publishable/lang/fr/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'Par pages vues',\n    'by_sessions'            => 'Par sessions',\n    'by_users'               => 'Par utilisateurs',\n    'no_client_id'           => 'Pour afficher Google Analytics, vous devrez obtenir un identifiant et l\\'ajouter à vos paramètres clé : <code>google_analytics_client_id</code>. Obtenez une clé dans l\\'espace développeur Google :',\n    'set_view'               => 'Sélectionner une vue',\n    'this_vs_last_week'      => 'Cette semaine p/r à la semaine dernière',\n    'this_vs_last_year'      => 'Cette année p/r à l\\'année dernière',\n    'top_browsers'           => 'Top navigateurs',\n    'top_countries'          => 'Top pays',\n    'various_visualizations' => 'Visualisations diverses',\n];\n"
  },
  {
    "path": "publishable/lang/fr/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Ajouter le BREAD à cette table',\n    'bread_crud_actions'     => 'Actions du BREAD/CRUD',\n    'bread_info'             => 'Information du BREAD',\n    'controller_name_hint'   => 'exemple : PageController. Si laissé vide, utilisera le contrôleur BREAD',\n    'create_bread_for_table' => 'Créer un BREAD pour la table :table',\n    'default_search_key'     => 'Champ de recherche côté serveur par défaut',\n    'default_search_key_ph'  => 'Le champ sera pré-sélectionné pour la recherche côté serveur',\n    'delete_bread'           => 'Supprimer le BREAD',\n    'delete_bread_conf'      => 'Oui, supprimer le BREAD',\n    'delete_bread_quest'     => 'Êtes-vous sûr de vouloir supprimer le BREAD de la table : :table ?',\n    'edit_bread'             => 'Editer le BREAD',\n    'edit_bread_for_table'   => 'Editer le BREAD de la table : :table',\n    'error_creating_bread'   => 'Désolé, il semble qu\\'il y ait eu un problème pour créer ce BREAD',\n    'error_removing_bread'   => 'Désolé, il semble qu\\'il y ait eu un problème pour supprimer ce BREAD',\n    'error_updating_bread'   => 'Désolé, il semble qu\\'il y ait eu un problème pour mettre à jour ce BREAD',\n    'error_tagging'          => 'Désolé, il semble qu\\'il y aie eu un problème lors de la création de ce champ. Veuillez s\\'il vous plait vérifier que votre table possède des valeurs par défaut pour les autres champs.',\n    'success_created_bread'  => 'Nouveau BREAD créé avec succès',\n    'success_remove_bread'   => ':datatype BREAD supprimé avec succès',\n    'success_update_bread'   => ':datatype BREAD mis à jour avec succès',\n    'controller_name'        => 'Nom du controleur',\n    'create_migration'       => 'Créer une migration pour cette table ?',\n    'description'            => 'Description',\n    'display_name'           => 'Nom affiché',\n    'display_name_plural'    => 'Nom affiché (au pluriel)',\n    'display_name_singular'  => 'Nom affiché (au singulier)',\n    'edit_rows'              => 'Modifier les lignes pour la table :table ci-dessous',\n    'generate_permissions'   => 'Générer les permissions',\n    'icon_class'             => 'Icône à utiliser pour cette table',\n    'icon_hint'              => 'Icône (optionnel), utiliser une',\n    'icon_hint2'             => 'police d\\'icônes de Voyager',\n    'model_class'            => 'Nom de la classe du modèle (model)',\n    'model_name'             => 'Nom du modèle (model)',\n    'model_name_ph'          => 'exemple : \\App\\User. Si laissé vide, essayera d\\'utiliser le nom de la table',\n    'order'                  => 'Ordre',\n    'order_column'           => 'Colonne d\\'ordre',\n    'order_column_ph'        => 'La colonne qui défini l\\'ordre d\\'affichage',\n    'order_direction'        => 'Ordre de direction',\n    'order_ident_column'     => 'Colonne d\\'affichage d\\'ordre',\n    'order_ident_column_ph'  => 'La colonne qui est affichée sur la page d\\'ordre',\n    'ordering_not_set'       => 'Vous devez définir l\\'ordre en premier',\n    'policy_class'           => 'Nom de la classe Policy',\n    'policy_name'            => 'Nom de la Policy',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, si laissée vide, va tenter d\\'utiliser la valeur par défaut',\n    'server_pagination'      => 'Pagination côté serveur',\n    'scope'                  => 'Portée',\n    'soft_deletes_on'        => 'Montrer supprimés',\n    'soft_deletes_off'       => 'Cacher supprimés',\n    'updated_order'          => 'Ordre mis à jour avec succès',\n    'url_slug'               => 'URL slug (doit être unique)',\n    'url_slug_ph'            => 'URL slug (exemple : articles)',\n];\n"
  },
  {
    "path": "publishable/lang/fr/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Bienvenue sur Voyager Compass. Chaque nouvelle application a besoin d\\'une boussole pour se diriger dans la bonne direction.\n    Dans cette section, vous trouverez plusieurs ressources et tâches administratives afin de vous guider lors de la création de votre application',\n    'links'         => [\n        'title'                 => 'Liens',\n        'documentation'         => 'Documentation',\n        'voyager_homepage'      => 'Voyager Homepage',\n    ],\n    'commands'      => [\n        'title'                 => 'Commandes',\n        'text'                  => 'Lancer les Commandes artisan depuis Voyager.',\n        'clear_output'          => 'Vider la sortie',\n        'command_output'        => 'Sortie des commandes Artisan',\n        'additional_args'       => 'Arguments additionnels ?',\n        'run_command'           => 'Lancer la commande',\n    ],\n    'resources'     => [\n        'title'                 => 'Ressources',\n        'text'                  => 'Ressources Voyager pour vous aider a trouver certaines choses plus vite.',\n    ],\n    'logs'          => [\n        'title'                 => 'Logs',\n        'text'                  => 'Les logs de votre application',\n        'file_too_big'          => 'Fichier de log >50M, veuillez le télécharger.',\n        'level'                 => 'Niveau',\n        'context'               => 'Contexte',\n        'date'                  => 'Date',\n        'content'               => 'Contenu',\n        'download_file'         => 'Télécharger le fichier',\n        'delete_file'           => 'Supprimer le fichier',\n        'delete_all_files'      => 'Supprimer tous les fichiers',\n        'delete_success'        => 'Fichier log supprimé avec succès:',\n        'delete_all_success'    => 'Tous les fichiers de log ont été supprimés avec succès',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Police de caractère',\n        'font_class'            => 'Classe de correspondance à la police Voyager',\n        'font_character'        => 'Caractère de correspondance à la police Voyager',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/fr/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Ajouter une nouvelle colonne',\n    'add_softdeletes'           => 'Ajouter la suppression en cascade (soft deletes)',\n    'add_timestamps'            => 'Ajouter les Timestamps',\n    'already_exists'            => 'existe déjà',\n    'already_exists_table'      => 'La table :table existe déjà',\n    'bread_crud_actions'        => 'Actions du BREAD/CRUD',\n    'bread_info'                => 'Information du BREAD',\n    'browse_bread'              => 'Parcourir BREAD',\n    'column'                    => 'Colonne',\n    'composite_warning'         => 'Avertissement : cette colonne fait partie d\\'un indice composite (composite index)',\n    'create_model_table'        => 'Créer un modèle pour cette table ?',\n    'create_new_table'          => 'Créer une nouvelle table',\n    'create_your_new_table'     => 'Créez votre nouvelle table',\n    'default'                   => 'Par défaut',\n    'delete_bread_before_table' => 'Assurez-vous de supprimer le BREAD avant de supprimer sa table.',\n    'delete_table_confirm'      => 'Oui, supprimer cette table',\n    'delete_table_question'     => 'Êtes-vous sûr de vouloir supprimer la table : :table ?',\n    'edit_table'                => 'Editer la table :table ci-dessous',\n    'edit_table_not_exist'      => 'La table que vous souhaitez éditer n\\'existe pas',\n    'editing_table'             => 'Edition de la table :table',\n    'extra'                     => 'Extra',\n    'field'                     => 'Champ',\n    'field_safe_failed'         => 'Échec de l\\'enregistrement du champ : :field. Nous sommes revenu en arrière !',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Type d\\'entrée',\n    'key'                       => 'Clé',\n    'name_warning'              => 'Veuillez nommer la colonne avant d\\'ajouter un index',\n    'no_composites_warning'     => 'Cette table comporte des index composites. Notez qu\\'ils ne sont pas pris en charge pour le moment. Faites attention lorsque vous essayez d\\'ajouter/supprimer des index.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Détails facultatifs',\n    'policy_class'              => 'Nom de la classe de stratégie (Policy)',\n    'policy_name'               => 'Nom de la stratégie (Policy)',\n    'policy_name_ph'            => 'ex. \\App\\Policies\\UserPolicy. Si vide, essaiera la valeur par défaut',\n    'primary'                   => 'PRIMARY',\n    'server_pagination'         => 'Pagination côté serveur',\n    'success_create_table'      => 'Table : :table créée avec succès',\n    'success_created_bread'     => 'Nouveau BREAD créé avec succès',\n    'success_delete_table'      => 'Table : :table supprimée avec succès',\n    'success_remove_bread'      => ':datatype BREAD supprimé avec succès',\n    'success_update_bread'      => ':datatype BREAD mis à jour avec succès',\n    'success_update_table'      => 'Table :table mise à jour avec succès',\n    'table_actions'             => 'Actions sur le tableau',\n    'table_columns'             => 'Colonnes de table',\n    'table_has_index'           => 'La table comporte déjà un index primaire.',\n    'table_name'                => 'Nom de la table',\n    'table_no_columns'          => 'La table n\\'a pas de colonnes...',\n    'type'                      => 'Type',\n    'type_not_supported'        => 'Type non supporté',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Type inconnu',\n    'update_table'              => 'Mettre la table à jour',\n    'url_slug'                  => 'URL slug (doit être unique)',\n    'url_slug_ph'               => 'URL slug (exemple : articles)',\n    'visibility'                => 'Visibilité',\n    'relationship'              => [\n        'relationship'         => 'Relation',\n        'relationships'        => 'Relations',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => 'Quelle colonne de',\n        'is_used_to_reference' => 'est utilisée pour référencer la table',\n        'pivot_table'          => 'Tableau croisé dynamique (Pivot Table)',\n        'selection_details'    => 'Détails de la sélection',\n        'display_the'          => 'Afficher le',\n        'store_the'            => 'Enregistrer le',\n        'allow_tagging'        => 'Permettre l\\'étiquetage',\n        'easy_there'           => 'Du calme, Capitaine !',\n        'before_create'        => 'Veuillez créer le BREAD avant d\\'ajouter une nouvelle relation.',\n        'cancel'               => 'Annuler',\n        'add_new'              => 'Ajouter une relation',\n        'open'                 => 'Ouvrir',\n        'close'                => 'Fermer',\n        'relationship_details' => 'Détails de la relation',\n        'browse'               => 'Parcourir',\n        'read'                 => 'Lire',\n        'edit'                 => 'Editer',\n        'add'                  => 'Ajouter',\n        'delete'               => 'Supprimer',\n        'create'               => 'Créer une relation',\n        'namespace'            => 'Espace de nom du modèle (Namespace. Ex. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/fr/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Aucune donnée disponible dans le tableau',\n    'sInfo'           => 'Affichage de l\\'élément _START_ à _END_ sur _TOTAL_ éléments',\n    'sInfoEmpty'      => 'Affichage de l\\'élément 0 à 0 sur 0 élément',\n    'sInfoFiltered'   => '(filtré à partir de _MAX_ entrées totales)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ' ',\n    'sLengthMenu'     => 'Afficher _MENU_ éléments',\n    'sLoadingRecords' => 'Chargement...',\n    'sProcessing'     => 'Traitement...',\n    'sSearch'         => 'Rechercher :',\n    'sZeroRecords'    => 'Aucun enregistrement correspondant trouvé',\n    'oPaginate'       => [\n        'sFirst'    => 'Premier',\n        'sLast'     => 'Dernier',\n        'sNext'     => 'Suivant',\n        'sPrevious' => 'Précédent',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': activer pour trier la colonne par ordre croissant',\n        'sSortDescending' => ': activer pour trier la colonne par ordre décroissant',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/fr/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'La semaine dernière',\n    'last_year' => 'L\\'année dernière',\n    'this_week' => 'Cette semaine',\n    'this_year' => 'Cette année',\n];\n"
  },
  {
    "path": "publishable/lang/fr/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Page|Pages',\n    'page_link_text' => 'Voir toutes les pages',\n    'page_text'      => 'Vous avez :count :string enregistrées. Cliquez sur le bouton ci-dessous pour afficher toutes les pages.',\n    'post'           => 'Article|Articles',\n    'post_link_text' => 'Voir tous les articles',\n    'post_text'      => 'Vous avez :count :string enregistrés. Cliquez sur le bouton ci-dessous pour afficher tous les articles.',\n    'user'           => 'Utilisateur|Utilisateurs',\n    'user_link_text' => 'Voir tous les utilisateurs',\n    'user_text'      => 'Vous avez :count :string enregistrés. Cliquez sur le bouton ci-dessous pour afficher tous les utilisateurs.',\n];\n"
  },
  {
    "path": "publishable/lang/fr/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Nous avons créé le lien symbolique manquant pour vous.',\n    'symlink_created_title'  => 'Le lien symbolique de stockage manquant a été créé',\n    'symlink_failed_text'    => 'Nous n\\'avons pas pu générer le lien symbolique manquant pour votre application. Il semble que votre hébergeur ne supporte pas cette fonction.',\n    'symlink_failed_title'   => 'Impossible de créer un lien symbolique de stockage manquant',\n    'symlink_missing_button' => 'Réparer',\n    'symlink_missing_text'   => 'Nous n\\'avons pu trouver le lien symbolique de stockage. Cela pourrait causer des problèmes de chargement des fichiers multimédias.',\n    'symlink_missing_title'  => 'Le lien symbolique de stockage est manquant',\n];\n"
  },
  {
    "path": "publishable/lang/fr/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Laissez vide pour garder le même',\n    'field_select_dd_relationship' => 'Assurez-vous de configurer la relation appropriée dans la méthode :method de la classe :class.',\n    'type_checkbox'                => 'Case à cocher',\n    'type_codeeditor'              => 'Editeur de code',\n    'type_file'                    => 'Fichier',\n    'type_image'                   => 'Image',\n    'type_radiobutton'             => 'Bouton radio',\n    'type_richtextbox'             => 'Champ texte enrichi',\n    'type_selectdropdown'          => 'Menu déroulant',\n    'type_textarea'                => 'Zone de texte',\n    'type_textbox'                 => 'Champ texte',\n];\n"
  },
  {
    "path": "publishable/lang/fr/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Action',\n    'actions'                => 'Actions',\n    'add'                    => 'Ajouter',\n    'add_folder'             => 'Ajouter un dossier',\n    'add_new'                => 'Ajouter nouveau',\n    'all_done'               => 'Terminé',\n    'are_you_sure'           => 'Etes-vous sûr',\n    'are_you_sure_delete'    => 'Etes-vous sûr de vouloir supprimer',\n    'ascending'              => 'Ascendant',\n    'auto_increment'         => 'Incrémentation automatique',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Naviguer',\n    'builder'                => 'Constructeur',\n    'bulk_delete'            => 'Supprimer la sélection',\n    'bulk_delete_confirm'    => 'Oui, supprimer ces',\n    'bulk_delete_nothing'    => 'Vous n\\'avez sélectionné aucun élément à supprimer',\n    'cancel'                 => 'Annuler',\n    'choose_type'            => 'Choisir le type',\n    'click_here'             => 'Cliquez ici',\n    'close'                  => 'Fermer',\n    'compass'                => 'Boussole',\n    'created_at'             => 'Créé le',\n    'custom'                 => 'Personnaliser',\n    'dashboard'              => 'Tableau de bord',\n    'database'               => 'Base de données',\n    'default'                => 'Par défaut',\n    'delete'                 => 'Supprimer',\n    'delete_confirm'         => 'Oui, supprimer !',\n    'delete_question'        => 'Êtes-vous sûr de vouloir supprimer',\n    'delete_this_confirm'    => 'Oui, le supprimer',\n    'descending'             => 'Descendant',\n    'deselect_all'           => 'Tout désélectionner',\n    'download'               => 'Télécharger',\n    'drag_drop_info'         => 'Glissez/déposez les objets ci-dessous pour les réarranger.',\n    'edit'                   => 'Editer',\n    'email'                  => 'Adresse email',\n    'error_deleting'         => 'Désolé, il semble qu\\'il y ait eu un problème de suppression',\n    'error_restoring'        => 'Désolé, il semble qu\\'il y ait eu un problème de restauration',\n    'exception'              => 'Exception',\n    'featured'               => 'Mis en avant',\n    'field_does_not_exist'   => 'Le champ n\\'existe pas',\n    'home'                   => 'Accueil',\n    'how_to_use'             => 'Comment utiliser',\n    'index'                  => 'Index',\n    'internal_error'         => 'Erreur interne',\n    'items'                  => 'élément(s)',\n    'keep_sidebar_open'      => 'Lâchez l\\'ancre ! (gardez la barre latérale ouverte)',\n    'key'                    => 'Clé',\n    'last_modified'          => 'Dernière modification',\n    'length'                 => 'longueur',\n    'locale'                 => 'Langue',\n    'login'                  => 'S\\'identifier',\n    'logout'                 => 'Déconnexion',\n    'media'                  => 'Média',\n    'menu_builder'           => 'Constructeur de menu',\n    'mimetype_not_allowed'   => 'Ce type de fichier n\\'est pas autorisé',\n    'move'                   => 'Déplacer',\n    'name'                   => 'Nom',\n    'new'                    => 'Nouveau',\n    'no'                     => 'Non',\n    'no_thanks'              => 'Non merci',\n    'none'                   => 'Aucun',\n    'not_null'               => 'Pas nul',\n    'no_results'             => 'Pas de résultats.',\n    'open'                   => 'Ouvrir',\n    'options'                => 'Options',\n    'password'               => 'Mot de passe',\n    'permissions'            => 'Permissions',\n    'profile'                => 'Profil',\n    'public_url'             => 'URL publique',\n    'read'                   => 'Lire',\n    'rename'                 => 'renommer',\n    'remember_me'            => 'Se souvenir de moi',\n    'required'               => 'Obligatoire',\n    'return_to_list'         => 'Retourner à la liste',\n    'route'                  => 'Route',\n    'save'                   => 'Enregistrer',\n    'search'                 => 'Chercher',\n    'select_all'             => 'Tout sélectionner',\n    'select_group'           => 'Sélectionner un groupe ou en créer un nouveau',\n    'settings'               => 'Paramètres',\n    'showing_entries'        => 'Affichage :from à :to de :all entrées|Affichage :from à :to de :all entrées',\n    'submit'                 => 'Soumettre',\n    'successfully_added_new' => 'Ajouté avec succès',\n    'successfully_deleted'   => 'Supprimé avec succès',\n    'successfully_restored'  => 'Restauré avec succès',\n    'successfully_updated'   => 'Mis à jour avec succès',\n    'successfully_created'   => 'Créé avec succès',\n    'sweet_success'          => 'Grand succès !',\n    'timestamp'              => 'Horodatage',\n    'title'                  => 'Titre',\n    'type'                   => 'Type',\n    'restore'                => 'Restore',\n    'unsigned'               => 'Non signé',\n    'unstick_sidebar'        => 'Détacher la barre latérale',\n    'update'                 => 'Mise à jour',\n    'update_failed'          => 'Échec de la mise à jour',\n    'updated_order'          => 'Ordre mis à jour',\n    'upload'                 => 'Télécharger',\n    'url'                    => 'URL',\n    'view'                   => 'Vue',\n    'viewing'                => 'Affichage',\n    'whoopsie'               => 'Oups !',\n    'yes'                    => 'Oui',\n    'yes_please'             => 'Oui SVP',\n];\n"
  },
  {
    "path": "publishable/lang/fr/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Json invalide',\n    'invalid_message'   => 'Il semble que votre JSON soit invalide.',\n    'valid'             => 'Json valide',\n    'validation_errors' => 'Erreurs de validation',\n];\n"
  },
  {
    "path": "publishable/lang/fr/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Se connecter',\n    'signin_below' => 'Connectez-vous ci-dessous :',\n    'welcome'      => 'Bienvenue dans Voyager, le panneau d\\'administration qui manquait à Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/fr/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Ajouter un dossier',\n    'audio_support'          => 'Votre navigateur ne supporte pas l\\'élément audio.',\n    'create_new_folder'      => 'Créer un nouveau dossier',\n    'delete_folder_question' => 'La suppression d\\'un dossier supprime tout son contenu !',\n    'delete_question'        => 'Voulez-vous vraiment supprimer le(s) fichier(s) suivant(s) ?',\n    'destination_folder'     => 'Dossier de destination',\n    'drag_drop_info'         => 'Glissez/déposez des fichiers ou cliquez ci-dessous pour réarranger',\n    'error_already_exists'   => 'Désolé, il existe déjà un fichier/dossier avec ce nom dans ce dossier.',\n    'error_creating_dir'     => 'Désolé, quelque chose n\\'a pas fonctionné lors de la création du dossier, veuillez vérifier les permissions',\n    'error_deleting_file'    => 'Désolé, quelque chose n\\'a pas fonctionné lors de la suppression du fichier, veuillez vérifier les permissions',\n    'error_deleting_folder'  => 'Désolé, quelque chose n\\'a pas fonctionné lors de la suppression du dossier, veuillez vérifier les permissions',\n    'error_may_exist'        => 'Un fichier ou un dossier avec ce nom existe déjà. Choisissez un autre nom ou supprimez le fichier/dossier existant.',\n    'error_moving'           => 'Désolé, il y a un problème pour déplacer ce fichier/dossier, veuillez vérifier les permissions',\n    'error_renaming_ext'     => 'L\\'extension du fichier ne peut être modifiée !',\n    'error_uploading'        => 'Échec du téléchargement : une erreur inconnue s\\'est produite !',\n    'files'                  => '1 fichier|:count fichiers',\n    'files_more'             => 'Et :count de plus',\n    'file_does_not_exist'    => 'Le fichier n\\'existe pas',\n    'file_removed'           => 'Fichier supprimé',\n    'files_selected'         => 'fichiers/dossier sélectionné',\n    'folder_exists_already'  => 'Désolé, ce dossier existe déjà. Supprimez-le pour le récréer ou choisissez un autre nom',\n    'image_does_not_exist'   => 'L\\'image n\\'existe pas',\n    'image_removed'          => 'Image supprimée',\n    'library'                => 'Médiathèque',\n    'loading'                => 'CHARGEMENT DES FICHIERS MULTIMEDIA',\n    'max_files_select'       => 'Vous ne pouvez sélectionner qu\\'un fichier|Vous ne pouvez sélectionner qu\\'un maximum de :count fichiers',\n    'min_files_select'       => 'Vous devez sélectionner au moins un fichier|Vous devez sélectionner au moins :count fichiers',\n    'move_file_folder'       => 'Déplacer fichier/dossier',\n    'new_file_folder'        => 'Nouveau nom de fichier/dossier',\n    'new_folder_name'        => 'Nouveau nom de dossier',\n    'no_files_here'          => 'Nouveau fichier ici.',\n    'no_files_in_folder'     => 'Il n\\'y a pas de fichier dans ce dossier.',\n    'nothing_selected'       => 'Aucun fichier ou dossier sélectionné',\n    'rename_file_folder'     => 'renommer le fichier/dossier',\n    'success_uploaded_file'  => 'Téléchargement du fichier réussi !',\n    'success_uploading'      => 'Image téléchargée avec succès !',\n    'success_moved'          => 'Fichier/dossier déplacé avec succès',\n    'success_renamed'        => 'Fichier/dossier renommé avec succès',\n    'uploading_wrong_type'   => 'Échec du téléchargement : type de fichier non pris en charge ou trop volumineux',\n    'crop'                   => 'Rogner',\n    'crop_and_create'        => 'Rogner et créer',\n    'crop_override_confirm'  => 'Cela remplacera l\\'image originale, êtes-vous sûr ?',\n    'crop_image'             => 'Rogner l\\image',\n    'success_crop_image'     => 'L\\'image a bien été rognée',\n    'height'                 => 'Hauteur : ',\n    'title'                  => 'Titre',\n    'type'                   => 'Type',\n    'size'                   => 'Taille',\n    'public_url'             => 'URL publique',\n    'last_modified'          => 'Dernière modification',\n    'browser_video_support'  => 'Votre navigateur ne supporte pas la balise vidéo.',\n    'browser_audio_support'  => 'Votre navigateur ne supporte pas la balise audio.',\n    'width'                  => 'Largeur : ',\n    'add_all_selected'       => 'Ajouter tous les sélectionnés',\n];\n"
  },
  {
    "path": "publishable/lang/fr/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Couleur en RVB ou hexadécimal (optionnel)',\n    'color_ph'             => 'Couleur (ex. #ffffff ou rgb(255, 255, 255)',\n    'create_new_item'      => 'Créer un nouvel élément de menu',\n    'delete_item_confirm'  => 'Oui, supprimez cet élément de menu',\n    'delete_item_question' => 'Êtes-vous sûr de vouloir supprimer cet élément de menu ?',\n    'drag_drop_info'       => 'Glissez/déposez les éléments du menu ci-dessous pour les réarranger.',\n    'dynamic_route'        => 'Route dynamique',\n    'edit_item'            => 'Editer l\\'élément du menu',\n    'icon_class'           => 'Icône pour l\\'élément de menu (utilisez la ',\n    'icon_class2'          => 'police d\\'icône Voyager</a>)',\n    'icon_class_ph'        => 'Classe d\\'icône (optionnel)',\n    'item_route'           => 'Route pour l\\'élément de menu',\n    'item_title'           => 'Titre pour l\\'élément de menu',\n    'link_type'            => 'Type de lien',\n    'new_menu_item'        => 'Nouvel élément de menu',\n    'open_in'              => 'Ouvrir dans',\n    'open_new'             => 'Nouvel onglet/fenêtre',\n    'open_same'            => 'Même onglet/fenêtre',\n    'route_parameter'      => 'Paramètres de route (le cas échéant)',\n    'static_url'           => 'URL statique',\n    'successfully_created' => 'Nouvel élément de menu créé avec succès.',\n    'successfully_deleted' => 'Elément de menu supprimé avec succès.',\n    'successfully_updated' => 'Elément de menu édité avec succès.',\n    'updated_order'        => 'Elément de menu réordonné avec succès.',\n    'url'                  => 'URL pour l\\'élément de menu',\n    'usage_hint'           => 'Vous pouvez afficher un menu n\\'importe où sur le site en appelant|Vous pouvez afficher ce menu n\\'importe où sur le site en appelant',\n];\n"
  },
  {
    "path": "publishable/lang/fr/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Champs additionnels',\n    'category'         => 'Catégorie de l\\'article',\n    'content'          => 'Contenu de l\\'article',\n    'details'          => 'Détails de l\\'article',\n    'excerpt'          => 'Extrait <small>courte description de l\\'article</small>',\n    'image'            => 'Image de l\\'article',\n    'meta_description' => 'Meta description',\n    'meta_keywords'    => 'Meta mots clés',\n    'new'              => 'Créer un nouvel article',\n    'seo_content'      => 'Contenu SEO',\n    'seo_title'        => 'Titre SEO',\n    'slug'             => 'URL slug',\n    'status'           => 'Statut de l\\'article',\n    'status_draft'     => 'brouillon',\n    'status_pending'   => 'en attente',\n    'status_published' => 'publié',\n    'title'            => 'Titre de l\\'article',\n    'title_sub'        => 'Le titre de votre article',\n    'update'           => 'Mettre à jour l\\'article',\n];\n"
  },
  {
    "path": "publishable/lang/fr/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'          => 'Avatar',\n    'edit'            => 'Editer mon profil',\n    'edit_user'       => 'Editer l\\'utilisateur',\n    'password'        => 'Mot de passe',\n    'password_hint'   => 'Laissez vide pour garder le même',\n    'role'            => 'Rôle',\n    'roles'           => 'Rôles',\n    'role_default'    => 'Rôle par défaut',\n    'roles_additional'=> 'Rôles additionnels',\n    'user_role'       => 'Rôle utilisateur',\n];\n"
  },
  {
    "path": "publishable/lang/fr/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Auteur',\n        'avatar'           => 'Avatar',\n        'body'             => 'Corps',\n        'category'         => 'Catégorie',\n        'created_at'       => 'Créé le',\n        'display_name'     => 'Nom d\\'affichage',\n        'email'            => 'Email',\n        'excerpt'          => 'Extrait',\n        'featured'         => 'Mis en avant',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Description',\n        'meta_keywords'    => 'Meta Mots-clés',\n        'name'             => 'Nom',\n        'order'            => 'Ordre',\n        'page_image'       => 'Image de la page',\n        'parent'           => 'Parent',\n        'password'         => 'Mot de passe',\n        'post_image'       => 'Image de l\\'article',\n        'remember_token'   => 'Token de rappel',\n        'role'             => 'Rôle',\n        'seo_title'        => 'Titre SEO',\n        'slug'             => 'Slug',\n        'status'           => 'Statut',\n        'title'            => 'Titre',\n        'updated_at'       => 'Mis à jour le',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Catégorie',\n            'plural'   => 'Catégories',\n        ],\n        'menu'     => [\n            'singular' => 'Menu',\n            'plural'   => 'Menus',\n        ],\n        'page'     => [\n            'singular' => 'Page',\n            'plural'   => 'Pages',\n        ],\n        'post'     => [\n            'singular' => 'Post',\n            'plural'   => 'Posts',\n        ],\n        'role'     => [\n            'singular' => 'Rôle',\n            'plural'   => 'Rôles',\n        ],\n        'user'     => [\n            'singular' => 'Utilisateur',\n            'plural'   => 'Utilisateurs',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Catégories',\n        'compass'      => null,\n        'dashboard'    => 'Tableau de bord',\n        'database'     => 'Base de données',\n        'media'        => 'Médiathèque',\n        'menu_builder' => 'Créateur de menus',\n        'pages'        => 'Pages',\n        'posts'        => 'Posts',\n        'roles'        => 'Rôles',\n        'settings'     => 'Paramètres',\n        'tools'        => 'Outils',\n        'users'        => 'Utilisateurs',\n    ],\n    'roles'      => [\n        'admin' => 'Administrateur',\n        'user'  => 'Utilisateur standard',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Image de fond de l\\'espace admin',\n            'description'                => 'Description de l\\'espace admin',\n            'description_value'          => 'Bienvenue dans Voyager, le panneau d\\'administration qui manquait à Laravel.',\n            'google_analytics_client_id' => 'Google Analytics ID Client (Utilisé pour le panneau d\\'administration)',\n            'icon_image'                 => 'Icône de l\\'espace admin',\n            'loader'                     => 'Chargement de l\\'espace admin',\n            'title'                      => 'Titre de l\\'espace admin',\n        ],\n        'site'  => [\n            'description'                  => 'Description du site',\n            'google_analytics_tracking_id' => 'Google Analytics ID de Tracking',\n            'logo'                         => 'Logo du site',\n            'title'                        => 'Titre du site',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/fr/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Vous pouvez obtenir la valeur de chaque paramètre n\\'importe où sur votre site en appelant',\n    'save'                 => 'Enregistrer les paramètres',\n    'new'                  => 'Nouveau paramètre',\n    'help_name'            => 'Nom du paramètre, exemple : Titre de l\\'espace d\\'administration',\n    'help_key'             => 'Clé du paramètre, exemple : titre_admin',\n    'help_option'          => '(optionnel. S\\'applique uniquement à certains types, comme un menu déroulant ou un bouton radio)',\n    'add_new'              => 'Ajouter un nouveau paramètre',\n    'delete_question'      => 'Êtes-vous sûr de vouloir supprimer le paramètre : :setting ?',\n    'delete_confirm'       => 'Oui, supprimer ce paramètre',\n    'successfully_created' => 'Paramètres créés avec succès',\n    'successfully_saved'   => 'Paramètres enregistrés avec succès',\n    'successfully_deleted' => 'Paramètres supprimés avec succès',\n    'already_at_top'       => 'Déjà en haut de la liste',\n    'already_at_bottom'    => 'Déjà en bas de la liste',\n    'key_already_exists'   => 'La clé :key existe déjà',\n    'moved_order_up'       => 'Trier le paramètre :name par ordre croissant',\n    'moved_order_down'     => 'Trier le paramètre :name par ordre décroissant',\n    'successfully_removed' => 'Valeur :name supprimée avec succès',\n    'group_general'        => 'Général',\n    'group_admin'          => 'Administrateur',\n    'group_site'           => 'Site',\n    'group'                => 'Groupe',\n    'help_group'           => 'Groupe ce paramètre est affecté à',\n];\n"
  },
  {
    "path": "publishable/lang/fr/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Fait avec <i class=\"voyager-heart\"></i> par',\n    'footer_copyright2' => 'Fait avec du rhum et encore plus de rhum',\n];\n"
  },
  {
    "path": "publishable/lang/gl/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'Por páxina',\n    'by_sessions'            => 'Por sesións',\n    'by_users'               => 'Por usuarios',\n    'no_client_id'           => 'Para ver os análisis, necesitará obter unha ID de cliente de Google Analytics e engadila á súa configuración para a clave <code>google_analytics_client_id</code>. Obteña a súa clave na consola de desarrolladores de Google: ',\n    'set_view'               => 'Seleccionar unha vista',\n    'this_vs_last_week'      => 'Esta semana vs a semana pasada',\n    'this_vs_last_year'      => 'Este Ano vs o Ano pasado',\n    'top_browsers'           => 'Principais Navegadores',\n    'top_countries'          => 'Principais países',\n    'various_visualizations' => 'Varias visualizacións',\n];\n"
  },
  {
    "path": "publishable/lang/gl/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Engadir BREAD a esta táboa',\n    'bread_crud_actions'     => 'Accións BREAD/CRUD',\n    'bread_info'             => 'Información BREAD',\n    'controller_name_hint'   => 'ex. PageController, se se deixa en branco, usará BREAD Controller',\n    'create_bread_for_table' => 'Crear BREAD para a táboa :table',\n    'delete_bread'           => 'Borrar BREAD',\n    'delete_bread_conf'      => 'Si, borrar o BREAD',\n    'delete_bread_quest'     => 'Seguro que queres eliminar o BREAD para a táboa :table ?',\n    'edit_bread'             => 'Editar BREAD',\n    'edit_bread_for_table'   => 'Editar BREAD para a táboa :table',\n    'error_creating_bread'   => 'Sintoo, parece que houbo un problema ao crear este BREAD',\n    'error_removing_bread'   => 'Sintoo, parece que houbo un problema ao borrar este BREAD',\n    'error_updating_bread'   => 'Sintoo, parece que houbo un problema ao actualizar este BREAD',\n    'error_tagging'          => 'Parece que parece que houbo un problema ao crear o rexistro. Asegúrese de que a táboa ten valores predeterminados para outros campos.',\n    'success_created_bread'  => 'Creouse correctamente o novo BREAD',\n    'success_remove_bread'   => 'Borrouse correctamente o BREAD de :datatype',\n    'success_update_bread'   => 'Actualizouse correctamente o BREAD de :datatype',\n    'controller_name'        => 'Nome do controlador',\n    'create_migration'       => 'Crear migración para esta táboa?',\n    'description'            => 'Descripción',\n    'display_name'           => 'Nome de visualización',\n    'display_name_plural'    => 'Nome de visualización (Plural)',\n    'display_name_singular'  => 'Nome de visualización (Singular)',\n    'edit_rows'              => 'Editar as filas para a táboa :table a continuación',\n    'generate_permissions'   => 'Xerar Permisos',\n    'icon_class'             => 'Icono para usar nesta táboa',\n    'icon_hint'              => 'Icono (opcional) Use un',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Nome da clase do modelo',\n    'model_name'             => 'Nome do modelo',\n    'model_name_ph'          => 'ex. \\App\\User, se se deixa baleiro empregarase o nome da táboa',\n    'order'                  => 'Orde',\n    'order_column'           => 'Orde columna',\n    'order_column_ph'        => 'The column where the order is stored',\n    'order_ident_column'     => 'Order display column',\n    'order_ident_column_ph'  => 'The column which is displayed in the order page',\n    'ordering_not_set'       => 'Primeiro ten que definir a orde',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, se se deixa baleiro empregarase o predeterminado',\n    'server_pagination'      => 'Paxinación do lado do servidor',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URL Slug (debe ser único)',\n    'url_slug_ph'            => 'URL slug (ex. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/gl/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Benvido a Voyager Compass. Toda boa aplicación precisa un compás para sinalarnos a dirección correcta.\n    Nesta sección atoparás moitos recursos e tarefas administrativas para axudarche a medida que compilas a túa aplicación.',\n    'links'         => [\n        'title'                 => 'Enlaces',\n        'documentation'         => 'Documentación',\n        'voyager_homepage'      => 'Voyager Homepage',\n    ],\n    'commands'      => [\n        'title'                 => 'Comandos',\n        'text'                  => 'Executar comandos de Artisan dende Voyager.',\n        'clear_output'          => 'limpar saída',\n        'command_output'        => 'Saída de comandos de Artisan',\n        'additional_args'       => 'Argumentos adicionais?',\n        'run_command'           => 'Executar comando',\n    ],\n    'resources'     => [\n        'title'                 => 'Recursos',\n        'text'                  => 'Recursos de Voyager para axudarche a atopar as cousas máis rápido.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Logs',\n        'text'                  => 'Logs da túa aplicación',\n        'file_too_big'          => 'Arquivo Log >50M, descárgueo.',\n        'level'                 => 'Nivel',\n        'context'               => 'Contexto',\n        'date'                  => 'Data',\n        'content'               => 'Contido',\n        'download_file'         => 'Descargar arquivo',\n        'delete_file'           => 'Borrar arquivo',\n        'delete_all_files'      => 'Borrar tódolos arquivos',\n        'delete_success'        => 'Rexistro file: borrado con éxito',\n        'delete_all_success'    => 'Borrado con éxito tódolos arquivos',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Fonts',\n        'font_class'            => 'Voyager Fonts Class Mapping',\n        'font_character'        => 'Voyager Fonts Character Mapping',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/gl/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Engadir nova columna',\n    'add_softdeletes'           => 'Engadir Soft Deletes',\n    'add_timestamps'            => 'Engadir Timestamps',\n    'already_exists'            => 'xa existe',\n    'already_exists_table'      => 'Táboa :table xa existe',\n    'bread_crud_actions'        => 'Accións BREAD / CRUD',\n    'bread_info'                => 'Información de BREAD',\n    'browse_bread'              => 'Explorar BREAD',\n    'column'                    => 'Columna',\n    'composite_warning'         => 'Advertencia: esta columna forma parte dun índice composto',\n    'create_new_table'          => 'Crear nova táboa',\n    'create_your_new_table'     => 'Cree a súa nova táboa',\n    'create_model_table'        => 'Crear un modelo para esta táboa?',\n    'default'                   => 'Defecto',\n    'delete_bread_before_table' => 'Asegúrese de quitar o BREAD desta táboa antes de borrar a táboa.',\n    'delete_table_confirm'      => 'Sí, borrar esta táboa',\n    'delete_table_question'     => 'Está seguro de que desexa eliminar a táboa :table?',\n    'editing_table'             => 'Editando táboa :table',\n    'edit_table'                => 'Editar a táboa seguinte:',\n    'edit_table_not_exist'      => 'A táboa que desexa editar non existe',\n    'extra'                     => 'Extra',\n    'field'                     => 'Campo',\n    'field_safe_failed'         => 'Non se pudo gardar o campo :field, Estamos retrocedendo! ',\n    'index'                     => 'ÍNDICE',\n    'input_type'                => 'Tipo de entrada',\n    'key'                       => 'Clave',\n    'name_warning'              => 'Por favor, nomee a columna antes de engadir un índice',\n    'no_composites_warning'     => 'Esta táboa ten índices compostos. Teña en conta que en este momento non se admiten. Teña coidado ao intentar agregar/quitar índices.',\n    'null'                      => 'Nulo',\n    'optional_details'          => 'Detalles opcionais',\n    'policy_class'              => 'Clase das restricións',\n    'policy_name'               => 'Nome da restricións',\n    'policy_name_ph'            => 'ex. \\App\\Policies\\UserPolicy, se se deixa valeiro, intentará empregar o valor predeterminado',\n    'primary'                   => 'PRIMARIO',\n    'server_pagination'         => 'Paxinación do servidor',\n    'success_create_table'      => 'Táboa :table creada exitosamente',\n    'success_created_bread'     => 'BREAD creado exitosamente',\n    'success_delete_table'      => 'Táboa :table eliminada exitosamente',\n    'success_remove_bread'      => 'BREAD de tipo :datatype borrado exitosamente',\n    'success_update_bread'      => 'Actualizouse correctamente o BREAD :datatype',\n    'success_update_table'      => 'Táboa :table actualizada exitosamente',\n    'table_actions'             => 'Accións da táboa',\n    'table_columns'             => 'Columnas da táboa',\n    'table_has_index'           => 'A táboa xa ten un índice primario.',\n    'table_name'                => 'Nome da táboa',\n    'table_no_columns'          => 'A táboa non ten columnas ...',\n    'type'                      => 'Tipo',\n    'type_not_supported'        => 'Este tipo non é compatible',\n    'unique'                    => 'ÚNICO',\n    'unknown_type'              => 'Tipo descoñecido',\n    'update_table'              => 'Actualizar táboa',\n    'url_slug'                  => 'URL Slug (debe ser único)',\n    'url_slug_ph'               => 'URL slug (ex posts)',\n    'visibility'                => 'Visibilidade',\n    'relationship'              => [\n        'relationship'         => 'Relación',\n        'relationships'        => 'Relacións',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => 'Qué columna de',\n        'is_used_to_reference' => 'se empregará para facer referencia a',\n        'pivot_table'          => 'Tabla Pivote',\n        'selection_details'    => 'Selección de Detalles',\n        'display_the'          => 'Ver de',\n        'store_the'            => 'Gardar de',\n        'allow_tagging'        => 'Permitir etiquetar',\n        'easy_there'           => 'Fácil, Capitán',\n        'before_create'        => 'Antes de que poida crear unha nova relación, primeiro deberá crear o BREAD. <br> Despois, regrese para editar o BREAD e poderá agregar relacións. Grazas.',\n        'cancel'               => 'Cancelar',\n        'add_new'              => 'Agregar Nova Relación',\n        'open'                 => 'Abrir',\n        'close'                => 'Pechar',\n        'relationship_details' => 'Detalles de Relación',\n        'browse'               => 'Ver',\n        'read'                 => 'Ler',\n        'edit'                 => 'Editar',\n        'add'                  => 'Agregar',\n        'delete'               => 'Eliminar',\n        'create'               => 'Crear unha Relación',\n        'namespace'            => 'Nome do Espazo de Modelo (ex. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/gl/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Non hai datos dispoñibles na táboa',\n    'sInfo'           => 'Mostrando _START_ a _END_ de _TOTAL_ entradas',\n    'sInfoEmpty'      => 'Mostrando 0 a 0 de 0 entradas',\n    'sInfoFiltered'   => '(Filtrada de _MAX_ entradas totais)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Mostrar _MENU_ entradas',\n    'sLoadingRecords' => 'Cargando...',\n    'sProcessing'     => 'Procesando...',\n    'sSearch'         => 'Procurar:',\n    'sZeroRecords'    => 'Non se atoparon rexistros coincidentes',\n    'oPaginate'       => [\n        'sFirst'    => 'Primeiro',\n        'sLast'     => 'Último',\n        'sNext'     => 'Seguinte',\n        'sPrevious' => 'Anterior',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': Activar para ordenar a columna ascendente',\n        'sSortDescending' => ': Activar para ordenar a columna descendente',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/gl/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'A semana pasada',\n    'last_year' => 'O ano pasado',\n    'this_week' => 'Esta semana',\n    'this_year' => 'Este ano',\n];\n"
  },
  {
    "path": "publishable/lang/gl/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Páxina|Páxinas',\n    'page_link_text' => 'Ver tódalas páxinas',\n    'page_text'      => 'Ten :count :string na súa base de datos. Faga clic no botón de abaixo para ver tódalas páxinas. ',\n    'post'           => 'Post|Posts',\n    'post_link_text' => 'Ver tódolos posts',\n    'post_text'      => 'Ten :count :string na súa base de datos. Faga clic no botón de abaixo para ver tódolos posts. ',\n    'user'           => 'Usuario|Usuarios',\n    'user_link_text' => 'Ver tódolos usuarios',\n    'user_text'      => 'Ten :count :string na súa base de datos. Faga clic no botón de abaixo para ver tódolos usuarios. ',\n];\n"
  },
  {
    "path": "publishable/lang/gl/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Acabamos de crear o enlace simbólico que faltaba para vostede.',\n    'symlink_created_title'  => 'Enlace simbólico de almacenamento faltante creado',\n    'symlink_failed_text'    => 'Non poidemos xerar o enlace simbólico perdido para a súa aplicación. Parece que o proveedor de aloxamento non o admite.',\n    'symlink_failed_title'   => 'Non se poido crear un enlace simbólico de almacenamento faltante',\n    'symlink_missing_button' => 'Arránxao',\n    'symlink_missing_text'   => 'Non pudemos atopar un enlace simbólico de almacenamento. Isto podría causar problemas coa carga de arquivos multimedia dende o navegador.',\n    'symlink_missing_title'  => 'Falta o enlace simbólico de almacenamento',\n];\n"
  },
  {
    "path": "publishable/lang/gl/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'           => 'Deixar baleiro para mantener o mesmo',\n    'field_select_dd_relationship'  => 'Asegúrese de configurar a relación apropiada no método :method da clase :class.',\n    'type_checkbox'                 => 'Casilla de verificación',\n    'type_codeeditor'               => 'Editor de código',\n    'type_file'                     => 'Arquivo',\n    'type_image'                    => 'Imaxe',\n    'type_radiobutton'              => 'Botón de radio',\n    'type_richtextbox'              => 'Caixa de texto enriquecido',\n    'type_selectdropdown'           => 'Seleccionar despregable',\n    'type_textarea'                 => 'Área de texto',\n    'type_textbox'                  => 'Caixa de texto',\n];\n"
  },
  {
    "path": "publishable/lang/gl/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Acción',\n    'actions'                => 'Accions',\n    'add'                    => 'Engadir',\n    'add_folder'             => 'Engadir carpeta',\n    'add_new'                => 'Engadir novo',\n    'all_done'               => 'Todo listo',\n    'are_you_sure'           => 'Estás seguro',\n    'are_you_sure_delete'    => 'Estás seguro que queres borralo',\n    'auto_increment'         => 'Autoincremento',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Navegar',\n    'builder'                => 'Construtor',\n    'bulk_delete'            => 'Borrado masivo',\n    'bulk_delete_confirm'    => 'Sí, bórrao!',\n    'bulk_delete_nothing'    => 'Debe seleccionar polo menos un rexistro antes de usar o borrado masivo.',\n    'cancel'                 => 'Cancelar',\n    'choose_type'            => 'Elixir tipo',\n    'click_here'             => 'Faga clic aquí',\n    'close'                  => 'Pechar',\n    'compass'                => 'Compás',\n    'created_at'             => 'Creado en',\n    'custom'                 => 'Personalizado',\n    'dashboard'              => 'Taboleiro',\n    'database'               => 'Base de datos',\n    'default'                => 'Defecto',\n    'delete'                 => 'Borrar',\n    'delete_confirm'         => 'Sí, bórrao!',\n    'delete_question'        => 'Estás seguro que queres eliminar isto',\n    'delete_this_confirm'    => 'Sí, eliminar isto',\n    'deselect_all'           => 'Deseleccionar todo',\n    'download'               => 'Descargar',\n    'drag_drop_info'         => 'Arrastra e solta os elementos a continuación para volver organizalos.',\n    'edit'                   => 'Editar',\n    'email'                  => 'Email',\n    'error_deleting'         => 'Sintoo, parece que se produciu un problema ao eliminar',\n    'exception'              => 'Excepción',\n    'featured'               => 'Destacados',\n    'field_does_not_exist'   => 'O campo non existe',\n    'how_to_use'             => 'Cómo empregar',\n    'index'                  => 'Índice',\n    'internal_error'         => 'Erro interno',\n    'items'                  => 'Elemento(s)',\n    'keep_sidebar_open'      => 'Gharr! Solta as áncoras! (E mantén a barra lateral aberta) ',\n    'key'                    => 'Clave',\n    'last_modified'          => 'Última modificación',\n    'length'                 => 'Lonxitude',\n    'locale'                 => 'Locale',\n    'login'                  => 'Iniciar sesión',\n    'media'                  => 'Medios',\n    'menu_builder'           => 'Constructor de menús',\n    'move'                   => 'Mover',\n    'name'                   => 'Nome',\n    'new'                    => 'Novo',\n    'no'                     => 'Non',\n    'no_thanks'              => 'Non, grazas',\n    'none'                   => 'Ningún',\n    'not_null'               => 'Non nulo',\n    'no_results'             => 'No results',\n    'options'                => 'Opcións',\n    'password'               => 'Contrasinal',\n    'permissions'            => 'Permisos',\n    'profile'                => 'Perfil',\n    'public_url'             => 'URL pública',\n    'read'                   => 'Ler',\n    'rename'                 => 'Renomear',\n    'required'               => 'Necesario',\n    'return_to_list'         => 'Volver á lista',\n    'route'                  => 'Ruta',\n    'save'                   => 'Gardar',\n    'search'                 => 'Buscar',\n    'select_all'             => 'Seleccionar todo',\n    'select_group'           => 'Seleccione un grupo existente ou engada un',\n    'settings'               => 'Axustes',\n    'showing_entries'        => 'Mostrando de :from a :to de :all entradas | Mostrando de :from a :to de tódalas entradas',\n    'submit'                 => 'Enviar',\n    'successfully_added_new' => 'Engadido exitosamente',\n    'successfully_deleted'   => 'Eliminado exitosamente',\n    'successfully_updated'   => 'Actualizado exitosamente',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'Título',\n    'type'                   => 'Tipo',\n    'unsigned'               => 'Non signado',\n    'unstick_sidebar'        => 'Despegar a barra lateral',\n    'update'                 => 'Actualizar',\n    'update_failed'          => 'Actualización errada',\n    'updated_order'          => 'Orde actualizada',\n    'upload'                 => 'Subir',\n    'url'                    => 'URL',\n    'view'                   => 'Ver',\n    'viewing'                => 'Vendo',\n    'yes'                    => 'Sí',\n    'yes_please'             => 'Sí, por favor',\n];\n"
  },
  {
    "path": "publishable/lang/gl/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Json inválido',\n    'invalid_message'   => 'Parece que introduciches algún JSON inválido.',\n    'valid'             => 'Json Válido',\n    'validation_errors' => 'Errores de validación',\n];\n"
  },
  {
    "path": "publishable/lang/gl/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Iniciando sesión',\n    'signin_below' => 'Ingresar abaixo:',\n    'welcome'      => 'Benvido a Voyager. O administrador desaparecido de Laravel ',\n];\n"
  },
  {
    "path": "publishable/lang/gl/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Engadir nova carpeta',\n    'audio_support'          => 'O seu navegador non admite o elemento de audio.',\n    'create_new_folder'      => 'Crear nova carpeta',\n    'delete_folder_question' => 'Eliminar unha carpeta eliminará tódoslos arquivos e carpetas contidas dentro',\n    'destination_folder'     => 'Carpeta de destino',\n    'drag_drop_info'         => 'Arrastre e solte arquivos ou faga clic abaixo para cargar',\n    'error_already_exists'   => 'Síntoo, xa hai un arquivo/carpeta existente con ese nome nesa carpeta.',\n    'error_creating_dir'     => 'Síntoo, algo parece que foi mal coa creación da carpeta, por favor revise os seus permisos',\n    'error_deleting_file'    => 'Síntoo, algo parece que foi mal co borrado do arquivo, por favor revise os permisos',\n    'error_deleting_folder'  => 'Síntoo, algo parece que fallou ao eliminar esta carpeta, por favor revise os seus permisos',\n    'error_may_exist'        => 'Pode que xa exista un arquivo ou carpeta con ese nome. Por favor, elixe otro nome ou borre o outro arquivo.',\n    'error_moving'           => 'Síntoo, parece que hai un problema ao mover ese arquivo/carpeta, por favor asegúrese de ter os permisos correctos.',\n    'error_uploading'        => 'Carga errada: Ocurriu un erro descoñecido!',\n    'folder_exists_already'  => 'Síntoo, a carpeta xa existe, por favor, elimine esa carpeta se desexa creala novamente',\n    'image_does_not_exist'   => 'A imaxe non existe',\n    'image_removed'          => 'Imaxe eliminada',\n    'library'                => 'Mediateca',\n    'loading'                => 'CARGANDO OS ARQUIVOS DE MEDIOS',\n    'move_file_folder'       => 'Mover Arquivo/Carpeta',\n    'new_file_folder'        => 'Novo nome de Arquivo/carpeta',\n    'new_folder_name'        => 'Nome de nova carpeta',\n    'no_files_here'          => 'Non hai arquivos aquí.',\n    'no_files_in_folder'     => 'Non hai arquivos nesta carpeta.',\n    'nothing_selected'       => 'Non se seleccionou ningún arquivo ou carpeta',\n    'rename_file_folder'     => 'Renomear arquivo/cartafol',\n    'success_uploaded_file'  => 'Novo arquivo subido exitosamente!',\n    'success_uploading'      => 'Imaxe cargada exitosamente!',\n    'uploading_wrong_type'   => 'Erro de carga: formato de arquivo non soportado ou é demasiado grande para cargar!',\n    'video_support'          => 'O seu navegador non soporta a etiqueta de vídeo.',\n    'crop'                   => 'Cortar',\n    'crop_and_create'        => 'Cortar e Crear',\n    'crop_override_confirm'  => 'Anularase a imaxe orixinal, está seguro?',\n    'crop_image'             => 'Recortar imaxe',\n    'success_crop_image'     => 'Imaxe recortada con éxito',\n    'height'                 => 'Alto: ',\n    'title'                  => 'Título',\n    'type'                   => 'Tipo',\n    'size'                   => 'Tamaño',\n    'public_url'             => 'URL pública',\n    'last_modified'          => 'Última modificación',\n    'browser_video_support'  => 'O teu navegador non soporta esta etiqueta de vídeo.',\n    'browser_audio_support'  => 'O teu navegador non soporta este elemento de audio.',\n    'width'                  => 'Ancho: ',\n    'add_all_selected'       => 'Engade todos os seleccionados',\n];\n"
  },
  {
    "path": "publishable/lang/gl/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Cor en RGB ou hex (opcional)',\n    'color_ph'             => 'Cor (por exemplo, #ffffff ou rgb (255, 255, 255)',\n    'create_new_item'      => 'Crear unha nova opción de menú',\n    'delete_item_confirm'  => 'Sí, eliminar esta opción de menú',\n    'delete_item_question' => 'Está seguro de que desexa eliminar esta opción do menú?',\n    'drag_drop_info'       => 'Arraste e solte as opcións de menú para reogranizalas',\n    'dynamic_route'        => 'Ruta Dinámica',\n    'edit_item'            => 'Editar opción do menú',\n    'icon_class'           => 'Icono para a opción do menú (Use unha',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icono (opcional)',\n    'item_route'           => 'Ruta para a opción de menú',\n    'item_title'           => 'Título da opción de menú',\n    'link_type'            => 'Tipo de enlace',\n    'new_menu_item'        => 'Nova opción de menú',\n    'open_in'              => 'Ábreo',\n    'open_new'             => 'Nova pestana / ventá',\n    'open_same'            => 'Mesma pestana / ventá',\n    'route_parameter'      => 'Parámetros de ruta (se existen)',\n    'static_url'           => 'URL estática',\n    'successfully_created' => 'Creouse unha nova opción de menú.',\n    'successfully_deleted' => 'Opción de menú eliminada exitosamente.',\n    'successfully_updated' => 'Opción de menú actualizada exitosamente.',\n    'updated_order'        => 'Orde actualizado exitosamente.',\n    'url'                  => 'URL para a opción de menú',\n    'usage_hint'           => 'Pode xerar un menú en calqueira lugar do seu sitio chamando a|Pode mostrar este menú en calqueira lugar do seu sitio chamando a',\n];\n"
  },
  {
    "path": "publishable/lang/gl/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Campos adicionais',\n    'category'         => 'Categoría do Post',\n    'content'          => 'Contido do Post',\n    'details'          => 'Detalles do Post',\n    'excerpt'          => 'Extracto<small> Pequena descripción deste post </small>',\n    'image'            => 'Publicar imaxe',\n    'meta_description' => 'Meta Descripción',\n    'meta_keywords'    => 'Meta palabras clave',\n    'new'              => 'Crear novo post',\n    'seo_content'      => 'Contido SEO',\n    'seo_title'        => 'Título Seo',\n    'slug'             => 'URL slug',\n    'status'           => 'Estado do Post',\n    'status_draft'     => 'borrador',\n    'status_pending'   => 'pendente',\n    'status_published' => 'publicado',\n    'title'            => 'Título do Post',\n    'title_sub'        => 'O título de Post',\n    'update'           => 'Actualizar Post',\n];\n"
  },
  {
    "path": "publishable/lang/gl/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'            => 'Avatar',\n    'edit'              => 'Editar o meu perfil',\n    'edit_user'         => 'Editar usuario',\n    'password'          => 'Contrasinal',\n    'password_hint'     => 'Deixar baleiro para manter o mesmo',\n    'role'              => 'Rol',\n    'roles'             => 'Roles',\n    'role_default'      => 'Rol por defeecto',\n    'roles_additional'  => 'Roles adiccionais',\n    'user_role'         => 'Rol do usuario',\n];\n"
  },
  {
    "path": "publishable/lang/gl/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Autor',\n        'avatar'           => 'Avatar',\n        'body'             => 'Corpo',\n        'category'         => 'Categoría',\n        'created_at'       => 'Creado en',\n        'display_name'     => 'Nome de visualización',\n        'email'            => 'Email',\n        'excerpt'          => 'Fragmento',\n        'featured'         => 'Destacado',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Description',\n        'meta_keywords'    => 'Meta Keywords',\n        'name'             => 'Nome',\n        'order'            => 'Orde',\n        'page_image'       => 'Imaxe da páxina',\n        'parent'           => 'Pai',\n        'password'         => 'Password',\n        'post_image'       => 'Imaxe do post',\n        'remember_token'   => 'Recordar Token',\n        'role'             => 'Rol',\n        'seo_title'        => 'SEO Title',\n        'slug'             => 'Slug',\n        'status'           => 'Estatus',\n        'title'            => 'Título',\n        'updated_at'       => 'Actualizado en',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Categoría',\n            'plural'   => 'Categorías',\n        ],\n        'menu'     => [\n            'singular' => 'Menú',\n            'plural'   => 'Menús',\n        ],\n        'page'     => [\n            'singular' => 'Páxina',\n            'plural'   => 'Páxinas',\n        ],\n        'post'     => [\n            'singular' => 'Post',\n            'plural'   => 'Posts',\n        ],\n        'role'     => [\n            'singular' => 'Rol',\n            'plural'   => 'Roles',\n        ],\n        'user'     => [\n            'singular' => 'Usuario',\n            'plural'   => 'Usuarios',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Categirías',\n        'compass'      => 'Compas',\n        'dashboard'    => 'Dashboard',\n        'database'     => 'Base de datos',\n        'media'        => 'Media',\n        'menu_builder' => 'Menu Builder',\n        'pages'        => 'Páxinas',\n        'posts'        => 'Posts',\n        'roles'        => 'Roles',\n        'settings'     => 'Configuración',\n        'tools'        => 'Ferramentas',\n        'users'        => 'Usuarios',\n    ],\n    'roles'      => [\n        'admin' => 'Administrador',\n        'user'  => 'Usuario normal',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Imaxe de fondo do panel',\n            'description'                => 'Descripción do panel',\n            'description_value'          => 'Benvido a Voyager. O panel perdido de Laravel',\n            'google_analytics_client_id' => 'Google Analytics Client ID (usado para panel de administración)',\n            'icon_image'                 => 'Icono do panel',\n            'loader'                     => 'Cargador do panel',\n            'title'                      => 'Título do panel',\n        ],\n        'site'  => [\n            'description'                  => 'Descripción do sitio',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Logo do sitio',\n            'title'                        => 'Título do sitio',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/gl/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Pode obter o valor de cada parámetro en calqueira lugar do seu sitio chamando',\n    'save'                 => 'Gardar parámetro',\n    'new'                  => 'Novo parámetro',\n    'help_name'            => 'Nome do parámetro Ex: Título de Páxina',\n    'help_key'             => 'Clave do parámetro Ex: pag_titulo',\n    'help_option'          => '(Opcional, só se aplica a certos tipos como cadro desplegable ou botón de opción)',\n    'add_new'              => 'Engadir novo parámetro',\n    'delete_question'      => '¿Está seguro de que desexa eliminar o parámetro :setting?',\n    'delete_confirm'       => 'Sí, eliminar este parámetro',\n    'successfully_created' => 'Parámetro creado exitosamente',\n    'successfully_saved'   => 'Parámetro gardado exitosamente',\n    'successfully_deleted' => 'Parámetro eliminado exitosamente',\n    'already_at_top'       => 'Isto xa está na parte superior da lista',\n    'already_at_bottom'    => 'Isto xa está na parte inferior da lista',\n    'key_already_exists'   => 'Esta opción xa foi creada',\n    'moved_order_up'       => 'Orde do parámetro :name aumentado',\n    'moved_order_down'     => 'Orde do parámetro :name diminuido',\n    'successfully_removed' => 'Eliminado correctamente parámetro :name ',\n    'group_general'        => 'Xeral',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Site',\n    'group'                => 'Grupo',\n    'help_group'           => 'Esta opción está asignada a',\n];\n"
  },
  {
    "path": "publishable/lang/gl/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Feito con <i class = \"voyager-heart\"> </i> por',\n    'footer_copyright2' => 'Feito con ron e incluso máis ron',\n];\n"
  },
  {
    "path": "publishable/lang/id/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'  => 'By pageview',\n    'by_sessions'  => 'By sessions',\n    'by_users'     => 'By users',\n    'no_client_id' => 'Untuk melihat analytics kamu membutuhkan google analytics client id dan '.\n                                 'menambahkannya ke pengaturan dengan menggunakan key <code>google_analytics_client_id'.\n                                 '</code>. Dapatkan key dari Google developer console:',\n    'set_view'               => 'Pilih View',\n    'this_vs_last_week'      => 'Minggu ini vs Minggu lalu',\n    'this_vs_last_year'      => 'Tahun ini vs Tahun lalu',\n    'top_browsers'           => 'Top Browsers',\n    'top_countries'          => 'Top Countries',\n    'various_visualizations' => 'Bermacam visualisasi',\n];\n"
  },
  {
    "path": "publishable/lang/id/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Add BREAD to this table',\n    'bread_crud_actions'     => 'BREAD/CRUD Actions',\n    'bread_info'             => 'BREAD info',\n    'controller_name_hint'   => 'ex. PageController, if left empty will use the BREAD Controller',\n    'create_bread_for_table' => 'Create BREAD for :table table',\n    'delete_bread'           => 'Delete BREAD',\n    'delete_bread_conf'      => 'Yes, remove the BREAD',\n    'delete_bread_quest'     => 'Are you sure you want to delete the BREAD for the :table table?',\n    'edit_bread'             => 'Edit BREAD',\n    'edit_bread_for_table'   => 'Edit BREAD for :table table',\n    'error_creating_bread'   => 'Sorry it appears there may have been a problem creating this BREAD',\n    'error_removing_bread'   => 'Sorry it appears there was a problem removing this BREAD',\n    'error_updating_bread'   => 'Sorry it appears there may have been a problem updating this BREAD',\n    'error_tagging'          => 'Sorry it appears there may have been a problem creating the record. Please make sure your table has defaults for other fields.',\n    'success_created_bread'  => 'Successfully created new BREAD',\n    'success_remove_bread'   => 'Successfully removed BREAD from :datatype',\n    'success_update_bread'   => 'Successfully updated the :datatype BREAD',\n    'controller_name'        => 'Controller Name',\n    'create_migration'       => 'Create migration for this table?',\n    'description'            => 'Description',\n    'display_name'           => 'Display Name',\n    'display_name_plural'    => 'Display Name (Plural)',\n    'display_name_singular'  => 'Display Name (Singular)',\n    'edit_rows'              => 'Edit the rows for the :table table below',\n    'generate_permissions'   => 'Generate Permissions',\n    'icon_class'             => 'Icon to use for this Table',\n    'icon_hint'              => 'Icon (optional) Use a',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Model Class Name',\n    'model_name'             => 'Model Name',\n    'model_name_ph'          => 'ex. \\App\\User, if left empty will try and use the table name',\n    'order'                  => 'Order',\n    'order_column'           => 'Order column',\n    'order_column_ph'        => 'The column where the order is stored',\n    'order_ident_column'     => 'Order display column',\n    'order_ident_column_ph'  => 'The column which is displayed in the order page',\n    'ordering_not_set'       => 'You have to define ordering first',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'server_pagination'      => 'Server-side Pagination',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URL Slug (must be unique)',\n    'url_slug_ph'            => 'URL slug (ex. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/id/database.php",
    "content": "<?php\n\nreturn [\n    'add_bread'                 => 'Tambahkan BREAD pada tabel ini',\n    'add_new_column'            => 'Tambah kolom baru',\n    'add_softdeletes'           => 'Tambah Soft Deletes',\n    'add_timestamps'            => 'Tambah Timestamps',\n    'already_exists'            => 'sudah ada',\n    'already_exists_table'      => 'Tabel :table sudah ada',\n    'bread_crud_actions'        => 'BREAD/CRUD Actions',\n    'bread_info'                => 'BREAD info',\n    'browse_bread'              => 'Browse BREAD',\n    'column'                    => 'Kolom',\n    'composite_warning'         => 'Peringatan: kolom ini merupakan bagian dari composite index',\n    'controller_name'           => 'Nama Controller',\n    'controller_name_hint'      => 'cth. PageController, jika dikosongkan akan memakai BREAD Controller',\n    'create_bread_for_table'    => 'Buat BREAD untuk table :table',\n    'create_migration'          => 'Buat migration untuk tabel ini?',\n    'create_model_table'        => 'Buat model untuk tabel ini?',\n    'create_new_table'          => 'Buat Table Baru',\n    'create_your_new_table'     => 'Buat Table Baru',\n    'default'                   => 'Default',\n    'delete_bread'              => 'Hapus BREAD',\n    'delete_bread_before_table' => 'Pastikan untuk menghapus BREAD pada tabel ini terlebih dahulu sebelum menghapus tabel.',\n    'delete_table_bread_conf'   => 'Ya, hapus BREAD',\n    'delete_table_bread_quest'  => 'Kamu yakin untuk menghapus BREAD untuk tabel :table?',\n    'delete_table_confirm'      => 'Ya, hapus tabel ini',\n    'delete_table_question'     => 'Kamu yakin untuk menghapus tabel :table ?',\n    'description'               => 'Deskripsi',\n    'display_name'              => 'Display Name',\n    'display_name_plural'       => 'Display Name (Plural)',\n    'display_name_singular'     => 'Display Name (Singular)',\n    'edit_bread'                => 'Ubah BREAD',\n    'edit_bread_for_table'      => 'Ubah BREAD untuk tabel :table',\n    'edit_rows'                 => 'Ubah baris untuk tabel :table dibawah',\n    'edit_table'                => 'Ubah tabel :table dibawah',\n    'edit_table_not_exist'      => 'Tabel yang hendak kamu hapus tidak ditemukan',\n    'error_creating_bread'      => 'Maaf, sepertinya terjadi masalah ketika membuat BREAD',\n    'error_removing_bread'      => 'Maaf, sepertinya terjadi masalah ketika menghapus BREAD',\n    'error_updating_bread'      => 'Maaf, sepertinya terjadi masalah ketika mengubah BREAD',\n    'extra'                     => 'Ekstra',\n    'field'                     => 'Field',\n    'field_safe_failed'         => 'Gagal menyimpan field :field, kita roll back!',\n    'generate_permissions'      => 'Generate Permissions',\n    'icon_class'                => 'Icon untuk tabel ini',\n    'icon_hint'                 => 'Icon (optional) Gunakan',\n    'icon_hint2'                => 'Voyager Font Class',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Input Type',\n    'key'                       => 'Key',\n    'model_class'               => 'Nama Class Model',\n    'model_name'                => 'Nama Model',\n    'model_name_ph'             => 'cth. \\App\\User, jika dikosongkan akan menggunakan nama tabel',\n    'name_warning'              => 'Silahkan menamai kolom sebelum memberikan index',\n    'no_composites_warning'     => 'Tabel ini mempunyai composite index. Mohon dicatat fitur ini belum didukung saat ini. Berhati-hatilah saat menambahkan/menghapus index.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Optional Details',\n    'policy_class'              => 'Policy Class Name',\n    'policy_name'               => 'Policy Name',\n    'policy_name_ph'            => 'cth. \\App\\Policies\\UserPolicy, jika dikosongkan akan coba menggunakan default',\n    'primary'                   => 'PRIMARY',\n    'server_pagination'         => 'Server-side Pagination',\n    'success_create_table'      => 'Berhasil membuat tabel :table',\n    'success_created_bread'     => 'Berhasil membuat BREAD baru',\n    'success_delete_table'      => 'Berhasil menghapus :table',\n    'success_remove_bread'      => 'Berhasil menghapus BREAD dari :datatype',\n    'success_update_bread'      => 'Berhasil mengubah :datatype BREAD',\n    'success_update_table'      => 'Berhasil mengubah tabel :table',\n    'table_actions'             => 'Aksi Tabel',\n    'table_columns'             => 'Kolom Tabel',\n    'table_has_index'           => 'Tabel mempunyai primary index.',\n    'table_name'                => 'Nama Tabel',\n    'table_no_columns'          => 'Tabel tidak memiliki kolom...',\n    'type'                      => 'Tipe',\n    'type_not_supported'        => 'Tipe ini tidak didukung',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Unknown Type',\n    'update_table'              => 'Perbaharui Table',\n    'url_slug'                  => 'URL Slug (harus unique)',\n    'url_slug_ph'               => 'URL slug (cth. posts)',\n    'visibility'                => 'Visibility',\n    'relationship'              => [\n        'relationship'         => 'Relationship',\n        'relationships'        => 'Relationships',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => 'Kolom mana dari',\n        'is_used_to_reference' => 'yang digunakan sebagai referensi untuk',\n        'pivot_table'          => 'Pivot Table',\n        'selection_details'    => 'Selection Details',\n        'display_the'          => 'Lihat',\n        'store_the'            => 'Simpan',\n        'easy_there'           => 'Sabar Kapten',\n        'before_create'        => 'Sebelum membuat relationship kamu harus membuat BREAD terlebih dahulu.<br> Lalu, kembali untuk mengubah BREAD dan kamu dapat menambahkan relationships.<br> Terima kasih.',\n        'cancel'               => 'Batal',\n        'add_new'              => 'Tambah relationship baru',\n        'open'                 => 'Buka',\n        'close'                => 'Tutup',\n        'relationship_details' => 'Detil Relationship',\n        'browse'               => 'Lihat',\n        'read'                 => 'Baca',\n        'edit'                 => 'Ubah',\n        'add'                  => 'Tambah',\n        'delete'               => 'Hapus',\n        'create'               => 'Buat Relationship',\n        'namespace'            => 'Model Namespace (cth. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/id/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Tidak ada data pada tabel',\n    'sInfo'           => 'Lihat mulai _START_ hingga _END_ dari _TOTAL_ entri',\n    'sInfoEmpty'      => 'Lihat mulai 0 hingga 0 dari 0 entri',\n    'sInfoFiltered'   => '(menyaring dari _MAX_ total entri)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Lihat _MENU_ entri',\n    'sLoadingRecords' => 'Menunggu...',\n    'sProcessing'     => 'Memproses...',\n    'sSearch'         => 'Cari:',\n    'sZeroRecords'    => 'Tidak ada data yang sesuai',\n    'oPaginate'       => [\n        'sFirst'    => 'Pertama',\n        'sLast'     => 'Terakhir',\n        'sNext'     => 'Selanjutnya',\n        'sPrevious' => 'Sebelumnya',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': aktivasi untuk mengurutkan dari kecil ke besar',\n        'sSortDescending' => ': aktivasi untuk mengurutkan dari besar ke kecil',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/id/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Minggu Lalu',\n    'last_year' => 'Tahun Lalu',\n    'this_week' => 'Minggu Ini',\n    'this_year' => 'Tahun Ini',\n];\n"
  },
  {
    "path": "publishable/lang/id/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Halaman',\n    'page_link_text' => 'Lihat semua halaman',\n    'page_text'      => 'Kamu mempunyai :count :string dalam database. Klik tombol dibawah untuk melihat semua halaman.',\n    'post'           => 'Post',\n    'post_link_text' => 'Lihat semua post',\n    'post_text'      => 'Kamu mempunyai :count :string dalam database. Klik tombol dibawah untuk melihat semua post.',\n    'user'           => 'User',\n    'user_link_text' => 'Lihat semua user',\n    'user_text'      => 'Kamu mempunyai :count :string dalam database. Klik tombol dibawah untuk melihat semua user.',\n];\n"
  },
  {
    "path": "publishable/lang/id/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'  => 'Kamu telh membuatkan symlink untukmu.',\n    'symlink_created_title' => 'Kekurangan storage symlink telah diperbaiki',\n    'symlink_failed_text'   => 'Kami gagal membuat storage symlink untuk aplikasi kamu. '.\n                                'Sepertinya provider hosting kamu tidak mendukungnya.',\n    'symlink_failed_title'   => 'Tidak dapat membuat storage symlink',\n    'symlink_missing_button' => 'Perbaiki',\n    'symlink_missing_text'   => 'Kami tidak dapat menemukan storage symlink. Ini dapat mengakibatkan masalah '.\n                                'ketika melihat file pada browser.',\n    'symlink_missing_title' => 'Tidak terdapat storage symlink',\n];\n"
  },
  {
    "path": "publishable/lang/id/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Kosongkan untuk menggunakan data yang sama',\n    'field_select_dd_relationship' => 'Pastikan untuk mengatur relationship yang benar pada memthod :method dari '.\n                                      'class :class .',\n    'type_checkbox'       => 'Check Box',\n    'type_codeeditor'     => 'Code Editor',\n    'type_file'           => 'File',\n    'type_image'          => 'Image',\n    'type_radiobutton'    => 'Radio Button',\n    'type_richtextbox'    => 'Rich Textbox',\n    'type_selectdropdown' => 'Select Dropdown',\n    'type_textarea'       => 'Text Area',\n    'type_textbox'        => 'Text Box',\n];\n"
  },
  {
    "path": "publishable/lang/id/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Aksi',\n    'actions'                => 'Aksi',\n    'add'                    => 'Tambah',\n    'add_folder'             => 'Buat Folder',\n    'add_new'                => 'Buat Baru',\n    'all_done'               => 'Selesai',\n    'are_you_sure'           => 'Apa kamu yakin',\n    'are_you_sure_delete'    => 'Yakin untuk menghapus',\n    'auto_increment'         => 'Auto Increment',\n    'browse'                 => 'Lihat',\n    'builder'                => 'Builder',\n    'bulk_delete'            => 'Hapus Sekaligus',\n    'bulk_delete_confirm'    => 'Ya, hapus semua',\n    'bulk_delete_nothing'    => 'Kamu belum memilih apapun untuk dihapus',\n    'cancel'                 => 'Batal',\n    'choose_type'            => 'Pilih Tipe',\n    'click_here'             => 'Klik disini',\n    'close'                  => 'Tutup',\n    'compass'                => 'Compass',\n    'created_at'             => 'Dibuat pada',\n    'custom'                 => 'Custom',\n    'dashboard'              => 'Dashboard',\n    'database'               => 'Database',\n    'default'                => 'Default',\n    'delete'                 => 'Hapus',\n    'delete_confirm'         => 'Ya, Hapus!',\n    'delete_question'        => 'Kamu yakin untuk menghapus ini',\n    'delete_this_confirm'    => 'Ya, hapus ini',\n    'deselect_all'           => 'Tidak pilih semua',\n    'download'               => 'Unduh',\n    'edit'                   => 'Ubah',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Maaf, ada masalah ketika hendak menghapus ini',\n    'exception'              => 'Exception',\n    'featured'               => 'Featured',\n    'field_does_not_exist'   => 'Field tidak ditemukan',\n    'how_to_use'             => 'Cara Penggunaan',\n    'index'                  => 'Index',\n    'internal_error'         => 'Internal error',\n    'items'                  => 'item(s)',\n    'keep_sidebar_open'      => 'Yarr! Drop the anchors! (and keep the sidebar open)',\n    'key'                    => 'Key',\n    'last_modified'          => 'Terakhir diubah',\n    'length'                 => 'Panjang',\n    'login'                  => 'Masuk',\n    'media'                  => 'Media',\n    'menu_builder'           => 'Menu Builder',\n    'move'                   => 'Pindah',\n    'name'                   => 'Nama',\n    'new'                    => 'Baru',\n    'no'                     => 'Tidak',\n    'no_thanks'              => 'Tidak, terima kasih',\n    'not_null'               => 'Not Null',\n    'no_results'             => 'No results',\n    'options'                => 'Options',\n    'password'               => 'Password',\n    'permissions'            => 'Permissions',\n    'profile'                => 'Profile',\n    'public_url'             => 'Public URL',\n    'read'                   => 'Baca',\n    'rename'                 => 'Ubah Nama',\n    'required'               => 'Dibutuhkan',\n    'return_to_list'         => 'Kembali ke Daftar',\n    'route'                  => 'Route',\n    'save'                   => 'Simpan',\n    'search'                 => 'Cari',\n    'select_all'             => 'Pilih semua',\n    'select_group'           => 'Pilih Group atau Buat Baru',\n    'settings'               => 'Pengaturan',\n    'showing_entries'        => 'Lihat dari :from hingga :to dari :all masukan',\n    'submit'                 => 'Submit',\n    'successfully_added_new' => 'Berhasil Buat Baru',\n    'successfully_deleted'   => 'Berhasil Dihapus',\n    'successfully_updated'   => 'Berhasil Diperbaharui',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'Judul',\n    'type'                   => 'Tipe',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'Sidebar tidak menempel',\n    'update'                 => 'Perbaharui',\n    'update_failed'          => 'Perbaharui Gagal',\n    'upload'                 => 'Unggah',\n    'url'                    => 'URL',\n    'view'                   => 'Lihat',\n    'viewing'                => 'Melihat',\n    'yes'                    => 'Ya',\n    'yes_please'             => 'Ya, Silahkan',\n];\n"
  },
  {
    "path": "publishable/lang/id/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Json tidak valid',\n    'invalid_message'   => 'Sepertinya JSON kamu tidak valid.',\n    'valid'             => 'Json Valid',\n    'validation_errors' => 'Validasi error',\n];\n"
  },
  {
    "path": "publishable/lang/id/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Sedang login',\n    'signin_below' => 'Sign In Dibawah:',\n    'welcome'      => 'Selamat datang di Voyager. Admin untuk Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/id/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Buat Folder Baru',\n    'audio_support'          => 'Browser kamu tidak mendukung elemen/tag audio.',\n    'create_new_folder'      => 'Buat Folder Baru',\n    'delete_folder_question' => 'Menghapus folder akan mengahapus semua file dan folder didalamnya',\n    'destination_folder'     => 'Folder Tujuan',\n    'drag_drop_info'         => 'Drag and drop file atau klik dibawah untuk unggah',\n    'error_already_exists'   => 'Maaf, terdapat nama file/folder yang sama didalam folder tersebut.',\n    'error_creating_dir'     => 'Maaf terjadi masalah ketika membuat folder, mohon cek folder permission kamu',\n    'error_deleting_file'    => 'Maaf, terjadi masalah ketika hendak menghapus file ini, mohon cek file permission kamu',\n    'error_deleting_folder'  => 'Maaf, terjadi masalah ketika hendak menghapus folder ini, mohon cek folder permission kamu',\n    'error_may_exist'        => 'File atau folder sudah menggunakan nama ini. Silahkan pilih nama lain atau hapus file dengan nama yang sama.',\n    'error_moving'           => 'Maaf, terjadi masalah ketika hendak memindahkan file/folder ini, pastikan folder permission benar',\n    'error_uploading'        => 'Unggah gagal: Terjadi error yang tidak diketahui!',\n    'folder_exists_already'  => 'Maaf, folder sudah ada, silahkan hapus folder tersebut jika ingin membuat lagi',\n    'image_does_not_exist'   => 'Gambar tidak tersedia',\n    'image_removed'          => 'Gambar dihapus',\n    'library'                => 'Media Library',\n    'loading'                => 'MENUNGGU MEDIA FILE KAMU',\n    'move_file_folder'       => 'Pindah File/Folder',\n    'new_file_folder'        => 'Nama File/Folder Baru',\n    'new_folder_name'        => 'Nama Folder Baru',\n    'no_files_here'          => 'Tidak ada file.',\n    'no_files_in_folder'     => 'Tidak ada file di dalam folder ini.',\n    'nothing_selected'       => 'Tidak ada file atau folder terpilih',\n    'rename_file_folder'     => 'Ubah nama File/Folder',\n    'success_uploaded_file'  => 'Berhasil unggah file baru!',\n    'success_uploading'      => 'Gambar berhasil diunggah!',\n    'uploading_wrong_type'   => 'Unggah gagal: Format file tidak didukung atau terlalu besar untuk diunggah!',\n    'video_support'          => 'Browser kamu tidak mendukung tag video.',\n    'crop'                   => 'Potong',\n    'crop_and_create'        => 'Potong & Buat',\n    'crop_override_confirm'  => 'Ini akan menggantikan file asli, kamu yakin?',\n    'crop_image'             => 'Potong Gambar',\n    'success_crop_image'     => 'Berhasil memotong gambar',\n    'height'                 => 'Tinggi: ',\n    'width'                  => 'Lebar: ',\n    'add_all_selected'       => 'Tambahkan semua yang dipilih',\n];\n"
  },
  {
    "path": "publishable/lang/id/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Warna dalam RGB atau hex (optional)',\n    'color_ph'             => 'Warna (cth. #ffffff atau rgb(255, 255, 255)',\n    'create_new_item'      => 'Buat Menu Item Baru',\n    'delete_item_confirm'  => 'Ya, Hapus Menu Item Ini',\n    'delete_item_question' => 'Kamu yakin menghapus menu item ini?',\n    'drag_drop_info'       => 'Drag and drop menu item dibawah ini untuk mengurutkannya.',\n    'dynamic_route'        => 'Dynamic Route',\n    'edit_item'            => 'Ubah Menu Item',\n    'icon_class'           => 'Font Icon class untuk Menu Item (Gunakan',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icon Class (optional)',\n    'item_route'           => 'Route dari menu item',\n    'item_title'           => 'Title dari Menu Item',\n    'link_type'            => 'Tipe Link',\n    'new_menu_item'        => 'Menu Item Baru',\n    'open_in'              => 'Buka di',\n    'open_new'             => 'Tab/Window Baru',\n    'open_same'            => 'Tab/Window Yang Sama',\n    'route_parameter'      => 'Route parameter (jika ada)',\n    'static_url'           => 'URL Statis',\n    'successfully_created' => 'Berhasil Membuat Menu Item Baru.',\n    'successfully_deleted' => 'Berhasil Menghapus Menu Item.',\n    'successfully_updated' => 'Berhasil Memperbaharui Menu Item.',\n    'updated_order'        => 'Berhasil Mengurutkan Menu Item.',\n    'url'                  => 'URL dari Menu Item',\n    'usage_hint'           => 'Kamu dapat mempertunjukkan menu ini dimanapun pada website dengan memanggil',\n];\n"
  },
  {
    "path": "publishable/lang/id/post.php",
    "content": "<?php\n\nreturn [\n    'category'         => 'Kategori Post',\n    'content'          => 'Konten Post',\n    'details'          => 'Detil Post',\n    'excerpt'          => 'Kutipan <small>Deskripsi pendek dari post ini</small>',\n    'image'            => 'Gambar Post',\n    'meta_description' => 'Meta Deskripsi',\n    'meta_keywords'    => 'Meta Kata Kunci',\n    'new'              => 'Buat Post Baru',\n    'seo_content'      => 'Konten SEO',\n    'seo_title'        => 'SEO Title',\n    'slug'             => 'URL slug',\n    'status'           => 'Status Post',\n    'status_draft'     => 'draft',\n    'status_pending'   => 'pending',\n    'status_published' => 'published',\n    'title'            => 'Post Title',\n    'title_sub'        => 'Title dari post',\n    'update'           => 'Perbaharui Post',\n];\n"
  },
  {
    "path": "publishable/lang/id/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => 'Avatar',\n    'edit'          => 'Ubah Profil',\n    'edit_user'     => 'Ubah User',\n    'password'      => 'Password',\n    'password_hint' => 'Kosongkan apabila sama',\n    'role'          => 'Role',\n    'user_role'     => 'User Role',\n];\n"
  },
  {
    "path": "publishable/lang/id/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Kamu dapat menggunakan value dari setiap pengaturan dimanapun di website dengan memanggil',\n    'save'                 => 'Simpan Pengaturan',\n    'new'                  => 'Pengaturan Baru',\n    'help_name'            => 'Nama pengaturan cth: Judul Admin',\n    'help_key'             => 'Key pengaturan cth: judul_admin',\n    'help_option'          => '(optional, hanya berlaku untuk tipe tertentu seperti dropdown box atau radio button)',\n    'add_new'              => 'Buat Pengaturan Baru',\n    'delete_question'      => 'Apakah kamu yakin untuk menghapus pengaturan :setting?',\n    'delete_confirm'       => 'Ya, hapus pengaturan ini',\n    'successfully_created' => 'Berhasil membuat pengaturan',\n    'successfully_saved'   => 'Berhasil menyimpan pengaturan',\n    'successfully_deleted' => 'Berhasil menghapus pengaturan',\n    'already_at_top'       => 'Ini sudah berada pada daftar teratas',\n    'already_at_bottom'    => 'Ini sudah berada pada daftar terbawah',\n    'key_already_exists'   => 'Key :key telah digunakan',\n    'moved_order_up'       => 'Pindah pengaturan :name keatas',\n    'moved_order_down'     => 'Pindah pengaturan :name kebawah',\n    'successfully_removed' => 'Berhasil menghapus :name',\n    'group_general'        => 'General',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Site',\n    'group'                => 'Grup',\n    'help_group'           => 'Grup dimana pengaturan ini berlaku',\n];\n"
  },
  {
    "path": "publishable/lang/id/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Dibuat dengan <i class=\"voyager-heart\"></i> oleh',\n    'footer_copyright2' => 'Dibuat dengan rum dan lebih banyak rum',\n];\n"
  },
  {
    "path": "publishable/lang/it/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'Per pageview',\n    'by_sessions'            => 'Per sessioni',\n    'by_users'               => 'Per utenti',\n    'no_client_id'           => 'Per visualizzare le analisi, dovrai ottenere un client ID per Google Analytics e aggiungerlo alle tue impostazioni per la chiave <code>google_analytics_client_id</code>. ottieni una chiave su Google developer console:',\n    'set_view'               => 'Seleziona una Vista',\n    'this_vs_last_week'      => 'Questa settimana vs la scorsa settimana',\n    'this_vs_last_year'      => 'Quest\\'anno vs lo scorso anno',\n    'top_browsers'           => 'Browser Top',\n    'top_countries'          => 'Paesi Top',\n    'various_visualizations' => 'Varie visualizzazioni',\n];\n"
  },
  {
    "path": "publishable/lang/it/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Aggiungi BREAD a questa tabella',\n    'bread_crud_actions'     => 'Azioni BREAD/CRUD',\n    'bread_info'             => 'Informazioni BREAD',\n    'controller_name_hint'   => 'es. PageController, se lasciato vuoto verrà usato il BREAD Controller',\n    'create_bread_for_table' => 'Crea BREAD per la tabella :table',\n    'default_search_key'     => 'Campo predefinito perricerca server-side',\n    'default_search_key_ph'  => 'Il campo sarà preselezionato per ricerche server-side',\n    'delete_bread'           => 'Elimina BREAD',\n    'delete_bread_conf'      => 'Sì, rimuovi il BREAD',\n    'delete_bread_quest'     => 'Sei sicuro di voler eliminare il BREAD per la tabella :table?',\n    'edit_bread'             => 'Modifica BREAD',\n    'edit_bread_for_table'   => 'Modifica BREAD per la tabella :table',\n    'error_creating_bread'   => 'Spiacenti sembra ci sia stato un problema nel creare questo BREAD',\n    'error_removing_bread'   => 'Spiacenti sembra ci sia stato un problema nel rimuovere questo BREAD',\n    'error_updating_bread'   => 'Spiacenti sembra ci sia stato un problema nell\\'aggiornare questo BREAD',\n    'error_tagging'          => 'Spiacenti sembra ci sia stato un problema nel creare il record. Assicurati che la tabella abbia valori predefiniti per gli altri campi.',\n    'success_created_bread'  => 'Nuovo BREAD creato con successo',\n    'success_remove_bread'   => 'BREAD rimosso con successo da :datatype',\n    'success_update_bread'   => 'Aggiornato con successo :datatype BREAD',\n    'controller_name'        => 'Nome Controller',\n    'create_migration'       => 'Creare una migrazione per questa tabella?',\n    'description'            => 'Descrizione',\n    'display_name'           => 'Nome Visualizzato',\n    'display_name_plural'    => 'Nome Visualizzato (Plurale)',\n    'display_name_singular'  => 'Nome Visualizzato (Singolare)',\n    'edit_rows'              => 'Modifica le righe per la tabella :table qui sotto',\n    'generate_permissions'   => 'Genera Permessi',\n    'icon_class'             => 'Icona da utilizzare per questa Tabella',\n    'icon_hint'              => 'Icona (opzionale) Usare una',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Nome della Classe del Model',\n    'model_name'             => 'Nome Model',\n    'model_name_ph'          => 'es. \\App\\User, se lasciato vuoto proverà ad utilizzare il nome della tabella',\n    'order'                  => 'Ordine',\n    'order_column'           => 'Colonna per Ordinamento',\n    'order_column_ph'        => 'La colonna dove l\\'ordinamento è salvato',\n    'order_direction'        => 'Direzione Ordinamento',\n    'order_ident_column'     => 'Order display column',\n    'order_ident_column_ph'  => 'La colonna che è visualizzata nella pagina di ordinamento',\n    'ordering_not_set'       => 'You have to define ordering first',\n    'policy_class'           => 'Nome della Classe Policy',\n    'policy_name'            => 'Nome Policy',\n    'policy_name_ph'         => 'es. \\App\\Policies\\UserPolicy, se lasciato vuoto proverà ad usare quella di default',\n    'server_pagination'      => 'Paginazione lato Server',\n    'scope'                  => 'Scope',\n    'soft_deletes_on'        => 'Mostra Eliminati',\n    'soft_deletes_off'       => 'Nascondi Eliminati',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URL Slug (deve essere unico)',\n    'url_slug_ph'            => 'URL slug (ex. articoli)',\n];\n"
  },
  {
    "path": "publishable/lang/it/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Benvenuto in Voyager Compass. Every good app needs a compass to point them in the right direction.\n    In this section you will find many resources and administrative tasks to help guide you as you build out your application.',\n    'links'         => [\n        'title'                 => 'Links',\n        'documentation'         => 'Documentazione',\n        'voyager_homepage'      => 'Voyager Homepage',\n    ],\n    'commands'      => [\n        'title'                 => 'Comandi',\n        'text'                  => 'Run Artisan Commands from Voyager.',\n        'clear_output'          => 'clear output',\n        'command_output'        => 'Artisan Command Output',\n        'additional_args'       => 'Additional Args?',\n        'run_command'           => 'Run Command',\n    ],\n    'resources'     => [\n        'title'                 => 'Risorse',\n        'text'                  => 'Voyager resources to help you find things quicker.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Logs',\n        'text'                  => 'Your app logs',\n        'file_too_big'          => 'Log file >50M, please download it.',\n        'level'                 => 'Level',\n        'context'               => 'Context',\n        'date'                  => 'Date',\n        'content'               => 'Content',\n        'download_file'         => 'Download file',\n        'delete_file'           => 'Delete file',\n        'delete_all_files'      => 'Delete all files',\n        'delete_success'        => 'Successfully deleted log file:',\n        'delete_all_success'    => 'Successfully deleted all log files',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Fonts',\n        'font_class'            => 'Voyager Fonts Class Mapping',\n        'font_character'        => 'Voyager Fonts Character Mapping',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/it/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Aggiungi Nuova Colonna',\n    'add_softdeletes'           => 'Aggiungi Eliminazioni soft',\n    'add_timestamps'            => 'Aggiungi Timestamps',\n    'already_exists'            => 'già esistente',\n    'already_exists_table'      => 'La tabella :table esiste già',\n    'bread_crud_actions'        => 'BREAD/CRUD Actions',\n    'bread_info'                => 'BREAD info',\n    'browse_bread'              => 'Browse BREAD',\n    'column'                    => 'Colonna',\n    'composite_warning'         => 'Avviso: questa colonna fa parte di un indice composito',\n    'create_new_table'          => 'Crea Nuova Tabella',\n    'create_your_new_table'     => 'Crea la tua Nuova Tabella',\n    'create_model_table'        => 'Create model for this table?',\n    'default'                   => 'Default',\n    'delete_bread_before_table' => 'Assicurati di eliminare il BREAD in questa tabella prima di eliminare la tabella.',\n    'delete_table_confirm'      => 'Sì, elimina questa tabella',\n    'delete_table_question'     => 'Sei sicuro di voler eliminare la tabella :table?',\n    'editing_table'             => 'Modificando la tabella :table',\n    'edit_table'                => 'Modifica la tabella :table qui sotto',\n    'edit_table_not_exist'      => 'La tabella che vuoi modificare non esiste',\n    'extra'                     => 'Aggiuntivo',\n    'field'                     => 'Campo',\n    'field_safe_failed'         => 'Salvataggio fallito per il campo :field, stiamo tornando indietro!',\n    'index'                     => 'INDICE',\n    'input_type'                => 'Tipo input',\n    'key'                       => 'Chiave',\n    'name_warning'              => 'Per favore dare un nome alla colonna prima di inserire un indice',\n    'no_composites_warning'     => 'Questa tabella ha indici compositi. Si prega di notare che non sono supportati al momento. Fare attenzione quando si tenta di aggiungere/eliminare gli indici.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Dettagli Opzionali',\n    'policy_class'              => 'Nome della Classe Policy',\n    'policy_name'               => 'Nome Policy',\n    'policy_name_ph'            => 'es. \\App\\Policies\\UserPolicy, se lasciato vuoto proverà ad usare quella di default',\n    'primary'                   => 'PRIMARIA',\n    'server_pagination'         => 'Paginazione lato Server',\n    'success_create_table'      => 'Tabella :table creata con successo',\n    'success_created_bread'     => 'Nuovo BREAD creato con successo',\n    'success_delete_table'      => 'Tabella :table eliminata con successo',\n    'success_remove_bread'      => 'BREAD rimosso con successo da :datatype',\n    'success_update_bread'      => 'Aggiornato con successo :datatype BREAD',\n    'success_update_table'      => 'Tabella :table aggiornata con successo',\n    'table_actions'             => 'Azioni Tabella',\n    'table_columns'             => 'Colonne Tabella',\n    'table_has_index'           => 'La tabella ha già un indice primario.',\n    'table_name'                => 'Nome Tabella',\n    'table_no_columns'          => 'La tabella non ha colonne...',\n    'type'                      => 'Tipo',\n    'type_not_supported'        => 'Questo tipo non è supportato',\n    'unique'                    => 'UNICA',\n    'unknown_type'              => 'Tipo sconosciuto',\n    'update_table'              => 'Aggiorna Tabella',\n    'url_slug'                  => 'URL Slug (deve essere unico)',\n    'url_slug_ph'               => 'URL slug (ex. articoli)',\n    'visibility'                => 'Visibilità',\n    'relationship'              => [\n        'relationship'         => 'Relationship',\n        'relationships'        => 'Relationships',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => 'Which column from the',\n        'is_used_to_reference' => 'is used to reference the',\n        'pivot_table'          => 'Pivot Table',\n        'selection_details'    => 'Selection Details',\n        'display_the'          => 'Display the',\n        'store_the'            => 'Store the',\n        'allow_tagging'        => 'Allow Tagging',\n        'easy_there'           => 'Easy there Captain',\n        'before_create'        => 'Before you can create a new relationship you will need to create the BREAD first.<br> Then, return back to edit the BREAD and you will be able to add relationships.<br> Thanks.',\n        'cancel'               => 'Cancel',\n        'add_new'              => 'Add New relationship',\n        'open'                 => 'Open',\n        'close'                => 'Close',\n        'relationship_details' => 'Relationship Details',\n        'browse'               => 'Browse',\n        'read'                 => 'Read',\n        'edit'                 => 'Edit',\n        'add'                  => 'Add',\n        'delete'               => 'Delete',\n        'create'               => 'Create a Relationship',\n        'namespace'            => 'Fully Qualified Model Name (ex. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/it/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Nessun dato disponibile nella tabella',\n    'sInfo'           => 'Visualizzazione _START_ a _END_ di _TOTAL_ elementi',\n    'sInfoEmpty'      => 'Visualizzazione 0 a 0 di 0 elementi',\n    'sInfoFiltered'   => '(filtrati da _MAX_ elementi totali)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Mostra _MENU_ elementi',\n    'sLoadingRecords' => 'Caricando...',\n    'sProcessing'     => 'Processando...',\n    'sSearch'         => 'Cerca:',\n    'sZeroRecords'    => 'Nessun risultato trovato',\n    'oPaginate'       => [\n        'sFirst'    => 'Primo',\n        'sLast'     => 'Ultimo',\n        'sNext'     => 'Successivo',\n        'sPrevious' => 'Precedente',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': attivare per ordinare la colonna in ordine crescente',\n        'sSortDescending' => ': attivare per ordinare la colonna in ordine decrescente',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/it/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Ultima Settimana',\n    'last_year' => 'Ultimo Anno',\n    'this_week' => 'Questa Settimana',\n    'this_year' => 'Questo Anno',\n];\n"
  },
  {
    "path": "publishable/lang/it/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Pagina|Pagine',\n    'page_link_text' => 'Visualizza tutte le pagine',\n    'page_text'      => 'Ci sono :count :string nel tuo database. Premi il bottone qui sotto per vedere tutte le pagine.',\n    'post'           => 'Articolo|Articoli',\n    'post_link_text' => 'Visualizza tutti gli articoli',\n    'post_text'      => 'Ci sono :count :string nel tuo database. Premi il bottone qui sotto per vedere tutti gli articoli.',\n    'user'           => 'Utente|Utenti',\n    'user_link_text' => 'Visualizza tutti gli utenti',\n    'user_text'      => 'Ci sono :count :string nel tuo database. Premi il bottone qui sotto per vedere tutti gli utenti.',\n];\n"
  },
  {
    "path": "publishable/lang/it/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Abbiamo appena creato il symlink mancante per te.',\n    'symlink_created_title'  => 'Il symlink per lo storage mancante è stato creato',\n    'symlink_failed_text'    => 'Non siamo riusciti a generare il symlink mancante per l\\'applicazione. Sembra che il tuo provider di hosting non lo supporti.',\n    'symlink_failed_title'   => 'Non è possibile creare il symlink mancante per lo storage',\n    'symlink_missing_button' => 'Riparalo',\n    'symlink_missing_text'   => 'Non abbiamo trovato un symlink per lo storage. Questo potrebbe causare problemi nel caricare file multimediali dal browser.',\n    'symlink_missing_title'  => 'Symlink per lo storage mancante',\n];\n"
  },
  {
    "path": "publishable/lang/it/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Lasciare vuoto per mantenere lo stesso',\n    'field_select_dd_relationship' => 'Assicurarsi di impostare la relazione appropriata nel metodo :method della classe :class .',\n    'type_checkbox'                => 'Check Box',\n    'type_codeeditor'              => 'Editore del Codice',\n    'type_file'                    => 'File',\n    'type_image'                   => 'Immagine',\n    'type_radiobutton'             => 'Radio Button',\n    'type_richtextbox'             => 'Rich Textbox',\n    'type_selectdropdown'          => 'Select Dropdown',\n    'type_textarea'                => 'Text Area',\n    'type_textbox'                 => 'Text Box',\n];\n"
  },
  {
    "path": "publishable/lang/it/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Azione',\n    'actions'                => 'Azioni',\n    'add'                    => 'Aggiungi',\n    'add_folder'             => 'Aggiungi Cartella',\n    'add_new'                => 'Aggiungi Nuovo',\n    'all_done'               => 'Tutto Fatto',\n    'are_you_sure'           => 'Sei sicuro',\n    'are_you_sure_delete'    => 'Sei sicuro di voler eliminare',\n    'ascending'              => 'Ascendente',\n    'auto_increment'         => 'Incremento Automatico',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Sfoglia',\n    'builder'                => 'Costruttore',\n    'bulk_delete'            => 'Elimina in blocco',\n    'bulk_delete_confirm'    => 'Sì, elimina questi',\n    'bulk_delete_nothing'    => 'Non hai selezionato nulla da eliminare',\n    'cancel'                 => 'Annulla',\n    'choose_type'            => 'Scegli il tipo',\n    'click_here'             => 'Clicca qui',\n    'close'                  => 'Chiudi',\n    'compass'                => 'Bussola',\n    'created_at'             => 'Creato il',\n    'custom'                 => 'Custom',\n    'dashboard'              => 'Bacheca',\n    'database'               => 'Database',\n    'default'                => 'Default',\n    'delete'                 => 'Elimina',\n    'delete_confirm'         => 'Sì, elimina!',\n    'delete_question'        => 'Sei sicuro di volerlo eliminare',\n    'delete_this_confirm'    => 'Sì, eliminalo',\n    'descending'             => 'Discendente',\n    'deselect_all'           => 'Deseleziona TUTTO',\n    'download'               => 'Scarica',\n    'edit'                   => 'Modifica',\n    'drag_drop_info'         => 'Trascina e rilascia gli Elementi sottostanti per riordinarli.',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Spiacenti sembra ci sia stato un problema durante l\\'eliminazione',\n    'error_restoring'        => 'Spiacenti sembra ci sia stato un problema durante il ripristino',\n    'exception'              => 'Eccezione',\n    'featured'               => 'In primo piano',\n    'field_does_not_exist'   => 'Campo non esiste',\n    'home'                   => 'Home',\n    'how_to_use'             => 'Come Usare',\n    'index'                  => 'Indice',\n    'internal_error'         => 'Errore interno',\n    'items'                  => 'item(s)',\n    'keep_sidebar_open'      => 'Yarr! Calate le ancore! (e lascia la barra laterale aperta)',\n    'key'                    => 'Chiave',\n    'last_modified'          => 'Ultima modifica',\n    'length'                 => 'Lunghezza',\n    'locale'                 => 'Locale',\n    'login'                  => 'Login',\n    'logout'                 => 'Logout',\n    'media'                  => 'Media',\n    'menu_builder'           => 'Costruttore del menù',\n    'mimetype_not_allowed'   => 'This mimetype is not allowed',\n    'move'                   => 'Sposta',\n    'name'                   => 'Nome',\n    'new'                    => 'Nuovo',\n    'no'                     => 'No',\n    'no_thanks'              => 'No Grazie',\n    'none'                   => 'None',\n    'not_null'               => 'Non Null',\n    'no_results'             => 'No results',\n    'open'                   => 'Open',\n    'options'                => 'Opzioni',\n    'password'               => 'Password',\n    'permissions'            => 'Permessi',\n    'profile'                => 'Profilo',\n    'public_url'             => 'URL Pubblico',\n    'read'                   => 'Leggi',\n    'rename'                 => 'Rinomina',\n    'remember_me'            => 'Ricordami',\n    'required'               => 'Richiesto',\n    'return_to_list'         => 'Torna alla Lista',\n    'route'                  => 'Percorso',\n    'save'                   => 'Salva',\n    'search'                 => 'Cerca',\n    'select_all'             => 'Seleziona Tutto',\n    'select_group'           => 'Seleziona un Gruppo Esistente o Aggiungi un Nuovo Gruppo',\n    'settings'               => 'Impostazioni',\n    'showing_entries'        => 'Visualizzazione dei risultati da :from a :to di :all|Visualizzazione dei risultati da :from a :to di :all',\n    'submit'                 => 'Invia',\n    'successfully_added_new' => 'Aggiunto con successo',\n    'successfully_deleted'   => 'Eliminato con successo',\n    'successfully_restored'  => 'Ripristinato con successo',\n    'successfully_updated'   => 'Aggiornato con successo',\n    'successfully_created'   => 'Creato con successo',\n    'sweet_success'          => 'Sweet Success!',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'Titolo',\n    'type'                   => 'Tipo',\n    'restore'                => 'Restore',\n    'unsigned'               => 'Valore Assoluto',\n    'unstick_sidebar'        => 'Sbloccare la barra laterale',\n    'update'                 => 'Aggiorna',\n    'update_failed'          => 'Aggiornamento fallito',\n    'updated_order'          => 'Ordinamento aggiornato',\n    'upload'                 => 'Carica',\n    'url'                    => 'URL',\n    'view'                   => 'Visualizza',\n    'viewing'                => 'Visualizzando',\n    'whoopsie'               => 'Whoopsie!',\n    'yes'                    => 'Sì',\n    'yes_please'             => 'Sì, Per favore',\n];\n"
  },
  {
    "path": "publishable/lang/it/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Json non valido',\n    'invalid_message'   => 'Sembra che tu abbia introdotto qualche JSON non valido.',\n    'valid'             => 'Json valido',\n    'validation_errors' => 'Errori di validazione',\n];\n"
  },
  {
    "path": "publishable/lang/it/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Collegati',\n    'signin_below' => 'Accedi Qui Sotto:',\n    'welcome'      => 'Benvenuti in Voyager. L\\'Admin panel che mancava per Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/it/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Aggiungi Nuova Cartella',\n    'audio_support'          => 'Il tuo browser non supporta l\\'elemento audio.',\n    'create_new_folder'      => 'Crea Nuova Cartella',\n    'delete_folder_question' => 'Eliminando una cartella verranno eliminati anche i file e le cartelle al suo interno',\n    'delete_question'        => 'Are you sure you want to delete the following file(s)?',\n    'destination_folder'     => 'Cartella di Destinazione',\n    'drag_drop_info'         => 'Trascina e rilascia i file o premi sotto per caricare',\n    'error_already_exists'   => 'Spiacenti esiste già un file o una cartella con questo nome in questa cartella.',\n    'error_creating_dir'     => 'Spiacenti qualcosa è andato storto nella creazione della cartella, per favore controllate i vostri permessi',\n    'error_deleting_file'    => 'Spiacenti qualcosa è andato storto nell\\'eliminazione di questo file, per favore controllate i vostri permessi',\n    'error_deleting_folder'  => 'Spiacenti qualcosa è andato storto nell\\'eliminazione di questa cartella, per favore controllate i vostri permessi',\n    'error_may_exist'        => 'Un File o una cartella potrebbero già esistere con quel nome. Scegli un altro nome oppure elimina l\\'altro file.',\n    'error_moving'           => 'Spiacenti, sembra che ci sia un problema nello spostare quel file / cartella, per favore controllate di avere i permessi corretti.',\n    'error_uploading'        => 'Caricamento Fallito: Errore sconosciuto!',\n    'files'                  => '1 file|:count files',\n    'files_more'             => 'And :count more',\n    'file_does_not_exist'    => 'File does not exist',\n    'file_removed'           => 'File removed',\n    'files_selected'         => 'files/folder selected',\n    'folder_exists_already'  => 'Spiacenti questa cartella è già esistente, si prega di eliminarla se si desira ricrearla',\n    'image_does_not_exist'   => 'L\\'immagine non esiste',\n    'image_removed'          => 'Immagine rimossa',\n    'library'                => 'Libreria Media',\n    'loading'                => 'CARICAMENTO DEI VOSTRI MEDIA FILES',\n    'max_files_select'       => 'You can only select one file|You can only select a maximum of :count files',\n    'min_files_select'       => 'You must select at least one file|You must select at least :count files',\n    'move_file_folder'       => 'Sposta File/Cartella',\n    'new_file_folder'        => 'Nuovo nome di File/Cartella',\n    'new_folder_name'        => 'Nuovo Nome di Cartella',\n    'no_files_here'          => 'Nessun file presente.',\n    'no_files_in_folder'     => 'Nessun file in questa cartella.',\n    'nothing_selected'       => 'Nessun file o cartella selezionata',\n    'rename_file_folder'     => 'Rinomina File/Cartella',\n    'success_uploaded_file'  => 'Il nuovo file è stato caricato con successo!',\n    'success_uploading'      => 'Immagine caricata con successo!',\n    'success_moved'          => 'Successfully moved file/folder',\n    'success_renamed'        => 'Successfully renamed file/folder',\n    'uploading_wrong_type'   => 'Caricamento Fallito: File non supportato o troppo grande per essere caricato!',\n    'crop'                   => 'Crop',\n    'crop_and_create'        => 'Crop & Create',\n    'crop_override_confirm'  => 'It will override the original image, are you sure?',\n    'crop_image'             => 'Crop Image',\n    'success_crop_image'     => 'Successfully cropped the image',\n    'height'                 => 'Height: ',\n    'title'                  => 'Title',\n    'type'                   => 'Type',\n    'size'                   => 'Size',\n    'public_url'             => 'Public URL',\n    'last_modified'          => 'Last Modified',\n    'browser_video_support'  => 'Your browser does not support the video tag.',\n    'browser_audio_support'  => 'Your browser does not support the audio element.',\n    'width'                  => 'Width: ',\n    'add_all_selected'       => 'Aggiungi tutti i selezionati',\n];\n"
  },
  {
    "path": "publishable/lang/it/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Colore in RGB o hex (opzionale)',\n    'color_ph'             => 'Colore (es. #ffffff o rgb(255, 255, 255)',\n    'create_new_item'      => 'Crea un nuovo elemento del Menù',\n    'delete_item_confirm'  => 'Sì, Elimina questo elemento del Menù',\n    'delete_item_question' => 'Sei sicuro di voler eliminare questo elemento del menù?',\n    'drag_drop_info'       => 'Trascina gli elementi del menù qui sotto per riordinarli.',\n    'dynamic_route'        => 'Percorso Dinamico',\n    'edit_item'            => 'Modifica Elemento di Menù',\n    'icon_class'           => 'Classe Font Icon per l\\'elemento del menù (usare una',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icon Class (opzionale)',\n    'item_route'           => 'Percorso per l\\'elemento del menù',\n    'item_title'           => 'Titolo dell\\'elemento del menù',\n    'link_type'            => 'Tipo Link',\n    'new_menu_item'        => 'Nuovo Elemento di Menù',\n    'open_in'              => 'Apri in',\n    'open_new'             => 'Nuova Tab/Finestra',\n    'open_same'            => 'Stessa Tab/Finestra',\n    'route_parameter'      => 'Parametri percorso (se necessari)',\n    'static_url'           => 'URL Statico',\n    'successfully_created' => 'Elemento del Menù Creato con Successo.',\n    'successfully_deleted' => 'Elemento del Menù Eliminato con Successo.',\n    'successfully_updated' => 'Elemento del Menù Aggiornato con Successo.',\n    'updated_order'        => 'Ordine menù aggiornato con successo.',\n    'url'                  => 'URL per l\\'Elemento del Menù',\n    'usage_hint'           => 'È possibile stampare un menu ovunque nel tuo sito chiamando|Puoi stampare questo menu ovunque nel tuo sito chiamando',\n];\n"
  },
  {
    "path": "publishable/lang/it/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Additional Fields',\n    'category'         => 'Categoria Articolo',\n    'content'          => 'Contenuto Articolo',\n    'details'          => 'Dettagli Articolo',\n    'excerpt'          => 'Estratto <small>Piccola descrizione di questo articolo</small>',\n    'image'            => 'Immagine Articolo',\n    'meta_description' => 'Meta Description',\n    'meta_keywords'    => 'Meta Keywords',\n    'new'              => 'Crea Nuovo Articolo',\n    'seo_content'      => 'Contenuto SEO',\n    'seo_title'        => 'Titolo SEO',\n    'slug'             => 'URL slug',\n    'status'           => 'Stato Articolo',\n    'status_draft'     => 'bozza',\n    'status_pending'   => 'in attesa',\n    'status_published' => 'pubblicato',\n    'title'            => 'Titolo Articolo',\n    'title_sub'        => 'Il titolo per il tuo articolo',\n    'update'           => 'Aggiorna Articolo',\n];\n"
  },
  {
    "path": "publishable/lang/it/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'Avatar',\n    'edit'             => 'Modifica il mio profilo',\n    'edit_user'        => 'Modifica Utente',\n    'password'         => 'Password',\n    'password_hint'    => 'Lasciare vuoto per mantenere lo stesso',\n    'role'             => 'Role',\n    'roles'            => 'Ruolo',\n    'role_default'     => 'Ruolo predefinito',\n    'roles_additional' => 'Ruoli addizionali',\n    'user_role'        => 'Ruolo Utente',\n];\n"
  },
  {
    "path": "publishable/lang/it/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Autore',\n        'avatar'           => 'Avatar',\n        'body'             => 'Body',\n        'category'         => 'Categoria',\n        'created_at'       => 'Creato il',\n        'display_name'     => 'Nome visualizzato',\n        'email'            => 'Email',\n        'excerpt'          => 'Excerpt',\n        'featured'         => 'Featured',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Description',\n        'meta_keywords'    => 'Meta Keywords',\n        'name'             => 'Nome',\n        'order'            => 'Ordine',\n        'page_image'       => 'Page Image',\n        'parent'           => 'Parent',\n        'password'         => 'Password',\n        'post_image'       => 'Post Image',\n        'remember_token'   => 'Remember Token',\n        'role'             => 'Ruolo',\n        'seo_title'        => 'SEO Title',\n        'slug'             => 'Slug',\n        'status'           => 'Stato',\n        'title'            => 'Titolo',\n        'updated_at'       => 'Aggiornato il',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Categoria',\n            'plural'   => 'Categorie',\n        ],\n        'menu'     => [\n            'singular' => 'Menu',\n            'plural'   => 'Menus',\n        ],\n        'page'     => [\n            'singular' => 'Pagina',\n            'plural'   => 'Pagine',\n        ],\n        'post'     => [\n            'singular' => 'Post',\n            'plural'   => 'Posts',\n        ],\n        'role'     => [\n            'singular' => 'Ruolo',\n            'plural'   => 'Ruoli',\n        ],\n        'user'     => [\n            'singular' => 'Utente',\n            'plural'   => 'Utenti',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Categorie',\n        'compass'      => 'Compass',\n        'dashboard'    => 'Dashboard',\n        'database'     => 'Database',\n        'media'        => 'Media',\n        'menu_builder' => 'Menu Builder',\n        'pages'        => 'Pagine',\n        'posts'        => 'Posts',\n        'roles'        => 'Ruoli',\n        'settings'     => 'Impostazioni',\n        'tools'        => 'Tools',\n        'users'        => 'Utenti',\n    ],\n    'roles'      => [\n        'admin' => 'Amministratore',\n        'user'  => 'Utente normale',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Admin Background Image',\n            'description'                => 'Admin Description',\n            'description_value'          => 'Welcome to Voyager. The Missing Admin for Laravel',\n            'google_analytics_client_id' => 'Google Analytics Client ID (used for admin dashboard)',\n            'icon_image'                 => 'Admin Icon Image',\n            'loader'                     => 'Admin Loader',\n            'title'                      => 'Admin Title',\n        ],\n        'site'  => [\n            'description'                  => 'Descrizione sito',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Logo Sito',\n            'title'                        => 'Titolo Sito',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/it/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Puoi ottenere il valore di ogni impostazione in qualsiasi punto del tuo sito chiamando',\n    'save'                 => 'Salva Impostazioni',\n    'new'                  => 'Nuova Impostazione',\n    'help_name'            => 'Es Nome Setting: Titolo Admin',\n    'help_key'             => 'Es Chiave Setting: titolo_admin',\n    'help_option'          => '(facoltativo, si applica solo a determinati tipi come il riquadro a discesa o il pulsante di scelta rapida)',\n    'add_new'              => 'Aggiungi Nuova Impostazione',\n    'delete_question'      => 'Sei sicuro di voler eliminare l\\'impostazione :setting ?',\n    'delete_confirm'       => 'Sì, Elimina questa Impostazione',\n    'successfully_created' => 'Impostazione Creata con Successo',\n    'successfully_saved'   => 'Impostazione Salvata con Successo',\n    'successfully_deleted' => 'Impostazione Eliminata con Successo',\n    'already_at_top'       => 'Questo è già in cima all\\'elenco',\n    'already_at_bottom'    => 'Questo è già in fondo all\\'elenco',\n    'key_already_exists'   => 'La Chiave :key è già esistente',\n    'moved_order_up'       => 'Impostazione :name spostato in sù',\n    'moved_order_down'     => 'Impostazione :name spostato in giù',\n    'successfully_removed' => 'Il valore dell\\'Impostazione :name è stato eliminato',\n    'group_general'        => 'Generale',\n    'group_admin'          => 'Amministratore',\n    'group_site'           => 'Sito',\n    'group'                => 'Gruppo',\n    'help_group'           => 'Questa impostazione è assegnata a',\n];\n"
  },
  {
    "path": "publishable/lang/it/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Realizzato con <i class=\"voyager-heart\"></i> da',\n    'footer_copyright2' => 'Realizzato con rum, e poi ancora rum',\n];\n"
  },
  {
    "path": "publishable/lang/ja/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'ページビュー毎',\n    'by_sessions'            => 'セッション毎',\n    'by_users'               => 'ユーザー毎',\n    'no_client_id'           => 'アナリティクスを表示するには、GoogleアナリティクスでクライアントIDを取得し、設定の<code>google_analytics_client_id</code>に追加する必要があります。 Googleデベロッパーコンソールでキーを取得:',\n    'set_view'               => 'ビューを選択',\n    'this_vs_last_week'      => '今週 vs 先週',\n    'this_vs_last_year'      => '今年 vs 昨年',\n    'top_browsers'           => '上位ブラウザ',\n    'top_countries'          => '上位国',\n    'various_visualizations' => 'さまざまな視覚化',\n];\n"
  },
  {
    "path": "publishable/lang/ja/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'このテーブルにBREADを追加',\n    'bread_crud_actions'     => 'BREAD/CRUD アクション',\n    'bread_info'             => 'BREAD情報',\n    'controller_name_hint'   => '例: PageController, 空にすると BREAD Controller が使われます',\n    'create_bread_for_table' => ':table テーブル用のBREADを作成',\n    'delete_bread'           => 'BREADを削除',\n    'delete_bread_conf'      => 'はい、このBREADを削除します',\n    'delete_bread_quest'     => ':table テーブル用のBREADを削除してもよろしいですか？',\n    'edit_bread'             => 'BREAD編集',\n    'edit_bread_for_table'   => ':table テーブルのBREADを編集',\n    'error_creating_bread'   => '申し訳ありません。このBREADの作成中に問題が発生している可能性があります',\n    'error_removing_bread'   => '申し訳ありません。このBREADを削除中に問題が発生しました',\n    'error_updating_bread'   => '申し訳ありません。このBREADの更新中に問題が発生している可能性があります',\n    'error_tagging'          => '申し訳ありません。レコードを作成する際に問題が発生している可能性があります。テーブルに他のフィールドのデフォルトが設定されていることを確認してください。',\n    'success_created_bread'  => '新しいBREADを作成できました',\n    'success_remove_bread'   => ':datatype からBREADを削除できました',\n    'success_update_bread'   => ':datatype BREADを更新できました',\n    'controller_name'        => 'コントローラー名',\n    'create_migration'       => 'このテーブル用のマイグレーションを作成しますか？',\n    'description'            => '説明',\n    'display_name'           => '表示名',\n    'display_name_plural'    => '表示名 (複数形)',\n    'display_name_singular'  => '表示名 (単数形)',\n    'edit_rows'              => '以下の :table テーブルの行を編集',\n    'generate_permissions'   => 'パーミッションを変換',\n    'icon_class'             => 'このテーブル用のアイコン',\n    'icon_hint'              => 'アイコン (オプション)  これを使用:',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'モデルクラス名',\n    'model_name'             => 'モデル名',\n    'model_name_ph'          => '例: \\App\\User, 空にするとテーブル名が使われます',\n    'order'                  => '並び順',\n    'order_column'           => '並び順カラム',\n    'order_column_ph'        => '並び順自体を格納するカラム',\n    'order_ident_column'     => '並び順表示カラム',\n    'order_ident_column_ph'  => '並び順ページで表示する内容のカラム',\n    'ordering_not_set'       => '最初に並び順を定義する必要があります',\n    'policy_class'           => 'ポリシークラス名',\n    'policy_name'            => 'ポリシー名',\n    'policy_name_ph'         => '例: \\App\\Policies\\UserPolicy, 空にするとデフォルトのポリシーが使われます',\n    'server_pagination'      => 'サーバーサイド ページネーション',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URLスラッグ (必ずユニークにしてください)',\n    'url_slug_ph'            => 'URLスラッグ (例: posts)',\n];\n"
  },
  {
    "path": "publishable/lang/ja/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Voyagerコンパスへようこそ。 すべての素晴らしいアプリケーションには正しい方向を示すコンパスが必要です。\n        このセクションでは、アプリケーションを構築する際に役立つ多くのリソースと管理タスクを紹介します。',\n    'links'         => [\n        'title'                 => 'リンク',\n        'documentation'         => 'ドキュメント(英語サイト)',\n        'voyager_homepage'      => 'Voyager ホームページ (英語サイト)',\n    ],\n    'commands'      => [\n        'title'                 => 'コマンド',\n        'text'                  => 'VoyagerからArtisanコマンドを実行します。',\n        'clear_output'          => '出力をクリア',\n        'command_output'        => 'Artisanコマンドのアウトプット',\n        'additional_args'       => '引数を追加しますか？',\n        'run_command'           => 'コマンドを実行',\n    ],\n    'resources'     => [\n        'title'                 => 'リソース',\n        'text'                  => 'Voyagerリソースはより素早く探しものをする手助けとなります。',\n\n    ],\n    'logs'          => [\n        'title'                 => 'ログ',\n        'text'                  => 'アプリのログ',\n        'file_too_big'          => 'ログファイル >50M, ダウンロードしてください。',\n        'level'                 => 'レベル',\n        'context'               => 'コンテキスト',\n        'date'                  => '日付',\n        'content'               => '内容',\n        'download_file'         => 'ファイルをダウンロード',\n        'delete_file'           => 'ファイルを削除',\n        'delete_all_files'      => 'すべてのファイルを削除',\n        'delete_success'        => 'ログファイルの削除できました:',\n        'delete_all_success'    => 'すべてのログファイルの削除できました',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'フォント',\n        'font_class'            => 'Voyager Fonts Class マッピング',\n        'font_character'        => 'Voyager Fonts Character マッピング',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ja/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => '新しいカラムを追加',\n    'add_softdeletes'           => '論理削除を追加',\n    'add_timestamps'            => '作成日時・更新日時を追加',\n    'already_exists'            => 'すでに存在しています',\n    'already_exists_table'      => ':table テーブルはすでに存在しています',\n    'bread_crud_actions'        => 'BREAD/CRUD アクション',\n    'bread_info'                => 'BREAD情報',\n    'browse_bread'              => 'BREADを表示',\n    'column'                    => 'カラム',\n    'composite_warning'         => '注意: このカラムは複合インデックスの一部です',\n    'create_new_table'          => '新しいテーブルを作成',\n    'create_your_new_table'     => '新しいテーブルを作成',\n    'create_model_table'        => 'このテーブルのモデルを作成しますか？',\n    'default'                   => 'デフォルト',\n    'delete_bread_before_table' => 'テーブルを削除する前に、このテーブルのBREADを削除してください。',\n    'delete_table_confirm'      => 'はい, このテーブルを削除します',\n    'delete_table_question'     => ':table テーブルを削除してもよろしいですか？',\n    'editing_table'             => ':table テーブルを編集中',\n    'edit_table'                => ':table テーブルを編集',\n    'edit_table_not_exist'      => '編集しようとしたテーブルが存在しません',\n    'extra'                     => 'その他',\n    'field'                     => 'フィールド',\n    'field_safe_failed'         => ':field フィールドの保存に失敗しました, ロールバックされました！',\n    'index'                     => 'インデックス',\n    'input_type'                => '入力タイプ',\n    'key'                       => 'キー',\n    'name_warning'              => 'インデックスを追加する前に、カラムを命名してください',\n    'no_composites_warning'     => 'このテーブルは複合インデックスを持っています。 現時点ではサポートされていませんのでご注意ください。 インデックスを追加/削除しようとするときは注意してください。',\n    'null'                      => 'Null',\n    'optional_details'          => 'オプション詳細',\n    'policy_class'              => 'ポリシークラス名',\n    'policy_name'               => 'ポリシー名',\n    'policy_name_ph'            => '例: \\App\\Policies\\UserPolicy, 空にするとデフォルトの使用を試みます',\n    'primary'                   => 'プライマリ',\n    'server_pagination'         => 'サーバーサイド ページネーション',\n    'success_create_table'      => ':table テーブルを作成できました',\n    'success_created_bread'     => '新しいBREADを作成できました',\n    'success_delete_table'      => ':table テーブルを削除できました',\n    'success_remove_bread'      => ':datatype からBREADを削除できました',\n    'success_update_bread'      => ':datatype BREADを更新できました',\n    'success_update_table'      => ':table テーブルを更新できました',\n    'table_actions'             => 'テーブル アクション',\n    'table_columns'             => 'テーブル カラム',\n    'table_has_index'           => 'テーブルはすでに主インデックスを持っています。',\n    'table_name'                => 'テーブル名',\n    'table_no_columns'          => 'テーブルにカラムがありません...',\n    'type'                      => 'タイプ',\n    'type_not_supported'        => 'この型はサポートされていません',\n    'unique'                    => 'ユニーク',\n    'unknown_type'              => '不明なタイプ',\n    'update_table'              => 'テーブルを更新',\n    'url_slug'                  => 'URLスラッグ (必ずユニークにしてください)',\n    'url_slug_ph'               => 'URLスラッグ (例: posts)',\n    'visibility'                => '可視性',\n    'relationship'              => [\n        'relationship'         => 'リレーションシップ',\n        'relationships'        => 'リレーションシップ',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => 'カラムを選択（',\n        'is_used_to_reference' => 'から)。次の参照に使われます:',\n        'pivot_table'          => 'ピボットテーブル',\n        'selection_details'    => '詳細',\n        'display_the'          => '表示',\n        'store_the'            => '格納',\n        'allow_tagging'        => 'タグ付けを許可する',\n        'easy_there'           => '簡単です, 船長',\n        'before_create'        => '新しいリレーションシップを作成する前に、最初にBREADを作成する必要があります。<br> BREADを編集するために戻ってください。その後、リレーションシップを追加することができます。<br>ありがとうございます。',\n        'cancel'               => 'キャンセル',\n        'add_new'              => '新しいリレーションシップを追加',\n        'open'                 => '開く',\n        'close'                => '閉じる',\n        'relationship_details' => 'リレーションシップ詳細',\n        'browse'               => '閲覧',\n        'read'                 => '詳細',\n        'edit'                 => '編集',\n        'add'                  => '追加',\n        'delete'               => '削除',\n        'create'               => 'リレーションシップを作成',\n        'namespace'            => 'モデル ネームスペース (例: App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ja/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'テーブルにデータがありません',\n    'sInfo'           => '_TOTAL_ エントリ中の _START_ 〜 _END_ を表示しています',\n    'sInfoEmpty'      => '表示中 0 〜 0 ( 0 エントリ中)',\n    'sInfoFiltered'   => '(全 _MAX_ エントリからフィルタリング中)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => '_MENU_ エントリを表示',\n    'sLoadingRecords' => '読込中...',\n    'sProcessing'     => '処理中...',\n    'sSearch'         => '検索:',\n    'sZeroRecords'    => '該当するレコードがありませんでした',\n    'oPaginate'       => [\n        'sFirst'    => '最初',\n        'sLast'     => '最後',\n        'sNext'     => '次',\n        'sPrevious' => '前',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': 昇順の並べ替えを有効にする',\n        'sSortDescending' => ': 降順の並べ替えを有効にする',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ja/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => '先週',\n    'last_year' => '昨年',\n    'this_week' => '今週',\n    'this_year' => '今年',\n];\n"
  },
  {
    "path": "publishable/lang/ja/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'ページ|ページ',\n    'page_link_text' => 'すべてのページを表示',\n    'page_text'      => 'データベースに:count:stringが存在します。 すべての:stringを表示するには下記のボタンをクリックください。',\n    'post'           => '投稿|投稿',\n    'post_link_text' => 'すべての投稿を表示',\n    'post_text'      => 'データベースに:count:stringが存在します。 すべての:stringを表示するには下記のボタンをクリックください。',\n    'user'           => 'ユーザー|ユーザー',\n    'user_link_text' => 'すべてのユーザーを表示',\n    'user_text'      => 'データベースに:count:stringが存在します。 すべての:stringを表示するには下記のボタンをクリックください。',\n];\n"
  },
  {
    "path": "publishable/lang/ja/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => '存在しないシンボリックリンクを作成しました。',\n    'symlink_created_title'  => '存在しないストレージのシンボリックリンクが作成されました',\n    'symlink_failed_text'    => '存在しないシンボリックリンクの変換に失敗しました。このホストではサポートされていないようです。',\n    'symlink_failed_title'   => '存在しないストレージのシンボリックリンクが作成できませんでした',\n    'symlink_missing_button' => '解決する',\n    'symlink_missing_text'   => 'ストレージのシンボリックリンクが見つかりません。 ブラウザからメディアファイルを読み込む際に問題が発生する可能性があります。',\n    'symlink_missing_title'  => '存在しないストレージのシンボリックリンク',\n];\n"
  },
  {
    "path": "publishable/lang/ja/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => '空にすれば現状が維持されます',\n    'field_select_dd_relationship' => ':classクラスの:methodメソッドで適切な関係を設定してください。',\n    'type_checkbox'                => 'チェックボックス',\n    'type_codeeditor'              => 'コードエディタ',\n    'type_file'                    => 'ファイル',\n    'type_image'                   => 'イメージ',\n    'type_radiobutton'             => 'ラジオボタン',\n    'type_richtextbox'             => 'リッチテキスト',\n    'type_selectdropdown'          => 'ドロップダウンリスト',\n    'type_textarea'                => 'テキストエリア',\n    'type_textbox'                 => 'テキスト',\n];\n"
  },
  {
    "path": "publishable/lang/ja/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'アクション',\n    'actions'                => 'アクション',\n    'add'                    => '追加',\n    'add_folder'             => 'フォルダーを追加',\n    'add_new'                => '新しく追加',\n    'all_done'               => 'すべて完了しました',\n    'are_you_sure'           => 'よろしいですか',\n    'are_you_sure_delete'    => '削除してもよろしいですか？',\n    'auto_increment'         => 'オートインクリメント',\n    'bread'                  => 'BREAD',\n    'browse'                 => '閲覧',\n    'builder'                => 'ビルダー',\n    'bulk_delete'            => '一括削除',\n    'bulk_delete_confirm'    => 'はい, これらを削除します ',\n    'bulk_delete_nothing'    => '削除するものを選択していません',\n    'cancel'                 => 'キャンセル',\n    'choose_type'            => 'タイプを選択',\n    'click_here'             => 'ここをクリック',\n    'close'                  => '閉じる',\n    'compass'                => 'コンパス',\n    'created_at'             => '登録日時',\n    'custom'                 => 'カスタム',\n    'dashboard'              => 'ダッシュボード',\n    'database'               => 'データベース',\n    'default'                => 'デフォルト',\n    'delete'                 => '削除',\n    'delete_confirm'         => 'はい, 削除します！',\n    'delete_question'        => '削除してもよろしいですか？',\n    'delete_this_confirm'    => 'はい, これを削除します ',\n    'deselect_all'           => '選択解除',\n    'download'               => 'ダウンロード',\n    'drag_drop_info'         => 'アイテムをドラッグ＆ドロップして再配置します。',\n    'edit'                   => '編集',\n    'email'                  => 'E-mail',\n    'error_deleting'         => '申し訳ありません。これを削除する際に問題が発生しました ',\n    'exception'              => '例外',\n    'featured'               => 'おすすめ',\n    'field_does_not_exist'   => 'フィールドが存在しません',\n    'how_to_use'             => '使い方',\n    'index'                  => 'インデックス',\n    'internal_error'         => '内部エラー',\n    'items'                  => 'アイテム',\n    'keep_sidebar_open'      => 'やぁ！ アンカーをドロップ！ (サイドバーの表示をキープ)',\n    'key'                    => 'キー',\n    'last_modified'          => '最終更新',\n    'length'                 => '長さ',\n    'locale'                 => 'ロケール',\n    'login'                  => 'ログイン',\n    'media'                  => 'メディア',\n    'menu_builder'           => 'メニュービルダー',\n    'move'                   => '移動',\n    'name'                   => '名称',\n    'new'                    => '新しい',\n    'no'                     => 'いいえ',\n    'no_thanks'              => 'いいえ',\n    'none'                   => 'なし',\n    'not_null'               => 'Not Null',\n    'no_results'             => 'No results',\n    'options'                => 'オプション',\n    'password'               => 'パスワード',\n    'permissions'            => 'パーミッション',\n    'profile'                => 'プロフィール',\n    'public_url'             => '公開URL',\n    'read'                   => '詳細',\n    'rename'                 => 'リネーム',\n    'required'               => '必須',\n    'return_to_list'         => 'リストへ戻る',\n    'route'                  => 'ルート',\n    'save'                   => '保存',\n    'search'                 => '検索',\n    'select_all'             => 'すべて選択',\n    'select_group'           => '既存のグループを選択、または、新しく追加',\n    'settings'               => '設定',\n    'showing_entries'        => ':all エントリー中 :from 〜 :to を表示しています |:all エントリー中 :from 〜 :to を表示しています',\n    'submit'                 => '送信',\n    'successfully_added_new' => '新しく追加できました',\n    'successfully_deleted'   => '削除できました',\n    'successfully_updated'   => '更新できました',\n    'timestamp'              => 'タイムスタンプ',\n    'title'                  => 'タイトル',\n    'type'                   => 'タイプ',\n    'unsigned'               => '符号なし',\n    'unstick_sidebar'        => 'サイドバーを引き離す',\n    'update'                 => '更新',\n    'update_failed'          => '更新に失敗しました',\n    'updated_order'          => '並び順を更新しました',\n    'upload'                 => 'アップロード',\n    'url'                    => 'URL',\n    'view'                   => '表示',\n    'viewing'                => '表示中',\n    'yes'                    => 'はい',\n    'yes_please'             => 'はい',\n];\n"
  },
  {
    "path": "publishable/lang/ja/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => '無効なJSONです',\n    'invalid_message'   => '無効なJSONを導入したようです',\n    'valid'             => '有効なJSON',\n    'validation_errors' => 'バリデーションエラー',\n];\n"
  },
  {
    "path": "publishable/lang/ja/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'ログイン',\n    'signin_below' => 'サインイン:',\n    'welcome'      => 'Voyagerへようこそ. The Missing Admin for Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/ja/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => '新しいフォルダーを追加',\n    'audio_support'          => 'このブラウザはaudio属性をサポートしていません。',\n    'create_new_folder'      => '新しいフォルダーを作成',\n    'delete_folder_question' => 'このフォルダ配下のすべてのフォルダとファイルが削除されます',\n    'destination_folder'     => '移動先フォルダ',\n    'drag_drop_info'         => 'ドラッグ＆ドロップ、または、下記をクリックしてアップロード',\n    'error_already_exists'   => '申し訳ありません。このフォルダ内に同名のファイル/フォルダがすでに存在しています。',\n    'error_creating_dir'     => '申し訳ありません。ディレクトリの作成に失敗したようです。パーミッションを確認してください。',\n    'error_deleting_file'    => '申し訳ありません。ファイルの削除に失敗したようです。パーミッションを確認してください。',\n    'error_deleting_folder'  => '申し訳ありません。フォルダの削除に失敗したようです。パーミッションを確認してください。',\n    'error_may_exist'        => 'この名前のファイル/フォルダがすでに存在しています。違う名前を選択するか、既存のものを削除してください。',\n    'error_moving'           => '申し訳ありません。ファイル/フォルダの移動に失敗したようです。正しいパーミッションになっていることを確認してください。',\n    'error_uploading'        => 'アップロード失敗: 不明なエラーが発生しました！',\n    'folder_exists_already'  => '申し訳ありません。フォルダがすでに存在しています。もし再作成するならば、既存のフォルダを削除してください。',\n    'image_does_not_exist'   => 'イメージが存在しません',\n    'image_removed'          => 'イメージを削除しました',\n    'library'                => 'メディアライブラリ',\n    'loading'                => 'メディアファイルを読込中',\n    'move_file_folder'       => 'ファイル/フォルダを移動',\n    'new_file_folder'        => '新しいファイル/フォルダの名前',\n    'new_folder_name'        => '新しいフォルダ名',\n    'no_files_here'          => 'ファイルがありません。',\n    'no_files_in_folder'     => 'このフォルダにはファイルがありません。',\n    'nothing_selected'       => 'ファイル/フォルダが選択されていません',\n    'rename_file_folder'     => 'ファイル/フォルダをリネーム',\n    'success_uploaded_file'  => '新しいファイルのアップロードができました！',\n    'success_uploading'      => 'イメージのアップロードができました！',\n    'uploading_wrong_type'   => 'アップロード失敗: 未サポートのファイル形式、または、ファイルサイズが大き過ぎます！',\n    'video_support'          => 'このブラウザはvideoタグをサポートしていません。',\n    'crop'                   => 'クロップ',\n    'crop_and_create'        => 'クロップ & 作成',\n    'crop_override_confirm'  => 'オリジナルイメージを上書きします。よろしいですか？',\n    'crop_image'             => '画像をクロップ',\n    'success_crop_image'     => '画像をクロップできました',\n    'height'                 => '高さ: ',\n    'title'                  => 'タイトル',\n    'type'                   => 'タイプ',\n    'size'                   => 'サイズ',\n    'public_url'             => '公開URL',\n    'last_modified'          => '最終更新',\n    'browser_video_support'  => 'このブラウザはvideoタグをサポートしていません。',\n    'browser_audio_support'  => 'このブラウザはaudio属性をサポートしていません。',\n    'width'                  => '幅: ',\n    'add_all_selected'       => '選択したすべてを追加',\n];\n"
  },
  {
    "path": "publishable/lang/ja/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => '色 (RGB または Hex) (オプション)',\n    'color_ph'             => '色指定, 例: #ffffff または rgb(255, 255, 255)',\n    'create_new_item'      => '新しいメニューアイテムを作成',\n    'delete_item_confirm'  => 'はい、このメニューアイテムを削除します',\n    'delete_item_question' => 'このメニューアイテムを削除してもよろしいですか？',\n    'drag_drop_info'       => 'メニューアイテムをドラッグ＆ドロップして再配置します。',\n    'dynamic_route'        => '動的ルート',\n    'edit_item'            => 'メニューアイテムを編集',\n    'icon_class'           => 'メニューアイテムのFont Iconクラス。 (これを使用:',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'アイコンクラス (オプション)',\n    'item_route'           => 'メニューアイテムのルート',\n    'item_title'           => 'メニューアイテムのタイトル',\n    'link_type'            => 'リンクタイプ',\n    'new_menu_item'        => '新しいメニューアイテム',\n    'open_in'              => '開き方',\n    'open_new'             => '新しいタブ/ウィンドウ',\n    'open_same'            => '同じタブ/ウィンドウ',\n    'route_parameter'      => 'ルートパラメータ (もしあれば)',\n    'static_url'           => '静的URL',\n    'successfully_created' => '新しいメニューアイテムを作成できました。',\n    'successfully_deleted' => 'メニューアイテムを削除できました。',\n    'successfully_updated' => 'メニューアイテムを更新できました。',\n    'updated_order'        => 'メニューアイテムの並び順を更新できました。',\n    'url'                  => 'メニューアイテムへのURL',\n    'usage_hint'           => 'サイトの任意の場所にメニューを表示することができます。|サイトの任意の場所にこのメニューを表示することができます。',\n];\n"
  },
  {
    "path": "publishable/lang/ja/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> '追加フィールド',\n    'category'         => '投稿カテゴリー',\n    'content'          => '投稿内容',\n    'details'          => '投稿詳細',\n    'excerpt'          => '抜粋<small>この記事の簡潔な説明</ small>',\n    'image'            => '投稿イメージ',\n    'meta_description' => 'メタ 説明',\n    'meta_keywords'    => 'メタ キーワード',\n    'new'              => '新しい投稿を作成',\n    'seo_content'      => 'SEO内容',\n    'seo_title'        => 'SEOタイトル',\n    'slug'             => 'URLスラッグ',\n    'status'           => '投稿ステータス',\n    'status_draft'     => 'ドラフト',\n    'status_pending'   => 'ペンディング',\n    'status_published' => '公開中',\n    'title'            => '投稿タイトル',\n    'title_sub'        => 'この投稿のタイトル',\n    'update'           => '投稿を更新',\n];\n"
  },
  {
    "path": "publishable/lang/ja/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'アバター',\n    'edit'             => 'プロフィールを編集',\n    'edit_user'        => 'ユーザーを編集',\n    'password'         => 'パスワード',\n    'password_hint'    => '空にすれば現状が維持されます',\n    'role'             => 'ロール',\n    'roles'            => 'ロール',\n    'role_default'     => 'デフォルトロール',\n    'roles_additional' => '追加ロール',\n    'user_role'        => 'ユーザーロール',\n];\n"
  },
  {
    "path": "publishable/lang/ja/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => '作成者',\n        'avatar'           => 'アバター',\n        'body'             => '本文',\n        'category'         => 'カテゴリー',\n        'created_at'       => '作成日時',\n        'display_name'     => '表示名',\n        'email'            => 'Email',\n        'excerpt'          => '抜粋',\n        'featured'         => '注目',\n        'id'               => 'ID',\n        'meta_description' => 'メタ 説明',\n        'meta_keywords'    => 'メタ キーワード',\n        'name'             => '名前',\n        'order'            => '並び順',\n        'page_image'       => 'ページイメージ',\n        'parent'           => '親',\n        'password'         => 'パスワード',\n        'post_image'       => '投稿イメージ',\n        'remember_token'   => 'トークン記憶',\n        'role'             => 'ロール',\n        'seo_title'        => 'SEOタイトル',\n        'slug'             => 'スラッグ',\n        'status'           => 'ステータス',\n        'title'            => 'タイトル',\n        'updated_at'       => '更新日時',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Category',\n            'plural'   => 'Categories',\n        ],\n        'menu'     => [\n            'singular' => 'Menu',\n            'plural'   => 'Menus',\n        ],\n        'page'     => [\n            'singular' => 'Page',\n            'plural'   => 'Pages',\n        ],\n        'post'     => [\n            'singular' => 'Post',\n            'plural'   => 'Posts',\n        ],\n        'role'     => [\n            'singular' => 'Role',\n            'plural'   => 'Roles',\n        ],\n        'user'     => [\n            'singular' => 'User',\n            'plural'   => 'Users',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Categories',\n        'compass'      => 'Compass',\n        'dashboard'    => 'Dashboard',\n        'database'     => 'Database',\n        'media'        => 'Media',\n        'menu_builder' => 'Menu Builder',\n        'pages'        => 'Pages',\n        'posts'        => 'Posts',\n        'roles'        => 'Roles',\n        'settings'     => 'Settings',\n        'tools'        => 'Tools',\n        'users'        => 'Users',\n    ],\n    'roles'      => [\n        'admin' => '管理者',\n        'user'  => '一般ユーザー',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => '管理者 背景イメージ',\n            'description'                => '管理者 説明',\n            'description_value'          => 'Voyagerへようこそ. The Missing Admin for Laravel',\n            'google_analytics_client_id' => 'Googleアナリティクス クライアントID (管理ダッシュボード用)',\n            'icon_image'                 => '管理者 アイコンイメージ',\n            'loader'                     => '管理者 ローダー',\n            'title'                      => '管理者 タイトル',\n        ],\n        'site'  => [\n            'description'                  => 'サイト説明',\n            'google_analytics_tracking_id' => 'Googleアナリティクス トラッキングID',\n            'logo'                         => 'サイト ロゴ',\n            'title'                        => 'サイト タイトル',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ja/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'サイト内で呼び出せば、どこでも設定値を取得できます。',\n    'save'                 => '設定を保存',\n    'new'                  => '新しい設定',\n    'help_name'            => '設定名 例: Admin Title',\n    'help_key'             => '設定キー 例: admin_title',\n    'help_option'          => '(ドロップダウンボックスやラジオボタンなどの特定のタイプにのみ適用されます)',\n    'add_new'              => '新しい設定を追加',\n    'delete_question'      => ':setting設定を削除してもよろしいですか？',\n    'delete_confirm'       => 'はい, この設定を削除します',\n    'successfully_created' => '設定を作成できました',\n    'successfully_saved'   => '設定を保存できました',\n    'successfully_deleted' => '設定を削除できました',\n    'already_at_top'       => 'リストの先頭です。',\n    'already_at_bottom'    => 'リストの最後です。',\n    'key_already_exists'   => 'キー :key はすでに存在します',\n    'moved_order_up'       => ':name設定を上に移動しました',\n    'moved_order_down'     => ':name設定を下に移動しました',\n    'successfully_removed' => ':name 値を削除できました',\n    'group_general'        => '一般',\n    'group_admin'          => '管理者',\n    'group_site'           => 'サイト',\n    'group'                => 'グループ',\n    'help_group'           => 'この設定は、次のグループに割り当てます ',\n];\n"
  },
  {
    "path": "publishable/lang/ja/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Made with <i class=\"voyager-heart\"></i> by',\n    'footer_copyright2' => 'Made with rum and even more rum',\n];\n"
  },
  {
    "path": "publishable/lang/km/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'ចំនួនមើលទំព័រ',\n    'by_sessions'            => 'Sessions',\n    'by_users'               => 'អ្នកប្រើប្រាស់',\n    'no_client_id'           => 'ដើម្បីមើលការវិភាគ អ្នកនឹងត្រូវទទួលបានលេខសម្គាល់ម៉ាស៊ីនភ្ញៀវវិភាគ google ហើយបន្ថែមវាទៅក្នុងការកំណត់របស់អ្នកសម្រាប់សោ <code>google_analytics_client_id</code>។ សូមទៅរកពាក្យសម្គាល់នៅ Google developer console របស់អ្នកតាមរយ:៖',\n    'set_view'               => 'ជ្រើសរើសប្រភេទបង្ហាញ',\n    'this_vs_last_week'      => 'សប្តាហ៍នេះ និងសប្តាហ៍មុន',\n    'this_vs_last_year'      => 'ឆ្នាំនេះ និងឆ្នាំមុន',\n    'top_browsers'           => 'លំដាប់ខ្ពស់នៃប្រភេទរុករកទាំងដប់',\n    'top_countries'          => 'លំដាប់ខ្ពស់នៃប្រទេសទាំងដប់',\n    'various_visualizations' => 'ការមើលឃើញផ្សេងៗគ្នា',\n];\n"
  },
  {
    "path": "publishable/lang/km/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'បង្កើតប្រ៊ដអោយតារាងនេះ',\n    'bread_crud_actions'     => 'ប្រ៊ដ/សកម្មភាព CRUD',\n    'bread_info'             => 'ព័ត៌មានប្រ៊ដ',\n    'controller_name_hint'   => 'ឧ PageController, បើលោកអ្នកទុកចោលវាប្រើប្រាស់ប្រ៊ដ Contoroller',\n    'create_bread_for_table' => 'បង្កើតប្រ៊ដសម្រាប់តារាង:table',\n    'default_search_key'     => 'ស្វែររកទិន្នន័យដោយស្នើប្រើប្រាស់ម៉ាស៊ីនមេជាលំនាំដើម',\n    'default_search_key_ph'  => 'វាលនេះនឹងត្រូវបានជ្រើសរើសជាមុនសម្រាប់ការស្វែងរកផ្នែកខាងម៉ាស៊ីនមេ',\n    'delete_bread'           => 'លុបប្រ៊ដ',\n    'delete_bread_conf'      => 'បាទ/ចាស លុបប្រ៊ដ',\n    'delete_bread_quest'     => 'តើអ្នកប្រាកដថាចង់លុបប្រ៊ដសម្រាប់តារាង:table?',\n    'edit_bread'             => 'កែសម្រួលព័ត៌មានប្រ៊ដ',\n    'edit_bread_for_table'   => 'កែសម្រួលព័ត៌មានប្រ៊ដនៃតារាង:table',\n    'error_creating_bread'   => 'សូមអភ័យទោស វាអាចមានបញ្ហាក្នុងការបង្កើតប្រ៊ដនេះ',\n    'error_removing_bread'   => 'សូមអភ័យទោស វាហាក់ដូចជាមានបញ្ហាក្នុងការដកប្រ៊ដនេះចេញ',\n    'error_updating_bread'   => 'សូមអភ័យទោស វាអាចមានបញ្ហាក្នុងការអាប់ដេតប្រ៊ដនេះ។',\n    'error_tagging'          => 'សូមអភ័យទោស វាអាចមានបញ្ហាក្នុងការបង្កើតកំណត់ត្រា។ សូមប្រាកដថាតារាងរបស់អ្នកមានលំនាំដើមសម្រាប់វាលផ្សេងទៀត។',\n    'success_created_bread'  => 'បានបង្កើតប្រ៊ដថ្មីដោយជោគជ័យ',\n    'success_remove_bread'   => 'បានយកប្រ៊ដចេញពី:datatypeដោយជោគជ័យ',\n    'success_update_bread'   => 'បានធ្វើបច្ចុប្បន្នភាពដោយជោគជ័យនូវ:datatypeប្រ៊ដ',\n    'controller_name'        => 'ឈ្មោះ Controller',\n    'create_migration'       => 'បង្កើត migration សម្រាប់តារាងនេះ?',\n    'description'            => 'បរិយា',\n    'display_name'           => 'ឈ្មោះបង្ហាញ',\n    'display_name_plural'    => 'ឈ្មោះបង្ហាញ (ពហុវចនៈ)',\n    'display_name_singular'  => 'ឈ្មោះបង្ហាញ (ឯកវចនៈ)',\n    'edit_rows'              => 'កែសម្រួលជួរសម្រាប់តារាង:tableខាងក្រោម',\n    'generate_permissions'   => 'បង្កើតសិទ្ធិដោយស្វ័យប្រវត្តិ',\n    'icon_class'             => 'រូបតំណាងដែលត្រូវប្រើសម្រាប់តារាងនេះ',\n    'icon_hint'              => 'រូបតំណាង (ជាជម្រើស) ប្រើ',\n    'icon_hint2'             => 'ពុម្ភអក្សរ Voyager',\n    'model_class'            => 'ឈ្មោះ Model Class',\n    'model_name'             => 'ឈ្មោះ Model',\n    'model_name_ph'          => 'ឧ. \\App\\User ប្រសិនបើទុកទទេនឹងព្យាយាមប្រើឈ្មោះតារាង',\n    'order'                  => 'លំដាប់',\n    'order_column'           => 'លំដាប់ជួរឈរ',\n    'order_column_ph'        => 'ជួរឈរដែលការបញ្ជាទិញត្រូវបានរក្សាទុក',\n    'order_direction'        => 'លំដាប់ទិសដៅ',\n    'order_ident_column'     => 'បង្ហាញលំដាប់ជួរឈរ',\n    'order_ident_column_ph'  => 'ជួរឈរដែលត្រូវបានបង្ហាញនៅក្នុងទំព័រលំដាប់',\n    'ordering_not_set'       => 'អ្នកត្រូវកំណត់ការបញ្ជាទិញជាមុនសិន',\n    'policy_class'           => 'ឈ្មោះ Policy Class',\n    'policy_name'            => 'ឈ្មោះ Policy',\n    'policy_name_ph'         => 'ឧ. \\App\\Policies\\UserPolicy ប្រសិនបើទុកចោលទទេ នឹងព្យាយាមប្រើលំនាំដើម',\n    'server_pagination'      => 'Server-side Pagination',\n    'scope'                  => 'ស្កូប',\n    'soft_deletes_on'        => 'បង្ហាញទិន្នន័យបានលុប',\n    'soft_deletes_off'       => 'លាក់ទិន្នន័យបានលុប',\n    'updated_order'          => 'បានកែសម្រួលលំដាប់ដោយជោគជ័យ',\n    'url_slug'               => 'URL Slug (ត្រូវតែមានតែមួយគត់)',\n    'url_slug_ph'            => 'URL slug (ឧ. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/km/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'សូមស្វាគមន៍មកកាន់ Voyager Compass ។ កម្មវិធីល្អនីមួយៗត្រូវការត្រីវិស័យដើម្បីចង្អុលពួកវាទៅទិសដៅត្រឹមត្រូវ។\n     នៅក្នុងផ្នែកនេះ អ្នកនឹងរកឃើញធនធាន និងកិច្ចការរដ្ឋបាលជាច្រើន ដើម្បីជួយណែនាំអ្នកនៅពេលអ្នកបង្កើតកម្មវិធីរបស់អ្នក។',\n    'links'         => [\n        'title'                 => 'តំណរភ្ជាប់',\n        'documentation'         => 'ឯកសារ',\n        'voyager_homepage'      => 'គេហទំព័រ Voyager',\n    ],\n    'commands'      => [\n        'title'                 => 'ការបញ្ជារ',\n        'text'                  => 'ដំណើរការ Command ពី Voyager.',\n        'clear_output'          => 'សម្អាតលទ្ធផល',\n        'command_output'        => 'លទ្ធផលនៃ Command',\n        'additional_args'       => 'បន្ថែមអាគុយម៉ង់?',\n        'run_command'           => 'ដំណើរការ Command',\n    ],\n    'resources'     => [\n        'title'                 => 'ធនធាន',\n        'text'                  => 'ធនធាន Voyager ដើម្បីជួយអ្នកស្វែងយល់បានលឿន',\n\n    ],\n    'logs'          => [\n        'title'                 => 'កត់ត្រា',\n        'text'                  => 'កំណត់ត្រានៃប្រព័ន្ធ',\n        'file_too_big'          => 'ឯកសារកំណត់ត្រា >50 មីកាប៊ៃ, សូមលោកអ្នកទាញយកវា។',\n        'level'                 => 'កម្រឹត',\n        'context'               => 'ចំណុច',\n        'date'                  => 'កាលបរិច្ឆេទ',\n        'content'               => 'មាតិកា',\n        'download_file'         => 'ទាញយកឯកសារ',\n        'delete_file'           => 'លុបឯកសារ',\n        'delete_all_files'      => 'លុបឯកសារទាំងអស់',\n        'delete_success'        => 'បានលុបកំណត់ត្រាដោយជោគជ័យ:',\n        'delete_all_success'    => 'បានលុបទាំងអស់កំណត់ត្រាដោយជោគជ័យ',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'ពុម្ពអក្សរ',\n        'font_class'            => 'ពុម្ពអក្សរ Voyager',\n        'font_character'        => 'តួអក្សរ Voyager',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/km/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'បន្ថែមជួរឈរថ្មី',\n    'add_softdeletes'           => 'បន្ថែមការលុបចេញដោយស្វ័យប្រវត្ដិ',\n    'add_timestamps'            => 'បន្ថែមការបិទពេលវេលាថ្មី',\n    'already_exists'            => 'មានរួចហើយ',\n    'already_exists_table'      => 'តារាង:tableមានរួចហើយ',\n    'bread_crud_actions'        => 'ប្រ៊ដ/សកម្មភាព CRUD',\n    'bread_info'                => 'ព័ត៌មានប្រ៊ដ',\n    'browse_bread'              => 'រុករកប្រ៊ដ',\n    'column'                    => 'ជួរឈរ',\n    'composite_warning'         => 'ការព្រមាន: ជួរឈរនេះគឺជាផ្នែកមួយនៃសន្ទស្សន៍ផ្សំ',\n    'create_new_table'          => 'បង្កើតតារាងថ្មី',\n    'create_your_new_table'     => 'បង្កើតតារាងរបស់អ្នក',\n    'create_model_table'        => 'បង្កើត model សម្រាប់តារាងនេះ?',\n    'default'                   => 'លំនាំដើម',\n    'delete_bread_before_table' => 'សូមប្រាកដថាត្រូវលុបប្រ៊ដនៅលើតារាងនេះមុនពេលលុបតារាង។',\n    'delete_table_confirm'      => 'បាទ/ចាស, លុបតារាងនេះ',\n    'delete_table_question'     => 'តើលោកអ្នកប្រាកដទេថាចង់លុបតារាង:tableនេះ?',\n    'editing_table'             => 'កែសម្រួលតារាង:table',\n    'edit_table'                => 'កែសម្រួលតារាង:tableដូចខាងក្រោម៖',\n    'edit_table_not_exist'      => 'តារាងដែលអ្នកចង់កែសម្រួលមិនមានទេ',\n    'extra'                     => 'បន្ថែម',\n    'field'                     => 'វាល',\n    'field_safe_failed'         => 'បរាជ័យក្នុងការរក្សាទុក:field។ យើងរក្សាទិន្នន័យដូចដើម។',\n    'index'                     => 'INDEX',\n    'input_type'                => 'ប្រភេទបញ្ចូល',\n    'key'                       => 'ពាក្យគន្លឹះ',\n    'name_warning'              => 'សូមអោយឈ្មោះជួរឈរមុនពេលដាក់ Index',\n    'no_composites_warning'     => 'តារាងនេះមានសន្ទស្សន៍ផ្សំ។ សូមចំណាំថាពួកគេមិនត្រូវបានគាំទ្រនៅពេលនេះទេ។ សូមប្រយ័ត្នពេលព្យាយាមបន្ថែម/យកលិបិក្រមចេញ។',\n    'null'                      => 'null',\n    'optional_details'          => 'ព័ត៌មានបន្ថែម (Optional)',\n    'policy_class'              => 'ឈ្មោះ Policy Class',\n    'policy_name'               => 'ឈ្មោះ Policy',\n    'policy_name_ph'            => 'ឧ. \\App\\Policies\\UserPolicy ប្រសិនបើទុកចោលទទេ នឹងព្យាយាមប្រើលំនាំដើម',\n    'primary'                   => 'PRIMARY',\n    'server_pagination'         => 'Server-side Pagination',\n    'success_create_table'      => 'បានបង្កើតតារាង:tableដោយជោគជ័យ',\n    'success_created_bread'     => 'បានបង្កើតប្រ៊ដោយជោគជ័យ',\n    'success_delete_table'      => 'បានលុបតារាង:tableដោយជោគជ័យ',\n    'success_remove_bread'      => 'បានដកប្រ៊ដចេញពី:datatypeដោយជោគជ័យ',\n    'success_update_bread'      => 'បានកែសម្រួលប្រ៊ដ:datatypeដោយជោគជ័យ',\n    'success_update_table'      => 'បានកែសម្រួលតារាង:tableដោយជោគជ័យ',\n    'table_actions'             => 'សកម្មភាពតារាង',\n    'table_columns'             => 'តារាងជួរឈរ',\n    'table_has_index'           => 'តាររាងនេះមាន primary index រួចហើយ។',\n    'table_name'                => 'ឈ្មោះតារាង',\n    'table_no_columns'          => 'តារាងមានជួរឈរ...',\n    'type'                      => 'ប្រភេទ',\n    'type_not_supported'        => 'ប្រភេទនេះមិនគាំទ្រឡើយ',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'មិនស្គាល់ប្រភេទ',\n    'update_table'              => 'ធ្វើបច្ចុប្បន្នភាពតារាង',\n    'url_slug'                  => 'URL Slug (ត្រូវតែមានតែមួយគត់)',\n    'url_slug_ph'               => 'URL slug (ឧ. posts)',\n    'visibility'                => 'ភាពមើលឃើញ',\n    'relationship'              => [\n        'relationship'         => 'ទំនាក់ទំនង',\n        'relationships'        => 'ទំនាក់ទំនង',\n        'has_one'              => 'មានតែមួយ',\n        'has_many'             => 'មានច្រើន',\n        'belongs_to'           => 'ជាកម្មសិទ្ធិរបស់',\n        'belongs_to_many'      => 'ជាកម្មសិទ្ធិរបស់ច្រើន',\n        'which_column_from'    => 'ជួរឈរណាមួយពី',\n        'is_used_to_reference' => 'ត្រូវបានប្រើដើម្បីយោង',\n        'pivot_table'          => 'តារាងកណ្តាល',\n        'selection_details'    => 'ព័ត៌មានលម្អិតអំពីការជ្រើសរើស',\n        'display_the'          => 'បង្ហាញ',\n        'store_the'            => 'រក្សាទុក',\n        'allow_tagging'        => 'អនុញ្ញាតឱ្យដាក់ស្លាក',\n        'easy_there'           => 'ងាយស្រួលនៅទីនោះប្រធានក្រុម',\n        'before_create'        => 'មុននឹងអ្នកអាចបង្កើតទំនាក់ទំនងថ្មីបានអ្នកនឹងត្រូវបង្កើតប្រ៊ដជាមុនសិន។<br> បន្ទាប់មកត្រឡប់មកកែសម្រួលប្រ៊ដហើយអ្នកនឹងអាចបន្ថែមទំនាក់ទំនងបាន។<br> សូមអរគុណ។',\n        'cancel'               => 'បោះបង់',\n        'add_new'              => 'បន្ថែមទំនាក់ទំនងថ្មី',\n        'open'                 => 'បើក',\n        'close'                => 'បិទ',\n        'relationship_details' => 'ព័ត៌មានទំនាក់ទំនង',\n        'browse'               => 'រុករក',\n        'read'                 => 'អាន',\n        'edit'                 => 'កែសម្រួល',\n        'add'                  => 'បន្ថែម',\n        'delete'               => 'លុប',\n        'create'               => 'បង្កើតទំនាក់ទំនង',\n        'namespace'            => 'ឈ្មោះម៉ូដែលដែលមានលក្ខណៈសម្បត្តិគ្រប់គ្រាន់ពេញលេញ (ឧ. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/km/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'មិនមានទិន្នន័យក្នុងតារាងនេះទេ',\n    'sInfo'           => 'បង្ហាញជួរទី _START_ ដល់ទី _END_ ក្នុងចំណោម _TOTAL_ ជួរ',\n    'sInfoEmpty'      => 'បង្ហាញជួរទី 0 ដល់ទី 0 ក្នុងចំណោម 0 ជួរ',\n    'sInfoFiltered'   => '(បានចម្រាញ់ចេញពីទិន្នន័យសរុប _MAX_ ជួរ)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'បង្ហាញ _MENU_ ជួរ',\n    'sLoadingRecords' => 'កំពុងផ្ទុក...',\n    'sProcessing'     => 'កំពុងដំណើរការ...',\n    'sSearch'         => 'ស្វែងរក:',\n    'sZeroRecords'    => 'មិនមានទិន្នន័យត្រូវតាមលក្ខខណ្ឌស្វែងរកទេ',\n    'oPaginate'       => [\n        'sFirst'    => 'ដំបូងគេ',\n        'sLast'     => 'ចុងក្រោយ',\n        'sNext'     => 'បន្ទាប់',\n        'sPrevious' => 'ក្រោយ',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': ចុចដើម្បីរៀបជួរឈរនេះតាមលំដាប់ឡើង',\n        'sSortDescending' => ': ចុចដើម្បីរៀបជួរឈរនេះតាមលំដាប់ចុះ',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/km/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'សប្តាហ៍មុន',\n    'last_year' => 'ឆ្នាំមុន',\n    'this_week' => 'សប្តាហ៍នេះ',\n    'this_year' => 'ឆ្នាំនេះ',\n];\n"
  },
  {
    "path": "publishable/lang/km/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'ទំព័រ|ទំព័រ',\n    'page_link_text' => 'មើលទំព័រទាំងអស់',\n    'page_text'      => 'លោកអ្នកមាន :count :string។ សូមចុចប៊ូតុងខាងក្រោមដើម្បីមើលទំព័រទាំងអស់។',\n    'post'           => 'អត្តបទ|អត្តបទ',\n    'post_link_text' => 'មើលអត្តបទទាំងអស់',\n    'post_text'      => 'លោកអ្នកមាន :count :string។ សូមចុចប៊ូតុងខាងក្រោមដើម្បីមើលអត្តបទទាំងអស់។',\n    'user'           => 'អ្នកប្រើប្រាស់|អ្នកប្រើប្រាស់',\n    'user_link_text' => 'មើលអ្នកប្រើប្រាស់ទាំងអស់',\n    'user_text'      => 'លោកអ្នកមាន :count :string។ សូមចុចប៊ូតុងខាងក្រោមដើម្បីមើលអ្នកប្រើប្រាស់ទាំងអស់។',\n];\n"
  },
  {
    "path": "publishable/lang/km/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'ថតឯកសារផ្ទុកត្រូវបានបង្កើត',\n    'symlink_created_title'  => 'មិនបានបង្កើតថតឯកសារផ្ទុកត្រូវ',\n    'symlink_failed_text'    => 'យើងបរាជ័យក្នុងការបង្កើតតំណដែលបាត់សម្រាប់កម្មវិធីរបស់អ្នក។ វាហាក់ដូចជាអ្នកផ្តល់សេវាបង្ហោះរបស់អ្នកមិនគាំទ្រវាទេ។',\n    'symlink_failed_title'   => 'រកមិនឃើញថតឯកសារផ្ទុកត្រូវ',\n    'symlink_missing_button' => 'ដោះស្រាយវា',\n    'symlink_missing_text'   => 'រកមិនឃើញថតឯកសារផ្ទុកត្រូវ។ វាអាចបណ្តាលឱ្យមានបញ្ហាជាមួយនឹងការផ្ទុកឯកសារមេឌៀពីកម្មវិធីរុករក។',\n    'symlink_missing_title'  => 'បាត់ថតឯកសារផ្ទុកត្រូវ',\n];\n"
  },
  {
    "path": "publishable/lang/km/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'ទុកទទេដើម្បីរក្សាអោយដូចគ្នា',\n    'field_select_dd_relationship' => 'ត្រូវប្រាកដថារៀបចំទំនាក់ទំនងសមស្របនៅក្នុង :method method នៃ :class class។',\n    'type_checkbox'                => 'Check Box',\n    'type_codeeditor'              => 'Code Editor',\n    'type_file'                    => 'File',\n    'type_image'                   => 'Image',\n    'type_radiobutton'             => 'Radio Button',\n    'type_richtextbox'             => 'Rich Textbox',\n    'type_selectdropdown'          => 'Select Dropdown',\n    'type_textarea'                => 'Text Area',\n    'type_textbox'                 => 'Text Box',\n];\n"
  },
  {
    "path": "publishable/lang/km/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'ប្រតិបតិ្តការ',\n    'actions'                => 'ប្រតិបតិ្តការ',\n    'add'                    => 'បន្ថែម',\n    'add_folder'             => 'បន្ថែមថតឯកសារ',\n    'add_new'                => 'បន្ថែមថ្មី',\n    'all_done'               => 'គ្រប់យា៉ងរួចរាល់',\n    'are_you_sure'           => 'តើអ្នកប្រាកដទេ',\n    'are_you_sure_delete'    => 'តើអ្នកប្រាកដទេថាចង់លុប',\n    'ascending'              => 'លំដាប់កើនឡើង',\n    'auto_increment'         => 'កើនឡើងស្វ័យប្រវត្តិ',\n    'bread'                  => 'ប្រ៊ដ',\n    'browse'                 => 'រុករក',\n    'builder'                => 'អ្នកសាងសង់',\n    'bulk_delete'            => 'លុបជាបណ្តុំ',\n    'bulk_delete_confirm'    => 'បាទ/ចាស លុបវាចោល',\n    'bulk_delete_nothing'    => 'លោកអ្នកមិនបានជ្រើសរើសទិន្នន័យសម្រាប់លុបនោះទេ',\n    'cancel'                 => 'បោះបង់',\n    'choose_type'            => 'ជ្រើសរើសប្រភេទ',\n    'click_here'             => 'ចុចទីនេះ',\n    'close'                  => 'បិទ',\n    'compass'                => 'ត្រីវិស័យ',\n    'created_at'             => 'កាលបរិច្ឆេទបង្កើត',\n    'custom'                 => 'ផ្ទាល់ខ្លួន',\n    'dashboard'              => 'ផ្ទាំងទូទៅ',\n    'database'               => 'មូលដ្ឋានទិន្នន័យ',\n    'default'                => 'លំនាំដើម',\n    'delete'                 => 'លុប',\n    'delete_confirm'         => 'បាទ/ចាស លុបវាចោល!',\n    'delete_question'        => 'តើអ្នកប្រាកដទេថាចង់លុប',\n    'delete_this_confirm'    => 'បាទ/ចាស លុបវាចោល!',\n    'descending'             => 'លំដាប់ថយចុះ',\n    'deselect_all'           => 'ដកការជ្រើសរើសទាំងអស់',\n    'download'               => 'ទាញយក',\n    'drag_drop_info'         => 'ចុចលើទំព័រនេះដើម្បីផ្លាស់ប្ដូរទិន្នន័យនៅទីនេះ',\n    'edit'                   => 'កែសម្រួល',\n    'email'                  => 'អ៊ីមែល',\n    'error_deleting'         => 'មានកំហុសពេលលុបទិន្នន័យនេះ',\n    'error_restoring'        => 'មានកំហុសពេលស្ដារទិន្នន័យនេះ',\n    'exception'              => 'កំហុស',\n    'featured'               => 'ដែលបានជ្រើសរើស',\n    'field_does_not_exist'   => 'វាលមិនមានទេ',\n    'find_by_place'          => 'ស្វែងរកតាមទីតាំង',\n    'home'                   => 'បើកគេហទំព័រ',\n    'how_to_use'             => 'របៀបក្នុងការប្រើប្រាស់',\n    'index'                  => 'Index',\n    'internal_error'         => 'កំហុសក្នុងការប្រើប្រាស់',\n    'items'                  => 'ទំនិញ',\n    'keep_sidebar_open'      => 'រក្សាទុកបង្អួចបង្អូសនៅលើបង្អួង',\n    'key'                    => 'កូដ',\n    'last_modified'          => 'កែប្រែចុងក្រោយ',\n    'latitude'               => 'ទទឹង',\n    'length'                 => 'ប្រវែង',\n    'locale'                 => 'ភាសា',\n    'login'                  => 'ចូលប្រព័ន្ធ',\n    'logout'                 => 'ចាកចេញ',\n    'longitude'              => 'បណ្តោយ',\n    'media'                  => 'មេឌៀ',\n    'menu_builder'           => 'កម្មវិធីបង្កើតមតិ',\n    'mimetype_not_allowed'   => 'មិនអនុញ្ញាតឱ្យប្រើប្រាស់ប្រភេទឯកសារនេះ',\n    'move'                   => 'ផ្លាស់ទី',\n    'name'                   => 'ឈ្មោះ',\n    'new'                    => 'ថ្មី',\n    'no'                     => 'ទេ',\n    'no_thanks'              => 'ទេ អរគុណ',\n    'none'                   => 'គ្មាន',\n    'not_null'               => 'មាន',\n    'no_results'             => 'គ្មានលទ្ធផល',\n    'open'                   => 'បើក',\n    'options'                => 'ជម្រើស',\n    'password'               => 'ពាក្យសម្ងាត់',\n    'permissions'            => 'សិទ្ធិ',\n    'profile'                => 'គណនី',\n    'public_url'             => 'Public URL',\n    'read'                   => 'អាន',\n    'rename'                 => 'ប្តូរឈ្មោះ',\n    'remember_me'            => 'ចង់ចាំខ្ញុំ',\n    'required'               => 'ចាំបាច់',\n    'return_to_list'         => 'ត្រលប់ក្រោយទៅតារាង',\n    'route'                  => 'Route',\n    'save'                   => 'រក្សាទុក',\n    'search'                 => 'ស្វែងរក',\n    'select_all'             => 'ជ្រើសរើសទាំងអស់',\n    'select_group'           => 'ជ្រើសរើសក្រុមរបស់អ្នកឬមួយក្រុមដែលអ្នកចង់បង្ហាញ',\n    'settings'               => 'ការកំណត់',\n    'showing_entries'        => 'បង្ហាញជួរទី :from ដល់ទី :to ក្នុងចំណោម :all ជួរ|បង្ហាញជួរទី :from ដល់ទី :to ក្នុងចំណោម :all ជួរ',\n    'submit'                 => 'ដាក់ស្នើ',\n    'successfully_added_new' => 'បានបន្ថែមថ្មីដោយជោគជ័យ',\n    'successfully_deleted'   => 'បានលុបដោយជោគជ័យ',\n    'successfully_restored'  => 'បានស្ដារដោយជោគជ័យ',\n    'successfully_updated'   => 'បានកែប្រែដោយជោគជ័យ',\n    'successfully_created'   => 'បានបង្កើតដោយជោគជ័យ',\n    'sweet_success'          => 'ជោគជ័យ',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'ចំណងជើង',\n    'type'                   => 'ប្រភេទ',\n    'restore'                => 'ស្ដារ',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'ដោះរបារចំហៀង',\n    'update'                 => 'កែប្រែ',\n    'update_failed'          => 'កែប្រែបានបរាជ័យ',\n    'updated_order'          => 'បានកែប្រែលំដាប់',\n    'upload'                 => 'ផ្ទុកឡើង',\n    'url'                    => 'URL',\n    'view'                   => 'ពិនិត្យមើល',\n    'viewing'                => 'ពិនិត្យមើល',\n    'whoopsie'               => 'អាហ្អាស',\n    'yes'                    => 'បាទ/ចាស',\n    'yes_please'             => 'បាទ/ចាស អនុវត្តន៌',\n    'contains'               => 'ផ្ទុក',\n];\n"
  },
  {
    "path": "publishable/lang/km/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'ទម្រង់នៃ JSON មិនត្រឹមត្រូវ',\n    'invalid_message'   => 'ហាក់ដូចជាទម្រង់នៃ JSON មិនត្រឹមត្រូវ',\n    'valid'             => 'ទម្រង់នៃ JSON ត្រឹមត្រូវ',\n    'validation_errors' => 'មានបញ្ហាក្នុងការផ្ទៀងផ្ទាត់',\n];\n"
  },
  {
    "path": "publishable/lang/km/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'កំពុងចូលប្រើប្រាស់ប្រព័ន្ធ',\n    'signin_below' => 'ចូលប្រើប្រាស់ប្រព័ន្ធដោយចុចនៅខាងក្រោម:',\n    'welcome'      => 'ស្វាគមន៌ការមកដល់នៃ Voyager ដែលជាប្រភេទប្រព័ន្ធគ្រប់គ្រងទិន្នន័យនៃក្រមខណ្ឌ Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/km/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'បន្ថែមថតឯកសារថ្មី',\n    'audio_support'          => 'កម្មវិធីរុករកមិនគាំទ្រទិន្នន័យសំឡេងទេ',\n    'create_new_folder'      => 'បង្កើតថតឯកសារថ្មី',\n    'delete_folder_question' => 'ការលុបថតឯកសារវានិងត្រូវឯកសារទាំងអស់ដែលមាននៅក្នុងថតឯកសារនេះ',\n    'delete_question'        => 'តើលោកអ្នកប្រាកដទេថាចង់លុបឯកសារទាំងនេះ?',\n    'destination_folder'     => 'ថតឯកសារគោលដៅ',\n    'drag_drop_info'         => 'អូស និងទម្លាក់ឯកសារ ឬចុចខាងក្រោមដើម្បីផ្ទុកឡើង',\n    'error_already_exists'   => 'សូមអភ័យទោស មានឯកសារ/ថតឯកសារដែលមានឈ្មោះដែលមានស្រាប់នៅក្នុងថតនោះ',\n    'error_creating_dir'     => 'សូមអភ័យទោសមានអ្វីមួយខុសប្រក្រតីក្នុងការបង្កើតថត សូមពិនិត្យមើលការអនុញ្ញាតរបស់អ្នក',\n    'error_deleting_file'    => 'សូមអភ័យទោសមានអ្វីមួយខុសប្រក្រតីក្នុងការលុបឯកសារនេះ សូមពិនិត្យមើលការអនុញ្ញាតរបស់អ្នក',\n    'error_deleting_folder'  => 'សូមអភ័យទោសមានអ្វីមួយខុសប្រក្រតីនៅពេលលុបថតនេះ សូមពិនិត្យមើលការអនុញ្ញាតរបស់អ្នក',\n    'error_may_exist'        => 'ឯកសារ ឬ ថតឯកសារ អាចមានរួចហើយជាមួយឈ្មោះនោះ។ សូមជ្រើសរើសឈ្មោះផ្សេងទៀត ឬលុបឯកសារផ្សេងទៀត។',\n    'error_moving'           => 'សូមអភ័យទោស ហាក់ដូចជាមានបញ្ហាក្នុងការផ្លាស់ទីឯកសារ/ថតឯកសារនោះ សូមប្រាកដថាអ្នកមានសិទ្ធិត្រឹមត្រូវ។',\n    'error_renaming_ext'     => 'ផ្នែកបន្ថែមនៃឯកសារមិនអាចផ្លាស់ប្តូរបានទេ!',\n    'error_uploading'        => 'អាប់ឡូតបរាជ័យ៖ កំហុសមិនស្គាល់បានកើតឡើង!',\n    'files'                  => '1 ឯកសារ|:count ឯកសារ',\n    'files_more'             => 'បន្ថែម:countទៀត',\n    'file_does_not_exist'    => 'ឯកសារមិនមានទេ។',\n    'file_removed'           => 'ឯកសារត្រូវបានដកចេញ',\n    'files_selected'         => 'បានជ្រើសរើសឯកសារ/ថតឯកសារ',\n    'folder_exists_already'  => 'សូមអភ័យទោសដែលមានថតឯកសារនោះរួចហើយ សូមលុបថតនោះចេញប្រសិនបើអ្នកចង់បង្កើតវាឡើងវិញ',\n    'image_does_not_exist'   => 'រូបភាពមិនមានទេ',\n    'image_removed'          => 'រូបភាពត្រូវបានដកចេញ',\n    'library'                => 'បណ្ណាល័យមេឌៀ',\n    'loading'                => 'កំពុងទាញយកមេឌៀរបស់លោកអ្នក',\n    'max_files_select'       => 'អ្នកអាចជ្រើសរើសឯកសារតែមួយប៉ុណ្ណោះ|អ្នកអាចជ្រើសរើសបានតែអតិបរមានៃ:countឯកសារ',\n    'min_files_select'       => 'អ្នកត្រូវតែជ្រើសរើសឯកសារយ៉ាងហោចណាស់មួយ|អ្នកត្រូវតែជ្រើសរើសយ៉ាងហោចណាស់:countឯកសារ',\n    'move_file_folder'       => 'ផ្លាស់ទីឯកសារ/ថតឯកសារ',\n    'new_file_folder'        => 'បន្ថែមឯកសារ/ថតឯកសារថ្មី។',\n    'new_folder_name'        => 'ឈ្មោះថតឯកសារថ្មី',\n    'no_files_here'          => 'មិនមានឯកសារនៅឡើយ។',\n    'no_files_in_folder'     => 'មិនមានឯកសារនៅថតនេះឡើយ។',\n    'nothing_selected'       => 'មិនបានជ្រើសរើសឯកសារ ឬថតឯកសារទេ',\n    'rename_file_folder'     => 'ប្តូរឈ្មោះឯកសារ/ថតឯកសារ',\n    'success_uploaded_file'  => 'អាប់ឡូតឯកសារថ្មីដោយជោគជ័យ!',\n    'success_uploading'      => 'បង្ហោះរូបភាពដោយជោគជ័យ!',\n    'success_moved'          => 'បានផ្លាស់ទីឯកសារ/ថតដោយជោគជ័យ',\n    'success_renamed'        => 'បានប្តូរឈ្មោះឯកសារ/ថតឯកសារដោយជោគជ័យ',\n    'uploading_wrong_type'   => 'អាប់ឡូតបរាជ័យ៖ ទ្រង់ទ្រាយឯកសារមិនគាំទ្រ ឬវាធំពេកក្នុងការបង្ហោះ!',\n    'crop'                   => 'កាត់',\n    'crop_and_create'        => 'កាត់ និងបង្កើតថ្មី',\n    'crop_override_confirm'  => 'វានិងបង្កើតថ្មីពីលើវត្ថុចាស់។ តើអ្នកប្រាកដទេ?',\n    'crop_image'             => 'កាត់រូបភាព',\n    'success_crop_image'     => 'បានកាត់រូបភាពដោយជោគជ័យ',\n    'height'                 => 'កម្ពស់: ',\n    'title'                  => 'ចំណងជើង',\n    'type'                   => 'ប្រភេទ',\n    'size'                   => 'ទំហំ',\n    'public_url'             => 'តំណរភ្ជាប់សាធារណៈ',\n    'last_modified'          => 'កែប្រែចុងក្រោយ',\n    'browser_video_support'  => 'កម្មវិធីរុករកតាមអ៊ីនធឺណិតរបស់អ្នកមិនគាំទ្រស្លាកវីដេអូទេ',\n    'browser_audio_support'  => 'កម្មវិធីរុករកតាមអ៊ីនធឺណិតរបស់អ្នកមិនគាំទ្រធាតុអូឌីយ៉ូទេ។',\n    'width'                  => 'ទទឹង: ',\n    'add_all_selected'       => 'បន្ថែមទាំងអស់ដែលបានជ្រើស',\n];\n"
  },
  {
    "path": "publishable/lang/km/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'ពណ៌ជា RGB ឬ Hex (optional)',\n    'color_ph'             => 'ពណ៌, ឧ. #ffffff ឬ rgb (255, 255, 255)',\n    'create_new_item'      => 'បង្កើតធាតុម៉ឺនុយថ្មី។',\n    'delete_item_confirm'  => 'បាទ/ចាស លុបធាតុម៉ឺនុយនេះ។',\n    'delete_item_question' => 'តើអ្នកប្រាកដថាចង់លុបធាតុម៉ឺនុយនេះទេ?',\n    'drag_drop_info'       => 'អូស និងទម្លាក់ធាតុម៉ឺនុយខាងក្រោម ដើម្បីរៀបចំពួកវាឡើងវិញ។',\n    'dynamic_route'        => 'Dynamic Route',\n    'edit_item'            => 'កែសម្រួលធាតុម៉ឺនុយ',\n    'icon_class'           => 'ថ្នាក់រូបតំណាងពុម្ពអក្សរសម្រាប់ធាតុម៉ឺនុយ (ប្រើ',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icon Class (optional)',\n    'item_route'           => 'Route សម្រាប់ធាតុម៉ឺនុយ',\n    'item_title'           => 'ចំណងជើងនៃធាតុម៉ឺនុយ',\n    'link_type'            => 'ប្រភេទតំណ',\n    'new_menu_item'        => 'ធាតុម៉ឺនុយថ្មី',\n    'open_in'              => 'បើកជាមួយ',\n    'open_new'             => 'New Tab/Window',\n    'open_same'            => 'Same Tab/Window',\n    'route_parameter'      => 'Route parameters (if any)',\n    'static_url'           => 'Static URL',\n    'successfully_created' => 'បានបង្កើតធាតុម៉ឺនុយថ្មីដោយជោគជ័យ។',\n    'successfully_deleted' => 'បានលុបធាតុម៉ឺនុយដោយជោគជ័យ។',\n    'successfully_updated' => 'បានធ្វើបច្ចុប្បន្នភាពធាតុម៉ឺនុយដោយជោគជ័យ។',\n    'updated_order'        => 'បានធ្វើបច្ចុប្បន្នភាពលំដាប់ម៉ឺនុយដោយជោគជ័យ។',\n    'url'                  => 'URL សម្រាប់ធាតុម៉ឺនុយ',\n    'usage_hint'           => 'អ្នកអាចបញ្ចេញម៉ឺនុយនៅកន្លែងណាមួយនៅលើគេហទំព័ររបស់អ្នកដោយការហៅ|អ្នកអាចបញ្ចេញម៉ឺនុយនៅកន្លែងណាមួយនៅលើគេហទំព័ររបស់អ្នកដោយការហៅ',\n];\n"
  },
  {
    "path": "publishable/lang/km/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'ទម្រង់បញ្ជុលបន្ថែមព័ត៌មាន',\n    'category'         => 'ប្រភេទអត្តបទ',\n    'content'          => 'អត្តបទ',\n    'details'          => 'សេចក្តីលំអិត',\n    'excerpt'          => 'ដកស្រង់<small>ការពិពណ៌នាតូចនៃប្រកាសនេះ</small>',\n    'image'            => 'រូបភាព',\n    'meta_description' => 'សេចក្តីសង្ខេបនៃ Meta',\n    'meta_keywords'    => 'ពាក្យគន្លឺះនៃ Meta',\n    'new'              => 'បន្ថែមអត្តបទថ្មី',\n    'seo_content'      => 'មាតិកានៃ SEO',\n    'seo_title'        => 'ចំណងជើងនៃ SEO',\n    'slug'             => 'URL slug',\n    'status'           => 'ស្ថានភាពនៃអត្តបទ',\n    'status_draft'     => 'ព្រាង',\n    'status_pending'   => 'កំពុងរង់ចាំ',\n    'status_published' => 'បានចេញផ្សាយ',\n    'title'            => 'ចំណងជើងអត្តបទ',\n    'title_sub'        => 'ចំនងជើររងអត្តបទ',\n    'update'           => 'កែសម្រួលអត្តបទ',\n];\n"
  },
  {
    "path": "publishable/lang/km/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'រូបតំណាង',\n    'edit'             => 'កែសម្រួលព័ត៌មាន',\n    'edit_user'        => 'កែសម្រួលព័ត៌មានអ្នកប្រើប្រាស់',\n    'password'         => 'ពាក្យសម្ងាត់',\n    'password_hint'    => 'ទុកវាទទេដើម្បីអោយវាដូចតម្លៃដើម',\n    'role'             => 'តួនាទី',\n    'roles'            => 'តួនាទី',\n    'role_default'     => 'គំរូដើមនៃតួនាទី',\n    'roles_additional' => 'តួនាទីបន្ថែម',\n    'user_role'        => 'តួនាទីអ្នកប្រើប្រាស់',\n];\n"
  },
  {
    "path": "publishable/lang/km/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'អ្នកនិពន្ធ',\n        'avatar'           => 'រូបតំណាង',\n        'body'             => 'តួរសេចក្តី',\n        'category'         => 'ប្រភេទ',\n        'created_at'       => 'កាលបរិច្ទេទបង្កើត',\n        'display_name'     => 'ឈ្មោះសម្រាប់បង្ហាញ',\n        'email'            => 'អ៊ីម៉ែល',\n        'excerpt'          => 'ការរាយរាប់',\n        'featured'         => 'បានជ្រើសរើស',\n        'id'               => 'ID',\n        'meta_description' => 'បរិយារបស់ Meta នៃទំព័រនេះ',\n        'meta_keywords'    => 'ពាក្យគន្លឺះរបស់ Meta នៃទំព័រនេះ',\n        'name'             => 'ឈ្មោះ',\n        'order'            => 'លំដាប់',\n        'page_image'       => 'រូបភាព',\n        'parent'           => 'មេ',\n        'password'         => 'ពាក្យសម្ងាត់',\n        'post_image'       => 'រូបភាព',\n        'remember_token'   => 'ចង់ចាំនៃចូលប្រព័ន្ធ',\n        'role'             => 'តួនាទី',\n        'roles'            => 'តួនាទី',\n        'seo_title'        => 'ចំណងជើង SEO នៃទំព័រនេះ',\n        'slug'             => 'Slug',\n        'status'           => 'ស្ថានភាព',\n        'title'            => 'ចំណងជើង',\n        'updated_at'       => 'កាលបរិច្ឆេទកែសម្រួល',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'ប្រភេទ',\n            'plural'   => 'ប្រភេទ',\n        ],\n        'menu'     => [\n            'singular' => 'ម៉ឺនុយ',\n            'plural'   => 'ម៉ឺនុយ',\n        ],\n        'page'     => [\n            'singular' => 'ទំព័រ',\n            'plural'   => 'ទំព័រ',\n        ],\n        'post'     => [\n            'singular' => 'អត្តបទ',\n            'plural'   => 'អត្តបទ',\n        ],\n        'role'     => [\n            'singular' => 'តួនាទី',\n            'plural'   => 'តួនាទី',\n        ],\n        'user'     => [\n            'singular' => 'អ្នកប្រើប្រាស់',\n            'plural'   => 'អ្នកប្រើប្រាស់',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'ប្រ៊ដ',\n        'categories'   => 'ប្រភេទ',\n        'compass'      => 'ត្រីវិស័យ',\n        'dashboard'    => 'ផ្ទាំងទូទៅ',\n        'database'     => 'មូលដ្ឋានទិន្នន័យ',\n        'media'        => 'មេឌៀ',\n        'menu_builder' => 'បង្កើតម៉ឺនុយ',\n        'pages'        => 'ទំព័រ',\n        'posts'        => 'អត្តបទ',\n        'roles'        => 'តួនាទី',\n        'settings'     => 'ការកំណត់',\n        'tools'        => 'ឧបការណ៌',\n        'users'        => 'អ្នកប្រើប្រាស់',\n    ],\n    'roles'      => [\n        'admin' => 'អ្នកអភិបាល',\n        'user'  => 'អ្នកប្រើប្រាស់',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'រូបភាពផ្ទះ',\n            'description'                => 'ការពិពណ៌នាអ្នកអភិបាល',\n            'description_value'          => 'សូមស្វាគមន៍មកកាន់ Voyager ។ អ្នកគ្រប់គ្រងដែលបាត់សម្រាប់ Laravel',\n            'google_analytics_client_id' => 'លេខសម្គាល់អតិថិជន Google Analytics (ប្រើសម្រាប់ផ្ទាំងគ្រប់គ្រងគ្រប់គ្រង)',\n            'icon_image'                 => 'រូបភាពតំណាង',\n            'loader'                     => 'រូបភាពកំពុងផ្ទុក',\n            'title'                      => 'ចំណងជើង',\n        ],\n        'site'  => [\n            'description'                  => 'ការពីពណ៌នាស្ថាប័ន',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'យីហោ',\n            'title'                        => 'ចំណងជើងស្ថាប័ន',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/km/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'អ្នកអាចប្រើប្រាស់កម្មវិធីនេះដើម្បីបង្ហាញទិន្នន័យនៅលើទំព័រនេះទេ។',\n    'save'                 => 'រក្សាទុកការកំណត់',\n    'new'                  => 'បន្ថែមការកំណត់',\n    'help_name'            => 'ឈ្មោះការកំណត់ ឧ៖ Admin Title',\n    'help_key'             => 'ពាក្យគន្លឺះការកំណត់ ឧ៖ admin_title',\n    'help_option'          => '(ជាជម្រើស ជម្រើសដូចគ្នានឹងទម្រង់បែបបទដែលត្រូវគ្នាអនុវត្ត)',\n    'add_new'              => 'បន្ថែមការកំណត់',\n    'delete_question'      => 'តើអ្នកប្រាកដជាចង់លុបការកំណត់:settingនេះ?',\n    'delete_confirm'       => 'បាទ/ចាស, លុបការកំណត់',\n    'successfully_created' => 'បានបង្កើតដោយជោគជ័យ',\n    'successfully_saved'   => 'បានរក្សាទុកដោយជោគជ័យ',\n    'successfully_deleted' => 'បានលុបដោយជោគជ័យ',\n    'already_at_top'       => 'នេះគឺនៅកំពូលនៃបញ្ជីរួចហើយ',\n    'already_at_bottom'    => 'នេះគឺនៅខាងក្រោមបញ្ជីរួចហើយ',\n    'key_already_exists'   => 'ពាក្យគន្លឺះ:keyមានរួចហើយ',\n    'moved_order_up'       => 'ផ្លាស់ទីការកំណត់:nameទៅលើ',\n    'moved_order_down'     => 'ផ្លាស់ទីការកំណត់:nameទៅក្រោម',\n    'successfully_removed' => 'បានយក:nameចេញដោយជោគជ័យ',\n    'group_general'        => 'ទូទៅ',\n    'group_admin'          => 'អភិបាល',\n    'group_site'           => 'គេហទំព័រ',\n    'group'                => 'ក្រុម',\n    'help_group'           => 'ដាក់ក្រុមការកំណត់នេះទៅ',\n];\n"
  },
  {
    "path": "publishable/lang/km/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'បង្កើតដោយ <i class=\"voyager-heart\"></i> ',\n    'footer_copyright2' => 'ផលិតជាមួយ Rum និង Rum ច្រើនទៀត',\n];\n"
  },
  {
    "path": "publishable/lang/ku/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'بەپێی ژمارەی سەیرکراوەکان',\n    'by_sessions'            => 'بەپێی سێشنەکان',\n    'by_users'               => 'بەپێی بەکارهێنەرەکان',\n    'no_client_id'           => 'بۆ بینینی شیکارییەکان پێویستت بە ناسنامەی ڕاژەخوازێکی شیکاری گووگڵە و دایبنێیت لە بەشی ڕێکخستنەکاندا لە خانەی <code>google_analytics_client_id</code>. بۆ بەدەستهێنانی کلیلەکەت سەردانی کۆنسۆڵی پەرەپێدەرانی گووگڵ بکە:',\n    'set_view'               => 'دیمەنێک دیاری بکە',\n    'this_vs_last_week'      => 'ئەم هەفتەیە و هەفتەی ڕابردوو',\n    'this_vs_last_year'      => 'ئەمساڵ و پار',\n    'top_browsers'           => 'تۆپی براوسەرەکان',\n    'top_countries'          => 'تۆپی ووڵاتەکان',\n    'various_visualizations' => 'چەند وێناکردنێک',\n];\n"
  },
  {
    "path": "publishable/lang/ku/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'برێدێک (BREAD) بۆ ئەم خشتەیە زیادبکە',\n    'bread_crud_actions'     => 'BREAD/CRUD فرمانەکان',\n    'bread_info'             => 'BREAD زانیاری',\n    'controller_name_hint'   => 'بۆ نمونە. PageController, ئەگەر بە بەتاڵی جێبهێڵرێت کۆنترۆڵلەری برێد بەکاردهێنرێت.',\n    'create_bread_for_table' => 'برێدێک (BREAD) دروستبکە بۆ خشتەی :table',\n    'delete_bread'           => 'برێد بسڕەوە',\n    'delete_bread_conf'      => 'بەڵێ، برێد بسڕەوە',\n    'delete_bread_quest'     => 'دڵنیایت کە دەتەوێت کە برێدی خشتەی :table بسڕیتەوە؟',\n    'edit_bread'             => 'دەستکاری برێد (BREAD)',\n    'edit_bread_for_table'   => 'دەستکاری برێدی خشتەی :table',\n    'error_creating_bread'   => 'ببورە دیارە کێشەیەک هەیە لە دروستکردنی ئەم برێدەدا (BREAD)',\n    'error_removing_bread'   => 'ببورە وا دیارە کێشەیەک هەیە لە سڕینەوەی ئەم بێدەدا (BREAD)',\n    'error_updating_bread'   => 'ببورە وا دیارە کێشەیەک هەیە لە نوێ کردنەوەی ئەم برێدەدا (BREAD)',\n    'error_tagging'          => 'ببورە دیارە کێشەیەک هەیە لە دروستکردنی تۆمارەکەدا. تکایە دڵنیابەرە کە خشتەکە خانە بنەڕەتییەکانی هەیە..',\n    'success_created_bread'  => 'بە سەرکەوتووی برێدی (BREAD) نوێ دروستکرا',\n    'success_remove_bread'   => 'بە سەرکەوتووی بڕید سڕدرایەوە لە :datatype',\n    'success_update_bread'   => 'بە سەرکەوتویی برێدی :datatype نوێکرایەوە',\n    'controller_name'        => 'ناوی کۆنترۆڵلەر',\n    'create_migration'       => 'میگرەیشن بۆ ئەم خشتەیە دروستدەکەیت؟',\n    'description'            => 'ڕونکردنەوە',\n    'display_name'           => 'ناوی دەرکەوتن',\n    'display_name_plural'    => 'ناوی دەرکەوتن (کۆ)',\n    'display_name_singular'  => 'ناوی دەرکەوتن (تاک)',\n    'edit_rows'              => 'دەستکاری هێلەکانی خشتەی :table بکە',\n    'generate_permissions'   => 'مۆڵەتپێدان دروستبکە',\n    'icon_class'             => 'ئایکۆنی بەکارهێنراو بۆ ئەم خشتەیە',\n    'icon_hint'              => 'ئایکۆن بەکاربێنە (ئارەزوومەندانە)',\n    'icon_hint2'             => 'کۆمەڵەی فۆنتەکانی ڤۆیەیجەر (Voyager)',\n    'model_class'            => 'ناوی کلاسی مۆدێل',\n    'model_name'             => 'ناوی مۆدێل',\n    'model_name_ph'          => 'نمونە. \\App\\User, ئەگەر بە بەتاڵی جێبهێڵرێت ناوی خشتە بەکاردهێنرێت',\n    'order'                  => 'ڕێکخستن',\n    'order_column'           => 'ئەستوونی ڕێکخستن',\n    'order_column_ph'        => 'ئەو هێڵەی کە ئەستونەکەی تیا تۆمار دەکرێت',\n    'order_ident_column'     => 'دەرکەوتنی ئەستوونی ڕێکخستن',\n    'order_ident_column_ph'  => 'ئەو ئەستوونەی کە دەرەکەوێت لە کاتی ڕێکخستنی پەڕەکاندا',\n    'ordering_not_set'       => 'پێویستە سەرەتا ڕێکخستن دیاریبکەیت',\n    'policy_class'           => 'ناوی کڵاسی ڕێوشوێن (Policy)',\n    'policy_name'            => 'ناوی ڕێوشوێن (Policy)',\n    'policy_name_ph'         => 'نمونە. \\App\\Policies\\UserPolicy, ئەگەر بە بەتاڵی جێبهێڵدرێت ناوی بنەڕەتی بەکاردەهێنرێت',\n    'server_pagination'      => 'پەڕەکردنی بەشی-سێرڤەر',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'لینک (دەبێت تاقانە بێت)',\n    'url_slug_ph'            => 'لینک (نمونە. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/ku/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'بەخێربێیت بۆ قیبلەنمای ڤۆیەیجەر (Voyager). هەموو ئەپڵیکەیشنێک پێویستی بە قیبلەنمایەکە بۆ نیشاندانی ڕێی ڕاست.\n    لەم بەشەدا زۆرێک سەرچاوە و ئەرکی بەڕێوەبردن دەدۆزیتەوە بۆ ڕێبەری کردنت لە دروتکردنی ئەپلیکەیشنەکەتدا.',\n    'links'         => [\n        'title'                 => 'لینکەکان',\n        'documentation'         => 'بەڵگەنامەکردن',\n        'voyager_homepage'      => 'پەڕەی سەرەتای ڤۆیەیجەر (Voyager)',\n    ],\n    'commands'      => [\n        'title'                 => 'ناونیشان',\n        'text'                  => 'فرمانەکانی ئارتیسان جێبەجێ بکە لە ڤۆیەیجەرەوە.',\n        'clear_output'          => 'دەرخستەکان پاکبکەرەوە',\n        'command_output'        => 'دەرخستەی فرامی ئارتیسان',\n        'additional_args'       => 'پرسیاری زیاتر؟',\n        'run_command'           => 'فرمان جێبەجێبکە',\n    ],\n    'resources'     => [\n        'title'                 => 'سەرچاوەکان',\n        'text'                  => 'سەرچاوەکانی ڤۆیەیجەر بۆ دۆزینەوەی شتەکان بە خێرایی.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'لۆگەکان',\n        'text'                  => 'لۆگەلانی ئەپڵیکەیشنەکەت',\n        'file_too_big'          => 'فایلی لۆگ >50, تکایە دایبگرە.',\n        'level'                 => 'ئاست',\n        'context'               => 'دەق',\n        'date'                  => 'ڕۆژ',\n        'content'               => 'ناوەرۆک',\n        'download_file'         => 'داگرتنی فایل',\n        'delete_file'           => 'سڕینەوەی فایل',\n        'delete_all_files'      => 'سڕینەوەی هەموو فایلەکان',\n        'delete_success'        => 'بەسەرکەوتوویی فایلی لۆگ سڕدرایەوە:',\n        'delete_all_success'    => 'بە سەرکەوتوویی هەموو فایلەکانی لۆگ سڕدرانەوە',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'فۆنتەکان',\n        'font_class'            => 'نەخشەی کڵاسی فۆنتی ڤۆیەیجەر',\n        'font_character'        => 'نەخشەی پیتەکانی فۆنتی ڤۆیەیجەر',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ku/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'ستوونی نوێ دابنێ',\n    'add_softdeletes'           => 'سڕینەوەی نەرم دابنێ',\n    'add_timestamps'            => 'مۆری کات (Timestamps) دابنێ',\n    'already_exists'            => 'خۆی بوونی هەیە',\n    'already_exists_table'      => 'خشتەی :table خۆی بوونی هەیە',\n    'bread_crud_actions'        => 'BREAD/CRUD فرمانەکان',\n    'bread_info'                => 'BREAD زانیاری برێد',\n    'browse_bread'              => 'گەڕان بە ناو بڕیددا (BREAD)',\n    'column'                    => 'ستوون',\n    'composite_warning'         => 'ئاگاداربە: ئەم ستوونە خۆی بەشێکە لە فەهرەست',\n    'create_new_table'          => 'خشتەی بوێ دروستبکە',\n    'create_your_new_table'     => 'خشتە نوێیەکەت دروستبکە',\n    'create_model_table'        => 'مۆدێل بۆ ئەم خشتەیە دروستدەکەیت؟',\n    'default'                   => 'بنەڕەت',\n    'delete_bread_before_table' => 'تکایە دڵنیابەرەوە کە پێش ئەوەی ئەم خشتەیە بسڕیتەوە برێدەکەی بسڕیتەوە.',\n    'delete_table_confirm'      => 'بەڵی، ئەم خشتەیە بسڕەوە',\n    'delete_table_question'     => 'دڵنیایت کە دەتەوێت خشتەی :table بسڕیتەوە؟',\n    'editing_table'             => 'دەستکاری خشتەی :table',\n    'edit_table'                => 'دەستکاری خشتەی :table لە خوارەوە',\n    'edit_table_not_exist'      => 'ئەو خشتەیەی دەتەوێت دەستکاری بکەیت بوونی نییە',\n    'extra'                     => 'زیاتر',\n    'field'                     => 'خانە',\n    'field_safe_failed'         => 'نەتوانرا خانەی :field تۆمار بکرێت ، ئێمە ئەگەڕێینەوە!',\n    'index'                     => 'فەهرەست',\n    'input_type'                => 'جۆری فەهرەست',\n    'key'                       => 'کلیل',\n    'name_warning'              => 'تکای ناوی ستوون بنێ پێش ئەوەی فەهرەستی بۆ زیادبکەیت',\n    'no_composites_warning'     => 'ئەم خشتەیە خۆی فەهرەستی هەیە. تکایە ئاگاداربە لە ئێستادا پشتگری ناکرێت. ئاگاداربە کاتێ فەهرەست زیاد یان کەم دەکەیت.',\n    'null'                      => 'Null',\n    'optional_details'          => 'زانیاری ئارەزوومەندانە',\n    'policy_class'              => 'ناوی کڵاسی ڕێوشوێن (Policy)',\n    'policy_name'               => 'ناوی ڕێوشوێن (Policy)',\n    'policy_name_ph'            => 'نموونە. \\App\\Policies\\UserPolicy, ئەگەر بە بەتاڵی جێبهێڵدرێت ناوی بنەڕەت بەکاردەهێنرێت',\n    'primary'                   => 'سەرەکی',\n    'server_pagination'         => 'پەڕەکردنی بەشی-سێرڤەر',\n    'success_create_table'      => 'بە سەرکەوتووی خشتەی :table دروستکرا',\n    'success_created_bread'     => 'بە سەرکەوتووی برێدی (BREAD) دروستکرا',\n    'success_delete_table'      => 'بە سەرکەوتوویی خشتەی :table سڕدرایەوە',\n    'success_remove_bread'      => 'بە سەرکەوتوویی برێد سڕدایەوە لە :datatype',\n    'success_update_bread'      => 'بە سەرکەوتووی برێدی :datatype نوێکرایەوە',\n    'success_update_table'      => 'بە سەرکەوتوویی خشتەی :table نوێکرایەوە',\n    'table_actions'             => 'فرمانەکانی خشتە',\n    'table_columns'             => 'ستوونەکانی خشتە',\n    'table_has_index'           => 'ئەو خشتەیە خۆی فەهرەستی هەیە.',\n    'table_name'                => 'ناوی خشتە',\n    'table_no_columns'          => 'خشتە هیچ ستوونێکی نییە...',\n    'type'                      => 'جۆر',\n    'type_not_supported'        => 'ئەو جۆرە پشتگیری لێنەکراوە',\n    'unique'                    => 'دانسقە',\n    'unknown_type'              => 'جۆری نەزانراو',\n    'update_table'              => 'خشتە نوێبکەرەوە',\n    'url_slug'                  => 'لینک (پێویستە دانسقە بێت)',\n    'url_slug_ph'               => 'لینک (نموونە. posts)',\n    'visibility'                => 'دەرکەوتن',\n    'relationship'              => [\n        'relationship'         => 'پەیوەندی',\n        'relationships'        => 'پەیوەندییەکان',\n        'has_one'              => 'یەک دانەی هەیە',\n        'has_many'             => 'زۆری هەیە',\n        'belongs_to'           => 'بەشێکە لە',\n        'belongs_to_many'      => 'بەشێکە لە زۆر',\n        'which_column_from'    => 'کام لە ستوونکەن لە',\n        'is_used_to_reference' => 'بەکارهێنراوە ڤۆ گەڕانەوە بۆ',\n        'pivot_table'          => 'خشتەی دوولایی (Pivot)',\n        'selection_details'    => 'ووردەکاری دیاریکراو',\n        'display_the'          => 'پیشانی بدە',\n        'store_the'            => 'یۆماری بکە',\n        'allow_tagging'        => 'ڕێگە بە تاگ کردن بدە',\n        'easy_there'           => '‌هێواش بەرەوە کاپتن',\n        'before_create'        => 'پێش ئەوەی پەیوەندییەک دروستبکەیت سەرەتا دەبێت بڕید دروستبکەیت.<br> دواتر, دواتر بگەڕیوە بۆ دەستکاری کردنی برێد و دەتوانیت پەیوەندی دروستبکەیت.<br> سوپاس.',\n        'cancel'               => 'ڕەتکردنەوە',\n        'add_new'              => 'دروستکردنی پەیوەندی نوێ',\n        'open'                 => 'بیکەرەوە',\n        'close'                => 'دایبخە',\n        'relationship_details' => 'ووردەکاری پەیوەندی',\n        'browse'               => 'گەڕان',\n        'read'                 => 'خوێندنەوە',\n        'edit'                 => 'دەسستکاری',\n        'add'                  => 'دانان',\n        'delete'               => 'سڕینەوە',\n        'create'               => 'پەیوەندییەک دروستبکە',\n        'namespace'            => 'جێناوی مۆدێل (نموونە. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ku/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'هیچ داتایەک بوونی نییە لەم خشتەیەدا',\n    'sInfo'           => 'پیشاندانی _START_ بۆ _END_ لە _TOTAL_ تۆمارەکان',\n    'sInfoEmpty'      => 'پیشاندانی 0 to 0 لە 0 تۆمارەکان',\n    'sInfoFiltered'   => '(ڕێکخراوە لە _MAX_ کۆی تۆمارەکان)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'پیشاندانی _MENU_ تۆمارەکان',\n    'sLoadingRecords' => 'ئامادەکردن...',\n    'sProcessing'     => 'پرۆسەکردن...',\n    'sSearch'         => 'گەڕان:',\n    'sZeroRecords'    => 'هیچتۆمارێک نەدۆزرایەوە لەو بچێت',\n    'oPaginate'       => [\n        'sFirst'    => 'یەکەم',\n        'sLast'     => 'دوایین',\n        'sNext'     => 'داهاتوو',\n        'sPrevious' => 'پێشتر',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': چالاکی بکە بۆ ڕكخستنی ستوون لە ا بۆ ز',\n        'sSortDescending' => ': چالاکی بکە بۆ ڕێکخستنی ستوون لە ز بۆ ا',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ku/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'هەفتەی ڕابردوو',\n    'last_year' => 'ساڵی ڕابردوو',\n    'this_week' => 'ئەم هەفتەیە',\n    'this_year' => 'ئەمساڵ',\n];\n"
  },
  {
    "path": "publishable/lang/ku/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'پەڕە',\n    'page_link_text' => 'سەیرکردنی هەموو پەڕەکان',\n    'page_text'      => ':count :string لە داتابەیسەکەتدایە. کلیک لە دووگمەکەی خوارەوە بکە بۆ بینینی هەموو پەڕەکان.',\n    'post'           => 'بابەت',\n    'post_link_text' => 'سەیرکردنی هەموو بابەتەکان',\n    'post_text'      => ':count :string لە داتابەیسەکەتدایە. کلیک لە دوگمەکەی خوارەوە بکە بۆ بینینی هەموو بابەتەکان',\n    'user'           => 'بەکارهێنەر',\n    'user_link_text' => 'سەیرکردنی هەموو بەکارهێنەرەکان',\n    'user_text'      => ':count :string لە داتابەیسەکەتدایە. کلیک لە دوگمەکەی خوارەوە بکە بۆ بینینی هەموو بەکارهێنەرەکان',\n];\n"
  },
  {
    "path": "publishable/lang/ku/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'ئێمە ئێستا  سیملینکی (symlink) لەبیرکراومان بۆ دروستکردیت.',\n    'symlink_created_title'  => 'سیملینکی symlink خەزنەی لەبیرکراو دروستکرا',\n    'symlink_failed_text'    => 'نەمانتوانی سیملیبکی لەبیرکراو دروستبکەین بۆ ئەپڵیکەیشنەکەت. وا دیارە سێرڤەرەکت پشتگیری ناکات.',\n    'symlink_failed_title'   => 'نەتوانرا سیملینکی (symlink) خەزنە دروستبکرێت',\n    'symlink_missing_button' => 'چاکی بکە',\n    'symlink_missing_text'   => 'نەتوانرا سیملیمکی (symlink) خەزنە بدۆزرێتەوە. لەوانەیە ئەمە کێشەت بۆ دروستبکات بۆ بەکارهێنانی فایلی وێنە و ڤیدیۆ لە براوسەرەکتەوە.',\n    'symlink_missing_title'  => 'سیملیبکی خەزنەی لەبیرکراو',\n];\n"
  },
  {
    "path": "publishable/lang/ku/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'بە بەتاڵی جێیبێلە بۆ ئەوەی وەک خۆی بمێنێتەوە',\n    'field_select_dd_relationship' => 'دڵنیایبە لەوەی کە پەیوەندییەکی باش دروستدەکەیت لەناو مێتۆدی :method کە تایبەتە بە کڵاسی :class .',\n    'type_checkbox'                => 'بۆکسی چێک',\n    'type_codeeditor'              => 'دەستکاریکری کۆد',\n    'type_file'                    => 'فایل',\n    'type_image'                   => 'وێنە',\n    'type_radiobutton'             => 'دوگمەی ڕادیۆ',\n    'type_richtextbox'             => 'بۆکسی نوسینی تێر',\n    'type_selectdropdown'          => 'هەڵبژاردنی بەرەوخوار',\n    'type_textarea'                => 'ناوچەی نوسین',\n    'type_textbox'                 => 'بۆکسی نوسین',\n];\n"
  },
  {
    "path": "publishable/lang/ku/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'true',\n    'action'                 => 'فرمان',\n    'actions'                => 'فرمانەکان',\n    'add'                    => 'دانان',\n    'add_folder'             => 'دانانی فۆڵدەر',\n    'add_new'                => 'دانانی نوێ',\n    'all_done'               => 'هەمووی تەواو',\n    'are_you_sure'           => 'تۆ دڵنیایت',\n    'are_you_sure_delete'    => 'دڵنیایت کە دەتەوێت بیسڕیتەوە',\n    'auto_increment'         => 'زیادکردنی خۆکارانە',\n    'bread'                  => 'برێد (BREAD)',\n    'browse'                 => 'گەڕان',\n    'builder'                => 'دروستکەر',\n    'bulk_delete'            => 'سڕینەوەی بە کۆمەڵ',\n    'bulk_delete_confirm'    => 'بەڵێ، بیانسرەوە',\n    'bulk_delete_nothing'    => 'هیچت دیاری نەکردووە بۆ سڕینەوە',\n    'cancel'                 => 'ڕەتکردنەوە',\n    'choose_type'            => 'شێوە دیاریبکە',\n    'click_here'             => 'کلیک لێرە بکە',\n    'close'                  => 'داخستن',\n    'compass'                => 'قیبلەنما',\n    'created_at'             => 'دروستکراوە لە',\n    'custom'                 => 'تایبەت',\n    'dashboard'              => 'داشبۆرد',\n    'database'               => 'داتابەیس',\n    'default'                => 'بنەڕەت',\n    'delete'                 => 'سڕینەوە',\n    'delete_confirm'         => 'بەڵێ، بیسڕەوە!',\n    'delete_question'        => 'دڵنیایت کە دەتەوێت بیسڕیتەوە',\n    'delete_this_confirm'    => 'بەڵێ، بیسڕەوە',\n    'deselect_all'           => 'هیچیان دیاری مەکە',\n    'download'               => 'داگرتن',\n    'drag_drop_info'         => 'بەشەکان ڕاكێشە و دایانبنێ بۆ دووبارە ڕێکخستنەوەیان.',\n    'edit'                   => 'دەستکاری',\n    'email'                  => 'ئیمەیڵ',\n    'error_deleting'         => 'ببورە دیارە کێشەیەک هەیە لە سڕینەوەی ئەمەدا',\n    'exception'              => 'جیاواز',\n    'featured'               => 'تایبەت',\n    'field_does_not_exist'   => 'ئەو خانەیە بوونی نییە',\n    'how_to_use'             => 'چۆنێتی بەکارهێنان',\n    'index'                  => 'فەهرەست',\n    'internal_error'         => 'کێشەی ناوخۆیی',\n    'items'                  => 'بەش',\n    'keep_sidebar_open'      => 'یایییی! لەنگەرەکان بەربەنەوە! (وە سایدبار بە کراوەیی جێبێڵن)',\n    'key'                    => 'کلیل',\n    'last_modified'          => 'دوایین دەستکاری',\n    'length'                 => 'درێژی',\n    'locale'                 => 'وەرگێڕان',\n    'login'                  => 'بچۆ ژورەوە',\n    'media'                  => 'میدیا',\n    'menu_builder'           => 'دروستکەری مێنیو',\n    'move'                   => 'بیجوڵێنە',\n    'name'                   => 'ناو',\n    'new'                    => 'نوێ',\n    'no'                     => 'نەخێر',\n    'no_thanks'              => 'نەخێر سوپاس',\n    'none'                   => 'هیچیان',\n    'not_null'               => 'نییە Null',\n    'no_results'             => 'No results',\n    'options'                => 'هەڵبژاردەکان',\n    'password'               => 'ووشەی نهێنی',\n    'permissions'            => 'ڕێگەپێدان',\n    'profile'                => 'پڕۆفایل',\n    'public_url'             => 'لینکی گشتی',\n    'read'                   => 'خوێندنەوە',\n    'rename'                 => 'دەستکاری ناو',\n    'required'               => 'پێویستە',\n    'return_to_list'         => 'گەڕانەوە بۆ لیست',\n    'route'                  => 'ڕاوت',\n    'save'                   => 'هەڵگرتن',\n    'search'                 => 'گەڕان',\n    'select_all'             => 'دیاریکردنی هەمووی',\n    'select_group'           => 'ئەو گروپەی ئێستا دیارتبکە بکە یان نوێ دابنێ',\n    'settings'               => 'ڕێکخستنەکان',\n    'showing_entries'        => 'پیشاندانی :from بۆ :to لە :all تۆمارەکان|پیشاندانی :from بۆ :to لە :all تۆمارەکان',\n    'submit'                 => 'ناردن',\n    'successfully_added_new' => 'بە سەرکەوتووی نوێ دانرا',\n    'successfully_deleted'   => 'بە سەرکەوتووی سڕدرایەوە',\n    'successfully_updated'   => 'بە سەرکەوتویی نوێ کرایەوە',\n    'timestamp'              => 'مۆری کات',\n    'title'                  => 'ناونیشان',\n    'type'                   => 'جۆر',\n    'unsigned'               => 'دیارینەکراو',\n    'unstick_sidebar'        => 'سایدبار مەلکێنە',\n    'update'                 => 'نوێکردنەوە',\n    'update_failed'          => 'نوێکردنەوە سەرکەوتو نەبوو',\n    'updated_order'          => 'ڕێکخستنە نوێکرایەوە',\n    'upload'                 => 'بارکردن',\n    'url'                    => 'لینک',\n    'view'                   => 'بینین',\n    'viewing'                => 'بینین',\n    'yes'                    => 'بەڵێ',\n    'yes_please'             => 'بەڵێ، تکایە',\n];\n"
  },
  {
    "path": "publishable/lang/ku/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'هەڵە JSON',\n    'invalid_message'   => 'وا دیارە کە JSON هەڵەت ناساندووە.',\n    'valid'             => 'دروست JSON',\n    'validation_errors' => 'ڕاستکردنەوە هەڵە بوو',\n];\n"
  },
  {
    "path": "publishable/lang/ku/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'چوونەو ژوورەوە',\n    'signin_below' => 'لە خوارەوە بچۆ ژوورەوە:',\n    'welcome'      => 'بەخێربێیت بۆ ڤۆیەیجەر (Voyager)، بەڕێوەبەرایەتی نادیار بۆ لاراڤێل',\n];\n"
  },
  {
    "path": "publishable/lang/ku/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'دروستکردنی فۆڵدەری نوێ',\n    'audio_support'          => 'براوسەرەکەت پشتگیری فایلی دەنگی ناکات.',\n    'create_new_folder'      => 'فۆڵدەرێکی نوێ دروستبکە',\n    'delete_folder_question' => 'سڕینەوەی فۆڵدەرێک هەموو ئەو فایل و فۆڵدەرانەش دەسڕێتەوە کە لە ناویدایە',\n    'destination_folder'     => 'سەرچاوەی فۆڵدەر',\n    'drag_drop_info'         => 'فایلەکانت ڕاکێشە و دایانبنێ بۆ بارکردنی  فایلەکانت',\n    'error_already_exists'   => 'ببورە فایلێک یان فۆڵدەرێک بە هەمان ناو لە ناو فۆڵدەرەکەدایە.',\n    'error_creating_dir'     => 'ببورە وا دیارە کێشەیەک هەیە لە دروستکردنی فۆڵدەردا، تکایە دڵنیابەرەوە کە ڕێت پێدراوە',\n    'error_deleting_file'    => 'ببورە کێشەیەک هەیە لە سڕینەوەی فایلەکەدا، تکایە دڵنیار بەرەوە کە ڕێپێدراویت',\n    'error_deleting_folder'  => 'ببورە کێشەیەک هەیە لە سڕینەوەی فۆڵدەرەکەتدا، تکایە دڵنیابەرەوە کە ڕێپێدراویت',\n    'error_may_exist'        => 'فایلێک یان فۆڵدەرێک بە هەمان ناوەوە هەیە.تکایە یان ناوی فایلەکە بگۆڕە یان فایلەکەی ناو فۆڵدەرەکە بسڕەوە.',\n    'error_moving'           => 'ببورە کێشەیەک هەیە لە گواستنەوەی فایلەکەتدا، تکایە دڵنیابەرەوە کە ڕێت پێدراوە.',\n    'error_uploading'        => 'بارکردن سەرنەکەوت: هەڵەیەکی نەزانراو ڕوویدا!',\n    'folder_exists_already'  => 'ببورە ئەو فۆڵدەرە بە هەمان ناوەوە هەیە، تکایە سەرەتا بیسڕەوە ئەگەر بە تەمایت دروستی بکەیتەوە',\n    'image_does_not_exist'   => 'وێنە بوونی نییە',\n    'image_removed'          => 'وێنە سڕدرایەوە',\n    'library'                => 'کتێبخانەی میدیا',\n    'loading'                => 'ئامادەکردنی فایلەکانی میدیا',\n    'move_file_folder'       => 'جوڵاندنی فایل/فۆڵدەر',\n    'new_file_folder'        => 'ناوی فایل/فۆڵدەر نوێ',\n    'new_folder_name'        => 'ناوی فۆڵدەری نوێ',\n    'no_files_here'          => 'هیچ فایلێکی لێ نییە.',\n    'no_files_in_folder'     => 'هیچ فایلێک لەم فۆڵدەرەدا نییە.',\n    'nothing_selected'       => 'هیچ فایلێک یان فۆڵدەرەک دیاری نەکراوە',\n    'rename_file_folder'     => 'گۆڕینی ناوی فایل/فۆڵدەر',\n    'success_uploaded_file'  => 'بە سەرکەوتوویی فایلی نوی بارکرا!',\n    'success_uploading'      => 'وێنە بە سەرکەوتویی بارکرا',\n    'uploading_wrong_type'   => 'بارکردن سەرکەوتوو نەبووڵ یان جۆری فایلە پشتگیری لێ نەکراوە یان زۆر گەورەیە لە کێشدا',\n    'video_support'          => 'براوسەرەکەت پشتگیری فایلی ڤیدیۆیی ناکات.',\n    'crop'                   => 'بڕین',\n    'crop_and_create'        => 'بڕین & دروستکردن',\n    'crop_override_confirm'  => 'وێنەی ئۆرجیناڵ دەسڕدرێتەوە، تۆ دڵنیایت؟',\n    'crop_image'             => 'بڕینی وێنە',\n    'success_crop_image'     => 'بە سەرکەوتویی وێنە بڕدرا',\n    'height'                 => 'بەرزی: ',\n    'title'                  => 'ناونیشان',\n    'type'                   => 'جۆر',\n    'size'                   => 'قەبارە',\n    'public_url'             => 'لینکی گشتی',\n    'last_modified'          => 'دوایین دەستکاری',\n    'browser_video_support'  => 'براوسەرەکەت پشتگیری فایلی ڤیدیۆیی ناکات.',\n    'browser_audio_support'  => 'براوسەرەکەت پشتگیری فایلی دەنگی ناکات.',\n    'width'                  => 'درێژی: ',\n    'add_all_selected'       => 'Add all selected',\n];\n"
  },
  {
    "path": "publishable/lang/ku/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'ڕەنگ بە RGB یان Hex (ئارەزوومەندانە)',\n    'color_ph'             => 'ڕەنگ, نموونە. #ffffff یان rgb(255, 255, 255)',\n    'create_new_item'      => 'دروستکردنی بڕگەی نوێ بۆ مێنیو',\n    'delete_item_confirm'  => 'بەڵێ، ئەم بڕگەیەی مێنیو بسڕەوە',\n    'delete_item_question' => 'دڵنیایت کە دەتەوێت ئەم بڕگەیەی مێنیو بسڕیتەوە؟',\n    'drag_drop_info'       => 'ڕاکێشان و دانانی بڕگەکانی مێنیو بکە بۆ دووبارە ڕێکخستنەوەیان.',\n    'dynamic_route'        => 'ڕاوتی داینامیکی',\n    'edit_item'            => 'دەستکاری بڕگەی مێنیو',\n    'icon_class'           => 'کڵاسی فۆنتی ئایجۆن بۆ بڕگەی مێنیو (بەکاربێنە',\n    'icon_class2'          => 'کڵاسی فۆنتی ڤۆیەیجەر</a>)',\n    'icon_class_ph'        => 'کڵاسی ئایکۆن (ئارەزوومەندانە)',\n    'item_route'           => 'ڕاوت بۆ بڕگەی مێنیو',\n    'item_title'           => 'ناونیشان بۆ ىرگەی مێنیو',\n    'link_type'            => 'جۆری لینک',\n    'new_menu_item'        => 'بڕگەی نوێ',\n    'open_in'              => 'بیکەرەوە لە',\n    'open_new'             => 'تاب/پەنجەرەی نوێ',\n    'open_same'            => 'هەمان تاب/پەنجەرە',\n    'route_parameter'      => 'پارامێتەری ڕاوت (ئەگەر هەبێت)',\n    'static_url'           => 'لینکی ستاتیک',\n    'successfully_created' => 'بە سەرکەوتویی بڕگەی نوێی مێنیو دروستکرا.',\n    'successfully_deleted' => 'بە سەرکەوتویی بڕگەی مێنیو سڕدرایەوە.',\n    'successfully_updated' => 'بە سەرکەوتووی برگەی مێنیو نوێکرایەوە.',\n    'updated_order'        => 'بە سەرکەوتویی ڕێکخستنی مێنیو نوێکرایەوە.',\n    'url'                  => 'لینک بۆ بڕگەی ـێنیو',\n    'usage_hint'           => 'دەتوانیت مێنیو دروستبکەی لە هەر شوێنێکی سایتەکەتەوە بە بانگکردنی|ئەتوانیت ئەم مێنیووە دابنێیت لە هەر شوێنێکی سایتەکەتدا کە بتەوێت بە بانگکردنی',\n];\n"
  },
  {
    "path": "publishable/lang/ku/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'خانەی زیادە',\n    'category'         => 'بەشی بابەت',\n    'content'          => 'ناوەڕۆکی بابەت',\n    'details'          => 'ووردەکاری بابەت',\n    'excerpt'          => 'کورتە <small>کورتەیەک دەربارەی ئەم بابەتە</small>',\n    'image'            => 'وێنەی بابەت',\n    'meta_description' => 'ڕونکردنەوەی مێتا (Meta)',\n    'meta_keywords'    => 'کلیلەووشەی مێتا (Meta)',\n    'new'              => 'دروستکردنی بابەتی نوێ',\n    'seo_content'      => 'ناوەڕۆکی SEO',\n    'seo_title'        => 'ناونیشانی SEO',\n    'slug'             => 'لینک',\n    'status'           => 'باری بابەت',\n    'status_draft'     => 'درافت',\n    'status_pending'   => 'چاوەڕوانی',\n    'status_published' => 'بڵاوکردنەوە',\n    'title'            => 'تایتڵی بابەت',\n    'title_sub'        => 'ناونیشانێک بۆ بابەتەکەت',\n    'update'           => 'نوێکردنەوەی بابەت',\n];\n"
  },
  {
    "path": "publishable/lang/ku/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'ئاڤاتار',\n    'edit'             => 'دەستکاری پڕۆفایلەکەم',\n    'edit_user'        => 'دەستکاری بەکارهێنەر',\n    'password'         => 'ووشەی ن‌ینی',\n    'password_hint'    => 'بە بەتاڵی جێیبێلە بۆ ئەوەی وەک خۆی بمێنێتەوە',\n    'role'             => 'ڕۆڵ',\n    'roles'            => 'ڕۆڵەکان',\n    'role_default'     => 'ڕۆڵی بنەڕەتی',\n    'roles_additional' => 'ڕۆڵی زیادە',\n    'user_role'        => 'ڕۆڵی بەکارهێنەر',\n];\n"
  },
  {
    "path": "publishable/lang/ku/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'نووسەر',\n        'avatar'           => 'ئاڤاتار',\n        'body'             => 'ناوەڕۆک',\n        'category'         => 'بەش',\n        'created_at'       => 'دروستکراوە لە',\n        'display_name'     => 'ناوی دەرکەوتن',\n        'email'            => 'ئیمەیڵ',\n        'excerpt'          => 'کورتە',\n        'featured'         => 'تایبەت',\n        'id'               => 'ناسنامە',\n        'meta_description' => 'ڕونکردنەوەی مێتا',\n        'meta_keywords'    => 'کلیلەووشەی مێتا',\n        'name'             => 'ناو',\n        'order'            => 'ڕێکخستن',\n        'page_image'       => 'وێنەی پەڕە',\n        'parent'           => 'باوک',\n        'password'         => 'ووشەی نهێنی',\n        'post_image'       => 'وێنەی بابەت',\n        'remember_token'   => 'تۆکەن لەبیرمەکە',\n        'role'             => 'ڕۆڵ',\n        'seo_title'        => 'ناونیشانی SEO',\n        'slug'             => 'لینک',\n        'status'           => 'بار',\n        'title'            => 'ناونیشان',\n        'updated_at'       => 'نوێکراوەتەو لە',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'بەش',\n            'plural'   => 'بەشەکان',\n        ],\n        'menu'     => [\n            'singular' => 'مێنیو',\n            'plural'   => 'ـێنیوکان',\n        ],\n        'page'     => [\n            'singular' => 'پەڕە',\n            'plural'   => 'پەڕەکان',\n        ],\n        'post'     => [\n            'singular' => 'بابەت',\n            'plural'   => 'بابەتەکان',\n        ],\n        'role'     => [\n            'singular' => 'ڕۆڵ',\n            'plural'   => 'ڕۆڵەکان',\n        ],\n        'user'     => [\n            'singular' => 'بەکارهێنەر',\n            'plural'   => 'بەکارهێنەرەکان',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'برێد',\n        'categories'   => 'بەشەکان',\n        'compass'      => 'قیبلەنما',\n        'dashboard'    => 'داشبۆرد',\n        'database'     => 'داتابەیس',\n        'media'        => 'میدیا',\n        'menu_builder' => 'دروستکەری مێنیو',\n        'pages'        => 'پەڕەکان',\n        'posts'        => 'بابەتەکان',\n        'roles'        => 'ڕۆڵەکان',\n        'settings'     => 'ڕێکخستنەکان',\n        'tools'        => 'کەرەستەکان',\n        'users'        => 'بەکارهێنەرەکان',\n    ],\n    'roles'      => [\n        'admin' => 'بەڕێوەبەرایتی',\n        'user'  => 'بەکارهێنەری ئاسایی',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'وێنەی باکگراوندی بەڕێوەبەرایەتی',\n            'description'                => 'کورتەی بەڕێوەبەرایەتی',\n            'description_value'          => 'بەخێربێیت بۆ ڤۆیەیجەر. بەڕێوەبەرایەتی وون بوو بۆ لاراڤێڵ',\n            'google_analytics_client_id' => 'ناسنامەی ڕاژەخوای شیکاری گووگڵ (بەکاردێت بۆ داشبۆردی بەڕێوەبەرایەتی)',\n            'icon_image'                 => 'وێنەی ئایکۆنی بەڕێوەبەرایەتی',\n            'loader'                     => 'ئامادەکردنی بەڕێوەبەرایەتی',\n            'title'                      => 'ناونیشانی بەڕێوەبەرایەتی',\n        ],\n        'site'  => [\n            'description'                  => 'دەربارەی وێبسایت',\n            'google_analytics_tracking_id' => 'ناسنامەی ڕاژەخوازی شیکاری گووگڵ',\n            'logo'                         => 'لۆگۆی وێبسایت',\n            'title'                        => 'ناونیشانی وێبسایت',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ku/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'دەتوانیت نرخی هەریەکێک لەو ڕێکخستانەو دەستبکەوێت لەهەر بەشێکی وێبسایتەکەتدا بە بانگکردنی',\n    'save'                 => 'هەڵگرتنی ڕێکخستنەکان',\n    'new'                  => 'ڕێکخستنی نوێ',\n    'help_name'            => 'ناوی ڕێکخستن نمونە: ناونیشانی بەڕێوەبەرایەتی',\n    'help_key'             => 'کلیلی ڕێکخستن نمونە: admin_title',\n    'help_option'          => '(ئارەزوومەندانە, تەنها بەسەر چەند جۆرێکدا جێبەجێ دەبێت وەک دوگمەی ڕادیۆ و لیستی بەرەوخوار)',\n    'add_new'              => 'ڕێکخستنی نوێ دابنێ',\n    'delete_question'      => 'دڵنیایت کە دەتەوێت ڕیکخستنی :setting بسڕیتەوە؟',\n    'delete_confirm'       => 'بەڵێ، ئەو ڕێکخستنە بسڕەوە',\n    'successfully_created' => 'بە سەرەکەوتویی ڕێکخستن دروستکرا',\n    'successfully_saved'   => 'بە سەرکەوتویی ڕێکخستن هەڵگیرا',\n    'successfully_deleted' => 'بە سەرکەوتویی ڕێکخستن سڕدرایەوە',\n    'already_at_top'       => 'ئەمە پێشتر خۆی لەسەرووی لیستەکەدا بووە',\n    'already_at_bottom'    => 'ئەمە پێشتر خۆی لە خوارووی لیستەکەدا بووە',\n    'key_already_exists'   => 'کلیلی :key خۆی بوونی هەیە',\n    'moved_order_up'       => 'ڕێکخستنی :name بەرزکرایەوە',\n    'moved_order_down'     => 'ڕێکخستنی :name نزمکرایەوە',\n    'successfully_removed' => 'بە سەرکەوتویی نرخی :name سڕدرایەوە',\n    'group_general'        => 'گشتی',\n    'group_admin'          => 'بەڕێوەبەر',\n    'group_site'           => 'سایت',\n    'group'                => 'گروپ',\n    'help_group'           => 'ئەم گروپی ڕێکخستنە دەگەڕیتەوە بۆ',\n];\n"
  },
  {
    "path": "publishable/lang/ku/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'دروستکراوە بە  <i class=\"voyager-heart\"></i> لەلایەن',\n    'footer_copyright2' => 'دروستکراوە بە هەنگوین و هەنگوینی زیاتر',\n];\n"
  },
  {
    "path": "publishable/lang/mm/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'By pageview',\n    'by_sessions'            => 'By sessions',\n    'by_users'               => 'By users',\n    'no_client_id'           => 'To view analytics you\\'ll need to get a google analytics client id and add it to your settings for the key <code>google_analytics_client_id</code>. Get your key in your Google developer console:',\n    'set_view'               => 'Select a View',\n    'this_vs_last_week'      => 'This Week vs Last Week',\n    'this_vs_last_year'      => 'This Year vs Last Year',\n    'top_browsers'           => 'Top Browsers',\n    'top_countries'          => 'Top Countries',\n    'various_visualizations' => 'Various visualizations',\n];\n"
  },
  {
    "path": "publishable/lang/mm/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Add BREAD to this table',\n    'bread_crud_actions'     => 'BREAD/CRUD Actions',\n    'bread_info'             => 'BREAD info',\n    'controller_name_hint'   => 'ex. PageController, if left empty will use the BREAD Controller',\n    'create_bread_for_table' => 'Create BREAD for :table table',\n    'default_search_key'     => 'Default server-side search field',\n    'default_search_key_ph'  => 'The field will be pre-selected for server-side searching',\n    'delete_bread'           => 'Delete BREAD',\n    'delete_bread_conf'      => 'Yes, remove the BREAD',\n    'delete_bread_quest'     => 'Are you sure you want to delete the BREAD for the :table table?',\n    'edit_bread'             => 'Edit BREAD',\n    'edit_bread_for_table'   => 'Edit BREAD for :table table',\n    'error_creating_bread'   => 'Sorry it appears there may have been a problem creating this BREAD',\n    'error_removing_bread'   => 'Sorry it appears there was a problem removing this BREAD',\n    'error_updating_bread'   => 'Sorry it appears there may have been a problem updating this BREAD',\n    'error_tagging'          => 'Sorry it appears there may have been a problem creating the record. Please make sure your table has defaults for other fields.',\n    'success_created_bread'  => 'Successfully created new BREAD',\n    'success_remove_bread'   => 'Successfully removed BREAD from :datatype',\n    'success_update_bread'   => 'Successfully updated the :datatype BREAD',\n    'controller_name'        => 'Controller Name',\n    'create_migration'       => 'Create migration for this table?',\n    'description'            => 'Description',\n    'display_name'           => 'Display Name',\n    'display_name_plural'    => 'Display Name (Plural)',\n    'display_name_singular'  => 'Display Name (Singular)',\n    'edit_rows'              => 'Edit the rows for the :table table below',\n    'generate_permissions'   => 'Generate Permissions',\n    'icon_class'             => 'Icon to use for this Table',\n    'icon_hint'              => 'Icon (optional) Use a',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Model Class Name',\n    'model_name'             => 'Model Name',\n    'model_name_ph'          => 'ex. \\App\\User, if left empty will try and use the table name',\n    'order'                  => 'Order',\n    'order_column'           => 'Order column',\n    'order_column_ph'        => 'The column where the order is stored',\n    'order_direction'        => 'Order direction',\n    'order_ident_column'     => 'Order display column',\n    'order_ident_column_ph'  => 'The column which is displayed in the order page',\n    'ordering_not_set'       => 'You have to define ordering first',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'server_pagination'      => 'Server-side Pagination',\n    'scope'                  => 'Scope',\n    'soft_deletes_on'        => 'Show Deleted',\n    'soft_deletes_off'       => 'Hide Deleted',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URL Slug (must be unique)',\n    'url_slug_ph'            => 'URL slug (ex. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/mm/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Welcome to the Voyager Compass. Every good app needs a compass to point them in the right direction.\n    In this section you will find many resources and administrative tasks to help guide you as you build out your application.',\n    'links'         => [\n        'title'                 => 'Links',\n        'documentation'         => 'Documentation',\n        'voyager_homepage'      => 'Voyager Homepage',\n    ],\n    'commands'      => [\n        'title'                 => 'Commands',\n        'text'                  => 'Run Artisan Commands from Voyager.',\n        'clear_output'          => 'clear output',\n        'command_output'        => 'Artisan Command Output',\n        'additional_args'       => 'Additional Args?',\n        'run_command'           => 'Run Command',\n    ],\n    'resources'     => [\n        'title'                 => 'Resources',\n        'text'                  => 'Voyager resources to help you find things quicker.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Logs',\n        'text'                  => 'Your app logs',\n        'file_too_big'          => 'Log file >50M, please download it.',\n        'level'                 => 'Level',\n        'context'               => 'Context',\n        'date'                  => 'Date',\n        'content'               => 'Content',\n        'download_file'         => 'Download file',\n        'delete_file'           => 'Delete file',\n        'delete_all_files'      => 'Delete all files',\n        'delete_success'        => 'Successfully deleted log file:',\n        'delete_all_success'    => 'Successfully deleted all log files',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Fonts',\n        'font_class'            => 'Voyager Fonts Class Mapping',\n        'font_character'        => 'Voyager Fonts Character Mapping',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/mm/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Add New Column',\n    'add_softdeletes'           => 'Add Soft Deletes',\n    'add_timestamps'            => 'Add Timestamps',\n    'already_exists'            => 'already exists',\n    'already_exists_table'      => 'Table :table already exists',\n    'bread_crud_actions'        => 'BREAD/CRUD Actions',\n    'bread_info'                => 'BREAD info',\n    'browse_bread'              => 'Browse BREAD',\n    'column'                    => 'Column',\n    'composite_warning'         => 'Warning: this column is part of a composite index',\n    'create_new_table'          => 'Create New Table',\n    'create_your_new_table'     => 'Create Your New Table',\n    'create_model_table'        => 'Create model for this table?',\n    'default'                   => 'Default',\n    'delete_bread_before_table' => 'Please make sure to remove the BREAD on this table before deleting the table.',\n    'delete_table_confirm'      => 'Yes, delete this table',\n    'delete_table_question'     => 'Are you sure you want to delete the :table table?',\n    'editing_table'             => 'Editing table :table',\n    'edit_table'                => 'Edit the :table table below',\n    'edit_table_not_exist'      => 'The table you want to edit doesn\\'t exist',\n    'extra'                     => 'Extra',\n    'field'                     => 'Field',\n    'field_safe_failed'         => 'Failed to save field :field, we\\'re rolling back!',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Input Type',\n    'key'                       => 'Key',\n    'name_warning'              => 'Please name the column before adding an index',\n    'no_composites_warning'     => 'This table has composite indexes. Please note that they are not supported at the moment. Be careful when trying to add/remove indexes.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Optional Details',\n    'policy_class'              => 'Policy Class Name',\n    'policy_name'               => 'Policy Name',\n    'policy_name_ph'            => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'primary'                   => 'PRIMARY',\n    'server_pagination'         => 'Server-side Pagination',\n    'success_create_table'      => 'Successfully created :table table',\n    'success_created_bread'     => 'Successfully created new BREAD',\n    'success_delete_table'      => 'Successfully deleted :table table',\n    'success_remove_bread'      => 'Successfully removed BREAD from :datatype',\n    'success_update_bread'      => 'Successfully updated the :datatype BREAD',\n    'success_update_table'      => 'Successfully updated :table table',\n    'table_actions'             => 'Table Actions',\n    'table_columns'             => 'Table Columns',\n    'table_has_index'           => 'The table already has a primary index.',\n    'table_name'                => 'Table Name',\n    'table_no_columns'          => 'The table has no columns...',\n    'type'                      => 'Type',\n    'type_not_supported'        => 'This type is not supported',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Unknown Type',\n    'update_table'              => 'Update Table',\n    'url_slug'                  => 'URL Slug (must be unique)',\n    'url_slug_ph'               => 'URL slug (ex. posts)',\n    'visibility'                => 'Visibility',\n    'relationship'              => [\n        'relationship'         => 'Relationship',\n        'relationships'        => 'Relationships',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => 'Which column from the',\n        'is_used_to_reference' => 'is used to reference the',\n        'pivot_table'          => 'Pivot Table',\n        'selection_details'    => 'Selection Details',\n        'display_the'          => 'Display the',\n        'store_the'            => 'Store the',\n        'allow_tagging'        => 'Allow Tagging',\n        'easy_there'           => 'Easy there Captain',\n        'before_create'        => 'Before you can create a new relationship you will need to create the BREAD first.<br> Then, return back to edit the BREAD and you will be able to add relationships.<br> Thanks.',\n        'cancel'               => 'Cancel',\n        'add_new'              => 'Add New relationship',\n        'open'                 => 'Open',\n        'close'                => 'Close',\n        'relationship_details' => 'Relationship Details',\n        'browse'               => 'Browse',\n        'read'                 => 'Read',\n        'edit'                 => 'Edit',\n        'add'                  => 'Add',\n        'delete'               => 'Delete',\n        'create'               => 'Create a Relationship',\n        'namespace'            => 'Fully Qualified Model Name (ex. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/mm/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'No data available in table',\n    'sInfo'           => 'Showing _START_ to _END_ of _TOTAL_ entries',\n    'sInfoEmpty'      => 'Showing 0 to 0 of 0 entries',\n    'sInfoFiltered'   => '(filtered from _MAX_ total entries)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Show _MENU_ entries',\n    'sLoadingRecords' => 'Loading...',\n    'sProcessing'     => 'Processing...',\n    'sSearch'         => 'Search:',\n    'sZeroRecords'    => 'No matching records found',\n    'oPaginate'       => [\n        'sFirst'    => 'First',\n        'sLast'     => 'Last',\n        'sNext'     => 'Next',\n        'sPrevious' => 'Previous',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': activate to sort column ascending',\n        'sSortDescending' => ': activate to sort column descending',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/mm/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Last Week',\n    'last_year' => 'Last Year',\n    'this_week' => 'This Week',\n    'this_year' => 'This Year',\n];\n"
  },
  {
    "path": "publishable/lang/mm/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Page|Pages',\n    'page_link_text' => 'View all pages',\n    'page_text'      => 'You have :count :string in your database. Click on button below to view all pages.',\n    'post'           => 'Post|Posts',\n    'post_link_text' => 'View all posts',\n    'post_text'      => 'You have :count :string in your database. Click on button below to view all posts.',\n    'user'           => 'User|Users',\n    'user_link_text' => 'View all users',\n    'user_text'      => 'You have :count :string in your database. Click on button below to view all users.',\n];\n"
  },
  {
    "path": "publishable/lang/mm/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'We just created the missing symlink for you.',\n    'symlink_created_title'  => 'Missing storage symlink created',\n    'symlink_failed_text'    => 'We failed to generate the missing symlink for your application. It seems like your hosting provider does not support it.',\n    'symlink_failed_title'   => 'Could not create missing storage symlink',\n    'symlink_missing_button' => 'Fix it',\n    'symlink_missing_text'   => 'We could not find a storage symlink. This could cause problems with loading media files from the browser.',\n    'symlink_missing_title'  => 'Missing storage symlink',\n];\n"
  },
  {
    "path": "publishable/lang/mm/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Leave empty to keep the same',\n    'field_select_dd_relationship' => 'Make sure to setup the appropriate relationship in the :method method of the :class class.',\n    'type_checkbox'                => 'Check Box',\n    'type_codeeditor'              => 'Code Editor',\n    'type_file'                    => 'File',\n    'type_image'                   => 'Image',\n    'type_radiobutton'             => 'Radio Button',\n    'type_richtextbox'             => 'Rich Textbox',\n    'type_selectdropdown'          => 'Select Dropdown',\n    'type_textarea'                => 'Text Area',\n    'type_textbox'                 => 'Text Box',\n];\n"
  },
  {
    "path": "publishable/lang/mm/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Action',\n    'actions'                => 'Actions',\n    'add'                    => 'Add',\n    'add_folder'             => 'Add Folder',\n    'add_new'                => 'Add New',\n    'all_done'               => 'All done',\n    'are_you_sure'           => 'Are you sure',\n    'are_you_sure_delete'    => 'Are you sure you want to delete',\n    'ascending'              => 'Ascending',\n    'auto_increment'         => 'Auto Increment',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Browse',\n    'builder'                => 'Builder',\n    'bulk_delete'            => 'Bulk Delete',\n    'bulk_delete_confirm'    => 'Yes, Delete These',\n    'bulk_delete_nothing'    => 'You haven\\'t selected anything to delete',\n    'cancel'                 => 'Cancel',\n    'choose_type'            => 'Choose Type',\n    'click_here'             => 'Click Here',\n    'close'                  => 'Close',\n    'compass'                => 'Compass',\n    'created_at'             => 'Created at',\n    'custom'                 => 'Custom',\n    'dashboard'              => 'Dashboard',\n    'database'               => 'Database',\n    'default'                => 'Default',\n    'delete'                 => 'Delete',\n    'delete_confirm'         => 'Yes, Delete it!',\n    'delete_question'        => 'Are you sure you want to delete this',\n    'delete_this_confirm'    => 'Yes, Delete This',\n    'descending'             => 'Descending',\n    'deselect_all'           => 'Deselect All',\n    'download'               => 'Download',\n    'drag_drop_info'         => 'Drag and drop the Items below to re-arrange them.',\n    'edit'                   => 'Edit',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Sorry it appears there was a problem deleting this',\n    'error_restoring'        => 'Sorry it appears there was a problem restoring this',\n    'exception'              => 'Exception',\n    'featured'               => 'Featured',\n    'field_does_not_exist'   => 'Field does not exist',\n    'find_by_place'          => 'Find by Place',\n    'home'                   => 'Home',\n    'how_to_use'             => 'How To Use',\n    'index'                  => 'Index',\n    'internal_error'         => 'Internal error',\n    'items'                  => 'item(s)',\n    'keep_sidebar_open'      => 'Yarr! Drop the anchors! (and keep the sidebar open)',\n    'key'                    => 'Key',\n    'last_modified'          => 'Last modified',\n    'latitude'               => 'Latitude',\n    'length'                 => 'Length',\n    'locale'                 => 'Locale',\n    'login'                  => 'Login',\n    'logout'                 => 'Logout',\n    'longitude'              => 'Longitude',\n    'media'                  => 'Media',\n    'menu_builder'           => 'Menu Builder',\n    'mimetype_not_allowed'   => 'This mimetype is not allowed',\n    'move'                   => 'Move',\n    'name'                   => 'Name',\n    'new'                    => 'New',\n    'no'                     => 'No',\n    'no_thanks'              => 'No Thanks',\n    'none'                   => 'None',\n    'not_null'               => 'Not Null',\n    'no_results'             => 'No results',\n    'open'                   => 'Open',\n    'options'                => 'Options',\n    'password'               => 'Password',\n    'permissions'            => 'Permissions',\n    'profile'                => 'Profile',\n    'public_url'             => 'Public URL',\n    'read'                   => 'Read',\n    'rename'                 => 'Rename',\n    'remember_me'            => 'Remember me',\n    'required'               => 'Required',\n    'return_to_list'         => 'Return to List',\n    'route'                  => 'Route',\n    'save'                   => 'Save',\n    'search'                 => 'Search',\n    'select_all'             => 'Select All',\n    'select_group'           => 'Select Existing Group or Add New',\n    'settings'               => 'Settings',\n    'showing_entries'        => 'Showing :from to :to of :all entry|Showing :from to :to of :all entries',\n    'submit'                 => 'Submit',\n    'successfully_added_new' => 'Successfully Added New',\n    'successfully_deleted'   => 'Successfully Deleted',\n    'successfully_restored'  => 'Successfully Restored',\n    'successfully_updated'   => 'Successfully Updated',\n    'successfully_created'   => 'Successfully created',\n    'sweet_success'          => 'Sweet Success!',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'Title',\n    'type'                   => 'Type',\n    'restore'                => 'Restore',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'Unstick the sidebar',\n    'update'                 => 'Update',\n    'update_failed'          => 'Update Failed',\n    'updated_order'          => 'Order updated',\n    'upload'                 => 'Upload',\n    'url'                    => 'URL',\n    'view'                   => 'View',\n    'viewing'                => 'Viewing',\n    'whoopsie'               => 'Whoopsie!',\n    'yes'                    => 'Yes',\n    'yes_please'             => 'Yes, Please',\n];\n"
  },
  {
    "path": "publishable/lang/mm/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Invalid JSON',\n    'invalid_message'   => 'Seems like you introduced some invalid JSON.',\n    'valid'             => 'Valid JSON',\n    'validation_errors' => 'Validation errors',\n];\n"
  },
  {
    "path": "publishable/lang/mm/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Logging in',\n    'signin_below' => 'Sign In Below:',\n    'welcome'      => 'Welcome to Voyager. The Missing Admin for Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/mm/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Add New Folder',\n    'audio_support'          => 'Your browser does not support the audio element.',\n    'create_new_folder'      => 'Create New Folder',\n    'delete_folder_question' => 'Deleting a folder will remove all files and folders contained inside',\n    'delete_question'        => 'Are you sure you want to delete the following file(s)?',\n    'destination_folder'     => 'Destination Folder',\n    'drag_drop_info'         => 'Drag and drop files or click below to upload',\n    'error_already_exists'   => 'Sorry there is already a file/folder with that existing name in that folder.',\n    'error_creating_dir'     => 'Sorry something seems to have gone wrong with creating the directory, please check your permissions',\n    'error_deleting_file'    => 'Sorry something seems to have gone wrong deleting this file, please check your permissions',\n    'error_deleting_folder'  => 'Sorry something seems to have gone wrong when deleting this folder, please check your permissions',\n    'error_may_exist'        => 'File or Folder may already exist with that name. Please choose another name or delete the other file.',\n    'error_moving'           => 'Sorry there seems to be a problem moving that file/folder, please make sure you have the correct permissions.',\n    'error_renaming_ext'     => 'The extension of a file can not be changed!',\n    'error_uploading'        => 'Upload Fail: Unknown error occurred!',\n    'files'                  => '1 file|:count files',\n    'files_more'             => 'And :count more',\n    'file_does_not_exist'    => 'File does not exist',\n    'file_removed'           => 'File removed',\n    'files_selected'         => 'files/folder selected',\n    'folder_exists_already'  => 'Sorry that folder already exists, please delete that folder if you wish to re-create it',\n    'image_does_not_exist'   => 'Image does not exist',\n    'image_removed'          => 'Image removed',\n    'library'                => 'Media Library',\n    'loading'                => 'LOADING YOUR MEDIA FILES',\n    'max_files_select'       => 'You can only select one file|You can only select a maximum of :count files',\n    'min_files_select'       => 'You must select at least one file|You must select at least :count files',\n    'move_file_folder'       => 'Move File/Folder',\n    'new_file_folder'        => 'New File/Folder Name',\n    'new_folder_name'        => 'New Folder Name',\n    'no_files_here'          => 'No files here.',\n    'no_files_in_folder'     => 'No files in this folder.',\n    'nothing_selected'       => 'No file or folder selected',\n    'rename_file_folder'     => 'Rename File/Folder',\n    'success_uploaded_file'  => 'Successfully uploaded new file!',\n    'success_uploading'      => 'Image successfully uploaded!',\n    'success_moved'          => 'Successfully moved file/folder',\n    'success_renamed'        => 'Successfully renamed file/folder',\n    'uploading_wrong_type'   => 'Upload Fail: Unsupported file format or It is too large to upload!',\n    'crop'                   => 'Crop',\n    'crop_and_create'        => 'Crop & Create',\n    'crop_override_confirm'  => 'It will override the original image, are you sure?',\n    'crop_image'             => 'Crop Image',\n    'success_crop_image'     => 'Successfully cropped the image',\n    'height'                 => 'Height: ',\n    'title'                  => 'Title',\n    'type'                   => 'Type',\n    'size'                   => 'Size',\n    'public_url'             => 'Public URL',\n    'last_modified'          => 'Last Modified',\n    'browser_video_support'  => 'Your browser does not support the video tag.',\n    'browser_audio_support'  => 'Your browser does not support the audio element.',\n    'width'                  => 'Width: ',\n    'add_all_selected'       => 'Add all selected',\n];\n"
  },
  {
    "path": "publishable/lang/mm/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Color in RGB or Hex (optional)',\n    'color_ph'             => 'Color, ex. #ffffff or rgb(255, 255, 255)',\n    'create_new_item'      => 'Create a New Menu Item',\n    'delete_item_confirm'  => 'Yes, Delete This Menu Item',\n    'delete_item_question' => 'Are you sure you want to delete this menu item?',\n    'drag_drop_info'       => 'Drag and drop the menu Items below to re-arrange them.',\n    'dynamic_route'        => 'Dynamic Route',\n    'edit_item'            => 'Edit Menu Item',\n    'icon_class'           => 'Font Icon class for the Menu Item (Use a',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icon Class (optional)',\n    'item_route'           => 'Route for the menu item',\n    'item_title'           => 'Title of the Menu Item',\n    'link_type'            => 'Link type',\n    'new_menu_item'        => 'New Menu Item',\n    'open_in'              => 'Open In',\n    'open_new'             => 'New Tab/Window',\n    'open_same'            => 'Same Tab/Window',\n    'route_parameter'      => 'Route parameters (if any)',\n    'static_url'           => 'Static URL',\n    'successfully_created' => 'Successfully Created New Menu Item.',\n    'successfully_deleted' => 'Successfully Deleted Menu Item.',\n    'successfully_updated' => 'Successfully Updated Menu Item.',\n    'updated_order'        => 'Successfully updated menu order.',\n    'url'                  => 'URL for the Menu Item',\n    'usage_hint'           => 'You can output a menu anywhere on your site by calling|You can output this menu anywhere on your site by calling',\n];\n"
  },
  {
    "path": "publishable/lang/mm/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Additional Fields',\n    'category'         => 'Post Category',\n    'content'          => 'Post Content',\n    'details'          => 'Post Details',\n    'excerpt'          => 'Excerpt <small>Small description of this post</small>',\n    'image'            => 'Post Image',\n    'meta_description' => 'Meta Description',\n    'meta_keywords'    => 'Meta Keywords',\n    'new'              => 'Create New Post',\n    'seo_content'      => 'SEO Content',\n    'seo_title'        => 'SEO Title',\n    'slug'             => 'URL slug',\n    'status'           => 'Post Status',\n    'status_draft'     => 'draft',\n    'status_pending'   => 'pending',\n    'status_published' => 'published',\n    'title'            => 'Post Title',\n    'title_sub'        => 'The title for your post',\n    'update'           => 'Update Post',\n];\n"
  },
  {
    "path": "publishable/lang/mm/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'Avatar',\n    'edit'             => 'Edit My Profile',\n    'edit_user'        => 'Edit User',\n    'password'         => 'Password',\n    'password_hint'    => 'Leave empty to keep the same',\n    'role'             => 'Role',\n    'roles'            => 'Roles',\n    'role_default'     => 'Default Role',\n    'roles_additional' => 'Additional Roles',\n    'user_role'        => 'User Role',\n];\n"
  },
  {
    "path": "publishable/lang/mm/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows' => [\n        'author' => 'စာရေးသူ',\n        'avatar' => 'ကိုယ်ပွား',\n        'body' => 'စာသား',\n        'category' => 'အမျိုးအစား',\n        'created_at' => 'ဖန်တီးသည့်ရက်စွဲနှင့်အချိန်',\n        'display_name' => 'ဖော်ပြမည့်အမည်',\n        'email' => 'Email',\n        'excerpt' => 'ကောက်နုတ်ချက်',\n        'featured' => 'ဖီချာ',\n        'id' => 'ID',\n        'meta_description' => 'Meta ဖော်ပြချက်',\n        'meta_keywords' => 'Meta သော့ချက်စာလုံးများ',\n        'name' => 'နာမည်',\n        'order' => 'စီရန်',\n        'page_image' => 'စာမျက်နှာပုံ',\n        'parent' => 'မိဘ',\n        'password' => 'စကားဝှက်',\n        'post_image' => 'ပုံတင်ပါ',\n        'remember_token' => 'တိုကင်မှတ်ဉာဏ်',\n        'role' => 'အခန်းကဏ္ဍ',\n        'seo_title' => 'SEO ခေါင်းစဉ်',\n        'slug' => 'Slug',\n        'status' => 'အခြေအနေ',\n        'title' => 'ခေါင်းစဥ်',\n        'updated_at' => 'ရက်စွဲနှင့် အချိန်ကို အပ်ဒိတ်လုပ်ပါ။',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Category',\n            'plural' => 'Categories',\n        ],\n        'menu' => [\n            'singular' => 'Menu',\n            'plural' => 'Menus',\n        ],\n        'page' => [\n            'singular' => 'Page',\n            'plural' => 'Pages',\n        ],\n        'post' => [\n            'singular' => 'Post',\n            'plural' => 'Posts',\n        ],\n        'role' => [\n            'singular' => 'Role',\n            'plural' => 'Roles',\n        ],\n        'user' => [\n            'singular' => 'User',\n            'plural' => 'Users',\n        ],\n    ],\n    'menu_items' => [\n        'bread' => 'BREAD',\n        'categories' => 'Categories',\n        'compass' => 'Compass',\n        'dashboard' => 'Dashboard',\n        'database' => 'Database',\n        'media' => 'Media',\n        'menu_builder' => 'Menu Builder',\n        'pages' => 'Pages',\n        'posts' => 'Posts',\n        'roles' => 'Roles',\n        'settings' => 'Settings',\n        'tools' => 'Tools',\n        'users' => 'Users',\n    ],\n    'roles' => [\n        'admin' => 'စီမံခန့်ခွဲသူ',\n        'user' => 'အထွေထွေအသုံးပြုသူ',\n    ],\n    'settings' => [\n        'admin' => [\n            'background_image' => 'စီမံခန့်ခွဲသူ နောက်ခံပုံ',\n            'description' => 'စီမံခန့်ခွဲသူ ဖော်ပြချက်',\n            'description_value' => 'Voyager ကြိုဆိုပါသည်. The Missing Admin for Laravel',\n            'google_analytics_client_id' => 'Google Analytics Client ID (စီမံခန့်ခွဲသူရဲ့ dashboard အတွက်သုံးပါ)',\n            'icon_image' => 'စီမံခန့်ခွဲသူ အိုင်ကွန် ရုပ်ပုံ',\n            'loader' => 'စီမံခန့်ခွဲသူရဲ့ Loader',\n            'title' => 'စီမံခန့်ခွဲသူ ခေါင်းစဉ်',\n        ],\n        'site' => [\n            'description' => 'Site ဖော်ပြချက်',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo' => 'Site Logo ပုံ',\n            'title' => 'Site ခေါင်းစဉ်',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/mm/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help' => 'ဆိုက်အတွင်း ၎င်းတို့ကိုခေါ်ဆိုခြင်းဖြင့် ဆက်တင်များကို မည်သည့်နေရာတွင်မဆို ရယူနိုင်ပါသည်။',\n    'save' => 'ဆက်တင်များကို သိမ်းဆည်းပါ။',\n    'new' => 'ဆက်တင်အသစ်',\n    'help_name' => 'အမည် သတ်မှတ်ခြင်း ဥပမာ- စီမံခန့်ခွဲသူ ခေါင်းစဉ်',\n    'help_key' => 'သော့သတ်မှတ်ခြင်း ဥပမာ- admin_title',\n    'help_option' => '(optional, the same options as for the corresponding formfield apply)',\n    'add_new' => 'ဆက်တင်အသစ်များထည့်ပါ။',\n    'delete_question' => ':setting ဆက်တင်ကို ဖျက်လိုသည်မှာ သေချာပါသလား။',\n    'delete_confirm' => 'ဟုတ်ကဲ့၊ ဤဆက်တင်ကို ဖယ်ရှားပါ။',\n    'successfully_created' => 'ဆက်တင်တစ်ခုကို ဖန်တီးနိုင်ခဲ့တယ်။',\n    'successfully_saved' => 'ဆက်တင်များကို သိမ်းဆည်းနိုင်ခဲ့သည်။',\n    'successfully_deleted' => 'ဆက်တင်များကို ဖျက်နိုင်ခဲ့သည်။',\n    'already_at_top' => 'အပေါ်ဆုံးမှာရှိပြီးသားပါ',\n    'already_at_bottom' => 'အောက်ဆုံးမှာရှိပြီးသားပါ',\n    'key_already_exists' => ':key သော့ ရှိနှင့်ပြီးသား',\n    'moved_order_up' => ':name အပေါ်ကိုရွှေ့လိုက်သည်',\n    'moved_order_down' => ':name အောက်ကိုရွှေ့လိုက်သည်',\n    'successfully_removed' => ':name ဒီဟာကိုအောင်မြင်စွာဖျက်လိုက်ပါပြီ',\n    'group_general' => 'အထွေထွေ',\n    'group_admin' => 'စီမံခန့်ခွဲသူ',\n    'group_site' => 'Site',\n    'group' => 'အဖွဲ့',\n    'help_group' => 'ဤဆက်တင်ကို အောက်ပါအဖွဲ့များသို့ သတ်မှတ်ပေးပါ။',\n];\n"
  },
  {
    "path": "publishable/lang/mm/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright' => '<i class=\"voyager-heart\"></i> အချစ်တွေနဲ့လုပ်ထားသည်',\n    'footer_copyright2' => 'Made with rum and even more rum',\n];\n"
  },
  {
    "path": "publishable/lang/my/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'စာမျက်နှာတစ်ခုစီအတွက်',\n    'by_sessions'            => 'session တစ်ခုစီအတွက်',\n    'by_users'               => 'အသုံးပြုသူတိုင်းအတွက်',\n    'no_client_id'           => 'ခွဲခြမ်းစိတ်ဖြာမှုများကို ကြည့်ရှုရန်၊ သင်သည် Google Analytics တွင် သုံးစွဲသူ ID ကို ရယူပြီး ဆက်တင်များတွင် <code>google_analytics_client_id</ code> သို့ ထည့်ရပါမည်။ Google Developer Console တွင် သော့ကို ရယူပါ:',\n    'set_view'               => 'မြင်ကွင်းတစ်ခုကို ရွေးပါ။',\n    'this_vs_last_week'      => 'ဒီတစ်ပတ်နဲ့ ပြီးခဲ့တဲ့အပတ်',\n    'this_vs_last_year'      => 'မနှစ်ကနဲ့ ဒီနှစ်',\n    'top_browsers'           => 'ထိပ်တန်းဘရောက်ဆာ',\n    'top_countries'          => 'ထိပ်တန်းနိုင်ငံများ',\n    'various_visualizations' => 'အမျိုးမျိုးသောစိတ်ကူးပုံဖော်မှုများ',\n];"
  },
  {
    "path": "publishable/lang/my/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'BREAD ကို table သို့ထည့်ပါ',\n    'bread_crud_actions'     => 'BREAD/CRUD လုပ်ဆောင်ချက်များ',\n    'bread_info'             => 'BREAD အချက်အလက်',\n    'controller_name_hint'   => 'ဥပမာ- PageController၊ ဘာမှမရှိဘူးဆိုလျှင် BREAD Controller ကိုသုံးပါမည်',\n    'create_bread_for_table' => ':table အတွက် BREAD ဖန်တီးပါ',\n    'default_search_key'     => 'Default server-side search field',\n    'default_search_key_ph'  => 'The field will be pre-selected for server-side searching',\n    'delete_bread'           => 'BREAD ကို ဖယ်ရှားပါ',\n    'delete_bread_conf'      => 'ဟုတ်ကဲ့၊ ဒီ BREAD ကို ဖယ်ရှားလိုက်ပါ',\n    'delete_bread_quest'     => ':table BREAD ကို ဖျက်လိုသည်မှာ သေချာပါသလား',\n    'edit_bread'             => 'BREAD တည်းဖြတ်ခြင်း။',\n    'edit_bread_for_table'   => ':table ကို ပြင်ရန် BREAD',\n    'error_creating_bread'   => 'တောင်းပန်ပါတယ်။ ဤ BREAD ကို ဖန်တီးရာတွင် ပြဿနာရှိနိုင်သည်',\n    'error_removing_bread'   => 'တောင်းပန်ပါတယ်။ ဤ BREAD ကို ဖျက်ရာတွင် ပြဿနာရှိနေသည်',\n    'error_updating_bread'   => 'တောင်းပန်ပါတယ်။ ဤ BREAD ကို အပ်ဒိတ်လုပ်ရာတွင် ပြဿနာရှိနိုင်သည်။',\n    'error_tagging'          => 'တောင်းပန်ပါတယ်။ မှတ်တမ်းဖန်တီးရာတွင် ပြဿနာရှိနိုင်သည်။ table မှာ အခြား fields တွေအတွက် default value တွေရှိကြောင်းသေချာပါစေ',\n    'success_created_bread'  => 'BREAD အသစ်ကို ဖန်တီးနိုင်ခဲ့တယ်။',\n    'success_remove_bread'   => ':datatype BREAD ကို ဖယ်ရှားနိုင်ခဲ့တယ်။',\n    'success_update_bread'   => ':datatype BREAD ကို အပ်ဒိတ်လုပ်နိုင်ပါသည်။',\n    'controller_name'        => 'ထိန်းချုပ်သူအမည်',\n    'create_migration'       => 'ဤဇယားအတွက် ပြောင်းရွှေ့မှုတစ်ခု ဖန်တီးလိုပါသလား။',\n    'description'            => 'ရှင်းလင်းချက်',\n    'display_name'           => 'ဖော်ပြမည့်အမည်',\n    'display_name_plural'    => 'ဖော်ပြမည့်အမည် (အများကိန်း)',\n    'display_name_singular'  => 'ဖော်ပြမည့်အမည် (အနည်းကိန်း)',\n    'edit_rows'              => 'အောက်ပါတို့ကို တည်းဖြတ်ပါ :table table row',\n    'generate_permissions'   => 'ခွင့်ပြုချက်များကို ပြောင်းပါ။',\n    'icon_class'             => 'ဤဇယားအတွက် သင်္ကေတ',\n    'icon_hint'              => 'အိုင်ကွန် (ချန်လှပ်ထားနိုင်သည်) ဤအရာကို အသုံးပြုပါ',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'မော်ဒယ်အတန်းအမည်',\n    'model_name'             => 'မော်ဒယ်အမည်',\n    'model_name_ph'          => 'ဥပမာ- \\App\\User၊ ဇယားအမည်ကို အသုံးပြုမည်| ဘာမှမရှိဘူးဆိုလျှင် table name ကို အသုံးပြုမည်',\n    'order'                  => 'အော်ဒါ',\n    'order_column'           => 'အော်ဒါ ကော်လံ',\n    'order_column_ph'        => 'အမျိုးအစားအစီအစဥ်ကို ကိုယ်တိုင်သိမ်းဆည်းသောကော်လံ',\n    'order_direction'        => 'အော်ဒါ ဦးတည်ချက်',\n    'order_ident_column'     => 'အော်ဒါပြသရန် ကော်လံ',\n    'order_ident_column_ph'  => 'အော်ဒါစာမျက်နှာတွင် ပြသမည့် အကြောင်းအရာကော်လံ',\n    'ordering_not_set'       => 'ပထမဦးစွာ သင်သည် အမျိုးအစားအစီအစဥ်ကို သတ်မှတ်ရန် လိုအပ်သည်။',\n    'policy_class'           => 'မူဝါဒအတန်းအမည်',\n    'policy_name'            => 'မူဝါဒအမည်',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'server_pagination'      => 'Server-side Pagination',\n    'scope'                  => 'Scope',\n    'soft_deletes_on'        => 'ဖျက်ထားတာတွေပြပါ',\n    'soft_deletes_off'       => 'ဖျက်ထားတာတွေကိုဖုံးပါ',\n    'updated_order'          => 'Order updated လုပ်တာအောင်မြင်ပါတယ်',\n    'url_slug'               => 'URL Slug (must be unique)',\n    'url_slug_ph'            => 'URL slug (ex. posts)',\n];"
  },
  {
    "path": "publishable/lang/my/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Voyager Compass မှလှိုက်လှဲစွာကြိုဆိုပါသည်။ ကောင်းမွန်သော application တစ်ခုစီတိုင်းသည် လမ်းကြောင်းမှန်သို့ညွှန်ပြသော\n    သံလိုက်အိမ်မြှောင်တစ်ခု လိုအပ်ပါသည်။\n    သင့်အက်ပ်လီကေးရှင်းကို တည်ဆောက်ရာတွင် ကူညီရန်အတွက် ဤကဏ္ဍသည် အရင်းအမြစ်များနှင့် စီမံခန့်ခွဲရေးဆိုင်ရာ အလုပ်များစွာကို\n    မိတ်ဆက်ပေးပါသည်။',\n    'links'         => [\n        'title'                 => 'Links',\n        'documentation'         => 'စာရွက်စာတမ်း (အင်္ဂလိပ်ဆိုက်)',\n        'voyager_homepage'      => 'Voyager ပင်မစာမျက်နှာ (အင်္ဂလိပ်ဆိုက်)',\n    ],\n    'commands'      => [\n        'title'                 => 'Commands',\n        'text'                  => 'Voyager မှ Artisan command ကိုဖွင့်ပါ။',\n        'clear_output'          => 'အထွက်ကိုရှင်းလင်းပါ။',\n        'command_output'        => 'Artisan Command Output',\n        'additional_args'       => 'အငြင်းအခုံတစ်ခုကို ထည့်လိုပါသလား။',\n        'run_command'           => 'Run Command',\n    ],\n    'resources'     => [\n        'title'                 => 'Resources',\n        'text'                  => 'Voyager အရင်းအမြစ်များသည် သင်ရှာဖွေနေသည့်အရာကို ပိုမိုမြန်ဆန်စွာရှာဖွေရန် ကူညီပေးပါသည်။',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Logs',\n        'text'                  => 'အက်ပ်မှတ်တမ်း',\n        'file_too_big'          => 'မှတ်တမ်းဖိုင် > 50M၊ ကျေးဇူးပြု၍ ဒေါင်းလုဒ်လုပ်ပါ။',\n        'level'                 => 'အဆင့်',\n        'context'               => 'စကားစပ်',\n        'date'                  => 'ရက်စွဲ',\n        'content'               => 'မာတိကာ',\n        'download_file'         => 'ဖိုင်ကိုဒေါင်းလုဒ်လုပ်ပါ',\n        'delete_file'           => 'ဖိုင်ကိုဖျက်ပါ။',\n        'delete_all_files'      => 'ဖိုင်အားလုံးကို ဖျက်ပါ။',\n        'delete_success'        => 'ကျွန်ုပ်သည် မှတ်တမ်းဖိုင်ကို ဖျက်နိုင်သည်:',\n        'delete_all_success'    => 'မှတ်တမ်းဖိုင်တွေအားလုံးကို ဖျက်နိုင်ခဲ့ပါတယ်။',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Fonts',\n        'font_class'            => 'Voyager Fonts Class Mapping',\n        'font_character'        => 'Voyager Fonts Character Mapping',\n    ],\n];"
  },
  {
    "path": "publishable/lang/my/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'ကော်လံအသစ်ထည့်ပါ။',\n    'add_softdeletes'           => 'ကျိုးကြောင်းဆီလျော်စွာ ဖျက်ထည့်ပါ။',\n    'add_timestamps'            => 'ဖန်တီးသည့်ရက်စွဲနှင့် အချိန်နှင့် အပ်ဒိတ်ရက်စွဲနှင့် အချိန်တို့ကို ထည့်သွင်းထားသည်။',\n    'already_exists'            => 'ရှိနှင့်ပြီးသား',\n    'already_exists_table'      => ':table table ရှိနှင့်ပြီးဖြစ်သည်။',\n    'bread_crud_actions'        => 'BREAD/CRUD လုပ်ဆောင်ချက်',\n    'bread_info'                => 'BREAD သတင်းအချက်အလက်',\n    'browse_bread'              => 'Browse BREAD',\n    'column'                    => 'ကော်လံ',\n    'composite_warning'         => 'မှတ်ချက်- ဤကော်လံသည် ပေါင်းစပ်အညွှန်းတစ်ခု၏ အစိတ်အပိုင်းဖြစ်သည်။',\n    'create_new_table'          => 'ဇယားအသစ်တစ်ခုဖန်တီးပါ။',\n    'create_your_new_table'     => 'ဇယားအသစ်တစ်ခုဖန်တီးပါ။',\n    'create_model_table'        => 'Create model for this table?',\n    'default'                   => 'ပုံသေ',\n    'delete_bread_before_table' => 'ကျေးဇူးပြု၍ ဇယားကိုမဖျက်မီ ဤဇယားအတွက် BREAD ကို ဖျက်ပါ။',\n    'delete_table_confirm'      => 'ဟုတ်ကဲ့၊ ဒီဇယားကို ဖျက်လိုက်ပါ။',\n    'delete_table_question'     => ':table ဒီ table ကိုဖျက်ချင်တာသေချာပါသလား',\n    'editing_table'             => ':table တည်းဖြတ်ခြင်း',\n    'edit_table'                => ':table တည်းဖြတ်ခြင်း',\n    'edit_table_not_exist'      => 'သင်တည်းဖြတ်ရန်ကြိုးစားသောဇယားမရှိပါ။',\n    'extra'                     => 'အခြားသူများ',\n    'field'                     => 'Field',\n    'field_safe_failed'         => ':field အကွက်သည် အကွက်ကို သိမ်းဆည်းရန် မအောင်မြင်သဖြင့် နောက်ပြန်ဆုတ်သွားခဲ့သည်',\n    'index'                     => 'အညွှန်း',\n    'input_type'                => 'ထည့်သွင်းမှုအမျိုးအစား',\n    'key'                       => 'Key',\n    'name_warning'              => 'အညွှန်းမထည့်မီ ကော်လံကို အမည်ပေးပါ။',\n    'no_composites_warning'     => 'ဤဇယားတွင် ပေါင်းစပ်အညွှန်းတစ်ခုရှိသည်။ ၎င်းကို လောလောဆယ် မပံ့ပိုးထားကြောင်း သတိပြုပါ။ အညွှန်းများထည့်ရန် /\n    ဖယ်ရှားရန်ကြိုးစားသောအခါသတိထားပါ။',\n    'null'                      => 'Null',\n    'optional_details'          => 'ရွေးချယ်မှုအသေးစိတ်',\n    'policy_class'              => 'Policy Class Name',\n    'policy_name'               => 'Policy Name',\n    'policy_name_ph'            => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'primary'                   => 'PRIMARY',\n    'server_pagination'         => 'Server-side Pagination',\n    'success_create_table'      => ':table ဇယားတစ်ခုကို သင်ဖန်တီးထားသည်။',\n    'success_created_bread'     => 'BREAD အသစ်ကို ဖန်တီးနိုင်ခဲ့တယ်။',\n    'success_delete_table'      => ':table table ကို ဖျက်နိုင်ခဲ့တယ်။',\n    'success_remove_bread'      => ':datatype ကနေ BREAD ကိုဖယ်ရှားနိုင်ခဲ့သည်။',\n    'success_update_bread'      => ':datatype BREAD ကိုအောင်မြင်စွာ update လုပ်နိုင်ခဲ့ပါပြီ',\n    'success_update_table'      => ':table table ကိုအောင်မြင်စွာ update လုပ်နိုင်ခဲ့ပါပြီ',\n    'table_actions'             => 'Table လုပ်ဆောင်ချက်',\n    'table_columns'             => 'Table ကော်လံများ',\n    'table_has_index'           => 'ဇယားတွင် ပင်မအညွှန်းတစ်ခု ရှိနှင့်ပြီးဖြစ်သည်။',\n    'table_name'                => 'ဇယားအမည်',\n    'table_no_columns'          => 'ဇယားထဲမှာ ကော်လံတွေ မရှိဘူး...',\n    'type'                      => 'အမျိုးအစား',\n    'type_not_supported'        => 'ဤအမျိုးအစားကို မပံ့ပိုးပါ။',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'အမည်မသိ အမျိုးအစား',\n    'update_table'              => 'ဇယားကို အပ်ဒိတ်လုပ်ပါ။',\n    'url_slug'                  => 'URL Slug (must be unique)',\n    'url_slug_ph'               => 'URL slug (ex. posts)',\n    'visibility'                => 'Visibility',\n    'relationship'              => [\n        'relationship'         => 'Relationship',\n        'relationships'        => 'Relationships',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => 'ကော်လံတစ်ခုကို ရွေးပါ။',\n        'is_used_to_reference' => 'အောက်ပါကိုးကားချက်များအတွက် အသုံးပြုသည်',\n        'pivot_table'          => 'Pivot Table',\n        'selection_details'    => 'Selection Details',\n        'display_the'          => 'Display the',\n        'store_the'            => 'Store the',\n        'allow_tagging'        => 'Allow Tagging',\n        'easy_there'           => 'Easy there Captain',\n        'before_create'        => 'Relationship တစ်ခုကို မဖန်တီးခင် BREAD ကိုအရင် create လုပ်ပါ<br> ပြီး BREAD ကိုတည်းဖြတ်ပါ ပြီး relationship ကို ဖန်တီးနိုင်ပါပြီ၊ <br> ကျေးဇူး။',\n        'cancel'               => 'ပယ်ဖျက်ပါ',\n        'add_new'              => 'Relationship အသစ်ထည့်ပါ',\n        'open'                 => 'ဖွင့်သည်',\n        'close'                => 'ပိတ်သည်',\n        'relationship_details' => 'Relationship အသေးစိတ်',\n        'browse'               => 'ရှာဖွေကြည့်သည်',\n        'read'                 => 'ဖတ်မည်',\n        'edit'                 => 'တည်းဖြတ်ပါ',\n        'add'                  => 'ထပ်လောင်း',\n        'delete'               => 'ဖျက်ပါ',\n        'create'               => 'Relationship တစ်ခုဖန်တီးပါ',\n        'namespace'            => 'Fully Qualified Model Name (ex. App\\Category)',\n    ],\n];"
  },
  {
    "path": "publishable/lang/my/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'ဇယားတွင်ဒေတာမရှိပါ။',\n    'sInfo'           => 'ပြသနေသည် _START_ to _END_ of _TOTAL_ entries',\n    'sInfoEmpty'      => '0 မှ 0 (0 entry) ကိုပြသနေသည်',\n    'sInfoFiltered'   => '(_MAX_ ထည့်သွင်းမှုများမှ စစ်ထုတ်ခြင်း။)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'ပြသနေသည် _MENU_ entries',\n    'sLoadingRecords' => 'စောင့်ပါ...',\n    'sProcessing'     => 'လုပ်ဆောင်နေသည်...',\n    'sSearch'         => 'ရှာဖွေ:',\n    'sZeroRecords'    => 'သက်ဆိုင်သော မှတ်တမ်းမရှိပါ။',\n    'oPaginate'       => [\n        'sFirst'    => 'ပထမဆုံး',\n        'sLast'     => 'နောက်ဆုံး',\n        'sNext'     => 'နောက်တစ်ခု',\n        'sPrevious' => 'အရင်',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': ငယ်စဉ်ကြီးလိုက် စီခြင်းကို ဖွင့်ပါ',\n        'sSortDescending' => ': ကြီးစဉ်ငယ်လိုက် အမျိုးအစားကို ဖွင့်ပါ',\n    ],\n];"
  },
  {
    "path": "publishable/lang/my/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'ပြီးခဲ့သည့်အပတ်က',\n    'last_year' => 'မနှစ်က',\n    'this_week' => 'ဒီအပတ်',\n    'this_year' => 'ဒီနှစ်',\n];\n"
  },
  {
    "path": "publishable/lang/my/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'စာမျက်နှာ|စာမျက်နှာများ',\n    'page_link_text' => 'စာမျက်နှာအားလုံးကို ပြပါ။',\n    'page_text'      => 'ဒေတာဘေ့စ်တွင် count: string ရှိပါသည်။ အားလုံးကိုကြည့်ရန် အောက်ပါခလုတ်ကို နှိပ်ပါ',\n    'post'           => 'Post|Posts',\n    'post_link_text' => 'posts များအားလုံးကြည့်ရန်',\n    'post_text'      => 'ဒေတာဘေ့စ်တွင် count: string ရှိပါသည်။ အားလုံးကိုကြည့်ရန် အောက်ပါခလုတ်ကို နှိပ်ပါ',\n    'user'           => 'User|Users',\n    'user_link_text' => 'အသုံးပြုသူအားလုံးကို ပြပါ။',\n    'user_text'      => 'ဒေတာဘေ့စ်တွင် count: string ရှိပါသည်။ အားလုံးကိုကြည့်ရန် အောက်ပါခလုတ်ကို နှိပ်ပါ',\n];"
  },
  {
    "path": "publishable/lang/my/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'မရှိသော သင်္ကေတ လင့်ခ်တစ်ခုကို ငါဖန်တီးခဲ့သည်။',\n    'symlink_created_title'  => 'မရှိသောသိုလှောင်မှုအတွက် သင်္ကေတလင့်ခ်တစ်ခုကို ဖန်တီးပြီးဖြစ်သည်။',\n    'symlink_failed_text'    => 'နဂိုမူလ သင်္ကေတ လင့်ခ်ကို ပြောင်း၍မရပါ။ ဤအိမ်ရှင်အတွက် ပံ့ပိုးပေးပုံမပေါ်ပါ။',\n    'symlink_failed_title'   => 'မရှိသောသိုလှောင်မှုအတွက် သင်္ကေတလင့်ခ်ကို ဖန်တီး၍မရပါ။',\n    'symlink_missing_button' => 'ဖြေရှင်းပါ။',\n    'symlink_missing_text'   => 'သိုလှောင်မှုသင်္ကေတလင့်ခ်ကို ရှာမတွေ့ပါ။ သင့်ဘရောက်ဆာမှ မီဒီယာဖိုင်များကို ဖတ်ရာတွင် ပြဿနာများရှိနိုင်သည်။',\n    'symlink_missing_title'  => 'မရှိသောသိုလှောင်မှုအတွက် သင်္ကေတလင့်ခ်',\n];"
  },
  {
    "path": "publishable/lang/my/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'သင်က ၎င်းကို လွတ်သွားပါက လက်ရှိအနေအထားကို ထိန်းသိမ်းထားမည်ဖြစ်သည်။',\n    'field_select_dd_relationship' => 'သင့်လျော်သော ဆက်ဆံရေးကို :method ထဲမှာ သတ်မှတ်ပါ။ method of the :class class.',\n    'type_checkbox'                => 'အမှန်ခြစ်ပါ။',\n    'type_codeeditor'              => 'ကုဒ်အယ်ဒီတာ',\n    'type_file'                    => 'File',\n    'type_image'                   => 'ပုံ',\n    'type_radiobutton'             => 'ရေဒီယိုခလုတ်',\n    'type_richtextbox'             => 'ကြွယ်ဝသောစာသား',\n    'type_selectdropdown'          => 'Select Dropdown',\n    'type_textarea'                => 'စာသားဧရိယာ',\n    'type_textbox'                 => 'စာသား',\n];"
  },
  {
    "path": "publishable/lang/my/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'လုပ်ဆောင်ချက်',\n    'actions'                => 'လုပ်ဆောင်ချက်များ',\n    'add'                    => 'ထပ်လောင်း',\n    'add_folder'             => 'ဖိုဒါထည့်ပါ။',\n    'add_new'                => 'အသစ်ထည့်ထားသည်',\n    'all_done'               => 'အားလုံးပြီးပြီ',\n    'are_you_sure'           => 'ဟုတ်ပါသလား',\n    'are_you_sure_delete'    => 'ဖျက်ချင်တာ သေချာလား',\n    'ascending'              => 'Ascending',\n    'auto_increment'         => 'အလိုအလျောက်တိုး',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'ရှာဖွေကြည့်သည်',\n    'builder'                => 'တည်ဆောက်သူ',\n    'bulk_delete'            => 'အစုလိုက် ဖျက်ခြင်း',\n    'bulk_delete_confirm'    => 'ဟုတ်ကဲ့၊ ဒါတွေကို ဖယ်ရှားလိုက်ပါ',\n    'bulk_delete_nothing'    => 'သင်ဖျက်လိုသောအရာကို သင်မရွေးချယ်ရသေးပါ။',\n    'cancel'                 => 'ပယ်ဖျက်ပါ',\n    'choose_type'            => 'အမျိုးအစားကို ရွေးပါ',\n    'click_here'             => 'ဤနေရာကိုကလစ်နှိပ်ပါ',\n    'close'                  => 'Close',\n    'compass'                => 'Compass',\n    'created_at'             => 'Created at',\n    'custom'                 => 'Custom',\n    'dashboard'              => 'Dashboard',\n    'database'               => 'Database',\n    'default'                => 'Default',\n    'delete'                 => 'Delete',\n    'delete_confirm'         => 'ဟုတ်ကဲ့၊ ဖျက်ပါ',\n    'delete_question'        => 'ဖျက်ချင်တာ သေချာလား',\n    'delete_this_confirm'    => 'ဟုတ်ကဲ့၊ ဒါကို ဖယ်ရှားလိုက်ပါ',\n    'descending'             => 'Descending',\n    'deselect_all'           => 'Deselect All',\n    'download'               => 'Download',\n    'drag_drop_info'         => 'Drag and drop the Items below to re-arrange them.',\n    'edit'                   => 'Edit',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Sorry it appears there was a problem deleting this',\n    'error_restoring'        => 'Sorry it appears there was a problem restoring this',\n    'exception'              => 'Exception',\n    'featured'               => 'Featured',\n    'field_does_not_exist'   => 'Field does not exist',\n    'find_by_place'          => 'Find by Place',\n    'home'                   => 'Home',\n    'how_to_use'             => 'How To Use',\n    'index'                  => 'Index',\n    'internal_error'         => 'Internal error',\n    'items'                  => 'item(s)',\n    'keep_sidebar_open'      => 'Yarr! Drop the anchors! (and keep the sidebar open)',\n    'key'                    => 'Key',\n    'last_modified'          => 'Last modified',\n    'latitude'               => 'Latitude',\n    'length'                 => 'Length',\n    'locale'                 => 'Locale',\n    'login'                  => 'Login',\n    'logout'                 => 'Logout',\n    'longitude'              => 'Longitude',\n    'media'                  => 'Media',\n    'menu_builder'           => 'Menu Builder',\n    'mimetype_not_allowed'   => 'This mimetype is not allowed',\n    'move'                   => 'Move',\n    'name'                   => 'Name',\n    'new'                    => 'New',\n    'no'                     => 'No',\n    'no_thanks'              => 'No Thanks',\n    'none'                   => 'None',\n    'not_null'               => 'Not Null',\n    'no_results'             => 'No results',\n    'open'                   => 'Open',\n    'options'                => 'Options',\n    'password'               => 'Password',\n    'permissions'            => 'Permissions',\n    'profile'                => 'Profile',\n    'public_url'             => 'Public URL',\n    'read'                   => 'Read',\n    'rename'                 => 'Rename',\n    'remember_me'            => 'Remember me',\n    'required'               => 'Required',\n    'return_to_list'         => 'Return to List',\n    'route'                  => 'Route',\n    'save'                   => 'Save',\n    'search'                 => 'Search',\n    'select_all'             => 'Select All',\n    'select_group'           => 'Select Existing Group or Add New',\n    'settings'               => 'Settings',\n    'showing_entries'        => 'Showing :from to :to of :all entry|Showing :from to :to of :all entries',\n    'submit'                 => 'Submit',\n    'successfully_added_new' => 'Successfully Added New',\n    'successfully_deleted'   => 'Successfully Deleted',\n    'successfully_restored'  => 'Successfully Restored',\n    'successfully_updated'   => 'Successfully Updated',\n    'successfully_created'   => 'Successfully created',\n    'sweet_success'          => 'Sweet Success!',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'Title',\n    'type'                   => 'Type',\n    'restore'                => 'Restore',\n    'unsigned'               => 'လက်မှတ်မထိုး',\n    'unstick_sidebar'        => 'ဘေးဘားကို ဖြုတ်ပါ',\n    'update'                 => 'Update',\n    'update_failed'          => 'အပ်ဒိတ် မအောင်မြင်ပါ',\n    'updated_order'          => 'မှာယူမှုကို အပ်ဒိတ်လုပ်ပြီးပါပြီ',\n    'upload'                 => 'တင်သည်',\n    'url'                    => 'URL',\n    'view'                   => 'View',\n    'viewing'                => 'ပြသခြင်း',\n    'whoopsie'               => 'Whoopsie!',\n    'yes'                    => 'ဟုတ်ကဲ့',\n    'yes_please'             => 'ဟုတ်ကဲ့',\n];"
  },
  {
    "path": "publishable/lang/my/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'JSON မမှန်ကန်ပါ။',\n    'invalid_message'   => 'မမှန်ကန်သော JSON ကို မိတ်ဆက်ထားပုံရသည်။',\n    'valid'             => 'အကျုံးဝင်သော JSON',\n    'validation_errors' => 'အတည်ပြုချက် အမှား',\n];"
  },
  {
    "path": "publishable/lang/my/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'အကောင့်ဝင်ရန်',\n    'signin_below' => 'အကောင့်လုပ်ရန်:',\n    'welcome'      => 'Welcome to Voyager. The Missing Admin for Laravel',\n];"
  },
  {
    "path": "publishable/lang/my/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Add New Folder',\n    'audio_support'          => 'Your browser does not support the audio element.',\n    'create_new_folder'      => 'Create New Folder',\n    'delete_folder_question' => 'Deleting a folder will remove all files and folders contained inside',\n    'delete_question'        => 'Are you sure you want to delete the following file(s)?',\n    'destination_folder'     => 'Destination Folder',\n    'drag_drop_info'         => 'Drag and drop files or click below to upload',\n    'error_already_exists'   => 'Sorry there is already a file/folder with that existing name in that folder.',\n    'error_creating_dir'     => 'Sorry something seems to have gone wrong with creating the directory, please check your permissions',\n    'error_deleting_file'    => 'Sorry something seems to have gone wrong deleting this file, please check your permissions',\n    'error_deleting_folder'  => 'Sorry something seems to have gone wrong when deleting this folder, please check your permissions',\n    'error_may_exist'        => 'File or Folder may already exist with that name. Please choose another name or delete the other file.',\n    'error_moving'           => 'Sorry there seems to be a problem moving that file/folder, please make sure you have the correct permissions.',\n    'error_renaming_ext'     => 'The extension of a file can not be changed!',\n    'error_uploading'        => 'Upload Fail: Unknown error occurred!',\n    'files'                  => '1 file|:count files',\n    'files_more'             => 'And :count more',\n    'file_does_not_exist'    => 'File does not exist',\n    'file_removed'           => 'File removed',\n    'files_selected'         => 'files/folder selected',\n    'folder_exists_already'  => 'Sorry that folder already exists, please delete that folder if you wish to re-create it',\n    'image_does_not_exist'   => 'Image does not exist',\n    'image_removed'          => 'Image removed',\n    'library'                => 'Media Library',\n    'loading'                => 'LOADING YOUR MEDIA FILES',\n    'max_files_select'       => 'You can only select one file|You can only select a maximum of :count files',\n    'min_files_select'       => 'You must select at least one file|You must select at least :count files',\n    'move_file_folder'       => 'Move File/Folder',\n    'new_file_folder'        => 'New File/Folder Name',\n    'new_folder_name'        => 'New Folder Name',\n    'no_files_here'          => 'No files here.',\n    'no_files_in_folder'     => 'No files in this folder.',\n    'nothing_selected'       => 'No file or folder selected',\n    'rename_file_folder'     => 'Rename File/Folder',\n    'success_uploaded_file'  => 'Successfully uploaded new file!',\n    'success_uploading'      => 'Image successfully uploaded!',\n    'success_moved'          => 'Successfully moved file/folder',\n    'success_renamed'        => 'Successfully renamed file/folder',\n    'uploading_wrong_type'   => 'Upload Fail: Unsupported file format or It is too large to upload!',\n    'crop'                   => 'Crop',\n    'crop_and_create'        => 'Crop & Create',\n    'crop_override_confirm'  => 'It will override the original image, are you sure?',\n    'crop_image'             => 'Crop Image',\n    'success_crop_image'     => 'Successfully cropped the image',\n    'height'                 => 'Height: ',\n    'title'                  => 'Title',\n    'type'                   => 'Type',\n    'size'                   => 'Size',\n    'public_url'             => 'Public URL',\n    'last_modified'          => 'Last Modified',\n    'browser_video_support'  => 'Your browser does not support the video tag.',\n    'browser_audio_support'  => 'Your browser does not support the audio element.',\n    'width'                  => 'Width: ',\n    'add_all_selected'       => 'Add all selected',\n];\n"
  },
  {
    "path": "publishable/lang/my/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Color in RGB or Hex (optional)',\n    'color_ph'             => 'Color, ex. #ffffff or rgb(255, 255, 255)',\n    'create_new_item'      => 'Create a New Menu Item',\n    'delete_item_confirm'  => 'Yes, Delete This Menu Item',\n    'delete_item_question' => 'Are you sure you want to delete this menu item?',\n    'drag_drop_info'       => 'Drag and drop the menu Items below to re-arrange them.',\n    'dynamic_route'        => 'Dynamic Route',\n    'edit_item'            => 'Edit Menu Item',\n    'icon_class'           => 'Font Icon class for the Menu Item (Use a',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icon Class (optional)',\n    'item_route'           => 'Route for the menu item',\n    'item_title'           => 'Title of the Menu Item',\n    'link_type'            => 'Link type',\n    'new_menu_item'        => 'New Menu Item',\n    'open_in'              => 'Open In',\n    'open_new'             => 'New Tab/Window',\n    'open_same'            => 'Same Tab/Window',\n    'route_parameter'      => 'Route parameters (if any)',\n    'static_url'           => 'Static URL',\n    'successfully_created' => 'Successfully Created New Menu Item.',\n    'successfully_deleted' => 'Successfully Deleted Menu Item.',\n    'successfully_updated' => 'Successfully Updated Menu Item.',\n    'updated_order'        => 'Successfully updated menu order.',\n    'url'                  => 'URL for the Menu Item',\n    'usage_hint'           => 'You can output a menu anywhere on your site by calling|You can output this menu anywhere on your site by calling',\n];\n"
  },
  {
    "path": "publishable/lang/my/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'အပိုအကွက်များ',\n    'category'         => 'ပို့စ်အမျိုးအစား',\n    'content'          => 'Post Content',\n    'details'          => 'Post Details',\n    'excerpt'          => 'Excerpt <small>Small description of this post</small>',\n    'image'            => 'ပုံတင်ပါ။',\n    'meta_description' => 'Meta ဖော်ပြချက်',\n    'meta_keywords'    => 'Meta သော့ချက်စာလုံးများ',\n    'new'              => 'ပို့စ်အသစ်တစ်ခုဖန်တီးပါ။',\n    'seo_content'      => 'SEO အကြောင်းအရာ',\n    'seo_title'        => 'SEO ခေါင်းစဉ်',\n    'slug'             => 'URL slug',\n    'status'           => 'Post Status',\n    'status_draft'     => 'အကြမ်း',\n    'status_pending'   => 'ဆိုင်းငံ့ထားသည်။',\n    'status_published' => 'အခုဖွင့်တယ်။',\n    'title'            => 'Post Title',\n    'title_sub'        => 'ဤပို့စ်၏ခေါင်းစဉ်',\n    'update'           => 'ပို့စ်ကို အပ်ဒိတ်လုပ်ပါ။',\n];"
  },
  {
    "path": "publishable/lang/my/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'ကိုယ်ပွား',\n    'edit'             => 'သင့်ရဲ့ကိုယ့်ရေးကိုယ်တာကိုပြုပြင်ရန်',\n    'edit_user'        => 'အသုံးပြုသူကို တည်းဖြတ်ပါ။',\n    'password'         => 'စကားဝှက်',\n    'password_hint'    => 'ဘာမှမဖြည့်ဘဲ‌ထားပါက အရင်အတိုင်းမှတ်ထားပါမည်',\n    'role'             => 'Role',\n    'roles'            => 'Roles',\n    'role_default'     => 'Default Role',\n    'roles_additional' => 'Additional Roles',\n    'user_role'        => 'User Role',\n];"
  },
  {
    "path": "publishable/lang/my/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows' => [\n        'author' => 'စာရေးသူ',\n        'avatar' => 'ကိုယ်ပွား',\n        'body' => 'စာသား',\n        'category' => 'အမျိုးအစား',\n        'created_at' => 'ဖန်တီးသည့်ရက်စွဲနှင့်အချိန်',\n        'display_name' => 'ဖော်ပြမည့်အမည်',\n        'email' => 'Email',\n        'excerpt' => 'ကောက်နုတ်ချက်',\n        'featured' => 'ဖီချာ',\n        'id' => 'ID',\n        'meta_description' => 'Meta ဖော်ပြချက်',\n        'meta_keywords' => 'Meta သော့ချက်စာလုံးများ',\n        'name' => 'နာမည်',\n        'order' => 'စီရန်',\n        'page_image' => 'စာမျက်နှာပုံ',\n        'parent' => 'မိဘ',\n        'password' => 'စကားဝှက်',\n        'post_image' => 'ပုံတင်ပါ',\n        'remember_token' => 'တိုကင်မှတ်ဉာဏ်',\n        'role' => 'အခန်းကဏ္ဍ',\n        'seo_title' => 'SEO ခေါင်းစဉ်',\n        'slug' => 'Slug',\n        'status' => 'အခြေအနေ',\n        'title' => 'ခေါင်းစဥ်',\n        'updated_at' => 'ရက်စွဲနှင့် အချိန်ကို အပ်ဒိတ်လုပ်ပါ။',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Category',\n            'plural' => 'Categories',\n        ],\n        'menu' => [\n            'singular' => 'Menu',\n            'plural' => 'Menus',\n        ],\n        'page' => [\n            'singular' => 'Page',\n            'plural' => 'Pages',\n        ],\n        'post' => [\n            'singular' => 'Post',\n            'plural' => 'Posts',\n        ],\n        'role' => [\n            'singular' => 'Role',\n            'plural' => 'Roles',\n        ],\n        'user' => [\n            'singular' => 'User',\n            'plural' => 'Users',\n        ],\n    ],\n    'menu_items' => [\n        'bread' => 'BREAD',\n        'categories' => 'Categories',\n        'compass' => 'Compass',\n        'dashboard' => 'Dashboard',\n        'database' => 'Database',\n        'media' => 'Media',\n        'menu_builder' => 'Menu Builder',\n        'pages' => 'Pages',\n        'posts' => 'Posts',\n        'roles' => 'Roles',\n        'settings' => 'Settings',\n        'tools' => 'Tools',\n        'users' => 'Users',\n    ],\n    'roles' => [\n        'admin' => 'စီမံခန့်ခွဲသူ',\n        'user' => 'အထွေထွေအသုံးပြုသူ',\n    ],\n    'settings' => [\n        'admin' => [\n            'background_image' => 'စီမံခန့်ခွဲသူ နောက်ခံပုံ',\n            'description' => 'စီမံခန့်ခွဲသူ ဖော်ပြချက်',\n            'description_value' => 'Voyager ကြိုဆိုပါသည်. The Missing Admin for Laravel',\n            'google_analytics_client_id' => 'Google Analytics Client ID (စီမံခန့်ခွဲသူရဲ့ dashboard အတွက်သုံးပါ)',\n            'icon_image' => 'စီမံခန့်ခွဲသူ အိုင်ကွန် ရုပ်ပုံ',\n            'loader' => 'စီမံခန့်ခွဲသူရဲ့ Loader',\n            'title' => 'စီမံခန့်ခွဲသူ ခေါင်းစဉ်',\n        ],\n        'site' => [\n            'description' => 'Site ဖော်ပြချက်',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo' => 'Site Logo ပုံ',\n            'title' => 'Site ခေါင်းစဉ်',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/my/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help' => 'ဆိုက်အတွင်း ၎င်းတို့ကိုခေါ်ဆိုခြင်းဖြင့် ဆက်တင်များကို မည်သည့်နေရာတွင်မဆို ရယူနိုင်ပါသည်။',\n    'save' => 'ဆက်တင်များကို သိမ်းဆည်းပါ။',\n    'new' => 'ဆက်တင်အသစ်',\n    'help_name' => 'အမည် သတ်မှတ်ခြင်း ဥပမာ- စီမံခန့်ခွဲသူ ခေါင်းစဉ်',\n    'help_key' => 'သော့သတ်မှတ်ခြင်း ဥပမာ- admin_title',\n    'help_option' => '(optional, the same options as for the corresponding formfield apply)',\n    'add_new' => 'ဆက်တင်အသစ်များထည့်ပါ။',\n    'delete_question' => ':setting ဆက်တင်ကို ဖျက်လိုသည်မှာ သေချာပါသလား။',\n    'delete_confirm' => 'ဟုတ်ကဲ့၊ ဤဆက်တင်ကို ဖယ်ရှားပါ။',\n    'successfully_created' => 'ဆက်တင်တစ်ခုကို ဖန်တီးနိုင်ခဲ့တယ်။',\n    'successfully_saved' => 'ဆက်တင်များကို သိမ်းဆည်းနိုင်ခဲ့သည်။',\n    'successfully_deleted' => 'ဆက်တင်များကို ဖျက်နိုင်ခဲ့သည်။',\n    'already_at_top' => 'အပေါ်ဆုံးမှာရှိပြီးသားပါ',\n    'already_at_bottom' => 'အောက်ဆုံးမှာရှိပြီးသားပါ',\n    'key_already_exists' => ':key သော့ ရှိနှင့်ပြီးသား',\n    'moved_order_up' => ':name အပေါ်ကိုရွှေ့လိုက်သည်',\n    'moved_order_down' => ':name အောက်ကိုရွှေ့လိုက်သည်',\n    'successfully_removed' => ':name ဒီဟာကိုအောင်မြင်စွာဖျက်လိုက်ပါပြီ',\n    'group_general' => 'အထွေထွေ',\n    'group_admin' => 'စီမံခန့်ခွဲသူ',\n    'group_site' => 'Site',\n    'group' => 'အဖွဲ့',\n    'help_group' => 'ဤဆက်တင်ကို အောက်ပါအဖွဲ့များသို့ သတ်မှတ်ပေးပါ။',\n];\n"
  },
  {
    "path": "publishable/lang/my/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright' => '<i class=\"voyager-heart\"></i> အချစ်တွေနဲ့လုပ်ထားသည်',\n    'footer_copyright2' => 'Made with rum and even more rum',\n];\n"
  },
  {
    "path": "publishable/lang/nl/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'  => 'Per paginaweergave',\n    'by_sessions'  => 'Per sessie',\n    'by_users'     => 'Per gebruiker',\n    'no_client_id' => 'Om analytics in te kunnen zien dient u een Google Analytics client id toe te voegen aan uw instellingen '.\n        'onder de naam <code>google_analytics_client_id</code>. De client id kunt u aanvragen in de Google developer console:',\n    'set_view'               => 'Selecteer een weergave',\n    'this_vs_last_week'      => 'Deze week versus vorige week',\n    'this_vs_last_year'      => 'Dit jaar versus vorig jaar',\n    'top_browsers'           => 'Top browsers',\n    'top_countries'          => 'Top landen',\n    'various_visualizations' => 'Verschillende visualisaties',\n];\n"
  },
  {
    "path": "publishable/lang/nl/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Add BREAD to this table',\n    'bread_crud_actions'     => 'BREAD/CRUD Actions',\n    'bread_info'             => 'BREAD info',\n    'controller_name_hint'   => 'ex. PageController, if left empty will use the BREAD Controller',\n    'create_bread_for_table' => 'Create BREAD for :table table',\n    'delete_bread'           => 'Delete BREAD',\n    'delete_bread_conf'      => 'Yes, remove the BREAD',\n    'delete_bread_quest'     => 'Are you sure you want to delete the BREAD for the :table table?',\n    'edit_bread'             => 'Edit BREAD',\n    'edit_bread_for_table'   => 'Edit BREAD for :table table',\n    'error_creating_bread'   => 'Sorry it appears there may have been a problem creating this BREAD',\n    'error_removing_bread'   => 'Sorry it appears there was a problem removing this BREAD',\n    'error_updating_bread'   => 'Sorry it appears there may have been a problem updating this BREAD',\n    'error_tagging'          => 'Sorry it appears there may have been a problem creating the record. Please make sure your table has defaults for other fields.',\n    'success_created_bread'  => 'Successfully created new BREAD',\n    'success_remove_bread'   => 'Successfully removed BREAD from :datatype',\n    'success_update_bread'   => 'Successfully updated the :datatype BREAD',\n    'controller_name'        => 'Controller Name',\n    'create_migration'       => 'Create migration for this table?',\n    'description'            => 'Description',\n    'display_name'           => 'Display Name',\n    'display_name_plural'    => 'Display Name (Plural)',\n    'display_name_singular'  => 'Display Name (Singular)',\n    'edit_rows'              => 'Edit the rows for the :table table below',\n    'generate_permissions'   => 'Generate Permissions',\n    'icon_class'             => 'Icon to use for this Table',\n    'icon_hint'              => 'Icon (optional) Use a',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Model Class Name',\n    'model_name'             => 'Model Name',\n    'model_name_ph'          => 'ex. \\App\\User, if left empty will try and use the table name',\n    'order'                  => 'Order',\n    'order_column'           => 'Order column',\n    'order_column_ph'        => 'The column where the order is stored',\n    'order_ident_column'     => 'Order display column',\n    'order_ident_column_ph'  => 'The column which is displayed in the order page',\n    'ordering_not_set'       => 'You have to define ordering first',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'server_pagination'      => 'Server-side Pagination',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URL Slug (must be unique)',\n    'url_slug_ph'            => 'URL slug (ex. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/nl/database.php",
    "content": "<?php\n\nreturn [\n    'add_bread'                 => 'Voeg BREAD toe aan deze tabel',\n    'add_new_column'            => 'Voeg nieuwe kolom toe',\n    'add_softdeletes'           => 'Voeg Soft Delete toe',\n    'add_timestamps'            => 'Voeg tijdstempels toe',\n    'already_exists'            => 'bestaat al',\n    'already_exists_table'      => 'Tabel :table bestaat al',\n    'bread_crud_actions'        => 'BREAD/CRUD Acties',\n    'bread_info'                => 'BREAD info',\n    'column'                    => 'Kolom',\n    'composite_warning'         => 'Waarschuwing: Deze kolom is onderdeel van een samengevoegde sleutel',\n    'controller_name'           => 'Controller naam',\n    'controller_name_hint'      => 'bijv. PageController, indien leeg zal een BREAD controller worden gebruikt',\n    'create_bread_for_table'    => 'Maak BREAD voor :table tabel',\n    'create_migration'          => 'Migratie voor deze tabel aanmaken?',\n    'create_model_table'        => 'Model voor deze tabel aanmaken?',\n    'create_new_table'          => 'Maak een nieuwe tabel aan',\n    'create_your_new_table'     => 'Maak uw nieuwe tabel aan',\n    'default'                   => 'Standaard',\n    'delete_bread'              => 'BREAD verwijderen',\n    'delete_bread_before_table' => 'Zorg dat u het BREAD voor deze tabel verwijderd alvorens u de tabel verwijderd.',\n    'delete_table_bread_conf'   => 'Ja, verwijder BREAD',\n    'delete_table_bread_quest'  => 'Weet u zeker dat u het BREAD voor de tabel :table wilt verwijderen?',\n    'delete_table_confirm'      => 'Ja, verwijder deze tabel',\n    'delete_table_question'     => 'Weet u zeker dat u de :table tabel wilt verwijderen?',\n    'description'               => 'Beschrijving',\n    'display_name'              => 'Weergave naam',\n    'display_name_plural'       => 'Weergave naam (meervoud)',\n    'display_name_singular'     => 'Weergave naam (enkelvoud)',\n    'edit_bread'                => 'BREAD aanpassen',\n    'edit_bread_for_table'      => 'BREAD aanpassen voor de :table tabel',\n    'edit_rows'                 => 'Rijen aanpassen voor de :table tabel',\n    'edit_table'                => 'Pas de :table tabel hier onder aan',\n    'edit_table_not_exist'      => 'De tabel die u wilt aanpassen bestaat niet',\n    'error_creating_bread'      => 'Sorry het lijkt er op dat zich een probleem heeft voorgedaan bij het aanmaken van het BREAD',\n    'error_removing_bread'      => 'Sorry het lijkt er op dat zich een probleem heeft voorgedaan bij het verwijderen van het BREAD',\n    'error_updating_bread'      => 'Sorry het lijkt er op dat zich een probleem heeft voorgedaan bij het updaten van het BREAD',\n    'extra'                     => 'Extra',\n    'field'                     => 'Veld',\n    'field_safe_failed'         => 'Het opslaan van het :field veld is mislukt, we rollen het terug!',\n    'generate_permissions'      => 'Genereer permissies',\n    'icon_class'                => 'Icoon om te gebruiken bij deze tabel',\n    'icon_hint'                 => 'Icoon (optioneel) Gebruik een',\n    'icon_hint2'                => 'Voyager Font Class',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Invoertype',\n    'key'                       => 'Sleutel',\n    'model_class'               => 'Model Class naam',\n    'model_name'                => 'Model naam',\n    'model_name_ph'             => 'bijv. \\App\\User, indien leeg zal worden getracht de tabelnaam te gebruiken',\n    'name_warning'              => 'Voeg alstublieft een kolomnaam toe voordat u een index toevoegt',\n    'no_composites_warning'     => 'Deze tabel heeft een samengestelde sleutel. Wees bewust dat dit niet wordt ondersteund '.\n        'op dit moment. Wees voorzichtig bij het toevoegen/verwijderen van de index.',\n    'null'                  => 'Null',\n    'optional_details'      => 'Optionele details',\n    'policy_class'          => 'Policy Class naam',\n    'policy_name'           => 'Policy naam',\n    'policy_name_ph'        => 'bijv. \\App\\Policies\\UserPolicy, indien leeg zal worden getracht de standaardwaarde te gebruiken',\n    'primary'               => 'PRIMARY',\n    'server_pagination'     => 'Server-side paginatie',\n    'success_create_table'  => 'Met succes :table tabel aangemaakt',\n    'success_created_bread' => 'Met succes nieuw BREAD aangemaakt',\n    'success_delete_table'  => 'Met succes :table tabel verwijderd',\n    'success_remove_bread'  => 'Met succes BREAD verwijderd van :datatype',\n    'success_update_bread'  => 'Met succes het :datatype BREAD geüpdatet',\n    'success_update_table'  => 'Met succes de :table tabel geüpdatet',\n    'table_actions'         => 'Tabel acties',\n    'table_columns'         => 'Tabel kolommen',\n    'table_has_index'       => 'De tabel heeft al een primaire index.',\n    'table_name'            => 'Tabel naam',\n    'table_no_columns'      => 'De tabel heeft geen kolommen...',\n    'type'                  => 'Type',\n    'type_not_supported'    => 'Dit type wordt niet ondersteund',\n    'unique'                => 'UNIEK',\n    'unknown_type'          => 'Onbekend type',\n    'update_table'          => 'Tabel updaten',\n    'url_slug'              => 'URL Slug (moet uniek zijn)',\n    'url_slug_ph'           => 'URL slug (bijv. posts)',\n    'visibility'            => 'Zichtbaarheid',\n];\n"
  },
  {
    "path": "publishable/lang/nl/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Geen resultaten aanwezig in de tabel',\n    'sInfo'           => '_START_ tot _END_ van _TOTAL_ resultaten',\n    'sInfoEmpty'      => 'Geen resultaten om weer te geven',\n    'sInfoFiltered'   => ' (gefilterd uit _MAX_ resultaten)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => '.',\n    'sLengthMenu'     => '_MENU_ resultaten weergeven',\n    'sLoadingRecords' => 'Een moment geduld aub - bezig met laden..',\n    'sProcessing'     => 'Bezig...',\n    'sSearch'         => 'Zoeken:',\n    'sZeroRecords'    => 'Geen resultaten gevonden',\n    'oPaginate'       => [\n        'sFirst'    => 'Eerste',\n        'sLast'     => 'Laatste',\n        'sNext'     => 'Volgende',\n        'sPrevious' => 'Vorige',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': activeer om kolom oplopend te sorteren',\n        'sSortDescending' => ': activeer om kolom aflopend te sorteren',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/nl/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Vorige week',\n    'last_year' => 'Vorig jaar',\n    'this_week' => 'Deze week',\n    'this_year' => 'Dit jaar',\n];\n"
  },
  {
    "path": "publishable/lang/nl/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Pagina|Pagina\\'s',\n    'page_link_text' => 'Toon alle pagina\\'s',\n    'page_text'      => 'U heeft :count :string in uw database. Klik op de knop hier onder om alle pagina\\'s te bekijken.',\n    'post'           => 'Post|Posts',\n    'post_link_text' => 'Bekijk alle posts',\n    'post_text'      => 'U heeft :count :string in uw database. Klik op de knop hier onder om alle posts te bekijken.',\n    'user'           => 'Gebruiker|Gebruikers',\n    'user_link_text' => 'Bekijk alle gebruikers',\n    'user_text'      => 'U heeft :count :string in uw database. Klik op de knop hier onder om alle gebruikers te bekijken.',\n];\n"
  },
  {
    "path": "publishable/lang/nl/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'  => 'We hebben de missende symlink voor u aangemaakt.',\n    'symlink_created_title' => 'Missende opslag symlink aangemaakt',\n    'symlink_failed_text'   => 'Er trad een fout op bij het aanmaken van de missende symlink voor uw applicatie. '.\n        'Het lijkt er op dat uw hosting provider deze actie niet ondersteund.',\n    'symlink_failed_title'   => 'Missende opslag symlink kon niet worden aangemaakt',\n    'symlink_missing_button' => 'Repareer het',\n    'symlink_missing_text'   => 'We konden geen opslag symlink vinden. Dit kan problemen veroorzaken bij het '.\n        'laden van mediabestanden vanuit de browser.',\n    'symlink_missing_title' => 'Missende opslag symlink',\n];\n"
  },
  {
    "path": "publishable/lang/nl/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Houd leeg om hetzelfde te behouden',\n    'field_select_dd_relationship' => 'Zorg dat u de juiste relatie invoert in de :method methode van '.\n        'de :class class.',\n    'type_checkbox'       => 'Aankruisvakje',\n    'type_codeeditor'     => 'Codebewerker',\n    'type_file'           => 'Bestand',\n    'type_image'          => 'Afbeelding',\n    'type_radiobutton'    => 'Keuzerondje',\n    'type_richtextbox'    => 'Rijke tekstvak',\n    'type_selectdropdown' => 'Uitschuifkeuzelijst',\n    'type_textarea'       => 'Tekstvak',\n    'type_textbox'        => 'Tekstveld',\n];\n"
  },
  {
    "path": "publishable/lang/nl/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Actie',\n    'actions'                => 'Acties',\n    'add'                    => 'Toevoegen',\n    'add_folder'             => 'Maak map',\n    'add_new'                => 'Nieuwe toevoegen',\n    'all_done'               => 'Helemaal klaar',\n    'are_you_sure'           => 'Bent u zeker',\n    'are_you_sure_delete'    => 'Weet u zeker dat u wilt verwijderen',\n    'auto_increment'         => 'Automatisch incrementeren',\n    'browse'                 => 'Bladeren',\n    'builder'                => 'Bouwer',\n    'bulk_delete'            => 'Bulk verwijderen',\n    'bulk_delete_confirm'    => 'Ja, verwijder dit',\n    'bulk_delete_nothing'    => 'U heeft niets geselecteerd om te verwijderen',\n    'cancel'                 => 'Annuleren',\n    'choose_type'            => 'Kies type',\n    'click_here'             => 'Klik hier',\n    'close'                  => 'Sluiten',\n    'compass'                => 'Kompas',\n    'created_at'             => 'Gemaakt op',\n    'custom'                 => 'Custom',\n    'dashboard'              => 'Dashboard',\n    'database'               => 'Database',\n    'default'                => 'Standaard',\n    'delete'                 => 'Verwijderen',\n    'delete_confirm'         => 'Ja, verwijder het!',\n    'delete_question'        => 'Weet u zeker dat u dit wilt verwijderen',\n    'delete_this_confirm'    => 'Ja, verwijder dit',\n    'deselect_all'           => 'Deselecteer alles',\n    'download'               => 'Download',\n    'edit'                   => 'Aanpassen',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Sorry, het lijkt er op dat zich een probleem heeft voorgedaan tijdens het verwijderen',\n    'exception'              => 'Uitzondering',\n    'featured'               => 'Featured',\n    'field_does_not_exist'   => 'Veld bestaat niet',\n    'how_to_use'             => 'Gebruikershandleiding',\n    'index'                  => 'Index',\n    'internal_error'         => 'Interne fout',\n    'items'                  => 'element(en)',\n    'keep_sidebar_open'      => 'Yarr! Werk het anker uit! (en houd de sidebar open)',\n    'key'                    => 'Sleutel',\n    'last_modified'          => 'Laatst aangepast',\n    'length'                 => 'Lengte',\n    'login'                  => 'Login',\n    'media'                  => 'Media',\n    'menu_builder'           => 'Menu Bouwer',\n    'move'                   => 'Verplaatsen',\n    'name'                   => 'Naam',\n    'new'                    => 'Nieuw',\n    'no'                     => 'Nee',\n    'no_thanks'              => 'Nee bedankt',\n    'not_null'               => 'Niet Null',\n    'no_results'             => 'No results',\n    'options'                => 'Opties',\n    'password'               => 'Wachtwoord',\n    'permissions'            => 'Permissies',\n    'profile'                => 'Profiel',\n    'public_url'             => 'Openbare URL',\n    'read'                   => 'Lezen',\n    'rename'                 => 'Hernoemen',\n    'required'               => 'Verplicht',\n    'return_to_list'         => 'Terug naar de lijst',\n    'route'                  => 'Route',\n    'save'                   => 'Opslaan',\n    'search'                 => 'Zoeken',\n    'select_all'             => 'Alles selecteren',\n    'select_group'           => 'Selecteer bestaande gebruikersgroep of maak een nieuwe',\n    'settings'               => 'Instellingen',\n    'showing_entries'        => 'Toont :from tot :to van :all element|Toont :from tot :to van :all elementen',\n    'submit'                 => 'Versturen',\n    'successfully_added_new' => 'Met succes nieuwe toegevoegd',\n    'successfully_deleted'   => 'Met succes verwijderd',\n    'successfully_updated'   => 'Met succes geüpdatet',\n    'timestamp'              => 'Tijdstempel',\n    'title'                  => 'Titel',\n    'type'                   => 'Type',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'Sidebar los maken',\n    'update'                 => 'Updaten',\n    'update_failed'          => 'Update miskukt',\n    'upload'                 => 'Upload',\n    'url'                    => 'URL',\n    'view'                   => 'Toon',\n    'viewing'                => 'Tonen',\n    'yes'                    => 'Ja',\n    'yes_please'             => 'Ja, graag',\n];\n"
  },
  {
    "path": "publishable/lang/nl/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Invalide JSON',\n    'invalid_message'   => 'Het lijkt er op dat je wat invalide JSON hebt geïntroduceerd.',\n    'valid'             => 'Valide JSON',\n    'validation_errors' => 'Validatie fouten',\n];\n"
  },
  {
    "path": "publishable/lang/nl/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Aan het inloggen',\n    'signin_below' => 'Log hier onder in:',\n    'welcome'      => 'Welkom bij Voyager. De missende admin voor Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/nl/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Nieuwe map toevoegen',\n    'audio_support'          => 'Uw browser ondersteund geen audio element.',\n    'create_new_folder'      => 'Nieuwe map aanmaken',\n    'delete_folder_question' => 'Het verwijderen van deze map zal alle onderliggende bestanden en mappen ook verwijderen',\n    'destination_folder'     => 'Doel map',\n    'drag_drop_info'         => 'Bestanden hier heen verslepen of klik hier onder om te uploaden',\n    'error_already_exists'   => 'Sorry er bestaat al een bestand/map met deze naam in die map.',\n    'error_creating_dir'     => 'Sorry er lijkt iets fout te zijn gegaan bij het aanmaken van de map, '.\n        'controleer alstublieft of u voldoende rechten heeft.',\n    'error_deleting_file' => 'Sorry er lijkt iets fout te zijn gegaan bij het verwijderen van dit bestand, '.\n        'controleer alstublieft of u voldoende rechten heeft',\n    'error_deleting_folder' => 'Sorry er lijkt iets fout te zijn gegaan bij het verwijderen van deze map, '.\n        'controleer alstublieft of u voldoende rechten heeft.',\n    'error_may_exist' => 'Bestand of map met deze naam zou al kunnen bestaan. Kies alstublieft een andere naam of '.\n        'verwijder het andere bestand.',\n    'error_moving' => 'Sorry er lijkt iets fout te zijn gegaan bij het verplaatsen van dit bestand of deze map, '.\n        'controleer alstublieft of u voldoende rechten heeft.',\n    'error_uploading'       => 'Upload mislukt: Er deed zich een onbekende fout voor!',\n    'folder_exists_already' => 'Sorry die map bestaat al, verwijder de map als u deze map onieuw wilt aanmaken',\n    'image_does_not_exist'  => 'Afbeelding bestaat niet',\n    'image_removed'         => 'Afbeelding verwijderd',\n    'library'               => 'Media bibliotheek',\n    'loading'               => 'UW MEDIA BESTANDEN ZIJN AAN HET LADEN',\n    'move_file_folder'      => 'Verplaats bestand/map',\n    'new_file_folder'       => 'Nieuwe bestands- of mapnaam',\n    'new_folder_name'       => 'Nieuwe mapnaam',\n    'no_files_here'         => 'Hier zijn geen bestanden.',\n    'no_files_in_folder'    => 'Geen bestanden in deze map.',\n    'nothing_selected'      => 'Geen bestand of map geselecteerd',\n    'rename_file_folder'    => 'Hernoem bestand/map',\n    'success_uploaded_file' => 'Met succes nieuw bestand geüpload!',\n    'success_uploading'     => 'Afbeelding met succes geüpload',\n    'uploading_wrong_type'  => 'Upload mislukt: Niet ondersteund bestandsformaat of het bestand is te groot om te uploaden!',\n    'video_support'         => 'Uw browser ondersteunt de video tag niet.',\n    'crop'                  => 'Bijsnijden',\n    'crop_and_create'       => 'Bijsnijden & Aanmaken',\n    'crop_override_confirm' => 'Dit zal het originele bestand overschrijven, bent u zeker?',\n    'crop_image'            => 'Afbeelding bijsnijden',\n    'success_crop_image'    => 'Met succes de afbeelding bijgesneden',\n    'height'                => 'Hoogte: ',\n    'width'                 => 'Breedte: ',\n    'add_all_selected'      => 'Voeg alle geselecteerde toe',\n];\n"
  },
  {
    "path": "publishable/lang/nl/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Kleur in RGB of hex (optioneel)',\n    'color_ph'             => 'Kleur (bijv. #ffffff of rgb(255, 255, 255))',\n    'create_new_item'      => 'Maak een nieuw menu item aan',\n    'delete_item_confirm'  => 'Ja, verwijder dit menu item',\n    'delete_item_question' => 'Weet u zeker dat u dit menu item wilt verwijderen?',\n    'drag_drop_info'       => 'Versleep de menu items hier onder om ze te herschikken.',\n    'dynamic_route'        => 'Dynamische route',\n    'edit_item'            => 'Menu item aanpassen',\n    'icon_class'           => 'Font icoon css-class voor het menu item (Gebruik een ',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icoon css-class (optioneel)',\n    'item_route'           => 'Route voor het menu item',\n    'item_title'           => 'Titel van het menu item',\n    'link_type'            => 'Link type',\n    'new_menu_item'        => 'Nieuw menu item',\n    'open_in'              => 'Open in',\n    'open_new'             => 'Nieuw Tabblad/Venster',\n    'open_same'            => 'Hetzelfde Tabblad/Venster',\n    'route_parameter'      => 'Route parameters (mits deze bestaan)',\n    'static_url'           => 'Statische URL',\n    'successfully_created' => 'Met succes nieuw menu item aangemaakt.',\n    'successfully_deleted' => 'Met succes menu item verwijderd.',\n    'successfully_updated' => 'Met succes menu item geüpdatet.',\n    'updated_order'        => 'Met succes menu volgorde geüpdated.',\n    'url'                  => 'URL voor het menu item',\n    'usage_hint'           => 'U kunt een menu overal weergeven het volgende aan te roepen|U kunt dit '.\n        'menu overal weergeven door het volgende aan te roepen',\n];\n"
  },
  {
    "path": "publishable/lang/nl/post.php",
    "content": "<?php\n\nreturn [\n    'category'         => 'Post categorie',\n    'content'          => 'Post inhoud',\n    'details'          => 'Post details',\n    'excerpt'          => 'Excerpt <small>Korte beschrijving van deze post</small>',\n    'image'            => 'Post afbeelding',\n    'meta_description' => 'Meta beschrijving',\n    'meta_keywords'    => 'Meta sleutelwoorden',\n    'new'              => 'Nieuwe post aanmaken',\n    'seo_content'      => 'SEO inhoud',\n    'seo_title'        => 'Seo titel',\n    'slug'             => 'URL slug',\n    'status'           => 'Post status',\n    'status_draft'     => 'concept',\n    'status_pending'   => 'in afwachting',\n    'status_published' => 'gepubliceerd',\n    'title'            => 'Post titel',\n    'title_sub'        => 'De titel van uw post',\n    'update'           => 'Update post',\n];\n"
  },
  {
    "path": "publishable/lang/nl/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => 'Avatar',\n    'edit'          => 'Mijn profiel aanpassen',\n    'edit_user'     => 'Gebruiker aanpassen',\n    'password'      => 'Wachtwoord',\n    'password_hint' => 'Leeg laten om hetzelfde te houden',\n    'role'          => 'Rol',\n    'user_role'     => 'Gebruikersrol',\n];\n"
  },
  {
    "path": "publishable/lang/nl/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'U kunt de waarde voor elke instelling overal op uw site aanroepen door de aanroep',\n    'save'                 => 'Instellingen opslaan',\n    'new'                  => 'Nieuwe instelling',\n    'help_name'            => 'Instelling naam bijvoorbeeld: Admin titel',\n    'help_key'             => 'Instelling sleutel bijvoorbeeld: admin_titel',\n    'help_option'          => '(optioneel, alleen van toepassing op bepaalde types zoals de dropdown box of radio button)',\n    'add_new'              => 'Nieuwe instelling toevoegen',\n    'delete_question'      => 'Weet u zeker dat u de :setting instelling wilt verwijderen?',\n    'delete_confirm'       => 'Ja, verwijder deze instelling',\n    'successfully_created' => 'Instelling met succes aangemaakt',\n    'successfully_saved'   => 'Instelling met succes opgeslagen',\n    'successfully_deleted' => 'Instelling met succes verwijderd',\n    'already_at_top'       => 'Deze is al aan de bovenkant van de lijst',\n    'already_at_bottom'    => 'Deze is al aan de onderkant van de lijst',\n    'key_already_exists'   => 'De sleutel :key bestaat al',\n    'moved_order_up'       => ':name instelling wordt naar boven verplaatst',\n    'moved_order_down'     => ':name instelling wordt naar beneden verplaatst',\n    'successfully_removed' => 'Met succes :name waarde verwijderd',\n    'group_general'        => 'General',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Site',\n    'group'                => 'Groep',\n    'help_group'           => 'Groep waar deze instelling aan is toegewezen',\n];\n"
  },
  {
    "path": "publishable/lang/nl/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Gemaakt met <i class=\"voyager-heart\"></i> door',\n    'footer_copyright2' => 'Gemaakt met rum en nog meer rum',\n];\n"
  },
  {
    "path": "publishable/lang/pl/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'  => 'Według odsłon strony',\n    'by_sessions'  => 'Według sesji',\n    'by_users'     => 'Według użytkowników',\n    'no_client_id' => 'Aby wyświetlić statystyki, musisz uzyskać identyfikator klienta Google Analytics i '.\n                      'dodać go do ustawień, jako klucz <code>google_analytics_client_id'.\n                      '</code>. Zdobądź klucz w konsoli Google Developer:',\n    'set_view'               => 'Wybierz widok',\n    'this_vs_last_week'      => 'Ten tydzień vs w poprzedni tydzień',\n    'this_vs_last_year'      => 'Ten rok vs poprzedni rok',\n    'top_browsers'           => 'Top przeglądarki',\n    'top_countries'          => 'Top państwa',\n    'various_visualizations' => 'Różne wizualizacje',\n];\n"
  },
  {
    "path": "publishable/lang/pl/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Add BREAD to this table',\n    'bread_crud_actions'     => 'BREAD/CRUD Actions',\n    'bread_info'             => 'BREAD info',\n    'controller_name_hint'   => 'ex. PageController, if left empty will use the BREAD Controller',\n    'create_bread_for_table' => 'Create BREAD for :table table',\n    'delete_bread'           => 'Delete BREAD',\n    'delete_bread_conf'      => 'Yes, remove the BREAD',\n    'delete_bread_quest'     => 'Are you sure you want to delete the BREAD for the :table table?',\n    'edit_bread'             => 'Edit BREAD',\n    'edit_bread_for_table'   => 'Edit BREAD for :table table',\n    'error_creating_bread'   => 'Sorry it appears there may have been a problem creating this BREAD',\n    'error_removing_bread'   => 'Sorry it appears there was a problem removing this BREAD',\n    'error_updating_bread'   => 'Sorry it appears there may have been a problem updating this BREAD',\n    'error_tagging'          => 'Sorry it appears there may have been a problem creating the record. Please make sure your table has defaults for other fields.',\n    'success_created_bread'  => 'Successfully created new BREAD',\n    'success_remove_bread'   => 'Successfully removed BREAD from :datatype',\n    'success_update_bread'   => 'Successfully updated the :datatype BREAD',\n    'controller_name'        => 'Controller Name',\n    'create_migration'       => 'Create migration for this table?',\n    'description'            => 'Description',\n    'display_name'           => 'Display Name',\n    'display_name_plural'    => 'Display Name (Plural)',\n    'display_name_singular'  => 'Display Name (Singular)',\n    'edit_rows'              => 'Edit the rows for the :table table below',\n    'generate_permissions'   => 'Generate Permissions',\n    'icon_class'             => 'Icon to use for this Table',\n    'icon_hint'              => 'Icon (optional) Use a',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Model Class Name',\n    'model_name'             => 'Model Name',\n    'model_name_ph'          => 'ex. \\App\\User, if left empty will try and use the table name',\n    'order'                  => 'Order',\n    'order_column'           => 'Order column',\n    'order_column_ph'        => 'The column where the order is stored',\n    'order_ident_column'     => 'Order display column',\n    'order_ident_column_ph'  => 'The column which is displayed in the order page',\n    'ordering_not_set'       => 'You have to define ordering first',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'server_pagination'      => 'Server-side Pagination',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URL Slug (must be unique)',\n    'url_slug_ph'            => 'URL slug (ex. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/pl/database.php",
    "content": "<?php\n\nreturn [\n    'add_bread'                 => 'Dodaj BREAD do tej tabeli',\n    'add_new_column'            => 'Dodaj nową kolumnę',\n    'add_softdeletes'           => 'Dodaj \"miękkie\" usuwanie',\n    'add_timestamps'            => 'Dodaj znaki czasowe',\n    'already_exists'            => 'już istnieje',\n    'already_exists_table'      => 'Tabela :table już istnieje',\n    'bread_crud_actions'        => 'Akcje BREAD/CRUD',\n    'bread_info'                => 'Informacje BREAD',\n    'browse_bread'              => 'Przeglądaj BREAD',\n    'column'                    => 'Kolumna',\n    'composite_warning'         => 'Uwaga: ta kolumna jest częścią złożonego indeksu',\n    'controller_name'           => 'Nazwa kontrolera',\n    'controller_name_hint'      => 'np. PageController, jeśli pusty - użyty zostanie kontroler BREAD',\n    'create_bread_for_table'    => 'Utwórz BREAD dla tabeli :table',\n    'create_migration'          => 'Utworzyć migrację dla tej tabeli?',\n    'create_model_table'        => 'Utworzyć model dla tej tabeli?',\n    'create_new_table'          => 'Utwórz nową tabelę',\n    'create_your_new_table'     => 'Utwórz Twoją nową tabelę',\n    'default'                   => 'Domyślne',\n    'delete_bread'              => 'Usuń BREAD',\n    'delete_bread_before_table' => 'Przed usunięciem tabeli upewnij się, że BREAD został usunięty z tej tabeli.',\n    'delete_table_bread_conf'   => 'Tak, usuń BREAD',\n    'delete_table_bread_quest'  => 'Na pewno usunąć BREAD dla tabeli :table?',\n    'delete_table_confirm'      => 'Tak, usuń tę tabelę',\n    'delete_table_question'     => 'Na pewno usunąć tabelę :table?',\n    'description'               => 'Opis',\n    'display_name'              => 'Wyświetlana nazwa',\n    'display_name_plural'       => 'Wyświetlana nazwa (liczba mnoga)',\n    'display_name_singular'     => 'Wyświetlana nazwa (liczba pojedyńcza)',\n    'edit_bread'                => 'Edytuj BREAD',\n    'edit_bread_for_table'      => 'Edytuj BREAD tabeli :table',\n    'edit_rows'                 => 'Edytuj wiersze dla tabeli :table poniżej',\n    'edit_table'                => 'Edytuj tabelę :table poniżej',\n    'edit_table_not_exist'      => 'Tabela, którą chcesz edytować, nie istnieje',\n    'error_creating_bread'      => 'Niestety wygląda na to, że wystąpił problem z utworzeniem tego BREAD',\n    'error_removing_bread'      => 'Niestety wygląda na to, że wystąpił problem z usunięciem tego BREAD',\n    'error_updating_bread'      => 'Niestety wygląda na to, że wystąpił problem z zaktualizowaniem tego BREAD',\n    'extra'                     => 'Extra',\n    'field'                     => 'Pole',\n    'field_safe_failed'         => 'Nie udało się zapisać pola: pole, zmiany cofnięte!',\n    'generate_permissions'      => 'Wygeneruj uprawnienia',\n    'icon_class'                => 'Ikona dla tej tabeli',\n    'icon_hint'                 => 'Ikona (opcjonalnie) Użyj',\n    'icon_hint2'                => 'klasę ikony Voyager',\n    'index'                     => 'Indeks',\n    'input_type'                => 'Rodzaj pola',\n    'key'                       => 'Klucz',\n    'model_class'               => 'Nazwa klasy modelu',\n    'model_name'                => 'Nazwa modelu',\n    'model_name_ph'             => 'np. App\\User, jeśli pusty - spróbuję użyć nazwę tabeli',\n    'name_warning'              => 'Nazwij kolumnę przed dodaniem indeksu',\n    'no_composites_warning'     => 'Ta tabela ma złożone indeksy. W tej chwili nie są one obsługiwane. Zachowaj ostrożność podczas próby dodania albo usunięcia indeksów.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Opcjonalne szczegóły',\n    'policy_class'              => 'Nazwa klasy zasad',\n    'policy_name'               => 'Nazwa zasad',\n    'policy_name_ph'            => 'np. App\\Policies\\UserPolicy, jeśli pusty - spróbuję użyć domyślnych zasad',\n    'primary'                   => 'Podstawowy',\n    'server_pagination'         => 'Paginacja po stronie serwera',\n    'success_create_table'      => 'Pomyślnie utworzono tabelę :table',\n    'success_created_bread'     => 'Pomyślnie utworzono nowy BREAD',\n    'success_delete_table'      => 'Pomyślnie usunięto tabelę :table',\n    'success_remove_bread'      => 'Pomyślnie usunięto BREAD z :datatype',\n    'success_update_bread'      => 'Pomyślnie zaktualizowano :datatype BREAD',\n    'success_update_table'      => 'Pomyślnie zaktualizowano tabelę :table',\n    'table_actions'             => 'Akcje tabeli',\n    'table_columns'             => 'Kolumny tabeli',\n    'table_has_index'           => 'Tabela ma już główny indeks.',\n    'table_name'                => 'Nazwa tabeli',\n    'table_no_columns'          => 'Tabela nie ma kolumn',\n    'type'                      => 'Typ',\n    'type_not_supported'        => 'Ten typ nie jest obsługiwany',\n    'unique'                    => 'Niepowtarzalny',\n    'unknown_type'              => 'Typ nieznany',\n    'update_table'              => 'Aktualizuj tabelę',\n    'url_slug'                  => 'Skrót URL (musi być niepowtarzalny)',\n    'url_slug_ph'               => 'Skrót URL (np. wpisy)',\n    'visibility'                => 'Widoczność',\n    'relationship'              => [\n        'relationship'         => 'Relacja',\n        'relationships'        => 'Relacje',\n        'has_one'              => 'Ma jeden (hasOne)',\n        'has_many'             => 'Ma wiele (hasMany)',\n        'belongs_to'           => 'Należy do (belongsTo)',\n        'belongs_to_many'      => 'Należy do wielu (belongsToMany)',\n        'which_column_from'    => 'Która kolumna z',\n        'is_used_to_reference' => 'odnosi się do',\n        'pivot_table'          => 'Tabela przestawna (Pivot)',\n        'selection_details'    => 'Szczegóły wyboru',\n        'display_the'          => 'Wyświetl',\n        'store_the'            => 'Przechowuj',\n        'easy_there'           => 'Powoli Kapitanie',\n        'before_create'        => 'Przed utworzeniem nowej relacji, musisz najpierw utworzyć BREAD.<br> Następnie wróć do edycji BREAD i będziesz mógł dodawać relacje.<br> Dzięki.',\n        'cancel'               => 'Anuluj',\n        'add_new'              => 'Dodaj nową relację',\n        'open'                 => 'Otwórz',\n        'close'                => 'Zamknij',\n        'relationship_details' => 'Szczegóły relacji',\n        'browse'               => 'Przeglądaj',\n        'read'                 => 'Czytaj',\n        'edit'                 => 'Edytuj',\n        'add'                  => 'Dodaj',\n        'delete'               => 'Usuń',\n        'create'               => 'Utwórz relację',\n        'namespace'            => 'Przestrzeń nazw modelu (np. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/pl/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Brak danych w tabeli',\n    'sInfo'           => 'Wpisy _START_ do _END_ z _TOTAL_',\n    'sInfoEmpty'      => 'Brak wpisów',\n    'sInfoFiltered'   => '(przefiltrowane z _MAX_ wpisów)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Pokaż _MENU_ wpisów',\n    'sLoadingRecords' => 'Trwa wczytywanie...',\n    'sProcessing'     => 'Trwa przetwarzanie...',\n    'sSearch'         => 'Szukaj:',\n    'sZeroRecords'    => 'Nie znaleziono pasującego wyniku',\n    'oPaginate'       => [\n        'sFirst'    => 'Pierwszy',\n        'sLast'     => 'Ostatni',\n        'sNext'     => 'Następne',\n        'sPrevious' => 'Poprzednie',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': aktywuj, aby posortować kolumnę rosnąco',\n        'sSortDescending' => ': aktywuj, aby posortować kolumnę malejąco',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/pl/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Poprzedni tydzień',\n    'last_year' => 'Poprzedni rok',\n    'this_week' => 'Bieżący tydzień',\n    'this_year' => 'Bieżący rok',\n];\n"
  },
  {
    "path": "publishable/lang/pl/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Strona|Strony',\n    'page_link_text' => 'Wyświetl wszystkie strony',\n    'page_text'      => 'Masz :count :string w swojej bazie danych. Kliknij przycisk poniżej, by wyświetlić wszystkie strony.',\n    'post'           => 'Wpis|Wpisy',\n    'post_link_text' => 'Wyświetl wszystkie wpisy',\n    'post_text'      => 'Masz :count :string w swojej bazie danych. Kliknij przycisk poniżej, by wyświetlić wszystkie wpisy.',\n    'user'           => 'Użytkownik|Użytkownicy',\n    'user_link_text' => 'Wyświetl wszystkich użytkowników',\n    'user_text'      => 'Masz :count :string w swojej bazie danych. Kliknij przycisk poniżej, by wyświetlić wszystkich użytkowników.',\n];\n"
  },
  {
    "path": "publishable/lang/pl/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'  => 'Właśnie utworzyliśmy dla Ciebie brakujące dowiązanie symboliczne.',\n    'symlink_created_title' => 'Utworzono dowiązanie symboliczne do miejsca przechowywania danych',\n    'symlink_failed_text'   => 'Nie udało się wygenerować brakującego dowiązania symbolicznego dla Twojej aplikacji. '.\n                             'Wygląda na to, że serwer na którym uruchomiona jest aplikacja tego nie obsługuje.',\n    'symlink_failed_title'   => 'Nie można utworzyć dowiązania symbolicznego do miejsca przechowywania danych',\n    'symlink_missing_button' => 'Napraw',\n    'symlink_missing_text'   => 'Nie można znaleźć dowiązania symbolicznego do miejsca przechowywania danych. '.\n                                'Może to powodować problemy z ładowaniem plików multimedialnych w przeglądarce.',\n    'symlink_missing_title' => 'Brak dowiązania do miejsca przechowywania danych.',\n];\n"
  },
  {
    "path": "publishable/lang/pl/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Zostaw puste, by zachować hasło bez zmian',\n    'field_select_dd_relationship' => 'Upewnij się, by ustawić odpowiednie powiązania w metodzie :method w klasie :class',\n    'type_checkbox'                => 'Pole wyboru (checkbox)',\n    'type_codeeditor'              => 'Edytor kodu (code editor)',\n    'type_file'                    => 'Plik',\n    'type_image'                   => 'Obraz',\n    'type_radiobutton'             => 'Przycisk wyboru (radio button)',\n    'type_richtextbox'             => 'Edytor tekstu (rich textbox)',\n    'type_selectdropdown'          => 'Menu wyboru (dropdown)',\n    'type_textarea'                => 'Długi tekst (textarea)',\n    'type_textbox'                 => 'Pole tekstowe (textbox)',\n];\n"
  },
  {
    "path": "publishable/lang/pl/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Akcja',\n    'actions'                => 'Akcje',\n    'add'                    => 'Dodaj',\n    'add_folder'             => 'Dodaj folder',\n    'add_new'                => 'Dodaj nowy',\n    'all_done'               => 'Wszystko gotowe',\n    'are_you_sure'           => 'Na pewno',\n    'are_you_sure_delete'    => 'Na pewno usunąć',\n    'auto_increment'         => 'Automatyczny przyrost',\n    'browse'                 => 'Przeglądaj',\n    'builder'                => 'Builder',\n    'bulk_delete'            => 'Usuń wybrane',\n    'bulk_delete_confirm'    => 'Tak, usuń wybrane',\n    'bulk_delete_nothing'    => 'Nie wybrano niczego do usunięcia',\n    'cancel'                 => 'Anuluj',\n    'choose_type'            => 'Wybierz rodzaj',\n    'click_here'             => 'Kliknij tutaj',\n    'close'                  => 'Zamknij',\n    'compass'                => 'Kompas',\n    'created_at'             => 'Utworzono',\n    'custom'                 => 'Specjalny',\n    'dashboard'              => 'Panel',\n    'database'               => 'Baza danych',\n    'default'                => 'Domyślny',\n    'delete'                 => 'Usuń',\n    'delete_confirm'         => 'Tak, usuń!',\n    'delete_question'        => 'Na pewno usunąć to',\n    'delete_this_confirm'    => 'Tak, usuń to',\n    'deselect_all'           => 'Odznacz wszystkie',\n    'download'               => 'Pobierz',\n    'edit'                   => 'Edytuj',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Wybacz, ale wygląda na to, że wystąpił problem podczas usuwania tego',\n    'exception'              => 'Wyjątek',\n    'featured'               => 'Polecane',\n    'field_does_not_exist'   => 'Pole nie istnieje',\n    'how_to_use'             => 'Instrukcja obsługi',\n    'index'                  => 'Indeks',\n    'internal_error'         => 'Błąd wewnętrzny',\n    'items'                  => 'pozycja/e',\n    'keep_sidebar_open'      => 'Yarr! Rzuć kotwice! (i pozostaw pasek boczny otwarty)',\n    'key'                    => 'Klucz',\n    'last_modified'          => 'Ostatnio zmodyfikowany',\n    'length'                 => 'Długość',\n    'login'                  => 'Zaloguj',\n    'media'                  => 'Media',\n    'menu_builder'           => 'Zarządzanie menu',\n    'move'                   => 'Przenieś',\n    'name'                   => 'Nazwa',\n    'new'                    => 'Nowy',\n    'no'                     => 'Nie',\n    'no_thanks'              => 'Nie dzięki',\n    'not_null'               => 'Nie NULL',\n    'no_results'             => 'No results',\n    'options'                => 'Opcje',\n    'password'               => 'Hasło',\n    'permissions'            => 'Uprawnienia',\n    'profile'                => 'Profil',\n    'public_url'             => 'Link publiczny',\n    'read'                   => 'Czytaj',\n    'rename'                 => 'Zmień nazwę',\n    'required'               => 'Wymagany',\n    'return_to_list'         => 'Wróć do listy',\n    'route'                  => 'Ścieżka',\n    'save'                   => 'Zapisz',\n    'search'                 => 'Szukaj',\n    'select_all'             => 'Zaznacz wszystkie',\n    'select_group'           => 'Wybierz istniejącą grupę lub dodaj nową',\n    'settings'               => 'Ustawienia',\n    'showing_entries'        => 'Wpis :from do :to z :all wpisów|Wpisy :from do :to z :all',\n    'submit'                 => 'Zapisz',\n    'successfully_added_new' => 'Pomyślnie dodano nowy',\n    'successfully_deleted'   => 'Pomyślnie usunięto',\n    'successfully_updated'   => 'Pomyślnie zaktualizowano',\n    'timestamp'              => 'Znacznik czasu',\n    'title'                  => 'Tytuł',\n    'type'                   => 'Rodzaj',\n    'unsigned'               => 'Bez sygnatury',\n    'unstick_sidebar'        => 'Odłącz pasek boczny',\n    'update'                 => 'Aktualizuj',\n    'update_failed'          => 'Aktualizacja nie powiodła się',\n    'upload'                 => 'Prześlij',\n    'url'                    => 'Odnośnik',\n    'view'                   => 'Pokaż',\n    'viewing'                => 'Wyświetl',\n    'yes'                    => 'Tak',\n    'yes_please'             => 'Tak, proszę',\n];\n"
  },
  {
    "path": "publishable/lang/pl/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Błędny JSON',\n    'invalid_message'   => 'Wygląda na to, że wprowadziłeś nieprawidłowo zbudowany JSON.',\n    'valid'             => 'Poprawny JSON',\n    'validation_errors' => 'Błędy walidacji',\n];\n"
  },
  {
    "path": "publishable/lang/pl/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Trwa logowanie',\n    'signin_below' => 'Wprowadź poniżej dane logowania:',\n    'welcome'      => 'Witaj w Voyager. Brakujący panel administracyjny Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/pl/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Dodaj nowy folder',\n    'audio_support'          => 'Twoja przeglądarka nie wspiera odtwarzania audio.',\n    'create_new_folder'      => 'Utwórz nowy folder',\n    'delete_folder_question' => 'Usunięcie folderu usunie wszystkie pliki i foldery, które znajdują się w środku',\n    'destination_folder'     => 'Folder docelowy',\n    'drag_drop_info'         => 'Przeciągnij i upuść pliki albo kliknij poniżej, by przesłać plik',\n    'error_already_exists'   => 'Przykro mi, ale plik/folder o tej nazwie istnieje już w wybranym folderze.',\n    'error_creating_dir'     => 'Przykro mi, ale coś poszło nie tak w trakcie tworzenia tego folderu, '.\n                             'proszę sprawdź swoje uprawnienia',\n    'error_deleting_file' => 'Przykro mi, ale coś poszło nie tak w trakcie usuwania tego pliku, '.\n                             'proszę sprawdź swoje uprawnienia',\n    'error_deleting_folder' => 'Przykro mi, ale coś poszło nie tak w trakcie usuwania tego folderu, '.\n                               'proszę sprawdź swoje uprawnienia',\n    'error_may_exist' => 'Plik lub folder o tej nazwie prawdopodobnie już istnieje. Proszę wybierz inną nazwę albo '.\n                         'usuń ten inny plik/folder.',\n    'error_moving' => 'Przykro mi, ale coś poszło nie tak w trakcie przesuwania tego pliku/folderu, proszę sprawdź '.\n                      'czy masz poprawnie uprawnienia.',\n    'error_uploading'       => 'Błąd przesyłania: Wystąpił nieznany błąd!',\n    'folder_exists_already' => 'Przykro mi, ten folder już istnieje, proszę usuń ten folder, jeśl chcesz '.\n                               'utworzyć go ponownie',\n    'image_does_not_exist'  => 'Obraz nie istnieje',\n    'image_removed'         => 'Obraz usunięty',\n    'library'               => 'Biblioteka mediów',\n    'loading'               => 'WCZYTUJĘ TWOJE MEDIA',\n    'move_file_folder'      => 'Przenieś plik/folder',\n    'new_file_folder'       => 'Nowy plik/folder',\n    'new_folder_name'       => 'Nowy folder',\n    'no_files_here'         => 'Brak plików tutaj.',\n    'no_files_in_folder'    => 'Brak plików w tym folderze.',\n    'nothing_selected'      => 'Żaden plik/folder nie został wybrany',\n    'rename_file_folder'    => 'Zmień nazwę pliku/folderu',\n    'success_uploaded_file' => 'Pomyślnie przesłano plik!',\n    'success_uploading'     => 'Pomyślnie przesłano obraz!',\n    'uploading_wrong_type'  => 'Błąd przesyłania: Niewspierany format pliku lub plik jest za duży, by go przesłać!',\n    'video_support'         => 'Twoja przeglądarka nie wspiera wyświetlania video.',\n    'crop'                  => 'Przytnij',\n    'crop_and_create'       => 'Przytnij i utwórz',\n    'crop_override_confirm' => 'Na pewno nadpisać oryginalny obraz?',\n    'crop_image'            => 'Przytnij obraz',\n    'success_crop_image'    => 'Pomyślnie przycięto obraz',\n    'height'                => 'Wysokość: ',\n    'width'                 => 'Szerekość: ',\n    'add_all_selected'      => 'Dodaj wszystkie wybrane',\n];\n"
  },
  {
    "path": "publishable/lang/pl/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Kolor z palety RGB albo kod HEX (opcjonalnie)',\n    'color_ph'             => 'Kolor (na przykład #ffffff albo rgb(255, 255, 255)',\n    'create_new_item'      => 'Utwórz nowy element menu',\n    'delete_item_confirm'  => 'Tak, usuń ten element menu',\n    'delete_item_question' => 'Na pewno usunąć ten element menu?',\n    'drag_drop_info'       => 'Przeciągnij i upuść element menu poniżej, aby zmienić ich kolejność.',\n    'dynamic_route'        => 'Dynamiczna ścieżka',\n    'edit_item'            => 'Edytuj element menu',\n    'icon_class'           => 'Klasa ikony elementu menu (Użyj',\n    'icon_class2'          => 'klasy ikon Voyager</a>)',\n    'icon_class_ph'        => 'Klasa ikony (opcjonalnie)',\n    'item_route'           => 'Ścieżka dla elementu menu',\n    'item_title'           => 'Tytuł elementu menu',\n    'link_type'            => 'Rodzaj odnośnika',\n    'new_menu_item'        => 'Nowy element menu',\n    'open_in'              => 'Otwórz w',\n    'open_new'             => 'Nowa karta/nowe okno',\n    'open_same'            => 'Ta sama karta/to samo okno',\n    'route_parameter'      => 'Parametry ścieżki (jeśli jakiekolwiek)',\n    'static_url'           => 'Statyczny URL',\n    'successfully_created' => 'Pomyślnie utworzono nowy element menu.',\n    'successfully_deleted' => 'Pomyślnie usunięto element menu.',\n    'successfully_updated' => 'Pomyślnie zmodyfikowano element menu.',\n    'updated_order'        => 'Pomyślnie zaktualizowano kolejność elementów menu.',\n    'url'                  => 'URL dla elementu menu',\n    'usage_hint'           => 'Menu można umieścić w dowolnym miejscu na stronie, używając|Te menu można '.\n                    'umieścić w dowolnym miejscu na stronie, używając ',\n];\n"
  },
  {
    "path": "publishable/lang/pl/post.php",
    "content": "<?php\n\nreturn [\n    'category'         => 'Kategoria wpisu',\n    'content'          => 'Treść wpisu',\n    'details'          => 'Szczegóły wpisu',\n    'excerpt'          => 'Wyciąg <small>Krótki opis tego wpisu</small>',\n    'image'            => 'Obraz do wpisu',\n    'meta_description' => 'Metaopis',\n    'meta_keywords'    => 'Słowa kluczowe',\n    'new'              => 'Utwórz nowy wpis',\n    'seo_content'      => 'Treść SEO',\n    'seo_title'        => 'Tytuł SEO',\n    'slug'             => 'Skrót URL',\n    'status'           => 'Status wpisu',\n    'status_draft'     => 'szkic',\n    'status_pending'   => 'w kolejce',\n    'status_published' => 'opublikowany',\n    'title'            => 'Tytuł wpisu',\n    'title_sub'        => 'Tytuł Twojego wpisu',\n    'update'           => 'Zaktualizuj wpis',\n];\n"
  },
  {
    "path": "publishable/lang/pl/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => 'Avatar',\n    'edit'          => 'Edytuj mój profil',\n    'edit_user'     => 'Edytuj użytkownika',\n    'password'      => 'Hasło',\n    'password_hint' => 'Pozostaw puste, aby zachować bieżące',\n    'role'          => 'Role',\n    'user_role'     => 'Role użytkownika',\n];\n"
  },
  {
    "path": "publishable/lang/pl/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Autor',\n        'avatar'           => 'Avatar',\n        'body'             => 'Treść',\n        'category'         => 'Kategoria',\n        'created_at'       => 'Utworzono',\n        'display_name'     => 'Nazwa Wyświetlana',\n        'email'            => 'Email',\n        'excerpt'          => 'Wyciąg',\n        'featured'         => 'Przedstawiony',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Opis',\n        'meta_keywords'    => 'Słowa Kluczowe',\n        'name'             => 'Nazwa',\n        'order'            => 'Kolejność',\n        'page_image'       => 'Grafika Strony',\n        'parent'           => 'Rodzic',\n        'password'         => 'Hasło',\n        'post_image'       => 'Grafika Postu',\n        'remember_token'   => 'Remember Token',\n        'role'             => 'Role',\n        'seo_title'        => 'Tytuł SEO',\n        'slug'             => 'Slug',\n        'status'           => 'Status',\n        'title'            => 'Tytuł',\n        'updated_at'       => 'Zaktualizowano',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Kategoria',\n            'plural'   => 'Kategorie',\n        ],\n        'menu'     => [\n            'singular' => 'Menu',\n            'plural'   => 'Menu',\n        ],\n        'page'     => [\n            'singular' => 'Strona',\n            'plural'   => 'Strony',\n        ],\n        'post'     => [\n            'singular' => 'Post',\n            'plural'   => 'Posty',\n        ],\n        'role'     => [\n            'singular' => 'Rola',\n            'plural'   => 'Role',\n        ],\n        'user'     => [\n            'singular' => 'Użytkownik',\n            'plural'   => 'Użytkownicy',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Kategorie',\n        'compass'      => 'Komaps',\n        'dashboard'    => 'Panel',\n        'database'     => 'Baza Danych',\n        'media'        => 'Media',\n        'menu_builder' => 'Edytor Menu',\n        'pages'        => 'Strony',\n        'posts'        => 'Posty',\n        'roles'        => 'Role',\n        'settings'     => 'Ustawienia',\n        'tools'        => 'Narzędzia',\n        'users'        => 'Uzytkownicy',\n    ],\n    'roles'      => [\n        'admin' => 'Administrator',\n        'user'  => 'Normalny Użytkownik',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Admin Grafika Tła',\n            'description'                => 'Admin Opis',\n            'description_value'          => 'Witaj w Voyagerze. Zaginionym administratorze dla Laravela',\n            'google_analytics_client_id' => 'Google Analytics Client ID (dla panelu administracyjnego)',\n            'icon_image'                 => 'Admin Grafika Ikony',\n            'loader'                     => 'Admin Loader',\n            'title'                      => 'Admin Tytuł',\n        ],\n        'site'  => [\n            'description'                  => 'Opis Strony',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Logo Strony',\n            'title'                        => 'Tytuł Strony',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/pl/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Dane ustawienia możesz wywołać w dowolnym miejscu strony używając',\n    'save'                 => 'Zapisz ustawienia',\n    'new'                  => 'Nowe ustawienie',\n    'help_name'            => 'Wartość ustawienia, np.: Panel administracyjny',\n    'help_key'             => 'Klucz ustawienia, np.: admin_title',\n    'help_option'          => '(opcjonalnie, dotyczy jedynie niektórych typów ustawień, np.: menu wyboru [dropdown box] lub przycisk wyboru [radio button])',\n    'add_new'              => 'Dodaj nowe ustawienie',\n    'delete_question'      => 'Na pewno usunąć ustawienie :setting?',\n    'delete_confirm'       => 'Tak, usuń te ustawienie',\n    'successfully_created' => 'Pomyślnie utworzono ustawienie',\n    'successfully_saved'   => 'Pomyślnie zapisano ustawienie',\n    'successfully_deleted' => 'Pomyślnie usunięto ustawienie',\n    'already_at_top'       => 'To jest już na górze listy',\n    'already_at_bottom'    => 'To jest już na dole listy',\n    'key_already_exists'   => 'Klucz :key już istnieje',\n    'moved_order_up'       => 'Przesunięto ustawienie :name o pozycję do góry',\n    'moved_order_down'     => 'Przesunięto ustawienie :name o pozycję do dołu',\n    'successfully_removed' => 'Pomyślnie usunięto wartość :name',\n    'group_general'        => 'Ogólne',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Strona',\n    'group'                => 'Grupa',\n    'help_group'           => 'Grupa do której przypisane jest ustawienie',\n];\n"
  },
  {
    "path": "publishable/lang/pl/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Stworzone z <i class=\"voyager-heart\"></i> przez',\n    'footer_copyright2' => 'Do stworzenia potrzebny był rum, dużo rumu',\n];\n"
  },
  {
    "path": "publishable/lang/pt/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'Por pageview',\n    'by_sessions'            => 'Por sessions',\n    'by_users'               => 'Por users',\n    'no_client_id'           => 'Para aceder ao analytics precisa adicionar nas Configurações do Voyager o key <code>google_analytics_client_id </code> com o código google analytics client id. Obtenha o seu key através do Google developer console:',\n    'set_view'               => 'Selecionar Vista',\n    'this_vs_last_week'      => 'Esta Semana vs Semana Passada',\n    'this_vs_last_year'      => 'Este Ano vs Ano Passado',\n    'top_browsers'           => 'Top Browsers',\n    'top_countries'          => 'Top Países',\n    'various_visualizations' => 'Visualizações várias',\n];\n"
  },
  {
    "path": "publishable/lang/pt/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Adicionar BREAD a esta tabela',\n    'bread_crud_actions'     => 'Ações BREAD/CRUD',\n    'bread_info'             => 'Informação do BREAD',\n    'controller_name_hint'   => 'ex. PageController, se não preencher irá usar o BREAD Controller',\n    'create_bread_for_table' => 'Criar BREAD para a tabela :table',\n    'delete_bread'           => 'Remover BREAD',\n    'delete_bread_conf'      => 'Sim, remover este BREAD',\n    'delete_bread_quest'     => 'Tem a certeza que deseja remover o BREAD para a tabela :table?',\n    'edit_bread'             => 'Alterar BREAD',\n    'edit_bread_for_table'   => 'Alterar BREAD da tabela :table',\n    'error_creating_bread'   => 'Oops, ocorreu algo inesperado ao criar este BREAD',\n    'error_removing_bread'   => 'Oops, ocorreu algo inesperado ao Remover este BREAD',\n    'error_updating_bread'   => 'Oops, ocorreu algo inesperado ao alterar este BREAD',\n    'success_created_bread'  => 'BREAD criado com sucesso',\n    'success_remove_bread'   => 'BREAD :datatype removido com sucesso',\n    'success_update_bread'   => 'BREAD :datatype alterado com sucesso',\n    'controller_name'        => 'Nome do Controller',\n    'create_migration'       => 'Criar Migration para esta tabela?',\n    'create_model_table'     => 'Criar Model para esta tabela?',\n    'description'            => 'Descrição',\n    'display_name'           => 'Nome a Apresentar',\n    'display_name_plural'    => 'Nome a Apresentar (Plural)',\n    'display_name_singular'  => 'Nome a Apresentar (Singular)',\n    'edit_rows'              => 'Alterar as linhas para a tabela :table abaixo',\n    'generate_permissions'   => 'Gerar Permissões',\n    'icon_class'             => 'Icon para usar nesta Tabela',\n    'icon_hint'              => 'Icon (opcional) Usar a',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Nome da Classe do Model',\n    'model_name'             => 'Nome do Model',\n    'model_name_ph'          => 'ex. \\App\\User, se vazio irá tentar usar o nome da tabela',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Nome da Policy',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, se vazio irá tentar usar o pré definido',\n    'server_pagination'      => 'Paginação no Servidor',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URL Slug (único)',\n    'url_slug_ph'            => 'URL slug (ex. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/pt/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Adicionar Novo Campo',\n    'add_softdeletes'           => 'Adicionar Soft Deletes',\n    'add_timestamps'            => 'Adicionar Timestamps',\n    'already_exists'            => 'já existe',\n    'already_exists_table'      => 'A Tabela :table já existe',\n    'column'                    => 'Campo',\n    'composite_warning'         => 'Atenção: este campo faz parte dos índices compostos',\n    'create_new_table'          => 'Criar Tabela',\n    'create_your_new_table'     => 'Criar a Nova Tabela',\n    'default'                   => 'Pré-definido',\n    'delete_bread_before_table' => 'Por favor, remova o BREAD desta tabela antes de remover a tabela.',\n    'delete_table_confirm'      => 'Sim, remover esta tabela',\n    'delete_table_question'     => 'Tem a certeza que deseja remover a tabela :table?',\n    'edit_table'                => 'Alterar a tabela :table abaixo',\n    'edit_table_not_exist'      => 'A tabela que pretende remover não existe',\n    'extra'                     => 'Extra',\n    'field'                     => 'Campo',\n    'field_safe_failed'         => 'Erro ao gravar o campo :field, voltando atrás!',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Tipo de Input',\n    'key'                       => 'Key',\n    'name_warning'              => 'Por favor adicione o nome da coluna para criar o index',\n    'no_composites_warning'     => 'Esta tabela tem composite indexes. Nota, eles não são suportados de momento. Tenha atenção ao tentar adicionar/remover indexes.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Opções Adicionais',\n    'primary'                   => 'PRIMARY',\n    'success_create_table'      => 'Tabela :table criada com sucesso',\n    'success_delete_table'      => 'Tabela :table removida com sucesso',\n    'success_update_table'      => 'Tabela :table alterada com sucesso',\n    'table_actions'             => 'Ações da Tabela',\n    'table_columns'             => 'Campos da Tabela',\n    'table_has_index'           => 'A tabela já tem um primary index.',\n    'table_name'                => 'Nome da Tabela',\n    'table_no_columns'          => 'A tabela não tem campos...',\n    'type'                      => 'Tipo',\n    'type_not_supported'        => 'Este tipo de campo não é suportado',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Tipo Desconhecido',\n    'update_table'              => 'Alterar Tabela',\n    'visibility'                => 'Visibilidade',\n];\n"
  },
  {
    "path": "publishable/lang/pt/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Não há registos para apresentar',\n    'sInfo'           => 'Mostrando de _START_ até _END_ de _TOTAL_ registos',\n    'sInfoEmpty'      => 'Mostrando de 0 até 0 de 0 registos',\n    'sInfoFiltered'   => '(filtrado de _MAX_ registos no total)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Mostrar _MENU_ registos',\n    'sLoadingRecords' => 'A Carregar...',\n    'sProcessing'     => 'A processar...',\n    'sSearch'         => 'Procurar:',\n    'sZeroRecords'    => 'Não foram encontrados resultados',\n    'oPaginate'       => [\n        'sFirst'    => 'Primeiro',\n        'sPrevious' => 'Anterior',\n        'sNext'     => 'Seguinte',\n        'sLast'     => 'Último',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': ativar para ordenar de forma crescente',\n        'sSortDescending' => ': ativar para ordenar de forma decrescente',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/pt/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Semana Passada',\n    'last_year' => 'Ano Passado',\n    'this_week' => 'Esta Semana',\n    'this_year' => 'Este Ano',\n];\n"
  },
  {
    "path": "publishable/lang/pt/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Página|Páginas',\n    'page_link_text' => 'Ver todas as páginas',\n    'page_text'      => 'Tem :count :string na sua base de dados. Clique no botão abaixo para ver todas as páginas.',\n    'post'           => 'Publicação|Publicações',\n    'post_link_text' => 'Ver todas as publicações',\n    'post_text'      => 'Tem :count :string na sua base de dados. Clique no botão abaixo para ver todas as publicações.',\n    'user'           => 'Utilizador|Utilizadores',\n    'user_link_text' => 'Ver todos os utilizadores',\n    'user_text'      => 'Tem :count :string na sua base de dados. Clique no botão abaixo para ver todos os utilizadores.',\n];\n"
  },
  {
    "path": "publishable/lang/pt/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'We just created the missing symlink for you.',\n    'symlink_created_title'  => 'Missing storage symlink created',\n    'symlink_failed_text'    => 'We failed to generate the missing symlink for your application. It seems like your hosting provider does not support it.',\n    'symlink_failed_title'   => 'Could not create missing storage symlink',\n    'symlink_missing_button' => 'Fix it',\n    'symlink_missing_text'   => 'We could not find a storage symlink. This could cause problems with loading media files from the browser.',\n    'symlink_missing_title'  => 'Missing storage symlink',\n];\n"
  },
  {
    "path": "publishable/lang/pt/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Deixar vazio para manter o atual',\n    'field_select_dd_relationship' => 'Make sure to setup the appropriate relationship in the :method method of the :class class.',\n    'type_checkbox'                => 'Check Box',\n    'type_codeeditor'              => 'Editor de Código',\n    'type_file'                    => 'Ficheiro',\n    'type_image'                   => 'Imagem',\n    'type_radiobutton'             => 'Radio Button',\n    'type_richtextbox'             => 'Rich Textbox',\n    'type_selectdropdown'          => 'Select Dropdown',\n    'type_textarea'                => 'Text Area',\n    'type_textbox'                 => 'Text Box',\n];\n"
  },
  {
    "path": "publishable/lang/pt/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Ação',\n    'actions'                => 'Ações',\n    'add'                    => 'Adicionar',\n    'add_folder'             => 'Adicionar Pasta',\n    'add_new'                => 'Adicionar',\n    'all_done'               => 'Concluído',\n    'are_you_sure'           => 'Tem certeza',\n    'are_you_sure_delete'    => 'Tem certeza de que deseja remover',\n    'auto_increment'         => 'Incremento automático',\n    'browse'                 => 'Navegar',\n    'builder'                => 'Construtor',\n    'cancel'                 => 'Cancelar',\n    'choose_type'            => 'Escolha o tipo',\n    'click_here'             => 'Clique aqui',\n    'close'                  => 'Fechar',\n    'compass'                => 'Bússola',\n    'created_at'             => 'Criado em',\n    'custom'                 => 'Personalizado',\n    'dashboard'              => 'Painel de Controle',\n    'database'               => 'Base de dados',\n    'default'                => 'Padrão',\n    'delete'                 => 'Remover',\n    'delete_confirm'         => 'Sim, Remover!',\n    'delete_question'        => 'Tem certeza de que deseja remover isto',\n    'delete_this_confirm'    => 'Sim, exclua isto',\n    'deselect_all'           => 'Desmarcar todos',\n    'download'               => 'Descarregar',\n    'edit'                   => 'Editar',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Oops, ocorreu um problema ao remover',\n    'exception'              => 'Exceção',\n    'featured'               => 'Destacado',\n    'field_does_not_exist'   => 'O campo não existe',\n    'how_to_use'             => 'Como usar',\n    'index'                  => 'Índice',\n    'internal_error'         => 'Erro interno',\n    'items'                  => 'item(s)',\n    'keep_sidebar_open'      => 'Arrrgh! Soltem as âncoras! (e mantenha a barra lateral aberta)',\n    'key'                    => 'Chave',\n    'last_modified'          => 'Última modificação',\n    'length'                 => 'comprimento',\n    'login'                  => 'Login',\n    'media'                  => 'Media',\n    'menu_builder'           => 'Construtor de Menu',\n    'move'                   => 'Mover',\n    'name'                   => 'Nome',\n    'new'                    => 'Novo',\n    'no'                     => 'Não',\n    'no_thanks'              => 'Não Obrigado',\n    'not_null'               => 'Não Nulo',\n    'no_results'             => 'No results',\n    'options'                => 'Opções',\n    'password'               => 'Password',\n    'permissions'            => 'Permissões',\n    'profile'                => 'Perfil',\n    'public_url'             => 'URL público',\n    'read'                   => 'Ler',\n    'rename'                 => 'Renomear',\n    'required'               => 'Requerido',\n    'return_to_list'         => 'Voltar à lista',\n    'route'                  => 'Rota',\n    'save'                   => 'Guardar',\n    'search'                 => 'Procurar',\n    'select_all'             => 'Selecione Todos',\n    'settings'               => 'Configurações',\n    'showing_entries'        => 'Mostrando :from a :to de :all entrada|Mostrando :from a :to de :all entradas',\n    'submit'                 => 'Submeter',\n    'successfully_added_new' => 'Adicionado com sucesso',\n    'successfully_deleted'   => 'Removido com sucesso',\n    'successfully_updated'   => 'Atualizado com sucesso',\n    'timestamp'              => 'Timestamp', //todo find suitable translation\n    'title'                  => 'Título',\n    'type'                   => 'Tipo',\n    'unsigned'               => 'Não assinado',\n    'unstick_sidebar'        => 'Descolar a barra lateral',\n    'update'                 => 'Atualizar',\n    'update_failed'          => 'atualização falhou',\n    'upload'                 => 'Upload',\n    'url'                    => 'URL',\n    'view'                   => 'Ver',\n    'viewing'                => 'Visualizando',\n    'yes'                    => 'Sim',\n    'yes_please'             => 'Sim, por favor',\n];\n"
  },
  {
    "path": "publishable/lang/pt/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'JSON Inválido',\n    'invalid_message'   => 'Submeteu um JSON inválido.',\n    'valid'             => 'JSON Válido',\n    'validation_errors' => 'Erros de validação',\n];\n"
  },
  {
    "path": "publishable/lang/pt/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'A iniciar sessão',\n    'signin_below' => 'Iniciar sessão abaixo:',\n    'welcome'      => 'Bem-vindo ao Voyager. O painel de administração que faltava ao Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/pt/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Adicionar Pasta',\n    'audio_support'          => 'O seu navegador não suporta o elemento de áudio.',\n    'create_new_folder'      => 'Criar Pasta',\n    'delete_folder_question' => 'Ao remover uma pasta irá também remover todos os ficheiros e pastas contidos nela',\n    'destination_folder'     => 'Destino da Pasta',\n    'drag_drop_info'         => 'Arraste e solte ficheiros ou clique abaixo para carregar',\n    'error_already_exists'   => 'Oops, já existe um ficheiro / pasta com esse nome nessa pasta.',\n    'error_creating_dir'     => 'Oops, ocorreu algo inesperado a criar a pasta, por favor verifique as suas permissões',\n    'error_deleting_file'    => 'Oops, ocorreu algo inesperado removendo este ficheiro, por favor verifique as suas permissões',\n    'error_deleting_folder'  => 'Oops, ocorreu algo inesperado removendo esta pasta, por favor verifique as suas permissões',\n    'error_may_exist'        => 'Talvez um Ficheiro ou Pasta exista com esse nome. Por favor tente com outro nome, ou apague o ficheiro correspondente.',\n    'error_moving'           => 'Oops, ocorreu um problema ao mover esse ficheiro / pasta, verifique as suas permissões.',\n    'error_uploading'        => 'Falha ao Copiar: Ocorreu um erro desconhecido!',\n    'folder_exists_already'  => 'Oops, essa pasta já existe, por favor remova essa pasta se desejar criar uma nova',\n    'image_does_not_exist'   => 'A imagem não existe',\n    'image_removed'          => 'Imagem removida',\n    'library'                => 'Biblioteca de Media',\n    'loading'                => 'A CARREGAR OS SEUS FICHEIROS DE MÍDIA',\n    'move_file_folder'       => 'Mover Ficheiro/pasta',\n    'new_file_folder'        => 'Novo Nome do Ficheiro/Pasta',\n    'new_folder_name'        => 'Novo Nome da Pasta',\n    'no_files_here'          => 'Não há ficheiros aqui.',\n    'no_files_in_folder'     => 'Nenhum ficheiro nesta pasta.',\n    'nothing_selected'       => 'Nenhum ficheiro ou pasta selecionada',\n    'rename_file_folder'     => 'Renomear Ficheiro/Pasta',\n    'success_uploaded_file'  => 'Ficheiro carregado com sucesso!',\n    'success_uploading'      => 'Imagem carregada com sucesso!',\n    'uploading_wrong_type'   => 'Falha de envio: Formato do ficheiro não suportado ou é muito grande para ser carregado!',\n    'video_support'          => 'O seu navegador não suporta a tag de vídeo.',\n    'add_all_selected'       => 'Adicionar todos os selecionados',\n];\n"
  },
  {
    "path": "publishable/lang/pt/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Cor em RGB ou hex (opcional)',\n    'color_ph'             => 'Cor (ex. #ffffff ou rgb(255, 255, 255)',\n    'create_new_item'      => 'Criar um novo item de menu',\n    'delete_item_confirm'  => 'Sim, Remover este item de menu',\n    'delete_item_question' => 'Tem certeza de que deseja remover este item de menu?',\n    'drag_drop_info'       => 'Arraste e solte os itens do menu para os reorganizar.',\n    'dynamic_route'        => 'Rota Dinâmica',\n    'edit_item'            => 'Editar item de menu',\n    'icon_class'           => 'Classe do Ícone da Fonte para o item de menu (Use ',\n    'icon_class2'          => 'Classe da Fonte Voyager</a>)',\n    'icon_class_ph'        => 'Classe do Ícone (opcional)',\n    'item_route'           => 'Rota do item de menu',\n    'item_title'           => 'Título do item de menu',\n    'link_type'            => 'Tipo de link',\n    'new_menu_item'        => 'Novo Item de Menu',\n    'open_in'              => 'Abrir em',\n    'open_new'             => 'Nova Guia/Janela',\n    'open_same'            => 'Mesma Guia/Janela',\n    'route_parameter'      => 'Parâmetros de Rotas (se aplicado)',\n    'static_url'           => 'URL Estático',\n    'successfully_created' => 'Novo item de menu criado com sucesso.',\n    'successfully_deleted' => 'Item de menu removido com sucesso',\n    'successfully_updated' => 'Item de menu atualizado com sucesso.',\n    'updated_order'        => 'Ordem de menu atualizada com sucesso.',\n    'url'                  => 'URL do item de menu',\n    'usage_hint'           => 'Pode apresentar um menu em qualquer lugar no seu site, executando| Pode apresentar este menu em qualquer lugar no seu site, executando',\n];\n"
  },
  {
    "path": "publishable/lang/pt/post.php",
    "content": "<?php\n\nreturn [\n    'category'         => 'Categoria da Publicação',\n    'content'          => 'Conteúdo da Publicação',\n    'details'          => 'Detalhes da Publicação',\n    'excerpt'          => 'Excerto <small>Pequena descrição desta publicação</small>',\n    'image'            => 'Publicar imagem',\n    'meta_description' => 'Descrição de Meta',\n    'meta_keywords'    => 'palavras-chave de Meta',\n    'new'              => 'Criar nova publicação',\n    'seo_content'      => 'Conteúdo do SEO',\n    'seo_title'        => 'Título SEO',\n    'slug'             => 'URL slug',\n    'status'           => 'Status da Publicação',\n    'status_draft'     => 'rascunho',\n    'status_pending'   => 'pendente',\n    'status_published' => 'Publicados',\n    'title'            => 'Título do cargo',\n    'title_sub'        => 'O título da sua Publicação',\n    'update'           => 'Alterar Publicação',\n];\n"
  },
  {
    "path": "publishable/lang/pt/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => 'Avatar',\n    'edit'          => 'Editar o meu perfil',\n    'edit_user'     => 'Editar Utilizador',\n    'password'      => 'Password',\n    'password_hint' => 'Deixar vazio para manter o valor atual',\n    'role'          => 'Função',\n    'user_role'     => 'Função do Utilizador',\n];\n"
  },
  {
    "path": "publishable/lang/pt/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Pode obter o valor de cada configuração em qualquer secção do seu site, executando',\n    'save'                 => 'Guardar configurações',\n    'new'                  => 'Nova configuração',\n    'help_name'            => 'Nome da configuração ex: Título do Administrador',\n    'help_key'             => 'Chave da configuração ex: title_administrador',\n    'help_option'          => '(Opcional, aplica-se apenas a certos tipos, como dropdown ou botão de rádio)',\n    'add_new'              => 'Adicionar configuração',\n    'delete_question'      => 'Tem certeza de que deseja remover a Configuração :setting?',\n    'delete_confirm'       => 'Sim, remover esta configuração',\n    'successfully_created' => 'Configurações criadas com sucesso',\n    'successfully_saved'   => 'Configurações guardadas com sucesso',\n    'successfully_deleted' => 'Configuração removida com sucesso',\n    'already_at_top'       => 'Já chegou ao topo da lista',\n    'already_at_bottom'    => 'Já chegou ao fundo da lista',\n    'key_already_exists'   => 'A chave :key já existe',\n    'moved_order_up'       => 'Configuração :name movida para cima',\n    'moved_order_down'     => 'Configuração :name movida para baixo',\n    'successfully_removed' => 'Valor :name removido com sucesso',\n    'group_general'        => 'Geral',\n    'group_admin'          => 'Administrador',\n    'group_site'           => 'Site',\n    'group'                => 'Grupo',\n    'help_group'           => 'O grupo desta configuração é atribuído a',\n];\n"
  },
  {
    "path": "publishable/lang/pt/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Produzido com <i class=\"voyager-heart\"></i> por',\n    'footer_copyright2' => 'Produzido com rum e mais rum',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'Por pageview',\n    'by_sessions'            => 'Por sessões',\n    'by_users'               => 'Por usuário',\n    'no_client_id'           => 'Para logar no analytics é preciso adicionar a chave <code>google_analytics_client_id</code> nas Configurações do Voyager com o código google de identidade do analytics client. Obtenha o sua chave através do Google developer console:',\n    'set_view'               => 'Selecionar Vista',\n    'this_vs_last_week'      => 'Esta Semana vs Semana Passada',\n    'this_vs_last_year'      => 'Este Ano vs Ano Passado',\n    'top_browsers'           => 'Top Browsers',\n    'top_countries'          => 'Top Países',\n    'various_visualizations' => 'Visualizações várias',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Adicionar BREAD à esta tabela',\n    'bread_crud_actions'     => 'Ações BREAD/CRUD',\n    'bread_info'             => 'Informação do BREAD',\n    'controller_name_hint'   => 'ex. PageController, se não preencher irá usar o BREAD Controller',\n    'create_bread_for_table' => 'Criar BREAD para a tabela :table',\n    'default_search_key'     => 'Campo de busca padrão na paginação no servidor',\n    'default_search_key_ph'  => 'O campo será pré-selecionado nas buscas com paginação no servidor',\n    'delete_bread'           => 'Remover BREAD',\n    'delete_bread_conf'      => 'Sim, remover este BREAD',\n    'delete_bread_quest'     => 'Tem a certeza que deseja remover o BREAD para a tabela :table?',\n    'edit_bread'             => 'Alterar BREAD',\n    'edit_bread_for_table'   => 'Alterar BREAD da tabela :table',\n    'error_creating_bread'   => 'Oops, ocorreu algo inesperado ao criar este BREAD',\n    'error_removing_bread'   => 'Oops, ocorreu algo inesperado ao Remover este BREAD',\n    'error_updating_bread'   => 'Oops, ocorreu algo inesperado ao alterar este BREAD',\n    'error_tagging'          => 'Desculpe, parece que houve um problema ao criar o registro. Por favor, verifique se a tabela possui os valores padrões para os demais campos.',\n    'success_created_bread'  => 'BREAD criado com sucesso',\n    'success_remove_bread'   => 'BREAD :datatype removido com sucesso',\n    'success_update_bread'   => 'BREAD :datatype alterado com sucesso',\n    'controller_name'        => 'Nome do Controller',\n    'create_migration'       => 'Criar Migration para esta tabela?',\n    'description'            => 'Descrição',\n    'display_name'           => 'Nome a ser Apresentado',\n    'display_name_plural'    => 'Nome a ser Apresentado (Plural)',\n    'display_name_singular'  => 'Nome a ser Apresentado (Singular)',\n    'edit_rows'              => 'Alterar as linhas para a tabela :table abaixo',\n    'generate_permissions'   => 'Gerar Permissões',\n    'icon_class'             => 'Icon para usar nesta Tabela',\n    'icon_hint'              => 'Icon (opcional) Usar a',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Nome da Classe do Model',\n    'model_name'             => 'Nome do Model',\n    'model_name_ph'          => 'ex. \\App\\User, se vazio irá tentar usar o nome da tabela',\n    'order'                  => 'Ordenar',\n    'order_column'           => 'Ordenar pela coluna',\n    'order_column_ph'        => 'A coluna na qual a ordenação será salva',\n    'order_direction'        => 'Direção da ordenação',\n    'order_ident_column'     => 'Mostrar ordenação pela coluna',\n    'order_ident_column_ph'  => 'A coluna que será exibida na página de ordenação',\n    'ordering_not_set'       => 'Você deve definir primeiro a ordem',\n    'policy_class'           => 'Nome da Classe Policy',\n    'policy_name'            => 'Nome da Policy',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, se vazio irá tentar usar o pré definido',\n    'server_pagination'      => 'Paginação no Servidor',\n    'scope'                  => 'Scope',\n    'soft_deletes_on'        => 'Ver Excluídos',\n    'soft_deletes_off'       => 'Ocultar Excluídos',\n    'url_slug'               => 'URL Slug (único)', //todo find suitable translation\n    'url_slug_ph'            => 'URL slug (ex. posts)', //todo find suitable translation\n    'updated_order'          => 'Ordenação atualizada.',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Bem-vindo à Bússola do Voyager. Todo bom app precisa de uma bússola para mostrar a direção correta.\n    Nessa seção você encontrará muitos recursos e tarefas administativas que o guiará na construção de sua aplicação.',\n    'links'         => [\n        'title'                 => 'Links',\n        'documentation'         => 'Documentação',\n        'voyager_homepage'      => 'Página Inicial do Voyager',\n    ],\n    'commands'      => [\n        'title'                 => 'Comandos',\n        'text'                  => 'Rodar Comandos Artisan a partir do Voyager.',\n        'clear_output'          => 'Limpar saída',\n        'command_output'        => 'Saída do Comando Artisan',\n        'additional_args'       => 'Argumentos Adicionais?',\n        'run_command'           => 'Rodar Comando',\n    ],\n    'resources'     => [\n        'title'                 => 'Recursos',\n        'text'                  => 'Os Recursos Voyager ajudará você encontrar as coisas mais rápido.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Logs',\n        'text'                  => 'Logs de sua aplicação',\n        'file_too_big'          => 'Arquivo de log >50M, por favor faça o Download.',\n        'level'                 => 'Nível',\n        'context'               => 'Contexto',\n        'date'                  => 'Data',\n        'content'               => 'Conteúdo',\n        'download_file'         => 'Baixar arquivo',\n        'delete_file'           => 'Apagar arquivo',\n        'delete_all_files'      => 'Apagar todos os arquivos',\n        'delete_success'        => 'Arquivo de log apagado com sucesso:',\n        'delete_all_success'    => 'Todos arquivos de log apagados com sucesso',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Fontes',\n        'font_class'            => 'Mapa de Classe de Fonte Voyager',\n        'font_character'        => 'Mapa de Caracteres de Fonte Voyager',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Adicionar Nova Coluna',\n    'add_softdeletes'           => 'Adicionar Soft Deletes',\n    'add_timestamps'            => 'Adicionar Timestamps',\n    'already_exists'            => 'Já existe',\n    'already_exists_table'      => 'A Tabela :table já existe',\n    'bread_crud_actions'        => 'Ações BREAD/CRUD',\n    'bread_info'                => 'Informação do BREAD',\n    'browse_bread'              => 'Navegar BREAD',\n    'column'                    => 'Coluna',\n    'composite_warning'         => 'Atenção: esta coluna faz parte de um índice composto',\n    'create_new_table'          => 'Criar tabela',\n    'create_your_new_table'     => 'Crie sua nova tabela',\n    'create_model_table'        => 'Criar model para esta tabela?',\n    'default'                   => 'Pré-definido',\n    'delete_bread_before_table' => 'Por favor, remova o BREAD desta tabela antes de remover a tabela.',\n    'delete_table_confirm'      => 'Sim, remover esta tabela',\n    'delete_table_question'     => 'Tem certeza que deseja remover a tabela :table?',\n    'editing_table'             => 'Editando a tabela :table',\n    'edit_table'                => 'Alterar a tabela :table abaixo',\n    'edit_table_not_exist'      => 'A tabela que pretende remover não existe',\n    'extra'                     => 'Extra',\n    'field'                     => 'Campo',\n    'field_safe_failed'         => 'Erro ao gravar o campo :field, voltando atrás!',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Tipo de Input',\n    'key'                       => 'Key',\n    'name_warning'              => 'Por favor adicione o nome da coluna para criar o index',\n    'no_composites_warning'     => 'Esta tabela tem composite indexes. Nota, eles não são suportados de momento. Tenha atenção ao tentar adicionar/remover indexes.',\n    'null'                      => 'Nulo',\n    'optional_details'          => 'Opções Adicionais',\n    'policy_class'              => 'Nome da classe Policy',\n    'policy_name'               => 'Policy Name', //todo find suitable translation\n    'policy_name_ph'            => 'ex. \\App\\Policies\\UserPolicy, se deixado vazio, tentará usar o padrão',\n    'primary'                   => 'PRIMARY',\n    'success_create_table'      => 'Tabela :table criada com sucesso',\n    'success_delete_table'      => 'Tabela :table removida com sucesso',\n    'success_update_table'      => 'Tabela :table alterada com sucesso',\n    'table_actions'             => 'Ações da Tabela',\n    'table_columns'             => 'Campos da Tabela',\n    'table_has_index'           => 'A tabela já tem um Índice primário.',\n    'table_name'                => 'Nome da Tabela',\n    'table_no_columns'          => 'A tabela não tem colunas...',\n    'type'                      => 'Tipo',\n    'type_not_supported'        => 'Este tipo de campo não é suportado',\n    'unique'                    => 'ÚNICO',\n    'unknown_type'              => 'Tipo Desconhecido',\n    'update_table'              => 'Alterar Tabela',\n    'url_slug'                  => 'URL Slug (único)',\n    'url_slug_ph'               => 'URL slug (ex. posts)',\n    'visibility'                => 'Visibilidade',\n    'relationship'              => [\n        'relationship'         => 'Relacionamento',\n        'relationships'        => 'Relacionamentos',\n        'has_one'              => 'Tem uma',\n        'has_many'             => 'Tem varias',\n        'belongs_to'           => 'Pertence à',\n        'belongs_to_many'      => 'Pertence à vários',\n        'which_column_from'    => 'Qual coluna do',\n        'is_used_to_reference' => 'é usado para referenciar a(o)',\n        'pivot_table'          => 'Tabela pivô',\n        'selection_details'    => 'Selecionar detalhes',\n        'display_the'          => 'Mostrar a(o)',\n        'store_the'            => 'Salvar a(o)',\n        'allow_tagging'        => 'Permitir Tagging', //todo find suitable translation\n        'easy_there'           => 'Cuidado captain',\n        'before_create'        => 'Antes que você possa criar um novo relacionamento, você precisará criar primeiro o BREAD.<br> Depois, volte para editar o BREAD e você poderá adicionar os relacionamentos.<br> Obrigado.',\n        'cancel'               => 'Cancelar',\n        'add_new'              => 'Adicionar novo relacionamento',\n        'open'                 => 'Abrir',\n        'close'                => 'Fechar',\n        'relationship_details' => 'Detalhes dos relacionamentos',\n        'browse'               => 'Navegar',\n        'read'                 => 'Ler',\n        'edit'                 => 'Editar',\n        'add'                  => 'Adicionar',\n        'delete'               => 'Deletar',\n        'create'               => 'Criar um relacionamento',\n        'namespace'            => 'Model Namespace (ex. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Não há registros para apresentar',\n    'sInfo'           => 'Mostrando de _START_ até _END_ de _TOTAL_ registros',\n    'sInfoEmpty'      => 'Mostrando de 0 até 0 de 0 registros',\n    'sInfoFiltered'   => '(filtrado de _MAX_ registros no total)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Mostrar _MENU_ registros',\n    'sLoadingRecords' => 'A Carregar...',\n    'sProcessing'     => 'A processar...',\n    'sSearch'         => 'Procurar:',\n    'sZeroRecords'    => 'Não foram encontrados resultados',\n    'oPaginate'       => [\n        'sFirst'    => 'Primeiro',\n        'sLast'     => 'Último',\n        'sNext'     => 'Seguinte',\n        'sPrevious' => 'Anterior',\n\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': ativar para ordenar de forma crescente',\n        'sSortDescending' => ': ativar para ordenar de forma decrescente',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Semana Passada',\n    'last_year' => 'Ano Passado',\n    'this_week' => 'Esta Semana',\n    'this_year' => 'Este Ano',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'                    => 'Página|Páginas',\n    'page_link_text'          => 'Ver todas as páginas',\n    'page_text'               => 'Tem :count :string no seu banco de dados. Clique no botão abaixo para ver todas as páginas.',\n    'post'                    => 'Publicação|Publicações',\n    'post_link_text'          => 'Ver todas as publicações',\n    'post_text'               => 'Tem :count :string no seu banco de dados. Clique no botão abaixo para ver todas as publicações.',\n    'user'                    => 'Utilizador|Utilizadores',\n    'user_link_text'          => 'Ver todos os utilizadores',\n    'user_text'               => 'Tem :count :string no seu banco de dados. Clique no botão abaixo para ver todos os utilizadores.',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Acabamos de criar o link simbólico (symlink) faltante para você.',\n    'symlink_created_title'  => 'O link simbólico (symlink) de armazenamento faltante foi criado',\n    'symlink_failed_text'    => 'Não conseguimos gerar o link simbólico (symlink) faltante para sua aplicação. Parece que seu provedor de hospedagem não o suporta.',\n    'symlink_failed_title'   => 'Não foi possível criar o link simbólico (symlink) de armazenamento faltante',\n    'symlink_missing_button' => 'Consertá-lo',\n    'symlink_missing_text'   => 'Não foi possível encontrar o link simbólico (symlink) de armazenamento. Isso pode causar problemas ao carregar os arquivos de mídia no navegador.',\n    'symlink_missing_title'  => 'Link simbólico (symlink) de armazenamento faltante.',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Deixar vazio para manter o atual',\n    'field_select_dd_relationship' => 'Certifique-se de configurar o relacionamento apropriado no método :method da classe :class.',\n    'type_checkbox'                => 'Check Box', //todo find suitable translation\n    'type_codeeditor'              => 'Editor de Código',\n    'type_file'                    => 'Arquivo',\n    'type_image'                   => 'Imagem',\n    'type_radiobutton'             => 'Radio Button', //todo find suitable translation\n    'type_richtextbox'             => 'Rich Textbox', //todo find suitable translation\n    'type_selectdropdown'          => 'Selecione Dropdown', //todo find suitable translation\n    'type_textarea'                => 'Text Area', //todo find suitable translation\n    'type_textbox'                 => 'Text Box', //todo find suitable translation\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Ação',\n    'actions'                => 'Ações',\n    'add'                    => 'Adicionar',\n    'add_folder'             => 'Adicionar Pasta',\n    'add_new'                => 'Adicionar',\n    'all_done'               => 'Concluído',\n    'are_you_sure'           => 'Tem certeza',\n    'are_you_sure_delete'    => 'Tem certeza de que deseja remover',\n    'ascending'              => 'Ascendente',\n    'auto_increment'         => 'Incremento automático',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Navegar',\n    'builder'                => 'Construtor',\n    'bulk_delete'            => 'Exclusão em massa',\n    'bulk_delete_confirm'    => 'Sim, exclua estes',\n    'bulk_delete_nothing'    => 'Você não selecionou nada para excluir',\n    'cancel'                 => 'Cancelar',\n    'choose_type'            => 'Escolha o tipo',\n    'click_here'             => 'Clique aqui',\n    'close'                  => 'Fechar',\n    'compass'                => 'Bússola',\n    'created_at'             => 'Criado em',\n    'custom'                 => 'Personalizado',\n    'dashboard'              => 'Painel de Controle',\n    'database'               => 'Banco de dados',\n    'default'                => 'Padrão',\n    'delete'                 => 'Remover',\n    'delete_confirm'         => 'Sim, Remover!',\n    'delete_question'        => 'Tem certeza de que deseja remover isto',\n    'delete_this_confirm'    => 'Sim, exclua isto',\n    'deselect_all'           => 'Desmarcar todos',\n    'descending'             => 'Descendente',\n    'download'               => 'Baixar',\n    'drag_drop_info'         => 'Arraste e solte os itens abaixo para reorganizá-los.',\n    'edit'                   => 'Editar',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Oops, ocorreu um problema ao remover',\n    'error_restoring'        => 'Oops, ocorreu um erro ao restaurar',\n    'exception'              => 'Exceção',\n    'featured'               => 'Destacado',\n    'field_does_not_exist'   => 'O campo não existe',\n    'home'                   => 'Início',\n    'how_to_use'             => 'Como usar',\n    'index'                  => 'Índice',\n    'internal_error'         => 'Erro interno',\n    'items'                  => 'item(s)',\n    'keep_sidebar_open'      => 'Arrrgh! Soltem as âncoras! (e mantenha a barra lateral aberta)',\n    'key'                    => 'Chave',\n    'last_modified'          => 'Última modificação',\n    'length'                 => 'Comprimento',\n    'locale'                 => 'Local',\n    'login'                  => 'Login',\n    'logout'                 => 'Sair',\n    'media'                  => 'Mídia',\n    'menu_builder'           => 'Construtor de Menu',\n    'mimetype_not_allowed'   => 'Essa extensão não é permitida',\n    'move'                   => 'Mover',\n    'name'                   => 'Nome',\n    'new'                    => 'Novo',\n    'no'                     => 'Não',\n    'no_thanks'              => 'Não Obrigado',\n    'none'                   => 'Nenhum',\n    'not_null'               => 'Não Nulo',\n    'no_results'             => 'Sem resultados',\n    'open'                   => 'Abrir',\n    'options'                => 'Opções',\n    'password'               => 'Senha',\n    'permissions'            => 'Permissões',\n    'profile'                => 'Perfil',\n    'public_url'             => 'URL público',\n    'read'                   => 'Ler',\n    'remember_me'            => 'Lembrar-me',\n    'rename'                 => 'Renomear',\n    'required'               => 'Requerido',\n    'return_to_list'         => 'Voltar à lista',\n    'route'                  => 'Rota',\n    'save'                   => 'Guardar',\n    'search'                 => 'Procurar',\n    'select_all'             => 'Selecione Todos',\n    'select_group'           => 'Selecione um grupo existente ou adicione um novo',\n    'settings'               => 'Configurações',\n    'showing_entries'        => 'Mostrando :from a :to de :all entrada|Mostrando :from a :to de :all entradas',\n    'submit'                 => 'Submeter',\n    'successfully_added_new' => 'Adicionado com sucesso',\n    'successfully_deleted'   => 'Removido com sucesso',\n    'successfully_restored'  => 'Restaurado com sucesso',\n    'successfully_updated'   => 'Atualizado com sucesso',\n    'successfully_created'   => 'Criado com sucesso',\n    'sweet_success'          => 'Maravilha!',\n    'timestamp'              => 'Timestamp',\n    'title'                  => 'Título',\n    'type'                   => 'Tipo',\n    'restore'                => 'Restaurar',\n    'unsigned'               => 'Não assinado',\n    'unstick_sidebar'        => 'Descolar a barra lateral',\n    'update'                 => 'Atualizar',\n    'update_failed'          => 'Atualização falhou',\n    'updated_order'          => 'Ordem atualizada',\n    'upload'                 => 'Upload',\n    'url'                    => 'URL',\n    'view'                   => 'Ver',\n    'viewing'                => 'Visualizando',\n    'whoopsie'               => 'Oops!',\n    'yes'                    => 'Sim',\n    'yes_please'             => 'Sim, por favor',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'JSON Inválido',\n    'invalid_message'   => 'Submeteu um JSON inválido.',\n    'valid'             => 'JSON Válido',\n    'validation_errors' => 'Erros de validação',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Iniciando sessão',\n    'signin_below' => 'Iniciar sessão abaixo:',\n    'welcome'      => 'Bem-vindo ao Voyager. O painel de administração que faltava para Laravel',\n    'remember_me'  => 'Lembrar de mim',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Adicionar Pasta',\n    'audio_support'          => 'O seu navegador não suporta o elemento de áudio.',\n    'create_new_folder'      => 'Criar Pasta',\n    'delete_folder_question' => 'Ao remover uma pasta irá também remover todos os arquivos e pastas contidos nela',\n    'delete_question'        => 'Você tem certeza que deseja excluir o(s) seguinte(s) arquivo(s)?',\n    'destination_folder'     => 'Destino da Pasta',\n    'drag_drop_info'         => 'Arraste e solte arquivo ou clique abaixo para carregar',\n    'error_already_exists'   => 'Oops, já existe um arquivo / pasta com esse nome nessa pasta.',\n    'error_creating_dir'     => 'Oops, ocorreu algo inesperado a criar a pasta, por favor verifique as suas permissões',\n    'error_deleting_file'    => 'Oops, ocorreu algo inesperado removendo este arquivo, por favor verifique as suas permissões',\n    'error_deleting_folder'  => 'Oops, ocorreu algo inesperado removendo esta pasta, por favor verifique as suas permissões',\n    'error_may_exist'        => 'Talvez um arquivo ou Pasta exista com esse nome. Por favor tente com outro nome, ou apague o arquivo correspondente.',\n    'error_moving'           => 'Oops, ocorreu um problema ao mover esse arquivo / pasta, verifique as suas permissões.',\n    'error_uploading'        => 'Falha ao Copiar: Ocorreu um erro desconhecido!',\n    'files'                  => '1 arquivo|:count arquivos',\n    'files_more'             => 'E :count mais',\n    'file_does_not_exist'    => 'Arquivo não existe',\n    'file_removed'           => 'Arquivo removido',\n    'files_selected'         => 'Arquivos/pasta removido',\n    'folder_exists_already'  => 'Oops, essa pasta já existe, por favor remova essa pasta se desejar criar uma nova',\n    'image_does_not_exist'   => 'A imagem não existe',\n    'image_removed'          => 'Imagem removida',\n    'library'                => 'Biblioteca de Mídia',\n    'loading'                => 'A CARREGAR OS SEUS ARQUIVOS DE MÍDIA',\n    'max_files_select'       => 'Você só pode selecionar um arquivo|Você pode selecionar no máximo :count arquivos',\n    'min_files_select'       => 'Você deve selecionar ao menos um arquivo|Você deve selecionar ao menos :count arquivos',\n    'move_file_folder'       => 'Mover Arquivo/pasta',\n    'new_file_folder'        => 'Novo Nome do Arquivo/Pasta',\n    'new_folder_name'        => 'Novo Nome da Pasta',\n    'no_files_here'          => 'Não há arquivos aqui.',\n    'no_files_in_folder'     => 'Nenhum arquivo nesta pasta.',\n    'nothing_selected'       => 'Nenhum arquivo ou pasta selecionada',\n    'rename_file_folder'     => 'Renomear Arquivo/Pasta',\n    'success_uploaded_file'  => 'Arquivo carregado com sucesso!',\n    'success_uploading'      => 'Imagem carregada com sucesso!',\n    'success_moved'          => 'Arquivo/pasta movido com sucesso',\n    'success_renamed'        => 'Arquivo/pasta renomeado com sucesso',\n    'uploading_wrong_type'   => 'Falha de envio: Formato do arquivo não suportado ou é muito grande para ser carregado!',\n    'crop'                   => 'Cortar',\n    'crop_and_create'        => 'Cortar & Criar',\n    'crop_override_confirm'  => 'Irá substituir a imagem original, você tem certeza?',\n    'crop_image'             => 'Cortar Imagem',\n    'success_crop_image'     => 'Imagem cortada com sucesso',\n    'height'                 => 'Altura: ',\n    'title'                  => 'Título',\n    'type'                   => 'Tipo',\n    'size'                   => 'Tamanho',\n    'public_url'             => 'URL pública',\n    'last_modified'          => 'Última modificação',\n    'browser_video_support'  => 'Seu navegador não suporta a tag video',\n    'browser_audio_support'  => 'Seu navegador não suporta o elemento audio',\n    'width'                  => 'Largura: ',\n    'add_all_selected'       => 'Adicionar todos os selecionados',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Cor em RGB ou hex (opcional)',\n    'color_ph'             => 'Cor (ex. #ffffff ou rgb(255, 255, 255)',\n    'create_new_item'      => 'Criar um novo item de menu',\n    'delete_item_confirm'  => 'Sim, Remover este item de menu',\n    'delete_item_question' => 'Tem certeza de que deseja remover este item de menu?',\n    'drag_drop_info'       => 'Arraste e solte os itens do menu para os reorganizar.',\n    'dynamic_route'        => 'Rota Dinâmica',\n    'edit_item'            => 'Editar item de menu',\n    'icon_class'           => 'Classe do Ícone da Fonte para o item de menu (Use ',\n    'icon_class2'          => 'Classe da Fonte Voyager</a>)',\n    'icon_class_ph'        => 'Classe do Ícone (opcional)',\n    'item_route'           => 'Rota do item de menu',\n    'item_title'           => 'Título do item de menu',\n    'link_type'            => 'Tipo de link',\n    'new_menu_item'        => 'Novo Item de Menu',\n    'open_in'              => 'Abrir em',\n    'open_new'             => 'Nova Guia/Janela',\n    'open_same'            => 'Mesma Guia/Janela',\n    'route_parameter'      => 'Parâmetros de Rotas (se aplicado)',\n    'static_url'           => 'URL Estático',\n    'successfully_created' => 'Novo item de menu criado com sucesso.',\n    'successfully_deleted' => 'Item de menu removido com sucesso',\n    'successfully_updated' => 'Item de menu atualizado com sucesso.',\n    'updated_order'        => 'Ordem de menu atualizada com sucesso.',\n    'url'                  => 'URL do item de menu',\n    'usage_hint'           => 'Pode apresentar um menu em qualquer lugar no seu site, executando| Pode apresentar este menu em qualquer lugar no seu site, executando',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Campos adicionais',\n    'category'         => 'Categoria da Publicação',\n    'content'          => 'Conteúdo da Publicação',\n    'details'          => 'Detalhes da Publicação',\n    'excerpt'          => 'Excerto <small>Pequena descrição desta publicação</small>',\n    'image'            => 'Publicar imagem',\n    'meta_description' => 'Meta de Descrição',\n    'meta_keywords'    => 'Meta de palavras-chave',\n    'new'              => 'Criar nova publicação',\n    'seo_content'      => 'Conteúdo do SEO',\n    'seo_title'        => 'Título SEO',\n    'slug'             => 'URL slug',\n    'status'           => 'Status da Publicação',\n    'status_draft'     => 'Rascunho',\n    'status_pending'   => 'Pendente',\n    'status_published' => 'Publicados',\n    'title'            => 'Título da publicação',\n    'title_sub'        => 'O título da sua publicação',\n    'update'           => 'Alterar Publicação',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'Avatar',\n    'edit'             => 'Editar o meu perfil',\n    'edit_user'        => 'Editar Utilizador',\n    'password'         => 'Senha',\n    'password_hint'    => 'Deixar vazio para manter o valor atual',\n    'role'             => 'Função',\n    'roles'            => 'Funções',\n    'role_default'     => 'Função Padrão',\n    'roles_additional' => 'Funções Adicionais',\n    'user_role'        => 'Função do Utilizador',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Autor',\n        'avatar'           => 'Avatar',\n        'body'             => 'Corpo',\n        'category'         => 'Categoria',\n        'created_at'       => 'Criado em',\n        'display_name'     => 'Nome a ser apresentado',\n        'email'            => 'E-mail',\n        'excerpt'          => 'Excerto',\n        'featured'         => 'Destaque',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Descrição',\n        'meta_keywords'    => 'Meta Palavra-chave',\n        'name'             => 'Nome',\n        'order'            => 'Ordem',\n        'page_image'       => 'Imagem da Página',\n        'parent'           => 'Parent',\n        'password'         => 'Senha',\n        'post_image'       => 'Imagem da Publicação',\n        'remember_token'   => 'Remember Token', //todo find suitable translation\n        'role'             => 'Função',\n        'seo_title'        => 'SEO Título',\n        'slug'             => 'Slug', //todo find suitable translation\n        'status'           => 'Status',\n        'title'            => 'Título',\n        'updated_at'       => 'Atualizado em',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Categoria',\n            'plural'   => 'Categorias',\n        ],\n        'menu'     => [\n            'singular' => 'Menu',\n            'plural'   => 'Menus',\n        ],\n        'page'     => [\n            'singular' => 'Página',\n            'plural'   => 'Páginas',\n        ],\n        'post'     => [\n            'singular' => 'Publicação',\n            'plural'   => 'Publicações',\n        ],\n        'role'     => [\n            'singular' => 'Função',\n            'plural'   => 'Funções',\n        ],\n        'user'     => [\n            'singular' => 'Usuário',\n            'plural'   => 'usuários',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Categorias',\n        'compass'      => 'Bússola',\n        'dashboard'    => 'Painel Administrativo',\n        'database'     => 'Base de Dados',\n        'media'        => 'Mídia',\n        'menu_builder' => 'Construtor de Menu',\n        'pages'        => 'Páginas',\n        'posts'        => 'Publicações',\n        'roles'        => 'Funções',\n        'settings'     => 'Configurações',\n        'tools'        => 'Ferramentas',\n        'users'        => 'Usuários',\n    ],\n    'roles'      => [\n        'admin' => 'Administrador',\n        'user'  => 'Usuário comum',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Imagem de Background do Ambiente Administrativo',\n            'description'                => 'Descrição do Ambiente Administrativo',\n            'description_value'          => 'Bem-vindo ao Voyager. O Ambiente Administrativo que faltava para Laravel',\n            'google_analytics_client_id' => 'Google Analytics Client ID (used for admin dashboard)',\n            'icon_image'                 => 'Ícone do Ambiente Administrativo',\n            'loader'                     => 'Loader do Ambiente Administrativo',\n            'title'                      => 'Título do Ambiente Administrativo',\n        ],\n        'site'  => [\n            'description'                  => 'Descrição do Site',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Logo do Site',\n            'title'                        => 'Título do Site',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Pode obter o valor de cada configuração em qualquer lugar em seu site, executando',\n    'save'                 => 'Guardar configurações',\n    'new'                  => 'Nova configuração',\n    'help_name'            => 'Nome da configuração ex: Título do Administrador',\n    'help_key'             => 'Chave da configuração ex: title_administrador',\n    'help_option'          => '(opcional, aplica-se apenas a certos tipos, como dropdown ou botão de rádio)',\n    'add_new'              => 'Adicionar configuração',\n    'delete_question'      => 'Tem certeza de que deseja remover a Configuração :setting?',\n    'delete_confirm'       => 'Sim, remover esta configuração',\n    'successfully_created' => 'Configurações criadas com sucesso',\n    'successfully_saved'   => 'Configurações guardadas com sucesso',\n    'successfully_deleted' => 'Configuração removida com sucesso',\n    'already_at_top'       => 'Já chegou ao topo da lista',\n    'already_at_bottom'    => 'Já chegou ao fundo da lista',\n    'key_already_exists'   => 'A chave :key já existe',\n    'moved_order_up'       => 'Configuração :name movida para cima',\n    'moved_order_down'     => 'Configuração :name movida para baixo',\n    'successfully_removed' => 'Valor :name removido com sucesso',\n    'group_general'        => 'Geral',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Site',\n    'group'                => 'Grupo',\n    'help_group'           => 'O grupo desta configuração é atribuído a',\n];\n"
  },
  {
    "path": "publishable/lang/pt_br/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Produzido com <i class=\"voyager-heart\"></i> por',\n    'footer_copyright2' => 'Produzido com rum e mais rum',\n];\n"
  },
  {
    "path": "publishable/lang/ro/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'După pagini',\n    'by_sessions'            => 'După sesiuni',\n    'by_users'               => 'După utilizatori',\n    'no_client_id'           => 'Pentru a vedea statisticile din analytics aveți nevoie de google analytics cliend id pe care să-l adăugați în setări pentru cheia <code>google_analytics_client_id</code>. Puteți obține cheia(analytics cliend id) în contul dvs. Google developers console:',\n    'set_view'               => 'Alegeți modul de vizualizare',\n    'this_vs_last_week'      => 'Săptămâna aceasta în comparație cu săptămâna trecută.',\n    'this_vs_last_year'      => 'Anul acesta în comparație cu anul trecut',\n    'top_browsers'           => 'Top browser-e',\n    'top_countries'          => 'Top țări',\n    'various_visualizations' => 'Vizualizări diverse',\n];\n"
  },
  {
    "path": "publishable/lang/ro/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Add BREAD to this table',\n    'bread_crud_actions'     => 'BREAD/CRUD Actions',\n    'bread_info'             => 'BREAD info',\n    'controller_name_hint'   => 'ex. PageController, if left empty will use the BREAD Controller',\n    'create_bread_for_table' => 'Create BREAD for :table table',\n    'delete_bread'           => 'Delete BREAD',\n    'delete_bread_conf'      => 'Yes, remove the BREAD',\n    'delete_bread_quest'     => 'Are you sure you want to delete the BREAD for the :table table?',\n    'edit_bread'             => 'Edit BREAD',\n    'edit_bread_for_table'   => 'Edit BREAD for :table table',\n    'error_creating_bread'   => 'Sorry it appears there may have been a problem creating this BREAD',\n    'error_removing_bread'   => 'Sorry it appears there was a problem removing this BREAD',\n    'error_updating_bread'   => 'Sorry it appears there may have been a problem updating this BREAD',\n    'error_tagging'          => 'Sorry it appears there may have been a problem creating the record. Please make sure your table has defaults for other fields.',\n    'success_created_bread'  => 'Successfully created new BREAD',\n    'success_remove_bread'   => 'Successfully removed BREAD from :datatype',\n    'success_update_bread'   => 'Successfully updated the :datatype BREAD',\n    'controller_name'        => 'Controller Name',\n    'create_migration'       => 'Create migration for this table?',\n    'description'            => 'Description',\n    'display_name'           => 'Display Name',\n    'display_name_plural'    => 'Display Name (Plural)',\n    'display_name_singular'  => 'Display Name (Singular)',\n    'edit_rows'              => 'Edit the rows for the :table table below',\n    'generate_permissions'   => 'Generate Permissions',\n    'icon_class'             => 'Icon to use for this Table',\n    'icon_hint'              => 'Icon (optional) Use a',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Model Class Name',\n    'model_name'             => 'Model Name',\n    'model_name_ph'          => 'ex. \\App\\User, if left empty will try and use the table name',\n    'order'                  => 'Order',\n    'order_column'           => 'Order column',\n    'order_column_ph'        => 'The column where the order is stored',\n    'order_ident_column'     => 'Order display column',\n    'order_ident_column_ph'  => 'The column which is displayed in the order page',\n    'ordering_not_set'       => 'You have to define ordering first',\n    'policy_class'           => 'Policy Class Name',\n    'policy_name'            => 'Policy Name',\n    'policy_name_ph'         => 'ex. \\App\\Policies\\UserPolicy, if left empty will try and use the default',\n    'server_pagination'      => 'Server-side Pagination',\n    'updated_order'          => 'Order updated successfully',\n    'url_slug'               => 'URL Slug (must be unique)',\n    'url_slug_ph'            => 'URL slug (ex. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/ro/database.php",
    "content": "<?php\n\nreturn [\n    'add_bread'                 => 'Adăugați BREAD la acest tabel',\n    'add_new_column'            => 'Adăugați o coloană nouă',\n    'add_softdeletes'           => 'Adăugați Soft Deletes',\n    'add_timestamps'            => 'Adăugați timestamp-uri',\n    'already_exists'            => 'deja există',\n    'already_exists_table'      => 'Tabelul :table deja există',\n    'bread_crud_actions'        => 'Acțiuni BREAD/CRUD',\n    'bread_info'                => 'Informații despre BREAD',\n    'column'                    => 'Coloană',\n    'composite_warning'         => 'Avertizare: această coloană face parte din indexul compozit',\n    'controller_name'           => 'Numele controller-ului',\n    'controller_name_hint'      => 'ex: PageController, dacă lăsați liber se va folosi BREAD Controller',\n    'create_bread_for_table'    => 'Creare BREAD pentru tabelul :table',\n    'create_migration'          => 'Creare migrare pentru acest tabel?',\n    'create_model_table'        => 'Creare model pentru acest tabel?',\n    'create_new_table'          => 'Creare tabel nou',\n    'create_your_new_table'     => 'Creare tabel nou',\n    'default'                   => 'Prdefinit',\n    'delete_bread'              => 'Șterge BREAD',\n    'delete_bread_before_table' => 'Înainte de a șterge tabelul este necesar să ștergeți BREAD-ul tabelului.',\n    'delete_table_bread_conf'   => 'Da, șterge BREAD',\n    'delete_table_bread_quest'  => 'Sunteți sigur, că doriți să ștergeți BREAD-ul tabelului :table?',\n    'delete_table_confirm'      => 'Da, șterge tabelul',\n    'delete_table_question'     => 'Sunteți sigur că doriți să ștergeți tabelul :table?',\n    'description'               => 'Descriere',\n    'display_name'              => 'Numele afișat',\n    'display_name_plural'       => 'Numele afișat (la plural)',\n    'display_name_singular'     => 'Numele afișat (la singular)',\n    'edit_bread'                => 'Editare BREAD',\n    'edit_bread_for_table'      => 'Editare BREAD pentru tabelul :table',\n    'edit_rows'                 => 'Editați rândurile tabelului :table mai jos',\n    'edit_table'                => 'Editați tabelul :table mai jos',\n    'edit_table_not_exist'      => 'Tabelul pe care doriți să-l editați nu există',\n    'error_creating_bread'      => 'Se pare că a apărut o problemă cu crearea acestui BREAD',\n    'error_removing_bread'      => 'Se pare că a apărut o problemă cu ștergerea acestui BREAD',\n    'error_updating_bread'      => 'Se pare că a apărut o problemă cu actualizarea acestui BREAD',\n    'extra'                     => 'Suplimentar',\n    'field'                     => 'Câmp',\n    'field_safe_failed'         => 'Nu s-a reușit savlarea câmpului :field, ne întoarcem la valoarea precedentă.',\n    'generate_permissions'      => 'Generare permisiuni',\n    'icon_class'                => 'Iconiță pentru acest tabel',\n    'icon_hint'                 => 'Iconiță pentru (opțional)',\n    'icon_hint2'                => 'Voyager Font Class',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Tipul input-ului',\n    'key'                       => 'Cheie',\n    'model_class'               => 'Numele clasei modelului',\n    'model_name'                => 'Numele modelului',\n    'model_name_ph'             => 'ex: \\App\\User, dacă lăsați gol, vom încerca și vom folosi numele tabelului',\n    'name_warning'              => 'Vă rugăm să indicați numele coloanei înainte de adăugarea indexului',\n    'no_composites_warning'     => 'În acest tabel există index compozit. Atrageți atenția că la momentul de față ele nu sunt suportate. Fiți atenți când încercați să adăugați/ștergeți indexuri.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Detalii suplimentare',\n    'policy_class'              => 'Policy Class Name',\n    'policy_name'               => 'Policy Name',\n    'policy_name_ph'            => 'ex. \\App\\Policies\\UserPolicy, dacă lăsați gol, vom încerca și vom folosi predefinit',\n    'primary'                   => 'CHEIE PRIMARĂ',\n    'server_pagination'         => 'Paginare pe server',\n    'success_create_table'      => 'Tabelul :table a fost creat cu succes',\n    'success_created_bread'     => 'BREAD nou a fost creat cu succes',\n    'success_delete_table'      => 'Tabelul :table a fost șters cu succes',\n    'success_remove_bread'      => 'BREAD a fost șters cu succes din :datatype',\n    'success_update_bread'      => 'BREAD a fost actualizat cu succes în :datatype',\n    'success_update_table'      => 'Tabelul :table a fost actualizat cu succes',\n    'table_actions'             => 'Acțiuni cu tabelul',\n    'table_columns'             => 'Coloanele tabelului',\n    'table_has_index'           => 'În acest tabel există deja cheia primară.',\n    'table_name'                => 'Numele tabelului',\n    'table_no_columns'          => 'Acest tabel nu are coloane...',\n    'type'                      => 'Tip',\n    'type_not_supported'        => 'Acest tip nu este suportat',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Tip necunoscut',\n    'update_table'              => 'Actualizare tabel',\n    'url_slug'                  => 'URL Slug (trebuie să fie unic)',\n    'url_slug_ph'               => 'URL slug (ex:, posts)',\n    'visibility'                => 'Vizibilitate',\n    'relationship'              => [\n        'relationship'         => 'Relație',\n        'relationships'        => 'Relații',\n        'has_one'              => 'Unu la unu',\n        'has_many'             => 'Unu la mulți',\n        'belongs_to'           => 'Mulți la unu',\n        'belongs_to_many'      => 'Mulți la mulți',\n        'which_column_from'    => 'Ce coloană din',\n        'is_used_to_reference' => 'este folosită pentru a face referire la',\n        'pivot_table'          => 'Tabel de legătură',\n        'selection_details'    => 'Detaliile selecției',\n        'display_the'          => 'Afișează',\n        'store_the'            => 'Salvează',\n        'easy_there'           => 'Ușor, Căpitane',\n        'before_create'        => 'Înainte de a crea o relație ai nevoie mai întâi să creezi BREAD-ul.<br> Apoi, te întorci înapoi pentru a edita BREAD-ul și atunci vei putea adăuga o relație nouă.<br> Mulțam.',\n        'cancel'               => 'Anulare',\n        'add_new'              => 'Adăugare relație nouă',\n        'open'                 => 'Deschide',\n        'close'                => 'Închide',\n        'relationship_details' => 'Detaliile relației',\n        'browse'               => 'Răsfoiește',\n        'read'                 => 'Citește',\n        'edit'                 => 'Editează',\n        'add'                  => 'Adaugă',\n        'delete'               => 'Șterge',\n        'create'               => 'Crează o Relație',\n        'namespace'            => 'Model Năimspăis (ex: App\\User)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ro/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'În tabel nu există date',\n    'sInfo'           => 'Afișat de la _START_ până la _END_ din _TOTAL_ înregistrări',\n    'sInfoEmpty'      => 'Afișat 0 din 0 înregistrări',\n    'sInfoFiltered'   => '(sortat din _MAX_ înregitrări)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Afișați _MENU_ înregistrări',\n    'sLoadingRecords' => 'Încărcare înregistrări...',\n    'sProcessing'     => 'Așteptați...',\n    'sSearch'         => 'Căutare:',\n    'sZeroRecords'    => 'Lipsesc înregistrări',\n    'oPaginate'       => [\n        'sFirst'    => 'Prima',\n        'sLast'     => 'Ultima',\n        'sNext'     => 'Următoarea',\n        'sPrevious' => 'Precedenta',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': activați pentru a sorta coloana crescător',\n        'sSortDescending' => ': activați pentru a sorta coloana descrescător',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ro/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Săptămâna trecută',\n    'last_year' => 'Anul trecut',\n    'this_week' => 'Săptămâna asta',\n    'this_year' => 'În acest an',\n];\n"
  },
  {
    "path": "publishable/lang/ro/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'pagină|pagini',\n    'page_link_text' => 'Toate paginile',\n    'page_text'      => 'În baza de date există :count :string',\n    'post'           => 'postare|postări',\n    'post_link_text' => 'Toate postările',\n    'post_text'      => 'În baza de date există :count :string',\n    'user'           => 'utilizator|utilizatori',\n    'user_link_text' => 'Toți utilizatorii',\n    'user_text'      => 'În baza de date există :count :string',\n];\n"
  },
  {
    "path": "publishable/lang/ro/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Noi tocmai am creat legătura simbolică(symlink) pentru dvs.',\n    'symlink_created_title'  => 'Legătura simbolică a folderului storage ce lipsea, a fost creată.',\n    'symlink_failed_text'    => 'Nu am putut genera link-ul simbolic ce lipsește pentru aplicația dvs. Se pare că hosting provider-ul dvs. nu suportă symlinks))).',\n    'symlink_failed_title'   => 'Nu am putut crea link-ul simbolic pentru folderul storage.',\n    'symlink_missing_button' => 'Corectați',\n    'symlink_missing_text'   => 'Nu am putut găsi un link simbolic pentru folderul storage. Aceasta poate cauza probleme cu încărcarea fișierelor media de către browser.',\n    'symlink_missing_title'  => 'Lipsește link-ul simbolic pentru folderul storage.',\n];\n"
  },
  {
    "path": "publishable/lang/ro/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Lăsați gol, dacă nu doriți să schimbați parola',\n    'field_select_dd_relationship' => 'Este necesar să setați realțiile (relationship) în metoda :method din clasa :class.',\n    'type_checkbox'                => 'Checkbox',\n    'type_codeeditor'              => 'Editor de cod',\n    'type_file'                    => 'Fișier',\n    'type_image'                   => 'Imagine',\n    'type_radiobutton'             => 'Radio buton',\n    'type_richtextbox'             => 'Edito vizual',\n    'type_selectdropdown'          => 'Listă dropdown',\n    'type_textarea'                => 'Câmp text (textarea)',\n    'type_textbox'                 => 'Câmp text (simplu)',\n];\n"
  },
  {
    "path": "publishable/lang/ro/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Acțiune',\n    'actions'                => 'Acțiuni',\n    'add'                    => 'Adaugă',\n    'add_folder'             => 'Crează folder',\n    'add_new'                => 'Adaugă nou',\n    'all_done'               => 'Gata',\n    'are_you_sure'           => 'Sunteți sigur',\n    'are_you_sure_delete'    => 'Sunteți sigur că doriți să ștergeți',\n    'auto_increment'         => 'Auto incrementare',\n    'browse'                 => 'Răsfoiește',\n    'builder'                => 'Constructor',\n    'bulk_delete'            => 'Șterge tot',\n    'bulk_delete_confirm'    => 'Da, șterge asta',\n    'bulk_delete_nothing'    => 'Nu ați ales nimic pentru ștergere',\n    'cancel'                 => 'Anulare',\n    'choose_type'            => 'Alegeți tipul',\n    'click_here'             => 'Click aici',\n    'close'                  => 'Închide',\n    'compass'                => 'Busolă',\n    'created_at'             => 'Data creării',\n    'custom'                 => 'Personalizat',\n    'dashboard'              => 'Panou de control',\n    'database'               => 'Baza de date',\n    'default'                => 'Prestabilit',\n    'delete'                 => 'Șterge',\n    'delete_confirm'         => 'Da, Șterge',\n    'delete_question'        => 'Sunteți sigur că vreți să ștergeți asta',\n    'delete_this_confirm'    => 'Da, șterge asta',\n    'deselect_all'           => 'Anulează selecția',\n    'download'               => 'Descarcă',\n    'edit'                   => 'Editare',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'A apărut o eroare în timpul ștergerii',\n    'exception'              => 'Excepție',\n    'featured'               => 'Recomandat',\n    'field_does_not_exist'   => 'Câmpul nu există',\n    'how_to_use'             => 'Cum să folosiți',\n    'index'                  => 'Index',\n    'internal_error'         => 'Eroare internă',\n    'items'                  => 'Element(e)',\n    'keep_sidebar_open'      => 'Yarr! Aruncați ancorele! (și ține-ți bara laterală deschisă)',\n    'key'                    => 'Cheie',\n    'last_modified'          => 'Ultima modificare',\n    'length'                 => 'Lungime',\n    'login'                  => 'Login',\n    'media'                  => 'Media',\n    'menu_builder'           => 'Constructor de meniuri',\n    'move'                   => 'Mutare',\n    'name'                   => 'Nume',\n    'new'                    => 'Nou',\n    'no'                     => 'Nu',\n    'no_thanks'              => 'Nu, mulțumesc',\n    'not_null'               => 'Nu-i Null',\n    'no_results'             => 'No results',\n    'options'                => 'Opțiuni',\n    'password'               => 'Parolă',\n    'permissions'            => 'Permisiuni',\n    'profile'                => 'Profil',\n    'public_url'             => 'URL public',\n    'read'                   => 'Citire',\n    'rename'                 => 'Redenumire',\n    'required'               => 'Obligatoriu',\n    'return_to_list'         => 'Întoarcere la listă',\n    'route'                  => 'Traseu',\n    'save'                   => 'Salvare',\n    'search'                 => 'Caută',\n    'select_all'             => 'Selectează tot',\n    'settings'               => 'Setări',\n    'showing_entries'        => 'Publicare afișată de la :from până la :to din :all|Publicări afișate de la :from până la :to din :all',\n    'submit'                 => 'Trimite',\n    'successfully_added_new' => 'Adăugat cu succes',\n    'successfully_deleted'   => 'Șters cu succes',\n    'successfully_updated'   => 'Actualizat cu succes',\n    'timestamp'              => 'Timestamp-ul',\n    'title'                  => 'Titlu',\n    'type'                   => 'Tip',\n    'unsigned'               => 'Nesemnat',\n    'unstick_sidebar'        => 'Desfaceți bara laterală',\n    'update'                 => 'Actualizează',\n    'update_failed'          => 'Actualizare eșuată',\n    'upload'                 => 'Încărcare',\n    'url'                    => 'URL',\n    'view'                   => 'Vedere',\n    'viewing'                => 'Vizualizare',\n    'yes'                    => 'Da',\n    'yes_please'             => 'Da, vă rog',\n];\n"
  },
  {
    "path": "publishable/lang/ro/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'format JSON invalid',\n    'invalid_message'   => 'Ați introdus un format JSON invalid',\n    'valid'             => 'Format JSON corect',\n    'validation_errors' => 'Eroare la verificarea datelor',\n];\n"
  },
  {
    "path": "publishable/lang/ro/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Logare în sistem',\n    'signin_below' => 'Conectați-vă mai jos:',\n    'welcome'      => 'Bine ați venit la Voyager. Panoul de control ce lipsește în Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/ro/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Adaugă un folder nou',\n    'audio_support'          => 'Browser-ul dvs. nu suportă elementul audio.',\n    'create_new_folder'      => 'Crează un folder nou',\n    'delete_folder_question' => 'Ștergerea folderului va duce la ștergerea fișierelor și folderelor ce se află el.',\n    'destination_folder'     => 'Folderul de destinație',\n    'drag_drop_info'         => 'Trageți și aruncați fișiere.',\n    'error_already_exists'   => 'Există deja fișier/folder cu așa nume în acest folder',\n    'error_creating_dir'     => 'Eroare la crearea folderului: verificați permisiunile',\n    'error_deleting_file'    => 'Eroare la ștergerea fișierului: verificați permisiunile',\n    'error_deleting_folder'  => 'Eroare la ștergerea folderului: verificați permisiunile',\n    'error_may_exist'        => 'Există deja un fișier sau un folder cu așa nume: alegeți alt nume sau ștergeți fișierul curent',\n    'error_moving'           => 'Eroare la mutarea fișierului/folderului: verificați permisiunile.',\n    'error_uploading'        => 'Încărcare eșuată: S-a produs o eroare necunoscută',\n    'folder_exists_already'  => 'Folder cu așa nume există deja. Vă rugăm să o ștergeți dacă doriți să creați una cu același nume.',\n    'image_does_not_exist'   => 'Imaginea nu există',\n    'image_removed'          => 'Imagine ștearsă',\n    'library'                => 'Bibliotecă media',\n    'loading'                => 'SE ÎNCARCĂ FIȘIERELE DVS. MEDIA',\n    'move_file_folder'       => 'Mutare fișier/folder',\n    'new_file_folder'        => 'Nume nou fișier/folder',\n    'new_folder_name'        => 'Nume nou folder',\n    'no_files_here'          => 'Aici nu există fișiere',\n    'no_files_in_folder'     => 'În acest folder nu există fișiere',\n    'nothing_selected'       => 'Nimic selectat',\n    'rename_file_folder'     => 'Redenumire fișier/folder',\n    'success_uploaded_file'  => 'Încărcarea fișierului a avut loc cu succes',\n    'success_uploading'      => 'Încărcarea imaginii a avut loc cu succes',\n    'uploading_wrong_type'   => 'Încărcare eșuată: formatul fișierului nu este suportat sau fișierul este prea mare pentru a fi încărcat!',\n    'video_support'          => 'Browser-ul dvs. nu suportă elementul video.',\n    'add_all_selected'       => 'Adăugați toate selectate',\n];\n"
  },
  {
    "path": "publishable/lang/ro/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Culoarea în RGB sau hex (opțional)',\n    'color_ph'             => 'Culoarea (ex: #ffffff sau rgb(255, 255, 255)',\n    'create_new_item'      => 'Crează un punct de meniu nou',\n    'delete_item_confirm'  => 'Da, șterge acest punct de meniu',\n    'delete_item_question' => 'Sunteți sigur, că doriți să ștergeți acest punct de meniu?',\n    'drag_drop_info'       => 'Trageți punctul din meniu mai jos, pentru a schimba ordinea lor.',\n    'dynamic_route'        => 'Cale(route) dinamică',\n    'edit_item'            => 'Editează punct de meniu',\n    'icon_class'           => 'Iconiță pentru punctul de meniu (Folosiți ',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Iconiță (opțional)',\n    'item_route'           => 'Calea pentru punctul de meniu',\n    'item_title'           => 'Denumirea punctului de meniu',\n    'link_type'            => 'Tipul link-ului',\n    'new_menu_item'        => 'Punct de meniu nou',\n    'open_in'              => 'Deschide în',\n    'open_new'             => 'Fereastră/Tab nou',\n    'open_same'            => 'aceeași fereastră/tab',\n    'route_parameter'      => 'Parametrii rutei (dacă există)',\n    'static_url'           => 'URL Static',\n    'successfully_created' => 'Punctul de meniu a fost creat cu succes.',\n    'successfully_deleted' => 'Punctul de meniu a fost șters cu succes.',\n    'successfully_updated' => 'Punctul de meniu a fost actualizat cu succes.',\n    'updated_order'        => 'Structura meniului a fost actualizată cu succes.',\n    'url'                  => 'URL pentru punctul de meniu',\n    'usage_hint'           => 'Puteți afișa un meniu oriunde pe site apelând|Puteți afișa acest meniu oriunde pe site apelând',\n];\n"
  },
  {
    "path": "publishable/lang/ro/post.php",
    "content": "<?php\n\nreturn [\n    'category'         => 'Categoria postării',\n    'content'          => 'Conținutul postării',\n    'details'          => 'Detaliile postării',\n    'excerpt'          => 'Extras <small>Descrierea scurtă a postării</small>',\n    'image'            => 'Imagine',\n    'meta_description' => 'Descriere meta',\n    'meta_keywords'    => 'Cuvinte cheie',\n    'new'              => 'Creați o postare nouă',\n    'seo_content'      => 'Conținut SEO',\n    'seo_title'        => 'Titlu SEO',\n    'slug'             => 'slug(link)',\n    'status'           => 'Starea postării',\n    'status_draft'     => 'Ciornă',\n    'status_pending'   => 'În așteptare',\n    'status_published' => 'Publicat',\n    'title'            => 'Titlu',\n    'title_sub'        => 'Titlul postării',\n    'update'           => 'Actualizarea postării',\n];\n"
  },
  {
    "path": "publishable/lang/ro/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => 'Poza',\n    'edit'          => 'Editează profilul',\n    'edit_user'     => 'Editează utilizatorul',\n    'password'      => 'Parola',\n    'password_hint' => 'Lăsați gol pentru a păstra aceeași',\n    'role'          => 'Rol',\n    'user_role'     => 'Rolul utilizatorului',\n];\n"
  },
  {
    "path": "publishable/lang/ro/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Puteți folosi valoarea fiecărei setări, oriunde pe site apelând',\n    'save'                 => 'Salvează setările',\n    'new'                  => 'Setare nouă',\n    'help_name'            => 'Numele setării (ex: Titlu Admin)',\n    'help_key'             => 'Cheia setării (ex: admin_title)',\n    'help_option'          => '(opțional, se aplică doar la unele tipuri, cum ar fi dropdown sau buton radio)',\n    'add_new'              => 'Adăugați setare nouă',\n    'delete_question'      => 'Sunteți sigur că doriți să ștergeți setarea :setting?',\n    'delete_confirm'       => 'Da, șterge această setare',\n    'successfully_created' => 'Setare creată cu succes',\n    'successfully_saved'   => 'Setare salvată cu succes',\n    'successfully_deleted' => 'Setare ștearsă cu succes',\n    'already_at_top'       => 'Deja este prima în listă',\n    'already_at_bottom'    => 'Deja este ultima în listă',\n    'moved_order_up'       => 'Setarea :name a fost mutată mai sus',\n    'moved_order_down'     => 'Setarea :name a fost mutată mai jos',\n    'successfully_removed' => 'Valoarea :name a fost ștearsă cu succes',\n    'group_general'        => 'General',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Site',\n    'group'                => 'Grup',\n    'help_group'           => 'Atașați această setare la grupul',\n];\n"
  },
  {
    "path": "publishable/lang/ro/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Creat cu <i class=\"voyager-heart\"></i> ',\n    'footer_copyright2' => 'Creat cu rom și chiar mai mult rom :) ',\n];\n"
  },
  {
    "path": "publishable/lang/ru/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'По страницам',\n    'by_sessions'            => 'По сессиям',\n    'by_users'               => 'По пользователям',\n    'no_client_id'           => 'Для активации аналитики необходимо получить идентификатор клиента Google Analytics и добавить его в поле <code>google_analytics_client_id</code> меню настроек. Получить код Google Analytics: ',\n    'set_view'               => 'Выберите вид',\n    'this_vs_last_week'      => 'Текущая неделя в сравнении с прошлой.',\n    'this_vs_last_year'      => 'Нынешний год в сравнении с прошлым',\n    'top_browsers'           => 'Лучшие браузеры',\n    'top_countries'          => 'Лучшие страны',\n    'various_visualizations' => 'Различные визуализации',\n];\n"
  },
  {
    "path": "publishable/lang/ru/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Добавить BREAD к данной таблице',\n    'bread_crud_actions'     => 'BREAD/CRUD действия',\n    'bread_info'             => 'BREAD информация',\n    'controller_name_hint'   => 'например, пустой PageController,  будет использовать BREAD Controller',\n    'create_bread_for_table' => 'Создать BREAD для таблицы :table',\n    'default_search_key'     => 'Поле server-side поиска по умолчанию',\n    'default_search_key_ph'  => 'Это поле будет изначально выбрано для поиска на стороне сервера',\n    'delete_bread'           => 'Удалить BREAD',\n    'delete_bread_conf'      => 'Да, удалить BREAD',\n    'delete_bread_quest'     => 'Вы уверены, что хотите удалить BREAD для таблицы :table?',\n    'edit_bread'             => 'Редактировать BREAD',\n    'edit_bread_for_table'   => 'Редактировать BREAD для таблицы :table',\n    'error_creating_bread'   => 'Похоже, возникла проблема с созданием данного BREAD',\n    'error_removing_bread'   => 'Похоже, возникла проблема с удалением данного BREAD',\n    'error_updating_bread'   => 'Похоже, возникла проблема с обновлением данного BREAD',\n    'error_tagging'          => 'Похоже, что возникла проблема с созданием записи. Убедитесь, что таблица имеет значения по умолчанию для других полей.',\n    'success_created_bread'  => 'Новый BREAD успешно создан',\n    'success_remove_bread'   => 'BREAD успешно удален из :datatype',\n    'success_update_bread'   => 'BREAD успешно обновлен в :datatype',\n    'controller_name'        => 'Имя контроллера',\n    'create_migration'       => 'Создать миграцию для данной таблицы?',\n    'description'            => 'Описание',\n    'display_name'           => 'Отображаемое имя',\n    'display_name_plural'    => 'Отображаемое имя (во множественном числе)',\n    'display_name_singular'  => 'Отображаемое имя (в единственном числе)',\n    'edit_rows'              => 'Редактировать строки таблицы :table ниже',\n    'generate_permissions'   => 'Создание прав доступа',\n    'icon_class'             => 'Значок для данной таблицы',\n    'icon_hint'              => 'Значок для (необязательно)',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Название класса модели',\n    'model_name'             => 'Название модели',\n    'model_name_ph'          => 'например \\App\\User, если оставить пустым - попытается использовать название таблицы',\n    'order'                  => 'Сортировка',\n    'order_column'           => 'Столбец сортировки',\n    'order_column_ph'        => 'Столбец, в котором хранится сортировка',\n    'order_direction'        => 'Направление сортировки',\n    'order_ident_column'     => 'Отображаемый столбец сортировки',\n    'order_ident_column_ph'  => 'Столбец, отображаемый на странице сортировки',\n    'ordering_not_set'       => 'Сначала нужно определить порядок сортировки',\n    'policy_class'           => 'Имя класса политики',\n    'policy_name'            => 'Политика',\n    'policy_name_ph'         => 'например \\App\\Policies\\UserPolicy, если оставить пустым - попытается использовать политику по умолчанию',\n    'server_pagination'      => 'Пагинация на стороне сервера',\n    'scope'                  => 'Scope',\n    'soft_deletes_on'        => 'Показать Удаленные',\n    'soft_deletes_off'       => 'Спрятать Удаленные',\n    'updated_order'          => 'Сортировка обновлена успешно',\n    'url_slug'               => 'URL Slug (должен быть уникальным)',\n    'url_slug_ph'            => 'URL slug (например, posts)',\n];\n"
  },
  {
    "path": "publishable/lang/ru/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Добро пожаловать в Voyager Compass. Каждое хорошее приложение нуждается в компасе, чтобы указать им в правильном направлении.\n     В этом разделе вы найдете много ресурсов и административных задач, которые помогут вам в создании вашего приложения.',\n    'links'         => [\n        'title'                 => 'Ссылки',\n        'documentation'         => 'Документация',\n        'voyager_homepage'      => 'Страница Voyager',\n    ],\n    'commands'      => [\n        'title'                 => 'Команды',\n        'text'                  => 'Запустите команду Artisan от Voyager.',\n        'clear_output'          => 'clear output',\n        'command_output'        => 'Выход команды Artisan',\n        'additional_args'       => 'Дополнительные аргументы?',\n        'run_command'           => 'Запустить команду',\n    ],\n    'resources'     => [\n        'title'                 => 'Ресурсы',\n        'text'                  => 'Ресурсы Voyager, которые помогут вам найти вещи быстрее.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Логи',\n        'text'                  => 'Логи приложения',\n        'file_too_big'          => 'Файл логов >50M, пожалуйста скачайте его.',\n        'level'                 => 'Уровень',\n        'context'               => 'Контекст',\n        'date'                  => 'Дата',\n        'content'               => 'Содержание',\n        'download_file'         => 'Скачать файл',\n        'delete_file'           => 'Удалить файл',\n        'delete_all_files'      => 'Удалить все файлы',\n        'delete_success'        => 'Успешно удален файл логов:',\n        'delete_all_success'    => 'Успешно удалены все лог файлы',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Шрифты',\n        'font_class'            => 'Карта классов шрифта Voyager',\n        'font_character'        => 'Карта символов шрифта Voyager',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ru/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Добавить новый столбец',\n    'add_softdeletes'           => 'Добавить Soft Deletes',\n    'add_timestamps'            => 'Добавить метки времени',\n    'already_exists'            => 'уже существует',\n    'already_exists_table'      => 'Таблица :table уже существует',\n    'bread_crud_actions'        => 'Действие с BREAD/CRUD',\n    'bread_info'                => 'Информация о BREAD',\n    'browse_bread'              => 'Просмотр',\n    'column'                    => 'Столбец',\n    'composite_warning'         => 'Предупреждение: этот столбец является частью составного индекса',\n    'create_new_table'          => 'Создать новую таблицу',\n    'create_your_new_table'     => 'Создать новую таблицу',\n    'create_model_table'        => 'Создать модель для этой таблицы?',\n    'default'                   => 'По умолчанию',\n    'delete_bread_before_table' => 'Перед удалением таблицы обязательно удалите BREAD таблицы.',\n    'delete_table_confirm'      => 'Да, удалить таблицу',\n    'delete_table_question'     => 'Вы точно хотите удалить таблицу :table?',\n    'editing_table'             => 'Редактирование таблицы :table',\n    'edit_table'                => 'Редактировать таблицу :table ниже',\n    'edit_table_not_exist'      => 'Таблицы, которую вы хотите редактировать, не существует',\n    'extra'                     => 'Дополнительно',\n    'field'                     => 'Поле',\n    'field_safe_failed'         => 'Не удалось сохранить поле :field, будет произведен откат к предыдущему значению.',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Тип ввода',\n    'key'                       => 'Ключ',\n    'name_warning'              => 'Укажите столбец перед добавлением индекса',\n    'no_composites_warning'     => 'В данной таблице присутствует составной индекс. Обратите внимание, что в настоящий момент они не поддерживаются. Будьте осторожны при попытке добавить/удалить индексы.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Дополнительные сведения',\n    'policy_class'              => 'Имя класса Policy',\n    'policy_name'               => 'Имя Policy',\n    'policy_name_ph'            => 'например \\App\\Policies\\UserPolicy, если оставить пустым, попробуйте использовать значение по умолчанию',\n    'primary'                   => 'ПЕРВИЧНЫЙ КЛЮЧ',\n    'server_pagination'         => 'Пагинация на стороне сервера',\n    'success_create_table'      => 'Таблица :table успешно создана',\n    'success_created_bread'     => 'Успешно создан новый BREAD',\n    'success_delete_table'      => 'Таблица :table успешно удалена',\n    'success_remove_bread'      => 'Успешно удален BREAD из :datatype',\n    'success_update_bread'      => 'Успешно обновлен BREAD для :datatype',\n    'success_update_table'      => 'Таблица :table успешно обновлена',\n    'table_actions'             => 'Действия с таблицей',\n    'table_columns'             => 'Столбцы таблицы',\n    'table_has_index'           => 'В данной таблице уже имеется первичный ключ.',\n    'table_name'                => 'Название таблицы',\n    'table_no_columns'          => 'В таблице отсутствуют столбцы...',\n    'type'                      => 'Тип',\n    'type_not_supported'        => 'Данный тип не поддерживается',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Неизвестный тип',\n    'update_table'              => 'Обновить таблицу',\n    'url_slug'                  => 'URL Slug (должен быть уникален)',\n    'url_slug_ph'               => 'URL slug (например posts)',\n    'visibility'                => 'Видимость',\n    'relationship'              => [\n        'relationship'         => 'Отношение',\n        'relationships'        => 'Отношения',\n        'has_one'              => 'Один к одному',\n        'has_many'             => 'Один ко многим',\n        'belongs_to'           => 'Многие к одному',\n        'belongs_to_many'      => 'Многие ко многим',\n        'which_column_from'    => 'Какой столбец из',\n        'is_used_to_reference' => 'используется для ссылки на',\n        'pivot_table'          => 'Сводная таблица',\n        'selection_details'    => 'Информация о выборе',\n        'display_the'          => 'Отобразить из',\n        'store_the'            => 'Хранить',\n        'allow_tagging'        => 'Разрешить тегирование',\n        'easy_there'           => 'Это легко, Капитан',\n        'before_create'        => 'Прежде чем вы сможете создать новые отношения, вам нужно сначала создать BREAD.<br> Затем вернитесь назад, чтобы отредактировать BREAD, и вы сможете добавлять отношения.<br> Спасибо.',\n        'cancel'               => 'Отмена',\n        'add_new'              => 'Добавить новое отношение',\n        'open'                 => 'Открыть',\n        'close'                => 'Закрыть',\n        'relationship_details' => 'Детали отношений',\n        'browse'               => 'Просмотреть',\n        'read'                 => 'Прочитать',\n        'edit'                 => 'Редактировать',\n        'add'                  => 'Добавить',\n        'delete'               => 'Удалить',\n        'create'               => 'Создать отношение',\n        'namespace'            => 'Модель пространства имен (например App\\Category)',\n    ],\n\n];\n"
  },
  {
    "path": "publishable/lang/ru/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'В таблице нет данных',\n    'sInfo'           => 'Показано от _START_ до _END_ из _TOTAL_ записей',\n    'sInfoEmpty'      => 'Показано 0 из 0 записей',\n    'sInfoFiltered'   => '(выбрано из _MAX_ записей)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Показать _MENU_ записей',\n    'sLoadingRecords' => 'Загрузка записей...',\n    'sProcessing'     => 'Подождите...',\n    'sSearch'         => 'Поиск:',\n    'sZeroRecords'    => 'Записи отсутствуют',\n    'oPaginate'       => [\n        'sFirst'    => 'Первая',\n        'sLast'     => 'Последняя',\n        'sNext'     => 'Следующая',\n        'sPrevious' => 'Предыдущая',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': активировать для сортировки столбца по возрастанию',\n        'sSortDescending' => ': активировать для сортировки столбца по убыванию',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ru/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'На прошлой неделе',\n    'last_year' => 'В прошлом году',\n    'this_week' => 'На этой неделе',\n    'this_year' => 'В этом году',\n];\n"
  },
  {
    "path": "publishable/lang/ru/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'страница|страницы',\n    'page_link_text' => 'Все страницы',\n    'page_text'      => 'В базе данных :count :string',\n    'post'           => 'запись|записи',\n    'post_link_text' => 'Все записи',\n    'post_text'      => 'В базе данных :count :string',\n    'user'           => 'пользователь|пользователей',\n    'user_link_text' => 'Все пользователи',\n    'user_text'      => 'В базе данных :count :string',\n];\n"
  },
  {
    "path": "publishable/lang/ru/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Мы создали ссылку для вас.',\n    'symlink_created_title'  => 'Создана недостающая ссылка на хранилище данных.',\n    'symlink_failed_text'    => 'Не удалось создать недостающую ссылку: похоже, дело в хостинге.',\n    'symlink_failed_title'   => 'Не удалось создать ссылку для хранилища данных.',\n    'symlink_missing_button' => 'Исправьте',\n    'symlink_missing_text'   => 'Не найдена ссылка на хранилище данных: это может вызвать проблемы с загрузкой медиафайлов.',\n    'symlink_missing_title'  => 'Отсутствует ссылка на хранилище данных.',\n];\n"
  },
  {
    "path": "publishable/lang/ru/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Оставьте пустым, если не хотите менять пароль',\n    'field_select_dd_relationship' => 'Обязательно настройте соответствующие отношения (relationship) в методе :method класса :class.',\n    'type_checkbox'                => 'Флажок',\n    'type_codeeditor'              => 'Редактор кода',\n    'type_file'                    => 'Файл',\n    'type_image'                   => 'Изображение',\n    'type_radiobutton'             => 'Радио-кнопка',\n    'type_richtextbox'             => 'Визуальный редактор',\n    'type_selectdropdown'          => 'Выпадающий список',\n    'type_textarea'                => 'Многострочный текст',\n    'type_textbox'                 => 'Однострочный текст',\n];\n"
  },
  {
    "path": "publishable/lang/ru/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Действие',\n    'actions'                => 'Доступные действия',\n    'add'                    => 'Добавить',\n    'add_folder'             => 'Создать папку',\n    'add_new'                => 'Добавить',\n    'all_done'               => 'Готово',\n    'are_you_sure'           => 'Вы уверены',\n    'are_you_sure_delete'    => 'Вы точно хотите удалить',\n    'ascending'              => 'По возрастанию',\n    'auto_increment'         => 'Auto Increment',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Просмотр',\n    'builder'                => 'Конструктор',\n    'bulk_delete'            => 'Удалить выбранное',\n    'bulk_delete_confirm'    => 'Да, удалить это',\n    'bulk_delete_nothing'    => 'Вы ничего не выбрали для удаления!',\n    'cancel'                 => 'Отмена',\n    'choose_type'            => 'Выберите тип поля',\n    'click_here'             => 'Кликните тут',\n    'close'                  => 'Закрыть',\n    'compass'                => 'Документация',\n    'created_at'             => 'Дата создания',\n    'custom'                 => 'Пользовательская категория',\n    'dashboard'              => 'Панель управления',\n    'database'               => 'База данных',\n    'default'                => 'По умолчанию',\n    'delete'                 => 'Удалить',\n    'delete_confirm'         => 'Да, удалить!',\n    'delete_question'        => 'Вы действительно хотите удалить это?',\n    'delete_this_confirm'    => 'Да, удалить это',\n    'descending'             => 'По убыванию',\n    'deselect_all'           => 'Отменить выделение',\n    'download'               => 'Загрузка',\n    'drag_drop_info'         => 'Поменяйте местами элементы, чтобы изменить сортировку',\n    'edit'                   => 'Изменить',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Извините, при удалении возникла ошибка',\n    'error_restoring'        => 'Извините, при восстановлении возникла ошибка',\n    'exception'              => 'Исключение',\n    'featured'               => 'Рекомендуемый',\n    'field_does_not_exist'   => 'Поля не существует',\n    'home'                   => 'Главная',\n    'how_to_use'             => 'Как использовать',\n    'index'                  => 'Индекс',\n    'internal_error'         => 'Внутренняя ошибка',\n    'items'                  => 'элемент(ы)',\n    'keep_sidebar_open'      => 'Раскрывать панель',\n    'key'                    => 'Ключ',\n    'last_modified'          => 'Последнее изменение',\n    'length'                 => 'Длина',\n    'locale'                 => 'Локаль',\n    'login'                  => 'Войти',\n    'logout'                 => 'Выход',\n    'media'                  => 'Медиа',\n    'menu_builder'           => 'Конструктор меню',\n    'mimetype_not_allowed'   => 'Этот тип данных запрещён',\n    'move'                   => 'Переместить',\n    'name'                   => 'Имя',\n    'new'                    => 'Новинка',\n    'no'                     => 'Нет',\n    'no_thanks'              => 'Нет, спасибо',\n    'none'                   => 'Отсутствует',\n    'not_null'               => 'Не Null',\n    'no_results'             => 'Нет данных',\n    'open'                   => 'Открыть',\n    'options'                => 'Параметры',\n    'password'               => 'Пароль',\n    'permissions'            => 'Права доступа',\n    'profile'                => 'Профиль',\n    'public_url'             => 'Общедоступный URL-адрес',\n    'read'                   => 'Считывание',\n    'rename'                 => 'Переименовать',\n    'remember_me'            => 'Запомнить меня',\n    'required'               => 'Обязательный',\n    'return_to_list'         => 'Вернуться к списку',\n    'route'                  => 'Маршрут',\n    'save'                   => 'Сохранить',\n    'search'                 => 'Искать',\n    'select_all'             => 'Выбрать все',\n    'select_group'           => 'Выберите существующую группу или добавьте новую',\n    'settings'               => 'Настройки',\n    'showing_entries'        => 'Показана от :from до :to из :all запись|Показано от :from до :to из :all записей',\n    'submit'                 => 'Отправить',\n    'successfully_added_new' => 'Успешное добавление',\n    'successfully_deleted'   => 'Успешное удаление',\n    'successfully_restored'  => 'Успешное восстановление',\n    'successfully_updated'   => 'Успешное обновление',\n    'successfully_created'   => 'Успешно создано',\n    'sweet_success'          => 'Успешно!',\n    'timestamp'              => 'Временная метка',\n    'title'                  => 'Название',\n    'type'                   => 'Тип',\n    'restore'                => 'Восстановить',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'Открепить боковую панель',\n    'update'                 => 'Обновить',\n    'update_failed'          => 'Обновление не удалось',\n    'updated_order'          => 'Сортировка обновлена',\n    'upload'                 => 'Загрузка',\n    'url'                    => 'URL',\n    'view'                   => 'Просмотр',\n    'viewing'                => 'Просмотр',\n    'whoopsie'               => 'Ой!',\n    'yes'                    => 'Да',\n    'yes_please'             => 'Да, пожалуйста',\n];\n"
  },
  {
    "path": "publishable/lang/ru/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'неверный формат JSON',\n    'invalid_message'   => 'Введен неверный формат JSON',\n    'valid'             => 'Верный формат JSON',\n    'validation_errors' => 'Ошибки при проверке данных',\n];\n"
  },
  {
    "path": "publishable/lang/ru/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Вход в систему',\n    'signin_below' => 'Вход в панель управления',\n    'welcome'      => 'Панель управления, которой не хватало в Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/ru/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Добавить новую папку',\n    'audio_support'          => 'Ваш браузер не поддерживает элемент audio.',\n    'create_new_folder'      => 'Создать новую папку',\n    'delete_folder_question' => 'Удаление папки приведет к удалению всего ее содержимого.',\n    'delete_question'        => 'Вы уверены, что хотите удалить эти файлы?',\n    'destination_folder'     => 'Папка назначения',\n    'drag_drop_info'         => 'Перетащите файлы мышью или нажмите на кнопку внизу для загрузки.',\n    'error_already_exists'   => 'Файл/папка с таким именем уже существуют в данном каталоге',\n    'error_creating_dir'     => 'Не удалось создать папку: проверьте права доступа',\n    'error_deleting_file'    => 'Не удалось удалить файл: проверьте права доступа',\n    'error_deleting_folder'  => 'Не удалось удалить папку: проверьте права доступа',\n    'error_may_exist'        => 'Файл или папка с таким именем уже существуют: выберите другое имя или удалите существующий файл!',\n    'error_moving'           => 'Не удалось переместить файл или папку: проверьте права доступа.',\n    'error_uploading'        => 'Ошибка загрузки: Произошла неизвестная ошибка!',\n    'files'                  => '1 файл|:count файлов',\n    'files_more'             => 'И еще :count',\n    'file_does_not_exist'    => 'Файла не существует',\n    'file_removed'           => 'Файл удалён',\n    'files_selected'         => 'файлы/папка выбраны',\n    'folder_exists_already'  => 'Папка с таким именем уже существует: удалите ее, если хотите создать новую с таким же именем.',\n    'image_does_not_exist'   => 'Изображения не существует',\n    'image_removed'          => 'Изображение удалено',\n    'library'                => 'Библиотека медиа',\n    'loading'                => 'ИДЕТ ЗАГРУЗКА ВАШИХ ФАЙЛОВ',\n    'max_files_select'       => 'Вы может выбрать только один файл|Вы может выбрать максимум :count файлов',\n    'min_files_select'       => 'Вы должны выбрать хотя бы один файл|Вы должны выбрать не менее :count файлов',\n    'move_file_folder'       => 'Переместить файл/папку',\n    'new_file_folder'        => 'Новое имя файла/папки',\n    'new_folder_name'        => 'Новое имя папки',\n    'no_files_here'          => 'Тут нет файлов',\n    'no_files_in_folder'     => 'Отсутствуют файлы в данной папке',\n    'nothing_selected'       => 'Ничего не выбрано',\n    'rename_file_folder'     => 'Переименовать файл/папку',\n    'success_uploaded_file'  => 'Успешная загрузка файла!',\n    'success_uploading'      => 'Успешная загрузка изображения!',\n    'success_moved'          => 'Успешно перемещены файл/папка',\n    'success_renamed'        => 'Успешно переименованы файл/папка',\n    'uploading_wrong_type'   => 'Ошибка загрузки: неподдерживаемый формат файла или слишком большой размер файла для загрузки!',\n    'crop'                   => 'Обрезать',\n    'crop_and_create'        => 'Создать и Обрезать',\n    'crop_override_confirm'  => 'Исходное изображение будет изменено, вы уверены?',\n    'crop_image'             => 'Обрезать изображение',\n    'success_crop_image'     => 'Изображение успешно обрезано',\n    'height'                 => 'Высота: ',\n    'title'                  => 'Название',\n    'type'                   => 'Тип',\n    'size'                   => 'Размер',\n    'public_url'             => 'Публичная ссылка URL',\n    'last_modified'          => 'Последнее изменение',\n    'browser_video_support'  => 'Ваш браузер не поддерживает видео тег.',\n    'browser_audio_support'  => 'Ваш браузер не поддерживает аудио элементы.',\n    'width'                  => 'Ширина: ',\n    'add_all_selected'       => 'Добавить все выбранные',\n];\n"
  },
  {
    "path": "publishable/lang/ru/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Цвет в RGB или hex (необязательно)',\n    'color_ph'             => 'Цвет (например, #ffffff или rgb(255, 255, 255)',\n    'create_new_item'      => 'Создать новый пункт меню',\n    'delete_item_confirm'  => 'Да, удалить этот пункт меню',\n    'delete_item_question' => 'Вы уверены, что хотите удалить этот пункт меню?',\n    'drag_drop_info'       => 'Перетащите пункты меню ниже, чтобы изменить их порядок.',\n    'dynamic_route'        => 'Динамический путь',\n    'edit_item'            => 'Редактировать пункт меню',\n    'icon_class'           => 'Иконка для пункта меню (Используйте ',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Иконка (необязательно)',\n    'item_route'           => 'Путь для пункта меню',\n    'item_title'           => 'Название пункта меню',\n    'link_type'            => 'Тип ссылки',\n    'new_menu_item'        => 'Новый пункт меню',\n    'open_in'              => 'Открыть в',\n    'open_new'             => 'Новая вкладка/окно',\n    'open_same'            => 'Та же вкладка/окно',\n    'route_parameter'      => 'Параметры пути (если есть)',\n    'static_url'           => 'Статический URL',\n    'successfully_created' => 'Пункт меню успешно создан.',\n    'successfully_deleted' => 'Пункт меню успешно удален.',\n    'successfully_updated' => 'Пункт меню успешно обновлен.',\n    'updated_order'        => 'Структура меню успешно обновлена.',\n    'url'                  => 'URL для пункта меню',\n    'usage_hint'           => 'Вы можете вывести меню в любом месте вашего сайта, вызвав |Вы можете вывести это меню в любом месте вашего сайта, вызвав ',\n];\n"
  },
  {
    "path": "publishable/lang/ru/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Дополнительные поля',\n    'category'         => 'Категория статьи',\n    'content'          => 'Текст статьи',\n    'details'          => 'Свойства',\n    'excerpt'          => 'Анонс <small>Краткое описание статьи</small>',\n    'image'            => 'Изображение',\n    'meta_description' => 'Описание (meta)',\n    'meta_keywords'    => 'Ключевые слова (meta)',\n    'new'              => 'Опубликовать',\n    'seo_content'      => 'SEO текст',\n    'seo_title'        => 'SEO название',\n    'slug'             => 'Ссылка',\n    'status'           => 'Статус публикации',\n    'status_draft'     => 'Черновик',\n    'status_pending'   => 'На модерации',\n    'status_published' => 'Опубликовано',\n    'title'            => 'Заголовок',\n    'title_sub'        => 'Название статьи',\n    'update'           => 'Обновить',\n];\n"
  },
  {
    "path": "publishable/lang/ru/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'Фото',\n    'edit'             => 'Настройки профиля',\n    'edit_user'        => 'Изменить профиль',\n    'password'         => 'Пароль',\n    'password_hint'    => 'Для сохранения того же значения оставьте поле пустым',\n    'role'             => 'Группа',\n    'roles'            => 'Роли',\n    'role_default'     => 'Роль по умолчанию',\n    'roles_additional' => 'Дополнительные роли',\n    'user_role'        => 'Группа пользователя',\n];\n"
  },
  {
    "path": "publishable/lang/ru/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Автор',\n        'avatar'           => 'Аватар',\n        'body'             => 'Содержимое',\n        'category'         => 'Категория',\n        'created_at'       => 'Дата создания',\n        'display_name'     => 'Отображаемое имя',\n        'email'            => 'Email',\n        'excerpt'          => 'Отрывок',\n        'featured'         => 'Рекомендовано',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Description',\n        'meta_keywords'    => 'Meta Keywords',\n        'name'             => 'Имя',\n        'order'            => 'Сортировка',\n        'page_image'       => 'Изображение Страницы',\n        'parent'           => 'Родитель',\n        'password'         => 'Пароль',\n        'post_image'       => 'Изображение Статьи',\n        'remember_token'   => 'Токен восстановления',\n        'role'             => 'Роль',\n        'seo_title'        => 'SEO Название',\n        'slug'             => 'Slug (ЧПУ)',\n        'status'           => 'Статус',\n        'title'            => 'Название',\n        'updated_at'       => 'Дата обновления',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Категория',\n            'plural'   => 'Категории',\n        ],\n        'menu'     => [\n            'singular' => 'Меню',\n            'plural'   => 'Меню',\n        ],\n        'page'     => [\n            'singular' => 'Страница',\n            'plural'   => 'Страницы',\n        ],\n        'post'     => [\n            'singular' => 'Статья',\n            'plural'   => 'Статьи',\n        ],\n        'role'     => [\n            'singular' => 'Роль',\n            'plural'   => 'Роли',\n        ],\n        'user'     => [\n            'singular' => 'Пользователь',\n            'plural'   => 'Пользователи',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Категории',\n        'compass'      => 'Compass',\n        'dashboard'    => 'Панель управления',\n        'database'     => 'База данных',\n        'media'        => 'Медиа',\n        'menu_builder' => 'Конструктор Меню',\n        'pages'        => 'Страницы',\n        'posts'        => 'Статьи',\n        'roles'        => 'Роли',\n        'settings'     => 'Настройки',\n        'tools'        => 'Инструменты',\n        'users'        => 'Пользователи',\n    ],\n    'roles'      => [\n        'admin' => 'Администратор',\n        'user'  => 'Обычный Пользователь',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Фоновое Изображение для Админки',\n            'description'                => 'Описание Админки',\n            'description_value'          => 'Добро пожаловать в Voyager. Пропавшую Админку для Laravel',\n            'google_analytics_client_id' => 'Google Analytics Client ID (используется для панели администратора)',\n            'icon_image'                 => 'Иконка Админки',\n            'loader'                     => 'Загрузчик Админки',\n            'title'                      => 'Название Админки',\n        ],\n        'site'  => [\n            'description'                  => 'Описание Сайта',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Логотип Сайта',\n            'title'                        => 'Название Сайта',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/ru/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Чтобы получить значения параметров, используйте в шаблоне код ',\n    'save'                 => 'Сохранить настройки',\n    'new'                  => 'Создать настройку',\n    'help_name'            => 'Название параметра (например, Мой параметр)',\n    'help_key'             => 'Ключ параметра (например, my_parametr)',\n    'help_option'          => '(необязательно, применяется только к выпадающему списку или радио-кнопкам)',\n    'add_new'              => 'Добавить новый параметр',\n    'delete_question'      => 'Вы уверены, что нужно удалить параметр :setting?',\n    'delete_confirm'       => 'Да, удалите этот параметр',\n    'successfully_created' => 'Параметры успешно созданы',\n    'successfully_saved'   => 'Параметры успешно сохранены',\n    'successfully_deleted' => 'Параметры успешно удалены',\n    'already_at_top'       => 'Уже размещено вверху списка',\n    'already_at_bottom'    => 'Уже размещено внизу списка',\n    'key_already_exists'   => 'ключ :key уже существует',\n    'moved_order_up'       => 'Параметр :name перемещен вверх',\n    'moved_order_down'     => 'Параметр :name перемещен вниз',\n    'successfully_removed' => 'Успешно удалено значение параметра :name',\n    'group_general'        => 'Основное',\n    'group_admin'          => 'Админ',\n    'group_site'           => 'Сайт',\n    'group'                => 'Группа',\n    'help_group'           => 'Привязать эту настройку к группе',\n];\n"
  },
  {
    "path": "publishable/lang/ru/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Сделано с <i class=\"voyager-heart\"></i> ',\n    'footer_copyright2' => 'Сделано под ромом :) ',\n];\n"
  },
  {
    "path": "publishable/lang/sv/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'               => 'Per sidvisning',\n    'by_sessions'               => 'Per session',\n    'by_users'                  => 'Per användare',\n    'no_client_id'              => 'För att visa statistik behöver du skaffa ett google analtyics klient-id och lägga till detta i dina inställningar för nyckeln <code>google_analytics_client_id</code>. Skapa din nyckel i Google developer console:',\n    'set_view'                  => 'Välj en vy',\n    'this_vs_last_week'         => 'Denna vecka jämfört med förra veckan',\n    'this_vs_last_year'         => 'Detta år jämfört med förra året',\n    'top_browsers'              => 'Vanligaste webbläsarna',\n    'top_countries'             => 'Vanligaste länderna',\n    'various_visualizations'    => 'Olika visualiseringar',\n];\n"
  },
  {
    "path": "publishable/lang/sv/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'                 => 'Lägg BREAD på denna tabell',\n    'bread_crud_actions'        => 'BREAD/CRUD Åtgärder',\n    'bread_info'                => 'BREAD info',\n    'controller_name_hint'      => 't ex. PageController, om tom används BREAD Controller',\n    'create_bread_for_table'    => 'Skapa BREAD för :table table',\n    'delete_bread'              => 'Radera BREAD',\n    'delete_bread_conf'         => 'Ja, plocka bort BREAD',\n    'delete_bread_quest'        => 'Är du säker att du vill radera BREAD för :table tabellen?',\n    'edit_bread'                => 'Redigera BREAD',\n    'edit_bread_for_table'      => 'Redigera BREAD för :table tabellen',\n    'error_creating_bread'      => 'Oj, något gick snett när BREAD skulle skapas',\n    'error_removing_bread'      => 'Oj, något gick snett när detta BREAD skulle plockas bort',\n    'error_updating_bread'      => 'Oj, något gick snett då detta BREAD skulle uppdateras',\n    'error_tagging'             => 'Oj något gick snett när denna rad skulle skapas. Kontrollera att din tabell har förvalda värden för alla andra fält.',\n\n    'success_created_bread'     => 'Nytt BREAD skapat',\n    'success_remove_bread'      => 'Raderat BREAD från :datatype',\n    'success_update_bread'      => 'Uppdaterat :datatype BREAD',\n    'controller_name'           => 'Kontrollerns Namn',\n    'create_migration'          => 'Skapa migrering för denna tabell?',\n    'description'               => 'Beskrivning',\n    'display_name'              => 'Visningsnamn',\n    'display_name_plural'       => 'Visningsnamn (Plural)',\n    'display_name_singular'     => 'Visningnamn (Singular)',\n    'edit_rows'                 => 'Redigera raderna nedan för tabellen :table',\n    'generate_permissions'      => 'Skapa Behörigheter',\n    'icon_class'                => 'Ikon att använda för denna tabell',\n    'icon_hint'                 => 'Ikon (frivilligt) Använd a',\n    'icon_hint2'                => 'Voyager Typssnittsklass',\n    'model_class'               => 'Modell Klass Namn',\n    'model_name'                => 'Modellens Namn',\n    'model_name_ph'             => 't ex. \\App\\User, om tom används tabellens namn',\n    'order'                     => 'Ordning',\n    'order_column'              => 'Ordning efter kolumn',\n    'order_column_ph'           => 'Kolumnen där ordningen sparas',\n    'order_ident_column'        => 'Kolumn där ordning visas',\n    'order_ident_column_ph'     => 'Kolumnen som visas på ordningssidan',\n    'ordering_not_set'          => 'Du måste definera en ordning först',\n    'policy_class'              => 'Policy Klass Namn',\n    'policy_name'               => 'Policy Namn',\n    'policy_name_ph'            => 't ex. \\App\\Policies\\UserPolicy, om tom används förinställt värde',\n    'server_pagination'         => 'Paginering på servern',\n    'updated_order'             => 'Order updated successfully',\n    'url_slug'                  => 'URL Permalänk (måste vara unik)',\n    'url_slug_ph'               => 'URL Permalänk (t ex. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/sv/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'           => 'Välkommen till Voyager Compass. Alla bra appar behöver in kompass som visar riktningen.\n    I denna avdelning hittar du resurser som hjälper dig att bygga din applikation',\n    'links' => [\n        'title'                 => 'Länkar',\n        'documentation'         => 'Dokumentation',\n        'voyager_homepage'      => 'Voyager Hemsida',\n    ],\n    'commands' => [\n        'title'                 => 'Kommandon',\n        'text'                  => 'Kör Artisan Kommandon från Voyager.',\n        'clear_output'          => 'rensa utdata',\n        'command_output'        => 'Artisan Kommando Utdata',\n        'additional_args'       => 'Lägg till argument?',\n        'run_command'           => 'Kör Kommando',\n    ],\n    'resources' => [\n        'title'                 => 'Resurser',\n        'text'                  => 'Voyager resurser som hjälper dig hitta snabbare.',\n    ],\n    'logs' => [\n        'title'                 => 'Loggar',\n        'text'                  => 'Din apps loggar',\n        'file_too_big'          => 'Logfilen >50M, ladda ned den.',\n        'level'                 => 'Nivå',\n        'context'               => 'Kontext',\n        'date'                  => 'Datum',\n        'content'               => 'Innehåll',\n        'download_file'         => 'Ladda ned fil',\n        'delete_file'           => 'Radera fil',\n        'delete_all_files'      => 'Radera alla filer',\n        'delete_success'        => 'Log file file: raderad',\n        'delete_all_success'    => 'Alla logfiler är raderade',\n    ],\n    'fonts' => [\n        'title'                 => 'Typsnitt',\n        'font_class'            => 'Voyager Typsnitt Klasser',\n        'font_character'        => 'Voyager Typsnitt Tecken',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/sv/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'                => 'Lägg Till Kolumn',\n    'add_softdeletes'               => 'Lägg Till Mjuk radering',\n    'add_timestamps'                => 'Lägg Till Tidsstämpel',\n    'already_exists'                => 'finns redan',\n    'already_exists_table'          => 'Tabellen :table finns redan',\n    'bread_crud_actions'            => 'BREAD/CRUD Återgärder',\n    'bread_info'                    => 'BREAD info',\n    'browse_bread'                  => 'Bläddra BREAD',\n    'column'                        => 'Kolumn',\n    'composite_warning'             => 'Varning: denna kolumn är del av ett sammansatt index',\n    'create_new_table'              => 'Skapa Ny Tabell',\n    'create_your_new_table'         => 'Skapa Din Nya Tabell',\n    'create_model_table'            => 'Skapa en model för denna tabell?',\n    'default'                       => 'Standard',\n    'delete_bread_before_table'     => 'Radera BREAD från denna tabell innan du försöker radera hela tabellen.',\n    'delete_table_confirm'          => 'Ja, radera denna tabell',\n    'delete_table_question'         => 'Är du säker du vill radera :table tabellen?',\n    'editing_table'                 => 'Redigerar tabellen :table',\n    'edit_table'                    => 'Redigera :table tabellen endan',\n    'edit_table_not_exist'          => 'Tabellen du vill redigera existerar inte',\n    'extra'                         => 'Extra',\n    'field'                         => 'Fält',\n    'field_safe_failed'             => 'Misslyckades att spara :field, vi återgår!',\n    'index'                         => 'INDEX',\n    'input_type'                    => 'Inmatningstyp',\n    'key'                           => 'Nyckel',\n    'name_warning'                  => 'Ge kolumnen ett namn innan du försöker lägga på ett index',\n    'no_composites_warning'         => 'Denna tabell har ett sammansatt index, vilket inte stöjds förnärvarande. Var försiktig när du lägger till/raderar index.',\n    'null'                          => 'Null',\n    'optional_details'              => 'Frivilliga Detaljer',\n    'policy_class'                  => 'Policy Class Namn',\n    'policy_name'                   => 'Policy Namn',\n    'policy_name_ph'                => 'ex. \\App\\Policies\\UserPolicy, om tom används standardvärde',\n    'primary'                       => 'PRIMÄR',\n    'server_pagination'             => 'Paginering på server',\n    'success_create_table'          => 'Skapat tabellen :table ',\n    'success_created_bread'         => 'Skapat nytt BREAD',\n    'success_delete_table'          => 'Raderat tabellen :table',\n    'success_remove_bread'          => 'Plockat bort BREAD från :datatype',\n    'success_update_bread'          => 'Uppdaterat :datatype BREAD',\n    'success_update_table'          => 'Uppdaterat tabellen :table',\n    'table_actions'                 => 'Tabell Åtgärder',\n    'table_columns'                 => 'Tabell Kolumner',\n    'table_has_index'               => 'Tabellen har redan en primärnyckel.',\n    'table_name'                    => 'Tabellnamn',\n    'table_no_columns'              => 'Tabellen har inga kolumner...',\n    'type'                          => 'Typ',\n    'type_not_supported'            => 'Denna typ stöds inte',\n    'unique'                        => 'UNIK',\n    'unknown_type'                  => 'Okänd Type',\n    'update_table'                  => 'Uppdatera Tabell',\n    'url_slug'                      => 'URL Permalänk (måste vara unik)',\n    'url_slug_ph'                   => 'URL Permalänk (t ex. posts)',\n    'visibility'                    => 'Synlighet',\n    'relationship'                  => [\n        'relationship'         => 'Relation',\n        'relationships'        => 'Relation',\n        'has_one'              => 'Har En',\n        'has_many'             => 'Har Många',\n        'belongs_to'           => 'Tillhör',\n        'belongs_to_many'      => 'Tillhör Många',\n        'which_column_from'    => 'Vilken kolumn från',\n        'is_used_to_reference' => 'används för att referera',\n        'pivot_table'          => 'Pivottabell',\n        'selection_details'    => 'Urval Detaljer',\n        'display_the'          => 'Visa',\n        'store_the'            => 'Spara',\n        'allow_tagging'        => 'Tillåt Taggning',\n        'easy_there'           => 'Ta det lugnt, Kapten!',\n        'before_create'        => 'Innan du kan skapa en rekation måste du först skapa BREAD.<br> Sen, medan du redigerar BREAD, kan du lägga till en relation .<br> Tack.',\n        'cancel'               => 'Ångra',\n        'add_new'              => 'Skapa ny Relation',\n        'open'                 => 'Öppna',\n        'close'                => 'Stäng',\n        'relationship_details' => 'Relation Detaljer',\n        'browse'               => 'Bläddra',\n        'read'                 => 'Läs',\n        'edit'                 => 'Redigera',\n        'add'                  => 'Lägg till',\n        'delete'               => 'Radera',\n        'create'               => 'Skapa en relation',\n        'namespace'            => 'Modellens Namnrymd (t ex. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/sv/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'       => 'Ingen data tillgänglig i tabellen',\n    'sInfo'             => 'Visar _START_ till _END_ av _TOTAL_ poster',\n    'sInfoEmpty'        => 'Visar 0 till 0 av 0 poster',\n    'sInfoFiltered'     => '(filtrerat från _MAX_ totalt antal poster)',\n    'sInfoPostFix'      => '',\n    'sInfoThousands'    => ' ',\n    'sLengthMenu'       => 'Visa _MENU_ poster',\n    'sLoadingRecords'   => 'Laddar...',\n    'sProcessing'       => 'Bearbetar...',\n    'sSearch'           => 'Sök:',\n    'sZeroRecords'      => 'Inga rader hittades',\n    'oPaginate'         => [\n        'sFirst'    => 'Första',\n        'sLast'     => 'Sista',\n        'sNext'     => 'Nästa',\n        'sPrevious' => 'Föregående',\n    ],\n    'oAria' => [\n        'sSortAscending'    => ': sortera kolumnen fallande',\n        'sSortDescending'   => ': sortera kolumnen stigande',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/sv/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Förra Veckan',\n    'last_year' => 'Förra Året',\n    'this_week' => 'Denna Vecka',\n    'this_year' => 'Detta År',\n];\n"
  },
  {
    "path": "publishable/lang/sv/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'\t\t\t\t        => 'Sida|Sidor',\n    'page_link_text' \t=> 'Visa alla sidor',\n    'page_text' \t\t    => 'Du har :count :string i din databas. Klicka på knappen nedan för att visa alla.',\n    'post' \t\t\t\t       => 'Post|Poster',\n    'post_link_text' \t=> 'Visa all poster',\n    'post_text' \t\t    => 'Du har :count :string i din databas. Klicka på knappen nedan för att visa alla.',\n    'user' \t\t\t\t       => 'Användare|Användare',\n    'user_link_text' \t=> 'Visa alla användare',\n    'user_text' \t\t    => 'Du har :count :string i din databas. Klicka på knappen nedan för att visa alla posanvändareter.',\n];\n"
  },
  {
    "path": "publishable/lang/sv/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text' \t\t => 'Vi har just skapat den saknade symboliska länken för dig.',\n    'symlink_created_title' \t => 'Den saknade symboliska länken för lagringsutrymmet skapad',\n    'symlink_failed_text' \t\t  => 'Kunde inte skapa den saknade symboliska länken. Verkar som ditt webbhotell inte stödjer detta.',\n    'symlink_failed_title' \t\t => 'Kunde inte skapa den saknade symboliska länken',\n    'symlink_missing_button' \t=> 'Fixa det!',\n    'symlink_missing_text' \t\t => 'Vi kunde inte hitta någon symbolisk länk. Detta kan ställa till med problem om media ska laddas i din webbläsare.',\n    'symlink_missing_title' \t => 'Symbolisk länk saknas',\n];\n"
  },
  {
    "path": "publishable/lang/sv/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'               => 'Lämna tomt för att behålla samma',\n    'field_select_dd_relationship'      => 'Kontrollera att du har rätt relation i metoden :method som finns i klassen :class.',\n    'type_checkbox'                     => 'Kryssruta',\n    'type_codeeditor'                   => 'Kodredigerar',\n    'type_file'                         => 'Fil',\n    'type_image'                        => 'Bild',\n    'type_radiobutton'                  => 'Radioknapp',\n    'type_richtextbox'                  => 'Rik textbox',\n    'type_selectdropdown'               => 'Rullgardinsmeny',\n    'type_textarea'                     => 'Textfält',\n    'type_textbox'                      => 'Textbox',\n];\n"
  },
  {
    "path": "publishable/lang/sv/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Åtgärd',\n    'actions'                => 'Åtgärder',\n    'add'                    => 'Lägg Till',\n    'add_folder'             => 'Lägg Till Mapp',\n    'add_new'                => 'Lägg Till Ny',\n    'all_done'               => 'Allt Klart',\n    'are_you_sure'           => 'Är du klar',\n    'are_you_sure_delete'    => 'Är du säker att du vill radera?',\n    'auto_increment'         => 'Auto inkrementerande',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Bläddra',\n    'builder'                => 'Byggare',\n    'bulk_delete'            => 'Radera',\n    'bulk_delete_confirm'    => 'Ja, Radera dessa',\n    'bulk_delete_nothing'    => 'Du har inte valt något att radera',\n    'cancel'                 => 'Ångra',\n    'choose_type'            => 'Välj Typ',\n    'click_here'             => 'Klicka Här',\n    'close'                  => 'Stäng',\n    'compass'                => 'Kompass',\n    'created_at'             => 'Skapad',\n    'custom'                 => 'Custom',\n    'dashboard'              => 'Skrivbord',\n    'database'               => 'Databas',\n    'default'                => 'Standard',\n    'delete'                 => 'Radera',\n    'delete_confirm'         => 'Ja, radera!',\n    'delete_question'        => 'Är du säker du vill radera denna?',\n    'delete_this_confirm'    => 'Ja, Radera Denna',\n    'deselect_all'           => 'Välj Bort Alla',\n    'download'               => 'Ladda Ned',\n    'drag_drop_info'         => 'Dra och Släpp objekten nedan för att sortera.',\n    'edit'                   => 'Redigera',\n    'email'                  => 'E-post',\n    'error_deleting'         => 'Verkar som något gick snett då objektet skulle raderas',\n    'exception'              => 'Fel',\n    'featured'               => 'Presenterad',\n    'field_does_not_exist'   => 'Fältet existerar inte',\n    'how_to_use'             => 'Används så här',\n    'index'                  => 'Index',\n    'internal_error'         => 'Internt fel',\n    'items'                  => 'objekt',\n    'keep_sidebar_open'      => 'Ohoj! Fäll ankare! (och lämna sidomenyn öppen)',\n    'key'                    => 'Nyckel',\n    'last_modified'          => 'Senast Ändrad',\n    'length'                 => 'Längd',\n    'locale'                 => 'Plats',\n    'login'                  => 'Login',\n    'media'                  => 'Media',\n    'menu_builder'           => 'Menybyggare',\n    'move'                   => 'Flytta',\n    'name'                   => 'Namn',\n    'new'                    => 'Ny',\n    'no'                     => 'Nej',\n    'no_thanks'              => 'Nej tack',\n    'none'                   => 'Ingen',\n    'not_null'               => 'Inte Null',\n    'no_results'             => 'No results',\n    'options'                => 'Alternativ',\n    'password'               => 'Lösenord',\n    'permissions'            => 'Behörigheter',\n    'profile'                => 'Profil',\n    'public_url'             => 'Publik URL',\n    'read'                   => 'Läsa',\n    'rename'                 => 'Döp om',\n    'required'               => 'Krävs',\n    'return_to_list'         => 'Återgå till lista',\n    'route'                  => 'Route',\n    'save'                   => 'Spara',\n    'search'                 => 'Sök',\n    'select_all'             => 'Markera Alla',\n    'select_group'           => 'Välj en existerande grupp eller Skapa Ny',\n    'settings'               => 'Inställningar',\n    'showing_entries'        => 'Visar :from till :to av :all poster|Visar :from till :to av :all poster',\n    'submit'                 => 'Skicka',\n    'successfully_added_new' => 'Tillagd!',\n    'successfully_deleted'   => 'Raderad!',\n    'successfully_updated'   => 'Uppdaterad!',\n    'timestamp'              => 'Tidsstämpel',\n    'title'                  => 'Titel',\n    'type'                   => 'Typ',\n    'unsigned'               => 'Osignerad',\n    'unstick_sidebar'        => 'Fäll ihop sidomeny',\n    'update'                 => 'Uppdatera',\n    'update_failed'          => 'Uppdatering misslyckades',\n    'updated_order'          => 'Ordning uppdaterad',\n    'upload'                 => 'Ladda upp',\n    'url'                    => 'URL',\n    'view'                   => 'Visa',\n    'viewing'                => 'Visar',\n    'yes'                    => 'Ja',\n    'yes_please'             => 'Ja, Tack',\n];\n"
  },
  {
    "path": "publishable/lang/sv/json.php",
    "content": "<?php\n\nreturn [\n    'invalid' \t\t\t       => 'Ogiltig JSON',\n    'invalid_message' \t => 'Verkar som du har angett ogiltig JSON.',\n    'valid' \t\t\t         => 'Giltig JSON',\n    'validation_errors' => 'Valideringsfel',\n];\n"
  },
  {
    "path": "publishable/lang/sv/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin' \t\t   => 'Logga in',\n    'signin_below' \t\t=> 'Logga in nedan:',\n    'welcome' \t\t\t    => 'Välkommen till Voyager. Den saknade Admin-panelen för Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/sv/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'            => 'Lägg Till Ny Mapp',\n    'audio_support'             => 'Din webbläsare stödjer inte ljudelement.',\n    'create_new_folder'         => 'Skapa En Mapp',\n    'delete_folder_question'    => 'Om du raderar en mapp kommer allt innehåll också raderas',\n    'destination_folder'        => 'Mål Mapp',\n    'drag_drop_info'            => 'Dra och släpp eller klicka här för att ladda upp',\n    'error_already_exists'      => 'Det finns redan en fil eller mapp med detta namn i den mappen.',\n    'error_creating_dir'        => 'Någonting gick snett när mappen skulle skapas, kontrollera dina behörigheter',\n    'error_deleting_file'       => 'Någonting gick snett när denna fil skulle raderas, kontrollera dina behörigheter',\n    'error_deleting_folder'     => 'Någonting gick snett när denna mapp skulle raderas, kontrollera dina behörigheter',\n    'error_may_exist'           => 'En fil eller mapp med samma namn finns redan. Använd ett annat namn eller radera den andra först.',\n    'error_moving'              => 'Ett fel uppstod när denna fil eller mapp skulle flyttas, kontrollera dina behörigheter.',\n    'error_uploading'           => 'Uppladdning Misslyckades: Okänt fel!',\n    'folder_exists_already'     => 'Den mappen finns redan, radera den först om du vill återskapa den.',\n    'image_does_not_exist'      => 'Bilden finns inte',\n    'image_removed'             => 'Bild raderad',\n    'library'                   => 'Mediabibliotek',\n    'loading'                   => 'LADDA UPP DINA MEDIAFILER',\n    'move_file_folder'          => 'Flytta Fil/Mapp',\n    'new_file_folder'           => 'Ny Fil/Mapp Namm',\n    'new_folder_name'           => 'Ny Mapp Namm',\n    'no_files_here'             => 'Inga filer här.',\n    'no_files_in_folder'        => 'Finns inga filer i denna mapp.',\n    'nothing_selected'          => 'Ingen fil eller mapp vald',\n    'rename_file_folder'        => 'Döp om Fil/Mapp',\n    'success_uploaded_file'     => 'Ladded upp ny fil!',\n    'success_uploading'         => 'Bild uppladdad!',\n    'uploading_wrong_type'      => 'Uppladdning misslyckades: Formatet stödjs ej eller så är filen för stor!',\n    'video_support'             => 'Din webbläsare stödjer ej video-taggen.',\n    'crop'                      => 'Beskär',\n    'crop_and_create'           => 'Beskär & Skapa',\n    'crop_override_confirm'     => 'Originalbilden kommer att skrivas över, är du säker?',\n    'crop_image'                => 'Beskär Bild',\n    'success_crop_image'        => 'Bild beskuren',\n    'height'                    => 'Höjd: ',\n    'title'                     => 'Titel',\n    'type'                      => 'Typ',\n    'size'                      => 'Storlek',\n    'public_url'                => 'Publil URL',\n    'last_modified'             => 'Senast Ändrad',\n    'browser_video_support'     => 'Din webbläsare stödjer ej video-taggen.',\n    'browser_audio_support'     => 'YDin webbläsare stödjer ej ljudelement.',\n    'width'                     => 'bredd: ',\n    'add_all_selected'          => 'Lägg till alla valda',\n];\n"
  },
  {
    "path": "publishable/lang/sv/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                 => 'Färg som RGB eller Hex (frivilligt)',\n    'color_ph'              => 'Färg, t ex. #ffffff eller rgb(255, 255, 255)',\n    'create_new_item'       => 'Skapa Nytt Menyobjekt',\n    'delete_item_confirm'   => 'Ja, Radera Detta Menyobjekt',\n    'delete_item_question'  => 'Är du säker att du vill radera detta menyobjekt?',\n    'drag_drop_info'        => 'Dra och släpp menyobjekten nedan för att sortera dem.',\n    'dynamic_route'         => 'Dynamisk Rutt',\n    'edit_item'             => 'Redigera Menyobjekt',\n    'icon_class'            => 'Typsnittsikon-klass för menyobjektet (Use a',\n    'icon_class2'           => 'Voyager Typsnittsikon-klass</a>)',\n    'icon_class_ph'         => 'Ikonklass (frivilligt)',\n    'item_route'            => 'Rutt för menyobjektet',\n    'item_title'            => 'Titel för menyobjektet',\n    'link_type'             => 'Länktyp',\n    'new_menu_item'         => 'Nytt menyobjekt',\n    'open_in'               => 'Öppna I',\n    'open_new'              => 'Ny Flik/Fönster',\n    'open_same'             => 'Samma Flik/Fönster',\n    'route_parameter'       => 'Rutt parametrar (om några)',\n    'static_url'            => 'Statisk URL',\n    'successfully_created'  => 'Ny menyobjekt skapat.',\n    'successfully_deleted'  => 'Menyojektet är raderat.',\n    'successfully_updated'  => 'Menyobjekt uppdaterat.',\n    'updated_order'         => 'Ordningen för menyobjekt uppdaterat.',\n    'url'                   => 'URL för menyobjektet',\n    'usage_hint'            => 'Du kan visa en meny var som helst på din sajt genom att anropa|Du kan visa denna meny var som helst på din sajt genom att anropa',\n];\n"
  },
  {
    "path": "publishable/lang/sv/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'     => 'Additional Fields',\n    'category'              => 'Inlägg Kategori',\n    'content'               => 'Inlägg Innehåll',\n    'details'               => 'Inlägg Detaljer',\n    'excerpt'               => 'Utdrag <small>Kort beskrivning av denna post</small>',\n    'image'                 => 'Bild för inlägg',\n    'meta_description'      => 'Meta Beskrivning',\n    'meta_keywords'         => 'Meta Nyckelord',\n    'new'                   => 'Skapa Nytt Inlägg',\n    'seo_content'           => 'SEO Innehåll',\n    'seo_title'             => 'SEO Titel',\n    'slug'                  => 'URL permalänk',\n    'status'                => 'Inläggets Status',\n    'status_draft'          => 'utkast',\n    'status_pending'        => 'avvaktande',\n    'status_published'      => 'publicerat',\n    'title'                 => 'Inläggets Titel',\n    'title_sub'             => 'Titeln på ditt inlägg',\n    'update'                => 'Uppdatera Inlägg',\n];\n"
  },
  {
    "path": "publishable/lang/sv/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'Avatar',\n    'edit'             => 'Redigera Min Profil',\n    'edit_user'        => 'Redigera Användare',\n    'password'         => 'Lösenord',\n    'password_hint'    => 'Lämna tomt för att behålla samma',\n    'role'             => 'Roll',\n    'roles'            => 'Roller',\n    'role_default'     => 'Förvald Roll',\n    'roles_additional' => 'Ytterligare Roller',\n    'user_role'        => 'Användarens Roll',\n];\n"
  },
  {
    "path": "publishable/lang/sv/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows' => [\n        'author'           => 'Författare',\n        'avatar'           => 'Avatar',\n        'body'             => 'Brödtext',\n        'category'         => 'Kategori',\n        'created_at'       => 'Skapad',\n        'display_name'     => 'Visningnamn',\n        'email'            => 'Epost',\n        'excerpt'          => 'Utdrag',\n        'featured'         => 'Utvald',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Beskrivning',\n        'meta_keywords'    => 'Meta Keywords',\n        'name'             => 'Name',\n        'order'            => 'Order',\n        'page_image'       => 'Page Image',\n        'parent'           => 'Parent',\n        'password'         => 'Password',\n        'post_image'       => 'Post Image',\n        'remember_token'   => 'Remember Token',\n        'role'             => 'Role',\n        'seo_title'        => 'SEO Title',\n        'slug'             => 'Slug',\n        'status'           => 'Status',\n        'title'            => 'Title',\n        'updated_at'       => 'Updated At',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular'  => 'Kategori',\n            'plural'    => 'Kategorier',\n        ],\n        'menu' => [\n            'singular'  => 'Meny',\n            'plural'    => 'Menyer',\n        ],\n        'page' => [\n            'singular'  => 'Sida',\n            'plural'    => 'Sidor',\n        ],\n        'post' => [\n            'singular'  => 'Inlägg',\n            'plural'    => 'Inlägg',\n        ],\n        'role' => [\n            'singular'  => 'Roll',\n            'plural'    => 'Roller',\n        ],\n        'user' => [\n            'singular'  => 'Användare',\n            'plural'    => 'Användare',\n        ],\n    ],\n    'menu_items' => [\n        'categories'    => 'Kategorier',\n        'compass'       => 'Kompass',\n        'dashboard'     => 'Skrivbord',\n        'database'      => 'Databas',\n        'media'         => 'Media',\n        'menu_builder'  => 'Menubyggare',\n        'pages'         => 'Sidor',\n        'posts'         => 'Inlägg',\n        'roles'         => 'Roller',\n        'settings'      => 'Inställningar',\n        'tools'         => 'Verktyg',\n        'users'         => 'Användare',\n    ],\n    'roles' => [\n        'admin'         => 'Administratör',\n        'user'          => 'Normal Användare',\n    ],\n    'settings' => [\n        'admin' => [\n            'background_image'           => 'Admin Backgroundsbild',\n            'description'                => 'Admin Beskrivning',\n            'description_value'          => 'Välkommen till Voyager. Den saknade kontrollpanelen för Laravel',\n            'google_analytics_client_id' => 'Google Analytics Klient ID (används på admins skrivbord)',\n            'icon_image'                 => 'Admin Ikon Bild',\n            'loader'                     => 'Admin Laddare',\n            'title'                      => 'Admin Titel',\n        ],\n        'site' => [\n            'description'                  => 'Beskrivning av sajten',\n            'google_analytics_tracking_id' => 'Google Analytics Språnings-ID',\n            'logo'                         => 'Logotyp för sajt',\n            'title'                        => 'Sajten titel',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/sv/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'            => 'Du kan hämta värdet från varje inställning genom att anropa',\n    'save'                  => 'Spara Inställningar',\n    'new'                   => 'Ny Inställning',\n    'help_name'             => 'Namn på inställning t ex: Admin Titel',\n    'help_key'              => 'Inställningens nyckel tex: admin_title',\n    'help_option'           => '(frivillig, gäller bara visa typer som rullgardinsmeny eller radioknapp)',\n    'add_new'               => 'Lägg Till Ny Inställning',\n    'delete_question'       => 'Är du säker du vill radera inställningen :setting?',\n    'delete_confirm'        => 'Ja, Radera Denna Inställning',\n    'successfully_created'  => 'Ny Inställning Skapad',\n    'successfully_saved'    => 'Inställning Sparad',\n    'successfully_deleted'  => 'Inställning Radera',\n    'already_at_top'        => 'Denna ligger redan först i listan',\n    'already_at_bottom'     => 'Denna ligger redan sist i listan',\n    'key_already_exists'    => 'Nyckeln :key finns redan',\n    'moved_order_up'        => 'Flyttat :name inställning upp',\n    'moved_order_down'      => 'Flytta :name inställning ned',\n    'successfully_removed'  => 'Värdet :name raderat',\n    'group_general'         => 'Allämnt',\n    'group_admin'           => 'Admin',\n    'group_site'            => 'Sajt',\n    'group'                 => 'Grupp',\n    'help_group'            => 'Grupp somm denna är inställning tilldelas',\n];\n"
  },
  {
    "path": "publishable/lang/sv/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright' \t=> 'Gjord me <i class=\"voyager-heart\"></i> av',\n    'footer_copyright2' => 'Gjord på rom och ännu mer rom',\n];\n"
  },
  {
    "path": "publishable/lang/tr/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'Sayfa görüntülenmesine göre',\n    'by_sessions'            => 'Oturuma göre',\n    'by_users'               => 'Kullanıcıya göre',\n    'no_client_id'           => 'Analitiği görmek için Google Analytics İstemci Kimliği almanız ve ayarlarınızdaki <code>google_analytics_client_id</code> anahtarına eklemeniz gerekmektedir. Anahtar kodunuzu Google Geliştirici Konsolu\\'ndan alın:',\n    'set_view'               => 'Bir görünüm seçin',\n    'this_vs_last_week'      => 'Bu Hafta ile Geçen Hafta',\n    'this_vs_last_year'      => 'Bu Yıl ile Geçen Yıl',\n    'top_browsers'           => 'En çok girilen tarayıcı türü',\n    'top_countries'          => 'En çok girilen ülke',\n    'various_visualizations' => 'Çeşitli görünümler',\n];\n"
  },
  {
    "path": "publishable/lang/tr/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Bu tabloya BREAD ekle',\n    'bread_crud_actions'     => 'BREAD/CRUD İşlemleri',\n    'bread_info'             => 'BREAD bilgisi',\n    'controller_name_hint'   => 'ör. PageController, eğer boş bırakılırsa BREAD Controller kullanılacak',\n    'create_bread_for_table' => ':table tablosu için BREAD oluştur',\n    'delete_bread'           => 'BREAD Sil',\n    'delete_bread_conf'      => 'Evet, BREAD\\'i kaldır',\n    'delete_bread_quest'     => ':table tablosu için BREAD\\'i silmek istediğinizden emin misiniz?',\n    'edit_bread'             => 'BREAD Düzenle',\n    'edit_bread_for_table'   => ':table tablosu için BREAD düzenle',\n    'error_creating_bread'   => 'Üzgünüz, bu BREAD\\i oluşturmada bir problem çıkmış gibi görünüyor',\n    'error_removing_bread'   => 'Üzgünüz, bu BREAD\\i silmede bir problem çıktı',\n    'error_updating_bread'   => 'Üzgünüz, bu BREAD\\i düzenlemede bir problem çıkmış gibi görünüyor',\n    'error_tagging'          => 'Üzgünüz, kayıt oluşturmada bir problem çıkmış gibi görünüyor. Lütfen tablonuzun diğer alanlar için bir varsayılan değeri olduğundan emin olunuz.',\n    'success_created_bread'  => 'Yeni BREAD başarı ile oluşturuldu',\n    'success_remove_bread'   => ':datatype için kullanılan BREAD başarıyla kaldırıldı',\n    'success_update_bread'   => ':datatype için kullanılan BREAD başarıyla güncellendi',\n    'controller_name'        => 'Controller İsmi',\n    'create_migration'       => 'Bu tablo için migration oluşturmak istiyor musunuz?',\n    'description'            => 'Tanım',\n    'display_name'           => 'Görünen İsim',\n    'display_name_plural'    => 'Görünen İsim (Çoğul)',\n    'display_name_singular'  => 'Görünen İsim (Tekil)',\n    'edit_rows'              => 'Aşağıda :table tablosunun satırlarını düzenleyebilirsiniz',\n    'generate_permissions'   => 'İzin Oluştur',\n    'icon_class'             => 'Bu tablo için kullanılacak ikon',\n    'icon_hint'              => 'İkon (isteğe bağlı) seçebileceğiniz ',\n    'icon_hint2'             => 'Voyager İkon Paketi',\n    'model_class'            => 'Model Class İsmi',\n    'model_name'             => 'Model İsmi',\n    'model_name_ph'          => 'ör. \\App\\User, eğer boş bırakılırsa tablo ismi kullanılmasına çalışılacak',\n    'order'                  => 'Sırala',\n    'order_column'           => 'Sıralama sütunu',\n    'order_column_ph'        => 'Sıralama işleminin yapılacağı sütun',\n    'order_ident_column'     => 'Sıra görüntüleme sütunu',\n    'order_ident_column_ph'  => 'Sıralama sayfasında görüntülenecek sütun',\n    'ordering_not_set'       => 'Önce sıralamayı belirlemelisiniz',\n    'policy_class'           => 'Policy Class İsmi',\n    'policy_name'            => 'Policy İsmi',\n    'policy_name_ph'         => 'ör. \\App\\Policies\\UserPolicy, eğer boş bırakılırsa varsayılan kullanılacak',\n    'server_pagination'      => 'Server-side Sayfalama',\n    'soft_deletes_on'        => 'Silinenleri Göster',\n    'soft_deletes_off'       => 'Silinenleri Gizle',\n    'updated_order'          => 'Sıralama başarıyla güncellendi',\n    'url_slug'               => 'Kısa ad (URL - eşsiz olmalı)',\n    'url_slug_ph'            => 'Kısa ad (URL - ör. posts)',\n];\n"
  },
  {
    "path": "publishable/lang/tr/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Voyager Pusula\\'ya hoşgeldiniz. Her iyi uygulama doğru istikamette ilerlemek için bir pusulaya ihtiyaç duyar.\n    Bu bölümde uygulamanızı geliştirirken size rehberlik edecek bir çok kaynak ve yönetimsel görev bulacaksınız.',\n    'links'         => [\n        'title'                 => 'Bağlantılar',\n        'documentation'         => 'Dokümantasyon',\n        'voyager_homepage'      => 'Voyager Anasayfa',\n    ],\n    'commands'      => [\n        'title'                 => 'Komutlar',\n        'text'                  => 'Artisan Komutlarını Voyager\\'dan Çalıştır.',\n        'clear_output'          => 'çıktıyı temizle',\n        'command_output'        => 'Artisan Komut Çıktısı',\n        'additional_args'       => 'İlave Argümanlar?',\n        'run_command'           => 'Komutu Çalıştır',\n    ],\n    'resources'     => [\n        'title'                 => 'Kaynaklar',\n        'text'                  => 'Aradığınız şeyleri bulmanızı kolaylaştıracak Voyager kaynakları.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Loglar',\n        'text'                  => 'Uygulamanızın logları',\n        'file_too_big'          => 'Log dosyası > 50M, lütfen onu bilgisayarınıza indirin.',\n        'level'                 => 'Seviye',\n        'context'               => 'Context',\n        'date'                  => 'Tarih',\n        'content'               => 'İçerik',\n        'download_file'         => 'Dosya indir',\n        'delete_file'           => 'Dosya sil',\n        'delete_all_files'      => 'Tüm dosyaları sil',\n        'delete_success'        => 'file: log dosyası başarıyla silindir',\n        'delete_all_success'    => 'Tüm log dosyaları başarıyla silindi',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'İkonlar',\n        'font_class'            => 'Voyager İkon Class Eşleştirmesi',\n        'font_character'        => 'Voyager İkon Karakter Eşleştirmesi',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/tr/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Yeni sütun ekle',\n    'add_softdeletes'           => 'Yazılımsal silme sütunu ekle(soft delete)',\n    'add_timestamps'            => 'Zaman damgalarını ekle(created_at , updated_at)',\n    'already_exists'            => 'Bu sütun var',\n    'already_exists_table'      => 'Tablo :table zaten var',\n    'bread_crud_actions'        => 'BREAD/CRUD işlemleri',\n    'bread_info'                => 'BREAD bilgisi',\n    'browse_bread'              => 'BREAD Görüntüle',\n    'column'                    => 'Sütun',\n    'composite_warning'         => 'Uyarı: Bu sütun, bileşik bir dizinin parçasıdır',\n    'create_new_table'          => 'Yeni Tablo Oluştur',\n    'create_your_new_table'     => 'Yeni Tablonu Oluştur',\n    'create_model_table'        => 'Bu tablo için model oluşturulsun mu?',\n    'default'                   => 'Varsayılan',\n    'delete_bread_before_table' => 'Lütfen tabloyu silmeden önce bu tablodaki BREAD\\'i kaldırdığınızdan emin olunuz.',\n    'delete_table_confirm'      => 'Evet, bu tabloyu sil',\n    'delete_table_question'     => ':table tablosunu silmek istediğinizden emin misiniz?',\n    'editing_table'             => ':table tablosu düzenleniyor',\n    'edit_table'                => 'Aşağıda :table tablosunu düzenle',\n    'edit_table_not_exist'      => 'Düzenlemek istediğiniz tablo bulunamadı',\n    'extra'                     => 'Ekstra',\n    'field'                     => 'Alan',\n    'field_safe_failed'         => ':field alanı kaydedilirken hata oluştu, veritabanı geri yükleniyor.',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Giriş Tipi',\n    'key'                       => 'Anahtar',\n    'name_warning'              => 'Lütfen indeks eklemden önce sütun adını belirleyin',\n    'no_composites_warning'     => 'Bu tabloda bileşik indeksler var. Lütfen şu anda desteklenmediklerini unutmayın. İndeks eklemeye/çıkarmaya çalışırken dikkatli olun.',\n    'null'                      => 'Null',\n    'optional_details'          => 'İsteğe Bağlı Ayrıntılar',\n    'policy_class'              => 'Policy Class İsmi',\n    'policy_name'               => 'Policy İsmi',\n    'policy_name_ph'            => 'ör. \\App\\Policies\\UserPolicy, eğer boş bırakılırsa varsayılan kullanılacak',\n    'primary'                   => 'BİRİNCİL',\n    'server_pagination'         => 'Sunucu taraflı sayfalama',\n    'success_create_table'      => ':table tablosu başarıyla oluşturuldu.',\n    'success_created_bread'     => 'Yeni BREAD başarıyla oluşturuldu.',\n    'success_delete_table'      => ':table tablosu başarıyla silindi.',\n    'success_remove_bread'      => ':datatype üzerindeki BREAD başarıyla silindi.',\n    'success_update_bread'      => ':datatype BREAD başarıyla güncellendi.',\n    'success_update_table'      => ':table tablosu başarıyla güncellendi.',\n    'table_actions'             => 'Tablo İşlemleri',\n    'table_columns'             => 'Tablo Sütunları',\n    'table_has_index'           => 'Tabloda zaten birincil anahtarı var.',\n    'table_name'                => 'Tablo İsmi',\n    'table_no_columns'          => 'Tabloda hiç sütun bulunamadı...',\n    'type'                      => 'Tip',\n    'type_not_supported'        => 'Bu tip desteklenmiyor',\n    'unique'                    => 'EŞSİZ',\n    'unknown_type'              => 'Bilinmeyen Tip',\n    'update_table'              => 'Tabloyu güncelle',\n    'url_slug'                  => 'Kısa ad (URL - eşsiz olmalı)',\n    'url_slug_ph'               => 'Kısa ad (URL - ör. posts)',\n    'visibility'                => 'Görünürlük',\n    'relationship'              => [\n        'relationship'         => 'İlişki',\n        'relationships'        => 'İlişkiler',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => 'Şuradaki hangi sütun',\n        'is_used_to_reference' => 'şunu referans olarak kullanılacak',\n        'pivot_table'          => 'Pivot Tablo',\n        'selection_details'    => 'Seçim Detayları',\n        'display_the'          => 'Şunu Görüntüle',\n        'store_the'            => 'Şunu Sakla',\n        'allow_tagging'        => 'Etiketlemeye İzin Ver',\n        'easy_there'           => 'Sakin ol Kaptan',\n        'before_create'        => 'Yeni bir ilişki oluşturmadan önce BREAD oluşturmalısın.<br> Sonra, düzenlemeye geri dönüp istediğin ilişkiyi ekleyebilirsin.<br> Teşekkürler.',\n        'cancel'               => 'İptal',\n        'add_new'              => 'Yeni İlişki Ekle',\n        'open'                 => 'Aç',\n        'close'                => 'Kapa',\n        'relationship_details' => 'İlişki Detayları',\n        'browse'               => 'Görüntüle',\n        'read'                 => 'Göster',\n        'edit'                 => 'Düzenle',\n        'add'                  => 'Ekle',\n        'delete'               => 'Sil',\n        'create'               => 'Bir İlişki Oluştur',\n        'namespace'            => 'Model Namespace (ör. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/tr/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Tabloda veri bulunmuyor',\n    'sInfo'           => '_START_ ile _END_ arasında _TOTAL_ kadar kayıt görüntüleniyor',\n    'sInfoEmpty'      => '0 ile 0 arasında 0 kadar kayıt görüntüleniyor',\n    'sInfoFiltered'   => '( Toplam _MAX_  kadar kayıt filtrelendi)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => '_MENU_ kayıtlarını göster',\n    'sLoadingRecords' => 'Yükleniyor...',\n    'sProcessing'     => 'İşleniyor...',\n    'sSearch'         => 'Ara:',\n    'sZeroRecords'    => 'Eşleşen bir kayıt bulunmamakta',\n    'oPaginate'       => [\n        'sFirst'    => 'İlk',\n        'sLast'     => 'Son',\n        'sNext'     => 'İleri',\n        'sPrevious' => 'Geri',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': activate artana göre sırala',\n        'sSortDescending' => ': activate azalana göre sırala',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/tr/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Geçen Hafta',\n    'last_year' => 'Geçen Yıl',\n    'this_week' => 'Bu Hafta',\n    'this_year' => 'Bu Yıl',\n];\n"
  },
  {
    "path": "publishable/lang/tr/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Sayfa|Sayfalar',\n    'page_link_text' => 'Tüm sayfaları görüntüle',\n    'page_text'      => 'Veritabanınızda :count kadar :string bulunuyor. Aşağıdaki butona tıklayarak tüm sayfaları görebilirsiniz.',\n    'post'           => 'Gönderi|Gönderiler',\n    'post_link_text' => 'Tüm Gönderileri Görüntüle',\n    'post_text'      => ':count kadar :string veritabanınızda. Tıklayarak tüm Gönderileri görün.',\n    'user'           => 'Kullanıcı|Kullanıcılar',\n    'user_link_text' => 'Tüm Kullanıcları Görüntüle',\n    'user_text'      => 'Veritabanınızda :count kadar :string bulunuyor. Aşağıdaki butona tıklayarak tüm kullanıcıları görebilirsiniz.',\n];\n"
  },
  {
    "path": "publishable/lang/tr/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Kayıp depolama alanı sembolik bağlantısını sizin için oluşturduk.',\n    'symlink_created_title'  => 'Kayıp depolama alanı sembolik bağlantısı oluşturuldu',\n    'symlink_failed_text'    => 'Kayıp depolama alanı sembolik bağlantısını sizin için oluştururken hata ile kaşılaşıldı. Servis sağlayıcınız bunu desteklemiyor gibi görünüyor.',\n    'symlink_failed_title'   => 'Depolama alanı sembolik bağlantısı oluşturulamadı.',\n    'symlink_missing_button' => 'Düzelt',\n    'symlink_missing_text'   => 'Depolama alanı sembolik bağlantısı bulamadık. Bu sorun medya dosyalarınızın tarayıcıdan yüklenmesinde sorun çıkartabilir.',\n    'symlink_missing_title'  => 'Depolama alanı sembolik bağlantısı eksik',\n];\n"
  },
  {
    "path": "publishable/lang/tr/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Aynı kalması için boş bırakın',\n    'field_select_dd_relationship' => ':method methodu ile :class sınıfı içinde uygun bir ilişki kurduğunuzdan emin olun.',\n    'type_checkbox'                => 'Çoklu Seçim Kutusu',\n    'type_codeeditor'              => 'Kod Editörü',\n    'type_file'                    => 'Dosya',\n    'type_image'                   => 'Resim',\n    'type_radiobutton'             => 'Opsiyon Kutuları',\n    'type_richtextbox'             => 'Metin Editörü',\n    'type_selectdropdown'          => 'Seçim Kutusu',\n    'type_textarea'                => 'Metin Alanı',\n    'type_textbox'                 => 'Metin Kutusu',\n];\n"
  },
  {
    "path": "publishable/lang/tr/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'İşlem',\n    'actions'                => 'İşlemler',\n    'add'                    => 'Ekle',\n    'add_folder'             => 'Klasör ekle',\n    'add_new'                => 'Yeni Ekle',\n    'all_done'               => 'Hepsi tamam',\n    'are_you_sure'           => 'Emin misin',\n    'are_you_sure_delete'    => 'Silmek istediğinizden emin misiniz?',\n    'auto_increment'         => 'Auto Increment',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Görüntüle',\n    'builder'                => 'Kurucu',\n    'bulk_delete'            => 'Toplu Sil',\n    'bulk_delete_confirm'    => 'Evet, Bunları Sil',\n    'bulk_delete_nothing'    => 'Silmek için hiçbir şey seçmediniz',\n    'cancel'                 => 'İptal',\n    'choose_type'            => 'Tip Seçin',\n    'click_here'             => 'Buraya Tıklayın',\n    'close'                  => 'Kapat',\n    'compass'                => 'Pusula',\n    'created_at'             => 'Oluşturulma zamanı',\n    'custom'                 => 'Özel',\n    'dashboard'              => 'Yönetim Paneli',\n    'database'               => 'Veritabanı',\n    'default'                => 'Varsayılan',\n    'delete'                 => 'Sil',\n    'delete_confirm'         => 'Evet, Sil!',\n    'delete_question'        => 'Bunu silmek istediğinizden emin misiniz?',\n    'delete_this_confirm'    => 'Evet, Sil!',\n    'deselect_all'           => 'Tüm Seçimleri Kaldır',\n    'download'               => 'İndir',\n    'drag_drop_info'         => 'Sürükle ve Bırak yaparak nesneleri yeniden sıralandırabilirsiniz.',\n    'edit'                   => 'Düzenle',\n    'email'                  => 'E-posta',\n    'error_deleting'         => 'Malesef silme işlemi esnasında sorun oluştu',\n    'exception'              => 'İstisna',\n    'featured'               => 'Öne Çıkan',\n    'field_does_not_exist'   => 'Alan bulunamadı',\n    'home'                   => 'Anasayfa',\n    'how_to_use'             => 'Nasıl Kullanılır',\n    'index'                  => 'İndeks',\n    'internal_error'         => 'Internal Error',\n    'items'                  => 'Nesne(ler)',\n    'keep_sidebar_open'      => 'Yan menüyü açık tut',\n    'key'                    => 'Anahtar',\n    'last_modified'          => 'Son düzenleme',\n    'length'                 => 'Uzunluk',\n    'locale'                 => 'Dil',\n    'login'                  => 'Giriş',\n    'logout'                 => 'Çıkış',\n    'media'                  => 'Medya',\n    'menu_builder'           => 'Menu Oluşturucu',\n    'move'                   => 'Taşı',\n    'name'                   => 'İsim',\n    'new'                    => 'Yeni',\n    'no'                     => 'Hayır',\n    'no_thanks'              => 'Hayır Teşekkürler',\n    'none'                   => 'None',\n    'not_null'               => 'Not Null',\n    'no_results'             => 'Sonuç yok',\n    'options'                => 'Seçenekler',\n    'password'               => 'Parola',\n    'permissions'            => 'İzinler',\n    'profile'                => 'Profil',\n    'public_url'             => 'Açık Bağlantı',\n    'read'                   => 'Göster',\n    'rename'                 => 'Yeniden Adlandır',\n    'remember_me'            => 'Beni Hatırla',\n    'required'               => 'Gerekli',\n    'return_to_list'         => 'Listeye dön',\n    'route'                  => 'Route',\n    'save'                   => 'Kaydet',\n    'search'                 => 'Ara',\n    'select_all'             => 'Tümünü seç',\n    'select_group'           => 'Varolan Grubu Seç veya Yeni Ekle',\n    'settings'               => 'Ayarlar',\n    'showing_entries'        => ':from ile :to arasındaki :all kayıtlar gösteriliyor | :from ile :to arasındaki :all kayıtlar gösteriliyor',\n    'submit'                 => 'Gönder',\n    'successfully_added_new' => 'Başarıyla Eklendi',\n    'successfully_deleted'   => 'Başarıyla Silindi',\n    'successfully_updated'   => 'Başarıyla Güncellendi',\n    'timestamp'              => 'Zaman damgası',\n    'title'                  => 'Başlık',\n    'type'                   => 'Tip',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => 'Yan menüyü açık tut',\n    'update'                 => 'Güncelle',\n    'update_failed'          => 'Güncellemede Hata Oluştu',\n    'updated_order'          => 'Sıra güncellendi',\n    'upload'                 => 'Yükle',\n    'url'                    => 'URL',\n    'view'                   => 'Göster',\n    'viewing'                => 'Gösteriliyor',\n    'yes'                    => 'Evet',\n    'yes_please'             => 'Evet, lütfen',\n];\n"
  },
  {
    "path": "publishable/lang/tr/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'Geçersiz JSON',\n    'invalid_message'   => 'Geçersiz bir JSON gibi görünüyor',\n    'valid'             => 'Geçerli JSON',\n    'validation_errors' => 'Doğrulama Hatası',\n];\n"
  },
  {
    "path": "publishable/lang/tr/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Giriş yap',\n    'signin_below' => 'Oturum açın',\n    'welcome'      => 'Voyager\\'a hoş geldiniz , Laravel\\'in Aranan Yönetim Paneli',\n];\n"
  },
  {
    "path": "publishable/lang/tr/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Yeni dosya ekle',\n    'audio_support'          => 'Tarıyıcınız ses dosyası desteklemiyor.',\n    'create_new_folder'      => 'Yeni dosya oluştur',\n    'delete_folder_question' => 'Klasörü sildiğinizde içindeki tüm dosyalar da silinir',\n    'destination_folder'     => 'Dosya Konumu',\n    'drag_drop_info'         => 'Sürükle bırak yöntemiyle hızlıca resim yükle',\n    'error_already_exists'   => 'Malesef dosya/dizin ile aynı isimde bulunan bir kayıt var',\n    'error_creating_dir'     => 'Malesef dizin oluşturuken bir şeyler yolunda gitmedi, Lütfen izinlerinizi kontrol ediniz',\n    'error_deleting_file'    => 'Bu dosyayı silerken bir sorun oluştu, lütfen izinlerinizi kontrol ediniz ',\n    'error_deleting_folder'  => 'Malesef bu dizini silerken bir sorun oluştu, lütfen izinlerinizi kontrol ediniz',\n    'error_may_exist'        => 'Dosya/dizin ile aynı isimde bulunan bir kayıt olabilir lütfen ismini değiştirin',\n    'error_moving'           => 'Bu dosya/dizini taşırken bir sorun oluştu , lütfen doğru izinlerinizin olduğuna emin olun',\n    'error_uploading'        => 'Yükleme hatası: Unknown bilinmeyen bir hata oluştur',\n    'folder_exists_already'  => 'Malesef bu dizinden var ama isterseniz silip tekrar oluşturabilirsiniz ',\n    'image_does_not_exist'   => 'Resim bulanamadı',\n    'image_removed'          => 'Resim silindi',\n    'library'                => 'Kütüphane',\n    'loading'                => 'Medya dosyanızı bekleyin',\n    'move_file_folder'       => 'Dosya/Dizin taşı',\n    'new_file_folder'        => 'Yeni Dosya/Dizin ismi',\n    'new_folder_name'        => 'Yeni dizin ismi',\n    'no_files_here'          => 'Hiç dosya bulunamadı',\n    'no_files_in_folder'     => 'Bu klasörde hiç dosya bulunamadı',\n    'nothing_selected'       => 'Hiçbir Dosya/Dizin seçilmedi',\n    'rename_file_folder'     => 'Yeniden adlanadır Dosya/Dizin',\n    'success_uploaded_file'  => 'Dosya başarılı bir şekilde yüklendi',\n    'success_uploading'      => 'Resim başarılı bir şekilde yüklendi',\n    'uploading_wrong_type'   => 'Yükleme hatası: Desteklenmeyen dosya formatı veya çok büyük dosya!',\n    'video_support'          => 'Tarayıcı video etiketini desteklemiyor ',\n    'crop'                   => 'Kırp',\n    'crop_and_create'        => 'Kırp & Oluştur',\n    'crop_override_confirm'  => 'Orjinal görselin üzerine yazılacak, emin misiniz?',\n    'crop_image'             => 'Görseli Kırp',\n    'success_crop_image'     => 'Görsel başarıyla kırpıldı',\n    'height'                 => 'Yükseklik: ',\n    'title'                  => 'Başlık',\n    'type'                   => 'Tür',\n    'size'                   => 'Boyut',\n    'public_url'             => 'Açık URL',\n    'last_modified'          => 'Son Düzenlenme',\n    'browser_video_support'  => 'Tarıyıcınız video dosyası desteklemiyor.',\n    'browser_audio_support'  => 'Tarıyıcınız ses dosyası desteklemiyor.',\n    'width'                  => 'Genişlik: ',\n    'add_all_selected'       => 'Seçilenlerin tümünü ekle',\n];\n"
  },
  {
    "path": "publishable/lang/tr/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Renkler RGB veya hex (tercihen)',\n    'color_ph'             => 'Renk (örn. #ffffff veya rgb(255, 255, 255)',\n    'create_new_item'      => 'Yeni bir kayıt oluşturun',\n    'delete_item_confirm'  => 'Evet, bu menüyü sil',\n    'delete_item_question' => 'Bu menü kaydını silmek istediğinizden emin misiniz?',\n    'drag_drop_info'       => 'Sürükle ve bırak ile menüyü ayarlayın',\n    'dynamic_route'        => 'Dinamik rota',\n    'edit_item'            => 'Menüyü düzenle',\n    'icon_class'           => 'Font Icon sınıfları menü için (İnceleyin: ',\n    'icon_class2'          => 'Voyager Font Sınıfları</a>)',\n    'icon_class_ph'        => 'Icon sınıfları (tercihen)',\n    'item_route'           => 'Menü için rota',\n    'item_title'           => 'Menü başlığı',\n    'link_type'            => 'Link tipi',\n    'new_menu_item'        => 'Yeni menü kaydı',\n    'open_in'              => 'Açılış hedefi',\n    'open_new'             => 'Yeni Sekmede Aç',\n    'open_same'            => 'Aynı Sekmede Açılsın',\n    'route_parameter'      => 'Rota parametresi',\n    'static_url'           => 'Statik URL',\n    'successfully_created' => 'Menü kaydı başarılı bir şekilde oluşturuldu.',\n    'successfully_deleted' => 'Menü kaydı başarılı bir şekilde silindi.',\n    'successfully_updated' => 'Menü kaydı başarılı bir şekilde güncellendi.',\n    'updated_order'        => 'Menü kaydı başarılı bir şekilde sıralandı.',\n    'url'                  => 'Menü kaydının linki',\n    'usage_hint'           => 'Herhangi bir menüyü sitenizde çağırmak için:|Bu menüyü sitenizde çağırmak için:',\n];\n"
  },
  {
    "path": "publishable/lang/tr/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'İlave Alanlar',\n    'category'         => 'Yazı Kategorisi',\n    'content'          => 'Yazı İçeriği',\n    'details'          => 'Yazı Detayı',\n    'excerpt'          => 'Alıntı <small>Bu yazının kısa açıklaması</small>',\n    'image'            => 'Yazı Resmi',\n    'meta_description' => 'Meta Açıklaması',\n    'meta_keywords'    => 'Meta Anahtar kelimesi',\n    'new'              => 'Yeni Yazı Oluştur',\n    'seo_content'      => 'SEO İçeriği',\n    'seo_title'        => 'SEO Başlığı',\n    'slug'             => 'Kısa ad (URL)',\n    'status'           => 'Yazı Durumu',\n    'status_draft'     => 'taslak',\n    'status_pending'   => 'bekliyor',\n    'status_published' => 'yayınlandı',\n    'title'            => 'Yazı Başlığı',\n    'title_sub'        => 'Yazınız için başlık',\n    'update'           => 'Yazıyı Güncelle',\n];\n"
  },
  {
    "path": "publishable/lang/tr/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'            => 'Avatar',\n    'edit'              => 'Profilimi Düzenle',\n    'edit_user'         => 'Kullanıcı Düzenle',\n    'password'          => 'Parola',\n    'password_hint'     => 'Parolanın aynı kalması için boş bırakın',\n    'role'              => 'Rol',\n    'roles'             => 'Roller',\n    'role_default'      => 'Varsayılan Rol',\n    'roles_additional'  => 'Ek Roller',\n    'user_role'         => 'Kullanıcı Rolü',\n];\n"
  },
  {
    "path": "publishable/lang/tr/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Yazar',\n        'avatar'           => 'Avatar',\n        'body'             => 'Gövde',\n        'category'         => 'Kategori',\n        'created_at'       => 'Oluşturulma Zamanı',\n        'display_name'     => 'Görünen İsim',\n        'email'            => 'E-posta',\n        'excerpt'          => 'Özet',\n        'featured'         => 'Öne Çıkarılmış',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Açıklama',\n        'meta_keywords'    => 'Meta Anahtar Kelime',\n        'name'             => 'İsim',\n        'order'            => 'Sıra',\n        'page_image'       => 'Sayfa Görseli',\n        'parent'           => 'Üst',\n        'password'         => 'Parola',\n        'post_image'       => 'Yazı Görseli',\n        'remember_token'   => 'Token\\'ı Hatırla',\n        'role'             => 'Rol',\n        'roles'            => 'Roller',\n        'seo_title'        => 'SEO Başlığı',\n        'slug'             => 'Kısa ad (URL)',\n        'status'           => 'Durum',\n        'title'            => 'Başlık',\n        'updated_at'       => 'Güncelleme Zamanı',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Kategori',\n            'plural'   => 'Kategoriler',\n        ],\n        'menu'     => [\n            'singular' => 'Menü',\n            'plural'   => 'Menüler',\n        ],\n        'page'     => [\n            'singular' => 'Sayfa',\n            'plural'   => 'Sayfalar',\n        ],\n        'post'     => [\n            'singular' => 'Yazı',\n            'plural'   => 'Yazılar',\n        ],\n        'role'     => [\n            'singular' => 'Rol',\n            'plural'   => 'Roller',\n        ],\n        'user'     => [\n            'singular' => 'Kullanıcı',\n            'plural'   => 'Kullanıcılar',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Kategoriler',\n        'compass'      => 'Pusula',\n        'dashboard'    => 'Yönetim Paneli',\n        'database'     => 'Veritabanı',\n        'media'        => 'Medya',\n        'menu_builder' => 'Menü Oluşturucu',\n        'pages'        => 'Sayfalar',\n        'posts'        => 'Yazılar',\n        'roles'        => 'Roller',\n        'settings'     => 'Ayarlar',\n        'tools'        => 'Araçlar',\n        'users'        => 'Kullanıcılar',\n    ],\n    'roles'      => [\n        'admin' => 'Yönetici',\n        'user'  => 'Normal Kullanıcı',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Yönetim Paneli Arkaplan Görseli',\n            'description'                => 'Yönetim Paneli Açıklaması',\n            'description_value'          => 'Voyager\\'e hoş geldiniz. Laravel\\'in Aranan Yönetim Paneli',\n            'google_analytics_client_id' => 'Google Analytics İstemci Kimliği (Client ID) (Yönetim Paneli için kullanılacak)',\n            'icon_image'                 => 'Yönetim Paneli İkon Görseli',\n            'loader'                     => 'Yönetim Paneli Yükleniyor İkonu',\n            'title'                      => 'Yönetim Paneli Başlığı',\n        ],\n        'site'  => [\n            'description'                  => 'Site Açıklaması',\n            'google_analytics_tracking_id' => 'Google Analytics Takip Kimliği (Tracking ID)',\n            'logo'                         => 'Site Logosu',\n            'title'                        => 'Site Başlığı',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/tr/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Herhangi bir ayarın değerini sitenizden şu şekilde çağırabilirisiniz ',\n    'save'                 => 'Ayarları Kaydet',\n    'new'                  => 'Yeni Ayar',\n    'help_name'            => 'Ayar ismi ör: Yönetici Paneli',\n    'help_key'             => 'Ayar anahtarı ör: yonetici_paneli',\n    'help_option'          => '(İsteğe bağlı, sadece dropdown ya da opsiyonel seçim gibi belirli türlerde geçerlidir)',\n    'add_new'              => 'Yeni Ayar Ekle',\n    'delete_question'      => ':setting ayarını silmek istediğinize emin misiniz?',\n    'delete_confirm'       => 'Evet, Bu Ayarı Sil',\n    'successfully_created' => 'Ayarlar Başarıyla Oluşturuldu',\n    'successfully_saved'   => 'Ayarlar Başarıyla Kaydedildi',\n    'successfully_deleted' => 'Ayar Başarıyla Silindi',\n    'already_at_top'       => 'Bu zaten listenin en üstünde',\n    'already_at_bottom'    => 'Bu zaten listenin en altında',\n    'key_already_exists'   => ':key anahtarı zaten var',\n    'moved_order_up'       => ':name ayarı yukarı taşındı',\n    'moved_order_down'     => ':name ayarı aşağı taşındı',\n    'successfully_removed' => ':name değeri başarılı bir şekilde silindi',\n    'group_general'        => 'Genel',\n    'group_admin'          => 'Yönetici',\n    'group_site'           => 'Site',\n    'group'                => 'Grup',\n    'help_group'           => 'Ayarların atandığı grup',\n];\n"
  },
  {
    "path": "publishable/lang/tr/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => '<i class=\"voyager-heart\"></i> ile yapıldı',\n    'footer_copyright2' => 'Rom ve daha da fazla romla yapılmış',\n];\n"
  },
  {
    "path": "publishable/lang/uk/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'По сторінках',\n    'by_sessions'            => 'По сесіях',\n    'by_users'               => 'По користувачах',\n    'no_client_id'           => 'Для активації аналітики необхідно отримати ідентифікатор клієнта Google Analytics та додати його в поле <code>google_analytics_client_id</code> меню налаштувань. Отримати код Google Analytics: ',\n    'set_view'               => 'Виберіть вид',\n    'this_vs_last_week'      => 'Поточний тиждень в порівнянні з попереднім.',\n    'this_vs_last_year'      => 'Поточний рік в порівнянні з попереднім',\n    'top_browsers'           => 'Найкращі браузери',\n    'top_countries'          => 'Найкращі країни',\n    'various_visualizations' => 'Різноманітні візуалізації',\n];\n"
  },
  {
    "path": "publishable/lang/uk/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Додати BREAD до цієї таблиці',\n    'bread_crud_actions'     => 'BREAD/CRUD дії',\n    'bread_info'             => 'BREAD інформація',\n    'controller_name_hint'   => 'наприклад, PageController; якщо залишити порожнім, буде використано BREAD Controller',\n    'create_bread_for_table' => 'Створити BREAD для таблиці :table',\n    'default_search_key'     => 'Поле пошуку на боці сервера за замвчуванням',\n    'default_search_key_ph'  => 'Це поле буде обрано для пошуку спочатку',\n    'delete_bread'           => 'Видалити BREAD',\n    'delete_bread_conf'      => 'Так, видалити BREAD',\n    'delete_bread_quest'     => 'Ви впевнені, що хочете видалити BREAD для таблиці :table?',\n    'edit_bread'             => 'Редагувати BREAD',\n    'edit_bread_for_table'   => 'Редагувати BREAD для таблиці :table',\n    'error_creating_bread'   => 'Пробачте, виникла помилка при створенні цього BREAD',\n    'error_removing_bread'   => 'Пробачте, виникла помилка при видаленні цього BREAD',\n    'error_updating_bread'   => 'Пробачте, виникла помилка з оновленням цього BREAD',\n    'error_tagging'          => 'Пробачте, виникла помилка при створенні запису. Будь ласка, переконайтесь, що таблиця має значення за замовчуванням для інших полів.',\n    'success_created_bread'  => 'Успішно створено BREAD',\n    'success_remove_bread'   => 'Успішно видалено BREAD з :datatype',\n    'success_update_bread'   => 'Успішно оновлено BREAD у :datatype',\n    'controller_name'        => 'Назва контролера',\n    'create_migration'       => 'Створити міграцію для цієї таблиці?',\n    'description'            => 'Опис',\n    'display_name'           => 'Назва для відображення',\n    'display_name_plural'    => 'Назва для відображення (множина)',\n    'display_name_singular'  => 'Назва для відображення (однина)',\n    'edit_rows'              => 'Редагуйте рядки таблиці :table нижче',\n    'generate_permissions'   => 'Створення прав доступу',\n    'icon_class'             => 'Значок для цієї таблиці',\n    'icon_hint'              => 'Значок (необов`язково)',\n    'icon_hint2'             => 'Voyager Fonts Class',\n    'model_class'            => 'Назва класу моделі',\n    'model_name'             => 'Назва моделі',\n    'model_name_ph'          => 'наприклад, \\App\\User; if left empty will try and use the table name',\n    'order'                  => 'Сортування',\n    'order_column'           => 'Стовпець сортування',\n    'order_column_ph'        => 'Стовпчик де зберігається порядок сортування',\n    'order_direction'        => 'Напрямок сортування',\n    'order_ident_column'     => 'Стовпець сортування для відображення',\n    'order_ident_column_ph'  => 'Стовпчик, який показується на сторінці сортування',\n    'ordering_not_set'       => 'Спочатку потрібно визначити порядок сортування',\n    'policy_class'           => 'Назва класу політики',\n    'policy_name'            => 'Політика',\n    'policy_name_ph'         => 'наприклад, \\App\\Policies\\UserPolicy, якщо залишити порожнім, буде спроба використати назву таблиці',\n    'server_pagination'      => 'Пагінація на боці сервера',\n    'scope'                  => 'Scope',\n    'soft_deletes_on'        => 'Показати видалені',\n    'soft_deletes_off'       => 'Приховати видалені',\n    'updated_order'          => 'Успішно оновлено порядок сортування',\n    'url_slug'               => 'URL Slug (має бути унікальним)',\n    'url_slug_ph'            => 'URL slug (наприклад, posts)',\n];\n"
  },
  {
    "path": "publishable/lang/uk/database.php",
    "content": "<?php\n\nreturn [\n    'add_bread'                 => 'Додати BREAD до даної таблиці',\n    'add_new_column'            => 'Додати новий стовпчик',\n    'add_softdeletes'           => 'Додати Soft Deletes',\n    'add_timestamps'            => 'Додати мітки часу',\n    'already_exists'            => 'Вже існує',\n    'already_exists_table'      => 'Таблиця :table вже існує',\n    'bread_crud_actions'        => 'BREAD/CRUD дії',\n    'bread_info'                => 'BREAD інформація',\n    'column'                    => 'Стовпчик',\n    'composite_warning'         => 'Попередження: цей стовпчик є частиною складового індексу',\n    'controller_name'           => 'Назва контролера',\n    'controller_name_hint'      => 'наприклад, порожній PageController,  буде використовувати BREAD Controller',\n    'create_bread_for_table'    => 'Створити BREAD для таблиці :table',\n    'create_migration'          => 'Створити міграцію для даної таблиці?',\n    'create_model_table'        => 'Створити модель для даної таблиці?',\n    'create_new_table'          => 'Створити нову таблицю',\n    'create_your_new_table'     => 'Створити вашу нову таблицю',\n    'default'                   => 'За замовчуванням',\n    'delete_bread'              => 'Видалити BREAD',\n    'delete_bread_before_table' => 'Перед видаленням таблиці обов\\'язково видаліть BREAD таблиці.',\n    'delete_table_bread_conf'   => 'Так, видалити BREAD',\n    'delete_table_bread_quest'  => 'Ви впевнені, що хочете видалити BREAD для таблиці :table?',\n    'delete_table_confirm'      => 'Так, видалити таблицю',\n    'delete_table_question'     => 'Ви дійсно хочете видалити таблицю :table?',\n    'description'               => 'Опис',\n    'display_name'              => 'Відображена назва',\n    'display_name_plural'       => 'Відображена назва (в множині)',\n    'display_name_singular'     => 'Відображена назва (в однині)',\n    'edit_bread'                => 'Редагувати BREAD',\n    'edit_bread_for_table'      => 'Редагувати BREAD для таблиці :table',\n    'edit_rows'                 => 'Редагувати рядки таблиці :table нижче',\n    'edit_table'                => 'Редагувати таблицю :table нижче',\n    'edit_table_not_exist'      => 'Таблиці, яку ви хочете редагувати, не існує',\n    'error_creating_bread'      => 'Схоже, виникла проблема з створенням даного BREAD',\n    'error_removing_bread'      => 'Схоже, виникла проблема з видаленням даного BREAD',\n    'error_updating_bread'      => 'Схоже, виникла проблема з оновленням даного BREAD',\n    'extra'                     => 'Додатково',\n    'field'                     => 'Поле',\n    'field_safe_failed'         => 'Не вдалось зберегти поле :field, буде проведено відкат до попереднього значення.',\n    'generate_permissions'      => 'Створення прав доступу',\n    'icon_class'                => 'Значок для даної таблиці',\n    'icon_hint'                 => 'Значок для (необов\\'язково)',\n    'icon_hint2'                => 'Voyager Font Class',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Тип вводу',\n    'key'                       => 'Ключ',\n    'model_class'               => 'Назва класу моделі',\n    'model_name'                => 'Назва моделі',\n    'model_name_ph'             => 'наприклад \\App\\User, якщо залишити порожнім - спробує використати назву таблиці',\n    'name_warning'              => 'Вкажіть стовпчик перед додаванням індексу',\n    'no_composites_warning'     => 'В даній таблиці присутній складовий індекс. Зверніть увагу, що на даний момент вони не підтримуються. Будьте обережні при додаванні/видаленні індексів.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Необов\\'язкові відомості',\n    'policy_class'              => 'Назва класу політики',\n    'policy_name'               => 'Назва політики',\n    'policy_name_ph'            => 'наприклад \\App\\Policies\\UserPolicy, якщо залишити порожнім - спробує використати політику за замовчуванням',\n    'primary'                   => 'ПЕРВИННИЙ КЛЮЧ',\n    'server_pagination'         => 'Пагінація на стороні сервера',\n    'success_create_table'      => 'Таблиця :table успішно створена',\n    'success_created_bread'     => 'Новий BREAD успішно створений',\n    'success_delete_table'      => 'Таблиця :table успішно видалена',\n    'success_remove_bread'      => 'BREAD успішно видалений з :datatype',\n    'success_update_bread'      => 'BREAD успішно оновлений в :datatype',\n    'success_update_table'      => 'Таблиця :table успішно оновлена',\n    'table_actions'             => 'Дії з таблицею',\n    'table_columns'             => 'Стовпчики таблиці',\n    'table_has_index'           => 'В даній таблиці вже є первинний ключ.',\n    'table_name'                => 'Назва таблиці',\n    'table_no_columns'          => 'В таблиці відсутні стовпчики...',\n    'type'                      => 'Тип',\n    'type_not_supported'        => 'Даний тип не підтримується',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Невідомий тип',\n    'update_table'              => 'Оновити таблицю',\n    'url_slug'                  => 'URL Slug (пвинен бути унікальним)',\n    'url_slug_ph'               => 'URL slug (наприклад, posts)',\n    'visibility'                => 'Видимість',\n];\n"
  },
  {
    "path": "publishable/lang/uk/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'В таблиці немає даних',\n    'sInfo'           => 'Показано від _START_ до _END_ з _TOTAL_ записів',\n    'sInfoEmpty'      => 'Показано 0 з 0 записів',\n    'sInfoFiltered'   => '(вибрано з _MAX_ записів)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Показати _MENU_ записів',\n    'sLoadingRecords' => 'Загрузка записів...',\n    'sProcessing'     => 'Зачекайте...',\n    'sSearch'         => 'Пошук:',\n    'sZeroRecords'    => 'Записи відсутні',\n    'oPaginate'       => [\n        'sFirst'    => 'Перша',\n        'sLast'     => 'Остання',\n        'sNext'     => 'Наступна',\n        'sPrevious' => 'Попередня',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': активувати для сортування стовпчика за зростанням',\n        'sSortDescending' => ': активувати для сортування стовпчика за спаданням',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/uk/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Минулого тижня',\n    'last_year' => 'Минулого року',\n    'this_week' => 'Цього тижня',\n    'this_year' => 'Цього року',\n];\n"
  },
  {
    "path": "publishable/lang/uk/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'сторінка|сторінки',\n    'page_link_text' => 'Всі сторінки',\n    'page_text'      => 'В базі даних :count :string',\n    'post'           => 'запис|записи',\n    'post_link_text' => 'Всі записи',\n    'post_text'      => 'В базі даних :count :string',\n    'user'           => 'користувач|користувачів',\n    'user_link_text' => 'Всі користувачі',\n    'user_text'      => 'В базі даних :count :string',\n];\n"
  },
  {
    "path": "publishable/lang/uk/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Ми щойно створили посилання для вас.',\n    'symlink_created_title'  => 'Створено відсутнє посилання на сховище даних.',\n    'symlink_failed_text'    => 'Не вдалось створити відсутнє посилання: схоже, справа в хостингу.',\n    'symlink_failed_title'   => 'Не вдалось створити посилання для сховища даних.',\n    'symlink_missing_button' => 'Виправте',\n    'symlink_missing_text'   => 'Не знайдено посилання на сховище даних: це може спричинити проблеми з завантаженням медіафайлів.',\n    'symlink_missing_title'  => 'Відсутнє посилання на сховище даних.',\n];\n"
  },
  {
    "path": "publishable/lang/uk/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Залиште порожнім, якщо не хочете змінювати пароль',\n    'field_select_dd_relationship' => 'Обов\\'язково налаштуйте відповідні стосунки (relationship) в методі :method класу :class.',\n    'type_checkbox'                => 'Чекбокс',\n    'type_codeeditor'              => 'Редактор коду',\n    'type_file'                    => 'Файл',\n    'type_image'                   => 'Зображення',\n    'type_radiobutton'             => 'Радіо-кнопка',\n    'type_richtextbox'             => 'Візуальний редактор',\n    'type_selectdropdown'          => 'Випадаючий список',\n    'type_textarea'                => 'Текстове поле',\n    'type_textbox'                 => 'Поле вводу',\n];\n"
  },
  {
    "path": "publishable/lang/uk/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Дія',\n    'actions'                => 'Дії',\n    'add'                    => 'Додати',\n    'add_folder'             => 'Додати папку',\n    'add_new'                => 'Додати',\n    'all_done'               => 'Готово',\n    'are_you_sure'           => 'Ви впевнені',\n    'are_you_sure_delete'    => 'Ви дійсно хочете видалити',\n    'ascending'              => 'За зростанням',\n    'auto_increment'         => 'Авто інкремент',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Переглянути список',\n    'builder'                => 'Конструктор',\n    'bulk_delete'            => 'Видалити відмічені',\n    'bulk_delete_confirm'    => 'Так, видалити це',\n    'bulk_delete_nothing'    => 'Ви нічого не обрали для видалення!',\n    'cancel'                 => 'Відміна',\n    'choose_type'            => 'Виберіть тип поля',\n    'click_here'             => 'Натисніть тут',\n    'close'                  => 'Закрити',\n    'compass'                => 'Компас',\n    'created_at'             => 'Дата створення',\n    'custom'                 => 'Користувацька категорія',\n    'dashboard'              => 'Панель управління',\n    'database'               => 'База даних',\n    'default'                => 'За замовчуванням',\n    'delete'                 => 'Видалити',\n    'delete_confirm'         => 'Так, видалити!',\n    'delete_question'        => 'Ви дійсно хотите видалити це?',\n    'delete_this_confirm'    => 'Так, видалити це',\n    'descending'             => 'За спаданням',\n    'deselect_all'           => 'Скасувати видалення',\n    'download'               => 'Завантаження',\n    'drag_drop_info'         => 'Пересуньте елементи, щоб змінити їх послідовність',\n    'edit'                   => 'Редагувати',\n    'email'                  => 'Електронна пошта',\n    'error_deleting'         => 'Під час видалення виникла помилка',\n    'error_restoring'        => 'Під час відновлення виникла помилка',\n    'exception'              => 'Виняток',\n    'featured'               => 'Рекомендуємий',\n    'field_does_not_exist'   => 'Поле не існує',\n    'find_by_place'          => 'Знайти за місцем',\n    'home'                   => 'Головна',\n    'how_to_use'             => 'Як використовувати',\n    'index'                  => 'Індекс',\n    'internal_error'         => 'Внутрішня помилка',\n    'items'                  => 'Елемент(и)',\n    'keep_sidebar_open'      => 'Розкривати панель',\n    'key'                    => 'Ключ',\n    'last_modified'          => 'Остання зміна',\n    'latitude'               => 'Широта',\n    'length'                 => 'Довжина',\n    'locale'                 => 'Локаль',\n    'login'                  => 'Вхід',\n    'logout'                 => 'Вихід',\n    'longitude'              => 'Довгота',\n    'media'                  => 'Медіа',\n    'menu_builder'           => 'Конструктор меню',\n    'mimetype_not_allowed'   => 'Цей тип файлу не підтримується',\n    'move'                   => 'Перемістити',\n    'name'                   => 'Назва',\n    'new'                    => 'Новинка',\n    'no'                     => 'Ні',\n    'no_thanks'              => 'Ні, дякую',\n    'none'                   => 'Не встановлено',\n    'not_null'               => 'Не Null',\n    'no_results'             => 'Немає результатів',\n    'open'                   => 'Відкрити',\n    'options'                => 'Параметри',\n    'password'               => 'Пароль',\n    'permissions'            => 'Права доступу',\n    'profile'                => 'Профіль',\n    'public_url'             => 'Загальнодоступна URL-адреса',\n    'read'                   => 'Переглянути запис',\n    'rename'                 => 'Перейменувати',\n    'remember_me'            => 'Запам\\'ятати мене',\n    'required'               => 'Обов\\'язковий',\n    'return_to_list'         => 'Повернутись до списку',\n    'route'                  => 'Маршрут',\n    'save'                   => 'Зберегти',\n    'search'                 => 'Шукати',\n    'select_all'             => 'Вибрати все',\n    'select_group'           => 'Виберіть групу чи створіть нову',\n    'settings'               => 'Налаштування',\n    'showing_entries'        => 'Показаний від :from до :to з :all запис|Показано від :from до :to з :all записів',\n    'submit'                 => 'Зберегти',\n    'successfully_added_new' => 'Успішне додання',\n    'successfully_deleted'   => 'Успішне видалення',\n    'successfully_restored'  => 'Успішне відновлення',\n    'successfully_updated'   => 'Успішне оновлення',\n    'successfully_created'   => 'Успішне створення',\n    'sweet_success'          => 'Ура! Успіх!',\n    'timestamp'              => 'Відмітка часу',\n    'title'                  => 'Назва',\n    'type'                   => 'Тип',\n    'restore'                => 'Відновлення',\n    'unsigned'               => 'Без знаку',\n    'unstick_sidebar'        => 'Відкріпити бокову панель',\n    'update'                 => 'Оновити',\n    'update_failed'          => 'Оновлення не вдалось',\n    'updated_order'          => 'Порядок збережено',\n    'upload'                 => 'Завантажити на сервер',\n    'url'                    => 'URL',\n    'view'                   => 'Переглянути',\n    'whoopsie'               => 'Упс!',\n    'viewing'                => 'Перегляд',\n    'yes'                    => 'Так',\n    'yes_please'             => 'Так, будь ласка',\n];\n"
  },
  {
    "path": "publishable/lang/uk/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'неправильний формат JSON',\n    'invalid_message'   => 'Введено неправильний формат JSON',\n    'valid'             => 'Правильний формат JSON',\n    'validation_errors' => 'Помилки при перевірці даних',\n];\n"
  },
  {
    "path": "publishable/lang/uk/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Вхід в систему',\n    'signin_below' => 'Вхід тут:',\n    'welcome'      => 'Ласкаво просимо до Voyager. Панель управління, якої не вистачало в Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/uk/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Додати нову папку',\n    'audio_support'          => 'Ваш браузер не підтримує елемент audio.',\n    'create_new_folder'      => 'Створити нову папку',\n    'delete_folder_question' => 'Видалення папки призведе до видалення всього її вмісту.',\n    'destination_folder'     => 'Папка призначення',\n    'drag_drop_info'         => 'Перетягніть файли мишкою або натисніть на кнопку знизу для завантаження.',\n    'error_already_exists'   => 'Файл/папка з такою назвою вже існує в даному каталозі',\n    'error_creating_dir'     => 'Не вдалось створити папку: перевірте права доступу',\n    'error_deleting_file'    => 'Не вдалось видалити файл: перевірте права доступу',\n    'error_deleting_folder'  => 'Не вдалось видалити папку: перевірте права доступу',\n    'error_may_exist'        => 'Файл чи папка з такою назвою вже існує: виберіть іншу назву або видаліть існуючий файл!',\n    'error_moving'           => 'Не вдалось перемістити файл чи папку: перевірте права доступу.',\n    'error_uploading'        => 'Помилка завантаження: сталась невідома помилка!',\n    'folder_exists_already'  => 'Папка з такою назвою вже існує: видаліть її, якщо хочете створити нову з такою ж назвою.',\n    'image_does_not_exist'   => 'Зображення не існує',\n    'image_removed'          => 'Зображення видалено',\n    'library'                => 'Медіатека',\n    'loading'                => 'ЙДЕ ЗАВАНТАЖЕННЯ ВАШИХ ФАЙЛІВ',\n    'move_file_folder'       => 'Перемістити файл/папку',\n    'new_file_folder'        => 'Нова назва файлу/папки',\n    'new_folder_name'        => 'Нова назва папки',\n    'no_files_here'          => 'Тут немає файлів',\n    'no_files_in_folder'     => 'Відсутні файли в даній папці',\n    'nothing_selected'       => 'Нічого не обрано',\n    'rename_file_folder'     => 'Перейменувати файл/папку',\n    'success_uploaded_file'  => 'Успішне завантаження файлу!',\n    'success_uploading'      => 'Успішне завантаження зображення!',\n    'uploading_wrong_type'   => 'Помилка завантаження: непідтримуваний формат файлу або завеликий розмір файлу для завантаження!',\n    'video_support'          => 'Ваш браузер не підтримує елемент video.',\n    'crop'                   => 'Обрізати',\n    'crop_and_create'        => 'Обрізати та створити',\n    'crop_override_confirm'  => 'Існуюче зображення буде змінене, ви впевнені?',\n    'crop_image'             => 'Обрізати зображення',\n    'success_crop_image'     => 'Зображення успішно обрізано',\n    'height'                 => 'Висота: ',\n    'width'                  => 'Ширина: ',\n    'add_all_selected'       => 'Додати всі вибрані',\n];\n"
  },
  {
    "path": "publishable/lang/uk/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Колір в RGB чи hex (необов\\'язково)',\n    'color_ph'             => 'Колір (наприклад, #ffffff чи rgb(255, 255, 255)',\n    'create_new_item'      => 'Створити новий пункт меню',\n    'delete_item_confirm'  => 'Так, видалити цей пункт меню',\n    'delete_item_question' => 'Ви впевнені, що хочете видалити цей пункт меню?',\n    'drag_drop_info'       => 'Перетягніть пункти меню нижче, щоб змінити їх порядок.',\n    'dynamic_route'        => 'Динамічний шлях',\n    'edit_item'            => 'Редагувати пункт меню',\n    'icon_class'           => 'Іконка для пункту меню (Використовуйте ',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Іконка (необов\\'язково)',\n    'item_route'           => 'Шлях для пункту меню',\n    'item_title'           => 'Назва пункту меню',\n    'link_type'            => 'Тип посилання',\n    'new_menu_item'        => 'Новий пункт меню',\n    'open_in'              => 'Відкрити в',\n    'open_new'             => 'Нова вкладка/вікно',\n    'open_same'            => 'Та ж вкладка/вікно',\n    'route_parameter'      => 'Параметри шляху (якщо є)',\n    'static_url'           => 'Статичний URL',\n    'successfully_created' => 'Пункт меню успішно створено.',\n    'successfully_deleted' => 'Пункт меню успішно видалено.',\n    'successfully_updated' => 'Пункт меню успішно оновлено.',\n    'updated_order'        => 'Структуру меню успішно оновлено.',\n    'url'                  => 'URL для пункту меню',\n    'usage_hint'           => 'Ви можете вивести меню в будь-якому місці вашого сайту, викликавши |Ви можете вивести це меню в будь-якому місці вашого сайту, викликавши ',\n];\n"
  },
  {
    "path": "publishable/lang/uk/post.php",
    "content": "<?php\n\nreturn [\n    'category'         => 'Категорія повідомлення',\n    'content'          => 'Текст повідомлення',\n    'details'          => 'Властивості',\n    'excerpt'          => 'Анонс <small>Короткий опис статті</small>',\n    'image'            => 'Зображення',\n    'meta_description' => 'Опис (meta)',\n    'meta_keywords'    => 'Ключові слова (meta)',\n    'new'              => 'Опублікувати',\n    'seo_content'      => 'SEO текст',\n    'seo_title'        => 'SEO назва',\n    'slug'             => 'Посилання',\n    'status'           => 'Статус публікації',\n    'status_draft'     => 'Чернетка',\n    'status_pending'   => 'На модерації',\n    'status_published' => 'Опубліковано',\n    'title'            => 'Заголовок',\n    'title_sub'        => 'Назва статті',\n    'update'           => 'Оновити',\n];\n"
  },
  {
    "path": "publishable/lang/uk/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'        => 'Фото',\n    'edit'          => 'Налаштування профілю',\n    'edit_user'     => 'Змінити профіль',\n    'password'      => 'Пароль',\n    'password_hint' => 'Залиште порожнім, щоб не змінювати',\n    'role'          => 'Роль',\n    'user_role'     => 'Роль користувача',\n];\n"
  },
  {
    "path": "publishable/lang/uk/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Для того, щоб отримати значення параметрів, використовуйте в шаблоні код ',\n    'save'                 => 'Зберегти налаштування',\n    'new'                  => 'Створити налаштування',\n    'help_name'            => 'Назва параметру (наприклад, Мій параметр)',\n    'help_key'             => 'Ключ параметру (наприклад, my_parametr)',\n    'help_option'          => '(необов\\'язково, застосовується тільки до випадаючого списку чи радіо-кнопок)',\n    'add_new'              => 'Додати новий параметр',\n    'delete_question'      => 'Ви впевнені, що потрібно видалити параметр :setting?',\n    'delete_confirm'       => 'Так, видалити цей параметр',\n    'successfully_created' => 'Параметри успішно створені',\n    'successfully_saved'   => 'Параметри успішно збережені',\n    'successfully_deleted' => 'Параметри успішно видалені',\n    'already_at_top'       => 'Вже розміщено вверху списку',\n    'already_at_bottom'    => 'Вже розміщено внизу списку',\n    'moved_order_up'       => 'Параметр :name переміщено догори',\n    'moved_order_down'     => 'Параметр :name переміщено донизу',\n    'key_already_exists'   => 'Цей ключ :key вже існує',\n    'successfully_removed' => 'Успішно видалено значення параметру :name',\n    'group_general'        => 'Основне',\n    'group_admin'          => 'Адмін',\n    'group_site'           => 'Сайт',\n    'group'                => 'Група',\n    'help_group'           => 'Прив\\'язати це налаштування до групи',\n];\n"
  },
  {
    "path": "publishable/lang/uk/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Зроблено з <i class=\"voyager-heart\"></i> ',\n    'footer_copyright2' => 'Зроблено під ромом :) ',\n];\n"
  },
  {
    "path": "publishable/lang/vi/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => 'Theo lượt xem',\n    'by_sessions'            => 'Theo phiên kết nối',\n    'by_users'               => 'Theo người dùng',\n    'no_client_id'           => 'Để xem được thông tin về lượt truy cập website, bạn cần có Google Analytics Client ID và thêm vào <code>google_analytics_client_id</code> trong phần cài đặt. Nhận mã trong Google developer console:',\n    'set_view'               => 'Xem theo',\n    'this_vs_last_week'      => 'Tuần này và tuần trước',\n    'this_vs_last_year'      => 'Năm nay và năm trước',\n    'top_browsers'           => 'Trình duyệt',\n    'top_countries'          => 'Quốc gia',\n    'various_visualizations' => 'Các phần khác',\n];\n"
  },
  {
    "path": "publishable/lang/vi/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => 'Thêm BREAD cho bảng bày',\n    'bread_crud_actions'     => 'BREAD/CRUD Thao tác',\n    'bread_info'             => '- Thông tin BREAD ',\n    'controller_name_hint'   => 'VD: PageController, nếu để trống sẽ sử dụng BREAD Controller',\n    'create_bread_for_table' => 'Tạo BREAD cho bảng :table',\n    'default_search_key'     => 'Trường tìm kiểm mặc định',\n    'default_search_key_ph'  => 'Trường này sẽ được chọn sẵn cho tìm kiếm server-side',\n    'delete_bread'           => 'Xóa BREAD',\n    'delete_bread_conf'      => 'Chắc chắn, xóa BREAD này',\n    'delete_bread_quest'     => 'Bạn có chắc là muốn xóa BREAD của bảng :table?',\n    'edit_bread'             => 'Chỉnh sửa BREAD',\n    'edit_bread_for_table'   => 'Chỉnh sửa BREAD cho bảng :table',\n    'error_creating_bread'   => 'Xin lỗi, có vẻ như đã xảy ra sự cố khi đang tạo BREAD này',\n    'error_removing_bread'   => 'Xin lỗi, có vẻ như đã xảy ra sự cố khi đang xóa BREAD này',\n    'error_updating_bread'   => 'Xin lỗi, có vẻ như đã xảy ra sự cố khi đang cập nhật BREAD này',\n    'error_tagging'          => 'Xin lỗi, có vẻ như đã xảy ra sự cố khi đang tạo bảng ghi. Đảm bảo là bảng của bạn có giá trị mặc định cho các trường khác',\n    'success_created_bread'  => 'Tạo BREAD mới thành công',\n    'success_remove_bread'   => 'Xóa BREAD khỏi :datatype thành công',\n    'success_update_bread'   => 'Cập nhật BREAD :datatype thành công',\n    'controller_name'        => 'Tên Controller',\n    'create_migration'       => 'Tạo migration cho bảng này?',\n    'description'            => 'Mô tả',\n    'display_name'           => 'Tên hiển thị',\n    'display_name_plural'    => 'Tên hiển thị (Số nhiều)',\n    'display_name_singular'  => 'Tên hiển thị (Số ít)',\n    'edit_rows'              => 'Chỉnh sửa trường cho bảng :table ở bên dưới',\n    'generate_permissions'   => 'Tạo phân quyền',\n    'icon_class'             => 'Icon dùng cho bảng',\n    'icon_hint'              => 'Icon (không bắt buộc). Sử dụng',\n    'icon_hint2'             => 'Voyager Font Class',\n    'model_class'            => 'Tên Model Class',\n    'model_name'             => 'Tên Model',\n    'model_name_ph'          => 'VD: \\App\\User, nếu để trống sẽ sử dụng tên của bảng',\n    'order'                  => 'Sắp xếp',\n    'order_column'           => 'Sắp xếp theo cột',\n    'order_column_ph'        => 'Cột này sẽ được sử dụng để sắp xếp các dòng trong bảng',\n    'order_direction'        => 'Sắp xếp theo',\n    'order_ident_column'     => 'Tên cột sắp xếp hiển thị',\n    'order_ident_column_ph'  => 'Cột này sẽ được hiển thị trong trang sắp xếp',\n    'ordering_not_set'       => 'Bạn phải chọn cột sắp xếp trước',\n    'policy_class'           => 'Tên Policy Class',\n    'policy_name'            => 'Tên Policy',\n    'policy_name_ph'         => 'VD: \\App\\Policies\\UserPolicy, nếu để trống sẽ sử dụng Policy mặc định',\n    'server_pagination'      => 'Phân trang server-side',\n    'scope'                  => 'Scope',\n    'soft_deletes_on'        => 'Hiển thị đã xóa',\n    'soft_deletes_off'       => 'Ẩn đã xóa',\n    'updated_order'          => 'Sắp xếp thành công',\n    'url_slug'               => 'URL Slug (không trùng lặp)',\n    'url_slug_ph'            => 'URL slug (VD: post)',\n];\n"
  },
  {
    "path": "publishable/lang/vi/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => 'Welcome to the Voyager Compass. Every good app needs a compass to point them in the right direction.\n    In this section you will find many resources and administrative tasks to help guide you as you build out your application.',\n    'links'         => [\n        'title'                 => 'Links',\n        'documentation'         => 'Documentation',\n        'voyager_homepage'      => 'Voyager Homepage',\n    ],\n    'commands'      => [\n        'title'                 => 'Commands',\n        'text'                  => 'Run Artisan Commands from Voyager.',\n        'clear_output'          => 'clear output',\n        'command_output'        => 'Artisan Command Output',\n        'additional_args'       => 'Additional Args?',\n        'run_command'           => 'Run Command',\n    ],\n    'resources'     => [\n        'title'                 => 'Resources',\n        'text'                  => 'Voyager resources to help you find things quicker.',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Logs',\n        'text'                  => 'Your app logs',\n        'file_too_big'          => 'Log file >50M, please download it.',\n        'level'                 => 'Level',\n        'context'               => 'Context',\n        'date'                  => 'Date',\n        'content'               => 'Content',\n        'download_file'         => 'Download file',\n        'delete_file'           => 'Delete file',\n        'delete_all_files'      => 'Delete all files',\n        'delete_success'        => 'Successfully deleted log file:',\n        'delete_all_success'    => 'Successfully deleted all log files',\n\n    ],\n    'fonts'         => [\n        'title'                 => 'Fonts',\n        'font_class'            => 'Voyager Fonts Class Mapping',\n        'font_character'        => 'Voyager Fonts Character Mapping',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/vi/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => 'Thêm cột mới',\n    'add_softdeletes'           => 'Thêm cột xóa tạm',\n    'add_timestamps'            => 'Thêm nhãn thời gian',\n    'already_exists'            => 'đã tồn tại',\n    'already_exists_table'      => 'Bảng :table đã tạo sẵn',\n    'bread_crud_actions'        => 'BREAD/CRUD Thao tác',\n    'bread_info'                => 'Thông tin BREAD',\n    'browse_bread'              => 'Xem BREAD',\n    'column'                    => 'Cột',\n    'composite_warning'         => 'Cảnh báo: cột này là một phần của index',\n    'create_new_table'          => 'Tạo bảng mới',\n    'create_your_new_table'     => 'Tạo bảng dữ liệu mới',\n    'create_model_table'        => 'Tạo file model cho bảng?',\n    'default'                   => 'Mặc định',\n    'delete_bread_before_table' => 'Hãy chắc là đã xóa BREAD của bảng này trước khi xóa bảng',\n    'delete_table_confirm'      => 'Có, hãy xóa bảng',\n    'delete_table_question'     => 'Bạn có chắn chắc là muốn xóa bảng :table?',\n    'editing_table'             => 'Đang chỉnh sửa bảng :table',\n    'edit_table'                => 'Chỉnh sửa bảng :table ở bên dưới',\n    'edit_table_not_exist'      => 'Bảng mà bạn muốn xóa không tồn tại',\n    'extra'                     => 'Đặc biệt',\n    'field'                     => 'Trường',\n    'field_safe_failed'         => 'Lưu trường :field thất bại, khôi phục lại!',\n    'index'                     => 'INDEX',\n    'input_type'                => 'Kiểu dữ liệu đầu vào',\n    'key'                       => 'Khóa',\n    'name_warning'              => 'Hãy đặt tên cột trước khi thêm index',\n    'no_composites_warning'     => 'Bảng này có các thông số indexes. Không được hỗ trợ tại thời điểm hiện tại. Cẩn thận khi thêm/xóa indexes.',\n    'null'                      => 'Null',\n    'optional_details'          => 'Tùy chỉnh chi tiết',\n    'policy_class'              => 'Tên Policy Class',\n    'policy_name'               => 'Tên Policy',\n    'policy_name_ph'            => 'VD: \\App\\Policies\\UserPolicy, nếu để trống sẽ sử dụng Policy mặc định.',\n    'primary'                   => 'PRIMARY',\n    'server_pagination'         => 'Phân trang Server-side',\n    'success_create_table'      => 'Đã tạo bảng :table',\n    'success_created_bread'     => 'Tạo mới BREAD thành công',\n    'success_delete_table'      => 'Đã xóa bảng :table',\n    'success_remove_bread'      => 'Đã xóa BREAD từ :datatype',\n    'success_update_bread'      => 'Đã cập nhật :datatype BREAD',\n    'success_update_table'      => 'Đã cập nhật bảng :table',\n    'table_actions'             => 'Thao tác',\n    'table_columns'             => 'Tên cột',\n    'table_has_index'           => 'Bảng đã có Primary.',\n    'table_name'                => 'Tên bảng',\n    'table_no_columns'          => 'Bảng không có cột nào...',\n    'type'                      => 'Kiểu dữ liệu',\n    'type_not_supported'        => 'Kiểu dữ liệu này không được hỗ trợ',\n    'unique'                    => 'UNIQUE',\n    'unknown_type'              => 'Unknown Type',\n    'update_table'              => 'Cập nhật bảng',\n    'url_slug'                  => 'URL Slug (không trùng lặp)',\n    'url_slug_ph'               => 'URL slug (VD: posts)',\n    'visibility'                => 'Hiển thị',\n    'relationship'              => [\n        'relationship'         => 'Relationship',\n        'relationships'        => 'Relationships',\n        'has_one'              => 'Có một',\n        'has_many'             => 'Có nhiều',\n        'belongs_to'           => 'Thuộc về một',\n        'belongs_to_many'      => 'Thuộc về nhiều',\n        'which_column_from'    => 'Cột nào từ bảng',\n        'is_used_to_reference' => 'sẽ được sử dụng để liên kết với bảng',\n        'pivot_table'          => 'Bảng liên kết',\n        'selection_details'    => 'Lựa chọn chi tiết',\n        'display_the'          => 'Giá trị hiển thị của',\n        'store_the'            => 'Giá trị lưu trữ',\n        'allow_tagging'        => 'Cho phép Tagging',\n        'easy_there'           => 'Easy there Captain',\n        'before_create'        => 'Bạn cần tạo BREAD trước khi tạo relationship.<br> Sau đó, quay lại chỉnh sửa BREAD và bạn có thể thêm relationship.<br> Cám ơn.',\n        'cancel'               => 'Hủy',\n        'add_new'              => 'Thêm mới relationship',\n        'open'                 => 'Mở',\n        'close'                => 'Đóng',\n        'relationship_details' => 'Chi tiết relationship',\n        'browse'               => 'Danh sách',\n        'read'                 => 'Xem',\n        'edit'                 => 'Chỉnh sửa',\n        'add'                  => 'Thêm',\n        'delete'               => 'Xóa',\n        'create'               => 'Tạo một Relationship',\n        'namespace'            => 'Tên đầy đủ của Model (VD: App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/vi/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => 'Không có dữ liệu trong bảng',\n    'sInfo'           => 'Hiển thị _START_ đến _END_ trong tổng số _TOTAL_ mục',\n    'sInfoEmpty'      => 'Không có kết quả để hiển thị',\n    'sInfoFiltered'   => '(được lọc từ _MAX_ mục)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => 'Xem _MENU_ mục',\n    'sLoadingRecords' => 'Loading...',\n    'sProcessing'     => 'Đang xử lý...',\n    'sSearch'         => 'Search:',\n    'sZeroRecords'    => 'Không tìm thấy dữ liệu',\n    'oPaginate'       => [\n        'sFirst'    => 'Đầu',\n        'sLast'     => 'Cuối',\n        'sNext'     => 'Tiếp',\n        'sPrevious' => 'Trước',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': sắp xếp cột theo thứ tự tăng dần',\n        'sSortDescending' => ': sắp xếp cột theo thứ tự giảm dần',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/vi/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => 'Tuần Trước',\n    'last_year' => 'Năm Trước',\n    'this_week' => 'Tuần Này',\n    'this_year' => 'Năm Nay',\n];\n"
  },
  {
    "path": "publishable/lang/vi/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => 'Trang',\n    'page_link_text' => 'Tất cả trang',\n    'page_text'      => 'Bạn có :count :string trong cơ sở dữ liệu. Bấm vào nút bên dưới để xem tất cả trang.',\n    'post'           => 'Bài viết',\n    'post_link_text' => 'Tất cả bài viết',\n    'post_text'      => 'Bạn có :count :string trong cơ sở dữ liệu. Bấm vào nút bên dưới để xem tất cả bài viết.',\n    'user'           => 'User|Users',\n    'user_link_text' => 'Tất cả users',\n    'user_text'      => 'Bạn có :count :string trong cơ sở dữ liệu. Bấm vào nút bên dưới để xem tất cả users.',\n];\n"
  },
  {
    "path": "publishable/lang/vi/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => 'Đã tạo liên kết tượng trưng.',\n    'symlink_created_title'  => 'Liên kết lưu trữ tượng trưng đã được tạo.',\n    'symlink_failed_text'    => 'Thất bại trong việc tạo lại liên kết tượng trưng. Trông giống như là nhà cung cấp Hosting không hỗ trợ điều này.',\n    'symlink_failed_title'   => 'Không thể tạo liên kết lưu trữ tượng trưng',\n    'symlink_missing_button' => 'Sửa ngay',\n    'symlink_missing_text'   => 'Không tìm thấy liên kết lưu trữ tượng trưng. Điều này có thể gây ra vấn đề khi tải tập tin đa phương tiện từ trình duyệt',\n    'symlink_missing_title'  => 'Thiếu liên kết lưu trữ tượng trưng.',\n];\n"
  },
  {
    "path": "publishable/lang/vi/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => 'Để trống nếu muốn giữ nguyên',\n    'field_select_dd_relationship' => 'Đảm bảo thiết lập relationship phù hợp trong phương thức :method của class :class.',\n    'type_checkbox'                => 'Check Box',\n    'type_codeeditor'              => 'Code Editor',\n    'type_file'                    => 'File',\n    'type_image'                   => 'Image',\n    'type_radiobutton'             => 'Radio Button',\n    'type_richtextbox'             => 'Rich Textbox',\n    'type_selectdropdown'          => 'Select Dropdown',\n    'type_textarea'                => 'Text Area',\n    'type_textbox'                 => 'Text Box',\n];\n"
  },
  {
    "path": "publishable/lang/vi/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => 'Thao tác',\n    'actions'                => 'Các thao tác',\n    'add'                    => 'Thêm',\n    'add_folder'             => 'Thêm thư mục',\n    'add_new'                => 'Thêm mới',\n    'all_done'               => 'Tất cả hoàn tất',\n    'are_you_sure'           => 'Bạn có chắc không',\n    'are_you_sure_delete'    => 'Bạn có chắc là muốn xóa',\n    'ascending'              => 'Tăng dần',\n    'auto_increment'         => 'Tự động tăng',\n    'bread'                  => 'BREAD',\n    'browse'                 => 'Danh sách',\n    'builder'                => 'Tùy chỉnh',\n    'bulk_delete'            => 'Xóa đồng loạt',\n    'bulk_delete_confirm'    => 'Chắc chắn',\n    'bulk_delete_nothing'    => 'Bạn chưa chọn dòng để xóa',\n    'cancel'                 => 'Hủy',\n    'choose_type'            => 'Chọn kiểu',\n    'click_here'             => 'Nhấn vào đây',\n    'close'                  => 'Đóng',\n    'compass'                => 'Compass',\n    'created_at'             => 'Tạo lúc',\n    'custom'                 => 'Tùy chọn',\n    'dashboard'              => 'Bảng điều khiển',\n    'database'               => 'Cơ sở dữ liệu',\n    'default'                => 'Mặc định',\n    'delete'                 => 'Xóa',\n    'delete_confirm'         => 'Chắc chắn, xóa!',\n    'delete_question'        => 'Bạn có chắc chắn là muốn xóa dữ liệu này',\n    'delete_this_confirm'    => 'Chắc chắn',\n    'descending'             => 'Giảm dần',\n    'deselect_all'           => 'Bỏ chọn tất cả',\n    'download'               => 'Tải về',\n    'drag_drop_info'         => 'Kéo và thả Items bên dưới để sắp xếp lại thứ tự của chúng',\n    'edit'                   => 'Chỉnh sửa',\n    'email'                  => 'E-mail',\n    'error_deleting'         => 'Xin lỗi, đã xảy ra sự cố khi xóa',\n    'error_restoring'        => 'Xin lỗi, đã xảy ra sự cố khi khôi phục',\n    'exception'              => 'Không thể thực hiện',\n    'featured'               => 'Nổi bật',\n    'field_does_not_exist'   => 'Trường không tồn tại',\n    'home'                   => 'Trang chủ',\n    'how_to_use'             => 'Cách sử dụng',\n    'index'                  => 'Index',\n    'internal_error'         => 'Lỗi hệ thống',\n    'items'                  => 'item(s)',\n    'keep_sidebar_open'      => 'Yarr! Drop the anchors! (and keep the sidebar open)',\n    'key'                    => 'Khóa',\n    'last_modified'          => 'Thay đổi cuối cùng',\n    'length'                 => 'Độ dài',\n    'locale'                 => 'Ngôn ngữ',\n    'login'                  => 'Đăng nhập',\n    'logout'                 => 'Đăng xuất',\n    'media'                  => 'Media',\n    'menu_builder'           => 'Xây dựng Menu',\n    'mimetype_not_allowed'   => 'Mimetype này không hợp lệ',\n    'move'                   => 'Di chuyển',\n    'name'                   => 'Tên',\n    'new'                    => 'Mới',\n    'no'                     => 'Không',\n    'no_thanks'              => 'Không, cảm ơn',\n    'none'                   => 'Chưa chọn',\n    'not_null'               => 'Không để trống',\n    'no_results'             => 'Trống.',\n    'open'                   => 'Mở',\n    'options'                => 'Tùy chọn',\n    'password'               => 'Mật khẩu',\n    'permissions'            => 'Phân quyền',\n    'profile'                => 'Hồ sở',\n    'public_url'             => 'URL công khai',\n    'read'                   => 'Xem',\n    'rename'                 => 'Đổi tên',\n    'remember_me'            => 'Ghi nhớ đăng nhập',\n    'required'               => 'Bắt buộc',\n    'return_to_list'         => 'Quay lại trang danh sách',\n    'route'                  => 'Route',\n    'save'                   => 'Lưu',\n    'search'                 => 'Tìm kiếm',\n    'select_all'             => 'Chọn tất cả',\n    'select_group'           => 'Chọn nhóm có sẵn hoặc thêm mới',\n    'settings'               => 'Cài đặt',\n    'showing_entries'        => 'Hiển thị từ :from đến :to trên :all kết quả|Hiển thị từ :from đến :to trên :all kết quả',\n    'submit'                 => 'Xác nhận',\n    'successfully_added_new' => 'Thêm mới thành công',\n    'successfully_deleted'   => 'Xóa thành công',\n    'successfully_restored'  => 'Khôi phục thành công',\n    'successfully_updated'   => 'Cập nhật thành công',\n    'successfully_created'   => 'Tạo mới thành công',\n    'sweet_success'          => 'Thành công!',\n    'timestamp'              => 'Nhãn thời gian',\n    'title'                  => 'Tiêu đề',\n    'type'                   => 'Kiểu',\n    'restore'                => 'Khôi phục',\n    'unsigned'               => 'Không dấu',\n    'unstick_sidebar'        => 'Bỏ cố định sidebar',\n    'update'                 => 'Cập nhật',\n    'update_failed'          => 'Cập nhật thất bại',\n    'updated_order'          => 'Cập nhật thứ tự',\n    'upload'                 => 'Tải lên',\n    'url'                    => 'URL',\n    'view'                   => 'Xem',\n    'viewing'                => 'Đang xem',\n    'whoopsie'               => 'Rát tiếc!',\n    'yes'                    => 'Có',\n    'yes_please'             => 'Có',\n];\n"
  },
  {
    "path": "publishable/lang/vi/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'JSON không hợp lệ',\n    'invalid_message'   => 'JSON đã nhập không hợp lệ.',\n    'valid'             => 'JSON hợp lệ.',\n    'validation_errors' => 'Lỗi chứng thực.',\n];\n"
  },
  {
    "path": "publishable/lang/vi/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => 'Đang đăng nhập',\n    'signin_below' => 'Đăng nhập:',\n    'welcome'      => 'Chào mừng đến với Voyager. Hệ thống quản trị dành cho Laravel',\n];\n"
  },
  {
    "path": "publishable/lang/vi/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => 'Thư mục mới',\n    'audio_support'          => 'Trình duyệt không hỗ trợ tập tin audio.',\n    'create_new_folder'      => 'Tạo thư mục mới',\n    'delete_folder_question' => 'Xóa một thư mục sẽ xóa tất cả tập tin và thư mục con bên trong.',\n    'delete_question'        => 'Bạn có chắc là muốn xóa tập tin đang chọn?',\n    'destination_folder'     => 'Thư mục chuyển tới',\n    'drag_drop_info'         => 'Kéo và thả tập tin hoặc nhấn vào bên dưới để tải lên.',\n    'error_already_exists'   => 'Rất tiếc! Tên trùng với tập tin/thư mục đã có trong thư mục này.',\n    'error_creating_dir'     => 'Rất tiếc! Đã xảy ra lỗi trong quá trình tạo thư mục, vui lòng kiểm tra lại phân quyền của bạn.',\n    'error_deleting_file'    => 'Rất tiếc! Đã xảy ra lỗi trong quá trình xóa tập tin, vui lòng kiểm tra lại phân quyền của bạn.',\n    'error_deleting_folder'  => 'Rất tiếc! Đã xảy ra lỗi trong quá trình xóa thư mục, vui lòng kiểm tra lại phân quyền của bạn.',\n    'error_may_exist'        => 'Đã có tập tin hoặc thư mục sử dụng tên này. Vui lòng chọn tên khác hoặc xóa tập tin/thu mục bị trùng lập.',\n    'error_moving'           => 'Rất tiếc! Đã xảy ra lỗi trong quá trình di chuyển tập tin/thư mục, vui lòng kiểm tra lại phân quyền của bạn.',\n    'error_uploading'        => 'Tải lên không thành công: Lỗi không xác định!',\n    'files'                  => '1 tập tin|:count tập tin',\n    'files_more'             => 'Và :count nữa',\n    'file_does_not_exist'    => 'Tập tin không tồn tại',\n    'file_removed'           => 'Đã xóa tập tin',\n    'files_selected'         => 'Đã chọn tập tin/thư mục',\n    'folder_exists_already'  => 'Rất tiếc! Thư mục này hiện đã tồn tại, vui lòng xóa thư mục nếu bạn muốn tạo lại nó.',\n    'image_does_not_exist'   => 'Hình ảnh không tồn tại',\n    'image_removed'          => 'Đã xóa hình ảnh',\n    'library'                => 'Thư viện đa phương tiện',\n    'loading'                => 'ĐANG TẢI TẬP TIN',\n    'max_files_select'       => 'Bạn chỉ cố thể chọn một tập tin|Bạn chỉ cố thể chọn tối đa :count tập tin',\n    'min_files_select'       => 'Bạn phải chọn ít nhất một tập tin|Bản phải chọn ít nhất :count tập tin',\n    'move_file_folder'       => 'Di chuyển Tập tin/Thư mục',\n    'new_file_folder'        => 'Tên mới Tập tin/Thư mục',\n    'new_folder_name'        => 'Tên Thư mục mới',\n    'no_files_here'          => 'Không có tập nào ở đây.',\n    'no_files_in_folder'     => 'Không có tập tin trong thư mục này.',\n    'nothing_selected'       => 'Không có tập tin hoặc thư mục được chọn',\n    'rename_file_folder'     => 'Đổi tên Tập tin/Thư mục',\n    'success_uploaded_file'  => 'Tải tập tin mới lên thành công!',\n    'success_uploading'      => 'Tải hình ảnh lên thành công!',\n    'success_moved'          => 'Đã di chuyển Tập tin/Thư mục',\n    'success_renamed'        => 'Đã đổi tên Tập tin/Thư mục',\n    'uploading_wrong_type'   => 'Tải lên thất bại: Định dạng của tập tin không được hỗ trợ hoặc có dung lượng quá lớn!',\n    'crop'                   => 'Cắt',\n    'crop_and_create'        => 'Cắt & Tạo mới',\n    'crop_override_confirm'  => 'Sẽ ghi đè lên hình ảnh gốc, bạn có chắc không?',\n    'crop_image'             => 'Cắt hình ảnh',\n    'success_crop_image'     => 'Cắt hình ảnh thành công',\n    'height'                 => 'Chiều cao: ',\n    'title'                  => 'Tiêu đề',\n    'type'                   => 'Kiểu',\n    'size'                   => 'Kích thước',\n    'public_url'             => 'URL công khai',\n    'last_modified'          => 'Chỉnh sửa lần cuối',\n    'browser_video_support'  => 'Trình duyệt của bạn không hỗ trợ phát video',\n    'browser_audio_support'  => 'Trình duyệt không hỗ trợ tập tin audio.',\n    'width'                  => 'Chiều rộng: ',\n    'add_all_selected'       => 'Thêm tất cả đã chọn',\n];\n"
  },
  {
    "path": "publishable/lang/vi/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'Mã màu RGB hoặc Hex (không bắt buộc)',\n    'color_ph'             => 'Mã màu, VD: #ffffff hoặc rgb(255, 255, 255)',\n    'create_new_item'      => 'Tạo một mục mới',\n    'delete_item_confirm'  => 'Có, hãy xóa mục này',\n    'delete_item_question' => 'Bạn có chắc là muốn xóa mục này không?',\n    'drag_drop_info'       => 'Kéo và thả những mục trong menu bên dưới để sắp xếp thứ tự của chúng.',\n    'dynamic_route'        => 'Route',\n    'edit_item'            => 'Chỉnh sửa mục',\n    'icon_class'           => 'Font Icon class cho mục này (Sử dụng một',\n    'icon_class2'          => 'Voyager Font Class</a>)',\n    'icon_class_ph'        => 'Icon Class (không bắt buộc)',\n    'item_route'           => 'Route cho mục này',\n    'item_title'           => 'Tiêu đề của mục',\n    'link_type'            => 'Kiểu liên kết',\n    'new_menu_item'        => 'Thêm mục mới',\n    'open_in'              => 'Mở trong',\n    'open_new'             => 'Tab/Window Mới',\n    'open_same'            => 'Cùng Tab/Window',\n    'route_parameter'      => 'Thông số Route (nếu có)',\n    'static_url'           => 'URL',\n    'successfully_created' => 'Tạo mục mới thành công.',\n    'successfully_deleted' => 'Xóa mục thành công.',\n    'successfully_updated' => 'cập nhật mục thành công.',\n    'updated_order'        => 'Cập nhật menu thành công.',\n    'url'                  => 'URL cho mục này',\n    'usage_hint'           => 'Bạn có thể hiển thị một menu ở bất kỳ nơi nào trên trang web bằng cách gọi hàm|Bạn có thể hiển thị menu này ở bất kỳ nơi nào trên trang web bằng cách gọi hàm',\n];\n"
  },
  {
    "path": "publishable/lang/vi/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> 'Additional Fields',\n    'category'         => 'Post Category',\n    'content'          => 'Post Content',\n    'details'          => 'Post Details',\n    'excerpt'          => 'Excerpt <small>Small description of this post</small>',\n    'image'            => 'Post Image',\n    'meta_description' => 'Meta Description',\n    'meta_keywords'    => 'Meta Keywords',\n    'new'              => 'Create New Post',\n    'seo_content'      => 'SEO Content',\n    'seo_title'        => 'SEO Title',\n    'slug'             => 'URL slug',\n    'status'           => 'Post Status',\n    'status_draft'     => 'draft',\n    'status_pending'   => 'pending',\n    'status_published' => 'published',\n    'title'            => 'Post Title',\n    'title_sub'        => 'The title for your post',\n    'update'           => 'Update Post',\n];\n"
  },
  {
    "path": "publishable/lang/vi/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => 'Ảnh đại diện',\n    'edit'             => 'Chính sửa hồ sơ',\n    'edit_user'        => 'Chỉnh sửa user',\n    'password'         => 'Mật khẩu',\n    'password_hint'    => 'Để trống nếu muốn tiếp tục sử dụng mật khẩu cũ.',\n    'role'             => 'Chức vụ',\n    'roles'            => 'Chức vụ',\n    'role_default'     => 'Chức vụ chính',\n    'roles_additional' => 'Chức vụ phụ',\n    'user_role'        => 'Chức vụ user',\n];\n"
  },
  {
    "path": "publishable/lang/vi/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => 'Author',\n        'avatar'           => 'Avatar',\n        'body'             => 'Body',\n        'category'         => 'Category',\n        'created_at'       => 'Created At',\n        'display_name'     => 'Display Name',\n        'email'            => 'Email',\n        'excerpt'          => 'Excerpt',\n        'featured'         => 'Featured',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Description',\n        'meta_keywords'    => 'Meta Keywords',\n        'name'             => 'Name',\n        'order'            => 'Order',\n        'page_image'       => 'Page Image',\n        'parent'           => 'Parent',\n        'password'         => 'Password',\n        'post_image'       => 'Post Image',\n        'remember_token'   => 'Remember Token',\n        'role'             => 'Role',\n        'seo_title'        => 'SEO Title',\n        'slug'             => 'Slug',\n        'status'           => 'Status',\n        'title'            => 'Title',\n        'updated_at'       => 'Updated At',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => 'Category',\n            'plural'   => 'Categories',\n        ],\n        'menu'     => [\n            'singular' => 'Menu',\n            'plural'   => 'Menus',\n        ],\n        'page'     => [\n            'singular' => 'Page',\n            'plural'   => 'Pages',\n        ],\n        'post'     => [\n            'singular' => 'Post',\n            'plural'   => 'Posts',\n        ],\n        'role'     => [\n            'singular' => 'Role',\n            'plural'   => 'Roles',\n        ],\n        'user'     => [\n            'singular' => 'User',\n            'plural'   => 'Users',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => 'Categories',\n        'compass'      => 'Compass',\n        'dashboard'    => 'Dashboard',\n        'database'     => 'Database',\n        'media'        => 'Media',\n        'menu_builder' => 'Menu Builder',\n        'pages'        => 'Pages',\n        'posts'        => 'Posts',\n        'roles'        => 'Roles',\n        'settings'     => 'Settings',\n        'tools'        => 'Tools',\n        'users'        => 'Users',\n    ],\n    'roles'      => [\n        'admin' => 'Administrator',\n        'user'  => 'Normal User',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => 'Admin Background Image',\n            'description'                => 'Admin Description',\n            'description_value'          => 'Welcome to Voyager. The Missing Admin for Laravel',\n            'google_analytics_client_id' => 'Google Analytics Client ID (used for admin dashboard)',\n            'icon_image'                 => 'Admin Icon Image',\n            'loader'                     => 'Admin Loader',\n            'title'                      => 'Admin Title',\n        ],\n        'site'  => [\n            'description'                  => 'Site Description',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => 'Site Logo',\n            'title'                        => 'Site Title',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/vi/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => 'Bạn có thể lấy giá trị của bấy kỳ một thông số cài đặt bằng cách gọi hàm',\n    'save'                 => 'Lưu cài đặt',\n    'new'                  => 'Thông số mới',\n    'help_name'            => 'Tên thông số VD: Admin Title',\n    'help_key'             => 'Từ khóa của thông số VD: admin_title',\n    'help_option'          => '(Không bắt buộc, chỉ áp dụng cho một số kiểu dữ liệu như: dropdown hoặc radio)',\n    'add_new'              => 'Thêm thông số mới',\n    'delete_question'      => 'Bạn có chắc là muốn xóa thông số :setting?',\n    'delete_confirm'       => 'Có, hãy xóa thông số này',\n    'successfully_created' => 'Tạo thông số mới thành công',\n    'successfully_saved'   => 'Đã lưu cài đặt mới',\n    'successfully_deleted' => 'Xóa thông số thành công',\n    'already_at_top'       => 'Thông số đã trên đầu danh sách rồi.',\n    'already_at_bottom'    => 'Thông số đã ở cuối danh sách rồi.',\n    'key_already_exists'   => 'Từ khóa :key đã được dùng.',\n    'moved_order_up'       => 'Di chuyển thông số :name lên',\n    'moved_order_down'     => 'Di chuyển thông số :name xuống',\n    'successfully_removed' => 'Xóa giá trị :name thành công',\n    'group_general'        => 'Chung',\n    'group_admin'          => 'Admin',\n    'group_site'           => 'Site',\n    'group'                => 'Nhóm',\n    'help_group'           => 'Thông số thuộc về nhóm',\n];\n"
  },
  {
    "path": "publishable/lang/vi/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Tạo bằng cả <i class=\"voyager-heart\"></i> bởi',\n    'footer_copyright2' => 'Tạo ra từ sự tuyệt vời và trên cả tuyệt vời.',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => '以 PV',\n    'by_sessions'            => '以 Session',\n    'by_users'               => '以用户',\n    'no_client_id'           => '若需查看统计数据，您需要先注册 Google Analytics 并将所提供的网站 Client ID 以键名：<code>google_analytics_client_id</code> 添加到您的 Voyager 设置项。在 Google Developer Console 上获取您的 key 信息：',\n    'set_view'               => '选择一个视图',\n    'this_vs_last_week'      => '本周 VS 上周',\n    'this_vs_last_year'      => '今年 VS 去年',\n    'top_browsers'           => '使用最多的浏览器',\n    'top_countries'          => '访问量最高的国家',\n    'various_visualizations' => '复合图表',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => '添加 BREAD 至该表',\n    'bread_crud_actions'     => 'BREAD / CRUD 操作',\n    'bread_info'             => 'BREAD 信息',\n    'controller_name_hint'   => '例如：PageController，如果留空将使用自带的 BREAD Controller',\n    'create_bread_for_table' => '为表 :table 创建 BREAD',\n    'default_search_key'     => '默认服务器端搜索字段',\n    'default_search_key_ph'  => '将预先选择该字段进行服务器端搜索',\n    'delete_bread'           => '删除 BREAD',\n    'delete_bread_conf'      => '是的，删除该 BREAD',\n    'delete_bread_quest'     => '你确定要删除 :table 表的 BREAD吗？',\n    'edit_bread'             => '编辑 BREAD',\n    'edit_bread_for_table'   => '编辑 BREAD :table',\n    'error_creating_bread'   => '很抱歉，在创建 BREAD 时出现了问题',\n    'error_removing_bread'   => '很抱歉，在删除 BREAD 时出现了问题',\n    'error_updating_bread'   => '很抱歉，在更新 BREAD 时出现了问题',\n    'error_tagging'          => '很抱歉，创建记录时可能出现问题。请确保您的表中其他字段有默认值。',\n    'success_created_bread'  => '成功创建 BREAD',\n    'success_remove_bread'   => '成功地从 :datatype 中移除 BREAD',\n    'success_update_bread'   => '成功更新 :datatype BREAD',\n    'controller_name'        => 'Controller 名称',\n    'create_migration'       => '为该表创建迁移？',\n    'create_model_table'     => '为该表创建模型（Model）？',\n    'description'            => '描述',\n    'display_name'           => '显示名称',\n    'display_name_plural'    => '显示名称（复数）',\n    'display_name_singular'  => '显示名称（单数）',\n    'edit_rows'              => '在下方编辑 :table 行',\n    'generate_permissions'   => '权限生成',\n    'icon_class'             => '用于该表的图标',\n    'icon_hint'              => '使用图标（可选）',\n    'icon_hint2'             => 'Voyager 字体类',\n    'model_class'            => '模型类名称',\n    'model_name'             => '模型名称',\n    'model_name_ph'          => '如果左侧留空，将尝试使用表名',\n    'order'                  => '顺序',\n    'order_column'           => '列顺序',\n    'order_column_ph'        => '保持列的顺序',\n    'order_direction'        => '排序方向',\n    'order_ident_column'     => '排序显示列',\n    'order_ident_column_ph'  => '“顺序”页中显示的列',\n    'ordering_not_set'       => '你必须先定义顺序',\n    'policy_class'           => '策略类名称',\n    'policy_name'            => '策略名称',\n    'policy_name_ph'         => '例如：\\App\\Policies\\UserPolicy,如果留空将使用默认的策略',\n    'server_pagination'      => '服务器端分页',\n    'scope'                  => '范围',\n    'soft_deletes_on'        => '显示软删除',\n    'soft_deletes_off'       => '隐藏软删除',\n    'updated_order'          => '排序更新成功',\n    'url_slug'               => 'URL Slug（必须是唯一的）',\n    'url_slug_ph'            => 'URL Slug（例如文章）',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => '欢迎来到Voyager指南针。每一个好的应用程序都需要一个指南针来指向正确的方向。在本节中，您将找到许多资源和管理任务来帮助您构建应用程序。',\n    'links'                  => [\n        'title'                 => '链接',\n        'documentation'         => '文档',\n        'voyager_homepage'      => '官网',\n    ],\n    'commands'      => [\n        'title'                 => '命令',\n        'text'                  => 'Voyager的Artisan命令.',\n        'clear_output'          => '清除输出',\n        'command_output'        => 'Artisan命令输出',\n        'additional_args'       => '附加参数?',\n        'run_command'           => '运行命令',\n    ],\n    'resources'     => [\n        'title'                 => '资源',\n        'text'                  => 'Voyager资源，帮助你更快地找到东西。',\n\n    ],\n    'logs'          => [\n        'title'                 => '日志',\n        'text'                  => '你的应用日志',\n        'file_too_big'          => '日志文件 >50M, 请下载.',\n        'level'                 => '级别',\n        'context'               => '上下文',\n        'date'                  => '日期',\n        'content'               => '内容',\n        'download_file'         => '下载文件',\n        'delete_file'           => '删除文件',\n        'delete_all_files'      => '删除所有文件',\n        'delete_success'        => '成功删除日志文件:',\n        'delete_all_success'    => '成功删除所有日志文件',\n\n    ],\n    'fonts'         => [\n        'title'                 => '字体',\n        'font_class'            => 'Voyager字体类映射',\n        'font_character'        => 'Voyager字体字符映射',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => '添加新列',\n    'add_softdeletes'           => '添加软删除',\n    'add_timestamps'            => '添加时间戳',\n    'already_exists'            => '已存在',\n    'already_exists_table'      => '表 :table 已经存在',\n    'bread_crud_actions'        => 'BREAD / CRUD 操作',\n    'bread_info'                => 'BREAD 信息',\n    'browse_bread'              => '浏览 BREAD',\n    'column'                    => '列',\n    'composite_warning'         => '警告：此列是复合索引的一部分',\n    'create_new_table'          => '创建新表',\n    'create_your_new_table'     => '创建新表',\n    'create_model_table'        => '为此表创建模型?',\n    'default'                   => '默认',\n    'delete_bread_before_table' => '请务必在删除表前先删除该表的 BREAD。',\n    'delete_table_confirm'      => '是的，删除该表',\n    'delete_table_question'     => '您确定要删除 :table 表吗?',\n    'editing_table'             => '编辑表 :table',\n    'edit_table'                => '在下方编辑 :table 表',\n    'edit_table_not_exist'      => '您想要编辑的表不存在',\n    'extra'                     => '额外',\n    'field'                     => '字段',\n    'field_safe_failed'         => '未能保存字段 :field，正在回滚操作！',\n    'index'                     => 'INDEX',\n    'input_type'                => '输入类型',\n    'key'                       => '键',\n    'name_warning'              => '请在添加索引之前给列命名',\n    'no_composites_warning'     => '此表有复合索引。请注意，他们目前不受支持。在尝试添加 / 删除索引时要小心。',\n    'null'                      => '空',\n    'optional_details'          => '可选细项',\n    'primary'                   => '主',\n    'success_create_table'      => '成功创建了:table 表',\n    'success_delete_table'      => '成功删除表 :table',\n    'success_update_table'      => '成功更新 :table 表',\n    'table_actions'             => '表操作',\n    'table_columns'             => '表列',\n    'table_has_index'           => '该表已经有一个主索引。',\n    'table_name'                => '表名',\n    'table_no_columns'          => '该表没有列…',\n    'type'                      => '类型',\n    'type_not_supported'        => '不支持这种类型',\n    'unique'                    => '唯一',\n    'unknown_type'              => '未知类型',\n    'update_table'              => '更新表',\n    'visibility'                => '可见性',\n    'relationship'              => [\n        'relationship'         => '关系',\n        'relationships'        => '关系',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => '从哪一列...？',\n        'is_used_to_reference' => '被用于引用（reference）',\n        'pivot_table'          => '中间表（Pivot）',\n        'selection_details'    => '选择项详细信息',\n        'display_the'          => '显示',\n        'store_the'            => '保存',\n        'easy_there'           => '别慌，舰长！',\n        'before_create'        => '在您创建新关系时，您需要先创建它的 BREAD。<br>在这之后，返回到 BREAD 的编辑页面您就可以看到创建关系的相关项。',\n        'cancel'               => '取消',\n        'add_new'              => '添加新关系',\n        'open'                 => '打开',\n        'close'                => '关闭',\n        'relationship_details' => '关系详细内容',\n        'browse'               => '浏览',\n        'read'                 => '读取',\n        'edit'                 => '编辑',\n        'add'                  => '添加',\n        'delete'               => '删除',\n        'create'               => '创建关系',\n        'namespace'            => '模型命名空间 (ex. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => '暂时没有内容哦',\n    'sInfo'           => '显示第 _START_ 至 _END_ 项结果，共 _TOTAL_ 项',\n    'sInfoEmpty'      => '显示第 0 至 0 项结果，共 0 项',\n    'sInfoFiltered'   => '(由 _MAX_ 项结果过滤)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => '显示 _MENU_ 项结果',\n    'sLoadingRecords' => '载入中...',\n    'sProcessing'     => '处理中...',\n    'sSearch'         => '搜索：',\n    'sZeroRecords'    => '没有匹配结果',\n    'oPaginate'       => [\n        'sFirst'    => '首页',\n        'sLast'     => '末页',\n        'sNext'     => '下页',\n        'sPrevious' => '上页',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': 以升序排列此列',\n        'sSortDescending' => ': 以降序排列此列',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => '上周',\n    'last_year' => '去年',\n    'this_week' => '本周',\n    'this_year' => '今年',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => '页面|页面',\n    'page_link_text' => '查看所有页面',\n    'page_text'      => '您有 :count :string 在数据库中。点击下面的按钮查看所有页面。',\n    'post'           => '文章|文章',\n    'post_link_text' => '查看所有的帖子',\n    'post_text'      => '您有 :count :string 在数据库中。点击下面的按钮查看所有文章。',\n    'user'           => '用户|用户',\n    'user_link_text' => '查看所有用户',\n    'user_text'      => '您有 :count :string 在数据库中。点击下面的按钮查看所有用户。',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => '我们刚刚为您创建了缺失的软连接。',\n    'symlink_created_title'  => '丢失的存储软连接已被重新创建',\n    'symlink_failed_text'    => '我们未能为您的应用程序生成缺失的软连接，似乎您的主机提供商不支持它。',\n    'symlink_failed_title'   => '无法创建丢失的存储软连接',\n    'symlink_missing_button' => '修复',\n    'symlink_missing_text'   => '我们找不到一个存储软连接，这可能会导致从浏览器加载媒体文件的问题。',\n    'symlink_missing_title'  => '缺失的存储软连接',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => '留空以保持不变',\n    'field_select_dd_relationship' => '确保在 :class 类的 :method 方法中设置适当的关系。',\n    'type_checkbox'                => '复选框',\n    'type_codeeditor'              => '代码编辑器',\n    'type_file'                    => '文件',\n    'type_image'                   => '图像',\n    'type_radiobutton'             => '单选按钮',\n    'type_richtextbox'             => '富文本框',\n    'type_selectdropdown'          => '选择下拉',\n    'type_textarea'                => '文本区域',\n    'type_textbox'                 => '文本框',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => '操作',\n    'actions'                => '操作',\n    'add'                    => '添加',\n    'add_folder'             => '添加文件夹',\n    'add_new'                => '添加',\n    'all_done'               => '已全部完成',\n    'are_you_sure'           => '您确定吗？',\n    'are_you_sure_delete'    => '你确定要删除吗',\n    'ascending'              => '升序',\n    'auto_increment'         => '自增',\n    'bread'                  => 'bread',\n    'browse'                 => '浏览',\n    'builder'                => '构建器',\n    'bulk_delete'            => '删除选中',\n    'bulk_delete_confirm'    => '是的, 删除这些',\n    'bulk_delete_nothing'    => '没有选择要删除的内容',\n    'cancel'                 => '取消',\n    'choose_type'            => '选择类型',\n    'click_here'             => '点击这里',\n    'close'                  => '关闭',\n    'compass'                => '指南针',\n    'created_at'             => '创建于',\n    'custom'                 => '自定义',\n    'dashboard'              => '控制面板',\n    'database'               => '数据库',\n    'default'                => '默认',\n    'delete'                 => '删除',\n    'delete_confirm'         => '是的,删除它!',\n    'delete_question'        => '您确定要删除它吗？',\n    'delete_this_confirm'    => '是的，我要删除！',\n    'descending'             => '降序',\n    'deselect_all'           => '反选全部',\n    'download'               => '下载',\n    'drag_drop_info'         => '拖放下面的项目以重新排列它们.',\n    'edit'                   => '编辑',\n    'email'                  => '电子邮件',\n    'error_deleting'         => '抱歉，在删除过程中出现了问题',\n    'error_restoring'        => '抱歉，在恢复过程中出现了问题',\n    'exception'              => '异常',\n    'featured'               => '特色',\n    'field_does_not_exist'   => '字段不存在',\n    'home'                   => '网站首页',\n    'how_to_use'             => '如何使用',\n    'index'                  => '索引',\n    'internal_error'         => '内部错误',\n    'items'                  => '项目',\n    'keep_sidebar_open'      => '保持边栏处在打开状态',\n    'key'                    => '键',\n    'last_modified'          => '最近一次更改',\n    'length'                 => '长度',\n    'locale'                 => '本地语言',\n    'login'                  => '登录',\n    'logout'                 => '安全退出',\n    'media'                  => '媒体',\n    'menu_builder'           => '菜单生成器',\n    'mimetype_not_allowed'   => '不允许此mimetype',\n    'move'                   => '移动',\n    'name'                   => '命名',\n    'new'                    => '新',\n    'no'                     => '否',\n    'no_thanks'              => '不，谢谢',\n    'none'                   => '无',\n    'not_null'               => '非空',\n    'no_results'             => '暂无结果',\n    'open'                   => '打开',\n    'options'                => '选项',\n    'password'               => '密码',\n    'permissions'            => '权限',\n    'profile'                => '个人资料',\n    'public_url'             => '公开 URL',\n    'read'                   => '读',\n    'rename'                 => '重命名',\n    'remember_me'            => '记住我',\n    'required'               => '必须',\n    'return_to_list'         => '返回列表',\n    'route'                  => '路由',\n    'save'                   => '保存',\n    'search'                 => '搜索',\n    'select_all'             => '选择全部',\n    'select_group'           => '选择现有组或添加新组',\n    'settings'               => '设置',\n    'showing_entries'        => '展示从 :from 到 :to 项结果，共 :all 项|展示从 :from 到 :to 项结果，共 :all 项',\n    'submit'                 => '发布',\n    'successfully_added_new' => '添加成功',\n    'successfully_deleted'   => '删除成功',\n    'successfully_restored'  => '恢复成功',\n    'successfully_updated'   => '更新成功',\n    'successfully_created'   => '创建成功',\n    'sweet_success'          => 'Sweet Success!',\n    'timestamp'              => '时间戳',\n    'title'                  => '标题',\n    'type'                   => '类型',\n    'restore'                => '恢复',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => '取消固定侧边栏',\n    'update'                 => '更新',\n    'update_failed'          => '更新失败',\n    'updated_order'          => '排序已更新',\n    'upload'                 => '上传',\n    'url'                    => '网址',\n    'view'                   => '视图',\n    'viewing'                => '查看',\n    'whoopsie'               => '哇哦!',\n    'yes'                    => '是',\n    'yes_please'             => '是的，就这样做',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'JSON 无效',\n    'invalid_message'   => '看起来您引入的是一个无效的 JSON',\n    'valid'             => 'JSON 有效',\n    'validation_errors' => '验证错误',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => '正在登录',\n    'signin_below' => '在下方登录：',\n    'welcome'      => '欢迎使用 Voyager - 不可错过的 Laravel 后台管理框架',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => '添加新文件夹',\n    'audio_support'          => '您的浏览器不支持音频元素。',\n    'create_new_folder'      => '创建新文件夹',\n    'delete_folder_question' => '此操作将连同其内的所有文件和文件夹一并删除',\n    'delete_question'        => '确定要删除以下文件吗?',\n    'destination_folder'     => '目标文件夹',\n    'drag_drop_info'         => '拖放文件或点击下面的上传',\n    'error_already_exists'   => '对不起，相同名称的文件 / 文件夹已存在。',\n    'error_creating_dir'     => '对不起，创建目录似乎出了问题，请检查您的权限',\n    'error_deleting_file'    => '抱歉，在删除此文件时出现了错误，请检查您的权限',\n    'error_deleting_folder'  => '对不起，在删除此文件夹时出现了错误，请检查您的权限',\n    'error_may_exist'        => '可能已存在同名的文件或文件夹。请选择另一个名称或删除现有文件。',\n    'error_moving'           => '对不起，在移动文件 / 文件夹时出现了问题，请确保您有正确的权限。',\n    'error_uploading'        => '上传失败：发生未知错误！',\n    'files'                  => '1个文件|共:count个文件',\n    'files_more'             => '还有 :count 更多',\n    'file_does_not_exist'    => '文件不存在',\n    'file_removed'           => '文件已删除',\n    'files_selected'         => '选定的文件/文件夹',\n    'folder_exists_already'  => '对不起，文件夹已经存在，如果您想重新创建，请删除该文件夹',\n    'image_does_not_exist'   => '图片不存在',\n    'image_removed'          => '图片已删除',\n    'library'                => '媒体库',\n    'loading'                => '加载你的媒体文件',\n    'max_files_select'       => '只能选择一个文件|最多只能选择:count个文件',\n    'min_files_select'       => '必须至少选择一个文件|必须至少选择:count个文件',\n    'move_file_folder'       => '移动文件或文件夹',\n    'new_file_folder'        => '新文件 / 文件夹的名字',\n    'new_folder_name'        => '新文件夹名称',\n    'no_files_here'          => '没有文件。',\n    'no_files_in_folder'     => '这个文件夹中没有文件。',\n    'nothing_selected'       => '没有选择文件或文件夹',\n    'rename_file_folder'     => '重命名文件或文件夹',\n    'success_uploaded_file'  => '成功上传新文件!',\n    'success_uploading'      => '图片上传成功!',\n    'success_moved'          => '已成功移动文件/文件夹',\n    'success_renamed'        => '已成功重命名文件/文件夹',\n    'uploading_wrong_type'   => '上传失败：不受支持的文件格式，或是它文件过大而无法上传!',\n    'crop'                   => '裁剪',\n    'crop_and_create'        => '裁剪或创建',\n    'crop_override_confirm'  => '将会覆盖原始图像，确定吗？',\n    'crop_image'             => '裁剪图像',\n    'success_crop_image'     => '已成功剪切图像',\n    'height'                 => '高度: ',\n    'title'                  => '标题',\n    'type'                   => '类型',\n    'size'                   => '大小',\n    'public_url'             => '公共URL',\n    'last_modified'          => '上次修改时间',\n    'video_support'          => '您的浏览器不支持视频标签。',\n    'browser_video_support'  => '您的浏览器不支持此视频标签.',\n    'browser_audio_support'  => '您的浏览器不支持音频元素.',\n    'width'                  => '宽度: ',\n    'add_all_selected'       => '添加所有选中的',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'RGB 或 Hex 颜色（可选）',\n    'color_ph'             => '颜色 (例如：#ffffff 或 rgb(255, 255, 255)',\n    'create_new_item'      => '创建一个新的菜单项',\n    'delete_item_confirm'  => '是的，删除这个菜单项',\n    'delete_item_question' => '您确定要删除这个菜单项吗？',\n    'drag_drop_info'       => '拖放下面的菜单项重新排列。',\n    'dynamic_route'        => '动态路由',\n    'edit_item'            => '编辑菜单项',\n    'icon_class'           => '菜单项的字体图标类（使用',\n    'icon_class2'          => 'Voyager 图标库</a>）',\n    'icon_class_ph'        => 'Icon Class（可选）',\n    'item_route'           => '菜单项的路由',\n    'item_title'           => '菜单项的标题',\n    'link_type'            => '链接类型',\n    'new_menu_item'        => '新菜单项',\n    'open_in'              => '打开',\n    'open_new'             => '新标签页 / 窗口打开',\n    'open_same'            => '在相同标签 / 窗口打开',\n    'route_parameter'      => '路由参数（如果存在）',\n    'static_url'           => '静态 URL',\n    'successfully_created' => '成功创建新菜单项。',\n    'successfully_deleted' => '成功删除菜单项。',\n    'successfully_updated' => '成功更新菜单项。',\n    'updated_order'        => '成功更新菜单顺序。',\n    'url'                  => '菜单项的 URL',\n    'usage_hint'           => '您可以在网站的任意位置调用菜单，例：|您可以在网站的任意位置调用菜单，例：',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> '附加字段',\n    'category'         => '分类目录',\n    'content'          => '文章内容',\n    'details'          => '文章详细信息',\n    'excerpt'          => '文章摘要 <small>对该篇文章的简短描述</small>',\n    'image'            => '文章图片',\n    'meta_description' => '页面描述',\n    'meta_keywords'    => '页面关键字',\n    'new'              => '创建新文章',\n    'seo_content'      => 'SEO内容',\n    'seo_title'        => 'SEO标题',\n    'slug'             => 'URL别名',\n    'status'           => '发布状态',\n    'status_draft'     => '草稿',\n    'status_pending'   => '待审核',\n    'status_published' => '已发布',\n    'title'            => '文章标题',\n    'title_sub'        => '该篇文章的标题',\n    'update'           => '更新文章',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => '头像',\n    'edit'             => '更改个人资料',\n    'edit_user'        => '编辑用户',\n    'password'         => '密码',\n    'password_hint'    => '留空为不修改密码',\n    'role'             => '权限',\n    'roles'            => '角色',\n    'role_default'     => '默认角色',\n    'roles_additional' => '其他角色',\n    'user_role'        => '用户权限',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => '作者',\n        'avatar'           => '头像',\n        'body'             => '主体内容',\n        'category'         => '分类目录',\n        'created_at'       => '创建于',\n        'display_name'     => '显示名称',\n        'email'            => 'Email',\n        'excerpt'          => '摘要',\n        'featured'         => '特色',\n        'id'               => 'ID',\n        'meta_description' => '页面描述',\n        'meta_keywords'    => '页面关键字',\n        'name'             => '名称',\n        'order'            => '排序',\n        'page_image'       => '页面图像',\n        'parent'           => '父',\n        'password'         => '密码',\n        'post_image'       => '文章图像',\n        'remember_token'   => '记住登录',\n        'role'             => '角色',\n        'seo_title'        => 'SEO标题',\n        'slug'             => '别名',\n        'status'           => '状态',\n        'title'            => '标题',\n        'updated_at'       => '创建于',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => '分类目录',\n            'plural'   => '分类目录',\n        ],\n        'menu'     => [\n            'singular' => '菜单',\n            'plural'   => '菜单',\n        ],\n        'page'     => [\n            'singular' => '页面',\n            'plural'   => '页面',\n        ],\n        'post'     => [\n            'singular' => '文章',\n            'plural'   => '文章',\n        ],\n        'role'     => [\n            'singular' => '角色',\n            'plural'   => '角色',\n        ],\n        'user'     => [\n            'singular' => '用户',\n            'plural'   => '用户',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'bread',\n        'categories'   => '分类目录',\n        'compass'      => '指南针',\n        'dashboard'    => '控制面板',\n        'database'     => '数据库',\n        'media'        => '媒体',\n        'menu_builder' => '菜单管理',\n        'pages'        => '页面',\n        'posts'        => '文章',\n        'roles'        => '角色',\n        'settings'     => '设置',\n        'tools'        => '工具',\n        'users'        => '用户',\n    ],\n    'roles'      => [\n        'admin' => '管理员',\n        'user'  => '普通用户',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => '后台背景图像',\n            'description'                => '后台描述',\n            'description_value'          => '欢迎使用 Voyager - 不可错过的 Laravel 后台管理框架',\n            'google_analytics_client_id' => 'Google Analytics Client ID （于后台控制面板使用）',\n            'icon_image'                 => '后台图标',\n            'loader'                     => '后台加载动画',\n            'title'                      => '后台页面标题',\n        ],\n        'site'  => [\n            'description'                  => '站点描述',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => '站点 Logo',\n            'title'                        => '站点标题',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => '通过调用，您可以在站点的任何地方获得每个设置的值',\n    'save'                 => '保存设置',\n    'new'                  => '新设置',\n    'help_name'            => '设置名称 例如：管理标题',\n    'help_key'             => '设置键（key） 例如：admin_title',\n    'help_option'          => '(可选。仅适用于下拉框或单选按钮之类的某些类型)',\n    'add_new'              => '添加新设置',\n    'delete_question'      => '您确定要删除 :setting 设置吗?',\n    'delete_confirm'       => '是的，删除此设置',\n    'successfully_created' => '成功创建了设置',\n    'successfully_saved'   => '成功保存设置',\n    'successfully_deleted' => '成功删除设置',\n    'already_at_top'       => '已经在顶部了',\n    'already_at_bottom'    => '已经在底部了',\n    'key_already_exists'   => '键 :key 已存在',\n    'moved_order_up'       => '已将 :name 设置抬升',\n    'moved_order_down'     => '已将 :name 设置下沉',\n    'successfully_removed' => '成功移除 :name 的值',\n    'group_general'        => '概览',\n    'group_admin'          => '管理',\n    'group_site'           => '站点',\n    'group'                => '组',\n    'help_group'           => '这个设置被分配给',\n];\n"
  },
  {
    "path": "publishable/lang/zh_CN/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => 'Made with <i class=\"voyager-heart\"></i> by',\n    'footer_copyright2' => 'Made with rum and even more rum',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/analytics.php",
    "content": "<?php\n\nreturn [\n    'by_pageview'            => '以 PV',\n    'by_sessions'            => '以 Session',\n    'by_users'               => '以用戶',\n    'no_client_id'           => '若需查看統計數據，您需要先註冊 Google Analytics 並將所提供的網站 Client ID 以金鑰名：<code>google_analytics_client_id</code> 添加到您的 Voyager 設置。在 Google Developer Console 上獲取您的金鑰信息：',\n    'set_view'               => '選擇一個視圖',\n    'this_vs_last_week'      => '本週 VS 上週',\n    'this_vs_last_year'      => '今年 VS 去年',\n    'top_browsers'           => '使用最多的瀏覽器',\n    'top_countries'          => '訪問量最高的國家',\n    'various_visualizations' => '復合圖表',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/bread.php",
    "content": "<?php\n\nreturn [\n    'add_bread'              => '添加 BREAD 至該表',\n    'bread_crud_actions'     => 'BREAD / CRUD 操作',\n    'bread_info'             => 'BREAD 信息',\n    'controller_name_hint'   => '例如：PageController，如果留空將使用自帶的 BREAD Controller',\n    'create_bread_for_table' => '為表 :table 創建 BREAD',\n    'delete_bread'           => '刪除 BREAD',\n    'delete_bread_conf'      => '是的，刪除該 BREAD',\n    'delete_bread_quest'     => '你確定要刪除 :table 表的 BREAD嗎？',\n    'edit_bread'             => '編輯 BREAD',\n    'edit_bread_for_table'   => '編輯 BREAD :table',\n    'error_creating_bread'   => '很抱歉，在建立 BREAD 時出現了問題',\n    'error_removing_bread'   => '很抱歉，在刪除 BREAD 時出現了問題',\n    'error_updating_bread'   => '很抱歉，在更新 BREAD 時出現了問題',\n    'error_tagging'          => '很抱歉，在創建紀錄時出現了問題，請確認您的資料表中含有其他欄位的預設值.',\n    'success_created_bread'  => '成功建立 BREAD',\n    'success_remove_bread'   => '成功地從 :datatype 中移除 BREAD',\n    'success_update_bread'   => '成功更新 :datatype BREAD',\n    'controller_name'        => '控制器名稱',\n    'create_migration'       => '為該表建立遷移？',\n    'description'            => '描述',\n    'display_name'           => '顯示名稱',\n    'display_name_plural'    => '顯示名稱（複數）',\n    'display_name_singular'  => '顯示名稱（單數）',\n    'edit_rows'              => '在下方編輯 :table 行',\n    'generate_permissions'   => '權限生成',\n    'icon_class'             => '用於該表的圖標',\n    'icon_hint'              => '使用圖標（可選）',\n    'icon_hint2'             => 'Voyager 字體',\n    'model_class'            => '模型類別名稱',\n    'model_name'             => '模型名稱',\n    'model_name_ph'          => '如果左側留空，將嘗試使用表名',\n    'order'                  => '順序',\n    'order_column'           => '順序欄位',\n    'order_column_ph'        => '記錄順序的列',\n    'order_ident_column'     => '顯示順序欄位',\n    'order_ident_column_ph'  => '訂單頁面顯示列',\n    'ordering_not_set'       => '您需要先定義順序',\n    'policy_class'           => 'Policy 類別名',\n    'policy_name'            => 'Policy 名',\n    'policy_name_ph'         => '例如 \\App\\Policies\\UserPolicy，如果留空則嘗試使用預設值',\n    'server_pagination'      => '伺服器端分頁',\n    'updated_order'          => '訂單更新成功',\n    'url_slug'               => 'URL Slug（必須是唯一的）',\n    'url_slug_ph'            => 'URL Slug（例如文章）',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/compass.php",
    "content": "<?php\n\nreturn [\n    'welcome'                => '歡迎來到 Voyager Compass。每個應用都需要一個指南針來指向正確的方向。\n     在本節中，您將找到許多資源和管理任務，以幫助您在建立應用時為您提供方向。',\n    'links'         => [\n        'title'                 => '連接',\n        'documentation'         => '文件',\n        'voyager_homepage'      => 'Voyager 官網',\n    ],\n    'commands'      => [\n        'title'                 => '指令',\n        'text'                  => '透過 Voyager 運行 Artisan 指令',\n        'clear_output'          => '清除輸出',\n        'command_output'        => 'Artisan 指令輸出',\n        'additional_args'       => '多餘參數？',\n        'run_command'           => '運行指令',\n    ],\n    'resources'     => [\n        'title'                 => '資源',\n        'text'                  => 'Voyager 資源幫助您更快找到需要的東西',\n\n    ],\n    'logs'          => [\n        'title'                 => 'Logs',\n        'text'                  => '您的 app logs',\n        'file_too_big'          => 'Log file 大於 50MB，請下載',\n        'level'                 => '等級',\n        'context'               => '內容',\n        'date'                  => '日期',\n        'content'               => '內容',\n        'download_file'         => '下載檔案',\n        'delete_file'           => '刪除檔案',\n        'delete_all_files'      => '刪除所有檔案',\n        'delete_success'        => '成功刪除日誌檔:',\n        'delete_all_success'    => '成功刪除所有日誌檔',\n\n    ],\n    'fonts'         => [\n        'title'                 => '字體',\n        'font_class'            => 'Voyager Fonts Class Mapping',\n        'font_character'        => 'Voyager Fonts Character Mapping',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/database.php",
    "content": "<?php\n\nreturn [\n    'add_new_column'            => '添加新列',\n    'add_softdeletes'           => '添加軟刪除',\n    'add_timestamps'            => '添加時間戳記',\n    'already_exists'            => '已存在',\n    'already_exists_table'      => '表 :table 已經存在',\n    'bread_crud_actions'        => 'BREAD / CRUD 操作',\n    'bread_info'                => 'BREAD 信息',\n    'browse_bread'              => '瀏覽 BREAD',\n    'column'                    => '列',\n    'composite_warning'         => '警告：此列是複合索引的一部分',\n    'create_new_table'          => '建立新表',\n    'create_your_new_table'     => '建立新表',\n    'default'                   => '預設',\n    'delete_bread_before_table' => '請務必在刪除表前先刪除該表的 BREAD。',\n    'delete_table_confirm'      => '是的，刪除該表',\n    'delete_table_question'     => '您確定要刪除 :table 表嗎?',\n    'edit_table'                => '在下方編輯 :table 表',\n    'edit_table_not_exist'      => '您想要編輯的表不存在',\n    'extra'                     => '額外',\n    'field'                     => '字段',\n    'field_safe_failed'         => '未能保存字段 :field，正在回滾操作！',\n    'index'                     => 'INDEX',\n    'input_type'                => '輸入類型',\n    'key'                       => '鍵',\n    'name_warning'              => '請在添加索引之前給列命名',\n    'no_composites_warning'     => '此表有複合索引。請注意，他們目前不受支持。在嘗試添加 / 刪除索引時要小心。',\n    'null'                      => '空',\n    'optional_details'          => '可選細項',\n    'primary'                   => '主',\n    'success_create_table'      => '成功創建了:table 表',\n    'success_delete_table'      => '成功刪除表 :table',\n    'success_update_table'      => '成功更新 :table 表',\n    'table_actions'             => '表操作',\n    'table_columns'             => '表列',\n    'table_has_index'           => '該表已經有一個主索引。',\n    'table_name'                => '表名',\n    'table_no_columns'          => '該表沒有列…',\n    'type'                      => '類型',\n    'type_not_supported'        => '不支持這種類型',\n    'unique'                    => '唯一',\n    'unknown_type'              => '未知類型',\n    'update_table'              => '更新表',\n    'visibility'                => '可見性',\n    'relationship'              => [\n        'relationship'         => '關系',\n        'relationships'        => '關系',\n        'has_one'              => 'Has One',\n        'has_many'             => 'Has Many',\n        'belongs_to'           => 'Belongs To',\n        'belongs_to_many'      => 'Belongs To Many',\n        'which_column_from'    => '從哪一列...？',\n        'is_used_to_reference' => '被用於引用（reference）',\n        'pivot_table'          => '中間表（Pivot）',\n        'selection_details'    => '選擇項詳細信息',\n        'display_the'          => '顯示',\n        'store_the'            => '保存',\n        'easy_there'           => '別慌，艦長！',\n        'before_create'        => '在您建立新關係時，您需要先建立它的 BREAD。<br>在這之後，回到 BREAD 的編輯頁面您就可以看到建立關係的相關項。',\n        'cancel'               => '取消',\n        'add_new'              => '添加新關系',\n        'open'                 => '打開',\n        'close'                => '關閉',\n        'relationship_details' => '關系詳細內容',\n        'browse'               => '瀏覽',\n        'read'                 => '讀取',\n        'edit'                 => '編輯',\n        'add'                  => '添加',\n        'delete'               => '刪除',\n        'create'               => '創建關係',\n        'namespace'            => '模型命名空間 (ex. App\\Category)',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/datatable.php",
    "content": "<?php\n\n// DataTable translations from: https://github.com/DataTables/Plugins/tree/master/i18n\nreturn [\n    'sEmptyTable'     => '暫時沒有內容哦',\n    'sInfo'           => '顯示第 _START_ 至 _END_ 項結果，共 _TOTAL_ 項',\n    'sInfoEmpty'      => '顯示第 0 至 0 項結果，共 0 項',\n    'sInfoFiltered'   => '(由 _MAX_ 項結果過濾)',\n    'sInfoPostFix'    => '',\n    'sInfoThousands'  => ',',\n    'sLengthMenu'     => '顯示 _MENU_ 項結果',\n    'sLoadingRecords' => '載入中...',\n    'sProcessing'     => '處理中...',\n    'sSearch'         => '搜索：',\n    'sZeroRecords'    => '沒有匹配結果',\n    'oPaginate'       => [\n        'sFirst'    => '首頁',\n        'sLast'     => '末頁',\n        'sNext'     => '下頁',\n        'sPrevious' => '上頁',\n    ],\n    'oAria' => [\n        'sSortAscending'  => ': 以升冪排列此列',\n        'sSortDescending' => ': 以降冪排列此列',\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/date.php",
    "content": "<?php\n\nreturn [\n    'last_week' => '上週',\n    'last_year' => '去年',\n    'this_week' => '本週',\n    'this_year' => '今年',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/dimmer.php",
    "content": "<?php\n\nreturn [\n    'page'           => '頁面|頁面',\n    'page_link_text' => '查看所有頁面',\n    'page_text'      => '您有 :count :string 在資料庫中。點擊下面的按鈕查看所有頁面。',\n    'post'           => '文章|文章',\n    'post_link_text' => '查看所有的帖子',\n    'post_text'      => '您有 :count :string 在資料庫中。點擊下面的按鈕查看所有文章。',\n    'user'           => '用戶|用戶',\n    'user_link_text' => '查看所有用戶',\n    'user_text'      => '您有 :count :string 在資料庫中。點擊下面的按鈕查看所有用戶。',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/error.php",
    "content": "<?php\n\nreturn [\n    'symlink_created_text'   => '我們剛剛為您建立了缺失的軟連接。',\n    'symlink_created_title'  => '丟失的存儲軟連接已被重新建立',\n    'symlink_failed_text'    => '我們未能為您的應用程序生成缺失的軟連接，似乎您的主機提供商不支持它。',\n    'symlink_failed_title'   => '無法建立丟失的存儲軟連接',\n    'symlink_missing_button' => '修復',\n    'symlink_missing_text'   => '我們找不到一個存儲軟連接，這可能會導致從瀏覽器加載媒體文件的問題。',\n    'symlink_missing_title'  => '缺失的存儲軟連接',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/form.php",
    "content": "<?php\n\nreturn [\n    'field_password_keep'          => '留空以保持不變',\n    'field_select_dd_relationship' => '確保在 :class 類的 :method 方法中設置適當的關系。',\n    'type_checkbox'                => '複選框',\n    'type_codeeditor'              => '程式碼編輯器',\n    'type_file'                    => '文件',\n    'type_image'                   => '圖像',\n    'type_radiobutton'             => '單選按鈕',\n    'type_richtextbox'             => '富文本框',\n    'type_selectdropdown'          => '選擇下拉',\n    'type_textarea'                => '文本區域',\n    'type_textbox'                 => '文本框',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/generic.php",
    "content": "<?php\n\nreturn [\n    'is_rtl'                 => 'false',\n    'action'                 => '操作',\n    'actions'                => '操作',\n    'add'                    => '添加',\n    'add_folder'             => '添加文件夾',\n    'add_new'                => '添加',\n    'all_done'               => '已全部完成',\n    'are_you_sure'           => '您確定嗎？',\n    'are_you_sure_delete'    => '你確定要刪除嗎',\n    'auto_increment'         => '自增',\n    'bread'                  => 'BREAD',\n    'browse'                 => '瀏覽',\n    'builder'                => '建構器',\n    'bulk_delete'            => '刪除選取項目',\n    'bulk_delete_confirm'    => '是的, 刪除這些',\n    'bulk_delete_nothing'    => '沒有選擇要刪除的內容',\n    'cancel'                 => '取消',\n    'choose_type'            => '選擇類型',\n    'click_here'             => '點擊這裡',\n    'close'                  => '關閉',\n    'compass'                => '指南針',\n    'created_at'             => '建立於',\n    'custom'                 => '自定義',\n    'dashboard'              => '控制面板',\n    'database'               => '資料庫',\n    'default'                => '預設',\n    'delete'                 => '刪除',\n    'delete_confirm'         => '是的,刪除它!',\n    'delete_question'        => '您確定要刪除它嗎？',\n    'delete_this_confirm'    => '是的，我要刪除！',\n    'deselect_all'           => '反選全部',\n    'download'               => '下載',\n    'drag_drop_info'         => '拖曳下方的項目以重新放置它們',\n    'edit'                   => '編輯',\n    'email'                  => '電子郵件',\n    'error_deleting'         => '抱歉，在刪除過程中出現了問題',\n    'exception'              => '異常',\n    'featured'               => '特色',\n    'field_does_not_exist'   => '字段不存在',\n    'how_to_use'             => '如何使用',\n    'index'                  => 'INDEX',\n    'internal_error'         => '內部錯誤',\n    'items'                  => '項目',\n    'keep_sidebar_open'      => '保持邊欄處在打開狀態',\n    'key'                    => '鍵',\n    'last_modified'          => '最近一次更改',\n    'length'                 => '長度',\n    'locale'                 => '本地化',\n    'login'                  => '登錄',\n    'media'                  => '媒體',\n    'menu_builder'           => '菜單生成器',\n    'move'                   => '移動',\n    'name'                   => '命名',\n    'new'                    => '新',\n    'no'                     => '否',\n    'no_thanks'              => '不，謝謝',\n    'none'                   => '無',\n    'not_null'               => '非空',\n    'no_results'             => '沒有結果',\n    'options'                => '選項',\n    'password'               => '密碼',\n    'permissions'            => '權限',\n    'profile'                => '個人資料',\n    'public_url'             => '公開 URL',\n    'read'                   => '讀',\n    'rename'                 => '重命名',\n    'required'               => '必須',\n    'return_to_list'         => '返回列表',\n    'route'                  => '路由',\n    'save'                   => '保存',\n    'search'                 => '搜索',\n    'select_all'             => '選擇全部',\n    'select_group'           => '選擇已存在群組或新增群組',\n    'settings'               => '設定',\n    'showing_entries'        => '展示從 :from 到 :to 項結果，共 :all 項|展示從 :from 到 :to 項結果，共 :all 項',\n    'submit'                 => '發布',\n    'successfully_added_new' => '添加成功',\n    'successfully_deleted'   => '刪除成功',\n    'successfully_updated'   => '更新成功',\n    'timestamp'              => '時間戳',\n    'title'                  => '標題',\n    'type'                   => '類型',\n    'unsigned'               => 'Unsigned',\n    'unstick_sidebar'        => '取消固定側邊欄',\n    'update'                 => '更新',\n    'update_failed'          => '更新失敗',\n    'updated_order'          => '更新順序',\n    'upload'                 => '上傳',\n    'url'                    => '網址',\n    'view'                   => '查看',\n    'viewing'                => '查看',\n    'yes'                    => '是',\n    'yes_please'             => '是的，就這樣做',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/json.php",
    "content": "<?php\n\nreturn [\n    'invalid'           => 'JSON 無效',\n    'invalid_message'   => '看起來您引入的是一個無效的 JSON',\n    'valid'             => 'JSON 有效',\n    'validation_errors' => '驗證錯誤',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/login.php",
    "content": "<?php\n\nreturn [\n    'loggingin'    => '正在登入',\n    'signin_below' => '在下方登入：',\n    'welcome'      => '歡迎使用 Voyager - 不可錯過的 Laravel 後台管理框架',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/media.php",
    "content": "<?php\n\nreturn [\n    'add_new_folder'         => '添加新資料夾',\n    'audio_support'          => '您的瀏覽器不支援音頻',\n    'create_new_folder'      => '建立新資料夾',\n    'delete_folder_question' => '此操作將連同裡面的所有資料和資料夾一併刪除',\n    'destination_folder'     => '目標資料夾',\n    'drag_drop_info'         => '拖放資料或點擊下面的上傳',\n    'error_already_exists'   => '對不起，相同名稱的資料 / 資料夾已存在。',\n    'error_creating_dir'     => '對不起，建立目錄似乎出了問題，請檢查您的權限',\n    'error_deleting_file'    => '抱歉，在刪除此資料時出現了錯誤，請檢查您的權限',\n    'error_deleting_folder'  => '對不起，在刪除此資料夾時出現了錯誤，請檢查您的權限',\n    'error_may_exist'        => '可能已存在同名的資料或資料夾。請選擇另一個名稱或刪除現有資料。',\n    'error_moving'           => '對不起，在移動資料 / 資料夾時出現了問題，請確保您有正確的權限。',\n    'error_uploading'        => '上傳失敗：發生未知錯誤！',\n    'folder_exists_already'  => '對不起，資料夾已經存在，如果您想重新建立，請刪除該資料夾',\n    'image_does_not_exist'   => '圖片不存在',\n    'image_removed'          => '圖片已刪除',\n    'library'                => '媒體庫',\n    'loading'                => '加載你的媒體資料',\n    'move_file_folder'       => '移動資料或資料夾',\n    'new_file_folder'        => '新資料 / 資料夾的名字',\n    'new_folder_name'        => '新資料夾名稱',\n    'no_files_here'          => '沒有資料。',\n    'no_files_in_folder'     => '這個資料夾中沒有資料。',\n    'nothing_selected'       => '沒有選擇資料或資料夾',\n    'rename_file_folder'     => '重命名資料或資料夾',\n    'success_uploaded_file'  => '成功上傳新資料!',\n    'success_uploading'      => '圖片上傳成功!',\n    'uploading_wrong_type'   => '上傳失敗：不受支持的資料格式，或是資料過大而無法上傳!',\n    'video_support'          => '您的瀏覽器不支援視頻',\n    'crop'                   => '裁切',\n    'crop_and_create'        => '裁切 & 建立',\n    'crop_override_confirm'  => '本操作會取代原本圖片，您確定嗎？',\n    'crop_image'             => '裁切圖片',\n    'success_crop_image'     => '裁切圖片成功',\n    'height'                 => '高度: ',\n    'title'                  => '標題',\n    'type'                   => '檔案類別',\n    'size'                   => '檔案大小',\n    'public_url'             => '公開 URL',\n    'last_modified'          => '最後修改',\n    'browser_video_support'  => '您的瀏覽器不支援視頻',\n    'browser_audio_support'  => '您的瀏覽器不支援視頻',\n    'width'                  => '寬度: ',\n    'add_all_selected'       => '添加所有選中的',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/menu_builder.php",
    "content": "<?php\n\nreturn [\n    'color'                => 'RGB 或 Hex 顏色（可選）',\n    'color_ph'             => '顏色 (例如：#ffffff 或 rgb(255, 255, 255)',\n    'create_new_item'      => '建立一個新的側邊欄項目',\n    'delete_item_confirm'  => '是的，刪除這個側邊欄項目',\n    'delete_item_question' => '您確定要刪除這個側邊欄項目嗎？',\n    'drag_drop_info'       => '拖放下面的側邊欄項目重新排列。',\n    'dynamic_route'        => '動態路由',\n    'edit_item'            => '編輯側邊欄項目',\n    'icon_class'           => '側邊欄項目的字體圖標類（使用',\n    'icon_class2'          => 'Voyager 圖標庫</a>）',\n    'icon_class_ph'        => 'Icon Class（可選）',\n    'item_route'           => '側邊欄項目的路由',\n    'item_title'           => '側邊欄項目的標題',\n    'link_type'            => '連接類型',\n    'new_menu_item'        => '新側邊欄項目',\n    'open_in'              => '打開',\n    'open_new'             => '新標簽頁 / 窗口打開',\n    'open_same'            => '在相同標簽 / 窗口打開',\n    'route_parameter'      => '路由參數（如果存在）',\n    'static_url'           => '靜態 URL',\n    'successfully_created' => '成功建立新側邊欄項目。',\n    'successfully_deleted' => '成功刪除側邊欄項目。',\n    'successfully_updated' => '成功更新側邊欄項目。',\n    'updated_order'        => '成功更新側邊欄順序。',\n    'url'                  => '側邊欄項目的 URL',\n    'usage_hint'           => '您可以在網站的任意位置調用側邊欄，例：|您可以在網站的任意位置調用側邊欄，例：',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/post.php",
    "content": "<?php\n\nreturn [\n    'additional_fields'=> '附加欄位',\n    'category'         => '分類目錄',\n    'content'          => '文章內容',\n    'details'          => '文章詳細信息',\n    'excerpt'          => '文章摘要 <small>對該篇文章的簡短描述</small>',\n    'image'            => '文章圖片',\n    'meta_description' => 'Meta Description',\n    'meta_keywords'    => 'Meta Keywords',\n    'new'              => '創建新文章',\n    'seo_content'      => 'SEO 內容',\n    'seo_title'        => 'Seo 標題',\n    'slug'             => 'URL 別名',\n    'status'           => '發布狀態',\n    'status_draft'     => '草稿',\n    'status_pending'   => '待審核',\n    'status_published' => '已發布',\n    'title'            => '文章標題',\n    'title_sub'        => '該篇文章的標題',\n    'update'           => '更新文章',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/profile.php",
    "content": "<?php\n\nreturn [\n    'avatar'           => '頭像',\n    'edit'             => '更改個人資料',\n    'edit_user'        => '編輯用戶',\n    'password'         => '密碼',\n    'password_hint'    => '留空為不修改密碼',\n    'role'             => '角色',\n    'roles'            => '角色',\n    'role_default'     => '預設角色',\n    'roles_additional' => '附加角色',\n    'user_role'        => '用戶角色',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/seeders.php",
    "content": "<?php\n\nreturn [\n    'data_rows'  => [\n        'author'           => '作者',\n        'avatar'           => '頭像',\n        'body'             => '主體內容',\n        'category'         => '分類目錄',\n        'created_at'       => '創建於',\n        'display_name'     => '顯示名稱',\n        'email'            => '電子郵件',\n        'excerpt'          => '摘要',\n        'featured'         => '特色',\n        'id'               => 'ID',\n        'meta_description' => 'Meta Description',\n        'meta_keywords'    => 'Meta Keywords',\n        'name'             => '名稱',\n        'order'            => '排序',\n        'page_image'       => '頁面圖像',\n        'parent'           => '父',\n        'password'         => '密碼',\n        'post_image'       => '文章圖像',\n        'remember_token'   => 'Remember Token',\n        'role'             => '角色',\n        'seo_title'        => 'SEO Title',\n        'slug'             => '別名',\n        'status'           => '狀態',\n        'title'            => '標題',\n        'updated_at'       => '創建於',\n    ],\n    'data_types' => [\n        'category' => [\n            'singular' => '分類目錄',\n            'plural'   => '分類目錄',\n        ],\n        'menu'     => [\n            'singular' => '側邊欄',\n            'plural'   => '側邊欄',\n        ],\n        'page'     => [\n            'singular' => '頁面',\n            'plural'   => '頁面',\n        ],\n        'post'     => [\n            'singular' => '文章',\n            'plural'   => '文章',\n        ],\n        'role'     => [\n            'singular' => '角色',\n            'plural'   => '角色',\n        ],\n        'user'     => [\n            'singular' => '用戶',\n            'plural'   => '用戶',\n        ],\n    ],\n    'menu_items' => [\n        'bread'        => 'BREAD',\n        'categories'   => '分類目錄',\n        'compass'      => '指南針',\n        'dashboard'    => '控制面板',\n        'database'     => '資料庫',\n        'media'        => '媒體',\n        'menu_builder' => '側邊欄管理',\n        'pages'        => '頁面',\n        'posts'        => '文章',\n        'roles'        => '角色',\n        'settings'     => '設定',\n        'tools'        => '工具',\n        'users'        => '用戶',\n    ],\n    'roles'      => [\n        'admin' => '管理員',\n        'user'  => '普通用戶',\n    ],\n    'settings'   => [\n        'admin' => [\n            'background_image'           => '後台背景圖像',\n            'description'                => '後台描述',\n            'description_value'          => '歡迎使用 Voyager - 不可錯過的 Laravel 後台管理框架',\n            'google_analytics_client_id' => 'Google Analytics Client ID （於後台控制面板使用）',\n            'icon_image'                 => '後台圖標',\n            'loader'                     => 'Admin Loader',\n            'title'                      => 'Admin 標題',\n        ],\n        'site'  => [\n            'description'                  => '網站描述',\n            'google_analytics_tracking_id' => 'Google Analytics Tracking ID',\n            'logo'                         => '網站 Logo',\n            'title'                        => '網站標題',\n        ],\n    ],\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/settings.php",
    "content": "<?php\n\nreturn [\n    'usage_help'           => '通過調用，您可以在站點的任何地方獲得每個設定的值',\n    'save'                 => '保存設定',\n    'new'                  => '新設定',\n    'help_name'            => '設定名稱 例如：管理標題',\n    'help_key'             => '設定鍵（key） 例如：admin_title',\n    'help_option'          => '(可選。僅適用於下拉框或單選按鈕之類的某些類型)',\n    'add_new'              => '添加新設定',\n    'delete_question'      => '您確定要刪除 :setting 設定嗎?',\n    'delete_confirm'       => '是的，刪除此設定',\n    'successfully_created' => '成功建立了設定',\n    'successfully_saved'   => '成功保存設定',\n    'successfully_deleted' => '成功刪除設定',\n    'already_at_top'       => '已經在頂部了',\n    'already_at_bottom'    => '已經在底部了',\n    'key_already_exists'   => '鍵 :key 已存在',\n    'moved_order_up'       => '已將 :name 設定抬升',\n    'moved_order_down'     => '已將 :name 設定下沉',\n    'successfully_removed' => '成功移除 :name 的值',\n    'group_general'        => '概覽',\n    'group_admin'          => '管理',\n    'group_site'           => '站點',\n    'group'                => '組',\n    'help_group'           => '這個設定被分配給',\n];\n"
  },
  {
    "path": "publishable/lang/zh_TW/theme.php",
    "content": "<?php\n\nreturn [\n    'footer_copyright'  => '用 <i class=\"voyager-heart\"></i> 製成，by',\n    'footer_copyright2' => '用很多很多的朗姆酒製成',\n];\n"
  },
  {
    "path": "resources/assets/js/app.js",
    "content": "import Vue from 'vue';\nwindow.Vue = Vue;\nimport jQuery from 'jquery';\nwindow.jQuery = jQuery;\nwindow.$ = jQuery;\nimport PerfectScrollbar from 'perfect-scrollbar';\nwindow.Cropper = require('cropperjs');\nwindow.Cropper = 'default' in window.Cropper ? window.Cropper['default'] : window.Cropper;\nwindow.toastr = require('toastr');\nwindow.DataTable = require('datatables');\nrequire('datatables-bootstrap3-plugin/media/js/datatables-bootstrap3');\nwindow.EasyMDE = require('easymde');\nrequire('dropzone');\nrequire('jquery-match-height');\nrequire('bootstrap-toggle');\nrequire('nestable2');\nrequire('bootstrap');\nrequire('select2');\nrequire('eonasdan-bootstrap-datetimepicker/src/js/bootstrap-datetimepicker');\nvar brace = require('brace');\nrequire('brace/mode/json');\nrequire('brace/theme/github');\nrequire('./slugify');\nwindow.TinyMCE = window.tinymce = require('tinymce');\nrequire('./multilingual');\nrequire('./voyager_tinymce');\nwindow.voyagerTinyMCE = require('./voyager_tinymce_config');\nrequire('./voyager_ace_editor');\nwindow.helpers = require('./helpers.js');\n\nVue.component('admin-menu', require('./components/admin_menu.vue').default);\n\nvar admin_menu = new Vue({\n    el: '#adminmenu',\n});\n\n$(document).ready(function () {\n    var appContainer = $(\".app-container\"),\n        fadedOverlay = $('.fadetoblack'),\n        hamburger = $('.hamburger');\n\n    new PerfectScrollbar('.side-menu');\n\n    $('#voyager-loader').fadeOut();\n\n    $(\".hamburger, .navbar-expand-toggle\").on('click', function () {\n        appContainer.toggleClass(\"expanded\");\n        $(this).toggleClass('is-active');\n        if ($(this).hasClass('is-active')) {\n            window.localStorage.setItem('voyager.stickySidebar', true);\n        } else {\n            window.localStorage.setItem('voyager.stickySidebar', false);\n        }\n    });\n\n    $('select.select2').select2({width: '100%'});\n    $('select.select2-ajax').each(function() {\n        $(this).select2({\n            width: '100%',\n            tags: $(this).hasClass('taggable'),\n            createTag: function(params) {\n                var term = $.trim(params.term);\n    \n                if (term === '') {\n                    return null;\n                }\n    \n                return {\n                    id: term,\n                    text: term,\n                    newTag: true\n                }\n            },\n            ajax: {\n                url: $(this).data('get-items-route'),\n                data: function (params) {\n                    var query = {\n                        search: params.term,\n                        type: $(this).data('get-items-field'),\n                        method: $(this).data('method'),\n                        id: $(this).data('id'),\n                        page: params.page || 1\n                    }\n                    return query;\n                }\n            }\n        });\n\n        $(this).on('select2:select',function(e){\n            var data = e.params.data;\n            if (data.id == '') {\n                // \"None\" was selected. Clear all selected options\n                $(this).val([]).trigger('change');\n            } else {\n                $(e.currentTarget).find(\"option[value='\" + data.id + \"']\").attr('selected','selected');\n            }\n        });\n\n        $(this).on('select2:unselect',function(e){\n            var data = e.params.data;\n            $(e.currentTarget).find(\"option[value='\" + data.id + \"']\").attr('selected',false);\n        });\n\n        $(this).on('select2:selecting', function(e) {\n            if (!$(this).hasClass('taggable')) {\n                return;\n            }\n            var $el = $(this);\n            var route = $el.data('route');\n            var label = $el.data('label');\n            var errorMessage = $el.data('error-message');\n            var newTag = e.params.args.data.newTag;\n    \n            if (!newTag) return;\n    \n            $el.select2('close');\n    \n            $.post(route, {\n                [label]: e.params.args.data.text,\n                _tagging: true,\n            }).done(function(data) {\n                var newOption = new Option(e.params.args.data.text, data.data.id, false, true);\n                $el.append(newOption).trigger('change');\n            }).fail(function(error) {\n                toastr.error(errorMessage);\n            });\n    \n            return false;\n        });\n    });\n\n    $('.match-height').matchHeight();\n\n    $('.datatable').DataTable({\n        \"dom\": '<\"top\"fl<\"clear\">>rt<\"bottom\"ip<\"clear\">>'\n    });\n\n    $(\".side-menu .nav .dropdown\").on('show.bs.collapse', function () {\n        return $(\".side-menu .nav .dropdown .collapse\").collapse('hide');\n    });\n\n    $('.panel-collapse').on('hide.bs.collapse', function(e) {\n        var target = $(e.target);\n        if (!target.is('a')) {\n            target = target.parent();\n        }\n        if (!target.hasClass('collapsed')) {\n            return;\n        }\n        e.stopPropagation();\n        e.preventDefault();\n    });\n\n    $(document).on('click', '.panel-heading a.panel-action[data-toggle=\"panel-collapse\"]', function (e) {\n        e.preventDefault();\n        var $this = $(this);\n\n        // Toggle Collapse\n        if (!$this.hasClass('panel-collapsed')) {\n            $this.parents('.panel').find('.panel-body').slideUp();\n            $this.addClass('panel-collapsed');\n            $this.removeClass('voyager-angle-up').addClass('voyager-angle-down');\n        } else {\n            $this.parents('.panel').find('.panel-body').slideDown();\n            $this.removeClass('panel-collapsed');\n            $this.removeClass('voyager-angle-down').addClass('voyager-angle-up');\n        }\n    });\n\n    //Toggle fullscreen\n    $(document).on('click', '.panel-heading a.panel-action[data-toggle=\"panel-fullscreen\"]', function (e) {\n        e.preventDefault();\n        var $this = $(this);\n        if (!$this.hasClass('voyager-resize-full')) {\n            $this.removeClass('voyager-resize-small').addClass('voyager-resize-full');\n        } else {\n            $this.removeClass('voyager-resize-full').addClass('voyager-resize-small');\n        }\n        $this.closest('.panel').toggleClass('is-fullscreen');\n    });\n\n    $('.datepicker').datetimepicker();\n\n    // Save shortcut\n    $(document).keydown(function (e) {\n        if ((e.metaKey || e.ctrlKey) && e.keyCode == 83) { /*ctrl+s or command+s*/\n            $(\".btn.save\").click();\n            e.preventDefault();\n            return false;\n        }\n    });\n\n    /********** MARKDOWN EDITOR **********/\n\n    $('textarea.easymde').each(function () {\n        var easymde = new EasyMDE({\n            element: this\n        });\n        easymde.render();\n    });\n\n    /********** END MARKDOWN EDITOR **********/\n\n});\n"
  },
  {
    "path": "resources/assets/js/components/admin_menu.vue",
    "content": "<template>\n    <ul class=\"nav navbar-nav\">\n        <li v-for=\"(item, i) in items\" :class=\"classes(item)\">\n            <a :target=\"item.target\" :href=\"item.children.length > 0 ? '#'+item.id+'-dropdown-element' : item.href\" :style=\"'color:'+color(item)\" v-bind:data-toggle=\"item.children.length > 0 ? 'collapse' : false\" :aria-expanded=\"item.children.length > 0 ? String(item.active) : false\">\n                <span :class=\"'icon '+item.icon_class\"></span>\n                <span class=\"title\">{{ item.title }}</span>\n            </a>\n            <div v-if=\"item.children.length > 0\" :id=\"item.id+'-dropdown-element'\" :class=\"'panel-collapse collapse' + (item.active ? ' in' : ' ')\">\n                <div class=\"panel-body\">\n                    <admin-menu :items=\"item.children\"></admin-menu>\n                </div>\n            </div>\n        </li>\n    </ul>\n</template>\n<script>\nexport default {\n    props: {\n        items: {\n            type: Array,\n            default: [],\n        }\n    },\n    methods: {\n        classes: function(item) {\n            var classes = [];\n            if (item.children.length > 0) {\n                classes.push('dropdown');\n            }\n            if (item.active) {\n                classes.push('active');\n            }\n\n\n            return classes.join(' ');\n        },\n        color: function(item) {\n            if (item.color && item.color != '#000000') {\n                return item.color;\n            }\n\n            return '';\n        }\n    }\n};\n</script>\n"
  },
  {
    "path": "resources/assets/js/helpers.js",
    "content": "/*--------------------\n|\n| HELPERS\n|\n--------------------*/\n\nvar displayAlert = function(alert, alerter) {\n    let alertMethod = alerter[alert.type];\n\n    if (alertMethod) {\n        return alertMethod(alert.message);\n    }\n\n    alerter.error(\"No alert method found for alert type: \" + alert.type);\n}\n\nvar displayAlerts = function(alerts, alerter, type) {\n    if (type) {\n        // Only display alerts of this type...\n        alerts = alerts.filter(function(alert) {\n            return type == alert.type;\n        });\n    }\n\n    for (a in alerts) {\n        displayAlert(alerts[a], alerter);\n    }\n}\n\nvar bootstrapAlerter = function(customOptions) {\n    // Default options\n    let options = {\n        alertsContainer: '#alertsContainer',\n        dismissible: false,\n        dismissButton: '<button class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>'\n    };\n\n    if (customOptions) {\n        options = $.extend({}, options, customOptions);\n    }\n\n    let dismissibleClass = '';\n    let dismissButton = '';\n\n    if (options.dismissible) {\n        dismissButton = options.dismissButton;\n        dismissibleClass = ' alert-dismissible';\n    }\n\n    function notify(type, message) {\n        let alert = '<div class=\"alert alert-'  + type +  dismissibleClass + '\" role=\"alert\">'\n                        + dismissButton + message +\n                    '</div>';\n\n        $(options.alertsContainer).append(alert);\n    }\n\n    return {\n        success(message) {\n            notify('success', message);\n        },\n        info(message) {\n            notify('info', message);\n        },\n        warning(message) {\n            notify('warning', message);\n        },\n        error(message) {\n            notify('danger', message);\n        }\n    };\n}\n\nvar setImageValue = function(url){\n  $('.mce-btn.mce-open').parent().find('.mce-textbox').val(url);\n}\n\nexports.setImageValue = setImageValue;\nexports.displayAlert = displayAlert;\nexports.displayAlerts = displayAlerts;\nexports.bootstrapAlerter = bootstrapAlerter;"
  },
  {
    "path": "resources/assets/js/multilingual.js",
    "content": "/**\n *  Multilingual System\n *\n *  Last Update: 28 Mar 2017\n *  First version: 05 Mar 2017\n *  Author: Bruno Torrinha <http://www.torrinha.com>\n *\n *  MIT License\n *\n *  Provides a mechanism for easily manage multi languages on a single page.\n *  It was created for the BREAD system of Voyager, but can be implemented\n *  with any html structure.\n *  For each translatable field, the page requires an hidden input containing\n *  all translations in JSON format.\n *\n *  Some considerations:\n *  Every time a translatable model is opened, all languages are being loaded.\n *  This may work well with few languages, but in case of 20+, it may require\n *  another approach, like using AJAX.\n *\n *  TO-DO\n *  * Google Translator, triggered by a subtle link placed somewhere near the input.\n *  * Option for showing a fall-back version of the field, under the input.\n *    This would apply to text input only.\n *\n */\n;( function( $, window, document, undefined ) {\n\n    \"use strict\";\n\n    var pluginName = \"multilingual\",\n        defaults = {\n            editing:       false,                       // Editing or View\n            form:          '.form-edit-add',\n            transInputs:   'input[data-i18n = true]', // Hidden inputs holding translations\n            langSelectors: '.language-selector:first input' // Language selector inputs\n        };\n\n    function Plugin ( element, options ) {\n        this.element   = $(element);\n        this.settings  = $.extend( {}, defaults, options );\n        this._defaults = defaults;\n        this._name     = pluginName;\n        this.init();\n    }\n\n    $.extend( Plugin.prototype, {\n        init: function() {\n            this.form          = this.element.find(this.settings.form);\n            this.transInputs   = $(this.settings.transInputs);\n            this.langSelectors = this.element.find(this.settings.langSelectors);\n\n            if (this.transInputs.length === 0 || this.langSelectors === 0) {\n                return false;\n            }\n\n            this.setup();\n            this.refresh();\n        },\n\n\n        setup: function() {\n            var _this = this;\n\n            this.locale = this.returnLocale();\n\n            $('.js-language-label').text(this.locale);\n\n            /**\n             * Setup language selector\n             */\n            this.langSelectors.each(function(i, btn) {\n                $(btn).change($.proxy(_this.selectLanguage, _this));\n            });\n\n            /**\n             * Save data before submit\n             */\n            if (this.settings.editing) {\n                $(this.form).on('submit', function(e) {\n                    _this.prepareData();\n                });\n            }\n        },\n\n        /**\n         * Refresh plugin data, required for dynamic calls (ex menu)\n         */\n        refresh: function() {\n            var _this = this;\n\n            /**\n             * Setup translatable inputs\n             */\n            this.transInputs.each(function(i, inp) {\n                var _inp   = $(inp),\n                    inpUsr = _inp.nextAll(_this.settings.editing ? '.form-control' : '');\n\n                inpUsr.data(\"inp\", _inp);\n                _inp.data(\"inpUsr\", inpUsr);\n\n                // Load and Save data in hidden input\n                var $_data = _this.loadJsonField(_inp.val());\n                if (_this.settings.editing) {\n                    _inp.val(JSON.stringify($_data));\n                }\n\n                _this.langSelectors.each(function(i, btn) {\n                    _inp.data(btn.id, $_data[btn.id]);  // Save translation in mem\n                    if (btn.id == _this.locale) {\n                        _this.loadLang(_inp, btn.id)    // Load active locale\n                    }\n                });\n            });\n        },\n\n        loadJsonField: function(str) {\n            var $_data = {};\n\n            if (this.isJsonValid(str)) {\n                $_data = JSON.parse(str);\n\n                /**\n                 * Convert nulls to ''.\n                 */\n                this.langSelectors.each(function(i, btn) {  // loop languages\n                    $_data[btn.id] = $_data[btn.id] || '';\n                });\n\n                return $_data;\n            }\n\n            /**\n             * For the sake of validation, this looks ugly, but it will work\n             */\n            this.langSelectors.each(function(i, btn) {\n                $_data[btn.id] = '';\n            });\n\n            return $_data;\n        },\n\n\n        isJsonValid: function(str) {\n            try {\n                JSON.parse(str);\n            } catch (ex) {\n                return false;\n            }\n            return true;\n        },\n\n        /**\n         * Return Locale for a given Button Group Selector\n         *\n         * @return string The locale.\n         */\n        returnLocale: function() {\n            return this.langSelectors.filter(function() {\n                return $(this).parent().hasClass('active');\n            }).prop('id');\n        },\n\n        selectLanguage: function(e) {\n            var _this = this,\n                lang  = e.target.id;\n\n            this.transInputs.each(function(i, inp) {\n                if (_this.settings.editing) {\n                    _this.updateInputCache($(inp));\n                }\n                _this.loadLang($(inp), lang);\n            });\n\n            this.locale = lang;\n\n            $('.js-language-label').text(lang);\n        },\n\n        /**\n         * Update cache for all inputs, and prepare form data for submit\n         */\n        prepareData: function() {\n            var _this = this;\n            this.transInputs.each(function(i, inp) {\n                _this.updateInputCache($(inp));\n            });\n        },\n\n        /**\n         * Update cache for a single input\n         */\n        updateInputCache: function(inp) {\n            var _this  = this,\n                inpUsr = inp.data('inpUsr'),\n                $_val  = $(inpUsr).val(),\n                $_data = {};  // Create new data\n\n            if (inpUsr.hasClass('richTextBox')) {\n                var $_mce = tinymce.get('richtext'+inpUsr.prop('name'));\n                $_val = $_mce.getContent();\n            }\n\n            if (inpUsr.hasClass('easymde')) {\n                var $codemirror = inpUsr.nextAll('.CodeMirror')[0].CodeMirror;\n                $_val = $codemirror.getDoc().getValue();\n                $codemirror.save();\n            }\n\n            this.langSelectors.each(function(i, btn) {\n                var lang = btn.id;\n                $_data[lang] = (_this.locale == lang) ? $_val : inp.data(lang);\n            });\n\n            inp.val(JSON.stringify($_data));\n            inp.data(this.locale, $_val);     // Update single key Mem\n        },\n\n        /**\n         * Load input translation\n         */\n        loadLang: function(inp, lang) {\n            var inpUsr = inp.data(\"inpUsr\"),\n                _val   = inp.data(lang);\n\n            if (!this.settings.editing) {\n                inpUsr.text(_val);\n\n            } else {\n                var _mce = tinymce.get('richtext'+inpUsr.prop('name'));\n                if (inpUsr.hasClass('richTextBox') && _mce && _mce.initialized) {\n                    _mce.setContent(_val);\n                } else {\n                    inpUsr.val(_val);\n                    if (inpUsr.hasClass('easymde')) {\n                        var $codemirror = inpUsr.nextAll('.CodeMirror')[0].CodeMirror;\n                        $codemirror.getDoc().setValue(inpUsr.val());\n                    }\n                }\n            }\n        }\n    });\n\n    $.fn[ pluginName ] = function( options ) {\n        return this.each( function() {\n            if ( !$.data( this, pluginName ) ) {\n                $.data( this, pluginName, new Plugin(this, options) );\n            }\n        } );\n    };\n\n} )( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/js/skins/voyager/Variables.less",
    "content": "// Variables\n// Syntax: <control>-(<sub control>)-<bg|border|text>-(<state>)-(<extra>);\n// Example: @btn-primary-bg-hover-hlight;\n\n@prefix:                         mce;\n\n// Default font\n@font-family:                    \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-size:                      14px;\n@line-height:                    20px;\n@has-gradients:                  false;\n@has-radius:                     false;\n@has-boxshadow:                  false;\n@has-button-borders:             false;\n\n// Text colors\n@text:                           #333333;\n@text-inverse:                   #ffffff;\n@text-disabled:                  #aaaaaa;\n@text-shadow:                    0 1px 1px hsla(hue(@text-inverse), saturation(@text-inverse), lightness(@text-inverse), 0.75);\n@text-error:                     #aa0000;\n\n// Button\n@btn-text:                       #a3afb7;\n@btn-text-shadow:                #ffffff;\n@btn-border-top:                 rgba(0,0,0,0);\n@btn-border-right:               rgba(0,0,0,0);\n@btn-border-bottom:              rgba(0,0,0,0);\n@btn-border-left:                rgba(0,0,0,0);\n@btn-caret-border:               @btn-text;\n@btn-text-disabled:              @text-disabled;\n@btn-box-shadow:                 inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05);\n@btn-box-shadow-active:          inset 0 2px 4px rgba(0, 0, 0, .15), 0 1px 2px rgba(0, 0, 0, .05);\n@btn-box-disabled-opacity:       0.4;\n@btn-bg:                         #ffffff;\n@btn-bg-hlight:                  #ffffff;\n@btn-bg-hover:                   darken(@btn-bg, 5%);\n@btn-bg-hlight-hover:            darken(@btn-bg-hlight, 5%);\n@btn-border-hover:               darken(@btn-bg, 20%);\n@btn-border-active:              darken(@btn-bg, 20%);\n@btn-padding:                    4px 8px;\n\n@btn-primary-bg:                 #0088cc;\n@btn-primary-bg-hlight:          #ffffff;\n@btn-primary-bg-hover:           darken(@btn-primary-bg, 5%);\n@btn-primary-bg-hover-hlight:    darken(@btn-primary-bg-hlight, 5%);\n@btn-primary-text:               #ffffff;\n@btn-primary-text-shadow:        #ff0000;\n@btn-primary-border-top:         mix(@btn-border-top, @btn-primary-bg, 50%);\n@btn-primary-border-right:       mix(@btn-border-right, @btn-primary-bg, 50%);\n@btn-primary-border-bottom:      mix(@btn-border-bottom, @btn-primary-bg, 50%);\n@btn-primary-border-left:        mix(@btn-border-left, @btn-primary-bg, 50%);\n@btn-primary-border:             transparent;\n@btn-primary-border-hover:       transparent;\n\n// Button group\n@btn-group-border-width:         1px;\n\n// Menu\n@menuitem-text:                  #333333;\n@menu-bg:                        #ffffff;\n@menu-margin:                    -1px 0 0;\n@menu-border:                    rgba(0,0,0,0.2);\n@menubar-border:                 mix(@panel-border, @panel-bg, 60%);\n@menuitem-text-inverse:          #ffffff;\n@menubar-bg-active:              darken(@btn-bg, 10%);\n@menuitem-bg-hover:              #0081C2;\n@menuitem-bg-selected:           #0088cc;\n@menuitem-bg-selected-hlight:    #0077b3;\n@menuitem-bg-disabled:           #CCC;\n@menuitem-caret:                 @menuitem-text;\n@menuitem-caret-selected:        @menuitem-text-inverse;\n@menuitem-separator-top:         #cbcbcb;\n@menuitem-separator-bottom:      #ffffff;\n@menuitem-bg-active:             #c8def4;\n@menuitem-text-active:           #333333;\n@menuitem-preview-border-active: #aaaaaa;\n@menubar-menubtn-text:           #333333;\n\n// Panel\n@panel-border:                   #eeeeee;\n@panel-bg:                       #ffffff;\n@panel-bg-hlight:                #ffffff;\n\n// Tabs\n@tab-border:                     #c5c5c5;\n@tab-bg:                         #e3e3e3;\n@tab-bg-hover:                   #fdfdfd;\n@tab-bg-active:                  #fdfdfd;\n@tabs-bg:\t\t\t\t\t\t #ffffff;\n\n// Tooltip\n@tooltip-bg:                     #000;\n@tooltip-text:                   white;\n@tooltip-font-size:              11px;\n\n// Notification\n@notification-font-size:         14px;\n@notification-bg:                #f0f0f0;\n@notification-border:            #cccccc;\n@notification-text:              #333333;\n@notification-success-bg:        #dff0d8;\n@notification-success-border:    #d6e9c6;\n@notification-success-text:      #3c763d;\n@notification-info-bg:           #d9edf7;\n@notification-info-border:       #779ecb;\n@notification-info-text:         #31708f;\n@notification-warning-bg:        #fcf8e3;\n@notification-warning-border:    #faebcc;\n@notification-warning-text:      #8a6d3b;\n@notification-error-bg:          #f2dede;\n@notification-error-border:      #ebccd1;\n@notification-error-text:        #a94442;\n\n// Window\n@window-border:                  #eeeeee;\n@window-head-border:             @window-border;\n@window-head-close:              mix(@text, @window-bg, 60%);\n@window-head-close-hover:        mix(@text, @window-bg, 40%);\n@window-foot-border:             @window-border;\n@window-foot-bg:                 @window-bg;\n@window-fullscreen-bg:           #FFF;\n@window-modalblock-bg:           #000;\n@window-modalblock-opacity:      0.3;\n@window-box-shadow:              0 3px 7px rgba(0, 0, 0, 0.3);\n@window-bg:                      #ffffff;\n@window-title-font-size:         20px;\n\n// Popover\n@popover-bg:                     @window-bg;\n@popover-arrow-width:            10px;\n@popover-arrow:                  @window-bg;\n@popover-arrow-outer-width:      @popover-arrow-width + 1;\n@popover-arrow-outer:            rgba(0, 0, 0, 0.25);\n\n// Floatpanel\n@floatpanel-box-shadow:          0 5px 10px rgba(0, 0, 0, .2);\n\n// Checkbox\n@checkbox-bg:                    @btn-bg;\n@checkbox-bg-hlight:             @btn-bg-hlight;\n@checkbox-box-shadow:            inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05);\n@checkbox-border:                #c5c5c5;\n@checkbox-border-focus:          #59a5e1;\n\n// Path\n@path-text:                      @text;\n@path-bg-focus:                  #666;\n@path-text-focus:                #fff;\n\n// Textbox\n@textbox-text-placeholder:       #aaa;\n@textbox-box-shadow:             inset 0 1px 1px rgba(0, 0, 0, 0.075);\n@textbox-bg:                     #ffffff;\n@textbox-border:                 #c5c5c5;\n@textbox-border-focus:           #59a5e1;\n\n// Selectbox\n@selectbox-bg:                   @textbox-bg;\n@selectbox-border:               @textbox-border;\n\n// Throbber\n@throbber-bg:                    #fff url('img/loader.gif') no-repeat center center;\n\n// Combobox\n@combobox-border:                @textbox-border;\n\n// Colorpicker\n@colorpicker-border:             @textbox-border;\n@colorpicker-hue-bg:             #fff;\n@colorpicker-hue-border:         #333;\n\n// Grid\n@grid-bg-active:                 @menuitem-bg-active;\n@grid-border-active:             #a1a1a1;\n@grid-border:                    #d6d6d6;\n\n// Misc\n@colorbtn-backcolor-bg:          #bbbbbb;\n@iframe-border:                  @panel-border;\n\n// Slider\n@slider-border:                  #aaaaaa;\n@slider-bg:                      #eeeeee;\n@slider-handle-border:           #bbbbbb;\n@slider-handle-bg:               #dddddd;\n\n// Progress\n@progress-border:                #cccccc;\n@progress-bar-bg:                #dfdfdf;\n@progress-bar-bg-hlight:         #cccccc;\n@progress-text:                  #333333;\n@progress-text-shadow:           #ffffff;\n\n// Flow layout\n@flow-layout-spacing:            2px;\n"
  },
  {
    "path": "resources/assets/js/skins/voyager/fonts/readme.md",
    "content": "Icons are generated and provided by the http://icomoon.io service.\n"
  },
  {
    "path": "resources/assets/js/skins/voyager/fonts/tinymce-small.json",
    "content": "{\n\t\"IcoMoonType\": \"selection\",\n\t\"icons\": [\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M704 832v-37.004c151.348-61.628 256-193.82 256-346.996 0-212.078-200.576-384-448-384s-448 171.922-448 384c0 153.176 104.654 285.368 256 346.996v37.004h-192l-64-96v224h320v-222.812c-100.9-51.362-170.666-161.54-170.666-289.188 0-176.732 133.718-320 298.666-320 164.948 0 298.666 143.268 298.666 320 0 127.648-69.766 237.826-170.666 289.188v222.812h320v-224l-64 96h-192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57376,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 0,\n\t\t\t\t\"order\": 1,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57376,\n\t\t\t\t\"name\": \"charmap\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 0\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M256 64v896l256-256 256 256v-896h-512zM704 789.49l-192-192-192 192v-661.49h384v661.49z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57363,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 1,\n\t\t\t\t\"order\": 2,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57363,\n\t\t\t\t\"name\": \"bookmark\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 1\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M927.274 230.216l-133.49-133.488c-21.104-21.104-49.232-32.728-79.198-32.728s-58.094 11.624-79.196 32.726l-165.492 165.49c-43.668 43.668-43.668 114.724 0 158.392l2.746 2.746 67.882-67.882-2.746-2.746c-6.132-6.132-6.132-16.494 0-22.626l165.492-165.492c4.010-4.008 8.808-4.608 11.312-4.608s7.302 0.598 11.312 4.61l133.49 133.488c6.132 6.134 6.132 16.498 0.002 22.628l-165.494 165.494c-4.008 4.008-8.806 4.608-11.31 4.608s-7.302-0.6-11.312-4.612l-2.746-2.746-67.88 67.884 2.742 2.742c21.106 21.108 49.23 32.728 79.2 32.728s58.094-11.624 79.196-32.726l165.494-165.492c43.662-43.666 43.662-114.72-0.004-158.39zM551.356 600.644l-67.882 67.882 2.746 2.746c4.008 4.008 4.61 8.806 4.61 11.31 0 2.506-0.598 7.302-4.606 11.314l-165.494 165.49c-4.010 4.010-8.81 4.61-11.314 4.61s-7.304-0.6-11.314-4.61l-133.492-133.486c-4.010-4.010-4.61-8.81-4.61-11.314s0.598-7.3 4.61-11.312l165.49-165.488c4.010-4.012 8.81-4.612 11.314-4.612s7.304 0.6 11.314 4.612l2.746 2.742 67.882-67.88-2.746-2.746c-21.104-21.104-49.23-32.726-79.196-32.726s-58.092 11.624-79.196 32.726l-165.488 165.486c-21.106 21.104-32.73 49.234-32.73 79.198s11.624 58.094 32.726 79.198l133.49 133.49c21.106 21.102 49.232 32.726 79.198 32.726s58.092-11.624 79.196-32.726l165.494-165.492c21.104-21.104 32.722-49.23 32.722-79.196s-11.624-58.094-32.726-79.196l-2.744-2.746zM800 838c-9.724 0-19.45-3.708-26.87-11.13l-128-127.998c-14.844-14.84-14.844-38.898 0-53.738 14.84-14.844 38.896-14.844 53.736 0l128 128c14.844 14.84 14.844 38.896 0 53.736-7.416 7.422-17.142 11.13-26.866 11.13zM608 960c-17.674 0-32-14.326-32-32v-128c0-17.674 14.326-32 32-32s32 14.326 32 32v128c0 17.674-14.326 32-32 32zM928 640h-128c-17.674 0-32-14.326-32-32s14.326-32 32-32h128c17.674 0 32 14.326 32 32s-14.326 32-32 32zM224 186c9.724 0 19.45 3.708 26.87 11.13l128 128c14.842 14.84 14.842 38.898 0 53.738-14.84 14.844-38.898 14.844-53.738 0l-128-128c-14.842-14.84-14.842-38.898 0-53.738 7.418-7.422 17.144-11.13 26.868-11.13zM416 64c17.674 0 32 14.326 32 32v128c0 17.674-14.326 32-32 32s-32-14.326-32-32v-128c0-17.674 14.326-32 32-32zM96 384h128c17.674 0 32 14.326 32 32s-14.326 32-32 32h-128c-17.674 0-32-14.326-32-32s14.326-32 32-32z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57362,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 2,\n\t\t\t\t\"order\": 3,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57362,\n\t\t\t\t\"name\": \"link\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 2\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M927.274 230.216l-133.49-133.488c-21.104-21.104-49.232-32.728-79.198-32.728s-58.094 11.624-79.196 32.726l-165.492 165.49c-43.668 43.668-43.668 114.724 0 158.392l2.746 2.746 67.882-67.882-2.746-2.746c-6.132-6.132-6.132-16.494 0-22.626l165.492-165.492c4.010-4.008 8.808-4.608 11.312-4.608s7.302 0.598 11.312 4.61l133.49 133.488c6.132 6.134 6.132 16.498 0.002 22.628l-165.494 165.494c-4.008 4.008-8.806 4.608-11.31 4.608s-7.302-0.6-11.312-4.612l-2.746-2.746-67.88 67.884 2.742 2.742c21.106 21.108 49.23 32.728 79.2 32.728s58.094-11.624 79.196-32.726l165.494-165.492c43.662-43.666 43.662-114.72-0.004-158.39zM551.356 600.644l-67.882 67.882 2.746 2.746c4.008 4.008 4.61 8.806 4.61 11.31 0 2.506-0.598 7.302-4.606 11.314l-165.494 165.49c-4.010 4.010-8.81 4.61-11.314 4.61s-7.304-0.6-11.314-4.61l-133.492-133.486c-4.010-4.010-4.61-8.81-4.61-11.314s0.598-7.3 4.61-11.312l165.49-165.488c4.010-4.012 8.81-4.612 11.314-4.612s7.304 0.6 11.314 4.612l2.746 2.742 67.882-67.88-2.746-2.746c-21.104-21.104-49.23-32.726-79.196-32.726s-58.092 11.624-79.196 32.726l-165.488 165.486c-21.106 21.104-32.73 49.234-32.73 79.198s11.624 58.094 32.726 79.198l133.49 133.49c21.106 21.102 49.232 32.726 79.198 32.726s58.092-11.624 79.196-32.726l165.494-165.492c21.104-21.104 32.722-49.23 32.722-79.196s-11.624-58.094-32.726-79.196l-2.744-2.746zM352 710c-9.724 0-19.45-3.71-26.87-11.128-14.84-14.84-14.84-38.898 0-53.738l320-320c14.84-14.84 38.896-14.84 53.736 0 14.844 14.84 14.844 38.9 0 53.74l-320 320c-7.416 7.416-17.142 11.126-26.866 11.126z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57361,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 3,\n\t\t\t\t\"order\": 4,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57361,\n\t\t\t\t\"name\": \"unlink\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 3\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M576 281.326v-217.326l336.002 336-336.002 336v-222.096c-390.906-9.17-315 247.096-256 446.096-288-320-212.092-690.874 256-678.674z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57360,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 4,\n\t\t\t\t\"order\": 5,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57360,\n\t\t\t\t\"name\": \"redo\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 4\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M704 960c59-199 134.906-455.266-256-446.096v222.096l-336.002-336 336.002-336v217.326c468.092-12.2 544 358.674 256 678.674z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57359,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 5,\n\t\t\t\t\"order\": 6,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57359,\n\t\t\t\t\"name\": \"undo\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 5\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M256.428 424.726c105.8 0 191.572 91.17 191.572 203.638 0 112.464-85.772 203.636-191.572 203.636-105.802 0-191.572-91.17-191.572-203.636l-0.856-29.092c0-224.93 171.54-407.272 383.144-407.272v116.364c-73.1 0-141.826 30.26-193.516 85.204-9.954 10.578-19.034 21.834-27.224 33.656 9.784-1.64 19.806-2.498 30.024-2.498zM768.428 424.726c105.8 0 191.572 91.17 191.572 203.638 0 112.464-85.772 203.636-191.572 203.636-105.802 0-191.572-91.17-191.572-203.636l-0.856-29.092c0-224.93 171.54-407.272 383.144-407.272v116.364c-73.1 0-141.826 30.26-193.516 85.204-9.956 10.578-19.036 21.834-27.224 33.656 9.784-1.64 19.806-2.498 30.024-2.498z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57358,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 6,\n\t\t\t\t\"order\": 7,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57358,\n\t\t\t\t\"name\": \"blockquote\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 6\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192h896v128h-896zM384 576h576v128h-576zM384 384h576v128h-576zM64 768h896v128h-896zM64 384l224 160-224 160z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57356,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 7,\n\t\t\t\t\"order\": 8,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57356,\n\t\t\t\t\"name\": \"indent\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 7\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192h896v128h-896zM64 576h576v128h-576zM64 384h576v128h-576zM64 768h896v128h-896zM960 384l-224 160 224 160z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57357,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 8,\n\t\t\t\t\"order\": 9,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57357,\n\t\t\t\t\"name\": \"outdent\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 8\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M384 128h576v128h-576zM384 448h576v128h-576zM384 768h576v128h-576zM320 530v-146h-64v-320h-128v64h64v256h-64v64h128v50l-128 60v146h128v64h-128v64h128v64h-128v64h192v-320h-128v-50z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57355,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 9,\n\t\t\t\t\"order\": 10,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57355,\n\t\t\t\t\"name\": \"numlist\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 9\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M384 128h576v128h-576zM384 448h576v128h-576zM384 768h576v128h-576zM128 192c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM128 512c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM128 832c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57354,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 10,\n\t\t\t\t\"order\": 11,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57354,\n\t\t\t\t\"name\": \"bullist\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 10\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M888 384h-56v-256h64v-64h-320v64h64v256h-256v-256h64v-64h-320v64h64v256h-56c-39.6 0-72 32.4-72 72v432c0 39.6 32.4 72 72 72h240c39.6 0 72-32.4 72-72v-312h128v312c0 39.6 32.4 72 72 72h240c39.6 0 72-32.4 72-72v-432c0-39.6-32.4-72-72-72zM348 896h-184c-19.8 0-36-14.4-36-32s16.2-32 36-32h184c19.8 0 36 14.4 36 32s-16.2 32-36 32zM544 512h-64c-17.6 0-32-14.4-32-32s14.4-32 32-32h64c17.6 0 32 14.4 32 32s-14.4 32-32 32zM860 896h-184c-19.8 0-36-14.4-36-32s16.2-32 36-32h184c19.8 0 36 14.4 36 32s-16.2 32-36 32z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57353,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 11,\n\t\t\t\t\"order\": 12,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57353,\n\t\t\t\t\"name\": \"searchreplace\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 11\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M704 384v-160c0-17.6-14.4-32-32-32h-160v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-160c-17.602 0-32 14.4-32 32v512c0 17.6 14.398 32 32 32h224v192h384l192-192v-384h-192zM320 128.114c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114l0 63.886h-128v-63.886zM192 320v-64h384v64h-384zM704 869.49v-101.49h101.49l-101.49 101.49zM832 704h-192v192h-256v-448h448v256z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57352,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 12,\n\t\t\t\t\"order\": 13,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57352,\n\t\t\t\t\"name\": \"paste\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 12\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M832 320h-192v-64l-192-192h-384v704h384v192h576v-448l-192-192zM832 410.51l101.49 101.49h-101.49v-101.49zM448 154.51l101.49 101.49h-101.49v-101.49zM128 128h256v192h192v384h-448v-576zM960 896h-448v-128h128v-384h128v192h192v320z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57393,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 13,\n\t\t\t\t\"order\": 14,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57393,\n\t\t\t\t\"name\": \"copy\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 13\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M960 512h-265.876c-50.078-35.42-114.43-54.86-182.124-54.86-89.206 0-164.572-50.242-164.572-109.712 0-59.47 75.366-109.714 164.572-109.714 75.058 0 140.308 35.576 159.12 82.286h113.016c-7.93-50.644-37.58-97.968-84.058-132.826-50.88-38.16-117.676-59.174-188.078-59.174-70.404 0-137.196 21.014-188.074 59.174-54.788 41.090-86.212 99.502-86.212 160.254s31.424 119.164 86.212 160.254c1.956 1.466 3.942 2.898 5.946 4.316h-265.872v64h512.532c58.208 17.106 100.042 56.27 100.042 100.572 0 59.468-75.368 109.71-164.572 109.71-75.060 0-140.308-35.574-159.118-82.286h-113.016c7.93 50.64 37.582 97.968 84.060 132.826 50.876 38.164 117.668 59.18 188.072 59.18 70.402 0 137.198-21.016 188.074-59.174 54.79-41.090 86.208-99.502 86.208-160.254 0-35.298-10.654-69.792-30.294-100.572h204.012v-64z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57389,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 19,\n\t\t\t\t\"order\": 15,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57389,\n\t\t\t\t\"name\": \"strikethrough\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 14\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M192 832h576v64h-576v-64zM640 128v384c0 31.312-14.7 61.624-41.39 85.352-30.942 27.502-73.068 42.648-118.61 42.648-45.544 0-87.668-15.146-118.608-42.648-26.692-23.728-41.392-54.040-41.392-85.352v-384h-128v384c0 141.382 128.942 256 288 256s288-114.618 288-256v-384h-128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57388,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 20,\n\t\t\t\t\"order\": 16,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57388,\n\t\t\t\t\"name\": \"underline\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 15\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M832 128v64h-144l-256 640h144v64h-448v-64h144l256-640h-144v-64h448z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57387,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 21,\n\t\t\t\t\"order\": 17,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57387,\n\t\t\t\t\"name\": \"italic\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 16\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M625.442 494.182c48.074-38.15 78.558-94.856 78.558-158.182 0-114.876-100.29-208-224-208h-224v768h288c123.712 0 224-93.124 224-208 0-88.196-59.118-163.562-142.558-193.818zM384 304c0-26.51 21.49-48 48-48h67.204c42.414 0 76.796 42.98 76.796 96s-34.382 96-76.796 96h-115.204v-144zM547.2 768h-115.2c-26.51 0-48-21.49-48-48v-144h163.2c42.418 0 76.8 42.98 76.8 96s-34.382 96-76.8 96z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57386,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 22,\n\t\t\t\t\"order\": 18,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57386,\n\t\t\t\t\"name\": \"bold\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 17\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M850.746 242.746l-133.492-133.49c-24.888-24.892-74.054-45.256-109.254-45.256h-416c-35.2 0-64 28.8-64 64v768c0 35.2 28.8 64 64 64h640c35.2 0 64-28.8 64-64v-544c0-35.2-20.366-84.364-45.254-109.254zM805.49 287.998c6.792 6.796 13.792 19.162 18.894 32.002h-184.384v-184.386c12.84 5.1 25.204 12.1 32 18.896l133.49 133.488zM831.884 896h-639.77c-0.040-0.034-0.082-0.076-0.114-0.116v-767.77c0.034-0.040 0.076-0.082 0.114-0.114h383.886v256h256v511.884c-0.034 0.040-0.076 0.082-0.116 0.116z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57345,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 23,\n\t\t\t\t\"order\": 19,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57345,\n\t\t\t\t\"name\": \"newdocument\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 18\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M960 880v-591.938l-223.938-224.062h-592.062c-44.182 0-80 35.816-80 80v736c0 44.184 35.818 80 80 80h736c44.184 0 80-35.816 80-80zM576 192h64v192h-64v-192zM704 832h-384v-255.882c0.034-0.042 0.076-0.082 0.116-0.118h383.77c0.040 0.036 0.082 0.076 0.116 0.118l-0.002 255.882zM832 832h-64v-256c0-35.2-28.8-64-64-64h-384c-35.2 0-64 28.8-64 64v256h-64v-640h64v192c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-171.010l128 128.072v490.938z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57344,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 24,\n\t\t\t\t\"order\": 20,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57344,\n\t\t\t\t\"name\": \"save\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 19\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192v704h896v-704h-896zM384 640v-128h256v128h-256zM640 704v128h-256v-128h256zM640 320v128h-256v-128h256zM320 320v128h-192v-128h192zM128 512h192v128h-192v-128zM704 512h192v128h-192v-128zM704 448v-128h192v128h-192zM128 704h192v128h-192v-128zM704 832v-128h192v128h-192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57371,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 25,\n\t\t\t\t\"order\": 21,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57371,\n\t\t\t\t\"name\": \"table\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 20\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M512 140c99.366 0 192.782 38.694 263.042 108.956s108.958 163.678 108.958 263.044-38.696 192.782-108.958 263.042-163.676 108.958-263.042 108.958-192.782-38.696-263.044-108.958-108.956-163.676-108.956-263.042 38.694-192.782 108.956-263.044 163.678-108.956 263.044-108.956zM512 64c-247.424 0-448 200.576-448 448s200.576 448 448 448 448-200.576 448-448-200.576-448-448-448v0zM320 384c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM576 384c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM512 656c-101.84 0-192.56-36.874-251.166-94.328 23.126 117.608 126.778 206.328 251.166 206.328 124.388 0 228.040-88.72 251.168-206.328-58.608 57.454-149.328 94.328-251.168 94.328z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57377,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 26,\n\t\t\t\t\"order\": 22,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57377,\n\t\t\t\t\"name\": \"emoticons\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 21\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M480 384l-192-192 128-128h-352v352l128-128 192 192zM640 480l192-192 128 128v-352h-352l128 128-192 192zM544 640l192 192-128 128h352v-352l-128 128-192-192zM384 544l-192 192-128-128v352h352l-128-128 192-192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57379,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 27,\n\t\t\t\t\"order\": 23,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57379,\n\t\t\t\t\"name\": \"fullscreen\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 22\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 448h896v128h-896z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57372,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 28,\n\t\t\t\t\"order\": 24,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57372,\n\t\t\t\t\"name\": \"hr\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 23\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 768h512v128h-512v-128zM768 192h-220.558l-183.766 512h-132.288l183.762-512h-223.15v-128h576v128zM929.774 896l-129.774-129.774-129.774 129.774-62.226-62.226 129.774-129.774-129.774-129.774 62.226-62.226 129.774 129.774 129.774-129.774 62.226 62.226-129.774 129.774 129.774 129.774-62.226 62.226z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57373,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 29,\n\t\t\t\t\"order\": 25,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57373,\n\t\t\t\t\"name\": \"removefromat\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 24\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M256 128h512v128h-512v-128zM896 320h-768c-35.2 0-64 28.8-64 64v256c0 35.2 28.796 64 64 64h128v192h512v-192h128c35.2 0 64-28.8 64-64v-256c0-35.2-28.8-64-64-64zM704 832h-384v-256h384v256zM910.4 416c0 25.626-20.774 46.4-46.398 46.4s-46.402-20.774-46.402-46.4 20.778-46.4 46.402-46.4c25.626 0 46.398 20.774 46.398 46.4z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57378,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 30,\n\t\t\t\t\"order\": 26,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57378,\n\t\t\t\t\"name\": \"print\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 25\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M384 128c-123.712 0-224 100.288-224 224s100.288 224 224 224v320h128v-640h64v640h128v-640h128v-128h-448z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57390,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 31,\n\t\t\t\t\"order\": 27,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57390,\n\t\t\t\t\"name\": \"visualchars\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 26\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M448 128c-123.712 0-224 100.288-224 224s100.288 224 224 224v320h128v-640h64v640h128v-640h128v-128h-448zM64 896l224-192-224-192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57391,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 32,\n\t\t\t\t\"order\": 28,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57391,\n\t\t\t\t\"name\": \"ltr\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 27\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M416 704l-192-192 192-192-64-64-256 256 256 256zM672 256l-64 64 192 192-192 192 64 64 256-256z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57367,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 38,\n\t\t\t\t\"order\": 29,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57367,\n\t\t\t\t\"name\": \"code\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 28\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M448 704h128v128h-128v-128zM704 256c35.346 0 64 28.654 64 64v166l-228 154h-92v-64l192-128v-64h-320v-128h384zM512 64c-119.666 0-232.166 46.6-316.784 131.216-84.614 84.618-131.216 197.118-131.216 316.784 0 119.664 46.602 232.168 131.216 316.784 84.618 84.616 197.118 131.216 316.784 131.216 119.664 0 232.168-46.6 316.784-131.216 84.616-84.616 131.216-197.12 131.216-316.784 0-119.666-46.6-232.166-131.216-316.784-84.616-84.616-197.12-131.216-316.784-131.216z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57366,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 39,\n\t\t\t\t\"order\": 30,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57366,\n\t\t\t\t\"name\": \"help\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 29\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M896 128h-768c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h768c35.2 0 64-28.8 64-64v-640c0-35.2-28.8-64-64-64zM896 831.884c-0.012 0.014-0.030 0.028-0.042 0.042l-191.958-319.926-160 128-224-288-191.968 479.916c-0.010-0.010-0.022-0.022-0.032-0.032v-639.77c0.034-0.040 0.076-0.082 0.114-0.114h767.77c0.040 0.034 0.082 0.076 0.116 0.116v639.768zM640 352c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96-53.019 0-96 42.981-96 96z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57364,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 40,\n\t\t\t\t\"order\": 31,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57364,\n\t\t\t\t\"name\": \"image\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 30\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M896 128h-768c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h768c35.2 0 64-28.8 64-64v-640c0-35.2-28.8-64-64-64zM256 832h-128v-128h128v128zM256 576h-128v-128h128v128zM256 320h-128v-128h128v128zM704 832h-384v-640h384v640zM896 832h-128v-128h128v128zM896 576h-128v-128h128v128zM896 320h-128v-128h128v128zM384 320v384l288-192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57365,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 41,\n\t\t\t\t\"order\": 32,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57365,\n\t\t\t\t\"name\": \"media\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 31\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M77.798 304.624l81.414 50.882c50.802-81.114 128.788-143.454 221.208-174.246l-30.366-91.094c-113.748 37.898-209.728 114.626-272.256 214.458zM673.946 90.166l-30.366 91.094c92.422 30.792 170.404 93.132 221.208 174.248l81.412-50.882c-62.526-99.834-158.506-176.562-272.254-214.46zM607.974 704.008c-4.808 0-9.692-1.090-14.286-3.386l-145.688-72.844v-211.778c0-17.672 14.328-32 32-32s32 14.328 32 32v172.222l110.31 55.156c15.806 7.902 22.214 27.124 14.31 42.932-5.604 11.214-16.908 17.696-28.646 17.698zM512 192c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.078 0 384-171.922 384-384 0-212.078-171.922-384-384-384zM512 864c-159.058 0-288-128.942-288-288s128.942-288 288-288c159.058 0 288 128.942 288 288 0 159.058-128.942 288-288 288z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57368,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 42,\n\t\t\t\t\"order\": 33,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57368,\n\t\t\t\t\"name\": \"insertdatetime\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 32\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 455.746c45.318-49.92 97.162-92.36 153.272-125.124 90.332-52.744 192.246-80.622 294.728-80.622 102.48 0 204.396 27.878 294.726 80.624 56.112 32.764 107.956 75.204 153.274 125.124v-117.432c-33.010-28.118-68.124-53.14-104.868-74.594-105.006-61.314-223.658-93.722-343.132-93.722s-238.128 32.408-343.134 93.72c-36.742 21.454-71.856 46.478-104.866 74.596v117.43zM512 320c-183.196 0-345.838 100.556-448 256 102.162 155.448 264.804 256 448 256 183.196 0 345.838-100.552 448-256-102.162-155.444-264.804-256-448-256zM512 512c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.348 28.654-64 64-64s64 28.652 64 64zM728.066 696.662c-67.434 39.374-140.128 59.338-216.066 59.338s-148.632-19.964-216.066-59.338c-51.554-30.104-98.616-71.31-138.114-120.662 39.498-49.35 86.56-90.558 138.116-120.66 13.276-7.752 26.758-14.74 40.426-20.982-10.512 23.742-16.362 50.008-16.362 77.642 0 106.040 85.962 192 192 192 106.040 0 192-85.96 192-192 0-27.634-5.85-53.9-16.36-77.642 13.668 6.244 27.15 13.23 40.426 20.982 51.554 30.102 98.616 71.31 138.116 120.66-39.498 49.352-86.56 90.558-138.116 120.662z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57369,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 43,\n\t\t\t\t\"order\": 34,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57369,\n\t\t\t\t\"name\": \"preview\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 33\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M651.168 283.834c-24.612-81.962-28.876-91.834-107.168-91.834h-64c-79.618 0-82.664 10.152-108.418 96 0 0.002 0 0.002-0.002 0.004l-143.998 479.996h113.636l57.6-192h226.366l57.6 192h113.63l-145.246-484.166zM437.218 448l38.4-136c10.086-33.618 36.38-30 36.38-30s26.294-3.618 36.38 30h0.004l38.4 136h-149.564z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57370,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 44,\n\t\t\t\t\"order\": 35,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57370,\n\t\t\t\t\"name\": \"forecolor\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 34\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M576 64c247.424 0 448 200.576 448 448s-200.576 448-448 448v-96c94.024 0 182.418-36.614 248.902-103.098 66.484-66.484 103.098-154.878 103.098-248.902 0-94.022-36.614-182.418-103.098-248.902-66.484-66.484-154.878-103.098-248.902-103.098-94.022 0-182.418 36.614-248.902 103.098-51.14 51.138-84.582 115.246-97.306 184.902h186.208l-224 256-224-256h164.57c31.060-217.102 217.738-384 443.43-384zM768 448v128h-256v-320h128v192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57384,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 45,\n\t\t\t\t\"order\": 36,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57384,\n\t\t\t\t\"name\": \"restoredraft\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 35\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M1024 592.458v-160.916l-159.144-15.914c-8.186-30.042-20.088-58.548-35.21-84.98l104.596-127.838-113.052-113.050-127.836 104.596c-26.434-15.124-54.942-27.026-84.982-35.208l-15.914-159.148h-160.916l-15.914 159.146c-30.042 8.186-58.548 20.086-84.98 35.208l-127.838-104.594-113.050 113.050 104.596 127.836c-15.124 26.432-27.026 54.94-35.21 84.98l-159.146 15.916v160.916l159.146 15.914c8.186 30.042 20.086 58.548 35.21 84.982l-104.596 127.836 113.048 113.048 127.838-104.596c26.432 15.124 54.94 27.028 84.98 35.21l15.916 159.148h160.916l15.914-159.144c30.042-8.186 58.548-20.088 84.982-35.21l127.836 104.596 113.048-113.048-104.596-127.836c15.124-26.434 27.028-54.942 35.21-84.98l159.148-15.92zM704 576l-128 128h-128l-128-128v-128l128-128h128l128 128v128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57346,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 46,\n\t\t\t\t\"order\": 37,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57346,\n\t\t\t\t\"name\": \"fullpage\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 36\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M768 206v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57375,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 47,\n\t\t\t\t\"order\": 38,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57375,\n\t\t\t\t\"name\": \"superscript\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 37\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M768 910v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57374,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 48,\n\t\t\t\t\"order\": 39,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57374,\n\t\t\t\t\"name\": \"subscript\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 38\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M704 384v-160c0-17.6-14.4-32-32-32h-160v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-160c-17.602 0-32 14.4-32 32v512c0 17.6 14.398 32 32 32h224v192h576v-576h-192zM320 128.114c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114l0 63.886h-128v-63.886zM192 320v-64h384v64h-384zM832 896h-448v-448h448v448zM448 512v128h32l32-64h64v192h-48v64h160v-64h-48v-192h64l32 64h32v-128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"tags\": [\n\t\t\t\t\t\"pastetext\"\n\t\t\t\t],\n\t\t\t\t\"defaultCode\": 57397,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 49,\n\t\t\t\t\"order\": 40,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57397,\n\t\t\t\t\"name\": \"pastetext\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 39\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M768 256h64v64h-64zM640 384h64v64h-64zM640 512h64v64h-64zM640 640h64v64h-64zM512 512h64v64h-64zM512 640h64v64h-64zM384 640h64v64h-64zM768 384h64v64h-64zM768 512h64v64h-64zM768 640h64v64h-64zM768 768h64v64h-64zM640 768h64v64h-64zM512 768h64v64h-64zM384 768h64v64h-64zM256 768h64v64h-64z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"tags\": [\n\t\t\t\t\t\"resize\",\n\t\t\t\t\t\"dots\"\n\t\t\t\t],\n\t\t\t\t\"defaultCode\": 57394,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 50,\n\t\t\t\t\"order\": 41,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57394,\n\t\t\t\t\"name\": \"resize\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 40\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M928 128h-416l-32-64h-352l-64 128h896zM840.34 704h87.66l32-448h-896l64 640h356.080c-104.882-37.776-180.080-138.266-180.080-256 0-149.982 122.018-272 272-272 149.98 0 272 122.018 272 272 0 21.678-2.622 43.15-7.66 64zM874.996 849.75l-134.496-110.692c17.454-28.922 27.5-62.814 27.5-99.058 0-106.040-85.96-192-192-192s-192 85.96-192 192 85.96 192 192 192c36.244 0 70.138-10.046 99.058-27.5l110.692 134.496c22.962 26.678 62.118 28.14 87.006 3.252l5.492-5.492c24.888-24.888 23.426-64.044-3.252-87.006zM576 764c-68.484 0-124-55.516-124-124s55.516-124 124-124 124 55.516 124 124-55.516 124-124 124z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"tags\": [\n\t\t\t\t\t\"browse\"\n\t\t\t\t],\n\t\t\t\t\"defaultCode\": 57396,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 51,\n\t\t\t\t\"order\": 42,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57396,\n\t\t\t\t\"name\": \"browse\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 41\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M864.408 670.132c-46.47-46.47-106.938-68.004-161.082-62.806l-63.326-63.326 192-192c0 0 128-128 0-256l-320 320-320-320c-128 128 0 256 0 256l192 192-63.326 63.326c-54.144-5.198-114.61 16.338-161.080 62.806-74.98 74.98-85.112 186.418-22.626 248.9 62.482 62.482 173.92 52.354 248.9-22.626 46.47-46.468 68.002-106.938 62.806-161.080l63.326-63.326 63.328 63.328c-5.196 54.144 16.336 114.61 62.806 161.078 74.978 74.98 186.418 85.112 248.898 22.626 62.488-62.482 52.356-173.918-22.624-248.9zM353.124 758.578c-2.212 24.332-15.020 49.826-35.14 69.946-22.212 22.214-51.080 35.476-77.218 35.476-10.524 0-25.298-2.228-35.916-12.848-21.406-21.404-17.376-73.132 22.626-113.136 22.212-22.214 51.080-35.476 77.218-35.476 10.524 0 25.298 2.228 35.916 12.848 13.112 13.11 13.47 32.688 12.514 43.19zM512 608c-35.346 0-64-28.654-64-64s28.654-64 64-64 64 28.654 64 64-28.654 64-64 64zM819.152 851.152c-10.62 10.62-25.392 12.848-35.916 12.848-26.138 0-55.006-13.262-77.218-35.476-20.122-20.12-32.928-45.614-35.138-69.946-0.958-10.502-0.6-30.080 12.514-43.192 10.618-10.622 25.39-12.848 35.916-12.848 26.136 0 55.006 13.262 77.216 35.474 40.004 40.008 44.032 91.736 22.626 113.14z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57351,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 14,\n\t\t\t\t\"order\": 43,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57351,\n\t\t\t\t\"name\": \"cut\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 42\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192h896v128h-896zM64 576h896v128h-896zM64 384h896v128h-896zM64 768h896v128h-896z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57350,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 15,\n\t\t\t\t\"order\": 44,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57350,\n\t\t\t\t\"name\": \"alignjustify\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 43\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192h896v128h-896zM64 576h896v128h-896zM256 384h512v128h-512zM256 768h512v128h-512z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57348,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 16,\n\t\t\t\t\"order\": 45,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57348,\n\t\t\t\t\"name\": \"aligncenter\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 44\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192h896v128h-896zM64 576h896v128h-896zM384 384h576v128h-576zM384 768h576v128h-576z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57349,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 17,\n\t\t\t\t\"order\": 46,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57349,\n\t\t\t\t\"name\": \"alignright\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 45\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M64 192h896v128h-896zM64 576h896v128h-896zM64 384h576v128h-576zM64 768h576v128h-576z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57347,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 18,\n\t\t\t\t\"order\": 47,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57347,\n\t\t\t\t\"name\": \"alignleft\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 46\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M320 128c-123.712 0-224 100.288-224 224s100.288 224 224 224v320h128v-640h64v640h128v-640h128v-128h-448zM960 512l-224 192 224 192z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57392,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 33,\n\t\t\t\t\"order\": 48,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57392,\n\t\t\t\t\"name\": \"rtl\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 47\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M512 384h128v64h-128zM512 768h128v64h-128zM576 576h128v64h-128zM768 576v192h-64v64h128v-256zM384 576h128v64h-128zM320 768h128v64h-128zM320 384h128v64h-128zM192 192v256h64v-192h64v-64zM704 448h128v-256h-64v192h-64zM64 64v896h896v-896h-896zM896 896h-768v-768h768v768zM192 576v256h64v-192h64v-64zM576 192h128v64h-128zM384 192h128v64h-128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57382,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 34,\n\t\t\t\t\"order\": 49,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57382,\n\t\t\t\t\"name\": \"template\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 48\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M816 64l16 384h-640l16-384h32l16 320h512l16-320h32zM208 960l-16-320h640l-16 320h-32l-16-256h-512l-16 256h-32zM64 512h128v64h-128zM256 512h128v64h-128zM448 512h128v64h-128zM640 512h128v64h-128zM832 512h128v64h-128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57383,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 35,\n\t\t\t\t\"order\": 50,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57383,\n\t\t\t\t\"name\": \"pagebreak\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 49\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M960 128v-64h-192c-35.202 0-64 28.8-64 64v320c0 15.856 5.858 30.402 15.496 41.614l-303.496 260.386-142-148-82 70 224 288 416-448h128v-64h-192v-320h192zM256 512h64v-384c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v384h64v-192h128v192zM128 256v-128h128v128h-128zM640 448v-96c0-35.2-8.8-64-44-64 35.2 0 44-28.8 44-64v-96c0-35.2-28.8-64-64-64h-192v448h192c35.2 0 64-28.8 64-64zM448 128h128v128h-128v-128zM448 320h128v128h-128v-128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57380,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 36,\n\t\t\t\t\"order\": 51,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57380,\n\t\t\t\t\"name\": \"spellcheck\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 50\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M448 512h-128v-128h128v-128h128v128h128v128h-128v128h-128v-128zM960 576v320h-896v-320h128v192h640v-192h128z\"\n\t\t\t\t],\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"defaultCode\": 57381,\n\t\t\t\t\"grid\": 0\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"id\": 37,\n\t\t\t\t\"order\": 52,\n\t\t\t\t\"prevSize\": 32,\n\t\t\t\t\"code\": 57381,\n\t\t\t\t\"name\": \"nonbreaking\",\n\t\t\t\t\"ligatures\": \"\"\n\t\t\t},\n\t\t\t\"setIdx\": 0,\n\t\t\t\"setId\": 2,\n\t\t\t\"iconIdx\": 51\n\t\t},\n\t\t{\n\t\t\t\"icon\": {\n\t\t\t\t\"paths\": [\n\t\t\t\t\t\"M256 352v-128c0-53.020 42.98-96 96-96h32v-128h-32c-123.712 0-224 100.288-224 224v128c0 53.020-42.98 96-96 96h-32v128h32c53.020 0 96 42.98 96 96v128c0 123.71 100.288 224 224 224h32v-128h-32c-53.020 0-96-42.98-96-96v-128c0-62.684-25.758-119.342-67.254-160 41.496-40.658 67.254-97.316 67.254-160z\",\n\t\t\t\t\t\"M1024 352v-128c0-53.020-42.98-96-96-96h-32v-128h32c123.71 0 224 100.288 224 224v128c0 53.020 42.98 96 96 96h32v128h-32c-53.020 0-96 42.98-96 96v128c0 123.71-100.29 224-224 224h-32v-128h32c53.020 0 96-42.98 96-96v-128c0-62.684 25.758-119.342 67.254-160-41.496-40.658-67.254-97.316-67.254-160z\",\n\t\t\t\t\t\"M768 320.882c0 70.692-57.308 128-128 128s-128-57.308-128-128c0-70.692 57.308-128 128-128s128 57.308 128 128z\",\n\t\t\t\t\t\"M640 511.118c-70.692 0-128 57.308-128 128 0 68.732 32 123.216 130.156 127.852-29.19 41.126-73.156 57.366-130.156 62.7v76c0 0 256 22.332 256-266.55-0.25-70.694-57.306-128.002-128-128.002z\"\n\t\t\t\t],\n\t\t\t\t\"width\": 1280,\n\t\t\t\t\"attrs\": [],\n\t\t\t\t\"isMulticolor\": false,\n\t\t\t\t\"tags\": [\n\t\t\t\t\t\"code\",\n\t\t\t\t\t\"semicolon\",\n\t\t\t\t\t\"curly-braces\"\n\t\t\t\t],\n\t\t\t\t\"grid\": 16\n\t\t\t},\n\t\t\t\"attrs\": [],\n\t\t\t\"properties\": {\n\t\t\t\t\"order\": 1,\n\t\t\t\t\"id\": 0,\n\t\t\t\t\"prevSize\": 16,\n\t\t\t\t\"code\": 58883,\n\t\t\t\t\"name\": \"codesample\"\n\t\t\t},\n\t\t\t\"setIdx\": 1,\n\t\t\t\"setId\": 1,\n\t\t\t\"iconIdx\": 0\n\t\t}\n\t],\n\t\"height\": 1024,\n\t\"metadata\": {\n\t\t\"name\": \"tinymce-small\"\n\t},\n\t\"preferences\": {\n\t\t\"showGlyphs\": true,\n\t\t\"showQuickUse\": true,\n\t\t\"showQuickUse2\": true,\n\t\t\"showSVGs\": true,\n\t\t\"fontPref\": {\n\t\t\t\"prefix\": \"icon-\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"fontFamily\": \"tinymce-small\",\n\t\t\t\t\"majorVersion\": 1,\n\t\t\t\t\"minorVersion\": 0\n\t\t\t},\n\t\t\t\"metrics\": {\n\t\t\t\t\"emSize\": 1024,\n\t\t\t\t\"baseline\": 6.25,\n\t\t\t\t\"whitespace\": 50\n\t\t\t},\n\t\t\t\"showMetrics\": false,\n\t\t\t\"showMetadata\": false,\n\t\t\t\"showVersion\": false,\n\t\t\t\"embed\": false\n\t\t},\n\t\t\"imagePref\": {\n\t\t\t\"prefix\": \"icon-\",\n\t\t\t\"png\": true,\n\t\t\t\"useClassSelector\": true,\n\t\t\t\"color\": 4473924,\n\t\t\t\"bgColor\": 16777215\n\t\t},\n\t\t\"historySize\": 100,\n\t\t\"showCodes\": true\n\t}\n}"
  },
  {
    "path": "resources/assets/js/skins/voyager/fonts/tinymce.json",
    "content": "{\n\t\"selection\": [\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58882,\n\t\t\t\"name\": \"invert\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 0,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57396,\n\t\t\t\"name\": \"browse\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57394,\n\t\t\t\"name\": \"resize\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 2,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57393,\n\t\t\t\"name\": \"copy\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 3,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57392,\n\t\t\t\"name\": \"rtl\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 4,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57391,\n\t\t\t\"name\": \"ltr\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 5,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57390,\n\t\t\t\"name\": \"visualchars\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 6,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57389,\n\t\t\t\"name\": \"strikethrough\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 7,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57388,\n\t\t\t\"name\": \"underline\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 8,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57387,\n\t\t\t\"name\": \"italic\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 9,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57386,\n\t\t\t\"name\": \"bold\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 11,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57384,\n\t\t\t\"name\": \"restoredraft\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 12,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57383,\n\t\t\t\"name\": \"pagebreak\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 13,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57382,\n\t\t\t\"name\": \"template\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 14,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57381,\n\t\t\t\"name\": \"nonbreaking\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 15,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57380,\n\t\t\t\"name\": \"spellchecker\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 19,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57376,\n\t\t\t\"name\": \"charmap\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 20,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57375,\n\t\t\t\"name\": \"sup\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 21,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57374,\n\t\t\t\"name\": \"sub\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 22,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57373,\n\t\t\t\"name\": \"removeformat\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 23,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57372,\n\t\t\t\"name\": \"hr\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 24,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57371,\n\t\t\t\"name\": \"table\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 25,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57370,\n\t\t\t\"name\": \"forecolor\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 26,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57369,\n\t\t\t\"name\": \"preview\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 27,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57368,\n\t\t\t\"name\": \"inserttime\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 28,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57367,\n\t\t\t\"name\": \"code\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 29,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57366,\n\t\t\t\"name\": \"help\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 30,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57365,\n\t\t\t\"name\": \"media\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 31,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57364,\n\t\t\t\"name\": \"image\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 32,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57363,\n\t\t\t\"name\": \"anchor\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 33,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57362,\n\t\t\t\"name\": \"unlink\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 34,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57361,\n\t\t\t\"name\": \"link\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 38,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57357,\n\t\t\t\"name\": \"outdent\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 39,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57356,\n\t\t\t\"name\": \"indent\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 40,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57355,\n\t\t\t\"name\": \"numlist\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 41,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57354,\n\t\t\t\"name\": \"bullist\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 42,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57353,\n\t\t\t\"name\": \"searchreplace\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 43,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57352,\n\t\t\t\"name\": \"paste\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 44,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57351,\n\t\t\t\"name\": \"cut\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 45,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57350,\n\t\t\t\"name\": \"alignjustify\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 46,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57349,\n\t\t\t\"name\": \"alignright\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 47,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57348,\n\t\t\t\"name\": \"aligncenter\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 48,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57347,\n\t\t\t\"name\": \"alignleft\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 49,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57346,\n\t\t\t\"name\": \"fullpage\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 50,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57345,\n\t\t\t\"name\": \"newdocument\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 51,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57344,\n\t\t\t\"name\": \"save\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 52,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57395,\n\t\t\t\"name\": \"checkbox\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 53,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57397,\n\t\t\t\"name\": \"pastetext\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 16,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57379,\n\t\t\t\"name\": \"fullscreen\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 17,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57378,\n\t\t\t\"name\": \"print\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 18,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57377,\n\t\t\t\"name\": \"emoticons\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 37,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57358,\n\t\t\t\"name\": \"blockquote\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 36,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57359,\n\t\t\t\"name\": \"undo\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 35,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 57360,\n\t\t\t\"name\": \"redo\",\n\t\t\t\"ligatures\": \"\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 1,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58883,\n\t\t\t\"name\": \"codesample\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 87,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 59700,\n\t\t\t\"ligatures\": \"droplet, color9\",\n\t\t\t\"name\": \"drop\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 635,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60327,\n\t\t\t\"ligatures\": \"diamond2, gem2\",\n\t\t\t\"name\": \"sharpen\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 854,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60628,\n\t\t\t\"ligatures\": \"contrast\",\n\t\t\t\"name\": \"contrast\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 24,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60778,\n\t\t\t\"ligatures\": \"cross2, cancel3\",\n\t\t\t\"name\": \"cross2\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1097,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60921,\n\t\t\t\"ligatures\": \"arrow-resize2, diagonal2\",\n\t\t\t\"name\": \"arrow-resize2\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 1,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58880,\n\t\t\t\"name\": \"gamma\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58881,\n\t\t\t\"name\": \"orientation\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 68,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 59668,\n\t\t\t\"ligatures\": \"pencil7, write7\",\n\t\t\t\"name\": \"editimage\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 22,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60072,\n\t\t\t\"ligatures\": \"rotate-ccw3, ccw4\",\n\t\t\t\"name\": \"rotateleft\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 1679,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60073,\n\t\t\t\"ligatures\": \"rotate-cw3, cw4\",\n\t\t\t\"name\": \"rotateright\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 403,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60074,\n\t\t\t\"ligatures\": \"flip-vertical, mirror\",\n\t\t\t\"name\": \"flipv\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 405,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60076,\n\t\t\t\"ligatures\": \"flip-horizontal, mirror3\",\n\t\t\t\"name\": \"fliph\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 534,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60213,\n\t\t\t\"ligatures\": \"zoom-in3, magnifier9\",\n\t\t\t\"name\": \"zoomin\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 535,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60214,\n\t\t\t\"ligatures\": \"zoom-out3, magnifier10\",\n\t\t\t\"name\": \"zoomout\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 1448,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60522,\n\t\t\t\"ligatures\": \"menu3, list4\",\n\t\t\t\"name\": \"options\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 844,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60620,\n\t\t\t\"ligatures\": \"sun2, weather21\",\n\t\t\t\"name\": \"sun\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 855,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60621,\n\t\t\t\"ligatures\": \"moon, night\",\n\t\t\t\"name\": \"moon\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1056,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 60864,\n\t\t\t\"ligatures\": \"arrow-left, left4\",\n\t\t\t\"name\": \"arrowleft\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1201,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 61048,\n\t\t\t\"ligatures\": \"crop, resize\",\n\t\t\t\"name\": \"crop\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1680,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58884,\n\t\t\t\"name\": \"tablerowprops\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1681,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58885,\n\t\t\t\"name\": \"tablecellprops\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1682,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58886,\n\t\t\t\"name\": \"table2\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1683,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58887,\n\t\t\t\"name\": \"tablemergecells\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1684,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58888,\n\t\t\t\"name\": \"tableinsertcolbefore\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1685,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58889,\n\t\t\t\"name\": \"tableinsertcolafter\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1686,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58890,\n\t\t\t\"name\": \"tableinsertrowbefore\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1687,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58891,\n\t\t\t\"name\": \"tableinsertrowafter\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1688,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58893,\n\t\t\t\"name\": \"tablesplitcells\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1689,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58894,\n\t\t\t\"name\": \"tabledelete\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1690,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58922,\n\t\t\t\"name\": \"tableleftheader\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 1691,\n\t\t\t\"order\": 0,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 58923,\n\t\t\t\"name\": \"tabletopheader\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 1693,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 59392,\n\t\t\t\"name\": \"tabledeleterow\",\n\t\t\t\"tempChar\": \"\"\n\t\t},\n\t\t{\n\t\t\t\"order\": 0,\n\t\t\t\"id\": 1692,\n\t\t\t\"prevSize\": 32,\n\t\t\t\"code\": 59393,\n\t\t\t\"name\": \"tabledeletecol\",\n\t\t\t\"tempChar\": \"\"\n\t\t}\n\t],\n\t\"metadata\": {\n\t\t\"name\": \"tinymce\",\n\t\t\"iconsHash\": 757772004\n\t},\n\t\"height\": 1024,\n\t\"prevSize\": 32,\n\t\"icons\": [\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M892.8 982.4l-89.6-89.6c-70.4 80-172.8 131.2-288 131.2-208 0-380.8-166.4-384-377.6 0 0 0 0 0 0 0-3.2 0-3.2 0-6.4s0-3.2 0-6.4v0c0 0 0 0 0-3.2 0 0 0-3.2 0-3.2 3.2-105.6 48-211.2 105.6-304l-192-192 44.8-44.8 182.4 182.4c0 0 0 0 0 0l569.6 569.6c0 0 0 0 0 0l99.2 99.2-48 44.8zM896 633.6c0 0 0 0 0 0 0-3.2 0-6.4 0-6.4-9.6-316.8-384-627.2-384-627.2s-108.8 89.6-208 220.8l70.4 70.4c6.4-9.6 16-22.4 22.4-32 41.6-51.2 83.2-96 115.2-128v0c32 32 73.6 76.8 115.2 128 108.8 137.6 169.6 265.6 172.8 371.2 0 0 0 3.2 0 3.2v0 0c0 3.2 0 3.2 0 6.4s0 3.2 0 3.2v0 0c0 22.4-3.2 41.6-9.6 64l76.8 76.8c16-41.6 28.8-89.6 28.8-137.6 0 0 0 0 0 0 0-3.2 0-3.2 0-6.4s-0-3.2-0-6.4z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"invert\"\n\t\t\t],\n\t\t\t\"grid\": 16,\n\t\t\t\"defaultCode\": 58882\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M928 128h-416l-32-64h-352l-64 128h896zM904.34 704h74.86l44.8-448h-1024l64 640h484.080c-104.882-37.776-180.080-138.266-180.080-256 0-149.982 122.018-272 272-272 149.98 0 272 122.018 272 272 0 21.678-2.622 43.15-7.66 64zM1002.996 913.75l-198.496-174.692c17.454-28.92 27.5-62.814 27.5-99.058 0-106.040-85.96-192-192-192s-192 85.96-192 192 85.96 192 192 192c36.244 0 70.138-10.046 99.058-27.5l174.692 198.496c22.962 26.678 62.118 28.14 87.006 3.252l5.492-5.492c24.888-24.888 23.426-64.044-3.252-87.006zM640 764c-68.484 0-124-55.516-124-124s55.516-124 124-124 124 55.516 124 124-55.516 124-124 124z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"defaultCode\": 57396,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M768 256h64v64h-64zM640 384h64v64h-64zM640 512h64v64h-64zM640 640h64v64h-64zM512 512h64v64h-64zM512 640h64v64h-64zM384 640h64v64h-64zM768 384h64v64h-64zM768 512h64v64h-64zM768 640h64v64h-64zM768 768h64v64h-64zM640 768h64v64h-64zM512 768h64v64h-64zM384 768h64v64h-64zM256 768h64v64h-64z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"resize\",\n\t\t\t\t\"dots\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57394,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M832 256h-192v-64l-192-192h-448v768h384v256h640v-576l-192-192zM832 346.51l101.49 101.49h-101.49v-101.49zM448 90.51l101.49 101.49h-101.49v-101.49zM64 64h320v192h192v448h-512v-640zM960 960h-512v-192h192v-448h128v192h192v448z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"copy\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57393,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M256 64h512v128h-128v768h-128v-768h-128v768h-128v-448c-123.712 0-224-100.288-224-224s100.288-224 224-224zM960 896l-256-224 256-224z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"rtl\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57392,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M448 64h512v128h-128v768h-128v-768h-128v768h-128v-448c-123.712 0-224-100.288-224-224s100.288-224 224-224zM64 448l256 224-256 224z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"ltr\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57391,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M384 64h512v128h-128v768h-128v-768h-128v768h-128v-448c-123.712 0-224-100.288-224-224s100.288-224 224-224z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"visualchars\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57390,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M731.42 517.036c63.92 47.938 100.58 116.086 100.58 186.964s-36.66 139.026-100.58 186.964c-59.358 44.518-137.284 69.036-219.42 69.036-82.138 0-160.062-24.518-219.42-69.036-63.92-47.938-100.58-116.086-100.58-186.964h128c0 69.382 87.926 128 192 128 104.074 0 192-58.618 192-128 0-69.382-87.926-128-192-128-82.138 0-160.062-24.518-219.42-69.036-63.92-47.94-100.58-116.086-100.58-186.964 0-70.878 36.66-139.024 100.58-186.964 59.358-44.518 137.282-69.036 219.42-69.036 82.136 0 160.062 24.518 219.42 69.036 63.92 47.94 100.58 116.086 100.58 186.964h-128c0-69.382-87.926-128-192-128-104.074 0-192 58.618-192 128 0 69.382 87.926 128 192 128 82.136 0 160.062 24.518 219.42 69.036zM0 512h1024v64h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"strikethrough\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57389,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M704 64h128v416c0 159.058-143.268 288-320 288-176.73 0-320-128.942-320-288v-416h128v416c0 40.166 18.238 78.704 51.354 108.506 36.896 33.204 86.846 51.494 140.646 51.494 53.8 0 103.75-18.29 140.646-51.494 33.116-29.802 51.354-68.34 51.354-108.506v-416zM192 832h640v128h-640z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"underline\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57388,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M896 64v64h-128l-320 768h128v64h-448v-64h128l320-768h-128v-64z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"italic\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57387,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M707.88 484.652c37.498-44.542 60.12-102.008 60.12-164.652 0-141.16-114.842-256-256-256h-320v896h384c141.158 0 256-114.842 256-256 0-92.956-49.798-174.496-124.12-219.348zM384 192h101.5c55.968 0 101.5 57.42 101.5 128s-45.532 128-101.5 128h-101.5v-256zM543 832h-159v-256h159c58.45 0 106 57.42 106 128s-47.55 128-106 128z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"bold0\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57386,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M576 64c247.424 0 448 200.576 448 448s-200.576 448-448 448v-96c94.024 0 182.418-36.614 248.902-103.098 66.484-66.484 103.098-154.878 103.098-248.902 0-94.022-36.614-182.418-103.098-248.902-66.484-66.484-154.878-103.098-248.902-103.098-94.022 0-182.418 36.614-248.902 103.098-51.14 51.138-84.582 115.246-97.306 184.902h186.208l-224 256-224-256h164.57c31.060-217.102 217.738-384 443.43-384zM768 448v128h-256v-320h128v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"restoredraft\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57384,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 512h128v64h-128zM192 512h192v64h-192zM448 512h128v64h-128zM640 512h192v64h-192zM896 512h128v64h-128zM880 0l16 448h-768l16-448h32l16 384h640l16-384zM144 1024l-16-384h768l-16 384h-32l-16-320h-640l-16 320z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"pagebreak\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57383,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M384 192h128v64h-128zM576 192h128v64h-128zM896 192v256h-192v-64h128v-128h-64v-64zM320 384h128v64h-128zM512 384h128v64h-128zM192 256v128h64v64h-128v-256h192v64zM384 576h128v64h-128zM576 576h128v64h-128zM896 576v256h-192v-64h128v-128h-64v-64zM320 768h128v64h-128zM512 768h128v64h-128zM192 640v128h64v64h-128v-256h192v64zM960 64h-896v896h896v-896zM1024 0v0 1024h-1024v-1024h1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"template\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57382,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M448 576h-192v-128h192v-192h128v192h192v128h-192v192h-128zM1024 640v384h-1024v-384h128v256h768v-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"nonbreaking\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57381,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M128 256h128v192h64v-384c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v384h64v-192zM128 64h128v128h-128v-128zM960 64v-64h-192c-35.202 0-64 28.8-64 64v320c0 35.2 28.798 64 64 64h192v-64h-192v-320h192zM640 160v-96c0-35.2-28.8-64-64-64h-192v448h192c35.2 0 64-28.8 64-64v-96c0-35.2-8.8-64-44-64 35.2 0 44-28.8 44-64zM576 384h-128v-128h128v128zM576 192h-128v-128h128v128zM832 576l-416 448-224-288 82-70 142 148 352-302z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"spellchecker\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57380,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M704 896h256l64-128v256h-384v-214.214c131.112-56.484 224-197.162 224-361.786 0-214.432-157.598-382.266-352-382.266-194.406 0-352 167.832-352 382.266 0 164.624 92.886 305.302 224 361.786v214.214h-384v-256l64 128h256v-32.59c-187.63-66.46-320-227.402-320-415.41 0-247.424 229.23-448 512-448 282.77 0 512 200.576 512 448 0 188.008-132.37 348.95-320 415.41v32.59z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"charmap\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57376,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M768 206v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"sup\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57375,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M768 910v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"sub\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57374,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 896h576v128h-576zM192 0h704v128h-704zM277.388 832l204.688-784.164 123.85 32.328-196.25 751.836zM929.774 1024l-129.774-129.774-129.774 129.774-62.226-62.226 129.774-129.774-129.774-129.774 62.226-62.226 129.774 129.774 129.774-129.774 62.226 62.226-129.774 129.774 129.774 129.774z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"removeformat\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57373,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 448h1024v128h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"hr\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57372,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v896h1024v-896h-1024zM384 640v-192h256v192h-256zM640 704v192h-256v-192h256zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM64 448h256v192h-256v-192zM704 448h256v192h-256v-192zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192zM704 896v-192h256v192h-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"table\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57371,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M322.018 832l57.6-192h264.764l57.6 192h113.632l-191.996-640h-223.236l-192 640h113.636zM475.618 320h72.764l57.6 192h-187.964l57.6-192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"forecolor\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57370,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M512 320c-209.368 0-395.244 100.556-512 256 116.756 155.446 302.632 256 512 256 209.368 0 395.244-100.554 512-256-116.756-155.444-302.632-256-512-256zM448 448c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM773.616 705.296c-39.648 20.258-81.652 35.862-124.846 46.376-44.488 10.836-90.502 16.328-136.77 16.328-46.266 0-92.282-5.492-136.768-16.324-43.194-10.518-85.198-26.122-124.846-46.376-63.020-32.202-120.222-76.41-167.64-129.298 47.418-52.888 104.62-97.1 167.64-129.298 32.336-16.522 66.242-29.946 101.082-40.040-19.888 30.242-31.468 66.434-31.468 105.336 0 106.040 85.962 192 192 192 106.038 0 192-85.96 192-192 0-38.902-11.582-75.094-31.466-105.34 34.838 10.096 68.744 23.52 101.082 40.042 63.022 32.198 120.218 76.408 167.638 129.298-47.42 52.886-104.618 97.1-167.638 129.296zM860.918 243.722c-108.72-55.554-226.112-83.722-348.918-83.722-122.806 0-240.198 28.168-348.918 83.722-58.772 30.032-113.732 67.904-163.082 112.076v109.206c55.338-58.566 120.694-107.754 192.194-144.29 99.62-50.904 207.218-76.714 319.806-76.714s220.186 25.81 319.804 76.716c71.502 36.536 136.858 85.724 192.196 144.29v-109.206c-49.35-44.174-104.308-82.046-163.082-112.078z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"preview\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57369,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M512 192c-212.076 0-384 171.922-384 384s171.922 384 384 384c212.074 0 384-171.922 384-384s-171.926-384-384-384zM715.644 779.646c-54.392 54.396-126.716 84.354-203.644 84.354s-149.25-29.958-203.646-84.354c-54.396-54.394-84.354-126.718-84.354-203.646s29.958-149.25 84.354-203.646c54.396-54.396 126.718-84.354 203.646-84.354s149.252 29.958 203.642 84.354c54.402 54.396 84.358 126.718 84.358 203.646s-29.958 149.252-84.356 203.646zM325.93 203.862l-42.94-85.878c-98.874 49.536-179.47 130.132-229.006 229.008l85.876 42.94c40.248-80.336 105.732-145.822 186.070-186.070zM884.134 389.93l85.878-42.938c-49.532-98.876-130.126-179.472-229.004-229.008l-42.944 85.878c80.338 40.248 145.824 105.732 186.070 186.068zM512 384h-64v192c0 10.11 4.7 19.11 12.022 24.972l-0.012 0.016 160 128 39.976-49.976-147.986-118.39v-176.622z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"inserttime\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57368,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M320 256l-256 256 256 256h128l-256-256 256-256zM704 256h-128l256 256-256 256h128l256-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"code\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57367,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M448 704h128v128h-128zM704 256c35.346 0 64 28.654 64 64v192l-192 128h-128v-64l192-128v-64h-320v-128h384zM512 96c-111.118 0-215.584 43.272-294.156 121.844s-121.844 183.038-121.844 294.156c0 111.118 43.272 215.584 121.844 294.156 78.572 78.572 183.038 121.844 294.156 121.844 111.118 0 215.584-43.272 294.156-121.844 78.572-78.572 121.844-183.038 121.844-294.156 0-111.118-43.272-215.584-121.844-294.156-78.572-78.572-183.038-121.844-294.156-121.844zM512 0v0c282.77 0 512 229.23 512 512s-229.23 512-512 512c-282.77 0-512-229.23-512-512 0-282.77 229.23-512 512-512z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"help\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57366,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 128v768h1024v-768h-1024zM192 832h-128v-128h128v128zM192 576h-128v-128h128v128zM192 320h-128v-128h128v128zM768 832h-512v-640h512v640zM960 832h-128v-128h128v128zM960 576h-128v-128h128v128zM960 320h-128v-128h128v128zM384 320v384l256-192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"media\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57365,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 128v832h1024v-832h-1024zM960 896h-896v-704h896v704zM704 352c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96-53.019 0-96-42.981-96-96zM896 832h-768l192-512 256 320 128-96z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"image\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57364,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M192 0v1024l320-320 320 320v-1024h-640zM768 869.49l-256-256-256 256v-805.49h512v805.49z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"anchor\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57363,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M476.888 675.114c4.56 9.048 6.99 19.158 6.99 29.696 0 17.616-6.744 34.058-18.992 46.308l-163.38 163.38c-12.248 12.248-28.696 18.992-46.308 18.992s-34.060-6.744-46.308-18.992l-99.38-99.38c-12.248-12.25-18.992-28.696-18.992-46.308s6.744-34.060 18.992-46.308l163.38-163.382c12.248-12.246 28.696-18.992 46.308-18.992 10.538 0 20.644 2.43 29.696 6.988l65.338-65.336c-27.87-21.41-61.44-32.16-95.034-32.16-39.986 0-79.972 15.166-110.308 45.502l-163.38 163.382c-60.67 60.67-60.67 159.95 0 220.618l99.38 99.382c30.334 30.332 70.32 45.5 110.306 45.5 39.988 0 79.974-15.168 110.308-45.502l163.38-163.38c55.82-55.82 60.238-144.298 13.344-205.346l-65.34 65.338zM978.496 144.884l-99.38-99.382c-30.334-30.336-70.32-45.502-110.308-45.502-39.986 0-79.97 15.166-110.306 45.502l-163.382 163.382c-55.82 55.82-60.238 144.298-13.342 205.342l65.338-65.34c-4.558-9.050-6.988-19.16-6.988-29.694 0-17.616 6.744-34.060 18.992-46.308l163.382-163.382c12.246-12.248 28.694-18.994 46.306-18.994 17.616 0 34.060 6.746 46.308 18.994l99.38 99.382c12.248 12.248 18.992 28.694 18.992 46.308s-6.744 34.060-18.992 46.308l-163.38 163.382c-12.248 12.248-28.694 18.992-46.308 18.992-10.536 0-20.644-2.43-29.696-6.99l-65.338 65.338c27.872 21.41 61.44 32.16 95.034 32.16 39.988 0 79.974-15.168 110.308-45.504l163.38-163.38c60.672-60.666 60.672-159.944 0-220.614zM233.368 278.624l-191.994-191.994 45.256-45.256 191.994 191.994zM384 0h64v192h-64zM0 384h192v64h-192zM790.632 745.376l191.996 191.996-45.256 45.256-191.996-191.996zM576 832h64v192h-64zM832 576h192v64h-192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"unlink\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57362,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M320 704c17.6 17.6 47.274 16.726 65.942-1.942l316.118-316.116c18.668-18.668 19.54-48.342 1.94-65.942s-47.274-16.726-65.942 1.942l-316.116 316.116c-18.668 18.668-19.542 48.342-1.942 65.942zM476.888 675.112c4.56 9.050 6.99 19.16 6.99 29.696 0 17.616-6.744 34.060-18.992 46.308l-163.382 163.382c-12.248 12.248-28.694 18.992-46.308 18.992s-34.060-6.744-46.308-18.992l-99.382-99.382c-12.248-12.248-18.992-28.694-18.992-46.308s6.744-34.060 18.992-46.308l163.382-163.382c12.248-12.248 28.694-18.994 46.308-18.994 10.536 0 20.644 2.43 29.696 6.99l65.338-65.338c-27.87-21.41-61.44-32.16-95.034-32.16-39.986 0-79.972 15.166-110.308 45.502l-163.382 163.382c-60.67 60.67-60.67 159.948 0 220.618l99.382 99.382c30.334 30.332 70.32 45.5 110.306 45.5 39.988 0 79.974-15.168 110.308-45.502l163.382-163.382c55.82-55.82 60.238-144.298 13.344-205.344l-65.34 65.34zM978.498 144.884l-99.382-99.382c-30.334-30.336-70.32-45.502-110.308-45.502-39.986 0-79.972 15.166-110.308 45.502l-163.382 163.382c-55.82 55.82-60.238 144.298-13.342 205.342l65.338-65.34c-4.558-9.050-6.988-19.16-6.988-29.694 0-17.616 6.744-34.060 18.992-46.308l163.382-163.382c12.248-12.248 28.694-18.994 46.308-18.994s34.060 6.746 46.308 18.994l99.382 99.382c12.248 12.248 18.992 28.694 18.992 46.308s-6.744 34.060-18.992 46.308l-163.382 163.382c-12.248 12.248-28.694 18.992-46.308 18.992-10.536 0-20.644-2.43-29.696-6.99l-65.338 65.338c27.872 21.41 61.44 32.16 95.034 32.16 39.988 0 79.974-15.168 110.308-45.502l163.382-163.382c60.67-60.666 60.67-159.944 0-220.614z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"link\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57361,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v128h-1024zM384 256h640v128h-640zM384 448h640v128h-640zM384 640h640v128h-640zM0 832h1024v128h-1024zM256 320v384l-256-192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"outdent\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57357,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v128h-1024zM384 256h640v128h-640zM384 448h640v128h-640zM384 640h640v128h-640zM0 832h1024v128h-1024zM0 704v-384l256 192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"indent\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57356,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M384 832h640v128h-640zM384 448h640v128h-640zM384 64h640v128h-640zM192 0v256h-64v-192h-64v-64zM128 526v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM256 704v320h-192v-64h128v-64h-128v-64h128v-64h-128v-64z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"numlist\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57355,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M384 64h640v128h-640v-128zM384 448h640v128h-640v-128zM384 832h640v128h-640v-128zM0 128c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128zM0 512c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128zM0 896c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"bullist\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57354,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M64 0h384v64h-384zM576 0h384v64h-384zM952 320h-56v-256h-256v256h-256v-256h-256v256h-56c-39.6 0-72 32.4-72 72v560c0 39.6 32.4 72 72 72h304c39.6 0 72-32.4 72-72v-376h128v376c0 39.6 32.4 72 72 72h304c39.6 0 72-32.4 72-72v-560c0-39.6-32.4-72-72-72zM348 960h-248c-19.8 0-36-14.4-36-32s16.2-32 36-32h248c19.8 0 36 14.4 36 32s-16.2 32-36 32zM544 512h-64c-17.6 0-32-14.4-32-32s14.4-32 32-32h64c17.6 0 32 14.4 32 32s-14.4 32-32 32zM924 960h-248c-19.8 0-36-14.4-36-32s16.2-32 36-32h248c19.8 0 36 14.4 36 32s-16.2 32-36 32z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"searchreplace\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57353,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M832 320v-160c0-17.6-14.4-32-32-32h-224v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-224c-17.602 0-32 14.4-32 32v640c0 17.6 14.398 32 32 32h288v192h448l192-192v-512h-192zM384 64.114c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114l0 63.886h-128v-63.886zM192 256v-64h512v64h-512zM832 933.49v-101.49h101.49l-101.49 101.49zM960 768h-192v192h-320v-576h512v384z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"paste\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57352,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M890.774 709.154c-45.654-45.556-103.728-69.072-157.946-69.072h-29.112l-63.904-64.008 255.62-256.038c63.904-64.010 63.904-192.028 0-256.038l-383.43 384.056-383.432-384.054c-63.904 64.008-63.904 192.028 0 256.038l255.622 256.034-63.906 64.008h-29.114c-54.22 0-112.292 23.518-157.948 69.076-81.622 81.442-92.65 202.484-24.63 270.35 29.97 29.902 70.288 44.494 112.996 44.494 54.216 0 112.29-23.514 157.946-69.072 53.584-53.464 76.742-124 67.084-185.348l65.384-65.488 65.376 65.488c-9.656 61.348 13.506 131.882 67.084 185.348 45.662 45.558 103.732 69.072 157.948 69.072 42.708 0 83.024-14.592 112.994-44.496 68.020-67.866 56.988-188.908-24.632-270.35zM353.024 845.538c-7.698 17.882-19.010 34.346-33.626 48.926-14.636 14.604-31.172 25.918-49.148 33.624-16.132 6.916-32.96 10.568-48.662 10.568-15.146 0-36.612-3.402-52.862-19.612-16.136-16.104-19.52-37.318-19.52-52.288 0-15.542 3.642-32.21 10.526-48.212 7.7-17.884 19.014-34.346 33.626-48.926 14.634-14.606 31.172-25.914 49.15-33.624 16.134-6.914 32.96-10.568 48.664-10.568 15.146 0 36.612 3.4 52.858 19.614 16.134 16.098 19.522 37.316 19.522 52.284 0.002 15.542-3.638 32.216-10.528 48.214zM512.004 666.596c-49.914 0-90.376-40.532-90.376-90.526 0-49.992 40.462-90.52 90.376-90.52s90.372 40.528 90.372 90.52c0 49.998-40.46 90.526-90.372 90.526zM855.272 919.042c-16.248 16.208-37.712 19.612-52.86 19.612-15.704 0-32.53-3.652-48.666-10.568-17.972-7.706-34.508-19.020-49.142-33.624-14.614-14.58-25.926-31.042-33.626-48.926-6.886-15.998-10.526-32.672-10.526-48.212 0-14.966 3.384-36.188 19.52-52.286 16.246-16.208 37.712-19.614 52.86-19.614 15.7 0 32.53 3.654 48.66 10.568 17.978 7.708 34.516 19.018 49.15 33.624 14.61 14.58 25.924 31.042 33.626 48.926 6.884 15.998 10.526 32.67 10.526 48.212-0.002 14.97-3.39 36.186-19.522 52.288z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"cut\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57351,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v128h-1024zM0 256h1024v128h-1024zM0 448h1024v128h-1024zM0 640h1024v128h-1024zM0 832h1024v128h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"alignjustify\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57350,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v128h-1024zM384 256h640v128h-640zM384 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"alignright\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57349,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v128h-1024zM192 256h640v128h-640zM192 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"aligncenter\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57348,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v128h-1024zM0 256h640v128h-640zM0 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"alignleft\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57347,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M1024 592.458v-160.916l-159.144-15.914c-8.186-30.042-20.088-58.548-35.21-84.98l104.596-127.838-113.052-113.050-127.836 104.596c-26.434-15.124-54.942-27.026-84.982-35.208l-15.914-159.148h-160.916l-15.914 159.146c-30.042 8.186-58.548 20.086-84.98 35.208l-127.838-104.594-113.050 113.050 104.596 127.836c-15.124 26.432-27.026 54.94-35.21 84.98l-159.146 15.916v160.916l159.146 15.914c8.186 30.042 20.086 58.548 35.21 84.982l-104.596 127.836 113.048 113.048 127.838-104.596c26.432 15.124 54.94 27.028 84.98 35.21l15.916 159.148h160.916l15.914-159.144c30.042-8.186 58.548-20.088 84.982-35.21l127.836 104.596 113.048-113.048-104.596-127.836c15.124-26.434 27.028-54.942 35.21-84.98l159.148-15.92zM704 576l-128 128h-128l-128-128v-128l128-128h128l128 128v128z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"fullpage\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57346,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M903.432 199.43l-142.864-142.862c-31.112-31.112-92.568-56.568-136.568-56.568h-480c-44 0-80 36-80 80v864c0 44 36 80 80 80h736c44 0 80-36 80-80v-608c0-44-25.456-105.458-56.568-136.57zM858.178 244.686c3.13 3.13 6.25 6.974 9.28 11.314h-163.458v-163.456c4.34 3.030 8.184 6.15 11.314 9.28l142.864 142.862zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16h480c4.832 0 10.254 0.61 16 1.704v254.296h254.296c1.094 5.746 1.704 11.166 1.704 16v608z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"newdocument\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57345,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M896 0h-896v1024h1024v-896l-128-128zM512 128h128v256h-128v-256zM896 896h-768v-768h64v320h576v-320h74.978l53.022 53.018v714.982z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"save\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57344,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M128 544l288 288 480-480-128-128-352 352-160-160z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"defaultCode\": 57395,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M512 512v128h32l32-64h64v256h-48v64h224v-64h-48v-256h64l32 64h32v-128zM832 320v-160c0-17.6-14.4-32-32-32h-224v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-224c-17.602 0-32 14.4-32 32v640c0 17.6 14.398 32 32 32h288v192h640v-704h-192zM384 64.114c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114l0 63.886h-128v-63.886zM192 256v-64h512v64h-512zM960 960h-512v-576h512v576z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"pastetext\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57397,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M1024 0v384l-138.26-138.26-212 212-107.48-107.48 212-212-138.26-138.26zM245.74 138.26l212 212-107.48 107.48-212-212-138.26 138.26v-384h384zM885.74 778.26l138.26-138.26v384h-384l138.26-138.26-212-212 107.48-107.48zM457.74 673.74l-212 212 138.26 138.26h-384v-384l138.26 138.26 212-212z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"fullscreen\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57379,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M256 64h512v128h-512zM960 256h-896c-35.2 0-64 28.8-64 64v320c0 35.2 28.796 64 64 64h192v256h512v-256h192c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64zM704 896h-384v-320h384v320zM974.4 352c0 25.626-20.774 46.4-46.398 46.4-25.626 0-46.402-20.774-46.402-46.4s20.776-46.4 46.402-46.4c25.626 0 46.398 20.774 46.398 46.4z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"print\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57378,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M512 0c-282.77 0-512 229.228-512 512 0 282.77 229.228 512 512 512 282.77 0 512-229.23 512-512 0-282.772-229.23-512-512-512zM512 944c-238.586 0-432-193.412-432-432 0-238.586 193.414-432 432-432 238.59 0 432 193.414 432 432 0 238.588-193.41 432-432 432zM384 320c0 35.346-28.654 64-64 64s-64-28.654-64-64 28.654-64 64-64 64 28.654 64 64zM768 320c0 35.346-28.652 64-64 64s-64-28.654-64-64 28.652-64 64-64 64 28.654 64 64zM512 652c141.074 0 262.688-57.532 318.462-123.192-20.872 171.22-156.288 303.192-318.462 303.192-162.118 0-297.498-132.026-318.444-303.168 55.786 65.646 177.386 123.168 318.444 123.168z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"emoticons\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57377,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M225 448c123.712 0 224 100.29 224 224 0 123.712-100.288 224-224 224-123.712 0-224-100.288-224-224l-1-32c0-247.424 200.576-448 448-448v128c-85.474 0-165.834 33.286-226.274 93.726-11.634 11.636-22.252 24.016-31.83 37.020 11.438-1.8 23.16-2.746 35.104-2.746zM801 448c123.71 0 224 100.29 224 224 0 123.712-100.29 224-224 224-123.71 0-224-100.288-224-224l-1-32c0-247.424 200.576-448 448-448v128c-85.474 0-165.834 33.286-226.274 93.726-11.636 11.636-22.254 24.016-31.832 37.020 11.44-1.8 23.16-2.746 35.106-2.746z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"blockquote\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57358,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M761.862 1024c113.726-206.032 132.888-520.306-313.862-509.824v253.824l-384-384 384-384v248.372c534.962-13.942 594.57 472.214 313.862 775.628z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"undo\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57359,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M576 248.372v-248.372l384 384-384 384v-253.824c-446.75-10.482-427.588 303.792-313.86 509.824-280.712-303.414-221.1-789.57 313.86-775.628z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"redo\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57360,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M199.995 381.998v-104.002c0-43.078 34.923-78.001 78.001-78.001h26v-104.002h-26c-100.518 0-182.003 81.485-182.003 182.003v104.002c0 43.078-34.923 78.001-78.001 78.001h-26v104.002h26c43.078 0 78.001 34.923 78.001 78.001v104.002c0 100.515 81.485 182.003 182.003 182.003h26v-104.002h-26c-43.078 0-78.001-34.923-78.001-78.001v-104.002c0-50.931-20.928-96.966-54.646-130.002 33.716-33.036 54.646-79.072 54.646-130.002z\",\n\t\t\t\t\"M824.005 381.998v-104.002c0-43.078-34.923-78.001-78.001-78.001h-26v-104.002h26c100.515 0 182.003 81.485 182.003 182.003v104.002c0 43.078 34.923 78.001 78.001 78.001h26v104.002h-26c-43.078 0-78.001 34.923-78.001 78.001v104.002c0 100.515-81.488 182.003-182.003 182.003h-26v-104.002h26c43.078 0 78.001-34.923 78.001-78.001v-104.002c0-50.931 20.928-96.966 54.646-130.002-33.716-33.036-54.646-79.072-54.646-130.002z\",\n\t\t\t\t\"M616.002 356.715c0 57.439-46.562 104.002-104.002 104.002s-104.002-46.562-104.002-104.002c0-57.439 46.562-104.002 104.002-104.002s104.002 46.562 104.002 104.002z\",\n\t\t\t\t\"M512 511.283c-57.439 0-104.002 46.562-104.002 104.002 0 55.845 26 100.115 105.752 103.88-23.719 33.417-59.441 46.612-105.752 50.944v61.751c0 0 208.003 18.144 208.003-216.577-0.202-57.441-46.56-104.004-104.002-104.004z\"\n\t\t\t],\n\t\t\t\"width\": 1024,\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"code\",\n\t\t\t\t\"semicolon\",\n\t\t\t\t\"curly-braces\"\n\t\t\t],\n\t\t\t\"grid\": 16,\n\t\t\t\"defaultCode\": 58883\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M864.626 473.162c-65.754-183.44-205.11-348.15-352.626-473.162-147.516 125.012-286.87 289.722-352.626 473.162-40.664 113.436-44.682 236.562 12.584 345.4 65.846 125.14 198.632 205.438 340.042 205.438s274.196-80.298 340.040-205.44c57.27-108.838 53.25-231.962 12.586-345.398zM738.764 758.956c-43.802 83.252-132.812 137.044-226.764 137.044-55.12 0-108.524-18.536-152.112-50.652 13.242 1.724 26.632 2.652 40.112 2.652 117.426 0 228.668-67.214 283.402-171.242 44.878-85.292 40.978-173.848 23.882-244.338 14.558 28.15 26.906 56.198 36.848 83.932 22.606 63.062 40.024 156.34-5.368 242.604z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"drop\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57381,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M768 128h-512l-256 256 512 576 512-576-256-256zM512 778.666v-2.666h-2.37l-14.222-16h16.592v-16h-30.814l-14.222-16h45.036v-16h-59.258l-14.222-16h73.48v-16h-87.704l-14.222-16h101.926v-16h-116.148l-14.222-16h130.37v-16h-144.592l-14.222-16h158.814v-16h-173.038l-14.222-16h187.26v-16h-201.482l-14.222-16h215.704v-16h-229.926l-14.222-16h244.148v-16h-258.372l-14.222-16h272.594v-16h-286.816l-14.222-16h301.038v-16h-315.26l-14.222-16h329.482v-16h-343.706l-7.344-8.262 139.072-139.072h211.978v3.334h215.314l16 16h-231.314v16h247.314l16 16h-263.314v16h279.314l16 16h-295.314v16h311.314l16 16h-327.314v16h343.312l7.738 7.738-351.050 394.928z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"diamond\",\n\t\t\t\t\"gem\",\n\t\t\t\t\"jewelry\",\n\t\t\t\t\"dualtone\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57889,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM128 512c0-212.078 171.922-384 384-384v768c-212.078 0-384-171.922-384-384z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"contrast\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58104,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M893.254 221.254l-90.508-90.508-290.746 290.744-290.746-290.744-90.508 90.506 290.746 290.748-290.746 290.746 90.508 90.508 290.746-290.746 290.746 290.746 90.508-90.51-290.744-290.744z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"cross\",\n\t\t\t\t\"cancel\",\n\t\t\t\t\"close\",\n\t\t\t\t\"quit\",\n\t\t\t\t\"remove\"\n\t\t\t],\n\t\t\t\"defaultCode\": 60778,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v384c0 35.346 28.654 64 64 64s64-28.654 64-64v-229.488l677.488 677.488h-229.488c-35.346 0-64 28.652-64 64 0 35.346 28.654 64 64 64h384c35.346 0 64-28.654 64-64v-384c0-35.348-28.654-64-64-64s-64 28.652-64 64v229.488l-677.488-677.488h229.488c35.346 0 64-28.654 64-64s-28.652-64-64-64h-384c-35.346 0-64 28.654-64 64z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"arrow-resize\",\n\t\t\t\t\"diagonal\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58329,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M483.2 640l-147.2-336c-9.6-25.6-19.2-44.8-25.6-54.4s-16-12.8-25.6-12.8c-16 0-25.6 3.2-28.8 3.2v-70.4c9.6-6.4 25.6-6.4 38.4-9.6 32 0 57.6 6.4 73.6 22.4 6.4 6.4 12.8 16 19.2 25.6 6.4 12.8 12.8 25.6 16 41.6l121.6 291.2 150.4-371.2h92.8l-198.4 470.4v224h-86.4v-224z\",\n\t\t\t\t\"M0 0v1024h1024v-1024h-1024zM960 960h-896v-896h896v896z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{},\n\t\t\t\t{}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"gamma2\"\n\t\t\t],\n\t\t\t\"grid\": 16,\n\t\t\t\"defaultCode\": 58880\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M627.2 880h-579.2v-396.8h579.2v396.8zM553.6 553.6h-435.2v256h435.2v-256z\",\n\t\t\t\t\"M259.2 227.2c176-176 457.6-176 633.6 0s176 457.6 0 633.6c-121.6 121.6-297.6 160-454.4 108.8 121.6 28.8 262.4-9.6 361.6-108.8 150.4-150.4 160-384 22.4-521.6-121.6-121.6-320-128-470.4-19.2l86.4 86.4-294.4 22.4 22.4-294.4 92.8 92.8z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{},\n\t\t\t\t{}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"orientation\"\n\t\t\t],\n\t\t\t\"grid\": 16,\n\t\t\t\"defaultCode\": 58881\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M768 544v352h-640v-640h352l128-128h-512c-52.8 0-96 43.2-96 96v704c0 52.8 43.2 96 96 96h704c52.798 0 96-43.2 96-96v-512l-128 128z\",\n\t\t\t\t\"M864 0l-608 608v160h160l608-608c0-96-64-160-160-160zM416 640l-48-48 480-480 48 48-480 480z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"pencil\",\n\t\t\t\t\"write\",\n\t\t\t\t\"edit\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57361,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M607.998 128.014c-212.070 0-383.986 171.916-383.986 383.986h-191.994l246.848 246.848 246.848-246.848h-191.994c0-151.478 122.798-274.276 274.276-274.276 151.48 0 274.276 122.798 274.276 274.276 0 151.48-122.796 274.276-274.276 274.276v109.71c212.070 0 383.986-171.916 383.986-383.986s-171.916-383.986-383.986-383.986z\"\n\t\t\t],\n\t\t\t\"width\": 1024,\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"rotate-ccw\",\n\t\t\t\t\"ccw\",\n\t\t\t\t\"arrow\"\n\t\t\t],\n\t\t\t\"defaultCode\": 60072,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M416.002 128.014c212.070 0 383.986 171.916 383.986 383.986h191.994l-246.848 246.848-246.848-246.848h191.994c0-151.478-122.798-274.276-274.276-274.276-151.48 0-274.276 122.798-274.276 274.276 0 151.48 122.796 274.276 274.276 274.276v109.71c-212.070 0-383.986-171.916-383.986-383.986s171.916-383.986 383.986-383.986z\"\n\t\t\t],\n\t\t\t\"width\": 1024,\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"rotate-cw\",\n\t\t\t\t\"cw\",\n\t\t\t\t\"arrow\"\n\t\t\t],\n\t\t\t\"defaultCode\": 60073,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 384h1024v-384zM1024 960v-384h-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"flip-vertical\",\n\t\t\t\t\"mirror\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57663,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M576 0v1024h384zM0 1024h384v-1024z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"flip-horizontal\",\n\t\t\t\t\"mirror\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57664,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384 0 212.078 171.922 384 384 384 95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256zM448 192h-128v128h-128v128h128v128h128v-128h128v-128h-128z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"zoom-in\",\n\t\t\t\t\"magnifier\",\n\t\t\t\t\"magnifier-plus\",\n\t\t\t\t\"enlarge\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57788,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384 0 212.078 171.922 384 384 384 95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256zM192 320h384v128h-384z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"zoom-out\",\n\t\t\t\t\"magnifier\",\n\t\t\t\t\"magnifier-minus\",\n\t\t\t\t\"reduce\"\n\t\t\t],\n\t\t\t\"defaultCode\": 57789,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M64 192h896v192h-896zM64 448h896v192h-896zM64 704h896v192h-896z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"menu\",\n\t\t\t\t\"list\",\n\t\t\t\t\"options\",\n\t\t\t\t\"lines\",\n\t\t\t\t\"hamburger\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58031,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M512 832c35.346 0 64 28.654 64 64v64c0 35.346-28.654 64-64 64s-64-28.654-64-64v-64c0-35.346 28.654-64 64-64zM512 192c-35.346 0-64-28.654-64-64v-64c0-35.346 28.654-64 64-64s64 28.654 64 64v64c0 35.346-28.654 64-64 64zM960 448c35.346 0 64 28.654 64 64s-28.654 64-64 64h-64c-35.348 0-64-28.654-64-64s28.652-64 64-64h64zM192 512c0 35.346-28.654 64-64 64h-64c-35.346 0-64-28.654-64-64s28.654-64 64-64h64c35.346 0 64 28.654 64 64zM828.784 738.274l45.256 45.258c24.992 24.99 24.992 65.516 0 90.508-24.994 24.992-65.518 24.992-90.51 0l-45.256-45.256c-24.992-24.99-24.992-65.516 0-90.51 24.994-24.992 65.518-24.992 90.51-0zM195.216 285.726l-45.256-45.256c-24.994-24.994-24.994-65.516 0-90.51s65.516-24.994 90.51 0l45.256 45.256c24.994 24.994 24.994 65.516 0 90.51s-65.516 24.994-90.51 0zM828.784 285.726c-24.992 24.992-65.516 24.992-90.51 0-24.992-24.994-24.992-65.516 0-90.51l45.256-45.254c24.992-24.994 65.516-24.994 90.51 0 24.992 24.994 24.992 65.516 0 90.51l-45.256 45.254zM195.216 738.274c24.992-24.992 65.518-24.992 90.508 0 24.994 24.994 24.994 65.52 0 90.51l-45.254 45.256c-24.994 24.992-65.516 24.992-90.51 0s-24.994-65.518 0-90.508l45.256-45.258z\",\n\t\t\t\t\"M512 256c-141.384 0-256 114.616-256 256 0 141.382 114.616 256 256 256 141.382 0 256-114.618 256-256 0-141.384-114.616-256-256-256zM512 672c-88.366 0-160-71.634-160-160s71.634-160 160-160 160 71.634 160 160-71.634 160-160 160z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"sun\",\n\t\t\t\t\"weather\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58094,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M715.812 64.48c-60.25-34.784-124.618-55.904-189.572-64.48 122.936 160.082 144.768 384.762 37.574 570.42-107.2 185.67-312.688 279.112-512.788 252.68 39.898 51.958 90.376 97.146 150.628 131.934 245.908 141.974 560.37 57.72 702.344-188.198 141.988-245.924 57.732-560.372-188.186-702.356z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"moon\",\n\t\t\t\t\"night\",\n\t\t\t\t\"sleep\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58105,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M672 1024l192-192-320-320 320-320-192-192-512 512z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"arrow-left\",\n\t\t\t\t\"left\",\n\t\t\t\t\"previous\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58291,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M832 256l192-192-64-64-192 192h-448v-192h-128v192h-192v128h192v512h512v192h128v-192h192v-128h-192v-448zM320 320h320l-320 320v-320zM384 704l320-320v320h-320z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"crop\",\n\t\t\t\t\"resize\",\n\t\t\t\t\"cut\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58428,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v896h1024v-896h-1024zM640 704v192h-256v-192h256zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192zM704 896v-192h256v192h-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tablerowprops\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58880,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v896h1024v-896h-1024zM640 704v192h-256v-192h256zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM64 448h256v192h-256v-192zM704 448h256v192h-256v-192zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192zM704 896v-192h256v192h-256z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tablecellprops\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58881,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v832h1024v-832h-1024zM320 832h-256v-192h256v192zM320 576h-256v-192h256v192zM640 832h-256v-192h256v192zM640 576h-256v-192h256v192zM960 832h-256v-192h256v192zM960 576h-256v-192h256v192zM960 320h-896v-192h896v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"table2\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58882,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v896h1024v-896h-1024zM384 896v-448h576v448h-576zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM64 448h256v192h-256v-192zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tablemergecells\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58884,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M320 771.2v-182.4h-182.4v-89.6h182.4v-182.4h86.4v182.4h185.6v89.6h-185.6v182.4zM0 64v896h1024v-896h-1024zM640 896h-576v-704h576v704zM960 896h-256v-192h256v192zM960 640h-256v-192h256v192zM960 384h-256v-192h256v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tableinsertcolbefore\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58885,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M704 316.8v182.4h182.4v89.6h-182.4v182.4h-86.4v-182.4h-185.6v-89.6h185.6v-182.4zM0 64v896h1024v-896h-1024zM320 896h-256v-192h256v192zM320 640h-256v-192h256v192zM320 384h-256v-192h256v192zM960 896h-576v-704h576v704z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tableinsertcolafter\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58886,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M691.2 451.2h-144v144h-70.4v-144h-144v-67.2h144v-144h70.4v144h144zM0 64v896h1024v-896h-1024zM320 896h-256v-192h256v192zM640 896h-256v-192h256v192zM960 896h-256v-192h256v192zM960 643.2h-896v-451.2h896v451.2z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tableinsertrowbefore\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58887,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M332.8 636.8h144v-144h70.4v144h144v67.2h-144v144h-70.4v-144h-144zM0 64v896h1024v-896h-1024zM384 192h256v192h-256v-192zM64 192h256v192h-256v-192zM960 896h-896v-451.2h896v451.2zM960 384h-256v-192h256v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tableinsertrowafter\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58888,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v896h1024v-896h-1024zM384 192h256v192h-256v-192zM320 896h-256v-192h256v192zM320 640h-256v-192h256v192zM320 384h-256v-192h256v192zM960 896h-576v-448h576v448zM960 384h-256v-192h256v192zM864 803.2l-60.8 60.8-131.2-131.2-131.2 131.2-60.8-60.8 131.2-131.2-131.2-131.2 60.8-60.8 131.2 131.2 131.2-131.2 60.8 60.8-131.2 131.2z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tablesplitcells\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58890,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64h1024v896h-1024v-896zM60.8 192v704h899.2v-704h-899.2zM809.6 748.8l-96 96-204.8-204.8-204.8 204.8-96-96 204.8-204.8-204.8-204.8 96-96 204.8 204.8 204.8-204.8 96 96-204.8 204.8z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tabledelete\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58891,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v832h1024v-832h-1024zM640 832h-256v-192h256v192zM640 576h-256v-192h256v192zM640 320h-256v-192h256v192zM960 832h-256v-192h256v192zM960 576h-256v-192h256v192zM960 320h-256v-192h256v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tableleftheader\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58922,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M0 64v832h1024v-832h-1024zM320 832h-256v-192h256v192zM320 576h-256v-192h256v192zM640 832h-256v-192h256v192zM640 576h-256v-192h256v192zM960 832h-256v-192h256v192zM960 576h-256v-192h256v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [\n\t\t\t\t{\n\t\t\t\t\t\"fill\": \"rgb(0, 0, 0)\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"tags\": [\n\t\t\t\t\"tabletopheader\"\n\t\t\t],\n\t\t\t\"defaultCode\": 58923,\n\t\t\t\"grid\": 16\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M886.4 387.2l-156.8 156.8 160 160-76.8 76.8-160-160-156.8 156.8-76.8-73.6 160-160-163.2-163.2 76.8-76.8 163.2 163.2 156.8-156.8 73.6 76.8zM0 64v896h1024v-896h-1024zM960 384h-22.4l-64 64h86.4v192h-89.6l64 64h25.6v192h-896v-192h310.4l64-64h-374.4v-192h371.2l-64-64h-307.2v-192h896v192z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"grid\": 16,\n\t\t\t\"tags\": [\n\t\t\t\t\"tabledeleterow\"\n\t\t\t],\n\t\t\t\"defaultCode\": 59392\n\t\t},\n\t\t{\n\t\t\t\"paths\": [\n\t\t\t\t\"M320 460.8l64 64v12.8l-64 64v-140.8zM640 537.6l64 64v-137.6l-64 64v9.6zM1024 64v896h-1024v-896h1024zM960 192h-256v51.2l-12.8-12.8-51.2 51.2v-89.6h-256v89.6l-51.2-51.2-12.8 12.8v-51.2h-256v704h256v-118.4l35.2 35.2 28.8-28.8v115.2h256v-115.2l48 48 16-16v83.2h256v-707.2zM672 297.6l-156.8 156.8-163.2-163.2-76.8 76.8 163.2 163.2-156.8 156.8 76.8 76.8 156.8-156.8 160 160 76.8-76.8-160-160 156.8-156.8-76.8-76.8z\"\n\t\t\t],\n\t\t\t\"attrs\": [],\n\t\t\t\"isMulticolor\": false,\n\t\t\t\"grid\": 16,\n\t\t\t\"tags\": [\n\t\t\t\t\"tabledeletecol\"\n\t\t\t],\n\t\t\t\"defaultCode\": 59393\n\t\t}\n\t],\n\t\"preferences\": {\n\t\t\"showGlyphs\": true,\n\t\t\"showQuickUse\": true,\n\t\t\"showQuickUse2\": true,\n\t\t\"showSVGs\": true,\n\t\t\"fontPref\": {\n\t\t\t\"prefix\": \"icon-\",\n\t\t\t\"metadata\": {\n\t\t\t\t\"fontFamily\": \"tinymce\",\n\t\t\t\t\"majorVersion\": 1,\n\t\t\t\t\"minorVersion\": 0\n\t\t\t},\n\t\t\t\"metrics\": {\n\t\t\t\t\"emSize\": 1024,\n\t\t\t\t\"baseline\": 6.25,\n\t\t\t\t\"whitespace\": 50\n\t\t\t},\n\t\t\t\"resetPoint\": 58880,\n\t\t\t\"embed\": false\n\t\t},\n\t\t\"imagePref\": {\n\t\t\t\"prefix\": \"icon-\",\n\t\t\t\"png\": true,\n\t\t\t\"useClassSelector\": true,\n\t\t\t\"color\": 4473924,\n\t\t\t\"bgColor\": 16777215\n\t\t},\n\t\t\"historySize\": 100,\n\t\t\"gridSize\": 16,\n\t\t\"showGrid\": true,\n\t\t\"showCodes\": true,\n\t\t\"showLiga\": false\n\t},\n\t\"IcoMoonType\": \"icon-set\"\n}"
  },
  {
    "path": "resources/assets/js/skins/voyager/skin.json",
    "content": "{\n\t\"skin-name\": \"voyager\",\n\t\"preview-bg\": \"#ffffff\",\n\t\"text\": \"#333333\",\n\t\"text-inverse\": \"#ffffff\",\n\t\"text-disabled\": \"#aaaaaa\",\n\t\"has-gradients\": false,\n\t\"has-radius\": false,\n\t\"has-boxshadow\": false,\n\t\"has-button-borders\": false,\n\t\"btn-text\": \"#a3afb7\",\n\t\"btn-text-shadow\": \"#ffffff\",\n\t\"btn-bg\": \"#ffffff\",\n\t\"btn-bg-hlight\": \"#ffffff\",\n\t\"btn-border-top\": \"rgba(0,0,0,0)\",\n\t\"btn-border-right\": \"rgba(0,0,0,0)\",\n\t\"btn-border-bottom\": \"rgba(0,0,0,0)\",\n\t\"btn-border-left\": \"rgba(0,0,0,0)\",\n\t\"btn-split-border\": \"#eeeeee\",\n\t\"btn-primary-text\": \"#ffffff\",\n\t\"btn-primary-text-shadow\": \"#ff0000\",\n\t\"btn-primary-bg\": \"#0088cc\",\n\t\"btn-primary-bg-hlight\": \"#ffffff\",\n\t\"btn-padding\": \"4px 8px\",\n\t\"menu-bg\": \"#ffffff\",\n\t\"menu-border\": \"rgba(0,0,0,0.2)\",\n\t\"menuitem-text\": \"#333333\",\n\t\"menuitem-bg-selected\": \"#0088cc\",\n\t\"menuitem-bg-selected-hlight\": \"#0077b3\",\n\t\"menuitem-separator-top\": \"#cbcbcb\",\n\t\"menuitem-separator-bottom\": \"#ffffff\",\n\t\"menuitem-text-inverse\": \"#ffffff\",\n\t\"menuitem-bg-active\": \"#c8def4\",\n\t\"menuitem-text-active\": \"#333333\",\n\t\"menuitem-preview-border-active\": \"#aaaaaa\",\n\t\"menubar-menubtn-text\": \"#333333\",\n\t\"checkbox-border\": \"#c5c5c5\",\n\t\"checkbox-border-focus\": \"#59a5e1\",\n\t\"panel-border\": \"#eeeeee\",\n\t\"panel-bg\": \"#ffffff\",\n\t\"panel-bg-hlight\": \"#ffffff\",\n\t\"textbox-bg\": \"#ffffff\",\n\t\"textbox-border\": \"#c5c5c5\",\n\t\"textbox-border-focus\": \"#59a5e1\",\n\t\"window-bg\": \"#ffffff\",\n\t\"window-border\": \"#eeeeee\",\n\t\"tab-bg\": \"#e3e3e3\",\n\t\"tab-bg-hover\": \"#fdfdfd\",\n\t\"tab-bg-active\": \"#fdfdfd\",\n\t\"tab-border\": \"#c5c5c5\",\n\t\"tabs-bg\": \"#ffffff\",\n\t\"notification-bg\": \"#f0f0f0\",\n\t\"notification-border\": \"#cccccc\",\n\t\"notification-text\": \"#333333\",\n\t\"notification-success-bg\": \"#dff0d8\",\n\t\"notification-success-border\": \"#d6e9c6\",\n\t\"notification-success-text\": \"#3c763d\",\n\t\"notification-info-bg\": \"#d9edf7\",\n\t\"notification-info-border\": \"#779ecb\",\n\t\"notification-info-text\": \"#31708f\",\n\t\"notification-warning-bg\": \"#fcf8e3\",\n\t\"notification-warning-border\": \"#faebcc\",\n\t\"notification-warning-text\": \"#8a6d3b\",\n\t\"notification-error-bg\": \"#f2dede\",\n\t\"notification-error-border\": \"#ebccd1\",\n\t\"notification-error-text\": \"#a94442\",\n\t\"progress-bar-bg\": \"#dfdfdf\",\n\t\"progress-bar-bg-hlight\": \"#cccccc\",\n\t\"progress-border\": \"#cccccc\",\n\t\"progress-text\": \"#333333\",\n\t\"progress-text-shadow\": \"#ffffff\",\n\t\"slider-bg\": \"#eeeeee\",\n\t\"slider-border\": \"#aaaaaa\",\n\t\"slider-handle-bg\": \"#dddddd\",\n\t\"slider-handle-border\": \"#bbbbbb\",\n\t\"colorbtn-backcolor-bg\": \"#bbbbbb\",\n\t\"grid-border\": \"#d6d6d6\",\n\t\"grid-border-active\": \"#a1a1a1\"\n}"
  },
  {
    "path": "resources/assets/js/slugify.js",
    "content": "/*\n * Slugify for Voyager v0.9.0\n *\n * Generates a slug for a given input element.\n * This script was created for Voyager, but works with any HTML structure.\n *\n * Default behavior is to auto generate a new slug, only if the input is empty.\n * If input isn't empty, the auto generation is disabled.\n * To force the auto generator, set the option \"forceUpdate: true\".\n *\n * Copyright 2017 Bruno Torrinha\n * License MIT\n *\n * Some credits:\n * Char map from: https://github.com/diegok/slugit-jquery\n */\n;( function( $, window, document, undefined ) {\n\n    \"use strict\";\n\n        var pluginName = \"slugify\",\n            defaults = {\n                separator:   '-',\n                input:       false, // The origin from where we generate the slug.\n                forceUpdate: false, // Force update if input is not empty.\n                map:         false  // Provide an extra character map translator.\n            };\n\n        function Plugin ( element, options ) {\n            this.element   = $(element);  // The input where slug is placed.\n            this.settings  = $.extend( {}, defaults, options );\n            this._defaults = defaults;\n            this.chars     = this._load_char_maps();\n            if (this.settings.map) {      // Load extra character map translator\n                $.extend(this.chars, this.settings.map);\n            }\n            this.init();\n        }\n\n        // Avoid Plugin.prototype conflicts\n        $.extend( Plugin.prototype, {\n            init: function() {\n                this.input = this.settings.input\n                             || $(this.element).closest('form').find('input[name=\"' + this.element.attr(\"data-slug-origin\") + '\"]');\n\n                this.forceUpdate = (this.element.data('slug-forceupdate')) ? true : false;\n                this.input.on('keyup change', $.proxy(this.onChange, this));\n\n                this.refresh();\n            },\n\n\n            refresh: function() {\n                this.element.update = this.element.val() === '';\n            },\n\n\n            /**\n             * When input changes\n             */\n            onChange: function(ev) {\n                var code = ev.keyCode ? ev.keyCode : ev.which;\n\n                if (code > 34 && code < 41) {\n                    return;\n                }\n\n                var strOrigin = $(ev.target).val(),\n                    strTarget = this.element.val();\n\n                if (\n                    this.element.update\n                    || strTarget === ''\n                    || (strTarget != '' && this.forceUpdate)\n                ){\n                    this.element.val(this.slug(strOrigin));\n                    this.element.update = true;\n                }\n                return;\n            },\n\n\n            /**\n             * Generate a slug\n             */\n            slug: function(str) {\n                str = str\n                    .toString()\n                    .toLowerCase();\n\n                var _slug = '',\n                    _sep = this.settings.separator;\n\n                // Replace Char Map\n                //\n                for (var i=0, l=str.length ; i<l ; i++) {\n                    _slug += (this.chars.hasOwnProperty(str.charAt(i)))\n                             ? this.chars[str.charAt(i)]\n                             : str.charAt(i);\n                }\n\n                str = _slug\n                .replace(/[^a-z0-9]/g, _sep)\n                .replace(new RegExp('\\\\'+_sep+'\\\\'+_sep+'+', 'g'), _sep)\n                .replace(new RegExp('^\\\\'+_sep+'+|\\\\'+_sep+'+$', 'g'), '');\n\n                return str;\n            },\n\n            _load_char_maps: function() {\n                return $.extend(\n                            this._map_latin(),\n                            this._map_arabic(),\n                            this._map_greek(),\n                            this._map_turkish(),\n                            this._map_russian(),\n                            this._map_ukranian(),\n                            this._map_czech(),\n                            this._map_polish(),\n                            this._map_vietnam(),\n                            this._map_burmese(),\n                            this._map_latvian(),\n                            this._map_lithuanian(),\n                            this._map_currency(),\n                            this._map_symbols()\n                        );\n            },\n            _map_latin: function() {\n                return {\n                    'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', 'Ç':\n                    'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', 'Î': 'I',\n                    'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 'Õ': 'O', 'Ö':\n                    'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', 'Ü': 'U', 'Ű': 'U',\n                    'Ý': 'Y', 'Þ': 'TH', 'ß': 'ss', 'à':'a', 'á':'a', 'â': 'a', 'ã': 'a', 'ä':\n                    'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e',\n                    'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó':\n                    'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u',\n                    'û': 'u', 'ü': 'u', 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y'\n                };\n            },\n                        _map_arabic:  function() {\n              return {\n                'ا': 'a',\n                'أ': 'a',\n                'إ': 'i',\n                'آ': 'aa',\n                'ؤ': 'u',\n                'ئ': 'e',\n                'ء': 'a',\n                'ب': 'b',\n                'ت': 't',\n                'ث': 'th',\n                'ج': 'j',\n                'ح': 'h',\n                'خ': 'kh',\n                'د': 'd',\n                'ذ': 'th',\n                'ر': 'r',\n                'ز': 'z',\n                'س': 's',\n                'ش': 'sh',\n                'ص': 's',\n                'ض': 'dh',\n                'ط': 't',\n                'ظ': 'z',\n                'ع': 'a',\n                'غ': 'gh',\n                'ف': 'f',\n                'ق': 'q',\n                'ك': 'k',\n                'ل': 'l',\n                'م': 'm',\n                'ن': 'n',\n                'ه': 'h',\n                'و': 'w',\n                'ي': 'y',\n                'ى': 'a',\n                'ة': 'h',\n                'ﻻ': 'la',\n                'ﻷ': 'laa',\n                'ﻹ': 'lai',\n                'ﻵ': 'laa',\n              };\n            },\n            _map_greek: function() {\n                return {\n                    'α':'a', 'β':'b', 'γ':'g', 'δ':'d', 'ε':'e', 'ζ':'z', 'η':'h', 'θ':'8',\n                    'ι':'i', 'κ':'k', 'λ':'l', 'μ':'m', 'ν':'n', 'ξ':'3', 'ο':'o', 'π':'p',\n                    'ρ':'r', 'σ':'s', 'τ':'t', 'υ':'y', 'φ':'f', 'χ':'x', 'ψ':'ps', 'ω':'w',\n                    'ά':'a', 'έ':'e', 'ί':'i', 'ό':'o', 'ύ':'y', 'ή':'h', 'ώ':'w', 'ς':'s',\n                    'ϊ':'i', 'ΰ':'y', 'ϋ':'y', 'ΐ':'i',\n                    'Α':'A', 'Β':'B', 'Γ':'G', 'Δ':'D', 'Ε':'E', 'Ζ':'Z', 'Η':'H', 'Θ':'8',\n                    'Ι':'I', 'Κ':'K', 'Λ':'L', 'Μ':'M', 'Ν':'N', 'Ξ':'3', 'Ο':'O', 'Π':'P',\n                    'Ρ':'R', 'Σ':'S', 'Τ':'T', 'Υ':'Y', 'Φ':'F', 'Χ':'X', 'Ψ':'PS', 'Ω':'W',\n                    'Ά':'A', 'Έ':'E', 'Ί':'I', 'Ό':'O', 'Ύ':'Y', 'Ή':'H', 'Ώ':'W', 'Ϊ':'I',\n                    'Ϋ':'Y'\n                };\n            },\n            _map_turkish: function() {\n                return {\n                    'ş':'s', 'Ş':'S', 'ı':'i', 'İ':'I', 'ç':'c', 'Ç':'C', 'ü':'u', 'Ü':'U',\n                    'ö':'o', 'Ö':'O', 'ğ':'g', 'Ğ':'G'\n                };\n            },\n            _map_russian: function() {\n                return {\n                    'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ё':'yo', 'ж':'zh',\n                    'з':'z', 'и':'i', 'й':'j', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o',\n                    'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'h', 'ц':'c',\n                    'ч':'ch', 'ш':'sh', 'щ':'sh', 'ъ':'', 'ы':'y', 'ь':'', 'э':'e', 'ю':'yu',\n                    'я':'ya',\n                    'А':'A', 'Б':'B', 'В':'V', 'Г':'G', 'Д':'D', 'Е':'E', 'Ё':'Yo', 'Ж':'Zh',\n                    'З':'Z', 'И':'I', 'Й':'J', 'К':'K', 'Л':'L', 'М':'M', 'Н':'N', 'О':'O',\n                    'П':'P', 'Р':'R', 'С':'S', 'Т':'T', 'У':'U', 'Ф':'F', 'Х':'H', 'Ц':'C',\n                    'Ч':'Ch', 'Ш':'Sh', 'Щ':'Sh', 'Ъ':'', 'Ы':'Y', 'Ь':'', 'Э':'E', 'Ю':'Yu',\n                    'Я':'Ya'\n                };\n            },\n            _map_ukranian: function() {\n                return {\n                    'Є':'Ye', 'І':'I', 'Ї':'Yi', 'Ґ':'G', 'є':'ye', 'і':'i', 'ї':'yi', 'ґ':'g'\n                };\n            },\n            _map_czech: function() {\n                return {\n                    'č':'c', 'ď':'d', 'ě':'e', 'ň': 'n', 'ř':'r', 'š':'s', 'ť':'t', 'ů':'u',\n                    'ž':'z', 'Č':'C', 'Ď':'D', 'Ě':'E', 'Ň': 'N', 'Ř':'R', 'Š':'S', 'Ť':'T',\n                    'Ů':'U', 'Ž':'Z'\n                };\n            },\n            _map_polish: function() {\n                return {\n                    'ą':'a', 'ć':'c', 'ę':'e', 'ł':'l', 'ń':'n', 'ó':'o', 'ś':'s', 'ź':'z',\n                    'ż':'z', 'Ą':'A', 'Ć':'C', 'Ę':'e', 'Ł':'L', 'Ń':'N', 'Ó':'o', 'Ś':'S',\n                    'Ź':'Z', 'Ż':'Z'\n                };\n            },\n            _map_vietnam: function() {\n                return {\n                    'ạ': 'a','ả': 'a','ầ': 'a','ấ': 'a','ậ': 'a','ẩ': 'a','ẫ': 'a','ằ': 'a',\n                    'ắ': 'a','ặ': 'a','ẳ': 'a','ẵ': 'a','ẹ': 'e','ẻ': 'e','ẽ': 'e','ề': 'e',\n                    'ế': 'e','ệ': 'e','ể': 'e','ễ': 'e','ị': 'i','ỉ': 'i','ọ': 'o','ỏ': 'o',\n                    'ồ': 'o','ố': 'o','ộ': 'o','ổ': 'o','ỗ': 'o','ờ': 'o','ớ': 'o','ợ': 'o',\n                    'ở': 'o','ỡ': 'o','ụ': 'u','ủ': 'u','ừ': 'u','ứ': 'u','ự': 'u','ử': 'u',\n                    'ữ': 'u','ỳ': 'y','ỵ': 'y','ỷ': 'y','ỹ': 'y','Ạ': 'A','Ả': 'A','Ầ': 'A',\n                    'Ấ': 'A','Ậ': 'A','Ẩ': 'A','Ẫ': 'A','Ằ': 'A','Ắ': 'A','Ặ': 'A','Ẳ': 'A',\n                    'Ẵ': 'A','Ẹ': 'E','Ẻ': 'E','Ẽ': 'E','Ề': 'E','Ế': 'E','Ệ': 'E','Ể': 'E',\n                    'Ễ': 'E','Ị': 'I','Ỉ': 'I','Ọ': 'O','Ỏ': 'O','Ồ': 'O','Ố': 'O','Ộ': 'O',\n                    'Ổ': 'O','Ỗ': 'O','Ờ': 'O','Ớ': 'O','Ợ': 'O','Ở': 'O','Ỡ': 'O','Ụ': 'U',\n                    'Ủ': 'U','Ừ': 'U','Ứ': 'U','Ự': 'U','Ử': 'U','Ữ': 'U','Ỳ': 'Y','Ỵ': 'Y',\n                    'đ': 'd','Đ': 'D','Ỷ': 'Y','Ỹ': 'Y','ă': 'a','Ă': 'a','Ư': 'u','Ơ': 'o',\n                    'ư': 'u','ơ': 'o'\n                };\n            },\n            _map_burmese: function () {\n              return {\n                // Burmese consonants\n                က: \"k\",\n                ခ: \"kh\",\n                ဂ: \"g\",\n                ဃ: \"ga\",\n                င: \"ng\",\n                စ: \"s\",\n                ဆ: \"sa\",\n                ဇ: \"z\",\n                စျ: \"za\",\n                ည: \"ny\",\n                ဋ: \"t\",\n                ဌ: \"ta\",\n                ဍ: \"d\",\n                ဎ: \"da\",\n                ဏ: \"na\",\n                တ: \"t\",\n                ထ: \"ta\",\n                ဒ: \"d\",\n                ဓ: \"da\",\n                န: \"n\",\n                ပ: \"p\",\n                ဖ: \"pa\",\n                ဗ: \"b\",\n                ဘ: \"ba\",\n                မ: \"m\",\n                ယ: \"y\",\n                ရ: \"ya\",\n                လ: \"l\",\n                ဝ: \"w\",\n                သ: \"th\",\n                ဟ: \"h\",\n                ဠ: \"la\",\n                အ: \"a\",\n                // consonant character combos\n                \"ြ\": \"y\",\n                \"ျ\": \"ya\",\n                \"ွ\": \"w\",\n                \"ြွ\": \"yw\",\n                \"ျွ\": \"ywa\",\n                \"ှ\": \"h\",\n                // independent vowels\n                ဧ: \"e\",\n                \"၏\": \"-e\",\n                ဣ: \"i\",\n                ဤ: \"-i\",\n                ဉ: \"u\",\n                ဦ: \"-u\",\n                ဩ: \"aw\",\n                သြော: \"aw\",\n                ဪ: \"aw\",\n                // numbers\n                \"၀\": \"0\",\n                \"၁\": \"1\",\n                \"၂\": \"2\",\n                \"၃\": \"3\",\n                \"၄\": \"4\",\n                \"၅\": \"5\",\n                \"၆\": \"6\",\n                \"၇\": \"7\",\n                \"၈\": \"8\",\n                \"၉\": \"9\",\n                // virama and tone marks which are silent in transliteration\n                \"္\": \"\",\n                \"့\": \"\",\n                \"း\": \"\",\n              };\n            },\n            _map_latvian: function() {\n                return {\n                    'ā':'a', 'č':'c', 'ē':'e', 'ģ':'g', 'ī':'i', 'ķ':'k', 'ļ':'l', 'ņ':'n',\n                    'š':'s', 'ū':'u', 'ž':'z', 'Ā':'A', 'Č':'C', 'Ē':'E', 'Ģ':'G', 'Ī':'i',\n                    'Ķ':'k', 'Ļ':'L', 'Ņ':'N', 'Š':'S', 'Ū':'u', 'Ž':'Z'\n                };\n            },\n            _map_lithuanian: function() {\n                return {\n                    'ą':'a', 'č':'c', 'ę':'e', 'ė':'e', 'į':'i', 'š':'s', 'ų':'u', 'ū':'u',\n                    'ž':'z', 'Ą':'A', 'Č':'C', 'Ę':'E', 'Ė':'E', 'Į':'I', 'Š':'S', 'Ų':'U',\n                    'Ū':'U', 'Ž':'Z',\n                };\n            },\n            _map_currency: function() {\n                return {\n                    '€': 'euro', '$': 'dollar', '₢': 'cruzeiro', '₣': 'french franc', '£': 'pound',\n                    '₤': 'lira', '₥': 'mill', '₦': 'naira', '₧': 'peseta', '₨': 'rupee',\n                    '₩': 'won', '₪': 'new shequel', '₫': 'dong', '₭': 'kip', '₮': 'tugrik',\n                    '₯': 'drachma', '₰': 'penny', '₱': 'peso', '₲': 'guarani', '₳': 'austral',\n                    '₴': 'hryvnia', '₵': 'cedi', '¢': 'cent', '¥': 'yen', '元': 'yuan',\n                    '円': 'yen', '﷼': 'rial', '₠': 'ecu', '¤': 'currency', '฿': 'baht'\n                };\n            },\n            _map_symbols: function() {\n                return {\n                    '©':'(c)', 'œ': 'oe', 'Œ': 'OE', '∑': 'sum', '®': '(r)', '†': '+',\n                    '“': '\"', '”': '\"', '‘': \"'\", '’': \"'\", '∂': 'd', 'ƒ': 'f', '™': 'tm',\n                    '℠': 'sm', '…': '...', '˚': 'o', 'º': 'o', 'ª': 'a', '•': '*',\n                    '∆': 'delta', '∞': 'infinity', '♥': 'love', '&': 'and'\n                };\n            }\n        });\n\n        $.fn[ pluginName ] = function( options ) {\n            return this.each( function() {\n                if ( !$.data( this, pluginName ) ) {\n                    $.data( this, pluginName, new Plugin(this, options) );\n                }\n            } );\n        };\n\n} )( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/js/voyager_ace_editor.js",
    "content": "var ace_editor_element = document.getElementsByClassName(\"ace_editor\");\n\n// For each ace editor element on the page\nfor(var i = 0; i < ace_editor_element.length; i++)\n{\n\n    //Define path for libs\n    ace.config.set(\"basePath\", $('meta[name=\"assets-path\"]').attr('content')+\"?path=js/ace/libs\");\n\n\t// Create an ace editor instance\n\tvar ace_editor = ace.edit(ace_editor_element[i].id);\n\n\t// Get the corresponding text area associated with the ace editor\n\tvar ace_editor_textarea = document.getElementById(ace_editor_element[i].id + '_textarea');\n\n    if(ace_editor_element[i].getAttribute('data-theme')){\n    \tace_editor.setTheme(\"ace/theme/\" + ace_editor_element[i].getAttribute('data-theme'));\n    }\n\n    if(ace_editor_element[i].getAttribute('data-language')){\n    \tace_editor.getSession().setMode(\"ace/mode/\" + ace_editor_element[i].getAttribute('data-language'));\n    }\n    \n    ace_editor.on('change', function(event, el) {\n    \tace_editor_id = el.container.id;\n    \tace_editor_textarea = document.getElementById(ace_editor_id + '_textarea');\n    \tace_editor_instance = ace.edit(ace_editor_id);\n    \tace_editor_textarea.value = ace_editor_instance.getValue();\n    });\n}\n"
  },
  {
    "path": "resources/assets/js/voyager_tinymce.js",
    "content": "// Theme\nimport 'tinymce/themes/silver/theme';\n\n  // Plugins\nimport 'tinymce/plugins/link';\nimport 'tinymce/plugins/image';\nimport 'tinymce/plugins/code';\nimport 'tinymce/plugins/table';\nimport 'tinymce/plugins/lists';\n\n$(document).ready(function(){\n\n  $.ajaxSetup({\n      headers: {\n          'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n      }\n  });\n});\n"
  },
  {
    "path": "resources/assets/js/voyager_tinymce_config.js",
    "content": "/*--------------------\n|\n| TinyMCE default config\n|\n--------------------*/\n\nvar getConfig = function(options) {\n\n    var baseTinymceConfig = {\n        menubar: false,\n        selector: 'textarea.richTextBox',\n        base_url: $('meta[name=\"assets-path\"]').attr('content')+'?path=js/',\n        skin: 'oxide',\n        min_height: 600,\n        resize: true,\n        plugins: 'link image code table lists',\n        extended_valid_elements : 'input[id|name|value|type|class|style|required|placeholder|autocomplete|onclick]',\n        relative_urls: false, // Necessary so uploaded images don't get a relative path but an URL instead.\n        remove_script_host: false,\n        file_picker_types: 'image',\n        file_picker_callback: (callback, value, meta) => {\n            if (meta.filetype == 'image') {\n                var input = document.createElement('input');\n                input.setAttribute('type', 'file');\n                input.setAttribute('accept', 'image/*');\n\n                input.onchange = function () {\n                    var formdata = new FormData();\n                    formdata.append('image', this.files[0]);\n                    formdata.append('type_slug', $('#upload_type_slug').val());\n                    // Show loader\n                    $('#voyager-loader').css('z-index', 10000);\n                    $('#voyager-loader').fadeIn();\n                    $.ajax({\n                        type: 'post',\n                        url: $('#upload_url').val(),\n                        data: formdata,\n                        enctype: 'multipart/form-data',\n                        processData: false,\n                        contentType: false,\n                        cache: false,\n                    })\n                    .done((result) => {\n                        callback(result);\n                    })\n                    .always(() => {\n                        $('#voyager-loader').fadeOut();\n                        $('#voyager-loader').css('z-index', 99);\n                    });\n                }\n\n                input.click();\n            }\n        },\n        toolbar: 'styleselect | bold italic underline | forecolor backcolor | alignleft aligncenter alignright | bullist numlist outdent indent | link image table | code',\n        image_caption: true,\n        image_title: true,\n        init_instance_callback: function (editor) {\n            if (typeof tinymce_init_callback !== \"undefined\") {\n                tinymce_init_callback(editor);\n            }\n        },\n        setup: function (editor) {\n            if (typeof tinymce_setup_callback !== \"undefined\") {\n                tinymce_setup_callback(editor);\n            }\n        }\n    };\n\n    return $.extend({}, baseTinymceConfig, options);\n}\n\nexports.getConfig = getConfig;\n"
  },
  {
    "path": "resources/assets/sass/_variables.scss",
    "content": "$icon-font-path: \"voyager-assets?path=fonts/bootstrap/\";\n"
  },
  {
    "path": "resources/assets/sass/app.scss",
    "content": "@import \"_variables\";\n@import \"node_modules/bootstrap-sass/assets/stylesheets/bootstrap\";\n@import \"node_modules/animate.css/animate\";\n@import \"node_modules/datatables/media/css/jquery.dataTables\";\n@import \"node_modules/datatables-bootstrap3-plugin/media/css/datatables-bootstrap3\";\n@import \"node_modules/select2/dist/css/select2\";\n@import \"node_modules/toastr/build/toastr\";\n@import \"node_modules/perfect-scrollbar/css/perfect-scrollbar\";\n@import \"node_modules/bootstrap-toggle/css/bootstrap-toggle\";\n@import \"node_modules/icheck/skins/flat/flat\";\n@import \"node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker\";\n@import \"node_modules/easymde/dist/easymde.min\";\n@import \"node_modules/dropzone/dist/dropzone\";\n@import \"node_modules/cropperjs/dist/cropper\";\n@import \"node_modules/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker\";\n@import \"fonts\";\n\n/********** LOGIN STYLES ***********/\n\nbody.login {\n    margin:0;\n    padding:0;\n    font-family: 'Open Sans', sans-serif;\n    background-size:cover;\n    -moz-background-size:cover;\n    -ms-background-size:cover;\n    -webkit-background-size:cover;\n    background-position:center center;\n    background-repeat:no-repeat;\n    overflow:hidden;\n\n    .login-sidebar {\n        min-height:100vh;\n        position:relative;\n        border-radius:5px;\n        z-index:2;\n        padding:0;\n        justify-content:center;\n        background:#ffffff;\n        border-top: 5px solid #22A7F0;\n        border-radius: 0px;\n    }\n\n    .login-sidebar:after {\n        width:100%;\n        height:100%;\n        position:absolute;\n        top:0;\n        left:0;\n        content:\"\";\n        opacity:0.8;\n        z-index:3;\n    }\n\n    .login-container{\n        position: absolute;\n        z-index: 10;\n        width: 100%;\n        padding: 30px;\n        top: 50%;\n        margin-top: -150px;\n    }\n\n    .login-container p{\n        text-align: left;\n        font-weight: 700;\n        margin-bottom: 0;\n        margin-top: 3px;\n        color: #757C85;\n        font-family: 'Open Sans', sans-serif;\n        border-radius: 2px;\n        font-size: 10px;\n        text-transform: uppercase;\n        width: auto;\n        padding-left:2px;\n    }\n\n    .login-container form{\n        padding-top:15px;\n    }\n\n    .login-container .voyager-refresh{\n        top:0px;\n        font-size:10px;\n    }\n\n    .login-container .signingin .voyager-refresh{\n        top: 1px;\n        left: 0px;\n        -webkit-transform-origin: 43% 40%;\n        transform-origin: 43% 40%;\n        -ms-transform-origin: 43% 40%;\n        display: inline-block;\n        position: relative;\n    }\n\n    .logo-title-container{\n        position: fixed;\n        width: 100%;\n        bottom: 0px;\n        margin-top: -100px;\n        left: 30px;\n    }\n\n    .logo-container {\n        text-align:center;\n        position:relative;\n        z-index: 10;\n        opacity:0.8;\n    }\n\n    .logo{\n        height: auto;\n        max-width: 52px;\n        margin: 0 auto;\n        padding-top:55px;\n        padding-bottom: 20px;\n    }\n\n    .logo-container .logo{\n        padding:50px 0px;\n    }\n\n\n    @-moz-keyframes spin {\n        from { -moz-transform: rotate(0deg); }\n        to { -moz-transform: rotate(359deg); }\n    }\n    @-webkit-keyframes spin {\n        from { -webkit-transform: rotate(0deg); }\n        to { -webkit-transform: rotate(359deg); }\n    }\n    @keyframes spin {\n        from {transform:rotate(0deg);}\n        to {transform:rotate(359deg);}\n    }\n\n    .span-input{\n        margin-left:10px;\n        position:relative;\n        top: -3px;\n        font-size: 15px;\n    }\n    .login-button {\n        display:block;\n        text-align:center;\n        text-decoration:none;\n        color:#eee;\n        font-family: 'Open Sans', sans-serif;\n        font-weight:100;\n        padding:12px 20px;\n        border-radius:1px;\n        outline:none !important;\n        opacity:0.8;\n        border:0px;\n        width: auto;\n        border-radius: 2px;\n        float:left;\n        font-size: 11px;\n        font-weight: normal;\n        text-transform: uppercase;\n        transition:width 0.3s ease;\n    }\n    .login-button:hover, .login-button:focus {\n        color: #FFF;\n        opacity: 1\n    }\n    .copy {\n        width: auto;\n        padding: 30px;\n        padding-bottom:12px;\n    }\n\n    .copy h1 {\n        display: inline-block;\n        vertical-align: middle;\n        color: #fff;\n        z-index: 9999;\n        position: relative;\n        text-transform: uppercase;\n        font-size: 20px;\n        font-weight: 700;\n        top: 0px;\n        line-height: 45px;\n        margin: 20px 0 0 20px;\n        margin-left:14px;\n    }\n\n    .copy p {\n        color: #fff;\n        font-size: 13px;\n        max-width: 650px;\n        opacity: .9;\n        position: relative;\n        z-index: 99;\n        font-weight: 300;\n        margin-top: 0;\n        left: 15px;\n        position:relative;\n        top:-8px;\n    }\n    .faded-bg {\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background: rgba(50, 50, 50, 0.5);\n        /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#15151c+75,15151c+100&0+0,0.1+40,0.3+55,1+100 */\n        background: -moz-linear-gradient(top, rgba(21,21,28,0) 0%, rgba(21,21,28,0.1) 40%, rgba(21,21,28,0.3) 55%, rgba(21,21,28,0.61) 75%, rgba(21,21,28,1) 100%); /* FF3.6-15 */\n        background: -webkit-linear-gradient(top, rgba(21,21,28,0) 0%,rgba(21,21,28,0.1) 40%,rgba(21,21,28,0.3) 55%,rgba(21,21,28,0.61) 75%,rgba(21,21,28,1) 100%); /* Chrome10-25,Safari5.1-6 */\n        background: linear-gradient(to bottom, rgba(21,21,28,0) 0%,rgba(21,21,28,0.1) 40%,rgba(21,21,28,0.3) 55%,rgba(21,21,28,0.61) 75%,rgba(21,21,28,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */\n        filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#0015151c', endColorstr='#15151c',GradientType=0 ); /* IE6-9 */\n    }\n    .voyager-refresh {\n        -webkit-animation:spin 0.6s infinite linear;\n        -moz-animation:spin 0.6s infinite linear;\n        animation:spin 0.6s infinite linear;\n    }\n    .alert-black {\n        background: rgba(0, 0, 0, 0.5);\n        color: rgb(255, 255, 255);\n        position: relative;\n        z-index: 10;\n        margin-top: 20px;\n    }\n\n    .alert-red{\n        background: #e74c3c;\n        border-left: 5px solid rgba(0, 0, 0, 0.1);\n        font-size: 12px;\n        color: rgb(255, 255, 255);\n        position: relative;\n        z-index: 10;\n        margin-top: 20px;\n    }\n\n    .form-group-default {\n        background-color: #fff;\n        position: relative;\n        border: 2px solid rgba(28,43,54,.07);\n        border-radius: 3px;\n        padding: 7px 12px 4px;\n        overflow: hidden;\n        transition: border 0.3s ease-in;\n        font-weight:normal;\n    }\n\n    .form-group-default label {\n        margin: 0;\n        display: block;\n        opacity: 1;\n        transition: opacity .2s ease;\n        font-weight: 500;\n        font-size: 10px;\n        color:#58666e;\n        margin-bottom:3px;\n    }\n\n    .form-group-default .form-control{\n        border: none;\n        height: 25px;\n        min-height: 25px;\n        padding: 0;\n        margin-top: -4px;\n        background: 0 0;\n    }\n\n    .form-control{\n        background: #fff;\n        -webkit-appearance: none;\n        color: #1c2b36;\n        outline: 0;\n        border:0;\n        height: 35px;\n        line-height: normal;\n        vertical-align: middle;\n        min-height: 35px;\n        box-shadow: none;\n        font-weight:normal;\n    }\n\n    .form-control::-webkit-input-placeholder{\n      color:#ccc;\n      font-weight:300;\n    }\n    .form-control::-moz-placeholder{\n      color:#ccc;\n      font-weight:300;\n    }\n    .form-control:-ms-input-placeholder{\n      color:#ccc;\n      font-weight:300;\n    }\n    .form-control:-moz-placeholder{\n      color:#ccc;\n      font-weight:300;\n    }\n\n    .form-control-grey:focus, .form-control:focus {\n        outline: 0!important;\n        box-shadow: none;\n    }\n\n    .form-control:focus::-webkit-input-placeholder{\n        color:#8c9bA6;\n    }\n\n    .form-control:focus::-moz-placeholder{\n        color:#8c9bA6;\n    }\n\n    .form-control:focus:-ms-input-placeholder{\n        color:#8c9bA6;\n    }\n\n    .form-control:focus:-moz-placeholder{\n        color:#8c9bA6;\n    }\n}\n\n/*********** END LOGIN CSS ***********/\n\nhtml {\n  height: 100%; }\n\nbody {\n  padding-top: 0;\n  height: 100%;\n  position: relative;\n  font-size: 13px; }\n\n* {\n  outline: none; }\n\n.row > [class*=\"col-\"] {\n  margin-bottom: 25px; }\n\n.row.no-margin-bottom > [class*=\"col-\"] {\n  margin-bottom: 10px; }\n\n.row.no-gap {\n  margin-left: 0;\n  margin-right: 0; }\n.row.no-gap > [class*=\"col-\"] {\n  padding-left: 0;\n  padding-right: 0; }\n\n.no-padding {\n  padding: 0 !important; }\n.no-padding-left{\n    padding-left:0px;\n}\n.no-padding-right{\n    padding-right:0px;\n}\n.no-padding-top{\n    padding-top:0px;\n}\n.no-padding-bottom{\n    padding-bottom:0px;\n}\n\n.float-left {\n  float: left; }\n\n.float-right {\n  float: right; }\n\n.clear-both {\n  clear: both; }\n\n.no-margin-bottom {\n  margin-bottom: 0; }\n\n.no-margin {\n  margin-top: 0;\n  margin-bottom: 0;\n  margin-left: 0;\n  margin-right: 0; }\n\na {\n  text-decoration: none; }\n\na:hover {\n  text-decoration: none; }\n\n.font-weight-300 {\n  font-weight: 300; }\n\n.text-indent {\n  text-indent: 1em; }\n\n.navbar {\n  z-index: 800;\n  padding-left: 60px;\n  -webkit-transition: all 0.25s;\n  transition: all 0.25s; }\n.navbar > .container, .navbar > .container-fluid {\n  z-index: 10001; }\n.navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand {\n  height: 60px;\n  line-height: 60px;\n  margin-left: 0;\n  font-family: 'Open Sans', sans-serif;\n  font-weight: 400;\n  padding: 0;\n  font-size: 1.5em; }\n.navbar > .container .navbar-brand .fa-angle-right, .navbar > .container-fluid .navbar-brand .fa-angle-right {\n  margin-left: 5px;\n  margin-right: 5px; }\n.navbar > .container .navbar-expand-toggle, .navbar > .container-fluid .navbar-expand-toggle {\n  width: 60px;\n  height: 60px;\n  background-color: transparent;\n  border: 0;\n  float: left;\n  -moz-transition: all 0.25s linear;\n  -webkit-transition: all 0.25s linear;\n  transition: all 0.25s linear;\n  opacity: 0.75; }\n.navbar > .container .navbar-expand-toggle .icon, .navbar > .container-fluid .navbar-expand-toggle .icon {\n  font-size: 1.4em; }\n.navbar > .container .navbar-right-expand-toggle, .navbar > .container-fluid .navbar-right-expand-toggle {\n  width: 60px;\n  height: 60px;\n  background-color: transparent;\n  border: 0;\n  position: absolute;\n  right: 0;\n  -moz-transition: all 0.25s linear;\n  -webkit-transition: all 0.25s linear;\n  transition: all 0.25s linear;\n  opacity: 0.75; }\n.navbar > .container .navbar-right-expand-toggle .icon, .navbar > .container-fluid .navbar-right-expand-toggle .icon {\n  font-size: 1.4em; }\n.navbar .navbar-breadcrumb {\n  margin-left: 0;\n  background-color: transparent;\n  padding: 0;\n  float: left; }\n.navbar .navbar-breadcrumb > li {\n  height: 60px;\n  line-height: 60px;\n  vertical-align: middle;\n  font-family: 'Open Sans', sans-serif;\n  font-size: 1.5em; }\n.navbar .navbar-nav > li > a {\n  font-family: 'Open Sans', sans-serif;\n  height: 60px;\n  line-height: 60px;\n  padding: 0 10px 0 20px; }\n.navbar .dropdown-menu {\n  padding: 0;\n  border: 0;\n  border-bottom-left-radius: 2px;\n  border-bottom-right-radius: 2px;\n  animation-duration: 0.4s;\n  -webkit-animation-duration: 0.4s;\n  z-index: -1;\n  position: absolute; }\n.navbar .dropdown-menu .title {\n  font-family: 'Open Sans', sans-serif;\n  padding: 5px 10px;\n  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }\n.navbar .dropdown-menu .message {\n  font-family: 'Open Sans', sans-serif;\n  text-align: center;\n  padding: 10px 20px; }\n.navbar .dropdown-menu .notifications.list-group {\n  list-style: none;\n  padding: 0;\n  margin: 0; }\n.navbar .dropdown-menu .notifications.list-group .list-group-item {\n  min-width: 250px;\n  padding: 8px;\n  border: 0;\n  border-bottom: 1px solid #EEE; }\n.navbar .dropdown-menu .notifications.list-group .list-group-item .icon {\n  margin-right: 5px; }\n.navbar .dropdown-menu .notifications.list-group .badge {\n  border-radius: 1em; }\n.navbar .dropdown-menu .notifications.list-group .list-group-item:last-child {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0; }\n.navbar .dropdown-menu .notifications.list-group .list-group-item:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0; }\n.navbar .dropdown-menu .notifications.list-group a.list-group-item:hover {\n  cursor: pointer; }\n.navbar .dropdown.profile .dropdown-menu {\n  width: 305px;\n  padding-bottom: 0;\n  text-align: center; }\n.navbar .dropdown.profile .dropdown-menu li.profile-img {\n  padding: 0;\n  max-height: 300px;\n  overflow: hidden; }\n.navbar .dropdown.profile .dropdown-menu li.profile-img img.profile-img {\n  width: 100%;\n  height: auto;\n  margin: 0;\n  border: 0; }\n.navbar .dropdown.profile .dropdown-menu .profile-info {\n  font-family: 'Open Sans', sans-serif;\n  padding: 15px; }\n.navbar .dropdown.profile .dropdown-menu .profile-info .username {\n  font-size: 1.8em; }\n\n.app-container {\n  min-height: 100%;\n  position: relative;\n  background:#f9f9f9;\n  padding-bottom: 30px; }\n.app-container .app-footer {\n  display: block;\n  position: absolute;\n  bottom: 0;\n  right: 0;\n  left: 65px;\n  -webkit-transition: all 0.25s;\n  transition: all 0.25s;\n  font-size: 12px;\n  font-family: 'Open Sans', sans-serif; }\n.app-container .app-footer .wrapper {\n  padding: 10px 35px;\n  padding-left: 25px;\n  height: 50px;\n  line-height: 50px;\n  vertical-align: middle; }\n.app-container .content-container {\n  margin-right: 0;\n  margin-left: 0; }\n.app-container .content-container .side-menu {\n  overflow-y: auto;\n  z-index: 9999;\n  position: fixed;\n  width: 60px;\n  height: 100%;\n  -webkit-transition: width 0.25s;\n  transition: width 0.25s; }\n.app-container .content-container .side-menu .navbar-header {\n  width: 100%;\n  border-bottom: 0 solid #e7e7e7; }\n.app-container .content-container .side-menu .navbar-header .navbar-brand {\n  width: 455px;\n  line-height: 60px;\n  height: 60px;\n  padding: 0;\n  width: 100%;\n  overflow: hidden;\n  font-family: 'Open Sans', sans-serif; }\n.app-container .content-container .side-menu .navbar-header .navbar-brand .icon {\n  width: 60px;\n  text-align: center;\n  display: inline-block; }\n.app-container .content-container .side-menu .navbar-header .navbar-brand .title {\n  margin-left: -10px;\n  display: none;\n  font-weight:200; }\n.app-container .content-container .side-menu .navbar-header .navbar-expand-toggle {\n  position: absolute;\n  right: 0;\n  width: 60px;\n  height: 60px;\n  background-color: transparent;\n  border: 0;\n  -moz-transition: all 0.25s linear;\n  -webkit-transition: all 0.25s linear;\n  transition: all 0.25s linear;\n  opacity: 0.75; }\n.app-container .content-container .side-menu .navbar {\n  border: none;\n  padding-left: 0; }\n.app-container .content-container .side-menu .navbar-nav li {\n  display: block;\n  width: 100%;\n  overflow: hidden; }\n.app-container .content-container .side-menu .navbar-nav li a {\n  font-family: 'Open Sans', sans-serif;\n  padding: 0 10px 0 10px;\n  height: 50px;\n  line-height: 50px;\n  display: block;\n  white-space: nowrap;\n\n  font-size: 15px;\n}\n.app-container .content-container .side-menu .navbar-nav li a .icon {\n  margin-left: 0;\n  width: 38px;\n  text-align: center;\n  font-size: 1.1em;\n  display: inline-block; }\n.app-container .content-container .side-menu .navbar-nav li a .title {\n  width: 0;\n  white-space: nowrap;\n  padding-left: 6px;\n  display: none; }\n.app-container .content-container .side-menu .navbar-nav li.dropdown {\n  border: 0;\n  margin-bottom: 0;\n  border-radius: 0;\n  box-shadow: none; }\n.app-container .content-container .side-menu .navbar-nav li.dropdown ul li a {\n  height: 44px;\n  line-height: 44px;\n  vertical-align: middle;\n  padding: 0 1.2em; }\n.app-container .content-container .side-menu .navbar-nav li.dropdown > a:after {\n  content: \"\";\n  position: absolute;\n  right: 1em; }\n.app-container .content-container .side-menu .navbar-nav .panel-collapse.in {\n  display: none; }\n.app-container .content-container .side-menu:hover {\n  width: 250px; }\n.app-container .content-container .side-menu:hover .navbar-header .navbar-brand .title {\n  display: inline-block; }\n.app-container .content-container .side-menu:hover .navbar-nav li a .title {\n  width: 192px;\n  display: inline-block; }\n.app-container .content-container .side-menu:hover .navbar-nav li.dropdown > a[aria-expanded=\"false\"]:after {\n  font-family: Voyager;\n  content: \"\\e038\";\n  position: absolute;\n  right: 1em; }\n.app-container .content-container .side-menu:hover .navbar-nav li.dropdown > a[aria-expanded=\"true\"]:after {\n  font-family: Voyager;\n  content: \"\\e047\";\n  position: absolute;\n  right: 1em; }\n.app-container .content-container .side-menu:hover .panel-collapse.in {\n  display: block; }\n.app-container .content-container .side-body {\n  padding-top: 70px; }\n.app-container .content-container .side-body.padding-top {\n  padding-top: 84px; }\n\n.app-container.expanded .app-footer {\n  left: 250px; }\n.app-container.expanded .app-footer .wrapper {\n  padding-left: 25px; }\n\n.app-container.expanded .content-container .navbar-top {\n  padding-left: 250px; }\n\n.app-container.expanded .content-container .side-menu {\n  width: 250px; }\n.app-container.expanded .content-container .side-menu .navbar-header .navbar-brand .title {\n  display: inline-block; }\n.app-container.expanded .content-container .side-menu .navbar-nav li a .title {\n  display: inline-block; }\n.app-container.expanded .content-container .side-menu .navbar-nav li .panel-collapse.in {\n  display: block; }\n.app-container.expanded .content-container .side-menu .navbar-nav li.dropdown > a:after {\n  font-family: Voyager;\n  content: \"\\e038\";\n  position: absolute;\n  right: 1em; }\n\n.container-fluid > .navbar-collapse, .container-fluid > .navbar-header, .container > .navbar-collapse, .container > .navbar-header {\n  margin-left: -15px;\n  margin-right: -15px; }\n\n.page-title {\n  display: inline-block;\n  height: auto;\n  padding-left: 25px;\n  font-size: 18px;\n  position: relative;\n  height:100px;\n  line-height:43px;\n  margin-top:3px;\n  padding-top:28px;\n  color: #555;\n  position:relative;\n  padding-left:75px;\n  margin-bottom:0px;\n  font-weight:700;\n  margin-right:20px;\n}\n.page-title > i{\n  font-size:36px;\n  position:absolute;\n  top:30px;\n  left:25px;\n  margin-right:10px;\n}\n.page-title .title {\n  font-size: 2em; }\n.page-title .page-action {\n  float: right;\n  height: 40px;\n  line-height: 40px;\n  vertical-align: middle; }\n.voyager .btn-add-new, .voyager #bulk_delete_btn{\n  margin-top:2px;\n}\n@media (max-width: 768px) {\n  .btn-add-new span, #bulk_delete_btn span{\n    display:none;\n  }\n}\n.sub-title {\n  font-family: 'Open Sans', sans-serif; }\n.sub-title > * {\n  display: inline-block; }\n.sub-title h3 {\n  margin-right: 10px; }\n.sub-title .description {\n  font-family: 'Open Sans', sans-serif;\n  font-size: 0.9em; }\n.sub-title .action .btn {\n  padding: 0 0.5em; }\n\n/* Main body section */\n.app-container .side-body {\n  margin-left: 75px;\n  margin-right: 0px;\n  -webkit-transition: all 500ms cubic-bezier(0.19, 1, 0.22, 1);\n  transition: all 500ms cubic-bezier(0.19, 1, 0.22, 1) }\n.app-container .side-body .container-fluid {\n  padding-right: 0;\n}\n.app-container.expanded .side-body {\n  margin-left: 235px; }\n/* small screen */\n@media (max-width: 768px) {\n  .navbar {\n    padding-left: 0; }\n  .navbar .navbar-header {\n    width: auto;\n    display: block; }\n  .navbar .navbar-nav {\n    width: auto;\n    margin: 0; }\n  .navbar .navbar-nav > li {\n    display: inline-block; }\n  .navbar .navbar-right {\n    position: absolute;\n    top: 0;\n    right: -100%;\n    height: 100%;\n    width: 100%;\n    -moz-transition: all 0.25s linear;\n    -webkit-transition: all 0.25s linear;\n    transition: all 0.25s linear; }\n  .navbar .navbar-right .open .dropdown-menu {\n    position: absolute; }\n  .navbar .navbar-right.expanded {\n    right: 0; }\n  .app-container .navbar-top {\n    min-width: 300px; }\n  .app-container .content-container .side-menu {\n    margin-left: -250px;\n    width: 0; }\n  .app-container .content-container .side-body {\n    margin-left: 10px; }\n  .app-container.expanded .navbar-top {\n    min-width: 480px;\n    padding-left: 0; }\n  .app-container.expanded .side-menu {\n    margin-left: 0;\n    width: 250px; }\n  .app-container.expanded .side-body {\n    margin-left: 10px; }\n  .app-container .app-footer .wrapper, .app-container.expanded .app-footer .wrapper {\n    padding-left: 25px; } }\n\n/* Card */\n.card {\n  background-color: #FFF;\n  border-radius: 1px;\n  overflow: hidden;\n  position: relative; }\n.card .card-body {\n  padding: 25px; }\n.card .card-body .sub-title {\n  font-size: 1.2em;\n  padding: 1.2em 0 0.4em 0;\n  margin-bottom: 25px; }\n.card .card-body .sub-title .description {\n  padding-left: 0.4em;\n  font-size: 0.8em;\n  opacity: 0.8; }\n.card .card-body.half-padding {\n  padding: 12.5px; }\n.card .card-header .card-title {\n  padding: 1.2em 25px;\n  float: left; }\n.card .card-header .card-title .title {\n  font-family: 'Open Sans', sans-serif;\n  font-size: 1.5em;\n  text-decoration: none; }\n.card .card-header .pull-right {\n  padding: 0.5em 1em; }\n.card .card-header:after {\n  content: '';\n  display: block;\n  clear: both; }\n.card .card-profile-img img {\n  width: 100%;\n  height: auto; }\n.card .card-jumbotron {\n  padding: 1.5em 1.5em; }\n\n.card:hover .card-header .title {\n  text-decoration: none !important; }\n\n.card.summary-inline .card-body {\n  padding: 20px; }\n.card.summary-inline .card-body .content {\n  float: right; }\n.card.summary-inline .card-body .content .title {\n  font-family: 'Lato', sans-serif;\n  margin-top: -0.3em;\n  font-size: 3.5em;\n  text-align: right; }\n.card.summary-inline .card-body .content .sub-title {\n  font-family: 'Lato', sans-serif;\n  font-size: 0.9em;\n  text-align: right;\n  margin-top: -10px;\n  margin-bottom: 0;\n  padding: 0;\n  border-bottom: 0; }\n\n.card.profile .card-body {\n  padding: 0.5em 0.8em; }\n\n.card.profile .card-footer {\n  padding: 0.5em 0.8em; }\n\n.panel {\n  border-radius: 1px; }\n.panel .panel-heading {\n  border-top-left-radius: 2px;\n  border-top-right-radius: 2px; }\n\n.chart {\n  padding: 15px; }\n\n.chart.no-padding {\n  padding: 0;\n  margin-bottom: -5px; }\n\n.btn {\n  margin-top: 5px;\n  margin-bottom: 5px;\n  border-radius: 1px;\n  border-width: 1px;\n  font-family: 'Open Sans', sans-serif; }\n\n.btn-group-lg > .btn, .btn-group-lg > .btn-lg {\n  border-radius: 1px; }\n\n.progress {\n  border-radius: 1px;\n  box-shadow: none; }\n.progress .progress-bar {\n  box-shadow: none; }\n\n.pagination {\n  margin-top: 5px;\n  margin-bottom: 5px; }\n.pagination li:first-child > a, .pagination li:first-child span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px; }\n.pagination li:last-child > a, .pagination li:last-child span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px; }\n\n.form-control {\n  border-radius: 1px;\n  box-shadow: none; }\n\n.bs-example-modal .modal {\n  z-index: 100;\n  position: relative;\n  display: block; }\n\n.modal {\n  z-index: 100001; }\n.modal .modal-dialog .modal-header {\n  font-family: 'Open Sans', sans-serif; }\n.modal .modal-dialog .modal-content {\n  border-radius: 4px;\n  box-shadow: none; }\n.modal .modal-dialog .modal-footer .btn {\n  margin-top: 0;\n  margin-bottom: 0; }\n\n.modal .modal-dialog .modal-footer .btn.btn-default{\n  margin-right:10px;\n}\n\n.modal-backdrop {\n  z-index: 100000; }\n\n.modal-backdrop.in {\n  opacity: 0.8; }\n\n.alert {\n  border-width: 0;\n  border-radius: 1px; }\n\n.list-group .badge {\n  border-radius: 1px; }\n\n.list-group .list-group-item:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px; }\n\n.list-group .list-group-item:first-child {\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px; }\n\n.checkbox3, .radio3 {\n  margin-top: 0;\n  margin-bottom: 0; }\n\n.checkbox-inline {\n  margin-bottom: 5px; }\n\n.checkbox3 label, .radio3 label {\n  padding: 8px 0 8px 30px; }\n\n.checkbox3 label::before, .radio3 label::before {\n  top: 5px; }\n\n.checkbox3 label::after, .radio3 label::after {\n  top: 5px; }\n\n.checkbox3 label, .radio3 label, .checkbox-inline, .radio-inline {\n  font-weight: normal; }\n\n.thumbnail {\n  border-radius: 1px;\n  padding: 0; }\n.thumbnail .caption {\n  padding: 0.5em 1.2em; }\n.thumbnail .caption .h1, .thumbnail .caption .h2, .thumbnail .caption .h3, .thumbnail .caption h1, .thumbnail .caption h2, .thumbnail .caption h3 {\n  margin-top: 15px; }\n\nbody.login-page {\n  background: url(../../img/app-header-bg.jpg) no-repeat center center fixed;\n  -webkit-background-size: cover;\n  -moz-background-size: cover;\n  -o-background-size: cover;\n  background-size: cover; }\nbody.login-page .login-box {\n  width: 100%;\n  max-width: 320px;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  padding: 0; }\nbody.login-page .login-box > .title {\n  margin-bottom: 1em; }\nbody.login-page .login-box > .row {\n  margin-left: 0;\n  margin-right: 0;\n  margin-bottom: 0; }\nbody.login-page .login-form {\n  padding: 0; }\nbody.login-page .login-form .login-header {\n  margin-bottom: 1.2em;\n  font-size: 1.5em; }\nbody.login-page .login-form .login-body {\n  padding: 1.5em;\n  border-radius: 1px; }\nbody.login-page .login-form input {\n  margin-bottom: 0.8em;\n  margin-top: 0.5em;\n  padding: 1.2em 1em;\n  font-size: 1.1em;\n  border-radius: 1px; }\nbody.login-page .login-button .btn {\n  padding: 0.5em 2em;\n  font-size: 1.1em;\n  border-radius: 1px;\n  margin-bottom: 0; }\nbody.login-page .login-footer {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  width: 100%;\n  text-align: right;\n  border-bottom-left-radius: 3px;\n  border-bottom-right-radius: 3px; }\n\n@media (max-width: 768px) {\n  body.login-page .login-form .login-header {\n    margin-bottom: 1em; }\n  body.login-page .login-box {\n    width: 100%;\n    max-width: 260px; } }\n\n.dataTables_wrapper .row {\n  margin-bottom: 0.5em;\n  margin-left: 0;\n  margin-right: 0; }\n\n.dataTables_wrapper .top {\n  margin-bottom: 6px;\n  position: relative; }\n\n.dataTables_wrapper .bottom {\n  margin-top: 6px; }\n\n.dataTables_wrapper .top:after, .dataTables_wrapper .bottom:after {\n  position: relative;\n  clear: both;\n  display: block;\n  content: ''; }\n\n.dataTables_wrapper .dataTables_paginate .paginate_button {\n  padding: 0;\n  margin-left: 0;\n  border: 0; }\n\n.dataTables_wrapper .dataTables_paginate .paginate_button:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {\n  border: 0; }\n\n.dataTables_wrapper tfoot {\n  display: none; }\n\ntable.dataTable.no-footer{\n  border-bottom:1px solid #f1f1f1;\n}\n\n.code-preview {\n  width: 100%;\n  min-height: 400px; }\n\n.nav-tabs > li {\n  margin-bottom: -1px; }\n.nav-tabs > li > a {\n  border-radius: 0;\n  border: 0; }\n\n.nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover {\n  border-radius: 0;\n  border-top: 0; }\n\n.tab-content > div {\n  padding: 20px; }\n\n.tabs-below > .nav-tabs,\n.tabs-right > .nav-tabs,\n.tabs-left > .nav-tabs {\n  border-bottom: 0; }\n\n.tab-content > .tab-pane,\n.pill-content > .pill-pane {\n  display: none; }\n\n.tab-content > .active,\n.pill-content > .active {\n  display: block; }\n\n.tabs-below > .nav-tabs > li {\n  margin-top: -1px;\n  margin-bottom: 0; }\n\n.tabs-below > .nav-tabs > li > a:hover,\n.tabs-below > .nav-tabs > li > a:focus {\n  border-bottom-color: transparent; }\n\n.tabs-left > .nav-tabs > li,\n.tabs-right > .nav-tabs > li {\n  float: none; }\n\n.tabs-left > .nav-tabs > li > a,\n.tabs-right > .nav-tabs > li > a {\n  min-width: 74px;\n  margin-right: 0;\n  margin-bottom: 3px; }\n\n.tabs-left, .tabs-right {\n  display: table; }\n\n.tabs-left > .nav-tabs {\n  display: table-cell;\n  margin-right: 19px; }\n\n.tabs-left > .nav-tabs > li > a {\n  margin-right: -1px; }\n\n.tabs-right > .nav-tabs {\n  display: table-cell;\n  margin-left: 19px; }\n\n.tabs-right > .nav-tabs > li > a {\n  margin-left: -1px; }\n\n.tab:after {\n  content: '';\n  display: block;\n  clear: both; }\n\n.step .nav-tabs {\n  border-bottom: 0;\n  margin-left: 0;\n  margin-right: 0;\n  margin-bottom: 20px; }\n.step .nav-tabs > li[class^=\"col-\"] {\n  padding-left: 0;\n  padding-right: 0; }\n.step .nav-tabs > li:first-child {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px; }\n.step .nav-tabs > li {\n  border-right: 0; }\n.step .nav-tabs > li > a {\n  margin-right: 0;\n  display: block;\n  width: 100%;\n  padding: 1em;\n  padding-left: 2em;\n  vertical-align: middle;\n  white-space: nowrap;\n  overflow: hidden;\n  text-align: left;\n  border-bottom: 0; }\n.step .nav-tabs > li > a .icon {\n  font-size: 2.5em;\n  display: inline-block;\n  margin-right: 0.25em;\n  vertical-align: middle; }\n.step .nav-tabs > li > a .step-title {\n  width: auto;\n  display: inline-block;\n  vertical-align: middle;\n  text-align: left; }\n.step .nav-tabs > li > a .step-title .title {\n  font-weight: bold;\n  font-size: 1.1em; }\n.step .nav-tabs > li > a .step-title .description {\n  font-size: 0.9em; }\n.step .nav-tabs > li > a:hover {\n  border-bottom: 0; }\n.step .nav-tabs > li:after {\n  content: \"\";\n  width: 0;\n  height: 0;\n  position: absolute;\n  top: 50%;\n  right: -15px;\n  transform: translate(0%, -50%);\n  z-index: 100001; }\n.step .nav-tabs > li:before {\n  content: \"\";\n  width: 0;\n  height: 0;\n  position: absolute;\n  top: 50%;\n  right: -16px;\n  transform: translate(0%, -50%);\n  z-index: 100000; }\n.step .nav-tabs > li.active > a, .step .nav-tabs > li.active > a:focus, .step .nav-tabs > li.active > a:hover {\n  border: 0;\n  border-radius: 0;\n  border-bottom: 0; }\n.step .nav-tabs > li:last-child {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px; }\n.step .nav-tabs > li:last-child:before, .step .nav-tabs > li:last-child:after {\n  display: none; }\n\n.step .tab-content > div {\n  padding: 0; }\n\n.step.card-no-padding .nav-tabs {\n  margin-bottom: 0; }\n.step.card-no-padding .nav-tabs > li {\n  border-radius: 0; }\n\n.step.card-no-padding .tab-content > div {\n  padding: 20px; }\n\n.step.tabs-left .tab-content {\n  padding: 5px 15px;\n  display: table-cell;\n  vertical-align: top; }\n.step.tabs-left .tab-content > div {\n  padding: 20px; }\n\n.step.tabs-left .nav-tabs {\n  border-bottom: 0;\n  margin-left: 0;\n  margin-right: 0;\n  margin-bottom: 0; }\n.step.tabs-left .nav-tabs > li[class^=\"col-\"] {\n  padding-left: 0;\n  padding-right: 0; }\n.step.tabs-left .nav-tabs > li:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n.step.tabs-left .nav-tabs > li {\n  border-right: 0;\n  min-width: 250px;\n  display: table;\n  width: 250px; }\n.step.tabs-left .nav-tabs > li > a {\n  margin-right: 0;\n  display: table-cell;\n  width: 100%;\n  padding: 1em;\n  padding-left: 2em;\n  vertical-align: middle;\n  table-layout: fixed;\n  white-space: nowrap;\n  overflow: hidden; }\n.step.tabs-left .nav-tabs > li > a .icon {\n  font-size: 2.5em;\n  display: inline-block;\n  margin-right: 0.25em;\n  vertical-align: middle; }\n.step.tabs-left .nav-tabs > li > a .step-title {\n  width: auto;\n  display: inline-block;\n  vertical-align: middle; }\n.step.tabs-left .nav-tabs > li > a .step-title .title {\n  font-weight: bold;\n  font-size: 1.1em; }\n.step.tabs-left .nav-tabs > li > a .step-title .description {\n  font-size: 0.9em; }\n.step.tabs-left .nav-tabs > li > a:hover {\n  border-bottom: 0; }\n.step.tabs-left .nav-tabs > li:after {\n  content: \"\";\n  width: 0;\n  height: 0;\n  position: absolute;\n  top: 50%;\n  transform: translate(0%, -50%);\n  z-index: 10000;\n  display: none; }\n.step.tabs-left .nav-tabs > li:before {\n  content: \"\";\n  width: 0;\n  height: 0;\n  position: absolute;\n  top: 50%;\n  right: -16px;\n  transform: translate(0%, -50%);\n  z-index: 10000;\n  display: none; }\n.step.tabs-left .nav-tabs > li.active > a, .step.tabs-left .nav-tabs > li.active > a:focus, .step.tabs-left .nav-tabs > li.active > a:hover {\n  border: 0;\n  border-radius: 0;\n  border-bottom: 0; }\n.step.tabs-left .nav-tabs > li.active:after, .step.tabs-left .nav-tabs > li.active:before {\n  display: block; }\n.step.tabs-left .nav-tabs > li:last-child {\n  border-bottom-left-radius: 3px;\n  border-bottom-right-radius: 3px; }\n\n/* Multiple images */\n\n.image-tool-box {\n  display: inline-block;\n  clear: both;\n  padding: 2px;\n  border: 1px solid #ddd;\n  margin-bottom: 10px;\n  position: relative;\n}\n\n.image-tool-box img {\n  width: 200px;\n  height: auto;\n}\n\n.image-tool-box .image-tools {\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  transition: all 0.5s;\n  -webkit-transition: all 0.5s;\n}\n\n.image-tool-box .image-tools .glyphicon {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  color: #fff;\n  display: none;\n  cursor: pointer;\n}\n\n.image-tool-box:hover .image-tools {\n  background:rgba(0,0,0,0.8);\n  transition: all 0.5s;\n  -webkit-transition: all 0.5s;\n}\n\n.image-tool-box:hover .image-tools .glyphicon {\n  display: block;\n}\n\n.select2-container--open {\n  z-index: 999999;\n}\n\n.select2-container--default .select2-selection--single{\n    border: 0px;\n    border-right: 1px solid #f1f1f1;\n    border-radius: 0px;\n    height: 34px;\n    padding: 3px;\n}\n\n.panel-body .select2-selection{\n    border: 1px solid #f1f1f1;\n}\n\n.select2-container--default .select2-selection--single .select2-selection__arrow{\n    top:4px;\n}\n\n.select2-dropdown{\n    z-index:9;\n}\n\n.select2-container--open .select2-dropdown--below{\n    border: 0px;\n    box-shadow: 0px 15px 15px -1px rgba(0, 0, 0, 0.15);\n}\n\n@media (max-width: 768px) {\n  .step .nav-tabs > li:after {\n    display: none; }\n  .step .nav-tabs > li:before {\n    display: none; } }\n\n.loader-container {\n  display: none; }\n\n.loader .loader-container {\n  display: block;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  z-index: 1003; }\n\n.loader:after {\n  content: \"\";\n  display: block;\n  position: absolute;\n  background-color: rgba(0, 0, 0, 0.9);\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 1001;\n  border-radius: 1px; }\n\n.pricing-table .pt-header {\n  text-align: center;\n  padding: 1em; }\n.pricing-table .pt-header .plan-pricing .pricing {\n  font-size: 2.5em; }\n.pricing-table .pt-header .plan-pricing .pricing-type {\n  opacity: 0.9; }\n\n.pricing-table .pt-body {\n  padding: 1em;\n  text-align: center; }\n.pricing-table .pt-body .plan-detail {\n  padding: 0;\n  margin: 0;\n  list-style: none; }\n\n.pricing-table .pt-footer {\n  padding: 0.75em;\n  text-align: center; }\n\n.icons-list {\n  list-style: none;\n  margin: 0;\n  padding: 0; }\n.icons-list > li {\n  float: left;\n  text-align: center;\n  width: 100px;\n  height: 100px;\n  padding: 8px; }\n.icons-list > li span {\n  display: block; }\n.icons-list > li .glyphicon {\n  font-size: 1.5em; }\n.icons-list > li .glyphicon-class {\n  margin-top: 8px;\n  font-size: 0.75em; }\n\n.icons-list:after {\n  content: '';\n  display: block;\n  position: relative;\n  clear: both; }\n\n.row.example > [class*='col-'] > div {\n  background-color: #EEE;\n  padding: 10px;\n  border: 1px solid #DDD; }\n\n.breadcrumb {\n  margin-bottom: 0; }\n.breadcrumb > li + li:before {\n  font-family: Voyager;\n  content: '\\e046';\n  position:relative;\n  top:1px;\n  margin-right: 3px; }\n\n.message-list {\n  margin: 0;\n  padding: 0;\n  list-style-type: none; }\n.message-list > a > li {\n  border-bottom: 1px dotted #EEE;\n  padding: 8px; }\n.message-list > a > li > .message-block {\n  padding-left: 70px;\n  min-height: 60px; }\n.message-list > a > li > .message-block .username {\n  font-size: 12px;\n  font-weight: bold; }\n.message-list > a > li > .message-block .message-datetime {\n  font-size: 10px;\n  color: #AAA; }\n.message-list > a > li > .message-block .message {\n  font-size: 12px; }\n.message-list > a > li .profile-img {\n  width: 60px;\n  height: 60px; }\n.message-list > a:hover li {\n  background-color: rgba(0, 0, 0, 0.01); }\n\n.bs-example > * {\n  margin-bottom: 20px; }\n\n.bs-example > *:last-child {\n  margin-bottom: 5px; }\n\n.landing-page {\n  font-family: 'Open Sans', sans-serif; }\n.landing-page .navbar .navbar-toggle {\n  position: absolute;\n  right: 0;\n  border-radius: 0;\n  border: 0;\n  height: 44px;\n  padding: 0 15px; }\n.landing-page .app-header {\n  padding-top: 100px;\n  background-image: url(\"../img/app-header-bg.jpg\");\n  background-repeat: no-repeat;\n  -webkit-background-size: cover;\n  -moz-background-size: cover;\n  -o-background-size: cover;\n  background-size: cover;\n  background-position: center;\n  margin-bottom: 0; }\n.landing-page .app-header .app-logo {\n  margin-bottom: 20px; }\n.landing-page .app-header .app-description {\n  margin-bottom: 40px; }\n.landing-page .app-content-a, .landing-page .app-content-b {\n  padding-top: 50px;\n  padding-bottom: 20px; }\n.landing-page .app-content-b.feature-1 {\n  background-image: url(\"../img/bg/picjumbo.com_HNCK3558.jpg\");\n  background-repeat: no-repeat;\n  -webkit-background-size: cover;\n  -moz-background-size: cover;\n  -o-background-size: cover;\n  background-size: cover;\n  background-position: center;\n  margin-bottom: 0; }\n.landing-page .app-content-b.contact-us {\n  padding-top: 60px;\n  padding-bottom: 60px;\n  background-image: url(\"../img/contact-us-bg.jpg\");\n  background-repeat: no-repeat;\n  -webkit-background-size: cover;\n  -moz-background-size: cover;\n  -o-background-size: cover;\n  background-size: cover;\n  background-position: center;\n  margin-bottom: 0; }\n.landing-page .app-content-b.contact-us .contact-us-header {\n  font-weight: 300;\n  font-size: 46px; }\n.landing-page .app-content-b.contact-us .contact-us-description {\n  font-weight: 300;\n  font-size: 18px;\n  opacity: 0.9;\n  text-indent: 40px; }\n.landing-page .app-content-b.contact-us form {\n  margin-top: 20px; }\n.landing-page .app-content-b.contact-us form input {\n  padding: 10px;\n  width: 100%;\n  border: 0; }\n.landing-page .app-content-header {\n  font-weight: 300;\n  font-size: 46px; }\n.landing-page .app-content-description {\n  font-weight: 300;\n  font-size: 18px; }\n.landing-page .app-footer {\n  padding-top: 15px;\n  padding-bottom: 15px;\n  margin-bottom: 0; }\n.landing-page .app-footer p {\n  margin: 0; }\n.landing-page .navbar-affix {\n  width: 100%;\n  height: 60px;\n  border-top: 2px rgba(78, 205, 196, 0.8);\n  -webkit-transition: all 0.2s ease-in;\n  transition: all 0.2s ease-in;\n  position: fixed;\n  -webkit-box-shadow: 0 0 6px 0 rgba(96, 100, 109, 0.4);\n  box-shadow: 0 0 6px 0 rgba(96, 100, 109, 0.4); }\n.landing-page .navbar.affix {\n  z-index: 4000;\n  background-color: rgba(255, 255, 255, 0.95) !important;\n  height: 60px;\n  opacity: 1;\n  margin-top: 0; }\n.landing-page .navbar-affix.affix li a {\n  height: 60px;\n  line-height: 60px; }\n.landing-page .navbar-affix.affix .navbar-nav > li > a {\n  background-color: transparent;\n  font-weight: 400;\n  color: #333; }\n.landing-page .navbar {\n  padding-left: 0;\n  background-color: transparent;\n  box-shadow: none; }\n.landing-page .navbar .navbar-right {\n  position: relative;\n  right: 0; }\n.landing-page .navbar .navbar-header {\n  border-bottom: 0 solid #e7e7e7; }\n.landing-page .navbar .navbar-header .navbar-brand {\n  width: 45px;\n  line-height: 60px;\n  height: 60px;\n  padding: 0;\n  width: 100%;\n  overflow: hidden;\n  padding-left: 0;\n  font-family: 'Open Sans', sans-serif; }\n.landing-page .navbar .navbar-header .navbar-brand .icon {\n  width: 50px;\n  text-align: center;\n  display: inline-block; }\n.landing-page .navbar .navbar-header .navbar-brand .title {\n  margin-left: -10px;\n  display: inline-block; }\n.landing-page .navbar .navbar-header .navbar-expand-toggle {\n  position: absolute;\n  right: 0;\n  width: 60px;\n  height: 60px;\n  background-color: transparent;\n  border: 0;\n  -moz-transition: all 0.25s linear;\n  -webkit-transition: all 0.25s linear;\n  transition: all 0.25s linear;\n  opacity: 0.75; }\n\n@media only screen and (max-width: 768px) {\n  .landing-page .navbar .navbar-header .navbar-brand {\n    padding-left: 15px; } }\n\n.row-example > [class*=\"col-\"] {\n  margin-bottom: 0; }\n\n/* Row Sortable (Drag and Drop), used in BREAD edit\n-------------------------------------------------- */\n.row-dd {\n  border-bottom:  1px solid #eee;\n  margin:         0 -7px;\n  padding-top:    20px;\n  padding-bottom: 0px;\n  &:last-child{\n    border-bottom:0px;\n  }\n}\n.row-dd-relationship{\n    border-left:3px solid #F7325B;\n    i.voyager-heart{\n        font-size: 16px;\n        position: relative;\n        padding: 5px;\n        background: #fff;\n        border-radius: 50px;\n        color: #F7325B;\n        border: 2px solid #F2435C;\n        width: 28px;\n        height: 28px;\n        padding-top: 4px;\n        padding-left: 4px;\n        text-align: center;\n        display: block;\n        float: left;\n        top: -4px;\n        left: -4px;\n    }\n    .delete_relationship{\n        position: absolute;\n        right: 0px;\n        bottom: 0px;\n        padding: 6px 28px 6px 10px;\n        background: red;\n        border-top-left-radius: 3px;\n        border-bottom-left-radius: 0px;\n        color: #fff;\n        font-size: 10px;\n        font-weight: 700;\n        cursor: pointer;\n        transition: opacity .1s linear;\n        opacity: .7;\n        z-index:2;\n        i{\n            position: absolute;\n            right: 4px;\n            font-size: 16px;\n            top: 4px;\n            height: 21px;\n            width: 21px;\n            color: #ffffff;\n            line-height: 22px;\n            text-align: center;\n            border-top-right-radius: 3px;\n            border-bottom-left-radius: 3px;\n        }\n        &:hover{\n            opacity:1;\n        }\n    }\n    .voyager-relationship-details-btn{\n        color: #F7325B;\n        border: 1px solid #ffffff;\n        border-radius: 25px;\n        padding: 10px 15px;\n        font-weight: 400;\n        font-size: 12px;\n        float: right;\n        position: relative;\n        padding-left: 30px;\n        background:#f9f9fb;\n        transition:all 0.2s ease;\n        cursor:pointer;\n        i{\n            top: 8px;\n            font-size: 16px;\n            position: absolute;\n            left: 10px;\n            &.voyager-angle-up{\n                display:none;\n            }\n        }\n        span.open_text{\n            display:inline;\n        }\n        span.close_text{\n            display:none;\n        }\n        &.open{\n            i{\n                &.voyager-angle-down{\n                    display:none;\n                }\n                &.voyager-angle-up{\n                    display:block;\n                }\n            }\n            span.open_text{\n                display:none;\n            }\n            span.close_text{\n                display:inline;\n            }\n        }\n        &:hover{\n            background:#fcfcff;\n        }\n    }\n    .voyager-relationship-details{\n        display: none;\n        background: #f5f5f7;\n        margin-bottom: 0px;\n        height:auto;\n        padding:15px;\n        padding-bottom:45px;\n        border-top:1px solid #efeff2;\n    }\n    .relationship_details_content{\n        &.margin_top{\n          margin-top:20px;\n        }\n        display:flex;\n        &.hasOneMany.flexed, &.belongsTo.flexed{\n          display:flex;\n        }\n        &.hasOneMany, &.belongsTo{\n          width:100%;\n          display:none;\n          label{\n            span{\n              color:#444;\n            }\n          }\n        }\n        &.relationshipPivot{\n            display:none;\n            &.visible{\n              display:flex;\n            }\n        }\n        & > label{\n            height: 38px;\n            background: #f1f1f1;\n            padding: 7px 12px;\n            font-size: 11px;\n            line-height: 23px;\n            font-weight: 700;\n            margin-bottom: 0;\n            border-top: 1px solid #eaeaea;\n            border-bottom: 1px solid #eaeaea;\n            &:first-child{\n              border-left:1px solid #eaeaea;\n            }\n        }\n        p{\n            float: left;\n            padding: 6px 20px;\n            background: #fff;\n            line-height: 22px;\n            margin-right: 0;\n            border: 1px solid #eaeaea;\n            border-top-left-radius: 3px;\n            border-bottom-left-radius: 3px;\n            color: #333;\n            margin-bottom: 0;\n            border-right: 0px;\n            &.flex{\n                display:flex;\n                border-radius: 0px;\n                border-top-right-radius: 3px;\n                border-bottom-right-radius: 3px;\n                border-right: 1px solid #eaeaea;\n                padding-right: 10px;\n                span{\n                    margin-left: 4px;\n                    margin-right: 5px;\n                    line-height: 24px;\n                }\n                input{\n                    position:relative;\n                    top:3px;\n                }\n            }\n            &.relationship_table_select{\n                background: #EFEFEF;\n                color: #76838f;\n                font-weight: bold;\n                font-size: 12px;\n                padding-top: 8px;\n            }\n        }\n        span{\n            flex:1;\n            display:inline-block;\n        }\n        span.select2{\n          display:block;\n          z-index:1 !important;\n          span{\n            display:block;\n          }\n        }\n        .relationship_type + span{\n            font-weight:bold;\n        }\n        select{\n            border: 1px solid #f1f1f1;\n            margin-left: 10px;\n        }\n        .relationship_taggable{\n          display:none;\n        }\n        .select2{\n            flex:1;\n            border: 1px solid #eaeaea;\n            border-right:0px;\n            margin-right:0px;\n            height:38px;\n            .select2-selection{\n                border-radius:0px;\n                border:0px;\n                height:36px;\n            }\n        }\n        .select2:last-child {\n            border-right: 1px solid #eaeaea;\n            border-top-right-radius: 2px;\n            border-bottom-right-radius: 4px;\n        }\n        .form-control {\n            border-radius:0px;\n            height: 38px;\n            flex:1;\n            &:last-child{\n                border-top-right-radius: 3px;\n                border-bottom-right-radius: 3px;\n            }\n        }\n    }\n}\n.row-dd:hover {\n  background-color: #F6F8FA;\n}\n.row-dd > div:first-child { padding-left: 37px; }\n.row-dd > div:first-child .handler {\n  position: absolute;\n  top:      0px;\n  left:     14px;\n  cursor:   move;\n}\n.fake-table-hd {\n  padding: 0 8px;\n}\n.fake-table-hd > div:first-child { padding-left: 29px; }\n.fake-table-hd > div {\n  font-weight:      500;\n  padding:          8px;\n  margin-bottom:    0 !important;\n  background-color: #F6F8FA;\n  border-bottom:    1px solid #EAEAEA;\n}\n\n/* CUSTOMIZE THE NAVBAR\n-------------------------------------------------- */\n/* Special class on .container surrounding .navbar, used for positioning it into place. */\n.navbar-wrapper {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 20; }\n\n/* Flip around the padding for proper display in narrow viewports */\n.navbar-wrapper > .container {\n  padding-right: 0;\n  padding-left: 0; }\n\n.navbar-wrapper .navbar {\n  padding-right: 15px;\n  padding-left: 15px; }\n\n.navbar-wrapper .navbar .container {\n  width: auto; }\n\n/* CUSTOMIZE THE CAROUSEL\n-------------------------------------------------- */\n/* Carousel base class */\n.carousel {\n  height: 500px;\n  margin-bottom: 60px; }\n\n/* Since positioning the image, we need to help out the caption */\n.carousel-caption {\n  z-index: 10; }\n\n/* Declare heights because of positioning of img element */\n.carousel .item {\n  height: 500px;\n  background-color: #777; }\n\n.carousel-inner > .item > img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  min-width: 100%;\n  height: 500px; }\n\n/* MARKETING CONTENT\n-------------------------------------------------- */\n/* Center align the text within the three columns below the carousel */\n.marketing .col-lg-4 {\n  margin-bottom: 20px;\n  text-align: center; }\n\n.marketing h2 {\n  font-weight: normal; }\n\n.marketing .col-lg-4 p {\n  margin-right: 10px;\n  margin-left: 10px; }\n\n/* Featurettes\n------------------------- */\n.featurette-divider {\n  margin: 80px 0;\n  /* Space out the Bootstrap <hr> more */ }\n\n/* Thin out the marketing headings */\n.featurette-heading {\n  font-weight: 300;\n  line-height: 1;\n  letter-spacing: -1px; }\n\n\n/* Multi Languages / Translations\n-------------------------------------------------- */\n.language-selector {\n  float: right !important;\n  padding: 0 10px 0 0;\n}\n.side-body > .language-selector {\n  padding: 28px 15px 0 0;\n}\n.modal-body .language-selector {\n  float: right !important;\n  padding: 0;\n}\n\n/* RESPONSIVE CSS\n-------------------------------------------------- */\n@media (min-width: 768px) {\n  /* Navbar positioning foo */\n  .navbar-wrapper .container {\n    padding-right: 15px;\n    padding-left: 15px; }\n  .navbar-wrapper .navbar {\n    padding-right: 0;\n    padding-left: 0; }\n  /* The navbar becomes detached from the top, so we round the corners */\n  .navbar-wrapper .navbar {\n    border-radius: 4px; }\n  /* Bump up size of carousel content */\n  .carousel-caption p {\n    margin-bottom: 20px;\n    font-size: 21px;\n    line-height: 1.4; }\n  .featurette-heading {\n    font-size: 50px; } }\n\n@media (min-width: 992px) {\n  .featurette-heading {\n    margin-top: 100px;\n    margin-bottom: 20px; } }\n\n/* BOOTSTRAP EXTENDED */\na.text-action{color:#a3afb7}a.text-action,a.text-action:focus,a.text-action:hover{text-decoration:none}a.text-action:focus,a.text-action:hover{color:#ccd5db}a.text-action .icon+span{margin-left:3px}a.text-like{color:#a3afb7!important}a.text-like,a.text-like:focus,a.text-like:hover{text-decoration:none}a.text-like.active,a.text-like:focus,a.text-like:hover{color:#f96868!important}.text-action+.text-action{margin-left:6px}.img-bordered{padding:3px;border:1px solid #e4eaec}.img-bordered-primary{border-color:#62a8ea!important}.img-bordered-purple{border-color:#7c51d1!important}.img-bordered-red{border-color:#e9595b!important}.img-bordered-green{border-color:#7dd3ae!important}.img-bordered-orange{border-color:#ec9940!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{text-shadow:rgba(0,0,0,.15) 0 0 1px}.h1 .icon:first-child,.h2 .icon:first-child,.h3 .icon:first-child,.h4 .icon:first-child,.h5 .icon:first-child,.h6 .icon:first-child,h1 .icon:first-child,h2 .icon:first-child,h3 .icon:first-child,h4 .icon:first-child,h5 .icon:first-child,h6 .icon:first-child{margin-right:.5em}.mark,mark{color:#fff;border-radius:2px}.drop-cap{float:left;padding:5px;margin-right:5px;font-family:Georgia;font-size:60px;line-height:50px;color:#263238}.drop-cap-reversed{color:#fff;background-color:#263238}.list-icons{padding-left:10px;margin-left:0;list-style:none}.list-icons>li{margin-top:6px}.list-icons>li:first-child{margin-top:0}.list-icons>li i{float:left;width:1em;margin:0 6px 0 0}.text-primary{color:#62a8ea}a.text-primary:focus,a.text-primary:hover{color:#358fe4}.text-success{color:#46be8a}a.text-success:focus,a.text-success:hover{color:#369b6f}.text-info{color:#57c7d4}a.text-info:focus,a.text-info:hover{color:#33b6c5}.text-warning{color:#f2a654}a.text-warning:focus,a.text-warning:hover{color:#ee8d25}.text-danger{color:#f96868}a.text-danger:focus,a.text-danger:hover{color:#f73737}blockquote{font-size:20px;color:#526069;border-left-width:2px}blockquote .small,blockquote footer,blockquote small{font-size:14px}.blockquote-reverse{border-right-width:2px}.blockquote{padding:15px 20px;border-left-width:4px;border-radius:3px}.blockquote.blockquote-reverse{border-right-width:4px}.blockquote-success{background-color:rgba(70,190,138,.1);border-color:#46be8a}.blockquote-info{background-color:rgba(87,199,212,.1);border-color:#57c7d4}.blockquote-warning{background-color:rgba(242,166,84,.1);border-color:#f2a654}.blockquote-danger{background-color:rgba(249,104,104,.1);border-color:#f96868}code{border:1px solid #bcd8f1}pre code{border:none}.container{max-width:100%}@media (min-width:1600px){.container{width:1310px}}@media (min-width:1600px){.col-xlg-1,.col-xlg-10,.col-xlg-11,.col-xlg-12,.col-xlg-2,.col-xlg-3,.col-xlg-4,.col-xlg-5,.col-xlg-6,.col-xlg-7,.col-xlg-8,.col-xlg-9{float:left}.col-xlg-12{width:100%}.col-xlg-11{width:91.66666667%}.col-xlg-10{width:83.33333333%}.col-xlg-9{width:75%}.col-xlg-8{width:66.66666667%}.col-xlg-7{width:58.33333333%}.col-xlg-6{width:50%}.col-xlg-5{width:41.66666667%}.col-xlg-4{width:33.33333333%}.col-xlg-3{width:25%}.col-xlg-2{width:16.66666667%}.col-xlg-1{width:8.33333333%}.col-xlg-pull-12{right:100%}.col-xlg-pull-11{right:91.66666667%}.col-xlg-pull-10{right:83.33333333%}.col-xlg-pull-9{right:75%}.col-xlg-pull-8{right:66.66666667%}.col-xlg-pull-7{right:58.33333333%}.col-xlg-pull-6{right:50%}.col-xlg-pull-5{right:41.66666667%}.col-xlg-pull-4{right:33.33333333%}.col-xlg-pull-3{right:25%}.col-xlg-pull-2{right:16.66666667%}.col-xlg-pull-1{right:8.33333333%}.col-xlg-pull-0{right:auto}.col-xlg-push-12{left:100%}.col-xlg-push-11{left:91.66666667%}.col-xlg-push-10{left:83.33333333%}.col-xlg-push-9{left:75%}.col-xlg-push-8{left:66.66666667%}.col-xlg-push-7{left:58.33333333%}.col-xlg-push-6{left:50%}.col-xlg-push-5{left:41.66666667%}.col-xlg-push-4{left:33.33333333%}.col-xlg-push-3{left:25%}.col-xlg-push-2{left:16.66666667%}.col-xlg-push-1{left:8.33333333%}.col-xlg-push-0{left:auto}.col-xlg-offset-12{margin-left:100%}.col-xlg-offset-11{margin-left:91.66666667%}.col-xlg-offset-10{margin-left:83.33333333%}.col-xlg-offset-9{margin-left:75%}.col-xlg-offset-8{margin-left:66.66666667%}.col-xlg-offset-7{margin-left:58.33333333%}.col-xlg-offset-6{margin-left:50%}.col-xlg-offset-5{margin-left:41.66666667%}.col-xlg-offset-4{margin-left:33.33333333%}.col-xlg-offset-3{margin-left:25%}.col-xlg-offset-2{margin-left:16.66666667%}.col-xlg-offset-1{margin-left:8.33333333%}.col-xlg-offset-0{margin-left:0}}.col-xlg-1,.col-xlg-10,.col-xlg-11,.col-xlg-12,.col-xlg-2,.col-xlg-3,.col-xlg-4,.col-xlg-5,.col-xlg-6,.col-xlg-7,.col-xlg-8,.col-xlg-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.row.no-space{margin-right:0;margin-left:0}.row.no-space>[class*=col-]{padding-right:0;padding-left:0}.row-lg{margin-right:-25px;margin-left:-25px}.row-lg>.col-lg-1,.row-lg>.col-lg-10,.row-lg>.col-lg-11,.row-lg>.col-lg-12,.row-lg>.col-lg-2,.row-lg>.col-lg-3,.row-lg>.col-lg-4,.row-lg>.col-lg-5,.row-lg>.col-lg-6,.row-lg>.col-lg-7,.row-lg>.col-lg-8,.row-lg>.col-lg-9,.row-lg>.col-md-1,.row-lg>.col-md-10,.row-lg>.col-md-11,.row-lg>.col-md-12,.row-lg>.col-md-2,.row-lg>.col-md-3,.row-lg>.col-md-4,.row-lg>.col-md-5,.row-lg>.col-md-6,.row-lg>.col-md-7,.row-lg>.col-md-8,.row-lg>.col-md-9,.row-lg>.col-sm-1,.row-lg>.col-sm-10,.row-lg>.col-sm-11,.row-lg>.col-sm-12,.row-lg>.col-sm-2,.row-lg>.col-sm-3,.row-lg>.col-sm-4,.row-lg>.col-sm-5,.row-lg>.col-sm-6,.row-lg>.col-sm-7,.row-lg>.col-sm-8,.row-lg>.col-sm-9,.row-lg>.col-xlg-1,.row-lg>.col-xlg-10,.row-lg>.col-xlg-11,.row-lg>.col-xlg-12,.row-lg>.col-xlg-2,.row-lg>.col-xlg-3,.row-lg>.col-xlg-4,.row-lg>.col-xlg-5,.row-lg>.col-xlg-6,.row-lg>.col-xlg-7,.row-lg>.col-xlg-8,.row-lg>.col-xlg-9,.row-lg>.col-xs-1,.row-lg>.col-xs-10,.row-lg>.col-xs-11,.row-lg>.col-xs-12,.row-lg>.col-xs-2,.row-lg>.col-xs-3,.row-lg>.col-xs-4,.row-lg>.col-xs-5,.row-lg>.col-xs-6,.row-lg>.col-xs-7,.row-lg>.col-xs-8,.row-lg>.col-xs-9{padding-right:25px;padding-left:25px}.table{color:#76838f}.table>tfoot>tr>th,.table>thead>tr>th{font-weight:400;color:#526069}.table>thead>tr>th{border-bottom:1px solid #e4eaec}.table>tbody+tbody{border-top:1px solid #e4eaec}.table a{text-decoration:underline}.table td>.checkbox-custom:only-child,.table th>.checkbox-custom:only-child{margin-top:0;margin-bottom:0;text-align:center}.table .danger,.table .info,.table .success,.table .warning{color:#fff}.table .danger a,.table .info a,.table .success a,.table .warning a{color:#fff}.table .cell-30{width:30px}.table .cell-40{width:40px}.table .cell-50{width:50px}.table .cell-60{width:60px}.table .cell-80{width:80px}.table .cell-100{width:100px}.table .cell-120{width:120px}.table .cell-130{width:130px}.table .cell-150{width:150px}.table .cell-180{width:180px}.table .cell-200{width:200px}.table .cell-250{width:250px}.table .cell-300{width:300px}.table-danger thead tr,.table-dark thead tr,.table-info thead tr,.table-primary thead tr,.table-success thead tr,.table-warning thead tr{color:#fff}.table-default thead tr{background:#f3f7f9}.table-primary thead tr{background:#62a8ea}.table-success thead tr{background:#46be8a}.table-info thead tr{background:#57c7d4}.table-warning thead tr{background:#f2a654}.table-danger thead tr{background:#f96868}.table-dark thead tr{background:#526069}.table-gray thead tr{color:#526069;background:#ccd5db}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:1px}.table-bordered>thead:first-child>tr:first-child>th{border:1px solid #e4eaec}.table-section+tbody{display:none}.table-section-arrow{position:relative;display:inline-block;font-family:'Web Icons';font-style:normal;font-weight:400;text-align:center;-webkit-transition:-webkit-transform .15s;-o-transition:-o-transform .15s;transition:transform .15s;-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0);text-rendering:auto;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table-section-arrow:before{content:'\\f181'}.table-section.active tr{background-color:#f3f7f9}.table-section.active+tbody{display:table-row-group}.table-section.active .table-section-arrow{-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}.form-control{-webkit-box-shadow:none;box-shadow:none;-webkit-transition:-webkit-box-shadow .25s linear,border .25s linear,color .25s linear,background-color .25s linear;-o-transition:box-shadow .25s linear,border .25s linear,color .25s linear,background-color .25s linear;transition:box-shadow .25s linear,border .25s linear,color .25s linear,background-color .25s linear}.form-control:not(select){-webkit-appearance:none}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#46be8a}.has-success .form-control{border-color:#46be8a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#369b6f;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #91d9ba;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #91d9ba}.has-success .input-group-addon{color:#46be8a;background-color:#fff;border-color:#46be8a}.has-success .form-control-feedback{color:#46be8a}.has-success .form-control{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.has-success .form-control:focus{border-color:#46be8a;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(70,190,138,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(70,190,138,.6)}.has-success .form-control.focus,.has-success .form-control:focus{border-color:#46be8a;-webkit-box-shadow:none;box-shadow:none}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#f2a654}.has-warning .form-control{border-color:#f2a654;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#ee8d25;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #f9d7b3;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #f9d7b3}.has-warning .input-group-addon{color:#f2a654;background-color:#fff;border-color:#f2a654}.has-warning .form-control-feedback{color:#f2a654}.has-warning .form-control{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.has-warning .form-control:focus{border-color:#f2a654;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(242,166,84,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(242,166,84,.6)}.has-warning .form-control.focus,.has-warning .form-control:focus{border-color:#f2a654;-webkit-box-shadow:none;box-shadow:none}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#f96868}.has-error .form-control{border-color:#f96868;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#f73737;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fdcaca;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #fdcaca}.has-error .input-group-addon{color:#f96868;background-color:#fff;border-color:#f96868}.has-error .form-control-feedback{color:#f96868}.has-error .form-control{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.has-error .form-control:focus{border-color:#f96868;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(249,104,104,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(249,104,104,.6)}.has-error .form-control.focus,.has-error .form-control:focus{border-color:#f96868;-webkit-box-shadow:none;box-shadow:none}.form-group.has-feedback.no-label .form-control-feedback{top:0}.form-group.has-feedback.left-feedback .form-control-feedback{right:auto;left:0}.form-group.has-feedback.left-feedback .form-control{padding-right:13px;padding-left:50px}.form-control.square{border-radius:0}.form-control.round{border-radius:200px}textarea.form-control.no-resize{resize:none}.input-group-file input[type=text]{background-color:#fff}.input-group-file .btn-file{position:relative;overflow:hidden}.input-group-file .btn-file.btn-outline{border:1px solid #e4eaec;border-left:none}.input-group-file .btn-file.btn-outline:hover{border-left:none}.input-group-file .btn-file>.icon{margin:0 3px}.input-group-file .btn-file input[type=file]{position:absolute;top:0;left:0;display:block;min-width:100%;min-height:100%;text-align:0;cursor:pointer;opacity:0}.help-block{margin-top:7px;margin-bottom:8px}.help-block>.icon{margin:0 5px}.input-search-close{color:#000;text-shadow:none;filter:alpha(opacity=20);opacity:.2}.input-search-close.icon{font-size:inherit;line-height:inherit}.input-search-close:focus,.input-search-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.input-search-close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.input-search{position:relative}.input-search .form-control{border-radius:200px}.input-search .input-search-close,.input-search .input-search-icon{position:absolute;top:50%;z-index:1;width:36px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.input-search .input-search-close{right:8px}.input-search .input-search-icon+.form-control{padding-left:43.5px}.input-search .input-search-icon{left:8px;font-size:16px;color:#a3afb7;text-align:center;pointer-events:none}.input-search-btn+.form-control{padding-right:50px}.input-search-btn{position:absolute;top:0;right:0;height:100%;padding:0 10px;background:0 0;border:none;border-radius:0 200px 200px 0}.input-search-btn>.icon{margin:0 3px}.input-search-dark .input-search-icon{color:#76838f}.input-search-dark .form-control{background:#f3f7f9;-webkit-box-shadow:none;box-shadow:none}.input-search-dark .form-control:focus{background-color:transparent}.form-inline .form-group{margin-right:20px}.form-inline .form-group:last-child{margin-right:0}.form-inline .control-label{margin-right:5px}@media (max-width:767px){.form-inline .form-group{margin-right:0}}.btn{padding:6px 15px;font-size:14px;line-height:1.57142857;border-radius:3px;-webkit-transition:border .2s linear,color .2s linear,width .2s linear,background-color .2s linear;-o-transition:border .2s linear,color .2s linear,width .2s linear,background-color .2s linear;transition:border .2s linear,color .2s linear,width .2s linear,background-color .2s linear;-webkit-font-smoothing:subpixel-antialiased}.btn.active:focus,.btn:active:focus,.btn:focus{outline:0}.btn.active,.btn:active{-webkit-box-shadow:none;box-shadow:none}.btn .icon{width:1em;margin:-1px 3px 0;line-height:inherit;text-align:center}.btn-block{white-space:normal}.btn-outline.btn-default{color:#76838f;background-color:transparent}.btn-outline.btn-default.active,.btn-outline.btn-default:active,.btn-outline.btn-default:focus,.btn-outline.btn-default:hover,.open>.dropdown-toggle.btn-outline.btn-default{color:#76838f;background-color:rgba(118,131,143,.1);border-color:#e4eaec}.btn-outline.btn-default.active .badge,.btn-outline.btn-default:active .badge,.btn-outline.btn-default:focus .badge,.btn-outline.btn-default:hover .badge,.open>.dropdown-toggle.btn-outline.btn-default .badge{color:#76838f;background-color:#76838f}.btn-outline.btn-primary{color:#62a8ea;background-color:transparent}.btn-outline.btn-primary.active,.btn-outline.btn-primary:active,.btn-outline.btn-primary:focus,.btn-outline.btn-primary:hover,.open>.dropdown-toggle.btn-outline.btn-primary{color:#fff;background-color:#62a8ea;border-color:#62a8ea}.btn-outline.btn-primary.active .badge,.btn-outline.btn-primary:active .badge,.btn-outline.btn-primary:focus .badge,.btn-outline.btn-primary:hover .badge,.open>.dropdown-toggle.btn-outline.btn-primary .badge{color:#62a8ea;background-color:#fff}.btn-outline.btn-success{color:#46be8a;background-color:transparent}.btn-outline.btn-success.active,.btn-outline.btn-success:active,.btn-outline.btn-success:focus,.btn-outline.btn-success:hover,.open>.dropdown-toggle.btn-outline.btn-success{color:#fff;background-color:#46be8a;border-color:#46be8a}.btn-outline.btn-success.active .badge,.btn-outline.btn-success:active .badge,.btn-outline.btn-success:focus .badge,.btn-outline.btn-success:hover .badge,.open>.dropdown-toggle.btn-outline.btn-success .badge{color:#46be8a;background-color:#fff}.btn-outline.btn-info{color:#57c7d4;background-color:transparent}.btn-outline.btn-info.active,.btn-outline.btn-info:active,.btn-outline.btn-info:focus,.btn-outline.btn-info:hover,.open>.dropdown-toggle.btn-outline.btn-info{color:#fff;background-color:#57c7d4;border-color:#57c7d4}.btn-outline.btn-info.active .badge,.btn-outline.btn-info:active .badge,.btn-outline.btn-info:focus .badge,.btn-outline.btn-info:hover .badge,.open>.dropdown-toggle.btn-outline.btn-info .badge{color:#57c7d4;background-color:#fff}.btn-outline.btn-warning{color:#f2a654;background-color:transparent}.btn-outline.btn-warning.active,.btn-outline.btn-warning:active,.btn-outline.btn-warning:focus,.btn-outline.btn-warning:hover,.open>.dropdown-toggle.btn-outline.btn-warning{color:#fff;background-color:#f2a654;border-color:#f2a654}.btn-outline.btn-warning.active .badge,.btn-outline.btn-warning:active .badge,.btn-outline.btn-warning:focus .badge,.btn-outline.btn-warning:hover .badge,.open>.dropdown-toggle.btn-outline.btn-warning .badge{color:#f2a654;background-color:#fff}.btn-outline.btn-danger{color:#f96868;background-color:transparent}.btn-outline.btn-danger.active,.btn-outline.btn-danger:active,.btn-outline.btn-danger:focus,.btn-outline.btn-danger:hover,.open>.dropdown-toggle.btn-outline.btn-danger{color:#fff;background-color:#f96868;border-color:#f96868}.btn-outline.btn-danger.active .badge,.btn-outline.btn-danger:active .badge,.btn-outline.btn-danger:focus .badge,.btn-outline.btn-danger:hover .badge,.open>.dropdown-toggle.btn-outline.btn-danger .badge{color:#f96868;background-color:#fff}.btn-outline.btn-dark{color:#526069;background-color:transparent}.btn-outline.btn-dark.active,.btn-outline.btn-dark:active,.btn-outline.btn-dark:focus,.btn-outline.btn-dark:hover,.open>.dropdown-toggle.btn-outline.btn-dark{color:#fff;background-color:#526069;border-color:#526069}.btn-outline.btn-dark.active .badge,.btn-outline.btn-dark:active .badge,.btn-outline.btn-dark:focus .badge,.btn-outline.btn-dark:hover .badge,.open>.dropdown-toggle.btn-outline.btn-dark .badge{color:#526069;background-color:#fff}.btn-outline.btn-inverse{color:#fff;background-color:transparent}.btn-outline.btn-inverse.active,.btn-outline.btn-inverse:active,.btn-outline.btn-inverse:focus,.btn-outline.btn-inverse:hover,.open>.dropdown-toggle.btn-outline.btn-inverse{color:#76838f;background-color:#fff;border-color:#fff}.btn-outline.btn-inverse.active .badge,.btn-outline.btn-inverse:active .badge,.btn-outline.btn-inverse:focus .badge,.btn-outline.btn-inverse:hover .badge,.open>.dropdown-toggle.btn-outline.btn-inverse .badge{color:#fff;background-color:#76838f}.btn-lg{padding:10px 18px;font-size:18px;line-height:1.3333333;border-radius:4px}.btn-sm{padding:6px 13px;font-size:12px;line-height:1.5;border-radius:2px}.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:2px}.btn-squared{border-radius:0}.btn-round{border-radius:1000px}.btn-default.focus,.btn-default:focus,.btn-default:hover{background-color:#f3f7f9;border-color:#f3f7f9}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-color:#ccd5db;border-color:#ccd5db}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{background-color:#ccd5db;border-color:#ccd5db}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{color:#76838f;background-color:#f3f7f9;border-color:#f3f7f9}.btn-default.btn-up:before{border-bottom-color:#e4eaec}.btn-default.btn-up:focus:before,.btn-default.btn-up:hover:before{border-bottom-color:#f3f7f9}.btn-default.btn-up.active:before,.btn-default.btn-up:active:before,.open>.dropdown-toggle.btn-default.btn-up:before{border-bottom-color:#ccd5db}.btn-default.btn-right:before{border-left-color:#e4eaec}.btn-default.btn-right:focus:before,.btn-default.btn-right:hover:before{border-left-color:#f3f7f9}.btn-default.btn-right.active:before,.btn-default.btn-right:active:before,.open>.dropdown-toggle.btn-default.btn-right:before{border-left-color:#ccd5db}.btn-default.btn-bottom:before{border-top-color:#e4eaec}.btn-default.btn-bottom:focus:before,.btn-default.btn-bottom:hover:before{border-top-color:#f3f7f9}.btn-default.btn-bottom.active:before,.btn-default.btn-bottom:active:before,.open>.dropdown-toggle.btn-default.btn-bottom:before{border-top-color:#ccd5db}.btn-default.btn-left:before{border-right-color:#e4eaec}.btn-default.btn-left:focus:before,.btn-default.btn-left:hover:before{border-right-color:#f3f7f9}.btn-default.btn-left.active:before,.btn-default.btn-left:active:before,.open>.dropdown-toggle.btn-default.btn-left:before{border-right-color:#ccd5db}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{background-color:#89bceb;border-color:#89bceb}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-color:#4e97d9;border-color:#4e97d9}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{background-color:#4e97d9;border-color:#4e97d9}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:#fff;background-color:#a2caee;border-color:#a2caee}.btn-primary.btn-up:before{border-bottom-color:#62a8ea}.btn-primary.btn-up:focus:before,.btn-primary.btn-up:hover:before{border-bottom-color:#89bceb}.btn-primary.btn-up.active:before,.btn-primary.btn-up:active:before,.open>.dropdown-toggle.btn-primary.btn-up:before{border-bottom-color:#4e97d9}.btn-primary.btn-right:before{border-left-color:#62a8ea}.btn-primary.btn-right:focus:before,.btn-primary.btn-right:hover:before{border-left-color:#89bceb}.btn-primary.btn-right.active:before,.btn-primary.btn-right:active:before,.open>.dropdown-toggle.btn-primary.btn-right:before{border-left-color:#4e97d9}.btn-primary.btn-bottom:before{border-top-color:#62a8ea}.btn-primary.btn-bottom:focus:before,.btn-primary.btn-bottom:hover:before{border-top-color:#89bceb}.btn-primary.btn-bottom.active:before,.btn-primary.btn-bottom:active:before,.open>.dropdown-toggle.btn-primary.btn-bottom:before{border-top-color:#4e97d9}.btn-primary.btn-left:before{border-right-color:#62a8ea}.btn-primary.btn-left:focus:before,.btn-primary.btn-left:hover:before{border-right-color:#89bceb}.btn-primary.btn-left.active:before,.btn-primary.btn-left:active:before,.open>.dropdown-toggle.btn-primary.btn-left:before{border-right-color:#4e97d9}.btn-success.focus,.btn-success:focus,.btn-success:hover{background-color:#5cd29d;border-color:#5cd29d}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-color:#36ab7a;border-color:#36ab7a}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{background-color:#36ab7a;border-color:#36ab7a}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:#fff;background-color:#7dd3ae;border-color:#7dd3ae}.btn-success.btn-up:before{border-bottom-color:#46be8a}.btn-success.btn-up:focus:before,.btn-success.btn-up:hover:before{border-bottom-color:#5cd29d}.btn-success.btn-up.active:before,.btn-success.btn-up:active:before,.open>.dropdown-toggle.btn-success.btn-up:before{border-bottom-color:#36ab7a}.btn-success.btn-right:before{border-left-color:#46be8a}.btn-success.btn-right:focus:before,.btn-success.btn-right:hover:before{border-left-color:#5cd29d}.btn-success.btn-right.active:before,.btn-success.btn-right:active:before,.open>.dropdown-toggle.btn-success.btn-right:before{border-left-color:#36ab7a}.btn-success.btn-bottom:before{border-top-color:#46be8a}.btn-success.btn-bottom:focus:before,.btn-success.btn-bottom:hover:before{border-top-color:#5cd29d}.btn-success.btn-bottom.active:before,.btn-success.btn-bottom:active:before,.open>.dropdown-toggle.btn-success.btn-bottom:before{border-top-color:#36ab7a}.btn-success.btn-left:before{border-right-color:#46be8a}.btn-success.btn-left:focus:before,.btn-success.btn-left:hover:before{border-right-color:#5cd29d}.btn-success.btn-left.active:before,.btn-success.btn-left:active:before,.open>.dropdown-toggle.btn-success.btn-left:before{border-right-color:#36ab7a}.btn-info.focus,.btn-info:focus,.btn-info:hover{background-color:#77d6e1;border-color:#77d6e1}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-color:#47b8c6;border-color:#47b8c6}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{background-color:#47b8c6;border-color:#47b8c6}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:#fff;background-color:#9ae1e9;border-color:#9ae1e9}.btn-info.btn-up:before{border-bottom-color:#57c7d4}.btn-info.btn-up:focus:before,.btn-info.btn-up:hover:before{border-bottom-color:#77d6e1}.btn-info.btn-up.active:before,.btn-info.btn-up:active:before,.open>.dropdown-toggle.btn-info.btn-up:before{border-bottom-color:#47b8c6}.btn-info.btn-right:before{border-left-color:#57c7d4}.btn-info.btn-right:focus:before,.btn-info.btn-right:hover:before{border-left-color:#77d6e1}.btn-info.btn-right.active:before,.btn-info.btn-right:active:before,.open>.dropdown-toggle.btn-info.btn-right:before{border-left-color:#47b8c6}.btn-info.btn-bottom:before{border-top-color:#57c7d4}.btn-info.btn-bottom:focus:before,.btn-info.btn-bottom:hover:before{border-top-color:#77d6e1}.btn-info.btn-bottom.active:before,.btn-info.btn-bottom:active:before,.open>.dropdown-toggle.btn-info.btn-bottom:before{border-top-color:#47b8c6}.btn-info.btn-left:before{border-right-color:#57c7d4}.btn-info.btn-left:focus:before,.btn-info.btn-left:hover:before{border-right-color:#77d6e1}.btn-info.btn-left.active:before,.btn-info.btn-left:active:before,.open>.dropdown-toggle.btn-info.btn-left:before{border-right-color:#47b8c6}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{background-color:#f4b066;border-color:#f4b066}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-color:#ec9940;border-color:#ec9940}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{background-color:#ec9940;border-color:#ec9940}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:#fff;background-color:#f6be80;border-color:#f6be80}.btn-warning.btn-up:before{border-bottom-color:#f2a654}.btn-warning.btn-up:focus:before,.btn-warning.btn-up:hover:before{border-bottom-color:#f4b066}.btn-warning.btn-up.active:before,.btn-warning.btn-up:active:before,.open>.dropdown-toggle.btn-warning.btn-up:before{border-bottom-color:#ec9940}.btn-warning.btn-right:before{border-left-color:#f2a654}.btn-warning.btn-right:focus:before,.btn-warning.btn-right:hover:before{border-left-color:#f4b066}.btn-warning.btn-right.active:before,.btn-warning.btn-right:active:before,.open>.dropdown-toggle.btn-warning.btn-right:before{border-left-color:#ec9940}.btn-warning.btn-bottom:before{border-top-color:#f2a654}.btn-warning.btn-bottom:focus:before,.btn-warning.btn-bottom:hover:before{border-top-color:#f4b066}.btn-warning.btn-bottom.active:before,.btn-warning.btn-bottom:active:before,.open>.dropdown-toggle.btn-warning.btn-bottom:before{border-top-color:#ec9940}.btn-warning.btn-left:before{border-right-color:#f2a654}.btn-warning.btn-left:focus:before,.btn-warning.btn-left:hover:before{border-right-color:#f4b066}.btn-warning.btn-left.active:before,.btn-warning.btn-left:active:before,.open>.dropdown-toggle.btn-warning.btn-left:before{border-right-color:#ec9940}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{background-color:#fa7a7a;border-color:#fa7a7a}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-color:#e9595b;border-color:#e9595b}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{background-color:#e9595b;border-color:#e9595b}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:#fff;background-color:#fa9898;border-color:#fa9898}.btn-danger.btn-up:before{border-bottom-color:#f96868}.btn-danger.btn-up:focus:before,.btn-danger.btn-up:hover:before{border-bottom-color:#fa7a7a}.btn-danger.btn-up.active:before,.btn-danger.btn-up:active:before,.open>.dropdown-toggle.btn-danger.btn-up:before{border-bottom-color:#e9595b}.btn-danger.btn-right:before{border-left-color:#f96868}.btn-danger.btn-right:focus:before,.btn-danger.btn-right:hover:before{border-left-color:#fa7a7a}.btn-danger.btn-right.active:before,.btn-danger.btn-right:active:before,.open>.dropdown-toggle.btn-danger.btn-right:before{border-left-color:#e9595b}.btn-danger.btn-bottom:before{border-top-color:#f96868}.btn-danger.btn-bottom:focus:before,.btn-danger.btn-bottom:hover:before{border-top-color:#fa7a7a}.btn-danger.btn-bottom.active:before,.btn-danger.btn-bottom:active:before,.open>.dropdown-toggle.btn-danger.btn-bottom:before{border-top-color:#e9595b}.btn-danger.btn-left:before{border-right-color:#f96868}.btn-danger.btn-left:focus:before,.btn-danger.btn-left:hover:before{border-right-color:#fa7a7a}.btn-danger.btn-left.active:before,.btn-danger.btn-left:active:before,.open>.dropdown-toggle.btn-danger.btn-left:before{border-right-color:#e9595b}.btn-inverse{color:#76838f;background-color:#fff;border-color:#e4eaec}.btn-inverse.focus,.btn-inverse:focus{color:#76838f;background-color:#e6e6e6;border-color:#99b0b7}.btn-inverse:hover{color:#76838f;background-color:#e6e6e6;border-color:#c0ced3}.btn-inverse.active,.btn-inverse:active,.open>.dropdown-toggle.btn-inverse{color:#76838f;background-color:#e6e6e6;border-color:#c0ced3}.btn-inverse.active.focus,.btn-inverse.active:focus,.btn-inverse.active:hover,.btn-inverse:active.focus,.btn-inverse:active:focus,.btn-inverse:active:hover,.open>.dropdown-toggle.btn-inverse.focus,.open>.dropdown-toggle.btn-inverse:focus,.open>.dropdown-toggle.btn-inverse:hover{color:#76838f;background-color:#d4d4d4;border-color:#99b0b7}.btn-inverse.active,.btn-inverse:active,.open>.dropdown-toggle.btn-inverse{background-image:none}.btn-inverse.disabled.focus,.btn-inverse.disabled:focus,.btn-inverse.disabled:hover,.btn-inverse[disabled].focus,.btn-inverse[disabled]:focus,.btn-inverse[disabled]:hover,fieldset[disabled] .btn-inverse.focus,fieldset[disabled] .btn-inverse:focus,fieldset[disabled] .btn-inverse:hover{background-color:#fff;border-color:#e4eaec}.btn-inverse .badge{color:#fff;background-color:#76838f}.btn-inverse.focus,.btn-inverse:focus,.btn-inverse:hover{background-color:#fff;border-color:#f3f7f9}.btn-inverse.active,.btn-inverse:active,.open>.dropdown-toggle.btn-inverse{background-color:#fff;border-color:#ccd5db}.btn-inverse.active.focus,.btn-inverse.active:focus,.btn-inverse.active:hover,.btn-inverse:active.focus,.btn-inverse:active:focus,.btn-inverse:active:hover,.open>.dropdown-toggle.btn-inverse.focus,.open>.dropdown-toggle.btn-inverse:focus,.open>.dropdown-toggle.btn-inverse:hover{background-color:#fff;border-color:#ccd5db}.btn-inverse.disabled,.btn-inverse.disabled.active,.btn-inverse.disabled.focus,.btn-inverse.disabled:active,.btn-inverse.disabled:focus,.btn-inverse.disabled:hover,.btn-inverse[disabled],.btn-inverse[disabled].active,.btn-inverse[disabled].focus,.btn-inverse[disabled]:active,.btn-inverse[disabled]:focus,.btn-inverse[disabled]:hover,fieldset[disabled] .btn-inverse,fieldset[disabled] .btn-inverse.active,fieldset[disabled] .btn-inverse.focus,fieldset[disabled] .btn-inverse:active,fieldset[disabled] .btn-inverse:focus,fieldset[disabled] .btn-inverse:hover{color:#ccd5db;background-color:#fff;border-color:#a3afb7}.btn-inverse.btn-up:before{border-bottom-color:#fff}.btn-inverse.btn-up:focus:before,.btn-inverse.btn-up:hover:before{border-bottom-color:#fff}.btn-inverse.btn-up.active:before,.btn-inverse.btn-up:active:before,.open>.dropdown-toggle.btn-inverse.btn-up:before{border-bottom-color:#fff}.btn-inverse.btn-right:before{border-left-color:#fff}.btn-inverse.btn-right:focus:before,.btn-inverse.btn-right:hover:before{border-left-color:#fff}.btn-inverse.btn-right.active:before,.btn-inverse.btn-right:active:before,.open>.dropdown-toggle.btn-inverse.btn-right:before{border-left-color:#fff}.btn-inverse.btn-bottom:before{border-top-color:#fff}.btn-inverse.btn-bottom:focus:before,.btn-inverse.btn-bottom:hover:before{border-top-color:#fff}.btn-inverse.btn-bottom.active:before,.btn-inverse.btn-bottom:active:before,.open>.dropdown-toggle.btn-inverse.btn-bottom:before{border-top-color:#fff}.btn-inverse.btn-left:before{border-right-color:#fff}.btn-inverse.btn-left:focus:before,.btn-inverse.btn-left:hover:before{border-right-color:#fff}.btn-inverse.btn-left.active:before,.btn-inverse.btn-left:active:before,.open>.dropdown-toggle.btn-inverse.btn-left:before{border-right-color:#fff}.btn-dark{color:#fff;background-color:#526069;border-color:#526069}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#3c464c;border-color:#1a1f21}.btn-dark:hover{color:#fff;background-color:#3c464c;border-color:#374147}.btn-dark.active,.btn-dark:active,.open>.dropdown-toggle.btn-dark{color:#fff;background-color:#3c464c;border-color:#374147}.btn-dark.active.focus,.btn-dark.active:focus,.btn-dark.active:hover,.btn-dark:active.focus,.btn-dark:active:focus,.btn-dark:active:hover,.open>.dropdown-toggle.btn-dark.focus,.open>.dropdown-toggle.btn-dark:focus,.open>.dropdown-toggle.btn-dark:hover{color:#fff;background-color:#2c3338;border-color:#1a1f21}.btn-dark.active,.btn-dark:active,.open>.dropdown-toggle.btn-dark{background-image:none}.btn-dark.disabled.focus,.btn-dark.disabled:focus,.btn-dark.disabled:hover,.btn-dark[disabled].focus,.btn-dark[disabled]:focus,.btn-dark[disabled]:hover,fieldset[disabled] .btn-dark.focus,fieldset[disabled] .btn-dark:focus,fieldset[disabled] .btn-dark:hover{background-color:#526069;border-color:#526069}.btn-dark .badge{color:#526069;background-color:#fff}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{background-color:#76838f;border-color:#76838f}.btn-dark.active,.btn-dark:active,.open>.dropdown-toggle.btn-dark{background-color:#37474f;border-color:#37474f}.btn-dark.active.focus,.btn-dark.active:focus,.btn-dark.active:hover,.btn-dark:active.focus,.btn-dark:active:focus,.btn-dark:active:hover,.open>.dropdown-toggle.btn-dark.focus,.open>.dropdown-toggle.btn-dark:focus,.open>.dropdown-toggle.btn-dark:hover{background-color:#37474f;border-color:#37474f}.btn-dark.disabled,.btn-dark.disabled.active,.btn-dark.disabled.focus,.btn-dark.disabled:active,.btn-dark.disabled:focus,.btn-dark.disabled:hover,.btn-dark[disabled],.btn-dark[disabled].active,.btn-dark[disabled].focus,.btn-dark[disabled]:active,.btn-dark[disabled]:focus,.btn-dark[disabled]:hover,fieldset[disabled] .btn-dark,fieldset[disabled] .btn-dark.active,fieldset[disabled] .btn-dark.focus,fieldset[disabled] .btn-dark:active,fieldset[disabled] .btn-dark:focus,fieldset[disabled] .btn-dark:hover{color:#fff;background-color:#a3afb7;border-color:#a3afb7}.btn-dark.btn-up:before{border-bottom-color:#526069}.btn-dark.btn-up:focus:before,.btn-dark.btn-up:hover:before{border-bottom-color:#76838f}.btn-dark.btn-up.active:before,.btn-dark.btn-up:active:before,.open>.dropdown-toggle.btn-dark.btn-up:before{border-bottom-color:#37474f}.btn-dark.btn-right:before{border-left-color:#526069}.btn-dark.btn-right:focus:before,.btn-dark.btn-right:hover:before{border-left-color:#76838f}.btn-dark.btn-right.active:before,.btn-dark.btn-right:active:before,.open>.dropdown-toggle.btn-dark.btn-right:before{border-left-color:#37474f}.btn-dark.btn-bottom:before{border-top-color:#526069}.btn-dark.btn-bottom:focus:before,.btn-dark.btn-bottom:hover:before{border-top-color:#76838f}.btn-dark.btn-bottom.active:before,.btn-dark.btn-bottom:active:before,.open>.dropdown-toggle.btn-dark.btn-bottom:before{border-top-color:#37474f}.btn-dark.btn-left:before{border-right-color:#526069}.btn-dark.btn-left:focus:before,.btn-dark.btn-left:hover:before{border-right-color:#76838f}.btn-dark.btn-left.active:before,.btn-dark.btn-left:active:before,.open>.dropdown-toggle.btn-dark.btn-left:before{border-right-color:#37474f}.btn-dark:focus,.btn-dark:hover{color:#fff}.btn-dark.active,.btn-dark:active,.open>.dropdown-toggle.btn-dark{color:#fff}.btn-dark.btn-flat{color:#526069}.btn-flat{background:0 0;border:none;-webkit-box-shadow:none;box-shadow:none}.btn-flat.disabled{color:#a3afb7}.btn-icon,.btn.icon{padding:10px;line-height:1em}.btn-icon.btn-xs,.btn.icon.btn-xs{padding:4px;font-size:12px}.btn-icon.btn-sm,.btn.icon.btn-sm{padding:8px;font-size:14px}.btn-icon.btn-lg,.btn.icon.btn-lg{padding:12px;font-size:20px}.btn-icon.disabled,.btn.icon.disabled{color:#a3afb7}.btn-icon .icon{margin:-1px 0 0}.btn-raised{-webkit-box-shadow:0 0 2px rgba(0,0,0,.18),0 2px 4px rgba(0,0,0,.21);box-shadow:0 0 2px rgba(0,0,0,.18),0 2px 4px rgba(0,0,0,.21);-webkit-transition:-webkit-box-shadow .25s cubic-bezier(.4,0,.2,1);-o-transition:box-shadow .25s cubic-bezier(.4,0,.2,1);transition:box-shadow .25s cubic-bezier(.4,0,.2,1)}.btn-raised.active,.btn-raised:active,.btn-raised:hover,.open>.dropdown-toggle.btn-raised{-webkit-box-shadow:0 0 3px rgba(0,0,0,.15),0 3px 6px rgba(0,0,0,.2);box-shadow:0 0 3px rgba(0,0,0,.15),0 3px 6px rgba(0,0,0,.2)}.btn-raised.disabled,.btn-raised[disabled],fieldset[disabled] .btn-raised{-webkit-box-shadow:none;box-shadow:none}.btn-floating{width:56px;height:56px;padding:0;margin:0;font-size:24px;text-align:center;border-radius:100%;-webkit-box-shadow:0 6px 10px rgba(0,0,0,.15);box-shadow:0 6px 10px rgba(0,0,0,.15)}.btn-floating.btn-xs{width:30px;height:30px;padding:0;font-size:13px}.btn-floating.btn-sm{width:40px;height:40px;padding:0;font-size:15px}.btn-floating.btn-lg{width:70px;height:70px;padding:0;font-size:30px}.btn-floating i{position:relative;top:0}.btn-animate{position:relative;overflow:hidden}.btn-animate span{display:block;width:100%;height:100%;-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.btn-animate-side{padding:8px 28px}.btn-animate-side span{-webkit-transition:-webkit-transform .2s ease-out 0s;-o-transition:-o-transform .2s ease-out 0s;transition:transform .2s ease-out 0s}.btn-animate-side span>.icon{position:absolute;top:50%;left:0;display:block;opacity:0;-webkit-transition:opacity .2s ease-out 0s;-o-transition:opacity .2s ease-out 0s;transition:opacity .2s ease-out 0s;-webkit-transform:translate(-20px,-50%);-ms-transform:translate(-20px,-50%);-o-transform:translate(-20px,-50%);transform:translate(-20px,-50%)}.btn-animate-side:hover span{-webkit-transform:translate(10px,0);-ms-transform:translate(10px,0);-o-transform:translate(10px,0);transform:translate(10px,0)}.btn-animate-side:hover span>.icon{opacity:1}.btn-animate-side.btn-xs{padding:3px 14px}.btn-animate-side.btn-xs span>.icon{left:5px}.btn-animate-side.btn-xs:hover span{-webkit-transform:translate(8px,0);-ms-transform:translate(8px,0);-o-transform:translate(8px,0);transform:translate(8px,0)}.btn-animate-side.btn-sm{padding:6px 22px}.btn-animate-side.btn-sm span>.icon{left:3px}.btn-animate-side.btn-sm:hover span{-webkit-transform:translate(8px,0);-ms-transform:translate(8px,0);-o-transform:translate(8px,0);transform:translate(8px,0)}.btn-animate-side.btn-lg{padding:10px 33px}.btn-animate-side.btn-lg span>.icon{left:-6px}.btn-animate-side.btn-lg:hover span{-webkit-transform:translate(14px,0);-ms-transform:translate(14px,0);-o-transform:translate(14px,0);transform:translate(14px,0)}.btn-animate-vertical span{-webkit-transition:all .2s ease-out 0s;-o-transition:all .2s ease-out 0s;transition:all .2s ease-out 0s}.btn-animate-vertical span>.icon{position:absolute;top:-2px;left:50%;display:block;font-size:24px;-webkit-transform:translate(-50%,-100%);-ms-transform:translate(-50%,-100%);-o-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.btn-animate-vertical:hover span{-webkit-transform:translate(0,150%);-ms-transform:translate(0,150%);-o-transform:translate(0,150%);transform:translate(0,150%)}.btn-animate-vertical.btn-xs span>.icon{top:-5px;font-size:18px}.btn-animate-vertical.btn-sm span>.icon{top:-3px;font-size:21px}.btn-animate-vertical.btn-lg span>.icon{font-size:37px}.btn-labeled{padding:0;padding-right:8px}.btn-labeled .btn-label{padding:6px 8px;margin-right:5px}.btn-labeled.btn-xs{padding-right:5px}.btn-labeled.btn-xs .btn-label{padding:1px 4px;margin-right:2px}.btn-labeled.btn-sm{padding-right:13px}.btn-labeled.btn-sm .btn-label{padding:6px 6px;margin-right:10px}.btn-labeled.btn-lg{padding-right:14px}.btn-labeled.btn-lg .btn-label{padding:10px 14px;margin-right:11px}.btn-labeled.btn-block{text-align:left}.btn-label{display:inline-block;background-color:rgba(0,0,0,.15);border-radius:3px 0 0 3px}.btn-pill-left{border-radius:500px 0 0 500px}.btn-pill-right{border-radius:0 500px 500px 0}.btn-direction{position:relative}.btn-direction:before{position:absolute;line-height:0;content:'';border:8px solid transparent}.btn-up:before{top:-16px;left:50%;margin-left:-8px;border-bottom-color:#e4eaec}.btn-right:before{top:50%;right:-16px;margin-top:-8px;border-left-color:#e4eaec}.btn-bottom:before{bottom:-16px;left:50%;margin-left:-8px;border-top-color:#e4eaec}.btn-left:before{top:50%;left:-16px;margin-top:-8px;border-right-color:#e4eaec}.btn-pure,.btn-pure.active,.btn-pure:active,.btn-pure:focus,.btn-pure:hover,.btn-pure[disabled],.open>.dropdown-toggle.btn-pure,fieldset[disabled] .btn-pure{background-color:transparent;border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-pure.active.focus,.btn-pure.active:focus,.btn-pure.active:hover,.btn-pure.focus,.btn-pure:active.focus,.btn-pure:active:focus,.btn-pure:active:hover,.btn-pure:focus,.btn-pure:focus.focus,.btn-pure:focus:focus,.btn-pure:focus:hover,.btn-pure:hover,.btn-pure:hover.focus,.btn-pure:hover:focus,.btn-pure:hover:hover,.btn-pure[disabled].focus,.btn-pure[disabled]:focus,.btn-pure[disabled]:hover,.open>.dropdown-toggle.btn-pure.focus,.open>.dropdown-toggle.btn-pure:focus,.open>.dropdown-toggle.btn-pure:hover,fieldset[disabled] .btn-pure.focus,fieldset[disabled] .btn-pure:focus,fieldset[disabled] .btn-pure:hover{background-color:transparent;border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-pure.btn-default{color:#a3afb7}.btn-pure.btn-default.active,.btn-pure.btn-default:active,.btn-pure.btn-default:focus,.btn-pure.btn-default:hover,.open>.dropdown-toggle.btn-pure.btn-default{color:#526069}.btn-pure.btn-default.active.focus,.btn-pure.btn-default.active:focus,.btn-pure.btn-default.active:hover,.btn-pure.btn-default:active.focus,.btn-pure.btn-default:active:focus,.btn-pure.btn-default:active:hover,.btn-pure.btn-default:focus.focus,.btn-pure.btn-default:focus:focus,.btn-pure.btn-default:focus:hover,.btn-pure.btn-default:hover.focus,.btn-pure.btn-default:hover:focus,.btn-pure.btn-default:hover:hover,.open>.dropdown-toggle.btn-pure.btn-default.focus,.open>.dropdown-toggle.btn-pure.btn-default:focus,.open>.dropdown-toggle.btn-pure.btn-default:hover{color:#526069}.btn-pure.btn-default.active .badge,.btn-pure.btn-default:active .badge,.btn-pure.btn-default:focus .badge,.btn-pure.btn-default:hover .badge,.open>.dropdown-toggle.btn-pure.btn-default .badge{color:#526069}.btn-pure.btn-primary{color:#62a8ea}.btn-pure.btn-primary.active,.btn-pure.btn-primary:active,.btn-pure.btn-primary:focus,.btn-pure.btn-primary:hover,.open>.dropdown-toggle.btn-pure.btn-primary{color:#3583ca}.btn-pure.btn-primary.active.focus,.btn-pure.btn-primary.active:focus,.btn-pure.btn-primary.active:hover,.btn-pure.btn-primary:active.focus,.btn-pure.btn-primary:active:focus,.btn-pure.btn-primary:active:hover,.btn-pure.btn-primary:focus.focus,.btn-pure.btn-primary:focus:focus,.btn-pure.btn-primary:focus:hover,.btn-pure.btn-primary:hover.focus,.btn-pure.btn-primary:hover:focus,.btn-pure.btn-primary:hover:hover,.open>.dropdown-toggle.btn-pure.btn-primary.focus,.open>.dropdown-toggle.btn-pure.btn-primary:focus,.open>.dropdown-toggle.btn-pure.btn-primary:hover{color:#3583ca}.btn-pure.btn-primary.active .badge,.btn-pure.btn-primary:active .badge,.btn-pure.btn-primary:focus .badge,.btn-pure.btn-primary:hover .badge,.open>.dropdown-toggle.btn-pure.btn-primary .badge{color:#3583ca}.btn-pure.btn-success{color:#46be8a}.btn-pure.btn-success.active,.btn-pure.btn-success:active,.btn-pure.btn-success:focus,.btn-pure.btn-success:hover,.open>.dropdown-toggle.btn-pure.btn-success{color:#279566}.btn-pure.btn-success.active.focus,.btn-pure.btn-success.active:focus,.btn-pure.btn-success.active:hover,.btn-pure.btn-success:active.focus,.btn-pure.btn-success:active:focus,.btn-pure.btn-success:active:hover,.btn-pure.btn-success:focus.focus,.btn-pure.btn-success:focus:focus,.btn-pure.btn-success:focus:hover,.btn-pure.btn-success:hover.focus,.btn-pure.btn-success:hover:focus,.btn-pure.btn-success:hover:hover,.open>.dropdown-toggle.btn-pure.btn-success.focus,.open>.dropdown-toggle.btn-pure.btn-success:focus,.open>.dropdown-toggle.btn-pure.btn-success:hover{color:#279566}.btn-pure.btn-success.active .badge,.btn-pure.btn-success:active .badge,.btn-pure.btn-success:focus .badge,.btn-pure.btn-success:hover .badge,.open>.dropdown-toggle.btn-pure.btn-success .badge{color:#279566}.btn-pure.btn-info{color:#57c7d4}.btn-pure.btn-info.active,.btn-pure.btn-info:active,.btn-pure.btn-info:focus,.btn-pure.btn-info:hover,.open>.dropdown-toggle.btn-pure.btn-info{color:#37a9b7}.btn-pure.btn-info.active.focus,.btn-pure.btn-info.active:focus,.btn-pure.btn-info.active:hover,.btn-pure.btn-info:active.focus,.btn-pure.btn-info:active:focus,.btn-pure.btn-info:active:hover,.btn-pure.btn-info:focus.focus,.btn-pure.btn-info:focus:focus,.btn-pure.btn-info:focus:hover,.btn-pure.btn-info:hover.focus,.btn-pure.btn-info:hover:focus,.btn-pure.btn-info:hover:hover,.open>.dropdown-toggle.btn-pure.btn-info.focus,.open>.dropdown-toggle.btn-pure.btn-info:focus,.open>.dropdown-toggle.btn-pure.btn-info:hover{color:#37a9b7}.btn-pure.btn-info.active .badge,.btn-pure.btn-info:active .badge,.btn-pure.btn-info:focus .badge,.btn-pure.btn-info:hover .badge,.open>.dropdown-toggle.btn-pure.btn-info .badge{color:#37a9b7}.btn-pure.btn-warning{color:#f2a654}.btn-pure.btn-warning.active,.btn-pure.btn-warning:active,.btn-pure.btn-warning:focus,.btn-pure.btn-warning:hover,.open>.dropdown-toggle.btn-pure.btn-warning{color:#e98f2e}.btn-pure.btn-warning.active.focus,.btn-pure.btn-warning.active:focus,.btn-pure.btn-warning.active:hover,.btn-pure.btn-warning:active.focus,.btn-pure.btn-warning:active:focus,.btn-pure.btn-warning:active:hover,.btn-pure.btn-warning:focus.focus,.btn-pure.btn-warning:focus:focus,.btn-pure.btn-warning:focus:hover,.btn-pure.btn-warning:hover.focus,.btn-pure.btn-warning:hover:focus,.btn-pure.btn-warning:hover:hover,.open>.dropdown-toggle.btn-pure.btn-warning.focus,.open>.dropdown-toggle.btn-pure.btn-warning:focus,.open>.dropdown-toggle.btn-pure.btn-warning:hover{color:#e98f2e}.btn-pure.btn-warning.active .badge,.btn-pure.btn-warning:active .badge,.btn-pure.btn-warning:focus .badge,.btn-pure.btn-warning:hover .badge,.open>.dropdown-toggle.btn-pure.btn-warning .badge{color:#e98f2e}.btn-pure.btn-danger{color:#f96868}.btn-pure.btn-danger.active,.btn-pure.btn-danger:active,.btn-pure.btn-danger:focus,.btn-pure.btn-danger:hover,.open>.dropdown-toggle.btn-pure.btn-danger{color:#d6494b}.btn-pure.btn-danger.active.focus,.btn-pure.btn-danger.active:focus,.btn-pure.btn-danger.active:hover,.btn-pure.btn-danger:active.focus,.btn-pure.btn-danger:active:focus,.btn-pure.btn-danger:active:hover,.btn-pure.btn-danger:focus.focus,.btn-pure.btn-danger:focus:focus,.btn-pure.btn-danger:focus:hover,.btn-pure.btn-danger:hover.focus,.btn-pure.btn-danger:hover:focus,.btn-pure.btn-danger:hover:hover,.open>.dropdown-toggle.btn-pure.btn-danger.focus,.open>.dropdown-toggle.btn-pure.btn-danger:focus,.open>.dropdown-toggle.btn-pure.btn-danger:hover{color:#d6494b}.btn-pure.btn-danger.active .badge,.btn-pure.btn-danger:active .badge,.btn-pure.btn-danger:focus .badge,.btn-pure.btn-danger:hover .badge,.open>.dropdown-toggle.btn-pure.btn-danger .badge{color:#d6494b}.btn-pure.btn-dark{color:#526069}.btn-pure.btn-dark.active,.btn-pure.btn-dark:active,.btn-pure.btn-dark:focus,.btn-pure.btn-dark:hover,.open>.dropdown-toggle.btn-pure.btn-dark{color:#37474f}.btn-pure.btn-dark.active.focus,.btn-pure.btn-dark.active:focus,.btn-pure.btn-dark.active:hover,.btn-pure.btn-dark:active.focus,.btn-pure.btn-dark:active:focus,.btn-pure.btn-dark:active:hover,.btn-pure.btn-dark:focus.focus,.btn-pure.btn-dark:focus:focus,.btn-pure.btn-dark:focus:hover,.btn-pure.btn-dark:hover.focus,.btn-pure.btn-dark:hover:focus,.btn-pure.btn-dark:hover:hover,.open>.dropdown-toggle.btn-pure.btn-dark.focus,.open>.dropdown-toggle.btn-pure.btn-dark:focus,.open>.dropdown-toggle.btn-pure.btn-dark:hover{color:#37474f}.btn-pure.btn-dark.active .badge,.btn-pure.btn-dark:active .badge,.btn-pure.btn-dark:focus .badge,.btn-pure.btn-dark:hover .badge,.open>.dropdown-toggle.btn-pure.btn-dark .badge{color:#37474f}.btn-pure.btn-inverse{color:#fff}.btn-pure.btn-inverse.active,.btn-pure.btn-inverse:active,.btn-pure.btn-inverse:focus,.btn-pure.btn-inverse:hover,.open>.dropdown-toggle.btn-pure.btn-inverse{color:#fff}.btn-pure.btn-inverse.active.focus,.btn-pure.btn-inverse.active:focus,.btn-pure.btn-inverse.active:hover,.btn-pure.btn-inverse:active.focus,.btn-pure.btn-inverse:active:focus,.btn-pure.btn-inverse:active:hover,.btn-pure.btn-inverse:focus.focus,.btn-pure.btn-inverse:focus:focus,.btn-pure.btn-inverse:focus:hover,.btn-pure.btn-inverse:hover.focus,.btn-pure.btn-inverse:hover:focus,.btn-pure.btn-inverse:hover:hover,.open>.dropdown-toggle.btn-pure.btn-inverse.focus,.open>.dropdown-toggle.btn-pure.btn-inverse:focus,.open>.dropdown-toggle.btn-pure.btn-inverse:hover{color:#fff}.btn-pure.btn-inverse.active .badge,.btn-pure.btn-inverse:active .badge,.btn-pure.btn-inverse:focus .badge,.btn-pure.btn-inverse:hover .badge,.open>.dropdown-toggle.btn-pure.btn-inverse .badge{color:#fff}.caret{border-top:4px solid;-webkit-transition:.25s;-o-transition:.25s;transition:.25s;-webkit-transform:scale(1.001);-ms-transform:scale(1.001);-o-transform:scale(1.001);transform:scale(1.001)}.btn-group .btn+.dropdown-toggle .caret{margin-left:0}.dropdown-toggle.btn .caret{margin-left:.3em}.dropdown-toggle.btn.btn-xs .caret{margin-left:0}.btn-group>.btn+.dropdown-toggle{padding-right:.8em;padding-left:.8em}.dropdown-menu{margin-top:5px;-webkit-box-shadow:0 3px 12px rgba(0,0,0,.05);box-shadow:0 3px 12px rgba(0,0,0,.05);-webkit-transition:.25s;-o-transition:.25s;transition:.25s}.dropdown-menu .divider{margin:6px 0}.dropdown-menu>li{padding:0 5px;margin:2px 0}.dropdown-menu>li>a{padding:8px 15px;border-radius:3px;-webkit-transition:background-color .25s;-o-transition:background-color .25s;transition:background-color .25s}.dropdown-menu li .icon:first-child,.dropdown-menu li>a .icon:first-child{width:1em;margin-right:.5em;text-align:center}.dropdown-menu.bullet{margin-top:12px}.dropdown-menu.bullet:after,.dropdown-menu.bullet:before{position:absolute;left:10px;display:inline-block;width:0;height:0;content:'';border:7px solid transparent;border-top-width:0}.dropdown-menu.bullet:before{top:-7px;border-bottom-color:#e4eaec}.dropdown-menu.bullet:after{top:-6px;border-bottom-color:#fff}.dropdown-menu-right.bullet:after,.dropdown-menu-right.bullet:before{right:10px;left:auto}.dropdown-menu.animate{overflow:hidden}.dropdown-menu.animate>li{-webkit-animation-name:slide-left;-o-animation-name:slide-left;animation-name:slide-left;-webkit-animation-duration:.5s;-o-animation-duration:.5s;animation-duration:.5s;-webkit-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.dropdown-menu.animate>li:nth-child(1){-webkit-animation-delay:.02s;-o-animation-delay:.02s;animation-delay:.02s}.dropdown-menu.animate>li:nth-child(2){-webkit-animation-delay:.04s;-o-animation-delay:.04s;animation-delay:.04s}.dropdown-menu.animate>li:nth-child(3){-webkit-animation-delay:.06s;-o-animation-delay:.06s;animation-delay:.06s}.dropdown-menu.animate>li:nth-child(4){-webkit-animation-delay:.08s;-o-animation-delay:.08s;animation-delay:.08s}.dropdown-menu.animate>li:nth-child(5){-webkit-animation-delay:.1s;-o-animation-delay:.1s;animation-delay:.1s}.dropdown-menu.animate>li:nth-child(6){-webkit-animation-delay:.12s;-o-animation-delay:.12s;animation-delay:.12s}.dropdown-menu.animate>li:nth-child(7){-webkit-animation-delay:.14s;-o-animation-delay:.14s;animation-delay:.14s}.dropdown-menu.animate>li:nth-child(8){-webkit-animation-delay:.16s;-o-animation-delay:.16s;animation-delay:.16s}.dropdown-menu.animate>li:nth-child(9){-webkit-animation-delay:.18s;-o-animation-delay:.18s;animation-delay:.18s}.dropdown-menu.animate>li:nth-child(10){-webkit-animation-delay:.2s;-o-animation-delay:.2s;animation-delay:.2s}.dropdown-menu.animate>li.divider{-webkit-animation-name:none;-o-animation-name:none;animation-name:none}.dropdown-menu.animate.animate-reverse>li:nth-last-child(1){-webkit-animation-delay:.02s;-o-animation-delay:.02s;animation-delay:.02s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(2){-webkit-animation-delay:.04s;-o-animation-delay:.04s;animation-delay:.04s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(3){-webkit-animation-delay:.06s;-o-animation-delay:.06s;animation-delay:.06s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(4){-webkit-animation-delay:.08s;-o-animation-delay:.08s;animation-delay:.08s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(5){-webkit-animation-delay:.1s;-o-animation-delay:.1s;animation-delay:.1s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(6){-webkit-animation-delay:.12s;-o-animation-delay:.12s;animation-delay:.12s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(7){-webkit-animation-delay:.14s;-o-animation-delay:.14s;animation-delay:.14s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(8){-webkit-animation-delay:.16s;-o-animation-delay:.16s;animation-delay:.16s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(9){-webkit-animation-delay:.18s;-o-animation-delay:.18s;animation-delay:.18s}.dropdown-menu.animate.animate-reverse>li:nth-last-child(10){-webkit-animation-delay:.2s;-o-animation-delay:.2s;animation-delay:.2s}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{margin-bottom:6px;-webkit-box-shadow:0 -3px 12px rgba(0,0,0,.05);box-shadow:0 -3px 12px rgba(0,0,0,.05)}.dropup .dropdown-menu.bullet,.navbar-fixed-bottom .dropdown .dropdown-menu.bullet{margin-bottom:12px}.dropup .dropdown-menu.bullet:after,.dropup .dropdown-menu.bullet:before,.navbar-fixed-bottom .dropdown .dropdown-menu.bullet:after,.navbar-fixed-bottom .dropdown .dropdown-menu.bullet:before{top:auto;border-top-width:7px;border-bottom-width:0}.dropup .dropdown-menu.bullet:before,.navbar-fixed-bottom .dropdown .dropdown-menu.bullet:before{bottom:-7px;border-top-color:#e4eaec}.dropup .dropdown-menu.bullet:after,.navbar-fixed-bottom .dropdown .dropdown-menu.bullet:after{bottom:-6px;border-top-color:#fff}.dropdown-menu>.dropdown-header{padding:8px 20px 6px;font-size:14px;font-weight:500;cursor:default}.dropdown-menu>.dropdown-submenu{position:relative}.dropdown-menu>.dropdown-submenu>a{position:relative}.dropdown-menu>.dropdown-submenu>a:after{position:absolute;right:10px;display:inline-block;width:0;height:0;margin-top:6px;vertical-align:middle;content:'';border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px dashed}.dropdown-menu>.dropdown-submenu .dropdown-menu{left:100%;margin:0}.dropdown-menu>.dropdown-submenu.dropdown-menu-left .dropdown-menu{left:-100%}.dropdown-menu>.dropdown-submenu:hover .dropdown-menu{display:block}.dropdown .dropdown-submenu .dropdown-menu{top:0}.dropup .dropdown-submenu .dropdown-menu{bottom:0}.dropdown-menu-media{width:360px;padding-top:0;padding-bottom:0}.dropdown-menu-media>li{padding:0;margin:0}.dropdown-menu-media .dropdown-menu-header{position:relative;padding:20px 20px;background-color:#fff;border-bottom:1px solid #e4eaec}.dropdown-menu-media .dropdown-menu-header>h3,.dropdown-menu-media .dropdown-menu-header>h4,.dropdown-menu-media .dropdown-menu-header>h5{margin:0}.dropdown-menu-media .dropdown-menu-header .badge,.dropdown-menu-media .dropdown-menu-header .label{position:absolute;top:50%;right:20px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.dropdown-menu-media .list-group{max-height:270px;margin:0;font-size:12px;border-radius:0}.dropdown-menu-media .list-group-item{padding:0 20px;border:none;border-radius:0!important}.dropdown-menu-media .list-group-item .media{padding:15px 0;border-top:1px solid #e4eaec}.dropdown-menu-media .list-group-item:first-child .media{border-top:none}.dropdown-menu-media>.dropdown-menu-footer{background-color:#f3f7f9;border-top:1px solid #e4eaec}.dropdown-menu-media>.dropdown-menu-footer>a{padding:15px 20px!important;color:#a3afb7!important}.dropdown-menu-media>.dropdown-menu-footer>a:hover{color:#89bceb!important;background-color:transparent!important}.dropdown-menu-media>.dropdown-menu-footer>.dropdown-menu-footer-btn{position:absolute;right:0}.dropdown-menu-media>.dropdown-menu-footer>.dropdown-menu-footer-btn:hover{color:#89bceb!important;background-color:transparent!important}.dropdown-menu-primary>.active>a,.dropdown-menu-primary>.active>a:focus,.dropdown-menu-primary>.active>a:hover{color:#fff;background-color:#62a8ea}.dropdown-menu-success>.active>a,.dropdown-menu-success>.active>a:focus,.dropdown-menu-success>.active>a:hover{color:#fff;background-color:#46be8a}.dropdown-menu-info>.active>a,.dropdown-menu-info>.active>a:focus,.dropdown-menu-info>.active>a:hover{color:#fff;background-color:#57c7d4}.dropdown-menu-warning>.active>a,.dropdown-menu-warning>.active>a:focus,.dropdown-menu-warning>.active>a:hover{color:#fff;background-color:#f2a654}.dropdown-menu-danger>.active>a,.dropdown-menu-danger>.active>a:focus,.dropdown-menu-danger>.active>a:hover{color:#fff;background-color:#f96868}.dropdown-menu-dark>.active>a,.dropdown-menu-dark>.active>a:focus,.dropdown-menu-dark>.active>a:hover{color:#fff;background-color:#526069}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05);box-shadow:inset 0 1px 3px rgba(0,0,0,.05)}.btn-group:focus .dropdown-toggle{-webkit-transition:.25s;-o-transition:.25s;transition:.25s}.input-group-addon{-webkit-transition:border .25s linear,color .25s linear,background-color .25s linear;-o-transition:border .25s linear,color .25s linear,background-color .25s linear;transition:border .25s linear,color .25s linear,background-color .25s linear}.input-group-btn .btn{padding:6px 10px}.input-group-btn .btn>.icon{vertical-align:bottom}.input-group-btn .dropdown-toggle.btn .caret{margin-left:2px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:1}.nav>li>a{overflow:hidden}.nav>li>a:focus{outline:0}.nav>li>a .close{display:inline-block;margin-left:10px}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{border-color:transparent}.nav-quick{padding:0;margin-right:0;margin-bottom:22px;margin-left:0;background-color:#fff;border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.nav-quick li{position:relative;display:block;padding:0;text-align:center;list-style:none}.nav-quick a{display:block;padding:16px 0;color:#76838f}.nav-quick a .icon{display:block;margin-bottom:.2em;font-size:32px}.nav-quick a:hover{text-decoration:none;background-color:#f3f7f9}.nav-quick .badge,.nav-quick .label{position:absolute;top:0;right:0}.nav-quick-sm a{padding:12px 0}.nav-quick-sm a .icon{font-size:24px}.nav-quick-lg a{padding:22px 0}.nav-quick-lg a .icon{font-size:40px}.nav-quick-bordered{border-top:1px solid #e4eaec;border-left:1px solid #e4eaec}.nav-quick-bordered li{border-right:1px solid #e4eaec;border-bottom:1px solid #e4eaec}.nav-pills>li>a{-webkit-transition:border .2s linear,color .2s linear,background-color .2s linear;-o-transition:border .2s linear,color .2s linear,background-color .2s linear;transition:border .2s linear,color .2s linear,background-color .2s linear}.nav-pills-rounded>li>a{padding-right:20px;padding-left:20px;margin-right:5px;margin-left:5px;border-radius:1000px}.nav-tabs>li>a{padding:10px 20px;color:#76838f;-webkit-transition:.25s;-o-transition:.25s;transition:.25s}.nav-tabs>li>a>.icon{margin-right:.5em;line-height:1}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#fff;background-color:#62a8ea;border-color:transparent;border-bottom-color:#62a8ea}.nav-tabs.nav-justified>li>a{border-radius:4px 4px 0 0}.nav-tabs.nav-justified>li.active>a,.nav-tabs.nav-justified>li.active>a:focus,.nav-tabs.nav-justified>li.active>a:hover{border-color:transparent;border-bottom-color:#62a8ea}.nav-tabs.nav-tabs-bottom{border-top:1px solid #e4eaec;border-bottom:none}.nav-tabs.nav-tabs-bottom>li{margin-top:-1px;margin-bottom:0}.nav-tabs.nav-tabs-bottom>li>a{border-radius:0 0 4px 4px}.nav-tabs.nav-tabs-bottom>li>a:focus,.nav-tabs.nav-tabs-bottom>li>a:hover{border-top-color:#e4eaec;border-bottom-color:transparent}.nav-tabs.nav-tabs-bottom.nav-justified{border-top:none}.nav-tabs.nav-tabs-bottom.nav-justified>li>a{border-top-color:#e4eaec;border-bottom-color:transparent}.nav-tabs.nav-tabs-bottom.nav-justified>li.active>a,.nav-tabs.nav-tabs-bottom.nav-justified>li.active>a:focus,.nav-tabs.nav-tabs-bottom.nav-justified>li.active>a:hover{border-top:1px solid #62a8ea}.nav-tabs-reverse>li{float:right}.nav-tabs-reverse>li>a{margin-right:0;margin-left:2px}.nav-tabs-solid{border-bottom-color:#f3f7f9}.nav-tabs-solid>li>a:hover{border-color:transparent}.nav-tabs-solid>li.active>a,.nav-tabs-solid>li.active>a:focus,.nav-tabs-solid>li.active>a:hover{color:#76838f;background-color:#f3f7f9;border-color:transparent}.nav-tabs-solid~.tab-content{padding:20px;background-color:#f3f7f9}.nav-tabs-solid.nav-justified>li>a{border:none}.nav-tabs-solid.nav-justified>li.active>a,.nav-tabs-solid.nav-justified>li.active>a:focus,.nav-tabs-solid.nav-justified>li.active>a:hover{border:none}.nav-tabs-solid.nav-tabs-bottom>li.active>a,.nav-tabs-solid.nav-tabs-bottom>li.active>a:focus,.nav-tabs-solid.nav-tabs-bottom>li.active>a:hover{border:none}.nav-tabs-line>li>a{padding:10px 20px;border-bottom:2px solid transparent}.nav-tabs-line>li>a:focus,.nav-tabs-line>li>a:hover{background-color:transparent}.nav-tabs-line>li>a:hover{border-bottom-color:#ccd5db}.nav-tabs-line>li.active>a,.nav-tabs-line>li.active>a:focus,.nav-tabs-line>li.active>a:hover{color:#62a8ea;background-color:transparent;border-bottom:2px solid #62a8ea}.nav-tabs-line .open>a,.nav-tabs-line .open>a:focus,.nav-tabs-line .open>a:hover{border-color:transparent;border-bottom-color:#ccd5db}.nav-tabs-line.nav-tabs-bottom>li>a{border-top:2px solid transparent;border-bottom:none}.nav-tabs-line.nav-tabs-bottom>li>a:hover{border-top-color:#ccd5db;border-bottom-color:transparent}.nav-tabs-line.nav-tabs-bottom>li.active>a,.nav-tabs-line.nav-tabs-bottom>li.active>a:focus,.nav-tabs-line.nav-tabs-bottom>li.active>a:hover{border-top:2px solid #62a8ea;border-bottom:none}.nav-tabs-line.nav-justified>li>a{border-bottom:2px solid #e4eaec}.nav-tabs-line.nav-justified>li>a:hover{border-bottom-color:#ccd5db}.nav-tabs-line.nav-justified>li.active>a,.nav-tabs-line.nav-justified>li.active>a:focus,.nav-tabs-line.nav-justified>li.active>a:hover{border-color:transparent;border-bottom:2px solid #62a8ea}.nav-tabs-line.nav-justified.nav-tabs-bottom{border-top:none}.nav-tabs-line.nav-justified.nav-tabs-bottom>li>a{border-top:2px solid #e4eaec;border-bottom:none}.nav-tabs-line.nav-justified.nav-tabs-bottom>li>a:hover{border-top-color:#ccd5db}.nav-tabs-line.nav-justified.nav-tabs-bottom>li.active>a,.nav-tabs-line.nav-justified.nav-tabs-bottom>li.active>a:focus,.nav-tabs-line.nav-justified.nav-tabs-bottom>li.active>a:hover{border-top-color:#62a8ea;border-bottom:none}.nav-tabs-vertical:after,.nav-tabs-vertical:before{display:table;content:\" \"}.nav-tabs-vertical:after{clear:both}.nav-tabs-vertical .nav-tabs{float:left;border-right:1px solid #e4eaec;border-bottom:none}.nav-tabs-vertical .nav-tabs>li{float:none;margin-right:-1px;margin-bottom:0}.nav-tabs-vertical .nav-tabs>li>a{padding:10px 20px;margin-right:0;margin-bottom:2px;border-radius:4px 0 0 4px}.nav-tabs-vertical .nav-tabs>li>a:hover{border-right-color:#e4eaec;border-bottom-color:transparent}.nav-tabs-vertical .nav-tabs>li.active>a,.nav-tabs-vertical .nav-tabs>li.active>a:focus,.nav-tabs-vertical .nav-tabs>li.active>a:hover{border-right-color:#62a8ea}.nav-tabs-vertical .nav-tabs-reverse{float:right;border-right:none;border-left:1px solid #e4eaec}.nav-tabs-vertical .nav-tabs-reverse>li{margin-right:0;margin-left:-1px}.nav-tabs-vertical .nav-tabs-reverse>li>a{margin-left:0;border-radius:0 4px 4px 0}.nav-tabs-vertical .nav-tabs-reverse>li>a:hover{border-right-color:transparent;border-left-color:#e4eaec}.nav-tabs-vertical .nav-tabs-reverse>li.active>a,.nav-tabs-vertical .nav-tabs-reverse>li.active>a:focus,.nav-tabs-vertical .nav-tabs-reverse>li.active>a:hover{border-left-color:#62a8ea}.nav-tabs-vertical .nav-tabs-solid{border-right-color:#f3f7f9}.nav-tabs-vertical .nav-tabs-solid>li>a:hover{border-color:transparent}.nav-tabs-vertical .nav-tabs-solid>li.active>a,.nav-tabs-vertical .nav-tabs-solid>li.active>a:focus,.nav-tabs-vertical .nav-tabs-solid>li.active>a:hover{border-color:transparent}.nav-tabs-vertical .nav-tabs-solid+.tab-content{padding:20px}.nav-tabs-vertical .nav-tabs-solid.nav-tabs-reverse{border-left-color:#f3f7f9}.nav-tabs-vertical .nav-tabs-line>li>a{border-right:2px solid transparent;border-bottom:none}.nav-tabs-vertical .nav-tabs-line>li>a:hover{border-right-color:#ccd5db}.nav-tabs-vertical .nav-tabs-line>li.active>a,.nav-tabs-vertical .nav-tabs-line>li.active>a:focus,.nav-tabs-vertical .nav-tabs-line>li.active>a:hover{border-right:2px solid #62a8ea;border-bottom:none}.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse>li>a{border-right-width:1px;border-left:2px solid transparent}.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse>li>a:hover{border-color:transparent;border-left-color:#ccd5db}.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse>li.active>a,.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse>li.active>a:focus,.nav-tabs-vertical .nav-tabs-line.nav-tabs-reverse>li.active>a:hover{border-right:1px solid transparent;border-left:2px solid #62a8ea}.nav-tabs-vertical .tab-content{overflow:hidden}.nav-tabs-inverse .nav-tabs-solid{border-bottom-color:#fff}.nav-tabs-inverse .nav-tabs-solid>li.active>a,.nav-tabs-inverse .nav-tabs-solid>li.active>a:focus,.nav-tabs-inverse .nav-tabs-solid>li.active>a:hover{color:#76838f;background-color:#fff}.nav-tabs-inverse.nav-tabs-vertical .nav-tabs-solid{border-right-color:#fff}.nav-tabs-inverse.nav-tabs-vertical .nav-tabs-solid.nav-tabs-reverse{border-left-color:#fff}.nav-tabs-inverse .tab-content{background:#fff}.nav-tabs-animate .tab-content{overflow:hidden}.nav-tabs-lg>li>a{padding:12px 20px;font-size:18px;line-height:1.3333333}.nav-tabs-sm>li>a{padding:5px 10px;font-size:12px;line-height:1.5}.navbar-toggle{height:66px;padding:22px 15px;margin-top:16px;margin-top:0;margin-bottom:16px;margin-bottom:0;line-height:22px;background:0 0!important;-webkit-transition:color .25s linear;-o-transition:color .25s linear;transition:color .25s linear}.navbar-toggle .icon{margin-top:-1px}.navbar-toggle:hover{background:0 0!important}.navbar-toggle-left{float:left;margin-right:0;margin-left:15px}.navbar{border:none;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.08);box-shadow:0 2px 4px rgba(0,0,0,.08)}.navbar-fixed-bottom,.navbar-fixed-top{width:100%}@media (min-width:768px){.hidden-float{display:block}}@media (max-width:767px){.hidden-float{display:none!important}}.navbar-brand{padding:22px 20px;font-weight:500}.navbar-brand>.navbar-brand-logo{display:inline-block}.navbar-brand-logo{height:32px;margin-top:-5px}.navbar-brand-text{margin-left:6px}@media (max-width:767px){.navbar-brand-center{position:absolute;left:50%;-webkit-transform:translate(-50%,0);-ms-transform:translate(-50%,0);-o-transform:translate(-50%,0);transform:translate(-50%,0)}}@media (min-width:768px){.navbar-mega .container,.navbar-mega .container-fluid{position:relative}}.navbar-mega .dropdown-menu{left:auto}.navbar-mega .dropdown-mega{position:static}.navbar-mega .mega-content{padding:20px 30px}.navbar-mega .mega-menu{min-width:150px;max-width:100%}.navbar-mega .mega-menu>ul{padding-left:0}.navbar-mega .mega-menu .list-icons{margin-bottom:6px}.navbar-mega .dropdown.dropdown-fw .dropdown-menu{right:5px;left:5px}@media (max-width:767px){.navbar-mega .dropdown.dropdown-fw .dropdown-menu{right:0;left:0}}.navbar-nav>li>a.navbar-avatar,.navbar-toolbar>li>a.navbar-avatar{padding-top:18px;padding-bottom:18px}@media (max-width:767px){.navbar-nav>li>a.navbar-avatar{padding-top:6px;padding-bottom:6px}}.navbar-avatar .avatar{width:30px}.navbar-form .icon{font-size:16px;color:rgba(55,71,79,.4)}.navbar-form .form-control{background-color:#f3f7f9;border:none;border-radius:38px}@media (min-width:768px){.navbar-search.collapse{display:block!important;height:auto!important;overflow:visible!important;visibility:visible!important}}@media (max-width:767px){.navbar-search{padding-right:15px;padding-left:15px}}@media (max-width:767px){.navbar-search .navbar-form{margin-top:0;margin-bottom:0;border-bottom:none}}.container-fluid>.navbar-search,.container>.navbar-search{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-search,.container>.navbar-search{margin-right:0;margin-left:0}}.navbar-search-overlap{position:absolute!important;top:0;right:0;left:0;background-color:#fff}.navbar-search-overlap .form-control,.navbar-search-overlap .form-group{display:block!important;margin:0}.navbar-search-overlap .form-control{height:66px!important;background-color:transparent!important;border-radius:0}.navbar-search-overlap .form-control:focus{border-color:transparent}.navbar-collapse-toolbar.in{overflow-y:visible}.navbar-toolbar{float:left}.navbar-toolbar:after,.navbar-toolbar:before{display:table;content:\" \"}.navbar-toolbar:after{clear:both}.navbar-toolbar>li{float:left}.navbar-toolbar>li:after,.navbar-toolbar>li:before{display:table;content:\" \"}.navbar-toolbar>li:after{clear:both}.navbar-toolbar>li>a{padding-top:22px;padding-bottom:22px;line-height:22px}.navbar-toolbar .dropdown-menu{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;-o-transform-origin:100% 0;transform-origin:100% 0;-webkit-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s}@media (max-width:767px){.navbar-toolbar .dropdown-menu:not(.dropdown-menu-media){max-height:400px;overflow-x:hidden;overflow-y:scroll;-webkit-overflow-scrolling:touch;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.navbar-toolbar .open{position:static}.navbar-toolbar .open .dropdown-menu{right:0;left:0;float:none;width:auto;margin-top:0;border-top-left-radius:0;border-top-right-radius:0}}@media (max-width:767px) and (max-device-width:480px) and (orientation:landscape){.navbar-toolbar .dropdown-menu:not(.dropdown-menu-media){max-height:200px}}@media (max-width:767px){.navbar-toolbar-left{float:left!important}.navbar-toolbar-right{float:right!important}}.icon-fullscreen{font-family:\"Web Icons\"}.icon-fullscreen:before{content:\"\\f11d\"}.icon-fullscreen.active:before{content:\"\\f11e\"}.icon-menubar{font-family:\"Web Icons\"}.icon-menubar:before{content:\"\\f119\"}.icon-menubar.active:before{content:\"\\f119\"}.navbar-default .navbar-toolbar>li>a{color:#76838f}.navbar-default .navbar-toolbar>li>a:focus,.navbar-default .navbar-toolbar>li>a:hover{color:#526069;background-color:rgba(243,247,249,.3)}.navbar-default .navbar-toolbar>.active>a,.navbar-default .navbar-toolbar>.active>a:focus,.navbar-default .navbar-toolbar>.active>a:hover{color:#526069;background-color:rgba(243,247,249,.6)}.navbar-default .navbar-toolbar>.disabled>a,.navbar-default .navbar-toolbar>.disabled>a:focus,.navbar-default .navbar-toolbar>.disabled>a:hover{color:#ccd5db;background-color:transparent}.navbar-default .navbar-toggle{color:#76838f}.navbar-default .navbar-toolbar>.open>a,.navbar-default .navbar-toolbar>.open>a:focus,.navbar-default .navbar-toolbar>.open>a:hover{color:#526069;background-color:rgba(243,247,249,.6)}.navbar-inverse .navbar-toolbar>li>a{color:#fff}.navbar-inverse .navbar-toolbar>li>a:focus,.navbar-inverse .navbar-toolbar>li>a:hover{color:#fff;background-color:rgba(0,0,0,.1)}.navbar-inverse .navbar-toolbar>.active>a,.navbar-inverse .navbar-toolbar>.active>a:focus,.navbar-inverse .navbar-toolbar>.active>a:hover{color:#fff;background-color:rgba(0,0,0,.1)}.navbar-inverse .navbar-toolbar>.disabled>a,.navbar-inverse .navbar-toolbar>.disabled>a:focus,.navbar-inverse .navbar-toolbar>.disabled>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-toggle{color:#fff}.navbar-inverse .navbar-toolbar>.open>a,.navbar-inverse .navbar-toolbar>.open>a:focus,.navbar-inverse .navbar-toolbar>.open>a:hover{color:#fff;background-color:rgba(0,0,0,.1)}.breadcrumb{margin-bottom:10px}.breadcrumb li+li:before{padding:0 5px}.breadcrumb li .icon{text-decoration:none}.breadcrumb li .icon:before{margin-right:10px}.breadcrumb-arrow>li+li:before{content:\"\\00bb\\00a0\"}.pagination li>a,.pagination li>span{padding:9px 15px;-webkit-transition:background .2s ease-out,border-color 0s ease-out,color .2s ease-out;-o-transition:background .2s ease-out,border-color 0s ease-out,color .2s ease-out;transition:background .2s ease-out,border-color 0s ease-out,color .2s ease-out}.pagination li>a:focus,.pagination li>a:hover,.pagination li>span:focus,.pagination li>span:hover{-webkit-transition:background .2s ease-out,border-color .2s ease-out,color .2s ease-out;-o-transition:background .2s ease-out,border-color .2s ease-out,color .2s ease-out;transition:background .2s ease-out,border-color .2s ease-out,color .2s ease-out}.pagination li .icon{margin-top:-1px}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#ccd5db;cursor:not-allowed;background-color:transparent;border-color:#e4eaec}.pagination-gap>li>a{margin:0 5px;border-radius:5px}.pagination-gap>li>a:hover{background-color:transparent;border-color:#62a8ea}.pagination-gap>li:first-child>a,.pagination-gap>li:last-child>a{border-radius:5px}.pagination-no-border>li>a{border:none}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 17px;font-size:16px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination-sm>li>a,.pagination-sm>li>span{padding:6px 11px;font-size:14px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:2px;border-bottom-left-radius:2px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:2px;border-bottom-right-radius:2px}.pager li>a,.pager li>span{padding:10px 20px;color:#76838f;-webkit-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.pager li>a:focus,.pager li>a:hover{color:#62a8ea}.pager li .icon{margin-top:-1px}.pager li>a:focus,.pager li>a:hover{border-color:#62a8ea}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{border-color:#e4eaec}.pager-round li>a,.pager-round li>span{border-radius:1000px}.label{padding:.25em .6em .25em;font-weight:300;border-radius:.3em}.label.label-outline{color:#f3f7f9;background-color:transparent;border-color:#f3f7f9}.label-outline{border:1px solid transparent}.label-round{border-radius:1em}.label-default{color:#76838f;background-color:#e4eaec}.label-default[href]:focus,.label-default[href]:hover{background-color:#f3f7f9}.label-default.label-outline{color:#e4eaec;background-color:transparent;border-color:#e4eaec}.label-default[href]:focus,.label-default[href]:hover{color:#a3afb7}.label-default.label-outline{color:#76838f}.label-primary{background-color:#62a8ea}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#89bceb}.label-primary.label-outline{color:#62a8ea;background-color:transparent;border-color:#62a8ea}.label-success{background-color:#46be8a}.label-success[href]:focus,.label-success[href]:hover{background-color:#5cd29d}.label-success.label-outline{color:#46be8a;background-color:transparent;border-color:#46be8a}.label-info{background-color:#57c7d4}.label-info[href]:focus,.label-info[href]:hover{background-color:#77d6e1}.label-info.label-outline{color:#57c7d4;background-color:transparent;border-color:#57c7d4}.label-warning{background-color:#f2a654}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#f4b066}.label-warning.label-outline{color:#f2a654;background-color:transparent;border-color:#f2a654}.label-danger{background-color:#f96868}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#fa7a7a}.label-danger.label-outline{color:#f96868;background-color:transparent;border-color:#f96868}.label-dark{background-color:#526069}.label-dark[href]:focus,.label-dark[href]:hover{background-color:#76838f}.label-dark.label-outline{color:#526069;background-color:transparent;border-color:#526069}.label-lg{font-size:16px}.label-sm{padding:.1em .5em .1em;font-size:10px}.badge{padding:3px 6px}.btn .badge{top:0}.badge.up{position:relative;top:-10px;margin:0 -.8em;border-radius:15px}.badge.badge-absolute{position:absolute;top:-8px;right:-10px;z-index:5}.badge-radius{border-radius:3px}.badge-primary{color:#fff;background-color:#62a8ea}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;background-color:#358fe4}.list-group-item.active>.badge-primary,.nav-pills>.active>a>.badge-primary{color:#fff;background-color:#62a8ea}.badge-success{color:#fff;background-color:#46be8a}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;background-color:#369b6f}.list-group-item.active>.badge-success,.nav-pills>.active>a>.badge-success{color:#fff;background-color:#46be8a}.badge-info{color:#fff;background-color:#57c7d4}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;background-color:#33b6c5}.list-group-item.active>.badge-info,.nav-pills>.active>a>.badge-info{color:#fff;background-color:#57c7d4}.badge-warning{color:#fff;background-color:#f2a654}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#fff;background-color:#ee8d25}.list-group-item.active>.badge-warning,.nav-pills>.active>a>.badge-warning{color:#fff;background-color:#f2a654}.badge-danger{color:#fff;background-color:#f96868}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;background-color:#f73737}.list-group-item.active>.badge-danger,.nav-pills>.active>a>.badge-danger{color:#fff;background-color:#f96868}.badge-dark{color:#fff;background-color:#526069}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;background-color:#3c464c}.list-group-item.active>.badge-dark,.nav-pills>.active>a>.badge-dark{color:#fff;background-color:#526069}.badge-lg{padding:5px 9px 8px;font-size:16px}.badge-sm{padding:2px 5px;font-size:10px}.jumbotron{padding:0;border-radius:3px}.jumbotron>.jumbotron-photo img{width:100%;border-top-left-radius:3px;border-top-right-radius:3px}.jumbotron-contents{padding:20px}.jumbotron .carousel,.jumbotron .carousel-inner,.jumbotron .carousel-inner>.item.active img{border-top-left-radius:3px;border-top-right-radius:3px}.jumbotron .carousel-inner>.item>a>img,.jumbotron .carousel-inner>.item>img{width:100%}.jumbotron .h1,.jumbotron h1{font-size:28px}.jumbotron .h2,.jumbotron h2{font-size:24px}@media screen and (min-width:768px){.container .jumbotron,.jumbotron{padding:0}.jumbotron .h1,.jumbotron h1{font-size:28px}}.thumbnail{padding:0;border:none;-webkit-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;transition:all .25s ease-in-out}.thumbnail .caption{position:relative;display:block;padding-right:0;padding-left:0}.alert{padding-right:20px;padding-left:20px}.alert ul{padding-left:13px}.alert ul li{padding-left:7px}.panel>.alert{margin:0}.alert-alt{color:#76838f;background-color:rgba(243,247,249,.8);border:none;border-left:3px solid transparent}.alert-alt .alert-link,.alert-alt a{text-decoration:none}.alert-dismissible{padding-right:40px}.alert-dismissible .close{top:0;text-decoration:none;opacity:.6}.alert-dismissible .close:focus,.alert-dismissible .close:hover{opacity:1}.alert-dismissible.alert-alt .close{color:#a3afb7;opacity:.6}.alert-dismissible.alert-alt .close:focus,.alert-dismissible.alert-alt .close:hover{color:#a3afb7;opacity:1}.alert-icon{position:relative;padding-left:45px}.alert-icon>.icon{position:absolute;top:18px;left:20px;width:1em;font-size:16px;text-align:center}.alert-avatar{position:relative;padding-top:20px;padding-bottom:20px;padding-left:75px}.alert-avatar>.avatar{position:absolute;top:12px;left:20px}.page-alert .alert-wrap{max-height:0;padding:0;margin:0;overflow:hidden;-webkit-transition:max-height .7s linear 0s;-o-transition:max-height .7s linear 0s;transition:max-height .7s linear 0s}.page-alert .alert-wrap.in{max-height:500px;-webkit-transition:max-height 1s linear 0s;-o-transition:max-height 1s linear 0s;transition:max-height 1s linear 0s}.page-alert .alert-wrap .alert{margin:0;text-align:left;border-radius:0}.alert-primary{color:#62a8ea;background-color:rgba(232,241,248,.8);border-color:#e8f1f8}.alert-primary hr{border-top-color:#d4e5f2}.alert-primary .alert-link{color:#358fe4}.alert-primary .close{color:#62a8ea}.alert-primary .close:focus,.alert-primary .close:hover{color:#62a8ea}.alert-primary .alert-link{color:#4e97d9}.alert-alt.alert-primary{border-color:#62a8ea}.alert-alt.alert-primary .alert-link,.alert-alt.alert-primary a{color:#62a8ea}.alert-success .alert-link{color:#36ab7a}.alert-alt.alert-success{border-color:#46be8a}.alert-alt.alert-success .alert-link,.alert-alt.alert-success a{color:#46be8a}.alert-info .alert-link{color:#47b8c6}.alert-alt.alert-info{border-color:#57c7d4}.alert-alt.alert-info .alert-link,.alert-alt.alert-info a{color:#57c7d4}.alert-warning .alert-link{color:#ec9940}.alert-alt.alert-warning{border-color:#f2a654}.alert-alt.alert-warning .alert-link,.alert-alt.alert-warning a{color:#f2a654}.alert-danger .alert-link{color:#e9595b}.alert-alt.alert-danger{border-color:#f96868}.alert-alt.alert-danger .alert-link,.alert-alt.alert-danger a{color:#f96868}.alert-social{position:relative;padding-left:65px}.alert-social>.icon{position:absolute;top:12px;bottom:0;left:20px;width:1em;font-size:30px;text-align:center}.alert-facebook{color:#fff;background-color:#3b5998;border-color:#3b5998}.alert-facebook hr{border-top-color:#344e86}.alert-facebook .alert-link{color:#e6e6e6}.alert-facebook .close{color:#fff}.alert-facebook .close:focus,.alert-facebook .close:hover{color:#fff}.alert-facebook .alert-link{font-weight:500;color:#fff}.alert-twitter{color:#fff;background-color:#55acee;border-color:#55acee}.alert-twitter hr{border-top-color:#3ea1ec}.alert-twitter .alert-link{color:#e6e6e6}.alert-twitter .close{color:#fff}.alert-twitter .close:focus,.alert-twitter .close:hover{color:#fff}.alert-twitter .alert-link{font-weight:500;color:#fff}.alert-google-plus{color:#fff;background-color:#dd4b39;border-color:#dd4b39}.alert-google-plus hr{border-top-color:#d73925}.alert-google-plus .alert-link{color:#e6e6e6}.alert-google-plus .close{color:#fff}.alert-google-plus .close:focus,.alert-google-plus .close:hover{color:#fff}.alert-google-plus .alert-link{font-weight:500;color:#fff}.alert-linkedin{color:#fff;background-color:#0976b4;border-color:#0976b4}.alert-linkedin hr{border-top-color:#08669c}.alert-linkedin .alert-link{color:#e6e6e6}.alert-linkedin .close{color:#fff}.alert-linkedin .close:focus,.alert-linkedin .close:hover{color:#fff}.alert-linkedin .alert-link{font-weight:500;color:#fff}.alert-flickr{color:#fff;background-color:#ff0084;border-color:#ff0084}.alert-flickr hr{border-top-color:#e60077}.alert-flickr .alert-link{color:#e6e6e6}.alert-flickr .close{color:#fff}.alert-flickr .close:focus,.alert-flickr .close:hover{color:#fff}.alert-flickr .alert-link{font-weight:500;color:#fff}.alert-tumblr{color:#fff;background-color:#35465c;border-color:#35465c}.alert-tumblr hr{border-top-color:#2c3a4c}.alert-tumblr .alert-link{color:#e6e6e6}.alert-tumblr .close{color:#fff}.alert-tumblr .close:focus,.alert-tumblr .close:hover{color:#fff}.alert-tumblr .alert-link{font-weight:500;color:#fff}.alert-github{color:#fff;background-color:#4183c4;border-color:#4183c4}.alert-github hr{border-top-color:#3876b4}.alert-github .alert-link{color:#e6e6e6}.alert-github .close{color:#fff}.alert-github .close:focus,.alert-github .close:hover{color:#fff}.alert-github .alert-link{font-weight:500;color:#fff}.alert-dribbble{color:#fff;background-color:#c32361;border-color:#c32361}.alert-dribbble hr{border-top-color:#ad1f56}.alert-dribbble .alert-link{color:#e6e6e6}.alert-dribbble .close{color:#fff}.alert-dribbble .close:focus,.alert-dribbble .close:hover{color:#fff}.alert-dribbble .alert-link{font-weight:500;color:#fff}.alert-youtube{color:#fff;background-color:#b31217;border-color:#b31217}.alert-youtube hr{border-top-color:#9c1014}.alert-youtube .alert-link{color:#e6e6e6}.alert-youtube .close{color:#fff}.alert-youtube .close:focus,.alert-youtube .close:hover{color:#fff}.alert-youtube .alert-link{font-weight:500;color:#fff}.alert.dark .alert-link{font-weight:500;color:#fff!important}.alert.dark .alert-left-border{border:none;border-left:3px solid transparent}.alert.dark.alert-dismissible.alert-alt .close{color:#fff}.alert.dark.alert-dismissible.alert-alt .close:focus,.alert.dark.alert-dismissible.alert-alt .close:hover{color:#fff}.alert.dark.alert-primary{color:#fff;background-color:#62a8ea;border-color:#62a8ea}.alert.dark.alert-primary hr{border-top-color:#4c9ce7}.alert.dark.alert-primary .alert-link{color:#e6e6e6}.alert.dark.alert-primary .close{color:#fff}.alert.dark.alert-primary .close:focus,.alert.dark.alert-primary .close:hover{color:#fff}.alert-alt.alert.dark.alert-primary{border-color:#2771b4}.alert-alt.alert.dark.alert-primary .alert-link,.alert-alt.alert.dark.alert-primary a{color:#fff}.alert.dark.alert-success{color:#fff;background-color:#46be8a;border-color:#46be8a}.alert.dark.alert-success hr{border-top-color:#3dae7d}.alert.dark.alert-success .alert-link{color:#e6e6e6}.alert.dark.alert-success .close{color:#fff}.alert.dark.alert-success .close:focus,.alert.dark.alert-success .close:hover{color:#fff}.alert-alt.alert.dark.alert-success{border-color:#247151}.alert-alt.alert.dark.alert-success .alert-link,.alert-alt.alert.dark.alert-success a{color:#fff}.alert.dark.alert-info{color:#fff;background-color:#57c7d4;border-color:#57c7d4}.alert.dark.alert-info hr{border-top-color:#43c0cf}.alert.dark.alert-info .alert-link{color:#e6e6e6}.alert.dark.alert-info .close{color:#fff}.alert.dark.alert-info .close:focus,.alert.dark.alert-info .close:hover{color:#fff}.alert-alt.alert.dark.alert-info{border-color:#2e8893}.alert-alt.alert.dark.alert-info .alert-link,.alert-alt.alert.dark.alert-info a{color:#fff}.alert.dark.alert-warning{color:#fff;background-color:#f2a654;border-color:#f2a654}.alert.dark.alert-warning hr{border-top-color:#f09a3c}.alert.dark.alert-warning .alert-link{color:#e6e6e6}.alert.dark.alert-warning .close{color:#fff}.alert.dark.alert-warning .close:focus,.alert.dark.alert-warning .close:hover{color:#fff}.alert-alt.alert.dark.alert-warning{border-color:#cb7314}.alert-alt.alert.dark.alert-warning .alert-link,.alert-alt.alert.dark.alert-warning a{color:#fff}.alert.dark.alert-danger{color:#fff;background-color:#f96868;border-color:#f96868}.alert.dark.alert-danger hr{border-top-color:#f84f4f}.alert.dark.alert-danger .alert-link{color:#e6e6e6}.alert.dark.alert-danger .close{color:#fff}.alert.dark.alert-danger .close:focus,.alert.dark.alert-danger .close:hover{color:#fff}.alert-alt.alert.dark.alert-danger{border-color:#d91d1f}.alert-alt.alert.dark.alert-danger .alert-link,.alert-alt.alert.dark.alert-danger a{color:#fff}.progress{height:15px;-webkit-box-shadow:none;box-shadow:none}.progress-bar{line-height:15px;-webkit-box-shadow:none;box-shadow:none}.progress-square{border-radius:0}.progress-circle{border-radius:1000px}.progress-vertical{position:relative;display:inline-block;width:15px;height:250px;min-height:250px;margin-right:30px;margin-bottom:0}.progress-vertical .progress-bar{width:100%}.progress-bar-indicating.active{position:relative;-webkit-animation:none;-o-animation:none;animation:none}.progress-bar-indicating.active:before{position:absolute;top:0;right:0;bottom:0;left:0;content:'';background-color:#fff;border-radius:inherit;opacity:0;-webkit-animation:progress-active 3s ease 0s infinite;-o-animation:progress-active 3s ease 0s infinite;animation:progress-active 3s ease 0s infinite}.progress-vertical .progress-bar-indicating.active:before{-webkit-animation-name:progress-vertical-active;-o-animation-name:progress-vertical-active;animation-name:progress-vertical-active}.progress-skill{position:relative}.progress-skill .progress-bar>span{position:absolute;top:0;right:10px;color:#526069}.progress-lg{height:22px}.progress-lg.progress-vertical{width:25px}.progress-lg .progress-bar{line-height:22px}.progress-sm{height:10px}.progress-sm.progress-vertical{width:10px}.progress-sm .progress-bar{line-height:10px}.progress-xs{height:4px;border-radius:1px}.progress-xs.progress-vertical{width:4px}.progress-xs .progress-bar{line-height:4px}.contextual-progress{margin:20px 0}.contextual-progress .progress-title{float:left}.contextual-progress .progress-label{position:relative;float:right}.contextual-progress .progress{height:2px;margin:5px 0}@-webkit-keyframes progress-active{0%{width:0;opacity:.4}100%{width:100%;opacity:0}}@-o-keyframes progress-active{0%{width:0;opacity:.4}100%{width:100%;opacity:0}}@keyframes progress-active{0%{width:0;opacity:.4}100%{width:100%;opacity:0}}@-webkit-keyframes progress-vertical-active{0%{top:0;opacity:0}100%{top:175px;opacity:.4}}@-o-keyframes progress-vertical-active{0%{top:0;opacity:0}100%{top:175px;opacity:.4}}@keyframes progress-vertical-active{0%{top:0;opacity:0}100%{top:175px;opacity:.4}}.media-object{width:120px}.media-left,.media>.pull-left{padding-right:20px}.media-right,.media>.pull-right{padding-left:20px}.media-body{overflow:auto}.media .media{padding-bottom:0;border-bottom:none}.media-meta{margin-bottom:3px;font-size:12px;color:#526069}.media-lg .media-object{width:160px}.media-lg .media{margin-left:-110px}.media-sm .media-object{width:80px}.media-sm .media{margin-left:-70px}.media-xs .media-object{width:60px}.media-xs .media{margin-left:-60px}@media screen and (min-width:768px){.media-body{overflow:hidden}.media .media{margin-left:0}}.list-group .media{padding:2px 0;border-bottom:0}.list-group .media .media-left,.list-group .media .pull-left{padding-right:20px}.list-group .media .media-right,.list-group .media .pull-right{padding-left:20px}.list-group .media .pull-right .status{margin-top:15px;margin-right:5px}.list-group .media .media-heading{font-size:14px}.list-group-full>.list-group-item{padding-right:0;padding-left:0}a.list-group-item{border-radius:3px}a.list-group-item.disabled,a.list-group-item.disabled:focus,a.list-group-item.disabled:hover{color:#ccd5db;background-color:#f3f7f9}a.list-group-item.active,a.list-group-item.active:focus,a.list-group-item.active:hover{color:#fff;background-color:#62a8ea}.list-group-item .icon{margin-right:10px}.list-group.bg-inherit{border-radius:3px}.list-group.bg-inherit .list-group-item{background-color:transparent;border-bottom-color:rgba(0,0,0,.075)}.list-group.bg-inherit .list-group-item:last-child{border-bottom-color:transparent}.list-group.bg-inherit .list-group-item:hover{background-color:rgba(0,0,0,.075);border-color:transparent}.list-group-bordered .list-group-item{border-color:#e4eaec}.list-group-bordered .list-group-item.active,.list-group-bordered .list-group-item.active:focus,.list-group-bordered .list-group-item.active:hover{color:#fff;background-color:#4e97d9;border-color:#4e97d9}.list-group-dividered .list-group-item{border-top-color:#e4eaec}.list-group-dividered .list-group-item.active:hover{border-top-color:#e4eaec}.list-group-dividered .list-group-item:last-child{border-bottom-color:#e4eaec}.list-group-dividered .list-group-item:first-child{border-top-color:transparent}.list-group-dividered .list-group-item:first-child.active:hover{border-top-color:transparent}.list-group-gap .list-group-item{margin-bottom:2px;border-radius:3px}.list-group-full .list-group-item{padding-right:0;padding-left:0}.list-group-item-dark{color:#fff;background-color:#526069}a.list-group-item-dark,button.list-group-item-dark{color:#fff}a.list-group-item-dark .list-group-item-heading,button.list-group-item-dark .list-group-item-heading{color:inherit}a.list-group-item-dark:focus,a.list-group-item-dark:hover,button.list-group-item-dark:focus,button.list-group-item-dark:hover{color:#fff;background-color:#47535b}a.list-group-item-dark.active,a.list-group-item-dark.active:focus,a.list-group-item-dark.active:hover,button.list-group-item-dark.active,button.list-group-item-dark.active:focus,button.list-group-item-dark.active:hover{color:#fff;background-color:#fff;border-color:#fff}.panel{position:relative;margin-bottom:30px;border-width:0}.panel>.nav-tabs-vertical .nav-tabs{margin-left:-1px}.panel>.nav-tabs-vertical .nav-tabs>li>a{border-left:none;border-radius:0}.panel>.nav-tabs-vertical .nav-tabs.nav-tabs-reverse{margin-right:-1px}.panel>.nav-tabs-vertical .nav-tabs.nav-tabs-reverse>li>a{border-right:none;border-radius:0}.panel:hover .panel-actions .show-on-hover{display:inline-block}.panel .panel-actions .show-on-hover{display:none}.panel.is-fullscreen{position:fixed;top:0;bottom:0;left:0;z-index:9999;width:100%;margin-bottom:0;border-radius:0}.panel.is-fullscreen .panel-loading{border-radius:0}.panel.is-fullscreen .panel-actions [data-toggle=collapse]{display:none}.panel.is-fullscreen .panel-body{max-height:100%;overflow:auto}.panel.is-close{display:none}.panel.is-collapse .panel-body{display:none;height:0}.panel>.alert{padding-right:30px;padding-left:30px}.panel>.alert-dismissible{padding-right:50px}@media screen and (max-width:480px){.panel>.alert{padding-right:20px;padding-left:20px}.panel>.alert-dismissible{padding-right:40px}}.panel>.table-responsive>.table>tbody>tr>td:first-child,.panel>.table-responsive>.table>tbody>tr>th:first-child,.panel>.table-responsive>.table>tfoot>tr>td:first-child,.panel>.table-responsive>.table>tfoot>tr>th:first-child,.panel>.table-responsive>.table>thead>tr>td:first-child,.panel>.table-responsive>.table>thead>tr>th:first-child,.panel>.table-responsive>.table>tr>td:first-child,.panel>.table-responsive>.table>tr>th:first-child,.panel>.table>tbody>tr>td:first-child,.panel>.table>tbody>tr>th:first-child,.panel>.table>tfoot>tr>td:first-child,.panel>.table>tfoot>tr>th:first-child,.panel>.table>thead>tr>td:first-child,.panel>.table>thead>tr>th:first-child,.panel>.table>tr>td:first-child,.panel>.table>tr>th:first-child{padding-left:30px}@media screen and (max-width:480px){.panel>.table-responsive>.table>tbody>tr>td:first-child,.panel>.table-responsive>.table>tbody>tr>th:first-child,.panel>.table-responsive>.table>tfoot>tr>td:first-child,.panel>.table-responsive>.table>tfoot>tr>th:first-child,.panel>.table-responsive>.table>thead>tr>td:first-child,.panel>.table-responsive>.table>thead>tr>th:first-child,.panel>.table-responsive>.table>tr>td:first-child,.panel>.table-responsive>.table>tr>th:first-child,.panel>.table>tbody>tr>td:first-child,.panel>.table>tbody>tr>th:first-child,.panel>.table>tfoot>tr>td:first-child,.panel>.table>tfoot>tr>th:first-child,.panel>.table>thead>tr>td:first-child,.panel>.table>thead>tr>th:first-child,.panel>.table>tr>td:first-child,.panel>.table>tr>th:first-child{padding-left:20px}}.panel>.table-responsive>.table>tbody>tr>td:last-child,.panel>.table-responsive>.table>tbody>tr>th:last-child,.panel>.table-responsive>.table>tfoot>tr>td:last-child,.panel>.table-responsive>.table>tfoot>tr>th:last-child,.panel>.table-responsive>.table>thead>tr>td:last-child,.panel>.table-responsive>.table>thead>tr>th:last-child,.panel>.table-responsive>.table>tr>td:last-child,.panel>.table-responsive>.table>tr>th:last-child,.panel>.table>tbody>tr>td:last-child,.panel>.table>tbody>tr>th:last-child,.panel>.table>tfoot>tr>td:last-child,.panel>.table>tfoot>tr>th:last-child,.panel>.table>thead>tr>td:last-child,.panel>.table>thead>tr>th:last-child,.panel>.table>tr>td:last-child,.panel>.table>tr>th:last-child{padding-right:30px}@media screen and (max-width:480px){.panel>.table-responsive>.table>tbody>tr>td:last-child,.panel>.table-responsive>.table>tbody>tr>th:last-child,.panel>.table-responsive>.table>tfoot>tr>td:last-child,.panel>.table-responsive>.table>tfoot>tr>th:last-child,.panel>.table-responsive>.table>thead>tr>td:last-child,.panel>.table-responsive>.table>thead>tr>th:last-child,.panel>.table-responsive>.table>tr>td:last-child,.panel>.table-responsive>.table>tr>th:last-child,.panel>.table>tbody>tr>td:last-child,.panel>.table>tbody>tr>th:last-child,.panel>.table>tfoot>tr>td:last-child,.panel>.table>tfoot>tr>th:last-child,.panel>.table>thead>tr>td:last-child,.panel>.table>thead>tr>th:last-child,.panel>.table>tr>td:last-child,.panel>.table>tr>th:last-child{padding-right:20px}}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:1px solid #e4eaec}.panel>.list-group>.list-group-item{padding-right:30px;padding-left:30px}@media screen and (max-width:480px){.panel>.list-group>.list-group-item{padding-right:20px;padding-left:20px}}.panel-content>.row{padding-right:30px;padding-left:30px}.panel-content>.row>[class*=col-]{padding-right:30px;padding-left:30px}.panel-heading{position:relative;padding:0;border-bottom:1px solid transparent}.panel-heading+.alert{border-radius:0}.panel-heading>.nav-tabs{border-bottom:none}.panel-heading+.nav-tabs{margin-top:-10px}.panel-body{position:relative}.panel-heading+.panel-body{padding-top:0}.panel-body .h1:first-child,.panel-body .h2:first-child,.panel-body .h3:first-child,.panel-body .h4:first-child,.panel-body .h5:first-child,.panel-body .h6:first-child,.panel-body h1:first-child,.panel-body h2:first-child,.panel-body h3:first-child,.panel-body h4:first-child,.panel-body h5:first-child,.panel-body h6:first-child{margin-top:0}.panel-body>:last-child{margin-bottom:0}.panel-body>.list-group-dividered:only-child>.list-group-item:last-child{border-bottom-color:transparent}.panel-footer{border-top:1px solid transparent}.table+.panel-footer{padding-top:15px;border-color:#e4eaec}.panel-title{display:block;padding:20px 30px;font-size:18px;color:#37474f}.panel-title>.icon{margin-right:10px}.panel-title>.label{margin-left:10px}.panel-title small{color:#76838f}.panel-desc{display:block;padding:5px 0 0;margin:0;font-size:14px;color:#76838f}.panel-actions{position:absolute;top:50%;right:30px;z-index:1;margin:auto;-webkit-transform:translate(0,-50%);-ms-transform:translate(0,-50%);-o-transform:translate(0,-50%);transform:translate(0,-50%)}@media screen and (max-width:480px){.panel-actions{right:20px}}ul.panel-actions{list-style:none}ul.panel-actions>li{display:inline-block;margin-left:8px}ul.panel-actions>li:first-child{margin-left:0}.panel-actions a{color:inherit}.panel-actions a.dropdown-toggle{text-decoration:none}.panel-actions .dropdown{display:inline-block}.panel-actions .dropdown-toggle{display:inline-block}.panel-actions .panel-action{display:inline-block;padding:8px 10px;color:#a3afb7;text-decoration:none;cursor:pointer;background-color:transparent}.panel-actions .panel-action:hover{color:#526069}.panel-actions .panel-action:active{color:#526069}.panel-actions .panel-action:focus{outline:0}.panel-actions .progress{width:100px;margin:0}.panel-actions .pagination{margin:0}.panel-toolbar{padding:5px 15px;margin:0;background-color:transparent;border-top:1px solid #e4eaec;border-bottom:1px solid #e4eaec}.panel-bordered .panel-toolbar{border-top-color:transparent}.panel-toolbar .btn{padding:5px 10px;color:#a3afb7}.panel-toolbar .btn.icon{width:1em;text-align:center}.panel-toolbar .btn.active,.panel-toolbar .btn:active,.panel-toolbar .btn:hover{color:#76838f}.panel-loading{position:absolute;top:0;left:0;z-index:6;display:none;width:100%;height:100%;border-radius:4px;opacity:.6}.panel-loading .loader{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.panel>:not(.panel-loading):not(.collapsing){-webkit-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}.panel.is-loading>:not(.panel-loading){opacity:.3}.panel.is-loading .panel-loading{display:block;opacity:1}.panel-footer-chart{padding:0}.panel-control{padding:0;border:none;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.panel-body.scrollable-vertical{padding-right:0!important;padding-left:0!important}.panel-body.scrollable-vertical>.scrollable-container>.scrollable-content{padding-right:30px;padding-left:30px}@media screen and (max-width:480px){.panel-body.scrollable-vertical>.scrollable-container>.scrollable-content{padding-right:20px;padding-left:20px}}.panel-body.scrollable-vertical>.scrollable-bar{height:-webkit-calc(100% - 30px);height:calc(100% - 30px);margin-top:0;margin-bottom:30px;-webkit-transform:translateX(-26px);-ms-transform:translateX(-26px);-o-transform:translateX(-26px);transform:translateX(-26px)}.panel-bordered>.panel-body.scrollable-vertical>.scrollable-bar{height:-webkit-calc(100% - 60px);height:calc(100% - 60px);margin-bottom:30px}.panel-body.scrollable-horizontal{padding-top:0!important;padding-bottom:0!important}.panel-body.scrollable-horizontal>.scrollable-container>.scrollable-content{padding-top:0;padding-bottom:30px}.panel-bordered>.panel-body.scrollable-horizontal>.scrollable-container>.scrollable-content{padding-top:30px;padding-bottom:30px}.panel-body.scrollable-horizontal>.scrollable-bar{width:-webkit-calc(100% - 60px);width:calc(100% - 60px);margin-right:30px;margin-left:0;-webkit-transform:translateY(-26px);-ms-transform:translateY(-26px);-o-transform:translateY(-26px);transform:translateY(-26px)}@media screen and (max-width:480px){.panel-body.scrollable-horizontal>.scrollable-bar{width:-webkit-calc(100% - 40px);width:calc(100% - 40px);margin-right:20px}}.panel-bordered>.panel-body.scrollable-horizontal>.scrollable-bar{-webkit-transform:translateY(-26px);-ms-transform:translateY(-26px);-o-transform:translateY(-26px);transform:translateY(-26px)}.panel-bordered>.panel-heading{border-bottom:1px solid #e4eaec}.panel-bordered>.panel-heading>.panel-title{padding-bottom:20px}.panel-bordered>.panel-footer{padding-top:15px;border-top:1px solid #e4eaec}.panel-bordered>.panel-body{padding-top:30px}.panel-bordered>.table>tbody:first-child>tr:first-child td,.panel-bordered>.table>tbody:first-child>tr:first-child th{border-top:0}.panel.is-dragging{opacity:.8}.panel.is-dragging{cursor:move}.panel.panel-transparent{background:0 0;border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.panel.panel-transparent>.panel-footer,.panel.panel-transparent>.panel-heading{border-color:transparent}.panel-dark{border-color:#526069}.panel-dark>.panel-heading{color:#fff;background-color:#526069;border-color:#526069}.panel-dark>.panel-heading+.panel-collapse>.panel-body{border-top-color:#526069}.panel-dark>.panel-heading .badge{color:#526069;background-color:#fff}.panel-dark>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#526069}.panel-danger,.panel-dark,.panel-info,.panel-primary,.panel-success,.panel-warning{border:none}.panel-danger .panel-heading,.panel-dark .panel-heading,.panel-info .panel-heading,.panel-primary .panel-heading,.panel-success .panel-heading,.panel-warning .panel-heading{border:none}.panel-danger .panel-title,.panel-dark .panel-title,.panel-info .panel-title,.panel-primary .panel-title,.panel-success .panel-title,.panel-warning .panel-title{color:#fff}.panel-danger .panel-action,.panel-dark .panel-action,.panel-info .panel-action,.panel-primary .panel-action,.panel-success .panel-action,.panel-warning .panel-action{color:#fff}@media screen and (max-width:480px){.panel-actions{right:20px}.panel-actions .progress{min-width:80px}.panel-actions .show-on-hover{display:none}.panel-body,.panel-footer,.panel-title{padding-right:20px;padding-left:20px}}.well{padding:20px}.well-lg{padding:24px}.well-sm{padding:12px}.well{-webkit-box-shadow:inset 0 0 1px rgba(0,0,0,.02);box-shadow:inset 0 0 1px rgba(0,0,0,.02)}.well-primary{color:#fff;background-color:#62a8ea}.well-success{color:#fff;background-color:#46be8a}.well-info{color:#fff;background-color:#57c7d4}.well-warning{color:#fff;background-color:#f2a654}.well-danger{color:#fff;background-color:#f96868}.close.icon{font-size:inherit}body{font-weight:300}th{font-weight:400}b,strong{font-weight:500}optgroup{font-weight:500}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:300}.lead{font-weight:100}dt{font-weight:500}kbd kbd{font-weight:500}label{font-weight:300}.checkbox label,.radio label{font-weight:300}.checkbox-inline,.radio-inline{font-weight:300}.btn-link{font-weight:300}.dropdown-menu>li>a{font-weight:100}.input-group-addon{font-weight:300}.label{font-weight:500}.popover{font-weight:300}.tooltip{font-weight:300}.modal-content{border:none;border-radius:4px;-webkit-box-shadow:0 2px 12px rgba(0,0,0,.2);box-shadow:0 2px 12px rgba(0,0,0,.2)}.modal-header{padding:15px 20px;border-bottom:none}.modal-header .close{margin-top:1px}.modal-body{padding:20px}.modal-footer{padding:20px;border-top:none}.modal-top{margin:0 auto}.modal-center{display:-ms-flexbox;display:-webkit-flex;display:-webkit-box;display:flex;height:100%;margin:0 auto;-webkit-justify-content:center;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-align-content:stretch;-ms-flex-line-pack:center;align-content:center}.modal-bottom{display:-ms-flexbox;display:-webkit-flex;display:-webkit-box;display:flex;height:100%;margin:0 auto;-webkit-justify-content:flex-end;-ms-flex-pack:end;-webkit-box-pack:end;justify-content:flex-end;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-align-content:stretch;-ms-flex-line-pack:center;align-content:center}.modal-sidebar{position:absolute;right:0;display:-ms-flexbox;display:-webkit-flex;display:-webkit-box;display:flex;height:100%;margin:0;background-color:#fff;-webkit-justify-content:center;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-align-content:stretch;-ms-flex-line-pack:center;align-content:center}.modal-sidebar .modal-content{background-color:transparent;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.modal-sidebar .modal-header{border-bottom:none}.modal-sidebar .modal-footer{border-top:none}.modal-sidebar button.close{position:fixed;top:20px;right:20px}.modal.fade .modal-dialog.modal-sidebar{-webkit-transform:translate(25%,0);-ms-transform:translate(25%,0);-o-transform:translate(25%,0);transform:translate(25%,0)}.modal.in .modal-dialog.modal-sidebar{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-fill-in{background-color:transparent}.modal-fill-in.in{background-color:rgba(255,255,255,.95);opacity:1}.modal-fill-in .modal-dialog{display:-ms-flexbox;display:-webkit-flex;display:-webkit-box;display:flex;width:100%;height:100%;margin:0 auto;-webkit-justify-content:center;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-align-content:stretch;-ms-flex-line-pack:center;align-content:center;-webkit-align-items:center;-ms-flex-align:center;-webkit-box-align:center;align-items:center}@media (min-width:768px){.modal-fill-in .modal-dialog>*{width:600px}.modal-fill-in .modal-dialog.modal-sm>*{width:300px}.modal-fill-in .modal-dialog button.close{position:fixed;top:20px;right:20px;z-index:1;filter:alpha(opacity=50);opacity:.5;-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}}@media (min-width:992px){.modal-fill-in .modal-dialog.modal-lg>*{width:900px}}.modal-fill-in .modal-content{background-color:transparent;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.modal-fill-in .modal-header{border-bottom:none}.modal-fill-in .modal-footer{border-top:none}.modal-primary .modal-header{background-color:#62a8ea;border-radius:4px 4px 0 0}.modal-primary .modal-header *{color:#fff}.modal-primary .modal-header .close{opacity:.6}.modal-success .modal-header{background-color:#46be8a;border-radius:4px 4px 0 0}.modal-success .modal-header *{color:#fff}.modal-success .modal-header .close{opacity:.6}.modal-info .modal-header{background-color:#57c7d4;border-radius:4px 4px 0 0}.modal-info .modal-header *{color:#fff}.modal-info .modal-header .close{opacity:.6}.modal-warning .modal-header{background-color:#f2a654;border-radius:4px 4px 0 0}.modal-warning .modal-header *{color:#fff}.modal-warning .modal-header .close{opacity:.6}.modal-danger .modal-header{background-color:#f96868;border-radius:4px 4px 0 0}.modal-danger .modal-header *{color:#fff}.modal-danger .modal-header .close{opacity:.6}.modal.modal-fade-in-scale-up .modal-dialog{opacity:0;-webkit-transition:all .3s ease 0s;-o-transition:all .3s ease 0s;transition:all .3s ease 0s;-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.modal.modal-fade-in-scale-up.in .modal-dialog{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.modal.modal-slide-in-right .modal-dialog{opacity:0;-webkit-transition:all .3s cubic-bezier(.25,.5,.5,.9 0s);-o-transition:all .3s cubic-bezier(.25,.5,.5,.9 0s);transition:all .3s cubic-bezier(.25,.5,.5,.9 0s);-webkit-transform:translate(20%,0);-ms-transform:translate(20%,0);-o-transform:translate(20%,0);transform:translate(20%,0)}.modal.modal-slide-in-right.in .modal-dialog{opacity:1;-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal.modal-slide-from-bottom .modal-dialog{opacity:0;-webkit-transition:all .3s ease 0s;-o-transition:all .3s ease 0s;transition:all .3s ease 0s;-webkit-transform:translate(0,20%);-ms-transform:translate(0,20%);-o-transform:translate(0,20%);transform:translate(0,20%)}.modal.modal-slide-from-bottom.in .modal-dialog{opacity:1;-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal.modal-newspaper .modal-dialog{opacity:0;-webkit-transition:all .5s ease 0s;-o-transition:all .5s ease 0s;transition:all .5s ease 0s;-webkit-transform:scale(0) rotate(720deg);-ms-transform:scale(0) rotate(720deg);-o-transform:scale(0) rotate(720deg);transform:scale(0) rotate(720deg)}.modal.modal-newspaper.in .modal-dialog{opacity:1;-webkit-transform:scale(1) rotate(0);-ms-transform:scale(1) rotate(0);-o-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}.modal.modal-fall{-webkit-perspective:1300px;perspective:1300px}.modal.modal-fall .modal-dialog{opacity:0;-webkit-transform:translateZ(600px) rotateX(20deg);-ms-transform:translateZ(600px) rotateX(20deg);transform:translateZ(600px) rotateX(20deg);-ms-transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.modal.modal-fall.in .modal-dialog{opacity:1;-webkit-transition:all .3s ease-in 0s;-o-transition:all .3s ease-in 0s;transition:all .3s ease-in 0s;-webkit-transform:translateZ(0) rotateX(0);-ms-transform:translateZ(0) rotateX(0);transform:translateZ(0) rotateX(0)}.modal.modal-side-fall{-webkit-perspective:1300px;perspective:1300px}.modal.modal-side-fall .modal-dialog{-webkit-transform:translate(30%) translateZ(600px) rotate(10deg);-ms-transform:translate(30%) translateZ(600px) rotate(10deg);transform:translate(30%) translateZ(600px) rotate(10deg);-ms-transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.modal.modal-side-fall.in .modal-dialog{-webkit-transition:all .3s ease-in 0s;-o-transition:all .3s ease-in 0s;transition:all .3s ease-in 0s;-webkit-transform:translate(0) translateZ(0) rotate(0);-ms-transform:translate(0) translateZ(0) rotate(0);transform:translate(0) translateZ(0) rotate(0)}.modal.modal-3d-flip-horizontal{-webkit-perspective:1300px;perspective:1300px}.modal.modal-3d-flip-horizontal .modal-dialog{-webkit-transition:all .3s ease 0s;-o-transition:all .3s ease 0s;transition:all .3s ease 0s;-webkit-transform:rotateY(-70deg);-ms-transform:rotateY(-70deg);-o-transform:rotateY(-70deg);transform:rotateY(-70deg);-ms-transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.modal.modal-3d-flip-horizontal.in .modal-dialog{-webkit-transform:rotateY(0);-ms-transform:rotateY(0);-o-transform:rotateY(0);transform:rotateY(0)}.modal.modal-3d-flip-vertical{-webkit-perspective:1300px;perspective:1300px}.modal.modal-3d-flip-vertical .modal-dialog{-webkit-transition:all .3s ease 0s;-o-transition:all .3s ease 0s;transition:all .3s ease 0s;-webkit-transform:rotateX(-70deg);-ms-transform:rotateX(-70deg);-o-transform:rotateX(-70deg);transform:rotateX(-70deg);-ms-transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.modal.modal-3d-flip-vertical.in .modal-dialog{-webkit-transform:rotateX(0);-ms-transform:rotateX(0);-o-transform:rotateX(0);transform:rotateX(0)}.modal.modal-3d-sign{-webkit-perspective:1300px;perspective:1300px}.modal.modal-3d-sign .modal-dialog{-webkit-transition:all .3s ease 0s;-o-transition:all .3s ease 0s;transition:all .3s ease 0s;-webkit-transform:rotateX(-60deg);-ms-transform:rotateX(-60deg);-o-transform:rotateX(-60deg);transform:rotateX(-60deg);-webkit-transform-origin:50% 0 0;-ms-transform-origin:50% 0 0;-o-transform-origin:50% 0 0;transform-origin:50% 0 0;-ms-transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.modal.modal-3d-sign.in .modal-dialog{-webkit-transform:rotateX(0);-ms-transform:rotateX(0);-o-transform:rotateX(0);transform:rotateX(0)}.modal.modal-super-scaled .modal-dialog{opacity:0;-webkit-transition:all .3s ease 0s;-o-transition:all .3s ease 0s;transition:all .3s ease 0s;-webkit-transform:scale(2);-ms-transform:scale(2);-o-transform:scale(2);transform:scale(2)}.modal.modal-super-scaled.in .modal-dialog{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.modal.modal-just-me .modal-dialog{opacity:0;-webkit-transition:all .3s ease 0s;-o-transition:all .3s ease 0s;transition:all .3s ease 0s;-webkit-transform:scale(.8);-ms-transform:scale(.8);-o-transform:scale(.8);transform:scale(.8)}.modal.modal-just-me .modal-backdrop{background-color:#fff}.modal.modal-just-me.in{background:#fff}.modal.modal-just-me.in .modal-dialog{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.modal.modal-just-me.in .modal-backdrop{opacity:1}.modal.modal-3d-slit{-webkit-perspective:1300px;perspective:1300px}.modal.modal-3d-slit .modal-dialog{opacity:0;-webkit-transition:all .5s ease 0s;-o-transition:all .5s ease 0s;transition:all .5s ease 0s;-webkit-transform:translateZ(-3000px) rotateY(90deg);-ms-transform:translateZ(-3000px) rotateY(90deg);transform:translateZ(-3000px) rotateY(90deg);-ms-transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.modal.modal-3d-slit.in .modal-dialog{-webkit-animation-name:slit;-o-animation-name:slit;animation-name:slit;-webkit-animation-duration:.7s;-o-animation-duration:.7s;animation-duration:.7s;-webkit-animation-timing-function:ease-out;-o-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-fill-mode:forwards;-o-animation-fill-mode:forwards;animation-fill-mode:forwards}.modal.modal-rotate-from-bottom{-webkit-perspective:1300px;perspective:1300px}.modal.modal-rotate-from-bottom .modal-dialog{-webkit-transition:all .3s ease-out 0s;-o-transition:all .3s ease-out 0s;transition:all .3s ease-out 0s;-webkit-transform:translateY(100%) rotateX(90deg);-ms-transform:translateY(100%) rotateX(90deg);transform:translateY(100%) rotateX(90deg);-webkit-transform-origin:0 100% 0;-ms-transform-origin:0 100% 0;-o-transform-origin:0 100% 0;transform-origin:0 100% 0;-ms-transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.modal.modal-rotate-from-bottom.in .modal-dialog{-webkit-transform:translateY(0) rotateX(0);-ms-transform:translateY(0) rotateX(0);transform:translateY(0) rotateX(0)}.modal.modal-rotate-from-left{-webkit-perspective:1300px;perspective:1300px}.modal.modal-rotate-from-left .modal-dialog{-webkit-transition:all .3s ease-out 0s;-o-transition:all .3s ease-out 0s;transition:all .3s ease-out 0s;-webkit-transform:translateZ(100px) translateX(-30%) rotateY(90deg);-ms-transform:translateZ(100px) translateX(-30%) rotateY(90deg);transform:translateZ(100px) translateX(-30%) rotateY(90deg);-webkit-transform-origin:0 100% 0;-ms-transform-origin:0 100% 0;-o-transform-origin:0 100% 0;transform-origin:0 100% 0;-ms-transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.modal.modal-rotate-from-left.in .modal-dialog{-webkit-transform:translateZ(0) translateX(0) rotateY(0);-ms-transform:translateZ(0) translateX(0) rotateY(0);transform:translateZ(0) translateX(0) rotateY(0)}@-webkit-keyframes slit{50%{opacity:.5;-webkit-transform:translateZ(-250px) rotateY(89deg);-ms-transform:translateZ(-250px) rotateY(89deg);transform:translateZ(-250px) rotateY(89deg)}100%{opacity:1;-webkit-transform:translateZ(0) rotateY(0);-ms-transform:translateZ(0) rotateY(0);transform:translateZ(0) rotateY(0)}}@-o-keyframes slit{50%{opacity:.5;-webkit-transform:translateZ(-250px) rotateY(89deg);-ms-transform:translateZ(-250px) rotateY(89deg);transform:translateZ(-250px) rotateY(89deg)}100%{opacity:1;-webkit-transform:translateZ(0) rotateY(0);-ms-transform:translateZ(0) rotateY(0);transform:translateZ(0) rotateY(0)}}@keyframes slit{50%{opacity:.5;-webkit-transform:translateZ(-250px) rotateY(89deg);-ms-transform:translateZ(-250px) rotateY(89deg);transform:translateZ(-250px) rotateY(89deg)}100%{opacity:1;-webkit-transform:translateZ(0) rotateY(0);-ms-transform:translateZ(0) rotateY(0);transform:translateZ(0) rotateY(0)}}.tooltip-inner{padding:6px 12px}.tooltip-primary+.tooltip .tooltip-inner{color:#fff;background-color:#62a8ea}.tooltip-primary+.tooltip.top .tooltip-arrow{border-top-color:#62a8ea}.tooltip-primary+.tooltip.right .tooltip-arrow{border-right-color:#62a8ea}.tooltip-primary+.tooltip.bottom .tooltip-arrow{border-bottom-color:#62a8ea}.tooltip-primary+.tooltip.left .tooltip-arrow{border-left-color:#62a8ea}.tooltip-success+.tooltip .tooltip-inner{color:#fff;background-color:#46be8a}.tooltip-success+.tooltip.top .tooltip-arrow{border-top-color:#46be8a}.tooltip-success+.tooltip.right .tooltip-arrow{border-right-color:#46be8a}.tooltip-success+.tooltip.bottom .tooltip-arrow{border-bottom-color:#46be8a}.tooltip-success+.tooltip.left .tooltip-arrow{border-left-color:#46be8a}.tooltip-info+.tooltip .tooltip-inner{color:#fff;background-color:#57c7d4}.tooltip-info+.tooltip.top .tooltip-arrow{border-top-color:#57c7d4}.tooltip-info+.tooltip.right .tooltip-arrow{border-right-color:#57c7d4}.tooltip-info+.tooltip.bottom .tooltip-arrow{border-bottom-color:#57c7d4}.tooltip-info+.tooltip.left .tooltip-arrow{border-left-color:#57c7d4}.tooltip-warning+.tooltip .tooltip-inner{color:#fff;background-color:#f2a654}.tooltip-warning+.tooltip.top .tooltip-arrow{border-top-color:#f2a654}.tooltip-warning+.tooltip.right .tooltip-arrow{border-right-color:#f2a654}.tooltip-warning+.tooltip.bottom .tooltip-arrow{border-bottom-color:#f2a654}.tooltip-warning+.tooltip.left .tooltip-arrow{border-left-color:#f2a654}.tooltip-danger+.tooltip .tooltip-inner{color:#fff;background-color:#f96868}.tooltip-danger+.tooltip.top .tooltip-arrow{border-top-color:#f96868}.tooltip-danger+.tooltip.right .tooltip-arrow{border-right-color:#f96868}.tooltip-danger+.tooltip.bottom .tooltip-arrow{border-bottom-color:#f96868}.tooltip-danger+.tooltip.left .tooltip-arrow{border-left-color:#f96868}.tooltip-rotate+.tooltip{opacity:0;-webkit-animation:tooltip-rotate3d 1s ease .1s forwards;-o-animation:tooltip-rotate3d 1s ease .1s forwards;animation:tooltip-rotate3d 1s ease .1s forwards}@-webkit-keyframes tooltip-rotate3d{0%{opacity:0;-webkit-transform:rotate(15deg);transform:rotate(15deg)}100%{opacity:1;-webkit-transform:rotate(0);transform:rotate(0)}}@-o-keyframes tooltip-rotate3d{0%{opacity:0;-o-transform:rotate(15deg);transform:rotate(15deg)}100%{opacity:1;-o-transform:rotate(0);transform:rotate(0)}}@keyframes tooltip-rotate3d{0%{opacity:0;-webkit-transform:rotate(15deg);-o-transform:rotate(15deg);transform:rotate(15deg)}100%{opacity:1;-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}}.tooltip-scale+.tooltip{-webkit-animation:tooltip-scale3d 1s ease 0s forwards;-o-animation:tooltip-scale3d 1s ease 0s forwards;animation:tooltip-scale3d 1s ease 0s forwards}@-webkit-keyframes tooltip-scale3d{0%{opacity:0;-webkit-transform:scale3d(.7,.3,1) translate(50%,50%);transform:scale3d(.7,.3,1) translate(50%,50%)}100%{opacity:1;-webkit-transform:scale3d(1,1,1) translate(50%,50%);transform:scale3d(1,1,1) translate(50%,50%)}}@-o-keyframes tooltip-scale3d{0%{opacity:0;transform:scale3d(.7,.3,1) translate(50%,50%)}100%{opacity:1;transform:scale3d(1,1,1) translate(50%,50%)}}@keyframes tooltip-scale3d{0%{opacity:0;-webkit-transform:scale3d(.7,.3,1) translate(50%,50%);transform:scale3d(.7,.3,1) translate(50%,50%)}100%{opacity:1;-webkit-transform:scale3d(1,1,1) translate(50%,50%);transform:scale3d(1,1,1) translate(50%,50%)}}.popover{padding:0;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.05);box-shadow:0 2px 6px rgba(0,0,0,.05)}.popover.bottom>.arrow:after{border-bottom-color:#f3f7f9}.popover-content{padding:20px}.popover-primary+.popover .popover-title{color:#fff;background-color:#62a8ea;border-color:#62a8ea}.popover-primary+.popover.bottom .arrow{border-bottom-color:#62a8ea}.popover-primary+.popover.bottom .arrow:after{border-bottom-color:#62a8ea}.popover-success+.popover .popover-title{color:#fff;background-color:#46be8a;border-color:#46be8a}.popover-success+.popover.bottom .arrow{border-bottom-color:#46be8a}.popover-success+.popover.bottom .arrow:after{border-bottom-color:#46be8a}.popover-info+.popover .popover-title{color:#fff;background-color:#57c7d4;border-color:#57c7d4}.popover-info+.popover.bottom .arrow{border-bottom-color:#57c7d4}.popover-info+.popover.bottom .arrow:after{border-bottom-color:#57c7d4}.popover-warning+.popover .popover-title{color:#fff;background-color:#f2a654;border-color:#f2a654}.popover-warning+.popover.bottom .arrow{border-bottom-color:#f2a654}.popover-warning+.popover.bottom .arrow:after{border-bottom-color:#f2a654}.popover-danger+.popover .popover-title{color:#fff;background-color:#f96868;border-color:#f96868}.popover-danger+.popover.bottom .arrow{border-bottom-color:#f96868}.popover-danger+.popover.bottom .arrow:after{border-bottom-color:#f96868}.popover-rotate+.popover{opacity:0;-webkit-animation:popover-rotate3d 1s ease .1s forwards;-o-animation:popover-rotate3d 1s ease .1s forwards;animation:popover-rotate3d 1s ease .1s forwards}@-webkit-keyframes popover-rotate3d{0%{opacity:0;-webkit-transform:rotate(15deg);transform:rotate(15deg)}100%{opacity:1;-webkit-transform:rotate(0);transform:rotate(0)}}@-o-keyframes popover-rotate3d{0%{opacity:0;-o-transform:rotate(15deg);transform:rotate(15deg)}100%{opacity:1;-o-transform:rotate(0);transform:rotate(0)}}@keyframes popover-rotate3d{0%{opacity:0;-webkit-transform:rotate(15deg);-o-transform:rotate(15deg);transform:rotate(15deg)}100%{opacity:1;-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}}.popover-scale+.popover{-webkit-animation:popover-scale3d 1s ease 0s forwards;-o-animation:popover-scale3d 1s ease 0s forwards;animation:popover-scale3d 1s ease 0s forwards}@-webkit-keyframes popover-scale3d{0%{opacity:0;-webkit-transform:scale3d(.7,.3,1) translate(50%,50%);transform:scale3d(.7,.3,1) translate(50%,50%)}100%{opacity:1;-webkit-transform:scale3d(1,1,1) translate(50%,50%);transform:scale3d(1,1,1) translate(50%,50%)}}@-o-keyframes popover-scale3d{0%{opacity:0;transform:scale3d(.7,.3,1) translate(50%,50%)}100%{opacity:1;transform:scale3d(1,1,1) translate(50%,50%)}}@keyframes popover-scale3d{0%{opacity:0;-webkit-transform:scale3d(.7,.3,1) translate(50%,50%);transform:scale3d(.7,.3,1) translate(50%,50%)}100%{opacity:1;-webkit-transform:scale3d(1,1,1) translate(50%,50%);transform:scale3d(1,1,1) translate(50%,50%)}}.carousel-control{min-width:50px}.carousel-control:focus,.carousel-control:hover{filter:alpha(opacity=40);opacity:.4}.carousel-control .icon{position:absolute;top:50%;z-index:5;display:inline-block;width:16px;height:16px;margin-top:-8px}.carousel-control.left .icon{left:50%;margin-left:-8px}.carousel-control.right .icon{right:50%;margin-right:-8px}.carousel-caption h1,.carousel-caption h2,.carousel-caption h3,.carousel-caption h4,.carousel-caption h5,.carousel-caption h6{color:inherit}.carousel-indicators{margin-bottom:0}.carousel-indicators li{margin:3px;background-color:rgba(255,255,255,.3);border:none}.carousel-indicators .active{width:10px;height:10px;margin:3px}.carousel-indicators-scaleup li{border:none;-webkit-transition:-webkit-transform .3s ease 0s,background-color .3s ease 0s;-o-transition:-o-transform .3s ease 0s,background-color .3s ease 0s;transition:transform .3s ease 0s,background-color .3s ease 0s}.carousel-indicators-scaleup .active{-webkit-transform:scale(1.5);-ms-transform:scale(1.5);-o-transform:scale(1.5);transform:scale(1.5)}.carousel-indicators-fillin li{background-color:transparent;-webkit-box-shadow:0 0 0 2px #fff inset;box-shadow:0 0 0 2px #fff inset;-webkit-transition:-webkit-box-shadow .3s ease 0s;-o-transition:box-shadow .3s ease 0s;transition:box-shadow .3s ease 0s}.carousel-indicators-fillin .active{-webkit-box-shadow:0 0 0 8px #fff inset;box-shadow:0 0 0 8px #fff inset}.carousel-indicators-fall li{position:relative;-webkit-transition:-webkit-transform .3s ease 0s,background-color .3s ease 0s;-o-transition:-o-transform .3s ease 0s,background-color .3s ease 0s;transition:transform .3s ease 0s,background-color .3s ease 0s}.carousel-indicators-fall li:after{position:absolute;top:0;left:0;width:100%;height:100%;visibility:hidden;content:'';background-color:rgba(0,0,0,.3);border-radius:50%;opacity:0;-webkit-transition:opacity .3s ease 0s,visibility 0s ease .3s;-o-transition:opacity .3s ease 0s,visibility 0s ease .3s;transition:opacity .3s ease 0s,visibility 0s ease .3s;-webkit-transform:translate(0,-200%);-ms-transform:translate(0,-200%);-o-transform:translate(0,-200%);transform:translate(0,-200%)}.carousel-indicators-fall .active{background-color:transparent;-webkit-transform:translate(0,200%);-ms-transform:translate(0,200%);-o-transform:translate(0,200%);transform:translate(0,200%)}.carousel-indicators-fall .active:after{visibility:visible;opacity:1;-webkit-transition:opacity .3s ease 0s;-o-transition:opacity .3s ease 0s;transition:opacity .3s ease 0s}@media screen and (min-width:768px){.carousel-control .icon{width:24px;height:24px;margin-top:-12px;font-size:24px}.carousel-control.left .icon{margin-left:-12px}.carousel-control.right .icon{margin-right:-12px}}.vertical-align{font-size:0}.vertical-align:before{display:inline-block;height:100%;vertical-align:middle;content:\"\"}.vertical-align-bottom,.vertical-align-middle{display:inline-block;max-width:100%;font-size:14px}.vertical-align-middle{vertical-align:middle}.vertical-align-bottom{vertical-align:bottom}.inline{display:inline!important}.inline-block{display:inline-block!important}.block{display:block!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;word-wrap:normal;white-space:nowrap}.text-break{-webkit-hyphens:auto;-moz-hyphens:auto;hyphens:auto;word-wrap:break-word;white-space:normal;-ms-hyphens:auto}.text-nowrap{white-space:nowrap}.text-top{vertical-align:top!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}.text-justify{text-align:justify!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-unset{font-weight:unset!important}.font-weight-100{font-weight:100!important}.font-weight-200{font-weight:200!important}.font-weight-300{font-weight:300!important}.font-weight-400{font-weight:400!important}.font-weight-500{font-weight:500!important}.font-weight-600{font-weight:600!important}.font-weight-700{font-weight:700!important}.font-weight-800{font-weight:800!important}.font-weight-900{font-weight:900!important}.font-weight-light{font-weight:100!important}.font-weight-normal{font-weight:300!important}.font-weight-medium{font-weight:400!important}.font-weight-bold{font-weight:500!important}.font-size-0{font-size:0!important}.font-size-10{font-size:10px!important}.font-size-12{font-size:12px!important}.font-size-14{font-size:14px!important}.font-size-16{font-size:16px!important}.font-size-18{font-size:18px!important}.font-size-20{font-size:20px!important}.font-size-24{font-size:24px!important}.font-size-26{font-size:26px!important}.font-size-30{font-size:30px!important}.font-size-40{font-size:40px!important}.font-size-50{font-size:50px!important}.font-size-60{font-size:60px!important}.font-size-70{font-size:70px!important}.font-size-80{font-size:80px!important}.visible-xlg{display:none!important}.visible-xlg-block,.visible-xlg-inline,.visible-xlg-inline-block{display:none!important}@media (min-width:1600px){.visible-xlg{display:block!important}table.visible-xlg{display:table!important}tr.visible-xlg{display:table-row!important}td.visible-xlg,th.visible-xlg{display:table-cell!important}}@media (min-width:1600px){.visible-xlg-block{display:block!important}}@media (min-width:1600px){.visible-xlg-inline{display:inline!important}}@media (min-width:1200px){.visible-xlg-inline-block{display:inline-block!important}}@media (min-width:1600px){.hidden-xlg{display:none!important}}\n\n.panel-title.panel-icon{\n    padding-left:50px;\n    i{\n        margin-right: 5px;\n        font-size: 22px;\n        position: absolute;\n        top: 18px;\n        left: 20px;\n    }\n}\n\n#dataTable a {\n    font-weight: 500;\n    text-decoration: none;\n}\n#dataTable .bread-actions .btn, .actions a.btn {\n    padding: 5px 10px;\n    font-size: 12px;\n}\n/* Fix navbar responsiveness */\n.navbar-nav.navbar-right {\n  top: 0;\n  right: 0;\n  height: 100%;\n  width: auto;\n  background: none !important;\n}\n.navbar-nav.navbar-right li.dropdown.open .dropdown-menu {display: block}\n\n\n/********** MEDIA STYLES *********/\n\n.media-section .modal-footer{\n  margin-top:0px;\n}\n\n.media-section .modal .modal-header .close{\n  padding-bottom:2px;\n}\n\n.media-section .modal-content{\n  border:0px;\n}\n\n.media-section .modal-header{\n  background:#21A9E1;\n}\n\n.media-section #confirm_delete_modal .modal-header{\n  background:#E14421;\n}\n\n.media-section #move_file_modal .modal-header{\n  background:#FC9A24;\n}\n\n.media-section .modal-header h4{\n  color:#fff;\n}\n\n.confirm_delete_name{\n  color:#4DA7E8;\n}\n\n#move_btn{\n  background:#FABE28;\n  border:1px solid #FABE28;\n}\n\n/**************************************************/\n/***        TOOLBAR CSS         ***/\n/**************************************************/\n\n#toolbar{\n  background:#E0E0E0;\n  padding:20px;\n  border-top-left-radius:3px;\n  border-top-right-radius:3px;\n}\n\n#toolbar .btn{\n  padding:8px 13px;\n  font-size: 13px;\n  border-radius:2px;\n}\n\n#toolbar .btn-group .btn{\n  border-radius:0px;\n}\n\n#toolbar .btn-group .btn:first-child{\n  border-top-left-radius: 2px;\n  border-bottom-left-radius: 2px;\n}\n\n#toolbar .btn-group .btn:last-child{\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n}\n\n\n#toolbar .btn-group .btn.btn-default:nth-child(2), #toolbar .btn-group .btn.btn-default:last-child{\n  border-left:1px solid #CBCBCD;\n}\n\n#toolbar .btn-group .btn.btn-default:nth-child(2), #toolbar .btn-group .btn.btn-default:nth-child(1){\n  margin-right:1px;\n}\n\n#toolbar .btn.btn-default:focus{\n  background:#F0F0F1;\n  border-color:#F0F0F1;\n}\n\n#toolbar .btn.btn-primary{\n  background:#4DA7E8;\n  border:1px solid #4DA7E8;\n}\n\n#toolbar .btn.btn-primary:hover{\n  background:#2995E3;\n}\n\n#toolbar #refresh.btn{\n  margin:0px 10px;\n}\n\n#toolbar i{\n  position: relative;\n    top: 2px;\n}\n\n\n/**************************************************/\n/***        BREADCRUMB CSS        ***/\n/**************************************************/\n\n.breadcrumb-container{\n  position:relative;\n}\n\n.breadcrumb.filemanager{\n  top:0px;\n  background:#f0f0f0;\n  border:1px solid #E0E0E0;\n  border-bottom:0px;\n  border-radius:0px;\n  padding-left:20px;\n  width: 100%;\n    margin-top: 0;\n    left: 0;\n}\n\n.breadcrumb.filemanager li{\n  cursor:pointer;\n  transition:color 0.1s linear;\n  position:relative;\n}\n\n.breadcrumb.filemanager li:hover{\n  color:#555;\n}\n\n.breadcrumb li .arrow{\n  display: none;\n    position: absolute;\n    bottom: -14px;\n    width: 12px;\n    height: 12px;\n    -ms-transform: rotate(45deg);\n    -webkit-transform: rotate(45deg);\n    transform: rotate(45deg);\n    background: #f0f0f0;\n    left: 50%;\n    border-right: 1px solid #efefef;\n    border-bottom: 1px solid #efefef;\n    margin-bottom:5px;\n}\n\n.breadcrumb li:last-child .arrow{\n  display:block;\n}\n\n.breadcrumb li:first-child .arrow{\n  margin-left:-5px;\n  margin-bottom:5px;\n}\n\n.breadcrumb li{\n  color:#4DA7E8;\n  cursor:pointer;\n  font-weight:bold;\n}\n\n.breadcrumb li:last-child{\n  color:#58595f;\n  cursor:pointer;\n  font-weight:400;\n}\n\n.breadcrumb-container .toggle{\n  float: right;\n    position: absolute;\n    top: 11px;\n    cursor: pointer;\n    right: 5px;\n    color: #bbb;\n    transition: color 0.1s linear;\n    overflow:visible;\n}\n\n.breadcrumb-container .toggle:hover{\n  color:#aaa;\n}\n\n.breadcrumb-container .toggle span{\n\n  font-size:9px;\n  text-transform: uppercase;\n  float:left;\n  top:2px;\n  position:relative;\n  font-weight:bold;\n  right:10px;\n}\n.breadcrumb-container .toggle i{\n  font-size:18px;\n  float:right;\n  margin-right:5px;\n  position:relative;\n  top:-4px;\n}\n\n\n\n.nothingfound{\n  display:none;\n}\n#filemanager{\n  position:relative;\n  min-height:200px;\n}\n#filemanager .loader{\n  margin-top:25px;\n}\n#filemanager #content{\n  display: block;\n  background:#fff;\n}\n\n.flex{\n  display:flex;\n    flex-wrap: wrap;\n    border:1px solid #E0E0E0;\n    border-top:0px;\n}\n\n.flex #left{\n  flex:4;\n  position:relative;\n  min-height:230px;\n}\n\n.flex #left #no_files h3{\n  text-align: center;\n    margin-top: 55px;\n    margin-bottom:75px;\n    color:#949494;\n}\n\n.flex #right{\n  flex:1;\n  border-left:1px solid #f1f1f1;\n}\n\n#right .right_details{\n  display:block;\n}\n\n#right .right_none_selected{\n  text-align:center;\n}\n\n#right .right_none_selected i{\n  width: 100%;\n    text-align: center;\n    font-size: 30px;\n    margin-left: 0;\n    padding: 50px;\n    display:block;\n    background: #f9f9f9;\n}\n\n#right .right_none_selected p{\n  text-align: center;\n    color: #bbb;\n    padding: 10px;\n    border-bottom: 1px solid #f1f1f1;\n}\n\n#files{\n  display:flex;\n  list-style:none;\n  width:100%;\n  margin:0px;\n  padding:0px;\n  flex-wrap:wrap;\n  padding:10px;\n  position:relative;\n  -webkit-touch-callout: none; /* iOS Safari */\n  -webkit-user-select: none;   /* Chrome/Safari/Opera */\n  -khtml-user-select: none;    /* Konqueror */\n  -moz-user-select: none;      /* Firefox */\n  -ms-user-select: none;       /* Internet Explorer/Edge */\n  user-select: none;\n}\n#files li{\n  flex:1;\n  width:100%;\n  min-width:200px;\n  max-width:250px;\n}\n#files li .file_link{\n  background:#eee;\n  padding:10px;\n  margin:10px;\n  cursor:pointer;\n  border-radius: 3px;\n    border: 1px solid #ecf0f1;\n    overflow: hidden;\n    background: #f6f8f9;\n    display:flex;\n}\n\n#files li .file_link .details{\n  flex:2;\n  overflow:hidden;\n  width:100%;\n}\n\n#files li .file_link .details small{\n  font-size: 11px;\n    position: relative;\n    top: -3px;\n}\n\n#files li .file_link .link_icon{\n  flex:1;\n}\n\n#files li .file_link img, #files li .file_link .img_icon{\n  display:none;\n}\n\n#files li .file_link.image img, #files li .file_link.image .img_icon{\n  display:block;\n}\n\n#files li .file_link.image img{\n  height:50px;\n}\n\n#files li .file_link.image .img_icon{\n  width:50px;\n  height:50px;\n  display:block;\n}\n\n#files li .file_link.selected, #files li .file_link:hover{\n  background: #4da7e8 !important;\n    border-color: #2581b8;\n    color:#fff;\n}\n\n#files li .file_link.selected h4, #files li .file_link:hover h4{\n  color:#fff;\n}\n\n#files li .details h4{\n  margin-bottom:2px;\n  margin-top:10px;\n  max-height: 17px;\n  height:17px;\n    overflow: hidden;\n    font-size:14px;\n    text-overflow: ellipsis;\n}\n\n#files li .details .folder h4{\n  margin-top:16px;\n}\n\n.file_link.folder i.icon{\n  float:left;\n  margin-left:10px;\n}\n\n.file_link.folder .num_items{\n  display:block;\n}\n\n.file_link .link_icon{\n  text-align: center;\n    padding-left: 0;\n    margin-left: 0;\n    margin-right: 5px;\n}\n\n.file_link .link_icon i{\n  padding-left:0px;\n  padding-right:0px;\n  position: relative;\n    top: 5px;\n}\n\n.file_link i.icon:before{\n  font-size:40px;\n}\n\n\n.detail_img{\n  border-bottom:1px solid #f1f1f1;\n  background:#eee;\n}\n\n.detail_img img{\n  width:100%;\n  height:auto;\n  display:inline-block;\n}\n\n.detail_img i{\n  display:block;\n  width: 100%;\n    text-align: center;\n    font-size: 70px;\n    margin-left: 0;\n    padding: 30px;\n    background: #f9f9f9;\n}\n\n.detail_img .folder i.fa-folder{\n  display:block;\n}\n\n\n.detail_img .file i.fa-file{\n  display:block;\n}\n\n.detail_img .image img{\n  display:block;\n}\n\n.detail_info{\n  padding:10px;\n}\n\n.detail_info.folder .selected_file_size{\n  display:none;\n}\n\n.detail_info span{\n  display:block;\n  clear:both;\n}\n\n.detail_info a{\n  color:#4DA7E8;\n}\n\n.detail_info .selected_file_size{\n  padding-top:0;\n}\n\n.detail_info h4{\n  float:left;\n  color:#bbb;\n  margin:0;\n  font-size:12px;\n  margin-top:3px;\n  margin-right:8px;\n  padding-bottom:2px;\n  font-weight:400;\n}\n\n.detail_info p{\n  float:left;\n  color:#444;\n  padding-bottom:3px;\n  font-size:12px;\n  font-weight:400;\n}\n\n/********** file upload progress **********/\n\n#filemanager .progress{\n  border-radius:0;\n  margin-bottom:0;\n}\n\n#uploadProgress{\n  display:none;\n  background:#eee;\n}\n\n/********** end file upload progress **********/\n\n#file_loader{\n  position:absolute;\n  width:100%;\n  height:100%;\n  left:0;\n  top:0;\n  background: rgba(255, 255, 255, 0.7);\n    z-index: 9;\n    text-align:center;\n}\n\n#file_loader #file_loader_inner{\n  width:60px;\n  height:60px;\n  position:absolute;\n  top:50%;\n  left:50%;\n  margin-left:-30px;\n  margin-top:-30px;\n\n}\n\n#file_loader img{\n  width:80px;\n  height:80px;\n  margin-top:50px;\n  opacity:0.5;\n  -webkit-animation:spin 1.2s ease-in-out infinite;\n  -moz-animation:spin 1.2s ease-in-out infinite;\n  animation:spin 1.2s ease-in-out infinite;\n\n}\n\n#file_loader p{\n  margin-top: 40px;\n    position: absolute;\n    text-align: center;\n    width: 100%;\n    top:50%;\n    font-weight: 400;\n    font-size: 12px;\n}\n\n\n/********* END MEDIA STYLES *********/\n\n\n/********** VOYAGER THEME CSS *********/\n\n/*\n * Skin: Voyager\n * ----------\n */\n html, body{\n  padding:0px;\n  margin:0px;\n  height:100%;\n  font-family: Open Sans,sans-serif;\n  font-size: 14px;\n  line-height: 1.57142857;\n  color: #76838f;\n  background-color: #fff;\n }\n.skin-voyager .main-header .navbar {\n  background-color: #fff;\n  border-bottom:1px solid #f1f1f1;\n}\n.skin-voyager .main-header .navbar .nav > li > a {\n  color: #212936;\n}\n.skin-voyager .main-header .navbar .nav > li > a:hover,\n.skin-voyager .main-header .navbar .nav > li > a:active,\n.skin-voyager .main-header .navbar .nav > li > a:focus,\n.skin-voyager .main-header .navbar .nav .open > a,\n.skin-voyager .main-header .navbar .nav .open > a:hover,\n.skin-voyager .main-header .navbar .nav .open > a:focus,\n.skin-voyager .main-header .navbar .nav > .active > a {\n  background: rgba(0, 0, 0, 0.05);\n  color: #212936;\n}\n.skin-voyager .main-header .navbar .sidebar-toggle {\n  color: #212936;\n}\n@media (max-width: 767px) {\n  .skin-voyager .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-voyager .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-voyager .main-header .navbar .dropdown-menu li a:hover {\n    background: #367fa9;\n  }\n}\n.skin-voyager .main-header .logo {\n  background-color: #212936;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-voyager .main-header .logo:hover {\n  background-color: #212936;\n}\n.skin-voyager .main-header li.user-header {\n  background-color: #212936;\n}\n.skin-voyager .content-header {\n  background: transparent;\n}\n.skin-voyager .wrapper,\n.skin-voyager .main-sidebar,\n.skin-voyager .left-side {\n  background-color: #1B1E24;\n}\n.skin-voyager .user-panel > .info,\n.skin-voyager .user-panel > .info > a {\n  color: #fff;\n}\n.skin-voyager .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-voyager .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-voyager .sidebar-menu > li:hover > a,\n.skin-voyager .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #3c8dbc;\n}\n.skin-voyager .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-voyager .sidebar a {\n  color: #b8c7ce;\n}\n.skin-voyager .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-voyager .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-voyager .treeview-menu > li.active > a,\n.skin-voyager .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-voyager .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-voyager .sidebar-form input[type=\"text\"],\n.skin-voyager .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-voyager .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-voyager .sidebar-form input[type=\"text\"]:focus,\n.skin-voyager .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-voyager .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-voyager .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n.skin-voyager.layout-top-nav .main-header > .logo {\n  background-color: #22262E;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-voyager.layout-top-nav .main-header > .logo:hover {\n  background-color: #3b8ab8;\n}\n\n/*\n* End Skin: Voyager\n* ----------\n*/\n\n.voyager {\n    background-color: #F9F9F9;\n    /* small screen */\n}\n\n.voyager .app-footer {\n    opacity: 0.7;\n    color: #353d47;\n    width: 100%;\n    text-align: right;\n    padding: 10px 0;\n    background: #fff;\n    left: 0px;\n}\n\n.voyager .app-footer i {\n    color: #D9534F;\n    position: relative;\n    top: 2px;\n}\n\n.voyager .navbar,\n.voyager .navbar.navbar-default {\n    border-bottom: 0;\n    box-shadow: 0 0 0;\n    background:rgba(250, 250, 250, 0.9);\n}\n\n.voyager .navbar > .container-fluid,\n.voyager .navbar.navbar-default > .container-fluid:after {\n    border-bottom: 1px solid #eee;\n    width: 99.5%;\n    height: 1px;\n}\n\n.voyager .expanded .navbar > .container-fluid,\n.voyager .expanded .navbar.navbar-default > .container-fluid:after {\n  border-bottom:0px;\n}\n\n.voyager .navbar .navbar-header .navbar-brand,\n.voyager .navbar.navbar-default .navbar-header .navbar-brand {\n    color: #F9F9F9;\n}\n\n.voyager .navbar .navbar-header .navbar-expand-toggle,\n.voyager .navbar.navbar-default .navbar-header .navbar-expand-toggle {\n    color: #353d47;\n}\n\n.voyager .navbar .navbar-header .navbar-right-expand-toggle,\n.voyager .navbar.navbar-default .navbar-header .navbar-right-expand-toggle {\n    color: #353d47;\n}\n\n.voyager .navbar .navbar-breadcrumb li,\n.voyager .navbar.navbar-default .navbar-breadcrumb li {\n    color: #353d47;\n}\n\n.voyager .navbar .navbar-breadcrumb li a,\n.voyager .navbar.navbar-default .navbar-breadcrumb li a {\n    color: #353d47;\n}\n\n.voyager .navbar .navbar-nav > li,\n.voyager .navbar.navbar-default .navbar-nav > li {\n    border-left: 1px solid #F9F9F9;\n}\n\n.voyager .navbar .navbar-nav > li.profile,\n.voyager .navbar.navbar-default .navbar-nav > li.provile {\n  border-left:0px;\n}\n\n.voyager .navbar .navbar-nav > li > a,\n.voyager .navbar.navbar-default .navbar-nav > li > a {\n    color: #353d47;\n}\n\n.voyager .navbar .navbar-nav > li:hover > a,\n.voyager .navbar.navbar-default .navbar-nav > li:hover > a {\n    color: #22A7F0;\n}\n\n.voyager .navbar .navbar-nav > li.open > a,\n.voyager .navbar.navbar-default .navbar-nav > li.open > a {\n    background-color: transparent;\n    color: #22A7F0;\n}\n\n.voyager .navbar .navbar-nav > li.danger > a,\n.voyager .navbar.navbar-default .navbar-nav > li.danger > a {\n    background-color: transparent;\n    border-bottom: 4px solid #FA2A00;\n    color: #FA2A00;\n}\n\n.voyager .navbar .navbar-nav > li.danger.open > a,\n.voyager .navbar.navbar-default .navbar-nav > li.danger.open > a {\n    background-color: #FA2A00;\n    color: #FFF;\n}\n\n.voyager .navbar .navbar-nav .dropdown-menu,\n.voyager .navbar.navbar-default .navbar-nav .dropdown-menu {\n    background-color: #F9F9F9;\n    border-color: #E4E4E4;\n}\n\n.voyager .navbar .navbar-nav .dropdown-menu .title,\n.voyager .navbar.navbar-default .navbar-nav .dropdown-menu .title {\n    background-color: #FFF;\n}\n\n.voyager .navbar .navbar-nav .dropdown-menu .title .badge,\n.voyager .navbar.navbar-default .navbar-nav .dropdown-menu .title .badge {\n    background-color: #353d47;\n}\n\n.voyager .navbar .navbar-nav .dropdown-menu.danger,\n.voyager .navbar.navbar-default .navbar-nav .dropdown-menu.danger {\n    border-color: #FA2A00;\n}\n\n.voyager .navbar .navbar-nav .dropdown-menu.danger .title,\n.voyager .navbar.navbar-default .navbar-nav .dropdown-menu.danger .title {\n    background-color: #FA2A00;\n    color: #FFF;\n}\n\n.voyager .navbar .navbar-nav .dropdown-menu.danger .title .badge,\n.voyager .navbar.navbar-default .navbar-nav .dropdown-menu.danger .title .badge {\n    background-color: #FFF;\n    color: #FA2A00;\n}\n\n.voyager .navbar.navbar-inverse {\n    background-color: #353d47;\n    border-bottom: 0;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n.voyager .navbar.navbar-inverse > .container-fluid {\n    background-color: #353d47;\n}\n\n.voyager .navbar.navbar-inverse .navbar-header .navbar-brand {\n    color: #F9F9F9;\n}\n\n.voyager .navbar.navbar-inverse .navbar-header .navbar-expand-toggle {\n    color: #FFF;\n}\n\n.voyager .navbar.navbar-inverse .navbar-header .navbar-right-expand-toggle {\n    color: #FFF;\n}\n\n.voyager .navbar.navbar-inverse .navbar-breadcrumb li {\n    color: #FFF;\n}\n\n.voyager .navbar.navbar-inverse .navbar-breadcrumb li a {\n    color: #FFF;\n}\n\n.voyager .navbar.navbar-inverse .navbar-nav > li {\n    border-left: 1px solid #363c46;\n}\n\n.voyager .navbar.navbar-inverse .navbar-nav > li > a {\n    color: #FFF;\n}\n\n.voyager .navbar.navbar-inverse .navbar-nav > li:hover > a {\n    color: #22A7F0;\n}\n\n.voyager .navbar.navbar-inverse .navbar-nav > li.open > a {\n    background-color: transparent;\n    color: #22A7F0;\n}\n\n.voyager .navbar.navbar-inverse .navbar-nav > li.danger > a {\n    background-color: transparent;\n    border-bottom: 4px solid #FA2A00;\n    color: #FFF;\n}\n\n.voyager .navbar.navbar-inverse .navbar-nav > li.danger.open > a {\n    background-color: #FA2A00;\n}\n\n.voyager .navbar.navbar-inverse .navbar-nav .dropdown-menu {\n    background-color: #F9F9F9;\n    border-color: #353d47;\n}\n\n.voyager .navbar.navbar-inverse .navbar-nav .dropdown-menu .title {\n    background-color: #FFF;\n}\n\n.voyager .navbar.navbar-inverse .navbar-nav .dropdown-menu .title .badge {\n    background-color: #353d47;\n}\n\n.voyager .navbar.navbar-inverse .navbar-nav .dropdown-menu.danger {\n    border-color: #FA2A00;\n}\n\n.voyager .navbar.navbar-inverse .navbar-nav .dropdown-menu.danger .title {\n    background-color: #FA2A00;\n    color: #FFF;\n}\n\n.voyager .navbar.navbar-inverse .navbar-nav .dropdown-menu.danger .title .badge {\n    background-color: #FFF;\n    color: #FA2A00;\n}\n\n.voyager .side-menu {\n    background-color: #FFF;\n    box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.08);\n}\n\n.voyager .side-menu .navbar-header {\n    background-color: #22A7F0;\n    margin-bottom: 4px;\n}\n\n.voyager .side-menu .navbar-header .navbar-brand {\n    color: #19B5FE;\n}\n\n.voyager .side-menu .navbar-nav {\n    width: 100%;\n}\n\n.voyager .side-menu .navbar {\n    background-color: #FFF;\n    border-bottom: 0;\n    -moz-box-shadow: none;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n\n.voyager .side-menu .navbar li > a {\n    color: #363c46;\n}\n\n.voyager .side-menu .navbar li.active {\n    border-left: 0;\n}\n\n.voyager .side-menu .navbar li.active > a {\n    border-right: 4px solid #22A7F0;\n    background-color: #FFF;\n}\n\n.voyager .side-menu .navbar > li:hover > a {\n    background-color: #FA2A00;\n    color: #FFF;\n}\n\n.voyager .side-menu .navbar li.dropdown {\n    background-color: transparent;\n}\n\n.voyager .side-menu .navbar li.dropdown > .panel-collapse {\n    background-color: #E4E4E4;\n}\n\n.voyager .side-menu .navbar li.dropdown .panel-body {\n    padding: 0 7px;\n}\n\n.voyager .side-menu.sidebar-inverse {\n    background-color: #353d47;\n    box-shadow: 0px 0px 0px;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar {\n    background-color: #353d47;\n    border-bottom: 0;\n    -moz-box-shadow: none;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar li {\n    border-left: 0;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar li > a {\n    color: #FFF;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar li.active > a {\n    color: #353d47;\n    border-left: 3px solid #22A7F0;\n    border-right: 0 solid #22A7F0;\n    background-color: #FFF;\n    font-weight:400;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar li.active > a .icon {\n    margin-left: -3px;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar > li:hover > a {\n    background-color: #FA2A00;\n    color: #FFF;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar li.dropdown > .panel-collapse {\n    background-color: rgba(0, 0, 0, 0.1);\n}\n\n.voyager .side-menu.sidebar-inverse .navbar li.dropdown .panel-body {\n    padding: 0 7px;\n}\n\n@media (max-width: 768px) {\n    .voyager .navbar.navbar-default .navbar-nav > li {\n        border-left: 0;\n    }\n    .voyager .navbar.navbar-default .navbar-right {\n        background-color: #FFF;\n    }\n    .voyager .navbar.navbar-inverse .navbar-nav > li {\n        border-left: 0;\n    }\n    .voyager .navbar.navbar-inverse .navbar-right {\n        background-color: #353d47;\n    }\n}\n\n.voyager .card.red {\n    background-color: #FA2A00;\n    color: #FFF;\n}\n\n.voyager .card.yellow {\n    background-color: #ffb400;\n    color: #FFF;\n}\n\n.voyager .card.green {\n    background-color: #1ABC9C;\n    color: #FFF;\n}\n\n.voyager .card.blue {\n    background-color: #22A7F0;\n    color: #FFF;\n}\n\n.voyager .card.dark {\n    background-color: #353d47;\n    color: #FFF;\n}\n\n.voyager .card.red,\n.voyager .card.yellow,\n.voyager .card.green,\n.voyager .card.blue,\n.voyager .card.dark {\n    border: 0;\n}\n\n.voyager .card.red .card-header,\n.voyager .card.yellow .card-header,\n.voyager .card.green .card-header,\n.voyager .card.blue .card-header,\n.voyager .card.dark .card-header {\n    border-bottom: 0;\n}\n\n.voyager .card.red .card-header .title,\n.voyager .card.yellow .card-header .title,\n.voyager .card.green .card-header .title,\n.voyager .card.blue .card-header .title,\n.voyager .card.dark .card-header .title {\n    color: #FFF;\n}\n\n.voyager .card {\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n    border: 0 solid #E4E4E4;\n}\n\n.voyager .card .card-header {\n    border-bottom: 1px solid #E4E4E4;\n}\n\n.voyager .card .card-header .title {\n    color: #353d47;\n}\n\n.voyager .card .card-body .sub-title {\n    border-bottom: 1px solid #EAEAEA;\n}\n\n.voyager .card .card-header.no-border {\n    border-bottom: 0;\n}\n\n.voyager .card .card-jumbotron {\n    background-color: #EAEAEA;\n}\n\n.voyager .card.primary .card-jumbotron {\n    background-color: #353d47;\n    color: #FFF;\n}\n\n.voyager .card.profile .card-footer {\n    border-top: 1px solid #F9F9F9;\n}\n\n.voyager .card.summary-inline.red:hover {\n    background-color: #7c1a06;\n}\n\n.voyager .card.summary-inline.yellow:hover {\n    background-color: #85630f;\n}\n\n.voyager .card.summary-inline.green:hover {\n    background-color: #006551;\n}\n\n.voyager .card.summary-inline.blue:hover {\n    background-color: #353d47;\n}\n\n.voyager .card.summary-inline.dark:hover {\n    background-color: #09486b;\n}\n\n.voyager .card.card-success .card-header {\n    background-color: #1ABC9C;\n}\n\n.voyager .card.card-success .card-header .title {\n    color: #FFF;\n}\n\n.voyager .card.card-info .card-header {\n    background-color: #22A7F0;\n}\n\n.voyager .card.card-info .card-header .title {\n    color: #FFF;\n}\n\n.voyager .panel.panel-default {\n    border: 1px solid #EAEAEA;\n}\n\n.voyager .panel.panel-default .panel-heading {\n    border-bottom: 1px solid #EAEAEA;\n    background-color: #F0F0F0;\n}\n\n.voyager .panel.panel-primary {\n    border: 1px solid #353d47;\n}\n\n.voyager .modal.modal-relationships{\n    border:0px;\n    h5{\n        font-size: 42px;\n        margin-top: 0px;\n        margin-bottom:20px;\n        text-align:center;\n    }\n    h4{\n        i{\n            position: relative;\n            top: 2px;\n            margin-right: 5px;\n        }\n    }\n    :not(.toggle-group) > label {\n        height: 38px;\n        background: #f1f1f1;\n        padding: 7px 12px;\n        font-size: 11px;\n        line-height: 23px;\n        font-weight: bold;\n        margin-bottom:0px;\n        border-top: 1px solid #eaeaea;\n        border-bottom: 1px solid #eaeaea;\n        &:first-child{\n            border-left: 1px solid #eaeaea;\n            border-top-left-radius: 3px;\n            border-bottom-left-radius: 3px;\n        }\n    }\n    .panel-body{\n        padding-top:25px;\n    }\n    &.modal-danger .modal-header, .btn-relationship{\n        background:#F2435C;\n        color:#fff;\n    }\n    .modal-body{\n      background:#ffffff;\n      .col-md-12{\n        margin-bottom:0px;\n      }\n    }\n    .modal-footer{\n        background: #f7f7f9;\n        border-bottom-left-radius: 3px;\n        border-bottom-right-radius: 3px;\n    }\n    .well{\n        background-color: #f9f9fc;\n        border: 1px solid #eaeaea;\n    }\n    p.relationship-warn{\n        text-align:center;\n    }\n\n    .relationship_details{\n        display:flex;\n        &.relationshipPivot{\n            display:none;\n        }\n        .hasOneMany.flexed, .belongsTo.flexed{\n          display:flex;\n        }\n        .hasOneMany, .belongsTo{\n          width:100%;\n          display:none;\n          label{\n            span{\n              color:#444;\n            }\n          }\n        }\n        &.col-md-12{\n            margin-bottom:20px;\n        }\n        p{\n            float: left;\n            padding: 6px 10px;\n            background: #fff;\n            line-height: 22px;\n            margin-right: 0;\n            border: 1px solid #eaeaea;\n            border-top-left-radius: 3px;\n            border-bottom-left-radius: 3px;\n            color: #333;\n            margin-bottom: 0;\n            border-right: 0px;\n            &.flex{\n                display:flex;\n                border-radius: 0px;\n                border-top-right-radius: 3px;\n                border-bottom-right-radius: 3px;\n                border-right: 1px solid #eaeaea;\n                padding-right: 10px;\n                span{\n                    margin-left: 4px;\n                    margin-right: 5px;\n                    line-height: 24px;\n                }\n                input{\n                    position:relative;\n                    top:3px;\n                }\n            }\n            &.relationship_table_select{\n                background: #EFEFEF;\n                color: #76838f;\n                font-weight: bold;\n                font-size: 12px;\n                padding-top: 8px;\n                select{\n                    margin-left:5px;\n                }\n            }\n        }\n        span.label_table_name{\n            display:inline-block;\n        }\n        .relationship_type + span{\n            font-weight:bold;\n        }\n        select{\n            border: 1px solid #f1f1f1;\n            margin-left: 10px;\n        }\n        .select2{\n            flex:1;\n            border: 1px solid #eaeaea;\n            border-right:0px;\n            margin-right:0px;\n            height:38px;\n            .select2-selection{\n                border-radius:5px;\n                border:0px;\n            }\n        }\n        .select2:last-child {\n            border-right: 1px solid #eaeaea;\n            border-top-right-radius: 2px;\n            border-bottom-right-radius: 4px;\n        }\n        .form-control {\n            border-radius:0px;\n            height: 38px;\n            flex:1;\n            &:last-child{\n                border-top-right-radius: 3px;\n                border-bottom-right-radius: 3px;\n            }\n        }\n    }\n    .relationship_details_more{\n        position:relative;\n        margin-bottom:0px;\n\n        :not(.toggle-group) > label {\n            height: 38px;\n            background: #f1f1f1;\n            padding: 7px 12px;\n            font-size: 11px;\n            line-height: 23px;\n            font-weight: 700;\n            position: absolute;\n            top: 0px;\n            left: 0px;\n            width:100%;\n            border: 0px;\n        }\n        .select2-container--default .select2-selection--single{\n            border:1px solid #f1f1f1;\n        }\n        .relationship_taggable{\n          display:none;\n        }\n        .well{\n            position:relative;\n            padding-top:55px;\n            margin-bottom:5px;\n            background: none;\n            border: 1px solid #f1f1f1;\n        }\n    }\n\n}\n\n.btn-new-relationship{\n    background: #F2435C;\n    border: 1px solid #F2435C;\n    color: #fff;\n    &:hover{\n        color:#fff;\n    }\n    i{\n        position: relative;\n        top: 2px;\n    }\n}\n\n.relationship-btn-container{\n    .btn{\n        i{\n            position:relative;\n            top:2px;\n        }\n    }\n}\n\n.voyager .panel.panel-primary .panel-heading {\n    border-bottom: 1px solid #353d47;\n    background-color: #73849d;\n    color: #FFF;\n}\n\n.voyager .panel.panel-success {\n    border: 1px solid #1ABC9C;\n}\n\n.voyager .panel.panel-success .panel-heading {\n    border-bottom: 1px solid #1ABC9C;\n    background-color: #99e9d9;\n    color: #006551;\n}\n\n.voyager .panel.panel-info {\n    border: 1px solid #22A7F0;\n}\n\n.voyager .panel.panel-info .panel-heading {\n    border-bottom: 1px solid #22A7F0;\n    background-color: #91d5fb;\n    color: #09486b;\n}\n\n.voyager .panel.panel-warning {\n    border: 1px solid #FABE28;\n}\n\n.voyager .panel.panel-warning .panel-heading {\n    border-bottom: 1px solid #FABE28;\n    background-color: #ffe5a2;\n    color: #85630f;\n}\n\n.voyager .panel.panel-danger {\n    border: 1px solid #fb927d;\n}\n\n.voyager .panel.panel-danger .panel-heading {\n    border-bottom: 1px solid #fb927d;\n    background-color: #ffb8aa;\n    color: #7c1a06;\n}\n\n.voyager .panel.fresh-color.panel-primary {\n    border: 1px solid #353d47;\n}\n\n.voyager .panel.fresh-color.panel-primary .panel-heading {\n    border-bottom: 1px solid #353d47;\n    background-color: #353d47;\n    color: #FFF;\n}\n\n.voyager .panel.fresh-color.panel-success {\n    border: 1px solid #1ABC9C;\n}\n\n.voyager .panel.fresh-color.panel-success .panel-heading {\n    border-bottom: 1px solid #1ABC9C;\n    background-color: #1ABC9C;\n    color: #FFF;\n}\n\n.voyager .panel.fresh-color.panel-info {\n    border: 1px solid #22A7F0;\n}\n\n.voyager .panel.fresh-color.panel-info .panel-heading {\n    border-bottom: 1px solid #22A7F0;\n    background-color: #22A7F0;\n    color: #FFF;\n}\n\n.voyager .panel.fresh-color.panel-warning {\n    border: 1px solid #FABE28;\n}\n\n.voyager .panel.fresh-color.panel-warning .panel-heading {\n    border-bottom: 1px solid #FABE28;\n    background-color: #FABE28;\n    color: #FFF;\n}\n\n.voyager .panel.fresh-color.panel-danger {\n    border: 1px solid #FA2A00;\n}\n\n.voyager .panel.fresh-color.panel-danger .panel-heading {\n    border-bottom: 1px solid #FA2A00;\n    background-color: #FA2A00;\n    color: #FFF;\n}\n\n.voyager .btn.btn-default {\n    background-color: #F0F0F0;\n    border-color: #EAEAEA;\n}\n\n.voyager .btn.btn-default:hover {\n    background-color: #EAEAEA;\n}\n\n.voyager .btn.btn-success {\n    background:#2ecc71;\n    color:#fff;\n    border: 0px;\n    border-radius: 3px;\n    opacity:0.9;\n}\n\n.voyager .btn.btn-success:hover {\n\n  opacity:1;\n}\n\n.voyager .btn.btn-warning {\n    background: #f39c12;\n    color: #fff;\n    border: 0px;\n    border-radius: 3px;\n    opacity:0.9;\n}\n\n.voyager .btn.btn-warning:hover {\n  opacity:1;\n}\n\n.voyager .btn.btn-info {\n    background-color: #22A7F0;\n    color: #FFF;\n    border-color: #22A7F0;\n}\n\n.voyager .btn.btn-sm.btn-info {\n  background:#22A7F0;\n}\n\n.voyager .btn.btn-danger {\n    background:#FA2A00;\n    color: #fff;\n    border:0px;\n    border-radius:3px;\n    opacity:0.9;\n}\n\n.voyager .btn.btn-danger:hover{\n  opacity:1;\n}\n\n.voyager .btn.btn-link {\n    color: #353d47;\n}\n\n.voyager .progress .progress-bar {\n    background-color: #353d47;\n    color: #FFF;\n}\n\n.voyager .progress .progress-bar.progress-bar-success {\n    background-color: #1ABC9C;\n}\n\n.voyager .progress .progress-bar.progress-bar-info {\n    background-color: #22A7F0;\n}\n\n.voyager .progress .progress-bar.progress-bar-warning {\n    background-color: #FABE28;\n}\n\n.voyager .progress .progress-bar.progress-bar-danger {\n    background-color: #FA2A00;\n}\n\n.voyager .color-white {\n    color: #FFF;\n}\n\n.voyager .pagination > li > a {\n    color: #353d47;\n}\n\n.voyager .pagination .active > a,\n.voyager .pagination .active > a:focus,\n.voyager .pagination .active > a:hover,\n.voyager .pagination .active span,\n.voyager .pagination .active > span:focus,\n.voyager .pagination .active > span:hover {\n    background-color: #353d47;\n    border-color: #353d47;\n    color: #FFF;\n}\n\n.voyager .modal.modal-primary .modal-header {\n    background-color: #353d47;\n    color: #FFF;\n}\n\n.voyager .modal.modal-success .modal-header {\n    background-color: #1ABC9C;\n    color: #FFF;\n}\n\n.voyager .modal.modal-info .modal-header {\n    background-color: #22A7F0;\n    color: #FFF;\n}\n\n.voyager .modal.modal-warning .modal-header {\n    background-color: #FABE28;\n    color: #FFF;\n}\n\n.voyager .modal.modal-danger .modal-header {\n    background-color: #FA2A00;\n    color: #FFF;\n}\n\n.voyager .alert.alert-success {\n    background-color: #99e9d9;\n    color: #006551;\n    border-color: #1ABC9C;\n}\n\n.voyager .alert.alert-success .alert-link {\n    color: #006551;\n    text-decoration: underline;\n}\n\n.voyager .alert.alert-success .btn-link {\n    color: #006551;\n}\n\n.voyager .alert.alert-info {\n    background-color: #91d5fb;\n    color: #09486b;\n    border-color: #22A7F0;\n}\n\n.voyager .alert.alert-info .alert-link {\n    color: #09486b;\n    text-decoration: underline;\n}\n\n.voyager .alert.alert-info .btn-link {\n    color: #09486b;\n}\n\n.voyager .alert.alert-warning {\n    background-color: #ffe5a2;\n    border-color: #FABE28;\n    color: #85630f;\n}\n\n.voyager .alert.alert-warning .alert-link {\n    color: #85630f;\n    text-decoration: underline;\n}\n\n.voyager .alert.alert-warning .btn-link {\n    color: #85630f;\n}\n\n.voyager .alert.alert-danger {\n    background-color: #ffb8aa;\n    border-color: #fb927d;\n    color: #7c1a06;\n}\n\n.voyager .alert.alert-danger .alert-link {\n    color: #7c1a06;\n    text-decoration: underline;\n}\n\n.voyager .alert.alert-danger .btn-link {\n    color: #7c1a06;\n}\n\n.voyager .alert.fresh-color {\n    color: #FFF;\n}\n\n.voyager .alert.fresh-color .alert-link {\n    color: #FFF;\n    text-decoration: underline;\n}\n\n.voyager .alert.fresh-color .btn-link {\n    color: #FFF;\n}\n\n.voyager .alert.fresh-color.alert-success {\n    background-color: #1ABC9C;\n}\n\n.voyager .alert.fresh-color.alert-info {\n    background-color: #22A7F0;\n}\n\n.voyager .alert.fresh-color.alert-warning {\n    background-color: #FABE28;\n}\n\n.voyager .alert.fresh-color.alert-danger {\n    background-color: #FA2A00;\n    border-color: #FA2A00;\n}\n\n.voyager .list-group .list-group-item.active {\n    background-color: #353d47;\n    color: #FFF;\n    border-color: #353d47;\n}\n\n.voyager .list-group .list-group-item.active .badge {\n    color: #353d47;\n}\n\n.voyager .list-group .list-group-item.list-group-item-success {\n    background-color: #99e9d9;\n    color: #006551;\n    border-color: #99e9d9;\n}\n\n.voyager .list-group .list-group-item.list-group-item-success .badge {\n    background-color: #FFF;\n    color: #1ABC9C;\n}\n\n.voyager .list-group .list-group-item.list-group-item-info {\n    background-color: #91d5fb;\n    color: #09486b;\n    border-color: #91d5fb;\n}\n\n.voyager .list-group .list-group-item.list-group-item-info .badge {\n    background-color: #FFF;\n    color: #22A7F0;\n}\n\n.voyager .list-group .list-group-item.list-group-item-warning {\n    background-color: #ffe5a2;\n    color: #85630f;\n    border-color: #ffe5a2;\n}\n\n.voyager .list-group .list-group-item.list-group-item-warning .badge {\n    background-color: #FFF;\n    color: #FABE28;\n}\n\n.voyager .list-group .list-group-item.list-group-item-danger {\n    background-color: #ffb8aa;\n    color: #7c1a06;\n    border-color: #ffb8aa;\n}\n\n.voyager .list-group .list-group-item.list-group-item-danger .badge {\n    background-color: #FFF;\n    color: #FA2A00;\n}\n\n.voyager .table .active td,\n.voyager .table .active th {\n    background-color: #EAEAEA;\n}\n\n.voyager .table .success {\n    color: #006551;\n}\n\n.voyager .table .success td,\n.voyager .table .success th {\n    background-color: #99e9d9;\n}\n\n.voyager .table .info {\n    color: #09486b;\n}\n\n.voyager .table .info td,\n.voyager .table .info th {\n    background-color: #91d5fb;\n}\n\n.voyager .table .warning {\n    color: #85630f;\n}\n\n.voyager .table .warning td,\n.voyager .table .warning th {\n    background-color: #ffe5a2;\n}\n\n.voyager .table .danger {\n    color: #7c1a06;\n}\n\n.voyager .table .danger td,\n.voyager .table .danger th {\n    background-color: #ffb8aa;\n}\n\n.voyager .table > tbody > tr > td,\n.voyager .table > tbody > tr > th,\n.voyager .table > tfoot > tr > td,\n.voyager .table > tfoot > tr > th {\n    border-color: #EAEAEA;\n}\n\n.voyager .table > thead > tr > th {\n    border-color: #EAEAEA;\n    background: #F8FAFC;\n}\n\n.voyager .table.table-striped > tbody > tr:nth-of-type(odd) {\n    background-color: #FDFDFD;\n}\n\n.voyager .login-box .login-form .login-header {\n    color: #FFF;\n}\n\n.voyager .login-box .login-form .login-body {\n    background-color: #FFF;\n}\n\n.voyager .login-box input {\n    background-color: #F9F9F9;\n    border: 1px solid #F9F9F9;\n}\n\n.voyager .login-box .login-footer a {\n    color: #FFF;\n}\n\n.voyager .login-box .login-footer a:hover {\n    color: #FFF;\n    text-decoration: underline;\n}\n\n.voyager .badge.primary {\n    background-color: #353d47;\n}\n\n.voyager .badge.success {\n    background-color: #1ABC9C;\n}\n\n.voyager .badge.info {\n    background-color: #22A7F0;\n}\n\n.voyager .badge.warning {\n    background-color: #FABE28;\n}\n\n.voyager .badge.danger {\n    background-color: #FA2A00;\n}\n\n.voyager .nav-tabs {\n    background-color: #EAEAEA;\n}\n\n.voyager .nav-tabs > li > a:hover {\n    background-color: #EAEAEA;\n}\n\n.voyager .nav-tabs > li.active > a:hover {\n    background-color: #FFF;\n}\n\n.voyager .tabs-below > .nav-tabs {\n    border-top: 1px solid #E4E4E4;\n}\n\n.voyager .tabs-below > .nav-tabs > li > a:hover,\n.voyager .tabs-below > .nav-tabs > li > a:focus {\n    border-top-color: #E4E4E4;\n    border-bottom-color: transparent;\n}\n\n.voyager .tabs-below > .nav-tabs > .active > a,\n.voyager .tabs-below > .nav-tabs > .active > a:hover,\n.voyager .tabs-below > .nav-tabs > .active > a:focus {\n    border-color: transparent #E4E4E4 #E4E4E4 #E4E4E4;\n}\n\n.voyager .tabs-left > .nav-tabs {\n    border-right: 1px solid #E4E4E4;\n}\n\n.voyager .tabs-left > .nav-tabs > li > a:hover,\n.voyager .tabs-left > .nav-tabs > li > a:focus {\n    border-color: #E4E4E4 #E4E4E4 #E4E4E4 #E4E4E4;\n}\n\n.voyager .tabs-left > .nav-tabs .active > a,\n.voyager .tabs-left > .nav-tabs .active > a:hover,\n.voyager .tabs-left > .nav-tabs .active > a:focus {\n    border-color: #E4E4E4 transparent #E4E4E4 #E4E4E4;\n    *border-right-color: #FFF;\n}\n\n.voyager .tabs-right > .nav-tabs {\n    border-left: 1px solid #E4E4E4;\n}\n\n.voyager .tabs-right > .nav-tabs > li > a:hover,\n.voyager .tabs-right > .nav-tabs > li > a:focus {\n    border-color: #E4E4E4 #E4E4E4 #E4E4E4 #E4E4E4;\n}\n\n.voyager .tabs-right > .nav-tabs .active > a,\n.voyager .tabs-right > .nav-tabs .active > a:hover,\n.voyager .tabs-right > .nav-tabs .active > a:focus {\n    border-color: #E4E4E4 #E4E4E4 #E4E4E4 transparent;\n    *border-left-color: #FFF;\n}\n\n.voyager .step .nav-tabs {\n    background-color: #FFF;\n}\n\n.voyager .step .nav-tabs > li {\n    border: 1px solid #E4E4E4;\n    border-right: 0;\n}\n\n.voyager .step .nav-tabs > li:after {\n    border-top: 15px solid transparent;\n    border-bottom: 15px solid transparent;\n    border-left: 15px solid #FFF;\n}\n\n.voyager .step .nav-tabs > li:before {\n    border-top: 16px solid transparent;\n    border-bottom: 16px solid transparent;\n    border-left: 16px solid #E4E4E4;\n}\n\n.voyager .step .nav-tabs > li.active {\n    background-color: #EAEAEA;\n}\n\n.voyager .step .nav-tabs > li.active > a,\n.voyager .step .nav-tabs > li.active > a:focus,\n.voyager .step .nav-tabs > li.active > a:hover {\n    background: transparent;\n}\n\n.voyager .step .nav-tabs > li:hover {\n    background-color: #EAEAEA;\n}\n\n.voyager .step .nav-tabs > li:hover:after,\n.voyager .step .nav-tabs > li.active:after {\n    border-left: 15px solid #EAEAEA;\n}\n\n.voyager .step .nav-tabs > li:last-child {\n    border-right: 1px solid #E4E4E4;\n}\n\n.voyager .step .nav-tabs > li.step-success {\n    background-color: #99e9d9;\n    border: 1px solid #1ABC9C;\n}\n\n.voyager .step .nav-tabs > li.step-success a {\n    color: #006551;\n}\n\n.voyager .step .nav-tabs > li.step-disabled {\n    background-color: #99e9d9;\n}\n\n.voyager .step .nav-tabs > li.step-success:after {\n    border-left: 15px solid #99e9d9;\n}\n\n.voyager .step .nav-tabs > li.step-success.active:hover:after {\n    border-left: 15px solid #99e9d9;\n}\n\n.voyager .step .nav-tabs > li.step-success:hover:after {\n    border-left: 15px solid #EAEAEA;\n}\n\n.voyager .step.card-no-padding .nav-tabs > li {\n    border: 0 solid transparent;\n    border-right: 1px solid #E4E4E4;\n    border-bottom: 1px solid #E4E4E4;\n}\n\n.voyager .step.card-no-padding .nav-tabs > li:last-child {\n    border-right: 0 solid #E4E4E4;\n}\n\n.voyager .step.tabs-left .nav-tabs > li {\n    border: 1px solid #E4E4E4;\n}\n\n.voyager .step.tabs-left .nav-tabs > li:after {\n    border-top: 15px solid transparent;\n    border-bottom: 15px solid transparent;\n    border-left: 15px solid #FFF;\n}\n\n.voyager .step.tabs-left .nav-tabs > li:before {\n    border-top: 16px solid transparent;\n    border-bottom: 16px solid transparent;\n    border-left: 16px solid #E4E4E4;\n}\n\n.voyager .step.tabs-left .nav-tabs > li.active {\n    background-color: #EAEAEA;\n}\n\n.voyager .step.tabs-left .nav-tabs > li.active > a,\n.voyager .step.tabs-left .nav-tabs > li.active > a:focus,\n.voyager .step.tabs-left .nav-tabs > li.active > a:hover {\n    background: transparent;\n}\n\n.voyager .step.tabs-left .nav-tabs > li:hover {\n    background-color: #EAEAEA;\n}\n\n.voyager .step.tabs-left .nav-tabs > li:hover:after,\n.voyager .step.tabs-left .nav-tabs > li.active:after {\n    border-left: 15px solid #EAEAEA;\n}\n\n.voyager .step.tabs-left.card-no-padding .nav-tabs > li {\n    border: 0 solid transparent;\n}\n\n.voyager .pricing-table {\n    box-shadow: 0 1px 1px #CCC;\n}\n\n.voyager .pricing-table .pt-header {\n    background-color: #E4E4E4;\n}\n\n.voyager .pricing-table .pt-header .plan-pricing .pricing {\n    text-shadow: 0 1px 1px #FFF;\n}\n\n.voyager .pricing-table .pt-body {\n    background-color: #F9F9F9;\n}\n\n.voyager .pricing-table .pt-body .plan-detail {\n    border-top: 1px dashed rgba(255, 255, 255, 0.6);\n    padding-top: 1em;\n    margin-top: 1em;\n}\n\n.voyager .pricing-table .pt-footer {\n    background-color: #F9F9F9;\n}\n\n.voyager .pricing-table.dark-blue .pt-header {\n    background-color: #353d47;\n    color: #FFF;\n}\n\n.voyager .pricing-table.dark-blue .pt-body {\n    background-color: #9eaabd;\n    color: #363c46;\n}\n\n.voyager .pricing-table.green .pt-header {\n    background-color: #1ABC9C;\n    color: #FFF;\n}\n\n.voyager .pricing-table.green .pt-body {\n    background-color: #99e9d9;\n    color: #006551;\n}\n\n.voyager .pricing-table.blue .pt-header {\n    background-color: #22A7F0;\n    color: #FFF;\n}\n\n.voyager .pricing-table.blue .pt-body {\n    background-color: #91d5fb;\n    color: #09486b;\n}\n\n.voyager .pricing-table.yellow .pt-header {\n    background-color: #FABE28;\n    color: #FFF;\n}\n\n.voyager .pricing-table.yellow .pt-body {\n    background-color: #ffe5a2;\n    color: #85630f;\n}\n\n.voyager .pricing-table.red .pt-header {\n    background-color: #FA2A00;\n    color: #FFF;\n}\n\n.voyager .pricing-table.red .pt-body {\n    background-color: #ffb8aa;\n    color: #7c1a06;\n}\n\n.voyager.landing-page .navbar-inverse .navbar-toggle:focus,\n.voyager.landing-page .navbar-inverse .navbar-toggle:hover {\n    background-color: transparent;\n}\n\n.voyager.landing-page .navbar {\n    background-color: transparent;\n    box-shadow: none;\n}\n\n.voyager.landing-page .navbar .navbar-nav > .active > a {\n    background-color: transparent;\n}\n\n.voyager.landing-page .navbar .navbar-nav > li {\n    border-left: 0 solid #F9F9F9;\n}\n\n.voyager.landing-page .navbar .navbar-nav > li > a {\n    color: #FFF;\n}\n\n.voyager.landing-page .navbar .navbar-collapse {\n    border: 0;\n}\n\n.voyager.landing-page .navbar.affix .navbar-nav > li > a {\n    color: #353d47;\n}\n\n.voyager.landing-page .navbar.affix .navbar-nav > li:hover > a {\n    color: #22A7F0;\n}\n\n@media (max-width: 768px) {\n    .voyager.landing-page .navbar .navbar-collapse {\n        background-color: #333;\n    }\n    .voyager.landing-page .navbar .navbar-right {\n        background-color: transparent;\n        color: #FFF;\n    }\n    .voyager.landing-page .navbar.affix .navbar-nav > li > a {\n        color: #FFF;\n    }\n}\n\n.voyager.landing-page .navbar.affix .navbar-brand {\n    color: #353d47;\n}\n\n.voyager.landing-page .navbar.affix .navbar-toggle .icon-bar {\n    background-color: #353d47;\n}\n\n.voyager.landing-page .app-header .app-btn {\n    background-color: transparent;\n    border: 2px solid #FFF;\n}\n\n.voyager.landing-page .app-content-a {\n    background-color: #EAEAEA;\n}\n\n\n.alert .close{\n  position: relative;\n  right: -31px;\n  top: -16px;\n  padding: 13px;\n  background: #333;\n  border-radius: 2px;\n}\n\n.page-login-v2:before {\n    background: url('../images/bg.jpg');\n    background-repeat: no-repeat;\n    background-size: cover;\n    background-position-x: -200px !important;\n}\n\n.page-login-v2 .page-brand-info .brand-img{\n  width:100px;\n}\n\n@media (max-width: 767px){\n\n  .page-login-v2 .page-login-main .brand{\n    text-align:center;\n  }\n\n  .page-login-v2 .page-login-main .brand-text{\n    margin-left: 0;\n    font-weight: lighter;\n    color: #777;\n  }\n\n  .page-login-v2 .page-login-main .brand-img{\n    width:100px;\n  }\n\n}\n\n.page-login-v2 .page-login-main{\n  padding:250px 60px 180px;\n}\n\n#login-container{\n  position: absolute;\n  right: 0;\n  top: 0;\n  width:420px;\n  height:100%;\n  background:#fff;\n}\n\n.login-box, .register-box{\n  position: absolute;\n  top:50%;\n  margin-top:-250px;\n  margin-left:30px;\n  margin-right:30px;\n}\n\n.login-box img{\n  width:50px;\n  height:50px;\n  margin:0px auto;\n  display:block;\n  -webkit-animation: spinnerRotate 900ms ease-out both;\n  animation: spinnerRotate 900ms ease-out both;\n}\n\n.main-header .logo .logo-mini img{\n  width:25px;\n  height:25px;\n}\n\n.main-header .logo .logo-lg img{\n  width:25px;\n  height:25px;\n  margin-right:5px;\n  position:relative;\n  top:-1px;\n}\n\n.main-footer{\n  background:#F1F5FA;\n  border-top:1px solid #f9f9f9;\n  font-size:11px;\n}\n\n.login-box-body .form-control-feedback, .register-box-body .form-control-feedback{\n  color:#ddd;\n}\n\n.form-control{\n  border-radius:3px;\n}\n\n.form-control.json{\n  border:2px solid #ddd;\n  border-radius:1px;\n}\n\n.content-header a.btn{\n  margin-left:10px;\n}\n\n.content-header i{\n  margin-right:3px;\n}\n\n.app-container .side-body{\n  margin-left: 50px;\n  margin-right: 12px;\n}\n\n.navbar .navbar-nav > li > a{\n    font-family: 'Open Sans', sans-serif;\n    text-transform: capitalize;\n}\n.app-container .content-container .side-body.padding-top{\n  padding-top:62px;\n}\n\n.breadcrumb{\n  margin-bottom: 0;\n  float: left;\n  margin-top: 11px;\n}\n\n.content-header>.breadcrumb{\n  border:1px solid #f1f1f1;\n  position:relative;\n  top:0px;\n  left:0px;\n  width:100%;\n  display:block;\n  margin:10px auto;\n}\n\n.breadcrumb>.active{\n  color:#58595f;\n  line-height:24px;\n}\n\n.callout{\n  font-size:14px;\n}\n\n.content-wrapper{\n  background:#fff;\n}\n\ntable.dataTable{\n  margin-top:0px !important;\n}\n\ntable a.btn-sm{\n  text-decoration:none;\n}\n\n.btn-sm i{\n  position:relative;\n  top:1px;\n  font-size:12px;\n}\n\n#dashboard_bg{\n  width:100%;\n  height:100px;\n  background: url('../images/dashboard-bg.jpg');\n  background-size:cover;\n  position:absolute;\n  top:0px;\n  left:0px;\n  background-position-y: bottom;\n  line-height:100px;\n  color: #fff;\n}\n\n#dashboard_bg p{\n  left:20px;\n  position:relative;\n}\n\n#dashboard_top_padding{\n  height:70px;\n  width:100%;\n  display:block;\n}\n\n.delete, .restore, .edit{\n  margin-left:5px;\n  cursor:pointer;\n}\n\n.user-panel .text-info{\n  color:#3B3E44;\n}\n\n/********** End Hamburger Btn ************/\n\n.spinnerRotate {\n  -webkit-animation: spinnerRotate 900ms ease-out both;\n  animation: spinnerRotate 900ms ease-out both;\n}\n\n@keyframes spinnerRotate\n{\n    0% {\n      transform: scale(0.7) rotate(0deg);\n      opacity: 0.0;\n    }\n    100% {\n      transform: scale(1) rotate(270deg);\n      opacity: 1;\n    }\n}\n\n@-webkit-keyframes spinnerRotate\n{\n    0% {\n      -webkit-transform: scale(0.7) rotate(0deg);\n      opacity: 0.0;\n    }\n    100% {\n      -webkit-transform: scale(1) rotate(270deg);\n      opacity: 1;\n    }\n}\n@-moz-keyframes spinnerRotate\n{\n    0% {\n      -moz-transform: scale(0.7) rotate(0deg);\n      opacity: 0.0;\n    }\n    100% {\n      -moz-transform: scale(1) rotate(270deg);\n      opacity: 1;\n    }\n}\n@-ms-keyframes spinnerRotate\n{\n    0% {\n      -ms-transform: scale(0.7) rotate(0deg);\n      opacity: 0.0;\n    }\n    100% {\n      -ms-transform: scale(1) rotate(270deg);\n      opacity: 1;\n    }\n}\n\n\n/********** TINY MCE Edits **********/\n\n.mce-window.mce-in{\n  border-radius:2px;\n}\n\np#the_plugin_name{\n  display:none !important;\n}\n\n/********** End Tiny MCE Edits **********/\n\n.app-container .content-container .side-menu .navbar-nav li a .icon{\n  margin-top: 2px;\n  font-size: 18px;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar li.active > a .icon{\n  margin-left:0px;\n}\n\n.app-container .content-container .side-menu .navbar-header .navbar-brand .icon {\n    font-size: 26px;\n    top: 3px;\n    position: relative;\n}\n\n.app-container .content-container .side-menu .navbar-header .navbar-brand .logo-icon-container{\n  width:60px;\n  height:60px;\n  display: inline-block;\n  text-align:center;\n}\n\n.app-container .content-container .side-menu .navbar-header .navbar-brand img {\n    max-width: 50%;\n    max-height: 50%;\n    position: relative;\n    top:-1px;\n    display:inline-block;\n}\n\n.page-content.read .panel .panel-body:not(:last-child) {\n  border-bottom: 1px solid #eeeeee;\n}\n\n.page-content {\n\n  &.browse {\n\n    .form-search {\n      position: relative;\n      z-index: 1;\n    }\n\n  }\n\n}\n\n.page-content > .row > [class*=\"col-\"]:not(:first-child) {\n  padding-left: 8px;\n}\n.page-content > .row > [class*=\"col-\"]:not(:last-child) {\n  padding-right: 8px;\n}\n\n.app-container.expanded .content-container .side-menu .navbar-header .navbar-brand .title{\n    position: relative;\n    top:0px;\n    left:4px;\n    text-transform: uppercase;\n    font-weight:400;\n\n}\n\n.page-content.dashboard{\n  margin-top:360px;\n}\n\n.page-content .settings{\n  padding-right:20px;\n}\n\n.page-content.col-md-12{\n    padding-right:0px;\n}\n\n.page-content .form-edit-add ul.permissions {\n    list-style-type: none;\n    li {\n        list-style-type: none;\n    }\n}\n\n.app-container .content-container .side-menu .navbar-header .navbar-brand .title{\n  text-transform: uppercase;\n  position:relative;\n  top:0px;\n  left:4px;\n}\n\n.app-container .content-container .side-menu .navbar-nav li a .title{\n  position:relative;\n  top:-4px;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar li.active > a{\n  color: #fff;\n  background: none;\n  border-left:0px;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar li > a {\n    color: #76838f;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar{\n  background:none;\n  font-weight:400;\n}\n\n.voyager .side-menu.sidebar-inverse{\n /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#353d47+0,21292e+100 */\nbackground: rgb(53,61,71); /* Old browsers */\nbackground: -moz-linear-gradient(45deg,  rgba(53,61,71,1) 0%, rgba(33,41,46,1) 100%); /* FF3.6-15 */\nbackground: -webkit-linear-gradient(45deg,  rgba(53,61,71,1) 0%,rgba(33,41,46,1) 100%); /* Chrome10-25,Safari5.1-6 */\nbackground: linear-gradient(45deg,  rgba(53,61,71,1) 0%,rgba(33,41,46,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */\nfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#353d47', endColorstr='#21292e',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */\noverflow-x: hidden;\n    -webkit-transition: width 500ms cubic-bezier(0.19, 1, 0.22, 1);\n    transition: width  500ms cubic-bezier(0.19, 1, 0.22, 1);\n}\n\n.app-container .side-body, .app-container.expanded .content-container .navbar-top, .app-container .content-container .navbar-top{\n  transition:all 500ms cubic-bezier(0.19, 1, 0.22, 1);\n}\n\n.app-container.expanded.no-animation .content-container, .app-container.expanded.no-animation{\n  transition:none;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar li > a:hover{\n  color: #fff;\n  background: #2A363B;\n}\n\n/**** HAMBURGER MENU **********/\n\n.hamburger{\n  float:left;\n  width:30px;\n  height:30px;\n  position:relative;\n  padding:28px 30px;\n  cursor:pointer;\n  opacity:1;\n  transition:all 500ms cubic-bezier(0.19, 1, 0.22, 1);\n  padding-left: 20px;\n  margin-right: 0px;\n}\n\n.hamburger:hover{\n  opacity:0.7;\n  transition:all 500ms cubic-bezier(0.19, 1, 0.22, 1);\n}\n\n.hamburger-inner{\n  width:15px;\n  height:2px;\n  background:#76838F;\n  display:block;\n  border-radius:10px;\n  top:50%;\n  left:50%;\n  margin-left:-10px;\n  margin-top:-1px;\n  position:absolute;\n  transition:all 300ms cubic-bezier(0.19, 1, 0.22, 1);\n}\n\n.hamburger-inner:after{\n  width:10px;\n  height:2px;\n  background:#76838F;\n  display:block;\n  border-radius:10px;\n  position:absolute;\n  bottom:-5px;\n  content:'';\n  transition: all 500ms cubic-bezier(0.19, 1, 0.22, 1);\n}\n\n.hamburger-inner:before{\n  width:20px;\n  height:2px;\n  background:#76838F;\n  display:block;\n  border-radius:10px;\n  position:absolute;\n  content:'';\n  top:-5px;\n  transition: all 500ms cubic-bezier(0.19, 1, 0.22, 1);\n}\n\n.hamburger.is-active .hamburger-inner{\n  width:20px;\n}\n\n.hamburger.is-active .hamburger-inner:before{\n    width:20px;\n    -webkit-transform: translate3d(-5px,1px,0) rotate(-45deg) scaleX(.5);\n    transform: translate3d(-5px,1px,0) rotate(-45deg) scaleX(.5);\n}\n\n.hamburger.is-active .hamburger-inner:after{\n    width:20px;\n    -webkit-transform: translate3d(-5px,-1px,0) rotate(45deg) scaleX(.5);\n    transform: translate3d(-5px,-1px,0) rotate(45deg) scaleX(.5);\n}\n\n\n.hamburger.is-active.no-animation .hamburger-inner, .hamburger.is-active.no-animation .hamburger-inner:before, .hamburger.is-active.no-animation .hamburger-inner:after{\n  transition:none;\n  width:20px;\n}\n\n#sidebar-anchor {\n  position: absolute;\n  top: -50px;\n  margin-right: 10px;\n  padding: 20px 10px 9px;\n  cursor: pointer;\n  font-size: 20px;\n  float: left;\n  text-shadow: 2px 2px #FFF;\n  color: #CCC !important;\n}\n#sidebar-anchor.active {\n  color: #76838f !important;\n  text-decoration: underline;\n}\n#sidebar-anchor:hover {\n  color: #76838f !important;\n}\n.expanded #sidebar-anchor {\n    position: relative;\n    top: 0px;\n    transition: top .3s ease, color .2s;\n    left: -10px;\n    text-decoration: none;\n}\n\n#voyager-loader{\n  background:#F9F9F9;\n  position:fixed;\n  width:100%;\n  height:100%;\n  left:0px;\n  top:0px;\n  z-index:99;\n}\n\n#voyager-loader img{\n  width:100px;\n  height:100px;\n  position:absolute;\n  top:50%;\n  left:50%;\n  margin-left:-50px;\n  margin-right:-50px;\n  -webkit-animation:spin 1s linear infinite;\n  -moz-animation:spin 1s linear infinite;\n  animation:spin 1s linear infinite;\n}\n\n\n.voyager .navbar .navbar-nav .dropdown-menu, .voyager .navbar.navbar-default .navbar-nav .dropdown-menu{\n  background-color:#fff;\n}\n\n.navbar .dropdown-menu.dropdown-menu-animated{\n  display: block;\n    padding: 1.5rem 1.75rem;\n    visibility: hidden;\n    border: 0 none;\n    box-shadow: 0 0 4px 0 rgba(0,0,0,0.25);\n    opacity: 0;\n    transition: opacity .5s, transform .5s, visibility 0s .5s;\n    transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);\n    transform: scale3d(0.95, 0.95, 1) translate3d(0, -15px, 0);\n    transform-origin: 100% 0;\n    border-radius:4px;\n    border: 0 none;\n    box-shadow: 0 0 4px 0 rgba(0,0,0,0.25);\n    background-color: #fff;\n    background-clip: padding-box;\n    width:250px;\n    z-index:98;\n    margin-right:5px;\n    margin-top:5px;\n}\n\n.navbar .dropdown.profile .dropdown-menu{\n  width:250px;\n  padding: 18px;\n  display: none;\n  position: relative !important;\n  visibility: hidden;\n}\n\n.navbar .dropdown.profile .dropdown-menu h5, .navbar .dropdown.profile .dropdown-menu h6{\n  float:left;\n}\n\n.navbar .dropdown.profile .dropdown-menu h6{\n    margin-top: 0;\n    font-weight: 200;\n    width:115px;\n    text-overflow: ellipsis;\n    overflow:hidden;\n}\n\n.profile .dropdown-toggle img{\n  width:30px;\n  height:30px;\n  border-radius:50%;\n}\n\n.navbar .dropdown.profile .dropdown-menu h5{\nfloat: left;\n    margin-bottom: 5px;\n    margin-top: 12px;\n  }\n\n\n.dropdown-menu>li>a{\n   display: block;\n    padding: 10px 5px;\n    clear: both;\n    font-weight: 400;\n    line-height: 1.42857143;\n    color: #777;\n    white-space: nowrap;\n    text-align: left;\n    transition:color 0.3s ease;\n}\n\n.dropdown-menu>li>a i{\n  position:relative;\n  top:2px;\n}\n\n.dropdown-menu .divider{\n  margin-top:20px;\n  background-color:#f1f1f1;\n}\n\n.dropdown-menu>li:last-child>a{\n  margin-bottom:10px;\n}\n\n.dropdown-menu>li>a:focus, .dropdown-menu>li>a:hover{\n  background:none;\n  color: #333;\n  transition:color 0.3s ease;\n}\n\n.navbar .dropdown.profile .dropdown-menu .profile-body{\n  padding-left:10px;\n}\n\n.navbar .open .dropdown-menu.dropdown-menu-animated {\n    visibility: visible;\n    opacity: 1;\n    transition: opacity .5s, transform .5s;\n    transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);\n    transform: scale3d(1, 1, 1) translate3d(0, 0, 0);\n}\n\n.navbar .dropdown.profile .dropdown-menu li.profile-img img.profile-img{\n  height: 60px;\n    width: 60px;\n    float:left;\n    border-radius:50%;\n    margin-right:10px;\n}\n\n.page-title .btn.btn-success{\n  position:relative;\n  left:15px;\n  top:-1px;\n}\n\n.breadcrumb{\n    padding: 4px 10px;\n    list-style: none;\n    background-color: #fff;\n    border-radius: 25px;\n    position: relative;\n    top: 2px;\n    border: 1px solid #f9f9f9;\n    font-size: 12px;\n    padding-right: 15px;\n}\n\n.breadcrumb a{\n  color:#22A7F0;\n  font-family:'Open Sans';\n  font-weight:400;\n}\n\n.breadcrumb i{\n  position:relative;\n  top:2px;\n}\n\n.breadcrumb>.active, .breadcrumb>li{\n  font-weight:400;\n}\n\n.site-footer-right{\n  padding-right:20px;\n}\n\n.form-control{\n    color: #76838f;\n    background-color: #fff;\n    background-image: none;\n    border: 1px solid #e4eaec;\n}\n\n.form-control.focus, .form-control:focus {\n    border-color: #62a8ea;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n\n.input-sm {\n    height: 32px;\n    padding: 6px 13px;\n    font-size: 12px;\n    line-height: 1.5;\n  }\n\n.voyager .panel.panel-warning .panel-heading {\n    background-color: #F2A654;\n    border-bottom:0px;\n}\n\n.voyager .panel.panel-primary .panel-heading{\n  background-color:#62A8EA;\n  border-bottom:0px;\n}\n\n.voyager .panel.panel-primary .panel-info, .voyager .panel.panel-info .panel-heading{\n  background-color:#57C7D4;\n  border-bottom:0px;\n}\n\n.panel-title {\n    display: block;\n    padding: 20px 30px;\n    padding-left:15px;\n    font-size: 18px;\n    text-align:left;\n}\n\n.panel-footer{\n  /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#fcfcfc+0,ffffff+100 */\n  background: #fdfdfd; /* Old browsers */\n  background: -moz-linear-gradient(top,  rgba(252,252,252,1) 0%, rgba(255,255,255,1) 100%); /* FF3.6-15 */\n  background: -webkit-linear-gradient(top,  rgba(252,252,252,1) 0%,rgba(255,255,255,1) 100%); /* Chrome10-25,Safari5.1-6 */\n  background: linear-gradient(to bottom,  rgba(252,252,252,1) 0%,rgba(255,255,255,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fcfcfc', endColorstr='#ffffff',GradientType=0 ); /* IE6-9 */\n\n}\n\n.voyager .panel.panel-warning, .voyager .panel.panel-primary, .voyager .panel.panel-info{\n  border:0px;\n}\n\n.voyager .pagination .active > a, .voyager .pagination .active > a:focus, .voyager .pagination .active > a:hover, .voyager .pagination .active span, .voyager .pagination .active > span:focus, .voyager .pagination .active > span:hover {\n    z-index: 3;\n    color: #fff;\n    cursor: default;\n    background-color: #62a8ea;\n    border-color: #62a8ea;\n    outline: none;\n}\n\n.pagination li>a:focus, .pagination li>a:hover, .pagination li>span:focus, .pagination li>span:hover{\n  outline:none;\n}\n\n.panel-bordered>.panel-body {\n    padding:20px;\n    padding-top: 30px;\n    overflow:hidden;\n}\n\n.voyager .panel {\n    margin-bottom: 22px;\n    background-color: #fff;\n    border: 1px solid transparent;\n    border-radius: 4px;\n    -webkit-box-shadow: 0 2px 10px rgba(0,0,0,.05);\n    box-shadow:0 2px 10px rgba(0,0,0,.05);\n}\n\n.btn.btn-primary {\n    color: #fff;\n    opacity:0.9;\n    background:#22A7F0;\n    border: 0px;\n    border-radius: 3px;\n\n}\n\n.btn.btn-primary:hover{\n  opacity:1;\n}\n\n.btn.btn-primary.active {\n    background: #0081CA;\n}\n\n.voyager .btn.btn-circle{\n  border-radius:50px;\n}\n\n.voyager .btn.btn-sm{\n  opacity:0.9;\n}\n\n.voyager .btn.btn-sm:hover{\n  opacity:1;\n}\n\n.voyager .btn.btn-sm, .voyager .btn.btn-sm:hover{\n  border-width:1px;\n  border-color:rgba(255, 255, 255, 0);\n  color:#fff;\n}\n.voyager .btn.btn-default.btn-sm, .voyager .btn.btn-default.btn-sm:hover{\n  color:inherit;\n}\n\n.btn-primary.focus, .btn-primary:focus, .btn-primary:hover, .btn-primary:active {\n    opacity:1;\n}\n\n.widgets{\n  display:flex;\n  flex-direction:row;\n  padding:0px;\n}\n\n.panel.widget{\n  padding:30px;\n  border:0px;\n  border-radius:3px;\n  flex:1;\n  margin:10px;\n}\n\n.panel.widget.center{\n  text-align:center;\n}\n\n.panel.widget .avatar{\n    width: 100px;\n    height: auto;\n    border: 0 none;\n    border-radius: 50%;\n}\n\n.panel.widget i{\n    font-size: 48px;\n    background: rgba(0, 0, 0, 0.3);\n    border-radius: 50%;\n    width: 100px;\n    height: 100px;\n    display: block;\n    margin: 0 auto;\n    color: #eee;\n    line-height: 110px;\n}\n\n.panel.widget h4{\n  color:#fff;\n  font-weight:300;\n  margin-top:20px;\n  font-size:20px;\n}\n\n.panel.widget p{\n  margin:30px 0;\n  font-size:20px;\n  font-size: 14px;\n  line-height: 1.57142857;\n  color: #DDD;\n  display:block;\n  max-height:65px;\n  margin-bottom:0px;\n}\n\n.panel.widget .readm-link{\n  margin-top:20px;\n  color:#fff;\n  text-decoration: underline;\n}\n\n.panel.widget .btn-primary{\n  margin-top:20px;\n  color:#fff;\n}\n\n.btn{\n    padding: 6px 15px;\n    font-size: 14px;\n    line-height: 1.57142857;\n    border-radius: 3px;\n    -webkit-transition: border .2s linear,color .2s linear,width .2s linear,background-color .2s linear;\n    -o-transition: border .2s linear,color .2s linear,width .2s linear,background-color .2s linear;\n    transition: border .2s linear,color .2s linear,width .2s linear,background-color .2s linear;\n    -webkit-font-smoothing: subpixel-antialiased;\n}\n\n.panel.widget.bgimage{\n  background-size:cover;\n  background-position:center center;\n  position:relative;\n}\n\n.panel.widget .panel-content{\n  z-index:9;\n  position:relative;\n}\n\n.panel.widget .dimmer{\n  background:rgba(45,53,61, 0.5);\n  /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#2d353d+0,2d353d+100&0.79+0,0.5+100 */\n  background: -moz-linear-gradient(-45deg,  rgba(45,53,61,0.79) 0%, rgba(45,53,61,0.5) 100%); /* FF3.6-15 */\n  background: -webkit-linear-gradient(-45deg,  rgba(45,53,61,0.79) 0%,rgba(45,53,61,0.5) 100%); /* Chrome10-25,Safari5.1-6 */\n  background: linear-gradient(135deg,  rgba(45,53,61,0.79) 0%,rgba(45,53,61,0.5) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#c92d353d', endColorstr='#802d353d',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */\n  opacity:1;\n  transition:all 0.3s ease;\n  position:absolute;\n  left:0px;\n  top:0px;\n  width:100%;\n  height:100%;\n  border-radius:0px;\n}\n\n.side-menu .panel.widget .dimmer{\n  border-radius: 0px;\n}\n\n.side-menu:hover .panel.widget .dimmer, .expanded .side-menu .panel.widget .dimmer{\n\n  background: -moz-linear-gradient(275deg, rgba(36,44,50,1) 0%, rgba(36,44,50,0.95) 34%, rgba(36,44,50,0.7) 100%);\n  background: -webkit-linear-gradient(275deg, rgba(36,44,50,1) 0%,rgba(36,44,50,0.95) 34%,rgba(36,44,50,0.7) 100%);\n  background: linear-gradient(275deg, rgba(36,44,50,1) 0%,rgba(36,44,50,0.95) 34%,rgba(36,44,50,0.7) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#242c32', endColorstr='#00242c32',GradientType=1 );\n}\n\n .side-menu .navbar-header, .voyager .side-menu .navbar-header{\n  float:none;\n  margin-bottom:0px;\n}\n\n .side-menu .panel.widget{\n  padding:12px 0;\n  margin:0px;\n  border-radius:0px;\n}\n\n.side-menu-container  .side-menu .panel.widget .dimmer{\n  border-radius:0px;\n}\n\n\n.app-container  .side-menu .panel.widget p, .app-container  .side-menu .panel.widget h4, .app-container  .side-menu .panel.widget a {\n  display:none;\n}\n\n.app-container  .side-menu .panel.widget p{\n  font-size:12px;\n  margin-top:0px;\n}\n\n.app-container  .side-menu .panel.widget .avatar{\n    width: 36px;\n    height: 36px;\n    float: left;\n    margin-left: 12px;\n    border: 0px;\n    position: relative;\n    top: 3px;\n}\n\n.app-container .side-menu .panel.widget h4 {\n    float: left;\n    display: block;\n    position: absolute;\n    left: 60px;\n    top: -7px;\n    width: 190px;\n    text-align: left;\n    opacity:0;\n    transition:opacity 0.3s ease;\n    margin-top: 17px;\n    left: 56px;\n    overflow: hidden;\n    height: 26px;\n}\n\n.app-container.expanded .panel.widget h4 {\n  opacity:1;\n}\n\n.app-container .side-menu:hover .panel.widget h4 {\n  opacity:1;\n}\n\n.app-container .side-menu:hover .panel.widget .avatar{\n  float:left;\n  margin-left:12px;\n  transition:none;\n}\n\n.app-container.expanded .fadetoblack {\n    background: rgba(0, 0, 0, 0.6);\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    right: 0;\n    left: 0;\n    z-index: 800;\n}\n\n.dd .item_actions{\n  z-index:9;\n  position:relative;\n  top:4px;\n  right:10px;\n}\n\n.dd .item_actions .delete, .dd .item_actions .edit{\n  cursor:pointer;\n}\n\n.dd .item_actions .edit{\n  margin-right:5px;\n}\n\n.dd .dd-handle .url{\n  font-weight:normal;\n  margin-left:10px;\n}\n\n.toggle-group .btn, .toggle-group .btn.btn-default{\n  padding-bottom:0px;\n  margin-top:0px;\n  margin-bottom:0px;\n  padding-top:5px;\n}\n\n.toggle-group span.btn, .toggle-group span.btn-default{\n  margin-top:0px;\n  margin-bottom:0px;\n  line-height:20px;\n}\n\n.toggle.btn{\n  margin-top:0px;\n  height:30px !important;\n  line-height:20px !important;\n  margin-bottom:0px;\n}\n\n.delete-row{\n  margin-top:0px;\n  margin-bottom:0px;\n  padding-bottom:4px;\n}\n\n.drag{\n  text-align:center;\n}\n\n.drag i{\n  font-size:20px;\n  margin-top:5px;\n  cursor:move;\n  display:block;\n  color:#A6B3BF;\n}\n\n.drag i:hover{\n  color:#76838F;\n}\n\n.newTableRow.ui-sortable-helper{\n  width:100%;\n  border:1px solid #EAEAEA;\n  border-top:0px;\n  background:#fff;\n  display: table;\n}\n\n.newTableRow{\n  position:relative;\n  width:100%;\n}\n\n.newTableRow td{\n  position:relative;\n}\n\n.enum_val{\n  display:none;\n}\n\n.enum_val input{\n  width:auto;\n}\n\n#delete_builder_form{\n  margin-left:10px;\n  float:right;\n}\n\n.btn-outline{\n  background:none;\n  border:1px solid #ddd;\n}\n\n@media(min-width:800px){\n  #table_info .modal-dialog{\n    width:750px;\n  }\n}\n\n#table_info .modal-title{\n  padding-left:36px;\n}\n\n#table_info .modal-title i{\n  font-size: 25px;\n  position: absolute;\n  left: 20px;\n  top: 13px;\n}\n\n.database-tables .name{\n  float:left;\n  position:relative;\n}\n\n.database-tables .browse_bread{\n    margin-right:10px;\n}\n\n.database-tables .name a{\n  float:left;\n}\n\n.database-tables tr .btn-default:hover{\n  background:#ffffff;\n}\n\n.database-tables tr .btn-danger:hover{\n  background:#f96868;\n}\n\n.database-tables tr .bread_actions{\n  opacity:0.6;\n  -webkit-transition: opacity 0.3s ease;\n  -moz-transition: opacity 0.3s ease;\n  -o-transition: opacity 0.3s ease;\n  transition: opacity 0.3s ease;\n}\n\n.database-tables tr:hover .bread_actions{\n  opacity:1;\n  -webkit-transition: opacity 0.3s ease;\n  -moz-transition: opacity 0.3s ease;\n  -o-transition: opacity 0.3s ease;\n  transition: opacity 0.3s ease;\n}\n\n.database-tables .bread_actions .edit {\n  margin-left:0px;\n  display:inline-block;\n}\n\n.database-tables .btn-default{\n  border:1px solid #eeeeee;\n}\n\n.database-tables .bread_actions form .btn-default{\n  border:1px solid #eeeeee;\n}\n\n.voyager .side-menu.sidebar-inverse .navbar li.dropdown .panel-body{\n  padding:0px;\n}\n\n.voyager .alert{\n    margin-right: 0px;\n    margin-bottom: 5px;\n    border-radius: 0;\n    color: #fff;\n    border: 0;\n    border-left: 5px solid rgba(0, 0, 0, 0.1);\n    border-color:rgba(0, 0, 0, 0.1);\n    border-radius:3px;\n    margin-bottom:30px;\n}\n\n.voyager .alert.alert-success{\n  background-color: #55B559;\n  color:#fff;\n  border-color:rgba(0, 0, 0, 0.1);\n}\n.voyager .alert.alert-danger{\n  background-color: #F55145;\n  color:#fff;\n  border-color:rgba(0, 0, 0, 0.1);\n}\n.voyager .alert.alert-warning{\n  background-color: #FF9E0F;\n  color:#fff;\n  border-color:rgba(0, 0, 0, 0.1);\n}\n.voyager .alert.alert-info{\n  background-color:#22A7F0;\n  color:#fff;\n  border-color:rgba(0, 0, 0, 0.1);\n}\n\n.voyager .panel-body .alert{\n  margin-right:0px;\n  margin-bottom:10px;\n  margin-top:10px;\n}\n\n.voyager input[type=\"file\"]{\n  padding: 20px;\n  background: #fff;\n  border-radius: 4px;\n  border: 1px solid #f1f1f1;\n  outline: none;\n  cursor: pointer;\n  line-height: 16px;\n  color: #aaa;\n  font-weight: 500;\n  font-size: 12px;\n  transition:all 0.3s ease-in-out;\n}\n\n.voyager input[type=\"file\"]:hover, .voyager input[type=\"file\"]:active{\n  background: #fcfcfc;\n}\n\n/********** CUSTOM RADIO BUTTON STYLES **********/\n\nul.radio{\n  list-style: none;\n  height: 100%;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n\n\nul.radio li{\n  color: #AAAAAA;\n  display: block;\n  position: relative;\n  float: left;\n  width: 100%;\n  height: auto;\n  border-bottom: 1px dotted #f1f1f1;\n}\n\nul.radio li input[type=radio]{\n  position: absolute;\n  visibility: hidden;\n}\n\nul.radio li label{\n  display: block;\n  position: relative;\n  font-weight: normal;\n  font-size: 14px;\n  padding-left: 40px;\n  margin: 9px auto;\n  height: 25px;\n  z-index: 9;\n  cursor: pointer;\n  -webkit-transition: all 0.25s linear;\n  margin-bottom: 5px;\n}\n\nul.radio li:hover label{\n  color: #535B65;\n}\n\nul.radio li .check{\n  display: block;\n  position: absolute;\n  border: 4px solid #AAAAAA;\n  border-radius: 100%;\n  height: 20px;\n  width: 20px;\n  top: 10px;\n  left: 10px;\n  z-index: 5;\n  transition: border .25s linear;\n  -webkit-transition: border .25s linear;\n}\n\nul.radio li:hover .check {\n  border: 4px solid #22A7F0;\n}\n\nul.radio li .check::before {\n  display: block;\n  position: absolute;\n  content: '';\n  border-radius: 100%;\n  height: 8px;\n  width: 8px;\n  top: 2px;\n  left: 2px;\n  margin: auto;\n  transition: background 0.25s linear;\n  -webkit-transition: background 0.25s linear;\n}\n\ninput[type=radio]:checked ~ .check {\n  border: 4px solid #22A7F0;\n}\n\ninput[type=radio]:checked ~ .check::before{\n  background: #22A7F0;\n}\n\ninput[type=radio]:checked ~ label{\n  color: #535B65;\n}\n\n/********** CUSTOM CHECKBOX BUTTON STYLES **********/\n\nul.checkbox {\n  padding-left: 20px;\n}\n\nul.checkbox li {\n  margin-bottom: 20px;\n}\n\nul.checkbox li ul li {\n  margin-bottom: 0;\n}\n\n\nul.checkbox label {\n  padding-left: 0;\n}\n\n/********** END CUSTOM RADIO BUTTON STYLES **********/\n\n/********** ACE editor defaults **********/\n\n.ace_editor.min_height_400{\n    min-height:400px;\n    width:100%;\n}\n\n.ace_editor.min_height_200{\n  min-height:200px;\n  width:100%;\n}\n\n/********** End ACE editor defaults **********/\n\n.btn-success i.voyager-plus{\n  position:relative;\n  top:2px;\n}\n\n.show-res{\n  margin-left: 5px;\n  margin-top: 15px;\n}\n\n.alerts {\n  padding: 10px 10px 0;\n  padding-left: 25px;\n  padding-right: 25px;\n  position: relative;\n  top: 10px;\n}\n\n.alerts .alert {\n  margin-right: 0px;\n}\n\n.alerts .alert>p,\n.alerts .alert>ul {\n  margin-top: 0;\n}\n\n\n/******** END VOYAGER THEME CSS *********/\n\n/********** CHECK Box 3 - Possible Delete **********/\n\n.checkbox3 label::before,.radio3 label::before{overflow:hidden;vertical-align:middle;text-align:center}.checkbox3 label,.radio3 label{white-space:nowrap;cursor:pointer}.checkbox3{position:relative}.checkbox3 input{position:absolute;left:-9999px}.checkbox3 label::after,.checkbox3 label::before{content:'';top:10px;bottom:10px;left:0;display:block}.checkbox3 label{display:block;position:relative;padding:11px 0 11px 30px;font-size:12px;margin-bottom:0;margin-top:-4px}.checkbox3 label::before{position:absolute;width:21px;height:21px;border:1px solid #CCC;-moz-border-radius:1px;border-radius:1px;-webkit-transition:background-color .2s;-moz-transition:background-color .2s;transition:background-color .2s}.checkbox3 label::after{position:absolute;width:19px;height:19px;border:12px solid #FFF;margin:1px;-webkit-transition:all 50ms;-moz-transition:all 50ms;transition:all 50ms;opacity:0}.checkbox3 input:checked+label::before{border-width:1px;border-style:solid;background-color:#444;border-color:#444;color:#fff}.checkbox3 input:checked+label::after{border:3px solid #FFF;opacity:1}.checkbox3.checkbox-sm label{padding:8px 0 8px 22px}.checkbox3.checkbox-sm label::before{width:14px;height:14px;line-height:14px}.checkbox3.checkbox-sm label::after{width:12px;height:12px}.checkbox3.checkbox-lg label{padding:15px 0 15px 40px}.checkbox3.checkbox-lg label::before{width:28px;height:27px;line-height:24px}.checkbox3.checkbox-lg label::after{width:26px;height:25px}.checkbox3.checkbox-inline,.radio3.radio-inline{padding-top:0;padding-left:0;padding-right:0;margin-left:0;margin-right:20px}.checkbox3.checkbox-inline input[type=checkbox],.checkbox3.checkbox-inline input[type=radio],.radio3.radio-inline input[type=checkbox],.radio3.radio-inline input[type=radio]{position:absolute}.checkbox3.checkbox-check input:checked+label::after,.checkbox3.checkbox-check label::after{border:0}.checkbox3.checkbox-check label::after{content:\"l\";font-family:Voyager;font-size:12px;color:#FFF;width:19px;height:20px;line-height:20px;vertical-align:middle;text-align:center;border-width:0}.checkbox3.checkbox-check.checkbox-sm label::after{font-size:9px;line-height:12px;width:12px}.checkbox3.checkbox-check.checkbox-lg label::after{font-size:16px;line-height:26px;width:26px}.checkbox3.checkbox-check.checkbox-light label::after{color:#444}.checkbox3.checkbox-circle label::after,.checkbox3.checkbox-circle label::before{-moz-border-radius:20px;border-radius:20px}.checkbox3.checkbox-round label::after,.checkbox3.checkbox-round label::before,.checkbox3.checkbox-s1 label::after,.checkbox3.checkbox-s1 label::before{-moz-border-radius:4px;border-radius:4px}.checkbox3.checkbox-light label::before{background-color:transparent}.checkbox3.checkbox-light input:checked+label::before{background-color:transparent;border-color:#444}.checkbox3.checkbox-info input:checked+label::before{background-color:#2caef5;border-color:#2caef5}.checkbox3.checkbox-primary input:checked+label::before{background-color:#4183d7;border-color:#4183d7}.checkbox3.checkbox-success input:checked+label::before{background-color:#36b846;border-color:#36b846}.checkbox3.checkbox-warning input:checked+label::before{background-color:#ff9c00;border-color:#ff9c00}.checkbox3.checkbox-danger input:checked+label::before{background-color:#e50011;border-color:#e50011}.checkbox3.checkbox-primary.checkbox-light input:checked+label::before{background-color:transparent;border-color:#4183d7}.checkbox3.checkbox-primary.checkbox-light input:checked+label::after{color:#4183d7}.checkbox3.checkbox-info.checkbox-light input:checked+label::before{background-color:transparent;border-color:#2caef5}.checkbox3.checkbox-info.checkbox-light input:checked+label::after{color:#2caef5}.checkbox3.checkbox-success.checkbox-light input:checked+label::before{background-color:transparent;border-color:#36b846}.checkbox3.checkbox-success.checkbox-light input:checked+label::after{color:#36b846}.checkbox3.checkbox-warning.checkbox-light input:checked+label::before{background-color:transparent;border-color:#ff9c00}.checkbox3.checkbox-warning.checkbox-light input:checked+label::after{color:#ff9c00}.checkbox3.checkbox-danger.checkbox-light input:checked+label::before{background-color:transparent;border-color:#e50011}.checkbox3.checkbox-danger.checkbox-light input:checked+label::after{color:#e50011}.radio3{position:relative}.radio3 input{position:absolute;left:-9999px}.radio3 label{display:block;position:relative;padding:11px 0 11px 30px;font-size:12px;margin-bottom:0;margin-top:-4px}.radio3 label::after,.radio3 label::before{content:'';display:block;position:absolute;top:10px;bottom:10px;left:0}.radio3 label::before{width:21px;height:21px;border:1px solid #CCC;-webkit-transition:background-color .2s;-moz-transition:background-color .2s;transition:background-color .2s}.radio3 label::after{width:19px;height:19px;border:12px solid #FFF;margin:1px;-webkit-transition:all 50ms;-moz-transition:all 50ms;transition:all 50ms;opacity:0}.radio3 input:checked+label::before{font-family:Voyager;border-width:1px;border-style:solid;background-color:#444;border-color:#444;color:#fff}.radio3 input:checked+label::after{border:3px solid #FFF;opacity:1}.radio3.radio-check label::after,.radio3.radio-check.radio-light label::after{content:\"l\";font-family:Voyager;color:#FFF;width:19px;height:20px;line-height:20px;vertical-align:middle;text-align:center;border-width:0}.radio3 label::after,.radio3 label::before{-moz-border-radius:20px;border-radius:20px}.radio3.radio-check input:checked+label::after{border-width:0}.radio3.radio-check.radio-light input:checked+label::before{background-color:transparent}.radio3.radio-check.radio-light input:checked+label::after{border-width:0;color:#444}.radio3.radio-sm label{padding:8px 0 8px 22px}.radio3.radio-sm label::before{width:14px;height:14px;line-height:14px}.radio3.radio-sm label::after{width:12px;height:12px}.radio3.radio-lg label{padding:15px 0 15px 40px}.radio3.radio-lg label::before{width:28px;height:27px;line-height:24px}.radio3.radio-lg label::after{width:26px;height:25px}.radio3.radio-check.radio-sm label::after{font-size:9px;line-height:12px;width:12px}.radio3.radio-check.radio-lg label::after{font-size:16px;line-height:26px;width:26px}.radio3.radio-primary input:checked+label::before{background-color:#4183d7;border-color:#4183d7}.radio3.radio-info input:checked+label::before{background-color:#2caef5;border-color:#2caef5}.radio3.radio-success input:checked+label::before{background-color:#36b846;border-color:#36b846}.radio3.radio-warning input:checked+label::before{background-color:#ff9c00;border-color:#ff9c00}.radio3.radio-danger input:checked+label::before{background-color:#e50011;border-color:#e50011}.radio3.radio-primary.radio-light input:checked+label::before{background-color:transparent}.radio3.radio-primary.radio-light input:checked+label::after{color:#4183d7}.radio3.radio-info.radio-light input:checked+label::before{background-color:transparent}.radio3.radio-info.radio-light input:checked+label::after{color:#2caef5}.radio3.radio-success.radio-light input:checked+label::before{background-color:transparent}.radio3.radio-success.radio-light input:checked+label::after{color:#36b846}.radio3.radio-warning.radio-light input:checked+label::before{background-color:transparent}.radio3.radio-warning.radio-light input:checked+label::after{color:#ff9c00}.radio3.radio-danger.radio-light input:checked+label::before{background-color:transparent}.radio3.radio-danger.radio-light input:checked+label::after{color:#e50011}\n\n/********** End Checkbox 3 **********/\n\n/********** GA EMBED **********/\n/*\nCopyright 2016 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n/**\n * Styles for gapi analytics table.\n */\n\n\n.gapi-analytics-data-chart .gapi-analytics-data-chart-styles-table-tr-odd {\n  background: hsl(30,15%,96.7%)!important;\n}\n\n.gapi-analytics-data-chart .gapi-analytics-data-chart-styles-table-tr-over {\n  background: hsl(30,15%,93.3%)!important;\n}\n\n/* Components. */\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.AccountExplorerResults {\n  padding-top:1.5em;\n}\n\n.AccountExplorerResults-title {\n  font-size: 1.4em;\n  font-weight: 300;\n  margin:0 0 2em;\n  text-align: center;\n}\n\n.AccountExplorerResults table {\n  width: 100%;\n  table-layout: fixed;\n}\n\n.AccountExplorerResults td,.AccountExplorerResults th {\n  text-align: left;\n  padding: .75em 1em;\n  vertical-align: top;\n}\n\n.AccountExplorerResults td {\n  border-top: 1px solid #e8e8e8;\n  word-break: break-word;\n}\n\n.AccountExplorerResults-id {\n  color:#777;\n  font-size: .9em;\n  margin-top: .5em;\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.FormField {\n  width: 100%;\n}\n\ninput.FormField,select.FormField,textarea.FormField {\n  background: #fff;\n  border:1px solid #d4d2d0;\n  border-radius: 4px;\n  box-sizing: border-box;\n  font: inherit;\n  font-weight: 400;\n  height: 2.42857em; /* 34px @ 14px body font */\n  line-height: 1.42857em; /* 20px @ 14px body font */\n  padding: 0.42857em; /* 6px @ 14px body font */\n  -webkit-transition:border-color .2s cubic-bezier(.4,0,.2,1);\n          transition:border-color .2s cubic-bezier(.4,0,.2,1);\n}\n\ntextarea.FormField {\n  display: block;\n  height: auto;\n  resize: vertical;\n}\n\ninput.FormField:focus,select.FormField:focus,textarea.FormField:focus {\n  border-color:#3b99fc;\n  outline: 0;\n}\n\n.FormField--invalid {\n  border-color:hsl(0,60%,50%)!important;\n}\n\n\n.AccountExplorerSearch {\n  padding: 1.5em;\n}\n\n.AccountExplorerSearch-title {\n  font-size: 1.4em;\n  font-weight: 300;\n  margin:0 0 2em;\n  text-align: center;\n}\n\ninput.AccountExplorerSearch-field {\n  display: block;\n  height: auto;\n  margin: 0 auto 3em;\n  max-width: 32em;\n  padding: .75em 1em;\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n.Site {\n  background:hsl(30,10%,95%);\n  min-height: 100%;\n  min-width:260px;\n}\n\n.Site-sidebar {\n  background:#444;\n  bottom: 0;\n  box-shadow:0 0 1.5em rgba(0, 0, 0, 0);\n  left:-260px;\n  max-width: 100%;\n  min-width:260px;\n  overflow-y: auto;\n  position: fixed;\n  top: 0;\n  -webkit-transform: translate3d(0,0,0);\n          transform: translate3d(0,0,0);\n  -webkit-transition: -webkit-transform .3s cubic-bezier(.4,0,.2,1);\n          transition: transform .3s cubic-bezier(.4,0,.2,1);\n  width:260px;\n  z-index: 1;\n}\n\n.Site.is-expanded {\n  overflow: hidden;\n}\n\n.Site.is-expanded .Site-sidebar {\n  box-shadow:0 0 1.5em rgba(0, 0, 0, 0.5);\n  -webkit-transform:translate3d(260px,0,0);\n          transform:translate3d(260px,0,0);\n}\n\n\n.Site-main {\n  /* TODO(philipwalton): fallback for non-flexbox.\n  min-height: 100%;\n  */\n}\n\n@media (min-width: 570px) {\n  .Site {\n    /* TODO(philipwalton): remove this once Query Explorer is responsive. */\n    /* min-width: 768px; */\n  }\n  .Site-sidebar {\n    left:-280px;\n    min-width:280px;\n    width:280px;\n  }\n  .Site.is-expanded .Site-sidebar {\n    -webkit-transform:translate3d(280px,0,0);\n            transform:translate3d(280px,0,0);\n  }\n}\n\n@media (min-width: 1024px) {\n  .Site {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n\n    /* TODO(philipwalton): add fallback for non-supporting browsers; */\n    /* TODO(philipwalton): Two column, equal height hack for fallback.\n    background-image: linear-gradient(\n      to right,\n      var(--bg-color-dark-faded) 0%,\n      var(--bg-color-dark-faded) var(--sidebar-width-lg));\n    background-size: var(--sidebar-width-lg) 1px;\n    background-repeat: repeat-y;\n    */\n  }\n\n  .Site-sidebar {\n    background:#444;\n    border-top: .4em solid #222;\n    box-shadow: none;\n    overflow: visible;\n    position: static;\n    -webkit-transition: none;\n            transition: none;\n    z-index: 0;\n  }\n\n  .Site.is-expanded .Site-sidebar {\n    -webkit-transform: none;\n        -ms-transform: none;\n            transform: none;\n  }\n\n  .Site-main {\n    border-top: .4em solid #f7991c;\n    box-shadow: 0 0 1em rgba(0,0,0,.3);\n    -webkit-box-flex: 1;\n    -webkit-flex: 1;\n        -ms-flex: 1;\n            flex: 1;\n    position: relative; /* To get it stacked above the sidebar */\n\n    /* TODO(philipwalton): fallback for non-flexbox\n    margin-left: var(--sidebar-width-lg);\n    */\n  }\n}\n\n/**\n * ActiveUsers Component\n */\n\n.ActiveUsers {\n  background:hsl(30,10%,95%);\n  border:1px solid #d4d2d0;\n  border-radius: 4px;\n  font-weight: 300;\n  padding:.5em 1.5em;\n  white-space: nowrap;\n}\n\n.ActiveUsers-value {\n  display: inline-block;\n  font-weight: 600;\n  margin-right: -.25em;\n}\n\n.ActiveUsers.is-increasing {\n  -webkit-animation: increase 3s;\n          animation: increase 3s;\n}\n\n.ActiveUsers.is-decreasing {\n  -webkit-animation: decrease 3s;\n          animation: decrease 3s;\n}\n\n@-webkit-keyframes increase {\n  10% {\n    background-color: hsl(120,100%,96%);\n    border-color: hsla(120, 100%, 25%, .5);\n    color: hsla(120, 100%, 25%, 1);\n  }\n}\n\n@keyframes increase {\n  10% {\n    background-color: hsl(120,100%,96%);\n    border-color: hsla(120, 100%, 25%, .5);\n    color: hsla(120, 100%, 25%, 1);\n  }\n}\n\n@-webkit-keyframes decrease {\n  10% {\n    background-color: hsl(0,100%,96%);\n    border-color: hsla(0, 100%, 50%, .5);\n    color: hsl(0,100%,50%);\n  }\n}\n\n@keyframes decrease {\n  10% {\n    background-color: hsl(0,100%,96%);\n    border-color: hsla(0, 100%, 50%, .5);\n    color: hsl(0,100%,50%);\n  }\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.Alert {\n  -webkit-box-align: start;\n  -webkit-align-items: flex-start;\n      -ms-flex-align: start;\n          align-items: flex-start;\n  background:hsl(0,60%,50%);\n  box-shadow: 0 0 10px hsla(0, 0%, 0%, 0.4);\n  color: #fff;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  padding:1.5em;\n  position: relative;\n  -webkit-transform: translate3d(0,0,0);\n          transform: translate3d(0,0,0);\n  -webkit-transition:-webkit-transform .2s cubic-bezier(.4,0,.2,1);\n          transition:transform .2s cubic-bezier(.4,0,.2,1);\n}\n\n.Alert-enter {\n  -webkit-transform: translate3d(0,-100%,0);\n          transform: translate3d(0,-100%,0);\n\n}\n\n.Alert-enter-active,.Alert-leave {\n  -webkit-transform: translate3d(0,0,0);\n          transform: translate3d(0,0,0);\n}\n\n.Alert-leave-active {\n  -webkit-transform: translate3d(0,-100%,0);\n          transform: translate3d(0,-100%,0);\n}\n\n\n.Alert-icon {\n  font-size: 3em;\n}\n\n.Alert-close {\n  background: none;\n  border: 0;\n  font-size: 1.5em;\n  opacity: .4;\n  padding: .5em;\n}\n.Alert-close:active,.Alert-close:focus,.Alert-close:hover {\n  opacity: 1;\n  outline: 0;\n}\n\n.Alert-body {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 0%;\n      -ms-flex: 1 0 0%;\n          flex: 1 0 0%;\n  margin:0 1.5em;\n}\n\n.Alert-title {\n  color: inherit;\n  font-size: 1.5em;\n  font-weight: 400;\n  line-height: 1.1;\n  margin: 0;\n}\n\n.Alert-message {\n  font-weight: 300;\n  margin-top: .4em;\n  opacity: .7;\n}\n\n@media (min-width: 1024px) {\n  .Alert {\n    padding:2em;\n  }\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.AlertDispatcher {\n  left: 0;\n  position: fixed;\n  right: 0;\n  top: 0;\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.Box {\n  background: #fff;\n  border:1px solid #d4d2d0;\n  border-radius: 4px;\n  margin-bottom:1.5em;\n  padding:1.5em;\n}\n\n\n.Box-header {\n  border-bottom:1px solid #d4d2d0;\n  margin:-1.5em -1.5em 1.5em;\n  padding:1.5em;\n}\n\n.Box-footer {\n  border-top:1px solid #d4d2d0;\n  margin:1.5em -1.5em -1.5em;\n  padding:1.5em;\n}\n\n@media (min-width: 1024px) {\n  .Box {\n    margin-bottom:2em;\n    padding:2em;\n  }\n  .Box-header {\n    margin:-2em -2em 2em;\n    padding:2em;\n  }\n  .Box-footer {\n    margin:2em -2em -2em;\n    padding:2em;\n  }\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n.Button {\n  background: hsla(0,0%,0%, .075);\n  border: 1px solid transparent;\n  border-radius: 4px;\n  box-sizing: border-box;\n  color: inherit;\n  cursor: pointer;\n  display: inline-block;\n  font: inherit;\n  font-weight: 400;\n  line-height: 1.42857em; /* 20px @ 14px body font */\n  padding: 0.42857em 1em; /* 6px @ 14px body font */\n  -webkit-transition:background-color .2s cubic-bezier(.4,0,.2,1),\n              border-color .2s cubic-bezier(.4,0,.2,1);\n          transition:background-color .2s cubic-bezier(.4,0,.2,1),\n              border-color .2s cubic-bezier(.4,0,.2,1);\n}\n\n.Button:disabled {\n  opacity: .4;\n}\n\n.Button:active:enabled,.Button:focus:enabled,.Button:hover:enabled {\n  background: hsla(0,0%,0%, .15);\n  outline: none;\n  text-decoration: none;\n}\n\n\n.Button-iconWrapper {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n\n.Button-icon {\n  margin-right: .6em;\n}\n\n.Button--action {\n  color: #fff;\n  background:hsl(217,91%,63%);\n  border-color: transparent;\n}\n.Button--action:active:enabled,.Button--action:focus:enabled,.Button--action:hover:enabled {\n  background:hsl(217,91%,53%);\n}\n\n.Button--success {\n  color: #fff;\n  background:hsl(135,60%,40%);\n  border-color: transparent;\n}\n.Button--success:active:enabled,.Button--success:focus:enabled,.Button--success:hover:enabled {\n  background:hsl(135,60%,33%);\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.ButtonSet {\n  margin: 0 -1em -1em;\n}\n\n.ButtonSet .Button {\n  margin: 0 0 1em 1em;\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.Chartjs {\n  font-size: .85em;\n}\n\n.Chartjs-figure {\n  height: 250px;\n}\n\n.Chartjs-legend {\n  list-style: none;\n  margin: 0;\n  padding: 1em 0 0;\n  text-align: center;\n}\n\n.Chartjs-legend > li {\n  display: inline-block;\n  padding: .25em .5em\n}\n\n.Chartjs-legend > li > i {\n  display: inline-block;\n  height: 1em;\n  margin-right: .5em;\n  vertical-align: -.1em;\n  width: 1em;\n}\n\n@media (min-width: 570px) {\n  .Chartjs-figure {\n    /* Add some breathing room. */\n    margin-right:1.5em;\n  }\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.Checkbox {\n  display: inline-block;\n  margin-right: .5em;\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.Content {\n  margin:1.5em;\n  max-width: 1060px;\n  -webkit-transition:opacity .5s cubic-bezier(.4,0,.2,1);\n          transition:opacity .5s cubic-bezier(.4,0,.2,1);\n}\n\n.Site.is-loading .Content,.Site.is-needingAuthorization .Content {\n  pointer-events: none;\n  opacity: .333;\n}\n\n@media (min-width: 1024px) {\n  .Content {\n    margin:3em;\n  }\n}\n/*\nCopyright 2016 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n.Dashboard {\n  border:0px solid #d4d2d0;\n  background: #fff;\n  border-radius: 3px;\n  -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.05);\n  box-shadow: 0 1px 1px rgba(0,0,0,.05);\n}\n\n.analytics-container{\n  padding: 25px;\n  padding-top: 15px;\n}\n\n#analytics-dashboard{\n  display:none;\n}\n\n.Dashboard-header {\n  border-bottom:0px solid #d4d2d0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n\n.Dashboard-footer,.Dashboard-header{margin:-1.5em -1.5em 1.5em;padding:1.5em;}\n\n.Dashboard-footer {\n  border-top:1px solid #d4d2d0;\n}\n\n.Dashboard--full {\n  max-width: 100%;\n}\n\n.Dashboard--collapseBottom {\n  padding-bottom: 0;\n}\n\n@media (min-width: 1024px) {.Dashboard,.Dashboard-header{padding:2em;}.Dashboard-footer,.Dashboard-header{margin:-2em -2em 2em;}\n  .Dashboard-footer {\n    padding:1.5em;\n  }\n\n  .Dashboard--collapseBottom {\n    padding-bottom:0.5em;\n  }\n}\n/*\nCopyright 2016 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.DataTable .gapi-analytics-data-chart {\n  overflow-x: auto;\n}\n\n.DataTable .gapi-analytics-data-chart .gapi-analytics-data-chart-styles-table-tr-head {\n  background: hsl(30,10%,96.7%);\n}\n\n.DataTable .gapi-analytics-data-chart .gapi-analytics-data-chart-styles-table-th {\n  border-bottom: 1px solid #ddd;\n  border-top: 1px solid #ddd;\n  white-space: nowrap;\n}\n\n.DataTable .gapi-analytics-data-chart .gapi-analytics-data-chart-styles-table-th:first-child {\n  border-left: 1px solid #ddd;\n}\n\n.DataTable .gapi-analytics-data-chart .gapi-analytics-data-chart-styles-table-th:last-child {\n  border-right: 1px solid #ddd;\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * DateRangeSelector Component\n */\n\n.DateRangeSelector {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-flex-wrap: wrap;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n  margin: 0 0 -1em -1em;\n}\n\n.DateRangeSelector-item {\n  margin: 0 0 1em 1em;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 -webkit-calc(100% - 1em);\n      -ms-flex: 1 0 calc(100% - 1em);\n          flex: 1 0 calc(100% - 1em);\n}\n\n.DateRangeSelector-item > label {\n  font-weight: 700;\n  margin: 0 .25em .25em 0;\n  display: block;\n}\n\n.DateRangeSelector-item > input {\n  width: 100%;\n}\n\n@media (min-width: 570px) {\n  .DateRangeSelector-item {\n    -webkit-flex-basis: auto;\n        -ms-flex-preferred-size: auto;\n            flex-basis: auto;\n    min-width:150px;\n  }\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.Error {\n  background: hsl(0,100%,98%);\n  border: 1px solid hsla(0, 70%, 55%, .5);\n  border-radius: 4px;\n  color: hsla(0, 0%, 0%, 0.5);\n  margin: 2em 0px;\n  padding: 1em 1.5em;\n}\n\n.Error-title {\n  color: hsl(0,70%,55%);\n  display: inline-block;\n  font-size: 1.1em;\n  line-height: 1.5;\n  margin: 0 .5em 0 0;\n}\n\n.Error-message {\n  display: inline-block;\n  margin: 0;\n}\n/*\nCopyright 2016 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n.FlexGrid {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-flex-wrap: wrap;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n  list-style: none;\n  margin:0 0 -1.5em -1.5em;\n  padding: 0;\n}\n\n.FlexGrid-item {\n  -webkit-box-flex:1;\n  -webkit-flex:1 0 -webkit-calc(100% - 1.5em);\n      -ms-flex:1 0 calc(100% - 1.5em);\n          flex:1 0 calc(100% - 1.5em);\n  margin:0 0 1.5em 1.5em;\n}\n\n.FlexGrid-item--fixed {\n  /* An `auto` flex-basis will use the size of the contents. */\n  -webkit-box-flex: 0!important;\n  -webkit-flex: 0 0 auto!important;\n      -ms-flex: 0 0 auto!important;\n          flex: 0 0 auto!important;\n}\n\n\n/**\n * --halves modifier.\n * Ensures that an item never takes up more than half of the width, i.e.\n * no more that two items will ever be in a row.\n */\n.FlexGrid--halves .FlexGrid-item {\n  -webkit-flex-basis: 34%;\n      -ms-flex-preferred-size: 34%;\n          flex-basis: 34%;\n}\n\n\n@media (min-width: 570px) {\n  .FlexGrid-item {\n    -webkit-flex-basis:200px;\n        -ms-flex-preferred-size:200px;\n            flex-basis:200px;\n  }\n}\n\n@media (min-width: 1024px) {\n  .FlexGrid {\n    margin:0 0 -2em -2em;\n  }\n  .FlexGrid-item {\n    margin:0 0 2em 2em;\n  }\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n\n.FlexLine {\n  /* display: flex; */\n\n  /*\n   * TODO(philipwalton): replace the below with the above once this FF bug is\n   * fixed: https://bugzilla.mozilla.org/show_bug.cgi?id=1146442\n   */\n   display: -webkit-inline-box;\n   display: -webkit-inline-flex;\n   display: -ms-inline-flexbox;\n   display: inline-flex;\n   width: 100%;\n}\n\n.FlexLine > [data-flex] {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 0%;\n      -ms-flex: 1 0 0%;\n          flex: 1 0 0%;\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.FormControl {\n  display: block;\n  margin:0 0 1.25em;\n  max-width: 40em;\n}\n@media (min-width: 1024px) {\n  .FormControl--inline {\n    -webkit-box-align: baseline;\n    -webkit-align-items: baseline;\n        -ms-flex-align: baseline;\n            align-items: baseline;\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n  }\n}\n\n.FormControl--full {\n  max-width: initial;\n}\n\n.FormControl-label {\n  display: block;\n  font-weight: 600;\n  margin: 0 0 .25em;\n}\n.FormControl--required .FormControl-label:after,.FormControl--required .FormControl-label:before {\n  color: hsl(0,70%,55%);\n  display: inline-block;\n  font-weight: 600;\n}\n.FormControl--required .FormControl-label:after {\n  content: '*';\n  margin-left: .5em;\n}\n@media (min-width: 1024px) {\n\n  /*\n   * 1. Use with instead of flex-basis to workaround Flexbug 8\n   *    https://github.com/philipwalton/flexbugs\n   */\n  .FormControl--inline .FormControl-label {\n    -webkit-box-flex: 0;\n    -webkit-flex: 0 0 auto;\n        -ms-flex: 0 0 auto;\n            flex: 0 0 auto; /* 1 */\n    padding-right:1.25em;\n    text-align: right;\n    width:11em; /* 1 */\n  }\n  .FormControl--required .FormControl-label:after {\n    content: none;\n  }\n  .FormControl--required .FormControl-label:before {\n    content: '*';\n    margin-right: .5em;\n  }\n}\n\n.FormControl-body {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 0%;\n      -ms-flex: 1 0 0%;\n          flex: 1 0 0%;\n}\n\n.FormControl-info {\n  color:#777;\n  display: block;\n  font-size: .85em;\n  line-height: 1.2;\n  margin-top: .5em;\n}\n\n.FormControl-helpIcon {\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n  color:#aaa;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n  font-size: 1.15em;\n  padding: 0 .5em;\n}\n.FormControl-helpIcon:active,.FormControl-helpIcon:focus,.FormControl-helpIcon:hover {\n  color: inherit;\n  outline: 0;\n}\n\n.FormControl--action {\n  margin:0 0 1.5em;\n}\n\n@media (min-width: 1024px) {\n  .FormControl--action {\n    margin:0 0 2em;\n  }\n  .FormControl--action .FormControl-body {\n    margin-left:11em;\n  }\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.FormFieldAddOn {\n  /* display: flex; */\n\n  /*\n   * TODO(philipwalton): replace the below with the above once this FF bug is\n   * fixed: https://bugzilla.mozilla.org/show_bug.cgi?id=1146442\n   */\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  width: 100%;\n}\n\n/* @extends .FormField */\n.FormFieldAddOn-field {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 0%;\n      -ms-flex: 1 0 0%;\n          flex: 1 0 0%;\n}\n\n.FormFieldAddOn-item {\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n  background: transparent;\n  border:1px solid #d4d2d0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  font: inherit;\n  font-weight: normal;\n  padding: 0 0.6em;\n}\n.FormFieldAddOn-item:focus {\n  outline: 0;\n}\n\n.FormFieldAddOn-field:first-child,.FormFieldAddOn-item:first-child {\n  border-radius: 4px 0 0 4px;\n}\n.FormFieldAddOn-field:last-child,.FormFieldAddOn-item:last-child {\n  border-radius: 0 4px 4px 0;\n}\n\n.FormFieldAddOn-item:first-child {\n  border-right: 0;\n}\n.FormFieldAddOn-item:last-child {\n  border-left: 0;\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.ProgressBar {\n  background:hsl(215,100%,90%);\n  overflow: hidden;\n  position: relative;\n}\n\n.ProgressBar:after,.ProgressBar:before {\n  background:-webkit-linear-gradient(left, hsl(215, 100%, 90%), hsl(215, 100%, 60%) 10%, hsl(215, 100%, 60%));\n  background:linear-gradient(to right, hsl(215, 100%, 90%),\n                                        hsl(215, 100%, 60%) 10%,\n                                        hsl(215, 100%, 60%));\n  content: '';\n  height: 100%;\n  position: absolute;\n  -webkit-transform: translateX(-100%);\n      -ms-transform: translateX(-100%);\n          transform: translateX(-100%);\n  width:60%;\n}\n\n.ProgressBar:before {\n  -webkit-animation:ProgressBar-leader\n             2s\n             ease-in-out\n             infinite;\n          animation:ProgressBar-leader\n             2s\n             ease-in-out\n             infinite;\n\n}\n\n.ProgressBar:after {\n  -webkit-animation:ProgressBar-follower\n             2s\n             ease-in-out\n             1s\n             infinite;\n          animation:ProgressBar-follower\n             2s\n             ease-in-out\n             1s\n             infinite;\n}\n\n\n@-webkit-keyframes ProgressBar-leader {\n  0% {\n    -webkit-transform: translateX(-100%);\n            transform: translateX(-100%);\n  }\n  100% {\n    -webkit-transform:translateX(250%);\n            transform:translateX(250%);\n  }\n}\n\n\n@keyframes ProgressBar-leader {\n  0% {\n    -webkit-transform: translateX(-100%);\n            transform: translateX(-100%);\n  }\n  100% {\n    -webkit-transform:translateX(250%);\n            transform:translateX(250%);\n  }\n}\n\n@-webkit-keyframes ProgressBar-follower {\n  0% {\n    -webkit-transform: translateX(-100%);\n            transform: translateX(-100%);\n  }\n  60%,100% {\n    -webkit-transform:translateX(250%);\n            transform:translateX(250%);;\n  }\n}\n\n@keyframes ProgressBar-follower {\n  0% {\n    -webkit-transform: translateX(-100%);\n            transform: translateX(-100%);\n  }\n  60%,100% {\n    -webkit-transform:translateX(250%);\n            transform:translateX(250%);;\n  }\n}\n\n.Header,.Header-block{position:relative;}\n\n.Header-block {\n  background:#333;\n  box-shadow: 0 0 .5em rgba(0,0,0,.1);\n  padding:1em 1.5em;\n}\n\n.Header-menu {\n  cursor: pointer;\n  position: absolute;\n  top: 50%;\n  -webkit-transform: translateY(-50%);\n      -ms-transform: translateY(-50%);\n          transform: translateY(-50%);\n}\n\n.Header-menu,.Header-menuIcon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}\n\n.Header-menuIcon {\n  border-radius: .333em;\n  color: #bbb;\n  font-size: 1.3125em;\n  margin: -.333em -.5em;\n  padding: .333em .5em;\n}\n\n.Header-menuIcon:hover {\n  background:#000000;\n  background:rgba(0,0,0,.3);\n  color: #fff;\n}\n\n.Header-user {\n  display: none;\n}\n\n.Header-auth {\n  text-align: center;\n}\n\n\n.Header-auth .gapi-analytics-auth-styles-signinbutton {\n  background:hsl(34,93%,54%);\n  border-radius: 0;\n  display: block;\n  padding:1em 1.5em;\n  -webkit-transition:background-color .2s cubic-bezier(.4,0,.2,1);\n          transition:background-color .2s cubic-bezier(.4,0,.2,1);\n  width: auto;\n  cursor:pointer;\n}\n\n.Header-auth .gapi-analytics-auth-styles-signinbutton:hover {\n  background:hsl(16,87%,54%);\n  cursor: pointer;\n}\n\n.Header-auth .gapi-analytics-auth-styles-signinbutton-buttonText,.Header-auth .gapi-analytics-auth-styles-signinbutton-image {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.Header-auth .gapi-analytics-auth-styles-signinbutton-image {\n  background: url('/public/images/ga-mark-white.svg') no-repeat 0 50%;\n  background-size: 1.5em;\n  border: 0;\n  height: 1.5em;\n  padding-left: 2.5em;\n  width: auto;\n}\n\n.Header-auth .gapi-analytics-auth-styles-signinbutton-image:after {\n  content: 'Click here to authorize\\00a0\\00a0â†’';\n}\n\n.Header-auth .gapi-analytics-auth-styles-signinbutton-buttonText,.Header-signOut {\n  display: none;\n}\n\n.Header-progressIndicator {\n  bottom: -3px;\n  height: 3px;\n  left: 0;\n  position: absolute;\n  right: 0;\n  -webkit-transform: scaleY(0);\n      -ms-transform: scaleY(0);\n          transform: scaleY(0);\n  -webkit-transform-origin: 0 0;\n      -ms-transform-origin: 0 0;\n          transform-origin: 0 0;\n  -webkit-transition:all .5s cubic-bezier(.4,0,.2,1);\n          transition:all .5s cubic-bezier(.4,0,.2,1);\n  visibility: hidden;\n}\n\n.Site.is-loading .Header-progressIndicator {\n  -webkit-animation:Header-showProgressIndicator .5s cubic-bezier(.4,0,.2,1);\n          animation:Header-showProgressIndicator .5s cubic-bezier(.4,0,.2,1);\n  -webkit-transform: scaleY(1);\n      -ms-transform: scaleY(1);\n          transform: scaleY(1);\n  visibility: visible;\n}\n\n.Site.is-needingAuthorization .Header-progressIndicator {\n  visibility: hidden;\n  -webkit-transform: scaleY(0);\n      -ms-transform: scaleY(0);\n          transform: scaleY(0);\n  -webkit-transition: none;\n          transition: none;\n}\n\n@keyframes Header-showProgressIndicator {\n  0% {\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n}\n\n\n/* The user is signed in\n   ========================================================================== */\n\n.Site.is-authorized .Header-user {\n  cursor: pointer;\n  position: absolute;\n  right:1.5em;\n  top: 50%;\n  -webkit-transform: translateY(-50%);\n      -ms-transform: translateY(-50%);\n          transform: translateY(-50%);\n}\n\n.Site.is-authorized .Header-user,.Site.is-authorized .Header-userIcon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}\n\n.Site.is-authorized .Header-userIcon {\n  border-radius: .333em;\n  color:#bbb;\n  font-size: 1.3125em;\n  margin: -.333em -.5em;\n  padding: .333em .5em;\n}\n\n.Site.is-authorized .Header-userIcon:hover {\n  background:#000000;\n  background:rgba(0,0,0,.3);\n  color: #fff;\n}\n\n.Site.is-authorized .Header-auth {\n  display: none;\n}\n\n/* The user has opened the header drawer (showing the user info).\n   ========================================================================== */\n\n.Header.is-open .Header-auth {\n  background: #fff;\n  box-shadow:0 0 .5em rgba(0,0,0,.1);\n  color:#777;\n  display: block;\n  padding:1em 1.5em;\n  text-align: center;\n}\n\n.Header.is-open .Header-embedApi,.Header.is-open .Header-signOut {\n  display: inline-block;\n  padding: 0 .5em;\n}\n\n.Header.is-open .Header-userIcon {\n  background:#000000;\n  background:rgba(0,0,0,.3);\n  color: #fff;\n}\n\n.Header.is-open .Header-user:before {\n  border-color: transparent transparent currentColor;\n  border-width: 0 .333em .333em;\n}\n\n@media (min-width: 1024px) {\n\n  .Header-block {\n    background: #fff;\n    padding:2em 3em 3em;\n  }\n\n  .Header-menu {\n    display: none;\n  }\n\n  .Site.is-authorized .Header-user {\n    right:2em;\n    top:2em;\n    -webkit-transform: none;\n        -ms-transform: none;\n            transform: none;\n  }\n\n  .Site.is-authorized .Header-userIcon {\n    color:#999;\n    margin: 0;\n  }\n\n  .Header.is-open .Header-userIcon,.Site.is-authorized .Header-userIcon:hover {\n    background:#000000;\n    background:rgba(0,0,0,.1);\n    color:#333;\n  }\n\n  .Header.is-open .Header-auth {\n    background: #fff;\n    border-radius: .5em;\n    box-shadow:0 0 0 1px rgba(0,0,0,.1);\n    padding: 0 .5em;\n    position: absolute;\n    line-height: 2.4em;\n    right: 6em; /* covers the width of the user icon + spacing */\n    text-align: right;\n    top: 2em;\n  }\n\n  .Header.is-open .Header-auth * {\n    vertical-align: baseline;\n  }\n\n  .Header-auth .gapi-analytics-auth-styles-signinbutton {\n    font-size: 1em;\n    padding:1.5em 3em;\n    text-align: left;\n  }\n\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.HitBuilderParam {\n  -webkit-box-align: baseline;\n  -webkit-align-items: baseline;\n      -ms-flex-align: baseline;\n          align-items: baseline;\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin:0 0 1.25em;\n  max-width: 36em;\n  width: 100%;\n}\n\n.HitBuilderParam-label {\n  -webkit-box-flex:0;\n  -webkit-flex:0 0 7em;\n      -ms-flex:0 0 7em;\n          flex:0 0 7em;\n  font-weight: 600;\n  margin-right:1.25em;\n  position: relative;\n  text-align: right;\n}\n\n.HitBuilderParam--required .HitBuilderParam-label:before {\n  color: hsl(0,70%,55%);\n  content: '*';\n  display: inline-block;\n  font-weight: 600;\n  margin-right: .5em;\n}\n\n.HitBuilderParam-inputLabel {\n  text-align: right;\n  width:4em;\n}\n\n\n.HitBuilderParam-removeIcon {\n  color:hsl(0,60%,50%);\n  cursor: pointer;\n  right:4em;\n  padding: .667em;\n  position: absolute;\n  top: 0;\n}\n\n\n.HitBuilderParam-body {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 0%;\n      -ms-flex: 1 0 0%;\n          flex: 1 0 0%;\n  padding-right: 2.5em;\n  position: relative;\n}\n\n.HitBuilderParam-info {\n  color:hsl(0,60%,50%);\n  display: block;\n  font-size: .85em;\n  line-height: 1.2;\n  margin-top: .5em;\n}\n\n.HitBuilderParam-helpIcon {\n  color: #ccc;\n  cursor: pointer;\n  right: 0;\n  padding: .667em;\n  position: absolute;\n  top: 0;\n}\n.HitBuilderParam-helpIcon:active,.HitBuilderParam-helpIcon:focus,.HitBuilderParam-helpIcon:hover {\n  color: inherit;\n  outline: 0;\n}\n\n\n.HitBuilderParam--action {\n  margin-left:8.25em;\n}\n.HitBuilderParams {\n  -webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1);\n          transition:opacity .2s cubic-bezier(.4,0,.2,1);\n}\n\n.is-editing .HitBuilderParams {\n  opacity: .4;\n  pointer-events: none;\n}\n.HitElement {\n  background: #FFF;\n  border-radius: 4px;\n  margin-bottom:1.5em;\n}\n\n.HitElement-status {\n  background-color: hsl(0,0%,98%);\n  border:1px solid #d4d2d0;\n  border-radius: 4px 4px 0 0;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  padding:2em;\n\n  /* Force hardware acceleration for better transition performance. */\n  -webkit-transform: translate3d(0,0,0);\n          transform: translate3d(0,0,0);\n}\n\n.HitElement-body {\n  background-color: #fff;\n  border:solid #d4d2d0;\n  border-radius: 0 0 4px 4px;\n  border-width: 0 1px 1px;\n  padding:2em;\n  -webkit-transition:border-color .3s cubic-bezier(.4,0,.2,1);\n          transition:border-color .3s cubic-bezier(.4,0,.2,1);\n}\n\n.HitElement-statusIcon {\n  color:#777;\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  font-size: 2.5em;\n  margin-right: .5em;\n}\n\n.HitElement-statusHeading {\n  color: #000;\n  font-size: 1.6em;\n  font-weight: 300;\n  margin: .25em 0;\n}\n\n.HitElement-statusMessage {\n  color:#777;\n  font-size: .9em;\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n.HitElement-requestBody,.HitElement-requestInfo {\n  font-family: Menlo, monospace;\n  font-size: .9em;\n}\n\n.HitElement-action,.HitElement-requestBody {\n  margin-top:2em;\n}\n\n.HitElement-action,.HitElement-body,.HitElement-requestInfo,.HitElement-status {\n  opacity: 1;\n  -webkit-transition:border-color .3s cubic-bezier(.4,0,.2,1),\n              opacity .3s cubic-bezier(.4,0,.2,1);\n          transition:border-color .3s cubic-bezier(.4,0,.2,1),\n              opacity .3s cubic-bezier(.4,0,.2,1);\n}\n\n\n/**\n * Valid Hits\n */\n\n.HitElement--valid .HitElement-statusHeading,.HitElement--valid .HitElement-statusIcon {\n  color:hsl(135,60%,40%);\n}\n.HitElement--valid .HitElement-status {\n  border-color:hsl(135,60%,40%);\n  background-color:hsl(135,60%,97%);\n}\n\n\n/**\n * Invalid Hits\n */\n\n.HitElement--invalid .HitElement-statusHeading,.HitElement--invalid .HitElement-statusIcon {\n  color:hsl(0,60%,50%);\n}\n.HitElement--invalid .HitElement-status {\n  border-color:hsl(0,60%,50%);\n  background-color:hsl(0,60%,97%);\n}\n\n\n/**\n * State: is-editing\n */\n\n.is-editing .HitElement-action,.is-editing .HitElement-requestInfo,.is-editing .HitElement-status {\n  opacity: .1;\n  pointer-events: none;\n}\n\n.is-editing .HitElement-body,.is-editing .HitElement-status {\n  border-color: transparent;\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.Icon {\n  display: inherit;\n  fill: currentColor;\n  height: 1.14286em;\n  width: 1.14286em;\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.InlineDefinitionList {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-flex-wrap: wrap;\n      -ms-flex-wrap: wrap;\n          flex-wrap: wrap;\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n.InlineDefinitionList-item {\n  font-weight: 300;\n  line-height: 1.667;\n  margin-right: 1.5em;\n  white-space: nowrap;\n}\n.InlineDefinitionList-item:last-child {\n  margin-right: 0;\n}\n\n\n.InlineDefinitionList-itemName {\n  display: inline-block;\n  margin-right: .5em;\n}\n\n.InlineDefinitionList-itemValue {\n  font-weight: 700;\n}\n\n@media (min-width: 1024px) {\n  .InlineDefinitionList-item {\n    border-right: 1px solid hsl(30,10%,85%);\n    margin-right: 1em;\n    padding-right: 1em;\n  }\n  .InlineDefinitionList-item:last-child {\n    border: 0;\n    margin-right: 0;\n    padding-right: 0;\n  }\n}\n.LinkButton {\n  background: transparent;\n  border: 0;\n  color:hsl(16,87%,54%);\n  font: inherit;\n  padding: 0;\n  text-decoration: none;\n}\n\n.LinkButton:hover {\n  text-decoration: underline;\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.Logo {\n  margin: 0 3em;\n}\n\n.Logo-full {\n  display: none;\n}\n\n.Logo-partial {\n  text-align: center;\n}\n\n.Logo-partial > svg {\n  fill: #aaa;\n  height: 16px;\n}\n\n.Logo-partial:after {\n  content: 'Demos & Tools';\n  color: #ddd;\n  display: block;\n  font-size: 1.4em;\n  font-weight: 300;\n  letter-spacing: -.03em;\n  line-height: 1;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  word-spacing: .2em;\n}\n\n@media (min-width: 420px) {\n  .Logo-partial > svg {\n    display: none;\n  }\n  .Logo-partial:after {\n    content: 'Google Analytics Demos & Tools';\n    line-height: normal;\n  }\n}\n\n@media (min-width: 1024px) {\n  .Logo {\n    margin: 0;\n  }\n  .Logo-full {\n    display: block;\n  }\n  .Logo-full > svg {\n    display: inherit;\n    fill:#75787d;\n    height:26px;\n    width:303px;\n  }\n  .Logo-partial {\n    display: none;\n  }\n}\n.Message {\n  background-color: hsl(50,96%,94%);\n  border-left: 5px solid hsl(50,96%,50%);\n  padding: 1.5em;\n}\n/*\nCopyright 2016 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n.Nav ol {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n.Nav-section {\n  border-top: 1px solid #555;\n  padding:1.5em 0;\n}\n\n.Nav-category {\n  color:#ddd;\n  font-size: 1.3em;\n  font-weight: 400;\n  letter-spacing: .05em;\n  margin-bottom: .5em;\n  padding:0 1.15385em; /* Account for font-size. */\n}\n\n.Nav-link {\n  color:#aaa;;\n  display: block;\n  padding:.5em 1.5em;\n}\n.Nav-link:hover {\n  background-color: hsla(0,0%,0%,.15);\n  text-decoration: none;\n}\n.Nav-link--selected,.Nav-link--selected:hover {\n  background-color: hsla(0,0%,100%,.075);\n  color: #fff;\n  cursor: default;\n  pointer-events: none;\n}\n\n.Nav-link--nested {\n  font-size: 0.85em;\n  padding-bottom:0.58824em;\n  padding-left:3.85294em;\n  padding-top:0.58824em;\n}\n\n.Nav-status {\n  color:hsl(16,87%,54%);\n  font-size: .8em;\n  font-weight: 700;\n  line-height: 0;\n  margin-left: .25em;\n  position: relative;\n  text-transform: capitalize;\n  top: -0.5em;\n  vertical-align: baseline;\n}\n.Nav-status:after {\n  content: '!';\n}\n\n@media (min-width: 1024px) {\n  .Nav-category {\n    padding:0 1.53846em; /* Account for font-size. */\n  }\n\n  .Nav-link {\n    padding-left:2em;\n    padding-right:2em;\n  }\n  .Nav-link--nested {\n    padding-left:4em;\n  }\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.NavHeader {\n  padding:1em 1.5em;\n  position: relative;\n}\n\n.NavHeader-homeLink {\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n  color:#777;\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  height:26px;\n}\n.NavHeader-homeLink:hover {\n  text-decoration: none;\n  color:#ddd;\n}\n\n.NavHeader-homeIcon {\n  font-size: 1.3125em;\n}\n\n.NavHeader-title {\n  color: inherit;\n  display: inline-block;\n  font-size: 1.1em;\n  font-weight: 300;\n  letter-spacing: .3em;\n  margin: 0 1em 0;\n  text-transform: uppercase;\n}\n\n.NavHeader-controls {\n  cursor: pointer;\n  position: absolute;\n  right:1.5em;\n  top: 50%;\n  -webkit-transform: translateY(-50%);\n      -ms-transform: translateY(-50%);\n          transform: translateY(-50%);\n}\n\n.NavHeader-controls,.NavHeader-controlsIcon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}\n\n.NavHeader-controlsIcon {\n  border-radius: .333em;\n  color: #eee;\n  font-size: 1.3125em;\n  margin:-8px;\n  margin: -.5rem;\n  padding:8px;\n  padding: .5rem;\n}\n\n.NavHeader-controlsIcon:hover {\n  background:#000000;\n  background: rgba(0,0,0,.2);\n}\n\n@media (min-width: 1024px) {\n  .NavHeader {\n    padding:2em;\n  }\n\n  .NavHeader-controls {\n    display: none;\n  }\n}\n/*\nCopyright 2016 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.QueryReport {\n  background: #fff;\n  border:1px solid #d4d2d0;\n  border-radius: 4px;\n  margin-bottom:1.5em;\n  padding:1.5em 1.5em 0;\n}\n\n.QueryReport-title {\n  color: inherit;\n  font-size: 1.5em;\n  font-weight: 300;\n  line-height: 1;\n  margin: 0 0 .667em;\n}\n\n.QueryReport-meta {\n  font-weight: 300;\n  margin:0 0 1.5em;\n}\n\n.QueryReport-item {\n  margin:0 0 1.5em;\n}\n\n@media (min-width: 1024px) {\n  .QueryReport {\n    margin-bottom:2em;\n    padding:2em 2em 0;\n  }\n\n  .QueryReport-item,.QueryReport-meta {\n    margin:0 0 2em;\n  }\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.Screenshot {\n  margin-bottom:1.5em;\n}\n\n.Screenshot img {\n  border:1px solid #d4d2d0;\n  border-radius: 4px;\n  height: auto;\n  max-width: 100%;\n}\n\n.Screenshot figcaption {\n  color:#aaa;\n  font-size: .85em;\n  font-style: italic;\n  padding: .5em 4px 0;\n  text-align: right;\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.SearchSuggest {\n  display: block;\n  width: 100%;\n}\n\n.SearchSuggest-matches {\n  background: #fff;\n  border: 1px solid;\n  border-color:#eee #3b99fc #3b99fc;\n  border-radius: 0 0 4px 4px;\n  display: none;\n  list-style: none;\n  margin: -1px 0 0;\n  max-height: 300px;\n  overflow-x: hidden;\n  overflow-y: auto;\n  padding: 0;\n  position: absolute;\n  top: 100%;\n  -webkit-tap-highlight-color: transparent;\n  width: 100%;\n  z-index: 1;\n}\n\n.SearchSuggest--open {\n  position: relative;\n}\n\n.SearchSuggest--open .SearchSuggest-field {\n  border-color:#3b99fc;\n  border-radius: 4px 4px 0 0;\n}\n\n.SearchSuggest--open .SearchSuggest-matches {\n  display: block;\n}\n\n.SearchSuggest--above.SearchSuggest--open .SearchSuggest-matches {\n  bottom: 100%;\n  border-color:#3b99fc #3b99fc #eee;\n  border-radius: 4px 4px 0 0;\n  margin: 0 0 -1px;\n  top: auto;\n}\n\n.SearchSuggest--above.SearchSuggest--open .SearchSuggest-field {\n  border-radius: 0 0 4px 4px;\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.SearchSuggestMatch {\n  border: solid #eee;\n  border-width: 1px 0 0;\n  line-height: 1.2;\n  list-style: none;\n  overflow: hidden;\n  padding: .5em;\n  word-wrap: break-word;\n}\n.SearchSuggestMatch:first-child {\n  border: 0;\n}\n\n.SearchSuggestMatch-category {\n  color: #bbb;\n  float: right;\n  font-size: .6em;\n  font-weight: 700;\n  letter-spacing: .1em;\n  margin: .1em 0 1em .5em;\n  text-transform: uppercase;\n  text-align: right;\n  max-width: 12em;\n}\n\n.SearchSuggestMatch-content {\n  font-weight: 600;\n}\n\n.SearchSuggestMatch-extra {\n  color: #777;\n  font-size: .8em;\n  font-weight: 300;\n  margin-top: .15em;\n  word-wrap: break-word;\n}\n\n\n.SearchSuggestMatch--selected {\n  border-color: transparent;\n  background:#3b99fc;\n}\n.SearchSuggestMatch--selected .SearchSuggestMatch-category,.SearchSuggestMatch--selected .SearchSuggestMatch-content,.SearchSuggestMatch--selected .SearchSuggestMatch-extra {\n  color: #fff;\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.TechInfo {\n  background: #fff;\n  border:1px solid hsl(200,75%,55%);\n  border-radius: 4px;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  margin:1.5em 0;\n  max-width: 52em;\n  padding: 1.25em;\n}\n\n.TechInfo-icon {\n  fill:hsl(200,75%,55%);\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 auto;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  margin-right: 1em;\n  height: 1.5em;\n  overflow: visible;\n  width: 1.5em;\n}\n\n.TechInfo-content {\n  color:#777;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1;\n      -ms-flex: 1;\n          flex: 1;\n  font-size: .9em;\n  margin: 0;\n}\n\n.TechInfo-title {\n  color:hsl(200,75%,55%);\n  font-size: 1.2em;\n  font-weight: 600;\n  margin: 0 0 .5em;\n}\n\n.TechInfo a {\n  color:hsl(200,75%,55%);\n  text-decoration: underline;\n}\n\n@media (min-width: 1024px) {\n  .TechInfo {\n    margin:2em 0;\n  }\n}\n/*\nCopyright 2016 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.Table {\n  background: #fff;\n  margin:0 0 1.5em;\n}\n\n.Table td,.Table th {\n  border:1px solid #d4d2d0;\n  padding: .5em 1em;\n  text-align: left;\n}\n\n.Table th > h4 {\n  margin: 0;\n  font-size: 1.1em;\n  font-weight: 400;\n}\n\n.Table tbody tr:nth-child(2n-1) {\n  background-color: hsla(0, 0%, 0%, .02);\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.Titles {\n  font-weight: 300;\n  line-height: 1.2;\n  margin:0 0 1.5em;\n}\n.Titles-main,.Titles-sub {\n  color: inherit;\n  font: inherit;\n  margin: 0;\n}\n.Titles-main {\n  font-size: 1.4em;\n}\n.Titles-sub {\n  opacity: .6;\n  margin-top: .2em;\n}\n.Titles-action {\n  background:hsl(16,87%,54%);\n  border-radius: .25em;\n  color: #fff;\n  display: inline-block;\n  font-weight: 400;\n  margin-top: .8em;\n  padding: .3em .6em .2em;\n  vertical-align: .4em;\n}\n.Titles-action:focus,.Titles-action:hover {\n  text-decoration: none;\n}\n\n\n/**\n * `--hero` modifer\n * Creates a bigger set of titles for use in page headers. Also\n * inlines the main and subtitle in larger medias.\n */\n\n.Titles--hero {\n  color:#75787d;\n}\n\n.Titles--hero .Titles-main {\n  font-size: 2.25em;\n}\n.Titles--hero .Titles-sub {\n  font-size: 1.25em;\n}\n\n@media (min-width: 570px) {\n  .Titles--hero {\n    margin:1em 0 1.5em;\n  }\n  .Titles--hero .Titles-main {\n    margin-right: .25em;\n  }.Titles--hero .Titles-main,.Titles--hero .Titles-sub{display:inline-block;}\n}\n\n@media (min-width: 1024px) {\n  .Titles--hero {\n    margin: 4em 0 0;\n  }\n  .Titles--hero .Titles-main {\n    font-size: 3em;\n    margin-right: .5em;\n  }\n  .Titles--hero .Titles-sub {\n    font-size: 1.75em;\n  }\n}\n.Video {\n  position: relative;\n  padding-bottom: 62.5%;\n  height: 0;\n}\n.Video-frame {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n/*\nCopyright 2015 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.ViewSelector,.ViewSelector2 {\n  display: block\n}\n\n.ViewSelector2-item,.ViewSelector table {\n  display: block;\n  margin-bottom: 1em;\n  width: 100%;\n}\n\n.ViewSelector2-item > label,.ViewSelector td:first-child {\n  font-weight: 700;\n  margin: 0 .25em .25em 0;\n  display: block;\n}\n\n.ViewSelector2-item > select {\n  width: 100%;\n}\n\n\n/*\n * Additional hacks to get the native ViewSelector component (which uses\n * closure widgets) to look like our custom ViewSelector extension.\n */\n\n.ViewSelector table,.ViewSelector tbody,.ViewSelector td,.ViewSelector tr {\n  display: block;\n}\n\n.ViewSelector table {\n  height: auto!important;\n}\n\n.ViewSelector table,.ViewSelector td{width:auto!important;}\n\n.ViewSelector td:last-child * {\n  display: block;\n  text-align: left;\n}\n\n.ViewSelector td:last-child > div {\n  font-weight: 400;\n  margin: 0;\n}\n\n@media (min-width: 570px) {\n  .ViewSelector,.ViewSelector2 {\n    display: -webkit-box;\n    display: -webkit-flex;\n    display: -ms-flexbox;\n    display: flex;\n    margin: 0 0 -1em -1em;\n    width: -webkit-calc(100% + 1em);\n    width: calc(100% + 1em);\n  }\n\n  .ViewSelector2-item,.ViewSelector table {\n    -webkit-box-flex: 1;\n    -webkit-flex: 1 1 -webkit-calc(100%/3 - 1em);\n        -ms-flex: 1 1 calc(100%/3 - 1em);\n            flex: 1 1 calc(100%/3 - 1em);\n    margin-left: 1em;\n  }\n}\n\n/*\n * Force each item onto its own line\n * regardless of the breakpoint.\n */\n.ViewSelector2--stacked,.ViewSelector--stacked {\n  display: block;\n  margin: 0;\n  width: auto;\n}\n\n.ViewSelector2--stacked .ViewSelector2-item,.ViewSelector--stacked table {\n  margin-left: 0;\n}\n\n/* Utilities. */\n.u-visuallyHidden {\n  border: 0!important;\n  clip: rect(1px,1px,1px,1px)!important;\n  height: 1px!important;\n  overflow: hidden!important;\n  padding: 0!important;\n  position: absolute!important;\n  width: 1px!important;\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n.u-hidden {\n  display: none;\n}\n.u-block {\n  display: block;\n}\n\n@media (min-width: 420px) {\n  .u-sm-hidden {\n    display: none;\n  }\n  .u-sm-block {\n    display: block;\n  }\n}\n\n@media (min-width: 570px) {\n  .u-md-hidden {\n    display: none;\n  }\n  .u-md-block {\n    display: block;\n  }\n}\n\n@media (min-width: 1024px) {\n  .u-lg-hidden {\n    display: none;\n  }\n  .u-lg-block {\n    display: block;\n  }\n}\n/*\nCopyright 2014 Google Inc. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n\n.u-spaceDouble {\n  margin:0 0 3em;\n}\n\n#embed-api-auth-container{\n    padding: 50px;\n    background: #fff;\n    text-align: center;\n    border-radius: 3px;\n    -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.05);\n    box-shadow: 0 1px 1px rgba(0,0,0,.05);\n}\n\n/********** END GA EMBED **********/\n\n\n\n/********** NESTABLE CSS **********/\n\n\n.dd { position: relative; display: block; margin: 0; padding: 0; list-style: none; font-size: 13px; line-height: 20px; }\n.dd-list { display: block; position: relative; margin: 0; padding: 0; list-style: none; }\n.dd-list .dd-list { padding-left: 30px; }\n.dd-collapsed .dd-list { display: none; }\n.dd-item,\n.dd-empty,\n.dd-placeholder { display: block; position: relative; margin: 0; padding: 0; min-height: 20px; font-size: 13px; line-height: 20px; }\n.dd-handle { display: block; height: 50px; margin: 5px 0; padding: 14px 25px; color: #333; text-decoration: none; font-weight: bold; border: 1px solid #ccc;\n    background: #fafafa;\n    -webkit-border-radius: 3px;\n            border-radius: 3px;\n    box-sizing: border-box; -moz-box-sizing: border-box;\n}\n.dd-handle:hover { color: #2ea8e5; background: #fff; }\n.dd-item > button { display: block; position: relative; cursor: pointer; float: left; width: 40px; height: 37px; margin: 5px 0; padding: 0; text-indent: 100%; white-space: nowrap; overflow: hidden; border: 0; background: transparent; font-size: 12px; line-height: 1; text-align: center; font-weight: bold; }\n.dd-item > button:before { content: '+'; display: block; position: absolute; width: 100%; text-align: center; text-indent: 0; }\n.dd-item > button[data-action=\"collapse\"]:before { content: '-'; }\n.dd-placeholder,\n.dd-empty { margin: 5px 0; padding: 0; min-height: 30px; background: #f2fbff; border: 1px dashed #b6bcbf; box-sizing: border-box; -moz-box-sizing: border-box; }\n.dd-empty { border: 1px dashed #bbb; min-height: 100px; background-color: #e5e5e5;\n    background-image: -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),\n                      -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);\n    background-image:    -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),\n                         -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);\n    background-image:         linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),\n                              linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);\n    background-size: 60px 60px;\n    background-position: 0 0, 30px 30px;\n}\n.dd-dragel { position: absolute; pointer-events: none; z-index: 9999; }\n.dd-dragel > .dd-item .dd-handle { margin-top: 0; }\n.dd-dragel .dd-handle {\n    -webkit-box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1);\n            box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1);\n}\n\n.nestable-lists { display: block; clear: both; padding: 30px 0; width: 100%; border: 0; border-top: 2px solid #ddd; border-bottom: 2px solid #ddd; }\n#nestable-menu { padding: 0; margin: 20px 0; }\n#nestable-output,\n#nestable2-output { width: 100%; height: 7em; font-size: 0.75em; line-height: 1.333333em; font-family: Consolas, monospace; padding: 5px; box-sizing: border-box; -moz-box-sizing: border-box; }\n#nestable2 .dd-handle {\n    color: #fff;\n    border: 1px solid #999;\n    background: #bbb;\n    background: -webkit-linear-gradient(to bottom, #bbb 0%, #999 100%);\n    background:    -moz-linear-gradient(to bottom, #bbb 0%, #999 100%);\n    background:         linear-gradient(to bottom, #bbb 0%, #999 100%);\n}\n.menus .table>tbody>tr>td{\n  line-height:44px;\n}\n#nestable2 .dd-handle:hover { background: #bbb; }\n#nestable2 .dd-item > button:before { color: #fff; }\n@media only screen and (min-width: 700px) {\n    .dd { float: left; width:100%; }\n    .dd + .dd { margin-left: 2%; }\n}\n.dd-hover > .dd-handle { background: #2ea8e5 !important; }\n\n.dd3-content { display: block; height: 30px; margin: 5px 0; padding: 5px 10px 5px 40px; color: #333; text-decoration: none; font-weight: bold; border: 1px solid #ccc;\n    background: #fafafa;\n    background: -webkit-linear-gradient(to bottom, #fafafa 0%, #eee 100%);\n    background:    -moz-linear-gradient(to bottom, #fafafa 0%, #eee 100%);\n    background:         linear-gradient(to bottom, #fafafa 0%, #eee 100%);\n    -webkit-border-radius: 3px;\n            border-radius: 3px;\n    box-sizing: border-box; -moz-box-sizing: border-box;\n}\n.dd3-content:hover { color: #2ea8e5; background: #fff; }\n.dd-dragel > .dd3-item > .dd3-content { margin: 0; }\n.dd3-item > button { margin-left: 30px; }\n.dd3-handle { position: absolute; margin: 0; left: 0; top: 0; cursor: pointer; width: 30px; text-indent: 100%; white-space: nowrap; overflow: hidden;\n    border: 1px solid #aaa;\n    background: #ddd;\n    background: -webkit-linear-gradient(to bottom, #ddd 0%, #bbb 100%);\n    background:    -moz-linear-gradient(to bottom, #ddd 0%, #bbb 100%);\n    background:         linear-gradient(to bottom, #ddd 0%, #bbb 100%);\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n}\n.dd3-handle:before { content: '≡'; display: block; position: absolute; left: 0; top: 3px; width: 100%; text-align: center; text-indent: 0; color: #fff; font-size: 20px; font-weight: normal; }\n.dd3-handle:hover { background: #ddd; }\n\n/********** END NESTABLE CSS **********/\n\n/********** Search Bar CSS **********/\n\n#search-input{\n    padding: 1px;\n    border: solid 1px #EAEAF1;\n    border-radius: 6px;\n    background-color: #fff;\n    margin-bottom: 20px;\n    display:flex;\n    .input-group{\n        display:flex;\n        position:relative;\n    }\n    input{\n        border: 0;\n        box-shadow: none;\n        width:100%;\n    }\n    button{\n        margin: 2px 0 0 0;\n        background: none;\n        box-shadow: none;\n        border: 0;\n        color: #999;\n        padding: 1px 8px 0 10px;\n        border-left: solid 1px #eee;\n        right: 20px;\n        z-index: 9;\n        &:hover{\n            border: 0;\n            box-shadow: none;\n            color:#777;\n            border-left: solid 1px #ddd;\n        }\n    }\n    i{\n        font-size: 18px;\n        transform: rotate(270deg);\n        display: block;\n    }\n\n\n    .select2-results{\n        text-align:center;\n    }\n\n    #filter{\n        text-align:center;\n        min-width:100px;\n    }\n}\n\n/********** END SEARCH BAR CSS **********/\n\n/********** Overriding Data Tables Icons **********/\n\n.voyager table.dataTable thead th.sorting:after, .voyager table.dataTable thead th.sorting_asc:after, .voyager table.dataTable thead th.sorting_desc:after, div.dataTables_paginate li.last a:after, div.dataTables_paginate li.next a:after, div.dataTables_paginate li.first a:before, div.dataTables_paginate li.previous a:before{\n  font-family:Voyager;\n}\n\n.voyager table.dataTable thead th.sorting:after{\n  content: 'o';\n  margin-top:3px;\n}\n\n.voyager table.dataTable thead th.sorting_asc:after{\n  content: 'p';\n  margin-top:5px;\n}\n\n.voyager table.dataTable thead th.sorting_desc:after{\n  content: 'q';\n}\n\n.voyager div.dataTables_paginate li.previous a:before{\n    content: \"\\e039\";\n    margin-top: 3px;\n    margin-left: -3px;\n}\n\n.voyager div.dataTables_paginate li.next a:after{\n    content: \"\\e046\";\n    margin-top: 3px;\n    margin-right: -3px;\n}\n\n/********** Add z-index to perfect-scrollbar **********/\n\n.ps__rail-x, .ps__rail-y {\n  z-index: 999;\n}\n\n/********** END perfect-scrollbar style **********/\n\n/********** Cropper Style **********/\n\n#cropping-image {\n  margin: 0 auto;\n}\n\ndiv.cropper-container img {\n  max-width: 100%; /* This rule is very important, please do not ignore this! */\n}\n\n/********** END Cropper Style **********/\n\n/********** SimpleMDE Style **********/\n\n.editor-toolbar.fullscreen {\n  z-index: 9999;\n}\n\n.CodeMirror-fullscreen {\n  z-index: 9999;\n}\n\n/********** END SimpleMDE Style **********/\n"
  },
  {
    "path": "resources/assets/sass/fonts.css",
    "content": "@charset \"UTF-8\";\n\n@font-face {\n  font-family: \"voyager\";\n  src:url(\"voyager-assets?path=fonts/voyager.eot\");\n  src:url(\"voyager-assets?path=fonts/voyager.eot?#iefix\") format(\"embedded-opentype\"),\n    url(\"voyager-assets?path=fonts/voyager.woff\") format(\"woff\"),\n    url(\"voyager-assets?path=fonts/voyager.ttf\") format(\"truetype\"),\n    url(\"voyager-assets?path=fonts/voyager.svg#voyager\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal;\n\n}\n\n[data-icon]:before {\n  font-family: \"voyager\" !important;\n  content: attr(data-icon);\n  font-style: normal !important;\n  font-weight: normal !important;\n  font-variant: normal !important;\n  text-transform: none !important;\n  speak: none;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n[class^=\"voyager-\"]:before,\n[class*=\" voyager-\"]:before {\n  font-family: \"voyager\" !important;\n  font-style: normal !important;\n  font-weight: normal !important;\n  font-variant: normal !important;\n  text-transform: none !important;\n  speak: none;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.voyager-bread:before {\n  content: \"\\61\";\n}\n.voyager-helm:before {\n  content: \"\\62\";\n}\n.voyager-play:before {\n  content: \"\\63\";\n}\n.voyager-activity:before {\n  content: \"\\64\";\n}\n.voyager-company:before {\n  content: \"\\65\";\n}\n.voyager-file-text:before {\n  content: \"\\66\";\n}\n.voyager-folder:before {\n  content: \"\\67\";\n}\n.voyager-paw:before {\n  content: \"\\68\";\n}\n.voyager-sort:before {\n  content: \"\\6f\";\n}\n.voyager-sort-asc:before {\n  content: \"\\70\";\n}\n.voyager-sort-desc:before {\n  content: \"\\71\";\n}\n.voyager-handle:before {\n  content: \"\\6d\";\n}\n.voyager-hammer:before {\n  content: \"\\6e\";\n}\n.voyager-images:before {\n  content: \"\\69\";\n}\n.voyager-categories:before {\n  content: \"\\6a\";\n}\n.voyager-group:before {\n  content: \"\\6b\";\n}\n.voyager-person:before {\n  content: \"\\73\";\n}\n.voyager-people:before {\n  content: \"\\74\";\n}\n.voyager-power:before {\n  content: \"\\75\";\n}\n.voyager-tools:before {\n  content: \"\\76\";\n}\n.voyager-anchor:before {\n  content: \"\\77\";\n}\n.voyager-double-down:before {\n  content: \"\\78\";\n}\n.voyager-double-up:before {\n  content: \"\\79\";\n}\n.voyager-double-left:before {\n  content: \"\\7a\";\n}\n.voyager-double-right:before {\n  content: \"\\41\";\n}\n.voyager-window-list:before {\n  content: \"\\42\";\n}\n.voyager-x:before {\n  content: \"\\43\";\n}\n.voyager-dot:before {\n  content: \"\\44\";\n}\n.voyager-dot-2:before {\n  content: \"\\45\";\n}\n.voyager-dot-3:before {\n  content: \"\\46\";\n}\n.voyager-list:before {\n  content: \"\\47\";\n}\n.voyager-list-add:before {\n  content: \"\\48\";\n}\n.voyager-pie-chart:before {\n  content: \"\\49\";\n}\n.voyager-watch:before {\n  content: \"\\4a\";\n}\n.voyager-data:before {\n  content: \"\\4b\";\n}\n.voyager-music:before {\n  content: \"\\4c\";\n}\n.voyager-settings:before {\n  content: \"\\4e\";\n}\n.voyager-video:before {\n  content: \"\\4f\";\n}\n.voyager-trash:before {\n  content: \"\\50\";\n}\n.voyager-tv:before {\n  content: \"\\51\";\n}\n.voyager-lock:before {\n  content: \"\\52\";\n}\n.voyager-news:before {\n  content: \"\\4d\";\n}\n.voyager-bag:before {\n  content: \"\\53\";\n}\n.voyager-upload:before {\n  content: \"\\54\";\n}\n.voyager-refresh:before {\n  content: \"\\55\";\n}\n.voyager-character:before {\n  content: \"\\57\";\n}\n.voyager-move:before {\n  content: \"\\58\";\n}\n.voyager-paypal:before {\n  content: \"\\56\";\n}\n.voyager-paper-plane:before {\n  content: \"\\59\";\n}\n.voyager-ticket:before {\n  content: \"\\5a\";\n}\n.voyager-youtube-play:before {\n  content: \"\\30\";\n}\n.voyager-boat:before {\n  content: \"\\31\";\n}\n.voyager-check:before {\n  content: \"\\6c\";\n}\n.voyager-alarm-clock:before {\n  content: \"\\32\";\n}\n.voyager-controller:before {\n  content: \"\\34\";\n}\n.voyager-pizza:before {\n  content: \"\\35\";\n}\n.voyager-backpack:before {\n  content: \"\\36\";\n}\n.voyager-barbeque:before {\n  content: \"\\37\";\n}\n.voyager-bomb:before {\n  content: \"\\38\";\n}\n.voyager-book-download:before {\n  content: \"\\39\";\n}\n.voyager-browser:before {\n  content: \"\\21\";\n}\n.voyager-brush:before {\n  content: \"\\22\";\n}\n.voyager-bubble-hear:before {\n  content: \"\\23\";\n}\n.voyager-polaroid:before {\n  content: \"\\24\";\n}\n.voyager-crop:before {\n  content: \"\\26\";\n}\n.voyager-dashboard:before {\n  content: \"\\27\";\n}\n.voyager-hotdog:before {\n  content: \"\\28\";\n}\n.voyager-laptop:before {\n  content: \"\\29\";\n}\n.voyager-paint-bucket:before {\n  content: \"\\2c\";\n}\n.voyager-photo:before {\n  content: \"\\2d\";\n}\n.voyager-photos:before {\n  content: \"\\2e\";\n}\n.voyager-receipt:before {\n  content: \"\\2f\";\n}\n.voyager-buy:before {\n  content: \"\\3a\";\n}\n.voyager-lightbulb:before {\n  content: \"\\3b\";\n}\n.voyager-archive:before {\n  content: \"\\3f\";\n}\n.voyager-paperclip:before {\n  content: \"\\40\";\n}\n.voyager-warning:before {\n  content: \"\\5b\";\n}\n.voyager-basket:before {\n  content: \"\\5d\";\n}\n.voyager-bell:before {\n  content: \"\\5e\";\n}\n.voyager-book:before {\n  content: \"\\5f\";\n}\n.voyager-chat:before {\n  content: \"\\60\";\n}\n.voyager-down-circled:before {\n  content: \"\\7b\";\n}\n.voyager-location:before {\n  content: \"\\7d\";\n}\n.voyager-forward:before {\n  content: \"\\7e\";\n}\n.voyager-flashlight:before {\n  content: \"\\5c\";\n}\n.voyager-trophy:before {\n  content: \"\\e001\";\n}\n.voyager-diamond:before {\n  content: \"\\e002\";\n}\n.voyager-credit-cards:before {\n  content: \"\\e003\";\n}\n.voyager-shop:before {\n  content: \"\\e004\";\n}\n.voyager-sound:before {\n  content: \"\\e005\";\n}\n.voyager-study:before {\n  content: \"\\e006\";\n}\n.voyager-pen:before {\n  content: \"\\e007\";\n}\n.voyager-params:before {\n  content: \"\\e008\";\n}\n.voyager-fire:before {\n  content: \"\\e009\";\n}\n.voyager-dollar:before {\n  content: \"\\e00a\";\n}\n.voyager-bulb:before {\n  content: \"\\e00b\";\n}\n.voyager-lab:before {\n  content: \"\\e00c\";\n}\n.voyager-cup:before {\n  content: \"\\e00d\";\n}\n.voyager-megaphone:before {\n  content: \"\\e00e\";\n}\n.voyager-heart:before {\n  content: \"\\e00f\";\n}\n.voyager-bubble:before {\n  content: \"\\e011\";\n}\n.voyager-search:before {\n  content: \"\\e012\";\n}\n.voyager-tag:before {\n  content: \"\\e013\";\n}\n.voyager-world:before {\n  content: \"\\25\";\n}\n.voyager-camera:before {\n  content: \"\\2a\";\n}\n.voyager-calendar:before {\n  content: \"\\7c\";\n}\n.voyager-mail:before {\n  content: \"\\e014\";\n}\n.voyager-phone:before {\n  content: \"\\e015\";\n}\n.voyager-star:before {\n  content: \"\\e016\";\n}\n.voyager-star-half:before {\n  content: \"\\e017\";\n}\n.voyager-star-half-1:before {\n  content: \"\\e018\";\n}\n.voyager-star-two:before {\n  content: \"\\e019\";\n}\n.voyager-medal-rank-star:before {\n  content: \"\\e01a\";\n}\n.voyager-facebook:before {\n  content: \"\\e01b\";\n}\n.voyager-google-plus:before {\n  content: \"\\e01c\";\n}\n.voyager-twitter:before {\n  content: \"\\e01d\";\n}\n.voyager-github:before {\n  content: \"\\e01e\";\n}\n.voyager-code:before {\n  content: \"\\e01f\";\n}\n.voyager-pie-graph:before {\n  content: \"\\e020\";\n}\n.voyager-javascript:before {\n  content: \"\\e021\";\n}\n.voyager-wand:before {\n  content: \"\\e022\";\n}\n.voyager-wineglass:before {\n  content: \"\\e023\";\n}\n.voyager-milestone:before {\n  content: \"\\e024\";\n}\n.voyager-terminal:before {\n  content: \"\\e025\";\n}\n.voyager-plug:before {\n  content: \"\\e026\";\n}\n.voyager-gift:before {\n  content: \"\\e027\";\n}\n.voyager-markdown:before {\n  content: \"\\e028\";\n}\n.voyager-beer:before {\n  content: \"\\e029\";\n}\n.voyager-credit-card:before {\n  content: \"\\e02a\";\n}\n.voyager-bolt:before {\n  content: \"\\e02b\";\n}\n.voyager-external:before {\n  content: \"\\e02c\";\n}\n.voyager-magnet:before {\n  content: \"\\e02d\";\n}\n.voyager-certificate:before {\n  content: \"\\e02e\";\n}\n.voyager-cloud-download:before {\n  content: \"\\e02f\";\n}\n.voyager-campfire:before {\n  content: \"\\e030\";\n}\n.voyager-new:before {\n  content: \"\\e031\";\n}\n.voyager-skull:before {\n  content: \"\\e032\";\n}\n.voyager-telephone:before {\n  content: \"\\e033\";\n}\n.voyager-trees:before {\n  content: \"\\e034\";\n}\n.voyager-bar-chart:before {\n  content: \"\\e035\";\n}\n.voyager-check-circle:before {\n  content: \"\\e036\";\n}\n.voyager-exclamation:before {\n  content: \"\\e037\";\n}\n.voyager-font:before {\n  content: \"\\e03a\";\n}\n.voyager-puzzle:before {\n  content: \"\\e03b\";\n}\n.voyager-smile:before {\n  content: \"\\e03c\";\n}\n.voyager-frown:before {\n  content: \"\\e03d\";\n}\n.voyager-meh:before {\n  content: \"\\e03e\";\n}\n.voyager-leaf:before {\n  content: \"\\e03f\";\n}\n.voyager-info-circled:before {\n  content: \"\\e040\";\n}\n.voyager-underline:before {\n  content: \"\\e041\";\n}\n.voyager-wallet:before {\n  content: \"\\e042\";\n}\n.voyager-truck:before {\n  content: \"\\e043\";\n}\n.voyager-eye:before {\n  content: \"\\e044\";\n}\n.voyager-sun:before {\n  content: \"\\e045\";\n}\n.voyager-barbell:before {\n  content: \"\\e04a\";\n}\n.voyager-bookmark:before {\n  content: \"\\e04c\";\n}\n.voyager-volume-up:before {\n  content: \"\\e04d\";\n}\n.voyager-volume-down:before {\n  content: \"\\e04e\";\n}\n.voyager-wifi:before {\n  content: \"\\e04f\";\n}\n.voyager-pause:before {\n  content: \"\\e053\";\n}\n.voyager-resize-full:before {\n  content: \"\\e054\";\n}\n.voyager-resize-small:before {\n  content: \"\\e055\";\n}\n.voyager-download:before {\n  content: \"\\e056\";\n}\n.voyager-droplet:before {\n  content: \"\\e057\";\n}\n.voyager-umbrella:before {\n  content: \"\\e058\";\n}\n.voyager-harddrive:before {\n  content: \"\\e059\";\n}\n.voyager-css3:before {\n  content: \"\\e05a\";\n}\n.voyager-html5:before {\n  content: \"\\e05b\";\n}\n.voyager-tree:before {\n  content: \"\\e05e\";\n}\n.voyager-file-code:before {\n  content: \"\\e061\";\n}\n.voyager-bug:before {\n  content: \"\\e062\";\n}\n.voyager-rocket:before {\n  content: \"\\e063\";\n}\n.voyager-key:before {\n  content: \"\\33\";\n}\n.voyager-question:before {\n  content: \"\\2b\";\n}\n.voyager-cursor:before {\n  content: \"\\3c\";\n}\n.voyager-lifebuoy:before {\n  content: \"\\3d\";\n}\n.voyager-thumbs-up:before {\n  content: \"\\3e\";\n}\n.voyager-thumb-tack:before {\n  content: \"\\e000\";\n}\n.voyager-edit:before {\n  content: \"\\e010\";\n}\n.voyager-angle-down:before {\n  content: \"\\e038\";\n}\n.voyager-angle-left:before {\n  content: \"\\e039\";\n}\n.voyager-angle-right:before {\n  content: \"\\e046\";\n}\n.voyager-angle-up:before {\n  content: \"\\e047\";\n}\n.voyager-home:before {\n  content: \"\\e048\";\n}\n.voyager-pirate-swords:before {\n  content: \"\\e04b\";\n}\n.voyager-pirate:before {\n  content: \"\\e050\";\n}\n.voyager-rum:before {\n  content: \"\\e051\";\n}\n.voyager-cannon:before {\n  content: \"\\e049\";\n}\n.voyager-hook:before {\n  content: \"\\e052\";\n}\n.voyager-kraken:before {\n  content: \"\\e05c\";\n}\n.voyager-lighthouse:before {\n  content: \"\\e05d\";\n}\n.voyager-pirate-hat:before {\n  content: \"\\e05f\";\n}\n.voyager-rum-1:before {\n  content: \"\\e060\";\n}\n.voyager-ship:before {\n  content: \"\\e064\";\n}\n.voyager-treasure:before {\n  content: \"\\e065\";\n}\n.voyager-treasure-open:before {\n  content: \"\\e066\";\n}\n.voyager-whale:before {\n  content: \"\\e067\";\n}\n.voyager-compass:before {\n  content: \"\\e068\";\n}\n.voyager-logbook:before {\n  content: \"\\e069\";\n}\n.voyager-plus:before {\n  content: \"\\e06a\";\n}\n.voyager-documentation:before {\n  content: \"\\72\";\n}\n.voyager-belt:before {\n  content: \"\\e06b\";\n}\n.voyager-zoom-in:before {\n  content: \"\\e06c\";\n}\n.voyager-zoom-out:before {\n  content: \"\\e06d\";\n}\n.voyager-scissors:before {\n  content: \"\\e06e\";\n}\n.voyager-github-icon:before {\n  content: \"\\e06f\";\n}\n"
  },
  {
    "path": "resources/views/alerts.blade.php",
    "content": "<div class=\"alerts\">\n    @foreach ($alerts as $alert)\n        <div class=\"alert alert-{{ $alert->type }} alert-name-{{ $alert->name }}\">\n            @foreach($alert->components as $component)\n                <?php echo $component->render(); ?>\n            @endforeach\n        </div>\n    @endforeach\n</div>\n"
  },
  {
    "path": "resources/views/auth/master.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"{{ config('app.locale') }}\" dir=\"{{ __('voyager::generic.is_rtl') == 'true' ? 'rtl' : 'ltr' }}\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"robots\" content=\"none\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui\">\n    <meta name=\"description\" content=\"admin login\">\n    <title>@yield('title', 'Admin - '.Voyager::setting(\"admin.title\"))</title>\n    <link rel=\"stylesheet\" href=\"{{ voyager_asset('css/app.css') }}\">\n    @if (__('voyager::generic.is_rtl') == 'true')\n        <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-rtl/3.4.0/css/bootstrap-rtl.css\">\n        <link rel=\"stylesheet\" href=\"{{ voyager_asset('css/rtl.css') }}\">\n    @endif\n    <style>\n        body {\n            background-image:url('{{ Voyager::image( Voyager::setting(\"admin.bg_image\"), voyager_asset(\"images/bg.jpg\") ) }}');\n            background-color: {{ Voyager::setting(\"admin.bg_color\", \"#FFFFFF\" ) }};\n        }\n        body.login .login-sidebar {\n            border-top:5px solid {{ config('voyager.primary_color','#22A7F0') }};\n        }\n        @media (max-width: 767px) {\n            body.login .login-sidebar {\n                border-top:0px !important;\n                border-left:5px solid {{ config('voyager.primary_color','#22A7F0') }};\n            }\n        }\n        body.login .form-group-default.focused{\n            border-color:{{ config('voyager.primary_color','#22A7F0') }};\n        }\n        .login-button, .bar:before, .bar:after{\n            background:{{ config('voyager.primary_color','#22A7F0') }};\n        }\n        .remember-me-text{\n            padding:0 5px;\n        }\n    </style>\n    \n    @yield('pre_css')\n    <link href=\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,700\" rel=\"stylesheet\">\n</head>\n<body class=\"login\">\n<div class=\"container-fluid\">\n    <div class=\"row\">\n        <div class=\"faded-bg animated\"></div>\n        <div class=\"hidden-xs col-sm-7 col-md-8\">\n            <div class=\"clearfix\">\n                <div class=\"col-sm-12 col-md-10 col-md-offset-2\">\n                    <div class=\"logo-title-container\">\n                        <?php $admin_logo_img = Voyager::setting('admin.icon_image', ''); ?>\n                        @if($admin_logo_img == '')\n                            <img class=\"img-responsive pull-left flip logo hidden-xs animated fadeIn\" src=\"{{ voyager_asset('images/logo-icon-light.png') }}\" alt=\"Logo Icon\">\n                        @else\n                            <img class=\"img-responsive pull-left flip logo hidden-xs animated fadeIn\" src=\"{{ Voyager::image($admin_logo_img) }}\" alt=\"Logo Icon\">\n                        @endif\n                        <div class=\"copy animated fadeIn\">\n                            <h1>{{ Voyager::setting('admin.title', 'Voyager') }}</h1>\n                            <p>{{ Voyager::setting('admin.description', __('voyager::login.welcome')) }}</p>\n                        </div>\n                    </div> <!-- .logo-title-container -->\n                </div>\n            </div>\n        </div>\n\n        <div class=\"col-xs-12 col-sm-5 col-md-4 login-sidebar\">\n\n           @yield('content')\n\n        </div> <!-- .login-sidebar -->\n    </div> <!-- .row -->\n</div> <!-- .container-fluid -->\n@yield('post_js')\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/bread/browse.blade.php",
    "content": "@extends('voyager::master')\n\n@section('page_title', __('voyager::generic.viewing').' '.$dataType->getTranslatedAttribute('display_name_plural'))\n\n@section('page_header')\n    <div class=\"container-fluid\">\n        <h1 class=\"page-title\">\n            <i class=\"{{ $dataType->icon }}\"></i> {{ $dataType->getTranslatedAttribute('display_name_plural') }}\n        </h1>\n        @can('add', app($dataType->model_name))\n            <a href=\"{{ route('voyager.'.$dataType->slug.'.create') }}\" class=\"btn btn-success btn-add-new\">\n                <i class=\"voyager-plus\"></i> <span>{{ __('voyager::generic.add_new') }}</span>\n            </a>\n        @endcan\n        @can('delete', app($dataType->model_name))\n            @include('voyager::partials.bulk-delete')\n        @endcan\n        @can('edit', app($dataType->model_name))\n            @if(!empty($dataType->order_column) && !empty($dataType->order_display_column))\n                <a href=\"{{ route('voyager.'.$dataType->slug.'.order') }}\" class=\"btn btn-primary btn-add-new\">\n                    <i class=\"voyager-list\"></i> <span>{{ __('voyager::bread.order') }}</span>\n                </a>\n            @endif\n        @endcan\n        @can('delete', app($dataType->model_name))\n            @if($usesSoftDeletes)\n                <input type=\"checkbox\" @if ($showSoftDeleted) checked @endif id=\"show_soft_deletes\" data-toggle=\"toggle\" data-on=\"{{ __('voyager::bread.soft_deletes_off') }}\" data-off=\"{{ __('voyager::bread.soft_deletes_on') }}\">\n            @endif\n        @endcan\n        @foreach($actions as $action)\n            @if (method_exists($action, 'massAction'))\n                @include('voyager::bread.partials.actions', ['action' => $action, 'data' => null])\n            @endif\n        @endforeach\n        @include('voyager::multilingual.language-selector')\n    </div>\n@stop\n\n@section('content')\n    <div class=\"page-content browse container-fluid\">\n        @include('voyager::alerts')\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <div class=\"panel panel-bordered\">\n                    <div class=\"panel-body\">\n                        @if ($isServerSide)\n                            <form method=\"get\" class=\"form-search\">\n                                <div id=\"search-input\">\n                                    <div class=\"col-2\">\n                                        <select id=\"search_key\" name=\"key\">\n                                            @foreach($searchNames as $key => $name)\n                                                <option value=\"{{ $key }}\" @if($search->key == $key || (empty($search->key) && $key == $defaultSearchKey)) selected @endif>{{ $name }}</option>\n                                            @endforeach\n                                        </select>\n                                    </div>\n                                    <div class=\"col-2\">\n                                        <select id=\"filter\" name=\"filter\">\n                                            <option value=\"contains\" @if($search->filter == \"contains\") selected @endif>{{ __('voyager::generic.contains') }}</option>\n                                            <option value=\"equals\" @if($search->filter == \"equals\") selected @endif>=</option>\n                                        </select>\n                                    </div>\n                                    <div class=\"input-group col-md-12\">\n                                        <input type=\"text\" class=\"form-control\" placeholder=\"{{ __('voyager::generic.search') }}\" name=\"s\" value=\"{{ $search->value }}\">\n                                        <span class=\"input-group-btn\">\n                                            <button class=\"btn btn-info btn-lg\" type=\"submit\">\n                                                <i class=\"voyager-search\"></i>\n                                            </button>\n                                        </span>\n                                    </div>\n                                </div>\n                                @if (Request::has('sort_order') && Request::has('order_by'))\n                                    <input type=\"hidden\" name=\"sort_order\" value=\"{{ Request::get('sort_order') }}\">\n                                    <input type=\"hidden\" name=\"order_by\" value=\"{{ Request::get('order_by') }}\">\n                                @endif\n                            </form>\n                        @endif\n                        <div class=\"table-responsive\">\n                            <table id=\"dataTable\" class=\"table table-hover\">\n                                <thead>\n                                    <tr>\n                                        @if($showCheckboxColumn)\n                                            <th class=\"dt-not-orderable\">\n                                                <input type=\"checkbox\" class=\"select_all\">\n                                            </th>\n                                        @endif\n                                        @foreach($dataType->browseRows as $row)\n                                        <th>\n                                            @if ($isServerSide && in_array($row->field, $sortableColumns))\n                                                <a href=\"{{ $row->sortByUrl($orderBy, $sortOrder) }}\">\n                                            @endif\n                                            {{ $row->getTranslatedAttribute('display_name') }}\n                                            @if ($isServerSide)\n                                                @if ($row->isCurrentSortField($orderBy))\n                                                    @if ($sortOrder == 'asc')\n                                                        <i class=\"voyager-angle-up pull-right\"></i>\n                                                    @else\n                                                        <i class=\"voyager-angle-down pull-right\"></i>\n                                                    @endif\n                                                @endif\n                                                </a>\n                                            @endif\n                                        </th>\n                                        @endforeach\n                                        <th class=\"actions text-right dt-not-orderable\">{{ __('voyager::generic.actions') }}</th>\n                                    </tr>\n                                </thead>\n                                <tbody>\n                                    @foreach($dataTypeContent as $data)\n                                    <tr>\n                                        @if($showCheckboxColumn)\n                                            <td>\n                                                <input type=\"checkbox\" name=\"row_id\" id=\"checkbox_{{ $data->getKey() }}\" value=\"{{ $data->getKey() }}\">\n                                            </td>\n                                        @endif\n                                        @foreach($dataType->browseRows as $row)\n                                            @php\n                                            if ($data->{$row->field.'_browse'}) {\n                                                $data->{$row->field} = $data->{$row->field.'_browse'};\n                                            }\n                                            @endphp\n                                            <td>\n                                                @if (isset($row->details->view_browse))\n                                                    @include($row->details->view_browse, ['row' => $row, 'dataType' => $dataType, 'dataTypeContent' => $dataTypeContent, 'content' => $data->{$row->field}, 'view' => 'browse', 'options' => $row->details])\n                                                @elseif (isset($row->details->view))\n                                                    @include($row->details->view, ['row' => $row, 'dataType' => $dataType, 'dataTypeContent' => $dataTypeContent, 'content' => $data->{$row->field}, 'action' => 'browse', 'view' => 'browse', 'options' => $row->details])\n                                                @elseif($row->type == 'image')\n                                                    <img src=\"@if( !filter_var($data->{$row->field}, FILTER_VALIDATE_URL)){{ Voyager::image( $data->{$row->field} ) }}@else{{ $data->{$row->field} }}@endif\" style=\"width:100px\">\n                                                @elseif($row->type == 'relationship')\n                                                    @include('voyager::formfields.relationship', ['view' => 'browse','options' => $row->details])\n                                                @elseif($row->type == 'select_multiple')\n                                                    @if(property_exists($row->details, 'relationship'))\n\n                                                        @foreach($data->{$row->field} as $item)\n                                                            {{ $item->{$row->field} }}\n                                                        @endforeach\n\n                                                    @elseif(property_exists($row->details, 'options'))\n                                                        @if (!empty(json_decode($data->{$row->field})))\n                                                            @foreach(json_decode($data->{$row->field}) as $item)\n                                                                @if (@$row->details->options->{$item})\n                                                                    {{ $row->details->options->{$item} . (!$loop->last ? ', ' : '') }}\n                                                                @endif\n                                                            @endforeach\n                                                        @else\n                                                            {{ __('voyager::generic.none') }}\n                                                        @endif\n                                                    @endif\n\n                                                    @elseif($row->type == 'multiple_checkbox' && property_exists($row->details, 'options'))\n                                                        @if (@count(json_decode($data->{$row->field}, true)) > 0)\n                                                            @foreach(json_decode($data->{$row->field}) as $item)\n                                                                @if (@$row->details->options->{$item})\n                                                                    {{ $row->details->options->{$item} . (!$loop->last ? ', ' : '') }}\n                                                                @endif\n                                                            @endforeach\n                                                        @else\n                                                            {{ __('voyager::generic.none') }}\n                                                        @endif\n\n                                                @elseif(($row->type == 'select_dropdown' || $row->type == 'radio_btn') && property_exists($row->details, 'options'))\n\n                                                    {!! $row->details->options->{$data->{$row->field}} ?? '' !!}\n\n                                                @elseif($row->type == 'date' || $row->type == 'timestamp')\n                                                    @if ( property_exists($row->details, 'format') && !is_null($data->{$row->field}) )\n                                                        {{ \\Carbon\\Carbon::parse($data->{$row->field})->formatLocalized($row->details->format) }}\n                                                    @else\n                                                        {{ $data->{$row->field} }}\n                                                    @endif\n                                                @elseif($row->type == 'checkbox')\n                                                    @if(property_exists($row->details, 'on') && property_exists($row->details, 'off'))\n                                                        @if($data->{$row->field})\n                                                            <span class=\"label label-info\">{{ $row->details->on }}</span>\n                                                        @else\n                                                            <span class=\"label label-primary\">{{ $row->details->off }}</span>\n                                                        @endif\n                                                    @else\n                                                    {{ $data->{$row->field} }}\n                                                    @endif\n                                                @elseif($row->type == 'color')\n                                                    <span class=\"badge badge-lg\" style=\"background-color: {{ $data->{$row->field} }}\">{{ $data->{$row->field} }}</span>\n                                                @elseif($row->type == 'text')\n                                                    @include('voyager::multilingual.input-hidden-bread-browse')\n                                                    <div>{{ mb_strlen( $data->{$row->field} ) > 200 ? mb_substr($data->{$row->field}, 0, 200) . ' ...' : $data->{$row->field} }}</div>\n                                                @elseif($row->type == 'text_area')\n                                                    @include('voyager::multilingual.input-hidden-bread-browse')\n                                                    <div>{{ mb_strlen( $data->{$row->field} ) > 200 ? mb_substr($data->{$row->field}, 0, 200) . ' ...' : $data->{$row->field} }}</div>\n                                                @elseif($row->type == 'file' && !empty($data->{$row->field}) )\n                                                    @include('voyager::multilingual.input-hidden-bread-browse')\n                                                    @if(json_decode($data->{$row->field}) !== null)\n                                                        @foreach(json_decode($data->{$row->field}) as $file)\n                                                            <a href=\"{{ Storage::disk(config('voyager.storage.disk'))->url($file->download_link) ?: '' }}\" target=\"_blank\">\n                                                                {{ $file->original_name ?: '' }}\n                                                            </a>\n                                                            <br/>\n                                                        @endforeach\n                                                    @else\n                                                        <a href=\"{{ Storage::disk(config('voyager.storage.disk'))->url($data->{$row->field}) }}\" target=\"_blank\">\n                                                            {{ __('voyager::generic.download') }}\n                                                        </a>\n                                                    @endif\n                                                @elseif($row->type == 'rich_text_box')\n                                                    @include('voyager::multilingual.input-hidden-bread-browse')\n                                                    <div>{{ mb_strlen( strip_tags($data->{$row->field}, '<b><i><u>') ) > 200 ? mb_substr(strip_tags($data->{$row->field}, '<b><i><u>'), 0, 200) . ' ...' : strip_tags($data->{$row->field}, '<b><i><u>') }}</div>\n                                                @elseif($row->type == 'coordinates')\n                                                    @include('voyager::partials.coordinates-static-image')\n                                                @elseif($row->type == 'multiple_images')\n                                                    @php $images = json_decode($data->{$row->field}); @endphp\n                                                    @if($images)\n                                                        @php $images = array_slice($images, 0, 3); @endphp\n                                                        @foreach($images as $image)\n                                                            <img src=\"@if( !filter_var($image, FILTER_VALIDATE_URL)){{ Voyager::image( $image ) }}@else{{ $image }}@endif\" style=\"width:50px\">\n                                                        @endforeach\n                                                    @endif\n                                                @elseif($row->type == 'media_picker')\n                                                    @php\n                                                        if (is_array($data->{$row->field})) {\n                                                            $files = $data->{$row->field};\n                                                        } else {\n                                                            $files = json_decode($data->{$row->field});\n                                                        }\n                                                    @endphp\n                                                    @if ($files)\n                                                        @if (property_exists($row->details, 'show_as_images') && $row->details->show_as_images)\n                                                            @foreach (array_slice($files, 0, 3) as $file)\n                                                            <img src=\"@if( !filter_var($file, FILTER_VALIDATE_URL)){{ Voyager::image( $file ) }}@else{{ $file }}@endif\" style=\"width:50px\">\n                                                            @endforeach\n                                                        @else\n                                                            <ul>\n                                                            @foreach (array_slice($files, 0, 3) as $file)\n                                                                <li>{{ $file }}</li>\n                                                            @endforeach\n                                                            </ul>\n                                                        @endif\n                                                        @if (count($files) > 3)\n                                                            {{ __('voyager::media.files_more', ['count' => (count($files) - 3)]) }}\n                                                        @endif\n                                                    @elseif (is_array($files) && count($files) == 0)\n                                                        {{ trans_choice('voyager::media.files', 0) }}\n                                                    @elseif ($data->{$row->field} != '')\n                                                        @if (property_exists($row->details, 'show_as_images') && $row->details->show_as_images)\n                                                            <img src=\"@if( !filter_var($data->{$row->field}, FILTER_VALIDATE_URL)){{ Voyager::image( $data->{$row->field} ) }}@else{{ $data->{$row->field} }}@endif\" style=\"width:50px\">\n                                                        @else\n                                                            {{ $data->{$row->field} }}\n                                                        @endif\n                                                    @else\n                                                        {{ trans_choice('voyager::media.files', 0) }}\n                                                    @endif\n                                                @else\n                                                    @include('voyager::multilingual.input-hidden-bread-browse')\n                                                    <span>{{ $data->{$row->field} }}</span>\n                                                @endif\n                                            </td>\n                                        @endforeach\n                                        <td class=\"no-sort no-click bread-actions\">\n                                            @foreach($actions as $action)\n                                                @if (!method_exists($action, 'massAction'))\n                                                    @include('voyager::bread.partials.actions', ['action' => $action])\n                                                @endif\n                                            @endforeach\n                                        </td>\n                                    </tr>\n                                    @endforeach\n                                </tbody>\n                            </table>\n                        </div>\n                        @if ($isServerSide)\n                            <div class=\"pull-left\">\n                                <div role=\"status\" class=\"show-res\" aria-live=\"polite\">{{ trans_choice(\n                                    'voyager::generic.showing_entries', $dataTypeContent->total(), [\n                                        'from' => $dataTypeContent->firstItem(),\n                                        'to' => $dataTypeContent->lastItem(),\n                                        'all' => $dataTypeContent->total()\n                                    ]) }}</div>\n                            </div>\n                            <div class=\"pull-right\">\n                                {{ $dataTypeContent->appends([\n                                    's' => $search->value,\n                                    'filter' => $search->filter,\n                                    'key' => $search->key,\n                                    'order_by' => $orderBy,\n                                    'sort_order' => $sortOrder,\n                                    'showSoftDeleted' => $showSoftDeleted,\n                                ])->links() }}\n                            </div>\n                        @endif\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    {{-- Single delete modal --}}\n    <div class=\"modal modal-danger fade\" tabindex=\"-1\" id=\"delete_modal\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"{{ __('voyager::generic.close') }}\"><span aria-hidden=\"true\">&times;</span></button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-trash\"></i> {{ __('voyager::generic.delete_question') }} {{ strtolower($dataType->getTranslatedAttribute('display_name_singular')) }}?</h4>\n                </div>\n                <div class=\"modal-footer\">\n                    <form action=\"#\" id=\"delete_form\" method=\"POST\">\n                        {{ method_field('DELETE') }}\n                        {{ csrf_field() }}\n                        <input type=\"submit\" class=\"btn btn-danger pull-right delete-confirm\" value=\"{{ __('voyager::generic.delete_confirm') }}\">\n                    </form>\n                    <button type=\"button\" class=\"btn btn-default pull-right\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                </div>\n            </div><!-- /.modal-content -->\n        </div><!-- /.modal-dialog -->\n    </div><!-- /.modal -->\n@stop\n\n@section('css')\n@if(!$dataType->server_side && config('dashboard.data_tables.responsive'))\n    <link rel=\"stylesheet\" href=\"{{ voyager_asset('lib/css/responsive.dataTables.min.css') }}\">\n@endif\n@stop\n\n@section('javascript')\n    <!-- DataTables -->\n    @if(!$dataType->server_side && config('dashboard.data_tables.responsive'))\n        <script src=\"{{ voyager_asset('lib/js/dataTables.responsive.min.js') }}\"></script>\n    @endif\n    <script>\n        $(document).ready(function () {\n            @if (!$dataType->server_side)\n                var table = $('#dataTable').DataTable({!! json_encode(\n                    array_merge([\n                        \"order\" => $orderColumn,\n                        \"language\" => __('voyager::datatable'),\n                        \"columnDefs\" => [\n                            ['targets' => 'dt-not-orderable', 'searchable' =>  false, 'orderable' => false],\n                        ],\n                    ],\n                    config('voyager.dashboard.data_tables', []))\n                , true) !!});\n            @else\n                $('#search-input select').select2({\n                    minimumResultsForSearch: Infinity\n                });\n            @endif\n\n            @if ($isModelTranslatable)\n                $('.side-body').multilingual();\n                //Reinitialise the multilingual features when they change tab\n                $('#dataTable').on('draw.dt', function(){\n                    $('.side-body').data('multilingual').init();\n                })\n            @endif\n            $('.select_all').on('click', function(e) {\n                $('input[name=\"row_id\"]').prop('checked', $(this).prop('checked')).trigger('change');\n            });\n        });\n\n\n        var deleteFormAction;\n        $('td').on('click', '.delete', function (e) {\n            $('#delete_form')[0].action = '{{ route('voyager.'.$dataType->slug.'.destroy', '__id') }}'.replace('__id', $(this).data('id'));\n            $('#delete_modal').modal('show');\n        });\n\n        @if($usesSoftDeletes)\n            @php\n                $params = [\n                    's' => $search->value,\n                    'filter' => $search->filter,\n                    'key' => $search->key,\n                    'order_by' => $orderBy,\n                    'sort_order' => $sortOrder,\n                ];\n            @endphp\n            $(function() {\n                $('#show_soft_deletes').change(function() {\n                    if ($(this).prop('checked')) {\n                        $('#dataTable').before('<a id=\"redir\" href=\"{{ (route('voyager.'.$dataType->slug.'.index', array_merge($params, ['showSoftDeleted' => 1]), true)) }}\"></a>');\n                    }else{\n                        $('#dataTable').before('<a id=\"redir\" href=\"{{ (route('voyager.'.$dataType->slug.'.index', array_merge($params, ['showSoftDeleted' => 0]), true)) }}\"></a>');\n                    }\n\n                    $('#redir')[0].click();\n                })\n            })\n        @endif\n        $('input[name=\"row_id\"]').on('change', function () {\n            var ids = [];\n            $('input[name=\"row_id\"]').each(function() {\n                if ($(this).is(':checked')) {\n                    ids.push($(this).val());\n                }\n            });\n            $('.selected_ids').val(ids);\n        });\n    </script>\n@stop\n"
  },
  {
    "path": "resources/views/bread/edit-add.blade.php",
    "content": "@php\n    $edit = !is_null($dataTypeContent->getKey());\n    $add  = is_null($dataTypeContent->getKey());\n@endphp\n\n@extends('voyager::master')\n\n@section('css')\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n@stop\n\n@section('page_title', __('voyager::generic.'.($edit ? 'edit' : 'add')).' '.$dataType->getTranslatedAttribute('display_name_singular'))\n\n@section('page_header')\n    <h1 class=\"page-title\">\n        <i class=\"{{ $dataType->icon }}\"></i>\n        {{ __('voyager::generic.'.($edit ? 'edit' : 'add')).' '.$dataType->getTranslatedAttribute('display_name_singular') }}\n    </h1>\n    @include('voyager::multilingual.language-selector')\n@stop\n\n@section('content')\n    <div class=\"page-content edit-add container-fluid\">\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n\n                <div class=\"panel panel-bordered\">\n                    <!-- form start -->\n                    <form role=\"form\"\n                            class=\"form-edit-add\"\n                            action=\"{{ $edit ? route('voyager.'.$dataType->slug.'.update', $dataTypeContent->getKey()) : route('voyager.'.$dataType->slug.'.store') }}\"\n                            method=\"POST\" enctype=\"multipart/form-data\">\n                        <!-- PUT Method if we are editing -->\n                        @if($edit)\n                            {{ method_field(\"PUT\") }}\n                        @endif\n\n                        <!-- CSRF TOKEN -->\n                        {{ csrf_field() }}\n\n                        <div class=\"panel-body\">\n\n                            @if (count($errors) > 0)\n                                <div class=\"alert alert-danger\">\n                                    <ul>\n                                        @foreach ($errors->all() as $error)\n                                            <li>{{ $error }}</li>\n                                        @endforeach\n                                    </ul>\n                                </div>\n                            @endif\n\n                            <!-- Adding / Editing -->\n                            @php\n                                $dataTypeRows = $dataType->{($edit ? 'editRows' : 'addRows' )};\n                            @endphp\n\n                            @foreach($dataTypeRows as $row)\n                                <!-- GET THE DISPLAY OPTIONS -->\n                                @php\n                                    $display_options = $row->details->display ?? NULL;\n                                    if ($dataTypeContent->{$row->field.'_'.($edit ? 'edit' : 'add')}) {\n                                        $dataTypeContent->{$row->field} = $dataTypeContent->{$row->field.'_'.($edit ? 'edit' : 'add')};\n                                    }\n                                @endphp\n                                @if (isset($row->details->legend) && isset($row->details->legend->text))\n                                    <legend class=\"text-{{ $row->details->legend->align ?? 'center' }}\" style=\"background-color: {{ $row->details->legend->bgcolor ?? '#f0f0f0' }};padding: 5px;\">{{ $row->details->legend->text }}</legend>\n                                @endif\n\n                                <div class=\"form-group @if($row->type == 'hidden') hidden @endif col-md-{{ $display_options->width ?? 12 }} {{ $errors->has($row->field) ? 'has-error' : '' }}\" @if(isset($display_options->id)){{ \"id=$display_options->id\" }}@endif>\n                                    {{ $row->slugify }}\n                                    <label class=\"control-label\" for=\"name\">{{ $row->getTranslatedAttribute('display_name') }}</label>\n                                    @include('voyager::multilingual.input-hidden-bread-edit-add')\n                                    @if ($add && isset($row->details->view_add))\n                                        @include($row->details->view_add, ['row' => $row, 'dataType' => $dataType, 'dataTypeContent' => $dataTypeContent, 'content' => $dataTypeContent->{$row->field}, 'view' => 'add', 'options' => $row->details])\n                                    @elseif ($edit && isset($row->details->view_edit))\n                                        @include($row->details->view_edit, ['row' => $row, 'dataType' => $dataType, 'dataTypeContent' => $dataTypeContent, 'content' => $dataTypeContent->{$row->field}, 'view' => 'edit', 'options' => $row->details])\n                                    @elseif (isset($row->details->view))\n                                        @include($row->details->view, ['row' => $row, 'dataType' => $dataType, 'dataTypeContent' => $dataTypeContent, 'content' => $dataTypeContent->{$row->field}, 'action' => ($edit ? 'edit' : 'add'), 'view' => ($edit ? 'edit' : 'add'), 'options' => $row->details])\n                                    @elseif ($row->type == 'relationship')\n                                        @include('voyager::formfields.relationship', ['options' => $row->details])\n                                    @else\n                                        {!! app('voyager')->formField($row, $dataType, $dataTypeContent) !!}\n                                    @endif\n\n                                    @foreach (app('voyager')->afterFormFields($row, $dataType, $dataTypeContent) as $after)\n                                        {!! $after->handle($row, $dataType, $dataTypeContent) !!}\n                                    @endforeach\n                                    @if ($errors->has($row->field))\n                                        @foreach ($errors->get($row->field) as $error)\n                                            <span class=\"help-block\">{{ $error }}</span>\n                                        @endforeach\n                                    @endif\n                                </div>\n                            @endforeach\n\n                        </div><!-- panel-body -->\n\n                        <div class=\"panel-footer\">\n                            @section('submit-buttons')\n                                <button type=\"submit\" class=\"btn btn-primary save\">{{ __('voyager::generic.save') }}</button>\n                            @stop\n                            @yield('submit-buttons')\n                        </div>\n                    </form>\n\n                    <div style=\"display:none\">\n                        <input type=\"hidden\" id=\"upload_url\" value=\"{{ route('voyager.upload') }}\">\n                        <input type=\"hidden\" id=\"upload_type_slug\" value=\"{{ $dataType->slug }}\">\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"modal fade modal-danger\" id=\"confirm_delete_modal\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\"\n                            aria-hidden=\"true\">&times;</button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-warning\"></i> {{ __('voyager::generic.are_you_sure') }}</h4>\n                </div>\n\n                <div class=\"modal-body\">\n                    <h4>{{ __('voyager::generic.are_you_sure_delete') }} '<span class=\"confirm_delete_name\"></span>'</h4>\n                </div>\n\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                    <button type=\"button\" class=\"btn btn-danger\" id=\"confirm_delete\">{{ __('voyager::generic.delete_confirm') }}</button>\n                </div>\n            </div>\n        </div>\n    </div>\n    <!-- End Delete File Modal -->\n@stop\n\n@section('javascript')\n    <script>\n        var params = {};\n        var $file;\n\n        function deleteHandler(tag, isMulti) {\n          return function() {\n            $file = $(this).siblings(tag);\n\n            params = {\n                slug:   '{{ $dataType->slug }}',\n                filename:  $file.data('file-name'),\n                id:     $file.data('id'),\n                field:  $file.parent().data('field-name'),\n                multi: isMulti,\n                _token: '{{ csrf_token() }}'\n            }\n\n            $('.confirm_delete_name').text(params.filename);\n            $('#confirm_delete_modal').modal('show');\n          };\n        }\n\n        $('document').ready(function () {\n            $('.toggleswitch').bootstrapToggle();\n\n            //Init datepicker for date fields if data-datepicker attribute defined\n            //or if browser does not handle date inputs\n            $('.form-group input[type=date]').each(function (idx, elt) {\n                if (elt.hasAttribute('data-datepicker')) {\n                    elt.type = 'text';\n                    $(elt).datetimepicker($(elt).data('datepicker'));\n                } else if (elt.type != 'date') {\n                    elt.type = 'text';\n                    $(elt).datetimepicker({\n                        format: 'L',\n                        extraFormats: [ 'YYYY-MM-DD' ]\n                    }).datetimepicker($(elt).data('datepicker'));\n                }\n            });\n\n            @if ($isModelTranslatable)\n                $('.side-body').multilingual({\"editing\": true});\n            @endif\n\n            $('.side-body input[data-slug-origin]').each(function(i, el) {\n                $(el).slugify();\n            });\n\n            $('.form-group').on('click', '.remove-multi-image', deleteHandler('img', true));\n            $('.form-group').on('click', '.remove-single-image', deleteHandler('img', false));\n            $('.form-group').on('click', '.remove-multi-file', deleteHandler('a', true));\n            $('.form-group').on('click', '.remove-single-file', deleteHandler('a', false));\n\n            $('#confirm_delete').on('click', function(){\n                $.post('{{ route('voyager.'.$dataType->slug.'.media.remove') }}', params, function (response) {\n                    if ( response\n                        && response.data\n                        && response.data.status\n                        && response.data.status == 200 ) {\n\n                        toastr.success(response.data.message);\n                        $file.parent().fadeOut(300, function() { $(this).remove(); })\n                    } else {\n                        toastr.error(\"Error removing file.\");\n                    }\n                });\n\n                $('#confirm_delete_modal').modal('hide');\n            });\n            $('[data-toggle=\"tooltip\"]').tooltip();\n        });\n    </script>\n@stop\n"
  },
  {
    "path": "resources/views/bread/order.blade.php",
    "content": "@extends('voyager::master')\n\n@section('page_title', $dataType->getTranslatedAttribute('display_name_plural') . ' ' . __('voyager::bread.order'))\n\n@section('page_header')\n<h1 class=\"page-title\">\n    <i class=\"voyager-list\"></i>{{ $dataType->getTranslatedAttribute('display_name_plural') }} {{ __('voyager::bread.order') }}\n</h1>\n@stop\n\n@section('content')\n<div class=\"page-content container-fluid\">\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"panel panel-bordered\">\n                <div class=\"panel-heading\">\n                    <p class=\"panel-title\" style=\"color:#777\">{{ __('voyager::generic.drag_drop_info') }}</p>\n                </div>\n\n                <div class=\"panel-body\" style=\"padding:30px;\">\n                    <div class=\"dd\">\n                        <ol class=\"dd-list\">\n                            @foreach ($results as $result)\n                            <li class=\"dd-item\" data-id=\"{{ $result->getKey() }}\">\n                                <div class=\"dd-handle\" style=\"height:inherit\">\n                                    @if (isset($dataRow->details->view_order))\n                                        @include($dataRow->details->view_order, ['row' => $dataRow, 'dataType' => $dataType, 'dataTypeContent' => $result, 'view' => 'order', 'content' => $result->{$display_column}])\n                                    @elseif (isset($dataRow->details->view))\n                                        @include($dataRow->details->view, ['row' => $dataRow, 'dataType' => $dataType, 'dataTypeContent' => $result, 'content' => $result->{$display_column}, 'action' => 'order'])\n                                    @elseif($dataRow->type == 'image')\n                                        <span>\n                                            <img src=\"@if( !filter_var($result->{$display_column}, FILTER_VALIDATE_URL)){{ Voyager::image( $result->{$display_column} ) }}@else{{ $result->{$display_column} }}@endif\" style=\"height:100px\">\n                                        </span>\n                                    @else\n                                        <span>{{ $result->{$display_column} }}</span>\n                                    @endif\n                                </div>\n                            </li>\n                            @endforeach\n                        </ol>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n@stop\n\n@section('javascript')\n\n<script>\n$(document).ready(function () {\n    $('.dd').nestable({\n        maxDepth: 1\n    });\n\n    /**\n    * Reorder items\n    */\n    $('.dd').on('change', function (e) {\n        $.post('{{ route('voyager.'.$dataType->slug.'.order') }}', {\n            order: JSON.stringify($('.dd').nestable('serialize')),\n            _token: '{{ csrf_token() }}'\n        }, function (data) {\n            toastr.success(\"{{ __('voyager::bread.updated_order') }}\");\n        });\n    });\n});\n</script>\n@stop\n"
  },
  {
    "path": "resources/views/bread/partials/actions.blade.php",
    "content": "@if($data)\n    @php\n        // need to recreate object because policy might depend on record data\n        $class = get_class($action);\n        $action = new $class($dataType, $data);\n    @endphp\n    @can ($action->getPolicy(), $data)\n        @if ($action->shouldActionDisplayOnRow($data))\n            <a href=\"{{ $action->getRoute($dataType->name) }}\" title=\"{{ $action->getTitle() }}\" {!! $action->convertAttributesToHtml() !!}>\n                <i class=\"{{ $action->getIcon() }}\"></i> <span class=\"hidden-xs hidden-sm\">{{ $action->getTitle() }}</span>\n            </a>\n        @endif\n    @endcan\n@elseif (method_exists($action, 'massAction'))\n    <form method=\"post\" action=\"{{ route('voyager.'.$dataType->slug.'.action') }}\" style=\"display:inline\">\n        {{ csrf_field() }}\n        <button type=\"submit\" {!! $action->convertAttributesToHtml() !!}><i class=\"{{ $action->getIcon() }}\"></i>  {{ $action->getTitle() }}</button>\n        <input type=\"hidden\" name=\"action\" value=\"{{ get_class($action) }}\">\n        <input type=\"hidden\" name=\"ids\" value=\"\" class=\"selected_ids\">\n    </form>\n@endif\n"
  },
  {
    "path": "resources/views/bread/read.blade.php",
    "content": "@extends('voyager::master')\n\n@section('page_title', __('voyager::generic.view').' '.$dataType->getTranslatedAttribute('display_name_singular'))\n\n@section('page_header')\n    <h1 class=\"page-title\">\n        <i class=\"{{ $dataType->icon }}\"></i> {{ __('voyager::generic.viewing') }} {{ ucfirst($dataType->getTranslatedAttribute('display_name_singular')) }} &nbsp;\n\n        @can('edit', $dataTypeContent)\n            <a href=\"{{ route('voyager.'.$dataType->slug.'.edit', $dataTypeContent->getKey()) }}\" class=\"btn btn-info\">\n                <i class=\"glyphicon glyphicon-pencil\"></i> <span class=\"hidden-xs hidden-sm\">{{ __('voyager::generic.edit') }}</span>\n            </a>\n        @endcan\n        @can('delete', $dataTypeContent)\n            @if($isSoftDeleted)\n                <a href=\"{{ route('voyager.'.$dataType->slug.'.restore', $dataTypeContent->getKey()) }}\" title=\"{{ __('voyager::generic.restore') }}\" class=\"btn btn-default restore\" data-id=\"{{ $dataTypeContent->getKey() }}\" id=\"restore-{{ $dataTypeContent->getKey() }}\">\n                    <i class=\"voyager-trash\"></i> <span class=\"hidden-xs hidden-sm\">{{ __('voyager::generic.restore') }}</span>\n                </a>\n            @else\n                <a href=\"javascript:;\" title=\"{{ __('voyager::generic.delete') }}\" class=\"btn btn-danger delete\" data-id=\"{{ $dataTypeContent->getKey() }}\" id=\"delete-{{ $dataTypeContent->getKey() }}\">\n                    <i class=\"voyager-trash\"></i> <span class=\"hidden-xs hidden-sm\">{{ __('voyager::generic.delete') }}</span>\n                </a>\n            @endif\n        @endcan\n        @can('browse', $dataTypeContent)\n        <a href=\"{{ route('voyager.'.$dataType->slug.'.index') }}\" class=\"btn btn-warning\">\n            <i class=\"glyphicon glyphicon-list\"></i> <span class=\"hidden-xs hidden-sm\">{{ __('voyager::generic.return_to_list') }}</span>\n        </a>\n        @endcan\n    </h1>\n    @include('voyager::multilingual.language-selector')\n@stop\n\n@section('content')\n    <div class=\"page-content read container-fluid\">\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n\n                <div class=\"panel panel-bordered\" style=\"padding-bottom:5px;\">\n                    <!-- form start -->\n                    @foreach($dataType->readRows as $row)\n                        @php\n                        if ($dataTypeContent->{$row->field.'_read'}) {\n                            $dataTypeContent->{$row->field} = $dataTypeContent->{$row->field.'_read'};\n                        }\n                        @endphp\n                        <div class=\"panel-heading\" style=\"border-bottom:0;\">\n                            <h3 class=\"panel-title\">{{ $row->getTranslatedAttribute('display_name') }}</h3>\n                        </div>\n\n                        <div class=\"panel-body\" style=\"padding-top:0;\">\n                            @if (isset($row->details->view_read))\n                                @include($row->details->view_read, ['row' => $row, 'dataType' => $dataType, 'dataTypeContent' => $dataTypeContent, 'content' => $dataTypeContent->{$row->field}, 'view' => 'read', 'options' => $row->details])\n                            @elseif (isset($row->details->view))\n                                @include($row->details->view, ['row' => $row, 'dataType' => $dataType, 'dataTypeContent' => $dataTypeContent, 'content' => $dataTypeContent->{$row->field}, 'action' => 'read', 'view' => 'read', 'options' => $row->details])\n                            @elseif($row->type == \"image\")\n                                <img class=\"img-responsive\"\n                                     src=\"{{ filter_var($dataTypeContent->{$row->field}, FILTER_VALIDATE_URL) ? $dataTypeContent->{$row->field} : Voyager::image($dataTypeContent->{$row->field}) }}\">\n                            @elseif($row->type == 'multiple_images')\n                                @if(json_decode($dataTypeContent->{$row->field}))\n                                    @foreach(json_decode($dataTypeContent->{$row->field}) as $file)\n                                        <img class=\"img-responsive\"\n                                             src=\"{{ filter_var($file, FILTER_VALIDATE_URL) ? $file : Voyager::image($file) }}\">\n                                    @endforeach\n                                @else\n                                    <img class=\"img-responsive\"\n                                         src=\"{{ filter_var($dataTypeContent->{$row->field}, FILTER_VALIDATE_URL) ? $dataTypeContent->{$row->field} : Voyager::image($dataTypeContent->{$row->field}) }}\">\n                                @endif\n                            @elseif($row->type == 'relationship')\n                                 @include('voyager::formfields.relationship', ['view' => 'read', 'options' => $row->details])\n                            @elseif($row->type == 'select_dropdown' && property_exists($row->details, 'options') &&\n                                    !empty($row->details->options->{$dataTypeContent->{$row->field}})\n                            )\n                                <?php echo $row->details->options->{$dataTypeContent->{$row->field}};?>\n                            @elseif($row->type == 'select_multiple')\n                                @if(property_exists($row->details, 'relationship'))\n\n                                    @foreach(json_decode($dataTypeContent->{$row->field}) as $item)\n                                        {{ $item->{$row->field}  }}\n                                    @endforeach\n\n                                @elseif(property_exists($row->details, 'options'))\n                                    @if (!empty(json_decode($dataTypeContent->{$row->field})))\n                                        @foreach(json_decode($dataTypeContent->{$row->field}) as $item)\n                                            @if (@$row->details->options->{$item})\n                                                {{ $row->details->options->{$item} . (!$loop->last ? ', ' : '') }}\n                                            @endif\n                                        @endforeach\n                                    @else\n                                        {{ __('voyager::generic.none') }}\n                                    @endif\n                                @endif\n                            @elseif($row->type == 'date' || $row->type == 'timestamp')\n                                @if ( property_exists($row->details, 'format') && !is_null($dataTypeContent->{$row->field}) )\n                                    {{ \\Carbon\\Carbon::parse($dataTypeContent->{$row->field})->formatLocalized($row->details->format) }}\n                                @else\n                                    {{ $dataTypeContent->{$row->field} }}\n                                @endif\n                            @elseif($row->type == 'checkbox')\n                                @if(property_exists($row->details, 'on') && property_exists($row->details, 'off'))\n                                    @if($dataTypeContent->{$row->field})\n                                    <span class=\"label label-info\">{{ $row->details->on }}</span>\n                                    @else\n                                    <span class=\"label label-primary\">{{ $row->details->off }}</span>\n                                    @endif\n                                @else\n                                {{ $dataTypeContent->{$row->field} }}\n                                @endif\n                            @elseif($row->type == 'color')\n                                <span class=\"badge badge-lg\" style=\"background-color: {{ $dataTypeContent->{$row->field} }}\">{{ $dataTypeContent->{$row->field} }}</span>\n                            @elseif($row->type == 'coordinates')\n                                @include('voyager::partials.coordinates')\n                            @elseif($row->type == 'rich_text_box')\n                                @include('voyager::multilingual.input-hidden-bread-read')\n                                {!! $dataTypeContent->{$row->field} !!}\n                            @elseif($row->type == 'file')\n                                @if(json_decode($dataTypeContent->{$row->field}))\n                                    @foreach(json_decode($dataTypeContent->{$row->field}) as $file)\n                                        <a href=\"{{ Storage::disk(config('voyager.storage.disk'))->url($file->download_link) ?: '' }}\">\n                                            {{ $file->original_name ?: '' }}\n                                        </a>\n                                        <br/>\n                                    @endforeach\n                                @elseif($dataTypeContent->{$row->field})\n                                    <a href=\"{{ Storage::disk(config('voyager.storage.disk'))->url($row->field) ?: '' }}\">\n                                        {{ __('voyager::generic.download') }}\n                                    </a>\n                                @endif\n                            @else\n                                @include('voyager::multilingual.input-hidden-bread-read')\n                                <p>{{ $dataTypeContent->{$row->field} }}</p>\n                            @endif\n                        </div><!-- panel-body -->\n                        @if(!$loop->last)\n                            <hr style=\"margin:0;\">\n                        @endif\n                    @endforeach\n\n                </div>\n            </div>\n        </div>\n    </div>\n\n    {{-- Single delete modal --}}\n    <div class=\"modal modal-danger fade\" tabindex=\"-1\" id=\"delete_modal\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"{{ __('voyager::generic.close') }}\"><span aria-hidden=\"true\">&times;</span></button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-trash\"></i> {{ __('voyager::generic.delete_question') }} {{ strtolower($dataType->getTranslatedAttribute('display_name_singular')) }}?</h4>\n                </div>\n                <div class=\"modal-footer\">\n                    <form action=\"{{ route('voyager.'.$dataType->slug.'.index') }}\" id=\"delete_form\" method=\"POST\">\n                        {{ method_field('DELETE') }}\n                        {{ csrf_field() }}\n                        <input type=\"submit\" class=\"btn btn-danger pull-right delete-confirm\"\n                               value=\"{{ __('voyager::generic.delete_confirm') }} {{ strtolower($dataType->getTranslatedAttribute('display_name_singular')) }}\">\n                    </form>\n                    <button type=\"button\" class=\"btn btn-default pull-right\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                </div>\n            </div><!-- /.modal-content -->\n        </div><!-- /.modal-dialog -->\n    </div><!-- /.modal -->\n@stop\n\n@section('javascript')\n    @if ($isModelTranslatable)\n        <script>\n            $(document).ready(function () {\n                $('.side-body').multilingual();\n            });\n        </script>\n    @endif\n    <script>\n        var deleteFormAction;\n        $('.delete').on('click', function (e) {\n            var form = $('#delete_form')[0];\n\n            if (!deleteFormAction) {\n                // Save form action initial value\n                deleteFormAction = form.action;\n            }\n\n            form.action = deleteFormAction.match(/\\/[0-9]+$/)\n                ? deleteFormAction.replace(/([0-9]+$)/, $(this).data('id'))\n                : deleteFormAction + '/' + $(this).data('id');\n\n            $('#delete_modal').modal('show');\n        });\n\n    </script>\n@stop\n"
  },
  {
    "path": "resources/views/compass/includes/commands.blade.php",
    "content": "@if($artisan_output)\n    <pre>\n        <i class=\"close-output voyager-x\">{{ __('voyager::compass.commands.clear_output') }}</i><span class=\"art_out\">{{ __('voyager::compass.commands.command_output') }}:</span>{{ trim(trim($artisan_output,'\"')) }}\n    </pre>\n@endif\n\n@foreach($commands as $command)\n    <div class=\"command\" data-command=\"{{ $command->name }}\">\n        <code>php artisan {{ $command->name }}</code>\n        <small>{{ $command->description }}</small><i class=\"voyager-terminal\"></i>\n        <form action=\"{{ route('voyager.compass.post') }}\" class=\"cmd_form\" method=\"POST\">\n            {{ csrf_field() }}\n            <input type=\"text\" name=\"args\" autofocus class=\"form-control\" placeholder=\"{{ __('voyager::compass.commands.additional_args') }}\">\n            <input type=\"submit\" class=\"btn btn-primary pull-right delete-confirm\"\n                    value=\"{{ __('voyager::compass.commands.run_command') }}\">\n            <input type=\"hidden\" name=\"command\" id=\"hidden_cmd\" value=\"{{ $command->name }}\">\n        </form>\n    </div>\n@endforeach\n"
  },
  {
    "path": "resources/views/compass/includes/fonts.blade.php",
    "content": "<h2>{{ __('voyager::compass.fonts.font_class') }}</h2>\n<ul class=\"glyphs css-mapping\">\n    <li>\n        <div class=\"icon voyager-bread\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-bread\">\n    </li>\n    <li>\n        <div class=\"icon voyager-helm\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-helm\">\n    </li>\n    <li>\n        <div class=\"icon voyager-play\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-play\">\n    </li>\n    <li>\n        <div class=\"icon voyager-activity\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-activity\">\n    </li>\n    <li>\n        <div class=\"icon voyager-company\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-company\">\n    </li>\n    <li>\n        <div class=\"icon voyager-file-text\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-file-text\">\n    </li>\n    <li>\n        <div class=\"icon voyager-folder\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-folder\">\n    </li>\n    <li>\n        <div class=\"icon voyager-paw\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-paw\">\n    </li>\n    <li>\n        <div class=\"icon voyager-sort\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-sort\">\n    </li>\n    <li>\n        <div class=\"icon voyager-sort-asc\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-sort-asc\">\n    </li>\n    <li>\n        <div class=\"icon voyager-sort-desc\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-sort-desc\">\n    </li>\n    <li>\n        <div class=\"icon voyager-handle\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-handle\">\n    </li>\n    <li>\n        <div class=\"icon voyager-hammer\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-hammer\">\n    </li>\n    <li>\n        <div class=\"icon voyager-images\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-images\">\n    </li>\n    <li>\n        <div class=\"icon voyager-categories\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-categories\">\n    </li>\n    <li>\n        <div class=\"icon voyager-group\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-group\">\n    </li>\n    <li>\n        <div class=\"icon voyager-person\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-person\">\n    </li>\n    <li>\n        <div class=\"icon voyager-people\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-people\">\n    </li>\n    <li>\n        <div class=\"icon voyager-power\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-power\">\n    </li>\n    <li>\n        <div class=\"icon voyager-tools\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-tools\">\n    </li>\n    <li>\n        <div class=\"icon voyager-anchor\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-anchor\">\n    </li>\n    <li>\n        <div class=\"icon voyager-double-down\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-double-down\">\n    </li>\n    <li>\n        <div class=\"icon voyager-double-up\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-double-up\">\n    </li>\n    <li>\n        <div class=\"icon voyager-double-left\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-double-left\">\n    </li>\n    <li>\n        <div class=\"icon voyager-double-right\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-double-right\">\n    </li>\n    <li>\n        <div class=\"icon voyager-window-list\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-window-list\">\n    </li>\n    <li>\n        <div class=\"icon voyager-x\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-x\">\n    </li>\n    <li>\n        <div class=\"icon voyager-dot\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-dot\">\n    </li>\n    <li>\n        <div class=\"icon voyager-dot-2\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-dot-2\">\n    </li>\n    <li>\n        <div class=\"icon voyager-dot-3\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-dot-3\">\n    </li>\n    <li>\n        <div class=\"icon voyager-list\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-list\">\n    </li>\n    <li>\n        <div class=\"icon voyager-list-add\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-list-add\">\n    </li>\n    <li>\n        <div class=\"icon voyager-pie-chart\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-pie-chart\">\n    </li>\n    <li>\n        <div class=\"icon voyager-watch\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-watch\">\n    </li>\n    <li>\n        <div class=\"icon voyager-data\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-data\">\n    </li>\n    <li>\n        <div class=\"icon voyager-music\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-music\">\n    </li>\n    <li>\n        <div class=\"icon voyager-settings\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-settings\">\n    </li>\n    <li>\n        <div class=\"icon voyager-video\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-video\">\n    </li>\n    <li>\n        <div class=\"icon voyager-trash\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-trash\">\n    </li>\n    <li>\n        <div class=\"icon voyager-tv\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-tv\">\n    </li>\n    <li>\n        <div class=\"icon voyager-lock\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-lock\">\n    </li>\n    <li>\n        <div class=\"icon voyager-news\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-news\">\n    </li>\n    <li>\n        <div class=\"icon voyager-bag\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-bag\">\n    </li>\n    <li>\n        <div class=\"icon voyager-upload\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-upload\">\n    </li>\n    <li>\n        <div class=\"icon voyager-refresh\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-refresh\">\n    </li>\n    <li>\n        <div class=\"icon voyager-character\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-character\">\n    </li>\n    <li>\n        <div class=\"icon voyager-move\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-move\">\n    </li>\n    <li>\n        <div class=\"icon voyager-paypal\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-paypal\">\n    </li>\n    <li>\n        <div class=\"icon voyager-paper-plane\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-paper-plane\">\n    </li>\n    <li>\n        <div class=\"icon voyager-ticket\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-ticket\">\n    </li>\n    <li>\n        <div class=\"icon voyager-youtube-play\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-youtube-play\">\n    </li>\n    <li>\n        <div class=\"icon voyager-boat\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-boat\">\n    </li>\n    <li>\n        <div class=\"icon voyager-check\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-check\">\n    </li>\n    <li>\n        <div class=\"icon voyager-alarm-clock\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-alarm-clock\">\n    </li>\n    <li>\n        <div class=\"icon voyager-controller\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-controller\">\n    </li>\n    <li>\n        <div class=\"icon voyager-pizza\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-pizza\">\n    </li>\n    <li>\n        <div class=\"icon voyager-backpack\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-backpack\">\n    </li>\n    <li>\n        <div class=\"icon voyager-barbeque\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-barbeque\">\n    </li>\n    <li>\n        <div class=\"icon voyager-bomb\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-bomb\">\n    </li>\n    <li>\n        <div class=\"icon voyager-book-download\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-book-download\">\n    </li>\n    <li>\n        <div class=\"icon voyager-browser\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-browser\">\n    </li>\n    <li>\n        <div class=\"icon voyager-brush\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-brush\">\n    </li>\n    <li>\n        <div class=\"icon voyager-bubble-hear\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-bubble-hear\">\n    </li>\n    <li>\n        <div class=\"icon voyager-polaroid\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-polaroid\">\n    </li>\n    <li>\n        <div class=\"icon voyager-crop\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-crop\">\n    </li>\n    <li>\n        <div class=\"icon voyager-dashboard\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-dashboard\">\n    </li>\n    <li>\n        <div class=\"icon voyager-hotdog\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-hotdog\">\n    </li>\n    <li>\n        <div class=\"icon voyager-laptop\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-laptop\">\n    </li>\n    <li>\n        <div class=\"icon voyager-paint-bucket\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-paint-bucket\">\n    </li>\n    <li>\n        <div class=\"icon voyager-photo\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-photo\">\n    </li>\n    <li>\n        <div class=\"icon voyager-photos\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-photos\">\n    </li>\n    <li>\n        <div class=\"icon voyager-receipt\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-receipt\">\n    </li>\n    <li>\n        <div class=\"icon voyager-buy\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-buy\">\n    </li>\n    <li>\n        <div class=\"icon voyager-lightbulb\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-lightbulb\">\n    </li>\n    <li>\n        <div class=\"icon voyager-archive\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-archive\">\n    </li>\n    <li>\n        <div class=\"icon voyager-paperclip\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-paperclip\">\n    </li>\n    <li>\n        <div class=\"icon voyager-warning\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-warning\">\n    </li>\n    <li>\n        <div class=\"icon voyager-basket\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-basket\">\n    </li>\n    <li>\n        <div class=\"icon voyager-bell\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-bell\">\n    </li>\n    <li>\n        <div class=\"icon voyager-book\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-book\">\n    </li>\n    <li>\n        <div class=\"icon voyager-chat\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-chat\">\n    </li>\n    <li>\n        <div class=\"icon voyager-down-circled\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-down-circled\">\n    </li>\n    <li>\n        <div class=\"icon voyager-location\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-location\">\n    </li>\n    <li>\n        <div class=\"icon voyager-forward\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-forward\">\n    </li>\n    <li>\n        <div class=\"icon voyager-flashlight\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-flashlight\">\n    </li>\n    <li>\n        <div class=\"icon voyager-trophy\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-trophy\">\n    </li>\n    <li>\n        <div class=\"icon voyager-diamond\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-diamond\">\n    </li>\n    <li>\n        <div class=\"icon voyager-credit-cards\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-credit-cards\">\n    </li>\n    <li>\n        <div class=\"icon voyager-shop\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-shop\">\n    </li>\n    <li>\n        <div class=\"icon voyager-sound\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-sound\">\n    </li>\n    <li>\n        <div class=\"icon voyager-study\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-study\">\n    </li>\n    <li>\n        <div class=\"icon voyager-pen\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-pen\">\n    </li>\n    <li>\n        <div class=\"icon voyager-params\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-params\">\n    </li>\n    <li>\n        <div class=\"icon voyager-fire\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-fire\">\n    </li>\n    <li>\n        <div class=\"icon voyager-dollar\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-dollar\">\n    </li>\n    <li>\n        <div class=\"icon voyager-bulb\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-bulb\">\n    </li>\n    <li>\n        <div class=\"icon voyager-lab\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-lab\">\n    </li>\n    <li>\n        <div class=\"icon voyager-cup\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-cup\">\n    </li>\n    <li>\n        <div class=\"icon voyager-megaphone\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-megaphone\">\n    </li>\n    <li>\n        <div class=\"icon voyager-heart\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-heart\">\n    </li>\n    <li>\n        <div class=\"icon voyager-bubble\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-bubble\">\n    </li>\n    <li>\n        <div class=\"icon voyager-search\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-search\">\n    </li>\n    <li>\n        <div class=\"icon voyager-tag\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-tag\">\n    </li>\n    <li>\n        <div class=\"icon voyager-world\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-world\">\n    </li>\n    <li>\n        <div class=\"icon voyager-camera\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-camera\">\n    </li>\n    <li>\n        <div class=\"icon voyager-calendar\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-calendar\">\n    </li>\n    <li>\n        <div class=\"icon voyager-mail\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-mail\">\n    </li>\n    <li>\n        <div class=\"icon voyager-phone\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-phone\">\n    </li>\n    <li>\n        <div class=\"icon voyager-star\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-star\">\n    </li>\n    <li>\n        <div class=\"icon voyager-star-half\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-star-half\">\n    </li>\n    <li>\n        <div class=\"icon voyager-star-half-1\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-star-half-1\">\n    </li>\n    <li>\n        <div class=\"icon voyager-star-two\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-star-two\">\n    </li>\n    <li>\n        <div class=\"icon voyager-medal-rank-star\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-medal-rank-star\">\n    </li>\n    <li>\n        <div class=\"icon voyager-facebook\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-facebook\">\n    </li>\n    <li>\n        <div class=\"icon voyager-google-plus\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-google-plus\">\n    </li>\n    <li>\n        <div class=\"icon voyager-twitter\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-twitter\">\n    </li>\n    <li>\n        <div class=\"icon voyager-github\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-github\">\n    </li>\n    <li>\n        <div class=\"icon voyager-code\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-code\">\n    </li>\n    <li>\n        <div class=\"icon voyager-pie-graph\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-pie-graph\">\n    </li>\n    <li>\n        <div class=\"icon voyager-javascript\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-javascript\">\n    </li>\n    <li>\n        <div class=\"icon voyager-wand\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-wand\">\n    </li>\n    <li>\n        <div class=\"icon voyager-wineglass\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-wineglass\">\n    </li>\n    <li>\n        <div class=\"icon voyager-milestone\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-milestone\">\n    </li>\n    <li>\n        <div class=\"icon voyager-terminal\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-terminal\">\n    </li>\n    <li>\n        <div class=\"icon voyager-plug\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-plug\">\n    </li>\n    <li>\n        <div class=\"icon voyager-gift\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-gift\">\n    </li>\n    <li>\n        <div class=\"icon voyager-markdown\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-markdown\">\n    </li>\n    <li>\n        <div class=\"icon voyager-beer\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-beer\">\n    </li>\n    <li>\n        <div class=\"icon voyager-credit-card\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-credit-card\">\n    </li>\n    <li>\n        <div class=\"icon voyager-bolt\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-bolt\">\n    </li>\n    <li>\n        <div class=\"icon voyager-external\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-external\">\n    </li>\n    <li>\n        <div class=\"icon voyager-magnet\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-magnet\">\n    </li>\n    <li>\n        <div class=\"icon voyager-certificate\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-certificate\">\n    </li>\n    <li>\n        <div class=\"icon voyager-cloud-download\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-cloud-download\">\n    </li>\n    <li>\n        <div class=\"icon voyager-campfire\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-campfire\">\n    </li>\n    <li>\n        <div class=\"icon voyager-new\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-new\">\n    </li>\n    <li>\n        <div class=\"icon voyager-skull\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-skull\">\n    </li>\n    <li>\n        <div class=\"icon voyager-telephone\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-telephone\">\n    </li>\n    <li>\n        <div class=\"icon voyager-trees\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-trees\">\n    </li>\n    <li>\n        <div class=\"icon voyager-bar-chart\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-bar-chart\">\n    </li>\n    <li>\n        <div class=\"icon voyager-check-circle\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-check-circle\">\n    </li>\n    <li>\n        <div class=\"icon voyager-exclamation\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-exclamation\">\n    </li>\n    <li>\n        <div class=\"icon voyager-font\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-font\">\n    </li>\n    <li>\n        <div class=\"icon voyager-puzzle\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-puzzle\">\n    </li>\n    <li>\n        <div class=\"icon voyager-smile\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-smile\">\n    </li>\n    <li>\n        <div class=\"icon voyager-frown\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-frown\">\n    </li>\n    <li>\n        <div class=\"icon voyager-meh\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-meh\">\n    </li>\n    <li>\n        <div class=\"icon voyager-leaf\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-leaf\">\n    </li>\n    <li>\n        <div class=\"icon voyager-info-circled\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-info-circled\">\n    </li>\n    <li>\n        <div class=\"icon voyager-underline\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-underline\">\n    </li>\n    <li>\n        <div class=\"icon voyager-wallet\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-wallet\">\n    </li>\n    <li>\n        <div class=\"icon voyager-truck\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-truck\">\n    </li>\n    <li>\n        <div class=\"icon voyager-eye\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-eye\">\n    </li>\n    <li>\n        <div class=\"icon voyager-sun\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-sun\">\n    </li>\n    <li>\n        <div class=\"icon voyager-barbell\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-barbell\">\n    </li>\n    <li>\n        <div class=\"icon voyager-bookmark\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-bookmark\">\n    </li>\n    <li>\n        <div class=\"icon voyager-volume-up\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-volume-up\">\n    </li>\n    <li>\n        <div class=\"icon voyager-volume-down\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-volume-down\">\n    </li>\n    <li>\n        <div class=\"icon voyager-wifi\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-wifi\">\n    </li>\n    <li>\n        <div class=\"icon voyager-pause\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-pause\">\n    </li>\n    <li>\n        <div class=\"icon voyager-resize-full\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-resize-full\">\n    </li>\n    <li>\n        <div class=\"icon voyager-resize-small\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-resize-small\">\n    </li>\n    <li>\n        <div class=\"icon voyager-download\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-download\">\n    </li>\n    <li>\n        <div class=\"icon voyager-droplet\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-droplet\">\n    </li>\n    <li>\n        <div class=\"icon voyager-umbrella\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-umbrella\">\n    </li>\n    <li>\n        <div class=\"icon voyager-harddrive\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-harddrive\">\n    </li>\n    <li>\n        <div class=\"icon voyager-css3\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-css3\">\n    </li>\n    <li>\n        <div class=\"icon voyager-html5\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-html5\">\n    </li>\n    <li>\n        <div class=\"icon voyager-tree\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-tree\">\n    </li>\n    <li>\n        <div class=\"icon voyager-file-code\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-file-code\">\n    </li>\n    <li>\n        <div class=\"icon voyager-bug\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-bug\">\n    </li>\n    <li>\n        <div class=\"icon voyager-rocket\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-rocket\">\n    </li>\n    <li>\n        <div class=\"icon voyager-key\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-key\">\n    </li>\n    <li>\n        <div class=\"icon voyager-question\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-question\">\n    </li>\n    <li>\n        <div class=\"icon voyager-cursor\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-cursor\">\n    </li>\n    <li>\n        <div class=\"icon voyager-lifebuoy\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-lifebuoy\">\n    </li>\n    <li>\n        <div class=\"icon voyager-thumbs-up\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-thumbs-up\">\n    </li>\n    <li>\n        <div class=\"icon voyager-thumb-tack\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-thumb-tack\">\n    </li>\n    <li>\n        <div class=\"icon voyager-edit\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-edit\">\n    </li>\n    <li>\n        <div class=\"icon voyager-angle-down\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-angle-down\">\n    </li>\n    <li>\n        <div class=\"icon voyager-angle-left\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-angle-left\">\n    </li>\n    <li>\n        <div class=\"icon voyager-angle-right\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-angle-right\">\n    </li>\n    <li>\n        <div class=\"icon voyager-angle-up\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-angle-up\">\n    </li>\n    <li>\n        <div class=\"icon voyager-home\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-home\">\n    </li>\n    <li>\n        <div class=\"icon voyager-pirate-swords\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-pirate-swords\">\n    </li>\n    <li>\n        <div class=\"icon voyager-pirate\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-pirate\">\n    </li>\n    <li>\n        <div class=\"icon voyager-rum\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-rum\">\n    </li>\n    <li>\n        <div class=\"icon voyager-cannon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-cannon\">\n    </li>\n    <li>\n        <div class=\"icon voyager-hook\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-hook\">\n    </li>\n    <li>\n        <div class=\"icon voyager-kraken\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-kraken\">\n    </li>\n    <li>\n        <div class=\"icon voyager-lighthouse\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-lighthouse\">\n    </li>\n    <li>\n        <div class=\"icon voyager-pirate-hat\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-pirate-hat\">\n    </li>\n    <li>\n        <div class=\"icon voyager-rum-1\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-rum-1\">\n    </li>\n    <li>\n        <div class=\"icon voyager-ship\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-ship\">\n    </li>\n    <li>\n        <div class=\"icon voyager-treasure\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-treasure\">\n    </li>\n    <li>\n        <div class=\"icon voyager-treasure-open\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-treasure-open\">\n    </li>\n    <li>\n        <div class=\"icon voyager-whale\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-whale\">\n    </li>\n    <li>\n        <div class=\"icon voyager-compass\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-compass\">\n    </li>\n    <li>\n        <div class=\"icon voyager-logbook\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-logbook\">\n    </li>\n    <li>\n        <div class=\"icon voyager-plus\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-plus\">\n    </li>\n    <li>\n        <div class=\"icon voyager-documentation\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-documentation\">\n    </li>\n    <li>\n        <div class=\"icon voyager-belt\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-belt\">\n    </li>\n    <li>\n        <div class=\"icon voyager-zoom-in\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-zoom-in\">\n    </li>\n    <li>\n        <div class=\"icon voyager-zoom-out\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-zoom-out\">\n    </li>\n    <li>\n        <div class=\"icon voyager-scissors\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-scissors\">\n    </li>\n    <li>\n        <div class=\"icon voyager-github-icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"voyager-github-icon\">\n    </li>\n</ul>\n\n<h2>{{ __('voyager::compass.fonts.font_character') }}</h2>\n<ul class=\"glyphs character-mapping\">\n    <li>\n        <div data-icon=\"a\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"a\">\n    </li>\n    <li>\n        <div data-icon=\"b\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"b\">\n    </li>\n    <li>\n        <div data-icon=\"c\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"c\">\n    </li>\n    <li>\n        <div data-icon=\"d\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"d\">\n    </li>\n    <li>\n        <div data-icon=\"e\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"e\">\n    </li>\n    <li>\n        <div data-icon=\"f\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"f\">\n    </li>\n    <li>\n        <div data-icon=\"g\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"g\">\n    </li>\n    <li>\n        <div data-icon=\"h\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"h\">\n    </li>\n    <li>\n        <div data-icon=\"o\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"o\">\n    </li>\n    <li>\n        <div data-icon=\"p\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"p\">\n    </li>\n    <li>\n        <div data-icon=\"q\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"q\">\n    </li>\n    <li>\n        <div data-icon=\"m\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"m\">\n    </li>\n    <li>\n        <div data-icon=\"n\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"n\">\n    </li>\n    <li>\n        <div data-icon=\"i\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"i\">\n    </li>\n    <li>\n        <div data-icon=\"j\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"j\">\n    </li>\n    <li>\n        <div data-icon=\"k\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"k\">\n    </li>\n    <li>\n        <div data-icon=\"s\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"s\">\n    </li>\n    <li>\n        <div data-icon=\"t\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"t\">\n    </li>\n    <li>\n        <div data-icon=\"u\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"u\">\n    </li>\n    <li>\n        <div data-icon=\"v\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"v\">\n    </li>\n    <li>\n        <div data-icon=\"w\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"w\">\n    </li>\n    <li>\n        <div data-icon=\"x\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"x\">\n    </li>\n    <li>\n        <div data-icon=\"y\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"y\">\n    </li>\n    <li>\n        <div data-icon=\"z\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"z\">\n    </li>\n    <li>\n        <div data-icon=\"A\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"A\">\n    </li>\n    <li>\n        <div data-icon=\"B\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"B\">\n    </li>\n    <li>\n        <div data-icon=\"C\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"C\">\n    </li>\n    <li>\n        <div data-icon=\"D\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"D\">\n    </li>\n    <li>\n        <div data-icon=\"E\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"E\">\n    </li>\n    <li>\n        <div data-icon=\"F\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"F\">\n    </li>\n    <li>\n        <div data-icon=\"G\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"G\">\n    </li>\n    <li>\n        <div data-icon=\"H\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"H\">\n    </li>\n    <li>\n        <div data-icon=\"I\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"I\">\n    </li>\n    <li>\n        <div data-icon=\"J\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"J\">\n    </li>\n    <li>\n        <div data-icon=\"K\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"K\">\n    </li>\n    <li>\n        <div data-icon=\"L\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"L\">\n    </li>\n    <li>\n        <div data-icon=\"N\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"N\">\n    </li>\n    <li>\n        <div data-icon=\"O\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"O\">\n    </li>\n    <li>\n        <div data-icon=\"P\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"P\">\n    </li>\n    <li>\n        <div data-icon=\"Q\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"Q\">\n    </li>\n    <li>\n        <div data-icon=\"R\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"R\">\n    </li>\n    <li>\n        <div data-icon=\"M\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"M\">\n    </li>\n    <li>\n        <div data-icon=\"S\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"S\">\n    </li>\n    <li>\n        <div data-icon=\"T\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"T\">\n    </li>\n    <li>\n        <div data-icon=\"U\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"U\">\n    </li>\n    <li>\n        <div data-icon=\"W\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"W\">\n    </li>\n    <li>\n        <div data-icon=\"X\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"X\">\n    </li>\n    <li>\n        <div data-icon=\"V\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"V\">\n    </li>\n    <li>\n        <div data-icon=\"Y\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"Y\">\n    </li>\n    <li>\n        <div data-icon=\"Z\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"Z\">\n    </li>\n    <li>\n        <div data-icon=\"0\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"0\">\n    </li>\n    <li>\n        <div data-icon=\"1\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"1\">\n    </li>\n    <li>\n        <div data-icon=\"l\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"l\">\n    </li>\n    <li>\n        <div data-icon=\"2\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"2\">\n    </li>\n    <li>\n        <div data-icon=\"4\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"4\">\n    </li>\n    <li>\n        <div data-icon=\"5\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"5\">\n    </li>\n    <li>\n        <div data-icon=\"6\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"6\">\n    </li>\n    <li>\n        <div data-icon=\"7\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"7\">\n    </li>\n    <li>\n        <div data-icon=\"8\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"8\">\n    </li>\n    <li>\n        <div data-icon=\"9\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"9\">\n    </li>\n    <li>\n        <div data-icon=\"!\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"!\">\n    </li>\n    <li>\n        <div data-icon=\"&#34;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&quot;\">\n    </li>\n    <li>\n        <div data-icon=\"#\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"#\">\n    </li>\n    <li>\n        <div data-icon=\"$\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"$\">\n    </li>\n    <li>\n        <div data-icon=\"&\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;\">\n    </li>\n    <li>\n        <div data-icon=\"'\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&#39;\">\n    </li>\n    <li>\n        <div data-icon=\"(\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"(\">\n    </li>\n    <li>\n        <div data-icon=\")\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\")\">\n    </li>\n    <li>\n        <div data-icon=\",\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\",\">\n    </li>\n    <li>\n        <div data-icon=\"-\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"-\">\n    </li>\n    <li>\n        <div data-icon=\".\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\".\">\n    </li>\n    <li>\n        <div data-icon=\"/\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"/\">\n    </li>\n    <li>\n        <div data-icon=\":\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\":\">\n    </li>\n    <li>\n        <div data-icon=\";\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\";\">\n    </li>\n    <li>\n        <div data-icon=\"?\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"?\">\n    </li>\n    <li>\n        <div data-icon=\"@\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"@\">\n    </li>\n    <li>\n        <div data-icon=\"[\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"[\">\n    </li>\n    <li>\n        <div data-icon=\"]\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"]\">\n    </li>\n    <li>\n        <div data-icon=\"^\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"^\">\n    </li>\n    <li>\n        <div data-icon=\"_\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"_\">\n    </li>\n    <li>\n        <div data-icon=\"`\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"`\">\n    </li>\n    <li>\n        <div data-icon=\"{\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"{\">\n    </li>\n    <li>\n        <div data-icon=\"}\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"}\">\n    </li>\n    <li>\n        <div data-icon=\"~\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"~\">\n    </li>\n    <li>\n        <div data-icon=\"\\\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"\\\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe001;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe001;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe002;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe002;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe003;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe003;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe004;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe004;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe005;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe005;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe006;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe006;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe007;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe007;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe008;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe008;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe009;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe009;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe00a;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe00a;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe00b;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe00b;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe00c;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe00c;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe00d;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe00d;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe00e;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe00e;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe00f;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe00f;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe011;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe011;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe012;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe012;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe013;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe013;\">\n    </li>\n    <li>\n        <div data-icon=\"%\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"%\">\n    </li>\n    <li>\n        <div data-icon=\"*\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"*\">\n    </li>\n    <li>\n        <div data-icon=\"|\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"|\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe014;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe014;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe015;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe015;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe016;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe016;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe017;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe017;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe018;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe018;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe019;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe019;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe01a;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe01a;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe01b;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe01b;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe01c;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe01c;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe01d;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe01d;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe01e;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe01e;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe01f;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe01f;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe020;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe020;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe021;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe021;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe022;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe022;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe023;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe023;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe024;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe024;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe025;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe025;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe026;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe026;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe027;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe027;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe028;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe028;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe029;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe029;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe02a;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe02a;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe02b;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe02b;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe02c;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe02c;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe02d;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe02d;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe02e;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe02e;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe02f;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe02f;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe030;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe030;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe031;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe031;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe032;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe032;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe033;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe033;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe034;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe034;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe035;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe035;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe036;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe036;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe037;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe037;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe03a;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe03a;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe03b;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe03b;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe03c;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe03c;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe03d;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe03d;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe03e;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe03e;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe03f;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe03f;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe040;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe040;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe041;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe041;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe042;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe042;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe043;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe043;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe044;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe044;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe045;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe045;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe04a;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe04a;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe04c;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe04c;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe04d;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe04d;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe04e;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe04e;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe04f;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe04f;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe053;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe053;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe054;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe054;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe055;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe055;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe056;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe056;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe057;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe057;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe058;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe058;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe059;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe059;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe05a;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe05a;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe05b;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe05b;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe05e;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe05e;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe061;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe061;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe062;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe062;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe063;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe063;\">\n    </li>\n    <li>\n        <div data-icon=\"3\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"3\">\n    </li>\n    <li>\n        <div data-icon=\"+\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"+\">\n    </li>\n    <li>\n        <div data-icon=\"<\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&lt;\">\n    </li>\n    <li>\n        <div data-icon=\"=\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"=\">\n    </li>\n    <li>\n        <div data-icon=\">\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&gt;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe000;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe000;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe010;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe010;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe038;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe038;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe039;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe039;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe046;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe046;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe047;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe047;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe048;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe048;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe04b;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe04b;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe050;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe050;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe051;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe051;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe049;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe049;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe052;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe052;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe05c;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe05c;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe05d;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe05d;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe05f;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe05f;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe060;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe060;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe064;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe064;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe065;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe065;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe066;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe066;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe067;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe067;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe068;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe068;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe069;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe069;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe06a;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe06a;\">\n    </li>\n    <li>\n        <div data-icon=\"r\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"r\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe06b;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe06b;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe06c;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe06c;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe06d;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe06d;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe06e;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe06e;\">\n    </li>\n    <li>\n        <div data-icon=\"&#xe06f;\" class=\"icon\"></div>\n        <input type=\"text\" readonly=\"readonly\" value=\"&amp;#xe06f;\">\n    </li>\n</ul>\n\n<script>\n(function() {\n    var glyphs, i, len, ref;\n\n    ref = document.getElementsByClassName('glyphs');\n    for (i = 0, len = ref.length; i < len; i++) {\n        glyphs = ref[i];\n        glyphs.addEventListener('click', function(event) {\n            if (event.target.tagName === 'INPUT') {\n                return event.target.select();\n            }\n        });\n    }\n}).call(this);\n</script>\n"
  },
  {
    "path": "resources/views/compass/includes/logs.blade.php",
    "content": "\n<div class=\"col-sm-3 col-md-3 sidebar\">\n  <h3><i class=\"voyager-logbook\"></i> {{ __('voyager::compass.logs.title') }} <small>{{ __('voyager::compass.logs.text') }}.</small></h3>\n  <div class=\"list-group\">\n    @foreach($files as $file)\n      <a href=\"?log={{ base64_encode($file) }}\"\n         class=\"list-group-item @if ($current_file == $file) llv-active @endif\">\n        <i class=\"voyager-file-text\"></i> {{$file}}\n      </a>\n    @endforeach\n  </div>\n</div>\n<div class=\"col-sm-9 col-md-9 table-container\">\n  @if ($logs === null)\n    <div>\n      {{ __('voyager::compass.logs.file_too_big') }}\n    </div>\n  @else\n    <table id=\"table-log\" class=\"table table-striped\">\n      <thead>\n      <tr>\n        <th>{{ __('voyager::compass.logs.level') }}</th>\n        <th>{{ __('voyager::compass.logs.context') }}</th>\n        <th>{{ __('voyager::compass.logs.date') }}</th>\n        <th>{{ __('voyager::compass.logs.content') }}</th>\n      </tr>\n      </thead>\n      <tbody>\n\n      @foreach($logs as $key => $log)\n        <tr data-display=\"stack{{{$key}}}\">\n          <td class=\"text-{{{$log['level_class']}}} level\"><span class=\"glyphicon glyphicon-{{{$log['level_img']}}}-sign\"\n                                                           aria-hidden=\"true\"></span> &nbsp;{{$log['level']}}</td>\n          <td class=\"text\">{{$log['context']}}</td>\n          <td class=\"date\">{{{$log['date']}}}</td>\n          <td class=\"text\">\n            @if ($log['stack']) <a class=\"pull-right expand btn btn-default btn-xs\"\n                                   data-display=\"stack{{{$key}}}\"><span\n                  class=\"glyphicon glyphicon-search\"></span></a>@endif\n            {{{$log['text']}}}\n            @if (isset($log['in_file'])) <br/>{{{$log['in_file']}}}@endif\n            @if ($log['stack'])\n              <div class=\"stack\" id=\"stack{{{$key}}}\"\n                   style=\"display: none; white-space: pre-wrap;\">{{{ trim($log['stack']) }}}\n              </div>@endif\n          </td>\n        </tr>\n      @endforeach\n\n      </tbody>\n    </table>\n  @endif\n  <div>\n    @if($current_file)\n      <a href=\"?download={{ base64_encode($current_file) }}\"><span class=\"glyphicon glyphicon-download-alt\"></span>\n        {{ __('voyager::compass.logs.download_file') }}</a>\n      -\n      <a id=\"delete-log\" href=\"?del={{ base64_encode($current_file) }}\"><span\n            class=\"glyphicon glyphicon-trash\"></span> {{ __('voyager::compass.logs.delete_file') }}</a>\n      @if(count($files) > 1)\n        -\n        <a id=\"delete-all-log\" href=\"?delall=true\"><span class=\"glyphicon glyphicon-trash\"></span> {{ __('voyager::compass.logs.delete_all_files') }}</a>\n      @endif\n    @endif\n  </div>\n</div>\n"
  },
  {
    "path": "resources/views/compass/includes/styles.blade.php",
    "content": "<style type=\"text/css\">\n        .voyager .compass .nav-tabs{\n            background:none;\n            border-bottom:0px;\n        }\n\n        .voyager .compass .nav-tabs > li{\n            margin-bottom:-1px !important;\n        }\n\n        .voyager .compass .nav-tabs a{\n            text-align: center;\n            font-size: 10px;\n            font-weight: normal;\n            background: #f8f8f8;\n            border: 1px solid #f1f1f1;\n            position: relative;\n            top: -1px;\n            border-bottom-left-radius: 0px;\n            border-bottom-right-radius: 0px;\n        }\n\n        .voyager .compass .nav-tabs a i{\n            display: block;\n            font-size: 22px;\n        }\n\n        .tab-content{\n            background:#ffffff;\n            border: 1px solid transparent;\n            border-radius: 4px;\n            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\n        }\n\n        .page-title{\n            height:85px;\n            z-index:2;\n            position:relative;\n        }\n\n        .page-content{\n            z-index:2;\n            position:relative;\n        }\n\n        .page-title p{\n            height: 20px;\n            margin-bottom: 0px;\n            padding-top: 0px;\n            position: relative;\n            top: -10px;\n        }\n\n        .page-title span{\n            font-size: 10px;\n            font-weight: normal;\n            top: -12px;\n            position: relative;\n        }\n\n        #gradient_bg{\n            position: fixed;\n            top: 61px;\n            left: 0px;\n            background-image: url({{ voyager_asset('images/bg.jpg') }});\n            background-size: cover;\n            background-position: 0px;\n            width: 100%;\n            height: 220px;\n            z-index: 0;\n        }\n\n        #gradient_bg::after{\n            content:'';\n            position:absolute;\n            left:0px;\n            top:0px;\n            width:100%;\n            height:100%;\n            /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#f8f8f8+0,f8f8f8+100&0.95+0,1+80 */\n            background: -moz-linear-gradient(top, rgba(248,248,248,0.93) 0%, rgba(248,248,248,1) 80%, rgba(248,248,248,1) 100%); /* FF3.6-15 */\n            background: -webkit-linear-gradient(top, rgba(248,248,248,0.93) 0%,rgba(248,248,248,1) 80%,rgba(248,248,248,1) 100%); /* Chrome10-25,Safari5.1-6 */\n            background: linear-gradient(to bottom, rgba(248,248,248,0.93) 0%,rgba(248,248,248,1) 80%,rgba(248,248,248,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */\n            filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f2f8f8f8', endColorstr='#f8f8f8',GradientType=0 ); /* IE6-9 */\n            z-index:1;\n        }\n\n        .nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover{\n            background:#fff !important;\n            color:#62a8ea !important;\n            border-bottom:1px solid #fff !important;\n            top:-1px !important;\n        }\n\n        .nav-tabs > li a{\n            transition:all 0.3s ease;\n        }\n\n\n        .nav-tabs > li.active > a:focus{\n            top:0px !important;\n        }\n\n        .voyager .compass .nav-tabs > li > a:hover{\n            background-color:#fff !important;\n        }\n\n        .voyager-link{\n            width: 100%;\n            min-height: 220px;\n            display: block;\n            border-radius: 3px;\n            background-position: center center;\n            background-size: cover;\n            position:relative;\n        }\n\n        .voyager-link span.resource_label{\n            text-align: center;\n            color: #fff;\n            display: block;\n            position: absolute;\n            z-index: 9;\n            top: 0px;\n            left: 0px;\n            width: 100%;\n            padding: 0px;\n            opacity:0.8;\n            transition:all 0.3s ease;\n            line-height: 220px;\n            height: 100%;\n        }\n\n        .voyager-link span.resource_label:hover{\n            opacity:1;\n        }\n\n        .voyager-link i{\n            font-size: 48px;\n            margin-right: 0px;\n            position: absolute;\n            width: 70px;\n            height: 70px;\n            padding: 10px;\n            border-radius: 5px;\n            line-height: 55px;\n            display: inline-block;\n            left: 50%;\n            margin-top: -50px;\n            margin-left: -35px;\n            top: 50%;\n            line-height:55px;\n            padding:10px;\n        }\n\n        .voyager-link span.resource_label:hover i{\n            \n            opacity:1;\n            transition:all 0.3s linear;\n        }\n\n        .voyager-link span.copy{\n            position: absolute;\n            font-size: 16px;\n            left: 0px;\n            bottom: 70px;\n            line-height: 12px;\n            text-transform: uppercase;\n            text-align: center;\n            width: 100%;\n        }\n\n        h3 small{\n            font-size: 11px;\n            position: relative;\n            top: -3px;\n            left: 10px;\n            color: #999;\n        }\n\n        .collapsible{\n            margin-top:20px;\n            border:1px solid #f7f7f7;\n            border-radius:3px;\n            display:block;\n        }\n\n        .collapse-head{\n            border-bottom: 1px solid #f7f7f7;\n            border-top-right-radius: 3px;\n            padding:5px 15px;\n            display:block;\n            cursor:pointer;\n            background:#ffffff;\n            position:relative;\n        }\n\n        .collapse-head:after{\n            content:'';\n            clear:both;\n            display:block;\n        }\n\n        .collapse-head h4{\n            float:left;\n        }\n\n        .collapse-head i{\n            font-size: 16px;\n            position: absolute;\n            top: 13px;\n            right:15px;\n            float:right;\n        }\n\n        .collapse-content{\n            padding:15px;\n            background:#fcfcfc;\n        }\n\n        .collapse-content .row{\n            padding-bottom:0px;\n            margin-bottom:0px;\n        }\n\n        .collapse-content .col-md-4{\n            padding-right:0px;\n            margin-bottom:0px;\n        }\n\n        .collapse-content .col-md-4:nth-child(3){\n            padding-right:15px;\n        }\n\n        .voyager-link span.desc{\n            font-size:11px;\n            color:rgba(255, 255, 255, 0.8);\n            width:100%;\n            height:100%;\n            position:absolute;\n            text-align:center;\n        }\n\n        .voyager-angle-down{\n            display:none;\n        }\n\n        .voyager-link::after{\n            content:'';\n            position:absolute;\n            width:100%;\n            height:100%;\nbackground: -moz-linear-gradient(-65deg, rgba(17,17,17,0.7) 0%, rgba(35,35,47,0.7) 50%, rgba(17,17,23,0.7) 51%, rgba(17,17,23,0.7) 100%); /* FF3.6-15 */\nbackground: -webkit-linear-gradient(-65deg, rgba(17,17,17,0.7) 0%,rgba(35,35,47,0.7) 50%,rgba(17,17,23,0.7) 51%,rgba(17,17,23,0.7) 100%); /* Chrome10-25,Safari5.1-6 */\nbackground: linear-gradient(155deg, rgba(17,17,17,0.7) 0%,rgba(35,35,47,0.7) 50%,rgba(17,17,23,0.7) 51%,rgba(17,17,23,0.7) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */\nfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#b3111111', endColorstr='#b3111117',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */\n            left:0px;\n            top:0px;\n            border-radius:3px;\n        }\n\n        #fonts ul{\n            list-style:none;\n            display:flex;\n            padding-left:10px;\n            flex-wrap:wrap;\n            justify-content:flex-start;\n        }\n\n        #fonts .icon{\n            float: left;\n            padding: 2px;\n            font-size: 20px;\n            padding-right: 10px;\n            position: absolute;\n            left: 0px;\n        }\n\n        #fonts li{\n            flex: 1;\n            max-width:212px;\n            padding: 10px;\n            padding-left: 30px;\n            position: relative;\n        }\n\n        #fonts .voyager-angle-down{\n            display:block;\n        }\n\n        #fonts h2{\n            font-size: 12px;\n            padding: 20px;\n            padding-top: 0px;\n            font-weight: bold;\n            padding-left:5px;\n        }\n\n        #fonts h2:nth-child(2){\n            padding-top:20px;\n        }\n\n        #fonts input{\n            border-radius: 3px;\n            border: 1px solid #f1f1f1;\n            padding: 3px 7px;\n        }\n\n        #logs .level .glyphicon{\n            float:left;\n        }\n\n        #logs table.dataTable thead th.sorting:after{\n            top:13px;\n        }\n\n        #logs table.dataTable thead .sorting_asc:after{\n            top:12px;\n        }\n\n        #logs .table-container{\n            margin-top:20px;\n        }\n\n        #logs .list-group{\n            margin-top:42px;\n            border: 1px solid #ececec;\n            border-right: 0px;\n            border-radius: 3px;\n        }\n\n        #logs .list-group-item{\n            background: #ffffff;\n            border: 0px;\n            border-radius: 0px;\n            font-size: 12px;\n            font-weight: normal;\n            color: #97999C;\n            border-right:1px solid #ececec;\n        }\n\n        .voyager #logs .table>thead>tr>th:first-child{\n            border-top-left-radius: 3px;\n        }\n\n        .voyager #logs .table>thead>tr>th:last-child{\n            border-top-right-radius: 3px;\n        }\n\n        #logs .list-group-item i{\n            position: relative;\n            top: 2px;\n            left: -3px;\n        }\n\n        #logs .list-group-item.llv-active{\n            background: #F9FCFF;\n            font-weight: bold;\n            position:relative;\n        }\n\n        #logs .list-group-item:hover{\n            background: #F9FCFF;\n        }\n\n        #logs .list-group-item.llv-active:after, #logs .list-group-item.llv-active:before, #logs .list-group-item:hover:after, #logs .list-group-item:hover:before{\n            content:'';\n            position:absolute;\n            width:100%;\n            height:1px;\n            left:0px;\n            background: rgb(241,241,241); /* Old browsers */\n            background: -moz-linear-gradient(left, rgba(241,241,241,1) 0%, rgba(255,255,255,1) 100%); /* FF3.6-15 */\n            background: -webkit-linear-gradient(left, rgba(241,241,241,1) 0%,rgba(255,255,255,1) 100%); /* Chrome10-25,Safari5.1-6 */\n            background: linear-gradient(to right, rgba(241,241,241,1) 0%,rgba(255,255,255,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */\n            filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f1f1f1', endColorstr='#ffffff',GradientType=1 ); /* IE6-9 */\n        }\n\n        #logs .list-group-item.llv-active:before, #logs .list-group-item:hover:before{\n            top:0px;\n        }\n\n         #logs .list-group-item.llv-active:after, #logs .list-group-item:hover:after{\n            bottom: 0px;\n            z-index: 9;\n         }\n\n         #command_lists{\n            display:flex;\n            flex-wrap:wrap;\n         }\n\n         #commands h3{\n            width: 100%;\n            clear: both;\n            margin-bottom: 20px;\n         }\n\n         #commands h3 i{\n            position: relative;\n            top: 3px;\n         }\n\n         #commands .command{\n            padding: 10px;\n            border: 1px solid #f1f1f1;\n            border-radius: 4px;\n            border-bottom: 2px solid #f5f5f5;\n            cursor:pointer;\n            transition:all 0.3s ease;\n            position:relative;\n            padding-top:30px;\n            padding-right: 52px;\n            flex:1;\n            min-width:275px;\n            margin:10px;\n            margin-left:0px;\n         }\n\n         #commands .command.more_args{\n            padding-bottom:40px;\n         }\n\n         #commands .command i{\n            position: absolute;\n            right: 4px;\n            top: -6px;\n            font-size: 45px;\n         }\n\n         #commands code{\n            color: #549DEA;\n            padding: 4px 7px;\n            font-weight: normal;\n            font-size: 12px;\n            background: #f3f7ff;\n            border: 0px;\n            position: absolute;\n            top: 0px;\n            left: 0px;\n            border-bottom-left-radius: 0px;\n            border-top-right-radius: 0px;\n         }\n\n         #commands .command:hover{\n            border-color:#eaeaea;\n            border-bottom-width:2px;\n         }\n\n         \n\n         .cmd_form{\n            display:none;\n            position:absolute;\n            bottom: 0px;\n            left: 0px;\n            width: 100%;\n        }\n\n        .cmd_form input[type=\"text\"], .cmd_form input[type=\"submit\"]{\n            width:30%;\n            float:left;\n            margin: 0px;\n            font-size: 12px;\n        }\n\n        .cmd_form input[type=\"text\"]{\n            line-height: 30px;\n            padding-top: 0px;\n            padding-bottom: 0px;\n            height: 30px;\n            border-top-right-radius: 0px;\n            border-bottom-right-radius: 0px;\n            border-top-left-radius:0px;\n            padding-left:5px;\n            font-size:12px;\n            width:70%;\n        }\n\n        .cmd_form .form-control.focus, .cmd_form .form-control:focus{\n            border-color:#eee;\n        }\n\n        .cmd_form input[type=\"submit\"]{\n            border-top-right-radius: 0px;\n            border-bottom-left-radius: 0px;\n            border-top-left-radius:0px;\n            font-size: 10px;\n            padding-left: 7px;\n            padding-right: 7px;\n            height: 30px;\n        }\n         \n\n         #commands pre{\n            background:#323A42;\n            color:#fff;\n            width:100%;\n            margin:10px;\n            margin-left:0px;\n            padding: 15px;\n            padding-top: 0px;\n            padding-bottom: 0px;\n            position:relative;\n         }\n\n         #commands .close-output{\n            position:absolute;\n            right:15px;\n            top:15px;\n            color:#ccc;\n            cursor:pointer;\n            padding: 5px 14px;\n            background: rgba(0, 0, 0, 0.2);\n            border-radius: 25px;\n            transition:all 0.3s ease;\n         }\n\n         #commands .close-output:hover{\n            color:#fff;\n            background: rgba(0, 0, 0, 0.3);\n         }\n\n         #commands pre i:before{\n            position:relative;\n            top:3px;\n            right:5px;\n         }\n\n         #commands pre .art_out{\n            width: 100%;\n            display: block;\n            color: #98cb00;\n            margin-bottom:10px;\n         }\n    </style>"
  },
  {
    "path": "resources/views/compass/index.blade.php",
    "content": "@extends('voyager::master')\n\n@section('css')\n\n    @include('voyager::compass.includes.styles')\n\n@stop\n\n@section('page_header')\n    <h1 class=\"page-title\">\n        <i class=\"voyager-compass\"></i>\n        <p> {{ __('voyager::generic.compass') }}</p>\n        <span class=\"page-description\">{{ __('voyager::compass.welcome') }}</span>\n    </h1>\n@stop\n\n@section('content')\n\n    <div id=\"gradient_bg\"></div>\n\n    <div class=\"container-fluid\">\n        @include('voyager::alerts')\n    </div>\n\n    <div class=\"page-content compass container-fluid\">\n        <ul class=\"nav nav-tabs\">\n          <li @if(empty($active_tab) || (isset($active_tab) && $active_tab == 'resources')){!! 'class=\"active\"' !!}@endif><a data-toggle=\"tab\" href=\"#resources\"><i class=\"voyager-book\"></i> {{ __('voyager::compass.resources.title') }}</a></li>\n          <li @if($active_tab == 'commands'){!! 'class=\"active\"' !!}@endif><a data-toggle=\"tab\" href=\"#commands\"><i class=\"voyager-terminal\"></i> {{ __('voyager::compass.commands.title') }}</a></li>\n          <li @if($active_tab == 'logs'){!! 'class=\"active\"' !!}@endif><a data-toggle=\"tab\" href=\"#logs\"><i class=\"voyager-logbook\"></i> {{ __('voyager::compass.logs.title') }}</a></li>\n        </ul>\n\n        <div class=\"tab-content\">\n            <div id=\"resources\" class=\"tab-pane fade in @if(empty($active_tab) || (isset($active_tab) && $active_tab == 'resources')){!! 'active' !!}@endif\">\n                <h3><i class=\"voyager-book\"></i> {{ __('voyager::compass.resources.title') }} <small>{{ __('voyager::compass.resources.text') }}</small></h3>\n\n                <div class=\"collapsible\">\n                    <div class=\"collapse-head\" data-toggle=\"collapse\" data-target=\"#links\" aria-expanded=\"true\" aria-controls=\"links\">\n                        <h4>{{ __('voyager::compass.links.title') }}</h4>\n                        <i class=\"voyager-angle-down\"></i>\n                        <i class=\"voyager-angle-up\"></i>\n                    </div>\n                    <div class=\"collapse-content collapse in\" id=\"links\">\n                        <div class=\"row\">\n                            <div class=\"col-md-6\">\n                                <a href=\"https://voyager-docs.devdojo.com/\" target=\"_blank\" class=\"voyager-link\" style=\"background-image:url('{{ voyager_asset('images/compass/documentation.jpg') }}')\">\n                                    <span class=\"resource_label\"><i class=\"voyager-documentation\"></i> <span class=\"copy\">{{ __('voyager::compass.links.documentation') }}</span></span>\n                                </a>\n                            </div>\n                            <div class=\"col-md-6\">\n                                <a href=\"https://voyager.devdojo.com/\" target=\"_blank\" class=\"voyager-link\" style=\"background-image:url('{{ voyager_asset('images/compass/voyager-home.jpg') }}')\">\n                                    <span class=\"resource_label\"><i class=\"voyager-browser\"></i> <span class=\"copy\">{{ __('voyager::compass.links.voyager_homepage') }}</span></span>\n                                </a>\n                            </div>\n                        </div>\n                    </div>\n              </div>\n\n              <div class=\"collapsible\">\n\n                <div class=\"collapse-head\" data-toggle=\"collapse\" data-target=\"#fonts\" aria-expanded=\"true\" aria-controls=\"fonts\">\n                    <h4>{{ __('voyager::compass.fonts.title') }}</h4>\n                    <i class=\"voyager-angle-down\"></i>\n                    <i class=\"voyager-angle-up\"></i>\n                </div>\n\n                <div class=\"collapse-content collapse in\" id=\"fonts\">\n\n                    @include('voyager::compass.includes.fonts')\n\n                </div>\n\n              </div>\n            </div>\n\n          <div id=\"commands\" class=\"tab-pane fade in @if($active_tab == 'commands'){!! 'active' !!}@endif\">\n            <h3><i class=\"voyager-terminal\"></i> {{ __('voyager::compass.commands.title') }} <small>{{ __('voyager::compass.commands.text') }}</small></h3>\n            <div id=\"command_lists\">\n                @include('voyager::compass.includes.commands')\n            </div>\n\n          </div>\n          <div id=\"logs\" class=\"tab-pane fade in @if($active_tab == 'logs'){!! 'active' !!}@endif\">\n            <div class=\"row\">\n\n                @include('voyager::compass.includes.logs')\n\n            </div>\n          </div>\n        </div>\n\n    </div>\n\n@stop\n@section('javascript')\n    <script>\n        $('document').ready(function(){\n            $('.collapse-head').click(function(){\n                var collapseContainer = $(this).parent();\n                if(collapseContainer.find('.collapse-content').hasClass('in')){\n                    collapseContainer.find('.voyager-angle-up').fadeOut('fast');\n                    collapseContainer.find('.voyager-angle-down').fadeIn('slow');\n                } else {\n                    collapseContainer.find('.voyager-angle-down').fadeOut('fast');\n                    collapseContainer.find('.voyager-angle-up').fadeIn('slow');\n                }\n            });\n        });\n    </script>\n    <!-- JS for commands -->\n    <script>\n\n        $(document).ready(function(){\n            $('.command').click(function(){\n                $(this).find('.cmd_form').slideDown();\n                $(this).addClass('more_args');\n                $(this).find('input[type=\"text\"]').focus();\n            });\n\n            $('.close-output').click(function(){\n                $('#commands pre').slideUp();\n            });\n        });\n\n    </script>\n\n    <!-- JS for logs -->\n    <script>\n      $(document).ready(function () {\n        $('.table-container tr').on('click', function () {\n          $('#' + $(this).data('display')).toggle();\n        });\n        $('#table-log').DataTable({\n          \"order\": [1, 'desc'],\n          \"stateSave\": true,\n          \"language\": {!! json_encode(__('voyager::datatable')) !!},\n          \"stateSaveCallback\": function (settings, data) {\n            window.localStorage.setItem(\"datatable\", JSON.stringify(data));\n          },\n          \"stateLoadCallback\": function (settings) {\n            var data = JSON.parse(window.localStorage.getItem(\"datatable\"));\n            if (data) data.start = 0;\n            return data;\n          }\n        });\n\n        $('#delete-log, #delete-all-log').click(function () {\n          return confirm('{{ __('voyager::generic.are_you_sure') }}');\n        });\n      });\n    </script>\n@stop\n"
  },
  {
    "path": "resources/views/dashboard/navbar.blade.php",
    "content": "<nav class=\"navbar navbar-default navbar-fixed-top navbar-top\">\n    <div class=\"container-fluid\">\n        <div class=\"navbar-header\">\n            <button class=\"hamburger btn-link\">\n                <span class=\"hamburger-inner\"></span>\n            </button>\n            @section('breadcrumbs')\n            <ol class=\"breadcrumb hidden-xs\">\n                @php\n                $segments = array_filter(explode('/', str_replace(route('voyager.dashboard'), '', Request::url())));\n                $url = route('voyager.dashboard');\n                @endphp\n                @if(count($segments) == 0)\n                    <li class=\"active\"><i class=\"voyager-boat\"></i> {{ __('voyager::generic.dashboard') }}</li>\n                @else\n                    <li class=\"active\">\n                        <a href=\"{{ route('voyager.dashboard')}}\"><i class=\"voyager-boat\"></i> {{ __('voyager::generic.dashboard') }}</a>\n                    </li>\n                    @foreach ($segments as $segment)\n                        @php\n                        $url .= '/'.$segment;\n                        @endphp\n                        @if ($loop->last)\n                            <li>{{ ucfirst(urldecode($segment)) }}</li>\n                        @else\n                            <li>\n                                <a href=\"{{ $url }}\">{{ ucfirst(urldecode($segment)) }}</a>\n                            </li>\n                        @endif\n                    @endforeach\n                @endif\n            </ol>\n            @show\n        </div>\n        <ul class=\"nav navbar-nav @if (__('voyager::generic.is_rtl') == 'true') navbar-left @else navbar-right @endif\">\n            <li class=\"dropdown profile\">\n                <a href=\"#\" class=\"dropdown-toggle text-right\" data-toggle=\"dropdown\" role=\"button\"\n                   aria-expanded=\"false\"><img src=\"{{ $user_avatar }}\" class=\"profile-img\"> <span\n                            class=\"caret\"></span></a>\n                <ul class=\"dropdown-menu dropdown-menu-animated\">\n                    <li class=\"profile-img\">\n                        <img src=\"{{ $user_avatar }}\" class=\"profile-img\">\n                        <div class=\"profile-body\">\n                            <h5>{{ Auth::user()->name }}</h5>\n                            <h6>{{ Auth::user()->email }}</h6>\n                        </div>\n                    </li>\n                    <li class=\"divider\"></li>\n                    <?php $nav_items = config('voyager.dashboard.navbar_items'); ?>\n                    @if(is_array($nav_items) && !empty($nav_items))\n                    @foreach($nav_items as $name => $item)\n                    <li {!! isset($item['classes']) && !empty($item['classes']) ? 'class=\"'.$item['classes'].'\"' : '' !!}>\n                        @if(isset($item['route']) && $item['route'] == 'voyager.logout')\n                        <form action=\"{{ route('voyager.logout') }}\" method=\"POST\">\n                            {{ csrf_field() }}\n                            <button type=\"submit\" class=\"btn btn-danger btn-block\">\n                                @if(isset($item['icon_class']) && !empty($item['icon_class']))\n                                <i class=\"{!! $item['icon_class'] !!}\"></i>\n                                @endif\n                                {{__($name)}}\n                            </button>\n                        </form>\n                        @else\n                        <a href=\"{{ isset($item['route']) && Route::has($item['route']) ? route($item['route']) : (isset($item['route']) ? $item['route'] : '#') }}\" {!! isset($item['target_blank']) && $item['target_blank'] ? 'target=\"_blank\"' : '' !!}>\n                            @if(isset($item['icon_class']) && !empty($item['icon_class']))\n                            <i class=\"{!! $item['icon_class'] !!}\"></i>\n                            @endif\n                            {{__($name)}}\n                        </a>\n                        @endif\n                    </li>\n                    @endforeach\n                    @endif\n                </ul>\n            </li>\n        </ul>\n    </div>\n</nav>\n"
  },
  {
    "path": "resources/views/dashboard/sidebar.blade.php",
    "content": "<div class=\"side-menu sidebar-inverse\">\n    <nav class=\"navbar navbar-default\" role=\"navigation\">\n        <div class=\"side-menu-container\">\n            <div class=\"navbar-header\">\n                <a class=\"navbar-brand\" href=\"{{ route('voyager.dashboard') }}\">\n                    <div class=\"logo-icon-container\">\n                        <?php $admin_logo_img = Voyager::setting('admin.icon_image', ''); ?>\n                        @if($admin_logo_img == '')\n                            <img src=\"{{ voyager_asset('images/logo-icon-light.png') }}\" alt=\"Logo Icon\">\n                        @else\n                            <img src=\"{{ Voyager::image($admin_logo_img) }}\" alt=\"Logo Icon\">\n                        @endif\n                    </div>\n                    <div class=\"title\">{{Voyager::setting('admin.title', 'VOYAGER')}}</div>\n                </a>\n            </div><!-- .navbar-header -->\n\n            <div class=\"panel widget center bgimage\"\n                 style=\"background-image:url({{ Voyager::image( Voyager::setting('admin.bg_image'), voyager_asset('images/bg.jpg') ) }}); background-size: cover; background-position: 0px;\">\n                <div class=\"dimmer\"></div>\n                <div class=\"panel-content\">\n                    <img src=\"{{ $user_avatar }}\" class=\"avatar\" alt=\"{{ Auth::user()->name }} avatar\">\n                    <h4>{{ ucwords(Auth::user()->name) }}</h4>\n                    <p>{{ Auth::user()->email }}</p>\n\n                    <a href=\"{{ route('voyager.profile') }}\" class=\"btn btn-primary\">{{ __('voyager::generic.profile') }}</a>\n                    <div style=\"clear:both\"></div>\n                </div>\n            </div>\n\n        </div>\n        <div id=\"adminmenu\">\n            <admin-menu :items=\"{{ menu('admin', '_json') }}\"></admin-menu>\n        </div>\n    </nav>\n</div>\n"
  },
  {
    "path": "resources/views/dimmer.blade.php",
    "content": "<div class=\"panel widget center bgimage\" style=\"margin-bottom:0;overflow:hidden;background-image:url('{{ $image }}');\">\n    <div class=\"dimmer\"></div>\n    <div class=\"panel-content\">\n        @if (isset($icon))<i class='{{ $icon }}'></i>@endif\n        <h4>{!! $title !!}</h4>\n        <p>{!! $text !!}</p>\n        <a href=\"{{ $button['link'] }}\" class=\"btn btn-primary\">{!! $button['text'] !!}</a>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/dimmers.blade.php",
    "content": "@php\n$dimmerGroups = Voyager::dimmers();\n@endphp\n\n@forelse($dimmerGroups as $dimmerGroup)\n    @php\n    $count = $dimmerGroup->count();\n    $classes = [\n        'col-xs-12',\n        'col-sm-'.($count >= 2 ? '6' : '12'),\n        'col-md-'.($count >= 3 ? '4' : ($count >= 2 ? '6' : '12')),\n    ];\n    $class = implode(' ', $classes);\n    $prefix = \"<div class='{$class}'>\";\n    $surfix = '</div>';\n    @endphp\n    @if ($dimmerGroup->any())\n    <div class=\"clearfix container-fluid row\">\n        {!! $prefix.$dimmerGroup->setSeparator($surfix.$prefix)->display().$surfix !!}\n    </div>\n    @endif\n\n@empty\n\n@endforelse\n"
  },
  {
    "path": "resources/views/formfields/checkbox.blade.php",
    "content": "<br>\n<?php $checked = false; ?>\n@if(isset($dataTypeContent->{$row->field}) || old($row->field))\n    <?php $checked = old($row->field, $dataTypeContent->{$row->field}); ?>\n@else\n    <?php $checked = isset($options->checked) &&\n        filter_var($options->checked, FILTER_VALIDATE_BOOLEAN) ? true: false; ?>\n@endif\n\n<?php $class = $options->class ?? \"toggleswitch\"; ?>\n\n@if(isset($options->on) && isset($options->off))\n    <input type=\"checkbox\" name=\"{{ $row->field }}\" class=\"{{ $class }}\"\n        data-on=\"{{ $options->on }}\" {!! $checked ? 'checked=\"checked\"' : '' !!}\n        data-off=\"{{ $options->off }}\">\n@else\n    <input type=\"checkbox\" name=\"{{ $row->field }}\" class=\"{{ $class }}\"\n        @if($checked) checked @endif>\n@endif\n"
  },
  {
    "path": "resources/views/formfields/code_editor.blade.php",
    "content": "<div id=\"{{ $row->field }}\" data-theme=\"{{ @$options->theme }}\" data-language=\"{{ @$options->language }}\" class=\"ace_editor min_height_200\" name=\"{{ $row->field }}\">{{ old($row->field, $dataTypeContent->{$row->field} ?? $options->default ?? '') }}</div>\n<textarea name=\"{{ $row->field }}\" id=\"{{ $row->field }}_textarea\" class=\"hidden\">{{ old($row->field, $dataTypeContent->{$row->field} ?? $options->default ?? '') }}</textarea>\n"
  },
  {
    "path": "resources/views/formfields/color.blade.php",
    "content": "<input type=\"color\" class=\"form-control\" name=\"{{ $row->field }}\"\n       value=\"{{ old($row->field, $dataTypeContent->{$row->field}) }}\">\n"
  },
  {
    "path": "resources/views/formfields/coordinates.blade.php",
    "content": "<style>\n    #map {\n        height: 400px;\n        width: 100%;\n    }\n</style>\n\n@php\n    $showAutocomplete = property_exists($row->details, 'showAutocompleteInput') ? (bool)$row->details->showAutocompleteInput : true;\n    $showAutocomplete = $showAutocomplete ? 'true' : 'false';\n    $showLatLng = property_exists($row->details, 'showLatLngInput') ? (bool)$row->details->showLatLngInput : true;\n    $showLatLng = $showLatLng ? 'true' : 'false';\n@endphp\n\n<div id=\"coordinates-formfield\">\n    <coordinates\n        inline-template\n        ref=\"coordinates\"\n        api-key=\"{{ config('voyager.googlemaps.key') }}\"\n        :points='@json($dataTypeContent->getCoordinates() && count($dataTypeContent->getCoordinates()) ? $dataTypeContent->getCoordinates() : [[ 'lat' => config('voyager.googlemaps.center.lat'), 'lng' => config('voyager.googlemaps.center.lng') ]])'\n        :show-autocomplete=\"{{ $showAutocomplete }}\"\n        :show-lat-lng=\"{{ $showLatLng }}\"\n        :zoom={{ config('voyager.googlemaps.zoom') }}\n    >\n        <div>\n            <div class=\"form-group\">\n                <div class=\"col-md-5\" v-if=\"showAutocomplete\">\n                    <label class=\"control-label\">{{ __('voyager::generic.find_by_place') }}</label>\n                    <input\n                        class=\"form-control\"\n                        type=\"text\"\n                        placeholder=\"742 Evergreen Terrace\"\n                        id=\"places-autocomplete\"\n                        v-on:keypress=\"onInputKeyPress($event)\"\n                    />\n                </div>\n                <div class=\"col-md-2\" v-if=\"showLatLng\">\n                    <label class=\"control-label\">{{ __('voyager::generic.latitude') }}</label>\n                    <input\n                        class=\"form-control\"\n                        type=\"number\"\n                        step=\"any\"\n                        name=\"{{ $row->field }}[lat]\"\n                        placeholder=\"19.6400\"\n                        v-model=\"lat\"\n                        @change=\"onLatLngInputChange\"\n                        v-on:keypress=\"onInputKeyPress($event)\"\n                    />\n                </div>\n                <div class=\"col-md-2\" v-if=\"showLatLng\">\n                    <label class=\"control-label\">{{ __('voyager::generic.longitude') }}</label>\n                    <input\n                        class=\"form-control\"\n                        type=\"number\"\n                        step=\"any\"\n                        name=\"{{ $row->field }}[lng]\"\n                        placeholder=\"-155.9969\"\n                        v-model=\"lng\"\n                        @change=\"onLatLngInputChange\"\n                        v-on:keypress=\"onInputKeyPress($event)\"\n                    />\n                </div>\n\n                <div class=\"clearfix\"></div>\n            </div>\n\n            <div id=\"map\"></div>\n        </div>\n    </coordinates>\n</div>\n\n@push('javascript')\n    <script>\n        Vue.component('coordinates', {\n            props: {\n                apiKey: {\n                    type: String,\n                    required: true,\n                },\n                points: {\n                    type: Array,\n                    required: true,\n                },\n                showAutocomplete: {\n                    type: Boolean,\n                    default: true,\n                },\n                showLatLng: {\n                    type: Boolean,\n                    default: true,\n                },\n                zoom: {\n                    type: Number,\n                    required: true,\n                }\n            },\n            data() {\n                return {\n                    autocomplete: null,\n                    lat: '',\n                    lng: '',\n                    map: null,\n                    marker: null,\n                    onChangeDebounceTimeout: null,\n                    place: null,\n                };\n            },\n            mounted() {\n                // Load Google Maps script\n                let gMapScript = document.createElement('script');\n                gMapScript.setAttribute('src', 'https://maps.googleapis.com/maps/api/js?key='+this.apiKey+'&callback=gMapVm.$refs.coordinates.initMap&libraries=places');\n                document.head.appendChild(gMapScript);\n            },\n            methods: {\n                initMap: function() {\n                    var vm = this;\n\n                    var center = vm.points[vm.points.length - 1];\n\n                    // Set initial LatLng\n                    this.setLatLng(center.lat, center.lng);\n\n                    // Create map\n                    vm.map = new google.maps.Map(document.getElementById('map'), {\n                        zoom: vm.zoom,\n                        center: new google.maps.LatLng(center.lat, center.lng)\n                    });\n\n                    // Create marker\n                    vm.marker = new google.maps.Marker({\n                        position: new google.maps.LatLng(center.lat, center.lng),\n                        map: vm.map,\n                        draggable: true\n                    });\n\n                    // Listen to map drag events\n                    google.maps.event.addListener(vm.marker, 'drag', vm.onMapDrag);\n\n                    // Setup places Autocomplete\n                    if (this.showAutocomplete) {\n                        vm.autocomplete = new google.maps.places.Autocomplete(document.getElementById('places-autocomplete'));\n                        places = new google.maps.places.PlacesService(vm.map);\n                        vm.autocomplete.addListener('place_changed', vm.onPlaceChange);\n                    }\n                },\n\n                setLatLng: function(lat, lng) {\n                    this.lat = lat;\n                    this.lng = lng;\n                },\n\n                moveMapAndMarker: function(lat, lng) {\n                    this.marker.setPosition(new google.maps.LatLng(lat, lng));\n                    this.map.panTo(new google.maps.LatLng(lat, lng));\n                },\n\n                onMapDrag: function(event) {\n                    this.setLatLng(event.latLng.lat(), event.latLng.lng());\n\n                    this.onChange('mapDragged');\n                },\n\n                onInputKeyPress: function(event) {\n                    if (event.which === 13) {\n                        event.preventDefault();\n                    }\n                },\n\n                onPlaceChange: function() {\n                    this.place = this.autocomplete.getPlace();\n\n                    if (this.place.geometry) {\n                        this.setLatLng(this.place.geometry.location.lat(), this.place.geometry.location.lng());\n                        this.moveMapAndMarker(this.place.geometry.location.lat(), this.place.geometry.location.lng());\n                    }\n\n                    this.onChange('placeChanged');\n                },\n\n                onLatLngInputChange: function(event) {\n                    this.moveMapAndMarker(this.lat, this.lng);\n\n                    this.onChange('latLngChanged');\n                },\n\n                onChange: function(eventType) {\n                    @if (property_exists($row->details, 'onChange'))\n                        if (this.onChangeDebounceTimeout) {\n                            clearTimeout(this.onChangeDebounceTimeout);\n                        }\n\n                        self = this\n                        this.onChangeDebounceTimeout = setTimeout(function() {\n                            {{ $row->details->onChange }}(eventType, {\n                                lat: self.lat,\n                                lng: self.lng,\n                                place: self.place\n                            });\n                        }, 300);\n                    @endif\n                },\n            }\n        });\n\n        var gMapVm = new Vue({ el: '#coordinates-formfield' });\n    </script>\n@endpush\n"
  },
  {
    "path": "resources/views/formfields/date.blade.php",
    "content": "<input type=\"date\" class=\"form-control\" name=\"{{ $row->field }}\"\n       placeholder=\"{{ $row->getTranslatedAttribute('display_name') }}\"\n       value=\"@if(isset($dataTypeContent->{$row->field})){{ \\Carbon\\Carbon::parse(old($row->field, $dataTypeContent->{$row->field}))->format('Y-m-d') }}@else{{old($row->field)}}@endif\">\n"
  },
  {
    "path": "resources/views/formfields/file.blade.php",
    "content": "@if(isset($dataTypeContent->{$row->field}))\n    @if(json_decode($dataTypeContent->{$row->field}) !== null)\n        @foreach(json_decode($dataTypeContent->{$row->field}) as $file)\n          <div data-field-name=\"{{ $row->field }}\">\n            <a class=\"fileType\" target=\"_blank\"\n              href=\"{{ Storage::disk(config('voyager.storage.disk'))->url($file->download_link) ?: '' }}\"\n              data-file-name=\"{{ $file->original_name }}\" data-id=\"{{ $dataTypeContent->getKey() }}\">\n              {{ $file->original_name ?: '' }}\n            </a>\n            <a href=\"#\" class=\"voyager-x remove-multi-file\"></a>\n          </div>\n        @endforeach\n    @else\n      <div data-field-name=\"{{ $row->field }}\">\n        <a class=\"fileType\" target=\"_blank\"\n          href=\"{{ Storage::disk(config('voyager.storage.disk'))->url($dataTypeContent->{$row->field}) }}\"\n          data-file-name=\"{{ $dataTypeContent->{$row->field} }}\" data-id=\"{{ $dataTypeContent->getKey() }}\">>\n            {{ __('voyager::generic.download') }}\n        </a>\n        <a href=\"#\" class=\"voyager-x remove-single-file\"></a>\n      </div>\n    @endif\n@endif\n<input @if($row->required == 1 && !isset($dataTypeContent->{$row->field})) required @endif type=\"file\" name=\"{{ $row->field }}[]\" multiple=\"multiple\">\n"
  },
  {
    "path": "resources/views/formfields/hidden.blade.php",
    "content": "<input type=\"hidden\" class=\"form-control\" name=\"{{ $row->field }}\"\n       placeholder=\"{{ $row->getTranslatedAttribute('display_name') }}\"\n       {!! isBreadSlugAutoGenerator($options) !!}\n       value=\"{{ old($row->field, $dataTypeContent->{$row->field} ?? $options->default ?? '') }}\">\n"
  },
  {
    "path": "resources/views/formfields/image.blade.php",
    "content": "@if(isset($dataTypeContent->{$row->field}))\n    <div data-field-name=\"{{ $row->field }}\">\n        <a href=\"#\" class=\"voyager-x remove-single-image\" style=\"position:absolute;\"></a>\n        <img src=\"@if( !filter_var($dataTypeContent->{$row->field}, FILTER_VALIDATE_URL)){{ Voyager::image( $dataTypeContent->{$row->field} ) }}@else{{ $dataTypeContent->{$row->field} }}@endif\"\n          data-file-name=\"{{ $dataTypeContent->{$row->field} }}\" data-id=\"{{ $dataTypeContent->getKey() }}\"\n          style=\"max-width:200px; height:auto; clear:both; display:block; padding:2px; border:1px solid #ddd; margin-bottom:10px;\">\n    </div>\n@endif\n<input @if($row->required == 1 && !isset($dataTypeContent->{$row->field})) required @endif type=\"file\" name=\"{{ $row->field }}\" accept=\"image/*\">\n"
  },
  {
    "path": "resources/views/formfields/markdown_editor.blade.php",
    "content": "<textarea class=\"form-control easymde\" name=\"{{ $row->field }}\" id=\"markdown{{ $row->field }}\">{{ old($row->field, $dataTypeContent->{$row->field} ?? '') }}</textarea>\n"
  },
  {
    "path": "resources/views/formfields/media_picker.blade.php",
    "content": "<div class=\"panel\">\n    <div class=\"page-content settings container-fluid\">\n        <div id=\"media_picker_{{ $row->field }}\">\n            <media-manager\n                base-path=\"{{ $options->base_path ?? '/'.$dataType->slug.'/' }}\"\n                filename=\"{{ $options->rename ?? 'null' }}\"\n                :allow-multi-select=\"{{ isset($options->max) && $options->max > 1 ? 'true' : 'false' }}\"\n                :max-selected-files=\"{{ $options->max ?? 0 }}\"\n                :min-selected-files=\"{{ $options->min ?? 0 }}\"\n                :show-folders=\"{{ var_export($options->show_folders ?? false, true) }}\"\n                :show-toolbar=\"{{ var_export($options->show_toolbar ?? true, true) }}\"\n                :allow-upload=\"{{ var_export($options->allow_upload ?? true, true) }}\"\n                :allow-move=\"{{ var_export($options->allow_move ?? false, true) }}\"\n                :allow-delete=\"{{ var_export($options->allow_delete ?? true, true) }}\"\n                :allow-create-folder=\"{{ var_export($options->allow_create_folder ?? true, true) }}\"\n                :allow-rename=\"{{ var_export($options->allow_rename ?? true, true) }}\"\n                :allow-crop=\"{{ var_export($options->allow_crop ?? true, true) }}\"\n                :allowed-types=\"{{ isset($options->allowed) && is_array($options->allowed) ? json_encode($options->allowed) : '[]' }}\"\n                :pre-select=\"false\"\n                :expanded=\"{{ var_export($options->expanded ?? false, true) }}\"\n                :show-expand-button=\"true\"\n                :element=\"'input[name=&quot;{{ $row->field }}&quot;]'\"\n                :details=\"{{ json_encode($options ?? []) }}\"\n            ></media-manager>\n            <input type=\"hidden\" :value=\"{{ $content }}\" name=\"{{ $row->field }}\">\n        </div>\n    </div>\n</div>\n@push('javascript')\n<script>\nnew Vue({\n    el: '#media_picker_{{ $row->field }}'\n});\n</script>\n@endpush\n"
  },
  {
    "path": "resources/views/formfields/multiple_checkbox.blade.php",
    "content": "<br>\n<?php $checked = false; ?>\n@if(isset($options->options))\n    @foreach($options->options as $key => $label)\n        @if(isset($dataTypeContent->{$row->field}) || old($row->field))\n            @php\n                $checkedData = old($row->field, $dataTypeContent->{$row->field});\n                $checkedData = is_array($checkedData) ? $checkedData : json_decode($checkedData, true);\n                $checked = in_array($key, $checkedData);\n            @endphp\n        @else\n            <?php $checked = isset($options->checked) && $options->checked ? true : false; ?>\n        @endif\n\n        <input type=\"checkbox\" name=\"{{ $row->field }}[{{$key}}]\" {!! $checked ? 'checked=\"checked\"' : '' !!} value=\"{{$key}}\" id=\"{{$key}}\"/>\n        <label for=\"{{$key}}\">{{$label}}</label>\n    @endforeach\n@endif\n"
  },
  {
    "path": "resources/views/formfields/multiple_images.blade.php",
    "content": "<br>\n@if(isset($dataTypeContent->{$row->field}))\n    <?php $images = json_decode($dataTypeContent->{$row->field}); ?>\n    @if($images != null)\n        @foreach($images as $image)\n            <div class=\"img_settings_container\" data-field-name=\"{{ $row->field }}\" style=\"float:left;padding-right:15px;\">\n                <a href=\"#\" class=\"voyager-x remove-multi-image\" style=\"position: absolute;\"></a>\n                <img src=\"{{ Voyager::image( $image ) }}\" data-file-name=\"{{ $image }}\" data-id=\"{{ $dataTypeContent->getKey() }}\" style=\"max-width:200px; height:auto; clear:both; display:block; padding:2px; border:1px solid #ddd; margin-bottom:5px;\">\n            </div>\n        @endforeach\n    @endif\n@endif\n<div class=\"clearfix\"></div>\n<input @if($row->required == 1 && !isset($dataTypeContent->{$row->field})) required @endif type=\"file\" name=\"{{ $row->field }}[]\" multiple=\"multiple\" accept=\"image/*\">\n"
  },
  {
    "path": "resources/views/formfields/number.blade.php",
    "content": "<input type=\"number\"\n       class=\"form-control\"\n       name=\"{{ $row->field }}\"\n       type=\"number\"\n       @if($row->required == 1) required @endif\n       @if(isset($options->min)) min=\"{{ $options->min }}\" @endif\n       @if(isset($options->max)) max=\"{{ $options->max }}\" @endif\n       step=\"{{ $options->step ?? 'any' }}\"\n       placeholder=\"{{ old($row->field, $options->placeholder ?? $row->getTranslatedAttribute('display_name')) }}\"\n       value=\"{{ old($row->field, $dataTypeContent->{$row->field} ?? $options->default ?? '') }}\">\n"
  },
  {
    "path": "resources/views/formfields/password.blade.php",
    "content": "@if(isset($dataTypeContent->{$row->field}))\n    <br>\n    <small>{{ __('voyager::form.field_password_keep') }}</small>\n@endif\n<input type=\"password\"\n       @if($row->required == 1 && !isset($dataTypeContent->{$row->field})) required @endif\n       class=\"form-control\"\n       name=\"{{ $row->field }}\"\n       value=\"\">\n"
  },
  {
    "path": "resources/views/formfields/radio_btn.blade.php",
    "content": "<?php $selected_value = old($row->field, $dataTypeContent->{$row->field} ?? $options->default ?? NULL) ?>\n<ul class=\"radio\">\n    @if(isset($options->options))\n        @foreach($options->options as $key => $option)\n            <li>\n                <input type=\"radio\" id=\"option-{{ \\Illuminate\\Support\\Str::slug($row->field, '-') }}-{{ \\Illuminate\\Support\\Str::slug($key, '-') }}\"\n                       name=\"{{ $row->field }}\"\n                       value=\"{{ $key }}\" @if($selected_value == $key) checked @endif>\n                <label for=\"option-{{ \\Illuminate\\Support\\Str::slug($row->field, '-') }}-{{ \\Illuminate\\Support\\Str::slug($key, '-') }}\">{{ $option }}</label>\n                <div class=\"check\"></div>\n            </li>\n        @endforeach\n    @endif\n</ul>\n"
  },
  {
    "path": "resources/views/formfields/relationship.blade.php",
    "content": "@if(isset($options->model) && isset($options->type))\n\n    @if(class_exists($options->model))\n\n        @php $relationshipField = $row->field; @endphp\n\n        @if($options->type == 'belongsTo')\n\n            @if(isset($view) && ($view == 'browse' || $view == 'read'))\n\n                @php\n                    $relationshipData = (isset($data)) ? $data : $dataTypeContent;\n                    $model = app($options->model);\n                    $query = $model::where($options->key,$relationshipData->{$options->column})->first();\n                @endphp\n\n                @if(isset($query))\n                    <p>{{ $query->{$options->label} }}</p>\n                @else\n                    <p>{{ __('voyager::generic.no_results') }}</p>\n                @endif\n\n            @else\n\n                <select\n                    class=\"form-control select2-ajax\" name=\"{{ $options->column }}\"\n                    data-get-items-route=\"{{route('voyager.' . $dataType->slug.'.relation')}}\"\n                    data-get-items-field=\"{{$row->field}}\"\n                    @if(!is_null($dataTypeContent->getKey())) data-id=\"{{$dataTypeContent->getKey()}}\" @endif\n                    data-method=\"{{ !is_null($dataTypeContent->getKey()) ? 'edit' : 'add' }}\"\n                    @if($row->required == 1) required @endif\n                >\n                    @php\n                        $model = app($options->model);\n                        $query = $model::where($options->key, old($options->column, $dataTypeContent->{$options->column}))->get();\n                    @endphp\n\n                    @if(!$row->required)\n                        <option value=\"\">{{__('voyager::generic.none')}}</option>\n                    @endif\n\n                    @foreach($query as $relationshipData)\n                        <option value=\"{{ $relationshipData->{$options->key} }}\" @if(old($options->column, $dataTypeContent->{$options->column}) == $relationshipData->{$options->key}) selected=\"selected\" @endif>{{ $relationshipData->{$options->label} }}</option>\n                    @endforeach\n                </select>\n\n            @endif\n\n        @elseif($options->type == 'hasOne')\n\n            @php\n                $relationshipData = (isset($data)) ? $data : $dataTypeContent;\n\n                $model = app($options->model);\n                $query = $model::where($options->column, '=', $relationshipData->{$options->key})->first();\n\n            @endphp\n\n            @if(isset($query))\n                <p>{{ $query->{$options->label} }}</p>\n            @else\n                <p>{{ __('voyager::generic.no_results') }}</p>\n            @endif\n\n        @elseif($options->type == 'hasMany')\n\n            @if(isset($view) && ($view == 'browse' || $view == 'read'))\n\n                @php\n                    $relationshipData = (isset($data)) ? $data : $dataTypeContent;\n                    $model = app($options->model);\n\n                    $selected_values = $model::where($options->column, '=', $relationshipData->{$options->key})->get()->map(function ($item, $key) use ($options) {\n                        return $item->{$options->label};\n                    })->all();\n                @endphp\n\n                @if($view == 'browse')\n                    @php\n                        $string_values = implode(\", \", $selected_values);\n                        if(mb_strlen($string_values) > 25){ $string_values = mb_substr($string_values, 0, 25) . '...'; }\n                    @endphp\n                    @if(empty($selected_values))\n                        <p>{{ __('voyager::generic.no_results') }}</p>\n                    @else\n                        <p>{{ $string_values }}</p>\n                    @endif\n                @else\n                    @if(empty($selected_values))\n                        <p>{{ __('voyager::generic.no_results') }}</p>\n                    @else\n                        <ul>\n                            @foreach($selected_values as $selected_value)\n                                <li>{{ $selected_value }}</li>\n                            @endforeach\n                        </ul>\n                    @endif\n                @endif\n\n            @else\n\n                @php\n                    $model = app($options->model);\n                    $query = $model::where($options->column, '=', $dataTypeContent->{$options->key})->get();\n                @endphp\n\n                @if($query->isNotEmpty())\n                    <ul>\n                        @foreach($query as $query_res)\n                            <li>{{ $query_res->{$options->label} }}</li>\n                        @endforeach\n                    </ul>\n                @else\n                    <p>{{ __('voyager::generic.no_results') }}</p>\n                @endif\n\n            @endif\n\n        @elseif($options->type == 'belongsToMany')\n\n            @if(isset($view) && ($view == 'browse' || $view == 'read'))\n\n                @php\n                    $relationshipData = (isset($data)) ? $data : $dataTypeContent;\n\n                    $selected_values = isset($relationshipData) ? $relationshipData->belongsToMany($options->model, $options->pivot_table, $options->foreign_pivot_key ?? null, $options->related_pivot_key ?? null, $options->parent_key ?? null, $options->key)->get()->map(function ($item, $key) use ($options) {\n            \t\t\treturn $item->{$options->label};\n            \t\t})->all() : array();\n                @endphp\n\n                @if($view == 'browse')\n                    @php\n                        $string_values = implode(\", \", $selected_values);\n                        if(mb_strlen($string_values) > 25){ $string_values = mb_substr($string_values, 0, 25) . '...'; }\n                    @endphp\n                    @if(empty($selected_values))\n                        <p>{{ __('voyager::generic.no_results') }}</p>\n                    @else\n                        <p>{{ $string_values }}</p>\n                    @endif\n                @else\n                    @if(empty($selected_values))\n                        <p>{{ __('voyager::generic.no_results') }}</p>\n                    @else\n                        <ul>\n                            @foreach($selected_values as $selected_value)\n                                <li>{{ $selected_value }}</li>\n                            @endforeach\n                        </ul>\n                    @endif\n                @endif\n\n            @else\n                <select\n                    class=\"form-control select2-ajax @if(isset($options->taggable) && $options->taggable === 'on') taggable @endif\"\n                    name=\"{{ $relationshipField }}[]\" multiple\n                    data-get-items-route=\"{{route('voyager.' . $dataType->slug.'.relation')}}\"\n                    data-get-items-field=\"{{$row->field}}\"\n                    @if(!is_null($dataTypeContent->getKey())) data-id=\"{{$dataTypeContent->getKey()}}\" @endif\n                    data-method=\"{{ !is_null($dataTypeContent->getKey()) ? 'edit' : 'add' }}\"\n                    @if(isset($options->taggable) && $options->taggable === 'on')\n                        data-route=\"{{ route('voyager.'.\\Illuminate\\Support\\Str::slug($options->table).'.store') }}\"\n                        data-label=\"{{$options->label}}\"\n                        data-error-message=\"{{__('voyager::bread.error_tagging')}}\"\n                    @endif\n                    @if($row->required == 1) required @endif\n                >\n\n                        @php\n                            $selected_keys = [];\n                            \n                            if (!is_null($dataTypeContent->getKey())) {\n                                $selected_keys = $dataTypeContent->belongsToMany(\n                                    $options->model,\n                                    $options->pivot_table,\n                                    $options->foreign_pivot_key ?? null,\n                                    $options->related_pivot_key ?? null,\n                                    $options->parent_key ?? null,\n                                    $options->key\n                                )->pluck($options->table.'.'.$options->key);\n                            }\n                            $selected_keys = old($relationshipField, $selected_keys);\n                            $selected_values = app($options->model)->whereIn($options->key, $selected_keys)->pluck($options->label, $options->key);\n                        @endphp\n\n                        @if(!$row->required)\n                            <option value=\"\">{{__('voyager::generic.none')}}</option>\n                        @endif\n\n                        @foreach ($selected_values as $key => $value)\n                            <option value=\"{{ $key }}\" selected=\"selected\">{{ $value }}</option>\n                        @endforeach\n\n                </select>\n\n            @endif\n\n        @endif\n\n    @else\n\n        cannot make relationship because {{ $options->model }} does not exist.\n\n    @endif\n\n@endif\n"
  },
  {
    "path": "resources/views/formfields/rich_text_box.blade.php",
    "content": "<textarea class=\"form-control richTextBox\" name=\"{{ $row->field }}\" id=\"richtext{{ $row->field }}\">\n    {{ old($row->field, $dataTypeContent->{$row->field} ?? '') }}\n</textarea>\n\n@push('javascript')\n    <script>\n        $(document).ready(function() {\n            var additionalConfig = {\n                selector: 'textarea.richTextBox[name=\"{{ $row->field }}\"]',\n            }\n\n            $.extend(additionalConfig, {!! json_encode($options->tinymceOptions ?? (object)[]) !!})\n\n            tinymce.init(window.voyagerTinyMCE.getConfig(additionalConfig));\n        });\n    </script>\n@endpush\n"
  },
  {
    "path": "resources/views/formfields/select_dropdown.blade.php",
    "content": "@if(isset($options->relationship))\n\n    {{-- If this is a relationship and the method does not exist, show a warning message --}}\n    @if( !method_exists( $dataType->model_name, \\Illuminate\\Support\\Str::camel($row->field) ) )\n        <p class=\"label label-warning\"><i class=\"voyager-warning\"></i> {{ __('voyager::form.field_select_dd_relationship', ['method' => \\Illuminate\\Support\\Str::camel($row->field).'()', 'class' => $dataType->model_name]) }}</p>\n    @endif\n\n    @if( method_exists( $dataType->model_name, \\Illuminate\\Support\\Str::camel($row->field) ) )\n        @if(isset($dataTypeContent->{$row->field}) && !is_null(old($row->field, $dataTypeContent->{$row->field})))\n            <?php $selected_value = old($row->field, $dataTypeContent->{$row->field}); ?>\n        @else\n            <?php $selected_value = old($row->field); ?>\n        @endif\n\n        <select class=\"form-control select2\" name=\"{{ $row->field }}\">\n            <?php $default = (isset($options->default) && !isset($dataTypeContent->{$row->field})) ? $options->default : null; ?>\n\n            @if(isset($options->options))\n                <optgroup label=\"{{ __('voyager::generic.custom') }}\">\n                @foreach($options->options as $key => $option)\n                    <option value=\"{{ ($key == '_empty_' ? '' : $key) }}\" @if($default == $key && $selected_value === NULL) selected=\"selected\" @endif @if((string)$selected_value == (string)$key) selected=\"selected\" @endif>{{ $option }}</option>\n                @endforeach\n                </optgroup>\n            @endif\n            {{-- Populate all options from relationship --}}\n            <?php\n            $relationshipListMethod = \\Illuminate\\Support\\Str::camel($row->field) . 'List';\n            if (method_exists($dataTypeContent, $relationshipListMethod)) {\n                $relationshipOptions = $dataTypeContent->$relationshipListMethod();\n            } else {\n                $relationshipClass = $dataTypeContent->{\\Illuminate\\Support\\Str::camel($row->field)}()->getRelated();\n                if (isset($options->relationship->where)) {\n                    $relationshipOptions = $relationshipClass::where(\n                        $options->relationship->where[0],\n                        $options->relationship->where[1]\n                    )->get();\n                } else {\n                    $relationshipOptions = $relationshipClass::all();\n                }\n            }\n\n            // Try to get default value for the relationship\n            // when default is a callable function (ClassName@methodName)\n            if ($default != null) {\n                $comps = explode('@', $default);\n                if (count($comps) == 2 && method_exists($comps[0], $comps[1])) {\n                    $default = call_user_func([$comps[0], $comps[1]]);\n                }\n            }\n            ?>\n\n            <optgroup label=\"{{ __('voyager::database.relationship.relationship') }}\">\n            @foreach($relationshipOptions as $relationshipOption)\n                <option value=\"{{ $relationshipOption->{$options->relationship->key} }}\" @if($default == $relationshipOption->{$options->relationship->key} && $selected_value === NULL) selected=\"selected\" @endif @if($selected_value == $relationshipOption->{$options->relationship->key}) selected=\"selected\" @endif>{{ $relationshipOption->{$options->relationship->label} }}</option>\n            @endforeach\n            </optgroup>\n        </select>\n    @else\n        <select class=\"form-control select2\" name=\"{{ $row->field }}\"></select>\n    @endif\n@else\n    <?php $selected_value = (isset($dataTypeContent->{$row->field}) && !is_null(old($row->field, $dataTypeContent->{$row->field}))) ? old($row->field, $dataTypeContent->{$row->field}) : old($row->field); ?>\n    <select class=\"form-control select2\" name=\"{{ $row->field }}\">\n        <?php $default = (isset($options->default) && !isset($dataTypeContent->{$row->field})) ? $options->default : null; ?>\n        @if(isset($options->options))\n            @foreach($options->options as $key => $option)\n                <option value=\"{{ $key }}\" @if($default == $key && $selected_value === NULL) selected=\"selected\" @endif @if($selected_value == $key) selected=\"selected\" @endif>{{ $option }}</option>\n            @endforeach\n        @endif\n    </select>\n@endif\n"
  },
  {
    "path": "resources/views/formfields/select_multiple.blade.php",
    "content": "{{-- If this is a relationship and the method does not exist, show a warning message --}}\n@if(isset($options->relationship) && !method_exists( $dataType->model_name, \\Illuminate\\Support\\Str::camel($row->field) ) )\n    <p class=\"label label-warning\"><i class=\"voyager-warning\"></i> {{ __('voyager::form.field_select_dd_relationship', ['method' => \\Illuminate\\Support\\Str::camel($row->field).'()', 'class' => $dataType->model_name]) }}</p>\n@endif\n@php\n$dataTypeContent->{$row->field} = json_decode($dataTypeContent->{$row->field})\n@endphp\n<select class=\"form-control select2\" name=\"{{ $row->field }}[]\" multiple>\n    @if(isset($options->relationship))\n        {{-- Check that the relationship method exists --}}\n        @if( method_exists( $dataType->model_name, \\Illuminate\\Support\\Str::camel($row->field) ) )\n            <?php $selected_values = isset($dataTypeContent) ? $dataTypeContent->{\\Illuminate\\Support\\Str::camel($row->field)}()->pluck($options->relationship->key)->all() : []; ?>\n            <?php\n            $relationshipListMethod = \\Illuminate\\Support\\Str::camel($row->field) . 'List';\n            if (isset($dataTypeContent) && method_exists($dataTypeContent, $relationshipListMethod)) {\n                $relationshipOptions = $dataTypeContent->$relationshipListMethod();\n            } else {\n                $relationshipClass = get_class(app($dataType->model_name)->{\\Illuminate\\Support\\Str::camel($row->field)}()->getRelated());\n                $relationshipOptions = $relationshipClass::all();\n            }\n            ?>\n            @foreach($relationshipOptions as $relationshipOption)\n                <option value=\"{{ $relationshipOption->{$options->relationship->key} }}\" @if(in_array($relationshipOption->{$options->relationship->key}, $selected_values)) selected=\"selected\" @endif>{{ $relationshipOption->{$options->relationship->label} }}</option>\n            @endforeach\n        @endif\n    @elseif(isset($options->options))\n        @foreach($options->options as $key => $label)\n                <?php $selected = ''; ?>\n            @if(is_array($dataTypeContent->{$row->field}) && in_array($key, $dataTypeContent->{$row->field}))\n                <?php $selected = 'selected=\"selected\"'; ?>\n            @elseif(!is_null(old($row->field)) && in_array($key, old($row->field)))\n                <?php $selected = 'selected=\"selected\"'; ?>\n            @endif\n            <option value=\"{{ $key }}\" {!! $selected !!}>\n                {{ $label }}\n            </option>\n        @endforeach\n    @endif\n</select>\n"
  },
  {
    "path": "resources/views/formfields/text.blade.php",
    "content": "<input @if($row->required == 1) required @endif type=\"text\" class=\"form-control\" name=\"{{ $row->field }}\"\n        placeholder=\"{{ old($row->field, $options->placeholder ?? $row->getTranslatedAttribute('display_name')) }}\"\n       {!! isBreadSlugAutoGenerator($options) !!}\n       value=\"{{ old($row->field, $dataTypeContent->{$row->field} ?? $options->default ?? '') }}\">\n"
  },
  {
    "path": "resources/views/formfields/text_area.blade.php",
    "content": "<textarea @if($row->required == 1) required @endif class=\"form-control\" name=\"{{ $row->field }}\" rows=\"{{ $options->display->rows ?? 5 }}\">{{ old($row->field, $dataTypeContent->{$row->field} ?? $options->default ?? '') }}</textarea>\n"
  },
  {
    "path": "resources/views/formfields/time.blade.php",
    "content": "<input @if($row->required == 1) required @endif type=\"time\"  data-name=\"{{ $row->getTranslatedAttribute('display_name') }}\"  class=\"form-control\" name=\"{{ $row->field }}\"\n       placeholder=\"{{ old($row->field, $options->placeholder ?? $row->getTranslatedAttribute('display_name')) }}\"\n       {!! isBreadSlugAutoGenerator($options) !!}\n       value=\"{{ old($row->field, $dataTypeContent->{$row->field} ?? $options->default ?? '') }}\">\n"
  },
  {
    "path": "resources/views/formfields/timestamp.blade.php",
    "content": "<input @if($row->required == 1) required @endif type=\"datetime\" class=\"form-control datepicker\" name=\"{{ $row->field }}\"\n       value=\"@if(isset($dataTypeContent->{$row->field})){{ \\Carbon\\Carbon::parse(old($row->field, $dataTypeContent->{$row->field}))->format('m/d/Y g:i A') }}@else{{old($row->field)}}@endif\">\n"
  },
  {
    "path": "resources/views/index.blade.php",
    "content": "@extends('voyager::master')\n\n@section('content')\n    <div class=\"page-content\">\n        @include('voyager::alerts')\n        @include('voyager::dimmers')\n        <div class=\"analytics-container\">\n            <?php $google_analytics_client_id = Voyager::setting(\"admin.google_analytics_client_id\"); ?>\n            @if (isset($google_analytics_client_id) && !empty($google_analytics_client_id))\n                {{-- Google Analytics Embed --}}\n                <div id=\"embed-api-auth-container\"></div>\n            @else\n                <p style=\"border-radius:4px; padding:20px; background:#fff; margin:0; color:#999; text-align:center;\">\n                    {!! __('voyager::analytics.no_client_id') !!}\n                    <a href=\"https://console.developers.google.com\" target=\"_blank\">https://console.developers.google.com</a>\n                </p>\n            @endif\n\n            <div class=\"Dashboard Dashboard--full\" id=\"analytics-dashboard\">\n                <header class=\"Dashboard-header\">\n                    <ul class=\"FlexGrid\">\n                        <li class=\"FlexGrid-item\">\n                            <div class=\"Titles\">\n                                <h1 class=\"Titles-main\" id=\"view-name\">{{ __('voyager::analytics.select_view') }}</h1>\n                                <div class=\"Titles-sub\">{{ __('voyager::analytics.various_visualizations') }}</div>\n                            </div>\n                        </li>\n                        <li class=\"FlexGrid-item FlexGrid-item--fixed\">\n                            <div id=\"active-users-container\"></div>\n                        </li>\n                    </ul>\n                    <div id=\"view-selector-container\"></div>\n                </header>\n\n                <ul class=\"FlexGrid FlexGrid--halves\">\n                    <li class=\"FlexGrid-item\">\n                        <div class=\"Chartjs\">\n                            <header class=\"Titles\">\n                                <h1 class=\"Titles-main\">{{ __('voyager::analytics.this_vs_last_week') }}</h1>\n                                <div class=\"Titles-sub\">{{ __('voyager::analytics.by_users') }}</div>\n                            </header>\n                            <figure class=\"Chartjs-figure\" id=\"chart-1-container\"></figure>\n                            <ol class=\"Chartjs-legend\" id=\"legend-1-container\"></ol>\n                        </div>\n                    </li>\n                    <li class=\"FlexGrid-item\">\n                        <div class=\"Chartjs\">\n                            <header class=\"Titles\">\n                                <h1 class=\"Titles-main\">{{ __('voyager::analytics.this_vs_last_year') }}</h1>\n                                <div class=\"Titles-sub\">{{ __('voyager::analytics.by_users') }}</div>\n                            </header>\n                            <figure class=\"Chartjs-figure\" id=\"chart-2-container\"></figure>\n                            <ol class=\"Chartjs-legend\" id=\"legend-2-container\"></ol>\n                        </div>\n                    </li>\n                    <li class=\"FlexGrid-item\">\n                        <div class=\"Chartjs\">\n                            <header class=\"Titles\">\n                                <h1 class=\"Titles-main\">{{ __('voyager::analytics.top_browsers') }}</h1>\n                                <div class=\"Titles-sub\">{{ __('voyager::analytics.by_pageview') }}</div>\n                            </header>\n                            <figure class=\"Chartjs-figure\" id=\"chart-3-container\"></figure>\n                            <ol class=\"Chartjs-legend\" id=\"legend-3-container\"></ol>\n                        </div>\n                    </li>\n                    <li class=\"FlexGrid-item\">\n                        <div class=\"Chartjs\">\n                            <header class=\"Titles\">\n                                <h1 class=\"Titles-main\">{{ __('voyager::analytics.top_countries') }}</h1>\n                                <div class=\"Titles-sub\">{{ __('voyager::analytics.by_sessions') }}</div>\n                            </header>\n                            <figure class=\"Chartjs-figure\" id=\"chart-4-container\"></figure>\n                            <ol class=\"Chartjs-legend\" id=\"legend-4-container\"></ol>\n                        </div>\n                    </li>\n                </ul>\n            </div>\n        </div>\n    </div>\n@stop\n\n@section('javascript')\n\n    @if(isset($google_analytics_client_id) && !empty($google_analytics_client_id))\n        <script>\n            (function (w, d, s, g, js, fs) {\n                g = w.gapi || (w.gapi = {});\n                g.analytics = {\n                    q: [], ready: function (f) {\n                        this.q.push(f);\n                    }\n                };\n                js = d.createElement(s);\n                fs = d.getElementsByTagName(s)[0];\n                js.src = 'https://apis.google.com/js/platform.js';\n                fs.parentNode.insertBefore(js, fs);\n                js.onload = function () {\n                    g.load('analytics');\n                };\n            }(window, document, 'script'));\n        </script>\n\n        <script src=\"https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.1.1/Chart.min.js\"></script>\n        <script src=\"https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.2/moment.min.js\"></script>\n        <script>\n            // View Selector 2 JS\n            !function(e){function t(r){if(i[r])return i[r].exports;var o=i[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var i={};return t.m=e,t.c=i,t.p=\"\",t(0)}([function(e,t,i){\"use strict\";function r(e){return e&&e.__esModule?e:{\"default\":e}}var o=i(1),s=r(o);gapi.analytics.ready(function(){function e(e,t,i){e.innerHTML=t.map(function(e){var t=e.id==i?\"selected \":\" \";return\"<option \"+t+'value=\"'+e.id+'\">'+e.name+\"</option>\"}).join(\"\")}function t(e){return e.ids||e.viewId?{prop:\"viewId\",value:e.viewId||e.ids&&e.ids.replace(/^ga:/,\"\")}:e.propertyId?{prop:\"propertyId\",value:e.propertyId}:e.accountId?{prop:\"accountId\",value:e.accountId}:void 0}gapi.analytics.createComponent(\"ViewSelector2\",{execute:function(){return this.setup_(function(){this.updateAccounts_(),this.changed_&&(this.render_(),this.onChange_())}.bind(this)),this},set:function(e){if(!!e.ids+!!e.viewId+!!e.propertyId+!!e.accountId>1)throw new Error('You cannot specify more than one of the following options: \"ids\", \"viewId\", \"accountId\", \"propertyId\"');if(e.container&&this.container)throw new Error(\"You cannot change containers once a view selector has been rendered on the page.\");var t=this.get();return(t.ids!=e.ids||t.viewId!=e.viewId||t.propertyId!=e.propertyId||t.accountId!=e.accountId)&&(t.ids=null,t.viewId=null,t.propertyId=null,t.accountId=null),gapi.analytics.Component.prototype.set.call(this,e)},setup_:function(e){function t(){s[\"default\"].get().then(function(t){i.summaries=t,i.accounts=i.summaries.all(),e()},function(e){i.emit(\"error\",e)})}var i=this;gapi.analytics.auth.isAuthorized()?t():gapi.analytics.auth.on(\"signIn\",t)},updateAccounts_:function(){var e=this.get(),i=t(e),r=void 0,o=void 0,s=void 0;if(!this.summaries.all().length)return this.emit(\"error\",new Error('This user does not have any Google Analytics accounts. You can sign up at \"www.google.com/analytics\".'));if(i)switch(i.prop){case\"viewId\":r=this.summaries.getProfile(i.value),o=this.summaries.getAccountByProfileId(i.value),s=this.summaries.getWebPropertyByProfileId(i.value);break;case\"propertyId\":s=this.summaries.getWebProperty(i.value),o=this.summaries.getAccountByWebPropertyId(i.value),r=s&&s.views&&s.views[0];break;case\"accountId\":o=this.summaries.getAccount(i.value),s=o&&o.properties&&o.properties[0],r=s&&s.views&&s.views[0]}else o=this.accounts[0],s=o&&o.properties&&o.properties[0],r=s&&s.views&&s.views[0];o||s||r?(o!=this.account||s!=this.property||r!=this.view)&&(this.changed_={account:o&&o!=this.account,property:s&&s!=this.property,view:r&&r!=this.view},this.account=o,this.properties=o.properties,this.property=s,this.views=s&&s.views,this.view=r,this.ids=r&&\"ga:\"+r.id):this.emit(\"error\",new Error(\"This user does not have access to \"+i.prop.slice(0,-2)+\" : \"+i.value))},render_:function(){var t=this.get();this.container=\"string\"==typeof t.container?document.getElementById(t.container):t.container,this.container.innerHTML=t.template||this.template;var i=this.container.querySelectorAll(\"select\"),r=this.accounts,o=this.properties||[{name:\"(Empty)\",id:\"\"}],s=this.views||[{name:\"(Empty)\",id:\"\"}];e(i[0],r,this.account.id),e(i[1],o,this.property&&this.property.id),e(i[2],s,this.view&&this.view.id),i[0].onchange=this.onUserSelect_.bind(this,i[0],\"accountId\"),i[1].onchange=this.onUserSelect_.bind(this,i[1],\"propertyId\"),i[2].onchange=this.onUserSelect_.bind(this,i[2],\"viewId\")},onChange_:function(){var e={account:this.account,property:this.property,view:this.view,ids:this.view&&\"ga:\"+this.view.id};this.changed_&&(this.changed_.account&&this.emit(\"accountChange\",e),this.changed_.property&&this.emit(\"propertyChange\",e),this.changed_.view&&(this.emit(\"viewChange\",e),this.emit(\"idsChange\",e),this.emit(\"change\",e.ids))),this.changed_=null},onUserSelect_:function(e,t){var i={};i[t]=e.value,this.set(i),this.execute()},template:'<div class=\"ViewSelector2\">  <div class=\"ViewSelector2-item\">    <label>Account</label>    <select class=\"FormField\"></select>  </div>  <div class=\"ViewSelector2-item\">    <label>Property</label>    <select class=\"FormField\"></select>  </div>  <div class=\"ViewSelector2-item\">    <label>View</label>    <select class=\"FormField\"></select>  </div></div>'})})},function(e,t,i){function r(){var e=gapi.client.request({path:n}).then(function(e){return e});return new e.constructor(function(t,i){var r=[];e.then(function o(e){var c=e.result;c.items?r=r.concat(c.items):i(new Error(\"You do not have any Google Analytics accounts. Go to http://google.com/analytics to sign up.\")),c.startIndex+c.itemsPerPage<=c.totalResults?gapi.client.request({path:n,params:{\"start-index\":c.startIndex+c.itemsPerPage}}).then(o):t(new s(r))}).then(null,i)})}var o,s=i(2),n=\"/analytics/v3/management/accountSummaries\";e.exports={get:function(e){return e&&(o=null),o||(o=r())}}},function(e,t){function i(e){this.accounts_=e,this.webProperties_=[],this.profiles_=[],this.accountsById_={},this.webPropertiesById_=this.propertiesById_={},this.profilesById_=this.viewsById_={};for(var t,i=0;t=this.accounts_[i];i++)if(this.accountsById_[t.id]={self:t},t.webProperties){r(t,\"webProperties\",\"properties\");for(var o,s=0;o=t.webProperties[s];s++)if(this.webProperties_.push(o),this.webPropertiesById_[o.id]={self:o,parent:t},o.profiles){r(o,\"profiles\",\"views\");for(var n,c=0;n=o.profiles[c];c++)this.profiles_.push(n),this.profilesById_[n.id]={self:n,parent:o,grandParent:t}}}}function r(e,t,i){Object.defineProperty?Object.defineProperty(e,i,{get:function(){return e[t]}}):e[i]=e[t]}i.prototype.all=function(){return this.accounts_},r(i.prototype,\"all\",\"allAccounts\"),i.prototype.allWebProperties=function(){return this.webProperties_},r(i.prototype,\"allWebProperties\",\"allProperties\"),i.prototype.allProfiles=function(){return this.profiles_},r(i.prototype,\"allProfiles\",\"allViews\"),i.prototype.get=function(e){if(!!e.accountId+!!e.webPropertyId+!!e.propertyId+!!e.profileId+!!e.viewId>1)throw new Error('get() only accepts an object with a single property: either \"accountId\", \"webPropertyId\", \"propertyId\", \"profileId\" or \"viewId\"');return this.getProfile(e.profileId||e.viewId)||this.getWebProperty(e.webPropertyId||e.propertyId)||this.getAccount(e.accountId)},i.prototype.getAccount=function(e){return this.accountsById_[e]&&this.accountsById_[e].self},i.prototype.getWebProperty=function(e){return this.webPropertiesById_[e]&&this.webPropertiesById_[e].self},r(i.prototype,\"getWebProperty\",\"getProperty\"),i.prototype.getProfile=function(e){return this.profilesById_[e]&&this.profilesById_[e].self},r(i.prototype,\"getProfile\",\"getView\"),i.prototype.getAccountByProfileId=function(e){return this.profilesById_[e]&&this.profilesById_[e].grandParent},r(i.prototype,\"getAccountByProfileId\",\"getAccountByViewId\"),i.prototype.getWebPropertyByProfileId=function(e){return this.profilesById_[e]&&this.profilesById_[e].parent},r(i.prototype,\"getWebPropertyByProfileId\",\"getPropertyByViewId\"),i.prototype.getAccountByWebPropertyId=function(e){return this.webPropertiesById_[e]&&this.webPropertiesById_[e].parent},r(i.prototype,\"getAccountByWebPropertyId\",\"getAccountByPropertyId\"),e.exports=i}]);\n            // DateRange Selector JS\n            !function(t){function e(n){if(a[n])return a[n].exports;var i=a[n]={exports:{},id:n,loaded:!1};return t[n].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var a={};return e.m=t,e.c=a,e.p=\"\",e(0)}([function(t,e){\"use strict\";gapi.analytics.ready(function(){function t(t){if(n.test(t))return t;var i=a.exec(t);if(i)return e(+i[1]);if(\"today\"==t)return e(0);if(\"yesterday\"==t)return e(1);throw new Error(\"Cannot convert date \"+t)}function e(t){var e=new Date;e.setDate(e.getDate()-t);var a=String(e.getMonth()+1);a=1==a.length?\"0\"+a:a;var n=String(e.getDate());return n=1==n.length?\"0\"+n:n,e.getFullYear()+\"-\"+a+\"-\"+n}var a=/(\\d+)daysAgo/,n=/\\d{4}\\-\\d{2}\\-\\d{2}/;gapi.analytics.createComponent(\"DateRangeSelector\",{execute:function(){var e=this.get();e[\"start-date\"]=e[\"start-date\"]||\"7daysAgo\",e[\"end-date\"]=e[\"end-date\"]||\"yesterday\",this.container=\"string\"==typeof e.container?document.getElementById(e.container):e.container,e.template&&(this.template=e.template),this.container.innerHTML=this.template;var a=this.container.querySelectorAll(\"input\");return this.startDateInput=a[0],this.startDateInput.value=t(e[\"start-date\"]),this.endDateInput=a[1],this.endDateInput.value=t(e[\"end-date\"]),this.setValues(),this.setMinMax(),this.container.onchange=this.onChange.bind(this),this},onChange:function(){this.setValues(),this.setMinMax(),this.emit(\"change\",{\"start-date\":this[\"start-date\"],\"end-date\":this[\"end-date\"]})},setValues:function(){this[\"start-date\"]=this.startDateInput.value,this[\"end-date\"]=this.endDateInput.value},setMinMax:function(){this.startDateInput.max=this.endDateInput.value,this.endDateInput.min=this.startDateInput.value},template:'<div class=\"DateRangeSelector\">  <div class=\"DateRangeSelector-item\">    <label>Start Date</label>     <input type=\"date\">  </div>  <div class=\"DateRangeSelector-item\">    <label>End Date</label>     <input type=\"date\">  </div></div>'})})}]);\n            // Active Users JS\n            !function(t){function i(s){if(e[s])return e[s].exports;var n=e[s]={exports:{},id:s,loaded:!1};return t[s].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}var e={};return i.m=t,i.c=e,i.p=\"\",i(0)}([function(t,i){\"use strict\";gapi.analytics.ready(function(){gapi.analytics.createComponent(\"ActiveUsers\",{initialize:function(){this.activeUsers=0,gapi.analytics.auth.once(\"signOut\",this.handleSignOut_.bind(this))},execute:function(){this.polling_&&this.stop(),this.render_(),gapi.analytics.auth.isAuthorized()?this.pollActiveUsers_():gapi.analytics.auth.once(\"signIn\",this.pollActiveUsers_.bind(this))},stop:function(){clearTimeout(this.timeout_),this.polling_=!1,this.emit(\"stop\",{activeUsers:this.activeUsers})},render_:function(){var t=this.get();this.container=\"string\"==typeof t.container?document.getElementById(t.container):t.container,this.container.innerHTML=t.template||this.template,this.container.querySelector(\"b\").innerHTML=this.activeUsers},pollActiveUsers_:function(){var t=this.get(),i=1e3*(t.pollingInterval||5);if(isNaN(i)||5e3>i)throw new Error(\"Frequency must be 5 seconds or more.\");this.polling_=!0,gapi.client.analytics.data.realtime.get({ids:t.ids,metrics:\"rt:activeUsers\"}).then(function(t){var e=t.result,s=e.totalResults?+e.rows[0][0]:0,n=this.activeUsers;this.emit(\"success\",{activeUsers:this.activeUsers}),s!=n&&(this.activeUsers=s,this.onChange_(s-n)),1==this.polling_&&(this.timeout_=setTimeout(this.pollActiveUsers_.bind(this),i))}.bind(this))},onChange_:function(t){var i=this.container.querySelector(\"b\");i&&(i.innerHTML=this.activeUsers),this.emit(\"change\",{activeUsers:this.activeUsers,delta:t}),t>0?this.emit(\"increase\",{activeUsers:this.activeUsers,delta:t}):this.emit(\"decrease\",{activeUsers:this.activeUsers,delta:t})},handleSignOut_:function(){this.stop(),gapi.analytics.auth.once(\"signIn\",this.handleSignIn_.bind(this))},handleSignIn_:function(){this.pollActiveUsers_(),gapi.analytics.auth.once(\"signOut\",this.handleSignOut_.bind(this))},template:'<div class=\"ActiveUsers\">Active Users: <b class=\"ActiveUsers-value\"></b></div>'})})}]);\n        </script>\n\n        <script>\n            // == NOTE ==\n            // This code uses ES6 promises. If you want to use this code in a browser\n            // that doesn't supporting promises natively, you'll have to include a polyfill.\n\n            gapi.analytics.ready(function () {\n\n                /**\n                 * Authorize the user immediately if the user has already granted access.\n                 * If no access has been created, render an authorize button inside the\n                 * element with the ID \"embed-api-auth-container\".\n                 */\n                gapi.analytics.auth.authorize({\n                    container: 'embed-api-auth-container',\n                    clientid: '{{ $google_analytics_client_id }}'\n                });\n\n\n                /**\n                 * Create a new ActiveUsers instance to be rendered inside of an\n                 * element with the id \"active-users-container\" and poll for changes every\n                 * five seconds.\n                 */\n                var activeUsers = new gapi.analytics.ext.ActiveUsers({\n                    container: 'active-users-container',\n                    pollingInterval: 5\n                });\n\n\n                /**\n                 * Add CSS animation to visually show the when users come and go.\n                 */\n                activeUsers.once('success', function () {\n                    var element = this.container.firstChild;\n                    var timeout;\n\n                    document.getElementById('embed-api-auth-container').style.display = 'none';\n                    document.getElementById('analytics-dashboard').style.display = 'block';\n\n                    this.on('change', function (data) {\n                        var element = this.container.firstChild;\n                        var animationClass = data.delta > 0 ? 'is-increasing' : 'is-decreasing';\n                        element.className += (' ' + animationClass);\n\n                        clearTimeout(timeout);\n                        timeout = setTimeout(function () {\n                            element.className =\n                                    element.className.replace(/ is-(increasing|decreasing)/g, '');\n                        }, 3000);\n                    });\n                });\n\n\n                /**\n                 * Create a new ViewSelector2 instance to be rendered inside of an\n                 * element with the id \"view-selector-container\".\n                 */\n                var viewSelector = new gapi.analytics.ext.ViewSelector2({\n                    container: 'view-selector-container',\n                    propertyId: '{{ Voyager::setting(\"site.google_analytics_tracking_id\")  }}'\n                })\n                        .execute();\n\n\n                /**\n                 * Update the activeUsers component, the Chartjs charts, and the dashboard\n                 * title whenever the user changes the view.\n                 */\n                viewSelector.on('viewChange', function (data) {\n                    var title = document.getElementById('view-name');\n                    if (title) {\n                        title.innerHTML = data.property.name + ' (' + data.view.name + ')';\n                    }\n\n                    // Start tracking active users for this view.\n                    activeUsers.set(data).execute();\n\n                    // Render all the of charts for this view.\n                    renderWeekOverWeekChart(data.ids);\n                    renderYearOverYearChart(data.ids);\n                    renderTopBrowsersChart(data.ids);\n                    renderTopCountriesChart(data.ids);\n                });\n\n\n                /**\n                 * Draw the a chart.js line chart with data from the specified view that\n                 * overlays session data for the current week over session data for the\n                 * previous week.\n                 */\n                function renderWeekOverWeekChart(ids) {\n\n                    // Adjust `now` to experiment with different days, for testing only...\n                    var now = moment(); // .subtract(3, 'day');\n\n                    var thisWeek = query({\n                        'ids': ids,\n                        'dimensions': 'ga:date,ga:nthDay',\n                        'metrics': 'ga:users',\n                        'start-date': moment(now).subtract(1, 'day').day(0).format('YYYY-MM-DD'),\n                        'end-date': moment(now).format('YYYY-MM-DD')\n                    });\n\n                    var lastWeek = query({\n                        'ids': ids,\n                        'dimensions': 'ga:date,ga:nthDay',\n                        'metrics': 'ga:users',\n                        'start-date': moment(now).subtract(1, 'day').day(0).subtract(1, 'week')\n                                .format('YYYY-MM-DD'),\n                        'end-date': moment(now).subtract(1, 'day').day(6).subtract(1, 'week')\n                                .format('YYYY-MM-DD')\n                    });\n\n                    Promise.all([thisWeek, lastWeek]).then(function (results) {\n\n                        var data1 = results[0].rows.map(function (row) {\n                            return +row[2];\n                        });\n                        var data2 = results[1].rows.map(function (row) {\n                            return +row[2];\n                        });\n                        var labels = results[1].rows.map(function (row) {\n                            return +row[0];\n                        });\n\n                        labels = labels.map(function (label) {\n                            return moment(label, 'YYYYMMDD').format('ddd');\n                        });\n\n                        var data = {\n                            labels: labels,\n                            datasets: [\n                                {\n                                    label: '{{ __('voyager::date.last_week') }}',\n                                    fillColor: 'rgba(220,220,220,0.5)',\n                                    strokeColor: 'rgba(220,220,220,1)',\n                                    pointColor: 'rgba(220,220,220,1)',\n                                    pointStrokeColor: '#fff',\n                                    data: data2\n                                },\n                                {\n                                    label: '{{ __('voyager::date.this_week') }}',\n                                    fillColor: 'rgba(151,187,205,0.5)',\n                                    strokeColor: 'rgba(151,187,205,1)',\n                                    pointColor: 'rgba(151,187,205,1)',\n                                    pointStrokeColor: '#fff',\n                                    data: data1\n                                }\n                            ]\n                        };\n\n                        new Chart(makeCanvas('chart-1-container')).Line(data);\n                        generateLegend('legend-1-container', data.datasets);\n                    });\n                }\n\n\n                /**\n                 * Draw the a chart.js bar chart with data from the specified view that\n                 * overlays session data for the current year over session data for the\n                 * previous year, grouped by month.\n                 */\n                function renderYearOverYearChart(ids) {\n\n                    // Adjust `now` to experiment with different days, for testing only...\n                    var now = moment(); // .subtract(3, 'day');\n\n                    var thisYear = query({\n                        'ids': ids,\n                        'dimensions': 'ga:month,ga:nthMonth',\n                        'metrics': 'ga:users',\n                        'start-date': moment(now).date(1).month(0).format('YYYY-MM-DD'),\n                        'end-date': moment(now).format('YYYY-MM-DD')\n                    });\n\n                    var lastYear = query({\n                        'ids': ids,\n                        'dimensions': 'ga:month,ga:nthMonth',\n                        'metrics': 'ga:users',\n                        'start-date': moment(now).subtract(1, 'year').date(1).month(0)\n                                .format('YYYY-MM-DD'),\n                        'end-date': moment(now).date(1).month(0).subtract(1, 'day')\n                                .format('YYYY-MM-DD')\n                    });\n\n                    Promise.all([thisYear, lastYear]).then(function (results) {\n                        var data1 = results[0].rows.map(function (row) {\n                            return +row[2];\n                        });\n                        var data2 = results[1].rows.map(function (row) {\n                            return +row[2];\n                        });\n                        var labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n                            'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n                        // Ensure the data arrays are at least as long as the labels array.\n                        // Chart.js bar charts don't (yet) accept sparse datasets.\n                        for (var i = 0, len = labels.length; i < len; i++) {\n                            if (data1[i] === undefined) data1[i] = null;\n                            if (data2[i] === undefined) data2[i] = null;\n                        }\n\n                        var data = {\n                            labels: labels,\n                            datasets: [\n                                {\n                                    label: '{{ __('voyager::date.last_year') }}',\n                                    fillColor: 'rgba(220,220,220,0.5)',\n                                    strokeColor: 'rgba(220,220,220,1)',\n                                    data: data2\n                                },\n                                {\n                                    label: '{{ __('voyager::date.this_year') }}',\n                                    fillColor: 'rgba(151,187,205,0.5)',\n                                    strokeColor: 'rgba(151,187,205,1)',\n                                    data: data1\n                                }\n                            ]\n                        };\n\n                        new Chart(makeCanvas('chart-2-container')).Bar(data);\n                        generateLegend('legend-2-container', data.datasets);\n                    })\n                            .catch(function (err) {\n                                console.error(err.stack);\n                            });\n                }\n\n\n                /**\n                 * Draw the a chart.js doughnut chart with data from the specified view that\n                 * show the top 5 browsers over the past seven days.\n                 */\n                function renderTopBrowsersChart(ids) {\n\n                    query({\n                        'ids': ids,\n                        'dimensions': 'ga:browser',\n                        'metrics': 'ga:pageviews',\n                        'sort': '-ga:pageviews',\n                        'max-results': 5\n                    })\n                            .then(function (response) {\n\n                                var data = [];\n                                var colors = ['#4D5360', '#949FB1', '#D4CCC5', '#E2EAE9', '#F7464A'];\n\n                                response.rows.forEach(function (row, i) {\n                                    data.push({value: +row[1], color: colors[i], label: row[0]});\n                                });\n\n                                new Chart(makeCanvas('chart-3-container')).Doughnut(data);\n                                generateLegend('legend-3-container', data);\n                            });\n                }\n\n\n                /**\n                 * Draw the a chart.js doughnut chart with data from the specified view that\n                 * compares sessions from mobile, desktop, and tablet over the past seven\n                 * days.\n                 */\n                function renderTopCountriesChart(ids) {\n                    query({\n                        'ids': ids,\n                        'dimensions': 'ga:country',\n                        'metrics': 'ga:sessions',\n                        'sort': '-ga:sessions',\n                        'max-results': 5\n                    })\n                            .then(function (response) {\n\n                                var data = [];\n                                var colors = ['#4D5360', '#949FB1', '#D4CCC5', '#E2EAE9', '#F7464A'];\n\n                                response.rows.forEach(function (row, i) {\n                                    data.push({\n                                        label: row[0],\n                                        value: +row[1],\n                                        color: colors[i]\n                                    });\n                                });\n\n                                new Chart(makeCanvas('chart-4-container')).Doughnut(data);\n                                generateLegend('legend-4-container', data);\n                            });\n                }\n\n\n                /**\n                 * Extend the Embed APIs `gapi.analytics.report.Data` component to\n                 * return a promise the is fulfilled with the value returned by the API.\n                 * @param {Object} params The request parameters.\n                 * @return {Promise} A promise.\n                 */\n                function query(params) {\n                    return new Promise(function (resolve, reject) {\n                        var data = new gapi.analytics.report.Data({query: params});\n                        data.once('success', function (response) {\n                            resolve(response);\n                        })\n                                .once('error', function (response) {\n                                    reject(response);\n                                })\n                                .execute();\n                    });\n                }\n\n\n                /**\n                 * Create a new canvas inside the specified element. Set it to be the width\n                 * and height of its container.\n                 * @param {string} id The id attribute of the element to host the canvas.\n                 * @return {RenderingContext} The 2D canvas context.\n                 */\n                function makeCanvas(id) {\n                    var container = document.getElementById(id);\n                    var canvas = document.createElement('canvas');\n                    var ctx = canvas.getContext('2d');\n\n                    container.innerHTML = '';\n                    canvas.width = container.offsetWidth;\n                    canvas.height = container.offsetHeight;\n                    container.appendChild(canvas);\n\n                    return ctx;\n                }\n\n\n                /**\n                 * Create a visual legend inside the specified element based off of a\n                 * Chart.js dataset.\n                 * @param {string} id The id attribute of the element to host the legend.\n                 * @param {Array.<Object>} items A list of labels and colors for the legend.\n                 */\n                function generateLegend(id, items) {\n                    var legend = document.getElementById(id);\n                    legend.innerHTML = items.map(function (item) {\n                        var color = item.color || item.fillColor;\n                        var label = item.label;\n                        return '<li><i style=\"background:' + color + '\"></i>' + label + '</li>';\n                    }).join('');\n                }\n\n\n                // Set some global Chart.js defaults.\n                Chart.defaults.global.animationSteps = 60;\n                Chart.defaults.global.animationEasing = 'easeInOutQuart';\n                Chart.defaults.global.responsive = true;\n                Chart.defaults.global.maintainAspectRatio = false;\n\n                // resize to redraw charts\n                window.dispatchEvent(new Event('resize'));\n\n            });\n\n        </script>\n\n    @endif\n\n@stop\n"
  },
  {
    "path": "resources/views/login.blade.php",
    "content": "@extends('voyager::auth.master')\n\n@section('content')\n    <div class=\"login-container\">\n\n        <p>{{ __('voyager::login.signin_below') }}</p>\n\n        <form action=\"{{ route('voyager.login') }}\" method=\"POST\">\n            {{ csrf_field() }}\n            <div class=\"form-group form-group-default\" id=\"emailGroup\">\n                <label>{{ __('voyager::generic.email') }}</label>\n                <div class=\"controls\">\n                    <input type=\"text\" name=\"email\" id=\"email\" value=\"{{ old('email') }}\" placeholder=\"{{ __('voyager::generic.email') }}\" class=\"form-control\" required>\n                </div>\n            </div>\n\n            <div class=\"form-group form-group-default\" id=\"passwordGroup\">\n                <label>{{ __('voyager::generic.password') }}</label>\n                <div class=\"controls\">\n                    <input type=\"password\" name=\"password\" placeholder=\"{{ __('voyager::generic.password') }}\" class=\"form-control\" required>\n                </div>\n            </div>\n\n            <div class=\"form-group\" id=\"rememberMeGroup\">\n                <div class=\"controls\">\n                    <input type=\"checkbox\" name=\"remember\" id=\"remember\" value=\"1\"><label for=\"remember\" class=\"remember-me-text\">{{ __('voyager::generic.remember_me') }}</label>\n                </div>\n            </div>\n\n            <button type=\"submit\" class=\"btn btn-block login-button\">\n                <span class=\"signingin hidden\"><span class=\"voyager-refresh\"></span> {{ __('voyager::login.loggingin') }}...</span>\n                <span class=\"signin\">{{ __('voyager::generic.login') }}</span>\n            </button>\n\n        </form>\n\n        <div style=\"clear:both\"></div>\n\n        @if(!$errors->isEmpty())\n            <div class=\"alert alert-red\">\n                <ul class=\"list-unstyled\">\n                    @foreach($errors->all() as $err)\n                        <li>{{ $err }}</li>\n                    @endforeach\n                </ul>\n            </div>\n        @endif\n\n    </div> <!-- .login-container -->\n@endsection\n\n@section('post_js')\n\n    <script>\n        var btn = document.querySelector('button[type=\"submit\"]');\n        var form = document.forms[0];\n        var email = document.querySelector('[name=\"email\"]');\n        var password = document.querySelector('[name=\"password\"]');\n        btn.addEventListener('click', function(ev){\n            if (form.checkValidity()) {\n                btn.querySelector('.signingin').className = 'signingin';\n                btn.querySelector('.signin').className = 'signin hidden';\n            } else {\n                ev.preventDefault();\n            }\n        });\n        email.focus();\n        document.getElementById('emailGroup').classList.add(\"focused\");\n\n        // Focus events for email and password fields\n        email.addEventListener('focusin', function(e){\n            document.getElementById('emailGroup').classList.add(\"focused\");\n        });\n        email.addEventListener('focusout', function(e){\n            document.getElementById('emailGroup').classList.remove(\"focused\");\n        });\n\n        password.addEventListener('focusin', function(e){\n            document.getElementById('passwordGroup').classList.add(\"focused\");\n        });\n        password.addEventListener('focusout', function(e){\n            document.getElementById('passwordGroup').classList.remove(\"focused\");\n        });\n\n    </script>\n@endsection\n"
  },
  {
    "path": "resources/views/master.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"{{ config('app.locale') }}\" dir=\"{{ __('voyager::generic.is_rtl') == 'true' ? 'rtl' : 'ltr' }}\">\n<head>\n    <title>@yield('page_title', setting('admin.title') . \" - \" . setting('admin.description'))</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\"/>\n    <meta name=\"assets-path\" content=\"{{ route('voyager.voyager_assets') }}\"/>\n\n    <!-- Google Fonts -->\n    <link href=\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,700\" rel=\"stylesheet\">\n\n    <!-- Favicon -->\n    <?php $admin_favicon = Voyager::setting('admin.icon_image', ''); ?>\n    @if($admin_favicon == '')\n        <link rel=\"shortcut icon\" href=\"{{ voyager_asset('images/logo-icon.png') }}\" type=\"image/png\">\n    @else\n        <link rel=\"shortcut icon\" href=\"{{ Voyager::image($admin_favicon) }}\" type=\"image/png\">\n    @endif\n\n\n\n    <!-- App CSS -->\n    <link rel=\"stylesheet\" href=\"{{ voyager_asset('css/app.css') }}\">\n\n    @yield('css')\n    @if(__('voyager::generic.is_rtl') == 'true')\n        <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-rtl/3.4.0/css/bootstrap-rtl.css\">\n        <link rel=\"stylesheet\" href=\"{{ voyager_asset('css/rtl.css') }}\">\n    @endif\n\n    <!-- Few Dynamic Styles -->\n    <style type=\"text/css\">\n        .voyager .side-menu .navbar-header {\n            background:{{ config('voyager.primary_color','#22A7F0') }};\n            border-color:{{ config('voyager.primary_color','#22A7F0') }};\n        }\n        .widget .btn-primary{\n            border-color:{{ config('voyager.primary_color','#22A7F0') }};\n        }\n        .widget .btn-primary:focus, .widget .btn-primary:hover, .widget .btn-primary:active, .widget .btn-primary.active, .widget .btn-primary:active:focus{\n            background:{{ config('voyager.primary_color','#22A7F0') }};\n        }\n        .voyager .breadcrumb a{\n            color:{{ config('voyager.primary_color','#22A7F0') }};\n        }\n    </style>\n\n    @if(!empty(config('voyager.additional_css')))<!-- Additional CSS -->\n        @foreach(config('voyager.additional_css') as $css)<link rel=\"stylesheet\" type=\"text/css\" href=\"{{ asset($css) }}\">@endforeach\n    @endif\n\n    @yield('head')\n</head>\n\n<body class=\"voyager @if(isset($dataType) && isset($dataType->slug)){{ $dataType->slug }}@endif\">\n\n<div id=\"voyager-loader\">\n    <?php $admin_loader_img = Voyager::setting('admin.loader', ''); ?>\n    @if($admin_loader_img == '')\n        <img src=\"{{ voyager_asset('images/logo-icon.png') }}\" alt=\"Voyager Loader\">\n    @else\n        <img src=\"{{ Voyager::image($admin_loader_img) }}\" alt=\"Voyager Loader\">\n    @endif\n</div>\n\n<?php\nif (\\Illuminate\\Support\\Str::startsWith(Auth::user()->avatar, 'http://') || \\Illuminate\\Support\\Str::startsWith(Auth::user()->avatar, 'https://')) {\n    $user_avatar = Auth::user()->avatar;\n} else {\n    $user_avatar = Voyager::image(Auth::user()->avatar);\n}\n?>\n\n<div class=\"app-container\">\n    <div class=\"fadetoblack visible-xs\"></div>\n    <div class=\"row content-container\">\n        @include('voyager::dashboard.navbar')\n        @include('voyager::dashboard.sidebar')\n        <script>\n            (function(){\n                    var appContainer = document.querySelector('.app-container'),\n                        sidebar = appContainer.querySelector('.side-menu'),\n                        navbar = appContainer.querySelector('nav.navbar.navbar-top'),\n                        loader = document.getElementById('voyager-loader'),\n                        hamburgerMenu = document.querySelector('.hamburger'),\n                        sidebarTransition = sidebar.style.transition,\n                        navbarTransition = navbar.style.transition,\n                        containerTransition = appContainer.style.transition;\n\n                    sidebar.style.WebkitTransition = sidebar.style.MozTransition = sidebar.style.transition =\n                    appContainer.style.WebkitTransition = appContainer.style.MozTransition = appContainer.style.transition =\n                    navbar.style.WebkitTransition = navbar.style.MozTransition = navbar.style.transition = 'none';\n\n                    if (window.innerWidth > 768 && window.localStorage && window.localStorage['voyager.stickySidebar'] == 'true') {\n                        appContainer.className += ' expanded no-animation';\n                        loader.style.left = (sidebar.clientWidth/2)+'px';\n                        hamburgerMenu.className += ' is-active no-animation';\n                    }\n\n                   navbar.style.WebkitTransition = navbar.style.MozTransition = navbar.style.transition = navbarTransition;\n                   sidebar.style.WebkitTransition = sidebar.style.MozTransition = sidebar.style.transition = sidebarTransition;\n                   appContainer.style.WebkitTransition = appContainer.style.MozTransition = appContainer.style.transition = containerTransition;\n            })();\n        </script>\n        <!-- Main Content -->\n        <div class=\"container-fluid\">\n            <div class=\"side-body padding-top\">\n                @yield('page_header')\n                <div id=\"voyager-notifications\"></div>\n                @yield('content')\n            </div>\n        </div>\n    </div>\n</div>\n@include('voyager::partials.app-footer')\n\n<!-- Javascript Libs -->\n\n\n<script type=\"text/javascript\" src=\"{{ voyager_asset('js/app.js') }}\"></script>\n\n<script>\n    @if(Session::has('alerts'))\n        let alerts = {!! json_encode(Session::get('alerts')) !!};\n        helpers.displayAlerts(alerts, toastr);\n    @endif\n\n    @if(Session::has('message'))\n\n    // TODO: change Controllers to use AlertsMessages trait... then remove this\n    var alertType = {!! json_encode(Session::get('alert-type', 'info')) !!};\n    var alertMessage = {!! json_encode(Session::get('message')) !!};\n    var alerter = toastr[alertType];\n\n    if (alerter) {\n        alerter(alertMessage);\n    } else {\n        toastr.error(\"toastr alert-type \" + alertType + \" is unknown\");\n    }\n    @endif\n</script>\n@include('voyager::media.manager')\n@yield('javascript')\n@stack('javascript')\n@if(!empty(config('voyager.additional_js')))<!-- Additional Javascript -->\n    @foreach(config('voyager.additional_js') as $js)<script type=\"text/javascript\" src=\"{{ asset($js) }}\"></script>@endforeach\n@endif\n\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/media/index.blade.php",
    "content": "@extends('voyager::master')\n\n@section('page_title', __('voyager::generic.media'))\n\n@section('content')\n    <div class=\"page-content container-fluid\">\n        @include('voyager::alerts')\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n\n                <div class=\"admin-section-title\">\n                    <h3><i class=\"voyager-images\"></i> {{ __('voyager::generic.media') }}</h3>\n                </div>\n                <div class=\"clear\"></div>\n                <div id=\"filemanager\">\n                    <media-manager\n                        base-path=\"{{ config('voyager.media.path', '/') }}\"\n                        :show-folders=\"{{ config('voyager.media.show_folders', true) ? 'true' : 'false' }}\"\n                        :allow-upload=\"{{ config('voyager.media.allow_upload', true) ? 'true' : 'false' }}\"\n                        :allow-move=\"{{ config('voyager.media.allow_move', true) ? 'true' : 'false' }}\"\n                        :allow-delete=\"{{ config('voyager.media.allow_delete', true) ? 'true' : 'false' }}\"\n                        :allow-create-folder=\"{{ config('voyager.media.allow_create_folder', true) ? 'true' : 'false' }}\"\n                        :allow-rename=\"{{ config('voyager.media.allow_rename', true) ? 'true' : 'false' }}\"\n                        :allow-crop=\"{{ config('voyager.media.allow_crop', true) ? 'true' : 'false' }}\"\n                        :details=\"{{ json_encode(['thumbnails' => config('voyager.media.thumbnails', []), 'watermark' => config('voyager.media.watermark', (object)[])]) }}\"\n                        ></media-manager>\n                </div>\n            </div><!-- .row -->\n        </div><!-- .col-md-12 -->\n    </div><!-- .page-content container-fluid -->\n@stop\n\n@section('javascript')\n<script>\nnew Vue({\n    el: '#filemanager'\n});\n</script>\n@endsection\n"
  },
  {
    "path": "resources/views/media/manager.blade.php",
    "content": "@section('media-manager')\n<div>\n    <div v-if=\"hidden_element\" :id=\"'dd_'+this._uid\" class=\"dd\">\n        <ol id=\"files\" class=\"dd-list\">\n            <li v-for=\"file in getSelectedFiles()\" class=\"dd-item\" :data-url=\"file\">\n                <div class=\"file_link selected\" aria-hidden=\"true\" data-toggle=\"tooltip\" data-placement=\"auto\" :title=\"file\">\n                    <div class=\"link_icon\">\n                        <template v-if=\"fileIs(file, 'image')\">\n                            <div class=\"img_icon\" :style=\"imgIcon('{{ Storage::disk(config('voyager.storage.disk'))->url('/') }}'+file)\"></div>\n                        </template>\n                        <template v-else-if=\"fileIs(file, 'video')\">\n                            <i class=\"icon voyager-video\"></i>\n                        </template>\n                        <template v-else-if=\"fileIs(file, 'audio')\">\n                            <i class=\"icon voyager-music\"></i>\n                        </template>\n                        <template v-else-if=\"fileIs(file, 'zip')\">\n                            <i class=\"icon voyager-archive\"></i>\n                        </template>\n                        <template v-else-if=\"fileIs(file, 'folder')\">\n                            <i class=\"icon voyager-folder\"></i>\n                        </template>\n                        <template v-else>\n                            <i class=\"icon voyager-file-text\"></i>\n                        </template>\n                    </div>\n                    <div class=\"details\">\n                        <div class=\"folder\">\n                            <h4>@{{ getFileName(file) }}</h4>\n                        </div>\n                    </div>\n                    <i class=\"voyager-x dd-nodrag\" v-on:click=\"removeFileFromInput(file)\"></i>\n                </div>\n            </li>\n        </ol>\n    </div>\n    <div v-if=\"hidden_element\">\n        <div class=\"btn btn-sm btn-default\" v-on:click=\"isExpanded = !isExpanded;\" style=\"width:100%\">\n            <div v-if=\"!isExpanded\"><i class=\"voyager-double-down\"></i> {{ __('voyager::generic.open') }}</div>\n            <div v-if=\"isExpanded\"><i class=\"voyager-double-up\"></i> {{ __('voyager::generic.close') }}</div>\n        </div>\n    </div>\n    <div id=\"toolbar\" v-if=\"showToolbar\" :style=\"isExpanded ? 'display:block' : 'display:none'\">\n        <div class=\"btn-group offset-right\">\n            <button type=\"button\" class=\"btn btn-primary\" id=\"upload\" v-if=\"allowUpload\">\n                <i class=\"voyager-upload\"></i>\n                {{ __('voyager::generic.upload') }}\n            </button>\n            <button type=\"button\" class=\"btn btn-primary\" v-if=\"allowCreateFolder\" data-toggle=\"modal\" :data-target=\"'#create_dir_modal_'+this._uid\">\n                <i class=\"voyager-folder\"></i>\n                {{ __('voyager::generic.add_folder') }}\n            </button>\n        </div>\n        <button type=\"button\" class=\"btn btn-default\" v-on:click=\"getFiles()\">\n            <i class=\"voyager-refresh\"></i>\n        </button>\n        <div class=\"btn-group offset-right\">\n            <button type=\"button\" :disabled=\"selected_files.length == 0\" v-if=\"allowUpload && hidden_element\" class=\"btn btn-default\" v-on:click=\"addSelectedFiles()\">\n                <i class=\"voyager-upload\"></i>\n                {{ __('voyager::media.add_all_selected') }}\n            </button>\n            <button type=\"button\" v-if=\"showFolders && allowMove\" class=\"btn btn-default\" data-toggle=\"modal\" :data-target=\"'#move_files_modal_'+this._uid\">\n                <i class=\"voyager-move\"></i>\n                {{ __('voyager::generic.move') }}\n            </button>\n            <button type=\"button\" v-if=\"allowDelete\" :disabled=\"selected_files.length == 0\" class=\"btn btn-default\" data-toggle=\"modal\" :data-target=\"'#confirm_delete_modal_'+this._uid\">\n                <i class=\"voyager-trash\"></i>\n                {{ __('voyager::generic.delete') }}\n            </button>\n            <button v-if=\"allowCrop\" :disabled=\"selected_files.length != 1 || !fileIs(selected_file, 'image')\" type=\"button\" class=\"btn btn-default\" data-toggle=\"modal\" :data-target=\"'#crop_modal_'+this._uid\">\n                <i class=\"voyager-crop\"></i>\n                {{ __('voyager::media.crop') }}\n            </button>\n        </div>\n    </div>\n    <div id=\"uploadPreview\" style=\"display:none;\" v-if=\"allowUpload\"></div>\n    <div id=\"uploadProgress\" class=\"progress active progress-striped\" v-if=\"allowUpload\">\n        <div class=\"progress-bar progress-bar-success\" style=\"width: 0\"></div>\n    </div>\n    <div id=\"content\" :style=\"isExpanded ? 'display:block' : 'display:none'\">\n        <div class=\"breadcrumb-container\">\n            <ol class=\"breadcrumb filemanager\">\n                <li class=\"media_breadcrumb\" v-on:click=\"setCurrentPath(-1)\">\n                    <span class=\"arrow\"></span>\n                    <strong>{{ __('voyager::media.library') }}</strong>\n                </li>\n                <li v-for=\"(folder, i) in getCurrentPath()\" v-on:click=\"setCurrentPath(i)\">\n                    <span class=\"arrow\"></span>\n                    @{{ folder }}\n                </li>\n            </ol>\n        </div>\n        <div class=\"flex\">\n            <div id=\"left\">\n                <ul id=\"files\">\n                    <li v-for=\"(file) in files\" v-on:click=\"selectFile(file, $event)\" v-on:dblclick=\"openFile(file)\" v-if=\"filter(file)\">\n                        <div :class=\"'file_link ' + (isFileSelected(file) ? 'selected' : '')\">\n                            <div class=\"link_icon\">\n                                <template v-if=\"fileIs(file, 'image')\">\n                                    <div class=\"img_icon\" :style=\"imgIcon(file.path)\"></div>\n                                </template>\n                                <template v-else-if=\"fileIs(file, 'video')\">\n                                    <i class=\"icon voyager-video\"></i>\n                                </template>\n                                <template v-else-if=\"fileIs(file, 'audio')\">\n                                    <i class=\"icon voyager-music\"></i>\n                                </template>\n                                <template v-else-if=\"fileIs(file, 'zip')\">\n                                    <i class=\"icon voyager-archive\"></i>\n                                </template>\n                                <template v-else-if=\"fileIs(file, 'folder')\">\n                                    <i class=\"icon voyager-folder\"></i>\n                                </template>\n                                <template v-else>\n                                    <i class=\"icon voyager-file-text\"></i>\n                                </template>\n                            </div>\n                            <div class=\"details\">\n                                <div :class=\"file.type\">\n                                    <h4>@{{ file.name }}</h4>\n                                    <small v-if=\"!fileIs(file, 'folder')\">\n                                        <span class=\"file_size\">@{{ bytesToSize(file.size) }}</span>\n                                    </small>\n                                </div>\n                            </div>\n                        </div>\n                    </li>\n                </ul>\n                <div id=\"file_loader\" v-if=\"is_loading\">\n                    <?php $admin_loader_img = Voyager::setting('admin.loader', ''); ?>\n                    @if($admin_loader_img == '')\n                    <img src=\"{{ voyager_asset('images/logo-icon.png') }}\" alt=\"Voyager Loader\">\n                    @else\n                    <img src=\"{{ Voyager::image($admin_loader_img) }}\" alt=\"Voyager Loader\">\n                    @endif\n                    <p>{{ __('voyager::media.loading') }}</p>\n                </div>\n\n                <div id=\"no_files\" v-if=\"files.length == 0\">\n                    <h3><i class=\"voyager-meh\"></i> {{ __('voyager::media.no_files_in_folder') }}</h3>\n                </div>\n            </div>\n            <div id=\"right\">\n                <div class=\"right_details\">\n                    <div v-if=\"selected_files.length > 1\" class=\"right_none_selected\">\n                        <i class=\"voyager-list\"></i>\n                        <p>@{{ selected_files.length }} {{ __('voyager::media.files_selected') }}</p>\n                    </div>\n                    <div v-else-if=\"selected_files.length == 1\" class=\"right_details\">\n                        <div class=\"detail_img\">\n                            <div v-if=\"fileIs(selected_file, 'image')\">\n                                <img :src=\"selected_file.path\" />\n                            </div>\n                            <div v-else-if=\"fileIs(selected_file, 'video')\">\n                                <video width=\"100%\" height=\"auto\" ref=\"videoplayer\" controls>\n                                    <source :src=\"selected_file.path\" type=\"video/mp4\">\n                                    <source :src=\"selected_file.path\" type=\"video/ogg\">\n                                    <source :src=\"selected_file.path\" type=\"video/webm\">\n                                    {{ __('voyager::media.browser_video_support') }}\n                                </video>\n                            </div>\n                            <div v-else-if=\"fileIs(selected_file, 'audio')\">\n                                <i class=\"voyager-music\"></i>\n                                <audio controls style=\"width:100%; margin-top:5px;\" ref=\"audioplayer\">\n                                    <source :src=\"selected_file.path\" type=\"audio/ogg\">\n                                    <source :src=\"selected_file.path\" type=\"audio/mpeg\">\n                                    {{ __('voyager::media.browser_audio_support') }}\n                                </audio>\n                            </div>\n                            <div v-else-if=\"fileIs(selected_file, 'zip')\">\n                                <i class=\"voyager-archive\"></i>\n                            </div>\n                            <div v-else-if=\"fileIs(selected_file, 'folder')\">\n                                <i class=\"voyager-folder\"></i>\n                            </div>\n                            <div v-else>\n                                <i class=\"voyager-file-text\"></i>\n                            </div>\n                        </div>\n                        <div class=\"detail_info\">\n                            <span>\n                                <h4>{{ __('voyager::media.title') }}:</h4>\n                                <input v-if=\"allowRename\" type=\"text\" class=\"form-control\" :value=\"selected_file.name\" @keydown.enter.prevent=\"renameFile\">\n                                <p v-else>@{{ selected_file.name }}</p>\n                            </span>\n                            <span>\n                                <h4>{{ __('voyager::media.type') }}:</h4>\n                                <p>@{{ selected_file.type }}</p>\n                            </span>\n\n                            <template v-if=\"!fileIs(selected_file, 'folder')\">\n                                <span>\n                                    <h4>{{ __('voyager::media.size') }}:</h4>\n                                    <p><span class=\"selected_file_size\">@{{ bytesToSize(selected_file.size) }}</span></p>\n                                </span>\n                                <span>\n                                    <h4>{{ __('voyager::media.public_url') }}:</h4>\n                                    <p><a :href=\"selected_file.path\" target=\"_blank\">{{ __('voyager::generic.click_here') }}</a></p>\n                                </span>\n                                <span>\n                                    <h4>{{ __('voyager::media.last_modified') }}:</h4>\n                                    <p>@{{ dateFilter(selected_file.last_modified) }}</p>\n                                </span>\n                            </template>\n\n                            <span v-if=\"fileIs(selected_file, 'image') && selected_file.thumbnails.length > 0\">\n                                <h4>Thumbnails</h4><br>\n                                <ul>\n                                    <li v-for=\"thumbnail in selected_file.thumbnails\">\n                                        <a :href=\"thumbnail.path\" target=\"_blank\">\n                                            @{{ thumbnail.thumb_name }}\n                                        </a>\n                                    </li>\n                                </ul>\n                            </span>\n                        </div>\n                    </div>\n                    <div v-else class=\"right_none_selected\">\n                        <i class=\"voyager-cursor\"></i>\n                        <p>{{ __('voyager::media.nothing_selected') }}</p>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <!-- Image Modal -->\n    <div class=\"modal fade\" :id=\"'imagemodal_'+this._uid\" v-if=\"selected_file && fileIs(selected_file, 'image')\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>\n                </div>\n                <div class=\"modal-body\">\n                    <img :src=\"selected_file.path\" class=\"img img-responsive\" style=\"margin: 0 auto;\">\n                </div>\n\n                <div class=\"modal-footer text-left\">\n                    <small class=\"image-title\">@{{ selected_file.name }}</small>\n                </div>\n\n            </div>\n        </div>\n    </div>\n    <!-- End Image Modal -->\n\n    <!-- New Folder Modal -->\n    <div class=\"modal fade modal-info\" :id=\"'create_dir_modal_'+this._uid\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-folder\"></i> {{ __('voyager::media.add_new_folder') }}</h4>\n                </div>\n\n                <div class=\"modal-body\">\n                    <input name=\"new_folder_name\" placeholder=\"{{ __('voyager::media.new_folder_name') }}\" class=\"form-control\" value=\"\" v-model=\"modals.new_folder.name\" />\n                </div>\n\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                    <button type=\"button\" class=\"btn btn-info\" v-on:click=\"createFolder\">{{ __('voyager::media.create_new_folder') }}\n                    </button>\n                </div>\n            </div>\n        </div>\n    </div>\n    <!-- End New Folder Modal -->\n\n    <!-- Delete File Modal -->\n    <div class=\"modal fade modal-danger\" :id=\"'confirm_delete_modal_'+this._uid\" v-if=\"allowDelete\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-warning\"></i> {{ __('voyager::generic.are_you_sure') }}</h4>\n                </div>\n\n                <div class=\"modal-body\">\n                    <h4>{{ __('voyager::media.delete_question') }}</h4>\n                    <ul>\n                        <li v-for=\"file in selected_files\">@{{ file.name }}</li>\n                    </ul>\n                    <h5 class=\"folder_warning\">\n                        <i class=\"voyager-warning\"></i> {{ __('voyager::media.delete_folder_question') }}\n                    </h5>\n                </div>\n\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                    <button type=\"button\" class=\"btn btn-danger\" v-on:click=\"deleteFiles\">{{ __('voyager::generic.delete_confirm') }}\n                    </button>\n                </div>\n            </div>\n        </div>\n    </div>\n    <!-- End Delete File Modal -->\n\n    <!-- Move Files Modal -->\n    <div class=\"modal fade modal-warning\" :id=\"'move_files_modal_'+this._uid\" v-if=\"allowMove\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\"\n                            aria-hidden=\"true\">&times;</button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-move\"></i> {{ __('voyager::media.move_file_folder') }}</h4>\n                </div>\n\n                <div class=\"modal-body\">\n                    <h4>{{ __('voyager::media.destination_folder') }}</h4>\n                    <select class=\"form-control\" v-model=\"modals.move_files.destination\">\n                        <option value=\"\" disabled>{{ __('voyager::media.destination_folder') }}</option>\n                        <option v-if=\"current_folder != basePath && showFolders\" value=\"/../\">../</option>\n                        <option v-for=\"file in files\" v-if=\"file.type == 'folder' && !selected_files.includes(file)\" :value=\"current_folder+'/'+file.name\">@{{ file.name }}</option>\n                    </select>\n                </div>\n\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                    <button type=\"button\" class=\"btn btn-warning\" v-on:click=\"moveFiles\">{{ __('voyager::generic.move') }}</button>\n                </div>\n            </div>\n        </div>\n    </div>\n    <!-- End Move File Modal -->\n\n    <!-- Crop Image Modal -->\n    <div class=\"modal fade modal-warning\" :id=\"'crop_modal_'+this._uid\" v-if=\"allowCrop\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>\n                    <h4 class=\"modal-title\">{{ __('voyager::media.crop_image') }}</h4>\n                </div>\n\n                <div class=\"modal-body\">\n                    <div class=\"crop-container\">\n                        <img :id=\"'cropping-image_'+this._uid\" v-if=\"selected_files.length == 1 && fileIs(selected_file, 'image')\" class=\"img img-responsive\" :src=\"selected_file.path + '?' + selected_file.last_modified\" />\n                    </div>\n                    <div class=\"new-image-info\">\n                        {{ __('voyager::media.width') }} <span :id=\"'new-image-width_'+this._uid\"></span>, {{ __('voyager::media.height') }}<span :id=\"'new-image-height_'+this._uid\"></span>\n                    </div>\n                </div>\n\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                    <button type=\"button\" class=\"btn btn-warning\" v-on:click=\"crop(false)\">{{ __('voyager::media.crop') }}</button>\n                    <button type=\"button\" class=\"btn btn-warning\" v-on:click=\"crop(true)\">{{ __('voyager::media.crop_and_create') }}</button>\n                </div>\n            </div>\n        </div>\n    </div>\n    <!-- End Crop Image Modal -->\n</div>\n@endsection\n\n<script>\n    Vue.component('media-manager', {\n        template: `@yield('media-manager')`,\n        props: {\n            basePath: {\n                type: String,\n                default: '/'\n            },\n            filename: {\n                type: String,\n                default: null\n            },\n            allowMultiSelect: {\n                type: Boolean,\n                default: true\n            },\n            maxSelectedFiles: {\n                type: Number,\n                default: 0\n            },\n            minSelectedFiles: {\n                type: Number,\n                default: 0\n            },\n            showFolders: {\n                type: Boolean,\n                default: true\n            },\n            showToolbar: {\n                type: Boolean,\n                default: true\n            },\n            allowUpload: {\n                type: Boolean,\n                default: true\n            },\n            allowMove: {\n                type: Boolean,\n                default: true\n            },\n            allowDelete: {\n                type: Boolean,\n                default: true\n            },\n            allowCreateFolder: {\n                type: Boolean,\n                default: true\n            },\n            allowRename: {\n                type: Boolean,\n                default: true\n            },\n            allowCrop: {\n                type: Boolean,\n                default: true\n            },\n            allowedTypes: {\n                type: Array,\n                default: function() {\n                    return [];\n                }\n            },\n            preSelect: {\n                type: Boolean,\n                default: true,\n            },\n            element: {\n                type: String,\n                default: \"\"\n            },\n            details: {\n                type: Object,\n                default: function() {\n                    return {};\n                }\n            },\n            expanded: {\n                type: Boolean,\n                default: true,\n            },\n        },\n        data: function() {\n            return {\n                current_folder: this.basePath,\n\t\t  \t\tselected_files: [],\n                files: [],\n\t\t  \t\tis_loading: true,\n                hidden_element: null,\n                isExpanded: this.expanded,\n                modals: {\n                    new_folder: {\n                        name: ''\n                    },\n                    move_files: {\n                        destination: ''\n                    }\n                }\n            };\n        },\n        computed: {\n            selected_file: function() {\n                return this.selected_files[0];\n            }\n        },\n        methods: {\n            getFiles: function() {\n                var vm = this;\n                vm.is_loading = true;\n                $.post('{{ route('voyager.media.files') }}', { folder: vm.current_folder, _token: '{{ csrf_token() }}', details: vm.details }, function(data) {\n                    vm.files = [];\n                    for (var i = 0, file; file = data[i]; i++) {\n                        if (vm.filter(file)) {\n                            vm.files.push(file);\n                        }\n                    }\n                    vm.selected_files = [];\n                    if (vm.preSelect && data.length > 0) {\n                        vm.selected_files.push(data[0]);\n                    }\n\t\t\t\t\tvm.is_loading = false;\n\t\t\t\t});\n            },\n            selectFile: function(file, e) {\n                if ((!e.ctrlKey && !e.metaKey && !e.shiftKey) || !this.allowMultiSelect) {\n                    this.selected_files = [];\n                }\n\n                if (e.shiftKey && this.allowMultiSelect && this.selected_files.length == 1) {\n                    var index = null;\n                    var start = 0;\n                    for (var i = 0, cfile; cfile = this.files[i]; i++) {\n                        if (cfile === this.selected_file) {\n                            start = i;\n                            break;\n                        }\n                    }\n\n                    var end = 0;\n                    for (var i = 0, cfile; cfile = this.files[i]; i++) {\n                        if (cfile === file) {\n                            end = i;\n                            break;\n                        }\n                    }\n\n                    for (var i = start; i < end; i++) {\n                        index = this.selected_files.indexOf(this.files[i]);\n                        if (index === -1) {\n                            this.selected_files.push(this.files[i]);\n                        }\n                    }\n                }\n\n                index = this.selected_files.indexOf(file);\n                if (index === -1) {\n                    this.selected_files.push(file);\n                }\n\n                if (this.selected_files.length == 1) {\n                    var vm = this;\n                    Vue.nextTick(function () {\n                        if (vm.fileIs(vm.selected_file, 'video')) {\n                            vm.$refs.videoplayer.load();\n                        } else if (vm.fileIs(vm.selected_file, 'audio')) {\n                            vm.$refs.audioplayer.load();\n                        }\n                    });\n                }\n            },\n            openFile: function(file) {\n                if (file.type == 'folder') {\n                    this.current_folder += file.name+\"/\";\n                    this.getFiles();\n                } else if (this.hidden_element) {\n                    this.addFileToInput(file);\n                } else {\n                    if (this.fileIs(this.selected_file, 'image')) {\n                        $('#imagemodal_' + this._uid).modal('show');\n                    } else {\n                        // ...\n                    }\n                }\n            },\n            isFileSelected: function(file) {\n                return this.selected_files.includes(file);\n            },\n            fileIs: function(file, type) {\n                if (typeof file === 'string') {\n                    if (type == 'image') {\n                        return this.endsWithAny(['jpg', 'jpeg', 'png', 'bmp'], file.toLowerCase());\n                    }\n                    //Todo: add other types\n                } else {\n                    return file.type.includes(type);\n                }\n\n                return false;\n\t\t\t},\n            getCurrentPath: function() {\n                var path = this.current_folder.replace(this.basePath, '').split('/').filter(function (el) {\n                    return el != '';\n                });\n\n                return path;\n            },\n            setCurrentPath: function(i) {\n                if (i == -1) {\n                    this.current_folder = this.basePath;\n                } else {\n                    var path = this.getCurrentPath();\n                    path.length = i + 1;\n                    this.current_folder = this.basePath+path.join('/') + '/';\n                }\n\n                this.getFiles();\n            },\n            filter: function(file) {\n                if (this.allowedTypes.length > 0) {\n                    if (file.type != 'folder') {\n                        for (var i = 0, type; type = this.allowedTypes[i]; i++) {\n                            if (file.type.includes(type)) {\n                                return true;\n                            }\n                        }\n                    }\n                }\n\n                if (file.type == 'folder' && this.showFolders) {\n                    return true;\n                } else if (file.type == 'folder' && !this.showFolders) {\n                    return false;\n                }\n                if (this.allowedTypes.length == 0) {\n                    return true;\n                }\n\n                return false;\n            },\n            addFileToInput: function(file) {\n                if (file.type != 'folder') {\n                    if (!this.allowMultiSelect) {\n                        this.hidden_element.value = file.relative_path;\n                    } else {\n                        var content = JSON.parse(this.hidden_element.value);\n                        if (content.indexOf(file.relative_path) !== -1) {\n                            return;\n                        }\n                        if (content.length >= this.maxSelectedFiles && this.maxSelectedFiles > 0) {\n                            var msg_sing = \"{{ trans_choice('voyager::media.max_files_select', 1) }}\";\n                            var msg_plur = \"{{ trans_choice('voyager::media.max_files_select', 2) }}\";\n                            if (this.maxSelectedFiles == 1) {\n                                toastr.error(msg_sing);\n                            } else {\n                                toastr.error(msg_plur.replace('2', this.maxSelectedFiles));\n                            }\n                        } else {\n                            content.push(file.relative_path);\n                            this.hidden_element.value = JSON.stringify(content);\n                        }\n                    }\n                    this.$forceUpdate();\n                }\n            },\n            removeFileFromInput: function(path) {\n                if (this.allowMultiSelect) {\n                    var content = JSON.parse(this.hidden_element.value);\n                    if (content.indexOf(path) !== -1) {\n                        content.splice(content.indexOf(path), 1);\n                        this.hidden_element.value = JSON.stringify(content);\n                        this.$forceUpdate();\n                    }\n                } else {\n                    this.hidden_element.value = '';\n                }\n            },\n            getSelectedFiles: function() {\n                if (!this.allowMultiSelect) {\n                    var content = [];\n                    if (this.hidden_element.value != '') {\n                        content.push(this.hidden_element.value);\n                    }\n\n                    return content;\n                } else {\n                    return JSON.parse(this.hidden_element.value);\n                }\n            },\n            renameFile: function(object) {\n                var vm = this;\n                if (!this.allowRename || vm.selected_file.name == object.target.value) {\n                    return;\n                }\n                $.post('{{ route('voyager.media.rename') }}', {\n                    folder_location: vm.current_folder,\n                    filename: vm.selected_file.name,\n                    new_filename: object.target.value,\n                    _token: '{{ csrf_token() }}'\n                }, function(data){\n\t\t\t\t\tif (data.success == true) {\n\t\t\t\t\t\ttoastr.success('{{ __('voyager::media.success_renamed') }}', \"{{ __('voyager::generic.sweet_success') }}\");\n\t\t\t\t\t\tvm.getFiles();\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttoastr.error(data.error, \"{{ __('voyager::generic.whoopsie') }}\");\n\t\t\t\t\t}\n\t\t\t\t});\n            },\n            createFolder: function(e) {\n                if (!this.allowCreateFolder) {\n                    return;\n                }\n                var vm = this;\n                var name = this.modals.new_folder.name;\n                $.post('{{ route('voyager.media.new_folder') }}', { new_folder: vm.current_folder+'/'+name, _token: '{{ csrf_token() }}' }, function(data) {\n\t\t\t\t\tif(data.success == true){\n\t\t\t\t\t\ttoastr.success('{{ __('voyager::generic.successfully_created') }} ' + name, \"{{ __('voyager::generic.sweet_success') }}\");\n\t\t\t\t\t\tvm.getFiles();\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttoastr.error(data.error, \"{{ __('voyager::generic.whoopsie') }}\");\n\t\t\t\t\t}\n                    vm.modals.new_folder.name = '';\n\t\t\t\t\t$('#create_dir_modal_'+vm._uid).modal('hide');\n\t\t\t\t});\n            },\n            deleteFiles: function() {\n                if (!this.allowDelete) {\n                    return;\n                }\n                var vm = this;\n                $.post('{{ route('voyager.media.delete') }}', {\n                    path: vm.current_folder,\n                    files: vm.selected_files,\n                    _token: '{{ csrf_token() }}'\n                }, function(data){\n\t\t\t\t\tif(data.success == true){\n\t\t\t\t\t\ttoastr.success('', \"{{ __('voyager::generic.sweet_success') }}\");\n\t\t\t\t\t\tvm.getFiles();\n\t\t\t\t\t\t$('#confirm_delete_modal_'+vm._uid).modal('hide');\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttoastr.error(data.error, \"{{ __('voyager::generic.whoopsie') }}\");\n                        vm.getFiles();\n\t\t\t\t\t\t$('#confirm_delete_modal_'+vm._uid).modal('hide');\n\t\t\t\t\t}\n\t\t\t\t});\n            },\n            moveFiles: function(e) {\n                if (!this.allowMove) {\n                    return;\n                }\n                var vm = this;\n                var destination = this.modals.move_files.destination;\n                if (destination === '') {\n                    return;\n                }\n                $('#move_files_modal_'+vm._uid).modal('hide');\n\t\t\t\t$.post('{{ route('voyager.media.move') }}', {\n                    path: vm.current_folder,\n                    files: vm.selected_files,\n                    destination: destination,\n                    _token: '{{ csrf_token() }}'\n                }, function(data){\n\t\t\t\t\tif(data.success == true){\n\t\t\t\t\t\ttoastr.success('{{ __('voyager::media.success_moved') }}', \"{{ __('voyager::generic.sweet_success') }}\");\n\t\t\t\t\t\tvm.getFiles();\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttoastr.error(data.error, \"{{ __('voyager::generic.whoopsie') }}\");\n\t\t\t\t\t}\n\n                    vm.modals.move_files.destination = '';\n\t\t\t\t});\n            },\n            crop: function(mode) {\n                if (!this.allowCrop) {\n                    return;\n                }\n                if (!mode) {\n                    if (!window.confirm('{{ __('voyager::media.crop_override_confirm') }}')) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n                }\n\n                croppedData.originImageName = this.selected_file.name;\n\t\t\t\tcroppedData.upload_path = this.current_folder;\n\t\t\t\tcroppedData.createMode = mode;\n\n                var vm = this;\n                var postData = Object.assign(croppedData, { _token: '{{ csrf_token() }}' });\n\t\t\t\t$.post('{{ route('voyager.media.crop') }}', postData, function(data) {\n\t\t\t\t\tif (data.success) {\n\t\t\t\t\t\ttoastr.success(data.message);\n\t\t\t\t\t\tvm.getFiles();\n\t\t\t\t\t\t$('#crop_modal_'+vm._uid).modal('hide');\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttoastr.error(data.error, \"{{ __('voyager::generic.whoopsie') }}\");\n\t\t\t\t\t}\n\t\t\t\t});\n            },\n            addSelectedFiles: function () {\n                var vm = this;\n                for (i = 0; i < vm.selected_files.length; i++) {\n                    vm.openFile(vm.selected_files[i]);\n                }\n            },\n            bytesToSize: function(bytes) {\n\t\t\t\tvar sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n\t\t\t\tif (bytes == 0) return '0 Bytes';\n\t\t\t\tvar i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));\n\t\t\t\treturn Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];\n\t\t\t},\n            getFileName: function(name) {\n                var name = name.split('/');\n                return name[name.length -1];\n            },\n            imgIcon: function(path) {\n                path = path.replace(/\\\\/g,\"/\");\n\t\t\t\treturn 'background-size: cover; background-image: url(\"' + path + '\"); background-repeat:no-repeat; background-position:center center;display:inline-block; width:100%; height:100%;';\n\t\t\t},\n            dateFilter: function(date) {\n                if (!date) {\n                    return null;\n                }\n                var date = new Date(date * 1000);\n\n                var month = \"0\" + (date.getMonth() + 1);\n                var minutes = \"0\" + date.getMinutes();\n                var seconds = \"0\" + date.getSeconds();\n\n                var dateFormated = date.getFullYear() + '-' + month.substr(-2) + '-' + date.getDate() + ' ' + date.getHours() + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);\n\n                return dateFormated;\n            },\n            endsWithAny: function(suffixes, string) {\n                return suffixes.some(function (suffix) {\n                    return string.endsWith(suffix);\n                });\n            }\n        },\n        mounted: function() {\n            this.getFiles();\n            var vm = this;\n\n            if (this.element != '') {\n                this.hidden_element = document.querySelector(this.element);\n                if (!this.hidden_element) {\n                    console.error('Element \"'+this.element+'\" could not be found.');\n                } else {\n                    if (this.maxSelectedFiles > 1 && this.hidden_element.value == '') {\n                        this.hidden_element.value = '[]';\n                    }\n                }\n            }\n\n            //Key events\n            this.onkeydown = function(evt) {\n                evt = evt || window.event;\n                if (evt.keyCode == 39) {\n                    evt.preventDefault();\n                    for (var i = 0, file; file = vm.files[i]; i++) {\n                        if (file === vm.selected_file) {\n                            i = i + 1; // increase i by one\n                            i = i % vm.files.length;\n                            vm.selectFile(vm.files[i], evt);\n                            break;\n                        }\n                    }\n                } else if (evt.keyCode == 37) {\n                    evt.preventDefault();\n                    for (var i = 0, file; file = vm.files[i]; i++) {\n                        if (file === vm.selected_file) {\n                            if (i === 0) {\n                                i = vm.files.length;\n                            }\n                            i = i - 1;\n                            vm.selectFile(vm.files[i], evt);\n                            break;\n                        }\n                    }\n                } else if (evt.keyCode == 13) {\n                    evt.preventDefault();\n                    if (evt.target.tagName != 'INPUT') {\n                        vm.openFile(vm.selected_file, null);\n                    }\n                }\n            };\n            //Dropzone\n            var dropzone = $(vm.$el).first().find('#upload').first();\n            var progress = $(vm.$el).first().find('#uploadProgress').first();\n            var progress_bar = $(vm.$el).first().find('#uploadProgress .progress-bar').first();\n            if (this.allowUpload && !dropzone.hasClass('dz-clickable')) {\n                dropzone.dropzone({\n                    timeout: 180000,\n                    url: '{{ route('voyager.media.upload') }}',\n                    previewsContainer: \"#uploadPreview\",\n                    totaluploadprogress: function(uploadProgress, totalBytes, totalBytesSent) {\n                        progress_bar.css('width', uploadProgress + '%');\n    \t\t\t\t\tif (uploadProgress == 100) {\n    \t\t\t\t\t\tprogress.delay(1500).slideUp(function(){\n    \t\t\t\t\t\t\tprogress_bar.css('width', '0%');\n    \t\t\t\t\t\t});\n    \t\t\t\t\t}\n                    },\n                    processing: function(){\n                        progress.fadeIn();\n                    },\n                    sending: function(file, xhr, formData) {\n                        formData.append(\"_token\", '{{ csrf_token() }}');\n                        formData.append(\"upload_path\", vm.current_folder);\n                        formData.append(\"filename\", vm.filename);\n                        formData.append(\"details\", JSON.stringify(vm.details));\n                    },\n                    success: function(e, res) {\n                        if (res.success) {\n                            toastr.success(res.message, \"{{ __('voyager::generic.sweet_success') }}\");\n                        } else {\n                            toastr.error(res.message, \"{{ __('voyager::generic.whoopsie') }}\");\n                        }\n                    },\n                    error: function(e, res, xhr) {\n                        toastr.error(res, \"{{ __('voyager::generic.whoopsie') }}\");\n                    },\n                    queuecomplete: function() {\n                        vm.getFiles();\n                    }\n                });\n            }\n\n            //Cropper\n            if (this.allowCrop) {\n                var cropper = $(vm.$el).first().find('#crop_modal_'+vm._uid).first();\n                cropper.on('shown.bs.modal', function (e) {\n                    if (typeof cropper !== 'undefined' && cropper instanceof Cropper) {\n    \t\t\t\t\tcropper.destroy();\n    \t\t\t\t}\n    \t\t\t\tvar croppingImage = document.getElementById('cropping-image_'+vm._uid);\n    \t\t\t\tcropper = new Cropper(croppingImage, {\n    \t\t\t\t\tcrop: function(e) {\n    \t\t\t\t\t\tdocument.getElementById('new-image-width_'+vm._uid).innerText = Math.round(e.detail.width) + 'px';\n    \t\t\t\t\t\tdocument.getElementById('new-image-height_'+vm._uid).innerText = Math.round(e.detail.height) + 'px';\n    \t\t\t\t\t\tcroppedData = {\n    \t\t\t\t\t\t\tx: Math.round(e.detail.x),\n    \t\t\t\t\t\t\ty: Math.round(e.detail.y),\n    \t\t\t\t\t\t\theight: Math.round(e.detail.height),\n    \t\t\t\t\t\t\twidth: Math.round(e.detail.width)\n    \t\t\t\t\t\t};\n    \t\t\t\t\t}\n    \t\t\t\t});\n    \t\t\t});\n            }\n\n            $(document).ready(function () {\n                $(\".form-edit-add\").submit(function (e) {\n                    if (vm.hidden_element) {\n                        if (vm.maxSelectedFiles > 1) {\n                            var content = JSON.parse(vm.hidden_element.value);\n                            if (content.length < vm.minSelectedFiles) {\n                                e.preventDefault();\n                                var msg_sing = \"{{ trans_choice('voyager::media.min_files_select', 1) }}\";\n                                var msg_plur = \"{{ trans_choice('voyager::media.min_files_select', 2) }}\";\n                                if (vm.minSelectedFiles == 1) {\n                                    toastr.error(msg_sing);\n                                } else {\n                                    toastr.error(msg_plur.replace('2', vm.minSelectedFiles));\n                                }\n                            }\n                        } else {\n                            if (vm.minSelectedFiles > 0 && vm.hidden_element.value == '') {\n                                e.preventDefault();\n                                toastr.error(\"{{ trans_choice('voyager::media.min_files_select', 1) }}\");\n                            }\n                        }\n                    }\n                });\n\n                //Nestable\n                $('#dd_'+vm._uid).nestable({\n                    maxDepth: 1,\n                    handleClass: 'file_link',\n                    collapseBtnHTML: '',\n                    expandBtnHTML: '',\n                    callback: function(l, e) {\n                        if (vm.allowMultiSelect) {\n                            var new_content = [];\n                            var object = $('#dd_'+vm._uid).nestable('serialize');\n                            for (var key in object) {\n                                new_content.push(object[key].url);\n                            }\n                            vm.hidden_element.value = JSON.stringify(new_content);\n                        }\n                    }\n                });\n\n                $('#create_dir_modal_' + vm._uid).on('hidden.bs.modal', function () {\n                    vm.modals.new_folder.name = '';\n                });\n\n                $('#move_files_modal_' + vm._uid).on('hidden.bs.modal', function () {\n                    vm.modals.move_files.destination = '';\n                });\n            });\n        },\n    });\n</script>\n<style>\n.dd-placeholder {\n    flex: 1;\n    width: 100%;\n    min-width: 200px;\n    max-width: 250px;\n}\n</style>\n"
  },
  {
    "path": "resources/views/menu/admin.blade.php",
    "content": "<ol class=\"dd-list\">\n\n@foreach ($items as $item)\n\n    <li class=\"dd-item\" data-id=\"{{ $item->id }}\">\n        <div class=\"pull-right item_actions\">\n            <div class=\"btn btn-sm btn-danger pull-right delete\" data-id=\"{{ $item->id }}\">\n                <i class=\"voyager-trash\"></i> {{ __('voyager::generic.delete') }}\n            </div>\n            <div class=\"btn btn-sm btn-primary pull-right edit\"\n                data-id=\"{{ $item->id }}\"\n                data-title=\"{{ $item->title }}\"\n                data-url=\"{{ $item->url }}\"\n                data-target=\"{{ $item->target }}\"\n                data-icon_class=\"{{ $item->icon_class }}\"\n                data-color=\"{{ $item->color }}\"\n                data-route=\"{{ $item->route }}\"\n                data-parameters=\"{{ json_encode($item->parameters) }}\"\n            >\n                <i class=\"voyager-edit\"></i> {{ __('voyager::generic.edit') }}\n            </div>\n        </div>\n        <div class=\"dd-handle\">\n            @if($options->isModelTranslatable)\n                @include('voyager::multilingual.input-hidden', [\n                    'isModelTranslatable' => true,\n                    '_field_name'         => 'title'.$item->id,\n                    '_field_trans'        => json_encode($item->getTranslationsOf('title'))\n                ])\n            @endif\n            <span>{{ $item->title }}</span> <small class=\"url\">{{ $item->link() }}</small>\n        </div>\n        @if(!$item->children->isEmpty())\n            @include('voyager::menu.admin', ['items' => $item->children])\n        @endif\n    </li>\n\n@endforeach\n\n</ol>\n"
  },
  {
    "path": "resources/views/menu/bootstrap.blade.php",
    "content": "@if(!isset($innerLoop))\n<ul class=\"nav navbar-nav\">\n@else\n<ul class=\"dropdown-menu\">\n@endif\n\n@php\n\n    if (Voyager::translatable($items)) {\n        $items = $items->load('translations');\n    }\n\n@endphp\n\n@foreach ($items as $item)\n\n    @php\n\n        $originalItem = $item;\n        if (Voyager::translatable($item)) {\n            $item = $item->translate($options->locale);\n        }\n\n        $listItemClass = null;\n        $linkAttributes =  null;\n        $styles = null;\n        $icon = null;\n        $caret = null;\n\n        // Background Color or Color\n        if (isset($options->color) && $options->color == true) {\n            $styles = 'color:'.$item->color;\n        }\n        if (isset($options->background) && $options->background == true) {\n            $styles = 'background-color:'.$item->color;\n        }\n\n        // With Children Attributes\n        if(!$originalItem->children->isEmpty()) {\n            $linkAttributes =  'class=\"dropdown-toggle\" data-toggle=\"dropdown\"';\n            $caret = '<span class=\"caret\"></span>';\n\n            if(url($item->link()) == url()->current()){\n                $listItemClass = 'dropdown active';\n            }else{\n                $listItemClass = 'dropdown';\n            }\n        }\n\n        // Set Icon\n        if(isset($options->icon) && $options->icon == true){\n            $icon = '<i class=\"' . $item->icon_class . '\"></i>';\n        }\n\n    @endphp\n\n    <li class=\"{{ $listItemClass }}\">\n        <a href=\"{{ url($item->link()) }}\" target=\"{{ $item->target }}\" style=\"{{ $styles }}\" {!! $linkAttributes ?? '' !!}>\n            {!! $icon !!}\n            <span>{{ $item->title }}</span>\n            {!! $caret !!}\n        </a>\n        @if(!$originalItem->children->isEmpty())\n        @include('voyager::menu.bootstrap', ['items' => $originalItem->children, 'options' => $options, 'innerLoop' => true])\n        @endif\n    </li>\n@endforeach\n\n</ul>\n"
  },
  {
    "path": "resources/views/menu/default.blade.php",
    "content": "<ul>\n\n@php\n\n    if (Voyager::translatable($items)) {\n        $items = $items->load('translations');\n    }\n\n@endphp\n\n@foreach ($items as $item)\n\n    @php\n\n        $originalItem = $item;\n        if (Voyager::translatable($item)) {\n            $item = $item->translate($options->locale);\n        }\n\n        $isActive = null;\n        $styles = null;\n        $icon = null;\n\n        // Background Color or Color\n        if (isset($options->color) && $options->color == true) {\n            $styles = 'color:'.$item->color;\n        }\n        if (isset($options->background) && $options->background == true) {\n            $styles = 'background-color:'.$item->color;\n        }\n\n        // Check if link is current\n        if(url($item->link()) == url()->current()){\n            $isActive = 'active';\n        }\n\n        // Set Icon\n        if(isset($options->icon) && $options->icon == true){\n            $icon = '<i class=\"' . $item->icon_class . '\"></i>';\n        }\n\n    @endphp\n\n    <li class=\"{{ $isActive }}\">\n        <a href=\"{{ url($item->link()) }}\" target=\"{{ $item->target }}\" style=\"{{ $styles }}\">\n            {!! $icon !!}\n            <span>{{ $item->title }}</span>\n        </a>\n        @if(!$originalItem->children->isEmpty())\n            @include('voyager::menu.default', ['items' => $originalItem->children, 'options' => $options])\n        @endif\n    </li>\n@endforeach\n\n</ul>\n"
  },
  {
    "path": "resources/views/menus/browse.blade.php",
    "content": "@extends('voyager::master')\n\n@section('page_title', __('voyager::generic.viewing').' '.$dataType->getTranslatedAttribute('display_name_plural'))\n\n@section('page_header')\n    <h1 class=\"page-title\">\n        <i class=\"voyager-list-add\"></i> {{ $dataType->getTranslatedAttribute('display_name_plural') }}\n        @can('add',app($dataType->model_name))\n            <a href=\"{{ route('voyager.'.$dataType->slug.'.create') }}\" class=\"btn btn-success\">\n                <i class=\"voyager-plus\"></i> {{ __('voyager::generic.add_new') }}\n            </a>\n        @endcan\n    </h1>\n@stop\n\n@section('content')\n    @include('voyager::menus.partial.notice')\n\n    <div class=\"page-content container-fluid\">\n        @include('voyager::alerts')\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <div class=\"panel panel-bordered\">\n                    <div class=\"panel-body\">\n                        <table id=\"dataTable\" class=\"table table-hover\">\n                            <thead>\n                            <tr>\n                                @foreach($dataType->browseRows as $row)\n                                <th>{{ $row->display_name }}</th>\n                                @endforeach\n                                <th class=\"actions text-right\">{{ __('voyager::generic.actions') }}</th>\n                            </tr>\n                            </thead>\n                            <tbody>\n                                @foreach($dataTypeContent as $data)\n                                <tr>\n                                    @foreach($dataType->browseRows as $row)\n                                    <td>\n                                        @if($row->type == 'image')\n                                            <img src=\"@if( strpos($data->{$row->field}, 'http://') === false && strpos($data->{$row->field}, 'https://') === false){{ Voyager::image( $data->{$row->field} ) }}@else{{ $data->{$row->field} }}@endif\" style=\"width:100px\">\n                                        @else\n                                            {{ $data->{$row->field} }}\n                                        @endif\n                                    </td>\n                                    @endforeach\n                                    <td class=\"no-sort no-click bread-actions\">\n                                        @can('delete', $data)\n                                            <div class=\"btn btn-sm btn-danger pull-right delete\" data-id=\"{{ $data->{$data->getKeyName()} }}\">\n                                                <i class=\"voyager-trash\"></i> {{ __('voyager::generic.delete') }}\n                                            </div>\n                                        @endcan\n                                        @can('edit', $data)\n                                            <a href=\"{{ route('voyager.'.$dataType->slug.'.edit', $data->{$data->getKeyName()}) }}\" class=\"btn btn-sm btn-primary pull-right edit\">\n                                                <i class=\"voyager-edit\"></i> {{ __('voyager::generic.edit') }}\n                                            </a>\n                                        @endcan\n                                        @can('edit', $data)\n                                            <a href=\"{{ route('voyager.'.$dataType->slug.'.builder', $data->{$data->getKeyName()}) }}\" class=\"btn btn-sm btn-success pull-right\">\n                                                <i class=\"voyager-list\"></i> {{ __('voyager::generic.builder') }}\n                                            </a>\n                                        @endcan\n                                    </td>\n                                </tr>\n                                @endforeach\n                            </tbody>\n                        </table>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"modal modal-danger fade\" tabindex=\"-1\" id=\"delete_modal\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"{{ __('voyager::generic.close') }}\">\n                        <span aria-hidden=\"true\">&times;</span>\n                    </button>\n                    <h4 class=\"modal-title\">\n                        <i class=\"voyager-trash\"></i> {{ __('voyager::generic.delete_question') }} {{ $dataType->getTranslatedAttribute('display_name_singular') }}?\n                    </h4>\n                </div>\n                <div class=\"modal-footer\">\n                    <form action=\"#\" id=\"delete_form\" method=\"POST\">\n                        {{ method_field(\"DELETE\") }}\n                        {{ csrf_field() }}\n                        <input type=\"submit\" class=\"btn btn-danger pull-right delete-confirm\" value=\"{{ __('voyager::generic.delete_this_confirm') }} {{ $dataType->getTranslatedAttribute('display_name_singular') }}\">\n                    </form>\n                    <button type=\"button\" class=\"btn btn-default pull-right\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                </div>\n            </div>\n        </div>\n    </div>\n@stop\n\n@section('javascript')\n    <!-- DataTables -->\n    <script>\n        $(document).ready(function () {\n            $('#dataTable').DataTable({\n                \"order\": [],\n                \"language\": {!! json_encode(__('voyager::datatable'), true) !!},\n                \"columnDefs\": [{\"targets\": -1, \"searchable\":  false, \"orderable\": false}]\n                @if(config('dashboard.data_tables.responsive')), responsive: true @endif\n            });\n        });\n\n        $('td').on('click', '.delete', function (e) {\n            $('#delete_form')[0].action = '{{ route('voyager.'.$dataType->slug.'.destroy', ['id' => '__menu']) }}'.replace('__menu', $(this).data('id'));\n\n            $('#delete_modal').modal('show');\n        });\n    </script>\n@stop\n"
  },
  {
    "path": "resources/views/menus/builder.blade.php",
    "content": "@extends('voyager::master')\n\n@section('page_title', __('voyager::generic.menu_builder'))\n\n@section('page_header')\n    <h1 class=\"page-title\">\n        <i class=\"voyager-list\"></i>{{ __('voyager::generic.menu_builder') }} ({{ $menu->name }})\n        <div class=\"btn btn-success add_item\"><i class=\"voyager-plus\"></i> {{ __('voyager::menu_builder.new_menu_item') }}</div>\n    </h1>\n    @include('voyager::multilingual.language-selector')\n@stop\n\n@section('content')\n    @include('voyager::menus.partial.notice')\n\n    <div class=\"page-content container-fluid\">\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <div class=\"panel panel-bordered\">\n                    <div class=\"panel-heading\">\n                        <p class=\"panel-title\" style=\"color:#777\">{{ __('voyager::menu_builder.drag_drop_info') }}</p>\n                    </div>\n\n                    <div class=\"panel-body\" style=\"padding:30px;\">\n                        <div class=\"dd\">\n                            {!! menu($menu->name, 'admin', ['isModelTranslatable' => $isModelTranslatable]) !!}\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n\n    <div class=\"modal modal-danger fade\" tabindex=\"-1\" id=\"delete_modal\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"{{ __('voyager::generic.close') }}\"><span\n                            aria-hidden=\"true\">&times;</span></button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-trash\"></i> {{ __('voyager::menu_builder.delete_item_question') }}</h4>\n                </div>\n                <div class=\"modal-footer\">\n                    <form action=\"{{ route('voyager.menus.item.destroy', ['menu' => $menu->id, 'id' => '__id']) }}\"\n                          id=\"delete_form\"\n                          method=\"POST\">\n                        {{ method_field(\"DELETE\") }}\n                        {{ csrf_field() }}\n                        <input type=\"submit\" class=\"btn btn-danger pull-right delete-confirm\"\n                               value=\"{{ __('voyager::menu_builder.delete_item_confirm') }}\">\n                    </form>\n                    <button type=\"button\" class=\"btn btn-default pull-right\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                </div>\n            </div><!-- /.modal-content -->\n        </div><!-- /.modal-dialog -->\n    </div><!-- /.modal -->\n\n\n    <div class=\"modal modal-info fade\" tabindex=\"-1\" id=\"menu_item_modal\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"{{ __('voyager::generic.close') }}\"><span\n                                aria-hidden=\"true\">&times;</span></button>\n                    <h4 id=\"m_hd_add\" class=\"modal-title hidden\"><i class=\"voyager-plus\"></i> {{ __('voyager::menu_builder.create_new_item') }}</h4>\n                    <h4 id=\"m_hd_edit\" class=\"modal-title hidden\"><i class=\"voyager-edit\"></i> {{ __('voyager::menu_builder.edit_item') }}</h4>\n                </div>\n                <form action=\"\" id=\"m_form\" method=\"POST\"\n                      data-action-add=\"{{ route('voyager.menus.item.add', ['menu' => $menu->id]) }}\"\n                      data-action-update=\"{{ route('voyager.menus.item.update', ['menu' => $menu->id]) }}\">\n\n                    <input id=\"m_form_method\" type=\"hidden\" name=\"_method\" value=\"POST\">\n                    {{ csrf_field() }}\n                    <div class=\"modal-body\">\n                        <div>\n                            @include('voyager::multilingual.language-selector')\n                            <label for=\"name\">{{ __('voyager::menu_builder.item_title') }}</label>\n                            @include('voyager::multilingual.input-hidden', ['_field_name' => 'title', '_field_trans' => ''])\n                            <input type=\"text\" class=\"form-control\" id=\"m_title\" name=\"title\" placeholder=\"{{ __('voyager::generic.title') }}\"><br>\n                        </div>\n                        <label for=\"type\">{{ __('voyager::menu_builder.link_type') }}</label>\n                        <select id=\"m_link_type\" class=\"form-control\" name=\"type\">\n                            <option value=\"url\" selected=\"selected\">{{ __('voyager::menu_builder.static_url') }}</option>\n                            <option value=\"route\">{{ __('voyager::menu_builder.dynamic_route') }}</option>\n                        </select><br>\n                        <div id=\"m_url_type\">\n                            <label for=\"url\">{{ __('voyager::menu_builder.url') }}</label>\n                            <input type=\"text\" class=\"form-control\" id=\"m_url\" name=\"url\" placeholder=\"{{ __('voyager::generic.url') }}\"><br>\n                        </div>\n                        <div id=\"m_route_type\">\n                            <label for=\"route\">{{ __('voyager::menu_builder.item_route') }}</label>\n                            <input type=\"text\" class=\"form-control\" id=\"m_route\" name=\"route\" placeholder=\"{{ __('voyager::generic.route') }}\"><br>\n                            <label for=\"parameters\">{{ __('voyager::menu_builder.route_parameter') }}</label>\n                            <textarea rows=\"3\" class=\"form-control\" id=\"m_parameters\" name=\"parameters\" placeholder=\"{{ json_encode(['key' => 'value'], JSON_PRETTY_PRINT) }}\"></textarea><br>\n                        </div>\n                        <label for=\"icon_class\">{{ __('voyager::menu_builder.icon_class') }} <a\n                                    href=\"{{ route('voyager.compass.index') }}#fonts\"\n                                    target=\"_blank\">{!! __('voyager::menu_builder.icon_class2') !!}</label>\n                        <input type=\"text\" class=\"form-control\" id=\"m_icon_class\" name=\"icon_class\"\n                               placeholder=\"{{ __('voyager::menu_builder.icon_class_ph') }}\"><br>\n                        <label for=\"color\">{{ __('voyager::menu_builder.color') }}</label>\n                        <input type=\"color\" class=\"form-control\" id=\"m_color\" name=\"color\"\n                               placeholder=\"{{ __('voyager::menu_builder.color_ph') }}\"><br>\n                        <label for=\"target\">{{ __('voyager::menu_builder.open_in') }}</label>\n                        <select id=\"m_target\" class=\"form-control\" name=\"target\">\n                            <option value=\"_self\" selected=\"selected\">{{ __('voyager::menu_builder.open_same') }}</option>\n                            <option value=\"_blank\">{{ __('voyager::menu_builder.open_new') }}</option>\n                        </select>\n                        <input type=\"hidden\" name=\"menu_id\" value=\"{{ $menu->id }}\">\n                        <input type=\"hidden\" name=\"id\" id=\"m_id\" value=\"\">\n                    </div>\n                    <div class=\"modal-footer\">\n                        <input type=\"submit\" class=\"btn btn-success pull-right delete-confirm__\" value=\"{{ __('voyager::generic.update') }}\">\n                        <button type=\"button\" class=\"btn btn-default pull-right\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                    </div>\n                </form>\n            </div><!-- /.modal-content -->\n        </div><!-- /.modal-dialog -->\n    </div><!-- /.modal -->\n\n\n\n\n@stop\n\n@section('javascript')\n\n    <script>\n        $(document).ready(function () {\n            @if ($isModelTranslatable)\n                /**\n                 * Multilingual setup for main page\n                 */\n                $('.side-body').multilingual({\n                    \"transInputs\": '.dd-list input[data-i18n=true]'\n                });\n\n                /**\n                 * Multilingual for Add/Edit Menu\n                 */\n                $('#menu_item_modal').multilingual({\n                    \"form\":          'form',\n                    \"transInputs\":   '#menu_item_modal input[data-i18n=true]',\n                    \"langSelectors\": '.language-selector input',\n                    \"editing\":       true\n                });\n            @endif\n\n\n            $('.dd').nestable({\n                expandBtnHTML: '',\n                collapseBtnHTML: ''\n            });\n\n\n            /**\n             * Set Variables\n             */\n            var $m_modal       = $('#menu_item_modal'),\n                $m_hd_add      = $('#m_hd_add').hide().removeClass('hidden'),\n                $m_hd_edit     = $('#m_hd_edit').hide().removeClass('hidden'),\n                $m_form        = $('#m_form'),\n                $m_form_method = $('#m_form_method'),\n                $m_title       = $('#m_title'),\n                $m_title_i18n  = $('#title_i18n'),\n                $m_url_type    = $('#m_url_type'),\n                $m_url         = $('#m_url'),\n                $m_link_type   = $('#m_link_type'),\n                $m_route_type  = $('#m_route_type'),\n                $m_route       = $('#m_route'),\n                $m_parameters  = $('#m_parameters'),\n                $m_icon_class  = $('#m_icon_class'),\n                $m_color       = $('#m_color'),\n                $m_target      = $('#m_target'),\n                $m_id          = $('#m_id');\n\n            /**\n             * Add Menu\n             */\n            $('.add_item').click(function() {\n                $m_form.trigger('reset');\n                $m_form.find(\"input[type=submit]\").val('{{ __('voyager::generic.add') }}');\n                $m_modal.modal('show', {data: null});\n            });\n\n            /**\n             * Edit Menu\n             */\n            $('.item_actions').on('click', '.edit', function (e) {\n                $m_form.find(\"input[type=submit]\").val('{{ __('voyager::generic.update') }}');\n                $m_modal.modal('show', {data: $(e.currentTarget)});\n            });\n\n            /**\n             * Menu Modal is Open\n             */\n            $m_modal.on('show.bs.modal', function(e, data) {\n                var _adding      = e.relatedTarget.data ? false : true,\n                    translatable = $m_modal.data('multilingual'),\n                    $_str_i18n   = '';\n\n                if (_adding) {\n                    $m_form.attr('action', $m_form.data('action-add'));\n                    $m_form_method.val('POST');\n                    $m_hd_add.show();\n                    $m_hd_edit.hide();\n                    $m_target.val('_self').change();\n                    $m_link_type.val('url').change();\n                    $m_url.val('');\n                    $m_icon_class.val('');\n\n                } else {\n                    $m_form.attr('action', $m_form.data('action-update'));\n                    $m_form_method.val('PUT');\n                    $m_hd_add.hide();\n                    $m_hd_edit.show();\n\n                    var _src = e.relatedTarget.data, // the source\n                        id   = _src.data('id');\n\n                    $m_title.val(_src.data('title'));\n                    $m_url.val(_src.data('url'));\n                    $m_route.val(_src.data('route'));\n                    $m_parameters.val(JSON.stringify(_src.data('parameters')));\n                    $m_icon_class.val(_src.data('icon_class'));\n                    $m_color.val(_src.data('color'));\n                    $m_id.val(id);\n\n                    if(translatable){\n                        $_str_i18n = $(\"#title\" + id + \"_i18n\").val();\n                    }\n\n                    if (_src.data('target') == '_self') {\n                        $m_target.val('_self').change();\n                    } else if (_src.data('target') == '_blank') {\n                        $m_target.find(\"option[value='_self']\").removeAttr('selected');\n                        $m_target.find(\"option[value='_blank']\").attr('selected', 'selected');\n                        $m_target.val('_blank');\n                    }\n                    if (_src.data('route') != \"\") {\n                        $m_link_type.val('route').change();\n                        $m_url_type.hide();\n                    } else {\n                        $m_link_type.val('url').change();\n                        $m_route_type.hide();\n                    }\n                    if ($m_link_type.val() == 'route') {\n                        $m_url_type.hide();\n                        $m_route_type.show();\n                    } else {\n                        $m_route_type.hide();\n                        $m_url_type.show();\n                    }\n                }\n\n                if (translatable) {\n                    $m_title_i18n.val($_str_i18n);\n                    translatable.refresh();\n                }\n            });\n\n\n            /**\n             * Toggle Form Menu Type\n             */\n            $m_link_type.on('change', function (e) {\n                if ($m_link_type.val() == 'route') {\n                    $m_url_type.hide();\n                    $m_route_type.show();\n                } else {\n                    $m_url_type.show();\n                    $m_route_type.hide();\n                }\n            });\n\n\n            /**\n             * Delete menu item\n             */\n            $('.item_actions').on('click', '.delete', function (e) {\n                id = $(e.currentTarget).data('id');\n                $('#delete_form')[0].action = '{{ route('voyager.menus.item.destroy', ['menu' => $menu->id, 'id' => '__id']) }}'.replace('__id', id);\n                $('#delete_modal').modal('show');\n            });\n\n\n            /**\n             * Reorder items\n             */\n            $('.dd').on('change', function (e) {\n                $.post('{{ route('voyager.menus.order_item',['menu' => $menu->id]) }}', {\n                    order: JSON.stringify($('.dd').nestable('serialize')),\n                    _token: '{{ csrf_token() }}'\n                }, function (data) {\n                    toastr.success(\"{{ __('voyager::menu_builder.updated_order') }}\");\n                });\n            });\n        });\n    </script>\n@stop\n"
  },
  {
    "path": "resources/views/menus/partial/notice.blade.php",
    "content": "@if(config('voyager.show_dev_tips'))\n    <div class=\"container-fluid\">\n        <div class=\"alert alert-info\">\n            <strong>{{ __('voyager::generic.how_to_use') }}:</strong>\n            <p>{{ trans_choice('voyager::menu_builder.usage_hint', !empty($menu) ? 0 : 1) }} <code>menu('{{ !empty($menu) ? $menu->name : 'name' }}')</code></p>\n        </div>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/multilingual/input-hidden-bread-browse.blade.php",
    "content": "@if (is_field_translatable($data, $row))\n    <input type=\"hidden\"\n           data-i18n=\"true\"\n           name=\"{{ $row->field.$row->id }}_i18n\"\n           id=\"{{ $row->field.$row->id }}_i18n\"\n           value=\"{{ get_field_translations($data, $row->field) }}\">\n@endif\n"
  },
  {
    "path": "resources/views/multilingual/input-hidden-bread-edit-add.blade.php",
    "content": "@if (is_field_translatable($dataTypeContent, $row))\n    <span class=\"language-label js-language-label\"></span>\n    <input type=\"hidden\"\n           data-i18n=\"true\"\n           name=\"{{ $row->field }}_i18n\"\n           id=\"{{ $row->field }}_i18n\"\n           @if(!empty(session()->getOldInput($row->field.'_i18n') && is_null($dataTypeContent->id)))\n             value=\"{{ session()->getOldInput($row->field.'_i18n') }}\"\n           @else\n             value=\"{{ get_field_translations($dataTypeContent, $row->field) }}\"\n           @endif>\n@endif\n"
  },
  {
    "path": "resources/views/multilingual/input-hidden-bread-read.blade.php",
    "content": "@if (is_field_translatable($dataTypeContent, $row))\n    <input type=\"hidden\"\n           data-i18n=\"true\"\n           name=\"{{ $row->field }}_i18n\"\n           id=\"{{ $row->field }}_i18n\"\n           value=\"{{ get_field_translations($dataTypeContent, $row->field, $row->type, true) }}\">\n@endif\n"
  },
  {
    "path": "resources/views/multilingual/input-hidden.blade.php",
    "content": "@if ($isModelTranslatable)\n    <input type=\"hidden\"\n           data-i18n=\"true\"\n           name=\"{{ $_field_name }}_i18n\"\n           id=\"{{ $_field_name }}_i18n\"\n           value=\"{{ $_field_trans }}\">\n@endif\n"
  },
  {
    "path": "resources/views/multilingual/language-selector.blade.php",
    "content": "@if (isset($isModelTranslatable) && $isModelTranslatable)\n    <div class=\"language-selector\">\n        <div class=\"btn-group btn-group-sm\" role=\"group\" data-toggle=\"buttons\">\n            @foreach(config('voyager.multilingual.locales') as $lang)\n                <label class=\"btn btn-primary{{ ($lang === config('voyager.multilingual.default')) ? \" active\" : \"\" }}\">\n                    <input type=\"radio\" name=\"i18n_selector\" id=\"{{$lang}}\" autocomplete=\"off\"{{ ($lang === config('voyager.multilingual.default')) ? ' checked=\"checked\"' : '' }}> {{ strtoupper($lang) }}\n                </label>\n            @endforeach\n        </div>\n    </div>\n@endif\n"
  },
  {
    "path": "resources/views/partials/app-footer.blade.php",
    "content": "<footer class=\"app-footer\">\n    <div class=\"site-footer-right\">\n        @if (rand(1,100) == 100)\n            <i class=\"voyager-rum-1\"></i> {{ __('voyager::theme.footer_copyright2') }}\n        @else\n            {!! __('voyager::theme.footer_copyright') !!} <a href=\"http://thecontrolgroup.com\" target=\"_blank\">The Control Group</a>\n        @endif\n        @php $version = Voyager::getVersion(); @endphp\n        @if (!empty($version))\n            - {{ $version }}\n        @endif\n    </div>\n</footer>\n"
  },
  {
    "path": "resources/views/partials/bulk-delete.blade.php",
    "content": "<a class=\"btn btn-danger\" id=\"bulk_delete_btn\"><i class=\"voyager-trash\"></i> <span>{{ __('voyager::generic.bulk_delete') }}</span></a>\n\n{{-- Bulk delete modal --}}\n<div class=\"modal modal-danger fade\" tabindex=\"-1\" id=\"bulk_delete_modal\" role=\"dialog\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span\n                            aria-hidden=\"true\">&times;</span></button>\n                <h4 class=\"modal-title\">\n                    <i class=\"voyager-trash\"></i> {{ __('voyager::generic.are_you_sure_delete') }} <span id=\"bulk_delete_count\"></span> <span id=\"bulk_delete_display_name\"></span>?\n                </h4>\n            </div>\n            <div class=\"modal-body\" id=\"bulk_delete_modal_body\">\n            </div>\n            <div class=\"modal-footer\">\n                <form action=\"{{ route('voyager.'.$dataType->slug.'.index') }}/0\" id=\"bulk_delete_form\" method=\"POST\">\n                    {{ method_field(\"DELETE\") }}\n                    {{ csrf_field() }}\n                    <input type=\"hidden\" name=\"ids\" id=\"bulk_delete_input\" value=\"\">\n                    <input type=\"submit\" class=\"btn btn-danger pull-right delete-confirm\"\n                             value=\"{{ __('voyager::generic.bulk_delete_confirm') }} {{ strtolower($dataType->getTranslatedAttribute('display_name_plural')) }}\">\n                </form>\n                <button type=\"button\" class=\"btn btn-default pull-right\" data-dismiss=\"modal\">\n                    {{ __('voyager::generic.cancel') }}\n                </button>\n            </div>\n        </div><!-- /.modal-content -->\n    </div><!-- /.modal-dialog -->\n</div><!-- /.modal -->\n\n<script>\nwindow.onload = function () {\n    // Bulk delete selectors\n    var $bulkDeleteBtn = $('#bulk_delete_btn');\n    var $bulkDeleteModal = $('#bulk_delete_modal');\n    var $bulkDeleteCount = $('#bulk_delete_count');\n    var $bulkDeleteDisplayName = $('#bulk_delete_display_name');\n    var $bulkDeleteInput = $('#bulk_delete_input');\n    // Reposition modal to prevent z-index issues\n    $bulkDeleteModal.appendTo('body');\n    // Bulk delete listener\n    $bulkDeleteBtn.click(function () {\n        var ids = [];\n        var $checkedBoxes = $('#dataTable input[type=checkbox]:checked').not('.select_all');\n        var count = $checkedBoxes.length;\n        if (count) {\n            // Reset input value\n            $bulkDeleteInput.val('');\n            // Deletion info\n            var displayName = count > 1 ? '{{ $dataType->getTranslatedAttribute('display_name_plural') }}' : '{{ $dataType->getTranslatedAttribute('display_name_singular') }}';\n            displayName = displayName.toLowerCase();\n            $bulkDeleteCount.html(count);\n            $bulkDeleteDisplayName.html(displayName);\n            // Gather IDs\n            $.each($checkedBoxes, function () {\n                var value = $(this).val();\n                ids.push(value);\n            })\n            // Set input value\n            $bulkDeleteInput.val(ids);\n            // Show modal\n            $bulkDeleteModal.modal('show');\n        } else {\n            // No row selected\n            toastr.warning('{{ __('voyager::generic.bulk_delete_nothing') }}');\n        }\n    });\n}\n</script>\n"
  },
  {
    "path": "resources/views/partials/coordinates-static-image.blade.php",
    "content": "<img src=\"https://maps.googleapis.com/maps/api/staticmap?zoom={{ config('voyager.googlemaps.zoom') }}&size=400x100&maptype=roadmap&@foreach($data->getCoordinates() as $point)markers=color:red%7C{{ $point['lat'] }},{{ $point['lng'] }}&center={{ $point['lat'] }},{{ $point['lng'] }}@endforeach&key={{ config('voyager.googlemaps.key') }}\"/>"
  },
  {
    "path": "resources/views/partials/coordinates.blade.php",
    "content": "<style>\n    #map {\n        height: 400px;\n        width: 100%;\n    }\n</style>\n\n<script type=\"application/javascript\">\n    function initMap() {\n        @forelse($dataTypeContent->getCoordinates() as $point)\n            var center = {lat: {{ $point['lat'] }}, lng: {{ $point['lng'] }}};\n        @empty\n            var center = {lat: {{ config('voyager.googlemaps.center.lat') }}, lng: {{ config('voyager.googlemaps.center.lng') }}};\n        @endforelse\n        var map = new google.maps.Map(document.getElementById('map'), {\n            zoom: {{ config('voyager.googlemaps.zoom') }},\n            center: center\n        });\n        var markers = [];\n        @foreach($dataTypeContent->getCoordinates() as $point)\n            var marker = new google.maps.Marker({\n                    position: {lat: {{ $point['lat'] }}, lng: {{ $point['lng'] }}},\n                    map: map\n                });\n            markers.push(marker);\n        @endforeach\n    }\n</script>\n<div id=\"map\"/>\n<script async defer src=\"https://maps.googleapis.com/maps/api/js?key={{ config('voyager.googlemaps.key') }}&callback=initMap\"></script>"
  },
  {
    "path": "resources/views/posts/edit-add.blade.php",
    "content": "@php\n    $edit = !is_null($dataTypeContent->getKey());\n    $add  = is_null($dataTypeContent->getKey());\n@endphp\n\n@extends('voyager::master')\n\n@section('css')\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n    <style>\n        .panel .mce-panel {\n            border-left-color: #fff;\n            border-right-color: #fff;\n        }\n\n        .panel .mce-toolbar,\n        .panel .mce-statusbar {\n            padding-left: 20px;\n        }\n\n        .panel .mce-edit-area,\n        .panel .mce-edit-area iframe,\n        .panel .mce-edit-area iframe html {\n            padding: 0 10px;\n            min-height: 350px;\n        }\n\n        .mce-content-body {\n            color: #555;\n            font-size: 14px;\n        }\n\n        .panel.is-fullscreen .mce-statusbar {\n            position: absolute;\n            bottom: 0;\n            width: 100%;\n            z-index: 200000;\n        }\n\n        .panel.is-fullscreen .mce-tinymce {\n            height:100%;\n        }\n\n        .panel.is-fullscreen .mce-edit-area,\n        .panel.is-fullscreen .mce-edit-area iframe,\n        .panel.is-fullscreen .mce-edit-area iframe html {\n            height: 100%;\n            position: absolute;\n            width: 99%;\n            overflow-y: scroll;\n            overflow-x: hidden;\n            min-height: 100%;\n        }\n    </style>\n@stop\n\n@section('page_title', __('voyager::generic.'.($edit ? 'edit' : 'add')).' '.$dataType->getTranslatedAttribute('display_name_singular'))\n\n@section('page_header')\n    <h1 class=\"page-title\">\n        <i class=\"{{ $dataType->icon }}\"></i>\n        {{ __('voyager::generic.'.($edit ? 'edit' : 'add')).' '.$dataType->getTranslatedAttribute('display_name_singular') }}\n    </h1>\n    @include('voyager::multilingual.language-selector')\n@stop\n\n@section('content')\n    <div class=\"page-content container-fluid\">\n        <form class=\"form-edit-add\" role=\"form\" action=\"@if($edit){{ route('voyager.posts.update', $dataTypeContent->id) }}@else{{ route('voyager.posts.store') }}@endif\" method=\"POST\" enctype=\"multipart/form-data\">\n            <!-- PUT Method if we are editing -->\n            @if($edit)\n                {{ method_field(\"PUT\") }}\n            @endif\n            {{ csrf_field() }}\n\n            <div class=\"row\">\n                <div class=\"col-md-8\">\n                    <!-- ### TITLE ### -->\n                    <div class=\"panel\">\n                        @if (count($errors) > 0)\n                            <div class=\"alert alert-danger\">\n                                <ul>\n                                    @foreach ($errors->all() as $error)\n                                        <li>{{ $error }}</li>\n                                    @endforeach\n                                </ul>\n                            </div>\n                        @endif\n\n                        <div class=\"panel-heading\">\n                            <h3 class=\"panel-title\">\n                                <i class=\"voyager-character\"></i> {{ __('voyager::post.title') }}\n                                <span class=\"panel-desc\"> {{ __('voyager::post.title_sub') }}</span>\n                            </h3>\n                            <div class=\"panel-actions\">\n                                <a class=\"panel-action voyager-angle-down\" data-toggle=\"panel-collapse\" aria-hidden=\"true\"></a>\n                            </div>\n                        </div>\n                        <div class=\"panel-body\">\n                            @include('voyager::multilingual.input-hidden', [\n                                '_field_name'  => 'title',\n                                '_field_trans' => get_field_translations($dataTypeContent, 'title')\n                            ])\n                            <input type=\"text\" class=\"form-control\" id=\"title\" name=\"title\" placeholder=\"{{ __('voyager::generic.title') }}\" value=\"{{ $dataTypeContent->title ?? '' }}\">\n                        </div>\n                    </div>\n\n                    <!-- ### CONTENT ### -->\n                    <div class=\"panel\">\n                        <div class=\"panel-heading\">\n                            <h3 class=\"panel-title\">{{ __('voyager::post.content') }}</h3>\n                            <div class=\"panel-actions\">\n                                <a class=\"panel-action voyager-resize-full\" data-toggle=\"panel-fullscreen\" aria-hidden=\"true\"></a>\n                            </div>\n                        </div>\n\n                        <div class=\"panel-body\">\n                            @include('voyager::multilingual.input-hidden', [\n                                '_field_name'  => 'body',\n                                '_field_trans' => get_field_translations($dataTypeContent, 'body')\n                            ])\n                            @php\n                                $dataTypeRows = $dataType->{($edit ? 'editRows' : 'addRows' )};\n                                $row = $dataTypeRows->where('field', 'body')->first();\n                            @endphp\n                            {!! app('voyager')->formField($row, $dataType, $dataTypeContent) !!}\n                        </div>\n                    </div><!-- .panel -->\n\n                    <!-- ### EXCERPT ### -->\n                    <div class=\"panel\">\n                        <div class=\"panel-heading\">\n                            <h3 class=\"panel-title\">{!! __('voyager::post.excerpt') !!}</h3>\n                            <div class=\"panel-actions\">\n                                <a class=\"panel-action voyager-angle-down\" data-toggle=\"panel-collapse\" aria-hidden=\"true\"></a>\n                            </div>\n                        </div>\n                        <div class=\"panel-body\">\n                            @include('voyager::multilingual.input-hidden', [\n                                '_field_name'  => 'excerpt',\n                                '_field_trans' => get_field_translations($dataTypeContent, 'excerpt')\n                            ])\n                            <textarea class=\"form-control\" name=\"excerpt\">{{ $dataTypeContent->excerpt ?? '' }}</textarea>\n                        </div>\n                    </div>\n\n                    <div class=\"panel\">\n                        <div class=\"panel-heading\">\n                            <h3 class=\"panel-title\">{{ __('voyager::post.additional_fields') }}</h3>\n                            <div class=\"panel-actions\">\n                                <a class=\"panel-action voyager-angle-down\" data-toggle=\"panel-collapse\" aria-hidden=\"true\"></a>\n                            </div>\n                        </div>\n                        <div class=\"panel-body\">\n                            @php\n                                $dataTypeRows = $dataType->{($edit ? 'editRows' : 'addRows' )};\n                                $exclude = ['title', 'body', 'excerpt', 'slug', 'status', 'category_id', 'author_id', 'featured', 'image', 'meta_description', 'meta_keywords', 'seo_title'];\n                            @endphp\n\n                            @foreach($dataTypeRows as $row)\n                                @if(!in_array($row->field, $exclude))\n                                    @php\n                                        $display_options = $row->details->display ?? NULL;\n                                    @endphp\n                                    @if (isset($row->details->formfields_custom))\n                                        @include('voyager::formfields.custom.' . $row->details->formfields_custom)\n                                    @else\n                                        <div class=\"form-group @if($row->type == 'hidden') hidden @endif @if(isset($display_options->width)){{ 'col-md-' . $display_options->width }}@endif\" @if(isset($display_options->id)){{ \"id=$display_options->id\" }}@endif>\n                                            {{ $row->slugify }}\n                                            <label for=\"name\">{{ $row->getTranslatedAttribute('display_name') }}</label>\n                                            @include('voyager::multilingual.input-hidden-bread-edit-add')\n                                            @if($row->type == 'relationship')\n                                                @include('voyager::formfields.relationship', ['options' => $row->details])\n                                            @else\n                                                {!! app('voyager')->formField($row, $dataType, $dataTypeContent) !!}\n                                            @endif\n\n                                            @foreach (app('voyager')->afterFormFields($row, $dataType, $dataTypeContent) as $after)\n                                                {!! $after->handle($row, $dataType, $dataTypeContent) !!}\n                                            @endforeach\n                                        </div>\n                                    @endif\n                                @endif\n                            @endforeach\n                        </div>\n                    </div>\n\n                </div>\n                <div class=\"col-md-4\">\n                    <!-- ### DETAILS ### -->\n                    <div class=\"panel panel panel-bordered panel-warning\">\n                        <div class=\"panel-heading\">\n                            <h3 class=\"panel-title\"><i class=\"icon wb-clipboard\"></i> {{ __('voyager::post.details') }}</h3>\n                            <div class=\"panel-actions\">\n                                <a class=\"panel-action voyager-angle-down\" data-toggle=\"panel-collapse\" aria-hidden=\"true\"></a>\n                            </div>\n                        </div>\n                        <div class=\"panel-body\">\n                            <div class=\"form-group\">\n                                <label for=\"slug\">{{ __('voyager::post.slug') }}</label>\n                                @include('voyager::multilingual.input-hidden', [\n                                    '_field_name'  => 'slug',\n                                    '_field_trans' => get_field_translations($dataTypeContent, 'slug')\n                                ])\n                                <input type=\"text\" class=\"form-control\" id=\"slug\" name=\"slug\"\n                                    placeholder=\"slug\"\n                                    {!! isFieldSlugAutoGenerator($dataType, $dataTypeContent, \"slug\") !!}\n                                    value=\"{{ $dataTypeContent->slug ?? '' }}\">\n                            </div>\n                            <div class=\"form-group\">\n                                <label for=\"status\">{{ __('voyager::post.status') }}</label>\n                                <select class=\"form-control\" name=\"status\">\n                                    <option value=\"PUBLISHED\"@if(isset($dataTypeContent->status) && $dataTypeContent->status == 'PUBLISHED') selected=\"selected\"@endif>{{ __('voyager::post.status_published') }}</option>\n                                    <option value=\"DRAFT\"@if(isset($dataTypeContent->status) && $dataTypeContent->status == 'DRAFT') selected=\"selected\"@endif>{{ __('voyager::post.status_draft') }}</option>\n                                    <option value=\"PENDING\"@if(isset($dataTypeContent->status) && $dataTypeContent->status == 'PENDING') selected=\"selected\"@endif>{{ __('voyager::post.status_pending') }}</option>\n                                </select>\n                            </div>\n                            <div class=\"form-group\">\n                                <label for=\"category_id\">{{ __('voyager::post.category') }}</label>\n                                <select class=\"form-control\" name=\"category_id\">\n                                    @foreach(Voyager::model('Category')::all() as $category)\n                                        <option value=\"{{ $category->id }}\"@if(isset($dataTypeContent->category_id) && $dataTypeContent->category_id == $category->id) selected=\"selected\"@endif>{{ $category->name }}</option>\n                                    @endforeach\n                                </select>\n                            </div>\n                            <div class=\"form-group\">\n                                <label for=\"featured\">{{ __('voyager::generic.featured') }}</label>\n                                <input type=\"checkbox\" name=\"featured\"@if(isset($dataTypeContent->featured) && $dataTypeContent->featured) checked=\"checked\"@endif>\n                            </div>\n                        </div>\n                    </div>\n\n                    <!-- ### IMAGE ### -->\n                    <div class=\"panel panel-bordered panel-primary\">\n                        <div class=\"panel-heading\">\n                            <h3 class=\"panel-title\"><i class=\"icon wb-image\"></i> {{ __('voyager::post.image') }}</h3>\n                            <div class=\"panel-actions\">\n                                <a class=\"panel-action voyager-angle-down\" data-toggle=\"panel-collapse\" aria-hidden=\"true\"></a>\n                            </div>\n                        </div>\n                        <div class=\"panel-body\">\n                            @if(isset($dataTypeContent->image))\n                                <img src=\"{{ filter_var($dataTypeContent->image, FILTER_VALIDATE_URL) ? $dataTypeContent->image : Voyager::image( $dataTypeContent->image ) }}\" style=\"width:100%\" />\n                            @endif\n                            <input type=\"file\" name=\"image\">\n                        </div>\n                    </div>\n\n                    <!-- ### SEO CONTENT ### -->\n                    <div class=\"panel panel-bordered panel-info\">\n                        <div class=\"panel-heading\">\n                            <h3 class=\"panel-title\"><i class=\"icon wb-search\"></i> {{ __('voyager::post.seo_content') }}</h3>\n                            <div class=\"panel-actions\">\n                                <a class=\"panel-action voyager-angle-down\" data-toggle=\"panel-collapse\" aria-hidden=\"true\"></a>\n                            </div>\n                        </div>\n                        <div class=\"panel-body\">\n                            <div class=\"form-group\">\n                                <label for=\"meta_description\">{{ __('voyager::post.meta_description') }}</label>\n                                @include('voyager::multilingual.input-hidden', [\n                                    '_field_name'  => 'meta_description',\n                                    '_field_trans' => get_field_translations($dataTypeContent, 'meta_description')\n                                ])\n                                <textarea class=\"form-control\" name=\"meta_description\">{{ $dataTypeContent->meta_description ?? '' }}</textarea>\n                            </div>\n                            <div class=\"form-group\">\n                                <label for=\"meta_keywords\">{{ __('voyager::post.meta_keywords') }}</label>\n                                @include('voyager::multilingual.input-hidden', [\n                                    '_field_name'  => 'meta_keywords',\n                                    '_field_trans' => get_field_translations($dataTypeContent, 'meta_keywords')\n                                ])\n                                <textarea class=\"form-control\" name=\"meta_keywords\">{{ $dataTypeContent->meta_keywords ?? '' }}</textarea>\n                            </div>\n                            <div class=\"form-group\">\n                                <label for=\"seo_title\">{{ __('voyager::post.seo_title') }}</label>\n                                @include('voyager::multilingual.input-hidden', [\n                                    '_field_name'  => 'seo_title',\n                                    '_field_trans' => get_field_translations($dataTypeContent, 'seo_title')\n                                ])\n                                <input type=\"text\" class=\"form-control\" name=\"seo_title\" placeholder=\"SEO Title\" value=\"{{ $dataTypeContent->seo_title ?? '' }}\">\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n\n            @section('submit-buttons')\n                <button type=\"submit\" class=\"btn btn-primary pull-right\">\n                     @if($edit){{ __('voyager::post.update') }}@else <i class=\"icon wb-plus-circle\"></i> {{ __('voyager::post.new') }} @endif\n                </button>\n            @stop\n            @yield('submit-buttons')\n        </form>\n\n        <div style=\"display:none\">\n            <input type=\"hidden\" id=\"upload_url\" value=\"{{ route('voyager.upload') }}\">\n            <input type=\"hidden\" id=\"upload_type_slug\" value=\"{{ $dataType->slug }}\">\n        </div>\n    </div>\n\n    <div class=\"modal fade modal-danger\" id=\"confirm_delete_modal\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\"\n                            aria-hidden=\"true\">&times;</button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-warning\"></i> {{ __('voyager::generic.are_you_sure') }}</h4>\n                </div>\n\n                <div class=\"modal-body\">\n                    <h4>{{ __('voyager::generic.are_you_sure_delete') }} '<span class=\"confirm_delete_name\"></span>'</h4>\n                </div>\n\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                    <button type=\"button\" class=\"btn btn-danger\" id=\"confirm_delete\">{{ __('voyager::generic.delete_confirm') }}</button>\n                </div>\n            </div>\n        </div>\n    </div>\n    <!-- End Delete File Modal -->\n@stop\n\n@section('javascript')\n    <script>\n        var params = {};\n        var $file;\n\n        function deleteHandler(tag, isMulti) {\n          return function() {\n            $file = $(this).siblings(tag);\n\n            params = {\n                slug:   '{{ $dataType->slug }}',\n                filename:  $file.data('file-name'),\n                id:     $file.data('id'),\n                field:  $file.parent().data('field-name'),\n                multi: isMulti,\n                _token: '{{ csrf_token() }}'\n            }\n\n            $('.confirm_delete_name').text(params.filename);\n            $('#confirm_delete_modal').modal('show');\n          };\n        }\n\n        $('document').ready(function () {\n            $('#slug').slugify();\n\n            $('.toggleswitch').bootstrapToggle();\n\n            //Init datepicker for date fields if data-datepicker attribute defined\n            //or if browser does not handle date inputs\n            $('.form-group input[type=date]').each(function (idx, elt) {\n                if (elt.type != 'date' || elt.hasAttribute('data-datepicker')) {\n                    elt.type = 'text';\n                    $(elt).datetimepicker($(elt).data('datepicker'));\n                }\n            });\n\n            @if ($isModelTranslatable)\n                $('.side-body').multilingual({\"editing\": true});\n            @endif\n\n            $('.side-body input[data-slug-origin]').each(function(i, el) {\n                $(el).slugify();\n            });\n\n            $('.form-group').on('click', '.remove-multi-image', deleteHandler('img', true));\n            $('.form-group').on('click', '.remove-single-image', deleteHandler('img', false));\n            $('.form-group').on('click', '.remove-multi-file', deleteHandler('a', true));\n            $('.form-group').on('click', '.remove-single-file', deleteHandler('a', false));\n\n            $('#confirm_delete').on('click', function(){\n                $.post('{{ route('voyager.'.$dataType->slug.'.media.remove') }}', params, function (response) {\n                    if ( response\n                        && response.data\n                        && response.data.status\n                        && response.data.status == 200 ) {\n\n                        toastr.success(response.data.message);\n                        $file.parent().fadeOut(300, function() { $(this).remove(); })\n                    } else {\n                        toastr.error(\"Error removing file.\");\n                    }\n                });\n\n                $('#confirm_delete_modal').modal('hide');\n            });\n            $('[data-toggle=\"tooltip\"]').tooltip();\n        });\n    </script>\n@stop\n"
  },
  {
    "path": "resources/views/profile.blade.php",
    "content": "@extends('voyager::master')\n\n@section('css')\n    <style>\n        .user-email {\n            font-size: .85rem;\n            margin-bottom: 1.5em;\n        }\n    </style>\n@stop\n\n@section('content')\n    <div style=\"background-size:cover; background-image: url({{ Voyager::image( Voyager::setting('admin.bg_image'), voyager_asset('/images/bg.jpg')) }}); background-position: center center;position:absolute; top:0; left:0; width:100%; height:300px;\"></div>\n    <div style=\"height:160px; display:block; width:100%\"></div>\n    <div style=\"position:relative; z-index:9; text-align:center;\">\n        <img src=\"@if( !filter_var(Auth::user()->avatar, FILTER_VALIDATE_URL)){{ Voyager::image( Auth::user()->avatar ) }}@else{{ Auth::user()->avatar }}@endif\"\n             class=\"avatar\"\n             style=\"border-radius:50%; width:150px; height:150px; border:5px solid #fff;\"\n             alt=\"{{ Auth::user()->name }} avatar\">\n        <h4>{{ ucwords(Auth::user()->name) }}</h4>\n        <div class=\"user-email text-muted\">{{ ucwords(Auth::user()->email) }}</div>\n        <p>{{ Auth::user()->bio }}</p>\n        @if ($route != '')\n            <a href=\"{{ $route }}\" class=\"btn btn-primary\">{{ __('voyager::profile.edit') }}</a>\n        @endif\n    </div>\n@stop\n"
  },
  {
    "path": "resources/views/roles/edit-add.blade.php",
    "content": "@extends('voyager::master')\n\n@section('page_title', __('voyager::generic.'.(isset($dataTypeContent->id) ? 'edit' : 'add')).' '.$dataType->getTranslatedAttribute('display_name_singular'))\n\n@section('css')\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n@stop\n\n@section('page_header')\n    <h1 class=\"page-title\">\n        <i class=\"{{ $dataType->icon }}\"></i>\n        {{ __('voyager::generic.'.(isset($dataTypeContent->id) ? 'edit' : 'add')).' '.$dataType->getTranslatedAttribute('display_name_singular') }}\n    </h1>\n@stop\n\n@section('content')\n    <div class=\"page-content container-fluid\">\n        @include('voyager::alerts')\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n\n                <div class=\"panel panel-bordered\">\n                    <!-- form start -->\n                    <form class=\"form-edit-add\" role=\"form\"\n                          action=\"@if(isset($dataTypeContent->id)){{ route('voyager.'.$dataType->slug.'.update', $dataTypeContent->id) }}@else{{ route('voyager.'.$dataType->slug.'.store') }}@endif\"\n                          method=\"POST\" enctype=\"multipart/form-data\">\n\n                        <!-- PUT Method if we are editing -->\n                        @if(isset($dataTypeContent->id))\n                            {{ method_field(\"PUT\") }}\n                        @endif\n\n                        <!-- CSRF TOKEN -->\n                        {{ csrf_field() }}\n\n                        <div class=\"panel-body\">\n\n                            @if (count($errors) > 0)\n                                <div class=\"alert alert-danger\">\n                                    <ul>\n                                        @foreach ($errors->all() as $error)\n                                            <li>{{ $error }}</li>\n                                        @endforeach\n                                    </ul>\n                                </div>\n                            @endif\n\n                            @foreach($dataType->addRows as $row)\n                                <div class=\"form-group\">\n                                    <label for=\"name\">{{ $row->getTranslatedAttribute('display_name') }}</label>\n\n                                    {!! Voyager::formField($row, $dataType, $dataTypeContent) !!}\n\n                                </div>\n                            @endforeach\n\n                            <label for=\"permission\">{{ __('voyager::generic.permissions') }}</label><br>\n                            <a href=\"#\" class=\"permission-select-all\">{{ __('voyager::generic.select_all') }}</a> / <a href=\"#\"  class=\"permission-deselect-all\">{{ __('voyager::generic.deselect_all') }}</a>\n                            <ul class=\"permissions checkbox\">\n                                <?php\n                                    $role_permissions = (isset($dataTypeContent)) ? $dataTypeContent->permissions->pluck('key')->toArray() : [];\n                                ?>\n                                @foreach(Voyager::model('Permission')->all()->groupBy('table_name') as $table => $permission)\n                                    <li>\n                                        <input type=\"checkbox\" id=\"{{$table}}\" class=\"permission-group\">\n                                        <label for=\"{{$table}}\"><strong>{{\\Illuminate\\Support\\Str::title(str_replace('_',' ', $table))}}</strong></label>\n                                        <ul>\n                                            @foreach($permission as $perm)\n                                                <li>\n                                                    <input type=\"checkbox\" id=\"permission-{{$perm->id}}\" name=\"permissions[{{$perm->id}}]\" class=\"the-permission\" value=\"{{$perm->id}}\" @if(in_array($perm->key, $role_permissions)) checked @endif>\n                                                    <label for=\"permission-{{$perm->id}}\">{{\\Illuminate\\Support\\Str::title(str_replace('_', ' ', $perm->key))}}</label>\n                                                </li>\n                                            @endforeach\n                                        </ul>\n                                    </li>\n                                @endforeach\n                            </ul>\n                        </div><!-- panel-body -->\n                        <div class=\"panel-footer\">\n                            <button type=\"submit\" class=\"btn btn-primary\">{{ __('voyager::generic.submit') }}</button>\n                        </div>\n                    </form>\n\n                    <div style=\"display:none\">\n                        <input type=\"hidden\" id=\"upload_url\" value=\"{{ route('voyager.upload') }}\">\n                        <input type=\"hidden\" id=\"upload_type_slug\" value=\"{{ $dataType->slug }}\">\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n@stop\n\n@section('javascript')\n    <script>\n        $('document').ready(function () {\n            $('.toggleswitch').bootstrapToggle();\n\n            $('.permission-group').on('change', function(){\n                $(this).siblings('ul').find(\"input[type='checkbox']\").prop('checked', this.checked);\n            });\n\n            $('.permission-select-all').on('click', function(){\n                $('ul.permissions').find(\"input[type='checkbox']\").prop('checked', true);\n                return false;\n            });\n\n            $('.permission-deselect-all').on('click', function(){\n                $('ul.permissions').find(\"input[type='checkbox']\").prop('checked', false);\n                return false;\n            });\n\n            function parentChecked(){\n                $('.permission-group').each(function(){\n                    var allChecked = true;\n                    $(this).siblings('ul').find(\"input[type='checkbox']\").each(function(){\n                        if(!this.checked) allChecked = false;\n                    });\n                    $(this).prop('checked', allChecked);\n                });\n            }\n\n            parentChecked();\n\n            $('.the-permission').on('change', function(){\n                parentChecked();\n            });\n        });\n    </script>\n@stop\n"
  },
  {
    "path": "resources/views/settings/index.blade.php",
    "content": "@extends('voyager::master')\n\n@section('page_title', __('voyager::generic.viewing').' '.__('voyager::generic.settings'))\n\n@section('css')\n    <style>\n        .panel-actions .voyager-trash {\n            cursor: pointer;\n        }\n        .panel-actions .voyager-trash:hover {\n            color: #e94542;\n        }\n        .settings .panel-actions{\n            right:0px;\n        }\n        .panel hr {\n            margin-bottom: 10px;\n        }\n        .panel {\n            padding-bottom: 15px;\n        }\n        .sort-icons {\n            font-size: 21px;\n            color: #ccc;\n            position: relative;\n            cursor: pointer;\n        }\n        .sort-icons:hover {\n            color: #37474F;\n        }\n        .voyager-sort-desc {\n            margin-right: 10px;\n        }\n        .voyager-sort-asc {\n            top: 10px;\n        }\n        .page-title {\n            margin-bottom: 0;\n        }\n        .panel-title code {\n            border-radius: 30px;\n            padding: 5px 10px;\n            font-size: 11px;\n            border: 0;\n            position: relative;\n            top: -2px;\n        }\n        .modal-open .settings  .select2-container {\n            z-index: 9!important;\n            width: 100%!important;\n        }\n        .new-setting {\n            text-align: center;\n            width: 100%;\n            margin-top: 20px;\n        }\n        .new-setting .panel-title {\n            margin: 0 auto;\n            display: inline-block;\n            color: #999fac;\n            font-weight: lighter;\n            font-size: 13px;\n            background: #fff;\n            width: auto;\n            height: auto;\n            position: relative;\n            padding-right: 15px;\n        }\n        .settings .panel-title{\n            padding-left:0px;\n            padding-right:0px;\n        }\n        .new-setting hr {\n            margin-bottom: 0;\n            position: absolute;\n            top: 7px;\n            width: 96%;\n            margin-left: 2%;\n        }\n        .new-setting .panel-title i {\n            position: relative;\n            top: 2px;\n        }\n        .new-settings-options {\n            display: none;\n            padding-bottom: 10px;\n        }\n        .new-settings-options label {\n            margin-top: 13px;\n        }\n        .new-settings-options .alert {\n            margin-bottom: 0;\n        }\n        #toggle_options {\n            clear: both;\n            float: right;\n            font-size: 12px;\n            position: relative;\n            margin-top: 15px;\n            margin-right: 5px;\n            margin-bottom: 10px;\n            cursor: pointer;\n            z-index: 9;\n            -webkit-touch-callout: none;\n            -webkit-user-select: none;\n            -khtml-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            user-select: none;\n        }\n        .new-setting-btn {\n            margin-right: 15px;\n            position: relative;\n            margin-bottom: 0;\n            top: 5px;\n        }\n        .new-setting-btn i {\n            position: relative;\n            top: 2px;\n        }\n        textarea {\n            min-height: 120px;\n        }\n        textarea.hidden{\n            display:none;\n        }\n\n        .voyager .settings .nav-tabs{\n            background:none;\n            border-bottom:0px;\n        }\n\n        .voyager .settings .nav-tabs .active a{\n            border:0px;\n        }\n\n        .select2{\n            width:100% !important;\n            border: 1px solid #f1f1f1;\n            border-radius: 3px;\n        }\n\n        .voyager .settings input[type=file]{\n            width:100%;\n        }\n\n        .settings .select2{\n            margin-left:10px;\n        }\n\n        .settings .select2-selection{\n            height: 32px;\n            padding: 2px;\n        }\n\n        .voyager .settings .nav-tabs > li{\n            margin-bottom:-1px !important;\n        }\n\n        .voyager .settings .nav-tabs a{\n            text-align: center;\n            background: #f8f8f8;\n            border: 1px solid #f1f1f1;\n            position: relative;\n            top: -1px;\n            border-bottom-left-radius: 0px;\n            border-bottom-right-radius: 0px;\n        }\n\n        .voyager .settings .nav-tabs a i{\n            display: block;\n            font-size: 22px;\n        }\n\n        .tab-content{\n            background:#ffffff;\n            border: 1px solid transparent;\n        }\n\n        .tab-content>div{\n            padding:10px;\n        }\n\n        .settings .no-padding-left-right{\n            padding-left:0px;\n            padding-right:0px;\n        }\n\n        .nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover{\n            background:#fff !important;\n            color:#62a8ea !important;\n            border-bottom:1px solid #fff !important;\n            top:-1px !important;\n        }\n\n        .nav-tabs > li a{\n            transition:all 0.3s ease;\n        }\n\n\n        .nav-tabs > li.active > a:focus{\n            top:0px !important;\n        }\n\n        .voyager .settings .nav-tabs > li > a:hover{\n            background-color:#fff !important;\n        }\n    </style>\n@stop\n\n@section('page_header')\n    <h1 class=\"page-title\">\n        <i class=\"voyager-settings\"></i> {{ __('voyager::generic.settings') }}\n    </h1>\n@stop\n\n@section('content')\n    <div class=\"container-fluid\">\n        @include('voyager::alerts')\n        @if(config('voyager.show_dev_tips'))\n        <div class=\"alert alert-info\">\n            <strong>{{ __('voyager::generic.how_to_use') }}:</strong>\n            <p>{{ __('voyager::settings.usage_help') }} <code>setting('group.key')</code></p>\n        </div>\n        @endif\n    </div>\n\n    <div class=\"page-content settings container-fluid\">\n        <form action=\"{{ route('voyager.settings.update') }}\" method=\"POST\" enctype=\"multipart/form-data\">\n            {{ method_field(\"PUT\") }}\n            {{ csrf_field() }}\n            <input type=\"hidden\" name=\"setting_tab\" class=\"setting_tab\" value=\"{{ $active }}\" />\n            <div class=\"panel\">\n\n                <div class=\"page-content settings container-fluid\">\n                    <ul class=\"nav nav-tabs\">\n                        @foreach($settings as $group => $setting)\n                            <li @if($group == $active) class=\"active\" @endif>\n                                <a data-toggle=\"tab\" href=\"#{{ \\Illuminate\\Support\\Str::slug($group) }}\">{{ $group }}</a>\n                            </li>\n                        @endforeach\n                    </ul>\n\n                    <div class=\"tab-content\">\n                        @foreach($settings as $group => $group_settings)\n                        <div id=\"{{ \\Illuminate\\Support\\Str::slug($group) }}\" class=\"tab-pane fade in @if($group == $active) active @endif\">\n                            @foreach($group_settings as $setting)\n                            <div class=\"panel-heading\">\n                                <h3 class=\"panel-title\">\n                                    {{ $setting->display_name }} @if(config('voyager.show_dev_tips'))<code>setting('{{ $setting->key }}')</code>@endif\n                                </h3>\n                                <div class=\"panel-actions\">\n                                    <a href=\"{{ route('voyager.settings.move_up', $setting->id) }}\">\n                                        <i class=\"sort-icons voyager-sort-asc\"></i>\n                                    </a>\n                                    <a href=\"{{ route('voyager.settings.move_down', $setting->id) }}\">\n                                        <i class=\"sort-icons voyager-sort-desc\"></i>\n                                    </a>\n                                    @can('delete', Voyager::model('Setting'))\n                                    <i class=\"voyager-trash\"\n                                       data-id=\"{{ $setting->id }}\"\n                                       data-display-key=\"{{ $setting->key }}\"\n                                       data-display-name=\"{{ $setting->display_name }}\"></i>\n                                    @endcan\n                                </div>\n                            </div>\n\n                            <div class=\"panel-body no-padding-left-right\">\n                                <div class=\"col-md-10 no-padding-left-right\">\n                                    @if ($setting->type == \"text\")\n                                        <input type=\"text\" class=\"form-control\" name=\"{{ $setting->key }}\" value=\"{{ $setting->value }}\">\n                                    @elseif($setting->type == \"text_area\")\n                                        <textarea class=\"form-control\" name=\"{{ $setting->key }}\">{{ $setting->value ?? '' }}</textarea>\n                                    @elseif($setting->type == \"rich_text_box\")\n                                        <textarea class=\"form-control richTextBox\" name=\"{{ $setting->key }}\">{{ $setting->value ?? '' }}</textarea>\n                                    @elseif($setting->type == \"markdown_editor\")\n                                        <textarea class=\"form-control easymde\" name=\"{{ $setting->key }}\">{{ $setting->value ?? '' }}</textarea>\n                                    @elseif($setting->type == \"code_editor\")\n                                        <?php $options = json_decode($setting->details); ?>\n                                        <div id=\"{{ $setting->key }}\" data-theme=\"{{ @$options->theme }}\" data-language=\"{{ @$options->language }}\" class=\"ace_editor min_height_400\" name=\"{{ $setting->key }}\">{{ $setting->value ?? '' }}</div>\n                                        <textarea name=\"{{ $setting->key }}\" id=\"{{ $setting->key }}_textarea\" class=\"hidden\">{{ $setting->value ?? '' }}</textarea>\n                                    @elseif($setting->type == \"image\" || $setting->type == \"file\")\n                                        @if(isset( $setting->value ) && !empty( $setting->value ) && Storage::disk(config('voyager.storage.disk'))->exists($setting->value))\n                                            <div class=\"img_settings_container\">\n                                                <a href=\"{{ route('voyager.settings.delete_value', $setting->id) }}\" class=\"voyager-x delete_value\"></a>\n                                                <img src=\"{{ Storage::disk(config('voyager.storage.disk'))->url($setting->value) }}\" style=\"width:200px; height:auto; padding:2px; border:1px solid #ddd; margin-bottom:10px;\">\n                                            </div>\n                                            <div class=\"clearfix\"></div>\n                                        @elseif($setting->type == \"file\" && isset( $setting->value ))\n                                            @if(json_decode($setting->value) !== null)\n                                                @foreach(json_decode($setting->value) as $file)\n                                                  <div class=\"fileType\">\n                                                    <a class=\"fileType\" target=\"_blank\" href=\"{{ Storage::disk(config('voyager.storage.disk'))->url($file->download_link) }}\">\n                                                      {{ $file->original_name }}\n                                                    </a>\n                                                    <a href=\"{{ route('voyager.settings.delete_value', $setting->id) }}\" class=\"voyager-x delete_value\"></a>\n                                                 </div>\n                                                @endforeach\n                                            @endif\n                                        @endif\n                                        <input type=\"file\" name=\"{{ $setting->key }}\">\n                                    @elseif($setting->type == \"select_dropdown\")\n                                        <?php $options = json_decode($setting->details); ?>\n                                        <?php $selected_value = (isset($setting->value) && !empty($setting->value)) ? $setting->value : NULL; ?>\n                                        <select class=\"form-control\" name=\"{{ $setting->key }}\">\n                                            <?php $default = (isset($options->default)) ? $options->default : NULL; ?>\n                                            @if(isset($options->options))\n                                                @foreach($options->options as $index => $option)\n                                                    <option value=\"{{ $index }}\" @if($default == $index && $selected_value === NULL) selected=\"selected\" @endif @if($selected_value == $index) selected=\"selected\" @endif>{{ $option }}</option>\n                                                @endforeach\n                                            @endif\n                                        </select>\n\n                                    @elseif($setting->type == \"radio_btn\")\n                                        <?php $options = json_decode($setting->details); ?>\n                                        <?php $selected_value = (isset($setting->value) && !empty($setting->value)) ? $setting->value : NULL; ?>\n                                        <?php $default = (isset($options->default)) ? $options->default : NULL; ?>\n                                        <ul class=\"radio\">\n                                            @if(isset($options->options))\n                                                @foreach($options->options as $index => $option)\n                                                    <li>\n                                                        <input type=\"radio\" id=\"option-{{ $index }}\" name=\"{{ $setting->key }}\"\n                                                               value=\"{{ $index }}\" @if($default == $index && $selected_value === NULL) checked @endif @if($selected_value == $index) checked @endif>\n                                                        <label for=\"option-{{ $index }}\">{{ $option }}</label>\n                                                        <div class=\"check\"></div>\n                                                    </li>\n                                                @endforeach\n                                            @endif\n                                        </ul>\n                                    @elseif($setting->type == \"checkbox\")\n                                        <?php $options = json_decode($setting->details); ?>\n                                        <?php $checked = (isset($setting->value) && $setting->value == 1) ? true : false; ?>\n                                        @if (isset($options->on) && isset($options->off))\n                                            <input type=\"checkbox\" name=\"{{ $setting->key }}\" class=\"toggleswitch\" @if($checked) checked @endif data-on=\"{{ $options->on }}\" data-off=\"{{ $options->off }}\">\n                                        @else\n                                            <input type=\"checkbox\" name=\"{{ $setting->key }}\" @if($checked) checked @endif class=\"toggleswitch\">\n                                        @endif\n                                    @endif\n                                </div>\n                                <div class=\"col-md-2 no-padding-left-right\">\n                                    <select class=\"form-control group_select\" name=\"{{ $setting->key }}_group\">\n                                        @foreach($groups as $group)\n                                        <option value=\"{{ $group }}\" {!! $setting->group == $group ? 'selected' : '' !!}>{{ $group }}</option>\n                                        @endforeach\n                                    </select>\n                                </div>\n                            </div>\n                            @if(!$loop->last)\n                                <hr>\n                            @endif\n                            @endforeach\n                        </div>\n                        @endforeach\n                    </div>\n                </div>\n\n            </div>\n            <button type=\"submit\" class=\"btn btn-primary pull-right\">{{ __('voyager::settings.save') }}</button>\n        </form>\n\n        <div style=\"clear:both\"></div>\n\n        @can('add', Voyager::model('Setting'))\n        <div class=\"panel\" style=\"margin-top:10px;\">\n            <div class=\"panel-heading new-setting\">\n                <hr>\n                <h3 class=\"panel-title\"><i class=\"voyager-plus\"></i> {{ __('voyager::settings.new') }}</h3>\n            </div>\n            <div class=\"panel-body\">\n                <form action=\"{{ route('voyager.settings.store') }}\" method=\"POST\">\n                    {{ csrf_field() }}\n                    <input type=\"hidden\" name=\"setting_tab\" class=\"setting_tab\" value=\"{{ $active }}\" />\n                    <div class=\"col-md-3\">\n                        <label for=\"display_name\">{{ __('voyager::generic.name') }}</label>\n                        <input type=\"text\" class=\"form-control\" name=\"display_name\" placeholder=\"{{ __('voyager::settings.help_name') }}\" required=\"required\">\n                    </div>\n                    <div class=\"col-md-3\">\n                        <label for=\"key\">{{ __('voyager::generic.key') }}</label>\n                        <input type=\"text\" class=\"form-control\" name=\"key\" placeholder=\"{{ __('voyager::settings.help_key') }}\" required=\"required\">\n                    </div>\n                    <div class=\"col-md-3\">\n                        <label for=\"type\">{{ __('voyager::generic.type') }}</label>\n                        <select name=\"type\" class=\"form-control\" required=\"required\">\n                            <option value=\"\">{{ __('voyager::generic.choose_type') }}</option>\n                            <option value=\"text\">{{ __('voyager::form.type_textbox') }}</option>\n                            <option value=\"text_area\">{{ __('voyager::form.type_textarea') }}</option>\n                            <option value=\"rich_text_box\">{{ __('voyager::form.type_richtextbox') }}</option>\n                            <option value=\"markdown_editor\">{{ __('voyager::form.type_markdowneditor') }}</option>\n                            <option value=\"code_editor\">{{ __('voyager::form.type_codeeditor') }}</option>\n                            <option value=\"checkbox\">{{ __('voyager::form.type_checkbox') }}</option>\n                            <option value=\"radio_btn\">{{ __('voyager::form.type_radiobutton') }}</option>\n                            <option value=\"select_dropdown\">{{ __('voyager::form.type_selectdropdown') }}</option>\n                            <option value=\"file\">{{ __('voyager::form.type_file') }}</option>\n                            <option value=\"image\">{{ __('voyager::form.type_image') }}</option>\n                        </select>\n                    </div>\n                    <div class=\"col-md-3\">\n                        <label for=\"group\">{{ __('voyager::settings.group') }}</label>\n                        <select class=\"form-control group_select group_select_new\" name=\"group\">\n                            @foreach($groups as $group)\n                                <option value=\"{{ $group }}\">{{ $group }}</option>\n                            @endforeach\n                        </select>\n                    </div>\n                    <div class=\"col-md-12\">\n                        <a id=\"toggle_options\"><i class=\"voyager-double-down\"></i> {{ mb_strtoupper(__('voyager::generic.options')) }}</a>\n                        <div class=\"new-settings-options\">\n                            <label for=\"options\">{{ __('voyager::generic.options') }}\n                                <small>{{ __('voyager::settings.help_option') }}</small>\n                            </label>\n                            <div id=\"options_editor\" class=\"form-control min_height_200\" data-language=\"json\"></div>\n                            <textarea id=\"options_textarea\" name=\"details\" class=\"hidden\"></textarea>\n                            <div id=\"valid_options\" class=\"alert-success alert\" style=\"display:none\">{{ __('voyager::json.valid') }}</div>\n                            <div id=\"invalid_options\" class=\"alert-danger alert\" style=\"display:none\">{{ __('voyager::json.invalid') }}</div>\n                        </div>\n                    </div>\n                    <div style=\"clear:both\"></div>\n                    <button type=\"submit\" class=\"btn btn-primary pull-right new-setting-btn\">\n                        <i class=\"voyager-plus\"></i> {{ __('voyager::settings.add_new') }}\n                    </button>\n                    <div style=\"clear:both\"></div>\n                </form>\n            </div>\n        </div>\n        @endcan\n    </div>\n\n    @can('delete', Voyager::model('Setting'))\n    <div class=\"modal modal-danger fade\" tabindex=\"-1\" id=\"delete_modal\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"{{ __('voyager::generic.close') }}\">\n                        <span aria-hidden=\"true\">&times;</span>\n                    </button>\n                    <h4 class=\"modal-title\">\n                        <i class=\"voyager-trash\"></i> {!! __('voyager::settings.delete_question', ['setting' => '<span id=\"delete_setting_title\"></span>']) !!}\n                    </h4>\n                </div>\n                <div class=\"modal-footer\">\n                    <form action=\"#\" id=\"delete_form\" method=\"POST\">\n                        {{ method_field(\"DELETE\") }}\n                        {{ csrf_field() }}\n                        <input type=\"submit\" class=\"btn btn-danger pull-right delete-confirm\" value=\"{{ __('voyager::settings.delete_confirm') }}\">\n                    </form>\n                    <button type=\"button\" class=\"btn btn-default pull-right\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                </div>\n            </div>\n        </div>\n    </div>\n    @endcan\n\n@stop\n\n@section('javascript')\n    <script>\n        $('document').ready(function () {\n            $('#toggle_options').click(function () {\n                $('.new-settings-options').toggle();\n                if ($('#toggle_options .voyager-double-down').length) {\n                    $('#toggle_options .voyager-double-down').removeClass('voyager-double-down').addClass('voyager-double-up');\n                } else {\n                    $('#toggle_options .voyager-double-up').removeClass('voyager-double-up').addClass('voyager-double-down');\n                }\n            });\n\n            @can('delete', Voyager::model('Setting'))\n            $('.panel-actions .voyager-trash').click(function () {\n                var display = $(this).data('display-name') + '/' + $(this).data('display-key');\n\n                $('#delete_setting_title').text(display);\n\n                $('#delete_form')[0].action = '{{ route('voyager.settings.delete', [ 'id' => '__id' ]) }}'.replace('__id', $(this).data('id'));\n                $('#delete_modal').modal('show');\n            });\n            @endcan\n\n            $('.toggleswitch').bootstrapToggle();\n\n            $('[data-toggle=\"tab\"]').click(function() {\n                $(\".setting_tab\").val($(this).html());\n            });\n\n            $('.delete_value').click(function(e) {\n                e.preventDefault();\n                $(this).closest('form').attr('action', $(this).attr('href'));\n                $(this).closest('form').submit();\n            });\n\n            // Initiliaze rich text editor\n            tinymce.init(window.voyagerTinyMCE.getConfig());\n        });\n    </script>\n    <script type=\"text/javascript\">\n    $(\".group_select\").not('.group_select_new').select2({\n        tags: true,\n        width: 'resolve'\n    });\n    $(\".group_select_new\").select2({\n        tags: true,\n        width: 'resolve',\n        placeholder: '{{ __(\"voyager::generic.select_group\") }}'\n    });\n    $(\".group_select_new\").val('').trigger('change');\n    </script>\n    <div style=\"display:none\">\n        <input type=\"hidden\" id=\"upload_url\" value=\"{{ route('voyager.upload') }}\">\n        <input type=\"hidden\" id=\"upload_type_slug\" value=\"settings\">\n    </div>\n\n    <script>\n        var options_editor = ace.edit('options_editor');\n        options_editor.getSession().setMode(\"ace/mode/json\");\n\n        var options_textarea = document.getElementById('options_textarea');\n        options_editor.getSession().on('change', function() {\n            console.log(options_editor.getValue());\n            options_textarea.value = options_editor.getValue();\n        });\n    </script>\n@stop\n"
  },
  {
    "path": "resources/views/tools/bread/edit-add.blade.php",
    "content": "@extends('voyager::master')\n\n@if (isset($dataType->id))\n    @section('page_title', __('voyager::bread.edit_bread_for_table', ['table' => $dataType->name]))\n    @php\n        $display_name = $dataType->getTranslatedAttribute('display_name_singular');\n        $display_name_plural = $dataType->getTranslatedAttribute('display_name_plural');\n    @endphp\n@else\n    @section('page_title', __('voyager::bread.create_bread_for_table', ['table' => $table]))\n@endif\n\n@section('page_header')\n    <div class=\"page-title\">\n        <i class=\"voyager-data\"></i>\n        @if (isset($dataType->id))\n            {{ __('voyager::bread.edit_bread_for_table', ['table' => $dataType->name]) }}\n        @else\n            {{ __('voyager::bread.create_bread_for_table', ['table' => $table]) }}\n        @endif\n    </div>\n    @php\n        $isModelTranslatable = (!isset($isModelTranslatable) || !isset($dataType)) ? false : $isModelTranslatable;\n        if (isset($dataType->name)) {\n            $table = $dataType->name;\n        }\n    @endphp\n    @include('voyager::multilingual.language-selector')\n@stop\n\n@section('breadcrumbs')\n<ol class=\"breadcrumb hidden-xs\">\n    <li class=\"active\">\n        <a href=\"{{ route('voyager.dashboard')}}\"><i class=\"voyager-boat\"></i> {{ __('voyager::generic.dashboard') }}</a>\n    </li>\n    <li class=\"active\">\n        <a href=\"{{ route('voyager.bread.index') }}\">\n            {{ __('voyager::generic.bread') }}\n        </a>\n    </li>\n    <li class=\"active\">\n        @if(isset($dataType->id))\n        <a href=\"{{ route('voyager.bread.edit', $table) }}\">\n            {{ $display_name }}\n        </a>\n        @else\n        <a href=\"{{ route('voyager.bread.create', $table) }}\">\n            {{ $display_name }}\n        </a>\n        @endif\n    </li>\n    <li>\n        {{ isset($dataType->id) ? __('voyager::generic.edit') : __('voyager::generic.add') }}\n    </li>\n</ol>\n@endsection\n\n@section('content')\n    <div class=\"page-content container-fluid\" id=\"voyagerBreadEditAdd\">\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n\n                <form action=\"@if(isset($dataType->id)){{ route('voyager.bread.update', $dataType->id) }}@else{{ route('voyager.bread.store') }}@endif\"\n                      method=\"POST\" role=\"form\">\n                @if(isset($dataType->id))\n                    <input type=\"hidden\" value=\"{{ $dataType->id }}\" name=\"id\">\n                    {{ method_field(\"PUT\") }}\n                @endif\n                    <!-- CSRF TOKEN -->\n                    {{ csrf_field() }}\n\n                    <div class=\"panel panel-primary panel-bordered\">\n\n                        <div class=\"panel-heading\">\n                            <h3 class=\"panel-title panel-icon\"><i class=\"voyager-bread\"></i> {{ ucfirst($table) }} {{ __('voyager::bread.bread_info') }}</h3>\n                            <div class=\"panel-actions\">\n                                <a class=\"panel-action voyager-angle-up\" data-toggle=\"panel-collapse\" aria-hidden=\"true\"></a>\n                            </div>\n                        </div>\n\n                        <div class=\"panel-body\">\n                            <div class=\"row clearfix\">\n                                <div class=\"col-md-6 form-group\">\n                                    <label for=\"name\">{{ __('voyager::database.table_name') }}</label>\n                                    <input type=\"text\" class=\"form-control\" readonly name=\"name\" placeholder=\"{{ __('generic_name') }}\"\n                                           value=\"{{ $dataType->name ?? $table }}\">\n                                </div>\n                            </div>\n                            <div class=\"row clearfix\">\n                                <div class=\"col-md-6 form-group\">\n                                    <label for=\"display_name_singular\">{{ __('voyager::bread.display_name_singular') }}</label>\n                                    @if($isModelTranslatable)\n                                        @include('voyager::multilingual.input-hidden', [\n                                            'isModelTranslatable' => true,\n                                            '_field_name'         => 'display_name_singular',\n                                            '_field_trans' => get_field_translations($dataType, 'display_name_singular')\n                                        ])\n                                    @endif\n                                    <input type=\"text\" class=\"form-control\"\n                                           name=\"display_name_singular\"\n                                           id=\"display_name_singular\"\n                                           placeholder=\"{{ __('voyager::bread.display_name_singular') }}\"\n                                           value=\"{{ $display_name }}\">\n                                </div>\n                                <div class=\"col-md-6 form-group\">\n                                    <label for=\"display_name_plural\">{{ __('voyager::bread.display_name_plural') }}</label>\n                                    @if($isModelTranslatable)\n                                        @include('voyager::multilingual.input-hidden', [\n                                            'isModelTranslatable' => true,\n                                            '_field_name'         => 'display_name_plural',\n                                            '_field_trans' => get_field_translations($dataType, 'display_name_plural')\n                                        ])\n                                    @endif\n                                    <input type=\"text\" class=\"form-control\"\n                                           name=\"display_name_plural\"\n                                           id=\"display_name_plural\"\n                                           placeholder=\"{{ __('voyager::bread.display_name_plural') }}\"\n                                           value=\"{{ $display_name_plural }}\">\n                                </div>\n                            </div>\n                            <div class=\"row clearfix\">\n                                <div class=\"col-md-6 form-group\">\n                                    <label for=\"slug\">{{ __('voyager::bread.url_slug') }}</label>\n                                    <input type=\"text\" class=\"form-control\" name=\"slug\" placeholder=\"{{ __('voyager::bread.url_slug_ph') }}\"\n                                           value=\"{{ $dataType->slug ?? $slug }}\">\n                                </div>\n                                <div class=\"col-md-6 form-group\">\n                                    <label for=\"icon\">{{ __('voyager::bread.icon_hint') }} <a\n                                                href=\"{{ route('voyager.compass.index') }}#fonts\"\n                                                target=\"_blank\">{{ __('voyager::bread.icon_hint2') }}</a></label>\n                                    <input type=\"text\" class=\"form-control\" name=\"icon\"\n                                           placeholder=\"{{ __('voyager::bread.icon_class') }}\"\n                                           value=\"{{ $dataType->icon ?? '' }}\">\n                                </div>\n                            </div>\n                            <div class=\"row clearfix\">\n                                <div class=\"col-md-6 form-group\">\n                                    <label for=\"model_name\">{{ __('voyager::bread.model_name') }}</label>\n                                    <span class=\"voyager-question\"\n                                        aria-hidden=\"true\"\n                                        data-toggle=\"tooltip\"\n                                        data-placement=\"right\"\n                                        title=\"{{ __('voyager::bread.model_name_ph') }}\"></span>\n                                    <input type=\"text\" class=\"form-control\" name=\"model_name\" placeholder=\"{{ __('voyager::bread.model_class') }}\"\n                                           value=\"{{ $dataType->model_name ?? $model_name }}\">\n                                </div>\n                                <div class=\"col-md-6 form-group\">\n                                    <label for=\"controller\">{{ __('voyager::bread.controller_name') }}</label>\n                                    <span class=\"voyager-question\"\n                                        aria-hidden=\"true\"\n                                        data-toggle=\"tooltip\"\n                                        data-placement=\"right\"\n                                        title=\"{{ __('voyager::bread.controller_name_hint') }}\"></span>\n                                    <input type=\"text\" class=\"form-control\" name=\"controller\" placeholder=\"{{ __('voyager::bread.controller_name') }}\"\n                                           value=\"{{ $dataType->controller ?? '' }}\">\n                                </div>\n                            </div>\n                            <div class=\"row clearfix\">\n                                <div class=\"col-md-6 form-group\">\n                                    <label for=\"policy_name\">{{ __('voyager::bread.policy_name') }}</label>\n                                    <span class=\"voyager-question\"\n                                          aria-hidden=\"true\"\n                                          data-toggle=\"tooltip\"\n                                          data-placement=\"right\"\n                                          title=\"{{ __('voyager::bread.policy_name_ph') }}\"></span>\n                                    <input type=\"text\" class=\"form-control\" name=\"policy_name\" placeholder=\"{{ __('voyager::bread.policy_class') }}\"\n                                           value=\"{{ $dataType->policy_name ?? '' }}\">\n                                </div>\n                                <div class=\"col-md-3 form-group\">\n                                    <label for=\"generate_permissions\">{{ __('voyager::bread.generate_permissions') }}</label><br>\n                                    <?php $checked = (isset($dataType->generate_permissions) && $dataType->generate_permissions == 1) || (isset($generate_permissions) && $generate_permissions); ?>\n                                    <input type=\"checkbox\"\n                                           name=\"generate_permissions\"\n                                           class=\"toggleswitch\"\n                                           data-on=\"{{ __('voyager::generic.yes') }}\"\n                                           data-off=\"{{ __('voyager::generic.no') }}\"\n                                           @if($checked) checked @endif >\n                                </div>\n                                <div class=\"col-md-3 form-group\">\n                                    <label for=\"server_side\">{{ __('voyager::bread.server_pagination') }}</label><br>\n                                    <?php $checked = (isset($dataType->server_side) && $dataType->server_side == 1) || (isset($server_side) && $server_side); ?>\n                                    <input type=\"checkbox\"\n                                           name=\"server_side\"\n                                           class=\"toggleswitch\"\n                                           data-on=\"{{ __('voyager::generic.yes') }}\"\n                                           data-off=\"{{ __('voyager::generic.no') }}\"\n                                           @if($checked) checked @endif >\n                                </div>\n                            </div>\n                            <div class=\"row clearfix\">\n                                <div class=\"col-md-3 form-group\">\n                                    <label for=\"order_column\">{{ __('voyager::bread.order_column') }}</label>\n                                    <span class=\"voyager-question\"\n                                          aria-hidden=\"true\"\n                                          data-toggle=\"tooltip\"\n                                          data-placement=\"right\"\n                                          title=\"{{ __('voyager::bread.order_column_ph') }}\"></span>\n                                    <select name=\"order_column\" class=\"select2 form-control\">\n                                        <option value=\"\">-- {{ __('voyager::generic.none') }} --</option>\n                                        @foreach($fieldOptions as $tbl)\n                                        <option value=\"{{ $tbl['field'] }}\"\n                                                @if(isset($dataType) && $dataType->order_column == $tbl['field']) selected @endif\n                                        >{{ $tbl['field'] }}</option>\n                                        @endforeach\n                                      </select>\n                                </div>\n                                <div class=\"col-md-3 form-group\">\n                                    <label for=\"order_display_column\">{{ __('voyager::bread.order_ident_column') }}</label>\n                                    <span class=\"voyager-question\"\n                                          aria-hidden=\"true\"\n                                          data-toggle=\"tooltip\"\n                                          data-placement=\"right\"\n                                          title=\"{{ __('voyager::bread.order_ident_column_ph') }}\"></span>\n                                    <select name=\"order_display_column\" class=\"select2 form-control\">\n                                        <option value=\"\">-- {{ __('voyager::generic.none') }} --</option>\n                                        @foreach($fieldOptions as $tbl)\n                                        <option value=\"{{ $tbl['field'] }}\"\n                                                @if(isset($dataType) && $dataType->order_display_column == $tbl['field']) selected @endif\n                                        >{{ $tbl['field'] }}</option>\n                                        @endforeach\n                                    </select>\n                                </div>\n                                <div class=\"col-md-3 form-group\">\n                                    <label for=\"order_direction\">{{ __('voyager::bread.order_direction') }}</label>\n                                    <select name=\"order_direction\" class=\"select2 form-control\">\n                                        <option value=\"asc\" @if(isset($dataType) && $dataType->order_direction == 'asc') selected @endif>\n                                            {{ __('voyager::generic.ascending') }}\n                                        </option>\n                                        <option value=\"desc\" @if(isset($dataType) && $dataType->order_direction == 'desc') selected @endif>\n                                            {{ __('voyager::generic.descending') }}\n                                        </option>\n                                    </select>\n                                </div>\n                                <div class=\"col-md-3 form-group\">\n                                    <label for=\"default_search_key\">{{ __('voyager::bread.default_search_key') }}</label>\n                                    <span class=\"voyager-question\"\n                                          aria-hidden=\"true\"\n                                          data-toggle=\"tooltip\"\n                                          data-placement=\"right\"\n                                          title=\"{{ __('voyager::bread.default_search_key_ph') }}\"></span>\n                                    <select name=\"default_search_key\" class=\"select2 form-control\">\n                                        <option value=\"\">-- {{ __('voyager::generic.none') }} --</option>\n                                        @foreach($fieldOptions as $tbl)\n                                        <option value=\"{{ $tbl['field'] }}\"\n                                                @if(isset($dataType) && $dataType->default_search_key == $tbl['field']) selected @endif\n                                        >{{ $tbl['field'] }}</option>\n                                        @endforeach\n                                    </select>\n                                </div>\n                            </div>\n                            <div class=\"row clearfix\">\n                                @if (isset($scopes) && isset($dataType))\n                                    <div class=\"col-md-3 form-group\">\n                                        <label for=\"scope\">{{ __('voyager::bread.scope') }}</label>\n                                        <select name=\"scope\" class=\"select2 form-control\">\n                                            <option value=\"\">-- {{ __('voyager::generic.none') }} --</option>\n                                            @foreach($scopes as $scope)\n                                            <option value=\"{{ $scope }}\"\n                                                    @if($dataType->scope == $scope) selected @endif\n                                            >{{ $scope }}</option>\n                                            @endforeach\n                                        </select>\n                                    </div>\n                                @endif\n                                <div class=\"col-md-9 form-group\">\n                                    <label for=\"description\">{{ __('voyager::bread.description') }}</label>\n                                    <textarea class=\"form-control\"\n                                              name=\"description\"\n                                              placeholder=\"{{ __('voyager::bread.description') }}\"\n                                    >{{ $dataType->description ?? '' }}</textarea>\n                                </div>\n                            </div>\n                        </div><!-- .panel-body -->\n                    </div><!-- .panel -->\n\n\n                    <div class=\"panel panel-primary panel-bordered\">\n                        <div class=\"panel-heading\">\n                            <h3 class=\"panel-title panel-icon\"><i class=\"voyager-window-list\"></i> {{ __('voyager::bread.edit_rows', ['table' => $table]) }}:</h3>\n                            <div class=\"panel-actions\">\n                                <a class=\"panel-action voyager-angle-up\" data-toggle=\"panel-collapse\" aria-hidden=\"true\"></a>\n                            </div>\n                        </div>\n\n                        <div class=\"panel-body\">\n                            <div class=\"row fake-table-hd\">\n                                <div class=\"col-xs-2\">{{ __('voyager::database.field') }}</div>\n                                <div class=\"col-xs-2\">{{ __('voyager::database.visibility') }}</div>\n                                <div class=\"col-xs-2\">{{ __('voyager::database.input_type') }}</div>\n                                <div class=\"col-xs-2\">{{ __('voyager::bread.display_name') }}</div>\n                                <div class=\"col-xs-4\">{{ __('voyager::database.optional_details') }}</div>\n                            </div>\n\n                            <div id=\"bread-items\">\n                            @php\n                                $r_order = 0;\n                            @endphp\n                            @foreach($fieldOptions as $data)\n                                @php\n                                    $r_order += 1;\n                                @endphp\n\n                                @if(isset($dataType->id))\n                                    <?php $dataRow = Voyager::model('DataRow')->where('data_type_id', '=', $dataType->id)->where('field', '=', $data['field'])->first(); ?>\n                                @endif\n\n                                <div class=\"row row-dd\">\n                                    <div class=\"col-xs-2\">\n                                        <h4><strong>{{ $data['field'] }}</strong></h4>\n                                        <strong>{{ __('voyager::database.type') }}:</strong> <span>{{ $data['type'] }}</span><br/>\n                                        <strong>{{ __('voyager::database.key') }}:</strong> <span>{{ $data['key'] }}</span><br/>\n                                        <strong>{{ __('voyager::generic.required') }}:</strong>\n                                        @if($data['null'] == \"NO\")\n                                            <span>{{ __('voyager::generic.yes') }}</span>\n                                            <input type=\"hidden\" value=\"1\" name=\"field_required_{{ $data['field'] }}\" checked=\"checked\">\n                                        @else\n                                            <span>{{ __('voyager::generic.no') }}</span>\n                                            <input type=\"hidden\" value=\"0\" name=\"field_required_{{ $data['field'] }}\">\n                                        @endif\n                                        <div class=\"handler voyager-handle\"></div>\n                                        <input class=\"row_order\" type=\"hidden\" value=\"{{ $dataRow->order ?? $r_order }}\" name=\"field_order_{{ $data['field'] }}\">\n                                    </div>\n                                    <div class=\"col-xs-2\">\n                                        <input type=\"checkbox\"\n                                               id=\"field_browse_{{ $data['field'] }}\"\n                                               name=\"field_browse_{{ $data['field'] }}\"\n                                               @if(isset($dataRow->browse) && $dataRow->browse)\n                                                   checked=\"checked\"\n                                               @elseif($data['key'] == 'PRI')\n                                               @elseif($data['type'] == 'timestamp' && $data['field'] == 'updated_at')\n                                               @elseif(!isset($dataRow->browse))\n                                                   checked=\"checked\"\n                                               @endif>\n                                        <label for=\"field_browse_{{ $data['field'] }}\">{{ __('voyager::generic.browse') }}</label><br/>\n                                        <input type=\"checkbox\"\n                                               id=\"field_read_{{ $data['field'] }}\"\n                                               name=\"field_read_{{ $data['field'] }}\" @if(isset($dataRow->read) && $dataRow->read) checked=\"checked\" @elseif($data['key'] == 'PRI')@elseif($data['type'] == 'timestamp' && $data['field'] == 'updated_at')@elseif(!isset($dataRow->read)) checked=\"checked\" @endif>\n                                        <label for=\"field_read_{{ $data['field'] }}\">{{ __('voyager::generic.read') }}</label><br/>\n                                        <input type=\"checkbox\"\n                                               id=\"field_edit_{{ $data['field'] }}\"\n                                               name=\"field_edit_{{ $data['field'] }}\" @if(isset($dataRow->edit) && $dataRow->edit) checked=\"checked\" @elseif($data['key'] == 'PRI')@elseif($data['type'] == 'timestamp' && $data['field'] == 'updated_at')@elseif(!isset($dataRow->edit)) checked=\"checked\" @endif>\n                                        <label for=\"field_edit_{{ $data['field'] }}\">{{ __('voyager::generic.edit') }}</label><br/>\n                                        <input type=\"checkbox\"\n                                               id=\"field_add_{{ $data['field'] }}\"\n                                               name=\"field_add_{{ $data['field'] }}\" @if(isset($dataRow->add) && $dataRow->add) checked=\"checked\" @elseif($data['key'] == 'PRI')@elseif($data['type'] == 'timestamp' && $data['field'] == 'created_at')@elseif($data['type'] == 'timestamp' && $data['field'] == 'updated_at')@elseif(!isset($dataRow->add)) checked=\"checked\" @endif>\n                                            <label for=\"field_add_{{ $data['field'] }}\">{{ __('voyager::generic.add') }}</label><br/>\n                                        <input type=\"checkbox\"\n                                               id=\"field_delete_{{ $data['field'] }}\"\n                                               name=\"field_delete_{{ $data['field'] }}\" @if(isset($dataRow->delete) && $dataRow->delete) checked=\"checked\" @elseif($data['key'] == 'PRI')@elseif($data['type'] == 'timestamp' && $data['field'] == 'updated_at')@elseif(!isset($dataRow->delete)) checked=\"checked\" @endif>\n                                                <label for=\"field_delete_{{ $data['field'] }}\">{{ __('voyager::generic.delete') }}</label><br/>\n                                    </div>\n                                    <div class=\"col-xs-2\">\n                                        <input type=\"hidden\" name=\"field_{{ $data['field'] }}\" value=\"{{ $data['field'] }}\">\n                                        @if($data['type'] == 'timestamp')\n                                            <p>{{ __('voyager::generic.timestamp') }}</p>\n                                            <input type=\"hidden\" value=\"timestamp\"\n                                                   name=\"field_input_type_{{ $data['field'] }}\">\n                                        @else\n                                            <select name=\"field_input_type_{{ $data['field'] }}\">\n                                                @foreach (Voyager::formFields() as $formField)\n                                                    @php\n                                                    $selected = (isset($dataRow->type) && $formField->getCodename() == $dataRow->type) || (!isset($dataRow->type) && $formField->getCodename() == 'text');\n                                                    @endphp\n                                                    <option value=\"{{ $formField->getCodename() }}\" {{ $selected ? 'selected' : '' }}>\n                                                        {{ $formField->getName() }}\n                                                    </option>\n                                                @endforeach\n                                            </select>\n                                        @endif\n                                    </div>\n                                    <div class=\"col-xs-2\">\n                                        @if($isModelTranslatable)\n                                            @include('voyager::multilingual.input-hidden', [\n                                                'isModelTranslatable' => true,\n                                                '_field_name'         => 'field_display_name_' . $data['field'],\n                                                '_field_trans' => $dataRow ? get_field_translations($dataRow, 'display_name') : json_encode([config('voyager.multilingual.default') => ucwords(str_replace('_', ' ', $data['field']))]),\n                                            ])\n                                        @endif\n                                        <input type=\"text\" class=\"form-control\"\n                                               value=\"{{ $dataRow->display_name ?? ucwords(str_replace('_', ' ', $data['field'])) }}\"\n                                               name=\"field_display_name_{{ $data['field'] }}\">\n                                    </div>\n                                    <div class=\"col-xs-4\">\n                                        <div class=\"alert alert-danger validation-error\">\n                                            {{ __('voyager::json.invalid') }}\n                                        </div>\n                                        <textarea id=\"json-input-{{ json_encode($data['field']) }}\"\n                                                  class=\"resizable-editor\"\n                                                  data-editor=\"json\"\n                                                  name=\"field_details_{{ $data['field'] }}\">\n                                            {{ json_encode(isset($dataRow->details) ? $dataRow->details : new class{}) }}\n                                        </textarea>\n                                    </div>\n                                </div>\n\n\n\n                            @endforeach\n\n                            @if(isset($dataTypeRelationships))\n                                @foreach($dataTypeRelationships as $relationship)\n                                    @include('voyager::tools.bread.relationship-partial', $relationship)\n                                @endforeach\n                            @endif\n\n                            </div>\n\n                        </div><!-- .panel-body -->\n                        <div class=\"panel-footer\">\n                             <div class=\"btn btn-new-relationship\"><i class=\"voyager-heart\"></i> <span>\n                             {{ __('voyager::database.relationship.create') }}</span></div>\n                        </div>\n                    </div><!-- .panel -->\n\n                    <button type=\"submit\" class=\"btn pull-right btn-primary\">{{ __('voyager::generic.submit') }}</button>\n\n                </form>\n            </div><!-- .col-md-12 -->\n        </div><!-- .row -->\n    </div><!-- .page-content -->\n\n@include('voyager::tools.bread.relationship-new-modal')\n\n@stop\n\n@section('javascript')\n    <link rel=\"stylesheet\" href=\"https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/themes/smoothness/jquery-ui.css\">\n    <script type=\"text/javascript\" src=\"https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.js\"></script>\n\n    <script>\n        window.invalidEditors = [];\n        var validationAlerts = $('.validation-error');\n        validationAlerts.hide();\n        $(function () {\n            @if ($isModelTranslatable)\n                /**\n                 * Multilingual setup\n                 */\n                $('.side-body').multilingual({\n                    \"form\":    'form',\n                    \"editing\": true\n                });\n            @endif\n            /**\n             * Reorder items\n             */\n            reOrderItems();\n\n            $('#bread-items').disableSelection();\n\n            $('[data-toggle=\"tooltip\"]').tooltip();\n\n            $('.toggleswitch').bootstrapToggle();\n\n            $('textarea[data-editor]').each(function () {\n                var textarea = $(this),\n                mode = textarea.data('editor'),\n                editDiv = $('<div>').insertBefore(textarea),\n                editor = ace.edit(editDiv[0]),\n                _session = editor.getSession(),\n                valid = false;\n                textarea.hide();\n\n                // Validate JSON\n                _session.on(\"changeAnnotation\", function(){\n                    valid = _session.getAnnotations().length ? false : true;\n                    if (!valid) {\n                        if (window.invalidEditors.indexOf(textarea.attr('id')) < 0) {\n                            window.invalidEditors.push(textarea.attr('id'));\n                        }\n                    } else {\n                        for(var i = window.invalidEditors.length - 1; i >= 0; i--) {\n                            if(window.invalidEditors[i] == textarea.attr('id')) {\n                               window.invalidEditors.splice(i, 1);\n                            }\n                        }\n                    }\n                });\n\n                // Use workers only when needed\n                editor.on('focus', function () {\n                    _session.setUseWorker(true);\n                });\n                editor.on('blur', function () {\n                    if (valid) {\n                        textarea.siblings('.validation-error').hide();\n                        _session.setUseWorker(false);\n                    } else {\n                        textarea.siblings('.validation-error').show();\n                    }\n                });\n\n                _session.setUseWorker(false);\n\n                editor.setAutoScrollEditorIntoView(true);\n                editor.$blockScrolling = Infinity;\n                editor.setOption(\"maxLines\", 30);\n                editor.setOption(\"minLines\", 4);\n                editor.setOption(\"showLineNumbers\", false);\n                editor.setTheme(\"ace/theme/github\");\n                _session.setMode(\"ace/mode/json\");\n                if (textarea.val()) {\n                    _session.setValue(JSON.stringify(JSON.parse(textarea.val()), null, 4));\n                }\n\n                _session.setMode(\"ace/mode/\" + mode);\n\n                // copy back to textarea on form submit...\n                textarea.closest('form').on('submit', function (ev) {\n                    if (window.invalidEditors.length) {\n                        ev.preventDefault();\n                        ev.stopPropagation();\n                        validationAlerts.hide();\n                        for (var i = window.invalidEditors.length - 1; i >= 0; i--) {\n                            $('#'+window.invalidEditors[i]).siblings('.validation-error').show();\n                        }\n                        toastr.error('{{ __('voyager::json.invalid_message') }}', '{{ __('voyager::json.validation_errors') }}', {\"preventDuplicates\": true, \"preventOpenDuplicates\": true});\n                    } else {\n                        if (_session.getValue()) {\n                            // uglify JSON object and update textarea for submit purposes\n                            textarea.val(JSON.stringify(JSON.parse(_session.getValue())));\n                        }else{\n                            textarea.val('');\n                        }\n                    }\n                });\n            });\n\n        });\n\n        function reOrderItems(){\n            $('#bread-items').sortable({\n                handle: '.handler',\n                update: function (e, ui) {\n                    var _rows = $('#bread-items').find('.row_order'),\n                        _size = _rows.length;\n\n                    for (var i = 0; i < _size; i++) {\n                        $(_rows[i]).val(i+1);\n                    }\n                },\n                create: function (event, ui) {\n                    sort();\n                }\n            });\n        }\n\n        function sort() {\n            var sortableList = $('#bread-items');\n            var listitems = $('div.row.row-dd', sortableList);\n\n            listitems.sort(function (a, b) {\n                return (parseInt($(a).find('.row_order').val()) > parseInt($(b).find('.row_order').val()))  ? 1 : -1;\n            });\n            sortableList.append(listitems);\n\n        }\n\n        /********** Relationship functionality **********/\n\n        $(function () {\n            $('.relationship_type').change(function(){\n                $(this).parent().parent().find('.belongsToManyShow, .belongsToShow, .hasOneShow, .hasManyShow').hide();\n                $(this).parent().parent().find('.' + $(this).val() + 'Show').show();\n                // hasOneShow has a prepopulated select, only one between the following should be enabled\n                $(this).parent().parent().find('.hasOneShow select').attr('disabled', true);\n                $(this).parent().parent().find('.belongsToShow select').attr('disabled', false);\n\n                if($(this).val() == 'belongsTo'){\n                    $(this).parent().parent().find('.relationshipField').show();\n                    $(this).parent().parent().find('.relationshipPivot').hide();\n                    $(this).parent().parent().find('.relationship_taggable').hide();\n                    $(this).parent().parent().find('.hasOneMany').removeClass('flexed');\n                    $(this).parent().parent().find('.belongsTo').addClass('flexed');\n                } else if($(this).val() == 'hasOne' || $(this).val() == 'hasMany'){\n                    $(this).parent().parent().find('.relationshipField').show();\n                    $(this).parent().parent().find('.relationshipPivot').hide();\n                    $(this).parent().parent().find('.relationship_taggable').hide();\n                    $(this).parent().parent().find('.hasOneMany').addClass('flexed');\n                    $(this).parent().parent().find('.belongsTo').removeClass('flexed');\n                    $(this).parent().parent().find('.hasOneShow select').attr('disabled', false);\n                    $(this).parent().parent().find('.belongsToShow select').attr('disabled', true);\n                } else {\n                    $(this).parent().parent().find('.relationshipField').hide();\n                    $(this).parent().parent().find('.relationshipPivot').css('display', 'flex');\n                    $(this).parent().parent().find('.relationship_taggable').show();\n                }\n            }).trigger('change');\n\n            $('.btn-new-relationship').click(function(){\n                // Update table data\n                $('#new_relationship_modal .relationship_table').trigger('change');\n\n                $('#new_relationship_modal').modal('show');\n            });\n\n            relationshipTextDataBinding();\n\n            $('.relationship_table').on('change', function(){\n                populateRowsFromTable($(this));\n            });\n\n            $('.voyager-relationship-details-btn').click(function(){\n                $(this).toggleClass('open');\n                if($(this).hasClass('open')){\n                    $(this).parent().parent().find('.voyager-relationship-details').slideDown();\n                    populateRowsFromTable($(this).parent().parent().find('select.relationship_table'));\n                } else {\n                    $(this).parent().parent().find('.voyager-relationship-details').slideUp();\n                }\n            });\n\n        });\n\n        function populateRowsFromTable(dropdown){\n            var tbl = dropdown.val();\n\n            $.get('{{ route('voyager.database.index') }}/' + tbl, function(data){\n                var tbl_selected = $(dropdown).val();\n\n                $(dropdown).parent().parent().find('.rowDrop').each(function(){\n                    var selected_value = $(this).data('selected');\n\n                    var options = $.map(data, function (obj, key) {\n                        return {id: key, text: key};\n                    });\n\n                    $(this).empty().select2({\n                        data: options\n                    });\n\n                    if (selected_value == '' || !$(this).find(\"option[value='\"+selected_value+\"']\").length) {\n                        selected_value = $(this).find(\"option:first-child\").val();\n                    }\n\n                    $(this).val(selected_value).trigger('change');\n                });\n            });\n        }\n\n        function relationshipTextDataBinding(){\n            $('.relationship_display_name').bind('input', function() {\n                $(this).parent().parent().parent().find('.label_relationship p').text($(this).val());\n            });\n            $('.relationship_table').on('change', function(){\n                var tbl_selected_text = $(this).find('option:selected').text();\n                $(this).parent().parent().find('.label_table_name').text(tbl_selected_text);\n            });\n            $('.relationship_table').each(function(){\n                var tbl_selected_text = $(this).find('option:selected').text();\n                $(this).parent().parent().find('.label_table_name').text(tbl_selected_text);\n            });\n        }\n\n        /********** End Relationship Functionality **********/\n    </script>\n@stop\n"
  },
  {
    "path": "resources/views/tools/bread/index.blade.php",
    "content": "@extends('voyager::master')\n\n@section('page_title', __('voyager::generic.viewing').' '.__('voyager::generic.bread'))\n\n@section('page_header')\n    <h1 class=\"page-title\">\n        <i class=\"voyager-bread\"></i> {{ __('voyager::generic.bread') }}\n    </h1>\n@stop\n\n@section('content')\n\n    <div class=\"page-content container-fluid\">\n        @include('voyager::alerts')\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n\n                <table class=\"table table-striped database-tables\">\n                    <thead>\n                        <tr>\n                            <th>{{ __('voyager::database.table_name') }}</th>\n                            <th style=\"text-align:right\">{{ __('voyager::bread.bread_crud_actions') }}</th>\n                        </tr>\n                    </thead>\n\n                @foreach($tables as $table)\n                    @continue(in_array($table->name, config('voyager.database.tables.hidden', [])))\n                    <tr>\n                        <td>\n                            <p class=\"name\">\n                                <a href=\"{{ route('voyager.database.show', $table->prefix.$table->name) }}\"\n                                   data-name=\"{{ $table->prefix.$table->name }}\" class=\"desctable\">\n                                   {{ $table->name }}\n                                </a>\n                                <i class=\"voyager-data\"\n                                   style=\"font-size:25px; position:absolute; margin-left:10px; margin-top:-3px;\"></i>\n                            </p>\n                        </td>\n\n                        <td class=\"actions text-right\">\n                            @if($table->dataTypeId)\n                                <a href=\"{{ route('voyager.' . $table->slug . '.index') }}\"\n                                   class=\"btn btn-warning btn-sm browse_bread\" style=\"margin-right: 0;\">\n                                    <i class=\"voyager-plus\"></i> {{ __('voyager::generic.browse') }}\n                                </a>\n                                <a href=\"{{ route('voyager.bread.edit', $table->name) }}\"\n                                   class=\"btn btn-primary btn-sm edit\">\n                                    <i class=\"voyager-edit\"></i> {{ __('voyager::generic.edit') }}\n                                </a>\n                                <a href=\"#delete-bread\" data-id=\"{{ $table->dataTypeId }}\" data-name=\"{{ $table->name }}\"\n                                     class=\"btn btn-danger btn-sm delete\">\n                                    <i class=\"voyager-trash\"></i> {{ __('voyager::generic.delete') }}\n                                </a>\n                            @else\n                                <a href=\"{{ route('voyager.bread.create', $table->name) }}\"\n                                   class=\"_btn btn-default btn-sm pull-right\">\n                                    <i class=\"voyager-plus\"></i> {{ __('voyager::bread.add_bread') }}\n                                </a>\n                            @endif\n                        </td>\n                    </tr>\n                @endforeach\n                </table>\n            </div>\n        </div>\n    </div>\n    {{-- Delete BREAD Modal --}}\n    <div class=\"modal modal-danger fade\" tabindex=\"-1\" id=\"delete_builder_modal\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"{{ __('voyager::generic.close') }}\"><span\n                                aria-hidden=\"true\">&times;</span></button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-trash\"></i>  {!! __('voyager::bread.delete_bread_quest', ['table' => '<span id=\"delete_builder_name\"></span>']) !!}</h4>\n                </div>\n                <div class=\"modal-footer\">\n                    <form action=\"#\" id=\"delete_builder_form\" method=\"POST\">\n                        {{ method_field('DELETE') }}\n                        <input type=\"hidden\" name=\"_token\" value=\"{{ csrf_token() }}\">\n                        <input type=\"submit\" class=\"btn btn-danger\" value=\"{{ __('voyager::bread.delete_bread_conf') }}\">\n                    </form>\n                    <button type=\"button\" class=\"btn btn-outline pull-right\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                </div>\n            </div><!-- /.modal-content -->\n        </div><!-- /.modal-dialog -->\n    </div><!-- /.modal -->\n\n    <div class=\"modal modal-info fade\" tabindex=\"-1\" id=\"table_info\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"{{ __('voyager::generic.close') }}\"><span\n                                aria-hidden=\"true\">&times;</span></button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-data\"></i> @{{ table.name }}</h4>\n                </div>\n                <div class=\"modal-body\" style=\"overflow:scroll\">\n                    <table class=\"table table-striped\">\n                        <thead>\n                        <tr>\n                            <th>{{ __('voyager::database.field') }}</th>\n                            <th>{{ __('voyager::database.type') }}</th>\n                            <th>{{ __('voyager::database.null') }}</th>\n                            <th>{{ __('voyager::database.key') }}</th>\n                            <th>{{ __('voyager::database.default') }}</th>\n                            <th>{{ __('voyager::database.extra') }}</th>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <tr v-for=\"row in table.rows\">\n                            <td><strong>@{{ row.Field }}</strong></td>\n                            <td>@{{ row.Type }}</td>\n                            <td>@{{ row.Null }}</td>\n                            <td>@{{ row.Key }}</td>\n                            <td>@{{ row.Default }}</td>\n                            <td>@{{ row.Extra }}</td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </div>\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-outline pull-right\" data-dismiss=\"modal\">{{ __('voyager::generic.close') }}</button>\n                </div>\n            </div><!-- /.modal-content -->\n        </div><!-- /.modal-dialog -->\n    </div><!-- /.modal -->\n\n@stop\n\n@section('javascript')\n\n    <script>\n\n        var table = {\n            name: '',\n            rows: []\n        };\n\n        new Vue({\n            el: '#table_info',\n            data: {\n                table: table,\n            },\n        });\n\n        $(function () {\n\n            // Setup Delete BREAD\n            //\n            $('table .actions').on('click', '.delete', function (e) {\n                id = $(this).data('id');\n                name = $(this).data('name');\n\n                $('#delete_builder_name').text(name);\n                $('#delete_builder_form')[0].action = '{{ route('voyager.bread.delete', ['__id']) }}'.replace('__id', id);\n                $('#delete_builder_modal').modal('show');\n            });\n\n            // Setup Show Table Info\n            //\n            $('.database-tables').on('click', '.desctable', function (e) {\n                e.preventDefault();\n                href = $(this).attr('href');\n                table.name = $(this).data('name');\n                table.rows = [];\n                $.get(href, function (data) {\n                    $.each(data, function (key, val) {\n                        table.rows.push({\n                            Field: val.field,\n                            Type: val.type,\n                            Null: val.null,\n                            Key: val.key,\n                            Default: val.default,\n                            Extra: val.extra\n                        });\n                        $('#table_info').modal('show');\n                    });\n                });\n            });\n        });\n    </script>\n\n@stop\n"
  },
  {
    "path": "resources/views/tools/bread/relationship-new-modal.blade.php",
    "content": "<!-- !!! Add form action below -->\n<form role=\"form\" action=\"{{ route('voyager.bread.relationship') }}\" method=\"POST\">\n\t<div class=\"modal fade modal-danger modal-relationships\" id=\"new_relationship_modal\">\n\t\t<div class=\"modal-dialog relationship-panel\">\n\t\t    <div class=\"model-content\">\n\t\t        <div class=\"modal-header\">\n\t                <button type=\"button\" class=\"close\" data-dismiss=\"modal\"\n\t                        aria-hidden=\"true\">&times;</button>\n\t                <h4 class=\"modal-title\"><i class=\"voyager-heart\"></i> {{ \\Illuminate\\Support\\Str::singular(ucfirst($table)) }}\n\t\t\t\t\t{{ __('voyager::database.relationship.relationships') }} </h4>\n\t            </div>\n\n\t\t        <div class=\"modal-body\">\n\t\t\t        <div class=\"row\">\n\n\t\t\t        \t@if(isset($dataType->id))\n\t\t\t\t            <div class=\"col-md-12 relationship_details\">\n\t\t\t\t                <p class=\"relationship_table_select\">{{ \\Illuminate\\Support\\Str::singular(ucfirst($table)) }}</p>\n\t\t\t\t                <select class=\"relationship_type select2\" name=\"relationship_type\">\n\t\t\t\t                    <option value=\"hasOne\" @if(isset($relationshipDetails->type) && $relationshipDetails->type == 'hasOne') selected=\"selected\" @endif>{{ __('voyager::database.relationship.has_one') }}</option>\n\t\t\t\t                    <option value=\"hasMany\" @if(isset($relationshipDetails->type) && $relationshipDetails->type == 'hasMany') selected=\"selected\" @endif>{{ __('voyager::database.relationship.has_many') }}</option>\n\t\t\t\t                    <option value=\"belongsTo\" @if(isset($relationshipDetails->type) && $relationshipDetails->type == 'belongsTo') selected=\"selected\" @endif>{{ __('voyager::database.relationship.belongs_to') }}</option>\n\t\t\t\t                    <option value=\"belongsToMany\" @if(isset($relationshipDetails->type) && $relationshipDetails->type == 'belongsToMany') selected=\"selected\" @endif>{{ __('voyager::database.relationship.belongs_to_many') }}</option>\n\t\t\t\t                </select>\n\t\t\t\t                <select class=\"relationship_table select2\" name=\"relationship_table\">\n\t\t\t\t                    @foreach($tables as $tbl)\n\t\t\t\t                        <option value=\"{{ $tbl }}\" @if(isset($relationshipDetails->table) && $relationshipDetails->table == $tbl) selected=\"selected\" @endif>{{ \\Illuminate\\Support\\Str::singular(ucfirst($tbl)) }}</option>\n\t\t\t\t                    @endforeach\n\t\t\t\t                </select>\n\t\t\t\t                <span><input type=\"text\" class=\"form-control\" name=\"relationship_model\" placeholder=\"{{ __('voyager::database.relationship.namespace') }}\" value=\"{{ $relationshipDetails->model ?? ''}}\"></span>\n\t\t\t\t            </div>\n\t\t\t\t            <div class=\"col-md-12 relationship_details relationshipField\">\n\t\t\t\t            \t<div class=\"belongsTo\">\n\t\t\t\t            \t\t<label>{{ __('voyager::database.relationship.which_column_from') }} <span>{{ \\Illuminate\\Support\\Str::singular(ucfirst($table)) }}</span> {{ __('voyager::database.relationship.is_used_to_reference') }} <span class=\"label_table_name\"></span>?</label>\n\t\t\t\t            \t\t<select name=\"relationship_column_belongs_to\" class=\"new_relationship_field select2\">\n\t\t\t\t                    \t@foreach($fieldOptions as $data)\n\t\t\t\t                        \t<option value=\"{{ $data['field'] }}\">{{ $data['field'] }}</option>\n\t\t\t\t                    \t@endforeach\n\t\t\t\t               \t\t</select>\n\t\t\t\t               \t</div>\n\t\t\t\t               \t<div class=\"hasOneMany flexed\">\n\t\t\t\t            \t\t<label>{{ __('voyager::database.relationship.which_column_from') }} <span class=\"label_table_name\"></span> {{ __('voyager::database.relationship.is_used_to_reference') }} <span>{{ \\Illuminate\\Support\\Str::singular(ucfirst($table)) }}</span>?</label>\n\t\t\t\t\t                <select name=\"relationship_column\" class=\"new_relationship_field select2 rowDrop\" data-table=\"{{ $tables[0] }}\" data-selected=\"\">\n\t\t\t\t\t                </select>\n\t\t\t\t\t            </div>\n\t\t\t\t            </div>\n\t\t\t\t            <div class=\"col-md-12 relationship_details relationshipPivot\">\n\t\t\t\t            \t<label>{{ __('voyager::database.relationship.pivot_table') }}:</label>\n\t\t\t\t            \t<select name=\"relationship_pivot\" class=\"select2\">\n\t\t                        \t@foreach($tables as $tbl)\n\t\t\t\t                        <option value=\"{{ $tbl }}\" @if(isset($relationshipDetails->table) && $relationshipDetails->table == $tbl) selected=\"selected\" @endif>{{ \\Illuminate\\Support\\Str::singular(ucfirst($tbl)) }}</option>\n\t\t\t\t                    @endforeach\n\t\t                        </select>\n\t\t\t\t            </div>\n\t\t\t\t            <div class=\"col-md-12 relationship_details_more\">\n\t\t\t\t                <div class=\"well\">\n\t\t\t\t                    <label>{{ __('voyager::database.relationship.selection_details') }}</label>\n\t\t\t\t                    <p><strong>{{ __('voyager::database.relationship.display_the') }} <span class=\"label_table_name\"></span>: </strong>\n\t\t\t\t                        <select name=\"relationship_label\" class=\"rowDrop select2\" data-table=\"{{ $tables[0] }}\" data-selected=\"\" style=\"width: 100%\">\n\t\t\t\t                        </select>\n\t\t\t\t                    </p>\n\t\t\t\t\t\t\t\t\t<p class=\"relationship_key belongsToShow belongsToManyShow\"><strong>{{ __('voyager::database.relationship.store_the') }}\n                                        <span class=\"label_table_name\"></span>: </strong>\n\t\t\t\t                        <select name=\"relationship_key\" class=\"rowDrop select2\" data-table=\"{{ $tables[0] }}\" data-selected=\"\" style=\"width: 100%\">\n\t\t\t\t                        </select>\n\t\t\t\t\t\t\t\t\t</p>\n                                    <p class=\"relationship_key hasOneShow hasManyShow\"><strong>{{ __('voyager::database.relationship.store_the') }}\n                                        <span>{{ \\Illuminate\\Support\\Str::singular(ucfirst($table)) }}</span>: </strong>\n                                        <select name=\"relationship_key\" class=\"select2\" style=\"width: 100%\">\n                                            @foreach($fieldOptions as $data)\n                                                <option value=\"{{ $data['field'] }}\">{{ $data['field'] }}</option>\n                                            @endforeach\n                                        </select>\n                                    </p>\n\t\t\t\t\t\t\t\t\t<p class=\"relationship_taggable\"><strong>{{ __('voyager::database.relationship.allow_tagging') }}:</strong> <br>\n\t\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" name=\"relationship_taggable\" class=\"toggleswitch\" data-on=\"{{ __('voyager::generic.yes') }}\" data-off=\"{{ __('voyager::generic.no') }}\">\n\t\t\t\t                    </p>\n\t\t\t\t                </div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t        @else\n\t\t\t\t        \t<div class=\"col-md-12\">\n\t\t\t\t        \t\t<h5><i class=\"voyager-rum-1\"></i> {{ __('voyager::database.relationship.easy_there') }}</h5>\n\t\t\t\t        \t\t<p class=\"relationship-warn\">{!! __('voyager::database.relationship.before_create') !!}</p>\n\t\t\t\t        \t</div>\n\t\t\t\t        @endif\n\n\t\t\t        </div>\n\t\t\t    </div>\n\t\t\t    <div class=\"modal-footer\">\n\t\t\t    \t<div class=\"relationship-btn-container\">\n\t\t\t    \t\t<button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">{{ __('voyager::database.relationship.cancel') }}</button>\n\t                    @if(isset($dataType->id))\n\t                    \t<button class=\"btn btn-danger btn-relationship\"><i class=\"voyager-plus\"></i> <span>{{ __('voyager::database.relationship.add_new') }}</span></button>\n\t                \t@endif\n\t                </div>\n\t\t\t    </div>\n\t\t    </div>\n\t\t</div>\n\t</div>\n\t<input type=\"hidden\" value=\"{{ $dataType->id ?? '' }}\" name=\"data_type_id\">\n\t{{ csrf_field() }}\n</form>\n"
  },
  {
    "path": "resources/views/tools/bread/relationship-partial.blade.php",
    "content": "@php\n    $relationshipDetails = $relationship['details'];\n    $relationshipKeyArray = array_fill_keys([\"model\", \"table\", \"type\", \"column\", \"key\", \"label\", \"pivot_table\", \"pivot\", \"taggable\"], '');\n\n    $adv_details = array_diff_key(json_decode(json_encode($relationshipDetails), true), $relationshipKeyArray);\n@endphp\n<div class=\"row row-dd row-dd-relationship\">\n    <div class=\"col-xs-2\">\n        <h4><i class=\"voyager-heart\"></i><strong>{{ $relationship->getTranslatedAttribute('display_name') }}</strong></h4>\n        <div class=\"handler voyager-handle\"></div>\n        <strong>{{ __('voyager::database.type') }}:</strong> <span>{{ __('voyager::database.relationship.relationship') }}</span><br/>\n        <strong>{{ __('voyager::generic.required') }}:</strong>\n        <input type=\"checkbox\" value=\"1\" name=\"field_required_{{ $relationship['field'] }}\" @if(!empty($relationship->required))checked=\"checked\"@endif>\n        <div class=\"handler voyager-handle\"></div>\n        <input class=\"row_order\" type=\"hidden\" value=\"{{ $relationship['order'] }}\" name=\"field_order_{{ $relationship['field'] }}\">\n    </div>\n    <div class=\"col-xs-2\">\n        <input type=\"checkbox\" name=\"field_browse_{{ $relationship['field'] }}\" @if(isset($relationship->browse) && $relationship->browse) checked=\"checked\" @elseif(!isset($relationship->browse)) checked=\"checked\" @endif>\n        <label for=\"field_browse_{{ $relationship['field'] }}\"> {{ __('voyager::database.relationship.browse') }}</label><br>\n        <input type=\"checkbox\" name=\"field_read_{{ $relationship['field'] }}\" @if(isset($relationship->read) && $relationship->read) checked=\"checked\" @elseif(!isset($relationship->read)) checked=\"checked\" @endif>\n        <label for=\"field_read_{{ $relationship['field'] }}\"> {{ __('voyager::database.relationship.read') }}</label><br>\n        <input type=\"checkbox\" name=\"field_edit_{{ $relationship['field'] }}\" @if(isset($relationship->edit) && $relationship->edit) checked=\"checked\" @elseif(!isset($relationship->edit)) checked=\"checked\" @endif>\n        <label for=\"field_edit_{{ $relationship['field'] }}\"> {{ __('voyager::database.relationship.edit') }}</label><br>\n        <input type=\"checkbox\" name=\"field_add_{{ $relationship['field'] }}\" @if(isset($relationship->add) && $relationship->add) checked=\"checked\" @elseif(!isset($relationship->add)) checked=\"checked\" @endif>\n        <label for=\"field_add_{{ $relationship['field'] }}\"> {{ __('voyager::database.relationship.add') }}</label><br>\n        <input type=\"checkbox\" name=\"field_delete_{{ $relationship['field'] }}\" @if(isset($relationship->delete) && $relationship->delete) checked=\"checked\" @elseif(!isset($relationship->delete)) checked=\"checked\" @endif>\n        <label for=\"field_delete_{{ $relationship['field'] }}\"> {{ __('voyager::database.relationship.delete') }}</label><br>\n    </div>\n    <div class=\"col-xs-2\">\n        <p>{{ __('voyager::database.relationship.relationship') }}</p>\n    </div>\n    <div class=\"col-xs-2\">\n        @if($isModelTranslatable)\n            @include('voyager::multilingual.input-hidden', [\n                'isModelTranslatable' => true,\n                '_field_name'         => 'field_display_name_' . $relationship['field'],\n                '_field_trans' => get_field_translations($relationship, 'display_name')\n            ])\n        @endif\n        <input type=\"text\" name=\"field_display_name_{{ $relationship['field'] }}\" class=\"form-control relationship_display_name\" value=\"{{ $relationship['display_name'] }}\">\n    </div>\n    <div class=\"col-xs-4\">\n        <div class=\"voyager-relationship-details-btn\">\n            <i class=\"voyager-angle-down\"></i><i class=\"voyager-angle-up\"></i>\n            <span class=\"open_text\">{{ __('voyager::database.relationship.open') }}</span>\n            <span class=\"close_text\">{{ __('voyager::database.relationship.close') }}</span>\n            {{ __('voyager::database.relationship.relationship_details') }}\n        </div>\n    </div>\n    <div class=\"col-md-12 voyager-relationship-details\">\n        <a href=\"{{ route('voyager.bread.delete_relationship', $relationship['id']) }}\" class=\"delete_relationship\"><i class=\"voyager-trash\"></i> {{ __('voyager::database.relationship.delete') }}</a>\n        <div class=\"relationship_details_content\">\n            <p class=\"relationship_table_select\">{{ \\Illuminate\\Support\\Str::singular(ucfirst($table)) }}</p>\n            <select class=\"relationship_type select2\" name=\"relationship_type_{{ $relationship['field'] }}\">\n                <option value=\"hasOne\" @if(isset($relationshipDetails->type) && $relationshipDetails->type == 'hasOne') selected=\"selected\" @endif>{{ __('voyager::database.relationship.has_one') }}</option>\n                <option value=\"hasMany\" @if(isset($relationshipDetails->type) && $relationshipDetails->type == 'hasMany') selected=\"selected\" @endif>{{ __('voyager::database.relationship.has_many') }}</option>\n                <option value=\"belongsTo\" @if(isset($relationshipDetails->type) && $relationshipDetails->type == 'belongsTo') selected=\"selected\" @endif>{{ __('voyager::database.relationship.belongs_to') }}</option>\n                <option value=\"belongsToMany\" @if(isset($relationshipDetails->type) && $relationshipDetails->type == 'belongsToMany') selected=\"selected\" @endif>{{ __('voyager::database.relationship.belongs_to_many') }}</option>\n            </select>\n            <select class=\"relationship_table select2\" name=\"relationship_table_{{ $relationship['field'] }}\">\n                @foreach($tables as $tablename)\n                    <option value=\"{{ $tablename }}\" @if(isset($relationshipDetails->table) && $relationshipDetails->table == $tablename) selected=\"selected\" @endif>{{ ucfirst($tablename) }}</option>\n                @endforeach\n            </select>\n            <span><input type=\"text\" class=\"form-control\" name=\"relationship_model_{{ $relationship['field'] }}\" placeholder=\"{{ __('voyager::database.relationship.namespace') }}\" value=\"{{ $relationshipDetails->model ?? '' }}\"></span>\n        </div>\n            <div class=\"relationshipField\">\n                <div class=\"relationship_details_content margin_top belongsTo @if($relationshipDetails->type == 'belongsTo') flexed @endif\">\n                    <label>{{ __('voyager::database.relationship.which_column_from') }} <span>{{ \\Illuminate\\Support\\Str::singular(ucfirst($table)) }}</span> {{ __('voyager::database.relationship.is_used_to_reference') }} <span class=\"label_table_name\"></span>?</label>\n                    <select name=\"relationship_column_belongs_to_{{ $relationship['field'] }}\" class=\"new_relationship_field select2\">\n                        @foreach($fieldOptions as $data)\n                            <option value=\"{{ $data['field'] }}\" @if($relationshipDetails->column == $data['field']) selected=\"selected\" @endif>{{ $data['field'] }}</option>\n                        @endforeach\n                    </select>\n                </div>\n\n                <div class=\"relationship_details_content margin_top hasOneMany @if($relationshipDetails->type == 'hasOne' || $relationshipDetails->type == 'hasMany') flexed @endif\">\n                    <label>{{ __('voyager::database.relationship.which_column_from') }} <span class=\"label_table_name\"></span> {{ __('voyager::database.relationship.is_used_to_reference') }} <span>{{ \\Illuminate\\Support\\Str::singular(ucfirst($table)) }}</span>?</label>\n                    <select name=\"relationship_column_{{ $relationship['field'] }}\" class=\"new_relationship_field select2 rowDrop\" data-table=\"{{ $relationshipDetails->table ?? '' }}\" data-selected=\"{{ $relationshipDetails->column }}\">\n                        <option value=\"{{ $relationshipDetails->column ?? '' }}\">{{ $relationshipDetails->column ?? '' }}</option>\n                    </select>\n                </div>\n            </div>\n        <div class=\"relationship_details_content margin_top relationshipPivot @if($relationshipDetails->type == 'belongsToMany') visible @endif\">\n            <label>{{ __('voyager::database.relationship.pivot_table') }}:</label>\n            <select name=\"relationship_pivot_table_{{ $relationship['field'] }}\" class=\"select2\">\n                @foreach($tables as $tbl)\n                    <option value=\"{{ $tbl }}\" @if(isset($relationshipDetails->pivot_table) && $relationshipDetails->pivot_table == $tbl) selected=\"selected\" @endif>{{ \\Illuminate\\Support\\Str::singular(ucfirst($tbl)) }}</option>\n                @endforeach\n            </select>\n        </div>\n        <div class=\"relationship_details_content margin_top\">\n            <label>{{ __('voyager::database.relationship.display_the') }} <span class=\"label_table_name\"></span></label>\n            <select name=\"relationship_label_{{ $relationship['field'] }}\" class=\"rowDrop select2\" data-table=\"{{ $relationshipDetails->table ?? '' }}\" data-selected=\"{{ $relationshipDetails->label ?? ''}}\">\n                <option value=\"{{ $relationshipDetails->label ?? '' }}\">{{ $relationshipDetails->label ?? '' }}</option>\n            </select>\n            <div class=\"belongsToShow belongsToManyShow relationship_details_content\" style=\"flex:1\">\n                <label class=\"relationship_key\">{{ __('voyager::database.relationship.store_the') }} <span class=\"label_table_name\"></span></label>\n                <select name=\"relationship_key_{{ $relationship['field'] }}\" class=\"rowDrop select2 relationship_key\" data-table=\"@if(isset($relationshipDetails->table)){{ $relationshipDetails->table }}@endif\" data-selected=\"@if(isset($relationshipDetails->key)){{ $relationshipDetails->key }}@endif\">\n                    <option value=\"{{ $relationshipDetails->key ?? '' }}\">{{ $relationshipDetails->key ?? '' }}</option>\n                </select>\n            </div>\n            <div class=\"hasOneShow hasManyShow relationship_details_content\" style=\"flex:1\">\n                <label class=\"relationship_key\">{{ __('voyager::database.relationship.store_the') }}\n                    <span>{{ \\Illuminate\\Support\\Str::singular(ucfirst($table)) }}</span>\n                </label>\n                <select name=\"relationship_key_{{ $relationship['field'] }}\" class=\"select2 relationship_key\">\n                    @foreach($fieldOptions as $data)\n                        <option value=\"{{ $data['field'] }}\" @if($relationshipDetails->key == $data['field']) selected=\"selected\" @endif>{{ $data['field'] }}</option>\n                    @endforeach\n                </select>\n            </div>\n            <br>\n            @isset($relationshipDetails->taggable)\n                <label class=\"relationship_taggable\">\n                    {{__('voyager::database.relationship.allow_tagging')}}\n                </label>\n                <span class=\"relationship_taggable\">\n                    <input type=\"checkbox\" name=\"relationship_taggable_{{ $relationship['field'] }}\" class=\"toggleswitch\" data-on=\"{{ __('voyager::generic.yes') }}\" data-off=\"{{ __('voyager::generic.no') }}\" {{$relationshipDetails->taggable == 'on' ? 'checked' : ''}}>\n                </span>\n            @endisset\n        </div>\n        <div class=\"relationship_details_content margin_top\">\n            <div class=\"col-xs-12\" style=\"margin: 0px !important; padding: 0px !important;\">\n                <div class=\"alert alert-danger validation-error\">\n                    {{ __('voyager::json.invalid') }}\n                </div>\n                <label>{{ __('voyager::database.relationship.relationship_details') }}</label>\n                <textarea id=\"json-input-{{ ($relationship['field']) }}\" class=\"resizable-editor\" data-editor=\"json\" name=\"field_details_{{ $relationship['field'] }}\">\n                    @if(!empty($adv_details))\n                        {{ json_encode($adv_details) }}\n                    @else\n                        {}\n                    @endif\n                </textarea>\n            </div>\n        </div>\n    </div>\n    <input type=\"hidden\" name=\"field_input_type_{{ $relationship['field'] }}\" value=\"relationship\">\n    <input type=\"hidden\" name=\"field_{{ $relationship['field'] }}\" value=\"{{ $relationship['field'] }}\">\n    <input type=\"hidden\" name=\"relationships[]\" value=\"{{ $relationship['field'] }}\">\n</div>\n"
  },
  {
    "path": "resources/views/tools/database/edit-add.blade.php",
    "content": "@extends('voyager::master')\n@if($db->action == 'update')\n    @section('page_title', __('voyager::database.editing_table', ['table' => $db->table->name]))\n@else\n    @section('page_title', __('voyager::database.create_new_table'))\n@endif\n\n@section('page_header')\n    <h1 class=\"page-title\">\n        <i class=\"voyager-data\"></i>\n        @if($db->action == 'update')\n            {{ __('voyager::database.editing_table', ['table' => $db->table->name]) }}\n        @else\n            {{ __('voyager::database.create_new_table') }}\n        @endif\n    </h1>\n@stop\n\n@section('breadcrumbs')\n<ol class=\"breadcrumb hidden-xs\">\n    <li>\n        <a href=\"{{ route('voyager.dashboard')}}\"><i class=\"voyager-boat\"></i> {{ __('voyager::generic.dashboard') }}</a>\n    </li>\n    <li>\n        <a href=\"{{ route('voyager.database.index') }}\">\n            {{ __('voyager::generic.database') }}\n        </a>\n    </li>\n\n    @if($db->action == 'update')\n    <li class=\"active\">{{ __('voyager::generic.edit') }}</li>\n    <li class=\"active\">{{ $db->table->name }}</li>\n    @else\n    <li class=\"active\">{{ __('voyager::generic.add') }}</li>\n    @endif\n</ol>\n@endsection\n\n@section('content')\n\n    <div class=\"page-content container-fluid\">\n        <div class=\"row\">\n            <div id=\"dbManager\" class=\"col-md-12\">\n                <form ref=\"form\" @submit.prevent=\"stringifyTable\" @keydown.enter.prevent action=\"{{ $db->formAction }}\" method=\"POST\">\n                    @if($db->action == 'update'){{ method_field('PUT') }}@endif\n\n                    <database-table-editor :table=\"table\"></database-table-editor>\n\n                    <input type=\"hidden\" :value=\"tableJson\" name=\"table\">\n\n                    <input type=\"hidden\" name=\"_token\" value=\"{{ csrf_token() }}\">\n                </form>\n            </div>\n        </div>\n    </div>\n\n@stop\n\n@section('javascript')\n    @include('voyager::tools.database.vue-components.database-table-editor')\n\n    <script>\n        new Vue({\n            el: '#dbManager',\n            data: {\n                table: {},\n                originalTable: {!! $db->table->toJson() !!}, // to do comparison later?\n                oldTable: {!! $db->oldTable !!},\n                tableJson: ''\n            },\n            created() {\n                // If old table is set, use it to repopulate the form\n                if (this.oldTable) {\n                    this.table = this.oldTable;\n                } else {\n                    this.table = JSON.parse(JSON.stringify(this.originalTable));\n                }\n            },\n            methods: {\n                stringifyTable() {\n                    this.tableJson = JSON.stringify(this.table);\n\n                    this.$nextTick(() => this.$refs.form.submit());\n                }\n            }\n        });\n    </script>\n\n@stop\n"
  },
  {
    "path": "resources/views/tools/database/index.blade.php",
    "content": "@extends('voyager::master')\n\n@section('page_title', __('voyager::generic.viewing').' '.__('voyager::generic.database'))\n\n@section('page_header')\n    <h1 class=\"page-title\">\n        <i class=\"voyager-data\"></i> {{ __('voyager::generic.database') }}\n        <a href=\"{{ route('voyager.database.create') }}\" class=\"btn btn-success\"><i class=\"voyager-plus\"></i>\n            {{ __('voyager::database.create_new_table') }}</a>\n    </h1>\n@stop\n\n@section('content')\n\n    <div class=\"page-content container-fluid\">\n        @include('voyager::alerts')\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n\n                <table class=\"table table-striped database-tables\">\n                    <thead>\n                        <tr>\n                            <th>{{ __('voyager::database.table_name') }}</th>\n                            <th style=\"text-align:right\" colspan=\"2\">{{ __('voyager::database.table_actions') }}</th>\n                        </tr>\n                    </thead>\n\n                @foreach($tables as $table)\n                    @continue(in_array($table->name, config('voyager.database.tables.hidden', [])))\n                    <tr>\n                        <td>\n                            <p class=\"name\">\n                                <a href=\"{{ route('voyager.database.show', $table->prefix.$table->name) }}\"\n                                   data-name=\"{{ $table->prefix.$table->name }}\" class=\"desctable\">\n                                   {{ $table->name }}\n                                </a>\n                            </p>\n                        </td>\n\n                        <td>\n                            <div class=\"bread_actions\">\n                            @if($table->dataTypeId)\n                                <a href=\"{{ route('voyager.' . $table->slug . '.index') }}\"\n                                   class=\"btn-sm btn-warning browse_bread\">\n                                    <i class=\"voyager-plus\"></i> {{ __('voyager::database.browse_bread') }}\n                                </a>\n                                <a href=\"{{ route('voyager.bread.edit', $table->name) }}\"\n                                   class=\"btn-sm btn-default edit\">\n                                   {{ __('voyager::bread.edit_bread') }}\n                                </a>\n                                <a data-id=\"{{ $table->dataTypeId }}\" data-name=\"{{ $table->name }}\"\n                                     class=\"btn-sm btn-danger delete\">\n                                     {{ __('voyager::bread.delete_bread') }}\n                                </a>\n                            @else\n                                <a href=\"{{ route('voyager.bread.create', $table->name) }}\"\n                                   class=\"btn-sm btn-default\">\n                                    <i class=\"voyager-plus\"></i> {{ __('voyager::bread.add_bread') }}\n                                </a>\n                            @endif\n                            </div>\n                        </td>\n\n                        <td class=\"actions\">\n                            <a class=\"btn btn-danger btn-sm pull-right delete_table @if($table->dataTypeId) remove-bread-warning @endif\"\n                               data-table=\"{{ $table->prefix.$table->name }}\">\n                               <i class=\"voyager-trash\"></i> {{ __('voyager::generic.delete') }}\n                            </a>\n                            <a href=\"{{ route('voyager.database.edit', $table->prefix.$table->name) }}\"\n                               class=\"btn btn-sm btn-primary pull-right\" style=\"display:inline; margin-right:10px;\">\n                               <i class=\"voyager-edit\"></i> {{ __('voyager::generic.edit') }}\n                            </a>\n                            <a href=\"{{ route('voyager.database.show', $table->prefix.$table->name) }}\"\n                               data-name=\"{{ $table->name }}\"\n                               class=\"btn btn-sm btn-warning pull-right desctable\" style=\"display:inline; margin-right:10px;\">\n                               <i class=\"voyager-eye\"></i> {{ __('voyager::generic.view') }}\n                            </a>\n                        </td>\n                    </tr>\n                @endforeach\n                </table>\n            </div>\n        </div>\n    </div>\n\n    {{-- Delete BREAD Modal --}}\n    <div class=\"modal modal-danger fade\" tabindex=\"-1\" id=\"delete_bread_modal\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"{{ __('voyager::generic.close') }}\"><span\n                                aria-hidden=\"true\">&times;</span></button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-trash\"></i>  {!! __('voyager::bread.delete_bread_quest', ['table' => '<span id=\"delete_bread_name\"></span>']) !!}</h4>\n                </div>\n                <div class=\"modal-footer\">\n                    <form action=\"#\" id=\"delete_bread_form\" method=\"POST\">\n                        {{ method_field('DELETE') }}\n                        <input type=\"hidden\" name=\"_token\" value=\"{{ csrf_token() }}\">\n                        <input type=\"submit\" class=\"btn btn-danger\" value=\"{{ __('voyager::bread.delete_bread_conf') }}\">\n                    </form>\n                    <button type=\"button\" class=\"btn btn-outline pull-right\" data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}</button>\n                </div>\n            </div><!-- /.modal-content -->\n        </div><!-- /.modal-dialog -->\n    </div><!-- /.modal -->\n\n    <div class=\"modal modal-danger fade\" tabindex=\"-1\" id=\"delete_modal\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"{{ __('voyager::generic.close') }}\"><span\n                                aria-hidden=\"true\">&times;</span></button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-trash\"></i> {!! __('voyager::database.delete_table_question', ['table' => '<span id=\"delete_table_name\"></span>']) !!}</h4>\n                </div>\n                <div class=\"modal-footer\">\n                    <form action=\"#\" id=\"delete_table_form\" method=\"POST\">\n                        {{ method_field('DELETE') }}\n                        <input type=\"hidden\" name=\"_token\" value=\"{{ csrf_token() }}\">\n                        <input type=\"submit\" class=\"btn btn-danger pull-right\" value=\"{{ __('voyager::database.delete_table_confirm') }}\">\n                        <button type=\"button\" class=\"btn btn-outline pull-right\" style=\"margin-right:10px;\"\n                                data-dismiss=\"modal\">{{ __('voyager::generic.cancel') }}\n                        </button>\n                    </form>\n\n                </div>\n            </div><!-- /.modal-content -->\n        </div><!-- /.modal-dialog -->\n    </div><!-- /.modal -->\n\n    <div class=\"modal modal-info fade\" tabindex=\"-1\" id=\"table_info\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"{{ __('voyager::generic.close') }}\"><span\n                                aria-hidden=\"true\">&times;</span></button>\n                    <h4 class=\"modal-title\"><i class=\"voyager-data\"></i> @{{ table.name }}</h4>\n                </div>\n                <div class=\"modal-body\" style=\"overflow:scroll\">\n                    <table class=\"table table-striped\">\n                        <thead>\n                        <tr>\n                            <th>{{ __('voyager::database.field') }}</th>\n                            <th>{{ __('voyager::database.type') }}</th>\n                            <th>{{ __('voyager::database.null') }}</th>\n                            <th>{{ __('voyager::database.key') }}</th>\n                            <th>{{ __('voyager::database.default') }}</th>\n                            <th>{{ __('voyager::database.extra') }}</th>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <tr v-for=\"row in table.rows\">\n                            <td><strong>@{{ row.Field }}</strong></td>\n                            <td>@{{ row.Type }}</td>\n                            <td>@{{ row.Null }}</td>\n                            <td>@{{ row.Key }}</td>\n                            <td>@{{ row.Default }}</td>\n                            <td>@{{ row.Extra }}</td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </div>\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-outline pull-right\" data-dismiss=\"modal\">{{ __('voyager::generic.close') }}</button>\n                </div>\n            </div><!-- /.modal-content -->\n        </div><!-- /.modal-dialog -->\n    </div><!-- /.modal -->\n\n@stop\n\n@section('javascript')\n\n    <script>\n\n        var table = {\n            name: '',\n            rows: []\n        };\n\n        new Vue({\n            el: '#table_info',\n            data: {\n                table: table,\n            },\n        });\n\n        $(function () {\n\n            // Setup Show Table Info\n            //\n            $('.database-tables').on('click', '.desctable', function (e) {\n                e.preventDefault();\n                href = $(this).attr('href');\n                table.name = $(this).data('name');\n                table.rows = [];\n                $.get(href, function (data) {\n                    $.each(data, function (key, val) {\n                        table.rows.push({\n                            Field: val.field,\n                            Type: val.type,\n                            Null: val.null,\n                            Key: val.key,\n                            Default: val.default,\n                            Extra: val.extra\n                        });\n                        $('#table_info').modal('show');\n                    });\n                });\n            });\n\n            // Setup Delete Table\n            //\n            $('td.actions').on('click', '.delete_table', function (e) {\n                table = $(this).data('table');\n                if ($(this).hasClass('remove-bread-warning')) {\n                    toastr.warning('{{ __('voyager::database.delete_bread_before_table') }}');\n                } else {\n                    $('#delete_table_name').text(table);\n\n                    $('#delete_table_form')[0].action = '{{ route('voyager.database.destroy', ['database' => '__database']) }}'.replace('__database', table)\n                    $('#delete_modal').modal('show');\n                }\n            });\n\n            // Setup Delete BREAD\n            //\n            $('table .bread_actions').on('click', '.delete', function (e) {\n                id = $(this).data('id');\n                name = $(this).data('name');\n\n                $('#delete_bread_name').text(name);\n                $('#delete_bread_form')[0].action = '{{ route('voyager.bread.delete', '__id') }}'.replace('__id', id);\n                $('#delete_bread_modal').modal('show');\n            });\n        });\n    </script>\n\n@stop\n"
  },
  {
    "path": "resources/views/tools/database/vue-components/database-column-default.blade.php",
    "content": "@section('database-column-default-template')\n\n<input\n    :value=\"column.default\"\n    :type=\"options.type\"\n    :step=\"options.step\"\n    :min=\"options.min\"\n    :max=\"options.max\"\n    :class=\"options.class\"\n    :disabled=\"options.disabled\"\n    @input=\"onDefaultInput\"\n    class=\"form-control\">\n\n@endsection\n\n<script>\n    let defaultOptions = {\n        type: 'text',\n        step: false,\n        min: false,\n        max: false,\n        class: false,\n        disabled: false\n    };\n\n    Vue.component('database-column-default', {\n        props: {\n            column: {\n                type: Object,\n                required: true\n            }\n        },\n        template: `@yield('database-column-default-template')`,\n        methods: {\n            onDefaultInput(event) {\n                let defaultValue = event.target.value.trim();\n\n                if (defaultValue == '') {\n                    defaultValue = null;\n                }\n\n                this.column.default = defaultValue;\n            },\n            getOption(option) {\n                if (this.column.type.default[option]) {\n                    return this.column.type.default[option];\n                }\n\n                return false;\n            },\n            getType() {\n                let type = this.getOption('type');\n\n                if (type) {\n                    return type;\n                }\n\n                return 'text';\n            }\n        },\n        computed: {\n            options() {\n                if (!this.column.type.default) {\n                    return defaultOptions;\n                }\n\n                return {\n                    type: this.getType(),\n                    step: this.getOption('step'),\n                    min: this.getOption('min'),\n                    max: this.getOption('max'),\n                    class: this.getOption('class'),\n                    disabled: this.getOption('disabled')\n                };\n            }\n        }\n    });\n</script>\n"
  },
  {
    "path": "resources/views/tools/database/vue-components/database-column.blade.php",
    "content": "@section('database-column-template')\n\n<tr class=\"newTableRow\">\n    <td>\n        <input :value=\"column.name\" @input=\"onColumnNameInput\" type=\"text\" class=\"form-control\" required pattern=\"{{ $db->identifierRegex }}\">\n    </td>\n\n    <td>\n        <database-types\n            :column=\"column\"\n            @typeChanged=\"onColumnTypeChange\">\n        </database-types>\n    </td>\n\n    <td>\n        <input v-model.number=\"column.length\" :type=\"lengthInputType\" min=\"0\" class=\"form-control\">\n    </td>\n\n    <td>\n        <input v-model=\"column.notnull\" type=\"checkbox\">\n    </td>\n\n    <td>\n        <input v-model=\"column.unsigned\" type=\"checkbox\">\n    </td>\n\n    <td>\n        <input v-model=\"column.autoincrement\" type=\"checkbox\">\n    </td>\n\n    <td>\n        <select :value=\"index.type\" @change=\"onIndexTypeChange\"\n                :disabled=\"column.type.notSupportIndex\"\n                class=\"form-control\">\n            <option value=\"\"></option>\n            <option value=\"INDEX\">{{ __('voyager::database.index') }}</option>\n            <option value=\"UNIQUE\">{{ __('voyager::database.unique') }}</option>\n            <option value=\"PRIMARY\">{{ __('voyager::database.primary') }}</option>\n        </select>\n        <small v-if=\"column.composite\" v-once>{{ __('voyager::database.composite_warning') }}</small>\n    </td>\n\n    <td>\n        <database-column-default :column=\"column\"></database-column-default>\n    </td>\n\n    <td>\n        <div class=\"btn btn-danger delete-row\" @click=\"deleteColumn\"><i class=\"voyager-trash\"></i></div>\n    </td>\n\n</tr>\n\n@endsection\n\n@include('voyager::tools.database.vue-components.database-types')\n@include('voyager::tools.database.vue-components.database-column-default')\n\n<script>\n    Vue.component('database-column', {\n        data: function() {\n            return {\n                lengthInputType: 'number'\n            }\n        },\n        props: {\n            column: {\n                type: Object,\n                required: true\n            },\n            index: {\n                type: Object,\n                required: true\n            }\n        },\n        template: `@yield('database-column-template')`,\n        methods: {\n            deleteColumn() {\n                this.$emit('columnDeleted', this.column);\n\n                // todo: add an UNDO button or something in case the user mistakenly deletes the column\n            },\n            onColumnNameInput(event) {\n                let newName = event.target.value;\n\n                this.$emit('columnNameUpdated', {\n                    column: this.column,\n                    newName: newName\n                });\n            },\n            onColumnTypeChange(type) {\n                if (type.notSupportIndex && this.index.type) {\n                    this.$emit('indexDeleted', this.index);\n                }\n\n                // Reset default value\n                this.column.default = null;\n\n                this.column.type = type;\n\n                this.setLengthInputType();\n            },\n            onIndexTypeChange(event) {\n                if (this.column.name == '') {\n                    return toastr.error(\"{{ __('voyager::database.name_warning') }}\");\n                }\n\n                return this.$emit('indexChanged', {\n                    columns: [this.column.name],\n                    old: this.index,\n                    newType: event.target.value\n                });\n            },\n            setLengthInputType() {\n                var name = this.column.type.name;\n                if (name == 'double' || name == 'float' || name == 'decimal') {\n                    this.lengthInputType = 'text';\n                } else {\n                    this.lengthInputType = 'number';\n                }\n            }\n        },\n        mounted() {\n            this.setLengthInputType();\n        },\n    });\n</script>\n"
  },
  {
    "path": "resources/views/tools/database/vue-components/database-table-editor.blade.php",
    "content": "@section('database-table-editor-template')\n\n<div class=\"panel panel-bordered\">\n    <div class=\"panel-body\">\n        <div class=\"row\">\n        @if($db->action == 'update')\n            <div class=\"col-md-12\">\n        @else\n            <div class=\"col-md-6\">\n        @endif\n                <label for=\"name\">{{ __('voyager::database.table_name') }}</label><br>\n                <input v-model.trim=\"table.name\" type=\"text\" class=\"form-control\" placeholder=\"{{ __('voyager::database.table_name') }}\" required pattern=\"{{ $db->identifierRegex }}\">\n            </div>\n\n        @if($db->action == 'create')\n            <div class=\"col-md-3 col-sm-4 col-xs-6\">\n                <label for=\"create_model\">{{ __('voyager::database.create_model_table') }}</label><br>\n                <input type=\"checkbox\" name=\"create_model\" data-toggle=\"toggle\"\n                       data-on=\"{{ __('voyager::generic.yes_please') }}\" data-off=\"{{ __('voyager::generic.no_thanks') }}\">\n            </div>\n            {{--\n                Hide migration button until feature is available.\n                 <div class=\"col-md-3 col-sm-4 col-xs-6\">\n                    <label for=\"create_migration\">{{ __('voyager::database.create_migration') }}</label><br>\n                    <input disabled type=\"checkbox\" name=\"create_migration\" data-toggle=\"toggle\"\n                           data-on=\"{{ __('voyager::generic.yes_please') }}\" data-off=\"{{ __('voyager::generic.no_thanks') }}\">\n                </div>\n            --}}\n        @endif\n        </div><!-- .panel-body .row -->\n\n        <div v-if=\"compositeIndexes.length\" v-once class=\"alert alert-danger\">\n            <p>{{ __('voyager::database.no_composites_warning') }}</p>\n        </div>\n\n        <div id=\"alertsContainer\"></div>\n\n        <template v-if=\"tableHasColumns\">\n            <p>{{ __('voyager::database.table_columns') }}</p>\n\n            <table class=\"table table-bordered\" style=\"width:100%;\">\n                <thead>\n                <tr>\n                    <th>{{ __('voyager::generic.name') }}</th>\n                    <th>{{ __('voyager::generic.type') }}</th>\n                    <th>{{ __('voyager::generic.length') }}</th>\n                    <th>{{ __('voyager::generic.not_null') }}</th>\n                    <th>{{ __('voyager::generic.unsigned') }}</th>\n                    <th>{{ __('voyager::generic.auto_increment') }}</th>\n                    <th>{{ __('voyager::generic.index') }}</th>\n                    <th>{{ __('voyager::generic.default') }}</th>\n                    <th></th>\n                </tr>\n                </thead>\n                <tbody>\n                    <database-column\n                        v-for=\"(column, index) in table.columns\"\n                        :column=\"column\"\n                        :index=\"getColumnsIndex(column.name)\"\n                        :key=\"index\"\n                        @columnNameUpdated=\"renameColumn\"\n                        @columnDeleted=\"deleteColumn\"\n                        @indexAdded=\"addIndex\"\n                        @indexDeleted=\"deleteIndex\"\n                        @indexUpdated=\"updateIndex\"\n                        @indexChanged=\"onIndexChange\"\n                    ></database-column>\n                </tbody>\n            </table>\n        </template>\n        <div v-else>\n          <p>{{ __('voyager::database.table_no_columns') }}</p>\n        </div>\n\n        <div style=\"text-align:center\">\n            <database-table-helper-buttons\n                @columnAdded=\"addColumn\"\n            ></database-table-helper-buttons>\n        </div>\n    </div><!-- .panel-body -->\n\n    <div class=\"panel-footer\">\n        <input type=\"submit\" class=\"btn btn-primary pull-right\"\n               value=\"@if($db->action == 'update'){{ __('voyager::database.update_table') }}@else{{ __('voyager::database.create_new_table') }}@endif\"\n               :disabled=\"!tableHasColumns\">\n        <div style=\"clear:both\"></div>\n    </div>\n</div><!-- .panel -->\n\n\n@endsection\n\n@include('voyager::tools.database.vue-components.database-column')\n@include('voyager::tools.database.vue-components.database-table-helper-buttons')\n\n<script>\n    Vue.component('database-table-editor', {\n        props: {\n            table: {\n                type: Object,\n                required: true\n            }\n        },\n        data() {\n            return {\n                emptyIndex: {\n                    type: '',\n                    name: ''\n                },\n                compositeIndexes: []\n            };\n        },\n        template: `@yield('database-table-editor-template')`,\n        mounted() {\n            // Add warning to columns that are part of a composite index\n            this.compositeIndexes = this.getCompositeIndexes();\n            let compositeColumns = this.getIndexesColumns(this.compositeIndexes);\n\n            for (col in compositeColumns) {\n                this.getColumn(compositeColumns[col]).composite = true;\n            }\n\n            // Display errors\n            @if(Session::has('alerts'))\n                helpers.displayAlerts(alerts, helpers.bootstrapAlerter({dismissible: true}), 'error');\n            @endif\n        },\n        computed: {\n            tableHasColumns() {\n                return this.table.columns.length;\n            }\n        },\n        methods: {\n            addColumn(column) {\n                column.name = column.name.trim();\n\n                if (column.name && this.hasColumn(column.name)) {\n                    return toastr.error(\"{{ __('voyager::database.column') }} \" + column.name + \" {{ __('voyager::database.already_exists') }}\");\n                }\n\n                this.table.columns.push(\n                    JSON.parse(JSON.stringify(column))\n                );\n            },\n            getColumn(name) {\n                name = name.toLowerCase().trim();\n\n                return this.table.columns.find(function (column) {\n                    return name == column.name.toLowerCase();\n                });\n            },\n            hasColumn(name) {\n                return !!this.getColumn(name);\n            },\n            renameColumn(column) {\n                let newName = column.newName.trim();\n                column = column.column;\n\n                let existingColumn;\n                if ((existingColumn = this.getColumn(newName)) && (existingColumn !== column)) {\n                    return toastr.error(\"{{ __('voyager::database.column') }} \" + newName + \" {{ __('voyager::database.already_exists') }}\");\n                }\n\n                let index = this.getColumnsIndex(column.name);\n                if (index !== this.emptyIndex) {\n                    index.columns = [newName];\n                }\n\n                column.name = newName;\n            },\n            deleteColumn(column) {\n                var columnPos = this.table.columns.indexOf(column);\n\n                if (columnPos !== -1) {\n                    this.table.columns.splice(columnPos, 1);\n\n                    // Delete associated index\n                    this.deleteIndex(this.getColumnsIndex(column.name));\n                }\n            },\n            getColumnsIndex(columns) {\n                // todo: detect if a column has a composite index\n                //  if so, maybe disable its Index input, and tell the user to go to special Index form (advanced view)?\n                if (!Array.isArray(columns)) {\n                    columns = [columns];\n                }\n\n                let index = null;\n\n                for (i in this.table.indexes) {\n                    // if there is no difference between columns\n                    if (!($(this.table.indexes[i].columns).not(columns).get().length)) {\n                        index = this.table.indexes[i];\n                        break;\n                    }\n                }\n\n                if (!index) {\n                    index = this.emptyIndex;\n                }\n\n                index.table = this.table.name;\n                return index;\n            },\n            onIndexChange(index) {\n                if (index.old === this.emptyIndex) {\n                    return this.addIndex({\n                        columns: index.columns,\n                        type: index.newType\n                    });\n                }\n\n                if (index.newType == '') {\n                    return this.deleteIndex(index.old);\n                }\n\n                return this.updateIndex(index.old, index.newType);\n            },\n            addIndex(index) {\n                if (index.type == 'PRIMARY') {\n                    if (this.table.primaryKeyName) {\n                        return toastr.error(\"{{ __('voyager::database.table_has_index') }}\");\n                    }\n\n                    this.table.primaryKeyName = 'primary';\n                }\n\n                this.setIndexName(index);\n                this.table.indexes.push(index);\n            },\n            deleteIndex(index) {\n                var indexPos = this.table.indexes.indexOf(index);\n\n                if (indexPos !== -1) {\n                    if (index.type == 'PRIMARY') {\n                        this.table.primaryKeyName = false;\n                    }\n\n                    this.table.indexes.splice(indexPos, 1);\n                }\n            },\n            updateIndex(index, newType) {\n                if (index.type == 'PRIMARY') {\n                    this.table.primaryKeyName = false;\n                } else if (newType == 'PRIMARY') {\n                    if (this.table.primaryKeyName) {\n                        return toastr.error(\"{{ __('voyager::database.table_has_index') }}\");\n                    }\n\n                    this.table.primaryKeyName = 'primary';\n                }\n\n                index.type = newType;\n                this.setIndexName(index);\n            },\n            setIndexName(index) {\n                if (index.type == 'PRIMARY') {\n                    index.name = 'primary';\n                } else {\n                    // the name will be set on the server by PHP\n                    index.name = '';\n                }\n            },\n            getCompositeIndexes() {\n                let composite = [];\n\n                for (i in this.table.indexes) {\n                    if (this.table.indexes[i].isComposite) {\n                        composite.push(this.table.indexes[i]);\n                    }\n                }\n\n                return composite;\n            },\n            getIndexesColumns(indexes) {\n                let columns = [];\n\n                for (i in indexes) {\n                    for (col in indexes[i].columns) {\n                        columns.push(indexes[i].columns[col]);\n                    }\n                }\n\n                return [...new Set(columns)];\n            }\n        }\n    });\n</script>\n"
  },
  {
    "path": "resources/views/tools/database/vue-components/database-table-helper-buttons.blade.php",
    "content": "@section('database-table-helper-buttons-template')\n    <div>\n        <div class=\"btn btn-success\" @click=\"addNewColumn\">+ {{ __('voyager::database.add_new_column') }}</div>\n        <div class=\"btn btn-success\" @click=\"addTimestamps\">+ {{ __('voyager::database.add_timestamps') }}</div>\n        <div class=\"btn btn-success\" @click=\"addSoftDeletes\">+ {{ __('voyager::database.add_softdeletes') }}</div>\n    </div>\n@endsection\n\n<script>\n    Vue.component('database-table-helper-buttons', {\n        template: `@yield('database-table-helper-buttons-template')`,\n        methods: {\n            addColumn(column) {\n                this.$emit('columnAdded', column);\n            },\n            makeColumn(options) {\n                return $.extend({\n                    name: '',\n                    oldName: '',\n                    type: getDbType('integer'),\n                    length: null,\n                    fixed: false,\n                    unsigned: false,\n                    autoincrement: false,\n                    notnull: false,\n                    default: null\n                }, options);\n            },\n            addNewColumn() {\n                this.addColumn(this.makeColumn());\n            },\n            addTimestamps() {\n                this.addColumn(this.makeColumn({\n                    name: 'created_at',\n                    type: getDbType('timestamp')\n                }));\n\n                this.addColumn(this.makeColumn({\n                    name: 'updated_at',\n                    type: getDbType('timestamp')\n                }));\n            },\n            addSoftDeletes() {\n                this.addColumn(this.makeColumn({\n                    name: 'deleted_at',\n                    type: getDbType('timestamp')\n                }));\n            }\n        }\n    });\n</script>\n"
  },
  {
    "path": "resources/views/tools/database/vue-components/database-types.blade.php",
    "content": "@section('database-types-template')\n\n<div>\n    <select :value=\"column.type.name\" @change=\"onTypeChange\" class=\"form-control\">\n        <optgroup v-for=\"(types, category) in dbTypes\" :label=\"category\">\n            <option v-for=\"type in types\" :value=\"type.name\" :disabled=\"type.notSupported\">\n                @{{ type.name.toUpperCase() }}\n            </option>\n        </optgroup>\n    </select>\n    <div v-if=\"column.type.notSupported\">\n        <small>{{ __('voyager::database.type_not_supported') }}</small>\n    </div>\n</div>\n\n\n@endsection\n\n<script>\n    let databaseTypes = {!! json_encode($db->types) !!};\n\n    function getDbType(name) {\n        let type;\n        name = name.toLowerCase().trim();\n\n        for (category in databaseTypes) {\n            type = databaseTypes[category].find(function (type) {\n                return name == type.name.toLowerCase();\n            });\n\n            if (type) {\n                return type;\n            }\n        }\n\n        toastr.error(\"{{ __('voyager::database.unknown_type') }}: \" + name);\n\n        // fallback to a default type\n        return databaseTypes.Numbers[0];\n    }\n\n    Vue.component('database-types', {\n        props: {\n            column: {\n                type: Object,\n                required: true\n            }\n        },\n        data() {\n            return {\n                dbTypes: databaseTypes\n            };\n        },\n        template: `@yield('database-types-template')`,\n        methods: {\n            onTypeChange(event) {\n                this.$emit('typeChanged', this.getType(event.target.value));\n            },\n            getType(name) {\n                return getDbType(name);\n            }\n        }\n    });\n</script>\n"
  },
  {
    "path": "resources/views/users/edit-add.blade.php",
    "content": "@extends('voyager::master')\n\n@section('page_title', __('voyager::generic.'.(isset($dataTypeContent->id) ? 'edit' : 'add')).' '.$dataType->getTranslatedAttribute('display_name_singular'))\n\n@section('css')\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n@stop\n\n@section('page_header')\n    <h1 class=\"page-title\">\n        <i class=\"{{ $dataType->icon }}\"></i>\n        {{ __('voyager::generic.'.(isset($dataTypeContent->id) ? 'edit' : 'add')).' '.$dataType->getTranslatedAttribute('display_name_singular') }}\n    </h1>\n@stop\n\n@section('content')\n    <div class=\"page-content container-fluid\">\n        <form class=\"form-edit-add\" role=\"form\"\n              action=\"@if(!is_null($dataTypeContent->getKey())){{ route('voyager.'.$dataType->slug.'.update', $dataTypeContent->getKey()) }}@else{{ route('voyager.'.$dataType->slug.'.store') }}@endif\"\n              method=\"POST\" enctype=\"multipart/form-data\" autocomplete=\"off\">\n            <!-- PUT Method if we are editing -->\n            @if(isset($dataTypeContent->id))\n                {{ method_field(\"PUT\") }}\n            @endif\n            {{ csrf_field() }}\n\n            <div class=\"row\">\n                <div class=\"col-md-8\">\n                    <div class=\"panel panel-bordered\">\n                    {{-- <div class=\"panel\"> --}}\n                        @if (count($errors) > 0)\n                            <div class=\"alert alert-danger\">\n                                <ul>\n                                    @foreach ($errors->all() as $error)\n                                        <li>{{ $error }}</li>\n                                    @endforeach\n                                </ul>\n                            </div>\n                        @endif\n\n                        <div class=\"panel-body\">\n                            <div class=\"form-group\">\n                                <label for=\"name\">{{ __('voyager::generic.name') }}</label>\n                                <input type=\"text\" class=\"form-control\" id=\"name\" name=\"name\" placeholder=\"{{ __('voyager::generic.name') }}\"\n                                       value=\"{{ old('name', $dataTypeContent->name ?? '') }}\">\n                            </div>\n\n                            <div class=\"form-group\">\n                                <label for=\"email\">{{ __('voyager::generic.email') }}</label>\n                                <input type=\"email\" class=\"form-control\" id=\"email\" name=\"email\" placeholder=\"{{ __('voyager::generic.email') }}\"\n                                       value=\"{{ old('email', $dataTypeContent->email ?? '') }}\">\n                            </div>\n\n                            <div class=\"form-group\">\n                                <label for=\"password\">{{ __('voyager::generic.password') }}</label>\n                                @if(isset($dataTypeContent->password))\n                                    <br>\n                                    <small>{{ __('voyager::profile.password_hint') }}</small>\n                                @endif\n                                <input type=\"password\" class=\"form-control\" id=\"password\" name=\"password\" value=\"\" autocomplete=\"new-password\">\n                            </div>\n\n                            @can('editRoles', $dataTypeContent)\n                                <div class=\"form-group\">\n                                    <label for=\"default_role\">{{ __('voyager::profile.role_default') }}</label>\n                                    @php\n                                        $dataTypeRows = $dataType->{(isset($dataTypeContent->id) ? 'editRows' : 'addRows' )};\n\n                                        $row     = $dataTypeRows->where('field', 'user_belongsto_role_relationship')->first();\n                                        $options = $row->details;\n                                    @endphp\n                                    @include('voyager::formfields.relationship')\n                                </div>\n                                <div class=\"form-group\">\n                                    <label for=\"additional_roles\">{{ __('voyager::profile.roles_additional') }}</label>\n                                    @php\n                                        $row     = $dataTypeRows->where('field', 'user_belongstomany_role_relationship')->first();\n                                        $options = $row->details;\n                                    @endphp\n                                    @include('voyager::formfields.relationship')\n                                </div>\n                            @endcan\n                            @php\n                            if (isset($dataTypeContent->locale)) {\n                                $selected_locale = $dataTypeContent->locale;\n                            } else {\n                                $selected_locale = config('app.locale', 'en');\n                            }\n\n                            @endphp\n                            <div class=\"form-group\">\n                                <label for=\"locale\">{{ __('voyager::generic.locale') }}</label>\n                                <select class=\"form-control select2\" id=\"locale\" name=\"locale\">\n                                    @foreach (Voyager::getLocales() as $locale)\n                                    <option value=\"{{ $locale }}\"\n                                    {{ ($locale == $selected_locale ? 'selected' : '') }}>{{ $locale }}</option>\n                                    @endforeach\n                                </select>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"col-md-4\">\n                    <div class=\"panel panel panel-bordered panel-warning\">\n                        <div class=\"panel-body\">\n                            <div class=\"form-group\">\n                                @if(isset($dataTypeContent->avatar))\n                                    <img src=\"{{ filter_var($dataTypeContent->avatar, FILTER_VALIDATE_URL) ? $dataTypeContent->avatar : Voyager::image( $dataTypeContent->avatar ) }}\" style=\"width:200px; height:auto; clear:both; display:block; padding:2px; border:1px solid #ddd; margin-bottom:10px;\" />\n                                @endif\n                                <input type=\"file\" data-name=\"avatar\" name=\"avatar\">\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n\n            <button type=\"submit\" class=\"btn btn-primary pull-right save\">\n                {{ __('voyager::generic.save') }}\n            </button>\n        </form>\n        <div style=\"display:none\">\n            <input type=\"hidden\" id=\"upload_url\" value=\"{{ route('voyager.upload') }}\">\n            <input type=\"hidden\" id=\"upload_type_slug\" value=\"{{ $dataType->slug }}\">\n        </div>\n    </div>\n@stop\n\n@section('javascript')\n    <script>\n        $('document').ready(function () {\n            $('.toggleswitch').bootstrapToggle();\n        });\n    </script>\n@stop\n"
  },
  {
    "path": "routes/voyager.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Str;\nuse TCG\\Voyager\\Events\\Routing;\nuse TCG\\Voyager\\Events\\RoutingAdmin;\nuse TCG\\Voyager\\Events\\RoutingAdminAfter;\nuse TCG\\Voyager\\Events\\RoutingAfter;\nuse TCG\\Voyager\\Facades\\Voyager;\n\n/*\n|--------------------------------------------------------------------------\n| Voyager Routes\n|--------------------------------------------------------------------------\n|\n| This file is where you may override any of the routes that are included\n| with Voyager.\n|\n*/\n\nRoute::group(['as' => 'voyager.'], function () {\n    event(new Routing());\n\n    $namespacePrefix = '\\\\'.config('voyager.controllers.namespace').'\\\\';\n\n    Route::get('login', ['uses' => $namespacePrefix.'VoyagerAuthController@login',     'as' => 'login']);\n    Route::post('login', ['uses' => $namespacePrefix.'VoyagerAuthController@postLogin', 'as' => 'postlogin']);\n\n    Route::group(['middleware' => 'admin.user'], function () use ($namespacePrefix) {\n        event(new RoutingAdmin());\n\n        // Main Admin and Logout Route\n        Route::get('/', ['uses' => $namespacePrefix.'VoyagerController@index',   'as' => 'dashboard']);\n        Route::post('logout', ['uses' => $namespacePrefix.'VoyagerController@logout',  'as' => 'logout']);\n        Route::post('upload', ['uses' => $namespacePrefix.'VoyagerController@upload',  'as' => 'upload']);\n\n        Route::get('profile', ['uses' => $namespacePrefix.'VoyagerUserController@profile', 'as' => 'profile']);\n\n        try {\n            foreach (Voyager::model('DataType')::all() as $dataType) {\n                $breadController = $dataType->controller\n                                 ? Str::start($dataType->controller, '\\\\')\n                                 : $namespacePrefix.'VoyagerBaseController';\n\n                Route::get($dataType->slug.'/order', $breadController.'@order')->name($dataType->slug.'.order');\n                Route::post($dataType->slug.'/action', $breadController.'@action')->name($dataType->slug.'.action');\n                Route::post($dataType->slug.'/order', $breadController.'@update_order')->name($dataType->slug.'.update_order');\n                Route::get($dataType->slug.'/{id}/restore', $breadController.'@restore')->name($dataType->slug.'.restore');\n                Route::get($dataType->slug.'/relation', $breadController.'@relation')->name($dataType->slug.'.relation');\n                Route::post($dataType->slug.'/remove', $breadController.'@remove_media')->name($dataType->slug.'.media.remove');\n                Route::resource($dataType->slug, $breadController, ['parameters' => [$dataType->slug => 'id']]);\n            }\n        } catch (\\InvalidArgumentException $e) {\n            throw new \\InvalidArgumentException(\"Custom routes hasn't been configured because: \".$e->getMessage(), 1);\n        } catch (\\Exception $e) {\n            // do nothing, might just be because table not yet migrated.\n        }\n\n        // Menu Routes\n        Route::group([\n            'as'     => 'menus.',\n            'prefix' => 'menus/{menu}',\n        ], function () use ($namespacePrefix) {\n            Route::get('builder', ['uses' => $namespacePrefix.'VoyagerMenuController@builder',    'as' => 'builder']);\n            Route::post('order', ['uses' => $namespacePrefix.'VoyagerMenuController@order_item', 'as' => 'order_item']);\n\n            Route::group([\n                'as'     => 'item.',\n                'prefix' => 'item',\n            ], function () use ($namespacePrefix) {\n                Route::delete('{id}', ['uses' => $namespacePrefix.'VoyagerMenuController@delete_menu', 'as' => 'destroy']);\n                Route::post('/', ['uses' => $namespacePrefix.'VoyagerMenuController@add_item',    'as' => 'add']);\n                Route::put('/', ['uses' => $namespacePrefix.'VoyagerMenuController@update_item', 'as' => 'update']);\n            });\n        });\n\n        // Settings\n        Route::group([\n            'as'     => 'settings.',\n            'prefix' => 'settings',\n        ], function () use ($namespacePrefix) {\n            Route::get('/', ['uses' => $namespacePrefix.'VoyagerSettingsController@index',        'as' => 'index']);\n            Route::post('/', ['uses' => $namespacePrefix.'VoyagerSettingsController@store',        'as' => 'store']);\n            Route::put('/', ['uses' => $namespacePrefix.'VoyagerSettingsController@update',       'as' => 'update']);\n            Route::delete('{id}', ['uses' => $namespacePrefix.'VoyagerSettingsController@delete',       'as' => 'delete']);\n            Route::get('{id}/move_up', ['uses' => $namespacePrefix.'VoyagerSettingsController@move_up',      'as' => 'move_up']);\n            Route::get('{id}/move_down', ['uses' => $namespacePrefix.'VoyagerSettingsController@move_down',    'as' => 'move_down']);\n            Route::put('{id}/delete_value', ['uses' => $namespacePrefix.'VoyagerSettingsController@delete_value', 'as' => 'delete_value']);\n        });\n\n        // Admin Media\n        Route::group([\n            'as'     => 'media.',\n            'prefix' => 'media',\n        ], function () use ($namespacePrefix) {\n            Route::get('/', ['uses' => $namespacePrefix.'VoyagerMediaController@index',              'as' => 'index']);\n            Route::post('files', ['uses' => $namespacePrefix.'VoyagerMediaController@files',              'as' => 'files']);\n            Route::post('new_folder', ['uses' => $namespacePrefix.'VoyagerMediaController@new_folder',         'as' => 'new_folder']);\n            Route::post('delete_file_folder', ['uses' => $namespacePrefix.'VoyagerMediaController@delete', 'as' => 'delete']);\n            Route::post('move_file', ['uses' => $namespacePrefix.'VoyagerMediaController@move',          'as' => 'move']);\n            Route::post('rename_file', ['uses' => $namespacePrefix.'VoyagerMediaController@rename',        'as' => 'rename']);\n            Route::post('upload', ['uses' => $namespacePrefix.'VoyagerMediaController@upload',             'as' => 'upload']);\n            Route::post('crop', ['uses' => $namespacePrefix.'VoyagerMediaController@crop',             'as' => 'crop']);\n        });\n\n        // BREAD Routes\n        Route::group([\n            'as'     => 'bread.',\n            'prefix' => 'bread',\n        ], function () use ($namespacePrefix) {\n            Route::get('/', ['uses' => $namespacePrefix.'VoyagerBreadController@index',              'as' => 'index']);\n            Route::get('{table}/create', ['uses' => $namespacePrefix.'VoyagerBreadController@create',     'as' => 'create']);\n            Route::post('/', ['uses' => $namespacePrefix.'VoyagerBreadController@store',   'as' => 'store']);\n            Route::get('{table}/edit', ['uses' => $namespacePrefix.'VoyagerBreadController@edit', 'as' => 'edit']);\n            Route::put('{id}', ['uses' => $namespacePrefix.'VoyagerBreadController@update',  'as' => 'update']);\n            Route::delete('{id}', ['uses' => $namespacePrefix.'VoyagerBreadController@destroy',  'as' => 'delete']);\n            Route::post('relationship', ['uses' => $namespacePrefix.'VoyagerBreadController@addRelationship',  'as' => 'relationship']);\n            Route::get('delete_relationship/{id}', ['uses' => $namespacePrefix.'VoyagerBreadController@deleteRelationship',  'as' => 'delete_relationship']);\n        });\n\n        // Database Routes\n        Route::resource('database', $namespacePrefix.'VoyagerDatabaseController');\n\n        // Compass Routes\n        Route::group([\n            'as'     => 'compass.',\n            'prefix' => 'compass',\n        ], function () use ($namespacePrefix) {\n            Route::get('/', ['uses' => $namespacePrefix.'VoyagerCompassController@index',  'as' => 'index']);\n            Route::post('/', ['uses' => $namespacePrefix.'VoyagerCompassController@index',  'as' => 'post']);\n        });\n\n        event(new RoutingAdminAfter());\n    });\n\n    //Asset Routes\n    Route::get('voyager-assets', ['uses' => $namespacePrefix.'VoyagerController@assets', 'as' => 'voyager_assets']);\n\n    event(new RoutingAfter());\n});\n"
  },
  {
    "path": "src/Actions/AbstractAction.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Actions;\n\nabstract class AbstractAction implements ActionInterface\n{\n    protected $dataType;\n    protected $data;\n\n    public function __construct($dataType, $data)\n    {\n        $this->dataType = $dataType;\n        $this->data = $data;\n    }\n\n    public function getDataType()\n    {\n    }\n\n    public function getPolicy()\n    {\n    }\n\n    public function getRoute($key)\n    {\n        if (method_exists($this, $method = 'get'.ucfirst($key).'Route')) {\n            return $this->$method();\n        } else {\n            return $this->getDefaultRoute();\n        }\n    }\n\n    public function getAttributes()\n    {\n        return [];\n    }\n\n    public function convertAttributesToHtml()\n    {\n        $result = [];\n\n        foreach ($this->getAttributes() as $key => $attribute) {\n            $result[] = sprintf('%s=\"%s\"', $key, $attribute);\n        }\n\n        return implode(\" \", $result);\n    }\n\n    public function shouldActionDisplayOnDataType()\n    {\n        return $this->dataType->name === $this->getDataType() || $this->getDataType() === null;\n    }\n\n    public function shouldActionDisplayOnRow($row)\n    {\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Actions/ActionInterface.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Actions;\n\ninterface ActionInterface\n{\n    public function getTitle();\n\n    public function getIcon();\n\n    public function getPolicy();\n\n    public function getAttributes();\n\n    public function getRoute($key);\n\n    public function getDefaultRoute();\n\n    public function getDataType();\n}\n"
  },
  {
    "path": "src/Actions/DeleteAction.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Actions;\n\nclass DeleteAction extends AbstractAction\n{\n    public function getTitle()\n    {\n        return __('voyager::generic.delete');\n    }\n\n    public function getIcon()\n    {\n        return 'voyager-trash';\n    }\n\n    public function getPolicy()\n    {\n        return 'delete';\n    }\n\n    public function getAttributes()\n    {\n        return [\n            'class'   => 'btn btn-sm btn-danger pull-right delete',\n            'data-id' => $this->data->{$this->data->getKeyName()},\n            'id'      => 'delete-'.$this->data->{$this->data->getKeyName()},\n        ];\n    }\n\n    public function getDefaultRoute()\n    {\n        return 'javascript:;';\n    }\n}\n"
  },
  {
    "path": "src/Actions/EditAction.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Actions;\n\nclass EditAction extends AbstractAction\n{\n    public function getTitle()\n    {\n        return __('voyager::generic.edit');\n    }\n\n    public function getIcon()\n    {\n        return 'voyager-edit';\n    }\n\n    public function getPolicy()\n    {\n        return 'edit';\n    }\n\n    public function getAttributes()\n    {\n        return [\n            'class' => 'btn btn-sm btn-primary pull-right edit',\n        ];\n    }\n\n    public function getDefaultRoute()\n    {\n        return route('voyager.'.$this->dataType->slug.'.edit', $this->data->{$this->data->getKeyName()});\n    }\n}\n"
  },
  {
    "path": "src/Actions/RestoreAction.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Actions;\n\nclass RestoreAction extends AbstractAction\n{\n    public function getTitle()\n    {\n        return __('voyager::generic.restore');\n    }\n\n    public function getIcon()\n    {\n        return 'voyager-trash';\n    }\n\n    public function getPolicy()\n    {\n        return 'restore';\n    }\n\n    public function getAttributes()\n    {\n        return [\n            'class'   => 'btn btn-sm btn-success pull-right restore',\n            'data-id' => $this->data->{$this->data->getKeyName()},\n            'id'      => 'restore-'.$this->data->{$this->data->getKeyName()},\n        ];\n    }\n\n    public function getDefaultRoute()\n    {\n        return route('voyager.'.$this->dataType->slug.'.restore', $this->data->{$this->data->getKeyName()});\n    }\n}\n"
  },
  {
    "path": "src/Actions/ViewAction.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Actions;\n\nclass ViewAction extends AbstractAction\n{\n    public function getTitle()\n    {\n        return __('voyager::generic.view');\n    }\n\n    public function getIcon()\n    {\n        return 'voyager-eye';\n    }\n\n    public function getPolicy()\n    {\n        return 'read';\n    }\n\n    public function getAttributes()\n    {\n        return [\n            'class' => 'btn btn-sm btn-warning pull-right view',\n        ];\n    }\n\n    public function getDefaultRoute()\n    {\n        return route('voyager.'.$this->dataType->slug.'.show', $this->data->{$this->data->getKeyName()});\n    }\n}\n"
  },
  {
    "path": "src/Alert/Components/AbstractComponent.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Alert\\Components;\n\nuse TCG\\Voyager\\Alert;\n\nabstract class AbstractComponent implements ComponentInterface\n{\n    protected $alert;\n\n    public function setAlert(Alert $alert)\n    {\n        $this->alert = $alert;\n\n        return $this;\n    }\n\n    public function __call($name, $arguments)\n    {\n        return call_user_func_array([$this->alert, $name], $arguments);\n    }\n}\n"
  },
  {
    "path": "src/Alert/Components/ButtonComponent.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Alert\\Components;\n\nclass ButtonComponent extends AbstractComponent\n{\n    protected $text;\n    protected $link;\n    protected $style;\n\n    public function create($text, $link = '#', $style = 'default')\n    {\n        $this->text = $text;\n        $this->link = $link;\n        $this->style = $style;\n    }\n\n    public function render()\n    {\n        return \"<a href='{$this->link}' class='btn btn-{$this->style}'>{$this->text}</a>\";\n    }\n}\n"
  },
  {
    "path": "src/Alert/Components/ComponentInterface.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Alert\\Components;\n\ninterface ComponentInterface\n{\n    public function render();\n}\n"
  },
  {
    "path": "src/Alert/Components/TextComponent.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Alert\\Components;\n\nclass TextComponent extends AbstractComponent\n{\n    protected $text;\n\n    public function create($text)\n    {\n        $this->text = $text;\n    }\n\n    public function render()\n    {\n        return \"<p>{$this->text}</p>\";\n    }\n}\n"
  },
  {
    "path": "src/Alert/Components/TitleComponent.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Alert\\Components;\n\nclass TitleComponent extends AbstractComponent\n{\n    protected $title;\n\n    public function create($title)\n    {\n        $this->title = $title;\n    }\n\n    public function render()\n    {\n        return \"<strong>{$this->title}</strong>\";\n    }\n}\n"
  },
  {
    "path": "src/Alert.php",
    "content": "<?php\n\nnamespace TCG\\Voyager;\n\nuse TCG\\Voyager\\Alert\\Components\\ComponentInterface;\n\nclass Alert\n{\n    protected $components;\n\n    protected $name;\n    protected $type;\n\n    public function __construct($name, $type = 'default')\n    {\n        $this->name = $name;\n        $this->type = $type;\n    }\n\n    public function addComponent(ComponentInterface $component)\n    {\n        $this->components[] = $component;\n\n        return $this;\n    }\n\n    public function __get($name)\n    {\n        return $this->$name;\n    }\n\n    public function __call($name, $arguments)\n    {\n        $component = app('voyager.alert.components.'.$name, ['alert' => $this])\n            ->setAlert($this);\n\n        call_user_func_array([$component, 'create'], $arguments);\n\n        return $this->addComponent($component);\n    }\n}\n"
  },
  {
    "path": "src/Commands/AdminCommand.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Str;\nuse Symfony\\Component\\Console\\Input\\InputOption;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass AdminCommand extends Command\n{\n    /**\n     * The console command name.\n     *\n     * @var string\n     */\n    protected $name = 'voyager:admin';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Make sure there is a user with the admin role that has all of the necessary permissions.';\n\n    /**\n     * Get user options.\n     */\n    protected function getOptions()\n    {\n        return [\n            ['create', null, InputOption::VALUE_NONE, 'Create an admin user', null],\n        ];\n    }\n\n    public function fire()\n    {\n        return $this->handle();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        // Get or create user\n        $user = $this->getUser(\n            $this->option('create')\n        );\n\n        // the user not returned\n        if (!$user) {\n            exit;\n        }\n\n        // Get or create role\n        $role = $this->getAdministratorRole();\n\n        // Get all permissions\n        $permissions = Voyager::model('Permission')->all();\n\n        // Assign all permissions to the admin role\n        $role->permissions()->sync(\n            $permissions->pluck('id')->all()\n        );\n\n        // Ensure that the user is admin\n        $user->role_id = $role->id;\n        $user->save();\n\n        $this->info('The user now has full access to your site.');\n    }\n\n    /**\n     * Get command arguments.\n     *\n     * @return array\n     */\n    protected function getArguments()\n    {\n        return [\n            ['email', InputOption::VALUE_REQUIRED, 'The email of the user.', null],\n        ];\n    }\n\n    /**\n     * Get the administrator role, create it if it does not exists.\n     *\n     * @return mixed\n     */\n    protected function getAdministratorRole()\n    {\n        $role = Voyager::model('Role')->firstOrNew([\n            'name' => 'admin',\n        ]);\n\n        if (!$role->exists) {\n            $role->fill([\n                'display_name' => 'Administrator',\n            ])->save();\n        }\n\n        return $role;\n    }\n\n    /**\n     * Get or create user.\n     *\n     * @param bool $create\n     *\n     * @return \\App\\User\n     */\n    protected function getUser($create = false)\n    {\n        $email = $this->argument('email');\n\n        $model = Auth::guard(app('VoyagerGuard'))->getProvider()->getModel();\n        $model = Str::start($model, '\\\\');\n\n        // If we need to create a new user go ahead and create it\n        if ($create) {\n            $name = $this->ask('Enter the admin name');\n            $password = $this->secret('Enter admin password');\n            $confirmPassword = $this->secret('Confirm Password');\n\n            // Ask for email if there wasnt set one\n            if (!$email) {\n                $email = $this->ask('Enter the admin email');\n            }\n\n            // check if user with given email exists\n\n            if ($model::where('email', $email)->exists()) {\n                $this->info(\"Can't create user. User with the email \".$email.' exists already.');\n\n                return;\n            }\n\n            // Passwords don't match\n            if ($password != $confirmPassword) {\n                $this->info(\"Passwords don't match\");\n\n                return;\n            }\n\n            $this->info('Creating admin account');\n\n            return call_user_func($model.'::forceCreate', [\n                'name'     => $name,\n                'email'    => $email,\n                'password' => Hash::make($password),\n            ]);\n        }\n\n        return call_user_func($model.'::where', 'email', $email)->firstOrFail();\n    }\n}\n"
  },
  {
    "path": "src/Commands/ControllersCommand.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Filesystem\\Filesystem;\nuse Illuminate\\Support\\Str;\nuse Symfony\\Component\\Console\\Input\\InputOption;\n\nclass ControllersCommand extends Command\n{\n    /**\n     * The console command name.\n     *\n     * @var string\n     */\n    protected $name = 'voyager:controllers';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Publish all the controllers from Voyager.';\n\n    /**\n     * The Filesystem instance.\n     *\n     * @var Filesystem\n     */\n    protected $filesystem;\n\n    /**\n     * Filename of stub-file.\n     *\n     * @var string\n     */\n    protected $stub = 'controller.stub';\n\n    /**\n     * Create a new command instance.\n     *\n     * @param Filesystem $filesystem\n     */\n    public function __construct(Filesystem $filesystem)\n    {\n        $this->filesystem = $filesystem;\n\n        parent::__construct();\n    }\n\n    public function fire()\n    {\n        return $this->handle();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n        $stub = $this->getStub();\n        $files = $this->filesystem->files(base_path('vendor/tcg/voyager/src/Http/Controllers'));\n        $namespace = config('voyager.controllers.namespace', 'TCG\\\\Voyager\\\\Http\\\\Controllers');\n\n        $appNamespace = app()->getNamespace();\n\n        if (!Str::startsWith($namespace, $appNamespace)) {\n            return $this->error('The controllers namespace must start with your application namespace: '.$appNamespace);\n        }\n\n        $location = str_replace('\\\\', DIRECTORY_SEPARATOR, substr($namespace, strlen($appNamespace)));\n\n        if (!$this->filesystem->isDirectory(app_path($location))) {\n            $this->filesystem->makeDirectory(app_path($location));\n        }\n\n        foreach ($files as $file) {\n            $parts = explode(DIRECTORY_SEPARATOR, $file);\n            $filename = end($parts);\n\n            if ($filename == 'Controller.php') {\n                continue;\n            }\n\n            $path = app_path($location.DIRECTORY_SEPARATOR.$filename);\n\n            if (!$this->filesystem->exists($path) or $this->option('force')) {\n                $class = substr($filename, 0, strpos($filename, '.'));\n                $content = $this->generateContent($stub, $class);\n                $this->filesystem->put($path, $content);\n            }\n        }\n\n        $this->info('Published Voyager controllers!');\n    }\n\n    /**\n     * Get stub content.\n     *\n     * @return string\n     */\n    public function getStub()\n    {\n        return $this->filesystem->get(base_path('/vendor/tcg/voyager/stubs/'.$this->stub));\n    }\n\n    /**\n     * Generate real content from stub.\n     *\n     * @param $stub\n     * @param $class\n     *\n     * @return mixed\n     */\n    protected function generateContent($stub, $class)\n    {\n        $namespace = config('voyager.controllers.namespace', 'TCG\\\\Voyager\\\\Http\\\\Controllers');\n\n        $content = str_replace(\n            'DummyNamespace',\n            $namespace,\n            $stub\n        );\n\n        $content = str_replace(\n            'FullBaseDummyClass',\n            'TCG\\\\Voyager\\\\Http\\\\Controllers\\\\'.$class,\n            $content\n        );\n\n        $content = str_replace(\n            'BaseDummyClass',\n            'Base'.$class,\n            $content\n        );\n\n        $content = str_replace(\n            'DummyClass',\n            $class,\n            $content\n        );\n\n        return $content;\n    }\n\n    /**\n     * Get command options.\n     *\n     * @return array\n     */\n    protected function getOptions()\n    {\n        return [\n            ['force', 'f', InputOption::VALUE_NONE, 'Overwrite existing controller files'],\n        ];\n    }\n}\n"
  },
  {
    "path": "src/Commands/InstallCommand.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Filesystem\\Filesystem;\nuse Illuminate\\Support\\Composer;\nuse Symfony\\Component\\Console\\Input\\InputOption;\nuse TCG\\Voyager\\Providers\\VoyagerDummyServiceProvider;\nuse TCG\\Voyager\\VoyagerServiceProvider;\n\nclass InstallCommand extends Command\n{\n    /**\n     * The console command name.\n     *\n     * @var string\n     */\n    protected $name = 'voyager:install';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Install the Voyager Admin package';\n\n    /**\n     * The Composer instance.\n     *\n     * @var \\Illuminate\\Foundation\\Composer\n     */\n    protected $composer;\n\n    /**\n     * Seed Folder name.\n     *\n     * @var string\n     */\n    protected $seedFolder;\n\n    public function __construct(Composer $composer)\n    {\n        parent::__construct();\n\n        $this->composer = $composer;\n        $this->composer->setWorkingPath(base_path());\n\n    }\n\n    protected function getOptions()\n    {\n        return [\n            ['force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production', null],\n            ['with-dummy', null, InputOption::VALUE_NONE, 'Install with dummy data', null],\n        ];\n    }\n\n    /**\n     * Get the composer command for the environment.\n     *\n     * @return string\n     */\n    protected function findComposer()\n    {\n        if (file_exists(getcwd().'/composer.phar')) {\n            return '\"'.PHP_BINARY.'\" '.getcwd().'/composer.phar';\n        }\n\n        return 'composer';\n    }\n\n    public function fire(Filesystem $filesystem)\n    {\n        return $this->handle($filesystem);\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @param \\Illuminate\\Filesystem\\Filesystem $filesystem\n     *\n     * @return void\n     */\n    public function handle(Filesystem $filesystem)\n    {\n        $this->info('Publishing the Voyager assets, database, and config files');\n\n        // Publish only relevant resources on install\n        $tags = ['seeders'];\n\n        $this->call('vendor:publish', ['--provider' => VoyagerServiceProvider::class, '--tag' => $tags]);\n\n        $this->info('Migrating the database tables into your application');\n        $this->call('migrate', ['--force' => $this->option('force')]);\n\n        $this->info('Attempting to set Voyager User model as parent to App\\User');\n        if (file_exists(app_path('User.php')) || file_exists(app_path('Models/User.php'))) {\n            $userPath = file_exists(app_path('User.php')) ? app_path('User.php') : app_path('Models/User.php');\n\n            $str = file_get_contents($userPath);\n\n            if ($str !== false) {\n                $str = str_replace('extends Authenticatable', \"extends \\TCG\\Voyager\\Models\\User\", $str);\n\n                file_put_contents($userPath, $str);\n            }\n        } else {\n            $this->warn('Unable to locate \"User.php\" in app or app/Models.  Did you move this file?');\n            $this->warn('You will need to update this manually.  Change \"extends Authenticatable\" to \"extends \\TCG\\Voyager\\Models\\User\" in your User model');\n        }\n\n        $this->info('Adding Voyager routes to routes/web.php');\n        $routes_contents = $filesystem->get(base_path('routes/web.php'));\n        if (false === strpos($routes_contents, 'Voyager::routes()')) {\n            $filesystem->append(\n                base_path('routes/web.php'),\n                PHP_EOL.PHP_EOL.\"Route::group(['prefix' => 'admin'], function () {\".PHP_EOL.\"    Voyager::routes();\".PHP_EOL.\"});\".PHP_EOL\n            );\n        }\n\n        $publishablePath = dirname(__DIR__).'/../publishable';\n\n        if ($this->option('with-dummy')) {\n            $this->info('Publishing dummy content');\n            $tags = ['dummy_seeders', 'dummy_content', 'dummy_config', 'dummy_migrations'];\n            $this->call('vendor:publish', ['--provider' => VoyagerDummyServiceProvider::class, '--tag' => $tags]);\n        } else {\n            $this->call('vendor:publish', ['--provider' => VoyagerServiceProvider::class, '--tag' => ['config', 'voyager_avatar']]);\n        }\n\n        $this->info('Dumping the autoloaded files and reloading all new files');\n        $this->composer->dumpAutoloads();\n\n        $this->info('Seeding data into the database');\n        $this->call('db:seed', ['--class' => 'VoyagerDatabaseSeeder', '--force' => $this->option('force')]);\n\n        if ($this->option('with-dummy')) {\n            $this->info('Migrating dummy tables');\n            $this->call('migrate');\n\n            $this->info('Seeding dummy data');\n            $this->call('db:seed', ['--class' => 'VoyagerDummyDatabaseSeeder', '--force' => $this->option('force')]);\n        }\n\n        $this->info('Adding the storage symlink to your public folder');\n        $this->call('storage:link');\n\n        $this->info('Successfully installed Voyager! Enjoy');\n    }\n\n}\n"
  },
  {
    "path": "src/Commands/MakeModelCommand.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Commands;\n\nuse Illuminate\\Foundation\\Console\\ModelMakeCommand;\nuse Symfony\\Component\\Console\\Input\\InputOption;\n\nclass MakeModelCommand extends ModelMakeCommand\n{\n    /**\n     * The console command name.\n     *\n     * @var string\n     */\n    protected $name = 'voyager:make:model';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Create a new Voyager model class';\n\n    /**\n     * Get the stub file for the generator.\n     *\n     * @return string\n     */\n    protected function getStub()\n    {\n        return __DIR__.'/../../stubs/model.stub';\n    }\n\n    /**\n     * Build the class with the given name.\n     *\n     * @param string $name\n     *\n     * @return string\n     */\n    protected function buildClass($name)\n    {\n        $stub = $this->files->get($this->getStub());\n\n        return $this->addSoftDelete($stub)->replaceNamespace($stub, $name)->replaceClass($stub, $name);\n    }\n\n    /**\n     * Add SoftDelete to the given stub.\n     *\n     * @param string $stub\n     *\n     * @return $this\n     */\n    protected function addSoftDelete(&$stub)\n    {\n        $traitIncl = $trait = '';\n\n        if ($this->option('softdelete')) {\n            $traitIncl = 'use Illuminate\\Database\\Eloquent\\SoftDeletes;';\n            $trait = 'use SoftDeletes;';\n        }\n\n        $stub = str_replace('//DummySDTraitInclude', $traitIncl, $stub);\n        $stub = str_replace('//DummySDTrait', $trait, $stub);\n\n        return $this;\n    }\n\n    /**\n     * Get the console command options.\n     *\n     * @return array\n     */\n    protected function getOptions()\n    {\n        $options = [\n            ['softdelete', 'd', InputOption::VALUE_NONE, 'Add soft-delete field to Model'],\n        ];\n\n        return array_merge($options, parent::getOptions());\n    }\n}\n"
  },
  {
    "path": "src/Contracts/User.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Contracts;\n\ninterface User\n{\n    public function role();\n\n    public function hasRole($name);\n\n    public function setRole($name);\n\n    public function hasPermission($name);\n\n    public function hasPermissionOrFail($name);\n\n    public function hasPermissionOrAbort($name, $statusCode = 403);\n}\n"
  },
  {
    "path": "src/Database/DatabaseUpdater.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database;\n\nuse Doctrine\\DBAL\\Schema\\Column;\nuse Doctrine\\DBAL\\Schema\\SchemaException;\nuse Doctrine\\DBAL\\Schema\\TableDiff;\nuse TCG\\Voyager\\Database\\Schema\\SchemaManager;\nuse TCG\\Voyager\\Database\\Schema\\Table;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass DatabaseUpdater\n{\n    protected $tableArr;\n    protected $table;\n    protected $originalTable;\n\n    public function __construct(array $tableArr)\n    {\n        Type::registerCustomPlatformTypes();\n\n        $this->table = Table::make($tableArr);\n        $this->tableArr = $tableArr;\n        $this->originalTable = SchemaManager::listTableDetails($tableArr['oldName']);\n    }\n\n    /**\n     * Update the table.\n     *\n     * @return void\n     */\n    public static function update($table)\n    {\n        if (!is_array($table)) {\n            $table = json_decode($table, true);\n        }\n\n        if (!SchemaManager::tableExists($table['oldName'])) {\n            throw SchemaException::tableDoesNotExist($table['oldName']);\n        }\n\n        $updater = new self($table);\n\n        $updater->updateTable();\n    }\n\n    /**\n     * Updates the table.\n     *\n     * @return void\n     */\n    public function updateTable()\n    {\n        // Get table new name\n        if (($newName = $this->table->getName()) != $this->originalTable->getName()) {\n            // Make sure the new name doesn't already exist\n            if (SchemaManager::tableExists($newName)) {\n                throw SchemaException::tableAlreadyExists($newName);\n            }\n        } else {\n            $newName = false;\n        }\n\n        // Rename columns\n        if ($renamedColumnsDiff = $this->getRenamedColumnsDiff()) {\n            SchemaManager::alterTable($renamedColumnsDiff);\n\n            // Refresh original table after renaming the columns\n            $this->originalTable = SchemaManager::listTableDetails($this->tableArr['oldName']);\n        }\n\n        $tableDiff = $this->originalTable->diff($this->table);\n\n        // Add new table name to tableDiff\n        if ($newName) {\n            if (!$tableDiff) {\n                $tableDiff = new TableDiff($this->tableArr['oldName']);\n                $tableDiff->fromTable = $this->originalTable;\n            }\n\n            $tableDiff->newName = $newName;\n        }\n\n        // Update the table\n        if ($tableDiff) {\n            SchemaManager::alterTable($tableDiff);\n        }\n    }\n\n    /**\n     * Get the table diff to rename columns.\n     *\n     * @return \\Doctrine\\DBAL\\Schema\\TableDiff\n     */\n    protected function getRenamedColumnsDiff()\n    {\n        $renamedColumns = $this->getRenamedColumns();\n\n        if (empty($renamedColumns)) {\n            return false;\n        }\n\n        $renamedColumnsDiff = new TableDiff($this->tableArr['oldName']);\n        $renamedColumnsDiff->fromTable = $this->originalTable;\n\n        foreach ($renamedColumns as $oldName => $newName) {\n            $renamedColumnsDiff->renamedColumns[$oldName] = $this->table->getColumn($newName);\n        }\n\n        return $renamedColumnsDiff;\n    }\n\n    /**\n     * Get the table diff to rename columns and indexes.\n     *\n     * @return \\Doctrine\\DBAL\\Schema\\TableDiff\n     */\n    protected function getRenamedDiff()\n    {\n        $renamedColumns = $this->getRenamedColumns();\n        $renamedIndexes = $this->getRenamedIndexes();\n\n        if (empty($renamedColumns) && empty($renamedIndexes)) {\n            return false;\n        }\n\n        $renamedDiff = new TableDiff($this->tableArr['oldName']);\n        $renamedDiff->fromTable = $this->originalTable;\n\n        foreach ($renamedColumns as $oldName => $newName) {\n            $renamedDiff->renamedColumns[$oldName] = $this->table->getColumn($newName);\n        }\n\n        foreach ($renamedIndexes as $oldName => $newName) {\n            $renamedDiff->renamedIndexes[$oldName] = $this->table->getIndex($newName);\n        }\n\n        return $renamedDiff;\n    }\n\n    /**\n     * Get columns that were renamed.\n     *\n     * @return array\n     */\n    protected function getRenamedColumns()\n    {\n        $renamedColumns = [];\n\n        foreach ($this->tableArr['columns'] as $column) {\n            $oldName = $column['oldName'];\n\n            // make sure this is an existing column and not a new one\n            if ($this->originalTable->hasColumn($oldName)) {\n                $name = $column['name'];\n\n                if ($name != $oldName) {\n                    $renamedColumns[$oldName] = $name;\n                }\n            }\n        }\n\n        return $renamedColumns;\n    }\n\n    /**\n     * Get indexes that were renamed.\n     *\n     * @return array\n     */\n    protected function getRenamedIndexes()\n    {\n        $renamedIndexes = [];\n\n        foreach ($this->tableArr['indexes'] as $index) {\n            $oldName = $index['oldName'];\n\n            // make sure this is an existing index and not a new one\n            if ($this->originalTable->hasIndex($oldName)) {\n                $name = $index['name'];\n\n                if ($name != $oldName) {\n                    $renamedIndexes[$oldName] = $name;\n                }\n            }\n        }\n\n        return $renamedIndexes;\n    }\n}\n"
  },
  {
    "path": "src/Database/Platforms/Mysql.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Platforms;\n\nuse Illuminate\\Support\\Collection;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nabstract class Mysql extends Platform\n{\n    public static function getTypes(Collection $typeMapping)\n    {\n        $typeMapping->forget([\n            'real',    // same as double\n            'int',     // same as integer\n            'string',  // same as varchar\n            'numeric', // same as decimal\n        ]);\n\n        return $typeMapping;\n    }\n\n    public static function registerCustomTypeOptions()\n    {\n        // Not supported\n        Type::registerCustomOption(Type::NOT_SUPPORTED, true, [\n            'enum',\n            'set',\n        ]);\n\n        // Not support index\n        Type::registerCustomOption(Type::NOT_SUPPORT_INDEX, true, '*text');\n        Type::registerCustomOption(Type::NOT_SUPPORT_INDEX, true, '*blob');\n\n        // Disable Default for unsupported types\n        Type::registerCustomOption('default', [\n            'disabled' => true,\n        ], '*text');\n        Type::registerCustomOption('default', [\n            'disabled' => true,\n        ], '*blob');\n        Type::registerCustomOption('default', [\n            'disabled' => true,\n        ], 'json');\n    }\n}\n"
  },
  {
    "path": "src/Database/Platforms/Platform.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Platforms;\n\nuse Illuminate\\Support\\Collection;\n\nabstract class Platform\n{\n    // abstract public static function getTypes(Collection $typeMapping);\n\n    // abstract public static function registerCustomTypeOptions();\n\n    public static function getPlatform($platformName)\n    {\n        $platform = __NAMESPACE__.'\\\\'.ucfirst($platformName);\n\n        if (!class_exists($platform)) {\n            throw new \\Exception(\"Platform {$platformName} doesn't exist\");\n        }\n\n        return $platform;\n    }\n\n    public static function getPlatformTypes($platformName, Collection $typeMapping)\n    {\n        $platform = static::getPlatform($platformName);\n\n        return $platform::getTypes($typeMapping);\n    }\n\n    public static function registerPlatformCustomTypeOptions($platformName)\n    {\n        $platform = static::getPlatform($platformName);\n\n        return $platform::registerCustomTypeOptions();\n    }\n}\n"
  },
  {
    "path": "src/Database/Platforms/Postgresql.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Platforms;\n\nuse Illuminate\\Support\\Collection;\n\nabstract class Postgresql extends Platform\n{\n    public static function getTypes(Collection $typeMapping)\n    {\n        // todo: need to create\n        // box, circle, line, lseg, path, pg_lsn, point, polygon\n\n        $typeMapping->forget([\n            'smallint',\n            'serial',\n            'serial4',\n            'int',\n            'integer',\n            'bigserial',\n            'serial8',\n            'bigint',\n            'decimal',\n            'float',\n            'real',\n            'double',\n            'double precision',\n            'boolean',\n            '_varchar',\n            'char',\n            'datetime',\n            'year',\n        ]);\n\n        return $typeMapping;\n    }\n\n    public static function registerCustomTypeOptions()\n    {\n    }\n}\n"
  },
  {
    "path": "src/Database/Platforms/Sqlite.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Platforms;\n\nuse Illuminate\\Support\\Collection;\n\nabstract class Sqlite extends Platform\n{\n    public static function getTypes(Collection $typeMapping)\n    {\n        $typeMapping->forget([\n            'decimal',\n            'double',\n        ]);\n\n        return $typeMapping->unique();\n    }\n\n    public static function registerCustomTypeOptions()\n    {\n    }\n}\n"
  },
  {
    "path": "src/Database/Schema/Column.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Schema;\n\nuse Doctrine\\DBAL\\Schema\\Column as DoctrineColumn;\nuse Doctrine\\DBAL\\Types\\Type as DoctrineType;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nabstract class Column\n{\n    public static function make(array $column, string $tableName = null)\n    {\n        $name = Identifier::validate($column['name'], 'Column');\n        $type = $column['type'];\n        $type = ($type instanceof DoctrineType) ? $type : DoctrineType::getType(trim($type['name']));\n        $type->tableName = $tableName;\n\n        $options = array_diff_key($column, array_flip(['name', 'composite', 'oldName', 'null', 'extra', 'type', 'charset', 'collation']));\n\n        return new DoctrineColumn($name, $type, $options);\n    }\n\n    /**\n     * @return array\n     */\n    public static function toArray(DoctrineColumn $column)\n    {\n        $columnArr = $column->toArray();\n        $columnArr['type'] = Type::toArray($columnArr['type']);\n        $columnArr['oldName'] = $columnArr['name'];\n        $columnArr['null'] = $columnArr['notnull'] ? 'NO' : 'YES';\n        $columnArr['extra'] = static::getExtra($column);\n        $columnArr['composite'] = false;\n\n        return $columnArr;\n    }\n\n    /**\n     * @return string\n     */\n    protected static function getExtra(DoctrineColumn $column)\n    {\n        $extra = '';\n\n        $extra .= $column->getAutoincrement() ? 'auto_increment' : '';\n        // todo: Add Extra stuff like mysql 'onUpdate' etc...\n\n        return $extra;\n    }\n}\n"
  },
  {
    "path": "src/Database/Schema/ForeignKey.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Schema;\n\nuse Doctrine\\DBAL\\Schema\\ForeignKeyConstraint as DoctrineForeignKey;\n\nabstract class ForeignKey\n{\n    public static function make(array $foreignKey)\n    {\n        // Set the local table\n        $localTable = null;\n        if (isset($foreignKey['localTable'])) {\n            $localTable = SchemaManager::getDoctrineTable($foreignKey['localTable']);\n        }\n\n        $localColumns = $foreignKey['localColumns'];\n        $foreignTable = $foreignKey['foreignTable'];\n        $foreignColumns = $foreignKey['foreignColumns'];\n        $options = $foreignKey['options'] ?? [];\n\n        // Set the name\n        $name = isset($foreignKey['name']) ? trim($foreignKey['name']) : '';\n        if (empty($name)) {\n            $table = isset($localTable) ? $localTable->getName() : null;\n            $name = Index::createName($localColumns, 'foreign', $table);\n        } else {\n            $name = Identifier::validate($name, 'Foreign Key');\n        }\n\n        $doctrineForeignKey = new DoctrineForeignKey(\n            $localColumns,\n            $foreignTable,\n            $foreignColumns,\n            $name,\n            $options\n        );\n\n        if (isset($localTable)) {\n            $doctrineForeignKey->setLocalTable($localTable);\n        }\n\n        return $doctrineForeignKey;\n    }\n\n    /**\n     * @return array\n     */\n    public static function toArray(DoctrineForeignKey $fk)\n    {\n        return [\n            'name'           => $fk->getName(),\n            'localTable'     => $fk->getLocalTableName(),\n            'localColumns'   => $fk->getLocalColumns(),\n            'foreignTable'   => $fk->getForeignTableName(),\n            'foreignColumns' => $fk->getForeignColumns(),\n            'options'        => $fk->getOptions(),\n        ];\n    }\n}\n"
  },
  {
    "path": "src/Database/Schema/Identifier.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Schema;\n\nuse Illuminate\\Support\\Facades\\Validator;\n\nabstract class Identifier\n{\n    // Warning: Do not modify this\n    public const REGEX = '^[a-zA-Z_][a-zA-Z0-9_]*$';\n\n    public static function validate($identifier, $asset = '')\n    {\n        $identifier = trim($identifier);\n\n        $validator = Validator::make(['identifier' => $identifier], [\n            'identifier' => 'required|regex:'.'/'.static::REGEX.'/',\n        ]);\n\n        if ($validator->fails()) {\n            throw new \\Exception(\"{$asset} Identifier {$identifier} is invalid\");\n        }\n\n        return $identifier;\n    }\n}\n"
  },
  {
    "path": "src/Database/Schema/Index.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Schema;\n\nuse Doctrine\\DBAL\\Schema\\Index as DoctrineIndex;\n\nabstract class Index\n{\n    public const PRIMARY = 'PRIMARY';\n    public const UNIQUE = 'UNIQUE';\n    public const INDEX = 'INDEX';\n\n    public static function make(array $index)\n    {\n        $columns = $index['columns'];\n        if (!is_array($columns)) {\n            $columns = [$columns];\n        }\n\n        if (isset($index['type'])) {\n            $type = $index['type'];\n\n            $isPrimary = ($type == static::PRIMARY);\n            $isUnique = $isPrimary || ($type == static::UNIQUE);\n        } else {\n            $isPrimary = $index['isPrimary'];\n            $isUnique = $index['isUnique'];\n\n            // Set the type\n            if ($isPrimary) {\n                $type = static::PRIMARY;\n            } elseif ($isUnique) {\n                $type = static::UNIQUE;\n            } else {\n                $type = static::INDEX;\n            }\n        }\n\n        // Set the name\n        $name = trim($index['name'] ?? '');\n        if (empty($name)) {\n            $table = $index['table'] ?? null;\n            $name = static::createName($columns, $type, $table);\n        } else {\n            $name = Identifier::validate($name, 'Index');\n        }\n\n        $flags = $index['flags'] ?? [];\n        $options = $index['options'] ?? [];\n\n        return new DoctrineIndex($name, $columns, $isUnique, $isPrimary, $flags, $options);\n    }\n\n    /**\n     * @return array\n     */\n    public static function toArray(DoctrineIndex $index)\n    {\n        $name = $index->getName();\n        $columns = $index->getColumns();\n\n        return [\n            'name'        => $name,\n            'oldName'     => $name,\n            'columns'     => $columns,\n            'type'        => static::getType($index),\n            'isPrimary'   => $index->isPrimary(),\n            'isUnique'    => $index->isUnique(),\n            'isComposite' => count($columns) > 1,\n            'flags'       => $index->getFlags(),\n            'options'     => $index->getOptions(),\n        ];\n    }\n\n    public static function getType(DoctrineIndex $index)\n    {\n        if ($index->isPrimary()) {\n            return static::PRIMARY;\n        } elseif ($index->isUnique()) {\n            return static::UNIQUE;\n        } else {\n            return static::INDEX;\n        }\n    }\n\n    /**\n     * Create a default index name.\n     *\n     * @param array  $columns\n     * @param string $type\n     * @param string $table\n     *\n     * @return string\n     */\n    public static function createName(array $columns, $type, $table = null)\n    {\n        $table = isset($table) ? trim($table).'_' : '';\n        $type = trim($type);\n        $name = strtolower($table.implode('_', $columns).'_'.$type);\n\n        return str_replace(['-', '.'], '_', $name);\n    }\n\n    public static function availableTypes()\n    {\n        return [\n            static::PRIMARY,\n            static::UNIQUE,\n            static::INDEX,\n        ];\n    }\n}\n"
  },
  {
    "path": "src/Database/Schema/SchemaManager.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Schema;\n\nuse Doctrine\\DBAL\\Schema\\SchemaException;\nuse Doctrine\\DBAL\\Schema\\Table as DoctrineTable;\nuse Illuminate\\Support\\Facades\\DB;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nabstract class SchemaManager\n{\n    // todo: trim parameters\n\n    public static function __callStatic($method, $args)\n    {\n        return static::manager()->$method(...$args);\n    }\n\n    public static function manager()\n    {\n        return DB::connection()->getDoctrineSchemaManager();\n    }\n\n    public static function getDatabaseConnection()\n    {\n        return DB::connection()->getDoctrineConnection();\n    }\n\n    public static function tableExists($table)\n    {\n        if (!is_array($table)) {\n            $table = [$table];\n        }\n\n        return static::manager()->tablesExist($table);\n    }\n\n    public static function listTables()\n    {\n        $tables = [];\n\n        foreach (static::manager()->listTableNames() as $tableName) {\n            $tables[$tableName] = static::listTableDetails($tableName);\n        }\n\n        return $tables;\n    }\n\n    /**\n     * @param string $tableName\n     *\n     * @return \\TCG\\Voyager\\Database\\Schema\\Table\n     */\n    public static function listTableDetails($tableName)\n    {\n        $columns = static::manager()->listTableColumns($tableName);\n\n        $foreignKeys = [];\n        if (static::manager()->getDatabasePlatform()->supportsForeignKeyConstraints()) {\n            $foreignKeys = static::manager()->listTableForeignKeys($tableName);\n        }\n\n        $indexes = static::manager()->listTableIndexes($tableName);\n\n        return new Table($tableName, $columns, $indexes, [], $foreignKeys, []);\n    }\n\n    /**\n     * Describes given table.\n     *\n     * @param string $tableName\n     *\n     * @return \\Illuminate\\Support\\Collection\n     */\n    public static function describeTable($tableName)\n    {\n        Type::registerCustomPlatformTypes();\n\n        $table = static::listTableDetails($tableName);\n\n        return collect($table->columns)->map(function ($column) use ($table) {\n            $columnArr = Column::toArray($column);\n\n            $columnArr['field'] = $columnArr['name'];\n            $columnArr['type'] = $columnArr['type']['name'];\n\n            // Set the indexes and key\n            $columnArr['indexes'] = [];\n            $columnArr['key'] = null;\n            if ($columnArr['indexes'] = $table->getColumnsIndexes($columnArr['name'], true)) {\n                // Convert indexes to Array\n                foreach ($columnArr['indexes'] as $name => $index) {\n                    $columnArr['indexes'][$name] = Index::toArray($index);\n                }\n\n                // If there are multiple indexes for the column\n                // the Key will be one with highest priority\n                $indexType = array_values($columnArr['indexes'])[0]['type'];\n                $columnArr['key'] = substr($indexType, 0, 3);\n            }\n\n            return $columnArr;\n        });\n    }\n\n    public static function listTableColumnNames($tableName)\n    {\n        Type::registerCustomPlatformTypes();\n\n        $columnNames = [];\n\n        foreach (static::manager()->listTableColumns($tableName) as $column) {\n            $columnNames[] = $column->getName();\n        }\n\n        return $columnNames;\n    }\n\n    public static function createTable($table)\n    {\n        if (!($table instanceof DoctrineTable)) {\n            $table = Table::make($table);\n        }\n\n        static::manager()->createTable($table);\n    }\n\n    public static function getDoctrineTable($table)\n    {\n        $table = trim($table);\n\n        if (!static::tableExists($table)) {\n            throw SchemaException::tableDoesNotExist($table);\n        }\n\n        return static::manager()->listTableDetails($table);\n    }\n\n    public static function getDoctrineColumn($table, $column)\n    {\n        return static::getDoctrineTable($table)->getColumn($column);\n    }\n}\n"
  },
  {
    "path": "src/Database/Schema/Table.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Schema;\n\nuse Doctrine\\DBAL\\Schema\\Comparator;\nuse Doctrine\\DBAL\\Schema\\Table as DoctrineTable;\n\nclass Table extends DoctrineTable\n{\n    public static function make($table)\n    {\n        if (!is_array($table)) {\n            $table = json_decode($table, true);\n        }\n\n        $name = Identifier::validate($table['name'], 'Table');\n\n        $columns = [];\n        foreach ($table['columns'] as $columnArr) {\n            $column = Column::make($columnArr, $table['name']);\n            $columns[$column->getName()] = $column;\n        }\n\n        $indexes = [];\n        foreach ($table['indexes'] as $indexArr) {\n            $index = Index::make($indexArr);\n            $indexes[$index->getName()] = $index;\n        }\n\n        $foreignKeys = [];\n        foreach ($table['foreignKeys'] as $foreignKeyArr) {\n            $foreignKey = ForeignKey::make($foreignKeyArr);\n            $foreignKeys[$foreignKey->getName()] = $foreignKey;\n        }\n\n        $options = $table['options'];\n\n        return new self($name, $columns, $indexes, [], $foreignKeys, $options);\n    }\n\n    public function getColumnsIndexes($columns, $sort = false)\n    {\n        if (!is_array($columns)) {\n            $columns = [$columns];\n        }\n\n        $matched = [];\n\n        foreach ($this->_indexes as $index) {\n            if ($index->spansColumns($columns)) {\n                $matched[$index->getName()] = $index;\n            }\n        }\n\n        if (count($matched) > 1 && $sort) {\n            // Sort indexes based on priority: PRI > UNI > IND\n            uasort($matched, function ($index1, $index2) {\n                $index1_type = Index::getType($index1);\n                $index2_type = Index::getType($index2);\n\n                if ($index1_type == $index2_type) {\n                    return 0;\n                }\n\n                if ($index1_type == Index::PRIMARY) {\n                    return -1;\n                }\n\n                if ($index2_type == Index::PRIMARY) {\n                    return 1;\n                }\n\n                if ($index1_type == Index::UNIQUE) {\n                    return -1;\n                }\n\n                // If we reach here, it means: $index1=INDEX && $index2=UNIQUE\n                return 1;\n            });\n        }\n\n        return $matched;\n    }\n\n    public function diff(DoctrineTable $compareTable)\n    {\n        return (new Comparator())->diffTable($this, $compareTable);\n    }\n\n    public function diffOriginal()\n    {\n        return (new Comparator())->diffTable(SchemaManager::getDoctrineTable($this->_name), $this);\n    }\n\n    /**\n     * @return array\n     */\n    public function toArray()\n    {\n        return [\n            'name'           => $this->_name,\n            'oldName'        => $this->_name,\n            'columns'        => $this->exportColumnsToArray(),\n            'indexes'        => $this->exportIndexesToArray(),\n            'primaryKeyName' => $this->_primaryKeyName,\n            'foreignKeys'    => $this->exportForeignKeysToArray(),\n            'options'        => $this->_options,\n        ];\n    }\n\n    /**\n     * @return string\n     */\n    public function toJson()\n    {\n        return json_encode($this->toArray());\n    }\n\n    /**\n     * @return array\n     */\n    public function exportColumnsToArray()\n    {\n        $exportedColumns = [];\n\n        foreach ($this->getColumns() as $name => $column) {\n            $exportedColumns[] = Column::toArray($column);\n        }\n\n        return $exportedColumns;\n    }\n\n    /**\n     * @return array\n     */\n    public function exportIndexesToArray()\n    {\n        $exportedIndexes = [];\n\n        foreach ($this->getIndexes() as $name => $index) {\n            $indexArr = Index::toArray($index);\n            $indexArr['table'] = $this->_name;\n            $exportedIndexes[] = $indexArr;\n        }\n\n        return $exportedIndexes;\n    }\n\n    /**\n     * @return array\n     */\n    public function exportForeignKeysToArray()\n    {\n        $exportedForeignKeys = [];\n\n        foreach ($this->getForeignKeys() as $name => $fk) {\n            $exportedForeignKeys[$name] = ForeignKey::toArray($fk);\n        }\n\n        return $exportedForeignKeys;\n    }\n\n    public function __get($property)\n    {\n        $getter = 'get'.ucfirst($property);\n\n        if (!method_exists($this, $getter)) {\n            throw new \\Exception(\"Property {$property} doesn't exist or is unavailable\");\n        }\n\n        return $this->$getter();\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Common/CharType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Common;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass CharType extends Type\n{\n    public const NAME = 'char';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        $field['length'] = empty($field['length']) ? 1 : $field['length'];\n\n        return \"char({$field['length']})\";\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Common/DoubleType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Common;\n\nuse Doctrine\\DBAL\\Types\\FloatType as DoctrineFloatType;\n\nclass DoubleType extends DoctrineFloatType\n{\n    public const NAME = 'double';\n\n    public function getName()\n    {\n        return static::NAME;\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Common/JsonType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Common;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass JsonType extends Type\n{\n    public const NAME = 'json';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'json';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Common/NumericType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Common;\n\nuse Doctrine\\DBAL\\Types\\DecimalType as DoctrineDecimalType;\n\nclass NumericType extends DoctrineDecimalType\n{\n    public const NAME = 'numeric';\n\n    public function getName()\n    {\n        return static::NAME;\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Common/TextType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Common;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass TextType extends Type\n{\n    public const NAME = 'text';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'text';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Common/VarCharType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Common;\n\nuse Doctrine\\DBAL\\Types\\StringType as DoctrineStringType;\n\nclass VarCharType extends DoctrineStringType\n{\n    public const NAME = 'varchar';\n\n    public function getName()\n    {\n        return static::NAME;\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/BinaryType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass BinaryType extends Type\n{\n    public const NAME = 'binary';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        $field['length'] = empty($field['length']) ? 255 : $field['length'];\n\n        return \"binary({$field['length']})\";\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/BitType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass BitType extends Type\n{\n    public const NAME = 'bit';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        $length = empty($field['length']) ? 1 : $field['length'];\n        $length = $length > 64 ? 64 : $length;\n\n        return \"bit({$length})\";\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/BlobType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass BlobType extends Type\n{\n    public const NAME = 'blob';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'blob';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/EnumType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse Illuminate\\Support\\Facades\\DB;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass EnumType extends Type\n{\n    public const NAME = 'enum';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        $enumField = collect(DB::select(DB::raw('SHOW COLUMNS FROM '.DB::getQueryGrammar()->wrap($this->tableName))))->where('Field', $field['name'])->first();\n\n        if (!is_null($enumField)) {\n            return $enumField->Type;\n        } else {\n            throw new \\Exception('Enum definition error');\n            // throw new \\Exception('Enum type is not supported');\n            // get allowed from $column instance???\n            // learn more about this....\n\n            $pdo = DB::connection()->getPdo();\n\n            // trim the values\n            $allowed = array_map(function ($value) use ($pdo) {\n                return $pdo->quote(trim($value));\n            }, $allowed);\n\n            return 'enum('.implode(', ', $allowed).')';\n        }\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/FloatType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass FloatType extends Type\n{\n    public const NAME = 'float';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'float';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/GeometryCollectionType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass GeometryCollectionType extends Type\n{\n    public const NAME = 'geometrycollection';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'geometrycollection';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/GeometryType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass GeometryType extends Type\n{\n    public const NAME = 'geometry';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'geometry';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/LineStringType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass LineStringType extends Type\n{\n    public const NAME = 'linestring';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'linestring';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/LongBlobType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass LongBlobType extends Type\n{\n    public const NAME = 'longblob';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'longblob';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/LongTextType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass LongTextType extends Type\n{\n    public const NAME = 'longtext';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'longtext';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/MediumBlobType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass MediumBlobType extends Type\n{\n    public const NAME = 'mediumblob';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'mediumblob';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/MediumIntType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass MediumIntType extends Type\n{\n    public const NAME = 'mediumint';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        $commonIntegerTypeDeclaration = call_protected_method($platform, '_getCommonIntegerTypeDeclarationSQL', $field);\n\n        return 'mediumint'.$commonIntegerTypeDeclaration;\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/MediumTextType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass MediumTextType extends Type\n{\n    public const NAME = 'mediumtext';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'mediumtext';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/MultiLineStringType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass MultiLineStringType extends Type\n{\n    public const NAME = 'multilinestring';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'multilinestring';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/MultiPointType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass MultiPointType extends Type\n{\n    public const NAME = 'multipoint';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'multipoint';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/MultiPolygonType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass MultiPolygonType extends Type\n{\n    public const NAME = 'multipolygon';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'multipolygon';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/PointType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass PointType extends Type\n{\n    public const NAME = 'point';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'point';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/PolygonType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass PolygonType extends Type\n{\n    public const NAME = 'polygon';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'polygon';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/SetType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse Illuminate\\Support\\Facades\\DB;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass SetType extends Type\n{\n    public const NAME = 'set';\n\n    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)\n    {\n        throw new \\Exception('Set type is not supported');\n        // we're going to store SET values in the comment since DBAL doesn't support\n        $allowed = explode(',', trim($fieldDeclaration['comment']));\n\n        $pdo = DB::connection()->getPdo();\n\n        // trim the values\n        $fieldDeclaration['allowed'] = array_map(function ($value) use ($pdo) {\n            return $pdo->quote(trim($value));\n        }, $allowed);\n\n        return 'set('.implode(', ', $field['allowed']).')';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/TimeStampType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass TimeStampType extends Type\n{\n    public const NAME = 'timestamp';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        if (isset($field['default'])) {\n            return 'timestamp';\n        }\n\n        return 'timestamp null';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/TinyBlobType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass TinyBlobType extends Type\n{\n    public const NAME = 'tinyblob';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'tinyblob';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/TinyIntType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass TinyIntType extends Type\n{\n    public const NAME = 'tinyint';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        $commonIntegerTypeDeclaration = call_protected_method($platform, '_getCommonIntegerTypeDeclarationSQL', $field);\n\n        return 'tinyint'.$commonIntegerTypeDeclaration;\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/TinyTextType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass TinyTextType extends Type\n{\n    public const NAME = 'tinytext';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'tinytext';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/VarBinaryType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass VarBinaryType extends Type\n{\n    public const NAME = 'varbinary';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        $field['length'] = empty($field['length']) ? 255 : $field['length'];\n\n        return \"varbinary({$field['length']})\";\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Mysql/YearType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Mysql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass YearType extends Type\n{\n    public const NAME = 'year';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'year';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/BitType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass BitType extends Type\n{\n    public const NAME = 'bit';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        $length = empty($field['length']) ? 1 : $field['length'];\n\n        return \"bit({$length})\";\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/BitVaryingType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass BitVaryingType extends Type\n{\n    public const NAME = 'bit varying';\n    public const DBTYPE = 'varbit';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        $length = empty($field['length']) ? 255 : $field['length'];\n\n        return \"varbit({$length})\";\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/ByteaType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass ByteaType extends Type\n{\n    public const NAME = 'bytea';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'bytea';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/CharacterType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse TCG\\Voyager\\Database\\Types\\Common\\CharType;\n\nclass CharacterType extends CharType\n{\n    public const NAME = 'character';\n    public const DBTYPE = 'bpchar';\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/CharacterVaryingType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse TCG\\Voyager\\Database\\Types\\Common\\VarCharType;\n\nclass CharacterVaryingType extends VarCharType\n{\n    public const NAME = 'character varying';\n    public const DBTYPE = 'varchar';\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/CidrType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass CidrType extends Type\n{\n    public const NAME = 'cidr';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'cidr';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/DoublePrecisionType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse TCG\\Voyager\\Database\\Types\\Common\\DoubleType;\n\nclass DoublePrecisionType extends DoubleType\n{\n    public const NAME = 'double precision';\n    public const DBTYPE = 'float8';\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/GeometryType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass GeometryType extends Type\n{\n    public const NAME = 'geometry';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'geometry';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/InetType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass InetType extends Type\n{\n    public const NAME = 'inet';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'inet';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/IntervalType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass IntervalType extends Type\n{\n    public const NAME = 'interval';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'interval';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/JsonbType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass JsonbType extends Type\n{\n    public const NAME = 'jsonb';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'jsonb';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/MacAddrType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass MacAddrType extends Type\n{\n    public const NAME = 'macaddr';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'macaddr';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/MoneyType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass MoneyType extends Type\n{\n    public const NAME = 'money';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'money';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/RealType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass RealType extends Type\n{\n    public const NAME = 'real';\n    public const DBTYPE = 'float4';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'real';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/SmallIntType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass SmallIntType extends Type\n{\n    public const NAME = 'smallint';\n    public const DBTYPE = 'int2';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        $commonIntegerTypeDeclaration = call_protected_method($platform, '_getCommonIntegerTypeDeclarationSQL', $field);\n\n        $type = $field['autoincrement'] ? 'smallserial' : 'smallint';\n\n        return $type.$commonIntegerTypeDeclaration;\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/TimeStampType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass TimeStampType extends Type\n{\n    public const NAME = 'timestamp';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'timestamp(0) without time zone';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/TimeStampTzType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass TimeStampTzType extends Type\n{\n    public const NAME = 'timestamptz';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'timestamp(0) with time zone';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/TimeTzType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass TimeTzType extends Type\n{\n    public const NAME = 'timetz';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'time(0) with time zone';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/TsQueryType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass TsQueryType extends Type\n{\n    public const NAME = 'tsquery';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'tsquery';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/TsVectorType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass TsVectorType extends Type\n{\n    public const NAME = 'tsvector';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'tsvector';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/TxidSnapshotType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass TxidSnapshotType extends Type\n{\n    public const NAME = 'txid_snapshot';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'txid_snapshot';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/UuidType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass UuidType extends Type\n{\n    public const NAME = 'uuid';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'uuid';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Postgresql/XmlType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Postgresql;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass XmlType extends Type\n{\n    public const NAME = 'xml';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'xml';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Sqlite/RealType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types\\Sqlite;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse TCG\\Voyager\\Database\\Types\\Type;\n\nclass RealType extends Type\n{\n    public const NAME = 'real';\n\n    public function getSQLDeclaration(array $field, AbstractPlatform $platform)\n    {\n        return 'real';\n    }\n}\n"
  },
  {
    "path": "src/Database/Types/Type.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Database\\Types;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform as DoctrineAbstractPlatform;\nuse Doctrine\\DBAL\\Types\\Type as DoctrineType;\nuse TCG\\Voyager\\Database\\Platforms\\Platform;\nuse TCG\\Voyager\\Database\\Schema\\SchemaManager;\n\nabstract class Type extends DoctrineType\n{\n    protected static $customTypesRegistered = false;\n    protected static $platformTypeMapping = [];\n    protected static $allTypes = [];\n    protected static $platformTypes = [];\n    protected static $customTypeOptions = [];\n    protected static $typeCategories = [];\n\n    public const NAME = 'UNDEFINED_TYPE_NAME';\n    public const NOT_SUPPORTED = 'notSupported';\n    public const NOT_SUPPORT_INDEX = 'notSupportIndex';\n\n    // todo: make sure this is not overwrting DoctrineType properties\n\n    // Note: length, precision and scale need default values manually\n\n    public function getName()\n    {\n        return static::NAME;\n    }\n\n    public static function toArray(DoctrineType $type)\n    {\n        $customTypeOptions = $type->customOptions ?? [];\n\n        return array_merge([\n            'name' => $type->getName(),\n        ], $customTypeOptions);\n    }\n\n    public static function getPlatformTypes()\n    {\n        if (static::$platformTypes) {\n            return static::$platformTypes;\n        }\n\n        if (!static::$customTypesRegistered) {\n            static::registerCustomPlatformTypes();\n        }\n\n        $platform = SchemaManager::getDatabasePlatform();\n\n        static::$platformTypes = Platform::getPlatformTypes(\n            $platform->getName(),\n            static::getPlatformTypeMapping($platform)\n        );\n\n        static::$platformTypes = static::$platformTypes->map(function ($type) {\n            return static::toArray(static::getType($type));\n        })->groupBy('category');\n\n        return static::$platformTypes;\n    }\n\n    public static function getPlatformTypeMapping(DoctrineAbstractPlatform $platform)\n    {\n        if (static::$platformTypeMapping) {\n            return static::$platformTypeMapping;\n        }\n\n        static::$platformTypeMapping = collect(\n            get_protected_property($platform, 'doctrineTypeMapping')\n        );\n\n        return static::$platformTypeMapping;\n    }\n\n    public static function registerCustomPlatformTypes($force = false)\n    {\n        if (static::$customTypesRegistered && !$force) {\n            return;\n        }\n\n        $platform = SchemaManager::getDatabasePlatform();\n        $platformName = ucfirst($platform->getName());\n\n        $customTypes = array_merge(\n            static::getPlatformCustomTypes('Common'),\n            static::getPlatformCustomTypes($platformName)\n        );\n\n        foreach ($customTypes as $type) {\n            $name = $type::NAME;\n\n            if (static::hasType($name)) {\n                static::overrideType($name, $type);\n            } else {\n                static::addType($name, $type);\n            }\n\n            $dbType = defined(\"{$type}::DBTYPE\") ? $type::DBTYPE : $name;\n\n            $platform->registerDoctrineTypeMapping($dbType, $name);\n        }\n\n        static::addCustomTypeOptions($platformName);\n\n        static::$customTypesRegistered = true;\n    }\n\n    protected static function addCustomTypeOptions($platformName)\n    {\n        static::registerCommonCustomTypeOptions();\n\n        Platform::registerPlatformCustomTypeOptions($platformName);\n\n        // Add the custom options to the types\n        foreach (static::$customTypeOptions as $option) {\n            foreach ($option['types'] as $type) {\n                if (static::hasType($type)) {\n                    static::getType($type)->customOptions[$option['name']] = $option['value'];\n                }\n            }\n        }\n    }\n\n    protected static function getPlatformCustomTypes($platformName)\n    {\n        $typesPath = __DIR__.DIRECTORY_SEPARATOR.$platformName.DIRECTORY_SEPARATOR;\n        $namespace = __NAMESPACE__.'\\\\'.$platformName.'\\\\';\n        $types = [];\n\n        foreach (glob($typesPath.'*.php') as $classFile) {\n            $types[] = $namespace.str_replace(\n                '.php',\n                '',\n                str_replace($typesPath, '', $classFile)\n            );\n        }\n\n        return $types;\n    }\n\n    public static function registerCustomOption($name, $value, $types)\n    {\n        if (is_string($types)) {\n            $types = trim($types);\n\n            if ($types == '*') {\n                $types = static::getAllTypes()->toArray();\n            } elseif (strpos($types, '*') !== false) {\n                $searchType = str_replace('*', '', $types);\n                $types = static::getAllTypes()->filter(function ($type) use ($searchType) {\n                    return strpos($type, $searchType) !== false;\n                })->toArray();\n            } else {\n                $types = [$types];\n            }\n        }\n\n        static::$customTypeOptions[] = [\n            'name'  => $name,\n            'value' => $value,\n            'types' => $types,\n        ];\n    }\n\n    protected static function registerCommonCustomTypeOptions()\n    {\n        static::registerTypeCategories();\n        static::registerTypeDefaultOptions();\n    }\n\n    protected static function registerTypeDefaultOptions()\n    {\n        $types = static::getTypeCategories();\n\n        // Numbers\n        static::registerCustomOption('default', [\n            'type' => 'number',\n            'step' => 'any',\n        ], $types['numbers']);\n\n        // Date and Time\n        static::registerCustomOption('default', [\n            'type' => 'date',\n        ], 'date');\n        static::registerCustomOption('default', [\n            'type' => 'time',\n            'step' => '1',\n        ], 'time');\n        static::registerCustomOption('default', [\n            'type' => 'number',\n            'min'  => '0',\n        ], 'year');\n    }\n\n    protected static function registerTypeCategories()\n    {\n        $types = static::getTypeCategories();\n\n        static::registerCustomOption('category', 'Numbers', $types['numbers']);\n        static::registerCustomOption('category', 'Strings', $types['strings']);\n        static::registerCustomOption('category', 'Date and Time', $types['datetime']);\n        static::registerCustomOption('category', 'Lists', $types['lists']);\n        static::registerCustomOption('category', 'Binary', $types['binary']);\n        static::registerCustomOption('category', 'Geometry', $types['geometry']);\n        static::registerCustomOption('category', 'Network', $types['network']);\n        static::registerCustomOption('category', 'Objects', $types['objects']);\n    }\n\n    public static function getAllTypes()\n    {\n        if (static::$allTypes) {\n            return static::$allTypes;\n        }\n\n        static::$allTypes = collect(static::getTypeCategories())->flatten();\n\n        return static::$allTypes;\n    }\n\n    public static function getTypeCategories()\n    {\n        if (static::$typeCategories) {\n            return static::$typeCategories;\n        }\n\n        $numbers = [\n            'boolean',\n            'tinyint',\n            'smallint',\n            'mediumint',\n            'integer',\n            'int',\n            'bigint',\n            'decimal',\n            'numeric',\n            'money',\n            'float',\n            'real',\n            'double',\n            'double precision',\n        ];\n\n        $strings = [\n            'char',\n            'character',\n            'varchar',\n            'character varying',\n            'string',\n            'guid',\n            'uuid',\n            'tinytext',\n            'text',\n            'mediumtext',\n            'longtext',\n            'tsquery',\n            'tsvector',\n            'xml',\n        ];\n\n        $datetime = [\n            'date',\n            'datetime',\n            'year',\n            'time',\n            'timetz',\n            'timestamp',\n            'timestamptz',\n            'datetimetz',\n            'dateinterval',\n            'interval',\n        ];\n\n        $lists = [\n            'enum',\n            'set',\n            'simple_array',\n            'array',\n            'json',\n            'jsonb',\n            'json_array',\n        ];\n\n        $binary = [\n            'bit',\n            'bit varying',\n            'binary',\n            'varbinary',\n            'tinyblob',\n            'blob',\n            'mediumblob',\n            'longblob',\n            'bytea',\n        ];\n\n        $network = [\n            'cidr',\n            'inet',\n            'macaddr',\n            'txid_snapshot',\n        ];\n\n        $geometry = [\n            'geometry',\n            'point',\n            'linestring',\n            'polygon',\n            'multipoint',\n            'multilinestring',\n            'multipolygon',\n            'geometrycollection',\n        ];\n\n        $objects = [\n            'object',\n        ];\n\n        static::$typeCategories = [\n            'numbers'  => $numbers,\n            'strings'  => $strings,\n            'datetime' => $datetime,\n            'lists'    => $lists,\n            'binary'   => $binary,\n            'network'  => $network,\n            'geometry' => $geometry,\n            'objects'  => $objects,\n        ];\n\n        return static::$typeCategories;\n    }\n}\n"
  },
  {
    "path": "src/Events/AlertsCollection.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\n\nclass AlertsCollection\n{\n    use SerializesModels;\n\n    public $collection;\n\n    public function __construct(array $collection)\n    {\n        $this->collection = $collection;\n\n        // @deprecate\n        //\n        event('voyager.alerts.collecting', $collection);\n    }\n}\n"
  },
  {
    "path": "src/Events/BreadAdded.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\nuse TCG\\Voyager\\Models\\DataType;\n\nclass BreadAdded\n{\n    use SerializesModels;\n\n    public $dataType;\n\n    public $data;\n\n    public function __construct(DataType $dataType, $data)\n    {\n        $this->dataType = $dataType;\n\n        $this->data = $data;\n\n        event(new BreadChanged($dataType, $data, 'Added'));\n    }\n}\n"
  },
  {
    "path": "src/Events/BreadChanged.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\nuse TCG\\Voyager\\Models\\DataType;\n\nclass BreadChanged\n{\n    use SerializesModels;\n\n    public $dataType;\n\n    public $data;\n\n    public $changeType;\n\n    public function __construct(DataType $dataType, $data, $changeType)\n    {\n        $this->dataType = $dataType;\n\n        $this->data = $data;\n\n        $this->changeType = $changeType;\n    }\n}\n"
  },
  {
    "path": "src/Events/BreadDataAdded.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\nuse TCG\\Voyager\\Models\\DataType;\n\nclass BreadDataAdded\n{\n    use SerializesModels;\n\n    public $dataType;\n\n    public $data;\n\n    public function __construct(DataType $dataType, $data)\n    {\n        $this->dataType = $dataType;\n\n        $this->data = $data;\n\n        event(new BreadDataChanged($dataType, $data, 'Added'));\n    }\n}\n"
  },
  {
    "path": "src/Events/BreadDataChanged.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\nuse TCG\\Voyager\\Models\\DataType;\n\nclass BreadDataChanged\n{\n    use SerializesModels;\n\n    public $dataType;\n\n    public $data;\n\n    public $changeType;\n\n    public function __construct(DataType $dataType, $data, $changeType)\n    {\n        $this->dataType = $dataType;\n\n        $this->data = $data;\n\n        $this->changeType = $changeType;\n    }\n}\n"
  },
  {
    "path": "src/Events/BreadDataDeleted.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\nuse TCG\\Voyager\\Models\\DataType;\n\nclass BreadDataDeleted\n{\n    use SerializesModels;\n\n    public $dataType;\n\n    public $data;\n\n    public function __construct(DataType $dataType, $data)\n    {\n        $this->dataType = $dataType;\n\n        $this->data = $data;\n\n        event(new BreadDataChanged($dataType, $data, 'Deleted'));\n    }\n}\n"
  },
  {
    "path": "src/Events/BreadDataRestored.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\nuse TCG\\Voyager\\Models\\DataType;\n\nclass BreadDataRestored\n{\n    use SerializesModels;\n\n    public $dataType;\n\n    public $data;\n\n    public function __construct(DataType $dataType, $data)\n    {\n        $this->dataType = $dataType;\n\n        $this->data = $data;\n\n        event(new BreadDataChanged($dataType, $data, 'Restored'));\n    }\n}\n"
  },
  {
    "path": "src/Events/BreadDataUpdated.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\nuse TCG\\Voyager\\Models\\DataType;\n\nclass BreadDataUpdated\n{\n    use SerializesModels;\n\n    public $dataType;\n\n    public $data;\n\n    public function __construct(DataType $dataType, $data)\n    {\n        $this->dataType = $dataType;\n\n        $this->data = $data;\n\n        event(new BreadDataChanged($dataType, $data, 'Updated'));\n    }\n}\n"
  },
  {
    "path": "src/Events/BreadDeleted.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\nuse TCG\\Voyager\\Models\\DataType;\n\nclass BreadDeleted\n{\n    use SerializesModels;\n\n    public $dataType;\n\n    public $data;\n\n    public function __construct(DataType $dataType, $data)\n    {\n        $this->dataType = $dataType;\n\n        $this->data = $data;\n\n        event(new BreadChanged($dataType, $data, 'Deleted'));\n    }\n}\n"
  },
  {
    "path": "src/Events/BreadImagesDeleted.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\n\nclass BreadImagesDeleted\n{\n    use SerializesModels;\n\n    public $data;\n\n    public $images;\n\n    public function __construct($data, $images)\n    {\n        $this->data = $data;\n\n        $this->images = $images;\n    }\n}\n"
  },
  {
    "path": "src/Events/BreadUpdated.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\nuse TCG\\Voyager\\Models\\DataType;\n\nclass BreadUpdated\n{\n    use SerializesModels;\n\n    public $dataType;\n\n    public $data;\n\n    public function __construct(DataType $dataType, $data)\n    {\n        $this->dataType = $dataType;\n\n        $this->data = $data;\n\n        event(new BreadChanged($dataType, $data, 'Updated'));\n    }\n}\n"
  },
  {
    "path": "src/Events/FileDeleted.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nclass FileDeleted\n{\n    public $path;\n\n    public function __construct($path)\n    {\n        $this->path = $path;\n    }\n}\n"
  },
  {
    "path": "src/Events/FormFieldsRegistered.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\n\nclass FormFieldsRegistered\n{\n    use SerializesModels;\n\n    public $fields;\n\n    public function __construct(array $fields)\n    {\n        $this->fields = $fields;\n\n        // @deprecate\n        //\n        event('voyager.form-fields.registered', $fields);\n    }\n}\n"
  },
  {
    "path": "src/Events/MediaFileAdded.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\n\nclass MediaFileAdded\n{\n    use SerializesModels;\n\n    public $path;\n\n    public function __construct($path)\n    {\n        $this->path = $path;\n    }\n}\n"
  },
  {
    "path": "src/Events/MenuDisplay.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\nuse TCG\\Voyager\\Models\\Menu;\n\nclass MenuDisplay\n{\n    use SerializesModels;\n\n    public $menu;\n\n    public function __construct(Menu $menu)\n    {\n        $this->menu = $menu;\n\n        // @deprecate\n        //\n        event('voyager.menu.display', $menu);\n    }\n}\n"
  },
  {
    "path": "src/Events/Routing.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\n\nclass Routing\n{\n    use SerializesModels;\n\n    public $router;\n\n    public function __construct()\n    {\n        $this->router = app('router');\n\n        // @deprecate\n        //\n        event('voyager.routing', $this->router);\n    }\n}\n"
  },
  {
    "path": "src/Events/RoutingAdmin.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\n\nclass RoutingAdmin\n{\n    use SerializesModels;\n\n    public $router;\n\n    public function __construct()\n    {\n        $this->router = app('router');\n\n        // @deprecate\n        //\n        event('voyager.admin.routing', $this->router);\n    }\n}\n"
  },
  {
    "path": "src/Events/RoutingAdminAfter.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\n\nclass RoutingAdminAfter\n{\n    use SerializesModels;\n\n    public $router;\n\n    public function __construct()\n    {\n        $this->router = app('router');\n\n        // @deprecate\n        //\n        event('voyager.admin.routing.after', $this->router);\n    }\n}\n"
  },
  {
    "path": "src/Events/RoutingAfter.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\n\nclass RoutingAfter\n{\n    use SerializesModels;\n\n    public $router;\n\n    public function __construct()\n    {\n        $this->router = app('router');\n\n        // @deprecate\n        //\n        event('voyager.routing.after', $this->router);\n    }\n}\n"
  },
  {
    "path": "src/Events/SettingUpdated.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\nuse TCG\\Voyager\\Models\\Setting;\n\nclass SettingUpdated\n{\n    use SerializesModels;\n\n    public $setting;\n\n    public function __construct(Setting $setting)\n    {\n        $this->setting = $setting;\n    }\n}\n"
  },
  {
    "path": "src/Events/TableAdded.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\nuse TCG\\Voyager\\Database\\Schema\\Table;\n\nclass TableAdded\n{\n    use SerializesModels;\n\n    public $table;\n\n    public function __construct(Table $table)\n    {\n        $this->table = $table;\n\n        event(new TableChanged($table->name, 'Added'));\n    }\n}\n"
  },
  {
    "path": "src/Events/TableChanged.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\n\nclass TableChanged\n{\n    use SerializesModels;\n\n    public $name;\n\n    public function __construct($name)\n    {\n        $this->name = $name;\n    }\n}\n"
  },
  {
    "path": "src/Events/TableDeleted.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\n\nclass TableDeleted\n{\n    use SerializesModels;\n\n    public $name;\n\n    public function __construct($name)\n    {\n        $this->name = $name;\n\n        event(new TableChanged($name, 'Deleted'));\n    }\n}\n"
  },
  {
    "path": "src/Events/TableUpdated.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Events;\n\nuse Illuminate\\Queue\\SerializesModels;\n\nclass TableUpdated\n{\n    use SerializesModels;\n\n    public $name;\n\n    public function __construct(array $name)\n    {\n        $this->name = $name;\n\n        event(new TableChanged($name['name'], 'Updated'));\n    }\n}\n"
  },
  {
    "path": "src/Facades/Voyager.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Facades;\n\nuse Illuminate\\Support\\Facades\\Facade;\n\nclass Voyager extends Facade\n{\n    /**\n     * Get the registered name of the component.\n     *\n     * @method static string image($file, $default = '')\n     * @method static $this useModel($name, $object)\n     *\n     * @see \\TCG\\Voyager\\Voyager\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'voyager';\n    }\n}\n"
  },
  {
    "path": "src/FormFields/AbstractHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nuse Illuminate\\Support\\Str;\nuse TCG\\Voyager\\Traits\\Renderable;\n\nabstract class AbstractHandler implements HandlerInterface\n{\n    use Renderable;\n\n    protected $name;\n    protected $codename;\n    protected $supports = [];\n\n    public function handle($row, $dataType, $dataTypeContent)\n    {\n        $content = $this->createContent(\n            $row,\n            $dataType,\n            $dataTypeContent,\n            $row->details\n        );\n\n        return $this->render($content);\n    }\n\n    public function supports($driver)\n    {\n        if (empty($this->supports)) {\n            return true;\n        }\n\n        return in_array($driver, $this->supports);\n    }\n\n    public function getCodename()\n    {\n        if (empty($this->codename)) {\n            $name = class_basename($this);\n\n            if (Str::endsWith($name, 'Handler')) {\n                $name = substr($name, 0, -strlen('Handler'));\n            }\n\n            $this->codename = Str::snake($name);\n        }\n\n        return $this->codename;\n    }\n\n    public function getName()\n    {\n        if (empty($this->name)) {\n            $this->name = ucwords(str_replace('_', ' ', $this->getCodename()));\n        }\n\n        return $this->name;\n    }\n}\n"
  },
  {
    "path": "src/FormFields/After/AbstractHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields\\After;\n\nuse TCG\\Voyager\\Traits\\Renderable;\n\nabstract class AbstractHandler implements HandlerInterface\n{\n    use Renderable;\n\n    public function visible($row, $dataType, $dataTypeContent, $options)\n    {\n        return true;\n    }\n\n    public function handle($row, $dataType, $dataTypeContent)\n    {\n        $content = $this->createContent(\n            $row,\n            $dataType,\n            $dataTypeContent,\n            $row->details\n        );\n\n        return $this->render($content);\n    }\n\n    public function getCodename()\n    {\n        return $this->codename;\n    }\n}\n"
  },
  {
    "path": "src/FormFields/After/DescriptionHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields\\After;\n\nclass DescriptionHandler extends AbstractHandler\n{\n    protected $codename = 'description';\n\n    public function visible($row, $dataType, $dataTypeContent, $options)\n    {\n        if (!isset($options->description)) {\n            return false;\n        }\n\n        return !empty($options->description);\n    }\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return '<span class=\"glyphicon glyphicon-question-sign\"\n                                        aria-hidden=\"true\"\n                                        data-toggle=\"tooltip\"\n                                        data-placement=\"right\"\n                                        data-html=\"true\"\n                                        title=\"'.$options->description.'\"></span>';\n    }\n}\n"
  },
  {
    "path": "src/FormFields/After/HandlerInterface.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields\\After;\n\ninterface HandlerInterface\n{\n    public function visible($row, $dataType, $dataTypeContent, $options);\n\n    public function handle($row, $dataType, $dataTypeContent);\n\n    public function getCodename();\n\n    public function createContent($row, $dataType, $dataTypeContent, $options);\n}\n"
  },
  {
    "path": "src/FormFields/CheckboxHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass CheckboxHandler extends AbstractHandler\n{\n    protected $codename = 'checkbox';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.checkbox', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/CodeEditorHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass CodeEditorHandler extends AbstractHandler\n{\n    protected $codename = 'code_editor';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.code_editor', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/ColorHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass ColorHandler extends AbstractHandler\n{\n    protected $codename = 'color';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.color', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/CoordinatesHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass CoordinatesHandler extends AbstractHandler\n{\n    protected $supports = [\n        'mysql',\n        'pgsql',\n    ];\n\n    protected $codename = 'coordinates';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.coordinates', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/DateHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass DateHandler extends AbstractHandler\n{\n    protected $codename = 'date';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.date', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/FileHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass FileHandler extends AbstractHandler\n{\n    protected $codename = 'file';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.file', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/HandlerInterface.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\ninterface HandlerInterface\n{\n    public function handle($row, $dataType, $dataTypeContent);\n\n    public function createContent($row, $dataType, $dataTypeContent, $options);\n\n    public function supports($driver);\n\n    public function getCodename();\n\n    public function getName();\n}\n"
  },
  {
    "path": "src/FormFields/HiddenHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass HiddenHandler extends AbstractHandler\n{\n    protected $codename = 'hidden';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.hidden', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/ImageHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass ImageHandler extends AbstractHandler\n{\n    protected $codename = 'image';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.image', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/MarkdownEditorHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass MarkdownEditorHandler extends AbstractHandler\n{\n    protected $codename = 'markdown_editor';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.markdown_editor', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/MediaPickerHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Str;\n\nclass MediaPickerHandler extends AbstractHandler\n{\n    protected $codename = 'media_picker';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        $content = '';\n        if (isset($options->max) && $options->max > 1) {\n            if (is_array($dataTypeContent->{$row->field})) {\n                $dataTypeContent->{$row->field} = json_encode($dataTypeContent->{$row->field});\n            }\n            json_decode($dataTypeContent->{$row->field});\n            if (json_last_error() == JSON_ERROR_NONE) {\n                $content = json_encode($dataTypeContent->{$row->field});\n            } else {\n                $content = json_encode('[]');\n            }\n        } else {\n            $content = \"'\".$dataTypeContent->{$row->field}.\"'\";\n        }\n\n        if (isset($options->base_path)) {\n            $options->base_path = str_replace('{uid}', Auth::user()->getKey(), $options->base_path);\n            if (Str::contains($options->base_path, '{date:')) {\n                $options->base_path = preg_replace_callback('/\\{date:([^\\/\\}]*)\\}/', function ($date) {\n                    return \\Carbon\\Carbon::now()->format($date[1]);\n                }, $options->base_path);\n            }\n            if (Str::contains($options->base_path, '{random:')) {\n                $options->base_path = preg_replace_callback('/\\{random:([0-9]+)\\}/', function ($random) {\n                    return Str::random($random[1]);\n                }, $options->base_path);\n            }\n            if (!$dataTypeContent->getKey()) {\n                $uuid = (string) Str::uuid();\n                $options->base_path = str_replace('{pk}', $uuid, $options->base_path);\n                \\Session::put($dataType->slug.'_path', $options->base_path);\n                \\Session::put($dataType->slug.'_uuid', $uuid);\n            } else {\n                $options->base_path = str_replace('{pk}', $dataTypeContent->getKey(), $options->base_path);\n            }\n        }\n\n        return view('voyager::formfields.media_picker', [\n            'row'      => $row,\n            'options'  => $options,\n            'dataType' => $dataType,\n            'content'  => $content,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/MultipleCheckboxHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass MultipleCheckboxHandler extends AbstractHandler\n{\n    protected $codename = 'multiple_checkbox';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.multiple_checkbox', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/MultipleImagesHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass MultipleImagesHandler extends AbstractHandler\n{\n    protected $codename = 'multiple_images';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.multiple_images', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/NumberHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass NumberHandler extends AbstractHandler\n{\n    protected $codename = 'number';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.number', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/PasswordHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass PasswordHandler extends AbstractHandler\n{\n    protected $codename = 'password';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.password', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/RadioBtnHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass RadioBtnHandler extends AbstractHandler\n{\n    protected $name = 'Radio Button';\n    protected $codename = 'radio_btn';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.radio_btn', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/RichTextBoxHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass RichTextBoxHandler extends AbstractHandler\n{\n    protected $codename = 'rich_text_box';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.rich_text_box', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/SelectDropdownHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass SelectDropdownHandler extends AbstractHandler\n{\n    protected $codename = 'select_dropdown';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.select_dropdown', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/SelectMultipleHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass SelectMultipleHandler extends AbstractHandler\n{\n    protected $codename = 'select_multiple';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.select_multiple', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/TextAreaHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass TextAreaHandler extends AbstractHandler\n{\n    protected $codename = 'text_area';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.text_area', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/TextHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass TextHandler extends AbstractHandler\n{\n    protected $codename = 'text';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.text', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/TimeHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass TimeHandler extends AbstractHandler\n{\n    protected $codename = 'time';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.time', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/FormFields/TimestampHandler.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\FormFields;\n\nclass TimestampHandler extends AbstractHandler\n{\n    protected $codename = 'timestamp';\n\n    public function createContent($row, $dataType, $dataTypeContent, $options)\n    {\n        return view('voyager::formfields.timestamp', [\n            'row'             => $row,\n            'options'         => $options,\n            'dataType'        => $dataType,\n            'dataTypeContent' => $dataTypeContent,\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/Helpers/Reflection.php",
    "content": "<?php\n\nif (!function_exists('get_reflection_method')) {\n    function get_reflection_method($object, $method)\n    {\n        $reflectionMethod = new \\ReflectionMethod($object, $method);\n        $reflectionMethod->setAccessible(true);\n\n        return $reflectionMethod;\n    }\n}\n\nif (!function_exists('call_protected_method')) {\n    function call_protected_method($object, $method, ...$args)\n    {\n        return get_reflection_method($object, $method)->invoke($object, ...$args);\n    }\n}\n\nif (!function_exists('get_reflection_property')) {\n    function get_reflection_property($object, $property)\n    {\n        $reflectionProperty = new \\ReflectionProperty($object, $property);\n        $reflectionProperty->setAccessible(true);\n\n        return $reflectionProperty;\n    }\n}\n\nif (!function_exists('get_protected_property')) {\n    function get_protected_property($object, $property)\n    {\n        return get_reflection_property($object, $property)->getValue($object);\n    }\n}\n"
  },
  {
    "path": "src/Helpers/helperSlugify.php",
    "content": "<?php\n\nif (!function_exists('isBreadSlugAutoGenerator')) {\n    /**\n     * Check if a field slug can be auto generated.\n     *\n     * @param json $options\n     *\n     * @return string HTML output.\n     */\n    function isBreadSlugAutoGenerator($options)\n    {\n        if (isset($options->slugify)) {\n            return ' data-slug-origin='.$options->slugify->origin\n                   .((isset($options->slugify->forceUpdate))\n                      ? ' data-slug-forceupdate=true'\n                      : '');\n        }\n    }\n}\n\nif (!function_exists('isFieldSlugAutoGenerator')) {\n    /**\n     * Determine the details field, for a given dataTypeContent.\n     *\n     * @param Illuminate\\Database\\Eloquent\\Collection $dType    Data type\n     * @param Illuminate\\Database\\Eloquent\\Collection $dContent Data type Content\n     * @param string                                  $field    Field name\n     *\n     * @return string HTML output.\n     */\n    function isFieldSlugAutoGenerator($dType, $dContent, $field)\n    {\n        $_row = (isset($dContent->id))\n                    ? $dType->editRows\n                    : $dType->addRows;\n\n        $_row = $_row->where('field', $field)->first();\n\n        if (!$_row) {\n            return;\n        }\n\n        return isBreadSlugAutoGenerator($_row->details);\n    }\n}\n"
  },
  {
    "path": "src/Helpers/helperTranslations.php",
    "content": "<?php\n\nif (!function_exists('is_field_translatable')) {\n    /**\n     * Check if a Field is translatable.\n     *\n     * @param Illuminate\\Database\\Eloquent\\Model      $model\n     * @param Illuminate\\Database\\Eloquent\\Collection $row\n     */\n    function is_field_translatable($model, $row)\n    {\n        if (!is_bread_translatable($model)) {\n            return;\n        }\n\n        return $model->translatable()\n            && method_exists($model, 'getTranslatableAttributes')\n            && in_array($row->field, $model->getTranslatableAttributes());\n    }\n}\n\nif (!function_exists('get_field_translations')) {\n    /**\n     * Return all field translations.\n     *\n     * @param Illuminate\\Database\\Eloquent\\Model $model\n     * @param string                             $field\n     * @param string                             $rowType\n     * @param bool                               $stripHtmlTags\n     */\n    function get_field_translations($model, $field, $rowType = '', $stripHtmlTags = false)\n    {\n        $_out = $model->getTranslationsOf($field);\n\n        if ($stripHtmlTags && $rowType == 'rich_text_box') {\n            foreach ($_out as $language => $value) {\n                $_out[$language] = strip_tags($_out[$language]);\n            }\n        }\n\n        return json_encode($_out);\n    }\n}\n\nif (!function_exists('is_bread_translatable')) {\n    /**\n     * Check if BREAD is translatable.\n     *\n     * @param Illuminate\\Database\\Eloquent\\Model $model\n     */\n    function is_bread_translatable($model)\n    {\n        return config('voyager.multilingual.enabled')\n            && isset($model)\n            && method_exists($model, 'translatable')\n            && $model->translatable();\n    }\n}\n"
  },
  {
    "path": "src/Helpers/helpers.php",
    "content": "<?php\n\nif (!function_exists('setting')) {\n    function setting($key, $default = null)\n    {\n        return TCG\\Voyager\\Facades\\Voyager::setting($key, $default);\n    }\n}\n\nif (!function_exists('menu')) {\n    function menu($menuName, $type = null, array $options = [])\n    {\n        return TCG\\Voyager\\Facades\\Voyager::model('Menu')->display($menuName, $type, $options);\n    }\n}\n\nif (!function_exists('voyager_asset')) {\n    function voyager_asset($path, $secure = null)\n    {\n        return route('voyager.voyager_assets').'?path='.urlencode($path);\n    }\n}\n\nif (!function_exists('get_file_name')) {\n    function get_file_name($name)\n    {\n        preg_match('/(_)([0-9])+$/', $name, $matches);\n        if (count($matches) == 3) {\n            return Illuminate\\Support\\Str::replaceLast($matches[0], '', $name).'_'.(intval($matches[2]) + 1);\n        } else {\n            return $name.'_1';\n        }\n    }\n}\n"
  },
  {
    "path": "src/Helpers/helpersi18n.php",
    "content": "<?php\n\nif (!function_exists('__')) {\n    function __($key, array $par = [])\n    {\n        return trans($key, $par);\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/ContentTypes/BaseType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\ContentTypes;\n\nuse Illuminate\\Http\\Request;\n\nabstract class BaseType\n{\n    /**\n     * @var Request\n     */\n    protected $request;\n\n    /**\n     * @var\n     */\n    protected $slug;\n\n    /**\n     * @var\n     */\n    protected $row;\n\n    /**\n     * @var\n     */\n    protected $options;\n\n    /**\n     * Password constructor.\n     *\n     * @param Request $request\n     * @param $slug\n     * @param $row\n     */\n    public function __construct(Request $request, $slug, $row, $options)\n    {\n        $this->request = $request;\n        $this->slug = $slug;\n        $this->row = $row;\n        $this->options = $options;\n    }\n\n    /**\n     * @return mixed\n     */\n    abstract public function handle();\n}\n"
  },
  {
    "path": "src/Http/Controllers/ContentTypes/Checkbox.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\ContentTypes;\n\nclass Checkbox extends BaseType\n{\n    /**\n     * @return int\n     */\n    public function handle()\n    {\n        return (int) ($this->request->input($this->row->field) == 'on');\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/ContentTypes/Coordinates.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\ContentTypes;\n\nuse Illuminate\\Support\\Facades\\DB;\n\nclass Coordinates extends BaseType\n{\n    /**\n     * @return string|\\Illuminate\\Database\\Query\\Expression\n     */\n    public function handle()\n    {\n        if (empty($coordinates = $this->request->input($this->row->field))) {\n            return;\n        }\n        //DB::connection()->getPdo()->quote won't work as it quotes the\n        // lat/lng, which leads to wrong Geometry type in POINT() MySQL constructor\n        $lat = (float) $coordinates['lat'];\n        $lng = (float) $coordinates['lng'];\n\n        return DB::raw(\"ST_GeomFromText('POINT({$lng} {$lat})')\");\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/ContentTypes/File.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\ContentTypes;\n\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\n\nclass File extends BaseType\n{\n    /**\n     * @return string\n     */\n    public function handle()\n    {\n        if (!$this->request->hasFile($this->row->field)) {\n            return;\n        }\n\n        $files = Arr::wrap($this->request->file($this->row->field));\n\n        $filesPath = [];\n        $path = $this->generatePath();\n\n        foreach ($files as $file) {\n            $filename = $this->generateFileName($file, $path);\n            $file->storeAs(\n                $path,\n                $filename.'.'.$file->getClientOriginalExtension(),\n                config('voyager.storage.disk', 'public')\n            );\n\n            array_push($filesPath, [\n                'download_link' => $path.$filename.'.'.$file->getClientOriginalExtension(),\n                'original_name' => $file->getClientOriginalName(),\n            ]);\n        }\n\n        return json_encode($filesPath);\n    }\n\n    /**\n     * @return string\n     */\n    protected function generatePath()\n    {\n        return $this->slug.DIRECTORY_SEPARATOR.date('FY').DIRECTORY_SEPARATOR;\n    }\n\n    /**\n     * @return string\n     */\n    protected function generateFileName($file, $path)\n    {\n        if (isset($this->options->preserveFileUploadName) && $this->options->preserveFileUploadName) {\n            $filename = basename($file->getClientOriginalName(), '.'.$file->getClientOriginalExtension());\n            $filename_counter = 1;\n\n            // Make sure the filename does not exist, if it does make sure to add a number to the end 1, 2, 3, etc...\n            while (Storage::disk(config('voyager.storage.disk'))->exists($path.$filename.'.'.$file->getClientOriginalExtension())) {\n                $filename = basename($file->getClientOriginalName(), '.'.$file->getClientOriginalExtension()).(string) ($filename_counter++);\n            }\n        } else {\n            $filename = Str::random(20);\n\n            // Make sure the filename does not exist, if it does, just regenerate\n            while (Storage::disk(config('voyager.storage.disk'))->exists($path.$filename.'.'.$file->getClientOriginalExtension())) {\n                $filename = Str::random(20);\n            }\n        }\n\n        return $filename;\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/ContentTypes/Image.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\ContentTypes;\n\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\nuse Intervention\\Image\\Constraint;\nuse Intervention\\Image\\Facades\\Image as InterventionImage;\n\nclass Image extends BaseType\n{\n    public function handle()\n    {\n        if ($this->request->hasFile($this->row->field)) {\n            $file = $this->request->file($this->row->field);\n\n            $path = $this->slug.DIRECTORY_SEPARATOR.date('FY').DIRECTORY_SEPARATOR;\n\n            $filename = $this->generateFileName($file, $path);\n\n            $image = InterventionImage::make($file)->orientate();\n\n            $fullPath = $path.$filename.'.'.$file->getClientOriginalExtension();\n\n            $resize_width = null;\n            $resize_height = null;\n            if (isset($this->options->resize) && (\n                isset($this->options->resize->width) || isset($this->options->resize->height)\n            )) {\n                if (isset($this->options->resize->width)) {\n                    $resize_width = $this->options->resize->width;\n                }\n                if (isset($this->options->resize->height)) {\n                    $resize_height = $this->options->resize->height;\n                }\n            } else {\n                $resize_width = $image->width();\n                $resize_height = $image->height();\n            }\n\n            $resize_quality = isset($this->options->quality) ? intval($this->options->quality) : 75;\n\n            $image = $image->resize(\n                $resize_width,\n                $resize_height,\n                function (Constraint $constraint) {\n                    $constraint->aspectRatio();\n                    if (isset($this->options->upsize) && !$this->options->upsize) {\n                        $constraint->upsize();\n                    }\n                }\n            )->encode($file->getClientOriginalExtension(), $resize_quality);\n\n            if ($this->is_animated_gif($file)) {\n                Storage::disk(config('voyager.storage.disk'))->put($fullPath, file_get_contents($file), 'public');\n                $fullPathStatic = $path.$filename.'-static.'.$file->getClientOriginalExtension();\n                Storage::disk(config('voyager.storage.disk'))->put($fullPathStatic, (string) $image, 'public');\n            } else {\n                Storage::disk(config('voyager.storage.disk'))->put($fullPath, (string) $image, 'public');\n            }\n\n            if (isset($this->options->thumbnails)) {\n                foreach ($this->options->thumbnails as $thumbnails) {\n                    if (isset($thumbnails->name) && isset($thumbnails->scale)) {\n                        $scale = intval($thumbnails->scale) / 100;\n                        $thumb_resize_width = $resize_width;\n                        $thumb_resize_height = $resize_height;\n\n                        if ($thumb_resize_width != null && $thumb_resize_width != 'null') {\n                            $thumb_resize_width = intval($thumb_resize_width * $scale);\n                        }\n\n                        if ($thumb_resize_height != null && $thumb_resize_height != 'null') {\n                            $thumb_resize_height = intval($thumb_resize_height * $scale);\n                        }\n\n                        $image = InterventionImage::make($file)\n                            ->orientate()\n                            ->resize(\n                                $thumb_resize_width,\n                                $thumb_resize_height,\n                                function (Constraint $constraint) {\n                                    $constraint->aspectRatio();\n                                    if (isset($this->options->upsize) && !$this->options->upsize) {\n                                        $constraint->upsize();\n                                    }\n                                }\n                            )->encode($file->getClientOriginalExtension(), $resize_quality);\n                    } elseif (isset($thumbnails->crop->width) && isset($thumbnails->crop->height)) {\n                        $crop_width = $thumbnails->crop->width;\n                        $crop_height = $thumbnails->crop->height;\n                        $image = InterventionImage::make($file)\n                            ->orientate()\n                            ->fit($crop_width, $crop_height)\n                            ->encode($file->getClientOriginalExtension(), $resize_quality);\n                    }\n\n                    Storage::disk(config('voyager.storage.disk'))->put(\n                        $path.$filename.'-'.$thumbnails->name.'.'.$file->getClientOriginalExtension(),\n                        (string) $image,\n                        'public'\n                    );\n                }\n            }\n\n            return $fullPath;\n        }\n    }\n\n    /**\n     * @param \\Illuminate\\Http\\UploadedFile $file\n     * @param $path\n     *\n     * @return string\n     */\n    protected function generateFileName($file, $path)\n    {\n        if (isset($this->options->preserveFileUploadName) && $this->options->preserveFileUploadName) {\n            $filename = basename($file->getClientOriginalName(), '.'.$file->getClientOriginalExtension());\n            $filename_counter = 1;\n\n            // Make sure the filename does not exist, if it does make sure to add a number to the end 1, 2, 3, etc...\n            while (Storage::disk(config('voyager.storage.disk'))->exists($path.$filename.'.'.$file->getClientOriginalExtension())) {\n                $filename = basename($file->getClientOriginalName(), '.'.$file->getClientOriginalExtension()).(string) ($filename_counter++);\n            }\n        } else {\n            $filename = Str::random(20);\n\n            // Make sure the filename does not exist, if it does, just regenerate\n            while (Storage::disk(config('voyager.storage.disk'))->exists($path.$filename.'.'.$file->getClientOriginalExtension())) {\n                $filename = Str::random(20);\n            }\n        }\n\n        return $filename;\n    }\n\n    private function is_animated_gif($filename)\n    {\n        $raw = file_get_contents($filename);\n\n        $offset = 0;\n        $frames = 0;\n        while ($frames < 2) {\n            $where1 = strpos($raw, \"\\x00\\x21\\xF9\\x04\", $offset);\n            if ($where1 === false) {\n                break;\n            } else {\n                $offset = $where1 + 1;\n                $where2 = strpos($raw, \"\\x00\\x2C\", $offset);\n                if ($where2 === false) {\n                    break;\n                } else {\n                    if ($where1 + 8 == $where2) {\n                        $frames++;\n                    }\n                    $offset = $where2 + 1;\n                }\n            }\n        }\n\n        return $frames > 1;\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/ContentTypes/MultipleCheckbox.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\ContentTypes;\n\nclass MultipleCheckbox extends BaseType\n{\n    /**\n     * @return mixed\n     */\n    public function handle()\n    {\n        $content = $this->request->input($this->row->field, []);\n        if (true === empty($content)) {\n            return json_encode([]);\n        }\n\n        return json_encode($content);\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/ContentTypes/MultipleImage.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\ContentTypes;\n\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\nuse Intervention\\Image\\Constraint;\nuse Intervention\\Image\\Facades\\Image as InterventionImage;\n\nclass MultipleImage extends BaseType\n{\n    /**\n     * @return string\n     */\n    public function handle()\n    {\n        $filesPath = [];\n        $files = $this->request->file($this->row->field);\n\n        if (!$files) {\n            return;\n        }\n\n        foreach ($files as $file) {\n            if (!$file->isValid()) {\n                continue;\n            }\n\n            $image = InterventionImage::make($file)->orientate();\n\n            $resize_width = null;\n            $resize_height = null;\n\n            if (isset($this->options->resize) && (\n                isset($this->options->resize->width) || isset($this->options->resize->height)\n            )) {\n                if (isset($this->options->resize->width)) {\n                    $resize_width = $this->options->resize->width;\n                }\n                if (isset($this->options->resize->height)) {\n                    $resize_height = $this->options->resize->height;\n                }\n            } else {\n                $resize_width = $image->width();\n                $resize_height = $image->height();\n            }\n\n            $resize_quality = intval($this->options->quality ?? 75);\n\n            $filename = Str::random(20);\n            $path = $this->slug.DIRECTORY_SEPARATOR.date('FY').DIRECTORY_SEPARATOR;\n            array_push($filesPath, $path.$filename.'.'.$file->getClientOriginalExtension());\n            $filePath = $path.$filename.'.'.$file->getClientOriginalExtension();\n\n            $image = $image->resize(\n                $resize_width,\n                $resize_height,\n                function (Constraint $constraint) {\n                    $constraint->aspectRatio();\n                    if (isset($this->options->upsize) && !$this->options->upsize) {\n                        $constraint->upsize();\n                    }\n                }\n            )->encode($file->getClientOriginalExtension(), $resize_quality);\n\n            Storage::disk(config('voyager.storage.disk'))->put($filePath, (string) $image, 'public');\n\n            if (isset($this->options->thumbnails)) {\n                foreach ($this->options->thumbnails as $thumbnails) {\n                    if (isset($thumbnails->name) && isset($thumbnails->scale)) {\n                        $scale = intval($thumbnails->scale) / 100;\n                        $thumb_resize_width = $resize_width;\n                        $thumb_resize_height = $resize_height;\n\n                        if ($thumb_resize_width != null && $thumb_resize_width != 'null') {\n                            $thumb_resize_width = $thumb_resize_width * $scale;\n                        }\n\n                        if ($thumb_resize_height != null && $thumb_resize_height != 'null') {\n                            $thumb_resize_height = $thumb_resize_height * $scale;\n                        }\n\n                        $image = InterventionImage::make($file)\n                            ->orientate()\n                            ->resize(\n                                $thumb_resize_width,\n                                $thumb_resize_height,\n                                function (Constraint $constraint) {\n                                    $constraint->aspectRatio();\n                                    if (isset($this->options->upsize) && !$this->options->upsize) {\n                                        $constraint->upsize();\n                                    }\n                                }\n                            )->encode($file->getClientOriginalExtension(), $resize_quality);\n                    } elseif (isset($this->options->thumbnails) && isset($thumbnails->crop->width) && isset($thumbnails->crop->height)) {\n                        $crop_width = $thumbnails->crop->width;\n                        $crop_height = $thumbnails->crop->height;\n                        $image = InterventionImage::make($file)\n                            ->orientate()\n                            ->fit($crop_width, $crop_height)\n                            ->encode($file->getClientOriginalExtension(), $resize_quality);\n                    }\n\n                    Storage::disk(config('voyager.storage.disk'))->put(\n                        $path.$filename.'-'.$thumbnails->name.'.'.$file->getClientOriginalExtension(),\n                        (string) $image,\n                        'public'\n                    );\n                }\n            }\n        }\n\n        return json_encode($filesPath);\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/ContentTypes/Password.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\ContentTypes;\n\nclass Password extends BaseType\n{\n    /**\n     * Handle password fields.\n     *\n     * @return string\n     */\n    public function handle()\n    {\n        return empty($this->request->input($this->row->field)) ? null :\n            bcrypt($this->request->input($this->row->field));\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/ContentTypes/Relationship.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\ContentTypes;\n\nclass Relationship extends BaseType\n{\n    /**\n     * @return array\n     */\n    public function handle()\n    {\n        $content = $this->request->input($this->row->field);\n        if (is_array($content)) {\n            $content = array_filter($content, function ($value) {\n                return $value !== null;\n            });\n        }\n\n        return $content;\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/ContentTypes/SelectMultiple.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\ContentTypes;\n\nclass SelectMultiple extends BaseType\n{\n    public function handle()\n    {\n        $content = $this->request->input($this->row->field, []);\n\n        if (true === empty($content)) {\n            return json_encode([]);\n        }\n\n        // Check if we need to parse the editablePivotFields to update fields in the corresponding pivot table\n\n        if (isset($this->options->relationship) && !empty($this->options->relationship->editablePivotFields)) {\n            $pivotContent = [];\n            // Read all values for fields in pivot tables from the request\n            foreach ($this->options->relationship->editablePivotFields as $pivotField) {\n                if (!isset($pivotContent[$pivotField])) {\n                    $pivotContent[$pivotField] = [];\n                }\n                $pivotContent[$pivotField] = $this->request->input('pivot_'.$pivotField);\n            }\n            // Create a new content array for updating pivot table\n            $newContent = [];\n            foreach ($content as $contentIndex => $contentValue) {\n                $newContent[$contentValue] = [];\n                foreach ($pivotContent as $pivotContentKey => $value) {\n                    $newContent[$contentValue][$pivotContentKey] = $value[$contentIndex];\n                }\n            }\n            $content = $newContent;\n        }\n\n        return json_encode($content);\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/ContentTypes/Text.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\ContentTypes;\n\nclass Text extends BaseType\n{\n    /**\n     * @return null|string\n     */\n    public function handle()\n    {\n        $value = $this->request->input($this->row->field);\n\n        if (isset($this->options->null)) {\n            return $value == $this->options->null ? null : $value;\n        }\n\n        return $value;\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/ContentTypes/Timestamp.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\ContentTypes;\n\nuse Carbon\\Carbon;\n\nclass Timestamp extends BaseType\n{\n    public function handle()\n    {\n        if (!in_array($this->request->method(), ['PUT', 'POST'])) {\n            return;\n        }\n\n        $content = $this->request->input($this->row->field);\n\n        if (empty($content)) {\n            return;\n        }\n\n        return Carbon::parse($content);\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/Controller.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\nuse Illuminate\\Foundation\\Bus\\DispatchesJobs;\nuse Illuminate\\Foundation\\Validation\\ValidatesRequests;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\UploadedFile;\nuse Illuminate\\Routing\\Controller as BaseController;\nuse Illuminate\\Support\\Facades\\Storage;\nuse TCG\\Voyager\\Events\\FileDeleted;\nuse TCG\\Voyager\\Http\\Controllers\\ContentTypes\\Checkbox;\nuse TCG\\Voyager\\Http\\Controllers\\ContentTypes\\Coordinates;\nuse TCG\\Voyager\\Http\\Controllers\\ContentTypes\\File;\nuse TCG\\Voyager\\Http\\Controllers\\ContentTypes\\Image as ContentImage;\nuse TCG\\Voyager\\Http\\Controllers\\ContentTypes\\MultipleCheckbox;\nuse TCG\\Voyager\\Http\\Controllers\\ContentTypes\\MultipleImage;\nuse TCG\\Voyager\\Http\\Controllers\\ContentTypes\\Password;\nuse TCG\\Voyager\\Http\\Controllers\\ContentTypes\\Relationship;\nuse TCG\\Voyager\\Http\\Controllers\\ContentTypes\\SelectMultiple;\nuse TCG\\Voyager\\Http\\Controllers\\ContentTypes\\Text;\nuse TCG\\Voyager\\Http\\Controllers\\ContentTypes\\Timestamp;\nuse TCG\\Voyager\\Traits\\AlertsMessages;\nuse Validator;\n\nabstract class Controller extends BaseController\n{\n    use DispatchesJobs;\n    use ValidatesRequests;\n    use AuthorizesRequests;\n    use AlertsMessages;\n\n    public function getSlug(Request $request)\n    {\n        if (isset($this->slug)) {\n            $slug = $this->slug;\n        } else {\n            $slug = explode('.', $request->route()->getName())[1];\n        }\n\n        return $slug;\n    }\n\n    public function insertUpdateData($request, $slug, $rows, $data)\n    {\n        $multi_select = [];\n\n        // Pass $rows so that we avoid checking unused fields\n        $request->attributes->add(['breadRows' => $rows->pluck('field')->toArray()]);\n\n        /*\n         * Prepare Translations and Transform data\n         */\n        $translations = is_bread_translatable($data)\n                        ? $data->prepareTranslations($request)\n                        : [];\n\n        foreach ($rows as $row) {\n            // if the field for this row is absent from the request, continue\n            // checkboxes will be absent when unchecked, thus they are the exception\n            if (!$request->hasFile($row->field) && !$request->has($row->field) && $row->type !== 'checkbox') {\n                // if the field is a belongsToMany relationship, don't remove it\n                // if no content is provided, that means the relationships need to be removed\n                if (isset($row->details->type) && $row->details->type !== 'belongsToMany') {\n                    continue;\n                }\n            }\n\n            // Value is saved from $row->details->column row\n            if ($row->type == 'relationship' && $row->details->type == 'belongsTo') {\n                continue;\n            }\n\n            $content = $this->getContentBasedOnType($request, $slug, $row, $row->details);\n\n            if ($row->type == 'relationship' && $row->details->type != 'belongsToMany') {\n                $row->field = @$row->details->column;\n            }\n\n            /*\n             * merge ex_images/files and upload images/files\n             */\n            if (in_array($row->type, ['multiple_images', 'file']) && !is_null($content)) {\n                if (isset($data->{$row->field})) {\n                    $ex_files = json_decode($data->{$row->field}, true);\n                    if (!is_null($ex_files)) {\n                        $content = json_encode(array_merge($ex_files, json_decode($content)));\n                    }\n                }\n            }\n\n            if (is_null($content)) {\n\n                // If the image upload is null and it has a current image keep the current image\n                if ($row->type == 'image' && is_null($request->input($row->field)) && isset($data->{$row->field})) {\n                    $content = $data->{$row->field};\n                }\n\n                // If the multiple_images upload is null and it has a current image keep the current image\n                if ($row->type == 'multiple_images' && is_null($request->input($row->field)) && isset($data->{$row->field})) {\n                    $content = $data->{$row->field};\n                }\n\n                // If the file upload is null and it has a current file keep the current file\n                if ($row->type == 'file') {\n                    $content = $data->{$row->field};\n                    if (!$content) {\n                        $content = json_encode([]);\n                    }\n                }\n\n                if ($row->type == 'password') {\n                    $content = $data->{$row->field};\n                }\n            }\n\n            if ($row->type == 'relationship' && $row->details->type == 'belongsToMany') {\n                // Only if select_multiple is working with a relationship\n                $multi_select[] = [\n                    'model'           => $row->details->model,\n                    'content'         => $content,\n                    'table'           => $row->details->pivot_table,\n                    'foreignPivotKey' => $row->details->foreign_pivot_key ?? null,\n                    'relatedPivotKey' => $row->details->related_pivot_key ?? null,\n                    'parentKey'       => $row->details->parent_key ?? null,\n                    'relatedKey'      => $row->details->key,\n                ];\n            } else {\n                $data->{$row->field} = $content;\n            }\n        }\n\n        if (isset($data->additional_attributes)) {\n            foreach ($data->additional_attributes as $attr) {\n                if ($request->has($attr)) {\n                    $data->{$attr} = $request->{$attr};\n                }\n            }\n        }\n\n        $data->save();\n\n        // Save translations\n        if (count($translations) > 0) {\n            $data->saveTranslations($translations);\n        }\n\n        foreach ($multi_select as $sync_data) {\n            $data->belongsToMany(\n                $sync_data['model'],\n                $sync_data['table'],\n                $sync_data['foreignPivotKey'],\n                $sync_data['relatedPivotKey'],\n                $sync_data['parentKey'],\n                $sync_data['relatedKey']\n            )->sync($sync_data['content']);\n        }\n\n        // Rename folders for newly created data through media-picker\n        if ($request->session()->has($slug.'_path') || $request->session()->has($slug.'_uuid')) {\n            $old_path = $request->session()->get($slug.'_path');\n            $uuid = $request->session()->get($slug.'_uuid');\n            $new_path = str_replace($uuid, $data->getKey(), $old_path);\n            $folder_path = substr($old_path, 0, strpos($old_path, $uuid)).$uuid;\n\n            $rows->where('type', 'media_picker')->each(function ($row) use ($data, $uuid) {\n                $data->{$row->field} = str_replace($uuid, $data->getKey(), $data->{$row->field});\n            });\n            $data->save();\n            if ($old_path != $new_path && \n                !Storage::disk(config('voyager.storage.disk'))->exists($new_path) && \n                Storage::disk(config('voyager.storage.disk'))->exists($old_path)\n                ) \n            {\n                $request->session()->forget([$slug.'_path', $slug.'_uuid']);\n                Storage::disk(config('voyager.storage.disk'))->move($old_path, $new_path);\n                Storage::disk(config('voyager.storage.disk'))->deleteDirectory($folder_path);\n            }\n        }\n\n        return $data;\n    }\n\n    /**\n     * Validates bread POST request.\n     *\n     * @param array  $data The data\n     * @param array  $rows The rows\n     * @param string $slug Slug\n     * @param int    $id   Id of the record to update\n     *\n     * @return mixed\n     */\n    public function validateBread($data, $rows, $name = null, $id = null)\n    {\n        $rules = [];\n        $messages = [];\n        $customAttributes = [];\n        $is_update = $name && $id;\n\n        $fieldsWithValidationRules = $this->getFieldsWithValidationRules($rows);\n\n        foreach ($fieldsWithValidationRules as $field) {\n            $fieldRules = $field->details->validation->rule;\n            $fieldName = $field->field;\n\n            // Show the field's display name on the error message\n            if (!empty($field->display_name)) {\n                if (!empty($data[$fieldName]) && is_array($data[$fieldName])) {\n                    foreach ($data[$fieldName] as $index => $element) {\n                        if ($element instanceof UploadedFile) {\n                            $name = $element->getClientOriginalName();\n                        } else {\n                            $name = $index + 1;\n                        }\n\n                        $customAttributes[$fieldName.'.'.$index] = $field->getTranslatedAttribute('display_name').' '.$name;\n                    }\n                } else {\n                    $customAttributes[$fieldName] = $field->getTranslatedAttribute('display_name');\n                }\n            }\n\n            // If field is an array apply rules to all array elements\n            $fieldName = !empty($data[$fieldName]) && is_array($data[$fieldName]) ? $fieldName.'.*' : $fieldName;\n\n            // Get the rules for the current field whatever the format it is in\n            $rules[$fieldName] = is_array($fieldRules) ? $fieldRules : explode('|', $fieldRules);\n\n            if ($id && property_exists($field->details->validation, 'edit')) {\n                $action_rules = $field->details->validation->edit->rule;\n                $rules[$fieldName] = array_merge($rules[$fieldName], (is_array($action_rules) ? $action_rules : explode('|', $action_rules)));\n            } elseif (!$id && property_exists($field->details->validation, 'add')) {\n                $action_rules = $field->details->validation->add->rule;\n                $rules[$fieldName] = array_merge($rules[$fieldName], (is_array($action_rules) ? $action_rules : explode('|', $action_rules)));\n            }\n            // Fix Unique validation rule on Edit Mode\n            if ($is_update) {\n                foreach ($rules[$fieldName] as &$fieldRule) {\n                    if (strpos(strtoupper($fieldRule), 'UNIQUE') !== false) {\n                        $fieldRule = \\Illuminate\\Validation\\Rule::unique($name)->ignore($id);\n                    }\n                }\n            }\n\n            // Set custom validation messages if any\n            if (!empty($field->details->validation->messages)) {\n                foreach ($field->details->validation->messages as $key => $msg) {\n                    $messages[\"{$field->field}.{$key}\"] = $msg;\n                }\n            }\n        }\n\n        return Validator::make($data, $rules, $messages, $customAttributes);\n    }\n\n    public function getContentBasedOnType(Request $request, $slug, $row, $options = null)\n    {\n        switch ($row->type) {\n            /********** PASSWORD TYPE **********/\n            case 'password':\n                return (new Password($request, $slug, $row, $options))->handle();\n            /********** CHECKBOX TYPE **********/\n            case 'checkbox':\n                return (new Checkbox($request, $slug, $row, $options))->handle();\n            /********** MULTIPLE CHECKBOX TYPE **********/\n            case 'multiple_checkbox':\n                return (new MultipleCheckbox($request, $slug, $row, $options))->handle();\n            /********** FILE TYPE **********/\n            case 'file':\n                return (new File($request, $slug, $row, $options))->handle();\n            /********** MULTIPLE IMAGES TYPE **********/\n            case 'multiple_images':\n                return (new MultipleImage($request, $slug, $row, $options))->handle();\n            /********** SELECT MULTIPLE TYPE **********/\n            case 'select_multiple':\n                return (new SelectMultiple($request, $slug, $row, $options))->handle();\n            /********** IMAGE TYPE **********/\n            case 'image':\n                return (new ContentImage($request, $slug, $row, $options))->handle();\n            /********** DATE TYPE **********/\n            case 'date':\n            /********** TIMESTAMP TYPE **********/\n            case 'timestamp':\n                return (new Timestamp($request, $slug, $row, $options))->handle();\n            /********** COORDINATES TYPE **********/\n            case 'coordinates':\n                return (new Coordinates($request, $slug, $row, $options))->handle();\n            /********** RELATIONSHIPS TYPE **********/\n            case 'relationship':\n                return (new Relationship($request, $slug, $row, $options))->handle();\n            /********** ALL OTHER TEXT TYPE **********/\n            default:\n                return (new Text($request, $slug, $row, $options))->handle();\n        }\n    }\n\n    public function deleteFileIfExists($path)\n    {\n        if ($path && Storage::disk(config('voyager.storage.disk'))->exists($path)) {\n            Storage::disk(config('voyager.storage.disk'))->delete($path);\n            event(new FileDeleted($path));\n        }\n    }\n\n    /**\n     * Get fields having validation rules in proper format.\n     *\n     * @param array $fieldsConfig\n     *\n     * @return \\Illuminate\\Support\\Collection\n     */\n    protected function getFieldsWithValidationRules($fieldsConfig)\n    {\n        return $fieldsConfig->filter(function ($value) {\n            if (empty($value->details)) {\n                return false;\n            }\n\n            return !empty($value->details->validation->rule);\n        });\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/Traits/BreadRelationshipParser.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers\\Traits;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Pagination\\LengthAwarePaginator;\nuse TCG\\Voyager\\Models\\DataType;\n\ntrait BreadRelationshipParser\n{\n    protected function removeRelationshipField(DataType $dataType, $bread_type = 'browse')\n    {\n        $forget_keys = [];\n        foreach ($dataType->{$bread_type.'Rows'} as $key => $row) {\n            if ($row->type == 'relationship') {\n                if ($row->details->type == 'belongsTo') {\n                    $relationshipField = @$row->details->column;\n                    $keyInCollection = key($dataType->{$bread_type.'Rows'}->where('field', '=', $relationshipField)->toArray());\n                    array_push($forget_keys, $keyInCollection);\n                }\n            }\n        }\n\n        foreach ($forget_keys as $forget_key) {\n            $dataType->{$bread_type.'Rows'}->forget($forget_key);\n        }\n\n        // Reindex collection\n        $dataType->{$bread_type.'Rows'} = $dataType->{$bread_type.'Rows'}->values();\n    }\n\n    /**\n     * Replace relationships' keys for labels and create READ links if a slug is provided.\n     *\n     * @param  $dataTypeContent     Can be either an eloquent Model, Collection or LengthAwarePaginator instance.\n     * @param DataType $dataType\n     *\n     * @return $dataTypeContent\n     */\n    protected function resolveRelations($dataTypeContent, DataType $dataType)\n    {\n        // In case of using server-side pagination, we need to work on the Collection (BROWSE)\n        if ($dataTypeContent instanceof LengthAwarePaginator) {\n            $dataTypeCollection = $dataTypeContent->getCollection();\n        }\n        // If it's a model just make the changes directly on it (READ / EDIT)\n        elseif ($dataTypeContent instanceof Model) {\n            return $dataTypeContent;\n        }\n        // Or we assume it's a Collection\n        else {\n            $dataTypeCollection = $dataTypeContent;\n        }\n\n        return $dataTypeContent instanceof LengthAwarePaginator ? $dataTypeContent->setCollection($dataTypeCollection) : $dataTypeCollection;\n    }\n\n    /**\n     * Eagerload relationships.\n     *\n     * @param mixed    $dataTypeContent     Can be either an eloquent Model or Collection.\n     * @param DataType $dataType\n     * @param string   $action\n     * @param bool     $isModelTranslatable\n     *\n     * @return void\n     */\n    protected function eagerLoadRelations($dataTypeContent, DataType $dataType, string $action, bool $isModelTranslatable)\n    {\n        // Eagerload Translations\n        if (config('voyager.multilingual.enabled')) {\n            // Check if BREAD is Translatable\n            if ($isModelTranslatable) {\n                $dataTypeContent->load('translations');\n            }\n\n            // DataRow is translatable so it will always try to load translations\n            // even if current Model is not translatable\n            $dataType->{$action.'Rows'}->load('translations');\n        }\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/VoyagerAuthController.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Auth\\AuthenticatesUsers;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass VoyagerAuthController extends Controller\n{\n    use AuthenticatesUsers;\n\n    public function login()\n    {\n        if ($this->guard()->user()) {\n            return redirect()->route('voyager.dashboard');\n        }\n\n        return Voyager::view('voyager::login');\n    }\n\n    public function postLogin(Request $request)\n    {\n        $this->validateLogin($request);\n\n        // If the class is using the ThrottlesLogins trait, we can automatically throttle\n        // the login attempts for this application. We'll key this by the username and\n        // the IP address of the client making these requests into this application.\n        if ($this->hasTooManyLoginAttempts($request)) {\n            $this->fireLockoutEvent($request);\n\n            return $this->sendLockoutResponse($request);\n        }\n\n        $credentials = $this->credentials($request);\n\n        if ($this->guard()->attempt($credentials, $request->has('remember'))) {\n            return $this->sendLoginResponse($request);\n        }\n\n        // If the login attempt was unsuccessful we will increment the number of attempts\n        // to login and redirect the user back to the login form. Of course, when this\n        // user surpasses their maximum number of attempts they will get locked out.\n        $this->incrementLoginAttempts($request);\n\n        return $this->sendFailedLoginResponse($request);\n    }\n\n    /*\n     * Preempts $redirectTo member variable (from RedirectsUsers trait)\n     */\n    public function redirectTo()\n    {\n        return config('voyager.user.redirect', route('voyager.dashboard'));\n    }\n\n    /**\n     * Get the guard to be used during authentication.\n     *\n     * @return \\Illuminate\\Contracts\\Auth\\StatefulGuard\n     */\n    protected function guard()\n    {\n        return Auth::guard(app('VoyagerGuard'));\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/VoyagerBaseController.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers;\n\nuse Exception;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\DB;\nuse TCG\\Voyager\\Database\\Schema\\SchemaManager;\nuse TCG\\Voyager\\Events\\BreadDataAdded;\nuse TCG\\Voyager\\Events\\BreadDataDeleted;\nuse TCG\\Voyager\\Events\\BreadDataRestored;\nuse TCG\\Voyager\\Events\\BreadDataUpdated;\nuse TCG\\Voyager\\Events\\BreadImagesDeleted;\nuse TCG\\Voyager\\Facades\\Voyager;\nuse TCG\\Voyager\\Http\\Controllers\\Traits\\BreadRelationshipParser;\n\nclass VoyagerBaseController extends Controller\n{\n    use BreadRelationshipParser;\n\n    //***************************************\n    //               ____\n    //              |  _ \\\n    //              | |_) |\n    //              |  _ <\n    //              | |_) |\n    //              |____/\n    //\n    //      Browse our Data Type (B)READ\n    //\n    //****************************************\n\n    public function index(Request $request)\n    {\n        // GET THE SLUG, ex. 'posts', 'pages', etc.\n        $slug = $this->getSlug($request);\n\n        // GET THE DataType based on the slug\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        // Check permission\n        $this->authorize('browse', app($dataType->model_name));\n\n        $getter = $dataType->server_side ? 'paginate' : 'get';\n\n        $search = (object) ['value' => $request->get('s'), 'key' => $request->get('key'), 'filter' => $request->get('filter')];\n\n        $searchNames = [];\n        if ($dataType->server_side) {\n            $searchNames = $dataType->browseRows->mapWithKeys(function ($row) {\n                return [$row['field'] => $row->getTranslatedAttribute('display_name')];\n            });\n        }\n\n        $orderBy = $request->get('order_by', $dataType->order_column);\n        $sortOrder = $request->get('sort_order', $dataType->order_direction);\n        $usesSoftDeletes = false;\n        $showSoftDeleted = false;\n\n        // Next Get or Paginate the actual content from the MODEL that corresponds to the slug DataType\n        if (strlen($dataType->model_name) != 0) {\n            $model = app($dataType->model_name);\n\n            $query = $model::select($dataType->name.'.*');\n\n            if ($dataType->scope && $dataType->scope != '' && method_exists($model, 'scope'.ucfirst($dataType->scope))) {\n                $query->{$dataType->scope}();\n            }\n\n            // Use withTrashed() if model uses SoftDeletes and if toggle is selected\n            if ($model && in_array(SoftDeletes::class, class_uses_recursive($model)) && Auth::user()->can('delete', app($dataType->model_name))) {\n                $usesSoftDeletes = true;\n\n                if ($request->get('showSoftDeleted')) {\n                    $showSoftDeleted = true;\n                    $query = $query->withTrashed();\n                }\n            }\n\n            // If a column has a relationship associated with it, we do not want to show that field\n            $this->removeRelationshipField($dataType, 'browse');\n\n            if ($search->value != '' && $search->key && $search->filter) {\n                $search_filter = ($search->filter == 'equals') ? '=' : 'LIKE';\n                $search_value = ($search->filter == 'equals') ? $search->value : '%'.$search->value.'%';\n\n                $searchField = $dataType->name.'.'.$search->key;\n                if ($row = $this->findSearchableRelationshipRow($dataType->rows->where('type', 'relationship'), $search->key)) {\n                    $query->whereIn(\n                        $searchField,\n                        $row->details->model::where($row->details->label, $search_filter, $search_value)->pluck('id')->toArray()\n                    );\n                } else {\n                    if ($dataType->browseRows->pluck('field')->contains($search->key)) {\n                        $query->where($searchField, $search_filter, $search_value);\n                    }\n                }\n            }\n\n            $row = $dataType->rows->where('field', $orderBy)->firstWhere('type', 'relationship');\n            if ($orderBy && (in_array($orderBy, $dataType->fields()) || !empty($row))) {\n                $querySortOrder = (!empty($sortOrder)) ? $sortOrder : 'desc';\n                if (!empty($row)) {\n                    $query->select([\n                        $dataType->name.'.*',\n                        'joined.'.$row->details->label.' as '.$orderBy,\n                    ])->leftJoin(\n                        $row->details->table.' as joined',\n                        $dataType->name.'.'.$row->details->column,\n                        'joined.'.$row->details->key\n                    );\n                }\n\n                $dataTypeContent = call_user_func([\n                    $query->orderBy($orderBy, $querySortOrder),\n                    $getter,\n                ]);\n            } elseif ($model->timestamps) {\n                $dataTypeContent = call_user_func([$query->latest($model::CREATED_AT), $getter]);\n            } else {\n                $dataTypeContent = call_user_func([$query->orderBy($model->getKeyName(), 'DESC'), $getter]);\n            }\n\n            // Replace relationships' keys for labels and create READ links if a slug is provided.\n            $dataTypeContent = $this->resolveRelations($dataTypeContent, $dataType);\n        } else {\n            // If Model doesn't exist, get data from table name\n            $dataTypeContent = call_user_func([DB::table($dataType->name), $getter]);\n            $model = false;\n        }\n\n        // Check if BREAD is Translatable\n        $isModelTranslatable = is_bread_translatable($model);\n\n        // Eagerload Relations\n        $this->eagerLoadRelations($dataTypeContent, $dataType, 'browse', $isModelTranslatable);\n\n        // Check if server side pagination is enabled\n        $isServerSide = isset($dataType->server_side) && $dataType->server_side;\n\n        // Check if a default search key is set\n        $defaultSearchKey = $dataType->default_search_key ?? null;\n\n        // Actions\n        $actions = [];\n        if (!empty($dataTypeContent->first())) {\n            foreach (Voyager::actions() as $action) {\n                $action = new $action($dataType, $dataTypeContent->first());\n\n                if ($action->shouldActionDisplayOnDataType()) {\n                    $actions[] = $action;\n                }\n            }\n        }\n\n        // Define showCheckboxColumn\n        $showCheckboxColumn = false;\n        if (Auth::user()->can('delete', app($dataType->model_name))) {\n            $showCheckboxColumn = true;\n        } else {\n            foreach ($actions as $action) {\n                if (method_exists($action, 'massAction')) {\n                    $showCheckboxColumn = true;\n                }\n            }\n        }\n\n        // Define orderColumn\n        $orderColumn = [];\n        if ($orderBy) {\n            $index = $dataType->browseRows->where('field', $orderBy)->keys()->first() + ($showCheckboxColumn ? 1 : 0);\n            $orderColumn = [[$index, $sortOrder ?? 'desc']];\n        }\n\n        // Define list of columns that can be sorted server side\n        $sortableColumns = $this->getSortableColumns($dataType->browseRows);\n\n        $view = 'voyager::bread.browse';\n\n        if (view()->exists(\"voyager::$slug.browse\")) {\n            $view = \"voyager::$slug.browse\";\n        }\n\n        return Voyager::view($view, compact(\n            'actions',\n            'dataType',\n            'dataTypeContent',\n            'isModelTranslatable',\n            'search',\n            'orderBy',\n            'orderColumn',\n            'sortableColumns',\n            'sortOrder',\n            'searchNames',\n            'isServerSide',\n            'defaultSearchKey',\n            'usesSoftDeletes',\n            'showSoftDeleted',\n            'showCheckboxColumn'\n        ));\n    }\n\n    //***************************************\n    //                _____\n    //               |  __ \\\n    //               | |__) |\n    //               |  _  /\n    //               | | \\ \\\n    //               |_|  \\_\\\n    //\n    //  Read an item of our Data Type B(R)EAD\n    //\n    //****************************************\n\n    public function show(Request $request, $id)\n    {\n        $slug = $this->getSlug($request);\n\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        $isSoftDeleted = false;\n\n        if (strlen($dataType->model_name) != 0) {\n            $model = app($dataType->model_name);\n            $query = $model->query();\n\n            // Use withTrashed() if model uses SoftDeletes and if toggle is selected\n            if ($model && in_array(SoftDeletes::class, class_uses_recursive($model))) {\n                $query = $query->withTrashed();\n            }\n            if ($dataType->scope && $dataType->scope != '' && method_exists($model, 'scope'.ucfirst($dataType->scope))) {\n                $query = $query->{$dataType->scope}();\n            }\n            $dataTypeContent = call_user_func([$query, 'findOrFail'], $id);\n            if ($dataTypeContent->deleted_at) {\n                $isSoftDeleted = true;\n            }\n        } else {\n            // If Model doest exist, get data from table name\n            $dataTypeContent = DB::table($dataType->name)->where('id', $id)->first();\n        }\n\n        // Replace relationships' keys for labels and create READ links if a slug is provided.\n        $dataTypeContent = $this->resolveRelations($dataTypeContent, $dataType, true);\n\n        // If a column has a relationship associated with it, we do not want to show that field\n        $this->removeRelationshipField($dataType, 'read');\n\n        // Check permission\n        $this->authorize('read', $dataTypeContent);\n\n        // Check if BREAD is Translatable\n        $isModelTranslatable = is_bread_translatable($dataTypeContent);\n\n        // Eagerload Relations\n        $this->eagerLoadRelations($dataTypeContent, $dataType, 'read', $isModelTranslatable);\n\n        $view = 'voyager::bread.read';\n\n        if (view()->exists(\"voyager::$slug.read\")) {\n            $view = \"voyager::$slug.read\";\n        }\n\n        return Voyager::view($view, compact('dataType', 'dataTypeContent', 'isModelTranslatable', 'isSoftDeleted'));\n    }\n\n    //***************************************\n    //                ______\n    //               |  ____|\n    //               | |__\n    //               |  __|\n    //               | |____\n    //               |______|\n    //\n    //  Edit an item of our Data Type BR(E)AD\n    //\n    //****************************************\n\n    public function edit(Request $request, $id)\n    {\n        $slug = $this->getSlug($request);\n\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        if (strlen($dataType->model_name) != 0) {\n            $model = app($dataType->model_name);\n            $query = $model->query();\n\n            // Use withTrashed() if model uses SoftDeletes and if toggle is selected\n            if ($model && in_array(SoftDeletes::class, class_uses_recursive($model))) {\n                $query = $query->withTrashed();\n            }\n            if ($dataType->scope && $dataType->scope != '' && method_exists($model, 'scope'.ucfirst($dataType->scope))) {\n                $query = $query->{$dataType->scope}();\n            }\n            $dataTypeContent = call_user_func([$query, 'findOrFail'], $id);\n        } else {\n            // If Model doest exist, get data from table name\n            $dataTypeContent = DB::table($dataType->name)->where('id', $id)->first();\n        }\n\n        foreach ($dataType->editRows as $key => $row) {\n            $dataType->editRows[$key]['col_width'] = isset($row->details->width) ? $row->details->width : 100;\n        }\n\n        // If a column has a relationship associated with it, we do not want to show that field\n        $this->removeRelationshipField($dataType, 'edit');\n\n        // Check permission\n        $this->authorize('edit', $dataTypeContent);\n\n        // Check if BREAD is Translatable\n        $isModelTranslatable = is_bread_translatable($dataTypeContent);\n\n        // Eagerload Relations\n        $this->eagerLoadRelations($dataTypeContent, $dataType, 'edit', $isModelTranslatable);\n\n        $view = 'voyager::bread.edit-add';\n\n        if (view()->exists(\"voyager::$slug.edit-add\")) {\n            $view = \"voyager::$slug.edit-add\";\n        }\n\n        return Voyager::view($view, compact('dataType', 'dataTypeContent', 'isModelTranslatable'));\n    }\n\n    // POST BR(E)AD\n    public function update(Request $request, $id)\n    {\n        $slug = $this->getSlug($request);\n\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        // Compatibility with Model binding.\n        $id = $id instanceof \\Illuminate\\Database\\Eloquent\\Model ? $id->{$id->getKeyName()} : $id;\n\n        $model = app($dataType->model_name);\n        $query = $model->query();\n        if ($dataType->scope && $dataType->scope != '' && method_exists($model, 'scope'.ucfirst($dataType->scope))) {\n            $query = $query->{$dataType->scope}();\n        }\n        if ($model && in_array(SoftDeletes::class, class_uses_recursive($model))) {\n            $query = $query->withTrashed();\n        }\n\n        $data = $query->findOrFail($id);\n\n        // Check permission\n        $this->authorize('edit', $data);\n\n        // Validate fields with ajax\n        $val = $this->validateBread($request->all(), $dataType->editRows, $dataType->name, $id)->validate();\n\n        // Get fields with images to remove before updating and make a copy of $data\n        $to_remove = $dataType->editRows->where('type', 'image')\n            ->filter(function ($item, $key) use ($request) {\n                return $request->hasFile($item->field);\n            });\n        $original_data = clone($data);\n\n        $this->insertUpdateData($request, $slug, $dataType->editRows, $data);\n\n        // Delete Images\n        $this->deleteBreadImages($original_data, $to_remove);\n\n        event(new BreadDataUpdated($dataType, $data));\n\n        if (auth()->user()->can('browse', app($dataType->model_name))) {\n            $redirect = redirect()->route(\"voyager.{$dataType->slug}.index\");\n        } else {\n            $redirect = redirect()->back();\n        }\n\n        return $redirect->with([\n            'message'    => __('voyager::generic.successfully_updated').\" {$dataType->getTranslatedAttribute('display_name_singular')}\",\n            'alert-type' => 'success',\n        ]);\n    }\n\n    //***************************************\n    //\n    //                   /\\\n    //                  /  \\\n    //                 / /\\ \\\n    //                / ____ \\\n    //               /_/    \\_\\\n    //\n    //\n    // Add a new item of our Data Type BRE(A)D\n    //\n    //****************************************\n\n    public function create(Request $request)\n    {\n        $slug = $this->getSlug($request);\n\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        // Check permission\n        $this->authorize('add', app($dataType->model_name));\n\n        $dataTypeContent = (strlen($dataType->model_name) != 0)\n                            ? new $dataType->model_name()\n                            : false;\n\n        foreach ($dataType->addRows as $key => $row) {\n            $dataType->addRows[$key]['col_width'] = $row->details->width ?? 100;\n        }\n\n        // If a column has a relationship associated with it, we do not want to show that field\n        $this->removeRelationshipField($dataType, 'add');\n\n        // Check if BREAD is Translatable\n        $isModelTranslatable = is_bread_translatable($dataTypeContent);\n\n        // Eagerload Relations\n        $this->eagerLoadRelations($dataTypeContent, $dataType, 'add', $isModelTranslatable);\n\n        $view = 'voyager::bread.edit-add';\n\n        if (view()->exists(\"voyager::$slug.edit-add\")) {\n            $view = \"voyager::$slug.edit-add\";\n        }\n\n        return Voyager::view($view, compact('dataType', 'dataTypeContent', 'isModelTranslatable'));\n    }\n\n    /**\n     * POST BRE(A)D - Store data.\n     *\n     * @param \\Illuminate\\Http\\Request $request\n     *\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function store(Request $request)\n    {\n        $slug = $this->getSlug($request);\n\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        // Check permission\n        $this->authorize('add', app($dataType->model_name));\n\n        // Validate fields with ajax\n        $val = $this->validateBread($request->all(), $dataType->addRows)->validate();\n        $data = $this->insertUpdateData($request, $slug, $dataType->addRows, new $dataType->model_name());\n\n        event(new BreadDataAdded($dataType, $data));\n\n        if (!$request->has('_tagging')) {\n            if (auth()->user()->can('browse', $data)) {\n                $redirect = redirect()->route(\"voyager.{$dataType->slug}.index\");\n            } else {\n                $redirect = redirect()->back();\n            }\n\n            return $redirect->with([\n                'message'    => __('voyager::generic.successfully_added_new').\" {$dataType->getTranslatedAttribute('display_name_singular')}\",\n                'alert-type' => 'success',\n            ]);\n        } else {\n            return response()->json(['success' => true, 'data' => $data]);\n        }\n    }\n\n    //***************************************\n    //                _____\n    //               |  __ \\\n    //               | |  | |\n    //               | |  | |\n    //               | |__| |\n    //               |_____/\n    //\n    //         Delete an item BREA(D)\n    //\n    //****************************************\n\n    public function destroy(Request $request, $id)\n    {\n        $slug = $this->getSlug($request);\n\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        // Init array of IDs\n        $ids = [];\n        if (empty($id)) {\n            // Bulk delete, get IDs from POST\n            $ids = explode(',', $request->ids);\n        } else {\n            // Single item delete, get ID from URL\n            $ids[] = $id;\n        }\n\n        $affected = 0;\n        \n        foreach ($ids as $id) {\n            $data = call_user_func([$dataType->model_name, 'findOrFail'], $id);\n\n            // Check permission\n            $this->authorize('delete', $data);\n\n            $model = app($dataType->model_name);\n            if (!($model && in_array(SoftDeletes::class, class_uses_recursive($model)))) {\n                $this->cleanup($dataType, $data);\n            }\n\n            $res = $data->delete();\n\n            if ($res) {\n                $affected++;\n\n                event(new BreadDataDeleted($dataType, $data));\n            }\n        }\n\n        $displayName = $affected > 1 ? $dataType->getTranslatedAttribute('display_name_plural') : $dataType->getTranslatedAttribute('display_name_singular');\n\n        $data = $affected\n            ? [\n                'message'    => __('voyager::generic.successfully_deleted').\" {$displayName}\",\n                'alert-type' => 'success',\n            ]\n            : [\n                'message'    => __('voyager::generic.error_deleting').\" {$displayName}\",\n                'alert-type' => 'error',\n            ];\n\n        return redirect()->route(\"voyager.{$dataType->slug}.index\")->with($data);\n    }\n\n    public function restore(Request $request, $id)\n    {\n        $slug = $this->getSlug($request);\n\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        // Check permission\n        $model = app($dataType->model_name);\n        $this->authorize('delete', $model);\n\n        // Get record\n        $query = $model->withTrashed();\n        if ($dataType->scope && $dataType->scope != '' && method_exists($model, 'scope'.ucfirst($dataType->scope))) {\n            $query = $query->{$dataType->scope}();\n        }\n        $data = $query->findOrFail($id);\n\n        $displayName = $dataType->getTranslatedAttribute('display_name_singular');\n\n        $res = $data->restore($id);\n        $data = $res\n            ? [\n                'message'    => __('voyager::generic.successfully_restored').\" {$displayName}\",\n                'alert-type' => 'success',\n            ]\n            : [\n                'message'    => __('voyager::generic.error_restoring').\" {$displayName}\",\n                'alert-type' => 'error',\n            ];\n\n        if ($res) {\n            event(new BreadDataRestored($dataType, $data));\n        }\n\n        return redirect()->route(\"voyager.{$dataType->slug}.index\")->with($data);\n    }\n\n    //***************************************\n    //\n    //  Delete uploaded file\n    //\n    //****************************************\n\n    public function remove_media(Request $request)\n    {\n        try {\n            // GET THE SLUG, ex. 'posts', 'pages', etc.\n            $slug = $request->get('slug');\n\n            // GET file name\n            $filename = $request->get('filename');\n\n            // GET record id\n            $id = $request->get('id');\n\n            // GET field name\n            $field = $request->get('field');\n\n            // GET multi value\n            $multi = $request->get('multi');\n\n            $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n            // Load model and find record\n            $model = app($dataType->model_name);\n            $data = $model::find([$id])->first();\n\n            // Check if field exists\n            if (!isset($data->{$field})) {\n                throw new Exception(__('voyager::generic.field_does_not_exist'), 400);\n            }\n\n            // Check permission\n            $this->authorize('edit', $data);\n\n            if (@json_decode($multi)) {\n                // Check if valid json\n                if (is_null(@json_decode($data->{$field}))) {\n                    throw new Exception(__('voyager::json.invalid'), 500);\n                }\n\n                // Decode field value\n                $fieldData = @json_decode($data->{$field}, true);\n                $key = null;\n\n                // Check if we're dealing with a nested array for the case of multiple files\n                if (is_array($fieldData[0])) {\n                    foreach ($fieldData as $index=>$file) {\n                        // file type has a different structure than images\n                        if (!empty($file['original_name'])) {\n                            if ($file['original_name'] == $filename) {\n                                $key = $index;\n                                break;\n                            }\n                        } else {\n                            $file = array_flip($file);\n                            if (array_key_exists($filename, $file)) {\n                                $key = $index;\n                                break;\n                            }\n                        }\n                    }\n                } else {\n                    $key = array_search($filename, $fieldData);\n                }\n\n                // Check if file was found in array\n                if (is_null($key) || $key === false) {\n                    throw new Exception(__('voyager::media.file_does_not_exist'), 400);\n                }\n\n                $fileToRemove = $fieldData[$key]['download_link'] ?? $fieldData[$key];\n\n                // Remove file from array\n                unset($fieldData[$key]);\n\n                // Generate json and update field\n                $data->{$field} = empty($fieldData) ? null : json_encode(array_values($fieldData));\n            } else {\n                if ($filename == $data->{$field}) {\n                    $fileToRemove = $data->{$field};\n\n                    $data->{$field} = null;\n                } else {\n                    throw new Exception(__('voyager::media.file_does_not_exist'), 400);\n                }\n            }\n\n            $row = $dataType->rows->where('field', $field)->first();\n\n            // Remove file from filesystem\n            if (in_array($row->type, ['image', 'multiple_images'])) {\n                $this->deleteBreadImages($data, [$row], $fileToRemove);\n            } else {\n                $this->deleteFileIfExists($fileToRemove);\n            }\n\n            $data->save();\n\n            return response()->json([\n                'data' => [\n                    'status'  => 200,\n                    'message' => __('voyager::media.file_removed'),\n                ],\n            ]);\n        } catch (Exception $e) {\n            $code = 500;\n            $message = __('voyager::generic.internal_error');\n\n            if ($e->getCode()) {\n                $code = $e->getCode();\n            }\n\n            if ($e->getMessage()) {\n                $message = $e->getMessage();\n            }\n\n            return response()->json([\n                'data' => [\n                    'status'  => $code,\n                    'message' => $message,\n                ],\n            ], $code);\n        }\n    }\n\n    /**\n     * Remove translations, images and files related to a BREAD item.\n     *\n     * @param \\Illuminate\\Database\\Eloquent\\Model $dataType\n     * @param \\Illuminate\\Database\\Eloquent\\Model $data\n     *\n     * @return void\n     */\n    protected function cleanup($dataType, $data)\n    {\n        // Delete Translations, if present\n        if (is_bread_translatable($data)) {\n            $data->deleteAttributeTranslations($data->getTranslatableAttributes());\n        }\n\n        // Delete Images\n        $this->deleteBreadImages($data, $dataType->deleteRows->whereIn('type', ['image', 'multiple_images']));\n\n        // Delete Files\n        foreach ($dataType->deleteRows->where('type', 'file') as $row) {\n            if (isset($data->{$row->field})) {\n                foreach (json_decode($data->{$row->field}) as $file) {\n                    $this->deleteFileIfExists($file->download_link);\n                }\n            }\n        }\n\n        // Delete media-picker files\n        $dataType->rows->where('type', 'media_picker')->where('details.delete_files', true)->each(function ($row) use ($data) {\n            $content = $data->{$row->field};\n            if (isset($content)) {\n                if (!is_array($content)) {\n                    $content = json_decode($content);\n                }\n                if (is_array($content)) {\n                    foreach ($content as $file) {\n                        $this->deleteFileIfExists($file);\n                    }\n                } else {\n                    $this->deleteFileIfExists($content);\n                }\n            }\n        });\n    }\n\n    /**\n     * Delete all images related to a BREAD item.\n     *\n     * @param \\Illuminate\\Database\\Eloquent\\Model $data\n     * @param \\Illuminate\\Database\\Eloquent\\Model $rows\n     *\n     * @return void\n     */\n    public function deleteBreadImages($data, $rows, $single_image = null)\n    {\n        $imagesDeleted = false;\n\n        foreach ($rows as $row) {\n            if ($row->type == 'multiple_images') {\n                $images_to_remove = json_decode($data->getOriginal($row->field), true) ?? [];\n            } else {\n                $images_to_remove = [$data->getOriginal($row->field)];\n            }\n\n            foreach ($images_to_remove as $image) {\n                // Remove only $single_image if we are removing from bread edit\n                if ($image != config('voyager.user.default_avatar') && (is_null($single_image) || $single_image == $image)) {\n                    $this->deleteFileIfExists($image);\n                    $imagesDeleted = true;\n\n                    if (isset($row->details->thumbnails)) {\n                        foreach ($row->details->thumbnails as $thumbnail) {\n                            $ext = explode('.', $image);\n                            $extension = '.'.$ext[count($ext) - 1];\n\n                            $path = str_replace($extension, '', $image);\n\n                            $thumb_name = $thumbnail->name;\n\n                            $this->deleteFileIfExists($path.'-'.$thumb_name.$extension);\n                        }\n                    }\n                }\n            }\n        }\n\n        if ($imagesDeleted) {\n            event(new BreadImagesDeleted($data, $rows));\n        }\n    }\n\n    /**\n     * Order BREAD items.\n     *\n     * @param string $table\n     *\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function order(Request $request)\n    {\n        $slug = $this->getSlug($request);\n\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        // Check permission\n        $this->authorize('edit', app($dataType->model_name));\n\n        if (empty($dataType->order_column) || empty($dataType->order_display_column)) {\n            return redirect()\n            ->route(\"voyager.{$dataType->slug}.index\")\n            ->with([\n                'message'    => __('voyager::bread.ordering_not_set'),\n                'alert-type' => 'error',\n            ]);\n        }\n\n        $model = app($dataType->model_name);\n        $query = $model->query();\n        if ($model && in_array(SoftDeletes::class, class_uses_recursive($model))) {\n            $query = $query->withTrashed();\n        }\n        $results = $query->orderBy($dataType->order_column, $dataType->order_direction)->get();\n\n        $display_column = $dataType->order_display_column;\n\n        $dataRow = Voyager::model('DataRow')->whereDataTypeId($dataType->id)->whereField($display_column)->first();\n\n        $view = 'voyager::bread.order';\n\n        if (view()->exists(\"voyager::$slug.order\")) {\n            $view = \"voyager::$slug.order\";\n        }\n\n        return Voyager::view($view, compact(\n            'dataType',\n            'display_column',\n            'dataRow',\n            'results'\n        ));\n    }\n\n    public function update_order(Request $request)\n    {\n        $slug = $this->getSlug($request);\n\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        // Check permission\n        $this->authorize('edit', app($dataType->model_name));\n\n        $model = app($dataType->model_name);\n\n        $order = json_decode($request->input('order'));\n        $column = $dataType->order_column;\n        foreach ($order as $key => $item) {\n            if ($model && in_array(SoftDeletes::class, class_uses_recursive($model))) {\n                $i = $model->withTrashed()->findOrFail($item->id);\n            } else {\n                $i = $model->findOrFail($item->id);\n            }\n            $i->$column = ($key + 1);\n            $i->save();\n        }\n    }\n\n    public function action(Request $request)\n    {\n        if (!$request->action || !class_exists($request->action)) {\n            throw new \\Exception(\"Action {$request->action} doesn't exist or has not been defined\");\n        }\n\n        $slug = $this->getSlug($request);\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        $action = new $request->action($dataType, null);\n\n        return $action->massAction(explode(',', $request->ids), $request->headers->get('referer'));\n    }\n\n    /**\n     * Get BREAD relations data.\n     *\n     * @param Request $request\n     *\n     * @return mixed\n     */\n    public function relation(Request $request)\n    {\n        $slug = $this->getSlug($request);\n        $page = $request->input('page');\n        $on_page = 50;\n        $search = $request->input('search', false);\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        $method = $request->input('method', 'add');\n\n        $model = app($dataType->model_name);\n        if ($method != 'add') {\n            $model = $model->find($request->input('id'));\n        }\n\n        $this->authorize($method, $model);\n\n        $rows = $dataType->{$method.'Rows'};\n        foreach ($rows as $key => $row) {\n            if ($row->field === $request->input('type')) {\n                $options = $row->details;\n                $model = app($options->model);\n                $skip = $on_page * ($page - 1);\n\n                $additional_attributes = $model->additional_attributes ?? [];\n\n                // Apply local scope if it is defined in the relationship-options\n                if (isset($options->scope) && $options->scope != '' && method_exists($model, 'scope'.ucfirst($options->scope))) {\n                    $model = $model->{$options->scope}();\n                }\n\n                // If search query, use LIKE to filter results depending on field label\n                if ($search) {\n                    // If we are using additional_attribute as label\n                    if (in_array($options->label, $additional_attributes)) {\n                        $relationshipOptions = $model;\n                        $relationshipOptions = $relationshipOptions->filter(function ($model) use ($search, $options) {\n                            return stripos($model->{$options->label}, $search) !== false;\n                        });\n                        $total_count = $relationshipOptions->count();\n                    } else {\n                        $total_count = $model->where($options->label, 'LIKE', '%' . $search . '%')->count();\n                        $relationshipOptions = $model->where($options->label, 'LIKE', '%' . $search . '%');\n                    }\n                } else {\n                    $total_count = $model->count();\n                    $relationshipOptions = $model;\n                }\n\n                // Sort results\n                if (!empty($options->sort->field)) {\n                    $sort = SORT_REGULAR;\n                    if (!empty($options->sort->flag)) {\n                        $sort = str_replace('\"', '', $options->sort->flag);\n                    }\n                    if (!empty($options->sort->direction)) {\n                        $relationshipOptions = $relationshipOptions->orderBy($options->sort->field, $options->sort->direction);\n                    }\n                }\n\n\t\t\t\t$relationshipOptions = $relationshipOptions->get()\n\t\t\t\t->skip($skip)\n\t\t\t\t->take($on_page);\n\n\n                $results = [];\n\n                if (!$row->required && !$search && $page == 1) {\n                    $results[] = [\n                        'id'   => '',\n                        'text' => __('voyager::generic.none'),\n                    ];\n                }\n\n                // Sort results\n                if (!empty($options->sort->field)) {\n                    if (!empty($options->sort->direction) && strtolower($options->sort->direction) == 'desc') {\n                        $relationshipOptions = $relationshipOptions->sortByDesc($options->sort->field);\n                    } else {\n                        $relationshipOptions = $relationshipOptions->sortBy($options->sort->field);\n                    }\n                }\n\n                foreach ($relationshipOptions as $relationshipOption) {\n                    $results[] = [\n                        'id'   => $relationshipOption->{$options->key},\n                        'text' => $relationshipOption->{$options->label},\n                    ];\n                }\n\n                return response()->json([\n                    'results'    => $results,\n                    'pagination' => [\n                        'more' => ($total_count > ($skip + $on_page)),\n                    ],\n                ]);\n            }\n        }\n\n        // No result found, return empty array\n        return response()->json([], 404);\n    }\n\n    protected function findSearchableRelationshipRow($relationshipRows, $searchKey)\n    {\n        return $relationshipRows->filter(function ($item) use ($searchKey) {\n            if ($item->details->column != $searchKey) {\n                return false;\n            }\n            if ($item->details->type != 'belongsTo') {\n                return false;\n            }\n\n            return !$this->relationIsUsingAccessorAsLabel($item->details);\n        })->first();\n    }\n\n    protected function getSortableColumns($rows)\n    {\n        return $rows->filter(function ($item) {\n            if ($item->type != 'relationship') {\n                return true;\n            }\n            if ($item->details->type != 'belongsTo') {\n                return false;\n            }\n\n            return !$this->relationIsUsingAccessorAsLabel($item->details);\n        })\n        ->pluck('field')\n        ->toArray();\n    }\n\n    protected function relationIsUsingAccessorAsLabel($details)\n    {\n        return in_array($details->label, app($details->model)->additional_attributes ?? []);\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/VoyagerBreadController.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Str;\nuse ReflectionClass;\nuse TCG\\Voyager\\Database\\Schema\\SchemaManager;\nuse TCG\\Voyager\\Database\\Schema\\Table;\nuse TCG\\Voyager\\Database\\Types\\Type;\nuse TCG\\Voyager\\Events\\BreadAdded;\nuse TCG\\Voyager\\Events\\BreadDeleted;\nuse TCG\\Voyager\\Events\\BreadUpdated;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass VoyagerBreadController extends Controller\n{\n    public function index()\n    {\n        $this->authorize('browse_bread');\n\n        $dataTypes = Voyager::model('DataType')->select('id', 'name', 'slug')->get()->keyBy('name')->toArray();\n\n        $tables = array_map(function ($table) use ($dataTypes) {\n            $table = Str::replaceFirst(DB::getTablePrefix(), '', $table);\n\n            $table = [\n                'prefix'     => DB::getTablePrefix(),\n                'name'       => $table,\n                'slug'       => $dataTypes[$table]['slug'] ?? null,\n                'dataTypeId' => $dataTypes[$table]['id'] ?? null,\n            ];\n\n            return (object) $table;\n        }, SchemaManager::listTableNames());\n\n        return Voyager::view('voyager::tools.bread.index')->with(compact('dataTypes', 'tables'));\n    }\n\n    /**\n     * Create BREAD.\n     *\n     * @param Request $request\n     * @param string  $table   Table name.\n     *\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function create(Request $request, $table)\n    {\n        $this->authorize('browse_bread');\n\n        $dataType = Voyager::model('DataType')->whereName($table)->first();\n\n        $data = $this->prepopulateBreadInfo($table);\n        $data['fieldOptions'] = SchemaManager::describeTable(\n            (isset($dataType) && strlen($dataType->model_name) != 0)\n            ? DB::getTablePrefix().app($dataType->model_name)->getTable()\n            : DB::getTablePrefix().$table\n        );\n\n        return Voyager::view('voyager::tools.bread.edit-add', $data);\n    }\n\n    private function prepopulateBreadInfo($table)\n    {\n        $displayName = Str::singular(implode(' ', explode('_', Str::title($table))));\n        $modelNamespace = config('voyager.models.namespace', app()->getNamespace());\n        if (empty($modelNamespace)) {\n            $modelNamespace = app()->getNamespace();\n        }\n\n        return [\n            'isModelTranslatable'  => true,\n            'table'                => $table,\n            'slug'                 => Str::slug($table),\n            'display_name'         => $displayName,\n            'display_name_plural'  => Str::plural($displayName),\n            'model_name'           => $modelNamespace.Str::studly(Str::singular($table)),\n            'generate_permissions' => true,\n            'server_side'          => false,\n        ];\n    }\n\n    /**\n     * Store BREAD.\n     *\n     * @param \\Illuminate\\Http\\Request $request\n     *\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function store(Request $request)\n    {\n        $this->authorize('browse_bread');\n\n        try {\n            $dataType = Voyager::model('DataType');\n            $res = $dataType->updateDataType($request->all(), true);\n            $data = $res\n                ? $this->alertSuccess(__('voyager::bread.success_created_bread'))\n                : $this->alertError(__('voyager::bread.error_creating_bread'));\n            if ($res) {\n                event(new BreadAdded($dataType, $data));\n            }\n\n            return redirect()->route('voyager.bread.index')->with($data);\n        } catch (Exception $e) {\n            return redirect()->route('voyager.bread.index')->with($this->alertException($e, 'Saving Failed'));\n        }\n    }\n\n    /**\n     * Edit BREAD.\n     *\n     * @param string $table\n     *\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function edit($table)\n    {\n        $this->authorize('browse_bread');\n\n        $dataType = Voyager::model('DataType')->whereName($table)->first();\n\n        $fieldOptions = SchemaManager::describeTable(\n            (strlen($dataType->model_name) != 0)\n            ? DB::getTablePrefix().app($dataType->model_name)->getTable()\n            : DB::getTablePrefix().$dataType->name\n        );\n\n        $isModelTranslatable = is_bread_translatable($dataType);\n        $tables = SchemaManager::listTableNames();\n        $dataTypeRelationships = Voyager::model('DataRow')->where('data_type_id', '=', $dataType->id)->where('type', '=', 'relationship')->get();\n        $scopes = [];\n        if ($dataType->model_name != '') {\n            $scopes = $this->getModelScopes($dataType->model_name);\n        }\n\n        return Voyager::view('voyager::tools.bread.edit-add', compact('dataType', 'fieldOptions', 'isModelTranslatable', 'tables', 'dataTypeRelationships', 'scopes'));\n    }\n\n    /**\n     * Update BREAD.\n     *\n     * @param \\Illuminate\\Http\\Request $request\n     * @param number                   $id\n     *\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function update(Request $request, $id)\n    {\n        $this->authorize('browse_bread');\n\n        /* @var \\TCG\\Voyager\\Models\\DataType $dataType */\n        try {\n            $dataType = Voyager::model('DataType')->find($id);\n\n            // Prepare Translations and Transform data\n            $translations = is_bread_translatable($dataType)\n                ? $dataType->prepareTranslations($request)\n                : [];\n\n            $res = $dataType->updateDataType($request->all(), true);\n            $data = $res\n                ? $this->alertSuccess(__('voyager::bread.success_update_bread', ['datatype' => $dataType->name]))\n                : $this->alertError(__('voyager::bread.error_updating_bread'));\n            if ($res) {\n                event(new BreadUpdated($dataType, $data));\n            }\n\n            // Save translations if applied\n            $dataType->saveTranslations($translations);\n\n            return redirect()->route('voyager.bread.index')->with($data);\n        } catch (Exception $e) {\n            return back()->with($this->alertException($e, __('voyager::generic.update_failed')));\n        }\n    }\n\n    /**\n     * Delete BREAD.\n     *\n     * @param Number $id BREAD data_type id.\n     *\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function destroy($id)\n    {\n        $this->authorize('browse_bread');\n\n        /* @var \\TCG\\Voyager\\Models\\DataType $dataType */\n        $dataType = Voyager::model('DataType')->find($id);\n\n        // Delete Translations, if present\n        if (is_bread_translatable($dataType)) {\n            $dataType->deleteAttributeTranslations($dataType->getTranslatableAttributes());\n        }\n\n        $res = Voyager::model('DataType')->destroy($id);\n        $data = $res\n            ? $this->alertSuccess(__('voyager::bread.success_remove_bread', ['datatype' => $dataType->name]))\n            : $this->alertError(__('voyager::bread.error_updating_bread'));\n        if ($res) {\n            event(new BreadDeleted($dataType, $data));\n        }\n\n        if (!is_null($dataType)) {\n            Voyager::model('Permission')->removeFrom($dataType->name);\n        }\n\n        return redirect()->route('voyager.bread.index')->with($data);\n    }\n\n    public function getModelScopes($model_name)\n    {\n        $reflection = new ReflectionClass($model_name);\n\n        return collect($reflection->getMethods())->filter(function ($method) {\n            return Str::startsWith($method->name, 'scope');\n        })->whereNotIn('name', ['scopeWithTranslations', 'scopeWithTranslation', 'scopeWhereTranslation'])->transform(function ($method) {\n            return lcfirst(Str::replaceFirst('scope', '', $method->name));\n        });\n    }\n\n    // ************************************************************\n    //  _____      _       _   _                 _     _\n    // |  __ \\    | |     | | (_)               | |   (_)\n    // | |__) |___| | __ _| |_ _  ___  _ __  ___| |__  _ _ __  ___\n    // |  _  // _ \\ |/ _` | __| |/ _ \\| '_ \\/ __| '_ \\| | '_ \\/ __|\n    // | | \\ \\  __/ | (_| | |_| | (_) | | | \\__ \\ | | | | |_) \\__ \\\n    // |_|  \\_\\___|_|\\__,_|\\__|_|\\___/|_| |_|___/_| |_|_| .__/|___/\n    //                                                  | |\n    //                                                  |_|\n    // ************************************************************\n\n    /**\n     * Add Relationship.\n     *\n     * @param Request $request\n     */\n    public function addRelationship(Request $request)\n    {\n        $relationshipField = $this->getRelationshipField($request);\n\n        if (!class_exists($request->relationship_model)) {\n            return back()->with([\n                'message'    => 'Model Class '.$request->relationship_model.' does not exist. Please create Model before creating relationship.',\n                'alert-type' => 'error',\n            ]);\n        }\n\n        try {\n            DB::beginTransaction();\n\n            $relationship_column = $request->relationship_column_belongs_to;\n            if ($request->relationship_type == 'hasOne' || $request->relationship_type == 'hasMany') {\n                $relationship_column = $request->relationship_column;\n            }\n\n            // Build the relationship details\n            $relationshipDetails = [\n                'model'       => $request->relationship_model,\n                'table'       => $request->relationship_table,\n                'type'        => $request->relationship_type,\n                'column'      => $relationship_column,\n                'key'         => $request->relationship_key,\n                'label'       => $request->relationship_label,\n                'pivot_table' => $request->relationship_pivot,\n                'pivot'       => ($request->relationship_type == 'belongsToMany') ? '1' : '0',\n                'taggable'    => $request->relationship_taggable,\n            ];\n\n            $className = Voyager::modelClass('DataRow');\n            $newRow = new $className();\n\n            $newRow->data_type_id = $request->data_type_id;\n            $newRow->field = $relationshipField;\n            $newRow->type = 'relationship';\n            $newRow->display_name = $request->relationship_table;\n            $newRow->required = 0;\n\n            foreach (['browse', 'read', 'edit', 'add', 'delete'] as $check) {\n                $newRow->{$check} = 1;\n            }\n\n            $newRow->details = $relationshipDetails;\n            $newRow->order = intval(Voyager::model('DataType')->find($request->data_type_id)->lastRow()->order) + 1;\n\n            if (!$newRow->save()) {\n                return back()->with([\n                    'message'    => 'Error saving new relationship row for '.$request->relationship_table,\n                    'alert-type' => 'error',\n                ]);\n            }\n\n            DB::commit();\n\n            return back()->with([\n                'message'    => 'Successfully created new relationship for '.$request->relationship_table,\n                'alert-type' => 'success',\n            ]);\n        } catch (\\Exception $e) {\n            DB::rollBack();\n\n            return back()->with([\n                'message'    => 'Error creating new relationship: '.$e->getMessage(),\n                'alert-type' => 'error',\n            ]);\n        }\n    }\n\n    /**\n     * Get Relationship Field.\n     *\n     * @param Request $request\n     *\n     * @return string\n     */\n    private function getRelationshipField($request)\n    {\n        // We need to make sure that we aren't creating an already existing field\n\n        $dataType = Voyager::model('DataType')->find($request->data_type_id);\n\n        $field = Str::singular($dataType->name).'_'.$request->relationship_type.'_'.Str::singular($request->relationship_table).'_relationship';\n\n        $relationshipFieldOriginal = $relationshipField = strtolower($field);\n\n        $existingRow = Voyager::model('DataRow')->where('field', '=', $relationshipField)->first();\n        $index = 1;\n\n        while (isset($existingRow->id)) {\n            $relationshipField = $relationshipFieldOriginal.'_'.$index;\n            $existingRow = Voyager::model('DataRow')->where('field', '=', $relationshipField)->first();\n            $index += 1;\n        }\n\n        return $relationshipField;\n    }\n\n    /**\n     * Delete Relationship.\n     *\n     * @param Number $id Record id\n     *\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function deleteRelationship($id)\n    {\n        Voyager::model('DataRow')->destroy($id);\n\n        return back()->with([\n            'message'    => 'Successfully deleted relationship.',\n            'alert-type' => 'success',\n        ]);\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/VoyagerCompassController.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers;\n\nuse Artisan;\nuse Exception;\nuse Illuminate\\Http\\Request;\nuse Symfony\\Component\\HttpKernel\\Exception\\AccessDeniedHttpException;\n\nclass VoyagerCompassController extends Controller\n{\n    protected $request;\n\n    public function __construct()\n    {\n        $this->request = app('request');\n    }\n\n    public function index(Request $request)\n    {\n        // Check permission\n        $this->authorize('browse_compass');\n        //Check if app is not local\n        if (!\\App::environment('local') && !config('voyager.compass_in_production', false)) {\n            throw new AccessDeniedHttpException();\n        }\n\n        $message = '';\n        $active_tab = '';\n\n        if ($this->request->input('log')) {\n            $active_tab = 'logs';\n            LogViewer::setFile(base64_decode($this->request->input('log')));\n        }\n\n        if ($this->request->input('logs')) {\n            $active_tab = 'logs';\n        }\n\n        if ($this->request->input('download')) {\n            $active_tab = 'logs';\n\n            return $this->download(LogViewer::pathToLogFile(base64_decode($this->request->input('download'))));\n        } elseif ($this->request->has('del')) {\n            $active_tab = 'logs';\n            app('files')->delete(LogViewer::pathToLogFile(base64_decode($this->request->input('del'))));\n\n            return redirect($this->request->url().'?logs=true')->with([\n                'message'    => __('voyager::compass.logs.delete_success').' '.base64_decode($this->request->input('del')),\n                'alert-type' => 'success',\n            ]);\n        } elseif ($this->request->has('delall')) {\n            $active_tab = 'logs';\n            foreach (LogViewer::getFiles(true) as $file) {\n                app('files')->delete(LogViewer::pathToLogFile($file));\n            }\n\n            return redirect($this->request->url().'?logs=true')->with([\n                'message'    => __('voyager::compass.logs.delete_all_success'),\n                'alert-type' => 'success',\n            ]);\n        }\n\n        $artisan_output = '';\n\n        if ($request->isMethod('post')) {\n            $command = $request->command;\n            $args = $request->args;\n            $args = (isset($args)) ? ' '.$args : '';\n\n            try {\n                Artisan::call($command.$args);\n                $artisan_output = Artisan::output();\n            } catch (Exception $e) {\n                $artisan_output = $e->getMessage();\n            }\n            $active_tab = 'commands';\n        }\n\n        $logs = LogViewer::all();\n        $files = LogViewer::getFiles(true);\n        $current_file = LogViewer::getFileName();\n\n        // get the full list of artisan commands and store the output\n        $commands = $this->getArtisanCommands();\n\n        return view('voyager::compass.index', compact('logs', 'files', 'current_file', 'active_tab', 'commands', 'artisan_output'))->with($message);\n    }\n\n    private function getArtisanCommands()\n    {\n        Artisan::call('list');\n\n        // Get the output from the previous command\n        $artisan_output = Artisan::output();\n        $artisan_output = $this->cleanArtisanOutput($artisan_output);\n        $commands = $this->getCommandsFromOutput($artisan_output);\n\n        return $commands;\n    }\n\n    private function cleanArtisanOutput($output)\n    {\n\n        // Add each new line to an array item and strip out any empty items\n        $output = array_filter(explode(\"\\n\", $output));\n\n        // Get the current index of: \"Available commands:\"\n        $index = array_search('Available commands:', $output);\n\n        // Remove all commands that precede \"Available commands:\", and remove that\n        // Element itself -1 for offset zero and -1 for the previous index (equals -2)\n        $output = array_slice($output, $index - 2, count($output));\n\n        return $output;\n    }\n\n    private function getCommandsFromOutput($output)\n    {\n        $commands = [];\n\n        foreach ($output as $output_line) {\n            if (empty(trim(substr($output_line, 0, 2)))) {\n                $parts = preg_split('/  +/', trim($output_line));\n                $command = (object) ['name' => trim(@$parts[0]), 'description' => trim(@$parts[1])];\n                array_push($commands, $command);\n            }\n        }\n\n        return $commands;\n    }\n\n    private function download($data)\n    {\n        return response()->download($data);\n    }\n}\n\n/***\n**** Credit for the LogViewer class\n**** https://github.com/rap2hpoutre/laravel-log-viewer\n***/\n\nclass LogViewer\n{\n    /**\n     * @var string file\n     */\n    private static $file;\n\n    private static $levels_classes = [\n        'debug'     => 'info',\n        'info'      => 'info',\n        'notice'    => 'info',\n        'warning'   => 'warning',\n        'error'     => 'danger',\n        'critical'  => 'danger',\n        'alert'     => 'danger',\n        'emergency' => 'danger',\n        'processed' => 'info',\n    ];\n\n    private static $levels_imgs = [\n        'debug'     => 'info',\n        'info'      => 'info',\n        'notice'    => 'info',\n        'warning'   => 'warning',\n        'error'     => 'warning',\n        'critical'  => 'warning',\n        'alert'     => 'warning',\n        'emergency' => 'warning',\n        'processed' => 'info',\n    ];\n\n    /**\n     * Log levels that are used.\n     *\n     * @var array\n     */\n    private static $log_levels = [\n        'emergency',\n        'alert',\n        'critical',\n        'error',\n        'warning',\n        'notice',\n        'info',\n        'debug',\n        'processed',\n    ];\n\n    public const MAX_FILE_SIZE = 52428800; // Why? Uh... Sorry\n\n    /**\n     * @param string $file\n     */\n    public static function setFile($file)\n    {\n        $file = self::pathToLogFile($file);\n\n        if (app('files')->exists($file)) {\n            self::$file = $file;\n        }\n    }\n\n    /**\n     * @param string $file\n     *\n     * @throws \\Exception\n     *\n     * @return string\n     */\n    public static function pathToLogFile($file)\n    {\n        $logsPath = storage_path('logs');\n\n        if (app('files')->exists($file)) { // try the absolute path\n            return $file;\n        }\n\n        $file = $logsPath.'/'.$file;\n\n        // check if requested file is really in the logs directory\n        if (dirname($file) !== $logsPath) {\n            throw new \\Exception('No such log file');\n        }\n\n        return $file;\n    }\n\n    /**\n     * @return string\n     */\n    public static function getFileName()\n    {\n        return basename(self::$file);\n    }\n\n    /**\n     * @return array\n     */\n    public static function all()\n    {\n        $log = [];\n\n        $pattern = '/\\[\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\].*/';\n\n        if (!self::$file) {\n            $log_file = self::getFiles();\n            if (!count($log_file)) {\n                return [];\n            }\n            self::$file = $log_file[0];\n        }\n\n        if (app('files')->size(self::$file) > self::MAX_FILE_SIZE) {\n            return;\n        }\n\n        $file = app('files')->get(self::$file);\n\n        preg_match_all($pattern, $file, $headings);\n\n        if (!is_array($headings)) {\n            return $log;\n        }\n\n        $log_data = preg_split($pattern, $file);\n\n        if ($log_data[0] < 1) {\n            array_shift($log_data);\n        }\n\n        foreach ($headings as $h) {\n            for ($i = 0, $j = count($h); $i < $j; $i++) {\n                foreach (self::$log_levels as $level) {\n                    if (strpos(strtolower($h[$i]), '.'.$level) || strpos(strtolower($h[$i]), $level.':')) {\n                        preg_match('/^\\[(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})\\](?:.*?(\\w+)\\.|.*?)'.$level.': (.*?)( in .*?:[0-9]+)?$/i', $h[$i], $current);\n                        if (!isset($current[3])) {\n                            continue;\n                        }\n\n                        $log[] = [\n                            'context'     => $current[2],\n                            'level'       => $level,\n                            'level_class' => self::$levels_classes[$level],\n                            'level_img'   => self::$levels_imgs[$level],\n                            'date'        => $current[1],\n                            'text'        => $current[3],\n                            'in_file'     => $current[4] ?? null,\n                            'stack'       => preg_replace(\"/^\\n*/\", '', $log_data[$i]),\n                        ];\n                    }\n                }\n            }\n        }\n\n        return array_reverse($log);\n    }\n\n    /**\n     * @param bool $basename\n     *\n     * @return array\n     */\n    public static function getFiles($basename = false)\n    {\n        $files = glob(storage_path().'/logs/*.log');\n        $files = array_reverse($files);\n        $files = array_filter($files, 'is_file');\n        if ($basename && is_array($files)) {\n            foreach ($files as $k => $file) {\n                $files[$k] = basename($file);\n            }\n        }\n\n        return array_values($files);\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/VoyagerController.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\File;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\nuse Intervention\\Image\\Constraint;\nuse Intervention\\Image\\Facades\\Image;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass VoyagerController extends Controller\n{\n    public function index()\n    {\n        return Voyager::view('voyager::index');\n    }\n\n    public function logout()\n    {\n        Auth::logout();\n\n        return redirect()->route('voyager.login');\n    }\n\n    public function upload(Request $request)\n    {\n        $fullFilename = null;\n        $resizeWidth = 1800;\n        $resizeHeight = null;\n        $slug = $request->input('type_slug');\n        $file = $request->file('image');\n\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->firstOrFail();\n\n        if ($this->userCannotUploadImageIn($dataType, 'add') && $this->userCannotUploadImageIn($dataType, 'edit')) {\n            abort(403);\n        }\n\n        $path = $slug.'/'.date('FY').'/';\n\n        $filename = basename($file->getClientOriginalName(), '.'.$file->getClientOriginalExtension());\n        $filename_counter = 1;\n\n        // Make sure the filename does not exist, if it does make sure to add a number to the end 1, 2, 3, etc...\n        while (Storage::disk(config('voyager.storage.disk'))->exists($path.$filename.'.'.$file->getClientOriginalExtension())) {\n            $filename = basename($file->getClientOriginalName(), '.'.$file->getClientOriginalExtension()).(string) ($filename_counter++);\n        }\n\n        $fullPath = $path.$filename.'.'.$file->getClientOriginalExtension();\n\n        $ext = $file->guessClientExtension();\n\n        if (in_array($ext, ['jpeg', 'jpg', 'png', 'gif'])) {\n            $image = Image::make($file)\n                ->resize($resizeWidth, $resizeHeight, function (Constraint $constraint) {\n                    $constraint->aspectRatio();\n                    $constraint->upsize();\n                });\n            if ($ext !== 'gif') {\n                $image->orientate();\n            }\n            $image->encode($file->getClientOriginalExtension(), 75);\n\n            // move uploaded file from temp to uploads directory\n            if (Storage::disk(config('voyager.storage.disk'))->put($fullPath, (string) $image, 'public')) {\n                $status = __('voyager::media.success_uploading');\n                $fullFilename = $fullPath;\n            } else {\n                $status = __('voyager::media.error_uploading');\n            }\n        } else {\n            $status = __('voyager::media.uploading_wrong_type');\n        }\n\n        // Return URL for TinyMCE\n        return Voyager::image($fullFilename);\n    }\n\n    public function assets(Request $request)\n    {\n        try {\n            if (class_exists(\\League\\Flysystem\\Util::class)) {\n                // Flysystem 1.x\n                $path = dirname(__DIR__, 3).'/publishable/assets/'.\\League\\Flysystem\\Util::normalizeRelativePath(urldecode($request->path));\n            } elseif (class_exists(\\League\\Flysystem\\WhitespacePathNormalizer::class)) {\n                // Flysystem >= 2.x\n                $normalizer = new \\League\\Flysystem\\WhitespacePathNormalizer();\n                $path = dirname(__DIR__, 3).'/publishable/assets/'. $normalizer->normalizePath(urldecode($request->path));\n            }\n            \n        } catch (\\LogicException $e) {\n            abort(404);\n        }\n\n        if (File::exists($path)) {\n            $mime = '';\n            if (Str::endsWith($path, '.js')) {\n                $mime = 'text/javascript';\n            } elseif (Str::endsWith($path, '.css')) {\n                $mime = 'text/css';\n            } else {\n                $mime = File::mimeType($path);\n            }\n            $response = response(File::get($path), 200, ['Content-Type' => $mime]);\n            $response->setSharedMaxAge(31536000);\n            $response->setMaxAge(31536000);\n            $response->setExpires(new \\DateTime('+1 year'));\n\n            return $response;\n        }\n\n        return response('', 404);\n    }\n\n    protected function userCannotUploadImageIn($dataType, $action)\n    {\n        return auth()->user()->cannot($action, app($dataType->model_name))\n                || $dataType->{$action.'Rows'}->where('type', 'rich_text_box')->count() === 0;\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/VoyagerDatabaseController.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers;\n\nuse Exception;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Artisan;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Str;\nuse TCG\\Voyager\\Database\\DatabaseUpdater;\nuse TCG\\Voyager\\Database\\Schema\\Column;\nuse TCG\\Voyager\\Database\\Schema\\Identifier;\nuse TCG\\Voyager\\Database\\Schema\\SchemaManager;\nuse TCG\\Voyager\\Database\\Schema\\Table;\nuse TCG\\Voyager\\Database\\Types\\Type;\nuse TCG\\Voyager\\Events\\TableAdded;\nuse TCG\\Voyager\\Events\\TableDeleted;\nuse TCG\\Voyager\\Events\\TableUpdated;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass VoyagerDatabaseController extends Controller\n{\n    public function index()\n    {\n        $this->authorize('browse_database');\n\n        $dataTypes = Voyager::model('DataType')->select('id', 'name', 'slug')->get()->keyBy('name')->toArray();\n\n        $tables = array_map(function ($table) use ($dataTypes) {\n            $table = Str::replaceFirst(DB::getTablePrefix(), '', $table);\n\n            $table = [\n                'prefix'     => DB::getTablePrefix(),\n                'name'       => $table,\n                'slug'       => $dataTypes[$table]['slug'] ?? null,\n                'dataTypeId' => $dataTypes[$table]['id'] ?? null,\n            ];\n\n            return (object) $table;\n        }, SchemaManager::listTableNames());\n\n        return Voyager::view('voyager::tools.database.index')->with(compact('dataTypes', 'tables'));\n    }\n\n    /**\n     * Create database table.\n     *\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function create()\n    {\n        $this->authorize('browse_database');\n\n        $db = $this->prepareDbManager('create');\n\n        return Voyager::view('voyager::tools.database.edit-add', compact('db'));\n    }\n\n    /**\n     * Store new database table.\n     *\n     * @param \\Illuminate\\Http\\Request $request\n     *\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function store(Request $request)\n    {\n        $this->authorize('browse_database');\n\n        try {\n            $conn = 'database.connections.'.config('database.default');\n            Type::registerCustomPlatformTypes();\n\n            $table = $request->table;\n            if (!is_array($request->table)) {\n                $table = json_decode($request->table, true);\n            }\n            $table['options']['collate'] = config($conn.'.collation', 'utf8mb4_unicode_ci');\n            $table['options']['charset'] = config($conn.'.charset', 'utf8mb4');\n            $table = Table::make($table);\n            SchemaManager::createTable($table);\n\n            if (isset($request->create_model) && $request->create_model == 'on') {\n                $modelNamespace = config('voyager.models.namespace', app()->getNamespace());\n                $params = [\n                    'name' => $modelNamespace.Str::studly(Str::singular($table->name)),\n                ];\n\n                // if (in_array('deleted_at', $request->input('field.*'))) {\n                //     $params['--softdelete'] = true;\n                // }\n\n                if (isset($request->create_migration) && $request->create_migration == 'on') {\n                    $params['--migration'] = true;\n                }\n\n                Artisan::call('voyager:make:model', $params);\n            } elseif (isset($request->create_migration) && $request->create_migration == 'on') {\n                Artisan::call('make:migration', [\n                    'name'    => 'create_'.$table->name.'_table',\n                    '--table' => $table->name,\n                ]);\n            }\n\n            event(new TableAdded($table));\n\n            return redirect()\n               ->route('voyager.database.index')\n               ->with($this->alertSuccess(__('voyager::database.success_create_table', ['table' => $table->name])));\n        } catch (Exception $e) {\n            return back()->with($this->alertException($e))->withInput();\n        }\n    }\n\n    /**\n     * Edit database table.\n     *\n     * @param string $table\n     *\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function edit($table)\n    {\n        $this->authorize('browse_database');\n\n        if (!SchemaManager::tableExists($table)) {\n            return redirect()\n                ->route('voyager.database.index')\n                ->with($this->alertError(__('voyager::database.edit_table_not_exist')));\n        }\n\n        $db = $this->prepareDbManager('update', $table);\n\n        return Voyager::view('voyager::tools.database.edit-add', compact('db'));\n    }\n\n    /**\n     * Update database table.\n     *\n     * @param \\Illuminate\\Http\\Request $request\n     *\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function update(Request $request)\n    {\n        $this->authorize('browse_database');\n\n        $table = json_decode($request->table, true);\n\n        try {\n            DatabaseUpdater::update($table);\n            // TODO: synch BREAD with Table\n            // $this->cleanOldAndCreateNew($request->original_name, $request->name);\n            event(new TableUpdated($table));\n        } catch (Exception $e) {\n            return back()->with($this->alertException($e))->withInput();\n        }\n\n        return redirect()\n               ->route('voyager.database.index')\n               ->with($this->alertSuccess(__('voyager::database.success_create_table', ['table' => $table['name']])));\n    }\n\n    protected function prepareDbManager($action, $table = '')\n    {\n        $db = new \\stdClass();\n\n        // Need to get the types first to register custom types\n        $db->types = Type::getPlatformTypes();\n\n        if ($action == 'update') {\n            $db->table = SchemaManager::listTableDetails($table);\n            $db->formAction = route('voyager.database.update', $table);\n        } else {\n            $db->table = new Table('New Table');\n\n            // Add prefilled columns\n            $db->table->addColumn('id', 'integer', [\n                'unsigned'      => true,\n                'notnull'       => true,\n                'autoincrement' => true,\n            ]);\n\n            $db->table->setPrimaryKey(['id'], 'primary');\n\n            $db->formAction = route('voyager.database.store');\n        }\n\n        $oldTable = old('table');\n        $db->oldTable = $oldTable ? $oldTable : json_encode(null);\n        $db->action = $action;\n        $db->identifierRegex = Identifier::REGEX;\n        $db->platform = SchemaManager::getDatabasePlatform()->getName();\n\n        return $db;\n    }\n\n    public function cleanOldAndCreateNew($originalName, $tableName)\n    {\n        if (!empty($originalName) && $originalName != $tableName) {\n            $dt = DB::table('data_types')->where('name', $originalName);\n            if ($dt->get()) {\n                $dt->delete();\n            }\n\n            $perm = DB::table('permissions')->where('table_name', $originalName);\n            if ($perm->get()) {\n                $perm->delete();\n            }\n\n            $params = ['name' => Str::studly(Str::singular($tableName))];\n            Artisan::call('voyager:make:model', $params);\n        }\n    }\n\n    public function reorder_column(Request $request)\n    {\n        $this->authorize('browse_database');\n\n        if ($request->ajax()) {\n            $table = $request->table;\n            $column = $request->column;\n            $after = $request->after;\n            if ($after == null) {\n                // SET COLUMN TO THE TOP\n                DB::query(\"ALTER $table MyTable CHANGE COLUMN $column FIRST\");\n            }\n\n            return 1;\n        }\n\n        return 0;\n    }\n\n    /**\n     * Show table.\n     *\n     * @param string $table\n     *\n     * @return JSON\n     */\n    public function show($table)\n    {\n        $this->authorize('browse_database');\n\n        $additional_attributes = [];\n        $model_name = Voyager::model('DataType')->where('name', $table)->pluck('model_name')->first();\n        if (isset($model_name)) {\n            $model = app($model_name);\n            if (isset($model->additional_attributes)) {\n                foreach ($model->additional_attributes as $attribute) {\n                    $additional_attributes[$attribute] = [];\n                }\n            }\n        }\n\n        return response()->json(collect(SchemaManager::describeTable($table))->merge($additional_attributes));\n    }\n\n    /**\n     * Destroy table.\n     *\n     * @param string $table\n     *\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function destroy($table)\n    {\n        $this->authorize('browse_database');\n\n        try {\n            SchemaManager::dropTable($table);\n            event(new TableDeleted($table));\n\n            return redirect()\n                ->route('voyager.database.index')\n                ->with($this->alertSuccess(__('voyager::database.success_delete_table', ['table' => $table])));\n        } catch (Exception $e) {\n            return back()->with($this->alertException($e));\n        }\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/VoyagerMediaController.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers;\n\nuse Exception;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\nuse Intervention\\Image\\Facades\\Image;\nuse TCG\\Voyager\\Events\\MediaFileAdded;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass VoyagerMediaController extends Controller\n{\n    /** @var string */\n    private $filesystem;\n\n    /** @var string */\n    private $directory = '';\n\n    public function __construct()\n    {\n        $this->filesystem = config('voyager.storage.disk');\n    }\n\n    public function index()\n    {\n        // Check permission\n        $this->authorize('browse_media');\n\n        return Voyager::view('voyager::media.index');\n    }\n\n    public function files(Request $request)\n    {\n        // Check permission\n        $this->authorize('browse_media');\n\n        $options = $request->details ?? [];\n        $thumbnail_names = [];\n        $thumbnails = [];\n        if (!($options->hide_thumbnails ?? false)) {\n            $thumbnail_names = array_column(($options['thumbnails'] ?? []), 'name');\n        }\n\n        $folder = $request->folder;\n\n        if ($folder == '/') {\n            $folder = '';\n        }\n\n        $dir = $this->directory.$folder;\n\n        $files = [];\n        if (class_exists(\\League\\Flysystem\\Plugin\\ListWith::class)) {\n            $storage = Storage::disk($this->filesystem)->addPlugin(new \\League\\Flysystem\\Plugin\\ListWith());\n            $storageItems = $storage->listWith(['mimetype'], $dir);\n        } else {\n            $storage = Storage::disk($this->filesystem);\n            $storageItems = $storage->listContents($dir)->sortByPath()->toArray();\n        }\n\n        foreach ($storageItems as $item) {\n            if ($item['type'] == 'dir') {\n                $files[] = [\n                    'name'          => $item['basename'] ?? basename($item['path']),\n                    'type'          => 'folder',\n                    'path'          => Storage::disk($this->filesystem)->url($item['path']),\n                    'relative_path' => $item['path'],\n                    'items'         => '',\n                    'last_modified' => '',\n                ];\n            } else {\n                if (empty(pathinfo($item['path'], PATHINFO_FILENAME)) && !config('voyager.hidden_files')) {\n                    continue;\n                }\n                // Its a thumbnail and thumbnails should be hidden\n                if (Str::endsWith($item['path'], $thumbnail_names)) {\n                    $thumbnails[] = $item;\n                    continue;\n                }\n                $mime = 'file';\n                if (class_exists(\\League\\MimeTypeDetection\\ExtensionMimeTypeDetector::class)) {\n                    $mime = (new \\League\\MimeTypeDetection\\ExtensionMimeTypeDetector())->detectMimeTypeFromFile($item['path']);\n                }\n                $files[] = [\n                    'name'          => $item['basename'] ?? basename($item['path']),\n                    'filename'      => $item['filename'] ?? basename($item['path'], '.'.pathinfo($item['path'])['extension']),\n                    'type'          => $item['mimetype'] ?? $mime,\n                    'path'          => Storage::disk($this->filesystem)->url($item['path']),\n                    'relative_path' => $item['path'],\n                    'size'          => $item['size'] ?? $item->fileSize(),\n                    'last_modified' => $item['timestamp'] ?? $item->lastModified(),\n                    'thumbnails'    => [],\n                ];\n            }\n        }\n\n        foreach ($files as $key => $file) {\n            foreach ($thumbnails as $thumbnail) {\n                if ($file['type'] != 'folder' && Str::startsWith($thumbnail['filename'], $file['filename'])) {\n                    $thumbnail['thumb_name'] = str_replace($file['filename'].'-', '', $thumbnail['filename']);\n                    $thumbnail['path'] = Storage::disk($this->filesystem)->url($thumbnail['path']);\n                    $files[$key]['thumbnails'][] = $thumbnail;\n                }\n            }\n        }\n\n        return response()->json($files);\n    }\n\n    public function new_folder(Request $request)\n    {\n        // Check permission\n        $this->authorize('browse_media');\n\n        $new_folder = $request->new_folder;\n        $success = false;\n        $error = '';\n\n        if (Storage::disk($this->filesystem)->exists($new_folder)) {\n            $error = __('voyager::media.folder_exists_already');\n        } elseif (Storage::disk($this->filesystem)->makeDirectory($new_folder)) {\n            $success = true;\n        } else {\n            $error = __('voyager::media.error_creating_dir');\n        }\n\n        return compact('success', 'error');\n    }\n\n    public function delete(Request $request)\n    {\n        // Check permission\n        $this->authorize('browse_media');\n\n        $path = str_replace('//', '/', Str::finish($request->path, '/'));\n        $success = true;\n        $error = '';\n\n        foreach ($request->get('files') as $file) {\n            $file_path = $path.$file['name'];\n            if ($file['type'] == 'folder') {\n                if (!Storage::disk($this->filesystem)->deleteDirectory($file_path)) {\n                    $error = __('voyager::media.error_deleting_folder');\n                    $success = false;\n                }\n            } elseif (!Storage::disk($this->filesystem)->delete($file_path)) {\n                $error = __('voyager::media.error_deleting_file');\n                $success = false;\n            }\n        }\n\n        return compact('success', 'error');\n    }\n\n    public function move(Request $request)\n    {\n        // Check permission\n        $this->authorize('browse_media');\n        $path = str_replace('//', '/', Str::finish($request->path, '/'));\n        $dest = str_replace('//', '/', Str::finish($request->destination, '/'));\n        if (strpos($dest, '/../') !== false) {\n            $dest = substr($path, 0, -1);\n            $dest = substr($dest, 0, strripos($dest, '/') + 1);\n        }\n        $dest = str_replace('//', '/', Str::finish($dest, '/'));\n\n        $success = true;\n        $error = '';\n\n        foreach ($request->get('files') as $file) {\n            $old_path = $path.$file['name'];\n            $new_path = $dest.$file['name'];\n\n            try {\n                Storage::disk($this->filesystem)->move($old_path, $new_path);\n            } catch (\\Exception $ex) {\n                $success = false;\n                $error = $ex->getMessage();\n\n                return compact('success', 'error');\n            }\n        }\n\n        return compact('success', 'error');\n    }\n\n    public function rename(Request $request)\n    {\n        // Check permission\n        $this->authorize('browse_media');\n\n        $folderLocation = $request->folder_location;\n        $filename = $request->filename;\n        $newFilename = $request->new_filename;\n        $success = false;\n        $error = false;\n\n        if (pathinfo($filename)['extension'] !== pathinfo($newFilename)['extension']) {\n            $error = __('voyager::media.error_renaming_ext');\n        } else {\n            if (is_array($folderLocation)) {\n                $folderLocation = rtrim(implode('/', $folderLocation), '/');\n            }\n\n            $location = \"{$this->directory}/{$folderLocation}\";\n\n            if (!Storage::disk($this->filesystem)->exists(\"{$location}/{$newFilename}\")) {\n                if (Storage::disk($this->filesystem)->move(\"{$location}/{$filename}\", \"{$location}/{$newFilename}\")) {\n                    $success = true;\n                } else {\n                    $error = __('voyager::media.error_moving');\n                }\n            } else {\n                $error = __('voyager::media.error_may_exist');\n            }\n        }\n\n        return compact('success', 'error');\n    }\n\n    public function upload(Request $request)\n    {\n        // Check permission\n        $this->authorize('browse_media');\n\n        $extension = $request->file->getClientOriginalExtension();\n        $name = Str::replaceLast('.'.$extension, '', $request->file->getClientOriginalName());\n        $details = json_decode($request->get('details') ?? '{}');\n        $absolute_path = Storage::disk($this->filesystem)->path($request->upload_path);\n\n        try {\n            $realPath = Storage::disk($this->filesystem)->path('/');\n\n            $allowedMimeTypes = config('voyager.media.allowed_mimetypes', '*');\n            if ($allowedMimeTypes != '*' && (is_array($allowedMimeTypes) && !in_array($request->file->getMimeType(), $allowedMimeTypes))) {\n                throw new Exception(__('voyager::generic.mimetype_not_allowed'));\n            }\n\n            if (!$request->has('filename') || $request->get('filename') == 'null') {\n                while (Storage::disk($this->filesystem)->exists(Str::finish($request->upload_path, '/').$name.'.'.$extension, $this->filesystem)) {\n                    $name = get_file_name($name);\n                }\n            } else {\n                $name = str_replace('{uid}', Auth::user()->getKey(), $request->get('filename'));\n                if (Str::contains($name, '{date:')) {\n                    $name = preg_replace_callback('/\\{date:([^\\/\\}]*)\\}/', function ($date) {\n                        return \\Carbon\\Carbon::now()->format($date[1]);\n                    }, $name);\n                }\n                if (Str::contains($name, '{random:')) {\n                    $name = preg_replace_callback('/\\{random:([0-9]+)\\}/', function ($random) {\n                        return Str::random($random[1]);\n                    }, $name);\n                }\n            }\n\n            $file = $request->file->storeAs($request->upload_path, $name.'.'.$extension, $this->filesystem);\n            $file = preg_replace('#/+#', '/', $file);\n\n            $imageMimeTypes = [\n                'image/jpeg',\n                'image/png',\n                'image/gif',\n                'image/bmp',\n                'image/svg+xml',\n            ];\n            if (in_array($request->file->getMimeType(), $imageMimeTypes)) {\n                $content = Storage::disk($this->filesystem)->get($file);\n                $image = Image::make($content);\n\n                if ($request->file->getClientOriginalExtension() == 'gif') {\n                    copy($request->file->getRealPath(), $realPath.$file);\n                } else {\n                    $image = $image->orientate();\n                    // Generate thumbnails\n                    if (property_exists($details, 'thumbnails') && is_array($details->thumbnails)) {\n                        foreach ($details->thumbnails as $thumbnail_data) {\n                            $type = $thumbnail_data->type ?? 'fit';\n                            $thumbnail = Image::make(clone $image);\n                            if ($type == 'fit') {\n                                $thumbnail = $thumbnail->fit(\n                                    $thumbnail_data->width,\n                                    ($thumbnail_data->height ?? null),\n                                    function ($constraint) {\n                                        $constraint->aspectRatio();\n                                    },\n                                    ($thumbnail_data->position ?? 'center')\n                                );\n                            } elseif ($type == 'crop') {\n                                $thumbnail = $thumbnail->crop(\n                                    $thumbnail_data->width,\n                                    $thumbnail_data->height,\n                                    ($thumbnail_data->x ?? null),\n                                    ($thumbnail_data->y ?? null)\n                                );\n                            } elseif ($type == 'resize') {\n                                $thumbnail = $thumbnail->resize(\n                                    $thumbnail_data->width,\n                                    ($thumbnail_data->height ?? null),\n                                    function ($constraint) use ($thumbnail_data) {\n                                        $constraint->aspectRatio();\n                                        if (!($thumbnail_data->upsize ?? true)) {\n                                            $constraint->upsize();\n                                        }\n                                    }\n                                );\n                            }\n                            if (\n                                property_exists($details, 'watermark') &&\n                                property_exists($details->watermark, 'source') &&\n                                property_exists($thumbnail_data, 'watermark') &&\n                                $thumbnail_data->watermark\n                            ) {\n                                $thumbnail = $this->addWatermarkToImage($thumbnail, $details->watermark);\n                            }\n                            $thumbnail_file = $request->upload_path.$name.'-'.($thumbnail_data->name ?? 'thumbnail').'.'.$extension;\n                            Storage::disk($this->filesystem)->put($thumbnail_file, $thumbnail->encode($extension, ($details->quality ?? 90))->encoded);\n                        }\n                    }\n                    // Add watermark to image\n                    if (property_exists($details, 'watermark') && property_exists($details->watermark, 'source')) {\n                        $image = $this->addWatermarkToImage($image, $details->watermark);\n                    }\n                    Storage::disk($this->filesystem)->put($file, $image->encode($extension, ($details->quality ?? 90))->encoded);\n                }\n            }\n\n            $success = true;\n            $message = __('voyager::media.success_uploaded_file');\n            $path = preg_replace('/^public\\//', '', $file);\n\n            event(new MediaFileAdded($path));\n        } catch (Exception $e) {\n            $success = false;\n            $message = $e->getMessage();\n            $path = '';\n        }\n\n        return response()->json(compact('success', 'message', 'path'));\n    }\n\n    public function crop(Request $request)\n    {\n        // Check permission\n        $this->authorize('browse_media');\n\n        $createMode = $request->get('createMode') === 'true';\n        $x = $request->get('x');\n        $y = $request->get('y');\n        $height = $request->get('height');\n        $width = $request->get('width');\n\n        $realPath = Storage::disk($this->filesystem)->path('/');\n        $originImagePath = $request->upload_path.'/'.$request->originImageName;\n        $originImagePath = preg_replace('#/+#', '/', $originImagePath);\n\n        try {\n            if ($createMode) {\n                // create a new image with the cpopped data\n                $fileNameParts = explode('.', $request->originImageName);\n                array_splice($fileNameParts, count($fileNameParts) - 1, 0, 'cropped_'.time());\n                $newImageName = implode('.', $fileNameParts);\n                $destImagePath = preg_replace('#/+#', '/', $request->upload_path.'/'.$newImageName);\n            } else {\n                // override the original image\n                $destImagePath = $originImagePath;\n            }\n\n            $content = Storage::disk($this->filesystem)->get($originImagePath);\n            $image = Image::make($content)->crop($width, $height, $x, $y);\n            Storage::disk($this->filesystem)->put($destImagePath, $image->encode()->encoded);\n\n            $success = true;\n            $message = __('voyager::media.success_crop_image');\n        } catch (Exception $e) {\n            $success = false;\n            $message = $e->getMessage();\n        }\n\n        return response()->json(compact('success', 'message'));\n    }\n\n    private function addWatermarkToImage($image, $options)\n    {\n        $watermark = Image::make(Storage::disk($this->filesystem)->path($options->source));\n        // Resize watermark\n        $width = $image->width() * (($options->size ?? 15) / 100);\n        $watermark->resize($width, null, function ($constraint) {\n            $constraint->aspectRatio();\n        });\n\n        return $image->insert(\n            $watermark,\n            ($options->position ?? 'top-left'),\n            ($options->x ?? 0),\n            ($options->y ?? 0)\n        );\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/VoyagerMenuController.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Arr;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass VoyagerMenuController extends Controller\n{\n    public function builder($id)\n    {\n        $menu = Voyager::model('Menu')->findOrFail($id);\n\n        $this->authorize('edit', $menu);\n\n        $isModelTranslatable = is_bread_translatable(Voyager::model('MenuItem'));\n\n        return Voyager::view('voyager::menus.builder', compact('menu', 'isModelTranslatable'));\n    }\n\n    public function delete_menu($menu, $id)\n    {\n        $item = Voyager::model('MenuItem')->findOrFail($id);\n\n        $this->authorize('delete', $item);\n\n        $item->deleteAttributeTranslation('title');\n\n        $item->destroy($id);\n\n        return redirect()\n            ->route('voyager.menus.builder', [$menu])\n            ->with([\n                'message'    => __('voyager::menu_builder.successfully_deleted'),\n                'alert-type' => 'success',\n            ]);\n    }\n\n    public function add_item(Request $request)\n    {\n        $menu = Voyager::model('Menu');\n\n        $this->authorize('add', $menu);\n\n        $data = $this->prepareParameters(\n            $request->all()\n        );\n\n        unset($data['id']);\n        $data['order'] = Voyager::model('MenuItem')->highestOrderMenuItem();\n\n        // Check if is translatable\n        $_isTranslatable = is_bread_translatable(Voyager::model('MenuItem'));\n        if ($_isTranslatable) {\n            // Prepare data before saving the menu\n            $trans = $this->prepareMenuTranslations($data);\n        }\n\n        $menuItem = Voyager::model('MenuItem')->create($data);\n\n        // Save menu translations\n        if ($_isTranslatable) {\n            $menuItem->setAttributeTranslations('title', $trans, true);\n        }\n\n        return redirect()\n            ->route('voyager.menus.builder', [$data['menu_id']])\n            ->with([\n                'message'    => __('voyager::menu_builder.successfully_created'),\n                'alert-type' => 'success',\n            ]);\n    }\n\n    public function update_item(Request $request)\n    {\n        $id = $request->input('id');\n        $data = $this->prepareParameters(\n            $request->except(['id'])\n        );\n\n        $menuItem = Voyager::model('MenuItem')->findOrFail($id);\n\n        $this->authorize('edit', $menuItem->menu);\n\n        if (is_bread_translatable($menuItem)) {\n            $trans = $this->prepareMenuTranslations($data);\n\n            // Save menu translations\n            $menuItem->setAttributeTranslations('title', $trans, true);\n        }\n\n        $menuItem->update($data);\n\n        return redirect()\n            ->route('voyager.menus.builder', [$menuItem->menu_id])\n            ->with([\n                'message'    => __('voyager::menu_builder.successfully_updated'),\n                'alert-type' => 'success',\n            ]);\n    }\n\n    public function order_item(Request $request)\n    {\n        $menuItemOrder = json_decode($request->input('order'));\n\n        $this->orderMenu($menuItemOrder, null);\n    }\n\n    private function orderMenu(array $menuItems, $parentId)\n    {\n        foreach ($menuItems as $index => $menuItem) {\n            $item = Voyager::model('MenuItem')->findOrFail($menuItem->id);\n            $item->order = $index + 1;\n            $item->parent_id = $parentId;\n            $item->save();\n\n            if (isset($menuItem->children)) {\n                $this->orderMenu($menuItem->children, $item->id);\n            }\n        }\n    }\n\n    protected function prepareParameters($parameters)\n    {\n        switch (Arr::get($parameters, 'type')) {\n            case 'route':\n                $parameters['url'] = null;\n                break;\n            default:\n                $parameters['route'] = null;\n                $parameters['parameters'] = '';\n                break;\n        }\n\n        if (isset($parameters['type'])) {\n            unset($parameters['type']);\n        }\n\n        return $parameters;\n    }\n\n    /**\n     * Prepare menu translations.\n     *\n     * @param array $data menu data\n     *\n     * @return JSON translated item\n     */\n    protected function prepareMenuTranslations(&$data)\n    {\n        $trans = json_decode($data['title_i18n'], true);\n\n        // Set field value with the default locale\n        $data['title'] = $trans[config('voyager.multilingual.default', 'en')];\n\n        unset($data['title_i18n']);     // Remove hidden input holding translations\n        unset($data['i18n_selector']);  // Remove language selector input radio\n\n        return $trans;\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/VoyagerRoleController.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass VoyagerRoleController extends VoyagerBaseController\n{\n    // POST BR(E)AD\n    public function update(Request $request, $id)\n    {\n        $slug = $this->getSlug($request);\n\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        // Check permission\n        $this->authorize('edit', app($dataType->model_name));\n\n        //Validate fields\n        $val = $this->validateBread($request->all(), $dataType->editRows, $dataType->name, $id)->validate();\n\n        $data = call_user_func([$dataType->model_name, 'findOrFail'], $id);\n        $this->insertUpdateData($request, $slug, $dataType->editRows, $data);\n\n        $data->permissions()->sync($request->input('permissions', []));\n\n        return redirect()\n            ->route(\"voyager.{$dataType->slug}.index\")\n            ->with([\n                'message'    => __('voyager::generic.successfully_updated').\" {$dataType->getTranslatedAttribute('display_name_singular')}\",\n                'alert-type' => 'success',\n            ]);\n    }\n\n    // POST BRE(A)D\n    public function store(Request $request)\n    {\n        $slug = $this->getSlug($request);\n\n        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();\n\n        // Check permission\n        $this->authorize('add', app($dataType->model_name));\n\n        //Validate fields\n        $val = $this->validateBread($request->all(), $dataType->addRows)->validate();\n\n        $data = new $dataType->model_name();\n        $this->insertUpdateData($request, $slug, $dataType->addRows, $data);\n\n        $data->permissions()->sync($request->input('permissions', []));\n\n        return redirect()\n            ->route(\"voyager.{$dataType->slug}.index\")\n            ->with([\n                'message'    => __('voyager::generic.successfully_added_new').\" {$dataType->getTranslatedAttribute('display_name_singular')}\",\n                'alert-type' => 'success',\n            ]);\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/VoyagerSettingsController.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass VoyagerSettingsController extends Controller\n{\n    public function index()\n    {\n        // Check permission\n        $this->authorize('browse', Voyager::model('Setting'));\n\n        $data = Voyager::model('Setting')->orderBy('order', 'ASC')->get();\n\n        $settings = [];\n        $settings[__('voyager::settings.group_general')] = [];\n        foreach ($data as $d) {\n            if ($d->group == '' || $d->group == __('voyager::settings.group_general')) {\n                $settings[__('voyager::settings.group_general')][] = $d;\n            } else {\n                $settings[$d->group][] = $d;\n            }\n        }\n        if (count($settings[__('voyager::settings.group_general')]) == 0) {\n            unset($settings[__('voyager::settings.group_general')]);\n        }\n\n        $groups_data = Voyager::model('Setting')->select('group')->distinct()->get();\n        $groups = [];\n        foreach ($groups_data as $group) {\n            if ($group->group != '') {\n                $groups[] = $group->group;\n            }\n        }\n\n        $active = (request()->session()->has('setting_tab')) ? request()->session()->get('setting_tab') : old('setting_tab', key($settings));\n\n        return Voyager::view('voyager::settings.index', compact('settings', 'groups', 'active'));\n    }\n\n    public function store(Request $request)\n    {\n        // Check permission\n        $this->authorize('add', Voyager::model('Setting'));\n\n        $key = implode('.', [Str::slug($request->input('group')), $request->input('key')]);\n        $key_check = Voyager::model('Setting')->where('key', $key)->get()->count();\n\n        if ($key_check > 0) {\n            return back()->with([\n                'message'    => __('voyager::settings.key_already_exists', ['key' => $key]),\n                'alert-type' => 'error',\n            ]);\n        }\n\n        $lastSetting = Voyager::model('Setting')->orderBy('order', 'DESC')->first();\n\n        if (is_null($lastSetting)) {\n            $order = 0;\n        } else {\n            $order = intval($lastSetting->order) + 1;\n        }\n\n        $request->merge(['order' => $order]);\n        $request->merge(['value' => '']);\n        $request->merge(['key' => $key]);\n\n        Voyager::model('Setting')->create($request->except('setting_tab'));\n\n        request()->flashOnly('setting_tab');\n\n        return back()->with([\n            'message'    => __('voyager::settings.successfully_created'),\n            'alert-type' => 'success',\n        ]);\n    }\n\n    public function update(Request $request)\n    {\n        // Check permission\n        $this->authorize('edit', Voyager::model('Setting'));\n\n        $settings = Voyager::model('Setting')->all();\n\n        foreach ($settings as $setting) {\n            $content = $this->getContentBasedOnType($request, 'settings', (object) [\n                'type'    => $setting->type,\n                'field'   => str_replace('.', '_', $setting->key),\n                'group'   => $setting->group,\n            ], $setting->details);\n\n            if ($setting->type == 'image' && $content == null) {\n                continue;\n            }\n\n            if ($setting->type == 'file' && $content == null) {\n                continue;\n            }\n\n            $key = preg_replace('/^'.Str::slug($setting->group).'./i', '', $setting->key);\n\n            $setting->group = $request->input(str_replace('.', '_', $setting->key).'_group');\n            $setting->key = implode('.', [Str::slug($setting->group), $key]);\n            $setting->value = $content;\n            $setting->save();\n        }\n\n        request()->flashOnly('setting_tab');\n\n        return back()->with([\n            'message'    => __('voyager::settings.successfully_saved'),\n            'alert-type' => 'success',\n        ]);\n    }\n\n    public function delete($id)\n    {\n        // Check permission\n        $this->authorize('delete', Voyager::model('Setting'));\n\n        $setting = Voyager::model('Setting')->find($id);\n\n        Voyager::model('Setting')->destroy($id);\n\n        request()->session()->flash('setting_tab', $setting->group);\n\n        return back()->with([\n            'message'    => __('voyager::settings.successfully_deleted'),\n            'alert-type' => 'success',\n        ]);\n    }\n\n    public function move_up($id)\n    {\n        // Check permission\n        $this->authorize('edit', Voyager::model('Setting'));\n\n        $setting = Voyager::model('Setting')->find($id);\n\n        // Check permission\n        $this->authorize('browse', $setting);\n\n        $swapOrder = $setting->order;\n        $previousSetting = Voyager::model('Setting')\n                            ->where('order', '<', $swapOrder)\n                            ->where('group', $setting->group)\n                            ->orderBy('order', 'DESC')->first();\n        $data = [\n            'message'    => __('voyager::settings.already_at_top'),\n            'alert-type' => 'error',\n        ];\n\n        if (isset($previousSetting->order)) {\n            $setting->order = $previousSetting->order;\n            $setting->save();\n            $previousSetting->order = $swapOrder;\n            $previousSetting->save();\n\n            $data = [\n                'message'    => __('voyager::settings.moved_order_up', ['name' => $setting->display_name]),\n                'alert-type' => 'success',\n            ];\n        }\n\n        request()->session()->flash('setting_tab', $setting->group);\n\n        return back()->with($data);\n    }\n\n    public function delete_value($id)\n    {\n        $setting = Voyager::model('Setting')->find($id);\n\n        // Check permission\n        $this->authorize('delete', $setting);\n\n        if (isset($setting->id)) {\n            // If the type is an image... Then delete it\n            if ($setting->type == 'image') {\n                if (Storage::disk(config('voyager.storage.disk'))->exists($setting->value)) {\n                    Storage::disk(config('voyager.storage.disk'))->delete($setting->value);\n                }\n            }\n            $setting->value = '';\n            $setting->save();\n        }\n\n        request()->session()->flash('setting_tab', $setting->group);\n\n        return back()->with([\n            'message'    => __('voyager::settings.successfully_removed', ['name' => $setting->display_name]),\n            'alert-type' => 'success',\n        ]);\n    }\n\n    public function move_down($id)\n    {\n        // Check permission\n        $this->authorize('edit', Voyager::model('Setting'));\n\n        $setting = Voyager::model('Setting')->find($id);\n\n        // Check permission\n        $this->authorize('browse', $setting);\n\n        $swapOrder = $setting->order;\n\n        $previousSetting = Voyager::model('Setting')\n                            ->where('order', '>', $swapOrder)\n                            ->where('group', $setting->group)\n                            ->orderBy('order', 'ASC')->first();\n        $data = [\n            'message'    => __('voyager::settings.already_at_bottom'),\n            'alert-type' => 'error',\n        ];\n\n        if (isset($previousSetting->order)) {\n            $setting->order = $previousSetting->order;\n            $setting->save();\n            $previousSetting->order = $swapOrder;\n            $previousSetting->save();\n\n            $data = [\n                'message'    => __('voyager::settings.moved_order_down', ['name' => $setting->display_name]),\n                'alert-type' => 'success',\n            ];\n        }\n\n        request()->session()->flash('setting_tab', $setting->group);\n\n        return back()->with($data);\n    }\n}\n"
  },
  {
    "path": "src/Http/Controllers/VoyagerUserController.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass VoyagerUserController extends VoyagerBaseController\n{\n    public function profile(Request $request)\n    {\n        $route = '';\n        $dataType = Voyager::model('DataType')->where('model_name', Auth::guard(app('VoyagerGuard'))->getProvider()->getModel())->first();\n        if (!$dataType && app('VoyagerGuard') == 'web') {\n            $route = route('voyager.users.edit', Auth::user()->getKey());\n        } elseif ($dataType) {\n            $route = route('voyager.'.$dataType->slug.'.edit', Auth::user()->getKey());\n        }\n\n        return Voyager::view('voyager::profile', compact('route'));\n    }\n\n    // POST BR(E)AD\n    public function update(Request $request, $id)\n    {\n        if (Auth::user()->getKey() == $id) {\n            $request->merge([\n                'role_id'                              => Auth::user()->role_id,\n                'user_belongstomany_role_relationship' => Auth::user()->roles->pluck('id')->toArray(),\n            ]);\n        }\n\n        return parent::update($request, $id);\n    }\n}\n"
  },
  {
    "path": "src/Http/Middleware/VoyagerAdminMiddleware.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass VoyagerAdminMiddleware\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param \\Illuminate\\Http\\Request $request\n     * @param \\Closure                 $next\n     *\n     * @return mixed\n     */\n    public function handle($request, Closure $next)\n    {\n        auth()->setDefaultDriver(app('VoyagerGuard'));\n\n        if (!Auth::guest()) {\n            $user = Auth::user();\n            app()->setLocale($user->locale ?? app()->getLocale());\n\n            return $user->hasPermission('browse_admin') ? $next($request) : redirect('/');\n        }\n\n        $urlLogin = route('voyager.login');\n\n        return redirect()->guest($urlLogin);\n    }\n}\n"
  },
  {
    "path": "src/Listeners/AddBreadMenuItem.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Listeners;\n\nuse TCG\\Voyager\\Events\\BreadAdded;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass AddBreadMenuItem\n{\n    /**\n     * Create the event listener.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Create a MenuItem for a given BREAD.\n     *\n     * @param BreadAdded $event\n     *\n     * @return void\n     */\n    public function handle(BreadAdded $bread)\n    {\n        if (config('voyager.bread.add_menu_item') && file_exists(base_path('routes/web.php'))) {\n            $menu = Voyager::model('Menu')->where('name', config('voyager.bread.default_menu'))->firstOrFail();\n\n            $menuItem = Voyager::model('MenuItem')->firstOrNew([\n                'menu_id' => $menu->id,\n                'title'   => $bread->dataType->getTranslatedAttribute('display_name_plural'),\n                'url'     => '',\n                'route'   => 'voyager.'.$bread->dataType->slug.'.index',\n            ]);\n\n            $order = Voyager::model('MenuItem')->highestOrderMenuItem();\n\n            if (!$menuItem->exists) {\n                $menuItem->fill([\n                    'target'     => '_self',\n                    'icon_class' => $bread->dataType->icon,\n                    'color'      => null,\n                    'parent_id'  => null,\n                    'order'      => $order,\n                ])->save();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Listeners/AddBreadPermission.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Listeners;\n\nuse TCG\\Voyager\\Events\\BreadAdded;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass AddBreadPermission\n{\n    /**\n     * Create the event listener.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Create Permission for a given BREAD.\n     *\n     * @param BreadAdded $event\n     *\n     * @return void\n     */\n    public function handle(BreadAdded $bread)\n    {\n        if (config('voyager.bread.add_permission') && file_exists(base_path('routes/web.php'))) {\n            // Create permission\n            //\n            // Permission::generateFor(Str::snake($bread->dataType->slug));\n            $role = Voyager::model('Role')->where('name', config('voyager.bread.default_role'))->firstOrFail();\n\n            // Get permission for added table\n            $permissions = Voyager::model('Permission')->where(['table_name' => $bread->dataType->name])->get()->pluck('id')->all();\n\n            // Assign permission to admin\n            $role->permissions()->attach($permissions);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Listeners/ClearCachedSettingValue.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Listeners;\n\nuse Cache;\nuse TCG\\Voyager\\Events\\SettingUpdated;\n\nclass ClearCachedSettingValue\n{\n    /**\n     * Create the event listener.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * handle.\n     *\n     * @param SettingUpdated $event\n     *\n     * @return void\n     */\n    public function handle(SettingUpdated $event)\n    {\n        if (config('voyager.settings.cache', false) === true) {\n            Cache::tags('settings')->forget($event->setting->key);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Listeners/DeleteBreadMenuItem.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Listeners;\n\nuse TCG\\Voyager\\Events\\BreadDeleted;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass DeleteBreadMenuItem\n{\n    /**\n     * Create the event listener.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Delete a MenuItem for a given BREAD.\n     *\n     * @param BreadDeleted $bread\n     *\n     * @return void\n     */\n    public function handle(BreadDeleted $bread)\n    {\n        if (config('voyager.bread.add_menu_item')) {\n            $menuItem = Voyager::model('MenuItem')->where('route', 'voyager.'.$bread->dataType->slug.'.index');\n\n            if ($menuItem->exists()) {\n                $menuItem->delete();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Models/Category.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse TCG\\Voyager\\Facades\\Voyager;\nuse TCG\\Voyager\\Traits\\Translatable;\n\nclass Category extends Model\n{\n    use Translatable;\n\n    protected $translatable = ['slug', 'name'];\n\n    protected $table = 'categories';\n\n    protected $fillable = ['slug', 'name'];\n\n    public function posts()\n    {\n        return $this->hasMany(Voyager::modelClass('Post'))\n            ->published()\n            ->orderBy('created_at', 'DESC');\n    }\n\n    public function parentId()\n    {\n        return $this->belongsTo(self::class);\n    }\n}\n"
  },
  {
    "path": "src/Models/DataRow.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse TCG\\Voyager\\Traits\\Translatable;\n\nclass DataRow extends Model\n{\n    use Translatable;\n\n    protected $table = 'data_rows';\n\n    protected $guarded = [];\n\n    public $timestamps = false;\n\n    protected $translatable = ['display_name'];\n\n    public function rowBefore()\n    {\n        $previous = self::where('data_type_id', '=', $this->data_type_id)->where('order', '=', ($this->order - 1))->first();\n        if (isset($previous->id)) {\n            return $previous->field;\n        }\n\n        return '__first__';\n    }\n\n    public function relationshipField()\n    {\n        return @$this->details->column;\n    }\n\n    /**\n     * Check if this field is the current filter.\n     *\n     * @return bool True if this is the current filter, false otherwise\n     */\n    public function isCurrentSortField($orderBy)\n    {\n        return $orderBy == $this->field;\n    }\n\n    /**\n     * Build the URL to sort data type by this field.\n     *\n     * @return string Built URL\n     */\n    public function sortByUrl($orderBy, $sortOrder)\n    {\n        $params = [];\n        $isDesc = $sortOrder != 'asc';\n        if ($this->isCurrentSortField($orderBy) && $isDesc) {\n            $params['sort_order'] = 'asc';\n        } else {\n            $params['sort_order'] = 'desc';\n        }\n        $params['order_by'] = $this->field;\n\n        return url()->current().'?'.http_build_query(array_merge(\\Request::all(), $params));\n    }\n\n    public function setDetailsAttribute($value)\n    {\n        $this->attributes['details'] = json_encode($value);\n    }\n\n    public function getDetailsAttribute($value)\n    {\n        return json_decode(!empty($value) ? $value : '{}');\n    }\n}\n"
  },
  {
    "path": "src/Models/DataType.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\DB;\nuse TCG\\Voyager\\Database\\Schema\\SchemaManager;\nuse TCG\\Voyager\\Facades\\Voyager;\nuse TCG\\Voyager\\Traits\\Translatable;\n\nclass DataType extends Model\n{\n    use Translatable;\n\n    protected $translatable = ['display_name_singular', 'display_name_plural'];\n\n    protected $table = 'data_types';\n\n    protected $fillable = [\n        'name',\n        'slug',\n        'display_name_singular',\n        'display_name_plural',\n        'icon',\n        'model_name',\n        'policy_name',\n        'controller',\n        'description',\n        'generate_permissions',\n        'server_side',\n        'order_column',\n        'order_display_column',\n        'order_direction',\n        'default_search_key',\n        'scope',\n        'details',\n    ];\n\n    public function rows()\n    {\n        return $this->hasMany(Voyager::modelClass('DataRow'))->orderBy('order');\n    }\n\n    public function browseRows()\n    {\n        return $this->rows()->where('browse', 1);\n    }\n\n    public function readRows()\n    {\n        return $this->rows()->where('read', 1);\n    }\n\n    public function editRows()\n    {\n        return $this->rows()->where('edit', 1);\n    }\n\n    public function addRows()\n    {\n        return $this->rows()->where('add', 1);\n    }\n\n    public function deleteRows()\n    {\n        return $this->rows()->where('delete', 1);\n    }\n\n    public function lastRow()\n    {\n        return $this->hasMany(Voyager::modelClass('DataRow'))->orderBy('order', 'DESC')->first();\n    }\n\n    public function setGeneratePermissionsAttribute($value)\n    {\n        $this->attributes['generate_permissions'] = $value ? 1 : 0;\n    }\n\n    public function setServerSideAttribute($value)\n    {\n        $this->attributes['server_side'] = $value ? 1 : 0;\n    }\n\n    public function updateDataType($requestData, $throw = false)\n    {\n        try {\n            DB::beginTransaction();\n\n            // Prepare data\n            foreach (['generate_permissions', 'server_side'] as $field) {\n                if (!isset($requestData[$field])) {\n                    $requestData[$field] = 0;\n                }\n            }\n\n            if ($this->fill($requestData)->save()) {\n                $fields = $this->fields(\n                    (strlen($this->model_name) != 0)\n                    ? DB::getTablePrefix().app($this->model_name)->getTable()\n                    : DB::getTablePrefix().Arr::get($requestData, 'name')\n                );\n\n                $requestData = $this->getRelationships($requestData, $fields);\n                foreach ($fields as $field) {\n                    $dataRow = $this->rows()->firstOrNew(['field' => $field]);\n\n                    foreach (['browse', 'read', 'edit', 'add', 'delete'] as $check) {\n                        $dataRow->{$check} = isset($requestData[\"field_{$check}_{$field}\"]);\n                    }\n\n                    $dataRow->required = !empty($requestData['field_required_'.$field]);\n                    $dataRow->field = $requestData['field_'.$field];\n                    $dataRow->type = $requestData['field_input_type_'.$field];\n                    $dataRow->details = json_decode($requestData['field_details_'.$field]);\n                    $dataRow->display_name = $requestData['field_display_name_'.$field];\n                    $dataRow->order = intval($requestData['field_order_'.$field]);\n\n                    // Prepare Translations and Transform data\n                    $translations = (is_bread_translatable($dataRow) && !empty($requestData['field_display_name_'.$field.'_i18n']))\n                        ? $dataRow->prepareTranslationsFromArray($field, $requestData)\n                        : [];\n\n                    if (!$dataRow->save()) {\n                        throw new \\Exception(__('voyager::database.field_safe_failed', ['field' => $field]));\n                    }\n\n                    // Save translations if applied\n                    $dataRow->saveTranslations($translations);\n                }\n\n                // Clean data_rows that don't have an associated field\n                // TODO: need a way to identify deleted and renamed fields.\n                //   maybe warn the user and let him decide to either rename or delete?\n                $this->rows()->whereNotIn('field', $fields)->delete();\n\n                // It seems everything was fine. Let's check if we need to generate permissions\n                if ($this->generate_permissions) {\n                    Voyager::model('Permission')->generateFor($this->name);\n                }\n\n                DB::commit();\n\n                return true;\n            }\n        } catch (\\Exception $e) {\n            DB::rollBack();\n\n            if ($throw) {\n                throw $e;\n            }\n        }\n\n        return false;\n    }\n\n    public function fields($name = null)\n    {\n        if (is_null($name)) {\n            $name = $this->name;\n        }\n\n        $fields = SchemaManager::listTableColumnNames($name);\n\n        if ($extraFields = $this->extraFields()) {\n            foreach ($extraFields as $field) {\n                $fields[] = $field['Field'];\n            }\n        }\n\n        return $fields;\n    }\n\n    public function getRelationships($requestData, &$fields)\n    {\n        if (isset($requestData['relationships'])) {\n            $relationships = $requestData['relationships'];\n            if (count($relationships) > 0) {\n                foreach ($relationships as $index => $relationship) {\n                    // Push the relationship on the allowed fields\n                    array_push($fields, $relationship);\n\n                    $relationship_column = $requestData['relationship_column_belongs_to_'.$relationship];\n                    if ($requestData['relationship_type_'.$relationship] == 'hasOne' || $requestData['relationship_type_'.$relationship] == 'hasMany') {\n                        $relationship_column = $requestData['relationship_column_'.$relationship];\n                    }\n\n                    // Build the relationship details\n                    $relationshipDetails = [\n                        'model'       => $requestData['relationship_model_'.$relationship],\n                        'table'       => $requestData['relationship_table_'.$relationship],\n                        'type'        => $requestData['relationship_type_'.$relationship],\n                        'column'      => $relationship_column,\n                        'key'         => $requestData['relationship_key_'.$relationship],\n                        'label'       => $requestData['relationship_label_'.$relationship],\n                        'pivot_table' => $requestData['relationship_pivot_table_'.$relationship],\n                        'pivot'       => ($requestData['relationship_type_'.$relationship] == 'belongsToMany') ? '1' : '0',\n                        'taggable'    => $requestData['relationship_taggable_'.$relationship] ?? '0',\n                    ];\n\n                    $details = json_decode($requestData['field_details_'.$relationship], true);\n                    $merge = array_merge($details, $relationshipDetails);\n                    $requestData['field_details_'.$relationship] = json_encode($merge);\n                }\n            }\n        }\n\n        return $requestData;\n    }\n\n    public function fieldOptions()\n    {\n        // Get ordered BREAD fields\n        $orderedFields = $this->rows()->pluck('field')->toArray();\n\n        $_fieldOptions = SchemaManager::describeTable(\n            (strlen($this->model_name) != 0)\n            ? app($this->model_name)->getTable()\n            : $this->name\n        )->toArray();\n\n        $fieldOptions = [];\n        $f_size = count($orderedFields);\n        for ($i = 0; $i < $f_size; $i++) {\n            $fieldOptions[$orderedFields[$i]] = $_fieldOptions[$orderedFields[$i]];\n        }\n        $fieldOptions = collect($fieldOptions);\n\n        if ($extraFields = $this->extraFields()) {\n            foreach ($extraFields as $field) {\n                $fieldOptions[] = (object) $field;\n            }\n        }\n\n        return $fieldOptions;\n    }\n\n    public function extraFields()\n    {\n        if (empty(trim($this->model_name))) {\n            return [];\n        }\n\n        $model = app($this->model_name);\n        if (method_exists($model, 'adminFields')) {\n            return $model->adminFields();\n        }\n    }\n\n    public function setDetailsAttribute($value)\n    {\n        $this->attributes['details'] = json_encode($value);\n    }\n\n    public function getDetailsAttribute($value)\n    {\n        return json_decode(!empty($value) ? $value : '{}');\n    }\n\n    public function getOrderColumnAttribute()\n    {\n        return $this->details->order_column ?? null;\n    }\n\n    public function setOrderColumnAttribute($value)\n    {\n        $this->attributes['details'] = collect($this->details)->merge(['order_column' => $value]);\n    }\n\n    public function getOrderDisplayColumnAttribute()\n    {\n        return $this->details->order_display_column ?? null;\n    }\n\n    public function setOrderDisplayColumnAttribute($value)\n    {\n        $this->attributes['details'] = collect($this->details)->merge(['order_display_column' => $value]);\n    }\n\n    public function getDefaultSearchKeyAttribute()\n    {\n        return $this->details->default_search_key ?? null;\n    }\n\n    public function setDefaultSearchKeyAttribute($value)\n    {\n        $this->attributes['details'] = collect($this->details)->merge(['default_search_key' => $value]);\n    }\n\n    public function getOrderDirectionAttribute()\n    {\n        return $this->details->order_direction ?? 'desc';\n    }\n\n    public function setOrderDirectionAttribute($value)\n    {\n        $this->attributes['details'] = collect($this->details)->merge(['order_direction' => $value]);\n    }\n\n    public function getScopeAttribute()\n    {\n        return $this->details->scope ?? null;\n    }\n\n    public function setScopeAttribute($value)\n    {\n        $this->attributes['details'] = collect($this->details)->merge(['scope' => $value]);\n    }\n}\n"
  },
  {
    "path": "src/Models/Menu.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Str;\nuse TCG\\Voyager\\Events\\MenuDisplay;\nuse TCG\\Voyager\\Facades\\Voyager;\n\n/**\n * @todo: Refactor this class by using something like MenuBuilder Helper.\n */\nclass Menu extends Model\n{\n    protected $table = 'menus';\n\n    protected $guarded = [];\n\n    public static function boot()\n    {\n        parent::boot();\n\n        static::saved(function ($model) {\n            $model->removeMenuFromCache();\n        });\n\n        static::deleted(function ($model) {\n            $model->removeMenuFromCache();\n        });\n    }\n\n    public function items()\n    {\n        return $this->hasMany(Voyager::modelClass('MenuItem'));\n    }\n\n    public function parent_items()\n    {\n        return $this->hasMany(Voyager::modelClass('MenuItem'))\n            ->whereNull('parent_id');\n    }\n\n    /**\n     * Display menu.\n     *\n     * @param string      $menuName\n     * @param string|null $type\n     * @param array       $options\n     *\n     * @return string\n     */\n    public static function display($menuName, $type = null, array $options = [])\n    {\n        // GET THE MENU - sort collection in blade\n        $menu = \\Cache::remember('voyager_menu_'.$menuName, \\Carbon\\Carbon::now()->addDays(30), function () use ($menuName) {\n            return static::where('name', '=', $menuName)\n            ->with(['parent_items.children' => function ($q) {\n                $q->orderBy('order');\n            }])\n            ->first();\n        });\n\n        // Check for Menu Existence\n        if (!isset($menu)) {\n            return false;\n        }\n\n        event(new MenuDisplay($menu));\n\n        // Convert options array into object\n        $options = (object) $options;\n\n        $items = $menu->parent_items->sortBy('order');\n\n        if ($menuName == 'admin' && $type == '_json') {\n            $items = static::processItems($items);\n        }\n\n        if ($type == 'admin') {\n            $type = 'voyager::menu.'.$type;\n        } else {\n            if (is_null($type)) {\n                $type = 'voyager::menu.default';\n            } elseif ($type == 'bootstrap' && !view()->exists($type)) {\n                $type = 'voyager::menu.bootstrap';\n            }\n        }\n\n        if (!isset($options->locale)) {\n            $options->locale = app()->getLocale();\n        }\n\n        if ($type === '_json') {\n            return $items;\n        }\n\n        return new \\Illuminate\\Support\\HtmlString(\n            \\Illuminate\\Support\\Facades\\View::make($type, ['items' => $items, 'options' => $options])->render()\n        );\n    }\n\n    public function removeMenuFromCache()\n    {\n        \\Cache::forget('voyager_menu_'.$this->name);\n    }\n\n    protected static function processItems($items)\n    {\n        // Eagerload Translations\n        if (config('voyager.multilingual.enabled')) {\n            $items->load('translations');\n        }\n\n        $items = $items->transform(function ($item) {\n            // Translate title\n            $item->title = $item->getTranslatedAttribute('title');\n            // Resolve URL/Route\n            $item->href = $item->link(true);\n\n            if ($item->href == url()->current() && $item->href != '') {\n                // The current URL is exactly the URL of the menu-item\n                $item->active = true;\n            } elseif (Str::startsWith(url()->current(), Str::finish($item->href, '/'))) {\n                // The current URL is \"below\" the menu-item URL. For example \"admin/posts/1/edit\" => \"admin/posts\"\n                $item->active = true;\n            }\n            if (($item->href == url('') || $item->href == route('voyager.dashboard')) && $item->children->count() > 0) {\n                // Exclude sub-menus\n                $item->active = false;\n            } elseif ($item->href == route('voyager.dashboard') && url()->current() != route('voyager.dashboard')) {\n                // Exclude dashboard\n                $item->active = false;\n            }\n\n            if ($item->children->count() > 0) {\n                $item->setRelation('children', static::processItems($item->children));\n\n                if (!$item->children->where('active', true)->isEmpty()) {\n                    $item->active = true;\n                }\n            }\n\n            return $item;\n        });\n\n        // Filter items by permission\n        $items = $items->filter(function ($item) {\n            return !$item->children->isEmpty() || Auth::user()->can('browse', $item);\n        })->filter(function ($item) {\n            // Filter out empty menu-items\n            if ($item->url == '' && $item->route == '' && $item->children->count() == 0) {\n                return false;\n            }\n\n            return true;\n        });\n\n        return $items->values();\n    }\n}\n"
  },
  {
    "path": "src/Models/MenuItem.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\Route;\nuse TCG\\Voyager\\Facades\\Voyager;\nuse TCG\\Voyager\\Traits\\Translatable;\n\nclass MenuItem extends Model\n{\n    use Translatable;\n\n    protected $translatorMethods = [\n        'link' => 'translatorLink',\n    ];\n\n    protected $table = 'menu_items';\n\n    protected $guarded = [];\n\n    protected $translatable = ['title'];\n\n    public static function boot()\n    {\n        parent::boot();\n\n        static::created(function ($model) {\n            $model->menu->removeMenuFromCache();\n        });\n\n        static::saved(function ($model) {\n            $model->menu->removeMenuFromCache();\n        });\n\n        static::deleted(function ($model) {\n            $model->menu->removeMenuFromCache();\n        });\n    }\n\n    public function children()\n    {\n        return $this->hasMany(Voyager::modelClass('MenuItem'), 'parent_id')\n            ->with('children');\n    }\n\n    public function menu()\n    {\n        return $this->belongsTo(Voyager::modelClass('Menu'));\n    }\n\n    public function link($absolute = false)\n    {\n        return $this->prepareLink($absolute, $this->route, $this->parameters, $this->url);\n    }\n\n    public function translatorLink($translator, $absolute = false)\n    {\n        return $this->prepareLink($absolute, $translator->route, $translator->parameters, $translator->url);\n    }\n\n    protected function prepareLink($absolute, $route, $parameters, $url)\n    {\n        if (is_null($parameters)) {\n            $parameters = [];\n        }\n\n        if (is_string($parameters)) {\n            $parameters = json_decode($parameters, true);\n        } elseif (is_array($parameters)) {\n            $parameters = $parameters;\n        } elseif (is_object($parameters)) {\n            $parameters = json_decode(json_encode($parameters), true);\n        }\n\n        if (!is_null($route)) {\n            if (!Route::has($route)) {\n                return '#';\n            }\n\n            return route($route, $parameters, $absolute);\n        }\n\n        if ($absolute) {\n            return url($url);\n        }\n\n        return $url;\n    }\n\n    public function getParametersAttribute()\n    {\n        return json_decode($this->attributes['parameters'] ?? '');\n    }\n\n    public function setParametersAttribute($value)\n    {\n        if (is_array($value)) {\n            $value = json_encode($value);\n        }\n\n        $this->attributes['parameters'] = $value;\n    }\n\n    public function setUrlAttribute($value)\n    {\n        if (is_null($value)) {\n            $value = '';\n        }\n\n        $this->attributes['url'] = $value;\n    }\n\n    /**\n     * Return the Highest Order Menu Item.\n     *\n     * @param number $parent (Optional) Parent id. Default null\n     *\n     * @return number Order number\n     */\n    public function highestOrderMenuItem($parent = null)\n    {\n        $order = 1;\n\n        $item = $this->where('parent_id', '=', $parent)\n            ->orderBy('order', 'DESC')\n            ->first();\n\n        if (!is_null($item)) {\n            $order = intval($item->order) + 1;\n        }\n\n        return $order;\n    }\n}\n"
  },
  {
    "path": "src/Models/Page.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\Auth;\nuse TCG\\Voyager\\Traits\\Translatable;\n\nclass Page extends Model\n{\n    use Translatable;\n\n    protected $translatable = ['title', 'slug', 'body'];\n\n    /**\n     * Statuses.\n     */\n    public const STATUS_ACTIVE = 'ACTIVE';\n    public const STATUS_INACTIVE = 'INACTIVE';\n\n    /**\n     * List of statuses.\n     *\n     * @var array\n     */\n    public static $statuses = [self::STATUS_ACTIVE, self::STATUS_INACTIVE];\n\n    protected $guarded = [];\n\n    public function save(array $options = [])\n    {\n        // If no author has been assigned, assign the current user's id as the author of the post\n        if (!$this->author_id && Auth::user()) {\n            $this->author_id = Auth::user()->getKey();\n        }\n\n        return parent::save();\n    }\n\n    /**\n     * Scope a query to only include active pages.\n     *\n     * @param  $query  \\Illuminate\\Database\\Eloquent\\Builder\n     *\n     * @return \\Illuminate\\Database\\Eloquent\\Builder\n     */\n    public function scopeActive($query)\n    {\n        return $query->where('status', static::STATUS_ACTIVE);\n    }\n}\n"
  },
  {
    "path": "src/Models/Permission.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass Permission extends Model\n{\n    protected $guarded = [];\n\n    public function roles()\n    {\n        return $this->belongsToMany(Voyager::modelClass('Role'));\n    }\n\n    public static function generateFor($table_name)\n    {\n        self::firstOrCreate(['key' => 'browse_'.$table_name, 'table_name' => $table_name]);\n        self::firstOrCreate(['key' => 'read_'.$table_name, 'table_name' => $table_name]);\n        self::firstOrCreate(['key' => 'edit_'.$table_name, 'table_name' => $table_name]);\n        self::firstOrCreate(['key' => 'add_'.$table_name, 'table_name' => $table_name]);\n        self::firstOrCreate(['key' => 'delete_'.$table_name, 'table_name' => $table_name]);\n    }\n\n    public static function removeFrom($table_name)\n    {\n        self::where(['table_name' => $table_name])->delete();\n    }\n}\n"
  },
  {
    "path": "src/Models/Post.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\Auth;\nuse TCG\\Voyager\\Facades\\Voyager;\nuse TCG\\Voyager\\Traits\\Resizable;\nuse TCG\\Voyager\\Traits\\Translatable;\n\nclass Post extends Model\n{\n    use Translatable;\n    use Resizable;\n\n    protected $translatable = ['title', 'seo_title', 'excerpt', 'body', 'slug', 'meta_description', 'meta_keywords'];\n\n    public const PUBLISHED = 'PUBLISHED';\n\n    protected $guarded = [];\n\n    public function save(array $options = [])\n    {\n        // If no author has been assigned, assign the current user's id as the author of the post\n        if (!$this->author_id && Auth::user()) {\n            $this->author_id = Auth::user()->getKey();\n        }\n\n        return parent::save();\n    }\n\n    public function authorId()\n    {\n        return $this->belongsTo(Voyager::modelClass('User'), 'author_id', 'id');\n    }\n\n    /**\n     * Scope a query to only published scopes.\n     *\n     * @param \\Illuminate\\Database\\Eloquent\\Builder $query\n     *\n     * @return \\Illuminate\\Database\\Eloquent\\Builder\n     */\n    public function scopePublished(Builder $query)\n    {\n        return $query->where('status', '=', static::PUBLISHED);\n    }\n\n    /**\n     * @return \\Illuminate\\Database\\Eloquent\\Relations\\HasOne\n     */\n    public function category()\n    {\n        return $this->belongsTo(Voyager::modelClass('Category'));\n    }\n}\n"
  },
  {
    "path": "src/Models/Role.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse TCG\\Voyager\\Facades\\Voyager;\nuse TCG\\Voyager\\Tests\\Database\\Factories\\RoleFactory;\n\nclass Role extends Model\n{\n    use HasFactory;\n\n    protected $guarded = [];\n\n    public function users()\n    {\n        $userModel = Voyager::modelClass('User');\n\n        return $this->belongsToMany($userModel, 'user_roles')\n                    ->select(app($userModel)->getTable().'.*')\n                    ->union($this->hasMany($userModel))->getQuery();\n    }\n\n    public function permissions()\n    {\n        return $this->belongsToMany(Voyager::modelClass('Permission'));\n    }\n\n    protected static function newFactory()\n    {\n        return RoleFactory::new();\n    }\n}\n"
  },
  {
    "path": "src/Models/Setting.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse TCG\\Voyager\\Events\\SettingUpdated;\n\nclass Setting extends Model\n{\n    protected $table = 'settings';\n\n    protected $guarded = [];\n\n    public $timestamps = false;\n\n    protected $dispatchesEvents = [\n        'updating' => SettingUpdated::class,\n    ];\n}\n"
  },
  {
    "path": "src/Models/Translation.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Translation extends Model\n{\n    protected $table = 'translations';\n\n    protected $fillable = ['table_name', 'column_name', 'foreign_key', 'locale', 'value'];\n}\n"
  },
  {
    "path": "src/Models/User.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Models;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse TCG\\Voyager\\Contracts\\User as UserContract;\nuse TCG\\Voyager\\Tests\\Database\\Factories\\UserFactory;\nuse TCG\\Voyager\\Traits\\VoyagerUser;\n\nclass User extends Authenticatable implements UserContract\n{\n    use VoyagerUser, HasFactory;\n\n    protected $guarded = [];\n\n    public $additional_attributes = ['locale'];\n\n    public function getAvatarAttribute($value)\n    {\n        return $value ?? config('voyager.user.default_avatar', 'users/default.png');\n    }\n\n    public function setCreatedAtAttribute($value)\n    {\n        $this->attributes['created_at'] = Carbon::parse($value)->format('Y-m-d H:i:s');\n    }\n\n    public function setSettingsAttribute($value)\n    {\n        $this->attributes['settings'] = $value ? $value->toJson() : json_encode([]);\n    }\n\n    public function getSettingsAttribute($value)\n    {\n        return collect(json_decode((string)$value));\n    }\n\n    public function setLocaleAttribute($value)\n    {\n        $this->settings = $this->settings->merge(['locale' => $value]);\n    }\n\n    public function getLocaleAttribute()\n    {\n        return $this->settings->get('locale');\n    }\n\n    protected static function newFactory()\n    {\n        return UserFactory::new();\n    }\n}\n"
  },
  {
    "path": "src/Policies/BasePolicy.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Policies;\n\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\nuse TCG\\Voyager\\Contracts\\User;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass BasePolicy\n{\n    use HandlesAuthorization;\n\n    protected static $datatypes = [];\n\n    /**\n     * Handle all requested permission checks.\n     *\n     * @param string $name\n     * @param array  $arguments\n     *\n     * @return bool\n     */\n    public function __call($name, $arguments)\n    {\n        if (count($arguments) < 2) {\n            throw new \\InvalidArgumentException('not enough arguments');\n        }\n        /** @var \\TCG\\Voyager\\Contracts\\User $user */\n        $user = $arguments[0];\n\n        /** @var $model */\n        $model = $arguments[1];\n\n        return $this->checkPermission($user, $model, $name);\n    }\n\n    /**\n     * Determine if the given model can be restored by the user.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function restore(User $user, $model)\n    {\n        // Can this be restored?\n        return $model->deleted_at && $this->checkPermission($user, $model, 'delete');\n    }\n\n    /**\n     * Determine if the given model can be deleted by the user.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function delete(User $user, $model)\n    {\n        // Has this already been deleted?\n        $soft_delete = $model->deleted_at && in_array(\\Illuminate\\Database\\Eloquent\\SoftDeletes::class, class_uses_recursive($model));\n\n        return !$soft_delete && $this->checkPermission($user, $model, 'delete');\n    }\n\n    /**\n     * Check if user has an associated permission.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param object                      $model\n     * @param string                      $action\n     *\n     * @return bool\n     */\n    protected function checkPermission(User $user, $model, $action)\n    {\n        $model_name = get_class($model);\n        if (!isset(self::$datatypes[$model_name])) {\n            $dataType = Voyager::model('DataType');\n            self::$datatypes[$model_name] = $dataType->where('model_name', $model_name)->first();\n        }\n\n        if (!self::$datatypes[$model_name]) {\n            throw new \\Exception(\"Unable to find dataType with model: \" . $model_name);\n        }\n\n        $dataType = self::$datatypes[$model_name];\n\n        return $user->hasPermission($action.'_'.$dataType->name);\n    }\n}\n"
  },
  {
    "path": "src/Policies/MenuItemPolicy.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Policies;\n\nuse TCG\\Voyager\\Contracts\\User;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass MenuItemPolicy extends BasePolicy\n{\n    protected static $datatypes = null;\n    protected static $permissions = null;\n\n    /**\n     * Check if user has an associated permission.\n     *\n     * @param User   $user\n     * @param object $model\n     * @param string $action\n     *\n     * @return bool\n     */\n    protected function checkPermission(User $user, $model, $action)\n    {\n        if (self::$permissions == null) {\n            self::$permissions = Voyager::model('Permission')->all();\n        }\n\n        if (self::$datatypes == null) {\n            self::$datatypes = Voyager::model('DataType')::all()->keyBy('slug');\n        }\n\n        $regex = str_replace('/', '\\/', preg_quote(route('voyager.dashboard')));\n        $slug = preg_replace('/'.$regex.'/', '', $model->link(true));\n        $slug = str_replace('/', '', $slug);\n\n        if ($str = self::$datatypes->get($slug)) {\n            $slug = $str->name;\n        }\n\n        if ($slug == '') {\n            $slug = 'admin';\n        } elseif ($slug == 'compass' && !\\App::environment('local') && !config('voyager.compass_in_production', false)) {\n            return false;\n        }\n\n        if (empty($action)) {\n            $action = 'browse';\n        }\n\n        // If permission doesn't exist, we can't check it!\n        if (!self::$permissions->contains('key', $action.'_'.$slug)) {\n            return true;\n        }\n\n        return $user->hasPermission($action.'_'.$slug);\n    }\n}\n"
  },
  {
    "path": "src/Policies/PostPolicy.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Policies;\n\nuse TCG\\Voyager\\Contracts\\User;\n\nclass PostPolicy extends BasePolicy\n{\n    /**\n     * Determine if the given model can be viewed by the user.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function read(User $user, $model)\n    {\n        // Does this post belong to the current user?\n        $current = $user->id === $model->author_id;\n\n        return $current || $this->checkPermission($user, $model, 'read');\n    }\n\n    /**\n     * Determine if the given model can be edited by the user.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function edit(User $user, $model)\n    {\n        // Does this post belong to the current user?\n        $current = $user->id === $model->author_id;\n\n        return $current || $this->checkPermission($user, $model, 'edit');\n    }\n\n    /**\n     * Determine if the given model can be deleted by the user.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function delete(User $user, $model)\n    {\n        // Does this post belong to the current user?\n        $current = $user->id === $model->author_id;\n\n        // Has this already been deleted?\n        $soft_delete = $model->deleted_at && in_array(\\Illuminate\\Database\\Eloquent\\SoftDeletes::class, class_uses_recursive($model));\n\n        return !$soft_delete && ($current || $this->checkPermission($user, $model, 'delete'));\n    }\n}\n"
  },
  {
    "path": "src/Policies/SettingPolicy.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Policies;\n\nuse TCG\\Voyager\\Contracts\\User;\n\nclass SettingPolicy extends BasePolicy\n{\n    /**\n     * Determine if the given user can browse the model.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function browse(User $user, $model)\n    {\n        return $user->hasPermission('browse_settings');\n    }\n\n    /**\n     * Determine if the given model can be viewed by the user.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function read(User $user, $model)\n    {\n        return $user->hasPermission('read_settings');\n    }\n\n    /**\n     * Determine if the given model can be edited by the user.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function edit(User $user, $model)\n    {\n        return $user->hasPermission('edit_settings');\n    }\n\n    /**\n     * Determine if the given user can create the model.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function add(User $user, $model)\n    {\n        return $user->hasPermission('add_settings');\n    }\n\n    /**\n     * Determine if the given model can be deleted by the user.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function delete(User $user, $model)\n    {\n        return $user->hasPermission('delete_settings');\n    }\n}\n"
  },
  {
    "path": "src/Policies/UserPolicy.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Policies;\n\nuse TCG\\Voyager\\Contracts\\User;\n\nclass UserPolicy extends BasePolicy\n{\n    /**\n     * Determine if the given model can be viewed by the user.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function read(User $user, $model)\n    {\n        // Does this record belong to the current user?\n        $current = $user->id === $model->id;\n\n        return $current || $this->checkPermission($user, $model, 'read');\n    }\n\n    /**\n     * Determine if the given model can be edited by the user.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function edit(User $user, $model)\n    {\n        // Does this record belong to the current user?\n        $current = $user->id === $model->id;\n\n        return $current || $this->checkPermission($user, $model, 'edit');\n    }\n\n    /**\n     * Determine if the given user can change a user a role.\n     *\n     * @param \\TCG\\Voyager\\Contracts\\User $user\n     * @param  $model\n     *\n     * @return bool\n     */\n    public function editRoles(User $user, $model)\n    {\n        // Does this record belong to another user?\n        $another = $user->id != $model->id;\n\n        return $another && $user->hasPermission('edit_users');\n    }\n}\n"
  },
  {
    "path": "src/Providers/VoyagerDummyServiceProvider.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Providers;\n\nuse Arrilot\\Widgets\\ServiceProvider as WidgetServiceProvider;\nuse Illuminate\\Support\\ServiceProvider;\nuse TCG\\Voyager\\Seed;\n\nclass VoyagerDummyServiceProvider extends ServiceProvider\n{\n    /**\n     * Register the application services.\n     */\n    public function register()\n    {\n        $this->app->register(WidgetServiceProvider::class);\n\n        $this->registerConfigs();\n\n        if ($this->app->runningInConsole()) {\n            $this->registerPublishableResources();\n        }\n    }\n\n    /**\n     * Register the publishable files.\n     */\n    private function registerPublishableResources()\n    {\n        $publishablePath = dirname(__DIR__).'/../publishable';\n\n        $publishable = [\n            'dummy_seeders' => [\n                \"{$publishablePath}/database/dummy_seeders/\" => database_path('seeders'),\n            ],\n            'dummy_content' => [\n                \"{$publishablePath}/dummy_content/\" => storage_path('app/public'),\n            ],\n            'dummy_config' => [\n                \"{$publishablePath}/config/voyager_dummy.php\" => config_path('voyager.php'),\n            ],\n            'dummy_migrations' => [\n                \"{$publishablePath}/database/migrations/\" => database_path('migrations'),\n            ],\n\n        ];\n\n        foreach ($publishable as $group => $paths) {\n            $this->publishes($paths, $group);\n        }\n    }\n\n    public function registerConfigs()\n    {\n        $this->mergeConfigFrom(\n            dirname(__DIR__).'/../publishable/config/voyager_dummy.php',\n            'voyager'\n        );\n    }\n}\n"
  },
  {
    "path": "src/Providers/VoyagerEventServiceProvider.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\nuse Illuminate\\Support\\Facades\\Event;\nuse TCG\\Voyager\\Events;\nuse TCG\\Voyager\\Listeners;\n\nclass VoyagerEventServiceProvider extends ServiceProvider\n{\n    /**\n     * The event listener mappings for the application.\n     *\n     * @var array\n     */\n    protected $listen = [\n        Events\\BreadAdded::class => [\n            Listeners\\AddBreadMenuItem::class,\n            Listeners\\AddBreadPermission::class,\n        ],\n        Events\\BreadDeleted::class => [\n            Listeners\\DeleteBreadMenuItem::class,\n        ],\n        Events\\SettingUpdated::class => [\n            Listeners\\ClearCachedSettingValue::class,\n        ],\n    ];\n\n    /**\n     * Register any events for your application.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        parent::boot();\n    }\n}\n"
  },
  {
    "path": "src/Traits/AlertsMessages.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Traits;\n\ntrait AlertsMessages\n{\n    protected $alerts = [];\n\n    protected function getAlerts($group = false)\n    {\n        if (isset($this->alerts['alerts'])) {\n            $alerts = $this->alerts['alerts'];\n\n            if ($group) {\n                $alerts = collect($alerts)->groupBy('type')->toArray();\n            }\n\n            return $alerts;\n        }\n\n        return [];\n    }\n\n    protected function alert($message, $type)\n    {\n        $this->alerts['alerts'][] = [\n            'type'    => $type,\n            'message' => $message,\n        ];\n\n        return $this->alerts;\n    }\n\n    protected function alertSuccess($message)\n    {\n        return $this->alert($message, 'success');\n    }\n\n    protected function alertInfo($message)\n    {\n        return $this->alert($message, 'info');\n    }\n\n    protected function alertWarning($message)\n    {\n        return $this->alert($message, 'warning');\n    }\n\n    protected function alertError($message)\n    {\n        return $this->alert($message, 'error');\n    }\n\n    protected function alertException(\\Exception $e, $prefixMessage = '')\n    {\n        return $this->alertError(\"{$prefixMessage} \".__('voyager::generic.exception').\": {$e->getMessage()}\");\n    }\n}\n"
  },
  {
    "path": "src/Traits/Renderable.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Traits;\n\nuse Illuminate\\View\\View;\n\ntrait Renderable\n{\n    public function render($content)\n    {\n        if ($content instanceof View) {\n            return $content->render();\n        }\n\n        return $content;\n    }\n}\n"
  },
  {
    "path": "src/Traits/Resizable.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Traits;\n\nuse Illuminate\\Support\\Str;\n\ntrait Resizable\n{\n    /**\n     * Method for returning specific thumbnail for model.\n     *\n     * @param string $type\n     * @param string $attribute\n     *\n     * @return string\n     */\n    public function thumbnail($type, $attribute = 'image')\n    {\n        // Return empty string if the field not found\n        if (!isset($this->attributes[$attribute])) {\n            return '';\n        }\n\n        // We take image from posts field\n        $image = $this->attributes[$attribute];\n\n        return $this->getThumbnail($image, $type);\n    }\n\n    /**\n     * Generate thumbnail URL.\n     *\n     * @param $image\n     * @param $type\n     *\n     * @return string\n     */\n    public function getThumbnail($image, $type)\n    {\n        // We need to get extension type ( .jpeg , .png ...)\n        $ext = pathinfo($image, PATHINFO_EXTENSION);\n\n        // We remove extension from file name so we can append thumbnail type\n        $name = Str::replaceLast('.'.$ext, '', $image);\n\n        // We merge original name + type + extension\n        return $name.'-'.$type.'.'.$ext;\n    }\n}\n"
  },
  {
    "path": "src/Traits/Seedable.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Traits;\n\ntrait Seedable\n{\n    public function seed($class)\n    {\n        if (!class_exists($class)) {\n            require_once $this->seedersPath.$class.'.php';\n        }\n\n        with(new $class())->run();\n    }\n}\n"
  },
  {
    "path": "src/Traits/Spatial.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Traits;\n\nuse Illuminate\\Support\\Facades\\DB;\n\ntrait Spatial\n{\n    /**\n     * Get location as WKT from Geometry for given field.\n     *\n     * @param string $column\n     *\n     * @return string\n     */\n    public function getLocation($column)\n    {\n        $model = self::select(DB::raw('ST_AsText('.$column.') AS '.$column))\n            ->where('id', $this->id)\n            ->first();\n\n        return isset($model) ? $model->$column : '';\n    }\n\n    /**\n     * Format and return array of (lat,lng) pairs of points fetched from the database.\n     *\n     * @return array $coords\n     */\n    public function getCoordinates()\n    {\n        $coords = [];\n\n        if (!empty($this->spatial)) {\n            foreach ($this->spatial as $column) {\n                $clear = trim(preg_replace('/[a-zA-Z\\(\\)]/', '', $this->getLocation($column)));\n                if (!empty($clear)) {\n                    foreach (explode(',', $clear) as $point) {\n                        list($lng, $lat) = explode(' ', $point);\n                        $coords[] = [\n                            'lat' => $lat,\n                            'lng' => $lng,\n                        ];\n                    }\n                }\n            }\n        }\n\n        return $coords;\n    }\n}\n"
  },
  {
    "path": "src/Traits/Translatable.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Traits;\n\nuse Exception;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse Illuminate\\Database\\Eloquent\\Relations\\Relation;\nuse TCG\\Voyager\\Facades\\Voyager;\nuse TCG\\Voyager\\Models\\Translation;\nuse TCG\\Voyager\\Translator;\n\ntrait Translatable\n{\n    /**\n     * Check if this model can translate.\n     *\n     * @return bool\n     */\n    public function translatable()\n    {\n        if (isset($this->translatable) && $this->translatable == false) {\n            return false;\n        }\n\n        return !empty($this->getTranslatableAttributes());\n    }\n\n    /**\n     * Load translations relation.\n     *\n     * @return mixed\n     */\n    public function translations()\n    {\n        return $this->hasMany(Voyager::model('Translation'), 'foreign_key', $this->getKeyName())\n            ->where('table_name', $this->getTable())\n            ->whereIn('locale', config('voyager.multilingual.locales', []));\n    }\n\n    /**\n     * This scope eager loads the translations for the default and the fallback locale only.\n     * We can use this as a shortcut to improve performance in our application.\n     *\n     * @param Builder     $query\n     * @param string|null $locale\n     * @param string|bool $fallback\n     */\n    public function scopeWithTranslation(Builder $query, $locale = null, $fallback = true)\n    {\n        if (is_null($locale)) {\n            $locale = app()->getLocale();\n        }\n\n        if ($fallback === true) {\n            $fallback = config('app.fallback_locale', 'en');\n        }\n\n        $query->with(['translations' => function (Relation $query) use ($locale, $fallback) {\n            $query->where(function ($q) use ($locale, $fallback) {\n                $q->where('locale', $locale);\n\n                if ($fallback !== false) {\n                    $q->orWhere('locale', $fallback);\n                }\n            });\n        }]);\n    }\n\n    /**\n     * This scope eager loads the translations for the default and the fallback locale only.\n     * We can use this as a shortcut to improve performance in our application.\n     *\n     * @param Builder           $query\n     * @param string|null|array $locales\n     * @param string|bool       $fallback\n     */\n    public function scopeWithTranslations(Builder $query, $locales = null, $fallback = true)\n    {\n        if (is_null($locales)) {\n            $locales = app()->getLocale();\n        }\n\n        if ($fallback === true) {\n            $fallback = config('app.fallback_locale', 'en');\n        }\n\n        $query->with(['translations' => function (Relation $query) use ($locales, $fallback) {\n            if (is_null($locales)) {\n                return;\n            }\n\n            $query->where(function ($q) use ($locales, $fallback) {\n                if (is_array($locales)) {\n                    $q->whereIn('locale', $locales);\n                } else {\n                    $q->where('locale', $locales);\n                }\n\n                if ($fallback !== false) {\n                    $q->orWhere('locale', $fallback);\n                }\n            });\n        }]);\n    }\n\n    /**\n     * Translate the whole model.\n     *\n     * @param null|string $language\n     * @param bool|string $fallback\n     *\n     * @return Translator\n     */\n    public function translate($language = null, $fallback = true)\n    {\n        if (!$this->relationLoaded('translations')) {\n            $this->load('translations');\n        }\n\n        return (new Translator($this))->translate($language, $fallback);\n    }\n\n    /**\n     * Get a single translated attribute.\n     *\n     * @param $attribute\n     * @param null $language\n     * @param bool $fallback\n     *\n     * @return null\n     */\n    public function getTranslatedAttribute($attribute, $language = null, $fallback = true)\n    {\n        // If multilingual is not enabled don't check for translations\n        if (!config('voyager.multilingual.enabled')) {\n            return $this->getAttributeValue($attribute);\n        }\n\n        list($value) = $this->getTranslatedAttributeMeta($attribute, $language, $fallback);\n\n        return $value;\n    }\n\n    public function getTranslationsOf($attribute, array $languages = null, $fallback = true)\n    {\n        if (is_null($languages)) {\n            $languages = config('voyager.multilingual.locales', [config('voyager.multilingual.default')]);\n        }\n\n        $response = [];\n        foreach ($languages as $language) {\n            $response[$language] = $this->getTranslatedAttribute($attribute, $language, $fallback);\n        }\n\n        return $response;\n    }\n\n    public function getTranslatedAttributeMeta($attribute, $locale = null, $fallback = true)\n    {\n        // Attribute is translatable\n        //\n        if (!in_array($attribute, $this->getTranslatableAttributes())) {\n            return [$this->getAttribute($attribute), config('voyager.multilingual.default'), false];\n        }\n\n        if (is_null($locale)) {\n            $locale = app()->getLocale();\n        }\n\n        if ($fallback === true) {\n            $fallback = config('app.fallback_locale', 'en');\n        }\n\n        $default = config('voyager.multilingual.default');\n\n        if ($default == $locale) {\n            return [$this->getAttribute($attribute), $default, true];\n        }\n\n        if (!$this->relationLoaded('translations')) {\n            $this->load('translations');\n        }\n\n        $translations = $this->getRelation('translations')\n            ->where('column_name', $attribute);\n\n        $localeTranslation = $translations->where('locale', $locale)->first();\n\n        if ($localeTranslation) {\n            return [$localeTranslation->value, $locale, true];\n        }\n\n        if ($fallback == $locale) {\n            return [$this->getAttribute($attribute), $locale, false];\n        }\n\n        if ($fallback == $default) {\n            return [$this->getAttribute($attribute), $locale, false];\n        }\n\n        $fallbackTranslation = $translations->where('locale', $fallback)->first();\n\n        if ($fallbackTranslation && $fallback !== false) {\n            return [$fallbackTranslation->value, $locale, true];\n        }\n\n        return [null, $locale, false];\n    }\n\n    /**\n     * Get attributes that can be translated.\n     *\n     * @return array\n     */\n    public function getTranslatableAttributes()\n    {\n        return property_exists($this, 'translatable') ? $this->translatable : [];\n    }\n\n    public function setAttributeTranslations($attribute, array $translations, $save = false)\n    {\n        $response = [];\n\n        if (!$this->relationLoaded('translations')) {\n            $this->load('translations');\n        }\n\n        $default = config('voyager.multilingual.default', 'en');\n        $locales = config('voyager.multilingual.locales', [$default]);\n\n        foreach ($locales as $locale) {\n            if (empty($translations[$locale])) {\n                continue;\n            }\n\n            if ($locale == $default) {\n                $this->$attribute = $translations[$locale];\n                continue;\n            }\n\n            $tranlator = $this->translate($locale, false);\n            $tranlator->$attribute = $translations[$locale];\n\n            if ($save) {\n                $tranlator->save();\n            }\n\n            $response[] = $tranlator;\n        }\n\n        return $response;\n    }\n\n    /**\n     * Get entries filtered by translated value.\n     *\n     * @example  Class::whereTranslation('title', '=', 'zuhause', ['de', 'iu'])\n     * @example  $query->whereTranslation('title', '=', 'zuhause', ['de', 'iu'])\n     *\n     * @param string       $field    {required} the field your looking to find a value in.\n     * @param string       $operator {required} value you are looking for or a relation modifier such as LIKE, =, etc.\n     * @param string       $value    {optional} value you are looking for. Only use if you supplied an operator.\n     * @param string|array $locales  {optional} locale(s) you are looking for the field.\n     * @param bool         $default  {optional} if true checks for $value is in default database before checking translations.\n     *\n     * @return Builder\n     */\n    public static function scopeWhereTranslation($query, $field, $operator, $value = null, $locales = null, $default = true)\n    {\n        if ($locales && !is_array($locales)) {\n            $locales = [$locales];\n        }\n        if (!isset($value)) {\n            $value = $operator;\n            $operator = '=';\n        }\n\n        $self = new static();\n        $table = $self->getTable();\n\n        return $query->whereIn(\n            $self->getKeyName(),\n            Translation::where('table_name', $table)\n            ->where('column_name', $field)\n            ->where('value', $operator, $value)\n            ->when(!is_null($locales), function ($query) use ($locales) {\n                return $query->whereIn('locale', $locales);\n            })\n            ->pluck('foreign_key')\n        )->when($default, function ($query) use ($field, $operator, $value) {\n            return $query->orWhere($field, $operator, $value);\n        });\n    }\n\n    public function hasTranslatorMethod($name)\n    {\n        if (!isset($this->translatorMethods)) {\n            return false;\n        }\n\n        return isset($this->translatorMethods[$name]);\n    }\n\n    public function getTranslatorMethod($name)\n    {\n        if (!$this->hasTranslatorMethod($name)) {\n            return;\n        }\n\n        return $this->translatorMethods[$name];\n    }\n\n    public function deleteAttributeTranslations(array $attributes, $locales = null)\n    {\n        $this->translations()\n            ->whereIn('column_name', $attributes)\n            ->when(!is_null($locales), function ($query) use ($locales) {\n                $method = is_array($locales) ? 'whereIn' : 'where';\n\n                return $query->$method('locale', $locales);\n            })\n            ->delete();\n    }\n\n    public function deleteAttributeTranslation($attribute, $locales = null)\n    {\n        $this->translations()\n            ->where('column_name', $attribute)\n            ->when(!is_null($locales), function ($query) use ($locales) {\n                $method = is_array($locales) ? 'whereIn' : 'where';\n\n                return $query->$method('locale', $locales);\n            })\n            ->delete();\n    }\n\n    /**\n     * Prepare translations and set default locale field value.\n     *\n     * @param object $request\n     *\n     * @return array translations\n     */\n    public function prepareTranslations($request)\n    {\n        $translations = [];\n\n        // Translatable Fields\n        $transFields = $this->getTranslatableAttributes();\n\n        $fields = !empty($request->attributes->get('breadRows')) ? array_intersect($request->attributes->get('breadRows'), $transFields) : $transFields;\n\n        foreach ($fields as $field) {\n            if (!$request->input($field.'_i18n')) {\n                throw new Exception('Invalid Translatable field'.$field);\n            }\n\n            $trans = json_decode($request->input($field.'_i18n'), true);\n\n            // Set the default local value\n            $request->merge([$field => $trans[config('voyager.multilingual.default', 'en')]]);\n\n            $translations[$field] = $this->setAttributeTranslations(\n                $field,\n                $trans\n            );\n\n            // Remove field hidden input\n            unset($request[$field.'_i18n']);\n        }\n\n        // Remove language selector input\n        unset($request['i18n_selector']);\n\n        return $translations;\n    }\n\n    /**\n     * Prepare translations and set default locale field value.\n     *\n     * @param object $requestData\n     *\n     * @return array translations\n     */\n    public function prepareTranslationsFromArray($field, &$requestData)\n    {\n        $translations = [];\n\n        $field = 'field_display_name_'.$field;\n\n        if (empty($requestData[$field.'_i18n'])) {\n            throw new Exception('Invalid Translatable field '.$field);\n        }\n\n        $trans = json_decode($requestData[$field.'_i18n'], true);\n\n        // Set the default local value\n        $requestData['display_name'] = $trans[config('voyager.multilingual.default', 'en')];\n\n        $translations['display_name'] = $this->setAttributeTranslations(\n            'display_name',\n            $trans\n        );\n\n        // Remove field hidden input\n        unset($requestData[$field.'_i18n']);\n\n        return $translations;\n    }\n\n    /**\n     * Save translations.\n     *\n     * @param object $translations\n     *\n     * @return void\n     */\n    public function saveTranslations($translations)\n    {\n        foreach ($translations as $field => $locales) {\n            foreach ($locales as $locale => $translation) {\n                $translation->save();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Traits/VoyagerUser.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Traits;\n\nuse Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException;\nuse TCG\\Voyager\\Facades\\Voyager;\n\n/**\n * @property  \\Illuminate\\Database\\Eloquent\\Collection  roles\n */\ntrait VoyagerUser\n{\n    /**\n     * Return default User Role.\n     */\n    public function role()\n    {\n        return $this->belongsTo(Voyager::modelClass('Role'));\n    }\n\n    /**\n     * Return alternative User Roles.\n     */\n    public function roles()\n    {\n        return $this->belongsToMany(Voyager::modelClass('Role'), 'user_roles', 'user_id', 'role_id');\n    }\n\n    /**\n     * Return all User Roles, merging the default and alternative roles.\n     */\n    public function roles_all()\n    {\n        $this->loadRolesRelations();\n\n        return collect([$this->role])->merge($this->roles);\n    }\n\n    /**\n     * Check if User has a Role(s) associated.\n     *\n     * @param string|array $name The role(s) to check.\n     *\n     * @return bool\n     */\n    public function hasRole($name)\n    {\n        $roles = $this->roles_all()->pluck('name')->toArray();\n\n        foreach ((is_array($name) ? $name : [$name]) as $role) {\n            if (in_array($role, $roles)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Set default User Role.\n     *\n     * @param string $name The role name to associate.\n     */\n    public function setRole($name)\n    {\n        $role = Voyager::model('Role')->where('name', '=', $name)->first();\n\n        if ($role) {\n            $this->role()->associate($role);\n            $this->save();\n        }\n\n        return $this;\n    }\n\n    public function hasPermission($name)\n    {\n        $this->loadPermissionsRelations();\n\n        $_permissions = $this->roles_all()\n                              ->pluck('permissions')->flatten()\n                              ->pluck('key')->unique()->toArray();\n\n        return in_array($name, $_permissions);\n    }\n\n    public function hasPermissionOrFail($name)\n    {\n        if (!$this->hasPermission($name)) {\n            throw new UnauthorizedHttpException(null);\n        }\n\n        return true;\n    }\n\n    public function hasPermissionOrAbort($name, $statusCode = 403)\n    {\n        if (!$this->hasPermission($name)) {\n            return abort($statusCode);\n        }\n\n        return true;\n    }\n\n    private function loadRolesRelations()\n    {\n        if (!$this->relationLoaded('role')) {\n            $this->load('role');\n        }\n\n        if (!$this->relationLoaded('roles')) {\n            $this->load('roles');\n        }\n    }\n\n    private function loadPermissionsRelations()\n    {\n        $this->loadRolesRelations();\n\n        if ($this->role && !$this->role->relationLoaded('permissions')) {\n            $this->role->load('permissions');\n            $this->load('roles.permissions');\n        }\n    }\n}\n"
  },
  {
    "path": "src/Translator/Collection.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Translator;\n\nuse Illuminate\\Support\\Collection as IlluminateCollection;\n\nclass Collection extends IlluminateCollection\n{\n    //\n}\n"
  },
  {
    "path": "src/Translator.php",
    "content": "<?php\n\nnamespace TCG\\Voyager;\n\nuse ArrayAccess;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse JsonSerializable;\nuse TCG\\Voyager\\Facades\\Voyager as VoyagerFacade;\n\nclass Translator implements ArrayAccess, JsonSerializable\n{\n    protected $model;\n    protected $attributes = [];\n    protected $locale;\n\n    public function __construct(Model $model)\n    {\n        if (!$model->relationLoaded('translations')) {\n            $model->load('translations');\n        }\n\n        $this->model = $model;\n        $this->locale = config('voyager.multilingual.default', 'en');\n        $attributes = [];\n\n        foreach ($this->model->getAttributes() as $attribute => $value) {\n            $attributes[$attribute] = [\n                'value'    => $value,\n                'locale'   => $this->locale,\n                'exists'   => true,\n                'modified' => false,\n            ];\n        }\n\n        $this->attributes = $attributes;\n    }\n\n    public function translate($locale = null, $fallback = true)\n    {\n        $this->locale = $locale;\n\n        foreach ($this->model->getTranslatableAttributes() as $attribute) {\n            $this->translateAttribute($attribute, $locale, $fallback);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Save changes made to the translator attributes.\n     *\n     * @return bool\n     */\n    public function save()\n    {\n        $attributes = $this->getModifiedAttributes();\n        $savings = [];\n\n        foreach ($attributes as $key => $attribute) {\n            if ($attribute['exists']) {\n                $translation = $this->getTranslationModel($key);\n            } else {\n                $translation = VoyagerFacade::model('Translation')->where('table_name', $this->model->getTable())\n                    ->where('column_name', $key)\n                    ->where('foreign_key', $this->model->getKey())\n                    ->where('locale', $this->locale)\n                    ->first();\n            }\n\n            if (is_null($translation)) {\n                $translation = VoyagerFacade::model('Translation');\n            }\n\n            $translation->fill([\n                'table_name'  => $this->model->getTable(),\n                'column_name' => $key,\n                'foreign_key' => $this->model->getKey(),\n                'value'       => $attribute['value'],\n                'locale'      => $this->locale,\n            ]);\n\n            $savings[] = $translation->save();\n\n            $this->attributes[$key]['locale'] = $this->locale;\n            $this->attributes[$key]['exists'] = true;\n            $this->attributes[$key]['modified'] = false;\n        }\n\n        return in_array(false, $savings);\n    }\n\n    public function getModel()\n    {\n        return $this->model;\n    }\n\n    public function getRawAttributes()\n    {\n        return $this->attributes;\n    }\n\n    public function getOriginalAttributes()\n    {\n        return $this->model->getAttributes();\n    }\n\n    public function getOriginalAttribute($key)\n    {\n        return $this->model->getAttribute($key);\n    }\n\n    public function getTranslationModel($key, $locale = null)\n    {\n        return $this->model->getRelation('translations')\n            ->where('column_name', $key)\n            ->where('locale', $locale ? $locale : $this->locale)\n            ->first();\n    }\n\n    public function getModifiedAttributes()\n    {\n        return collect($this->attributes)->where('modified', 1)->all();\n    }\n\n    protected function translateAttribute($attribute, $locale = null, $fallback = true)\n    {\n        list($value, $locale, $exists) = $this->model->getTranslatedAttributeMeta($attribute, $locale, $fallback);\n\n        $this->attributes[$attribute] = [\n            'value'    => $value,\n            'locale'   => $locale,\n            'exists'   => $exists,\n            'modified' => false,\n        ];\n\n        return $this;\n    }\n\n    protected function translateAttributeToOriginal($attribute)\n    {\n        $this->attributes[$attribute] = [\n            'value'    => $this->model->attributes[$attribute],\n            'locale'   => config('voyager.multilingual.default', 'en'),\n            'exists'   => true,\n            'modified' => false,\n        ];\n\n        return $this;\n    }\n\n    public function __get($name)\n    {\n        if (!isset($this->attributes[$name])) {\n            if (isset($this->model->$name)) {\n                return $this->model->$name;\n            }\n\n            return;\n        }\n\n        if (!$this->attributes[$name]['exists'] && !$this->attributes[$name]['modified']) {\n            return $this->getOriginalAttribute($name);\n        }\n\n        return $this->attributes[$name]['value'];\n    }\n\n    public function __set($name, $value)\n    {\n        $this->attributes[$name]['value'] = $value;\n\n        if (!in_array($name, $this->model->getTranslatableAttributes())) {\n            return $this->model->$name = $value;\n        }\n\n        $this->attributes[$name]['modified'] = true;\n    }\n\n    public function offsetGet($offset)\n    {\n        return $this->attributes[$offset]['value'];\n    }\n\n    public function offsetSet($offset, $value)\n    {\n        $this->attributes[$offset]['value'] = $value;\n\n        if (!in_array($offset, $this->model->getTranslatableAttributes())) {\n            return $this->model->$offset = $value;\n        }\n\n        $this->attributes[$offset]['modified'] = true;\n    }\n\n    public function offsetExists($offset)\n    {\n        return isset($this->attributes[$offset]);\n    }\n\n    public function offsetUnset($offset)\n    {\n        unset($this->attributes[$offset]);\n    }\n\n    public function getLocale()\n    {\n        return $this->locale;\n    }\n\n    public function translationAttributeExists($name)\n    {\n        if (!isset($this->attributes[$name])) {\n            return false;\n        }\n\n        return $this->attributes[$name]['exists'];\n    }\n\n    public function translationAttributeModified($name)\n    {\n        if (!isset($this->attributes[$name])) {\n            return false;\n        }\n\n        return $this->attributes[$name]['modified'];\n    }\n\n    public function createTranslation($key, $value)\n    {\n        if (!isset($this->attributes[$key])) {\n            return false;\n        }\n\n        if (!in_array($key, $this->model->getTranslatableAttributes())) {\n            return false;\n        }\n\n        $translation = VoyagerFacade::model('Translation');\n        $translation->fill([\n            'table_name'  => $this->model->getTable(),\n            'column_name' => $key,\n            'foreign_key' => $this->model->getKey(),\n            'value'       => $value,\n            'locale'      => $this->locale,\n        ]);\n        $translation->save();\n\n        $this->model->getRelation('translations')->add($translation);\n\n        $this->attributes[$key]['exists'] = true;\n        $this->attributes[$key]['value'] = $value;\n\n        return $this->model->getRelation('translations')\n            ->where('key', $key)\n            ->where('locale', $this->locale)\n            ->first();\n    }\n\n    public function createTranslations(array $translations)\n    {\n        foreach ($translations as $key => $value) {\n            $this->createTranslation($key, $value);\n        }\n    }\n\n    public function deleteTranslation($key)\n    {\n        if (!isset($this->attributes[$key])) {\n            return false;\n        }\n\n        if (!$this->attributes[$key]['exists']) {\n            return false;\n        }\n\n        $translations = $this->model->getRelation('translations');\n        $locale = $this->locale;\n\n        VoyagerFacade::model('Translation')->where('table_name', $this->model->getTable())\n            ->where('column_name', $key)\n            ->where('foreign_key', $this->model->getKey())\n            ->where('locale', $locale)\n            ->delete();\n\n        $this->model->setRelation('translations', $translations->filter(function ($translation) use ($key, $locale) {\n            return $translation->column_name != $key && $translation->locale != $locale;\n        }));\n\n        $this->attributes[$key]['value'] = null;\n        $this->attributes[$key]['exists'] = false;\n        $this->attributes[$key]['modified'] = false;\n\n        return true;\n    }\n\n    public function deleteTranslations(array $keys)\n    {\n        foreach ($keys as $key) {\n            $this->deleteTranslation($key);\n        }\n    }\n\n    public function __call($method, array $arguments)\n    {\n        if (!$this->model->hasTranslatorMethod($method)) {\n            throw new \\Exception('Call to undefined method TCG\\Voyager\\Translator::'.$method.'()');\n        }\n\n        return call_user_func_array([$this, 'runTranslatorMethod'], [$method, $arguments]);\n    }\n\n    public function runTranslatorMethod($method, array $arguments)\n    {\n        array_unshift($arguments, $this);\n\n        $method = $this->model->getTranslatorMethod($method);\n\n        return call_user_func_array([$this->model, $method], $arguments);\n    }\n\n    public function jsonSerialize()\n    {\n        return array_map(function ($array) {\n            return $array['value'];\n        }, $this->getRawAttributes());\n    }\n}\n"
  },
  {
    "path": "src/Voyager.php",
    "content": "<?php\n\nnamespace TCG\\Voyager;\n\nuse Arrilot\\Widgets\\Facade as Widget;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Filesystem\\Filesystem;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Cache;\nuse Illuminate\\Support\\Facades\\Storage;\nuse Illuminate\\Support\\Str;\nuse TCG\\Voyager\\Actions\\DeleteAction;\nuse TCG\\Voyager\\Actions\\EditAction;\nuse TCG\\Voyager\\Actions\\RestoreAction;\nuse TCG\\Voyager\\Actions\\ViewAction;\nuse TCG\\Voyager\\Events\\AlertsCollection;\nuse TCG\\Voyager\\FormFields\\After\\HandlerInterface as AfterHandlerInterface;\nuse TCG\\Voyager\\FormFields\\HandlerInterface;\nuse TCG\\Voyager\\Models\\Category;\nuse TCG\\Voyager\\Models\\DataRow;\nuse TCG\\Voyager\\Models\\DataType;\nuse TCG\\Voyager\\Models\\Menu;\nuse TCG\\Voyager\\Models\\MenuItem;\nuse TCG\\Voyager\\Models\\Page;\nuse TCG\\Voyager\\Models\\Permission;\nuse TCG\\Voyager\\Models\\Post;\nuse TCG\\Voyager\\Models\\Role;\nuse TCG\\Voyager\\Models\\Setting;\nuse TCG\\Voyager\\Models\\Translation;\nuse TCG\\Voyager\\Models\\User;\nuse TCG\\Voyager\\Traits\\Translatable;\n\nclass Voyager\n{\n    protected $version;\n    protected $filesystem;\n\n    protected $alerts = [];\n    protected $alertsCollected = false;\n\n    protected $formFields = [];\n    protected $afterFormFields = [];\n\n    protected $viewLoadingEvents = [];\n\n    protected $actions = [\n        DeleteAction::class,\n        RestoreAction::class,\n        EditAction::class,\n        ViewAction::class,\n    ];\n\n    protected $models = [\n        'Category'    => Category::class,\n        'DataRow'     => DataRow::class,\n        'DataType'    => DataType::class,\n        'Menu'        => Menu::class,\n        'MenuItem'    => MenuItem::class,\n        'Page'        => Page::class,\n        'Permission'  => Permission::class,\n        'Post'        => Post::class,\n        'Role'        => Role::class,\n        'Setting'     => Setting::class,\n        'User'        => User::class,\n        'Translation' => Translation::class,\n    ];\n\n    public $setting_cache = null;\n\n    public function __construct()\n    {\n        $this->filesystem = app(Filesystem::class);\n\n        $this->findVersion();\n    }\n\n    public function model($name)\n    {\n        return app($this->models[Str::studly($name)]);\n    }\n\n    public function modelClass($name)\n    {\n        return $this->models[$name];\n    }\n\n    public function useModel($name, $object)\n    {\n        if (is_string($object)) {\n            $object = app($object);\n        }\n\n        $class = get_class($object);\n\n        if (isset($this->models[Str::studly($name)]) && !$object instanceof $this->models[Str::studly($name)]) {\n            throw new \\Exception(\"[{$class}] must be instance of [{$this->models[Str::studly($name)]}].\");\n        }\n\n        $this->models[Str::studly($name)] = $class;\n\n        return $this;\n    }\n\n    public function view($name, array $parameters = [])\n    {\n        foreach (Arr::get($this->viewLoadingEvents, $name, []) as $event) {\n            $event($name, $parameters);\n        }\n\n        return view($name, $parameters);\n    }\n\n    public function onLoadingView($name, \\Closure $closure)\n    {\n        if (!isset($this->viewLoadingEvents[$name])) {\n            $this->viewLoadingEvents[$name] = [];\n        }\n\n        $this->viewLoadingEvents[$name][] = $closure;\n    }\n\n    public function formField($row, $dataType, $dataTypeContent)\n    {\n        if (!isset($this->formFields[$row->type])) {\n            throw new \\Exception(__('Missing field type: ' . $row->type), 500);\n        }\n\n        $formField = $this->formFields[$row->type];\n\n        return $formField->handle($row, $dataType, $dataTypeContent);\n    }\n\n    public function afterFormFields($row, $dataType, $dataTypeContent)\n    {\n        return collect($this->afterFormFields)->filter(function ($after) use ($row, $dataType, $dataTypeContent) {\n            return $after->visible($row, $dataType, $dataTypeContent, $row->details);\n        });\n    }\n\n    public function addFormField($handler)\n    {\n        if (!$handler instanceof HandlerInterface) {\n            $handler = app($handler);\n        }\n\n        $this->formFields[$handler->getCodename()] = $handler;\n\n        return $this;\n    }\n\n    public function addAfterFormField($handler)\n    {\n        if (!$handler instanceof AfterHandlerInterface) {\n            $handler = app($handler);\n        }\n\n        $this->afterFormFields[$handler->getCodename()] = $handler;\n\n        return $this;\n    }\n\n    public function formFields()\n    {\n        $connection = config('database.default');\n        $driver = config(\"database.connections.{$connection}.driver\", 'mysql');\n\n        return collect($this->formFields)->filter(function ($after) use ($driver) {\n            return $after->supports($driver);\n        });\n    }\n\n    public function addAction($action)\n    {\n        array_push($this->actions, $action);\n    }\n\n    public function replaceAction($actionToReplace, $action)\n    {\n        $key = array_search($actionToReplace, $this->actions);\n        $this->actions[$key] = $action;\n    }\n\n    public function actions()\n    {\n        return $this->actions;\n    }\n\n    /**\n     * Get a collection of dashboard widgets.\n     * Each of our widget groups contain a max of three widgets.\n     * After that, we will switch to a new widget group.\n     *\n     * @return array - Array consisting of \\Arrilot\\Widget\\WidgetGroup objects\n     */\n    public function dimmers()\n    {\n        $widgetClasses = config('voyager.dashboard.widgets');\n        $dimmerGroups = [];\n        $dimmerCount = 0;\n        $dimmers = Widget::group(\"voyager::dimmers-{$dimmerCount}\");\n\n        foreach ($widgetClasses as $widgetClass) {\n            $widget = app($widgetClass);\n\n            if ($widget->shouldBeDisplayed()) {\n\n                // Every third dimmer, we consider out WidgetGroup filled.\n                // We switch that out with another WidgetGroup.\n                if ($dimmerCount % 3 === 0 && $dimmerCount !== 0) {\n                    $dimmerGroups[] = $dimmers;\n                    $dimmerGroupTag = ceil($dimmerCount / 3);\n                    $dimmers = Widget::group(\"voyager::dimmers-{$dimmerGroupTag}\");\n                }\n\n                $dimmers->addWidget($widgetClass);\n                $dimmerCount++;\n            }\n        }\n\n        $dimmerGroups[] = $dimmers;\n\n        return $dimmerGroups;\n    }\n\n    public function setting($key, $default = null)\n    {\n        $globalCache = config('voyager.settings.cache', false);\n\n        if ($globalCache && Cache::tags('settings')->has($key)) {\n            return Cache::tags('settings')->get($key);\n        }\n\n        if ($this->setting_cache === null) {\n            if ($globalCache) {\n                // A key is requested that is not in the cache\n                // this is a good opportunity to update all keys\n                // albeit not strictly necessary\n                Cache::tags('settings')->flush();\n            }\n\n            foreach (self::model('Setting')->orderBy('order')->get() as $setting) {\n                $keys = explode('.', $setting->key);\n                @$this->setting_cache[$keys[0]][$keys[1]] = $setting->value;\n\n                if ($globalCache) {\n                    Cache::tags('settings')->forever($setting->key, $setting->value);\n                }\n            }\n        }\n\n        $parts = explode('.', $key);\n\n        if (count($parts) == 2) {\n            return @$this->setting_cache[$parts[0]][$parts[1]] ?: $default;\n        } else {\n            return @$this->setting_cache[$parts[0]] ?: $default;\n        }\n    }\n\n    public function image($file, $default = '')\n    {\n        if (!empty($file)) {\n            return str_replace('\\\\', '/', Storage::disk(config('voyager.storage.disk'))->url($file));\n        }\n\n        return $default;\n    }\n\n    public function routes()\n    {\n        require __DIR__.'/../routes/voyager.php';\n    }\n\n    public function getVersion()\n    {\n        return $this->version;\n    }\n\n    public function addAlert(Alert $alert)\n    {\n        $this->alerts[] = $alert;\n    }\n\n    public function alerts()\n    {\n        if (!$this->alertsCollected) {\n            event(new AlertsCollection($this->alerts));\n\n            $this->alertsCollected = true;\n        }\n\n        return $this->alerts;\n    }\n\n    protected function findVersion()\n    {\n        if (!is_null($this->version)) {\n            return;\n        }\n\n        if ($this->filesystem->exists(base_path('composer.lock'))) {\n            // Get the composer.lock file\n            $file = json_decode(\n                $this->filesystem->get(base_path('composer.lock'))\n            );\n\n            // Loop through all the packages and get the version of voyager\n            foreach ($file->packages as $package) {\n                if ($package->name == 'tcg/voyager') {\n                    $this->version = $package->version;\n                    break;\n                }\n            }\n        }\n    }\n\n    /**\n     * @param string|Model|Collection $model\n     *\n     * @return bool\n     */\n    public function translatable($model)\n    {\n        if (!config('voyager.multilingual.enabled')) {\n            return false;\n        }\n\n        if (is_string($model)) {\n            $model = app($model);\n        }\n\n        if ($model instanceof Collection) {\n            $model = $model->first();\n        }\n\n        if (!is_subclass_of($model, Model::class)) {\n            return false;\n        }\n\n        $traits = class_uses_recursive(get_class($model));\n\n        return in_array(Translatable::class, $traits);\n    }\n\n    public function getLocales()\n    {\n        $appLocales = [];\n        if ($this->filesystem->exists(resource_path('lang/vendor/voyager'))) {\n            $appLocales = array_diff(scandir(resource_path('lang/vendor/voyager')), ['..', '.']);\n        }\n\n        $vendorLocales = array_diff(scandir(realpath(__DIR__.'/../publishable/lang')), ['..', '.']);\n        $allLocales = array_merge($vendorLocales, $appLocales);\n\n        asort($allLocales);\n\n        return $allLocales;\n    }\n}\n"
  },
  {
    "path": "src/VoyagerServiceProvider.php",
    "content": "<?php\n\nnamespace TCG\\Voyager;\n\nuse Illuminate\\Contracts\\Events\\Dispatcher;\nuse Illuminate\\Database\\Eloquent\\Collection;\nuse Illuminate\\Foundation\\AliasLoader;\nuse Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider as ServiceProvider;\nuse Illuminate\\Pagination\\Paginator;\nuse Illuminate\\Routing\\Router;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Support\\Facades\\Log;\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Support\\Facades\\View;\nuse Illuminate\\Support\\Str;\nuse Intervention\\Image\\ImageServiceProvider;\nuse TCG\\Voyager\\Events\\FormFieldsRegistered;\nuse TCG\\Voyager\\Facades\\Voyager as VoyagerFacade;\nuse TCG\\Voyager\\FormFields\\After\\DescriptionHandler;\nuse TCG\\Voyager\\Http\\Middleware\\VoyagerAdminMiddleware;\nuse TCG\\Voyager\\Models\\MenuItem;\nuse TCG\\Voyager\\Models\\Setting;\nuse TCG\\Voyager\\Policies\\BasePolicy;\nuse TCG\\Voyager\\Policies\\MenuItemPolicy;\nuse TCG\\Voyager\\Policies\\SettingPolicy;\nuse TCG\\Voyager\\Providers\\VoyagerDummyServiceProvider;\nuse TCG\\Voyager\\Providers\\VoyagerEventServiceProvider;\nuse TCG\\Voyager\\Seed;\nuse TCG\\Voyager\\Translator\\Collection as TranslatorCollection;\n\nclass VoyagerServiceProvider extends ServiceProvider\n{\n    /**\n     * The policy mappings for the application.\n     *\n     * @var array\n     */\n    protected $policies = [\n        Setting::class  => SettingPolicy::class,\n        MenuItem::class => MenuItemPolicy::class,\n    ];\n\n    protected $gates = [\n        'browse_admin',\n        'browse_bread',\n        'browse_database',\n        'browse_media',\n        'browse_compass',\n    ];\n\n    /**\n     * Register the application services.\n     */\n    public function register()\n    {\n        $this->app->register(VoyagerEventServiceProvider::class);\n        $this->app->register(ImageServiceProvider::class);\n        $this->app->register(VoyagerDummyServiceProvider::class);\n\n        $loader = AliasLoader::getInstance();\n        $loader->alias('Voyager', VoyagerFacade::class);\n\n        $this->app->singleton('voyager', function () {\n            return new Voyager();\n        });\n\n        $this->app->singleton('VoyagerGuard', function () {\n            return config('auth.defaults.guard', 'web');\n        });\n\n        $this->loadHelpers();\n\n        $this->registerAlertComponents();\n        $this->registerFormFields();\n\n        $this->registerConfigs();\n\n        if ($this->app->runningInConsole()) {\n            $this->registerPublishableResources();\n            $this->registerConsoleCommands();\n        }\n\n        if (!$this->app->runningInConsole() || config('app.env') == 'testing') {\n            $this->registerAppCommands();\n        }\n    }\n\n    /**\n     * Bootstrap the application services.\n     *\n     * @param \\Illuminate\\Routing\\Router $router\n     */\n    public function boot(Router $router, Dispatcher $event)\n    {\n        if (config('voyager.user.add_default_role_on_register')) {\n            $model = Auth::guard(app('VoyagerGuard'))->getProvider()->getModel();\n            call_user_func($model.'::created', function ($user) use ($model) {\n                if (is_null($user->role_id)) {\n                    call_user_func($model.'::findOrFail', $user->id)\n                        ->setRole(config('voyager.user.default_role'))\n                        ->save();\n                }\n            });\n        }\n\n        $this->loadViewsFrom(__DIR__.'/../resources/views', 'voyager');\n\n        $router->aliasMiddleware('admin.user', VoyagerAdminMiddleware::class);\n\n        $this->loadTranslationsFrom(realpath(__DIR__.'/../publishable/lang'), 'voyager');\n\n        if (config('voyager.database.autoload_migrations', true)) {\n            if (config('app.env') == 'testing') {\n                $this->loadMigrationsFrom(realpath(__DIR__.'/migrations'));\n            }\n\n            $this->loadMigrationsFrom(realpath(__DIR__.'/../migrations'));\n        }\n\n        $this->loadAuth();\n\n        $this->registerViewComposers();\n\n        $event->listen('voyager.alerts.collecting', function () {\n            $this->addStorageSymlinkAlert();\n        });\n\n        $this->bootTranslatorCollectionMacros();\n\n        if (method_exists('Paginator', 'useBootstrap')) {\n            Paginator::useBootstrap();\n        }\n    }\n\n    /**\n     * Load helpers.\n     */\n    protected function loadHelpers()\n    {\n        foreach (glob(__DIR__.'/Helpers/*.php') as $filename) {\n            require_once $filename;\n        }\n    }\n\n    /**\n     * Register view composers.\n     */\n    protected function registerViewComposers()\n    {\n        // Register alerts\n        View::composer('voyager::*', function ($view) {\n            $view->with('alerts', VoyagerFacade::alerts());\n        });\n    }\n\n    /**\n     * Add storage symlink alert.\n     */\n    protected function addStorageSymlinkAlert()\n    {\n        if (app('router')->current() !== null) {\n            $currentRouteAction = app('router')->current()->getAction();\n        } else {\n            $currentRouteAction = null;\n        }\n        $routeName = is_array($currentRouteAction) ? Arr::get($currentRouteAction, 'as') : null;\n\n        if ($routeName != 'voyager.dashboard') {\n            return;\n        }\n\n        $storage_disk = (!empty(config('voyager.storage.disk'))) ? config('voyager.storage.disk') : 'public';\n\n        if (request()->has('fix-missing-storage-symlink')) {\n            if (file_exists(public_path('storage'))) {\n                if (@readlink(public_path('storage')) == public_path('storage')) {\n                    rename(public_path('storage'), 'storage_old');\n                }\n            }\n\n            if (!file_exists(public_path('storage'))) {\n                $this->fixMissingStorageSymlink();\n            }\n        } elseif ($storage_disk == 'public') {\n            if (!file_exists(public_path('storage')) || @readlink(public_path('storage')) == public_path('storage')) {\n                $alert = (new Alert('missing-storage-symlink', 'warning'))\n                    ->title(__('voyager::error.symlink_missing_title'))\n                    ->text(__('voyager::error.symlink_missing_text'))\n                    ->button(__('voyager::error.symlink_missing_button'), '?fix-missing-storage-symlink=1');\n                VoyagerFacade::addAlert($alert);\n            }\n        }\n    }\n\n    protected function fixMissingStorageSymlink()\n    {\n        app('files')->link(storage_path('app/public'), public_path('storage'));\n\n        if (file_exists(public_path('storage'))) {\n            $alert = (new Alert('fixed-missing-storage-symlink', 'success'))\n                ->title(__('voyager::error.symlink_created_title'))\n                ->text(__('voyager::error.symlink_created_text'));\n        } else {\n            $alert = (new Alert('failed-fixing-missing-storage-symlink', 'danger'))\n                ->title(__('voyager::error.symlink_failed_title'))\n                ->text(__('voyager::error.symlink_failed_text'));\n        }\n\n        VoyagerFacade::addAlert($alert);\n    }\n\n    /**\n     * Register alert components.\n     */\n    protected function registerAlertComponents()\n    {\n        $components = ['title', 'text', 'button'];\n\n        foreach ($components as $component) {\n            $class = 'TCG\\\\Voyager\\\\Alert\\\\Components\\\\'.ucfirst(Str::camel($component)).'Component';\n\n            $this->app->bind(\"voyager.alert.components.{$component}\", $class);\n        }\n    }\n\n    protected function bootTranslatorCollectionMacros()\n    {\n        Collection::macro('translate', function () {\n            $transtors = [];\n\n            foreach ($this->all() as $item) {\n                $transtors[] = call_user_func_array([$item, 'translate'], func_get_args());\n            }\n\n            return new TranslatorCollection($transtors);\n        });\n    }\n\n    /**\n     * Register the publishable files.\n     */\n    private function registerPublishableResources()\n    {\n        $publishablePath = dirname(__DIR__).'/publishable';\n\n        $publishable = [\n            'voyager_avatar' => [\n                \"{$publishablePath}/dummy_content/users/\" => storage_path('app/public/users'),\n            ],\n            'seeders' => [\n                \"{$publishablePath}/database/seeders/\" => database_path('seeders'),\n            ],\n            'config' => [\n                \"{$publishablePath}/config/voyager.php\" => config_path('voyager.php'),\n            ],\n\n        ];\n\n        foreach ($publishable as $group => $paths) {\n            $this->publishes($paths, $group);\n        }\n    }\n\n    public function registerConfigs()\n    {\n        $this->mergeConfigFrom(\n            dirname(__DIR__).'/publishable/config/voyager.php',\n            'voyager'\n        );\n    }\n\n    public function loadAuth()\n    {\n        // DataType Policies\n\n        // This try catch is necessary for the Package Auto-discovery\n        // otherwise it will throw an error because no database\n        // connection has been made yet.\n        try {\n            if (Schema::hasTable(VoyagerFacade::model('DataType')->getTable())) {\n                $dataType = VoyagerFacade::model('DataType');\n                $dataTypes = $dataType->select('policy_name', 'model_name')->get();\n\n                foreach ($dataTypes as $dataType) {\n                    $policyClass = BasePolicy::class;\n                    if (isset($dataType->policy_name) && $dataType->policy_name !== ''\n                        && class_exists($dataType->policy_name)) {\n                        $policyClass = $dataType->policy_name;\n                    }\n\n                    $this->policies[$dataType->model_name] = $policyClass;\n                }\n\n                $this->registerPolicies();\n            }\n        } catch (\\PDOException $e) {\n            Log::info('No database connection yet in VoyagerServiceProvider loadAuth(). No worries, this is not a problem!');\n        }\n\n        // Gates\n        foreach ($this->gates as $gate) {\n            Gate::define($gate, function ($user) use ($gate) {\n                return $user->hasPermission($gate);\n            });\n        }\n    }\n\n    protected function registerFormFields()\n    {\n        $formFields = [\n            'checkbox',\n            'multiple_checkbox',\n            'color',\n            'date',\n            'file',\n            'image',\n            'multiple_images',\n            'media_picker',\n            'number',\n            'password',\n            'radio_btn',\n            'rich_text_box',\n            'code_editor',\n            'markdown_editor',\n            'select_dropdown',\n            'select_multiple',\n            'text',\n            'text_area',\n            'time',\n            'timestamp',\n            'hidden',\n            'coordinates',\n        ];\n\n        foreach ($formFields as $formField) {\n            $class = Str::studly(\"{$formField}_handler\");\n\n            VoyagerFacade::addFormField(\"TCG\\\\Voyager\\\\FormFields\\\\{$class}\");\n        }\n\n        VoyagerFacade::addAfterFormField(DescriptionHandler::class);\n\n        event(new FormFieldsRegistered($formFields));\n    }\n\n    /**\n     * Register the commands accessible from the Console.\n     */\n    private function registerConsoleCommands()\n    {\n        $this->commands(Commands\\InstallCommand::class);\n        $this->commands(Commands\\ControllersCommand::class);\n        $this->commands(Commands\\AdminCommand::class);\n    }\n\n    /**\n     * Register the commands accessible from the App.\n     */\n    private function registerAppCommands()\n    {\n        $this->commands(Commands\\MakeModelCommand::class);\n    }\n}\n"
  },
  {
    "path": "src/Widgets/BaseDimmer.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Widgets;\n\nuse Arrilot\\Widgets\\AbstractWidget;\n\nabstract class BaseDimmer extends AbstractWidget\n{\n    /**\n     * Determine if the widget should be displayed.\n     *\n     * @return bool\n     */\n    public function shouldBeDisplayed()\n    {\n        return true;\n    }\n}\n"
  },
  {
    "path": "src/Widgets/PageDimmer.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Widgets;\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Str;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass PageDimmer extends BaseDimmer\n{\n    /**\n     * The configuration array.\n     *\n     * @var array\n     */\n    protected $config = [];\n\n    /**\n     * Treat this method as a controller action.\n     * Return view() or other content to display.\n     */\n    public function run()\n    {\n        $count = Voyager::model('Page')->count();\n        $string = trans_choice('voyager::dimmer.page', $count);\n\n        return view('voyager::dimmer', array_merge($this->config, [\n            'icon'   => 'voyager-file-text',\n            'title'  => \"{$count} {$string}\",\n            'text'   => __('voyager::dimmer.page_text', ['count' => $count, 'string' => Str::lower($string)]),\n            'button' => [\n                'text' => __('voyager::dimmer.page_link_text'),\n                'link' => route('voyager.pages.index'),\n            ],\n            'image' => voyager_asset('images/widget-backgrounds/03.jpg'),\n        ]));\n    }\n\n    /**\n     * Determine if the widget should be displayed.\n     *\n     * @return bool\n     */\n    public function shouldBeDisplayed()\n    {\n        return Auth::user()->can('browse', Voyager::model('Page'));\n    }\n}\n"
  },
  {
    "path": "src/Widgets/PostDimmer.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Widgets;\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Str;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass PostDimmer extends BaseDimmer\n{\n    /**\n     * The configuration array.\n     *\n     * @var array\n     */\n    protected $config = [];\n\n    /**\n     * Treat this method as a controller action.\n     * Return view() or other content to display.\n     */\n    public function run()\n    {\n        $count = Voyager::model('Post')->count();\n        $string = trans_choice('voyager::dimmer.post', $count);\n\n        return view('voyager::dimmer', array_merge($this->config, [\n            'icon'   => 'voyager-news',\n            'title'  => \"{$count} {$string}\",\n            'text'   => __('voyager::dimmer.post_text', ['count' => $count, 'string' => Str::lower($string)]),\n            'button' => [\n                'text' => __('voyager::dimmer.post_link_text'),\n                'link' => route('voyager.posts.index'),\n            ],\n            'image' => voyager_asset('images/widget-backgrounds/02.jpg'),\n        ]));\n    }\n\n    /**\n     * Determine if the widget should be displayed.\n     *\n     * @return bool\n     */\n    public function shouldBeDisplayed()\n    {\n        return Auth::user()->can('browse', Voyager::model('Post'));\n    }\n}\n"
  },
  {
    "path": "src/Widgets/UserDimmer.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Widgets;\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Str;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass UserDimmer extends BaseDimmer\n{\n    /**\n     * The configuration array.\n     *\n     * @var array\n     */\n    protected $config = [];\n\n    /**\n     * Treat this method as a controller action.\n     * Return view() or other content to display.\n     */\n    public function run()\n    {\n        $count = Voyager::model('User')->count();\n        $string = trans_choice('voyager::dimmer.user', $count);\n\n        return view('voyager::dimmer', array_merge($this->config, [\n            'icon'   => 'voyager-group',\n            'title'  => \"{$count} {$string}\",\n            'text'   => __('voyager::dimmer.user_text', ['count' => $count, 'string' => Str::lower($string)]),\n            'button' => [\n                'text' => __('voyager::dimmer.user_link_text'),\n                'link' => route('voyager.users.index'),\n            ],\n            'image' => voyager_asset('images/widget-backgrounds/01.jpg'),\n        ]));\n    }\n\n    /**\n     * Determine if the widget should be displayed.\n     *\n     * @return bool\n     */\n    public function shouldBeDisplayed()\n    {\n        return Auth::user()->can('browse', Voyager::model('User'));\n    }\n}\n"
  },
  {
    "path": "stubs/controller.stub",
    "content": "<?php\n\nnamespace DummyNamespace;\n\nuse FullBaseDummyClass as BaseDummyClass;\n\nclass DummyClass extends BaseDummyClass\n{\n    //\n}\n"
  },
  {
    "path": "stubs/model.stub",
    "content": "<?php\n\nnamespace DummyNamespace;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n//DummySDTraitInclude\n\nclass DummyClass extends Model\n{\n    //DummySDTrait\n}\n"
  },
  {
    "path": "tests/AlertTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse TCG\\Voyager\\Alert;\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass AlertTest extends TestCase\n{\n    public function testAlertsAreRegistered()\n    {\n        $alert = (new Alert('test', 'warning'))\n            ->title('Title');\n\n        Voyager::addAlert($alert);\n\n        $alerts = Voyager::alerts();\n\n        $this->assertCount(1, $alerts);\n    }\n\n    public function testComponentRenders()\n    {\n        Voyager::addAlert((new Alert('test', 'warning'))\n            ->title('Title')\n            ->text('Text')\n            ->button('Button', 'http://example.com', 'danger'));\n\n        $alerts = Voyager::alerts();\n\n        $this->assertEquals('<strong>Title</strong>', $alerts[0]->components[0]->render());\n        $this->assertEquals('<p>Text</p>', $alerts[0]->components[1]->render());\n        $this->assertEquals(\"<a href='http://example.com' class='btn btn-danger'>Button</a>\", $alerts[0]->components[2]->render());\n    }\n\n    public function testAlertsRenders()\n    {\n        Voyager::addAlert((new Alert('test', 'warning'))\n            ->title('Title')\n            ->text('Text')\n            ->button('Button', 'http://example.com', 'danger'));\n\n        Voyager::addAlert((new Alert('foo'))\n            ->title('Bar')\n            ->text('Foobar')\n            ->button('Link', 'http://example.org'));\n\n        $this->assertXmlStringEqualsXmlFile(\n            __DIR__.'/rendered_alerts.html',\n            view('voyager::alerts')->render()\n        );\n    }\n}\n"
  },
  {
    "path": "tests/AssetsTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass AssetsTest extends TestCase\n{\n    protected $prefix = '/voyager-assets?path=';\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        Auth::loginUsingId(1);\n    }\n\n    public function testCanOpenFileInAssets()\n    {\n        $url = route('voyager.dashboard').$this->prefix.'css/app.css';\n\n        $response = $this->call('GET', $url);\n        $this->assertEquals(200, $response->status(), $url.' did not return a 200');\n    }\n\n    public static function urlProvider()\n    {\n        return [\n            [\n                '../dummy_content/pages/page1.jpg',\n                '..../dummy_content/pages/page1.jpg',\n                'images/../../dummy_content/pages/page1.jpg',\n                '....//dummy_content/pages/page1.jpg',\n                '..\\dummy_content/pages/page1.jpg',\n                '....\\dummy_content/pages/page1.jpg',\n                'images/..\\..\\dummy_content/pages/page1.jpg',\n                'images/....\\\\....\\\\dummy_content/pages/page1.jpg',\n            ],\n        ];\n    }\n\n    /**\n     * @dataProvider  urlProvider\n     */\n    public function testCannotOpenFileOutsideAssets($url)\n    {\n        $response = $this->call('GET', route('voyager.dashboard').$this->prefix.$url);\n        $this->assertContains($response->status(), [404, 500], $url.' did not return a 404 or 500');\n    }\n}\n"
  },
  {
    "path": "tests/BreadMediaUploadTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Http\\UploadedFile;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Storage;\nuse TCG\\Voyager\\Models\\DataRow;\nuse TCG\\Voyager\\Models\\DataType;\nuse TCG\\Voyager\\Models\\Page;\n\nclass BreadMediaUploadTest extends TestCase\n{\n    protected $file = 'test.txt';\n    protected $file_two = 'test2.txt';\n    protected $file_three = 'test.pdf';\n    protected $image_one = 'test1.png';\n    protected $image_two = 'test2.png';\n    protected $image_three = 'test3.png';\n    protected $details = '{\"thumbnails\":[{\"name\":\"small\",\"scale\":\"25%\"},{\"name\":\"medium\",\"scale\":\"50%\"},{\"name\":\"large\",\"scale\":\"75%\"}]}';\n    protected $storage;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        Auth::loginUsingId(1);\n\n        $this->storage = Storage::disk(config('voyager.storage.disk'));\n    }\n\n    public function testMultipleImagesUpload()\n    {\n        $images = [$this->image_one, $this->image_two, $this->image_three];\n\n        $page = $this->uploadMedia($images, 'multiple_images');\n\n        $files = json_decode($page->image, true);\n\n        $this->storage->assertExists($files[0]);\n        $this->storage->assertExists($files[1]);\n        $this->storage->assertExists($files[2]);\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n    }\n\n    public function testMultipleImagesDelete()\n    {\n        $images = [$this->image_one, $this->image_two, $this->image_three];\n\n        $page = $this->uploadMedia($images, 'multiple_images');\n\n        $files = json_decode($page->image, true);\n\n        $response = $this->post(route('voyager.pages.media.remove'), [\n            'id'        => $page->id,\n            'slug'      => 'pages',\n            'field'     => 'image',\n            'multi'     => 'true',\n            'filename'  => $files[1],\n        ]);\n\n        $this->storage->assertExists($files[0]);\n        $this->storage->assertMissing($files[1]);\n        $this->storage->assertExists($files[2]);\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n    }\n\n    public function testMultipleImagesRemoveOnDelete()\n    {\n        $images = [$this->image_one, $this->image_two, $this->image_three];\n\n        $page = $this->uploadMedia($images, 'multiple_images');\n\n        $files = json_decode($page->image, true);\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n\n        $this->storage->assertMissing($files[0]);\n        $this->storage->assertMissing($files[1]);\n        $this->storage->assertMissing($files[2]);\n    }\n\n    public function testImageWithThumbnailsUpload()\n    {\n        $page = $this->uploadMedia([$this->image_one], 'image', json_decode($this->details));\n\n        $details = json_decode($this->details);\n\n        foreach ($details->thumbnails as $thumbnail) {\n            $path = preg_replace('/(.*)(\\.[\\w\\d]{2,4})$/', '$1-'.$thumbnail->name.'$2', $page->image);\n\n            $this->storage->assertExists($path);\n        }\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n    }\n\n    public function testImageWithThumbnailsDelete()\n    {\n        $page = $this->uploadMedia([$this->image_one], 'image', json_decode($this->details));\n\n        $response = $this->post(route('voyager.pages.media.remove'), [\n            'id'        => $page->id,\n            'slug'      => 'pages',\n            'field'     => 'image',\n            'multi'     => 'false',\n            'filename'  => $page->image,\n        ]);\n\n        $details = json_decode($this->details);\n        foreach ($details->thumbnails as $thumbnail) {\n            $path = preg_replace('/(.*)(\\.[\\w\\d]{2,4})$/', '$1-'.$thumbnail->name.'$2', $page->image);\n            $this->storage->assertMissing($path);\n        }\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n    }\n\n    public function testImageWithThumbnailsRemoveOnDelete()\n    {\n        $page = $this->uploadMedia([$this->image_one], 'image', json_decode($this->details));\n\n        $details = json_decode($this->details);\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n\n        foreach ($details->thumbnails as $thumbnail) {\n            $path = preg_replace('/(.*)(\\.[\\w\\d]{2,4})$/', '$1-'.$thumbnail->name.'$2', $page->image);\n\n            $this->storage->assertMissing($path);\n        }\n    }\n\n    public function testMultipleImagesWithThumbnailsUpload()\n    {\n        $images = [$this->image_one, $this->image_two, $this->image_three];\n\n        $page = $this->uploadMedia($images, 'multiple_images', json_decode($this->details));\n\n        $files = json_decode($page->image, true);\n        $details = json_decode($this->details);\n\n        foreach ($files as $file) {\n            foreach ($details->thumbnails as $thumbnail) {\n                $path = preg_replace('/(.*)(\\.[\\w\\d]{2,4})$/', '$1-'.$thumbnail->name.'$2', $file);\n\n                $this->storage->assertExists($path);\n            }\n        }\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n    }\n\n    public function testMultipleImagesWithThumbnailsDelete()\n    {\n        $images = [$this->image_one, $this->image_two, $this->image_three];\n\n        $page = $this->uploadMedia($images, 'multiple_images', json_decode($this->details));\n\n        $files = json_decode($page->image, true);\n\n        $response = $this->post(route('voyager.pages.media.remove'), [\n            'id'        => $page->id,\n            'slug'      => 'pages',\n            'field'     => 'image',\n            'multi'     => 'true',\n            'filename'  => $files[1],\n        ]);\n\n        $details = json_decode($this->details);\n\n        foreach ($files as $file) {\n            foreach ($details->thumbnails as $thumbnail) {\n                $path = preg_replace('/(.*)(\\.[\\w\\d]{2,4})$/', '$1-'.$thumbnail->name.'$2', $file);\n\n                if ($file == $files[1]) {\n                    $this->storage->assertMissing($path);\n                } else {\n                    $this->storage->assertExists($path);\n                }\n            }\n        }\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n    }\n\n    public function testMultipleImagesWithThumbnailsRemoveOnDelete()\n    {\n        $images = [$this->image_one, $this->image_two, $this->image_three];\n\n        $page = $this->uploadMedia($images, 'multiple_images', json_decode($this->details));\n\n        $files = json_decode($page->image, true);\n        $details = json_decode($this->details);\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n\n        foreach ($files as $file) {\n            foreach ($details->thumbnails as $thumbnail) {\n                $path = preg_replace('/(.*)(\\.[\\w\\d]{2,4})$/', '$1-'.$thumbnail->name.'$2', $file);\n\n                $this->storage->assertMissing($path);\n            }\n        }\n    }\n\n    public function testFileUpload()\n    {\n        $page = $this->uploadMedia([$this->file], 'file');\n\n        $file = json_decode($page->image, true);\n        $this->storage->assertExists($file[0]['download_link']);\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n    }\n\n    public function testFileDelete()\n    {\n        $page = $this->uploadMedia([$this->file], 'file');\n\n        $file = json_decode($page->image, true);\n\n        $this->call('POST', route('voyager.pages.media.remove'), [\n            'id'        => $page->id,\n            'slug'      => 'pages',\n            'field'     => 'image',\n            'multi'     => 'true',\n            'filename'  => $file[0]['original_name'],\n        ]);\n\n        $this->storage->assertMissing($file[0]['download_link']);\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n    }\n\n    public function testValidationForFile()\n    {\n        $validation = '{\"validation\":{\"rule\":\"mimes:txt\"}}';\n\n        $page = $this->uploadMedia([$this->file, $this->file_three], 'file', json_decode($validation));\n\n        $this->assertTrue($page === null);\n\n        $page = $this->uploadMedia([$this->file, $this->file_two], 'file', json_decode($validation));\n\n        $file = json_decode($page->image, true);\n\n        $this->storage->assertExists($file[0]['download_link']);\n        $this->storage->assertExists($file[1]['download_link']);\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n    }\n\n    public function testFileRemoveOnDelete()\n    {\n        $page = $this->uploadMedia([$this->file], 'file');\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n\n        $file = json_decode($page->image, true);\n        $this->storage->assertMissing($file[0]['download_link']);\n    }\n\n    public function testUploadSecondFile()\n    {\n        // First file\n        $page = $this->uploadMedia([$this->file], 'file');\n\n        // Second file\n        $file = [];\n        $file[] = UploadedFile::fake()->create($this->file_two, 1);\n        $this->call('PUT', route('voyager.pages.update', $page->id), [\n            'author_id' => $page->author_id,\n            'title'     => $page->title,\n            'slug'      => $page->slug,\n            'status'    => $page->status,\n        ], [], [\n            'image' => $file,\n        ]);\n\n        $page = Page::where('slug', $page->slug)->firstOrFail();\n\n        $file = json_decode($page->image, true);\n\n        $this->storage->assertExists($file[0]['download_link']);\n        $this->storage->assertExists($file[1]['download_link']);\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n    }\n\n    public function testImageUpload()\n    {\n        $page = $this->uploadMedia([$this->image_one], 'image');\n\n        $this->storage->assertExists($page->image);\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n    }\n\n    public function testImageDelete()\n    {\n        $page = $this->uploadMedia([$this->image_one], 'image');\n\n        $response = $this->post(route('voyager.pages.media.remove'), [\n            'id'        => $page->id,\n            'slug'      => 'pages',\n            'field'     => 'image',\n            'multi'     => 'false',\n            'filename'  => $page->image,\n        ]);\n\n        $this->storage->assertMissing($page->image);\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n    }\n\n    public function testImageRemoveOnDelete()\n    {\n        $page = $this->uploadMedia([$this->image_one], 'image');\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n\n        $this->storage->assertMissing($page->image);\n    }\n\n    private function uploadMedia($names, $type, $details = '')\n    {\n        // Change dataRow type and details\n        $data_type_id = DataType::where('slug', 'pages')->first()->id;\n\n        $data_row = DataRow::where(['data_type_id' => $data_type_id, 'field' => 'image'])->first();\n        $data_row->type = $type;\n        $data_row->details = $details;\n        $data_row->save();\n\n        switch ($type) {\n            case 'image':\n                $file = UploadedFile::fake()->image($names[0]);\n                break;\n            case 'file':\n                $file = [];\n\n                foreach ($names as $name) {\n                    $file[] = UploadedFile::fake()->create($name, 1);\n                }\n                break;\n            case 'multiple_images':\n                $file = [];\n\n                foreach ($names as $name) {\n                    $file[] = UploadedFile::fake()->image($name);\n                }\n                break;\n        }\n\n        $this->call('POST', route('voyager.pages.store'), [\n            'author_id' => 1,\n            'title'     => 'Upload',\n            'slug'      => 'upload-media',\n            'status'    => 'ACTIVE',\n        ], [], [\n            'image' => $file,\n        ]);\n\n        $page = Page::where('slug', 'upload-media')->first();\n\n        return $page;\n    }\n}\n"
  },
  {
    "path": "tests/CompassTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass CompassTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        Auth::loginUsingId(1);\n    }\n\n    public function tearDown(): void\n    {\n        parent::tearDown();\n\n        if (file_exists(base_path('app/Models/TestModel.php'))) {\n            unlink(base_path('app/Models/TestModel.php'));\n        }\n    }\n\n    private function enableCompass()\n    {\n        $this->app['config']->set('voyager.compass_in_production', true);\n    }\n\n    private function logString($string)\n    {\n        \\Illuminate\\Support\\Facades\\Log::info($string);\n    }\n\n    public function testCantAccessCompass()\n    {\n        // Can't access compass because environment is != local (testing)\n        $response = $this->call('GET', route('voyager.compass.index'));\n        $this->assertEquals(403, $response->status());\n    }\n\n    public function testCanAccessCompass()\n    {\n        // Can access compass because we set voyager.compass_in_production configuration to true\n        $this->enableCompass();\n\n        $response = $this->call('GET', route('voyager.compass.index'));\n        $this->assertEquals(200, $response->status());\n    }\n\n    public function testCanSeeLaravelLog()\n    {\n        $info = 'This is a test log';\n        $this->logString($info);\n        $this->enableCompass();\n\n        $this->visit(route('voyager.compass.index').'?log='.base64_encode('laravel.log'))\n             ->see($info);\n    }\n\n    public function testCanExecuteCommand()\n    {\n        $this->enableCompass();\n\n        $response = $this->post(route('voyager.compass.index'), [\n            'command' => 'make:model',\n            'args'    => 'TestModel',\n        ]);\n        $this->assertStringContainsString('created successfully.', $response->response->content());\n    }\n\n    public function testCannotExecuteUnknownCommand()\n    {\n        $this->enableCompass();\n\n        $response = $this->post(route('voyager.compass.index'), [\n            'command' => 'unknown:command',\n            'args'    => 'AnArgument',\n        ]);\n        $this->assertStringContainsString('The command &quot;unknown:command&quot; does not exist.', $response->response->content());\n    }\n\n    public function testCanDeleteLaravelLog()\n    {\n        $this->enableCompass();\n\n        $response = $this->call('GET', route('voyager.compass.index').'?del='.base64_encode('laravel.log'));\n        $this->assertEquals(302, $response->status()); // Redirect\n    }\n}\n"
  },
  {
    "path": "tests/DatabaseTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Doctrine\\DBAL\\Schema\\SchemaException;\nuse Illuminate\\Support\\Facades\\Auth;\nuse TCG\\Voyager\\Database\\Schema\\SchemaManager;\nuse TCG\\Voyager\\Database\\Schema\\Table;\nuse TCG\\Voyager\\Database\\Types\\Type;\nuse TCG\\Voyager\\Traits\\AlertsMessages;\n\nclass DatabaseTest extends TestCase\n{\n    use AlertsMessages;\n\n    protected $table;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        // todo: make sure tests are isolated and do not effect other ones\n        // todo: interract with Table object directly instead of array?\n        // todo: maybe perform the updates using one call to update_table?\n        Type::registerCustomPlatformTypes(true);\n        Auth::loginUsingId(1);\n\n        // Prepare table\n        $newTable = new Table('test_table_new');\n\n        $newTable->addColumn('id', 'integer', [\n            'autoincrement' => true,\n        ]);\n\n        $newTable->addColumn('details', 'json', [\n            'notnull' => true,\n        ]);\n\n        $newTable->setPrimaryKey(['id'], 'primary');\n\n        $this->table = $newTable->toArray();\n\n        // Create table\n        $this->post(route('voyager.database.store'), [\n            'table' => json_encode($this->table),\n        ]);\n    }\n\n    public function test_table_created_successfully()\n    {\n        // Test correct response\n        $this->assertSessionHasAll($this->alertSuccess(__('voyager::database.success_create_table', ['table' => $this->table['name']])));\n        $this->assertRedirectedToRoute('voyager.database.index');\n\n        // Test table exists\n        $this->assertTrue(SchemaManager::tableExists($this->table['name']));\n\n        // Test database table details to be correct\n        $dbTable = SchemaManager::listTableDetails($this->table['name']);\n\n        $id = $dbTable->getColumn('id');\n        $details = $dbTable->getColumn('details');\n        // Column Type\n        $this->assertEquals('integer', $id->getType()->getName());\n        $this->assertEquals('json', $details->getType()->getName());\n        // Column auto increment\n        $this->assertTrue($id->getAutoIncrement());\n        // Column not null\n        $this->assertTrue($details->getNotnull());\n\n        // Test Index\n        $primary = $dbTable->getPrimaryKey();\n        $this->assertEquals('primary', $primary->getName());\n\n        // Test creating a table that already exists\n        $this->expectExceptionMessage(\"table {$this->table['name']} already exists\");\n        SchemaManager::createTable($this->table);\n    }\n\n    /* Table Update tests */\n\n    public function test_can_update_table()\n    {\n        $this->update_table_that_not_exist();\n\n        $this->can_add_column();\n\n        $this->can_change_column_type();\n\n        $this->can_change_column_options();\n\n        $this->can_add_index();\n\n        $this->can_rename_column();\n\n        $this->can_drop_column();\n\n        $this->can_rename_table();\n    }\n\n    public function test_can_drop_table()\n    {\n        $this->assertTrue(SchemaManager::tableExists($this->table['name']));\n\n        $this->delete(route('voyager.database.destroy', $this->table['name']));\n\n        // Test correct response\n        $this->assertSessionHasAll($this->alertSuccess(__('voyager::database.success_delete_table', ['table' => $this->table['name']])));\n        $this->assertRedirectedToRoute('voyager.database.index');\n\n        $this->assertFalse(SchemaManager::tableExists($this->table['name']));\n    }\n\n    protected function update_table_that_not_exist()\n    {\n        $table = (new Table('i_dont_exist_please_create_me_first'))->toArray();\n\n        $this->put(route('voyager.database.update', $table['oldName']), [\n            'table' => json_encode($table),\n        ]);\n\n        $this->assertSessionHasAll(\n            $this->alertException(SchemaException::tableDoesNotExist($table['name']))\n        );\n    }\n\n    protected function can_rename_table()\n    {\n        $this->table['name'] = 'table_new_name_test';\n\n        $this->update_table($this->table);\n\n        $this->assertFalse(SchemaManager::tableExists($this->table['oldName']));\n        $this->assertTrue(SchemaManager::tableExists($this->table['name']));\n    }\n\n    protected function can_add_column()\n    {\n        $dbTable = SchemaManager::listTableDetails($this->table['name']);\n\n        $column = 'new_voyager_column';\n        $dbTable->addColumn($column, 'text', [\n            'notnull' => false,\n        ]);\n\n        $dbTable = $this->update_table($dbTable->toArray());\n\n        $this->assertTrue($dbTable->hasColumn($column));\n        $this->assertEquals('text', $dbTable->getColumn($column)->getType()->getName());\n    }\n\n    protected function can_rename_column()\n    {\n        $column = 1;\n        $oldColumn = $this->table['columns'][$column]['oldName'];\n        $newColumn = 'details_renamed_test';\n        $this->table['columns'][$column]['name'] = $newColumn;\n\n        $dbTable = $this->update_table($this->table);\n\n        $this->assertFalse($dbTable->hasColumn($oldColumn));\n        $this->assertTrue($dbTable->hasColumn($newColumn));\n    }\n\n    protected function can_change_column_type()\n    {\n        $column = 1;\n        $columnName = $this->table['columns'][$column]['name'];\n        $newType = 'text';\n        $oldType = $this->table['columns'][$column]['type']['name'];\n\n        $this->assertNotEquals($oldType, $newType);\n\n        $this->table['columns'][$column]['type']['name'] = $newType;\n\n        $dbTable = $this->update_table($this->table);\n\n        $this->assertEquals($newType, $dbTable->getColumn($columnName)->getType()->getName());\n    }\n\n    protected function can_change_column_options()\n    {\n        $column = 1;\n        $columnName = $this->table['columns'][$column]['name'];\n\n        $notnull = false;\n        $default = 'voyager admin';\n\n        $this->table['columns'][$column]['notnull'] = $notnull;\n        $this->table['columns'][$column]['default'] = $default;\n\n        $dbTable = $this->update_table($this->table);\n        $column = $dbTable->getColumn($columnName);\n\n        $this->assertEquals($notnull, $column->getNotnull());\n        $this->assertEquals($default, $column->getDefault());\n    }\n\n    protected function can_drop_column()\n    {\n        $column = 1;\n        $columnName = $this->table['columns'][$column]['name'];\n\n        $dbTable = SchemaManager::listTableDetails($this->table['name']);\n\n        $this->assertTrue($dbTable->hasColumn($columnName));\n\n        unset($this->table['columns'][$column]);\n\n        $dbTable = $this->update_table($this->table);\n\n        $this->assertFalse($dbTable->hasColumn($columnName));\n    }\n\n    protected function can_add_index()\n    {\n        $dbTable = SchemaManager::listTableDetails($this->table['name']);\n\n        $indexName = 'details_unique';\n        $dbTable->addUniqueIndex(['details'], $indexName);\n\n        $dbTable = $this->update_table($dbTable->toArray());\n\n        $this->assertTrue($dbTable->hasIndex($indexName));\n        $this->assertTrue($dbTable->getIndex($indexName)->isUnique());\n    }\n\n    protected function update_table(array $table)\n    {\n        // Update table\n        $this->put(route('voyager.database.update', $table['oldName']), [\n            'table' => json_encode($table),\n        ]);\n\n        // Test correct response\n        $this->assertSessionHasAll($this->alertSuccess(__('voyager::database.success_create_table', ['table' => $table['name']])));\n        $this->assertRedirectedToRoute('voyager.database.index');\n\n        return SchemaManager::listTableDetails($table['name']);\n    }\n}\n"
  },
  {
    "path": "tests/DisabledTestException.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Foundation\\Exceptions\\Handler;\n\nclass DisabledTestException extends Handler\n{\n    public function __construct()\n    {\n    }\n\n    public function report($e)\n    {\n    }\n\n    public function render($request, $e)\n    {\n        throw $e;\n    }\n}\n"
  },
  {
    "path": "tests/EventTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Illuminate\\Http\\UploadedFile;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Support\\Facades\\Storage;\nuse TCG\\Voyager\\Events\\BreadAdded;\nuse TCG\\Voyager\\Events\\BreadDataAdded;\nuse TCG\\Voyager\\Events\\BreadDataDeleted;\nuse TCG\\Voyager\\Events\\BreadDataUpdated;\nuse TCG\\Voyager\\Events\\BreadDeleted;\nuse TCG\\Voyager\\Events\\BreadImagesDeleted;\nuse TCG\\Voyager\\Events\\BreadUpdated;\nuse TCG\\Voyager\\Events\\FileDeleted;\nuse TCG\\Voyager\\Events\\MediaFileAdded;\nuse TCG\\Voyager\\Events\\TableAdded;\nuse TCG\\Voyager\\Events\\TableDeleted;\nuse TCG\\Voyager\\Events\\TableUpdated;\nuse TCG\\Voyager\\Models\\DataType;\nuse TCG\\Voyager\\Models\\Page;\n\nclass EventTest extends TestCase\n{\n    use DatabaseTransactions;\n\n    public function testBreadAddedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n\n        $this->post(route('voyager.bread.store'), [\n            'name'                  => 'Toast',\n            'slug'                  => 'toast',\n            'display_name_singular' => 'toast',\n            'display_name_plural'   => 'toasts',\n            'icon'                  => 'fa fa-toast',\n            'description'           => 'This is a toast',\n        ]);\n\n        Event::assertDispatched(BreadAdded::class, function ($event) {\n            return $event->dataType->name === 'Toast'\n                || $event->dataType->slug === 'toast'\n                || $event->dataType->display_name_singular === 'toast'\n                || $event->dataType->display_name_plural === 'toasts'\n                || $event->dataType->icon === 'fa fa-toast'\n                || $event->dataType->description === 'This is a toast';\n        });\n    }\n\n    public function testBreadUpdatedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n\n        $this->post(route('voyager.bread.store'), [\n            'name'                  => 'Toast',\n            'slug'                  => 'toast',\n            'display_name_singular' => 'toast',\n            'display_name_plural'   => 'toasts',\n            'icon'                  => 'fa fa-toast',\n            'description'           => 'This is a toast',\n        ]);\n\n        Event::assertNotDispatched(BreadUpdated::class);\n        $dataType = DataType::where('slug', 'toast')->firstOrFail();\n\n        $this->put(route('voyager.bread.update', [$dataType->id]), [\n            'name'                  => 'Test',\n            'slug'                  => 'test',\n            'display_name_singular' => 'test',\n            'display_name_plural'   => 'tests',\n            'icon'                  => 'fa fa-test',\n            'description'           => 'This is a test',\n        ]);\n\n        Event::assertDispatched(BreadUpdated::class, function ($event) {\n            return $event->dataType->name === 'Test'\n                || $event->dataType->slug === 'test'\n                || $event->dataType->display_name_singular === 'test'\n                || $event->dataType->display_name_plural === 'tests'\n                || $event->dataType->icon === 'fa fa-test'\n                || $event->dataType->description === 'This is a test';\n        });\n    }\n\n    public function testBreadDeletedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n\n        $this->post(route('voyager.bread.store'), [\n            'name'                  => 'Toast',\n            'slug'                  => 'toast',\n            'display_name_singular' => 'toast',\n            'display_name_plural'   => 'toasts',\n            'icon'                  => 'fa fa-toast',\n            'description'           => 'This is a toast',\n        ]);\n\n        Event::assertNotDispatched(BreadDeleted::class);\n        $dataType = DataType::where('slug', 'toast')->firstOrFail();\n\n        $this->delete(route('voyager.bread.delete', [$dataType->id]));\n\n        Event::assertDispatched(BreadDeleted::class);\n    }\n\n    public function testBreadDataAddedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n\n        $this->post(route('voyager.pages.store'), [\n            'author_id' => 1,\n            'title'     => 'Toast',\n            'slug'      => 'toasts',\n            'status'    => 'ACTIVE',\n        ]);\n\n        Event::assertDispatched(BreadDataAdded::class);\n    }\n\n    public function testBreadDataUpdatedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n\n        $this->post(route('voyager.pages.store'), [\n            'author_id' => 1,\n            'title'     => 'Toast',\n            'slug'      => 'toasts',\n            'status'    => 'ACTIVE',\n        ]);\n\n        Event::assertNotDispatched(BreadDataUpdated::class);\n\n        $page = Page::where('slug', 'toasts')->firstOrFail();\n\n        $this->put(route('voyager.pages.update', [$page->id]), [\n            'title'  => 'Test',\n            'slug'   => 'tests',\n            'status' => 'INACTIVE',\n        ]);\n\n        Event::assertDispatched(BreadDataUpdated::class);\n    }\n\n    public function testBreadDataDeletedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n\n        $this->post(route('voyager.pages.store'), [\n            'author_id' => 1,\n            'title'     => 'Toast',\n            'slug'      => 'toasts',\n            'status'    => 'ACTIVE',\n        ]);\n\n        Event::assertNotDispatched(BreadDataDeleted::class);\n\n        $page = Page::where('slug', 'toasts')->firstOrFail();\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n\n        Event::assertDispatched(BreadDataDeleted::class);\n    }\n\n    public function testBreadImagesDeletedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n        Storage::fake(config('filesystems.default'));\n\n        $image = UploadedFile::fake()->image('test.png');\n\n        $this->call('POST', route('voyager.pages.store'), [\n            'author_id' => 1,\n            'title'     => 'Toast',\n            'slug'      => 'toasts',\n            'status'    => 'ACTIVE',\n        ], [], [\n            'image' => $image,\n        ]);\n\n        Event::assertNotDispatched(BreadImagesDeleted::class);\n\n        $page = Page::where('slug', 'toasts')->firstOrFail();\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n\n        Event::assertDispatched(BreadImagesDeleted::class);\n    }\n\n    public function testFileDeletedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n        Storage::fake(config('filesystems.default'));\n\n        $image = UploadedFile::fake()->image('test.png');\n\n        $this->call('POST', route('voyager.pages.store'), [\n            'author_id' => 1,\n            'title'     => 'Toast',\n            'slug'      => 'toasts',\n            'status'    => 'ACTIVE',\n        ], [], [\n            'image' => $image,\n        ]);\n\n        Event::assertNotDispatched(FileDeleted::class);\n\n        $page = Page::where('slug', 'toasts')->firstOrFail();\n\n        $this->delete(route('voyager.pages.destroy', [$page->id]));\n\n        Event::assertDispatched(FileDeleted::class);\n    }\n\n    public function testTableAddedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n\n        $this->post(route('voyager.database.store'), [\n            'table' => [\n                'name'    => 'test',\n                'columns' => [\n                    [\n                        'name' => 'id',\n                        'type' => [\n                            'name' => 'integer',\n                        ],\n                    ],\n                ],\n                'indexes'     => [],\n                'foreignKeys' => [],\n                'options'     => [],\n            ],\n        ]);\n\n        Event::assertDispatched(TableAdded::class);\n    }\n\n    public function testTableUpdatedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n\n        $this->post(route('voyager.database.store'), [\n            'table' => [\n                'name'    => 'test',\n                'columns' => [\n                    [\n                        'name' => 'id',\n                        'type' => [\n                            'name' => 'integer',\n                        ],\n                    ],\n                ],\n                'indexes'     => [],\n                'foreignKeys' => [],\n                'options'     => [],\n            ],\n        ]);\n\n        Event::assertNotDispatched(TableUpdated::class);\n\n        $this->put(route('voyager.database.update', ['test']), [\n            'table' => json_encode([\n                'name'    => 'test',\n                'oldName' => 'test',\n                'columns' => [\n                    [\n                        'name'    => 'id',\n                        'oldName' => 'id',\n                        'type'    => [\n                            'name' => 'integer',\n                        ],\n                    ],\n                ],\n                'indexes'     => [],\n                'foreignKeys' => [],\n                'options'     => [],\n            ]),\n        ]);\n\n        Event::assertDispatched(TableUpdated::class);\n    }\n\n    public function testTableDeletedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n\n        $this->post(route('voyager.database.store'), [\n            'table' => [\n                'name'    => 'test',\n                'columns' => [\n                    [\n                        'name' => 'id',\n                        'type' => [\n                            'name' => 'integer',\n                        ],\n                    ],\n                ],\n                'indexes'     => [],\n                'foreignKeys' => [],\n                'options'     => [],\n            ],\n        ]);\n\n        Event::assertNotDispatched(TableDeleted::class);\n\n        $this->delete(route('voyager.database.destroy', ['test']));\n\n        Event::assertDispatched(TableDeleted::class);\n    }\n\n    public function testMediaFileAddedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n        Storage::fake(config('filesystems.default'));\n\n        $image = UploadedFile::fake()->image('test.png');\n\n        $this->json('POST', route('voyager.media.upload'), ['file'=>$image, 'upload_path' => '/']);\n\n        // Ensure file exists on disk\n        $this->assertFileExists(public_path('storage/'.$image->name));\n\n        Event::assertDispatched(MediaFileAdded::class);\n    }\n\n    public function testNestedMediaFileAddedEvent()\n    {\n        Event::fake();\n        Auth::loginUsingId(1);\n        Storage::fake(config('filesystems.default'));\n\n        $image = UploadedFile::fake()->image('test.png');\n\n        $this->json('POST', route('voyager.media.upload'), ['file'=>$image, 'upload_path' => '/nested/']);\n\n        // Ensure file exists on disk\n        $this->assertFileExists(public_path('storage/nested/'.$image->name));\n\n        Event::assertDispatched(MediaFileAdded::class);\n    }\n\n    public function tearDown(): void\n    {\n        if (file_exists(public_path('storage/test.png'))) {\n            unlink(public_path('storage/test.png'));\n        }\n\n        if (file_exists(public_path('storage/nested/test.png'))) {\n            unlink(public_path('storage/nested/test.png'));\n        }\n    }\n}\n"
  },
  {
    "path": "tests/Feature/DashboardTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests\\Feature;\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse TCG\\Voyager\\Facades\\Voyager;\nuse TCG\\Voyager\\Tests\\TestCase;\n\nclass DashboardTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $this->install();\n    }\n\n    /**\n     * Test Dashboard Widgets.\n     *\n     * This test will make sure the configured widgets are being shown on\n     * the dashboard page.\n     */\n    public function testWidgetsAreBeingShownOnDashboardPage()\n    {\n        // We must first login and visit the dashboard page.\n        Auth::loginUsingId(1);\n\n        $this->visit(route('voyager.dashboard'))\n            ->see(__('voyager::generic.dashboard'));\n\n        // Test UserDimmer widget\n        $this->see(trans_choice('voyager::dimmer.user', 1))\n             ->click(__('voyager::dimmer.user_link_text'))\n             ->seePageIs(route('voyager.users.index'))\n             ->click(__('voyager::generic.dashboard'))\n             ->seePageIs(route('voyager.dashboard'));\n\n        // Test PostDimmer widget\n        $this->see(trans_choice('voyager::dimmer.post', 4))\n             ->click(__('voyager::dimmer.post_link_text'))\n             ->seePageIs(route('voyager.posts.index'))\n             ->click(__('voyager::generic.dashboard'))\n             ->seePageIs(route('voyager.dashboard'));\n\n        // Test PageDimmer widget\n        $this->see(trans_choice('voyager::dimmer.page', 1))\n             ->click(__('voyager::dimmer.page_link_text'))\n             ->seePageIs(route('voyager.pages.index'))\n             ->click(__('voyager::generic.dashboard'))\n             ->seePageIs(route('voyager.dashboard'))\n             ->see(__('voyager::generic.dashboard'));\n    }\n\n    /**\n     * UserDimmer widget isn't displayed without the right permissions.\n     */\n    public function testUserDimmerWidgetIsNotShownWithoutTheRightPermissions()\n    {\n        // We must first login and visit the dashboard page.\n        $user = \\Auth::loginUsingId(1);\n\n        // Remove `browse_users` permission\n        $user->role->permissions()->detach(\n            $user->role->permissions()->where('key', 'browse_users')->first()\n        );\n\n        $this->visit(route('voyager.dashboard'))\n            ->see(__('voyager::generic.dashboard'));\n\n        // Test UserDimmer widget\n        $this->dontSee('<h4>1 '.trans_choice('voyager::dimmer.user', 1).'</h4>')\n             ->dontSee(__('voyager::dimmer.user_link_text'));\n    }\n\n    /**\n     * PostDimmer widget isn't displayed without the right permissions.\n     */\n    public function testPostDimmerWidgetIsNotShownWithoutTheRightPermissions()\n    {\n        // We must first login and visit the dashboard page.\n        $user = \\Auth::loginUsingId(1);\n\n        // Remove `browse_users` permission\n        $user->role->permissions()->detach(\n            $user->role->permissions()->where('key', 'browse_posts')->first()\n        );\n\n        $this->visit(route('voyager.dashboard'))\n            ->see(__('voyager::generic.dashboard'));\n\n        // Test PostDimmer widget\n        $this->dontSee('<h4>1 '.trans_choice('voyager::dimmer.post', 1).'</h4>')\n             ->dontSee(__('voyager::dimmer.post_link_text'));\n    }\n\n    /**\n     * PageDimmer widget isn't displayed without the right permissions.\n     */\n    public function testPageDimmerWidgetIsNotShownWithoutTheRightPermissions()\n    {\n        // We must first login and visit the dashboard page.\n        $user = \\Auth::loginUsingId(1);\n\n        // Remove `browse_users` permission\n        $user->role->permissions()->detach(\n            $user->role->permissions()->where('key', 'browse_pages')->first()\n        );\n\n        $this->visit(route('voyager.dashboard'))\n            ->see(__('voyager::generic.dashboard'));\n\n        // Test PageDimmer widget\n        $this->dontSee('<h4>1 '.trans_choice('voyager::dimmer.page', 1).'</h4>')\n             ->dontSee(__('voyager::dimmer.page_link_text'));\n    }\n\n    /**\n     * Test See Correct Footer Version Number.\n     *\n     * This test will make sure the footer contains the correct version number.\n     */\n    public function testSeeingCorrectFooterVersionNumber()\n    {\n        // We must first login and visit the dashboard page.\n        Auth::loginUsingId(1);\n\n        $this->visit(route('voyager.dashboard'))\n             ->see(Voyager::getVersion());\n    }\n}\n"
  },
  {
    "path": "tests/Feature/SeederTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests\\Feature;\n\nuse TCG\\Voyager\\Tests\\TestCase;\n\nclass SeederTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $this->install();\n    }\n\n    /**\n     * Test manually seeding is working.\n     */\n    public function testVoyagerDatabaseSeederCanBeCalled()\n    {\n        $exception = null;\n\n        try {\n            $this->artisan('db:seed', ['--class' => 'VoyagerDatabaseSeeder']);\n        } catch (\\Exception $exception) {\n        }\n\n        $this->assertNull($exception, 'An exception was thrown');\n    }\n}\n"
  },
  {
    "path": "tests/FormfieldsTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Http\\UploadedFile;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Schema;\nuse TCG\\Voyager\\Models\\Category;\nuse TCG\\Voyager\\Models\\DataType;\nuse TCG\\Voyager\\Models\\Permission;\n\nclass FormfieldsTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        Auth::loginUsingId(1);\n    }\n\n    public function testFormfieldText()\n    {\n        $this->createBreadForFormfield('text', 'text', json_encode([\n            'default' => 'Default Text',\n            'null'    => 'NULL',\n        ]));\n        $this->visitRoute('voyager.categories.create')\n        ->see('Default Text')\n        ->type('New Text', 'text')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('New Text')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('Edited Text', 'text')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('Edited Text')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('NULL', 'text')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->seeInDatabase('categories', [\n            'text' => null,\n        ]);\n    }\n\n    public function testFormfieldTextbox()\n    {\n        $this->createBreadForFormfield('text', 'text_area', json_encode([\n            'default' => 'Default Text',\n        ]));\n\n        $this->visitRoute('voyager.categories.create')\n        ->see('Default Text')\n        ->type('New Text', 'text_area')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('New Text')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('Edited Text', 'text_area')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('Edited Text');\n    }\n\n    public function testFormfieldCodeeditor()\n    {\n        $this->createBreadForFormfield('text', 'code_editor', json_encode([\n            'default' => 'Default Text',\n        ]));\n\n        $this->visitRoute('voyager.categories.create')\n        ->see('Default Text')\n        ->type('New Text', 'code_editor')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('New Text')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('Edited Text', 'code_editor')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('Edited Text');\n    }\n\n    public function testFormfieldMarkdown()\n    {\n        $this->createBreadForFormfield('text', 'markdown_editor');\n\n        $this->visitRoute('voyager.categories.create')\n        ->type('# New Text', 'markdown_editor')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('New Text')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('# Edited Text', 'markdown_editor')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('Edited Text');\n    }\n\n    public function testFormfieldRichtextbox()\n    {\n        $this->createBreadForFormfield('text', 'rich_text_box');\n\n        $this->visitRoute('voyager.categories.create')\n        ->type('New Text', 'rich_text_box')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('New Text')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('Edited Text', 'rich_text_box')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('Edited Text');\n    }\n\n    public function testFormfieldHidden()\n    {\n        $this->createBreadForFormfield('text', 'hidden', json_encode([\n            'default' => 'Default Text',\n        ]));\n\n        $this->visitRoute('voyager.categories.create')\n        ->see('Default Text')\n        ->type('New Text', 'hidden')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('New Text')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('Edited Text', 'hidden')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('Edited Text');\n    }\n\n    public function testFormfieldPassword()\n    {\n        $this->createBreadForFormfield('text', 'password');\n\n        $t = $this->visitRoute('voyager.categories.create')\n        ->type('newpassword', 'password')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index');\n        $this->assertTrue(Hash::check('newpassword', Category::first()->password));\n\n        $t->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index');\n        $this->assertTrue(Hash::check('newpassword', Category::first()->password));\n    }\n\n    public function testFormfieldNumber()\n    {\n        $this->createBreadForFormfield('integer', 'number', json_encode([\n            'default' => 1,\n        ]));\n\n        $this->visitRoute('voyager.categories.create')\n        ->see('1')\n        ->type('2', 'number')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('2')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('3', 'number')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('3');\n    }\n\n    public function testFormfieldCheckbox()\n    {\n        $this->createBreadForFormfield('boolean', 'checkbox', json_encode([\n            'on'  => 'Active',\n            'off' => 'Inactive',\n        ]));\n\n        $this->visitRoute('voyager.categories.create')\n        ->see('Inactive')\n        ->check('checkbox')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('Active')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->uncheck('checkbox')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('Inactive');\n    }\n\n    public function testFormfieldTime()\n    {\n        $this->createBreadForFormfield('time', 'time');\n\n        $this->visitRoute('voyager.categories.create')\n        ->type('12:50', 'time')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('12:50')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('6:25', 'time')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('6:25');\n    }\n\n    public function testFormfieldDate()\n    {\n        $this->createBreadForFormfield('date', 'date', json_encode([\n            'format' => '%Y-%m-%d',\n        ]));\n\n        $this->visitRoute('voyager.categories.create')\n        ->type('2019-01-01', 'date')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('2019-01-01')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('2018-12-31', 'date')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('2018-12-31');\n    }\n\n    public function testFormfieldTimestamp()\n    {\n        $this->createBreadForFormfield('timestamp', 'timestamp', json_encode([\n            'format' => '%F %T',\n        ]));\n\n        $this->visitRoute('voyager.categories.create')\n        ->type('2019-01-01 12:00:00', 'timestamp')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('2019-01-01 12:00:00')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('2018-12-31 23:59:59', 'timestamp')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('2018-12-31 23:59:59')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('', 'timestamp')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->seeInDatabase('categories', [\n            'timestamp' => null,\n        ]);\n    }\n\n    public function testFormfieldColor()\n    {\n        $this->createBreadForFormfield('text', 'color');\n\n        $this->visitRoute('voyager.categories.create')\n        ->type('#FF0000', 'color')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('#FF0000')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->type('#00FF00', 'color')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('#00FF00');\n    }\n\n    public function testFormfieldRadiobtn()\n    {\n        $this->createBreadForFormfield('text', 'radio_btn', json_encode([\n            'default' => 'radio1',\n            'options' => [\n                'radio1' => 'Foo',\n                'radio2' => 'Bar',\n            ],\n        ]));\n\n        $this->visitRoute('voyager.categories.create')\n        ->select('radio1', 'radio_btn')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('Foo')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->select('radio2', 'radio_btn')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('Bar');\n    }\n\n    public function testFormfieldSelectDropdown()\n    {\n        $this->createBreadForFormfield('text', 'select_dropdown', json_encode([\n            'default' => 'radio1',\n            'options' => [\n                'option1' => 'Foo',\n                'option2' => 'Bar',\n            ],\n        ]));\n\n        $this->visitRoute('voyager.categories.create')\n        ->select('option1', 'select_dropdown')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('Foo')\n        ->click(__('voyager::generic.edit'))\n        ->seeRouteIs('voyager.categories.edit', 1)\n        ->select('option2', 'select_dropdown')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->see('Bar');\n    }\n\n    public function testFormfieldFile()\n    {\n        $this->createBreadForFormfield('text', 'file');\n        $file = UploadedFile::fake()->create('test.txt', 1);\n        $this->visitRoute('voyager.categories.create')\n        ->attach([$file->getPathName()], 'file[]')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->visitRoute('voyager.categories.create')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->seeInDatabase('categories', [\n            'file' => '[]',\n        ]);\n    }\n\n    public function testFormfieldFilePreserve()\n    {\n        $this->createBreadForFormfield('text', 'file', json_encode([\n            'preserveFileUploadName' => true,\n        ]));\n        $file = UploadedFile::fake()->create('test.txt', 1);\n        $this->visitRoute('voyager.categories.create')\n        ->attach([$file->getPathName()], 'file[]')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->visitRoute('voyager.categories.create')\n        ->press(__('voyager::generic.save'))\n        ->seeRouteIs('voyager.categories.index')\n        ->seeInDatabase('categories', [\n            'file' => '[]',\n        ]);\n    }\n\n    private function createBreadForFormfield($type, $name, $options = '')\n    {\n        Schema::dropIfExists('categories');\n        Schema::create('categories', function ($table) use ($type, $name) {\n            $table->bigIncrements('id');\n            $table->{$type}($name)->nullable();\n            $table->timestamps();\n        });\n\n        // Delete old BREAD\n        $this->delete(route('voyager.bread.delete', ['id' => DataType::where('name', 'categories')->first()->id]));\n\n        // Create BREAD\n        $this->visitRoute('voyager.bread.create', ['table' => 'categories'])\n        ->select($name, 'field_input_type_'.$name)\n        ->type($options, 'field_details_'.$name)\n        ->type('TCG\\\\Voyager\\\\Models\\\\Category', 'model_name')\n        ->press(__('voyager::generic.submit'))\n        ->seeRouteIs('voyager.bread.index');\n\n        // Attach permissions to role\n        Auth::user()->role->permissions()->syncWithoutDetaching(Permission::all()->pluck('id'));\n    }\n}\n"
  },
  {
    "path": "tests/LoginTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass LoginTest extends TestCase\n{\n    public function testSuccessfulLoginWithDefaultCredentials()\n    {\n        $this->visit(route('voyager.login'))\n             ->type('admin@admin.com', 'email')\n             ->type('password', 'password')\n             ->press(__('voyager::generic.login'))\n             ->seePageIs(route('voyager.dashboard'));\n    }\n\n    public function testShowAnErrorMessageWhenITryToLoginWithWrongCredentials()\n    {\n        session()->setPreviousUrl(route('voyager.login'));\n\n        $this->visit(route('voyager.login'))\n             ->type('john@Doe.com', 'email')\n             ->type('pass', 'password')\n             ->press(__('voyager::generic.login'))\n             ->seePageIs(route('voyager.login'))\n             ->see(__('auth.failed'))\n             ->seeInField('email', 'john@Doe.com');\n    }\n\n    public function testRedirectIfLoggedIn()\n    {\n        Auth::loginUsingId(1);\n\n        $this->visit(route('voyager.login'))\n             ->seePageIs(route('voyager.dashboard'));\n    }\n\n    public function testRedirectIfNotLoggedIn()\n    {\n        $this->visit(route('voyager.profile'))\n             ->seePageIs(route('voyager.login'));\n    }\n\n    public function testCanLogout()\n    {\n        Auth::loginUsingId(1);\n\n        $this->visit(route('voyager.dashboard'))\n             ->press(__('voyager::generic.logout'))\n             ->seePageIs(route('voyager.login'));\n    }\n\n    public function testGetsLockedOutAfterFiveAttempts()\n    {\n        session()->setPreviousUrl(route('voyager.login'));\n\n        for ($i = 0; $i <= 5; $i++) {\n            $t = $this->visit(route('voyager.login'))\n                 ->type('john@Doe.com', 'email')\n                 ->type('pass', 'password')\n                 ->press(__('voyager::generic.login'));\n        }\n\n        $t->see(__('auth.throttle', ['seconds' => 60]));\n    }\n}\n"
  },
  {
    "path": "tests/MenuTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse TCG\\Voyager\\Models\\Menu;\n\nclass MenuTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        Auth::loginUsingId(1);\n    }\n\n    public function testCanRenameMenu()\n    {\n        $menu = Menu::where('name', '=', 'admin')->first();\n        $this->visitRoute('voyager.menus.edit', $menu->id)\n             ->seeInField('name', $menu->name)\n             ->type('new_admin', 'name')\n             ->seeInElement('button', __('voyager::generic.save'))\n             ->press(__('voyager::generic.save'))\n             ->seePageIs(route('voyager.menus.index'))\n             ->seeInDatabase('menus', [\n                 'id'   => $menu->id,\n                 'name' => 'new_admin',\n             ]);\n    }\n\n    public function testCanDeleteMenuItem()\n    {\n        $menu = Menu::where('name', '=', 'admin')->first();\n        $this->delete(route('voyager.menus.item.destroy', [\n            'menu' => $menu->id,\n            'id'   => $menu->items->first()->id,\n        ]))->notSeeInDatabase('menu_items', [\n            'id' => $menu->items->first()->id,\n        ]);\n    }\n\n    public function testCanAddMenuItem()\n    {\n        $menu = Menu::where('name', '=', 'admin')->first();\n        $this->post(route('voyager.menus.item.add', [\n            'menu'    => $menu->id,\n            'menu_id' => $menu->id,\n            'type'    => 'url',\n            'color'   => '#000000',\n            'title'   => 'Title',\n            'url'     => '#',\n            'target'  => '_self',\n        ]))->seeInDatabase('menu_items', [\n            'menu_id' => $menu->id,\n            'title'   => 'Title',\n        ]);\n    }\n\n    public function testCanUpdateMenuItem()\n    {\n        $menu = Menu::where('name', '=', 'admin')->first();\n        $item = $menu->items->first();\n        $this->put(route('voyager.menus.item.update', [\n            'id'      => $item->id,\n            'menu'    => $menu->id,\n            'type'    => 'url',\n            'color'   => '#000000',\n            'title'   => 'New Title',\n            'url'     => '#',\n            'target'  => '_self',\n        ]))->seeInDatabase('menu_items', [\n            'menu_id' => $menu->id,\n            'id'      => $item->id,\n            'title'   => 'New Title',\n        ]);\n    }\n\n    public function testCanOrderMenu()\n    {\n        $menu = Menu::where('name', '=', 'admin')->first();\n        $response = $this->post('http://localhost/admin/menus/1/order', ['order' => '[{\"id\":4},{\"id\":1},{\"id\":3},{\"id\":2},{\"id\":5,\"children\":[{\"id\":6},{\"id\":7},{\"id\":8},{\"id\":9},{\"id\":11}]},{\"id\":10},{\"id\":12}]']);\n        $this->assertEquals(200, $response->response->status());\n    }\n\n    public function testCanSeeMenuBuilder()\n    {\n        $menu = Menu::where('name', '=', 'admin')->first();\n        $response = $this->call('GET', route('voyager.menus.builder', ['menu' => $menu->id]));\n        $this->assertEquals(200, $response->status());\n    }\n}\n"
  },
  {
    "path": "tests/Models/CategoryTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse TCG\\Voyager\\Models\\Category;\nuse TCG\\Voyager\\Models\\Post;\n\nclass CategoryTest extends TestCase\n{\n    public function testCanCreateACategoryWithLoggedInUser()\n    {\n        $user = Auth::loginUsingId(1);\n\n        $category = new Category();\n\n        $category->fill([\n            'name' => 'Test Title',\n            'slug' => 'test-slug',\n        ]);\n\n        $category->save();\n\n        $this->assertEquals('test-slug', $category->slug);\n        $this->assertEquals('Test Title', $category->name);\n    }\n\n    public function testHasPost()\n    {\n        $post = Post::first();\n        $post->category_id = Category::first()->id;\n        $post->save();\n\n        $this->assertTrue($post->category !== null);\n        $this->assertTrue($post->category->posts !== null);\n    }\n}\n"
  },
  {
    "path": "tests/Models/PageTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Str;\nuse TCG\\Voyager\\Models\\Page;\n\nclass PageTest extends TestCase\n{\n    public function testCanCreateAPageWithLoggedInUserAutoAssigned()\n    {\n        $user = Auth::loginUsingId(1);\n\n        $page = new Page();\n\n        $page->fill([\n            'slug'             => 'test-slug',\n            'title'            => 'Test Title',\n            'excerpt'          => 'Test Excerpt',\n            'body'             => 'Test Body',\n            'meta_description' => 'Test Description',\n            'meta_keywords'    => 'Test Meta Keywords',\n        ]);\n\n        $page->save();\n\n        $this->assertEquals(1, $page->author_id);\n        $this->assertEquals('test-slug', $page->slug);\n        $this->assertEquals('Test Title', $page->title);\n        $this->assertEquals('Test Excerpt', $page->excerpt);\n        $this->assertEquals('Test Body', $page->body);\n        $this->assertEquals('Test Description', $page->meta_description);\n        $this->assertEquals('Test Meta Keywords', $page->meta_keywords);\n    }\n\n    public function testActiveScopeReturnsOnlyPagesWithStatusEqualToActive()\n    {\n        Auth::loginUsingId(1);\n\n        $data = [\n            'title'            => 'Test Title',\n            'excerpt'          => 'Test Excerpt',\n            'body'             => 'Test Body',\n            'meta_description' => 'Test Description',\n            'meta_keywords'    => 'Test Meta Keywords',\n        ];\n\n        $inactive = (new Page($data + ['slug' => Str::random(8), 'status' => Page::STATUS_INACTIVE]));\n        $inactive->save();\n        $active = (new Page($data + ['slug' => Str::random(8), 'status' => Page::STATUS_ACTIVE]));\n        $active->save();\n\n        $results = Page::active()->get()->toArray();\n\n        $this->assertContains($active->fresh()->toArray(), $results);\n        $this->assertNotContains($inactive->fresh()->toArray(), $results);\n    }\n}\n"
  },
  {
    "path": "tests/Models/PostTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse TCG\\Voyager\\Models\\Category;\nuse TCG\\Voyager\\Models\\Post;\n\nclass PostTest extends TestCase\n{\n    public function testCanCreateAPageWithLoggedInUserAutoAssigned()\n    {\n        $user = Auth::loginUsingId(1);\n\n        $post = new Post();\n\n        $post->fill([\n            'category_id'      => Category::first()->id,\n            'slug'             => 'test-slug',\n            'title'            => 'Test Title',\n            'excerpt'          => 'Test Excerpt',\n            'body'             => 'Test Body',\n            'meta_description' => 'Test Description',\n            'meta_keywords'    => 'Test Meta Keywords',\n        ]);\n\n        $post->save();\n\n        $this->assertEquals(1, $post->author_id);\n        $this->assertEquals('test-slug', $post->slug);\n        $this->assertEquals('Test Title', $post->title);\n        $this->assertEquals('Test Excerpt', $post->excerpt);\n        $this->assertEquals('Test Body', $post->body);\n        $this->assertEquals('Test Description', $post->meta_description);\n        $this->assertEquals('Test Meta Keywords', $post->meta_keywords);\n\n        $this->assertEquals($post->authorId, Auth::user());\n        $this->assertEquals($post->category, Category::first());\n        $this->assertTrue($post->published() !== null);\n    }\n}\n"
  },
  {
    "path": "tests/MultilingualTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Support\\Facades\\DB;\nuse TCG\\Voyager\\Facades\\Voyager;\nuse TCG\\Voyager\\Models\\Page;\nuse TCG\\Voyager\\Traits\\Translatable;\nuse TCG\\Voyager\\Translator;\nuse TCG\\Voyager\\Translator\\Collection;\n\nclass MultilingualTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        // Add another language\n        config()->set('voyager.multilingual.locales', ['en', 'da']);\n\n        // Turn on multilingual\n        config()->set('voyager.multilingual.enabled', true);\n    }\n\n    public function testCheckingModelIsTranslatable()\n    {\n        $this->assertTrue(Voyager::translatable(TranslatableModel::class));\n        $this->assertTrue(Voyager::translatable(ActuallyTranslatableModel::class));\n    }\n\n    public function testCheckingModelIsNotTranslatable()\n    {\n        $this->assertFalse(Voyager::translatable(NotTranslatableModel::class));\n        $this->assertFalse(Voyager::translatable(StillNotTranslatableModel::class));\n    }\n\n    public function testGettingModelTranslatableAttributes()\n    {\n        $this->assertEquals(['title'], (new TranslatableModel())->getTranslatableAttributes());\n        $this->assertEquals([], (new ActuallyTranslatableModel())->getTranslatableAttributes());\n    }\n\n    public function testGettingTranslatorCollection()\n    {\n        $collection = TranslatableModel::all()->translate('da');\n\n        $this->assertInstanceOf(Collection::class, $collection);\n        $this->assertInstanceOf(Translator::class, $collection[0]);\n    }\n\n    public function testGettingTranslatorModelOfNonExistingTranslation()\n    {\n        $model = TranslatableModel::first()->translate('da');\n\n        $this->assertInstanceOf(Translator::class, $model);\n        $this->assertEquals('da', $model->getLocale());\n        $this->assertEquals('Lorem Ipsum Post', $model->title);\n        $this->assertFalse($model->getRawAttributes()['title']['exists']);\n        $this->assertFalse($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n        $this->assertEquals('Lorem Ipsum Post', $model->getOriginalAttribute('title'));\n    }\n\n    public function testGettingTranslatorModelOfExistingTranslation()\n    {\n        DB::table('translations')->insert([\n            'table_name'  => 'posts',\n            'column_name' => 'title',\n            'foreign_key' => 1,\n            'locale'      => 'da',\n            'value'       => 'Foo Bar Post',\n        ]);\n\n        $model = TranslatableModel::first()->translate('da');\n\n        $this->assertInstanceOf(Translator::class, $model);\n        $this->assertEquals('da', $model->getLocale());\n        $this->assertEquals('Foo Bar Post', $model->title);\n        $this->assertTrue($model->getRawAttributes()['title']['exists']);\n        $this->assertFalse($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n        $this->assertEquals('Lorem Ipsum Post', $model->getOriginalAttribute('title'));\n    }\n\n    public function testSavingNonExistingTranslatorModel()\n    {\n        $model = TranslatableModel::first()->translate('da');\n\n        $this->assertInstanceOf(Translator::class, $model);\n        $this->assertEquals('da', $model->getLocale());\n        $this->assertEquals('Lorem Ipsum Post', $model->title);\n        $this->assertFalse($model->getRawAttributes()['title']['exists']);\n        $this->assertFalse($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n        $this->assertEquals('Lorem Ipsum Post', $model->getOriginalAttribute('title'));\n\n        $model->title = 'Danish Title';\n\n        $this->assertEquals('Danish Title', $model->title);\n        $this->assertFalse($model->getRawAttributes()['title']['exists']);\n        $this->assertTrue($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n        $this->assertEquals('Lorem Ipsum Post', $model->getOriginalAttribute('title'));\n\n        $model->save();\n\n        $this->assertEquals('Danish Title', $model->title);\n        $this->assertTrue($model->getRawAttributes()['title']['exists']);\n        $this->assertFalse($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n        $this->assertEquals('Lorem Ipsum Post', $model->getOriginalAttribute('title'));\n\n        $model = TranslatableModel::first()->translate('da');\n\n        $this->assertInstanceOf(Translator::class, $model);\n        $this->assertEquals('da', $model->getLocale());\n        $this->assertEquals('Danish Title', $model->title);\n        $this->assertTrue($model->getRawAttributes()['title']['exists']);\n        $this->assertFalse($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n        $this->assertEquals('Lorem Ipsum Post', $model->getOriginalAttribute('title'));\n    }\n\n    public function testSavingExistingTranslatorModel()\n    {\n        DB::table('translations')->insert([\n            'table_name'  => 'posts',\n            'column_name' => 'title',\n            'foreign_key' => 1,\n            'locale'      => 'da',\n            'value'       => 'Foo Bar Post',\n        ]);\n\n        $model = TranslatableModel::first()->translate('da');\n\n        $this->assertInstanceOf(Translator::class, $model);\n        $this->assertEquals('da', $model->getLocale());\n        $this->assertEquals('Foo Bar Post', $model->title);\n        $this->assertTrue($model->getRawAttributes()['title']['exists']);\n        $this->assertFalse($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n        $this->assertEquals('Lorem Ipsum Post', $model->getOriginalAttribute('title'));\n\n        $model->title = 'Danish Title';\n\n        $this->assertEquals('Danish Title', $model->title);\n        $this->assertTrue($model->getRawAttributes()['title']['exists']);\n        $this->assertTrue($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n        $this->assertEquals('Lorem Ipsum Post', $model->getOriginalAttribute('title'));\n\n        $model->save();\n\n        $this->assertEquals('Danish Title', $model->title);\n        $this->assertTrue($model->getRawAttributes()['title']['exists']);\n        $this->assertFalse($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n        $this->assertEquals('Lorem Ipsum Post', $model->getOriginalAttribute('title'));\n\n        $model = TranslatableModel::first()->translate('da');\n\n        $this->assertInstanceOf(Translator::class, $model);\n        $this->assertEquals('da', $model->getLocale());\n        $this->assertEquals('Danish Title', $model->title);\n        $this->assertTrue($model->getRawAttributes()['title']['exists']);\n        $this->assertFalse($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n        $this->assertEquals('Lorem Ipsum Post', $model->getOriginalAttribute('title'));\n    }\n\n    public function testGettingTranslationMetaDataFromTranslator()\n    {\n        $model = TranslatableModel::first()->translate('da');\n\n        $this->assertFalse($model->translationAttributeExists('title'));\n        $this->assertFalse($model->translationAttributeModified('title'));\n    }\n\n    public function testCreatingNewTranslation()\n    {\n        $model = TranslatableModel::first()->translate('da');\n\n        $model->createTranslation('title', 'Danish Title Here');\n\n        $model = TranslatableModel::first()->translate('da');\n\n        $this->assertInstanceOf(Translator::class, $model);\n        $this->assertEquals('da', $model->getLocale());\n        $this->assertEquals('Danish Title Here', $model->title);\n        $this->assertTrue($model->getRawAttributes()['title']['exists']);\n        $this->assertFalse($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n    }\n\n    public function testUpdatingTranslation()\n    {\n        DB::table('translations')->insert([\n            'table_name'  => 'posts',\n            'column_name' => 'title',\n            'foreign_key' => 1,\n            'locale'      => 'da',\n            'value'       => 'Title',\n        ]);\n\n        $model = TranslatableModel::first()->translate('da');\n\n        $this->assertInstanceOf(Translator::class, $model);\n        $this->assertEquals('da', $model->getLocale());\n        $this->assertEquals('Title', $model->title);\n        $this->assertTrue($model->getRawAttributes()['title']['exists']);\n        $this->assertFalse($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n\n        $model->title = 'New Title';\n\n        $this->assertInstanceOf(Translator::class, $model);\n        $this->assertEquals('da', $model->getLocale());\n        $this->assertEquals('New Title', $model->title);\n        $this->assertTrue($model->getRawAttributes()['title']['exists']);\n        $this->assertTrue($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n\n        $model->save();\n\n        $this->assertInstanceOf(Translator::class, $model);\n        $this->assertEquals('da', $model->getLocale());\n        $this->assertEquals('New Title', $model->title);\n        $this->assertTrue($model->getRawAttributes()['title']['exists']);\n        $this->assertFalse($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n\n        $model = TranslatableModel::first()->translate('da');\n\n        $this->assertInstanceOf(Translator::class, $model);\n        $this->assertEquals('da', $model->getLocale());\n        $this->assertEquals('New Title', $model->title);\n        $this->assertTrue($model->getRawAttributes()['title']['exists']);\n        $this->assertFalse($model->getRawAttributes()['title']['modified']);\n        $this->assertEquals('da', $model->getRawAttributes()['title']['locale']);\n    }\n\n    public function testSearchingTranslations()\n    {\n        //Default locale\n        $this->assertEquals(Page::whereTranslation('slug', 'hello-world')->count(), 1);\n\n        //Default locale, but default excluded\n        $this->assertEquals(Page::whereTranslation('slug', '=', 'hello-world', [], false)->count(), 0);\n\n        //Translation, all locales\n        $this->assertEquals(Page::whereTranslation('slug', 'ola-mundo')->count(), 1);\n\n        //Translation, wrong locale-array\n        $this->assertEquals(Page::whereTranslation('slug', '=', 'ola-mundo', ['de'])->count(), 0);\n\n        //Translation, correct locale-array\n        $this->assertEquals(Page::whereTranslation('slug', '=', 'ola-mundo', ['de', 'pt'])->count(), 1);\n\n        //Translation, wrong locale\n        $this->assertEquals(Page::whereTranslation('slug', '=', 'ola-mundo', 'de')->count(), 0);\n\n        //Translation, correct locale\n        $this->assertEquals(Page::whereTranslation('slug', '=', 'ola-mundo', 'pt')->count(), 1);\n    }\n}\n\nclass TranslatableModel extends Model\n{\n    protected $table = 'posts';\n\n    use Translatable;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'title', 'body',\n    ];\n\n    protected $translatable = ['title'];\n}\n\nclass NotTranslatableModel extends Model\n{\n    protected $table = 'posts';\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'title', 'body',\n    ];\n}\n\nclass StillNotTranslatableModel extends Model\n{\n    protected $table = 'posts';\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'title', 'body',\n    ];\n\n    protected $translatable = ['title'];\n}\n\nclass ActuallyTranslatableModel extends Model\n{\n    protected $table = 'posts';\n\n    use Translatable;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'title', 'body',\n    ];\n}\n"
  },
  {
    "path": "tests/PermissionTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse TCG\\Voyager\\Models\\Permission;\nuse TCG\\Voyager\\Models\\Role;\n\nclass PermissionTest extends TestCase\n{\n    protected $user;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        Auth::loginUsingId(1);\n        $this->user = Auth::user();\n    }\n\n    public function testNotHavingPermission()\n    {\n        Permission::create(['key' => 'test']);\n\n        $this->assertFalse($this->user->hasPermission('test'));\n    }\n\n    public function testHavingPermission()\n    {\n        $role = Role::find(1)\n            ->permissions()\n            ->create(['key' => 'test']);\n\n        $this->assertTrue($this->user->hasPermission('test'));\n    }\n}\n"
  },
  {
    "path": "tests/RolesTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Illuminate\\Support\\Facades\\Auth;\nuse TCG\\Voyager\\Models\\Role;\n\nclass RolesTest extends TestCase\n{\n    use DatabaseTransactions;\n\n    protected $user;\n    protected $permission_id = 3;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        Auth::loginUsingId(1);\n        $this->user = Auth::user();\n    }\n\n    /**\n     * A basic functional test example.\n     *\n     * @return void\n     */\n    public function testRoles()\n    {\n        // Adding a New Role\n        $this->visit(route('voyager.roles.create'))\n             ->type('superadmin', 'name')\n             ->type('Super Admin', 'display_name')\n             ->press(__('voyager::generic.submit'))\n             ->seePageIs(route('voyager.roles.index'))\n             ->seeInDatabase('roles', ['name' => 'superadmin']);\n\n        // Editing a Role\n        $this->visit(route('voyager.roles.edit', 2))\n             ->type('regular_user', 'name')\n             ->press(__('voyager::generic.submit'))\n             ->seePageIs(route('voyager.roles.index'))\n             ->seeInDatabase('roles', ['name' => 'regular_user']);\n\n        // Editing a Role\n        $this->visit(route('voyager.roles.edit', 2))\n             ->type('user', 'name')\n             ->press(__('voyager::generic.submit'))\n             ->seePageIs(route('voyager.roles.index'))\n             ->seeInDatabase('roles', ['name' => 'user']);\n\n        // Get the current super admin role\n        $superadmin_role = Role::where('name', '=', 'superadmin')->first();\n\n        // Deleting a Role\n        $response = $this->call('DELETE', route('voyager.roles.destroy', $superadmin_role->id), ['_token' => csrf_token()]);\n        $this->assertEquals(302, $response->getStatusCode());\n        $this->notSeeInDatabase('roles', ['name' => 'superadmin']);\n    }\n\n    /**\n     * Edit role permissions.\n     *\n     * @return void\n     */\n    public function testEditRolePermissions()\n    {\n        $this->notSeeInDatabase('permission_role', ['permission_id' => $this->permission_id, 'role_id' => 2]);\n        Role::find(2)->permissions()->attach($this->permission_id);\n\n        $this->visit(route('voyager.roles.edit', 2))\n             ->uncheck('permissions['.$this->permission_id.']')\n             ->press(__('voyager::generic.submit'))\n             ->seePageIs(route('voyager.roles.index'))\n             ->notSeeInDatabase('permission_role', ['permission_id' => $this->permission_id, 'role_id' => 2]);\n    }\n}\n"
  },
  {
    "path": "tests/RouteTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nclass RouteTest extends TestCase\n{\n    /**\n     * A basic functional test example.\n     *\n     * @return void\n     */\n    public function testGetRoutes()\n    {\n        $this->disableExceptionHandling();\n\n        $this->visit(route('voyager.login'));\n        $this->type('admin@admin.com', 'email');\n        $this->type('password', 'password');\n        $this->press(__('voyager::generic.login'));\n\n        $urls = [\n            route('voyager.dashboard'),\n            route('voyager.media.index'),\n            route('voyager.settings.index'),\n            route('voyager.roles.index'),\n            route('voyager.roles.create'),\n            route('voyager.roles.show', 1),\n            route('voyager.roles.edit', 1),\n            route('voyager.users.index'),\n            route('voyager.users.create'),\n            route('voyager.users.show', 1),\n            route('voyager.users.edit', 1),\n            route('voyager.posts.index'),\n            route('voyager.posts.create'),\n            route('voyager.posts.show', 1),\n            route('voyager.posts.edit', 1),\n            route('voyager.pages.index'),\n            route('voyager.pages.create'),\n            route('voyager.pages.show', 1),\n            route('voyager.pages.edit', 1),\n            route('voyager.categories.index'),\n            route('voyager.categories.create'),\n            route('voyager.categories.show', 1),\n            route('voyager.categories.edit', 1),\n            route('voyager.menus.index'),\n            route('voyager.menus.create'),\n            route('voyager.menus.show', 1),\n            route('voyager.menus.edit', 1),\n            route('voyager.database.index'),\n            route('voyager.bread.edit', 'categories'),\n            route('voyager.database.edit', 'categories'),\n            route('voyager.database.create'),\n        ];\n\n        foreach ($urls as $url) {\n            $response = $this->call('GET', $url);\n            $this->assertEquals(200, $response->status(), $url.' did not return a 200');\n        }\n    }\n}\n"
  },
  {
    "path": "tests/SearchTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Route;\nuse TCG\\Voyager\\Http\\Controllers\\VoyagerBaseController;\nuse TCG\\Voyager\\Models\\DataRow;\nuse TCG\\Voyager\\Models\\DataType;\nuse TCG\\Voyager\\Models\\Post;\nuse TCG\\Voyager\\Models\\User;\n\nclass SearchTest extends TestCase\n{\n    use DatabaseTransactions;\n\n    protected $user;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $this->user = Auth::loginUsingId(1);\n    }\n\n    public function testCanSearchEquals0()\n    {\n        $post = Post::where('featured', 0)->first();\n        $post->featured = 1;\n        $post->save();\n        $params = [\n            'key'    => 'featured',\n            'filter' => 'equals',\n            's'      => '0',\n        ];\n        $this->visit(route('voyager.posts.index').'?'.http_build_query($params))\n            ->dontSee($post->title)\n            ->see(Post::where('featured', 0)->first()->title);\n\n        $params['s'] = 1;\n        $this->visit(route('voyager.posts.index').'?'.http_build_query($params))\n            ->see($post->title)\n            ->dontSee(Post::where('featured', 0)->first()->title);\n    }\n\n    /*public function testCanSearchByBelongstoRelationship()\n    {\n        $this->setupAuthorRelationship();\n\n        $user = User::all()->first();\n        $post = Post::all()->first();\n        $post->author_id = $user->id;\n        $post->save();\n\n        $params = [\n            'key'    => 'author_id',\n            'filter' => 'contains',\n            's'      => substr($user->name, 0, 2),\n        ];\n\n        $response = $this->fakeVisit('voyager.posts.index', 'GET', $params);\n\n        $this->assertCount(1, $response->dataTypeContent);\n        $this->assertEquals($post->id, $response->dataTypeContent->first()->id);\n\n        $params['s'] = 'random';\n\n        $response = $this->fakeVisit('voyager.posts.index', 'GET', $params);\n\n        $this->assertCount(0, $response->dataTypeContent);\n    }\n\n    public function testCanOrderAndSearchByBelongstoRelationship()\n    {\n        $this->setupAuthorRelationship();\n\n        $posts = Post::all();\n        $user = User::all()->first();\n        $post = $posts->first();\n        $post->author_id = $user->id;\n        $post->save();\n\n        $other_user = factory(User::class)->create(['name' => 'Admin 2']);\n        $other_post = $posts->last();\n        $other_post->author_id = $other_user->id;\n        $other_post->save();\n\n        $params = [\n            'key'    => 'author_id',\n            'filter' => 'contains',\n            's'      => substr($user->name, 0, 2),\n            'sort_order' => 'asc',\n            'order_by' => 'post_belongsto_user_relationship'\n        ];\n\n        $response = $this->fakeVisit('voyager.posts.index', 'GET', $params);\n\n        $this->assertCount(2, $response->dataTypeContent);\n        $this->assertEquals($post->id, $response->dataTypeContent[0]->id);\n        $this->assertEquals($other_post->id, $response->dataTypeContent[1]->id);\n\n        $params['sort_order'] = 'desc';\n\n        $response = $this->fakeVisit('voyager.posts.index', 'GET', $params);\n\n        $this->assertCount(2, $response->dataTypeContent);\n        $this->assertEquals($other_post->id, $response->dataTypeContent[0]->id);\n        $this->assertEquals($post->id, $response->dataTypeContent[1]->id);\n    }\n\n    protected function fakeVisit($route, $method = 'GET', $params = [])\n    {\n        $request = Request::create(route($route), $method, $params);\n        $request->setRouteResolver(function() use ($route) {\n            $stub = $this->getMockBuilder(Route::class)\n                    ->addMethods(['getName'])\n                    ->getMock();\n            $stub->method('getName')->willReturn($route);\n            return $stub;\n        });\n\n        return (new VoyagerBaseController())->index($request);\n    }\n\n    protected function setupAuthorRelationship()\n    {\n        DataRow::create([\n            'data_type_id' => DataType::where('slug', 'posts')->first()->id,\n            'field' => 'post_belongsto_user_relationship',\n            'type' => 'relationship',\n            'display_name' => 'Author',\n            'details' => [\n                'model' => 'TCG\\Voyager\\Models\\User',\n                'table' => 'users',\n                'type' => 'belongsTo',\n                'column' => 'author_id',\n                'key' => 'id',\n                'label' => 'name',\n            ],\n        ]);\n    }*/\n}\n"
  },
  {
    "path": "tests/SettingsTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Support\\Facades\\Auth;\nuse TCG\\Voyager\\Models\\Setting;\n\nclass SettingsTest extends TestCase\n{\n    protected $user;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $this->user = Auth::loginUsingId(1);\n        session()->setPreviousUrl(route('voyager.settings.index'));\n    }\n\n    public function testCanUpdateSettings()\n    {\n        $key = 'site.title';\n        $newTitle = 'Just Another LaravelVoyager.com Site';\n\n        $this->visit(route('voyager.settings.index'))\n             ->seeInField($key, Setting::where('key', '=', $key)->first()->value)\n             ->type($newTitle, $key)\n             ->seeInElement('button', __('voyager::settings.save'))\n             ->press(__('voyager::settings.save'))\n             ->seePageIs(route('voyager.settings.index'))\n             ->seeInDatabase('settings', [\n                 'key'   => $key,\n                 'value' => $newTitle,\n             ]);\n    }\n\n    public function testCanCreateSetting()\n    {\n        $this->visitRoute('voyager.settings.index')\n             ->type('New Setting', 'display_name')\n             ->type('new_setting', 'key')\n             ->select('text', 'type')\n             ->select('Site', 'group')\n             ->press(__('voyager::settings.add_new'))\n             ->seePageIs(route('voyager.settings.index'))\n             ->seeInDatabase('settings', [\n                 'display_name' => 'New Setting',\n                 'key'          => 'site.new_setting',\n                 'type'         => 'text',\n                 'group'        => 'Site',\n             ]);\n    }\n\n    public function testCanDeleteSetting()\n    {\n        $setting = Setting::firstOrFail();\n\n        $this->call('DELETE', route('voyager.settings.delete', $setting->id));\n\n        $this->notSeeInDatabase('settings', [\n            'id'    => $setting->id,\n        ]);\n    }\n\n    public function testCanDeleteSettingsValue()\n    {\n        $setting = Setting::firstOrFail();\n        $this->assertFalse(Setting::find($setting->id)->value == null);\n\n        $this->call('PUT', route('voyager.settings.delete_value', $setting->id));\n\n        $this->seeInDatabase('settings', [\n            'id'    => $setting->id,\n            'value' => '',\n        ]);\n    }\n\n    public function testCanMoveSettingUp()\n    {\n        $setting = Setting::where('order', '!=', 1)->first();\n\n        $this->call('GET', route('voyager.settings.move_up', $setting->id));\n\n        $this->seeInDatabase('settings', [\n            'id'    => $setting->id,\n            'order' => ($setting->order - 1),\n        ]);\n    }\n\n    public function testCanMoveSettingDown()\n    {\n        $setting = Setting::where('order', '!=', 1)->first();\n\n        $this->call('GET', route('voyager.settings.move_down', $setting->id));\n\n        $this->seeInDatabase('settings', [\n            'id'    => $setting->id,\n            'order' => ($setting->order + 1),\n        ]);\n    }\n}\n"
  },
  {
    "path": "tests/Stubs/Widgets/AccessibleDimmer.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests\\Stubs\\Widgets;\n\nuse Arrilot\\Widgets\\AbstractWidget;\n\nclass AccessibleDimmer extends AbstractWidget\n{\n    /**\n     * The configuration array.\n     *\n     * @var array\n     */\n    protected $config = [];\n\n    /**\n     * Treat this method as a controller action.\n     * Return view() or other content to display.\n     */\n    public function run()\n    {\n        return view('voyager::dimmer', array_merge($this->config, [\n            'icon'   => '',\n            'title'  => '',\n            'text'   => '',\n            'button' => [\n                'text' => '',\n                'link' => '',\n            ],\n            'image' => '',\n        ]));\n    }\n\n    /**\n     * Determine if the widget should be displayed.\n     *\n     * @return bool\n     */\n    public function shouldBeDisplayed()\n    {\n        return true;\n    }\n}\n"
  },
  {
    "path": "tests/Stubs/Widgets/InAccessibleDimmer.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests\\Stubs\\Widgets;\n\nuse Arrilot\\Widgets\\AbstractWidget;\n\nclass InAccessibleDimmer extends AbstractWidget\n{\n    /**\n     * The configuration array.\n     *\n     * @var array\n     */\n    protected $config = [];\n\n    /**\n     * Treat this method as a controller action.\n     * Return view() or other content to display.\n     */\n    public function run()\n    {\n        return view('voyager::dimmer', array_merge($this->config, [\n            'icon'   => '',\n            'title'  => '',\n            'text'   => '',\n            'button' => [\n                'text' => '',\n                'link' => '',\n            ],\n            'image' => '',\n        ]));\n    }\n\n    /**\n     * Determine if the widget should be displayed.\n     *\n     * @return bool\n     */\n    public function shouldBeDisplayed()\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "tests/TestCase.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Contracts\\Debug\\ExceptionHandler;\nuse Orchestra\\Testbench\\BrowserKit\\TestCase as OrchestraTestCase;\nuse TCG\\Voyager\\Models\\User;\nuse TCG\\Voyager\\VoyagerServiceProvider;\n\nclass TestCase extends OrchestraTestCase\n{\n    protected $withDummy = true;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $this->loadLaravelMigrations();\n\n        if (!is_dir(base_path('routes'))) {\n            mkdir(base_path('routes'));\n        }\n\n        if (!file_exists(base_path('routes/web.php'))) {\n            file_put_contents(\n                base_path('routes/web.php'),\n                \"<?php Route::get('/', function () {return view('welcome');});\"\n            );\n        }\n\n        // Orchestra Testbench does not contain this file and can't create autoload without\n        if (!is_dir(base_path('tests/'))) {\n            mkdir(base_path('tests/'));\n\n            file_put_contents(\n                base_path('tests/TestCase.php'),\n                \"<?php\\n\\n\"\n            );\n        }\n\n        $this->app->make('Illuminate\\Contracts\\Http\\Kernel')->pushMiddleware('Illuminate\\Session\\Middleware\\StartSession');\n        $this->app->make('Illuminate\\Contracts\\Http\\Kernel')->pushMiddleware('Illuminate\\View\\Middleware\\ShareErrorsFromSession');\n\n        $this->install();\n    }\n\n    protected function getPackageProviders($app)\n    {\n        return [\n            VoyagerServiceProvider::class,\n        ];\n    }\n\n    public function tearDown(): void\n    {\n        //parent::tearDown();\n\n        //$this->artisan('migrate:reset');\n    }\n\n    /**\n     * Define environment setup.\n     *\n     * @param \\Illuminate\\Foundation\\Application $app\n     *\n     * @return void\n     */\n    protected function getEnvironmentSetUp($app)\n    {\n        // Setup default database to use sqlite :memory:\n        $app['config']->set('database.default', 'testbench');\n        $app['config']->set('database.connections.testbench', [\n            'driver'   => 'sqlite',\n            'database' => ':memory:',\n            'prefix'   => '',\n        ]);\n\n        // Setup Voyager configuration\n        $app['config']->set('voyager.user.namespace', User::class);\n\n        // Setup Authentication configuration\n        $app['config']->set('auth.providers.users.model', User::class);\n    }\n\n    protected function install()\n    {\n        $this->artisan('voyager:install', ['--with-dummy' => $this->withDummy]);\n\n        app(VoyagerServiceProvider::class, ['app' => $this->app])->loadAuth();\n\n        if (file_exists(base_path('routes/web.php'))) {\n            require base_path('routes/web.php');\n        }\n    }\n\n    public function disableExceptionHandling()\n    {\n        $this->app->instance(ExceptionHandler::class, new DisabledTestException());\n    }\n\n    /**\n     * Visit the given URI with a GET request.\n     *\n     * @param string $uri\n     *\n     * @return $this\n     */\n    public function visit($uri)\n    {\n        if (is_callable('parent::visit')) {\n            return parent::visit($uri);\n        }\n\n        return $this->get($uri);\n    }\n\n    /**\n     * Assert that a given string is seen on the current HTML.\n     *\n     * @param string $text\n     * @param bool   $negate\n     *\n     * @return $this\n     */\n    public function see($text, $negate = false)\n    {\n        if (is_callable('parent::see')) {\n            return parent::see($text);\n        }\n\n        if ($negate) {\n            return $this->assertDontSee($text);\n        }\n\n        return $this->assertSee($text);\n    }\n}\n"
  },
  {
    "path": "tests/Unit/Actions/AbstractActionTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests\\Unit\\Actions;\n\nuse TCG\\Voyager\\Actions\\AbstractAction;\nuse TCG\\Voyager\\Facades\\Voyager;\nuse TCG\\Voyager\\Models\\User;\nuse TCG\\Voyager\\Tests\\TestCase;\n\nclass AbstractActionTest extends TestCase\n{\n    /**\n     * The users DataType instance.\n     *\n     * @var \\TCG\\Voyager\\Models\\DataType\n     */\n    protected $userDataType;\n\n    /**\n     * A dummy user instance.\n     *\n     * @var \\TCG\\Voyager\\Models\\User\n     */\n    protected $user;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $this->userDataType = Voyager::model('DataType')->where('name', 'users')->first();\n        $this->user = \\TCG\\Voyager\\Models\\User::factory()->create();\n    }\n\n    /**\n     * This test checks that `getRoute` method calls the `getDefaultRoute`\n     * method if the given key is empty.\n     */\n    public function testGetRouteWithEmptyKey()\n    {\n        $stub = $this->getMockBuilder(AbstractAction::class)\n            ->disableOriginalConstructor()\n            ->onlyMethods(['getDefaultRoute'])\n            ->getMockForAbstractClass();\n\n        // The `getDefaultRoute` method is called as default inside the\n        // `getRoute` method to retrieve the route.\n        $stub->expects($this->any())\n             ->method('getDefaultRoute')\n             ->will($this->returnValue(true));\n\n        $this->assertTrue($stub->getRoute($this->userDataType->name));\n    }\n\n    /**\n     * This test checks that `getRoute` method calls the expected method when a\n     * key is given.\n     */\n    public function testGetRouteWithCustomKey()\n    {\n        $stub = $this->getMockBuilder(AbstractAction::class)\n            ->disableOriginalConstructor()\n            ->addMethods(['getCustomRoute'])\n            ->getMockForAbstractClass();\n\n        // The key that's passed to the `getRoute` method will be capitalized\n        // and putted between 'get' and 'Route'. Calling `getRoute('custom')`\n        // will call the `getCustomRoute` method if it's defined.\n        $stub->expects($this->any())\n             ->method('getCustomRoute')\n             ->will($this->returnValue(true));\n\n        $this->assertTrue($stub->getRoute('custom'));\n    }\n\n    /**\n     * This test checks that `getAttributes` method will give us the expected\n     * output.\n     */\n    public function testConvertAttributesToHtml()\n    {\n        $stub = $this->getMockBuilder(AbstractAction::class)\n            ->disableOriginalConstructor()\n            ->onlyMethods(['getAttributes'])\n            ->getMockForAbstractClass();\n\n        $stub->expects($this->any())\n             ->method('getAttributes')\n             ->will($this->returnValue([\n                 'class'   => 'class1 class2',\n                 'data-id' => 5,\n                 'id'      => 'delete-5',\n             ]));\n\n        $this->assertEquals('class=\"class1 class2\" data-id=\"5\" id=\"delete-5\"', $stub->convertAttributesToHtml());\n    }\n\n    /**\n     * This test checks that `shouldActionDisplayOnDataType` method returns true\n     * if the action should be displayed for every data type.\n     */\n    public function testShouldActionDisplayOnDataTypeWithDefaultDataType()\n    {\n        $stub = $this->getMockBuilder(AbstractAction::class)\n            ->setConstructorArgs([$this->userDataType, $this->user])\n            ->getMockForAbstractClass();\n\n        $this->assertTrue($stub->shouldActionDisplayOnDataType());\n    }\n\n    /**\n     * This test checks that `shouldActionDisplayOnDataType` method returns true\n     * if the action should only be displayed for a specific data type.\n     */\n    public function testTrueIsReturnedIfDataTypeMatchesTheOneWhereTheActionWasCreatedFor()\n    {\n        $stub = $this->getMockBuilder(AbstractAction::class)\n            ->setConstructorArgs([$this->userDataType, $this->user])\n            ->onlyMethods(['getDataType'])\n            ->getMockForAbstractClass();\n\n        $stub->expects($this->any())\n             ->method('getDataType')\n             ->will($this->returnValue($this->userDataType->name));\n\n        $this->assertTrue($stub->shouldActionDisplayOnDataType());\n    }\n\n    /**\n     * This test checks that `shouldActionDisplayOnDataType` method returns false\n     * if the action should only be displayed for a specific data type.\n     */\n    public function testFalseIsReturnedIfDataTypeDoesNotMatchesTheOneWhereTheActionWasCreatedFor()\n    {\n        $stub = $this->getMockBuilder(AbstractAction::class)\n            ->setConstructorArgs([$this->userDataType, $this->user])\n            ->onlyMethods(['getDataType'])\n            ->getMockForAbstractClass();\n\n        $stub->expects($this->any())\n             ->method('getDataType')\n             ->will($this->returnValue('not users')); // different data type\n\n        $this->assertFalse($stub->shouldActionDisplayOnDataType());\n    }\n}\n"
  },
  {
    "path": "tests/Unit/VoyagerTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests\\Unit;\n\nuse Illuminate\\Support\\Facades\\Config;\nuse TCG\\Voyager\\Facades\\Voyager;\nuse TCG\\Voyager\\Tests\\TestCase;\n\nclass VoyagerTest extends TestCase\n{\n    /**\n     * Dimmers returns an array filled with widget collections.\n     *\n     * This test will make sure that the dimmers method will give us an array\n     * of the collection of the configured widgets.\n     */\n    public function testDimmersReturnsCollectionOfConfiguredWidgets()\n    {\n        Config::set('voyager.dashboard.widgets', [\n            'TCG\\\\Voyager\\\\Tests\\\\Stubs\\\\Widgets\\\\AccessibleDimmer',\n            'TCG\\\\Voyager\\\\Tests\\\\Stubs\\\\Widgets\\\\AccessibleDimmer',\n        ]);\n\n        $dimmers = Voyager::dimmers();\n\n        $this->assertEquals(2, $dimmers[0]->count());\n    }\n\n    /**\n     * Dimmers returns an array filled with widget collections.\n     *\n     * This test will make sure that the dimmers method will give us a\n     * collection of the configured widgets which also should be displayed.\n     */\n    public function testDimmersReturnsCollectionOfConfiguredWidgetsWhichShouldBeDisplayed()\n    {\n        Config::set('voyager.dashboard.widgets', [\n            'TCG\\\\Voyager\\\\Tests\\\\Stubs\\\\Widgets\\\\AccessibleDimmer',\n            'TCG\\\\Voyager\\\\Tests\\\\Stubs\\\\Widgets\\\\InAccessibleDimmer',\n            'TCG\\\\Voyager\\\\Tests\\\\Stubs\\\\Widgets\\\\InAccessibleDimmer',\n        ]);\n\n        $dimmers = Voyager::dimmers();\n\n        $this->assertEquals(1, $dimmers[0]->count());\n    }\n\n    /**\n     * Dimmers returns an array filled with widget collections.\n     *\n     * Tests that we build N / 3 (rounded up) widget collections where\n     * N is the total amount of widgets set in configuration\n     */\n    public function testCreateEnoughDimmerCollectionsToContainAllAvailableDimmers()\n    {\n        Config::set('voyager.dashboard.widgets', [\n            'TCG\\\\Voyager\\\\Tests\\\\Stubs\\\\Widgets\\\\AccessibleDimmer',\n            'TCG\\\\Voyager\\\\Tests\\\\Stubs\\\\Widgets\\\\AccessibleDimmer',\n            'TCG\\\\Voyager\\\\Tests\\\\Stubs\\\\Widgets\\\\AccessibleDimmer',\n            'TCG\\\\Voyager\\\\Tests\\\\Stubs\\\\Widgets\\\\AccessibleDimmer',\n            'TCG\\\\Voyager\\\\Tests\\\\Stubs\\\\Widgets\\\\AccessibleDimmer',\n        ]);\n\n        $dimmers = Voyager::dimmers();\n\n        $this->assertEquals(2, count($dimmers));\n        $this->assertEquals(3, $dimmers[0]->count());\n        $this->assertEquals(2, $dimmers[1]->count());\n    }\n}\n"
  },
  {
    "path": "tests/UserProfileTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Hash;\nuse TCG\\Voyager\\Models\\Role;\nuse TCG\\Voyager\\Models\\User;\n\nclass UserProfileTest extends TestCase\n{\n    use DatabaseTransactions;\n\n    protected $user;\n\n    protected $editPageForTheCurrentUser;\n\n    protected $listOfUsers;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $this->user = Auth::loginUsingId(1);\n\n        $this->editPageForTheCurrentUser = route('voyager.users.edit', [$this->user->id]);\n\n        $this->listOfUsers = route('voyager.users.index');\n    }\n\n    public function testCanSeeTheUserInfoOnHisProfilePage()\n    {\n        $this->visit(route('voyager.profile'))\n             ->seeInElement('h4', $this->user->name)\n             ->seeInElement('.user-email', $this->user->email)\n             ->seeLink(__('voyager::profile.edit'));\n    }\n\n    public function testCanEditUserName()\n    {\n        $this->visit(route('voyager.profile'))\n             ->click(__('voyager::profile.edit'))\n             ->see(__('voyager::profile.edit_user'))\n             ->seePageIs($this->editPageForTheCurrentUser)\n             ->type('New Awesome Name', 'name')\n             ->press(__('voyager::generic.save'))\n             ->seePageIs($this->listOfUsers)\n             ->seeInDatabase(\n                 'users',\n                 ['name' => 'New Awesome Name']\n             );\n    }\n\n    public function testCanEditUserEmail()\n    {\n        $this->visit(route('voyager.profile'))\n             ->click(__('voyager::profile.edit'))\n             ->see(__('voyager::profile.edit_user'))\n             ->seePageIs($this->editPageForTheCurrentUser)\n             ->type('another@email.com', 'email')\n             ->press(__('voyager::generic.save'))\n             ->seePageIs($this->listOfUsers)\n             ->seeInDatabase(\n                 'users',\n                 ['email' => 'another@email.com']\n             );\n    }\n\n    public function testCanEditUserPassword()\n    {\n        $this->visit(route('voyager.profile'))\n             ->click(__('voyager::profile.edit'))\n             ->see(__('voyager::profile.edit_user'))\n             ->seePageIs($this->editPageForTheCurrentUser)\n             ->type('voyager-rocks', 'password')\n             ->press(__('voyager::generic.save'))\n             ->seePageIs($this->listOfUsers);\n\n        $updatedPassword = DB::table('users')->where('id', 1)->first()->password;\n        $this->assertTrue(Hash::check('voyager-rocks', $updatedPassword));\n    }\n\n    public function testCanEditUserAvatar()\n    {\n        $this->visit(route('voyager.profile'))\n             ->click(__('voyager::profile.edit'))\n             ->see(__('voyager::profile.edit_user'))\n             ->seePageIs($this->editPageForTheCurrentUser)\n             ->attach($this->newImagePath(), 'avatar')\n             ->press(__('voyager::generic.save'))\n             ->seePageIs($this->listOfUsers)\n             ->dontSeeInDatabase(\n                 'users',\n                 ['id' => 1, 'avatar' => 'user/default.png']\n             );\n    }\n\n    public function testCanEditUserEmailWithEditorPermissions()\n    {\n        $user = \\TCG\\Voyager\\Models\\User::factory()->for(\\TCG\\Voyager\\Models\\Role::factory())->create();\n        $editPageForTheCurrentUser = route('voyager.users.edit', [$user->id]);\n        // add permissions which reflect a possible editor role\n        // without permissions to edit  users\n        $user->role->permissions()->attach(\\TCG\\Voyager\\Models\\Permission::whereIn('key', [\n            'browse_admin',\n            'browse_users',\n        ])->get()->pluck('id')->all());\n        Auth::onceUsingId($user->id);\n        $this->visit(route('voyager.profile'))\n             ->click(__('voyager::profile.edit'))\n             ->see(__('voyager::profile.edit_user'))\n             ->seePageIs($editPageForTheCurrentUser)\n             ->type('another@email.com', 'email')\n             ->press(__('voyager::generic.save'))\n             ->seePageIs($this->listOfUsers)\n             ->seeInDatabase(\n                 'users',\n                 ['email' => 'another@email.com']\n             );\n    }\n\n    public function testCanSetUserLocale()\n    {\n        $this->visit(route('voyager.profile'))\n             ->click(__('voyager::profile.edit'))\n             ->see(__('voyager::profile.edit_user'))\n             ->seePageIs($this->editPageForTheCurrentUser)\n             ->select('de', 'locale')\n             ->press(__('voyager::generic.save'));\n\n        $user = User::find(1);\n        $this->assertTrue(($user->locale == 'de'));\n\n        // Validate that app()->setLocale() is called\n        Auth::loginUsingId($user->id);\n        $this->visitRoute('voyager.dashboard');\n        $this->assertTrue(($user->locale == $this->app->getLocale()));\n    }\n\n    public function testRedirectBackAfterEditWithoutBrowsePermission()\n    {\n        $user = User::find(1);\n\n        // Remove `browse_users` permission\n        $user->role->permissions()->detach(\n            $user->role->permissions()->where('key', 'browse_users')->first()\n        );\n\n        $this->visit($this->editPageForTheCurrentUser)\n             ->press(__('voyager::generic.save'))\n             ->seePageIs($this->editPageForTheCurrentUser);\n    }\n\n    protected function newImagePath()\n    {\n        return realpath(__DIR__.'/temp/new_avatar.png');\n    }\n}\n"
  },
  {
    "path": "tests/ViewEventTest.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests;\n\nuse TCG\\Voyager\\Facades\\Voyager;\n\nclass ViewEventTest extends TestCase\n{\n    public $eventTrigered = false;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $this->disableExceptionHandling();\n\n        // Add test view\n        app('view')->addLocation(__DIR__.'/views');\n\n        // Add test route\n        $this->app['router']->get('test', function () {\n            return Voyager::view('test', [\n                'foo' => 'bar',\n            ]);\n        });\n    }\n\n    public function testRenderingViewTriggersEvent()\n    {\n        // Load view, and test if view works\n        $this->get('test')\n            ->see('This is a test');\n\n        // Add event on test view\n        Voyager::onLoadingView('test', function ($name, array $parameters) {\n            $this->eventTrigered = true;\n\n            $this->assertEquals('test', $name);\n            $this->assertArrayHasKey('foo', $parameters);\n            $this->assertEquals('bar', $parameters['foo']);\n        });\n\n        // Load view to trigger the event\n        $this->get('test');\n\n        // Test if event is triggered\n        $this->assertTrue($this->eventTrigered);\n    }\n\n    public function testOverwritingViewName()\n    {\n        // Add event on test view\n        Voyager::onLoadingView('test', function (&$name, array $parameters) {\n            $name = 'foo';\n        });\n\n        // Load view to trigger the event, and see if the new view is used\n        $this->get('test')\n            ->see('This is the foo view');\n    }\n\n    public function testOverwritingViewNameAndParameters()\n    {\n        // Add event on test view\n        Voyager::onLoadingView('test', function (&$name, array &$parameters) {\n            $name = 'hello';\n            $parameters['name'] = 'Mark';\n        });\n\n        // Load view to trigger the event, and see if the new view is used\n        $this->get('test')\n            ->see('Hello Mark!');\n    }\n}\n"
  },
  {
    "path": "tests/bootstrap.php",
    "content": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Register The Composer Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader\n| for our application. We just need to utilize it! We'll require it\n| into the script here so that we do not have to worry about the\n| loading of any our classes \"manually\". Feels great to relax.\n|\n*/\n\nrequire __DIR__.'/../vendor/autoload.php';\n\nuse Carbon\\Carbon;\n\n/*\n|--------------------------------------------------------------------------\n| Set The Default Timezone\n|--------------------------------------------------------------------------\n|\n| Here we will set the default timezone for PHP. PHP is notoriously mean\n| if the timezone is not explicitly set. This will be used by each of\n| the PHP date and date-time functions throughout the application.\n|\n*/\n\ndate_default_timezone_set('UTC');\n\nCarbon::setTestNow(Carbon::now());\n"
  },
  {
    "path": "tests/database/factories/RoleFactory.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests\\Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\n \nclass RoleFactory extends Factory\n{\n    protected $model = \\TCG\\Voyager\\Models\\Role::class;\n\n    public function definition()\n    {\n        $role = $this->faker->word();\n\n        return [\n            'name'          => strtolower($role),\n            'display_name'  => ucfirst($role),\n        ];\n    }\n}\n"
  },
  {
    "path": "tests/database/factories/UserFactory.php",
    "content": "<?php\n\nnamespace TCG\\Voyager\\Tests\\Database\\Factories;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Support\\Str;\n \nclass UserFactory extends Factory\n{\n    protected $model = \\TCG\\Voyager\\Models\\User::class;\n\n    public function definition()\n    {\n        static $password;\n\n        return [\n            'name'           => $this->faker->name(),\n            'email'          => $this->faker->unique()->safeEmail(),\n            'password'       => $password ?: $password = bcrypt('secret'),\n            'remember_token' => Str::random(10),\n        ];\n    }\n}\n"
  },
  {
    "path": "tests/rendered_alerts.html",
    "content": "<div class=\"alerts\">\n            <div class=\"alert alert-warning alert-name-test\">\n                            <strong>Title</strong>                            <p>Text</p>                            <a href='http://example.com' class='btn btn-danger'>Button</a>                    </div>\n            <div class=\"alert alert-default alert-name-foo\">\n                            <strong>Bar</strong>                            <p>Foobar</p>                            <a href='http://example.org' class='btn btn-default'>Link</a>                    </div>\n    </div>\n"
  },
  {
    "path": "tests/views/foo.blade.php",
    "content": "This is the foo view"
  },
  {
    "path": "tests/views/hello.blade.php",
    "content": "Hello {{ $name }}!"
  },
  {
    "path": "tests/views/test.blade.php",
    "content": "This is a test"
  },
  {
    "path": "versioning.md",
    "content": "# Versioning for Voyager\n\nWe try to follow [semver](http://semver.org/) versioning standards as best we can.\n\nThis means that any changes to the current stable version of Voyager should be done targeting the `master` branch, which will be included in a new patch releases (e.g. 1.0.**1**).\n\nHowever, any pull requests containing breaking/backwards-incompatible changes **must** target the `develop` branch, which will be included in a new minor or major release (e.g. 1.**1**.0 or **2**.0.0)\n\nIf you have questions about this, please join our Slack team.\n"
  },
  {
    "path": "webpack.mix.js",
    "content": "let mix = require('laravel-mix');\n\n/*\n |--------------------------------------------------------------------------\n | Mix Asset Management\n |--------------------------------------------------------------------------\n |\n | Mix provides a clean, fluent API for defining some Webpack build steps\n | for your Laravel application. By default, we are compiling the Sass\n | file for the application as well as bundling up all the JS files.\n |\n */\n\nmix.options({ processCssUrls: false }).sass('resources/assets/sass/app.scss', 'publishable/assets/css')\n.js('resources/assets/js/app.js', 'publishable/assets/js').vue({ version: 2 })\n.copy('node_modules/tinymce/skins', 'publishable/assets/js/skins')\n.copy('resources/assets/js/skins', 'publishable/assets/js/skins')\n.copy('node_modules/tinymce/themes/silver', 'publishable/assets/js/themes/silver')\n.copy('node_modules/tinymce/models/dom', 'publishable/assets/js/models/dom')\n.copy('node_modules/tinymce/icons/default', 'publishable/assets/js/icons/default')\n.copy('node_modules/ace-builds/src-noconflict', 'publishable/assets/js/ace/libs');\n"
  }
]